summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2017-12-01 13:22:27 +0100
committer Miodrag Milanovic <mmicko@gmail.com>2017-12-01 13:22:27 +0100
commit39176274946d70ff520f265dee8fbd16d5fe0000 (patch)
tree318801d93146752050c9a492654ae3738820e3b9
parent6829ecb3b037d6bfbe0b84e818d17d712f71bce6 (diff)
Updated GENie, BGFX, BX, added BIMG since it is separated now, updated all shader binaries and MAME part of code to support new interfaces [Miodrag Milanovic]
-rw-r--r--3rdparty/bgfx/.appveyor.yml9
-rw-r--r--3rdparty/bgfx/.travis.yml3
-rw-r--r--3rdparty/bgfx/3rdparty/dxsdk/include/d3dx12.h21
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/include/c99_compat.h9
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/builtin_functions.cpp3
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.cpp4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/.appveyor.yml52
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/.gitignore5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/.travis.yml93
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt74
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt69
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.cpp34
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.h4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/README.md21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.AMD.h41
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp1023
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp194
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp139
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h48
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp41
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/hex_float.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/StandAlone/CMakeLists.txt22
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/StandAlone/DirStackFileIncluder.h141
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp998
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/StandAlone/Worklist.h13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/100samplerExternal.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/300.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/300samplerExternal.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/310.comp2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/320.comp5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/320.frag225
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/320.geom134
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/320.tesc150
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/320.tese114
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/320.vert255
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/400.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/435.vert2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/450.comp5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/450.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/450.geom5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/450.tesc9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/450.tese7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/450.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/460.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/460.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/bar.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out50
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out65
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out49
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out49
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out48
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset2.frag.out37
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out91
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out38
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100samplerExternal.frag.out172
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.tesc.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.vert.out21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300samplerExternal.frag.out197
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.geom.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310AofA.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.comp.out19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.frag.out576
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.geom.out251
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tesc.out516
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tese.out276
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.vert.out797
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.frag.out46
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.geom.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tesc.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tese.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.tesc.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.geom.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tesc.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tese.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420_size_gl_in.geom.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430AofA.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430scope.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/435.vert.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.comp.out14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.frag.out15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.geom.out113
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tesc.out12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tese.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.vert.out55
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.frag.out55
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.vert.out51
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/atomic_uint.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badChars.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badMacroArgs.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/comment.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFold.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFoldIntMin.frag.out51
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppDeepNest.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIndent.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIntMinOverNegativeOne.frag.out14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppPassMacroName.frag.out67
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppSimple.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dce.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionSemantics.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.-D-U.frag.out55
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.bad.out45
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.out43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename2.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.frag.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.-D-U.frag.out65
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out207
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out326
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out624
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.implicit-size.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out176
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out109
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.automap.frag.out29
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out169
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.boolConv.vert.out363
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out404
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.charLit.vert.out233
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clip.frag.out123
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.frag.out190
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.geom.out737
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.vert.out194
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.frag.out419
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.geom.out924
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.vert.out561
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.frag.out190
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.geom.out830
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.vert.out229
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.frag.out262
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.geom.out819
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.vert.out382
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.frag.out325
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.vert.out431
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.frag.out399
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.vert.out556
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.frag.out385
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.vert.out505
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.frag.out285
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.vert.out336
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.frag.out250
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.vert.out299
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out1141
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out241
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructArray.vert.out381
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out694
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out69
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out73
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out243
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.1.tese.out457
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.2.tese.out447
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.3.tese.out424
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystruct.init.vert.out112
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out26
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out30
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out118
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out71
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out66
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out66
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out71
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out329
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out316
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out240
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out218
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out207
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float1.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out299
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.fraggeom.frag.out112
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.function.frag.out119
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out623
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out40
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.vert.out33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out853
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.global-const-init.frag.out178
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gs-hs-mix.tesc.out1158
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hlslOffset.vert.out85
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.1.tesc.out171
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.2.tesc.out195
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.3.tesc.out373
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.4.tesc.out681
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.5.tesc.out190
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out604
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out625
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.void.tesc.out94
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.identifier.sample.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.if.frag.out135
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.implicitBool.frag.out541
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.include.vert.out75
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.includeNegative.vert.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inf.vert.out172
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out507
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsic.frexp.frag.out336
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsic.frexp.vert.out222
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.barriers.comp.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out583
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out79
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f1632.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f3216.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out10020
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.lit.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.comp.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out45
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.vert.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out50
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out30
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out6574
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.isfinite.frag.out293
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out34
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out40
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out95
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out95
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out41
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out41
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.localStructuredBuffer.comp.out64
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out160
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out132
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out151
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logicalConvert.frag.out342
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.loopattr.frag.out233
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-1.frag.out187
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-pragma.frag.out268
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.max.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.memberFunCall.frag.out264
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.negative.frag.out68
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.negative2.frag.out74
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.operator.frag.out209
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiDescriptorSet.frag.out168
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.namespace.frag.out181
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonint-index.frag.out152
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.opaque-type-bug.frag.out112
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.overload.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.negative.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenLocal.vert.out366
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenMixed.vert.out150
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out71
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.vert.out61
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out163
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.vec1.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out27
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.register.frag.out27
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out602
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out578
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.dualmode.frag.out157
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.negative.frag.out98
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.negative2.frag.out80
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out469
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out493
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out604
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out580
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out471
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out495
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalar-length.frag.out112
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalar2matrix.frag.out506
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalarCast.vert.out493
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scope.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic-1.vert.out374
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out400
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.vert.out588
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semicolons.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConv.frag.out209
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConvRet.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out225
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sin.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.snorm.uav.comp.out212
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.staticMemberFunction.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.string.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out309
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split-1.vert.out135
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.array.geom.out37
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out250
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.call.vert.out135
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.nested.geom.out374
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.geom.out129
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.vert.out49
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out312
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structStructName.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out276
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.geom.out119
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out286
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out224
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out18
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out326
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out228
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn2.comp.out246
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out191
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out324
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structin.vert.out557
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.subpass.frag.out777
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.switch.frag.out27
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.swizzle.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.synthesizeInput.frag.out172
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.target.frag.out209
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.targetStruct1.frag.out298
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.targetStruct2.frag.out298
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.templatetypes.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.struct.frag.out1197
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.subvec4.frag.out544
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texturebuffer.frag.out153
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.this.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.overload.frag.out247
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.half.frag.out180
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.identifier.frag.out102
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typedef.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.void.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.whileLoop.frag.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/implicitInnerAtomicUint.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/include.vert.out67
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/invalidSwizzle.vert.out38
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/missingBodies.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/newTexture.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonVulkan.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/numeral.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/overlongLiteral.frag.out19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise.tesc.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise_struct_block.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.err2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.err1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.err1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.err2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.err2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.err2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.err2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcefunc.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.everything.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.none.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.strip.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.none.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.everything.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.none.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.invalid-spirv-1.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.invalid-spirv-2.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.everything.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.none.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.everything.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.none.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.specconst.comp.out31
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.everything.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.none.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.everything.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.100ops.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300BuiltIns.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.bitcast.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.330.geom.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tesc.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tese.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.geom.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.noRedecl.tesc.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.tesc.out165
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.comp.out33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.frag.out51
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.vert.out45
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.GeometryShaderPassthrough.geom.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.OVR_multiview.vert.out57
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.Operations.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.accessChain.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard2.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.arbPostDepthCoverage.frag.out42
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.arbPostDepthCoverage_Error.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomic.comp.out141
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomicInt64.comp.out215
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bitCast.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.boolInBlock.frag.out30
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.branch-return.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.buffer.autoassign.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conversion.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOut.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.debugInfo.frag.out280
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out81
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deviceGroup.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.discard-dce.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-simple.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-while-continue-break.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.doWhileLoop.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.drawParams.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.earlyReturnDiscard.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.extPostDepthCoverage.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.extPostDepthCoverage_Error.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.flowControl.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-complex-condition.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-continue-break.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-nobody.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-notest.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-simple.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forLoop.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forwardFun.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionCall.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionSemantics.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glFragColor.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.noautoassign.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslDebugInfo.frag.out58
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslOffsets.vert.out76
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.imageLoadStoreLod.frag.out135
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.frag.out779
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intOps.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.interpOps.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.layoutNested.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.length.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loops.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loopsArtificial.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.looseUniformNoLoc.vert.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix2.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.merge-unreachable.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStruct.comp.out396
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiView.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noBuiltInLoc.vert.out74
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noDeadDecorations.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noLocation.vert.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noWorkgroup.comp.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonSquare.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.offsets.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.paramMemory.frag.out137
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tesc.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tese.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precision.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precisionNonESSamp.frag.out98
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.prepost.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstant.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstantAnon.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.qualifiers.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign-2.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.subpass.frag.out75
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.rw.autoassign.frag.out15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sample.frag.out32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleId.frag.out52
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.samplePosition.frag.out55
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.set.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderDrawParams.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderFragMaskAMD.frag.out122
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderStencilExport.frag.out28
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shiftOps.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shortCircuit.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleFunctionCall.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleMat.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConst.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantComposite.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantOperations.vert.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssbo.autoassign.frag.out161
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssboAlias.frag.out88
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out103
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.storageBuffer.vert.out67
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.switch.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzle.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzleInversion.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out37
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureBuffer.vert.out64
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureGatherBiasLod.frag.out384
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.types.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out42
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.voidFunction.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-continue-break.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-simple.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.whileLoop.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/syntaxError.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenPaste.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.ast.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/constFoldIntMin.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/cppDeepNest.frag117
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/cppIntMinOverNegativeOne.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/cppPassMacroName.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/cppSimple.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/foo.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.-D-U.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.entryPointRename.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.entryPointRename2.vert6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glspv.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.-D-U.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.aliasOpaque.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attributeC11.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attributeGlobalBuffer.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.automap.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.boolConv.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.buffer.frag39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.charLit.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clip.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.geom19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.vert8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.frag7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.geom19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.geom20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.geom21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.vert21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-5.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-5.vert21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-6.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-6.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-7.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-7.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-8.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-8.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-9.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-9.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.conditional.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constantbuffer.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructArray.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructimat.frag52
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.dashI.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.doLoop.frag7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.1.tese32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.2.tese35
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.3.tese31
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystruct.init.vert8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.explicitDescriptorSet.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaque.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaqueInit.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaqueInitMix.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenSubset.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenSubset2.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.forLoop.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.fraggeom.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.function.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.array.dx10.frag4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.basic.dx10.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offset.dx10.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getsampleposition.dx10.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.global-const-init.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gs-hs-mix.tesc119
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hlslOffset.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.3.tesc39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.4.tesc43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.5.tesc43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.ctrlpt-1.tesc43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.ctrlpt-2.tesc47
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.void.tesc2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.implicitBool.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.include.vert8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.includeNegative.vert8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inf.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inoutquals.frag5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsic.frexp.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsic.frexp.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.vert5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.isfinite.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.localStructuredBuffer.comp4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logicalConvert.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.loopattr.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matpack-1.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matpack-pragma.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.memberFunCall.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.negative.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.negative2.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.operator.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiDescriptorSet.frag45
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.namespace.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.nonint-index.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.opaque-type-bug.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialFlattenLocal.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialFlattenMixed.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.preprocessor.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.vert45
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.dualmode.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.negative.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.negative2.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalar-length.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalar2matrix.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalarCast.vert37
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic-1.vert24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.geom5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.vert8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConv.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shift.per-set.frag59
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.snorm.uav.comp15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.assign.frag2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.nested.geom7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.append.fn.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.append.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.floatidx.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.fn2.comp15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.incdec.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structin.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.subpass.frag113
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.switch.frag2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.synthesizeInput.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.target.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.targetStruct1.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.targetStruct2.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texture.struct.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texture.subvec4.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texturebuffer.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.tx.overload.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.half.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.identifier.frag5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/implicitInnerAtomicUint.frag2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc1/badInc.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc1/bar.h3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc1/foo.h3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/bar.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/local.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/notHere.h4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/bar.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/notHere.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/remote.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc2/bar.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/inc2/foo.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/include.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/invalidSwizzle.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/numeral.frag3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/overlongLiteral.frag1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/parent.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/parentBad3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/remap.invalid-spirv-1.spvbin0 -> 219 bytes
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/remap.invalid-spirv-2.spvbin0 -> 212 bytes
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/remap.specconst.comp7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/runtests128
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.450.geom2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.450.tesc3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.460.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.460.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.460.vert6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.OVR_multiview.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.arbPostDepthCoverage.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.arbPostDepthCoverage_Error.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.atomicInt64.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.debugInfo.frag52
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.extPostDepthCoverage.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.extPostDepthCoverage_Error.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslDebugInfo.vert4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslOffsets.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.imageLoadStoreLod.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.int16.frag314
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.looseUniformNoLoc.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.noBuiltInLoc.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.noLocation.vert39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.paramMemory.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.precisionNonESSamp.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.register.subpass.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.sample.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.sampleId.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.samplePosition.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderFragMaskAMD.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderStencilExport.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.ssboAlias.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.storageBuffer.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.targetOpenGL.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.targetVulkan.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.sampler.transform.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.textureBuffer.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.textureGatherBiasLod.frag88
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.tesc8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/tokenPaste.vert6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/validate-shaders.sh269
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/vulkan.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/InitializeGlobals.h3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/ShHandle.h7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h235
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h35
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h247
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp66
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp683
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp689
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp31
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp410
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h85
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/PoolAlloc.cpp62
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp68
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp387
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h22
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp62
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h42
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y118
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp8423
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h639
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp226
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp447
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp40
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h277
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseConst.cpp6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp87
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpMemory.cpp81
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp232
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpSymbols.cpp77
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp18
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp49
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h35
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/CMakeLists.txt9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/osinclude.h3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h174
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp18
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/CMakeLists.txt100
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp130
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/Remap.FromFile.cpp1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp45
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h46
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp80
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.h21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp892
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h28
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp3890
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h234
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp87
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.cpp94
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokens.h21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/known_good.json18
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/update_glslang_sources.py151
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h16
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h1936
-rw-r--r--3rdparty/bgfx/3rdparty/nvtt/nvtt.cpp95
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imconfig.h4
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp4755
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h710
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp1271
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp1094
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h350
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_node_graph_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h1
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl2
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_wheel.h7
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_wheel.inl39
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/dock.inl20
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.inl4
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h5
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl57
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.inl4
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/LICENSE175
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/lib/Remotery.c6697
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/lib/Remotery.h620
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/lib/RemoteryMetal.mm49
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/readme.md216
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/sample/sample.c45
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/screenshot.pngbin87218 -> 0 bytes
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/Console.js194
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/DataViewReader.js47
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/PixelTimeRange.js61
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/Remotery.js330
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/SampleWindow.js178
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/ThreadFrame.js28
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineRow.js376
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineWindow.js270
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/TitleWindow.js59
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Code/WebSocketConnection.js137
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/Styles/Remotery.css212
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Animation.js65
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Bind.js92
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Convert.js218
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Core.js20
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/DOM.js499
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Keyboard.js149
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/LocalStore.js26
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Mouse.js83
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/MurmurHash3.js68
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Button.js131
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/ComboBox.js237
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Container.js34
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/EditBox.js119
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Grid.js252
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Label.js31
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Treeview.js352
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/TreeviewItem.js109
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Window.js243
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/WindowManager.js54
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Styles/WindowManager.css546
-rw-r--r--3rdparty/bgfx/3rdparty/remotery/vis/index.html55
-rw-r--r--3rdparty/bgfx/3rdparty/stb/stb_rect_pack.h4
-rw-r--r--3rdparty/bgfx/3rdparty/stb/stb_truetype.h924
-rw-r--r--3rdparty/bgfx/README.md91
-rw-r--r--3rdparty/bgfx/examples/00-helloworld/helloworld.cpp88
-rw-r--r--3rdparty/bgfx/examples/01-cubes/cubes.cpp67
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/fs_metaballs.bin.h535
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/metaballs.cpp63
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/vs_metaballs.bin.h575
-rw-r--r--3rdparty/bgfx/examples/03-raymarch/raymarch.cpp84
-rw-r--r--3rdparty/bgfx/examples/04-mesh/mesh.cpp64
-rw-r--r--3rdparty/bgfx/examples/05-instancing/instancing.cpp91
-rw-r--r--3rdparty/bgfx/examples/06-bump/bump.cpp174
-rw-r--r--3rdparty/bgfx/examples/07-callback/callback.cpp380
-rw-r--r--3rdparty/bgfx/examples/08-update/cs_update.sc28
-rw-r--r--3rdparty/bgfx/examples/08-update/update.cpp112
-rw-r--r--3rdparty/bgfx/examples/09-hdr/hdr.cpp186
-rw-r--r--3rdparty/bgfx/examples/10-font/font.cpp461
-rw-r--r--3rdparty/bgfx/examples/11-fontsdf/fontsdf.cpp410
-rw-r--r--3rdparty/bgfx/examples/12-lod/lod.cpp75
-rw-r--r--3rdparty/bgfx/examples/13-stencil/stencil.cpp1180
-rw-r--r--3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp1877
-rw-r--r--3rdparty/bgfx/examples/15-shadowmaps-simple/shadowmaps_simple.cpp683
-rw-r--r--3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp3621
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/drawstress.cpp316
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/fs_drawstress.bin.h322
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/vs_drawstress.bin.h450
-rw-r--r--3rdparty/bgfx/examples/18-ibl/ibl.cpp811
-rw-r--r--3rdparty/bgfx/examples/19-oit/oit.cpp396
-rw-r--r--3rdparty/bgfx/examples/20-nanovg/blendish.h4
-rw-r--r--3rdparty/bgfx/examples/20-nanovg/nanovg.cpp115
-rw-r--r--3rdparty/bgfx/examples/21-deferred/deferred.cpp246
-rw-r--r--3rdparty/bgfx/examples/22-windows/windows.cpp85
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/main.cpp276
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp107
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.h4
-rw-r--r--3rdparty/bgfx/examples/24-nbody/nbody.cpp563
-rw-r--r--3rdparty/bgfx/examples/25-c99/helloworld.c2
-rw-r--r--3rdparty/bgfx/examples/26-occlusion/occlusion.cpp269
-rw-r--r--3rdparty/bgfx/examples/27-terrain/terrain.cpp168
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/wireframe.cpp249
-rw-r--r--3rdparty/bgfx/examples/29-debugdraw/debugdraw.cpp182
-rw-r--r--3rdparty/bgfx/examples/30-picking/picking.cpp381
-rw-r--r--3rdparty/bgfx/examples/31-rsm/reflectiveshadowmap.cpp246
-rw-r--r--3rdparty/bgfx/examples/32-particles/particles.cpp78
-rw-r--r--3rdparty/bgfx/examples/33-pom/fs_pom.sc97
-rw-r--r--3rdparty/bgfx/examples/33-pom/makefile10
-rw-r--r--3rdparty/bgfx/examples/33-pom/pom.cpp394
-rw-r--r--3rdparty/bgfx/examples/33-pom/screenshot.pngbin0 -> 103862 bytes
-rw-r--r--3rdparty/bgfx/examples/33-pom/varying.def.sc13
-rw-r--r--3rdparty/bgfx/examples/33-pom/vs_pom.sc29
-rw-r--r--3rdparty/bgfx/examples/34-mvs/mvs.cpp293
-rw-r--r--3rdparty/bgfx/examples/34-mvs/screenshot.pngbin0 -> 159938 bytes
-rw-r--r--3rdparty/bgfx/examples/35-dynamic/dynamic.cpp294
-rw-r--r--3rdparty/bgfx/examples/35-dynamic/screenshot.pngbin0 -> 74844 bytes
-rw-r--r--3rdparty/bgfx/examples/36-sky/fs_sky.sc26
-rw-r--r--3rdparty/bgfx/examples/36-sky/fs_sky_color_banding_fix.sc46
-rw-r--r--3rdparty/bgfx/examples/36-sky/fs_sky_landscape.sc58
-rw-r--r--3rdparty/bgfx/examples/36-sky/makefile10
-rw-r--r--3rdparty/bgfx/examples/36-sky/screenshot.pngbin0 -> 213889 bytes
-rw-r--r--3rdparty/bgfx/examples/36-sky/sky.cpp666
-rw-r--r--3rdparty/bgfx/examples/36-sky/varying.def.sc9
-rw-r--r--3rdparty/bgfx/examples/36-sky/vs_sky.sc70
-rw-r--r--3rdparty/bgfx/examples/36-sky/vs_sky_landscape.sc19
-rw-r--r--3rdparty/bgfx/examples/assets/meshes/meshes.ninja1
-rw-r--r--3rdparty/bgfx/examples/assets/sky/lightmap.pngbin0 -> 507609 bytes
-rw-r--r--3rdparty/bgfx/examples/assets/sky/test_scene.blendbin0 -> 889820 bytes
-rw-r--r--3rdparty/bgfx/examples/assets/sky/test_scene.obj8878
-rw-r--r--3rdparty/bgfx/examples/assets/textures/parallax-d.pngbin0 -> 105656 bytes
-rw-r--r--3rdparty/bgfx/examples/assets/textures/parallax-h.pngbin0 -> 21523 bytes
-rw-r--r--3rdparty/bgfx/examples/assets/textures/parallax-n.pngbin0 -> 34253 bytes
-rw-r--r--3rdparty/bgfx/examples/assets/textures/textures.ninja5
-rw-r--r--3rdparty/bgfx/examples/common/bgfx_utils.cpp82
-rw-r--r--3rdparty/bgfx/examples/common/bgfx_utils.h28
-rw-r--r--3rdparty/bgfx/examples/common/bounds.cpp250
-rw-r--r--3rdparty/bgfx/examples/common/bounds.h42
-rw-r--r--3rdparty/bgfx/examples/common/camera.cpp18
-rw-r--r--3rdparty/bgfx/examples/common/common.h2
-rw-r--r--3rdparty/bgfx/examples/common/cube_atlas.cpp2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp389
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/debugdraw.h10
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h333
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h657
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_texture.bin.h517
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h322
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h453
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h476
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h606
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_texture.bin.h530
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h450
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h534
-rw-r--r--3rdparty/bgfx/examples/common/entry/cmd.cpp18
-rw-r--r--3rdparty/bgfx/examples/common/entry/cmd.h2
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry.cpp359
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry.h70
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_android.cpp92
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp4
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_glfw.cpp192
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_ios.mm37
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_nacl.cpp231
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_noop.cpp4
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_osx.mm112
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_p.h29
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_sdl.cpp25
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_windows.cpp41
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_winrt.cx2
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_x11.cpp14
-rw-r--r--3rdparty/bgfx/examples/common/example-glue.cpp318
-rw-r--r--3rdparty/bgfx/examples/common/font/font_manager.cpp12
-rw-r--r--3rdparty/bgfx/examples/common/font/fs_font_basic.bin.h679
-rw-r--r--3rdparty/bgfx/examples/common/font/fs_font_distance_field.bin.h815
-rw-r--r--3rdparty/bgfx/examples/common/font/fs_font_distance_field_subpixel.bin.h877
-rw-r--r--3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp36
-rw-r--r--3rdparty/bgfx/examples/common/font/text_buffer_manager.h10
-rw-r--r--3rdparty/bgfx/examples/common/font/vs_font_basic.bin.h515
-rw-r--r--3rdparty/bgfx/examples/common/font/vs_font_distance_field.bin.h515
-rw-r--r--3rdparty/bgfx/examples/common/font/vs_font_distance_field_subpixel.bin.h515
-rw-r--r--3rdparty/bgfx/examples/common/image.cpp412
-rw-r--r--3rdparty/bgfx/examples/common/image.h62
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_color.bin.h322
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.bin.h579
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_image.bin.h582
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h635
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_latlong.bin.h721
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.bin.h549
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_ocornut_imgui.bin.h515
-rw-r--r--3rdparty/bgfx/examples/common/imgui/imgui.cpp3699
-rw-r--r--3rdparty/bgfx/examples/common/imgui/imgui.h208
-rw-r--r--3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp446
-rw-r--r--3rdparty/bgfx/examples/common/imgui/ocornut_imgui.h18
-rw-r--r--3rdparty/bgfx/examples/common/imgui/scintilla.cpp136
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_color.bin.h450
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.bin.h456
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_image.bin.h454
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_latlong.bin.h458
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.bin.h528
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_ocornut_imgui.bin.h565
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/fs_nanovg_fill.bin.h1717
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/nanovg.cpp70
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/nanovg.h8
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp323
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h47
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/vs_nanovg_fill.bin.h558
-rw-r--r--3rdparty/bgfx/examples/common/ps/fs_particle.bin.h622
-rw-r--r--3rdparty/bgfx/examples/common/ps/particle_system.cpp85
-rw-r--r--3rdparty/bgfx/examples/common/ps/vs_particle.bin.h524
-rw-r--r--3rdparty/bgfx/examples/common/shaderlib.sh9
-rw-r--r--3rdparty/bgfx/examples/makefile4
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/bunny.binbin2588410 -> 2588410 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/bunny_decimated.binbin191471 -> 191471 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/bunny_patched.binbin975611 -> 975611 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/column.binbin55507 -> 55507 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/cube.binbin930 -> 930 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/hollowcube.binbin40281 -> 40281 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/orb.binbin2818102 -> 2818102 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/platform.binbin1607 -> 1607 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/test_scene.binbin0 -> 145700 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree.binbin100714 -> 100714 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_1.binbin63365 -> 63365 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_2.binbin25719 -> 25719 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_1.binbin36659 -> 36659 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_2.binbin27123 -> 27123 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_1.binbin16061 -> 16061 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_2.binbin10899 -> 10899 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_indirect.binbin439 -> 441 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_init_instances.binbin6767 -> 6769 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update.binbin785 -> 787 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update_instances.binbin1611 -> 1613 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_bump.binbin3633 -> 3635 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_callback.binbin792 -> 794 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_cubes.binbin260 -> 262 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_combine.binbin705 -> 707 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug.binbin325 -> 327 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug_line.binbin260 -> 262 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_geom.binbin1459 -> 1461 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_light.binbin1379 -> 1381 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_blur.binbin1189 -> 1191 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_bright.binbin2451 -> 2453 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lum.binbin2484 -> 2486 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lumavg.binbin3084 -> 3086 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_mesh.binbin1872 -> 1874 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_skybox.binbin800 -> 802 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_tonemap.binbin2528 -> 2530 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.binbin3486 -> 3488 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.binbin1366 -> 1368 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_instancing.binbin260 -> 262 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_mesh.binbin1657 -> 1659 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit.binbin286 -> 288 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb.binbin694 -> 696 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_blit.binbin520 -> 522 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate.binbin634 -> 636 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate_blit.binbin520 -> 522 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_particle.binbin603 -> 605 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_id.binbin387 -> 389 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_shaded.binbin1200 -> 1202 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_pom.binbin0 -> 7111 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_raymarching.binbin10005 -> 10007 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_combine.binbin3396 -> 3398 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_gbuffer.binbin369 -> 371 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_lbuffer.binbin1226 -> 1228 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_shadow.binbin317 -> 319 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_black.binbin228 -> 230 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.binbin3573 -> 3575 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.binbin6534 -> 6536 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.binbin3545 -> 3547 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.binbin6422 -> 6424 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.binbin5203 -> 5205 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.binbin5231 -> 5233 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.binbin3457 -> 3459 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.binbin6070 -> 6072 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.binbin3429 -> 3431 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.binbin5958 -> 5960 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.binbin5087 -> 5089 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.binbin5115 -> 5117 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.binbin11918 -> 11920 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.binbin40071 -> 40073 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.binbin10850 -> 10852 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin35715 -> 35717 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin12436 -> 12438 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.binbin13524 -> 13526 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.binbin3717 -> 3719 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.binbin7206 -> 7208 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.binbin3689 -> 3691 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin7094 -> 7096 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin5347 -> 5349 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.binbin5375 -> 5377 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_texture.binbin623 -> 625 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur.binbin1823 -> 1825 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur_vsm.binbin2183 -> 2185 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth.binbin428 -> 430 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_linear.binbin356 -> 358 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm.binbin568 -> 570 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm_linear.binbin496 -> 498 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_texture.binbin325 -> 327 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth.binbin499 -> 501 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth_vsm.binbin499 -> 501 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur.binbin1823 -> 1825 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur_vsm.binbin2183 -> 2185 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_lighting.binbin2457 -> 2459 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_texture.binbin623 -> 625 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackblank.binbin228 -> 230 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackcolor.binbin270 -> 272 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex1.binbin348 -> 350 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex2.binbin348 -> 350 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontblank.binbin228 -> 230 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontcolor.binbin270 -> 272 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex1.binbin348 -> 350 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex2.binbin348 -> 350 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svside.binbin464 -> 466 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsideblank.binbin256 -> 258 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidecolor.binbin298 -> 300 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidetex.binbin569 -> 571 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture.binbin325 -> 327 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture_lighting.binbin2636 -> 2638 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky.binbin0 -> 1042 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_color_banding_fix.binbin0 -> 1714 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_landscape.binbin0 -> 1760 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh.binbin4239 -> 4241 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh_pd.binbin5631 -> 5633 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow.binbin228 -> 230 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow_pd.binbin477 -> 479 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_black.binbin228 -> 230 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_lighting.binbin2287 -> 2289 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_texture.binbin623 -> 625 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture.binbin325 -> 327 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture_lighting.binbin2480 -> 2482 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_terrain.binbin348 -> 350 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_tree.binbin1413 -> 1415 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update.binbin324 -> 326 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_3d.binbin506 -> 508 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_cmp.binbin393 -> 395 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blit.binbin480 -> 482 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blur.binbin1476 -> 1478 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_fb.binbin484 -> 486 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.binbin1555 -> 1557 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.binbin887 -> 889 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump.binbin2088 -> 2090 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump_instanced.binbin2170 -> 2172 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_callback.binbin712 -> 714 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_cubes.binbin510 -> 512 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_combine.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug_line.binbin510 -> 512 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_geom.binbin2088 -> 2090 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_light.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_blur.binbin1080 -> 1082 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_bright.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lum.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lumavg.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_mesh.binbin944 -> 946 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_skybox.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_tonemap.binbin1028 -> 1030 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.binbin915 -> 917 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.binbin806 -> 808 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_instancing.binbin847 -> 849 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_mesh.binbin1433 -> 1435 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit.binbin802 -> 804 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit_blit.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_particle.binbin1149 -> 1151 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_picking_shaded.binbin1045 -> 1047 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_pom.binbin0 -> 1872 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_raymarching.binbin620 -> 622 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_combine.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_gbuffer.binbin812 -> 814 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_lbuffer.binbin1105 -> 1107 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_shadow.binbin756 -> 758 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color.binbin404 -> 406 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting.binbin1197 -> 1199 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_csm.binbin2146 -> 2148 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear.binbin1237 -> 1239 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_csm.binbin2306 -> 2308 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_omni.binbin2217 -> 2219 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_omni.binbin2057 -> 2059 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_texture.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_depth.binbin404 -> 406 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_hblur.binbin1149 -> 1151 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth.binbin492 -> 494 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth_linear.binbin500 -> 502 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture_lighting.binbin974 -> 976 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_unpackdepth.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_vblur.binbin1149 -> 1151 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_lighting.binbin936 -> 938 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_texture.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svback.binbin594 -> 596 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svfront.binbin404 -> 406 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svside.binbin764 -> 766 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture_lighting.binbin974 -> 976 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky.binbin0 -> 3063 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky_landscape.binbin0 -> 792 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_mesh.binbin1189 -> 1191 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow.binbin404 -> 406 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow_pd.binbin492 -> 494 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color.binbin404 -> 406 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_lighting.binbin906 -> 908 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_texture.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture_lighting.binbin974 -> 976 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain.binbin574 -> 576 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain_height_texture.binbin716 -> 718 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_tree.binbin1058 -> 1060 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_update.binbin518 -> 520 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_vectordisplay_fb.binbin620 -> 622 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.binbin1017 -> 1019 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.binbin759 -> 761 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_bump.binbin2266 -> 2268 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_callback.binbin545 -> 547 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_cubes.binbin129 -> 131 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_combine.binbin610 -> 612 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug.binbin210 -> 212 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug_line.binbin129 -> 131 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_geom.binbin688 -> 690 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_light.binbin1080 -> 1082 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_blur.binbin610 -> 612 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_bright.binbin1652 -> 1654 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lum.binbin1461 -> 1463 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lumavg.binbin1785 -> 1787 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_mesh.binbin1369 -> 1371 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_skybox.binbin517 -> 519 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_tonemap.binbin1665 -> 1667 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.binbin2015 -> 2017 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.binbin1011 -> 1013 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_instancing.binbin129 -> 131 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_mesh.binbin1194 -> 1196 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit.binbin175 -> 177 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb.binbin451 -> 453 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_blit.binbin421 -> 423 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate.binbin423 -> 425 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate_blit.binbin421 -> 423 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_particle.binbin396 -> 398 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_id.binbin216 -> 218 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_shaded.binbin657 -> 659 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_pom.binbin0 -> 5656 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_raymarching.binbin47430 -> 47432 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_combine.binbin2421 -> 2423 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_gbuffer.binbin226 -> 228 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_lbuffer.binbin891 -> 893 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_shadow.binbin198 -> 200 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_black.binbin141 -> 143 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.binbin2718 -> 2720 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.binbin4499 -> 4501 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.binbin2714 -> 2716 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.binbin4463 -> 4465 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.binbin3764 -> 3766 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.binbin3768 -> 3770 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.binbin2678 -> 2680 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.binbin4367 -> 4369 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.binbin2674 -> 2676 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.binbin4411 -> 4413 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.binbin3736 -> 3738 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.binbin3720 -> 3722 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.binbin7579 -> 7581 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.binbin24484 -> 24486 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.binbin7255 -> 7257 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin22304 -> 22306 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin7953 -> 7955 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.binbin8657 -> 8659 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.binbin2798 -> 2800 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.binbin4883 -> 4885 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.binbin2782 -> 2784 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin4819 -> 4821 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin3864 -> 3866 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.binbin3880 -> 3882 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_texture.binbin564 -> 566 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur.binbin952 -> 954 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur_vsm.binbin1144 -> 1146 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth.binbin261 -> 263 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_linear.binbin213 -> 215 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm.binbin325 -> 327 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm_linear.binbin253 -> 255 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_texture.binbin210 -> 212 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth.binbin372 -> 374 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth_vsm.binbin376 -> 378 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur.binbin952 -> 954 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur_vsm.binbin1144 -> 1146 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_lighting.binbin1902 -> 1904 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_texture.binbin564 -> 566 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackblank.binbin141 -> 143 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackcolor.binbin219 -> 221 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex1.binbin193 -> 195 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex2.binbin193 -> 195 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontblank.binbin141 -> 143 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontcolor.binbin219 -> 221 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex1.binbin193 -> 195 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex2.binbin193 -> 195 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svside.binbin269 -> 271 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsideblank.binbin141 -> 143 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidecolor.binbin219 -> 221 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidetex.binbin366 -> 368 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture.binbin210 -> 212 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture_lighting.binbin2053 -> 2055 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky.binbin0 -> 643 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_color_banding_fix.binbin0 -> 1279 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_landscape.binbin0 -> 1425 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh.binbin2456 -> 2458 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh_pd.binbin3292 -> 3294 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow.binbin141 -> 143 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow_pd.binbin342 -> 344 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_black.binbin141 -> 143 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_lighting.binbin1968 -> 1970 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_texture.binbin564 -> 566 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture.binbin210 -> 212 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture_lighting.binbin2161 -> 2163 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_terrain.binbin189 -> 191 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_tree.binbin1010 -> 1012 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update.binbin209 -> 211 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_3d.binbin419 -> 421 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_cmp.binbin254 -> 256 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blit.binbin317 -> 319 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blur.binbin805 -> 807 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_fb.binbin329 -> 331 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.binbin1008 -> 1010 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.binbin556 -> 558 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump.binbin1081 -> 1083 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump_instanced.binbin1075 -> 1077 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_callback.binbin453 -> 455 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_cubes.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_combine.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug_line.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_geom.binbin1081 -> 1083 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_light.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_blur.binbin657 -> 659 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_bright.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lum.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lumavg.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_mesh.binbin569 -> 571 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_skybox.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_tonemap.binbin645 -> 647 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.binbin620 -> 622 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.binbin595 -> 597 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_instancing.binbin466 -> 468 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_mesh.binbin974 -> 976 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit.binbin545 -> 547 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit_blit.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_particle.binbin674 -> 676 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_picking_shaded.binbin666 -> 668 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_pom.binbin0 -> 1021 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_raymarching.binbin347 -> 349 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_combine.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_gbuffer.binbin489 -> 491 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_lbuffer.binbin896 -> 898 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_shadow.binbin493 -> 495 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color.binbin275 -> 277 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting.binbin794 -> 796 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_csm.binbin1443 -> 1445 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear.binbin810 -> 812 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_csm.binbin1507 -> 1509 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_omni.binbin1454 -> 1456 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_omni.binbin1390 -> 1392 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_texture.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_depth.binbin275 -> 277 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_hblur.binbin746 -> 748 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth_linear.binbin343 -> 345 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture_lighting.binbin569 -> 571 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_unpackdepth.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_vblur.binbin746 -> 748 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_lighting.binbin533 -> 535 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_texture.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svback.binbin429 -> 431 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svfront.binbin275 -> 277 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svside.binbin537 -> 539 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture_lighting.binbin569 -> 571 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky.binbin0 -> 2110 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky_landscape.binbin0 -> 495 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_mesh.binbin730 -> 732 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow.binbin275 -> 277 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow_pd.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color.binbin275 -> 277 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_lighting.binbin533 -> 535 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_texture.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture_lighting.binbin569 -> 571 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain.binbin335 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain_height_texture.binbin505 -> 507 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_tree.binbin621 -> 623 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_update.binbin311 -> 313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_vectordisplay_fb.binbin347 -> 349 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.binbin656 -> 658 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.binbin532 -> 534 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/cs_indirect.binbin1332 -> 1332 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/cs_init_instances.binbin3490 -> 3490 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/cs_update.binbin1409 -> 1456 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/cs_update_instances.binbin2798 -> 2798 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_bump.binbin4783 -> 4783 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_callback.binbin495 -> 495 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_cubes.binbin89 -> 89 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_combine.binbin771 -> 771 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug.binbin211 -> 211 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug_line.binbin89 -> 89 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_geom.binbin1053 -> 1053 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_light.binbin1858 -> 1858 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_blur.binbin1007 -> 1007 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_bright.binbin2431 -> 2431 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lum.binbin2359 -> 2359 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lumavg.binbin3282 -> 3282 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_mesh.binbin1797 -> 1797 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_skybox.binbin700 -> 700 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_tonemap.binbin2706 -> 2706 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_mesh.binbin3567 -> 3567 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_skybox.binbin1855 -> 1855 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_instancing.binbin89 -> 89 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_mesh.binbin1419 -> 1419 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit.binbin101 -> 101 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb.binbin373 -> 373 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_blit.binbin411 -> 411 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate.binbin441 -> 441 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate_blit.binbin411 -> 411 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_particle.binbin372 -> 372 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_id.binbin124 -> 124 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_shaded.binbin874 -> 874 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_pom.binbin0 -> 2869 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_raymarching.binbin12616 -> 12616 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_combine.binbin7970 -> 7970 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_gbuffer.binbin188 -> 188 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_lbuffer.binbin1309 -> 1309 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_shadow.binbin173 -> 173 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_black.binbin76 -> 76 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm.binbin4213 -> 4213 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_csm.binbin10222 -> 10222 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear.binbin4257 -> 4257 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_csm.binbin10442 -> 10442 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_omni.binbin7587 -> 7587 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_omni.binbin7541 -> 7541 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard.binbin4085 -> 4085 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_csm.binbin9678 -> 9678 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear.binbin4117 -> 4117 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_csm.binbin9814 -> 9814 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_omni.binbin7448 -> 7448 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_omni.binbin7414 -> 7414 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf.binbin15736 -> 15736 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_csm.binbin63472 -> 63472 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear.binbin15787 -> 15787 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin63918 -> 63918 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin19317 -> 19317 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_omni.binbin19262 -> 19262 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm.binbin4635 -> 4635 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_csm.binbin12152 -> 12152 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear.binbin4679 -> 4679 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin12372 -> 12372 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin8011 -> 8011 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_omni.binbin7965 -> 7965 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_texture.binbin687 -> 687 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur.binbin1746 -> 1746 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur_vsm.binbin2744 -> 2744 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth.binbin302 -> 302 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_linear.binbin254 -> 254 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm.binbin497 -> 497 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm_linear.binbin408 -> 408 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_texture.binbin211 -> 211 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth.binbin421 -> 421 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth_vsm.binbin394 -> 394 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur.binbin1746 -> 1746 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur_vsm.binbin2744 -> 2744 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_lighting.binbin2327 -> 2327 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_texture.binbin687 -> 687 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackblank.binbin165 -> 165 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackcolor.binbin134 -> 134 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex1.binbin441 -> 441 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex2.binbin441 -> 441 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontblank.binbin173 -> 173 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontcolor.binbin134 -> 134 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex1.binbin438 -> 438 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex2.binbin438 -> 438 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svside.binbin468 -> 468 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsideblank.binbin76 -> 76 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidecolor.binbin134 -> 134 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidetex.binbin570 -> 570 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture.binbin211 -> 211 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture_lighting.binbin2558 -> 2558 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky.binbin0 -> 727 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_color_banding_fix.binbin0 -> 1141 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_landscape.binbin0 -> 1281 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh.binbin8399 -> 8399 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh_pd.binbin8652 -> 8652 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow.binbin165 -> 165 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow_pd.binbin400 -> 400 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_black.binbin76 -> 76 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_lighting.binbin2240 -> 2240 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_texture.binbin687 -> 687 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture.binbin211 -> 211 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture_lighting.binbin2562 -> 2562 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_terrain.binbin235 -> 235 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_tree.binbin1312 -> 1312 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_update.binbin217 -> 217 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_3d.binbin519 -> 519 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_cmp.binbin230 -> 230 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blit.binbin414 -> 414 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blur.binbin2012 -> 2012 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_fb.binbin398 -> 398 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_mesh.binbin1521 -> 1521 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_wireframe.binbin759 -> 759 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump.binbin1743 -> 1743 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump_instanced.binbin1936 -> 1936 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_callback.binbin506 -> 506 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_cubes.binbin325 -> 325 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_combine.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug_line.binbin325 -> 325 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_geom.binbin1743 -> 1743 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_light.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_blur.binbin1485 -> 1485 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_bright.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lum.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lumavg.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_mesh.binbin674 -> 674 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_skybox.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_tonemap.binbin1403 -> 1403 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_mesh.binbin671 -> 671 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_skybox.binbin772 -> 772 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_instancing.binbin602 -> 602 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_mesh.binbin1489 -> 1489 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit.binbin604 -> 604 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit_blit.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_particle.binbin885 -> 885 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_picking_shaded.binbin793 -> 793 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_pom.binbin0 -> 1490 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_raymarching.binbin420 -> 420 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_combine.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_gbuffer.binbin506 -> 506 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_lbuffer.binbin1196 -> 1196 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_shadow.binbin516 -> 516 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color.binbin242 -> 242 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting.binbin958 -> 958 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_csm.binbin1578 -> 1578 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear.binbin1003 -> 1003 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_csm.binbin1742 -> 1742 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_omni.binbin1668 -> 1668 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_omni.binbin1504 -> 1504 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_texture.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_depth.binbin242 -> 242 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_hblur.binbin1484 -> 1484 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth.binbin301 -> 301 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth_linear.binbin314 -> 314 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture_lighting.binbin720 -> 720 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_unpackdepth.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_vblur.binbin1484 -> 1484 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_lighting.binbin625 -> 625 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_texture.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svback.binbin444 -> 444 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svfront.binbin242 -> 242 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svside.binbin628 -> 628 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture_lighting.binbin720 -> 720 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky.binbin0 -> 3404 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky_landscape.binbin0 -> 569 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_mesh.binbin906 -> 906 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow.binbin242 -> 242 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow_pd.binbin301 -> 301 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color.binbin242 -> 242 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_lighting.binbin625 -> 625 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_texture.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture_lighting.binbin720 -> 720 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain.binbin395 -> 395 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain_height_texture.binbin538 -> 538 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_tree.binbin787 -> 787 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_update.binbin337 -> 337 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_vectordisplay_fb.binbin420 -> 420 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_mesh.binbin745 -> 745 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_wireframe.binbin557 -> 557 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.binbin1500 -> 1500 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.binbin3658 -> 3658 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update.binbin1571 -> 1618 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.binbin2966 -> 2966 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_bump.binbin4465 -> 4465 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_callback.binbin465 -> 465 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_cubes.binbin83 -> 83 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_combine.binbin687 -> 687 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug.binbin160 -> 160 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug_line.binbin83 -> 83 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_geom.binbin904 -> 904 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_light.binbin1726 -> 1726 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_blur.binbin924 -> 924 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_bright.binbin2303 -> 2303 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lum.binbin2241 -> 2241 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lumavg.binbin3124 -> 3124 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_mesh.binbin1649 -> 1649 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_skybox.binbin608 -> 608 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_tonemap.binbin2554 -> 2554 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.binbin3315 -> 3315 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.binbin1708 -> 1708 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_instancing.binbin83 -> 83 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_mesh.binbin1347 -> 1347 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit.binbin95 -> 95 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.binbin355 -> 355 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_blit.binbin395 -> 395 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.binbin413 -> 413 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate_blit.binbin395 -> 395 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_particle.binbin358 -> 358 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_id.binbin118 -> 118 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_shaded.binbin826 -> 826 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_pom.binbin0 -> 2728 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_raymarching.binbin11950 -> 11950 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_combine.binbin7565 -> 7565 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_gbuffer.binbin176 -> 176 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_lbuffer.binbin1102 -> 1102 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_shadow.binbin161 -> 161 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.binbin76 -> 76 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting.binbin2325 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.binbin3976 -> 3976 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.binbin9840 -> 9840 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.binbin4020 -> 4020 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.binbin10060 -> 10060 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.binbin7231 -> 7231 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.binbin7185 -> 7185 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.binbin3854 -> 3854 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.binbin9320 -> 9320 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.binbin3886 -> 3886 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.binbin9456 -> 9456 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.binbin7098 -> 7098 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.binbin7064 -> 7064 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_omni.binbin3992 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.binbin15123 -> 15123 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.binbin61633 -> 61633 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.binbin15168 -> 15168 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin62055 -> 62055 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin18573 -> 18573 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.binbin18524 -> 18524 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pfc.binbin3535 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.binbin4373 -> 4373 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.binbin11670 -> 11670 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.binbin4417 -> 4417 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin11890 -> 11890 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin7630 -> 7630 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.binbin7584 -> 7584 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.binbin602 -> 602 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_depth.binbin78 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.binbin1619 -> 1619 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.binbin2557 -> 2557 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.binbin290 -> 290 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.binbin242 -> 242 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.binbin465 -> 465 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.binbin382 -> 382 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_texture.binbin160 -> 160 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.binbin356 -> 356 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.binbin329 -> 329 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.binbin1619 -> 1619 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.binbin2557 -> 2557 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_lighting.binbin2098 -> 2098 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_texture.binbin602 -> 602 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.binbin157 -> 157 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackcolor.binbin128 -> 128 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex1.binbin427 -> 427 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex2.binbin427 -> 427 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.binbin165 -> 165 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontcolor.binbin128 -> 128 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex1.binbin424 -> 424 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex2.binbin424 -> 424 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svside.binbin448 -> 448 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsideblank.binbin76 -> 76 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidecolor.binbin128 -> 128 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidetex.binbin544 -> 544 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture.binbin160 -> 160 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture_lighting.binbin2320 -> 2320 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky.binbin0 -> 677 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_color_banding_fix.binbin0 -> 1085 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_landscape.binbin0 -> 1166 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh.binbin7916 -> 7916 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.binbin8286 -> 8286 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.binbin157 -> 157 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.binbin382 -> 382 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_black.binbin76 -> 76 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.binbin2120 -> 2120 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_texture.binbin602 -> 602 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture.binbin160 -> 160 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.binbin2378 -> 2378 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_terrain.binbin215 -> 215 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_tree.binbin1190 -> 1190 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update.binbin161 -> 161 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.binbin438 -> 438 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_cmp.binbin179 -> 179 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blit.binbin351 -> 351 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blur.binbin1917 -> 1917 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_fb.binbin329 -> 329 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.binbin1479 -> 1479 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.binbin707 -> 707 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump.binbin1593 -> 1593 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump_instanced.binbin1756 -> 1756 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_callback.binbin464 -> 464 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_cubes.binbin295 -> 295 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_combine.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug_line.binbin295 -> 295 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_geom.binbin1593 -> 1593 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_light.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_blur.binbin1383 -> 1383 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_bright.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lum.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lumavg.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_mesh.binbin614 -> 614 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_skybox.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_tonemap.binbin1313 -> 1313 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.binbin623 -> 623 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.binbin718 -> 718 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_instancing.binbin536 -> 536 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_mesh.binbin1369 -> 1369 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit.binbin556 -> 556 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit_blit.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_particle.binbin825 -> 825 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_picking_shaded.binbin721 -> 721 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_pom.binbin0 -> 1370 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_raymarching.binbin378 -> 378 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_combine.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_gbuffer.binbin470 -> 470 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_lbuffer.binbin1116 -> 1116 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_shadow.binbin474 -> 474 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color.binbin224 -> 224 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting.binbin874 -> 874 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_csm.binbin1446 -> 1446 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear.binbin919 -> 919 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_csm.binbin1610 -> 1610 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_omni.binbin1536 -> 1536 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_omni.binbin1372 -> 1372 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_depth.binbin224 -> 224 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.binbin1388 -> 1388 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.binbin277 -> 277 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.binbin290 -> 290 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lighting.binbin654 -> 654 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.binbin1388 -> 1388 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_lighting.binbin571 -> 571 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_texture.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svback.binbin420 -> 420 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svfront.binbin224 -> 224 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svside.binbin586 -> 586 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture_lighting.binbin654 -> 654 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky.binbin0 -> 3230 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky_landscape.binbin0 -> 521 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_mesh.binbin828 -> 828 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow.binbin224 -> 224 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow_pd.binbin277 -> 277 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color.binbin224 -> 224 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_lighting.binbin571 -> 571 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_texture.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture_lighting.binbin654 -> 654 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain.binbin359 -> 359 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain_height_texture.binbin501 -> 501 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_tree.binbin715 -> 715 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_update.binbin307 -> 307 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_vectordisplay_fb.binbin378 -> 378 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.binbin515 -> 515 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_bump.binbin5288 -> 5288 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_callback.binbin817 -> 817 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_cubes.binbin404 -> 404 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_combine.binbin1192 -> 1192 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug.binbin551 -> 551 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug_line.binbin404 -> 404 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_geom.binbin1471 -> 1471 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_light.binbin2372 -> 2372 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_blur.binbin1561 -> 1561 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_bright.binbin3183 -> 3183 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lum.binbin3035 -> 3035 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lumavg.binbin4219 -> 4219 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_mesh.binbin2144 -> 2144 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_skybox.binbin1029 -> 1029 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_tonemap.binbin3428 -> 3428 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.binbin4063 -> 4063 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.binbin2271 -> 2271 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_instancing.binbin404 -> 404 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_mesh.binbin1761 -> 1761 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit.binbin416 -> 416 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.binbin769 -> 769 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.binbin877 -> 877 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.binbin817 -> 817 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.binbin877 -> 877 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_particle.binbin713 -> 713 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_id.binbin446 -> 446 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_shaded.binbin1196 -> 1196 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_pom.binbin0 -> 3537 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_raymarching.binbin13125 -> 13125 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_combine.binbin10123 -> 10123 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_gbuffer.binbin562 -> 562 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_lbuffer.binbin1735 -> 1735 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_shadow.binbin504 -> 504 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_black.binbin396 -> 396 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.binbin4924 -> 4924 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.binbin11532 -> 11532 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.binbin4968 -> 4968 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.binbin11752 -> 11752 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.binbin8416 -> 8416 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.binbin8370 -> 8370 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.binbin4784 -> 4784 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.binbin10940 -> 10940 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.binbin4816 -> 4816 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.binbin11076 -> 11076 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.binbin8265 -> 8265 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.binbin8231 -> 8231 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.binbin17105 -> 17105 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.binbin67439 -> 67439 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.binbin17058 -> 17058 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin67493 -> 67493 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin20713 -> 20713 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.binbin20658 -> 20658 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.binbin5356 -> 5356 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.binbin13502 -> 13502 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.binbin5400 -> 5400 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin13722 -> 13722 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin8850 -> 8850 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.binbin8804 -> 8804 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.binbin1041 -> 1041 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.binbin2300 -> 2300 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.binbin3334 -> 3334 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.binbin628 -> 628 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.binbin571 -> 571 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm.binbin823 -> 823 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm_linear.binbin741 -> 741 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.binbin551 -> 551 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.binbin762 -> 762 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.binbin735 -> 735 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.binbin2300 -> 2300 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.binbin3334 -> 3334 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_lighting.binbin2710 -> 2710 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_texture.binbin1041 -> 1041 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.binbin481 -> 481 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackcolor.binbin456 -> 456 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex1.binbin802 -> 802 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex2.binbin802 -> 802 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.binbin496 -> 496 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontcolor.binbin456 -> 456 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex1.binbin799 -> 799 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex2.binbin799 -> 799 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svside.binbin831 -> 831 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsideblank.binbin396 -> 396 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidecolor.binbin456 -> 456 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidetex.binbin930 -> 930 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture.binbin551 -> 551 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture_lighting.binbin3009 -> 3009 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky.binbin0 -> 1041 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_color_banding_fix.binbin0 -> 1479 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_landscape.binbin0 -> 1674 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.binbin10323 -> 10323 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.binbin9649 -> 9649 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.binbin481 -> 481 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.binbin730 -> 730 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_black.binbin396 -> 396 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.binbin2606 -> 2606 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_texture.binbin1041 -> 1041 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture.binbin551 -> 551 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.binbin2937 -> 2937 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.binbin545 -> 545 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.binbin1750 -> 1750 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_update.binbin549 -> 549 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.binbin848 -> 848 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_cmp.binbin570 -> 570 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blit.binbin779 -> 779 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blur.binbin2765 -> 2765 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_fb.binbin734 -> 734 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.binbin1897 -> 1897 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.binbin1143 -> 1143 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump.binbin2130 -> 2130 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump_instanced.binbin2350 -> 2350 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_callback.binbin863 -> 863 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_cubes.binbin673 -> 673 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_combine.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug_line.binbin673 -> 673 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_geom.binbin2130 -> 2130 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_light.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_blur.binbin1952 -> 1952 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_bright.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lum.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lumavg.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_mesh.binbin1036 -> 1036 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_skybox.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_tonemap.binbin1846 -> 1846 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.binbin1038 -> 1038 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.binbin1148 -> 1148 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_instancing.binbin1008 -> 1008 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_mesh.binbin1846 -> 1846 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit.binbin958 -> 958 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit_blit.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_particle.binbin1265 -> 1265 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_picking_shaded.binbin1151 -> 1151 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_pom.binbin0 -> 1868 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_raymarching.binbin777 -> 777 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_combine.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_gbuffer.binbin859 -> 859 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_lbuffer.binbin1757 -> 1757 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_shadow.binbin877 -> 877 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color.binbin581 -> 581 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting.binbin1316 -> 1316 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.binbin1933 -> 1933 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear.binbin1375 -> 1375 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.binbin2153 -> 2153 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_omni.binbin2094 -> 2094 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_omni.binbin1874 -> 1874 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_texture.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_depth.binbin581 -> 581 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_hblur.binbin1924 -> 1924 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth.binbin644 -> 644 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth_linear.binbin655 -> 655 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture_lighting.binbin1087 -> 1087 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_unpackdepth.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_vblur.binbin1924 -> 1924 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_lighting.binbin983 -> 983 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_texture.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svback.binbin794 -> 794 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svfront.binbin581 -> 581 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svside.binbin999 -> 999 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture_lighting.binbin1087 -> 1087 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky.binbin0 -> 3811 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky_landscape.binbin0 -> 931 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_mesh.binbin1267 -> 1267 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow.binbin581 -> 581 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow_pd.binbin644 -> 644 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color.binbin581 -> 581 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_lighting.binbin983 -> 983 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_texture.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture_lighting.binbin1087 -> 1087 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.binbin747 -> 747 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.binbin982 -> 982 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_tree.binbin1165 -> 1165 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_update.binbin685 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_vectordisplay_fb.binbin777 -> 777 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.binbin1121 -> 1121 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.binbin917 -> 917 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/lightmap.ktxbin0 -> 1048644 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/msdf.pngbin0 -> 2688 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/parallax-d.ktxbin0 -> 87508 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/parallax-h.ktxbin0 -> 65604 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/parallax-n.ktxbin0 -> 87508 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/texture_compression_bc1.ktxbin11020 -> 11032 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/texture_compression_bc2.ktxbin21948 -> 21968 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/texture_compression_bc3.ktxbin21948 -> 21968 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/texture_compression_etc1.ktxbin11020 -> 11032 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/texture_compression_etc2.ktxbin11020 -> 11032 bytes
-rw-r--r--3rdparty/bgfx/include/bgfx/bgfx.h1394
-rw-r--r--3rdparty/bgfx/include/bgfx/c99/bgfx.h256
-rw-r--r--3rdparty/bgfx/include/bgfx/c99/platform.h102
-rw-r--r--3rdparty/bgfx/include/bgfx/defines.h298
-rw-r--r--3rdparty/bgfx/include/bgfx/embedded_shader.h16
-rw-r--r--3rdparty/bgfx/include/bgfx/platform.h26
-rw-r--r--3rdparty/bgfx/makefile83
-rw-r--r--3rdparty/bgfx/scripts/bgfx.lua13
-rw-r--r--3rdparty/bgfx/scripts/build.ninja9
-rw-r--r--3rdparty/bgfx/scripts/example-common.lua22
-rw-r--r--3rdparty/bgfx/scripts/genie.lua195
-rw-r--r--3rdparty/bgfx/scripts/geometryc.lua10
-rw-r--r--3rdparty/bgfx/scripts/shader.mk12
-rw-r--r--3rdparty/bgfx/scripts/shaderc.lua8
-rw-r--r--3rdparty/bgfx/scripts/texturec.lua37
-rw-r--r--3rdparty/bgfx/scripts/texturev.lua3
-rw-r--r--3rdparty/bgfx/src/amalgamated.cpp5
-rw-r--r--3rdparty/bgfx/src/bgfx.cpp1979
-rw-r--r--3rdparty/bgfx/src/bgfx_compute.sh374
-rw-r--r--3rdparty/bgfx/src/bgfx_p.h2210
-rw-r--r--3rdparty/bgfx/src/bgfx_shader.sh16
-rw-r--r--3rdparty/bgfx/src/config.h51
-rw-r--r--3rdparty/bgfx/src/debug_renderdoc.cpp32
-rw-r--r--3rdparty/bgfx/src/fs_clear0.bin.h268
-rw-r--r--3rdparty/bgfx/src/fs_clear1.bin.h308
-rw-r--r--3rdparty/bgfx/src/fs_clear2.bin.h346
-rw-r--r--3rdparty/bgfx/src/fs_clear3.bin.h381
-rw-r--r--3rdparty/bgfx/src/fs_clear4.bin.h403
-rw-r--r--3rdparty/bgfx/src/fs_clear5.bin.h436
-rw-r--r--3rdparty/bgfx/src/fs_clear6.bin.h466
-rw-r--r--3rdparty/bgfx/src/fs_clear7.bin.h497
-rw-r--r--3rdparty/bgfx/src/fs_debugfont.bin.h502
-rw-r--r--3rdparty/bgfx/src/glcontext_eagl.mm100
-rw-r--r--3rdparty/bgfx/src/glcontext_ppapi.cpp254
-rw-r--r--3rdparty/bgfx/src/glcontext_ppapi.h43
-rw-r--r--3rdparty/bgfx/src/hmd.h2
-rw-r--r--3rdparty/bgfx/src/hmd_ovr.h26
-rw-r--r--3rdparty/bgfx/src/image.h251
-rw-r--r--3rdparty/bgfx/src/nvapi.cpp183
-rw-r--r--3rdparty/bgfx/src/nvapi.h34
-rw-r--r--3rdparty/bgfx/src/renderer.h155
-rw-r--r--3rdparty/bgfx/src/renderer_d3d.h6
-rw-r--r--3rdparty/bgfx/src/renderer_d3d11.cpp1256
-rw-r--r--3rdparty/bgfx/src/renderer_d3d11.h52
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.cpp829
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.h39
-rw-r--r--3rdparty/bgfx/src/renderer_d3d9.cpp974
-rw-r--r--3rdparty/bgfx/src/renderer_d3d9.h104
-rw-r--r--3rdparty/bgfx/src/renderer_gl.cpp2663
-rw-r--r--3rdparty/bgfx/src/renderer_gl.h336
-rw-r--r--3rdparty/bgfx/src/renderer_mtl.h38
-rw-r--r--3rdparty/bgfx/src/renderer_mtl.mm1002
-rw-r--r--3rdparty/bgfx/src/renderer_noop.cpp143
-rw-r--r--3rdparty/bgfx/src/renderer_vk.cpp368
-rw-r--r--3rdparty/bgfx/src/shader.cpp8
-rw-r--r--3rdparty/bgfx/src/shader_dx9bc.cpp24
-rw-r--r--3rdparty/bgfx/src/shader_dxbc.cpp14
-rw-r--r--3rdparty/bgfx/src/topology.cpp18
-rw-r--r--3rdparty/bgfx/src/vertexdecl.cpp117
-rw-r--r--3rdparty/bgfx/src/vs_clear.bin.h215
-rw-r--r--3rdparty/bgfx/src/vs_debugfont.bin.h518
-rw-r--r--3rdparty/bgfx/tools/geometryc/geometryc.cpp198
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc.cpp1937
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc.h83
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp76
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp101
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp4
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp53
-rw-r--r--3rdparty/bgfx/tools/texturec/texturec.cpp887
-rw-r--r--3rdparty/bgfx/tools/texturev/common.sh16
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture.bin.h488
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture.sc9
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_3d.bin.h453
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_3d.sc16
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_array.bin.h519
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_array.sc10
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_cube.bin.h678
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_cube.sc11
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_cube2.bin.h430
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_cube2.sc16
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_msdf.bin.h508
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_msdf.sc25
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_sdf.bin.h562
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_sdf.sc23
-rw-r--r--3rdparty/bgfx/tools/texturev/texturev.cpp1536
-rw-r--r--3rdparty/bgfx/tools/texturev/varying.def.sc8
-rw-r--r--3rdparty/bgfx/tools/texturev/vs_texture.bin.h481
-rw-r--r--3rdparty/bgfx/tools/texturev/vs_texture.sc2
-rw-r--r--3rdparty/bgfx/tools/texturev/vs_texture_cube.bin.h430
-rw-r--r--3rdparty/bimg/.appveyor.yml20
-rw-r--r--3rdparty/bimg/.editorconfig19
-rw-r--r--3rdparty/bimg/.gitattributes11
-rw-r--r--3rdparty/bimg/.gitignore7
-rw-r--r--3rdparty/bimg/.travis.yml32
-rw-r--r--3rdparty/bimg/3rdparty/edtaa3/LICENSE.md (renamed from 3rdparty/bgfx/3rdparty/edtaa3/LICENSE.md)0
-rw-r--r--3rdparty/bimg/3rdparty/edtaa3/edtaa3func.cpp (renamed from 3rdparty/bgfx/3rdparty/edtaa3/edtaa3func.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/edtaa3/edtaa3func.h (renamed from 3rdparty/bgfx/3rdparty/edtaa3/edtaa3func.h)0
-rw-r--r--3rdparty/bimg/3rdparty/etc1/LICENSE (renamed from 3rdparty/bgfx/3rdparty/etc1/LICENSE)0
-rw-r--r--3rdparty/bimg/3rdparty/etc1/etc1.cpp (renamed from 3rdparty/bgfx/3rdparty/etc1/etc1.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/etc1/etc1.h (renamed from 3rdparty/bgfx/3rdparty/etc1/etc1.h)0
-rw-r--r--3rdparty/bimg/3rdparty/etc2/LICENSE.txt (renamed from 3rdparty/bgfx/3rdparty/etc2/LICENSE.txt)0
-rw-r--r--3rdparty/bimg/3rdparty/etc2/Math.hpp (renamed from 3rdparty/bgfx/3rdparty/etc2/Math.hpp)0
-rw-r--r--3rdparty/bimg/3rdparty/etc2/ProcessCommon.hpp (renamed from 3rdparty/bgfx/3rdparty/etc2/ProcessCommon.hpp)0
-rw-r--r--3rdparty/bimg/3rdparty/etc2/ProcessRGB.cpp (renamed from 3rdparty/bgfx/3rdparty/etc2/ProcessRGB.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/etc2/ProcessRGB.hpp (renamed from 3rdparty/bgfx/3rdparty/etc2/ProcessRGB.hpp)0
-rw-r--r--3rdparty/bimg/3rdparty/etc2/Tables.cpp (renamed from 3rdparty/bgfx/3rdparty/etc2/Tables.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/etc2/Tables.hpp (renamed from 3rdparty/bgfx/3rdparty/etc2/Tables.hpp)0
-rw-r--r--3rdparty/bimg/3rdparty/etc2/Types.hpp (renamed from 3rdparty/bgfx/3rdparty/etc2/Types.hpp)0
-rw-r--r--3rdparty/bimg/3rdparty/etc2/Vector.hpp (renamed from 3rdparty/bgfx/3rdparty/etc2/Vector.hpp)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/LICENSE (renamed from 3rdparty/bgfx/3rdparty/iqa/LICENSE)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/README.txt (renamed from 3rdparty/bgfx/3rdparty/iqa/README.txt)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/include/convolve.h (renamed from 3rdparty/bgfx/3rdparty/iqa/include/convolve.h)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/include/decimate.h (renamed from 3rdparty/bgfx/3rdparty/iqa/include/decimate.h)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/include/iqa.h (renamed from 3rdparty/bgfx/3rdparty/iqa/include/iqa.h)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/include/iqa_os.h (renamed from 3rdparty/bgfx/3rdparty/iqa/include/iqa_os.h)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/include/math_utils.h (renamed from 3rdparty/bgfx/3rdparty/iqa/include/math_utils.h)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/include/ssim.h (renamed from 3rdparty/bgfx/3rdparty/iqa/include/ssim.h)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/source/convolve.c (renamed from 3rdparty/bgfx/3rdparty/iqa/source/convolve.c)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/source/decimate.c (renamed from 3rdparty/bgfx/3rdparty/iqa/source/decimate.c)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/source/math_utils.c (renamed from 3rdparty/bgfx/3rdparty/iqa/source/math_utils.c)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/source/ms_ssim.c (renamed from 3rdparty/bgfx/3rdparty/iqa/source/ms_ssim.c)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/source/mse.c (renamed from 3rdparty/bgfx/3rdparty/iqa/source/mse.c)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/source/psnr.c (renamed from 3rdparty/bgfx/3rdparty/iqa/source/psnr.c)0
-rw-r--r--3rdparty/bimg/3rdparty/iqa/source/ssim.c (renamed from 3rdparty/bgfx/3rdparty/iqa/source/ssim.c)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/LICENSE (renamed from 3rdparty/bgfx/3rdparty/libsquish/LICENSE)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/README (renamed from 3rdparty/bgfx/3rdparty/libsquish/README)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/alpha.cpp (renamed from 3rdparty/bgfx/3rdparty/libsquish/alpha.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/alpha.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/alpha.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/clusterfit.cpp (renamed from 3rdparty/bgfx/3rdparty/libsquish/clusterfit.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/clusterfit.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/clusterfit.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/colourblock.cpp (renamed from 3rdparty/bgfx/3rdparty/libsquish/colourblock.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/colourblock.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/colourblock.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/colourfit.cpp (renamed from 3rdparty/bgfx/3rdparty/libsquish/colourfit.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/colourfit.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/colourfit.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/colourset.cpp (renamed from 3rdparty/bgfx/3rdparty/libsquish/colourset.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/colourset.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/colourset.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/config.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/config.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/maths.cpp (renamed from 3rdparty/bgfx/3rdparty/libsquish/maths.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/maths.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/maths.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/rangefit.cpp (renamed from 3rdparty/bgfx/3rdparty/libsquish/rangefit.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/rangefit.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/rangefit.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/simd.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/simd.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/simd_float.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/simd_float.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/singlecolourfit.cpp (renamed from 3rdparty/bgfx/3rdparty/libsquish/singlecolourfit.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/singlecolourfit.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/singlecolourfit.h)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/singlecolourlookup.inl (renamed from 3rdparty/bgfx/3rdparty/libsquish/singlecolourlookup.inl)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/squish.cpp (renamed from 3rdparty/bgfx/3rdparty/libsquish/squish.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/libsquish/squish.h (renamed from 3rdparty/bgfx/3rdparty/libsquish/squish.h)0
-rw-r--r--3rdparty/bimg/3rdparty/lodepng/README.md (renamed from 3rdparty/bgfx/3rdparty/lodepng/README.md)0
-rw-r--r--3rdparty/bimg/3rdparty/lodepng/lodepng.cpp (renamed from 3rdparty/bgfx/3rdparty/lodepng/lodepng.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/lodepng/lodepng.h (renamed from 3rdparty/bgfx/3rdparty/lodepng/lodepng.h)0
-rw-r--r--3rdparty/bimg/3rdparty/maratis-tcl/LICENSE22
-rw-r--r--3rdparty/bimg/3rdparty/maratis-tcl/m_image.h2340
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/NVIDIA_Texture_Tools_LICENSE.txt (renamed from 3rdparty/bgfx/3rdparty/nvtt/NVIDIA_Texture_Tools_LICENSE.txt)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc6h/bits.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc6h/bits.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc6h/shapes_two.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc6h/shapes_two.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc6h/tile.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc6h/tile.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc6h/zoh.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc6h/zoh.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc6h/zoh_utils.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh_utils.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc6h/zoh_utils.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh_utils.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc6h/zohone.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc6h/zohone.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc6h/zohtwo.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc6h/zohtwo.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode0.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode0.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode1.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode1.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode2.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode2.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode3.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode3.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode4.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode4.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode5.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode5.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode6.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode6.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode7.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode7.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_utils.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_utils.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_utils.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_utils.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/bits.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/bits.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/endpts.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/endpts.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/shapes_three.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/shapes_three.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/shapes_two.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/shapes_two.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/bc7/tile.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/bc7/tile.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/array.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/array.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/array.inl (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/array.inl)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/debug.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/debug.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/defsgnucdarwin.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/defsgnucdarwin.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/defsgnuclinux.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/defsgnuclinux.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/defsgnucwin32.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/defsgnucwin32.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/defsvcwin32.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/defsvcwin32.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/foreach.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/foreach.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/hash.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/hash.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/memory.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/memory.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/nvcore.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/nvcore.h)6
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/posh.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/posh.h)9
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/stdstream.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/stdstream.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/stream.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/stream.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/strlib.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/strlib.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/utils.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvcore/utils.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvmath/fitting.cpp (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvmath/fitting.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvmath/fitting.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvmath/fitting.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvmath/matrix.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvmath/matrix.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvmath/matrix.inl (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvmath/matrix.inl)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvmath/nvmath.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvmath/nvmath.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvmath/plane.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvmath/plane.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvmath/plane.inl (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvmath/plane.inl)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvmath/vector.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvmath/vector.h)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvmath/vector.inl (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvmath/vector.inl)0
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvtt.cpp102
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvtt.h (renamed from 3rdparty/bgfx/3rdparty/nvtt/nvtt.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/AlphaBitmap.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/AlphaBitmap.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/BitScale.cpp (renamed from 3rdparty/bgfx/3rdparty/pvrtc/BitScale.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/BitScale.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/BitScale.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/BitUtility.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/BitUtility.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/Bitmap.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/Bitmap.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/ColorRgba.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/ColorRgba.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/Interval.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/Interval.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/LICENSE.TXT (renamed from 3rdparty/bgfx/3rdparty/pvrtc/LICENSE.TXT)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/MortonTable.cpp (renamed from 3rdparty/bgfx/3rdparty/pvrtc/MortonTable.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/MortonTable.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/MortonTable.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/Point2.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/Point2.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/PvrTcDecoder.cpp (renamed from 3rdparty/bgfx/3rdparty/pvrtc/PvrTcDecoder.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/PvrTcDecoder.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/PvrTcDecoder.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/PvrTcEncoder.cpp (renamed from 3rdparty/bgfx/3rdparty/pvrtc/PvrTcEncoder.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/PvrTcEncoder.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/PvrTcEncoder.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/PvrTcPacket.cpp (renamed from 3rdparty/bgfx/3rdparty/pvrtc/PvrTcPacket.cpp)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/PvrTcPacket.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/PvrTcPacket.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/README.md (renamed from 3rdparty/bgfx/3rdparty/pvrtc/README.md)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/RgbBitmap.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/RgbBitmap.h)0
-rw-r--r--3rdparty/bimg/3rdparty/pvrtc/RgbaBitmap.h (renamed from 3rdparty/bgfx/3rdparty/pvrtc/RgbaBitmap.h)0
-rw-r--r--3rdparty/bimg/3rdparty/stb/stb_image.h (renamed from 3rdparty/bgfx/3rdparty/stb/stb_image.c)1464
-rw-r--r--3rdparty/bimg/3rdparty/stb/stb_image_resize.h2624
-rw-r--r--3rdparty/bimg/3rdparty/stb/stb_image_write.h1092
-rw-r--r--3rdparty/bimg/3rdparty/tinyexr/README.md (renamed from 3rdparty/bgfx/3rdparty/tinyexr/README.md)0
-rw-r--r--3rdparty/bimg/3rdparty/tinyexr/tinyexr.h (renamed from 3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h)18
-rw-r--r--3rdparty/bimg/LICENSE22
-rw-r--r--3rdparty/bimg/README.md49
-rw-r--r--3rdparty/bimg/include/bimg/bimg.h592
-rw-r--r--3rdparty/bimg/include/bimg/decode.h24
-rw-r--r--3rdparty/bimg/include/bimg/encode.h131
-rw-r--r--3rdparty/bimg/makefile376
-rw-r--r--3rdparty/bimg/scripts/bimg.lua24
-rw-r--r--3rdparty/bimg/scripts/bimg_decode.lua27
-rw-r--r--3rdparty/bimg/scripts/bimg_encode.lua42
-rw-r--r--3rdparty/bimg/scripts/genie.lua76
-rw-r--r--3rdparty/bimg/scripts/texturec.lua57
-rw-r--r--3rdparty/bimg/src/bimg_p.h74
-rw-r--r--3rdparty/bimg/src/image.cpp (renamed from 3rdparty/bgfx/src/image.cpp)1555
-rw-r--r--3rdparty/bimg/src/image_decode.cpp690
-rw-r--r--3rdparty/bimg/src/image_encode.cpp554
-rw-r--r--3rdparty/bimg/tools/texturec/texturec.cpp913
-rw-r--r--3rdparty/bx/.appveyor.yml5
-rw-r--r--3rdparty/bx/3rdparty/.editorconfig6
-rw-r--r--3rdparty/bx/3rdparty/ini/README.md1
-rw-r--r--3rdparty/bx/3rdparty/ini/ini.h1054
-rw-r--r--3rdparty/bx/3rdparty/ini/ini.md333
-rw-r--r--3rdparty/bx/README.md4
-rw-r--r--3rdparty/bx/include/bx/allocator.h47
-rw-r--r--3rdparty/bx/include/bx/bx.h35
-rw-r--r--3rdparty/bx/include/bx/commandline.h6
-rw-r--r--3rdparty/bx/include/bx/config.h22
-rw-r--r--3rdparty/bx/include/bx/cpu.h304
-rw-r--r--3rdparty/bx/include/bx/crtimpl.h149
-rw-r--r--3rdparty/bx/include/bx/debug.h3
-rw-r--r--3rdparty/bx/include/bx/easing.h1003
-rw-r--r--3rdparty/bx/include/bx/file.h98
-rw-r--r--3rdparty/bx/include/bx/filepath.h108
-rw-r--r--3rdparty/bx/include/bx/float4x4_t.h146
-rw-r--r--3rdparty/bx/include/bx/handlealloc.h12
-rw-r--r--3rdparty/bx/include/bx/hash.h76
-rw-r--r--3rdparty/bx/include/bx/inline/allocator.inl9
-rw-r--r--3rdparty/bx/include/bx/inline/bx.inl36
-rw-r--r--3rdparty/bx/include/bx/inline/cpu.inl332
-rw-r--r--3rdparty/bx/include/bx/inline/easing.inl16
-rw-r--r--3rdparty/bx/include/bx/inline/float4x4_t.inl150
-rw-r--r--3rdparty/bx/include/bx/inline/fpumath.inl1352
-rw-r--r--3rdparty/bx/include/bx/inline/handlealloc.inl66
-rw-r--r--3rdparty/bx/include/bx/inline/hash.inl67
-rw-r--r--3rdparty/bx/include/bx/inline/math.inl834
-rw-r--r--3rdparty/bx/include/bx/inline/mpscqueue.inl6
-rw-r--r--3rdparty/bx/include/bx/inline/pixelformat.inl8
-rw-r--r--3rdparty/bx/include/bx/inline/readerwriter.inl42
-rw-r--r--3rdparty/bx/include/bx/inline/rng.inl25
-rw-r--r--3rdparty/bx/include/bx/inline/simd128_langext.inl281
-rw-r--r--3rdparty/bx/include/bx/inline/simd128_neon.inl252
-rw-r--r--3rdparty/bx/include/bx/inline/simd128_ref.inl301
-rw-r--r--3rdparty/bx/include/bx/inline/simd128_sse.inl39
-rw-r--r--3rdparty/bx/include/bx/inline/simd128_swizzle.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/simd256_avx.inl11
-rw-r--r--3rdparty/bx/include/bx/inline/simd256_ref.inl11
-rw-r--r--3rdparty/bx/include/bx/inline/simd_ni.inl7
-rw-r--r--3rdparty/bx/include/bx/inline/spscqueue.inl22
-rw-r--r--3rdparty/bx/include/bx/inline/string.inl51
-rw-r--r--3rdparty/bx/include/bx/macros.h21
-rw-r--r--3rdparty/bx/include/bx/math.h (renamed from 3rdparty/bx/include/bx/fpumath.h)94
-rw-r--r--3rdparty/bx/include/bx/mpscqueue.h5
-rw-r--r--3rdparty/bx/include/bx/os.h23
-rw-r--r--3rdparty/bx/include/bx/pixelformat.h11
-rw-r--r--3rdparty/bx/include/bx/platform.h46
-rw-r--r--3rdparty/bx/include/bx/process.h75
-rw-r--r--3rdparty/bx/include/bx/readerwriter.h59
-rw-r--r--3rdparty/bx/include/bx/rng.h20
-rw-r--r--3rdparty/bx/include/bx/settings.h61
-rw-r--r--3rdparty/bx/include/bx/simd_t.h324
-rw-r--r--3rdparty/bx/include/bx/spscqueue.h12
-rw-r--r--3rdparty/bx/include/bx/string.h132
-rw-r--r--3rdparty/bx/include/bx/thread.h13
-rw-r--r--3rdparty/bx/include/bx/url.h52
-rw-r--r--3rdparty/bx/include/compat/msvc/dirent.h4
-rw-r--r--3rdparty/bx/include/compat/nacl/memory.h1
-rw-r--r--3rdparty/bx/makefile31
-rw-r--r--3rdparty/bx/scripts/bin2c.lua5
-rw-r--r--3rdparty/bx/scripts/bx.lua22
-rw-r--r--3rdparty/bx/scripts/genie.lua32
-rw-r--r--3rdparty/bx/scripts/toolchain.lua212
-rw-r--r--3rdparty/bx/src/allocator.cpp75
-rw-r--r--3rdparty/bx/src/amalgamated.cpp11
-rw-r--r--3rdparty/bx/src/bx.cpp1
-rw-r--r--3rdparty/bx/src/bx_p.h44
-rw-r--r--3rdparty/bx/src/commandline.cpp29
-rw-r--r--3rdparty/bx/src/crtimpl.cpp361
-rw-r--r--3rdparty/bx/src/crtnone.cpp33
-rw-r--r--3rdparty/bx/src/debug.cpp46
-rw-r--r--3rdparty/bx/src/dtoa.cpp668
-rw-r--r--3rdparty/bx/src/easing.cpp64
-rw-r--r--3rdparty/bx/src/file.cpp408
-rw-r--r--3rdparty/bx/src/filepath.cpp543
-rw-r--r--3rdparty/bx/src/fpumath.cpp166
-rw-r--r--3rdparty/bx/src/hash.cpp151
-rw-r--r--3rdparty/bx/src/math.cpp744
-rw-r--r--3rdparty/bx/src/mutex.cpp11
-rw-r--r--3rdparty/bx/src/os.cpp256
-rw-r--r--3rdparty/bx/src/process.cpp169
-rw-r--r--3rdparty/bx/src/semaphore.cpp187
-rw-r--r--3rdparty/bx/src/settings.cpp214
-rw-r--r--3rdparty/bx/src/sort.cpp1
-rw-r--r--3rdparty/bx/src/string.cpp407
-rw-r--r--3rdparty/bx/src/thread.cpp37
-rw-r--r--3rdparty/bx/src/timer.cpp9
-rw-r--r--3rdparty/bx/src/url.cpp158
-rw-r--r--3rdparty/bx/tests/atomic_test.cpp46
-rw-r--r--3rdparty/bx/tests/easing_test.cpp58
-rw-r--r--3rdparty/bx/tests/filepath_test.cpp136
-rw-r--r--3rdparty/bx/tests/handle_bench.cpp2
-rw-r--r--3rdparty/bx/tests/handle_test.cpp10
-rw-r--r--3rdparty/bx/tests/hash_test.cpp79
-rw-r--r--3rdparty/bx/tests/macros_test.cpp2
-rw-r--r--3rdparty/bx/tests/main_test.cpp19
-rw-r--r--3rdparty/bx/tests/math_test.cpp (renamed from 3rdparty/bx/tests/fpumath_test.cpp)24
-rw-r--r--3rdparty/bx/tests/os_test.cpp16
-rw-r--r--3rdparty/bx/tests/queue_test.cpp6
-rw-r--r--3rdparty/bx/tests/rng_test.cpp88
-rw-r--r--3rdparty/bx/tests/settings_test.cpp49
-rw-r--r--3rdparty/bx/tests/simd_bench.cpp14
-rw-r--r--3rdparty/bx/tests/simd_test.cpp9
-rw-r--r--3rdparty/bx/tests/sort_test.cpp10
-rw-r--r--3rdparty/bx/tests/string_test.cpp300
-rw-r--r--3rdparty/bx/tests/thread_test.cpp41
-rw-r--r--3rdparty/bx/tests/tokenizecmd_test.cpp18
-rw-r--r--3rdparty/bx/tests/url_test.cpp69
-rw-r--r--3rdparty/bx/tests/vsnprintf_test.cpp6
-rwxr-xr-x3rdparty/bx/tools/bin/darwin/geniebin496056 -> 508344 bytes
-rwxr-xr-x3rdparty/bx/tools/bin/linux/geniebin478872 -> 491168 bytes
-rw-r--r--3rdparty/bx/tools/bin/windows/genie.exebin485888 -> 495104 bytes
-rw-r--r--3rdparty/bx/tools/bin2c/bin2c.cpp31
-rw-r--r--3rdparty/genie/LICENSE2
-rw-r--r--3rdparty/genie/README.md10
-rw-r--r--3rdparty/genie/build/gmake.darwin/genie.make10
-rw-r--r--3rdparty/genie/build/gmake.linux/genie.make6
-rw-r--r--3rdparty/genie/build/gmake.windows/genie.make6
-rw-r--r--3rdparty/genie/docs/scripting-reference.md1161
-rw-r--r--3rdparty/genie/src/actions/cmake/_cmake.lua9
-rw-r--r--3rdparty/genie/src/actions/cmake/cmake_project.lua309
-rw-r--r--3rdparty/genie/src/actions/cmake/cmake_workspace.lua13
-rw-r--r--3rdparty/genie/src/actions/fastbuild/fastbuild_project.lua4
-rw-r--r--3rdparty/genie/src/actions/make/make_cpp.lua20
-rw-r--r--3rdparty/genie/src/actions/make/make_vala.lua4
-rw-r--r--3rdparty/genie/src/actions/qbs/qbs_cpp.lua4
-rw-r--r--3rdparty/genie/src/actions/vstudio/vstudio_vcxproj.lua56
-rw-r--r--3rdparty/genie/src/actions/xcode/xcode4_workspace.lua42
-rw-r--r--3rdparty/genie/src/actions/xcode/xcode_common.lua19
-rw-r--r--3rdparty/genie/src/base/api.lua14
-rw-r--r--3rdparty/genie/src/host/scripts.c224
-rw-r--r--3rdparty/genie/src/tools/gcc.lua46
-rw-r--r--3rdparty/genie/src/tools/ow.lua59
-rw-r--r--3rdparty/genie/src/tools/snc.lua55
-rw-r--r--bgfx/shaders/dx11/chains/blurs/fs_smart-blur.binbin2281 -> 2283 bytes
-rw-r--r--bgfx/shaders/dx11/chains/blurs/vs_smart-blur.binbin909 -> 911 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom-deluxe.binbin7413 -> 7415 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom.binbin7171 -> 7173 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/fs_gaussx.binbin2416 -> 2418 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/fs_gaussy.binbin2416 -> 2418 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_apply.binbin936 -> 938 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_update.binbin949 -> 951 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/vs_crt-geom.binbin4910 -> 4912 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/vs_gaussx.binbin798 -> 800 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/vs_gaussy.binbin798 -> 800 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_apply.binbin503 -> 505 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_update.binbin503 -> 505 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt/fs_crt-caligari.binbin2478 -> 2480 bytes
-rw-r--r--bgfx/shaders/dx11/chains/crt/vs_crt-caligari.binbin707 -> 709 bytes
-rw-r--r--bgfx/shaders/dx11/chains/default/fs_blit.binbin396 -> 398 bytes
-rw-r--r--bgfx/shaders/dx11/chains/default/vs_blit.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/eagle/fs_eagle.binbin5882 -> 5884 bytes
-rw-r--r--bgfx/shaders/dx11/chains/eagle/vs_eagle.binbin1713 -> 1715 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/fs_color.binbin749 -> 751 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/fs_deconverge.binbin672 -> 674 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/fs_defocus.binbin1292 -> 1294 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/fs_distortion.binbin4216 -> 4218 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/fs_ntsc_decode.binbin3710 -> 3712 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/fs_ntsc_encode.binbin1727 -> 1729 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/fs_phosphor.binbin634 -> 636 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/fs_post.binbin3735 -> 3737 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/fs_prescale.binbin396 -> 398 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/vs_color.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/vs_deconverge.binbin1336 -> 1338 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/vs_defocus.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/vs_distortion.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/vs_ntsc_decode.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/vs_ntsc_encode.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/vs_phosphor.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/vs_post.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hlsl/vs_prescale.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hqx/fs_hq2x.binbin6600 -> 6602 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hqx/fs_hq3x.binbin6612 -> 6614 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hqx/fs_hq4x.binbin6612 -> 6614 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hqx/vs_hq2x.binbin909 -> 911 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hqx/vs_hq3x.binbin909 -> 911 bytes
-rw-r--r--bgfx/shaders/dx11/chains/hqx/vs_hq4x.binbin909 -> 911 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/fs_blit.binbin396 -> 398 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/fs_bob-and-ghost-deinterlace.binbin1451 -> 1453 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/fs_deposterize-pass0.binbin1296 -> 1298 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/fs_deposterize-pass1.binbin1296 -> 1298 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/fs_saturation.binbin523 -> 525 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/vs_blit.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/vs_bob-and-ghost-deinterlace.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/vs_deposterize-pass0.binbin817 -> 819 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/vs_deposterize-pass1.binbin817 -> 819 bytes
-rw-r--r--bgfx/shaders/dx11/chains/misc/vs_saturation.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_gaussian.binbin2663 -> 2665 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_offset_sat.binbin523 -> 525 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_gaussian.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_offset_sat.binbin615 -> 617 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_gaussian.binbin2663 -> 2665 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_offset_sat.binbin523 -> 525 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_gaussian.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_offset_sat.binbin615 -> 617 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_gaussian.binbin2663 -> 2665 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_offset_sat.binbin523 -> 525 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_gaussian.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_offset_sat.binbin615 -> 617 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_gaussian.binbin2663 -> 2665 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_offset_sat.binbin523 -> 525 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_gaussian.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_offset_sat.binbin615 -> 617 bytes
-rw-r--r--bgfx/shaders/dx11/chains/unfiltered/fs_blit.binbin396 -> 398 bytes
-rw-r--r--bgfx/shaders/dx11/chains/unfiltered/vs_blit.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/warp/fs_dilation-horizontal-fast.binbin588 -> 590 bytes
-rw-r--r--bgfx/shaders/dx11/chains/warp/vs_dilation-horizontal-fast.binbin705 -> 707 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/fs_xbr-lv1-noblend.binbin3680 -> 3682 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-3d.binbin9300 -> 9302 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-fast.binbin4942 -> 4944 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-noblend.binbin5395 -> 5397 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2.binbin6518 -> 6520 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3-noblend.binbin7423 -> 7425 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3.binbin7922 -> 7924 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_custom-jinc2-sharper.binbin5497 -> 5499 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.binbin7650 -> 7652 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.binbin7649 -> 7651 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.binbin6949 -> 6951 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.binbin7662 -> 7664 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.binbin7661 -> 7663 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.binbin6961 -> 6963 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.binbin7650 -> 7652 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.binbin7649 -> 7651 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.binbin6949 -> 6951 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.binbin4342 -> 4344 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.binbin4262 -> 4264 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.binbin4118 -> 4120 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass0.binbin5256 -> 5258 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass1.binbin5921 -> 5923 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass2.binbin4840 -> 4842 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_custom-jinc2-sharper.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.binbin1093 -> 1095 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.binbin1093 -> 1095 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.binbin1093 -> 1095 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass0.binbin1053 -> 1055 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass1.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass2.binbin1093 -> 1095 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass3.binbin1093 -> 1095 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/vs_xbr-lv1-noblend.binbin729 -> 731 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-3d.binbin1343 -> 1345 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-fast.binbin909 -> 911 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-noblend.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3-noblend.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.binbin11017 -> 11019 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.binbin9249 -> 9251 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.binbin8969 -> 8971 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.binbin9293 -> 9295 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.binbin8853 -> 8855 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.binbin8433 -> 8435 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.binbin9553 -> 9555 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.binbin11465 -> 11467 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.binbin3587 -> 3589 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.binbin11735 -> 11737 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.binbin4839 -> 4841 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.binbin4143 -> 4145 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.binbin4764 -> 4766 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.binbin4531 -> 4533 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.binbin3084 -> 3086 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.binbin3707 -> 3709 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.binbin829 -> 831 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.binbin829 -> 831 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.binbin829 -> 831 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.binbin9331 -> 9333 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.binbin5449 -> 5451 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.binbin893 -> 895 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.binbin13896 -> 13898 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.binbin6163 -> 6165 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.binbin4519 -> 4521 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.binbin7044 -> 7046 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.binbin673 -> 675 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.binbin1337 -> 1339 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.binbin705 -> 707 bytes
-rw-r--r--bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.binbin705 -> 707 bytes
-rw-r--r--bgfx/shaders/dx11/fs_gui.binbin396 -> 398 bytes
-rw-r--r--bgfx/shaders/dx11/fs_screen.binbin396 -> 398 bytes
-rw-r--r--bgfx/shaders/dx11/vs_gui.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx11/vs_screen.binbin575 -> 577 bytes
-rw-r--r--bgfx/shaders/dx9/chains/blurs/fs_smart-blur.binbin1354 -> 1356 bytes
-rw-r--r--bgfx/shaders/dx9/chains/blurs/vs_smart-blur.binbin564 -> 566 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom-deluxe.binbin5458 -> 5460 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.binbin5208 -> 5210 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/fs_gaussx.binbin1833 -> 1835 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.binbin1833 -> 1835 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_apply.binbin881 -> 883 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_update.binbin798 -> 800 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.binbin3289 -> 3291 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/vs_gaussx.binbin673 -> 675 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/vs_gaussy.binbin673 -> 675 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.binbin282 -> 284 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.binbin282 -> 284 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt/fs_crt-caligari.binbin1887 -> 1889 bytes
-rw-r--r--bgfx/shaders/dx9/chains/crt/vs_crt-caligari.binbin462 -> 464 bytes
-rw-r--r--bgfx/shaders/dx9/chains/default/fs_blit.binbin229 -> 231 bytes
-rw-r--r--bgfx/shaders/dx9/chains/default/vs_blit.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/eagle/fs_eagle.binbin3127 -> 3129 bytes
-rw-r--r--bgfx/shaders/dx9/chains/eagle/vs_eagle.binbin896 -> 898 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/fs_color.binbin682 -> 684 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/fs_deconverge.binbin349 -> 351 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/fs_defocus.binbin789 -> 791 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/fs_distortion.binbin3145 -> 3147 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/fs_ntsc_decode.binbin4247 -> 4249 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/fs_ntsc_encode.binbin1748 -> 1750 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/fs_phosphor.binbin471 -> 473 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/fs_post.binbin3372 -> 3374 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/fs_prescale.binbin229 -> 231 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/vs_color.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/vs_deconverge.binbin1059 -> 1061 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/vs_defocus.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/vs_distortion.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/vs_ntsc_decode.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/vs_ntsc_encode.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/vs_phosphor.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/vs_post.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hlsl/vs_prescale.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hqx/fs_hq2x.binbin3697 -> 3699 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hqx/fs_hq3x.binbin3721 -> 3723 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hqx/fs_hq4x.binbin3697 -> 3699 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hqx/vs_hq2x.binbin564 -> 566 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hqx/vs_hq3x.binbin564 -> 566 bytes
-rw-r--r--bgfx/shaders/dx9/chains/hqx/vs_hq4x.binbin564 -> 566 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/fs_blit.binbin229 -> 231 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/fs_bob-and-ghost-deinterlace.binbin1156 -> 1158 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/fs_deposterize-pass0.binbin885 -> 887 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/fs_deposterize-pass1.binbin885 -> 887 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/fs_saturation.binbin360 -> 362 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/vs_blit.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/vs_bob-and-ghost-deinterlace.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/vs_deposterize-pass0.binbin488 -> 490 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.binbin488 -> 490 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/vs_saturation.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_gaussian.binbin1500 -> 1502 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_offset_sat.binbin360 -> 362 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_gaussian.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_offset_sat.binbin350 -> 352 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_gaussian.binbin1500 -> 1502 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_offset_sat.binbin360 -> 362 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_offset_sat.binbin350 -> 352 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_gaussian.binbin1500 -> 1502 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_offset_sat.binbin360 -> 362 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_offset_sat.binbin350 -> 352 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_gaussian.binbin1500 -> 1502 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_offset_sat.binbin360 -> 362 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_offset_sat.binbin350 -> 352 bytes
-rw-r--r--bgfx/shaders/dx9/chains/unfiltered/fs_blit.binbin229 -> 231 bytes
-rw-r--r--bgfx/shaders/dx9/chains/unfiltered/vs_blit.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.binbin345 -> 347 bytes
-rw-r--r--bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.binbin456 -> 458 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/fs_xbr-lv1-noblend.binbin2261 -> 2263 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-3d.binbin4693 -> 4695 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-fast.binbin2519 -> 2521 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.binbin2596 -> 2598 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2.binbin3235 -> 3237 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.binbin3632 -> 3634 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.binbin4011 -> 4013 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_custom-jinc2-sharper.binbin4962 -> 4964 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.binbin4203 -> 4205 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.binbin4130 -> 4132 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.binbin3710 -> 3712 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.binbin4223 -> 4225 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.binbin4218 -> 4220 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.binbin3730 -> 3732 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.binbin4203 -> 4205 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.binbin4130 -> 4132 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.binbin3710 -> 3712 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.binbin2447 -> 2449 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.binbin2363 -> 2365 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.binbin2275 -> 2277 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass0.binbin2693 -> 2695 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass1.binbin3230 -> 3232 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass2.binbin2521 -> 2523 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_custom-jinc2-sharper.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.binbin648 -> 650 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.binbin648 -> 650 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.binbin648 -> 650 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass0.binbin620 -> 622 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass1.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass2.binbin648 -> 650 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.binbin648 -> 650 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.binbin480 -> 482 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.binbin726 -> 728 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.binbin564 -> 566 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.binbin4942 -> 4944 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.binbin4862 -> 4864 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.binbin4614 -> 4616 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.binbin5014 -> 5016 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.binbin4550 -> 4552 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.binbin4390 -> 4392 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.binbin5298 -> 5300 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.binbin5062 -> 5064 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.binbin1868 -> 1870 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.binbin6084 -> 6086 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.binbin3032 -> 3034 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.binbin2032 -> 2034 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.binbin2077 -> 2079 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.binbin2240 -> 2242 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.binbin1889 -> 1891 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.binbin2112 -> 2114 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.binbin520 -> 522 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.binbin520 -> 522 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.binbin520 -> 522 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.binbin4436 -> 4438 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.binbin3870 -> 3872 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.binbin592 -> 594 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.binbin6757 -> 6759 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.binbin3664 -> 3666 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.binbin3500 -> 3502 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.binbin4665 -> 4667 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.binbin420 -> 422 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.binbin768 -> 770 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.binbin456 -> 458 bytes
-rw-r--r--bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.binbin456 -> 458 bytes
-rw-r--r--bgfx/shaders/dx9/fs_gui.binbin229 -> 231 bytes
-rw-r--r--bgfx/shaders/dx9/fs_screen.binbin229 -> 231 bytes
-rw-r--r--bgfx/shaders/dx9/vs_gui.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/dx9/vs_screen.binbin318 -> 320 bytes
-rw-r--r--bgfx/shaders/essl/chains/blurs/fs_smart-blur.binbin3295 -> 3295 bytes
-rw-r--r--bgfx/shaders/essl/chains/blurs/vs_smart-blur.binbin1178 -> 1178 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/fs_crt-geom-deluxe.binbin7529 -> 7529 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/fs_crt-geom.binbin7197 -> 7197 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/fs_gaussx.binbin2081 -> 2081 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/fs_gaussy.binbin2081 -> 2081 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/fs_phosphor_apply.binbin705 -> 705 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/fs_phosphor_update.binbin999 -> 999 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/vs_crt-geom.binbin5019 -> 5019 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/vs_gaussx.binbin684 -> 684 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/vs_gaussy.binbin684 -> 684 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/vs_phosphor_apply.binbin334 -> 334 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt-geom/vs_phosphor_update.binbin334 -> 334 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt/fs_crt-caligari.binbin3678 -> 3678 bytes
-rw-r--r--bgfx/shaders/essl/chains/crt/vs_crt-caligari.binbin729 -> 729 bytes
-rw-r--r--bgfx/shaders/essl/chains/default/fs_blit.binbin238 -> 238 bytes
-rw-r--r--bgfx/shaders/essl/chains/default/vs_blit.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/eagle/fs_eagle.binbin6946 -> 6946 bytes
-rw-r--r--bgfx/shaders/essl/chains/eagle/vs_eagle.binbin2441 -> 2441 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/fs_color.binbin949 -> 949 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/fs_deconverge.binbin485 -> 485 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/fs_defocus.binbin1135 -> 1135 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/fs_distortion.binbin5939 -> 5939 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/fs_ntsc_decode.binbin6484 -> 6484 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/fs_ntsc_encode.binbin2825 -> 2825 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/fs_phosphor.binbin651 -> 651 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/fs_post.binbin5701 -> 5701 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/fs_prescale.binbin238 -> 238 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/vs_color.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/vs_deconverge.binbin1470 -> 1470 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/vs_defocus.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/vs_distortion.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/vs_ntsc_decode.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/vs_ntsc_encode.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/vs_phosphor.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/vs_post.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/hlsl/vs_prescale.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/hqx/fs_hq2x.binbin15910 -> 15910 bytes
-rw-r--r--bgfx/shaders/essl/chains/hqx/fs_hq3x.binbin15915 -> 15915 bytes
-rw-r--r--bgfx/shaders/essl/chains/hqx/fs_hq4x.binbin15915 -> 15915 bytes
-rw-r--r--bgfx/shaders/essl/chains/hqx/vs_hq2x.binbin1178 -> 1178 bytes
-rw-r--r--bgfx/shaders/essl/chains/hqx/vs_hq3x.binbin1178 -> 1178 bytes
-rw-r--r--bgfx/shaders/essl/chains/hqx/vs_hq4x.binbin1178 -> 1178 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/fs_blit.binbin238 -> 238 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/fs_bob-and-ghost-deinterlace.binbin1315 -> 1315 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/fs_deposterize-pass0.binbin1533 -> 1533 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/fs_deposterize-pass1.binbin1533 -> 1533 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/fs_saturation.binbin456 -> 456 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/vs_blit.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/vs_bob-and-ghost-deinterlace.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/vs_deposterize-pass0.binbin745 -> 745 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/vs_deposterize-pass1.binbin745 -> 745 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/vs_saturation.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_gaussian.binbin2901 -> 2901 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_offset_sat.binbin456 -> 456 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_gaussian.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_offset_sat.binbin458 -> 458 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_gaussian.binbin2901 -> 2901 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_offset_sat.binbin456 -> 456 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_gaussian.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_offset_sat.binbin463 -> 463 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_gaussian.binbin2901 -> 2901 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_offset_sat.binbin456 -> 456 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_gaussian.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_offset_sat.binbin459 -> 459 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_gaussian.binbin2901 -> 2901 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_offset_sat.binbin456 -> 456 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_gaussian.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_offset_sat.binbin469 -> 469 bytes
-rw-r--r--bgfx/shaders/essl/chains/unfiltered/fs_blit.binbin238 -> 238 bytes
-rw-r--r--bgfx/shaders/essl/chains/unfiltered/vs_blit.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/warp/fs_dilation-horizontal-fast.binbin433 -> 433 bytes
-rw-r--r--bgfx/shaders/essl/chains/warp/vs_dilation-horizontal-fast.binbin622 -> 622 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/fs_xbr-lv1-noblend.binbin5350 -> 5350 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-3d.binbin10107 -> 10107 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-fast.binbin5484 -> 5484 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-noblend.binbin7171 -> 7171 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/fs_xbr-lv2.binbin7246 -> 7246 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/fs_xbr-lv3-noblend.binbin9926 -> 9926 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/fs_xbr-lv3.binbin10691 -> 10691 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.binbin7321 -> 7321 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.binbin8621 -> 8621 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.binbin8690 -> 8690 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.binbin8095 -> 8095 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.binbin8621 -> 8621 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.binbin8678 -> 8678 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.binbin8083 -> 8083 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.binbin8621 -> 8621 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.binbin8678 -> 8678 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.binbin8083 -> 8083 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.binbin5137 -> 5137 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.binbin4707 -> 4707 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.binbin4786 -> 4786 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass0.binbin6315 -> 6315 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass1.binbin7656 -> 7656 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass2.binbin6037 -> 6037 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.binbin1415 -> 1415 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.binbin1415 -> 1415 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.binbin1415 -> 1415 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass0.binbin1436 -> 1436 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass1.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass2.binbin1415 -> 1415 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass3.binbin1415 -> 1415 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/vs_xbr-lv1-noblend.binbin765 -> 765 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-3d.binbin2136 -> 2136 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-fast.binbin1178 -> 1178 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-noblend.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/vs_xbr-lv2.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/vs_xbr-lv3-noblend.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/vs_xbr-lv3.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.binbin12234 -> 12234 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.binbin10045 -> 10045 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.binbin9859 -> 9859 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.binbin10981 -> 10981 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.binbin10715 -> 10715 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.binbin10237 -> 10237 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.binbin10663 -> 10663 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.binbin12528 -> 12528 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.binbin3517 -> 3517 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.binbin26226 -> 26226 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.binbin7804 -> 7804 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.binbin4028 -> 4028 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.binbin4864 -> 4864 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.binbin4441 -> 4441 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.binbin5435 -> 5435 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.binbin4663 -> 4663 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.binbin911 -> 911 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.binbin911 -> 911 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.binbin911 -> 911 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.binbin12646 -> 12646 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.binbin7085 -> 7085 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.binbin971 -> 971 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.binbin16672 -> 16672 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.binbin10740 -> 10740 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.binbin6336 -> 6336 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.binbin8035 -> 8035 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.binbin543 -> 543 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.binbin2087 -> 2087 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.binbin696 -> 696 bytes
-rw-r--r--bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.binbin696 -> 696 bytes
-rw-r--r--bgfx/shaders/essl/fs_gui.binbin238 -> 238 bytes
-rw-r--r--bgfx/shaders/essl/fs_screen.binbin238 -> 238 bytes
-rw-r--r--bgfx/shaders/essl/vs_gui.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/essl/vs_screen.binbin419 -> 419 bytes
-rw-r--r--bgfx/shaders/glsl/chains/blurs/fs_smart-blur.binbin3176 -> 3176 bytes
-rw-r--r--bgfx/shaders/glsl/chains/blurs/vs_smart-blur.binbin1082 -> 1082 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom-deluxe.binbin7140 -> 7140 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom.binbin6830 -> 6830 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/fs_gaussx.binbin1993 -> 1993 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/fs_gaussy.binbin1993 -> 1993 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_apply.binbin671 -> 671 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_update.binbin946 -> 946 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/vs_crt-geom.binbin4707 -> 4707 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/vs_gaussx.binbin624 -> 624 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/vs_gaussy.binbin624 -> 624 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_apply.binbin304 -> 304 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_update.binbin304 -> 304 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt/fs_crt-caligari.binbin3448 -> 3448 bytes
-rw-r--r--bgfx/shaders/glsl/chains/crt/vs_crt-caligari.binbin663 -> 663 bytes
-rw-r--r--bgfx/shaders/glsl/chains/default/fs_blit.binbin181 -> 181 bytes
-rw-r--r--bgfx/shaders/glsl/chains/default/vs_blit.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/eagle/fs_eagle.binbin6668 -> 6668 bytes
-rw-r--r--bgfx/shaders/glsl/chains/eagle/vs_eagle.binbin2249 -> 2249 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/fs_color.binbin882 -> 882 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/fs_deconverge.binbin450 -> 450 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/fs_defocus.binbin1096 -> 1096 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/fs_distortion.binbin5647 -> 5647 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/fs_ntsc_decode.binbin6096 -> 6096 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/fs_ntsc_encode.binbin2676 -> 2676 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/fs_phosphor.binbin613 -> 613 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/fs_post.binbin5417 -> 5417 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/fs_prescale.binbin181 -> 181 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/vs_color.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/vs_deconverge.binbin1356 -> 1356 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/vs_defocus.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/vs_distortion.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/vs_ntsc_decode.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/vs_ntsc_encode.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/vs_phosphor.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/vs_post.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hlsl/vs_prescale.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hqx/fs_hq2x.binbin15054 -> 15054 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hqx/fs_hq3x.binbin15059 -> 15059 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hqx/fs_hq4x.binbin15059 -> 15059 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hqx/vs_hq2x.binbin1082 -> 1082 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hqx/vs_hq3x.binbin1082 -> 1082 bytes
-rw-r--r--bgfx/shaders/glsl/chains/hqx/vs_hq4x.binbin1082 -> 1082 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/fs_blit.binbin181 -> 181 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/fs_bob-and-ghost-deinterlace.binbin1212 -> 1212 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/fs_deposterize-pass0.binbin1485 -> 1485 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/fs_deposterize-pass1.binbin1485 -> 1485 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/fs_saturation.binbin429 -> 429 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/vs_blit.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/vs_bob-and-ghost-deinterlace.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/vs_deposterize-pass0.binbin679 -> 679 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/vs_deposterize-pass1.binbin679 -> 679 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/vs_saturation.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_gaussian.binbin2861 -> 2861 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_offset_sat.binbin429 -> 429 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_gaussian.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_offset_sat.binbin416 -> 416 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_gaussian.binbin2861 -> 2861 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_offset_sat.binbin429 -> 429 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_gaussian.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_offset_sat.binbin421 -> 421 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_gaussian.binbin2861 -> 2861 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_offset_sat.binbin429 -> 429 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_gaussian.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_offset_sat.binbin417 -> 417 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_gaussian.binbin2861 -> 2861 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_offset_sat.binbin429 -> 429 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_gaussian.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_offset_sat.binbin427 -> 427 bytes
-rw-r--r--bgfx/shaders/glsl/chains/unfiltered/fs_blit.binbin181 -> 181 bytes
-rw-r--r--bgfx/shaders/glsl/chains/unfiltered/vs_blit.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/warp/fs_dilation-horizontal-fast.binbin416 -> 416 bytes
-rw-r--r--bgfx/shaders/glsl/chains/warp/vs_dilation-horizontal-fast.binbin562 -> 562 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/fs_xbr-lv1-noblend.binbin5185 -> 5185 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-3d.binbin9773 -> 9773 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-fast.binbin5274 -> 5274 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-noblend.binbin6913 -> 6913 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2.binbin6982 -> 6982 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3-noblend.binbin9622 -> 9622 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3.binbin10315 -> 10315 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.binbin7003 -> 7003 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.binbin8237 -> 8237 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.binbin8288 -> 8288 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.binbin7741 -> 7741 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.binbin8237 -> 8237 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.binbin8276 -> 8276 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.binbin7729 -> 7729 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.binbin8237 -> 8237 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.binbin8276 -> 8276 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.binbin7729 -> 7729 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.binbin4866 -> 4866 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.binbin4476 -> 4476 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.binbin4572 -> 4572 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass0.binbin6026 -> 6026 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass1.binbin7216 -> 7216 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass2.binbin5748 -> 5748 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.binbin1301 -> 1301 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.binbin1301 -> 1301 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.binbin1301 -> 1301 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass0.binbin1322 -> 1322 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass1.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass2.binbin1301 -> 1301 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass3.binbin1301 -> 1301 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/vs_xbr-lv1-noblend.binbin693 -> 693 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-3d.binbin1980 -> 1980 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-fast.binbin1082 -> 1082 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-noblend.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3-noblend.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.binbin11959 -> 11959 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.binbin9714 -> 9714 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.binbin9533 -> 9533 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.binbin10600 -> 10600 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.binbin10344 -> 10344 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.binbin9866 -> 9866 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.binbin10306 -> 10306 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.binbin12253 -> 12253 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.binbin3354 -> 3354 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.binbin24877 -> 24877 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.binbin7419 -> 7419 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.binbin3855 -> 3855 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.binbin4691 -> 4691 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.binbin4268 -> 4268 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.binbin5195 -> 5195 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.binbin4455 -> 4455 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.binbin833 -> 833 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.binbin833 -> 833 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.binbin833 -> 833 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.binbin12220 -> 12220 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.binbin6782 -> 6782 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.binbin887 -> 887 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.binbin16257 -> 16257 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.binbin10241 -> 10241 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.binbin6079 -> 6079 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.binbin7700 -> 7700 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.binbin489 -> 489 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.binbin1937 -> 1937 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.binbin630 -> 630 bytes
-rw-r--r--bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.binbin630 -> 630 bytes
-rw-r--r--bgfx/shaders/glsl/fs_gui.binbin181 -> 181 bytes
-rw-r--r--bgfx/shaders/glsl/fs_screen.binbin181 -> 181 bytes
-rw-r--r--bgfx/shaders/glsl/vs_gui.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/glsl/vs_screen.binbin377 -> 377 bytes
-rw-r--r--bgfx/shaders/metal/chains/blurs/fs_smart-blur.binbin4612 -> 4612 bytes
-rw-r--r--bgfx/shaders/metal/chains/blurs/vs_smart-blur.binbin1546 -> 1546 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/fs_crt-geom-deluxe.binbin8474 -> 8474 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/fs_crt-geom.binbin8064 -> 8064 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/fs_gaussx.binbin2812 -> 2812 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/fs_gaussy.binbin2812 -> 2812 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/fs_phosphor_apply.binbin1176 -> 1176 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/fs_phosphor_update.binbin1467 -> 1467 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/vs_crt-geom.binbin5510 -> 5510 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/vs_gaussx.binbin1024 -> 1024 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/vs_gaussy.binbin1024 -> 1024 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/vs_phosphor_apply.binbin684 -> 684 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt-geom/vs_phosphor_update.binbin684 -> 684 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt/fs_crt-caligari.binbin4092 -> 4092 bytes
-rw-r--r--bgfx/shaders/metal/chains/crt/vs_crt-caligari.binbin1096 -> 1096 bytes
-rw-r--r--bgfx/shaders/metal/chains/default/fs_blit.binbin570 -> 570 bytes
-rw-r--r--bgfx/shaders/metal/chains/default/vs_blit.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/eagle/fs_eagle.binbin7559 -> 7559 bytes
-rw-r--r--bgfx/shaders/metal/chains/eagle/vs_eagle.binbin2923 -> 2923 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/fs_color.binbin1316 -> 1316 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/fs_deconverge.binbin914 -> 914 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/fs_defocus.binbin1746 -> 1746 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/fs_distortion.binbin6411 -> 6411 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/fs_ntsc_decode.binbin7016 -> 7016 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/fs_ntsc_encode.binbin3320 -> 3320 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/fs_phosphor.binbin1102 -> 1102 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/fs_post.binbin6251 -> 6251 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/fs_prescale.binbin570 -> 570 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/vs_color.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/vs_deconverge.binbin1814 -> 1814 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/vs_defocus.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/vs_distortion.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/vs_ntsc_decode.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/vs_ntsc_encode.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/vs_phosphor.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/vs_post.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/hlsl/vs_prescale.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/hqx/fs_hq2x.binbin16687 -> 16687 bytes
-rw-r--r--bgfx/shaders/metal/chains/hqx/fs_hq3x.binbin16692 -> 16692 bytes
-rw-r--r--bgfx/shaders/metal/chains/hqx/fs_hq4x.binbin16692 -> 16692 bytes
-rw-r--r--bgfx/shaders/metal/chains/hqx/vs_hq2x.binbin1546 -> 1546 bytes
-rw-r--r--bgfx/shaders/metal/chains/hqx/vs_hq3x.binbin1546 -> 1546 bytes
-rw-r--r--bgfx/shaders/metal/chains/hqx/vs_hq4x.binbin1546 -> 1546 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/fs_blit.binbin570 -> 570 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.binbin1784 -> 1784 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/fs_deposterize-pass0.binbin2243 -> 2243 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/fs_deposterize-pass1.binbin2243 -> 2243 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/fs_saturation.binbin836 -> 836 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/vs_blit.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/vs_bob-and-ghost-deinterlace.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.binbin1109 -> 1109 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.binbin1109 -> 1109 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/vs_saturation.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_gaussian.binbin3939 -> 3939 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_offset_sat.binbin836 -> 836 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_gaussian.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_offset_sat.binbin821 -> 821 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_gaussian.binbin3939 -> 3939 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_offset_sat.binbin836 -> 836 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_gaussian.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_offset_sat.binbin826 -> 826 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_gaussian.binbin3939 -> 3939 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_offset_sat.binbin836 -> 836 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_gaussian.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_offset_sat.binbin822 -> 822 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_gaussian.binbin3939 -> 3939 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_offset_sat.binbin836 -> 836 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_gaussian.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_offset_sat.binbin832 -> 832 bytes
-rw-r--r--bgfx/shaders/metal/chains/unfiltered/fs_blit.binbin570 -> 570 bytes
-rw-r--r--bgfx/shaders/metal/chains/unfiltered/vs_blit.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/warp/fs_dilation-horizontal-fast.binbin876 -> 876 bytes
-rw-r--r--bgfx/shaders/metal/chains/warp/vs_dilation-horizontal-fast.binbin977 -> 977 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/fs_xbr-lv1-noblend.binbin7549 -> 7549 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-3d.binbin13854 -> 13854 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-fast.binbin7759 -> 7759 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-noblend.binbin8592 -> 8592 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/fs_xbr-lv2.binbin10337 -> 10337 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/fs_xbr-lv3-noblend.binbin12246 -> 12246 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/fs_xbr-lv3.binbin14093 -> 14093 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_custom-jinc2-sharper.binbin8259 -> 8259 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.binbin9556 -> 9556 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.binbin9776 -> 9776 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.binbin9148 -> 9148 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.binbin9556 -> 9556 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.binbin9764 -> 9764 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.binbin9136 -> 9136 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.binbin9556 -> 9556 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.binbin9764 -> 9764 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.binbin9136 -> 9136 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.binbin5873 -> 5873 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.binbin5453 -> 5453 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.binbin5436 -> 5436 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass0.binbin7051 -> 7051 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass1.binbin8538 -> 8538 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass2.binbin6773 -> 6773 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_custom-jinc2-sharper.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.binbin1787 -> 1787 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.binbin1787 -> 1787 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.binbin1787 -> 1787 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass0.binbin1806 -> 1806 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass1.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass2.binbin1787 -> 1787 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass3.binbin1787 -> 1787 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/vs_xbr-lv1-noblend.binbin1125 -> 1125 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-3d.binbin2515 -> 2515 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-fast.binbin1546 -> 1546 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-noblend.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/vs_xbr-lv2.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.binbin15966 -> 15966 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.binbin13828 -> 13828 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.binbin13599 -> 13599 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.binbin14154 -> 14154 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.binbin13843 -> 13843 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.binbin13063 -> 13063 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.binbin13950 -> 13950 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.binbin16292 -> 16292 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.binbin5047 -> 5047 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.binbin27616 -> 27616 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.binbin9017 -> 9017 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.binbin5924 -> 5924 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.binbin5760 -> 5760 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.binbin6735 -> 6735 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.binbin6534 -> 6534 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.binbin5415 -> 5415 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.binbin1279 -> 1279 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.binbin1279 -> 1279 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.binbin1279 -> 1279 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.binbin15804 -> 15804 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.binbin7930 -> 7930 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.binbin1343 -> 1343 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.binbin22178 -> 22178 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.binbin12654 -> 12654 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.binbin7036 -> 7036 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.binbin8826 -> 8826 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.binbin896 -> 896 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.binbin2469 -> 2469 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.binbin1051 -> 1051 bytes
-rw-r--r--bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.binbin1051 -> 1051 bytes
-rw-r--r--bgfx/shaders/metal/fs_gui.binbin570 -> 570 bytes
-rw-r--r--bgfx/shaders/metal/fs_screen.binbin570 -> 570 bytes
-rw-r--r--bgfx/shaders/metal/vs_gui.binbin778 -> 778 bytes
-rw-r--r--bgfx/shaders/metal/vs_screen.binbin778 -> 778 bytes
-rw-r--r--scripts/src/3rdparty.lua77
-rw-r--r--scripts/src/main.lua1
-rw-r--r--src/osd/modules/debugger/debugimgui.cpp17
-rw-r--r--src/osd/modules/render/bgfx/chainentry.cpp10
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.cpp4
-rw-r--r--src/osd/modules/render/bgfx/effect.cpp2
-rw-r--r--src/osd/modules/render/bgfx/effectmanager.cpp4
-rw-r--r--src/osd/modules/render/bgfx/shadermanager.cpp8
-rw-r--r--src/osd/modules/render/bgfx/target.cpp6
-rw-r--r--src/osd/modules/render/bgfx/texture.cpp2
-rw-r--r--src/osd/modules/render/bgfx/texturemanager.cpp2
-rw-r--r--src/osd/modules/render/bgfx/uniform.cpp2
-rw-r--r--src/osd/modules/render/drawbgfx.cpp23
3295 files changed, 162480 insertions, 81063 deletions
diff --git a/3rdparty/bgfx/.appveyor.yml b/3rdparty/bgfx/.appveyor.yml
index c6f054ce89e..15bcc62ba27 100644
--- a/3rdparty/bgfx/.appveyor.yml
+++ b/3rdparty/bgfx/.appveyor.yml
@@ -1,20 +1,21 @@
shallow_clone: true
os:
- - Visual Studio 2015
+ - Visual Studio 2017
environment:
matrix:
- - TOOLSET: vs2013
- TOOLSET: vs2015
+ - TOOLSET: vs2017
configuration:
- Debug
- Release
install:
- - git clone https://github.com/bkaradzic/bx ..\bx
- - ..\bx\tools\bin\windows\genie --with-tools %TOOLSET%
+ - git clone --depth 1 https://github.com/bkaradzic/bx ..\bx
+ - git clone --depth 1 https://github.com/bkaradzic/bimg ..\bimg
+ - ..\bx\tools\bin\windows\genie --with-tools --with-examples %TOOLSET%
build:
project: .build/projects/$(TOOLSET)/bgfx.sln
diff --git a/3rdparty/bgfx/.travis.yml b/3rdparty/bgfx/.travis.yml
index 9ca3a5ce83e..0ed382fb6b1 100644
--- a/3rdparty/bgfx/.travis.yml
+++ b/3rdparty/bgfx/.travis.yml
@@ -16,7 +16,8 @@ addons:
- clang
before_script:
- git clone https://github.com/bkaradzic/bx ../bx
+ - git clone --depth 1 https://github.com/bkaradzic/bx ../bx
+ - git clone --depth 1 https://github.com/bkaradzic/bimg ../bimg
script:
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then make build CXX="g++-4.8" CC="gcc-4.8"; fi
diff --git a/3rdparty/bgfx/3rdparty/dxsdk/include/d3dx12.h b/3rdparty/bgfx/3rdparty/dxsdk/include/d3dx12.h
index 6b5e97d858a..bc4b6040d6a 100644
--- a/3rdparty/bgfx/3rdparty/dxsdk/include/d3dx12.h
+++ b/3rdparty/bgfx/3rdparty/dxsdk/include/d3dx12.h
@@ -1345,6 +1345,17 @@ inline void MemcpySubresource(
}
}
+namespace MinGW_Workaround
+{
+ inline D3D12_RESOURCE_DESC ID3D12ResourceGetDesc(ID3D12Resource* _resource)
+ {
+ typedef void (STDMETHODCALLTYPE ID3D12Resource::*PFN_GET_GET_DESC)(D3D12_RESOURCE_DESC*);
+ D3D12_RESOURCE_DESC desc;
+ (_resource->*(PFN_GET_GET_DESC)(&ID3D12Resource::GetDesc))(&desc);
+ return desc;
+ }
+}
+
//------------------------------------------------------------------------------------------------
// Returns required size of a buffer to be used for data upload
inline UINT64 GetRequiredIntermediateSize(
@@ -1352,7 +1363,7 @@ inline UINT64 GetRequiredIntermediateSize(
_In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
_In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources)
{
- D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
+ D3D12_RESOURCE_DESC Desc = MinGW_Workaround::ID3D12ResourceGetDesc(pDestinationResource);
UINT64 RequiredSize = 0;
ID3D12Device* pDevice;
@@ -1378,8 +1389,8 @@ inline UINT64 UpdateSubresources(
_In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData)
{
// Minor validation
- D3D12_RESOURCE_DESC IntermediateDesc = pIntermediate->GetDesc();
- D3D12_RESOURCE_DESC DestinationDesc = pDestinationResource->GetDesc();
+ D3D12_RESOURCE_DESC IntermediateDesc = MinGW_Workaround::ID3D12ResourceGetDesc(pIntermediate);
+ D3D12_RESOURCE_DESC DestinationDesc = MinGW_Workaround::ID3D12ResourceGetDesc(pDestinationResource);
if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER ||
IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset ||
RequiredSize > (SIZE_T)-1 ||
@@ -1448,7 +1459,7 @@ inline UINT64 UpdateSubresources(
UINT64* pRowSizesInBytes = reinterpret_cast<UINT64*>(pLayouts + NumSubresources);
UINT* pNumRows = reinterpret_cast<UINT*>(pRowSizesInBytes + NumSubresources);
- D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
+ D3D12_RESOURCE_DESC Desc = MinGW_Workaround::ID3D12ResourceGetDesc(pDestinationResource);
ID3D12Device* pDevice;
pDestinationResource->GetDevice(__uuidof(ID3D12Device), reinterpret_cast<void**>(&pDevice));
pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize);
@@ -1476,7 +1487,7 @@ inline UINT64 UpdateSubresources(
UINT NumRows[MaxSubresources];
UINT64 RowSizesInBytes[MaxSubresources];
- D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
+ D3D12_RESOURCE_DESC Desc = MinGW_Workaround::ID3D12ResourceGetDesc(pDestinationResource);
ID3D12Device* pDevice;
pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize);
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/include/c99_compat.h b/3rdparty/bgfx/3rdparty/glsl-optimizer/include/c99_compat.h
index 8222a26069d..5caddffc971 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/include/c99_compat.h
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/include/c99_compat.h
@@ -73,10 +73,8 @@
// BK - STFU!
# pragma GCC diagnostic ignored "-Wunknown-pragmas" // for clang to disable GCC pragmas
# pragma GCC diagnostic ignored "-Wpragmas" // for GCC to disable clang pragmas
-# pragma GCC diagnostic ignored "-Wformat="
# pragma GCC diagnostic ignored "-Wformat-extra-args"
# pragma GCC diagnostic ignored "-Wignored-qualifiers"
-# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
# pragma GCC diagnostic ignored "-Wreorder"
# pragma GCC diagnostic ignored "-Woverloaded-virtual"
@@ -85,6 +83,13 @@
# pragma GCC diagnostic ignored "-Wunused-parameter"
# pragma GCC diagnostic ignored "-Wunused-private-field"
# pragma GCC diagnostic ignored "-Wunused-variable"
+# pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor"
+
+# if !defined(__clang__)
+# pragma GCC diagnostic ignored "-Wformat="
+# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+# endif
+
#endif
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/builtin_functions.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/builtin_functions.cpp
index 531fe72c1d3..371eadfd57c 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/builtin_functions.cpp
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/builtin_functions.cpp
@@ -161,6 +161,9 @@ lod_exists_in_stage(const _mesa_glsl_parse_state *state)
*/
return state->stage == MESA_SHADER_VERTEX ||
state->is_version(130, 300) ||
+ state->EXT_texture_array_enable || /* BK - don't complain about texture array in fragment shaders. */
+ state->OES_texture_3D_enable || /* BK - shut up */
+ state->EXT_shader_texture_lod_enable || /* BK - pretend it's ok too */
state->ARB_shader_texture_lod_enable;
}
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.cpp
index f742e9fd11c..47411852989 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.cpp
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_parser_extras.cpp
@@ -568,9 +568,9 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
EXT(EXT_separate_shader_objects, false, true, dummy_true),
EXT(EXT_shader_framebuffer_fetch, false, true, EXT_shader_framebuffer_fetch),
EXT(EXT_shader_integer_mix, true, true, EXT_shader_integer_mix),
- EXT(EXT_shader_texture_lod, false, true, ARB_shader_texture_lod),
+ EXT(EXT_shader_texture_lod, true, true, ARB_shader_texture_lod), // BK - made it available in GLSL
EXT(EXT_shadow_samplers, false, true, EXT_shadow_samplers),
- EXT(EXT_texture_array, true, false, EXT_texture_array),
+ EXT(EXT_texture_array, true, true, EXT_texture_array), // BK - made it available in ESSL
};
#undef EXT
diff --git a/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml b/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml
index 64e7ae64aff..07e269bedff 100644
--- a/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml
+++ b/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml
@@ -7,7 +7,7 @@ version: "{build}"
os: Visual Studio 2013
platform:
- - Any CPU
+ - x64
configuration:
- Debug
@@ -17,6 +17,13 @@ branches:
only:
- master
+# Travis advances the master-tot tag to current top of the tree after
+# each push into the master branch, because it relies on that tag to
+# upload build artifacts to the master-tot release. This will cause
+# double testing for each push on Appveyor: one for the push, one for
+# the tag advance. Disable testing tags.
+skip_tags: true
+
clone_depth: 5
matrix:
@@ -25,6 +32,7 @@ matrix:
# scripts that run after cloning repository
install:
- git clone https://github.com/google/googletest.git External/googletest
+ - C:/Python27/python.exe update_glslang_sources.py
build:
parallel: true # enable MSBuild parallel builds
@@ -38,3 +46,45 @@ build_script:
test_script:
- ctest -C %CONFIGURATION% --output-on-failure
- cd ../Test && bash runtests
+ - cd ../build
+
+after_test:
+ # For debug build, the generated dll has a postfix "d" in its name.
+ - ps: >-
+ If ($env:configuration -Match "Debug") {
+ $env:SUFFIX="d"
+ } Else {
+ $env:SUFFIX=""
+ }
+ - cd install
+ # Zip all glslang artifacts for uploading and deploying
+ - 7z a glslang-master-windows-"%PLATFORM%"-"%CONFIGURATION%".zip
+ bin\glslangValidator.exe
+ include\glslang\*
+ include\SPIRV\*
+ lib\glslang%SUFFIX%.lib
+ lib\HLSL%SUFFIX%.lib
+ lib\OGLCompiler%SUFFIX%.lib
+ lib\OSDependent%SUFFIX%.lib
+ lib\SPIRV%SUFFIX%.lib
+ lib\SPVRemapper%SUFFIX%.lib
+ lib\SPIRV-Tools%SUFFIX%.lib
+ lib\SPIRV-Tools-opt%SUFFIX%.lib
+
+artifacts:
+ - path: build\install\*.zip
+ name: artifacts-zip
+
+deploy:
+ - provider: GitHub
+ auth_token:
+ secure: YglcSYdl0TylEa59H4K6lylBEDr586NAt2EMgZquSo+iuPrwgZQuJLPCoihSm9y6
+ release: master-tot
+ description: "Continuous build of the latest master branch by Appveyor and Travis CI"
+ artifact: artifacts-zip
+ draft: false
+ prerelease: false
+ force_update: true
+ on:
+ branch: master
+ APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
diff --git a/3rdparty/bgfx/3rdparty/glslang/.gitignore b/3rdparty/bgfx/3rdparty/glslang/.gitignore
index 30889ac7d9f..a1fe3944b12 100644
--- a/3rdparty/bgfx/3rdparty/glslang/.gitignore
+++ b/3rdparty/bgfx/3rdparty/glslang/.gitignore
@@ -6,8 +6,5 @@ tags
TAGS
build/
Test/localResults/
-Test/multiThread.out
-Test/singleThread.out
-Test/vert.spv
-Test/frag.spv
External/googletest
+External/spirv-tools
diff --git a/3rdparty/bgfx/3rdparty/glslang/.travis.yml b/3rdparty/bgfx/3rdparty/glslang/.travis.yml
index 4a88dce5a9a..4fe4b5e5ba9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/.travis.yml
+++ b/3rdparty/bgfx/3rdparty/glslang/.travis.yml
@@ -7,12 +7,15 @@ os:
- osx
# Use Ubuntu 14.04 LTS (Trusty) as the Linux testing environment.
-sudo: required
+sudo: false
dist: trusty
env:
- - GLSLANG_BUILD_TYPE=Release
- - GLSLANG_BUILD_TYPE=Debug
+ global:
+ - secure: aGFrgzyKp+84hKrGkxVWg8cHV61uqrKEHT38gfSQK6+WS4GfLOyH83p7WnsEBb7AMhzU7LMNFdvOFr6+NaMpVnqRvc40CEG1Q+lNg9Pq9mhIZLowvDrfqTL9kQ+8Nbw5Q6/dg6CTvY7fvRfpfCEmKIUZBRkoKUuHeuM1uy3IupFcdNuL5bSYn3Beo+apSJginh9DI4BLDXFUgBzTRSLLyCX5g3cpaeGGOCr8quJlYx75W6HRck5g9SZuLtUoH9GFEV3l+ZEWB8noErW+J56L03bwNwFuuAh321evw++oQk5KFa8rlDvar3SJ3b1RHB8u/eq5DBYMyaK/fS8+Q7QbGr8diF/wDe68bKO7U9IhpNfExXmczCpExjHomW5TQv4rYdGhygPMfW97aIsPRYyNKcl4fkmb7NDrM8w0Jscdq2g5c2Kz0ItyZoBri/NXLwFQQjaVCs7Pf97TjuMA7mK0GJmDTRzi6SrDYlWMt5BQL3y0CCojyfLIRcTh0CQjQI29s97bLfQrYAxt9GNNFR+HTXRLLrkaAlJkPGEPwUywlSfEThnvHLesNxYqemolAYpQT4ithoL4GehGIHmaxsW295aKVhuRf8K9eBODNqrfblvM42UHhjntT+92ZnQ/Gkq80GqaMxnxi4PO5FyPIxt0r981b54YBkWi8YA4P7w5pNI=
+ matrix:
+ - GLSLANG_BUILD_TYPE=Release
+ - GLSLANG_BUILD_TYPE=Debug
compiler:
- clang
@@ -24,6 +27,9 @@ matrix:
# Skip GCC builds on Mac OS X.
- os: osx
compiler: gcc
+ include:
+ # Additional build using Android NDK.
+ - env: BUILD_NDK=ON
cache:
apt: true
@@ -36,25 +42,82 @@ addons:
apt:
packages:
- clang-3.6
- - ninja-build
install:
- # Install ninja on Mac OS X.
- - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update && brew install ninja; fi
- # Make sure that clang-3.6 is selected.
+ # Make sure that clang-3.6 is selected on Linux.
- if [[ "$TRAVIS_OS_NAME" == "linux" && "$CC" == "clang" ]]; then
export CC=clang-3.6 CXX=clang++-3.6;
fi
+ # Download Android NDK and Android CMake toolchain file.
+ - if [[ "$BUILD_NDK" == "ON" ]]; then
+ git clone --depth=1 https://github.com/urho3d/android-ndk.git $HOME/android-ndk;
+ export ANDROID_NDK=$HOME/android-ndk;
+ git clone --depth=1 https://github.com/taka-no-me/android-cmake.git $HOME/android-cmake;
+ export TOOLCHAIN_PATH=$HOME/android-cmake/android.toolchain.cmake;
+ fi
before_script:
- - git clone https://github.com/google/googletest.git External/googletest
+ - git clone --depth=1 https://github.com/google/googletest.git External/googletest
+ - ./update_glslang_sources.py
script:
- mkdir build && cd build
- # We need to install the compiled binaries so the paths in the runtests script can resolve correctly.
- - cmake -GNinja -DCMAKE_BUILD_TYPE=${GLSLANG_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=`pwd`/install ..
- - ninja install
- # Run Google-Test-based tests.
- - ctest --output-on-failure
- # Run runtests-based tests.
- - cd ../Test && ./runtests
+ # For Android, do release building using NDK without testing.
+ # For Linux and macOS, do debug/release building with testing.
+ - if [[ "$BUILD_NDK" == "ON" ]]; then
+ cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_PATH}
+ -DANDROID_NATIVE_API_LEVEL=android-12
+ -DCMAKE_BUILD_TYPE=Release
+ -DANDROID_ABI="armeabi-v7a with NEON"
+ -DBUILD_TESTING=OFF ..;
+ make -j4;
+ else
+ cmake -DCMAKE_BUILD_TYPE=${GLSLANG_BUILD_TYPE}
+ -DCMAKE_INSTALL_PREFIX=`pwd`/install ..;
+ make -j4 install;
+ ctest --output-on-failure &&
+ cd ../Test && ./runtests;
+ fi
+
+after_success:
+ # For debug build, the generated dll has a postfix "d" in its name.
+ - if [[ "${GLSLANG_BUILD_TYPE}" == "Debug" ]]; then
+ export SUFFIX="d";
+ else
+ export SUFFIX="";
+ fi
+ # Create tarball for deployment
+ - if [[ ${CC} == clang* && "${BUILD_NDK}" != "ON" ]]; then
+ cd ../build/install;
+ export TARBALL=glslang-master-${TRAVIS_OS_NAME}-${GLSLANG_BUILD_TYPE}.zip;
+ zip ${TARBALL}
+ bin/glslangValidator
+ include/glslang/*
+ include/SPIRV/*
+ lib/libglslang${SUFFIX}.a
+ lib/libHLSL${SUFFIX}.a
+ lib/libOGLCompiler${SUFFIX}.a
+ lib/libOSDependent${SUFFIX}.a
+ lib/libSPIRV${SUFFIX}.a
+ lib/libSPVRemapper${SUFFIX}.a
+ lib/libSPIRV-Tools${SUFFIX}.a
+ lib/libSPIRV-Tools-opt${SUFFIX}.a;
+ fi
+
+before_deploy:
+ # Tag the current top of the tree as "master-tot".
+ # Travis CI replies on the tag name to properly push to GitHub Releases.
+ - git config --global user.name "Travis CI"
+ - git config --global user.email "builds@travis-ci.org"
+ - git tag -f master-tot
+ - git push -q -f https://${glslangtoken}@github.com/KhronosGroup/glslang --tags
+
+deploy:
+ provider: releases
+ api_key: ${glslangtoken}
+ on:
+ branch: master
+ condition: ${CC} == clang* && ${BUILD_NDK} != ON
+ file: ${TARBALL}
+ skip_cleanup: true
+ overwrite: true
diff --git a/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt
index 32395c05982..0d453cc6efd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt
@@ -1,6 +1,19 @@
-cmake_minimum_required(VERSION 2.8.11)
+# increase to 3.1 once all major distributions
+# include a version of CMake >= 3.1
+cmake_minimum_required(VERSION 2.8.12)
+if (POLICY CMP0048)
+ cmake_policy(SET CMP0048 NEW)
+endif()
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+# Adhere to GNU filesystem layout conventions
+include(GNUInstallDirs)
+
+option(SKIP_GLSLANG_INSTALL "Skip installation" ${SKIP_GLSLANG_INSTALL})
+if(NOT ${SKIP_GLSLANG_INSTALL})
+ set(ENABLE_GLSLANG_INSTALL ON)
+endif()
+
option(ENABLE_AMD_EXTENSIONS "Enables support of AMD-specific extensions" ON)
option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON)
@@ -8,11 +21,15 @@ option(ENABLE_NV_EXTENSIONS "Enables support of Nvidia-specific extensions" ON)
option(ENABLE_HLSL "Enables HLSL input support" ON)
-enable_testing()
+option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
-set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "prefix")
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
+ set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
+endif()
project(glslang)
+# make testing optional
+include(CTest)
if(ENABLE_AMD_EXTENSIONS)
add_definitions(-DAMD_EXTENSIONS)
@@ -33,42 +50,59 @@ if(WIN32)
endif(MSVC)
add_definitions(-DGLSLANG_OSINCLUDE_WIN32)
elseif(UNIX)
- add_definitions(-fPIC)
add_definitions(-DGLSLANG_OSINCLUDE_UNIX)
else(WIN32)
message("unknown platform")
endif(WIN32)
-if(CMAKE_COMPILER_IS_GNUCXX)
- add_definitions(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
- -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable)
- add_definitions(-Wno-reorder) # disable this from -Wall, since it happens all over.
- add_definitions(-std=c++11)
+if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
+ add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
+ -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions)
+ add_compile_options(-Wno-reorder) # disable this from -Wall, since it happens all over.
elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
- add_definitions(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
- -Wunused-parameter -Wunused-value -Wunused-variable)
- add_definitions(-Wno-reorder) # disable this from -Wall, since it happens all over.
- add_definitions(-std=c++11)
+ add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
+ -Wunused-parameter -Wunused-value -Wunused-variable)
+ add_compile_options(-Wno-reorder) # disable this from -Wall, since it happens all over.
+endif()
+
+# Request C++11
+if(${CMAKE_VERSION} VERSION_LESS 3.1)
+ # CMake versions before 3.1 do not understand CMAKE_CXX_STANDARD
+ # remove this block once CMake >=3.1 has fixated in the ecosystem
+ add_compile_options(-std=c++11)
+else()
+ set(CMAKE_CXX_STANDARD 11)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ set(CMAKE_CXX_EXTENSIONS OFF)
endif()
function(glslang_set_link_args TARGET)
# For MinGW compiles, statically link against the GCC and C++ runtimes.
# This avoids the need to ship those runtimes as DLLs.
- if(WIN32)
- if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
- set_target_properties(${TARGET} PROPERTIES
- LINK_FLAGS "-static -static-libgcc -static-libstdc++")
- endif()
- endif(WIN32)
+ if(WIN32 AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
+ set_target_properties(${TARGET} PROPERTIES
+ LINK_FLAGS "-static -static-libgcc -static-libstdc++")
+ endif()
endfunction(glslang_set_link_args)
# We depend on these for later projects, so they should come first.
add_subdirectory(External)
+if(NOT TARGET SPIRV-Tools-opt)
+ set(ENABLE_OPT OFF)
+endif()
+
+if(ENABLE_OPT)
+ message(STATUS "optimizer enabled")
+ add_definitions(-DENABLE_OPT)
+elseif(ENABLE_HLSL)
+ message(STATUS "spirv-tools not linked - illegal SPIRV may be generated for HLSL")
+endif()
+
add_subdirectory(glslang)
add_subdirectory(OGLCompilersDLL)
if(ENABLE_GLSLANG_BINARIES)
- add_subdirectory(StandAlone)
+ add_subdirectory(StandAlone)
endif()
add_subdirectory(SPIRV)
if(ENABLE_HLSL)
diff --git a/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt
index 5180ea56931..4d9690134ae 100644
--- a/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt
@@ -1,34 +1,43 @@
# Suppress all warnings from external projects.
set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -w)
-if (TARGET gmock)
- message(STATUS "Google Mock already configured - use it")
-elseif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/googletest)
- # We need to make sure Google Test does not mess up with the
- # global CRT settings on Windows.
- if(WIN32)
- set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
- endif(WIN32)
- add_subdirectory(googletest)
- set(GTEST_TARGETS
- gtest
- gtest_main
- gmock
- gmock_main
- )
- foreach(target ${GTEST_TARGETS})
- set_property(TARGET ${target} PROPERTY FOLDER gtest)
- endforeach()
- mark_as_advanced(gmock_build_tests
- BUILD_GMOCK
- BUILD_GTEST
- BUILD_SHARED_LIBS
- gtest_build_samples
- gtest_build_tests
- gtest_disable_pthreads
- gtest_force_shared_crt
- gtest_hide_internal_symbols)
-else()
- message(STATUS
- "Google Mock was not found - tests based on that will not build")
+if(BUILD_TESTING)
+ if(TARGET gmock)
+ message(STATUS "Google Mock already configured - use it")
+ elseif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/googletest)
+ # We need to make sure Google Test does not mess up with the
+ # global CRT settings on Windows.
+ if(WIN32)
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+ endif(WIN32)
+ add_subdirectory(googletest)
+ set(GTEST_TARGETS
+ gtest
+ gtest_main
+ gmock
+ gmock_main)
+ foreach(target ${GTEST_TARGETS})
+ set_property(TARGET ${target} PROPERTY FOLDER gtest)
+ endforeach()
+ mark_as_advanced(gmock_build_tests
+ BUILD_GMOCK
+ BUILD_GTEST
+ BUILD_SHARED_LIBS
+ gtest_build_samples
+ gtest_build_tests
+ gtest_disable_pthreads
+ gtest_force_shared_crt
+ gtest_hide_internal_symbols)
+ else()
+ message(STATUS
+ "Google Mock was not found - tests based on that will not build")
+ endif()
endif()
+
+if(ENABLE_OPT AND NOT TARGET SPIRV-Tools-opt)
+ if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools)
+ set(SPIRV_SKIP_TESTS ON CACHE BOOL "Skip building SPIRV-Tools tests")
+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools spirv-tools)
+ endif()
+endif()
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt
index 4954db94584..5bb3f0ee696 100644
--- a/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/CMakeLists.txt
@@ -2,10 +2,13 @@ set(SOURCES InitializeDll.cpp InitializeDll.h)
add_library(OGLCompiler STATIC ${SOURCES})
set_property(TARGET OGLCompiler PROPERTY FOLDER glslang)
+set_property(TARGET OGLCompiler PROPERTY POSITION_INDEPENDENT_CODE ON)
if(WIN32)
source_group("Source" FILES ${SOURCES})
endif(WIN32)
-install(TARGETS OGLCompiler
- ARCHIVE DESTINATION lib)
+if(ENABLE_GLSLANG_INSTALL)
+ install(TARGETS OGLCompiler
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif(ENABLE_GLSLANG_INSTALL)
diff --git a/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.cpp b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.cpp
index 2eb912c422f..abea9108b15 100644
--- a/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.cpp
@@ -38,13 +38,17 @@
#include "InitializeDll.h"
#include "../glslang/Include/InitializeGlobals.h"
-
#include "../glslang/Public/ShaderLang.h"
+#include "../glslang/Include/PoolAlloc.h"
namespace glslang {
OS_TLSIndex ThreadInitializeIndex = OS_INVALID_TLS_INDEX;
+// Per-process initialization.
+// Needs to be called at least once before parsing, etc. is done.
+// Will also do thread initialization for the calling thread; other
+// threads will need to do that explicitly.
bool InitProcess()
{
glslang::GetGlobalLock();
@@ -85,7 +89,9 @@ bool InitProcess()
return true;
}
-
+// Per-thread scoped initialization.
+// Must be called at least once by each new thread sharing the
+// symbol tables, etc., needed to parse.
bool InitThread()
{
//
@@ -99,17 +105,21 @@ bool InitThread()
if (OS_GetTLSValue(ThreadInitializeIndex) != 0)
return true;
- InitializeMemoryPools();
-
if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) {
assert(0 && "InitThread(): Unable to set init flag.");
return false;
}
+ glslang::SetThreadPoolAllocator(nullptr);
+
return true;
}
-
+// Not necessary to call this: InitThread() is reentrant, and the need
+// to do per thread tear down has been removed.
+//
+// This is kept, with memory management removed, to satisfy any exiting
+// calls to it that rely on it.
bool DetachThread()
{
bool success = true;
@@ -125,14 +135,18 @@ bool DetachThread()
assert(0 && "DetachThread(): Unable to clear init flag.");
success = false;
}
-
- FreeGlobalPools();
-
}
return success;
}
+// Not necessary to call this: InitProcess() is reentrant.
+//
+// This is kept, with memory management removed, to satisfy any exiting
+// calls to it that rely on it.
+//
+// Users of glslang should call shFinalize() or glslang::FinalizeProcess() for
+// process-scoped memory tear down.
bool DetachProcess()
{
bool success = true;
@@ -140,12 +154,8 @@ bool DetachProcess()
if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX)
return true;
- ShFinalize();
-
success = DetachThread();
- FreePoolIndex();
-
OS_FreeTLSIndex(ThreadInitializeIndex);
ThreadInitializeIndex = OS_INVALID_TLS_INDEX;
diff --git a/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.h b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.h
index 60b2b1593d6..661cee4d240 100644
--- a/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.h
+++ b/3rdparty/bgfx/3rdparty/glslang/OGLCompilersDLL/InitializeDll.h
@@ -40,8 +40,8 @@ namespace glslang {
bool InitProcess();
bool InitThread();
-bool DetachThread();
-bool DetachProcess();
+bool DetachThread(); // not called from standalone, perhaps other tools rely on parts of it
+bool DetachProcess(); // not called from standalone, perhaps other tools rely on parts of it
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/README.md b/3rdparty/bgfx/3rdparty/glslang/README.md
index 193e38da874..7ade2dcd972 100644
--- a/3rdparty/bgfx/3rdparty/glslang/README.md
+++ b/3rdparty/bgfx/3rdparty/glslang/README.md
@@ -49,9 +49,16 @@ There is also a non-shader extension
Building
--------
+Instead of building manually, you can also download the binaries for your
+platform directly from the [master-tot release][master-tot-release] on GitHub.
+Those binaries are automatically uploaded by the buildbots after successful
+testing and they always reflect the current top of the tree of the master
+branch.
+
### Dependencies
* [CMake][cmake]: for generating compilation targets.
+* [Python 2.7][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools.)
* [bison][bison]: _optional_, but needed when changing the grammar (glslang.y).
* [googletest][googletest]: _optional_, but should use if making any changes to glslang.
@@ -74,6 +81,18 @@ cd <the directory glslang was cloned to, "External" will be a subdirectory>
git clone https://github.com/google/googletest.git External/googletest
```
+If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan,
+or wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, install
+spirv-tools with this:
+
+```bash
+./update_glslang_sources.py
+```
+
+For running the CMake GUI or Visual Studio with python dependencies, you will,
+in addition to python within the cygwin environment, need a Windows [python][python]
+installation, including selecting the `PATH` update.
+
#### 3) Configure
Assume the source directory is `$SOURCE_DIR` and
@@ -301,6 +320,8 @@ Basic Internal Operation
[cmake]: https://cmake.org/
+[python]: https://www.python.org/
[bison]: https://www.gnu.org/software/bison/
[googletest]: https://github.com/google/googletest
[bison-gnu-win32]: http://gnuwin32.sourceforge.net/packages/bison.htm
+[master-tot-release]: https://github.com/KhronosGroup/glslang/releases/tag/master-tot
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt
index aaf117802fe..b1c02777961 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt
@@ -41,17 +41,30 @@ endif(ENABLE_NV_EXTENSIONS)
add_library(SPIRV STATIC ${SOURCES} ${HEADERS})
set_property(TARGET SPIRV PROPERTY FOLDER glslang)
-target_link_libraries(SPIRV glslang)
+set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
add_library(SPVRemapper STATIC ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
+set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON)
+
+if(ENABLE_OPT)
+ target_include_directories(SPIRV
+ PRIVATE ${spirv-tools_SOURCE_DIR}/include
+ PRIVATE ${spirv-tools_SOURCE_DIR}/source
+ )
+ target_link_libraries(SPIRV glslang SPIRV-Tools-opt SPVRemapper)
+else()
+ target_link_libraries(SPIRV glslang)
+endif(ENABLE_OPT)
if(WIN32)
source_group("Source" FILES ${SOURCES} ${HEADERS})
source_group("Source" FILES ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
endif(WIN32)
-install(TARGETS SPIRV SPVRemapper
- ARCHIVE DESTINATION lib)
+if(ENABLE_GLSLANG_INSTALL)
+ install(TARGETS SPIRV SPVRemapper
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION include/SPIRV/)
+ install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SPIRV/)
+endif(ENABLE_GLSLANG_INSTALL)
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.AMD.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.AMD.h
index d2098cc1af6..7e97be38fe7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.AMD.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.AMD.h
@@ -28,24 +28,16 @@
#define GLSLextAMD_H
enum BuiltIn;
+enum Capability;
enum Decoration;
enum Op;
static const int GLSLextAMDVersion = 100;
-static const int GLSLextAMDRevision = 2;
+static const int GLSLextAMDRevision = 6;
// SPV_AMD_shader_ballot
static const char* const E_SPV_AMD_shader_ballot = "SPV_AMD_shader_ballot";
-static const Op OpGroupIAddNonUniformAMD = static_cast<Op>(5000);
-static const Op OpGroupFAddNonUniformAMD = static_cast<Op>(5001);
-static const Op OpGroupFMinNonUniformAMD = static_cast<Op>(5002);
-static const Op OpGroupUMinNonUniformAMD = static_cast<Op>(5003);
-static const Op OpGroupSMinNonUniformAMD = static_cast<Op>(5004);
-static const Op OpGroupFMaxNonUniformAMD = static_cast<Op>(5005);
-static const Op OpGroupUMaxNonUniformAMD = static_cast<Op>(5006);
-static const Op OpGroupSMaxNonUniformAMD = static_cast<Op>(5007);
-
enum ShaderBallotAMD {
ShaderBallotBadAMD = 0, // Don't use
@@ -79,16 +71,6 @@ enum ShaderTrinaryMinMaxAMD {
// SPV_AMD_shader_explicit_vertex_parameter
static const char* const E_SPV_AMD_shader_explicit_vertex_parameter = "SPV_AMD_shader_explicit_vertex_parameter";
-static const BuiltIn BuiltInBaryCoordNoPerspAMD = static_cast<BuiltIn>(4992);
-static const BuiltIn BuiltInBaryCoordNoPerspCentroidAMD = static_cast<BuiltIn>(4993);
-static const BuiltIn BuiltInBaryCoordNoPerspSampleAMD = static_cast<BuiltIn>(4994);
-static const BuiltIn BuiltInBaryCoordSmoothAMD = static_cast<BuiltIn>(4995);
-static const BuiltIn BuiltInBaryCoordSmoothCentroidAMD = static_cast<BuiltIn>(4996);
-static const BuiltIn BuiltInBaryCoordSmoothSampleAMD = static_cast<BuiltIn>(4997);
-static const BuiltIn BuiltInBaryCoordPullModelAMD = static_cast<BuiltIn>(4998);
-
-static const Decoration DecorationExplicitInterpAMD = static_cast<Decoration>(4999);
-
enum ShaderExplicitVertexParameterAMD {
ShaderExplicitVertexParameterBadAMD = 0, // Don't use
@@ -113,4 +95,23 @@ enum GcnShaderAMD {
// SPV_AMD_gpu_shader_half_float
static const char* const E_SPV_AMD_gpu_shader_half_float = "SPV_AMD_gpu_shader_half_float";
+// SPV_AMD_texture_gather_bias_lod
+static const char* const E_SPV_AMD_texture_gather_bias_lod = "SPV_AMD_texture_gather_bias_lod";
+
+// SPV_AMD_gpu_shader_int16
+static const char* const E_SPV_AMD_gpu_shader_int16 = "SPV_AMD_gpu_shader_int16";
+
+// SPV_AMD_shader_image_load_store_lod
+static const char* const E_SPV_AMD_shader_image_load_store_lod = "SPV_AMD_shader_image_load_store_lod";
+
+static const Capability CapabilityImageReadWriteLodAMD = static_cast<Capability>(5015);
+
+// SPV_AMD_shader_fragment_mask
+static const char* const E_SPV_AMD_shader_fragment_mask = "SPV_AMD_shader_fragment_mask";
+
+static const Capability CapabilityFragmentMaskAMD = static_cast<Capability>(5010);
+
+static const Op OpFragmentMaskFetchAMD = static_cast<Op>(5011);
+static const Op OpFragmentFetchAMD = static_cast<Op>(5012);
+
#endif // #ifndef GLSLextAMD_H
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h
index a8f20c3514c..2eb10ae629a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h
@@ -32,12 +32,17 @@ enum Op;
enum Capability;
static const int GLSLextKHRVersion = 100;
-static const int GLSLextKHRRevision = 1;
+static const int GLSLextKHRRevision = 2;
-static const char* const E_SPV_KHR_shader_ballot = "SPV_KHR_shader_ballot";
-static const char* const E_SPV_KHR_subgroup_vote = "SPV_KHR_subgroup_vote";
-static const char* const E_SPV_KHR_device_group = "SPV_KHR_device_group";
-static const char* const E_SPV_KHR_multiview = "SPV_KHR_multiview";
-static const char* const E_SPV_KHR_shader_draw_parameters = "SPV_KHR_shader_draw_parameters";
+static const char* const E_SPV_KHR_shader_ballot = "SPV_KHR_shader_ballot";
+static const char* const E_SPV_KHR_subgroup_vote = "SPV_KHR_subgroup_vote";
+static const char* const E_SPV_KHR_device_group = "SPV_KHR_device_group";
+static const char* const E_SPV_KHR_multiview = "SPV_KHR_multiview";
+static const char* const E_SPV_KHR_shader_draw_parameters = "SPV_KHR_shader_draw_parameters";
+static const char* const E_SPV_KHR_16bit_storage = "SPV_KHR_16bit_storage";
+static const char* const E_SPV_KHR_storage_buffer_storage_class = "SPV_KHR_storage_buffer_storage_class";
+static const char* const E_SPV_KHR_post_depth_coverage = "SPV_KHR_post_depth_coverage";
+static const char* const E_SPV_EXT_shader_stencil_export = "SPV_EXT_shader_stencil_export";
+static const char* const E_SPV_EXT_shader_viewport_index_layer = "SPV_EXT_shader_viewport_index_layer";
#endif // #ifndef GLSLextKHR_H
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp
index cdfb309b1bf..c23aa921863 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp
@@ -52,6 +52,16 @@ namespace spv {
#endif
}
+#ifdef ENABLE_OPT
+ #include "spirv-tools/optimizer.hpp"
+ #include "message.h"
+ #include "SPVRemapper.h"
+#endif
+
+#ifdef ENABLE_OPT
+using namespace spvtools;
+#endif
+
// Glslang includes
#include "../glslang/MachineIndependent/localintermediate.h"
#include "../glslang/MachineIndependent/SymbolTable.h"
@@ -68,11 +78,6 @@ namespace spv {
namespace {
-// For low-order part of the generator's magic number. Bump up
-// when there is a change in the style (e.g., if SSA form changes,
-// or a different instruction sequence to do something gets used).
-const int GeneratorVersion = 1;
-
namespace {
class SpecConstantOpModeGuard {
public:
@@ -101,7 +106,7 @@ private:
//
class TGlslangToSpvTraverser : public glslang::TIntermTraverser {
public:
- TGlslangToSpvTraverser(const glslang::TIntermediate*, spv::SpvBuildLogger* logger);
+ TGlslangToSpvTraverser(const glslang::TIntermediate*, spv::SpvBuildLogger* logger, glslang::SpvOptions& options);
virtual ~TGlslangToSpvTraverser() { }
bool visitAggregate(glslang::TVisit, glslang::TIntermAggregate*);
@@ -122,6 +127,9 @@ protected:
spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration);
spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
+ spv::SelectionControlMask TranslateSelectionControl(glslang::TSelectionControl) const;
+ spv::LoopControlMask TranslateLoopControl(glslang::TLoopControl) const;
+ spv::StorageClass TranslateStorageClass(const glslang::TType&);
spv::Id createSpvVariable(const glslang::TIntermSymbol*);
spv::Id getSampledType(const glslang::TSampler&);
spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&);
@@ -145,6 +153,8 @@ protected:
void declareUseOfStructMember(const glslang::TTypeList& members, int glslangMember);
bool isShaderEntryPoint(const glslang::TIntermAggregate* node);
+ bool writableParam(glslang::TStorageQualifier);
+ bool originalParam(glslang::TStorageQualifier, const glslang::TType&, bool implicitThisParam);
void makeFunctions(const glslang::TIntermSequence&);
void makeGlobalInitializers(const glslang::TIntermSequence&);
void visitFunctions(const glslang::TIntermSequence&);
@@ -177,6 +187,7 @@ protected:
spv::Id createShortCircuit(glslang::TOperator, glslang::TIntermTyped& left, glslang::TIntermTyped& right);
spv::Id getExtBuiltins(const char* name);
+ glslang::SpvOptions& options;
spv::Function* shaderEntry;
spv::Function* currentFunction;
spv::Instruction* entryPoint;
@@ -222,8 +233,7 @@ spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile
return spv::SourceLanguageUnknown;
}
case glslang::EShSourceHlsl:
- // Use SourceLanguageUnknown instead of SourceLanguageHLSL for now, until Vulkan knows what HLSL is
- return spv::SourceLanguageUnknown;
+ return spv::SourceLanguageHLSL;
default:
return spv::SourceLanguageUnknown;
}
@@ -245,37 +255,6 @@ spv::ExecutionModel TranslateExecutionModel(EShLanguage stage)
}
}
-// Translate glslang type to SPIR-V storage class.
-spv::StorageClass TranslateStorageClass(const glslang::TType& type)
-{
- if (type.getQualifier().isPipeInput())
- return spv::StorageClassInput;
- else if (type.getQualifier().isPipeOutput())
- return spv::StorageClassOutput;
- else if (type.getBasicType() == glslang::EbtAtomicUint)
- return spv::StorageClassAtomicCounter;
- else if (type.containsOpaque())
- return spv::StorageClassUniformConstant;
- else if (type.getQualifier().isUniformOrBuffer()) {
- if (type.getQualifier().layoutPushConstant)
- return spv::StorageClassPushConstant;
- if (type.getBasicType() == glslang::EbtBlock)
- return spv::StorageClassUniform;
- else
- return spv::StorageClassUniformConstant;
- } else {
- switch (type.getQualifier().storage) {
- case glslang::EvqShared: return spv::StorageClassWorkgroup; break;
- case glslang::EvqGlobal: return spv::StorageClassPrivate;
- case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
- case glslang::EvqTemporary: return spv::StorageClassFunction;
- default:
- assert(0);
- return spv::StorageClassFunction;
- }
- }
-}
-
// Translate glslang sampler type to SPIR-V dimensionality.
spv::Dim TranslateDimensionality(const glslang::TSampler& sampler)
{
@@ -311,12 +290,12 @@ spv::Decoration TranslatePrecisionDecoration(const glslang::TType& type)
}
// Translate glslang type to SPIR-V block decorations.
-spv::Decoration TranslateBlockDecoration(const glslang::TType& type)
+spv::Decoration TranslateBlockDecoration(const glslang::TType& type, bool useStorageBuffer)
{
if (type.getBasicType() == glslang::EbtBlock) {
switch (type.getQualifier().storage) {
case glslang::EvqUniform: return spv::DecorationBlock;
- case glslang::EvqBuffer: return spv::DecorationBufferBlock;
+ case glslang::EvqBuffer: return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock;
case glslang::EvqVaryingIn: return spv::DecorationBlock;
case glslang::EvqVaryingOut: return spv::DecorationBlock;
default:
@@ -481,17 +460,13 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
return spv::BuiltInCullDistance;
case glslang::EbvViewportIndex:
- if (!memberDeclaration) {
- builder.addCapability(spv::CapabilityMultiViewport);
-#ifdef NV_EXTENSIONS
- if (glslangIntermediate->getStage() == EShLangVertex ||
- glslangIntermediate->getStage() == EShLangTessControl ||
- glslangIntermediate->getStage() == EShLangTessEvaluation) {
+ builder.addCapability(spv::CapabilityMultiViewport);
+ if (glslangIntermediate->getStage() == EShLangVertex ||
+ glslangIntermediate->getStage() == EShLangTessControl ||
+ glslangIntermediate->getStage() == EShLangTessEvaluation) {
- builder.addExtension(spv::E_SPV_NV_viewport_array2);
- builder.addCapability(spv::CapabilityShaderViewportIndexLayerNV);
- }
-#endif
+ builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
+ builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
}
return spv::BuiltInViewportIndex;
@@ -504,23 +479,17 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
return spv::BuiltInSamplePosition;
case glslang::EbvSampleMask:
- builder.addCapability(spv::CapabilitySampleRateShading);
return spv::BuiltInSampleMask;
case glslang::EbvLayer:
- if (!memberDeclaration) {
- builder.addCapability(spv::CapabilityGeometry);
-#ifdef NV_EXTENSIONS
- if (glslangIntermediate->getStage() == EShLangVertex ||
- glslangIntermediate->getStage() == EShLangTessControl ||
- glslangIntermediate->getStage() == EShLangTessEvaluation) {
+ builder.addCapability(spv::CapabilityGeometry);
+ if (glslangIntermediate->getStage() == EShLangVertex ||
+ glslangIntermediate->getStage() == EShLangTessControl ||
+ glslangIntermediate->getStage() == EShLangTessEvaluation) {
- builder.addExtension(spv::E_SPV_NV_viewport_array2);
- builder.addCapability(spv::CapabilityShaderViewportIndexLayerNV);
- }
-#endif
+ builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
+ builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
}
-
return spv::BuiltInLayer;
case glslang::EbvPosition: return spv::BuiltInPosition;
@@ -549,6 +518,11 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addCapability(spv::CapabilityGeometry);
return spv::BuiltInPrimitiveId;
+ case glslang::EbvFragStencilRef:
+ builder.addExtension(spv::E_SPV_EXT_shader_stencil_export);
+ builder.addCapability(spv::CapabilityStencilExportEXT);
+ return spv::BuiltInFragStencilRefEXT;
+
case glslang::EbvInvocationId: return spv::BuiltInInvocationId;
case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner;
case glslang::EbvTessLevelOuter: return spv::BuiltInTessLevelOuter;
@@ -766,6 +740,70 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
}
}
+spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSelectionControl(glslang::TSelectionControl selectionControl) const
+{
+ switch (selectionControl) {
+ case glslang::ESelectionControlNone: return spv::SelectionControlMaskNone;
+ case glslang::ESelectionControlFlatten: return spv::SelectionControlFlattenMask;
+ case glslang::ESelectionControlDontFlatten: return spv::SelectionControlDontFlattenMask;
+ default: return spv::SelectionControlMaskNone;
+ }
+}
+
+spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(glslang::TLoopControl loopControl) const
+{
+ switch (loopControl) {
+ case glslang::ELoopControlNone: return spv::LoopControlMaskNone;
+ case glslang::ELoopControlUnroll: return spv::LoopControlUnrollMask;
+ case glslang::ELoopControlDontUnroll: return spv::LoopControlDontUnrollMask;
+ // TODO: DependencyInfinite
+ // TODO: DependencyLength
+ default: return spv::LoopControlMaskNone;
+ }
+}
+
+// Translate glslang type to SPIR-V storage class.
+spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type)
+{
+ if (type.getQualifier().isPipeInput())
+ return spv::StorageClassInput;
+ if (type.getQualifier().isPipeOutput())
+ return spv::StorageClassOutput;
+
+ if (glslangIntermediate->getSource() != glslang::EShSourceHlsl ||
+ type.getQualifier().storage == glslang::EvqUniform) {
+ if (type.getBasicType() == glslang::EbtAtomicUint)
+ return spv::StorageClassAtomicCounter;
+ if (type.containsOpaque())
+ return spv::StorageClassUniformConstant;
+ }
+
+ if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) {
+ builder.addExtension(spv::E_SPV_KHR_storage_buffer_storage_class);
+ return spv::StorageClassStorageBuffer;
+ }
+
+ if (type.getQualifier().isUniformOrBuffer()) {
+ if (type.getQualifier().layoutPushConstant)
+ return spv::StorageClassPushConstant;
+ if (type.getBasicType() == glslang::EbtBlock)
+ return spv::StorageClassUniform;
+ return spv::StorageClassUniformConstant;
+ }
+
+ switch (type.getQualifier().storage) {
+ case glslang::EvqShared: return spv::StorageClassWorkgroup;
+ case glslang::EvqGlobal: return spv::StorageClassPrivate;
+ case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
+ case glslang::EvqTemporary: return spv::StorageClassFunction;
+ default:
+ assert(0);
+ break;
+ }
+
+ return spv::StorageClassFunction;
+}
+
// Return whether or not the given type is something that should be tied to a
// descriptor set.
bool IsDescriptorResource(const glslang::TType& type)
@@ -835,17 +873,44 @@ bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQualifie
// Implement the TGlslangToSpvTraverser class.
//
-TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* glslangIntermediate, spv::SpvBuildLogger* buildLogger)
- : TIntermTraverser(true, false, true), shaderEntry(nullptr), currentFunction(nullptr),
+TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* glslangIntermediate,
+ spv::SpvBuildLogger* buildLogger, glslang::SpvOptions& options)
+ : TIntermTraverser(true, false, true),
+ options(options),
+ shaderEntry(nullptr), currentFunction(nullptr),
sequenceDepth(0), logger(buildLogger),
- builder((glslang::GetKhronosToolId() << 16) | GeneratorVersion, logger),
+ builder((glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger),
inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
glslangIntermediate(glslangIntermediate)
{
spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
builder.clearAccessChain();
- builder.setSource(TranslateSourceLanguage(glslangIntermediate->getSource(), glslangIntermediate->getProfile()), glslangIntermediate->getVersion());
+ builder.setSource(TranslateSourceLanguage(glslangIntermediate->getSource(), glslangIntermediate->getProfile()),
+ glslangIntermediate->getVersion());
+
+ if (options.generateDebugInfo) {
+ builder.setEmitOpLines();
+ builder.setSourceFile(glslangIntermediate->getSourceFile());
+
+ // Set the source shader's text. If for SPV version 1.0, include
+ // a preamble in comments stating the OpModuleProcessed instructions.
+ // Otherwise, emit those as actual instructions.
+ std::string text;
+ const std::vector<std::string>& processes = glslangIntermediate->getProcesses();
+ for (int p = 0; p < (int)processes.size(); ++p) {
+ if (glslangIntermediate->getSpv().spv < 0x00010100) {
+ text.append("// OpModuleProcessed ");
+ text.append(processes[p]);
+ text.append("\n");
+ } else
+ builder.addModuleProcessed(processes[p]);
+ }
+ if (glslangIntermediate->getSpv().spv < 0x00010100 && (int)processes.size() > 0)
+ text.append("#line 1\n");
+ text.append(glslangIntermediate->getSourceText());
+ builder.setSourceText(text);
+ }
stdBuiltins = builder.import("GLSL.std.450");
builder.setMemoryModel(spv::AddressingModelLogical, spv::MemoryModelGLSL450);
shaderEntry = builder.makeEntryPoint(glslangIntermediate->getEntryPointName().c_str());
@@ -869,14 +934,20 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls
builder.addCapability(spv::CapabilityShader);
break;
+ case EShLangTessEvaluation:
case EShLangTessControl:
builder.addCapability(spv::CapabilityTessellation);
- builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
- break;
- case EShLangTessEvaluation:
- builder.addCapability(spv::CapabilityTessellation);
- switch (glslangIntermediate->getInputPrimitive()) {
+ glslang::TLayoutGeometry primitive;
+
+ if (glslangIntermediate->getStage() == EShLangTessControl) {
+ builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
+ primitive = glslangIntermediate->getOutputPrimitive();
+ } else {
+ primitive = glslangIntermediate->getInputPrimitive();
+ }
+
+ switch (primitive) {
case glslang::ElgTriangles: mode = spv::ExecutionModeTriangles; break;
case glslang::ElgQuads: mode = spv::ExecutionModeQuads; break;
case glslang::ElgIsolines: mode = spv::ExecutionModeIsolines; break;
@@ -945,6 +1016,12 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls
if (glslangIntermediate->getEarlyFragmentTests())
builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests);
+ if (glslangIntermediate->getPostDepthCoverage()) {
+ builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage);
+ builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage);
+ builder.addExtension(spv::E_SPV_KHR_post_depth_coverage);
+ }
+
switch(glslangIntermediate->getDepth()) {
case glslang::EldGreater: mode = spv::ExecutionModeDepthGreater; break;
case glslang::EldLess: mode = spv::ExecutionModeDepthLess; break;
@@ -1018,8 +1095,10 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
// Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
if (builder.isPointer(id)) {
spv::StorageClass sc = builder.getStorageClass(id);
- if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)
- iOSet.insert(id);
+ if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput) {
+ if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0)
+ iOSet.insert(id);
+ }
}
// Only process non-linkage-only nodes for generating actual static uses
@@ -1047,6 +1126,8 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node)
{
+ builder.setLine(node->getLoc().line);
+
SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
if (node->getType().getQualifier().isSpecConstant())
spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
@@ -1234,6 +1315,8 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node)
{
+ builder.setLine(node->getLoc().line);
+
SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
if (node->getType().getQualifier().isSpecConstant())
spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
@@ -1334,6 +1417,10 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
#endif
else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
one = builder.makeInt64Constant(1);
+#ifdef AMD_EXTENSIONS
+ else if (node->getBasicType() == glslang::EbtInt16 || node->getBasicType() == glslang::EbtUint16)
+ one = builder.makeInt16Constant(1);
+#endif
else
one = builder.makeIntConstant(1);
glslang::TOperator op;
@@ -1392,7 +1479,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
builder.setAccessChainRValue(result);
return false;
+#ifdef AMD_EXTENSIONS
+ } else if (node->getOp() == glslang::EOpImageStore || node->getOp() == glslang::EOpImageStoreLod) {
+#else
} else if (node->getOp() == glslang::EOpImageStore) {
+#endif
// "imageStore" is a special case, which has no result
return false;
}
@@ -1477,6 +1568,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
return false;
case glslang::EOpFunctionCall:
{
+ builder.setLine(node->getLoc().line);
if (node->isUserDefined())
result = handleUserFunctionCall(node);
// assert(result); // this can happen for bad shaders because the call graph completeness checking is not yet done
@@ -1506,6 +1598,33 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpConstructDMat4x2:
case glslang::EOpConstructDMat4x3:
case glslang::EOpConstructDMat4x4:
+ case glslang::EOpConstructIMat2x2:
+ case glslang::EOpConstructIMat2x3:
+ case glslang::EOpConstructIMat2x4:
+ case glslang::EOpConstructIMat3x2:
+ case glslang::EOpConstructIMat3x3:
+ case glslang::EOpConstructIMat3x4:
+ case glslang::EOpConstructIMat4x2:
+ case glslang::EOpConstructIMat4x3:
+ case glslang::EOpConstructIMat4x4:
+ case glslang::EOpConstructUMat2x2:
+ case glslang::EOpConstructUMat2x3:
+ case glslang::EOpConstructUMat2x4:
+ case glslang::EOpConstructUMat3x2:
+ case glslang::EOpConstructUMat3x3:
+ case glslang::EOpConstructUMat3x4:
+ case glslang::EOpConstructUMat4x2:
+ case glslang::EOpConstructUMat4x3:
+ case glslang::EOpConstructUMat4x4:
+ case glslang::EOpConstructBMat2x2:
+ case glslang::EOpConstructBMat2x3:
+ case glslang::EOpConstructBMat2x4:
+ case glslang::EOpConstructBMat3x2:
+ case glslang::EOpConstructBMat3x3:
+ case glslang::EOpConstructBMat3x4:
+ case glslang::EOpConstructBMat4x2:
+ case glslang::EOpConstructBMat4x3:
+ case glslang::EOpConstructBMat4x4:
#ifdef AMD_EXTENSIONS
case glslang::EOpConstructF16Mat2x2:
case glslang::EOpConstructF16Mat2x3:
@@ -1553,9 +1672,20 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpConstructU64Vec2:
case glslang::EOpConstructU64Vec3:
case glslang::EOpConstructU64Vec4:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConstructInt16:
+ case glslang::EOpConstructI16Vec2:
+ case glslang::EOpConstructI16Vec3:
+ case glslang::EOpConstructI16Vec4:
+ case glslang::EOpConstructUint16:
+ case glslang::EOpConstructU16Vec2:
+ case glslang::EOpConstructU16Vec3:
+ case glslang::EOpConstructU16Vec4:
+#endif
case glslang::EOpConstructStruct:
case glslang::EOpConstructTextureSampler:
{
+ builder.setLine(node->getLoc().line);
std::vector<spv::Id> arguments;
translateArguments(*node, arguments);
spv::Id constructed;
@@ -1646,6 +1776,20 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
atomic = true;
break;
+ case glslang::EOpAtomicCounterAdd:
+ case glslang::EOpAtomicCounterSubtract:
+ case glslang::EOpAtomicCounterMin:
+ case glslang::EOpAtomicCounterMax:
+ case glslang::EOpAtomicCounterAnd:
+ case glslang::EOpAtomicCounterOr:
+ case glslang::EOpAtomicCounterXor:
+ case glslang::EOpAtomicCounterExchange:
+ case glslang::EOpAtomicCounterCompSwap:
+ builder.addExtension("SPV_KHR_shader_atomic_counter_ops");
+ builder.addCapability(spv::CapabilityAtomicStorageOps);
+ atomic = true;
+ break;
+
default:
break;
}
@@ -1666,6 +1810,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
right->traverse(this);
spv::Id rightId = accessChainLoad(right->getType());
+ builder.setLine(node->getLoc().line);
result = createBinaryOperation(binOp, precision, TranslateNoContractionDecoration(node->getType().getQualifier()),
resultType(), leftId, rightId,
left->getType().getBasicType(), reduceComparison);
@@ -1715,6 +1860,15 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpAtomicXor:
case glslang::EOpAtomicExchange:
case glslang::EOpAtomicCompSwap:
+ case glslang::EOpAtomicCounterAdd:
+ case glslang::EOpAtomicCounterSubtract:
+ case glslang::EOpAtomicCounterMin:
+ case glslang::EOpAtomicCounterMax:
+ case glslang::EOpAtomicCounterAnd:
+ case glslang::EOpAtomicCounterOr:
+ case glslang::EOpAtomicCounterXor:
+ case glslang::EOpAtomicCounterExchange:
+ case glslang::EOpAtomicCounterCompSwap:
if (arg == 0)
lvalue = true;
break;
@@ -1738,10 +1892,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
glslangOperands[arg]->traverse(this);
if (lvalue)
operands.push_back(builder.accessChainGetLValue());
- else
+ else {
+ builder.setLine(node->getLoc().line);
operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
+ }
}
+ builder.setLine(node->getLoc().line);
if (atomic) {
// Handle all atomics
result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
@@ -1823,7 +1980,17 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang
node->getFalseBlock()->traverse(this);
spv::Id falseValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
- spv::Id select = builder.createTriOp(spv::OpSelect, convertGlslangToSpvType(node->getType()), condition, trueValue, falseValue);
+ builder.setLine(node->getLoc().line);
+
+ // smear condition to vector, if necessary (AST is always scalar)
+ if (builder.isVector(trueValue))
+ condition = builder.smearScalar(spv::NoPrecision, condition,
+ builder.makeVectorType(builder.makeBoolType(),
+ builder.getNumComponents(trueValue)));
+
+ spv::Id select = builder.createTriOp(spv::OpSelect,
+ convertGlslangToSpvType(node->getType()), condition,
+ trueValue, falseValue);
builder.clearAccessChain();
builder.setAccessChainRValue(select);
};
@@ -1839,8 +2006,7 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang
return false;
}
- // Instead, emit control flow...
-
+ // Instead, emit control flow...
// Don't handle results as temporaries, because there will be two names
// and better to leave SSA to later passes.
spv::Id result = (node->getBasicType() == glslang::EbtVoid)
@@ -1850,8 +2016,11 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang
// emit the condition before doing anything with selection
node->getCondition()->traverse(this);
+ // Selection control:
+ const spv::SelectionControlMask control = TranslateSelectionControl(node->getSelectionControl());
+
// make an "if" based on the value created by the condition
- spv::Builder::If ifBuilder(accessChainLoad(node->getCondition()->getType()), builder);
+ spv::Builder::If ifBuilder(accessChainLoad(node->getCondition()->getType()), control, builder);
// emit the "then" statement
if (node->getTrueBlock() != nullptr) {
@@ -1889,6 +2058,9 @@ bool TGlslangToSpvTraverser::visitSwitch(glslang::TVisit /* visit */, glslang::T
node->getCondition()->traverse(this);
spv::Id selector = accessChainLoad(node->getCondition()->getAsTyped()->getType());
+ // Selection control:
+ const spv::SelectionControlMask control = TranslateSelectionControl(node->getSelectionControl());
+
// browse the children to sort out code segments
int defaultSegment = -1;
std::vector<TIntermNode*> codeSegments;
@@ -1914,7 +2086,7 @@ bool TGlslangToSpvTraverser::visitSwitch(glslang::TVisit /* visit */, glslang::T
// make the switch statement
std::vector<spv::Block*> segmentBlocks; // returned, as the blocks allocated in the call
- builder.makeSwitch(selector, (int)codeSegments.size(), caseValues, valueIndexToSegment, defaultSegment, segmentBlocks);
+ builder.makeSwitch(selector, control, (int)codeSegments.size(), caseValues, valueIndexToSegment, defaultSegment, segmentBlocks);
// emit all the code in the segments
breakForLoop.push(false);
@@ -1945,22 +2117,28 @@ bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIn
{
auto blocks = builder.makeNewLoop();
builder.createBranch(&blocks.head);
+
+ // Loop control:
+ const spv::LoopControlMask control = TranslateLoopControl(node->getLoopControl());
+
+ // TODO: dependency length
+
// Spec requires back edges to target header blocks, and every header block
// must dominate its merge block. Make a header block first to ensure these
// conditions are met. By definition, it will contain OpLoopMerge, followed
// by a block-ending branch. But we don't want to put any other body/test
// instructions in it, since the body/test may have arbitrary instructions,
// including merges of its own.
+ builder.setLine(node->getLoc().line);
builder.setBuildPoint(&blocks.head);
- builder.createLoopMerge(&blocks.merge, &blocks.continue_target, spv::LoopControlMaskNone);
+ builder.createLoopMerge(&blocks.merge, &blocks.continue_target, control);
if (node->testFirst() && node->getTest()) {
spv::Block& test = builder.makeNewBlock();
builder.createBranch(&test);
builder.setBuildPoint(&test);
node->getTest()->traverse(this);
- spv::Id condition =
- accessChainLoad(node->getTest()->getType());
+ spv::Id condition = accessChainLoad(node->getTest()->getType());
builder.createConditionalBranch(condition, &blocks.body, &blocks.merge);
builder.setBuildPoint(&blocks.body);
@@ -1975,6 +2153,7 @@ bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIn
node->getTerminal()->traverse(this);
builder.createBranch(&blocks.head);
} else {
+ builder.setLine(node->getLoc().line);
builder.createBranch(&blocks.body);
breakForLoop.push(true);
@@ -2009,6 +2188,8 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
if (node->getExpression())
node->getExpression()->traverse(this);
+ builder.setLine(node->getLoc().line);
+
switch (node->getFlowOp()) {
case glslang::EOpKill:
builder.makeDiscard();
@@ -2061,6 +2242,26 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
spv::StorageClass storageClass = TranslateStorageClass(node->getType());
spv::Id spvType = convertGlslangToSpvType(node->getType());
+#ifdef AMD_EXTENSIONS
+ const bool contains16BitType = node->getType().containsBasicType(glslang::EbtFloat16) ||
+ node->getType().containsBasicType(glslang::EbtInt16) ||
+ node->getType().containsBasicType(glslang::EbtUint16);
+ if (contains16BitType) {
+ if (storageClass == spv::StorageClassInput || storageClass == spv::StorageClassOutput) {
+ builder.addExtension(spv::E_SPV_KHR_16bit_storage);
+ builder.addCapability(spv::CapabilityStorageInputOutput16);
+ } else if (storageClass == spv::StorageClassPushConstant) {
+ builder.addExtension(spv::E_SPV_KHR_16bit_storage);
+ builder.addCapability(spv::CapabilityStoragePushConstant16);
+ } else if (storageClass == spv::StorageClassUniform) {
+ builder.addExtension(spv::E_SPV_KHR_16bit_storage);
+ builder.addCapability(spv::CapabilityStorageUniform16);
+ if (node->getType().getQualifier().storage == glslang::EvqBuffer)
+ builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
+ }
+ }
+#endif
+
const char* name = node->getName().c_str();
if (glslang::IsAnonymous(name))
name = "";
@@ -2157,13 +2358,21 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
spvType = builder.makeUintType(32);
break;
case glslang::EbtInt64:
- builder.addCapability(spv::CapabilityInt64);
spvType = builder.makeIntType(64);
break;
case glslang::EbtUint64:
- builder.addCapability(spv::CapabilityInt64);
spvType = builder.makeUintType(64);
break;
+#ifdef AMD_EXTENSIONS
+ case glslang::EbtInt16:
+ builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
+ spvType = builder.makeIntType(16);
+ break;
+ case glslang::EbtUint16:
+ builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
+ spvType = builder.makeUintType(16);
+ break;
+#endif
case glslang::EbtAtomicUint:
builder.addCapability(spv::CapabilityAtomicStorage);
spvType = builder.makeUintType(32);
@@ -2272,12 +2481,21 @@ bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member)
{
auto& extensions = glslangIntermediate->getRequestedExtensions();
+ if (member.getFieldName() == "gl_ViewportMask" &&
+ extensions.find("GL_NV_viewport_array2") == extensions.end())
+ return true;
+ if (member.getFieldName() == "gl_SecondaryViewportMaskNV" &&
+ extensions.find("GL_NV_stereo_view_rendering") == extensions.end())
+ return true;
if (member.getFieldName() == "gl_SecondaryPositionNV" &&
extensions.find("GL_NV_stereo_view_rendering") == extensions.end())
return true;
if (member.getFieldName() == "gl_PositionPerViewNV" &&
extensions.find("GL_NVX_multiview_per_view_attributes") == extensions.end())
return true;
+ if (member.getFieldName() == "gl_ViewportMaskPerViewNV" &&
+ extensions.find("GL_NVX_multiview_per_view_attributes") == extensions.end())
+ return true;
return false;
};
@@ -2293,7 +2511,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy
// Create a vector of struct types for SPIR-V to consume
std::vector<spv::Id> spvMembers;
int memberDelta = 0; // how much the member's index changes from glslang to SPIR-V, normally 0, except sometimes for blocks
- int locationOffset = 0; // for use across struct members, when they are called recursively
for (int i = 0; i < (int)glslangMembers->size(); i++) {
glslang::TType& glslangMember = *(*glslangMembers)[i].type;
if (glslangMember.hiddenMember()) {
@@ -2310,11 +2527,9 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy
glslang::TQualifier memberQualifier = glslangMember.getQualifier();
InheritQualifiers(memberQualifier, qualifier);
- // manually inherit location; it's more complex
+ // manually inherit location
if (! memberQualifier.hasLocation() && qualifier.hasLocation())
- memberQualifier.layoutLocation = qualifier.layoutLocation + locationOffset;
- if (qualifier.hasLocation())
- locationOffset += glslangIntermediate->computeTypeLocationSize(glslangMember);
+ memberQualifier.layoutLocation = qualifier.layoutLocation;
// recurse
spvMembers.push_back(convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier));
@@ -2370,36 +2585,21 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
}
addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
- if (qualifier.storage == glslang::EvqBuffer) {
+ if (type.getBasicType() == glslang::EbtBlock &&
+ qualifier.storage == glslang::EvqBuffer) {
+ // Add memory decorations only to top-level members of shader storage block
std::vector<spv::Decoration> memory;
TranslateMemoryDecoration(memberQualifier, memory);
for (unsigned int i = 0; i < memory.size(); ++i)
addMemberDecoration(spvType, member, memory[i]);
}
- // Compute location decoration; tricky based on whether inheritance is at play and
- // what kind of container we have, etc.
- // TODO: This algorithm (and it's cousin above doing almost the same thing) should
- // probably move to the linker stage of the front end proper, and just have the
- // answer sitting already distributed throughout the individual member locations.
- int location = -1; // will only decorate if present or inherited
+ // Location assignment was already completed correctly by the front end,
+ // just track whether a member needs to be decorated.
// Ignore member locations if the container is an array, as that's
- // ill-specified and decisions have been made to not allow this anyway.
- // The object itself must have a location, and that comes out from decorating the object,
- // not the type (this code decorates types).
- if (! type.isArray()) {
- if (memberQualifier.hasLocation()) { // no inheritance, or override of inheritance
- // struct members should not have explicit locations
- assert(type.getBasicType() != glslang::EbtStruct);
- location = memberQualifier.layoutLocation;
- } else if (type.getBasicType() != glslang::EbtBlock) {
- // If it is a not a Block, (...) Its members are assigned consecutive locations (...)
- // The members, and their nested types, must not themselves have Location decorations.
- } else if (qualifier.hasLocation()) // inheritance
- location = qualifier.layoutLocation + locationOffset;
- }
- if (location >= 0)
- builder.addMemberDecoration(spvType, member, spv::DecorationLocation, location);
+ // ill-specified and decisions have been made to not allow this.
+ if (! type.isArray() && memberQualifier.hasLocation())
+ builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation);
if (qualifier.hasLocation()) // track for upcoming inheritance
locationOffset += glslangIntermediate->computeTypeLocationSize(glslangMember);
@@ -2451,7 +2651,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
// Decorate the structure
addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
- addDecoration(spvType, TranslateBlockDecoration(type));
+ addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer()));
if (type.getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
builder.addCapability(spv::CapabilityGeometryStreams);
builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream);
@@ -2528,19 +2728,24 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I
// Conversion for bool
spv::Id boolType = builder.makeBoolType();
if (nominalTypeId != boolType) {
+ // keep these outside arguments, for determinant order-of-evaluation
+ spv::Id one = builder.makeUintConstant(1);
spv::Id zero = builder.makeUintConstant(0);
- spv::Id one = builder.makeUintConstant(1);
rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
- }
+ } else if (builder.getTypeId(rvalue) != boolType)
+ rvalue = builder.createBinOp(spv::OpINotEqual, boolType, rvalue, builder.makeUintConstant(0));
} else if (builder.isVectorType(nominalTypeId)) {
// Conversion for bvec
int vecSize = builder.getNumTypeComponents(nominalTypeId);
spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize);
if (nominalTypeId != bvecType) {
+ // keep these outside arguments, for determinant order-of-evaluation
+ spv::Id one = makeSmearedConstant(builder.makeUintConstant(1), vecSize);
spv::Id zero = makeSmearedConstant(builder.makeUintConstant(0), vecSize);
- spv::Id one = makeSmearedConstant(builder.makeUintConstant(1), vecSize);
rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
- }
+ } else if (builder.getTypeId(rvalue) != bvecType)
+ rvalue = builder.createBinOp(spv::OpINotEqual, bvecType, rvalue,
+ makeSmearedConstant(builder.makeUintConstant(0), vecSize));
}
}
@@ -2673,7 +2878,7 @@ int TGlslangToSpvTraverser::getMatrixStride(const glslang::TType& matrixType, gl
// 'currentOffset' should be passed in already initialized, ready to modify, and reflecting
// the migration of data from nextOffset -> currentOffset. It should be -1 on the first call.
// -1 means a non-forced member offset (no decoration needed).
-void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& /*structType*/, const glslang::TType& memberType, int& currentOffset, int& nextOffset,
+void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset,
glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
{
// this will get a positive value when deemed necessary
@@ -2705,7 +2910,27 @@ void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& /*structTy
int memberSize;
int dummyStride;
int memberAlignment = glslangIntermediate->getBaseAlignment(memberType, memberSize, dummyStride, explicitLayout == glslang::ElpStd140, matrixLayout == glslang::ElmRowMajor);
+
+ // Adjust alignment for HLSL rules
+ // TODO: make this consistent in early phases of code:
+ // adjusting this late means inconsistencies with earlier code, which for reflection is an issue
+ // Until reflection is brought in sync with these adjustments, don't apply to $Global,
+ // which is the most likely to rely on reflection, and least likely to rely implicit layouts
+ if (glslangIntermediate->usingHlslOFfsets() &&
+ ! memberType.isArray() && memberType.isVector() && structType.getTypeName().compare("$Global") != 0) {
+ int dummySize;
+ int componentAlignment = glslangIntermediate->getBaseAlignmentScalar(memberType, dummySize);
+ if (componentAlignment <= 4)
+ memberAlignment = componentAlignment;
+ }
+
+ // Bump up to member alignment
glslang::RoundToPow2(currentOffset, memberAlignment);
+
+ // Bump up to vec4 if there is a bad straddle
+ if (glslangIntermediate->improperStraddle(memberType, memberSize, currentOffset))
+ glslang::RoundToPow2(currentOffset, 16);
+
nextOffset = currentOffset + memberSize;
}
@@ -2718,8 +2943,6 @@ void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList&
case glslang::EbvCullDistance:
case glslang::EbvPointSize:
#ifdef NV_EXTENSIONS
- case glslang::EbvLayer:
- case glslang::EbvViewportIndex:
case glslang::EbvViewportMaskNV:
case glslang::EbvSecondaryPositionNV:
case glslang::EbvSecondaryViewportMaskNV:
@@ -2742,9 +2965,34 @@ bool TGlslangToSpvTraverser::isShaderEntryPoint(const glslang::TIntermAggregate*
return node->getName().compare(glslangIntermediate->getEntryPointMangledName().c_str()) == 0;
}
+// Does parameter need a place to keep writes, separate from the original?
+bool TGlslangToSpvTraverser::writableParam(glslang::TStorageQualifier qualifier)
+{
+ return qualifier != glslang::EvqConstReadOnly;
+}
+
+// Is parameter pass-by-original?
+bool TGlslangToSpvTraverser::originalParam(glslang::TStorageQualifier qualifier, const glslang::TType& paramType,
+ bool implicitThisParam)
+{
+ if (implicitThisParam) // implicit this
+ return true;
+ if (glslangIntermediate->getSource() == glslang::EShSourceHlsl)
+ return false;
+ return paramType.containsOpaque() || // sampler, etc.
+ (paramType.getBasicType() == glslang::EbtBlock && qualifier == glslang::EvqBuffer); // SSBO
+}
+
// Make all the functions, skeletally, without actually visiting their bodies.
void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslFunctions)
{
+ const auto getParamDecorations = [](std::vector<spv::Decoration>& decorations, const glslang::TType& type) {
+ spv::Decoration paramPrecision = TranslatePrecisionDecoration(type);
+ if (paramPrecision != spv::NoPrecision)
+ decorations.push_back(paramPrecision);
+ TranslateMemoryDecoration(type.getQualifier(), decorations);
+ };
+
for (int f = 0; f < (int)glslFunctions.size(); ++f) {
glslang::TIntermAggregate* glslFunction = glslFunctions[f]->getAsAggregate();
if (! glslFunction || glslFunction->getOp() != glslang::EOpFunction || isShaderEntryPoint(glslFunction))
@@ -2765,32 +3013,31 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF
// GLSL has copy-in/copy-out semantics. They can be handled though with a pointer to a copy.
std::vector<spv::Id> paramTypes;
- std::vector<spv::Decoration> paramPrecisions;
+ std::vector<std::vector<spv::Decoration>> paramDecorations; // list of decorations per parameter
glslang::TIntermSequence& parameters = glslFunction->getSequence()[0]->getAsAggregate()->getSequence();
- bool implicitThis = (int)parameters.size() > 0 && parameters[0]->getAsSymbolNode()->getName() == glslangIntermediate->implicitThisName;
+ bool implicitThis = (int)parameters.size() > 0 && parameters[0]->getAsSymbolNode()->getName() ==
+ glslangIntermediate->implicitThisName;
+ paramDecorations.resize(parameters.size());
for (int p = 0; p < (int)parameters.size(); ++p) {
const glslang::TType& paramType = parameters[p]->getAsTyped()->getType();
spv::Id typeId = convertGlslangToSpvType(paramType);
- // can we pass by reference?
- if (paramType.containsOpaque() || // sampler, etc.
- (paramType.getBasicType() == glslang::EbtBlock &&
- paramType.getQualifier().storage == glslang::EvqBuffer) || // SSBO
- p == 0 && implicitThis) // implicit 'this'
+ if (originalParam(paramType.getQualifier().storage, paramType, implicitThis && p == 0))
typeId = builder.makePointer(TranslateStorageClass(paramType), typeId);
- else if (paramType.getQualifier().storage != glslang::EvqConstReadOnly)
+ else if (writableParam(paramType.getQualifier().storage))
typeId = builder.makePointer(spv::StorageClassFunction, typeId);
else
rValueParameters.insert(parameters[p]->getAsSymbolNode()->getId());
- paramPrecisions.push_back(TranslatePrecisionDecoration(paramType));
+ getParamDecorations(paramDecorations[p], paramType);
paramTypes.push_back(typeId);
}
spv::Block* functionBlock;
spv::Function *function = builder.makeFunctionEntry(TranslatePrecisionDecoration(glslFunction->getType()),
convertGlslangToSpvType(glslFunction->getType()),
- glslFunction->getName().c_str(), paramTypes, paramPrecisions, &functionBlock);
+ glslFunction->getName().c_str(), paramTypes,
+ paramDecorations, &functionBlock);
if (implicitThis)
function->setImplicitThis();
@@ -2909,7 +3156,7 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if (i == 6)
lvalue = true;
break;
- case glslang::EOpSparseTextureGather:
+ case glslang::EOpSparseTextureGather:
if ((sampler.shadow && i == 3) || (! sampler.shadow && i == 2))
lvalue = true;
break;
@@ -2918,6 +3165,21 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if ((sampler.shadow && i == 4) || (! sampler.shadow && i == 3))
lvalue = true;
break;
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpSparseTextureGatherLod:
+ if (i == 3)
+ lvalue = true;
+ break;
+ case glslang::EOpSparseTextureGatherLodOffset:
+ case glslang::EOpSparseTextureGatherLodOffsets:
+ if (i == 4)
+ lvalue = true;
+ break;
+ case glslang::EOpSparseImageLoadLod:
+ if (i == 3)
+ lvalue = true;
+ break;
+#endif
default:
break;
}
@@ -2938,9 +3200,11 @@ void TGlslangToSpvTraverser::translateArguments(glslang::TIntermUnary& node, std
spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermOperator* node)
{
- if (! node->isImage() && ! node->isTexture()) {
+ if (! node->isImage() && ! node->isTexture())
return spv::NoResult;
- }
+
+ builder.setLine(node->getLoc().line);
+
auto resultType = [&node,this]{ return convertGlslangToSpvType(node->getType()); };
// Process a GLSL texturing op (will be SPV image)
@@ -2959,9 +3223,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
glslang::TCrackedTextureOp cracked;
node->crackTexture(sampler, cracked);
- const bool isUnsignedResult =
- node->getType().getBasicType() == glslang::EbtUint64 ||
- node->getType().getBasicType() == glslang::EbtUint;
+ const bool isUnsignedResult = node->getType().getBasicType() == glslang::EbtUint;
// Check for queries
if (cracked.query) {
@@ -3013,30 +3275,64 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
operands.push_back(spv::ImageOperandsSampleMask);
operands.push_back(*(opIt++));
}
- return builder.createOp(spv::OpImageRead, resultType(), operands);
+ spv::Id result = builder.createOp(spv::OpImageRead, resultType(), operands);
+ builder.setPrecision(result, precision);
+ return result;
}
operands.push_back(*(opIt++));
+#ifdef AMD_EXTENSIONS
+ if (node->getOp() == glslang::EOpImageLoad || node->getOp() == glslang::EOpImageLoadLod) {
+#else
if (node->getOp() == glslang::EOpImageLoad) {
+#endif
if (sampler.ms) {
operands.push_back(spv::ImageOperandsSampleMask);
operands.push_back(*opIt);
+#ifdef AMD_EXTENSIONS
+ } else if (cracked.lod) {
+ builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
+ builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
+
+ operands.push_back(spv::ImageOperandsLodMask);
+ operands.push_back(*opIt);
+#endif
}
if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown)
builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat);
- return builder.createOp(spv::OpImageRead, resultType(), operands);
+
+ spv::Id result = builder.createOp(spv::OpImageRead, resultType(), operands);
+ builder.setPrecision(result, precision);
+ return result;
+#ifdef AMD_EXTENSIONS
+ } else if (node->getOp() == glslang::EOpImageStore || node->getOp() == glslang::EOpImageStoreLod) {
+#else
} else if (node->getOp() == glslang::EOpImageStore) {
+#endif
if (sampler.ms) {
operands.push_back(*(opIt + 1));
operands.push_back(spv::ImageOperandsSampleMask);
operands.push_back(*opIt);
+#ifdef AMD_EXTENSIONS
+ } else if (cracked.lod) {
+ builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
+ builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
+
+ operands.push_back(*(opIt + 1));
+ operands.push_back(spv::ImageOperandsLodMask);
+ operands.push_back(*opIt);
+#endif
} else
operands.push_back(*opIt);
builder.createNoResultOp(spv::OpImageWrite, operands);
if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown)
builder.addCapability(spv::CapabilityStorageImageWriteWithoutFormat);
return spv::NoResult;
+#ifdef AMD_EXTENSIONS
+ } else if (node->getOp() == glslang::EOpSparseImageLoad || node->getOp() == glslang::EOpSparseImageLoadLod) {
+#else
} else if (node->getOp() == glslang::EOpSparseImageLoad) {
+#endif
builder.addCapability(spv::CapabilitySparseResidency);
if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown)
builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat);
@@ -3044,6 +3340,14 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
if (sampler.ms) {
operands.push_back(spv::ImageOperandsSampleMask);
operands.push_back(*opIt++);
+#ifdef AMD_EXTENSIONS
+ } else if (cracked.lod) {
+ builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
+ builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
+
+ operands.push_back(spv::ImageOperandsLodMask);
+ operands.push_back(*opIt++);
+#endif
}
// Create the return type that was a special structure
@@ -3076,16 +3380,67 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
}
}
+#ifdef AMD_EXTENSIONS
+ // Check for fragment mask functions other than queries
+ if (cracked.fragMask) {
+ assert(sampler.ms);
+
+ auto opIt = arguments.begin();
+ std::vector<spv::Id> operands;
+
+ // Extract the image if necessary
+ if (builder.isSampledImage(params.sampler))
+ params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
+
+ operands.push_back(params.sampler);
+ ++opIt;
+
+ if (sampler.isSubpass()) {
+ // add on the (0,0) coordinate
+ spv::Id zero = builder.makeIntConstant(0);
+ std::vector<spv::Id> comps;
+ comps.push_back(zero);
+ comps.push_back(zero);
+ operands.push_back(builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps));
+ }
+
+ for (; opIt != arguments.end(); ++opIt)
+ operands.push_back(*opIt);
+
+ spv::Op fragMaskOp = spv::OpNop;
+ if (node->getOp() == glslang::EOpFragmentMaskFetch)
+ fragMaskOp = spv::OpFragmentMaskFetchAMD;
+ else if (node->getOp() == glslang::EOpFragmentFetch)
+ fragMaskOp = spv::OpFragmentFetchAMD;
+
+ builder.addExtension(spv::E_SPV_AMD_shader_fragment_mask);
+ builder.addCapability(spv::CapabilityFragmentMaskAMD);
+ return builder.createOp(fragMaskOp, resultType(), operands);
+ }
+#endif
+
// Check for texture functions other than queries
bool sparse = node->isSparseTexture();
bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
// check for bias argument
bool bias = false;
+#ifdef AMD_EXTENSIONS
+ if (! cracked.lod && ! cracked.grad && ! cracked.fetch && ! cubeCompare) {
+#else
if (! cracked.lod && ! cracked.gather && ! cracked.grad && ! cracked.fetch && ! cubeCompare) {
+#endif
int nonBiasArgCount = 2;
+#ifdef AMD_EXTENSIONS
+ if (cracked.gather)
+ ++nonBiasArgCount; // comp argument should be present when bias argument is present
+#endif
if (cracked.offset)
++nonBiasArgCount;
+#ifdef AMD_EXTENSIONS
+ else if (cracked.offsets)
+ ++nonBiasArgCount;
+#endif
if (cracked.grad)
nonBiasArgCount += 2;
if (cracked.lodClamp)
@@ -3104,6 +3459,17 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
}
+#ifdef AMD_EXTENSIONS
+ if (cracked.gather) {
+ const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
+ if (bias || cracked.lod ||
+ sourceExtensions.find(glslang::E_GL_AMD_texture_gather_bias_lod) != sourceExtensions.end()) {
+ builder.addExtension(spv::E_SPV_AMD_texture_gather_bias_lod);
+ builder.addCapability(spv::CapabilityImageGatherBiasLodAMD);
+ }
+ }
+#endif
+
// set the rest of the arguments
params.coords = arguments[1];
@@ -3130,7 +3496,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
// lod
if (cracked.lod) {
- params.lod = arguments[2];
+ params.lod = arguments[2 + extraArgs];
++extraArgs;
} else if (glslangIntermediate->getStage() != EShLangFragment) {
// we need to invent the default lod for an explicit lod instruction for a non-fragment stage
@@ -3139,7 +3505,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
// multisample
if (sampler.ms) {
- params.sample = arguments[2]; // For MS, "sample" should be specified
+ params.sample = arguments[2 + extraArgs]; // For MS, "sample" should be specified
++extraArgs;
}
@@ -3171,21 +3537,20 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
++extraArgs;
}
- // bias
- if (bias) {
- params.bias = arguments[2 + extraArgs];
- ++extraArgs;
- }
-
// gather component
if (cracked.gather && ! sampler.shadow) {
// default component is 0, if missing, otherwise an argument
if (2 + extraArgs < (int)arguments.size()) {
params.component = arguments[2 + extraArgs];
++extraArgs;
- } else {
+ } else
params.component = builder.makeIntConstant(0);
- }
+ }
+
+ // bias
+ if (bias) {
+ params.bias = arguments[2 + extraArgs];
+ ++extraArgs;
}
// projective component (might not to move)
@@ -3243,8 +3608,9 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg
builder.clearAccessChain();
glslangArgs[a]->traverse(this);
argTypes.push_back(&paramType);
- // keep outputs and opaque objects as l-values, evaluate input-only as r-values
- if (qualifiers[a] != glslang::EvqConstReadOnly || paramType.containsOpaque()) {
+ // keep outputs and pass-by-originals as l-values, evaluate others as r-values
+ if (writableParam(qualifiers[a]) ||
+ originalParam(qualifiers[a], paramType, function->hasImplicitThis() && a == 0)) {
// save l-value
lValues.push_back(builder.getAccessChain());
} else {
@@ -3263,13 +3629,11 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg
for (int a = 0; a < (int)glslangArgs.size(); ++a) {
const glslang::TType& paramType = glslangArgs[a]->getAsTyped()->getType();
spv::Id arg;
- if (paramType.containsOpaque() ||
- (paramType.getBasicType() == glslang::EbtBlock && qualifiers[a] == glslang::EvqBuffer) ||
- (a == 0 && function->hasImplicitThis())) {
+ if (originalParam(qualifiers[a], paramType, function->hasImplicitThis() && a == 0)) {
builder.setAccessChain(lValues[lValueCount]);
arg = builder.accessChainGetLValue();
++lValueCount;
- } else if (qualifiers[a] != glslang::EvqConstReadOnly) {
+ } else if (writableParam(qualifiers[a])) {
// need space to hold the copy
arg = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(paramType), "param");
if (qualifiers[a] == glslang::EvqIn || qualifiers[a] == glslang::EvqInOut) {
@@ -3296,7 +3660,9 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg
lValueCount = 0;
for (int a = 0; a < (int)glslangArgs.size(); ++a) {
const glslang::TType& paramType = glslangArgs[a]->getAsTyped()->getType();
- if (qualifiers[a] != glslang::EvqConstReadOnly) {
+ if (originalParam(qualifiers[a], paramType, function->hasImplicitThis() && a == 0))
+ ++lValueCount;
+ else if (writableParam(qualifiers[a])) {
if (qualifiers[a] == glslang::EvqOut || qualifiers[a] == glslang::EvqInOut) {
spv::Id copy = builder.createLoad(spvArgs[a]);
builder.setAccessChain(lValues[lValueCount]);
@@ -3315,10 +3681,11 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
spv::Id typeId, spv::Id left, spv::Id right,
glslang::TBasicType typeProxy, bool reduceComparison)
{
- bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
#ifdef AMD_EXTENSIONS
+ bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64 || typeProxy == glslang::EbtUint16;
bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
#else
+ bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
#endif
bool isBool = typeProxy == glslang::EbtBool;
@@ -3645,10 +4012,11 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
spv::Op unaryOp = spv::OpNop;
int extBuiltins = -1;
int libCall = -1;
- bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
#ifdef AMD_EXTENSIONS
+ bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64 || typeProxy == glslang::EbtUint16;
bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
#else
+ bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
#endif
@@ -3787,6 +4155,12 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
case glslang::EOpDoubleBitsToUint64:
case glslang::EOpInt64BitsToDouble:
case glslang::EOpUint64BitsToDouble:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpFloat16BitsToInt16:
+ case glslang::EOpFloat16BitsToUint16:
+ case glslang::EOpInt16BitsToFloat16:
+ case glslang::EOpUint16BitsToFloat16:
+#endif
unaryOp = spv::OpBitcast;
break;
@@ -3835,6 +4209,14 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
break;
#ifdef AMD_EXTENSIONS
+ case glslang::EOpPackInt2x16:
+ case glslang::EOpUnpackInt2x16:
+ case glslang::EOpPackUint2x16:
+ case glslang::EOpUnpackUint2x16:
+ case glslang::EOpPackInt4x16:
+ case glslang::EOpUnpackInt4x16:
+ case glslang::EOpPackUint4x16:
+ case glslang::EOpUnpackUint4x16:
case glslang::EOpPackFloat2x16:
case glslang::EOpUnpackFloat2x16:
unaryOp = spv::OpBitcast;
@@ -4034,8 +4416,18 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case glslang::EOpConvUintToBool:
case glslang::EOpConvInt64ToBool:
case glslang::EOpConvUint64ToBool:
- zero = (op == glslang::EOpConvInt64ToBool ||
- op == glslang::EOpConvUint64ToBool) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0);
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvInt16ToBool:
+ case glslang::EOpConvUint16ToBool:
+#endif
+ if (op == glslang::EOpConvInt64ToBool || op == glslang::EOpConvUint64ToBool)
+ zero = builder.makeUint64Constant(0);
+#ifdef AMD_EXTENSIONS
+ else if (op == glslang::EOpConvInt16ToBool || op == glslang::EOpConvUint16ToBool)
+ zero = builder.makeUint16Constant(0);
+#endif
+ else
+ zero = builder.makeUintConstant(0);
zero = makeSmearedConstant(zero, vectorSize);
return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
@@ -4078,15 +4470,53 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case glslang::EOpConvBoolToInt:
case glslang::EOpConvBoolToInt64:
- zero = (op == glslang::EOpConvBoolToInt64) ? builder.makeInt64Constant(0) : builder.makeIntConstant(0);
- one = (op == glslang::EOpConvBoolToInt64) ? builder.makeInt64Constant(1) : builder.makeIntConstant(1);
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvBoolToInt16:
+#endif
+ if (op == glslang::EOpConvBoolToInt64)
+ zero = builder.makeInt64Constant(0);
+#ifdef AMD_EXTENSIONS
+ else if (op == glslang::EOpConvBoolToInt16)
+ zero = builder.makeInt16Constant(0);
+#endif
+ else
+ zero = builder.makeIntConstant(0);
+
+ if (op == glslang::EOpConvBoolToInt64)
+ one = builder.makeInt64Constant(1);
+#ifdef AMD_EXTENSIONS
+ else if (op == glslang::EOpConvBoolToInt16)
+ one = builder.makeInt16Constant(1);
+#endif
+ else
+ one = builder.makeIntConstant(1);
+
convOp = spv::OpSelect;
break;
case glslang::EOpConvBoolToUint:
case glslang::EOpConvBoolToUint64:
- zero = (op == glslang::EOpConvBoolToUint64) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0);
- one = (op == glslang::EOpConvBoolToUint64) ? builder.makeUint64Constant(1) : builder.makeUintConstant(1);
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvBoolToUint16:
+#endif
+ if (op == glslang::EOpConvBoolToUint64)
+ zero = builder.makeUint64Constant(0);
+#ifdef AMD_EXTENSIONS
+ else if (op == glslang::EOpConvBoolToUint16)
+ zero = builder.makeUint16Constant(0);
+#endif
+ else
+ zero = builder.makeUintConstant(0);
+
+ if (op == glslang::EOpConvBoolToUint64)
+ one = builder.makeUint64Constant(1);
+#ifdef AMD_EXTENSIONS
+ else if (op == glslang::EOpConvBoolToUint16)
+ one = builder.makeUint16Constant(1);
+#endif
+ else
+ one = builder.makeUintConstant(1);
+
convOp = spv::OpSelect;
break;
@@ -4095,6 +4525,9 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case glslang::EOpConvInt64ToFloat:
case glslang::EOpConvInt64ToDouble:
#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvInt16ToFloat:
+ case glslang::EOpConvInt16ToDouble:
+ case glslang::EOpConvInt16ToFloat16:
case glslang::EOpConvIntToFloat16:
case glslang::EOpConvInt64ToFloat16:
#endif
@@ -4106,6 +4539,9 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case glslang::EOpConvUint64ToFloat:
case glslang::EOpConvUint64ToDouble:
#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvUint16ToFloat:
+ case glslang::EOpConvUint16ToDouble:
+ case glslang::EOpConvUint16ToFloat16:
case glslang::EOpConvUintToFloat16:
case glslang::EOpConvUint64ToFloat16:
#endif
@@ -4130,6 +4566,9 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case glslang::EOpConvFloatToInt64:
case glslang::EOpConvDoubleToInt64:
#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvFloatToInt16:
+ case glslang::EOpConvDoubleToInt16:
+ case glslang::EOpConvFloat16ToInt16:
case glslang::EOpConvFloat16ToInt:
case glslang::EOpConvFloat16ToInt64:
#endif
@@ -4140,10 +4579,21 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case glslang::EOpConvIntToUint:
case glslang::EOpConvUint64ToInt64:
case glslang::EOpConvInt64ToUint64:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvUint16ToInt16:
+ case glslang::EOpConvInt16ToUint16:
+#endif
if (builder.isInSpecConstCodeGenMode()) {
// Build zero scalar or vector for OpIAdd.
- zero = (op == glslang::EOpConvUint64ToInt64 ||
- op == glslang::EOpConvInt64ToUint64) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0);
+ if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64)
+ zero = builder.makeUint64Constant(0);
+#ifdef AMD_EXTENSIONS
+ else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16)
+ zero = builder.makeUint16Constant(0);
+#endif
+ else
+ zero = builder.makeUintConstant(0);
+
zero = makeSmearedConstant(zero, vectorSize);
// Use OpIAdd, instead of OpBitcast to do the conversion when
// generating for OpSpecConstantOp instruction.
@@ -4158,6 +4608,9 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case glslang::EOpConvFloatToUint64:
case glslang::EOpConvDoubleToUint64:
#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvFloatToUint16:
+ case glslang::EOpConvDoubleToUint16:
+ case glslang::EOpConvFloat16ToUint16:
case glslang::EOpConvFloat16ToUint:
case glslang::EOpConvFloat16ToUint64:
#endif
@@ -4166,11 +4619,23 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case glslang::EOpConvIntToInt64:
case glslang::EOpConvInt64ToInt:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvIntToInt16:
+ case glslang::EOpConvInt16ToInt:
+ case glslang::EOpConvInt64ToInt16:
+ case glslang::EOpConvInt16ToInt64:
+#endif
convOp = spv::OpSConvert;
break;
case glslang::EOpConvUintToUint64:
case glslang::EOpConvUint64ToUint:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvUintToUint16:
+ case glslang::EOpConvUint16ToUint:
+ case glslang::EOpConvUint64ToUint16:
+ case glslang::EOpConvUint16ToUint64:
+#endif
convOp = spv::OpUConvert;
break;
@@ -4178,24 +4643,58 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case glslang::EOpConvInt64ToUint:
case glslang::EOpConvUint64ToInt:
case glslang::EOpConvUintToInt64:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvInt16ToUint:
+ case glslang::EOpConvUintToInt16:
+ case glslang::EOpConvInt16ToUint64:
+ case glslang::EOpConvUint64ToInt16:
+ case glslang::EOpConvUint16ToInt:
+ case glslang::EOpConvIntToUint16:
+ case glslang::EOpConvUint16ToInt64:
+ case glslang::EOpConvInt64ToUint16:
+#endif
// OpSConvert/OpUConvert + OpBitCast
switch (op) {
case glslang::EOpConvIntToUint64:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvInt16ToUint64:
+#endif
convOp = spv::OpSConvert;
type = builder.makeIntType(64);
break;
case glslang::EOpConvInt64ToUint:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvInt16ToUint:
+#endif
convOp = spv::OpSConvert;
type = builder.makeIntType(32);
break;
case glslang::EOpConvUint64ToInt:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvUint16ToInt:
+#endif
convOp = spv::OpUConvert;
type = builder.makeUintType(32);
break;
case glslang::EOpConvUintToInt64:
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvUint16ToInt64:
+#endif
convOp = spv::OpUConvert;
type = builder.makeUintType(64);
break;
+#ifdef AMD_EXTENSIONS
+ case glslang::EOpConvUintToInt16:
+ case glslang::EOpConvUint64ToInt16:
+ convOp = spv::OpUConvert;
+ type = builder.makeUintType(16);
+ break;
+ case glslang::EOpConvIntToUint16:
+ case glslang::EOpConvInt64ToUint16:
+ convOp = spv::OpSConvert;
+ type = builder.makeIntType(16);
+ break;
+#endif
default:
assert(0);
break;
@@ -4208,8 +4707,22 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
if (builder.isInSpecConstCodeGenMode()) {
// Build zero scalar or vector for OpIAdd.
- zero = (op == glslang::EOpConvIntToUint64 ||
- op == glslang::EOpConvUintToInt64) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0);
+#ifdef AMD_EXTENSIONS
+ if (op == glslang::EOpConvIntToUint64 || op == glslang::EOpConvUintToInt64 ||
+ op == glslang::EOpConvInt16ToUint64 || op == glslang::EOpConvUint16ToInt64)
+ zero = builder.makeUint64Constant(0);
+ else if (op == glslang::EOpConvIntToUint16 || op == glslang::EOpConvUintToInt16 ||
+ op == glslang::EOpConvInt64ToUint16 || op == glslang::EOpConvUint64ToInt16)
+ zero = builder.makeUint16Constant(0);
+ else
+ zero = builder.makeUintConstant(0);
+#else
+ if (op == glslang::EOpConvIntToUint64 || op == glslang::EOpConvUintToInt64)
+ zero = builder.makeUint64Constant(0);
+ else
+ zero = builder.makeUintConstant(0);
+#endif
+
zero = makeSmearedConstant(zero, vectorSize);
// Use OpIAdd, instead of OpBitcast to do the conversion when
// generating for OpSpecConstantOp instruction.
@@ -4256,34 +4769,45 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
switch (op) {
case glslang::EOpAtomicAdd:
case glslang::EOpImageAtomicAdd:
+ case glslang::EOpAtomicCounterAdd:
opCode = spv::OpAtomicIAdd;
break;
+ case glslang::EOpAtomicCounterSubtract:
+ opCode = spv::OpAtomicISub;
+ break;
case glslang::EOpAtomicMin:
case glslang::EOpImageAtomicMin:
- opCode = typeProxy == glslang::EbtUint ? spv::OpAtomicUMin : spv::OpAtomicSMin;
+ case glslang::EOpAtomicCounterMin:
+ opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? spv::OpAtomicUMin : spv::OpAtomicSMin;
break;
case glslang::EOpAtomicMax:
case glslang::EOpImageAtomicMax:
- opCode = typeProxy == glslang::EbtUint ? spv::OpAtomicUMax : spv::OpAtomicSMax;
+ case glslang::EOpAtomicCounterMax:
+ opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? spv::OpAtomicUMax : spv::OpAtomicSMax;
break;
case glslang::EOpAtomicAnd:
case glslang::EOpImageAtomicAnd:
+ case glslang::EOpAtomicCounterAnd:
opCode = spv::OpAtomicAnd;
break;
case glslang::EOpAtomicOr:
case glslang::EOpImageAtomicOr:
+ case glslang::EOpAtomicCounterOr:
opCode = spv::OpAtomicOr;
break;
case glslang::EOpAtomicXor:
case glslang::EOpImageAtomicXor:
+ case glslang::EOpAtomicCounterXor:
opCode = spv::OpAtomicXor;
break;
case glslang::EOpAtomicExchange:
case glslang::EOpImageAtomicExchange:
+ case glslang::EOpAtomicCounterExchange:
opCode = spv::OpAtomicExchange;
break;
case glslang::EOpAtomicCompSwap:
case glslang::EOpImageAtomicCompSwap:
+ case glslang::EOpAtomicCounterCompSwap:
opCode = spv::OpAtomicCompareExchange;
break;
case glslang::EOpAtomicCounterIncrement:
@@ -4300,11 +4824,15 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
break;
}
+ if (typeProxy == glslang::EbtInt64 || typeProxy == glslang::EbtUint64)
+ builder.addCapability(spv::CapabilityInt64Atomics);
+
// Sort out the operands
// - mapping from glslang -> SPV
// - there are extra SPV operands with no glslang source
// - compare-exchange swaps the value and comparator
// - compare-exchange has an extra memory semantics
+ // - EOpAtomicCounterDecrement needs a post decrement
std::vector<spv::Id> spvAtomicOperands; // hold the spv operands
auto opIt = operands.begin(); // walk the glslang operands
spvAtomicOperands.push_back(*(opIt++));
@@ -4323,7 +4851,14 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
for (; opIt != operands.end(); ++opIt)
spvAtomicOperands.push_back(*opIt);
- return builder.createOp(opCode, typeId, spvAtomicOperands);
+ spv::Id resultId = builder.createOp(opCode, typeId, spvAtomicOperands);
+
+ // GLSL and HLSL atomic-counter decrement return post-decrement value,
+ // while SPIR-V returns pre-decrement value. Translate between these semantics.
+ if (op == glslang::EOpAtomicCounterDecrement)
+ resultId = builder.createBinOp(spv::OpISub, typeId, resultId, builder.makeIntConstant(1));
+
+ return resultId;
}
// Create group invocation operations.
@@ -4595,10 +5130,11 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv
spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
{
- bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
#ifdef AMD_EXTENSIONS
+ bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64 || typeProxy == glslang::EbtUint16;
bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
#else
+ bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
#endif
@@ -4609,6 +5145,9 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
spv::Id typeId0 = 0;
if (consumedOperands > 0)
typeId0 = builder.getTypeId(operands[0]);
+ spv::Id typeId1 = 0;
+ if (consumedOperands > 1)
+ typeId1 = builder.getTypeId(operands[1]);
spv::Id frexpIntType = 0;
switch (op) {
@@ -4730,13 +5269,22 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
libCall = spv::GLSLstd450Fma;
break;
case glslang::EOpFrexp:
- libCall = spv::GLSLstd450FrexpStruct;
- if (builder.getNumComponents(operands[0]) == 1)
- frexpIntType = builder.makeIntegerType(32, true);
- else
- frexpIntType = builder.makeVectorType(builder.makeIntegerType(32, true), builder.getNumComponents(operands[0]));
- typeId = builder.makeStructResultType(typeId0, frexpIntType);
- consumedOperands = 1;
+ {
+ libCall = spv::GLSLstd450FrexpStruct;
+ assert(builder.isPointerType(typeId1));
+ typeId1 = builder.getContainedTypeId(typeId1);
+#ifdef AMD_EXTENSIONS
+ int width = builder.getScalarTypeWidth(typeId1);
+#else
+ int width = 32;
+#endif
+ if (builder.getNumComponents(operands[0]) == 1)
+ frexpIntType = builder.makeIntegerType(width, true);
+ else
+ frexpIntType = builder.makeVectorType(builder.makeIntegerType(width, true), builder.getNumComponents(operands[0]));
+ typeId = builder.makeStructResultType(typeId0, frexpIntType);
+ consumedOperands = 1;
+ }
break;
case glslang::EOpLdexp:
libCall = spv::GLSLstd450Ldexp;
@@ -4844,9 +5392,18 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
builder.createStore(builder.createCompositeExtract(id, typeId0, 1), operands[2]);
break;
case glslang::EOpFrexp:
- assert(operands.size() == 2);
- builder.createStore(builder.createCompositeExtract(id, frexpIntType, 1), operands[1]);
- id = builder.createCompositeExtract(id, typeId0, 0);
+ {
+ assert(operands.size() == 2);
+ if (builder.isFloatType(builder.getScalarTypeId(typeId1))) {
+ // "exp" is floating-point type (from HLSL intrinsic)
+ spv::Id member1 = builder.createCompositeExtract(id, frexpIntType, 1);
+ member1 = builder.createUnaryOp(spv::OpConvertSToF, typeId1, member1);
+ builder.createStore(member1, operands[1]);
+ } else
+ // "exp" is integer type (from GLSL built-in function)
+ builder.createStore(builder.createCompositeExtract(id, frexpIntType, 1), operands[1]);
+ id = builder.createCompositeExtract(id, typeId0, 0);
+ }
break;
default:
break;
@@ -5006,14 +5563,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
}
else if (builtIn == spv::BuiltInLayer) {
// SPV_NV_viewport_array2 extension
- if (symbol->getQualifier().layoutViewportRelative)
- {
+ if (symbol->getQualifier().layoutViewportRelative) {
addDecoration(id, (spv::Decoration)spv::DecorationViewportRelativeNV);
builder.addCapability(spv::CapabilityShaderViewportMaskNV);
builder.addExtension(spv::E_SPV_NV_viewport_array2);
}
- if(symbol->getQualifier().layoutSecondaryViewportRelativeOffset != -2048)
- {
+ if (symbol->getQualifier().layoutSecondaryViewportRelativeOffset != -2048) {
addDecoration(id, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, symbol->getQualifier().layoutSecondaryViewportRelativeOffset);
builder.addCapability(spv::CapabilityShaderStereoViewNV);
builder.addExtension(spv::E_SPV_NV_stereo_view_rendering);
@@ -5162,6 +5717,14 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
case glslang::EbtUint64:
spvConsts.push_back(builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const()));
break;
+#ifdef AMD_EXTENSIONS
+ case glslang::EbtInt16:
+ spvConsts.push_back(builder.makeInt16Constant(zero ? 0 : (short)consts[nextConst].getIConst()));
+ break;
+ case glslang::EbtUint16:
+ spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : (unsigned short)consts[nextConst].getUConst()));
+ break;
+#endif
case glslang::EbtFloat:
spvConsts.push_back(builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
break;
@@ -5199,6 +5762,14 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
case glslang::EbtUint64:
scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant);
break;
+#ifdef AMD_EXTENSIONS
+ case glslang::EbtInt16:
+ scalar = builder.makeInt16Constant(zero ? 0 : (short)consts[nextConst].getIConst(), specConstant);
+ break;
+ case glslang::EbtUint16:
+ scalar = builder.makeUint16Constant(zero ? 0 : (unsigned short)consts[nextConst].getUConst(), specConstant);
+ break;
+#endif
case glslang::EbtFloat:
scalar = builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
break;
@@ -5256,13 +5827,18 @@ bool TGlslangToSpvTraverser::isTrivialLeaf(const glslang::TIntermTyped* node)
}
// A node is trivial if it is a single operation with no side effects.
-// Error on the side of saying non-trivial.
+// HLSL (and/or vectors) are always trivial, as it does not short circuit.
+// Otherwise, error on the side of saying non-trivial.
// Return true if trivial.
bool TGlslangToSpvTraverser::isTrivial(const glslang::TIntermTyped* node)
{
if (node == nullptr)
return false;
+ // count non scalars as trivial, as well as anything coming from HLSL
+ if (! node->getType().isScalarOrVec1() || glslangIntermediate->getSource() == glslang::EShSourceHlsl)
+ return true;
+
// symbols and constants are trivial
if (isTrivialLeaf(node))
return true;
@@ -5333,7 +5909,7 @@ spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslan
leftId = builder.createUnaryOp(spv::OpLogicalNot, boolTypeId, leftId);
// make an "if" based on the left value
- spv::Builder::If ifBuilder(leftId, builder);
+ spv::Builder::If ifBuilder(leftId, spv::SelectionControlMaskNone, builder);
// emit right operand as the "then" part of the "if"
builder.clearAccessChain();
@@ -5377,6 +5953,14 @@ void GetSpirvVersion(std::string& version)
version = buf;
}
+// For low-order part of the generator's magic number. Bump up
+// when there is a change in the style (e.g., if SSA form changes,
+// or a different instruction sequence to do something gets used).
+int GetSpirvGeneratorVersion()
+{
+ return 2;
+}
+
// Write SPIR-V out to a binary file
void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName)
{
@@ -5421,29 +6005,84 @@ void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName,
out.close();
}
+#ifdef ENABLE_OPT
+void errHandler(const std::string& str) {
+ std::cerr << str << std::endl;
+}
+#endif
+
//
// Set up the glslang traversal
//
-void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv)
+void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv, SpvOptions* options)
{
spv::SpvBuildLogger logger;
- GlslangToSpv(intermediate, spirv, &logger);
+ GlslangToSpv(intermediate, spirv, &logger, options);
}
-void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv, spv::SpvBuildLogger* logger)
+void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+ spv::SpvBuildLogger* logger, SpvOptions* options)
{
TIntermNode* root = intermediate.getTreeRoot();
if (root == 0)
return;
+ glslang::SpvOptions defaultOptions;
+ if (options == nullptr)
+ options = &defaultOptions;
+
glslang::GetThreadPoolAllocator().push();
- TGlslangToSpvTraverser it(&intermediate, logger);
+ TGlslangToSpvTraverser it(&intermediate, logger, *options);
root->traverse(&it);
it.finishSpv();
it.dumpSpv(spirv);
+#ifdef ENABLE_OPT
+ // If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan
+ // eg. forward and remove memory writes of opaque types.
+ if ((intermediate.getSource() == EShSourceHlsl ||
+ options->optimizeSize) &&
+ !options->disableOptimizer) {
+ spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2;
+
+ spvtools::Optimizer optimizer(target_env);
+ optimizer.SetMessageConsumer([](spv_message_level_t level,
+ const char* source,
+ const spv_position_t& position,
+ const char* message) {
+ std::cerr << StringifyMessage(level, source, position, message)
+ << std::endl;
+ });
+
+ optimizer.RegisterPass(CreateInlineExhaustivePass());
+ optimizer.RegisterPass(CreateLocalAccessChainConvertPass());
+ optimizer.RegisterPass(CreateLocalSingleBlockLoadStoreElimPass());
+ optimizer.RegisterPass(CreateLocalSingleStoreElimPass());
+ optimizer.RegisterPass(CreateInsertExtractElimPass());
+ optimizer.RegisterPass(CreateAggressiveDCEPass());
+ optimizer.RegisterPass(CreateDeadBranchElimPass());
+ optimizer.RegisterPass(CreateCFGCleanupPass());
+ optimizer.RegisterPass(CreateBlockMergePass());
+ optimizer.RegisterPass(CreateLocalMultiStoreElimPass());
+ optimizer.RegisterPass(CreateInsertExtractElimPass());
+ optimizer.RegisterPass(CreateAggressiveDCEPass());
+ // TODO(greg-lunarg): Add this when AMD driver issues are resolved
+ // if (options->optimizeSize)
+ // optimizer.RegisterPass(CreateCommonUniformElimPass());
+
+ if (!optimizer.Run(spirv.data(), spirv.size(), &spirv))
+ return;
+
+ // Remove dead module-level objects: functions, types, vars
+ // TODO(greg-lunarg): Switch to spirv-opt versions when available
+ spv::spirvbin_t Remapper(0);
+ Remapper.registerErrorHandler(errHandler);
+ Remapper.remap(spirv, spv::spirvbin_t::DCE_ALL);
+ }
+#endif
+
glslang::GetThreadPoolAllocator().pop();
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h
index 11e22f5888c..3a437137509 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h
@@ -32,6 +32,8 @@
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
+#pragma once
+
#if _MSC_VER >= 1900
#pragma warning(disable : 4464) // relative include path contains '..'
#endif
@@ -45,9 +47,20 @@
namespace glslang {
+struct SpvOptions {
+ SpvOptions() : generateDebugInfo(false), disableOptimizer(true),
+ optimizeSize(false) { }
+ bool generateDebugInfo;
+ bool disableOptimizer;
+ bool optimizeSize;
+};
+
void GetSpirvVersion(std::string&);
-void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv);
-void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv, spv::SpvBuildLogger* logger);
+int GetSpirvGeneratorVersion();
+void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+ SpvOptions* options = nullptr);
+void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+ spv::SpvBuildLogger* logger, SpvOptions* options = nullptr);
void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName);
void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName);
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp
index 4bb3d772c5d..52b29613a45 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp
@@ -51,7 +51,7 @@
#include "spvIR.h"
#include <cassert>
-#include <unordered_map>
+#include <unordered_set>
using spv::Block;
using spv::Id;
@@ -69,33 +69,33 @@ public:
void visit(Block* block)
{
assert(block);
- if (visited_[block] || delayed_[block])
+ if (visited_.count(block) || delayed_.count(block))
return;
callback_(block);
- visited_[block] = true;
+ visited_.insert(block);
Block* mergeBlock = nullptr;
Block* continueBlock = nullptr;
auto mergeInst = block->getMergeInstruction();
if (mergeInst) {
Id mergeId = mergeInst->getIdOperand(0);
mergeBlock = block->getParent().getParent().getInstruction(mergeId)->getBlock();
- delayed_[mergeBlock] = true;
+ delayed_.insert(mergeBlock);
if (mergeInst->getOpCode() == spv::OpLoopMerge) {
Id continueId = mergeInst->getIdOperand(1);
continueBlock =
block->getParent().getParent().getInstruction(continueId)->getBlock();
- delayed_[continueBlock] = true;
+ delayed_.insert(continueBlock);
}
}
const auto successors = block->getSuccessors();
for (auto it = successors.cbegin(); it != successors.cend(); ++it)
visit(*it);
if (continueBlock) {
- delayed_[continueBlock] = false;
+ delayed_.erase(continueBlock);
visit(continueBlock);
}
if (mergeBlock) {
- delayed_[mergeBlock] = false;
+ delayed_.erase(mergeBlock);
visit(mergeBlock);
}
}
@@ -103,7 +103,7 @@ public:
private:
std::function<void(Block*)> callback_;
// Whether a block has already been visited or is being delayed.
- std::unordered_map<Block *, bool> visited_, delayed_;
+ std::unordered_set<Block *> visited_, delayed_;
};
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp
index 9b1270501be..4e45cbb83ec 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp
@@ -135,6 +135,9 @@ namespace spv {
const unsigned typeStart = idPos(id);
const spv::Op opCode = asOpCode(typeStart);
+ if (errorLatch)
+ return 0;
+
switch (opCode) {
case spv::OpTypeInt: // fall through...
case spv::OpTypeFloat: return (spv[typeStart+2]+31)/32;
@@ -148,8 +151,10 @@ namespace spv {
unsigned spirvbin_t::idTypeSizeInWords(spv::Id id) const
{
const auto tid_it = idTypeSizeMap.find(id);
- if (tid_it == idTypeSizeMap.end())
+ if (tid_it == idTypeSizeMap.end()) {
error("type size for ID not found");
+ return 0;
+ }
return tid_it->second;
}
@@ -215,14 +220,19 @@ namespace spv {
bool spirvbin_t::isConstOp(spv::Op opCode) const
{
switch (opCode) {
- case spv::OpConstantNull: error("unimplemented constant type");
- case spv::OpConstantSampler: error("unimplemented constant type");
+ case spv::OpConstantNull:
+ case spv::OpConstantSampler:
+ error("unimplemented constant type");
+ return true;
case spv::OpConstantTrue:
case spv::OpConstantFalse:
case spv::OpConstantComposite:
- case spv::OpConstant: return true;
- default: return false;
+ case spv::OpConstant:
+ return true;
+
+ default:
+ return false;
}
}
@@ -248,19 +258,31 @@ namespace spv {
{
assert(id != spv::NoResult && newId != spv::NoResult);
+ if (id > bound()) {
+ error(std::string("ID out of range: ") + std::to_string(id));
+ return spirvbin_t::unused;
+ }
+
if (id >= idMapL.size())
idMapL.resize(id+1, unused);
if (newId != unmapped && newId != unused) {
- if (isOldIdUnused(id))
+ if (isOldIdUnused(id)) {
error(std::string("ID unused in module: ") + std::to_string(id));
+ return spirvbin_t::unused;
+ }
- if (!isOldIdUnmapped(id))
+ if (!isOldIdUnmapped(id)) {
error(std::string("ID already mapped: ") + std::to_string(id) + " -> "
- + std::to_string(localId(id)));
+ + std::to_string(localId(id)));
- if (isNewIdMapped(newId))
+ return spirvbin_t::unused;
+ }
+
+ if (isNewIdMapped(newId)) {
error(std::string("ID already used in module: ") + std::to_string(newId));
+ return spirvbin_t::unused;
+ }
msg(4, 4, std::string("map: ") + std::to_string(id) + " -> " + std::to_string(newId));
setMapped(newId);
@@ -294,6 +316,10 @@ namespace spv {
process(inst_fn_nop, // ignore instructions
[this](spv::Id& id) {
id = localId(id);
+
+ if (errorLatch)
+ return;
+
assert(id != unused && id != unmapped);
}
);
@@ -312,14 +338,22 @@ namespace spv {
continue;
// Find a new mapping for any used but unmapped IDs
- if (isOldIdUnmapped(id))
+ if (isOldIdUnmapped(id)) {
localId(id, unusedId = nextUnusedId(unusedId));
+ if (errorLatch)
+ return;
+ }
- if (isOldIdUnmapped(id))
+ if (isOldIdUnmapped(id)) {
error(std::string("old ID not mapped: ") + std::to_string(id));
+ return;
+ }
// Track max bound
maxBound = std::max(maxBound, localId(id) + 1);
+
+ if (errorLatch)
+ return;
}
bound(maxBound); // reset header ID bound to as big as it now needs to be
@@ -401,6 +435,9 @@ namespace spv {
if (typeId != spv::NoResult) {
const unsigned idTypeSize = typeSizeInWords(typeId);
+ if (errorLatch)
+ return false;
+
if (idTypeSize != 0)
idTypeSizeMap[resultId] = idTypeSize;
}
@@ -416,17 +453,26 @@ namespace spv {
} else if (opCode == spv::Op::OpEntryPoint) {
entryPoint = asId(start + 2);
} else if (opCode == spv::Op::OpFunction) {
- if (fnStart != 0)
+ if (fnStart != 0) {
error("nested function found");
+ return false;
+ }
+
fnStart = start;
fnRes = asId(start + 2);
} else if (opCode == spv::Op::OpFunctionEnd) {
assert(fnRes != spv::NoResult);
- if (fnStart == 0)
+ if (fnStart == 0) {
error("function end without function start");
+ return false;
+ }
+
fnPos[fnRes] = range_t(fnStart, start + asWordCount(start));
fnStart = 0;
} else if (isConstOp(opCode)) {
+ if (errorLatch)
+ return false;
+
assert(asId(start + 2) != spv::NoResult);
typeConstPos.insert(start);
} else if (isTypeOp(opCode)) {
@@ -446,29 +492,37 @@ namespace spv {
{
msg(2, 2, std::string("validating: "));
- if (spv.size() < header_size)
+ if (spv.size() < header_size) {
error("file too short: ");
+ return;
+ }
- if (magic() != spv::MagicNumber)
+ if (magic() != spv::MagicNumber) {
error("bad magic number");
+ return;
+ }
// field 1 = version
// field 2 = generator magic
// field 3 = result <id> bound
- if (schemaNum() != 0)
+ if (schemaNum() != 0) {
error("bad schema, must be 0");
+ return;
+ }
}
int spirvbin_t::processInstruction(unsigned word, instfn_t instFn, idfn_t idFn)
{
const auto instructionStart = word;
const unsigned wordCount = asWordCount(instructionStart);
- const spv::Op opCode = asOpCode(instructionStart);
const int nextInst = word++ + wordCount;
+ spv::Op opCode = asOpCode(instructionStart);
- if (nextInst > int(spv.size()))
+ if (nextInst > int(spv.size())) {
error("spir instruction terminated too early");
+ return -1;
+ }
// Base for computing number of operands; will be updated as more is learned
unsigned numOperands = wordCount - 1;
@@ -506,6 +560,18 @@ namespace spv {
// Store IDs from instruction in our map
for (int op = 0; numOperands > 0; ++op, --numOperands) {
+ // SpecConstantOp is special: it includes the operands of another opcode which is
+ // given as a literal in the 3rd word. We will switch over to pretending that the
+ // opcode being processed is the literal opcode value of the SpecConstantOp. See the
+ // SPIRV spec for details. This way we will handle IDs and literals as appropriate for
+ // the embedded op.
+ if (opCode == spv::OpSpecConstantOp) {
+ if (op == 0) {
+ opCode = asOpCode(word++); // this is the opcode embedded in the SpecConstantOp.
+ --numOperands;
+ }
+ }
+
switch (spv::InstructionDesc[opCode].operands.getClass(op)) {
case spv::OperandId:
case spv::OperandScope:
@@ -538,6 +604,9 @@ namespace spv {
const unsigned literalSize = idTypeSizeInWords(idBuffer[literalSizePos]);
const unsigned numLiteralIdPairs = (nextInst-word) / (1+literalSize);
+ if (errorLatch)
+ return -1;
+
for (unsigned arg=0; arg<numLiteralIdPairs; ++arg) {
word += literalSize; // literal
idFn(asId(word++)); // label
@@ -614,9 +683,13 @@ namespace spv {
// basic parsing and InstructionDesc table borrowed from SpvDisassemble.cpp...
unsigned nextInst = unsigned(spv.size());
- for (unsigned word = begin; word < end; word = nextInst)
+ for (unsigned word = begin; word < end; word = nextInst) {
nextInst = processInstruction(word, instFn, idFn);
+ if (errorLatch)
+ return *this;
+ }
+
return *this;
}
@@ -631,8 +704,11 @@ namespace spv {
for (const char c : name.first)
hashval = hashval * 1009 + c;
- if (isOldIdUnmapped(name.second))
+ if (isOldIdUnmapped(name.second)) {
localId(name.second, nextUnusedId(hashval % softTypeIdLimit + firstMappedID));
+ if (errorLatch)
+ return;
+ }
}
}
@@ -654,6 +730,9 @@ namespace spv {
[&](spv::Op, unsigned start) { instPos.push_back(start); return true; },
op_fn_nop);
+ if (errorLatch)
+ return;
+
// Window size for context-sensitive canonicalization values
// Empirical best size from a single data set. TODO: Would be a good tunable.
// We essentially perform a little convolution around each instruction,
@@ -689,8 +768,12 @@ namespace spv {
hashval = hashval * 30103 + asOpCodeHash(instPos[i]); // 30103 = semiarbitrary prime
}
- if (isOldIdUnmapped(resId))
+ if (isOldIdUnmapped(resId)) {
localId(resId, nextUnusedId(hashval % softTypeIdLimit + firstMappedID));
+ if (errorLatch)
+ return;
+ }
+
}
}
}
@@ -783,6 +866,9 @@ namespace spv {
[&](spv::Id& id) { if (idMap.find(id) != idMap.end()) id = idMap[id]; }
);
+ if (errorLatch)
+ return;
+
// EXPERIMENTAL: Implicit output stores
fnLocalVars.clear();
idMap.clear();
@@ -803,11 +889,17 @@ namespace spv {
},
op_fn_nop);
+ if (errorLatch)
+ return;
+
process(
inst_fn_nop,
[&](spv::Id& id) { if (idMap.find(id) != idMap.end()) id = idMap[id]; }
);
+ if (errorLatch)
+ return;
+
strip(); // strip out data we decided to eliminate
}
@@ -907,6 +999,9 @@ namespace spv {
}
);
+ if (errorLatch)
+ return;
+
process(
[&](spv::Op opCode, unsigned start) {
if (opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0)
@@ -915,6 +1010,9 @@ namespace spv {
},
op_fn_nop);
+ if (errorLatch)
+ return;
+
// Chase replacements to their origins, in case there is a chain such as:
// 2 = store 1
// 3 = load 2
@@ -948,6 +1046,9 @@ namespace spv {
}
);
+ if (errorLatch)
+ return;
+
strip(); // strip out data we decided to eliminate
}
@@ -991,6 +1092,9 @@ namespace spv {
fn->second.first,
fn->second.second);
+ if (errorLatch)
+ return;
+
fn = fnPos.erase(fn);
} else ++fn;
}
@@ -1023,6 +1127,9 @@ namespace spv {
[&](spv::Id& id) { if (varUseCount[id]) ++varUseCount[id]; }
);
+ if (errorLatch)
+ return;
+
// Remove single-use function variables + associated decorations and names
process(
[&](spv::Op opCode, unsigned start) {
@@ -1064,6 +1171,9 @@ namespace spv {
[&](spv::Id& id) { if (isType[id]) ++typeUseCount[id]; }
);
+ if (errorLatch)
+ return;
+
// Remove single reference types
for (const auto typeStart : typeConstPos) {
const spv::Id typeId = asTypeConstId(typeStart);
@@ -1073,6 +1183,9 @@ namespace spv {
stripInst(typeStart);
}
}
+
+ if (errorLatch)
+ return;
}
}
@@ -1151,8 +1264,10 @@ namespace spv {
unsigned spirvbin_t::idPos(spv::Id id) const
{
const auto tid_it = idPosR.find(id);
- if (tid_it == idPosR.end())
+ if (tid_it == idPosR.end()) {
error("ID not found");
+ return 0;
+ }
return tid_it->second;
}
@@ -1251,8 +1366,14 @@ namespace spv {
const spv::Id resId = asTypeConstId(typeStart);
const std::uint32_t hashval = hashType(typeStart);
- if (isOldIdUnmapped(resId))
+ if (errorLatch)
+ return;
+
+ if (isOldIdUnmapped(resId)) {
localId(resId, nextUnusedId(hashval % softTypeIdLimit + firstMappedID));
+ if (errorLatch)
+ return;
+ }
}
}
@@ -1271,7 +1392,7 @@ namespace spv {
int strippedPos = 0;
for (unsigned word = 0; word < unsigned(spv.size()); ++word) {
- if (strip_it != stripRange.end() && word >= strip_it->second)
+ while (strip_it != stripRange.end() && word >= strip_it->second)
++strip_it;
if (strip_it == stripRange.end() || word < strip_it->first || word >= strip_it->second)
@@ -1298,24 +1419,49 @@ namespace spv {
msg(3, 4, std::string("ID bound: ") + std::to_string(bound()));
if (options & STRIP) stripDebug();
+ if (errorLatch) return;
+
strip(); // strip out data we decided to eliminate
+ if (errorLatch) return;
+
if (options & OPT_LOADSTORE) optLoadStore();
+ if (errorLatch) return;
+
if (options & OPT_FWD_LS) forwardLoadStores();
+ if (errorLatch) return;
+
if (options & DCE_FUNCS) dceFuncs();
+ if (errorLatch) return;
+
if (options & DCE_VARS) dceVars();
+ if (errorLatch) return;
+
if (options & DCE_TYPES) dceTypes();
+ if (errorLatch) return;
strip(); // strip out data we decided to eliminate
+ if (errorLatch) return;
+
stripDeadRefs(); // remove references to things we DCEed
+ if (errorLatch) return;
+
// after the last strip, we must clean any debug info referring to now-deleted data
if (options & MAP_TYPES) mapTypeConst();
+ if (errorLatch) return;
+
if (options & MAP_NAMES) mapNames();
+ if (errorLatch) return;
+
if (options & MAP_FUNCS) mapFnBodies();
+ if (errorLatch) return;
if (options & MAP_ALL) {
mapRemainder(); // map any unmapped IDs
+ if (errorLatch) return;
+
applyMap(); // Now remap each shader to the new IDs we've come up with
+ if (errorLatch) return;
}
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h
index f9f369a37c3..97e3f31fa65 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h
@@ -39,6 +39,7 @@
#include <string>
#include <vector>
#include <cstdlib>
+#include <exception>
namespace spv {
@@ -111,7 +112,9 @@ namespace spv {
class spirvbin_t : public spirvbin_base_t
{
public:
- spirvbin_t(int verbose = 0) : entryPoint(spv::NoResult), largestNewId(0), verbose(verbose) { }
+ spirvbin_t(int verbose = 0) : entryPoint(spv::NoResult), largestNewId(0), verbose(verbose), errorLatch(false)
+ { }
+
virtual ~spirvbin_t() { }
// remap on an existing binary in memory
@@ -165,7 +168,7 @@ private:
typedef std::unordered_map<spv::Id, unsigned> typesize_map_t;
// handle error
- void error(const std::string& txt) const { errorHandler(txt); }
+ void error(const std::string& txt) const { errorLatch = true; errorHandler(txt); }
bool isConstOp(spv::Op opCode) const;
bool isTypeOp(spv::Op opCode) const;
@@ -286,6 +289,11 @@ private:
std::uint32_t options;
int verbose; // verbosity level
+ // Error latch: this is set if the error handler is ever executed. It would be better to
+ // use a try/catch block and throw, but that's not desired for certain environments, so
+ // this is the alternative.
+ mutable bool errorLatch;
+
static errorfn_t errorHandler;
static logfn_t logHandler;
};
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp
index 0add1db40d9..c795ca8945c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp
@@ -59,6 +59,9 @@ namespace spv {
Builder::Builder(unsigned int magicNumber, SpvBuildLogger* buildLogger) :
source(SourceLanguageUnknown),
sourceVersion(0),
+ sourceFileStringId(NoResult),
+ currentLine(0),
+ emitOpLines(false),
addressModel(AddressingModelLogical),
memoryModel(MemoryModelGLSL450),
builderNumber(magicNumber),
@@ -84,6 +87,26 @@ Id Builder::import(const char* name)
return import->getResultId();
}
+// Emit an OpLine if we've been asked to emit OpLines and the line number
+// has changed since the last time, and is a valid line number.
+void Builder::setLine(int lineNum)
+{
+ if (lineNum != 0 && lineNum != currentLine) {
+ currentLine = lineNum;
+ if (emitOpLines)
+ addLine(sourceFileStringId, currentLine, 0);
+ }
+}
+
+void Builder::addLine(Id fileName, int lineNum, int column)
+{
+ Instruction* line = new Instruction(OpLine);
+ line->addIdOperand(fileName);
+ line->addImmediateOperand(lineNum);
+ line->addImmediateOperand(column);
+ buildPoint->addInstruction(std::unique_ptr<Instruction>(line));
+}
+
// For creating new groupedTypes (will return old type if the requested one was already made).
Id Builder::makeVoidType()
{
@@ -379,6 +402,8 @@ Id Builder::makeFunctionType(Id returnType, const std::vector<Id>& paramTypes)
Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format)
{
+ assert(sampled == 1 || sampled == 2);
+
// try to find it
Instruction* type;
for (int t = 0; t < (int)groupedTypes[OpTypeImage].size(); ++t) {
@@ -410,27 +435,27 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo
// deal with capabilities
switch (dim) {
case DimBuffer:
- if (sampled)
+ if (sampled == 1)
addCapability(CapabilitySampledBuffer);
else
addCapability(CapabilityImageBuffer);
break;
case Dim1D:
- if (sampled)
+ if (sampled == 1)
addCapability(CapabilitySampled1D);
else
addCapability(CapabilityImage1D);
break;
case DimCube:
if (arrayed) {
- if (sampled)
+ if (sampled == 1)
addCapability(CapabilitySampledCubeArray);
else
addCapability(CapabilityImageCubeArray);
}
break;
case DimRect:
- if (sampled)
+ if (sampled == 1)
addCapability(CapabilitySampledRect);
else
addCapability(CapabilityImageRect);
@@ -443,10 +468,14 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo
}
if (ms) {
- if (arrayed)
- addCapability(CapabilityImageMSArray);
- if (! sampled)
- addCapability(CapabilityStorageImageMultisample);
+ if (sampled == 2) {
+ // Images used with subpass data are not storage
+ // images, so don't require the capability for them.
+ if (dim != Dim::DimSubpassData)
+ addCapability(CapabilityStorageImageMultisample);
+ if (arrayed)
+ addCapability(CapabilityImageMSArray);
+ }
}
return type->getResultId();
@@ -928,17 +957,6 @@ void Builder::addMemberName(Id id, int memberNumber, const char* string)
names.push_back(std::unique_ptr<Instruction>(name));
}
-void Builder::addLine(Id target, Id fileName, int lineNum, int column)
-{
- Instruction* line = new Instruction(OpLine);
- line->addIdOperand(target);
- line->addIdOperand(fileName);
- line->addImmediateOperand(lineNum);
- line->addImmediateOperand(column);
-
- lines.push_back(std::unique_ptr<Instruction>(line));
-}
-
void Builder::addDecoration(Id id, Decoration decoration, int num)
{
if (decoration == spv::DecorationMax)
@@ -971,16 +989,16 @@ Function* Builder::makeEntryPoint(const char* entryPoint)
Block* entry;
std::vector<Id> params;
- std::vector<Decoration> precisions;
+ std::vector<std::vector<Decoration>> decorations;
- entryPointFunction = makeFunctionEntry(NoPrecision, makeVoidType(), entryPoint, params, precisions, &entry);
+ entryPointFunction = makeFunctionEntry(NoPrecision, makeVoidType(), entryPoint, params, decorations, &entry);
return entryPointFunction;
}
// Comments in header
Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const char* name,
- const std::vector<Id>& paramTypes, const std::vector<Decoration>& precisions, Block **entry)
+ const std::vector<Id>& paramTypes, const std::vector<std::vector<Decoration>>& decorations, Block **entry)
{
// Make the function and initial instructions in it
Id typeId = makeFunctionType(returnType, paramTypes);
@@ -989,8 +1007,10 @@ Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const
// Set up the precisions
setPrecision(function->getId(), precision);
- for (unsigned p = 0; p < (unsigned)precisions.size(); ++p)
- setPrecision(firstParamId + p, precisions[p]);
+ for (unsigned p = 0; p < (unsigned)decorations.size(); ++p) {
+ for (int d = 0; d < (int)decorations[p].size(); ++d)
+ addDecoration(firstParamId + p, decorations[p][d]);
+ }
// CFG
if (entry) {
@@ -1997,9 +2017,10 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector<Id>&
}
// Comments in header
-Builder::If::If(Id cond, Builder& gb) :
+Builder::If::If(Id cond, unsigned int ctrl, Builder& gb) :
builder(gb),
condition(cond),
+ control(ctrl),
elseBlock(0)
{
function = &builder.getBuildPoint()->getParent();
@@ -2040,7 +2061,7 @@ void Builder::If::makeEndIf()
// Go back to the headerBlock and make the flow control split
builder.setBuildPoint(headerBlock);
- builder.createSelectionMerge(mergeBlock, SelectionControlMaskNone);
+ builder.createSelectionMerge(mergeBlock, control);
if (elseBlock)
builder.createConditionalBranch(condition, thenBlock, elseBlock);
else
@@ -2052,7 +2073,7 @@ void Builder::If::makeEndIf()
}
// Comments in header
-void Builder::makeSwitch(Id selector, int numSegments, const std::vector<int>& caseValues,
+void Builder::makeSwitch(Id selector, unsigned int control, int numSegments, const std::vector<int>& caseValues,
const std::vector<int>& valueIndexToSegment, int defaultSegment,
std::vector<Block*>& segmentBlocks)
{
@@ -2065,7 +2086,7 @@ void Builder::makeSwitch(Id selector, int numSegments, const std::vector<int>& c
Block* mergeBlock = new Block(getUniqueId(), function);
// make and insert the switch's selection-merge instruction
- createSelectionMerge(mergeBlock, SelectionControlMaskNone);
+ createSelectionMerge(mergeBlock, control);
// make the switch instruction
Instruction* switchInst = new Instruction(NoResult, NoType, OpSwitch);
@@ -2411,12 +2432,9 @@ void Builder::dump(std::vector<unsigned int>& out) const
dumpInstructions(out, executionModes);
// Debug instructions
- if (source != SourceLanguageUnknown) {
- Instruction sourceInst(0, 0, OpSource);
- sourceInst.addImmediateOperand(source);
- sourceInst.addImmediateOperand(sourceVersion);
- sourceInst.dump(out);
- }
+ dumpInstructions(out, strings);
+ dumpModuleProcesses(out);
+ dumpSourceInstructions(out);
for (int e = 0; e < (int)sourceExtensions.size(); ++e) {
Instruction sourceExtInst(0, 0, OpSourceExtension);
sourceExtInst.addStringOperand(sourceExtensions[e]);
@@ -2574,6 +2592,48 @@ void Builder::createConditionalBranch(Id condition, Block* thenBlock, Block* els
elseBlock->addPredecessor(buildPoint);
}
+// OpSource
+// [OpSourceContinued]
+// ...
+void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
+{
+ const int maxWordCount = 0xFFFF;
+ const int opSourceWordCount = 4;
+ const int nonNullBytesPerInstruction = 4 * (maxWordCount - opSourceWordCount) - 1;
+
+ if (source != SourceLanguageUnknown) {
+ // OpSource Language Version File Source
+ Instruction sourceInst(NoResult, NoType, OpSource);
+ sourceInst.addImmediateOperand(source);
+ sourceInst.addImmediateOperand(sourceVersion);
+ // File operand
+ if (sourceFileStringId != NoResult) {
+ sourceInst.addIdOperand(sourceFileStringId);
+ // Source operand
+ if (sourceText.size() > 0) {
+ int nextByte = 0;
+ std::string subString;
+ while ((int)sourceText.size() - nextByte > 0) {
+ subString = sourceText.substr(nextByte, nonNullBytesPerInstruction);
+ if (nextByte == 0) {
+ // OpSource
+ sourceInst.addStringOperand(subString.c_str());
+ sourceInst.dump(out);
+ } else {
+ // OpSourcContinued
+ Instruction sourceContinuedInst(OpSourceContinued);
+ sourceContinuedInst.addStringOperand(subString.c_str());
+ sourceContinuedInst.dump(out);
+ }
+ nextByte += nonNullBytesPerInstruction;
+ }
+ } else
+ sourceInst.dump(out);
+ } else
+ sourceInst.dump(out);
+ }
+}
+
void Builder::dumpInstructions(std::vector<unsigned int>& out, const std::vector<std::unique_ptr<Instruction> >& instructions) const
{
for (int i = 0; i < (int)instructions.size(); ++i) {
@@ -2581,4 +2641,15 @@ void Builder::dumpInstructions(std::vector<unsigned int>& out, const std::vector
}
}
+void Builder::dumpModuleProcesses(std::vector<unsigned int>& out) const
+{
+ for (int i = 0; i < (int)moduleProcesses.size(); ++i) {
+ // TODO: switch this out for the 1.1 headers
+ const spv::Op OpModuleProcessed = (spv::Op)330;
+ Instruction moduleProcessed(OpModuleProcessed);
+ moduleProcessed.addStringOperand(moduleProcesses[i]);
+ moduleProcessed.dump(out);
+ }
+}
+
}; // end spv namespace
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h
index 204d3e76940..59b1da2eec3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h
@@ -70,7 +70,17 @@ public:
source = lang;
sourceVersion = version;
}
+ void setSourceFile(const std::string& file)
+ {
+ Instruction* fileString = new Instruction(getUniqueId(), NoType, OpString);
+ fileString->addStringOperand(file.c_str());
+ sourceFileStringId = fileString->getResultId();
+ strings.push_back(std::unique_ptr<Instruction>(fileString));
+ }
+ void setSourceText(const std::string& text) { sourceText = text; }
void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); }
+ void addModuleProcessed(const std::string& p) { moduleProcesses.push_back(p.c_str()); }
+ void setEmitOpLines() { emitOpLines = true; }
void addExtension(const char* ext) { extensions.insert(ext); }
Id import(const char*);
void setMemoryModel(spv::AddressingModel addr, spv::MemoryModel mem)
@@ -92,6 +102,12 @@ public:
return id;
}
+ // Log the current line, and if different than the last one,
+ // issue a new OpLine, using the current file name.
+ void setLine(int line);
+ // Low-level OpLine. See setLine() for a layered helper.
+ void addLine(Id fileName, int line, int column);
+
// For creating new types (will return old type if the requested one was already made).
Id makeVoidType();
Id makeBoolType();
@@ -134,6 +150,9 @@ public:
bool isSampledImage(Id resultId) const { return isSampledImageType(getTypeId(resultId)); }
bool isBoolType(Id typeId) const { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
+ bool isIntType(Id typeId) const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) != 0; }
+ bool isUintType(Id typeId) const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) == 0; }
+ bool isFloatType(Id typeId) const { return getTypeClass(typeId) == OpTypeFloat; }
bool isPointerType(Id typeId) const { return getTypeClass(typeId) == OpTypePointer; }
bool isScalarType(Id typeId) const { return getTypeClass(typeId) == OpTypeFloat || getTypeClass(typeId) == OpTypeInt || getTypeClass(typeId) == OpTypeBool; }
bool isVectorType(Id typeId) const { return getTypeClass(typeId) == OpTypeVector; }
@@ -153,6 +172,13 @@ public:
unsigned int getConstantScalar(Id resultId) const { return module.getInstruction(resultId)->getImmediateOperand(0); }
StorageClass getStorageClass(Id resultId) const { return getTypeStorageClass(getTypeId(resultId)); }
+ int getScalarTypeWidth(Id typeId) const
+ {
+ Id scalarTypeId = getScalarTypeId(typeId);
+ assert(getTypeClass(scalarTypeId) == OpTypeInt || getTypeClass(scalarTypeId) == OpTypeFloat);
+ return module.getInstruction(scalarTypeId)->getImmediateOperand(0);
+ }
+
int getTypeNumColumns(Id typeId) const
{
assert(isMatrixType(typeId));
@@ -189,6 +215,10 @@ public:
Id makeUintConstant(unsigned u, bool specConstant = false) { return makeIntConstant(makeUintType(32), u, specConstant); }
Id makeInt64Constant(long long i, bool specConstant = false) { return makeInt64Constant(makeIntType(64), (unsigned long long)i, specConstant); }
Id makeUint64Constant(unsigned long long u, bool specConstant = false) { return makeInt64Constant(makeUintType(64), u, specConstant); }
+#ifdef AMD_EXTENSIONS
+ Id makeInt16Constant(short i, bool specConstant = false) { return makeIntConstant(makeIntType(16), (unsigned)((unsigned short)i), specConstant); }
+ Id makeUint16Constant(unsigned short u, bool specConstant = false) { return makeIntConstant(makeUintType(16), (unsigned)u, specConstant); }
+#endif
Id makeFloatConstant(float f, bool specConstant = false);
Id makeDoubleConstant(double d, bool specConstant = false);
#ifdef AMD_EXTENSIONS
@@ -203,7 +233,6 @@ public:
void addExecutionMode(Function*, ExecutionMode mode, int value1 = -1, int value2 = -1, int value3 = -1);
void addName(Id, const char* name);
void addMemberName(Id, int member, const char* name);
- void addLine(Id target, Id fileName, int line, int column);
void addDecoration(Id, Decoration, int num = -1);
void addMemberDecoration(Id, unsigned int member, Decoration, int num = -1);
@@ -219,7 +248,7 @@ public:
// Return the function, pass back the entry.
// The returned pointer is only valid for the lifetime of this builder.
Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name, const std::vector<Id>& paramTypes,
- const std::vector<Decoration>& precisions, Block **entry = 0);
+ const std::vector<std::vector<Decoration>>& precisions, Block **entry = 0);
// Create a return. An 'implicit' return is one not appearing in the source
// code. In the case of an implicit return, no post-return block is inserted.
@@ -357,7 +386,7 @@ public:
// Helper to use for building nested control flow with if-then-else.
class If {
public:
- If(Id condition, Builder& builder);
+ If(Id condition, unsigned int ctrl, Builder& builder);
~If() {}
void makeBeginElse();
@@ -369,6 +398,7 @@ public:
Builder& builder;
Id condition;
+ unsigned int control;
Function* function;
Block* headerBlock;
Block* thenBlock;
@@ -388,7 +418,7 @@ public:
// Returns the right set of basic blocks to start each code segment with, so that the caller's
// recursion stack can hold the memory for it.
//
- void makeSwitch(Id condition, int numSegments, const std::vector<int>& caseValues,
+ void makeSwitch(Id condition, unsigned int control, int numSegments, const std::vector<int>& caseValues,
const std::vector<int>& valueToSegment, int defaultSegment, std::vector<Block*>& segmentBB); // return argument
// Add a branch to the innermost switch's merge block.
@@ -551,12 +581,19 @@ public:
void simplifyAccessChainSwizzle();
void createAndSetNoPredecessorBlock(const char*);
void createSelectionMerge(Block* mergeBlock, unsigned int control);
+ void dumpSourceInstructions(std::vector<unsigned int>&) const;
void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
+ void dumpModuleProcesses(std::vector<unsigned int>&) const;
SourceLanguage source;
int sourceVersion;
+ spv::Id sourceFileStringId;
+ std::string sourceText;
+ int currentLine;
+ bool emitOpLines;
std::set<std::string> extensions;
std::vector<const char*> sourceExtensions;
+ std::vector<const char*> moduleProcesses;
AddressingModel addressModel;
MemoryModel memoryModel;
std::set<spv::Capability> capabilities;
@@ -569,6 +606,7 @@ public:
AccessChain accessChain;
// special blocks of instructions for output
+ std::vector<std::unique_ptr<Instruction> > strings;
std::vector<std::unique_ptr<Instruction> > imports;
std::vector<std::unique_ptr<Instruction> > entryPoints;
std::vector<std::unique_ptr<Instruction> > executionModes;
@@ -589,7 +627,7 @@ public:
// Our loop stack.
std::stack<LoopBlocks> loops;
- // The stream for outputing warnings and errors.
+ // The stream for outputting warnings and errors.
SpvBuildLogger* logger;
}; // end Builder class
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp
index a99522b6fe5..f9d5254c7ec 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp
@@ -68,9 +68,9 @@ namespace spv {
// Also, the ceilings are declared next to these, to help keep them in sync.
// Ceilings should be
// - one more than the maximum value an enumerant takes on, for non-mask enumerants
-// (for non-sparse enums, this is the number of enumurants)
+// (for non-sparse enums, this is the number of enumerants)
// - the number of bits consumed by the set of masks
-// (for non-sparse mask enums, this is the number of enumurants)
+// (for non-sparse mask enums, this is the number of enumerants)
//
const int SourceLanguageCeiling = 6; // HLSL todo: need official enumerant
@@ -175,12 +175,13 @@ const char* ExecutionModeString(int mode)
case 31: return "ContractionOff";
case 32: return "Bad";
+ case 4446: return "PostDepthCoverage";
case ExecutionModeCeiling:
default: return "Bad";
}
}
-const int StorageClassCeiling = 12;
+const int StorageClassCeiling = 13;
const char* StorageClassString(int StorageClass)
{
@@ -197,6 +198,7 @@ const char* StorageClassString(int StorageClass)
case 9: return "PushConstant";
case 10: return "AtomicCounter";
case 11: return "Image";
+ case 12: return "StorageBuffer";
case StorageClassCeiling:
default: return "Bad";
@@ -329,6 +331,7 @@ const char* BuiltInString(int builtIn)
case 4424: return "BaseVertex";
case 4425: return "BaseInstance";
case 4426: return "DrawIndex";
+ case 5014: return "FragStencilRefEXT";
#ifdef AMD_EXTENSIONS
case 4992: return "BaryCoordNoPerspAMD";
@@ -635,13 +638,15 @@ const char* SelectControlString(int cont)
}
}
-const int LoopControlCeiling = 2;
+const int LoopControlCeiling = 4;
const char* LoopControlString(int cont)
{
switch (cont) {
case 0: return "Unroll";
case 1: return "DontUnroll";
+ case 2: return "DependencyInfinite";
+ case 3: return "DependencyLength";
case LoopControlCeiling:
default: return "Bad";
@@ -830,9 +835,25 @@ const char* CapabilityString(int info)
case 4427: return "DrawParameters";
case 4431: return "SubgroupVoteKHR";
+ case 4433: return "StorageUniformBufferBlock16";
+ case 4434: return "StorageUniform16";
+ case 4435: return "StoragePushConstant16";
+ case 4436: return "StorageInputOutput16";
+
case 4437: return "DeviceGroup";
case 4439: return "MultiView";
+ case 5013: return "StencilExportEXT";
+
+#ifdef AMD_EXTENSIONS
+ case 5009: return "ImageGatherBiasLodAMD";
+ case 5010: return "FragmentMaskAMD";
+ case 5015: return "ImageReadWriteLodAMD";
+#endif
+
+ case 4445: return "AtomicStorageOps";
+
+ case 4447: return "SampleMaskPostDepthCoverage";
#ifdef NV_EXTENSIONS
case 5251: return "GeometryShaderPassthroughNV";
case 5254: return "ShaderViewportIndexLayerNV";
@@ -1187,6 +1208,9 @@ const char* OpcodeString(int op)
case 5005: return "OpGroupFMaxNonUniformAMD";
case 5006: return "OpGroupUMaxNonUniformAMD";
case 5007: return "OpGroupSMaxNonUniformAMD";
+
+ case 5011: return "OpFragmentMaskFetchAMD";
+ case 5012: return "OpFragmentFetchAMD";
#endif
case OpcodeCeiling:
@@ -2849,6 +2873,15 @@ void Parameterize()
InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
+
+ InstructionDesc[OpFragmentMaskFetchAMD].capabilities.push_back(CapabilityFragmentMaskAMD);
+ InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'");
+
+ InstructionDesc[OpFragmentFetchAMD].capabilities.push_back(CapabilityFragmentMaskAMD);
+ InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
#endif
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h
index 7dcc51dd354..710ca1a52be 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h
@@ -36,6 +36,8 @@
// Parameterize the SPIR-V enumerants.
//
+#pragma once
+
#include "spirv.hpp"
#include <vector>
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/hex_float.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/hex_float.h
index 31b9f9ed89a..905b21a45ad 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/hex_float.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/hex_float.h
@@ -23,7 +23,7 @@
#include <limits>
#include <sstream>
-#if defined(_MSC_VER) && _MSC_VER < 1700
+#if defined(_MSC_VER) && _MSC_VER < 1800
namespace std {
bool isnan(double f)
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp
index 5580c403a1f..8bddf7e503a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp
@@ -47,11 +47,11 @@ namespace spv {
typedef unsigned int Id;
#define SPV_VERSION 0x10000
-#define SPV_REVISION 10
+#define SPV_REVISION 12
static const unsigned int MagicNumber = 0x07230203;
static const unsigned int Version = 0x00010000;
-static const unsigned int Revision = 10;
+static const unsigned int Revision = 12;
static const unsigned int OpCodeMask = 0xffff;
static const unsigned int WordCountShift = 16;
@@ -61,6 +61,7 @@ enum SourceLanguage {
SourceLanguageGLSL = 2,
SourceLanguageOpenCL_C = 3,
SourceLanguageOpenCL_CPP = 4,
+ SourceLanguageHLSL = 5,
SourceLanguageMax = 0x7fffffff,
};
@@ -121,6 +122,7 @@ enum ExecutionMode {
ExecutionModeOutputTriangleStrip = 29,
ExecutionModeVecTypeHint = 30,
ExecutionModeContractionOff = 31,
+ ExecutionModePostDepthCoverage = 4446,
ExecutionModeMax = 0x7fffffff,
};
@@ -137,6 +139,7 @@ enum StorageClass {
StorageClassPushConstant = 9,
StorageClassAtomicCounter = 10,
StorageClassImage = 11,
+ StorageClassStorageBuffer = 12,
StorageClassMax = 0x7fffffff,
};
@@ -374,6 +377,7 @@ enum Decoration {
DecorationNoContraction = 42,
DecorationInputAttachmentIndex = 43,
DecorationAlignment = 44,
+ DecorationExplicitInterpAMD = 4999,
DecorationOverrideCoverageNV = 5248,
DecorationPassthroughNV = 5250,
DecorationViewportRelativeNV = 5252,
@@ -433,6 +437,14 @@ enum BuiltIn {
BuiltInDrawIndex = 4426,
BuiltInDeviceIndex = 4438,
BuiltInViewIndex = 4440,
+ BuiltInBaryCoordNoPerspAMD = 4992,
+ BuiltInBaryCoordNoPerspCentroidAMD = 4993,
+ BuiltInBaryCoordNoPerspSampleAMD = 4994,
+ BuiltInBaryCoordSmoothAMD = 4995,
+ BuiltInBaryCoordSmoothCentroidAMD = 4996,
+ BuiltInBaryCoordSmoothSampleAMD = 4997,
+ BuiltInBaryCoordPullModelAMD = 4998,
+ BuiltInFragStencilRefEXT = 5014,
BuiltInViewportMaskNV = 5253,
BuiltInSecondaryPositionNV = 5257,
BuiltInSecondaryViewportMaskNV = 5258,
@@ -616,14 +628,23 @@ enum Capability {
CapabilitySubgroupBallotKHR = 4423,
CapabilityDrawParameters = 4427,
CapabilitySubgroupVoteKHR = 4431,
+ CapabilityStorageBuffer16BitAccess = 4433,
CapabilityStorageUniformBufferBlock16 = 4433,
CapabilityStorageUniform16 = 4434,
+ CapabilityUniformAndStorageBuffer16BitAccess = 4434,
CapabilityStoragePushConstant16 = 4435,
CapabilityStorageInputOutput16 = 4436,
CapabilityDeviceGroup = 4437,
CapabilityMultiView = 4439,
+ CapabilityVariablePointersStorageBuffer = 4441,
+ CapabilityVariablePointers = 4442,
+ CapabilityAtomicStorageOps = 4445,
+ CapabilitySampleMaskPostDepthCoverage = 4447,
+ CapabilityImageGatherBiasLodAMD = 5009,
+ CapabilityStencilExportEXT = 5013,
CapabilitySampleMaskOverrideCoverageNV = 5249,
CapabilityGeometryShaderPassthroughNV = 5251,
+ CapabilityShaderViewportIndexLayerEXT = 5254,
CapabilityShaderViewportIndexLayerNV = 5254,
CapabilityShaderViewportMaskNV = 5255,
CapabilityShaderStereoViewNV = 5259,
@@ -932,6 +953,14 @@ enum Op {
OpSubgroupAnyKHR = 4429,
OpSubgroupAllEqualKHR = 4430,
OpSubgroupReadInvocationKHR = 4432,
+ OpGroupIAddNonUniformAMD = 5000,
+ OpGroupFAddNonUniformAMD = 5001,
+ OpGroupFMinNonUniformAMD = 5002,
+ OpGroupUMinNonUniformAMD = 5003,
+ OpGroupSMinNonUniformAMD = 5004,
+ OpGroupFMaxNonUniformAMD = 5005,
+ OpGroupUMaxNonUniformAMD = 5006,
+ OpGroupSMaxNonUniformAMD = 5007,
OpMax = 0x7fffffff,
};
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h
index ce8b4b8a062..6880595e9f6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h
@@ -65,6 +65,14 @@ const Id NoResult = 0;
const Id NoType = 0;
const Decoration NoPrecision = DecorationMax;
+
+#ifdef __GNUC__
+# define POTENTIALLY_UNUSED __attribute__((unused))
+#else
+# define POTENTIALLY_UNUSED
+#endif
+
+POTENTIALLY_UNUSED
const MemorySemanticsMask MemorySemanticsAllMemory =
(MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask |
MemorySemanticsUniformMemoryMask |
@@ -87,7 +95,6 @@ public:
void addImmediateOperand(unsigned int immediate) { operands.push_back(immediate); }
void addStringOperand(const char* str)
{
- originalString = str;
unsigned int word;
char* wordString = (char*)&word;
char* wordPtr = wordString;
@@ -120,7 +127,6 @@ public:
Id getTypeId() const { return typeId; }
Id getIdOperand(int op) const { return operands[op]; }
unsigned int getImmediateOperand(int op) const { return operands[op]; }
- const char* getStringOperand() const { return originalString.c_str(); }
// Write out the binary form.
void dump(std::vector<unsigned int>& out) const
@@ -151,7 +157,6 @@ protected:
Id typeId;
Op opCode;
std::vector<Id> operands;
- std::string originalString; // could be optimized away; convenience for getting string operand
Block* block;
};
diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/StandAlone/CMakeLists.txt
index 2a9a3c47e35..b0d863d358a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/StandAlone/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/CMakeLists.txt
@@ -1,14 +1,13 @@
add_library(glslang-default-resource-limits
- ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp
-)
+ ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp)
set_property(TARGET glslang-default-resource-limits PROPERTY FOLDER glslang)
+set_property(TARGET glslang-default-resource-limits PROPERTY POSITION_INDEPENDENT_CODE ON)
target_include_directories(glslang-default-resource-limits
- PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
- PUBLIC ${PROJECT_SOURCE_DIR}
-)
+ PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
+ PUBLIC ${PROJECT_SOURCE_DIR})
-set(SOURCES StandAlone.cpp)
+set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
set(REMAPPER_SOURCES spirv-remap.cpp)
add_executable(glslangValidator ${SOURCES})
@@ -24,7 +23,6 @@ set(LIBRARIES
SPVRemapper
glslang-default-resource-limits)
-
if(WIN32)
set(LIBRARIES ${LIBRARIES} psapi)
elseif(UNIX)
@@ -40,8 +38,10 @@ if(WIN32)
source_group("Source" FILES ${SOURCES})
endif(WIN32)
-install(TARGETS glslangValidator
- RUNTIME DESTINATION bin)
+if(ENABLE_GLSLANG_INSTALL)
+ install(TARGETS glslangValidator
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-install(TARGETS spirv-remap
- RUNTIME DESTINATION bin)
+ install(TARGETS spirv-remap
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+endif(ENABLE_GLSLANG_INSTALL)
diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/DirStackFileIncluder.h b/3rdparty/bgfx/3rdparty/glslang/StandAlone/DirStackFileIncluder.h
new file mode 100644
index 00000000000..18734130e71
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/DirStackFileIncluder.h
@@ -0,0 +1,141 @@
+//
+// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
+// Copyright (C) 2017 Google, Inc.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+// Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+//
+// Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+
+#pragma once
+
+#include <vector>
+#include <string>
+#include <fstream>
+#include <algorithm>
+
+#include "./../glslang/Public/ShaderLang.h"
+
+// Default include class for normal include convention of search backward
+// through the stack of active include paths (for nested includes).
+// Can be overridden to customize.
+class DirStackFileIncluder : public glslang::TShader::Includer {
+public:
+ DirStackFileIncluder() : externalLocalDirectoryCount(0) { }
+
+ virtual IncludeResult* includeLocal(const char* headerName,
+ const char* includerName,
+ size_t inclusionDepth) override
+ {
+ return readLocalPath(headerName, includerName, (int)inclusionDepth);
+ }
+
+ virtual IncludeResult* includeSystem(const char* headerName,
+ const char* /*includerName*/,
+ size_t /*inclusionDepth*/) override
+ {
+ return readSystemPath(headerName);
+ }
+
+ // Externally set directories. E.g., from a command-line -I<dir>.
+ // - Most-recently pushed are checked first.
+ // - All these are checked after the parse-time stack of local directories
+ // is checked.
+ // - This only applies to the "local" form of #include.
+ // - Makes its own copy of the path.
+ virtual void pushExternalLocalDirectory(const std::string& dir)
+ {
+ directoryStack.push_back(dir);
+ externalLocalDirectoryCount = (int)directoryStack.size();
+ }
+
+ virtual void releaseInclude(IncludeResult* result) override
+ {
+ if (result != nullptr) {
+ delete [] static_cast<tUserDataElement*>(result->userData);
+ delete result;
+ }
+ }
+
+ virtual ~DirStackFileIncluder() override { }
+
+protected:
+ typedef char tUserDataElement;
+ std::vector<std::string> directoryStack;
+ int externalLocalDirectoryCount;
+
+ // Search for a valid "local" path based on combining the stack of include
+ // directories and the nominal name of the header.
+ virtual IncludeResult* readLocalPath(const char* headerName, const char* includerName, int depth)
+ {
+ // Discard popped include directories, and
+ // initialize when at parse-time first level.
+ directoryStack.resize(depth + externalLocalDirectoryCount);
+ if (depth == 1)
+ directoryStack.back() = getDirectory(includerName);
+
+ // Find a directory that works, using a reverse search of the include stack.
+ for (auto it = directoryStack.rbegin(); it != directoryStack.rend(); ++it) {
+ std::string path = *it + '/' + headerName;
+ std::replace(path.begin(), path.end(), '\\', '/');
+ std::ifstream file(path, std::ios_base::binary | std::ios_base::ate);
+ if (file) {
+ directoryStack.push_back(getDirectory(path));
+ return newIncludeResult(path, file, (int)file.tellg());
+ }
+ }
+
+ return nullptr;
+ }
+
+ // Search for a valid <system> path.
+ // Not implemented yet; returning nullptr signals failure to find.
+ virtual IncludeResult* readSystemPath(const char* /*headerName*/) const
+ {
+ return nullptr;
+ }
+
+ // Do actual reading of the file, filling in a new include result.
+ virtual IncludeResult* newIncludeResult(const std::string& path, std::ifstream& file, int length) const
+ {
+ char* content = new tUserDataElement [length];
+ file.seekg(0, file.beg);
+ file.read(content, length);
+ return new IncludeResult(path, content, length, content);
+ }
+
+ // If no path markers, return current working directory.
+ // Otherwise, strip file name and return path leading up to it.
+ virtual std::string getDirectory(const std::string path) const
+ {
+ size_t last = path.find_last_of("/\\");
+ return last == std::string::npos ? "." : path.substr(0, last);
+ }
+};
diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp b/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp
index 0da690e9a81..e7844eb21f6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp
@@ -35,10 +35,13 @@
//
// this only applies to the standalone wrapper, not the front end in general
+#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
+#endif
#include "ResourceLimits.h"
#include "Worklist.h"
+#include "DirStackFileIncluder.h"
#include "./../glslang/Include/ShHandle.h"
#include "./../glslang/Include/revision.h"
#include "./../glslang/Public/ShaderLang.h"
@@ -46,11 +49,15 @@
#include "../SPIRV/GLSL.std.450.h"
#include "../SPIRV/doc.h"
#include "../SPIRV/disassemble.h"
+
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <array>
+#include <map>
+#include <memory>
+#include <thread>
#include "../glslang/OSDependent/osinclude.h"
@@ -84,6 +91,13 @@ enum TOptions {
EOptionFlattenUniformArrays = (1 << 20),
EOptionNoStorageFormat = (1 << 21),
EOptionKeepUncalled = (1 << 22),
+ EOptionHlslOffsets = (1 << 23),
+ EOptionHlslIoMapping = (1 << 24),
+ EOptionAutoMapLocations = (1 << 25),
+ EOptionDebug = (1 << 26),
+ EOptionStdin = (1 << 27),
+ EOptionOptimizeDisable = (1 << 28),
+ EOptionOptimizeSize = (1 << 29),
};
//
@@ -105,17 +119,16 @@ enum TFailCode {
EShLanguage FindLanguage(const std::string& name, bool parseSuffix=true);
void CompileFile(const char* fileName, ShHandle);
void usage();
-void FreeFileData(char** data);
-char** ReadFileData(const char* fileName);
+char* ReadFileData(const char* fileName);
+void FreeFileData(char* data);
void InfoLogMsg(const char* msg, const char* name, const int num);
// Globally track if any compile or link failure.
bool CompileFailed = false;
bool LinkFailed = false;
-// Use to test breaking up a single shader file into multiple strings.
-// Set in ReadFileData().
-int NumShaderStrings;
+// array of unique places to leave the shader names and infologs for the asynchronous compiles
+std::vector<std::unique_ptr<glslang::TWorkItem>> WorkItems;
TBuiltInResource Resources;
std::string ConfigFile;
@@ -125,38 +138,15 @@ std::string ConfigFile;
//
void ProcessConfigFile()
{
- char** configStrings = 0;
- char* config = 0;
- if (ConfigFile.size() > 0) {
- configStrings = ReadFileData(ConfigFile.c_str());
- if (configStrings)
- config = *configStrings;
- else {
- printf("Error opening configuration file; will instead use the default configuration\n");
- usage();
- }
- }
-
- if (config == 0) {
+ if (ConfigFile.size() == 0)
Resources = glslang::DefaultTBuiltInResource;
- return;
+ else {
+ char* configString = ReadFileData(ConfigFile.c_str());
+ glslang::DecodeResourceLimits(&Resources, configString);
+ FreeFileData(configString);
}
-
- glslang::DecodeResourceLimits(&Resources, config);
-
- if (configStrings)
- FreeFileData(configStrings);
- else
- delete[] config;
}
-// thread-safe list of shaders to asynchronously grab and compile
-glslang::TWorklist Worklist;
-
-// array of unique places to leave the shader names and infologs for the asynchronous compiles
-glslang::TWorkItem** Work = 0;
-int NumWorkItems = 0;
-
int Options = 0;
const char* ExecutableName = nullptr;
const char* binaryFileName = nullptr;
@@ -164,12 +154,72 @@ const char* entryPointName = nullptr;
const char* sourceEntryPointName = nullptr;
const char* shaderStageName = nullptr;
const char* variableName = nullptr;
+std::vector<std::string> IncludeDirectoryList;
+int ClientInputSemanticsVersion = 100; // maps to, say, #define VULKAN 100
+int VulkanClientVersion = 100; // would map to, say, Vulkan 1.0
+int OpenGLClientVersion = 450; // doesn't influence anything yet, but maps to OpenGL 4.50
+unsigned int TargetVersion = 0x00001000; // maps to, say, SPIR-V 1.0
+std::vector<std::string> Processes; // what should be recorded by OpModuleProcessed, or equivalent
+
+// Per descriptor-set binding base data
+typedef std::map<unsigned int, unsigned int> TPerSetBaseBinding;
+
+std::array<std::array<unsigned int, EShLangCount>, glslang::EResCount> baseBinding;
+std::array<std::array<TPerSetBaseBinding, EShLangCount>, glslang::EResCount> baseBindingForSet;
+std::array<std::vector<std::string>, EShLangCount> baseResourceSetBinding;
+
+// Add things like "#define ..." to a preamble to use in the beginning of the shader.
+class TPreamble {
+public:
+ TPreamble() { }
+
+ bool isSet() const { return text.size() > 0; }
+ const char* get() const { return text.c_str(); }
+
+ // #define...
+ void addDef(std::string def)
+ {
+ text.append("#define ");
+ fixLine(def);
+
+ Processes.push_back("D");
+ Processes.back().append(def);
+
+ // The first "=" needs to turn into a space
+ const size_t equal = def.find_first_of("=");
+ if (equal != def.npos)
+ def[equal] = ' ';
+
+ text.append(def);
+ text.append("\n");
+ }
+
+ // #undef...
+ void addUndef(std::string undef)
+ {
+ text.append("#undef ");
+ fixLine(undef);
+
+ Processes.push_back("U");
+ Processes.back().append(undef);
+
+ text.append(undef);
+ text.append("\n");
+ }
+
+protected:
+ void fixLine(std::string& line)
+ {
+ // Can't go past a newline in the line
+ const size_t end = line.find_first_of("\n");
+ if (end != line.npos)
+ line = line.substr(0, end);
+ }
-std::array<unsigned int, EShLangCount> baseSamplerBinding;
-std::array<unsigned int, EShLangCount> baseTextureBinding;
-std::array<unsigned int, EShLangCount> baseImageBinding;
-std::array<unsigned int, EShLangCount> baseUboBinding;
-std::array<unsigned int, EShLangCount> baseSsboBinding;
+ std::string text; // contents of preamble
+};
+
+TPreamble UserPreamble;
//
// Create the default name for saving a binary if -o is not provided.
@@ -214,16 +264,63 @@ bool SetConfigFile(const std::string& name)
//
void Error(const char* message)
{
- printf("%s: Error %s (use -h for usage)\n", ExecutableName, message);
+ fprintf(stderr, "%s: Error %s (use -h for usage)\n", ExecutableName, message);
exit(EFailUsage);
}
//
-// Process an optional binding base of the form:
-// --argname [stage] base
+// Process an optional binding base of one the forms:
+// --argname [stage] base // base for stage (if given) or all stages (if not)
+// --argname [stage] [base set]... // set/base pairs: set the base for given binding set.
+
// Where stage is one of the forms accepted by FindLanguage, and base is an integer
//
-void ProcessBindingBase(int& argc, char**& argv, std::array<unsigned int, EShLangCount>& base)
+void ProcessBindingBase(int& argc, char**& argv, glslang::TResourceType res)
+{
+ if (argc < 2)
+ usage();
+
+ EShLanguage lang = EShLangCount;
+ int singleBase = 0;
+ TPerSetBaseBinding perSetBase;
+ int arg = 1;
+
+ // Parse stage, if given
+ if (!isdigit(argv[arg][0])) {
+ if (argc < 3) // this form needs one more argument
+ usage();
+
+ lang = FindLanguage(argv[arg++], false);
+ }
+
+ if ((argc - arg) > 2 && isdigit(argv[arg+0][0]) && isdigit(argv[arg+1][0])) {
+ // Parse a per-set binding base
+ while ((argc - arg) > 2 && isdigit(argv[arg+0][0]) && isdigit(argv[arg+1][0])) {
+ const int baseNum = atoi(argv[arg++]);
+ const int setNum = atoi(argv[arg++]);
+ perSetBase[setNum] = baseNum;
+ }
+ } else {
+ // Parse single binding base
+ singleBase = atoi(argv[arg++]);
+ }
+
+ argc -= (arg-1);
+ argv += (arg-1);
+
+ // Set one or all languages
+ const int langMin = (lang < EShLangCount) ? lang+0 : 0;
+ const int langMax = (lang < EShLangCount) ? lang+1 : EShLangCount;
+
+ for (int lang = langMin; lang < langMax; ++lang) {
+ if (!perSetBase.empty())
+ baseBindingForSet[res][lang] = perSetBase;
+ else
+ baseBinding[res][lang] = singleBase;
+ }
+}
+
+void ProcessResourceSetBindingBase(int& argc, char**& argv, std::array<std::vector<std::string>, EShLangCount>& base)
{
if (argc < 2)
usage();
@@ -232,15 +329,28 @@ void ProcessBindingBase(int& argc, char**& argv, std::array<unsigned int, EShLan
if (argc < 3) // this form needs one more argument
usage();
- // Parse form: --argname stage base
+ // Parse form: --argname stage [regname set base...], or:
+ // --argname stage set
const EShLanguage lang = FindLanguage(argv[1], false);
- base[lang] = atoi(argv[2]);
- argc-= 2;
- argv+= 2;
+
+ argc--;
+ argv++;
+
+ while (argc > 1 && argv[1] != nullptr && argv[1][0] != '-') {
+ base[lang].push_back(argv[1]);
+
+ argc--;
+ argv++;
+ }
+
+ // Must have one arg, or a multiple of three (for [regname set binding] triples)
+ if (base[lang].size() != 1 && (base[lang].size() % 3) != 0)
+ usage();
+
} else {
- // Parse form: --argname base
+ // Parse form: --argname set
for (int lang=0; lang<EShLangCount; ++lang)
- base[lang] = atoi(argv[1]);
+ base[lang].push_back(argv[1]);
argc--;
argv++;
@@ -253,23 +363,56 @@ void ProcessBindingBase(int& argc, char**& argv, std::array<unsigned int, EShLan
//
// Does not return (it exits) if command-line is fatally flawed.
//
-void ProcessArguments(int argc, char* argv[])
+void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItems, int argc, char* argv[])
{
- baseSamplerBinding.fill(0);
- baseTextureBinding.fill(0);
- baseImageBinding.fill(0);
- baseUboBinding.fill(0);
- baseSsboBinding.fill(0);
+ for (int res = 0; res < glslang::EResCount; ++res)
+ baseBinding[res].fill(0);
ExecutableName = argv[0];
- NumWorkItems = argc; // will include some empties where the '-' options were, but it doesn't matter, they'll be 0
- Work = new glslang::TWorkItem*[NumWorkItems];
- for (int w = 0; w < NumWorkItems; ++w)
- Work[w] = 0;
-
- argc--;
- argv++;
- for (; argc >= 1; argc--, argv++) {
+ workItems.reserve(argc);
+
+ const auto bumpArg = [&]() {
+ if (argc > 0) {
+ argc--;
+ argv++;
+ }
+ };
+
+ // read a string directly attached to a single-letter option
+ const auto getStringOperand = [&](const char* desc) {
+ if (argv[0][2] == 0) {
+ printf("%s must immediately follow option (no spaces)\n", desc);
+ exit(EFailUsage);
+ }
+ return argv[0] + 2;
+ };
+
+ // read a number attached to a single-letter option
+ const auto getAttachedNumber = [&](const char* desc) {
+ int num = atoi(argv[0] + 2);
+ if (num == 0) {
+ printf("%s: expected attached non-0 number\n", desc);
+ exit(EFailUsage);
+ }
+ return num;
+ };
+
+ // minimum needed (without overriding something else) to target Vulkan SPIR-V
+ const auto setVulkanSpv = []() {
+ Options |= EOptionSpv;
+ Options |= EOptionVulkanRules;
+ Options |= EOptionLinkProgram;
+ };
+
+ // minimum needed (without overriding something else) to target OpenGL SPIR-V
+ const auto setOpenGlSpv = []() {
+ Options |= EOptionSpv;
+ Options |= EOptionLinkProgram;
+ // undo a -H default to Vulkan
+ Options &= ~EOptionVulkanRules;
+ };
+
+ for (bumpArg(); argc >= 1; bumpArg()) {
if (argv[0][0] == '-') {
switch (argv[0][1]) {
case '-':
@@ -278,117 +421,179 @@ void ProcessArguments(int argc, char* argv[])
std::transform(lowerword.begin(), lowerword.end(), lowerword.begin(), ::tolower);
// handle --word style options
- if (lowerword == "shift-sampler-bindings" || // synonyms
+ if (lowerword == "auto-map-bindings" || // synonyms
+ lowerword == "auto-map-binding" ||
+ lowerword == "amb") {
+ Options |= EOptionAutoMapBindings;
+ } else if (lowerword == "auto-map-locations" || // synonyms
+ lowerword == "aml") {
+ Options |= EOptionAutoMapLocations;
+ } else if (lowerword == "client") {
+ if (argc > 1) {
+ if (strcmp(argv[1], "vulkan100") == 0)
+ setVulkanSpv();
+ else if (strcmp(argv[1], "opengl100") == 0)
+ setOpenGlSpv();
+ else
+ Error("--client expects vulkan100 or opengl100");
+ }
+ bumpArg();
+ } else if (lowerword == "flatten-uniform-arrays" || // synonyms
+ lowerword == "flatten-uniform-array" ||
+ lowerword == "fua") {
+ Options |= EOptionFlattenUniformArrays;
+ } else if (lowerword == "hlsl-offsets") {
+ Options |= EOptionHlslOffsets;
+ } else if (lowerword == "hlsl-iomap" ||
+ lowerword == "hlsl-iomapper" ||
+ lowerword == "hlsl-iomapping") {
+ Options |= EOptionHlslIoMapping;
+ } else if (lowerword == "keep-uncalled" || // synonyms
+ lowerword == "ku") {
+ Options |= EOptionKeepUncalled;
+ } else if (lowerword == "no-storage-format" || // synonyms
+ lowerword == "nsf") {
+ Options |= EOptionNoStorageFormat;
+ } else if (lowerword == "relaxed-errors") {
+ Options |= EOptionRelaxedErrors;
+ } else if (lowerword == "resource-set-bindings" || // synonyms
+ lowerword == "resource-set-binding" ||
+ lowerword == "rsb") {
+ ProcessResourceSetBindingBase(argc, argv, baseResourceSetBinding);
+ } else if (lowerword == "shift-image-bindings" || // synonyms
+ lowerword == "shift-image-binding" ||
+ lowerword == "sib") {
+ ProcessBindingBase(argc, argv, glslang::EResImage);
+ } else if (lowerword == "shift-sampler-bindings" || // synonyms
lowerword == "shift-sampler-binding" ||
lowerword == "ssb") {
- ProcessBindingBase(argc, argv, baseSamplerBinding);
+ ProcessBindingBase(argc, argv, glslang::EResSampler);
+ } else if (lowerword == "shift-uav-bindings" || // synonyms
+ lowerword == "shift-uav-binding" ||
+ lowerword == "suavb") {
+ ProcessBindingBase(argc, argv, glslang::EResUav);
} else if (lowerword == "shift-texture-bindings" || // synonyms
lowerword == "shift-texture-binding" ||
lowerword == "stb") {
- ProcessBindingBase(argc, argv, baseTextureBinding);
- } else if (lowerword == "shift-image-bindings" || // synonyms
- lowerword == "shift-image-binding" ||
- lowerword == "sib") {
- ProcessBindingBase(argc, argv, baseImageBinding);
+ ProcessBindingBase(argc, argv, glslang::EResTexture);
} else if (lowerword == "shift-ubo-bindings" || // synonyms
lowerword == "shift-ubo-binding" ||
- lowerword == "sub") {
- ProcessBindingBase(argc, argv, baseUboBinding);
+ lowerword == "shift-cbuffer-bindings" ||
+ lowerword == "shift-cbuffer-binding" ||
+ lowerword == "sub" ||
+ lowerword == "scb") {
+ ProcessBindingBase(argc, argv, glslang::EResUbo);
} else if (lowerword == "shift-ssbo-bindings" || // synonyms
lowerword == "shift-ssbo-binding" ||
lowerword == "sbb") {
- ProcessBindingBase(argc, argv, baseSsboBinding);
- } else if (lowerword == "auto-map-bindings" || // synonyms
- lowerword == "auto-map-binding" ||
- lowerword == "amb") {
- Options |= EOptionAutoMapBindings;
- } else if (lowerword == "flatten-uniform-arrays" || // synonyms
- lowerword == "flatten-uniform-array" ||
- lowerword == "fua") {
- Options |= EOptionFlattenUniformArrays;
- } else if (lowerword == "no-storage-format" || // synonyms
- lowerword == "nsf") {
- Options |= EOptionNoStorageFormat;
+ ProcessBindingBase(argc, argv, glslang::EResSsbo);
+ } else if (lowerword == "source-entrypoint" || // synonyms
+ lowerword == "sep") {
+ if (argc <= 1)
+ Error("no <entry-point> provided for --source-entrypoint");
+ sourceEntryPointName = argv[1];
+ bumpArg();
+ break;
+ } else if (lowerword == "stdin") {
+ Options |= EOptionStdin;
+ shaderStageName = argv[1];
+ } else if (lowerword == "suppress-warnings") {
+ Options |= EOptionSuppressWarnings;
+ } else if (lowerword == "target-env") {
+ if (argc > 1) {
+ if (strcmp(argv[1], "vulkan1.0") == 0) {
+ setVulkanSpv();
+ VulkanClientVersion = 100;
+ } else if (strcmp(argv[1], "opengl") == 0) {
+ setOpenGlSpv();
+ OpenGLClientVersion = 450;
+ } else
+ Error("--target-env expected vulkan1.0 or opengl");
+ }
+ bumpArg();
} else if (lowerword == "variable-name" || // synonyms
lowerword == "vn") {
Options |= EOptionOutputHexadecimal;
- variableName = argv[1];
- if (argc > 0) {
- argc--;
- argv++;
- } else
+ if (argc <= 1)
Error("no <C-variable-name> provided for --variable-name");
+ variableName = argv[1];
+ bumpArg();
break;
- }
- else if (lowerword == "source-entrypoint" || // synonyms
- lowerword == "sep") {
- sourceEntryPointName = argv[1];
- if (argc > 0) {
- argc--;
- argv++;
- } else
- Error("no <entry-point> provided for --source-entrypoint");
- break;
- } else if (lowerword == "keep-uncalled" || // synonyms
- lowerword == "ku") {
- Options |= EOptionKeepUncalled;
} else {
usage();
}
}
break;
+ case 'C':
+ Options |= EOptionCascadingErrors;
+ break;
+ case 'D':
+ if (argv[0][2] == 0)
+ Options |= EOptionReadHlsl;
+ else
+ UserPreamble.addDef(getStringOperand("-D<macro> macro name"));
+ break;
+ case 'E':
+ Options |= EOptionOutputPreprocessed;
+ break;
+ case 'G':
+ // OpenGL Client
+ setOpenGlSpv();
+ if (argv[0][2] != 0)
+ ClientInputSemanticsVersion = getAttachedNumber("-G<num> client input semantics");
+ break;
case 'H':
Options |= EOptionHumanReadableSpv;
if ((Options & EOptionSpv) == 0) {
// default to Vulkan
- Options |= EOptionSpv;
- Options |= EOptionVulkanRules;
- Options |= EOptionLinkProgram;
+ setVulkanSpv();
}
break;
- case 'V':
- Options |= EOptionSpv;
- Options |= EOptionVulkanRules;
- Options |= EOptionLinkProgram;
+ case 'I':
+ IncludeDirectoryList.push_back(getStringOperand("-I<dir> include path"));
+ break;
+ case 'O':
+ if (argv[0][2] == 'd')
+ Options |= EOptionOptimizeDisable;
+ else if (argv[0][2] == 's')
+#ifdef ENABLE_OPT
+ Options |= EOptionOptimizeSize;
+#else
+ Error("-Os not available; optimizer not linked");
+#endif
+ else
+ Error("unknown -O option");
break;
case 'S':
- shaderStageName = argv[1];
- if (argc > 0) {
- argc--;
- argv++;
- } else
+ if (argc <= 1)
Error("no <stage> specified for -S");
+ shaderStageName = argv[1];
+ bumpArg();
break;
- case 'G':
- Options |= EOptionSpv;
- Options |= EOptionLinkProgram;
- // undo a -H default to Vulkan
- Options &= ~EOptionVulkanRules;
+ case 'U':
+ UserPreamble.addUndef(getStringOperand("-U<macro>: macro name"));
break;
- case 'E':
- Options |= EOptionOutputPreprocessed;
+ case 'V':
+ setVulkanSpv();
+ if (argv[0][2] != 0)
+ ClientInputSemanticsVersion = getAttachedNumber("-G<num> client input semantics");
break;
case 'c':
Options |= EOptionDumpConfig;
break;
- case 'C':
- Options |= EOptionCascadingErrors;
- break;
case 'd':
Options |= EOptionDefaultDesktop;
break;
- case 'D':
- Options |= EOptionReadHlsl;
- break;
case 'e':
// HLSL todo: entry point handle needs much more sophistication.
// This is okay for one compilation unit with one entry point.
entryPointName = argv[1];
- if (argc > 0) {
- argc--;
- argv++;
- } else
- Error("no <entry-point> provided for -e");
+ if (argc <= 1)
+ Error("no <name> provided for -e");
+ bumpArg();
+ break;
+ case 'g':
+ Options |= EOptionDebug;
break;
case 'h':
usage();
@@ -403,12 +608,10 @@ void ProcessArguments(int argc, char* argv[])
Options |= EOptionMemoryLeakMode;
break;
case 'o':
- binaryFileName = argv[1];
- if (argc > 0) {
- argc--;
- argv++;
- } else
+ if (argc <= 1)
Error("no <file> provided for -o");
+ binaryFileName = argv[1];
+ bumpArg();
break;
case 'q':
Options |= EOptionDumpReflection;
@@ -420,9 +623,7 @@ void ProcessArguments(int argc, char* argv[])
Options |= EOptionSuppressInfolog;
break;
case 't':
- #ifdef _WIN32
- Options |= EOptionMultiThreaded;
- #endif
+ Options |= EOptionMultiThreaded;
break;
case 'v':
Options |= EOptionDumpVersions;
@@ -440,12 +641,15 @@ void ProcessArguments(int argc, char* argv[])
} else {
std::string name(argv[0]);
if (! SetConfigFile(name)) {
- Work[argc] = new glslang::TWorkItem(name);
- Worklist.add(Work[argc]);
+ workItems.push_back(std::unique_ptr<glslang::TWorkItem>(new glslang::TWorkItem(name)));
}
}
}
+ // Make sure that -S is always specified if --stdin is specified
+ if ((Options & EOptionStdin) && shaderStageName == nullptr)
+ Error("must provide -S when --stdin is given");
+
// Make sure that -E is not specified alongside linking (which includes SPV generation)
if ((Options & EOptionOutputPreprocessed) && (Options & EOptionLinkProgram))
Error("can't use -E when linking is selected");
@@ -482,30 +686,44 @@ void SetMessageOptions(EShMessages& messages)
messages = (EShMessages)(messages | EShMsgCascadingErrors);
if (Options & EOptionKeepUncalled)
messages = (EShMessages)(messages | EShMsgKeepUncalled);
+ if (Options & EOptionHlslOffsets)
+ messages = (EShMessages)(messages | EShMsgHlslOffsets);
+ if (Options & EOptionDebug)
+ messages = (EShMessages)(messages | EShMsgDebugInfo);
}
//
// Thread entry point, for non-linking asynchronous mode.
//
-// Return 0 for failure, 1 for success.
-//
-unsigned int CompileShaders(void*)
+void CompileShaders(glslang::TWorklist& worklist)
{
glslang::TWorkItem* workItem;
- while (Worklist.remove(workItem)) {
- ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), Options);
+ if (Options & EOptionStdin) {
+ worklist.remove(workItem);
+ ShHandle compiler = ShConstructCompiler(FindLanguage("stdin"), Options);
if (compiler == 0)
- return 0;
+ return;
- CompileFile(workItem->name.c_str(), compiler);
+ CompileFile("stdin", compiler);
- if (! (Options & EOptionSuppressInfolog))
- workItem->results = ShGetInfoLog(compiler);
+ if (! (Options & EOptionSuppressInfolog))
+ workItem->results = ShGetInfoLog(compiler);
ShDestruct(compiler);
- }
+ } else {
+ while (worklist.remove(workItem)) {
+ ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), Options);
+ if (compiler == 0)
+ return;
- return 0;
+ CompileFile(workItem->name.c_str(), compiler);
+
+ if (! (Options & EOptionSuppressInfolog))
+ workItem->results = ShGetInfoLog(compiler);
+
+ ShDestruct(compiler);
+ }
+ }
}
// Outputs the given string, but only if it is non-null and non-empty.
@@ -521,36 +739,41 @@ void PutsIfNonEmpty(const char* str)
// This prevents erroneous newlines from appearing.
void StderrIfNonEmpty(const char* str)
{
- if (str && str[0]) {
- fprintf(stderr, "%s\n", str);
- }
+ if (str && str[0])
+ fprintf(stderr, "%s\n", str);
}
// Simple bundling of what makes a compilation unit for ease in passing around,
// and separation of handling file IO versus API (programmatic) compilation.
struct ShaderCompUnit {
EShLanguage stage;
- std::string fileName;
- char** text; // memory owned/managed externally
- const char* fileNameList[1];
+ static const int maxCount = 1;
+ int count; // live number of strings/names
+ const char* text[maxCount]; // memory owned/managed externally
+ std::string fileName[maxCount]; // hold's the memory, but...
+ const char* fileNameList[maxCount]; // downstream interface wants pointers
- // Need to have a special constructors to adjust the fileNameList, since back end needs a list of ptrs
- ShaderCompUnit(EShLanguage istage, std::string &ifileName, char** itext)
- {
- stage = istage;
- fileName = ifileName;
- text = itext;
- fileNameList[0] = fileName.c_str();
- }
+ ShaderCompUnit(EShLanguage stage) : stage(stage), count(0) { }
- ShaderCompUnit(const ShaderCompUnit &rhs)
+ ShaderCompUnit(const ShaderCompUnit& rhs)
{
stage = rhs.stage;
- fileName = rhs.fileName;
- text = rhs.text;
- fileNameList[0] = fileName.c_str();
+ count = rhs.count;
+ for (int i = 0; i < count; ++i) {
+ fileName[i] = rhs.fileName[i];
+ text[i] = rhs.text[i];
+ fileNameList[i] = rhs.fileName[i].c_str();
+ }
}
+ void addString(std::string& ifileName, const char* itext)
+ {
+ assert(count < maxCount);
+ fileName[count] = ifileName;
+ text[count] = itext;
+ fileNameList[count] = fileName[count].c_str();
+ ++count;
+ }
};
//
@@ -577,30 +800,73 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
for (auto it = compUnits.cbegin(); it != compUnits.cend(); ++it) {
const auto &compUnit = *it;
glslang::TShader* shader = new glslang::TShader(compUnit.stage);
- shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, 1);
+ shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, compUnit.count);
if (entryPointName) // HLSL todo: this needs to be tracked per compUnits
shader->setEntryPoint(entryPointName);
- if (sourceEntryPointName)
+ if (sourceEntryPointName) {
+ if (entryPointName == nullptr)
+ printf("Warning: Changing source entry point name without setting an entry-point name.\n"
+ "Use '-e <name>'.\n");
shader->setSourceEntryPoint(sourceEntryPointName);
+ }
+ if (UserPreamble.isSet())
+ shader->setPreamble(UserPreamble.get());
+ shader->addProcesses(Processes);
+
+ // Set IO mapper binding shift values
+ for (int r = 0; r < glslang::EResCount; ++r) {
+ const glslang::TResourceType res = glslang::TResourceType(r);
+
+ // Set base bindings
+ shader->setShiftBinding(res, baseBinding[res][compUnit.stage]);
+
+ // Set bindings for particular resource sets
+ // TODO: use a range based for loop here, when available in all environments.
+ for (auto i = baseBindingForSet[res][compUnit.stage].begin();
+ i != baseBindingForSet[res][compUnit.stage].end(); ++i)
+ shader->setShiftBindingForSet(res, i->second, i->first);
+ }
- shader->setShiftSamplerBinding(baseSamplerBinding[compUnit.stage]);
- shader->setShiftTextureBinding(baseTextureBinding[compUnit.stage]);
- shader->setShiftImageBinding(baseImageBinding[compUnit.stage]);
- shader->setShiftUboBinding(baseUboBinding[compUnit.stage]);
- shader->setShiftSsboBinding(baseSsboBinding[compUnit.stage]);
shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0);
+ shader->setResourceSetBinding(baseResourceSetBinding[compUnit.stage]);
+
+ if (Options & EOptionHlslIoMapping)
+ shader->setHlslIoMapping(true);
if (Options & EOptionAutoMapBindings)
shader->setAutoMapBindings(true);
+ if (Options & EOptionAutoMapLocations)
+ shader->setAutoMapLocations(true);
+
+ // Set up the environment, some subsettings take precedence over earlier
+ // ways of setting things.
+ if (Options & EOptionSpv) {
+ if (Options & EOptionVulkanRules) {
+ shader->setEnvInput((Options & EOptionReadHlsl) ? glslang::EShSourceHlsl
+ : glslang::EShSourceGlsl,
+ compUnit.stage, glslang::EShClientVulkan, ClientInputSemanticsVersion);
+ shader->setEnvClient(glslang::EShClientVulkan, VulkanClientVersion);
+ shader->setEnvTarget(glslang::EshTargetSpv, TargetVersion);
+ } else {
+ shader->setEnvInput((Options & EOptionReadHlsl) ? glslang::EShSourceHlsl
+ : glslang::EShSourceGlsl,
+ compUnit.stage, glslang::EShClientOpenGL, ClientInputSemanticsVersion);
+ shader->setEnvClient(glslang::EShClientOpenGL, OpenGLClientVersion);
+ shader->setEnvTarget(glslang::EshTargetSpv, TargetVersion);
+ }
+ }
+
shaders.push_back(shader);
- const int defaultVersion = Options & EOptionDefaultDesktop? 110: 100;
+ const int defaultVersion = Options & EOptionDefaultDesktop ? 110 : 100;
+ DirStackFileIncluder includer;
+ std::for_each(IncludeDirectoryList.rbegin(), IncludeDirectoryList.rend(), [&includer](const std::string& dir) {
+ includer.pushExternalLocalDirectory(dir); });
if (Options & EOptionOutputPreprocessed) {
std::string str;
- glslang::TShader::ForbidIncluder includer;
if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, false,
messages, &str, includer)) {
PutsIfNonEmpty(str.c_str());
@@ -611,14 +877,14 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
StderrIfNonEmpty(shader->getInfoDebugLog());
continue;
}
- if (! shader->parse(&Resources, defaultVersion, false, messages))
+ if (! shader->parse(&Resources, defaultVersion, false, messages, includer))
CompileFailed = true;
program.addShader(shader);
if (! (Options & EOptionSuppressInfolog) &&
! (Options & EOptionMemoryLeakMode)) {
- PutsIfNonEmpty(compUnit.fileName.c_str());
+ PutsIfNonEmpty(compUnit.fileName[0].c_str());
PutsIfNonEmpty(shader->getInfoLog());
PutsIfNonEmpty(shader->getInfoDebugLog());
}
@@ -661,7 +927,12 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
std::vector<unsigned int> spirv;
std::string warningsErrors;
spv::SpvBuildLogger logger;
- glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), spirv, &logger);
+ glslang::SpvOptions spvOptions;
+ if (Options & EOptionDebug)
+ spvOptions.generateDebugInfo = true;
+ spvOptions.disableOptimizer = (Options & EOptionOptimizeDisable) != 0;
+ spvOptions.optimizeSize = (Options & EOptionOptimizeSize) != 0;
+ glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), spirv, &logger, &spvOptions);
// Dump the spv to a file or stdout, etc., but only if not doing
// memory/perf testing, as it's not internal to programmatic use.
@@ -705,29 +976,36 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
// performance and memory testing, the actual compile/link can be put in
// a loop, independent of processing the work items and file IO.
//
-void CompileAndLinkShaderFiles()
+void CompileAndLinkShaderFiles(glslang::TWorklist& Worklist)
{
std::vector<ShaderCompUnit> compUnits;
- // Transfer all the work items from to a simple list of
- // of compilation units. (We don't care about the thread
- // work-item distribution properties in this path, which
- // is okay due to the limited number of shaders, know since
- // they are all getting linked together.)
- glslang::TWorkItem* workItem;
- while (Worklist.remove(workItem)) {
- ShaderCompUnit compUnit(
- FindLanguage(workItem->name),
- workItem->name,
- ReadFileData(workItem->name.c_str())
- );
-
- if (! compUnit.text) {
- usage();
- return;
- }
-
+ // If this is using stdin, we can't really detect multiple different file
+ // units by input type. We need to assume that we're just being given one
+ // file of a certain type.
+ if ((Options & EOptionStdin) != 0) {
+ ShaderCompUnit compUnit(FindLanguage("stdin"));
+ std::istreambuf_iterator<char> begin(std::cin), end;
+ std::string tempString(begin, end);
+ char* fileText = strdup(tempString.c_str());
+ std::string fileName = "stdin";
+ compUnit.addString(fileName, fileText);
compUnits.push_back(compUnit);
+ } else {
+ // Transfer all the work items from to a simple list of
+ // of compilation units. (We don't care about the thread
+ // work-item distribution properties in this path, which
+ // is okay due to the limited number of shaders, know since
+ // they are all getting linked together.)
+ glslang::TWorkItem* workItem;
+ while (Worklist.remove(workItem)) {
+ ShaderCompUnit compUnit(FindLanguage(workItem->name));
+ char* fileText = ReadFileData(workItem->name.c_str());
+ if (fileText == nullptr)
+ usage();
+ compUnit.addString(workItem->name, fileText);
+ compUnits.push_back(compUnit);
+ }
}
// Actual call to programmatic processing of compile and link,
@@ -741,17 +1019,23 @@ void CompileAndLinkShaderFiles()
glslang::OS_DumpMemoryCounters();
}
+ // free memory from ReadFileData, which got stored in a const char*
+ // as the first string above
for (auto it = compUnits.begin(); it != compUnits.end(); ++it)
- FreeFileData(it->text);
+ FreeFileData(const_cast<char*>(it->text[0]));
}
-int C_DECL main(int argc, char* argv[])
+int singleMain()
{
- ProcessArguments(argc, argv);
+ glslang::TWorklist workList;
+ std::for_each(WorkItems.begin(), WorkItems.end(), [&workList](std::unique_ptr<glslang::TWorkItem>& item) {
+ assert(item);
+ workList.add(item.get());
+ });
if (Options & EOptionDumpConfig) {
printf("%s", glslang::GetDefaultTBuiltInResourceString().c_str());
- if (Worklist.empty())
+ if (workList.empty())
return ESuccess;
}
@@ -764,16 +1048,22 @@ int C_DECL main(int argc, char* argv[])
printf("SPIR-V Version %s\n", spirvVersion.c_str());
printf("GLSL.std.450 Version %d, Revision %d\n", GLSLstd450Version, GLSLstd450Revision);
printf("Khronos Tool ID %d\n", glslang::GetKhronosToolId());
+ printf("SPIR-V Generator Version %d\n", glslang::GetSpirvGeneratorVersion());
printf("GL_KHR_vulkan_glsl version %d\n", 100);
printf("ARB_GL_gl_spirv version %d\n", 100);
- if (Worklist.empty())
+ if (workList.empty())
return ESuccess;
}
- if (Worklist.empty()) {
+ if (workList.empty() && ((Options & EOptionStdin) == 0)) {
usage();
}
+ if (Options & EOptionStdin) {
+ WorkItems.push_back(std::unique_ptr<glslang::TWorkItem>{new glslang::TWorkItem("stdin")});
+ workList.add(WorkItems.back().get());
+ }
+
ProcessConfigFile();
//
@@ -784,47 +1074,45 @@ int C_DECL main(int argc, char* argv[])
if (Options & EOptionLinkProgram ||
Options & EOptionOutputPreprocessed) {
glslang::InitializeProcess();
- CompileAndLinkShaderFiles();
+ glslang::InitializeProcess(); // also test reference counting of users
+ glslang::InitializeProcess(); // also test reference counting of users
+ glslang::FinalizeProcess(); // also test reference counting of users
+ glslang::FinalizeProcess(); // also test reference counting of users
+ CompileAndLinkShaderFiles(workList);
glslang::FinalizeProcess();
- for (int w = 0; w < NumWorkItems; ++w) {
- if (Work[w]) {
- delete Work[w];
- }
- }
} else {
ShInitialize();
+ ShInitialize(); // also test reference counting of users
+ ShFinalize(); // also test reference counting of users
- bool printShaderNames = Worklist.size() > 1;
+ bool printShaderNames = workList.size() > 1;
if (Options & EOptionMultiThreaded) {
- const int NumThreads = 16;
- void* threads[NumThreads];
- for (int t = 0; t < NumThreads; ++t) {
- threads[t] = glslang::OS_CreateThread(&CompileShaders);
- if (! threads[t]) {
- printf("Failed to create thread\n");
+ std::array<std::thread, 16> threads;
+ for (unsigned int t = 0; t < threads.size(); ++t) {
+ threads[t] = std::thread(CompileShaders, std::ref(workList));
+ if (threads[t].get_id() == std::thread::id()) {
+ fprintf(stderr, "Failed to create thread\n");
return EFailThreadCreate;
}
}
- glslang::OS_WaitForAllThreads(threads, NumThreads);
+
+ std::for_each(threads.begin(), threads.end(), [](std::thread& t) { t.join(); });
} else
- CompileShaders(0);
+ CompileShaders(workList);
// Print out all the resulting infologs
- for (int w = 0; w < NumWorkItems; ++w) {
- if (Work[w]) {
- if (printShaderNames || Work[w]->results.size() > 0)
- PutsIfNonEmpty(Work[w]->name.c_str());
- PutsIfNonEmpty(Work[w]->results.c_str());
- delete Work[w];
+ for (size_t w = 0; w < WorkItems.size(); ++w) {
+ if (WorkItems[w]) {
+ if (printShaderNames || WorkItems[w]->results.size() > 0)
+ PutsIfNonEmpty(WorkItems[w]->name.c_str());
+ PutsIfNonEmpty(WorkItems[w]->results.c_str());
}
}
ShFinalize();
}
- delete[] Work;
-
if (CompileFailed)
return EFailCompile;
if (LinkFailed)
@@ -833,6 +1121,25 @@ int C_DECL main(int argc, char* argv[])
return 0;
}
+int C_DECL main(int argc, char* argv[])
+{
+ ProcessArguments(WorkItems, argc, argv);
+
+ int ret = 0;
+
+ // Loop over the entire init/finalize cycle to watch memory changes
+ const int iterations = 1;
+ if (iterations > 1)
+ glslang::OS_DumpMemoryCounters();
+ for (int i = 0; i < iterations; ++i) {
+ ret = singleMain();
+ if (iterations > 1)
+ glslang::OS_DumpMemoryCounters();
+ }
+
+ return ret;
+}
+
//
// Deduce the language from the filename. Files must end in one of the
// following extensions:
@@ -889,29 +1196,29 @@ EShLanguage FindLanguage(const std::string& name, bool parseSuffix)
void CompileFile(const char* fileName, ShHandle compiler)
{
int ret = 0;
- char** shaderStrings = ReadFileData(fileName);
- if (! shaderStrings) {
- usage();
+ char* shaderString;
+ if ((Options & EOptionStdin) != 0) {
+ std::istreambuf_iterator<char> begin(std::cin), end;
+ std::string tempString(begin, end);
+ shaderString = strdup(tempString.c_str());
+ } else {
+ shaderString = ReadFileData(fileName);
}
- int* lengths = new int[NumShaderStrings];
-
// move to length-based strings, rather than null-terminated strings
- for (int s = 0; s < NumShaderStrings; ++s)
- lengths[s] = (int)strlen(shaderStrings[s]);
-
- if (! shaderStrings) {
- CompileFailed = true;
- return;
- }
+ int* lengths = new int[1];
+ lengths[0] = (int)strlen(shaderString);
EShMessages messages = EShMsgDefault;
SetMessageOptions(messages);
+ if (UserPreamble.isSet())
+ Error("-D and -U options require -l (linking)\n");
+
for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) {
for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j) {
// ret = ShCompile(compiler, shaderStrings, NumShaderStrings, lengths, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
- ret = ShCompile(compiler, shaderStrings, NumShaderStrings, nullptr, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
+ ret = ShCompile(compiler, &shaderString, 1, nullptr, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
// const char* multi[12] = { "# ve", "rsion", " 300 e", "s", "\n#err",
// "or should be l", "ine 1", "string 5\n", "float glo", "bal",
// ";\n#error should be line 2\n void main() {", "global = 2.3;}" };
@@ -924,7 +1231,7 @@ void CompileFile(const char* fileName, ShHandle compiler)
}
delete [] lengths;
- FreeFileData(shaderStrings);
+ FreeFileData(shaderString);
if (ret == 0)
CompileFailed = true;
@@ -937,8 +1244,8 @@ void usage()
{
printf("Usage: glslangValidator [option]... [file]...\n"
"\n"
- "Where: each 'file' ends in .<stage>, where <stage> is one of\n"
- " .conf to provide an optional config file that replaces the default configuration\n"
+ "'file' can end in .<stage> for auto-stage classification, where <stage> is:\n"
+ " .conf to provide a config file that replaces the default configuration\n"
" (see -c option below for generating a template)\n"
" .vert for a vertex shader\n"
" .tesc for a tessellation control shader\n"
@@ -947,71 +1254,111 @@ void usage()
" .frag for a fragment shader\n"
" .comp for a compute shader\n"
"\n"
- "Compilation warnings and errors will be printed to stdout.\n"
- "\n"
- "To get other information, use one of the following options:\n"
- "Each option must be specified separately.\n"
- " -V create SPIR-V binary, under Vulkan semantics; turns on -l;\n"
- " default file name is <stage>.spv (-o overrides this)\n"
- " -G create SPIR-V binary, under OpenGL semantics; turns on -l;\n"
- " default file name is <stage>.spv (-o overrides this)\n"
- " -H print human readable form of SPIR-V; turns on -V\n"
+ "Options:\n"
+ " -C cascading errors; risk crash from accumulation of error recoveries\n"
+ " -D input is HLSL\n"
+ " -D<macro=def>\n"
+ " -D<macro> define a pre-processor macro\n"
" -E print pre-processed GLSL; cannot be used with -l;\n"
" errors will appear on stderr.\n"
+ " -G[ver] create SPIR-V binary, under OpenGL semantics; turns on -l;\n"
+ " default file name is <stage>.spv (-o overrides this)\n"
+ " 'ver', when present, is the version of the input semantics,\n"
+ " which will appear in #define GL_SPIRV ver\n"
+ " '--client opengl100' is the same as -G100\n"
+ " a '--target-env' for OpenGL will also imply '-G'\n"
+ " -H print human readable form of SPIR-V; turns on -V\n"
+ " -I<dir> add dir to the include search path; includer's directory\n"
+ " is searched first, followed by left-to-right order of -I\n"
+ " -Od disables optimization. May cause illegal SPIR-V for HLSL.\n"
+ " -Os optimizes SPIR-V to minimize size.\n"
" -S <stage> uses specified stage rather than parsing the file extension\n"
- " valid choices for <stage> are vert, tesc, tese, geom, frag, or comp\n"
+ " choices for <stage> are vert, tesc, tese, geom, frag, or comp\n"
+ " -U<macro> undefine a pre-processor macro\n"
+ " -V[ver] create SPIR-V binary, under Vulkan semantics; turns on -l;\n"
+ " default file name is <stage>.spv (-o overrides this)\n"
+ " 'ver', when present, is the version of the input semantics,\n"
+ " which will appear in #define VULKAN ver\n"
+ " '--client vulkan100' is the same as -V100\n"
+ " a '--target-env' for Vulkan will also imply '-V'\n"
" -c configuration dump;\n"
" creates the default configuration file (redirect to a .conf file)\n"
- " -C cascading errors; risks crashes from accumulation of error recoveries\n"
" -d default to desktop (#version 110) when there is no shader #version\n"
" (default is ES version 100)\n"
- " -D input is HLSL\n"
- " -e specify entry-point name\n"
+ " -e <name> specify <name> as the entry-point name\n"
+ " -g generate debug information\n"
" -h print this usage message\n"
" -i intermediate tree (glslang AST) is printed out\n"
" -l link all input files together to form a single module\n"
" -m memory leak mode\n"
- " -o <file> save binary to <file>, requires a binary option (e.g., -V)\n"
+ " -o <file> save binary to <file>, requires a binary option (e.g., -V)\n"
" -q dump reflection query database\n"
- " -r relaxed semantic error-checking mode\n"
- " -s silent mode\n"
+ " -r synonym for --relaxed-errors\n"
+ " -s silence syntax and semantic error reporting\n"
" -t multi-threaded mode\n"
" -v print version strings\n"
- " -w suppress warnings (except as required by #extension : warn)\n"
- " -x save 32-bit hexadecimal numbers as text, requires a binary option (e.g., -V)\n"
- "\n"
- " --shift-sampler-binding [stage] num set base binding number for samplers\n"
- " --ssb [stage] num synonym for --shift-sampler-binding\n"
- "\n"
- " --shift-texture-binding [stage] num set base binding number for textures\n"
- " --stb [stage] num synonym for --shift-texture-binding\n"
- "\n"
- " --shift-image-binding [stage] num set base binding number for images (uav)\n"
- " --sib [stage] num synonym for --shift-image-binding\n"
- "\n"
- " --shift-UBO-binding [stage] num set base binding number for UBOs\n"
- " --sub [stage] num synonym for --shift-UBO-binding\n"
- "\n"
- " --shift-ssbo-binding [stage] num set base binding number for SSBOs\n"
- " --sbb [stage] num synonym for --shift-ssbo-binding\n"
- "\n"
- " --auto-map-bindings automatically bind uniform variables without\n"
- " explicit bindings.\n"
- " --amb synonym for --auto-map-bindings\n"
- "\n"
- " --flatten-uniform-arrays flatten uniform texture & sampler arrays to scalars\n"
- " --fua synonym for --flatten-uniform-arrays\n"
- "\n"
- " --no-storage-format use Unknown image format\n"
- " --nsf synonym for --no-storage-format\n"
- "\n"
- " --source-entrypoint name the given shader source function is renamed to be the entry point given in -e\n"
- " --sep synonym for --source-entrypoint\n"
- "\n"
- " --keep-uncalled don't eliminate uncalled functions when linking\n"
- " --ku synonym for --keep-uncalled\n"
- " --variable-name <name> Creates a C header file that contains a uint32_t array named <name> initialized with the shader binary code.\n"
- " --vn <name> synonym for --variable-name <name>.\n"
+ " -w synonym for --suppress-warnings\n"
+ " -x save binary output as text-based 32-bit hexadecimal numbers\n"
+ " --auto-map-bindings automatically bind uniform variables\n"
+ " without explicit bindings.\n"
+ " --amb synonym for --auto-map-bindings\n"
+ " --auto-map-locations automatically locate input/output lacking\n"
+ " 'location' (fragile, not cross stage)\n"
+ " --aml synonym for --auto-map-locations\n"
+ " --client {vulkan<ver>|opengl<ver>} see -V and -G\n"
+ " --flatten-uniform-arrays flatten uniform texture/sampler arrays to\n"
+ " scalars\n"
+ " --fua synonym for --flatten-uniform-arrays\n"
+ " --hlsl-offsets Allow block offsets to follow HLSL rules\n"
+ " Works independently of source language\n"
+ " --hlsl-iomap Perform IO mapping in HLSL register space\n"
+ " --keep-uncalled don't eliminate uncalled functions\n"
+ " --ku synonym for --keep-uncalled\n"
+ " --no-storage-format use Unknown image format\n"
+ " --nsf synonym for --no-storage-format\n"
+ " --relaxed-errors relaxed GLSL semantic error-checking mode\n"
+ " --resource-set-binding [stage] name set binding\n"
+ " Set descriptor set and binding for individual resources\n"
+ " --resource-set-binding [stage] set\n"
+ " Set descriptor set for all resources\n"
+ " --rsb [stage] type set binding synonym for --resource-set-binding\n"
+ " --shift-image-binding [stage] num base binding number for images (uav)\n"
+ " --shift-image-binding [stage] [num set]... per-descriptor-set shift values\n"
+ " --sib [stage] num synonym for --shift-image-binding\n"
+ " --shift-sampler-binding [stage] num base binding number for samplers\n"
+ " --shift-sampler-binding [stage] [num set]... per-descriptor-set shift values\n"
+ " --ssb [stage] num synonym for --shift-sampler-binding\n"
+ " --shift-ssbo-binding [stage] num base binding number for SSBOs\n"
+ " --shift-ssbo-binding [stage] [num set]... per-descriptor-set shift values\n"
+ " --sbb [stage] num synonym for --shift-ssbo-binding\n"
+ " --shift-texture-binding [stage] num base binding number for textures\n"
+ " --shift-texture-binding [stage] [num set]... per-descriptor-set shift values\n"
+ " --stb [stage] num synonym for --shift-texture-binding\n"
+ " --shift-uav-binding [stage] num base binding number for UAVs\n"
+ " --shift-uav-binding [stage] [num set]... per-descriptor-set shift values\n"
+ " --suavb [stage] num synonym for --shift-uav-binding\n"
+ " --shift-UBO-binding [stage] num base binding number for UBOs\n"
+ " --shift-UBO-binding [stage] [num set]... per-descriptor-set shift values\n"
+ " --shift-cbuffer-binding [stage] num synonym for --shift-UBO-binding\n"
+ " --shift-cbuffer-binding [stage] [num set]... per-descriptor-set shift values\n"
+ " --sub [stage] num synonym for --shift-UBO-binding\n"
+ " --source-entrypoint <name> the given shader source function is\n"
+ " renamed to be the <name> given in -e\n"
+ " --sep synonym for --source-entrypoint\n"
+ " --stdin Read from stdin instead of from a file.\n"
+ " You'll have to provide the shader stage\n"
+ " using -S.\n"
+ " --suppress-warnings suppress GLSL warnings\n"
+ " (except as required by #extension : warn)\n"
+ " --target-env {vulkan1.0|opengl} set the execution environment code will\n"
+ " execute in (as opposed to language\n"
+ " semantics selected by --client) defaults:\n"
+ " 'vulkan1.0' under '--client vulkan<ver>'\n"
+ " 'opengl' under '--client opengl<ver>'\n"
+ " --variable-name <name> Creates a C header file that contains a\n"
+ " uint32_t array named <name>\n"
+ " initialized with the shader binary code.\n"
+ " --vn <name> synonym for --variable-name <name>\n"
);
exit(EFailUsage);
@@ -1049,76 +1396,33 @@ int fopen_s(
//
// Malloc a string of sufficient size and read a string into it.
//
-char** ReadFileData(const char* fileName)
+char* ReadFileData(const char* fileName)
{
FILE *in = nullptr;
int errorCode = fopen_s(&in, fileName, "r");
-
- int count = 0;
- const int maxSourceStrings = 5; // for testing splitting shader/tokens across multiple strings
- char** return_data = (char**)malloc(sizeof(char *) * (maxSourceStrings+1)); // freed in FreeFileData()
-
if (errorCode || in == nullptr)
Error("unable to open input file");
+ int count = 0;
while (fgetc(in) != EOF)
count++;
fseek(in, 0, SEEK_SET);
- char *fdata = (char*)malloc(count+2); // freed before return of this function
- if (! fdata)
- Error("can't allocate memory");
-
- if ((int)fread(fdata, 1, count, in) != count) {
- free(fdata);
+ char* return_data = (char*)malloc(count + 1); // freed in FreeFileData()
+ if ((int)fread(return_data, 1, count, in) != count) {
+ free(return_data);
Error("can't read input file");
}
- fdata[count] = '\0';
+ return_data[count] = '\0';
fclose(in);
- if (count == 0) {
- // recover from empty file
- return_data[0] = (char*)malloc(count+2); // freed in FreeFileData()
- return_data[0][0]='\0';
- NumShaderStrings = 0;
- free(fdata);
-
- return return_data;
- } else
- NumShaderStrings = 1; // Set to larger than 1 for testing multiple strings
-
- // compute how to split up the file into multiple strings, for testing multiple strings
- int len = (int)(ceil)((float)count/(float)NumShaderStrings);
- int ptr_len = 0;
- int i = 0;
- while (count > 0) {
- return_data[i] = (char*)malloc(len + 2); // freed in FreeFileData()
- memcpy(return_data[i], fdata + ptr_len, len);
- return_data[i][len] = '\0';
- count -= len;
- ptr_len += len;
- if (count < len) {
- if (count == 0) {
- NumShaderStrings = i + 1;
- break;
- }
- len = count;
- }
- ++i;
- }
-
- free(fdata);
-
return return_data;
}
-void FreeFileData(char** data)
+void FreeFileData(char* data)
{
- for(int i = 0; i < NumShaderStrings; i++)
- free(data[i]);
-
free(data);
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/Worklist.h b/3rdparty/bgfx/3rdparty/glslang/StandAlone/Worklist.h
index 2a14294e838..91b6f516be0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/StandAlone/Worklist.h
+++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/Worklist.h
@@ -36,8 +36,9 @@
#define WORKLIST_H_INCLUDED
#include "../glslang/OSDependent/osinclude.h"
-#include <string>
#include <list>
+#include <mutex>
+#include <string>
namespace glslang {
@@ -58,24 +59,19 @@ namespace glslang {
void add(TWorkItem* item)
{
- GetGlobalLock();
-
+ std::lock_guard<std::mutex> guard(mutex);
worklist.push_back(item);
-
- ReleaseGlobalLock();
}
bool remove(TWorkItem*& item)
{
- GetGlobalLock();
+ std::lock_guard<std::mutex> guard(mutex);
if (worklist.empty())
return false;
item = worklist.front();
worklist.pop_front();
- ReleaseGlobalLock();
-
return true;
}
@@ -90,6 +86,7 @@ namespace glslang {
}
protected:
+ std::mutex mutex;
std::list<TWorkItem*> worklist;
};
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/100samplerExternal.frag b/3rdparty/bgfx/3rdparty/glslang/Test/100samplerExternal.frag
new file mode 100644
index 00000000000..9f6f397e0dd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/100samplerExternal.frag
@@ -0,0 +1,41 @@
+#version 100
+
+#extension GL_OES_EGL_image_external : enable
+
+uniform samplerExternalOES sExt;
+precision mediump samplerExternalOES;
+uniform samplerExternalOES mediumExt;
+uniform highp samplerExternalOES highExt;
+
+void main()
+{
+ texture2D(sExt, vec2(0.2));
+ texture2D(mediumExt, vec2(0.2));
+ texture2D(highExt, vec2(0.2));
+ texture2DProj(sExt, vec3(0.3));
+ texture2DProj(sExt, vec4(0.3));
+
+ int lod = 0;
+ highp float bias = 0.01;
+ textureSize(sExt, lod); // ERROR
+ texture(sExt, vec2(0.2)); // ERROR
+ texture(sExt, vec2(0.2), bias); // ERROR
+ textureProj(sExt, vec3(0.2)); // ERROR
+ textureProj(sExt, vec3(0.2), bias); // ERROR
+ textureProj(sExt, vec4(0.2)); // ERROR
+ textureProj(sExt, vec4(0.2), bias); // ERROR
+ texelFetch(sExt, ivec2(4), lod); // ERROR
+
+ texture3D(sExt, vec3(0.3)); // ERROR
+ texture2DProjLod(sExt, vec3(0.3), 0.3); // ERROR
+ texture(sExt, vec3(0.3)); // ERROR
+ textureProjLod(sExt, vec3(0.3), 0.3); // ERROR
+}
+
+#extension GL_OES_EGL_image_external : disable
+
+#extension GL_OES_EGL_image_external_essl3 : enable
+uniform samplerExternalOES badExt; // ERROR
+#extension GL_OES_EGL_image_external_essl3 : disable
+
+uniform samplerExternalOES badExt; // ERROR
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300.vert b/3rdparty/bgfx/3rdparty/glslang/Test/300.vert
index 83b9bb112aa..daf98b836f6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/300.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/300.vert
@@ -184,4 +184,21 @@ void fooDeeparray()
yp = y;
xp = y; // ERROR, wrong size
yp = x; // ERROR, wrong size
+}
+
+layout(num_views = 2) in; // ERROR, no extension
+
+void mwErr()
+{
+ gl_ViewID_OVR; // ERROR, no extension
+}
+
+#extension GL_OVR_multiview : enable
+
+layout(num_views = 2) uniform float mwUniform; // ERROR, must be global
+layout(num_views = 2) in; // OK
+
+void mwOk()
+{
+ gl_ViewID_OVR;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300samplerExternal.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300samplerExternal.frag
new file mode 100644
index 00000000000..3724f8e0a14
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/300samplerExternal.frag
@@ -0,0 +1,41 @@
+#version 300 es
+
+#extension GL_OES_EGL_image_external_essl3 : enable
+
+uniform samplerExternalOES sExt;
+precision mediump samplerExternalOES;
+uniform samplerExternalOES mediumExt;
+uniform highp samplerExternalOES highExt;
+
+void main()
+{
+ texture2D(sExt, vec2(0.2)); // ERROR
+ texture2D(mediumExt, vec2(0.2)); // ERROR
+ texture2D(highExt, vec2(0.2)); // ERROR
+ texture2DProj(sExt, vec3(0.3)); // ERROR
+ texture2DProj(sExt, vec4(0.3)); // ERROR
+
+ int lod = 0;
+ highp float bias = 0.01;
+ textureSize(sExt, lod);
+ texture(sExt, vec2(0.2));
+ texture(sExt, vec2(0.2), bias);
+ textureProj(sExt, vec3(0.2));
+ textureProj(sExt, vec3(0.2), bias);
+ textureProj(sExt, vec4(0.2));
+ textureProj(sExt, vec4(0.2), bias);
+ texelFetch(sExt, ivec2(4), lod);
+
+ texture3D(sExt, vec3(0.3)); // ERROR
+ texture2DProjLod(sExt, vec3(0.3), 0.3); // ERROR
+ texture(sExt, vec3(0.3)); // ERROR
+ textureProjLod(sExt, vec3(0.3), 0.3); // ERROR
+}
+
+#extension GL_OES_EGL_image_external_essl3 : disable
+
+#extension GL_OES_EGL_image_external : enable
+uniform samplerExternalOES badExt; // ERROR
+#extension GL_OES_EGL_image_external : disable
+
+uniform samplerExternalOES badExt; // ERROR
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.comp b/3rdparty/bgfx/3rdparty/glslang/Test/310.comp
index 9575b6f9db3..9ca8eaaa104 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/310.comp
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.comp
@@ -4,7 +4,7 @@ layout(local_size_x = 2) in;
layout(local_size_x = 16) in; // ERROR, changing
layout(local_size_z = 4096) in; // ERROR, too large
layout(local_size_x = 2) in;
-
+layout(local_size_y = 0) in; // ERROR, 0 not allowed
const int total = gl_MaxComputeWorkGroupCount.y
+ gl_MaxComputeUniformComponents
+ gl_MaxComputeTextureImageUnits
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/320.comp b/3rdparty/bgfx/3rdparty/glslang/Test/320.comp
new file mode 100644
index 00000000000..c31b047f5b0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/320.comp
@@ -0,0 +1,5 @@
+#version 320 es
+
+void main()
+{
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/320.frag b/3rdparty/bgfx/3rdparty/glslang/Test/320.frag
new file mode 100644
index 00000000000..bed3f120397
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/320.frag
@@ -0,0 +1,225 @@
+#version 320 es
+
+out outbname { int a; } outbinst; // ERROR, not out block in fragment shader
+
+in inbname {
+ int a;
+ vec4 v;
+ struct { int b; } s; // ERROR, nested struct definition
+} inbinst;
+
+in inbname2 {
+ layout(location = 12) int aAnon;
+ layout(location = 13) centroid in vec4 vAnon;
+};
+
+in layout(location = 13) vec4 aliased; // ERROR, aliased
+
+in inbname2 { // ERROR, reuse of block name
+ int aAnon;
+ centroid in vec4 vAnon;
+};
+
+in badmember { // ERROR, aAnon already in global scope
+ int aAnon;
+};
+
+int inbname; // ERROR, redefinition of block name
+
+vec4 vAnon; // ERROR, anon in global scope; redefinition
+
+in arrayed {
+ float f;
+} arrayedInst[4];
+uniform int i;
+void fooIO()
+{
+ vec4 v = inbinst.v + vAnon;
+ v *= arrayedInst[2].f;
+ v *= arrayedInst[i].f;
+}
+
+in vec4 gl_FragCoord;
+layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; // ERROR, non-ES
+
+layout(early_fragment_tests) in;
+out float gl_FragDepth;
+layout(depth_any) out float gl_FragDepth; // ERROR, non-ES
+
+void main()
+{
+ gl_FragDepth = 0.2; // ERROR, early_fragment_tests declared
+ bool f = gl_FrontFacing;
+}
+
+out float gl_FragDepth;
+
+void foo_GS()
+{
+ highp int l = gl_Layer;
+ highp int p = gl_PrimitiveID;
+}
+
+in vec2 inf, ing;
+uniform ivec2 offsets[4];
+uniform sampler2D sArray[4];
+uniform int sIndex;
+layout(binding = 0) uniform atomic_uint auArray[2];
+uniform ubName { int i; } ubInst[4];
+buffer bbName { int i; } bbInst[4];
+highp uniform writeonly image2D iArray[5];
+const ivec2 constOffsets[4] = ivec2[4](ivec2(0.1), ivec2(0.2), ivec2(0.3), ivec2(0.4));
+
+void pfoo()
+{
+ precise vec2 h;
+ h = fma(inf, ing, h);
+ textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf));
+ textureGatherOffsets(sArray[0], vec2(0.1), constOffsets);
+ textureGatherOffsets(sArray[0], vec2(0.1), offsets); // ERROR, offset not constant
+}
+
+precision highp imageCubeArray ;
+precision highp iimageCubeArray ;
+precision highp uimageCubeArray ;
+
+precision highp samplerCubeArray ;
+precision highp samplerCubeArrayShadow;
+precision highp isamplerCubeArray ;
+precision highp usamplerCubeArray ;
+
+uniform writeonly imageCubeArray CA1;
+uniform writeonly iimageCubeArray CA2;
+uniform writeonly uimageCubeArray CA3;
+
+#ifdef GL_EXT_texture_cube_map_array
+uniform samplerCubeArray CA4;
+uniform samplerCubeArrayShadow CA5;
+uniform isamplerCubeArray CA6;
+uniform usamplerCubeArray CA7;
+#endif
+
+void CAT()
+{
+ highp vec4 b4 = texture(CA4, vec4(0.5), 0.24);
+ highp ivec4 b6 = texture(CA6, vec4(0.5), 0.26);
+ highp uvec4 b7 = texture(CA7, vec4(0.5), 0.27);
+}
+
+void goodSample()
+{
+ lowp int a1 = gl_SampleID;
+ mediump vec2 a2 = gl_SamplePosition;
+ highp int a3 = gl_SampleMaskIn[0];
+ gl_SampleMask[0] = a3;
+ mediump int n1 = gl_MaxSamples;
+ mediump int n2 = gl_NumSamples;
+}
+
+uniform layout(r32f) highp image2D im2Df;
+uniform layout(r32ui) highp uimage2D im2Du;
+uniform layout(r32i) highp iimage2D im2Di;
+uniform ivec2 P;
+
+uniform layout(rgba32f) highp image2D badIm2Df; // ERROR, needs readonly or writeonly
+uniform layout(rgba8ui) highp uimage2D badIm2Du; // ERROR, needs readonly or writeonly
+uniform layout(rgba16i) highp iimage2D badIm2Di; // ERROR, needs readonly or writeonly
+
+void goodImageAtom()
+{
+ float datf;
+ int dati;
+ uint datu;
+
+ imageAtomicAdd( im2Di, P, dati);
+ imageAtomicAdd( im2Du, P, datu);
+ imageAtomicMin( im2Di, P, dati);
+ imageAtomicMin( im2Du, P, datu);
+ imageAtomicMax( im2Di, P, dati);
+ imageAtomicMax( im2Du, P, datu);
+ imageAtomicAnd( im2Di, P, dati);
+ imageAtomicAnd( im2Du, P, datu);
+ imageAtomicOr( im2Di, P, dati);
+ imageAtomicOr( im2Du, P, datu);
+ imageAtomicXor( im2Di, P, dati);
+ imageAtomicXor( im2Du, P, datu);
+ imageAtomicExchange(im2Di, P, dati);
+ imageAtomicExchange(im2Du, P, datu);
+ imageAtomicExchange(im2Df, P, datf);
+ imageAtomicCompSwap(im2Di, P, 3, dati);
+ imageAtomicCompSwap(im2Du, P, 5u, datu);
+
+ imageAtomicMax(badIm2Di, P, dati); // ERROR, not an allowed layout() on the image
+ imageAtomicMax(badIm2Du, P, datu); // ERROR, not an allowed layout() on the image
+ imageAtomicExchange(badIm2Df, P, datf); // ERROR, not an allowed layout() on the image
+}
+
+centroid out vec4 colorCentroidBad; // ERROR
+flat out vec4 colorBadFlat; // ERROR
+smooth out vec4 colorBadSmooth; // ERROR
+noperspective out vec4 colorBadNo; // ERROR
+flat centroid in vec2 colorfc;
+in float scalarIn;
+
+sample in vec4 colorSampIn;
+sample out vec4 colorSampleBad; // ERROR
+flat sample in vec4 colorfsi;
+sample in vec3 sampInArray[4];
+
+void interp()
+{
+ float res;
+ vec2 res2;
+ vec3 res3;
+ vec4 res4;
+
+ res2 = interpolateAtCentroid(colorfc);
+ res4 = interpolateAtCentroid(colorSampIn);
+ res4 = interpolateAtCentroid(colorfsi);
+ res = interpolateAtCentroid(scalarIn);
+ res3 = interpolateAtCentroid(sampInArray); // ERROR
+ res3 = interpolateAtCentroid(sampInArray[2]);
+ res2 = interpolateAtCentroid(sampInArray[2].xy); // ERROR
+
+ res3 = interpolateAtSample(sampInArray, 1); // ERROR
+ res3 = interpolateAtSample(sampInArray[i], 0);
+ res2 = interpolateAtSample(sampInArray[2].xy, 2); // ERROR
+ res = interpolateAtSample(scalarIn, 1);
+
+ res3 = interpolateAtOffset(sampInArray, vec2(0.2)); // ERROR
+ res3 = interpolateAtOffset(sampInArray[2], vec2(0.2));
+ res2 = interpolateAtOffset(sampInArray[2].xy, vec2(0.2)); // ERROR, no swizzle
+ res = interpolateAtOffset(scalarIn + scalarIn, vec2(0.2)); // ERROR, no binary ops other than dereference
+ res = interpolateAtOffset(scalarIn, vec2(0.2));
+
+ float f;
+ res = interpolateAtCentroid(f); // ERROR, not interpolant
+ res4 = interpolateAtSample(outp, 0); // ERROR, not interpolant
+}
+
+layout(blend_support_multiply) out;
+layout(blend_support_screen) out;
+layout(blend_support_overlay) out;
+layout(blend_support_darken, blend_support_lighten) out;
+layout(blend_support_colordodge) layout(blend_support_colorburn) out;
+layout(blend_support_hardlight) out;
+layout(blend_support_softlight) out;
+layout(blend_support_difference) out;
+layout(blend_support_exclusion) out;
+layout(blend_support_hsl_hue) out;
+layout(blend_support_hsl_saturation) out;
+layout(blend_support_hsl_color) out;
+layout(blend_support_hsl_luminosity) out;
+layout(blend_support_all_equations) out;
+
+layout(blend_support_hsl_luminosity) out; // okay to repeat
+
+layout(blend_support_hsl_luminosity) in; // ERROR, only on "out"
+layout(blend_support_hsl_luminosity) out vec4; // ERROR, only on standalone
+layout(blend_support_hsl_luminosity) out vec4 badout; // ERROR, only on standalone
+layout(blend_support_hsl_luminosity) struct badS {int i;}; // ERROR, only on standalone
+layout(blend_support_hsl_luminosity) void blendFoo() { } // ERROR, only on standalone
+void blendFoo(layout(blend_support_hsl_luminosity) vec3 v) { } // ERROR, only on standalone
+layout(blend_support_flizbit) out; // ERROR, no flizbit
+
+out vec4 outAA[2][2]; // ERROR
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/320.geom b/3rdparty/bgfx/3rdparty/glslang/Test/320.geom
new file mode 100644
index 00000000000..38d71c31421
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/320.geom
@@ -0,0 +1,134 @@
+#version 320 es
+
+precision mediump float;
+
+in fromVertex {
+ in vec3 color;
+} fromV[];
+
+in vec4 nonBlockUnsized[];
+
+out toFragment {
+ out vec3 color;
+} toF;
+
+out fromVertex { // okay to reuse a block name for another block name
+ vec3 color;
+};
+
+out fooB { // ERROR, cannot reuse block name as block instance
+ vec2 color;
+} fromVertex;
+
+int fromVertex; // ERROR, cannot reuse a block name for something else
+
+out fooC { // ERROR, cannot have same name for block and instance name
+ vec2 color;
+} fooC;
+
+void main()
+{
+ EmitVertex();
+ EndPrimitive();
+ EmitStreamVertex(1); // ERROR
+ EndStreamPrimitive(0); // ERROR
+
+ color = fromV[0].color;
+ gl_ClipDistance[3] = // ERROR, no ClipDistance
+ gl_in[1].gl_ClipDistance[2]; // ERROR, no ClipDistance
+ gl_Position = gl_in[0].gl_Position;
+
+ gl_PrimitiveID = gl_PrimitiveIDIn;
+ gl_Layer = 2;
+}
+
+layout(stream = 4) out vec4 ov4; // ERROR, no streams
+
+layout(line_strip, points, triangle_strip, points, triangle_strip) out; // just means triangle_strip"
+
+out ooutb { vec4 a; } ouuaa6;
+
+layout(max_vertices = 200) out;
+layout(max_vertices = 300) out; // ERROR, too big
+void foo(layout(max_vertices = 4) int a) // ERROR
+{
+ ouuaa6.a = vec4(1.0);
+}
+
+layout(line_strip, points, triangle_strip, points) out; // ERROR, changing output primitive
+layout(line_strip, points) out; // ERROR, changing output primitive
+layout(triangle_strip) in; // ERROR, not an input primitive
+layout(triangle_strip) uniform; // ERROR
+layout(triangle_strip) out vec4 badv4; // ERROR, not on a variable
+layout(triangle_strip) in vec4 bad2v4[]; // ERROR, not on a variable or input
+layout(invocations = 3) out outbn { int a; }; // 2 ERROR, not on a block, not until 4.0
+out outbn2 {
+ layout(invocations = 3) int a; // 2 ERRORs, not on a block member, not until 4.0
+ layout(max_vertices = 3) int b; // ERROR, not on a block member
+ layout(triangle_strip) int c; // ERROR, not on a block member
+} outbi;
+
+layout(lines) out; // ERROR, not on output
+layout(lines_adjacency) in;
+layout(triangles) in; // ERROR, can't change it
+layout(triangles_adjacency) in; // ERROR, can't change it
+layout(invocations = 4) in;
+
+in sameName {
+ int a15;
+} insn[];
+
+out sameName {
+ float f15;
+};
+
+uniform sameName {
+ bool b15;
+};
+
+const int summ = gl_MaxVertexAttribs +
+ gl_MaxGeometryInputComponents +
+ gl_MaxGeometryOutputComponents +
+ gl_MaxGeometryImageUniforms +
+ gl_MaxGeometryTextureImageUnits +
+ gl_MaxGeometryOutputVertices +
+ gl_MaxGeometryTotalOutputComponents +
+ gl_MaxGeometryUniformComponents +
+ gl_MaxGeometryAtomicCounters +
+ gl_MaxGeometryAtomicCounterBuffers +
+ gl_MaxVertexTextureImageUnits +
+ gl_MaxCombinedTextureImageUnits +
+ gl_MaxTextureImageUnits +
+ gl_MaxDrawBuffers;
+
+void fooe1()
+{
+ gl_ViewportIndex; // ERROR, not in ES
+ gl_MaxViewports; // ERROR, not in ES
+ insn.length(); // 4: lines_adjacency
+ int inv = gl_InvocationID;
+}
+
+in vec4 explArray[4];
+in vec4 explArrayBad[5]; // ERROR, wrong size
+in vec4 nonArrayed; // ERROR, not an array
+flat out vec3 myColor1;
+centroid out vec3 myColor2;
+centroid in vec3 centr[];
+sample out vec4 perSampleColor; // ERROR without sample extensions
+
+layout(max_vertices = 200) out; // matching redecl
+
+layout(location = 7, component = 2) in float comp[]; // ERROR, es has no component
+
+void notHere()
+{
+ gl_MaxGeometryVaryingComponents; // ERROR, not in ES
+ gl_VerticesIn; // ERROR, not in ES
+}
+
+void pointSize2()
+{
+ highp float ps = gl_in[3].gl_PointSize; // ERROR, need extension
+ gl_PointSize = ps; // ERROR, need extension
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/320.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/320.tesc
new file mode 100644
index 00000000000..4fa20f63844
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/320.tesc
@@ -0,0 +1,150 @@
+#version 320 es
+
+layout(vertices = 4) out;
+out int outa[gl_out.length()];
+
+layout(quads) in; // ERROR
+layout(ccw) out; // ERROR
+layout(fractional_even_spacing) in; // ERROR
+
+patch in vec4 patchIn; // ERROR
+patch out vec4 patchOut;
+
+void main()
+{
+ barrier();
+
+ int a = gl_MaxTessControlInputComponents +
+ gl_MaxTessControlOutputComponents +
+ gl_MaxTessControlTextureImageUnits +
+ gl_MaxTessControlUniformComponents +
+ gl_MaxTessControlTotalOutputComponents;
+
+ vec4 p = gl_in[1].gl_Position;
+ float ps = gl_in[1].gl_PointSize; // ERROR, need point_size extension
+ float cd = gl_in[1].gl_ClipDistance[2]; // ERROR, not in ES
+
+ int pvi = gl_PatchVerticesIn;
+ int pid = gl_PrimitiveID;
+ int iid = gl_InvocationID;
+
+ gl_out[gl_InvocationID].gl_Position = p;
+ gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR, need point_size extension
+ gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; // ERROR, not in ES
+
+ gl_TessLevelOuter[3] = 3.2;
+ gl_TessLevelInner[1] = 1.3;
+
+ if (a > 10)
+ barrier(); // ERROR
+ else
+ barrier(); // ERROR
+
+ barrier();
+
+ do {
+ barrier(); // ERROR
+ } while (a > 10);
+
+ switch (a) {
+ default:
+ barrier(); // ERROR
+ break;
+ }
+ a < 12 ? a : (barrier(), a); // ERROR
+ {
+ barrier();
+ }
+
+ return;
+
+ barrier(); // ERROR
+}
+
+layout(vertices = 4) in; // ERROR, not on in
+layout(vertices = 5) out; // ERROR, changing #
+
+void foo()
+{
+ gl_out[4].gl_Position; // ERROR, out of range
+
+ barrier(); // ERROR, not in main
+}
+
+in vec2 ina; // ERROR, not array
+in vec2 inb[];
+in vec2 inc[18]; // ERROR, wrong size
+in vec2 ind[gl_MaxPatchVertices];
+patch out float implA[]; // ERROR, not sized
+
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(location = 3) in vec4 ivla[];
+layout(location = 4) in vec4 ivlb[];
+layout(location = 4) in vec4 ivlc[]; // ERROR, overlapping
+
+layout(location = 3) out vec4 ovla[];
+layout(location = 4) out vec4 ovlb[];
+layout(location = 4) out vec4 ovlc[]; // ERROR, overlapping
+
+patch out pinbn {
+ int a;
+} pinbi;
+
+centroid out vec3 myColor2[];
+centroid in vec3 centr[];
+sample out vec4 perSampleColor[];
+
+layout(vertices = 4) out float badlay[]; // ERROR, not on a variable
+out float misSized[5]; // ERROR, size doesn't match
+out float okaySize[4];
+
+void pointSize2()
+{
+ float ps = gl_in[1].gl_PointSize; // ERROR, need point_size extension
+ gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR, need point_size extension
+}
+
+precise vec3 pv3;
+
+void goodfoop()
+{
+ precise float d;
+
+ pv3 *= pv3;
+ pv3 = fma(pv3, pv3, pv3);
+ d = fma(d, d, d);
+}
+
+void bb()
+{
+ gl_BoundingBoxOES[0] = vec4(0.0);
+ gl_BoundingBoxOES[1] = vec4(1.0);
+ gl_BoundingBoxOES[2] = vec4(2.0); // ERROR, overflow
+}
+
+out patch badpatchBName { // ERROR, array size required
+ float f;
+} badpatchIName[];
+
+out patch patchBName {
+ float f;
+} patchIName[4];
+
+void outputtingOutparam(out int a)
+{
+ a = 2;
+}
+
+void outputting()
+{
+ outa[gl_InvocationID] = 2;
+ outa[1] = 2; // ERROR, not gl_InvocationID
+ gl_out[0].gl_Position = vec4(1.0); // ERROR, not gl_InvocationID
+ outa[1];
+ gl_out[0];
+ outputtingOutparam(outa[0]); // ERROR, not gl_InvocationID
+ outputtingOutparam(outa[gl_InvocationID]);
+ patchIName[1].f = 3.14;
+ outa[(gl_InvocationID)] = 2;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/320.tese b/3rdparty/bgfx/3rdparty/glslang/Test/320.tese
new file mode 100644
index 00000000000..b1507d9f907
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/320.tese
@@ -0,0 +1,114 @@
+#version 320 es
+
+layout(vertices = 4) out; // ERROR
+layout(quads, cw) in;
+layout(triangles) in; // ERROR
+layout(isolines) in; // ERROR
+
+layout(ccw) in; // ERROR
+layout(cw) in;
+
+layout(fractional_odd_spacing) in;
+layout(equal_spacing) in; // ERROR
+layout(fractional_even_spacing) in; // ERROR
+
+layout(point_mode) in;
+
+patch in vec4 patchIn;
+patch out vec4 patchOut; // ERROR
+
+void main()
+{
+ barrier(); // ERROR
+
+ int a = gl_MaxTessEvaluationInputComponents +
+ gl_MaxTessEvaluationOutputComponents +
+ gl_MaxTessEvaluationTextureImageUnits +
+ gl_MaxTessEvaluationUniformComponents +
+ gl_MaxTessPatchComponents +
+ gl_MaxPatchVertices +
+ gl_MaxTessGenLevel;
+
+ vec4 p = gl_in[1].gl_Position;
+ float ps = gl_in[1].gl_PointSize; // ERROR, need point_size extension
+ float cd = gl_in[1].gl_ClipDistance[2]; // ERROR, not in ES
+
+ int pvi = gl_PatchVerticesIn;
+ int pid = gl_PrimitiveID;
+ vec3 tc = gl_TessCoord;
+ float tlo = gl_TessLevelOuter[3];
+ float tli = gl_TessLevelInner[1];
+
+ gl_Position = p;
+ gl_PointSize = ps; // ERROR, need point_size extension
+ gl_ClipDistance[2] = cd; // ERROR, not in ES
+}
+
+smooth patch in vec4 badp1; // ERROR
+flat patch in vec4 badp2; // ERROR
+noperspective patch in vec4 badp3; // ERROR
+patch sample in vec3 badp4; // ERROR
+
+#extension GL_ARB_separate_shader_objects : enable
+
+in gl_PerVertex // ERROR, no size
+{
+ vec4 gl_Position;
+} gl_in[];
+
+in gl_PerVertex // ERROR, second redeclaration of gl_in
+{
+ vec4 gl_Position;
+} gl_in[];
+
+layout(quads, cw) out; // ERROR
+layout(triangles) out; // ERROR
+layout(isolines) out; // ERROR
+layout(cw) out; // ERROR
+layout(fractional_odd_spacing) out; // ERROR
+layout(equal_spacing) out; // ERROR
+layout(fractional_even_spacing) out; // ERROR
+layout(point_mode) out; // ERROR
+
+in vec2 ina; // ERROR, not array
+in vec2 inb[];
+in vec2 inc[18]; // ERROR, wrong size
+in vec2 ind[gl_MaxPatchVertices];
+
+in testbla { // ERROR, not array
+ int f;
+} bla;
+
+in testblb {
+ int f;
+} blb[];
+
+in testblc { // ERROR wrong size
+ int f;
+} blc[18];
+
+in testbld {
+ int f;
+} bld[gl_MaxPatchVertices];
+
+layout(location = 23) in vec4 ivla[];
+layout(location = 24) in vec4 ivlb[];
+layout(location = 24) in vec4 ivlc[]; // ERROR, overlap
+
+layout(location = 23) out vec4 ovla[2];
+layout(location = 24) out vec4 ovlb[2]; // ERROR, overlap
+
+in float gl_TessLevelOuter[4]; // ERROR, can't redeclare
+
+patch in pinbn {
+ int a;
+} pinbi;
+
+centroid out vec3 myColor2;
+centroid in vec3 centr[];
+sample out vec4 perSampleColor;
+
+void bbbad()
+{
+ gl_BoundingBoxOES; // ERROR, wrong stage
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/320.vert b/3rdparty/bgfx/3rdparty/glslang/Test/320.vert
new file mode 100644
index 00000000000..42f1515ccfd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/320.vert
@@ -0,0 +1,255 @@
+#version 320 es
+
+out outbname {
+ int a;
+ out vec4 v;
+ highp sampler2D s; // ERROR, opaque type
+} outbinst;
+
+out outbname2 {
+ layout(location = 12) int aAnon;
+ layout(location = 13) vec4 vAnon;
+};
+
+layout(location = 12) out highp int aliased; // ERROR, aliasing location
+
+in inbname { int a; } inbinst; // ERROR, no in block in vertex shader
+
+out gl_PerVertex { // ERROR, has extra member
+ highp vec4 gl_Position;
+ highp vec4 t;
+};
+
+void main()
+{
+ int sum = gl_VertexID +
+ gl_InstanceID;
+ gl_Position = vec4(1.0);
+ gl_PointSize = 2.0; // ERROR, removed by redeclaration
+}
+
+out gl_PerVertex { // ERROR, already used and already redeclared
+ highp vec4 gl_Position;
+ highp vec4 t;
+};
+
+smooth out smo { // ERROR, no smooth on a block
+ int i;
+} smon;
+
+flat out fmo { // ERROR, no flat on a block
+ int i;
+} fmon;
+
+centroid out cmo { // ERROR, no centroid on a block
+ int i;
+} cmon;
+
+invariant out imo { // ERROR, no invariant on a block
+ int i;
+} imon;
+
+in vec2 inf, ing;
+uniform ivec2 offsets[4];
+uniform sampler2D sArray[4];
+uniform int sIndex;
+layout(binding = 0) uniform atomic_uint auArray[2];
+uniform ubName { int i; } ubInst[4];
+buffer bbName { int i; } bbInst[4];
+highp uniform writeonly image2D iArray[5];
+const ivec2 constOffsets[4] = ivec2[4](ivec2(0.1), ivec2(0.2), ivec2(0.3), ivec2(0.4));
+
+void pfoo()
+{
+ precise vec2 h;
+ h = fma(inf, ing, h);
+ sArray[sIndex + 1];
+ ubInst[sIndex + 1];
+ bbInst[sIndex - 2]; // ERROR, still not supported
+ iArray[2];
+ iArray[sIndex - 2];
+ textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf));
+ textureGatherOffsets(sArray[0], vec2(0.1), constOffsets);
+ textureGatherOffsets(sArray[0], vec2(0.1), offsets); // ERROR, offset not constant
+}
+
+uniform samplerBuffer noPreSamp1; // ERROR, no default precision
+uniform isamplerBuffer noPreSamp2; // ERROR, no default precision
+uniform usamplerBuffer noPreSamp3; // ERROR, no default precision
+uniform writeonly imageBuffer noPreSamp4; // ERROR, no default precision
+uniform writeonly iimageBuffer noPreSamp5; // ERROR, no default precision
+uniform writeonly uimageBuffer noPreSamp6; // ERROR, no default precision
+
+precision highp samplerBuffer;
+precision highp isamplerBuffer;
+precision highp usamplerBuffer;
+precision highp imageBuffer;
+precision highp iimageBuffer;
+precision highp uimageBuffer;
+
+#ifdef GL_OES_texture_buffer
+uniform samplerBuffer bufSamp1;
+uniform isamplerBuffer bufSamp2;
+uniform usamplerBuffer bufSamp3;
+#endif
+#ifdef GL_EXT_texture_buffer
+uniform writeonly imageBuffer bufSamp4;
+uniform writeonly iimageBuffer bufSamp5;
+uniform writeonly uimageBuffer bufSamp6;
+#endif
+
+void bufferT()
+{
+ highp int s1 = textureSize(bufSamp1);
+ highp int s2 = textureSize(bufSamp2);
+ highp int s3 = textureSize(bufSamp3);
+
+ highp int s4 = imageSize(bufSamp4);
+ highp int s5 = imageSize(bufSamp5);
+ highp int s6 = imageSize(bufSamp6);
+
+ highp vec4 f1 = texelFetch(bufSamp1, s1);
+ highp ivec4 f2 = texelFetch(bufSamp2, s2);
+ highp uvec4 f3 = texelFetch(bufSamp3, s3);
+}
+
+uniform writeonly imageCubeArray noPreCA1; // ERROR, no default precision
+uniform writeonly iimageCubeArray noPreCA2; // ERROR, no default precision
+uniform writeonly uimageCubeArray noPreCA3; // ERROR, no default precision
+
+uniform samplerCubeArray noPreCA4; // ERROR, no default precision
+uniform samplerCubeArrayShadow noPreCA5; // ERROR, no default precision
+uniform isamplerCubeArray noPreCA6; // ERROR, no default precision
+uniform usamplerCubeArray noPreCA7; // ERROR, no default precision
+
+precision highp imageCubeArray ;
+precision highp iimageCubeArray ;
+precision highp uimageCubeArray ;
+
+precision highp samplerCubeArray ;
+precision highp samplerCubeArrayShadow;
+precision highp isamplerCubeArray ;
+precision highp usamplerCubeArray ;
+
+uniform writeonly imageCubeArray CA1;
+uniform writeonly iimageCubeArray CA2;
+uniform writeonly uimageCubeArray CA3;
+
+layout(rgba16f) uniform readonly imageCubeArray rCA1;
+layout(rgba32i) uniform readonly iimageCubeArray rCA2;
+layout(r32ui) uniform readonly uimageCubeArray rCA3;
+
+#ifdef GL_OES_texture_cube_map_array
+uniform samplerCubeArray CA4;
+uniform samplerCubeArrayShadow CA5;
+uniform isamplerCubeArray CA6;
+uniform usamplerCubeArray CA7;
+#endif
+
+void CAT()
+{
+ highp ivec3 s4 = textureSize(CA4, 1);
+ highp ivec3 s5 = textureSize(CA5, 1);
+ highp ivec3 s6 = textureSize(CA6, 1);
+ highp ivec3 s7 = textureSize(CA7, 1);
+
+ highp vec4 t4 = texture(CA4, vec4(0.5));
+ highp float t5 = texture(CA5, vec4(0.5), 3.0);
+ highp ivec4 t6 = texture(CA6, vec4(0.5));
+ highp uvec4 t7 = texture(CA7, vec4(0.5));
+
+ highp vec4 L4 = textureLod(CA4, vec4(0.5), 0.24);
+ highp ivec4 L6 = textureLod(CA6, vec4(0.5), 0.26);
+ highp uvec4 L7 = textureLod(CA7, vec4(0.5), 0.27);
+
+ highp vec4 g4 = textureGrad(CA4, vec4(0.5), vec3(0.1), vec3(0.2));
+ highp ivec4 g6 = textureGrad(CA6, vec4(0.5), vec3(0.1), vec3(0.2));
+ highp uvec4 g7 = textureGrad(CA7, vec4(0.5), vec3(0.1), vec3(0.2));
+
+ highp vec4 gath4 = textureGather(CA4, vec4(0.5));
+ highp vec4 gathC4 = textureGather(CA4, vec4(0.5), 2);
+ highp ivec4 gath6 = textureGather(CA6, vec4(0.5));
+ highp ivec4 gathC6 = textureGather(CA6, vec4(0.5), 1);
+ highp uvec4 gath7 = textureGather(CA7, vec4(0.5));
+ highp uvec4 gathC7 = textureGather(CA7, vec4(0.5), 0);
+
+ highp vec4 gath5 = textureGather(CA5, vec4(0.5), 2.5);
+
+ highp ivec3 s1 = imageSize(CA1);
+ highp ivec3 s2 = imageSize(CA2);
+ highp ivec3 s3 = imageSize(CA3);
+
+ imageStore(CA1, s3, vec4(1));
+ imageStore(CA2, s3, ivec4(1));
+ imageStore(CA3, s3, uvec4(1));
+
+ highp vec4 cl1 = imageLoad(rCA1, s3);
+ highp ivec4 cl2 = imageLoad(rCA2, s3);
+ highp uvec4 cl3 = imageLoad(rCA3, s3);
+}
+
+uniform sampler2DMSArray noPrec2DMS; // ERROR, no default
+uniform isampler2DMSArray noPrec2DMSi; // ERROR, no default
+uniform usampler2DMSArray noPrec2DMSu; // ERROR, no default
+
+precision highp sampler2DMSArray;
+precision highp isampler2DMSArray;
+precision highp usampler2DMSArray;
+
+uniform sampler2DMSArray samp2DMSA;
+uniform isampler2DMSArray samp2DMSAi;
+uniform usampler2DMSArray samp2DMSAu;
+
+void MSA()
+{
+ vec4 tf = texelFetch(samp2DMSA, ivec3(5), 2);
+ ivec4 tfi = texelFetch(samp2DMSAi, ivec3(5), 2);
+ uvec4 tfu = texelFetch(samp2DMSAu, ivec3(5), 2);
+
+ ivec3 tfs = textureSize(samp2DMSA);
+ ivec3 tfsi = textureSize(samp2DMSAi);
+ ivec3 tfsb = textureSize(samp2DMSAi, 4); // ERROR, no lod
+ ivec3 tfsu = textureSize(samp2DMSAu);
+}
+
+uniform layout(r32f) highp image2D im2Df;
+uniform layout(r32ui) highp uimage2D im2Du;
+uniform layout(r32i) highp iimage2D im2Di;
+uniform ivec2 P;
+
+void goodImageAtom()
+{
+ float datf;
+ int dati;
+ uint datu;
+
+ imageAtomicAdd( im2Di, P, dati);
+ imageAtomicAdd( im2Du, P, datu);
+ imageAtomicMin( im2Di, P, dati);
+ imageAtomicMin( im2Du, P, datu);
+ imageAtomicMax( im2Di, P, dati);
+ imageAtomicMax( im2Du, P, datu);
+ imageAtomicAnd( im2Di, P, dati);
+ imageAtomicAnd( im2Du, P, datu);
+ imageAtomicOr( im2Di, P, dati);
+ imageAtomicOr( im2Du, P, datu);
+ imageAtomicXor( im2Di, P, dati);
+ imageAtomicXor( im2Du, P, datu);
+ imageAtomicExchange(im2Di, P, dati);
+ imageAtomicExchange(im2Du, P, datu);
+ imageAtomicExchange(im2Df, P, datf);
+ imageAtomicCompSwap(im2Di, P, 3, dati);
+ imageAtomicCompSwap(im2Du, P, 5u, datu);
+}
+
+sample out vec4 colorSample;
+flat sample out vec4 colorfsi;
+sample out vec3 sampInArray[4];
+in vec4 inv4;
+
+void badInterp()
+{
+ interpolateAtCentroid(inv4); // ERROR, wrong stage
+ interpolateAtSample(inv4, 1); // ERROR, need extension
+ interpolateAtOffset(inv4, vec2(0.2)); // ERROR, need extension
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/400.frag b/3rdparty/bgfx/3rdparty/glslang/Test/400.frag
index b7460b4a077..039d4809f1c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/400.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/400.frag
@@ -184,10 +184,8 @@ void qlod()
lod = textureQueryLod(sampRect, pf2); // ERROR
}
-struct SKeyMem { int precise; } KeyMem; // ERROR, keyword can't be a member
-
uniform uint uu;
-out int iout;
+out uint iout;
void bitwiseConv()
{
@@ -195,3 +193,9 @@ void bitwiseConv()
iout += uu ^ i;
iout += i | uu;
}
+
+subroutine(subT1, subT2);
+subroutine float subT1() { return 1.0; }
+subroutine float subT2() { return 1.0; }
+
+struct SKeyMem { int precise; } KeyMem; // ERROR, keyword can't be a member
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/435.vert b/3rdparty/bgfx/3rdparty/glslang/Test/435.vert
new file mode 100644
index 00000000000..bf27ce9673c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/435.vert
@@ -0,0 +1,2 @@
+#version 435
+void main() {} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.comp b/3rdparty/bgfx/3rdparty/glslang/Test/450.comp
index 7f723ec0fe2..fb2b56a771f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/450.comp
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.comp
@@ -1 +1,6 @@
#version 450 core
+layout(local_size_x = 0) in; // ERROR, 0 not allowed
+void main()
+{
+ shared float f; // ERROR shared must be global
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.frag b/3rdparty/bgfx/3rdparty/glslang/Test/450.frag
index 04f3aa1ca25..076d0b3a965 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/450.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.frag
@@ -54,3 +54,15 @@ float cull(int i)
{
return (i >= 6) ? gl_CullDistance[5] : gl_CullDistance[i];
}
+
+layout(location = 6) in bName1 {
+ float f;
+ layout(location = 7) float g;
+ mat4 m;
+} bInst1;
+layout(location = 12) in bName2 {
+ float f;
+ layout(location = 13) float g; // ERROR, location on array
+} bInst2[3];
+
+layout(early_fragment_tests) in float f; // ERROR, must be standalone
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.geom b/3rdparty/bgfx/3rdparty/glslang/Test/450.geom
index af676813786..45cbecba566 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/450.geom
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.geom
@@ -8,7 +8,12 @@ out gl_PerVertex {
float gl_CullDistance[3];
};
+layout(triangles) in;
+
void main()
{
+ gl_in[3].gl_Position; // ERROR, out of range
gl_CullDistance[2] = gl_in[1].gl_CullDistance[2];
}
+
+layout(points) in float f[3]; // ERROR, must be standalone
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/450.tesc
index 75a9bf46926..bf5c08373b2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/450.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.tesc
@@ -12,3 +12,12 @@ void main()
{
gl_out[gl_InvocationID].gl_CullDistance[2] = gl_in[1].gl_CullDistance[2];
}
+
+layout(location = 4) out bName1 {
+ float f;
+ layout(location = 5) float g;
+} bInst1[2];
+layout(location = 6) out bName2 {
+ float f;
+ layout(location = 7) float g; // ERROR, location on array
+} bInst2[2][3];
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.tese b/3rdparty/bgfx/3rdparty/glslang/Test/450.tese
index 61447931c8d..8cdeb207221 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/450.tese
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.tese
@@ -12,3 +12,10 @@ void main()
{
gl_CullDistance[2] = gl_in[1].gl_CullDistance[2];
}
+
+layout(equal_spacing) in float f1[]; // ERROR, must be standalone
+layout(fractional_even_spacing) in float f2[]; // ERROR, must be standalone
+layout(fractional_odd_spacing) in float f3[]; // ERROR, must be standalone
+layout(cw) in float f4[]; // ERROR, must be standalone
+layout(ccw) in float f5[]; // ERROR, must be standalone
+layout(point_mode) in float f6[]; // ERROR, must be standalone
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/450.vert b/3rdparty/bgfx/3rdparty/glslang/Test/450.vert
index 0834d165e88..51e9b100430 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/450.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/450.vert
@@ -22,7 +22,27 @@ out SA outSA;
struct SS { float f; S s; };
out SS outSS;
+layout(binding = 0) uniform atomic_uint aui;
+uint ui;
+
void foo()
{
SS::f;
+ atomicCounterAdd(aui, ui); // ERROR, need 4.6
+ atomicCounterSubtract(aui, ui); // ERROR, need 4.6
+ atomicCounterMin(aui, ui); // ERROR, need 4.6
+ atomicCounterMax(aui, ui); // ERROR, need 4.6
+ atomicCounterAnd(aui, ui); // ERROR, need 4.6
+ atomicCounterOr(aui, ui); // ERROR, need 4.6
+ atomicCounterXor(aui, ui); // ERROR, need 4.6
+ atomicCounterExchange(aui, ui); // ERROR, need 4.6
+ atomicCounterCompSwap(aui, ui, ui); // ERROR, need 4.6
+
+ int a = gl_BaseVertex + gl_BaseInstance + gl_DrawID; // ERROR, need 4.6
+
+ bool b1;
+ anyInvocation(b1); // ERROR, need 4.6
+ allInvocations(b1); // ERROR, need 4.6
+ allInvocationsEqual(b1); // ERROR, need 4.6
}
+; // ERROR: no extraneous semicolons
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/460.frag b/3rdparty/bgfx/3rdparty/glslang/Test/460.frag
new file mode 100644
index 00000000000..43a7c3b3894
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/460.frag
@@ -0,0 +1,17 @@
+#version 460 core
+
+struct S {
+ float f;
+ vec4 v;
+};
+
+in S s;
+
+void main()
+{
+ interpolateAtCentroid(s.v);
+ bool b1;
+ b1 = anyInvocation(b1);
+ b1 = allInvocations(b1);
+ b1 = allInvocationsEqual(b1);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/460.vert b/3rdparty/bgfx/3rdparty/glslang/Test/460.vert
new file mode 100644
index 00000000000..fd87d8b1177
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/460.vert
@@ -0,0 +1,15 @@
+#version 460 core
+
+int i;
+; // extraneous semicolon okay
+float f;;;
+
+void main()
+{
+ bool b1;
+ b1 = anyInvocation(b1);
+ b1 = allInvocations(b1);
+ b1 = allInvocationsEqual(b1);
+}
+;
+;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/bar.h b/3rdparty/bgfx/3rdparty/glslang/Test/bar.h
new file mode 100644
index 00000000000..c206a325daa
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/bar.h
@@ -0,0 +1 @@
+float4 i1;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
new file mode 100644
index 00000000000..779d5e1d25a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
@@ -0,0 +1,50 @@
+hlsl.aliasOpaque.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 81
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 57
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 37 "gss2"
+ Name 39 "gss"
+ Name 43 "gtex"
+ Name 57 "@entryPointOutput"
+ Decorate 37(gss2) DescriptorSet 0
+ Decorate 39(gss) DescriptorSet 0
+ Decorate 43(gtex) DescriptorSet 0
+ Decorate 57(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeSampler
+ 8: TypeFloat 32
+ 10: TypeImage 8(float) 2D sampled format:Unknown
+ 12: TypeVector 8(float) 4
+ 25: TypeSampledImage 10
+ 27: TypeVector 8(float) 2
+ 28: 8(float) Constant 1045220557
+ 29: 8(float) Constant 1050253722
+ 30: 27(fvec2) ConstantComposite 28 29
+ 36: TypePointer UniformConstant 6
+ 37(gss2): 36(ptr) Variable UniformConstant
+ 39(gss): 36(ptr) Variable UniformConstant
+ 42: TypePointer UniformConstant 10
+ 43(gtex): 42(ptr) Variable UniformConstant
+ 46: 8(float) Constant 1077936128
+ 56: TypePointer Output 12(fvec4)
+57(@entryPointOutput): 56(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 68: 6 Load 39(gss)
+ 69: 10 Load 43(gtex)
+ 78: 25 SampledImage 69 68
+ 79: 12(fvec4) ImageSampleImplicitLod 78 30
+ 80: 12(fvec4) VectorTimesScalar 79 46
+ Store 57(@entryPointOutput) 80
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
new file mode 100644
index 00000000000..3c7d19831b6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
@@ -0,0 +1,65 @@
+hlsl.flattenOpaque.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 144
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 97
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 38 "tex"
+ Name 70 "s.s2D"
+ Name 79 "s2.s2D"
+ Name 80 "s2.tex"
+ Name 97 "@entryPointOutput"
+ Decorate 38(tex) DescriptorSet 0
+ Decorate 70(s.s2D) DescriptorSet 0
+ Decorate 79(s2.s2D) DescriptorSet 0
+ Decorate 80(s2.tex) DescriptorSet 0
+ Decorate 97(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeSampler
+ 8: TypeFloat 32
+ 9: TypeVector 8(float) 4
+ 14: TypeVector 8(float) 2
+ 21: TypeImage 8(float) 2D sampled format:Unknown
+ 37: TypePointer UniformConstant 21
+ 38(tex): 37(ptr) Variable UniformConstant
+ 41: TypeSampledImage 21
+ 43: 8(float) Constant 1045220557
+ 44: 8(float) Constant 1050253722
+ 45: 14(fvec2) ConstantComposite 43 44
+ 69: TypePointer UniformConstant 6
+ 70(s.s2D): 69(ptr) Variable UniformConstant
+ 79(s2.s2D): 69(ptr) Variable UniformConstant
+ 80(s2.tex): 37(ptr) Variable UniformConstant
+ 96: TypePointer Output 9(fvec4)
+97(@entryPointOutput): 96(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 109: 6 Load 70(s.s2D)
+ 123: 21 Load 38(tex)
+ 125: 41 SampledImage 123 109
+ 126: 9(fvec4) ImageSampleImplicitLod 125 45
+ 111: 6 Load 70(s.s2D)
+ 128: 21 Load 38(tex)
+ 130: 41 SampledImage 128 111
+ 132: 9(fvec4) ImageSampleImplicitLod 130 45
+ 113: 9(fvec4) FAdd 126 132
+ 114: 6 Load 79(s2.s2D)
+ 115: 21 Load 80(s2.tex)
+ 136: 41 SampledImage 115 114
+ 137: 9(fvec4) ImageSampleImplicitLod 136 45
+ 117: 9(fvec4) FAdd 113 137
+ 118: 6 Load 79(s2.s2D)
+ 119: 21 Load 80(s2.tex)
+ 141: 41 SampledImage 119 118
+ 143: 9(fvec4) ImageSampleImplicitLod 141 45
+ 121: 9(fvec4) FAdd 117 143
+ Store 97(@entryPointOutput) 121
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
new file mode 100644
index 00000000000..4aef8741631
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
@@ -0,0 +1,49 @@
+hlsl.flattenOpaqueInit.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 125
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 82
+ Source HLSL 500
+ Name 4 "main"
+ Name 17 "FxaaTex"
+ MemberName 17(FxaaTex) 0 "smpl"
+ MemberName 17(FxaaTex) 1 "tex"
+ Name 38 "g_tInputTexture_sampler"
+ Name 42 "g_tInputTexture"
+ Name 82 "@entryPointOutput"
+ Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
+ Decorate 42(g_tInputTexture) DescriptorSet 0
+ Decorate 82(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeSampler
+ 8: TypeFloat 32
+ 9: TypeImage 8(float) 2D sampled format:Unknown
+ 11: TypeVector 8(float) 4
+ 17(FxaaTex): TypeStruct 6 9
+ 26: TypeSampledImage 9
+ 28: TypeVector 8(float) 2
+ 29: 8(float) Constant 1050253722
+ 30: 8(float) Constant 1053609165
+ 31: 28(fvec2) ConstantComposite 29 30
+ 32: 8(float) Constant 0
+ 37: TypePointer UniformConstant 6
+38(g_tInputTexture_sampler): 37(ptr) Variable UniformConstant
+ 41: TypePointer UniformConstant 9
+42(g_tInputTexture): 41(ptr) Variable UniformConstant
+ 81: TypePointer Output 11(fvec4)
+82(@entryPointOutput): 81(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 96: 6 Load 38(g_tInputTexture_sampler)
+ 97: 9 Load 42(g_tInputTexture)
+ 123: 26 SampledImage 97 96
+ 124: 11(fvec4) ImageSampleExplicitLod 123 31 Lod 32
+ Store 82(@entryPointOutput) 124
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
new file mode 100644
index 00000000000..0b056158271
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -0,0 +1,49 @@
+hlsl.flattenOpaqueInitMix.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 100
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 68
+ Source HLSL 500
+ Name 4 "main"
+ Name 34 "FxaaTex"
+ MemberName 34(FxaaTex) 0 "smpl"
+ MemberName 34(FxaaTex) 1 "tex"
+ MemberName 34(FxaaTex) 2 "f"
+ Name 38 "g_tInputTexture_sampler"
+ Name 41 "g_tInputTexture"
+ Name 68 "@entryPointOutput"
+ Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
+ Decorate 41(g_tInputTexture) DescriptorSet 0
+ Decorate 68(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeSampler
+ 8: TypeFloat 32
+ 9: TypeImage 8(float) 2D sampled format:Unknown
+ 12: TypeVector 8(float) 4
+ 24: TypeSampledImage 9
+ 28: TypeVector 8(float) 2
+ 30: 8(float) Constant 0
+ 34(FxaaTex): TypeStruct 6 9 8(float)
+ 37: TypePointer UniformConstant 6
+38(g_tInputTexture_sampler): 37(ptr) Variable UniformConstant
+ 40: TypePointer UniformConstant 9
+41(g_tInputTexture): 40(ptr) Variable UniformConstant
+ 43: 8(float) Constant 1056964608
+ 67: TypePointer Output 12(fvec4)
+68(@entryPointOutput): 67(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 79: 6 Load 38(g_tInputTexture_sampler)
+ 80: 9 Load 41(g_tInputTexture)
+ 95: 24 SampledImage 80 79
+ 98: 28(fvec2) CompositeConstruct 43 43
+ 99: 12(fvec4) ImageSampleExplicitLod 95 98 Lod 30
+ Store 68(@entryPointOutput) 99
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out
new file mode 100644
index 00000000000..20aedec26f4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out
@@ -0,0 +1,48 @@
+hlsl.flattenSubset.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 85
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 54 57
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 17 "samp"
+ Name 41 "tex"
+ Name 54 "vpos"
+ Name 57 "@entryPointOutput"
+ Decorate 17(samp) DescriptorSet 0
+ Decorate 41(tex) DescriptorSet 0
+ Decorate 54(vpos) Location 0
+ Decorate 57(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 13: TypeSampler
+ 16: TypePointer UniformConstant 13
+ 17(samp): 16(ptr) Variable UniformConstant
+ 39: TypeImage 6(float) 2D sampled format:Unknown
+ 40: TypePointer UniformConstant 39
+ 41(tex): 40(ptr) Variable UniformConstant
+ 44: TypeSampledImage 39
+ 46: TypeVector 6(float) 2
+ 47: 6(float) Constant 1056964608
+ 48: 46(fvec2) ConstantComposite 47 47
+ 53: TypePointer Input 7(fvec4)
+ 54(vpos): 53(ptr) Variable Input
+ 56: TypePointer Output 7(fvec4)
+57(@entryPointOutput): 56(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 74: 13 Load 17(samp)
+ 81: 39 Load 41(tex)
+ 83: 44 SampledImage 81 74
+ 84: 7(fvec4) ImageSampleImplicitLod 83 48
+ Store 57(@entryPointOutput) 84
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
new file mode 100644
index 00000000000..724ae7bf9b5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
@@ -0,0 +1,37 @@
+hlsl.flattenSubset2.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 44
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 40 43
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 31 "someTex"
+ Name 40 "vpos"
+ Name 43 "@entryPointOutput"
+ Decorate 31(someTex) DescriptorSet 0
+ Decorate 40(vpos) Location 0
+ Decorate 43(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 17: TypeImage 6(float) 2D sampled format:Unknown
+ 30: TypePointer UniformConstant 17
+ 31(someTex): 30(ptr) Variable UniformConstant
+ 34: 6(float) Constant 0
+ 35: 7(fvec4) ConstantComposite 34 34 34 34
+ 39: TypePointer Input 7(fvec4)
+ 40(vpos): 39(ptr) Variable Input
+ 42: TypePointer Output 7(fvec4)
+43(@entryPointOutput): 42(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ Store 43(@entryPointOutput) 35
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
new file mode 100644
index 00000000000..ed3102e1810
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
@@ -0,0 +1,91 @@
+hlsl.partialFlattenLocal.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 148
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 90 93
+ Source HLSL 500
+ Name 4 "main"
+ Name 17 "tex"
+ Name 90 "pos"
+ Name 93 "@entryPointOutput"
+ Decorate 17(tex) DescriptorSet 0
+ Decorate 90(pos) Location 0
+ Decorate 93(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 13: TypeImage 6(float) 2D sampled format:Unknown
+ 16: TypePointer UniformConstant 13
+ 17(tex): 16(ptr) Variable UniformConstant
+ 19: TypeVector 6(float) 3
+ 20: TypeInt 32 0
+ 21: 20(int) Constant 3
+ 22: TypeArray 19(fvec3) 21
+ 23: TypePointer Function 22
+ 25: TypeInt 32 1
+ 26: 25(int) Constant 0
+ 27: 6(float) Constant 0
+ 28: 19(fvec3) ConstantComposite 27 27 27
+ 29: TypePointer Function 19(fvec3)
+ 31: TypeVector 6(float) 2
+ 32: 20(int) Constant 2
+ 33: TypeArray 31(fvec2) 32
+ 34: TypePointer Function 33
+ 36: 6(float) Constant 1065353216
+ 37: 31(fvec2) ConstantComposite 27 36
+ 38: TypePointer Function 31(fvec2)
+ 52: 25(int) Constant 1
+ 53: TypeBool
+ 89: TypePointer Input 7(fvec4)
+ 90(pos): 89(ptr) Variable Input
+ 92: TypePointer Output 7(fvec4)
+93(@entryPointOutput): 92(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 98: 23(ptr) Variable Function
+ 99: 34(ptr) Variable Function
+ 91: 7(fvec4) Load 90(pos)
+ 110: 29(ptr) AccessChain 98 26
+ Store 110 28
+ 111: 38(ptr) AccessChain 99 26
+ Store 111 37
+ Branch 112
+ 112: Label
+ 147: 25(int) Phi 26 5 131 114
+ LoopMerge 113 114 None
+ Branch 115
+ 115: Label
+ 117: 53(bool) SLessThan 147 52
+ BranchConditional 117 118 113
+ 118: Label
+ 121: 38(ptr) AccessChain 99 147
+ 122: 31(fvec2) Load 121
+ 123: 29(ptr) AccessChain 98 147
+ 124: 19(fvec3) Load 123
+ 125: 31(fvec2) VectorShuffle 124 124 0 1
+ 126: 31(fvec2) FAdd 125 122
+ 127: 29(ptr) AccessChain 98 147
+ 128: 19(fvec3) Load 127
+ 129: 19(fvec3) VectorShuffle 128 126 3 4 2
+ Store 127 129
+ Branch 114
+ 114: Label
+ 131: 25(int) IAdd 147 52
+ Branch 112
+ 113: Label
+ 133: 22 Load 98
+ 146: 19(fvec3) CompositeExtract 133 0
+ 140: 6(float) CompositeExtract 146 0
+ 141: 6(float) CompositeExtract 146 1
+ 142: 6(float) CompositeExtract 146 2
+ 143: 7(fvec4) CompositeConstruct 140 141 142 27
+ 144: 7(fvec4) FAdd 91 143
+ Store 93(@entryPointOutput) 144
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
new file mode 100644
index 00000000000..d57566b349e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
@@ -0,0 +1,38 @@
+hlsl.partialFlattenMixed.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 31
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 27 30
+ Source HLSL 500
+ Name 4 "main"
+ Name 20 "tex"
+ Name 27 "pos"
+ Name 30 "@entryPointOutput"
+ Decorate 20(tex) DescriptorSet 0
+ Decorate 27(pos) Location 0
+ Decorate 30(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 13: TypeImage 6(float) 2D sampled format:Unknown
+ 14: TypeInt 32 0
+ 15: 14(int) Constant 2
+ 16: TypeArray 13 15
+ 19: TypePointer UniformConstant 16
+ 20(tex): 19(ptr) Variable UniformConstant
+ 26: TypePointer Input 7(fvec4)
+ 27(pos): 26(ptr) Variable Input
+ 29: TypePointer Output 7(fvec4)
+30(@entryPointOutput): 29(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 28: 7(fvec4) Load 27(pos)
+ Store 30(@entryPointOutput) 28
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100.frag.out
index 67be9e01e2b..3464dcb5699 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100.frag.out
@@ -84,7 +84,7 @@ ERROR: 0:194: '.' : cannot apply to an array: method
ERROR: 0:194: 'a' : can't use function syntax on variable
ERROR: 0:214: 'non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)' : not supported for this version or the enabled extensions
ERROR: 0:3000: '#error' : line of this error should be 3000
-ERROR: 0:3002: '' : syntax error
+ERROR: 0:3002: '' : syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
ERROR: 77 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100samplerExternal.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100samplerExternal.frag.out
new file mode 100644
index 00000000000..8b689c76194
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/100samplerExternal.frag.out
@@ -0,0 +1,172 @@
+100samplerExternal.frag
+ERROR: 0:20: 'textureSize' : no matching overloaded function found
+ERROR: 0:21: 'texture' : no matching overloaded function found
+ERROR: 0:22: 'texture' : no matching overloaded function found
+ERROR: 0:23: 'textureProj' : no matching overloaded function found
+ERROR: 0:24: 'textureProj' : no matching overloaded function found
+ERROR: 0:25: 'textureProj' : no matching overloaded function found
+ERROR: 0:26: 'textureProj' : no matching overloaded function found
+ERROR: 0:27: 'texelFetch' : no matching overloaded function found
+ERROR: 0:29: 'texture3D' : no matching overloaded function found
+ERROR: 0:30: 'texture2DProjLod' : no matching overloaded function found
+ERROR: 0:31: 'texture' : no matching overloaded function found
+ERROR: 0:32: 'textureProjLod' : no matching overloaded function found
+ERROR: 0:38: 'samplerExternalOES' : required extension not requested: GL_OES_EGL_image_external
+ERROR: 0:41: '' : syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 14 compilation errors. No code generated.
+
+
+Shader version: 100
+Requested GL_OES_EGL_image_external
+Requested GL_OES_EGL_image_external_essl3
+ERROR: node is still EOpNull!
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 texture ( global lowp 4-component vector of float)
+0:12 'sExt' ( uniform lowp samplerExternalOES)
+0:12 Constant:
+0:12 0.200000
+0:12 0.200000
+0:13 texture ( global mediump 4-component vector of float)
+0:13 'mediumExt' ( uniform mediump samplerExternalOES)
+0:13 Constant:
+0:13 0.200000
+0:13 0.200000
+0:14 texture ( global highp 4-component vector of float)
+0:14 'highExt' ( uniform highp samplerExternalOES)
+0:14 Constant:
+0:14 0.200000
+0:14 0.200000
+0:15 textureProj ( global lowp 4-component vector of float)
+0:15 'sExt' ( uniform lowp samplerExternalOES)
+0:15 Constant:
+0:15 0.300000
+0:15 0.300000
+0:15 0.300000
+0:16 textureProj ( global lowp 4-component vector of float)
+0:16 'sExt' ( uniform lowp samplerExternalOES)
+0:16 Constant:
+0:16 0.300000
+0:16 0.300000
+0:16 0.300000
+0:16 0.300000
+0:18 Sequence
+0:18 move second child to first child ( temp mediump int)
+0:18 'lod' ( temp mediump int)
+0:18 Constant:
+0:18 0 (const int)
+0:19 Sequence
+0:19 move second child to first child ( temp highp float)
+0:19 'bias' ( temp highp float)
+0:19 Constant:
+0:19 0.010000
+0:20 Constant:
+0:20 0.000000
+0:21 Constant:
+0:21 0.000000
+0:22 Constant:
+0:22 0.000000
+0:23 Constant:
+0:23 0.000000
+0:24 Constant:
+0:24 0.000000
+0:25 Constant:
+0:25 0.000000
+0:26 Constant:
+0:26 0.000000
+0:27 Constant:
+0:27 0.000000
+0:29 Constant:
+0:29 0.000000
+0:30 Constant:
+0:30 0.000000
+0:31 Constant:
+0:31 0.000000
+0:32 Constant:
+0:32 0.000000
+0:? Linker Objects
+0:? 'sExt' ( uniform lowp samplerExternalOES)
+0:? 'mediumExt' ( uniform mediump samplerExternalOES)
+0:? 'highExt' ( uniform highp samplerExternalOES)
+0:? 'badExt' ( uniform mediump samplerExternalOES)
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+Requested GL_OES_EGL_image_external
+Requested GL_OES_EGL_image_external_essl3
+ERROR: node is still EOpNull!
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 texture ( global lowp 4-component vector of float)
+0:12 'sExt' ( uniform lowp samplerExternalOES)
+0:12 Constant:
+0:12 0.200000
+0:12 0.200000
+0:13 texture ( global mediump 4-component vector of float)
+0:13 'mediumExt' ( uniform mediump samplerExternalOES)
+0:13 Constant:
+0:13 0.200000
+0:13 0.200000
+0:14 texture ( global highp 4-component vector of float)
+0:14 'highExt' ( uniform highp samplerExternalOES)
+0:14 Constant:
+0:14 0.200000
+0:14 0.200000
+0:15 textureProj ( global lowp 4-component vector of float)
+0:15 'sExt' ( uniform lowp samplerExternalOES)
+0:15 Constant:
+0:15 0.300000
+0:15 0.300000
+0:15 0.300000
+0:16 textureProj ( global lowp 4-component vector of float)
+0:16 'sExt' ( uniform lowp samplerExternalOES)
+0:16 Constant:
+0:16 0.300000
+0:16 0.300000
+0:16 0.300000
+0:16 0.300000
+0:18 Sequence
+0:18 move second child to first child ( temp mediump int)
+0:18 'lod' ( temp mediump int)
+0:18 Constant:
+0:18 0 (const int)
+0:19 Sequence
+0:19 move second child to first child ( temp highp float)
+0:19 'bias' ( temp highp float)
+0:19 Constant:
+0:19 0.010000
+0:20 Constant:
+0:20 0.000000
+0:21 Constant:
+0:21 0.000000
+0:22 Constant:
+0:22 0.000000
+0:23 Constant:
+0:23 0.000000
+0:24 Constant:
+0:24 0.000000
+0:25 Constant:
+0:25 0.000000
+0:26 Constant:
+0:26 0.000000
+0:27 Constant:
+0:27 0.000000
+0:29 Constant:
+0:29 0.000000
+0:30 Constant:
+0:30 0.000000
+0:31 Constant:
+0:31 0.000000
+0:32 Constant:
+0:32 0.000000
+0:? Linker Objects
+0:? 'sExt' ( uniform lowp samplerExternalOES)
+0:? 'mediumExt' ( uniform mediump samplerExternalOES)
+0:? 'highExt' ( uniform highp samplerExternalOES)
+0:? 'badExt' ( uniform mediump samplerExternalOES)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out
index 6a635ecd85a..b5167247527 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out
@@ -52,7 +52,7 @@ ERROR: 0:209: 'assign' : cannot convert from ' const float' to ' temp 4-compone
ERROR: 0:212: 'sampler2DRect' : Reserved word.
ERROR: 0:244: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' global void' and a right operand of type ' const int' (or there is no acceptable conversion)
ERROR: 0:245: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' const int' and a right operand of type ' global void' (or there is no acceptable conversion)
-ERROR: 0:248: '' : syntax error
+ERROR: 0:248: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
ERROR: 54 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.tesc.out
index 526b6e7d590..25e44eddaf8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.tesc.out
@@ -210,7 +210,6 @@ ERROR: node is still EOpNull!
0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})
400.tesc
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:6: 'quads' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
ERROR: 0:7: 'ccw' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
ERROR: 0:8: 'fractional_even_spacing' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
@@ -442,7 +441,6 @@ ERROR: node is still EOpNull!
0:? 'badOrder' ( invariant noContraction out 4-element array of 4-component vector of float)
400.tese
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: 'vertices' : there is no such layout identifier for this stage taking an assigned value
ERROR: 0:5: 'triangles' : cannot change previously set input primitive
ERROR: 0:6: 'isolines' : cannot change previously set input primitive
@@ -612,7 +610,6 @@ ERROR: node is still EOpNull!
0:? 'pinbi' ( patch in block{ in int a})
410.tesc
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:4: 'length' : array must first be sized by a redeclaration or layout qualifier
ERROR: 1 compilation errors. No code generated.
@@ -628,7 +625,6 @@ ERROR: node is still EOpNull!
0:? 'patchOut' ( patch out 4-component vector of float)
420.tesc
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out
ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a
ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb
@@ -747,7 +743,6 @@ ERROR: node is still EOpNull!
0:? 'vs_tcs_last' (layout( location=12) in 32-element array of 2X4 matrix of double)
420.tese
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:7: '=' : cannot convert from ' const 3-element array of float' to ' global 2-element array of float'
ERROR: 0:8: 'initializer list' : wrong vector size (or rows in a matrix column): temp 2-component vector of float
ERROR: 0:9: 'initializer list' : wrong number of matrix columns: temp 3X3 matrix of float
@@ -759,7 +754,7 @@ ERROR: 0:29: 'constructor' : cannot convert parameter 2 from ' const 2X2 matrix
ERROR: 0:29: ' const 2-element array of 4-component vector of float' : cannot construct with these arguments
ERROR: 0:29: '=' : cannot convert from ' const float' to ' global 2-element array of 4-component vector of float'
ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float
-ERROR: 0:40: 'constructor' : cannot convert parameter 1 from ' temp float' to ' temp structure{ global float s, global float t}'
+ERROR: 0:40: 'constructor' : cannot convert parameter 1 from ' const structure{ global 4-component vector of float a, global 4-component vector of float b}' to ' temp structure{ global float s, global float t}'
ERROR: 0:70: 'initializer list' : wrong number of structure members
ERROR: 13 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.frag.out
index 371d9c2a4d8..63abec1a562 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.frag.out
@@ -43,7 +43,7 @@ ERROR: 0:156: 'invariant' : can only apply to an output
ERROR: 0:157: 'invariant' : can only apply to an output
ERROR: 0:158: 'invariant' : can only apply to an output
ERROR: 0:160: 'imageBuffer' : Reserved word.
-ERROR: 0:160: '' : syntax error
+ERROR: 0:160: '' : syntax error, unexpected IMAGEBUFFER, expecting COMMA or SEMICOLON
ERROR: 45 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.vert.out
index ec5d5d0055b..507ad73b1e9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300.vert.out
@@ -43,10 +43,18 @@ ERROR: 0:172: 'std430' : requires the 'buffer' storage qualifier
ERROR: 0:175: '' : array size required
ERROR: 0:185: 'assign' : cannot convert from ' temp 4-element array of highp float' to ' temp 3-element array of highp float'
ERROR: 0:186: 'assign' : cannot convert from ' temp 3-element array of highp float' to ' temp 4-element array of highp float'
-ERROR: 44 compilation errors. No code generated.
+ERROR: 0:189: 'num_views' : required extension not requested: Possible extensions include:
+GL_OVR_multiview
+GL_OVR_multiview2
+ERROR: 0:193: 'gl_ViewID_OVR' : required extension not requested: Possible extensions include:
+GL_OVR_multiview
+GL_OVR_multiview2
+ERROR: 0:198: 'num_views' : can only apply to a standalone qualifier
+ERROR: 47 compilation errors. No code generated.
Shader version: 300
+Requested GL_OVR_multiview
ERROR: node is still EOpNull!
0:27 Function Definition: main( ( global void)
0:27 Function Parameters:
@@ -289,6 +297,14 @@ ERROR: node is still EOpNull!
0:184 'y' ( temp 4-element array of highp float)
0:185 'xp' ( temp 3-element array of highp float)
0:186 'yp' ( temp 4-element array of highp float)
+0:191 Function Definition: mwErr( ( global void)
+0:191 Function Parameters:
+0:193 Sequence
+0:193 'gl_ViewID_OVR' ( in highp uint ViewIndex)
+0:201 Function Definition: mwOk( ( global void)
+0:201 Function Parameters:
+0:203 Sequence
+0:203 'gl_ViewID_OVR' ( in highp uint ViewIndex)
0:? Linker Objects
0:? 'm43' ( uniform highp 4X3 matrix of float)
0:? 'm33' ( uniform highp 3X3 matrix of float)
@@ -323,6 +339,7 @@ ERROR: node is still EOpNull!
0:? 'Binst' (layout( column_major shared) uniform block{layout( column_major shared) uniform highp int a})
0:? 'Bfoo' ( global highp int)
0:? 'B430i' (layout( column_major std430) uniform block{layout( column_major std430 offset=0) uniform highp int a})
+0:? 'mwUniform' ( uniform highp float)
0:? 'gl_VertexID' ( gl_VertexId highp int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
@@ -331,6 +348,7 @@ Linked vertex stage:
Shader version: 300
+Requested GL_OVR_multiview
ERROR: node is still EOpNull!
0:27 Function Definition: main( ( global void)
0:27 Function Parameters:
@@ -481,6 +499,7 @@ ERROR: node is still EOpNull!
0:? 'Binst' (layout( column_major shared) uniform block{layout( column_major shared) uniform highp int a})
0:? 'Bfoo' ( global highp int)
0:? 'B430i' (layout( column_major std430) uniform block{layout( column_major std430 offset=0) uniform highp int a})
+0:? 'mwUniform' ( uniform highp float)
0:? 'gl_VertexID' ( gl_VertexId highp int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300samplerExternal.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300samplerExternal.frag.out
new file mode 100644
index 00000000000..9074552e891
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300samplerExternal.frag.out
@@ -0,0 +1,197 @@
+300samplerExternal.frag
+ERROR: 0:12: 'texture2D' : no matching overloaded function found
+ERROR: 0:13: 'texture2D' : no matching overloaded function found
+ERROR: 0:14: 'texture2D' : no matching overloaded function found
+ERROR: 0:15: 'texture2DProj' : no matching overloaded function found
+ERROR: 0:16: 'texture2DProj' : no matching overloaded function found
+ERROR: 0:29: 'texture3D' : no matching overloaded function found
+ERROR: 0:30: 'texture2DProjLod' : no matching overloaded function found
+ERROR: 0:31: 'texture' : no matching overloaded function found
+ERROR: 0:32: 'textureProjLod' : no matching overloaded function found
+ERROR: 0:38: 'samplerExternalOES' : required extension not requested: GL_OES_EGL_image_external_essl3
+ERROR: 0:41: '' : syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 11 compilation errors. No code generated.
+
+
+Shader version: 300
+Requested GL_OES_EGL_image_external
+Requested GL_OES_EGL_image_external_essl3
+ERROR: node is still EOpNull!
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 Constant:
+0:12 0.000000
+0:13 Constant:
+0:13 0.000000
+0:14 Constant:
+0:14 0.000000
+0:15 Constant:
+0:15 0.000000
+0:16 Constant:
+0:16 0.000000
+0:18 Sequence
+0:18 move second child to first child ( temp mediump int)
+0:18 'lod' ( temp mediump int)
+0:18 Constant:
+0:18 0 (const int)
+0:19 Sequence
+0:19 move second child to first child ( temp highp float)
+0:19 'bias' ( temp highp float)
+0:19 Constant:
+0:19 0.010000
+0:20 textureSize ( global highp 2-component vector of int, operation at mediump)
+0:20 'sExt' ( uniform lowp samplerExternalOES)
+0:20 'lod' ( temp mediump int)
+0:21 texture ( global lowp 4-component vector of float)
+0:21 'sExt' ( uniform lowp samplerExternalOES)
+0:21 Constant:
+0:21 0.200000
+0:21 0.200000
+0:22 texture ( global lowp 4-component vector of float, operation at highp)
+0:22 'sExt' ( uniform lowp samplerExternalOES)
+0:22 Constant:
+0:22 0.200000
+0:22 0.200000
+0:22 'bias' ( temp highp float)
+0:23 textureProj ( global lowp 4-component vector of float)
+0:23 'sExt' ( uniform lowp samplerExternalOES)
+0:23 Constant:
+0:23 0.200000
+0:23 0.200000
+0:23 0.200000
+0:24 textureProj ( global lowp 4-component vector of float, operation at highp)
+0:24 'sExt' ( uniform lowp samplerExternalOES)
+0:24 Constant:
+0:24 0.200000
+0:24 0.200000
+0:24 0.200000
+0:24 'bias' ( temp highp float)
+0:25 textureProj ( global lowp 4-component vector of float)
+0:25 'sExt' ( uniform lowp samplerExternalOES)
+0:25 Constant:
+0:25 0.200000
+0:25 0.200000
+0:25 0.200000
+0:25 0.200000
+0:26 textureProj ( global lowp 4-component vector of float, operation at highp)
+0:26 'sExt' ( uniform lowp samplerExternalOES)
+0:26 Constant:
+0:26 0.200000
+0:26 0.200000
+0:26 0.200000
+0:26 0.200000
+0:26 'bias' ( temp highp float)
+0:27 textureFetch ( global lowp 4-component vector of float, operation at mediump)
+0:27 'sExt' ( uniform lowp samplerExternalOES)
+0:27 Constant:
+0:27 4 (const int)
+0:27 4 (const int)
+0:27 'lod' ( temp mediump int)
+0:29 Constant:
+0:29 0.000000
+0:30 Constant:
+0:30 0.000000
+0:31 Constant:
+0:31 0.000000
+0:32 Constant:
+0:32 0.000000
+0:? Linker Objects
+0:? 'sExt' ( uniform lowp samplerExternalOES)
+0:? 'mediumExt' ( uniform mediump samplerExternalOES)
+0:? 'highExt' ( uniform highp samplerExternalOES)
+0:? 'badExt' ( uniform mediump samplerExternalOES)
+
+
+Linked fragment stage:
+
+
+Shader version: 300
+Requested GL_OES_EGL_image_external
+Requested GL_OES_EGL_image_external_essl3
+ERROR: node is still EOpNull!
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 Constant:
+0:12 0.000000
+0:13 Constant:
+0:13 0.000000
+0:14 Constant:
+0:14 0.000000
+0:15 Constant:
+0:15 0.000000
+0:16 Constant:
+0:16 0.000000
+0:18 Sequence
+0:18 move second child to first child ( temp mediump int)
+0:18 'lod' ( temp mediump int)
+0:18 Constant:
+0:18 0 (const int)
+0:19 Sequence
+0:19 move second child to first child ( temp highp float)
+0:19 'bias' ( temp highp float)
+0:19 Constant:
+0:19 0.010000
+0:20 textureSize ( global highp 2-component vector of int, operation at mediump)
+0:20 'sExt' ( uniform lowp samplerExternalOES)
+0:20 'lod' ( temp mediump int)
+0:21 texture ( global lowp 4-component vector of float)
+0:21 'sExt' ( uniform lowp samplerExternalOES)
+0:21 Constant:
+0:21 0.200000
+0:21 0.200000
+0:22 texture ( global lowp 4-component vector of float, operation at highp)
+0:22 'sExt' ( uniform lowp samplerExternalOES)
+0:22 Constant:
+0:22 0.200000
+0:22 0.200000
+0:22 'bias' ( temp highp float)
+0:23 textureProj ( global lowp 4-component vector of float)
+0:23 'sExt' ( uniform lowp samplerExternalOES)
+0:23 Constant:
+0:23 0.200000
+0:23 0.200000
+0:23 0.200000
+0:24 textureProj ( global lowp 4-component vector of float, operation at highp)
+0:24 'sExt' ( uniform lowp samplerExternalOES)
+0:24 Constant:
+0:24 0.200000
+0:24 0.200000
+0:24 0.200000
+0:24 'bias' ( temp highp float)
+0:25 textureProj ( global lowp 4-component vector of float)
+0:25 'sExt' ( uniform lowp samplerExternalOES)
+0:25 Constant:
+0:25 0.200000
+0:25 0.200000
+0:25 0.200000
+0:25 0.200000
+0:26 textureProj ( global lowp 4-component vector of float, operation at highp)
+0:26 'sExt' ( uniform lowp samplerExternalOES)
+0:26 Constant:
+0:26 0.200000
+0:26 0.200000
+0:26 0.200000
+0:26 0.200000
+0:26 'bias' ( temp highp float)
+0:27 textureFetch ( global lowp 4-component vector of float, operation at mediump)
+0:27 'sExt' ( uniform lowp samplerExternalOES)
+0:27 Constant:
+0:27 4 (const int)
+0:27 4 (const int)
+0:27 'lod' ( temp mediump int)
+0:29 Constant:
+0:29 0.000000
+0:30 Constant:
+0:30 0.000000
+0:31 Constant:
+0:31 0.000000
+0:32 Constant:
+0:32 0.000000
+0:? Linker Objects
+0:? 'sExt' ( uniform lowp samplerExternalOES)
+0:? 'mediumExt' ( uniform mediump samplerExternalOES)
+0:? 'highExt' ( uniform highp samplerExternalOES)
+0:? 'badExt' ( uniform mediump samplerExternalOES)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out
index 3246622de19..f2d48efd817 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out
@@ -1,7 +1,7 @@
310.comp
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:4: 'local_size' : cannot change previously set size
ERROR: 0:5: 'local_size' : too large; see gl_MaxComputeWorkGroupSize
+ERROR: 0:7: 'local_size_y' : must be at least 1
ERROR: 0:23: '' : array size required
ERROR: 0:39: 'in' : global storage input qualifier cannot be used in a compute shader
ERROR: 0:39: 'location qualifier on input' : not supported in this stage: compute
@@ -16,7 +16,7 @@ ERROR: 0:47: 'local_size' : can only apply to 'in'
ERROR: 0:61: 'assign' : l-value required "ro" (can't modify a readonly buffer)
ERROR: 0:66: 'buffer' : buffers can be declared only as blocks
ERROR: 0:68: 'sampler/image' : type requires declaration of default precision qualifier
-ERROR: 0:76: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
+ERROR: 0:76: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported with this profile: es
ERROR: 0:81: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:82: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:87: 'imageAtomicCompSwap' : required extension not requested: GL_OES_shader_image_atomic
@@ -54,12 +54,12 @@ ERROR: 0:171: 'samplerCubeArray' : Reserved word.
ERROR: 0:171: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:172: 'iimage2DRect' : Reserved word.
ERROR: 0:172: 'sampler/image' : type requires declaration of default precision qualifier
-ERROR: 0:172: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
+ERROR: 0:172: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported with this profile: es
ERROR: 0:173: 'image2DMS' : Reserved word.
-ERROR: 0:173: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
+ERROR: 0:173: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported with this profile: es
ERROR: 0:174: 'uimage2DMSArray' : Reserved word.
ERROR: 0:174: 'sampler/image' : type requires declaration of default precision qualifier
-ERROR: 0:174: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
+ERROR: 0:174: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported with this profile: es
ERROR: 0:181: 'rgba32f' : format requires readonly or writeonly memory qualifier
ERROR: 0:182: 'rgba8i' : format requires readonly or writeonly memory qualifier
ERROR: 0:183: 'rgba16ui' : format requires readonly or writeonly memory qualifier
@@ -84,7 +84,7 @@ WARNING: 0:238: '#define' : names containing consecutive underscores are reserve
ERROR: 0:244: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group
ERROR: 0:245: 'gl_ViewIndex' : undeclared identifier
ERROR: 0:255: 'gl_ViewIndex' : undeclared identifier
-ERROR: 82 compilation errors. No code generated.
+ERROR: 83 compilation errors. No code generated.
Shader version: 310
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out
index 3b2fdd087f2..81075561323 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out
@@ -1,5 +1,4 @@
310.frag
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:2: 'float' : type requires declaration of default precision qualifier
ERROR: 0:8: 'origin_upper_left' : not supported with this profile: es
ERROR: 0:8: 'pixel_center_integer' : not supported with this profile: es
@@ -19,13 +18,13 @@ ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset,
ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
ERROR: 0:66: 'sampler/image' : type requires declaration of default precision qualifier
-ERROR: 0:66: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
+ERROR: 0:66: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported with this profile: es
ERROR: 0:67: 'sampler/image' : type requires declaration of default precision qualifier
-ERROR: 0:67: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
+ERROR: 0:67: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported with this profile: es
ERROR: 0:68: 'sampler/image' : type requires declaration of default precision qualifier
-ERROR: 0:68: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
+ERROR: 0:68: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported with this profile: es
ERROR: 0:69: 'sampler/image' : type requires declaration of default precision qualifier
-ERROR: 0:69: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
+ERROR: 0:69: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported with this profile: es
ERROR: 0:73: 'binding' : requires block, or sampler/image, or atomic-counter type
ERROR: 0:77: 'location' : location is too large
ERROR: 0:81: 'location' : too large for fragment output
@@ -36,7 +35,7 @@ ERROR: 0:83: 'layout-id value' : cannot be negative
ERROR: 0:96: 'sampler/image' : type requires declaration of default precision qualifier
ERROR: 0:110: 'out' : cannot be bool
ERROR: 0:111: 'image2D' : sampler/image types can only be used in uniform variables or function parameters: imageOut
-ERROR: 0:111: 'image variables declared 'writeonly' without a format layout qualifier' : not supported with this profile: es
+ERROR: 0:111: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported with this profile: es
ERROR: 0:112: 'out' : cannot be a matrix
ERROR: 0:114: 'in' : cannot be bool
ERROR: 0:115: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: ino
@@ -124,7 +123,7 @@ ERROR: 0:391: 'interpolateAtOffset' : first argument must be an interpolant, or
ERROR: 0:392: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element
ERROR: 0:396: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element
ERROR: 0:397: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element
-ERROR: 0:400: 'blend equation' : required extension not requested: GL_KHR_blend_equation_advanced
+ERROR: 0:400: 'blend equation' : not supported for this version or the enabled extensions
ERROR: 0:423: 'blend equation' : can only apply to 'out'
ERROR: 0:424: 'blend equation' : can only apply to a standalone qualifier
ERROR: 0:425: 'blend equation' : can only apply to a standalone qualifier
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.geom.out
index e57c8222c13..b0dabc3b20a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.geom.out
@@ -1,5 +1,4 @@
310.geom
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:29: 'fromVertex' : block instance name redefinition
ERROR: 0:33: 'fromVertex' : redefinition
ERROR: 0:35: 'fooC' : block instance name redefinition
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out
index 9c3d1d55fcc..01d7ecfb49a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out
@@ -1,5 +1,4 @@
310.tesc
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:8: 'quads' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
ERROR: 0:9: 'ccw' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
ERROR: 0:10: 'fractional_even_spacing' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out
index 4550230d21c..52d19b4fdf6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out
@@ -1,5 +1,4 @@
310.tese
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:7: 'vertices' : there is no such layout identifier for this stage taking an assigned value
ERROR: 0:9: 'triangles' : cannot change previously set input primitive
ERROR: 0:10: 'isolines' : cannot change previously set input primitive
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out
index 6d4599c53c6..21fa27b90fc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out
@@ -1,5 +1,4 @@
310.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: 'shared' : not supported in this stage: vertex
ERROR: 0:4: 'local_size_x' : there is no such layout identifier for this stage taking an assigned value
ERROR: 0:5: 'buffer' : buffers can be declared only as blocks
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310AofA.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310AofA.vert.out
index ffba25f9a2a..70b5968c9d0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310AofA.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310AofA.vert.out
@@ -1,5 +1,4 @@
310AofA.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:17: '' : array size required
ERROR: 0:23: '' : array size required
ERROR: 0:28: '[]' : only outermost dimension of an array of arrays can be implicitly sized
@@ -321,7 +320,7 @@ ERROR: node is still EOpNull!
0:? Linker Objects
0:? 'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
0:? 'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform implicitly-sized array of highp 4-component vector of float v})
-0:? 'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of implicitly-sized array of highp 4-component vector of float v})
+0:? 'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 1-element array of highp 4-component vector of float v})
0:? 'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float)
0:? 'gu' ( global implicitly-sized array of 7-element array of highp float)
@@ -362,7 +361,7 @@ ERROR: node is still EOpNull!
0:? Linker Objects
0:? 'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
0:? 'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform 1-element array of highp 4-component vector of float v})
-0:? 'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of implicitly-sized array of highp 4-component vector of float v})
+0:? 'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 1-element array of highp 4-component vector of float v})
0:? 'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float)
0:? 'gu' ( global 1-element array of 7-element array of highp float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out
index 07ac5237844..1eed457dbae 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out
@@ -1,5 +1,4 @@
310implicitSizeArrayError.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: '' : array size required
ERROR: 1 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.comp.out
new file mode 100644
index 00000000000..09cedd0a00f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.comp.out
@@ -0,0 +1,19 @@
+320.comp
+Shader version: 320
+local_size = (1, 1, 1)
+0:? Sequence
+0:3 Function Definition: main( ( global void)
+0:3 Function Parameters:
+0:? Linker Objects
+
+
+Linked compute stage:
+
+
+Shader version: 320
+local_size = (1, 1, 1)
+0:? Sequence
+0:3 Function Definition: main( ( global void)
+0:3 Function Parameters:
+0:? Linker Objects
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.frag.out
new file mode 100644
index 00000000000..76dbeaf8dc5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.frag.out
@@ -0,0 +1,576 @@
+320.frag
+ERROR: 0:3: 'output block' : not supported in this stage: fragment
+ERROR: 0:7: 'float' : type requires declaration of default precision qualifier
+ERROR: 0:8: '' : cannot nest a structure definition inside a structure or block
+ERROR: 0:16: 'location' : overlapping use of location 13
+ERROR: 0:18: 'inbname2' : Cannot reuse block name within the same interface: in
+ERROR: 0:23: 'badmember' : nameless block contains a member that already has a name at global scope
+ERROR: 0:27: 'inbname' : redefinition
+ERROR: 0:29: 'vAnon' : redefinition
+ERROR: 0:43: 'origin_upper_left' : not supported with this profile: es
+ERROR: 0:43: 'pixel_center_integer' : not supported with this profile: es
+ERROR: 0:43: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord
+ERROR: 0:47: 'depth layout qualifier' : not supported with this profile: es
+ERROR: 0:51: 'assign' : l-value required "gl_FragDepth" (can't modify gl_FragDepth if using early_fragment_tests)
+ERROR: 0:79: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument
+ERROR: 0:124: 'rgba32f' : format requires readonly or writeonly memory qualifier
+ERROR: 0:125: 'rgba8ui' : format requires readonly or writeonly memory qualifier
+ERROR: 0:126: 'rgba16i' : format requires readonly or writeonly memory qualifier
+ERROR: 0:152: 'imageAtomicMax' : only supported on image with format r32i or r32ui
+ERROR: 0:153: 'imageAtomicMax' : only supported on image with format r32i or r32ui
+ERROR: 0:154: 'imageAtomicExchange' : only supported on image with format r32f
+ERROR: 0:157: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output
+ERROR: 0:158: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output
+ERROR: 0:159: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output
+ERROR: 0:160: 'noperspective' : Reserved word.
+ERROR: 0:160: 'noperspective' : not supported with this profile: es
+ERROR: 0:160: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output
+ERROR: 0:165: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output
+ERROR: 0:180: 'interpolateAtCentroid' : no matching overloaded function found
+ERROR: 0:180: 'assign' : cannot convert from ' const float' to ' temp mediump 3-component vector of float'
+ERROR: 0:182: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element
+ERROR: 0:184: 'interpolateAtSample' : no matching overloaded function found
+ERROR: 0:184: 'assign' : cannot convert from ' const float' to ' temp mediump 3-component vector of float'
+ERROR: 0:186: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element
+ERROR: 0:189: 'interpolateAtOffset' : no matching overloaded function found
+ERROR: 0:189: 'assign' : cannot convert from ' const float' to ' temp mediump 3-component vector of float'
+ERROR: 0:191: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element
+ERROR: 0:192: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element
+ERROR: 0:196: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element
+ERROR: 0:197: 'outp' : undeclared identifier
+ERROR: 0:197: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element
+ERROR: 0:197: 'assign' : cannot convert from ' global float' to ' temp mediump 4-component vector of float'
+ERROR: 0:217: 'blend equation' : can only apply to 'out'
+ERROR: 0:218: 'blend equation' : can only apply to a standalone qualifier
+ERROR: 0:219: 'blend equation' : can only apply to a standalone qualifier
+ERROR: 0:220: 'blend equation' : can only apply to a standalone qualifier
+ERROR: 0:221: 'blend equation' : can only apply to a standalone qualifier
+ERROR: 0:222: 'blend equation' : can only apply to a standalone qualifier
+ERROR: 0:223: 'blend_support' : unknown blend equation
+ERROR: 0:225: 'fragment-shader array-of-array output' : not supported with this profile: es
+ERROR: 49 compilation errors. No code generated.
+
+
+Shader version: 320
+gl_FragCoord pixel center is integer
+gl_FragCoord origin is upper left
+using early_fragment_tests
+using depth_any
+using blend_support_multiply blend_support_screen blend_support_overlay blend_support_darken blend_support_lighten blend_support_colordodge blend_support_colorburn blend_support_hardlight blend_support_softlight blend_support_difference blend_support_exclusion blend_support_hsl_hue blend_support_hsl_saturation blend_support_hsl_color blend_support_hsl_luminosity blend_support_all_equations
+ERROR: node is still EOpNull!
+0:35 Function Definition: fooIO( ( global void)
+0:35 Function Parameters:
+0:37 Sequence
+0:37 Sequence
+0:37 move second child to first child ( temp mediump 4-component vector of float)
+0:37 'v' ( temp mediump 4-component vector of float)
+0:37 add ( temp mediump 4-component vector of float)
+0:37 v: direct index for structure ( in mediump 4-component vector of float)
+0:37 'inbinst' ( in block{ in mediump int a, in mediump 4-component vector of float v, in structure{ global mediump int b} s})
+0:37 Constant:
+0:37 1 (const int)
+0:37 vAnon: direct index for structure (layout( location=13) centroid in mediump 4-component vector of float)
+0:37 'anon@0' ( in block{layout( location=12) in mediump int aAnon, layout( location=13) centroid in mediump 4-component vector of float vAnon})
+0:37 Constant:
+0:37 1 (const uint)
+0:38 vector scale second child into first child ( temp mediump 4-component vector of float)
+0:38 'v' ( temp mediump 4-component vector of float)
+0:38 f: direct index for structure ( in mediump float)
+0:38 direct index ( temp block{ in mediump float f})
+0:38 'arrayedInst' ( in 4-element array of block{ in mediump float f})
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:39 vector scale second child into first child ( temp mediump 4-component vector of float)
+0:39 'v' ( temp mediump 4-component vector of float)
+0:39 f: direct index for structure ( in mediump float)
+0:39 indirect index ( temp block{ in mediump float f})
+0:39 'arrayedInst' ( in 4-element array of block{ in mediump float f})
+0:39 'i' ( uniform mediump int)
+0:39 Constant:
+0:39 0 (const int)
+0:49 Function Definition: main( ( global void)
+0:49 Function Parameters:
+0:51 Sequence
+0:51 move second child to first child ( temp highp float)
+0:51 'gl_FragDepth' ( gl_FragDepth highp float FragDepth)
+0:51 Constant:
+0:51 0.200000
+0:52 Sequence
+0:52 move second child to first child ( temp bool)
+0:52 'f' ( temp bool)
+0:52 'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:57 Function Definition: foo_GS( ( global void)
+0:57 Function Parameters:
+0:59 Sequence
+0:59 Sequence
+0:59 move second child to first child ( temp highp int)
+0:59 'l' ( temp highp int)
+0:59 'gl_Layer' ( flat in highp int Layer)
+0:60 Sequence
+0:60 move second child to first child ( temp highp int)
+0:60 'p' ( temp highp int)
+0:60 'gl_PrimitiveID' ( flat in highp int PrimitiveID)
+0:73 Function Definition: pfoo( ( global void)
+0:73 Function Parameters:
+0:? Sequence
+0:76 move second child to first child ( temp mediump 2-component vector of float)
+0:76 'h' ( noContraction temp mediump 2-component vector of float)
+0:76 fma ( global mediump 2-component vector of float)
+0:76 'inf' ( smooth in mediump 2-component vector of float)
+0:76 'ing' ( smooth in mediump 2-component vector of float)
+0:76 'h' ( noContraction temp mediump 2-component vector of float)
+0:77 textureGatherOffset ( global lowp 4-component vector of float)
+0:77 direct index ( temp lowp sampler2D)
+0:77 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 0.100000
+0:77 0.100000
+0:77 Convert float to int ( temp lowp 2-component vector of int)
+0:77 'inf' ( smooth in mediump 2-component vector of float)
+0:78 textureGatherOffsets ( global lowp 4-component vector of float, operation at mediump)
+0:78 direct index ( temp lowp sampler2D)
+0:78 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 0.100000
+0:78 0.100000
+0:78 Constant:
+0:78 0 (const int)
+0:78 0 (const int)
+0:78 0 (const int)
+0:78 0 (const int)
+0:78 0 (const int)
+0:78 0 (const int)
+0:78 0 (const int)
+0:78 0 (const int)
+0:79 textureGatherOffsets ( global lowp 4-component vector of float, operation at mediump)
+0:79 direct index ( temp lowp sampler2D)
+0:79 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0.100000
+0:79 0.100000
+0:79 'offsets' ( uniform 4-element array of mediump 2-component vector of int)
+0:102 Function Definition: CAT( ( global void)
+0:102 Function Parameters:
+0:104 Sequence
+0:104 Sequence
+0:104 move second child to first child ( temp highp 4-component vector of float)
+0:104 'b4' ( temp highp 4-component vector of float)
+0:104 texture ( global highp 4-component vector of float)
+0:104 'CA4' ( uniform highp samplerCubeArray)
+0:104 Constant:
+0:104 0.500000
+0:104 0.500000
+0:104 0.500000
+0:104 0.500000
+0:104 Constant:
+0:104 0.240000
+0:105 Sequence
+0:105 move second child to first child ( temp highp 4-component vector of int)
+0:105 'b6' ( temp highp 4-component vector of int)
+0:105 texture ( global highp 4-component vector of int)
+0:105 'CA6' ( uniform highp isamplerCubeArray)
+0:105 Constant:
+0:105 0.500000
+0:105 0.500000
+0:105 0.500000
+0:105 0.500000
+0:105 Constant:
+0:105 0.260000
+0:106 Sequence
+0:106 move second child to first child ( temp highp 4-component vector of uint)
+0:106 'b7' ( temp highp 4-component vector of uint)
+0:106 texture ( global highp 4-component vector of uint)
+0:106 'CA7' ( uniform highp usamplerCubeArray)
+0:106 Constant:
+0:106 0.500000
+0:106 0.500000
+0:106 0.500000
+0:106 0.500000
+0:106 Constant:
+0:106 0.270000
+0:109 Function Definition: goodSample( ( global void)
+0:109 Function Parameters:
+0:111 Sequence
+0:111 Sequence
+0:111 move second child to first child ( temp lowp int)
+0:111 'a1' ( temp lowp int)
+0:111 'gl_SampleID' ( flat in lowp int SampleId)
+0:112 Sequence
+0:112 move second child to first child ( temp mediump 2-component vector of float)
+0:112 'a2' ( temp mediump 2-component vector of float)
+0:112 'gl_SamplePosition' ( smooth in mediump 2-component vector of float SamplePosition)
+0:113 Sequence
+0:113 move second child to first child ( temp highp int)
+0:113 'a3' ( temp highp int)
+0:113 direct index ( flat temp highp int SampleMaskIn)
+0:113 'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
+0:113 Constant:
+0:113 0 (const int)
+0:114 move second child to first child ( temp highp int)
+0:114 direct index ( temp highp int SampleMaskIn)
+0:114 'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:114 Constant:
+0:114 0 (const int)
+0:114 'a3' ( temp highp int)
+0:115 Sequence
+0:115 move second child to first child ( temp mediump int)
+0:115 'n1' ( temp mediump int)
+0:115 Constant:
+0:115 4 (const int)
+0:116 Sequence
+0:116 move second child to first child ( temp mediump int)
+0:116 'n2' ( temp mediump int)
+0:116 'gl_NumSamples' ( uniform lowp int)
+0:128 Function Definition: goodImageAtom( ( global void)
+0:128 Function Parameters:
+0:? Sequence
+0:134 imageAtomicAdd ( global highp int)
+0:134 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:134 'P' ( uniform mediump 2-component vector of int)
+0:134 'dati' ( temp mediump int)
+0:135 imageAtomicAdd ( global highp uint)
+0:135 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:135 'P' ( uniform mediump 2-component vector of int)
+0:135 'datu' ( temp mediump uint)
+0:136 imageAtomicMin ( global highp int)
+0:136 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:136 'P' ( uniform mediump 2-component vector of int)
+0:136 'dati' ( temp mediump int)
+0:137 imageAtomicMin ( global highp uint)
+0:137 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:137 'P' ( uniform mediump 2-component vector of int)
+0:137 'datu' ( temp mediump uint)
+0:138 imageAtomicMax ( global highp int)
+0:138 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:138 'P' ( uniform mediump 2-component vector of int)
+0:138 'dati' ( temp mediump int)
+0:139 imageAtomicMax ( global highp uint)
+0:139 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:139 'P' ( uniform mediump 2-component vector of int)
+0:139 'datu' ( temp mediump uint)
+0:140 imageAtomicAnd ( global highp int)
+0:140 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:140 'P' ( uniform mediump 2-component vector of int)
+0:140 'dati' ( temp mediump int)
+0:141 imageAtomicAnd ( global highp uint)
+0:141 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:141 'P' ( uniform mediump 2-component vector of int)
+0:141 'datu' ( temp mediump uint)
+0:142 imageAtomicOr ( global highp int)
+0:142 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:142 'P' ( uniform mediump 2-component vector of int)
+0:142 'dati' ( temp mediump int)
+0:143 imageAtomicOr ( global highp uint)
+0:143 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:143 'P' ( uniform mediump 2-component vector of int)
+0:143 'datu' ( temp mediump uint)
+0:144 imageAtomicXor ( global highp int)
+0:144 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:144 'P' ( uniform mediump 2-component vector of int)
+0:144 'dati' ( temp mediump int)
+0:145 imageAtomicXor ( global highp uint)
+0:145 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:145 'P' ( uniform mediump 2-component vector of int)
+0:145 'datu' ( temp mediump uint)
+0:146 imageAtomicExchange ( global highp int)
+0:146 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:146 'P' ( uniform mediump 2-component vector of int)
+0:146 'dati' ( temp mediump int)
+0:147 imageAtomicExchange ( global highp uint)
+0:147 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:147 'P' ( uniform mediump 2-component vector of int)
+0:147 'datu' ( temp mediump uint)
+0:148 imageAtomicExchange ( global highp float)
+0:148 'im2Df' (layout( r32f) uniform highp image2D)
+0:148 'P' ( uniform mediump 2-component vector of int)
+0:148 'datf' ( temp mediump float)
+0:149 imageAtomicCompSwap ( global highp int)
+0:149 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:149 'P' ( uniform mediump 2-component vector of int)
+0:149 Constant:
+0:149 3 (const int)
+0:149 'dati' ( temp mediump int)
+0:150 imageAtomicCompSwap ( global highp uint)
+0:150 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:150 'P' ( uniform mediump 2-component vector of int)
+0:150 Constant:
+0:150 5 (const uint)
+0:150 'datu' ( temp mediump uint)
+0:152 imageAtomicMax ( global highp int)
+0:152 'badIm2Di' (layout( rgba16i) uniform highp iimage2D)
+0:152 'P' ( uniform mediump 2-component vector of int)
+0:152 'dati' ( temp mediump int)
+0:153 imageAtomicMax ( global highp uint)
+0:153 'badIm2Du' (layout( rgba8ui) uniform highp uimage2D)
+0:153 'P' ( uniform mediump 2-component vector of int)
+0:153 'datu' ( temp mediump uint)
+0:154 imageAtomicExchange ( global highp float)
+0:154 'badIm2Df' (layout( rgba32f) uniform highp image2D)
+0:154 'P' ( uniform mediump 2-component vector of int)
+0:154 'datf' ( temp mediump float)
+0:169 Function Definition: interp( ( global void)
+0:169 Function Parameters:
+0:? Sequence
+0:176 move second child to first child ( temp mediump 2-component vector of float)
+0:176 'res2' ( temp mediump 2-component vector of float)
+0:176 interpolateAtCentroid ( global mediump 2-component vector of float)
+0:176 'colorfc' ( centroid flat in mediump 2-component vector of float)
+0:177 move second child to first child ( temp mediump 4-component vector of float)
+0:177 'res4' ( temp mediump 4-component vector of float)
+0:177 interpolateAtCentroid ( global mediump 4-component vector of float)
+0:177 'colorSampIn' ( smooth sample in mediump 4-component vector of float)
+0:178 move second child to first child ( temp mediump 4-component vector of float)
+0:178 'res4' ( temp mediump 4-component vector of float)
+0:178 interpolateAtCentroid ( global mediump 4-component vector of float)
+0:178 'colorfsi' ( flat sample in mediump 4-component vector of float)
+0:179 move second child to first child ( temp mediump float)
+0:179 'res' ( temp mediump float)
+0:179 interpolateAtCentroid ( global mediump float)
+0:179 'scalarIn' ( smooth in mediump float)
+0:180 'res3' ( temp mediump 3-component vector of float)
+0:181 move second child to first child ( temp mediump 3-component vector of float)
+0:181 'res3' ( temp mediump 3-component vector of float)
+0:181 interpolateAtCentroid ( global mediump 3-component vector of float)
+0:181 direct index ( smooth sample temp mediump 3-component vector of float)
+0:181 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
+0:181 Constant:
+0:181 2 (const int)
+0:182 move second child to first child ( temp mediump 2-component vector of float)
+0:182 'res2' ( temp mediump 2-component vector of float)
+0:182 interpolateAtCentroid ( global mediump 2-component vector of float)
+0:182 vector swizzle ( temp mediump 2-component vector of float)
+0:182 direct index ( smooth sample temp mediump 3-component vector of float)
+0:182 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
+0:182 Constant:
+0:182 2 (const int)
+0:182 Sequence
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:184 'res3' ( temp mediump 3-component vector of float)
+0:185 move second child to first child ( temp mediump 3-component vector of float)
+0:185 'res3' ( temp mediump 3-component vector of float)
+0:185 interpolateAtSample ( global mediump 3-component vector of float)
+0:185 indirect index ( smooth sample temp mediump 3-component vector of float)
+0:185 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
+0:185 'i' ( uniform mediump int)
+0:185 Constant:
+0:185 0 (const int)
+0:186 move second child to first child ( temp mediump 2-component vector of float)
+0:186 'res2' ( temp mediump 2-component vector of float)
+0:186 interpolateAtSample ( global mediump 2-component vector of float)
+0:186 vector swizzle ( temp mediump 2-component vector of float)
+0:186 direct index ( smooth sample temp mediump 3-component vector of float)
+0:186 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
+0:186 Constant:
+0:186 2 (const int)
+0:186 Sequence
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 Constant:
+0:186 2 (const int)
+0:187 move second child to first child ( temp mediump float)
+0:187 'res' ( temp mediump float)
+0:187 interpolateAtSample ( global mediump float)
+0:187 'scalarIn' ( smooth in mediump float)
+0:187 Constant:
+0:187 1 (const int)
+0:189 'res3' ( temp mediump 3-component vector of float)
+0:190 move second child to first child ( temp mediump 3-component vector of float)
+0:190 'res3' ( temp mediump 3-component vector of float)
+0:190 interpolateAtOffset ( global mediump 3-component vector of float)
+0:190 direct index ( smooth sample temp mediump 3-component vector of float)
+0:190 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
+0:190 Constant:
+0:190 2 (const int)
+0:190 Constant:
+0:190 0.200000
+0:190 0.200000
+0:191 move second child to first child ( temp mediump 2-component vector of float)
+0:191 'res2' ( temp mediump 2-component vector of float)
+0:191 interpolateAtOffset ( global mediump 2-component vector of float)
+0:191 vector swizzle ( temp mediump 2-component vector of float)
+0:191 direct index ( smooth sample temp mediump 3-component vector of float)
+0:191 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
+0:191 Constant:
+0:191 2 (const int)
+0:191 Sequence
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 Constant:
+0:191 0.200000
+0:191 0.200000
+0:192 move second child to first child ( temp mediump float)
+0:192 'res' ( temp mediump float)
+0:192 interpolateAtOffset ( global mediump float)
+0:192 add ( temp mediump float)
+0:192 'scalarIn' ( smooth in mediump float)
+0:192 'scalarIn' ( smooth in mediump float)
+0:192 Constant:
+0:192 0.200000
+0:192 0.200000
+0:193 move second child to first child ( temp mediump float)
+0:193 'res' ( temp mediump float)
+0:193 interpolateAtOffset ( global mediump float)
+0:193 'scalarIn' ( smooth in mediump float)
+0:193 Constant:
+0:193 0.200000
+0:193 0.200000
+0:196 move second child to first child ( temp mediump float)
+0:196 'res' ( temp mediump float)
+0:196 interpolateAtCentroid ( global mediump float)
+0:196 'f' ( temp mediump float)
+0:197 'res4' ( temp mediump 4-component vector of float)
+0:221 Function Definition: blendFoo( ( temp void)
+0:221 Function Parameters:
+0:222 Function Definition: blendFoo(vf3; ( global void)
+0:222 Function Parameters:
+0:222 'v' ( in mediump 3-component vector of float)
+0:? Linker Objects
+0:? 'outbinst' ( out block{ out mediump int a})
+0:? 'inbinst' ( in block{ in mediump int a, in mediump 4-component vector of float v, in structure{ global mediump int b} s})
+0:? 'anon@0' ( in block{layout( location=12) in mediump int aAnon, layout( location=13) centroid in mediump 4-component vector of float vAnon})
+0:? 'aliased' (layout( location=13) smooth in mediump 4-component vector of float)
+0:? 'arrayedInst' ( in 4-element array of block{ in mediump float f})
+0:? 'i' ( uniform mediump int)
+0:? 'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:? 'gl_FragDepth' ( gl_FragDepth highp float FragDepth)
+0:? 'inf' ( smooth in mediump 2-component vector of float)
+0:? 'ing' ( smooth in mediump 2-component vector of float)
+0:? 'offsets' ( uniform 4-element array of mediump 2-component vector of int)
+0:? 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:? 'sIndex' ( uniform mediump int)
+0:? 'auArray' (layout( binding=0 offset=0) uniform 2-element array of highp atomic_uint)
+0:? 'ubInst' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform mediump int i})
+0:? 'bbInst' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer mediump int i})
+0:? 'iArray' ( writeonly uniform 5-element array of highp image2D)
+0:? 'constOffsets' ( const 4-element array of mediump 2-component vector of int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 'CA1' ( writeonly uniform highp imageCubeArray)
+0:? 'CA2' ( writeonly uniform highp iimageCubeArray)
+0:? 'CA3' ( writeonly uniform highp uimageCubeArray)
+0:? 'CA4' ( uniform highp samplerCubeArray)
+0:? 'CA5' ( uniform highp samplerCubeArrayShadow)
+0:? 'CA6' ( uniform highp isamplerCubeArray)
+0:? 'CA7' ( uniform highp usamplerCubeArray)
+0:? 'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
+0:? 'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:? 'im2Df' (layout( r32f) uniform highp image2D)
+0:? 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:? 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:? 'P' ( uniform mediump 2-component vector of int)
+0:? 'badIm2Df' (layout( rgba32f) uniform highp image2D)
+0:? 'badIm2Du' (layout( rgba8ui) uniform highp uimage2D)
+0:? 'badIm2Di' (layout( rgba16i) uniform highp iimage2D)
+0:? 'colorCentroidBad' ( centroid out mediump 4-component vector of float)
+0:? 'colorBadFlat' ( flat out mediump 4-component vector of float)
+0:? 'colorBadSmooth' ( smooth out mediump 4-component vector of float)
+0:? 'colorBadNo' ( noperspective out mediump 4-component vector of float)
+0:? 'colorfc' ( centroid flat in mediump 2-component vector of float)
+0:? 'scalarIn' ( smooth in mediump float)
+0:? 'colorSampIn' ( smooth sample in mediump 4-component vector of float)
+0:? 'colorSampleBad' ( sample out mediump 4-component vector of float)
+0:? 'colorfsi' ( flat sample in mediump 4-component vector of float)
+0:? 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
+0:? 'badout' ( out mediump 4-component vector of float)
+0:? 'outAA' ( out 2-element array of 2-element array of mediump 4-component vector of float)
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: when more than one fragment shader output, all must have location qualifiers
+
+Shader version: 320
+gl_FragCoord pixel center is integer
+gl_FragCoord origin is upper left
+using early_fragment_tests
+using depth_any
+using blend_support_multiply blend_support_screen blend_support_overlay blend_support_darken blend_support_lighten blend_support_colordodge blend_support_colorburn blend_support_hardlight blend_support_softlight blend_support_difference blend_support_exclusion blend_support_hsl_hue blend_support_hsl_saturation blend_support_hsl_color blend_support_hsl_luminosity blend_support_all_equations
+ERROR: node is still EOpNull!
+0:49 Function Definition: main( ( global void)
+0:49 Function Parameters:
+0:51 Sequence
+0:51 move second child to first child ( temp highp float)
+0:51 'gl_FragDepth' ( gl_FragDepth highp float FragDepth)
+0:51 Constant:
+0:51 0.200000
+0:52 Sequence
+0:52 move second child to first child ( temp bool)
+0:52 'f' ( temp bool)
+0:52 'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:? Linker Objects
+0:? 'outbinst' ( out block{ out mediump int a})
+0:? 'inbinst' ( in block{ in mediump int a, in mediump 4-component vector of float v, in structure{ global mediump int b} s})
+0:? 'anon@0' ( in block{layout( location=12) in mediump int aAnon, layout( location=13) centroid in mediump 4-component vector of float vAnon})
+0:? 'aliased' (layout( location=13) smooth in mediump 4-component vector of float)
+0:? 'arrayedInst' ( in 4-element array of block{ in mediump float f})
+0:? 'i' ( uniform mediump int)
+0:? 'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:? 'gl_FragDepth' ( gl_FragDepth highp float FragDepth)
+0:? 'inf' ( smooth in mediump 2-component vector of float)
+0:? 'ing' ( smooth in mediump 2-component vector of float)
+0:? 'offsets' ( uniform 4-element array of mediump 2-component vector of int)
+0:? 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:? 'sIndex' ( uniform mediump int)
+0:? 'auArray' (layout( binding=0 offset=0) uniform 2-element array of highp atomic_uint)
+0:? 'ubInst' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform mediump int i})
+0:? 'bbInst' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer mediump int i})
+0:? 'iArray' ( writeonly uniform 5-element array of highp image2D)
+0:? 'constOffsets' ( const 4-element array of mediump 2-component vector of int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 'CA1' ( writeonly uniform highp imageCubeArray)
+0:? 'CA2' ( writeonly uniform highp iimageCubeArray)
+0:? 'CA3' ( writeonly uniform highp uimageCubeArray)
+0:? 'CA4' ( uniform highp samplerCubeArray)
+0:? 'CA5' ( uniform highp samplerCubeArrayShadow)
+0:? 'CA6' ( uniform highp isamplerCubeArray)
+0:? 'CA7' ( uniform highp usamplerCubeArray)
+0:? 'gl_SampleMaskIn' ( flat in 1-element array of highp int SampleMaskIn)
+0:? 'gl_SampleMask' ( out 1-element array of highp int SampleMaskIn)
+0:? 'im2Df' (layout( r32f) uniform highp image2D)
+0:? 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:? 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:? 'P' ( uniform mediump 2-component vector of int)
+0:? 'badIm2Df' (layout( rgba32f) uniform highp image2D)
+0:? 'badIm2Du' (layout( rgba8ui) uniform highp uimage2D)
+0:? 'badIm2Di' (layout( rgba16i) uniform highp iimage2D)
+0:? 'colorCentroidBad' ( centroid out mediump 4-component vector of float)
+0:? 'colorBadFlat' ( flat out mediump 4-component vector of float)
+0:? 'colorBadSmooth' ( smooth out mediump 4-component vector of float)
+0:? 'colorBadNo' ( noperspective out mediump 4-component vector of float)
+0:? 'colorfc' ( centroid flat in mediump 2-component vector of float)
+0:? 'scalarIn' ( smooth in mediump float)
+0:? 'colorSampIn' ( smooth sample in mediump 4-component vector of float)
+0:? 'colorSampleBad' ( sample out mediump 4-component vector of float)
+0:? 'colorfsi' ( flat sample in mediump 4-component vector of float)
+0:? 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
+0:? 'badout' ( out mediump 4-component vector of float)
+0:? 'outAA' ( out 2-element array of 2-element array of mediump 4-component vector of float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.geom.out
new file mode 100644
index 00000000000..f3337660b50
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.geom.out
@@ -0,0 +1,251 @@
+320.geom
+ERROR: 0:19: 'fromVertex' : block instance name redefinition
+ERROR: 0:23: 'fromVertex' : redefinition
+ERROR: 0:25: 'fooC' : block instance name redefinition
+ERROR: 0:33: 'EmitStreamVertex' : no matching overloaded function found
+ERROR: 0:34: 'EndStreamPrimitive' : no matching overloaded function found
+ERROR: 0:37: 'gl_ClipDistance' : undeclared identifier
+ERROR: 0:37: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector
+ERROR: 0:38: 'gl_ClipDistance' : no such field in structure
+ERROR: 0:38: 'expression' : left of '[' is not of type array, matrix, or vector
+ERROR: 0:37: 'assign' : l-value required (can't modify a const)
+ERROR: 0:45: 'selecting output stream' : not supported with this profile: es
+ERROR: 0:52: 'max_vertices' : too large, must be less than gl_MaxGeometryOutputVertices
+ERROR: 0:52: 'max_vertices' : cannot change previously set layout value
+ERROR: 0:53: 'max_vertices' : can only apply to a standalone qualifier
+ERROR: 0:58: 'points' : cannot change previously set output primitive
+ERROR: 0:59: 'points' : cannot change previously set output primitive
+ERROR: 0:60: 'triangle_strip' : cannot apply to input
+ERROR: 0:61: 'triangle_strip' : cannot apply to: uniform
+ERROR: 0:62: 'triangle_strip' : can only apply to a standalone qualifier
+ERROR: 0:63: 'triangle_strip' : can only apply to a standalone qualifier
+ERROR: 0:64: 'invocations' : can only apply to a standalone qualifier
+ERROR: 0:66: 'invocations' : can only apply to a standalone qualifier
+ERROR: 0:67: 'max_vertices' : can only apply to a standalone qualifier
+ERROR: 0:68: 'triangle_strip' : can only apply to a standalone qualifier
+ERROR: 0:71: 'lines' : cannot apply to 'out'
+ERROR: 0:73: 'triangles' : cannot change previously set input primitive
+ERROR: 0:74: 'triangles_adjacency' : cannot change previously set input primitive
+ERROR: 0:106: 'gl_ViewportIndex' : undeclared identifier
+ERROR: 0:107: 'gl_MaxViewports' : undeclared identifier
+ERROR: 0:113: 'lines_adjacency' : inconsistent input primitive for array size of explArrayBad
+ERROR: 0:114: 'in' : type must be an array: nonArrayed
+ERROR: 0:122: 'component' : not supported with this profile: es
+ERROR: 0:126: 'gl_MaxGeometryVaryingComponents' : undeclared identifier
+ERROR: 0:127: 'gl_VerticesIn' : undeclared identifier
+ERROR: 0:132: 'gl_PointSize' : required extension not requested: Possible extensions include:
+GL_EXT_geometry_point_size
+GL_OES_geometry_point_size
+ERROR: 0:133: 'gl_PointSize' : required extension not requested: Possible extensions include:
+GL_EXT_geometry_point_size
+GL_OES_geometry_point_size
+ERROR: 36 compilation errors. No code generated.
+
+
+Shader version: 320
+invocations = 4
+max_vertices = 200
+input primitive = lines_adjacency
+output primitive = triangle_strip
+ERROR: node is still EOpNull!
+0:29 Function Definition: main( ( global void)
+0:29 Function Parameters:
+0:31 Sequence
+0:31 EmitVertex ( global void)
+0:32 EndPrimitive ( global void)
+0:33 Constant:
+0:33 0.000000
+0:34 Constant:
+0:34 0.000000
+0:36 move second child to first child ( temp mediump 3-component vector of float)
+0:36 color: direct index for structure (layout( stream=0) out mediump 3-component vector of float)
+0:36 'anon@0' (layout( stream=0) out block{layout( stream=0) out mediump 3-component vector of float color})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 color: direct index for structure ( in mediump 3-component vector of float)
+0:36 direct index ( temp block{ in mediump 3-component vector of float color})
+0:36 'fromV' ( in 4-element array of block{ in mediump 3-component vector of float color})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:37 move second child to first child ( temp float)
+0:37 Constant:
+0:37 0.000000
+0:38 Constant:
+0:38 0.000000
+0:39 move second child to first child ( temp highp 4-component vector of float)
+0:39 gl_Position: direct index for structure (layout( stream=0) gl_Position highp 4-component vector of float Position)
+0:39 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position highp 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize highp float PointSize gl_PointSize})
+0:39 Constant:
+0:39 0 (const uint)
+0:39 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
+0:39 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
+0:39 'gl_in' ( in 4-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:41 move second child to first child ( temp highp int)
+0:41 'gl_PrimitiveID' (layout( stream=0) out highp int PrimitiveID)
+0:41 'gl_PrimitiveIDIn' ( in highp int PrimitiveID)
+0:42 move second child to first child ( temp highp int)
+0:42 'gl_Layer' (layout( stream=0) out highp int Layer)
+0:42 Constant:
+0:42 2 (const int)
+0:53 Function Definition: foo(i1; ( global void)
+0:53 Function Parameters:
+0:53 'a' ( in highp int)
+0:55 Sequence
+0:55 move second child to first child ( temp mediump 4-component vector of float)
+0:55 a: direct index for structure (layout( stream=0) out mediump 4-component vector of float)
+0:55 'ouuaa6' (layout( stream=0) out block{layout( stream=0) out mediump 4-component vector of float a})
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1.000000
+0:55 1.000000
+0:55 1.000000
+0:55 1.000000
+0:104 Function Definition: fooe1( ( global void)
+0:104 Function Parameters:
+0:106 Sequence
+0:106 'gl_ViewportIndex' ( temp float)
+0:107 'gl_MaxViewports' ( temp float)
+0:108 Constant:
+0:108 4 (const int)
+0:109 Sequence
+0:109 move second child to first child ( temp highp int)
+0:109 'inv' ( temp highp int)
+0:109 'gl_InvocationID' ( in highp int InvocationID)
+0:124 Function Definition: notHere( ( global void)
+0:124 Function Parameters:
+0:126 Sequence
+0:126 'gl_MaxGeometryVaryingComponents' ( temp float)
+0:127 'gl_VerticesIn' ( temp float)
+0:130 Function Definition: pointSize2( ( global void)
+0:130 Function Parameters:
+0:132 Sequence
+0:132 Sequence
+0:132 move second child to first child ( temp highp float)
+0:132 'ps' ( temp highp float)
+0:132 gl_PointSize: direct index for structure ( in highp float PointSize)
+0:132 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
+0:132 'gl_in' ( in 4-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
+0:132 Constant:
+0:132 3 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:133 move second child to first child ( temp highp float)
+0:133 gl_PointSize: direct index for structure (layout( stream=0) gl_PointSize highp float PointSize)
+0:133 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position highp 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize highp float PointSize gl_PointSize})
+0:133 Constant:
+0:133 1 (const uint)
+0:133 'ps' ( temp highp float)
+0:? Linker Objects
+0:? 'fromV' ( in 4-element array of block{ in mediump 3-component vector of float color})
+0:? 'nonBlockUnsized' ( in 4-element array of mediump 4-component vector of float)
+0:? 'toF' (layout( stream=0) out block{layout( stream=0) out mediump 3-component vector of float color})
+0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) out mediump 3-component vector of float color})
+0:? 'gl_in' ( in 4-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
+0:? 'ov4' (layout( stream=4) out mediump 4-component vector of float)
+0:? 'ouuaa6' (layout( stream=0) out block{layout( stream=0) out mediump 4-component vector of float a})
+0:? 'badv4' (layout( stream=0) out mediump 4-component vector of float)
+0:? 'bad2v4' ( in 4-element array of mediump 4-component vector of float)
+0:? 'anon@1' (layout( stream=0) out block{layout( stream=0) out highp int a})
+0:? 'outbi' (layout( stream=0) out block{layout( stream=0) out highp int a, layout( stream=0) out highp int b, layout( stream=0) out highp int c})
+0:? 'insn' ( in 4-element array of block{ in highp int a15})
+0:? 'anon@2' (layout( stream=0) out block{layout( stream=0) out mediump float f15})
+0:? 'anon@3' (layout( column_major shared) uniform block{layout( column_major shared) uniform bool b15})
+0:? 'summ' ( const highp int)
+0:? 2752 (const int)
+0:? 'explArray' ( in 4-element array of mediump 4-component vector of float)
+0:? 'explArrayBad' ( in 5-element array of mediump 4-component vector of float)
+0:? 'nonArrayed' ( in mediump 4-component vector of float)
+0:? 'myColor1' (layout( stream=0) flat out mediump 3-component vector of float)
+0:? 'myColor2' (layout( stream=0) centroid out mediump 3-component vector of float)
+0:? 'centr' ( centroid in 4-element array of mediump 3-component vector of float)
+0:? 'perSampleColor' (layout( stream=0) sample out mediump 4-component vector of float)
+0:? 'comp' (layout( location=7 component=2) in 4-element array of mediump float)
+
+
+Linked geometry stage:
+
+
+Shader version: 320
+invocations = 4
+max_vertices = 200
+input primitive = lines_adjacency
+output primitive = triangle_strip
+ERROR: node is still EOpNull!
+0:29 Function Definition: main( ( global void)
+0:29 Function Parameters:
+0:31 Sequence
+0:31 EmitVertex ( global void)
+0:32 EndPrimitive ( global void)
+0:33 Constant:
+0:33 0.000000
+0:34 Constant:
+0:34 0.000000
+0:36 move second child to first child ( temp mediump 3-component vector of float)
+0:36 color: direct index for structure (layout( stream=0) out mediump 3-component vector of float)
+0:36 'anon@0' (layout( stream=0) out block{layout( stream=0) out mediump 3-component vector of float color})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 color: direct index for structure ( in mediump 3-component vector of float)
+0:36 direct index ( temp block{ in mediump 3-component vector of float color})
+0:36 'fromV' ( in 4-element array of block{ in mediump 3-component vector of float color})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:37 move second child to first child ( temp float)
+0:37 Constant:
+0:37 0.000000
+0:38 Constant:
+0:38 0.000000
+0:39 move second child to first child ( temp highp 4-component vector of float)
+0:39 gl_Position: direct index for structure (layout( stream=0) gl_Position highp 4-component vector of float Position)
+0:39 'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position highp 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize highp float PointSize gl_PointSize})
+0:39 Constant:
+0:39 0 (const uint)
+0:39 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
+0:39 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
+0:39 'gl_in' ( in 4-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:41 move second child to first child ( temp highp int)
+0:41 'gl_PrimitiveID' (layout( stream=0) out highp int PrimitiveID)
+0:41 'gl_PrimitiveIDIn' ( in highp int PrimitiveID)
+0:42 move second child to first child ( temp highp int)
+0:42 'gl_Layer' (layout( stream=0) out highp int Layer)
+0:42 Constant:
+0:42 2 (const int)
+0:? Linker Objects
+0:? 'fromV' ( in 4-element array of block{ in mediump 3-component vector of float color})
+0:? 'nonBlockUnsized' ( in 4-element array of mediump 4-component vector of float)
+0:? 'toF' (layout( stream=0) out block{layout( stream=0) out mediump 3-component vector of float color})
+0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) out mediump 3-component vector of float color})
+0:? 'gl_in' ( in 4-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
+0:? 'ov4' (layout( stream=4) out mediump 4-component vector of float)
+0:? 'ouuaa6' (layout( stream=0) out block{layout( stream=0) out mediump 4-component vector of float a})
+0:? 'badv4' (layout( stream=0) out mediump 4-component vector of float)
+0:? 'bad2v4' ( in 4-element array of mediump 4-component vector of float)
+0:? 'anon@1' (layout( stream=0) out block{layout( stream=0) out highp int a})
+0:? 'outbi' (layout( stream=0) out block{layout( stream=0) out highp int a, layout( stream=0) out highp int b, layout( stream=0) out highp int c})
+0:? 'insn' ( in 4-element array of block{ in highp int a15})
+0:? 'anon@2' (layout( stream=0) out block{layout( stream=0) out mediump float f15})
+0:? 'anon@3' (layout( column_major shared) uniform block{layout( column_major shared) uniform bool b15})
+0:? 'summ' ( const highp int)
+0:? 2752 (const int)
+0:? 'explArray' ( in 4-element array of mediump 4-component vector of float)
+0:? 'explArrayBad' ( in 5-element array of mediump 4-component vector of float)
+0:? 'nonArrayed' ( in mediump 4-component vector of float)
+0:? 'myColor1' (layout( stream=0) flat out mediump 3-component vector of float)
+0:? 'myColor2' (layout( stream=0) centroid out mediump 3-component vector of float)
+0:? 'centr' ( centroid in 4-element array of mediump 3-component vector of float)
+0:? 'perSampleColor' (layout( stream=0) sample out mediump 4-component vector of float)
+0:? 'comp' (layout( location=7 component=2) in 4-element array of mediump float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tesc.out
new file mode 100644
index 00000000000..ff8012b1f1d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tesc.out
@@ -0,0 +1,516 @@
+320.tesc
+ERROR: 0:6: 'quads' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
+ERROR: 0:7: 'ccw' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
+ERROR: 0:8: 'fractional_even_spacing' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
+ERROR: 0:10: 'patch' : can only use on output in tessellation-control shader
+ERROR: 0:24: 'gl_PointSize' : required extension not requested: Possible extensions include:
+GL_EXT_tessellation_point_size
+GL_OES_tessellation_point_size
+ERROR: 0:25: 'gl_ClipDistance' : no such field in structure
+ERROR: 0:25: 'expression' : left of '[' is not of type array, matrix, or vector
+ERROR: 0:32: 'gl_PointSize' : required extension not requested: Possible extensions include:
+GL_EXT_tessellation_point_size
+GL_OES_tessellation_point_size
+ERROR: 0:33: 'gl_ClipDistance' : no such field in structure
+ERROR: 0:33: 'expression' : left of '[' is not of type array, matrix, or vector
+ERROR: 0:33: 'assign' : l-value required (can't modify a const)
+ERROR: 0:39: '' : tessellation control barrier() cannot be placed within flow control
+ERROR: 0:41: '' : tessellation control barrier() cannot be placed within flow control
+ERROR: 0:46: '' : tessellation control barrier() cannot be placed within flow control
+ERROR: 0:51: '' : tessellation control barrier() cannot be placed within flow control
+ERROR: 0:54: '' : tessellation control barrier() cannot be placed within flow control
+ERROR: 0:61: '' : tessellation control barrier() cannot be placed after a return from main()
+ERROR: 0:64: 'vertices' : can only apply to 'out'
+ERROR: 0:65: 'vertices' : cannot change previously set layout value
+ERROR: 0:69: '[' : array index out of range '4'
+ERROR: 0:71: '' : tessellation control barrier() must be in main()
+ERROR: 0:74: 'in' : type must be an array: ina
+ERROR: 0:76: '[]' : tessellation input array size must be gl_MaxPatchVertices or implicitly sized
+ERROR: 0:78: '' : array size required
+ERROR: 0:84: 'location' : overlapping use of location 4
+ERROR: 0:88: 'location' : overlapping use of location 4
+ERROR: 0:98: 'vertices' : can only apply to a standalone qualifier
+ERROR: 0:99: 'vertices' : inconsistent output number of vertices for array size of misSized
+ERROR: 0:104: 'gl_PointSize' : required extension not requested: Possible extensions include:
+GL_EXT_tessellation_point_size
+GL_OES_tessellation_point_size
+ERROR: 0:105: 'gl_PointSize' : required extension not requested: Possible extensions include:
+GL_EXT_tessellation_point_size
+GL_OES_tessellation_point_size
+ERROR: 0:123: '[' : array index out of range '2'
+ERROR: 0:126: '' : array size required
+ERROR: 0:142: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
+ERROR: 0:143: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
+ERROR: 0:146: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
+ERROR: 35 compilation errors. No code generated.
+
+
+Shader version: 320
+Requested GL_ARB_separate_shader_objects
+vertices = 4
+ERROR: node is still EOpNull!
+0:13 Function Definition: main( ( global void)
+0:13 Function Parameters:
+0:15 Sequence
+0:15 Barrier ( global void)
+0:17 Sequence
+0:17 move second child to first child ( temp highp int)
+0:17 'a' ( temp highp int)
+0:17 Constant:
+0:17 5392 (const int)
+0:23 Sequence
+0:23 move second child to first child ( temp highp 4-component vector of float)
+0:23 'p' ( temp highp 4-component vector of float)
+0:23 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
+0:23 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:24 Sequence
+0:24 move second child to first child ( temp highp float)
+0:24 'ps' ( temp highp float)
+0:24 gl_PointSize: direct index for structure ( in highp float PointSize)
+0:24 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:25 Sequence
+0:25 move second child to first child ( temp highp float)
+0:25 'cd' ( temp highp float)
+0:25 Constant:
+0:25 0.000000
+0:27 Sequence
+0:27 move second child to first child ( temp highp int)
+0:27 'pvi' ( temp highp int)
+0:27 'gl_PatchVerticesIn' ( in highp int PatchVertices)
+0:28 Sequence
+0:28 move second child to first child ( temp highp int)
+0:28 'pid' ( temp highp int)
+0:28 'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:29 Sequence
+0:29 move second child to first child ( temp highp int)
+0:29 'iid' ( temp highp int)
+0:29 'gl_InvocationID' ( in highp int InvocationID)
+0:31 move second child to first child ( temp highp 4-component vector of float)
+0:31 gl_Position: direct index for structure ( out highp 4-component vector of float Position)
+0:31 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:31 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:31 'gl_InvocationID' ( in highp int InvocationID)
+0:31 Constant:
+0:31 0 (const int)
+0:31 'p' ( temp highp 4-component vector of float)
+0:32 move second child to first child ( temp highp float)
+0:32 gl_PointSize: direct index for structure ( out highp float PointSize)
+0:32 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:32 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:32 'gl_InvocationID' ( in highp int InvocationID)
+0:32 Constant:
+0:32 1 (const int)
+0:32 'ps' ( temp highp float)
+0:33 move second child to first child ( temp highp float)
+0:33 Constant:
+0:33 0.000000
+0:33 'cd' ( temp highp float)
+0:35 move second child to first child ( temp highp float)
+0:35 direct index ( patch temp highp float TessLevelOuter)
+0:35 'gl_TessLevelOuter' ( patch out 4-element array of highp float TessLevelOuter)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Constant:
+0:35 3.200000
+0:36 move second child to first child ( temp highp float)
+0:36 direct index ( patch temp highp float TessLevelInner)
+0:36 'gl_TessLevelInner' ( patch out 2-element array of highp float TessLevelInner)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1.300000
+0:38 Test condition and select ( temp void)
+0:38 Condition
+0:38 Compare Greater Than ( temp bool)
+0:38 'a' ( temp highp int)
+0:38 Constant:
+0:38 10 (const int)
+0:38 true case
+0:39 Barrier ( global void)
+0:38 false case
+0:41 Barrier ( global void)
+0:43 Barrier ( global void)
+0:47 Loop with condition not tested first
+0:47 Loop Condition
+0:47 Compare Greater Than ( temp bool)
+0:47 'a' ( temp highp int)
+0:47 Constant:
+0:47 10 (const int)
+0:47 Loop Body
+0:46 Sequence
+0:46 Barrier ( global void)
+0:49 switch
+0:49 condition
+0:49 'a' ( temp highp int)
+0:49 body
+0:49 Sequence
+0:50 default:
+0:? Sequence
+0:51 Barrier ( global void)
+0:52 Branch: Break
+0:54 Test condition and select ( temp highp int)
+0:54 Condition
+0:54 Compare Less Than ( temp bool)
+0:54 'a' ( temp highp int)
+0:54 Constant:
+0:54 12 (const int)
+0:54 true case
+0:54 'a' ( temp highp int)
+0:54 false case
+0:54 Comma ( temp highp int)
+0:54 Barrier ( global void)
+0:54 'a' ( temp highp int)
+0:56 Sequence
+0:56 Barrier ( global void)
+0:59 Branch: Return
+0:61 Barrier ( global void)
+0:67 Function Definition: foo( ( global void)
+0:67 Function Parameters:
+0:69 Sequence
+0:69 gl_Position: direct index for structure ( out highp 4-component vector of float Position)
+0:69 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:69 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:69 Constant:
+0:69 4 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:71 Barrier ( global void)
+0:102 Function Definition: pointSize2( ( global void)
+0:102 Function Parameters:
+0:104 Sequence
+0:104 Sequence
+0:104 move second child to first child ( temp highp float)
+0:104 'ps' ( temp highp float)
+0:104 gl_PointSize: direct index for structure ( in highp float PointSize)
+0:104 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:104 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:105 move second child to first child ( temp highp float)
+0:105 gl_PointSize: direct index for structure ( out highp float PointSize)
+0:105 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:105 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:105 'gl_InvocationID' ( in highp int InvocationID)
+0:105 Constant:
+0:105 1 (const int)
+0:105 'ps' ( temp highp float)
+0:110 Function Definition: goodfoop( ( global void)
+0:110 Function Parameters:
+0:? Sequence
+0:114 multiply second child into first child ( temp highp 3-component vector of float)
+0:114 'pv3' ( noContraction temp highp 3-component vector of float)
+0:114 'pv3' ( noContraction temp highp 3-component vector of float)
+0:115 move second child to first child ( temp highp 3-component vector of float)
+0:115 'pv3' ( noContraction temp highp 3-component vector of float)
+0:115 fma ( global highp 3-component vector of float)
+0:115 'pv3' ( noContraction temp highp 3-component vector of float)
+0:115 'pv3' ( noContraction temp highp 3-component vector of float)
+0:115 'pv3' ( noContraction temp highp 3-component vector of float)
+0:116 move second child to first child ( temp highp float)
+0:116 'd' ( noContraction temp highp float)
+0:116 fma ( global highp float)
+0:116 'd' ( noContraction temp highp float)
+0:116 'd' ( noContraction temp highp float)
+0:116 'd' ( noContraction temp highp float)
+0:119 Function Definition: bb( ( global void)
+0:119 Function Parameters:
+0:121 Sequence
+0:121 move second child to first child ( temp highp 4-component vector of float)
+0:121 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:121 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 0.000000
+0:121 0.000000
+0:121 0.000000
+0:121 0.000000
+0:122 move second child to first child ( temp highp 4-component vector of float)
+0:122 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:122 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:122 Constant:
+0:122 1 (const int)
+0:122 Constant:
+0:122 1.000000
+0:122 1.000000
+0:122 1.000000
+0:122 1.000000
+0:123 move second child to first child ( temp highp 4-component vector of float)
+0:123 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:123 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:123 Constant:
+0:123 2 (const int)
+0:123 Constant:
+0:123 2.000000
+0:123 2.000000
+0:123 2.000000
+0:123 2.000000
+0:134 Function Definition: outputtingOutparam(i1; ( global void)
+0:134 Function Parameters:
+0:134 'a' ( out highp int)
+0:136 Sequence
+0:136 move second child to first child ( temp highp int)
+0:136 'a' ( out highp int)
+0:136 Constant:
+0:136 2 (const int)
+0:139 Function Definition: outputting( ( global void)
+0:139 Function Parameters:
+0:141 Sequence
+0:141 move second child to first child ( temp highp int)
+0:141 indirect index ( temp highp int)
+0:141 'outa' ( out 4-element array of highp int)
+0:141 'gl_InvocationID' ( in highp int InvocationID)
+0:141 Constant:
+0:141 2 (const int)
+0:142 move second child to first child ( temp highp int)
+0:142 direct index ( temp highp int)
+0:142 'outa' ( out 4-element array of highp int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 2 (const int)
+0:143 move second child to first child ( temp highp 4-component vector of float)
+0:143 gl_Position: direct index for structure ( out highp 4-component vector of float Position)
+0:143 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:143 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:143 Constant:
+0:143 0 (const int)
+0:143 Constant:
+0:143 0 (const int)
+0:143 Constant:
+0:143 1.000000
+0:143 1.000000
+0:143 1.000000
+0:143 1.000000
+0:144 direct index ( temp highp int)
+0:144 'outa' ( out 4-element array of highp int)
+0:144 Constant:
+0:144 1 (const int)
+0:145 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:145 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:145 Constant:
+0:145 0 (const int)
+0:146 Function Call: outputtingOutparam(i1; ( global void)
+0:146 direct index ( temp highp int)
+0:146 'outa' ( out 4-element array of highp int)
+0:146 Constant:
+0:146 0 (const int)
+0:147 Function Call: outputtingOutparam(i1; ( global void)
+0:147 indirect index ( temp highp int)
+0:147 'outa' ( out 4-element array of highp int)
+0:147 'gl_InvocationID' ( in highp int InvocationID)
+0:148 move second child to first child ( temp highp float)
+0:148 f: direct index for structure ( out highp float)
+0:148 direct index ( patch temp block{ out highp float f})
+0:148 'patchIName' ( patch out 4-element array of block{ out highp float f})
+0:148 Constant:
+0:148 1 (const int)
+0:148 Constant:
+0:148 0 (const int)
+0:148 Constant:
+0:148 3.140000
+0:149 move second child to first child ( temp highp int)
+0:149 indirect index ( temp highp int)
+0:149 'outa' ( out 4-element array of highp int)
+0:149 'gl_InvocationID' ( in highp int InvocationID)
+0:149 Constant:
+0:149 2 (const int)
+0:? Linker Objects
+0:? 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:? 'outa' ( out 4-element array of highp int)
+0:? 'patchIn' ( patch in highp 4-component vector of float)
+0:? 'patchOut' ( patch out highp 4-component vector of float)
+0:? 'ina' ( in highp 2-component vector of float)
+0:? 'inb' ( in 32-element array of highp 2-component vector of float)
+0:? 'inc' ( in 32-element array of highp 2-component vector of float)
+0:? 'ind' ( in 32-element array of highp 2-component vector of float)
+0:? 'implA' ( patch out implicitly-sized array of highp float)
+0:? 'ivla' (layout( location=3) in 32-element array of highp 4-component vector of float)
+0:? 'ivlb' (layout( location=4) in 32-element array of highp 4-component vector of float)
+0:? 'ivlc' (layout( location=4) in 32-element array of highp 4-component vector of float)
+0:? 'ovla' (layout( location=3) out 4-element array of highp 4-component vector of float)
+0:? 'ovlb' (layout( location=4) out 4-element array of highp 4-component vector of float)
+0:? 'ovlc' (layout( location=4) out 4-element array of highp 4-component vector of float)
+0:? 'pinbi' ( patch out block{ out highp int a})
+0:? 'myColor2' ( centroid out 4-element array of highp 3-component vector of float)
+0:? 'centr' ( centroid in 32-element array of highp 3-component vector of float)
+0:? 'perSampleColor' ( sample out 4-element array of highp 4-component vector of float)
+0:? 'badlay' ( out 4-element array of highp float)
+0:? 'misSized' ( out 5-element array of highp float)
+0:? 'okaySize' ( out 4-element array of highp float)
+0:? 'pv3' ( noContraction temp highp 3-component vector of float)
+0:? 'badpatchIName' ( patch out implicitly-sized array of block{ out highp float f})
+0:? 'patchIName' ( patch out 4-element array of block{ out highp float f})
+
+
+Linked tessellation control stage:
+
+
+Shader version: 320
+Requested GL_ARB_separate_shader_objects
+vertices = 4
+ERROR: node is still EOpNull!
+0:13 Function Definition: main( ( global void)
+0:13 Function Parameters:
+0:15 Sequence
+0:15 Barrier ( global void)
+0:17 Sequence
+0:17 move second child to first child ( temp highp int)
+0:17 'a' ( temp highp int)
+0:17 Constant:
+0:17 5392 (const int)
+0:23 Sequence
+0:23 move second child to first child ( temp highp 4-component vector of float)
+0:23 'p' ( temp highp 4-component vector of float)
+0:23 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
+0:23 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:24 Sequence
+0:24 move second child to first child ( temp highp float)
+0:24 'ps' ( temp highp float)
+0:24 gl_PointSize: direct index for structure ( in highp float PointSize)
+0:24 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:25 Sequence
+0:25 move second child to first child ( temp highp float)
+0:25 'cd' ( temp highp float)
+0:25 Constant:
+0:25 0.000000
+0:27 Sequence
+0:27 move second child to first child ( temp highp int)
+0:27 'pvi' ( temp highp int)
+0:27 'gl_PatchVerticesIn' ( in highp int PatchVertices)
+0:28 Sequence
+0:28 move second child to first child ( temp highp int)
+0:28 'pid' ( temp highp int)
+0:28 'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:29 Sequence
+0:29 move second child to first child ( temp highp int)
+0:29 'iid' ( temp highp int)
+0:29 'gl_InvocationID' ( in highp int InvocationID)
+0:31 move second child to first child ( temp highp 4-component vector of float)
+0:31 gl_Position: direct index for structure ( out highp 4-component vector of float Position)
+0:31 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:31 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:31 'gl_InvocationID' ( in highp int InvocationID)
+0:31 Constant:
+0:31 0 (const int)
+0:31 'p' ( temp highp 4-component vector of float)
+0:32 move second child to first child ( temp highp float)
+0:32 gl_PointSize: direct index for structure ( out highp float PointSize)
+0:32 indirect index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:32 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:32 'gl_InvocationID' ( in highp int InvocationID)
+0:32 Constant:
+0:32 1 (const int)
+0:32 'ps' ( temp highp float)
+0:33 move second child to first child ( temp highp float)
+0:33 Constant:
+0:33 0.000000
+0:33 'cd' ( temp highp float)
+0:35 move second child to first child ( temp highp float)
+0:35 direct index ( patch temp highp float TessLevelOuter)
+0:35 'gl_TessLevelOuter' ( patch out 4-element array of highp float TessLevelOuter)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Constant:
+0:35 3.200000
+0:36 move second child to first child ( temp highp float)
+0:36 direct index ( patch temp highp float TessLevelInner)
+0:36 'gl_TessLevelInner' ( patch out 2-element array of highp float TessLevelInner)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1.300000
+0:38 Test condition and select ( temp void)
+0:38 Condition
+0:38 Compare Greater Than ( temp bool)
+0:38 'a' ( temp highp int)
+0:38 Constant:
+0:38 10 (const int)
+0:38 true case
+0:39 Barrier ( global void)
+0:38 false case
+0:41 Barrier ( global void)
+0:43 Barrier ( global void)
+0:47 Loop with condition not tested first
+0:47 Loop Condition
+0:47 Compare Greater Than ( temp bool)
+0:47 'a' ( temp highp int)
+0:47 Constant:
+0:47 10 (const int)
+0:47 Loop Body
+0:46 Sequence
+0:46 Barrier ( global void)
+0:49 switch
+0:49 condition
+0:49 'a' ( temp highp int)
+0:49 body
+0:49 Sequence
+0:50 default:
+0:? Sequence
+0:51 Barrier ( global void)
+0:52 Branch: Break
+0:54 Test condition and select ( temp highp int)
+0:54 Condition
+0:54 Compare Less Than ( temp bool)
+0:54 'a' ( temp highp int)
+0:54 Constant:
+0:54 12 (const int)
+0:54 true case
+0:54 'a' ( temp highp int)
+0:54 false case
+0:54 Comma ( temp highp int)
+0:54 Barrier ( global void)
+0:54 'a' ( temp highp int)
+0:56 Sequence
+0:56 Barrier ( global void)
+0:59 Branch: Return
+0:61 Barrier ( global void)
+0:? Linker Objects
+0:? 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:? 'outa' ( out 4-element array of highp int)
+0:? 'patchIn' ( patch in highp 4-component vector of float)
+0:? 'patchOut' ( patch out highp 4-component vector of float)
+0:? 'ina' ( in highp 2-component vector of float)
+0:? 'inb' ( in 32-element array of highp 2-component vector of float)
+0:? 'inc' ( in 32-element array of highp 2-component vector of float)
+0:? 'ind' ( in 32-element array of highp 2-component vector of float)
+0:? 'implA' ( patch out 1-element array of highp float)
+0:? 'ivla' (layout( location=3) in 32-element array of highp 4-component vector of float)
+0:? 'ivlb' (layout( location=4) in 32-element array of highp 4-component vector of float)
+0:? 'ivlc' (layout( location=4) in 32-element array of highp 4-component vector of float)
+0:? 'ovla' (layout( location=3) out 4-element array of highp 4-component vector of float)
+0:? 'ovlb' (layout( location=4) out 4-element array of highp 4-component vector of float)
+0:? 'ovlc' (layout( location=4) out 4-element array of highp 4-component vector of float)
+0:? 'pinbi' ( patch out block{ out highp int a})
+0:? 'myColor2' ( centroid out 4-element array of highp 3-component vector of float)
+0:? 'centr' ( centroid in 32-element array of highp 3-component vector of float)
+0:? 'perSampleColor' ( sample out 4-element array of highp 4-component vector of float)
+0:? 'badlay' ( out 4-element array of highp float)
+0:? 'misSized' ( out 5-element array of highp float)
+0:? 'okaySize' ( out 4-element array of highp float)
+0:? 'pv3' ( noContraction temp highp 3-component vector of float)
+0:? 'badpatchIName' ( patch out 1-element array of block{ out highp float f})
+0:? 'patchIName' ( patch out 4-element array of block{ out highp float f})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tese.out
new file mode 100644
index 00000000000..ad8fe72e3fe
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tese.out
@@ -0,0 +1,276 @@
+320.tese
+ERROR: 0:3: 'vertices' : there is no such layout identifier for this stage taking an assigned value
+ERROR: 0:5: 'triangles' : cannot change previously set input primitive
+ERROR: 0:6: 'isolines' : cannot change previously set input primitive
+ERROR: 0:8: 'ccw' : cannot change previously set vertex order
+ERROR: 0:12: 'equal_spacing' : cannot change previously set vertex spacing
+ERROR: 0:13: 'fractional_even_spacing' : cannot change previously set vertex spacing
+ERROR: 0:18: 'patch' : can only use on input in tessellation-evaluation shader
+ERROR: 0:22: 'barrier' : no matching overloaded function found
+ERROR: 0:33: 'gl_PointSize' : required extension not requested: Possible extensions include:
+GL_EXT_tessellation_point_size
+GL_OES_tessellation_point_size
+ERROR: 0:34: 'gl_ClipDistance' : no such field in structure
+ERROR: 0:34: 'expression' : left of '[' is not of type array, matrix, or vector
+ERROR: 0:43: 'gl_PointSize' : required extension not requested: Possible extensions include:
+GL_EXT_tessellation_point_size
+GL_OES_tessellation_point_size
+ERROR: 0:44: 'gl_ClipDistance' : undeclared identifier
+ERROR: 0:44: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector
+ERROR: 0:44: 'assign' : l-value required (can't modify a const)
+ERROR: 0:47: 'patch' : cannot use interpolation qualifiers with patch
+ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch
+ERROR: 0:49: 'noperspective' : Reserved word.
+ERROR: 0:49: 'noperspective' : not supported with this profile: es
+ERROR: 0:49: 'patch' : cannot use interpolation qualifiers with patch
+ERROR: 0:50: '' : can only have one auxiliary qualifier (centroid, patch, and sample)
+ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized
+ERROR: 0:59: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use
+ERROR: 0:64: 'quads' : cannot apply to 'out'
+ERROR: 0:64: 'cw' : can only apply to 'in'
+ERROR: 0:65: 'triangles' : cannot apply to 'out'
+ERROR: 0:66: 'isolines' : cannot apply to 'out'
+ERROR: 0:67: 'cw' : can only apply to 'in'
+ERROR: 0:68: 'fractional_odd_spacing' : can only apply to 'in'
+ERROR: 0:69: 'equal_spacing' : can only apply to 'in'
+ERROR: 0:70: 'fractional_even_spacing' : can only apply to 'in'
+ERROR: 0:71: 'point_mode' : can only apply to 'in'
+ERROR: 0:73: 'in' : type must be an array: ina
+ERROR: 0:75: '[]' : tessellation input array size must be gl_MaxPatchVertices or implicitly sized
+ERROR: 0:78: 'in' : type must be an array: bla
+ERROR: 0:86: '[]' : tessellation input array size must be gl_MaxPatchVertices or implicitly sized
+ERROR: 0:96: 'location' : overlapping use of location 24
+ERROR: 0:99: 'location' : overlapping use of location 24
+ERROR: 0:101: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved
+ERROR: 0:113: 'gl_BoundingBoxOES' : undeclared identifier
+ERROR: 40 compilation errors. No code generated.
+
+
+Shader version: 320
+Requested GL_ARB_separate_shader_objects
+input primitive = quads
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+using point mode
+ERROR: node is still EOpNull!
+0:20 Function Definition: main( ( global void)
+0:20 Function Parameters:
+0:22 Sequence
+0:22 Constant:
+0:22 0.000000
+0:24 Sequence
+0:24 move second child to first child ( temp highp int)
+0:24 'a' ( temp highp int)
+0:24 Constant:
+0:24 1512 (const int)
+0:32 Sequence
+0:32 move second child to first child ( temp highp 4-component vector of float)
+0:32 'p' ( temp highp 4-component vector of float)
+0:32 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
+0:32 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32 Constant:
+0:32 1 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:33 Sequence
+0:33 move second child to first child ( temp highp float)
+0:33 'ps' ( temp highp float)
+0:33 gl_PointSize: direct index for structure ( in highp float PointSize)
+0:33 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:34 Sequence
+0:34 move second child to first child ( temp highp float)
+0:34 'cd' ( temp highp float)
+0:34 Constant:
+0:34 0.000000
+0:36 Sequence
+0:36 move second child to first child ( temp highp int)
+0:36 'pvi' ( temp highp int)
+0:36 'gl_PatchVerticesIn' ( in highp int PatchVertices)
+0:37 Sequence
+0:37 move second child to first child ( temp highp int)
+0:37 'pid' ( temp highp int)
+0:37 'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:38 Sequence
+0:38 move second child to first child ( temp highp 3-component vector of float)
+0:38 'tc' ( temp highp 3-component vector of float)
+0:38 'gl_TessCoord' ( in highp 3-component vector of float TessCoord)
+0:39 Sequence
+0:39 move second child to first child ( temp highp float)
+0:39 'tlo' ( temp highp float)
+0:39 direct index ( patch temp highp float TessLevelOuter)
+0:39 'gl_TessLevelOuter' ( patch in 4-element array of highp float TessLevelOuter)
+0:39 Constant:
+0:39 3 (const int)
+0:40 Sequence
+0:40 move second child to first child ( temp highp float)
+0:40 'tli' ( temp highp float)
+0:40 direct index ( patch temp highp float TessLevelInner)
+0:40 'gl_TessLevelInner' ( patch in 2-element array of highp float TessLevelInner)
+0:40 Constant:
+0:40 1 (const int)
+0:42 move second child to first child ( temp highp 4-component vector of float)
+0:42 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:42 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize})
+0:42 Constant:
+0:42 0 (const uint)
+0:42 'p' ( temp highp 4-component vector of float)
+0:43 move second child to first child ( temp highp float)
+0:43 gl_PointSize: direct index for structure ( gl_PointSize highp float PointSize)
+0:43 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize})
+0:43 Constant:
+0:43 1 (const uint)
+0:43 'ps' ( temp highp float)
+0:44 move second child to first child ( temp highp float)
+0:44 Constant:
+0:44 0.000000
+0:44 'cd' ( temp highp float)
+0:111 Function Definition: bbbad( ( global void)
+0:111 Function Parameters:
+0:113 Sequence
+0:113 'gl_BoundingBoxOES' ( temp float)
+0:? Linker Objects
+0:? 'patchIn' ( patch in highp 4-component vector of float)
+0:? 'patchOut' ( patch out highp 4-component vector of float)
+0:? 'badp1' ( smooth patch in highp 4-component vector of float)
+0:? 'badp2' ( flat patch in highp 4-component vector of float)
+0:? 'badp3' ( noperspective patch in highp 4-component vector of float)
+0:? 'badp4' ( patch sample in highp 3-component vector of float)
+0:? 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position})
+0:? 'ina' ( in highp 2-component vector of float)
+0:? 'inb' ( in 32-element array of highp 2-component vector of float)
+0:? 'inc' ( in 32-element array of highp 2-component vector of float)
+0:? 'ind' ( in 32-element array of highp 2-component vector of float)
+0:? 'bla' ( in block{ in highp int f})
+0:? 'blb' ( in 32-element array of block{ in highp int f})
+0:? 'blc' ( in 32-element array of block{ in highp int f})
+0:? 'bld' ( in 32-element array of block{ in highp int f})
+0:? 'ivla' (layout( location=23) in 32-element array of highp 4-component vector of float)
+0:? 'ivlb' (layout( location=24) in 32-element array of highp 4-component vector of float)
+0:? 'ivlc' (layout( location=24) in 32-element array of highp 4-component vector of float)
+0:? 'ovla' (layout( location=23) out 2-element array of highp 4-component vector of float)
+0:? 'ovlb' (layout( location=24) out 2-element array of highp 4-component vector of float)
+0:? 'pinbi' ( patch in block{ in highp int a})
+0:? 'myColor2' ( centroid out highp 3-component vector of float)
+0:? 'centr' ( centroid in 32-element array of highp 3-component vector of float)
+0:? 'perSampleColor' ( sample out highp 4-component vector of float)
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 320
+Requested GL_ARB_separate_shader_objects
+input primitive = quads
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+using point mode
+ERROR: node is still EOpNull!
+0:20 Function Definition: main( ( global void)
+0:20 Function Parameters:
+0:22 Sequence
+0:22 Constant:
+0:22 0.000000
+0:24 Sequence
+0:24 move second child to first child ( temp highp int)
+0:24 'a' ( temp highp int)
+0:24 Constant:
+0:24 1512 (const int)
+0:32 Sequence
+0:32 move second child to first child ( temp highp 4-component vector of float)
+0:32 'p' ( temp highp 4-component vector of float)
+0:32 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
+0:32 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32 Constant:
+0:32 1 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:33 Sequence
+0:33 move second child to first child ( temp highp float)
+0:33 'ps' ( temp highp float)
+0:33 gl_PointSize: direct index for structure ( in highp float PointSize)
+0:33 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:34 Sequence
+0:34 move second child to first child ( temp highp float)
+0:34 'cd' ( temp highp float)
+0:34 Constant:
+0:34 0.000000
+0:36 Sequence
+0:36 move second child to first child ( temp highp int)
+0:36 'pvi' ( temp highp int)
+0:36 'gl_PatchVerticesIn' ( in highp int PatchVertices)
+0:37 Sequence
+0:37 move second child to first child ( temp highp int)
+0:37 'pid' ( temp highp int)
+0:37 'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:38 Sequence
+0:38 move second child to first child ( temp highp 3-component vector of float)
+0:38 'tc' ( temp highp 3-component vector of float)
+0:38 'gl_TessCoord' ( in highp 3-component vector of float TessCoord)
+0:39 Sequence
+0:39 move second child to first child ( temp highp float)
+0:39 'tlo' ( temp highp float)
+0:39 direct index ( patch temp highp float TessLevelOuter)
+0:39 'gl_TessLevelOuter' ( patch in 4-element array of highp float TessLevelOuter)
+0:39 Constant:
+0:39 3 (const int)
+0:40 Sequence
+0:40 move second child to first child ( temp highp float)
+0:40 'tli' ( temp highp float)
+0:40 direct index ( patch temp highp float TessLevelInner)
+0:40 'gl_TessLevelInner' ( patch in 2-element array of highp float TessLevelInner)
+0:40 Constant:
+0:40 1 (const int)
+0:42 move second child to first child ( temp highp 4-component vector of float)
+0:42 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:42 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize})
+0:42 Constant:
+0:42 0 (const uint)
+0:42 'p' ( temp highp 4-component vector of float)
+0:43 move second child to first child ( temp highp float)
+0:43 gl_PointSize: direct index for structure ( gl_PointSize highp float PointSize)
+0:43 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, gl_PointSize highp float PointSize gl_PointSize})
+0:43 Constant:
+0:43 1 (const uint)
+0:43 'ps' ( temp highp float)
+0:44 move second child to first child ( temp highp float)
+0:44 Constant:
+0:44 0.000000
+0:44 'cd' ( temp highp float)
+0:? Linker Objects
+0:? 'patchIn' ( patch in highp 4-component vector of float)
+0:? 'patchOut' ( patch out highp 4-component vector of float)
+0:? 'badp1' ( smooth patch in highp 4-component vector of float)
+0:? 'badp2' ( flat patch in highp 4-component vector of float)
+0:? 'badp3' ( noperspective patch in highp 4-component vector of float)
+0:? 'badp4' ( patch sample in highp 3-component vector of float)
+0:? 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position})
+0:? 'ina' ( in highp 2-component vector of float)
+0:? 'inb' ( in 32-element array of highp 2-component vector of float)
+0:? 'inc' ( in 32-element array of highp 2-component vector of float)
+0:? 'ind' ( in 32-element array of highp 2-component vector of float)
+0:? 'bla' ( in block{ in highp int f})
+0:? 'blb' ( in 32-element array of block{ in highp int f})
+0:? 'blc' ( in 32-element array of block{ in highp int f})
+0:? 'bld' ( in 32-element array of block{ in highp int f})
+0:? 'ivla' (layout( location=23) in 32-element array of highp 4-component vector of float)
+0:? 'ivlb' (layout( location=24) in 32-element array of highp 4-component vector of float)
+0:? 'ivlc' (layout( location=24) in 32-element array of highp 4-component vector of float)
+0:? 'ovla' (layout( location=23) out 2-element array of highp 4-component vector of float)
+0:? 'ovlb' (layout( location=24) out 2-element array of highp 4-component vector of float)
+0:? 'pinbi' ( patch in block{ in highp int a})
+0:? 'myColor2' ( centroid out highp 3-component vector of float)
+0:? 'centr' ( centroid in 32-element array of highp 3-component vector of float)
+0:? 'perSampleColor' ( sample out highp 4-component vector of float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.vert.out
new file mode 100644
index 00000000000..2838ab89d45
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.vert.out
@@ -0,0 +1,797 @@
+320.vert
+ERROR: 0:6: 's' : member of block cannot be or contain a sampler, image, or atomic_uint type
+ERROR: 0:14: 'location' : overlapping use of location 12
+ERROR: 0:16: 'input block' : not supported in this stage: vertex
+ERROR: 0:18: 'gl_PerVertex' : block redeclaration has extra members
+ERROR: 0:28: 'gl_PointSize' : member of nameless block was not redeclared
+ERROR: 0:28: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize'
+ERROR: 0:31: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use
+ERROR: 0:36: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block
+ERROR: 0:40: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block
+ERROR: 0:44: 'centroid' : cannot use centroid qualifier on an interface block
+ERROR: 0:48: 'invariant' : cannot use invariant qualifier on an interface block
+ERROR: 0:68: 'variable indexing buffer block array' : not supported with this profile: es
+ERROR: 0:73: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument
+ERROR: 0:76: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:77: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:78: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:79: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:80: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:81: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:116: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:117: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:118: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:120: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:121: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:122: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:123: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:191: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:192: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:193: 'sampler/image' : type requires declaration of default precision qualifier
+ERROR: 0:211: 'textureSize' : no matching overloaded function found
+ERROR: 0:211: '=' : cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:252: 'interpolateAtCentroid' : no matching overloaded function found
+ERROR: 0:253: 'interpolateAtSample' : no matching overloaded function found
+ERROR: 0:254: 'interpolateAtOffset' : no matching overloaded function found
+ERROR: 34 compilation errors. No code generated.
+
+
+Shader version: 320
+ERROR: node is still EOpNull!
+0:23 Function Definition: main( ( global void)
+0:23 Function Parameters:
+0:25 Sequence
+0:25 Sequence
+0:25 move second child to first child ( temp highp int)
+0:25 'sum' ( temp highp int)
+0:25 add ( temp highp int)
+0:25 'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:26 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+0:27 move second child to first child ( temp highp 4-component vector of float)
+0:27 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:27 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:27 Constant:
+0:27 0 (const uint)
+0:27 Constant:
+0:27 1.000000
+0:27 1.000000
+0:27 1.000000
+0:27 1.000000
+0:28 gl_PointSize: direct index for structure ( gl_PointSize highp void PointSize)
+0:28 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:28 Constant:
+0:28 1 (const uint)
+0:62 Function Definition: pfoo( ( global void)
+0:62 Function Parameters:
+0:? Sequence
+0:65 move second child to first child ( temp highp 2-component vector of float)
+0:65 'h' ( noContraction temp highp 2-component vector of float)
+0:65 fma ( global highp 2-component vector of float)
+0:65 'inf' ( in highp 2-component vector of float)
+0:65 'ing' ( in highp 2-component vector of float)
+0:65 'h' ( noContraction temp highp 2-component vector of float)
+0:66 indirect index ( temp lowp sampler2D)
+0:66 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:66 add ( temp highp int)
+0:66 'sIndex' ( uniform highp int)
+0:66 Constant:
+0:66 1 (const int)
+0:67 indirect index (layout( column_major shared) temp block{layout( column_major shared) uniform highp int i})
+0:67 'ubInst' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform highp int i})
+0:67 add ( temp highp int)
+0:67 'sIndex' ( uniform highp int)
+0:67 Constant:
+0:67 1 (const int)
+0:68 indirect index (layout( column_major shared) temp block{layout( column_major shared) buffer highp int i})
+0:68 'bbInst' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp int i})
+0:68 subtract ( temp highp int)
+0:68 'sIndex' ( uniform highp int)
+0:68 Constant:
+0:68 2 (const int)
+0:69 direct index ( writeonly temp highp image2D)
+0:69 'iArray' ( writeonly uniform 5-element array of highp image2D)
+0:69 Constant:
+0:69 2 (const int)
+0:70 indirect index ( writeonly temp highp image2D)
+0:70 'iArray' ( writeonly uniform 5-element array of highp image2D)
+0:70 subtract ( temp highp int)
+0:70 'sIndex' ( uniform highp int)
+0:70 Constant:
+0:70 2 (const int)
+0:71 textureGatherOffset ( global lowp 4-component vector of float)
+0:71 direct index ( temp lowp sampler2D)
+0:71 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 0.100000
+0:71 0.100000
+0:71 Convert float to int ( temp lowp 2-component vector of int)
+0:71 'inf' ( in highp 2-component vector of float)
+0:72 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp)
+0:72 direct index ( temp lowp sampler2D)
+0:72 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 0.100000
+0:72 0.100000
+0:72 Constant:
+0:72 0 (const int)
+0:72 0 (const int)
+0:72 0 (const int)
+0:72 0 (const int)
+0:72 0 (const int)
+0:72 0 (const int)
+0:72 0 (const int)
+0:72 0 (const int)
+0:73 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp)
+0:73 direct index ( temp lowp sampler2D)
+0:73 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 0.100000
+0:73 0.100000
+0:73 'offsets' ( uniform 4-element array of highp 2-component vector of int)
+0:101 Function Definition: bufferT( ( global void)
+0:101 Function Parameters:
+0:103 Sequence
+0:103 Sequence
+0:103 move second child to first child ( temp highp int)
+0:103 's1' ( temp highp int)
+0:103 textureSize ( global highp int)
+0:103 'bufSamp1' ( uniform highp samplerBuffer)
+0:104 Sequence
+0:104 move second child to first child ( temp highp int)
+0:104 's2' ( temp highp int)
+0:104 textureSize ( global highp int)
+0:104 'bufSamp2' ( uniform highp isamplerBuffer)
+0:105 Sequence
+0:105 move second child to first child ( temp highp int)
+0:105 's3' ( temp highp int)
+0:105 textureSize ( global highp int)
+0:105 'bufSamp3' ( uniform highp usamplerBuffer)
+0:107 Sequence
+0:107 move second child to first child ( temp highp int)
+0:107 's4' ( temp highp int)
+0:107 imageQuerySize ( global highp int)
+0:107 'bufSamp4' ( writeonly uniform highp imageBuffer)
+0:108 Sequence
+0:108 move second child to first child ( temp highp int)
+0:108 's5' ( temp highp int)
+0:108 imageQuerySize ( global highp int)
+0:108 'bufSamp5' ( writeonly uniform highp iimageBuffer)
+0:109 Sequence
+0:109 move second child to first child ( temp highp int)
+0:109 's6' ( temp highp int)
+0:109 imageQuerySize ( global highp int)
+0:109 'bufSamp6' ( writeonly uniform highp uimageBuffer)
+0:111 Sequence
+0:111 move second child to first child ( temp highp 4-component vector of float)
+0:111 'f1' ( temp highp 4-component vector of float)
+0:111 textureFetch ( global highp 4-component vector of float)
+0:111 'bufSamp1' ( uniform highp samplerBuffer)
+0:111 's1' ( temp highp int)
+0:112 Sequence
+0:112 move second child to first child ( temp highp 4-component vector of int)
+0:112 'f2' ( temp highp 4-component vector of int)
+0:112 textureFetch ( global highp 4-component vector of int)
+0:112 'bufSamp2' ( uniform highp isamplerBuffer)
+0:112 's2' ( temp highp int)
+0:113 Sequence
+0:113 move second child to first child ( temp highp 4-component vector of uint)
+0:113 'f3' ( temp highp 4-component vector of uint)
+0:113 textureFetch ( global highp 4-component vector of uint)
+0:113 'bufSamp3' ( uniform highp usamplerBuffer)
+0:113 's3' ( temp highp int)
+0:149 Function Definition: CAT( ( global void)
+0:149 Function Parameters:
+0:151 Sequence
+0:151 Sequence
+0:151 move second child to first child ( temp highp 3-component vector of int)
+0:151 's4' ( temp highp 3-component vector of int)
+0:151 textureSize ( global highp 3-component vector of int)
+0:151 'CA4' ( uniform highp samplerCubeArray)
+0:151 Constant:
+0:151 1 (const int)
+0:152 Sequence
+0:152 move second child to first child ( temp highp 3-component vector of int)
+0:152 's5' ( temp highp 3-component vector of int)
+0:152 textureSize ( global highp 3-component vector of int)
+0:152 'CA5' ( uniform highp samplerCubeArrayShadow)
+0:152 Constant:
+0:152 1 (const int)
+0:153 Sequence
+0:153 move second child to first child ( temp highp 3-component vector of int)
+0:153 's6' ( temp highp 3-component vector of int)
+0:153 textureSize ( global highp 3-component vector of int)
+0:153 'CA6' ( uniform highp isamplerCubeArray)
+0:153 Constant:
+0:153 1 (const int)
+0:154 Sequence
+0:154 move second child to first child ( temp highp 3-component vector of int)
+0:154 's7' ( temp highp 3-component vector of int)
+0:154 textureSize ( global highp 3-component vector of int)
+0:154 'CA7' ( uniform highp usamplerCubeArray)
+0:154 Constant:
+0:154 1 (const int)
+0:156 Sequence
+0:156 move second child to first child ( temp highp 4-component vector of float)
+0:156 't4' ( temp highp 4-component vector of float)
+0:156 texture ( global highp 4-component vector of float)
+0:156 'CA4' ( uniform highp samplerCubeArray)
+0:156 Constant:
+0:156 0.500000
+0:156 0.500000
+0:156 0.500000
+0:156 0.500000
+0:157 Sequence
+0:157 move second child to first child ( temp highp float)
+0:157 't5' ( temp highp float)
+0:157 texture ( global highp float)
+0:157 'CA5' ( uniform highp samplerCubeArrayShadow)
+0:157 Constant:
+0:157 0.500000
+0:157 0.500000
+0:157 0.500000
+0:157 0.500000
+0:157 Constant:
+0:157 3.000000
+0:158 Sequence
+0:158 move second child to first child ( temp highp 4-component vector of int)
+0:158 't6' ( temp highp 4-component vector of int)
+0:158 texture ( global highp 4-component vector of int)
+0:158 'CA6' ( uniform highp isamplerCubeArray)
+0:158 Constant:
+0:158 0.500000
+0:158 0.500000
+0:158 0.500000
+0:158 0.500000
+0:159 Sequence
+0:159 move second child to first child ( temp highp 4-component vector of uint)
+0:159 't7' ( temp highp 4-component vector of uint)
+0:159 texture ( global highp 4-component vector of uint)
+0:159 'CA7' ( uniform highp usamplerCubeArray)
+0:159 Constant:
+0:159 0.500000
+0:159 0.500000
+0:159 0.500000
+0:159 0.500000
+0:161 Sequence
+0:161 move second child to first child ( temp highp 4-component vector of float)
+0:161 'L4' ( temp highp 4-component vector of float)
+0:161 textureLod ( global highp 4-component vector of float)
+0:161 'CA4' ( uniform highp samplerCubeArray)
+0:161 Constant:
+0:161 0.500000
+0:161 0.500000
+0:161 0.500000
+0:161 0.500000
+0:161 Constant:
+0:161 0.240000
+0:162 Sequence
+0:162 move second child to first child ( temp highp 4-component vector of int)
+0:162 'L6' ( temp highp 4-component vector of int)
+0:162 textureLod ( global highp 4-component vector of int)
+0:162 'CA6' ( uniform highp isamplerCubeArray)
+0:162 Constant:
+0:162 0.500000
+0:162 0.500000
+0:162 0.500000
+0:162 0.500000
+0:162 Constant:
+0:162 0.260000
+0:163 Sequence
+0:163 move second child to first child ( temp highp 4-component vector of uint)
+0:163 'L7' ( temp highp 4-component vector of uint)
+0:163 textureLod ( global highp 4-component vector of uint)
+0:163 'CA7' ( uniform highp usamplerCubeArray)
+0:163 Constant:
+0:163 0.500000
+0:163 0.500000
+0:163 0.500000
+0:163 0.500000
+0:163 Constant:
+0:163 0.270000
+0:165 Sequence
+0:165 move second child to first child ( temp highp 4-component vector of float)
+0:165 'g4' ( temp highp 4-component vector of float)
+0:165 textureGrad ( global highp 4-component vector of float)
+0:165 'CA4' ( uniform highp samplerCubeArray)
+0:165 Constant:
+0:165 0.500000
+0:165 0.500000
+0:165 0.500000
+0:165 0.500000
+0:165 Constant:
+0:165 0.100000
+0:165 0.100000
+0:165 0.100000
+0:165 Constant:
+0:165 0.200000
+0:165 0.200000
+0:165 0.200000
+0:166 Sequence
+0:166 move second child to first child ( temp highp 4-component vector of int)
+0:166 'g6' ( temp highp 4-component vector of int)
+0:166 textureGrad ( global highp 4-component vector of int)
+0:166 'CA6' ( uniform highp isamplerCubeArray)
+0:166 Constant:
+0:166 0.500000
+0:166 0.500000
+0:166 0.500000
+0:166 0.500000
+0:166 Constant:
+0:166 0.100000
+0:166 0.100000
+0:166 0.100000
+0:166 Constant:
+0:166 0.200000
+0:166 0.200000
+0:166 0.200000
+0:167 Sequence
+0:167 move second child to first child ( temp highp 4-component vector of uint)
+0:167 'g7' ( temp highp 4-component vector of uint)
+0:167 textureGrad ( global highp 4-component vector of uint)
+0:167 'CA7' ( uniform highp usamplerCubeArray)
+0:167 Constant:
+0:167 0.500000
+0:167 0.500000
+0:167 0.500000
+0:167 0.500000
+0:167 Constant:
+0:167 0.100000
+0:167 0.100000
+0:167 0.100000
+0:167 Constant:
+0:167 0.200000
+0:167 0.200000
+0:167 0.200000
+0:169 Sequence
+0:169 move second child to first child ( temp highp 4-component vector of float)
+0:169 'gath4' ( temp highp 4-component vector of float)
+0:169 textureGather ( global highp 4-component vector of float)
+0:169 'CA4' ( uniform highp samplerCubeArray)
+0:169 Constant:
+0:169 0.500000
+0:169 0.500000
+0:169 0.500000
+0:169 0.500000
+0:170 Sequence
+0:170 move second child to first child ( temp highp 4-component vector of float)
+0:170 'gathC4' ( temp highp 4-component vector of float)
+0:170 textureGather ( global highp 4-component vector of float)
+0:170 'CA4' ( uniform highp samplerCubeArray)
+0:170 Constant:
+0:170 0.500000
+0:170 0.500000
+0:170 0.500000
+0:170 0.500000
+0:170 Constant:
+0:170 2 (const int)
+0:171 Sequence
+0:171 move second child to first child ( temp highp 4-component vector of int)
+0:171 'gath6' ( temp highp 4-component vector of int)
+0:171 textureGather ( global highp 4-component vector of int)
+0:171 'CA6' ( uniform highp isamplerCubeArray)
+0:171 Constant:
+0:171 0.500000
+0:171 0.500000
+0:171 0.500000
+0:171 0.500000
+0:172 Sequence
+0:172 move second child to first child ( temp highp 4-component vector of int)
+0:172 'gathC6' ( temp highp 4-component vector of int)
+0:172 textureGather ( global highp 4-component vector of int)
+0:172 'CA6' ( uniform highp isamplerCubeArray)
+0:172 Constant:
+0:172 0.500000
+0:172 0.500000
+0:172 0.500000
+0:172 0.500000
+0:172 Constant:
+0:172 1 (const int)
+0:173 Sequence
+0:173 move second child to first child ( temp highp 4-component vector of uint)
+0:173 'gath7' ( temp highp 4-component vector of uint)
+0:173 textureGather ( global highp 4-component vector of uint)
+0:173 'CA7' ( uniform highp usamplerCubeArray)
+0:173 Constant:
+0:173 0.500000
+0:173 0.500000
+0:173 0.500000
+0:173 0.500000
+0:174 Sequence
+0:174 move second child to first child ( temp highp 4-component vector of uint)
+0:174 'gathC7' ( temp highp 4-component vector of uint)
+0:174 textureGather ( global highp 4-component vector of uint)
+0:174 'CA7' ( uniform highp usamplerCubeArray)
+0:174 Constant:
+0:174 0.500000
+0:174 0.500000
+0:174 0.500000
+0:174 0.500000
+0:174 Constant:
+0:174 0 (const int)
+0:176 Sequence
+0:176 move second child to first child ( temp highp 4-component vector of float)
+0:176 'gath5' ( temp highp 4-component vector of float)
+0:176 textureGather ( global highp 4-component vector of float)
+0:176 'CA5' ( uniform highp samplerCubeArrayShadow)
+0:176 Constant:
+0:176 0.500000
+0:176 0.500000
+0:176 0.500000
+0:176 0.500000
+0:176 Constant:
+0:176 2.500000
+0:178 Sequence
+0:178 move second child to first child ( temp highp 3-component vector of int)
+0:178 's1' ( temp highp 3-component vector of int)
+0:178 imageQuerySize ( global highp 3-component vector of int)
+0:178 'CA1' ( writeonly uniform highp imageCubeArray)
+0:179 Sequence
+0:179 move second child to first child ( temp highp 3-component vector of int)
+0:179 's2' ( temp highp 3-component vector of int)
+0:179 imageQuerySize ( global highp 3-component vector of int)
+0:179 'CA2' ( writeonly uniform highp iimageCubeArray)
+0:180 Sequence
+0:180 move second child to first child ( temp highp 3-component vector of int)
+0:180 's3' ( temp highp 3-component vector of int)
+0:180 imageQuerySize ( global highp 3-component vector of int)
+0:180 'CA3' ( writeonly uniform highp uimageCubeArray)
+0:182 imageStore ( global highp void)
+0:182 'CA1' ( writeonly uniform highp imageCubeArray)
+0:182 's3' ( temp highp 3-component vector of int)
+0:182 Constant:
+0:182 1.000000
+0:182 1.000000
+0:182 1.000000
+0:182 1.000000
+0:183 imageStore ( global highp void)
+0:183 'CA2' ( writeonly uniform highp iimageCubeArray)
+0:183 's3' ( temp highp 3-component vector of int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 1 (const int)
+0:183 1 (const int)
+0:183 1 (const int)
+0:184 imageStore ( global highp void)
+0:184 'CA3' ( writeonly uniform highp uimageCubeArray)
+0:184 's3' ( temp highp 3-component vector of int)
+0:184 Constant:
+0:184 1 (const uint)
+0:184 1 (const uint)
+0:184 1 (const uint)
+0:184 1 (const uint)
+0:186 Sequence
+0:186 move second child to first child ( temp highp 4-component vector of float)
+0:186 'cl1' ( temp highp 4-component vector of float)
+0:186 imageLoad ( global highp 4-component vector of float)
+0:186 'rCA1' (layout( rgba16f) readonly uniform highp imageCubeArray)
+0:186 's3' ( temp highp 3-component vector of int)
+0:187 Sequence
+0:187 move second child to first child ( temp highp 4-component vector of int)
+0:187 'cl2' ( temp highp 4-component vector of int)
+0:187 imageLoad ( global highp 4-component vector of int)
+0:187 'rCA2' (layout( rgba32i) readonly uniform highp iimageCubeArray)
+0:187 's3' ( temp highp 3-component vector of int)
+0:188 Sequence
+0:188 move second child to first child ( temp highp 4-component vector of uint)
+0:188 'cl3' ( temp highp 4-component vector of uint)
+0:188 imageLoad ( global highp 4-component vector of uint)
+0:188 'rCA3' (layout( r32ui) readonly uniform highp uimageCubeArray)
+0:188 's3' ( temp highp 3-component vector of int)
+0:203 Function Definition: MSA( ( global void)
+0:203 Function Parameters:
+0:205 Sequence
+0:205 Sequence
+0:205 move second child to first child ( temp highp 4-component vector of float)
+0:205 'tf' ( temp highp 4-component vector of float)
+0:205 textureFetch ( global highp 4-component vector of float)
+0:205 'samp2DMSA' ( uniform highp sampler2DMSArray)
+0:205 Constant:
+0:205 5 (const int)
+0:205 5 (const int)
+0:205 5 (const int)
+0:205 Constant:
+0:205 2 (const int)
+0:206 Sequence
+0:206 move second child to first child ( temp highp 4-component vector of int)
+0:206 'tfi' ( temp highp 4-component vector of int)
+0:206 textureFetch ( global highp 4-component vector of int)
+0:206 'samp2DMSAi' ( uniform highp isampler2DMSArray)
+0:206 Constant:
+0:206 5 (const int)
+0:206 5 (const int)
+0:206 5 (const int)
+0:206 Constant:
+0:206 2 (const int)
+0:207 Sequence
+0:207 move second child to first child ( temp highp 4-component vector of uint)
+0:207 'tfu' ( temp highp 4-component vector of uint)
+0:207 textureFetch ( global highp 4-component vector of uint)
+0:207 'samp2DMSAu' ( uniform highp usampler2DMSArray)
+0:207 Constant:
+0:207 5 (const int)
+0:207 5 (const int)
+0:207 5 (const int)
+0:207 Constant:
+0:207 2 (const int)
+0:209 Sequence
+0:209 move second child to first child ( temp highp 3-component vector of int)
+0:209 'tfs' ( temp highp 3-component vector of int)
+0:209 textureSize ( global highp 3-component vector of int)
+0:209 'samp2DMSA' ( uniform highp sampler2DMSArray)
+0:210 Sequence
+0:210 move second child to first child ( temp highp 3-component vector of int)
+0:210 'tfsi' ( temp highp 3-component vector of int)
+0:210 textureSize ( global highp 3-component vector of int)
+0:210 'samp2DMSAi' ( uniform highp isampler2DMSArray)
+0:212 Sequence
+0:212 move second child to first child ( temp highp 3-component vector of int)
+0:212 'tfsu' ( temp highp 3-component vector of int)
+0:212 textureSize ( global highp 3-component vector of int)
+0:212 'samp2DMSAu' ( uniform highp usampler2DMSArray)
+0:220 Function Definition: goodImageAtom( ( global void)
+0:220 Function Parameters:
+0:? Sequence
+0:226 imageAtomicAdd ( global highp int)
+0:226 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:226 'P' ( uniform highp 2-component vector of int)
+0:226 'dati' ( temp highp int)
+0:227 imageAtomicAdd ( global highp uint)
+0:227 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:227 'P' ( uniform highp 2-component vector of int)
+0:227 'datu' ( temp highp uint)
+0:228 imageAtomicMin ( global highp int)
+0:228 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:228 'P' ( uniform highp 2-component vector of int)
+0:228 'dati' ( temp highp int)
+0:229 imageAtomicMin ( global highp uint)
+0:229 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:229 'P' ( uniform highp 2-component vector of int)
+0:229 'datu' ( temp highp uint)
+0:230 imageAtomicMax ( global highp int)
+0:230 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:230 'P' ( uniform highp 2-component vector of int)
+0:230 'dati' ( temp highp int)
+0:231 imageAtomicMax ( global highp uint)
+0:231 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:231 'P' ( uniform highp 2-component vector of int)
+0:231 'datu' ( temp highp uint)
+0:232 imageAtomicAnd ( global highp int)
+0:232 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:232 'P' ( uniform highp 2-component vector of int)
+0:232 'dati' ( temp highp int)
+0:233 imageAtomicAnd ( global highp uint)
+0:233 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:233 'P' ( uniform highp 2-component vector of int)
+0:233 'datu' ( temp highp uint)
+0:234 imageAtomicOr ( global highp int)
+0:234 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:234 'P' ( uniform highp 2-component vector of int)
+0:234 'dati' ( temp highp int)
+0:235 imageAtomicOr ( global highp uint)
+0:235 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:235 'P' ( uniform highp 2-component vector of int)
+0:235 'datu' ( temp highp uint)
+0:236 imageAtomicXor ( global highp int)
+0:236 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:236 'P' ( uniform highp 2-component vector of int)
+0:236 'dati' ( temp highp int)
+0:237 imageAtomicXor ( global highp uint)
+0:237 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:237 'P' ( uniform highp 2-component vector of int)
+0:237 'datu' ( temp highp uint)
+0:238 imageAtomicExchange ( global highp int)
+0:238 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:238 'P' ( uniform highp 2-component vector of int)
+0:238 'dati' ( temp highp int)
+0:239 imageAtomicExchange ( global highp uint)
+0:239 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:239 'P' ( uniform highp 2-component vector of int)
+0:239 'datu' ( temp highp uint)
+0:240 imageAtomicExchange ( global highp float)
+0:240 'im2Df' (layout( r32f) uniform highp image2D)
+0:240 'P' ( uniform highp 2-component vector of int)
+0:240 'datf' ( temp highp float)
+0:241 imageAtomicCompSwap ( global highp int)
+0:241 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:241 'P' ( uniform highp 2-component vector of int)
+0:241 Constant:
+0:241 3 (const int)
+0:241 'dati' ( temp highp int)
+0:242 imageAtomicCompSwap ( global highp uint)
+0:242 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:242 'P' ( uniform highp 2-component vector of int)
+0:242 Constant:
+0:242 5 (const uint)
+0:242 'datu' ( temp highp uint)
+0:250 Function Definition: badInterp( ( global void)
+0:250 Function Parameters:
+0:252 Sequence
+0:252 Constant:
+0:252 0.000000
+0:253 Constant:
+0:253 0.000000
+0:254 Constant:
+0:254 0.000000
+0:? Linker Objects
+0:? 'outbinst' ( out block{ out highp int a, out highp 4-component vector of float v, out highp sampler2D s})
+0:? 'anon@0' ( out block{layout( location=12) out highp int aAnon, layout( location=13) out highp 4-component vector of float vAnon})
+0:? 'aliased' (layout( location=12) smooth out highp int)
+0:? 'inbinst' ( in block{ in highp int a})
+0:? 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:? 'smon' ( smooth out block{ out highp int i})
+0:? 'fmon' ( flat out block{ out highp int i})
+0:? 'cmon' ( centroid out block{ out highp int i})
+0:? 'imon' ( invariant out block{ out highp int i})
+0:? 'inf' ( in highp 2-component vector of float)
+0:? 'ing' ( in highp 2-component vector of float)
+0:? 'offsets' ( uniform 4-element array of highp 2-component vector of int)
+0:? 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:? 'sIndex' ( uniform highp int)
+0:? 'auArray' (layout( binding=0 offset=0) uniform 2-element array of highp atomic_uint)
+0:? 'ubInst' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform highp int i})
+0:? 'bbInst' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp int i})
+0:? 'iArray' ( writeonly uniform 5-element array of highp image2D)
+0:? 'constOffsets' ( const 4-element array of highp 2-component vector of int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 'noPreSamp1' ( uniform mediump samplerBuffer)
+0:? 'noPreSamp2' ( uniform mediump isamplerBuffer)
+0:? 'noPreSamp3' ( uniform mediump usamplerBuffer)
+0:? 'noPreSamp4' ( writeonly uniform mediump imageBuffer)
+0:? 'noPreSamp5' ( writeonly uniform mediump iimageBuffer)
+0:? 'noPreSamp6' ( writeonly uniform mediump uimageBuffer)
+0:? 'bufSamp1' ( uniform highp samplerBuffer)
+0:? 'bufSamp2' ( uniform highp isamplerBuffer)
+0:? 'bufSamp3' ( uniform highp usamplerBuffer)
+0:? 'bufSamp4' ( writeonly uniform highp imageBuffer)
+0:? 'bufSamp5' ( writeonly uniform highp iimageBuffer)
+0:? 'bufSamp6' ( writeonly uniform highp uimageBuffer)
+0:? 'noPreCA1' ( writeonly uniform mediump imageCubeArray)
+0:? 'noPreCA2' ( writeonly uniform mediump iimageCubeArray)
+0:? 'noPreCA3' ( writeonly uniform mediump uimageCubeArray)
+0:? 'noPreCA4' ( uniform mediump samplerCubeArray)
+0:? 'noPreCA5' ( uniform mediump samplerCubeArrayShadow)
+0:? 'noPreCA6' ( uniform mediump isamplerCubeArray)
+0:? 'noPreCA7' ( uniform mediump usamplerCubeArray)
+0:? 'CA1' ( writeonly uniform highp imageCubeArray)
+0:? 'CA2' ( writeonly uniform highp iimageCubeArray)
+0:? 'CA3' ( writeonly uniform highp uimageCubeArray)
+0:? 'rCA1' (layout( rgba16f) readonly uniform highp imageCubeArray)
+0:? 'rCA2' (layout( rgba32i) readonly uniform highp iimageCubeArray)
+0:? 'rCA3' (layout( r32ui) readonly uniform highp uimageCubeArray)
+0:? 'CA4' ( uniform highp samplerCubeArray)
+0:? 'CA5' ( uniform highp samplerCubeArrayShadow)
+0:? 'CA6' ( uniform highp isamplerCubeArray)
+0:? 'CA7' ( uniform highp usamplerCubeArray)
+0:? 'noPrec2DMS' ( uniform mediump sampler2DMSArray)
+0:? 'noPrec2DMSi' ( uniform mediump isampler2DMSArray)
+0:? 'noPrec2DMSu' ( uniform mediump usampler2DMSArray)
+0:? 'samp2DMSA' ( uniform highp sampler2DMSArray)
+0:? 'samp2DMSAi' ( uniform highp isampler2DMSArray)
+0:? 'samp2DMSAu' ( uniform highp usampler2DMSArray)
+0:? 'im2Df' (layout( r32f) uniform highp image2D)
+0:? 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:? 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:? 'P' ( uniform highp 2-component vector of int)
+0:? 'colorSample' ( smooth sample out highp 4-component vector of float)
+0:? 'colorfsi' ( flat sample out highp 4-component vector of float)
+0:? 'sampInArray' ( smooth sample out 4-element array of highp 3-component vector of float)
+0:? 'inv4' ( in highp 4-component vector of float)
+0:? 'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 320
+ERROR: node is still EOpNull!
+0:23 Function Definition: main( ( global void)
+0:23 Function Parameters:
+0:25 Sequence
+0:25 Sequence
+0:25 move second child to first child ( temp highp int)
+0:25 'sum' ( temp highp int)
+0:25 add ( temp highp int)
+0:25 'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:26 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+0:27 move second child to first child ( temp highp 4-component vector of float)
+0:27 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:27 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:27 Constant:
+0:27 0 (const uint)
+0:27 Constant:
+0:27 1.000000
+0:27 1.000000
+0:27 1.000000
+0:27 1.000000
+0:28 gl_PointSize: direct index for structure ( gl_PointSize highp void PointSize)
+0:28 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:28 Constant:
+0:28 1 (const uint)
+0:? Linker Objects
+0:? 'outbinst' ( out block{ out highp int a, out highp 4-component vector of float v, out highp sampler2D s})
+0:? 'anon@0' ( out block{layout( location=12) out highp int aAnon, layout( location=13) out highp 4-component vector of float vAnon})
+0:? 'aliased' (layout( location=12) smooth out highp int)
+0:? 'inbinst' ( in block{ in highp int a})
+0:? 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:? 'smon' ( smooth out block{ out highp int i})
+0:? 'fmon' ( flat out block{ out highp int i})
+0:? 'cmon' ( centroid out block{ out highp int i})
+0:? 'imon' ( invariant out block{ out highp int i})
+0:? 'inf' ( in highp 2-component vector of float)
+0:? 'ing' ( in highp 2-component vector of float)
+0:? 'offsets' ( uniform 4-element array of highp 2-component vector of int)
+0:? 'sArray' ( uniform 4-element array of lowp sampler2D)
+0:? 'sIndex' ( uniform highp int)
+0:? 'auArray' (layout( binding=0 offset=0) uniform 2-element array of highp atomic_uint)
+0:? 'ubInst' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform highp int i})
+0:? 'bbInst' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp int i})
+0:? 'iArray' ( writeonly uniform 5-element array of highp image2D)
+0:? 'constOffsets' ( const 4-element array of highp 2-component vector of int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 'noPreSamp1' ( uniform mediump samplerBuffer)
+0:? 'noPreSamp2' ( uniform mediump isamplerBuffer)
+0:? 'noPreSamp3' ( uniform mediump usamplerBuffer)
+0:? 'noPreSamp4' ( writeonly uniform mediump imageBuffer)
+0:? 'noPreSamp5' ( writeonly uniform mediump iimageBuffer)
+0:? 'noPreSamp6' ( writeonly uniform mediump uimageBuffer)
+0:? 'bufSamp1' ( uniform highp samplerBuffer)
+0:? 'bufSamp2' ( uniform highp isamplerBuffer)
+0:? 'bufSamp3' ( uniform highp usamplerBuffer)
+0:? 'bufSamp4' ( writeonly uniform highp imageBuffer)
+0:? 'bufSamp5' ( writeonly uniform highp iimageBuffer)
+0:? 'bufSamp6' ( writeonly uniform highp uimageBuffer)
+0:? 'noPreCA1' ( writeonly uniform mediump imageCubeArray)
+0:? 'noPreCA2' ( writeonly uniform mediump iimageCubeArray)
+0:? 'noPreCA3' ( writeonly uniform mediump uimageCubeArray)
+0:? 'noPreCA4' ( uniform mediump samplerCubeArray)
+0:? 'noPreCA5' ( uniform mediump samplerCubeArrayShadow)
+0:? 'noPreCA6' ( uniform mediump isamplerCubeArray)
+0:? 'noPreCA7' ( uniform mediump usamplerCubeArray)
+0:? 'CA1' ( writeonly uniform highp imageCubeArray)
+0:? 'CA2' ( writeonly uniform highp iimageCubeArray)
+0:? 'CA3' ( writeonly uniform highp uimageCubeArray)
+0:? 'rCA1' (layout( rgba16f) readonly uniform highp imageCubeArray)
+0:? 'rCA2' (layout( rgba32i) readonly uniform highp iimageCubeArray)
+0:? 'rCA3' (layout( r32ui) readonly uniform highp uimageCubeArray)
+0:? 'CA4' ( uniform highp samplerCubeArray)
+0:? 'CA5' ( uniform highp samplerCubeArrayShadow)
+0:? 'CA6' ( uniform highp isamplerCubeArray)
+0:? 'CA7' ( uniform highp usamplerCubeArray)
+0:? 'noPrec2DMS' ( uniform mediump sampler2DMSArray)
+0:? 'noPrec2DMSi' ( uniform mediump isampler2DMSArray)
+0:? 'noPrec2DMSu' ( uniform mediump usampler2DMSArray)
+0:? 'samp2DMSA' ( uniform highp sampler2DMSArray)
+0:? 'samp2DMSAi' ( uniform highp isampler2DMSArray)
+0:? 'samp2DMSAu' ( uniform highp usampler2DMSArray)
+0:? 'im2Df' (layout( r32f) uniform highp image2D)
+0:? 'im2Du' (layout( r32ui) uniform highp uimage2D)
+0:? 'im2Di' (layout( r32i) uniform highp iimage2D)
+0:? 'P' ( uniform highp 2-component vector of int)
+0:? 'colorSample' ( smooth sample out highp 4-component vector of float)
+0:? 'colorfsi' ( flat sample out highp 4-component vector of float)
+0:? 'sampInArray' ( smooth sample out 4-element array of highp 3-component vector of float)
+0:? 'inv4' ( in highp 4-component vector of float)
+0:? 'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out
index 4b5a84be5ac..5919c76afbe 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out
@@ -100,7 +100,7 @@ ERROR: node is still EOpNull!
0:? 'v20' ( smooth in 4-component vector of float)
0:? 'v21' (layout( location=60) smooth in float)
0:? 'v22' (layout( location=2) smooth in float)
-0:? 'anon@1' ( in block{layout( location=1 component=0) in float f1, layout( location=3) in float f2})
+0:? 'anon@1' ( in block{layout( location=1) in float f1, layout( location=3) in float f2})
0:? 'uinst' (layout( location=1 column_major shared) uniform block{layout( column_major shared) uniform float f1, layout( location=3 column_major shared) uniform float f2})
0:? 'v3' (layout( location=6) smooth in 4-component vector of float)
0:? 'v4' ( smooth in 4-component vector of float)
@@ -108,12 +108,12 @@ ERROR: node is still EOpNull!
0:? 'v6' (layout( location=30) smooth in 4-component vector of float)
0:? 'v23' (layout( location=61) smooth in float)
0:? 'v24' (layout( location=62) smooth in float)
-0:? 'ininst2' ( in block{layout( location=28 component=0) in bool b1, layout( location=29 component=0) in float f1, layout( location=25) in float f2, layout( location=26 component=0) in 4-component vector of float f3, layout( location=21) in structure{ global float f1, temp float f2} s2, layout( location=23 component=0) in 4-component vector of float f4, layout( location=24 component=0) in 4-component vector of float f5})
+0:? 'ininst2' ( in block{layout( location=28) in bool b1, layout( location=29) in float f1, layout( location=25) in float f2, layout( location=26) in 4-component vector of float f3, layout( location=21) in structure{ global float f1, temp float f2} s2, layout( location=23) in 4-component vector of float f4, layout( location=24) in 4-component vector of float f5})
0:? 'uinst2' (layout( location=13 column_major shared) uniform block{layout( column_major shared) uniform float f1, layout( location=3 column_major shared) uniform float f2})
0:? 'in3' ( in block{ in float f1, layout( location=40) in float f2})
0:? 'in4' ( in block{layout( location=50) in float f1, layout( location=51) in float f2})
0:? 's' (layout( location=33) smooth in structure{ global 3-component vector of float a, global 2X2 matrix of float b, global 2-element array of 4-component vector of float c, temp 2-component vector of float A})
-0:? 'anon@2' ( in block{layout( location=44 component=0) in 4-component vector of float d, layout( location=45 component=0) in 4-component vector of float e, layout( location=47) in 4-component vector of float f, layout( location=48 component=0) in 4-component vector of float g, layout( location=41) in 4-component vector of float h, layout( location=42 component=0) in 4-component vector of float i, layout( location=43 component=0) in 4-component vector of float j, layout( location=44 component=0) in 4-component vector of float k})
+0:? 'anon@2' ( in block{layout( location=44) in 4-component vector of float d, layout( location=45) in 4-component vector of float e, layout( location=47) in 4-component vector of float f, layout( location=48) in 4-component vector of float g, layout( location=41) in 4-component vector of float h, layout( location=42) in 4-component vector of float i, layout( location=43) in 4-component vector of float j, layout( location=44) in 4-component vector of float k})
0:? 'outVar2' (layout( location=4095 index=0) out 4-component vector of float)
0:? 'outVar3' (layout( location=0 index=1) out 4-component vector of float)
0:? 'outVar4' (layout( location=0 index=1) out 4-component vector of float)
@@ -165,7 +165,7 @@ ERROR: node is still EOpNull!
0:? 'v20' ( smooth in 4-component vector of float)
0:? 'v21' (layout( location=60) smooth in float)
0:? 'v22' (layout( location=2) smooth in float)
-0:? 'anon@1' ( in block{layout( location=1 component=0) in float f1, layout( location=3) in float f2})
+0:? 'anon@1' ( in block{layout( location=1) in float f1, layout( location=3) in float f2})
0:? 'uinst' (layout( location=1 column_major shared) uniform block{layout( column_major shared) uniform float f1, layout( location=3 column_major shared) uniform float f2})
0:? 'v3' (layout( location=6) smooth in 4-component vector of float)
0:? 'v4' ( smooth in 4-component vector of float)
@@ -173,12 +173,12 @@ ERROR: node is still EOpNull!
0:? 'v6' (layout( location=30) smooth in 4-component vector of float)
0:? 'v23' (layout( location=61) smooth in float)
0:? 'v24' (layout( location=62) smooth in float)
-0:? 'ininst2' ( in block{layout( location=28 component=0) in bool b1, layout( location=29 component=0) in float f1, layout( location=25) in float f2, layout( location=26 component=0) in 4-component vector of float f3, layout( location=21) in structure{ global float f1, temp float f2} s2, layout( location=23 component=0) in 4-component vector of float f4, layout( location=24 component=0) in 4-component vector of float f5})
+0:? 'ininst2' ( in block{layout( location=28) in bool b1, layout( location=29) in float f1, layout( location=25) in float f2, layout( location=26) in 4-component vector of float f3, layout( location=21) in structure{ global float f1, temp float f2} s2, layout( location=23) in 4-component vector of float f4, layout( location=24) in 4-component vector of float f5})
0:? 'uinst2' (layout( location=13 column_major shared) uniform block{layout( column_major shared) uniform float f1, layout( location=3 column_major shared) uniform float f2})
0:? 'in3' ( in block{ in float f1, layout( location=40) in float f2})
0:? 'in4' ( in block{layout( location=50) in float f1, layout( location=51) in float f2})
0:? 's' (layout( location=33) smooth in structure{ global 3-component vector of float a, global 2X2 matrix of float b, global 2-element array of 4-component vector of float c, temp 2-component vector of float A})
-0:? 'anon@2' ( in block{layout( location=44 component=0) in 4-component vector of float d, layout( location=45 component=0) in 4-component vector of float e, layout( location=47) in 4-component vector of float f, layout( location=48 component=0) in 4-component vector of float g, layout( location=41) in 4-component vector of float h, layout( location=42 component=0) in 4-component vector of float i, layout( location=43 component=0) in 4-component vector of float j, layout( location=44 component=0) in 4-component vector of float k})
+0:? 'anon@2' ( in block{layout( location=44) in 4-component vector of float d, layout( location=45) in 4-component vector of float e, layout( location=47) in 4-component vector of float f, layout( location=48) in 4-component vector of float g, layout( location=41) in 4-component vector of float h, layout( location=42) in 4-component vector of float i, layout( location=43) in 4-component vector of float j, layout( location=44) in 4-component vector of float k})
0:? 'outVar2' (layout( location=4095 index=0) out 4-component vector of float)
0:? 'outVar3' (layout( location=0 index=1) out 4-component vector of float)
0:? 'outVar4' (layout( location=0 index=1) out 4-component vector of float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.frag.out
index bd936c714d8..443b1024162 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.frag.out
@@ -1,5 +1,4 @@
400.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:18: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument
ERROR: 0:22: 'textureGatherOffset(...)' : must be a compile-time constant: component argument
ERROR: 0:23: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument
@@ -34,8 +33,12 @@ ERROR: 0:183: 'textureQueryLod' : no matching overloaded function found
ERROR: 0:183: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'
ERROR: 0:184: 'textureQueryLod' : no matching overloaded function found
ERROR: 0:184: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'
-ERROR: 0:187: '' : syntax error
-ERROR: 35 compilation errors. No code generated.
+ERROR: 0:197: 'subroutine' : feature not yet implemented
+ERROR: 0:197: '' : default qualifier requires 'uniform', 'buffer', 'in', or 'out' storage qualification
+ERROR: 0:198: 'subroutine' : feature not yet implemented
+ERROR: 0:199: 'subroutine' : feature not yet implemented
+ERROR: 0:201: '' : syntax error, unexpected PRECISE, expecting IDENTIFIER
+ERROR: 39 compilation errors. No code generated.
Shader version: 400
@@ -469,6 +472,39 @@ ERROR: node is still EOpNull!
0:181 'pf3' ( temp 3-component vector of float)
0:183 'lod' ( temp 2-component vector of float)
0:184 'lod' ( temp 2-component vector of float)
+0:190 Function Definition: bitwiseConv( ( global void)
+0:190 Function Parameters:
+0:192 Sequence
+0:192 move second child to first child ( temp uint)
+0:192 'iout' ( out uint)
+0:192 bitwise and ( temp uint)
+0:192 'uu' ( uniform uint)
+0:192 Convert int to uint ( temp uint)
+0:192 'i' ( flat in int)
+0:193 add second child into first child ( temp uint)
+0:193 'iout' ( out uint)
+0:193 exclusive-or ( temp uint)
+0:193 'uu' ( uniform uint)
+0:193 Convert int to uint ( temp uint)
+0:193 'i' ( flat in int)
+0:194 add second child into first child ( temp uint)
+0:194 'iout' ( out uint)
+0:194 inclusive-or ( temp uint)
+0:194 Convert int to uint ( temp uint)
+0:194 'i' ( flat in int)
+0:194 'uu' ( uniform uint)
+0:198 Function Definition: subT1( ( temp float)
+0:198 Function Parameters:
+0:198 Sequence
+0:198 Branch: Return with expression
+0:198 Constant:
+0:198 1.000000
+0:199 Function Definition: subT2( ( temp float)
+0:199 Function Parameters:
+0:199 Sequence
+0:199 Branch: Return with expression
+0:199 Constant:
+0:199 1.000000
0:? Linker Objects
0:? 'c2D' ( smooth in 2-component vector of float)
0:? 'i' ( flat in int)
@@ -512,6 +548,8 @@ ERROR: node is still EOpNull!
0:? 'sampCubeAs' ( uniform samplerCubeArrayShadow)
0:? 'sampBuf' ( uniform samplerBuffer)
0:? 'sampRect' ( uniform sampler2DRect)
+0:? 'uu' ( uniform uint)
+0:? 'iout' ( out uint)
Linked fragment stage:
@@ -685,4 +723,6 @@ ERROR: node is still EOpNull!
0:? 'sampCubeAs' ( uniform samplerCubeArrayShadow)
0:? 'sampBuf' ( uniform samplerBuffer)
0:? 'sampRect' ( uniform sampler2DRect)
+0:? 'uu' ( uniform uint)
+0:? 'iout' ( out uint)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.geom.out
index 989b439b115..1d009d9ca81 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.geom.out
@@ -1,5 +1,4 @@
400.geom
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:12: 'invocations' : can only apply to a standalone qualifier
ERROR: 0:20: 'patch' : not supported in this stage: geometry
ERROR: 0:20: 'gl_PointSize' : cannot add layout to redeclared block member
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tesc.out
index 434079e9565..762f0b8d466 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tesc.out
@@ -1,5 +1,4 @@
400.tesc
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:6: 'quads' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
ERROR: 0:7: 'ccw' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
ERROR: 0:8: 'fractional_even_spacing' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tese.out
index 2f1c97c09e1..e9ffcdf6d32 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tese.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.tese.out
@@ -1,5 +1,4 @@
400.tese
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: 'vertices' : there is no such layout identifier for this stage taking an assigned value
ERROR: 0:5: 'triangles' : cannot change previously set input primitive
ERROR: 0:6: 'isolines' : cannot change previously set input primitive
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.vert.out
index 0fd453d8e5a..05f58e2d84f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/400.vert.out
@@ -1,5 +1,4 @@
400.vert
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions
ERROR: 0:4: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions
ERROR: 0:5: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out
index 7219e4de1a7..4d35d520683 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out
@@ -1,5 +1,4 @@
410.geom
-Warning, version 410 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:8: 'myIn' : cannot redeclare a built-in block with a user name
ERROR: 0:12: 'gl_myIn' : no declaration found for redeclaration
ERROR: 0:20: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.tesc.out
index 9b459b17f72..68593d0db23 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.tesc.out
@@ -1,5 +1,4 @@
410.tesc
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:4: 'length' : array must first be sized by a redeclaration or layout qualifier
ERROR: 1 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.vert.out
index 0e2c87e736f..aacdf36c0f7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.vert.out
@@ -1,6 +1,4 @@
410.vert
-Warning, version 410 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 410
0:? Sequence
0:7 Function Definition: main( ( global void)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.comp.out
index 07944de8fae..4e091acff31 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.comp.out
@@ -1,5 +1,4 @@
420.comp
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: 'gl_WorkGroupSize' : not supported for this version or the enabled extensions
ERROR: 1 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.frag.out
index 31fe7f96f88..5f2b0f7b0a0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.frag.out
@@ -1,10 +1,9 @@
420.frag
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:4: 'redeclaration' : all redeclarations must use the same depth layout on gl_FragDepth
ERROR: 0:11: 'layout qualifier' : can only apply depth layout to gl_FragDepth
ERROR: 0:12: 'gl_FragDepth' : cannot redeclare after use
-WARNING: 0:14: 'atomic_uint' : implicitly sized atomic_uint array treated as having one element for tracking the default offset
-ERROR: 3 compilation errors. No code generated.
+ERROR: 0:14: 'atomic_uint' : array must be explicitly sized
+ERROR: 4 compilation errors. No code generated.
Shader version: 420
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.geom.out
index 0fccfe0f2fa..fe9e12f4201 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.geom.out
@@ -1,5 +1,4 @@
420.geom
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:9: 'length' : array must first be sized by a redeclaration or layout qualifier
ERROR: 0:11: '[' : array must be sized by a redeclaration or layout qualifier before being indexed with a variable
ERROR: 0:42: 'assign' : l-value required (can't modify a const)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tesc.out
index 83816f30b51..7876bd63a39 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tesc.out
@@ -1,5 +1,4 @@
420.tesc
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out
ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a
ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tese.out
index 9986c2a2625..f14e1c0d3d8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tese.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.tese.out
@@ -1,5 +1,4 @@
420.tese
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:7: '=' : cannot convert from ' const 3-element array of float' to ' global 2-element array of float'
ERROR: 0:8: 'initializer list' : wrong vector size (or rows in a matrix column): temp 2-component vector of float
ERROR: 0:9: 'initializer list' : wrong number of matrix columns: temp 3X3 matrix of float
@@ -11,7 +10,7 @@ ERROR: 0:29: 'constructor' : cannot convert parameter 2 from ' const 2X2 matrix
ERROR: 0:29: ' const 2-element array of 4-component vector of float' : cannot construct with these arguments
ERROR: 0:29: '=' : cannot convert from ' const float' to ' global 2-element array of 4-component vector of float'
ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float
-ERROR: 0:40: 'constructor' : cannot convert parameter 1 from ' temp float' to ' temp structure{ global float s, global float t}'
+ERROR: 0:40: 'constructor' : cannot convert parameter 1 from ' const structure{ global 4-component vector of float a, global 4-component vector of float b}' to ' temp structure{ global float s, global float t}'
ERROR: 0:70: 'initializer list' : wrong number of structure members
ERROR: 13 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out
index 8fb8546eef8..b912dc078d0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out
@@ -1,5 +1,4 @@
420.vert
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:2: '#version' : must occur first in shader
WARNING: 0:3: varying deprecated in version 130; may be removed in future release
ERROR: 0:3: 'varying' : no longer supported in core profile; removed in version 420
@@ -33,7 +32,7 @@ ERROR: 0:85: '' : vertex input cannot be further qualified
ERROR: 0:86: 'patch' : not supported in this stage: vertex
ERROR: 0:100: '=' : global const initializers must be constant ' const int'
ERROR: 0:101: '' : array size must be a constant integer expression
-ERROR: 0:107: 'image variables declared 'writeonly' without a format layout qualifier' : not supported for this version or the enabled extensions
+ERROR: 0:107: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported for this version or the enabled extensions
ERROR: 0:114: 'imageAtomicMin' : only supported on image with format r32i or r32ui
ERROR: 0:115: 'imageAtomicMax' : no matching overloaded function found
ERROR: 0:119: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420_size_gl_in.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420_size_gl_in.geom.out
index 3c3b8105fe6..d058013d89b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420_size_gl_in.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420_size_gl_in.geom.out
@@ -1,5 +1,4 @@
420_size_gl_in.geom
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:19: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use
ERROR: 1 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out
index 91aaf786c1c..c4ad19ed008 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out
@@ -1,5 +1,4 @@
430.comp
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:4: 'local_size' : cannot change previously set size
ERROR: 0:5: 'local_size' : too large; see gl_MaxComputeWorkGroupSize
ERROR: 0:43: 'in' : global storage input qualifier cannot be used in a compute shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out
index a5898f24f61..29ffb01aa8b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out
@@ -1,5 +1,4 @@
430.vert
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers
ERROR: 0:7: 'input block' : not supported in this stage: vertex
ERROR: 0:7: 'location qualifier on in/out block' : not supported for this version or the enabled extensions
@@ -233,7 +232,7 @@ ERROR: node is still EOpNull!
0:? 'start2' ( const int)
0:? 5 (const int)
0:? 'v6' (layout( location=19) in 4-component vector of float)
-0:? 'ininst2' ( in block{layout( location=28 component=0) in bool b1, layout( location=29 component=0) in float f1, layout( location=25) in float f2})
+0:? 'ininst2' ( in block{layout( location=28) in bool b1, layout( location=29) in float f1, layout( location=25) in float f2})
0:? 'in4' ( in block{layout( location=50) in float f1, layout( location=51) in float f2})
0:? 'bbinst2g' ( out block{layout( xfb_buffer=3 xfb_offset=64) out 4-component vector of float bbv})
0:? 'bg' (layout( xfb_buffer=1 xfb_offset=48 xfb_stride=80) smooth out 4-component vector of float)
@@ -308,7 +307,7 @@ ERROR: node is still EOpNull!
0:? 'start2' ( const int)
0:? 5 (const int)
0:? 'v6' (layout( location=19) in 4-component vector of float)
-0:? 'ininst2' ( in block{layout( location=28 component=0) in bool b1, layout( location=29 component=0) in float f1, layout( location=25) in float f2})
+0:? 'ininst2' ( in block{layout( location=28) in bool b1, layout( location=29) in float f1, layout( location=25) in float f2})
0:? 'in4' ( in block{layout( location=50) in float f1, layout( location=51) in float f2})
0:? 'bbinst2g' ( out block{layout( xfb_buffer=3 xfb_offset=64) out 4-component vector of float bbv})
0:? 'bg' (layout( xfb_buffer=1 xfb_offset=48 xfb_stride=80) smooth out 4-component vector of float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430AofA.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430AofA.frag.out
index 3d532803a21..22dc4d3f578 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430AofA.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430AofA.frag.out
@@ -1,5 +1,4 @@
430AofA.frag
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:6: '[]' : only outermost dimension of an array of arrays can be implicitly sized
ERROR: 0:14: 'constructor' : constructing non-array constituent from array argument
ERROR: 0:15: 'constructor' : array constructor argument not correct type to construct array element
@@ -406,7 +405,7 @@ ERROR: node is still EOpNull!
0:? Linker Objects
0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float)
0:? 'gu' ( global implicitly-sized array of 7-element array of float)
-0:? 'gimp' ( global implicitly-sized array of implicitly-sized array of float)
+0:? 'gimp' ( global implicitly-sized array of 1-element array of float)
0:? 'g4' ( global 4-element array of 7-element array of float)
0:? 'g5' ( global 5-element array of 7-element array of float)
@@ -769,7 +768,7 @@ ERROR: node is still EOpNull!
0:? Linker Objects
0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float)
0:? 'gu' ( global 1-element array of 7-element array of float)
-0:? 'gimp' ( global 1-element array of implicitly-sized array of float)
+0:? 'gimp' ( global 1-element array of 1-element array of float)
0:? 'g4' ( global 4-element array of 7-element array of float)
0:? 'g5' ( global 5-element array of 7-element array of float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430scope.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430scope.vert.out
index 3e710024ab1..0d9138922e7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430scope.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430scope.vert.out
@@ -1,5 +1,4 @@
430scope.vert
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:5: 'a' : redefinition
ERROR: 0:17: 'b' : function name is redeclaration of existing name
ERROR: 0:20: 'c' : redefinition
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/435.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/435.vert.out
new file mode 100644
index 00000000000..188a0a43c3b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/435.vert.out
@@ -0,0 +1,25 @@
+435.vert
+ERROR: version not supported
+ERROR: 1 compilation errors. No code generated.
+
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:2 Function Definition: main( ( global void)
+0:2 Function Parameters:
+0:? Linker Objects
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:2 Function Definition: main( ( global void)
+0:2 Function Parameters:
+0:? Linker Objects
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.frag.out
index ff276415fce..18e014f9219 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.frag.out
@@ -1,5 +1,4 @@
440.frag
-Warning, version 440 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:11: 'location' : overlapping use of location 4
ERROR: 0:13: 'component' : type overflows the available 4 components
ERROR: 0:22: 'location' : fragment outputs sharing the same location must be the same basic type 30
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out
index 3448113c830..8eafb0aea1d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out
@@ -1,5 +1,4 @@
440.vert
-Warning, version 440 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:8: 'component' : type overflows the available 4 components
ERROR: 0:15: 'component' : component is too large
ERROR: 0:23: 'location' : overlapping use of location 4
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.comp.out
index 203c4b24d17..4ae77ccaa06 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.comp.out
@@ -1,18 +1,24 @@
450.comp
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+ERROR: 0:2: 'local_size_x' : must be at least 1
+ERROR: 0:5: 'shared' : not allowed in nested scope
+ERROR: 2 compilation errors. No code generated.
+
Shader version: 450
local_size = (1, 1, 1)
-0:? Sequence
+ERROR: node is still EOpNull!
+0:3 Function Definition: main( ( global void)
+0:3 Function Parameters:
0:? Linker Objects
Linked compute stage:
-ERROR: Linking compute stage: Missing entry point: Each stage requires one entry point
Shader version: 450
local_size = (1, 1, 1)
-0:? Sequence
+ERROR: node is still EOpNull!
+0:3 Function Definition: main( ( global void)
+0:3 Function Parameters:
0:? Linker Objects
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.frag.out
index 297ae63fb01..9cbb4cbd08a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.frag.out
@@ -1,8 +1,11 @@
450.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+ERROR: 0:63: 'location' : cannot use in a block array where new locations are needed for each block element
+ERROR: 0:68: 'early_fragment_tests' : can only apply to a standalone qualifier
+ERROR: 2 compilation errors. No code generated.
+
Shader version: 450
-0:? Sequence
+ERROR: node is still EOpNull!
0:8 Function Definition: main( ( global void)
0:8 Function Parameters:
0:10 Sequence
@@ -160,13 +163,16 @@ Shader version: 450
0:? 'us2dmsa' ( uniform usampler2DMSArray)
0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS)
0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray)
+0:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m})
+0:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g})
+0:? 'f' ( smooth in float)
Linked fragment stage:
Shader version: 450
-0:? Sequence
+ERROR: node is still EOpNull!
0:8 Function Definition: main( ( global void)
0:8 Function Parameters:
0:10 Sequence
@@ -273,4 +279,7 @@ Shader version: 450
0:? 'us2dmsa' ( uniform usampler2DMSArray)
0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS)
0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray)
+0:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m})
+0:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g})
+0:? 'f' ( smooth in float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.geom.out
index 5e6c88f9d19..e75bf939ad6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.geom.out
@@ -1,72 +1,85 @@
450.geom
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+ERROR: 0:15: '[' : array index out of range '3'
+ERROR: 0:15: 'gl_Position' : no such field in structure
+ERROR: 0:19: 'points' : can only apply to a standalone qualifier
+ERROR: 3 compilation errors. No code generated.
+
Shader version: 450
invocations = -1
max_vertices = -1
-input primitive = none
+input primitive = triangles
output primitive = none
-0:? Sequence
-0:11 Function Definition: main( ( global void)
-0:11 Function Parameters:
-0:13 Sequence
-0:13 move second child to first child ( temp float)
-0:13 direct index (layout( stream=0) temp float CullDistance)
-0:13 gl_CullDistance: direct index for structure (layout( stream=0) out 3-element array of float CullDistance)
-0:13 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-element array of float CullDistance gl_CullDistance})
-0:13 Constant:
-0:13 3 (const uint)
-0:13 Constant:
-0:13 2 (const int)
-0:13 direct index ( temp float CullDistance)
-0:13 gl_CullDistance: direct index for structure ( in 3-element array of float CullDistance)
-0:13 direct index ( temp block{ in 3-element array of float CullDistance gl_CullDistance})
-0:13 'gl_in' ( in implicitly-sized array of block{ in 3-element array of float CullDistance gl_CullDistance})
-0:13 Constant:
-0:13 1 (const int)
-0:13 Constant:
-0:13 0 (const int)
-0:13 Constant:
-0:13 2 (const int)
+ERROR: node is still EOpNull!
+0:13 Function Definition: main( ( global void)
+0:13 Function Parameters:
+0:15 Sequence
+0:15 direct index ( temp block{ in 3-element array of float CullDistance gl_CullDistance})
+0:15 'gl_in' ( in 3-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
+0:15 Constant:
+0:15 3 (const int)
+0:16 move second child to first child ( temp float)
+0:16 direct index (layout( stream=0) temp float CullDistance)
+0:16 gl_CullDistance: direct index for structure (layout( stream=0) out 3-element array of float CullDistance)
+0:16 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-element array of float CullDistance gl_CullDistance})
+0:16 Constant:
+0:16 3 (const uint)
+0:16 Constant:
+0:16 2 (const int)
+0:16 direct index ( temp float CullDistance)
+0:16 gl_CullDistance: direct index for structure ( in 3-element array of float CullDistance)
+0:16 direct index ( temp block{ in 3-element array of float CullDistance gl_CullDistance})
+0:16 'gl_in' ( in 3-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 2 (const int)
0:? Linker Objects
-0:? 'gl_in' ( in implicitly-sized array of block{ in 3-element array of float CullDistance gl_CullDistance})
+0:? 'gl_in' ( in 3-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-element array of float CullDistance gl_CullDistance})
+0:? 'f' ( in 3-element array of float)
Linked geometry stage:
-ERROR: Linking geometry stage: At least one shader must specify an input layout primitive
ERROR: Linking geometry stage: At least one shader must specify an output layout primitive
ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value)
Shader version: 450
invocations = 1
max_vertices = -1
-input primitive = none
+input primitive = triangles
output primitive = none
-0:? Sequence
-0:11 Function Definition: main( ( global void)
-0:11 Function Parameters:
-0:13 Sequence
-0:13 move second child to first child ( temp float)
-0:13 direct index (layout( stream=0) temp float CullDistance)
-0:13 gl_CullDistance: direct index for structure (layout( stream=0) out 3-element array of float CullDistance)
-0:13 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-element array of float CullDistance gl_CullDistance})
-0:13 Constant:
-0:13 3 (const uint)
-0:13 Constant:
-0:13 2 (const int)
-0:13 direct index ( temp float CullDistance)
-0:13 gl_CullDistance: direct index for structure ( in 3-element array of float CullDistance)
-0:13 direct index ( temp block{ in 3-element array of float CullDistance gl_CullDistance})
-0:13 'gl_in' ( in 2-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
-0:13 Constant:
-0:13 1 (const int)
-0:13 Constant:
-0:13 0 (const int)
-0:13 Constant:
-0:13 2 (const int)
+ERROR: node is still EOpNull!
+0:13 Function Definition: main( ( global void)
+0:13 Function Parameters:
+0:15 Sequence
+0:15 direct index ( temp block{ in 3-element array of float CullDistance gl_CullDistance})
+0:15 'gl_in' ( in 3-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
+0:15 Constant:
+0:15 3 (const int)
+0:16 move second child to first child ( temp float)
+0:16 direct index (layout( stream=0) temp float CullDistance)
+0:16 gl_CullDistance: direct index for structure (layout( stream=0) out 3-element array of float CullDistance)
+0:16 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-element array of float CullDistance gl_CullDistance})
+0:16 Constant:
+0:16 3 (const uint)
+0:16 Constant:
+0:16 2 (const int)
+0:16 direct index ( temp float CullDistance)
+0:16 gl_CullDistance: direct index for structure ( in 3-element array of float CullDistance)
+0:16 direct index ( temp block{ in 3-element array of float CullDistance gl_CullDistance})
+0:16 'gl_in' ( in 3-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 2 (const int)
0:? Linker Objects
-0:? 'gl_in' ( in 2-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
+0:? 'gl_in' ( in 3-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-element array of float CullDistance gl_CullDistance})
+0:? 'f' ( in 3-element array of float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tesc.out
index 29da425ec94..b3f4e252d4e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tesc.out
@@ -1,9 +1,11 @@
450.tesc
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+ERROR: 0:20: 'location' : cannot use in a block array where new locations are needed for each block element
+ERROR: 1 compilation errors. No code generated.
+
Shader version: 450
vertices = -1
-0:? Sequence
+ERROR: node is still EOpNull!
0:11 Function Definition: main( ( global void)
0:11 Function Parameters:
0:13 Sequence
@@ -30,6 +32,8 @@ vertices = -1
0:? Linker Objects
0:? 'gl_in' ( in 32-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
0:? 'gl_out' ( out 4-element array of block{ out 3-element array of float CullDistance gl_CullDistance})
+0:? 'bInst1' ( out 2-element array of block{layout( location=4) out float f, layout( location=5) out float g})
+0:? 'bInst2' ( out 2-element array of 3-element array of block{layout( location=6) out float f, layout( location=7) out float g})
Linked tessellation control stage:
@@ -38,7 +42,7 @@ ERROR: Linking tessellation control stage: At least one shader must specify an o
Shader version: 450
vertices = -1
-0:? Sequence
+ERROR: node is still EOpNull!
0:11 Function Definition: main( ( global void)
0:11 Function Parameters:
0:13 Sequence
@@ -65,4 +69,6 @@ vertices = -1
0:? Linker Objects
0:? 'gl_in' ( in 32-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
0:? 'gl_out' ( out 4-element array of block{ out 3-element array of float CullDistance gl_CullDistance})
+0:? 'bInst1' ( out 2-element array of block{layout( location=4) out float f, layout( location=5) out float g})
+0:? 'bInst2' ( out 2-element array of 3-element array of block{layout( location=6) out float f, layout( location=7) out float g})
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tese.out
index b7735e66baf..796d6f1604d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tese.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.tese.out
@@ -1,11 +1,18 @@
450.tese
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+ERROR: 0:16: 'equal_spacing' : can only apply to a standalone qualifier
+ERROR: 0:17: 'fractional_even_spacing' : can only apply to a standalone qualifier
+ERROR: 0:18: 'fractional_odd_spacing' : can only apply to a standalone qualifier
+ERROR: 0:19: 'cw' : can only apply to a standalone qualifier
+ERROR: 0:20: 'ccw' : can only apply to a standalone qualifier
+ERROR: 0:21: 'point_mode' : can only apply to a standalone qualifier
+ERROR: 6 compilation errors. No code generated.
+
Shader version: 450
input primitive = none
vertex spacing = none
triangle order = none
-0:? Sequence
+ERROR: node is still EOpNull!
0:11 Function Definition: main( ( global void)
0:11 Function Parameters:
0:13 Sequence
@@ -30,6 +37,12 @@ triangle order = none
0:? Linker Objects
0:? 'gl_in' ( in 32-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
0:? 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance})
+0:? 'f1' ( in 32-element array of float)
+0:? 'f2' ( in 32-element array of float)
+0:? 'f3' ( in 32-element array of float)
+0:? 'f4' ( in 32-element array of float)
+0:? 'f5' ( in 32-element array of float)
+0:? 'f6' ( in 32-element array of float)
Linked tessellation evaluation stage:
@@ -40,7 +53,7 @@ Shader version: 450
input primitive = none
vertex spacing = equal_spacing
triangle order = ccw
-0:? Sequence
+ERROR: node is still EOpNull!
0:11 Function Definition: main( ( global void)
0:11 Function Parameters:
0:13 Sequence
@@ -65,4 +78,10 @@ triangle order = ccw
0:? Linker Objects
0:? 'gl_in' ( in 32-element array of block{ in 3-element array of float CullDistance gl_CullDistance})
0:? 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance})
+0:? 'f1' ( in 32-element array of float)
+0:? 'f2' ( in 32-element array of float)
+0:? 'f3' ( in 32-element array of float)
+0:? 'f4' ( in 32-element array of float)
+0:? 'f5' ( in 32-element array of float)
+0:? 'f6' ( in 32-element array of float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.vert.out
index cc300d99ea0..64143de5660 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/450.vert.out
@@ -1,9 +1,25 @@
450.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:12: 'out' : cannot be bool
ERROR: 0:13: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: outo
-ERROR: 0:27: '::' : not supported
-ERROR: 3 compilation errors. No code generated.
+ERROR: 0:30: '::' : not supported
+ERROR: 0:31: 'atomicCounterAdd' : no matching overloaded function found
+ERROR: 0:32: 'atomicCounterSubtract' : no matching overloaded function found
+ERROR: 0:33: 'atomicCounterMin' : no matching overloaded function found
+ERROR: 0:34: 'atomicCounterMax' : no matching overloaded function found
+ERROR: 0:35: 'atomicCounterAnd' : no matching overloaded function found
+ERROR: 0:36: 'atomicCounterOr' : no matching overloaded function found
+ERROR: 0:37: 'atomicCounterXor' : no matching overloaded function found
+ERROR: 0:38: 'atomicCounterExchange' : no matching overloaded function found
+ERROR: 0:39: 'atomicCounterCompSwap' : no matching overloaded function found
+ERROR: 0:41: 'gl_BaseVertex' : undeclared identifier
+ERROR: 0:41: 'gl_BaseInstance' : undeclared identifier
+ERROR: 0:41: 'gl_DrawID' : undeclared identifier
+ERROR: 0:41: '=' : cannot convert from ' temp float' to ' temp int'
+ERROR: 0:44: 'anyInvocation' : no matching overloaded function found
+ERROR: 0:45: 'allInvocations' : no matching overloaded function found
+ERROR: 0:46: 'allInvocationsEqual' : no matching overloaded function found
+ERROR: 0:48: 'extraneous semicolon' : not supported for this version or the enabled extensions
+ERROR: 20 compilation errors. No code generated.
Shader version: 450
@@ -21,8 +37,33 @@ ERROR: node is still EOpNull!
0:9 2 (const int)
0:9 Constant:
0:9 4.500000
-0:25 Function Definition: foo( ( global void)
-0:25 Function Parameters:
+0:28 Function Definition: foo( ( global void)
+0:28 Function Parameters:
+0:? Sequence
+0:31 Constant:
+0:31 0.000000
+0:32 Constant:
+0:32 0.000000
+0:33 Constant:
+0:33 0.000000
+0:34 Constant:
+0:34 0.000000
+0:35 Constant:
+0:35 0.000000
+0:36 Constant:
+0:36 0.000000
+0:37 Constant:
+0:37 0.000000
+0:38 Constant:
+0:38 0.000000
+0:39 Constant:
+0:39 0.000000
+0:44 Constant:
+0:44 0.000000
+0:45 Constant:
+0:45 0.000000
+0:46 Constant:
+0:46 0.000000
0:? Linker Objects
0:? 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance})
0:? 'outb' ( smooth out bool)
@@ -34,6 +75,8 @@ ERROR: node is still EOpNull!
0:? 'outsa' ( smooth out 4-element array of structure{ global float f})
0:? 'outSA' ( smooth out structure{ global 4-element array of float f})
0:? 'outSS' ( smooth out structure{ global float f, global structure{ global float f} s})
+0:? 'aui' (layout( binding=0 offset=0) uniform atomic_uint)
+0:? 'ui' ( global uint)
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
@@ -67,6 +110,8 @@ ERROR: node is still EOpNull!
0:? 'outsa' ( smooth out 4-element array of structure{ global float f})
0:? 'outSA' ( smooth out structure{ global 4-element array of float f})
0:? 'outSS' ( smooth out structure{ global float f, global structure{ global float f} s})
+0:? 'aui' (layout( binding=0 offset=0) uniform atomic_uint)
+0:? 'ui' ( global uint)
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.frag.out
new file mode 100644
index 00000000000..883d949b23c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.frag.out
@@ -0,0 +1,55 @@
+460.frag
+Shader version: 460
+0:? Sequence
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 interpolateAtCentroid ( global 4-component vector of float)
+0:12 v: direct index for structure ( global 4-component vector of float)
+0:12 's' ( smooth in structure{ global float f, global 4-component vector of float v})
+0:12 Constant:
+0:12 1 (const int)
+0:14 move second child to first child ( temp bool)
+0:14 'b1' ( temp bool)
+0:14 anyInvocation ( global bool)
+0:14 'b1' ( temp bool)
+0:15 move second child to first child ( temp bool)
+0:15 'b1' ( temp bool)
+0:15 allInvocations ( global bool)
+0:15 'b1' ( temp bool)
+0:16 move second child to first child ( temp bool)
+0:16 'b1' ( temp bool)
+0:16 allInvocationsEqual ( global bool)
+0:16 'b1' ( temp bool)
+0:? Linker Objects
+0:? 's' ( smooth in structure{ global float f, global 4-component vector of float v})
+
+
+Linked fragment stage:
+
+
+Shader version: 460
+0:? Sequence
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 interpolateAtCentroid ( global 4-component vector of float)
+0:12 v: direct index for structure ( global 4-component vector of float)
+0:12 's' ( smooth in structure{ global float f, global 4-component vector of float v})
+0:12 Constant:
+0:12 1 (const int)
+0:14 move second child to first child ( temp bool)
+0:14 'b1' ( temp bool)
+0:14 anyInvocation ( global bool)
+0:14 'b1' ( temp bool)
+0:15 move second child to first child ( temp bool)
+0:15 'b1' ( temp bool)
+0:15 allInvocations ( global bool)
+0:15 'b1' ( temp bool)
+0:16 move second child to first child ( temp bool)
+0:16 'b1' ( temp bool)
+0:16 allInvocationsEqual ( global bool)
+0:16 'b1' ( temp bool)
+0:? Linker Objects
+0:? 's' ( smooth in structure{ global float f, global 4-component vector of float v})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.vert.out
new file mode 100644
index 00000000000..8fa659b307a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.vert.out
@@ -0,0 +1,51 @@
+460.vert
+Shader version: 460
+0:? Sequence
+0:7 Function Definition: main( ( global void)
+0:7 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp bool)
+0:10 'b1' ( temp bool)
+0:10 anyInvocation ( global bool)
+0:10 'b1' ( temp bool)
+0:11 move second child to first child ( temp bool)
+0:11 'b1' ( temp bool)
+0:11 allInvocations ( global bool)
+0:11 'b1' ( temp bool)
+0:12 move second child to first child ( temp bool)
+0:12 'b1' ( temp bool)
+0:12 allInvocationsEqual ( global bool)
+0:12 'b1' ( temp bool)
+0:? Linker Objects
+0:? 'i' ( global int)
+0:? 'f' ( global float)
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 460
+0:? Sequence
+0:7 Function Definition: main( ( global void)
+0:7 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp bool)
+0:10 'b1' ( temp bool)
+0:10 anyInvocation ( global bool)
+0:10 'b1' ( temp bool)
+0:11 move second child to first child ( temp bool)
+0:11 'b1' ( temp bool)
+0:11 allInvocations ( global bool)
+0:11 'b1' ( temp bool)
+0:12 move second child to first child ( temp bool)
+0:12 'b1' ( temp bool)
+0:12 allInvocationsEqual ( global bool)
+0:12 'b1' ( temp bool)
+0:? Linker Objects
+0:? 'i' ( global int)
+0:? 'f' ( global float)
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/atomic_uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/atomic_uint.frag.out
index e0ba0994b1f..e2773f9eb9e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/atomic_uint.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/atomic_uint.frag.out
@@ -1,5 +1,4 @@
atomic_uint.frag
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:10: 'atomic_uint' : samplers and atomic_uints cannot be output parameters
ERROR: 0:12: 'return' : type does not match, or is not convertible to, the function's return type
ERROR: 0:18: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: non_uniform_counter
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badChars.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badChars.frag.out
index de9af0dae4a..e3fec617a96 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badChars.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badChars.frag.out
@@ -6,7 +6,7 @@ ERROR: 0:4: 'preprocessor evaluation' : bad expression
ERROR: 0:4: '#if' : unexpected tokens following directive
ERROR: 0:6: '€' : unexpected token
ERROR: 0:7: 'string' : End of line in string
-ERROR: 0:7: '' : syntax error
+ERROR: 0:7: '' : syntax error, unexpected INT, expecting COMMA or SEMICOLON
ERROR: 8 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badMacroArgs.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badMacroArgs.frag.out
index 95937ce318a..5e6233f8d20 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badMacroArgs.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/badMacroArgs.frag.out
@@ -1,5 +1,4 @@
badMacroArgs.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:4: 'macro expansion' : Too few args in Macro m
ERROR: 0:4: '' : compilation terminated
ERROR: 2 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/comment.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/comment.frag.out
index 57f2a1d0834..b1a00ff5174 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/comment.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/comment.frag.out
@@ -1,5 +1,4 @@
comment.frag
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:10: 'line continuation' : used at end of comment; the following line is still part of the comment
WARNING: 0:12: 'line continuation' : used at end of comment; the following line is still part of the comment
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFold.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFold.frag.out
index 8c014684377..33cfcbafedb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFold.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFold.frag.out
@@ -1,5 +1,4 @@
constFold.frag
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:109: '[' : index out of range '-1'
ERROR: 0:110: '[' : vector index out of range '4'
ERROR: 0:111: '[' : index out of range '-2'
@@ -179,7 +178,7 @@ ERROR: node is still EOpNull!
0:83 Constant:
0:83 2147483647 (const int)
0:84 Constant:
-0:84 inf
+0:84 +1.#INF
0:88 Constant:
0:88 2 (const uint)
0:88 3 (const uint)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFoldIntMin.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFoldIntMin.frag.out
new file mode 100644
index 00000000000..da5bc26b870
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constFoldIntMin.frag.out
@@ -0,0 +1,51 @@
+constFoldIntMin.frag
+Shader version: 460
+Requested GL_AMD_gpu_shader_int16
+Requested GL_ARB_gpu_shader_int64
+0:? Sequence
+0:5 Function Definition: a( ( global void)
+0:5 Function Parameters:
+0:6 Sequence
+0:6 Sequence
+0:6 move second child to first child ( temp int16_t)
+0:6 'u' ( temp int16_t)
+0:6 Constant:
+0:6 32768 (const int)
+0:7 Sequence
+0:7 move second child to first child ( temp int)
+0:7 'v' ( temp int)
+0:7 Constant:
+0:7 -2147483648 (const int)
+0:8 Sequence
+0:8 move second child to first child ( temp int64_t)
+0:8 'w' ( temp int64_t)
+0:8 Constant:
+0:8 -9223372036854775808 (const int64_t)
+0:9 Sequence
+0:9 move second child to first child ( temp int16_t)
+0:9 'x' ( temp int16_t)
+0:9 Constant:
+0:9 0 (const int)
+0:10 Sequence
+0:10 move second child to first child ( temp int)
+0:10 'y' ( temp int)
+0:10 Constant:
+0:10 0 (const int)
+0:11 Sequence
+0:11 move second child to first child ( temp int64_t)
+0:11 'z' ( temp int64_t)
+0:11 Constant:
+0:11 0 (const int64_t)
+0:? Linker Objects
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 460
+Requested GL_AMD_gpu_shader_int16
+Requested GL_ARB_gpu_shader_int64
+0:? Sequence
+0:? Linker Objects
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out
index d808e7277ce..1a2286aa917 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out
@@ -2,10 +2,9 @@ cppBad.vert
ERROR: 0:2: 'preprocessor evaluation' : bad expression
ERROR: 0:2: '#if' : unexpected tokens following directive
ERROR: 0:5: 'string' : End of line in string
-ERROR: 0:5: 'macro expansion' : expected '(' following n
ERROR: 0:5: '""' : string literals not supported
-ERROR: 0:5: '' : syntax error
-ERROR: 6 compilation errors. No code generated.
+ERROR: 0:5: '' : syntax error, unexpected INT, expecting COMMA or SEMICOLON
+ERROR: 5 compilation errors. No code generated.
Shader version: 100
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppDeepNest.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppDeepNest.frag.out
new file mode 100644
index 00000000000..969a256dd50
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppDeepNest.frag.out
@@ -0,0 +1,20 @@
+cppDeepNest.frag
+ERROR: 0:66: '#if/#ifdef/#ifndef' : maximum nesting depth exceeded
+ERROR: 0:66: '' : missing #endif
+ERROR: 0:66: '' : syntax error, unexpected $end
+ERROR: 3 compilation errors. No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:? Linker Objects
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:? Linker Objects
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIndent.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIndent.vert.out
index e6ff0468c2a..05eb244de02 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIndent.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIndent.vert.out
@@ -1,6 +1,6 @@
cppIndent.vert
ERROR: 0:61: 'macro expansion' : Too few args in Macro FUNC
-ERROR: 0:61: '' : syntax error
+ERROR: 0:61: '' : syntax error, unexpected COMMA
ERROR: 2 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIntMinOverNegativeOne.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIntMinOverNegativeOne.frag.out
new file mode 100644
index 00000000000..5dce7c3ebe5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppIntMinOverNegativeOne.frag.out
@@ -0,0 +1,14 @@
+cppIntMinOverNegativeOne.frag
+Shader version: 100
+0:? Sequence
+0:? Linker Objects
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+0:? Sequence
+0:? Linker Objects
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppPassMacroName.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppPassMacroName.frag.out
new file mode 100644
index 00000000000..d8459b3bc03
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppPassMacroName.frag.out
@@ -0,0 +1,67 @@
+cppPassMacroName.frag
+Shader version: 100
+0:? Sequence
+0:5 Function Definition: main( ( global void)
+0:5 Function Parameters:
+0:7 Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp mediump int)
+0:7 'f1' ( temp mediump int)
+0:7 Constant:
+0:7 4 (const int)
+0:8 Sequence
+0:8 move second child to first child ( temp mediump int)
+0:8 'f2' ( temp mediump int)
+0:8 'f1' ( temp mediump int)
+0:9 Sequence
+0:9 move second child to first child ( temp mediump int)
+0:9 'f3' ( temp mediump int)
+0:9 Constant:
+0:9 9 (const int)
+0:10 Sequence
+0:10 move second child to first child ( temp mediump int)
+0:10 'f4' ( temp mediump int)
+0:10 Constant:
+0:10 1 (const int)
+0:11 Sequence
+0:11 move second child to first child ( temp mediump int)
+0:11 'f5' ( temp mediump int)
+0:11 Constant:
+0:11 5 (const int)
+0:? Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+0:? Sequence
+0:5 Function Definition: main( ( global void)
+0:5 Function Parameters:
+0:7 Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp mediump int)
+0:7 'f1' ( temp mediump int)
+0:7 Constant:
+0:7 4 (const int)
+0:8 Sequence
+0:8 move second child to first child ( temp mediump int)
+0:8 'f2' ( temp mediump int)
+0:8 'f1' ( temp mediump int)
+0:9 Sequence
+0:9 move second child to first child ( temp mediump int)
+0:9 'f3' ( temp mediump int)
+0:9 Constant:
+0:9 9 (const int)
+0:10 Sequence
+0:10 move second child to first child ( temp mediump int)
+0:10 'f4' ( temp mediump int)
+0:10 Constant:
+0:10 1 (const int)
+0:11 Sequence
+0:11 move second child to first child ( temp mediump int)
+0:11 'f5' ( temp mediump int)
+0:11 Constant:
+0:11 5 (const int)
+0:? Linker Objects
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppSimple.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppSimple.vert.out
index 0696c744707..edb0c3378a0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppSimple.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppSimple.vert.out
@@ -1,5 +1,4 @@
cppSimple.vert
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:77: '#error' : good1
ERROR: 0:81: '#error' : good2
ERROR: 0:85: '#error' : good3
@@ -76,10 +75,8 @@ ERROR: 12:20051: '#error' : good evaluation 1
ERROR: 12:20055: '#error' : good evaluation 2
ERROR: 12:9000: 'preprocessor evaluation' : expected ')'
ERROR: 12:9002: '#if' : unexpected tokens following directive
-ERROR: 12:9014: 'macro expansion' : expected '(' following FOOOM
ERROR: 12:9014: 'FOOOM' : undeclared identifier
ERROR: 12:9014: '=' : cannot convert from ' temp float' to ' global int'
-ERROR: 12:9015: 'macro expansion' : expected '(' following FOOOM
ERROR: 12:9016: 'preprocessor evaluation' : can't evaluate expression
ERROR: 12:9016: 'preprocessor evaluation' : bad expression
ERROR: 12:9500: 'preprocessor evaluation' : bad expression
@@ -91,6 +88,8 @@ ERROR: 12:9504: '#if' : unexpected tokens following directive
ERROR: 12:9506: '#error' : \ 377
ERROR: 12:9507: '#error' : \ 376
ERROR: 12:9508: '#error' : \ 377
+ERROR: 12:9602: 'defined' : cannot use in preprocessor expression when expanded from macros
+ERROR: 12:9603: '#error' : DEF_DEFINED then
ERROR: 12:10002: '' : missing #endif
ERROR: 88 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dce.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dce.frag.out
index 63d194ca48a..6b02eb1c21c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dce.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/dce.frag.out
@@ -1,6 +1,4 @@
dce.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 400
0:? Sequence
0:5 Sequence
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionSemantics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionSemantics.frag.out
index 6c5ebdc6f80..d04e6e7adcf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionSemantics.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/functionSemantics.frag.out
@@ -1,5 +1,4 @@
functionSemantics.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:74: 'return' : cannot convert return value to function return type
WARNING: 0:74: 'return' : type conversion on return values was not explicitly allowed until version 420
ERROR: 1 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.-D-U.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.-D-U.frag.out
new file mode 100644
index 00000000000..6538e849c72
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.-D-U.frag.out
@@ -0,0 +1,55 @@
+glsl.-D-U.frag
+Shader version: 450
+0:? Sequence
+0:7 Function Definition: main( ( global void)
+0:7 Function Parameters:
+0:10 Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 'color' (layout( location=0) out 4-component vector of float)
+0:10 Constant:
+0:10 1.000000
+0:10 1.000000
+0:10 1.000000
+0:10 1.000000
+0:16 Post-Increment ( temp 4-component vector of float)
+0:16 'color' (layout( location=0) out 4-component vector of float)
+0:24 vector scale second child into first child ( temp 4-component vector of float)
+0:24 'color' (layout( location=0) out 4-component vector of float)
+0:24 Constant:
+0:24 3.000000
+0:28 vector scale second child into first child ( temp 4-component vector of float)
+0:28 'color' (layout( location=0) out 4-component vector of float)
+0:28 Constant:
+0:28 400.000000
+0:? Linker Objects
+0:? 'color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+0:? Sequence
+0:7 Function Definition: main( ( global void)
+0:7 Function Parameters:
+0:10 Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 'color' (layout( location=0) out 4-component vector of float)
+0:10 Constant:
+0:10 1.000000
+0:10 1.000000
+0:10 1.000000
+0:10 1.000000
+0:16 Post-Increment ( temp 4-component vector of float)
+0:16 'color' (layout( location=0) out 4-component vector of float)
+0:24 vector scale second child into first child ( temp 4-component vector of float)
+0:24 'color' (layout( location=0) out 4-component vector of float)
+0:24 Constant:
+0:24 3.000000
+0:28 vector scale second child into first child ( temp 4-component vector of float)
+0:28 'color' (layout( location=0) out 4-component vector of float)
+0:28 Constant:
+0:28 400.000000
+0:? Linker Objects
+0:? 'color' (layout( location=0) out 4-component vector of float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.bad.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.bad.out
new file mode 100644
index 00000000000..6f4c9aebec8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.bad.out
@@ -0,0 +1,45 @@
+glsl.entryPointRename.vert
+ERROR: Source entry point must be "main"
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 20
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "foo" 13
+ Source GLSL 460
+ Name 4 "foo"
+ Name 11 "gl_PerVertex"
+ MemberName 11(gl_PerVertex) 0 "gl_Position"
+ MemberName 11(gl_PerVertex) 1 "gl_PointSize"
+ MemberName 11(gl_PerVertex) 2 "gl_ClipDistance"
+ MemberName 11(gl_PerVertex) 3 "gl_CullDistance"
+ Name 13 ""
+ MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+ MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+ MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+ MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
+ Decorate 11(gl_PerVertex) Block
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeInt 32 0
+ 9: 8(int) Constant 1
+ 10: TypeArray 6(float) 9
+11(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 10
+ 12: TypePointer Output 11(gl_PerVertex)
+ 13: 12(ptr) Variable Output
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16: 6(float) Constant 1065353216
+ 17: 7(fvec4) ConstantComposite 16 16 16 16
+ 18: TypePointer Output 7(fvec4)
+ 4(foo): 2 Function None 3
+ 5: Label
+ 19: 18(ptr) AccessChain 13 15
+ Store 19 17
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.out
new file mode 100644
index 00000000000..7cc825bca58
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.out
@@ -0,0 +1,43 @@
+glsl.entryPointRename.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 20
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "foo" 13
+ Source GLSL 460
+ Name 4 "foo"
+ Name 11 "gl_PerVertex"
+ MemberName 11(gl_PerVertex) 0 "gl_Position"
+ MemberName 11(gl_PerVertex) 1 "gl_PointSize"
+ MemberName 11(gl_PerVertex) 2 "gl_ClipDistance"
+ MemberName 11(gl_PerVertex) 3 "gl_CullDistance"
+ Name 13 ""
+ MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+ MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+ MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+ MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
+ Decorate 11(gl_PerVertex) Block
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeInt 32 0
+ 9: 8(int) Constant 1
+ 10: TypeArray 6(float) 9
+11(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 10
+ 12: TypePointer Output 11(gl_PerVertex)
+ 13: 12(ptr) Variable Output
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16: 6(float) Constant 1065353216
+ 17: 7(fvec4) ConstantComposite 16 16 16 16
+ 18: TypePointer Output 7(fvec4)
+ 4(foo): 2 Function None 3
+ 5: Label
+ 19: 18(ptr) AccessChain 13 15
+ Store 19 17
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename2.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename2.vert.out
new file mode 100644
index 00000000000..aebd86beee0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.entryPointRename2.vert.out
@@ -0,0 +1,4 @@
+glsl.entryPointRename2.vert
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out
index 8e4b3b883cd..782865abcce 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out
@@ -1,6 +1,5 @@
glspv.esversion.vert
ERROR: #version: ES shaders for OpenGL SPIR-V are not supported
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 1 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.frag.out
index daa1dc1e424..49398073bf2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.frag.out
@@ -1,9 +1,13 @@
glspv.frag
ERROR: 0:4: '#error' : GL_SPIRV is set ( correct , not an error )
ERROR: 0:6: '#error' : GL_SPIR is 100
-ERROR: 0:14: 'input_attachment_index' : only allowed when using GLSL for Vulkan
-ERROR: 0:14: '' : syntax error
-ERROR: 4 compilation errors. No code generated.
+ERROR: 0:21: 'noise1' : no matching overloaded function found
+ERROR: 0:22: 'noise2' : no matching overloaded function found
+ERROR: 0:23: 'noise3' : no matching overloaded function found
+ERROR: 0:24: 'noise4' : no matching overloaded function found
+ERROR: 0:27: 'input_attachment_index' : only allowed when using GLSL for Vulkan
+ERROR: 0:27: '' : syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 8 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.frag.out
index 3e8e8c4b008..30eb445201b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.version.frag.out
@@ -2,7 +2,7 @@ glspv.version.frag
ERROR: #version: compilation for SPIR-V does not support the compatibility profile
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 6
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out
index 5f6d9bbd54b..f2fe53b295c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out
@@ -1,5 +1,4 @@
glspv.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: 'push_constant' : only allowed when using GLSL for Vulkan
ERROR: 0:6: 'descriptor set' : only allowed when using GLSL for Vulkan
ERROR: 0:8: 'shared' : not allowed when generating SPIR-V
@@ -7,7 +6,7 @@ ERROR: 0:9: 'packed' : not allowed when generating SPIR-V
ERROR: 0:13: 'gl_VertexIndex' : undeclared identifier
ERROR: 0:14: 'gl_InstanceIndex' : undeclared identifier
ERROR: 0:17: 'gl_DepthRangeParameters' : undeclared identifier
-ERROR: 0:20: '' : syntax error
+ERROR: 0:20: '' : syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
ERROR: 8 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.-D-U.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.-D-U.frag.out
new file mode 100644
index 00000000000..06842e80097
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.-D-U.frag.out
@@ -0,0 +1,65 @@
+hlsl.-D-U.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 'color' ( global 4-component vector of float)
+0:9 Constant:
+0:9 1.000000
+0:9 1.000000
+0:9 1.000000
+0:9 1.000000
+0:15 subtract second child into first child ( temp 4-component vector of float)
+0:15 'color' ( global 4-component vector of float)
+0:15 Constant:
+0:15 5.000000
+0:21 Post-Increment ( temp 4-component vector of float)
+0:21 'color' ( global 4-component vector of float)
+0:29 vector scale second child into first child ( temp 4-component vector of float)
+0:29 'color' ( global 4-component vector of float)
+0:29 Constant:
+0:29 3.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'color' ( global 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 'color' ( global 4-component vector of float)
+0:9 Constant:
+0:9 1.000000
+0:9 1.000000
+0:9 1.000000
+0:9 1.000000
+0:15 subtract second child into first child ( temp 4-component vector of float)
+0:15 'color' ( global 4-component vector of float)
+0:15 Constant:
+0:15 5.000000
+0:21 Post-Increment ( temp 4-component vector of float)
+0:21 'color' ( global 4-component vector of float)
+0:29 vector scale second child into first child ( temp 4-component vector of float)
+0:29 'color' ( global 4-component vector of float)
+0:29 Constant:
+0:29 3.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'color' ( global 4-component vector of float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out
new file mode 100644
index 00000000000..694d4044fb6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out
@@ -0,0 +1,207 @@
+hlsl.aliasOpaque.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12 Function Definition: osCall(struct-OS-p1-f1-t211; ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? 's.ss' ( in sampler)
+0:? 's.a' ( in float)
+0:? 's.tex' ( in texture2D)
+0:? Sequence
+0:13 Branch: Return with expression
+0:13 vector-scale ( temp 4-component vector of float)
+0:? 's.a' ( in float)
+0:13 texture ( temp 4-component vector of float)
+0:13 Construct combined texture-sampler ( temp sampler2D)
+0:? 's.tex' ( in texture2D)
+0:? 's.ss' ( in sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:17 Function Definition: @main( ( temp 4-component vector of float)
+0:17 Function Parameters:
+0:? Sequence
+0:19 move second child to first child ( temp sampler)
+0:? 'os.ss' ( temp sampler)
+0:19 'gss2' ( uniform sampler)
+0:20 move second child to first child ( temp sampler)
+0:? 'os.ss' ( temp sampler)
+0:20 'gss' ( uniform sampler)
+0:21 move second child to first child ( temp texture2D)
+0:? 'os.tex' ( temp texture2D)
+0:21 'gtex' ( uniform texture2D)
+0:22 move second child to first child ( temp float)
+0:? 'os.a' ( temp float)
+0:22 Constant:
+0:22 3.000000
+0:28 Branch: Return with expression
+0:28 Function Call: osCall(struct-OS-p1-f1-t211; ( temp 4-component vector of float)
+0:? 'os.ss' ( temp sampler)
+0:? 'os.a' ( temp float)
+0:? 'os.tex' ( temp texture2D)
+0:17 Function Definition: main( ( temp void)
+0:17 Function Parameters:
+0:? Sequence
+0:17 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:17 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'gss' ( uniform sampler)
+0:? 'gss2' ( uniform sampler)
+0:? 'gtex' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12 Function Definition: osCall(struct-OS-p1-f1-t211; ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? 's.ss' ( in sampler)
+0:? 's.a' ( in float)
+0:? 's.tex' ( in texture2D)
+0:? Sequence
+0:13 Branch: Return with expression
+0:13 vector-scale ( temp 4-component vector of float)
+0:? 's.a' ( in float)
+0:13 texture ( temp 4-component vector of float)
+0:13 Construct combined texture-sampler ( temp sampler2D)
+0:? 's.tex' ( in texture2D)
+0:? 's.ss' ( in sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:17 Function Definition: @main( ( temp 4-component vector of float)
+0:17 Function Parameters:
+0:? Sequence
+0:19 move second child to first child ( temp sampler)
+0:? 'os.ss' ( temp sampler)
+0:19 'gss2' ( uniform sampler)
+0:20 move second child to first child ( temp sampler)
+0:? 'os.ss' ( temp sampler)
+0:20 'gss' ( uniform sampler)
+0:21 move second child to first child ( temp texture2D)
+0:? 'os.tex' ( temp texture2D)
+0:21 'gtex' ( uniform texture2D)
+0:22 move second child to first child ( temp float)
+0:? 'os.a' ( temp float)
+0:22 Constant:
+0:22 3.000000
+0:28 Branch: Return with expression
+0:28 Function Call: osCall(struct-OS-p1-f1-t211; ( temp 4-component vector of float)
+0:? 'os.ss' ( temp sampler)
+0:? 'os.a' ( temp float)
+0:? 'os.tex' ( temp texture2D)
+0:17 Function Definition: main( ( temp void)
+0:17 Function Parameters:
+0:? Sequence
+0:17 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:17 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'gss' ( uniform sampler)
+0:? 'gss2' ( uniform sampler)
+0:? 'gtex' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 59
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 57
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 17 "osCall(struct-OS-p1-f1-t211;"
+ Name 14 "s.ss"
+ Name 15 "s.a"
+ Name 16 "s.tex"
+ Name 20 "@main("
+ Name 35 "os.ss"
+ Name 37 "gss2"
+ Name 39 "gss"
+ Name 41 "os.tex"
+ Name 43 "gtex"
+ Name 45 "os.a"
+ Name 47 "param"
+ Name 49 "param"
+ Name 51 "param"
+ Name 57 "@entryPointOutput"
+ Decorate 37(gss2) DescriptorSet 0
+ Decorate 39(gss) DescriptorSet 0
+ Decorate 43(gtex) DescriptorSet 0
+ Decorate 57(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeSampler
+ 7: TypePointer Function 6
+ 8: TypeFloat 32
+ 9: TypePointer Function 8(float)
+ 10: TypeImage 8(float) 2D sampled format:Unknown
+ 11: TypePointer Function 10
+ 12: TypeVector 8(float) 4
+ 13: TypeFunction 12(fvec4) 7(ptr) 9(ptr) 11(ptr)
+ 19: TypeFunction 12(fvec4)
+ 25: TypeSampledImage 10
+ 27: TypeVector 8(float) 2
+ 28: 8(float) Constant 1045220557
+ 29: 8(float) Constant 1050253722
+ 30: 27(fvec2) ConstantComposite 28 29
+ 36: TypePointer UniformConstant 6
+ 37(gss2): 36(ptr) Variable UniformConstant
+ 39(gss): 36(ptr) Variable UniformConstant
+ 42: TypePointer UniformConstant 10
+ 43(gtex): 42(ptr) Variable UniformConstant
+ 46: 8(float) Constant 1077936128
+ 56: TypePointer Output 12(fvec4)
+57(@entryPointOutput): 56(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 58: 12(fvec4) FunctionCall 20(@main()
+ Store 57(@entryPointOutput) 58
+ Return
+ FunctionEnd
+17(osCall(struct-OS-p1-f1-t211;): 12(fvec4) Function None 13
+ 14(s.ss): 7(ptr) FunctionParameter
+ 15(s.a): 9(ptr) FunctionParameter
+ 16(s.tex): 11(ptr) FunctionParameter
+ 18: Label
+ 22: 8(float) Load 15(s.a)
+ 23: 10 Load 16(s.tex)
+ 24: 6 Load 14(s.ss)
+ 26: 25 SampledImage 23 24
+ 31: 12(fvec4) ImageSampleImplicitLod 26 30
+ 32: 12(fvec4) VectorTimesScalar 31 22
+ ReturnValue 32
+ FunctionEnd
+ 20(@main(): 12(fvec4) Function None 19
+ 21: Label
+ 35(os.ss): 7(ptr) Variable Function
+ 41(os.tex): 11(ptr) Variable Function
+ 45(os.a): 9(ptr) Variable Function
+ 47(param): 7(ptr) Variable Function
+ 49(param): 9(ptr) Variable Function
+ 51(param): 11(ptr) Variable Function
+ 38: 6 Load 37(gss2)
+ Store 35(os.ss) 38
+ 40: 6 Load 39(gss)
+ Store 35(os.ss) 40
+ 44: 10 Load 43(gtex)
+ Store 41(os.tex) 44
+ Store 45(os.a) 46
+ 48: 6 Load 35(os.ss)
+ Store 47(param) 48
+ 50: 8(float) Load 45(os.a)
+ Store 49(param) 50
+ 52: 10 Load 41(os.tex)
+ Store 51(param) 52
+ 53: 12(fvec4) FunctionCall 17(osCall(struct-OS-p1-f1-t211;) 47(param) 49(param) 51(param)
+ ReturnValue 53
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out
index a93643e5553..98303858ed1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out
@@ -1,5 +1,5 @@
hlsl.amend.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Sequence
@@ -81,7 +81,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Sequence
@@ -160,7 +160,7 @@ gl_FragCoord origin is upper left
0:? 'm' ( global 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 57
Capability Shader
@@ -168,6 +168,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "f1"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "f1"
Name 6 "@f1("
Name 8 "f2("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out
index 1beb71f4bbf..e32eb1590d0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out
@@ -1,5 +1,6 @@
hlsl.array.flatten.frag
-Shader version: 450
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:17 Function Definition: TestFn1( ( temp 4-component vector of float)
@@ -147,7 +148,7 @@ gl_FragCoord origin is upper left
0:? 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:31 Sequence
0:31 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? 'ps_output.color' (layout( location=0) out 4-component vector of float)
0:31 color: direct index for structure ( temp 4-component vector of float)
0:? 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:31 Constant:
@@ -167,13 +168,13 @@ gl_FragCoord origin is upper left
0:? 'g_samp_explicit[2]' (layout( binding=7) uniform sampler)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 3X3 matrix of float g_mats, layout( binding=10) uniform 4-element array of 3X3 matrix of float g_mats_explicit, uniform 4-element array of float g_floats})
0:? 'not_flattened_a' ( global 5-element array of int)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? 'ps_output.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:17 Function Definition: TestFn1( ( temp 4-component vector of float)
@@ -321,7 +322,7 @@ gl_FragCoord origin is upper left
0:? 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:31 Sequence
0:31 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? 'ps_output.color' (layout( location=0) out 4-component vector of float)
0:31 color: direct index for structure ( temp 4-component vector of float)
0:? 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:31 Constant:
@@ -341,18 +342,19 @@ gl_FragCoord origin is upper left
0:? 'g_samp_explicit[2]' (layout( binding=7) uniform sampler)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 3X3 matrix of float g_mats, layout( binding=10) uniform 4-element array of 3X3 matrix of float g_mats_explicit, uniform 4-element array of float g_floats})
0:? 'not_flattened_a' ( global 5-element array of int)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? 'ps_output.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 137
+// Generated by (magic number): 80002
+// Id's are bound by 143
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 128
+ EntryPoint Fragment 4 "main" 134
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "TestFn1("
Name 22 "TestFn2(t11[3];p1[3];"
@@ -365,60 +367,62 @@ gl_FragCoord origin is upper left
Name 34 "not_flattened_a"
Name 42 "g_tex[1]"
Name 45 "g_samp[1]"
- Name 61 "local_sampler_array"
- Name 63 "g_samp[0]"
- Name 68 "g_samp[2]"
- Name 71 "local_texture_array"
- Name 72 "g_tex[0]"
- Name 77 "g_tex[2]"
- Name 83 "local_float_array"
- Name 89 "$Global"
- MemberName 89($Global) 0 "g_mats"
- MemberName 89($Global) 1 "g_mats_explicit"
- MemberName 89($Global) 2 "g_floats"
- Name 91 ""
- Name 105 "aggShadow"
- Name 112 "aggShadow"
- Name 123 "ps_output"
- Name 124 "param"
- Name 128 "color"
- Name 131 "g_tex_explicit[0]"
- Name 132 "g_tex_explicit[1]"
- Name 133 "g_tex_explicit[2]"
- Name 134 "g_samp_explicit[0]"
- Name 135 "g_samp_explicit[1]"
- Name 136 "g_samp_explicit[2]"
+ Name 63 "local_sampler_array"
+ Name 65 "g_samp[0]"
+ Name 70 "g_samp[2]"
+ Name 73 "local_texture_array"
+ Name 74 "g_tex[0]"
+ Name 79 "g_tex[2]"
+ Name 85 "local_float_array"
+ Name 91 "$Global"
+ MemberName 91($Global) 0 "g_mats"
+ MemberName 91($Global) 1 "g_mats_explicit"
+ MemberName 91($Global) 2 "g_floats"
+ Name 93 ""
+ Name 107 "aggShadow"
+ Name 114 "aggShadow"
+ Name 121 "param"
+ Name 123 "param"
+ Name 129 "ps_output"
+ Name 130 "param"
+ Name 134 "ps_output.color"
+ Name 137 "g_tex_explicit[0]"
+ Name 138 "g_tex_explicit[1]"
+ Name 139 "g_tex_explicit[2]"
+ Name 140 "g_samp_explicit[0]"
+ Name 141 "g_samp_explicit[1]"
+ Name 142 "g_samp_explicit[2]"
Decorate 42(g_tex[1]) DescriptorSet 0
Decorate 45(g_samp[1]) DescriptorSet 0
- Decorate 63(g_samp[0]) DescriptorSet 0
- Decorate 68(g_samp[2]) DescriptorSet 0
- Decorate 72(g_tex[0]) DescriptorSet 0
- Decorate 77(g_tex[2]) DescriptorSet 0
- Decorate 86 ArrayStride 48
- Decorate 87 ArrayStride 48
- Decorate 88 ArrayStride 16
- MemberDecorate 89($Global) 0 RowMajor
- MemberDecorate 89($Global) 0 Offset 0
- MemberDecorate 89($Global) 0 MatrixStride 16
- MemberDecorate 89($Global) 1 RowMajor
- MemberDecorate 89($Global) 1 Offset 192
- MemberDecorate 89($Global) 1 MatrixStride 16
- MemberDecorate 89($Global) 2 Offset 384
- Decorate 89($Global) Block
- Decorate 91 DescriptorSet 0
- Decorate 128(color) Location 0
- Decorate 131(g_tex_explicit[0]) DescriptorSet 0
- Decorate 131(g_tex_explicit[0]) Binding 1
- Decorate 132(g_tex_explicit[1]) DescriptorSet 0
- Decorate 132(g_tex_explicit[1]) Binding 2
- Decorate 133(g_tex_explicit[2]) DescriptorSet 0
- Decorate 133(g_tex_explicit[2]) Binding 3
- Decorate 134(g_samp_explicit[0]) DescriptorSet 0
- Decorate 134(g_samp_explicit[0]) Binding 5
- Decorate 135(g_samp_explicit[1]) DescriptorSet 0
- Decorate 135(g_samp_explicit[1]) Binding 6
- Decorate 136(g_samp_explicit[2]) DescriptorSet 0
- Decorate 136(g_samp_explicit[2]) Binding 7
+ Decorate 65(g_samp[0]) DescriptorSet 0
+ Decorate 70(g_samp[2]) DescriptorSet 0
+ Decorate 74(g_tex[0]) DescriptorSet 0
+ Decorate 79(g_tex[2]) DescriptorSet 0
+ Decorate 88 ArrayStride 48
+ Decorate 89 ArrayStride 48
+ Decorate 90 ArrayStride 16
+ MemberDecorate 91($Global) 0 RowMajor
+ MemberDecorate 91($Global) 0 Offset 0
+ MemberDecorate 91($Global) 0 MatrixStride 16
+ MemberDecorate 91($Global) 1 RowMajor
+ MemberDecorate 91($Global) 1 Offset 192
+ MemberDecorate 91($Global) 1 MatrixStride 16
+ MemberDecorate 91($Global) 2 Offset 384
+ Decorate 91($Global) Block
+ Decorate 93 DescriptorSet 0
+ Decorate 134(ps_output.color) Location 0
+ Decorate 137(g_tex_explicit[0]) DescriptorSet 0
+ Decorate 137(g_tex_explicit[0]) Binding 1
+ Decorate 138(g_tex_explicit[1]) DescriptorSet 0
+ Decorate 138(g_tex_explicit[1]) Binding 2
+ Decorate 139(g_tex_explicit[2]) DescriptorSet 0
+ Decorate 139(g_tex_explicit[2]) Binding 3
+ Decorate 140(g_samp_explicit[0]) DescriptorSet 0
+ Decorate 140(g_samp_explicit[0]) Binding 5
+ Decorate 141(g_samp_explicit[1]) DescriptorSet 0
+ Decorate 141(g_samp_explicit[1]) Binding 6
+ Decorate 142(g_samp_explicit[2]) DescriptorSet 0
+ Decorate 142(g_samp_explicit[2]) Binding 7
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -428,10 +432,10 @@ gl_FragCoord origin is upper left
12: TypeInt 32 0
13: 12(int) Constant 3
14: TypeArray 11 13
- 15: TypePointer UniformConstant 14
+ 15: TypePointer Function 14
16: TypeSampler
17: TypeArray 16 13
- 18: TypePointer UniformConstant 17
+ 18: TypePointer Function 17
19: TypeFunction 7(fvec4) 15(ptr) 18(ptr)
24(PS_OUTPUT): TypeStruct 7(fvec4)
25: TypePointer Function 24(PS_OUTPUT)
@@ -453,48 +457,46 @@ gl_FragCoord origin is upper left
45(g_samp[1]): 44(ptr) Variable UniformConstant
47: TypeSampledImage 11
49: 6(float) Constant 1045220557
-61(local_sampler_array): 18(ptr) Variable UniformConstant
- 62: 30(int) Constant 0
- 63(g_samp[0]): 44(ptr) Variable UniformConstant
- 68(g_samp[2]): 44(ptr) Variable UniformConstant
-71(local_texture_array): 15(ptr) Variable UniformConstant
- 72(g_tex[0]): 41(ptr) Variable UniformConstant
- 77(g_tex[2]): 41(ptr) Variable UniformConstant
- 80: 12(int) Constant 4
- 81: TypeArray 6(float) 80
- 82: TypePointer Function 81
- 84: TypeVector 6(float) 3
- 85: TypeMatrix 84(fvec3) 3
- 86: TypeArray 85 80
- 87: TypeArray 85 80
- 88: TypeArray 6(float) 80
- 89($Global): TypeStruct 86 87 88
- 90: TypePointer Uniform 89($Global)
- 91: 90(ptr) Variable Uniform
- 92: TypePointer Uniform 88
- 96: TypePointer Function 6(float)
- 105(aggShadow): 15(ptr) Variable UniformConstant
- 112(aggShadow): 18(ptr) Variable UniformConstant
- 121: TypePointer Function 7(fvec4)
- 127: TypePointer Output 7(fvec4)
- 128(color): 127(ptr) Variable Output
-131(g_tex_explicit[0]): 41(ptr) Variable UniformConstant
-132(g_tex_explicit[1]): 41(ptr) Variable UniformConstant
-133(g_tex_explicit[2]): 41(ptr) Variable UniformConstant
-134(g_samp_explicit[0]): 44(ptr) Variable UniformConstant
-135(g_samp_explicit[1]): 44(ptr) Variable UniformConstant
-136(g_samp_explicit[2]): 44(ptr) Variable UniformConstant
+ 53: TypePointer Function 11
+ 56: TypePointer Function 16
+ 64: 30(int) Constant 0
+ 65(g_samp[0]): 44(ptr) Variable UniformConstant
+ 70(g_samp[2]): 44(ptr) Variable UniformConstant
+ 74(g_tex[0]): 41(ptr) Variable UniformConstant
+ 79(g_tex[2]): 41(ptr) Variable UniformConstant
+ 82: 12(int) Constant 4
+ 83: TypeArray 6(float) 82
+ 84: TypePointer Function 83
+ 86: TypeVector 6(float) 3
+ 87: TypeMatrix 86(fvec3) 3
+ 88: TypeArray 87 82
+ 89: TypeArray 87 82
+ 90: TypeArray 6(float) 82
+ 91($Global): TypeStruct 88 89 90
+ 92: TypePointer Uniform 91($Global)
+ 93: 92(ptr) Variable Uniform
+ 94: TypePointer Uniform 90
+ 98: TypePointer Function 6(float)
+ 127: TypePointer Function 7(fvec4)
+ 133: TypePointer Output 7(fvec4)
+134(ps_output.color): 133(ptr) Variable Output
+137(g_tex_explicit[0]): 41(ptr) Variable UniformConstant
+138(g_tex_explicit[1]): 41(ptr) Variable UniformConstant
+139(g_tex_explicit[2]): 41(ptr) Variable UniformConstant
+140(g_samp_explicit[0]): 44(ptr) Variable UniformConstant
+141(g_samp_explicit[1]): 44(ptr) Variable UniformConstant
+142(g_samp_explicit[2]): 44(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
- 123(ps_output): 25(ptr) Variable Function
- 124(param): 25(ptr) Variable Function
+ 129(ps_output): 25(ptr) Variable Function
+ 130(param): 25(ptr) Variable Function
Store 34(not_flattened_a) 40
- 125: 2 FunctionCall 28(@main(struct-PS_OUTPUT-vf41;) 124(param)
- 126:24(PS_OUTPUT) Load 124(param)
- Store 123(ps_output) 126
- 129: 121(ptr) AccessChain 123(ps_output) 62
- 130: 7(fvec4) Load 129
- Store 128(color) 130
+ 131: 2 FunctionCall 28(@main(struct-PS_OUTPUT-vf41;) 130(param)
+ 132:24(PS_OUTPUT) Load 130(param)
+ Store 129(ps_output) 132
+ 135: 127(ptr) AccessChain 129(ps_output) 64
+ 136: 7(fvec4) Load 135
+ Store 134(ps_output.color) 136
Return
FunctionEnd
9(TestFn1(): 7(fvec4) Function None 8
@@ -509,72 +511,82 @@ gl_FragCoord origin is upper left
20(l_tex): 15(ptr) FunctionParameter
21(l_samp): 18(ptr) FunctionParameter
23: Label
- 53: 41(ptr) AccessChain 20(l_tex) 36
- 54: 11 Load 53
- 55: 44(ptr) AccessChain 21(l_samp) 36
- 56: 16 Load 55
- 57: 47 SampledImage 54 56
- 58: 7(fvec4) ImageSampleImplicitLod 57 49
- ReturnValue 58
+ 54: 53(ptr) AccessChain 20(l_tex) 36
+ 55: 11 Load 54
+ 57: 56(ptr) AccessChain 21(l_samp) 36
+ 58: 16 Load 57
+ 59: 47 SampledImage 55 58
+ 60: 7(fvec4) ImageSampleImplicitLod 59 49
+ ReturnValue 60
FunctionEnd
28(@main(struct-PS_OUTPUT-vf41;): 2 Function None 26
27(ps_output): 25(ptr) FunctionParameter
29: Label
-83(local_float_array): 82(ptr) Variable Function
- 64: 16 Load 63(g_samp[0])
- 65: 44(ptr) AccessChain 61(local_sampler_array) 62
- Store 65 64
- 66: 16 Load 45(g_samp[1])
- 67: 44(ptr) AccessChain 61(local_sampler_array) 35
+63(local_sampler_array): 18(ptr) Variable Function
+73(local_texture_array): 15(ptr) Variable Function
+85(local_float_array): 84(ptr) Variable Function
+ 107(aggShadow): 15(ptr) Variable Function
+ 114(aggShadow): 18(ptr) Variable Function
+ 121(param): 15(ptr) Variable Function
+ 123(param): 18(ptr) Variable Function
+ 66: 16 Load 65(g_samp[0])
+ 67: 56(ptr) AccessChain 63(local_sampler_array) 64
Store 67 66
- 69: 16 Load 68(g_samp[2])
- 70: 44(ptr) AccessChain 61(local_sampler_array) 36
- Store 70 69
- 73: 11 Load 72(g_tex[0])
- 74: 41(ptr) AccessChain 71(local_texture_array) 62
- Store 74 73
- 75: 11 Load 42(g_tex[1])
- 76: 41(ptr) AccessChain 71(local_texture_array) 35
+ 68: 16 Load 45(g_samp[1])
+ 69: 56(ptr) AccessChain 63(local_sampler_array) 35
+ Store 69 68
+ 71: 16 Load 70(g_samp[2])
+ 72: 56(ptr) AccessChain 63(local_sampler_array) 36
+ Store 72 71
+ 75: 11 Load 74(g_tex[0])
+ 76: 53(ptr) AccessChain 73(local_texture_array) 64
Store 76 75
- 78: 11 Load 77(g_tex[2])
- 79: 41(ptr) AccessChain 71(local_texture_array) 36
- Store 79 78
- 93: 92(ptr) AccessChain 91 36
- 94: 88 Load 93
- 95: 6(float) CompositeExtract 94 0
- 97: 96(ptr) AccessChain 83(local_float_array) 62
- Store 97 95
- 98: 6(float) CompositeExtract 94 1
- 99: 96(ptr) AccessChain 83(local_float_array) 35
- Store 99 98
- 100: 6(float) CompositeExtract 94 2
- 101: 96(ptr) AccessChain 83(local_float_array) 36
+ 77: 11 Load 42(g_tex[1])
+ 78: 53(ptr) AccessChain 73(local_texture_array) 35
+ Store 78 77
+ 80: 11 Load 79(g_tex[2])
+ 81: 53(ptr) AccessChain 73(local_texture_array) 36
+ Store 81 80
+ 95: 94(ptr) AccessChain 93 36
+ 96: 90 Load 95
+ 97: 6(float) CompositeExtract 96 0
+ 99: 98(ptr) AccessChain 85(local_float_array) 64
+ Store 99 97
+ 100: 6(float) CompositeExtract 96 1
+ 101: 98(ptr) AccessChain 85(local_float_array) 35
Store 101 100
- 102: 6(float) CompositeExtract 94 3
- 103: 96(ptr) AccessChain 83(local_float_array) 37
+ 102: 6(float) CompositeExtract 96 2
+ 103: 98(ptr) AccessChain 85(local_float_array) 36
Store 103 102
- 104: 7(fvec4) FunctionCall 9(TestFn1()
- 106: 11 Load 72(g_tex[0])
- 107: 41(ptr) AccessChain 105(aggShadow) 62
- Store 107 106
- 108: 11 Load 42(g_tex[1])
- 109: 41(ptr) AccessChain 105(aggShadow) 35
+ 104: 6(float) CompositeExtract 96 3
+ 105: 98(ptr) AccessChain 85(local_float_array) 37
+ Store 105 104
+ 106: 7(fvec4) FunctionCall 9(TestFn1()
+ 108: 11 Load 74(g_tex[0])
+ 109: 53(ptr) AccessChain 107(aggShadow) 64
Store 109 108
- 110: 11 Load 77(g_tex[2])
- 111: 41(ptr) AccessChain 105(aggShadow) 36
+ 110: 11 Load 42(g_tex[1])
+ 111: 53(ptr) AccessChain 107(aggShadow) 35
Store 111 110
- 113: 16 Load 63(g_samp[0])
- 114: 44(ptr) AccessChain 112(aggShadow) 62
- Store 114 113
- 115: 16 Load 45(g_samp[1])
- 116: 44(ptr) AccessChain 112(aggShadow) 35
+ 112: 11 Load 79(g_tex[2])
+ 113: 53(ptr) AccessChain 107(aggShadow) 36
+ Store 113 112
+ 115: 16 Load 65(g_samp[0])
+ 116: 56(ptr) AccessChain 114(aggShadow) 64
Store 116 115
- 117: 16 Load 68(g_samp[2])
- 118: 44(ptr) AccessChain 112(aggShadow) 36
+ 117: 16 Load 45(g_samp[1])
+ 118: 56(ptr) AccessChain 114(aggShadow) 35
Store 118 117
- 119: 7(fvec4) FunctionCall 22(TestFn2(t11[3];p1[3];) 105(aggShadow) 112(aggShadow)
- 120: 7(fvec4) FAdd 104 119
- 122: 121(ptr) AccessChain 27(ps_output) 62
- Store 122 120
+ 119: 16 Load 70(g_samp[2])
+ 120: 56(ptr) AccessChain 114(aggShadow) 36
+ Store 120 119
+ 122: 14 Load 107(aggShadow)
+ Store 121(param) 122
+ 124: 17 Load 114(aggShadow)
+ Store 123(param) 124
+ 125: 7(fvec4) FunctionCall 22(TestFn2(t11[3];p1[3];) 121(param) 123(param)
+ 126: 7(fvec4) FAdd 106 125
+ 128: 127(ptr) AccessChain 27(ps_output) 64
+ Store 128 126
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out
index 58fa077735b..dc48f6fab39 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out
@@ -1,192 +1,343 @@
hlsl.array.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:8 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
-0:8 Function Parameters:
-0:8 'i' ( in int)
-0:8 'input' ( in 3-element array of 4-component vector of float)
+0:7 Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:7 'C' ( global 4-component vector of float)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:11 Sequence
+0:11 move second child to first child ( temp 2-element array of 4-component vector of float)
+0:11 'c2' ( global 2-element array of 4-component vector of float)
+0:11 Construct vec4 ( temp 2-element array of 4-component vector of float)
+0:11 'C' ( global 4-component vector of float)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:14 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14 Function Parameters:
+0:14 'i' ( in int)
+0:14 'input' ( in 3-element array of 4-component vector of float)
0:? Sequence
-0:10 Branch: Return with expression
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 direct index ( temp 4-component vector of float)
-0:10 a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10 Constant:
-0:10 0 (const uint)
-0:10 Constant:
-0:10 1 (const int)
-0:10 indirect index ( temp 4-component vector of float)
-0:10 a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10 Constant:
-0:10 0 (const uint)
-0:10 'i' ( in int)
-0:10 direct index ( temp 4-component vector of float)
-0:10 'input' ( in 3-element array of 4-component vector of float)
-0:10 Constant:
-0:10 2 (const int)
-0:10 indirect index ( temp 4-component vector of float)
-0:10 'input' ( in 3-element array of 4-component vector of float)
-0:10 'i' ( in int)
-0:10 direct index ( temp 4-component vector of float)
-0:10 'b' ( temp 10-element array of 4-component vector of float)
-0:10 Constant:
-0:10 5 (const int)
-0:10 indirect index ( temp 4-component vector of float)
-0:10 'b' ( temp 10-element array of 4-component vector of float)
-0:10 'i' ( in int)
-0:10 indirect index ( temp 4-component vector of float)
-0:10 m: direct index for structure ( temp 7-element array of 4-component vector of float)
-0:10 indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
-0:10 s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
-0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10 Constant:
-0:10 1 (const uint)
-0:10 'i' ( in int)
-0:10 Constant:
-0:10 0 (const int)
-0:10 'i' ( in int)
-0:8 Function Definition: PixelShaderFunction( ( temp void)
-0:8 Function Parameters:
+0:15 Sequence
+0:15 move second child to first child ( temp 10-element array of 4-component vector of float)
+0:15 'b' ( temp 10-element array of 4-component vector of float)
+0:15 Construct vec4 ( temp 10-element array of 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:16 Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 'tmp' ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 'C' ( global 4-component vector of float)
+0:16 direct index ( temp 4-component vector of float)
+0:16 a1: direct index for structure ( uniform 1-element array of 4-component vector of float)
+0:16 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:16 Constant:
+0:16 2 (const uint)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 1.000000
+0:16 2.000000
+0:16 3.000000
+0:16 4.000000
+0:16 indirect index ( temp 4-component vector of float)
+0:16 a2: direct index for structure ( uniform 2-element array of 4-component vector of float)
+0:16 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:16 Constant:
+0:16 3 (const uint)
+0:16 'i' ( in int)
+0:16 indirect index ( temp 4-component vector of float)
+0:16 'c2' ( global 2-element array of 4-component vector of float)
+0:16 'i' ( in int)
+0:17 Branch: Return with expression
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 direct index ( temp 4-component vector of float)
+0:17 a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:17 Constant:
+0:17 0 (const uint)
+0:17 Constant:
+0:17 1 (const int)
+0:17 indirect index ( temp 4-component vector of float)
+0:17 a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:17 Constant:
+0:17 0 (const uint)
+0:17 'i' ( in int)
+0:17 direct index ( temp 4-component vector of float)
+0:17 'input' ( in 3-element array of 4-component vector of float)
+0:17 Constant:
+0:17 2 (const int)
+0:17 indirect index ( temp 4-component vector of float)
+0:17 'input' ( in 3-element array of 4-component vector of float)
+0:17 'i' ( in int)
+0:17 direct index ( temp 4-component vector of float)
+0:17 'b' ( temp 10-element array of 4-component vector of float)
+0:17 Constant:
+0:17 5 (const int)
+0:17 indirect index ( temp 4-component vector of float)
+0:17 'b' ( temp 10-element array of 4-component vector of float)
+0:17 'i' ( in int)
+0:17 indirect index ( temp 4-component vector of float)
+0:17 m: direct index for structure ( temp 7-element array of 4-component vector of float)
+0:17 indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
+0:17 s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:17 Constant:
+0:17 1 (const uint)
+0:17 'i' ( in int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 'i' ( in int)
+0:17 'tmp' ( temp 4-component vector of float)
+0:14 Function Definition: PixelShaderFunction( ( temp void)
+0:14 Function Parameters:
0:? Sequence
-0:8 move second child to first child ( temp int)
+0:14 move second child to first child ( temp int)
0:? 'i' ( temp int)
-0:? 'i' (layout( location=0) in int)
-0:8 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'i' (layout( location=0) flat in int)
+0:14 move second child to first child ( temp 3-element array of 4-component vector of float)
0:? 'input' ( temp 3-element array of 4-component vector of float)
0:? 'input' (layout( location=1) in 3-element array of 4-component vector of float)
-0:8 move second child to first child ( temp 4-component vector of float)
+0:14 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:8 Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14 Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
0:? 'i' ( temp int)
0:? 'input' ( temp 3-element array of 4-component vector of float)
0:? Linker Objects
-0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:? 'C' ( global 4-component vector of float)
+0:? 'c1' ( const 1-element array of 4-component vector of float)
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:? 'c2' ( global 2-element array of 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'i' (layout( location=0) in int)
+0:? 'i' (layout( location=0) flat in int)
0:? 'input' (layout( location=1) in 3-element array of 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:8 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
-0:8 Function Parameters:
-0:8 'i' ( in int)
-0:8 'input' ( in 3-element array of 4-component vector of float)
+0:7 Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:7 'C' ( global 4-component vector of float)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:11 Sequence
+0:11 move second child to first child ( temp 2-element array of 4-component vector of float)
+0:11 'c2' ( global 2-element array of 4-component vector of float)
+0:11 Construct vec4 ( temp 2-element array of 4-component vector of float)
+0:11 'C' ( global 4-component vector of float)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:14 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14 Function Parameters:
+0:14 'i' ( in int)
+0:14 'input' ( in 3-element array of 4-component vector of float)
0:? Sequence
-0:10 Branch: Return with expression
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 add ( temp 4-component vector of float)
-0:10 direct index ( temp 4-component vector of float)
-0:10 a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10 Constant:
-0:10 0 (const uint)
-0:10 Constant:
-0:10 1 (const int)
-0:10 indirect index ( temp 4-component vector of float)
-0:10 a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10 Constant:
-0:10 0 (const uint)
-0:10 'i' ( in int)
-0:10 direct index ( temp 4-component vector of float)
-0:10 'input' ( in 3-element array of 4-component vector of float)
-0:10 Constant:
-0:10 2 (const int)
-0:10 indirect index ( temp 4-component vector of float)
-0:10 'input' ( in 3-element array of 4-component vector of float)
-0:10 'i' ( in int)
-0:10 direct index ( temp 4-component vector of float)
-0:10 'b' ( temp 10-element array of 4-component vector of float)
-0:10 Constant:
-0:10 5 (const int)
-0:10 indirect index ( temp 4-component vector of float)
-0:10 'b' ( temp 10-element array of 4-component vector of float)
-0:10 'i' ( in int)
-0:10 indirect index ( temp 4-component vector of float)
-0:10 m: direct index for structure ( temp 7-element array of 4-component vector of float)
-0:10 indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
-0:10 s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
-0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10 Constant:
-0:10 1 (const uint)
-0:10 'i' ( in int)
-0:10 Constant:
-0:10 0 (const int)
-0:10 'i' ( in int)
-0:8 Function Definition: PixelShaderFunction( ( temp void)
-0:8 Function Parameters:
+0:15 Sequence
+0:15 move second child to first child ( temp 10-element array of 4-component vector of float)
+0:15 'b' ( temp 10-element array of 4-component vector of float)
+0:15 Construct vec4 ( temp 10-element array of 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:15 'C' ( global 4-component vector of float)
+0:16 Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 'tmp' ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 'C' ( global 4-component vector of float)
+0:16 direct index ( temp 4-component vector of float)
+0:16 a1: direct index for structure ( uniform 1-element array of 4-component vector of float)
+0:16 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:16 Constant:
+0:16 2 (const uint)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 1.000000
+0:16 2.000000
+0:16 3.000000
+0:16 4.000000
+0:16 indirect index ( temp 4-component vector of float)
+0:16 a2: direct index for structure ( uniform 2-element array of 4-component vector of float)
+0:16 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:16 Constant:
+0:16 3 (const uint)
+0:16 'i' ( in int)
+0:16 indirect index ( temp 4-component vector of float)
+0:16 'c2' ( global 2-element array of 4-component vector of float)
+0:16 'i' ( in int)
+0:17 Branch: Return with expression
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 add ( temp 4-component vector of float)
+0:17 direct index ( temp 4-component vector of float)
+0:17 a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:17 Constant:
+0:17 0 (const uint)
+0:17 Constant:
+0:17 1 (const int)
+0:17 indirect index ( temp 4-component vector of float)
+0:17 a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:17 Constant:
+0:17 0 (const uint)
+0:17 'i' ( in int)
+0:17 direct index ( temp 4-component vector of float)
+0:17 'input' ( in 3-element array of 4-component vector of float)
+0:17 Constant:
+0:17 2 (const int)
+0:17 indirect index ( temp 4-component vector of float)
+0:17 'input' ( in 3-element array of 4-component vector of float)
+0:17 'i' ( in int)
+0:17 direct index ( temp 4-component vector of float)
+0:17 'b' ( temp 10-element array of 4-component vector of float)
+0:17 Constant:
+0:17 5 (const int)
+0:17 indirect index ( temp 4-component vector of float)
+0:17 'b' ( temp 10-element array of 4-component vector of float)
+0:17 'i' ( in int)
+0:17 indirect index ( temp 4-component vector of float)
+0:17 m: direct index for structure ( temp 7-element array of 4-component vector of float)
+0:17 indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
+0:17 s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:17 Constant:
+0:17 1 (const uint)
+0:17 'i' ( in int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 'i' ( in int)
+0:17 'tmp' ( temp 4-component vector of float)
+0:14 Function Definition: PixelShaderFunction( ( temp void)
+0:14 Function Parameters:
0:? Sequence
-0:8 move second child to first child ( temp int)
+0:14 move second child to first child ( temp int)
0:? 'i' ( temp int)
-0:? 'i' (layout( location=0) in int)
-0:8 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'i' (layout( location=0) flat in int)
+0:14 move second child to first child ( temp 3-element array of 4-component vector of float)
0:? 'input' ( temp 3-element array of 4-component vector of float)
0:? 'input' (layout( location=1) in 3-element array of 4-component vector of float)
-0:8 move second child to first child ( temp 4-component vector of float)
+0:14 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:8 Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14 Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
0:? 'i' ( temp int)
0:? 'input' ( temp 3-element array of 4-component vector of float)
0:? Linker Objects
-0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2})
+0:? 'C' ( global 4-component vector of float)
+0:? 'c1' ( const 1-element array of 4-component vector of float)
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:? 'c2' ( global 2-element array of 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'i' (layout( location=0) in int)
+0:? 'i' (layout( location=0) flat in int)
0:? 'input' (layout( location=1) in 3-element array of 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 81
+// Generated by (magic number): 80002
+// Id's are bound by 126
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 68 72 75
+ EntryPoint Fragment 4 "PixelShaderFunction" 112 116 119
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 17 "@PixelShaderFunction(i1;vf4[3];"
Name 15 "i"
Name 16 "input"
- Name 23 ""
- MemberName 23 0 "m"
- Name 26 "$Global"
- MemberName 26($Global) 0 "a"
- MemberName 26($Global) 1 "s"
- Name 28 ""
- Name 50 "b"
- Name 66 "i"
- Name 68 "i"
- Name 70 "input"
- Name 72 "input"
- Name 75 "@entryPointOutput"
- Name 76 "param"
- Name 78 "param"
- Decorate 20 ArrayStride 16
- Decorate 22 ArrayStride 16
- MemberDecorate 23 0 Offset 0
- Decorate 25 ArrayStride 112
- MemberDecorate 26($Global) 0 Offset 0
- MemberDecorate 26($Global) 1 Offset 64
- Decorate 26($Global) Block
- Decorate 28 DescriptorSet 0
- Decorate 68(i) Location 0
- Decorate 72(input) Location 1
- Decorate 75(@entryPointOutput) Location 0
+ Name 20 "C"
+ Name 29 "c2"
+ Name 35 "b"
+ Name 48 "tmp"
+ Name 54 ""
+ MemberName 54 0 "m"
+ Name 60 "$Global"
+ MemberName 60($Global) 0 "a"
+ MemberName 60($Global) 1 "s"
+ MemberName 60($Global) 2 "a1"
+ MemberName 60($Global) 3 "a2"
+ Name 62 ""
+ Name 110 "i"
+ Name 112 "i"
+ Name 114 "input"
+ Name 116 "input"
+ Name 119 "@entryPointOutput"
+ Name 120 "param"
+ Name 122 "param"
+ Decorate 51 ArrayStride 16
+ Decorate 53 ArrayStride 16
+ MemberDecorate 54 0 Offset 0
+ Decorate 56 ArrayStride 112
+ Decorate 58 ArrayStride 16
+ Decorate 59 ArrayStride 16
+ MemberDecorate 60($Global) 0 Offset 0
+ MemberDecorate 60($Global) 1 Offset 64
+ MemberDecorate 60($Global) 2 Offset 1296
+ MemberDecorate 60($Global) 3 Offset 1312
+ Decorate 60($Global) Block
+ Decorate 62 DescriptorSet 0
+ Decorate 112(i) Flat
+ Decorate 112(i) Location 0
+ Decorate 116(input) Location 1
+ Decorate 119(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
@@ -198,78 +349,127 @@ gl_FragCoord origin is upper left
12: TypeArray 9(fvec4) 11
13: TypePointer Function 12
14: TypeFunction 9(fvec4) 7(ptr) 13(ptr)
- 19: 10(int) Constant 4
- 20: TypeArray 9(fvec4) 19
- 21: 10(int) Constant 7
- 22: TypeArray 9(fvec4) 21
- 23: TypeStruct 22
- 24: 10(int) Constant 11
- 25: TypeArray 23(struct) 24
- 26($Global): TypeStruct 20 25
- 27: TypePointer Uniform 26($Global)
- 28: 27(ptr) Variable Uniform
- 29: 6(int) Constant 0
- 30: 6(int) Constant 1
- 31: TypePointer Uniform 9(fvec4)
- 38: 6(int) Constant 2
- 39: TypePointer Function 9(fvec4)
- 47: 10(int) Constant 10
- 48: TypeArray 9(fvec4) 47
- 49: TypePointer Function 48
- 51: 6(int) Constant 5
- 67: TypePointer Input 6(int)
- 68(i): 67(ptr) Variable Input
- 71: TypePointer Input 12
- 72(input): 71(ptr) Variable Input
- 74: TypePointer Output 9(fvec4)
-75(@entryPointOutput): 74(ptr) Variable Output
+ 19: TypePointer Private 9(fvec4)
+ 20(C): 19(ptr) Variable Private
+ 21: 8(float) Constant 1065353216
+ 22: 8(float) Constant 1073741824
+ 23: 8(float) Constant 1077936128
+ 24: 8(float) Constant 1082130432
+ 25: 9(fvec4) ConstantComposite 21 22 23 24
+ 26: 10(int) Constant 2
+ 27: TypeArray 9(fvec4) 26
+ 28: TypePointer Private 27
+ 29(c2): 28(ptr) Variable Private
+ 32: 10(int) Constant 10
+ 33: TypeArray 9(fvec4) 32
+ 34: TypePointer Function 33
+ 47: TypePointer Function 9(fvec4)
+ 50: 10(int) Constant 4
+ 51: TypeArray 9(fvec4) 50
+ 52: 10(int) Constant 7
+ 53: TypeArray 9(fvec4) 52
+ 54: TypeStruct 53
+ 55: 10(int) Constant 11
+ 56: TypeArray 54(struct) 55
+ 57: 10(int) Constant 1
+ 58: TypeArray 9(fvec4) 57
+ 59: TypeArray 9(fvec4) 26
+ 60($Global): TypeStruct 51 56 58 59
+ 61: TypePointer Uniform 60($Global)
+ 62: 61(ptr) Variable Uniform
+ 63: 6(int) Constant 2
+ 64: 6(int) Constant 0
+ 65: TypePointer Uniform 9(fvec4)
+ 70: 6(int) Constant 3
+ 79: 6(int) Constant 1
+ 93: 6(int) Constant 5
+ 111: TypePointer Input 6(int)
+ 112(i): 111(ptr) Variable Input
+ 115: TypePointer Input 12
+ 116(input): 115(ptr) Variable Input
+ 118: TypePointer Output 9(fvec4)
+119(@entryPointOutput): 118(ptr) Variable Output
+ 125: 58 ConstantComposite 25
4(PixelShaderFunction): 2 Function None 3
5: Label
- 66(i): 7(ptr) Variable Function
- 70(input): 13(ptr) Variable Function
- 76(param): 7(ptr) Variable Function
- 78(param): 13(ptr) Variable Function
- 69: 6(int) Load 68(i)
- Store 66(i) 69
- 73: 12 Load 72(input)
- Store 70(input) 73
- 77: 6(int) Load 66(i)
- Store 76(param) 77
- 79: 12 Load 70(input)
- Store 78(param) 79
- 80: 9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 76(param) 78(param)
- Store 75(@entryPointOutput) 80
+ 110(i): 7(ptr) Variable Function
+ 114(input): 13(ptr) Variable Function
+ 120(param): 7(ptr) Variable Function
+ 122(param): 13(ptr) Variable Function
+ Store 20(C) 25
+ 30: 9(fvec4) Load 20(C)
+ 31: 27 CompositeConstruct 30 25
+ Store 29(c2) 31
+ 113: 6(int) Load 112(i)
+ Store 110(i) 113
+ 117: 12 Load 116(input)
+ Store 114(input) 117
+ 121: 6(int) Load 110(i)
+ Store 120(param) 121
+ 123: 12 Load 114(input)
+ Store 122(param) 123
+ 124: 9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 120(param) 122(param)
+ Store 119(@entryPointOutput) 124
Return
FunctionEnd
17(@PixelShaderFunction(i1;vf4[3];): 9(fvec4) Function None 14
15(i): 7(ptr) FunctionParameter
16(input): 13(ptr) FunctionParameter
18: Label
- 50(b): 49(ptr) Variable Function
- 32: 31(ptr) AccessChain 28 29 30
- 33: 9(fvec4) Load 32
- 34: 6(int) Load 15(i)
- 35: 31(ptr) AccessChain 28 29 34
- 36: 9(fvec4) Load 35
- 37: 9(fvec4) FAdd 33 36
- 40: 39(ptr) AccessChain 16(input) 38
- 41: 9(fvec4) Load 40
- 42: 9(fvec4) FAdd 37 41
- 43: 6(int) Load 15(i)
- 44: 39(ptr) AccessChain 16(input) 43
- 45: 9(fvec4) Load 44
- 46: 9(fvec4) FAdd 42 45
- 52: 39(ptr) AccessChain 50(b) 51
- 53: 9(fvec4) Load 52
- 54: 9(fvec4) FAdd 46 53
- 55: 6(int) Load 15(i)
- 56: 39(ptr) AccessChain 50(b) 55
- 57: 9(fvec4) Load 56
- 58: 9(fvec4) FAdd 54 57
- 59: 6(int) Load 15(i)
- 60: 6(int) Load 15(i)
- 61: 31(ptr) AccessChain 28 30 59 29 60
- 62: 9(fvec4) Load 61
- 63: 9(fvec4) FAdd 58 62
- ReturnValue 63
+ 35(b): 34(ptr) Variable Function
+ 48(tmp): 47(ptr) Variable Function
+ 36: 9(fvec4) Load 20(C)
+ 37: 9(fvec4) Load 20(C)
+ 38: 9(fvec4) Load 20(C)
+ 39: 9(fvec4) Load 20(C)
+ 40: 9(fvec4) Load 20(C)
+ 41: 9(fvec4) Load 20(C)
+ 42: 9(fvec4) Load 20(C)
+ 43: 9(fvec4) Load 20(C)
+ 44: 9(fvec4) Load 20(C)
+ 45: 9(fvec4) Load 20(C)
+ 46: 33 CompositeConstruct 36 37 38 39 40 41 42 43 44 45
+ Store 35(b) 46
+ 49: 9(fvec4) Load 20(C)
+ 66: 65(ptr) AccessChain 62 63 64
+ 67: 9(fvec4) Load 66
+ 68: 9(fvec4) FAdd 49 67
+ 69: 9(fvec4) FAdd 68 25
+ 71: 6(int) Load 15(i)
+ 72: 65(ptr) AccessChain 62 70 71
+ 73: 9(fvec4) Load 72
+ 74: 9(fvec4) FAdd 69 73
+ 75: 6(int) Load 15(i)
+ 76: 19(ptr) AccessChain 29(c2) 75
+ 77: 9(fvec4) Load 76
+ 78: 9(fvec4) FAdd 74 77
+ Store 48(tmp) 78
+ 80: 65(ptr) AccessChain 62 64 79
+ 81: 9(fvec4) Load 80
+ 82: 6(int) Load 15(i)
+ 83: 65(ptr) AccessChain 62 64 82
+ 84: 9(fvec4) Load 83
+ 85: 9(fvec4) FAdd 81 84
+ 86: 47(ptr) AccessChain 16(input) 63
+ 87: 9(fvec4) Load 86
+ 88: 9(fvec4) FAdd 85 87
+ 89: 6(int) Load 15(i)
+ 90: 47(ptr) AccessChain 16(input) 89
+ 91: 9(fvec4) Load 90
+ 92: 9(fvec4) FAdd 88 91
+ 94: 47(ptr) AccessChain 35(b) 93
+ 95: 9(fvec4) Load 94
+ 96: 9(fvec4) FAdd 92 95
+ 97: 6(int) Load 15(i)
+ 98: 47(ptr) AccessChain 35(b) 97
+ 99: 9(fvec4) Load 98
+ 100: 9(fvec4) FAdd 96 99
+ 101: 6(int) Load 15(i)
+ 102: 6(int) Load 15(i)
+ 103: 65(ptr) AccessChain 62 79 101 64 102
+ 104: 9(fvec4) Load 103
+ 105: 9(fvec4) FAdd 100 104
+ 106: 9(fvec4) Load 48(tmp)
+ 107: 9(fvec4) FAdd 105 106
+ ReturnValue 107
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.implicit-size.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.implicit-size.frag.out
index efe12400060..cfd65627946 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.implicit-size.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.implicit-size.frag.out
@@ -1,5 +1,5 @@
hlsl.array.implicit-size.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Sequence
@@ -83,7 +83,7 @@ Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Sequence
@@ -163,7 +163,7 @@ gl_FragCoord origin is upper left
0:? 'g_mystruct' ( global 2-element array of structure{ temp int i, temp float f})
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 72
Capability Shader
@@ -171,6 +171,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "color"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out
index e13399e4f85..133c71f9855 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out
@@ -1,5 +1,5 @@
hlsl.array.multidim.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -55,20 +55,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:10 Color: direct index for structure ( temp 4-component vector of float)
0:10 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:10 Constant:
0:10 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 5-element array of 4-element array of 3-element array of float float_array})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -124,17 +124,17 @@ gl_FragCoord origin is upper left
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:10 Color: direct index for structure ( temp 4-component vector of float)
0:10 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:10 Constant:
0:10 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 5-element array of 4-element array of 3-element array of float float_array})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 57
Capability Shader
@@ -142,6 +142,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 54
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -152,14 +153,14 @@ gl_FragCoord origin is upper left
Name 29 ""
Name 40 "float4_array_2"
Name 46 "psout"
- Name 54 "Color"
+ Name 54 "@entryPointOutput.Color"
Decorate 22 ArrayStride 16
Decorate 24 ArrayStride 48
Decorate 26 ArrayStride 192
MemberDecorate 27($Global) 0 Offset 0
Decorate 27($Global) Block
Decorate 29 DescriptorSet 0
- Decorate 54(Color) Location 0
+ Decorate 54(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -192,12 +193,12 @@ gl_FragCoord origin is upper left
41: TypePointer Function 14
45: TypePointer Function 8(PS_OUTPUT)
53: TypePointer Output 7(fvec4)
- 54(Color): 53(ptr) Variable Output
+54(@entryPointOutput.Color): 53(ptr) Variable Output
4(main): 2 Function None 3
5: Label
55:8(PS_OUTPUT) FunctionCall 10(@main()
56: 7(fvec4) CompositeExtract 55 0
- Store 54(Color) 56
+ Store 54(@entryPointOutput.Color) 56
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out
index 0a48528ec3d..7f071e403e0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out
@@ -1,5 +1,5 @@
hlsl.assoc.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:8 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; ( temp 4-component vector of float)
@@ -67,7 +67,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:8 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; ( temp 4-component vector of float)
@@ -132,7 +132,7 @@ gl_FragCoord origin is upper left
0:? 'a5' (layout( location=4) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 58
Capability Shader
@@ -140,6 +140,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 31 34 37 40 43 46
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 15 "@PixelShaderFunction(vf4;vf4;vf4;vf4;vf4;"
Name 10 "a1"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out
index bd4e96ba346..5fcf10d51b2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -1,5 +1,5 @@
hlsl.attribute.expression.comp
-Shader version: 450
+Shader version: 500
local_size = (4, 6, 8)
0:? Sequence
0:9 Function Definition: @main( ( temp 4-component vector of float)
@@ -42,7 +42,7 @@ local_size = (4, 6, 8)
Linked compute stage:
-Shader version: 450
+Shader version: 500
local_size = (4, 6, 8)
0:? Sequence
0:9 Function Definition: @main( ( temp 4-component vector of float)
@@ -82,7 +82,7 @@ local_size = (4, 6, 8)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 39
Capability Shader
@@ -90,6 +90,7 @@ local_size = (4, 6, 8)
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 37
ExecutionMode 4 LocalSize 4 6 8
+ Source HLSL 500
Name 4 "main"
Name 9 "@main("
Name 13 "x"
@@ -131,7 +132,7 @@ local_size = (4, 6, 8)
Store 13(x) 14
Branch 15
15: Label
- LoopMerge 17 18 None
+ LoopMerge 17 18 Unroll
Branch 19
19: Label
20: 11(int) Load 13(x)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out
index 7a2641653f3..99471c47d0f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out
@@ -1,5 +1,5 @@
hlsl.attribute.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp void)
@@ -9,7 +9,7 @@ gl_FragCoord origin is upper left
0:11 Test condition and select ( temp void)
0:11 Condition
0:11 Constant:
-0:11 0 (const int)
+0:11 false (const bool)
0:11 true case is null
0:2 Function Definition: PixelShaderFunction( ( temp void)
0:2 Function Parameters:
@@ -26,7 +26,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp void)
@@ -36,7 +36,7 @@ gl_FragCoord origin is upper left
0:11 Test condition and select ( temp void)
0:11 Condition
0:11 Constant:
-0:11 0 (const int)
+0:11 false (const bool)
0:11 true case is null
0:2 Function Definition: PixelShaderFunction( ( temp void)
0:2 Function Parameters:
@@ -50,7 +50,7 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24
Capability Shader
@@ -58,6 +58,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 19
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "@PixelShaderFunction(vf4;"
Name 10 "input"
@@ -71,8 +72,8 @@ gl_FragCoord origin is upper left
7: TypeVector 6(float) 4
8: TypePointer Function 7(fvec4)
9: TypeFunction 2 8(ptr)
- 13: TypeInt 32 1
- 14: 13(int) Constant 0
+ 13: TypeBool
+ 14: 13(bool) ConstantFalse
18: TypePointer Input 7(fvec4)
19(input): 18(ptr) Variable Input
4(PixelShaderFunction): 2 Function None 3
@@ -89,7 +90,7 @@ gl_FragCoord origin is upper left
11(@PixelShaderFunction(vf4;): 2 Function None 9
10(input): 8(ptr) FunctionParameter
12: Label
- SelectionMerge 16 None
+ SelectionMerge 16 DontFlatten
BranchConditional 14 15 16
15: Label
Branch 16
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out
new file mode 100644
index 00000000000..02b0edeec93
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out
@@ -0,0 +1,176 @@
+hlsl.attributeC11.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:16 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:16 Function Parameters:
+0:16 'input' ( in 4-component vector of float)
+0:? Sequence
+0:17 Branch: Return with expression
+0:17 add ( temp 4-component vector of float)
+0:17 'input' ( in 4-component vector of float)
+0:17 textureFetch ( temp 4-component vector of float)
+0:17 'attach' ( uniform texture2D)
+0:17 vector swizzle ( temp int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 0 (const int)
+0:17 Sequence
+0:17 Constant:
+0:17 0 (const int)
+0:17 direct index ( temp int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 0 (const int)
+0:17 Constant:
+0:17 1 (const int)
+0:16 Function Definition: main( ( temp void)
+0:16 Function Parameters:
+0:? Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? 'input' ( temp 4-component vector of float)
+0:? 'input' (layout( location=8) in 4-component vector of float)
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=7) out 4-component vector of float)
+0:16 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'input' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:? 'buffer3' (layout( set=2 binding=3 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:? 'attach' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=7) out 4-component vector of float)
+0:? 'input' (layout( location=8) in 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:16 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:16 Function Parameters:
+0:16 'input' ( in 4-component vector of float)
+0:? Sequence
+0:17 Branch: Return with expression
+0:17 add ( temp 4-component vector of float)
+0:17 'input' ( in 4-component vector of float)
+0:17 textureFetch ( temp 4-component vector of float)
+0:17 'attach' ( uniform texture2D)
+0:17 vector swizzle ( temp int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 0 (const int)
+0:17 Sequence
+0:17 Constant:
+0:17 0 (const int)
+0:17 direct index ( temp int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 0 (const int)
+0:17 Constant:
+0:17 1 (const int)
+0:16 Function Definition: main( ( temp void)
+0:16 Function Parameters:
+0:? Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? 'input' ( temp 4-component vector of float)
+0:? 'input' (layout( location=8) in 4-component vector of float)
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=7) out 4-component vector of float)
+0:16 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'input' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:? 'buffer3' (layout( set=2 binding=3 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:? 'attach' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=7) out 4-component vector of float)
+0:? 'input' (layout( location=8) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 47
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 33 36
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "@main(vf4;"
+ Name 10 "input"
+ Name 16 "attach"
+ Name 31 "input"
+ Name 33 "input"
+ Name 36 "@entryPointOutput"
+ Name 37 "param"
+ Name 41 "S"
+ MemberName 41(S) 0 "f"
+ Name 43 "buffer1"
+ MemberName 43(buffer1) 0 "@data"
+ Name 45 "buffer1"
+ Name 46 "buffer3"
+ Decorate 16(attach) DescriptorSet 0
+ Decorate 16(attach) InputAttachmentIndex 4
+ Decorate 33(input) Location 8
+ Decorate 36(@entryPointOutput) Location 7
+ MemberDecorate 41(S) 0 Offset 0
+ Decorate 42 ArrayStride 8
+ MemberDecorate 43(buffer1) 0 NonWritable
+ MemberDecorate 43(buffer1) 0 Offset 0
+ Decorate 43(buffer1) BufferBlock
+ Decorate 45(buffer1) DescriptorSet 0
+ Decorate 45(buffer1) Binding 1
+ Decorate 46(buffer3) DescriptorSet 2
+ Decorate 46(buffer3) Binding 3
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeFunction 7(fvec4) 8(ptr)
+ 14: TypeImage 6(float) 2D sampled format:Unknown
+ 15: TypePointer UniformConstant 14
+ 16(attach): 15(ptr) Variable UniformConstant
+ 18: TypeInt 32 1
+ 19: TypeVector 18(int) 2
+ 20: 18(int) Constant 0
+ 21: 19(ivec2) ConstantComposite 20 20
+ 22: TypeInt 32 0
+ 23: 22(int) Constant 0
+ 25: 22(int) Constant 1
+ 32: TypePointer Input 7(fvec4)
+ 33(input): 32(ptr) Variable Input
+ 35: TypePointer Output 7(fvec4)
+36(@entryPointOutput): 35(ptr) Variable Output
+ 40: TypeVector 6(float) 2
+ 41(S): TypeStruct 40(fvec2)
+ 42: TypeRuntimeArray 41(S)
+ 43(buffer1): TypeStruct 42
+ 44: TypePointer Uniform 43(buffer1)
+ 45(buffer1): 44(ptr) Variable Uniform
+ 46(buffer3): 44(ptr) Variable Uniform
+ 4(main): 2 Function None 3
+ 5: Label
+ 31(input): 8(ptr) Variable Function
+ 37(param): 8(ptr) Variable Function
+ 34: 7(fvec4) Load 33(input)
+ Store 31(input) 34
+ 38: 7(fvec4) Load 31(input)
+ Store 37(param) 38
+ 39: 7(fvec4) FunctionCall 11(@main(vf4;) 37(param)
+ Store 36(@entryPointOutput) 39
+ Return
+ FunctionEnd
+ 11(@main(vf4;): 7(fvec4) Function None 9
+ 10(input): 8(ptr) FunctionParameter
+ 12: Label
+ 13: 7(fvec4) Load 10(input)
+ 17: 14 Load 16(attach)
+ 24: 18(int) CompositeExtract 21 0
+ 26: 18(int) CompositeExtract 21 1
+ 27: 7(fvec4) ImageFetch 17 24 Lod 26
+ 28: 7(fvec4) FAdd 13 27
+ ReturnValue 28
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
new file mode 100644
index 00000000000..e00ae5282e2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
@@ -0,0 +1,109 @@
+hlsl.attributeGlobalBuffer.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Function Definition: @main( ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 add ( temp 4-component vector of float)
+0:7 u1: direct index for structure ( uniform 4-component vector of float)
+0:7 'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1, uniform 4-component vector of float u2})
+0:7 Constant:
+0:7 0 (const uint)
+0:7 u2: direct index for structure ( uniform 4-component vector of float)
+0:7 'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1, uniform 4-component vector of float u2})
+0:7 Constant:
+0:7 1 (const uint)
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1, uniform 4-component vector of float u2})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Function Definition: @main( ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 add ( temp 4-component vector of float)
+0:7 u1: direct index for structure ( uniform 4-component vector of float)
+0:7 'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1, uniform 4-component vector of float u2})
+0:7 Constant:
+0:7 0 (const uint)
+0:7 u2: direct index for structure ( uniform 4-component vector of float)
+0:7 'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1, uniform 4-component vector of float u2})
+0:7 Constant:
+0:7 1 (const uint)
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1, uniform 4-component vector of float u2})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 28
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 26
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 11 "$Global"
+ MemberName 11($Global) 0 "u1"
+ MemberName 11($Global) 1 "u2"
+ Name 13 ""
+ Name 26 "@entryPointOutput"
+ MemberDecorate 11($Global) 0 Offset 0
+ MemberDecorate 11($Global) 1 Offset 16
+ Decorate 11($Global) Block
+ Decorate 13 DescriptorSet 2
+ Decorate 13 Binding 5
+ Decorate 26(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11($Global): TypeStruct 7(fvec4) 7(fvec4)
+ 12: TypePointer Uniform 11($Global)
+ 13: 12(ptr) Variable Uniform
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16: TypePointer Uniform 7(fvec4)
+ 19: 14(int) Constant 1
+ 25: TypePointer Output 7(fvec4)
+26(@entryPointOutput): 25(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 27: 7(fvec4) FunctionCall 9(@main()
+ Store 26(@entryPointOutput) 27
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 17: 16(ptr) AccessChain 13 15
+ 18: 7(fvec4) Load 17
+ 20: 16(ptr) AccessChain 13 19
+ 21: 7(fvec4) Load 20
+ 22: 7(fvec4) FAdd 18 21
+ ReturnValue 22
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.automap.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.automap.frag.out
new file mode 100644
index 00000000000..7664bf64923
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.automap.frag.out
@@ -0,0 +1,29 @@
+hlsl.automap.frag
+Uniform reflection:
+t1: offset -1, type 8b5d, size 1, index -1, binding 11
+t2: offset -1, type 8b5e, size 1, index -1, binding 12
+t3: offset -1, type 8b5f, size 1, index -1, binding 13
+t4.@data: offset 0, type 8b52, size 1, index 0, binding -1
+t5.@data: offset 0, type 1405, size 0, index 1, binding -1
+t6: offset -1, type 8dc2, size 1, index -1, binding 16
+s1: offset -1, type 0, size 1, index -1, binding 31
+s2: offset -1, type 0, size 1, index -1, binding 32
+u1: offset -1, type 904c, size 1, index -1, binding 41
+u2: offset -1, type 904d, size 1, index -1, binding 42
+u3: offset -1, type 904e, size 1, index -1, binding 43
+u4: offset -1, type 9051, size 1, index -1, binding 44
+u5.@data: offset 0, type 1405, size 0, index 2, binding -1
+u6.@data: offset 0, type 1406, size 1, index 3, binding -1
+cb1: offset 0, type 1404, size 1, index 4, binding -1
+tb1: offset 0, type 1404, size 1, index 5, binding -1
+
+Uniform block reflection:
+t4: offset -1, type ffffffff, size 0, index -1, binding 14
+t5: offset -1, type ffffffff, size 0, index -1, binding 15
+u5: offset -1, type ffffffff, size 0, index -1, binding 45
+u6: offset -1, type ffffffff, size 0, index -1, binding 46
+cb: offset -1, type ffffffff, size 4, index -1, binding 51
+tb: offset -1, type ffffffff, size 4, index -1, binding 17
+
+Vertex attribute reflection:
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out
index 172dfeff3ce..b72c848f8a9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out
@@ -1,5 +1,5 @@
hlsl.basic.comp
-Shader version: 450
+Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:4 Function Definition: @main(i1;i1; ( temp void)
@@ -31,7 +31,7 @@ local_size = (1, 1, 1)
Linked compute stage:
-Shader version: 450
+Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:4 Function Definition: @main(i1;i1; ( temp void)
@@ -60,7 +60,7 @@ local_size = (1, 1, 1)
0:? 'gti' ( in int LocalInvocationID)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 35
Capability Shader
@@ -68,6 +68,7 @@ local_size = (1, 1, 1)
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 18 21
ExecutionMode 4 LocalSize 1 1 1
+ Source HLSL 500
Name 4 "main"
Name 11 "@main(i1;i1;"
Name 9 "dti"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out
index 24250b3e1a3..9d9aaa7e6e7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out
@@ -1,5 +1,5 @@
hlsl.basic.geom
-Shader version: 450
+Shader version: 500
invocations = -1
max_vertices = 4
input primitive = triangles
@@ -42,14 +42,34 @@ output primitive = line_strip
0:20 Constant:
0:20 0 (const int)
0:22 Sequence
-0:22 move second child to first child ( temp structure{ temp float myfloat, temp int something})
-0:22 'OutputStream' ( out structure{ temp float myfloat, temp int something})
-0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:22 Sequence
+0:22 move second child to first child ( temp float)
+0:? 'OutputStream.myfloat' (layout( location=0) out float)
+0:22 myfloat: direct index for structure ( temp float)
+0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:22 Constant:
+0:22 0 (const int)
+0:22 move second child to first child ( temp int)
+0:? 'OutputStream.something' (layout( location=1) out int)
+0:22 something: direct index for structure ( temp int)
+0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:22 Constant:
+0:22 1 (const int)
0:22 EmitVertex ( temp void)
0:23 Sequence
-0:23 move second child to first child ( temp structure{ temp float myfloat, temp int something})
-0:23 'OutputStream' ( out structure{ temp float myfloat, temp int something})
-0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:23 Sequence
+0:23 move second child to first child ( temp float)
+0:? 'OutputStream.myfloat' (layout( location=0) out float)
+0:23 myfloat: direct index for structure ( temp float)
+0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:23 Constant:
+0:23 0 (const int)
+0:23 move second child to first child ( temp int)
+0:? 'OutputStream.something' (layout( location=1) out int)
+0:23 something: direct index for structure ( temp int)
+0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:23 Constant:
+0:23 1 (const int)
0:23 EmitVertex ( temp void)
0:24 EndPrimitive ( temp void)
0:16 Function Definition: main( ( temp void)
@@ -60,20 +80,22 @@ output primitive = line_strip
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
0:16 move second child to first child ( temp 3-element array of uint)
0:? 'test' ( temp 3-element array of uint)
-0:? 'test' (layout( location=3) in 3-element array of uint)
+0:? 'test' (layout( location=1) in 3-element array of uint)
0:16 Function Call: @main(u1[3];u1[3];struct-PSInput-f1-i11; ( temp void)
0:? 'VertexID' ( temp 3-element array of uint)
0:? 'test' ( temp 3-element array of uint)
0:? 'OutputStream' ( temp structure{ temp float myfloat, temp int something})
0:? Linker Objects
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
-0:? 'test' (layout( location=3) in 3-element array of uint)
+0:? 'test' (layout( location=1) in 3-element array of uint)
+0:? 'OutputStream.myfloat' (layout( location=0) out float)
+0:? 'OutputStream.something' (layout( location=1) out int)
Linked geometry stage:
-Shader version: 450
+Shader version: 500
invocations = 1
max_vertices = 4
input primitive = triangles
@@ -116,14 +138,34 @@ output primitive = line_strip
0:20 Constant:
0:20 0 (const int)
0:22 Sequence
-0:22 move second child to first child ( temp structure{ temp float myfloat, temp int something})
-0:22 'OutputStream' ( out structure{ temp float myfloat, temp int something})
-0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:22 Sequence
+0:22 move second child to first child ( temp float)
+0:? 'OutputStream.myfloat' (layout( location=0) out float)
+0:22 myfloat: direct index for structure ( temp float)
+0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:22 Constant:
+0:22 0 (const int)
+0:22 move second child to first child ( temp int)
+0:? 'OutputStream.something' (layout( location=1) out int)
+0:22 something: direct index for structure ( temp int)
+0:22 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:22 Constant:
+0:22 1 (const int)
0:22 EmitVertex ( temp void)
0:23 Sequence
-0:23 move second child to first child ( temp structure{ temp float myfloat, temp int something})
-0:23 'OutputStream' ( out structure{ temp float myfloat, temp int something})
-0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:23 Sequence
+0:23 move second child to first child ( temp float)
+0:? 'OutputStream.myfloat' (layout( location=0) out float)
+0:23 myfloat: direct index for structure ( temp float)
+0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:23 Constant:
+0:23 0 (const int)
+0:23 move second child to first child ( temp int)
+0:? 'OutputStream.something' (layout( location=1) out int)
+0:23 something: direct index for structure ( temp int)
+0:23 'Vert' ( temp structure{ temp float myfloat, temp int something})
+0:23 Constant:
+0:23 1 (const int)
0:23 EmitVertex ( temp void)
0:24 EndPrimitive ( temp void)
0:16 Function Definition: main( ( temp void)
@@ -134,27 +176,30 @@ output primitive = line_strip
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
0:16 move second child to first child ( temp 3-element array of uint)
0:? 'test' ( temp 3-element array of uint)
-0:? 'test' (layout( location=3) in 3-element array of uint)
+0:? 'test' (layout( location=1) in 3-element array of uint)
0:16 Function Call: @main(u1[3];u1[3];struct-PSInput-f1-i11; ( temp void)
0:? 'VertexID' ( temp 3-element array of uint)
0:? 'test' ( temp 3-element array of uint)
0:? 'OutputStream' ( temp structure{ temp float myfloat, temp int something})
0:? Linker Objects
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
-0:? 'test' (layout( location=3) in 3-element array of uint)
+0:? 'test' (layout( location=1) in 3-element array of uint)
+0:? 'OutputStream.myfloat' (layout( location=0) out float)
+0:? 'OutputStream.something' (layout( location=1) out int)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 57
+// Generated by (magic number): 80002
+// Id's are bound by 68
Capability Geometry
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Geometry 4 "main" 45 48
+ EntryPoint Geometry 4 "main" 42 46 55 58
ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputLineStrip
ExecutionMode 4 OutputVertices 4
+ Source HLSL 500
Name 4 "main"
Name 12 "PSInput"
MemberName 12(PSInput) 0 "myfloat"
@@ -164,16 +209,20 @@ output primitive = line_strip
Name 16 "test"
Name 17 "OutputStream"
Name 20 "Vert"
- Name 43 "VertexID"
- Name 45 "VertexID"
- Name 47 "test"
- Name 48 "test"
- Name 50 "OutputStream"
- Name 51 "param"
- Name 53 "param"
- Name 55 "param"
- Decorate 45(VertexID) Location 0
- Decorate 48(test) Location 3
+ Name 42 "OutputStream.myfloat"
+ Name 46 "OutputStream.something"
+ Name 53 "VertexID"
+ Name 55 "VertexID"
+ Name 57 "test"
+ Name 58 "test"
+ Name 60 "OutputStream"
+ Name 61 "param"
+ Name 63 "param"
+ Name 65 "param"
+ Decorate 42(OutputStream.myfloat) Location 0
+ Decorate 46(OutputStream.something) Location 1
+ Decorate 55(VertexID) Location 0
+ Decorate 58(test) Location 1
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -191,26 +240,32 @@ output primitive = line_strip
29: 11(int) Constant 2
34: TypePointer Function 10(float)
39: TypePointer Function 11(int)
- 44: TypePointer Input 8
- 45(VertexID): 44(ptr) Variable Input
- 48(test): 44(ptr) Variable Input
+ 41: TypePointer Output 10(float)
+42(OutputStream.myfloat): 41(ptr) Variable Output
+ 45: TypePointer Output 11(int)
+46(OutputStream.something): 45(ptr) Variable Output
+ 54: TypePointer Input 8
+ 55(VertexID): 54(ptr) Variable Input
+ 58(test): 54(ptr) Variable Input
4(main): 2 Function None 3
5: Label
- 43(VertexID): 9(ptr) Variable Function
- 47(test): 9(ptr) Variable Function
-50(OutputStream): 13(ptr) Variable Function
- 51(param): 9(ptr) Variable Function
- 53(param): 9(ptr) Variable Function
- 55(param): 13(ptr) Variable Function
- 46: 8 Load 45(VertexID)
- Store 43(VertexID) 46
- 49: 8 Load 48(test)
- Store 47(test) 49
- 52: 8 Load 43(VertexID)
- Store 51(param) 52
- 54: 8 Load 47(test)
- Store 53(param) 54
- 56: 2 FunctionCall 18(@main(u1[3];u1[3];struct-PSInput-f1-i11;) 51(param) 53(param) 55(param)
+ 53(VertexID): 9(ptr) Variable Function
+ 57(test): 9(ptr) Variable Function
+60(OutputStream): 13(ptr) Variable Function
+ 61(param): 9(ptr) Variable Function
+ 63(param): 9(ptr) Variable Function
+ 65(param): 13(ptr) Variable Function
+ 56: 8 Load 55(VertexID)
+ Store 53(VertexID) 56
+ 59: 8 Load 58(test)
+ Store 57(test) 59
+ 62: 8 Load 53(VertexID)
+ Store 61(param) 62
+ 64: 8 Load 57(test)
+ Store 63(param) 64
+ 66: 2 FunctionCall 18(@main(u1[3];u1[3];struct-PSInput-f1-i11;) 61(param) 63(param) 65(param)
+ 67: 12(PSInput) Load 65(param)
+ Store 60(OutputStream) 67
Return
FunctionEnd
18(@main(u1[3];u1[3];struct-PSInput-f1-i11;): 2 Function None 14
@@ -235,11 +290,19 @@ output primitive = line_strip
38: 11(int) Bitcast 37
40: 39(ptr) AccessChain 20(Vert) 25
Store 40 38
- 41: 12(PSInput) Load 20(Vert)
- Store 17(OutputStream) 41
+ 43: 34(ptr) AccessChain 20(Vert) 21
+ 44: 10(float) Load 43
+ Store 42(OutputStream.myfloat) 44
+ 47: 39(ptr) AccessChain 20(Vert) 25
+ 48: 11(int) Load 47
+ Store 46(OutputStream.something) 48
EmitVertex
- 42: 12(PSInput) Load 20(Vert)
- Store 17(OutputStream) 42
+ 49: 34(ptr) AccessChain 20(Vert) 21
+ 50: 10(float) Load 49
+ Store 42(OutputStream.myfloat) 50
+ 51: 39(ptr) AccessChain 20(Vert) 25
+ 52: 11(int) Load 51
+ Store 46(OutputStream.something) 52
EmitVertex
EndPrimitive
Return
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.boolConv.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.boolConv.vert.out
new file mode 100644
index 00000000000..5d94fe95844
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.boolConv.vert.out
@@ -0,0 +1,363 @@
+hlsl.boolConv.vert
+Shader version: 500
+0:? Sequence
+0:1 Sequence
+0:1 move second child to first child ( temp bool)
+0:1 'b' ( global bool)
+0:1 Constant:
+0:1 true (const bool)
+0:3 Function Definition: @main( ( temp 4-component vector of float)
+0:3 Function Parameters:
+0:? Sequence
+0:4 Sequence
+0:4 move second child to first child ( temp int)
+0:4 'r' ( temp int)
+0:4 Constant:
+0:4 0 (const int)
+0:6 add second child into first child ( temp int)
+0:6 'r' ( temp int)
+0:6 Convert bool to int ( temp int)
+0:6 add ( temp bool)
+0:6 Convert bool to int ( temp int)
+0:6 'a' ( global bool)
+0:6 Convert bool to int ( temp int)
+0:6 'b' ( global bool)
+0:7 add second child into first child ( temp int)
+0:7 'r' ( temp int)
+0:7 Convert bool to int ( temp int)
+0:7 subtract ( temp bool)
+0:7 Convert bool to int ( temp int)
+0:7 'a' ( global bool)
+0:7 Convert bool to int ( temp int)
+0:7 'b' ( global bool)
+0:8 add second child into first child ( temp int)
+0:8 'r' ( temp int)
+0:8 Convert bool to int ( temp int)
+0:8 component-wise multiply ( temp bool)
+0:8 Convert bool to int ( temp int)
+0:8 'a' ( global bool)
+0:8 Convert bool to int ( temp int)
+0:8 'b' ( global bool)
+0:9 add second child into first child ( temp int)
+0:9 'r' ( temp int)
+0:9 Convert bool to int ( temp int)
+0:9 divide ( temp bool)
+0:9 Convert bool to int ( temp int)
+0:9 'a' ( global bool)
+0:9 Convert bool to int ( temp int)
+0:9 'b' ( global bool)
+0:10 add second child into first child ( temp int)
+0:10 'r' ( temp int)
+0:10 Convert bool to int ( temp int)
+0:10 mod ( temp bool)
+0:10 Convert bool to int ( temp int)
+0:10 'a' ( global bool)
+0:10 Convert bool to int ( temp int)
+0:10 'b' ( global bool)
+0:12 add second child into first child ( temp int)
+0:12 'r' ( temp int)
+0:12 Convert bool to int ( temp int)
+0:12 bitwise and ( temp bool)
+0:12 Convert bool to int ( temp int)
+0:12 'a' ( global bool)
+0:12 Convert bool to int ( temp int)
+0:12 'b' ( global bool)
+0:13 add second child into first child ( temp int)
+0:13 'r' ( temp int)
+0:13 Convert bool to int ( temp int)
+0:13 inclusive-or ( temp bool)
+0:13 Convert bool to int ( temp int)
+0:13 'a' ( global bool)
+0:13 Convert bool to int ( temp int)
+0:13 'b' ( global bool)
+0:14 add second child into first child ( temp int)
+0:14 'r' ( temp int)
+0:14 Convert bool to int ( temp int)
+0:14 exclusive-or ( temp bool)
+0:14 Convert bool to int ( temp int)
+0:14 'a' ( global bool)
+0:14 Convert bool to int ( temp int)
+0:14 'b' ( global bool)
+0:16 add second child into first child ( temp int)
+0:16 'r' ( temp int)
+0:16 Convert bool to int ( temp int)
+0:16 left-shift ( temp bool)
+0:16 Convert bool to int ( temp int)
+0:16 'a' ( global bool)
+0:16 Convert bool to int ( temp int)
+0:16 'b' ( global bool)
+0:17 add second child into first child ( temp int)
+0:17 'r' ( temp int)
+0:17 Convert bool to int ( temp int)
+0:17 right-shift ( temp bool)
+0:17 Convert bool to int ( temp int)
+0:17 'a' ( global bool)
+0:17 Convert bool to int ( temp int)
+0:17 'b' ( global bool)
+0:19 Branch: Return with expression
+0:19 Construct vec4 ( temp 4-component vector of float)
+0:19 Convert int to float ( temp float)
+0:19 'r' ( temp int)
+0:3 Function Definition: main( ( temp void)
+0:3 Function Parameters:
+0:? Sequence
+0:3 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:3 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'a' ( global bool)
+0:? 'b' ( global bool)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:1 Sequence
+0:1 move second child to first child ( temp bool)
+0:1 'b' ( global bool)
+0:1 Constant:
+0:1 true (const bool)
+0:3 Function Definition: @main( ( temp 4-component vector of float)
+0:3 Function Parameters:
+0:? Sequence
+0:4 Sequence
+0:4 move second child to first child ( temp int)
+0:4 'r' ( temp int)
+0:4 Constant:
+0:4 0 (const int)
+0:6 add second child into first child ( temp int)
+0:6 'r' ( temp int)
+0:6 Convert bool to int ( temp int)
+0:6 add ( temp bool)
+0:6 Convert bool to int ( temp int)
+0:6 'a' ( global bool)
+0:6 Convert bool to int ( temp int)
+0:6 'b' ( global bool)
+0:7 add second child into first child ( temp int)
+0:7 'r' ( temp int)
+0:7 Convert bool to int ( temp int)
+0:7 subtract ( temp bool)
+0:7 Convert bool to int ( temp int)
+0:7 'a' ( global bool)
+0:7 Convert bool to int ( temp int)
+0:7 'b' ( global bool)
+0:8 add second child into first child ( temp int)
+0:8 'r' ( temp int)
+0:8 Convert bool to int ( temp int)
+0:8 component-wise multiply ( temp bool)
+0:8 Convert bool to int ( temp int)
+0:8 'a' ( global bool)
+0:8 Convert bool to int ( temp int)
+0:8 'b' ( global bool)
+0:9 add second child into first child ( temp int)
+0:9 'r' ( temp int)
+0:9 Convert bool to int ( temp int)
+0:9 divide ( temp bool)
+0:9 Convert bool to int ( temp int)
+0:9 'a' ( global bool)
+0:9 Convert bool to int ( temp int)
+0:9 'b' ( global bool)
+0:10 add second child into first child ( temp int)
+0:10 'r' ( temp int)
+0:10 Convert bool to int ( temp int)
+0:10 mod ( temp bool)
+0:10 Convert bool to int ( temp int)
+0:10 'a' ( global bool)
+0:10 Convert bool to int ( temp int)
+0:10 'b' ( global bool)
+0:12 add second child into first child ( temp int)
+0:12 'r' ( temp int)
+0:12 Convert bool to int ( temp int)
+0:12 bitwise and ( temp bool)
+0:12 Convert bool to int ( temp int)
+0:12 'a' ( global bool)
+0:12 Convert bool to int ( temp int)
+0:12 'b' ( global bool)
+0:13 add second child into first child ( temp int)
+0:13 'r' ( temp int)
+0:13 Convert bool to int ( temp int)
+0:13 inclusive-or ( temp bool)
+0:13 Convert bool to int ( temp int)
+0:13 'a' ( global bool)
+0:13 Convert bool to int ( temp int)
+0:13 'b' ( global bool)
+0:14 add second child into first child ( temp int)
+0:14 'r' ( temp int)
+0:14 Convert bool to int ( temp int)
+0:14 exclusive-or ( temp bool)
+0:14 Convert bool to int ( temp int)
+0:14 'a' ( global bool)
+0:14 Convert bool to int ( temp int)
+0:14 'b' ( global bool)
+0:16 add second child into first child ( temp int)
+0:16 'r' ( temp int)
+0:16 Convert bool to int ( temp int)
+0:16 left-shift ( temp bool)
+0:16 Convert bool to int ( temp int)
+0:16 'a' ( global bool)
+0:16 Convert bool to int ( temp int)
+0:16 'b' ( global bool)
+0:17 add second child into first child ( temp int)
+0:17 'r' ( temp int)
+0:17 Convert bool to int ( temp int)
+0:17 right-shift ( temp bool)
+0:17 Convert bool to int ( temp int)
+0:17 'a' ( global bool)
+0:17 Convert bool to int ( temp int)
+0:17 'b' ( global bool)
+0:19 Branch: Return with expression
+0:19 Construct vec4 ( temp 4-component vector of float)
+0:19 Convert int to float ( temp float)
+0:19 'r' ( temp int)
+0:3 Function Definition: main( ( temp void)
+0:3 Function Parameters:
+0:? Sequence
+0:3 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:3 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'a' ( global bool)
+0:? 'b' ( global bool)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 109
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 107
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 13 "b"
+ Name 17 "r"
+ Name 19 "a"
+ Name 107 "@entryPointOutput"
+ Decorate 107(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeBool
+ 12: TypePointer Private 11(bool)
+ 13(b): 12(ptr) Variable Private
+ 14: 11(bool) ConstantTrue
+ 15: TypeInt 32 1
+ 16: TypePointer Function 15(int)
+ 18: 15(int) Constant 0
+ 19(a): 12(ptr) Variable Private
+ 21: 15(int) Constant 1
+ 106: TypePointer Output 7(fvec4)
+107(@entryPointOutput): 106(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ Store 13(b) 14
+ 108: 7(fvec4) FunctionCall 9(@main()
+ Store 107(@entryPointOutput) 108
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 17(r): 16(ptr) Variable Function
+ Store 17(r) 18
+ 20: 11(bool) Load 19(a)
+ 22: 15(int) Select 20 21 18
+ 23: 11(bool) Load 13(b)
+ 24: 15(int) Select 23 21 18
+ 25: 11(bool) IAdd 22 24
+ 26: 15(int) Select 25 21 18
+ 27: 15(int) Load 17(r)
+ 28: 15(int) IAdd 27 26
+ Store 17(r) 28
+ 29: 11(bool) Load 19(a)
+ 30: 15(int) Select 29 21 18
+ 31: 11(bool) Load 13(b)
+ 32: 15(int) Select 31 21 18
+ 33: 11(bool) ISub 30 32
+ 34: 15(int) Select 33 21 18
+ 35: 15(int) Load 17(r)
+ 36: 15(int) IAdd 35 34
+ Store 17(r) 36
+ 37: 11(bool) Load 19(a)
+ 38: 15(int) Select 37 21 18
+ 39: 11(bool) Load 13(b)
+ 40: 15(int) Select 39 21 18
+ 41: 11(bool) IMul 38 40
+ 42: 15(int) Select 41 21 18
+ 43: 15(int) Load 17(r)
+ 44: 15(int) IAdd 43 42
+ Store 17(r) 44
+ 45: 11(bool) Load 19(a)
+ 46: 15(int) Select 45 21 18
+ 47: 11(bool) Load 13(b)
+ 48: 15(int) Select 47 21 18
+ 49: 11(bool) SDiv 46 48
+ 50: 15(int) Select 49 21 18
+ 51: 15(int) Load 17(r)
+ 52: 15(int) IAdd 51 50
+ Store 17(r) 52
+ 53: 11(bool) Load 19(a)
+ 54: 15(int) Select 53 21 18
+ 55: 11(bool) Load 13(b)
+ 56: 15(int) Select 55 21 18
+ 57: 11(bool) SMod 54 56
+ 58: 15(int) Select 57 21 18
+ 59: 15(int) Load 17(r)
+ 60: 15(int) IAdd 59 58
+ Store 17(r) 60
+ 61: 11(bool) Load 19(a)
+ 62: 15(int) Select 61 21 18
+ 63: 11(bool) Load 13(b)
+ 64: 15(int) Select 63 21 18
+ 65: 11(bool) BitwiseAnd 62 64
+ 66: 15(int) Select 65 21 18
+ 67: 15(int) Load 17(r)
+ 68: 15(int) IAdd 67 66
+ Store 17(r) 68
+ 69: 11(bool) Load 19(a)
+ 70: 15(int) Select 69 21 18
+ 71: 11(bool) Load 13(b)
+ 72: 15(int) Select 71 21 18
+ 73: 11(bool) BitwiseOr 70 72
+ 74: 15(int) Select 73 21 18
+ 75: 15(int) Load 17(r)
+ 76: 15(int) IAdd 75 74
+ Store 17(r) 76
+ 77: 11(bool) Load 19(a)
+ 78: 15(int) Select 77 21 18
+ 79: 11(bool) Load 13(b)
+ 80: 15(int) Select 79 21 18
+ 81: 11(bool) BitwiseXor 78 80
+ 82: 15(int) Select 81 21 18
+ 83: 15(int) Load 17(r)
+ 84: 15(int) IAdd 83 82
+ Store 17(r) 84
+ 85: 11(bool) Load 19(a)
+ 86: 15(int) Select 85 21 18
+ 87: 11(bool) Load 13(b)
+ 88: 15(int) Select 87 21 18
+ 89: 11(bool) ShiftLeftLogical 86 88
+ 90: 15(int) Select 89 21 18
+ 91: 15(int) Load 17(r)
+ 92: 15(int) IAdd 91 90
+ Store 17(r) 92
+ 93: 11(bool) Load 19(a)
+ 94: 15(int) Select 93 21 18
+ 95: 11(bool) Load 13(b)
+ 96: 15(int) Select 95 21 18
+ 97: 11(bool) ShiftRightArithmetic 94 96
+ 98: 15(int) Select 97 21 18
+ 99: 15(int) Load 17(r)
+ 100: 15(int) IAdd 99 98
+ Store 17(r) 100
+ 101: 15(int) Load 17(r)
+ 102: 6(float) ConvertSToF 101
+ 103: 7(fvec4) CompositeConstruct 102 102 102 102
+ ReturnValue 103
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out
index c406f24d363..0b73f8da76f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out
@@ -1,231 +1,269 @@
hlsl.buffer.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:30 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:30 Function Definition: foo( ( temp float)
0:30 Function Parameters:
-0:30 'input' ( in 4-component vector of float)
0:? Sequence
0:31 Branch: Return with expression
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 'input' ( in 4-component vector of float)
-0:31 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
-0:31 'anon@1' (layout( row_major std430) buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v3: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:31 'anon@2' (layout( set=10 binding=2 row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:31 'anon@3' (layout( binding=8 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430) buffer float f7, layout( row_major std430) buffer 3X4 matrix of float m1, layout( column_major std430) buffer 3X4 matrix of float m2, layout( row_major std430) buffer 3X4 matrix of float m3, layout( row_major std430) buffer 3X4 matrix of float m4})
-0:31 Constant:
-0:31 0 (const uint)
-0:30 Function Definition: PixelShaderFunction( ( temp void)
-0:30 Function Parameters:
+0:31 Constant:
+0:31 1.000000
+0:35 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35 Function Parameters:
+0:35 'input' ( in 4-component vector of float)
+0:? Sequence
+0:36 Branch: Return with expression
+0:36 vector-scale ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 'input' ( in 4-component vector of float)
+0:36 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:36 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:36 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
+0:36 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:36 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 Function Call: foo( ( temp float)
+0:35 Function Definition: PixelShaderFunction( ( temp void)
+0:35 Function Parameters:
0:? Sequence
-0:30 move second child to first child ( temp 4-component vector of float)
+0:35 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
-0:? 'input' (layout( location=0) in 4-component vector of float)
-0:30 move second child to first child ( temp 4-component vector of float)
+0:? 'input' ( in 4-component vector of float FragCoord)
+0:35 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:30 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:? 'anon@1' (layout( row_major std430) buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:? 'anon@2' (layout( set=10 binding=2 row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
-0:? 'anon@3' (layout( binding=8 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430) buffer float f7, layout( row_major std430) buffer 3X4 matrix of float m1, layout( column_major std430) buffer 3X4 matrix of float m2, layout( row_major std430) buffer 3X4 matrix of float m3, layout( row_major std430) buffer 3X4 matrix of float m4})
+0:? 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
+0:? 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
+0:? 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'input' (layout( location=0) in 4-component vector of float)
+0:? 'input' ( in 4-component vector of float FragCoord)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:30 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:30 Function Definition: foo( ( temp float)
0:30 Function Parameters:
-0:30 'input' ( in 4-component vector of float)
0:? Sequence
0:31 Branch: Return with expression
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 add ( temp 4-component vector of float)
-0:31 'input' ( in 4-component vector of float)
-0:31 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
-0:31 'anon@1' (layout( row_major std430) buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v3: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:31 'anon@2' (layout( set=10 binding=2 row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
-0:31 Constant:
-0:31 0 (const uint)
-0:31 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:31 'anon@3' (layout( binding=8 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430) buffer float f7, layout( row_major std430) buffer 3X4 matrix of float m1, layout( column_major std430) buffer 3X4 matrix of float m2, layout( row_major std430) buffer 3X4 matrix of float m3, layout( row_major std430) buffer 3X4 matrix of float m4})
-0:31 Constant:
-0:31 0 (const uint)
-0:30 Function Definition: PixelShaderFunction( ( temp void)
-0:30 Function Parameters:
+0:31 Constant:
+0:31 1.000000
+0:35 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35 Function Parameters:
+0:35 'input' ( in 4-component vector of float)
0:? Sequence
-0:30 move second child to first child ( temp 4-component vector of float)
+0:36 Branch: Return with expression
+0:36 vector-scale ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 'input' ( in 4-component vector of float)
+0:36 v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:36 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:36 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
+0:36 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:36 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
+0:36 Constant:
+0:36 0 (const uint)
+0:36 Function Call: foo( ( temp float)
+0:35 Function Definition: PixelShaderFunction( ( temp void)
+0:35 Function Parameters:
+0:? Sequence
+0:35 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
-0:? 'input' (layout( location=0) in 4-component vector of float)
-0:30 move second child to first child ( temp 4-component vector of float)
+0:? 'input' ( in 4-component vector of float FragCoord)
+0:35 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:30 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:? 'anon@1' (layout( row_major std430) buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:? 'anon@2' (layout( set=10 binding=2 row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
-0:? 'anon@3' (layout( binding=8 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430) buffer float f7, layout( row_major std430) buffer 3X4 matrix of float m1, layout( column_major std430) buffer 3X4 matrix of float m2, layout( row_major std430) buffer 3X4 matrix of float m3, layout( row_major std430) buffer 3X4 matrix of float m4})
+0:? 'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
+0:? 'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
+0:? 'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'input' (layout( location=0) in 4-component vector of float)
+0:? 'input' ( in 4-component vector of float FragCoord)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 53
+// Generated by (magic number): 80002
+// Id's are bound by 61
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 46 49
+ EntryPoint Fragment 4 "PixelShaderFunction" 54 57
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
- Name 11 "@PixelShaderFunction(vf4;"
- Name 10 "input"
- Name 14 ""
- MemberName 14 0 "v1"
- Name 16 ""
- Name 23 ""
- MemberName 23 0 "v2"
- Name 25 ""
- Name 29 "cbufName"
- MemberName 29(cbufName) 0 "v3"
- MemberName 29(cbufName) 1 "i3"
+ Name 8 "foo("
+ Name 14 "@PixelShaderFunction(vf4;"
+ Name 13 "input"
+ Name 20 "buf1"
+ MemberName 20(buf1) 0 "v1"
+ Name 22 ""
+ Name 29 "buf2"
+ MemberName 29(buf2) 0 "v2"
Name 31 ""
- Name 36 "tbufName"
- MemberName 36(tbufName) 0 "v4"
- MemberName 36(tbufName) 1 "i4"
- MemberName 36(tbufName) 2 "f1"
- MemberName 36(tbufName) 3 "f3"
- MemberName 36(tbufName) 4 "f4"
- MemberName 36(tbufName) 5 "f5"
- MemberName 36(tbufName) 6 "f6"
- MemberName 36(tbufName) 7 "f7"
- MemberName 36(tbufName) 8 "m1"
- MemberName 36(tbufName) 9 "m2"
- MemberName 36(tbufName) 10 "m3"
- MemberName 36(tbufName) 11 "m4"
- Name 38 ""
- Name 44 "input"
- Name 46 "input"
- Name 49 "@entryPointOutput"
- Name 50 "param"
- MemberDecorate 14 0 Offset 0
- Decorate 14 Block
- Decorate 16 DescriptorSet 0
- MemberDecorate 23 0 Offset 0
- Decorate 23 BufferBlock
- Decorate 25 DescriptorSet 0
- MemberDecorate 29(cbufName) 0 Offset 0
- MemberDecorate 29(cbufName) 1 Offset 20
- Decorate 29(cbufName) Block
- Decorate 31 DescriptorSet 10
- Decorate 31 Binding 2
- MemberDecorate 36(tbufName) 0 Offset 16
- MemberDecorate 36(tbufName) 1 Offset 48
- MemberDecorate 36(tbufName) 2 Offset 60
- MemberDecorate 36(tbufName) 3 Offset 64
- MemberDecorate 36(tbufName) 4 Offset 68
- MemberDecorate 36(tbufName) 5 Offset 72
- MemberDecorate 36(tbufName) 6 Offset 76
- MemberDecorate 36(tbufName) 7 Offset 80
- MemberDecorate 36(tbufName) 8 RowMajor
- MemberDecorate 36(tbufName) 8 Offset 96
- MemberDecorate 36(tbufName) 8 MatrixStride 16
- MemberDecorate 36(tbufName) 9 ColMajor
- MemberDecorate 36(tbufName) 9 Offset 160
- MemberDecorate 36(tbufName) 9 MatrixStride 16
- MemberDecorate 36(tbufName) 10 RowMajor
- MemberDecorate 36(tbufName) 10 Offset 208
- MemberDecorate 36(tbufName) 10 MatrixStride 16
- MemberDecorate 36(tbufName) 11 RowMajor
- MemberDecorate 36(tbufName) 11 Offset 272
- MemberDecorate 36(tbufName) 11 MatrixStride 16
- Decorate 36(tbufName) BufferBlock
- Decorate 38 DescriptorSet 0
- Decorate 38 Binding 8
- Decorate 46(input) Location 0
- Decorate 49(@entryPointOutput) Location 0
+ Name 35 "cbufName"
+ MemberName 35(cbufName) 0 "v3"
+ MemberName 35(cbufName) 1 "i3"
+ Name 37 ""
+ Name 42 "tbufName"
+ MemberName 42(tbufName) 0 "v4"
+ MemberName 42(tbufName) 1 "i4"
+ MemberName 42(tbufName) 2 "f1"
+ MemberName 42(tbufName) 3 "f3"
+ MemberName 42(tbufName) 4 "f4"
+ MemberName 42(tbufName) 5 "f5"
+ MemberName 42(tbufName) 6 "f6"
+ MemberName 42(tbufName) 7 "f7"
+ MemberName 42(tbufName) 8 "m1"
+ MemberName 42(tbufName) 9 "m2"
+ MemberName 42(tbufName) 10 "m3"
+ MemberName 42(tbufName) 11 "m4"
+ Name 44 ""
+ Name 52 "input"
+ Name 54 "input"
+ Name 57 "@entryPointOutput"
+ Name 58 "param"
+ MemberDecorate 20(buf1) 0 Offset 0
+ Decorate 20(buf1) Block
+ Decorate 22 DescriptorSet 0
+ MemberDecorate 29(buf2) 0 NonWritable
+ MemberDecorate 29(buf2) 0 Offset 0
+ Decorate 29(buf2) BufferBlock
+ Decorate 31 DescriptorSet 0
+ MemberDecorate 35(cbufName) 0 Offset 0
+ MemberDecorate 35(cbufName) 1 Offset 20
+ Decorate 35(cbufName) Block
+ Decorate 37 DescriptorSet 0
+ MemberDecorate 42(tbufName) 0 NonWritable
+ MemberDecorate 42(tbufName) 0 Offset 16
+ MemberDecorate 42(tbufName) 1 NonWritable
+ MemberDecorate 42(tbufName) 1 Offset 48
+ MemberDecorate 42(tbufName) 2 NonWritable
+ MemberDecorate 42(tbufName) 2 Offset 60
+ MemberDecorate 42(tbufName) 3 NonWritable
+ MemberDecorate 42(tbufName) 3 Offset 64
+ MemberDecorate 42(tbufName) 4 NonWritable
+ MemberDecorate 42(tbufName) 4 Offset 68
+ MemberDecorate 42(tbufName) 5 NonWritable
+ MemberDecorate 42(tbufName) 5 Offset 72
+ MemberDecorate 42(tbufName) 6 NonWritable
+ MemberDecorate 42(tbufName) 6 Offset 76
+ MemberDecorate 42(tbufName) 7 NonWritable
+ MemberDecorate 42(tbufName) 7 Offset 128
+ MemberDecorate 42(tbufName) 8 RowMajor
+ MemberDecorate 42(tbufName) 8 NonWritable
+ MemberDecorate 42(tbufName) 8 Offset 112
+ MemberDecorate 42(tbufName) 8 MatrixStride 16
+ MemberDecorate 42(tbufName) 9 ColMajor
+ MemberDecorate 42(tbufName) 9 NonWritable
+ MemberDecorate 42(tbufName) 9 Offset 176
+ MemberDecorate 42(tbufName) 9 MatrixStride 16
+ MemberDecorate 42(tbufName) 10 RowMajor
+ MemberDecorate 42(tbufName) 10 NonWritable
+ MemberDecorate 42(tbufName) 10 Offset 240
+ MemberDecorate 42(tbufName) 10 MatrixStride 16
+ MemberDecorate 42(tbufName) 11 RowMajor
+ MemberDecorate 42(tbufName) 11 NonWritable
+ MemberDecorate 42(tbufName) 11 Offset 304
+ MemberDecorate 42(tbufName) 11 MatrixStride 16
+ Decorate 42(tbufName) BufferBlock
+ Decorate 44 DescriptorSet 0
+ Decorate 44 Binding 8
+ Decorate 54(input) BuiltIn FragCoord
+ Decorate 57(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
- 7: TypeVector 6(float) 4
- 8: TypePointer Function 7(fvec4)
- 9: TypeFunction 7(fvec4) 8(ptr)
- 14: TypeStruct 7(fvec4)
- 15: TypePointer Uniform 14(struct)
- 16: 15(ptr) Variable Uniform
- 17: TypeInt 32 1
- 18: 17(int) Constant 0
- 19: TypePointer Uniform 7(fvec4)
- 23: TypeStruct 7(fvec4)
- 24: TypePointer Uniform 23(struct)
- 25: 24(ptr) Variable Uniform
- 29(cbufName): TypeStruct 7(fvec4) 17(int)
- 30: TypePointer Uniform 29(cbufName)
+ 7: TypeFunction 6(float)
+ 10: TypeVector 6(float) 4
+ 11: TypePointer Function 10(fvec4)
+ 12: TypeFunction 10(fvec4) 11(ptr)
+ 16: 6(float) Constant 1065353216
+ 20(buf1): TypeStruct 10(fvec4)
+ 21: TypePointer Uniform 20(buf1)
+ 22: 21(ptr) Variable Uniform
+ 23: TypeInt 32 1
+ 24: 23(int) Constant 0
+ 25: TypePointer Uniform 10(fvec4)
+ 29(buf2): TypeStruct 10(fvec4)
+ 30: TypePointer Uniform 29(buf2)
31: 30(ptr) Variable Uniform
- 35: TypeMatrix 7(fvec4) 3
- 36(tbufName): TypeStruct 7(fvec4) 17(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 35 35 35 35
- 37: TypePointer Uniform 36(tbufName)
- 38: 37(ptr) Variable Uniform
- 45: TypePointer Input 7(fvec4)
- 46(input): 45(ptr) Variable Input
- 48: TypePointer Output 7(fvec4)
-49(@entryPointOutput): 48(ptr) Variable Output
+ 35(cbufName): TypeStruct 10(fvec4) 23(int)
+ 36: TypePointer Uniform 35(cbufName)
+ 37: 36(ptr) Variable Uniform
+ 41: TypeMatrix 10(fvec4) 3
+ 42(tbufName): TypeStruct 10(fvec4) 23(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 41 41 41 41
+ 43: TypePointer Uniform 42(tbufName)
+ 44: 43(ptr) Variable Uniform
+ 53: TypePointer Input 10(fvec4)
+ 54(input): 53(ptr) Variable Input
+ 56: TypePointer Output 10(fvec4)
+57(@entryPointOutput): 56(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
- 44(input): 8(ptr) Variable Function
- 50(param): 8(ptr) Variable Function
- 47: 7(fvec4) Load 46(input)
- Store 44(input) 47
- 51: 7(fvec4) Load 44(input)
- Store 50(param) 51
- 52: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 50(param)
- Store 49(@entryPointOutput) 52
+ 52(input): 11(ptr) Variable Function
+ 58(param): 11(ptr) Variable Function
+ 55: 10(fvec4) Load 54(input)
+ Store 52(input) 55
+ 59: 10(fvec4) Load 52(input)
+ Store 58(param) 59
+ 60: 10(fvec4) FunctionCall 14(@PixelShaderFunction(vf4;) 58(param)
+ Store 57(@entryPointOutput) 60
Return
FunctionEnd
-11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9
- 10(input): 8(ptr) FunctionParameter
- 12: Label
- 13: 7(fvec4) Load 10(input)
- 20: 19(ptr) AccessChain 16 18
- 21: 7(fvec4) Load 20
- 22: 7(fvec4) FAdd 13 21
- 26: 19(ptr) AccessChain 25 18
- 27: 7(fvec4) Load 26
- 28: 7(fvec4) FAdd 22 27
- 32: 19(ptr) AccessChain 31 18
- 33: 7(fvec4) Load 32
- 34: 7(fvec4) FAdd 28 33
- 39: 19(ptr) AccessChain 38 18
- 40: 7(fvec4) Load 39
- 41: 7(fvec4) FAdd 34 40
- ReturnValue 41
+ 8(foo(): 6(float) Function None 7
+ 9: Label
+ ReturnValue 16
+ FunctionEnd
+14(@PixelShaderFunction(vf4;): 10(fvec4) Function None 12
+ 13(input): 11(ptr) FunctionParameter
+ 15: Label
+ 19: 10(fvec4) Load 13(input)
+ 26: 25(ptr) AccessChain 22 24
+ 27: 10(fvec4) Load 26
+ 28: 10(fvec4) FAdd 19 27
+ 32: 25(ptr) AccessChain 31 24
+ 33: 10(fvec4) Load 32
+ 34: 10(fvec4) FAdd 28 33
+ 38: 25(ptr) AccessChain 37 24
+ 39: 10(fvec4) Load 38
+ 40: 10(fvec4) FAdd 34 39
+ 45: 25(ptr) AccessChain 44 24
+ 46: 10(fvec4) Load 45
+ 47: 10(fvec4) FAdd 40 46
+ 48: 6(float) FunctionCall 8(foo()
+ 49: 10(fvec4) VectorTimesScalar 47 48
+ ReturnValue 49
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index f018984f3d6..bbdd2161f0a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.calculatelod.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -149,13 +149,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -172,14 +172,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -329,13 +329,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -352,11 +352,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 148
Capability Shader
@@ -367,6 +367,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 140 144
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -393,8 +394,8 @@ gl_FragCoord origin is upper left
Name 115 "g_tTexcdu4a"
Name 127 "psout"
Name 137 "flattenTemp"
- Name 140 "Color"
- Name 144 "Depth"
+ Name 140 "@entryPointOutput.Color"
+ Name 144 "@entryPointOutput.Depth"
Name 147 "g_tTex1df4"
Decorate 16(g_tTex1df4a) DescriptorSet 0
Decorate 16(g_tTex1df4a) Binding 1
@@ -408,8 +409,8 @@ gl_FragCoord origin is upper left
Decorate 92(g_tTexcdf4a) DescriptorSet 0
Decorate 104(g_tTexcdi4a) DescriptorSet 0
Decorate 115(g_tTexcdu4a) DescriptorSet 0
- Decorate 140(Color) Location 0
- Decorate 144(Depth) BuiltIn FragDepth
+ Decorate 140(@entryPointOutput.Color) Location 0
+ Decorate 144(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 147(g_tTex1df4) DescriptorSet 0
Decorate 147(g_tTex1df4) Binding 0
2: TypeVoid
@@ -484,9 +485,9 @@ gl_FragCoord origin is upper left
130: TypePointer Function 7(fvec4)
132: 27(int) Constant 1
139: TypePointer Output 7(fvec4)
- 140(Color): 139(ptr) Variable Output
+140(@entryPointOutput.Color): 139(ptr) Variable Output
143: TypePointer Output 6(float)
- 144(Depth): 143(ptr) Variable Output
+144(@entryPointOutput.Depth): 143(ptr) Variable Output
147(g_tTex1df4): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -495,10 +496,10 @@ gl_FragCoord origin is upper left
Store 137(flattenTemp) 138
141: 130(ptr) AccessChain 137(flattenTemp) 28
142: 7(fvec4) Load 141
- Store 140(Color) 142
+ Store 140(@entryPointOutput.Color) 142
145: 12(ptr) AccessChain 137(flattenTemp) 132
146: 6(float) Load 145
- Store 144(Depth) 146
+ Store 144(@entryPointOutput.Depth) 146
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index 4e2e8860064..f85d9b51f36 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
@@ -11,7 +11,7 @@ ERROR: 0:38: '' : unimplemented: CalculateLevelOfDetailUnclamped
ERROR: 9 compilation errors. No code generated.
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -161,13 +161,13 @@ ERROR: node is still EOpNull!
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -184,14 +184,14 @@ ERROR: node is still EOpNull!
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -341,13 +341,13 @@ ERROR: node is still EOpNull!
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -364,7 +364,7 @@ ERROR: node is still EOpNull!
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out
index d17251dd61d..5d7cd71122a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out
@@ -1,5 +1,5 @@
hlsl.cast.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -37,7 +37,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -72,7 +72,7 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 39
Capability Shader
@@ -80,6 +80,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 32 35
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "@PixelShaderFunction(vf4;"
Name 10 "input"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.charLit.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.charLit.vert.out
new file mode 100644
index 00000000000..4555ba6a2da
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.charLit.vert.out
@@ -0,0 +1,233 @@
+hlsl.charLit.vert
+Shader version: 500
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Sequence
+0:3 move second child to first child ( temp uint)
+0:3 'a1' ( temp uint)
+0:3 Constant:
+0:3 65 (const uint)
+0:4 Sequence
+0:4 move second child to first child ( temp int)
+0:4 'a2' ( temp int)
+0:4 Constant:
+0:4 48 (const int)
+0:6 Sequence
+0:6 move second child to first child ( temp int)
+0:6 'a3' ( temp int)
+0:6 Constant:
+0:6 7 (const int)
+0:7 add second child into first child ( temp int)
+0:7 'a3' ( temp int)
+0:7 Constant:
+0:7 8 (const int)
+0:8 add second child into first child ( temp int)
+0:8 'a3' ( temp int)
+0:8 Constant:
+0:8 9 (const int)
+0:9 add second child into first child ( temp int)
+0:9 'a3' ( temp int)
+0:9 Constant:
+0:9 10 (const int)
+0:10 add second child into first child ( temp int)
+0:10 'a3' ( temp int)
+0:10 Constant:
+0:10 11 (const int)
+0:11 add second child into first child ( temp int)
+0:11 'a3' ( temp int)
+0:11 Constant:
+0:11 12 (const int)
+0:12 add second child into first child ( temp int)
+0:12 'a3' ( temp int)
+0:12 Constant:
+0:12 13 (const int)
+0:14 Sequence
+0:14 move second child to first child ( temp int)
+0:14 'a10' ( temp int)
+0:14 Constant:
+0:14 99 (const int)
+0:16 Branch: Return with expression
+0:16 Construct vec4 ( temp 4-component vector of float)
+0:16 Convert uint to float ( temp float)
+0:16 add ( temp uint)
+0:16 add ( temp uint)
+0:16 add ( temp uint)
+0:16 'a1' ( temp uint)
+0:16 Convert int to uint ( temp uint)
+0:16 'a2' ( temp int)
+0:16 Convert int to uint ( temp uint)
+0:16 'a3' ( temp int)
+0:16 Convert int to uint ( temp uint)
+0:16 'a10' ( temp int)
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Sequence
+0:3 move second child to first child ( temp uint)
+0:3 'a1' ( temp uint)
+0:3 Constant:
+0:3 65 (const uint)
+0:4 Sequence
+0:4 move second child to first child ( temp int)
+0:4 'a2' ( temp int)
+0:4 Constant:
+0:4 48 (const int)
+0:6 Sequence
+0:6 move second child to first child ( temp int)
+0:6 'a3' ( temp int)
+0:6 Constant:
+0:6 7 (const int)
+0:7 add second child into first child ( temp int)
+0:7 'a3' ( temp int)
+0:7 Constant:
+0:7 8 (const int)
+0:8 add second child into first child ( temp int)
+0:8 'a3' ( temp int)
+0:8 Constant:
+0:8 9 (const int)
+0:9 add second child into first child ( temp int)
+0:9 'a3' ( temp int)
+0:9 Constant:
+0:9 10 (const int)
+0:10 add second child into first child ( temp int)
+0:10 'a3' ( temp int)
+0:10 Constant:
+0:10 11 (const int)
+0:11 add second child into first child ( temp int)
+0:11 'a3' ( temp int)
+0:11 Constant:
+0:11 12 (const int)
+0:12 add second child into first child ( temp int)
+0:12 'a3' ( temp int)
+0:12 Constant:
+0:12 13 (const int)
+0:14 Sequence
+0:14 move second child to first child ( temp int)
+0:14 'a10' ( temp int)
+0:14 Constant:
+0:14 99 (const int)
+0:16 Branch: Return with expression
+0:16 Construct vec4 ( temp 4-component vector of float)
+0:16 Convert uint to float ( temp float)
+0:16 add ( temp uint)
+0:16 add ( temp uint)
+0:16 add ( temp uint)
+0:16 'a1' ( temp uint)
+0:16 Convert int to uint ( temp uint)
+0:16 'a2' ( temp int)
+0:16 Convert int to uint ( temp uint)
+0:16 'a3' ( temp int)
+0:16 Convert int to uint ( temp uint)
+0:16 'a10' ( temp int)
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 58
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 56
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 13 "a1"
+ Name 17 "a2"
+ Name 19 "a3"
+ Name 39 "a10"
+ Name 56 "@entryPointOutput"
+ Decorate 56(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeInt 32 0
+ 12: TypePointer Function 11(int)
+ 14: 11(int) Constant 65
+ 15: TypeInt 32 1
+ 16: TypePointer Function 15(int)
+ 18: 15(int) Constant 48
+ 20: 15(int) Constant 7
+ 21: 15(int) Constant 8
+ 24: 15(int) Constant 9
+ 27: 15(int) Constant 10
+ 30: 15(int) Constant 11
+ 33: 15(int) Constant 12
+ 36: 15(int) Constant 13
+ 40: 15(int) Constant 99
+ 55: TypePointer Output 7(fvec4)
+56(@entryPointOutput): 55(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 57: 7(fvec4) FunctionCall 9(@main()
+ Store 56(@entryPointOutput) 57
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 13(a1): 12(ptr) Variable Function
+ 17(a2): 16(ptr) Variable Function
+ 19(a3): 16(ptr) Variable Function
+ 39(a10): 16(ptr) Variable Function
+ Store 13(a1) 14
+ Store 17(a2) 18
+ Store 19(a3) 20
+ 22: 15(int) Load 19(a3)
+ 23: 15(int) IAdd 22 21
+ Store 19(a3) 23
+ 25: 15(int) Load 19(a3)
+ 26: 15(int) IAdd 25 24
+ Store 19(a3) 26
+ 28: 15(int) Load 19(a3)
+ 29: 15(int) IAdd 28 27
+ Store 19(a3) 29
+ 31: 15(int) Load 19(a3)
+ 32: 15(int) IAdd 31 30
+ Store 19(a3) 32
+ 34: 15(int) Load 19(a3)
+ 35: 15(int) IAdd 34 33
+ Store 19(a3) 35
+ 37: 15(int) Load 19(a3)
+ 38: 15(int) IAdd 37 36
+ Store 19(a3) 38
+ Store 39(a10) 40
+ 41: 11(int) Load 13(a1)
+ 42: 15(int) Load 17(a2)
+ 43: 11(int) Bitcast 42
+ 44: 11(int) IAdd 41 43
+ 45: 15(int) Load 19(a3)
+ 46: 11(int) Bitcast 45
+ 47: 11(int) IAdd 44 46
+ 48: 15(int) Load 39(a10)
+ 49: 11(int) Bitcast 48
+ 50: 11(int) IAdd 47 49
+ 51: 6(float) ConvertUToF 50
+ 52: 7(fvec4) CompositeConstruct 51 51 51 51
+ ReturnValue 52
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clip.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clip.frag.out
new file mode 100644
index 00000000000..e2e1a0adc9d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clip.frag.out
@@ -0,0 +1,123 @@
+hlsl.clip.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3 Function Definition: GetEntitySelectClip( ( temp float)
+0:3 Function Parameters:
+0:? Sequence
+0:4 Branch: Return with expression
+0:4 Constant:
+0:4 1.000000
+0:8 Function Definition: @main( ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:? Sequence
+0:9 Test condition and select ( temp void)
+0:9 Condition
+0:9 Compare Less Than ( temp bool)
+0:9 Function Call: GetEntitySelectClip( ( temp float)
+0:9 Constant:
+0:9 0.000000
+0:9 true case
+0:9 Branch: Kill
+0:11 Branch: Return with expression
+0:11 Constant:
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3 Function Definition: GetEntitySelectClip( ( temp float)
+0:3 Function Parameters:
+0:? Sequence
+0:4 Branch: Return with expression
+0:4 Constant:
+0:4 1.000000
+0:8 Function Definition: @main( ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:? Sequence
+0:9 Test condition and select ( temp void)
+0:9 Condition
+0:9 Compare Less Than ( temp bool)
+0:9 Function Call: GetEntitySelectClip( ( temp float)
+0:9 Constant:
+0:9 0.000000
+0:9 true case
+0:9 Branch: Kill
+0:11 Branch: Return with expression
+0:11 Constant:
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 30
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 28
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "GetEntitySelectClip("
+ Name 12 "@main("
+ Name 28 "@entryPointOutput"
+ Decorate 28(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeFunction 6(float)
+ 10: TypeVector 6(float) 4
+ 11: TypeFunction 10(fvec4)
+ 14: 6(float) Constant 1065353216
+ 18: 6(float) Constant 0
+ 19: TypeBool
+ 24: 10(fvec4) ConstantComposite 18 18 18 18
+ 27: TypePointer Output 10(fvec4)
+28(@entryPointOutput): 27(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 29: 10(fvec4) FunctionCall 12(@main()
+ Store 28(@entryPointOutput) 29
+ Return
+ FunctionEnd
+8(GetEntitySelectClip(): 6(float) Function None 7
+ 9: Label
+ ReturnValue 14
+ FunctionEnd
+ 12(@main(): 10(fvec4) Function None 11
+ 13: Label
+ 17: 6(float) FunctionCall 8(GetEntitySelectClip()
+ 20: 19(bool) FOrdLessThan 17 18
+ SelectionMerge 22 None
+ BranchConditional 20 21 22
+ 21: Label
+ Kill
+ 22: Label
+ ReturnValue 24
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.frag.out
new file mode 100644
index 00000000000..83278982b2e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.frag.out
@@ -0,0 +1,190 @@
+hlsl.clipdistance-1.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4 Function Definition: @main(vf4;f1;f1; ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:4 'pos' ( in 4-component vector of float)
+0:4 'clip' ( in float)
+0:4 'cull' ( in float)
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 add ( temp 4-component vector of float)
+0:5 add ( temp 4-component vector of float)
+0:5 'pos' ( in 4-component vector of float)
+0:5 'clip' ( in float)
+0:5 'cull' ( in float)
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:? 'clip' ( temp float)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 1-element array of float ClipDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:? 'cull' ( temp float)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 1-element array of float CullDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main(vf4;f1;f1; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp float)
+0:? 'cull' ( temp float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? 'clip' ( in 1-element array of float ClipDistance)
+0:? 'cull' ( in 1-element array of float CullDistance)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4 Function Definition: @main(vf4;f1;f1; ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:4 'pos' ( in 4-component vector of float)
+0:4 'clip' ( in float)
+0:4 'cull' ( in float)
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 add ( temp 4-component vector of float)
+0:5 add ( temp 4-component vector of float)
+0:5 'pos' ( in 4-component vector of float)
+0:5 'clip' ( in float)
+0:5 'cull' ( in float)
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:? 'clip' ( temp float)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 1-element array of float ClipDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:? 'cull' ( temp float)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 1-element array of float CullDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main(vf4;f1;f1; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp float)
+0:? 'cull' ( temp float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? 'clip' ( in 1-element array of float ClipDistance)
+0:? 'cull' ( in 1-element array of float CullDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 53
+
+ Capability Shader
+ Capability ClipDistance
+ Capability CullDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 27 34 41 45
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 14 "@main(vf4;f1;f1;"
+ Name 11 "pos"
+ Name 12 "clip"
+ Name 13 "cull"
+ Name 25 "pos"
+ Name 27 "pos"
+ Name 29 "clip"
+ Name 34 "clip"
+ Name 40 "cull"
+ Name 41 "cull"
+ Name 45 "@entryPointOutput"
+ Name 46 "param"
+ Name 48 "param"
+ Name 50 "param"
+ Decorate 27(pos) BuiltIn FragCoord
+ Decorate 34(clip) BuiltIn ClipDistance
+ Decorate 41(cull) BuiltIn CullDistance
+ Decorate 45(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypePointer Function 6(float)
+ 10: TypeFunction 7(fvec4) 8(ptr) 9(ptr) 9(ptr)
+ 26: TypePointer Input 7(fvec4)
+ 27(pos): 26(ptr) Variable Input
+ 30: TypeInt 32 0
+ 31: 30(int) Constant 1
+ 32: TypeArray 6(float) 31
+ 33: TypePointer Input 32
+ 34(clip): 33(ptr) Variable Input
+ 35: TypeInt 32 1
+ 36: 35(int) Constant 0
+ 37: TypePointer Input 6(float)
+ 41(cull): 33(ptr) Variable Input
+ 44: TypePointer Output 7(fvec4)
+45(@entryPointOutput): 44(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 25(pos): 8(ptr) Variable Function
+ 29(clip): 9(ptr) Variable Function
+ 40(cull): 9(ptr) Variable Function
+ 46(param): 8(ptr) Variable Function
+ 48(param): 9(ptr) Variable Function
+ 50(param): 9(ptr) Variable Function
+ 28: 7(fvec4) Load 27(pos)
+ Store 25(pos) 28
+ 38: 37(ptr) AccessChain 34(clip) 36
+ 39: 6(float) Load 38
+ Store 29(clip) 39
+ 42: 37(ptr) AccessChain 41(cull) 36
+ 43: 6(float) Load 42
+ Store 40(cull) 43
+ 47: 7(fvec4) Load 25(pos)
+ Store 46(param) 47
+ 49: 6(float) Load 29(clip)
+ Store 48(param) 49
+ 51: 6(float) Load 40(cull)
+ Store 50(param) 51
+ 52: 7(fvec4) FunctionCall 14(@main(vf4;f1;f1;) 46(param) 48(param) 50(param)
+ Store 45(@entryPointOutput) 52
+ Return
+ FunctionEnd
+14(@main(vf4;f1;f1;): 7(fvec4) Function None 10
+ 11(pos): 8(ptr) FunctionParameter
+ 12(clip): 9(ptr) FunctionParameter
+ 13(cull): 9(ptr) FunctionParameter
+ 15: Label
+ 16: 7(fvec4) Load 11(pos)
+ 17: 6(float) Load 12(clip)
+ 18: 7(fvec4) CompositeConstruct 17 17 17 17
+ 19: 7(fvec4) FAdd 16 18
+ 20: 6(float) Load 13(cull)
+ 21: 7(fvec4) CompositeConstruct 20 20 20 20
+ 22: 7(fvec4) FAdd 19 21
+ ReturnValue 22
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.geom.out
new file mode 100644
index 00000000000..5fd9aecb457
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.geom.out
@@ -0,0 +1,737 @@
+hlsl.clipdistance-1.geom
+Shader version: 500
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:11 Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3]; ( temp void)
+0:11 Function Parameters:
+0:11 'pos' ( in 3-element array of 4-component vector of float)
+0:11 'VertexID' ( in 3-element array of uint)
+0:11 'OutputStream' ( out structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:11 'clip' ( in 3-element array of 4-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 pos: direct index for structure ( temp 4-component vector of float)
+0:14 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:14 Constant:
+0:14 0 (const int)
+0:14 direct index ( temp 4-component vector of float)
+0:14 'pos' ( in 3-element array of 4-component vector of float)
+0:14 Constant:
+0:14 0 (const int)
+0:15 move second child to first child ( temp 2-component vector of float)
+0:15 clip: direct index for structure ( temp 2-component vector of float)
+0:15 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:15 Constant:
+0:15 1 (const int)
+0:15 vector swizzle ( temp 2-component vector of float)
+0:15 direct index ( temp 4-component vector of float)
+0:15 'clip' ( in 3-element array of 4-component vector of float)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Sequence
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1 (const int)
+0:17 Sequence
+0:17 Sequence
+0:17 move second child to first child ( temp 4-component vector of float)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:17 pos: direct index for structure ( temp 4-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:17 Constant:
+0:17 0 (const int)
+0:? Sequence
+0:17 move second child to first child ( temp float)
+0:17 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+0:17 Constant:
+0:17 0 (const int)
+0:17 direct index ( temp float)
+0:17 clip: direct index for structure ( temp 2-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 move second child to first child ( temp float)
+0:17 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+0:17 Constant:
+0:17 1 (const int)
+0:17 direct index ( temp float)
+0:17 clip: direct index for structure ( temp 2-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 1 (const int)
+0:17 EmitVertex ( temp void)
+0:11 Function Definition: main( ( temp void)
+0:11 Function Parameters:
+0:? Sequence
+0:11 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:11 move second child to first child ( temp 3-element array of uint)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? Sequence
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3]; ( temp void)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:? Linker Objects
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:? 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+
+
+Linked geometry stage:
+
+
+Shader version: 500
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:11 Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3]; ( temp void)
+0:11 Function Parameters:
+0:11 'pos' ( in 3-element array of 4-component vector of float)
+0:11 'VertexID' ( in 3-element array of uint)
+0:11 'OutputStream' ( out structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:11 'clip' ( in 3-element array of 4-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 pos: direct index for structure ( temp 4-component vector of float)
+0:14 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:14 Constant:
+0:14 0 (const int)
+0:14 direct index ( temp 4-component vector of float)
+0:14 'pos' ( in 3-element array of 4-component vector of float)
+0:14 Constant:
+0:14 0 (const int)
+0:15 move second child to first child ( temp 2-component vector of float)
+0:15 clip: direct index for structure ( temp 2-component vector of float)
+0:15 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:15 Constant:
+0:15 1 (const int)
+0:15 vector swizzle ( temp 2-component vector of float)
+0:15 direct index ( temp 4-component vector of float)
+0:15 'clip' ( in 3-element array of 4-component vector of float)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Sequence
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1 (const int)
+0:17 Sequence
+0:17 Sequence
+0:17 move second child to first child ( temp 4-component vector of float)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:17 pos: direct index for structure ( temp 4-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:17 Constant:
+0:17 0 (const int)
+0:? Sequence
+0:17 move second child to first child ( temp float)
+0:17 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+0:17 Constant:
+0:17 0 (const int)
+0:17 direct index ( temp float)
+0:17 clip: direct index for structure ( temp 2-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 move second child to first child ( temp float)
+0:17 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+0:17 Constant:
+0:17 1 (const int)
+0:17 direct index ( temp float)
+0:17 clip: direct index for structure ( temp 2-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 1 (const int)
+0:17 EmitVertex ( temp void)
+0:11 Function Definition: main( ( temp void)
+0:11 Function Parameters:
+0:? Sequence
+0:11 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:11 move second child to first child ( temp 3-element array of uint)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? Sequence
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3]; ( temp void)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip})
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:? Linker Objects
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:? 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 118
+
+ Capability Geometry
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Geometry 4 "main" 38 44 57 61 68
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 Invocations 1
+ ExecutionMode 4 OutputLineStrip
+ ExecutionMode 4 OutputVertices 3
+ Source HLSL 500
+ Name 4 "main"
+ Name 15 "S"
+ MemberName 15(S) 0 "pos"
+ MemberName 15(S) 1 "clip"
+ Name 22 "@main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3];"
+ Name 18 "pos"
+ Name 19 "VertexID"
+ Name 20 "OutputStream"
+ Name 21 "clip"
+ Name 24 "s"
+ Name 38 "OutputStream.pos"
+ Name 44 "OutputStream.clip"
+ Name 55 "pos"
+ Name 57 "pos"
+ Name 59 "VertexID"
+ Name 61 "VertexID"
+ Name 63 "clip"
+ Name 68 "clip"
+ Name 108 "OutputStream"
+ Name 109 "param"
+ Name 111 "param"
+ Name 113 "param"
+ Name 114 "param"
+ Decorate 38(OutputStream.pos) BuiltIn Position
+ Decorate 44(OutputStream.clip) BuiltIn ClipDistance
+ Decorate 57(pos) BuiltIn Position
+ Decorate 61(VertexID) Location 0
+ Decorate 68(clip) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeInt 32 0
+ 9: 8(int) Constant 3
+ 10: TypeArray 7(fvec4) 9
+ 11: TypePointer Function 10
+ 12: TypeArray 8(int) 9
+ 13: TypePointer Function 12
+ 14: TypeVector 6(float) 2
+ 15(S): TypeStruct 7(fvec4) 14(fvec2)
+ 16: TypePointer Function 15(S)
+ 17: TypeFunction 2 11(ptr) 13(ptr) 16(ptr) 11(ptr)
+ 25: TypeInt 32 1
+ 26: 25(int) Constant 0
+ 27: TypePointer Function 7(fvec4)
+ 31: 25(int) Constant 1
+ 35: TypePointer Function 14(fvec2)
+ 37: TypePointer Output 7(fvec4)
+38(OutputStream.pos): 37(ptr) Variable Output
+ 41: 8(int) Constant 2
+ 42: TypeArray 6(float) 41
+ 43: TypePointer Output 42
+44(OutputStream.clip): 43(ptr) Variable Output
+ 45: 8(int) Constant 0
+ 46: TypePointer Function 6(float)
+ 49: TypePointer Output 6(float)
+ 51: 8(int) Constant 1
+ 56: TypePointer Input 10
+ 57(pos): 56(ptr) Variable Input
+ 60: TypePointer Input 12
+ 61(VertexID): 60(ptr) Variable Input
+ 64: 8(int) Constant 4
+ 65: TypeArray 6(float) 64
+ 66: TypeArray 65 9
+ 67: TypePointer Input 66
+ 68(clip): 67(ptr) Variable Input
+ 69: TypePointer Input 6(float)
+ 76: 25(int) Constant 2
+ 80: 25(int) Constant 3
+ 4(main): 2 Function None 3
+ 5: Label
+ 55(pos): 11(ptr) Variable Function
+ 59(VertexID): 13(ptr) Variable Function
+ 63(clip): 11(ptr) Variable Function
+108(OutputStream): 16(ptr) Variable Function
+ 109(param): 11(ptr) Variable Function
+ 111(param): 13(ptr) Variable Function
+ 113(param): 16(ptr) Variable Function
+ 114(param): 11(ptr) Variable Function
+ 58: 10 Load 57(pos)
+ Store 55(pos) 58
+ 62: 12 Load 61(VertexID)
+ Store 59(VertexID) 62
+ 70: 69(ptr) AccessChain 68(clip) 26 26
+ 71: 6(float) Load 70
+ 72: 46(ptr) AccessChain 63(clip) 26 45
+ Store 72 71
+ 73: 69(ptr) AccessChain 68(clip) 26 31
+ 74: 6(float) Load 73
+ 75: 46(ptr) AccessChain 63(clip) 26 51
+ Store 75 74
+ 77: 69(ptr) AccessChain 68(clip) 26 76
+ 78: 6(float) Load 77
+ 79: 46(ptr) AccessChain 63(clip) 26 41
+ Store 79 78
+ 81: 69(ptr) AccessChain 68(clip) 26 80
+ 82: 6(float) Load 81
+ 83: 46(ptr) AccessChain 63(clip) 26 9
+ Store 83 82
+ 84: 69(ptr) AccessChain 68(clip) 31 26
+ 85: 6(float) Load 84
+ 86: 46(ptr) AccessChain 63(clip) 31 45
+ Store 86 85
+ 87: 69(ptr) AccessChain 68(clip) 31 31
+ 88: 6(float) Load 87
+ 89: 46(ptr) AccessChain 63(clip) 31 51
+ Store 89 88
+ 90: 69(ptr) AccessChain 68(clip) 31 76
+ 91: 6(float) Load 90
+ 92: 46(ptr) AccessChain 63(clip) 31 41
+ Store 92 91
+ 93: 69(ptr) AccessChain 68(clip) 31 80
+ 94: 6(float) Load 93
+ 95: 46(ptr) AccessChain 63(clip) 31 9
+ Store 95 94
+ 96: 69(ptr) AccessChain 68(clip) 76 26
+ 97: 6(float) Load 96
+ 98: 46(ptr) AccessChain 63(clip) 76 45
+ Store 98 97
+ 99: 69(ptr) AccessChain 68(clip) 76 31
+ 100: 6(float) Load 99
+ 101: 46(ptr) AccessChain 63(clip) 76 51
+ Store 101 100
+ 102: 69(ptr) AccessChain 68(clip) 76 76
+ 103: 6(float) Load 102
+ 104: 46(ptr) AccessChain 63(clip) 76 41
+ Store 104 103
+ 105: 69(ptr) AccessChain 68(clip) 76 80
+ 106: 6(float) Load 105
+ 107: 46(ptr) AccessChain 63(clip) 76 9
+ Store 107 106
+ 110: 10 Load 55(pos)
+ Store 109(param) 110
+ 112: 12 Load 59(VertexID)
+ Store 111(param) 112
+ 115: 10 Load 63(clip)
+ Store 114(param) 115
+ 116: 2 FunctionCall 22(@main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3];) 109(param) 111(param) 113(param) 114(param)
+ 117: 15(S) Load 113(param)
+ Store 108(OutputStream) 117
+ Return
+ FunctionEnd
+22(@main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3];): 2 Function None 17
+ 18(pos): 11(ptr) FunctionParameter
+ 19(VertexID): 13(ptr) FunctionParameter
+20(OutputStream): 16(ptr) FunctionParameter
+ 21(clip): 11(ptr) FunctionParameter
+ 23: Label
+ 24(s): 16(ptr) Variable Function
+ 28: 27(ptr) AccessChain 18(pos) 26
+ 29: 7(fvec4) Load 28
+ 30: 27(ptr) AccessChain 24(s) 26
+ Store 30 29
+ 32: 27(ptr) AccessChain 21(clip) 26
+ 33: 7(fvec4) Load 32
+ 34: 14(fvec2) VectorShuffle 33 33 0 1
+ 36: 35(ptr) AccessChain 24(s) 31
+ Store 36 34
+ 39: 27(ptr) AccessChain 24(s) 26
+ 40: 7(fvec4) Load 39
+ Store 38(OutputStream.pos) 40
+ 47: 46(ptr) AccessChain 24(s) 31 45
+ 48: 6(float) Load 47
+ 50: 49(ptr) AccessChain 44(OutputStream.clip) 26
+ Store 50 48
+ 52: 46(ptr) AccessChain 24(s) 31 51
+ 53: 6(float) Load 52
+ 54: 49(ptr) AccessChain 44(OutputStream.clip) 31
+ Store 54 53
+ EmitVertex
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.vert.out
new file mode 100644
index 00000000000..94b1c7f92eb
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.vert.out
@@ -0,0 +1,194 @@
+hlsl.clipdistance-1.vert
+Shader version: 500
+0:? Sequence
+0:4 Function Definition: @main(vf4;f1;f1; ( temp void)
+0:4 Function Parameters:
+0:4 'pos' ( out 4-component vector of float)
+0:4 'clip' ( out float)
+0:4 'cull' ( out float)
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:5 'pos' ( out 4-component vector of float)
+0:5 Constant:
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:6 move second child to first child ( temp float)
+0:6 'clip' ( out float)
+0:6 Constant:
+0:6 0.500000
+0:7 move second child to first child ( temp float)
+0:7 'cull' ( out float)
+0:7 Constant:
+0:7 0.510000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 Function Call: @main(vf4;f1;f1; ( temp void)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp float)
+0:? 'cull' ( temp float)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 1-element array of float ClipDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:? 'clip' ( temp float)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 1-element array of float CullDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:? 'cull' ( temp float)
+0:? Linker Objects
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'clip' ( out 1-element array of float ClipDistance)
+0:? 'cull' ( out 1-element array of float CullDistance)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:4 Function Definition: @main(vf4;f1;f1; ( temp void)
+0:4 Function Parameters:
+0:4 'pos' ( out 4-component vector of float)
+0:4 'clip' ( out float)
+0:4 'cull' ( out float)
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:5 'pos' ( out 4-component vector of float)
+0:5 Constant:
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:6 move second child to first child ( temp float)
+0:6 'clip' ( out float)
+0:6 Constant:
+0:6 0.500000
+0:7 move second child to first child ( temp float)
+0:7 'cull' ( out float)
+0:7 Constant:
+0:7 0.510000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 Function Call: @main(vf4;f1;f1; ( temp void)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp float)
+0:? 'cull' ( temp float)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 1-element array of float ClipDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:? 'clip' ( temp float)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 1-element array of float CullDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:? 'cull' ( temp float)
+0:? Linker Objects
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'clip' ( out 1-element array of float ClipDistance)
+0:? 'cull' ( out 1-element array of float CullDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 46
+
+ Capability Shader
+ Capability ClipDistance
+ Capability CullDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 31 37 43
+ Source HLSL 500
+ Name 4 "main"
+ Name 14 "@main(vf4;f1;f1;"
+ Name 11 "pos"
+ Name 12 "clip"
+ Name 13 "cull"
+ Name 20 "pos"
+ Name 21 "clip"
+ Name 22 "cull"
+ Name 23 "param"
+ Name 24 "param"
+ Name 25 "param"
+ Name 31 "pos"
+ Name 37 "clip"
+ Name 43 "cull"
+ Decorate 31(pos) BuiltIn Position
+ Decorate 37(clip) BuiltIn ClipDistance
+ Decorate 43(cull) BuiltIn CullDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypePointer Function 6(float)
+ 10: TypeFunction 2 8(ptr) 9(ptr) 9(ptr)
+ 16: 6(float) Constant 1065353216
+ 17: 7(fvec4) ConstantComposite 16 16 16 16
+ 18: 6(float) Constant 1056964608
+ 19: 6(float) Constant 1057132380
+ 30: TypePointer Output 7(fvec4)
+ 31(pos): 30(ptr) Variable Output
+ 33: TypeInt 32 0
+ 34: 33(int) Constant 1
+ 35: TypeArray 6(float) 34
+ 36: TypePointer Output 35
+ 37(clip): 36(ptr) Variable Output
+ 38: TypeInt 32 1
+ 39: 38(int) Constant 0
+ 41: TypePointer Output 6(float)
+ 43(cull): 36(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 20(pos): 8(ptr) Variable Function
+ 21(clip): 9(ptr) Variable Function
+ 22(cull): 9(ptr) Variable Function
+ 23(param): 8(ptr) Variable Function
+ 24(param): 9(ptr) Variable Function
+ 25(param): 9(ptr) Variable Function
+ 26: 2 FunctionCall 14(@main(vf4;f1;f1;) 23(param) 24(param) 25(param)
+ 27: 7(fvec4) Load 23(param)
+ Store 20(pos) 27
+ 28: 6(float) Load 24(param)
+ Store 21(clip) 28
+ 29: 6(float) Load 25(param)
+ Store 22(cull) 29
+ 32: 7(fvec4) Load 20(pos)
+ Store 31(pos) 32
+ 40: 6(float) Load 21(clip)
+ 42: 41(ptr) AccessChain 37(clip) 39
+ Store 42 40
+ 44: 6(float) Load 22(cull)
+ 45: 41(ptr) AccessChain 43(cull) 39
+ Store 45 44
+ Return
+ FunctionEnd
+14(@main(vf4;f1;f1;): 2 Function None 10
+ 11(pos): 8(ptr) FunctionParameter
+ 12(clip): 9(ptr) FunctionParameter
+ 13(cull): 9(ptr) FunctionParameter
+ 15: Label
+ Store 11(pos) 17
+ Store 12(clip) 18
+ Store 13(cull) 19
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.frag.out
new file mode 100644
index 00000000000..cbda87cb29a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.frag.out
@@ -0,0 +1,419 @@
+hlsl.clipdistance-2.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4 Function Definition: @main(vf4;vf2[2];vf2[2]; ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:4 'pos' ( in 4-component vector of float)
+0:4 'clip' ( in 2-element array of 2-component vector of float)
+0:4 'cull' ( in 2-element array of 2-component vector of float)
+0:? Sequence
+0:6 Branch: Return with expression
+0:6 add ( temp 4-component vector of float)
+0:6 add ( temp 4-component vector of float)
+0:6 'pos' ( in 4-component vector of float)
+0:6 direct index ( temp float)
+0:6 direct index ( temp 2-component vector of float)
+0:6 'clip' ( in 2-element array of 2-component vector of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0 (const int)
+0:6 direct index ( temp float)
+0:6 direct index ( temp 2-component vector of float)
+0:6 'cull' ( in 2-element array of 2-component vector of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0 (const int)
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 1 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 2 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 3 (const int)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+0:4 Constant:
+0:4 1 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+0:4 Constant:
+0:4 2 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+0:4 Constant:
+0:4 3 (const int)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main(vf4;vf2[2];vf2[2]; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4 Function Definition: @main(vf4;vf2[2];vf2[2]; ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:4 'pos' ( in 4-component vector of float)
+0:4 'clip' ( in 2-element array of 2-component vector of float)
+0:4 'cull' ( in 2-element array of 2-component vector of float)
+0:? Sequence
+0:6 Branch: Return with expression
+0:6 add ( temp 4-component vector of float)
+0:6 add ( temp 4-component vector of float)
+0:6 'pos' ( in 4-component vector of float)
+0:6 direct index ( temp float)
+0:6 direct index ( temp 2-component vector of float)
+0:6 'clip' ( in 2-element array of 2-component vector of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0 (const int)
+0:6 direct index ( temp float)
+0:6 direct index ( temp 2-component vector of float)
+0:6 'cull' ( in 2-element array of 2-component vector of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0 (const int)
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 1 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 2 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( in float ClipDistance)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 3 (const int)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+0:4 Constant:
+0:4 1 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+0:4 Constant:
+0:4 2 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( in float CullDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+0:4 Constant:
+0:4 3 (const int)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main(vf4;vf2[2];vf2[2]; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? 'clip' ( in 4-element array of float ClipDistance)
+0:? 'cull' ( in 4-element array of float CullDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 84
+
+ Capability Shader
+ Capability ClipDistance
+ Capability CullDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 37 43 62 76
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 18 "@main(vf4;vf2[2];vf2[2];"
+ Name 15 "pos"
+ Name 16 "clip"
+ Name 17 "cull"
+ Name 35 "pos"
+ Name 37 "pos"
+ Name 39 "clip"
+ Name 43 "clip"
+ Name 61 "cull"
+ Name 62 "cull"
+ Name 76 "@entryPointOutput"
+ Name 77 "param"
+ Name 79 "param"
+ Name 81 "param"
+ Decorate 37(pos) BuiltIn FragCoord
+ Decorate 43(clip) BuiltIn ClipDistance
+ Decorate 62(cull) BuiltIn CullDistance
+ Decorate 76(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeVector 6(float) 2
+ 10: TypeInt 32 0
+ 11: 10(int) Constant 2
+ 12: TypeArray 9(fvec2) 11
+ 13: TypePointer Function 12
+ 14: TypeFunction 7(fvec4) 8(ptr) 13(ptr) 13(ptr)
+ 21: TypeInt 32 1
+ 22: 21(int) Constant 0
+ 23: 10(int) Constant 0
+ 24: TypePointer Function 6(float)
+ 36: TypePointer Input 7(fvec4)
+ 37(pos): 36(ptr) Variable Input
+ 40: 10(int) Constant 4
+ 41: TypeArray 6(float) 40
+ 42: TypePointer Input 41
+ 43(clip): 42(ptr) Variable Input
+ 44: TypePointer Input 6(float)
+ 48: 21(int) Constant 1
+ 51: 10(int) Constant 1
+ 53: 21(int) Constant 2
+ 57: 21(int) Constant 3
+ 62(cull): 42(ptr) Variable Input
+ 75: TypePointer Output 7(fvec4)
+76(@entryPointOutput): 75(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 35(pos): 8(ptr) Variable Function
+ 39(clip): 13(ptr) Variable Function
+ 61(cull): 13(ptr) Variable Function
+ 77(param): 8(ptr) Variable Function
+ 79(param): 13(ptr) Variable Function
+ 81(param): 13(ptr) Variable Function
+ 38: 7(fvec4) Load 37(pos)
+ Store 35(pos) 38
+ 45: 44(ptr) AccessChain 43(clip) 22
+ 46: 6(float) Load 45
+ 47: 24(ptr) AccessChain 39(clip) 22 23
+ Store 47 46
+ 49: 44(ptr) AccessChain 43(clip) 48
+ 50: 6(float) Load 49
+ 52: 24(ptr) AccessChain 39(clip) 22 51
+ Store 52 50
+ 54: 44(ptr) AccessChain 43(clip) 53
+ 55: 6(float) Load 54
+ 56: 24(ptr) AccessChain 39(clip) 48 23
+ Store 56 55
+ 58: 44(ptr) AccessChain 43(clip) 57
+ 59: 6(float) Load 58
+ 60: 24(ptr) AccessChain 39(clip) 48 51
+ Store 60 59
+ 63: 44(ptr) AccessChain 62(cull) 22
+ 64: 6(float) Load 63
+ 65: 24(ptr) AccessChain 61(cull) 22 23
+ Store 65 64
+ 66: 44(ptr) AccessChain 62(cull) 48
+ 67: 6(float) Load 66
+ 68: 24(ptr) AccessChain 61(cull) 22 51
+ Store 68 67
+ 69: 44(ptr) AccessChain 62(cull) 53
+ 70: 6(float) Load 69
+ 71: 24(ptr) AccessChain 61(cull) 48 23
+ Store 71 70
+ 72: 44(ptr) AccessChain 62(cull) 57
+ 73: 6(float) Load 72
+ 74: 24(ptr) AccessChain 61(cull) 48 51
+ Store 74 73
+ 78: 7(fvec4) Load 35(pos)
+ Store 77(param) 78
+ 80: 12 Load 39(clip)
+ Store 79(param) 80
+ 82: 12 Load 61(cull)
+ Store 81(param) 82
+ 83: 7(fvec4) FunctionCall 18(@main(vf4;vf2[2];vf2[2];) 77(param) 79(param) 81(param)
+ Store 76(@entryPointOutput) 83
+ Return
+ FunctionEnd
+18(@main(vf4;vf2[2];vf2[2];): 7(fvec4) Function None 14
+ 15(pos): 8(ptr) FunctionParameter
+ 16(clip): 13(ptr) FunctionParameter
+ 17(cull): 13(ptr) FunctionParameter
+ 19: Label
+ 20: 7(fvec4) Load 15(pos)
+ 25: 24(ptr) AccessChain 16(clip) 22 23
+ 26: 6(float) Load 25
+ 27: 7(fvec4) CompositeConstruct 26 26 26 26
+ 28: 7(fvec4) FAdd 20 27
+ 29: 24(ptr) AccessChain 17(cull) 22 23
+ 30: 6(float) Load 29
+ 31: 7(fvec4) CompositeConstruct 30 30 30 30
+ 32: 7(fvec4) FAdd 28 31
+ ReturnValue 32
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.geom.out
new file mode 100644
index 00000000000..1b9f020ca41
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.geom.out
@@ -0,0 +1,924 @@
+hlsl.clipdistance-2.geom
+Shader version: 500
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:11 Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2]; ( temp void)
+0:11 Function Parameters:
+0:11 'pos' ( in 3-element array of 4-component vector of float)
+0:11 'VertexID' ( in 3-element array of uint)
+0:11 'OutputStream' ( out structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:11 'clip' ( in 3-element array of 2-element array of 2-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 pos: direct index for structure ( temp 4-component vector of float)
+0:14 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:14 Constant:
+0:14 0 (const int)
+0:14 direct index ( temp 4-component vector of float)
+0:14 'pos' ( in 3-element array of 4-component vector of float)
+0:14 Constant:
+0:14 0 (const int)
+0:15 move second child to first child ( temp 2-component vector of float)
+0:15 direct index ( temp 2-component vector of float)
+0:15 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:15 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:15 direct index ( temp 2-component vector of float)
+0:15 direct index ( temp 2-element array of 2-component vector of float)
+0:15 'clip' ( in 3-element array of 2-element array of 2-component vector of float)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:16 direct index ( temp 2-component vector of float)
+0:16 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:16 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:16 direct index ( temp 2-component vector of float)
+0:16 direct index ( temp 2-element array of 2-component vector of float)
+0:16 'clip' ( in 3-element array of 2-element array of 2-component vector of float)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:18 Sequence
+0:18 Sequence
+0:18 move second child to first child ( temp 4-component vector of float)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:18 pos: direct index for structure ( temp 4-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 0 (const int)
+0:? Sequence
+0:18 move second child to first child ( temp float)
+0:18 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18 Constant:
+0:18 0 (const int)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 move second child to first child ( temp float)
+0:18 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18 Constant:
+0:18 1 (const int)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 move second child to first child ( temp float)
+0:18 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18 Constant:
+0:18 2 (const int)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 move second child to first child ( temp float)
+0:18 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18 Constant:
+0:18 3 (const int)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 EmitVertex ( temp void)
+0:11 Function Definition: main( ( temp void)
+0:11 Function Parameters:
+0:? Sequence
+0:11 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:11 move second child to first child ( temp 3-element array of uint)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? Sequence
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2]; ( temp void)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:? Linker Objects
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+
+
+Linked geometry stage:
+
+
+Shader version: 500
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:11 Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2]; ( temp void)
+0:11 Function Parameters:
+0:11 'pos' ( in 3-element array of 4-component vector of float)
+0:11 'VertexID' ( in 3-element array of uint)
+0:11 'OutputStream' ( out structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:11 'clip' ( in 3-element array of 2-element array of 2-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 pos: direct index for structure ( temp 4-component vector of float)
+0:14 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:14 Constant:
+0:14 0 (const int)
+0:14 direct index ( temp 4-component vector of float)
+0:14 'pos' ( in 3-element array of 4-component vector of float)
+0:14 Constant:
+0:14 0 (const int)
+0:15 move second child to first child ( temp 2-component vector of float)
+0:15 direct index ( temp 2-component vector of float)
+0:15 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:15 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:15 direct index ( temp 2-component vector of float)
+0:15 direct index ( temp 2-element array of 2-component vector of float)
+0:15 'clip' ( in 3-element array of 2-element array of 2-component vector of float)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:16 direct index ( temp 2-component vector of float)
+0:16 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:16 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:16 direct index ( temp 2-component vector of float)
+0:16 direct index ( temp 2-element array of 2-component vector of float)
+0:16 'clip' ( in 3-element array of 2-element array of 2-component vector of float)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:18 Sequence
+0:18 Sequence
+0:18 move second child to first child ( temp 4-component vector of float)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:18 pos: direct index for structure ( temp 4-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 0 (const int)
+0:? Sequence
+0:18 move second child to first child ( temp float)
+0:18 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18 Constant:
+0:18 0 (const int)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 move second child to first child ( temp float)
+0:18 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18 Constant:
+0:18 1 (const int)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 move second child to first child ( temp float)
+0:18 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18 Constant:
+0:18 2 (const int)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 move second child to first child ( temp float)
+0:18 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18 Constant:
+0:18 3 (const int)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 EmitVertex ( temp void)
+0:11 Function Definition: main( ( temp void)
+0:11 Function Parameters:
+0:? Sequence
+0:11 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:11 move second child to first child ( temp 3-element array of uint)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? Sequence
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 direct index ( temp 2-element array of 2-component vector of float)
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( in float ClipDistance)
+0:11 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:11 Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2]; ( temp void)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp 4-component vector of float pos, temp 2-element array of 2-component vector of float clip})
+0:? 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:? Linker Objects
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:? 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 128
+
+ Capability Geometry
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Geometry 4 "main" 44 50 71 75 80
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 Invocations 1
+ ExecutionMode 4 OutputLineStrip
+ ExecutionMode 4 OutputVertices 3
+ Source HLSL 500
+ Name 4 "main"
+ Name 17 "S"
+ MemberName 17(S) 0 "pos"
+ MemberName 17(S) 1 "clip"
+ Name 26 "@main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2];"
+ Name 22 "pos"
+ Name 23 "VertexID"
+ Name 24 "OutputStream"
+ Name 25 "clip"
+ Name 28 "s"
+ Name 44 "OutputStream.pos"
+ Name 50 "OutputStream.clip"
+ Name 69 "pos"
+ Name 71 "pos"
+ Name 73 "VertexID"
+ Name 75 "VertexID"
+ Name 77 "clip"
+ Name 80 "clip"
+ Name 118 "OutputStream"
+ Name 119 "param"
+ Name 121 "param"
+ Name 123 "param"
+ Name 124 "param"
+ Decorate 44(OutputStream.pos) BuiltIn Position
+ Decorate 50(OutputStream.clip) BuiltIn ClipDistance
+ Decorate 71(pos) BuiltIn Position
+ Decorate 75(VertexID) Location 0
+ Decorate 80(clip) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeInt 32 0
+ 9: 8(int) Constant 3
+ 10: TypeArray 7(fvec4) 9
+ 11: TypePointer Function 10
+ 12: TypeArray 8(int) 9
+ 13: TypePointer Function 12
+ 14: TypeVector 6(float) 2
+ 15: 8(int) Constant 2
+ 16: TypeArray 14(fvec2) 15
+ 17(S): TypeStruct 7(fvec4) 16
+ 18: TypePointer Function 17(S)
+ 19: TypeArray 16 9
+ 20: TypePointer Function 19
+ 21: TypeFunction 2 11(ptr) 13(ptr) 18(ptr) 20(ptr)
+ 29: TypeInt 32 1
+ 30: 29(int) Constant 0
+ 31: TypePointer Function 7(fvec4)
+ 35: 29(int) Constant 1
+ 36: TypePointer Function 14(fvec2)
+ 43: TypePointer Output 7(fvec4)
+44(OutputStream.pos): 43(ptr) Variable Output
+ 47: 8(int) Constant 4
+ 48: TypeArray 6(float) 47
+ 49: TypePointer Output 48
+50(OutputStream.clip): 49(ptr) Variable Output
+ 51: 8(int) Constant 0
+ 52: TypePointer Function 6(float)
+ 55: TypePointer Output 6(float)
+ 57: 8(int) Constant 1
+ 61: 29(int) Constant 2
+ 65: 29(int) Constant 3
+ 70: TypePointer Input 10
+ 71(pos): 70(ptr) Variable Input
+ 74: TypePointer Input 12
+ 75(VertexID): 74(ptr) Variable Input
+ 78: TypeArray 48 9
+ 79: TypePointer Input 78
+ 80(clip): 79(ptr) Variable Input
+ 81: TypePointer Input 6(float)
+ 4(main): 2 Function None 3
+ 5: Label
+ 69(pos): 11(ptr) Variable Function
+ 73(VertexID): 13(ptr) Variable Function
+ 77(clip): 20(ptr) Variable Function
+118(OutputStream): 18(ptr) Variable Function
+ 119(param): 11(ptr) Variable Function
+ 121(param): 13(ptr) Variable Function
+ 123(param): 18(ptr) Variable Function
+ 124(param): 20(ptr) Variable Function
+ 72: 10 Load 71(pos)
+ Store 69(pos) 72
+ 76: 12 Load 75(VertexID)
+ Store 73(VertexID) 76
+ 82: 81(ptr) AccessChain 80(clip) 30 30
+ 83: 6(float) Load 82
+ 84: 52(ptr) AccessChain 77(clip) 30 30 51
+ Store 84 83
+ 85: 81(ptr) AccessChain 80(clip) 30 35
+ 86: 6(float) Load 85
+ 87: 52(ptr) AccessChain 77(clip) 30 30 57
+ Store 87 86
+ 88: 81(ptr) AccessChain 80(clip) 30 61
+ 89: 6(float) Load 88
+ 90: 52(ptr) AccessChain 77(clip) 30 35 51
+ Store 90 89
+ 91: 81(ptr) AccessChain 80(clip) 30 65
+ 92: 6(float) Load 91
+ 93: 52(ptr) AccessChain 77(clip) 30 35 57
+ Store 93 92
+ 94: 81(ptr) AccessChain 80(clip) 35 30
+ 95: 6(float) Load 94
+ 96: 52(ptr) AccessChain 77(clip) 35 30 51
+ Store 96 95
+ 97: 81(ptr) AccessChain 80(clip) 35 35
+ 98: 6(float) Load 97
+ 99: 52(ptr) AccessChain 77(clip) 35 30 57
+ Store 99 98
+ 100: 81(ptr) AccessChain 80(clip) 35 61
+ 101: 6(float) Load 100
+ 102: 52(ptr) AccessChain 77(clip) 35 35 51
+ Store 102 101
+ 103: 81(ptr) AccessChain 80(clip) 35 65
+ 104: 6(float) Load 103
+ 105: 52(ptr) AccessChain 77(clip) 35 35 57
+ Store 105 104
+ 106: 81(ptr) AccessChain 80(clip) 61 30
+ 107: 6(float) Load 106
+ 108: 52(ptr) AccessChain 77(clip) 61 30 51
+ Store 108 107
+ 109: 81(ptr) AccessChain 80(clip) 61 35
+ 110: 6(float) Load 109
+ 111: 52(ptr) AccessChain 77(clip) 61 30 57
+ Store 111 110
+ 112: 81(ptr) AccessChain 80(clip) 61 61
+ 113: 6(float) Load 112
+ 114: 52(ptr) AccessChain 77(clip) 61 35 51
+ Store 114 113
+ 115: 81(ptr) AccessChain 80(clip) 61 65
+ 116: 6(float) Load 115
+ 117: 52(ptr) AccessChain 77(clip) 61 35 57
+ Store 117 116
+ 120: 10 Load 69(pos)
+ Store 119(param) 120
+ 122: 12 Load 73(VertexID)
+ Store 121(param) 122
+ 125: 19 Load 77(clip)
+ Store 124(param) 125
+ 126: 2 FunctionCall 26(@main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2];) 119(param) 121(param) 123(param) 124(param)
+ 127: 17(S) Load 123(param)
+ Store 118(OutputStream) 127
+ Return
+ FunctionEnd
+26(@main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2];): 2 Function None 21
+ 22(pos): 11(ptr) FunctionParameter
+ 23(VertexID): 13(ptr) FunctionParameter
+24(OutputStream): 18(ptr) FunctionParameter
+ 25(clip): 20(ptr) FunctionParameter
+ 27: Label
+ 28(s): 18(ptr) Variable Function
+ 32: 31(ptr) AccessChain 22(pos) 30
+ 33: 7(fvec4) Load 32
+ 34: 31(ptr) AccessChain 28(s) 30
+ Store 34 33
+ 37: 36(ptr) AccessChain 25(clip) 30 30
+ 38: 14(fvec2) Load 37
+ 39: 36(ptr) AccessChain 28(s) 35 30
+ Store 39 38
+ 40: 36(ptr) AccessChain 25(clip) 30 35
+ 41: 14(fvec2) Load 40
+ 42: 36(ptr) AccessChain 28(s) 35 35
+ Store 42 41
+ 45: 31(ptr) AccessChain 28(s) 30
+ 46: 7(fvec4) Load 45
+ Store 44(OutputStream.pos) 46
+ 53: 52(ptr) AccessChain 28(s) 35 30 51
+ 54: 6(float) Load 53
+ 56: 55(ptr) AccessChain 50(OutputStream.clip) 30
+ Store 56 54
+ 58: 52(ptr) AccessChain 28(s) 35 30 57
+ 59: 6(float) Load 58
+ 60: 55(ptr) AccessChain 50(OutputStream.clip) 35
+ Store 60 59
+ 62: 52(ptr) AccessChain 28(s) 35 35 51
+ 63: 6(float) Load 62
+ 64: 55(ptr) AccessChain 50(OutputStream.clip) 61
+ Store 64 63
+ 66: 52(ptr) AccessChain 28(s) 35 35 57
+ 67: 6(float) Load 66
+ 68: 55(ptr) AccessChain 50(OutputStream.clip) 65
+ Store 68 67
+ EmitVertex
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.vert.out
new file mode 100644
index 00000000000..9afe2eda4cc
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.vert.out
@@ -0,0 +1,561 @@
+hlsl.clipdistance-2.vert
+Shader version: 500
+0:? Sequence
+0:4 Function Definition: @main(vf4;vf2[2];vf2[2]; ( temp void)
+0:4 Function Parameters:
+0:4 'pos' ( out 4-component vector of float)
+0:4 'clip' ( out 2-element array of 2-component vector of float)
+0:4 'cull' ( out 2-element array of 2-component vector of float)
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:5 'pos' ( out 4-component vector of float)
+0:5 Constant:
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:6 direct index ( temp 2-component vector of float)
+0:6 'clip' ( out 2-element array of 2-component vector of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0.500000
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 'clip' ( out 2-element array of 2-component vector of float)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0.600000
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 direct index ( temp 2-component vector of float)
+0:8 'clip' ( out 2-element array of 2-component vector of float)
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 0.700000
+0:9 move second child to first child ( temp float)
+0:9 direct index ( temp float)
+0:9 direct index ( temp 2-component vector of float)
+0:9 'clip' ( out 2-element array of 2-component vector of float)
+0:9 Constant:
+0:9 1 (const int)
+0:9 Constant:
+0:9 1 (const int)
+0:9 Constant:
+0:9 0.800000
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 'cull' ( out 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0.525000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 2-component vector of float)
+0:12 'cull' ( out 2-element array of 2-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0.625000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:13 'cull' ( out 2-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0.725000
+0:14 move second child to first child ( temp float)
+0:14 direct index ( temp float)
+0:14 direct index ( temp 2-component vector of float)
+0:14 'cull' ( out 2-element array of 2-component vector of float)
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 0.825000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 Function Call: @main(vf4;vf2[2];vf2[2]; ( temp void)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 2 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 3 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+0:4 Constant:
+0:4 2 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+0:4 Constant:
+0:4 3 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:? Linker Objects
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:4 Function Definition: @main(vf4;vf2[2];vf2[2]; ( temp void)
+0:4 Function Parameters:
+0:4 'pos' ( out 4-component vector of float)
+0:4 'clip' ( out 2-element array of 2-component vector of float)
+0:4 'cull' ( out 2-element array of 2-component vector of float)
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:5 'pos' ( out 4-component vector of float)
+0:5 Constant:
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:6 direct index ( temp 2-component vector of float)
+0:6 'clip' ( out 2-element array of 2-component vector of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0.500000
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 'clip' ( out 2-element array of 2-component vector of float)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0.600000
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 direct index ( temp 2-component vector of float)
+0:8 'clip' ( out 2-element array of 2-component vector of float)
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 0.700000
+0:9 move second child to first child ( temp float)
+0:9 direct index ( temp float)
+0:9 direct index ( temp 2-component vector of float)
+0:9 'clip' ( out 2-element array of 2-component vector of float)
+0:9 Constant:
+0:9 1 (const int)
+0:9 Constant:
+0:9 1 (const int)
+0:9 Constant:
+0:9 0.800000
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 'cull' ( out 2-element array of 2-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0.525000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 2-component vector of float)
+0:12 'cull' ( out 2-element array of 2-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0.625000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:13 'cull' ( out 2-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0.725000
+0:14 move second child to first child ( temp float)
+0:14 direct index ( temp float)
+0:14 direct index ( temp 2-component vector of float)
+0:14 'cull' ( out 2-element array of 2-component vector of float)
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 0.825000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 Function Call: @main(vf4;vf2[2];vf2[2]; ( temp void)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 2 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float ClipDistance)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:4 Constant:
+0:4 3 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'clip' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+0:4 Constant:
+0:4 0 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+0:4 Constant:
+0:4 1 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+0:4 Constant:
+0:4 2 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 move second child to first child ( temp float)
+0:4 direct index ( out float CullDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+0:4 Constant:
+0:4 3 (const int)
+0:4 direct index ( temp float)
+0:4 direct index ( temp 2-component vector of float)
+0:? 'cull' ( temp 2-element array of 2-component vector of float)
+0:4 Constant:
+0:4 1 (const int)
+0:4 Constant:
+0:4 1 (const int)
+0:? Linker Objects
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'clip' ( out 4-element array of float ClipDistance)
+0:? 'cull' ( out 4-element array of float CullDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 89
+
+ Capability Shader
+ Capability ClipDistance
+ Capability CullDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 55 60 76
+ Source HLSL 500
+ Name 4 "main"
+ Name 18 "@main(vf4;vf2[2];vf2[2];"
+ Name 15 "pos"
+ Name 16 "clip"
+ Name 17 "cull"
+ Name 44 "pos"
+ Name 45 "clip"
+ Name 46 "cull"
+ Name 47 "param"
+ Name 48 "param"
+ Name 49 "param"
+ Name 55 "pos"
+ Name 60 "clip"
+ Name 76 "cull"
+ Decorate 55(pos) BuiltIn Position
+ Decorate 60(clip) BuiltIn ClipDistance
+ Decorate 76(cull) BuiltIn CullDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeVector 6(float) 2
+ 10: TypeInt 32 0
+ 11: 10(int) Constant 2
+ 12: TypeArray 9(fvec2) 11
+ 13: TypePointer Function 12
+ 14: TypeFunction 2 8(ptr) 13(ptr) 13(ptr)
+ 20: 6(float) Constant 1065353216
+ 21: 7(fvec4) ConstantComposite 20 20 20 20
+ 22: TypeInt 32 1
+ 23: 22(int) Constant 0
+ 24: 6(float) Constant 1056964608
+ 25: 10(int) Constant 0
+ 26: TypePointer Function 6(float)
+ 28: 6(float) Constant 1058642330
+ 29: 10(int) Constant 1
+ 31: 22(int) Constant 1
+ 32: 6(float) Constant 1060320051
+ 34: 6(float) Constant 1061997773
+ 36: 6(float) Constant 1057384038
+ 38: 6(float) Constant 1059061760
+ 40: 6(float) Constant 1060739482
+ 42: 6(float) Constant 1062417203
+ 54: TypePointer Output 7(fvec4)
+ 55(pos): 54(ptr) Variable Output
+ 57: 10(int) Constant 4
+ 58: TypeArray 6(float) 57
+ 59: TypePointer Output 58
+ 60(clip): 59(ptr) Variable Output
+ 63: TypePointer Output 6(float)
+ 68: 22(int) Constant 2
+ 72: 22(int) Constant 3
+ 76(cull): 59(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 44(pos): 8(ptr) Variable Function
+ 45(clip): 13(ptr) Variable Function
+ 46(cull): 13(ptr) Variable Function
+ 47(param): 8(ptr) Variable Function
+ 48(param): 13(ptr) Variable Function
+ 49(param): 13(ptr) Variable Function
+ 50: 2 FunctionCall 18(@main(vf4;vf2[2];vf2[2];) 47(param) 48(param) 49(param)
+ 51: 7(fvec4) Load 47(param)
+ Store 44(pos) 51
+ 52: 12 Load 48(param)
+ Store 45(clip) 52
+ 53: 12 Load 49(param)
+ Store 46(cull) 53
+ 56: 7(fvec4) Load 44(pos)
+ Store 55(pos) 56
+ 61: 26(ptr) AccessChain 45(clip) 23 25
+ 62: 6(float) Load 61
+ 64: 63(ptr) AccessChain 60(clip) 23
+ Store 64 62
+ 65: 26(ptr) AccessChain 45(clip) 23 29
+ 66: 6(float) Load 65
+ 67: 63(ptr) AccessChain 60(clip) 31
+ Store 67 66
+ 69: 26(ptr) AccessChain 45(clip) 31 25
+ 70: 6(float) Load 69
+ 71: 63(ptr) AccessChain 60(clip) 68
+ Store 71 70
+ 73: 26(ptr) AccessChain 45(clip) 31 29
+ 74: 6(float) Load 73
+ 75: 63(ptr) AccessChain 60(clip) 72
+ Store 75 74
+ 77: 26(ptr) AccessChain 46(cull) 23 25
+ 78: 6(float) Load 77
+ 79: 63(ptr) AccessChain 76(cull) 23
+ Store 79 78
+ 80: 26(ptr) AccessChain 46(cull) 23 29
+ 81: 6(float) Load 80
+ 82: 63(ptr) AccessChain 76(cull) 31
+ Store 82 81
+ 83: 26(ptr) AccessChain 46(cull) 31 25
+ 84: 6(float) Load 83
+ 85: 63(ptr) AccessChain 76(cull) 68
+ Store 85 84
+ 86: 26(ptr) AccessChain 46(cull) 31 29
+ 87: 6(float) Load 86
+ 88: 63(ptr) AccessChain 76(cull) 72
+ Store 88 87
+ Return
+ FunctionEnd
+18(@main(vf4;vf2[2];vf2[2];): 2 Function None 14
+ 15(pos): 8(ptr) FunctionParameter
+ 16(clip): 13(ptr) FunctionParameter
+ 17(cull): 13(ptr) FunctionParameter
+ 19: Label
+ Store 15(pos) 21
+ 27: 26(ptr) AccessChain 16(clip) 23 25
+ Store 27 24
+ 30: 26(ptr) AccessChain 16(clip) 23 29
+ Store 30 28
+ 33: 26(ptr) AccessChain 16(clip) 31 25
+ Store 33 32
+ 35: 26(ptr) AccessChain 16(clip) 31 29
+ Store 35 34
+ 37: 26(ptr) AccessChain 17(cull) 23 25
+ Store 37 36
+ 39: 26(ptr) AccessChain 17(cull) 23 29
+ Store 39 38
+ 41: 26(ptr) AccessChain 17(cull) 31 25
+ Store 41 40
+ 43: 26(ptr) AccessChain 17(cull) 31 29
+ Store 43 42
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.frag.out
new file mode 100644
index 00000000000..1faa87e8a21
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.frag.out
@@ -0,0 +1,190 @@
+hlsl.clipdistance-3.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4 Function Definition: @main(vf4;f1[2];f1[2]; ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:4 'pos' ( in 4-component vector of float)
+0:4 'clip' ( in 2-element array of float)
+0:4 'cull' ( in 2-element array of float)
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 add ( temp 4-component vector of float)
+0:5 add ( temp 4-component vector of float)
+0:5 'pos' ( in 4-component vector of float)
+0:5 direct index ( temp float)
+0:5 'clip' ( in 2-element array of float)
+0:5 Constant:
+0:5 0 (const int)
+0:5 direct index ( temp float)
+0:5 'cull' ( in 2-element array of float)
+0:5 Constant:
+0:5 0 (const int)
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:4 move second child to first child ( temp 2-element array of float)
+0:? 'clip' ( temp 2-element array of float)
+0:? 'clip' ( in 2-element array of float ClipDistance)
+0:? Sequence
+0:4 move second child to first child ( temp 2-element array of float)
+0:? 'cull' ( temp 2-element array of float)
+0:? 'cull' ( in 2-element array of float CullDistance)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main(vf4;f1[2];f1[2]; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp 2-element array of float)
+0:? 'cull' ( temp 2-element array of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? 'clip' ( in 2-element array of float ClipDistance)
+0:? 'cull' ( in 2-element array of float CullDistance)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4 Function Definition: @main(vf4;f1[2];f1[2]; ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:4 'pos' ( in 4-component vector of float)
+0:4 'clip' ( in 2-element array of float)
+0:4 'cull' ( in 2-element array of float)
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 add ( temp 4-component vector of float)
+0:5 add ( temp 4-component vector of float)
+0:5 'pos' ( in 4-component vector of float)
+0:5 direct index ( temp float)
+0:5 'clip' ( in 2-element array of float)
+0:5 Constant:
+0:5 0 (const int)
+0:5 direct index ( temp float)
+0:5 'cull' ( in 2-element array of float)
+0:5 Constant:
+0:5 0 (const int)
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:4 move second child to first child ( temp 2-element array of float)
+0:? 'clip' ( temp 2-element array of float)
+0:? 'clip' ( in 2-element array of float ClipDistance)
+0:? Sequence
+0:4 move second child to first child ( temp 2-element array of float)
+0:? 'cull' ( temp 2-element array of float)
+0:? 'cull' ( in 2-element array of float CullDistance)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main(vf4;f1[2];f1[2]; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp 2-element array of float)
+0:? 'cull' ( temp 2-element array of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:? 'clip' ( in 2-element array of float ClipDistance)
+0:? 'cull' ( in 2-element array of float CullDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 53
+
+ Capability Shader
+ Capability ClipDistance
+ Capability CullDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 35 39 42 45
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 17 "@main(vf4;f1[2];f1[2];"
+ Name 14 "pos"
+ Name 15 "clip"
+ Name 16 "cull"
+ Name 33 "pos"
+ Name 35 "pos"
+ Name 37 "clip"
+ Name 39 "clip"
+ Name 41 "cull"
+ Name 42 "cull"
+ Name 45 "@entryPointOutput"
+ Name 46 "param"
+ Name 48 "param"
+ Name 50 "param"
+ Decorate 35(pos) BuiltIn FragCoord
+ Decorate 39(clip) BuiltIn ClipDistance
+ Decorate 42(cull) BuiltIn CullDistance
+ Decorate 45(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 2
+ 11: TypeArray 6(float) 10
+ 12: TypePointer Function 11
+ 13: TypeFunction 7(fvec4) 8(ptr) 12(ptr) 12(ptr)
+ 20: TypeInt 32 1
+ 21: 20(int) Constant 0
+ 22: TypePointer Function 6(float)
+ 34: TypePointer Input 7(fvec4)
+ 35(pos): 34(ptr) Variable Input
+ 38: TypePointer Input 11
+ 39(clip): 38(ptr) Variable Input
+ 42(cull): 38(ptr) Variable Input
+ 44: TypePointer Output 7(fvec4)
+45(@entryPointOutput): 44(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 33(pos): 8(ptr) Variable Function
+ 37(clip): 12(ptr) Variable Function
+ 41(cull): 12(ptr) Variable Function
+ 46(param): 8(ptr) Variable Function
+ 48(param): 12(ptr) Variable Function
+ 50(param): 12(ptr) Variable Function
+ 36: 7(fvec4) Load 35(pos)
+ Store 33(pos) 36
+ 40: 11 Load 39(clip)
+ Store 37(clip) 40
+ 43: 11 Load 42(cull)
+ Store 41(cull) 43
+ 47: 7(fvec4) Load 33(pos)
+ Store 46(param) 47
+ 49: 11 Load 37(clip)
+ Store 48(param) 49
+ 51: 11 Load 41(cull)
+ Store 50(param) 51
+ 52: 7(fvec4) FunctionCall 17(@main(vf4;f1[2];f1[2];) 46(param) 48(param) 50(param)
+ Store 45(@entryPointOutput) 52
+ Return
+ FunctionEnd
+17(@main(vf4;f1[2];f1[2];): 7(fvec4) Function None 13
+ 14(pos): 8(ptr) FunctionParameter
+ 15(clip): 12(ptr) FunctionParameter
+ 16(cull): 12(ptr) FunctionParameter
+ 18: Label
+ 19: 7(fvec4) Load 14(pos)
+ 23: 22(ptr) AccessChain 15(clip) 21
+ 24: 6(float) Load 23
+ 25: 7(fvec4) CompositeConstruct 24 24 24 24
+ 26: 7(fvec4) FAdd 19 25
+ 27: 22(ptr) AccessChain 16(cull) 21
+ 28: 6(float) Load 27
+ 29: 7(fvec4) CompositeConstruct 28 28 28 28
+ 30: 7(fvec4) FAdd 26 29
+ ReturnValue 30
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.geom.out
new file mode 100644
index 00000000000..c99a9576596
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.geom.out
@@ -0,0 +1,830 @@
+hlsl.clipdistance-3.geom
+Shader version: 500
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:12 Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3]; ( temp void)
+0:12 Function Parameters:
+0:12 'pos' ( in 3-element array of 4-component vector of float)
+0:12 'VertexID' ( in 3-element array of uint)
+0:12 'OutputStream' ( out structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:12 'clip' ( in 3-element array of 4-component vector of float)
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 pos: direct index for structure ( temp 4-component vector of float)
+0:15 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:15 Constant:
+0:15 0 (const int)
+0:15 direct index ( temp 4-component vector of float)
+0:15 'pos' ( in 3-element array of 4-component vector of float)
+0:15 Constant:
+0:15 0 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:16 clip0: direct index for structure ( temp 2-component vector of float)
+0:16 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:16 Constant:
+0:16 1 (const int)
+0:16 vector swizzle ( temp 2-component vector of float)
+0:16 direct index ( temp 4-component vector of float)
+0:16 'clip' ( in 3-element array of 4-component vector of float)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Sequence
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:17 move second child to first child ( temp 2-component vector of float)
+0:17 clip1: direct index for structure ( temp 2-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:17 Constant:
+0:17 2 (const int)
+0:17 vector swizzle ( temp 2-component vector of float)
+0:17 direct index ( temp 4-component vector of float)
+0:17 'clip' ( in 3-element array of 4-component vector of float)
+0:17 Constant:
+0:17 0 (const int)
+0:17 Sequence
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 3 (const int)
+0:19 Sequence
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of float)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:19 pos: direct index for structure ( temp 4-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 0 (const int)
+0:? Sequence
+0:19 move second child to first child ( temp float)
+0:19 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19 Constant:
+0:19 0 (const int)
+0:19 direct index ( temp float)
+0:19 clip0: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19 Constant:
+0:19 1 (const int)
+0:19 direct index ( temp float)
+0:19 clip0: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:? Sequence
+0:19 move second child to first child ( temp float)
+0:19 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19 Constant:
+0:19 2 (const int)
+0:19 direct index ( temp float)
+0:19 clip1: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19 Constant:
+0:19 3 (const int)
+0:19 direct index ( temp float)
+0:19 clip1: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 EmitVertex ( temp void)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:12 move second child to first child ( temp 3-element array of uint)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? Sequence
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3]; ( temp void)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:? Linker Objects
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+
+
+Linked geometry stage:
+
+
+Shader version: 500
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:12 Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3]; ( temp void)
+0:12 Function Parameters:
+0:12 'pos' ( in 3-element array of 4-component vector of float)
+0:12 'VertexID' ( in 3-element array of uint)
+0:12 'OutputStream' ( out structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:12 'clip' ( in 3-element array of 4-component vector of float)
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 pos: direct index for structure ( temp 4-component vector of float)
+0:15 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:15 Constant:
+0:15 0 (const int)
+0:15 direct index ( temp 4-component vector of float)
+0:15 'pos' ( in 3-element array of 4-component vector of float)
+0:15 Constant:
+0:15 0 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:16 clip0: direct index for structure ( temp 2-component vector of float)
+0:16 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:16 Constant:
+0:16 1 (const int)
+0:16 vector swizzle ( temp 2-component vector of float)
+0:16 direct index ( temp 4-component vector of float)
+0:16 'clip' ( in 3-element array of 4-component vector of float)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Sequence
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:17 move second child to first child ( temp 2-component vector of float)
+0:17 clip1: direct index for structure ( temp 2-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:17 Constant:
+0:17 2 (const int)
+0:17 vector swizzle ( temp 2-component vector of float)
+0:17 direct index ( temp 4-component vector of float)
+0:17 'clip' ( in 3-element array of 4-component vector of float)
+0:17 Constant:
+0:17 0 (const int)
+0:17 Sequence
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 3 (const int)
+0:19 Sequence
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of float)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:19 pos: direct index for structure ( temp 4-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 0 (const int)
+0:? Sequence
+0:19 move second child to first child ( temp float)
+0:19 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19 Constant:
+0:19 0 (const int)
+0:19 direct index ( temp float)
+0:19 clip0: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19 Constant:
+0:19 1 (const int)
+0:19 direct index ( temp float)
+0:19 clip0: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:? Sequence
+0:19 move second child to first child ( temp float)
+0:19 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19 Constant:
+0:19 2 (const int)
+0:19 direct index ( temp float)
+0:19 clip1: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19 Constant:
+0:19 3 (const int)
+0:19 direct index ( temp float)
+0:19 clip1: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 EmitVertex ( temp void)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:12 move second child to first child ( temp 3-element array of uint)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? Sequence
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 2 (const int)
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 direct index ( temp 4-component vector of float)
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 direct index ( in float ClipDistance)
+0:12 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12 Constant:
+0:12 2 (const int)
+0:12 Constant:
+0:12 3 (const int)
+0:12 Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3]; ( temp void)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:? 'clip' ( temp 3-element array of 4-component vector of float)
+0:? Linker Objects
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:? 'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 127
+
+ Capability Geometry
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Geometry 4 "main" 43 49 69 73 78
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 Invocations 1
+ ExecutionMode 4 OutputLineStrip
+ ExecutionMode 4 OutputVertices 3
+ Source HLSL 500
+ Name 4 "main"
+ Name 15 "S"
+ MemberName 15(S) 0 "pos"
+ MemberName 15(S) 1 "clip0"
+ MemberName 15(S) 2 "clip1"
+ Name 22 "@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3];"
+ Name 18 "pos"
+ Name 19 "VertexID"
+ Name 20 "OutputStream"
+ Name 21 "clip"
+ Name 24 "s"
+ Name 43 "OutputStream.pos"
+ Name 49 "OutputStream.clip1"
+ Name 67 "pos"
+ Name 69 "pos"
+ Name 71 "VertexID"
+ Name 73 "VertexID"
+ Name 75 "clip"
+ Name 78 "clip"
+ Name 117 "OutputStream"
+ Name 118 "param"
+ Name 120 "param"
+ Name 122 "param"
+ Name 123 "param"
+ Decorate 43(OutputStream.pos) BuiltIn Position
+ Decorate 49(OutputStream.clip1) BuiltIn ClipDistance
+ Decorate 69(pos) BuiltIn Position
+ Decorate 73(VertexID) Location 0
+ Decorate 78(clip) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeInt 32 0
+ 9: 8(int) Constant 3
+ 10: TypeArray 7(fvec4) 9
+ 11: TypePointer Function 10
+ 12: TypeArray 8(int) 9
+ 13: TypePointer Function 12
+ 14: TypeVector 6(float) 2
+ 15(S): TypeStruct 7(fvec4) 14(fvec2) 14(fvec2)
+ 16: TypePointer Function 15(S)
+ 17: TypeFunction 2 11(ptr) 13(ptr) 16(ptr) 11(ptr)
+ 25: TypeInt 32 1
+ 26: 25(int) Constant 0
+ 27: TypePointer Function 7(fvec4)
+ 31: 25(int) Constant 1
+ 35: TypePointer Function 14(fvec2)
+ 37: 25(int) Constant 2
+ 42: TypePointer Output 7(fvec4)
+43(OutputStream.pos): 42(ptr) Variable Output
+ 46: 8(int) Constant 4
+ 47: TypeArray 6(float) 46
+ 48: TypePointer Output 47
+49(OutputStream.clip1): 48(ptr) Variable Output
+ 50: 8(int) Constant 0
+ 51: TypePointer Function 6(float)
+ 54: TypePointer Output 6(float)
+ 56: 8(int) Constant 1
+ 63: 25(int) Constant 3
+ 68: TypePointer Input 10
+ 69(pos): 68(ptr) Variable Input
+ 72: TypePointer Input 12
+ 73(VertexID): 72(ptr) Variable Input
+ 76: TypeArray 47 9
+ 77: TypePointer Input 76
+ 78(clip): 77(ptr) Variable Input
+ 79: TypePointer Input 6(float)
+ 88: 8(int) Constant 2
+ 4(main): 2 Function None 3
+ 5: Label
+ 67(pos): 11(ptr) Variable Function
+ 71(VertexID): 13(ptr) Variable Function
+ 75(clip): 11(ptr) Variable Function
+117(OutputStream): 16(ptr) Variable Function
+ 118(param): 11(ptr) Variable Function
+ 120(param): 13(ptr) Variable Function
+ 122(param): 16(ptr) Variable Function
+ 123(param): 11(ptr) Variable Function
+ 70: 10 Load 69(pos)
+ Store 67(pos) 70
+ 74: 12 Load 73(VertexID)
+ Store 71(VertexID) 74
+ 80: 79(ptr) AccessChain 78(clip) 26 26
+ 81: 6(float) Load 80
+ 82: 51(ptr) AccessChain 75(clip) 26 50
+ Store 82 81
+ 83: 79(ptr) AccessChain 78(clip) 26 31
+ 84: 6(float) Load 83
+ 85: 51(ptr) AccessChain 75(clip) 26 56
+ Store 85 84
+ 86: 79(ptr) AccessChain 78(clip) 26 37
+ 87: 6(float) Load 86
+ 89: 51(ptr) AccessChain 75(clip) 26 88
+ Store 89 87
+ 90: 79(ptr) AccessChain 78(clip) 26 63
+ 91: 6(float) Load 90
+ 92: 51(ptr) AccessChain 75(clip) 26 9
+ Store 92 91
+ 93: 79(ptr) AccessChain 78(clip) 31 26
+ 94: 6(float) Load 93
+ 95: 51(ptr) AccessChain 75(clip) 31 50
+ Store 95 94
+ 96: 79(ptr) AccessChain 78(clip) 31 31
+ 97: 6(float) Load 96
+ 98: 51(ptr) AccessChain 75(clip) 31 56
+ Store 98 97
+ 99: 79(ptr) AccessChain 78(clip) 31 37
+ 100: 6(float) Load 99
+ 101: 51(ptr) AccessChain 75(clip) 31 88
+ Store 101 100
+ 102: 79(ptr) AccessChain 78(clip) 31 63
+ 103: 6(float) Load 102
+ 104: 51(ptr) AccessChain 75(clip) 31 9
+ Store 104 103
+ 105: 79(ptr) AccessChain 78(clip) 37 26
+ 106: 6(float) Load 105
+ 107: 51(ptr) AccessChain 75(clip) 37 50
+ Store 107 106
+ 108: 79(ptr) AccessChain 78(clip) 37 31
+ 109: 6(float) Load 108
+ 110: 51(ptr) AccessChain 75(clip) 37 56
+ Store 110 109
+ 111: 79(ptr) AccessChain 78(clip) 37 37
+ 112: 6(float) Load 111
+ 113: 51(ptr) AccessChain 75(clip) 37 88
+ Store 113 112
+ 114: 79(ptr) AccessChain 78(clip) 37 63
+ 115: 6(float) Load 114
+ 116: 51(ptr) AccessChain 75(clip) 37 9
+ Store 116 115
+ 119: 10 Load 67(pos)
+ Store 118(param) 119
+ 121: 12 Load 71(VertexID)
+ Store 120(param) 121
+ 124: 10 Load 75(clip)
+ Store 123(param) 124
+ 125: 2 FunctionCall 22(@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3];) 118(param) 120(param) 122(param) 123(param)
+ 126: 15(S) Load 122(param)
+ Store 117(OutputStream) 126
+ Return
+ FunctionEnd
+22(@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3];): 2 Function None 17
+ 18(pos): 11(ptr) FunctionParameter
+ 19(VertexID): 13(ptr) FunctionParameter
+20(OutputStream): 16(ptr) FunctionParameter
+ 21(clip): 11(ptr) FunctionParameter
+ 23: Label
+ 24(s): 16(ptr) Variable Function
+ 28: 27(ptr) AccessChain 18(pos) 26
+ 29: 7(fvec4) Load 28
+ 30: 27(ptr) AccessChain 24(s) 26
+ Store 30 29
+ 32: 27(ptr) AccessChain 21(clip) 26
+ 33: 7(fvec4) Load 32
+ 34: 14(fvec2) VectorShuffle 33 33 0 1
+ 36: 35(ptr) AccessChain 24(s) 31
+ Store 36 34
+ 38: 27(ptr) AccessChain 21(clip) 26
+ 39: 7(fvec4) Load 38
+ 40: 14(fvec2) VectorShuffle 39 39 2 3
+ 41: 35(ptr) AccessChain 24(s) 37
+ Store 41 40
+ 44: 27(ptr) AccessChain 24(s) 26
+ 45: 7(fvec4) Load 44
+ Store 43(OutputStream.pos) 45
+ 52: 51(ptr) AccessChain 24(s) 31 50
+ 53: 6(float) Load 52
+ 55: 54(ptr) AccessChain 49(OutputStream.clip1) 26
+ Store 55 53
+ 57: 51(ptr) AccessChain 24(s) 31 56
+ 58: 6(float) Load 57
+ 59: 54(ptr) AccessChain 49(OutputStream.clip1) 31
+ Store 59 58
+ 60: 51(ptr) AccessChain 24(s) 37 50
+ 61: 6(float) Load 60
+ 62: 54(ptr) AccessChain 49(OutputStream.clip1) 37
+ Store 62 61
+ 64: 51(ptr) AccessChain 24(s) 37 56
+ 65: 6(float) Load 64
+ 66: 54(ptr) AccessChain 49(OutputStream.clip1) 63
+ Store 66 65
+ EmitVertex
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.vert.out
new file mode 100644
index 00000000000..25ca231507d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.vert.out
@@ -0,0 +1,229 @@
+hlsl.clipdistance-3.vert
+Shader version: 500
+0:? Sequence
+0:4 Function Definition: @main(vf4;f1[2];f1[2]; ( temp void)
+0:4 Function Parameters:
+0:4 'pos' ( out 4-component vector of float)
+0:4 'clip' ( out 2-element array of float)
+0:4 'cull' ( out 2-element array of float)
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:5 'pos' ( out 4-component vector of float)
+0:5 Constant:
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:6 'clip' ( out 2-element array of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0.500000
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 'clip' ( out 2-element array of float)
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0.600000
+0:9 move second child to first child ( temp float)
+0:9 direct index ( temp float)
+0:9 'cull' ( out 2-element array of float)
+0:9 Constant:
+0:9 0 (const int)
+0:9 Constant:
+0:9 0.525000
+0:10 move second child to first child ( temp float)
+0:10 direct index ( temp float)
+0:10 'cull' ( out 2-element array of float)
+0:10 Constant:
+0:10 1 (const int)
+0:10 Constant:
+0:10 0.625000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 Function Call: @main(vf4;f1[2];f1[2]; ( temp void)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp 2-element array of float)
+0:? 'cull' ( temp 2-element array of float)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Sequence
+0:4 move second child to first child ( temp 2-element array of float)
+0:? 'clip' ( out 2-element array of float ClipDistance)
+0:? 'clip' ( temp 2-element array of float)
+0:? Sequence
+0:4 move second child to first child ( temp 2-element array of float)
+0:? 'cull' ( out 2-element array of float CullDistance)
+0:? 'cull' ( temp 2-element array of float)
+0:? Linker Objects
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'clip' ( out 2-element array of float ClipDistance)
+0:? 'cull' ( out 2-element array of float CullDistance)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:4 Function Definition: @main(vf4;f1[2];f1[2]; ( temp void)
+0:4 Function Parameters:
+0:4 'pos' ( out 4-component vector of float)
+0:4 'clip' ( out 2-element array of float)
+0:4 'cull' ( out 2-element array of float)
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:5 'pos' ( out 4-component vector of float)
+0:5 Constant:
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:5 1.000000
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:6 'clip' ( out 2-element array of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 Constant:
+0:6 0.500000
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 'clip' ( out 2-element array of float)
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0.600000
+0:9 move second child to first child ( temp float)
+0:9 direct index ( temp float)
+0:9 'cull' ( out 2-element array of float)
+0:9 Constant:
+0:9 0 (const int)
+0:9 Constant:
+0:9 0.525000
+0:10 move second child to first child ( temp float)
+0:10 direct index ( temp float)
+0:10 'cull' ( out 2-element array of float)
+0:10 Constant:
+0:10 1 (const int)
+0:10 Constant:
+0:10 0.625000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 Function Call: @main(vf4;f1[2];f1[2]; ( temp void)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'clip' ( temp 2-element array of float)
+0:? 'cull' ( temp 2-element array of float)
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Sequence
+0:4 move second child to first child ( temp 2-element array of float)
+0:? 'clip' ( out 2-element array of float ClipDistance)
+0:? 'clip' ( temp 2-element array of float)
+0:? Sequence
+0:4 move second child to first child ( temp 2-element array of float)
+0:? 'cull' ( out 2-element array of float CullDistance)
+0:? 'cull' ( temp 2-element array of float)
+0:? Linker Objects
+0:? 'pos' ( out 4-component vector of float Position)
+0:? 'clip' ( out 2-element array of float ClipDistance)
+0:? 'cull' ( out 2-element array of float CullDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 51
+
+ Capability Shader
+ Capability ClipDistance
+ Capability CullDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 44 47 49
+ Source HLSL 500
+ Name 4 "main"
+ Name 17 "@main(vf4;f1[2];f1[2];"
+ Name 14 "pos"
+ Name 15 "clip"
+ Name 16 "cull"
+ Name 33 "pos"
+ Name 34 "clip"
+ Name 35 "cull"
+ Name 36 "param"
+ Name 37 "param"
+ Name 38 "param"
+ Name 44 "pos"
+ Name 47 "clip"
+ Name 49 "cull"
+ Decorate 44(pos) BuiltIn Position
+ Decorate 47(clip) BuiltIn ClipDistance
+ Decorate 49(cull) BuiltIn CullDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 2
+ 11: TypeArray 6(float) 10
+ 12: TypePointer Function 11
+ 13: TypeFunction 2 8(ptr) 12(ptr) 12(ptr)
+ 19: 6(float) Constant 1065353216
+ 20: 7(fvec4) ConstantComposite 19 19 19 19
+ 21: TypeInt 32 1
+ 22: 21(int) Constant 0
+ 23: 6(float) Constant 1056964608
+ 24: TypePointer Function 6(float)
+ 26: 21(int) Constant 1
+ 27: 6(float) Constant 1058642330
+ 29: 6(float) Constant 1057384038
+ 31: 6(float) Constant 1059061760
+ 43: TypePointer Output 7(fvec4)
+ 44(pos): 43(ptr) Variable Output
+ 46: TypePointer Output 11
+ 47(clip): 46(ptr) Variable Output
+ 49(cull): 46(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 33(pos): 8(ptr) Variable Function
+ 34(clip): 12(ptr) Variable Function
+ 35(cull): 12(ptr) Variable Function
+ 36(param): 8(ptr) Variable Function
+ 37(param): 12(ptr) Variable Function
+ 38(param): 12(ptr) Variable Function
+ 39: 2 FunctionCall 17(@main(vf4;f1[2];f1[2];) 36(param) 37(param) 38(param)
+ 40: 7(fvec4) Load 36(param)
+ Store 33(pos) 40
+ 41: 11 Load 37(param)
+ Store 34(clip) 41
+ 42: 11 Load 38(param)
+ Store 35(cull) 42
+ 45: 7(fvec4) Load 33(pos)
+ Store 44(pos) 45
+ 48: 11 Load 34(clip)
+ Store 47(clip) 48
+ 50: 11 Load 35(cull)
+ Store 49(cull) 50
+ Return
+ FunctionEnd
+17(@main(vf4;f1[2];f1[2];): 2 Function None 13
+ 14(pos): 8(ptr) FunctionParameter
+ 15(clip): 12(ptr) FunctionParameter
+ 16(cull): 12(ptr) FunctionParameter
+ 18: Label
+ Store 14(pos) 20
+ 25: 24(ptr) AccessChain 15(clip) 22
+ Store 25 23
+ 28: 24(ptr) AccessChain 15(clip) 26
+ Store 28 27
+ 30: 24(ptr) AccessChain 16(cull) 22
+ Store 30 29
+ 32: 24(ptr) AccessChain 16(cull) 26
+ Store 32 31
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.frag.out
new file mode 100644
index 00000000000..b52d917d657
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.frag.out
@@ -0,0 +1,262 @@
+hlsl.clipdistance-4.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(struct-VS_OUTPUT-vf4-vf41; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 add ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:8 Constant:
+0:8 0 (const int)
+0:8 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:8 Constant:
+0:8 1 (const int)
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:7 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 0 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 1 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 2 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 2 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 3 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 3 (const int)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(struct-VS_OUTPUT-vf4-vf41; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(struct-VS_OUTPUT-vf4-vf41; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 add ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:8 Constant:
+0:8 0 (const int)
+0:8 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:8 Constant:
+0:8 1 (const int)
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:7 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 0 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 1 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 2 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 2 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 3 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 3 (const int)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(struct-VS_OUTPUT-vf4-vf41; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 57
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 24 32 54
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "VS_OUTPUT"
+ MemberName 8(VS_OUTPUT) 0 "Position"
+ MemberName 8(VS_OUTPUT) 1 "ClipRect"
+ Name 11 "@main(struct-VS_OUTPUT-vf4-vf41;"
+ Name 10 "v"
+ Name 22 "v"
+ Name 24 "v.Position"
+ Name 32 "v.ClipRect"
+ Name 54 "@entryPointOutput"
+ Decorate 24(v.Position) BuiltIn FragCoord
+ Decorate 32(v.ClipRect) BuiltIn ClipDistance
+ Decorate 54(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8(VS_OUTPUT): TypeStruct 7(fvec4) 7(fvec4)
+ 9: TypeFunction 7(fvec4) 8(VS_OUTPUT)
+ 13: TypeInt 32 1
+ 14: 13(int) Constant 0
+ 16: 13(int) Constant 1
+ 21: TypePointer Function 8(VS_OUTPUT)
+ 23: TypePointer Input 7(fvec4)
+ 24(v.Position): 23(ptr) Variable Input
+ 26: TypePointer Function 7(fvec4)
+ 28: TypeInt 32 0
+ 29: 28(int) Constant 4
+ 30: TypeArray 6(float) 29
+ 31: TypePointer Input 30
+ 32(v.ClipRect): 31(ptr) Variable Input
+ 33: TypePointer Input 6(float)
+ 36: 28(int) Constant 0
+ 37: TypePointer Function 6(float)
+ 41: 28(int) Constant 1
+ 43: 13(int) Constant 2
+ 46: 28(int) Constant 2
+ 48: 13(int) Constant 3
+ 51: 28(int) Constant 3
+ 53: TypePointer Output 7(fvec4)
+54(@entryPointOutput): 53(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 22(v): 21(ptr) Variable Function
+ 25: 7(fvec4) Load 24(v.Position)
+ 27: 26(ptr) AccessChain 22(v) 14
+ Store 27 25
+ 34: 33(ptr) AccessChain 32(v.ClipRect) 14
+ 35: 6(float) Load 34
+ 38: 37(ptr) AccessChain 22(v) 16 36
+ Store 38 35
+ 39: 33(ptr) AccessChain 32(v.ClipRect) 16
+ 40: 6(float) Load 39
+ 42: 37(ptr) AccessChain 22(v) 16 41
+ Store 42 40
+ 44: 33(ptr) AccessChain 32(v.ClipRect) 43
+ 45: 6(float) Load 44
+ 47: 37(ptr) AccessChain 22(v) 16 46
+ Store 47 45
+ 49: 33(ptr) AccessChain 32(v.ClipRect) 48
+ 50: 6(float) Load 49
+ 52: 37(ptr) AccessChain 22(v) 16 51
+ Store 52 50
+ 55:8(VS_OUTPUT) Load 22(v)
+ 56: 7(fvec4) FunctionCall 11(@main(struct-VS_OUTPUT-vf4-vf41;) 55
+ Store 54(@entryPointOutput) 56
+ Return
+ FunctionEnd
+11(@main(struct-VS_OUTPUT-vf4-vf41;): 7(fvec4) Function None 9
+ 10(v):8(VS_OUTPUT) FunctionParameter
+ 12: Label
+ 15: 7(fvec4) CompositeExtract 10(v) 0
+ 17: 7(fvec4) CompositeExtract 10(v) 1
+ 18: 7(fvec4) FAdd 15 17
+ ReturnValue 18
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.geom.out
new file mode 100644
index 00000000000..9518823959e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.geom.out
@@ -0,0 +1,819 @@
+hlsl.clipdistance-4.geom
+Shader version: 500
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:13 Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3]; ( temp void)
+0:13 Function Parameters:
+0:13 'pos' ( in 3-element array of 4-component vector of float)
+0:13 'VertexID' ( in 3-element array of uint)
+0:13 'OutputStream' ( out structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:13 'clip0' ( in 3-element array of 2-component vector of float)
+0:13 'clip1' ( in 3-element array of 2-component vector of float)
+0:? Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 pos: direct index for structure ( temp 4-component vector of float)
+0:16 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:16 Constant:
+0:16 0 (const int)
+0:16 direct index ( temp 4-component vector of float)
+0:16 'pos' ( in 3-element array of 4-component vector of float)
+0:16 Constant:
+0:16 0 (const int)
+0:17 move second child to first child ( temp 2-component vector of float)
+0:17 clip0: direct index for structure ( temp 2-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:17 Constant:
+0:17 1 (const int)
+0:17 direct index ( temp 2-component vector of float)
+0:17 'clip0' ( in 3-element array of 2-component vector of float)
+0:17 Constant:
+0:17 0 (const int)
+0:18 move second child to first child ( temp 2-component vector of float)
+0:18 clip1: direct index for structure ( temp 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:18 Constant:
+0:18 2 (const int)
+0:18 direct index ( temp 2-component vector of float)
+0:18 'clip1' ( in 3-element array of 2-component vector of float)
+0:18 Constant:
+0:18 0 (const int)
+0:20 Sequence
+0:20 Sequence
+0:20 move second child to first child ( temp 4-component vector of float)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:20 pos: direct index for structure ( temp 4-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 0 (const int)
+0:? Sequence
+0:20 move second child to first child ( temp float)
+0:20 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20 Constant:
+0:20 0 (const int)
+0:20 direct index ( temp float)
+0:20 clip0: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 move second child to first child ( temp float)
+0:20 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20 Constant:
+0:20 1 (const int)
+0:20 direct index ( temp float)
+0:20 clip0: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:? Sequence
+0:20 move second child to first child ( temp float)
+0:20 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20 Constant:
+0:20 2 (const int)
+0:20 direct index ( temp float)
+0:20 clip1: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 move second child to first child ( temp float)
+0:20 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20 Constant:
+0:20 3 (const int)
+0:20 direct index ( temp float)
+0:20 clip1: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 EmitVertex ( temp void)
+0:13 Function Definition: main( ( temp void)
+0:13 Function Parameters:
+0:? Sequence
+0:13 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:13 move second child to first child ( temp 3-element array of uint)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? Sequence
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 2 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 3 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:? Sequence
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 2 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 3 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 2 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 3 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 2 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 3 (const int)
+0:13 Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3]; ( temp void)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:? Linker Objects
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+
+
+Linked geometry stage:
+
+
+Shader version: 500
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:13 Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3]; ( temp void)
+0:13 Function Parameters:
+0:13 'pos' ( in 3-element array of 4-component vector of float)
+0:13 'VertexID' ( in 3-element array of uint)
+0:13 'OutputStream' ( out structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:13 'clip0' ( in 3-element array of 2-component vector of float)
+0:13 'clip1' ( in 3-element array of 2-component vector of float)
+0:? Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 pos: direct index for structure ( temp 4-component vector of float)
+0:16 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:16 Constant:
+0:16 0 (const int)
+0:16 direct index ( temp 4-component vector of float)
+0:16 'pos' ( in 3-element array of 4-component vector of float)
+0:16 Constant:
+0:16 0 (const int)
+0:17 move second child to first child ( temp 2-component vector of float)
+0:17 clip0: direct index for structure ( temp 2-component vector of float)
+0:17 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:17 Constant:
+0:17 1 (const int)
+0:17 direct index ( temp 2-component vector of float)
+0:17 'clip0' ( in 3-element array of 2-component vector of float)
+0:17 Constant:
+0:17 0 (const int)
+0:18 move second child to first child ( temp 2-component vector of float)
+0:18 clip1: direct index for structure ( temp 2-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:18 Constant:
+0:18 2 (const int)
+0:18 direct index ( temp 2-component vector of float)
+0:18 'clip1' ( in 3-element array of 2-component vector of float)
+0:18 Constant:
+0:18 0 (const int)
+0:20 Sequence
+0:20 Sequence
+0:20 move second child to first child ( temp 4-component vector of float)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:20 pos: direct index for structure ( temp 4-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 0 (const int)
+0:? Sequence
+0:20 move second child to first child ( temp float)
+0:20 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20 Constant:
+0:20 0 (const int)
+0:20 direct index ( temp float)
+0:20 clip0: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 move second child to first child ( temp float)
+0:20 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20 Constant:
+0:20 1 (const int)
+0:20 direct index ( temp float)
+0:20 clip0: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:? Sequence
+0:20 move second child to first child ( temp float)
+0:20 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20 Constant:
+0:20 2 (const int)
+0:20 direct index ( temp float)
+0:20 clip1: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 move second child to first child ( temp float)
+0:20 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20 Constant:
+0:20 3 (const int)
+0:20 direct index ( temp float)
+0:20 clip1: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 EmitVertex ( temp void)
+0:13 Function Definition: main( ( temp void)
+0:13 Function Parameters:
+0:? Sequence
+0:13 move second child to first child ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:13 move second child to first child ( temp 3-element array of uint)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? Sequence
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 2 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 3 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:? Sequence
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 2 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 3 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 2 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 3 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 2 (const int)
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 direct index ( temp 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 direct index ( in float ClipDistance)
+0:13 direct index ( in 4-element array of float ClipDistance)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 3 (const int)
+0:13 Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3]; ( temp void)
+0:? 'pos' ( temp 3-element array of 4-component vector of float)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float clip0, temp 2-component vector of float clip1})
+0:? 'clip0' ( temp 3-element array of 2-component vector of float)
+0:? 'clip1' ( temp 3-element array of 2-component vector of float)
+0:? Linker Objects
+0:? 'pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'VertexID' (layout( location=0) in 3-element array of uint)
+0:? 'OutputStream.pos' ( out 4-component vector of float Position)
+0:? 'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:? 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 130
+
+ Capability Geometry
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Geometry 4 "main" 44 50 70 74 79
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 Invocations 1
+ ExecutionMode 4 OutputLineStrip
+ ExecutionMode 4 OutputVertices 3
+ Source HLSL 500
+ Name 4 "main"
+ Name 15 "S"
+ MemberName 15(S) 0 "pos"
+ MemberName 15(S) 1 "clip0"
+ MemberName 15(S) 2 "clip1"
+ Name 25 "@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3];"
+ Name 20 "pos"
+ Name 21 "VertexID"
+ Name 22 "OutputStream"
+ Name 23 "clip0"
+ Name 24 "clip1"
+ Name 27 "s"
+ Name 44 "OutputStream.pos"
+ Name 50 "OutputStream.clip1"
+ Name 68 "pos"
+ Name 70 "pos"
+ Name 72 "VertexID"
+ Name 74 "VertexID"
+ Name 76 "clip0"
+ Name 79 "clip0"
+ Name 99 "clip1"
+ Name 118 "OutputStream"
+ Name 119 "param"
+ Name 121 "param"
+ Name 123 "param"
+ Name 124 "param"
+ Name 126 "param"
+ Decorate 44(OutputStream.pos) BuiltIn Position
+ Decorate 50(OutputStream.clip1) BuiltIn ClipDistance
+ Decorate 70(pos) BuiltIn Position
+ Decorate 74(VertexID) Location 0
+ Decorate 79(clip0) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeInt 32 0
+ 9: 8(int) Constant 3
+ 10: TypeArray 7(fvec4) 9
+ 11: TypePointer Function 10
+ 12: TypeArray 8(int) 9
+ 13: TypePointer Function 12
+ 14: TypeVector 6(float) 2
+ 15(S): TypeStruct 7(fvec4) 14(fvec2) 14(fvec2)
+ 16: TypePointer Function 15(S)
+ 17: TypeArray 14(fvec2) 9
+ 18: TypePointer Function 17
+ 19: TypeFunction 2 11(ptr) 13(ptr) 16(ptr) 18(ptr) 18(ptr)
+ 28: TypeInt 32 1
+ 29: 28(int) Constant 0
+ 30: TypePointer Function 7(fvec4)
+ 34: 28(int) Constant 1
+ 35: TypePointer Function 14(fvec2)
+ 39: 28(int) Constant 2
+ 43: TypePointer Output 7(fvec4)
+44(OutputStream.pos): 43(ptr) Variable Output
+ 47: 8(int) Constant 4
+ 48: TypeArray 6(float) 47
+ 49: TypePointer Output 48
+50(OutputStream.clip1): 49(ptr) Variable Output
+ 51: 8(int) Constant 0
+ 52: TypePointer Function 6(float)
+ 55: TypePointer Output 6(float)
+ 57: 8(int) Constant 1
+ 64: 28(int) Constant 3
+ 69: TypePointer Input 10
+ 70(pos): 69(ptr) Variable Input
+ 73: TypePointer Input 12
+ 74(VertexID): 73(ptr) Variable Input
+ 77: TypeArray 48 9
+ 78: TypePointer Input 77
+ 79(clip0): 78(ptr) Variable Input
+ 80: TypePointer Input 6(float)
+ 4(main): 2 Function None 3
+ 5: Label
+ 68(pos): 11(ptr) Variable Function
+ 72(VertexID): 13(ptr) Variable Function
+ 76(clip0): 18(ptr) Variable Function
+ 99(clip1): 18(ptr) Variable Function
+118(OutputStream): 16(ptr) Variable Function
+ 119(param): 11(ptr) Variable Function
+ 121(param): 13(ptr) Variable Function
+ 123(param): 16(ptr) Variable Function
+ 124(param): 18(ptr) Variable Function
+ 126(param): 18(ptr) Variable Function
+ 71: 10 Load 70(pos)
+ Store 68(pos) 71
+ 75: 12 Load 74(VertexID)
+ Store 72(VertexID) 75
+ 81: 80(ptr) AccessChain 79(clip0) 29 29
+ 82: 6(float) Load 81
+ 83: 52(ptr) AccessChain 76(clip0) 29 51
+ Store 83 82
+ 84: 80(ptr) AccessChain 79(clip0) 29 34
+ 85: 6(float) Load 84
+ 86: 52(ptr) AccessChain 76(clip0) 29 57
+ Store 86 85
+ 87: 80(ptr) AccessChain 79(clip0) 29 39
+ 88: 6(float) Load 87
+ 89: 52(ptr) AccessChain 76(clip0) 34 51
+ Store 89 88
+ 90: 80(ptr) AccessChain 79(clip0) 29 64
+ 91: 6(float) Load 90
+ 92: 52(ptr) AccessChain 76(clip0) 34 57
+ Store 92 91
+ 93: 80(ptr) AccessChain 79(clip0) 34 29
+ 94: 6(float) Load 93
+ 95: 52(ptr) AccessChain 76(clip0) 39 51
+ Store 95 94
+ 96: 80(ptr) AccessChain 79(clip0) 34 34
+ 97: 6(float) Load 96
+ 98: 52(ptr) AccessChain 76(clip0) 39 57
+ Store 98 97
+ 100: 80(ptr) AccessChain 79(clip0) 29 39
+ 101: 6(float) Load 100
+ 102: 52(ptr) AccessChain 99(clip1) 29 51
+ Store 102 101
+ 103: 80(ptr) AccessChain 79(clip0) 29 64
+ 104: 6(float) Load 103
+ 105: 52(ptr) AccessChain 99(clip1) 29 57
+ Store 105 104
+ 106: 80(ptr) AccessChain 79(clip0) 34 39
+ 107: 6(float) Load 106
+ 108: 52(ptr) AccessChain 99(clip1) 34 51
+ Store 108 107
+ 109: 80(ptr) AccessChain 79(clip0) 34 64
+ 110: 6(float) Load 109
+ 111: 52(ptr) AccessChain 99(clip1) 34 57
+ Store 111 110
+ 112: 80(ptr) AccessChain 79(clip0) 39 39
+ 113: 6(float) Load 112
+ 114: 52(ptr) AccessChain 99(clip1) 39 51
+ Store 114 113
+ 115: 80(ptr) AccessChain 79(clip0) 39 64
+ 116: 6(float) Load 115
+ 117: 52(ptr) AccessChain 99(clip1) 39 57
+ Store 117 116
+ 120: 10 Load 68(pos)
+ Store 119(param) 120
+ 122: 12 Load 72(VertexID)
+ Store 121(param) 122
+ 125: 17 Load 76(clip0)
+ Store 124(param) 125
+ 127: 17 Load 99(clip1)
+ Store 126(param) 127
+ 128: 2 FunctionCall 25(@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3];) 119(param) 121(param) 123(param) 124(param) 126(param)
+ 129: 15(S) Load 123(param)
+ Store 118(OutputStream) 129
+ Return
+ FunctionEnd
+25(@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3];): 2 Function None 19
+ 20(pos): 11(ptr) FunctionParameter
+ 21(VertexID): 13(ptr) FunctionParameter
+22(OutputStream): 16(ptr) FunctionParameter
+ 23(clip0): 18(ptr) FunctionParameter
+ 24(clip1): 18(ptr) FunctionParameter
+ 26: Label
+ 27(s): 16(ptr) Variable Function
+ 31: 30(ptr) AccessChain 20(pos) 29
+ 32: 7(fvec4) Load 31
+ 33: 30(ptr) AccessChain 27(s) 29
+ Store 33 32
+ 36: 35(ptr) AccessChain 23(clip0) 29
+ 37: 14(fvec2) Load 36
+ 38: 35(ptr) AccessChain 27(s) 34
+ Store 38 37
+ 40: 35(ptr) AccessChain 24(clip1) 29
+ 41: 14(fvec2) Load 40
+ 42: 35(ptr) AccessChain 27(s) 39
+ Store 42 41
+ 45: 30(ptr) AccessChain 27(s) 29
+ 46: 7(fvec4) Load 45
+ Store 44(OutputStream.pos) 46
+ 53: 52(ptr) AccessChain 27(s) 34 51
+ 54: 6(float) Load 53
+ 56: 55(ptr) AccessChain 50(OutputStream.clip1) 29
+ Store 56 54
+ 58: 52(ptr) AccessChain 27(s) 34 57
+ 59: 6(float) Load 58
+ 60: 55(ptr) AccessChain 50(OutputStream.clip1) 34
+ Store 60 59
+ 61: 52(ptr) AccessChain 27(s) 39 51
+ 62: 6(float) Load 61
+ 63: 55(ptr) AccessChain 50(OutputStream.clip1) 39
+ Store 63 62
+ 65: 52(ptr) AccessChain 27(s) 39 57
+ 66: 6(float) Load 65
+ 67: 55(ptr) AccessChain 50(OutputStream.clip1) 64
+ Store 67 66
+ EmitVertex
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.vert.out
new file mode 100644
index 00000000000..575f7d176be
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.vert.out
@@ -0,0 +1,382 @@
+hlsl.clipdistance-4.vert
+Shader version: 500
+0:? Sequence
+0:11 Function Definition: @main(struct-VS_INPUT-vf41; ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Function Parameters:
+0:11 'v' ( const (read only) structure{ temp 4-component vector of float Position})
+0:? Sequence
+0:13 move second child to first child ( temp 4-component vector of float)
+0:13 Position: direct index for structure ( temp 4-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:15 move second child to first child ( temp float)
+0:15 direct index ( temp float)
+0:15 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:15 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1.000000
+0:16 move second child to first child ( temp float)
+0:16 direct index ( temp float)
+0:16 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:16 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 2.000000
+0:17 move second child to first child ( temp float)
+0:17 direct index ( temp float)
+0:17 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 3.000000
+0:18 move second child to first child ( temp float)
+0:18 direct index ( temp float)
+0:18 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 3 (const int)
+0:18 Constant:
+0:18 4.000000
+0:20 Branch: Return with expression
+0:20 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Function Definition: main( ( temp void)
+0:11 Function Parameters:
+0:? Sequence
+0:11 Sequence
+0:11 move second child to first child ( temp 4-component vector of float)
+0:11 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position})
+0:11 Constant:
+0:11 0 (const int)
+0:? 'v.Position' (layout( location=0) in 4-component vector of float)
+0:11 Sequence
+0:11 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Function Call: @main(struct-VS_INPUT-vf41; ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:? 'v' ( temp structure{ temp 4-component vector of float Position})
+0:11 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:11 Position: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 0 (const int)
+0:? Sequence
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( temp float)
+0:11 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( temp float)
+0:11 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( temp float)
+0:11 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( temp float)
+0:11 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? 'v.Position' (layout( location=0) in 4-component vector of float)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:11 Function Definition: @main(struct-VS_INPUT-vf41; ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Function Parameters:
+0:11 'v' ( const (read only) structure{ temp 4-component vector of float Position})
+0:? Sequence
+0:13 move second child to first child ( temp 4-component vector of float)
+0:13 Position: direct index for structure ( temp 4-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:15 move second child to first child ( temp float)
+0:15 direct index ( temp float)
+0:15 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:15 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1.000000
+0:16 move second child to first child ( temp float)
+0:16 direct index ( temp float)
+0:16 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:16 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 2.000000
+0:17 move second child to first child ( temp float)
+0:17 direct index ( temp float)
+0:17 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 3.000000
+0:18 move second child to first child ( temp float)
+0:18 direct index ( temp float)
+0:18 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 3 (const int)
+0:18 Constant:
+0:18 4.000000
+0:20 Branch: Return with expression
+0:20 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Function Definition: main( ( temp void)
+0:11 Function Parameters:
+0:? Sequence
+0:11 Sequence
+0:11 move second child to first child ( temp 4-component vector of float)
+0:11 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position})
+0:11 Constant:
+0:11 0 (const int)
+0:? 'v.Position' (layout( location=0) in 4-component vector of float)
+0:11 Sequence
+0:11 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Function Call: @main(struct-VS_INPUT-vf41; ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:? 'v' ( temp structure{ temp 4-component vector of float Position})
+0:11 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:11 Position: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 0 (const int)
+0:? Sequence
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( temp float)
+0:11 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( temp float)
+0:11 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( temp float)
+0:11 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 2 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( temp float)
+0:11 ClipRect: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 3 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? 'v.Position' (layout( location=0) in 4-component vector of float)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 72
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 43 50 56
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "VS_INPUT"
+ MemberName 8(VS_INPUT) 0 "Position"
+ Name 9 "VS_OUTPUT"
+ MemberName 9(VS_OUTPUT) 0 "Position"
+ MemberName 9(VS_OUTPUT) 1 "ClipRect"
+ Name 12 "@main(struct-VS_INPUT-vf41;"
+ Name 11 "v"
+ Name 15 "Output"
+ Name 41 "v"
+ Name 43 "v.Position"
+ Name 46 "flattenTemp"
+ Name 50 "@entryPointOutput.Position"
+ Name 56 "@entryPointOutput.ClipRect"
+ Decorate 43(v.Position) Location 0
+ Decorate 50(@entryPointOutput.Position) BuiltIn Position
+ Decorate 56(@entryPointOutput.ClipRect) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8(VS_INPUT): TypeStruct 7(fvec4)
+ 9(VS_OUTPUT): TypeStruct 7(fvec4) 7(fvec4)
+ 10: TypeFunction 9(VS_OUTPUT) 8(VS_INPUT)
+ 14: TypePointer Function 9(VS_OUTPUT)
+ 16: TypeInt 32 1
+ 17: 16(int) Constant 0
+ 18: 6(float) Constant 0
+ 19: 7(fvec4) ConstantComposite 18 18 18 18
+ 20: TypePointer Function 7(fvec4)
+ 22: 16(int) Constant 1
+ 23: 6(float) Constant 1065353216
+ 24: TypeInt 32 0
+ 25: 24(int) Constant 0
+ 26: TypePointer Function 6(float)
+ 28: 6(float) Constant 1073741824
+ 29: 24(int) Constant 1
+ 31: 6(float) Constant 1077936128
+ 32: 24(int) Constant 2
+ 34: 6(float) Constant 1082130432
+ 35: 24(int) Constant 3
+ 40: TypePointer Function 8(VS_INPUT)
+ 42: TypePointer Input 7(fvec4)
+ 43(v.Position): 42(ptr) Variable Input
+ 49: TypePointer Output 7(fvec4)
+50(@entryPointOutput.Position): 49(ptr) Variable Output
+ 53: 24(int) Constant 4
+ 54: TypeArray 6(float) 53
+ 55: TypePointer Output 54
+56(@entryPointOutput.ClipRect): 55(ptr) Variable Output
+ 59: TypePointer Output 6(float)
+ 64: 16(int) Constant 2
+ 68: 16(int) Constant 3
+ 4(main): 2 Function None 3
+ 5: Label
+ 41(v): 40(ptr) Variable Function
+ 46(flattenTemp): 14(ptr) Variable Function
+ 44: 7(fvec4) Load 43(v.Position)
+ 45: 20(ptr) AccessChain 41(v) 17
+ Store 45 44
+ 47: 8(VS_INPUT) Load 41(v)
+ 48:9(VS_OUTPUT) FunctionCall 12(@main(struct-VS_INPUT-vf41;) 47
+ Store 46(flattenTemp) 48
+ 51: 20(ptr) AccessChain 46(flattenTemp) 17
+ 52: 7(fvec4) Load 51
+ Store 50(@entryPointOutput.Position) 52
+ 57: 26(ptr) AccessChain 46(flattenTemp) 22 25
+ 58: 6(float) Load 57
+ 60: 59(ptr) AccessChain 56(@entryPointOutput.ClipRect) 17
+ Store 60 58
+ 61: 26(ptr) AccessChain 46(flattenTemp) 22 29
+ 62: 6(float) Load 61
+ 63: 59(ptr) AccessChain 56(@entryPointOutput.ClipRect) 22
+ Store 63 62
+ 65: 26(ptr) AccessChain 46(flattenTemp) 22 32
+ 66: 6(float) Load 65
+ 67: 59(ptr) AccessChain 56(@entryPointOutput.ClipRect) 64
+ Store 67 66
+ 69: 26(ptr) AccessChain 46(flattenTemp) 22 35
+ 70: 6(float) Load 69
+ 71: 59(ptr) AccessChain 56(@entryPointOutput.ClipRect) 68
+ Store 71 70
+ Return
+ FunctionEnd
+12(@main(struct-VS_INPUT-vf41;):9(VS_OUTPUT) Function None 10
+ 11(v): 8(VS_INPUT) FunctionParameter
+ 13: Label
+ 15(Output): 14(ptr) Variable Function
+ 21: 20(ptr) AccessChain 15(Output) 17
+ Store 21 19
+ 27: 26(ptr) AccessChain 15(Output) 22 25
+ Store 27 23
+ 30: 26(ptr) AccessChain 15(Output) 22 29
+ Store 30 28
+ 33: 26(ptr) AccessChain 15(Output) 22 32
+ Store 33 31
+ 36: 26(ptr) AccessChain 15(Output) 22 35
+ Store 36 34
+ 37:9(VS_OUTPUT) Load 15(Output)
+ ReturnValue 37
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.frag.out
new file mode 100644
index 00000000000..7a7f9854902
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.frag.out
@@ -0,0 +1,325 @@
+hlsl.clipdistance-5.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(struct-VS_OUTPUT-vf4-vf2[2]1; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 add ( temp 4-component vector of float)
+0:8 add ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 direct index ( temp 2-component vector of float)
+0:8 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 direct index ( temp 2-component vector of float)
+0:8 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:7 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 0 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 1 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 2 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 3 (const int)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(struct-VS_OUTPUT-vf4-vf2[2]1; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(struct-VS_OUTPUT-vf4-vf2[2]1; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 add ( temp 4-component vector of float)
+0:8 add ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 direct index ( temp 2-component vector of float)
+0:8 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 direct index ( temp 2-component vector of float)
+0:8 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:8 'v' ( const (read only) structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:7 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 0 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 1 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 2 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( temp float)
+0:7 direct index ( temp 2-component vector of float)
+0:7 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:7 direct index ( in float ClipDistance)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 3 (const int)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(struct-VS_OUTPUT-vf4-vf2[2]1; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.ClipRect' ( in 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 62
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 33 40 59
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 12 "VS_OUTPUT"
+ MemberName 12(VS_OUTPUT) 0 "Position"
+ MemberName 12(VS_OUTPUT) 1 "ClipRect"
+ Name 15 "@main(struct-VS_OUTPUT-vf4-vf2[2]1;"
+ Name 14 "v"
+ Name 31 "v"
+ Name 33 "v.Position"
+ Name 40 "v.ClipRect"
+ Name 59 "@entryPointOutput"
+ Decorate 33(v.Position) BuiltIn FragCoord
+ Decorate 40(v.ClipRect) BuiltIn ClipDistance
+ Decorate 59(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeVector 6(float) 2
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 2
+ 11: TypeArray 8(fvec2) 10
+ 12(VS_OUTPUT): TypeStruct 7(fvec4) 11
+ 13: TypeFunction 7(fvec4) 12(VS_OUTPUT)
+ 17: TypeInt 32 1
+ 18: 17(int) Constant 0
+ 20: 17(int) Constant 1
+ 21: 9(int) Constant 0
+ 30: TypePointer Function 12(VS_OUTPUT)
+ 32: TypePointer Input 7(fvec4)
+ 33(v.Position): 32(ptr) Variable Input
+ 35: TypePointer Function 7(fvec4)
+ 37: 9(int) Constant 4
+ 38: TypeArray 6(float) 37
+ 39: TypePointer Input 38
+ 40(v.ClipRect): 39(ptr) Variable Input
+ 41: TypePointer Input 6(float)
+ 44: TypePointer Function 6(float)
+ 48: 9(int) Constant 1
+ 50: 17(int) Constant 2
+ 54: 17(int) Constant 3
+ 58: TypePointer Output 7(fvec4)
+59(@entryPointOutput): 58(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 31(v): 30(ptr) Variable Function
+ 34: 7(fvec4) Load 33(v.Position)
+ 36: 35(ptr) AccessChain 31(v) 18
+ Store 36 34
+ 42: 41(ptr) AccessChain 40(v.ClipRect) 18
+ 43: 6(float) Load 42
+ 45: 44(ptr) AccessChain 31(v) 20 18 21
+ Store 45 43
+ 46: 41(ptr) AccessChain 40(v.ClipRect) 20
+ 47: 6(float) Load 46
+ 49: 44(ptr) AccessChain 31(v) 20 18 48
+ Store 49 47
+ 51: 41(ptr) AccessChain 40(v.ClipRect) 50
+ 52: 6(float) Load 51
+ 53: 44(ptr) AccessChain 31(v) 20 20 21
+ Store 53 52
+ 55: 41(ptr) AccessChain 40(v.ClipRect) 54
+ 56: 6(float) Load 55
+ 57: 44(ptr) AccessChain 31(v) 20 20 48
+ Store 57 56
+ 60:12(VS_OUTPUT) Load 31(v)
+ 61: 7(fvec4) FunctionCall 15(@main(struct-VS_OUTPUT-vf4-vf2[2]1;) 60
+ Store 59(@entryPointOutput) 61
+ Return
+ FunctionEnd
+15(@main(struct-VS_OUTPUT-vf4-vf2[2]1;): 7(fvec4) Function None 13
+ 14(v):12(VS_OUTPUT) FunctionParameter
+ 16: Label
+ 19: 7(fvec4) CompositeExtract 14(v) 0
+ 22: 6(float) CompositeExtract 14(v) 1 0 0
+ 23: 7(fvec4) CompositeConstruct 22 22 22 22
+ 24: 7(fvec4) FAdd 19 23
+ 25: 6(float) CompositeExtract 14(v) 1 1 0
+ 26: 7(fvec4) CompositeConstruct 25 25 25 25
+ 27: 7(fvec4) FAdd 24 26
+ ReturnValue 27
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.vert.out
new file mode 100644
index 00000000000..5e40f8865d8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.vert.out
@@ -0,0 +1,431 @@
+hlsl.clipdistance-5.vert
+Shader version: 500
+0:? Sequence
+0:11 Function Definition: @main(struct-VS_INPUT-vf41; ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Function Parameters:
+0:11 'v' ( const (read only) structure{ temp 4-component vector of float Position})
+0:? Sequence
+0:13 move second child to first child ( temp 4-component vector of float)
+0:13 Position: direct index for structure ( temp 4-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:15 move second child to first child ( temp float)
+0:15 direct index ( temp float)
+0:15 direct index ( temp 2-component vector of float)
+0:15 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:15 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1.000000
+0:16 move second child to first child ( temp float)
+0:16 direct index ( temp float)
+0:16 direct index ( temp 2-component vector of float)
+0:16 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:16 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 2.000000
+0:17 move second child to first child ( temp float)
+0:17 direct index ( temp float)
+0:17 direct index ( temp 2-component vector of float)
+0:17 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 Constant:
+0:17 3.000000
+0:18 move second child to first child ( temp float)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 4.000000
+0:20 Branch: Return with expression
+0:20 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Function Definition: main( ( temp void)
+0:11 Function Parameters:
+0:? Sequence
+0:11 Sequence
+0:11 move second child to first child ( temp 4-component vector of float)
+0:11 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position})
+0:11 Constant:
+0:11 0 (const int)
+0:? 'v.Position' (layout( location=0) in 4-component vector of float)
+0:11 Sequence
+0:11 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Function Call: @main(struct-VS_INPUT-vf41; ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:? 'v' ( temp structure{ temp 4-component vector of float Position})
+0:11 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:11 Position: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 0 (const int)
+0:? Sequence
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? 'v.Position' (layout( location=0) in 4-component vector of float)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:11 Function Definition: @main(struct-VS_INPUT-vf41; ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Function Parameters:
+0:11 'v' ( const (read only) structure{ temp 4-component vector of float Position})
+0:? Sequence
+0:13 move second child to first child ( temp 4-component vector of float)
+0:13 Position: direct index for structure ( temp 4-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:15 move second child to first child ( temp float)
+0:15 direct index ( temp float)
+0:15 direct index ( temp 2-component vector of float)
+0:15 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:15 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1.000000
+0:16 move second child to first child ( temp float)
+0:16 direct index ( temp float)
+0:16 direct index ( temp 2-component vector of float)
+0:16 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:16 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 1 (const int)
+0:16 Constant:
+0:16 2.000000
+0:17 move second child to first child ( temp float)
+0:17 direct index ( temp float)
+0:17 direct index ( temp 2-component vector of float)
+0:17 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 1 (const int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 Constant:
+0:17 3.000000
+0:18 move second child to first child ( temp float)
+0:18 direct index ( temp float)
+0:18 direct index ( temp 2-component vector of float)
+0:18 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 4.000000
+0:20 Branch: Return with expression
+0:20 'Output' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Function Definition: main( ( temp void)
+0:11 Function Parameters:
+0:? Sequence
+0:11 Sequence
+0:11 move second child to first child ( temp 4-component vector of float)
+0:11 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position})
+0:11 Constant:
+0:11 0 (const int)
+0:? 'v.Position' (layout( location=0) in 4-component vector of float)
+0:11 Sequence
+0:11 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Function Call: @main(struct-VS_INPUT-vf41; ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:? 'v' ( temp structure{ temp 4-component vector of float Position})
+0:11 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:11 Position: direct index for structure ( temp 4-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 0 (const int)
+0:? Sequence
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 0 (const int)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 1 (const int)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 2 (const int)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp float)
+0:11 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+0:11 Constant:
+0:11 3 (const int)
+0:11 direct index ( temp float)
+0:11 direct index ( temp 2-component vector of float)
+0:11 ClipRect: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:11 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 2-element array of 2-component vector of float ClipRect})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? 'v.Position' (layout( location=0) in 4-component vector of float)
+0:? '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 73
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 44 51 57
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "VS_INPUT"
+ MemberName 8(VS_INPUT) 0 "Position"
+ Name 13 "VS_OUTPUT"
+ MemberName 13(VS_OUTPUT) 0 "Position"
+ MemberName 13(VS_OUTPUT) 1 "ClipRect"
+ Name 16 "@main(struct-VS_INPUT-vf41;"
+ Name 15 "v"
+ Name 19 "Output"
+ Name 42 "v"
+ Name 44 "v.Position"
+ Name 47 "flattenTemp"
+ Name 51 "@entryPointOutput.Position"
+ Name 57 "@entryPointOutput.ClipRect"
+ Decorate 44(v.Position) Location 0
+ Decorate 51(@entryPointOutput.Position) BuiltIn Position
+ Decorate 57(@entryPointOutput.ClipRect) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8(VS_INPUT): TypeStruct 7(fvec4)
+ 9: TypeVector 6(float) 2
+ 10: TypeInt 32 0
+ 11: 10(int) Constant 2
+ 12: TypeArray 9(fvec2) 11
+ 13(VS_OUTPUT): TypeStruct 7(fvec4) 12
+ 14: TypeFunction 13(VS_OUTPUT) 8(VS_INPUT)
+ 18: TypePointer Function 13(VS_OUTPUT)
+ 20: TypeInt 32 1
+ 21: 20(int) Constant 0
+ 22: 6(float) Constant 0
+ 23: 7(fvec4) ConstantComposite 22 22 22 22
+ 24: TypePointer Function 7(fvec4)
+ 26: 20(int) Constant 1
+ 27: 6(float) Constant 1065353216
+ 28: 10(int) Constant 0
+ 29: TypePointer Function 6(float)
+ 31: 6(float) Constant 1073741824
+ 32: 10(int) Constant 1
+ 34: 6(float) Constant 1077936128
+ 36: 6(float) Constant 1082130432
+ 41: TypePointer Function 8(VS_INPUT)
+ 43: TypePointer Input 7(fvec4)
+ 44(v.Position): 43(ptr) Variable Input
+ 50: TypePointer Output 7(fvec4)
+51(@entryPointOutput.Position): 50(ptr) Variable Output
+ 54: 10(int) Constant 4
+ 55: TypeArray 6(float) 54
+ 56: TypePointer Output 55
+57(@entryPointOutput.ClipRect): 56(ptr) Variable Output
+ 60: TypePointer Output 6(float)
+ 65: 20(int) Constant 2
+ 69: 20(int) Constant 3
+ 4(main): 2 Function None 3
+ 5: Label
+ 42(v): 41(ptr) Variable Function
+ 47(flattenTemp): 18(ptr) Variable Function
+ 45: 7(fvec4) Load 44(v.Position)
+ 46: 24(ptr) AccessChain 42(v) 21
+ Store 46 45
+ 48: 8(VS_INPUT) Load 42(v)
+ 49:13(VS_OUTPUT) FunctionCall 16(@main(struct-VS_INPUT-vf41;) 48
+ Store 47(flattenTemp) 49
+ 52: 24(ptr) AccessChain 47(flattenTemp) 21
+ 53: 7(fvec4) Load 52
+ Store 51(@entryPointOutput.Position) 53
+ 58: 29(ptr) AccessChain 47(flattenTemp) 26 21 28
+ 59: 6(float) Load 58
+ 61: 60(ptr) AccessChain 57(@entryPointOutput.ClipRect) 21
+ Store 61 59
+ 62: 29(ptr) AccessChain 47(flattenTemp) 26 21 32
+ 63: 6(float) Load 62
+ 64: 60(ptr) AccessChain 57(@entryPointOutput.ClipRect) 26
+ Store 64 63
+ 66: 29(ptr) AccessChain 47(flattenTemp) 26 26 28
+ 67: 6(float) Load 66
+ 68: 60(ptr) AccessChain 57(@entryPointOutput.ClipRect) 65
+ Store 68 67
+ 70: 29(ptr) AccessChain 47(flattenTemp) 26 26 32
+ 71: 6(float) Load 70
+ 72: 60(ptr) AccessChain 57(@entryPointOutput.ClipRect) 69
+ Store 72 71
+ Return
+ FunctionEnd
+16(@main(struct-VS_INPUT-vf41;):13(VS_OUTPUT) Function None 14
+ 15(v): 8(VS_INPUT) FunctionParameter
+ 17: Label
+ 19(Output): 18(ptr) Variable Function
+ 25: 24(ptr) AccessChain 19(Output) 21
+ Store 25 23
+ 30: 29(ptr) AccessChain 19(Output) 26 21 28
+ Store 30 27
+ 33: 29(ptr) AccessChain 19(Output) 26 21 32
+ Store 33 31
+ 35: 29(ptr) AccessChain 19(Output) 26 26 28
+ Store 35 34
+ 37: 29(ptr) AccessChain 19(Output) 26 26 32
+ Store 37 36
+ 38:13(VS_OUTPUT) Load 19(Output)
+ ReturnValue 38
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.frag.out
new file mode 100644
index 00000000000..907122d4096
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.frag.out
@@ -0,0 +1,399 @@
+hlsl.clipdistance-6.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: @main(struct-VS_OUTPUT-vf4-vf4-vf41; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'v' ( in structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:? Sequence
+0:9 Branch: Return with expression
+0:9 add ( temp 4-component vector of float)
+0:9 add ( temp 4-component vector of float)
+0:9 Position: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 0 (const int)
+0:9 clip0: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 1 (const int)
+0:9 clip1: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 2 (const int)
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 3 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 4 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 5 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 6 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 7 (const int)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main(struct-VS_OUTPUT-vf4-vf4-vf41; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: @main(struct-VS_OUTPUT-vf4-vf4-vf41; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'v' ( in structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:? Sequence
+0:9 Branch: Return with expression
+0:9 add ( temp 4-component vector of float)
+0:9 add ( temp 4-component vector of float)
+0:9 Position: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 0 (const int)
+0:9 clip0: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 1 (const int)
+0:9 clip1: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 2 (const int)
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 3 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 4 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 5 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 6 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 7 (const int)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main(struct-VS_OUTPUT-vf4-vf4-vf41; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 79
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 31 38 75
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "VS_OUTPUT"
+ MemberName 8(VS_OUTPUT) 0 "Position"
+ MemberName 8(VS_OUTPUT) 1 "clip0"
+ MemberName 8(VS_OUTPUT) 2 "clip1"
+ Name 12 "@main(struct-VS_OUTPUT-vf4-vf4-vf41;"
+ Name 11 "v"
+ Name 29 "v"
+ Name 31 "v.Position"
+ Name 38 "v.clip1"
+ Name 75 "@entryPointOutput"
+ Name 76 "param"
+ Decorate 31(v.Position) BuiltIn FragCoord
+ Decorate 38(v.clip1) BuiltIn ClipDistance
+ Decorate 75(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8(VS_OUTPUT): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4)
+ 9: TypePointer Function 8(VS_OUTPUT)
+ 10: TypeFunction 7(fvec4) 9(ptr)
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16: TypePointer Function 7(fvec4)
+ 19: 14(int) Constant 1
+ 23: 14(int) Constant 2
+ 30: TypePointer Input 7(fvec4)
+ 31(v.Position): 30(ptr) Variable Input
+ 34: TypeInt 32 0
+ 35: 34(int) Constant 8
+ 36: TypeArray 6(float) 35
+ 37: TypePointer Input 36
+ 38(v.clip1): 37(ptr) Variable Input
+ 39: TypePointer Input 6(float)
+ 42: 34(int) Constant 0
+ 43: TypePointer Function 6(float)
+ 47: 34(int) Constant 1
+ 51: 34(int) Constant 2
+ 53: 14(int) Constant 3
+ 56: 34(int) Constant 3
+ 58: 14(int) Constant 4
+ 62: 14(int) Constant 5
+ 66: 14(int) Constant 6
+ 70: 14(int) Constant 7
+ 74: TypePointer Output 7(fvec4)
+75(@entryPointOutput): 74(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 29(v): 9(ptr) Variable Function
+ 76(param): 9(ptr) Variable Function
+ 32: 7(fvec4) Load 31(v.Position)
+ 33: 16(ptr) AccessChain 29(v) 15
+ Store 33 32
+ 40: 39(ptr) AccessChain 38(v.clip1) 15
+ 41: 6(float) Load 40
+ 44: 43(ptr) AccessChain 29(v) 19 42
+ Store 44 41
+ 45: 39(ptr) AccessChain 38(v.clip1) 19
+ 46: 6(float) Load 45
+ 48: 43(ptr) AccessChain 29(v) 19 47
+ Store 48 46
+ 49: 39(ptr) AccessChain 38(v.clip1) 23
+ 50: 6(float) Load 49
+ 52: 43(ptr) AccessChain 29(v) 19 51
+ Store 52 50
+ 54: 39(ptr) AccessChain 38(v.clip1) 53
+ 55: 6(float) Load 54
+ 57: 43(ptr) AccessChain 29(v) 19 56
+ Store 57 55
+ 59: 39(ptr) AccessChain 38(v.clip1) 58
+ 60: 6(float) Load 59
+ 61: 43(ptr) AccessChain 29(v) 23 42
+ Store 61 60
+ 63: 39(ptr) AccessChain 38(v.clip1) 62
+ 64: 6(float) Load 63
+ 65: 43(ptr) AccessChain 29(v) 23 47
+ Store 65 64
+ 67: 39(ptr) AccessChain 38(v.clip1) 66
+ 68: 6(float) Load 67
+ 69: 43(ptr) AccessChain 29(v) 23 51
+ Store 69 68
+ 71: 39(ptr) AccessChain 38(v.clip1) 70
+ 72: 6(float) Load 71
+ 73: 43(ptr) AccessChain 29(v) 23 56
+ Store 73 72
+ 77:8(VS_OUTPUT) Load 29(v)
+ Store 76(param) 77
+ 78: 7(fvec4) FunctionCall 12(@main(struct-VS_OUTPUT-vf4-vf4-vf41;) 76(param)
+ Store 75(@entryPointOutput) 78
+ Return
+ FunctionEnd
+12(@main(struct-VS_OUTPUT-vf4-vf4-vf41;): 7(fvec4) Function None 10
+ 11(v): 9(ptr) FunctionParameter
+ 13: Label
+ 17: 16(ptr) AccessChain 11(v) 15
+ 18: 7(fvec4) Load 17
+ 20: 16(ptr) AccessChain 11(v) 19
+ 21: 7(fvec4) Load 20
+ 22: 7(fvec4) FAdd 18 21
+ 24: 16(ptr) AccessChain 11(v) 23
+ 25: 7(fvec4) Load 24
+ 26: 7(fvec4) FAdd 22 25
+ ReturnValue 26
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.vert.out
new file mode 100644
index 00000000000..15c987cb3de
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.vert.out
@@ -0,0 +1,556 @@
+hlsl.clipdistance-6.vert
+Shader version: 500
+0:? Sequence
+0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 clip0: direct index for structure ( temp 4-component vector of float)
+0:12 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0.000000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 clip0: direct index for structure ( temp 4-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1.000000
+0:14 move second child to first child ( temp float)
+0:14 direct index ( temp float)
+0:14 clip0: direct index for structure ( temp 4-component vector of float)
+0:14 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 2 (const int)
+0:14 Constant:
+0:14 2.000000
+0:15 move second child to first child ( temp float)
+0:15 direct index ( temp float)
+0:15 clip0: direct index for structure ( temp 4-component vector of float)
+0:15 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 3 (const int)
+0:15 Constant:
+0:15 3.000000
+0:17 move second child to first child ( temp float)
+0:17 direct index ( temp float)
+0:17 clip1: direct index for structure ( temp 4-component vector of float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 Constant:
+0:17 4.000000
+0:18 move second child to first child ( temp float)
+0:18 direct index ( temp float)
+0:18 clip1: direct index for structure ( temp 4-component vector of float)
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:18 Constant:
+0:18 2 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 5.000000
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 clip1: direct index for structure ( temp 4-component vector of float)
+0:19 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 6.000000
+0:20 move second child to first child ( temp float)
+0:20 direct index ( temp float)
+0:20 clip1: direct index for structure ( temp 4-component vector of float)
+0:20 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 3 (const int)
+0:20 Constant:
+0:20 7.000000
+0:22 Branch: Return with expression
+0:22 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 3 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 4 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 5 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 6 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 7 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 clip0: direct index for structure ( temp 4-component vector of float)
+0:12 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0.000000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 clip0: direct index for structure ( temp 4-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1.000000
+0:14 move second child to first child ( temp float)
+0:14 direct index ( temp float)
+0:14 clip0: direct index for structure ( temp 4-component vector of float)
+0:14 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 2 (const int)
+0:14 Constant:
+0:14 2.000000
+0:15 move second child to first child ( temp float)
+0:15 direct index ( temp float)
+0:15 clip0: direct index for structure ( temp 4-component vector of float)
+0:15 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 3 (const int)
+0:15 Constant:
+0:15 3.000000
+0:17 move second child to first child ( temp float)
+0:17 direct index ( temp float)
+0:17 clip1: direct index for structure ( temp 4-component vector of float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 Constant:
+0:17 4.000000
+0:18 move second child to first child ( temp float)
+0:18 direct index ( temp float)
+0:18 clip1: direct index for structure ( temp 4-component vector of float)
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:18 Constant:
+0:18 2 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 5.000000
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 clip1: direct index for structure ( temp 4-component vector of float)
+0:19 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 6.000000
+0:20 move second child to first child ( temp float)
+0:20 direct index ( temp float)
+0:20 clip1: direct index for structure ( temp 4-component vector of float)
+0:20 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 3 (const int)
+0:20 Constant:
+0:20 7.000000
+0:22 Branch: Return with expression
+0:22 'Output' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 3 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 4 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 5 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 6 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 7 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 4-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 86
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 49 55
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "VS_OUTPUT"
+ MemberName 8(VS_OUTPUT) 0 "Position"
+ MemberName 8(VS_OUTPUT) 1 "clip0"
+ MemberName 8(VS_OUTPUT) 2 "clip1"
+ Name 10 "@main("
+ Name 13 "Output"
+ Name 46 "flattenTemp"
+ Name 49 "@entryPointOutput.Position"
+ Name 55 "@entryPointOutput.clip1"
+ Decorate 49(@entryPointOutput.Position) BuiltIn Position
+ Decorate 55(@entryPointOutput.clip1) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8(VS_OUTPUT): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4)
+ 9: TypeFunction 8(VS_OUTPUT)
+ 12: TypePointer Function 8(VS_OUTPUT)
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16: 6(float) Constant 0
+ 17: 7(fvec4) ConstantComposite 16 16 16 16
+ 18: TypePointer Function 7(fvec4)
+ 20: 14(int) Constant 1
+ 21: TypeInt 32 0
+ 22: 21(int) Constant 0
+ 23: TypePointer Function 6(float)
+ 25: 6(float) Constant 1065353216
+ 26: 21(int) Constant 1
+ 28: 6(float) Constant 1073741824
+ 29: 21(int) Constant 2
+ 31: 6(float) Constant 1077936128
+ 32: 21(int) Constant 3
+ 34: 14(int) Constant 2
+ 35: 6(float) Constant 1082130432
+ 37: 6(float) Constant 1084227584
+ 39: 6(float) Constant 1086324736
+ 41: 6(float) Constant 1088421888
+ 48: TypePointer Output 7(fvec4)
+49(@entryPointOutput.Position): 48(ptr) Variable Output
+ 52: 21(int) Constant 8
+ 53: TypeArray 6(float) 52
+ 54: TypePointer Output 53
+55(@entryPointOutput.clip1): 54(ptr) Variable Output
+ 58: TypePointer Output 6(float)
+ 66: 14(int) Constant 3
+ 70: 14(int) Constant 4
+ 74: 14(int) Constant 5
+ 78: 14(int) Constant 6
+ 82: 14(int) Constant 7
+ 4(main): 2 Function None 3
+ 5: Label
+ 46(flattenTemp): 12(ptr) Variable Function
+ 47:8(VS_OUTPUT) FunctionCall 10(@main()
+ Store 46(flattenTemp) 47
+ 50: 18(ptr) AccessChain 46(flattenTemp) 15
+ 51: 7(fvec4) Load 50
+ Store 49(@entryPointOutput.Position) 51
+ 56: 23(ptr) AccessChain 46(flattenTemp) 20 22
+ 57: 6(float) Load 56
+ 59: 58(ptr) AccessChain 55(@entryPointOutput.clip1) 15
+ Store 59 57
+ 60: 23(ptr) AccessChain 46(flattenTemp) 20 26
+ 61: 6(float) Load 60
+ 62: 58(ptr) AccessChain 55(@entryPointOutput.clip1) 20
+ Store 62 61
+ 63: 23(ptr) AccessChain 46(flattenTemp) 20 29
+ 64: 6(float) Load 63
+ 65: 58(ptr) AccessChain 55(@entryPointOutput.clip1) 34
+ Store 65 64
+ 67: 23(ptr) AccessChain 46(flattenTemp) 20 32
+ 68: 6(float) Load 67
+ 69: 58(ptr) AccessChain 55(@entryPointOutput.clip1) 66
+ Store 69 68
+ 71: 23(ptr) AccessChain 46(flattenTemp) 34 22
+ 72: 6(float) Load 71
+ 73: 58(ptr) AccessChain 55(@entryPointOutput.clip1) 70
+ Store 73 72
+ 75: 23(ptr) AccessChain 46(flattenTemp) 34 26
+ 76: 6(float) Load 75
+ 77: 58(ptr) AccessChain 55(@entryPointOutput.clip1) 74
+ Store 77 76
+ 79: 23(ptr) AccessChain 46(flattenTemp) 34 29
+ 80: 6(float) Load 79
+ 81: 58(ptr) AccessChain 55(@entryPointOutput.clip1) 78
+ Store 81 80
+ 83: 23(ptr) AccessChain 46(flattenTemp) 34 32
+ 84: 6(float) Load 83
+ 85: 58(ptr) AccessChain 55(@entryPointOutput.clip1) 82
+ Store 85 84
+ Return
+ FunctionEnd
+ 10(@main():8(VS_OUTPUT) Function None 9
+ 11: Label
+ 13(Output): 12(ptr) Variable Function
+ 19: 18(ptr) AccessChain 13(Output) 15
+ Store 19 17
+ 24: 23(ptr) AccessChain 13(Output) 20 22
+ Store 24 16
+ 27: 23(ptr) AccessChain 13(Output) 20 26
+ Store 27 25
+ 30: 23(ptr) AccessChain 13(Output) 20 29
+ Store 30 28
+ 33: 23(ptr) AccessChain 13(Output) 20 32
+ Store 33 31
+ 36: 23(ptr) AccessChain 13(Output) 34 22
+ Store 36 35
+ 38: 23(ptr) AccessChain 13(Output) 34 26
+ Store 38 37
+ 40: 23(ptr) AccessChain 13(Output) 34 29
+ Store 40 39
+ 42: 23(ptr) AccessChain 13(Output) 34 32
+ Store 42 41
+ 43:8(VS_OUTPUT) Load 13(Output)
+ ReturnValue 43
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.frag.out
new file mode 100644
index 00000000000..03c329f08b3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.frag.out
@@ -0,0 +1,385 @@
+hlsl.clipdistance-7.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: @main(struct-VS_OUTPUT-vf4-vf3-vf41; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:? Sequence
+0:9 Branch: Return with expression
+0:9 add ( temp 4-component vector of float)
+0:9 add ( temp 4-component vector of float)
+0:9 Position: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 0 (const int)
+0:9 direct index ( temp float)
+0:9 clip0: direct index for structure ( temp 3-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 1 (const int)
+0:9 Constant:
+0:9 0 (const int)
+0:9 direct index ( temp float)
+0:9 clip1: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 2 (const int)
+0:9 Constant:
+0:9 0 (const int)
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 4 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 5 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 6 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 7 (const int)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main(struct-VS_OUTPUT-vf4-vf3-vf41; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: @main(struct-VS_OUTPUT-vf4-vf3-vf41; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:? Sequence
+0:9 Branch: Return with expression
+0:9 add ( temp 4-component vector of float)
+0:9 add ( temp 4-component vector of float)
+0:9 Position: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 0 (const int)
+0:9 direct index ( temp float)
+0:9 clip0: direct index for structure ( temp 3-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 1 (const int)
+0:9 Constant:
+0:9 0 (const int)
+0:9 direct index ( temp float)
+0:9 clip1: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:9 Constant:
+0:9 2 (const int)
+0:9 Constant:
+0:9 0 (const int)
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 4 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 5 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 6 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 7 (const int)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main(struct-VS_OUTPUT-vf4-vf3-vf41; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.clip1' ( in 8-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 78
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 37 43 74
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "VS_OUTPUT"
+ MemberName 9(VS_OUTPUT) 0 "Position"
+ MemberName 9(VS_OUTPUT) 1 "clip0"
+ MemberName 9(VS_OUTPUT) 2 "clip1"
+ Name 13 "@main(struct-VS_OUTPUT-vf4-vf3-vf41;"
+ Name 12 "v"
+ Name 35 "v"
+ Name 37 "v.Position"
+ Name 43 "v.clip1"
+ Name 74 "@entryPointOutput"
+ Name 75 "param"
+ Decorate 37(v.Position) BuiltIn FragCoord
+ Decorate 43(v.clip1) BuiltIn ClipDistance
+ Decorate 74(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeVector 6(float) 3
+ 9(VS_OUTPUT): TypeStruct 7(fvec4) 8(fvec3) 7(fvec4)
+ 10: TypePointer Function 9(VS_OUTPUT)
+ 11: TypeFunction 7(fvec4) 10(ptr)
+ 15: TypeInt 32 1
+ 16: 15(int) Constant 0
+ 17: TypePointer Function 7(fvec4)
+ 20: 15(int) Constant 1
+ 21: TypeInt 32 0
+ 22: 21(int) Constant 0
+ 23: TypePointer Function 6(float)
+ 28: 15(int) Constant 2
+ 36: TypePointer Input 7(fvec4)
+ 37(v.Position): 36(ptr) Variable Input
+ 40: 21(int) Constant 8
+ 41: TypeArray 6(float) 40
+ 42: TypePointer Input 41
+ 43(v.clip1): 42(ptr) Variable Input
+ 44: TypePointer Input 6(float)
+ 50: 21(int) Constant 1
+ 54: 21(int) Constant 2
+ 56: 15(int) Constant 4
+ 60: 15(int) Constant 5
+ 64: 15(int) Constant 6
+ 68: 15(int) Constant 7
+ 71: 21(int) Constant 3
+ 73: TypePointer Output 7(fvec4)
+74(@entryPointOutput): 73(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 35(v): 10(ptr) Variable Function
+ 75(param): 10(ptr) Variable Function
+ 38: 7(fvec4) Load 37(v.Position)
+ 39: 17(ptr) AccessChain 35(v) 16
+ Store 39 38
+ 45: 44(ptr) AccessChain 43(v.clip1) 16
+ 46: 6(float) Load 45
+ 47: 23(ptr) AccessChain 35(v) 20 22
+ Store 47 46
+ 48: 44(ptr) AccessChain 43(v.clip1) 20
+ 49: 6(float) Load 48
+ 51: 23(ptr) AccessChain 35(v) 20 50
+ Store 51 49
+ 52: 44(ptr) AccessChain 43(v.clip1) 28
+ 53: 6(float) Load 52
+ 55: 23(ptr) AccessChain 35(v) 20 54
+ Store 55 53
+ 57: 44(ptr) AccessChain 43(v.clip1) 56
+ 58: 6(float) Load 57
+ 59: 23(ptr) AccessChain 35(v) 28 22
+ Store 59 58
+ 61: 44(ptr) AccessChain 43(v.clip1) 60
+ 62: 6(float) Load 61
+ 63: 23(ptr) AccessChain 35(v) 28 50
+ Store 63 62
+ 65: 44(ptr) AccessChain 43(v.clip1) 64
+ 66: 6(float) Load 65
+ 67: 23(ptr) AccessChain 35(v) 28 54
+ Store 67 66
+ 69: 44(ptr) AccessChain 43(v.clip1) 68
+ 70: 6(float) Load 69
+ 72: 23(ptr) AccessChain 35(v) 28 71
+ Store 72 70
+ 76:9(VS_OUTPUT) Load 35(v)
+ Store 75(param) 76
+ 77: 7(fvec4) FunctionCall 13(@main(struct-VS_OUTPUT-vf4-vf3-vf41;) 75(param)
+ Store 74(@entryPointOutput) 77
+ Return
+ FunctionEnd
+13(@main(struct-VS_OUTPUT-vf4-vf3-vf41;): 7(fvec4) Function None 11
+ 12(v): 10(ptr) FunctionParameter
+ 14: Label
+ 18: 17(ptr) AccessChain 12(v) 16
+ 19: 7(fvec4) Load 18
+ 24: 23(ptr) AccessChain 12(v) 20 22
+ 25: 6(float) Load 24
+ 26: 7(fvec4) CompositeConstruct 25 25 25 25
+ 27: 7(fvec4) FAdd 19 26
+ 29: 23(ptr) AccessChain 12(v) 28 22
+ 30: 6(float) Load 29
+ 31: 7(fvec4) CompositeConstruct 30 30 30 30
+ 32: 7(fvec4) FAdd 27 31
+ ReturnValue 32
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.vert.out
new file mode 100644
index 00000000000..468ea66388f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.vert.out
@@ -0,0 +1,505 @@
+hlsl.clipdistance-7.vert
+Shader version: 500
+0:? Sequence
+0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 clip0: direct index for structure ( temp 3-component vector of float)
+0:12 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0.000000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 clip0: direct index for structure ( temp 3-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1.000000
+0:14 move second child to first child ( temp float)
+0:14 direct index ( temp float)
+0:14 clip0: direct index for structure ( temp 3-component vector of float)
+0:14 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 2 (const int)
+0:14 Constant:
+0:14 2.000000
+0:17 move second child to first child ( temp float)
+0:17 direct index ( temp float)
+0:17 clip1: direct index for structure ( temp 4-component vector of float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 Constant:
+0:17 4.000000
+0:18 move second child to first child ( temp float)
+0:18 direct index ( temp float)
+0:18 clip1: direct index for structure ( temp 4-component vector of float)
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:18 Constant:
+0:18 2 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 5.000000
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 clip1: direct index for structure ( temp 4-component vector of float)
+0:19 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 6.000000
+0:20 move second child to first child ( temp float)
+0:20 direct index ( temp float)
+0:20 clip1: direct index for structure ( temp 4-component vector of float)
+0:20 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 3 (const int)
+0:20 Constant:
+0:20 7.000000
+0:22 Branch: Return with expression
+0:22 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 4 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 5 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 6 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 7 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 clip0: direct index for structure ( temp 3-component vector of float)
+0:12 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0.000000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 clip0: direct index for structure ( temp 3-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1.000000
+0:14 move second child to first child ( temp float)
+0:14 direct index ( temp float)
+0:14 clip0: direct index for structure ( temp 3-component vector of float)
+0:14 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 2 (const int)
+0:14 Constant:
+0:14 2.000000
+0:17 move second child to first child ( temp float)
+0:17 direct index ( temp float)
+0:17 clip1: direct index for structure ( temp 4-component vector of float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 0 (const int)
+0:17 Constant:
+0:17 4.000000
+0:18 move second child to first child ( temp float)
+0:18 direct index ( temp float)
+0:18 clip1: direct index for structure ( temp 4-component vector of float)
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:18 Constant:
+0:18 2 (const int)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Constant:
+0:18 5.000000
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 clip1: direct index for structure ( temp 4-component vector of float)
+0:19 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 2 (const int)
+0:19 Constant:
+0:19 6.000000
+0:20 move second child to first child ( temp float)
+0:20 direct index ( temp float)
+0:20 clip1: direct index for structure ( temp 4-component vector of float)
+0:20 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 3 (const int)
+0:20 Constant:
+0:20 7.000000
+0:22 Branch: Return with expression
+0:22 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 4 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 5 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 6 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+0:8 Constant:
+0:8 7 (const int)
+0:8 direct index ( temp float)
+0:8 clip1: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp 4-component vector of float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 Constant:
+0:8 3 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 81
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 48 54
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "VS_OUTPUT"
+ MemberName 9(VS_OUTPUT) 0 "Position"
+ MemberName 9(VS_OUTPUT) 1 "clip0"
+ MemberName 9(VS_OUTPUT) 2 "clip1"
+ Name 11 "@main("
+ Name 14 "Output"
+ Name 45 "flattenTemp"
+ Name 48 "@entryPointOutput.Position"
+ Name 54 "@entryPointOutput.clip1"
+ Decorate 48(@entryPointOutput.Position) BuiltIn Position
+ Decorate 54(@entryPointOutput.clip1) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeVector 6(float) 3
+ 9(VS_OUTPUT): TypeStruct 7(fvec4) 8(fvec3) 7(fvec4)
+ 10: TypeFunction 9(VS_OUTPUT)
+ 13: TypePointer Function 9(VS_OUTPUT)
+ 15: TypeInt 32 1
+ 16: 15(int) Constant 0
+ 17: 6(float) Constant 0
+ 18: 7(fvec4) ConstantComposite 17 17 17 17
+ 19: TypePointer Function 7(fvec4)
+ 21: 15(int) Constant 1
+ 22: TypeInt 32 0
+ 23: 22(int) Constant 0
+ 24: TypePointer Function 6(float)
+ 26: 6(float) Constant 1065353216
+ 27: 22(int) Constant 1
+ 29: 6(float) Constant 1073741824
+ 30: 22(int) Constant 2
+ 32: 15(int) Constant 2
+ 33: 6(float) Constant 1082130432
+ 35: 6(float) Constant 1084227584
+ 37: 6(float) Constant 1086324736
+ 39: 6(float) Constant 1088421888
+ 40: 22(int) Constant 3
+ 47: TypePointer Output 7(fvec4)
+48(@entryPointOutput.Position): 47(ptr) Variable Output
+ 51: 22(int) Constant 8
+ 52: TypeArray 6(float) 51
+ 53: TypePointer Output 52
+54(@entryPointOutput.clip1): 53(ptr) Variable Output
+ 57: TypePointer Output 6(float)
+ 65: 15(int) Constant 4
+ 69: 15(int) Constant 5
+ 73: 15(int) Constant 6
+ 77: 15(int) Constant 7
+ 4(main): 2 Function None 3
+ 5: Label
+ 45(flattenTemp): 13(ptr) Variable Function
+ 46:9(VS_OUTPUT) FunctionCall 11(@main()
+ Store 45(flattenTemp) 46
+ 49: 19(ptr) AccessChain 45(flattenTemp) 16
+ 50: 7(fvec4) Load 49
+ Store 48(@entryPointOutput.Position) 50
+ 55: 24(ptr) AccessChain 45(flattenTemp) 21 23
+ 56: 6(float) Load 55
+ 58: 57(ptr) AccessChain 54(@entryPointOutput.clip1) 16
+ Store 58 56
+ 59: 24(ptr) AccessChain 45(flattenTemp) 21 27
+ 60: 6(float) Load 59
+ 61: 57(ptr) AccessChain 54(@entryPointOutput.clip1) 21
+ Store 61 60
+ 62: 24(ptr) AccessChain 45(flattenTemp) 21 30
+ 63: 6(float) Load 62
+ 64: 57(ptr) AccessChain 54(@entryPointOutput.clip1) 32
+ Store 64 63
+ 66: 24(ptr) AccessChain 45(flattenTemp) 32 23
+ 67: 6(float) Load 66
+ 68: 57(ptr) AccessChain 54(@entryPointOutput.clip1) 65
+ Store 68 67
+ 70: 24(ptr) AccessChain 45(flattenTemp) 32 27
+ 71: 6(float) Load 70
+ 72: 57(ptr) AccessChain 54(@entryPointOutput.clip1) 69
+ Store 72 71
+ 74: 24(ptr) AccessChain 45(flattenTemp) 32 30
+ 75: 6(float) Load 74
+ 76: 57(ptr) AccessChain 54(@entryPointOutput.clip1) 73
+ Store 76 75
+ 78: 24(ptr) AccessChain 45(flattenTemp) 32 40
+ 79: 6(float) Load 78
+ 80: 57(ptr) AccessChain 54(@entryPointOutput.clip1) 77
+ Store 80 79
+ Return
+ FunctionEnd
+ 11(@main():9(VS_OUTPUT) Function None 10
+ 12: Label
+ 14(Output): 13(ptr) Variable Function
+ 20: 19(ptr) AccessChain 14(Output) 16
+ Store 20 18
+ 25: 24(ptr) AccessChain 14(Output) 21 23
+ Store 25 17
+ 28: 24(ptr) AccessChain 14(Output) 21 27
+ Store 28 26
+ 31: 24(ptr) AccessChain 14(Output) 21 30
+ Store 31 29
+ 34: 24(ptr) AccessChain 14(Output) 32 23
+ Store 34 33
+ 36: 24(ptr) AccessChain 14(Output) 32 27
+ Store 36 35
+ 38: 24(ptr) AccessChain 14(Output) 32 30
+ Store 38 37
+ 41: 24(ptr) AccessChain 14(Output) 32 40
+ Store 41 39
+ 42:9(VS_OUTPUT) Load 14(Output)
+ ReturnValue 42
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.frag.out
new file mode 100644
index 00000000000..6abc4b13136
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.frag.out
@@ -0,0 +1,285 @@
+hlsl.clipdistance-8.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: @main(struct-VS_OUTPUT-vf4-vf3-f11; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:? Sequence
+0:9 Branch: Return with expression
+0:9 add ( temp 4-component vector of float)
+0:9 add ( temp 4-component vector of float)
+0:9 Position: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:9 Constant:
+0:9 0 (const int)
+0:9 direct index ( temp float)
+0:9 clip0: direct index for structure ( temp 3-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:9 Constant:
+0:9 1 (const int)
+0:9 Constant:
+0:9 0 (const int)
+0:9 clip1: direct index for structure ( temp float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:9 Constant:
+0:9 2 (const int)
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 clip1: direct index for structure ( temp float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 3 (const int)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main(struct-VS_OUTPUT-vf4-vf3-f11; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: @main(struct-VS_OUTPUT-vf4-vf3-f11; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:? Sequence
+0:9 Branch: Return with expression
+0:9 add ( temp 4-component vector of float)
+0:9 add ( temp 4-component vector of float)
+0:9 Position: direct index for structure ( temp 4-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:9 Constant:
+0:9 0 (const int)
+0:9 direct index ( temp float)
+0:9 clip0: direct index for structure ( temp 3-component vector of float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:9 Constant:
+0:9 1 (const int)
+0:9 Constant:
+0:9 0 (const int)
+0:9 clip1: direct index for structure ( temp float)
+0:9 'v' ( in structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:9 Constant:
+0:9 2 (const int)
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 clip1: direct index for structure ( temp float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( in float ClipDistance)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 3 (const int)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main(struct-VS_OUTPUT-vf4-vf3-f11; ( temp 4-component vector of float)
+0:? 'v' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'v.Position' ( in 4-component vector of float FragCoord)
+0:? 'v.clip1' ( in 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 65
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 37 43 61
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "VS_OUTPUT"
+ MemberName 9(VS_OUTPUT) 0 "Position"
+ MemberName 9(VS_OUTPUT) 1 "clip0"
+ MemberName 9(VS_OUTPUT) 2 "clip1"
+ Name 13 "@main(struct-VS_OUTPUT-vf4-vf3-f11;"
+ Name 12 "v"
+ Name 35 "v"
+ Name 37 "v.Position"
+ Name 43 "v.clip1"
+ Name 61 "@entryPointOutput"
+ Name 62 "param"
+ Decorate 37(v.Position) BuiltIn FragCoord
+ Decorate 43(v.clip1) BuiltIn ClipDistance
+ Decorate 61(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeVector 6(float) 3
+ 9(VS_OUTPUT): TypeStruct 7(fvec4) 8(fvec3) 6(float)
+ 10: TypePointer Function 9(VS_OUTPUT)
+ 11: TypeFunction 7(fvec4) 10(ptr)
+ 15: TypeInt 32 1
+ 16: 15(int) Constant 0
+ 17: TypePointer Function 7(fvec4)
+ 20: 15(int) Constant 1
+ 21: TypeInt 32 0
+ 22: 21(int) Constant 0
+ 23: TypePointer Function 6(float)
+ 28: 15(int) Constant 2
+ 36: TypePointer Input 7(fvec4)
+ 37(v.Position): 36(ptr) Variable Input
+ 40: 21(int) Constant 4
+ 41: TypeArray 6(float) 40
+ 42: TypePointer Input 41
+ 43(v.clip1): 42(ptr) Variable Input
+ 44: TypePointer Input 6(float)
+ 50: 21(int) Constant 1
+ 54: 21(int) Constant 2
+ 56: 15(int) Constant 3
+ 60: TypePointer Output 7(fvec4)
+61(@entryPointOutput): 60(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 35(v): 10(ptr) Variable Function
+ 62(param): 10(ptr) Variable Function
+ 38: 7(fvec4) Load 37(v.Position)
+ 39: 17(ptr) AccessChain 35(v) 16
+ Store 39 38
+ 45: 44(ptr) AccessChain 43(v.clip1) 16
+ 46: 6(float) Load 45
+ 47: 23(ptr) AccessChain 35(v) 20 22
+ Store 47 46
+ 48: 44(ptr) AccessChain 43(v.clip1) 20
+ 49: 6(float) Load 48
+ 51: 23(ptr) AccessChain 35(v) 20 50
+ Store 51 49
+ 52: 44(ptr) AccessChain 43(v.clip1) 28
+ 53: 6(float) Load 52
+ 55: 23(ptr) AccessChain 35(v) 20 54
+ Store 55 53
+ 57: 44(ptr) AccessChain 43(v.clip1) 56
+ 58: 6(float) Load 57
+ 59: 23(ptr) AccessChain 35(v) 28
+ Store 59 58
+ 63:9(VS_OUTPUT) Load 35(v)
+ Store 62(param) 63
+ 64: 7(fvec4) FunctionCall 13(@main(struct-VS_OUTPUT-vf4-vf3-f11;) 62(param)
+ Store 61(@entryPointOutput) 64
+ Return
+ FunctionEnd
+13(@main(struct-VS_OUTPUT-vf4-vf3-f11;): 7(fvec4) Function None 11
+ 12(v): 10(ptr) FunctionParameter
+ 14: Label
+ 18: 17(ptr) AccessChain 12(v) 16
+ 19: 7(fvec4) Load 18
+ 24: 23(ptr) AccessChain 12(v) 20 22
+ 25: 6(float) Load 24
+ 26: 7(fvec4) CompositeConstruct 25 25 25 25
+ 27: 7(fvec4) FAdd 19 26
+ 29: 23(ptr) AccessChain 12(v) 28
+ 30: 6(float) Load 29
+ 31: 7(fvec4) CompositeConstruct 30 30 30 30
+ 32: 7(fvec4) FAdd 27 31
+ ReturnValue 32
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.vert.out
new file mode 100644
index 00000000000..6188f6e8f13
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.vert.out
@@ -0,0 +1,336 @@
+hlsl.clipdistance-8.vert
+Shader version: 500
+0:? Sequence
+0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 clip0: direct index for structure ( temp 3-component vector of float)
+0:12 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0.000000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 clip0: direct index for structure ( temp 3-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1.000000
+0:14 move second child to first child ( temp float)
+0:14 direct index ( temp float)
+0:14 clip0: direct index for structure ( temp 3-component vector of float)
+0:14 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 2 (const int)
+0:14 Constant:
+0:14 2.000000
+0:17 move second child to first child ( temp float)
+0:17 clip1: direct index for structure ( temp float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 3.000000
+0:19 Branch: Return with expression
+0:19 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 3 (const int)
+0:8 clip1: direct index for structure ( temp float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 clip0: direct index for structure ( temp 3-component vector of float)
+0:12 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 0 (const int)
+0:12 Constant:
+0:12 0.000000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 clip0: direct index for structure ( temp 3-component vector of float)
+0:13 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Constant:
+0:13 1.000000
+0:14 move second child to first child ( temp float)
+0:14 direct index ( temp float)
+0:14 clip0: direct index for structure ( temp 3-component vector of float)
+0:14 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 2 (const int)
+0:14 Constant:
+0:14 2.000000
+0:17 move second child to first child ( temp float)
+0:17 clip1: direct index for structure ( temp float)
+0:17 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:17 Constant:
+0:17 2 (const int)
+0:17 Constant:
+0:17 3.000000
+0:19 Branch: Return with expression
+0:19 'Output' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 0 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 0 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 1 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 2 (const int)
+0:8 direct index ( temp float)
+0:8 clip0: direct index for structure ( temp 3-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 1 (const int)
+0:8 Constant:
+0:8 2 (const int)
+0:? Sequence
+0:8 move second child to first child ( temp float)
+0:8 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+0:8 Constant:
+0:8 3 (const int)
+0:8 clip1: direct index for structure ( temp float)
+0:8 'flattenTemp' ( temp structure{ temp 4-component vector of float Position, temp 3-component vector of float clip0, temp float clip1})
+0:8 Constant:
+0:8 2 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 62
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 41 47
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "VS_OUTPUT"
+ MemberName 9(VS_OUTPUT) 0 "Position"
+ MemberName 9(VS_OUTPUT) 1 "clip0"
+ MemberName 9(VS_OUTPUT) 2 "clip1"
+ Name 11 "@main("
+ Name 14 "Output"
+ Name 38 "flattenTemp"
+ Name 41 "@entryPointOutput.Position"
+ Name 47 "@entryPointOutput.clip1"
+ Decorate 41(@entryPointOutput.Position) BuiltIn Position
+ Decorate 47(@entryPointOutput.clip1) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeVector 6(float) 3
+ 9(VS_OUTPUT): TypeStruct 7(fvec4) 8(fvec3) 6(float)
+ 10: TypeFunction 9(VS_OUTPUT)
+ 13: TypePointer Function 9(VS_OUTPUT)
+ 15: TypeInt 32 1
+ 16: 15(int) Constant 0
+ 17: 6(float) Constant 0
+ 18: 7(fvec4) ConstantComposite 17 17 17 17
+ 19: TypePointer Function 7(fvec4)
+ 21: 15(int) Constant 1
+ 22: TypeInt 32 0
+ 23: 22(int) Constant 0
+ 24: TypePointer Function 6(float)
+ 26: 6(float) Constant 1065353216
+ 27: 22(int) Constant 1
+ 29: 6(float) Constant 1073741824
+ 30: 22(int) Constant 2
+ 32: 15(int) Constant 2
+ 33: 6(float) Constant 1077936128
+ 40: TypePointer Output 7(fvec4)
+41(@entryPointOutput.Position): 40(ptr) Variable Output
+ 44: 22(int) Constant 4
+ 45: TypeArray 6(float) 44
+ 46: TypePointer Output 45
+47(@entryPointOutput.clip1): 46(ptr) Variable Output
+ 50: TypePointer Output 6(float)
+ 58: 15(int) Constant 3
+ 4(main): 2 Function None 3
+ 5: Label
+ 38(flattenTemp): 13(ptr) Variable Function
+ 39:9(VS_OUTPUT) FunctionCall 11(@main()
+ Store 38(flattenTemp) 39
+ 42: 19(ptr) AccessChain 38(flattenTemp) 16
+ 43: 7(fvec4) Load 42
+ Store 41(@entryPointOutput.Position) 43
+ 48: 24(ptr) AccessChain 38(flattenTemp) 21 23
+ 49: 6(float) Load 48
+ 51: 50(ptr) AccessChain 47(@entryPointOutput.clip1) 16
+ Store 51 49
+ 52: 24(ptr) AccessChain 38(flattenTemp) 21 27
+ 53: 6(float) Load 52
+ 54: 50(ptr) AccessChain 47(@entryPointOutput.clip1) 21
+ Store 54 53
+ 55: 24(ptr) AccessChain 38(flattenTemp) 21 30
+ 56: 6(float) Load 55
+ 57: 50(ptr) AccessChain 47(@entryPointOutput.clip1) 32
+ Store 57 56
+ 59: 24(ptr) AccessChain 38(flattenTemp) 32
+ 60: 6(float) Load 59
+ 61: 50(ptr) AccessChain 47(@entryPointOutput.clip1) 58
+ Store 61 60
+ Return
+ FunctionEnd
+ 11(@main():9(VS_OUTPUT) Function None 10
+ 12: Label
+ 14(Output): 13(ptr) Variable Function
+ 20: 19(ptr) AccessChain 14(Output) 16
+ Store 20 18
+ 25: 24(ptr) AccessChain 14(Output) 21 23
+ Store 25 17
+ 28: 24(ptr) AccessChain 14(Output) 21 27
+ Store 28 26
+ 31: 24(ptr) AccessChain 14(Output) 21 30
+ Store 31 29
+ 34: 24(ptr) AccessChain 14(Output) 32
+ Store 34 33
+ 35:9(VS_OUTPUT) Load 14(Output)
+ ReturnValue 35
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.frag.out
new file mode 100644
index 00000000000..57a722bccb6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.frag.out
@@ -0,0 +1,250 @@
+hlsl.clipdistance-9.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Function Definition: @main(vf4;vf3;f1; ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:6 'Position' ( in 4-component vector of float)
+0:6 'clip0' ( in 3-component vector of float)
+0:6 'clip1' ( in float)
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 add ( temp 4-component vector of float)
+0:7 add ( temp 4-component vector of float)
+0:7 'Position' ( in 4-component vector of float)
+0:7 direct index ( temp float)
+0:7 'clip0' ( in 3-component vector of float)
+0:7 Constant:
+0:7 0 (const int)
+0:7 'clip1' ( in float)
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? 'Position' ( temp 4-component vector of float)
+0:? 'Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 direct index ( in float ClipDistance)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+0:6 Constant:
+0:6 0 (const int)
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:6 Constant:
+0:6 1 (const int)
+0:6 direct index ( in float ClipDistance)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+0:6 Constant:
+0:6 1 (const int)
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:6 Constant:
+0:6 2 (const int)
+0:6 direct index ( in float ClipDistance)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+0:6 Constant:
+0:6 2 (const int)
+0:? Sequence
+0:6 move second child to first child ( temp float)
+0:? 'clip1' ( temp float)
+0:6 direct index ( in float ClipDistance)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+0:6 Constant:
+0:6 3 (const int)
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main(vf4;vf3;f1; ( temp 4-component vector of float)
+0:? 'Position' ( temp 4-component vector of float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:? 'clip1' ( temp float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'Position' ( in 4-component vector of float FragCoord)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Function Definition: @main(vf4;vf3;f1; ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:6 'Position' ( in 4-component vector of float)
+0:6 'clip0' ( in 3-component vector of float)
+0:6 'clip1' ( in float)
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 add ( temp 4-component vector of float)
+0:7 add ( temp 4-component vector of float)
+0:7 'Position' ( in 4-component vector of float)
+0:7 direct index ( temp float)
+0:7 'clip0' ( in 3-component vector of float)
+0:7 Constant:
+0:7 0 (const int)
+0:7 'clip1' ( in float)
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? 'Position' ( temp 4-component vector of float)
+0:? 'Position' ( in 4-component vector of float FragCoord)
+0:? Sequence
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:6 Constant:
+0:6 0 (const int)
+0:6 direct index ( in float ClipDistance)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+0:6 Constant:
+0:6 0 (const int)
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:6 Constant:
+0:6 1 (const int)
+0:6 direct index ( in float ClipDistance)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+0:6 Constant:
+0:6 1 (const int)
+0:6 move second child to first child ( temp float)
+0:6 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:6 Constant:
+0:6 2 (const int)
+0:6 direct index ( in float ClipDistance)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+0:6 Constant:
+0:6 2 (const int)
+0:? Sequence
+0:6 move second child to first child ( temp float)
+0:? 'clip1' ( temp float)
+0:6 direct index ( in float ClipDistance)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+0:6 Constant:
+0:6 3 (const int)
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main(vf4;vf3;f1; ( temp 4-component vector of float)
+0:? 'Position' ( temp 4-component vector of float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:? 'clip1' ( temp float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'Position' ( in 4-component vector of float FragCoord)
+0:? 'clip0' ( in 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 68
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 32 38 60
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 16 "@main(vf4;vf3;f1;"
+ Name 13 "Position"
+ Name 14 "clip0"
+ Name 15 "clip1"
+ Name 30 "Position"
+ Name 32 "Position"
+ Name 34 "clip0"
+ Name 38 "clip0"
+ Name 55 "clip1"
+ Name 60 "@entryPointOutput"
+ Name 61 "param"
+ Name 63 "param"
+ Name 65 "param"
+ Decorate 32(Position) BuiltIn FragCoord
+ Decorate 38(clip0) BuiltIn ClipDistance
+ Decorate 60(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeVector 6(float) 3
+ 10: TypePointer Function 9(fvec3)
+ 11: TypePointer Function 6(float)
+ 12: TypeFunction 7(fvec4) 8(ptr) 10(ptr) 11(ptr)
+ 19: TypeInt 32 0
+ 20: 19(int) Constant 0
+ 31: TypePointer Input 7(fvec4)
+ 32(Position): 31(ptr) Variable Input
+ 35: 19(int) Constant 4
+ 36: TypeArray 6(float) 35
+ 37: TypePointer Input 36
+ 38(clip0): 37(ptr) Variable Input
+ 39: TypeInt 32 1
+ 40: 39(int) Constant 0
+ 41: TypePointer Input 6(float)
+ 45: 39(int) Constant 1
+ 48: 19(int) Constant 1
+ 50: 39(int) Constant 2
+ 53: 19(int) Constant 2
+ 56: 39(int) Constant 3
+ 59: TypePointer Output 7(fvec4)
+60(@entryPointOutput): 59(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 30(Position): 8(ptr) Variable Function
+ 34(clip0): 10(ptr) Variable Function
+ 55(clip1): 11(ptr) Variable Function
+ 61(param): 8(ptr) Variable Function
+ 63(param): 10(ptr) Variable Function
+ 65(param): 11(ptr) Variable Function
+ 33: 7(fvec4) Load 32(Position)
+ Store 30(Position) 33
+ 42: 41(ptr) AccessChain 38(clip0) 40
+ 43: 6(float) Load 42
+ 44: 11(ptr) AccessChain 34(clip0) 20
+ Store 44 43
+ 46: 41(ptr) AccessChain 38(clip0) 45
+ 47: 6(float) Load 46
+ 49: 11(ptr) AccessChain 34(clip0) 48
+ Store 49 47
+ 51: 41(ptr) AccessChain 38(clip0) 50
+ 52: 6(float) Load 51
+ 54: 11(ptr) AccessChain 34(clip0) 53
+ Store 54 52
+ 57: 41(ptr) AccessChain 38(clip0) 56
+ 58: 6(float) Load 57
+ Store 55(clip1) 58
+ 62: 7(fvec4) Load 30(Position)
+ Store 61(param) 62
+ 64: 9(fvec3) Load 34(clip0)
+ Store 63(param) 64
+ 66: 6(float) Load 55(clip1)
+ Store 65(param) 66
+ 67: 7(fvec4) FunctionCall 16(@main(vf4;vf3;f1;) 61(param) 63(param) 65(param)
+ Store 60(@entryPointOutput) 67
+ Return
+ FunctionEnd
+16(@main(vf4;vf3;f1;): 7(fvec4) Function None 12
+ 13(Position): 8(ptr) FunctionParameter
+ 14(clip0): 10(ptr) FunctionParameter
+ 15(clip1): 11(ptr) FunctionParameter
+ 17: Label
+ 18: 7(fvec4) Load 13(Position)
+ 21: 11(ptr) AccessChain 14(clip0) 20
+ 22: 6(float) Load 21
+ 23: 7(fvec4) CompositeConstruct 22 22 22 22
+ 24: 7(fvec4) FAdd 18 23
+ 25: 6(float) Load 15(clip1)
+ 26: 7(fvec4) CompositeConstruct 25 25 25 25
+ 27: 7(fvec4) FAdd 24 26
+ ReturnValue 27
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.vert.out
new file mode 100644
index 00000000000..1dc83551713
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.vert.out
@@ -0,0 +1,299 @@
+hlsl.clipdistance-9.vert
+Shader version: 500
+0:? Sequence
+0:7 Function Definition: @main(vf3;f1; ( temp structure{ temp 4-component vector of float Position})
+0:7 Function Parameters:
+0:7 'clip0' ( out 3-component vector of float)
+0:7 'clip1' ( out float)
+0:? Sequence
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 Position: direct index for structure ( temp 4-component vector of float)
+0:9 'Output' ( temp structure{ temp 4-component vector of float Position})
+0:9 Constant:
+0:9 0 (const int)
+0:9 Constant:
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 'clip0' ( out 3-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0.000000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 'clip0' ( out 3-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 1.000000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 'clip0' ( out 3-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 2.000000
+0:16 move second child to first child ( temp float)
+0:16 'clip1' ( out float)
+0:16 Constant:
+0:16 3.000000
+0:18 Branch: Return with expression
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position})
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:7 Position: direct index for structure ( temp 4-component vector of float)
+0:7 Function Call: @main(vf3;f1; ( temp structure{ temp 4-component vector of float Position})
+0:? 'clip0' ( temp 3-component vector of float)
+0:? 'clip1' ( temp float)
+0:7 Constant:
+0:7 0 (const int)
+0:? Sequence
+0:7 move second child to first child ( temp float)
+0:7 direct index ( out float ClipDistance)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:7 Constant:
+0:7 0 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( out float ClipDistance)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 1 (const int)
+0:7 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:7 Constant:
+0:7 1 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( out float ClipDistance)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 2 (const int)
+0:7 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:7 Constant:
+0:7 2 (const int)
+0:? Sequence
+0:7 move second child to first child ( temp float)
+0:7 direct index ( out float ClipDistance)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 3 (const int)
+0:? 'clip1' ( temp float)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:7 Function Definition: @main(vf3;f1; ( temp structure{ temp 4-component vector of float Position})
+0:7 Function Parameters:
+0:7 'clip0' ( out 3-component vector of float)
+0:7 'clip1' ( out float)
+0:? Sequence
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 Position: direct index for structure ( temp 4-component vector of float)
+0:9 'Output' ( temp structure{ temp 4-component vector of float Position})
+0:9 Constant:
+0:9 0 (const int)
+0:9 Constant:
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:11 move second child to first child ( temp float)
+0:11 direct index ( temp float)
+0:11 'clip0' ( out 3-component vector of float)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Constant:
+0:11 0.000000
+0:12 move second child to first child ( temp float)
+0:12 direct index ( temp float)
+0:12 'clip0' ( out 3-component vector of float)
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 1.000000
+0:13 move second child to first child ( temp float)
+0:13 direct index ( temp float)
+0:13 'clip0' ( out 3-component vector of float)
+0:13 Constant:
+0:13 2 (const int)
+0:13 Constant:
+0:13 2.000000
+0:16 move second child to first child ( temp float)
+0:16 'clip1' ( out float)
+0:16 Constant:
+0:16 3.000000
+0:18 Branch: Return with expression
+0:18 'Output' ( temp structure{ temp 4-component vector of float Position})
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:7 Position: direct index for structure ( temp 4-component vector of float)
+0:7 Function Call: @main(vf3;f1; ( temp structure{ temp 4-component vector of float Position})
+0:? 'clip0' ( temp 3-component vector of float)
+0:? 'clip1' ( temp float)
+0:7 Constant:
+0:7 0 (const int)
+0:? Sequence
+0:7 move second child to first child ( temp float)
+0:7 direct index ( out float ClipDistance)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:7 Constant:
+0:7 0 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( out float ClipDistance)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 1 (const int)
+0:7 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:7 Constant:
+0:7 1 (const int)
+0:7 move second child to first child ( temp float)
+0:7 direct index ( out float ClipDistance)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 2 (const int)
+0:7 direct index ( temp float)
+0:? 'clip0' ( temp 3-component vector of float)
+0:7 Constant:
+0:7 2 (const int)
+0:? Sequence
+0:7 move second child to first child ( temp float)
+0:7 direct index ( out float ClipDistance)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+0:7 Constant:
+0:7 3 (const int)
+0:? 'clip1' ( temp float)
+0:? Linker Objects
+0:? '@entryPointOutput.Position' ( out 4-component vector of float Position)
+0:? 'clip0' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 67
+
+ Capability Shader
+ Capability ClipDistance
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 39 51
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "VS_OUTPUT"
+ MemberName 11(VS_OUTPUT) 0 "Position"
+ Name 15 "@main(vf3;f1;"
+ Name 13 "clip0"
+ Name 14 "clip1"
+ Name 18 "Output"
+ Name 39 "@entryPointOutput.Position"
+ Name 40 "clip0"
+ Name 41 "clip1"
+ Name 42 "param"
+ Name 43 "param"
+ Name 51 "clip0"
+ Decorate 39(@entryPointOutput.Position) BuiltIn Position
+ Decorate 51(clip0) BuiltIn ClipDistance
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 3
+ 8: TypePointer Function 7(fvec3)
+ 9: TypePointer Function 6(float)
+ 10: TypeVector 6(float) 4
+ 11(VS_OUTPUT): TypeStruct 10(fvec4)
+ 12: TypeFunction 11(VS_OUTPUT) 8(ptr) 9(ptr)
+ 17: TypePointer Function 11(VS_OUTPUT)
+ 19: TypeInt 32 1
+ 20: 19(int) Constant 0
+ 21: 6(float) Constant 0
+ 22: 10(fvec4) ConstantComposite 21 21 21 21
+ 23: TypePointer Function 10(fvec4)
+ 25: TypeInt 32 0
+ 26: 25(int) Constant 0
+ 28: 6(float) Constant 1065353216
+ 29: 25(int) Constant 1
+ 31: 6(float) Constant 1073741824
+ 32: 25(int) Constant 2
+ 34: 6(float) Constant 1077936128
+ 38: TypePointer Output 10(fvec4)
+39(@entryPointOutput.Position): 38(ptr) Variable Output
+ 48: 25(int) Constant 4
+ 49: TypeArray 6(float) 48
+ 50: TypePointer Output 49
+ 51(clip0): 50(ptr) Variable Output
+ 54: TypePointer Output 6(float)
+ 56: 19(int) Constant 1
+ 60: 19(int) Constant 2
+ 64: 19(int) Constant 3
+ 4(main): 2 Function None 3
+ 5: Label
+ 40(clip0): 8(ptr) Variable Function
+ 41(clip1): 9(ptr) Variable Function
+ 42(param): 8(ptr) Variable Function
+ 43(param): 9(ptr) Variable Function
+ 44:11(VS_OUTPUT) FunctionCall 15(@main(vf3;f1;) 42(param) 43(param)
+ 45: 7(fvec3) Load 42(param)
+ Store 40(clip0) 45
+ 46: 6(float) Load 43(param)
+ Store 41(clip1) 46
+ 47: 10(fvec4) CompositeExtract 44 0
+ Store 39(@entryPointOutput.Position) 47
+ 52: 9(ptr) AccessChain 40(clip0) 26
+ 53: 6(float) Load 52
+ 55: 54(ptr) AccessChain 51(clip0) 20
+ Store 55 53
+ 57: 9(ptr) AccessChain 40(clip0) 29
+ 58: 6(float) Load 57
+ 59: 54(ptr) AccessChain 51(clip0) 56
+ Store 59 58
+ 61: 9(ptr) AccessChain 40(clip0) 32
+ 62: 6(float) Load 61
+ 63: 54(ptr) AccessChain 51(clip0) 60
+ Store 63 62
+ 65: 6(float) Load 41(clip1)
+ 66: 54(ptr) AccessChain 51(clip0) 64
+ Store 66 65
+ Return
+ FunctionEnd
+15(@main(vf3;f1;):11(VS_OUTPUT) Function None 12
+ 13(clip0): 8(ptr) FunctionParameter
+ 14(clip1): 9(ptr) FunctionParameter
+ 16: Label
+ 18(Output): 17(ptr) Variable Function
+ 24: 23(ptr) AccessChain 18(Output) 20
+ Store 24 22
+ 27: 9(ptr) AccessChain 13(clip0) 26
+ Store 27 21
+ 30: 9(ptr) AccessChain 13(clip0) 29
+ Store 30 28
+ 33: 9(ptr) AccessChain 13(clip0) 32
+ Store 33 31
+ Store 14(clip1) 34
+ 35:11(VS_OUTPUT) Load 18(Output)
+ ReturnValue 35
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out
index dacdb7717c0..e2d4637b0c0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out
@@ -1,5 +1,5 @@
hlsl.comparison.vec.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: Bug1(vf4; ( temp void)
@@ -119,20 +119,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:30 Sequence
0:30 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:30 Color: direct index for structure ( temp 4-component vector of float)
0:30 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:30 Constant:
0:30 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: Bug1(vf4; ( temp void)
@@ -252,17 +252,17 @@ gl_FragCoord origin is upper left
0:? Sequence
0:30 Sequence
0:30 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:30 Color: direct index for structure ( temp 4-component vector of float)
0:30 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:30 Constant:
0:30 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 96
Capability Shader
@@ -270,6 +270,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 90
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "Bug1(vf4;"
Name 10 "a"
@@ -291,11 +292,11 @@ gl_FragCoord origin is upper left
Name 71 "r22"
Name 76 "r23"
Name 82 "psout"
- Name 90 "Color"
+ Name 90 "@entryPointOutput.Color"
Name 93 "$Global"
MemberName 93($Global) 0 "uf4"
Name 95 ""
- Decorate 90(Color) Location 0
+ Decorate 90(@entryPointOutput.Color) Location 0
MemberDecorate 93($Global) 0 Offset 0
Decorate 93($Global) Block
Decorate 95 DescriptorSet 0
@@ -317,7 +318,7 @@ gl_FragCoord origin is upper left
83: TypeInt 32 1
84: 83(int) Constant 0
89: TypePointer Output 7(fvec4)
- 90(Color): 89(ptr) Variable Output
+90(@entryPointOutput.Color): 89(ptr) Variable Output
93($Global): TypeStruct 7(fvec4)
94: TypePointer Uniform 93($Global)
95: 94(ptr) Variable Uniform
@@ -325,7 +326,7 @@ gl_FragCoord origin is upper left
5: Label
91:13(PS_OUTPUT) FunctionCall 15(@main()
92: 7(fvec4) CompositeExtract 91 0
- Store 90(Color) 92
+ Store 90(@entryPointOutput.Color) 92
Return
FunctionEnd
11(Bug1(vf4;): 2 Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out
index cd0abf815a1..bbcfd5584f8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out
@@ -1,121 +1,260 @@
hlsl.conditional.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2 Function Parameters:
-0:2 'input' ( in 4-component vector of float)
+0:8 Function Definition: vectorCond( ( temp 4-component vector of float)
+0:8 Function Parameters:
0:? Sequence
-0:3 Sequence
-0:3 move second child to first child ( temp int)
-0:3 'a' ( temp int)
-0:3 Constant:
-0:3 5 (const int)
-0:4 Sequence
-0:4 move second child to first child ( temp int)
-0:4 'b' ( temp int)
-0:4 Constant:
-0:4 6 (const int)
-0:5 Sequence
-0:5 move second child to first child ( temp int)
-0:5 'c' ( temp int)
-0:5 Constant:
-0:5 7 (const int)
-0:6 Sequence
-0:6 move second child to first child ( temp int)
-0:6 'd' ( temp int)
-0:6 Constant:
-0:6 7 (const int)
-0:7 Sequence
-0:7 move second child to first child ( temp 4-component vector of float)
-0:7 'ret' ( temp 4-component vector of float)
-0:9 add ( temp 4-component vector of float)
-0:8 add ( temp 4-component vector of float)
-0:7 add ( temp 4-component vector of float)
-0:7 vector-scale ( temp 4-component vector of float)
-0:7 Convert int to float ( temp float)
-0:7 'a' ( temp int)
-0:7 'input' ( in 4-component vector of float)
-0:8 vector-scale ( temp 4-component vector of float)
-0:8 Convert int to float ( temp float)
-0:8 'b' ( temp int)
-0:8 'input' ( in 4-component vector of float)
-0:9 vector-scale ( temp 4-component vector of float)
-0:9 Convert int to float ( temp float)
-0:9 'c' ( temp int)
-0:9 'input' ( in 4-component vector of float)
-0:10 vector-scale ( temp 4-component vector of float)
-0:10 Convert int to float ( temp float)
-0:10 'd' ( temp int)
-0:10 'input' ( in 4-component vector of float)
-0:12 Comma ( temp int)
-0:12 move second child to first child ( temp int)
-0:12 'e' ( temp int)
-0:12 move second child to first child ( temp int)
-0:12 'a' ( temp int)
-0:12 Test condition and select ( temp int)
-0:12 Condition
-0:12 'b' ( temp int)
-0:12 true case
-0:12 move second child to first child ( temp int)
-0:12 'c' ( temp int)
-0:12 'd' ( temp int)
-0:12 false case
+0:12 Branch: Return with expression
+0:11 add ( temp 4-component vector of float)
+0:10 add ( temp 4-component vector of float)
+0:9 add ( temp 4-component vector of float)
+0:9 mix ( temp 4-component vector of float)
+0:9 f4: direct index for structure ( uniform 4-component vector of float)
+0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:9 Constant:
+0:9 2 (const uint)
+0:9 t4: direct index for structure ( uniform 4-component vector of float)
+0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:9 Constant:
+0:9 1 (const uint)
+0:9 Convert float to bool ( temp 4-component vector of bool)
+0:9 c4: direct index for structure ( uniform 4-component vector of float)
+0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:9 Constant:
+0:9 0 (const uint)
+0:10 mix ( temp 4-component vector of float)
+0:10 Construct vec4 ( temp 4-component vector of float)
+0:10 f: direct index for structure ( uniform float)
+0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:10 Constant:
+0:10 4 (const uint)
+0:10 Construct vec4 ( temp 4-component vector of float)
+0:10 t: direct index for structure ( uniform float)
+0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:10 Constant:
+0:10 3 (const uint)
+0:10 Convert float to bool ( temp 4-component vector of bool)
+0:10 c4: direct index for structure ( uniform 4-component vector of float)
+0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:10 Constant:
+0:10 0 (const uint)
+0:11 mix ( temp 4-component vector of float)
+0:11 f4: direct index for structure ( uniform 4-component vector of float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:11 Constant:
+0:11 2 (const uint)
+0:11 t4: direct index for structure ( uniform 4-component vector of float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:11 Constant:
+0:11 1 (const uint)
+0:11 Compare Less Than ( temp 4-component vector of bool)
+0:11 t4: direct index for structure ( uniform 4-component vector of float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:11 Constant:
+0:11 1 (const uint)
+0:11 f4: direct index for structure ( uniform 4-component vector of float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:11 Constant:
+0:11 2 (const uint)
+0:12 mix ( temp 4-component vector of float)
+0:12 f4: direct index for structure ( uniform 4-component vector of float)
+0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:12 Constant:
-0:12 10 (const int)
-0:12 move second child to first child ( temp int)
-0:12 'b' ( temp int)
-0:12 Test condition and select ( temp int)
-0:12 Condition
-0:12 'a' ( temp int)
-0:12 true case
-0:12 move second child to first child ( temp int)
-0:12 'd' ( temp int)
-0:12 'c' ( temp int)
-0:12 false case
-0:12 Constant:
-0:12 11 (const int)
-0:14 move second child to first child ( temp 4-component vector of float)
-0:14 'f' ( temp 4-component vector of float)
-0:14 Test condition and select ( temp 4-component vector of float)
-0:14 Condition
-0:14 Compare Less Than ( temp bool)
-0:14 direct index ( temp float)
-0:14 'ret' ( temp 4-component vector of float)
-0:14 Constant:
-0:14 0 (const int)
-0:14 direct index ( temp float)
-0:14 'input' ( in 4-component vector of float)
-0:14 Constant:
-0:14 1 (const int)
-0:14 true case
-0:14 vector-scale ( temp 4-component vector of float)
-0:14 Convert int to float ( temp float)
-0:14 'c' ( temp int)
-0:14 'input' ( in 4-component vector of float)
-0:14 false case
-0:14 vector-scale ( temp 4-component vector of float)
-0:14 Convert int to float ( temp float)
-0:14 'd' ( temp int)
-0:14 'input' ( in 4-component vector of float)
-0:15 Branch: Return with expression
-0:15 add ( temp 4-component vector of float)
-0:15 vector-scale ( temp 4-component vector of float)
-0:15 Convert int to float ( temp float)
-0:15 'e' ( temp int)
-0:15 'ret' ( temp 4-component vector of float)
-0:15 'f' ( temp 4-component vector of float)
-0:2 Function Definition: PixelShaderFunction( ( temp void)
-0:2 Function Parameters:
+0:12 2 (const uint)
+0:12 Construct vec4 ( temp 4-component vector of float)
+0:12 t: direct index for structure ( uniform float)
+0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:12 Constant:
+0:12 3 (const uint)
+0:12 Convert float to bool ( temp 4-component vector of bool)
+0:12 c4: direct index for structure ( uniform 4-component vector of float)
+0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:12 Constant:
+0:12 0 (const uint)
+0:16 Function Definition: scalarCond( ( temp 4-component vector of float)
+0:16 Function Parameters:
0:? Sequence
-0:2 move second child to first child ( temp 4-component vector of float)
+0:17 Sequence
+0:17 move second child to first child ( temp 4-component vector of float)
+0:17 'ret' ( temp 4-component vector of float)
+0:17 Test condition and select ( temp 4-component vector of float)
+0:17 Condition
+0:17 Compare Not Equal ( temp bool)
+0:17 t: direct index for structure ( uniform float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:17 Constant:
+0:17 3 (const uint)
+0:17 f: direct index for structure ( uniform float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:17 Constant:
+0:17 4 (const uint)
+0:17 true case
+0:17 vector-scale ( temp 4-component vector of float)
+0:17 t: direct index for structure ( uniform float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:17 Constant:
+0:17 3 (const uint)
+0:17 f4: direct index for structure ( uniform 4-component vector of float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:17 Constant:
+0:17 2 (const uint)
+0:17 false case
+0:17 Constant:
+0:17 1.000000
+0:17 1.000000
+0:17 1.000000
+0:17 1.000000
+0:18 Branch: Return with expression
+0:18 'ret' ( temp 4-component vector of float)
+0:22 Function Definition: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
+0:22 Function Parameters:
+0:22 'cnd' ( in 2-component vector of bool)
+0:22 'src0' ( in 2-component vector of float)
+0:22 'src1' ( in 2-component vector of float)
+0:? Sequence
+0:23 Branch: Return with expression
+0:23 mix ( temp 2-component vector of float)
+0:23 'src1' ( in 2-component vector of float)
+0:23 'src0' ( in 2-component vector of float)
+0:23 'cnd' ( in 2-component vector of bool)
+0:27 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:27 Function Parameters:
+0:27 'input' ( in 4-component vector of float)
+0:? Sequence
+0:28 Sequence
+0:28 move second child to first child ( temp int)
+0:28 'a' ( temp int)
+0:28 Constant:
+0:28 5 (const int)
+0:29 Sequence
+0:29 move second child to first child ( temp int)
+0:29 'b' ( temp int)
+0:29 Constant:
+0:29 6 (const int)
+0:30 Sequence
+0:30 move second child to first child ( temp int)
+0:30 'c' ( temp int)
+0:30 Constant:
+0:30 7 (const int)
+0:31 Sequence
+0:31 move second child to first child ( temp int)
+0:31 'd' ( temp int)
+0:31 Constant:
+0:31 7 (const int)
+0:32 Sequence
+0:32 move second child to first child ( temp 4-component vector of float)
+0:32 'ret' ( temp 4-component vector of float)
+0:34 add ( temp 4-component vector of float)
+0:33 add ( temp 4-component vector of float)
+0:32 add ( temp 4-component vector of float)
+0:32 vector-scale ( temp 4-component vector of float)
+0:32 Convert int to float ( temp float)
+0:32 'a' ( temp int)
+0:32 'input' ( in 4-component vector of float)
+0:33 vector-scale ( temp 4-component vector of float)
+0:33 Convert int to float ( temp float)
+0:33 'b' ( temp int)
+0:33 'input' ( in 4-component vector of float)
+0:34 vector-scale ( temp 4-component vector of float)
+0:34 Convert int to float ( temp float)
+0:34 'c' ( temp int)
+0:34 'input' ( in 4-component vector of float)
+0:35 vector-scale ( temp 4-component vector of float)
+0:35 Convert int to float ( temp float)
+0:35 'd' ( temp int)
+0:35 'input' ( in 4-component vector of float)
+0:37 Comma ( temp int)
+0:37 move second child to first child ( temp int)
+0:37 'e' ( temp int)
+0:37 move second child to first child ( temp int)
+0:37 'a' ( temp int)
+0:37 Test condition and select ( temp int)
+0:37 Condition
+0:37 Convert int to bool ( temp bool)
+0:37 'b' ( temp int)
+0:37 true case
+0:37 move second child to first child ( temp int)
+0:37 'c' ( temp int)
+0:37 'd' ( temp int)
+0:37 false case
+0:37 Constant:
+0:37 10 (const int)
+0:37 move second child to first child ( temp int)
+0:37 'b' ( temp int)
+0:37 Test condition and select ( temp int)
+0:37 Condition
+0:37 Convert int to bool ( temp bool)
+0:37 'a' ( temp int)
+0:37 true case
+0:37 move second child to first child ( temp int)
+0:37 'd' ( temp int)
+0:37 'c' ( temp int)
+0:37 false case
+0:37 Constant:
+0:37 11 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 'f' ( temp 4-component vector of float)
+0:39 Test condition and select ( temp 4-component vector of float)
+0:39 Condition
+0:39 Compare Less Than ( temp bool)
+0:39 direct index ( temp float)
+0:39 'ret' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( temp float)
+0:39 'input' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const int)
+0:39 true case
+0:39 vector-scale ( temp 4-component vector of float)
+0:39 Convert int to float ( temp float)
+0:39 'c' ( temp int)
+0:39 'input' ( in 4-component vector of float)
+0:39 false case
+0:39 vector-scale ( temp 4-component vector of float)
+0:39 Convert int to float ( temp float)
+0:39 'd' ( temp int)
+0:39 'input' ( in 4-component vector of float)
+0:41 Branch: Return with expression
+0:40 add ( temp 4-component vector of float)
+0:40 add ( temp 4-component vector of float)
+0:40 add ( temp 4-component vector of float)
+0:40 add ( temp 4-component vector of float)
+0:40 vector-scale ( temp 4-component vector of float)
+0:40 Convert int to float ( temp float)
+0:40 'e' ( temp int)
+0:40 'ret' ( temp 4-component vector of float)
+0:40 'f' ( temp 4-component vector of float)
+0:40 Function Call: vectorCond( ( temp 4-component vector of float)
+0:40 Function Call: scalarCond( ( temp 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
+0:? Constant:
+0:? true (const bool)
+0:? false (const bool)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? Constant:
+0:? 3.000000
+0:? 4.000000
+0:41 Constant:
+0:41 10.000000
+0:41 Constant:
+0:41 10.000000
+0:27 Function Definition: PixelShaderFunction( ( temp void)
+0:27 Function Parameters:
+0:? Sequence
+0:27 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
-0:2 move second child to first child ( temp 4-component vector of float)
+0:27 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:27 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
@@ -123,280 +262,574 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2 Function Parameters:
-0:2 'input' ( in 4-component vector of float)
+0:8 Function Definition: vectorCond( ( temp 4-component vector of float)
+0:8 Function Parameters:
0:? Sequence
-0:3 Sequence
-0:3 move second child to first child ( temp int)
-0:3 'a' ( temp int)
-0:3 Constant:
-0:3 5 (const int)
-0:4 Sequence
-0:4 move second child to first child ( temp int)
-0:4 'b' ( temp int)
-0:4 Constant:
-0:4 6 (const int)
-0:5 Sequence
-0:5 move second child to first child ( temp int)
-0:5 'c' ( temp int)
-0:5 Constant:
-0:5 7 (const int)
-0:6 Sequence
-0:6 move second child to first child ( temp int)
-0:6 'd' ( temp int)
-0:6 Constant:
-0:6 7 (const int)
-0:7 Sequence
-0:7 move second child to first child ( temp 4-component vector of float)
-0:7 'ret' ( temp 4-component vector of float)
-0:9 add ( temp 4-component vector of float)
-0:8 add ( temp 4-component vector of float)
-0:7 add ( temp 4-component vector of float)
-0:7 vector-scale ( temp 4-component vector of float)
-0:7 Convert int to float ( temp float)
-0:7 'a' ( temp int)
-0:7 'input' ( in 4-component vector of float)
-0:8 vector-scale ( temp 4-component vector of float)
-0:8 Convert int to float ( temp float)
-0:8 'b' ( temp int)
-0:8 'input' ( in 4-component vector of float)
-0:9 vector-scale ( temp 4-component vector of float)
-0:9 Convert int to float ( temp float)
-0:9 'c' ( temp int)
-0:9 'input' ( in 4-component vector of float)
-0:10 vector-scale ( temp 4-component vector of float)
-0:10 Convert int to float ( temp float)
-0:10 'd' ( temp int)
-0:10 'input' ( in 4-component vector of float)
-0:12 Comma ( temp int)
-0:12 move second child to first child ( temp int)
-0:12 'e' ( temp int)
-0:12 move second child to first child ( temp int)
-0:12 'a' ( temp int)
-0:12 Test condition and select ( temp int)
-0:12 Condition
-0:12 'b' ( temp int)
-0:12 true case
-0:12 move second child to first child ( temp int)
-0:12 'c' ( temp int)
-0:12 'd' ( temp int)
-0:12 false case
+0:12 Branch: Return with expression
+0:11 add ( temp 4-component vector of float)
+0:10 add ( temp 4-component vector of float)
+0:9 add ( temp 4-component vector of float)
+0:9 mix ( temp 4-component vector of float)
+0:9 f4: direct index for structure ( uniform 4-component vector of float)
+0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:9 Constant:
+0:9 2 (const uint)
+0:9 t4: direct index for structure ( uniform 4-component vector of float)
+0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:9 Constant:
+0:9 1 (const uint)
+0:9 Convert float to bool ( temp 4-component vector of bool)
+0:9 c4: direct index for structure ( uniform 4-component vector of float)
+0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:9 Constant:
+0:9 0 (const uint)
+0:10 mix ( temp 4-component vector of float)
+0:10 Construct vec4 ( temp 4-component vector of float)
+0:10 f: direct index for structure ( uniform float)
+0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:10 Constant:
+0:10 4 (const uint)
+0:10 Construct vec4 ( temp 4-component vector of float)
+0:10 t: direct index for structure ( uniform float)
+0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:10 Constant:
+0:10 3 (const uint)
+0:10 Convert float to bool ( temp 4-component vector of bool)
+0:10 c4: direct index for structure ( uniform 4-component vector of float)
+0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:10 Constant:
+0:10 0 (const uint)
+0:11 mix ( temp 4-component vector of float)
+0:11 f4: direct index for structure ( uniform 4-component vector of float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:11 Constant:
+0:11 2 (const uint)
+0:11 t4: direct index for structure ( uniform 4-component vector of float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:11 Constant:
+0:11 1 (const uint)
+0:11 Compare Less Than ( temp 4-component vector of bool)
+0:11 t4: direct index for structure ( uniform 4-component vector of float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:11 Constant:
+0:11 1 (const uint)
+0:11 f4: direct index for structure ( uniform 4-component vector of float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:11 Constant:
+0:11 2 (const uint)
+0:12 mix ( temp 4-component vector of float)
+0:12 f4: direct index for structure ( uniform 4-component vector of float)
+0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:12 Constant:
-0:12 10 (const int)
-0:12 move second child to first child ( temp int)
-0:12 'b' ( temp int)
-0:12 Test condition and select ( temp int)
-0:12 Condition
-0:12 'a' ( temp int)
-0:12 true case
-0:12 move second child to first child ( temp int)
-0:12 'd' ( temp int)
-0:12 'c' ( temp int)
-0:12 false case
-0:12 Constant:
-0:12 11 (const int)
-0:14 move second child to first child ( temp 4-component vector of float)
-0:14 'f' ( temp 4-component vector of float)
-0:14 Test condition and select ( temp 4-component vector of float)
-0:14 Condition
-0:14 Compare Less Than ( temp bool)
-0:14 direct index ( temp float)
-0:14 'ret' ( temp 4-component vector of float)
-0:14 Constant:
-0:14 0 (const int)
-0:14 direct index ( temp float)
-0:14 'input' ( in 4-component vector of float)
-0:14 Constant:
-0:14 1 (const int)
-0:14 true case
-0:14 vector-scale ( temp 4-component vector of float)
-0:14 Convert int to float ( temp float)
-0:14 'c' ( temp int)
-0:14 'input' ( in 4-component vector of float)
-0:14 false case
-0:14 vector-scale ( temp 4-component vector of float)
-0:14 Convert int to float ( temp float)
-0:14 'd' ( temp int)
-0:14 'input' ( in 4-component vector of float)
-0:15 Branch: Return with expression
-0:15 add ( temp 4-component vector of float)
-0:15 vector-scale ( temp 4-component vector of float)
-0:15 Convert int to float ( temp float)
-0:15 'e' ( temp int)
-0:15 'ret' ( temp 4-component vector of float)
-0:15 'f' ( temp 4-component vector of float)
-0:2 Function Definition: PixelShaderFunction( ( temp void)
-0:2 Function Parameters:
+0:12 2 (const uint)
+0:12 Construct vec4 ( temp 4-component vector of float)
+0:12 t: direct index for structure ( uniform float)
+0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:12 Constant:
+0:12 3 (const uint)
+0:12 Convert float to bool ( temp 4-component vector of bool)
+0:12 c4: direct index for structure ( uniform 4-component vector of float)
+0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:12 Constant:
+0:12 0 (const uint)
+0:16 Function Definition: scalarCond( ( temp 4-component vector of float)
+0:16 Function Parameters:
+0:? Sequence
+0:17 Sequence
+0:17 move second child to first child ( temp 4-component vector of float)
+0:17 'ret' ( temp 4-component vector of float)
+0:17 Test condition and select ( temp 4-component vector of float)
+0:17 Condition
+0:17 Compare Not Equal ( temp bool)
+0:17 t: direct index for structure ( uniform float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:17 Constant:
+0:17 3 (const uint)
+0:17 f: direct index for structure ( uniform float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:17 Constant:
+0:17 4 (const uint)
+0:17 true case
+0:17 vector-scale ( temp 4-component vector of float)
+0:17 t: direct index for structure ( uniform float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:17 Constant:
+0:17 3 (const uint)
+0:17 f4: direct index for structure ( uniform 4-component vector of float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
+0:17 Constant:
+0:17 2 (const uint)
+0:17 false case
+0:17 Constant:
+0:17 1.000000
+0:17 1.000000
+0:17 1.000000
+0:17 1.000000
+0:18 Branch: Return with expression
+0:18 'ret' ( temp 4-component vector of float)
+0:22 Function Definition: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
+0:22 Function Parameters:
+0:22 'cnd' ( in 2-component vector of bool)
+0:22 'src0' ( in 2-component vector of float)
+0:22 'src1' ( in 2-component vector of float)
+0:? Sequence
+0:23 Branch: Return with expression
+0:23 mix ( temp 2-component vector of float)
+0:23 'src1' ( in 2-component vector of float)
+0:23 'src0' ( in 2-component vector of float)
+0:23 'cnd' ( in 2-component vector of bool)
+0:27 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:27 Function Parameters:
+0:27 'input' ( in 4-component vector of float)
0:? Sequence
-0:2 move second child to first child ( temp 4-component vector of float)
+0:28 Sequence
+0:28 move second child to first child ( temp int)
+0:28 'a' ( temp int)
+0:28 Constant:
+0:28 5 (const int)
+0:29 Sequence
+0:29 move second child to first child ( temp int)
+0:29 'b' ( temp int)
+0:29 Constant:
+0:29 6 (const int)
+0:30 Sequence
+0:30 move second child to first child ( temp int)
+0:30 'c' ( temp int)
+0:30 Constant:
+0:30 7 (const int)
+0:31 Sequence
+0:31 move second child to first child ( temp int)
+0:31 'd' ( temp int)
+0:31 Constant:
+0:31 7 (const int)
+0:32 Sequence
+0:32 move second child to first child ( temp 4-component vector of float)
+0:32 'ret' ( temp 4-component vector of float)
+0:34 add ( temp 4-component vector of float)
+0:33 add ( temp 4-component vector of float)
+0:32 add ( temp 4-component vector of float)
+0:32 vector-scale ( temp 4-component vector of float)
+0:32 Convert int to float ( temp float)
+0:32 'a' ( temp int)
+0:32 'input' ( in 4-component vector of float)
+0:33 vector-scale ( temp 4-component vector of float)
+0:33 Convert int to float ( temp float)
+0:33 'b' ( temp int)
+0:33 'input' ( in 4-component vector of float)
+0:34 vector-scale ( temp 4-component vector of float)
+0:34 Convert int to float ( temp float)
+0:34 'c' ( temp int)
+0:34 'input' ( in 4-component vector of float)
+0:35 vector-scale ( temp 4-component vector of float)
+0:35 Convert int to float ( temp float)
+0:35 'd' ( temp int)
+0:35 'input' ( in 4-component vector of float)
+0:37 Comma ( temp int)
+0:37 move second child to first child ( temp int)
+0:37 'e' ( temp int)
+0:37 move second child to first child ( temp int)
+0:37 'a' ( temp int)
+0:37 Test condition and select ( temp int)
+0:37 Condition
+0:37 Convert int to bool ( temp bool)
+0:37 'b' ( temp int)
+0:37 true case
+0:37 move second child to first child ( temp int)
+0:37 'c' ( temp int)
+0:37 'd' ( temp int)
+0:37 false case
+0:37 Constant:
+0:37 10 (const int)
+0:37 move second child to first child ( temp int)
+0:37 'b' ( temp int)
+0:37 Test condition and select ( temp int)
+0:37 Condition
+0:37 Convert int to bool ( temp bool)
+0:37 'a' ( temp int)
+0:37 true case
+0:37 move second child to first child ( temp int)
+0:37 'd' ( temp int)
+0:37 'c' ( temp int)
+0:37 false case
+0:37 Constant:
+0:37 11 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 'f' ( temp 4-component vector of float)
+0:39 Test condition and select ( temp 4-component vector of float)
+0:39 Condition
+0:39 Compare Less Than ( temp bool)
+0:39 direct index ( temp float)
+0:39 'ret' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( temp float)
+0:39 'input' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const int)
+0:39 true case
+0:39 vector-scale ( temp 4-component vector of float)
+0:39 Convert int to float ( temp float)
+0:39 'c' ( temp int)
+0:39 'input' ( in 4-component vector of float)
+0:39 false case
+0:39 vector-scale ( temp 4-component vector of float)
+0:39 Convert int to float ( temp float)
+0:39 'd' ( temp int)
+0:39 'input' ( in 4-component vector of float)
+0:41 Branch: Return with expression
+0:40 add ( temp 4-component vector of float)
+0:40 add ( temp 4-component vector of float)
+0:40 add ( temp 4-component vector of float)
+0:40 add ( temp 4-component vector of float)
+0:40 vector-scale ( temp 4-component vector of float)
+0:40 Convert int to float ( temp float)
+0:40 'e' ( temp int)
+0:40 'ret' ( temp 4-component vector of float)
+0:40 'f' ( temp 4-component vector of float)
+0:40 Function Call: vectorCond( ( temp 4-component vector of float)
+0:40 Function Call: scalarCond( ( temp 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
+0:? Constant:
+0:? true (const bool)
+0:? false (const bool)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? Constant:
+0:? 3.000000
+0:? 4.000000
+0:41 Constant:
+0:41 10.000000
+0:41 Constant:
+0:41 10.000000
+0:27 Function Definition: PixelShaderFunction( ( temp void)
+0:27 Function Parameters:
+0:? Sequence
+0:27 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
-0:2 move second child to first child ( temp 4-component vector of float)
+0:27 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:27 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 100
+// Generated by (magic number): 80002
+// Id's are bound by 220
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 93 96
+ EntryPoint Fragment 4 "PixelShaderFunction" 213 216
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
- Name 11 "@PixelShaderFunction(vf4;"
- Name 10 "input"
- Name 15 "a"
- Name 17 "b"
- Name 19 "c"
- Name 21 "d"
- Name 22 "ret"
- Name 42 "e"
- Name 59 "f"
- Name 91 "input"
- Name 93 "input"
- Name 96 "@entryPointOutput"
- Name 97 "param"
- Decorate 93(input) Location 0
- Decorate 96(@entryPointOutput) Location 0
+ Name 9 "vectorCond("
+ Name 11 "scalarCond("
+ Name 22 "fbSelect(vb2;vf2;vf2;"
+ Name 19 "cnd"
+ Name 20 "src0"
+ Name 21 "src1"
+ Name 27 "@PixelShaderFunction(vf4;"
+ Name 26 "input"
+ Name 29 "$Global"
+ MemberName 29($Global) 0 "c4"
+ MemberName 29($Global) 1 "t4"
+ MemberName 29($Global) 2 "f4"
+ MemberName 29($Global) 3 "t"
+ MemberName 29($Global) 4 "f"
+ Name 31 ""
+ Name 85 "ret"
+ Name 113 "a"
+ Name 115 "b"
+ Name 117 "c"
+ Name 119 "d"
+ Name 120 "ret"
+ Name 140 "e"
+ Name 161 "f"
+ Name 200 "param"
+ Name 201 "param"
+ Name 202 "param"
+ Name 211 "input"
+ Name 213 "input"
+ Name 216 "@entryPointOutput"
+ Name 217 "param"
+ MemberDecorate 29($Global) 0 Offset 0
+ MemberDecorate 29($Global) 1 Offset 16
+ MemberDecorate 29($Global) 2 Offset 32
+ MemberDecorate 29($Global) 3 Offset 48
+ MemberDecorate 29($Global) 4 Offset 52
+ Decorate 29($Global) Block
+ Decorate 31 DescriptorSet 0
+ Decorate 213(input) Location 0
+ Decorate 216(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
- 8: TypePointer Function 7(fvec4)
- 9: TypeFunction 7(fvec4) 8(ptr)
- 13: TypeInt 32 1
- 14: TypePointer Function 13(int)
- 16: 13(int) Constant 5
- 18: 13(int) Constant 6
- 20: 13(int) Constant 7
- 49: 13(int) Constant 10
- 57: 13(int) Constant 11
- 61: TypeInt 32 0
- 62: 61(int) Constant 0
- 63: TypePointer Function 6(float)
- 66: 61(int) Constant 1
- 69: TypeBool
- 92: TypePointer Input 7(fvec4)
- 93(input): 92(ptr) Variable Input
- 95: TypePointer Output 7(fvec4)
-96(@entryPointOutput): 95(ptr) Variable Output
+ 8: TypeFunction 7(fvec4)
+ 13: TypeBool
+ 14: TypeVector 13(bool) 2
+ 15: TypePointer Function 14(bvec2)
+ 16: TypeVector 6(float) 2
+ 17: TypePointer Function 16(fvec2)
+ 18: TypeFunction 16(fvec2) 15(ptr) 17(ptr) 17(ptr)
+ 24: TypePointer Function 7(fvec4)
+ 25: TypeFunction 7(fvec4) 24(ptr)
+ 29($Global): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 6(float) 6(float)
+ 30: TypePointer Uniform 29($Global)
+ 31: 30(ptr) Variable Uniform
+ 32: TypeInt 32 1
+ 33: 32(int) Constant 2
+ 34: TypePointer Uniform 7(fvec4)
+ 37: 32(int) Constant 1
+ 40: 32(int) Constant 0
+ 43: TypeVector 13(bool) 4
+ 44: 6(float) Constant 0
+ 45: 7(fvec4) ConstantComposite 44 44 44 44
+ 48: 32(int) Constant 4
+ 49: TypePointer Uniform 6(float)
+ 53: 32(int) Constant 3
+ 100: 6(float) Constant 1065353216
+ 101: 7(fvec4) ConstantComposite 100 100 100 100
+ 112: TypePointer Function 32(int)
+ 114: 32(int) Constant 5
+ 116: 32(int) Constant 6
+ 118: 32(int) Constant 7
+ 143: TypeInt 32 0
+ 144: 143(int) Constant 0
+ 150: 32(int) Constant 10
+ 159: 32(int) Constant 11
+ 163: TypePointer Function 6(float)
+ 166: 143(int) Constant 1
+ 192: 13(bool) ConstantTrue
+ 193: 13(bool) ConstantFalse
+ 194: 14(bvec2) ConstantComposite 192 193
+ 195: 6(float) Constant 1073741824
+ 196: 16(fvec2) ConstantComposite 100 195
+ 197: 6(float) Constant 1077936128
+ 198: 6(float) Constant 1082130432
+ 199: 16(fvec2) ConstantComposite 197 198
+ 204: 6(float) Constant 1092616192
+ 212: TypePointer Input 7(fvec4)
+ 213(input): 212(ptr) Variable Input
+ 215: TypePointer Output 7(fvec4)
+216(@entryPointOutput): 215(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
- 91(input): 8(ptr) Variable Function
- 97(param): 8(ptr) Variable Function
- 94: 7(fvec4) Load 93(input)
- Store 91(input) 94
- 98: 7(fvec4) Load 91(input)
- Store 97(param) 98
- 99: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 97(param)
- Store 96(@entryPointOutput) 99
+ 211(input): 24(ptr) Variable Function
+ 217(param): 24(ptr) Variable Function
+ 214: 7(fvec4) Load 213(input)
+ Store 211(input) 214
+ 218: 7(fvec4) Load 211(input)
+ Store 217(param) 218
+ 219: 7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 217(param)
+ Store 216(@entryPointOutput) 219
Return
FunctionEnd
-11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9
- 10(input): 8(ptr) FunctionParameter
+ 9(vectorCond(): 7(fvec4) Function None 8
+ 10: Label
+ 35: 34(ptr) AccessChain 31 33
+ 36: 7(fvec4) Load 35
+ 38: 34(ptr) AccessChain 31 37
+ 39: 7(fvec4) Load 38
+ 41: 34(ptr) AccessChain 31 40
+ 42: 7(fvec4) Load 41
+ 46: 43(bvec4) FOrdNotEqual 42 45
+ 47: 7(fvec4) Select 46 39 36
+ 50: 49(ptr) AccessChain 31 48
+ 51: 6(float) Load 50
+ 52: 7(fvec4) CompositeConstruct 51 51 51 51
+ 54: 49(ptr) AccessChain 31 53
+ 55: 6(float) Load 54
+ 56: 7(fvec4) CompositeConstruct 55 55 55 55
+ 57: 34(ptr) AccessChain 31 40
+ 58: 7(fvec4) Load 57
+ 59: 43(bvec4) FOrdNotEqual 58 45
+ 60: 7(fvec4) Select 59 56 52
+ 61: 7(fvec4) FAdd 47 60
+ 62: 34(ptr) AccessChain 31 33
+ 63: 7(fvec4) Load 62
+ 64: 34(ptr) AccessChain 31 37
+ 65: 7(fvec4) Load 64
+ 66: 34(ptr) AccessChain 31 37
+ 67: 7(fvec4) Load 66
+ 68: 34(ptr) AccessChain 31 33
+ 69: 7(fvec4) Load 68
+ 70: 43(bvec4) FOrdLessThan 67 69
+ 71: 7(fvec4) Select 70 65 63
+ 72: 7(fvec4) FAdd 61 71
+ 73: 34(ptr) AccessChain 31 33
+ 74: 7(fvec4) Load 73
+ 75: 49(ptr) AccessChain 31 53
+ 76: 6(float) Load 75
+ 77: 7(fvec4) CompositeConstruct 76 76 76 76
+ 78: 34(ptr) AccessChain 31 40
+ 79: 7(fvec4) Load 78
+ 80: 43(bvec4) FOrdNotEqual 79 45
+ 81: 7(fvec4) Select 80 77 74
+ 82: 7(fvec4) FAdd 72 81
+ ReturnValue 82
+ FunctionEnd
+ 11(scalarCond(): 7(fvec4) Function None 8
12: Label
- 15(a): 14(ptr) Variable Function
- 17(b): 14(ptr) Variable Function
- 19(c): 14(ptr) Variable Function
- 21(d): 14(ptr) Variable Function
- 22(ret): 8(ptr) Variable Function
- 42(e): 14(ptr) Variable Function
- 43: 14(ptr) Variable Function
- 51: 14(ptr) Variable Function
- 59(f): 8(ptr) Variable Function
- 60: 8(ptr) Variable Function
- Store 15(a) 16
- Store 17(b) 18
- Store 19(c) 20
- Store 21(d) 20
- 23: 13(int) Load 15(a)
- 24: 6(float) ConvertSToF 23
- 25: 7(fvec4) Load 10(input)
- 26: 7(fvec4) VectorTimesScalar 25 24
- 27: 13(int) Load 17(b)
- 28: 6(float) ConvertSToF 27
- 29: 7(fvec4) Load 10(input)
- 30: 7(fvec4) VectorTimesScalar 29 28
- 31: 7(fvec4) FAdd 26 30
- 32: 13(int) Load 19(c)
- 33: 6(float) ConvertSToF 32
- 34: 7(fvec4) Load 10(input)
- 35: 7(fvec4) VectorTimesScalar 34 33
- 36: 7(fvec4) FAdd 31 35
- 37: 13(int) Load 21(d)
- 38: 6(float) ConvertSToF 37
- 39: 7(fvec4) Load 10(input)
- 40: 7(fvec4) VectorTimesScalar 39 38
- 41: 7(fvec4) FAdd 36 40
- Store 22(ret) 41
- 44: 13(int) Load 17(b)
- SelectionMerge 46 None
- BranchConditional 44 45 48
- 45: Label
- 47: 13(int) Load 21(d)
- Store 19(c) 47
- Store 43 47
- Branch 46
- 48: Label
- Store 43 49
- Branch 46
- 46: Label
- 50: 13(int) Load 43
- Store 15(a) 50
- Store 42(e) 50
- 52: 13(int) Load 15(a)
- SelectionMerge 54 None
- BranchConditional 52 53 56
- 53: Label
- 55: 13(int) Load 19(c)
- Store 21(d) 55
- Store 51 55
- Branch 54
- 56: Label
- Store 51 57
- Branch 54
- 54: Label
- 58: 13(int) Load 51
- Store 17(b) 58
- 64: 63(ptr) AccessChain 22(ret) 62
- 65: 6(float) Load 64
- 67: 63(ptr) AccessChain 10(input) 66
- 68: 6(float) Load 67
- 70: 69(bool) FOrdLessThan 65 68
- SelectionMerge 72 None
- BranchConditional 70 71 77
- 71: Label
- 73: 13(int) Load 19(c)
- 74: 6(float) ConvertSToF 73
- 75: 7(fvec4) Load 10(input)
- 76: 7(fvec4) VectorTimesScalar 75 74
- Store 60 76
- Branch 72
- 77: Label
- 78: 13(int) Load 21(d)
- 79: 6(float) ConvertSToF 78
- 80: 7(fvec4) Load 10(input)
- 81: 7(fvec4) VectorTimesScalar 80 79
- Store 60 81
- Branch 72
- 72: Label
- 82: 7(fvec4) Load 60
- Store 59(f) 82
- 83: 13(int) Load 42(e)
- 84: 6(float) ConvertSToF 83
- 85: 7(fvec4) Load 22(ret)
- 86: 7(fvec4) VectorTimesScalar 85 84
- 87: 7(fvec4) Load 59(f)
- 88: 7(fvec4) FAdd 86 87
- ReturnValue 88
+ 85(ret): 24(ptr) Variable Function
+ 86: 24(ptr) Variable Function
+ 87: 49(ptr) AccessChain 31 53
+ 88: 6(float) Load 87
+ 89: 49(ptr) AccessChain 31 48
+ 90: 6(float) Load 89
+ 91: 13(bool) FOrdNotEqual 88 90
+ SelectionMerge 93 None
+ BranchConditional 91 92 99
+ 92: Label
+ 94: 49(ptr) AccessChain 31 53
+ 95: 6(float) Load 94
+ 96: 34(ptr) AccessChain 31 33
+ 97: 7(fvec4) Load 96
+ 98: 7(fvec4) VectorTimesScalar 97 95
+ Store 86 98
+ Branch 93
+ 99: Label
+ Store 86 101
+ Branch 93
+ 93: Label
+ 102: 7(fvec4) Load 86
+ Store 85(ret) 102
+ 103: 7(fvec4) Load 85(ret)
+ ReturnValue 103
+ FunctionEnd
+22(fbSelect(vb2;vf2;vf2;): 16(fvec2) Function None 18
+ 19(cnd): 15(ptr) FunctionParameter
+ 20(src0): 17(ptr) FunctionParameter
+ 21(src1): 17(ptr) FunctionParameter
+ 23: Label
+ 106: 16(fvec2) Load 21(src1)
+ 107: 16(fvec2) Load 20(src0)
+ 108: 14(bvec2) Load 19(cnd)
+ 109: 16(fvec2) Select 108 107 106
+ ReturnValue 109
+ FunctionEnd
+27(@PixelShaderFunction(vf4;): 7(fvec4) Function None 25
+ 26(input): 24(ptr) FunctionParameter
+ 28: Label
+ 113(a): 112(ptr) Variable Function
+ 115(b): 112(ptr) Variable Function
+ 117(c): 112(ptr) Variable Function
+ 119(d): 112(ptr) Variable Function
+ 120(ret): 24(ptr) Variable Function
+ 140(e): 112(ptr) Variable Function
+ 141: 112(ptr) Variable Function
+ 152: 112(ptr) Variable Function
+ 161(f): 24(ptr) Variable Function
+ 162: 24(ptr) Variable Function
+ 200(param): 15(ptr) Variable Function
+ 201(param): 17(ptr) Variable Function
+ 202(param): 17(ptr) Variable Function
+ Store 113(a) 114
+ Store 115(b) 116
+ Store 117(c) 118
+ Store 119(d) 118
+ 121: 32(int) Load 113(a)
+ 122: 6(float) ConvertSToF 121
+ 123: 7(fvec4) Load 26(input)
+ 124: 7(fvec4) VectorTimesScalar 123 122
+ 125: 32(int) Load 115(b)
+ 126: 6(float) ConvertSToF 125
+ 127: 7(fvec4) Load 26(input)
+ 128: 7(fvec4) VectorTimesScalar 127 126
+ 129: 7(fvec4) FAdd 124 128
+ 130: 32(int) Load 117(c)
+ 131: 6(float) ConvertSToF 130
+ 132: 7(fvec4) Load 26(input)
+ 133: 7(fvec4) VectorTimesScalar 132 131
+ 134: 7(fvec4) FAdd 129 133
+ 135: 32(int) Load 119(d)
+ 136: 6(float) ConvertSToF 135
+ 137: 7(fvec4) Load 26(input)
+ 138: 7(fvec4) VectorTimesScalar 137 136
+ 139: 7(fvec4) FAdd 134 138
+ Store 120(ret) 139
+ 142: 32(int) Load 115(b)
+ 145: 13(bool) INotEqual 142 144
+ SelectionMerge 147 None
+ BranchConditional 145 146 149
+ 146: Label
+ 148: 32(int) Load 119(d)
+ Store 117(c) 148
+ Store 141 148
+ Branch 147
+ 149: Label
+ Store 141 150
+ Branch 147
+ 147: Label
+ 151: 32(int) Load 141
+ Store 113(a) 151
+ Store 140(e) 151
+ 153: 32(int) Load 113(a)
+ 154: 13(bool) INotEqual 153 144
+ SelectionMerge 156 None
+ BranchConditional 154 155 158
+ 155: Label
+ 157: 32(int) Load 117(c)
+ Store 119(d) 157
+ Store 152 157
+ Branch 156
+ 158: Label
+ Store 152 159
+ Branch 156
+ 156: Label
+ 160: 32(int) Load 152
+ Store 115(b) 160
+ 164: 163(ptr) AccessChain 120(ret) 144
+ 165: 6(float) Load 164
+ 167: 163(ptr) AccessChain 26(input) 166
+ 168: 6(float) Load 167
+ 169: 13(bool) FOrdLessThan 165 168
+ SelectionMerge 171 None
+ BranchConditional 169 170 176
+ 170: Label
+ 172: 32(int) Load 117(c)
+ 173: 6(float) ConvertSToF 172
+ 174: 7(fvec4) Load 26(input)
+ 175: 7(fvec4) VectorTimesScalar 174 173
+ Store 162 175
+ Branch 171
+ 176: Label
+ 177: 32(int) Load 119(d)
+ 178: 6(float) ConvertSToF 177
+ 179: 7(fvec4) Load 26(input)
+ 180: 7(fvec4) VectorTimesScalar 179 178
+ Store 162 180
+ Branch 171
+ 171: Label
+ 181: 7(fvec4) Load 162
+ Store 161(f) 181
+ 182: 32(int) Load 140(e)
+ 183: 6(float) ConvertSToF 182
+ 184: 7(fvec4) Load 120(ret)
+ 185: 7(fvec4) VectorTimesScalar 184 183
+ 186: 7(fvec4) Load 161(f)
+ 187: 7(fvec4) FAdd 185 186
+ 188: 7(fvec4) FunctionCall 9(vectorCond()
+ 189: 7(fvec4) FAdd 187 188
+ 190: 7(fvec4) FunctionCall 11(scalarCond()
+ 191: 7(fvec4) FAdd 189 190
+ Store 200(param) 194
+ Store 201(param) 196
+ Store 202(param) 199
+ 203: 16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 200(param) 201(param) 202(param)
+ 205: 6(float) CompositeExtract 203 0
+ 206: 6(float) CompositeExtract 203 1
+ 207: 7(fvec4) CompositeConstruct 205 206 204 204
+ 208: 7(fvec4) FAdd 191 207
+ ReturnValue 208
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out
new file mode 100644
index 00000000000..58e9ed86765
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out
@@ -0,0 +1,241 @@
+hlsl.constantbuffer.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:20 Function Definition: @main( ( temp 4-component vector of float)
+0:20 Function Parameters:
+0:? Sequence
+0:21 Test condition and select ( temp void)
+0:21 Condition
+0:21 x: direct index for structure (layout( row_major std140) uniform bool)
+0:21 direct index (layout( row_major std140) temp block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:21 direct index (layout( row_major std140) temp 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:21 'cb3' (layout( row_major std140) uniform 2-element array of 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 true case
+0:22 Branch: Return with expression
+0:22 add ( temp 4-component vector of float)
+0:22 add ( temp 4-component vector of float)
+0:22 x: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:22 'cb1' (layout( binding=12 row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float x})
+0:22 Constant:
+0:22 0 (const int)
+0:22 y: direct index for structure (layout( row_major std140) uniform float)
+0:22 direct index (layout( row_major std140) temp block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:22 'cb2' (layout( row_major std140) uniform 3-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 Convert int to float ( temp float)
+0:22 c1: direct index for structure (layout( row_major std140) uniform int)
+0:22 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform int c1})
+0:22 Constant:
+0:22 0 (const uint)
+0:21 false case
+0:24 Branch: Return with expression
+0:24 Construct vec4 ( temp 4-component vector of float)
+0:24 y: direct index for structure (layout( row_major std140) uniform float)
+0:24 direct index (layout( row_major std140) temp block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:24 direct index (layout( row_major std140) temp 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:24 'cb3' (layout( row_major std140) uniform 2-element array of 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 3 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:20 Function Definition: main( ( temp void)
+0:20 Function Parameters:
+0:? Sequence
+0:20 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:20 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'cb1' (layout( binding=12 row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float x})
+0:? 'cb2' (layout( row_major std140) uniform 3-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:? 'cb3' (layout( row_major std140) uniform 2-element array of 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform int c1})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:20 Function Definition: @main( ( temp 4-component vector of float)
+0:20 Function Parameters:
+0:? Sequence
+0:21 Test condition and select ( temp void)
+0:21 Condition
+0:21 x: direct index for structure (layout( row_major std140) uniform bool)
+0:21 direct index (layout( row_major std140) temp block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:21 direct index (layout( row_major std140) temp 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:21 'cb3' (layout( row_major std140) uniform 2-element array of 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 true case
+0:22 Branch: Return with expression
+0:22 add ( temp 4-component vector of float)
+0:22 add ( temp 4-component vector of float)
+0:22 x: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:22 'cb1' (layout( binding=12 row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float x})
+0:22 Constant:
+0:22 0 (const int)
+0:22 y: direct index for structure (layout( row_major std140) uniform float)
+0:22 direct index (layout( row_major std140) temp block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:22 'cb2' (layout( row_major std140) uniform 3-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 Convert int to float ( temp float)
+0:22 c1: direct index for structure (layout( row_major std140) uniform int)
+0:22 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform int c1})
+0:22 Constant:
+0:22 0 (const uint)
+0:21 false case
+0:24 Branch: Return with expression
+0:24 Construct vec4 ( temp 4-component vector of float)
+0:24 y: direct index for structure (layout( row_major std140) uniform float)
+0:24 direct index (layout( row_major std140) temp block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:24 direct index (layout( row_major std140) temp 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:24 'cb3' (layout( row_major std140) uniform 2-element array of 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 3 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:20 Function Definition: main( ( temp void)
+0:20 Function Parameters:
+0:? Sequence
+0:20 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:20 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'cb1' (layout( binding=12 row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float x})
+0:? 'cb2' (layout( row_major std140) uniform 3-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:? 'cb3' (layout( row_major std140) uniform 2-element array of 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform int c1})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 66
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 64
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 12 "cb3"
+ MemberName 12(cb3) 0 "x"
+ MemberName 12(cb3) 1 "y"
+ Name 18 "cb3"
+ Name 31 "cb1"
+ MemberName 31(cb1) 0 "x"
+ Name 33 "cb1"
+ Name 40 "cb2"
+ Name 46 "cbuff"
+ MemberName 46(cbuff) 0 "c1"
+ Name 48 ""
+ Name 64 "@entryPointOutput"
+ MemberDecorate 12(cb3) 0 Offset 0
+ MemberDecorate 12(cb3) 1 Offset 4
+ Decorate 12(cb3) Block
+ Decorate 18(cb3) DescriptorSet 0
+ MemberDecorate 31(cb1) 0 Offset 0
+ Decorate 31(cb1) Block
+ Decorate 33(cb1) DescriptorSet 0
+ Decorate 33(cb1) Binding 12
+ Decorate 40(cb2) DescriptorSet 0
+ MemberDecorate 46(cbuff) 0 Offset 0
+ Decorate 46(cbuff) Block
+ Decorate 48 DescriptorSet 0
+ Decorate 64(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeInt 32 0
+ 12(cb3): TypeStruct 11(int) 6(float)
+ 13: 11(int) Constant 4
+ 14: TypeArray 12(cb3) 13
+ 15: 11(int) Constant 2
+ 16: TypeArray 14 15
+ 17: TypePointer Uniform 16
+ 18(cb3): 17(ptr) Variable Uniform
+ 19: TypeInt 32 1
+ 20: 19(int) Constant 1
+ 21: 19(int) Constant 2
+ 22: 19(int) Constant 0
+ 23: TypePointer Uniform 11(int)
+ 26: TypeBool
+ 27: 11(int) Constant 0
+ 31(cb1): TypeStruct 7(fvec4)
+ 32: TypePointer Uniform 31(cb1)
+ 33(cb1): 32(ptr) Variable Uniform
+ 34: TypePointer Uniform 7(fvec4)
+ 37: 11(int) Constant 3
+ 38: TypeArray 12(cb3) 37
+ 39: TypePointer Uniform 38
+ 40(cb2): 39(ptr) Variable Uniform
+ 41: TypePointer Uniform 6(float)
+ 46(cbuff): TypeStruct 19(int)
+ 47: TypePointer Uniform 46(cbuff)
+ 48: 47(ptr) Variable Uniform
+ 49: TypePointer Uniform 19(int)
+ 57: 19(int) Constant 3
+ 63: TypePointer Output 7(fvec4)
+64(@entryPointOutput): 63(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 65: 7(fvec4) FunctionCall 9(@main()
+ Store 64(@entryPointOutput) 65
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 24: 23(ptr) AccessChain 18(cb3) 20 21 22
+ 25: 11(int) Load 24
+ 28: 26(bool) INotEqual 25 27
+ SelectionMerge 30 None
+ BranchConditional 28 29 56
+ 29: Label
+ 35: 34(ptr) AccessChain 33(cb1) 22
+ 36: 7(fvec4) Load 35
+ 42: 41(ptr) AccessChain 40(cb2) 20 20
+ 43: 6(float) Load 42
+ 44: 7(fvec4) CompositeConstruct 43 43 43 43
+ 45: 7(fvec4) FAdd 36 44
+ 50: 49(ptr) AccessChain 48 22
+ 51: 19(int) Load 50
+ 52: 6(float) ConvertSToF 51
+ 53: 7(fvec4) CompositeConstruct 52 52 52 52
+ 54: 7(fvec4) FAdd 45 53
+ ReturnValue 54
+ 56: Label
+ 58: 41(ptr) AccessChain 18(cb3) 20 57 20
+ 59: 6(float) Load 58
+ 60: 7(fvec4) CompositeConstruct 59 59 59 59
+ ReturnValue 60
+ 30: Label
+ 62: 7(fvec4) Undef
+ ReturnValue 62
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructArray.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructArray.vert.out
new file mode 100644
index 00000000000..7140bea6c41
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructArray.vert.out
@@ -0,0 +1,381 @@
+hlsl.constructArray.vert
+Shader version: 500
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:4 Sequence
+0:4 move second child to first child ( temp 2-element array of 4-component vector of float)
+0:4 'float4_array_times' ( temp 2-element array of 4-component vector of float)
+0:4 Construct structure ( temp 2-element array of 4-component vector of float)
+0:4 Convert int to float ( temp 4-component vector of float)
+0:4 direct index ( temp 4-component vector of int)
+0:4 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Convert int to float ( temp 4-component vector of float)
+0:4 direct index ( temp 4-component vector of int)
+0:4 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:4 Constant:
+0:4 1 (const int)
+0:5 Sequence
+0:5 move second child to first child ( temp 4-element array of 2-component vector of float)
+0:5 'float2_array_times2' ( temp 4-element array of 2-component vector of float)
+0:5 Construct structure ( temp 4-element array of 2-component vector of float)
+0:5 Convert int to float ( temp 2-component vector of float)
+0:5 Construct ivec2 ( temp 2-component vector of int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Convert int to float ( temp 2-component vector of float)
+0:5 Construct ivec2 ( temp 2-component vector of int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Constant:
+0:5 2 (const int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Constant:
+0:5 3 (const int)
+0:5 Convert int to float ( temp 2-component vector of float)
+0:5 Construct ivec2 ( temp 2-component vector of int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Convert int to float ( temp 2-component vector of float)
+0:5 Construct ivec2 ( temp 2-component vector of int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Constant:
+0:5 2 (const int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Constant:
+0:5 3 (const int)
+0:6 Sequence
+0:6 move second child to first child ( temp 2-element array of 4-component vector of int)
+0:6 'int4_array2' ( temp 2-element array of 4-component vector of int)
+0:6 Construct structure ( temp 2-element array of 4-component vector of int)
+0:6 direct index ( temp 4-component vector of int)
+0:6 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:6 Constant:
+0:6 0 (const int)
+0:6 direct index ( temp 4-component vector of int)
+0:6 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:6 Constant:
+0:6 1 (const int)
+0:7 Sequence
+0:7 move second child to first child ( temp 2-element array of int)
+0:7 'int1_array' ( temp 2-element array of int)
+0:7 Construct structure ( temp 2-element array of int)
+0:7 direct index ( temp int)
+0:7 direct index ( temp 4-component vector of int)
+0:7 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( temp int)
+0:7 direct index ( temp 4-component vector of int)
+0:7 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:9 Branch: Return with expression
+0:9 Constant:
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:4 Sequence
+0:4 move second child to first child ( temp 2-element array of 4-component vector of float)
+0:4 'float4_array_times' ( temp 2-element array of 4-component vector of float)
+0:4 Construct structure ( temp 2-element array of 4-component vector of float)
+0:4 Convert int to float ( temp 4-component vector of float)
+0:4 direct index ( temp 4-component vector of int)
+0:4 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:4 Constant:
+0:4 0 (const int)
+0:4 Convert int to float ( temp 4-component vector of float)
+0:4 direct index ( temp 4-component vector of int)
+0:4 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:4 Constant:
+0:4 1 (const int)
+0:5 Sequence
+0:5 move second child to first child ( temp 4-element array of 2-component vector of float)
+0:5 'float2_array_times2' ( temp 4-element array of 2-component vector of float)
+0:5 Construct structure ( temp 4-element array of 2-component vector of float)
+0:5 Convert int to float ( temp 2-component vector of float)
+0:5 Construct ivec2 ( temp 2-component vector of int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Convert int to float ( temp 2-component vector of float)
+0:5 Construct ivec2 ( temp 2-component vector of int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Constant:
+0:5 2 (const int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Constant:
+0:5 3 (const int)
+0:5 Convert int to float ( temp 2-component vector of float)
+0:5 Construct ivec2 ( temp 2-component vector of int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Convert int to float ( temp 2-component vector of float)
+0:5 Construct ivec2 ( temp 2-component vector of int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Constant:
+0:5 2 (const int)
+0:5 direct index ( temp int)
+0:5 direct index ( temp 4-component vector of int)
+0:5 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:5 Constant:
+0:5 1 (const int)
+0:5 Constant:
+0:5 3 (const int)
+0:6 Sequence
+0:6 move second child to first child ( temp 2-element array of 4-component vector of int)
+0:6 'int4_array2' ( temp 2-element array of 4-component vector of int)
+0:6 Construct structure ( temp 2-element array of 4-component vector of int)
+0:6 direct index ( temp 4-component vector of int)
+0:6 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:6 Constant:
+0:6 0 (const int)
+0:6 direct index ( temp 4-component vector of int)
+0:6 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:6 Constant:
+0:6 1 (const int)
+0:7 Sequence
+0:7 move second child to first child ( temp 2-element array of int)
+0:7 'int1_array' ( temp 2-element array of int)
+0:7 Construct structure ( temp 2-element array of int)
+0:7 direct index ( temp int)
+0:7 direct index ( temp 4-component vector of int)
+0:7 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 direct index ( temp int)
+0:7 direct index ( temp 4-component vector of int)
+0:7 'int4_array' ( temp 3-element array of 4-component vector of int)
+0:7 Constant:
+0:7 0 (const int)
+0:7 Constant:
+0:7 1 (const int)
+0:9 Branch: Return with expression
+0:9 Constant:
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 89
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 87
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 15 "float4_array_times"
+ Name 21 "int4_array"
+ Name 36 "float2_array_times2"
+ Name 68 "int4_array2"
+ Name 76 "int1_array"
+ Name 87 "@entryPointOutput"
+ Decorate 87(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeInt 32 0
+ 12: 11(int) Constant 2
+ 13: TypeArray 7(fvec4) 12
+ 14: TypePointer Function 13
+ 16: TypeInt 32 1
+ 17: TypeVector 16(int) 4
+ 18: 11(int) Constant 3
+ 19: TypeArray 17(ivec4) 18
+ 20: TypePointer Function 19
+ 22: 16(int) Constant 0
+ 23: TypePointer Function 17(ivec4)
+ 27: 16(int) Constant 1
+ 32: TypeVector 6(float) 2
+ 33: 11(int) Constant 4
+ 34: TypeArray 32(fvec2) 33
+ 35: TypePointer Function 34
+ 37: 11(int) Constant 0
+ 38: TypePointer Function 16(int)
+ 41: 11(int) Constant 1
+ 44: TypeVector 16(int) 2
+ 66: TypeArray 17(ivec4) 12
+ 67: TypePointer Function 66
+ 74: TypeArray 16(int) 12
+ 75: TypePointer Function 74
+ 82: 6(float) Constant 0
+ 83: 7(fvec4) ConstantComposite 82 82 82 82
+ 86: TypePointer Output 7(fvec4)
+87(@entryPointOutput): 86(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 88: 7(fvec4) FunctionCall 9(@main()
+ Store 87(@entryPointOutput) 88
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+15(float4_array_times): 14(ptr) Variable Function
+ 21(int4_array): 20(ptr) Variable Function
+36(float2_array_times2): 35(ptr) Variable Function
+ 68(int4_array2): 67(ptr) Variable Function
+ 76(int1_array): 75(ptr) Variable Function
+ 24: 23(ptr) AccessChain 21(int4_array) 22
+ 25: 17(ivec4) Load 24
+ 26: 7(fvec4) ConvertSToF 25
+ 28: 23(ptr) AccessChain 21(int4_array) 27
+ 29: 17(ivec4) Load 28
+ 30: 7(fvec4) ConvertSToF 29
+ 31: 13 CompositeConstruct 26 30
+ Store 15(float4_array_times) 31
+ 39: 38(ptr) AccessChain 21(int4_array) 22 37
+ 40: 16(int) Load 39
+ 42: 38(ptr) AccessChain 21(int4_array) 22 41
+ 43: 16(int) Load 42
+ 45: 44(ivec2) CompositeConstruct 40 43
+ 46: 32(fvec2) ConvertSToF 45
+ 47: 38(ptr) AccessChain 21(int4_array) 22 12
+ 48: 16(int) Load 47
+ 49: 38(ptr) AccessChain 21(int4_array) 22 18
+ 50: 16(int) Load 49
+ 51: 44(ivec2) CompositeConstruct 48 50
+ 52: 32(fvec2) ConvertSToF 51
+ 53: 38(ptr) AccessChain 21(int4_array) 27 37
+ 54: 16(int) Load 53
+ 55: 38(ptr) AccessChain 21(int4_array) 27 41
+ 56: 16(int) Load 55
+ 57: 44(ivec2) CompositeConstruct 54 56
+ 58: 32(fvec2) ConvertSToF 57
+ 59: 38(ptr) AccessChain 21(int4_array) 27 12
+ 60: 16(int) Load 59
+ 61: 38(ptr) AccessChain 21(int4_array) 27 18
+ 62: 16(int) Load 61
+ 63: 44(ivec2) CompositeConstruct 60 62
+ 64: 32(fvec2) ConvertSToF 63
+ 65: 34 CompositeConstruct 46 52 58 64
+ Store 36(float2_array_times2) 65
+ 69: 23(ptr) AccessChain 21(int4_array) 22
+ 70: 17(ivec4) Load 69
+ 71: 23(ptr) AccessChain 21(int4_array) 27
+ 72: 17(ivec4) Load 71
+ 73: 66 CompositeConstruct 70 72
+ Store 68(int4_array2) 73
+ 77: 38(ptr) AccessChain 21(int4_array) 22 37
+ 78: 16(int) Load 77
+ 79: 38(ptr) AccessChain 21(int4_array) 22 41
+ 80: 16(int) Load 79
+ 81: 74 CompositeConstruct 78 80
+ Store 76(int1_array) 81
+ ReturnValue 83
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out
index eed169486a7..1321bfebbc9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out
@@ -1,5 +1,5 @@
hlsl.constructexpr.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -41,19 +41,19 @@ gl_FragCoord origin is upper left
0:? Sequence
0:4 Sequence
0:4 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:4 color: direct index for structure ( temp 4-component vector of float)
0:4 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:4 Constant:
0:4 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -95,16 +95,16 @@ gl_FragCoord origin is upper left
0:? Sequence
0:4 Sequence
0:4 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:4 color: direct index for structure ( temp 4-component vector of float)
0:4 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:4 Constant:
0:4 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 40
Capability Shader
@@ -112,13 +112,14 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 37
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "color"
Name 10 "@main("
Name 27 "ps_output"
- Name 37 "color"
- Decorate 37(color) Location 0
+ Name 37 "@entryPointOutput.color"
+ Decorate 37(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -145,12 +146,12 @@ gl_FragCoord origin is upper left
30: 7(fvec4) ConstantComposite 29 29 29 29
31: TypePointer Function 7(fvec4)
36: TypePointer Output 7(fvec4)
- 37(color): 36(ptr) Variable Output
+37(@entryPointOutput.color): 36(ptr) Variable Output
4(main): 2 Function None 3
5: Label
38:8(PS_OUTPUT) FunctionCall 10(@main()
39: 7(fvec4) CompositeExtract 38 0
- Store 37(color) 39
+ Store 37(@entryPointOutput.color) 39
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out
new file mode 100644
index 00000000000..f54945ae812
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out
@@ -0,0 +1,694 @@
+hlsl.constructimat.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2 Function Definition: @main( ( temp int)
+0:2 Function Parameters:
+0:? Sequence
+0:6 Sequence
+0:6 move second child to first child ( temp 4X4 matrix of int)
+0:6 'var443' ( temp 4X4 matrix of int)
+0:6 Constant:
+0:6 0 (const int)
+0:6 1 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 1 (const int)
+0:6 1 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 1 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:7 Sequence
+0:7 move second child to first child ( temp 4X4 matrix of int)
+0:7 'var444' ( temp 4X4 matrix of int)
+0:? Constant:
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:11 Sequence
+0:11 move second child to first child ( temp 4X2 matrix of int)
+0:11 'var423' ( temp 4X2 matrix of int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 1 (const int)
+0:11 1 (const int)
+0:11 1 (const int)
+0:11 1 (const int)
+0:11 0 (const int)
+0:11 0 (const int)
+0:11 0 (const int)
+0:12 Sequence
+0:12 move second child to first child ( temp 4X2 matrix of int)
+0:12 'var424' ( temp 4X2 matrix of int)
+0:? Constant:
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:16 Sequence
+0:16 move second child to first child ( temp 3X2 matrix of int)
+0:16 'var323' ( temp 3X2 matrix of int)
+0:16 Constant:
+0:16 0 (const int)
+0:16 1 (const int)
+0:16 1 (const int)
+0:16 1 (const int)
+0:16 1 (const int)
+0:16 0 (const int)
+0:17 Sequence
+0:17 move second child to first child ( temp 3X2 matrix of int)
+0:17 'var234' ( temp 3X2 matrix of int)
+0:? Constant:
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:22 Sequence
+0:22 move second child to first child ( temp 4X4 matrix of uint)
+0:22 'uvar443' ( temp 4X4 matrix of uint)
+0:22 Constant:
+0:22 0 (const uint)
+0:22 1 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 1 (const uint)
+0:22 1 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 1 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:23 Sequence
+0:23 move second child to first child ( temp 4X4 matrix of uint)
+0:23 'uvar444' ( temp 4X4 matrix of uint)
+0:? Constant:
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:27 Sequence
+0:27 move second child to first child ( temp 4X2 matrix of uint)
+0:27 'uvar423' ( temp 4X2 matrix of uint)
+0:27 Constant:
+0:27 0 (const uint)
+0:27 1 (const uint)
+0:27 1 (const uint)
+0:27 1 (const uint)
+0:27 1 (const uint)
+0:27 0 (const uint)
+0:27 0 (const uint)
+0:27 0 (const uint)
+0:28 Sequence
+0:28 move second child to first child ( temp 4X2 matrix of uint)
+0:28 'uvar424' ( temp 4X2 matrix of uint)
+0:? Constant:
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:32 Sequence
+0:32 move second child to first child ( temp 3X2 matrix of uint)
+0:32 'uvar323' ( temp 3X2 matrix of uint)
+0:32 Constant:
+0:32 0 (const uint)
+0:32 1 (const uint)
+0:32 1 (const uint)
+0:32 1 (const uint)
+0:32 1 (const uint)
+0:32 0 (const uint)
+0:33 Sequence
+0:33 move second child to first child ( temp 3X2 matrix of uint)
+0:33 'uvar234' ( temp 3X2 matrix of uint)
+0:? Constant:
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:38 Sequence
+0:38 move second child to first child ( temp 4X4 matrix of bool)
+0:38 'bvar443' ( temp 4X4 matrix of bool)
+0:38 Constant:
+0:38 false (const bool)
+0:38 true (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 true (const bool)
+0:38 true (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 true (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:39 Sequence
+0:39 move second child to first child ( temp 4X4 matrix of bool)
+0:39 'bvar444' ( temp 4X4 matrix of bool)
+0:? Constant:
+0:? false (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:43 Sequence
+0:43 move second child to first child ( temp 4X2 matrix of bool)
+0:43 'bvar423' ( temp 4X2 matrix of bool)
+0:43 Constant:
+0:43 false (const bool)
+0:43 true (const bool)
+0:43 true (const bool)
+0:43 true (const bool)
+0:43 true (const bool)
+0:43 false (const bool)
+0:43 false (const bool)
+0:43 false (const bool)
+0:44 Sequence
+0:44 move second child to first child ( temp 4X2 matrix of bool)
+0:44 'bvar424' ( temp 4X2 matrix of bool)
+0:? Constant:
+0:? false (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:48 Sequence
+0:48 move second child to first child ( temp 3X2 matrix of bool)
+0:48 'bvar323' ( temp 3X2 matrix of bool)
+0:48 Constant:
+0:48 false (const bool)
+0:48 true (const bool)
+0:48 true (const bool)
+0:48 true (const bool)
+0:48 true (const bool)
+0:48 false (const bool)
+0:49 Sequence
+0:49 move second child to first child ( temp 3X2 matrix of bool)
+0:49 'bvar234' ( temp 3X2 matrix of bool)
+0:? Constant:
+0:? false (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:51 Branch: Return with expression
+0:51 Constant:
+0:51 0 (const int)
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp int)
+0:? '@entryPointOutput' (layout( location=0) out int)
+0:2 Function Call: @main( ( temp int)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out int)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2 Function Definition: @main( ( temp int)
+0:2 Function Parameters:
+0:? Sequence
+0:6 Sequence
+0:6 move second child to first child ( temp 4X4 matrix of int)
+0:6 'var443' ( temp 4X4 matrix of int)
+0:6 Constant:
+0:6 0 (const int)
+0:6 1 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 1 (const int)
+0:6 1 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 1 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:6 0 (const int)
+0:7 Sequence
+0:7 move second child to first child ( temp 4X4 matrix of int)
+0:7 'var444' ( temp 4X4 matrix of int)
+0:? Constant:
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:11 Sequence
+0:11 move second child to first child ( temp 4X2 matrix of int)
+0:11 'var423' ( temp 4X2 matrix of int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 1 (const int)
+0:11 1 (const int)
+0:11 1 (const int)
+0:11 1 (const int)
+0:11 0 (const int)
+0:11 0 (const int)
+0:11 0 (const int)
+0:12 Sequence
+0:12 move second child to first child ( temp 4X2 matrix of int)
+0:12 'var424' ( temp 4X2 matrix of int)
+0:? Constant:
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:? 0 (const int)
+0:16 Sequence
+0:16 move second child to first child ( temp 3X2 matrix of int)
+0:16 'var323' ( temp 3X2 matrix of int)
+0:16 Constant:
+0:16 0 (const int)
+0:16 1 (const int)
+0:16 1 (const int)
+0:16 1 (const int)
+0:16 1 (const int)
+0:16 0 (const int)
+0:17 Sequence
+0:17 move second child to first child ( temp 3X2 matrix of int)
+0:17 'var234' ( temp 3X2 matrix of int)
+0:? Constant:
+0:? 0 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 1 (const int)
+0:? 0 (const int)
+0:22 Sequence
+0:22 move second child to first child ( temp 4X4 matrix of uint)
+0:22 'uvar443' ( temp 4X4 matrix of uint)
+0:22 Constant:
+0:22 0 (const uint)
+0:22 1 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 1 (const uint)
+0:22 1 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 1 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:22 0 (const uint)
+0:23 Sequence
+0:23 move second child to first child ( temp 4X4 matrix of uint)
+0:23 'uvar444' ( temp 4X4 matrix of uint)
+0:? Constant:
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:27 Sequence
+0:27 move second child to first child ( temp 4X2 matrix of uint)
+0:27 'uvar423' ( temp 4X2 matrix of uint)
+0:27 Constant:
+0:27 0 (const uint)
+0:27 1 (const uint)
+0:27 1 (const uint)
+0:27 1 (const uint)
+0:27 1 (const uint)
+0:27 0 (const uint)
+0:27 0 (const uint)
+0:27 0 (const uint)
+0:28 Sequence
+0:28 move second child to first child ( temp 4X2 matrix of uint)
+0:28 'uvar424' ( temp 4X2 matrix of uint)
+0:? Constant:
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:? 0 (const uint)
+0:32 Sequence
+0:32 move second child to first child ( temp 3X2 matrix of uint)
+0:32 'uvar323' ( temp 3X2 matrix of uint)
+0:32 Constant:
+0:32 0 (const uint)
+0:32 1 (const uint)
+0:32 1 (const uint)
+0:32 1 (const uint)
+0:32 1 (const uint)
+0:32 0 (const uint)
+0:33 Sequence
+0:33 move second child to first child ( temp 3X2 matrix of uint)
+0:33 'uvar234' ( temp 3X2 matrix of uint)
+0:? Constant:
+0:? 0 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 0 (const uint)
+0:38 Sequence
+0:38 move second child to first child ( temp 4X4 matrix of bool)
+0:38 'bvar443' ( temp 4X4 matrix of bool)
+0:38 Constant:
+0:38 false (const bool)
+0:38 true (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 true (const bool)
+0:38 true (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 true (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:38 false (const bool)
+0:39 Sequence
+0:39 move second child to first child ( temp 4X4 matrix of bool)
+0:39 'bvar444' ( temp 4X4 matrix of bool)
+0:? Constant:
+0:? false (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:43 Sequence
+0:43 move second child to first child ( temp 4X2 matrix of bool)
+0:43 'bvar423' ( temp 4X2 matrix of bool)
+0:43 Constant:
+0:43 false (const bool)
+0:43 true (const bool)
+0:43 true (const bool)
+0:43 true (const bool)
+0:43 true (const bool)
+0:43 false (const bool)
+0:43 false (const bool)
+0:43 false (const bool)
+0:44 Sequence
+0:44 move second child to first child ( temp 4X2 matrix of bool)
+0:44 'bvar424' ( temp 4X2 matrix of bool)
+0:? Constant:
+0:? false (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:? false (const bool)
+0:48 Sequence
+0:48 move second child to first child ( temp 3X2 matrix of bool)
+0:48 'bvar323' ( temp 3X2 matrix of bool)
+0:48 Constant:
+0:48 false (const bool)
+0:48 true (const bool)
+0:48 true (const bool)
+0:48 true (const bool)
+0:48 true (const bool)
+0:48 false (const bool)
+0:49 Sequence
+0:49 move second child to first child ( temp 3X2 matrix of bool)
+0:49 'bvar234' ( temp 3X2 matrix of bool)
+0:? Constant:
+0:? false (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? true (const bool)
+0:? false (const bool)
+0:51 Branch: Return with expression
+0:51 Constant:
+0:51 0 (const int)
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp int)
+0:? '@entryPointOutput' (layout( location=0) out int)
+0:2 Function Call: @main( ( temp int)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out int)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 98
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 96
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "@main("
+ Name 13 "var443"
+ Name 21 "var444"
+ Name 25 "var423"
+ Name 31 "var424"
+ Name 34 "var323"
+ Name 36 "var234"
+ Name 41 "uvar443"
+ Name 49 "uvar444"
+ Name 53 "uvar423"
+ Name 59 "uvar424"
+ Name 62 "uvar323"
+ Name 64 "uvar234"
+ Name 69 "bvar443"
+ Name 77 "bvar444"
+ Name 81 "bvar423"
+ Name 87 "bvar424"
+ Name 90 "bvar323"
+ Name 92 "bvar234"
+ Name 96 "@entryPointOutput"
+ Decorate 96(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypeFunction 6(int)
+ 10: TypeVector 6(int) 4
+ 11: TypeMatrix 10(ivec4) 4
+ 12: TypePointer Function 11
+ 14: 6(int) Constant 0
+ 15: 6(int) Constant 1
+ 16: 10(ivec4) ConstantComposite 14 15 14 14
+ 17: 10(ivec4) ConstantComposite 15 15 14 14
+ 18: 10(ivec4) ConstantComposite 15 14 14 14
+ 19: 10(ivec4) ConstantComposite 14 14 14 14
+ 20: 11 ConstantComposite 16 17 18 19
+ 22: TypeVector 6(int) 2
+ 23: TypeMatrix 22(ivec2) 4
+ 24: TypePointer Function 23
+ 26: 22(ivec2) ConstantComposite 14 15
+ 27: 22(ivec2) ConstantComposite 15 15
+ 28: 22(ivec2) ConstantComposite 15 14
+ 29: 22(ivec2) ConstantComposite 14 14
+ 30: 23 ConstantComposite 26 27 28 29
+ 32: TypeMatrix 22(ivec2) 3
+ 33: TypePointer Function 32
+ 35: 32 ConstantComposite 26 27 28
+ 37: TypeInt 32 0
+ 38: TypeVector 37(int) 4
+ 39: TypeMatrix 38(ivec4) 4
+ 40: TypePointer Function 39
+ 42: 37(int) Constant 0
+ 43: 37(int) Constant 1
+ 44: 38(ivec4) ConstantComposite 42 43 42 42
+ 45: 38(ivec4) ConstantComposite 43 43 42 42
+ 46: 38(ivec4) ConstantComposite 43 42 42 42
+ 47: 38(ivec4) ConstantComposite 42 42 42 42
+ 48: 39 ConstantComposite 44 45 46 47
+ 50: TypeVector 37(int) 2
+ 51: TypeMatrix 50(ivec2) 4
+ 52: TypePointer Function 51
+ 54: 50(ivec2) ConstantComposite 42 43
+ 55: 50(ivec2) ConstantComposite 43 43
+ 56: 50(ivec2) ConstantComposite 43 42
+ 57: 50(ivec2) ConstantComposite 42 42
+ 58: 51 ConstantComposite 54 55 56 57
+ 60: TypeMatrix 50(ivec2) 3
+ 61: TypePointer Function 60
+ 63: 60 ConstantComposite 54 55 56
+ 65: TypeBool
+ 66: TypeVector 65(bool) 4
+ 67: TypeMatrix 66(bvec4) 4
+ 68: TypePointer Function 67
+ 70: 65(bool) ConstantFalse
+ 71: 65(bool) ConstantTrue
+ 72: 66(bvec4) ConstantComposite 70 71 70 70
+ 73: 66(bvec4) ConstantComposite 71 71 70 70
+ 74: 66(bvec4) ConstantComposite 71 70 70 70
+ 75: 66(bvec4) ConstantComposite 70 70 70 70
+ 76: 67 ConstantComposite 72 73 74 75
+ 78: TypeVector 65(bool) 2
+ 79: TypeMatrix 78(bvec2) 4
+ 80: TypePointer Function 79
+ 82: 78(bvec2) ConstantComposite 70 71
+ 83: 78(bvec2) ConstantComposite 71 71
+ 84: 78(bvec2) ConstantComposite 71 70
+ 85: 78(bvec2) ConstantComposite 70 70
+ 86: 79 ConstantComposite 82 83 84 85
+ 88: TypeMatrix 78(bvec2) 3
+ 89: TypePointer Function 88
+ 91: 88 ConstantComposite 82 83 84
+ 95: TypePointer Output 6(int)
+96(@entryPointOutput): 95(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 97: 6(int) FunctionCall 8(@main()
+ Store 96(@entryPointOutput) 97
+ Return
+ FunctionEnd
+ 8(@main(): 6(int) Function None 7
+ 9: Label
+ 13(var443): 12(ptr) Variable Function
+ 21(var444): 12(ptr) Variable Function
+ 25(var423): 24(ptr) Variable Function
+ 31(var424): 24(ptr) Variable Function
+ 34(var323): 33(ptr) Variable Function
+ 36(var234): 33(ptr) Variable Function
+ 41(uvar443): 40(ptr) Variable Function
+ 49(uvar444): 40(ptr) Variable Function
+ 53(uvar423): 52(ptr) Variable Function
+ 59(uvar424): 52(ptr) Variable Function
+ 62(uvar323): 61(ptr) Variable Function
+ 64(uvar234): 61(ptr) Variable Function
+ 69(bvar443): 68(ptr) Variable Function
+ 77(bvar444): 68(ptr) Variable Function
+ 81(bvar423): 80(ptr) Variable Function
+ 87(bvar424): 80(ptr) Variable Function
+ 90(bvar323): 89(ptr) Variable Function
+ 92(bvar234): 89(ptr) Variable Function
+ Store 13(var443) 20
+ Store 21(var444) 20
+ Store 25(var423) 30
+ Store 31(var424) 30
+ Store 34(var323) 35
+ Store 36(var234) 35
+ Store 41(uvar443) 48
+ Store 49(uvar444) 48
+ Store 53(uvar423) 58
+ Store 59(uvar424) 58
+ Store 62(uvar323) 63
+ Store 64(uvar234) 63
+ Store 69(bvar443) 76
+ Store 77(bvar444) 76
+ Store 81(bvar423) 86
+ Store 87(bvar424) 86
+ Store 90(bvar323) 91
+ Store 92(bvar234) 91
+ ReturnValue 14
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out
new file mode 100644
index 00000000000..e8c1dc66240
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out
@@ -0,0 +1,69 @@
+hlsl.dashI.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 40
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 38
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 11 "$Global"
+ MemberName 11($Global) 0 "i1"
+ MemberName 11($Global) 1 "p1"
+ MemberName 11($Global) 2 "p2"
+ MemberName 11($Global) 3 "p3"
+ MemberName 11($Global) 4 "i4"
+ Name 13 ""
+ Name 38 "@entryPointOutput"
+ MemberDecorate 11($Global) 0 Offset 0
+ MemberDecorate 11($Global) 1 Offset 16
+ MemberDecorate 11($Global) 2 Offset 32
+ MemberDecorate 11($Global) 3 Offset 48
+ MemberDecorate 11($Global) 4 Offset 64
+ Decorate 11($Global) Block
+ Decorate 13 DescriptorSet 0
+ Decorate 38(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11($Global): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4)
+ 12: TypePointer Uniform 11($Global)
+ 13: 12(ptr) Variable Uniform
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16: TypePointer Uniform 7(fvec4)
+ 19: 14(int) Constant 4
+ 23: 14(int) Constant 1
+ 27: 14(int) Constant 2
+ 31: 14(int) Constant 3
+ 37: TypePointer Output 7(fvec4)
+38(@entryPointOutput): 37(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 39: 7(fvec4) FunctionCall 9(@main()
+ Store 38(@entryPointOutput) 39
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 17: 16(ptr) AccessChain 13 15
+ 18: 7(fvec4) Load 17
+ 20: 16(ptr) AccessChain 13 19
+ 21: 7(fvec4) Load 20
+ 22: 7(fvec4) FAdd 18 21
+ 24: 16(ptr) AccessChain 13 23
+ 25: 7(fvec4) Load 24
+ 26: 7(fvec4) FAdd 22 25
+ 28: 16(ptr) AccessChain 13 27
+ 29: 7(fvec4) Load 28
+ 30: 7(fvec4) FAdd 26 29
+ 32: 16(ptr) AccessChain 13 31
+ 33: 7(fvec4) Load 32
+ 34: 7(fvec4) FAdd 30 33
+ ReturnValue 34
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
index 24e6982808e..a54c98d267a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
@@ -1,12 +1,13 @@
hlsl.deadFunctionMissingBody.vert
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 18
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 16
+ Source HLSL 500
Name 4 "main"
Name 9 "@main("
Name 16 "@entryPointOutput"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out
index 8ff7e7332c8..44c414cacca 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out
@@ -1,5 +1,5 @@
hlsl.depthGreater.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
using depth_greater
0:? Sequence
@@ -26,7 +26,7 @@ using depth_greater
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
using depth_greater
0:? Sequence
@@ -50,7 +50,7 @@ using depth_greater
0:? 'depth' ( out float FragDepth)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 20
Capability Shader
@@ -59,6 +59,7 @@ using depth_greater
EntryPoint Fragment 4 "PixelShaderFunction" 18
ExecutionMode 4 OriginUpperLeft
ExecutionMode 4 DepthGreater
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 10 "@PixelShaderFunction(f1;"
Name 9 "depth"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out
index ef81b4a9e81..f97f1be1995 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out
@@ -1,5 +1,5 @@
hlsl.depthLess.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
using depth_less
0:? Sequence
@@ -22,7 +22,7 @@ using depth_less
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
using depth_less
0:? Sequence
@@ -42,7 +42,7 @@ using depth_less
0:? '@entryPointOutput' ( out float FragDepth)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 16
Capability Shader
@@ -51,6 +51,7 @@ using depth_less
EntryPoint Fragment 4 "PixelShaderFunction" 14
ExecutionMode 4 OriginUpperLeft
ExecutionMode 4 DepthLess
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 8 "@PixelShaderFunction("
Name 14 "@entryPointOutput"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out
index 6baea901eb7..7a6ed45f1a1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out
@@ -1,5 +1,5 @@
hlsl.discard.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: foo(f1; ( temp void)
@@ -25,10 +25,11 @@ gl_FragCoord origin is upper left
0:9 2 (const int)
0:10 Test condition and select ( temp void)
0:10 Condition
-0:10 direct index ( temp float)
-0:10 'input' ( in 4-component vector of float)
-0:10 Constant:
-0:10 0 (const int)
+0:10 Convert float to bool ( temp bool)
+0:10 direct index ( temp float)
+0:10 'input' ( in 4-component vector of float)
+0:10 Constant:
+0:10 0 (const int)
0:10 true case
0:11 Branch: Kill
0:12 Sequence
@@ -54,7 +55,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: foo(f1; ( temp void)
@@ -80,10 +81,11 @@ gl_FragCoord origin is upper left
0:9 2 (const int)
0:10 Test condition and select ( temp void)
0:10 Condition
-0:10 direct index ( temp float)
-0:10 'input' ( in 4-component vector of float)
-0:10 Constant:
-0:10 0 (const int)
+0:10 Convert float to bool ( temp bool)
+0:10 direct index ( temp float)
+0:10 'input' ( in 4-component vector of float)
+0:10 Constant:
+0:10 0 (const int)
0:10 true case
0:11 Branch: Kill
0:12 Sequence
@@ -106,25 +108,26 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 48
+// Generated by (magic number): 80002
+// Id's are bound by 50
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 43
+ EntryPoint Fragment 4 "PixelShaderFunction" 45
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 10 "foo(f1;"
Name 9 "f"
Name 16 "@PixelShaderFunction(vf4;"
Name 15 "input"
Name 25 "param"
- Name 37 "f"
- Name 41 "input"
+ Name 39 "f"
Name 43 "input"
- Name 45 "param"
- Decorate 43(input) Location 0
+ Name 45 "input"
+ Name 47 "param"
+ Decorate 45(input) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -138,17 +141,18 @@ gl_FragCoord origin is upper left
26: TypeInt 32 0
27: 26(int) Constant 2
31: 26(int) Constant 0
- 42: TypePointer Input 12(fvec4)
- 43(input): 42(ptr) Variable Input
+ 34: 6(float) Constant 0
+ 44: TypePointer Input 12(fvec4)
+ 45(input): 44(ptr) Variable Input
4(PixelShaderFunction): 2 Function None 3
5: Label
- 41(input): 13(ptr) Variable Function
- 45(param): 13(ptr) Variable Function
- 44: 12(fvec4) Load 43(input)
- Store 41(input) 44
- 46: 12(fvec4) Load 41(input)
- Store 45(param) 46
- 47: 2 FunctionCall 16(@PixelShaderFunction(vf4;) 45(param)
+ 43(input): 13(ptr) Variable Function
+ 47(param): 13(ptr) Variable Function
+ 46: 12(fvec4) Load 45(input)
+ Store 43(input) 46
+ 48: 12(fvec4) Load 43(input)
+ Store 47(param) 48
+ 49: 2 FunctionCall 16(@PixelShaderFunction(vf4;) 47(param)
Return
FunctionEnd
10(foo(f1;): 2 Function None 8
@@ -167,20 +171,21 @@ gl_FragCoord origin is upper left
15(input): 13(ptr) FunctionParameter
17: Label
25(param): 7(ptr) Variable Function
- 37(f): 7(ptr) Variable Function
+ 39(f): 7(ptr) Variable Function
28: 7(ptr) AccessChain 15(input) 27
29: 6(float) Load 28
Store 25(param) 29
30: 2 FunctionCall 10(foo(f1;) 25(param)
32: 7(ptr) AccessChain 15(input) 31
33: 6(float) Load 32
- SelectionMerge 35 None
- BranchConditional 33 34 35
- 34: Label
+ 35: 20(bool) FOrdNotEqual 33 34
+ SelectionMerge 37 None
+ BranchConditional 35 36 37
+ 36: Label
Kill
- 35: Label
- 38: 7(ptr) AccessChain 15(input) 31
- 39: 6(float) Load 38
- Store 37(f) 39
+ 37: Label
+ 40: 7(ptr) AccessChain 15(input) 31
+ 41: 6(float) Load 40
+ Store 39(f) 41
Kill
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out
index 35cf7482f99..bee6c29d5fa 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out
@@ -1,10 +1,10 @@
hlsl.doLoop.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:2 Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
0:2 Function Parameters:
-0:2 'input' ( in 4-component vector of float)
+0:2 'input' ( in float)
0:? Sequence
0:3 Loop with condition not tested first
0:3 Loop Condition
@@ -18,37 +18,67 @@ gl_FragCoord origin is upper left
0:4 No loop body
0:5 Loop with condition not tested first
0:5 Loop Condition
-0:5 all ( temp bool)
-0:5 Equal ( temp 4-component vector of bool)
-0:5 'input' ( in 4-component vector of float)
-0:5 'input' ( in 4-component vector of float)
+0:5 Compare Greater Than ( temp bool)
+0:5 'input' ( in float)
+0:5 Constant:
+0:5 2.000000
0:5 Loop Body
-0:5 Branch: Return with expression
-0:5 'input' ( in 4-component vector of float)
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 Construct vec4 ( temp 4-component vector of float)
+0:5 'input' ( in float)
+0:6 Loop with condition not tested first
+0:6 Loop Condition
+0:6 Compare Less Than ( temp bool)
+0:6 'input' ( in float)
+0:6 Constant:
+0:6 10.000000
+0:6 Loop Body
+0:6 Pre-Increment ( temp float)
+0:6 'input' ( in float)
+0:7 Loop with condition not tested first
+0:7 Loop Condition
+0:7 Compare Less Than ( temp bool)
+0:7 Pre-Increment ( temp float)
+0:7 'input' ( in float)
+0:7 Constant:
+0:7 10.000000
+0:7 Loop Body
+0:7 Loop with condition tested first
+0:7 Loop Condition
+0:7 Compare Less Than ( temp bool)
+0:7 Pre-Increment ( temp float)
+0:7 'input' ( in float)
+0:7 Constant:
+0:7 10.000000
+0:7 No loop body
+0:8 Branch: Return with expression
+0:8 Construct vec4 ( temp 4-component vector of float)
+0:8 'input' ( in float)
0:2 Function Definition: PixelShaderFunction( ( temp void)
0:2 Function Parameters:
0:? Sequence
-0:2 move second child to first child ( temp 4-component vector of float)
-0:? 'input' ( temp 4-component vector of float)
-0:? 'input' (layout( location=0) in 4-component vector of float)
+0:2 move second child to first child ( temp float)
+0:? 'input' ( temp float)
+0:? 'input' (layout( location=0) in float)
0:2 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:? 'input' ( temp 4-component vector of float)
+0:2 Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:? 'input' ( temp float)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'input' (layout( location=0) in 4-component vector of float)
+0:? 'input' (layout( location=0) in float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:2 Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
0:2 Function Parameters:
-0:2 'input' ( in 4-component vector of float)
+0:2 'input' ( in float)
0:? Sequence
0:3 Loop with condition not tested first
0:3 Loop Condition
@@ -62,76 +92,109 @@ gl_FragCoord origin is upper left
0:4 No loop body
0:5 Loop with condition not tested first
0:5 Loop Condition
-0:5 all ( temp bool)
-0:5 Equal ( temp 4-component vector of bool)
-0:5 'input' ( in 4-component vector of float)
-0:5 'input' ( in 4-component vector of float)
+0:5 Compare Greater Than ( temp bool)
+0:5 'input' ( in float)
+0:5 Constant:
+0:5 2.000000
0:5 Loop Body
-0:5 Branch: Return with expression
-0:5 'input' ( in 4-component vector of float)
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 Construct vec4 ( temp 4-component vector of float)
+0:5 'input' ( in float)
+0:6 Loop with condition not tested first
+0:6 Loop Condition
+0:6 Compare Less Than ( temp bool)
+0:6 'input' ( in float)
+0:6 Constant:
+0:6 10.000000
+0:6 Loop Body
+0:6 Pre-Increment ( temp float)
+0:6 'input' ( in float)
+0:7 Loop with condition not tested first
+0:7 Loop Condition
+0:7 Compare Less Than ( temp bool)
+0:7 Pre-Increment ( temp float)
+0:7 'input' ( in float)
+0:7 Constant:
+0:7 10.000000
+0:7 Loop Body
+0:7 Loop with condition tested first
+0:7 Loop Condition
+0:7 Compare Less Than ( temp bool)
+0:7 Pre-Increment ( temp float)
+0:7 'input' ( in float)
+0:7 Constant:
+0:7 10.000000
+0:7 No loop body
+0:8 Branch: Return with expression
+0:8 Construct vec4 ( temp 4-component vector of float)
+0:8 'input' ( in float)
0:2 Function Definition: PixelShaderFunction( ( temp void)
0:2 Function Parameters:
0:? Sequence
-0:2 move second child to first child ( temp 4-component vector of float)
-0:? 'input' ( temp 4-component vector of float)
-0:? 'input' (layout( location=0) in 4-component vector of float)
+0:2 move second child to first child ( temp float)
+0:? 'input' ( temp float)
+0:? 'input' (layout( location=0) in float)
0:2 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:? 'input' ( temp 4-component vector of float)
+0:2 Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:? 'input' ( temp float)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'input' (layout( location=0) in 4-component vector of float)
+0:? 'input' (layout( location=0) in float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 44
+// Generated by (magic number): 80002
+// Id's are bound by 71
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 37 40
+ EntryPoint Fragment 4 "PixelShaderFunction" 64 67
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
- Name 11 "@PixelShaderFunction(vf4;"
+ Name 11 "@PixelShaderFunction(f1;"
Name 10 "input"
- Name 35 "input"
- Name 37 "input"
- Name 40 "@entryPointOutput"
- Name 41 "param"
- Decorate 37(input) Location 0
- Decorate 40(@entryPointOutput) Location 0
+ Name 62 "input"
+ Name 64 "input"
+ Name 67 "@entryPointOutput"
+ Name 68 "param"
+ Decorate 64(input) Location 0
+ Decorate 67(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
- 7: TypeVector 6(float) 4
- 8: TypePointer Function 7(fvec4)
- 9: TypeFunction 7(fvec4) 8(ptr)
+ 7: TypePointer Function 6(float)
+ 8: TypeVector 6(float) 4
+ 9: TypeFunction 8(fvec4) 7(ptr)
17: TypeBool
18: 17(bool) ConstantFalse
- 31: TypeVector 17(bool) 4
- 36: TypePointer Input 7(fvec4)
- 37(input): 36(ptr) Variable Input
- 39: TypePointer Output 7(fvec4)
-40(@entryPointOutput): 39(ptr) Variable Output
+ 31: 6(float) Constant 1073741824
+ 38: 6(float) Constant 1065353216
+ 41: 6(float) Constant 1092616192
+ 63: TypePointer Input 6(float)
+ 64(input): 63(ptr) Variable Input
+ 66: TypePointer Output 8(fvec4)
+67(@entryPointOutput): 66(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
- 35(input): 8(ptr) Variable Function
- 41(param): 8(ptr) Variable Function
- 38: 7(fvec4) Load 37(input)
- Store 35(input) 38
- 42: 7(fvec4) Load 35(input)
- Store 41(param) 42
- 43: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 41(param)
- Store 40(@entryPointOutput) 43
+ 62(input): 7(ptr) Variable Function
+ 68(param): 7(ptr) Variable Function
+ 65: 6(float) Load 64(input)
+ Store 62(input) 65
+ 69: 6(float) Load 62(input)
+ Store 68(param) 69
+ 70: 8(fvec4) FunctionCall 11(@PixelShaderFunction(f1;) 68(param)
+ Store 67(@entryPointOutput) 70
Return
FunctionEnd
-11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9
- 10(input): 8(ptr) FunctionParameter
+11(@PixelShaderFunction(f1;): 8(fvec4) Function None 9
+ 10(input): 7(ptr) FunctionParameter
12: Label
Branch 13
13: Label
- LoopMerge 15 16 None
+ LoopMerge 15 16 Unroll
Branch 14
14: Label
Branch 16
@@ -140,7 +203,7 @@ gl_FragCoord origin is upper left
15: Label
Branch 19
19: Label
- LoopMerge 21 22 None
+ LoopMerge 21 22 Unroll
Branch 20
20: Label
Branch 22
@@ -152,15 +215,57 @@ gl_FragCoord origin is upper left
LoopMerge 25 26 None
Branch 24
24: Label
- 27: 7(fvec4) Load 10(input)
- ReturnValue 27
+ 27: 6(float) Load 10(input)
+ 28: 8(fvec4) CompositeConstruct 27 27 27 27
+ ReturnValue 28
26: Label
- 29: 7(fvec4) Load 10(input)
- 30: 7(fvec4) Load 10(input)
- 32: 31(bvec4) FOrdEqual 29 30
- 33: 17(bool) All 32
- BranchConditional 33 23 25
+ 30: 6(float) Load 10(input)
+ 32: 17(bool) FOrdGreaterThan 30 31
+ BranchConditional 32 23 25
25: Label
- 34: 7(fvec4) Undef
- ReturnValue 34
+ Branch 33
+ 33: Label
+ LoopMerge 35 36 None
+ Branch 34
+ 34: Label
+ 37: 6(float) Load 10(input)
+ 39: 6(float) FAdd 37 38
+ Store 10(input) 39
+ Branch 36
+ 36: Label
+ 40: 6(float) Load 10(input)
+ 42: 17(bool) FOrdLessThan 40 41
+ BranchConditional 42 33 35
+ 35: Label
+ Branch 43
+ 43: Label
+ LoopMerge 45 46 None
+ Branch 44
+ 44: Label
+ Branch 47
+ 47: Label
+ LoopMerge 49 50 None
+ Branch 51
+ 51: Label
+ 52: 6(float) Load 10(input)
+ 53: 6(float) FAdd 52 38
+ Store 10(input) 53
+ 54: 17(bool) FOrdLessThan 53 41
+ BranchConditional 54 48 49
+ 48: Label
+ Branch 50
+ 50: Label
+ Branch 47
+ 49: Label
+ Branch 46
+ 46: Label
+ 55: 6(float) Load 10(input)
+ 56: 6(float) FAdd 55 38
+ Store 10(input) 56
+ 57: 17(bool) FOrdLessThan 56 41
+ BranchConditional 57 43 45
+ 45: Label
+ 58: 6(float) Load 10(input)
+ 59: 8(fvec4) CompositeConstruct 58 58 58 58
+ ReturnValue 59
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.1.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.1.tese.out
new file mode 100644
index 00000000000..e0fa528f811
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.1.tese.out
@@ -0,0 +1,457 @@
+hlsl.domain.1.tese
+Shader version: 500
+input primitive = triangles
+vertex spacing = none
+triangle order = none
+0:? Sequence
+0:22 Function Definition: @main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Function Parameters:
+0:22 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 'f' ( in float)
+0:22 'tesscoord' ( in 3-component vector of float)
+0:22 'pcf_data' ( in structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:? Sequence
+0:25 move second child to first child ( temp 4-component vector of float)
+0:25 pos: direct index for structure ( temp 4-component vector of float)
+0:25 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Constant:
+0:25 0 (const int)
+0:25 add ( temp 4-component vector of float)
+0:25 pos: direct index for structure ( temp 4-component vector of float)
+0:25 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 0 (const int)
+0:25 component-wise multiply ( temp float)
+0:25 direct index ( temp float)
+0:25 'tesscoord' ( in 3-component vector of float)
+0:25 Constant:
+0:25 0 (const int)
+0:25 'f' ( in float)
+0:26 move second child to first child ( temp 3-component vector of float)
+0:26 norm: direct index for structure ( temp 3-component vector of float)
+0:26 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:26 Constant:
+0:26 1 (const int)
+0:26 add ( temp 3-component vector of float)
+0:26 norm: direct index for structure ( temp 3-component vector of float)
+0:26 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:26 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 direct index ( temp float)
+0:26 'tesscoord' ( in 3-component vector of float)
+0:26 Constant:
+0:26 1 (const int)
+0:28 direct index ( temp float)
+0:28 'tesscoord' ( in 3-component vector of float)
+0:28 Constant:
+0:28 2 (const int)
+0:30 Branch: Return with expression
+0:30 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Function Definition: main( ( temp void)
+0:22 Function Parameters:
+0:? Sequence
+0:22 move second child to first child ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 move second child to first child ( temp float)
+0:? 'f' ( temp float)
+0:? 'f' (layout( location=2) patch in float)
+0:22 move second child to first child ( temp 3-component vector of float)
+0:? 'tesscoord' ( temp 3-component vector of float)
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:22 Sequence
+0:22 move second child to first child ( temp float)
+0:22 direct index ( temp float)
+0:22 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:22 Constant:
+0:22 0 (const int)
+0:22 move second child to first child ( temp float)
+0:22 direct index ( temp float)
+0:22 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:22 Constant:
+0:22 1 (const int)
+0:22 move second child to first child ( temp float)
+0:22 direct index ( temp float)
+0:22 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 2 (const int)
+0:22 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:22 Constant:
+0:22 2 (const int)
+0:22 move second child to first child ( temp float)
+0:22 flInsideTessFactor: direct index for structure ( temp float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 Constant:
+0:22 1 (const int)
+0:22 direct index ( patch in float TessLevelInner)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Function Call: @main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'f' ( temp float)
+0:? 'tesscoord' ( temp 3-component vector of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:22 pos: direct index for structure ( temp 4-component vector of float)
+0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Constant:
+0:22 0 (const int)
+0:22 move second child to first child ( temp 3-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:22 norm: direct index for structure ( temp 3-component vector of float)
+0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Constant:
+0:22 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'f' (layout( location=2) patch in float)
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 500
+input primitive = triangles
+vertex spacing = none
+triangle order = none
+0:? Sequence
+0:22 Function Definition: @main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Function Parameters:
+0:22 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 'f' ( in float)
+0:22 'tesscoord' ( in 3-component vector of float)
+0:22 'pcf_data' ( in structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:? Sequence
+0:25 move second child to first child ( temp 4-component vector of float)
+0:25 pos: direct index for structure ( temp 4-component vector of float)
+0:25 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Constant:
+0:25 0 (const int)
+0:25 add ( temp 4-component vector of float)
+0:25 pos: direct index for structure ( temp 4-component vector of float)
+0:25 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 0 (const int)
+0:25 component-wise multiply ( temp float)
+0:25 direct index ( temp float)
+0:25 'tesscoord' ( in 3-component vector of float)
+0:25 Constant:
+0:25 0 (const int)
+0:25 'f' ( in float)
+0:26 move second child to first child ( temp 3-component vector of float)
+0:26 norm: direct index for structure ( temp 3-component vector of float)
+0:26 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:26 Constant:
+0:26 1 (const int)
+0:26 add ( temp 3-component vector of float)
+0:26 norm: direct index for structure ( temp 3-component vector of float)
+0:26 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:26 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 direct index ( temp float)
+0:26 'tesscoord' ( in 3-component vector of float)
+0:26 Constant:
+0:26 1 (const int)
+0:28 direct index ( temp float)
+0:28 'tesscoord' ( in 3-component vector of float)
+0:28 Constant:
+0:28 2 (const int)
+0:30 Branch: Return with expression
+0:30 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Function Definition: main( ( temp void)
+0:22 Function Parameters:
+0:? Sequence
+0:22 move second child to first child ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 move second child to first child ( temp float)
+0:? 'f' ( temp float)
+0:? 'f' (layout( location=2) patch in float)
+0:22 move second child to first child ( temp 3-component vector of float)
+0:? 'tesscoord' ( temp 3-component vector of float)
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:22 Sequence
+0:22 move second child to first child ( temp float)
+0:22 direct index ( temp float)
+0:22 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:22 Constant:
+0:22 0 (const int)
+0:22 move second child to first child ( temp float)
+0:22 direct index ( temp float)
+0:22 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:22 Constant:
+0:22 1 (const int)
+0:22 move second child to first child ( temp float)
+0:22 direct index ( temp float)
+0:22 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 2 (const int)
+0:22 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:22 Constant:
+0:22 2 (const int)
+0:22 move second child to first child ( temp float)
+0:22 flInsideTessFactor: direct index for structure ( temp float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 Constant:
+0:22 1 (const int)
+0:22 direct index ( patch in float TessLevelInner)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Function Call: @main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'f' ( temp float)
+0:? 'tesscoord' ( temp 3-component vector of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:22 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:22 pos: direct index for structure ( temp 4-component vector of float)
+0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Constant:
+0:22 0 (const int)
+0:22 move second child to first child ( temp 3-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:22 norm: direct index for structure ( temp 3-component vector of float)
+0:22 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:22 Constant:
+0:22 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'f' (layout( location=2) patch in float)
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 103
+
+ Capability Tessellation
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint TessellationEvaluation 4 "main" 54 58 62 68 82 96 100
+ ExecutionMode 4 Triangles
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "ds_in_t"
+ MemberName 9(ds_in_t) 0 "pos"
+ MemberName 9(ds_in_t) 1 "norm"
+ Name 16 "pcf_in_t"
+ MemberName 16(pcf_in_t) 0 "flTessFactor"
+ MemberName 16(pcf_in_t) 1 "flInsideTessFactor"
+ Name 18 "gs_in_t"
+ MemberName 18(gs_in_t) 0 "pos"
+ MemberName 18(gs_in_t) 1 "norm"
+ Name 24 "@main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11;"
+ Name 20 "i"
+ Name 21 "f"
+ Name 22 "tesscoord"
+ Name 23 "pcf_data"
+ Name 27 "o"
+ Name 52 "i"
+ Name 54 "i"
+ Name 56 "f"
+ Name 58 "f"
+ Name 60 "tesscoord"
+ Name 62 "tesscoord"
+ Name 64 "pcf_data"
+ Name 68 "pcf_data.flTessFactor"
+ Name 82 "pcf_data.flInsideTessFactor"
+ Name 86 "flattenTemp"
+ Name 88 "param"
+ Name 90 "param"
+ Name 92 "param"
+ Name 96 "@entryPointOutput.pos"
+ Name 100 "@entryPointOutput.norm"
+ Decorate 54(i) Location 0
+ Decorate 58(f) Patch
+ Decorate 58(f) Location 2
+ Decorate 62(tesscoord) Patch
+ Decorate 62(tesscoord) BuiltIn TessCoord
+ Decorate 68(pcf_data.flTessFactor) Patch
+ Decorate 68(pcf_data.flTessFactor) BuiltIn TessLevelOuter
+ Decorate 82(pcf_data.flInsideTessFactor) Patch
+ Decorate 82(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner
+ Decorate 96(@entryPointOutput.pos) Location 0
+ Decorate 100(@entryPointOutput.norm) Location 1
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeVector 6(float) 3
+ 9(ds_in_t): TypeStruct 7(fvec4) 8(fvec3)
+ 10: TypeInt 32 0
+ 11: 10(int) Constant 3
+ 12: TypeArray 9(ds_in_t) 11
+ 13: TypePointer Function 6(float)
+ 14: TypePointer Function 8(fvec3)
+ 15: TypeArray 6(float) 11
+ 16(pcf_in_t): TypeStruct 15 6(float)
+ 17: TypePointer Function 16(pcf_in_t)
+ 18(gs_in_t): TypeStruct 7(fvec4) 8(fvec3)
+ 19: TypeFunction 18(gs_in_t) 12 13(ptr) 14(ptr) 17(ptr)
+ 26: TypePointer Function 18(gs_in_t)
+ 28: TypeInt 32 1
+ 29: 28(int) Constant 0
+ 31: 10(int) Constant 0
+ 38: TypePointer Function 7(fvec4)
+ 40: 28(int) Constant 1
+ 42: 10(int) Constant 1
+ 51: TypePointer Function 12
+ 53: TypePointer Input 12
+ 54(i): 53(ptr) Variable Input
+ 57: TypePointer Input 6(float)
+ 58(f): 57(ptr) Variable Input
+ 61: TypePointer Input 8(fvec3)
+ 62(tesscoord): 61(ptr) Variable Input
+ 65: 10(int) Constant 4
+ 66: TypeArray 6(float) 65
+ 67: TypePointer Input 66
+68(pcf_data.flTessFactor): 67(ptr) Variable Input
+ 75: 28(int) Constant 2
+ 79: 10(int) Constant 2
+ 80: TypeArray 6(float) 79
+ 81: TypePointer Input 80
+82(pcf_data.flInsideTessFactor): 81(ptr) Variable Input
+ 95: TypePointer Output 7(fvec4)
+96(@entryPointOutput.pos): 95(ptr) Variable Output
+ 99: TypePointer Output 8(fvec3)
+100(@entryPointOutput.norm): 99(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 52(i): 51(ptr) Variable Function
+ 56(f): 13(ptr) Variable Function
+ 60(tesscoord): 14(ptr) Variable Function
+ 64(pcf_data): 17(ptr) Variable Function
+ 86(flattenTemp): 26(ptr) Variable Function
+ 88(param): 13(ptr) Variable Function
+ 90(param): 14(ptr) Variable Function
+ 92(param): 17(ptr) Variable Function
+ 55: 12 Load 54(i)
+ Store 52(i) 55
+ 59: 6(float) Load 58(f)
+ Store 56(f) 59
+ 63: 8(fvec3) Load 62(tesscoord)
+ Store 60(tesscoord) 63
+ 69: 57(ptr) AccessChain 68(pcf_data.flTessFactor) 29
+ 70: 6(float) Load 69
+ 71: 13(ptr) AccessChain 64(pcf_data) 29 29
+ Store 71 70
+ 72: 57(ptr) AccessChain 68(pcf_data.flTessFactor) 40
+ 73: 6(float) Load 72
+ 74: 13(ptr) AccessChain 64(pcf_data) 29 40
+ Store 74 73
+ 76: 57(ptr) AccessChain 68(pcf_data.flTessFactor) 75
+ 77: 6(float) Load 76
+ 78: 13(ptr) AccessChain 64(pcf_data) 29 75
+ Store 78 77
+ 83: 57(ptr) AccessChain 82(pcf_data.flInsideTessFactor) 29
+ 84: 6(float) Load 83
+ 85: 13(ptr) AccessChain 64(pcf_data) 40
+ Store 85 84
+ 87: 12 Load 52(i)
+ 89: 6(float) Load 56(f)
+ Store 88(param) 89
+ 91: 8(fvec3) Load 60(tesscoord)
+ Store 90(param) 91
+ 93:16(pcf_in_t) Load 64(pcf_data)
+ Store 92(param) 93
+ 94: 18(gs_in_t) FunctionCall 24(@main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11;) 87 88(param) 90(param) 92(param)
+ Store 86(flattenTemp) 94
+ 97: 38(ptr) AccessChain 86(flattenTemp) 29
+ 98: 7(fvec4) Load 97
+ Store 96(@entryPointOutput.pos) 98
+ 101: 14(ptr) AccessChain 86(flattenTemp) 40
+ 102: 8(fvec3) Load 101
+ Store 100(@entryPointOutput.norm) 102
+ Return
+ FunctionEnd
+24(@main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11;): 18(gs_in_t) Function None 19
+ 20(i): 12 FunctionParameter
+ 21(f): 13(ptr) FunctionParameter
+ 22(tesscoord): 14(ptr) FunctionParameter
+ 23(pcf_data): 17(ptr) FunctionParameter
+ 25: Label
+ 27(o): 26(ptr) Variable Function
+ 30: 7(fvec4) CompositeExtract 20(i) 0 0
+ 32: 13(ptr) AccessChain 22(tesscoord) 31
+ 33: 6(float) Load 32
+ 34: 6(float) Load 21(f)
+ 35: 6(float) FMul 33 34
+ 36: 7(fvec4) CompositeConstruct 35 35 35 35
+ 37: 7(fvec4) FAdd 30 36
+ 39: 38(ptr) AccessChain 27(o) 29
+ Store 39 37
+ 41: 8(fvec3) CompositeExtract 20(i) 0 1
+ 43: 13(ptr) AccessChain 22(tesscoord) 42
+ 44: 6(float) Load 43
+ 45: 8(fvec3) CompositeConstruct 44 44 44
+ 46: 8(fvec3) FAdd 41 45
+ 47: 14(ptr) AccessChain 27(o) 40
+ Store 47 46
+ 48: 18(gs_in_t) Load 27(o)
+ ReturnValue 48
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.2.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.2.tese.out
new file mode 100644
index 00000000000..02c86aea8d9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.2.tese.out
@@ -0,0 +1,447 @@
+hlsl.domain.2.tese
+Shader version: 500
+input primitive = triangles
+vertex spacing = none
+triangle order = none
+0:? Sequence
+0:25 Function Definition: @main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Function Parameters:
+0:25 'pcf_data' ( in structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 'tesscoord' ( in 3-component vector of float)
+0:? Sequence
+0:28 move second child to first child ( temp 4-component vector of float)
+0:28 pos: direct index for structure ( temp 4-component vector of float)
+0:28 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 Constant:
+0:28 0 (const int)
+0:28 add ( temp 4-component vector of float)
+0:28 pos: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 direct index ( temp float)
+0:28 'tesscoord' ( in 3-component vector of float)
+0:28 Constant:
+0:28 0 (const int)
+0:29 move second child to first child ( temp 3-component vector of float)
+0:29 norm: direct index for structure ( temp 3-component vector of float)
+0:29 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:29 Constant:
+0:29 1 (const int)
+0:29 add ( temp 3-component vector of float)
+0:29 norm: direct index for structure ( temp 3-component vector of float)
+0:29 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:29 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 direct index ( temp float)
+0:29 'tesscoord' ( in 3-component vector of float)
+0:29 Constant:
+0:29 1 (const int)
+0:31 direct index ( temp float)
+0:31 'tesscoord' ( in 3-component vector of float)
+0:31 Constant:
+0:31 2 (const int)
+0:33 Branch: Return with expression
+0:33 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Function Definition: main( ( temp void)
+0:25 Function Parameters:
+0:? Sequence
+0:25 Sequence
+0:25 move second child to first child ( temp float)
+0:25 direct index ( temp float)
+0:25 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 0 (const int)
+0:25 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:25 Constant:
+0:25 0 (const int)
+0:25 move second child to first child ( temp float)
+0:25 direct index ( temp float)
+0:25 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:25 Constant:
+0:25 1 (const int)
+0:25 move second child to first child ( temp float)
+0:25 direct index ( temp float)
+0:25 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:25 Constant:
+0:25 2 (const int)
+0:25 move second child to first child ( temp float)
+0:25 flInsideTessFactor: direct index for structure ( temp float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 1 (const int)
+0:25 direct index ( patch in float TessLevelInner)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+0:25 Constant:
+0:25 0 (const int)
+0:25 move second child to first child ( temp float)
+0:25 foo: direct index for structure ( temp float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 2 (const int)
+0:? 'pcf_data.foo' (layout( location=2) patch in float)
+0:25 move second child to first child ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 move second child to first child ( temp 3-component vector of float)
+0:? 'tesscoord' ( temp 3-component vector of float)
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:25 Sequence
+0:25 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Function Call: @main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'tesscoord' ( temp 3-component vector of float)
+0:25 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:25 pos: direct index for structure ( temp 4-component vector of float)
+0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Constant:
+0:25 0 (const int)
+0:25 move second child to first child ( temp 3-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:25 norm: direct index for structure ( temp 3-component vector of float)
+0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Constant:
+0:25 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+0:? 'pcf_data.foo' (layout( location=2) patch in float)
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 500
+input primitive = triangles
+vertex spacing = none
+triangle order = none
+0:? Sequence
+0:25 Function Definition: @main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Function Parameters:
+0:25 'pcf_data' ( in structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 'tesscoord' ( in 3-component vector of float)
+0:? Sequence
+0:28 move second child to first child ( temp 4-component vector of float)
+0:28 pos: direct index for structure ( temp 4-component vector of float)
+0:28 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 Constant:
+0:28 0 (const int)
+0:28 add ( temp 4-component vector of float)
+0:28 pos: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 direct index ( temp float)
+0:28 'tesscoord' ( in 3-component vector of float)
+0:28 Constant:
+0:28 0 (const int)
+0:29 move second child to first child ( temp 3-component vector of float)
+0:29 norm: direct index for structure ( temp 3-component vector of float)
+0:29 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:29 Constant:
+0:29 1 (const int)
+0:29 add ( temp 3-component vector of float)
+0:29 norm: direct index for structure ( temp 3-component vector of float)
+0:29 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:29 'i' ( const (read only) 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 direct index ( temp float)
+0:29 'tesscoord' ( in 3-component vector of float)
+0:29 Constant:
+0:29 1 (const int)
+0:31 direct index ( temp float)
+0:31 'tesscoord' ( in 3-component vector of float)
+0:31 Constant:
+0:31 2 (const int)
+0:33 Branch: Return with expression
+0:33 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Function Definition: main( ( temp void)
+0:25 Function Parameters:
+0:? Sequence
+0:25 Sequence
+0:25 move second child to first child ( temp float)
+0:25 direct index ( temp float)
+0:25 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 0 (const int)
+0:25 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:25 Constant:
+0:25 0 (const int)
+0:25 move second child to first child ( temp float)
+0:25 direct index ( temp float)
+0:25 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:25 Constant:
+0:25 1 (const int)
+0:25 move second child to first child ( temp float)
+0:25 direct index ( temp float)
+0:25 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:25 Constant:
+0:25 2 (const int)
+0:25 move second child to first child ( temp float)
+0:25 flInsideTessFactor: direct index for structure ( temp float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 1 (const int)
+0:25 direct index ( patch in float TessLevelInner)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+0:25 Constant:
+0:25 0 (const int)
+0:25 move second child to first child ( temp float)
+0:25 foo: direct index for structure ( temp float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:25 Constant:
+0:25 2 (const int)
+0:? 'pcf_data.foo' (layout( location=2) patch in float)
+0:25 move second child to first child ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 move second child to first child ( temp 3-component vector of float)
+0:? 'tesscoord' ( temp 3-component vector of float)
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:25 Sequence
+0:25 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Function Call: @main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor, temp float foo})
+0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'tesscoord' ( temp 3-component vector of float)
+0:25 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:25 pos: direct index for structure ( temp 4-component vector of float)
+0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Constant:
+0:25 0 (const int)
+0:25 move second child to first child ( temp 3-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:25 norm: direct index for structure ( temp 3-component vector of float)
+0:25 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:25 Constant:
+0:25 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+0:? 'pcf_data.foo' (layout( location=2) patch in float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 98
+
+ Capability Tessellation
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint TessellationEvaluation 4 "main" 52 67 71 77 81 91 95
+ ExecutionMode 4 Triangles
+ Source HLSL 500
+ Name 4 "main"
+ Name 10 "pcf_in_t"
+ MemberName 10(pcf_in_t) 0 "flTessFactor"
+ MemberName 10(pcf_in_t) 1 "flInsideTessFactor"
+ MemberName 10(pcf_in_t) 2 "foo"
+ Name 14 "ds_in_t"
+ MemberName 14(ds_in_t) 0 "pos"
+ MemberName 14(ds_in_t) 1 "norm"
+ Name 17 "gs_in_t"
+ MemberName 17(gs_in_t) 0 "pos"
+ MemberName 17(gs_in_t) 1 "norm"
+ Name 22 "@main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3;"
+ Name 19 "pcf_data"
+ Name 20 "i"
+ Name 21 "tesscoord"
+ Name 25 "o"
+ Name 48 "pcf_data"
+ Name 52 "pcf_data.flTessFactor"
+ Name 67 "pcf_data.flInsideTessFactor"
+ Name 71 "pcf_data.foo"
+ Name 75 "i"
+ Name 77 "i"
+ Name 79 "tesscoord"
+ Name 81 "tesscoord"
+ Name 83 "flattenTemp"
+ Name 85 "param"
+ Name 87 "param"
+ Name 91 "@entryPointOutput.pos"
+ Name 95 "@entryPointOutput.norm"
+ Decorate 52(pcf_data.flTessFactor) Patch
+ Decorate 52(pcf_data.flTessFactor) BuiltIn TessLevelOuter
+ Decorate 67(pcf_data.flInsideTessFactor) Patch
+ Decorate 67(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner
+ Decorate 71(pcf_data.foo) Patch
+ Decorate 71(pcf_data.foo) Location 2
+ Decorate 77(i) Location 0
+ Decorate 81(tesscoord) Patch
+ Decorate 81(tesscoord) BuiltIn TessCoord
+ Decorate 91(@entryPointOutput.pos) Location 0
+ Decorate 95(@entryPointOutput.norm) Location 1
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeInt 32 0
+ 8: 7(int) Constant 3
+ 9: TypeArray 6(float) 8
+ 10(pcf_in_t): TypeStruct 9 6(float) 6(float)
+ 11: TypePointer Function 10(pcf_in_t)
+ 12: TypeVector 6(float) 4
+ 13: TypeVector 6(float) 3
+ 14(ds_in_t): TypeStruct 12(fvec4) 13(fvec3)
+ 15: TypeArray 14(ds_in_t) 8
+ 16: TypePointer Function 13(fvec3)
+ 17(gs_in_t): TypeStruct 12(fvec4) 13(fvec3)
+ 18: TypeFunction 17(gs_in_t) 11(ptr) 15 16(ptr)
+ 24: TypePointer Function 17(gs_in_t)
+ 26: TypeInt 32 1
+ 27: 26(int) Constant 0
+ 29: 7(int) Constant 0
+ 30: TypePointer Function 6(float)
+ 35: TypePointer Function 12(fvec4)
+ 37: 26(int) Constant 1
+ 39: 7(int) Constant 1
+ 49: 7(int) Constant 4
+ 50: TypeArray 6(float) 49
+ 51: TypePointer Input 50
+52(pcf_data.flTessFactor): 51(ptr) Variable Input
+ 53: TypePointer Input 6(float)
+ 60: 26(int) Constant 2
+ 64: 7(int) Constant 2
+ 65: TypeArray 6(float) 64
+ 66: TypePointer Input 65
+67(pcf_data.flInsideTessFactor): 66(ptr) Variable Input
+71(pcf_data.foo): 53(ptr) Variable Input
+ 74: TypePointer Function 15
+ 76: TypePointer Input 15
+ 77(i): 76(ptr) Variable Input
+ 80: TypePointer Input 13(fvec3)
+ 81(tesscoord): 80(ptr) Variable Input
+ 90: TypePointer Output 12(fvec4)
+91(@entryPointOutput.pos): 90(ptr) Variable Output
+ 94: TypePointer Output 13(fvec3)
+95(@entryPointOutput.norm): 94(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 48(pcf_data): 11(ptr) Variable Function
+ 75(i): 74(ptr) Variable Function
+ 79(tesscoord): 16(ptr) Variable Function
+ 83(flattenTemp): 24(ptr) Variable Function
+ 85(param): 11(ptr) Variable Function
+ 87(param): 16(ptr) Variable Function
+ 54: 53(ptr) AccessChain 52(pcf_data.flTessFactor) 27
+ 55: 6(float) Load 54
+ 56: 30(ptr) AccessChain 48(pcf_data) 27 27
+ Store 56 55
+ 57: 53(ptr) AccessChain 52(pcf_data.flTessFactor) 37
+ 58: 6(float) Load 57
+ 59: 30(ptr) AccessChain 48(pcf_data) 27 37
+ Store 59 58
+ 61: 53(ptr) AccessChain 52(pcf_data.flTessFactor) 60
+ 62: 6(float) Load 61
+ 63: 30(ptr) AccessChain 48(pcf_data) 27 60
+ Store 63 62
+ 68: 53(ptr) AccessChain 67(pcf_data.flInsideTessFactor) 27
+ 69: 6(float) Load 68
+ 70: 30(ptr) AccessChain 48(pcf_data) 37
+ Store 70 69
+ 72: 6(float) Load 71(pcf_data.foo)
+ 73: 30(ptr) AccessChain 48(pcf_data) 60
+ Store 73 72
+ 78: 15 Load 77(i)
+ Store 75(i) 78
+ 82: 13(fvec3) Load 81(tesscoord)
+ Store 79(tesscoord) 82
+ 84: 15 Load 75(i)
+ 86:10(pcf_in_t) Load 48(pcf_data)
+ Store 85(param) 86
+ 88: 13(fvec3) Load 79(tesscoord)
+ Store 87(param) 88
+ 89: 17(gs_in_t) FunctionCall 22(@main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3;) 85(param) 84 87(param)
+ Store 83(flattenTemp) 89
+ 92: 35(ptr) AccessChain 83(flattenTemp) 27
+ 93: 12(fvec4) Load 92
+ Store 91(@entryPointOutput.pos) 93
+ 96: 16(ptr) AccessChain 83(flattenTemp) 37
+ 97: 13(fvec3) Load 96
+ Store 95(@entryPointOutput.norm) 97
+ Return
+ FunctionEnd
+22(@main(struct-pcf_in_t-f1[3]-f1-f11;struct-ds_in_t-vf4-vf31[3];vf3;): 17(gs_in_t) Function None 18
+ 19(pcf_data): 11(ptr) FunctionParameter
+ 20(i): 15 FunctionParameter
+ 21(tesscoord): 16(ptr) FunctionParameter
+ 23: Label
+ 25(o): 24(ptr) Variable Function
+ 28: 12(fvec4) CompositeExtract 20(i) 0 0
+ 31: 30(ptr) AccessChain 21(tesscoord) 29
+ 32: 6(float) Load 31
+ 33: 12(fvec4) CompositeConstruct 32 32 32 32
+ 34: 12(fvec4) FAdd 28 33
+ 36: 35(ptr) AccessChain 25(o) 27
+ Store 36 34
+ 38: 13(fvec3) CompositeExtract 20(i) 0 1
+ 40: 30(ptr) AccessChain 21(tesscoord) 39
+ 41: 6(float) Load 40
+ 42: 13(fvec3) CompositeConstruct 41 41 41
+ 43: 13(fvec3) FAdd 38 42
+ 44: 16(ptr) AccessChain 25(o) 37
+ Store 44 43
+ 45: 17(gs_in_t) Load 25(o)
+ ReturnValue 45
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.3.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.3.tese.out
new file mode 100644
index 00000000000..6330d088b64
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.domain.3.tese.out
@@ -0,0 +1,424 @@
+hlsl.domain.3.tese
+Shader version: 500
+input primitive = isolines
+vertex spacing = none
+triangle order = none
+0:? Sequence
+0:24 Function Definition: @main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Function Parameters:
+0:24 'i' ( const (read only) 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 'tesscoord' ( in 2-component vector of float)
+0:24 'pcf_data' ( in structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:? Sequence
+0:27 move second child to first child ( temp 4-component vector of float)
+0:27 pos: direct index for structure ( temp 4-component vector of float)
+0:27 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:27 Constant:
+0:27 0 (const int)
+0:27 add ( temp 4-component vector of float)
+0:27 pos: direct index for structure ( temp 4-component vector of float)
+0:27 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:27 'i' ( const (read only) 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:27 direct index ( temp float)
+0:27 'tesscoord' ( in 2-component vector of float)
+0:27 Constant:
+0:27 0 (const int)
+0:28 move second child to first child ( temp 3-component vector of float)
+0:28 norm: direct index for structure ( temp 3-component vector of float)
+0:28 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 Constant:
+0:28 1 (const int)
+0:28 add ( temp 3-component vector of float)
+0:28 norm: direct index for structure ( temp 3-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 'i' ( const (read only) 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 direct index ( temp float)
+0:28 'tesscoord' ( in 2-component vector of float)
+0:28 Constant:
+0:28 1 (const int)
+0:30 Branch: Return with expression
+0:30 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Function Definition: main( ( temp void)
+0:24 Function Parameters:
+0:? Sequence
+0:24 move second child to first child ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' (layout( location=0) in 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 move second child to first child ( temp 2-component vector of float)
+0:? 'tesscoord' ( temp 2-component vector of float)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:24 Sequence
+0:24 move second child to first child ( temp float)
+0:24 direct index ( temp float)
+0:24 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:24 Constant:
+0:24 0 (const int)
+0:24 move second child to first child ( temp float)
+0:24 direct index ( temp float)
+0:24 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:24 Constant:
+0:24 1 (const int)
+0:24 move second child to first child ( temp float)
+0:24 direct index ( temp float)
+0:24 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 2 (const int)
+0:24 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:24 Constant:
+0:24 2 (const int)
+0:24 move second child to first child ( temp float)
+0:24 flInsideTessFactor: direct index for structure ( temp float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 Constant:
+0:24 1 (const int)
+0:24 direct index ( patch in float TessLevelInner)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Sequence
+0:24 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Function Call: @main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'tesscoord' ( temp 2-component vector of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:24 pos: direct index for structure ( temp 4-component vector of float)
+0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Constant:
+0:24 0 (const int)
+0:24 move second child to first child ( temp 3-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:24 norm: direct index for structure ( temp 3-component vector of float)
+0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Constant:
+0:24 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:? 'i' (layout( location=0) in 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 500
+input primitive = isolines
+vertex spacing = none
+triangle order = none
+0:? Sequence
+0:24 Function Definition: @main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Function Parameters:
+0:24 'i' ( const (read only) 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 'tesscoord' ( in 2-component vector of float)
+0:24 'pcf_data' ( in structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:? Sequence
+0:27 move second child to first child ( temp 4-component vector of float)
+0:27 pos: direct index for structure ( temp 4-component vector of float)
+0:27 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:27 Constant:
+0:27 0 (const int)
+0:27 add ( temp 4-component vector of float)
+0:27 pos: direct index for structure ( temp 4-component vector of float)
+0:27 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:27 'i' ( const (read only) 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:27 direct index ( temp float)
+0:27 'tesscoord' ( in 2-component vector of float)
+0:27 Constant:
+0:27 0 (const int)
+0:28 move second child to first child ( temp 3-component vector of float)
+0:28 norm: direct index for structure ( temp 3-component vector of float)
+0:28 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 Constant:
+0:28 1 (const int)
+0:28 add ( temp 3-component vector of float)
+0:28 norm: direct index for structure ( temp 3-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 'i' ( const (read only) 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 direct index ( temp float)
+0:28 'tesscoord' ( in 2-component vector of float)
+0:28 Constant:
+0:28 1 (const int)
+0:30 Branch: Return with expression
+0:30 'o' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Function Definition: main( ( temp void)
+0:24 Function Parameters:
+0:? Sequence
+0:24 move second child to first child ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' (layout( location=0) in 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 move second child to first child ( temp 2-component vector of float)
+0:? 'tesscoord' ( temp 2-component vector of float)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:24 Sequence
+0:24 move second child to first child ( temp float)
+0:24 direct index ( temp float)
+0:24 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:24 Constant:
+0:24 0 (const int)
+0:24 move second child to first child ( temp float)
+0:24 direct index ( temp float)
+0:24 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:24 Constant:
+0:24 1 (const int)
+0:24 move second child to first child ( temp float)
+0:24 direct index ( temp float)
+0:24 flTessFactor: direct index for structure ( temp 3-element array of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 2 (const int)
+0:24 direct index ( patch in float TessLevelOuter)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:24 Constant:
+0:24 2 (const int)
+0:24 move second child to first child ( temp float)
+0:24 flInsideTessFactor: direct index for structure ( temp float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 Constant:
+0:24 1 (const int)
+0:24 direct index ( patch in float TessLevelInner)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Sequence
+0:24 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Function Call: @main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11; ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'i' ( temp 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'tesscoord' ( temp 2-component vector of float)
+0:? 'pcf_data' ( temp structure{ temp 3-element array of float flTessFactor, temp float flInsideTessFactor})
+0:24 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:24 pos: direct index for structure ( temp 4-component vector of float)
+0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Constant:
+0:24 0 (const int)
+0:24 move second child to first child ( temp 3-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:24 norm: direct index for structure ( temp 3-component vector of float)
+0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:24 Constant:
+0:24 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
+0:? 'i' (layout( location=0) in 2-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
+0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
+0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
+0:? 'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 100
+
+ Capability Tessellation
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint TessellationEvaluation 4 "main" 54 58 67 81 93 97
+ ExecutionMode 4 Isolines
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "ds_in_t"
+ MemberName 9(ds_in_t) 0 "pos"
+ MemberName 9(ds_in_t) 1 "norm"
+ Name 17 "pcf_in_t"
+ MemberName 17(pcf_in_t) 0 "flTessFactor"
+ MemberName 17(pcf_in_t) 1 "flInsideTessFactor"
+ Name 19 "gs_in_t"
+ MemberName 19(gs_in_t) 0 "pos"
+ MemberName 19(gs_in_t) 1 "norm"
+ Name 24 "@main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11;"
+ Name 21 "i"
+ Name 22 "tesscoord"
+ Name 23 "pcf_data"
+ Name 27 "o"
+ Name 52 "i"
+ Name 54 "i"
+ Name 56 "tesscoord"
+ Name 58 "tesscoord"
+ Name 63 "pcf_data"
+ Name 67 "pcf_data.flTessFactor"
+ Name 81 "pcf_data.flInsideTessFactor"
+ Name 85 "flattenTemp"
+ Name 87 "param"
+ Name 89 "param"
+ Name 93 "@entryPointOutput.pos"
+ Name 97 "@entryPointOutput.norm"
+ Decorate 54(i) Location 0
+ Decorate 58(tesscoord) Patch
+ Decorate 58(tesscoord) BuiltIn TessCoord
+ Decorate 67(pcf_data.flTessFactor) Patch
+ Decorate 67(pcf_data.flTessFactor) BuiltIn TessLevelOuter
+ Decorate 81(pcf_data.flInsideTessFactor) Patch
+ Decorate 81(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner
+ Decorate 93(@entryPointOutput.pos) Location 0
+ Decorate 97(@entryPointOutput.norm) Location 1
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeVector 6(float) 3
+ 9(ds_in_t): TypeStruct 7(fvec4) 8(fvec3)
+ 10: TypeInt 32 0
+ 11: 10(int) Constant 2
+ 12: TypeArray 9(ds_in_t) 11
+ 13: TypeVector 6(float) 2
+ 14: TypePointer Function 13(fvec2)
+ 15: 10(int) Constant 3
+ 16: TypeArray 6(float) 15
+ 17(pcf_in_t): TypeStruct 16 6(float)
+ 18: TypePointer Function 17(pcf_in_t)
+ 19(gs_in_t): TypeStruct 7(fvec4) 8(fvec3)
+ 20: TypeFunction 19(gs_in_t) 12 14(ptr) 18(ptr)
+ 26: TypePointer Function 19(gs_in_t)
+ 28: TypeInt 32 1
+ 29: 28(int) Constant 0
+ 31: 10(int) Constant 0
+ 32: TypePointer Function 6(float)
+ 37: TypePointer Function 7(fvec4)
+ 39: 28(int) Constant 1
+ 41: 10(int) Constant 1
+ 46: TypePointer Function 8(fvec3)
+ 51: TypePointer Function 12
+ 53: TypePointer Input 12
+ 54(i): 53(ptr) Variable Input
+ 57: TypePointer Input 8(fvec3)
+ 58(tesscoord): 57(ptr) Variable Input
+ 64: 10(int) Constant 4
+ 65: TypeArray 6(float) 64
+ 66: TypePointer Input 65
+67(pcf_data.flTessFactor): 66(ptr) Variable Input
+ 68: TypePointer Input 6(float)
+ 75: 28(int) Constant 2
+ 79: TypeArray 6(float) 11
+ 80: TypePointer Input 79
+81(pcf_data.flInsideTessFactor): 80(ptr) Variable Input
+ 92: TypePointer Output 7(fvec4)
+93(@entryPointOutput.pos): 92(ptr) Variable Output
+ 96: TypePointer Output 8(fvec3)
+97(@entryPointOutput.norm): 96(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 52(i): 51(ptr) Variable Function
+ 56(tesscoord): 14(ptr) Variable Function
+ 63(pcf_data): 18(ptr) Variable Function
+ 85(flattenTemp): 26(ptr) Variable Function
+ 87(param): 14(ptr) Variable Function
+ 89(param): 18(ptr) Variable Function
+ 55: 12 Load 54(i)
+ Store 52(i) 55
+ 59: 8(fvec3) Load 58(tesscoord)
+ 60: 6(float) CompositeExtract 59 0
+ 61: 6(float) CompositeExtract 59 1
+ 62: 13(fvec2) CompositeConstruct 60 61
+ Store 56(tesscoord) 62
+ 69: 68(ptr) AccessChain 67(pcf_data.flTessFactor) 29
+ 70: 6(float) Load 69
+ 71: 32(ptr) AccessChain 63(pcf_data) 29 29
+ Store 71 70
+ 72: 68(ptr) AccessChain 67(pcf_data.flTessFactor) 39
+ 73: 6(float) Load 72
+ 74: 32(ptr) AccessChain 63(pcf_data) 29 39
+ Store 74 73
+ 76: 68(ptr) AccessChain 67(pcf_data.flTessFactor) 75
+ 77: 6(float) Load 76
+ 78: 32(ptr) AccessChain 63(pcf_data) 29 75
+ Store 78 77
+ 82: 68(ptr) AccessChain 81(pcf_data.flInsideTessFactor) 29
+ 83: 6(float) Load 82
+ 84: 32(ptr) AccessChain 63(pcf_data) 39
+ Store 84 83
+ 86: 12 Load 52(i)
+ 88: 13(fvec2) Load 56(tesscoord)
+ Store 87(param) 88
+ 90:17(pcf_in_t) Load 63(pcf_data)
+ Store 89(param) 90
+ 91: 19(gs_in_t) FunctionCall 24(@main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11;) 86 87(param) 89(param)
+ Store 85(flattenTemp) 91
+ 94: 37(ptr) AccessChain 85(flattenTemp) 29
+ 95: 7(fvec4) Load 94
+ Store 93(@entryPointOutput.pos) 95
+ 98: 46(ptr) AccessChain 85(flattenTemp) 39
+ 99: 8(fvec3) Load 98
+ Store 97(@entryPointOutput.norm) 99
+ Return
+ FunctionEnd
+24(@main(struct-ds_in_t-vf4-vf31[2];vf2;struct-pcf_in_t-f1[3]-f11;): 19(gs_in_t) Function None 20
+ 21(i): 12 FunctionParameter
+ 22(tesscoord): 14(ptr) FunctionParameter
+ 23(pcf_data): 18(ptr) FunctionParameter
+ 25: Label
+ 27(o): 26(ptr) Variable Function
+ 30: 7(fvec4) CompositeExtract 21(i) 0 0
+ 33: 32(ptr) AccessChain 22(tesscoord) 31
+ 34: 6(float) Load 33
+ 35: 7(fvec4) CompositeConstruct 34 34 34 34
+ 36: 7(fvec4) FAdd 30 35
+ 38: 37(ptr) AccessChain 27(o) 29
+ Store 38 36
+ 40: 8(fvec3) CompositeExtract 21(i) 0 1
+ 42: 32(ptr) AccessChain 22(tesscoord) 41
+ 43: 6(float) Load 42
+ 44: 8(fvec3) CompositeConstruct 43 43 43
+ 45: 8(fvec3) FAdd 40 44
+ 47: 46(ptr) AccessChain 27(o) 39
+ Store 47 45
+ 48: 19(gs_in_t) Load 27(o)
+ ReturnValue 48
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystruct.init.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystruct.init.vert.out
new file mode 100644
index 00000000000..295fb0400cc
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystruct.init.vert.out
@@ -0,0 +1,112 @@
+hlsl.emptystruct.init.vert
+WARNING: 0:3: 'Test_Empty' : variable with qualifier 'const' not initialized; zero initializing
+
+Shader version: 500
+0:? Sequence
+0:6 Function Definition: @main(u1; ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:6 'vertexIndex' ( in uint)
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 Constant:
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp uint)
+0:? 'vertexIndex' ( temp uint)
+0:? 'vertexIndex' (layout( location=0) in uint)
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main(u1; ( temp 4-component vector of float)
+0:? 'vertexIndex' ( temp uint)
+0:? Linker Objects
+0:? 'Test_Empty' ( const structure{})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'vertexIndex' (layout( location=0) in uint)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:6 Function Definition: @main(u1; ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:6 'vertexIndex' ( in uint)
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 Constant:
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp uint)
+0:? 'vertexIndex' ( temp uint)
+0:? 'vertexIndex' (layout( location=0) in uint)
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main(u1; ( temp 4-component vector of float)
+0:? 'vertexIndex' ( temp uint)
+0:? Linker Objects
+0:? 'Test_Empty' ( const structure{})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'vertexIndex' (layout( location=0) in uint)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 29
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 20 23
+ Source HLSL 500
+ Name 4 "main"
+ Name 12 "@main(u1;"
+ Name 11 "vertexIndex"
+ Name 18 "vertexIndex"
+ Name 20 "vertexIndex"
+ Name 23 "@entryPointOutput"
+ Name 24 "param"
+ Name 27 "Test"
+ Decorate 20(vertexIndex) Location 0
+ Decorate 23(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 8: TypeFloat 32
+ 9: TypeVector 8(float) 4
+ 10: TypeFunction 9(fvec4) 7(ptr)
+ 14: 8(float) Constant 0
+ 15: 9(fvec4) ConstantComposite 14 14 14 14
+ 19: TypePointer Input 6(int)
+ 20(vertexIndex): 19(ptr) Variable Input
+ 22: TypePointer Output 9(fvec4)
+23(@entryPointOutput): 22(ptr) Variable Output
+ 27(Test): TypeStruct
+ 28: 27(Test) ConstantComposite
+ 4(main): 2 Function None 3
+ 5: Label
+ 18(vertexIndex): 7(ptr) Variable Function
+ 24(param): 7(ptr) Variable Function
+ 21: 6(int) Load 20(vertexIndex)
+ Store 18(vertexIndex) 21
+ 25: 6(int) Load 18(vertexIndex)
+ Store 24(param) 25
+ 26: 9(fvec4) FunctionCall 12(@main(u1;) 24(param)
+ Store 23(@entryPointOutput) 26
+ Return
+ FunctionEnd
+ 12(@main(u1;): 9(fvec4) Function None 10
+ 11(vertexIndex): 7(ptr) FunctionParameter
+ 13: Label
+ ReturnValue 15
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out
index e0da9852112..ee20b7da84c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out
@@ -1,5 +1,5 @@
hlsl.emptystructreturn.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main(struct-ps_in1; ( temp structure{})
@@ -11,22 +11,22 @@ gl_FragCoord origin is upper left
0:10 Function Definition: main( ( temp void)
0:10 Function Parameters:
0:? Sequence
-0:10 move second child to first child ( temp structure{})
-0:? 'i' ( temp structure{})
-0:? 'i' (layout( location=0) in structure{})
+0:10 Sequence
+0:10 move second child to first child ( temp structure{})
+0:? 'i' ( temp structure{})
+0:? 'i' ( in structure{})
0:10 Sequence
0:10 move second child to first child ( temp structure{})
0:? '@entryPointOutput' ( out structure{})
0:10 Function Call: @main(struct-ps_in1; ( temp structure{})
0:? 'i' ( temp structure{})
0:? Linker Objects
-0:? 'i' (layout( location=0) in structure{})
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main(struct-ps_in1; ( temp structure{})
@@ -38,26 +38,27 @@ gl_FragCoord origin is upper left
0:10 Function Definition: main( ( temp void)
0:10 Function Parameters:
0:? Sequence
-0:10 move second child to first child ( temp structure{})
-0:? 'i' ( temp structure{})
-0:? 'i' (layout( location=0) in structure{})
+0:10 Sequence
+0:10 move second child to first child ( temp structure{})
+0:? 'i' ( temp structure{})
+0:? 'i' ( in structure{})
0:10 Sequence
0:10 move second child to first child ( temp structure{})
0:? '@entryPointOutput' ( out structure{})
0:10 Function Call: @main(struct-ps_in1; ( temp structure{})
0:? 'i' ( temp structure{})
0:? Linker Objects
-0:? 'i' (layout( location=0) in structure{})
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 27
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 20 23
+ EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 6 "ps_in"
Name 8 "ps_out"
@@ -68,7 +69,6 @@ gl_FragCoord origin is upper left
Name 20 "i"
Name 23 "@entryPointOutput"
Name 24 "param"
- Decorate 20(i) Location 0
2: TypeVoid
3: TypeFunction 2
6(ps_in): TypeStruct
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out
index ff8935246aa..7ff09dd99a4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out
@@ -1,5 +1,5 @@
hlsl.emptystructreturn.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:10 Function Definition: @main(struct-vs_in1; ( temp structure{})
0:10 Function Parameters:
@@ -14,18 +14,18 @@ Shader version: 450
0:10 move second child to first child ( temp structure{})
0:? 'i' ( temp structure{})
0:? 'i' ( in structure{})
-0:10 move second child to first child ( temp structure{})
-0:? '@entryPointOutput' (layout( location=0) out structure{})
-0:10 Function Call: @main(struct-vs_in1; ( temp structure{})
-0:? 'i' ( temp structure{})
+0:10 Sequence
+0:10 move second child to first child ( temp structure{})
+0:? '@entryPointOutput' ( out structure{})
+0:10 Function Call: @main(struct-vs_in1; ( temp structure{})
+0:? 'i' ( temp structure{})
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{})
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:10 Function Definition: @main(struct-vs_in1; ( temp structure{})
0:10 Function Parameters:
@@ -40,21 +40,22 @@ Shader version: 450
0:10 move second child to first child ( temp structure{})
0:? 'i' ( temp structure{})
0:? 'i' ( in structure{})
-0:10 move second child to first child ( temp structure{})
-0:? '@entryPointOutput' (layout( location=0) out structure{})
-0:10 Function Call: @main(struct-vs_in1; ( temp structure{})
-0:? 'i' ( temp structure{})
+0:10 Sequence
+0:10 move second child to first child ( temp structure{})
+0:? '@entryPointOutput' ( out structure{})
+0:10 Function Call: @main(struct-vs_in1; ( temp structure{})
+0:? 'i' ( temp structure{})
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{})
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 27
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 20 23
+ EntryPoint Vertex 4 "main"
+ Source HLSL 500
Name 4 "main"
Name 6 "vs_in"
Name 8 "vs_out"
@@ -65,7 +66,6 @@ Shader version: 450
Name 20 "i"
Name 23 "@entryPointOutput"
Name 24 "param"
- Decorate 23(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6(vs_in): TypeStruct
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out
index 7c1561605ba..10d8544140e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out
@@ -1,5 +1,5 @@
hlsl.entry-in.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; ( temp float)
@@ -57,39 +57,34 @@ gl_FragCoord origin is upper left
0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:13 Constant:
0:13 0 (const int)
-0:13 v: direct index for structure ( temp 2-component vector of float)
-0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2})
-0:13 Constant:
-0:13 0 (const int)
+0:? 'i.v' (layout( location=0) in 2-component vector of float)
0:13 move second child to first child ( temp 4-component vector of float)
0:13 fragCoord: direct index for structure ( temp 4-component vector of float)
0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:13 Constant:
0:13 1 (const int)
-0:? 'i_fragCoord' ( in 4-component vector of float FragCoord)
+0:? 'i.fragCoord' ( in 4-component vector of float FragCoord)
0:13 move second child to first child ( temp 2-component vector of int)
0:13 i2: direct index for structure ( temp 2-component vector of int)
0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:13 Constant:
0:13 2 (const int)
-0:13 i2: direct index for structure ( temp 2-component vector of int)
-0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2})
-0:13 Constant:
-0:13 1 (const int)
+0:? 'i.i2' (layout( location=1) flat in 2-component vector of int)
0:13 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:13 Function Call: @PixelShaderFunction(struct-InParam-vf2-vf4-vi21; ( temp 4-component vector of float)
0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2})
-0:? 'i_fragCoord' ( in 4-component vector of float FragCoord)
+0:? 'i.fragCoord' ( in 4-component vector of float FragCoord)
+0:? 'i.v' (layout( location=0) in 2-component vector of float)
+0:? 'i.i2' (layout( location=1) flat in 2-component vector of int)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:8 Function Definition: fun(struct-InParam-vf2-vf4-vi21; ( temp float)
@@ -147,43 +142,39 @@ gl_FragCoord origin is upper left
0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:13 Constant:
0:13 0 (const int)
-0:13 v: direct index for structure ( temp 2-component vector of float)
-0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2})
-0:13 Constant:
-0:13 0 (const int)
+0:? 'i.v' (layout( location=0) in 2-component vector of float)
0:13 move second child to first child ( temp 4-component vector of float)
0:13 fragCoord: direct index for structure ( temp 4-component vector of float)
0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:13 Constant:
0:13 1 (const int)
-0:? 'i_fragCoord' ( in 4-component vector of float FragCoord)
+0:? 'i.fragCoord' ( in 4-component vector of float FragCoord)
0:13 move second child to first child ( temp 2-component vector of int)
0:13 i2: direct index for structure ( temp 2-component vector of int)
0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:13 Constant:
0:13 2 (const int)
-0:13 i2: direct index for structure ( temp 2-component vector of int)
-0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2})
-0:13 Constant:
-0:13 1 (const int)
+0:? 'i.i2' (layout( location=1) flat in 2-component vector of int)
0:13 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:13 Function Call: @PixelShaderFunction(struct-InParam-vf2-vf4-vi21; ( temp 4-component vector of float)
0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2})
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2})
-0:? 'i_fragCoord' ( in 4-component vector of float FragCoord)
+0:? 'i.fragCoord' ( in 4-component vector of float FragCoord)
+0:? 'i.v' (layout( location=0) in 2-component vector of float)
+0:? 'i.i2' (layout( location=1) flat in 2-component vector of int)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 77
+// Generated by (magic number): 80002
+// Id's are bound by 74
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 56 63 73
+ EntryPoint Fragment 4 "PixelShaderFunction" 55 60 65 70
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "InParam"
MemberName 11(InParam) 0 "v"
@@ -199,16 +190,16 @@ gl_FragCoord origin is upper left
Name 40 "ret2"
Name 41 "param"
Name 53 "i"
- Name 54 "InParam"
- MemberName 54(InParam) 0 "v"
- MemberName 54(InParam) 1 "i2"
- Name 56 "i"
- Name 63 "i_fragCoord"
- Name 73 "@entryPointOutput"
- Name 74 "param"
- Decorate 56(i) Location 0
- Decorate 63(i_fragCoord) BuiltIn FragCoord
- Decorate 73(@entryPointOutput) Location 0
+ Name 55 "i.v"
+ Name 60 "i.fragCoord"
+ Name 65 "i.i2"
+ Name 70 "@entryPointOutput"
+ Name 71 "param"
+ Decorate 55(i.v) Location 0
+ Decorate 60(i.fragCoord) BuiltIn FragCoord
+ Decorate 65(i.i2) Flat
+ Decorate 65(i.i2) Location 1
+ Decorate 70(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -227,37 +218,34 @@ gl_FragCoord origin is upper left
27: 9(int) Constant 1
28: 22(int) Constant 0
44: TypePointer Function 8(fvec4)
- 54(InParam): TypeStruct 7(fvec2) 10(ivec2)
- 55: TypePointer Input 54(InParam)
- 56(i): 55(ptr) Variable Input
- 57: TypePointer Input 7(fvec2)
- 60: TypePointer Function 7(fvec2)
- 62: TypePointer Input 8(fvec4)
- 63(i_fragCoord): 62(ptr) Variable Input
- 66: 9(int) Constant 2
- 67: TypePointer Input 10(ivec2)
- 70: TypePointer Function 10(ivec2)
- 72: TypePointer Output 8(fvec4)
-73(@entryPointOutput): 72(ptr) Variable Output
+ 54: TypePointer Input 7(fvec2)
+ 55(i.v): 54(ptr) Variable Input
+ 57: TypePointer Function 7(fvec2)
+ 59: TypePointer Input 8(fvec4)
+ 60(i.fragCoord): 59(ptr) Variable Input
+ 63: 9(int) Constant 2
+ 64: TypePointer Input 10(ivec2)
+ 65(i.i2): 64(ptr) Variable Input
+ 67: TypePointer Function 10(ivec2)
+ 69: TypePointer Output 8(fvec4)
+70(@entryPointOutput): 69(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
53(i): 12(ptr) Variable Function
- 74(param): 12(ptr) Variable Function
- 58: 57(ptr) AccessChain 56(i) 21
- 59: 7(fvec2) Load 58
- 61: 60(ptr) AccessChain 53(i) 21
- Store 61 59
- 64: 8(fvec4) Load 63(i_fragCoord)
- 65: 44(ptr) AccessChain 53(i) 27
- Store 65 64
- 68: 67(ptr) AccessChain 56(i) 27
- 69: 10(ivec2) Load 68
- 71: 70(ptr) AccessChain 53(i) 66
- Store 71 69
- 75: 11(InParam) Load 53(i)
- Store 74(param) 75
- 76: 8(fvec4) FunctionCall 19(@PixelShaderFunction(struct-InParam-vf2-vf4-vi21;) 74(param)
- Store 73(@entryPointOutput) 76
+ 71(param): 12(ptr) Variable Function
+ 56: 7(fvec2) Load 55(i.v)
+ 58: 57(ptr) AccessChain 53(i) 21
+ Store 58 56
+ 61: 8(fvec4) Load 60(i.fragCoord)
+ 62: 44(ptr) AccessChain 53(i) 27
+ Store 62 61
+ 66: 10(ivec2) Load 65(i.i2)
+ 68: 67(ptr) AccessChain 53(i) 63
+ Store 68 66
+ 72: 11(InParam) Load 53(i)
+ Store 71(param) 72
+ 73: 8(fvec4) FunctionCall 19(@PixelShaderFunction(struct-InParam-vf2-vf4-vi21;) 71(param)
+ Store 70(@entryPointOutput) 73
Return
FunctionEnd
15(fun(struct-InParam-vf2-vf4-vi21;): 6(float) Function None 13
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out
index f92605f9e2d..40fc164045a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out
@@ -1,5 +1,5 @@
hlsl.entry-out.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: fun(struct-OutParam-vf2-vi21; ( temp void)
@@ -86,26 +86,26 @@ gl_FragCoord origin is upper left
0:? 'out1' ( temp 4-component vector of float)
0:13 Sequence
0:13 move second child to first child ( temp 2-component vector of float)
-0:? 'v' (layout( location=2) out 2-component vector of float)
+0:? 'out2.v' (layout( location=2) out 2-component vector of float)
0:13 v: direct index for structure ( temp 2-component vector of float)
0:? 'out2' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i})
0:13 Constant:
0:13 0 (const int)
0:13 move second child to first child ( temp 2-component vector of int)
-0:? 'i' (layout( location=3) out 2-component vector of int)
+0:? 'out2.i' (layout( location=3) out 2-component vector of int)
0:13 i: direct index for structure ( temp 2-component vector of int)
0:? 'out2' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i})
0:13 Constant:
0:13 1 (const int)
0:13 Sequence
0:13 move second child to first child ( temp 2-component vector of float)
-0:? 'v' (layout( location=4) out 2-component vector of float)
+0:? 'out3.v' (layout( location=4) out 2-component vector of float)
0:13 v: direct index for structure ( temp 2-component vector of float)
0:? 'out3' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i})
0:13 Constant:
0:13 0 (const int)
0:13 move second child to first child ( temp 2-component vector of int)
-0:? 'i' (layout( location=5) out 2-component vector of int)
+0:? 'out3.i' (layout( location=5) out 2-component vector of int)
0:13 i: direct index for structure ( temp 2-component vector of int)
0:? 'out3' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i})
0:13 Constant:
@@ -114,16 +114,16 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
0:? 'out1' (layout( location=1) out 4-component vector of float)
-0:? 'v' (layout( location=2) out 2-component vector of float)
-0:? 'i' (layout( location=3) out 2-component vector of int)
-0:? 'v' (layout( location=4) out 2-component vector of float)
-0:? 'i' (layout( location=5) out 2-component vector of int)
+0:? 'out2.v' (layout( location=2) out 2-component vector of float)
+0:? 'out2.i' (layout( location=3) out 2-component vector of int)
+0:? 'out3.v' (layout( location=4) out 2-component vector of float)
+0:? 'out3.i' (layout( location=5) out 2-component vector of int)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: fun(struct-OutParam-vf2-vi21; ( temp void)
@@ -210,26 +210,26 @@ gl_FragCoord origin is upper left
0:? 'out1' ( temp 4-component vector of float)
0:13 Sequence
0:13 move second child to first child ( temp 2-component vector of float)
-0:? 'v' (layout( location=2) out 2-component vector of float)
+0:? 'out2.v' (layout( location=2) out 2-component vector of float)
0:13 v: direct index for structure ( temp 2-component vector of float)
0:? 'out2' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i})
0:13 Constant:
0:13 0 (const int)
0:13 move second child to first child ( temp 2-component vector of int)
-0:? 'i' (layout( location=3) out 2-component vector of int)
+0:? 'out2.i' (layout( location=3) out 2-component vector of int)
0:13 i: direct index for structure ( temp 2-component vector of int)
0:? 'out2' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i})
0:13 Constant:
0:13 1 (const int)
0:13 Sequence
0:13 move second child to first child ( temp 2-component vector of float)
-0:? 'v' (layout( location=4) out 2-component vector of float)
+0:? 'out3.v' (layout( location=4) out 2-component vector of float)
0:13 v: direct index for structure ( temp 2-component vector of float)
0:? 'out3' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i})
0:13 Constant:
0:13 0 (const int)
0:13 move second child to first child ( temp 2-component vector of int)
-0:? 'i' (layout( location=5) out 2-component vector of int)
+0:? 'out3.i' (layout( location=5) out 2-component vector of int)
0:13 i: direct index for structure ( temp 2-component vector of int)
0:? 'out3' ( temp structure{ temp 2-component vector of float v, temp 2-component vector of int i})
0:13 Constant:
@@ -238,13 +238,13 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
0:? 'out1' (layout( location=1) out 4-component vector of float)
-0:? 'v' (layout( location=2) out 2-component vector of float)
-0:? 'i' (layout( location=3) out 2-component vector of int)
-0:? 'v' (layout( location=4) out 2-component vector of float)
-0:? 'i' (layout( location=5) out 2-component vector of int)
+0:? 'out2.v' (layout( location=2) out 2-component vector of float)
+0:? 'out2.i' (layout( location=3) out 2-component vector of int)
+0:? 'out3.v' (layout( location=4) out 2-component vector of float)
+0:? 'out3.i' (layout( location=5) out 2-component vector of int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 89
Capability Shader
@@ -252,6 +252,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 57 60 73 76 80 83 86
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 10 "OutParam"
MemberName 10(OutParam) 0 "v"
@@ -276,17 +277,17 @@ gl_FragCoord origin is upper left
Name 67 "param"
Name 68 "param"
Name 73 "out1"
- Name 76 "v"
- Name 80 "i"
- Name 83 "v"
- Name 86 "i"
+ Name 76 "out2.v"
+ Name 80 "out2.i"
+ Name 83 "out3.v"
+ Name 86 "out3.i"
Decorate 57(input) Location 0
Decorate 60(@entryPointOutput) Location 0
Decorate 73(out1) Location 1
- Decorate 76(v) Location 2
- Decorate 80(i) Location 3
- Decorate 83(v) Location 4
- Decorate 86(i) Location 5
+ Decorate 76(out2.v) Location 2
+ Decorate 80(out2.i) Location 3
+ Decorate 83(out3.v) Location 4
+ Decorate 86(out3.i) Location 5
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -321,11 +322,11 @@ gl_FragCoord origin is upper left
60(@entryPointOutput): 59(ptr) Variable Output
73(out1): 59(ptr) Variable Output
75: TypePointer Output 7(fvec2)
- 76(v): 75(ptr) Variable Output
+ 76(out2.v): 75(ptr) Variable Output
79: TypePointer Output 9(ivec2)
- 80(i): 79(ptr) Variable Output
- 83(v): 75(ptr) Variable Output
- 86(i): 79(ptr) Variable Output
+ 80(out2.i): 79(ptr) Variable Output
+ 83(out3.v): 75(ptr) Variable Output
+ 86(out3.i): 79(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
55(input): 17(ptr) Variable Function
@@ -352,16 +353,16 @@ gl_FragCoord origin is upper left
Store 73(out1) 74
77: 28(ptr) AccessChain 62(out2) 25
78: 7(fvec2) Load 77
- Store 76(v) 78
+ Store 76(out2.v) 78
81: 33(ptr) AccessChain 62(out2) 30
82: 9(ivec2) Load 81
- Store 80(i) 82
+ Store 80(out2.i) 82
84: 28(ptr) AccessChain 63(out3) 25
85: 7(fvec2) Load 84
- Store 83(v) 85
+ Store 83(out3.v) 85
87: 33(ptr) AccessChain 63(out3) 30
88: 9(ivec2) Load 87
- Store 86(i) 88
+ Store 86(out3.i) 88
Return
FunctionEnd
14(fun(struct-OutParam-vf2-vi21;): 2 Function None 12
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out
index 293592f85c3..9972ec09242 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out
@@ -1,5 +1,5 @@
hlsl.entry.rename.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: not_the_entry_point( ( temp void)
@@ -24,20 +24,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:11 Sequence
0:11 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:11 Color: direct index for structure ( temp 4-component vector of float)
0:11 Function Call: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11 Constant:
0:11 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int also_not_the_entry_point})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: not_the_entry_point( ( temp void)
@@ -62,17 +62,17 @@ gl_FragCoord origin is upper left
0:? Sequence
0:11 Sequence
0:11 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:11 Color: direct index for structure ( temp 4-component vector of float)
0:11 Function Call: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11 Constant:
0:11 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int also_not_the_entry_point})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 32
Capability Shader
@@ -80,17 +80,18 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main_in_spv" 26
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main_in_spv"
Name 6 "not_the_entry_point("
Name 10 "PS_OUTPUT"
MemberName 10(PS_OUTPUT) 0 "Color"
Name 12 "@main_in_spv("
Name 15 "psout"
- Name 26 "Color"
+ Name 26 "@entryPointOutput.Color"
Name 29 "$Global"
MemberName 29($Global) 0 "also_not_the_entry_point"
Name 31 ""
- Decorate 26(Color) Location 0
+ Decorate 26(@entryPointOutput.Color) Location 0
MemberDecorate 29($Global) 0 Offset 0
Decorate 29($Global) Block
Decorate 31 DescriptorSet 0
@@ -107,7 +108,7 @@ gl_FragCoord origin is upper left
19: 9(fvec4) ConstantComposite 18 18 18 18
20: TypePointer Function 9(fvec4)
25: TypePointer Output 9(fvec4)
- 26(Color): 25(ptr) Variable Output
+26(@entryPointOutput.Color): 25(ptr) Variable Output
29($Global): TypeStruct 16(int)
30: TypePointer Uniform 29($Global)
31: 30(ptr) Variable Uniform
@@ -115,7 +116,7 @@ gl_FragCoord origin is upper left
5: Label
27:10(PS_OUTPUT) FunctionCall 12(@main_in_spv()
28: 9(fvec4) CompositeExtract 27 0
- Store 26(Color) 28
+ Store 26(@entryPointOutput.Color) 28
Return
FunctionEnd
6(not_the_entry_point(): 2 Function None 3
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
new file mode 100644
index 00000000000..6b05ef21983
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
@@ -0,0 +1,66 @@
+hlsl.explicitDescriptorSet.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 31
+
+ Capability Shader
+ Capability Sampled1D
+ Capability SampledBuffer
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 19
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 13 "g_sSamp2_amb"
+ Name 19 "@entryPointOutput"
+ Name 21 "g_sSamp"
+ Name 24 "g_tTex1df4"
+ Name 25 "$Global"
+ MemberName 25($Global) 0 "floatval_amb"
+ Name 27 ""
+ Name 30 "floatbuff"
+ Decorate 13(g_sSamp2_amb) DescriptorSet 3
+ Decorate 13(g_sSamp2_amb) Binding 10
+ Decorate 19(@entryPointOutput) Location 0
+ Decorate 21(g_sSamp) DescriptorSet 3
+ Decorate 21(g_sSamp) Binding 11
+ Decorate 24(g_tTex1df4) DescriptorSet 3
+ Decorate 24(g_tTex1df4) Binding 20
+ MemberDecorate 25($Global) 0 Offset 0
+ Decorate 25($Global) Block
+ Decorate 27 DescriptorSet 3
+ Decorate 30(floatbuff) DescriptorSet 3
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeSampler
+ 12: TypePointer UniformConstant 11
+13(g_sSamp2_amb): 12(ptr) Variable UniformConstant
+ 14: 6(float) Constant 0
+ 15: 7(fvec4) ConstantComposite 14 14 14 14
+ 18: TypePointer Output 7(fvec4)
+19(@entryPointOutput): 18(ptr) Variable Output
+ 21(g_sSamp): 12(ptr) Variable UniformConstant
+ 22: TypeImage 6(float) 1D sampled format:Unknown
+ 23: TypePointer UniformConstant 22
+ 24(g_tTex1df4): 23(ptr) Variable UniformConstant
+ 25($Global): TypeStruct 6(float)
+ 26: TypePointer Uniform 25($Global)
+ 27: 26(ptr) Variable Uniform
+ 28: TypeImage 6(float) Buffer sampled format:R32f
+ 29: TypePointer UniformConstant 28
+ 30(floatbuff): 29(ptr) Variable UniformConstant
+ 4(main): 2 Function None 3
+ 5: Label
+ 20: 7(fvec4) FunctionCall 9(@main()
+ Store 19(@entryPointOutput) 20
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ ReturnValue 15
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
new file mode 100644
index 00000000000..2f092801d52
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
@@ -0,0 +1,66 @@
+hlsl.explicitDescriptorSet.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 31
+
+ Capability Shader
+ Capability Sampled1D
+ Capability SampledBuffer
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 19
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 13 "g_sSamp2_amb"
+ Name 19 "@entryPointOutput"
+ Name 21 "g_sSamp"
+ Name 24 "g_tTex1df4"
+ Name 25 "$Global"
+ MemberName 25($Global) 0 "floatval_amb"
+ Name 27 ""
+ Name 30 "floatbuff"
+ Decorate 13(g_sSamp2_amb) DescriptorSet 4
+ Decorate 13(g_sSamp2_amb) Binding 10
+ Decorate 19(@entryPointOutput) Location 0
+ Decorate 21(g_sSamp) DescriptorSet 4
+ Decorate 21(g_sSamp) Binding 11
+ Decorate 24(g_tTex1df4) DescriptorSet 4
+ Decorate 24(g_tTex1df4) Binding 20
+ MemberDecorate 25($Global) 0 Offset 0
+ Decorate 25($Global) Block
+ Decorate 27 DescriptorSet 4
+ Decorate 30(floatbuff) DescriptorSet 4
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeSampler
+ 12: TypePointer UniformConstant 11
+13(g_sSamp2_amb): 12(ptr) Variable UniformConstant
+ 14: 6(float) Constant 0
+ 15: 7(fvec4) ConstantComposite 14 14 14 14
+ 18: TypePointer Output 7(fvec4)
+19(@entryPointOutput): 18(ptr) Variable Output
+ 21(g_sSamp): 12(ptr) Variable UniformConstant
+ 22: TypeImage 6(float) 1D sampled format:Unknown
+ 23: TypePointer UniformConstant 22
+ 24(g_tTex1df4): 23(ptr) Variable UniformConstant
+ 25($Global): TypeStruct 6(float)
+ 26: TypePointer Uniform 25($Global)
+ 27: 26(ptr) Variable Uniform
+ 28: TypeImage 6(float) Buffer sampled format:R32f
+ 29: TypePointer UniformConstant 28
+ 30(floatbuff): 29(ptr) Variable UniformConstant
+ 4(main): 2 Function None 3
+ 5: Label
+ 20: 7(fvec4) FunctionCall 9(@main()
+ Store 19(@entryPointOutput) 20
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ ReturnValue 15
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out
index 9b28695f782..730a989a7b7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out
@@ -1,5 +1,5 @@
hlsl.flatten.return.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:11 Function Definition: Func1( ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
@@ -27,40 +27,40 @@ gl_FragCoord origin is upper left
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Function Call: @main( ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:16 color: direct index for structure ( temp 4-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Constant:
0:16 0 (const int)
0:16 move second child to first child ( temp float)
-0:? 'other_struct_member1' (layout( location=1) out float)
+0:? '@entryPointOutput.other_struct_member1' (layout( location=1) out float)
0:16 other_struct_member1: direct index for structure ( temp float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Constant:
0:16 1 (const int)
0:16 move second child to first child ( temp float)
-0:? 'other_struct_member2' (layout( location=2) out float)
+0:? '@entryPointOutput.other_struct_member2' (layout( location=2) out float)
0:16 other_struct_member2: direct index for structure ( temp float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Constant:
0:16 2 (const int)
0:16 move second child to first child ( temp float)
-0:? 'other_struct_member3' (layout( location=3) out float)
+0:? '@entryPointOutput.other_struct_member3' (layout( location=3) out float)
0:16 other_struct_member3: direct index for structure ( temp float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Constant:
0:16 3 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
-0:? 'other_struct_member1' (layout( location=1) out float)
-0:? 'other_struct_member2' (layout( location=2) out float)
-0:? 'other_struct_member3' (layout( location=3) out float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.other_struct_member1' (layout( location=1) out float)
+0:? '@entryPointOutput.other_struct_member2' (layout( location=2) out float)
+0:? '@entryPointOutput.other_struct_member3' (layout( location=3) out float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:11 Function Definition: Func1( ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
@@ -88,37 +88,37 @@ gl_FragCoord origin is upper left
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Function Call: @main( ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:16 color: direct index for structure ( temp 4-component vector of float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Constant:
0:16 0 (const int)
0:16 move second child to first child ( temp float)
-0:? 'other_struct_member1' (layout( location=1) out float)
+0:? '@entryPointOutput.other_struct_member1' (layout( location=1) out float)
0:16 other_struct_member1: direct index for structure ( temp float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Constant:
0:16 1 (const int)
0:16 move second child to first child ( temp float)
-0:? 'other_struct_member2' (layout( location=2) out float)
+0:? '@entryPointOutput.other_struct_member2' (layout( location=2) out float)
0:16 other_struct_member2: direct index for structure ( temp float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Constant:
0:16 2 (const int)
0:16 move second child to first child ( temp float)
-0:? 'other_struct_member3' (layout( location=3) out float)
+0:? '@entryPointOutput.other_struct_member3' (layout( location=3) out float)
0:16 other_struct_member3: direct index for structure ( temp float)
0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3})
0:16 Constant:
0:16 3 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
-0:? 'other_struct_member1' (layout( location=1) out float)
-0:? 'other_struct_member2' (layout( location=2) out float)
-0:? 'other_struct_member3' (layout( location=3) out float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.other_struct_member1' (layout( location=1) out float)
+0:? '@entryPointOutput.other_struct_member2' (layout( location=2) out float)
+0:? '@entryPointOutput.other_struct_member3' (layout( location=3) out float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 49
Capability Shader
@@ -126,6 +126,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 29 36 41 45
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "color"
@@ -135,14 +136,14 @@ gl_FragCoord origin is upper left
Name 10 "Func1("
Name 12 "@main("
Name 26 "flattenTemp"
- Name 29 "color"
- Name 36 "other_struct_member1"
- Name 41 "other_struct_member2"
- Name 45 "other_struct_member3"
- Decorate 29(color) Location 0
- Decorate 36(other_struct_member1) Location 1
- Decorate 41(other_struct_member2) Location 2
- Decorate 45(other_struct_member3) Location 3
+ Name 29 "@entryPointOutput.color"
+ Name 36 "@entryPointOutput.other_struct_member1"
+ Name 41 "@entryPointOutput.other_struct_member2"
+ Name 45 "@entryPointOutput.other_struct_member3"
+ Decorate 29(@entryPointOutput.color) Location 0
+ Decorate 36(@entryPointOutput.other_struct_member1) Location 1
+ Decorate 41(@entryPointOutput.other_struct_member2) Location 2
+ Decorate 45(@entryPointOutput.other_struct_member3) Location 3
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -157,17 +158,17 @@ gl_FragCoord origin is upper left
19:8(PS_OUTPUT) ConstantComposite 15 16 17 18
25: TypePointer Function 8(PS_OUTPUT)
28: TypePointer Output 7(fvec4)
- 29(color): 28(ptr) Variable Output
+29(@entryPointOutput.color): 28(ptr) Variable Output
30: TypeInt 32 1
31: 30(int) Constant 0
32: TypePointer Function 7(fvec4)
35: TypePointer Output 6(float)
-36(other_struct_member1): 35(ptr) Variable Output
+36(@entryPointOutput.other_struct_member1): 35(ptr) Variable Output
37: 30(int) Constant 1
38: TypePointer Function 6(float)
-41(other_struct_member2): 35(ptr) Variable Output
+41(@entryPointOutput.other_struct_member2): 35(ptr) Variable Output
42: 30(int) Constant 2
-45(other_struct_member3): 35(ptr) Variable Output
+45(@entryPointOutput.other_struct_member3): 35(ptr) Variable Output
46: 30(int) Constant 3
4(main): 2 Function None 3
5: Label
@@ -176,16 +177,16 @@ gl_FragCoord origin is upper left
Store 26(flattenTemp) 27
33: 32(ptr) AccessChain 26(flattenTemp) 31
34: 7(fvec4) Load 33
- Store 29(color) 34
+ Store 29(@entryPointOutput.color) 34
39: 38(ptr) AccessChain 26(flattenTemp) 37
40: 6(float) Load 39
- Store 36(other_struct_member1) 40
+ Store 36(@entryPointOutput.other_struct_member1) 40
43: 38(ptr) AccessChain 26(flattenTemp) 42
44: 6(float) Load 43
- Store 41(other_struct_member2) 44
+ Store 41(@entryPointOutput.other_struct_member2) 44
47: 38(ptr) AccessChain 26(flattenTemp) 46
48: 6(float) Load 47
- Store 45(other_struct_member3) 48
+ Store 45(@entryPointOutput.other_struct_member3) 48
Return
FunctionEnd
10(Func1():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out
new file mode 100644
index 00000000000..8eafba8e252
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out
@@ -0,0 +1,329 @@
+hlsl.flattenOpaque.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15 Function Definition: osCall1(struct-os-p11; ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:? 's.s2D' ( in sampler)
+0:? Sequence
+0:16 Branch: Return with expression
+0:16 texture ( temp 4-component vector of float)
+0:16 Construct combined texture-sampler ( temp sampler2D)
+0:16 'tex' ( uniform texture2D)
+0:? 's.s2D' ( in sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:20 Function Definition: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float)
+0:20 Function Parameters:
+0:? 's.s2D' ( in sampler)
+0:20 'f2' ( in 2-component vector of float)
+0:? Sequence
+0:21 Branch: Return with expression
+0:21 texture ( temp 4-component vector of float)
+0:21 Construct combined texture-sampler ( temp sampler2D)
+0:21 'tex' ( uniform texture2D)
+0:? 's.s2D' ( in sampler)
+0:21 'f2' ( in 2-component vector of float)
+0:25 Function Definition: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float)
+0:25 Function Parameters:
+0:? 's.s2D' ( in sampler)
+0:? 's.tex' ( in texture2D)
+0:? Sequence
+0:26 Branch: Return with expression
+0:26 texture ( temp 4-component vector of float)
+0:26 Construct combined texture-sampler ( temp sampler2D)
+0:? 's.tex' ( in texture2D)
+0:? 's.s2D' ( in sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:30 Function Definition: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float)
+0:30 Function Parameters:
+0:? 's.s2D' ( in sampler)
+0:? 's.tex' ( in texture2D)
+0:30 'f2' ( in 2-component vector of float)
+0:? Sequence
+0:31 Branch: Return with expression
+0:31 texture ( temp 4-component vector of float)
+0:31 Construct combined texture-sampler ( temp sampler2D)
+0:? 's.tex' ( in texture2D)
+0:? 's.s2D' ( in sampler)
+0:31 'f2' ( in 2-component vector of float)
+0:35 Function Definition: @main( ( temp 4-component vector of float)
+0:35 Function Parameters:
+0:? Sequence
+0:39 Branch: Return with expression
+0:38 add ( temp 4-component vector of float)
+0:37 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 Function Call: osCall1(struct-os-p11; ( temp 4-component vector of float)
+0:? 's.s2D' ( uniform sampler)
+0:37 Function Call: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float)
+0:? 's.s2D' ( uniform sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:38 Function Call: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float)
+0:? 's2.s2D' ( uniform sampler)
+0:? 's2.tex' ( uniform texture2D)
+0:39 Function Call: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float)
+0:? 's2.s2D' ( uniform sampler)
+0:? 's2.tex' ( uniform texture2D)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:35 Function Definition: main( ( temp void)
+0:35 Function Parameters:
+0:? Sequence
+0:35 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:35 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'tex' ( uniform texture2D)
+0:? 's.s2D' ( uniform sampler)
+0:? 's2.s2D' ( uniform sampler)
+0:? 's2.tex' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15 Function Definition: osCall1(struct-os-p11; ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:? 's.s2D' ( in sampler)
+0:? Sequence
+0:16 Branch: Return with expression
+0:16 texture ( temp 4-component vector of float)
+0:16 Construct combined texture-sampler ( temp sampler2D)
+0:16 'tex' ( uniform texture2D)
+0:? 's.s2D' ( in sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:20 Function Definition: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float)
+0:20 Function Parameters:
+0:? 's.s2D' ( in sampler)
+0:20 'f2' ( in 2-component vector of float)
+0:? Sequence
+0:21 Branch: Return with expression
+0:21 texture ( temp 4-component vector of float)
+0:21 Construct combined texture-sampler ( temp sampler2D)
+0:21 'tex' ( uniform texture2D)
+0:? 's.s2D' ( in sampler)
+0:21 'f2' ( in 2-component vector of float)
+0:25 Function Definition: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float)
+0:25 Function Parameters:
+0:? 's.s2D' ( in sampler)
+0:? 's.tex' ( in texture2D)
+0:? Sequence
+0:26 Branch: Return with expression
+0:26 texture ( temp 4-component vector of float)
+0:26 Construct combined texture-sampler ( temp sampler2D)
+0:? 's.tex' ( in texture2D)
+0:? 's.s2D' ( in sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:30 Function Definition: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float)
+0:30 Function Parameters:
+0:? 's.s2D' ( in sampler)
+0:? 's.tex' ( in texture2D)
+0:30 'f2' ( in 2-component vector of float)
+0:? Sequence
+0:31 Branch: Return with expression
+0:31 texture ( temp 4-component vector of float)
+0:31 Construct combined texture-sampler ( temp sampler2D)
+0:? 's.tex' ( in texture2D)
+0:? 's.s2D' ( in sampler)
+0:31 'f2' ( in 2-component vector of float)
+0:35 Function Definition: @main( ( temp 4-component vector of float)
+0:35 Function Parameters:
+0:? Sequence
+0:39 Branch: Return with expression
+0:38 add ( temp 4-component vector of float)
+0:37 add ( temp 4-component vector of float)
+0:36 add ( temp 4-component vector of float)
+0:36 Function Call: osCall1(struct-os-p11; ( temp 4-component vector of float)
+0:? 's.s2D' ( uniform sampler)
+0:37 Function Call: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float)
+0:? 's.s2D' ( uniform sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:38 Function Call: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float)
+0:? 's2.s2D' ( uniform sampler)
+0:? 's2.tex' ( uniform texture2D)
+0:39 Function Call: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float)
+0:? 's2.s2D' ( uniform sampler)
+0:? 's2.tex' ( uniform texture2D)
+0:? Constant:
+0:? 0.200000
+0:? 0.300000
+0:35 Function Definition: main( ( temp void)
+0:35 Function Parameters:
+0:? Sequence
+0:35 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:35 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'tex' ( uniform texture2D)
+0:? 's.s2D' ( uniform sampler)
+0:? 's2.s2D' ( uniform sampler)
+0:? 's2.tex' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 99
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 97
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 12 "osCall1(struct-os-p11;"
+ Name 11 "s.s2D"
+ Name 19 "osCall2(struct-os-p11;vf2;"
+ Name 17 "s.s2D"
+ Name 18 "f2"
+ Name 26 "os2Call1(struct-os2-p1-t211;"
+ Name 24 "s.s2D"
+ Name 25 "s.tex"
+ Name 32 "os2Call2(struct-os2-p1-t211;vf2;"
+ Name 29 "s.s2D"
+ Name 30 "s.tex"
+ Name 31 "f2"
+ Name 35 "@main("
+ Name 38 "tex"
+ Name 70 "s.s2D"
+ Name 71 "param"
+ Name 74 "param"
+ Name 76 "param"
+ Name 79 "s2.s2D"
+ Name 80 "s2.tex"
+ Name 81 "param"
+ Name 83 "param"
+ Name 87 "param"
+ Name 89 "param"
+ Name 91 "param"
+ Name 97 "@entryPointOutput"
+ Decorate 38(tex) DescriptorSet 0
+ Decorate 70(s.s2D) DescriptorSet 0
+ Decorate 79(s2.s2D) DescriptorSet 0
+ Decorate 80(s2.tex) DescriptorSet 0
+ Decorate 97(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeSampler
+ 7: TypePointer Function 6
+ 8: TypeFloat 32
+ 9: TypeVector 8(float) 4
+ 10: TypeFunction 9(fvec4) 7(ptr)
+ 14: TypeVector 8(float) 2
+ 15: TypePointer Function 14(fvec2)
+ 16: TypeFunction 9(fvec4) 7(ptr) 15(ptr)
+ 21: TypeImage 8(float) 2D sampled format:Unknown
+ 22: TypePointer Function 21
+ 23: TypeFunction 9(fvec4) 7(ptr) 22(ptr)
+ 28: TypeFunction 9(fvec4) 7(ptr) 22(ptr) 15(ptr)
+ 34: TypeFunction 9(fvec4)
+ 37: TypePointer UniformConstant 21
+ 38(tex): 37(ptr) Variable UniformConstant
+ 41: TypeSampledImage 21
+ 43: 8(float) Constant 1045220557
+ 44: 8(float) Constant 1050253722
+ 45: 14(fvec2) ConstantComposite 43 44
+ 69: TypePointer UniformConstant 6
+ 70(s.s2D): 69(ptr) Variable UniformConstant
+ 79(s2.s2D): 69(ptr) Variable UniformConstant
+ 80(s2.tex): 37(ptr) Variable UniformConstant
+ 96: TypePointer Output 9(fvec4)
+97(@entryPointOutput): 96(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 98: 9(fvec4) FunctionCall 35(@main()
+ Store 97(@entryPointOutput) 98
+ Return
+ FunctionEnd
+12(osCall1(struct-os-p11;): 9(fvec4) Function None 10
+ 11(s.s2D): 7(ptr) FunctionParameter
+ 13: Label
+ 39: 21 Load 38(tex)
+ 40: 6 Load 11(s.s2D)
+ 42: 41 SampledImage 39 40
+ 46: 9(fvec4) ImageSampleImplicitLod 42 45
+ ReturnValue 46
+ FunctionEnd
+19(osCall2(struct-os-p11;vf2;): 9(fvec4) Function None 16
+ 17(s.s2D): 7(ptr) FunctionParameter
+ 18(f2): 15(ptr) FunctionParameter
+ 20: Label
+ 49: 21 Load 38(tex)
+ 50: 6 Load 17(s.s2D)
+ 51: 41 SampledImage 49 50
+ 52: 14(fvec2) Load 18(f2)
+ 53: 9(fvec4) ImageSampleImplicitLod 51 52
+ ReturnValue 53
+ FunctionEnd
+26(os2Call1(struct-os2-p1-t211;): 9(fvec4) Function None 23
+ 24(s.s2D): 7(ptr) FunctionParameter
+ 25(s.tex): 22(ptr) FunctionParameter
+ 27: Label
+ 56: 21 Load 25(s.tex)
+ 57: 6 Load 24(s.s2D)
+ 58: 41 SampledImage 56 57
+ 59: 9(fvec4) ImageSampleImplicitLod 58 45
+ ReturnValue 59
+ FunctionEnd
+32(os2Call2(struct-os2-p1-t211;vf2;): 9(fvec4) Function None 28
+ 29(s.s2D): 7(ptr) FunctionParameter
+ 30(s.tex): 22(ptr) FunctionParameter
+ 31(f2): 15(ptr) FunctionParameter
+ 33: Label
+ 62: 21 Load 30(s.tex)
+ 63: 6 Load 29(s.s2D)
+ 64: 41 SampledImage 62 63
+ 65: 14(fvec2) Load 31(f2)
+ 66: 9(fvec4) ImageSampleImplicitLod 64 65
+ ReturnValue 66
+ FunctionEnd
+ 35(@main(): 9(fvec4) Function None 34
+ 36: Label
+ 71(param): 7(ptr) Variable Function
+ 74(param): 7(ptr) Variable Function
+ 76(param): 15(ptr) Variable Function
+ 81(param): 7(ptr) Variable Function
+ 83(param): 22(ptr) Variable Function
+ 87(param): 7(ptr) Variable Function
+ 89(param): 22(ptr) Variable Function
+ 91(param): 15(ptr) Variable Function
+ 72: 6 Load 70(s.s2D)
+ Store 71(param) 72
+ 73: 9(fvec4) FunctionCall 12(osCall1(struct-os-p11;) 71(param)
+ 75: 6 Load 70(s.s2D)
+ Store 74(param) 75
+ Store 76(param) 45
+ 77: 9(fvec4) FunctionCall 19(osCall2(struct-os-p11;vf2;) 74(param) 76(param)
+ 78: 9(fvec4) FAdd 73 77
+ 82: 6 Load 79(s2.s2D)
+ Store 81(param) 82
+ 84: 21 Load 80(s2.tex)
+ Store 83(param) 84
+ 85: 9(fvec4) FunctionCall 26(os2Call1(struct-os2-p1-t211;) 81(param) 83(param)
+ 86: 9(fvec4) FAdd 78 85
+ 88: 6 Load 79(s2.s2D)
+ Store 87(param) 88
+ 90: 21 Load 80(s2.tex)
+ Store 89(param) 90
+ Store 91(param) 45
+ 92: 9(fvec4) FunctionCall 32(os2Call2(struct-os2-p1-t211;vf2;) 87(param) 89(param) 91(param)
+ 93: 9(fvec4) FAdd 86 92
+ ReturnValue 93
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
new file mode 100644
index 00000000000..b82cfffee79
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
@@ -0,0 +1,316 @@
+hlsl.flattenOpaqueInit.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+0:? Sequence
+0:5 Function Definition: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? 'tex.smpl' ( in sampler)
+0:? 'tex.tex' ( in texture2D)
+0:? Sequence
+0:6 Branch: Return with expression
+0:6 texture ( temp 4-component vector of float)
+0:6 Construct combined texture-sampler ( temp sampler2D)
+0:? 'tex.tex' ( in texture2D)
+0:? 'tex.smpl' ( in sampler)
+0:? Constant:
+0:? 0.300000
+0:? 0.400000
+0:10 Function Definition: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:10 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp sampler)
+0:? 't.smpl' ( temp sampler)
+0:12 'g_tInputTexture_sampler' ( uniform sampler)
+0:13 move second child to first child ( temp texture2D)
+0:? 't.tex' ( temp texture2D)
+0:13 'g_tInputTexture' ( uniform texture2D)
+0:14 Branch: Return with expression
+0:14 't' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:18 Function Definition: @main( ( temp 4-component vector of float)
+0:18 Function Parameters:
+0:? Sequence
+0:19 Sequence
+0:19 Sequence
+0:19 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 Construct structure ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 'g_tInputTexture_sampler' ( uniform sampler)
+0:19 'g_tInputTexture' ( uniform texture2D)
+0:19 move second child to first child ( temp sampler)
+0:? 'tex1.smpl' ( temp sampler)
+0:19 smpl: direct index for structure ( temp sampler)
+0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 Constant:
+0:19 0 (const int)
+0:19 move second child to first child ( temp texture2D)
+0:? 'tex1.tex' ( temp texture2D)
+0:19 tex: direct index for structure ( temp texture2D)
+0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 Constant:
+0:19 1 (const int)
+0:20 Sequence
+0:20 Sequence
+0:20 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 Function Call: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 move second child to first child ( temp sampler)
+0:? 'tex2.smpl' ( temp sampler)
+0:20 smpl: direct index for structure ( temp sampler)
+0:20 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 Constant:
+0:20 0 (const int)
+0:20 move second child to first child ( temp texture2D)
+0:? 'tex2.tex' ( temp texture2D)
+0:20 tex: direct index for structure ( temp texture2D)
+0:20 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 Constant:
+0:20 1 (const int)
+0:21 Sequence
+0:21 Sequence
+0:21 move second child to first child ( temp sampler)
+0:? 'tex3.smpl' ( temp sampler)
+0:? 'tex1.smpl' ( temp sampler)
+0:21 move second child to first child ( temp texture2D)
+0:? 'tex3.tex' ( temp texture2D)
+0:? 'tex1.tex' ( temp texture2D)
+0:22 Branch: Return with expression
+0:22 Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:? 'tex3.smpl' ( temp sampler)
+0:? 'tex3.tex' ( temp texture2D)
+0:18 Function Definition: main( ( temp void)
+0:18 Function Parameters:
+0:? Sequence
+0:18 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:18 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tInputTexture_sampler' ( uniform sampler)
+0:? 'g_tInputTexture' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:5 Function Definition: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? 'tex.smpl' ( in sampler)
+0:? 'tex.tex' ( in texture2D)
+0:? Sequence
+0:6 Branch: Return with expression
+0:6 texture ( temp 4-component vector of float)
+0:6 Construct combined texture-sampler ( temp sampler2D)
+0:? 'tex.tex' ( in texture2D)
+0:? 'tex.smpl' ( in sampler)
+0:? Constant:
+0:? 0.300000
+0:? 0.400000
+0:10 Function Definition: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:10 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp sampler)
+0:? 't.smpl' ( temp sampler)
+0:12 'g_tInputTexture_sampler' ( uniform sampler)
+0:13 move second child to first child ( temp texture2D)
+0:? 't.tex' ( temp texture2D)
+0:13 'g_tInputTexture' ( uniform texture2D)
+0:14 Branch: Return with expression
+0:14 't' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:18 Function Definition: @main( ( temp 4-component vector of float)
+0:18 Function Parameters:
+0:? Sequence
+0:19 Sequence
+0:19 Sequence
+0:19 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 Construct structure ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 'g_tInputTexture_sampler' ( uniform sampler)
+0:19 'g_tInputTexture' ( uniform texture2D)
+0:19 move second child to first child ( temp sampler)
+0:? 'tex1.smpl' ( temp sampler)
+0:19 smpl: direct index for structure ( temp sampler)
+0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 Constant:
+0:19 0 (const int)
+0:19 move second child to first child ( temp texture2D)
+0:? 'tex1.tex' ( temp texture2D)
+0:19 tex: direct index for structure ( temp texture2D)
+0:19 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:19 Constant:
+0:19 1 (const int)
+0:20 Sequence
+0:20 Sequence
+0:20 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 Function Call: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 move second child to first child ( temp sampler)
+0:? 'tex2.smpl' ( temp sampler)
+0:20 smpl: direct index for structure ( temp sampler)
+0:20 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 Constant:
+0:20 0 (const int)
+0:20 move second child to first child ( temp texture2D)
+0:? 'tex2.tex' ( temp texture2D)
+0:20 tex: direct index for structure ( temp texture2D)
+0:20 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex})
+0:20 Constant:
+0:20 1 (const int)
+0:21 Sequence
+0:21 Sequence
+0:21 move second child to first child ( temp sampler)
+0:? 'tex3.smpl' ( temp sampler)
+0:? 'tex1.smpl' ( temp sampler)
+0:21 move second child to first child ( temp texture2D)
+0:? 'tex3.tex' ( temp texture2D)
+0:? 'tex1.tex' ( temp texture2D)
+0:22 Branch: Return with expression
+0:22 Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:? 'tex3.smpl' ( temp sampler)
+0:? 'tex3.tex' ( temp texture2D)
+0:18 Function Definition: main( ( temp void)
+0:18 Function Parameters:
+0:? Sequence
+0:18 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:18 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tInputTexture_sampler' ( uniform sampler)
+0:? 'g_tInputTexture' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 84
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 82
+ Source HLSL 500
+ Name 4 "main"
+ Name 15 "lookUp(struct-FxaaTex-p1-t211;"
+ Name 13 "tex.smpl"
+ Name 14 "tex.tex"
+ Name 17 "FxaaTex"
+ MemberName 17(FxaaTex) 0 "smpl"
+ MemberName 17(FxaaTex) 1 "tex"
+ Name 19 "fillOpaque("
+ Name 22 "@main("
+ Name 36 "t.smpl"
+ Name 38 "g_tInputTexture_sampler"
+ Name 40 "t.tex"
+ Name 42 "g_tInputTexture"
+ Name 45 "t"
+ Name 49 "flattenTemp"
+ Name 53 "tex1.smpl"
+ Name 58 "tex1.tex"
+ Name 62 "flattenTemp"
+ Name 64 "tex2.smpl"
+ Name 67 "tex2.tex"
+ Name 70 "tex3.smpl"
+ Name 72 "tex3.tex"
+ Name 74 "param"
+ Name 76 "param"
+ Name 82 "@entryPointOutput"
+ Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
+ Decorate 42(g_tInputTexture) DescriptorSet 0
+ Decorate 82(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeSampler
+ 7: TypePointer Function 6
+ 8: TypeFloat 32
+ 9: TypeImage 8(float) 2D sampled format:Unknown
+ 10: TypePointer Function 9
+ 11: TypeVector 8(float) 4
+ 12: TypeFunction 11(fvec4) 7(ptr) 10(ptr)
+ 17(FxaaTex): TypeStruct 6 9
+ 18: TypeFunction 17(FxaaTex)
+ 21: TypeFunction 11(fvec4)
+ 26: TypeSampledImage 9
+ 28: TypeVector 8(float) 2
+ 29: 8(float) Constant 1050253722
+ 30: 8(float) Constant 1053609165
+ 31: 28(fvec2) ConstantComposite 29 30
+ 32: 8(float) Constant 0
+ 37: TypePointer UniformConstant 6
+38(g_tInputTexture_sampler): 37(ptr) Variable UniformConstant
+ 41: TypePointer UniformConstant 9
+42(g_tInputTexture): 41(ptr) Variable UniformConstant
+ 44: TypePointer Function 17(FxaaTex)
+ 54: TypeInt 32 1
+ 55: 54(int) Constant 0
+ 59: 54(int) Constant 1
+ 81: TypePointer Output 11(fvec4)
+82(@entryPointOutput): 81(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 83: 11(fvec4) FunctionCall 22(@main()
+ Store 82(@entryPointOutput) 83
+ Return
+ FunctionEnd
+15(lookUp(struct-FxaaTex-p1-t211;): 11(fvec4) Function None 12
+ 13(tex.smpl): 7(ptr) FunctionParameter
+ 14(tex.tex): 10(ptr) FunctionParameter
+ 16: Label
+ 24: 9 Load 14(tex.tex)
+ 25: 6 Load 13(tex.smpl)
+ 27: 26 SampledImage 24 25
+ 33: 11(fvec4) ImageSampleExplicitLod 27 31 Lod 32
+ ReturnValue 33
+ FunctionEnd
+ 19(fillOpaque(): 17(FxaaTex) Function None 18
+ 20: Label
+ 36(t.smpl): 7(ptr) Variable Function
+ 40(t.tex): 10(ptr) Variable Function
+ 45(t): 44(ptr) Variable Function
+ 39: 6 Load 38(g_tInputTexture_sampler)
+ Store 36(t.smpl) 39
+ 43: 9 Load 42(g_tInputTexture)
+ Store 40(t.tex) 43
+ 46: 17(FxaaTex) Load 45(t)
+ ReturnValue 46
+ FunctionEnd
+ 22(@main(): 11(fvec4) Function None 21
+ 23: Label
+ 49(flattenTemp): 44(ptr) Variable Function
+ 53(tex1.smpl): 7(ptr) Variable Function
+ 58(tex1.tex): 10(ptr) Variable Function
+ 62(flattenTemp): 44(ptr) Variable Function
+ 64(tex2.smpl): 7(ptr) Variable Function
+ 67(tex2.tex): 10(ptr) Variable Function
+ 70(tex3.smpl): 7(ptr) Variable Function
+ 72(tex3.tex): 10(ptr) Variable Function
+ 74(param): 7(ptr) Variable Function
+ 76(param): 10(ptr) Variable Function
+ 50: 6 Load 38(g_tInputTexture_sampler)
+ 51: 9 Load 42(g_tInputTexture)
+ 52: 17(FxaaTex) CompositeConstruct 50 51
+ Store 49(flattenTemp) 52
+ 56: 7(ptr) AccessChain 49(flattenTemp) 55
+ 57: 6 Load 56
+ Store 53(tex1.smpl) 57
+ 60: 10(ptr) AccessChain 49(flattenTemp) 59
+ 61: 9 Load 60
+ Store 58(tex1.tex) 61
+ 63: 17(FxaaTex) FunctionCall 19(fillOpaque()
+ Store 62(flattenTemp) 63
+ 65: 7(ptr) AccessChain 62(flattenTemp) 55
+ 66: 6 Load 65
+ Store 64(tex2.smpl) 66
+ 68: 10(ptr) AccessChain 62(flattenTemp) 59
+ 69: 9 Load 68
+ Store 67(tex2.tex) 69
+ 71: 6 Load 53(tex1.smpl)
+ Store 70(tex3.smpl) 71
+ 73: 9 Load 58(tex1.tex)
+ Store 72(tex3.tex) 73
+ 75: 6 Load 70(tex3.smpl)
+ Store 74(param) 75
+ 77: 9 Load 72(tex3.tex)
+ Store 76(param) 77
+ 78: 11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 74(param) 76(param)
+ ReturnValue 78
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
new file mode 100644
index 00000000000..2de34838fd4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -0,0 +1,240 @@
+hlsl.flattenOpaqueInitMix.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+0:? Sequence
+0:5 Function Definition: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? 'tex.smpl' ( in sampler)
+0:? 'tex.tex' ( in texture2D)
+0:? 'tex.f' ( in float)
+0:? Sequence
+0:6 Branch: Return with expression
+0:6 texture ( temp 4-component vector of float)
+0:6 Construct combined texture-sampler ( temp sampler2D)
+0:? 'tex.tex' ( in texture2D)
+0:? 'tex.smpl' ( in sampler)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:? 'tex.f' ( in float)
+0:? 'tex.f' ( in float)
+0:10 Function Definition: @main( ( temp 4-component vector of float)
+0:10 Function Parameters:
+0:? Sequence
+0:11 Sequence
+0:11 Sequence
+0:11 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 Construct structure ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 'g_tInputTexture_sampler' ( uniform sampler)
+0:11 'g_tInputTexture' ( uniform texture2D)
+0:11 Constant:
+0:11 0.500000
+0:11 move second child to first child ( temp sampler)
+0:? 'tex.smpl' ( temp sampler)
+0:11 smpl: direct index for structure ( temp sampler)
+0:11 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp texture2D)
+0:? 'tex.tex' ( temp texture2D)
+0:11 tex: direct index for structure ( temp texture2D)
+0:11 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:? 'tex.f' ( temp float)
+0:11 f: direct index for structure ( temp float)
+0:11 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 Constant:
+0:11 2 (const int)
+0:12 Branch: Return with expression
+0:12 Function Call: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
+0:? 'tex.smpl' ( temp sampler)
+0:? 'tex.tex' ( temp texture2D)
+0:? 'tex.f' ( temp float)
+0:10 Function Definition: main( ( temp void)
+0:10 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:10 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tInputTexture_sampler' ( uniform sampler)
+0:? 'g_tInputTexture' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:5 Function Definition: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? 'tex.smpl' ( in sampler)
+0:? 'tex.tex' ( in texture2D)
+0:? 'tex.f' ( in float)
+0:? Sequence
+0:6 Branch: Return with expression
+0:6 texture ( temp 4-component vector of float)
+0:6 Construct combined texture-sampler ( temp sampler2D)
+0:? 'tex.tex' ( in texture2D)
+0:? 'tex.smpl' ( in sampler)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:? 'tex.f' ( in float)
+0:? 'tex.f' ( in float)
+0:10 Function Definition: @main( ( temp 4-component vector of float)
+0:10 Function Parameters:
+0:? Sequence
+0:11 Sequence
+0:11 Sequence
+0:11 move second child to first child ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 Construct structure ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 'g_tInputTexture_sampler' ( uniform sampler)
+0:11 'g_tInputTexture' ( uniform texture2D)
+0:11 Constant:
+0:11 0.500000
+0:11 move second child to first child ( temp sampler)
+0:? 'tex.smpl' ( temp sampler)
+0:11 smpl: direct index for structure ( temp sampler)
+0:11 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 Constant:
+0:11 0 (const int)
+0:11 move second child to first child ( temp texture2D)
+0:? 'tex.tex' ( temp texture2D)
+0:11 tex: direct index for structure ( temp texture2D)
+0:11 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 Constant:
+0:11 1 (const int)
+0:11 move second child to first child ( temp float)
+0:? 'tex.f' ( temp float)
+0:11 f: direct index for structure ( temp float)
+0:11 'flattenTemp' ( temp structure{ temp sampler smpl, temp texture2D tex, temp float f})
+0:11 Constant:
+0:11 2 (const int)
+0:12 Branch: Return with expression
+0:12 Function Call: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
+0:? 'tex.smpl' ( temp sampler)
+0:? 'tex.tex' ( temp texture2D)
+0:? 'tex.f' ( temp float)
+0:10 Function Definition: main( ( temp void)
+0:10 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:10 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tInputTexture_sampler' ( uniform sampler)
+0:? 'g_tInputTexture' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 70
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 68
+ Source HLSL 500
+ Name 4 "main"
+ Name 17 "lookUp(struct-FxaaTex-p1-t21-f11;"
+ Name 14 "tex.smpl"
+ Name 15 "tex.tex"
+ Name 16 "tex.f"
+ Name 20 "@main("
+ Name 34 "FxaaTex"
+ MemberName 34(FxaaTex) 0 "smpl"
+ MemberName 34(FxaaTex) 1 "tex"
+ MemberName 34(FxaaTex) 2 "f"
+ Name 36 "flattenTemp"
+ Name 38 "g_tInputTexture_sampler"
+ Name 41 "g_tInputTexture"
+ Name 45 "tex.smpl"
+ Name 50 "tex.tex"
+ Name 54 "tex.f"
+ Name 58 "param"
+ Name 60 "param"
+ Name 62 "param"
+ Name 68 "@entryPointOutput"
+ Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
+ Decorate 41(g_tInputTexture) DescriptorSet 0
+ Decorate 68(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeSampler
+ 7: TypePointer Function 6
+ 8: TypeFloat 32
+ 9: TypeImage 8(float) 2D sampled format:Unknown
+ 10: TypePointer Function 9
+ 11: TypePointer Function 8(float)
+ 12: TypeVector 8(float) 4
+ 13: TypeFunction 12(fvec4) 7(ptr) 10(ptr) 11(ptr)
+ 19: TypeFunction 12(fvec4)
+ 24: TypeSampledImage 9
+ 28: TypeVector 8(float) 2
+ 30: 8(float) Constant 0
+ 34(FxaaTex): TypeStruct 6 9 8(float)
+ 35: TypePointer Function 34(FxaaTex)
+ 37: TypePointer UniformConstant 6
+38(g_tInputTexture_sampler): 37(ptr) Variable UniformConstant
+ 40: TypePointer UniformConstant 9
+41(g_tInputTexture): 40(ptr) Variable UniformConstant
+ 43: 8(float) Constant 1056964608
+ 46: TypeInt 32 1
+ 47: 46(int) Constant 0
+ 51: 46(int) Constant 1
+ 55: 46(int) Constant 2
+ 67: TypePointer Output 12(fvec4)
+68(@entryPointOutput): 67(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 69: 12(fvec4) FunctionCall 20(@main()
+ Store 68(@entryPointOutput) 69
+ Return
+ FunctionEnd
+17(lookUp(struct-FxaaTex-p1-t21-f11;): 12(fvec4) Function None 13
+ 14(tex.smpl): 7(ptr) FunctionParameter
+ 15(tex.tex): 10(ptr) FunctionParameter
+ 16(tex.f): 11(ptr) FunctionParameter
+ 18: Label
+ 22: 9 Load 15(tex.tex)
+ 23: 6 Load 14(tex.smpl)
+ 25: 24 SampledImage 22 23
+ 26: 8(float) Load 16(tex.f)
+ 27: 8(float) Load 16(tex.f)
+ 29: 28(fvec2) CompositeConstruct 26 27
+ 31: 12(fvec4) ImageSampleExplicitLod 25 29 Lod 30
+ ReturnValue 31
+ FunctionEnd
+ 20(@main(): 12(fvec4) Function None 19
+ 21: Label
+ 36(flattenTemp): 35(ptr) Variable Function
+ 45(tex.smpl): 7(ptr) Variable Function
+ 50(tex.tex): 10(ptr) Variable Function
+ 54(tex.f): 11(ptr) Variable Function
+ 58(param): 7(ptr) Variable Function
+ 60(param): 10(ptr) Variable Function
+ 62(param): 11(ptr) Variable Function
+ 39: 6 Load 38(g_tInputTexture_sampler)
+ 42: 9 Load 41(g_tInputTexture)
+ 44: 34(FxaaTex) CompositeConstruct 39 42 43
+ Store 36(flattenTemp) 44
+ 48: 7(ptr) AccessChain 36(flattenTemp) 47
+ 49: 6 Load 48
+ Store 45(tex.smpl) 49
+ 52: 10(ptr) AccessChain 36(flattenTemp) 51
+ 53: 9 Load 52
+ Store 50(tex.tex) 53
+ 56: 11(ptr) AccessChain 36(flattenTemp) 55
+ 57: 8(float) Load 56
+ Store 54(tex.f) 57
+ 59: 6 Load 45(tex.smpl)
+ Store 58(param) 59
+ 61: 9 Load 50(tex.tex)
+ Store 60(param) 61
+ 63: 8(float) Load 54(tex.f)
+ Store 62(param) 63
+ 64: 12(fvec4) FunctionCall 17(lookUp(struct-FxaaTex-p1-t21-f11;) 58(param) 60(param) 62(param)
+ ReturnValue 64
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out
new file mode 100644
index 00000000000..f6d867fc34a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out
@@ -0,0 +1,218 @@
+hlsl.flattenSubset.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:30 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:30 Function Parameters:
+0:30 'vpos' ( in 4-component vector of float)
+0:? Sequence
+0:33 move second child to first child ( temp sampler)
+0:? 's1.s0.ss' ( temp sampler)
+0:33 'samp' ( uniform sampler)
+0:34 Sequence
+0:34 move second child to first child ( temp float)
+0:? 's2.resources.b' ( temp float)
+0:? 's1.b' ( temp float)
+0:34 move second child to first child ( temp sampler)
+0:? 's2.resources.samplerState' ( temp sampler)
+0:? 's1.samplerState' ( temp sampler)
+0:34 move second child to first child ( temp int)
+0:? 's2.resources.s0.x' ( temp int)
+0:? 's1.s0.x' ( temp int)
+0:34 move second child to first child ( temp int)
+0:? 's2.resources.s0.y' ( temp int)
+0:? 's1.s0.y' ( temp int)
+0:34 move second child to first child ( temp sampler)
+0:? 's2.resources.s0.ss' ( temp sampler)
+0:? 's1.s0.ss' ( temp sampler)
+0:34 move second child to first child ( temp int)
+0:? 's2.resources.a' ( temp int)
+0:? 's1.a' ( temp int)
+0:35 Branch: Return with expression
+0:35 texture ( temp 4-component vector of float)
+0:35 Construct combined texture-sampler ( temp sampler2D)
+0:35 'tex' ( uniform texture2D)
+0:? 's2.resources.s0.ss' ( temp sampler)
+0:35 Constant:
+0:35 0.500000
+0:35 0.500000
+0:30 Function Definition: main( ( temp void)
+0:30 Function Parameters:
+0:? Sequence
+0:30 move second child to first child ( temp 4-component vector of float)
+0:? 'vpos' ( temp 4-component vector of float)
+0:? 'vpos' (layout( location=0) in 4-component vector of float)
+0:30 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:30 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'vpos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'samp' ( uniform sampler)
+0:? 'tex' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'vpos' (layout( location=0) in 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:30 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:30 Function Parameters:
+0:30 'vpos' ( in 4-component vector of float)
+0:? Sequence
+0:33 move second child to first child ( temp sampler)
+0:? 's1.s0.ss' ( temp sampler)
+0:33 'samp' ( uniform sampler)
+0:34 Sequence
+0:34 move second child to first child ( temp float)
+0:? 's2.resources.b' ( temp float)
+0:? 's1.b' ( temp float)
+0:34 move second child to first child ( temp sampler)
+0:? 's2.resources.samplerState' ( temp sampler)
+0:? 's1.samplerState' ( temp sampler)
+0:34 move second child to first child ( temp int)
+0:? 's2.resources.s0.x' ( temp int)
+0:? 's1.s0.x' ( temp int)
+0:34 move second child to first child ( temp int)
+0:? 's2.resources.s0.y' ( temp int)
+0:? 's1.s0.y' ( temp int)
+0:34 move second child to first child ( temp sampler)
+0:? 's2.resources.s0.ss' ( temp sampler)
+0:? 's1.s0.ss' ( temp sampler)
+0:34 move second child to first child ( temp int)
+0:? 's2.resources.a' ( temp int)
+0:? 's1.a' ( temp int)
+0:35 Branch: Return with expression
+0:35 texture ( temp 4-component vector of float)
+0:35 Construct combined texture-sampler ( temp sampler2D)
+0:35 'tex' ( uniform texture2D)
+0:? 's2.resources.s0.ss' ( temp sampler)
+0:35 Constant:
+0:35 0.500000
+0:35 0.500000
+0:30 Function Definition: main( ( temp void)
+0:30 Function Parameters:
+0:? Sequence
+0:30 move second child to first child ( temp 4-component vector of float)
+0:? 'vpos' ( temp 4-component vector of float)
+0:? 'vpos' (layout( location=0) in 4-component vector of float)
+0:30 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:30 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'vpos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'samp' ( uniform sampler)
+0:? 'tex' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'vpos' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 61
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 54 57
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "@main(vf4;"
+ Name 10 "vpos"
+ Name 15 "s1.s0.ss"
+ Name 17 "samp"
+ Name 20 "s2.resources.b"
+ Name 21 "s1.b"
+ Name 23 "s2.resources.samplerState"
+ Name 24 "s1.samplerState"
+ Name 28 "s2.resources.s0.x"
+ Name 29 "s1.s0.x"
+ Name 31 "s2.resources.s0.y"
+ Name 32 "s1.s0.y"
+ Name 34 "s2.resources.s0.ss"
+ Name 36 "s2.resources.a"
+ Name 37 "s1.a"
+ Name 41 "tex"
+ Name 52 "vpos"
+ Name 54 "vpos"
+ Name 57 "@entryPointOutput"
+ Name 58 "param"
+ Decorate 17(samp) DescriptorSet 0
+ Decorate 41(tex) DescriptorSet 0
+ Decorate 54(vpos) Location 0
+ Decorate 57(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeFunction 7(fvec4) 8(ptr)
+ 13: TypeSampler
+ 14: TypePointer Function 13
+ 16: TypePointer UniformConstant 13
+ 17(samp): 16(ptr) Variable UniformConstant
+ 19: TypePointer Function 6(float)
+ 26: TypeInt 32 1
+ 27: TypePointer Function 26(int)
+ 39: TypeImage 6(float) 2D sampled format:Unknown
+ 40: TypePointer UniformConstant 39
+ 41(tex): 40(ptr) Variable UniformConstant
+ 44: TypeSampledImage 39
+ 46: TypeVector 6(float) 2
+ 47: 6(float) Constant 1056964608
+ 48: 46(fvec2) ConstantComposite 47 47
+ 53: TypePointer Input 7(fvec4)
+ 54(vpos): 53(ptr) Variable Input
+ 56: TypePointer Output 7(fvec4)
+57(@entryPointOutput): 56(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 52(vpos): 8(ptr) Variable Function
+ 58(param): 8(ptr) Variable Function
+ 55: 7(fvec4) Load 54(vpos)
+ Store 52(vpos) 55
+ 59: 7(fvec4) Load 52(vpos)
+ Store 58(param) 59
+ 60: 7(fvec4) FunctionCall 11(@main(vf4;) 58(param)
+ Store 57(@entryPointOutput) 60
+ Return
+ FunctionEnd
+ 11(@main(vf4;): 7(fvec4) Function None 9
+ 10(vpos): 8(ptr) FunctionParameter
+ 12: Label
+ 15(s1.s0.ss): 14(ptr) Variable Function
+20(s2.resources.b): 19(ptr) Variable Function
+ 21(s1.b): 19(ptr) Variable Function
+23(s2.resources.samplerState): 14(ptr) Variable Function
+24(s1.samplerState): 14(ptr) Variable Function
+28(s2.resources.s0.x): 27(ptr) Variable Function
+ 29(s1.s0.x): 27(ptr) Variable Function
+31(s2.resources.s0.y): 27(ptr) Variable Function
+ 32(s1.s0.y): 27(ptr) Variable Function
+34(s2.resources.s0.ss): 14(ptr) Variable Function
+36(s2.resources.a): 27(ptr) Variable Function
+ 37(s1.a): 27(ptr) Variable Function
+ 18: 13 Load 17(samp)
+ Store 15(s1.s0.ss) 18
+ 22: 6(float) Load 21(s1.b)
+ Store 20(s2.resources.b) 22
+ 25: 13 Load 24(s1.samplerState)
+ Store 23(s2.resources.samplerState) 25
+ 30: 26(int) Load 29(s1.s0.x)
+ Store 28(s2.resources.s0.x) 30
+ 33: 26(int) Load 32(s1.s0.y)
+ Store 31(s2.resources.s0.y) 33
+ 35: 13 Load 15(s1.s0.ss)
+ Store 34(s2.resources.s0.ss) 35
+ 38: 26(int) Load 37(s1.a)
+ Store 36(s2.resources.a) 38
+ 42: 39 Load 41(tex)
+ 43: 13 Load 34(s2.resources.s0.ss)
+ 45: 44 SampledImage 42 43
+ 49: 7(fvec4) ImageSampleImplicitLod 45 48
+ ReturnValue 49
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out
new file mode 100644
index 00000000000..4983834d6e4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out
@@ -0,0 +1,207 @@
+hlsl.flattenSubset2.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'vpos' ( in 4-component vector of float)
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp float)
+0:? 'a1.n.y' ( temp float)
+0:? 'a2.n.y' ( temp float)
+0:13 move second child to first child ( temp texture2D)
+0:? 'a1.n.texNested' ( temp texture2D)
+0:? 'a2.n.texNested' ( temp texture2D)
+0:14 Sequence
+0:14 move second child to first child ( temp float)
+0:? 'b.n.y' ( temp float)
+0:? 'a1.n.y' ( temp float)
+0:14 move second child to first child ( temp texture2D)
+0:? 'b.n.texNested' ( temp texture2D)
+0:? 'a1.n.texNested' ( temp texture2D)
+0:17 Sequence
+0:17 Sequence
+0:17 move second child to first child ( temp float)
+0:? 'n.y' ( temp float)
+0:? 'b.n.y' ( temp float)
+0:17 move second child to first child ( temp texture2D)
+0:? 'n.texNested' ( temp texture2D)
+0:? 'b.n.texNested' ( temp texture2D)
+0:20 move second child to first child ( temp texture2D)
+0:? 'a2.n.texNested' ( temp texture2D)
+0:20 'someTex' ( uniform texture2D)
+0:21 move second child to first child ( temp float)
+0:? 'a1.n.y' ( temp float)
+0:21 Constant:
+0:21 1.000000
+0:23 Branch: Return with expression
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? 'vpos' ( temp 4-component vector of float)
+0:? 'vpos' (layout( location=0) in 4-component vector of float)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'vpos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'someTex' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'vpos' (layout( location=0) in 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'vpos' ( in 4-component vector of float)
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp float)
+0:? 'a1.n.y' ( temp float)
+0:? 'a2.n.y' ( temp float)
+0:13 move second child to first child ( temp texture2D)
+0:? 'a1.n.texNested' ( temp texture2D)
+0:? 'a2.n.texNested' ( temp texture2D)
+0:14 Sequence
+0:14 move second child to first child ( temp float)
+0:? 'b.n.y' ( temp float)
+0:? 'a1.n.y' ( temp float)
+0:14 move second child to first child ( temp texture2D)
+0:? 'b.n.texNested' ( temp texture2D)
+0:? 'a1.n.texNested' ( temp texture2D)
+0:17 Sequence
+0:17 Sequence
+0:17 move second child to first child ( temp float)
+0:? 'n.y' ( temp float)
+0:? 'b.n.y' ( temp float)
+0:17 move second child to first child ( temp texture2D)
+0:? 'n.texNested' ( temp texture2D)
+0:? 'b.n.texNested' ( temp texture2D)
+0:20 move second child to first child ( temp texture2D)
+0:? 'a2.n.texNested' ( temp texture2D)
+0:20 'someTex' ( uniform texture2D)
+0:21 move second child to first child ( temp float)
+0:? 'a1.n.y' ( temp float)
+0:21 Constant:
+0:21 1.000000
+0:23 Branch: Return with expression
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? 'vpos' ( temp 4-component vector of float)
+0:? 'vpos' (layout( location=0) in 4-component vector of float)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'vpos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'someTex' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'vpos' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 47
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 40 43
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "@main(vf4;"
+ Name 10 "vpos"
+ Name 14 "a1.n.y"
+ Name 15 "a2.n.y"
+ Name 19 "a1.n.texNested"
+ Name 20 "a2.n.texNested"
+ Name 22 "b.n.y"
+ Name 24 "b.n.texNested"
+ Name 26 "n.y"
+ Name 28 "n.texNested"
+ Name 31 "someTex"
+ Name 38 "vpos"
+ Name 40 "vpos"
+ Name 43 "@entryPointOutput"
+ Name 44 "param"
+ Decorate 31(someTex) DescriptorSet 0
+ Decorate 40(vpos) Location 0
+ Decorate 43(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeFunction 7(fvec4) 8(ptr)
+ 13: TypePointer Function 6(float)
+ 17: TypeImage 6(float) 2D sampled format:Unknown
+ 18: TypePointer Function 17
+ 30: TypePointer UniformConstant 17
+ 31(someTex): 30(ptr) Variable UniformConstant
+ 33: 6(float) Constant 1065353216
+ 34: 6(float) Constant 0
+ 35: 7(fvec4) ConstantComposite 34 34 34 34
+ 39: TypePointer Input 7(fvec4)
+ 40(vpos): 39(ptr) Variable Input
+ 42: TypePointer Output 7(fvec4)
+43(@entryPointOutput): 42(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 38(vpos): 8(ptr) Variable Function
+ 44(param): 8(ptr) Variable Function
+ 41: 7(fvec4) Load 40(vpos)
+ Store 38(vpos) 41
+ 45: 7(fvec4) Load 38(vpos)
+ Store 44(param) 45
+ 46: 7(fvec4) FunctionCall 11(@main(vf4;) 44(param)
+ Store 43(@entryPointOutput) 46
+ Return
+ FunctionEnd
+ 11(@main(vf4;): 7(fvec4) Function None 9
+ 10(vpos): 8(ptr) FunctionParameter
+ 12: Label
+ 14(a1.n.y): 13(ptr) Variable Function
+ 15(a2.n.y): 13(ptr) Variable Function
+19(a1.n.texNested): 18(ptr) Variable Function
+20(a2.n.texNested): 18(ptr) Variable Function
+ 22(b.n.y): 13(ptr) Variable Function
+24(b.n.texNested): 18(ptr) Variable Function
+ 26(n.y): 13(ptr) Variable Function
+ 28(n.texNested): 18(ptr) Variable Function
+ 16: 6(float) Load 15(a2.n.y)
+ Store 14(a1.n.y) 16
+ 21: 17 Load 20(a2.n.texNested)
+ Store 19(a1.n.texNested) 21
+ 23: 6(float) Load 14(a1.n.y)
+ Store 22(b.n.y) 23
+ 25: 17 Load 19(a1.n.texNested)
+ Store 24(b.n.texNested) 25
+ 27: 6(float) Load 22(b.n.y)
+ Store 26(n.y) 27
+ 29: 17 Load 24(b.n.texNested)
+ Store 28(n.texNested) 29
+ 32: 17 Load 31(someTex)
+ Store 20(a2.n.texNested) 32
+ Store 14(a1.n.y) 33
+ ReturnValue 35
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float1.frag.out
index ad29daac4b0..ed2b6c99e9c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float1.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float1.frag.out
@@ -1,5 +1,5 @@
hlsl.float1.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -34,7 +34,7 @@ Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -65,7 +65,7 @@ gl_FragCoord origin is upper left
0:? 'scalar' ( global float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 27
Capability Shader
@@ -73,6 +73,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "ShaderFunction(vf1;f1;"
Name 9 "inFloat1"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out
index d14de7b2dab..84213ce2c7c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out
@@ -2,7 +2,7 @@ hlsl.float4.frag
WARNING: 0:5: 'register' : ignoring shader_profile
WARNING: 0:6: 'register' : ignoring shader_profile
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float)
@@ -24,7 +24,7 @@ Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float)
@@ -42,7 +42,7 @@ gl_FragCoord origin is upper left
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform bool ff1, layout( offset=20) uniform float ff2, layout( binding=0 offset=32) uniform 4-component vector of float ff3, layout( binding=1 offset=48) uniform 4-component vector of float ff4})
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 26
Capability Shader
@@ -50,6 +50,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "ShaderFunction(vf4;"
Name 10 "input"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out
index a14b9ac0b93..c9efc338466 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.forLoop.frag.out
@@ -1,5 +1,5 @@
hlsl.forLoop.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -110,6 +110,80 @@ gl_FragCoord origin is upper left
0:11 'ii' ( temp int)
0:12 Pre-Decrement ( temp float)
0:12 'ii' ( temp float)
+0:13 Sequence
+0:13 move second child to first child ( temp int)
+0:13 'first' ( temp int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 move second child to first child ( temp int)
+0:13 'second' ( temp int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Loop with condition tested first
+0:13 No loop condition
+0:13 Loop Body
+0:13 add ( temp int)
+0:13 'first' ( temp int)
+0:13 'second' ( temp int)
+0:14 Sequence
+0:14 move second child to first child ( temp int)
+0:14 'i' ( temp int)
+0:14 Constant:
+0:14 0 (const int)
+0:14 move second child to first child ( temp int)
+0:14 'count' ( temp int)
+0:14 Convert float to int ( temp int)
+0:14 'ii' ( temp float)
+0:14 Loop with condition tested first
+0:14 Loop Condition
+0:14 Compare Less Than ( temp bool)
+0:14 'i' ( temp int)
+0:14 'count' ( temp int)
+0:14 No loop body
+0:14 Loop Terminal Expression
+0:14 Post-Increment ( temp int)
+0:14 'i' ( temp int)
+0:15 Sequence
+0:15 move second child to first child ( temp float)
+0:15 'first' ( temp float)
+0:15 Constant:
+0:15 0.000000
+0:15 Loop with condition tested first
+0:15 Loop Condition
+0:15 Compare Less Than ( temp bool)
+0:15 'first' ( temp float)
+0:15 direct index ( temp float)
+0:15 'second' ( temp 2-element array of float)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Loop Body
+0:15 add ( temp float)
+0:15 add ( temp float)
+0:15 'first' ( temp float)
+0:15 direct index ( temp float)
+0:15 'second' ( temp 2-element array of float)
+0:15 Constant:
+0:15 1 (const int)
+0:15 'third' ( temp float)
+0:15 Loop Terminal Expression
+0:15 Pre-Increment ( temp float)
+0:15 direct index ( temp float)
+0:15 'second' ( temp 2-element array of float)
+0:15 Constant:
+0:15 1 (const int)
+0:? Sequence
+0:16 Comma ( temp float)
+0:16 Comma ( temp float)
+0:16 Pre-Decrement ( temp float)
+0:16 'ii' ( temp float)
+0:16 Pre-Decrement ( temp float)
+0:16 'ii' ( temp float)
+0:16 Pre-Decrement ( temp float)
+0:16 'ii' ( temp float)
+0:16 Loop with condition tested first
+0:16 No loop condition
+0:16 Loop Body
+0:16 'ii' ( temp float)
0:2 Function Definition: PixelShaderFunction( ( temp void)
0:2 Function Parameters:
0:? Sequence
@@ -128,7 +202,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -239,6 +313,80 @@ gl_FragCoord origin is upper left
0:11 'ii' ( temp int)
0:12 Pre-Decrement ( temp float)
0:12 'ii' ( temp float)
+0:13 Sequence
+0:13 move second child to first child ( temp int)
+0:13 'first' ( temp int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 move second child to first child ( temp int)
+0:13 'second' ( temp int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Loop with condition tested first
+0:13 No loop condition
+0:13 Loop Body
+0:13 add ( temp int)
+0:13 'first' ( temp int)
+0:13 'second' ( temp int)
+0:14 Sequence
+0:14 move second child to first child ( temp int)
+0:14 'i' ( temp int)
+0:14 Constant:
+0:14 0 (const int)
+0:14 move second child to first child ( temp int)
+0:14 'count' ( temp int)
+0:14 Convert float to int ( temp int)
+0:14 'ii' ( temp float)
+0:14 Loop with condition tested first
+0:14 Loop Condition
+0:14 Compare Less Than ( temp bool)
+0:14 'i' ( temp int)
+0:14 'count' ( temp int)
+0:14 No loop body
+0:14 Loop Terminal Expression
+0:14 Post-Increment ( temp int)
+0:14 'i' ( temp int)
+0:15 Sequence
+0:15 move second child to first child ( temp float)
+0:15 'first' ( temp float)
+0:15 Constant:
+0:15 0.000000
+0:15 Loop with condition tested first
+0:15 Loop Condition
+0:15 Compare Less Than ( temp bool)
+0:15 'first' ( temp float)
+0:15 direct index ( temp float)
+0:15 'second' ( temp 2-element array of float)
+0:15 Constant:
+0:15 0 (const int)
+0:15 Loop Body
+0:15 add ( temp float)
+0:15 add ( temp float)
+0:15 'first' ( temp float)
+0:15 direct index ( temp float)
+0:15 'second' ( temp 2-element array of float)
+0:15 Constant:
+0:15 1 (const int)
+0:15 'third' ( temp float)
+0:15 Loop Terminal Expression
+0:15 Pre-Increment ( temp float)
+0:15 direct index ( temp float)
+0:15 'second' ( temp 2-element array of float)
+0:15 Constant:
+0:15 1 (const int)
+0:? Sequence
+0:16 Comma ( temp float)
+0:16 Comma ( temp float)
+0:16 Pre-Decrement ( temp float)
+0:16 'ii' ( temp float)
+0:16 Pre-Decrement ( temp float)
+0:16 'ii' ( temp float)
+0:16 Pre-Decrement ( temp float)
+0:16 'ii' ( temp float)
+0:16 Loop with condition tested first
+0:16 No loop condition
+0:16 Loop Body
+0:16 'ii' ( temp float)
0:2 Function Definition: PixelShaderFunction( ( temp void)
0:2 Function Parameters:
0:? Sequence
@@ -254,25 +402,33 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 124
+// Generated by (magic number): 80002
+// Id's are bound by 183
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 117 120
+ EntryPoint Fragment 4 "PixelShaderFunction" 176 179
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "@PixelShaderFunction(vf4;"
Name 10 "input"
Name 92 "ii"
Name 111 "ii"
- Name 115 "input"
- Name 117 "input"
- Name 120 "@entryPointOutput"
- Name 121 "param"
- Decorate 117(input) Location 0
- Decorate 120(@entryPointOutput) Location 0
+ Name 114 "first"
+ Name 116 "second"
+ Name 124 "i"
+ Name 125 "count"
+ Name 138 "first"
+ Name 149 "second"
+ Name 157 "third"
+ Name 174 "input"
+ Name 176 "input"
+ Name 179 "@entryPointOutput"
+ Name 180 "param"
+ Decorate 176(input) Location 0
+ Decorate 179(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -292,20 +448,25 @@ gl_FragCoord origin is upper left
100: 90(int) Constant 3
103: 90(int) Constant 2
109: 90(int) Constant 1
- 116: TypePointer Input 7(fvec4)
- 117(input): 116(ptr) Variable Input
- 119: TypePointer Output 7(fvec4)
-120(@entryPointOutput): 119(ptr) Variable Output
+ 115: 90(int) Constant 0
+ 139: 6(float) Constant 0
+ 146: 71(int) Constant 2
+ 147: TypeArray 6(float) 146
+ 148: TypePointer Function 147
+ 175: TypePointer Input 7(fvec4)
+ 176(input): 175(ptr) Variable Input
+ 178: TypePointer Output 7(fvec4)
+179(@entryPointOutput): 178(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
- 115(input): 8(ptr) Variable Function
- 121(param): 8(ptr) Variable Function
- 118: 7(fvec4) Load 117(input)
- Store 115(input) 118
- 122: 7(fvec4) Load 115(input)
- Store 121(param) 122
- 123: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 121(param)
- Store 120(@entryPointOutput) 123
+ 174(input): 8(ptr) Variable Function
+ 180(param): 8(ptr) Variable Function
+ 177: 7(fvec4) Load 176(input)
+ Store 174(input) 177
+ 181: 7(fvec4) Load 174(input)
+ Store 180(param) 181
+ 182: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 180(param)
+ Store 179(@entryPointOutput) 182
Return
FunctionEnd
11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9
@@ -313,6 +474,13 @@ gl_FragCoord origin is upper left
12: Label
92(ii): 91(ptr) Variable Function
111(ii): 73(ptr) Variable Function
+ 114(first): 91(ptr) Variable Function
+ 116(second): 91(ptr) Variable Function
+ 124(i): 91(ptr) Variable Function
+ 125(count): 91(ptr) Variable Function
+ 138(first): 73(ptr) Variable Function
+ 149(second): 148(ptr) Variable Function
+ 157(third): 73(ptr) Variable Function
Branch 13
13: Label
LoopMerge 15 16 None
@@ -337,7 +505,7 @@ gl_FragCoord origin is upper left
23: Label
Branch 25
25: Label
- LoopMerge 27 28 None
+ LoopMerge 27 28 Unroll
Branch 29
29: Label
30: 7(fvec4) Load 10(input)
@@ -453,6 +621,85 @@ gl_FragCoord origin is upper left
112: 6(float) Load 111(ii)
113: 6(float) FSub 112 18
Store 111(ii) 113
- 114: 7(fvec4) Undef
- ReturnValue 114
+ Store 114(first) 115
+ Store 116(second) 109
+ Branch 117
+ 117: Label
+ LoopMerge 119 120 None
+ Branch 118
+ 118: Label
+ 121: 90(int) Load 114(first)
+ 122: 90(int) Load 116(second)
+ 123: 90(int) IAdd 121 122
+ Branch 120
+ 120: Label
+ Branch 117
+ 119: Label
+ Store 124(i) 115
+ 126: 6(float) Load 111(ii)
+ 127: 90(int) ConvertFToS 126
+ Store 125(count) 127
+ Branch 128
+ 128: Label
+ LoopMerge 130 131 None
+ Branch 132
+ 132: Label
+ 133: 90(int) Load 124(i)
+ 134: 90(int) Load 125(count)
+ 135: 32(bool) SLessThan 133 134
+ BranchConditional 135 129 130
+ 129: Label
+ Branch 131
+ 131: Label
+ 136: 90(int) Load 124(i)
+ 137: 90(int) IAdd 136 109
+ Store 124(i) 137
+ Branch 128
+ 130: Label
+ Store 138(first) 139
+ Branch 140
+ 140: Label
+ LoopMerge 142 143 None
+ Branch 144
+ 144: Label
+ 145: 6(float) Load 138(first)
+ 150: 73(ptr) AccessChain 149(second) 115
+ 151: 6(float) Load 150
+ 152: 32(bool) FOrdLessThan 145 151
+ BranchConditional 152 141 142
+ 141: Label
+ 153: 6(float) Load 138(first)
+ 154: 73(ptr) AccessChain 149(second) 109
+ 155: 6(float) Load 154
+ 156: 6(float) FAdd 153 155
+ 158: 6(float) Load 157(third)
+ 159: 6(float) FAdd 156 158
+ Branch 143
+ 143: Label
+ 160: 73(ptr) AccessChain 149(second) 109
+ 161: 6(float) Load 160
+ 162: 6(float) FAdd 161 18
+ Store 160 162
+ Branch 140
+ 142: Label
+ 163: 6(float) Load 111(ii)
+ 164: 6(float) FSub 163 18
+ Store 111(ii) 164
+ 165: 6(float) Load 111(ii)
+ 166: 6(float) FSub 165 18
+ Store 111(ii) 166
+ 167: 6(float) Load 111(ii)
+ 168: 6(float) FSub 167 18
+ Store 111(ii) 168
+ Branch 169
+ 169: Label
+ LoopMerge 171 172 None
+ Branch 170
+ 170: Label
+ Branch 172
+ 172: Label
+ Branch 169
+ 171: Label
+ 173: 7(fvec4) Undef
+ ReturnValue 173
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.fraggeom.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.fraggeom.frag.out
new file mode 100644
index 00000000000..a010b6eb036
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.fraggeom.frag.out
@@ -0,0 +1,112 @@
+hlsl.fraggeom.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9 Function Definition: GS_Draw(struct-myVertex-vf41;struct-myVertex-vf41; ( temp void)
+0:9 Function Parameters:
+0:9 'IN' ( in structure{ temp 4-component vector of float pos})
+0:9 'OutputStream' ( out structure{ temp 4-component vector of float pos})
+0:? Sequence
+0:10 Constant:
+0:10 0.000000
+0:11 Constant:
+0:11 0.000000
+0:15 Function Definition: @main( ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:? Sequence
+0:16 Branch: Return with expression
+0:16 Constant:
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9 Function Definition: GS_Draw(struct-myVertex-vf41;struct-myVertex-vf41; ( temp void)
+0:9 Function Parameters:
+0:9 'IN' ( in structure{ temp 4-component vector of float pos})
+0:9 'OutputStream' ( out structure{ temp 4-component vector of float pos})
+0:? Sequence
+0:10 Constant:
+0:10 0.000000
+0:11 Constant:
+0:11 0.000000
+0:15 Function Definition: @main( ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:? Sequence
+0:16 Branch: Return with expression
+0:16 Constant:
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 25
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 23
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "myVertex"
+ MemberName 8(myVertex) 0 "pos"
+ Name 13 "GS_Draw(struct-myVertex-vf41;struct-myVertex-vf41;"
+ Name 11 "IN"
+ Name 12 "OutputStream"
+ Name 16 "@main("
+ Name 23 "@entryPointOutput"
+ Decorate 23(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8(myVertex): TypeStruct 7(fvec4)
+ 9: TypePointer Function 8(myVertex)
+ 10: TypeFunction 2 9(ptr) 9(ptr)
+ 15: TypeFunction 7(fvec4)
+ 18: 6(float) Constant 0
+ 19: 7(fvec4) ConstantComposite 18 18 18 18
+ 22: TypePointer Output 7(fvec4)
+23(@entryPointOutput): 22(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 24: 7(fvec4) FunctionCall 16(@main()
+ Store 23(@entryPointOutput) 24
+ Return
+ FunctionEnd
+13(GS_Draw(struct-myVertex-vf41;struct-myVertex-vf41;): 2 Function None 10
+ 11(IN): 9(ptr) FunctionParameter
+12(OutputStream): 9(ptr) FunctionParameter
+ 14: Label
+ Return
+ FunctionEnd
+ 16(@main(): 7(fvec4) Function None 15
+ 17: Label
+ ReturnValue 19
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.function.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.function.frag.out
new file mode 100644
index 00000000000..00b882d829c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.function.frag.out
@@ -0,0 +1,119 @@
+hlsl.function.frag
+ERROR: 0:24: 'fun1' : unknown variable
+ERROR: 0:24: 'return' : type does not match, or is not convertible to, the function's return type
+ERROR: 2 compilation errors. No code generated.
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:2 Function Definition: fun0( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Branch: Return with expression
+0:3 Constant:
+0:3 1.000000
+0:3 1.000000
+0:3 1.000000
+0:3 1.000000
+0:7 Function Definition: fun2(vf4; ( temp uint)
+0:7 Function Parameters:
+0:7 'col' ( in 4-component vector of float)
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 Constant:
+0:8 7 (const uint)
+0:12 Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:12 'id1' ( in uint)
+0:12 'id2' ( in uint)
+0:? Sequence
+0:13 Branch: Return with expression
+0:13 Construct vec4 ( temp 4-component vector of float)
+0:13 Convert uint to float ( temp float)
+0:13 component-wise multiply ( temp uint)
+0:13 'id1' ( in uint)
+0:13 'id2' ( in uint)
+0:17 Function Definition: fun1(i1; ( temp 4-component vector of float)
+0:17 Function Parameters:
+0:17 'index' ( in int)
+0:? Sequence
+0:18 Sequence
+0:18 move second child to first child ( temp uint)
+0:18 'entityId' ( temp uint)
+0:18 Function Call: fun2(vf4; ( temp uint)
+0:18 Function Call: fun0( ( temp 4-component vector of float)
+0:19 Branch: Return with expression
+0:19 Function Call: fun4(u1;u1; ( temp 4-component vector of float)
+0:19 'entityId' ( temp uint)
+0:19 'entityId' ( temp uint)
+0:23 Function Definition: @main( ( temp int)
+0:23 Function Parameters:
+0:23 Function Definition: main( ( temp void)
+0:23 Function Parameters:
+0:? Sequence
+0:23 move second child to first child ( temp int)
+0:? '@entryPointOutput' (layout( location=0) out int)
+0:23 Function Call: @main( ( temp int)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out int)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:2 Function Definition: fun0( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Branch: Return with expression
+0:3 Constant:
+0:3 1.000000
+0:3 1.000000
+0:3 1.000000
+0:3 1.000000
+0:7 Function Definition: fun2(vf4; ( temp uint)
+0:7 Function Parameters:
+0:7 'col' ( in 4-component vector of float)
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 Constant:
+0:8 7 (const uint)
+0:12 Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:12 'id1' ( in uint)
+0:12 'id2' ( in uint)
+0:? Sequence
+0:13 Branch: Return with expression
+0:13 Construct vec4 ( temp 4-component vector of float)
+0:13 Convert uint to float ( temp float)
+0:13 component-wise multiply ( temp uint)
+0:13 'id1' ( in uint)
+0:13 'id2' ( in uint)
+0:17 Function Definition: fun1(i1; ( temp 4-component vector of float)
+0:17 Function Parameters:
+0:17 'index' ( in int)
+0:? Sequence
+0:18 Sequence
+0:18 move second child to first child ( temp uint)
+0:18 'entityId' ( temp uint)
+0:18 Function Call: fun2(vf4; ( temp uint)
+0:18 Function Call: fun0( ( temp 4-component vector of float)
+0:19 Branch: Return with expression
+0:19 Function Call: fun4(u1;u1; ( temp 4-component vector of float)
+0:19 'entityId' ( temp uint)
+0:19 'entityId' ( temp uint)
+0:23 Function Definition: @main( ( temp int)
+0:23 Function Parameters:
+0:23 Function Definition: main( ( temp void)
+0:23 Function Parameters:
+0:? Sequence
+0:23 move second child to first child ( temp int)
+0:? '@entryPointOutput' (layout( location=0) out int)
+0:23 Function Call: @main( ( temp int)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out int)
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out
index 69f8e3d7d39..c2e25ceab0f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.gather.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -101,13 +101,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -124,14 +124,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -233,13 +233,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -256,11 +256,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 124
Capability Shader
@@ -270,6 +270,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 107 111
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -290,8 +291,8 @@ gl_FragCoord origin is upper left
Name 84 "g_tTexcdu4a"
Name 95 "psout"
Name 104 "flattenTemp"
- Name 107 "Color"
- Name 111 "Depth"
+ Name 107 "@entryPointOutput.Color"
+ Name 111 "@entryPointOutput.Depth"
Name 116 "g_tTex1df4a"
Name 117 "g_tTex1df4"
Name 120 "g_tTex1di4a"
@@ -304,8 +305,8 @@ gl_FragCoord origin is upper left
Decorate 64(g_tTexcdf4a) DescriptorSet 0
Decorate 74(g_tTexcdi4a) DescriptorSet 0
Decorate 84(g_tTexcdu4a) DescriptorSet 0
- Decorate 107(Color) Location 0
- Decorate 111(Depth) BuiltIn FragDepth
+ Decorate 107(@entryPointOutput.Color) Location 0
+ Decorate 111(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 116(g_tTex1df4a) DescriptorSet 0
Decorate 116(g_tTex1df4a) Binding 1
Decorate 117(g_tTex1df4) DescriptorSet 0
@@ -375,9 +376,9 @@ gl_FragCoord origin is upper left
98: 29(int) Constant 1
99: TypePointer Function 6(float)
106: TypePointer Output 7(fvec4)
- 107(Color): 106(ptr) Variable Output
+107(@entryPointOutput.Color): 106(ptr) Variable Output
110: TypePointer Output 6(float)
- 111(Depth): 110(ptr) Variable Output
+111(@entryPointOutput.Depth): 110(ptr) Variable Output
114: TypeImage 6(float) 1D array sampled format:Unknown
115: TypePointer UniformConstant 114
116(g_tTex1df4a): 115(ptr) Variable UniformConstant
@@ -395,10 +396,10 @@ gl_FragCoord origin is upper left
Store 104(flattenTemp) 105
108: 12(ptr) AccessChain 104(flattenTemp) 30
109: 7(fvec4) Load 108
- Store 107(Color) 109
+ Store 107(@entryPointOutput.Color) 109
112: 99(ptr) AccessChain 104(flattenTemp) 98
113: 6(float) Load 112
- Store 111(Depth) 113
+ Store 111(@entryPointOutput.Depth) 113
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 6d2526df494..a41c03a8b9e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.gather.basic.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:29 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -95,13 +95,13 @@ gl_FragCoord origin is upper left
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:29 Color: direct index for structure ( temp 4-component vector of float)
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Constant:
0:29 0 (const int)
0:29 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:29 Depth: direct index for structure ( temp float)
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Constant:
@@ -122,14 +122,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:29 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -225,13 +225,13 @@ gl_FragCoord origin is upper left
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:29 Color: direct index for structure ( temp 4-component vector of float)
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Constant:
0:29 0 (const int)
0:29 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:29 Depth: direct index for structure ( temp float)
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Constant:
@@ -252,11 +252,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 135
Capability Shader
@@ -265,6 +265,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 108 112
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -285,8 +286,8 @@ gl_FragCoord origin is upper left
Name 84 "g_tTexcdu4"
Name 95 "psout"
Name 105 "flattenTemp"
- Name 108 "Color"
- Name 112 "Depth"
+ Name 108 "@entryPointOutput.Color"
+ Name 112 "@entryPointOutput.Depth"
Name 115 "g_sSamp2d"
Name 118 "g_tTex1df4a"
Name 119 "g_tTex1df4"
@@ -303,8 +304,8 @@ gl_FragCoord origin is upper left
Decorate 63(g_tTexcdf4) DescriptorSet 0
Decorate 74(g_tTexcdi4) DescriptorSet 0
Decorate 84(g_tTexcdu4) DescriptorSet 0
- Decorate 108(Color) Location 0
- Decorate 112(Depth) BuiltIn FragDepth
+ Decorate 108(@entryPointOutput.Color) Location 0
+ Decorate 112(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 115(g_sSamp2d) DescriptorSet 0
Decorate 118(g_tTex1df4a) DescriptorSet 0
Decorate 118(g_tTex1df4a) Binding 1
@@ -379,9 +380,9 @@ gl_FragCoord origin is upper left
99: 28(int) Constant 1
100: TypePointer Function 6(float)
107: TypePointer Output 7(fvec4)
- 108(Color): 107(ptr) Variable Output
+108(@entryPointOutput.Color): 107(ptr) Variable Output
111: TypePointer Output 6(float)
- 112(Depth): 111(ptr) Variable Output
+112(@entryPointOutput.Depth): 111(ptr) Variable Output
115(g_sSamp2d): 19(ptr) Variable UniformConstant
116: TypeImage 6(float) 1D sampled format:Unknown
117: TypePointer UniformConstant 116
@@ -409,10 +410,10 @@ gl_FragCoord origin is upper left
Store 105(flattenTemp) 106
109: 12(ptr) AccessChain 105(flattenTemp) 29
110: 7(fvec4) Load 109
- Store 108(Color) 110
+ Store 108(@entryPointOutput.Color) 110
113: 100(ptr) AccessChain 105(flattenTemp) 99
114: 6(float) Load 113
- Store 112(Depth) 114
+ Store 112(@entryPointOutput.Depth) 114
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index 9eec1ca6c59..432da7b41a7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -1,5 +1,5 @@
hlsl.gather.basic.dx10.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:28 Function Parameters:
@@ -84,7 +84,7 @@ Shader version: 450
0:? Sequence
0:28 Sequence
0:28 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:28 Pos: direct index for structure ( temp 4-component vector of float)
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:28 Constant:
@@ -105,13 +105,13 @@ Shader version: 450
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:28 Function Parameters:
@@ -196,7 +196,7 @@ Shader version: 450
0:? Sequence
0:28 Sequence
0:28 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:28 Pos: direct index for structure ( temp 4-component vector of float)
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:28 Constant:
@@ -217,17 +217,18 @@ Shader version: 450
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 129
+// Generated by (magic number): 80002
+// Id's are bound by 126
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 103 128
+ EntryPoint Vertex 4 "main" 103
+ Source HLSL 500
Name 4 "main"
Name 8 "VS_OUTPUT"
MemberName 8(VS_OUTPUT) 0 "Pos"
@@ -246,7 +247,7 @@ Shader version: 450
Name 81 "txval42"
Name 84 "g_tTexcdu4"
Name 95 "vsout"
- Name 103 "@entryPointOutput_Pos"
+ Name 103 "@entryPointOutput.Pos"
Name 106 "g_sSamp2d"
Name 109 "g_tTex1df4a"
Name 110 "g_tTex1df4"
@@ -255,8 +256,6 @@ Shader version: 450
Name 119 "g_tTex3df4"
Name 122 "g_tTex3di4"
Name 125 "g_tTex3du4"
- Name 126 "VS_OUTPUT"
- Name 128 "@entryPointOutput"
Decorate 16(g_tTex2df4) DescriptorSet 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
@@ -265,7 +264,7 @@ Shader version: 450
Decorate 63(g_tTexcdf4) DescriptorSet 0
Decorate 74(g_tTexcdi4) DescriptorSet 0
Decorate 84(g_tTexcdu4) DescriptorSet 0
- Decorate 103(@entryPointOutput_Pos) BuiltIn Position
+ Decorate 103(@entryPointOutput.Pos) BuiltIn Position
Decorate 106(g_sSamp2d) DescriptorSet 0
Decorate 109(g_tTex1df4a) DescriptorSet 0
Decorate 109(g_tTex1df4a) Binding 1
@@ -276,7 +275,6 @@ Shader version: 450
Decorate 119(g_tTex3df4) DescriptorSet 0
Decorate 122(g_tTex3di4) DescriptorSet 0
Decorate 125(g_tTex3du4) DescriptorSet 0
- Decorate 128(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -339,7 +337,7 @@ Shader version: 450
96: 6(float) Constant 0
97: 7(fvec4) ConstantComposite 96 96 96 96
102: TypePointer Output 7(fvec4)
-103(@entryPointOutput_Pos): 102(ptr) Variable Output
+103(@entryPointOutput.Pos): 102(ptr) Variable Output
106(g_sSamp2d): 19(ptr) Variable UniformConstant
107: TypeImage 6(float) 1D sampled format:Unknown
108: TypePointer UniformConstant 107
@@ -360,14 +358,11 @@ Shader version: 450
123: TypeImage 45(int) 3D sampled format:Unknown
124: TypePointer UniformConstant 123
125(g_tTex3du4): 124(ptr) Variable UniformConstant
- 126(VS_OUTPUT): TypeStruct
- 127: TypePointer Output 126(VS_OUTPUT)
-128(@entryPointOutput): 127(ptr) Variable Output
4(main): 2 Function None 3
5: Label
104:8(VS_OUTPUT) FunctionCall 10(@main()
105: 7(fvec4) CompositeExtract 104 0
- Store 103(@entryPointOutput_Pos) 105
+ Store 103(@entryPointOutput.Pos) 105
Return
FunctionEnd
10(@main():8(VS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index c9213137cb2..77410b03412 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.gather.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -71,13 +71,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -97,14 +97,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -176,13 +176,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -202,11 +202,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 114
Capability Shader
@@ -215,6 +215,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 79 83
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -229,8 +230,8 @@ gl_FragCoord origin is upper left
Name 55 "g_tTex2du4"
Name 67 "psout"
Name 76 "flattenTemp"
- Name 79 "Color"
- Name 83 "Depth"
+ Name 79 "@entryPointOutput.Color"
+ Name 83 "@entryPointOutput.Depth"
Name 88 "g_tTex1df4a"
Name 89 "g_tTex1df4"
Name 92 "g_tTex1di4"
@@ -246,8 +247,8 @@ gl_FragCoord origin is upper left
Decorate 20(g_sSamp) Binding 0
Decorate 39(g_tTex2di4) DescriptorSet 0
Decorate 55(g_tTex2du4) DescriptorSet 0
- Decorate 79(Color) Location 0
- Decorate 83(Depth) BuiltIn FragDepth
+ Decorate 79(@entryPointOutput.Color) Location 0
+ Decorate 83(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 88(g_tTex1df4a) DescriptorSet 0
Decorate 88(g_tTex1df4a) Binding 1
Decorate 89(g_tTex1df4) DescriptorSet 0
@@ -310,9 +311,9 @@ gl_FragCoord origin is upper left
69: 7(fvec4) ConstantComposite 68 68 68 68
71: TypePointer Function 6(float)
78: TypePointer Output 7(fvec4)
- 79(Color): 78(ptr) Variable Output
+79(@entryPointOutput.Color): 78(ptr) Variable Output
82: TypePointer Output 6(float)
- 83(Depth): 82(ptr) Variable Output
+83(@entryPointOutput.Depth): 82(ptr) Variable Output
86: TypeImage 6(float) 1D sampled format:Unknown
87: TypePointer UniformConstant 86
88(g_tTex1df4a): 87(ptr) Variable UniformConstant
@@ -348,10 +349,10 @@ gl_FragCoord origin is upper left
Store 76(flattenTemp) 77
80: 12(ptr) AccessChain 76(flattenTemp) 31
81: 7(fvec4) Load 80
- Store 79(Color) 81
+ Store 79(@entryPointOutput.Color) 81
84: 71(ptr) AccessChain 76(flattenTemp) 30
85: 6(float) Load 84
- Store 83(Depth) 85
+ Store 83(@entryPointOutput.Depth) 85
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index 6b1cac30dcf..a6e50ff9c18 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.gather.offsetarray.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -74,13 +74,13 @@ gl_FragCoord origin is upper left
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:20 Color: direct index for structure ( temp 4-component vector of float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
0:20 0 (const int)
0:20 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:20 Depth: direct index for structure ( temp float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
@@ -94,14 +94,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2df4' ( uniform texture2DArray)
0:? 'g_tTex2di4' ( uniform itexture2DArray)
0:? 'g_tTex2du4' ( uniform utexture2DArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -176,13 +176,13 @@ gl_FragCoord origin is upper left
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:20 Color: direct index for structure ( temp 4-component vector of float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
0:20 0 (const int)
0:20 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:20 Depth: direct index for structure ( temp float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
@@ -196,11 +196,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2df4' ( uniform texture2DArray)
0:? 'g_tTex2di4' ( uniform itexture2DArray)
0:? 'g_tTex2du4' ( uniform utexture2DArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 97
Capability Shader
@@ -209,6 +209,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 80 84
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -223,8 +224,8 @@ gl_FragCoord origin is upper left
Name 55 "g_tTex2du4"
Name 68 "psout"
Name 77 "flattenTemp"
- Name 80 "Color"
- Name 84 "Depth"
+ Name 80 "@entryPointOutput.Color"
+ Name 84 "@entryPointOutput.Depth"
Name 89 "g_tTex1df4a"
Name 90 "g_tTex1df4"
Name 93 "g_tTex1di4"
@@ -234,8 +235,8 @@ gl_FragCoord origin is upper left
Decorate 20(g_sSamp) Binding 0
Decorate 40(g_tTex2di4) DescriptorSet 0
Decorate 55(g_tTex2du4) DescriptorSet 0
- Decorate 80(Color) Location 0
- Decorate 84(Depth) BuiltIn FragDepth
+ Decorate 80(@entryPointOutput.Color) Location 0
+ Decorate 84(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 89(g_tTex1df4a) DescriptorSet 0
Decorate 89(g_tTex1df4a) Binding 1
Decorate 90(g_tTex1df4) DescriptorSet 0
@@ -293,9 +294,9 @@ gl_FragCoord origin is upper left
70: 7(fvec4) ConstantComposite 69 69 69 69
72: TypePointer Function 6(float)
79: TypePointer Output 7(fvec4)
- 80(Color): 79(ptr) Variable Output
+80(@entryPointOutput.Color): 79(ptr) Variable Output
83: TypePointer Output 6(float)
- 84(Depth): 83(ptr) Variable Output
+84(@entryPointOutput.Depth): 83(ptr) Variable Output
87: TypeImage 6(float) 1D array sampled format:Unknown
88: TypePointer UniformConstant 87
89(g_tTex1df4a): 88(ptr) Variable UniformConstant
@@ -313,10 +314,10 @@ gl_FragCoord origin is upper left
Store 77(flattenTemp) 78
81: 12(ptr) AccessChain 77(flattenTemp) 32
82: 7(fvec4) Load 81
- Store 80(Color) 82
+ Store 80(@entryPointOutput.Color) 82
85: 72(ptr) AccessChain 77(flattenTemp) 31
86: 6(float) Load 85
- Store 84(Depth) 86
+ Store 84(@entryPointOutput.Depth) 86
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index c918d9917c5..2191553283c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.gatherRGBA.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -344,13 +344,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -368,14 +368,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -720,13 +720,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -744,11 +744,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 255
Capability Shader
@@ -758,6 +758,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 238 242
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -802,8 +803,8 @@ gl_FragCoord origin is upper left
Name 218 "txval72"
Name 226 "psout"
Name 235 "flattenTemp"
- Name 238 "Color"
- Name 242 "Depth"
+ Name 238 "@entryPointOutput.Color"
+ Name 242 "@entryPointOutput.Depth"
Name 245 "g_sSamp2d"
Name 248 "g_tTex1df4a"
Name 251 "g_tTex1di4a"
@@ -822,8 +823,8 @@ gl_FragCoord origin is upper left
Decorate 131(g_tTexcdf4a) DescriptorSet 0
Decorate 143(g_tTexcdi4a) DescriptorSet 0
Decorate 154(g_tTexcdu4a) DescriptorSet 0
- Decorate 238(Color) Location 0
- Decorate 242(Depth) BuiltIn FragDepth
+ Decorate 238(@entryPointOutput.Color) Location 0
+ Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 245(g_sSamp2d) DescriptorSet 0
Decorate 248(g_tTex1df4a) DescriptorSet 0
Decorate 248(g_tTex1df4a) Binding 0
@@ -885,9 +886,9 @@ gl_FragCoord origin is upper left
228: 7(fvec4) ConstantComposite 227 227 227 227
230: TypePointer Function 6(float)
237: TypePointer Output 7(fvec4)
- 238(Color): 237(ptr) Variable Output
+238(@entryPointOutput.Color): 237(ptr) Variable Output
241: TypePointer Output 6(float)
- 242(Depth): 241(ptr) Variable Output
+242(@entryPointOutput.Depth): 241(ptr) Variable Output
245(g_sSamp2d): 19(ptr) Variable UniformConstant
246: TypeImage 6(float) 1D array sampled format:Unknown
247: TypePointer UniformConstant 246
@@ -905,10 +906,10 @@ gl_FragCoord origin is upper left
Store 235(flattenTemp) 236
239: 12(ptr) AccessChain 235(flattenTemp) 34
240: 7(fvec4) Load 239
- Store 238(Color) 240
+ Store 238(@entryPointOutput.Color) 240
243: 230(ptr) AccessChain 235(flattenTemp) 69
244: 6(float) Load 243
- Store 242(Depth) 244
+ Store 242(@entryPointOutput.Depth) 244
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index 7bd005a7e1b..6dbdfaa4109 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.gatherRGBA.basic.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:34 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -344,13 +344,13 @@ gl_FragCoord origin is upper left
0:34 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:34 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:34 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:34 Color: direct index for structure ( temp 4-component vector of float)
0:34 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:34 Constant:
0:34 0 (const int)
0:34 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:34 Depth: direct index for structure ( temp float)
0:34 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:34 Constant:
@@ -372,14 +372,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:34 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -724,13 +724,13 @@ gl_FragCoord origin is upper left
0:34 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:34 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:34 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:34 Color: direct index for structure ( temp 4-component vector of float)
0:34 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:34 Constant:
0:34 0 (const int)
0:34 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:34 Depth: direct index for structure ( temp float)
0:34 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:34 Constant:
@@ -752,11 +752,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 265
Capability Shader
@@ -765,6 +765,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 238 242
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -809,8 +810,8 @@ gl_FragCoord origin is upper left
Name 218 "txval72"
Name 226 "psout"
Name 235 "flattenTemp"
- Name 238 "Color"
- Name 242 "Depth"
+ Name 238 "@entryPointOutput.Color"
+ Name 242 "@entryPointOutput.Depth"
Name 245 "g_sSamp2d"
Name 248 "g_tTex1df4a"
Name 249 "g_tTex1df4"
@@ -833,8 +834,8 @@ gl_FragCoord origin is upper left
Decorate 131(g_tTexcdf4) DescriptorSet 0
Decorate 143(g_tTexcdi4) DescriptorSet 0
Decorate 154(g_tTexcdu4) DescriptorSet 0
- Decorate 238(Color) Location 0
- Decorate 242(Depth) BuiltIn FragDepth
+ Decorate 238(@entryPointOutput.Color) Location 0
+ Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 245(g_sSamp2d) DescriptorSet 0
Decorate 248(g_tTex1df4a) DescriptorSet 0
Decorate 248(g_tTex1df4a) Binding 1
@@ -901,9 +902,9 @@ gl_FragCoord origin is upper left
228: 7(fvec4) ConstantComposite 227 227 227 227
230: TypePointer Function 6(float)
237: TypePointer Output 7(fvec4)
- 238(Color): 237(ptr) Variable Output
+238(@entryPointOutput.Color): 237(ptr) Variable Output
241: TypePointer Output 6(float)
- 242(Depth): 241(ptr) Variable Output
+242(@entryPointOutput.Depth): 241(ptr) Variable Output
245(g_sSamp2d): 19(ptr) Variable UniformConstant
246: TypeImage 6(float) 1D sampled format:Unknown
247: TypePointer UniformConstant 246
@@ -931,10 +932,10 @@ gl_FragCoord origin is upper left
Store 235(flattenTemp) 236
239: 12(ptr) AccessChain 235(flattenTemp) 34
240: 7(fvec4) Load 239
- Store 238(Color) 240
+ Store 238(@entryPointOutput.Color) 240
243: 230(ptr) AccessChain 235(flattenTemp) 30
244: 6(float) Load 243
- Store 242(Depth) 244
+ Store 242(@entryPointOutput.Depth) 244
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index 1d3fe467ded..ddbe283179b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.gatherRGBA.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:39 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -596,13 +596,13 @@ gl_FragCoord origin is upper left
0:39 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:39 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:39 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:39 Color: direct index for structure ( temp 4-component vector of float)
0:39 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:39 Constant:
0:39 0 (const int)
0:39 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:39 Depth: direct index for structure ( temp float)
0:39 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:39 Constant:
@@ -624,14 +624,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:39 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -1228,13 +1228,13 @@ gl_FragCoord origin is upper left
0:39 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:39 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:39 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:39 Color: direct index for structure ( temp 4-component vector of float)
0:39 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:39 Constant:
0:39 0 (const int)
0:39 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:39 Depth: direct index for structure ( temp float)
0:39 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:39 Constant:
@@ -1256,11 +1256,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 399
Capability Shader
@@ -1270,6 +1270,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 363 367
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -1315,8 +1316,8 @@ gl_FragCoord origin is upper left
Name 334 "txval324"
Name 351 "psout"
Name 360 "flattenTemp"
- Name 363 "Color"
- Name 367 "Depth"
+ Name 363 "@entryPointOutput.Color"
+ Name 367 "@entryPointOutput.Depth"
Name 370 "g_sSamp2d"
Name 373 "g_tTex1df4a"
Name 374 "g_tTex1df4"
@@ -1343,8 +1344,8 @@ gl_FragCoord origin is upper left
Decorate 32 DescriptorSet 0
Decorate 47(g_tTex2di4) DescriptorSet 0
Decorate 63(g_tTex2du4) DescriptorSet 0
- Decorate 363(Color) Location 0
- Decorate 367(Depth) BuiltIn FragDepth
+ Decorate 363(@entryPointOutput.Color) Location 0
+ Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 370(g_sSamp2d) DescriptorSet 0
Decorate 373(g_tTex1df4a) DescriptorSet 0
Decorate 373(g_tTex1df4a) Binding 1
@@ -1407,9 +1408,9 @@ gl_FragCoord origin is upper left
353: 7(fvec4) ConstantComposite 352 352 352 352
355: TypePointer Function 6(float)
362: TypePointer Output 7(fvec4)
- 363(Color): 362(ptr) Variable Output
+363(@entryPointOutput.Color): 362(ptr) Variable Output
366: TypePointer Output 6(float)
- 367(Depth): 366(ptr) Variable Output
+367(@entryPointOutput.Depth): 366(ptr) Variable Output
370(g_sSamp2d): 19(ptr) Variable UniformConstant
371: TypeImage 6(float) 1D sampled format:Unknown
372: TypePointer UniformConstant 371
@@ -1446,10 +1447,10 @@ gl_FragCoord origin is upper left
Store 360(flattenTemp) 361
364: 12(ptr) AccessChain 360(flattenTemp) 41
365: 7(fvec4) Load 364
- Store 363(Color) 365
+ Store 363(@entryPointOutput.Color) 365
368: 355(ptr) AccessChain 360(flattenTemp) 33
369: 6(float) Load 368
- Store 367(Depth) 369
+ Store 367(@entryPointOutput.Depth) 369
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index 86e0a99656b..360f75c1ba4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.gatherRGBA.offsetarray.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:33 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -596,13 +596,13 @@ gl_FragCoord origin is upper left
0:33 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:33 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:33 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:33 Color: direct index for structure ( temp 4-component vector of float)
0:33 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:33 Constant:
0:33 0 (const int)
0:33 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:33 Depth: direct index for structure ( temp float)
0:33 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:33 Constant:
@@ -620,14 +620,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:33 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -1224,13 +1224,13 @@ gl_FragCoord origin is upper left
0:33 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:33 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:33 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:33 Color: direct index for structure ( temp 4-component vector of float)
0:33 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:33 Constant:
0:33 0 (const int)
0:33 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:33 Depth: direct index for structure ( temp float)
0:33 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:33 Constant:
@@ -1248,11 +1248,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 389
Capability Shader
@@ -1263,6 +1263,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 363 367
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -1308,8 +1309,8 @@ gl_FragCoord origin is upper left
Name 334 "txval324"
Name 351 "psout"
Name 360 "flattenTemp"
- Name 363 "Color"
- Name 367 "Depth"
+ Name 363 "@entryPointOutput.Color"
+ Name 367 "@entryPointOutput.Depth"
Name 370 "g_sSamp2d"
Name 373 "g_tTex1df4a"
Name 376 "g_tTex1di4a"
@@ -1332,8 +1333,8 @@ gl_FragCoord origin is upper left
Decorate 32 DescriptorSet 0
Decorate 47(g_tTex2di4a) DescriptorSet 0
Decorate 63(g_tTex2du4a) DescriptorSet 0
- Decorate 363(Color) Location 0
- Decorate 367(Depth) BuiltIn FragDepth
+ Decorate 363(@entryPointOutput.Color) Location 0
+ Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 370(g_sSamp2d) DescriptorSet 0
Decorate 373(g_tTex1df4a) DescriptorSet 0
Decorate 373(g_tTex1df4a) Binding 0
@@ -1391,9 +1392,9 @@ gl_FragCoord origin is upper left
353: 7(fvec4) ConstantComposite 352 352 352 352
355: TypePointer Function 6(float)
362: TypePointer Output 7(fvec4)
- 363(Color): 362(ptr) Variable Output
+363(@entryPointOutput.Color): 362(ptr) Variable Output
366: TypePointer Output 6(float)
- 367(Depth): 366(ptr) Variable Output
+367(@entryPointOutput.Depth): 366(ptr) Variable Output
370(g_sSamp2d): 19(ptr) Variable UniformConstant
371: TypeImage 6(float) 1D array sampled format:Unknown
372: TypePointer UniformConstant 371
@@ -1420,10 +1421,10 @@ gl_FragCoord origin is upper left
Store 360(flattenTemp) 361
364: 12(ptr) AccessChain 360(flattenTemp) 41
365: 7(fvec4) Load 364
- Store 363(Color) 365
+ Store 363(@entryPointOutput.Color) 365
368: 355(ptr) AccessChain 360(flattenTemp) 131
369: 6(float) Load 368
- Store 367(Depth) 369
+ Store 367(@entryPointOutput.Depth) 369
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
index 1c7487deb79..7bfed636c36 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.gathercmpRGBA.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
0:45 'txval001' ( temp 4-component vector of float)
0:45 textureGatherOffset ( temp 4-component vector of float)
0:45 Construct combined texture-sampler ( temp sampler2DShadow)
-0:45 'g_tTex2df4' ( uniform texture2D)
+0:45 'g_tTex2df4' ( uniform texture2DShadow)
0:45 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:45 c2: direct index for structure ( uniform 2-component vector of float)
0:45 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -26,7 +26,7 @@ gl_FragCoord origin is upper left
0:46 'txval011' ( temp 4-component vector of int)
0:46 textureGatherOffset ( temp 4-component vector of int)
0:46 Construct combined texture-sampler ( temp isampler2DShadow)
-0:46 'g_tTex2di4' ( uniform itexture2D)
+0:46 'g_tTex2di4' ( uniform itexture2DShadow)
0:46 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:46 c2: direct index for structure ( uniform 2-component vector of float)
0:46 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -42,7 +42,7 @@ gl_FragCoord origin is upper left
0:47 'txval021' ( temp 4-component vector of uint)
0:47 textureGatherOffset ( temp 4-component vector of uint)
0:47 Construct combined texture-sampler ( temp usampler2DShadow)
-0:47 'g_tTex2du4' ( uniform utexture2D)
+0:47 'g_tTex2du4' ( uniform utexture2DShadow)
0:47 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:47 c2: direct index for structure ( uniform 2-component vector of float)
0:47 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -58,7 +58,7 @@ gl_FragCoord origin is upper left
0:49 'txval004' ( temp 4-component vector of float)
0:49 textureGatherOffsets ( temp 4-component vector of float)
0:49 Construct combined texture-sampler ( temp sampler2DShadow)
-0:49 'g_tTex2df4' ( uniform texture2D)
+0:49 'g_tTex2df4' ( uniform texture2DShadow)
0:49 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:49 c2: direct index for structure ( uniform 2-component vector of float)
0:49 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -80,7 +80,7 @@ gl_FragCoord origin is upper left
0:50 'txval014' ( temp 4-component vector of int)
0:50 textureGatherOffsets ( temp 4-component vector of int)
0:50 Construct combined texture-sampler ( temp isampler2DShadow)
-0:50 'g_tTex2di4' ( uniform itexture2D)
+0:50 'g_tTex2di4' ( uniform itexture2DShadow)
0:50 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:50 c2: direct index for structure ( uniform 2-component vector of float)
0:50 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -102,7 +102,7 @@ gl_FragCoord origin is upper left
0:51 'txval024' ( temp 4-component vector of uint)
0:51 textureGatherOffsets ( temp 4-component vector of uint)
0:51 Construct combined texture-sampler ( temp usampler2DShadow)
-0:51 'g_tTex2du4' ( uniform utexture2D)
+0:51 'g_tTex2du4' ( uniform utexture2DShadow)
0:51 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:51 c2: direct index for structure ( uniform 2-component vector of float)
0:51 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -119,25 +119,73 @@ gl_FragCoord origin is upper left
0:51 1 (const int)
0:51 1 (const int)
0:51 1 (const int)
-0:114 move second child to first child ( temp 4-component vector of float)
-0:114 Color: direct index for structure ( temp 4-component vector of float)
-0:114 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:114 Constant:
-0:114 0 (const int)
-0:114 Constant:
-0:114 1.000000
-0:114 1.000000
-0:114 1.000000
-0:114 1.000000
-0:115 move second child to first child ( temp float)
-0:115 Depth: direct index for structure ( temp float)
-0:115 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:115 Constant:
-0:115 1 (const int)
-0:115 Constant:
-0:115 1.000000
-0:117 Branch: Return with expression
-0:117 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:53 Sequence
+0:53 move second child to first child ( temp 4-component vector of float)
+0:53 'txval401' ( temp 4-component vector of float)
+0:53 textureGatherOffset ( temp 4-component vector of float)
+0:53 Construct combined texture-sampler ( temp sampler2DShadow)
+0:53 'g_tTex2df4' ( uniform texture2DShadow)
+0:53 'g_sSampCmp' (layout( binding=0) uniform sampler)
+0:53 c2: direct index for structure ( uniform 2-component vector of float)
+0:53 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
+0:53 Constant:
+0:53 1 (const uint)
+0:53 Constant:
+0:53 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? 0 (const int)
+0:54 Sequence
+0:54 move second child to first child ( temp 4-component vector of int)
+0:54 'txval411' ( temp 4-component vector of int)
+0:54 textureGatherOffset ( temp 4-component vector of int)
+0:54 Construct combined texture-sampler ( temp isampler2DShadow)
+0:54 'g_tTex2di4' ( uniform itexture2DShadow)
+0:54 'g_sSampCmp' (layout( binding=0) uniform sampler)
+0:54 c2: direct index for structure ( uniform 2-component vector of float)
+0:54 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
+0:54 Constant:
+0:54 1 (const uint)
+0:54 Constant:
+0:54 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? -1 (const int)
+0:55 Sequence
+0:55 move second child to first child ( temp 4-component vector of uint)
+0:55 'txval421' ( temp 4-component vector of uint)
+0:55 textureGatherOffset ( temp 4-component vector of uint)
+0:55 Construct combined texture-sampler ( temp usampler2DShadow)
+0:55 'g_tTex2du4' ( uniform utexture2DShadow)
+0:55 'g_sSampCmp' (layout( binding=0) uniform sampler)
+0:55 c2: direct index for structure ( uniform 2-component vector of float)
+0:55 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
+0:55 Constant:
+0:55 1 (const uint)
+0:55 Constant:
+0:55 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? 1 (const int)
+0:110 move second child to first child ( temp 4-component vector of float)
+0:110 Color: direct index for structure ( temp 4-component vector of float)
+0:110 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1.000000
+0:110 1.000000
+0:110 1.000000
+0:110 1.000000
+0:111 move second child to first child ( temp float)
+0:111 Depth: direct index for structure ( temp float)
+0:111 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1.000000
+0:113 Branch: Return with expression
+0:113 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Definition: main( ( temp void)
0:38 Function Parameters:
0:? Sequence
@@ -146,13 +194,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -163,9 +211,9 @@ gl_FragCoord origin is upper left
0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
0:? 'g_tTex1di4' ( uniform itexture1D)
0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
@@ -173,14 +221,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -191,7 +239,7 @@ gl_FragCoord origin is upper left
0:45 'txval001' ( temp 4-component vector of float)
0:45 textureGatherOffset ( temp 4-component vector of float)
0:45 Construct combined texture-sampler ( temp sampler2DShadow)
-0:45 'g_tTex2df4' ( uniform texture2D)
+0:45 'g_tTex2df4' ( uniform texture2DShadow)
0:45 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:45 c2: direct index for structure ( uniform 2-component vector of float)
0:45 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -207,7 +255,7 @@ gl_FragCoord origin is upper left
0:46 'txval011' ( temp 4-component vector of int)
0:46 textureGatherOffset ( temp 4-component vector of int)
0:46 Construct combined texture-sampler ( temp isampler2DShadow)
-0:46 'g_tTex2di4' ( uniform itexture2D)
+0:46 'g_tTex2di4' ( uniform itexture2DShadow)
0:46 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:46 c2: direct index for structure ( uniform 2-component vector of float)
0:46 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -223,7 +271,7 @@ gl_FragCoord origin is upper left
0:47 'txval021' ( temp 4-component vector of uint)
0:47 textureGatherOffset ( temp 4-component vector of uint)
0:47 Construct combined texture-sampler ( temp usampler2DShadow)
-0:47 'g_tTex2du4' ( uniform utexture2D)
+0:47 'g_tTex2du4' ( uniform utexture2DShadow)
0:47 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:47 c2: direct index for structure ( uniform 2-component vector of float)
0:47 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -239,7 +287,7 @@ gl_FragCoord origin is upper left
0:49 'txval004' ( temp 4-component vector of float)
0:49 textureGatherOffsets ( temp 4-component vector of float)
0:49 Construct combined texture-sampler ( temp sampler2DShadow)
-0:49 'g_tTex2df4' ( uniform texture2D)
+0:49 'g_tTex2df4' ( uniform texture2DShadow)
0:49 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:49 c2: direct index for structure ( uniform 2-component vector of float)
0:49 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -261,7 +309,7 @@ gl_FragCoord origin is upper left
0:50 'txval014' ( temp 4-component vector of int)
0:50 textureGatherOffsets ( temp 4-component vector of int)
0:50 Construct combined texture-sampler ( temp isampler2DShadow)
-0:50 'g_tTex2di4' ( uniform itexture2D)
+0:50 'g_tTex2di4' ( uniform itexture2DShadow)
0:50 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:50 c2: direct index for structure ( uniform 2-component vector of float)
0:50 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -283,7 +331,7 @@ gl_FragCoord origin is upper left
0:51 'txval024' ( temp 4-component vector of uint)
0:51 textureGatherOffsets ( temp 4-component vector of uint)
0:51 Construct combined texture-sampler ( temp usampler2DShadow)
-0:51 'g_tTex2du4' ( uniform utexture2D)
+0:51 'g_tTex2du4' ( uniform utexture2DShadow)
0:51 'g_sSampCmp' (layout( binding=0) uniform sampler)
0:51 c2: direct index for structure ( uniform 2-component vector of float)
0:51 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
@@ -300,25 +348,73 @@ gl_FragCoord origin is upper left
0:51 1 (const int)
0:51 1 (const int)
0:51 1 (const int)
-0:114 move second child to first child ( temp 4-component vector of float)
-0:114 Color: direct index for structure ( temp 4-component vector of float)
-0:114 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:114 Constant:
-0:114 0 (const int)
-0:114 Constant:
-0:114 1.000000
-0:114 1.000000
-0:114 1.000000
-0:114 1.000000
-0:115 move second child to first child ( temp float)
-0:115 Depth: direct index for structure ( temp float)
-0:115 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:115 Constant:
-0:115 1 (const int)
-0:115 Constant:
-0:115 1.000000
-0:117 Branch: Return with expression
-0:117 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:53 Sequence
+0:53 move second child to first child ( temp 4-component vector of float)
+0:53 'txval401' ( temp 4-component vector of float)
+0:53 textureGatherOffset ( temp 4-component vector of float)
+0:53 Construct combined texture-sampler ( temp sampler2DShadow)
+0:53 'g_tTex2df4' ( uniform texture2DShadow)
+0:53 'g_sSampCmp' (layout( binding=0) uniform sampler)
+0:53 c2: direct index for structure ( uniform 2-component vector of float)
+0:53 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
+0:53 Constant:
+0:53 1 (const uint)
+0:53 Constant:
+0:53 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? 0 (const int)
+0:54 Sequence
+0:54 move second child to first child ( temp 4-component vector of int)
+0:54 'txval411' ( temp 4-component vector of int)
+0:54 textureGatherOffset ( temp 4-component vector of int)
+0:54 Construct combined texture-sampler ( temp isampler2DShadow)
+0:54 'g_tTex2di4' ( uniform itexture2DShadow)
+0:54 'g_sSampCmp' (layout( binding=0) uniform sampler)
+0:54 c2: direct index for structure ( uniform 2-component vector of float)
+0:54 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
+0:54 Constant:
+0:54 1 (const uint)
+0:54 Constant:
+0:54 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? -1 (const int)
+0:55 Sequence
+0:55 move second child to first child ( temp 4-component vector of uint)
+0:55 'txval421' ( temp 4-component vector of uint)
+0:55 textureGatherOffset ( temp 4-component vector of uint)
+0:55 Construct combined texture-sampler ( temp usampler2DShadow)
+0:55 'g_tTex2du4' ( uniform utexture2DShadow)
+0:55 'g_sSampCmp' (layout( binding=0) uniform sampler)
+0:55 c2: direct index for structure ( uniform 2-component vector of float)
+0:55 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
+0:55 Constant:
+0:55 1 (const uint)
+0:55 Constant:
+0:55 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? 1 (const int)
+0:110 move second child to first child ( temp 4-component vector of float)
+0:110 Color: direct index for structure ( temp 4-component vector of float)
+0:110 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1.000000
+0:110 1.000000
+0:110 1.000000
+0:110 1.000000
+0:111 move second child to first child ( temp float)
+0:111 Depth: direct index for structure ( temp float)
+0:111 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1.000000
+0:113 Branch: Return with expression
+0:113 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Definition: main( ( temp void)
0:38 Function Parameters:
0:? Sequence
@@ -327,13 +423,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -344,9 +440,9 @@ gl_FragCoord origin is upper left
0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
0:? 'g_tTex1di4' ( uniform itexture1D)
0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
@@ -354,19 +450,20 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float c1, uniform 2-component vector of float c2, uniform 3-component vector of float c3, uniform 4-component vector of float c4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 146
+// Generated by (magic number): 80002
+// Id's are bound by 164
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 111 115
+ EntryPoint Fragment 4 "main" 129 133
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -375,58 +472,61 @@ gl_FragCoord origin is upper left
Name 13 "txval001"
Name 16 "g_tTex2df4"
Name 20 "g_sSampCmp"
- Name 27 "$Global"
- MemberName 27($Global) 0 "c1"
- MemberName 27($Global) 1 "c2"
- MemberName 27($Global) 2 "c3"
- MemberName 27($Global) 3 "c4"
- Name 29 ""
- Name 42 "txval011"
- Name 45 "g_tTex2di4"
- Name 59 "txval021"
- Name 62 "g_tTex2du4"
- Name 72 "txval004"
- Name 82 "txval014"
- Name 90 "txval024"
- Name 99 "psout"
- Name 108 "flattenTemp"
- Name 111 "Color"
- Name 115 "Depth"
- Name 120 "g_tTex1df4a"
- Name 121 "g_tTex1df4"
- Name 124 "g_tTex1di4"
- Name 127 "g_tTex1du4"
- Name 130 "g_tTex3df4"
- Name 133 "g_tTex3di4"
- Name 136 "g_tTex3du4"
- Name 139 "g_tTexcdf4"
- Name 142 "g_tTexcdi4"
- Name 145 "g_tTexcdu4"
+ Name 26 "$Global"
+ MemberName 26($Global) 0 "c1"
+ MemberName 26($Global) 1 "c2"
+ MemberName 26($Global) 2 "c3"
+ MemberName 26($Global) 3 "c4"
+ Name 28 ""
+ Name 41 "txval011"
+ Name 44 "g_tTex2di4"
+ Name 57 "txval021"
+ Name 60 "g_tTex2du4"
+ Name 69 "txval004"
+ Name 79 "txval014"
+ Name 87 "txval024"
+ Name 95 "txval401"
+ Name 102 "txval411"
+ Name 109 "txval421"
+ Name 117 "psout"
+ Name 126 "flattenTemp"
+ Name 129 "@entryPointOutput.Color"
+ Name 133 "@entryPointOutput.Depth"
+ Name 138 "g_tTex1df4a"
+ Name 139 "g_tTex1df4"
+ Name 142 "g_tTex1di4"
+ Name 145 "g_tTex1du4"
+ Name 148 "g_tTex3df4"
+ Name 151 "g_tTex3di4"
+ Name 154 "g_tTex3du4"
+ Name 157 "g_tTexcdf4"
+ Name 160 "g_tTexcdi4"
+ Name 163 "g_tTexcdu4"
Decorate 16(g_tTex2df4) DescriptorSet 0
Decorate 20(g_sSampCmp) DescriptorSet 0
Decorate 20(g_sSampCmp) Binding 0
- MemberDecorate 27($Global) 0 Offset 0
- MemberDecorate 27($Global) 1 Offset 8
- MemberDecorate 27($Global) 2 Offset 16
- MemberDecorate 27($Global) 3 Offset 32
- Decorate 27($Global) Block
- Decorate 29 DescriptorSet 0
- Decorate 45(g_tTex2di4) DescriptorSet 0
- Decorate 62(g_tTex2du4) DescriptorSet 0
- Decorate 111(Color) Location 0
- Decorate 115(Depth) BuiltIn FragDepth
- Decorate 120(g_tTex1df4a) DescriptorSet 0
- Decorate 120(g_tTex1df4a) Binding 1
- Decorate 121(g_tTex1df4) DescriptorSet 0
- Decorate 121(g_tTex1df4) Binding 0
- Decorate 124(g_tTex1di4) DescriptorSet 0
- Decorate 127(g_tTex1du4) DescriptorSet 0
- Decorate 130(g_tTex3df4) DescriptorSet 0
- Decorate 133(g_tTex3di4) DescriptorSet 0
- Decorate 136(g_tTex3du4) DescriptorSet 0
- Decorate 139(g_tTexcdf4) DescriptorSet 0
- Decorate 142(g_tTexcdi4) DescriptorSet 0
- Decorate 145(g_tTexcdu4) DescriptorSet 0
+ MemberDecorate 26($Global) 0 Offset 0
+ MemberDecorate 26($Global) 1 Offset 8
+ MemberDecorate 26($Global) 2 Offset 16
+ MemberDecorate 26($Global) 3 Offset 32
+ Decorate 26($Global) Block
+ Decorate 28 DescriptorSet 0
+ Decorate 44(g_tTex2di4) DescriptorSet 0
+ Decorate 60(g_tTex2du4) DescriptorSet 0
+ Decorate 129(@entryPointOutput.Color) Location 0
+ Decorate 133(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 138(g_tTex1df4a) DescriptorSet 0
+ Decorate 138(g_tTex1df4a) Binding 1
+ Decorate 139(g_tTex1df4) DescriptorSet 0
+ Decorate 139(g_tTex1df4) Binding 0
+ Decorate 142(g_tTex1di4) DescriptorSet 0
+ Decorate 145(g_tTex1du4) DescriptorSet 0
+ Decorate 148(g_tTex3df4) DescriptorSet 0
+ Decorate 151(g_tTex3di4) DescriptorSet 0
+ Decorate 154(g_tTex3du4) DescriptorSet 0
+ Decorate 157(g_tTexcdf4) DescriptorSet 0
+ Decorate 160(g_tTexcdi4) DescriptorSet 0
+ Decorate 163(g_tTexcdu4) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -434,153 +534,174 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 7(fvec4)
- 14: TypeImage 6(float) 2D sampled format:Unknown
+ 14: TypeImage 6(float) 2D depth sampled format:Unknown
15: TypePointer UniformConstant 14
16(g_tTex2df4): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(g_sSampCmp): 19(ptr) Variable UniformConstant
- 22: TypeImage 6(float) 2D depth sampled format:Unknown
- 23: TypeSampledImage 22
- 25: TypeVector 6(float) 2
- 26: TypeVector 6(float) 3
- 27($Global): TypeStruct 6(float) 25(fvec2) 26(fvec3) 7(fvec4)
- 28: TypePointer Uniform 27($Global)
- 29: 28(ptr) Variable Uniform
- 30: TypeInt 32 1
- 31: 30(int) Constant 1
- 32: TypePointer Uniform 25(fvec2)
- 35: 6(float) Constant 1061158912
- 36: TypeVector 30(int) 2
- 37: 30(int) Constant 0
- 38: 36(ivec2) ConstantComposite 31 37
- 40: TypeVector 30(int) 4
- 41: TypePointer Function 40(ivec4)
- 43: TypeImage 30(int) 2D sampled format:Unknown
- 44: TypePointer UniformConstant 43
- 45(g_tTex2di4): 44(ptr) Variable UniformConstant
- 48: TypeImage 30(int) 2D depth sampled format:Unknown
- 49: TypeSampledImage 48
- 53: 30(int) Constant 4294967295
- 54: 36(ivec2) ConstantComposite 31 53
- 56: TypeInt 32 0
- 57: TypeVector 56(int) 4
- 58: TypePointer Function 57(ivec4)
- 60: TypeImage 56(int) 2D sampled format:Unknown
- 61: TypePointer UniformConstant 60
- 62(g_tTex2du4): 61(ptr) Variable UniformConstant
- 65: TypeImage 56(int) 2D depth sampled format:Unknown
- 66: TypeSampledImage 65
- 70: 36(ivec2) ConstantComposite 31 31
- 78: 56(int) Constant 4
- 79: TypeArray 36(ivec2) 78
- 80: 79 ConstantComposite 38 38 38 38
- 88: 79 ConstantComposite 54 54 54 54
- 96: 79 ConstantComposite 70 70 70 70
- 98: TypePointer Function 8(PS_OUTPUT)
- 100: 6(float) Constant 1065353216
- 101: 7(fvec4) ConstantComposite 100 100 100 100
- 103: TypePointer Function 6(float)
- 110: TypePointer Output 7(fvec4)
- 111(Color): 110(ptr) Variable Output
- 114: TypePointer Output 6(float)
- 115(Depth): 114(ptr) Variable Output
- 118: TypeImage 6(float) 1D sampled format:Unknown
- 119: TypePointer UniformConstant 118
-120(g_tTex1df4a): 119(ptr) Variable UniformConstant
- 121(g_tTex1df4): 119(ptr) Variable UniformConstant
- 122: TypeImage 30(int) 1D sampled format:Unknown
- 123: TypePointer UniformConstant 122
- 124(g_tTex1di4): 123(ptr) Variable UniformConstant
- 125: TypeImage 56(int) 1D sampled format:Unknown
- 126: TypePointer UniformConstant 125
- 127(g_tTex1du4): 126(ptr) Variable UniformConstant
- 128: TypeImage 6(float) 3D sampled format:Unknown
- 129: TypePointer UniformConstant 128
- 130(g_tTex3df4): 129(ptr) Variable UniformConstant
- 131: TypeImage 30(int) 3D sampled format:Unknown
- 132: TypePointer UniformConstant 131
- 133(g_tTex3di4): 132(ptr) Variable UniformConstant
- 134: TypeImage 56(int) 3D sampled format:Unknown
- 135: TypePointer UniformConstant 134
- 136(g_tTex3du4): 135(ptr) Variable UniformConstant
- 137: TypeImage 6(float) Cube sampled format:Unknown
- 138: TypePointer UniformConstant 137
- 139(g_tTexcdf4): 138(ptr) Variable UniformConstant
- 140: TypeImage 30(int) Cube sampled format:Unknown
+ 22: TypeSampledImage 14
+ 24: TypeVector 6(float) 2
+ 25: TypeVector 6(float) 3
+ 26($Global): TypeStruct 6(float) 24(fvec2) 25(fvec3) 7(fvec4)
+ 27: TypePointer Uniform 26($Global)
+ 28: 27(ptr) Variable Uniform
+ 29: TypeInt 32 1
+ 30: 29(int) Constant 1
+ 31: TypePointer Uniform 24(fvec2)
+ 34: 6(float) Constant 1061158912
+ 35: TypeVector 29(int) 2
+ 36: 29(int) Constant 0
+ 37: 35(ivec2) ConstantComposite 30 36
+ 39: TypeVector 29(int) 4
+ 40: TypePointer Function 39(ivec4)
+ 42: TypeImage 29(int) 2D depth sampled format:Unknown
+ 43: TypePointer UniformConstant 42
+ 44(g_tTex2di4): 43(ptr) Variable UniformConstant
+ 47: TypeSampledImage 42
+ 51: 29(int) Constant 4294967295
+ 52: 35(ivec2) ConstantComposite 30 51
+ 54: TypeInt 32 0
+ 55: TypeVector 54(int) 4
+ 56: TypePointer Function 55(ivec4)
+ 58: TypeImage 54(int) 2D depth sampled format:Unknown
+ 59: TypePointer UniformConstant 58
+ 60(g_tTex2du4): 59(ptr) Variable UniformConstant
+ 63: TypeSampledImage 58
+ 67: 35(ivec2) ConstantComposite 30 30
+ 75: 54(int) Constant 4
+ 76: TypeArray 35(ivec2) 75
+ 77: 76 ConstantComposite 37 37 37 37
+ 85: 76 ConstantComposite 52 52 52 52
+ 93: 76 ConstantComposite 67 67 67 67
+ 116: TypePointer Function 8(PS_OUTPUT)
+ 118: 6(float) Constant 1065353216
+ 119: 7(fvec4) ConstantComposite 118 118 118 118
+ 121: TypePointer Function 6(float)
+ 128: TypePointer Output 7(fvec4)
+129(@entryPointOutput.Color): 128(ptr) Variable Output
+ 132: TypePointer Output 6(float)
+133(@entryPointOutput.Depth): 132(ptr) Variable Output
+ 136: TypeImage 6(float) 1D sampled format:Unknown
+ 137: TypePointer UniformConstant 136
+138(g_tTex1df4a): 137(ptr) Variable UniformConstant
+ 139(g_tTex1df4): 137(ptr) Variable UniformConstant
+ 140: TypeImage 29(int) 1D sampled format:Unknown
141: TypePointer UniformConstant 140
- 142(g_tTexcdi4): 141(ptr) Variable UniformConstant
- 143: TypeImage 56(int) Cube sampled format:Unknown
+ 142(g_tTex1di4): 141(ptr) Variable UniformConstant
+ 143: TypeImage 54(int) 1D sampled format:Unknown
144: TypePointer UniformConstant 143
- 145(g_tTexcdu4): 144(ptr) Variable UniformConstant
+ 145(g_tTex1du4): 144(ptr) Variable UniformConstant
+ 146: TypeImage 6(float) 3D sampled format:Unknown
+ 147: TypePointer UniformConstant 146
+ 148(g_tTex3df4): 147(ptr) Variable UniformConstant
+ 149: TypeImage 29(int) 3D sampled format:Unknown
+ 150: TypePointer UniformConstant 149
+ 151(g_tTex3di4): 150(ptr) Variable UniformConstant
+ 152: TypeImage 54(int) 3D sampled format:Unknown
+ 153: TypePointer UniformConstant 152
+ 154(g_tTex3du4): 153(ptr) Variable UniformConstant
+ 155: TypeImage 6(float) Cube sampled format:Unknown
+ 156: TypePointer UniformConstant 155
+ 157(g_tTexcdf4): 156(ptr) Variable UniformConstant
+ 158: TypeImage 29(int) Cube sampled format:Unknown
+ 159: TypePointer UniformConstant 158
+ 160(g_tTexcdi4): 159(ptr) Variable UniformConstant
+ 161: TypeImage 54(int) Cube sampled format:Unknown
+ 162: TypePointer UniformConstant 161
+ 163(g_tTexcdu4): 162(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
-108(flattenTemp): 98(ptr) Variable Function
- 109:8(PS_OUTPUT) FunctionCall 10(@main()
- Store 108(flattenTemp) 109
- 112: 12(ptr) AccessChain 108(flattenTemp) 37
- 113: 7(fvec4) Load 112
- Store 111(Color) 113
- 116: 103(ptr) AccessChain 108(flattenTemp) 31
- 117: 6(float) Load 116
- Store 115(Depth) 117
+126(flattenTemp): 116(ptr) Variable Function
+ 127:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 126(flattenTemp) 127
+ 130: 12(ptr) AccessChain 126(flattenTemp) 36
+ 131: 7(fvec4) Load 130
+ Store 129(@entryPointOutput.Color) 131
+ 134: 121(ptr) AccessChain 126(flattenTemp) 30
+ 135: 6(float) Load 134
+ Store 133(@entryPointOutput.Depth) 135
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
13(txval001): 12(ptr) Variable Function
- 42(txval011): 41(ptr) Variable Function
- 59(txval021): 58(ptr) Variable Function
- 72(txval004): 12(ptr) Variable Function
- 82(txval014): 41(ptr) Variable Function
- 90(txval024): 58(ptr) Variable Function
- 99(psout): 98(ptr) Variable Function
+ 41(txval011): 40(ptr) Variable Function
+ 57(txval021): 56(ptr) Variable Function
+ 69(txval004): 12(ptr) Variable Function
+ 79(txval014): 40(ptr) Variable Function
+ 87(txval024): 56(ptr) Variable Function
+ 95(txval401): 12(ptr) Variable Function
+ 102(txval411): 40(ptr) Variable Function
+ 109(txval421): 56(ptr) Variable Function
+ 117(psout): 116(ptr) Variable Function
17: 14 Load 16(g_tTex2df4)
21: 18 Load 20(g_sSampCmp)
- 24: 23 SampledImage 17 21
- 33: 32(ptr) AccessChain 29 31
- 34: 25(fvec2) Load 33
- 39: 7(fvec4) ImageDrefGather 24 34 35 ConstOffset 38
- Store 13(txval001) 39
- 46: 43 Load 45(g_tTex2di4)
- 47: 18 Load 20(g_sSampCmp)
- 50: 49 SampledImage 46 47
- 51: 32(ptr) AccessChain 29 31
- 52: 25(fvec2) Load 51
- 55: 40(ivec4) ImageDrefGather 50 52 35 ConstOffset 54
- Store 42(txval011) 55
- 63: 60 Load 62(g_tTex2du4)
- 64: 18 Load 20(g_sSampCmp)
- 67: 66 SampledImage 63 64
- 68: 32(ptr) AccessChain 29 31
- 69: 25(fvec2) Load 68
- 71: 57(ivec4) ImageDrefGather 67 69 35 ConstOffset 70
- Store 59(txval021) 71
- 73: 14 Load 16(g_tTex2df4)
- 74: 18 Load 20(g_sSampCmp)
- 75: 23 SampledImage 73 74
- 76: 32(ptr) AccessChain 29 31
- 77: 25(fvec2) Load 76
- 81: 7(fvec4) ImageDrefGather 75 77 35 ConstOffsets 80
- Store 72(txval004) 81
- 83: 43 Load 45(g_tTex2di4)
- 84: 18 Load 20(g_sSampCmp)
- 85: 49 SampledImage 83 84
- 86: 32(ptr) AccessChain 29 31
- 87: 25(fvec2) Load 86
- 89: 40(ivec4) ImageDrefGather 85 87 35 ConstOffsets 88
- Store 82(txval014) 89
- 91: 60 Load 62(g_tTex2du4)
- 92: 18 Load 20(g_sSampCmp)
- 93: 66 SampledImage 91 92
- 94: 32(ptr) AccessChain 29 31
- 95: 25(fvec2) Load 94
- 97: 57(ivec4) ImageDrefGather 93 95 35 ConstOffsets 96
- Store 90(txval024) 97
- 102: 12(ptr) AccessChain 99(psout) 37
- Store 102 101
- 104: 103(ptr) AccessChain 99(psout) 31
- Store 104 100
- 105:8(PS_OUTPUT) Load 99(psout)
- ReturnValue 105
+ 23: 22 SampledImage 17 21
+ 32: 31(ptr) AccessChain 28 30
+ 33: 24(fvec2) Load 32
+ 38: 7(fvec4) ImageDrefGather 23 33 34 ConstOffset 37
+ Store 13(txval001) 38
+ 45: 42 Load 44(g_tTex2di4)
+ 46: 18 Load 20(g_sSampCmp)
+ 48: 47 SampledImage 45 46
+ 49: 31(ptr) AccessChain 28 30
+ 50: 24(fvec2) Load 49
+ 53: 39(ivec4) ImageDrefGather 48 50 34 ConstOffset 52
+ Store 41(txval011) 53
+ 61: 58 Load 60(g_tTex2du4)
+ 62: 18 Load 20(g_sSampCmp)
+ 64: 63 SampledImage 61 62
+ 65: 31(ptr) AccessChain 28 30
+ 66: 24(fvec2) Load 65
+ 68: 55(ivec4) ImageDrefGather 64 66 34 ConstOffset 67
+ Store 57(txval021) 68
+ 70: 14 Load 16(g_tTex2df4)
+ 71: 18 Load 20(g_sSampCmp)
+ 72: 22 SampledImage 70 71
+ 73: 31(ptr) AccessChain 28 30
+ 74: 24(fvec2) Load 73
+ 78: 7(fvec4) ImageDrefGather 72 74 34 ConstOffsets 77
+ Store 69(txval004) 78
+ 80: 42 Load 44(g_tTex2di4)
+ 81: 18 Load 20(g_sSampCmp)
+ 82: 47 SampledImage 80 81
+ 83: 31(ptr) AccessChain 28 30
+ 84: 24(fvec2) Load 83
+ 86: 39(ivec4) ImageDrefGather 82 84 34 ConstOffsets 85
+ Store 79(txval014) 86
+ 88: 58 Load 60(g_tTex2du4)
+ 89: 18 Load 20(g_sSampCmp)
+ 90: 63 SampledImage 88 89
+ 91: 31(ptr) AccessChain 28 30
+ 92: 24(fvec2) Load 91
+ 94: 55(ivec4) ImageDrefGather 90 92 34 ConstOffsets 93
+ Store 87(txval024) 94
+ 96: 14 Load 16(g_tTex2df4)
+ 97: 18 Load 20(g_sSampCmp)
+ 98: 22 SampledImage 96 97
+ 99: 31(ptr) AccessChain 28 30
+ 100: 24(fvec2) Load 99
+ 101: 7(fvec4) ImageDrefGather 98 100 34 ConstOffset 37
+ Store 95(txval401) 101
+ 103: 42 Load 44(g_tTex2di4)
+ 104: 18 Load 20(g_sSampCmp)
+ 105: 47 SampledImage 103 104
+ 106: 31(ptr) AccessChain 28 30
+ 107: 24(fvec2) Load 106
+ 108: 39(ivec4) ImageDrefGather 105 107 34 ConstOffset 52
+ Store 102(txval411) 108
+ 110: 58 Load 60(g_tTex2du4)
+ 111: 18 Load 20(g_sSampCmp)
+ 112: 63 SampledImage 110 111
+ 113: 31(ptr) AccessChain 28 30
+ 114: 24(fvec2) Load 113
+ 115: 55(ivec4) ImageDrefGather 112 114 34 ConstOffset 67
+ Store 109(txval421) 115
+ 120: 12(ptr) AccessChain 117(psout) 36
+ Store 120 119
+ 122: 121(ptr) AccessChain 117(psout) 30
+ Store 122 118
+ 123:8(PS_OUTPUT) Load 117(psout)
+ ReturnValue 123
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index 30483db50ef..2fdf4f17b56 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.getdimensions.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:46 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -1112,13 +1112,13 @@ gl_FragCoord origin is upper left
0:46 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:46 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:46 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:46 Color: direct index for structure ( temp 4-component vector of float)
0:46 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:46 Constant:
0:46 0 (const int)
0:46 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:46 Depth: direct index for structure ( temp float)
0:46 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:46 Constant:
@@ -1152,14 +1152,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
0:? 'g_tTex2dmsi4a' ( uniform itexture2DMSArray)
0:? 'g_tTex2dmsu4a' ( uniform utexture2DMSArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:46 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -2272,13 +2272,13 @@ gl_FragCoord origin is upper left
0:46 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:46 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:46 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:46 Color: direct index for structure ( temp 4-component vector of float)
0:46 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:46 Constant:
0:46 0 (const int)
0:46 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:46 Depth: direct index for structure ( temp float)
0:46 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:46 Constant:
@@ -2312,22 +2312,22 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
0:? 'g_tTex2dmsi4a' ( uniform itexture2DMSArray)
0:? 'g_tTex2dmsu4a' ( uniform utexture2DMSArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 550
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
- Capability ImageMSArray
Capability ImageQuery
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 540 544
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -2416,8 +2416,8 @@ gl_FragCoord origin is upper left
Name 514 "g_tTex2dmsu4a"
Name 526 "psout"
Name 537 "flattenTemp"
- Name 540 "Color"
- Name 544 "Depth"
+ Name 540 "@entryPointOutput.Color"
+ Name 544 "@entryPointOutput.Depth"
Name 549 "g_sSamp"
Decorate 17(g_tTex1df4) DescriptorSet 0
Decorate 17(g_tTex1df4) Binding 0
@@ -2447,8 +2447,8 @@ gl_FragCoord origin is upper left
Decorate 486(g_tTex2dmsf4a) DescriptorSet 0
Decorate 500(g_tTex2dmsi4a) DescriptorSet 0
Decorate 514(g_tTex2dmsu4a) DescriptorSet 0
- Decorate 540(Color) Location 0
- Decorate 544(Depth) BuiltIn FragDepth
+ Decorate 540(@entryPointOutput.Color) Location 0
+ Decorate 544(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 549(g_sSamp) DescriptorSet 0
Decorate 549(g_sSamp) Binding 0
2: TypeVoid
@@ -2557,9 +2557,9 @@ gl_FragCoord origin is upper left
531: 19(int) Constant 1
532: TypePointer Function 6(float)
539: TypePointer Output 7(fvec4)
- 540(Color): 539(ptr) Variable Output
+540(@entryPointOutput.Color): 539(ptr) Variable Output
543: TypePointer Output 6(float)
- 544(Depth): 543(ptr) Variable Output
+544(@entryPointOutput.Depth): 543(ptr) Variable Output
547: TypeSampler
548: TypePointer UniformConstant 547
549(g_sSamp): 548(ptr) Variable UniformConstant
@@ -2570,10 +2570,10 @@ gl_FragCoord origin is upper left
Store 537(flattenTemp) 538
541: 529(ptr) AccessChain 537(flattenTemp) 20
542: 7(fvec4) Load 541
- Store 540(Color) 542
+ Store 540(@entryPointOutput.Color) 542
545: 532(ptr) AccessChain 537(flattenTemp) 531
546: 6(float) Load 545
- Store 544(Depth) 546
+ Store 544(@entryPointOutput.Depth) 546
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index 2faa744dbd3..8c940fe7cc7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.vert.out
@@ -1,5 +1,5 @@
hlsl.getdimensions.dx10.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:11 Function Parameters:
@@ -45,7 +45,7 @@ Shader version: 450
0:? Sequence
0:11 Sequence
0:11 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:11 Pos: direct index for structure ( temp 4-component vector of float)
0:11 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:11 Constant:
@@ -53,13 +53,13 @@ Shader version: 450
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:11 Function Parameters:
@@ -105,7 +105,7 @@ Shader version: 450
0:? Sequence
0:11 Sequence
0:11 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:11 Pos: direct index for structure ( temp 4-component vector of float)
0:11 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:11 Constant:
@@ -113,18 +113,19 @@ Shader version: 450
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 51
+// Generated by (magic number): 80002
+// Id's are bound by 48
Capability Shader
Capability Sampled1D
Capability ImageQuery
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 42 50
+ EntryPoint Vertex 4 "main" 42
+ Source HLSL 500
Name 4 "main"
Name 8 "VS_OUTPUT"
MemberName 8(VS_OUTPUT) 0 "Pos"
@@ -135,16 +136,13 @@ Shader version: 450
Name 24 "sizeQueryTemp"
Name 29 "NumberOfLevelsU"
Name 33 "vsout"
- Name 42 "@entryPointOutput_Pos"
+ Name 42 "@entryPointOutput.Pos"
Name 47 "g_sSamp"
- Name 48 "VS_OUTPUT"
- Name 50 "@entryPointOutput"
Decorate 17(g_tTex1df4) DescriptorSet 0
Decorate 17(g_tTex1df4) Binding 0
- Decorate 42(@entryPointOutput_Pos) BuiltIn Position
+ Decorate 42(@entryPointOutput.Pos) BuiltIn Position
Decorate 47(g_sSamp) DescriptorSet 0
Decorate 47(g_sSamp) Binding 0
- Decorate 50(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -164,18 +162,15 @@ Shader version: 450
35: 7(fvec4) ConstantComposite 34 34 34 34
36: TypePointer Function 7(fvec4)
41: TypePointer Output 7(fvec4)
-42(@entryPointOutput_Pos): 41(ptr) Variable Output
+42(@entryPointOutput.Pos): 41(ptr) Variable Output
45: TypeSampler
46: TypePointer UniformConstant 45
47(g_sSamp): 46(ptr) Variable UniformConstant
- 48(VS_OUTPUT): TypeStruct
- 49: TypePointer Output 48(VS_OUTPUT)
-50(@entryPointOutput): 49(ptr) Variable Output
4(main): 2 Function None 3
5: Label
43:8(VS_OUTPUT) FunctionCall 10(@main()
44: 7(fvec4) CompositeExtract 43 0
- Store 42(@entryPointOutput_Pos) 44
+ Store 42(@entryPointOutput.Pos) 44
Return
FunctionEnd
10(@main():8(VS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
index 781ed906632..b3d3ce0ddb5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.getdimensions.rw.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:44 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -320,13 +320,13 @@ gl_FragCoord origin is upper left
0:44 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:44 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:44 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:44 Color: direct index for structure ( temp 4-component vector of float)
0:44 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:44 Constant:
0:44 0 (const int)
0:44 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:44 Depth: direct index for structure ( temp float)
0:44 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:44 Constant:
@@ -352,14 +352,14 @@ gl_FragCoord origin is upper left
0:? 'g_tBuffI' (layout( rgba32i) uniform iimageBuffer)
0:? 'g_tBuffU' (layout( rgba32ui) uniform uimageBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:44 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -680,13 +680,13 @@ gl_FragCoord origin is upper left
0:44 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:44 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:44 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:44 Color: direct index for structure ( temp 4-component vector of float)
0:44 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:44 Constant:
0:44 0 (const int)
0:44 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:44 Depth: direct index for structure ( temp float)
0:44 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:44 Constant:
@@ -712,21 +712,22 @@ gl_FragCoord origin is upper left
0:? 'g_tBuffI' (layout( rgba32i) uniform iimageBuffer)
0:? 'g_tBuffU' (layout( rgba32ui) uniform uimageBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 232
Capability Shader
- Capability Sampled1D
- Capability SampledBuffer
+ Capability Image1D
+ Capability ImageBuffer
Capability ImageQuery
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 216 220
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -774,8 +775,8 @@ gl_FragCoord origin is upper left
Name 191 "g_tTex3du4"
Name 201 "psout"
Name 213 "flattenTemp"
- Name 216 "Color"
- Name 220 "Depth"
+ Name 216 "@entryPointOutput.Color"
+ Name 220 "@entryPointOutput.Depth"
Name 225 "g_sSamp"
Name 229 "$Global"
MemberName 229($Global) 0 "c1"
@@ -806,8 +807,8 @@ gl_FragCoord origin is upper left
Decorate 166(g_tTex3df4) DescriptorSet 0
Decorate 179(g_tTex3di4) DescriptorSet 0
Decorate 191(g_tTex3du4) DescriptorSet 0
- Decorate 216(Color) Location 0
- Decorate 220(Depth) BuiltIn FragDepth
+ Decorate 216(@entryPointOutput.Color) Location 0
+ Decorate 220(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 225(g_sSamp) DescriptorSet 0
Decorate 225(g_sSamp) Binding 0
MemberDecorate 229($Global) 0 Offset 0
@@ -898,9 +899,9 @@ gl_FragCoord origin is upper left
207: 23(int) Constant 1
208: TypePointer Function 6(float)
215: TypePointer Output 7(fvec4)
- 216(Color): 215(ptr) Variable Output
+216(@entryPointOutput.Color): 215(ptr) Variable Output
219: TypePointer Output 6(float)
- 220(Depth): 219(ptr) Variable Output
+220(@entryPointOutput.Depth): 219(ptr) Variable Output
223: TypeSampler
224: TypePointer UniformConstant 223
225(g_sSamp): 224(ptr) Variable UniformConstant
@@ -917,10 +918,10 @@ gl_FragCoord origin is upper left
Store 213(flattenTemp) 214
217: 205(ptr) AccessChain 213(flattenTemp) 202
218: 7(fvec4) Load 217
- Store 216(Color) 218
+ Store 216(@entryPointOutput.Color) 218
221: 208(ptr) AccessChain 213(flattenTemp) 207
222: 6(float) Load 221
- Store 220(Depth) 222
+ Store 220(@entryPointOutput.Depth) 222
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index 57097a410f9..22d601d382a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -1,31 +1,241 @@
hlsl.getsampleposition.dx10.frag
-ERROR: 0:16: '' : unimplemented: GetSamplePosition
-ERROR: 0:17: '' : unimplemented: GetSamplePosition
-ERROR: 2 compilation errors. No code generated.
-
-
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
-ERROR: node is still EOpNull!
-0:13 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:? Sequence
+0:13 Function Definition: @main(i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:13 Function Parameters:
+0:13 'sample' ( in int)
0:? Sequence
0:16 Sequence
0:16 move second child to first child ( temp 2-component vector of float)
0:16 'r00' ( temp 2-component vector of float)
-0:16 ERROR: Bad aggregation op
- ( temp 2-component vector of float)
-0:16 'g_tTex2dmsf4' ( uniform texture2DMS)
-0:16 Constant:
-0:16 1 (const int)
+0:16 Sequence
+0:16 move second child to first child ( temp uint)
+0:16 '@sampleCount' ( temp uint)
+0:16 imageQuerySamples ( temp uint)
+0:16 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:16 Test condition and select ( temp 2-component vector of float)
+0:16 Condition
+0:16 Compare Equal ( temp bool)
+0:16 '@sampleCount' ( temp uint)
+0:16 Constant:
+0:16 2 (const int)
+0:16 true case
+0:16 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.250000
+0:? 0.250000
+0:? -0.250000
+0:? -0.250000
+0:16 'sample' ( in int)
+0:16 false case
+0:16 Test condition and select ( temp 2-component vector of float)
+0:16 Condition
+0:16 Compare Equal ( temp bool)
+0:16 '@sampleCount' ( temp uint)
+0:16 Constant:
+0:16 4 (const int)
+0:16 true case
+0:16 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? -0.125000
+0:? -0.375000
+0:? 0.375000
+0:? -0.125000
+0:? -0.375000
+0:? 0.125000
+0:? 0.125000
+0:? 0.375000
+0:16 'sample' ( in int)
+0:16 false case
+0:16 Test condition and select ( temp 2-component vector of float)
+0:16 Condition
+0:16 Compare Equal ( temp bool)
+0:16 '@sampleCount' ( temp uint)
+0:16 Constant:
+0:16 8 (const int)
+0:16 true case
+0:16 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.062500
+0:? -0.187500
+0:? -0.062500
+0:? 0.187500
+0:? 0.312500
+0:? 0.062500
+0:? -0.187500
+0:? -0.312500
+0:? -0.312500
+0:? 0.312500
+0:? -0.437500
+0:? -0.062500
+0:? 0.187500
+0:? 0.437500
+0:? 0.437500
+0:? -0.437500
+0:16 'sample' ( in int)
+0:16 false case
+0:16 Test condition and select ( temp 2-component vector of float)
+0:16 Condition
+0:16 Compare Equal ( temp bool)
+0:16 '@sampleCount' ( temp uint)
+0:16 Constant:
+0:16 16 (const int)
+0:16 true case
+0:16 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.062500
+0:? 0.062500
+0:? -0.062500
+0:? -0.187500
+0:? -0.187500
+0:? 0.125000
+0:? 0.250000
+0:? -0.062500
+0:? -0.312500
+0:? -0.125000
+0:? 0.125000
+0:? 0.312500
+0:? 0.312500
+0:? 0.187500
+0:? 0.187500
+0:? -0.312500
+0:? -0.125000
+0:? 0.375000
+0:? 0.000000
+0:? -0.437500
+0:? -0.250000
+0:? -0.375000
+0:? -0.375000
+0:? 0.250000
+0:? -0.500000
+0:? 0.000000
+0:? 0.437500
+0:? -0.250000
+0:? 0.375000
+0:? 0.437500
+0:? -0.437500
+0:? -0.500000
+0:16 'sample' ( in int)
+0:16 false case
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
0:17 Sequence
0:17 move second child to first child ( temp 2-component vector of float)
0:17 'r01' ( temp 2-component vector of float)
-0:17 ERROR: Bad aggregation op
- ( temp 2-component vector of float)
-0:17 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
-0:17 Constant:
-0:17 2 (const int)
+0:17 Sequence
+0:17 move second child to first child ( temp uint)
+0:17 '@sampleCount' ( temp uint)
+0:17 imageQuerySamples ( temp uint)
+0:17 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
+0:17 Test condition and select ( temp 2-component vector of float)
+0:17 Condition
+0:17 Compare Equal ( temp bool)
+0:17 '@sampleCount' ( temp uint)
+0:17 Constant:
+0:17 2 (const int)
+0:17 true case
+0:17 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.250000
+0:? 0.250000
+0:? -0.250000
+0:? -0.250000
+0:17 'sample' ( in int)
+0:17 false case
+0:17 Test condition and select ( temp 2-component vector of float)
+0:17 Condition
+0:17 Compare Equal ( temp bool)
+0:17 '@sampleCount' ( temp uint)
+0:17 Constant:
+0:17 4 (const int)
+0:17 true case
+0:17 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? -0.125000
+0:? -0.375000
+0:? 0.375000
+0:? -0.125000
+0:? -0.375000
+0:? 0.125000
+0:? 0.125000
+0:? 0.375000
+0:17 'sample' ( in int)
+0:17 false case
+0:17 Test condition and select ( temp 2-component vector of float)
+0:17 Condition
+0:17 Compare Equal ( temp bool)
+0:17 '@sampleCount' ( temp uint)
+0:17 Constant:
+0:17 8 (const int)
+0:17 true case
+0:17 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.062500
+0:? -0.187500
+0:? -0.062500
+0:? 0.187500
+0:? 0.312500
+0:? 0.062500
+0:? -0.187500
+0:? -0.312500
+0:? -0.312500
+0:? 0.312500
+0:? -0.437500
+0:? -0.062500
+0:? 0.187500
+0:? 0.437500
+0:? 0.437500
+0:? -0.437500
+0:17 'sample' ( in int)
+0:17 false case
+0:17 Test condition and select ( temp 2-component vector of float)
+0:17 Condition
+0:17 Compare Equal ( temp bool)
+0:17 '@sampleCount' ( temp uint)
+0:17 Constant:
+0:17 16 (const int)
+0:17 true case
+0:17 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.062500
+0:? 0.062500
+0:? -0.062500
+0:? -0.187500
+0:? -0.187500
+0:? 0.125000
+0:? 0.250000
+0:? -0.062500
+0:? -0.312500
+0:? -0.125000
+0:? 0.125000
+0:? 0.312500
+0:? 0.312500
+0:? 0.187500
+0:? 0.187500
+0:? -0.312500
+0:? -0.125000
+0:? 0.375000
+0:? 0.000000
+0:? -0.437500
+0:? -0.250000
+0:? -0.375000
+0:? -0.375000
+0:? 0.250000
+0:? -0.500000
+0:? 0.000000
+0:? 0.437500
+0:? -0.250000
+0:? 0.375000
+0:? 0.437500
+0:? -0.437500
+0:? -0.500000
+0:17 'sample' ( in int)
+0:17 false case
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
0:19 move second child to first child ( temp 4-component vector of float)
0:19 Color: direct index for structure ( temp 4-component vector of float)
0:19 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -48,18 +258,22 @@ ERROR: node is still EOpNull!
0:13 Function Definition: main( ( temp void)
0:13 Function Parameters:
0:? Sequence
+0:13 move second child to first child ( temp int)
+0:? 'sample' ( temp int)
+0:? 'sample' (layout( location=0) flat in int)
0:13 Sequence
0:13 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:13 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:13 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:13 Function Call: @main(i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:? 'sample' ( temp int)
0:13 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:13 Color: direct index for structure ( temp 4-component vector of float)
0:13 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:13 Constant:
0:13 0 (const int)
0:13 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:13 Depth: direct index for structure ( temp float)
0:13 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:13 Constant:
@@ -68,35 +282,251 @@ ERROR: node is still EOpNull!
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
0:? 'g_tTex2dmsf4' ( uniform texture2DMS)
0:? 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0:? 'sample' (layout( location=0) flat in int)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
-ERROR: node is still EOpNull!
-0:13 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:? Sequence
+0:13 Function Definition: @main(i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:13 Function Parameters:
+0:13 'sample' ( in int)
0:? Sequence
0:16 Sequence
0:16 move second child to first child ( temp 2-component vector of float)
0:16 'r00' ( temp 2-component vector of float)
-0:16 ERROR: Bad aggregation op
- ( temp 2-component vector of float)
-0:16 'g_tTex2dmsf4' ( uniform texture2DMS)
-0:16 Constant:
-0:16 1 (const int)
+0:16 Sequence
+0:16 move second child to first child ( temp uint)
+0:16 '@sampleCount' ( temp uint)
+0:16 imageQuerySamples ( temp uint)
+0:16 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:16 Test condition and select ( temp 2-component vector of float)
+0:16 Condition
+0:16 Compare Equal ( temp bool)
+0:16 '@sampleCount' ( temp uint)
+0:16 Constant:
+0:16 2 (const int)
+0:16 true case
+0:16 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.250000
+0:? 0.250000
+0:? -0.250000
+0:? -0.250000
+0:16 'sample' ( in int)
+0:16 false case
+0:16 Test condition and select ( temp 2-component vector of float)
+0:16 Condition
+0:16 Compare Equal ( temp bool)
+0:16 '@sampleCount' ( temp uint)
+0:16 Constant:
+0:16 4 (const int)
+0:16 true case
+0:16 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? -0.125000
+0:? -0.375000
+0:? 0.375000
+0:? -0.125000
+0:? -0.375000
+0:? 0.125000
+0:? 0.125000
+0:? 0.375000
+0:16 'sample' ( in int)
+0:16 false case
+0:16 Test condition and select ( temp 2-component vector of float)
+0:16 Condition
+0:16 Compare Equal ( temp bool)
+0:16 '@sampleCount' ( temp uint)
+0:16 Constant:
+0:16 8 (const int)
+0:16 true case
+0:16 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.062500
+0:? -0.187500
+0:? -0.062500
+0:? 0.187500
+0:? 0.312500
+0:? 0.062500
+0:? -0.187500
+0:? -0.312500
+0:? -0.312500
+0:? 0.312500
+0:? -0.437500
+0:? -0.062500
+0:? 0.187500
+0:? 0.437500
+0:? 0.437500
+0:? -0.437500
+0:16 'sample' ( in int)
+0:16 false case
+0:16 Test condition and select ( temp 2-component vector of float)
+0:16 Condition
+0:16 Compare Equal ( temp bool)
+0:16 '@sampleCount' ( temp uint)
+0:16 Constant:
+0:16 16 (const int)
+0:16 true case
+0:16 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.062500
+0:? 0.062500
+0:? -0.062500
+0:? -0.187500
+0:? -0.187500
+0:? 0.125000
+0:? 0.250000
+0:? -0.062500
+0:? -0.312500
+0:? -0.125000
+0:? 0.125000
+0:? 0.312500
+0:? 0.312500
+0:? 0.187500
+0:? 0.187500
+0:? -0.312500
+0:? -0.125000
+0:? 0.375000
+0:? 0.000000
+0:? -0.437500
+0:? -0.250000
+0:? -0.375000
+0:? -0.375000
+0:? 0.250000
+0:? -0.500000
+0:? 0.000000
+0:? 0.437500
+0:? -0.250000
+0:? 0.375000
+0:? 0.437500
+0:? -0.437500
+0:? -0.500000
+0:16 'sample' ( in int)
+0:16 false case
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
0:17 Sequence
0:17 move second child to first child ( temp 2-component vector of float)
0:17 'r01' ( temp 2-component vector of float)
-0:17 ERROR: Bad aggregation op
- ( temp 2-component vector of float)
-0:17 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
-0:17 Constant:
-0:17 2 (const int)
+0:17 Sequence
+0:17 move second child to first child ( temp uint)
+0:17 '@sampleCount' ( temp uint)
+0:17 imageQuerySamples ( temp uint)
+0:17 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
+0:17 Test condition and select ( temp 2-component vector of float)
+0:17 Condition
+0:17 Compare Equal ( temp bool)
+0:17 '@sampleCount' ( temp uint)
+0:17 Constant:
+0:17 2 (const int)
+0:17 true case
+0:17 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.250000
+0:? 0.250000
+0:? -0.250000
+0:? -0.250000
+0:17 'sample' ( in int)
+0:17 false case
+0:17 Test condition and select ( temp 2-component vector of float)
+0:17 Condition
+0:17 Compare Equal ( temp bool)
+0:17 '@sampleCount' ( temp uint)
+0:17 Constant:
+0:17 4 (const int)
+0:17 true case
+0:17 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? -0.125000
+0:? -0.375000
+0:? 0.375000
+0:? -0.125000
+0:? -0.375000
+0:? 0.125000
+0:? 0.125000
+0:? 0.375000
+0:17 'sample' ( in int)
+0:17 false case
+0:17 Test condition and select ( temp 2-component vector of float)
+0:17 Condition
+0:17 Compare Equal ( temp bool)
+0:17 '@sampleCount' ( temp uint)
+0:17 Constant:
+0:17 8 (const int)
+0:17 true case
+0:17 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.062500
+0:? -0.187500
+0:? -0.062500
+0:? 0.187500
+0:? 0.312500
+0:? 0.062500
+0:? -0.187500
+0:? -0.312500
+0:? -0.312500
+0:? 0.312500
+0:? -0.437500
+0:? -0.062500
+0:? 0.187500
+0:? 0.437500
+0:? 0.437500
+0:? -0.437500
+0:17 'sample' ( in int)
+0:17 false case
+0:17 Test condition and select ( temp 2-component vector of float)
+0:17 Condition
+0:17 Compare Equal ( temp bool)
+0:17 '@sampleCount' ( temp uint)
+0:17 Constant:
+0:17 16 (const int)
+0:17 true case
+0:17 indirect index ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.062500
+0:? 0.062500
+0:? -0.062500
+0:? -0.187500
+0:? -0.187500
+0:? 0.125000
+0:? 0.250000
+0:? -0.062500
+0:? -0.312500
+0:? -0.125000
+0:? 0.125000
+0:? 0.312500
+0:? 0.312500
+0:? 0.187500
+0:? 0.187500
+0:? -0.312500
+0:? -0.125000
+0:? 0.375000
+0:? 0.000000
+0:? -0.437500
+0:? -0.250000
+0:? -0.375000
+0:? -0.375000
+0:? 0.250000
+0:? -0.500000
+0:? 0.000000
+0:? 0.437500
+0:? -0.250000
+0:? 0.375000
+0:? 0.437500
+0:? -0.437500
+0:? -0.500000
+0:17 'sample' ( in int)
+0:17 false case
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
0:19 move second child to first child ( temp 4-component vector of float)
0:19 Color: direct index for structure ( temp 4-component vector of float)
0:19 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -119,18 +549,22 @@ ERROR: node is still EOpNull!
0:13 Function Definition: main( ( temp void)
0:13 Function Parameters:
0:? Sequence
+0:13 move second child to first child ( temp int)
+0:? 'sample' ( temp int)
+0:? 'sample' (layout( location=0) flat in int)
0:13 Sequence
0:13 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:13 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:13 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:13 Function Call: @main(i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:? 'sample' ( temp int)
0:13 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:13 Color: direct index for structure ( temp 4-component vector of float)
0:13 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:13 Constant:
0:13 0 (const int)
0:13 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:13 Depth: direct index for structure ( temp float)
0:13 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:13 Constant:
@@ -139,7 +573,342 @@ ERROR: node is still EOpNull!
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
0:? 'g_tTex2dmsf4' ( uniform texture2DMS)
0:? 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0:? 'sample' (layout( location=0) flat in int)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 221
-SPIR-V is not generated for failed compile or link
+ Capability Shader
+ Capability ImageQuery
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 204 211 215
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 10 "PS_OUTPUT"
+ MemberName 10(PS_OUTPUT) 0 "Color"
+ MemberName 10(PS_OUTPUT) 1 "Depth"
+ Name 13 "@main(i1;"
+ Name 12 "sample"
+ Name 17 "r00"
+ Name 20 "@sampleCount"
+ Name 23 "g_tTex2dmsf4"
+ Name 42 "indexable"
+ Name 65 "indexable"
+ Name 96 "indexable"
+ Name 129 "indexable"
+ Name 138 "r01"
+ Name 139 "@sampleCount"
+ Name 142 "g_tTex2dmsf4a"
+ Name 151 "indexable"
+ Name 161 "indexable"
+ Name 171 "indexable"
+ Name 181 "indexable"
+ Name 190 "psout"
+ Name 202 "sample"
+ Name 204 "sample"
+ Name 206 "flattenTemp"
+ Name 207 "param"
+ Name 211 "@entryPointOutput.Color"
+ Name 215 "@entryPointOutput.Depth"
+ Name 220 "g_sSamp"
+ Decorate 23(g_tTex2dmsf4) DescriptorSet 0
+ Decorate 142(g_tTex2dmsf4a) DescriptorSet 0
+ Decorate 204(sample) Flat
+ Decorate 204(sample) Location 0
+ Decorate 211(@entryPointOutput.Color) Location 0
+ Decorate 215(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 220(g_sSamp) DescriptorSet 0
+ Decorate 220(g_sSamp) Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypePointer Function 6(int)
+ 8: TypeFloat 32
+ 9: TypeVector 8(float) 4
+ 10(PS_OUTPUT): TypeStruct 9(fvec4) 8(float)
+ 11: TypeFunction 10(PS_OUTPUT) 7(ptr)
+ 15: TypeVector 8(float) 2
+ 16: TypePointer Function 15(fvec2)
+ 18: TypeInt 32 0
+ 19: TypePointer Function 18(int)
+ 21: TypeImage 8(float) 2D multi-sampled sampled format:Unknown
+ 22: TypePointer UniformConstant 21
+23(g_tTex2dmsf4): 22(ptr) Variable UniformConstant
+ 28: 6(int) Constant 2
+ 29: TypeBool
+ 33: 18(int) Constant 2
+ 34: TypeArray 15(fvec2) 33
+ 35: 8(float) Constant 1048576000
+ 36: 15(fvec2) ConstantComposite 35 35
+ 37: 8(float) Constant 3196059648
+ 38: 15(fvec2) ConstantComposite 37 37
+ 39: 34 ConstantComposite 36 38
+ 41: TypePointer Function 34
+ 48: 6(int) Constant 4
+ 52: 18(int) Constant 4
+ 53: TypeArray 15(fvec2) 52
+ 54: 8(float) Constant 3187671040
+ 55: 8(float) Constant 3200253952
+ 56: 15(fvec2) ConstantComposite 54 55
+ 57: 8(float) Constant 1052770304
+ 58: 15(fvec2) ConstantComposite 57 54
+ 59: 8(float) Constant 1040187392
+ 60: 15(fvec2) ConstantComposite 55 59
+ 61: 15(fvec2) ConstantComposite 59 57
+ 62: 53 ConstantComposite 56 58 60 61
+ 64: TypePointer Function 53
+ 71: 6(int) Constant 8
+ 75: 18(int) Constant 8
+ 76: TypeArray 15(fvec2) 75
+ 77: 8(float) Constant 1031798784
+ 78: 8(float) Constant 3191865344
+ 79: 15(fvec2) ConstantComposite 77 78
+ 80: 8(float) Constant 3179282432
+ 81: 8(float) Constant 1044381696
+ 82: 15(fvec2) ConstantComposite 80 81
+ 83: 8(float) Constant 1050673152
+ 84: 15(fvec2) ConstantComposite 83 77
+ 85: 8(float) Constant 3198156800
+ 86: 15(fvec2) ConstantComposite 78 85
+ 87: 15(fvec2) ConstantComposite 85 83
+ 88: 8(float) Constant 3202351104
+ 89: 15(fvec2) ConstantComposite 88 80
+ 90: 8(float) Constant 1054867456
+ 91: 15(fvec2) ConstantComposite 81 90
+ 92: 15(fvec2) ConstantComposite 90 88
+ 93: 76 ConstantComposite 79 82 84 86 87 89 91 92
+ 95: TypePointer Function 76
+ 102: 6(int) Constant 16
+ 106: 18(int) Constant 16
+ 107: TypeArray 15(fvec2) 106
+ 108: 15(fvec2) ConstantComposite 77 77
+ 109: 15(fvec2) ConstantComposite 80 78
+ 110: 15(fvec2) ConstantComposite 78 59
+ 111: 15(fvec2) ConstantComposite 35 80
+ 112: 15(fvec2) ConstantComposite 85 54
+ 113: 15(fvec2) ConstantComposite 59 83
+ 114: 15(fvec2) ConstantComposite 83 81
+ 115: 15(fvec2) ConstantComposite 81 85
+ 116: 15(fvec2) ConstantComposite 54 57
+ 117: 8(float) Constant 0
+ 118: 15(fvec2) ConstantComposite 117 88
+ 119: 15(fvec2) ConstantComposite 37 55
+ 120: 15(fvec2) ConstantComposite 55 35
+ 121: 8(float) Constant 3204448256
+ 122: 15(fvec2) ConstantComposite 121 117
+ 123: 15(fvec2) ConstantComposite 90 37
+ 124: 15(fvec2) ConstantComposite 57 90
+ 125: 15(fvec2) ConstantComposite 88 121
+ 126: 107 ConstantComposite 108 109 110 111 112 113 114 115 116 118 119 120 122 123 124 125
+ 128: TypePointer Function 107
+ 133: 15(fvec2) ConstantComposite 117 117
+ 140: TypeImage 8(float) 2D array multi-sampled sampled format:Unknown
+ 141: TypePointer UniformConstant 140
+142(g_tTex2dmsf4a): 141(ptr) Variable UniformConstant
+ 189: TypePointer Function 10(PS_OUTPUT)
+ 191: 6(int) Constant 0
+ 192: 8(float) Constant 1065353216
+ 193: 9(fvec4) ConstantComposite 192 192 192 192
+ 194: TypePointer Function 9(fvec4)
+ 196: 6(int) Constant 1
+ 197: TypePointer Function 8(float)
+ 203: TypePointer Input 6(int)
+ 204(sample): 203(ptr) Variable Input
+ 210: TypePointer Output 9(fvec4)
+211(@entryPointOutput.Color): 210(ptr) Variable Output
+ 214: TypePointer Output 8(float)
+215(@entryPointOutput.Depth): 214(ptr) Variable Output
+ 218: TypeSampler
+ 219: TypePointer UniformConstant 218
+ 220(g_sSamp): 219(ptr) Variable UniformConstant
+ 4(main): 2 Function None 3
+ 5: Label
+ 202(sample): 7(ptr) Variable Function
+206(flattenTemp): 189(ptr) Variable Function
+ 207(param): 7(ptr) Variable Function
+ 205: 6(int) Load 204(sample)
+ Store 202(sample) 205
+ 208: 6(int) Load 202(sample)
+ Store 207(param) 208
+ 209:10(PS_OUTPUT) FunctionCall 13(@main(i1;) 207(param)
+ Store 206(flattenTemp) 209
+ 212: 194(ptr) AccessChain 206(flattenTemp) 191
+ 213: 9(fvec4) Load 212
+ Store 211(@entryPointOutput.Color) 213
+ 216: 197(ptr) AccessChain 206(flattenTemp) 196
+ 217: 8(float) Load 216
+ Store 215(@entryPointOutput.Depth) 217
+ Return
+ FunctionEnd
+ 13(@main(i1;):10(PS_OUTPUT) Function None 11
+ 12(sample): 7(ptr) FunctionParameter
+ 14: Label
+ 17(r00): 16(ptr) Variable Function
+20(@sampleCount): 19(ptr) Variable Function
+ 26: 16(ptr) Variable Function
+ 42(indexable): 41(ptr) Variable Function
+ 46: 16(ptr) Variable Function
+ 65(indexable): 64(ptr) Variable Function
+ 69: 16(ptr) Variable Function
+ 96(indexable): 95(ptr) Variable Function
+ 100: 16(ptr) Variable Function
+ 129(indexable): 128(ptr) Variable Function
+ 138(r01): 16(ptr) Variable Function
+139(@sampleCount): 19(ptr) Variable Function
+ 145: 16(ptr) Variable Function
+ 151(indexable): 41(ptr) Variable Function
+ 155: 16(ptr) Variable Function
+ 161(indexable): 64(ptr) Variable Function
+ 165: 16(ptr) Variable Function
+ 171(indexable): 95(ptr) Variable Function
+ 175: 16(ptr) Variable Function
+ 181(indexable): 128(ptr) Variable Function
+ 190(psout): 189(ptr) Variable Function
+ 24: 21 Load 23(g_tTex2dmsf4)
+ 25: 18(int) ImageQuerySamples 24
+ Store 20(@sampleCount) 25
+ 27: 18(int) Load 20(@sampleCount)
+ 30: 29(bool) IEqual 27 28
+ SelectionMerge 32 None
+ BranchConditional 30 31 45
+ 31: Label
+ 40: 6(int) Load 12(sample)
+ Store 42(indexable) 39
+ 43: 16(ptr) AccessChain 42(indexable) 40
+ 44: 15(fvec2) Load 43
+ Store 26 44
+ Branch 32
+ 45: Label
+ 47: 18(int) Load 20(@sampleCount)
+ 49: 29(bool) IEqual 47 48
+ SelectionMerge 51 None
+ BranchConditional 49 50 68
+ 50: Label
+ 63: 6(int) Load 12(sample)
+ Store 65(indexable) 62
+ 66: 16(ptr) AccessChain 65(indexable) 63
+ 67: 15(fvec2) Load 66
+ Store 46 67
+ Branch 51
+ 68: Label
+ 70: 18(int) Load 20(@sampleCount)
+ 72: 29(bool) IEqual 70 71
+ SelectionMerge 74 None
+ BranchConditional 72 73 99
+ 73: Label
+ 94: 6(int) Load 12(sample)
+ Store 96(indexable) 93
+ 97: 16(ptr) AccessChain 96(indexable) 94
+ 98: 15(fvec2) Load 97
+ Store 69 98
+ Branch 74
+ 99: Label
+ 101: 18(int) Load 20(@sampleCount)
+ 103: 29(bool) IEqual 101 102
+ SelectionMerge 105 None
+ BranchConditional 103 104 132
+ 104: Label
+ 127: 6(int) Load 12(sample)
+ Store 129(indexable) 126
+ 130: 16(ptr) AccessChain 129(indexable) 127
+ 131: 15(fvec2) Load 130
+ Store 100 131
+ Branch 105
+ 132: Label
+ Store 100 133
+ Branch 105
+ 105: Label
+ 134: 15(fvec2) Load 100
+ Store 69 134
+ Branch 74
+ 74: Label
+ 135: 15(fvec2) Load 69
+ Store 46 135
+ Branch 51
+ 51: Label
+ 136: 15(fvec2) Load 46
+ Store 26 136
+ Branch 32
+ 32: Label
+ 137: 15(fvec2) Load 26
+ Store 17(r00) 137
+ 143: 140 Load 142(g_tTex2dmsf4a)
+ 144: 18(int) ImageQuerySamples 143
+ Store 139(@sampleCount) 144
+ 146: 18(int) Load 139(@sampleCount)
+ 147: 29(bool) IEqual 146 28
+ SelectionMerge 149 None
+ BranchConditional 147 148 154
+ 148: Label
+ 150: 6(int) Load 12(sample)
+ Store 151(indexable) 39
+ 152: 16(ptr) AccessChain 151(indexable) 150
+ 153: 15(fvec2) Load 152
+ Store 145 153
+ Branch 149
+ 154: Label
+ 156: 18(int) Load 139(@sampleCount)
+ 157: 29(bool) IEqual 156 48
+ SelectionMerge 159 None
+ BranchConditional 157 158 164
+ 158: Label
+ 160: 6(int) Load 12(sample)
+ Store 161(indexable) 62
+ 162: 16(ptr) AccessChain 161(indexable) 160
+ 163: 15(fvec2) Load 162
+ Store 155 163
+ Branch 159
+ 164: Label
+ 166: 18(int) Load 139(@sampleCount)
+ 167: 29(bool) IEqual 166 71
+ SelectionMerge 169 None
+ BranchConditional 167 168 174
+ 168: Label
+ 170: 6(int) Load 12(sample)
+ Store 171(indexable) 93
+ 172: 16(ptr) AccessChain 171(indexable) 170
+ 173: 15(fvec2) Load 172
+ Store 165 173
+ Branch 169
+ 174: Label
+ 176: 18(int) Load 139(@sampleCount)
+ 177: 29(bool) IEqual 176 102
+ SelectionMerge 179 None
+ BranchConditional 177 178 184
+ 178: Label
+ 180: 6(int) Load 12(sample)
+ Store 181(indexable) 126
+ 182: 16(ptr) AccessChain 181(indexable) 180
+ 183: 15(fvec2) Load 182
+ Store 175 183
+ Branch 179
+ 184: Label
+ Store 175 133
+ Branch 179
+ 179: Label
+ 185: 15(fvec2) Load 175
+ Store 165 185
+ Branch 169
+ 169: Label
+ 186: 15(fvec2) Load 165
+ Store 155 186
+ Branch 159
+ 159: Label
+ 187: 15(fvec2) Load 155
+ Store 145 187
+ Branch 149
+ 149: Label
+ 188: 15(fvec2) Load 145
+ Store 138(r01) 188
+ 195: 194(ptr) AccessChain 190(psout) 191
+ Store 195 193
+ 198: 197(ptr) AccessChain 190(psout) 196
+ Store 198 192
+ 199:10(PS_OUTPUT) Load 190(psout)
+ ReturnValue 199
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.global-const-init.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.global-const-init.frag.out
new file mode 100644
index 00000000000..c76f54aaa5a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.global-const-init.frag.out
@@ -0,0 +1,178 @@
+hlsl.global-const-init.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:6 'bar' ( global 4-component vector of float)
+0:6 foo: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:6 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float foo})
+0:6 Constant:
+0:6 0 (const uint)
+0:8 Sequence
+0:8 move second child to first child ( temp 2-element array of 2-component vector of float)
+0:8 'a1' ( global 2-element array of 2-component vector of float)
+0:8 Construct vec2 ( temp 2-element array of 2-component vector of float)
+0:8 Constant:
+0:8 1.000000
+0:8 2.000000
+0:8 Construct vec2 ( temp 2-component vector of float)
+0:8 direct index ( temp float)
+0:8 foo: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:8 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float foo})
+0:8 Constant:
+0:8 0 (const uint)
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 4.000000
+0:12 Function Definition: @main( ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? Sequence
+0:13 Branch: Return with expression
+0:13 'bar' ( global 4-component vector of float)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:12 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float foo})
+0:? 'bar' ( global 4-component vector of float)
+0:? 'a1' ( global 2-element array of 2-component vector of float)
+0:? 'a2' ( const 2-element array of 2-component vector of float)
+0:? 5.000000
+0:? 6.000000
+0:? 7.000000
+0:? 8.000000
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:6 'bar' ( global 4-component vector of float)
+0:6 foo: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:6 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float foo})
+0:6 Constant:
+0:6 0 (const uint)
+0:8 Sequence
+0:8 move second child to first child ( temp 2-element array of 2-component vector of float)
+0:8 'a1' ( global 2-element array of 2-component vector of float)
+0:8 Construct vec2 ( temp 2-element array of 2-component vector of float)
+0:8 Constant:
+0:8 1.000000
+0:8 2.000000
+0:8 Construct vec2 ( temp 2-component vector of float)
+0:8 direct index ( temp float)
+0:8 foo: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:8 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float foo})
+0:8 Constant:
+0:8 0 (const uint)
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 4.000000
+0:12 Function Definition: @main( ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? Sequence
+0:13 Branch: Return with expression
+0:13 'bar' ( global 4-component vector of float)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:12 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float foo})
+0:? 'bar' ( global 4-component vector of float)
+0:? 'a1' ( global 2-element array of 2-component vector of float)
+0:? 'a2' ( const 2-element array of 2-component vector of float)
+0:? 5.000000
+0:? 6.000000
+0:? 7.000000
+0:? 8.000000
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 50
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 41
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 12 "bar"
+ Name 13 "CB"
+ MemberName 13(CB) 0 "foo"
+ Name 15 ""
+ Name 26 "a1"
+ Name 41 "@entryPointOutput"
+ MemberDecorate 13(CB) 0 Offset 0
+ Decorate 13(CB) Block
+ Decorate 15 DescriptorSet 0
+ Decorate 41(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypePointer Private 7(fvec4)
+ 12(bar): 11(ptr) Variable Private
+ 13(CB): TypeStruct 7(fvec4)
+ 14: TypePointer Uniform 13(CB)
+ 15: 14(ptr) Variable Uniform
+ 16: TypeInt 32 1
+ 17: 16(int) Constant 0
+ 18: TypePointer Uniform 7(fvec4)
+ 21: TypeVector 6(float) 2
+ 22: TypeInt 32 0
+ 23: 22(int) Constant 2
+ 24: TypeArray 21(fvec2) 23
+ 25: TypePointer Private 24
+ 26(a1): 25(ptr) Variable Private
+ 27: 6(float) Constant 1065353216
+ 28: 6(float) Constant 1073741824
+ 29: 21(fvec2) ConstantComposite 27 28
+ 30: 22(int) Constant 0
+ 31: TypePointer Uniform 6(float)
+ 34: 6(float) Constant 1082130432
+ 40: TypePointer Output 7(fvec4)
+41(@entryPointOutput): 40(ptr) Variable Output
+ 43: 6(float) Constant 1084227584
+ 44: 6(float) Constant 1086324736
+ 45: 21(fvec2) ConstantComposite 43 44
+ 46: 6(float) Constant 1088421888
+ 47: 6(float) Constant 1090519040
+ 48: 21(fvec2) ConstantComposite 46 47
+ 49: 24 ConstantComposite 45 48
+ 4(main): 2 Function None 3
+ 5: Label
+ 19: 18(ptr) AccessChain 15 17
+ 20: 7(fvec4) Load 19
+ Store 12(bar) 20
+ 32: 31(ptr) AccessChain 15 17 30
+ 33: 6(float) Load 32
+ 35: 21(fvec2) CompositeConstruct 33 34
+ 36: 24 CompositeConstruct 29 35
+ Store 26(a1) 36
+ 42: 7(fvec4) FunctionCall 9(@main()
+ Store 41(@entryPointOutput) 42
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 37: 7(fvec4) Load 12(bar)
+ ReturnValue 37
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gs-hs-mix.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gs-hs-mix.tesc.out
new file mode 100644
index 00000000000..92153c53ab2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gs-hs-mix.tesc.out
@@ -0,0 +1,1158 @@
+hlsl.gs-hs-mix.tesc
+Shader version: 500
+vertices = 3
+input primitive = triangles
+vertex spacing = fractional_odd_spacing
+triangle order = ccw
+0:? Sequence
+0:31 Function Definition: HSPatchConstant(struct-HSInput-vf3-vf31[3]; ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:31 Function Parameters:
+0:31 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? Sequence
+0:32 Sequence
+0:32 move second child to first child ( temp 3-component vector of float)
+0:32 'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:32 tess_factor: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:32 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:32 Constant:
+0:32 6 (const uint)
+0:33 Sequence
+0:33 move second child to first child ( temp float)
+0:33 'roundedInsideTessFactor' ( temp float)
+0:33 Constant:
+0:33 3.000000
+0:34 Sequence
+0:34 move second child to first child ( temp float)
+0:34 'insideTessFactor' ( temp float)
+0:34 Constant:
+0:34 1.000000
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:39 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( temp float)
+0:39 'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:39 Constant:
+0:39 0 (const int)
+0:40 move second child to first child ( temp float)
+0:40 direct index ( temp float)
+0:40 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:40 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 direct index ( temp float)
+0:40 'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:40 Constant:
+0:40 1 (const int)
+0:41 move second child to first child ( temp float)
+0:41 direct index ( temp float)
+0:41 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:41 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 direct index ( temp float)
+0:41 'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:41 Constant:
+0:41 2 (const int)
+0:42 move second child to first child ( temp float)
+0:42 InsideTessFactor: direct index for structure ( temp float)
+0:42 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:42 Constant:
+0:42 1 (const int)
+0:42 'roundedInsideTessFactor' ( temp float)
+0:45 move second child to first child ( temp 3-component vector of float)
+0:45 direct index ( temp 3-component vector of float)
+0:45 NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:45 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 NormalWS: direct index for structure ( temp 3-component vector of float)
+0:45 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:45 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:46 move second child to first child ( temp 3-component vector of float)
+0:46 direct index ( temp 3-component vector of float)
+0:46 NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:46 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 NormalWS: direct index for structure ( temp 3-component vector of float)
+0:46 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:46 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:47 move second child to first child ( temp 3-component vector of float)
+0:47 direct index ( temp 3-component vector of float)
+0:47 NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:47 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:47 Constant:
+0:47 2 (const int)
+0:47 Constant:
+0:47 2 (const int)
+0:47 NormalWS: direct index for structure ( temp 3-component vector of float)
+0:47 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:47 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:47 Constant:
+0:47 2 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:49 Branch: Return with expression
+0:49 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:61 Function Definition: @HSMain(struct-HSInput-vf3-vf31[3];u1; ( temp structure{ temp 3-component vector of float PositionWS})
+0:61 Function Parameters:
+0:61 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:61 'id' ( in uint)
+0:? Sequence
+0:63 move second child to first child ( temp 3-component vector of float)
+0:63 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:63 'output' ( temp structure{ temp 3-component vector of float PositionWS})
+0:63 Constant:
+0:63 0 (const int)
+0:63 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:63 indirect index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:63 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:63 'id' ( in uint)
+0:63 Constant:
+0:63 0 (const int)
+0:64 Branch: Return with expression
+0:64 'output' ( temp structure{ temp 3-component vector of float PositionWS})
+0:61 Function Definition: HSMain( ( temp void)
+0:61 Function Parameters:
+0:? Sequence
+0:61 move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? 'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? 'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:61 move second child to first child ( temp uint)
+0:? 'id' ( temp uint)
+0:? 'id' ( in uint InvocationID)
+0:61 move second child to first child ( temp structure{ temp 3-component vector of float PositionWS})
+0:61 indirect index (layout( location=0) out structure{ temp 3-component vector of float PositionWS})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float PositionWS})
+0:? 'id' ( in uint InvocationID)
+0:61 Function Call: @HSMain(struct-HSInput-vf3-vf31[3];u1; ( temp structure{ temp 3-component vector of float PositionWS})
+0:? 'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? 'id' ( temp uint)
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'id' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Function Call: HSPatchConstant(struct-HSInput-vf3-vf31[3]; ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? 'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 2 (const int)
+0:? direct index ( temp float)
+0:? EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 2 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelInner)
+0:? '@patchConstantOutput.InsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:? Constant:
+0:? 0 (const int)
+0:? InsideTessFactor: direct index for structure ( temp float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp 3-element array of 3-component vector of float)
+0:? NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:? '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 0 (const int)
+0:? NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 2 (const int)
+0:84 Function Definition: GSMain(struct-GSVertexInput-vf3-vf31[3];struct-GSVertexOutput-vf41; ( temp void)
+0:84 Function Parameters:
+0:84 'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:84 'output' ( out structure{ temp 4-component vector of float PositionCS})
+0:? Sequence
+0:86 Sequence
+0:86 move second child to first child ( temp 3-component vector of float)
+0:86 'P0' ( temp 3-component vector of float)
+0:86 vector swizzle ( temp 3-component vector of float)
+0:86 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:86 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:86 'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:87 Sequence
+0:87 move second child to first child ( temp 3-component vector of float)
+0:87 'P1' ( temp 3-component vector of float)
+0:87 vector swizzle ( temp 3-component vector of float)
+0:87 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:87 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:87 'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 2 (const int)
+0:88 Sequence
+0:88 move second child to first child ( temp 3-component vector of float)
+0:88 'P2' ( temp 3-component vector of float)
+0:88 vector swizzle ( temp 3-component vector of float)
+0:88 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:88 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:88 'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Sequence
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:92 add second child into first child ( temp float)
+0:92 direct index ( temp float)
+0:92 'P0' ( temp 3-component vector of float)
+0:92 Constant:
+0:92 2 (const int)
+0:92 Constant:
+0:92 0.001000
+0:93 add second child into first child ( temp float)
+0:93 direct index ( temp float)
+0:93 'P1' ( temp 3-component vector of float)
+0:93 Constant:
+0:93 2 (const int)
+0:93 Constant:
+0:93 0.001000
+0:94 add second child into first child ( temp float)
+0:94 direct index ( temp float)
+0:94 'P2' ( temp 3-component vector of float)
+0:94 Constant:
+0:94 2 (const int)
+0:94 Constant:
+0:94 0.001000
+0:95 Sequence
+0:95 move second child to first child ( temp 4-component vector of float)
+0:95 'Q0' ( temp 4-component vector of float)
+0:95 vector-times-matrix ( temp 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:95 'P0' ( temp 3-component vector of float)
+0:95 Constant:
+0:95 1.000000
+0:95 proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:95 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:95 Constant:
+0:95 1 (const uint)
+0:96 Sequence
+0:96 move second child to first child ( temp 4-component vector of float)
+0:96 'Q1' ( temp 4-component vector of float)
+0:96 vector-times-matrix ( temp 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:96 'P1' ( temp 3-component vector of float)
+0:96 Constant:
+0:96 1.000000
+0:96 proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:96 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:96 Constant:
+0:96 1 (const uint)
+0:97 Sequence
+0:97 move second child to first child ( temp 4-component vector of float)
+0:97 'Q2' ( temp 4-component vector of float)
+0:97 vector-times-matrix ( temp 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:97 'P2' ( temp 3-component vector of float)
+0:97 Constant:
+0:97 1.000000
+0:97 proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:97 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:97 Constant:
+0:97 1 (const uint)
+0:100 move second child to first child ( temp 4-component vector of float)
+0:100 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:100 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:100 Constant:
+0:100 0 (const int)
+0:100 'Q0' ( temp 4-component vector of float)
+0:101 Constant:
+0:101 0.000000
+0:102 move second child to first child ( temp 4-component vector of float)
+0:102 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:102 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:102 Constant:
+0:102 0 (const int)
+0:102 'Q1' ( temp 4-component vector of float)
+0:103 Constant:
+0:103 0.000000
+0:104 Constant:
+0:104 0.000000
+0:107 move second child to first child ( temp 4-component vector of float)
+0:107 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:107 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:107 Constant:
+0:107 0 (const int)
+0:107 'Q1' ( temp 4-component vector of float)
+0:108 Constant:
+0:108 0.000000
+0:109 move second child to first child ( temp 4-component vector of float)
+0:109 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:109 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:109 Constant:
+0:109 0 (const int)
+0:109 'Q2' ( temp 4-component vector of float)
+0:110 Constant:
+0:110 0.000000
+0:111 Constant:
+0:111 0.000000
+0:114 move second child to first child ( temp 4-component vector of float)
+0:114 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:114 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:114 Constant:
+0:114 0 (const int)
+0:114 'Q2' ( temp 4-component vector of float)
+0:115 Constant:
+0:115 0.000000
+0:116 move second child to first child ( temp 4-component vector of float)
+0:116 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:116 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:116 Constant:
+0:116 0 (const int)
+0:116 'Q0' ( temp 4-component vector of float)
+0:117 Constant:
+0:117 0.000000
+0:118 Constant:
+0:118 0.000000
+0:? Linker Objects
+0:? 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float PositionWS})
+0:? 'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? 'id' ( in uint InvocationID)
+0:? '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.InsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:? '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+input primitive = triangles
+vertex spacing = fractional_odd_spacing
+triangle order = ccw
+0:? Sequence
+0:31 Function Definition: HSPatchConstant(struct-HSInput-vf3-vf31[3]; ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:31 Function Parameters:
+0:31 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? Sequence
+0:32 Sequence
+0:32 move second child to first child ( temp 3-component vector of float)
+0:32 'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:32 tess_factor: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:32 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:32 Constant:
+0:32 6 (const uint)
+0:33 Sequence
+0:33 move second child to first child ( temp float)
+0:33 'roundedInsideTessFactor' ( temp float)
+0:33 Constant:
+0:33 3.000000
+0:34 Sequence
+0:34 move second child to first child ( temp float)
+0:34 'insideTessFactor' ( temp float)
+0:34 Constant:
+0:34 1.000000
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:39 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( temp float)
+0:39 'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:39 Constant:
+0:39 0 (const int)
+0:40 move second child to first child ( temp float)
+0:40 direct index ( temp float)
+0:40 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:40 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 direct index ( temp float)
+0:40 'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:40 Constant:
+0:40 1 (const int)
+0:41 move second child to first child ( temp float)
+0:41 direct index ( temp float)
+0:41 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:41 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 direct index ( temp float)
+0:41 'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:41 Constant:
+0:41 2 (const int)
+0:42 move second child to first child ( temp float)
+0:42 InsideTessFactor: direct index for structure ( temp float)
+0:42 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:42 Constant:
+0:42 1 (const int)
+0:42 'roundedInsideTessFactor' ( temp float)
+0:45 move second child to first child ( temp 3-component vector of float)
+0:45 direct index ( temp 3-component vector of float)
+0:45 NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:45 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 NormalWS: direct index for structure ( temp 3-component vector of float)
+0:45 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:45 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:46 move second child to first child ( temp 3-component vector of float)
+0:46 direct index ( temp 3-component vector of float)
+0:46 NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:46 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 NormalWS: direct index for structure ( temp 3-component vector of float)
+0:46 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:46 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:47 move second child to first child ( temp 3-component vector of float)
+0:47 direct index ( temp 3-component vector of float)
+0:47 NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:47 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:47 Constant:
+0:47 2 (const int)
+0:47 Constant:
+0:47 2 (const int)
+0:47 NormalWS: direct index for structure ( temp 3-component vector of float)
+0:47 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:47 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:47 Constant:
+0:47 2 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:49 Branch: Return with expression
+0:49 'result' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:61 Function Definition: @HSMain(struct-HSInput-vf3-vf31[3];u1; ( temp structure{ temp 3-component vector of float PositionWS})
+0:61 Function Parameters:
+0:61 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:61 'id' ( in uint)
+0:? Sequence
+0:63 move second child to first child ( temp 3-component vector of float)
+0:63 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:63 'output' ( temp structure{ temp 3-component vector of float PositionWS})
+0:63 Constant:
+0:63 0 (const int)
+0:63 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:63 indirect index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:63 'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:63 'id' ( in uint)
+0:63 Constant:
+0:63 0 (const int)
+0:64 Branch: Return with expression
+0:64 'output' ( temp structure{ temp 3-component vector of float PositionWS})
+0:61 Function Definition: HSMain( ( temp void)
+0:61 Function Parameters:
+0:? Sequence
+0:61 move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? 'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? 'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:61 move second child to first child ( temp uint)
+0:? 'id' ( temp uint)
+0:? 'id' ( in uint InvocationID)
+0:61 move second child to first child ( temp structure{ temp 3-component vector of float PositionWS})
+0:61 indirect index (layout( location=0) out structure{ temp 3-component vector of float PositionWS})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float PositionWS})
+0:? 'id' ( in uint InvocationID)
+0:61 Function Call: @HSMain(struct-HSInput-vf3-vf31[3];u1; ( temp structure{ temp 3-component vector of float PositionWS})
+0:? 'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? 'id' ( temp uint)
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'id' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Function Call: HSPatchConstant(struct-HSInput-vf3-vf31[3]; ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? 'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 2 (const int)
+0:? direct index ( temp float)
+0:? EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 2 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelInner)
+0:? '@patchConstantOutput.InsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:? Constant:
+0:? 0 (const int)
+0:? InsideTessFactor: direct index for structure ( temp float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp 3-element array of 3-component vector of float)
+0:? NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:? '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 0 (const int)
+0:? NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor, temp float InsideTessFactor, temp 3-element array of 3-component vector of float NormalWS})
+0:? Constant:
+0:? 2 (const int)
+0:84 Function Definition: GSMain(struct-GSVertexInput-vf3-vf31[3];struct-GSVertexOutput-vf41; ( temp void)
+0:84 Function Parameters:
+0:84 'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:84 'output' ( out structure{ temp 4-component vector of float PositionCS})
+0:? Sequence
+0:86 Sequence
+0:86 move second child to first child ( temp 3-component vector of float)
+0:86 'P0' ( temp 3-component vector of float)
+0:86 vector swizzle ( temp 3-component vector of float)
+0:86 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:86 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:86 'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:87 Sequence
+0:87 move second child to first child ( temp 3-component vector of float)
+0:87 'P1' ( temp 3-component vector of float)
+0:87 vector swizzle ( temp 3-component vector of float)
+0:87 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:87 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:87 'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 2 (const int)
+0:88 Sequence
+0:88 move second child to first child ( temp 3-component vector of float)
+0:88 'P2' ( temp 3-component vector of float)
+0:88 vector swizzle ( temp 3-component vector of float)
+0:88 PositionWS: direct index for structure ( temp 3-component vector of float)
+0:88 direct index ( temp structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:88 'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Sequence
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:92 add second child into first child ( temp float)
+0:92 direct index ( temp float)
+0:92 'P0' ( temp 3-component vector of float)
+0:92 Constant:
+0:92 2 (const int)
+0:92 Constant:
+0:92 0.001000
+0:93 add second child into first child ( temp float)
+0:93 direct index ( temp float)
+0:93 'P1' ( temp 3-component vector of float)
+0:93 Constant:
+0:93 2 (const int)
+0:93 Constant:
+0:93 0.001000
+0:94 add second child into first child ( temp float)
+0:94 direct index ( temp float)
+0:94 'P2' ( temp 3-component vector of float)
+0:94 Constant:
+0:94 2 (const int)
+0:94 Constant:
+0:94 0.001000
+0:95 Sequence
+0:95 move second child to first child ( temp 4-component vector of float)
+0:95 'Q0' ( temp 4-component vector of float)
+0:95 vector-times-matrix ( temp 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:95 'P0' ( temp 3-component vector of float)
+0:95 Constant:
+0:95 1.000000
+0:95 proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:95 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:95 Constant:
+0:95 1 (const uint)
+0:96 Sequence
+0:96 move second child to first child ( temp 4-component vector of float)
+0:96 'Q1' ( temp 4-component vector of float)
+0:96 vector-times-matrix ( temp 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:96 'P1' ( temp 3-component vector of float)
+0:96 Constant:
+0:96 1.000000
+0:96 proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:96 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:96 Constant:
+0:96 1 (const uint)
+0:97 Sequence
+0:97 move second child to first child ( temp 4-component vector of float)
+0:97 'Q2' ( temp 4-component vector of float)
+0:97 vector-times-matrix ( temp 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:97 'P2' ( temp 3-component vector of float)
+0:97 Constant:
+0:97 1.000000
+0:97 proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:97 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:97 Constant:
+0:97 1 (const uint)
+0:100 move second child to first child ( temp 4-component vector of float)
+0:100 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:100 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:100 Constant:
+0:100 0 (const int)
+0:100 'Q0' ( temp 4-component vector of float)
+0:101 Constant:
+0:101 0.000000
+0:102 move second child to first child ( temp 4-component vector of float)
+0:102 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:102 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:102 Constant:
+0:102 0 (const int)
+0:102 'Q1' ( temp 4-component vector of float)
+0:103 Constant:
+0:103 0.000000
+0:104 Constant:
+0:104 0.000000
+0:107 move second child to first child ( temp 4-component vector of float)
+0:107 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:107 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:107 Constant:
+0:107 0 (const int)
+0:107 'Q1' ( temp 4-component vector of float)
+0:108 Constant:
+0:108 0.000000
+0:109 move second child to first child ( temp 4-component vector of float)
+0:109 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:109 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:109 Constant:
+0:109 0 (const int)
+0:109 'Q2' ( temp 4-component vector of float)
+0:110 Constant:
+0:110 0.000000
+0:111 Constant:
+0:111 0.000000
+0:114 move second child to first child ( temp 4-component vector of float)
+0:114 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:114 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:114 Constant:
+0:114 0 (const int)
+0:114 'Q2' ( temp 4-component vector of float)
+0:115 Constant:
+0:115 0.000000
+0:116 move second child to first child ( temp 4-component vector of float)
+0:116 PositionCS: direct index for structure ( temp 4-component vector of float)
+0:116 'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:116 Constant:
+0:116 0 (const int)
+0:116 'Q0' ( temp 4-component vector of float)
+0:117 Constant:
+0:117 0.000000
+0:118 Constant:
+0:118 0.000000
+0:? Linker Objects
+0:? 'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float PositionWS})
+0:? 'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float PositionWS, temp 3-component vector of float NormalWS})
+0:? 'id' ( in uint InvocationID)
+0:? '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.InsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:? '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 216
+
+ Capability Tessellation
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint TessellationControl 4 "HSMain" 97 101 105 126 139 145
+ ExecutionMode 4 OutputVertices 3
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 SpacingFractionalOdd
+ ExecutionMode 4 VertexOrderCcw
+ Source HLSL 500
+ Name 4 "HSMain"
+ Name 8 "HSInput"
+ MemberName 8(HSInput) 0 "PositionWS"
+ MemberName 8(HSInput) 1 "NormalWS"
+ Name 15 "HSTrianglePatchConstant"
+ MemberName 15(HSTrianglePatchConstant) 0 "EdgeTessFactor"
+ MemberName 15(HSTrianglePatchConstant) 1 "InsideTessFactor"
+ MemberName 15(HSTrianglePatchConstant) 2 "NormalWS"
+ Name 18 "HSPatchConstant(struct-HSInput-vf3-vf31[3];"
+ Name 17 "patch"
+ Name 21 "HSOutput"
+ MemberName 21(HSOutput) 0 "PositionWS"
+ Name 25 "@HSMain(struct-HSInput-vf3-vf31[3];u1;"
+ Name 23 "patch"
+ Name 24 "id"
+ Name 27 "GSVertexInput"
+ MemberName 27(GSVertexInput) 0 "PositionWS"
+ MemberName 27(GSVertexInput) 1 "NormalWS"
+ Name 31 "GSVertexOutput"
+ MemberName 31(GSVertexOutput) 0 "PositionCS"
+ Name 36 "GSMain(struct-GSVertexInput-vf3-vf31[3];struct-GSVertexOutput-vf41;"
+ Name 34 "input"
+ Name 35 "output"
+ Name 39 "roundedEdgeTessFactor"
+ Name 42 "UniformBlock0"
+ MemberName 42(UniformBlock0) 0 "model_view_matrix"
+ MemberName 42(UniformBlock0) 1 "proj_matrix"
+ MemberName 42(UniformBlock0) 2 "model_view_proj_matrix"
+ MemberName 42(UniformBlock0) 3 "normal_matrix"
+ MemberName 42(UniformBlock0) 4 "color"
+ MemberName 42(UniformBlock0) 5 "view_dir"
+ MemberName 42(UniformBlock0) 6 "tess_factor"
+ Name 44 ""
+ Name 51 "roundedInsideTessFactor"
+ Name 53 "insideTessFactor"
+ Name 56 "result"
+ Name 87 "output"
+ Name 95 "patch"
+ Name 97 "patch"
+ Name 99 "id"
+ Name 101 "id"
+ Name 105 "@entryPointOutput"
+ Name 107 "param"
+ Name 109 "param"
+ Name 119 "@patchConstantResult"
+ Name 120 "param"
+ Name 126 "@patchConstantOutput.EdgeTessFactor"
+ Name 139 "@patchConstantOutput.InsideTessFactor"
+ Name 143 "HSTrianglePatchConstant"
+ MemberName 143(HSTrianglePatchConstant) 0 "NormalWS"
+ Name 145 "@patchConstantOutput"
+ Name 151 "P0"
+ Name 154 "P1"
+ Name 157 "P2"
+ Name 174 "Q0"
+ Name 184 "Q1"
+ Name 193 "Q2"
+ Name 202 "vertex"
+ MemberDecorate 42(UniformBlock0) 0 RowMajor
+ MemberDecorate 42(UniformBlock0) 0 Offset 0
+ MemberDecorate 42(UniformBlock0) 0 MatrixStride 16
+ MemberDecorate 42(UniformBlock0) 1 RowMajor
+ MemberDecorate 42(UniformBlock0) 1 Offset 64
+ MemberDecorate 42(UniformBlock0) 1 MatrixStride 16
+ MemberDecorate 42(UniformBlock0) 2 RowMajor
+ MemberDecorate 42(UniformBlock0) 2 Offset 128
+ MemberDecorate 42(UniformBlock0) 2 MatrixStride 16
+ MemberDecorate 42(UniformBlock0) 3 RowMajor
+ MemberDecorate 42(UniformBlock0) 3 Offset 192
+ MemberDecorate 42(UniformBlock0) 3 MatrixStride 16
+ MemberDecorate 42(UniformBlock0) 4 Offset 240
+ MemberDecorate 42(UniformBlock0) 5 Offset 256
+ MemberDecorate 42(UniformBlock0) 6 Offset 272
+ Decorate 42(UniformBlock0) Block
+ Decorate 44 DescriptorSet 0
+ Decorate 44 Binding 0
+ Decorate 97(patch) Location 0
+ Decorate 101(id) BuiltIn InvocationId
+ Decorate 105(@entryPointOutput) Location 0
+ Decorate 126(@patchConstantOutput.EdgeTessFactor) Patch
+ Decorate 126(@patchConstantOutput.EdgeTessFactor) BuiltIn TessLevelOuter
+ Decorate 139(@patchConstantOutput.InsideTessFactor) Patch
+ Decorate 139(@patchConstantOutput.InsideTessFactor) BuiltIn TessLevelInner
+ MemberDecorate 143(HSTrianglePatchConstant) 0 Patch
+ Decorate 145(@patchConstantOutput) Patch
+ Decorate 145(@patchConstantOutput) Location 1
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 3
+ 8(HSInput): TypeStruct 7(fvec3) 7(fvec3)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 3
+ 11: TypeArray 8(HSInput) 10
+ 12: TypePointer Function 11
+ 13: TypeArray 6(float) 10
+ 14: TypeArray 7(fvec3) 10
+15(HSTrianglePatchConstant): TypeStruct 13 6(float) 14
+ 16: TypeFunction 15(HSTrianglePatchConstant) 12(ptr)
+ 20: TypePointer Function 9(int)
+ 21(HSOutput): TypeStruct 7(fvec3)
+ 22: TypeFunction 21(HSOutput) 12(ptr) 20(ptr)
+27(GSVertexInput): TypeStruct 7(fvec3) 7(fvec3)
+ 28: TypeArray 27(GSVertexInput) 10
+ 29: TypePointer Function 28
+ 30: TypeVector 6(float) 4
+31(GSVertexOutput): TypeStruct 30(fvec4)
+ 32: TypePointer Function 31(GSVertexOutput)
+ 33: TypeFunction 2 29(ptr) 32(ptr)
+ 38: TypePointer Function 7(fvec3)
+ 40: TypeMatrix 30(fvec4) 4
+ 41: TypeMatrix 7(fvec3) 3
+42(UniformBlock0): TypeStruct 40 40 40 41 7(fvec3) 7(fvec3) 7(fvec3)
+ 43: TypePointer Uniform 42(UniformBlock0)
+ 44: 43(ptr) Variable Uniform
+ 45: TypeInt 32 1
+ 46: 45(int) Constant 6
+ 47: TypePointer Uniform 7(fvec3)
+ 50: TypePointer Function 6(float)
+ 52: 6(float) Constant 1077936128
+ 54: 6(float) Constant 1065353216
+ 55: TypePointer Function 15(HSTrianglePatchConstant)
+ 57: 45(int) Constant 0
+ 58: 9(int) Constant 0
+ 62: 45(int) Constant 1
+ 63: 9(int) Constant 1
+ 67: 45(int) Constant 2
+ 68: 9(int) Constant 2
+ 86: TypePointer Function 21(HSOutput)
+ 96: TypePointer Input 11
+ 97(patch): 96(ptr) Variable Input
+ 100: TypePointer Input 9(int)
+ 101(id): 100(ptr) Variable Input
+ 103: TypeArray 21(HSOutput) 10
+ 104: TypePointer Output 103
+105(@entryPointOutput): 104(ptr) Variable Output
+ 112: TypePointer Output 21(HSOutput)
+ 115: TypeBool
+ 123: 9(int) Constant 4
+ 124: TypeArray 6(float) 123
+ 125: TypePointer Output 124
+126(@patchConstantOutput.EdgeTessFactor): 125(ptr) Variable Output
+ 129: TypePointer Output 6(float)
+ 137: TypeArray 6(float) 68
+ 138: TypePointer Output 137
+139(@patchConstantOutput.InsideTessFactor): 138(ptr) Variable Output
+143(HSTrianglePatchConstant): TypeStruct 14
+ 144: TypePointer Output 143(HSTrianglePatchConstant)
+145(@patchConstantOutput): 144(ptr) Variable Output
+ 146: TypePointer Function 14
+ 149: TypePointer Output 14
+ 160: 6(float) Constant 981668463
+ 173: TypePointer Function 30(fvec4)
+ 180: TypePointer Uniform 40
+ 205: 6(float) Constant 0
+ 4(HSMain): 2 Function None 3
+ 5: Label
+ 95(patch): 12(ptr) Variable Function
+ 99(id): 20(ptr) Variable Function
+ 107(param): 12(ptr) Variable Function
+ 109(param): 20(ptr) Variable Function
+119(@patchConstantResult): 55(ptr) Variable Function
+ 120(param): 12(ptr) Variable Function
+ 98: 11 Load 97(patch)
+ Store 95(patch) 98
+ 102: 9(int) Load 101(id)
+ Store 99(id) 102
+ 106: 9(int) Load 101(id)
+ 108: 11 Load 95(patch)
+ Store 107(param) 108
+ 110: 9(int) Load 99(id)
+ Store 109(param) 110
+ 111:21(HSOutput) FunctionCall 25(@HSMain(struct-HSInput-vf3-vf31[3];u1;) 107(param) 109(param)
+ 113: 112(ptr) AccessChain 105(@entryPointOutput) 106
+ Store 113 111
+ ControlBarrier 68 63 58
+ 114: 9(int) Load 101(id)
+ 116: 115(bool) IEqual 114 57
+ SelectionMerge 118 None
+ BranchConditional 116 117 118
+ 117: Label
+ 121: 11 Load 95(patch)
+ Store 120(param) 121
+ 122:15(HSTrianglePatchConstant) FunctionCall 18(HSPatchConstant(struct-HSInput-vf3-vf31[3];) 120(param)
+ Store 119(@patchConstantResult) 122
+ 127: 50(ptr) AccessChain 119(@patchConstantResult) 57 57
+ 128: 6(float) Load 127
+ 130: 129(ptr) AccessChain 126(@patchConstantOutput.EdgeTessFactor) 57
+ Store 130 128
+ 131: 50(ptr) AccessChain 119(@patchConstantResult) 57 62
+ 132: 6(float) Load 131
+ 133: 129(ptr) AccessChain 126(@patchConstantOutput.EdgeTessFactor) 62
+ Store 133 132
+ 134: 50(ptr) AccessChain 119(@patchConstantResult) 57 67
+ 135: 6(float) Load 134
+ 136: 129(ptr) AccessChain 126(@patchConstantOutput.EdgeTessFactor) 67
+ Store 136 135
+ 140: 50(ptr) AccessChain 119(@patchConstantResult) 62
+ 141: 6(float) Load 140
+ 142: 129(ptr) AccessChain 139(@patchConstantOutput.InsideTessFactor) 57
+ Store 142 141
+ 147: 146(ptr) AccessChain 119(@patchConstantResult) 67
+ 148: 14 Load 147
+ 150: 149(ptr) AccessChain 145(@patchConstantOutput) 57
+ Store 150 148
+ Branch 118
+ 118: Label
+ Return
+ FunctionEnd
+18(HSPatchConstant(struct-HSInput-vf3-vf31[3];):15(HSTrianglePatchConstant) Function None 16
+ 17(patch): 12(ptr) FunctionParameter
+ 19: Label
+39(roundedEdgeTessFactor): 38(ptr) Variable Function
+51(roundedInsideTessFactor): 50(ptr) Variable Function
+53(insideTessFactor): 50(ptr) Variable Function
+ 56(result): 55(ptr) Variable Function
+ 48: 47(ptr) AccessChain 44 46
+ 49: 7(fvec3) Load 48
+ Store 39(roundedEdgeTessFactor) 49
+ Store 51(roundedInsideTessFactor) 52
+ Store 53(insideTessFactor) 54
+ 59: 50(ptr) AccessChain 39(roundedEdgeTessFactor) 58
+ 60: 6(float) Load 59
+ 61: 50(ptr) AccessChain 56(result) 57 57
+ Store 61 60
+ 64: 50(ptr) AccessChain 39(roundedEdgeTessFactor) 63
+ 65: 6(float) Load 64
+ 66: 50(ptr) AccessChain 56(result) 57 62
+ Store 66 65
+ 69: 50(ptr) AccessChain 39(roundedEdgeTessFactor) 68
+ 70: 6(float) Load 69
+ 71: 50(ptr) AccessChain 56(result) 57 67
+ Store 71 70
+ 72: 6(float) Load 51(roundedInsideTessFactor)
+ 73: 50(ptr) AccessChain 56(result) 62
+ Store 73 72
+ 74: 38(ptr) AccessChain 17(patch) 57 62
+ 75: 7(fvec3) Load 74
+ 76: 38(ptr) AccessChain 56(result) 67 57
+ Store 76 75
+ 77: 38(ptr) AccessChain 17(patch) 62 62
+ 78: 7(fvec3) Load 77
+ 79: 38(ptr) AccessChain 56(result) 67 62
+ Store 79 78
+ 80: 38(ptr) AccessChain 17(patch) 67 62
+ 81: 7(fvec3) Load 80
+ 82: 38(ptr) AccessChain 56(result) 67 67
+ Store 82 81
+ 83:15(HSTrianglePatchConstant) Load 56(result)
+ ReturnValue 83
+ FunctionEnd
+25(@HSMain(struct-HSInput-vf3-vf31[3];u1;):21(HSOutput) Function None 22
+ 23(patch): 12(ptr) FunctionParameter
+ 24(id): 20(ptr) FunctionParameter
+ 26: Label
+ 87(output): 86(ptr) Variable Function
+ 88: 9(int) Load 24(id)
+ 89: 38(ptr) AccessChain 23(patch) 88 57
+ 90: 7(fvec3) Load 89
+ 91: 38(ptr) AccessChain 87(output) 57
+ Store 91 90
+ 92:21(HSOutput) Load 87(output)
+ ReturnValue 92
+ FunctionEnd
+36(GSMain(struct-GSVertexInput-vf3-vf31[3];struct-GSVertexOutput-vf41;): 2 Function None 33
+ 34(input): 29(ptr) FunctionParameter
+ 35(output): 32(ptr) FunctionParameter
+ 37: Label
+ 151(P0): 38(ptr) Variable Function
+ 154(P1): 38(ptr) Variable Function
+ 157(P2): 38(ptr) Variable Function
+ 174(Q0): 173(ptr) Variable Function
+ 184(Q1): 173(ptr) Variable Function
+ 193(Q2): 173(ptr) Variable Function
+ 202(vertex): 32(ptr) Variable Function
+ 152: 38(ptr) AccessChain 34(input) 57 57
+ 153: 7(fvec3) Load 152
+ Store 151(P0) 153
+ 155: 38(ptr) AccessChain 34(input) 62 57
+ 156: 7(fvec3) Load 155
+ Store 154(P1) 156
+ 158: 38(ptr) AccessChain 34(input) 67 57
+ 159: 7(fvec3) Load 158
+ Store 157(P2) 159
+ 161: 50(ptr) AccessChain 151(P0) 68
+ 162: 6(float) Load 161
+ 163: 6(float) FAdd 162 160
+ 164: 50(ptr) AccessChain 151(P0) 68
+ Store 164 163
+ 165: 50(ptr) AccessChain 154(P1) 68
+ 166: 6(float) Load 165
+ 167: 6(float) FAdd 166 160
+ 168: 50(ptr) AccessChain 154(P1) 68
+ Store 168 167
+ 169: 50(ptr) AccessChain 157(P2) 68
+ 170: 6(float) Load 169
+ 171: 6(float) FAdd 170 160
+ 172: 50(ptr) AccessChain 157(P2) 68
+ Store 172 171
+ 175: 7(fvec3) Load 151(P0)
+ 176: 6(float) CompositeExtract 175 0
+ 177: 6(float) CompositeExtract 175 1
+ 178: 6(float) CompositeExtract 175 2
+ 179: 30(fvec4) CompositeConstruct 176 177 178 54
+ 181: 180(ptr) AccessChain 44 62
+ 182: 40 Load 181
+ 183: 30(fvec4) VectorTimesMatrix 179 182
+ Store 174(Q0) 183
+ 185: 7(fvec3) Load 154(P1)
+ 186: 6(float) CompositeExtract 185 0
+ 187: 6(float) CompositeExtract 185 1
+ 188: 6(float) CompositeExtract 185 2
+ 189: 30(fvec4) CompositeConstruct 186 187 188 54
+ 190: 180(ptr) AccessChain 44 62
+ 191: 40 Load 190
+ 192: 30(fvec4) VectorTimesMatrix 189 191
+ Store 184(Q1) 192
+ 194: 7(fvec3) Load 157(P2)
+ 195: 6(float) CompositeExtract 194 0
+ 196: 6(float) CompositeExtract 194 1
+ 197: 6(float) CompositeExtract 194 2
+ 198: 30(fvec4) CompositeConstruct 195 196 197 54
+ 199: 180(ptr) AccessChain 44 62
+ 200: 40 Load 199
+ 201: 30(fvec4) VectorTimesMatrix 198 200
+ Store 193(Q2) 201
+ 203: 30(fvec4) Load 174(Q0)
+ 204: 173(ptr) AccessChain 202(vertex) 57
+ Store 204 203
+ 206: 30(fvec4) Load 184(Q1)
+ 207: 173(ptr) AccessChain 202(vertex) 57
+ Store 207 206
+ 208: 30(fvec4) Load 184(Q1)
+ 209: 173(ptr) AccessChain 202(vertex) 57
+ Store 209 208
+ 210: 30(fvec4) Load 193(Q2)
+ 211: 173(ptr) AccessChain 202(vertex) 57
+ Store 211 210
+ 212: 30(fvec4) Load 193(Q2)
+ 213: 173(ptr) AccessChain 202(vertex) 57
+ Store 213 212
+ 214: 30(fvec4) Load 174(Q0)
+ 215: 173(ptr) AccessChain 202(vertex) 57
+ Store 215 214
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hlslOffset.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hlslOffset.vert.out
new file mode 100644
index 00000000000..4840e61e603
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hlslOffset.vert.out
@@ -0,0 +1,85 @@
+hlsl.hlslOffset.vert
+Shader version: 500
+0:? Sequence
+0:20 Function Definition: @main( ( temp void)
+0:20 Function Parameters:
+0:20 Function Definition: main( ( temp void)
+0:20 Function Parameters:
+0:? Sequence
+0:20 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float m0, layout( row_major std140) uniform 3-component vector of float m4, layout( row_major std140) uniform float m16, layout( row_major std140 offset=20) uniform 3-component vector of float m20, layout( row_major std140 offset=36) uniform 3-component vector of float m36, layout( row_major std140 offset=56) uniform 2-component vector of float m56, layout( row_major std140) uniform float m64, layout( row_major std140) uniform 2-component vector of float m68, layout( row_major std140) uniform float m76, layout( row_major std140) uniform float m80, layout( row_major std140) uniform 1-element array of 2-component vector of float m96})
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:20 Function Definition: @main( ( temp void)
+0:20 Function Parameters:
+0:20 Function Definition: main( ( temp void)
+0:20 Function Parameters:
+0:? Sequence
+0:20 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float m0, layout( row_major std140) uniform 3-component vector of float m4, layout( row_major std140) uniform float m16, layout( row_major std140 offset=20) uniform 3-component vector of float m20, layout( row_major std140 offset=36) uniform 3-component vector of float m36, layout( row_major std140 offset=56) uniform 2-component vector of float m56, layout( row_major std140) uniform float m64, layout( row_major std140) uniform 2-component vector of float m68, layout( row_major std140) uniform float m76, layout( row_major std140) uniform float m80, layout( row_major std140) uniform 1-element array of 2-component vector of float m96})
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 18
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main"
+ Source HLSL 500
+ Name 4 "main"
+ Name 6 "@main("
+ Name 15 "b"
+ MemberName 15(b) 0 "m0"
+ MemberName 15(b) 1 "m4"
+ MemberName 15(b) 2 "m16"
+ MemberName 15(b) 3 "m20"
+ MemberName 15(b) 4 "m36"
+ MemberName 15(b) 5 "m56"
+ MemberName 15(b) 6 "m64"
+ MemberName 15(b) 7 "m68"
+ MemberName 15(b) 8 "m76"
+ MemberName 15(b) 9 "m80"
+ MemberName 15(b) 10 "m96"
+ Name 17 ""
+ Decorate 14 ArrayStride 16
+ MemberDecorate 15(b) 0 Offset 0
+ MemberDecorate 15(b) 1 Offset 4
+ MemberDecorate 15(b) 2 Offset 16
+ MemberDecorate 15(b) 3 Offset 20
+ MemberDecorate 15(b) 4 Offset 36
+ MemberDecorate 15(b) 5 Offset 56
+ MemberDecorate 15(b) 6 Offset 64
+ MemberDecorate 15(b) 7 Offset 68
+ MemberDecorate 15(b) 8 Offset 76
+ MemberDecorate 15(b) 9 Offset 80
+ MemberDecorate 15(b) 10 Offset 96
+ Decorate 15(b) Block
+ Decorate 17 DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 9: TypeFloat 32
+ 10: TypeVector 9(float) 3
+ 11: TypeVector 9(float) 2
+ 12: TypeInt 32 0
+ 13: 12(int) Constant 1
+ 14: TypeArray 11(fvec2) 13
+ 15(b): TypeStruct 9(float) 10(fvec3) 9(float) 10(fvec3) 10(fvec3) 11(fvec2) 9(float) 11(fvec2) 9(float) 9(float) 14
+ 16: TypePointer Uniform 15(b)
+ 17: 16(ptr) Variable Uniform
+ 4(main): 2 Function None 3
+ 5: Label
+ 8: 2 FunctionCall 6(@main()
+ Return
+ FunctionEnd
+ 6(@main(): 2 Function None 3
+ 7: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.1.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.1.tesc.out
index 89ab4e63394..57020ee1921 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.1.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.1.tesc.out
@@ -1,6 +1,7 @@
hlsl.hull.1.tesc
-Shader version: 450
+Shader version: 500
vertices = 4
+vertex spacing = equal_spacing
0:? Sequence
0:26 Function Definition: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
0:26 Function Parameters:
@@ -31,7 +32,9 @@ vertices = 4
0:? 'm_cpid' ( temp uint)
0:? 'm_cpid' ( in uint InvocationID)
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'm_cpid' ( in uint InvocationID)
0:26 Function Call: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'm_cpid' ( temp uint)
@@ -50,8 +53,8 @@ vertices = 4
0:? 'pid' ( in uint PrimitiveID)
0:? Sequence
0:? move second child to first child ( temp float)
-0:? direct index ( out float TessLevelOuter)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
0:? Constant:
0:? 0 (const int)
0:? direct index ( temp float)
@@ -62,8 +65,8 @@ vertices = 4
0:? Constant:
0:? 0 (const int)
0:? move second child to first child ( temp float)
-0:? direct index ( out float TessLevelOuter)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
0:? Constant:
0:? 1 (const int)
0:? direct index ( temp float)
@@ -100,18 +103,19 @@ vertices = 4
0:38 Branch: Return with expression
0:38 'output' ( temp structure{ temp 2-element array of float edges})
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'm_cpid' ( in uint InvocationID)
0:? 'pid' ( in uint PrimitiveID)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
Linked tessellation control stage:
-Shader version: 450
+Shader version: 500
vertices = 4
+vertex spacing = equal_spacing
0:? Sequence
0:26 Function Definition: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
0:26 Function Parameters:
@@ -142,7 +146,9 @@ vertices = 4
0:? 'm_cpid' ( temp uint)
0:? 'm_cpid' ( in uint InvocationID)
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'm_cpid' ( in uint InvocationID)
0:26 Function Call: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'm_cpid' ( temp uint)
@@ -161,8 +167,8 @@ vertices = 4
0:? 'pid' ( in uint PrimitiveID)
0:? Sequence
0:? move second child to first child ( temp float)
-0:? direct index ( out float TessLevelOuter)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
0:? Constant:
0:? 0 (const int)
0:? direct index ( temp float)
@@ -173,8 +179,8 @@ vertices = 4
0:? Constant:
0:? 0 (const int)
0:? move second child to first child ( temp float)
-0:? direct index ( out float TessLevelOuter)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
0:? Constant:
0:? 1 (const int)
0:? direct index ( temp float)
@@ -211,21 +217,24 @@ vertices = 4
0:38 Branch: Return with expression
0:38 'output' ( temp structure{ temp 2-element array of float edges})
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'm_cpid' ( in uint InvocationID)
0:? 'pid' ( in uint PrimitiveID)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 85
+// Generated by (magic number): 80002
+// Id's are bound by 90
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint TessellationControl 4 "main" 40 44 47 62 67
+ EntryPoint TessellationControl 4 "main" 40 44 48 66 72
ExecutionMode 4 OutputVertices 4
+ ExecutionMode 4 Isolines
+ ExecutionMode 4 SpacingEqual
+ Source HLSL 500
Name 4 "main"
Name 8 "VS_OUT"
MemberName 8(VS_OUT) 0 "cpoint"
@@ -243,19 +252,20 @@ vertices = 4
Name 40 "ip"
Name 42 "m_cpid"
Name 44 "m_cpid"
- Name 47 "@entryPointOutput"
- Name 48 "param"
+ Name 48 "@entryPointOutput"
Name 50 "param"
- Name 61 "@patchConstantResult"
- Name 62 "pid"
- Name 63 "param"
- Name 67 "@patchConstantOutput_edges"
- Name 77 "output"
+ Name 52 "param"
+ Name 65 "@patchConstantResult"
+ Name 66 "pid"
+ Name 67 "param"
+ Name 72 "@patchConstantOutput.edges"
+ Name 82 "output"
Decorate 40(ip) Location 0
Decorate 44(m_cpid) BuiltIn InvocationId
- Decorate 47(@entryPointOutput) Location 0
- Decorate 62(pid) BuiltIn PrimitiveId
- Decorate 67(@patchConstantOutput_edges) BuiltIn TessLevelOuter
+ Decorate 48(@entryPointOutput) Location 0
+ Decorate 66(pid) BuiltIn PrimitiveId
+ Decorate 72(@patchConstantOutput.edges) Patch
+ Decorate 72(@patchConstantOutput.edges) BuiltIn TessLevelOuter
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -280,58 +290,63 @@ vertices = 4
40(ip): 39(ptr) Variable Input
43: TypePointer Input 9(int)
44(m_cpid): 43(ptr) Variable Input
- 46: TypePointer Output 14(HS_OUT)
-47(@entryPointOutput): 46(ptr) Variable Output
- 53: 9(int) Constant 1
- 54: 9(int) Constant 0
- 56: TypeBool
- 60: TypePointer Function 22(HS_CONSTANT_OUT)
- 62(pid): 43(ptr) Variable Input
- 66: TypePointer Output 21
-67(@patchConstantOutput_edges): 66(ptr) Variable Output
- 68: TypePointer Function 6(float)
- 71: TypePointer Output 6(float)
- 73: 29(int) Constant 1
- 78: 6(float) Constant 1073741824
- 80: 6(float) Constant 1090519040
+ 46: TypeArray 14(HS_OUT) 10
+ 47: TypePointer Output 46
+48(@entryPointOutput): 47(ptr) Variable Output
+ 55: TypePointer Output 14(HS_OUT)
+ 57: 9(int) Constant 1
+ 58: 9(int) Constant 0
+ 60: TypeBool
+ 64: TypePointer Function 22(HS_CONSTANT_OUT)
+ 66(pid): 43(ptr) Variable Input
+ 70: TypeArray 6(float) 10
+ 71: TypePointer Output 70
+72(@patchConstantOutput.edges): 71(ptr) Variable Output
+ 73: TypePointer Function 6(float)
+ 76: TypePointer Output 6(float)
+ 78: 29(int) Constant 1
+ 83: 6(float) Constant 1073741824
+ 85: 6(float) Constant 1090519040
4(main): 2 Function None 3
5: Label
38(ip): 12(ptr) Variable Function
42(m_cpid): 13(ptr) Variable Function
- 48(param): 12(ptr) Variable Function
- 50(param): 13(ptr) Variable Function
-61(@patchConstantResult): 60(ptr) Variable Function
- 63(param): 13(ptr) Variable Function
+ 50(param): 12(ptr) Variable Function
+ 52(param): 13(ptr) Variable Function
+65(@patchConstantResult): 64(ptr) Variable Function
+ 67(param): 13(ptr) Variable Function
41: 11 Load 40(ip)
Store 38(ip) 41
45: 9(int) Load 44(m_cpid)
Store 42(m_cpid) 45
- 49: 11 Load 38(ip)
- Store 48(param) 49
- 51: 9(int) Load 42(m_cpid)
+ 49: 9(int) Load 44(m_cpid)
+ 51: 11 Load 38(ip)
Store 50(param) 51
- 52: 14(HS_OUT) FunctionCall 18(@main(struct-VS_OUT-vf31[4];u1;) 48(param) 50(param)
- Store 47(@entryPointOutput) 52
- ControlBarrier 20 53 54
- 55: 9(int) Load 44(m_cpid)
- 57: 56(bool) IEqual 55 30
- SelectionMerge 59 None
- BranchConditional 57 58 59
- 58: Label
- 64: 9(int) Load 62(pid)
- Store 63(param) 64
- 65:22(HS_CONSTANT_OUT) FunctionCall 25(PCF(u1;) 63(param)
- Store 61(@patchConstantResult) 65
- 69: 68(ptr) AccessChain 61(@patchConstantResult) 30 30
- 70: 6(float) Load 69
- 72: 71(ptr) AccessChain 67(@patchConstantOutput_edges) 30
- Store 72 70
- 74: 68(ptr) AccessChain 61(@patchConstantResult) 30 73
+ 53: 9(int) Load 42(m_cpid)
+ Store 52(param) 53
+ 54: 14(HS_OUT) FunctionCall 18(@main(struct-VS_OUT-vf31[4];u1;) 50(param) 52(param)
+ 56: 55(ptr) AccessChain 48(@entryPointOutput) 49
+ Store 56 54
+ ControlBarrier 20 57 58
+ 59: 9(int) Load 44(m_cpid)
+ 61: 60(bool) IEqual 59 30
+ SelectionMerge 63 None
+ BranchConditional 61 62 63
+ 62: Label
+ 68: 9(int) Load 66(pid)
+ Store 67(param) 68
+ 69:22(HS_CONSTANT_OUT) FunctionCall 25(PCF(u1;) 67(param)
+ Store 65(@patchConstantResult) 69
+ 74: 73(ptr) AccessChain 65(@patchConstantResult) 30 30
75: 6(float) Load 74
- 76: 71(ptr) AccessChain 67(@patchConstantOutput_edges) 73
- Store 76 75
- Branch 59
- 59: Label
+ 77: 76(ptr) AccessChain 72(@patchConstantOutput.edges) 30
+ Store 77 75
+ 79: 73(ptr) AccessChain 65(@patchConstantResult) 30 78
+ 80: 6(float) Load 79
+ 81: 76(ptr) AccessChain 72(@patchConstantOutput.edges) 78
+ Store 81 80
+ Branch 63
+ 63: Label
Return
FunctionEnd
18(@main(struct-VS_OUT-vf31[4];u1;): 14(HS_OUT) Function None 15
@@ -349,11 +364,11 @@ vertices = 4
25(PCF(u1;):22(HS_CONSTANT_OUT) Function None 23
24(pid): 13(ptr) FunctionParameter
26: Label
- 77(output): 60(ptr) Variable Function
- 79: 68(ptr) AccessChain 77(output) 30 30
- Store 79 78
- 81: 68(ptr) AccessChain 77(output) 30 73
- Store 81 80
- 82:22(HS_CONSTANT_OUT) Load 77(output)
- ReturnValue 82
+ 82(output): 64(ptr) Variable Function
+ 84: 73(ptr) AccessChain 82(output) 30 30
+ Store 84 83
+ 86: 73(ptr) AccessChain 82(output) 30 78
+ Store 86 85
+ 87:22(HS_CONSTANT_OUT) Load 82(output)
+ ReturnValue 87
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.2.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.2.tesc.out
index 9d848c61b92..8d0708ddcd1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.2.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.2.tesc.out
@@ -1,6 +1,7 @@
hlsl.hull.2.tesc
-Shader version: 450
+Shader version: 500
vertices = 4
+vertex spacing = equal_spacing
0:? Sequence
0:26 Function Definition: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
0:26 Function Parameters:
@@ -27,7 +28,9 @@ vertices = 4
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
0:? Barrier ( temp void)
@@ -46,8 +49,8 @@ vertices = 4
0:? 'pos' ( in 4-component vector of float Position)
0:? Sequence
0:? move second child to first child ( temp float)
-0:? direct index ( out float TessLevelOuter)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
0:? Constant:
0:? 0 (const int)
0:? direct index ( temp float)
@@ -58,8 +61,8 @@ vertices = 4
0:? Constant:
0:? 0 (const int)
0:? move second child to first child ( temp float)
-0:? direct index ( out float TessLevelOuter)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
0:? Constant:
0:? 1 (const int)
0:? direct index ( temp float)
@@ -97,19 +100,20 @@ vertices = 4
0:38 Branch: Return with expression
0:38 'output' ( temp structure{ temp 2-element array of float edges})
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
0:? 'pid' ( in uint PrimitiveID)
0:? 'pos' ( in 4-component vector of float Position)
-0:? 'InvocationId' ( in uint InvocationID)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
Linked tessellation control stage:
-Shader version: 450
+Shader version: 500
vertices = 4
+vertex spacing = equal_spacing
0:? Sequence
0:26 Function Definition: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
0:26 Function Parameters:
@@ -136,7 +140,9 @@ vertices = 4
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
0:? Barrier ( temp void)
@@ -155,8 +161,8 @@ vertices = 4
0:? 'pos' ( in 4-component vector of float Position)
0:? Sequence
0:? move second child to first child ( temp float)
-0:? direct index ( out float TessLevelOuter)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
0:? Constant:
0:? 0 (const int)
0:? direct index ( temp float)
@@ -167,8 +173,8 @@ vertices = 4
0:? Constant:
0:? 0 (const int)
0:? move second child to first child ( temp float)
-0:? direct index ( out float TessLevelOuter)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
0:? Constant:
0:? 1 (const int)
0:? direct index ( temp float)
@@ -206,22 +212,25 @@ vertices = 4
0:38 Branch: Return with expression
0:38 'output' ( temp structure{ temp 2-element array of float edges})
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
0:? 'pid' ( in uint PrimitiveID)
0:? 'pos' ( in 4-component vector of float Position)
-0:? 'InvocationId' ( in uint InvocationID)
-0:? '@patchConstantOutput_edges' ( out 2-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 87
+// Generated by (magic number): 80002
+// Id's are bound by 92
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint TessellationControl 4 "main" 42 45 52 60 62 69
+ EntryPoint TessellationControl 4 "main" 42 46 48 64 66 74
ExecutionMode 4 OutputVertices 4
+ ExecutionMode 4 Isolines
+ ExecutionMode 4 SpacingEqual
+ Source HLSL 500
Name 4 "main"
Name 8 "VS_OUT"
MemberName 8(VS_OUT) 0 "cpoint"
@@ -237,22 +246,23 @@ vertices = 4
Name 30 "output"
Name 40 "ip"
Name 42 "ip"
- Name 45 "@entryPointOutput"
- Name 46 "param"
- Name 52 "InvocationId"
- Name 59 "@patchConstantResult"
- Name 60 "pid"
- Name 62 "pos"
- Name 63 "param"
- Name 65 "param"
- Name 69 "@patchConstantOutput_edges"
- Name 79 "output"
+ Name 46 "@entryPointOutput"
+ Name 48 "InvocationId"
+ Name 50 "param"
+ Name 63 "@patchConstantResult"
+ Name 64 "pid"
+ Name 66 "pos"
+ Name 67 "param"
+ Name 69 "param"
+ Name 74 "@patchConstantOutput.edges"
+ Name 84 "output"
Decorate 42(ip) Location 0
- Decorate 45(@entryPointOutput) Location 0
- Decorate 52(InvocationId) BuiltIn InvocationId
- Decorate 60(pid) BuiltIn PrimitiveId
- Decorate 62(pos) BuiltIn Position
- Decorate 69(@patchConstantOutput_edges) BuiltIn TessLevelOuter
+ Decorate 46(@entryPointOutput) Location 0
+ Decorate 48(InvocationId) BuiltIn InvocationId
+ Decorate 64(pid) BuiltIn PrimitiveId
+ Decorate 66(pos) BuiltIn Position
+ Decorate 74(@patchConstantOutput.edges) Patch
+ Decorate 74(@patchConstantOutput.edges) BuiltIn TessLevelOuter
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -277,59 +287,64 @@ vertices = 4
33: TypePointer Function 7(fvec3)
41: TypePointer Input 11
42(ip): 41(ptr) Variable Input
- 44: TypePointer Output 13(HS_OUT)
-45(@entryPointOutput): 44(ptr) Variable Output
- 49: 9(int) Constant 1
- 50: 9(int) Constant 0
- 51: TypePointer Input 9(int)
-52(InvocationId): 51(ptr) Variable Input
- 54: TypeBool
- 58: TypePointer Function 23(HS_CONSTANT_OUT)
- 60(pid): 51(ptr) Variable Input
- 61: TypePointer Input 19(fvec4)
- 62(pos): 61(ptr) Variable Input
- 68: TypePointer Output 22
-69(@patchConstantOutput_edges): 68(ptr) Variable Output
- 70: TypePointer Function 6(float)
- 73: TypePointer Output 6(float)
- 75: 31(int) Constant 1
- 80: 6(float) Constant 1073741824
- 82: 6(float) Constant 1090519040
+ 44: TypeArray 13(HS_OUT) 10
+ 45: TypePointer Output 44
+46(@entryPointOutput): 45(ptr) Variable Output
+ 47: TypePointer Input 9(int)
+48(InvocationId): 47(ptr) Variable Input
+ 53: TypePointer Output 13(HS_OUT)
+ 55: 9(int) Constant 1
+ 56: 9(int) Constant 0
+ 58: TypeBool
+ 62: TypePointer Function 23(HS_CONSTANT_OUT)
+ 64(pid): 47(ptr) Variable Input
+ 65: TypePointer Input 19(fvec4)
+ 66(pos): 65(ptr) Variable Input
+ 72: TypeArray 6(float) 10
+ 73: TypePointer Output 72
+74(@patchConstantOutput.edges): 73(ptr) Variable Output
+ 75: TypePointer Function 6(float)
+ 78: TypePointer Output 6(float)
+ 80: 31(int) Constant 1
+ 85: 6(float) Constant 1073741824
+ 87: 6(float) Constant 1090519040
4(main): 2 Function None 3
5: Label
40(ip): 12(ptr) Variable Function
- 46(param): 12(ptr) Variable Function
-59(@patchConstantResult): 58(ptr) Variable Function
- 63(param): 18(ptr) Variable Function
- 65(param): 20(ptr) Variable Function
+ 50(param): 12(ptr) Variable Function
+63(@patchConstantResult): 62(ptr) Variable Function
+ 67(param): 18(ptr) Variable Function
+ 69(param): 20(ptr) Variable Function
43: 11 Load 42(ip)
Store 40(ip) 43
- 47: 11 Load 40(ip)
- Store 46(param) 47
- 48: 13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[4];) 46(param)
- Store 45(@entryPointOutput) 48
- ControlBarrier 21 49 50
- 53: 9(int) Load 52(InvocationId)
- 55: 54(bool) IEqual 53 32
- SelectionMerge 57 None
- BranchConditional 55 56 57
- 56: Label
- 64: 9(int) Load 60(pid)
- Store 63(param) 64
- 66: 19(fvec4) Load 62(pos)
- Store 65(param) 66
- 67:23(HS_CONSTANT_OUT) FunctionCall 27(PCF(u1;vf4;) 63(param) 65(param)
- Store 59(@patchConstantResult) 67
- 71: 70(ptr) AccessChain 59(@patchConstantResult) 32 32
- 72: 6(float) Load 71
- 74: 73(ptr) AccessChain 69(@patchConstantOutput_edges) 32
- Store 74 72
- 76: 70(ptr) AccessChain 59(@patchConstantResult) 32 75
+ 49: 9(int) Load 48(InvocationId)
+ 51: 11 Load 40(ip)
+ Store 50(param) 51
+ 52: 13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[4];) 50(param)
+ 54: 53(ptr) AccessChain 46(@entryPointOutput) 49
+ Store 54 52
+ ControlBarrier 21 55 56
+ 57: 9(int) Load 48(InvocationId)
+ 59: 58(bool) IEqual 57 32
+ SelectionMerge 61 None
+ BranchConditional 59 60 61
+ 60: Label
+ 68: 9(int) Load 64(pid)
+ Store 67(param) 68
+ 70: 19(fvec4) Load 66(pos)
+ Store 69(param) 70
+ 71:23(HS_CONSTANT_OUT) FunctionCall 27(PCF(u1;vf4;) 67(param) 69(param)
+ Store 63(@patchConstantResult) 71
+ 76: 75(ptr) AccessChain 63(@patchConstantResult) 32 32
77: 6(float) Load 76
- 78: 73(ptr) AccessChain 69(@patchConstantOutput_edges) 75
- Store 78 77
- Branch 57
- 57: Label
+ 79: 78(ptr) AccessChain 74(@patchConstantOutput.edges) 32
+ Store 79 77
+ 81: 75(ptr) AccessChain 63(@patchConstantResult) 32 80
+ 82: 6(float) Load 81
+ 83: 78(ptr) AccessChain 74(@patchConstantOutput.edges) 80
+ Store 83 82
+ Branch 61
+ 61: Label
Return
FunctionEnd
16(@main(struct-VS_OUT-vf31[4];): 13(HS_OUT) Function None 14
@@ -347,11 +362,11 @@ vertices = 4
25(pid): 18(ptr) FunctionParameter
26(pos): 20(ptr) FunctionParameter
28: Label
- 79(output): 58(ptr) Variable Function
- 81: 70(ptr) AccessChain 79(output) 32 32
- Store 81 80
- 83: 70(ptr) AccessChain 79(output) 32 75
- Store 83 82
- 84:23(HS_CONSTANT_OUT) Load 79(output)
- ReturnValue 84
+ 84(output): 62(ptr) Variable Function
+ 86: 75(ptr) AccessChain 84(output) 32 32
+ Store 86 85
+ 88: 75(ptr) AccessChain 84(output) 32 80
+ Store 88 87
+ 89:23(HS_CONSTANT_OUT) Load 84(output)
+ ReturnValue 89
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.3.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.3.tesc.out
new file mode 100644
index 00000000000..59eed0d06d2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.3.tesc.out
@@ -0,0 +1,373 @@
+hlsl.hull.3.tesc
+Shader version: 500
+vertices = 4
+vertex spacing = equal_spacing
+0:? Sequence
+0:26 Function Definition: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
+0:26 Function Parameters:
+0:26 'ip' ( in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? Sequence
+0:28 move second child to first child ( temp 3-component vector of float)
+0:28 cpoint: direct index for structure ( temp 3-component vector of float)
+0:28 'output' ( temp structure{ temp 3-component vector of float cpoint})
+0:28 Constant:
+0:28 0 (const int)
+0:28 cpoint: direct index for structure ( temp 3-component vector of float)
+0:28 direct index ( temp structure{ temp 3-component vector of float cpoint})
+0:28 'ip' ( in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:29 Branch: Return with expression
+0:29 'output' ( temp structure{ temp 3-component vector of float cpoint})
+0:26 Function Definition: main( ( temp void)
+0:26 Function Parameters:
+0:? Sequence
+0:26 move second child to first child ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
+0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
+0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
+0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'InvocationId' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 2-element array of float edges})
+0:? '@patchConstantResult' ( temp structure{ temp 2-element array of float edges})
+0:? Function Call: PCF(u1;vf4; ( temp structure{ temp 2-element array of float edges})
+0:? 'pid' ( in uint PrimitiveID)
+0:? 'pos' ( in 4-component vector of float Position)
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? edges: direct index for structure ( temp 2-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 2-element array of float edges})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? edges: direct index for structure ( temp 2-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 2-element array of float edges})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:33 Function Definition: PCF(u1;vf4; ( temp structure{ temp 2-element array of float edges})
+0:33 Function Parameters:
+0:33 'pid' ( in uint)
+0:33 'pos' ( in 4-component vector of float)
+0:? Sequence
+0:36 move second child to first child ( temp float)
+0:36 direct index ( temp float)
+0:36 edges: direct index for structure ( temp 2-element array of float)
+0:36 'output' ( temp structure{ temp 2-element array of float edges})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 2.000000
+0:37 move second child to first child ( temp float)
+0:37 direct index ( temp float)
+0:37 edges: direct index for structure ( temp 2-element array of float)
+0:37 'output' ( temp structure{ temp 2-element array of float edges})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 Constant:
+0:37 8.000000
+0:38 Branch: Return with expression
+0:38 'output' ( temp structure{ temp 2-element array of float edges})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
+0:? 'pid' ( in uint PrimitiveID)
+0:? 'pos' ( in 4-component vector of float Position)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 4
+vertex spacing = equal_spacing
+0:? Sequence
+0:26 Function Definition: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
+0:26 Function Parameters:
+0:26 'ip' ( in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? Sequence
+0:28 move second child to first child ( temp 3-component vector of float)
+0:28 cpoint: direct index for structure ( temp 3-component vector of float)
+0:28 'output' ( temp structure{ temp 3-component vector of float cpoint})
+0:28 Constant:
+0:28 0 (const int)
+0:28 cpoint: direct index for structure ( temp 3-component vector of float)
+0:28 direct index ( temp structure{ temp 3-component vector of float cpoint})
+0:28 'ip' ( in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:29 Branch: Return with expression
+0:29 'output' ( temp structure{ temp 3-component vector of float cpoint})
+0:26 Function Definition: main( ( temp void)
+0:26 Function Parameters:
+0:? Sequence
+0:26 move second child to first child ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
+0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
+0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
+0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'InvocationId' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 2-element array of float edges})
+0:? '@patchConstantResult' ( temp structure{ temp 2-element array of float edges})
+0:? Function Call: PCF(u1;vf4; ( temp structure{ temp 2-element array of float edges})
+0:? 'pid' ( in uint PrimitiveID)
+0:? 'pos' ( in 4-component vector of float Position)
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? edges: direct index for structure ( temp 2-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 2-element array of float edges})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? edges: direct index for structure ( temp 2-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 2-element array of float edges})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:33 Function Definition: PCF(u1;vf4; ( temp structure{ temp 2-element array of float edges})
+0:33 Function Parameters:
+0:33 'pid' ( in uint)
+0:33 'pos' ( in 4-component vector of float)
+0:? Sequence
+0:36 move second child to first child ( temp float)
+0:36 direct index ( temp float)
+0:36 edges: direct index for structure ( temp 2-element array of float)
+0:36 'output' ( temp structure{ temp 2-element array of float edges})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 2.000000
+0:37 move second child to first child ( temp float)
+0:37 direct index ( temp float)
+0:37 edges: direct index for structure ( temp 2-element array of float)
+0:37 'output' ( temp structure{ temp 2-element array of float edges})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 Constant:
+0:37 8.000000
+0:38 Branch: Return with expression
+0:38 'output' ( temp structure{ temp 2-element array of float edges})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
+0:? 'pid' ( in uint PrimitiveID)
+0:? 'pos' ( in 4-component vector of float Position)
+0:? '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 92
+
+ Capability Tessellation
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint TessellationControl 4 "main" 42 46 48 64 66 74
+ ExecutionMode 4 OutputVertices 4
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 SpacingEqual
+ ExecutionMode 4 PointMode
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "VS_OUT"
+ MemberName 8(VS_OUT) 0 "cpoint"
+ Name 13 "HS_OUT"
+ MemberName 13(HS_OUT) 0 "cpoint"
+ Name 16 "@main(struct-VS_OUT-vf31[4];"
+ Name 15 "ip"
+ Name 23 "HS_CONSTANT_OUT"
+ MemberName 23(HS_CONSTANT_OUT) 0 "edges"
+ Name 27 "PCF(u1;vf4;"
+ Name 25 "pid"
+ Name 26 "pos"
+ Name 30 "output"
+ Name 40 "ip"
+ Name 42 "ip"
+ Name 46 "@entryPointOutput"
+ Name 48 "InvocationId"
+ Name 50 "param"
+ Name 63 "@patchConstantResult"
+ Name 64 "pid"
+ Name 66 "pos"
+ Name 67 "param"
+ Name 69 "param"
+ Name 74 "@patchConstantOutput.edges"
+ Name 84 "output"
+ Decorate 42(ip) Location 0
+ Decorate 46(@entryPointOutput) Location 0
+ Decorate 48(InvocationId) BuiltIn InvocationId
+ Decorate 64(pid) BuiltIn PrimitiveId
+ Decorate 66(pos) BuiltIn Position
+ Decorate 74(@patchConstantOutput.edges) Patch
+ Decorate 74(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 3
+ 8(VS_OUT): TypeStruct 7(fvec3)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 4
+ 11: TypeArray 8(VS_OUT) 10
+ 12: TypePointer Function 11
+ 13(HS_OUT): TypeStruct 7(fvec3)
+ 14: TypeFunction 13(HS_OUT) 12(ptr)
+ 18: TypePointer Function 9(int)
+ 19: TypeVector 6(float) 4
+ 20: TypePointer Function 19(fvec4)
+ 21: 9(int) Constant 2
+ 22: TypeArray 6(float) 21
+23(HS_CONSTANT_OUT): TypeStruct 22
+ 24: TypeFunction 23(HS_CONSTANT_OUT) 18(ptr) 20(ptr)
+ 29: TypePointer Function 13(HS_OUT)
+ 31: TypeInt 32 1
+ 32: 31(int) Constant 0
+ 33: TypePointer Function 7(fvec3)
+ 41: TypePointer Input 11
+ 42(ip): 41(ptr) Variable Input
+ 44: TypeArray 13(HS_OUT) 10
+ 45: TypePointer Output 44
+46(@entryPointOutput): 45(ptr) Variable Output
+ 47: TypePointer Input 9(int)
+48(InvocationId): 47(ptr) Variable Input
+ 53: TypePointer Output 13(HS_OUT)
+ 55: 9(int) Constant 1
+ 56: 9(int) Constant 0
+ 58: TypeBool
+ 62: TypePointer Function 23(HS_CONSTANT_OUT)
+ 64(pid): 47(ptr) Variable Input
+ 65: TypePointer Input 19(fvec4)
+ 66(pos): 65(ptr) Variable Input
+ 72: TypeArray 6(float) 10
+ 73: TypePointer Output 72
+74(@patchConstantOutput.edges): 73(ptr) Variable Output
+ 75: TypePointer Function 6(float)
+ 78: TypePointer Output 6(float)
+ 80: 31(int) Constant 1
+ 85: 6(float) Constant 1073741824
+ 87: 6(float) Constant 1090519040
+ 4(main): 2 Function None 3
+ 5: Label
+ 40(ip): 12(ptr) Variable Function
+ 50(param): 12(ptr) Variable Function
+63(@patchConstantResult): 62(ptr) Variable Function
+ 67(param): 18(ptr) Variable Function
+ 69(param): 20(ptr) Variable Function
+ 43: 11 Load 42(ip)
+ Store 40(ip) 43
+ 49: 9(int) Load 48(InvocationId)
+ 51: 11 Load 40(ip)
+ Store 50(param) 51
+ 52: 13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[4];) 50(param)
+ 54: 53(ptr) AccessChain 46(@entryPointOutput) 49
+ Store 54 52
+ ControlBarrier 21 55 56
+ 57: 9(int) Load 48(InvocationId)
+ 59: 58(bool) IEqual 57 32
+ SelectionMerge 61 None
+ BranchConditional 59 60 61
+ 60: Label
+ 68: 9(int) Load 64(pid)
+ Store 67(param) 68
+ 70: 19(fvec4) Load 66(pos)
+ Store 69(param) 70
+ 71:23(HS_CONSTANT_OUT) FunctionCall 27(PCF(u1;vf4;) 67(param) 69(param)
+ Store 63(@patchConstantResult) 71
+ 76: 75(ptr) AccessChain 63(@patchConstantResult) 32 32
+ 77: 6(float) Load 76
+ 79: 78(ptr) AccessChain 74(@patchConstantOutput.edges) 32
+ Store 79 77
+ 81: 75(ptr) AccessChain 63(@patchConstantResult) 32 80
+ 82: 6(float) Load 81
+ 83: 78(ptr) AccessChain 74(@patchConstantOutput.edges) 80
+ Store 83 82
+ Branch 61
+ 61: Label
+ Return
+ FunctionEnd
+16(@main(struct-VS_OUT-vf31[4];): 13(HS_OUT) Function None 14
+ 15(ip): 12(ptr) FunctionParameter
+ 17: Label
+ 30(output): 29(ptr) Variable Function
+ 34: 33(ptr) AccessChain 15(ip) 32 32
+ 35: 7(fvec3) Load 34
+ 36: 33(ptr) AccessChain 30(output) 32
+ Store 36 35
+ 37: 13(HS_OUT) Load 30(output)
+ ReturnValue 37
+ FunctionEnd
+ 27(PCF(u1;vf4;):23(HS_CONSTANT_OUT) Function None 24
+ 25(pid): 18(ptr) FunctionParameter
+ 26(pos): 20(ptr) FunctionParameter
+ 28: Label
+ 84(output): 62(ptr) Variable Function
+ 86: 75(ptr) AccessChain 84(output) 32 32
+ Store 86 85
+ 88: 75(ptr) AccessChain 84(output) 32 80
+ Store 88 87
+ 89:23(HS_CONSTANT_OUT) Load 84(output)
+ ReturnValue 89
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.4.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.4.tesc.out
new file mode 100644
index 00000000000..139d7d41058
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.4.tesc.out
@@ -0,0 +1,681 @@
+hlsl.hull.4.tesc
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+0:? Sequence
+0:25 Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:25 Function Parameters:
+0:25 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? Sequence
+0:26 Sequence
+0:26 move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:26 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:26 Constant:
+0:26 0.000000
+0:26 0.000000
+0:26 0.000000
+0:26 0.000000
+0:28 move second child to first child ( temp float)
+0:28 fInsideTessFactor: direct index for structure ( temp float)
+0:28 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:28 Constant:
+0:28 1 (const int)
+0:28 add ( temp float)
+0:28 direct index ( temp float)
+0:28 m_Position: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:28 direct index ( temp float)
+0:28 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:30 Branch: Return with expression
+0:30 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:39 Function Definition: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:39 Function Parameters:
+0:39 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 'cpid' ( in uint)
+0:? Sequence
+0:40 Sequence
+0:40 move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
+0:40 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:40 Constant:
+0:40 0.000000
+0:40 0.000000
+0:40 0.000000
+0:40 0.000000
+0:41 move second child to first child ( temp 4-component vector of float)
+0:41 m_Position: direct index for structure ( temp 4-component vector of float)
+0:41 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0.000000
+0:41 0.000000
+0:41 0.000000
+0:41 0.000000
+0:42 Branch: Return with expression
+0:42 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:39 Function Definition: main( ( temp void)
+0:39 Function Parameters:
+0:? Sequence
+0:39 Sequence
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( in 4-component vector of float Position)
+0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 0 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( in 4-component vector of float Position)
+0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 1 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( in 4-component vector of float Position)
+0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 2 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 move second child to first child ( temp uint)
+0:? 'cpid' ( temp uint)
+0:? 'cpid' ( in uint InvocationID)
+0:39 Sequence
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 direct index ( out 4-component vector of float Position)
+0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 0 (const int)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 Function Call: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'cpid' ( temp uint)
+0:39 Constant:
+0:39 0 (const int)
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'cpid' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Function Call: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? fTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? fTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 2 (const int)
+0:? direct index ( temp float)
+0:? fTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 2 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelInner)
+0:? '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:? Constant:
+0:? 0 (const int)
+0:? fInsideTessFactor: direct index for structure ( temp float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Constant:
+0:? 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:? 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:? 'cpid' ( in uint InvocationID)
+0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+0:? Sequence
+0:25 Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:25 Function Parameters:
+0:25 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? Sequence
+0:26 Sequence
+0:26 move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:26 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:26 Constant:
+0:26 0.000000
+0:26 0.000000
+0:26 0.000000
+0:26 0.000000
+0:28 move second child to first child ( temp float)
+0:28 fInsideTessFactor: direct index for structure ( temp float)
+0:28 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:28 Constant:
+0:28 1 (const int)
+0:28 add ( temp float)
+0:28 direct index ( temp float)
+0:28 m_Position: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:28 direct index ( temp float)
+0:28 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:30 Branch: Return with expression
+0:30 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:39 Function Definition: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:39 Function Parameters:
+0:39 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 'cpid' ( in uint)
+0:? Sequence
+0:40 Sequence
+0:40 move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
+0:40 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:40 Constant:
+0:40 0.000000
+0:40 0.000000
+0:40 0.000000
+0:40 0.000000
+0:41 move second child to first child ( temp 4-component vector of float)
+0:41 m_Position: direct index for structure ( temp 4-component vector of float)
+0:41 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0.000000
+0:41 0.000000
+0:41 0.000000
+0:41 0.000000
+0:42 Branch: Return with expression
+0:42 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:39 Function Definition: main( ( temp void)
+0:39 Function Parameters:
+0:? Sequence
+0:39 Sequence
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( in 4-component vector of float Position)
+0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 0 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( in 4-component vector of float Position)
+0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 1 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( in 4-component vector of float Position)
+0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 2 (const int)
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 move second child to first child ( temp uint)
+0:? 'cpid' ( temp uint)
+0:? 'cpid' ( in uint InvocationID)
+0:39 Sequence
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 direct index ( out 4-component vector of float Position)
+0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 0 (const int)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 Function Call: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? 'cpid' ( temp uint)
+0:39 Constant:
+0:39 0 (const int)
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'cpid' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Function Call: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? fTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? fTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 2 (const int)
+0:? direct index ( temp float)
+0:? fTessFactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 2 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelInner)
+0:? '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:? Constant:
+0:? 0 (const int)
+0:? fInsideTessFactor: direct index for structure ( temp float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:? Constant:
+0:? 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:? 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:? 'cpid' ( in uint InvocationID)
+0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 127
+
+ Capability Tessellation
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint TessellationControl 4 "main" 56 64 83 86 110 123
+ ExecutionMode 4 OutputVertices 3
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 SpacingFractionalOdd
+ ExecutionMode 4 VertexOrderCw
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "HS_Input"
+ MemberName 8(HS_Input) 0 "m_Position"
+ MemberName 8(HS_Input) 1 "m_Normal"
+ Name 14 "HS_Output"
+ MemberName 14(HS_Output) 0 "fTessFactor"
+ MemberName 14(HS_Output) 1 "fInsideTessFactor"
+ Name 17 "HS_ConstFunc(struct-HS_Input-vf4-vf41[3];"
+ Name 16 "I"
+ Name 20 "HS_Main_Output"
+ MemberName 20(HS_Main_Output) 0 "m_Position"
+ Name 24 "@main(struct-HS_Input-vf4-vf41[3];u1;"
+ Name 22 "I"
+ Name 23 "cpid"
+ Name 27 "O"
+ Name 45 "output"
+ Name 53 "I"
+ Name 56 "I.m_Position"
+ Name 61 "HS_Input"
+ MemberName 61(HS_Input) 0 "m_Normal"
+ Name 64 "I"
+ Name 81 "cpid"
+ Name 83 "cpid"
+ Name 86 "@entryPointOutput.m_Position"
+ Name 87 "param"
+ Name 89 "param"
+ Name 103 "@patchConstantResult"
+ Name 104 "param"
+ Name 110 "@patchConstantOutput.fTessFactor"
+ Name 123 "@patchConstantOutput.fInsideTessFactor"
+ Decorate 56(I.m_Position) BuiltIn Position
+ Decorate 64(I) Location 0
+ Decorate 83(cpid) BuiltIn InvocationId
+ Decorate 86(@entryPointOutput.m_Position) BuiltIn Position
+ Decorate 110(@patchConstantOutput.fTessFactor) Patch
+ Decorate 110(@patchConstantOutput.fTessFactor) BuiltIn TessLevelOuter
+ Decorate 123(@patchConstantOutput.fInsideTessFactor) Patch
+ Decorate 123(@patchConstantOutput.fInsideTessFactor) BuiltIn TessLevelInner
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8(HS_Input): TypeStruct 7(fvec4) 7(fvec4)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 3
+ 11: TypeArray 8(HS_Input) 10
+ 12: TypePointer Function 11
+ 13: TypeArray 6(float) 10
+ 14(HS_Output): TypeStruct 13 6(float)
+ 15: TypeFunction 14(HS_Output) 12(ptr)
+ 19: TypePointer Function 9(int)
+20(HS_Main_Output): TypeStruct 7(fvec4)
+ 21: TypeFunction 20(HS_Main_Output) 12(ptr) 19(ptr)
+ 26: TypePointer Function 14(HS_Output)
+ 28: 6(float) Constant 0
+ 29: 13 ConstantComposite 28 28 28
+ 30:14(HS_Output) ConstantComposite 29 28
+ 31: TypeInt 32 1
+ 32: 31(int) Constant 1
+ 33: 31(int) Constant 0
+ 34: TypePointer Function 6(float)
+ 44: TypePointer Function 20(HS_Main_Output)
+ 46: 7(fvec4) ConstantComposite 28 28 28 28
+ 47:20(HS_Main_Output) ConstantComposite 46
+ 48: TypePointer Function 7(fvec4)
+ 54: TypeArray 7(fvec4) 10
+ 55: TypePointer Input 54
+56(I.m_Position): 55(ptr) Variable Input
+ 57: TypePointer Input 7(fvec4)
+ 61(HS_Input): TypeStruct 7(fvec4)
+ 62: TypeArray 61(HS_Input) 10
+ 63: TypePointer Input 62
+ 64(I): 63(ptr) Variable Input
+ 74: 31(int) Constant 2
+ 82: TypePointer Input 9(int)
+ 83(cpid): 82(ptr) Variable Input
+ 85: TypePointer Output 54
+86(@entryPointOutput.m_Position): 85(ptr) Variable Output
+ 93: TypePointer Output 7(fvec4)
+ 95: 9(int) Constant 2
+ 96: 9(int) Constant 1
+ 97: 9(int) Constant 0
+ 99: TypeBool
+ 107: 9(int) Constant 4
+ 108: TypeArray 6(float) 107
+ 109: TypePointer Output 108
+110(@patchConstantOutput.fTessFactor): 109(ptr) Variable Output
+ 113: TypePointer Output 6(float)
+ 121: TypeArray 6(float) 95
+ 122: TypePointer Output 121
+123(@patchConstantOutput.fInsideTessFactor): 122(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 53(I): 12(ptr) Variable Function
+ 81(cpid): 19(ptr) Variable Function
+ 87(param): 12(ptr) Variable Function
+ 89(param): 19(ptr) Variable Function
+103(@patchConstantResult): 26(ptr) Variable Function
+ 104(param): 12(ptr) Variable Function
+ 58: 57(ptr) AccessChain 56(I.m_Position) 33
+ 59: 7(fvec4) Load 58
+ 60: 48(ptr) AccessChain 53(I) 33 33
+ Store 60 59
+ 65: 57(ptr) AccessChain 64(I) 33 33
+ 66: 7(fvec4) Load 65
+ 67: 48(ptr) AccessChain 53(I) 33 32
+ Store 67 66
+ 68: 57(ptr) AccessChain 56(I.m_Position) 32
+ 69: 7(fvec4) Load 68
+ 70: 48(ptr) AccessChain 53(I) 32 33
+ Store 70 69
+ 71: 57(ptr) AccessChain 64(I) 32 33
+ 72: 7(fvec4) Load 71
+ 73: 48(ptr) AccessChain 53(I) 32 32
+ Store 73 72
+ 75: 57(ptr) AccessChain 56(I.m_Position) 74
+ 76: 7(fvec4) Load 75
+ 77: 48(ptr) AccessChain 53(I) 74 33
+ Store 77 76
+ 78: 57(ptr) AccessChain 64(I) 74 33
+ 79: 7(fvec4) Load 78
+ 80: 48(ptr) AccessChain 53(I) 74 32
+ Store 80 79
+ 84: 9(int) Load 83(cpid)
+ Store 81(cpid) 84
+ 88: 11 Load 53(I)
+ Store 87(param) 88
+ 90: 9(int) Load 81(cpid)
+ Store 89(param) 90
+ 91:20(HS_Main_Output) FunctionCall 24(@main(struct-HS_Input-vf4-vf41[3];u1;) 87(param) 89(param)
+ 92: 7(fvec4) CompositeExtract 91 0
+ 94: 93(ptr) AccessChain 86(@entryPointOutput.m_Position) 33
+ Store 94 92
+ ControlBarrier 95 96 97
+ 98: 9(int) Load 83(cpid)
+ 100: 99(bool) IEqual 98 33
+ SelectionMerge 102 None
+ BranchConditional 100 101 102
+ 101: Label
+ 105: 11 Load 53(I)
+ Store 104(param) 105
+ 106:14(HS_Output) FunctionCall 17(HS_ConstFunc(struct-HS_Input-vf4-vf41[3];) 104(param)
+ Store 103(@patchConstantResult) 106
+ 111: 34(ptr) AccessChain 103(@patchConstantResult) 33 33
+ 112: 6(float) Load 111
+ 114: 113(ptr) AccessChain 110(@patchConstantOutput.fTessFactor) 33
+ Store 114 112
+ 115: 34(ptr) AccessChain 103(@patchConstantResult) 33 32
+ 116: 6(float) Load 115
+ 117: 113(ptr) AccessChain 110(@patchConstantOutput.fTessFactor) 32
+ Store 117 116
+ 118: 34(ptr) AccessChain 103(@patchConstantResult) 33 74
+ 119: 6(float) Load 118
+ 120: 113(ptr) AccessChain 110(@patchConstantOutput.fTessFactor) 74
+ Store 120 119
+ 124: 34(ptr) AccessChain 103(@patchConstantResult) 32
+ 125: 6(float) Load 124
+ 126: 113(ptr) AccessChain 123(@patchConstantOutput.fInsideTessFactor) 33
+ Store 126 125
+ Branch 102
+ 102: Label
+ Return
+ FunctionEnd
+17(HS_ConstFunc(struct-HS_Input-vf4-vf41[3];):14(HS_Output) Function None 15
+ 16(I): 12(ptr) FunctionParameter
+ 18: Label
+ 27(O): 26(ptr) Variable Function
+ Store 27(O) 30
+ 35: 34(ptr) AccessChain 16(I) 33 33 10
+ 36: 6(float) Load 35
+ 37: 34(ptr) AccessChain 16(I) 33 32 10
+ 38: 6(float) Load 37
+ 39: 6(float) FAdd 36 38
+ 40: 34(ptr) AccessChain 27(O) 32
+ Store 40 39
+ 41:14(HS_Output) Load 27(O)
+ ReturnValue 41
+ FunctionEnd
+24(@main(struct-HS_Input-vf4-vf41[3];u1;):20(HS_Main_Output) Function None 21
+ 22(I): 12(ptr) FunctionParameter
+ 23(cpid): 19(ptr) FunctionParameter
+ 25: Label
+ 45(output): 44(ptr) Variable Function
+ Store 45(output) 47
+ 49: 48(ptr) AccessChain 45(output) 33
+ Store 49 46
+ 50:20(HS_Main_Output) Load 45(output)
+ ReturnValue 50
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.5.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.5.tesc.out
new file mode 100644
index 00000000000..3a42b52e6b7
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.5.tesc.out
@@ -0,0 +1,190 @@
+hlsl.hull.5.tesc
+ERROR: 0:0: '' : unimplemented: PCF input patch without entry point input patch parameter
+ERROR: 1 compilation errors. No code generated.
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+ERROR: node is still EOpNull!
+0:25 Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:25 Function Parameters:
+0:25 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? Sequence
+0:26 Sequence
+0:26 move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:26 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:26 Constant:
+0:26 0.000000
+0:26 0.000000
+0:26 0.000000
+0:26 0.000000
+0:28 move second child to first child ( temp float)
+0:28 fInsideTessFactor: direct index for structure ( temp float)
+0:28 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:28 Constant:
+0:28 1 (const int)
+0:28 add ( temp float)
+0:28 direct index ( temp float)
+0:28 m_Position: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:28 direct index ( temp float)
+0:28 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:30 Branch: Return with expression
+0:30 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:39 Function Definition: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:39 Function Parameters:
+0:39 'cpid' ( in uint)
+0:? Sequence
+0:40 Sequence
+0:40 move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
+0:40 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:40 Constant:
+0:40 0.000000
+0:40 0.000000
+0:40 0.000000
+0:40 0.000000
+0:41 move second child to first child ( temp 4-component vector of float)
+0:41 m_Position: direct index for structure ( temp 4-component vector of float)
+0:41 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0.000000
+0:41 0.000000
+0:41 0.000000
+0:41 0.000000
+0:42 Branch: Return with expression
+0:42 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:39 Function Definition: main( ( temp void)
+0:39 Function Parameters:
+0:? Sequence
+0:39 move second child to first child ( temp uint)
+0:? 'cpid' ( temp uint)
+0:? 'cpid' ( in uint InvocationID)
+0:39 Sequence
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 direct index ( out 4-component vector of float Position)
+0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 0 (const int)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 Function Call: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:? 'cpid' ( temp uint)
+0:39 Constant:
+0:39 0 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:? 'cpid' ( in uint InvocationID)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+ERROR: node is still EOpNull!
+0:25 Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:25 Function Parameters:
+0:25 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:? Sequence
+0:26 Sequence
+0:26 move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:26 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:26 Constant:
+0:26 0.000000
+0:26 0.000000
+0:26 0.000000
+0:26 0.000000
+0:28 move second child to first child ( temp float)
+0:28 fInsideTessFactor: direct index for structure ( temp float)
+0:28 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:28 Constant:
+0:28 1 (const int)
+0:28 add ( temp float)
+0:28 direct index ( temp float)
+0:28 m_Position: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:28 direct index ( temp float)
+0:28 m_Normal: direct index for structure ( temp 4-component vector of float)
+0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:30 Branch: Return with expression
+0:30 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
+0:39 Function Definition: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:39 Function Parameters:
+0:39 'cpid' ( in uint)
+0:? Sequence
+0:40 Sequence
+0:40 move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
+0:40 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:40 Constant:
+0:40 0.000000
+0:40 0.000000
+0:40 0.000000
+0:40 0.000000
+0:41 move second child to first child ( temp 4-component vector of float)
+0:41 m_Position: direct index for structure ( temp 4-component vector of float)
+0:41 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0.000000
+0:41 0.000000
+0:41 0.000000
+0:41 0.000000
+0:42 Branch: Return with expression
+0:42 'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:39 Function Definition: main( ( temp void)
+0:39 Function Parameters:
+0:? Sequence
+0:39 move second child to first child ( temp uint)
+0:? 'cpid' ( temp uint)
+0:? 'cpid' ( in uint InvocationID)
+0:39 Sequence
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 direct index ( out 4-component vector of float Position)
+0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:39 Constant:
+0:39 0 (const int)
+0:39 m_Position: direct index for structure ( temp 4-component vector of float)
+0:39 Function Call: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:? 'cpid' ( temp uint)
+0:39 Constant:
+0:39 0 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:? 'cpid' ( in uint InvocationID)
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
new file mode 100644
index 00000000000..24e4aa7c33b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
@@ -0,0 +1,604 @@
+hlsl.hull.ctrlpt-1.tesc
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+0:? Sequence
+0:27 Function Definition: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:27 Function Parameters:
+0:27 'i' ( in 3-element array of structure{ temp 3-component vector of float val})
+0:27 'cpid' ( in uint)
+0:? Sequence
+0:29 move second child to first child ( temp 3-component vector of float)
+0:29 val: direct index for structure ( temp 3-component vector of float)
+0:29 'o' ( temp structure{ temp 3-component vector of float val})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Construct vec3 ( temp 3-component vector of float)
+0:29 Convert uint to float ( temp float)
+0:29 'cpid' ( in uint)
+0:30 Branch: Return with expression
+0:30 'o' ( temp structure{ temp 3-component vector of float val})
+0:27 Function Definition: main( ( temp void)
+0:27 Function Parameters:
+0:? Sequence
+0:27 move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:27 move second child to first child ( temp uint)
+0:? 'cpid' ( temp uint)
+0:? 'cpid' ( in uint InvocationID)
+0:27 move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:27 indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( in uint InvocationID)
+0:27 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( temp uint)
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'cpid' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 0 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 0 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 1 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 1 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 2 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 2 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Function Call: PCF(struct-hs_out_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 2 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 2 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelInner)
+0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
+0:? Constant:
+0:? 0 (const int)
+0:? flInFactor: direct index for structure ( temp float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 1 (const int)
+0:34 Function Definition: PCF(struct-hs_out_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:34 Function Parameters:
+0:34 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:? Sequence
+0:37 move second child to first child ( temp float)
+0:37 direct index ( temp float)
+0:37 tfactor: direct index for structure ( temp 3-element array of float)
+0:37 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:37 direct index ( temp float)
+0:37 val: direct index for structure ( temp 3-component vector of float)
+0:37 direct index ( temp structure{ temp 3-component vector of float val})
+0:37 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:38 move second child to first child ( temp float)
+0:38 direct index ( temp float)
+0:38 tfactor: direct index for structure ( temp 3-element array of float)
+0:38 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 direct index ( temp float)
+0:38 val: direct index for structure ( temp 3-component vector of float)
+0:38 direct index ( temp structure{ temp 3-component vector of float val})
+0:38 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 tfactor: direct index for structure ( temp 3-element array of float)
+0:39 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 2 (const int)
+0:39 direct index ( temp float)
+0:39 val: direct index for structure ( temp 3-component vector of float)
+0:39 direct index ( temp structure{ temp 3-component vector of float val})
+0:39 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:40 move second child to first child ( temp float)
+0:40 flInFactor: direct index for structure ( temp float)
+0:40 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 4.000000
+0:42 Branch: Return with expression
+0:42 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( in uint InvocationID)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+0:? Sequence
+0:27 Function Definition: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:27 Function Parameters:
+0:27 'i' ( in 3-element array of structure{ temp 3-component vector of float val})
+0:27 'cpid' ( in uint)
+0:? Sequence
+0:29 move second child to first child ( temp 3-component vector of float)
+0:29 val: direct index for structure ( temp 3-component vector of float)
+0:29 'o' ( temp structure{ temp 3-component vector of float val})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Construct vec3 ( temp 3-component vector of float)
+0:29 Convert uint to float ( temp float)
+0:29 'cpid' ( in uint)
+0:30 Branch: Return with expression
+0:30 'o' ( temp structure{ temp 3-component vector of float val})
+0:27 Function Definition: main( ( temp void)
+0:27 Function Parameters:
+0:? Sequence
+0:27 move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:27 move second child to first child ( temp uint)
+0:? 'cpid' ( temp uint)
+0:? 'cpid' ( in uint InvocationID)
+0:27 move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:27 indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( in uint InvocationID)
+0:27 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( temp uint)
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'cpid' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 0 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 0 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 1 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 1 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 2 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 2 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Function Call: PCF(struct-hs_out_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 2 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 2 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelInner)
+0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
+0:? Constant:
+0:? 0 (const int)
+0:? flInFactor: direct index for structure ( temp float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 1 (const int)
+0:34 Function Definition: PCF(struct-hs_out_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:34 Function Parameters:
+0:34 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:? Sequence
+0:37 move second child to first child ( temp float)
+0:37 direct index ( temp float)
+0:37 tfactor: direct index for structure ( temp 3-element array of float)
+0:37 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:37 direct index ( temp float)
+0:37 val: direct index for structure ( temp 3-component vector of float)
+0:37 direct index ( temp structure{ temp 3-component vector of float val})
+0:37 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:38 move second child to first child ( temp float)
+0:38 direct index ( temp float)
+0:38 tfactor: direct index for structure ( temp 3-element array of float)
+0:38 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 direct index ( temp float)
+0:38 val: direct index for structure ( temp 3-component vector of float)
+0:38 direct index ( temp structure{ temp 3-component vector of float val})
+0:38 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 tfactor: direct index for structure ( temp 3-element array of float)
+0:39 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 2 (const int)
+0:39 direct index ( temp float)
+0:39 val: direct index for structure ( temp 3-component vector of float)
+0:39 direct index ( temp structure{ temp 3-component vector of float val})
+0:39 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:40 move second child to first child ( temp float)
+0:40 flInFactor: direct index for structure ( temp float)
+0:40 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 4.000000
+0:42 Branch: Return with expression
+0:42 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( in uint InvocationID)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 124
+
+ Capability Tessellation
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint TessellationControl 4 "main" 41 45 48 94 108
+ ExecutionMode 4 OutputVertices 3
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 SpacingFractionalOdd
+ ExecutionMode 4 VertexOrderCw
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "hs_in_t"
+ MemberName 8(hs_in_t) 0 "val"
+ Name 14 "hs_out_t"
+ MemberName 14(hs_out_t) 0 "val"
+ Name 18 "@main(struct-hs_in_t-vf31[3];u1;"
+ Name 16 "i"
+ Name 17 "cpid"
+ Name 22 "hs_pcf_t"
+ MemberName 22(hs_pcf_t) 0 "tfactor"
+ MemberName 22(hs_pcf_t) 1 "flInFactor"
+ Name 25 "PCF(struct-hs_out_t-vf31[3];"
+ Name 24 "pcf_out"
+ Name 28 "o"
+ Name 39 "i"
+ Name 41 "i"
+ Name 43 "cpid"
+ Name 45 "cpid"
+ Name 48 "@entryPointOutput"
+ Name 50 "param"
+ Name 52 "param"
+ Name 66 "pcf_out"
+ Name 67 "i"
+ Name 68 "param"
+ Name 70 "param"
+ Name 74 "i"
+ Name 75 "param"
+ Name 77 "param"
+ Name 81 "i"
+ Name 82 "param"
+ Name 84 "param"
+ Name 88 "@patchConstantResult"
+ Name 94 "@patchConstantOutput.tfactor"
+ Name 108 "@patchConstantOutput.flInFactor"
+ Name 112 "o"
+ Decorate 41(i) Location 0
+ Decorate 45(cpid) BuiltIn InvocationId
+ Decorate 48(@entryPointOutput) Location 0
+ Decorate 94(@patchConstantOutput.tfactor) Patch
+ Decorate 94(@patchConstantOutput.tfactor) BuiltIn TessLevelOuter
+ Decorate 108(@patchConstantOutput.flInFactor) Patch
+ Decorate 108(@patchConstantOutput.flInFactor) BuiltIn TessLevelInner
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 3
+ 8(hs_in_t): TypeStruct 7(fvec3)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 3
+ 11: TypeArray 8(hs_in_t) 10
+ 12: TypePointer Function 11
+ 13: TypePointer Function 9(int)
+ 14(hs_out_t): TypeStruct 7(fvec3)
+ 15: TypeFunction 14(hs_out_t) 12(ptr) 13(ptr)
+ 20: TypeArray 14(hs_out_t) 10
+ 21: TypeArray 6(float) 10
+ 22(hs_pcf_t): TypeStruct 21 6(float)
+ 23: TypeFunction 22(hs_pcf_t) 20
+ 27: TypePointer Function 14(hs_out_t)
+ 29: TypeInt 32 1
+ 30: 29(int) Constant 0
+ 34: TypePointer Function 7(fvec3)
+ 40: TypePointer Input 11
+ 41(i): 40(ptr) Variable Input
+ 44: TypePointer Input 9(int)
+ 45(cpid): 44(ptr) Variable Input
+ 47: TypePointer Output 20
+48(@entryPointOutput): 47(ptr) Variable Output
+ 55: TypePointer Output 14(hs_out_t)
+ 57: 9(int) Constant 2
+ 58: 9(int) Constant 1
+ 59: 9(int) Constant 0
+ 61: TypeBool
+ 65: TypePointer Function 20
+ 73: 29(int) Constant 1
+ 80: 29(int) Constant 2
+ 87: TypePointer Function 22(hs_pcf_t)
+ 91: 9(int) Constant 4
+ 92: TypeArray 6(float) 91
+ 93: TypePointer Output 92
+94(@patchConstantOutput.tfactor): 93(ptr) Variable Output
+ 95: TypePointer Function 6(float)
+ 98: TypePointer Output 6(float)
+ 106: TypeArray 6(float) 57
+ 107: TypePointer Output 106
+108(@patchConstantOutput.flInFactor): 107(ptr) Variable Output
+ 119: 6(float) Constant 1082130432
+ 4(main): 2 Function None 3
+ 5: Label
+ 39(i): 12(ptr) Variable Function
+ 43(cpid): 13(ptr) Variable Function
+ 50(param): 12(ptr) Variable Function
+ 52(param): 13(ptr) Variable Function
+ 66(pcf_out): 65(ptr) Variable Function
+ 67(i): 12(ptr) Variable Function
+ 68(param): 12(ptr) Variable Function
+ 70(param): 13(ptr) Variable Function
+ 74(i): 12(ptr) Variable Function
+ 75(param): 12(ptr) Variable Function
+ 77(param): 13(ptr) Variable Function
+ 81(i): 12(ptr) Variable Function
+ 82(param): 12(ptr) Variable Function
+ 84(param): 13(ptr) Variable Function
+88(@patchConstantResult): 87(ptr) Variable Function
+ 42: 11 Load 41(i)
+ Store 39(i) 42
+ 46: 9(int) Load 45(cpid)
+ Store 43(cpid) 46
+ 49: 9(int) Load 45(cpid)
+ 51: 11 Load 39(i)
+ Store 50(param) 51
+ 53: 9(int) Load 43(cpid)
+ Store 52(param) 53
+ 54:14(hs_out_t) FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 50(param) 52(param)
+ 56: 55(ptr) AccessChain 48(@entryPointOutput) 49
+ Store 56 54
+ ControlBarrier 57 58 59
+ 60: 9(int) Load 45(cpid)
+ 62: 61(bool) IEqual 60 30
+ SelectionMerge 64 None
+ BranchConditional 62 63 64
+ 63: Label
+ 69: 11 Load 67(i)
+ Store 68(param) 69
+ Store 70(param) 59
+ 71:14(hs_out_t) FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 68(param) 70(param)
+ 72: 27(ptr) AccessChain 66(pcf_out) 30
+ Store 72 71
+ 76: 11 Load 74(i)
+ Store 75(param) 76
+ Store 77(param) 58
+ 78:14(hs_out_t) FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 75(param) 77(param)
+ 79: 27(ptr) AccessChain 66(pcf_out) 73
+ Store 79 78
+ 83: 11 Load 81(i)
+ Store 82(param) 83
+ Store 84(param) 57
+ 85:14(hs_out_t) FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 82(param) 84(param)
+ 86: 27(ptr) AccessChain 66(pcf_out) 80
+ Store 86 85
+ 89: 20 Load 66(pcf_out)
+ 90:22(hs_pcf_t) FunctionCall 25(PCF(struct-hs_out_t-vf31[3];) 89
+ Store 88(@patchConstantResult) 90
+ 96: 95(ptr) AccessChain 88(@patchConstantResult) 30 30
+ 97: 6(float) Load 96
+ 99: 98(ptr) AccessChain 94(@patchConstantOutput.tfactor) 30
+ Store 99 97
+ 100: 95(ptr) AccessChain 88(@patchConstantResult) 30 73
+ 101: 6(float) Load 100
+ 102: 98(ptr) AccessChain 94(@patchConstantOutput.tfactor) 73
+ Store 102 101
+ 103: 95(ptr) AccessChain 88(@patchConstantResult) 30 80
+ 104: 6(float) Load 103
+ 105: 98(ptr) AccessChain 94(@patchConstantOutput.tfactor) 80
+ Store 105 104
+ 109: 95(ptr) AccessChain 88(@patchConstantResult) 73
+ 110: 6(float) Load 109
+ 111: 98(ptr) AccessChain 108(@patchConstantOutput.flInFactor) 30
+ Store 111 110
+ Branch 64
+ 64: Label
+ Return
+ FunctionEnd
+18(@main(struct-hs_in_t-vf31[3];u1;):14(hs_out_t) Function None 15
+ 16(i): 12(ptr) FunctionParameter
+ 17(cpid): 13(ptr) FunctionParameter
+ 19: Label
+ 28(o): 27(ptr) Variable Function
+ 31: 9(int) Load 17(cpid)
+ 32: 6(float) ConvertUToF 31
+ 33: 7(fvec3) CompositeConstruct 32 32 32
+ 35: 34(ptr) AccessChain 28(o) 30
+ Store 35 33
+ 36:14(hs_out_t) Load 28(o)
+ ReturnValue 36
+ FunctionEnd
+25(PCF(struct-hs_out_t-vf31[3];):22(hs_pcf_t) Function None 23
+ 24(pcf_out): 20 FunctionParameter
+ 26: Label
+ 112(o): 87(ptr) Variable Function
+ 113: 6(float) CompositeExtract 24(pcf_out) 0 0 0
+ 114: 95(ptr) AccessChain 112(o) 30 30
+ Store 114 113
+ 115: 6(float) CompositeExtract 24(pcf_out) 1 0 0
+ 116: 95(ptr) AccessChain 112(o) 30 73
+ Store 116 115
+ 117: 6(float) CompositeExtract 24(pcf_out) 2 0 0
+ 118: 95(ptr) AccessChain 112(o) 30 80
+ Store 118 117
+ 120: 95(ptr) AccessChain 112(o) 73
+ Store 120 119
+ 121:22(hs_pcf_t) Load 112(o)
+ ReturnValue 121
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
new file mode 100644
index 00000000000..89582b73daf
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
@@ -0,0 +1,625 @@
+hlsl.hull.ctrlpt-2.tesc
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+0:? Sequence
+0:28 Function Definition: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:28 Function Parameters:
+0:28 'i' ( in 3-element array of structure{ temp 3-component vector of float val})
+0:28 'cpid' ( in uint)
+0:? Sequence
+0:29 val: direct index for structure ( temp 3-component vector of float)
+0:29 direct index ( temp structure{ temp 3-component vector of float val})
+0:29 'i' ( in 3-element array of structure{ temp 3-component vector of float val})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:32 move second child to first child ( temp 3-component vector of float)
+0:32 val: direct index for structure ( temp 3-component vector of float)
+0:32 'o' ( temp structure{ temp 3-component vector of float val})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Construct vec3 ( temp 3-component vector of float)
+0:32 Convert uint to float ( temp float)
+0:32 'cpid' ( in uint)
+0:33 Branch: Return with expression
+0:33 'o' ( temp structure{ temp 3-component vector of float val})
+0:28 Function Definition: main( ( temp void)
+0:28 Function Parameters:
+0:? Sequence
+0:28 move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:28 move second child to first child ( temp uint)
+0:? 'cpid' ( temp uint)
+0:? 'cpid' ( in uint InvocationID)
+0:28 move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:28 indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( in uint InvocationID)
+0:28 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( temp uint)
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'cpid' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 0 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 0 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 1 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 1 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 2 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 2 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Function Call: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 2 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 2 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelInner)
+0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
+0:? Constant:
+0:? 0 (const int)
+0:? flInFactor: direct index for structure ( temp float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 1 (const int)
+0:38 Function Definition: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:38 Function Parameters:
+0:38 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:38 'pcf_in' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:? Sequence
+0:41 move second child to first child ( temp float)
+0:41 direct index ( temp float)
+0:41 tfactor: direct index for structure ( temp 3-element array of float)
+0:41 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 direct index ( temp float)
+0:41 val: direct index for structure ( temp 3-component vector of float)
+0:41 direct index ( temp structure{ temp 3-component vector of float val})
+0:41 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:42 move second child to first child ( temp float)
+0:42 direct index ( temp float)
+0:42 tfactor: direct index for structure ( temp 3-element array of float)
+0:42 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 direct index ( temp float)
+0:42 val: direct index for structure ( temp 3-component vector of float)
+0:42 direct index ( temp structure{ temp 3-component vector of float val})
+0:42 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:43 move second child to first child ( temp float)
+0:43 direct index ( temp float)
+0:43 tfactor: direct index for structure ( temp 3-element array of float)
+0:43 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 direct index ( temp float)
+0:43 val: direct index for structure ( temp 3-component vector of float)
+0:43 direct index ( temp structure{ temp 3-component vector of float val})
+0:43 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:44 move second child to first child ( temp float)
+0:44 flInFactor: direct index for structure ( temp float)
+0:44 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 4.000000
+0:46 Branch: Return with expression
+0:46 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( in uint InvocationID)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+0:? Sequence
+0:28 Function Definition: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:28 Function Parameters:
+0:28 'i' ( in 3-element array of structure{ temp 3-component vector of float val})
+0:28 'cpid' ( in uint)
+0:? Sequence
+0:29 val: direct index for structure ( temp 3-component vector of float)
+0:29 direct index ( temp structure{ temp 3-component vector of float val})
+0:29 'i' ( in 3-element array of structure{ temp 3-component vector of float val})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:32 move second child to first child ( temp 3-component vector of float)
+0:32 val: direct index for structure ( temp 3-component vector of float)
+0:32 'o' ( temp structure{ temp 3-component vector of float val})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Construct vec3 ( temp 3-component vector of float)
+0:32 Convert uint to float ( temp float)
+0:32 'cpid' ( in uint)
+0:33 Branch: Return with expression
+0:33 'o' ( temp structure{ temp 3-component vector of float val})
+0:28 Function Definition: main( ( temp void)
+0:28 Function Parameters:
+0:? Sequence
+0:28 move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:28 move second child to first child ( temp uint)
+0:? 'cpid' ( temp uint)
+0:? 'cpid' ( in uint InvocationID)
+0:28 move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:28 indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( in uint InvocationID)
+0:28 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( temp uint)
+0:? Barrier ( temp void)
+0:? Test condition and select ( temp void)
+0:? Condition
+0:? Compare Equal ( temp bool)
+0:? 'cpid' ( in uint InvocationID)
+0:? Constant:
+0:? 0 (const int)
+0:? true case
+0:? Sequence
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 0 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 0 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 1 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 1 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-component vector of float val})
+0:? direct index ( temp structure{ temp 3-component vector of float val})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 2 (const int)
+0:? Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Constant:
+0:? 2 (const uint)
+0:? move second child to first child ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Function Call: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
+0:? Sequence
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 0 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 0 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 1 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 1 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelOuter)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? Constant:
+0:? 2 (const int)
+0:? direct index ( temp float)
+0:? tfactor: direct index for structure ( temp 3-element array of float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 0 (const int)
+0:? Constant:
+0:? 2 (const int)
+0:? move second child to first child ( temp float)
+0:? direct index ( patch out float TessLevelInner)
+0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
+0:? Constant:
+0:? 0 (const int)
+0:? flInFactor: direct index for structure ( temp float)
+0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Constant:
+0:? 1 (const int)
+0:38 Function Definition: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:38 Function Parameters:
+0:38 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:38 'pcf_in' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:? Sequence
+0:41 move second child to first child ( temp float)
+0:41 direct index ( temp float)
+0:41 tfactor: direct index for structure ( temp 3-element array of float)
+0:41 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 direct index ( temp float)
+0:41 val: direct index for structure ( temp 3-component vector of float)
+0:41 direct index ( temp structure{ temp 3-component vector of float val})
+0:41 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:42 move second child to first child ( temp float)
+0:42 direct index ( temp float)
+0:42 tfactor: direct index for structure ( temp 3-element array of float)
+0:42 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 direct index ( temp float)
+0:42 val: direct index for structure ( temp 3-component vector of float)
+0:42 direct index ( temp structure{ temp 3-component vector of float val})
+0:42 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:43 move second child to first child ( temp float)
+0:43 direct index ( temp float)
+0:43 tfactor: direct index for structure ( temp 3-element array of float)
+0:43 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 direct index ( temp float)
+0:43 val: direct index for structure ( temp 3-component vector of float)
+0:43 direct index ( temp structure{ temp 3-component vector of float val})
+0:43 'pcf_out' ( const (read only) 3-element array of structure{ temp 3-component vector of float val})
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:44 move second child to first child ( temp float)
+0:44 flInFactor: direct index for structure ( temp float)
+0:44 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 4.000000
+0:46 Branch: Return with expression
+0:46 'o' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
+0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:? 'cpid' ( in uint InvocationID)
+0:? '@patchConstantOutput.tfactor' ( patch out 4-element array of float TessLevelOuter)
+0:? '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 126
+
+ Capability Tessellation
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint TessellationControl 4 "main" 42 46 49 96 110
+ ExecutionMode 4 OutputVertices 3
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 SpacingFractionalOdd
+ ExecutionMode 4 VertexOrderCw
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "hs_in_t"
+ MemberName 8(hs_in_t) 0 "val"
+ Name 14 "hs_out_t"
+ MemberName 14(hs_out_t) 0 "val"
+ Name 18 "@main(struct-hs_in_t-vf31[3];u1;"
+ Name 16 "i"
+ Name 17 "cpid"
+ Name 22 "hs_pcf_t"
+ MemberName 22(hs_pcf_t) 0 "tfactor"
+ MemberName 22(hs_pcf_t) 1 "flInFactor"
+ Name 26 "PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3];"
+ Name 24 "pcf_out"
+ Name 25 "pcf_in"
+ Name 31 "o"
+ Name 40 "i"
+ Name 42 "i"
+ Name 44 "cpid"
+ Name 46 "cpid"
+ Name 49 "@entryPointOutput"
+ Name 51 "param"
+ Name 53 "param"
+ Name 67 "pcf_out"
+ Name 68 "i"
+ Name 69 "param"
+ Name 71 "param"
+ Name 75 "i"
+ Name 76 "param"
+ Name 78 "param"
+ Name 82 "i"
+ Name 83 "param"
+ Name 85 "param"
+ Name 89 "@patchConstantResult"
+ Name 96 "@patchConstantOutput.tfactor"
+ Name 110 "@patchConstantOutput.flInFactor"
+ Name 114 "o"
+ Decorate 42(i) Location 0
+ Decorate 46(cpid) BuiltIn InvocationId
+ Decorate 49(@entryPointOutput) Location 0
+ Decorate 96(@patchConstantOutput.tfactor) Patch
+ Decorate 96(@patchConstantOutput.tfactor) BuiltIn TessLevelOuter
+ Decorate 110(@patchConstantOutput.flInFactor) Patch
+ Decorate 110(@patchConstantOutput.flInFactor) BuiltIn TessLevelInner
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 3
+ 8(hs_in_t): TypeStruct 7(fvec3)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 3
+ 11: TypeArray 8(hs_in_t) 10
+ 12: TypePointer Function 11
+ 13: TypePointer Function 9(int)
+ 14(hs_out_t): TypeStruct 7(fvec3)
+ 15: TypeFunction 14(hs_out_t) 12(ptr) 13(ptr)
+ 20: TypeArray 14(hs_out_t) 10
+ 21: TypeArray 6(float) 10
+ 22(hs_pcf_t): TypeStruct 21 6(float)
+ 23: TypeFunction 22(hs_pcf_t) 20 11
+ 28: TypeInt 32 1
+ 29: 28(int) Constant 0
+ 30: TypePointer Function 14(hs_out_t)
+ 35: TypePointer Function 7(fvec3)
+ 41: TypePointer Input 11
+ 42(i): 41(ptr) Variable Input
+ 45: TypePointer Input 9(int)
+ 46(cpid): 45(ptr) Variable Input
+ 48: TypePointer Output 20
+49(@entryPointOutput): 48(ptr) Variable Output
+ 56: TypePointer Output 14(hs_out_t)
+ 58: 9(int) Constant 2
+ 59: 9(int) Constant 1
+ 60: 9(int) Constant 0
+ 62: TypeBool
+ 66: TypePointer Function 20
+ 74: 28(int) Constant 1
+ 81: 28(int) Constant 2
+ 88: TypePointer Function 22(hs_pcf_t)
+ 93: 9(int) Constant 4
+ 94: TypeArray 6(float) 93
+ 95: TypePointer Output 94
+96(@patchConstantOutput.tfactor): 95(ptr) Variable Output
+ 97: TypePointer Function 6(float)
+ 100: TypePointer Output 6(float)
+ 108: TypeArray 6(float) 58
+ 109: TypePointer Output 108
+110(@patchConstantOutput.flInFactor): 109(ptr) Variable Output
+ 121: 6(float) Constant 1082130432
+ 4(main): 2 Function None 3
+ 5: Label
+ 40(i): 12(ptr) Variable Function
+ 44(cpid): 13(ptr) Variable Function
+ 51(param): 12(ptr) Variable Function
+ 53(param): 13(ptr) Variable Function
+ 67(pcf_out): 66(ptr) Variable Function
+ 68(i): 12(ptr) Variable Function
+ 69(param): 12(ptr) Variable Function
+ 71(param): 13(ptr) Variable Function
+ 75(i): 12(ptr) Variable Function
+ 76(param): 12(ptr) Variable Function
+ 78(param): 13(ptr) Variable Function
+ 82(i): 12(ptr) Variable Function
+ 83(param): 12(ptr) Variable Function
+ 85(param): 13(ptr) Variable Function
+89(@patchConstantResult): 88(ptr) Variable Function
+ 43: 11 Load 42(i)
+ Store 40(i) 43
+ 47: 9(int) Load 46(cpid)
+ Store 44(cpid) 47
+ 50: 9(int) Load 46(cpid)
+ 52: 11 Load 40(i)
+ Store 51(param) 52
+ 54: 9(int) Load 44(cpid)
+ Store 53(param) 54
+ 55:14(hs_out_t) FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 51(param) 53(param)
+ 57: 56(ptr) AccessChain 49(@entryPointOutput) 50
+ Store 57 55
+ ControlBarrier 58 59 60
+ 61: 9(int) Load 46(cpid)
+ 63: 62(bool) IEqual 61 29
+ SelectionMerge 65 None
+ BranchConditional 63 64 65
+ 64: Label
+ 70: 11 Load 68(i)
+ Store 69(param) 70
+ Store 71(param) 60
+ 72:14(hs_out_t) FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 69(param) 71(param)
+ 73: 30(ptr) AccessChain 67(pcf_out) 29
+ Store 73 72
+ 77: 11 Load 75(i)
+ Store 76(param) 77
+ Store 78(param) 59
+ 79:14(hs_out_t) FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 76(param) 78(param)
+ 80: 30(ptr) AccessChain 67(pcf_out) 74
+ Store 80 79
+ 84: 11 Load 82(i)
+ Store 83(param) 84
+ Store 85(param) 58
+ 86:14(hs_out_t) FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 83(param) 85(param)
+ 87: 30(ptr) AccessChain 67(pcf_out) 81
+ Store 87 86
+ 90: 20 Load 67(pcf_out)
+ 91: 11 Load 40(i)
+ 92:22(hs_pcf_t) FunctionCall 26(PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3];) 90 91
+ Store 89(@patchConstantResult) 92
+ 98: 97(ptr) AccessChain 89(@patchConstantResult) 29 29
+ 99: 6(float) Load 98
+ 101: 100(ptr) AccessChain 96(@patchConstantOutput.tfactor) 29
+ Store 101 99
+ 102: 97(ptr) AccessChain 89(@patchConstantResult) 29 74
+ 103: 6(float) Load 102
+ 104: 100(ptr) AccessChain 96(@patchConstantOutput.tfactor) 74
+ Store 104 103
+ 105: 97(ptr) AccessChain 89(@patchConstantResult) 29 81
+ 106: 6(float) Load 105
+ 107: 100(ptr) AccessChain 96(@patchConstantOutput.tfactor) 81
+ Store 107 106
+ 111: 97(ptr) AccessChain 89(@patchConstantResult) 74
+ 112: 6(float) Load 111
+ 113: 100(ptr) AccessChain 110(@patchConstantOutput.flInFactor) 29
+ Store 113 112
+ Branch 65
+ 65: Label
+ Return
+ FunctionEnd
+18(@main(struct-hs_in_t-vf31[3];u1;):14(hs_out_t) Function None 15
+ 16(i): 12(ptr) FunctionParameter
+ 17(cpid): 13(ptr) FunctionParameter
+ 19: Label
+ 31(o): 30(ptr) Variable Function
+ 32: 9(int) Load 17(cpid)
+ 33: 6(float) ConvertUToF 32
+ 34: 7(fvec3) CompositeConstruct 33 33 33
+ 36: 35(ptr) AccessChain 31(o) 29
+ Store 36 34
+ 37:14(hs_out_t) Load 31(o)
+ ReturnValue 37
+ FunctionEnd
+26(PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3];):22(hs_pcf_t) Function None 23
+ 24(pcf_out): 20 FunctionParameter
+ 25(pcf_in): 11 FunctionParameter
+ 27: Label
+ 114(o): 88(ptr) Variable Function
+ 115: 6(float) CompositeExtract 24(pcf_out) 0 0 0
+ 116: 97(ptr) AccessChain 114(o) 29 29
+ Store 116 115
+ 117: 6(float) CompositeExtract 24(pcf_out) 1 0 0
+ 118: 97(ptr) AccessChain 114(o) 29 74
+ Store 118 117
+ 119: 6(float) CompositeExtract 24(pcf_out) 2 0 0
+ 120: 97(ptr) AccessChain 114(o) 29 81
+ Store 120 119
+ 122: 97(ptr) AccessChain 114(o) 74
+ Store 122 121
+ 123:22(hs_pcf_t) Load 114(o)
+ ReturnValue 123
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.void.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.void.tesc.out
index a2d0a1c7420..68524d9d2ee 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.void.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hull.void.tesc.out
@@ -1,6 +1,8 @@
hlsl.hull.void.tesc
-Shader version: 450
+Shader version: 500
vertices = 3
+vertex spacing = fractional_even_spacing
+triangle order = ccw
0:? Sequence
0:26 Function Definition: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
0:26 Function Parameters:
@@ -27,7 +29,9 @@ vertices = 3
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:? Barrier ( temp void)
@@ -38,11 +42,12 @@ vertices = 3
0:? Constant:
0:? 0 (const int)
0:? true case
-0:? Function Call: PCF( ( temp void)
+0:? Sequence
+0:? Function Call: PCF( ( temp void)
0:33 Function Definition: PCF( ( temp void)
0:33 Function Parameters:
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'InvocationId' ( in uint InvocationID)
@@ -50,8 +55,10 @@ vertices = 3
Linked tessellation control stage:
-Shader version: 450
+Shader version: 500
vertices = 3
+vertex spacing = fractional_even_spacing
+triangle order = ccw
0:? Sequence
0:26 Function Definition: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
0:26 Function Parameters:
@@ -78,7 +85,9 @@ vertices = 3
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
+0:? 'InvocationId' ( in uint InvocationID)
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:? Barrier ( temp void)
@@ -89,23 +98,28 @@ vertices = 3
0:? Constant:
0:? 0 (const int)
0:? true case
-0:? Function Call: PCF( ( temp void)
+0:? Sequence
+0:? Function Call: PCF( ( temp void)
0:33 Function Definition: PCF( ( temp void)
0:33 Function Parameters:
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp 3-component vector of float cpoint})
+0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'InvocationId' ( in uint InvocationID)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 51
+// Generated by (magic number): 80002
+// Id's are bound by 55
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint TessellationControl 4 "main" 33 36 44
+ EntryPoint TessellationControl 4 "main" 33 37 39
ExecutionMode 4 OutputVertices 3
+ ExecutionMode 4 Triangles
+ ExecutionMode 4 SpacingFractionalEven
+ ExecutionMode 4 VertexOrderCcw
+ Source HLSL 500
Name 4 "main"
Name 8 "VS_OUT"
MemberName 8(VS_OUT) 0 "cpoint"
@@ -117,12 +131,12 @@ vertices = 3
Name 21 "output"
Name 31 "ip"
Name 33 "ip"
- Name 36 "@entryPointOutput"
- Name 37 "param"
- Name 44 "InvocationId"
+ Name 37 "@entryPointOutput"
+ Name 39 "InvocationId"
+ Name 41 "param"
Decorate 33(ip) Location 0
- Decorate 36(@entryPointOutput) Location 0
- Decorate 44(InvocationId) BuiltIn InvocationId
+ Decorate 37(@entryPointOutput) Location 0
+ Decorate 39(InvocationId) BuiltIn InvocationId
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -140,33 +154,37 @@ vertices = 3
24: TypePointer Function 7(fvec3)
32: TypePointer Input 11
33(ip): 32(ptr) Variable Input
- 35: TypePointer Output 13(HS_OUT)
-36(@entryPointOutput): 35(ptr) Variable Output
- 40: 9(int) Constant 2
- 41: 9(int) Constant 1
- 42: 9(int) Constant 0
- 43: TypePointer Input 9(int)
-44(InvocationId): 43(ptr) Variable Input
- 46: TypeBool
+ 35: TypeArray 13(HS_OUT) 10
+ 36: TypePointer Output 35
+37(@entryPointOutput): 36(ptr) Variable Output
+ 38: TypePointer Input 9(int)
+39(InvocationId): 38(ptr) Variable Input
+ 44: TypePointer Output 13(HS_OUT)
+ 46: 9(int) Constant 2
+ 47: 9(int) Constant 1
+ 48: 9(int) Constant 0
+ 50: TypeBool
4(main): 2 Function None 3
5: Label
31(ip): 12(ptr) Variable Function
- 37(param): 12(ptr) Variable Function
+ 41(param): 12(ptr) Variable Function
34: 11 Load 33(ip)
Store 31(ip) 34
- 38: 11 Load 31(ip)
- Store 37(param) 38
- 39: 13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[3];) 37(param)
- Store 36(@entryPointOutput) 39
- ControlBarrier 40 41 42
- 45: 9(int) Load 44(InvocationId)
- 47: 46(bool) IEqual 45 23
- SelectionMerge 49 None
- BranchConditional 47 48 49
- 48: Label
- 50: 2 FunctionCall 18(PCF()
- Branch 49
- 49: Label
+ 40: 9(int) Load 39(InvocationId)
+ 42: 11 Load 31(ip)
+ Store 41(param) 42
+ 43: 13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[3];) 41(param)
+ 45: 44(ptr) AccessChain 37(@entryPointOutput) 40
+ Store 45 43
+ ControlBarrier 46 47 48
+ 49: 9(int) Load 39(InvocationId)
+ 51: 50(bool) IEqual 49 23
+ SelectionMerge 53 None
+ BranchConditional 51 52 53
+ 52: Label
+ 54: 2 FunctionCall 18(PCF()
+ Branch 53
+ 53: Label
Return
FunctionEnd
16(@main(struct-VS_OUT-vf31[3];): 13(HS_OUT) Function None 14
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.identifier.sample.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.identifier.sample.frag.out
index 3583141ce6b..356a212536f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.identifier.sample.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.identifier.sample.frag.out
@@ -1,5 +1,5 @@
hlsl.identifier.sample.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: sample(i1; ( temp int)
@@ -44,7 +44,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: sample(i1; ( temp int)
@@ -86,7 +86,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 33
Capability Shader
@@ -94,6 +94,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 31
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 10 "sample(i1;"
Name 9 "x"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.if.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.if.frag.out
index 6f887ca78d2..8490324080e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.if.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.if.frag.out
@@ -1,5 +1,5 @@
hlsl.if.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -69,12 +69,13 @@ gl_FragCoord origin is upper left
0:26 'input' ( in 4-component vector of float)
0:30 Test condition and select ( temp void)
0:30 Condition
-0:30 move second child to first child ( temp float)
-0:30 'ii' ( temp float)
-0:30 direct index ( temp float)
-0:30 'input' ( in 4-component vector of float)
-0:30 Constant:
-0:30 2 (const int)
+0:30 Convert float to bool ( temp bool)
+0:30 move second child to first child ( temp float)
+0:30 'ii' ( temp float)
+0:30 direct index ( temp float)
+0:30 'input' ( in 4-component vector of float)
+0:30 Constant:
+0:30 2 (const int)
0:30 true case
0:31 Pre-Increment ( temp float)
0:31 'ii' ( temp float)
@@ -108,7 +109,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -178,12 +179,13 @@ gl_FragCoord origin is upper left
0:26 'input' ( in 4-component vector of float)
0:30 Test condition and select ( temp void)
0:30 Condition
-0:30 move second child to first child ( temp float)
-0:30 'ii' ( temp float)
-0:30 direct index ( temp float)
-0:30 'input' ( in 4-component vector of float)
-0:30 Constant:
-0:30 2 (const int)
+0:30 Convert float to bool ( temp bool)
+0:30 move second child to first child ( temp float)
+0:30 'ii' ( temp float)
+0:30 direct index ( temp float)
+0:30 'input' ( in 4-component vector of float)
+0:30 Constant:
+0:30 2 (const int)
0:30 true case
0:31 Pre-Increment ( temp float)
0:31 'ii' ( temp float)
@@ -214,25 +216,26 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 101
+// Generated by (magic number): 80002
+// Id's are bound by 103
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 94 97
+ EntryPoint Fragment 4 "PixelShaderFunction" 96 99
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "@PixelShaderFunction(vf4;"
Name 10 "input"
Name 68 "ii"
- Name 80 "ii"
- Name 92 "input"
+ Name 82 "ii"
Name 94 "input"
- Name 97 "@entryPointOutput"
- Name 98 "param"
- Decorate 94(input) Location 0
- Decorate 97(@entryPointOutput) Location 0
+ Name 96 "input"
+ Name 99 "@entryPointOutput"
+ Name 100 "param"
+ Decorate 96(input) Location 0
+ Decorate 99(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -244,31 +247,32 @@ gl_FragCoord origin is upper left
67: TypePointer Function 6(float)
69: TypeInt 32 0
70: 69(int) Constant 2
- 76: 6(float) Constant 1065353216
- 78: TypeInt 32 1
- 79: TypePointer Function 78(int)
- 82: 78(int) Constant 1
- 93: TypePointer Input 7(fvec4)
- 94(input): 93(ptr) Variable Input
- 96: TypePointer Output 7(fvec4)
-97(@entryPointOutput): 96(ptr) Variable Output
+ 73: 6(float) Constant 0
+ 78: 6(float) Constant 1065353216
+ 80: TypeInt 32 1
+ 81: TypePointer Function 80(int)
+ 84: 80(int) Constant 1
+ 95: TypePointer Input 7(fvec4)
+ 96(input): 95(ptr) Variable Input
+ 98: TypePointer Output 7(fvec4)
+99(@entryPointOutput): 98(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
- 92(input): 8(ptr) Variable Function
- 98(param): 8(ptr) Variable Function
- 95: 7(fvec4) Load 94(input)
- Store 92(input) 95
- 99: 7(fvec4) Load 92(input)
- Store 98(param) 99
- 100: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 98(param)
- Store 97(@entryPointOutput) 100
+ 94(input): 8(ptr) Variable Function
+ 100(param): 8(ptr) Variable Function
+ 97: 7(fvec4) Load 96(input)
+ Store 94(input) 97
+ 101: 7(fvec4) Load 94(input)
+ Store 100(param) 101
+ 102: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 100(param)
+ Store 99(@entryPointOutput) 102
Return
FunctionEnd
11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9
10(input): 8(ptr) FunctionParameter
12: Label
68(ii): 67(ptr) Variable Function
- 80(ii): 79(ptr) Variable Function
+ 82(ii): 81(ptr) Variable Function
13: 7(fvec4) Load 10(input)
14: 7(fvec4) Load 10(input)
17: 16(bvec4) FOrdEqual 13 14
@@ -315,7 +319,7 @@ gl_FragCoord origin is upper left
48: 7(fvec4) Load 10(input)
49: 16(bvec4) FOrdEqual 47 48
50: 15(bool) All 49
- SelectionMerge 52 None
+ SelectionMerge 52 Flatten
BranchConditional 50 51 52
51: Label
53: 7(fvec4) Load 10(input)
@@ -338,28 +342,29 @@ gl_FragCoord origin is upper left
71: 67(ptr) AccessChain 10(input) 70
72: 6(float) Load 71
Store 68(ii) 72
- SelectionMerge 74 None
- BranchConditional 72 73 74
- 73: Label
- 75: 6(float) Load 68(ii)
- 77: 6(float) FAdd 75 76
- Store 68(ii) 77
- Branch 74
- 74: Label
- 81: 78(int) Load 80(ii)
- 83: 78(int) IAdd 81 82
- Store 80(ii) 83
- 84: 78(int) Load 80(ii)
- 85: 6(float) ConvertSToF 84
- 86: 15(bool) FOrdEqual 85 76
- SelectionMerge 88 None
- BranchConditional 86 87 88
- 87: Label
- 89: 78(int) Load 80(ii)
- 90: 78(int) IAdd 89 82
- Store 80(ii) 90
- Branch 88
- 88: Label
- 91: 7(fvec4) Undef
- ReturnValue 91
+ 74: 15(bool) FOrdNotEqual 72 73
+ SelectionMerge 76 None
+ BranchConditional 74 75 76
+ 75: Label
+ 77: 6(float) Load 68(ii)
+ 79: 6(float) FAdd 77 78
+ Store 68(ii) 79
+ Branch 76
+ 76: Label
+ 83: 80(int) Load 82(ii)
+ 85: 80(int) IAdd 83 84
+ Store 82(ii) 85
+ 86: 80(int) Load 82(ii)
+ 87: 6(float) ConvertSToF 86
+ 88: 15(bool) FOrdEqual 87 78
+ SelectionMerge 90 None
+ BranchConditional 88 89 90
+ 89: Label
+ 91: 80(int) Load 82(ii)
+ 92: 80(int) IAdd 91 84
+ Store 82(ii) 92
+ Branch 90
+ 90: Label
+ 93: 7(fvec4) Undef
+ ReturnValue 93
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.implicitBool.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.implicitBool.frag.out
new file mode 100644
index 00000000000..2da4fae3393
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.implicitBool.frag.out
@@ -0,0 +1,541 @@
+hlsl.implicitBool.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main( ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 'a' ( temp 4-component vector of float)
+0:? Constant:
+0:? 2.000000
+0:? 2.000000
+0:? 2.000000
+0:? 2.000000
+0:9 Test condition and select ( temp void)
+0:9 Condition
+0:9 Convert int to bool ( temp bool)
+0:9 condi: direct index for structure ( uniform int)
+0:9 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:9 Constant:
+0:9 1 (const uint)
+0:9 true case
+0:10 Branch: Return with expression
+0:10 add ( temp 4-component vector of float)
+0:10 'a' ( temp 4-component vector of float)
+0:10 Constant:
+0:10 1.000000
+0:11 Test condition and select ( temp void)
+0:11 Condition
+0:11 Convert float to bool ( temp bool)
+0:11 condf: direct index for structure ( uniform float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:11 Constant:
+0:11 0 (const uint)
+0:11 true case
+0:12 Branch: Return with expression
+0:12 add ( temp 4-component vector of float)
+0:12 'a' ( temp 4-component vector of float)
+0:12 Constant:
+0:12 2.000000
+0:13 Test condition and select ( temp void)
+0:13 Condition
+0:13 Convert float to bool ( temp bool)
+0:13 condf1: direct index for structure ( uniform 1-component vector of float)
+0:13 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:13 Constant:
+0:13 2 (const uint)
+0:13 true case
+0:14 Branch: Return with expression
+0:14 add ( temp 4-component vector of float)
+0:14 'a' ( temp 4-component vector of float)
+0:14 Constant:
+0:14 3.000000
+0:15 Test condition and select ( temp void)
+0:15 Condition
+0:15 Convert int to bool ( temp bool)
+0:15 condi1: direct index for structure ( uniform 1-component vector of int)
+0:15 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:15 Constant:
+0:15 3 (const uint)
+0:15 true case
+0:16 Branch: Return with expression
+0:16 add ( temp 4-component vector of float)
+0:16 'a' ( temp 4-component vector of float)
+0:16 Constant:
+0:16 4.000000
+0:17 Test condition and select ( temp void)
+0:17 Condition
+0:17 logical-or ( temp bool)
+0:17 logical-and ( temp bool)
+0:17 Convert int to bool ( temp bool)
+0:17 condi: direct index for structure ( uniform int)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:17 Constant:
+0:17 1 (const uint)
+0:17 Convert int to bool ( temp bool)
+0:17 Convert float to int ( temp int)
+0:17 condf: direct index for structure ( uniform float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:17 Constant:
+0:17 0 (const uint)
+0:17 Convert float to bool ( temp bool)
+0:17 condf1: direct index for structure ( uniform 1-component vector of float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:17 Constant:
+0:17 2 (const uint)
+0:17 true case
+0:18 Branch: Return with expression
+0:18 add ( temp 4-component vector of float)
+0:18 'a' ( temp 4-component vector of float)
+0:18 Constant:
+0:18 5.000000
+0:20 Sequence
+0:20 move second child to first child ( temp float)
+0:20 'f' ( temp float)
+0:20 condf: direct index for structure ( uniform float)
+0:20 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:20 Constant:
+0:20 0 (const uint)
+0:21 Loop with condition tested first
+0:21 Loop Condition
+0:21 Convert float to bool ( temp bool)
+0:21 'f' ( temp float)
+0:21 Loop Body
+0:? Sequence
+0:21 Pre-Decrement ( temp float)
+0:21 'f' ( temp float)
+0:23 Sequence
+0:23 move second child to first child ( temp int)
+0:23 'i' ( temp int)
+0:23 condi: direct index for structure ( uniform int)
+0:23 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:23 Constant:
+0:23 1 (const uint)
+0:24 Loop with condition not tested first
+0:24 Loop Condition
+0:24 Convert int to bool ( temp bool)
+0:24 'i' ( temp int)
+0:24 Loop Body
+0:? Sequence
+0:24 Pre-Decrement ( temp int)
+0:24 'i' ( temp int)
+0:? Sequence
+0:26 Loop with condition tested first
+0:26 Loop Condition
+0:26 Convert int to bool ( temp bool)
+0:26 'i' ( temp int)
+0:26 Loop Body
+0:? Sequence
+0:26 Pre-Decrement ( temp int)
+0:26 'i' ( temp int)
+0:28 Sequence
+0:28 move second child to first child ( temp float)
+0:28 'g' ( temp float)
+0:28 Test condition and select ( temp float)
+0:28 Condition
+0:28 Convert float to bool ( temp bool)
+0:28 condf: direct index for structure ( uniform float)
+0:28 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:28 Constant:
+0:28 0 (const uint)
+0:28 true case
+0:28 Constant:
+0:28 7.000000
+0:28 false case
+0:28 Constant:
+0:28 8.000000
+0:29 add second child into first child ( temp 4-component vector of float)
+0:29 'a' ( temp 4-component vector of float)
+0:29 'g' ( temp float)
+0:31 Branch: Return with expression
+0:31 subtract ( temp 4-component vector of float)
+0:31 'a' ( temp 4-component vector of float)
+0:31 Constant:
+0:31 1.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main( ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 'a' ( temp 4-component vector of float)
+0:? Constant:
+0:? 2.000000
+0:? 2.000000
+0:? 2.000000
+0:? 2.000000
+0:9 Test condition and select ( temp void)
+0:9 Condition
+0:9 Convert int to bool ( temp bool)
+0:9 condi: direct index for structure ( uniform int)
+0:9 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:9 Constant:
+0:9 1 (const uint)
+0:9 true case
+0:10 Branch: Return with expression
+0:10 add ( temp 4-component vector of float)
+0:10 'a' ( temp 4-component vector of float)
+0:10 Constant:
+0:10 1.000000
+0:11 Test condition and select ( temp void)
+0:11 Condition
+0:11 Convert float to bool ( temp bool)
+0:11 condf: direct index for structure ( uniform float)
+0:11 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:11 Constant:
+0:11 0 (const uint)
+0:11 true case
+0:12 Branch: Return with expression
+0:12 add ( temp 4-component vector of float)
+0:12 'a' ( temp 4-component vector of float)
+0:12 Constant:
+0:12 2.000000
+0:13 Test condition and select ( temp void)
+0:13 Condition
+0:13 Convert float to bool ( temp bool)
+0:13 condf1: direct index for structure ( uniform 1-component vector of float)
+0:13 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:13 Constant:
+0:13 2 (const uint)
+0:13 true case
+0:14 Branch: Return with expression
+0:14 add ( temp 4-component vector of float)
+0:14 'a' ( temp 4-component vector of float)
+0:14 Constant:
+0:14 3.000000
+0:15 Test condition and select ( temp void)
+0:15 Condition
+0:15 Convert int to bool ( temp bool)
+0:15 condi1: direct index for structure ( uniform 1-component vector of int)
+0:15 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:15 Constant:
+0:15 3 (const uint)
+0:15 true case
+0:16 Branch: Return with expression
+0:16 add ( temp 4-component vector of float)
+0:16 'a' ( temp 4-component vector of float)
+0:16 Constant:
+0:16 4.000000
+0:17 Test condition and select ( temp void)
+0:17 Condition
+0:17 logical-or ( temp bool)
+0:17 logical-and ( temp bool)
+0:17 Convert int to bool ( temp bool)
+0:17 condi: direct index for structure ( uniform int)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:17 Constant:
+0:17 1 (const uint)
+0:17 Convert int to bool ( temp bool)
+0:17 Convert float to int ( temp int)
+0:17 condf: direct index for structure ( uniform float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:17 Constant:
+0:17 0 (const uint)
+0:17 Convert float to bool ( temp bool)
+0:17 condf1: direct index for structure ( uniform 1-component vector of float)
+0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:17 Constant:
+0:17 2 (const uint)
+0:17 true case
+0:18 Branch: Return with expression
+0:18 add ( temp 4-component vector of float)
+0:18 'a' ( temp 4-component vector of float)
+0:18 Constant:
+0:18 5.000000
+0:20 Sequence
+0:20 move second child to first child ( temp float)
+0:20 'f' ( temp float)
+0:20 condf: direct index for structure ( uniform float)
+0:20 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:20 Constant:
+0:20 0 (const uint)
+0:21 Loop with condition tested first
+0:21 Loop Condition
+0:21 Convert float to bool ( temp bool)
+0:21 'f' ( temp float)
+0:21 Loop Body
+0:? Sequence
+0:21 Pre-Decrement ( temp float)
+0:21 'f' ( temp float)
+0:23 Sequence
+0:23 move second child to first child ( temp int)
+0:23 'i' ( temp int)
+0:23 condi: direct index for structure ( uniform int)
+0:23 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:23 Constant:
+0:23 1 (const uint)
+0:24 Loop with condition not tested first
+0:24 Loop Condition
+0:24 Convert int to bool ( temp bool)
+0:24 'i' ( temp int)
+0:24 Loop Body
+0:? Sequence
+0:24 Pre-Decrement ( temp int)
+0:24 'i' ( temp int)
+0:? Sequence
+0:26 Loop with condition tested first
+0:26 Loop Condition
+0:26 Convert int to bool ( temp bool)
+0:26 'i' ( temp int)
+0:26 Loop Body
+0:? Sequence
+0:26 Pre-Decrement ( temp int)
+0:26 'i' ( temp int)
+0:28 Sequence
+0:28 move second child to first child ( temp float)
+0:28 'g' ( temp float)
+0:28 Test condition and select ( temp float)
+0:28 Condition
+0:28 Convert float to bool ( temp bool)
+0:28 condf: direct index for structure ( uniform float)
+0:28 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:28 Constant:
+0:28 0 (const uint)
+0:28 true case
+0:28 Constant:
+0:28 7.000000
+0:28 false case
+0:28 Constant:
+0:28 8.000000
+0:29 add second child into first child ( temp 4-component vector of float)
+0:29 'a' ( temp 4-component vector of float)
+0:29 'g' ( temp float)
+0:31 Branch: Return with expression
+0:31 subtract ( temp 4-component vector of float)
+0:31 'a' ( temp 4-component vector of float)
+0:31 Constant:
+0:31 1.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 140
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 138
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 12 "a"
+ Name 16 "$Global"
+ MemberName 16($Global) 0 "condf"
+ MemberName 16($Global) 1 "condi"
+ MemberName 16($Global) 2 "condf1"
+ MemberName 16($Global) 3 "condi1"
+ Name 18 ""
+ Name 88 "f"
+ Name 101 "i"
+ Name 121 "g"
+ Name 138 "@entryPointOutput"
+ MemberDecorate 16($Global) 0 Offset 0
+ MemberDecorate 16($Global) 1 Offset 4
+ MemberDecorate 16($Global) 2 Offset 16
+ MemberDecorate 16($Global) 3 Offset 32
+ Decorate 16($Global) Block
+ Decorate 18 DescriptorSet 0
+ Decorate 138(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypePointer Function 7(fvec4)
+ 13: 6(float) Constant 1073741824
+ 14: 7(fvec4) ConstantComposite 13 13 13 13
+ 15: TypeInt 32 1
+ 16($Global): TypeStruct 6(float) 15(int) 6(float) 15(int)
+ 17: TypePointer Uniform 16($Global)
+ 18: 17(ptr) Variable Uniform
+ 19: 15(int) Constant 1
+ 20: TypePointer Uniform 15(int)
+ 23: TypeBool
+ 24: TypeInt 32 0
+ 25: 24(int) Constant 0
+ 30: 6(float) Constant 1065353216
+ 34: 15(int) Constant 0
+ 35: TypePointer Uniform 6(float)
+ 38: 6(float) Constant 0
+ 46: 15(int) Constant 2
+ 53: 6(float) Constant 1077936128
+ 57: 15(int) Constant 3
+ 64: 6(float) Constant 1082130432
+ 83: 6(float) Constant 1084227584
+ 87: TypePointer Function 6(float)
+ 100: TypePointer Function 15(int)
+ 125: 6(float) Constant 1088421888
+ 126: 6(float) Constant 1090519040
+ 137: TypePointer Output 7(fvec4)
+138(@entryPointOutput): 137(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 139: 7(fvec4) FunctionCall 9(@main()
+ Store 138(@entryPointOutput) 139
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 12(a): 11(ptr) Variable Function
+ 88(f): 87(ptr) Variable Function
+ 101(i): 100(ptr) Variable Function
+ 121(g): 87(ptr) Variable Function
+ Store 12(a) 14
+ 21: 20(ptr) AccessChain 18 19
+ 22: 15(int) Load 21
+ 26: 23(bool) INotEqual 22 25
+ SelectionMerge 28 None
+ BranchConditional 26 27 28
+ 27: Label
+ 29: 7(fvec4) Load 12(a)
+ 31: 7(fvec4) CompositeConstruct 30 30 30 30
+ 32: 7(fvec4) FAdd 29 31
+ ReturnValue 32
+ 28: Label
+ 36: 35(ptr) AccessChain 18 34
+ 37: 6(float) Load 36
+ 39: 23(bool) FOrdNotEqual 37 38
+ SelectionMerge 41 None
+ BranchConditional 39 40 41
+ 40: Label
+ 42: 7(fvec4) Load 12(a)
+ 43: 7(fvec4) CompositeConstruct 13 13 13 13
+ 44: 7(fvec4) FAdd 42 43
+ ReturnValue 44
+ 41: Label
+ 47: 35(ptr) AccessChain 18 46
+ 48: 6(float) Load 47
+ 49: 23(bool) FOrdNotEqual 48 38
+ SelectionMerge 51 None
+ BranchConditional 49 50 51
+ 50: Label
+ 52: 7(fvec4) Load 12(a)
+ 54: 7(fvec4) CompositeConstruct 53 53 53 53
+ 55: 7(fvec4) FAdd 52 54
+ ReturnValue 55
+ 51: Label
+ 58: 20(ptr) AccessChain 18 57
+ 59: 15(int) Load 58
+ 60: 23(bool) INotEqual 59 25
+ SelectionMerge 62 None
+ BranchConditional 60 61 62
+ 61: Label
+ 63: 7(fvec4) Load 12(a)
+ 65: 7(fvec4) CompositeConstruct 64 64 64 64
+ 66: 7(fvec4) FAdd 63 65
+ ReturnValue 66
+ 62: Label
+ 68: 20(ptr) AccessChain 18 19
+ 69: 15(int) Load 68
+ 70: 23(bool) INotEqual 69 25
+ 71: 35(ptr) AccessChain 18 34
+ 72: 6(float) Load 71
+ 73: 15(int) ConvertFToS 72
+ 74: 23(bool) INotEqual 73 25
+ 75: 23(bool) LogicalAnd 70 74
+ 76: 35(ptr) AccessChain 18 46
+ 77: 6(float) Load 76
+ 78: 23(bool) FOrdNotEqual 77 38
+ 79: 23(bool) LogicalOr 75 78
+ SelectionMerge 81 None
+ BranchConditional 79 80 81
+ 80: Label
+ 82: 7(fvec4) Load 12(a)
+ 84: 7(fvec4) CompositeConstruct 83 83 83 83
+ 85: 7(fvec4) FAdd 82 84
+ ReturnValue 85
+ 81: Label
+ 89: 35(ptr) AccessChain 18 34
+ 90: 6(float) Load 89
+ Store 88(f) 90
+ Branch 91
+ 91: Label
+ LoopMerge 93 94 None
+ Branch 95
+ 95: Label
+ 96: 6(float) Load 88(f)
+ 97: 23(bool) FOrdNotEqual 96 38
+ BranchConditional 97 92 93
+ 92: Label
+ 98: 6(float) Load 88(f)
+ 99: 6(float) FSub 98 30
+ Store 88(f) 99
+ Branch 94
+ 94: Label
+ Branch 91
+ 93: Label
+ 102: 20(ptr) AccessChain 18 19
+ 103: 15(int) Load 102
+ Store 101(i) 103
+ Branch 104
+ 104: Label
+ LoopMerge 106 107 None
+ Branch 105
+ 105: Label
+ 108: 15(int) Load 101(i)
+ 109: 15(int) ISub 108 19
+ Store 101(i) 109
+ Branch 107
+ 107: Label
+ 110: 15(int) Load 101(i)
+ 111: 23(bool) INotEqual 110 25
+ BranchConditional 111 104 106
+ 106: Label
+ Branch 112
+ 112: Label
+ LoopMerge 114 115 None
+ Branch 116
+ 116: Label
+ 117: 15(int) Load 101(i)
+ 118: 23(bool) INotEqual 117 25
+ BranchConditional 118 113 114
+ 113: Label
+ 119: 15(int) Load 101(i)
+ 120: 15(int) ISub 119 19
+ Store 101(i) 120
+ Branch 115
+ 115: Label
+ Branch 112
+ 114: Label
+ 122: 35(ptr) AccessChain 18 34
+ 123: 6(float) Load 122
+ 124: 23(bool) FOrdNotEqual 123 38
+ 127: 6(float) Select 124 125 126
+ Store 121(g) 127
+ 128: 6(float) Load 121(g)
+ 129: 7(fvec4) Load 12(a)
+ 130: 7(fvec4) CompositeConstruct 128 128 128 128
+ 131: 7(fvec4) FAdd 129 130
+ Store 12(a) 131
+ 132: 7(fvec4) Load 12(a)
+ 133: 7(fvec4) CompositeConstruct 30 30 30 30
+ 134: 7(fvec4) FSub 132 133
+ ReturnValue 134
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.include.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.include.vert.out
new file mode 100644
index 00000000000..2a0532e026e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.include.vert.out
@@ -0,0 +1,75 @@
+../Test/hlsl.include.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 44
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 42
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 11 "$Global"
+ MemberName 11($Global) 0 "i1"
+ MemberName 11($Global) 1 "i2"
+ MemberName 11($Global) 2 "i4"
+ MemberName 11($Global) 3 "i3"
+ MemberName 11($Global) 4 "i6"
+ MemberName 11($Global) 5 "i5"
+ Name 13 ""
+ Name 42 "@entryPointOutput"
+ MemberDecorate 11($Global) 0 Offset 0
+ MemberDecorate 11($Global) 1 Offset 16
+ MemberDecorate 11($Global) 2 Offset 32
+ MemberDecorate 11($Global) 3 Offset 48
+ MemberDecorate 11($Global) 4 Offset 64
+ MemberDecorate 11($Global) 5 Offset 80
+ Decorate 11($Global) Block
+ Decorate 13 DescriptorSet 0
+ Decorate 42(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11($Global): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4)
+ 12: TypePointer Uniform 11($Global)
+ 13: 12(ptr) Variable Uniform
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16: TypePointer Uniform 7(fvec4)
+ 19: 14(int) Constant 1
+ 23: 14(int) Constant 3
+ 27: 14(int) Constant 2
+ 31: 14(int) Constant 5
+ 35: 14(int) Constant 4
+ 41: TypePointer Output 7(fvec4)
+42(@entryPointOutput): 41(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 43: 7(fvec4) FunctionCall 9(@main()
+ Store 42(@entryPointOutput) 43
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 17: 16(ptr) AccessChain 13 15
+ 18: 7(fvec4) Load 17
+ 20: 16(ptr) AccessChain 13 19
+ 21: 7(fvec4) Load 20
+ 22: 7(fvec4) FAdd 18 21
+ 24: 16(ptr) AccessChain 13 23
+ 25: 7(fvec4) Load 24
+ 26: 7(fvec4) FAdd 22 25
+ 28: 16(ptr) AccessChain 13 27
+ 29: 7(fvec4) Load 28
+ 30: 7(fvec4) FAdd 26 29
+ 32: 16(ptr) AccessChain 13 31
+ 33: 7(fvec4) Load 32
+ 34: 7(fvec4) FAdd 30 33
+ 36: 16(ptr) AccessChain 13 35
+ 37: 7(fvec4) Load 36
+ 38: 7(fvec4) FAdd 34 37
+ ReturnValue 38
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.includeNegative.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.includeNegative.vert.out
new file mode 100644
index 00000000000..5faa383fec4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.includeNegative.vert.out
@@ -0,0 +1,10 @@
+hlsl.includeNegative.vert
+ERROR: ./foo.h:1: '#error' : should not be included
+ERROR: ./inc2/../foo.h:1: '#error' : should not be included
+ERROR: ./parentBad:3: '#error' : bad parent
+ERROR: hlsl.includeNegative.vert:7: '#error' : in main
+hlsl.includeNegative.vert(8): error at column 0, HLSL parsing failed.
+ERROR: 5 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inf.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inf.vert.out
new file mode 100644
index 00000000000..afb0a4fe2c6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inf.vert.out
@@ -0,0 +1,172 @@
+hlsl.inf.vert
+Shader version: 500
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Sequence
+0:3 move second child to first child ( temp float)
+0:3 'f1' ( temp float)
+0:3 Constant:
+0:3 -1.#INF
+0:4 Sequence
+0:4 move second child to first child ( temp float)
+0:4 'f2' ( temp float)
+0:4 Constant:
+0:4 +1.#INF
+0:5 Sequence
+0:5 move second child to first child ( temp float)
+0:5 'f3' ( temp float)
+0:5 Constant:
+0:5 +1.#INF
+0:6 Sequence
+0:6 move second child to first child ( temp float)
+0:6 'f4' ( temp float)
+0:6 add ( temp float)
+0:6 component-wise multiply ( temp float)
+0:6 'f2' ( temp float)
+0:6 Constant:
+0:6 +1.#INF
+0:6 Constant:
+0:6 +1.#INF
+0:10 Branch: Return with expression
+0:10 Construct vec4 ( temp 4-component vector of float)
+0:10 add ( temp float)
+0:10 add ( temp float)
+0:10 add ( temp float)
+0:10 add ( temp float)
+0:10 add ( temp float)
+0:10 'f1' ( temp float)
+0:10 'f2' ( temp float)
+0:10 'f3' ( temp float)
+0:10 'f4' ( temp float)
+0:10 Constant:
+0:10 -1.#INF
+0:10 Constant:
+0:10 1.#IND
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Sequence
+0:3 move second child to first child ( temp float)
+0:3 'f1' ( temp float)
+0:3 Constant:
+0:3 -1.#INF
+0:4 Sequence
+0:4 move second child to first child ( temp float)
+0:4 'f2' ( temp float)
+0:4 Constant:
+0:4 +1.#INF
+0:5 Sequence
+0:5 move second child to first child ( temp float)
+0:5 'f3' ( temp float)
+0:5 Constant:
+0:5 +1.#INF
+0:6 Sequence
+0:6 move second child to first child ( temp float)
+0:6 'f4' ( temp float)
+0:6 add ( temp float)
+0:6 component-wise multiply ( temp float)
+0:6 'f2' ( temp float)
+0:6 Constant:
+0:6 +1.#INF
+0:6 Constant:
+0:6 +1.#INF
+0:10 Branch: Return with expression
+0:10 Construct vec4 ( temp 4-component vector of float)
+0:10 add ( temp float)
+0:10 add ( temp float)
+0:10 add ( temp float)
+0:10 add ( temp float)
+0:10 add ( temp float)
+0:10 'f1' ( temp float)
+0:10 'f2' ( temp float)
+0:10 'f3' ( temp float)
+0:10 'f4' ( temp float)
+0:10 Constant:
+0:10 -1.#INF
+0:10 Constant:
+0:10 1.#IND
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 37
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 35
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 12 "f1"
+ Name 14 "f2"
+ Name 16 "f3"
+ Name 17 "f4"
+ Name 35 "@entryPointOutput"
+ Decorate 35(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypePointer Function 6(float)
+ 13: 6(float) Constant 4286578688
+ 15: 6(float) Constant 2139095040
+ 29: 6(float) Constant 4290772992
+ 34: TypePointer Output 7(fvec4)
+35(@entryPointOutput): 34(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 36: 7(fvec4) FunctionCall 9(@main()
+ Store 35(@entryPointOutput) 36
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 12(f1): 11(ptr) Variable Function
+ 14(f2): 11(ptr) Variable Function
+ 16(f3): 11(ptr) Variable Function
+ 17(f4): 11(ptr) Variable Function
+ Store 12(f1) 13
+ Store 14(f2) 15
+ Store 16(f3) 15
+ 18: 6(float) Load 14(f2)
+ 19: 6(float) FMul 18 15
+ 20: 6(float) FAdd 19 15
+ Store 17(f4) 20
+ 21: 6(float) Load 12(f1)
+ 22: 6(float) Load 14(f2)
+ 23: 6(float) FAdd 21 22
+ 24: 6(float) Load 16(f3)
+ 25: 6(float) FAdd 23 24
+ 26: 6(float) Load 17(f4)
+ 27: 6(float) FAdd 25 26
+ 28: 6(float) FAdd 27 13
+ 30: 6(float) FAdd 28 29
+ 31: 7(fvec4) CompositeConstruct 30 30 30 30
+ ReturnValue 31
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out
index 7ae9475e165..9b5238840ad 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out
@@ -2,7 +2,7 @@ hlsl.init.frag
WARNING: 0:40: 'typedef' : struct-member initializers ignored
WARNING: 0:40: 'typedef' : struct-member initializers ignored
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -168,7 +168,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -331,7 +331,7 @@ gl_FragCoord origin is upper left
0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float a, layout( row_major std140) uniform float b, layout( row_major std140) uniform float c})
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 110
Capability Shader
@@ -339,6 +339,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "ShaderFunction" 98 101
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "ShaderFunction"
Name 11 "@ShaderFunction(vf4;"
Name 10 "input"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out
index 33714aa486a..2aff3740e57 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init2.frag.out
@@ -1,5 +1,5 @@
hlsl.init2.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: Test1( ( temp void)
@@ -168,19 +168,19 @@ gl_FragCoord origin is upper left
0:? Sequence
0:45 Sequence
0:45 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:45 color: direct index for structure ( temp 4-component vector of float)
0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:45 Constant:
0:45 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: Test1( ( temp void)
@@ -349,16 +349,16 @@ gl_FragCoord origin is upper left
0:? Sequence
0:45 Sequence
0:45 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:45 color: direct index for structure ( temp 4-component vector of float)
0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:45 Constant:
0:45 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 112
Capability Shader
@@ -366,6 +366,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 109
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 6 "Test1("
Name 10 "PS_OUTPUT"
@@ -391,8 +392,8 @@ gl_FragCoord origin is upper left
MemberName 87(two) 1 "b"
Name 89 "twoNonConst"
Name 99 "ps_output"
- Name 109 "color"
- Decorate 109(color) Location 0
+ Name 109 "@entryPointOutput.color"
+ Decorate 109(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
8: TypeFloat 32
@@ -444,12 +445,12 @@ gl_FragCoord origin is upper left
102: 9(fvec4) ConstantComposite 18 18 18 18
103: TypePointer Function 9(fvec4)
108: TypePointer Output 9(fvec4)
- 109(color): 108(ptr) Variable Output
+109(@entryPointOutput.color): 108(ptr) Variable Output
4(main): 2 Function None 3
5: Label
110:10(PS_OUTPUT) FunctionCall 12(@main()
111: 9(fvec4) CompositeExtract 110 0
- Store 109(color) 111
+ Store 109(@entryPointOutput.color) 111
Return
FunctionEnd
6(Test1(): 2 Function None 3
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out
index 65017035b53..f02ba6deea2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.inoutquals.frag.out
@@ -1,12 +1,13 @@
hlsl.inoutquals.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:8 Function Definition: MyFunc(f1;f1;f1; ( temp void)
+0:8 Function Definition: MyFunc(f1;f1;f1;f1; ( temp void)
0:8 Function Parameters:
0:8 'x' ( in float)
0:8 'y' ( out float)
0:8 'z' ( inout float)
+0:8 'w' ( inout float)
0:? Sequence
0:9 move second child to first child ( temp float)
0:9 'y' ( out float)
@@ -18,76 +19,84 @@ gl_FragCoord origin is upper left
0:11 'x' ( in float)
0:11 Constant:
0:11 -1.000000
-0:15 Function Definition: @main(vf4;i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Function Parameters:
-0:15 'inpos' ( in 4-component vector of float)
-0:15 'sampleMask' ( out int)
+0:12 multiply second child into first child ( temp float)
+0:12 'w' ( inout float)
+0:12 Constant:
+0:12 1.000000
+0:16 Function Definition: @main(vf4;i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Function Parameters:
+0:16 'inpos' ( in 4-component vector of float)
+0:16 'sampleMask' ( out int)
0:? Sequence
-0:18 Sequence
-0:18 move second child to first child ( temp float)
-0:18 'x' ( temp float)
-0:18 Constant:
-0:18 7.000000
-0:18 move second child to first child ( temp float)
-0:18 'z' ( temp float)
-0:18 Constant:
-0:18 3.000000
-0:19 Function Call: MyFunc(f1;f1;f1; ( temp void)
-0:19 'x' ( temp float)
-0:19 'y' ( temp float)
-0:19 'z' ( temp float)
-0:21 move second child to first child ( temp 4-component vector of float)
-0:21 Color: direct index for structure ( temp 4-component vector of float)
-0:21 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:21 Constant:
-0:21 0 (const int)
-0:? Construct vec4 ( temp 4-component vector of float)
-0:21 'x' ( temp float)
-0:21 'y' ( temp float)
-0:21 'z' ( temp float)
-0:21 Constant:
-0:21 1.000000
-0:22 move second child to first child ( temp float)
-0:22 Depth: direct index for structure ( temp float)
+0:19 Sequence
+0:19 move second child to first child ( temp float)
+0:19 'x' ( temp float)
+0:19 Constant:
+0:19 7.000000
+0:19 move second child to first child ( temp float)
+0:19 'z' ( temp float)
+0:19 Constant:
+0:19 3.000000
+0:20 Function Call: MyFunc(f1;f1;f1;f1; ( temp void)
+0:20 'x' ( temp float)
+0:20 'y' ( temp float)
+0:20 'z' ( temp float)
+0:20 direct index ( temp float)
+0:20 'inpos' ( in 4-component vector of float)
+0:20 Constant:
+0:20 3 (const int)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 Color: direct index for structure ( temp 4-component vector of float)
0:22 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:22 Constant:
-0:22 1 (const int)
-0:22 direct index ( temp float)
-0:22 'inpos' ( in 4-component vector of float)
+0:22 0 (const int)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:22 'x' ( temp float)
+0:22 'y' ( temp float)
+0:22 'z' ( temp float)
0:22 Constant:
-0:22 3 (const int)
-0:24 Branch: Return with expression
-0:24 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Function Definition: main( ( temp void)
-0:15 Function Parameters:
+0:22 1.000000
+0:23 move second child to first child ( temp float)
+0:23 Depth: direct index for structure ( temp float)
+0:23 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:23 Constant:
+0:23 1 (const int)
+0:23 direct index ( temp float)
+0:23 'inpos' ( in 4-component vector of float)
+0:23 Constant:
+0:23 3 (const int)
+0:25 Branch: Return with expression
+0:25 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Function Definition: main( ( temp void)
+0:16 Function Parameters:
0:? Sequence
-0:15 move second child to first child ( temp 4-component vector of float)
+0:16 move second child to first child ( temp 4-component vector of float)
0:? 'inpos' ( temp 4-component vector of float)
0:? 'inpos' ( noperspective in 4-component vector of float FragCoord)
-0:15 Sequence
-0:15 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Function Call: @main(vf4;i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Sequence
+0:16 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Function Call: @main(vf4;i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:? 'inpos' ( temp 4-component vector of float)
0:? 'sampleMask' ( temp int)
-0:15 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:15 Color: direct index for structure ( temp 4-component vector of float)
-0:15 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Constant:
-0:15 0 (const int)
-0:15 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
-0:15 Depth: direct index for structure ( temp float)
-0:15 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Constant:
-0:15 1 (const int)
-0:15 move second child to first child ( temp int)
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0:16 Color: direct index for structure ( temp 4-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Constant:
+0:16 0 (const int)
+0:16 move second child to first child ( temp float)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:16 Depth: direct index for structure ( temp float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Constant:
+0:16 1 (const int)
+0:16 move second child to first child ( temp int)
0:? 'sampleMask' ( out int SampleMaskIn)
0:? 'sampleMask' ( temp int)
0:? Linker Objects
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:? 'inpos' ( noperspective in 4-component vector of float FragCoord)
0:? 'sampleMask' ( out int SampleMaskIn)
@@ -95,14 +104,15 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
-0:8 Function Definition: MyFunc(f1;f1;f1; ( temp void)
+0:8 Function Definition: MyFunc(f1;f1;f1;f1; ( temp void)
0:8 Function Parameters:
0:8 'x' ( in float)
0:8 'y' ( out float)
0:8 'z' ( inout float)
+0:8 'w' ( inout float)
0:? Sequence
0:9 move second child to first child ( temp float)
0:9 'y' ( out float)
@@ -114,218 +124,239 @@ gl_FragCoord origin is upper left
0:11 'x' ( in float)
0:11 Constant:
0:11 -1.000000
-0:15 Function Definition: @main(vf4;i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Function Parameters:
-0:15 'inpos' ( in 4-component vector of float)
-0:15 'sampleMask' ( out int)
+0:12 multiply second child into first child ( temp float)
+0:12 'w' ( inout float)
+0:12 Constant:
+0:12 1.000000
+0:16 Function Definition: @main(vf4;i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Function Parameters:
+0:16 'inpos' ( in 4-component vector of float)
+0:16 'sampleMask' ( out int)
0:? Sequence
-0:18 Sequence
-0:18 move second child to first child ( temp float)
-0:18 'x' ( temp float)
-0:18 Constant:
-0:18 7.000000
-0:18 move second child to first child ( temp float)
-0:18 'z' ( temp float)
-0:18 Constant:
-0:18 3.000000
-0:19 Function Call: MyFunc(f1;f1;f1; ( temp void)
-0:19 'x' ( temp float)
-0:19 'y' ( temp float)
-0:19 'z' ( temp float)
-0:21 move second child to first child ( temp 4-component vector of float)
-0:21 Color: direct index for structure ( temp 4-component vector of float)
-0:21 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:21 Constant:
-0:21 0 (const int)
-0:? Construct vec4 ( temp 4-component vector of float)
-0:21 'x' ( temp float)
-0:21 'y' ( temp float)
-0:21 'z' ( temp float)
-0:21 Constant:
-0:21 1.000000
-0:22 move second child to first child ( temp float)
-0:22 Depth: direct index for structure ( temp float)
+0:19 Sequence
+0:19 move second child to first child ( temp float)
+0:19 'x' ( temp float)
+0:19 Constant:
+0:19 7.000000
+0:19 move second child to first child ( temp float)
+0:19 'z' ( temp float)
+0:19 Constant:
+0:19 3.000000
+0:20 Function Call: MyFunc(f1;f1;f1;f1; ( temp void)
+0:20 'x' ( temp float)
+0:20 'y' ( temp float)
+0:20 'z' ( temp float)
+0:20 direct index ( temp float)
+0:20 'inpos' ( in 4-component vector of float)
+0:20 Constant:
+0:20 3 (const int)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 Color: direct index for structure ( temp 4-component vector of float)
0:22 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:22 Constant:
-0:22 1 (const int)
-0:22 direct index ( temp float)
-0:22 'inpos' ( in 4-component vector of float)
+0:22 0 (const int)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:22 'x' ( temp float)
+0:22 'y' ( temp float)
+0:22 'z' ( temp float)
0:22 Constant:
-0:22 3 (const int)
-0:24 Branch: Return with expression
-0:24 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Function Definition: main( ( temp void)
-0:15 Function Parameters:
+0:22 1.000000
+0:23 move second child to first child ( temp float)
+0:23 Depth: direct index for structure ( temp float)
+0:23 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:23 Constant:
+0:23 1 (const int)
+0:23 direct index ( temp float)
+0:23 'inpos' ( in 4-component vector of float)
+0:23 Constant:
+0:23 3 (const int)
+0:25 Branch: Return with expression
+0:25 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Function Definition: main( ( temp void)
+0:16 Function Parameters:
0:? Sequence
-0:15 move second child to first child ( temp 4-component vector of float)
+0:16 move second child to first child ( temp 4-component vector of float)
0:? 'inpos' ( temp 4-component vector of float)
0:? 'inpos' ( noperspective in 4-component vector of float FragCoord)
-0:15 Sequence
-0:15 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Function Call: @main(vf4;i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Sequence
+0:16 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Function Call: @main(vf4;i1; ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:? 'inpos' ( temp 4-component vector of float)
0:? 'sampleMask' ( temp int)
-0:15 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:15 Color: direct index for structure ( temp 4-component vector of float)
-0:15 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Constant:
-0:15 0 (const int)
-0:15 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
-0:15 Depth: direct index for structure ( temp float)
-0:15 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
-0:15 Constant:
-0:15 1 (const int)
-0:15 move second child to first child ( temp int)
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0:16 Color: direct index for structure ( temp 4-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Constant:
+0:16 0 (const int)
+0:16 move second child to first child ( temp float)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:16 Depth: direct index for structure ( temp float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:16 Constant:
+0:16 1 (const int)
+0:16 move second child to first child ( temp int)
0:? 'sampleMask' ( out int SampleMaskIn)
0:? 'sampleMask' ( temp int)
0:? Linker Objects
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:? 'inpos' ( noperspective in 4-component vector of float FragCoord)
0:? 'sampleMask' ( out int SampleMaskIn)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 80
+// Generated by (magic number): 80002
+// Id's are bound by 88
Capability Shader
- Capability SampleRateShading
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 60 70 74 78
+ EntryPoint Fragment 4 "main" 68 78 82 86
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
- Name 12 "MyFunc(f1;f1;f1;"
+ Name 13 "MyFunc(f1;f1;f1;f1;"
Name 9 "x"
Name 10 "y"
Name 11 "z"
- Name 18 "PS_OUTPUT"
- MemberName 18(PS_OUTPUT) 0 "Color"
- MemberName 18(PS_OUTPUT) 1 "Depth"
- Name 22 "@main(vf4;i1;"
- Name 20 "inpos"
- Name 21 "sampleMask"
- Name 27 "x"
- Name 29 "z"
- Name 31 "y"
- Name 32 "param"
- Name 34 "param"
- Name 35 "param"
- Name 41 "psout"
- Name 58 "inpos"
- Name 60 "inpos"
- Name 62 "flattenTemp"
- Name 63 "sampleMask"
- Name 64 "param"
- Name 66 "param"
- Name 70 "Color"
- Name 74 "Depth"
- Name 78 "sampleMask"
- Decorate 60(inpos) NoPerspective
- Decorate 60(inpos) BuiltIn FragCoord
- Decorate 70(Color) Location 0
- Decorate 74(Depth) BuiltIn FragDepth
- Decorate 78(sampleMask) BuiltIn SampleMask
+ Name 12 "w"
+ Name 19 "PS_OUTPUT"
+ MemberName 19(PS_OUTPUT) 0 "Color"
+ MemberName 19(PS_OUTPUT) 1 "Depth"
+ Name 23 "@main(vf4;i1;"
+ Name 21 "inpos"
+ Name 22 "sampleMask"
+ Name 31 "x"
+ Name 33 "z"
+ Name 35 "y"
+ Name 36 "param"
+ Name 38 "param"
+ Name 39 "param"
+ Name 41 "param"
+ Name 52 "psout"
+ Name 66 "inpos"
+ Name 68 "inpos"
+ Name 70 "flattenTemp"
+ Name 71 "sampleMask"
+ Name 72 "param"
+ Name 74 "param"
+ Name 78 "@entryPointOutput.Color"
+ Name 82 "@entryPointOutput.Depth"
+ Name 86 "sampleMask"
+ Decorate 68(inpos) NoPerspective
+ Decorate 68(inpos) BuiltIn FragCoord
+ Decorate 78(@entryPointOutput.Color) Location 0
+ Decorate 82(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 86(sampleMask) BuiltIn SampleMask
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypePointer Function 6(float)
- 8: TypeFunction 2 7(ptr) 7(ptr) 7(ptr)
- 14: TypeVector 6(float) 4
- 15: TypePointer Function 14(fvec4)
- 16: TypeInt 32 1
- 17: TypePointer Function 16(int)
- 18(PS_OUTPUT): TypeStruct 14(fvec4) 6(float)
- 19: TypeFunction 18(PS_OUTPUT) 15(ptr) 17(ptr)
- 26: 6(float) Constant 3212836864
- 28: 6(float) Constant 1088421888
- 30: 6(float) Constant 1077936128
- 40: TypePointer Function 18(PS_OUTPUT)
- 42: 16(int) Constant 0
- 46: 6(float) Constant 1065353216
- 49: 16(int) Constant 1
- 50: TypeInt 32 0
- 51: 50(int) Constant 3
- 59: TypePointer Input 14(fvec4)
- 60(inpos): 59(ptr) Variable Input
- 69: TypePointer Output 14(fvec4)
- 70(Color): 69(ptr) Variable Output
- 73: TypePointer Output 6(float)
- 74(Depth): 73(ptr) Variable Output
- 77: TypePointer Output 16(int)
- 78(sampleMask): 77(ptr) Variable Output
+ 8: TypeFunction 2 7(ptr) 7(ptr) 7(ptr) 7(ptr)
+ 15: TypeVector 6(float) 4
+ 16: TypePointer Function 15(fvec4)
+ 17: TypeInt 32 1
+ 18: TypePointer Function 17(int)
+ 19(PS_OUTPUT): TypeStruct 15(fvec4) 6(float)
+ 20: TypeFunction 19(PS_OUTPUT) 16(ptr) 18(ptr)
+ 27: 6(float) Constant 3212836864
+ 28: 6(float) Constant 1065353216
+ 32: 6(float) Constant 1088421888
+ 34: 6(float) Constant 1077936128
+ 42: TypeInt 32 0
+ 43: 42(int) Constant 3
+ 51: TypePointer Function 19(PS_OUTPUT)
+ 53: 17(int) Constant 0
+ 59: 17(int) Constant 1
+ 67: TypePointer Input 15(fvec4)
+ 68(inpos): 67(ptr) Variable Input
+ 77: TypePointer Output 15(fvec4)
+78(@entryPointOutput.Color): 77(ptr) Variable Output
+ 81: TypePointer Output 6(float)
+82(@entryPointOutput.Depth): 81(ptr) Variable Output
+ 85: TypePointer Output 17(int)
+ 86(sampleMask): 85(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 58(inpos): 15(ptr) Variable Function
- 62(flattenTemp): 40(ptr) Variable Function
- 63(sampleMask): 17(ptr) Variable Function
- 64(param): 15(ptr) Variable Function
- 66(param): 17(ptr) Variable Function
- 61: 14(fvec4) Load 60(inpos)
- Store 58(inpos) 61
- 65: 14(fvec4) Load 58(inpos)
- Store 64(param) 65
- 67:18(PS_OUTPUT) FunctionCall 22(@main(vf4;i1;) 64(param) 66(param)
- 68: 16(int) Load 66(param)
- Store 63(sampleMask) 68
- Store 62(flattenTemp) 67
- 71: 15(ptr) AccessChain 62(flattenTemp) 42
- 72: 14(fvec4) Load 71
- Store 70(Color) 72
- 75: 7(ptr) AccessChain 62(flattenTemp) 49
- 76: 6(float) Load 75
- Store 74(Depth) 76
- 79: 16(int) Load 63(sampleMask)
- Store 78(sampleMask) 79
+ 66(inpos): 16(ptr) Variable Function
+ 70(flattenTemp): 51(ptr) Variable Function
+ 71(sampleMask): 18(ptr) Variable Function
+ 72(param): 16(ptr) Variable Function
+ 74(param): 18(ptr) Variable Function
+ 69: 15(fvec4) Load 68(inpos)
+ Store 66(inpos) 69
+ 73: 15(fvec4) Load 66(inpos)
+ Store 72(param) 73
+ 75:19(PS_OUTPUT) FunctionCall 23(@main(vf4;i1;) 72(param) 74(param)
+ 76: 17(int) Load 74(param)
+ Store 71(sampleMask) 76
+ Store 70(flattenTemp) 75
+ 79: 16(ptr) AccessChain 70(flattenTemp) 53
+ 80: 15(fvec4) Load 79
+ Store 78(@entryPointOutput.Color) 80
+ 83: 7(ptr) AccessChain 70(flattenTemp) 59
+ 84: 6(float) Load 83
+ Store 82(@entryPointOutput.Depth) 84
+ 87: 17(int) Load 71(sampleMask)
+ Store 86(sampleMask) 87
Return
FunctionEnd
-12(MyFunc(f1;f1;f1;): 2 Function None 8
+13(MyFunc(f1;f1;f1;f1;): 2 Function None 8
9(x): 7(ptr) FunctionParameter
10(y): 7(ptr) FunctionParameter
11(z): 7(ptr) FunctionParameter
- 13: Label
- 24: 6(float) Load 9(x)
- Store 10(y) 24
- 25: 6(float) Load 10(y)
- Store 11(z) 25
- Store 9(x) 26
+ 12(w): 7(ptr) FunctionParameter
+ 14: Label
+ 25: 6(float) Load 9(x)
+ Store 10(y) 25
+ 26: 6(float) Load 10(y)
+ Store 11(z) 26
+ Store 9(x) 27
+ 29: 6(float) Load 12(w)
+ 30: 6(float) FMul 29 28
+ Store 12(w) 30
Return
FunctionEnd
-22(@main(vf4;i1;):18(PS_OUTPUT) Function None 19
- 20(inpos): 15(ptr) FunctionParameter
- 21(sampleMask): 17(ptr) FunctionParameter
- 23: Label
- 27(x): 7(ptr) Variable Function
- 29(z): 7(ptr) Variable Function
- 31(y): 7(ptr) Variable Function
- 32(param): 7(ptr) Variable Function
- 34(param): 7(ptr) Variable Function
- 35(param): 7(ptr) Variable Function
- 41(psout): 40(ptr) Variable Function
- Store 27(x) 28
- Store 29(z) 30
- 33: 6(float) Load 27(x)
- Store 32(param) 33
- 36: 6(float) Load 29(z)
- Store 35(param) 36
- 37: 2 FunctionCall 12(MyFunc(f1;f1;f1;) 32(param) 34(param) 35(param)
- 38: 6(float) Load 34(param)
- Store 31(y) 38
- 39: 6(float) Load 35(param)
- Store 29(z) 39
- 43: 6(float) Load 27(x)
- 44: 6(float) Load 31(y)
- 45: 6(float) Load 29(z)
- 47: 14(fvec4) CompositeConstruct 43 44 45 46
- 48: 15(ptr) AccessChain 41(psout) 42
- Store 48 47
- 52: 7(ptr) AccessChain 20(inpos) 51
- 53: 6(float) Load 52
- 54: 7(ptr) AccessChain 41(psout) 49
- Store 54 53
- 55:18(PS_OUTPUT) Load 41(psout)
- ReturnValue 55
+23(@main(vf4;i1;):19(PS_OUTPUT) Function None 20
+ 21(inpos): 16(ptr) FunctionParameter
+ 22(sampleMask): 18(ptr) FunctionParameter
+ 24: Label
+ 31(x): 7(ptr) Variable Function
+ 33(z): 7(ptr) Variable Function
+ 35(y): 7(ptr) Variable Function
+ 36(param): 7(ptr) Variable Function
+ 38(param): 7(ptr) Variable Function
+ 39(param): 7(ptr) Variable Function
+ 41(param): 7(ptr) Variable Function
+ 52(psout): 51(ptr) Variable Function
+ Store 31(x) 32
+ Store 33(z) 34
+ 37: 6(float) Load 31(x)
+ Store 36(param) 37
+ 40: 6(float) Load 33(z)
+ Store 39(param) 40
+ 44: 7(ptr) AccessChain 21(inpos) 43
+ 45: 6(float) Load 44
+ Store 41(param) 45
+ 46: 2 FunctionCall 13(MyFunc(f1;f1;f1;f1;) 36(param) 38(param) 39(param) 41(param)
+ 47: 6(float) Load 38(param)
+ Store 35(y) 47
+ 48: 6(float) Load 39(param)
+ Store 33(z) 48
+ 49: 6(float) Load 41(param)
+ 50: 7(ptr) AccessChain 21(inpos) 43
+ Store 50 49
+ 54: 6(float) Load 31(x)
+ 55: 6(float) Load 35(y)
+ 56: 6(float) Load 33(z)
+ 57: 15(fvec4) CompositeConstruct 54 55 56 28
+ 58: 16(ptr) AccessChain 52(psout) 53
+ Store 58 57
+ 60: 7(ptr) AccessChain 21(inpos) 43
+ 61: 6(float) Load 60
+ 62: 7(ptr) AccessChain 52(psout) 59
+ Store 62 61
+ 63:19(PS_OUTPUT) Load 52(psout)
+ ReturnValue 63
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsic.frexp.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsic.frexp.frag.out
new file mode 100644
index 00000000000..b04909ec713
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsic.frexp.frag.out
@@ -0,0 +1,336 @@
+hlsl.intrinsic.frexp.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3 Function Definition: PixelShaderFunctionS(f1;f1; ( temp float)
+0:3 Function Parameters:
+0:3 'inF0' ( in float)
+0:3 'inF1' ( in float)
+0:? Sequence
+0:4 Sequence
+0:4 move second child to first child ( temp float)
+0:4 'r000' ( temp float)
+0:4 frexp ( temp float)
+0:4 'inF0' ( in float)
+0:4 'inF1' ( in float)
+0:5 Branch: Return with expression
+0:5 Constant:
+0:5 0.000000
+0:9 Function Definition: PixelShaderFunction2(vf2;vf2; ( temp 2-component vector of float)
+0:9 Function Parameters:
+0:9 'inF0' ( in 2-component vector of float)
+0:9 'inF1' ( in 2-component vector of float)
+0:? Sequence
+0:10 Sequence
+0:10 move second child to first child ( temp 2-component vector of float)
+0:10 'r000' ( temp 2-component vector of float)
+0:10 frexp ( temp 2-component vector of float)
+0:10 'inF0' ( in 2-component vector of float)
+0:10 'inF1' ( in 2-component vector of float)
+0:11 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:15 Function Definition: PixelShaderFunction3(vf3;vf3; ( temp 3-component vector of float)
+0:15 Function Parameters:
+0:15 'inF0' ( in 3-component vector of float)
+0:15 'inF1' ( in 3-component vector of float)
+0:? Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp 3-component vector of float)
+0:16 'r000' ( temp 3-component vector of float)
+0:16 frexp ( temp 3-component vector of float)
+0:16 'inF0' ( in 3-component vector of float)
+0:16 'inF1' ( in 3-component vector of float)
+0:17 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:21 Function Definition: PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
+0:21 Function Parameters:
+0:21 'inF0' ( in 4-component vector of float)
+0:21 'inF1' ( in 4-component vector of float)
+0:? Sequence
+0:22 Sequence
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 'r000' ( temp 4-component vector of float)
+0:22 frexp ( temp 4-component vector of float)
+0:22 'inF0' ( in 4-component vector of float)
+0:22 'inF1' ( in 4-component vector of float)
+0:23 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:33 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:33 Function Parameters:
+0:? Sequence
+0:35 move second child to first child ( temp 4-component vector of float)
+0:35 color: direct index for structure ( temp 4-component vector of float)
+0:35 'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1.000000
+0:35 1.000000
+0:35 1.000000
+0:35 1.000000
+0:36 Branch: Return with expression
+0:36 'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:33 Function Definition: main( ( temp void)
+0:33 Function Parameters:
+0:? Sequence
+0:33 Sequence
+0:33 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+0:33 color: direct index for structure ( temp 4-component vector of float)
+0:33 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:33 Constant:
+0:33 0 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3 Function Definition: PixelShaderFunctionS(f1;f1; ( temp float)
+0:3 Function Parameters:
+0:3 'inF0' ( in float)
+0:3 'inF1' ( in float)
+0:? Sequence
+0:4 Sequence
+0:4 move second child to first child ( temp float)
+0:4 'r000' ( temp float)
+0:4 frexp ( temp float)
+0:4 'inF0' ( in float)
+0:4 'inF1' ( in float)
+0:5 Branch: Return with expression
+0:5 Constant:
+0:5 0.000000
+0:9 Function Definition: PixelShaderFunction2(vf2;vf2; ( temp 2-component vector of float)
+0:9 Function Parameters:
+0:9 'inF0' ( in 2-component vector of float)
+0:9 'inF1' ( in 2-component vector of float)
+0:? Sequence
+0:10 Sequence
+0:10 move second child to first child ( temp 2-component vector of float)
+0:10 'r000' ( temp 2-component vector of float)
+0:10 frexp ( temp 2-component vector of float)
+0:10 'inF0' ( in 2-component vector of float)
+0:10 'inF1' ( in 2-component vector of float)
+0:11 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:15 Function Definition: PixelShaderFunction3(vf3;vf3; ( temp 3-component vector of float)
+0:15 Function Parameters:
+0:15 'inF0' ( in 3-component vector of float)
+0:15 'inF1' ( in 3-component vector of float)
+0:? Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp 3-component vector of float)
+0:16 'r000' ( temp 3-component vector of float)
+0:16 frexp ( temp 3-component vector of float)
+0:16 'inF0' ( in 3-component vector of float)
+0:16 'inF1' ( in 3-component vector of float)
+0:17 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:21 Function Definition: PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
+0:21 Function Parameters:
+0:21 'inF0' ( in 4-component vector of float)
+0:21 'inF1' ( in 4-component vector of float)
+0:? Sequence
+0:22 Sequence
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 'r000' ( temp 4-component vector of float)
+0:22 frexp ( temp 4-component vector of float)
+0:22 'inF0' ( in 4-component vector of float)
+0:22 'inF1' ( in 4-component vector of float)
+0:23 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:33 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:33 Function Parameters:
+0:? Sequence
+0:35 move second child to first child ( temp 4-component vector of float)
+0:35 color: direct index for structure ( temp 4-component vector of float)
+0:35 'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1.000000
+0:35 1.000000
+0:35 1.000000
+0:35 1.000000
+0:36 Branch: Return with expression
+0:36 'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:33 Function Definition: main( ( temp void)
+0:33 Function Parameters:
+0:? Sequence
+0:33 Sequence
+0:33 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+0:33 color: direct index for structure ( temp 4-component vector of float)
+0:33 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:33 Constant:
+0:33 0 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 98
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 95
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "PixelShaderFunctionS(f1;f1;"
+ Name 9 "inF0"
+ Name 10 "inF1"
+ Name 18 "PixelShaderFunction2(vf2;vf2;"
+ Name 16 "inF0"
+ Name 17 "inF1"
+ Name 25 "PixelShaderFunction3(vf3;vf3;"
+ Name 23 "inF0"
+ Name 24 "inF1"
+ Name 32 "PixelShaderFunction(vf4;vf4;"
+ Name 30 "inF0"
+ Name 31 "inF1"
+ Name 34 "PS_OUTPUT"
+ MemberName 34(PS_OUTPUT) 0 "color"
+ Name 36 "@main("
+ Name 38 "r000"
+ Name 41 "ResType"
+ Name 49 "r000"
+ Name 52 "ResType"
+ Name 62 "r000"
+ Name 65 "ResType"
+ Name 74 "r000"
+ Name 77 "ResType"
+ Name 87 "ps_output"
+ Name 95 "@entryPointOutput.color"
+ Decorate 95(@entryPointOutput.color) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypePointer Function 6(float)
+ 8: TypeFunction 6(float) 7(ptr) 7(ptr)
+ 13: TypeVector 6(float) 2
+ 14: TypePointer Function 13(fvec2)
+ 15: TypeFunction 13(fvec2) 14(ptr) 14(ptr)
+ 20: TypeVector 6(float) 3
+ 21: TypePointer Function 20(fvec3)
+ 22: TypeFunction 20(fvec3) 21(ptr) 21(ptr)
+ 27: TypeVector 6(float) 4
+ 28: TypePointer Function 27(fvec4)
+ 29: TypeFunction 27(fvec4) 28(ptr) 28(ptr)
+ 34(PS_OUTPUT): TypeStruct 27(fvec4)
+ 35: TypeFunction 34(PS_OUTPUT)
+ 40: TypeInt 32 1
+ 41(ResType): TypeStruct 6(float) 40(int)
+ 46: 6(float) Constant 0
+ 51: TypeVector 40(int) 2
+ 52(ResType): TypeStruct 13(fvec2) 51(ivec2)
+ 57: 6(float) Constant 1065353216
+ 58: 6(float) Constant 1073741824
+ 59: 13(fvec2) ConstantComposite 57 58
+ 64: TypeVector 40(int) 3
+ 65(ResType): TypeStruct 20(fvec3) 64(ivec3)
+ 70: 6(float) Constant 1077936128
+ 71: 20(fvec3) ConstantComposite 57 58 70
+ 76: TypeVector 40(int) 4
+ 77(ResType): TypeStruct 27(fvec4) 76(ivec4)
+ 82: 6(float) Constant 1082130432
+ 83: 27(fvec4) ConstantComposite 57 58 70 82
+ 86: TypePointer Function 34(PS_OUTPUT)
+ 88: 40(int) Constant 0
+ 89: 27(fvec4) ConstantComposite 57 57 57 57
+ 94: TypePointer Output 27(fvec4)
+95(@entryPointOutput.color): 94(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 96:34(PS_OUTPUT) FunctionCall 36(@main()
+ 97: 27(fvec4) CompositeExtract 96 0
+ Store 95(@entryPointOutput.color) 97
+ Return
+ FunctionEnd
+11(PixelShaderFunctionS(f1;f1;): 6(float) Function None 8
+ 9(inF0): 7(ptr) FunctionParameter
+ 10(inF1): 7(ptr) FunctionParameter
+ 12: Label
+ 38(r000): 7(ptr) Variable Function
+ 39: 6(float) Load 9(inF0)
+ 42: 41(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 39
+ 43: 40(int) CompositeExtract 42 1
+ 44: 6(float) ConvertSToF 43
+ Store 10(inF1) 44
+ 45: 6(float) CompositeExtract 42 0
+ Store 38(r000) 45
+ ReturnValue 46
+ FunctionEnd
+18(PixelShaderFunction2(vf2;vf2;): 13(fvec2) Function None 15
+ 16(inF0): 14(ptr) FunctionParameter
+ 17(inF1): 14(ptr) FunctionParameter
+ 19: Label
+ 49(r000): 14(ptr) Variable Function
+ 50: 13(fvec2) Load 16(inF0)
+ 53: 52(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 50
+ 54: 51(ivec2) CompositeExtract 53 1
+ 55: 13(fvec2) ConvertSToF 54
+ Store 17(inF1) 55
+ 56: 13(fvec2) CompositeExtract 53 0
+ Store 49(r000) 56
+ ReturnValue 59
+ FunctionEnd
+25(PixelShaderFunction3(vf3;vf3;): 20(fvec3) Function None 22
+ 23(inF0): 21(ptr) FunctionParameter
+ 24(inF1): 21(ptr) FunctionParameter
+ 26: Label
+ 62(r000): 21(ptr) Variable Function
+ 63: 20(fvec3) Load 23(inF0)
+ 66: 65(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 63
+ 67: 64(ivec3) CompositeExtract 66 1
+ 68: 20(fvec3) ConvertSToF 67
+ Store 24(inF1) 68
+ 69: 20(fvec3) CompositeExtract 66 0
+ Store 62(r000) 69
+ ReturnValue 71
+ FunctionEnd
+32(PixelShaderFunction(vf4;vf4;): 27(fvec4) Function None 29
+ 30(inF0): 28(ptr) FunctionParameter
+ 31(inF1): 28(ptr) FunctionParameter
+ 33: Label
+ 74(r000): 28(ptr) Variable Function
+ 75: 27(fvec4) Load 30(inF0)
+ 78: 77(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 75
+ 79: 76(ivec4) CompositeExtract 78 1
+ 80: 27(fvec4) ConvertSToF 79
+ Store 31(inF1) 80
+ 81: 27(fvec4) CompositeExtract 78 0
+ Store 74(r000) 81
+ ReturnValue 83
+ FunctionEnd
+ 36(@main():34(PS_OUTPUT) Function None 35
+ 37: Label
+ 87(ps_output): 86(ptr) Variable Function
+ 90: 28(ptr) AccessChain 87(ps_output) 88
+ Store 90 89
+ 91:34(PS_OUTPUT) Load 87(ps_output)
+ ReturnValue 91
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsic.frexp.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsic.frexp.vert.out
new file mode 100644
index 00000000000..01fc5b2b761
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsic.frexp.vert.out
@@ -0,0 +1,222 @@
+hlsl.intrinsic.frexp.vert
+Shader version: 500
+0:? Sequence
+0:2 Function Definition: VertexShaderFunctionS(f1;f1; ( temp float)
+0:2 Function Parameters:
+0:2 'inF0' ( in float)
+0:2 'inF1' ( in float)
+0:? Sequence
+0:3 frexp ( temp float)
+0:3 'inF0' ( in float)
+0:3 'inF1' ( in float)
+0:4 Branch: Return with expression
+0:4 Constant:
+0:4 0.000000
+0:8 Function Definition: VertexShaderFunction2(vf2;vf2; ( temp 2-component vector of float)
+0:8 Function Parameters:
+0:8 'inF0' ( in 2-component vector of float)
+0:8 'inF1' ( in 2-component vector of float)
+0:? Sequence
+0:9 frexp ( temp 2-component vector of float)
+0:9 'inF0' ( in 2-component vector of float)
+0:9 'inF1' ( in 2-component vector of float)
+0:10 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:14 Function Definition: VertexShaderFunction3(vf3;vf3; ( temp 3-component vector of float)
+0:14 Function Parameters:
+0:14 'inF0' ( in 3-component vector of float)
+0:14 'inF1' ( in 3-component vector of float)
+0:? Sequence
+0:15 frexp ( temp 3-component vector of float)
+0:15 'inF0' ( in 3-component vector of float)
+0:15 'inF1' ( in 3-component vector of float)
+0:16 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:20 Function Definition: VertexShaderFunction4(vf4;vf4; ( temp 4-component vector of float)
+0:20 Function Parameters:
+0:20 'inF0' ( in 4-component vector of float)
+0:20 'inF1' ( in 4-component vector of float)
+0:? Sequence
+0:21 frexp ( temp 4-component vector of float)
+0:21 'inF0' ( in 4-component vector of float)
+0:21 'inF1' ( in 4-component vector of float)
+0:22 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:? Linker Objects
+
+
+Linked vertex stage:
+
+WARNING: Linking vertex stage: Entry point not found
+
+Shader version: 500
+0:? Sequence
+0:2 Function Definition: VertexShaderFunctionS(f1;f1; ( temp float)
+0:2 Function Parameters:
+0:2 'inF0' ( in float)
+0:2 'inF1' ( in float)
+0:? Sequence
+0:3 frexp ( temp float)
+0:3 'inF0' ( in float)
+0:3 'inF1' ( in float)
+0:4 Branch: Return with expression
+0:4 Constant:
+0:4 0.000000
+0:8 Function Definition: VertexShaderFunction2(vf2;vf2; ( temp 2-component vector of float)
+0:8 Function Parameters:
+0:8 'inF0' ( in 2-component vector of float)
+0:8 'inF1' ( in 2-component vector of float)
+0:? Sequence
+0:9 frexp ( temp 2-component vector of float)
+0:9 'inF0' ( in 2-component vector of float)
+0:9 'inF1' ( in 2-component vector of float)
+0:10 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:14 Function Definition: VertexShaderFunction3(vf3;vf3; ( temp 3-component vector of float)
+0:14 Function Parameters:
+0:14 'inF0' ( in 3-component vector of float)
+0:14 'inF1' ( in 3-component vector of float)
+0:? Sequence
+0:15 frexp ( temp 3-component vector of float)
+0:15 'inF0' ( in 3-component vector of float)
+0:15 'inF1' ( in 3-component vector of float)
+0:16 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:20 Function Definition: VertexShaderFunction4(vf4;vf4; ( temp 4-component vector of float)
+0:20 Function Parameters:
+0:20 'inF0' ( in 4-component vector of float)
+0:20 'inF1' ( in 4-component vector of float)
+0:? Sequence
+0:21 frexp ( temp 4-component vector of float)
+0:21 'inF0' ( in 4-component vector of float)
+0:21 'inF1' ( in 4-component vector of float)
+0:22 Branch: Return with expression
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:? Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 78
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "VertexShaderFunction"
+ Source HLSL 500
+ Name 4 "VertexShaderFunction"
+ Name 11 "VertexShaderFunctionS(f1;f1;"
+ Name 9 "inF0"
+ Name 10 "inF1"
+ Name 18 "VertexShaderFunction2(vf2;vf2;"
+ Name 16 "inF0"
+ Name 17 "inF1"
+ Name 25 "VertexShaderFunction3(vf3;vf3;"
+ Name 23 "inF0"
+ Name 24 "inF1"
+ Name 32 "VertexShaderFunction4(vf4;vf4;"
+ Name 30 "inF0"
+ Name 31 "inF1"
+ Name 36 "ResType"
+ Name 46 "ResType"
+ Name 58 "ResType"
+ Name 69 "ResType"
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypePointer Function 6(float)
+ 8: TypeFunction 6(float) 7(ptr) 7(ptr)
+ 13: TypeVector 6(float) 2
+ 14: TypePointer Function 13(fvec2)
+ 15: TypeFunction 13(fvec2) 14(ptr) 14(ptr)
+ 20: TypeVector 6(float) 3
+ 21: TypePointer Function 20(fvec3)
+ 22: TypeFunction 20(fvec3) 21(ptr) 21(ptr)
+ 27: TypeVector 6(float) 4
+ 28: TypePointer Function 27(fvec4)
+ 29: TypeFunction 27(fvec4) 28(ptr) 28(ptr)
+ 35: TypeInt 32 1
+ 36(ResType): TypeStruct 6(float) 35(int)
+ 41: 6(float) Constant 0
+ 45: TypeVector 35(int) 2
+ 46(ResType): TypeStruct 13(fvec2) 45(ivec2)
+ 51: 6(float) Constant 1065353216
+ 52: 6(float) Constant 1073741824
+ 53: 13(fvec2) ConstantComposite 51 52
+ 57: TypeVector 35(int) 3
+ 58(ResType): TypeStruct 20(fvec3) 57(ivec3)
+ 63: 6(float) Constant 1077936128
+ 64: 20(fvec3) ConstantComposite 51 52 63
+ 68: TypeVector 35(int) 4
+ 69(ResType): TypeStruct 27(fvec4) 68(ivec4)
+ 74: 6(float) Constant 1082130432
+ 75: 27(fvec4) ConstantComposite 51 52 63 74
+4(VertexShaderFunction): 2 Function None 3
+ 5: Label
+ Return
+ FunctionEnd
+11(VertexShaderFunctionS(f1;f1;): 6(float) Function None 8
+ 9(inF0): 7(ptr) FunctionParameter
+ 10(inF1): 7(ptr) FunctionParameter
+ 12: Label
+ 34: 6(float) Load 9(inF0)
+ 37: 36(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 34
+ 38: 35(int) CompositeExtract 37 1
+ 39: 6(float) ConvertSToF 38
+ Store 10(inF1) 39
+ 40: 6(float) CompositeExtract 37 0
+ ReturnValue 41
+ FunctionEnd
+18(VertexShaderFunction2(vf2;vf2;): 13(fvec2) Function None 15
+ 16(inF0): 14(ptr) FunctionParameter
+ 17(inF1): 14(ptr) FunctionParameter
+ 19: Label
+ 44: 13(fvec2) Load 16(inF0)
+ 47: 46(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 44
+ 48: 45(ivec2) CompositeExtract 47 1
+ 49: 13(fvec2) ConvertSToF 48
+ Store 17(inF1) 49
+ 50: 13(fvec2) CompositeExtract 47 0
+ ReturnValue 53
+ FunctionEnd
+25(VertexShaderFunction3(vf3;vf3;): 20(fvec3) Function None 22
+ 23(inF0): 21(ptr) FunctionParameter
+ 24(inF1): 21(ptr) FunctionParameter
+ 26: Label
+ 56: 20(fvec3) Load 23(inF0)
+ 59: 58(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 56
+ 60: 57(ivec3) CompositeExtract 59 1
+ 61: 20(fvec3) ConvertSToF 60
+ Store 24(inF1) 61
+ 62: 20(fvec3) CompositeExtract 59 0
+ ReturnValue 64
+ FunctionEnd
+32(VertexShaderFunction4(vf4;vf4;): 27(fvec4) Function None 29
+ 30(inF0): 28(ptr) FunctionParameter
+ 31(inF1): 28(ptr) FunctionParameter
+ 33: Label
+ 67: 27(fvec4) Load 30(inF0)
+ 70: 69(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 67
+ 71: 68(ivec4) CompositeExtract 70 1
+ 72: 27(fvec4) ConvertSToF 71
+ Store 31(inF1) 72
+ 73: 27(fvec4) CompositeExtract 70 0
+ ReturnValue 75
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.barriers.comp.out
index c82ee0f0526..bc8a07352b3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.barriers.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.barriers.comp.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.barriers.comp
-Shader version: 450
+Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:3 Function Definition: @ComputeShaderFunction( ( temp float)
@@ -27,7 +27,7 @@ local_size = (1, 1, 1)
Linked compute stage:
-Shader version: 450
+Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:3 Function Definition: @ComputeShaderFunction( ( temp float)
@@ -52,7 +52,7 @@ local_size = (1, 1, 1)
0:? '@entryPointOutput' (layout( location=0) out float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 22
Capability Shader
@@ -60,6 +60,7 @@ local_size = (1, 1, 1)
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "ComputeShaderFunction" 20
ExecutionMode 4 LocalSize 1 1 1
+ Source HLSL 500
Name 4 "ComputeShaderFunction"
Name 8 "@ComputeShaderFunction("
Name 20 "@entryPointOutput"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out
index c4f7ac89ade..01b6f69c11f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.comp
-Shader version: 450
+Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:17 Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
@@ -11,7 +11,8 @@ local_size = (1, 1, 1)
0:17 'inU1' ( in uint)
0:? Sequence
0:21 all ( temp bool)
-0:21 'inF0' ( in float)
+0:21 Convert float to bool ( temp bool)
+0:21 'inF0' ( in float)
0:24 AtomicAdd ( temp void)
0:24 'gs_ua' ( shared uint)
0:24 'gs_ub' ( shared uint)
@@ -92,7 +93,8 @@ local_size = (1, 1, 1)
0:51 'inU1' ( in 2-component vector of uint)
0:? Sequence
0:55 all ( temp bool)
-0:55 'inF0' ( in 2-component vector of float)
+0:55 Convert float to bool ( temp 2-component vector of bool)
+0:55 'inF0' ( in 2-component vector of float)
0:58 AtomicAdd ( temp void)
0:58 'gs_ua2' ( shared 2-component vector of uint)
0:58 'gs_ub2' ( shared 2-component vector of uint)
@@ -165,7 +167,8 @@ local_size = (1, 1, 1)
0:78 'inU1' ( in 3-component vector of uint)
0:? Sequence
0:82 all ( temp bool)
-0:82 'inF0' ( in 3-component vector of float)
+0:82 Convert float to bool ( temp 3-component vector of bool)
+0:82 'inF0' ( in 3-component vector of float)
0:85 AtomicAdd ( temp void)
0:85 'gs_ua3' ( shared 3-component vector of uint)
0:85 'gs_ub3' ( shared 3-component vector of uint)
@@ -239,7 +242,8 @@ local_size = (1, 1, 1)
0:105 'inU1' ( in 4-component vector of uint)
0:? Sequence
0:109 all ( temp bool)
-0:109 'inF0' ( in 4-component vector of float)
+0:109 Convert float to bool ( temp 4-component vector of bool)
+0:109 'inF0' ( in 4-component vector of float)
0:112 AtomicAdd ( temp void)
0:112 'gs_ua4' ( shared 4-component vector of uint)
0:112 'gs_ub4' ( shared 4-component vector of uint)
@@ -355,7 +359,7 @@ local_size = (1, 1, 1)
Linked compute stage:
-Shader version: 450
+Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:17 Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
@@ -367,7 +371,8 @@ local_size = (1, 1, 1)
0:17 'inU1' ( in uint)
0:? Sequence
0:21 all ( temp bool)
-0:21 'inF0' ( in float)
+0:21 Convert float to bool ( temp bool)
+0:21 'inF0' ( in float)
0:24 AtomicAdd ( temp void)
0:24 'gs_ua' ( shared uint)
0:24 'gs_ub' ( shared uint)
@@ -448,7 +453,8 @@ local_size = (1, 1, 1)
0:51 'inU1' ( in 2-component vector of uint)
0:? Sequence
0:55 all ( temp bool)
-0:55 'inF0' ( in 2-component vector of float)
+0:55 Convert float to bool ( temp 2-component vector of bool)
+0:55 'inF0' ( in 2-component vector of float)
0:58 AtomicAdd ( temp void)
0:58 'gs_ua2' ( shared 2-component vector of uint)
0:58 'gs_ub2' ( shared 2-component vector of uint)
@@ -521,7 +527,8 @@ local_size = (1, 1, 1)
0:78 'inU1' ( in 3-component vector of uint)
0:? Sequence
0:82 all ( temp bool)
-0:82 'inF0' ( in 3-component vector of float)
+0:82 Convert float to bool ( temp 3-component vector of bool)
+0:82 'inF0' ( in 3-component vector of float)
0:85 AtomicAdd ( temp void)
0:85 'gs_ua3' ( shared 3-component vector of uint)
0:85 'gs_ub3' ( shared 3-component vector of uint)
@@ -595,7 +602,8 @@ local_size = (1, 1, 1)
0:105 'inU1' ( in 4-component vector of uint)
0:? Sequence
0:109 all ( temp bool)
-0:109 'inF0' ( in 4-component vector of float)
+0:109 Convert float to bool ( temp 4-component vector of bool)
+0:109 'inF0' ( in 4-component vector of float)
0:112 AtomicAdd ( temp void)
0:112 'gs_ua4' ( shared 4-component vector of uint)
0:112 'gs_ub4' ( shared 4-component vector of uint)
@@ -708,14 +716,15 @@ local_size = (1, 1, 1)
0:? 'inU1' (layout( location=4) in 4-component vector of uint)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 255
+// Generated by (magic number): 80002
+// Id's are bound by 265
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint GLCompute 4 "ComputeShaderFunction" 227 230 233 237 240 243
+ EntryPoint GLCompute 4 "ComputeShaderFunction" 237 240 243 247 250 253
ExecutionMode 4 LocalSize 1 1 1
+ Source HLSL 500
Name 4 "ComputeShaderFunction"
Name 16 "ComputeShaderFunctionS(f1;f1;f1;u1;u1;"
Name 11 "inF0"
@@ -745,44 +754,44 @@ local_size = (1, 1, 1)
Name 55 "inF2"
Name 56 "inU0"
Name 57 "inU1"
- Name 64 "gs_ua"
- Name 65 "gs_ub"
- Name 70 "out_u1"
- Name 78 "gs_uc"
- Name 107 "gs_ua2"
- Name 108 "gs_ub2"
- Name 111 "out_u2"
- Name 119 "gs_uc2"
- Name 148 "gs_ua3"
- Name 149 "gs_ub3"
- Name 152 "out_u3"
- Name 160 "gs_uc3"
- Name 188 "gs_ua4"
- Name 189 "gs_ub4"
- Name 192 "out_u4"
- Name 200 "gs_uc4"
- Name 225 "inF0"
- Name 227 "inF0"
- Name 229 "inF1"
- Name 230 "inF1"
- Name 232 "inF2"
- Name 233 "inF2"
- Name 235 "inU0"
- Name 237 "inU0"
- Name 239 "inU1"
- Name 240 "inU1"
- Name 243 "@entryPointOutput"
- Name 244 "param"
- Name 246 "param"
- Name 248 "param"
- Name 250 "param"
- Name 252 "param"
- Decorate 227(inF0) Location 0
- Decorate 230(inF1) Location 1
- Decorate 233(inF2) Location 2
- Decorate 237(inU0) Location 3
- Decorate 240(inU1) Location 4
- Decorate 243(@entryPointOutput) Location 0
+ Name 66 "gs_ua"
+ Name 67 "gs_ub"
+ Name 72 "out_u1"
+ Name 80 "gs_uc"
+ Name 111 "gs_ua2"
+ Name 112 "gs_ub2"
+ Name 115 "out_u2"
+ Name 123 "gs_uc2"
+ Name 155 "gs_ua3"
+ Name 156 "gs_ub3"
+ Name 159 "out_u3"
+ Name 167 "gs_uc3"
+ Name 198 "gs_ua4"
+ Name 199 "gs_ub4"
+ Name 202 "out_u4"
+ Name 210 "gs_uc4"
+ Name 235 "inF0"
+ Name 237 "inF0"
+ Name 239 "inF1"
+ Name 240 "inF1"
+ Name 242 "inF2"
+ Name 243 "inF2"
+ Name 245 "inU0"
+ Name 247 "inU0"
+ Name 249 "inU1"
+ Name 250 "inU1"
+ Name 253 "@entryPointOutput"
+ Name 254 "param"
+ Name 256 "param"
+ Name 258 "param"
+ Name 260 "param"
+ Name 262 "param"
+ Decorate 237(inF0) Location 0
+ Decorate 240(inF1) Location 1
+ Decorate 243(inF2) Location 2
+ Decorate 247(inU0) Location 3
+ Decorate 250(inU1) Location 4
+ Decorate 253(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -807,75 +816,81 @@ local_size = (1, 1, 1)
51: TypePointer Function 50(ivec4)
52: TypeFunction 48(fvec4) 49(ptr) 49(ptr) 49(ptr) 51(ptr) 51(ptr)
61: TypeBool
- 63: TypePointer Workgroup 8(int)
- 64(gs_ua): 63(ptr) Variable Workgroup
- 65(gs_ub): 63(ptr) Variable Workgroup
- 67: 8(int) Constant 1
- 68: 8(int) Constant 0
- 78(gs_uc): 63(ptr) Variable Workgroup
- 99: 6(float) Constant 0
- 106: TypePointer Workgroup 26(ivec2)
- 107(gs_ua2): 106(ptr) Variable Workgroup
- 108(gs_ub2): 106(ptr) Variable Workgroup
- 119(gs_uc2): 106(ptr) Variable Workgroup
- 140: 6(float) Constant 1065353216
- 141: 6(float) Constant 1073741824
- 142: 24(fvec2) ConstantComposite 140 141
- 147: TypePointer Workgroup 38(ivec3)
- 148(gs_ua3): 147(ptr) Variable Workgroup
- 149(gs_ub3): 147(ptr) Variable Workgroup
- 160(gs_uc3): 147(ptr) Variable Workgroup
- 181: 6(float) Constant 1077936128
- 182: 36(fvec3) ConstantComposite 140 141 181
- 187: TypePointer Workgroup 50(ivec4)
- 188(gs_ua4): 187(ptr) Variable Workgroup
- 189(gs_ub4): 187(ptr) Variable Workgroup
- 200(gs_uc4): 187(ptr) Variable Workgroup
- 221: 6(float) Constant 1082130432
- 222: 48(fvec4) ConstantComposite 140 141 181 221
- 226: TypePointer Input 48(fvec4)
- 227(inF0): 226(ptr) Variable Input
- 230(inF1): 226(ptr) Variable Input
- 233(inF2): 226(ptr) Variable Input
- 236: TypePointer Input 50(ivec4)
- 237(inU0): 236(ptr) Variable Input
- 240(inU1): 236(ptr) Variable Input
- 242: TypePointer Output 48(fvec4)
-243(@entryPointOutput): 242(ptr) Variable Output
+ 62: 6(float) Constant 0
+ 65: TypePointer Workgroup 8(int)
+ 66(gs_ua): 65(ptr) Variable Workgroup
+ 67(gs_ub): 65(ptr) Variable Workgroup
+ 69: 8(int) Constant 1
+ 70: 8(int) Constant 0
+ 80(gs_uc): 65(ptr) Variable Workgroup
+ 106: TypeVector 61(bool) 2
+ 107: 24(fvec2) ConstantComposite 62 62
+ 110: TypePointer Workgroup 26(ivec2)
+ 111(gs_ua2): 110(ptr) Variable Workgroup
+ 112(gs_ub2): 110(ptr) Variable Workgroup
+ 123(gs_uc2): 110(ptr) Variable Workgroup
+ 144: 6(float) Constant 1065353216
+ 145: 6(float) Constant 1073741824
+ 146: 24(fvec2) ConstantComposite 144 145
+ 150: TypeVector 61(bool) 3
+ 151: 36(fvec3) ConstantComposite 62 62 62
+ 154: TypePointer Workgroup 38(ivec3)
+ 155(gs_ua3): 154(ptr) Variable Workgroup
+ 156(gs_ub3): 154(ptr) Variable Workgroup
+ 167(gs_uc3): 154(ptr) Variable Workgroup
+ 188: 6(float) Constant 1077936128
+ 189: 36(fvec3) ConstantComposite 144 145 188
+ 193: TypeVector 61(bool) 4
+ 194: 48(fvec4) ConstantComposite 62 62 62 62
+ 197: TypePointer Workgroup 50(ivec4)
+ 198(gs_ua4): 197(ptr) Variable Workgroup
+ 199(gs_ub4): 197(ptr) Variable Workgroup
+ 210(gs_uc4): 197(ptr) Variable Workgroup
+ 231: 6(float) Constant 1082130432
+ 232: 48(fvec4) ConstantComposite 144 145 188 231
+ 236: TypePointer Input 48(fvec4)
+ 237(inF0): 236(ptr) Variable Input
+ 240(inF1): 236(ptr) Variable Input
+ 243(inF2): 236(ptr) Variable Input
+ 246: TypePointer Input 50(ivec4)
+ 247(inU0): 246(ptr) Variable Input
+ 250(inU1): 246(ptr) Variable Input
+ 252: TypePointer Output 48(fvec4)
+253(@entryPointOutput): 252(ptr) Variable Output
4(ComputeShaderFunction): 2 Function None 3
5: Label
- 225(inF0): 49(ptr) Variable Function
- 229(inF1): 49(ptr) Variable Function
- 232(inF2): 49(ptr) Variable Function
- 235(inU0): 51(ptr) Variable Function
- 239(inU1): 51(ptr) Variable Function
- 244(param): 49(ptr) Variable Function
- 246(param): 49(ptr) Variable Function
- 248(param): 49(ptr) Variable Function
- 250(param): 51(ptr) Variable Function
- 252(param): 51(ptr) Variable Function
- 228: 48(fvec4) Load 227(inF0)
- Store 225(inF0) 228
- 231: 48(fvec4) Load 230(inF1)
- Store 229(inF1) 231
- 234: 48(fvec4) Load 233(inF2)
- Store 232(inF2) 234
- 238: 50(ivec4) Load 237(inU0)
- Store 235(inU0) 238
- 241: 50(ivec4) Load 240(inU1)
- Store 239(inU1) 241
- 245: 48(fvec4) Load 225(inF0)
- Store 244(param) 245
- 247: 48(fvec4) Load 229(inF1)
- Store 246(param) 247
- 249: 48(fvec4) Load 232(inF2)
- Store 248(param) 249
- 251: 50(ivec4) Load 235(inU0)
- Store 250(param) 251
- 253: 50(ivec4) Load 239(inU1)
- Store 252(param) 253
- 254: 48(fvec4) FunctionCall 58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;) 244(param) 246(param) 248(param) 250(param) 252(param)
- Store 243(@entryPointOutput) 254
+ 235(inF0): 49(ptr) Variable Function
+ 239(inF1): 49(ptr) Variable Function
+ 242(inF2): 49(ptr) Variable Function
+ 245(inU0): 51(ptr) Variable Function
+ 249(inU1): 51(ptr) Variable Function
+ 254(param): 49(ptr) Variable Function
+ 256(param): 49(ptr) Variable Function
+ 258(param): 49(ptr) Variable Function
+ 260(param): 51(ptr) Variable Function
+ 262(param): 51(ptr) Variable Function
+ 238: 48(fvec4) Load 237(inF0)
+ Store 235(inF0) 238
+ 241: 48(fvec4) Load 240(inF1)
+ Store 239(inF1) 241
+ 244: 48(fvec4) Load 243(inF2)
+ Store 242(inF2) 244
+ 248: 50(ivec4) Load 247(inU0)
+ Store 245(inU0) 248
+ 251: 50(ivec4) Load 250(inU1)
+ Store 249(inU1) 251
+ 255: 48(fvec4) Load 235(inF0)
+ Store 254(param) 255
+ 257: 48(fvec4) Load 239(inF1)
+ Store 256(param) 257
+ 259: 48(fvec4) Load 242(inF2)
+ Store 258(param) 259
+ 261: 50(ivec4) Load 245(inU0)
+ Store 260(param) 261
+ 263: 50(ivec4) Load 249(inU1)
+ Store 262(param) 263
+ 264: 48(fvec4) FunctionCall 58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;) 254(param) 256(param) 258(param) 260(param) 262(param)
+ Store 253(@entryPointOutput) 264
Return
FunctionEnd
16(ComputeShaderFunctionS(f1;f1;f1;u1;u1;): 6(float) Function None 10
@@ -885,54 +900,55 @@ local_size = (1, 1, 1)
14(inU0): 9(ptr) FunctionParameter
15(inU1): 9(ptr) FunctionParameter
17: Label
- 70(out_u1): 9(ptr) Variable Function
+ 72(out_u1): 9(ptr) Variable Function
60: 6(float) Load 11(inF0)
- 62: 61(bool) All 60
- 66: 8(int) Load 65(gs_ub)
- 69: 2 AtomicIAdd 64(gs_ua) 67 68 66
- 71: 8(int) Load 65(gs_ub)
- 72: 8(int) AtomicIAdd 64(gs_ua) 67 68 71
- Store 70(out_u1) 72
- 73: 8(int) Load 65(gs_ub)
- 74: 2 AtomicAnd 64(gs_ua) 67 68 73
- 75: 8(int) Load 65(gs_ub)
- 76: 8(int) AtomicAnd 64(gs_ua) 67 68 75
- Store 70(out_u1) 76
- 77: 8(int) Load 65(gs_ub)
- 79: 8(int) Load 78(gs_uc)
- 80: 8(int) AtomicCompareExchange 64(gs_ua) 67 68 68 79 77
- Store 70(out_u1) 80
- 81: 8(int) Load 65(gs_ub)
- 82: 8(int) AtomicExchange 64(gs_ua) 67 68 81
- Store 70(out_u1) 82
- 83: 8(int) Load 65(gs_ub)
- 84: 2 AtomicSMax 64(gs_ua) 67 68 83
- 85: 8(int) Load 65(gs_ub)
- 86: 8(int) AtomicUMax 64(gs_ua) 67 68 85
- Store 70(out_u1) 86
- 87: 8(int) Load 65(gs_ub)
- 88: 2 AtomicSMin 64(gs_ua) 67 68 87
- 89: 8(int) Load 65(gs_ub)
- 90: 8(int) AtomicUMin 64(gs_ua) 67 68 89
- Store 70(out_u1) 90
- 91: 8(int) Load 65(gs_ub)
- 92: 2 AtomicOr 64(gs_ua) 67 68 91
- 93: 8(int) Load 65(gs_ub)
- 94: 8(int) AtomicOr 64(gs_ua) 67 68 93
- Store 70(out_u1) 94
- 95: 8(int) Load 65(gs_ub)
- 96: 2 AtomicXor 64(gs_ua) 67 68 95
- 97: 8(int) Load 65(gs_ub)
- 98: 8(int) AtomicXor 64(gs_ua) 67 68 97
- Store 70(out_u1) 98
- ReturnValue 99
+ 63: 61(bool) FOrdNotEqual 60 62
+ 64: 61(bool) All 63
+ 68: 8(int) Load 67(gs_ub)
+ 71: 2 AtomicIAdd 66(gs_ua) 69 70 68
+ 73: 8(int) Load 67(gs_ub)
+ 74: 8(int) AtomicIAdd 66(gs_ua) 69 70 73
+ Store 72(out_u1) 74
+ 75: 8(int) Load 67(gs_ub)
+ 76: 2 AtomicAnd 66(gs_ua) 69 70 75
+ 77: 8(int) Load 67(gs_ub)
+ 78: 8(int) AtomicAnd 66(gs_ua) 69 70 77
+ Store 72(out_u1) 78
+ 79: 8(int) Load 67(gs_ub)
+ 81: 8(int) Load 80(gs_uc)
+ 82: 8(int) AtomicCompareExchange 66(gs_ua) 69 70 70 81 79
+ Store 72(out_u1) 82
+ 83: 8(int) Load 67(gs_ub)
+ 84: 8(int) AtomicExchange 66(gs_ua) 69 70 83
+ Store 72(out_u1) 84
+ 85: 8(int) Load 67(gs_ub)
+ 86: 2 AtomicSMax 66(gs_ua) 69 70 85
+ 87: 8(int) Load 67(gs_ub)
+ 88: 8(int) AtomicUMax 66(gs_ua) 69 70 87
+ Store 72(out_u1) 88
+ 89: 8(int) Load 67(gs_ub)
+ 90: 2 AtomicSMin 66(gs_ua) 69 70 89
+ 91: 8(int) Load 67(gs_ub)
+ 92: 8(int) AtomicUMin 66(gs_ua) 69 70 91
+ Store 72(out_u1) 92
+ 93: 8(int) Load 67(gs_ub)
+ 94: 2 AtomicOr 66(gs_ua) 69 70 93
+ 95: 8(int) Load 67(gs_ub)
+ 96: 8(int) AtomicOr 66(gs_ua) 69 70 95
+ Store 72(out_u1) 96
+ 97: 8(int) Load 67(gs_ub)
+ 98: 2 AtomicXor 66(gs_ua) 69 70 97
+ 99: 8(int) Load 67(gs_ub)
+ 100: 8(int) AtomicXor 66(gs_ua) 69 70 99
+ Store 72(out_u1) 100
+ ReturnValue 62
FunctionEnd
22(ComputeShaderFunction1(vf1;vf1;vf1;): 6(float) Function None 18
19(inF0): 7(ptr) FunctionParameter
20(inF1): 7(ptr) FunctionParameter
21(inF2): 7(ptr) FunctionParameter
23: Label
- ReturnValue 99
+ ReturnValue 62
FunctionEnd
34(ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2;): 24(fvec2) Function None 28
29(inF0): 25(ptr) FunctionParameter
@@ -941,47 +957,48 @@ local_size = (1, 1, 1)
32(inU0): 27(ptr) FunctionParameter
33(inU1): 27(ptr) FunctionParameter
35: Label
- 111(out_u2): 27(ptr) Variable Function
- 104: 24(fvec2) Load 29(inF0)
- 105: 61(bool) All 104
- 109: 26(ivec2) Load 108(gs_ub2)
- 110: 2 AtomicIAdd 107(gs_ua2) 67 68 109
- 112: 26(ivec2) Load 108(gs_ub2)
- 113: 26(ivec2) AtomicIAdd 107(gs_ua2) 67 68 112
- Store 111(out_u2) 113
- 114: 26(ivec2) Load 108(gs_ub2)
- 115: 2 AtomicAnd 107(gs_ua2) 67 68 114
- 116: 26(ivec2) Load 108(gs_ub2)
- 117: 26(ivec2) AtomicAnd 107(gs_ua2) 67 68 116
- Store 111(out_u2) 117
- 118: 26(ivec2) Load 108(gs_ub2)
- 120: 26(ivec2) Load 119(gs_uc2)
- 121: 26(ivec2) AtomicCompareExchange 107(gs_ua2) 67 68 68 120 118
- Store 111(out_u2) 121
- 122: 26(ivec2) Load 108(gs_ub2)
- 123: 26(ivec2) AtomicExchange 107(gs_ua2) 67 68 122
- Store 111(out_u2) 123
- 124: 26(ivec2) Load 108(gs_ub2)
- 125: 2 AtomicSMax 107(gs_ua2) 67 68 124
- 126: 26(ivec2) Load 108(gs_ub2)
- 127: 26(ivec2) AtomicUMax 107(gs_ua2) 67 68 126
- Store 111(out_u2) 127
- 128: 26(ivec2) Load 108(gs_ub2)
- 129: 2 AtomicSMin 107(gs_ua2) 67 68 128
- 130: 26(ivec2) Load 108(gs_ub2)
- 131: 26(ivec2) AtomicUMin 107(gs_ua2) 67 68 130
- Store 111(out_u2) 131
- 132: 26(ivec2) Load 108(gs_ub2)
- 133: 2 AtomicOr 107(gs_ua2) 67 68 132
- 134: 26(ivec2) Load 108(gs_ub2)
- 135: 26(ivec2) AtomicOr 107(gs_ua2) 67 68 134
- Store 111(out_u2) 135
- 136: 26(ivec2) Load 108(gs_ub2)
- 137: 2 AtomicXor 107(gs_ua2) 67 68 136
- 138: 26(ivec2) Load 108(gs_ub2)
- 139: 26(ivec2) AtomicXor 107(gs_ua2) 67 68 138
- Store 111(out_u2) 139
- ReturnValue 142
+ 115(out_u2): 27(ptr) Variable Function
+ 105: 24(fvec2) Load 29(inF0)
+ 108: 106(bvec2) FOrdNotEqual 105 107
+ 109: 61(bool) All 108
+ 113: 26(ivec2) Load 112(gs_ub2)
+ 114: 2 AtomicIAdd 111(gs_ua2) 69 70 113
+ 116: 26(ivec2) Load 112(gs_ub2)
+ 117: 26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 116
+ Store 115(out_u2) 117
+ 118: 26(ivec2) Load 112(gs_ub2)
+ 119: 2 AtomicAnd 111(gs_ua2) 69 70 118
+ 120: 26(ivec2) Load 112(gs_ub2)
+ 121: 26(ivec2) AtomicAnd 111(gs_ua2) 69 70 120
+ Store 115(out_u2) 121
+ 122: 26(ivec2) Load 112(gs_ub2)
+ 124: 26(ivec2) Load 123(gs_uc2)
+ 125: 26(ivec2) AtomicCompareExchange 111(gs_ua2) 69 70 70 124 122
+ Store 115(out_u2) 125
+ 126: 26(ivec2) Load 112(gs_ub2)
+ 127: 26(ivec2) AtomicExchange 111(gs_ua2) 69 70 126
+ Store 115(out_u2) 127
+ 128: 26(ivec2) Load 112(gs_ub2)
+ 129: 2 AtomicSMax 111(gs_ua2) 69 70 128
+ 130: 26(ivec2) Load 112(gs_ub2)
+ 131: 26(ivec2) AtomicUMax 111(gs_ua2) 69 70 130
+ Store 115(out_u2) 131
+ 132: 26(ivec2) Load 112(gs_ub2)
+ 133: 2 AtomicSMin 111(gs_ua2) 69 70 132
+ 134: 26(ivec2) Load 112(gs_ub2)
+ 135: 26(ivec2) AtomicUMin 111(gs_ua2) 69 70 134
+ Store 115(out_u2) 135
+ 136: 26(ivec2) Load 112(gs_ub2)
+ 137: 2 AtomicOr 111(gs_ua2) 69 70 136
+ 138: 26(ivec2) Load 112(gs_ub2)
+ 139: 26(ivec2) AtomicOr 111(gs_ua2) 69 70 138
+ Store 115(out_u2) 139
+ 140: 26(ivec2) Load 112(gs_ub2)
+ 141: 2 AtomicXor 111(gs_ua2) 69 70 140
+ 142: 26(ivec2) Load 112(gs_ub2)
+ 143: 26(ivec2) AtomicXor 111(gs_ua2) 69 70 142
+ Store 115(out_u2) 143
+ ReturnValue 146
FunctionEnd
46(ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3;): 36(fvec3) Function None 40
41(inF0): 37(ptr) FunctionParameter
@@ -990,47 +1007,48 @@ local_size = (1, 1, 1)
44(inU0): 39(ptr) FunctionParameter
45(inU1): 39(ptr) FunctionParameter
47: Label
- 152(out_u3): 39(ptr) Variable Function
- 145: 36(fvec3) Load 41(inF0)
- 146: 61(bool) All 145
- 150: 38(ivec3) Load 149(gs_ub3)
- 151: 2 AtomicIAdd 148(gs_ua3) 67 68 150
- 153: 38(ivec3) Load 149(gs_ub3)
- 154: 38(ivec3) AtomicIAdd 148(gs_ua3) 67 68 153
- Store 152(out_u3) 154
- 155: 38(ivec3) Load 149(gs_ub3)
- 156: 2 AtomicAnd 148(gs_ua3) 67 68 155
- 157: 38(ivec3) Load 149(gs_ub3)
- 158: 38(ivec3) AtomicAnd 148(gs_ua3) 67 68 157
- Store 152(out_u3) 158
- 159: 38(ivec3) Load 149(gs_ub3)
- 161: 38(ivec3) Load 160(gs_uc3)
- 162: 38(ivec3) AtomicCompareExchange 148(gs_ua3) 67 68 68 161 159
- Store 152(out_u3) 162
- 163: 38(ivec3) Load 149(gs_ub3)
- 164: 38(ivec3) AtomicExchange 148(gs_ua3) 67 68 163
- Store 152(out_u3) 164
- 165: 38(ivec3) Load 149(gs_ub3)
- 166: 2 AtomicSMax 148(gs_ua3) 67 68 165
- 167: 38(ivec3) Load 149(gs_ub3)
- 168: 38(ivec3) AtomicUMax 148(gs_ua3) 67 68 167
- Store 152(out_u3) 168
- 169: 38(ivec3) Load 149(gs_ub3)
- 170: 2 AtomicSMin 148(gs_ua3) 67 68 169
- 171: 38(ivec3) Load 149(gs_ub3)
- 172: 38(ivec3) AtomicUMin 148(gs_ua3) 67 68 171
- Store 152(out_u3) 172
- 173: 38(ivec3) Load 149(gs_ub3)
- 174: 2 AtomicOr 148(gs_ua3) 67 68 173
- 175: 38(ivec3) Load 149(gs_ub3)
- 176: 38(ivec3) AtomicOr 148(gs_ua3) 67 68 175
- Store 152(out_u3) 176
- 177: 38(ivec3) Load 149(gs_ub3)
- 178: 2 AtomicXor 148(gs_ua3) 67 68 177
- 179: 38(ivec3) Load 149(gs_ub3)
- 180: 38(ivec3) AtomicXor 148(gs_ua3) 67 68 179
- Store 152(out_u3) 180
- ReturnValue 182
+ 159(out_u3): 39(ptr) Variable Function
+ 149: 36(fvec3) Load 41(inF0)
+ 152: 150(bvec3) FOrdNotEqual 149 151
+ 153: 61(bool) All 152
+ 157: 38(ivec3) Load 156(gs_ub3)
+ 158: 2 AtomicIAdd 155(gs_ua3) 69 70 157
+ 160: 38(ivec3) Load 156(gs_ub3)
+ 161: 38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 160
+ Store 159(out_u3) 161
+ 162: 38(ivec3) Load 156(gs_ub3)
+ 163: 2 AtomicAnd 155(gs_ua3) 69 70 162
+ 164: 38(ivec3) Load 156(gs_ub3)
+ 165: 38(ivec3) AtomicAnd 155(gs_ua3) 69 70 164
+ Store 159(out_u3) 165
+ 166: 38(ivec3) Load 156(gs_ub3)
+ 168: 38(ivec3) Load 167(gs_uc3)
+ 169: 38(ivec3) AtomicCompareExchange 155(gs_ua3) 69 70 70 168 166
+ Store 159(out_u3) 169
+ 170: 38(ivec3) Load 156(gs_ub3)
+ 171: 38(ivec3) AtomicExchange 155(gs_ua3) 69 70 170
+ Store 159(out_u3) 171
+ 172: 38(ivec3) Load 156(gs_ub3)
+ 173: 2 AtomicSMax 155(gs_ua3) 69 70 172
+ 174: 38(ivec3) Load 156(gs_ub3)
+ 175: 38(ivec3) AtomicUMax 155(gs_ua3) 69 70 174
+ Store 159(out_u3) 175
+ 176: 38(ivec3) Load 156(gs_ub3)
+ 177: 2 AtomicSMin 155(gs_ua3) 69 70 176
+ 178: 38(ivec3) Load 156(gs_ub3)
+ 179: 38(ivec3) AtomicUMin 155(gs_ua3) 69 70 178
+ Store 159(out_u3) 179
+ 180: 38(ivec3) Load 156(gs_ub3)
+ 181: 2 AtomicOr 155(gs_ua3) 69 70 180
+ 182: 38(ivec3) Load 156(gs_ub3)
+ 183: 38(ivec3) AtomicOr 155(gs_ua3) 69 70 182
+ Store 159(out_u3) 183
+ 184: 38(ivec3) Load 156(gs_ub3)
+ 185: 2 AtomicXor 155(gs_ua3) 69 70 184
+ 186: 38(ivec3) Load 156(gs_ub3)
+ 187: 38(ivec3) AtomicXor 155(gs_ua3) 69 70 186
+ Store 159(out_u3) 187
+ ReturnValue 189
FunctionEnd
58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;): 48(fvec4) Function None 52
53(inF0): 49(ptr) FunctionParameter
@@ -1039,45 +1057,46 @@ local_size = (1, 1, 1)
56(inU0): 51(ptr) FunctionParameter
57(inU1): 51(ptr) FunctionParameter
59: Label
- 192(out_u4): 51(ptr) Variable Function
- 185: 48(fvec4) Load 53(inF0)
- 186: 61(bool) All 185
- 190: 50(ivec4) Load 189(gs_ub4)
- 191: 2 AtomicIAdd 188(gs_ua4) 67 68 190
- 193: 50(ivec4) Load 189(gs_ub4)
- 194: 50(ivec4) AtomicIAdd 188(gs_ua4) 67 68 193
- Store 192(out_u4) 194
- 195: 50(ivec4) Load 189(gs_ub4)
- 196: 2 AtomicAnd 188(gs_ua4) 67 68 195
- 197: 50(ivec4) Load 189(gs_ub4)
- 198: 50(ivec4) AtomicAnd 188(gs_ua4) 67 68 197
- Store 192(out_u4) 198
- 199: 50(ivec4) Load 189(gs_ub4)
- 201: 50(ivec4) Load 200(gs_uc4)
- 202: 50(ivec4) AtomicCompareExchange 188(gs_ua4) 67 68 68 201 199
- Store 192(out_u4) 202
- 203: 50(ivec4) Load 189(gs_ub4)
- 204: 50(ivec4) AtomicExchange 188(gs_ua4) 67 68 203
- Store 192(out_u4) 204
- 205: 50(ivec4) Load 189(gs_ub4)
- 206: 2 AtomicSMax 188(gs_ua4) 67 68 205
- 207: 50(ivec4) Load 189(gs_ub4)
- 208: 50(ivec4) AtomicUMax 188(gs_ua4) 67 68 207
- Store 192(out_u4) 208
- 209: 50(ivec4) Load 189(gs_ub4)
- 210: 2 AtomicSMin 188(gs_ua4) 67 68 209
- 211: 50(ivec4) Load 189(gs_ub4)
- 212: 50(ivec4) AtomicUMin 188(gs_ua4) 67 68 211
- Store 192(out_u4) 212
- 213: 50(ivec4) Load 189(gs_ub4)
- 214: 2 AtomicOr 188(gs_ua4) 67 68 213
- 215: 50(ivec4) Load 189(gs_ub4)
- 216: 50(ivec4) AtomicOr 188(gs_ua4) 67 68 215
- Store 192(out_u4) 216
- 217: 50(ivec4) Load 189(gs_ub4)
- 218: 2 AtomicXor 188(gs_ua4) 67 68 217
- 219: 50(ivec4) Load 189(gs_ub4)
- 220: 50(ivec4) AtomicXor 188(gs_ua4) 67 68 219
- Store 192(out_u4) 220
- ReturnValue 222
+ 202(out_u4): 51(ptr) Variable Function
+ 192: 48(fvec4) Load 53(inF0)
+ 195: 193(bvec4) FOrdNotEqual 192 194
+ 196: 61(bool) All 195
+ 200: 50(ivec4) Load 199(gs_ub4)
+ 201: 2 AtomicIAdd 198(gs_ua4) 69 70 200
+ 203: 50(ivec4) Load 199(gs_ub4)
+ 204: 50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 203
+ Store 202(out_u4) 204
+ 205: 50(ivec4) Load 199(gs_ub4)
+ 206: 2 AtomicAnd 198(gs_ua4) 69 70 205
+ 207: 50(ivec4) Load 199(gs_ub4)
+ 208: 50(ivec4) AtomicAnd 198(gs_ua4) 69 70 207
+ Store 202(out_u4) 208
+ 209: 50(ivec4) Load 199(gs_ub4)
+ 211: 50(ivec4) Load 210(gs_uc4)
+ 212: 50(ivec4) AtomicCompareExchange 198(gs_ua4) 69 70 70 211 209
+ Store 202(out_u4) 212
+ 213: 50(ivec4) Load 199(gs_ub4)
+ 214: 50(ivec4) AtomicExchange 198(gs_ua4) 69 70 213
+ Store 202(out_u4) 214
+ 215: 50(ivec4) Load 199(gs_ub4)
+ 216: 2 AtomicSMax 198(gs_ua4) 69 70 215
+ 217: 50(ivec4) Load 199(gs_ub4)
+ 218: 50(ivec4) AtomicUMax 198(gs_ua4) 69 70 217
+ Store 202(out_u4) 218
+ 219: 50(ivec4) Load 199(gs_ub4)
+ 220: 2 AtomicSMin 198(gs_ua4) 69 70 219
+ 221: 50(ivec4) Load 199(gs_ub4)
+ 222: 50(ivec4) AtomicUMin 198(gs_ua4) 69 70 221
+ Store 202(out_u4) 222
+ 223: 50(ivec4) Load 199(gs_ub4)
+ 224: 2 AtomicOr 198(gs_ua4) 69 70 223
+ 225: 50(ivec4) Load 199(gs_ub4)
+ 226: 50(ivec4) AtomicOr 198(gs_ua4) 69 70 225
+ Store 202(out_u4) 226
+ 227: 50(ivec4) Load 199(gs_ub4)
+ 228: 2 AtomicXor 198(gs_ua4) 69 70 227
+ 229: 50(ivec4) Load 199(gs_ub4)
+ 230: 50(ivec4) AtomicXor 198(gs_ua4) 69 70 229
+ Store 202(out_u4) 230
+ ReturnValue 232
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
index e38e621b8f1..e365b981dfe 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.d3dcolortoubyte4.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main( ( temp 4-component vector of int)
@@ -38,7 +38,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main( ( temp 4-component vector of int)
@@ -74,7 +74,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 29
Capability Shader
@@ -82,6 +82,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 27
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "@main("
Name 14 "$Global"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out
index 1a6524f788c..a2e7c5f2fe3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.double.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.double.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; ( temp float)
@@ -35,28 +35,28 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 move second child to first child ( temp double)
0:? 'inDV1a' ( temp double)
-0:? 'inDV1a' (layout( location=0) in double)
+0:? 'inDV1a' (layout( location=0) flat in double)
0:5 move second child to first child ( temp double)
0:? 'inDV1b' ( temp double)
-0:? 'inDV1b' (layout( location=1) in double)
+0:? 'inDV1b' (layout( location=1) flat in double)
0:5 move second child to first child ( temp double)
0:? 'inDV1c' ( temp double)
-0:? 'inDV1c' (layout( location=2) in double)
+0:? 'inDV1c' (layout( location=2) flat in double)
0:5 move second child to first child ( temp 2-component vector of double)
0:? 'inDV2' ( temp 2-component vector of double)
-0:? 'inDV2' (layout( location=3) in 2-component vector of double)
+0:? 'inDV2' (layout( location=3) flat in 2-component vector of double)
0:5 move second child to first child ( temp 3-component vector of double)
0:? 'inDV3' ( temp 3-component vector of double)
-0:? 'inDV3' (layout( location=4) in 3-component vector of double)
+0:? 'inDV3' (layout( location=4) flat in 3-component vector of double)
0:5 move second child to first child ( temp 4-component vector of double)
0:? 'inDV4' ( temp 4-component vector of double)
-0:? 'inDV4' (layout( location=6) in 4-component vector of double)
+0:? 'inDV4' (layout( location=6) flat in 4-component vector of double)
0:5 move second child to first child ( temp uint)
0:? 'inU1a' ( temp uint)
-0:? 'inU1a' (layout( location=8) in uint)
+0:? 'inU1a' (layout( location=8) flat in uint)
0:5 move second child to first child ( temp uint)
0:? 'inU1b' ( temp uint)
-0:? 'inU1b' (layout( location=9) in uint)
+0:? 'inU1b' (layout( location=9) flat in uint)
0:5 move second child to first child ( temp float)
0:? '@entryPointOutput' (layout( location=0) out float)
0:5 Function Call: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; ( temp float)
@@ -70,20 +70,20 @@ gl_FragCoord origin is upper left
0:? 'inU1b' ( temp uint)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out float)
-0:? 'inDV1a' (layout( location=0) in double)
-0:? 'inDV1b' (layout( location=1) in double)
-0:? 'inDV1c' (layout( location=2) in double)
-0:? 'inDV2' (layout( location=3) in 2-component vector of double)
-0:? 'inDV3' (layout( location=4) in 3-component vector of double)
-0:? 'inDV4' (layout( location=6) in 4-component vector of double)
-0:? 'inU1a' (layout( location=8) in uint)
-0:? 'inU1b' (layout( location=9) in uint)
+0:? 'inDV1a' (layout( location=0) flat in double)
+0:? 'inDV1b' (layout( location=1) flat in double)
+0:? 'inDV1c' (layout( location=2) flat in double)
+0:? 'inDV2' (layout( location=3) flat in 2-component vector of double)
+0:? 'inDV3' (layout( location=4) flat in 3-component vector of double)
+0:? 'inDV4' (layout( location=6) flat in 4-component vector of double)
+0:? 'inU1a' (layout( location=8) flat in uint)
+0:? 'inU1b' (layout( location=9) flat in uint)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; ( temp float)
@@ -119,28 +119,28 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 move second child to first child ( temp double)
0:? 'inDV1a' ( temp double)
-0:? 'inDV1a' (layout( location=0) in double)
+0:? 'inDV1a' (layout( location=0) flat in double)
0:5 move second child to first child ( temp double)
0:? 'inDV1b' ( temp double)
-0:? 'inDV1b' (layout( location=1) in double)
+0:? 'inDV1b' (layout( location=1) flat in double)
0:5 move second child to first child ( temp double)
0:? 'inDV1c' ( temp double)
-0:? 'inDV1c' (layout( location=2) in double)
+0:? 'inDV1c' (layout( location=2) flat in double)
0:5 move second child to first child ( temp 2-component vector of double)
0:? 'inDV2' ( temp 2-component vector of double)
-0:? 'inDV2' (layout( location=3) in 2-component vector of double)
+0:? 'inDV2' (layout( location=3) flat in 2-component vector of double)
0:5 move second child to first child ( temp 3-component vector of double)
0:? 'inDV3' ( temp 3-component vector of double)
-0:? 'inDV3' (layout( location=4) in 3-component vector of double)
+0:? 'inDV3' (layout( location=4) flat in 3-component vector of double)
0:5 move second child to first child ( temp 4-component vector of double)
0:? 'inDV4' ( temp 4-component vector of double)
-0:? 'inDV4' (layout( location=6) in 4-component vector of double)
+0:? 'inDV4' (layout( location=6) flat in 4-component vector of double)
0:5 move second child to first child ( temp uint)
0:? 'inU1a' ( temp uint)
-0:? 'inU1a' (layout( location=8) in uint)
+0:? 'inU1a' (layout( location=8) flat in uint)
0:5 move second child to first child ( temp uint)
0:? 'inU1b' ( temp uint)
-0:? 'inU1b' (layout( location=9) in uint)
+0:? 'inU1b' (layout( location=9) flat in uint)
0:5 move second child to first child ( temp float)
0:? '@entryPointOutput' (layout( location=0) out float)
0:5 Function Call: @PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; ( temp float)
@@ -154,17 +154,17 @@ gl_FragCoord origin is upper left
0:? 'inU1b' ( temp uint)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out float)
-0:? 'inDV1a' (layout( location=0) in double)
-0:? 'inDV1b' (layout( location=1) in double)
-0:? 'inDV1c' (layout( location=2) in double)
-0:? 'inDV2' (layout( location=3) in 2-component vector of double)
-0:? 'inDV3' (layout( location=4) in 3-component vector of double)
-0:? 'inDV4' (layout( location=6) in 4-component vector of double)
-0:? 'inU1a' (layout( location=8) in uint)
-0:? 'inU1b' (layout( location=9) in uint)
+0:? 'inDV1a' (layout( location=0) flat in double)
+0:? 'inDV1b' (layout( location=1) flat in double)
+0:? 'inDV1c' (layout( location=2) flat in double)
+0:? 'inDV2' (layout( location=3) flat in 2-component vector of double)
+0:? 'inDV3' (layout( location=4) flat in 3-component vector of double)
+0:? 'inDV4' (layout( location=6) flat in 4-component vector of double)
+0:? 'inU1a' (layout( location=8) flat in uint)
+0:? 'inU1b' (layout( location=9) flat in uint)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 90
Capability Shader
@@ -173,6 +173,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 44 47 50 54 58 62 66 69 72
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 26 "@PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1;"
Name 18 "inDV1a"
@@ -210,13 +211,21 @@ gl_FragCoord origin is upper left
Name 83 "param"
Name 85 "param"
Name 87 "param"
+ Decorate 44(inDV1a) Flat
Decorate 44(inDV1a) Location 0
+ Decorate 47(inDV1b) Flat
Decorate 47(inDV1b) Location 1
+ Decorate 50(inDV1c) Flat
Decorate 50(inDV1c) Location 2
+ Decorate 54(inDV2) Flat
Decorate 54(inDV2) Location 3
+ Decorate 58(inDV3) Flat
Decorate 58(inDV3) Location 4
+ Decorate 62(inDV4) Flat
Decorate 62(inDV4) Location 6
+ Decorate 66(inU1a) Flat
Decorate 66(inU1a) Location 8
+ Decorate 69(inU1b) Flat
Decorate 69(inU1b) Location 9
Decorate 72(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
index 6d96f161998..6612451cd5e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.evalfns.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @main(f1;vf2;vf3;vf4;vi2; ( temp void)
@@ -60,7 +60,7 @@ gl_FragCoord origin is upper left
0:? 'inF4' (layout( location=3) in 4-component vector of float)
0:3 move second child to first child ( temp 2-component vector of int)
0:? 'inI2' ( temp 2-component vector of int)
-0:? 'inI2' (layout( location=4) in 2-component vector of int)
+0:? 'inI2' (layout( location=4) flat in 2-component vector of int)
0:3 Function Call: @main(f1;vf2;vf3;vf4;vi2; ( temp void)
0:? 'inF1' ( temp float)
0:? 'inF2' ( temp 2-component vector of float)
@@ -72,13 +72,13 @@ gl_FragCoord origin is upper left
0:? 'inF2' (layout( location=1) in 2-component vector of float)
0:? 'inF3' (layout( location=2) in 3-component vector of float)
0:? 'inF4' (layout( location=3) in 4-component vector of float)
-0:? 'inI2' (layout( location=4) in 2-component vector of int)
+0:? 'inI2' (layout( location=4) flat in 2-component vector of int)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @main(f1;vf2;vf3;vf4;vi2; ( temp void)
@@ -139,7 +139,7 @@ gl_FragCoord origin is upper left
0:? 'inF4' (layout( location=3) in 4-component vector of float)
0:3 move second child to first child ( temp 2-component vector of int)
0:? 'inI2' ( temp 2-component vector of int)
-0:? 'inI2' (layout( location=4) in 2-component vector of int)
+0:? 'inI2' (layout( location=4) flat in 2-component vector of int)
0:3 Function Call: @main(f1;vf2;vf3;vf4;vi2; ( temp void)
0:? 'inF1' ( temp float)
0:? 'inF2' ( temp 2-component vector of float)
@@ -151,10 +151,10 @@ gl_FragCoord origin is upper left
0:? 'inF2' (layout( location=1) in 2-component vector of float)
0:? 'inF3' (layout( location=2) in 3-component vector of float)
0:? 'inF4' (layout( location=3) in 4-component vector of float)
-0:? 'inI2' (layout( location=4) in 2-component vector of int)
+0:? 'inI2' (layout( location=4) flat in 2-component vector of int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 80
Capability Shader
@@ -163,6 +163,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 51 55 59 63 67
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 23 "@main(f1;vf2;vf3;vf4;vi2;"
Name 18 "inF1"
@@ -189,6 +190,7 @@ gl_FragCoord origin is upper left
Decorate 55(inF2) Location 1
Decorate 59(inF3) Location 2
Decorate 63(inF4) Location 3
+ Decorate 67(inI2) Flat
Decorate 67(inI2) Location 4
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f1632.frag.out
index 6b9a18bb497..5c6f6ba45d5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f1632.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f1632.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.f1632.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunctionS(u1; ( temp float)
@@ -131,7 +131,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunctionS(u1; ( temp float)
@@ -260,7 +260,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 103
Capability Shader
@@ -268,6 +268,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 101
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "PixelShaderFunctionS(u1;"
Name 10 "inF0"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f3216.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f3216.frag.out
index 30edb0ad0c6..01c08d23bdd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f3216.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.f3216.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.f3216.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunctionS(f1; ( temp uint)
@@ -136,7 +136,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunctionS(f1; ( temp uint)
@@ -270,7 +270,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 106
Capability Shader
@@ -278,6 +278,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 104
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "PixelShaderFunctionS(f1;"
Name 10 "inF0"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out
index 1dbd218783c..105800b2315 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:17 Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
@@ -14,7 +14,8 @@ gl_FragCoord origin is upper left
0:20 move second child to first child ( temp bool)
0:20 'r000' ( temp bool)
0:20 all ( temp bool)
-0:20 'inF0' ( in float)
+0:20 Convert float to bool ( temp bool)
+0:20 'inF0' ( in float)
0:21 Sequence
0:21 move second child to first child ( temp float)
0:21 'r001' ( temp float)
@@ -29,7 +30,8 @@ gl_FragCoord origin is upper left
0:23 move second child to first child ( temp bool)
0:23 'r003' ( temp bool)
0:23 any ( temp bool)
-0:23 'inF0' ( in float)
+0:23 Convert float to bool ( temp bool)
+0:23 'inF0' ( in float)
0:24 Sequence
0:24 move second child to first child ( temp float)
0:24 'r004' ( temp float)
@@ -81,103 +83,105 @@ gl_FragCoord origin is upper left
0:33 0.000000
0:33 true case
0:33 Branch: Kill
-0:34 Sequence
-0:34 move second child to first child ( temp float)
-0:34 'r014' ( temp float)
-0:34 cosine ( temp float)
-0:34 'inF0' ( in float)
+0:34 Test condition and select ( temp void)
+0:34 Condition
+0:34 Compare Less Than ( temp bool)
+0:34 'r005' ( temp int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 true case
+0:34 Branch: Kill
0:35 Sequence
0:35 move second child to first child ( temp float)
-0:35 'r015' ( temp float)
-0:35 hyp. cosine ( temp float)
+0:35 'r014' ( temp float)
+0:35 cosine ( temp float)
0:35 'inF0' ( in float)
0:36 Sequence
-0:36 move second child to first child ( temp int)
-0:36 'r016' ( temp int)
-0:36 bitCount ( temp int)
-0:36 Constant:
-0:36 7 (const int)
+0:36 move second child to first child ( temp float)
+0:36 'r015' ( temp float)
+0:36 hyp. cosine ( temp float)
+0:36 'inF0' ( in float)
0:37 Sequence
-0:37 move second child to first child ( temp float)
-0:37 'r017' ( temp float)
-0:37 dPdx ( temp float)
-0:37 'inF0' ( in float)
+0:37 move second child to first child ( temp int)
+0:37 'r016' ( temp int)
+0:37 bitCount ( temp int)
+0:37 Constant:
+0:37 7 (const int)
0:38 Sequence
0:38 move second child to first child ( temp float)
-0:38 'r018' ( temp float)
-0:38 dPdxCoarse ( temp float)
+0:38 'r017' ( temp float)
+0:38 dPdx ( temp float)
0:38 'inF0' ( in float)
0:39 Sequence
0:39 move second child to first child ( temp float)
-0:39 'r019' ( temp float)
-0:39 dPdxFine ( temp float)
+0:39 'r018' ( temp float)
+0:39 dPdxCoarse ( temp float)
0:39 'inF0' ( in float)
0:40 Sequence
0:40 move second child to first child ( temp float)
-0:40 'r020' ( temp float)
-0:40 dPdy ( temp float)
+0:40 'r019' ( temp float)
+0:40 dPdxFine ( temp float)
0:40 'inF0' ( in float)
0:41 Sequence
0:41 move second child to first child ( temp float)
-0:41 'r021' ( temp float)
-0:41 dPdyCoarse ( temp float)
+0:41 'r020' ( temp float)
+0:41 dPdy ( temp float)
0:41 'inF0' ( in float)
0:42 Sequence
0:42 move second child to first child ( temp float)
-0:42 'r022' ( temp float)
-0:42 dPdyFine ( temp float)
+0:42 'r021' ( temp float)
+0:42 dPdyCoarse ( temp float)
0:42 'inF0' ( in float)
0:43 Sequence
0:43 move second child to first child ( temp float)
-0:43 'r023' ( temp float)
-0:43 degrees ( temp float)
+0:43 'r022' ( temp float)
+0:43 dPdyFine ( temp float)
0:43 'inF0' ( in float)
-0:47 Sequence
-0:47 move second child to first child ( temp float)
-0:47 'r027' ( temp float)
-0:47 exp ( temp float)
-0:47 'inF0' ( in float)
+0:44 Sequence
+0:44 move second child to first child ( temp float)
+0:44 'r023' ( temp float)
+0:44 degrees ( temp float)
+0:44 'inF0' ( in float)
0:48 Sequence
0:48 move second child to first child ( temp float)
-0:48 'r028' ( temp float)
-0:48 exp2 ( temp float)
+0:48 'r027' ( temp float)
+0:48 exp ( temp float)
0:48 'inF0' ( in float)
0:49 Sequence
-0:49 move second child to first child ( temp uint)
-0:49 'r029' ( temp uint)
-0:49 Convert int to uint ( temp uint)
-0:49 findMSB ( temp int)
-0:49 Constant:
-0:49 7 (const int)
+0:49 move second child to first child ( temp float)
+0:49 'r028' ( temp float)
+0:49 exp2 ( temp float)
+0:49 'inF0' ( in float)
0:50 Sequence
0:50 move second child to first child ( temp uint)
-0:50 'r030' ( temp uint)
+0:50 'r029' ( temp uint)
0:50 Convert int to uint ( temp uint)
-0:50 findLSB ( temp int)
+0:50 findMSB ( temp int)
0:50 Constant:
0:50 7 (const int)
0:51 Sequence
-0:51 move second child to first child ( temp float)
-0:51 'r031' ( temp float)
-0:51 Floor ( temp float)
-0:51 'inF0' ( in float)
-0:53 Sequence
-0:53 move second child to first child ( temp float)
-0:53 'r033' ( temp float)
-0:53 mod ( temp float)
-0:53 'inF0' ( in float)
-0:53 'inF1' ( in float)
+0:51 move second child to first child ( temp uint)
+0:51 'r030' ( temp uint)
+0:51 Convert int to uint ( temp uint)
+0:51 findLSB ( temp int)
+0:51 Constant:
+0:51 7 (const int)
+0:52 Sequence
+0:52 move second child to first child ( temp float)
+0:52 'r031' ( temp float)
+0:52 Floor ( temp float)
+0:52 'inF0' ( in float)
0:54 Sequence
0:54 move second child to first child ( temp float)
-0:54 'r034' ( temp float)
-0:54 Fraction ( temp float)
+0:54 'r033' ( temp float)
+0:54 mod ( temp float)
0:54 'inF0' ( in float)
+0:54 'inF1' ( in float)
0:55 Sequence
0:55 move second child to first child ( temp float)
-0:55 'r035' ( temp float)
-0:55 frexp ( temp float)
+0:55 'r034' ( temp float)
+0:55 Fraction ( temp float)
0:55 'inF0' ( in float)
-0:55 'inF1' ( in float)
0:56 Sequence
0:56 move second child to first child ( temp float)
0:56 'r036' ( temp float)
@@ -361,7 +365,8 @@ gl_FragCoord origin is upper left
0:98 move second child to first child ( temp bool)
0:98 'r000' ( temp bool)
0:98 all ( temp bool)
-0:98 'inF0' ( in 2-component vector of float)
+0:98 Convert float to bool ( temp 2-component vector of bool)
+0:98 'inF0' ( in 2-component vector of float)
0:99 Sequence
0:99 move second child to first child ( temp 2-component vector of float)
0:99 'r001' ( temp 2-component vector of float)
@@ -376,7 +381,8 @@ gl_FragCoord origin is upper left
0:101 move second child to first child ( temp bool)
0:101 'r003' ( temp bool)
0:101 any ( temp bool)
-0:101 'inF0' ( in 2-component vector of float)
+0:101 Convert float to bool ( temp 2-component vector of bool)
+0:101 'inF0' ( in 2-component vector of float)
0:102 Sequence
0:102 move second child to first child ( temp 2-component vector of float)
0:102 'r004' ( temp 2-component vector of float)
@@ -430,123 +436,127 @@ gl_FragCoord origin is upper left
0:111 0.000000
0:111 true case
0:111 Branch: Kill
-0:112 Sequence
-0:112 move second child to first child ( temp 2-component vector of float)
-0:112 'r013' ( temp 2-component vector of float)
-0:112 cosine ( temp 2-component vector of float)
-0:112 'inF0' ( in 2-component vector of float)
+0:112 Test condition and select ( temp void)
+0:112 Condition
+0:112 any ( temp bool)
+0:112 Compare Less Than ( temp 2-component vector of bool)
+0:112 'inU0' ( in 2-component vector of uint)
+0:112 Constant:
+0:112 0.000000
+0:112 0.000000
+0:112 true case
+0:112 Branch: Kill
0:113 Sequence
0:113 move second child to first child ( temp 2-component vector of float)
-0:113 'r015' ( temp 2-component vector of float)
-0:113 hyp. cosine ( temp 2-component vector of float)
+0:113 'r013' ( temp 2-component vector of float)
+0:113 cosine ( temp 2-component vector of float)
0:113 'inF0' ( in 2-component vector of float)
0:114 Sequence
-0:114 move second child to first child ( temp 2-component vector of int)
-0:114 'r016' ( temp 2-component vector of int)
+0:114 move second child to first child ( temp 2-component vector of float)
+0:114 'r015' ( temp 2-component vector of float)
+0:114 hyp. cosine ( temp 2-component vector of float)
+0:114 'inF0' ( in 2-component vector of float)
+0:115 Sequence
+0:115 move second child to first child ( temp 2-component vector of int)
+0:115 'r016' ( temp 2-component vector of int)
0:? bitCount ( temp 2-component vector of int)
0:? Constant:
0:? 7 (const int)
0:? 3 (const int)
-0:115 Sequence
-0:115 move second child to first child ( temp 2-component vector of float)
-0:115 'r017' ( temp 2-component vector of float)
-0:115 dPdx ( temp 2-component vector of float)
-0:115 'inF0' ( in 2-component vector of float)
0:116 Sequence
0:116 move second child to first child ( temp 2-component vector of float)
-0:116 'r018' ( temp 2-component vector of float)
-0:116 dPdxCoarse ( temp 2-component vector of float)
+0:116 'r017' ( temp 2-component vector of float)
+0:116 dPdx ( temp 2-component vector of float)
0:116 'inF0' ( in 2-component vector of float)
0:117 Sequence
0:117 move second child to first child ( temp 2-component vector of float)
-0:117 'r019' ( temp 2-component vector of float)
-0:117 dPdxFine ( temp 2-component vector of float)
+0:117 'r018' ( temp 2-component vector of float)
+0:117 dPdxCoarse ( temp 2-component vector of float)
0:117 'inF0' ( in 2-component vector of float)
0:118 Sequence
0:118 move second child to first child ( temp 2-component vector of float)
-0:118 'r020' ( temp 2-component vector of float)
-0:118 dPdy ( temp 2-component vector of float)
+0:118 'r019' ( temp 2-component vector of float)
+0:118 dPdxFine ( temp 2-component vector of float)
0:118 'inF0' ( in 2-component vector of float)
0:119 Sequence
0:119 move second child to first child ( temp 2-component vector of float)
-0:119 'r021' ( temp 2-component vector of float)
-0:119 dPdyCoarse ( temp 2-component vector of float)
+0:119 'r020' ( temp 2-component vector of float)
+0:119 dPdy ( temp 2-component vector of float)
0:119 'inF0' ( in 2-component vector of float)
0:120 Sequence
0:120 move second child to first child ( temp 2-component vector of float)
-0:120 'r022' ( temp 2-component vector of float)
-0:120 dPdyFine ( temp 2-component vector of float)
+0:120 'r021' ( temp 2-component vector of float)
+0:120 dPdyCoarse ( temp 2-component vector of float)
0:120 'inF0' ( in 2-component vector of float)
0:121 Sequence
0:121 move second child to first child ( temp 2-component vector of float)
-0:121 'r023' ( temp 2-component vector of float)
-0:121 degrees ( temp 2-component vector of float)
+0:121 'r022' ( temp 2-component vector of float)
+0:121 dPdyFine ( temp 2-component vector of float)
0:121 'inF0' ( in 2-component vector of float)
-0:125 Sequence
-0:125 move second child to first child ( temp float)
-0:125 'r026' ( temp float)
-0:125 distance ( temp float)
-0:125 'inF0' ( in 2-component vector of float)
-0:125 'inF1' ( in 2-component vector of float)
+0:122 Sequence
+0:122 move second child to first child ( temp 2-component vector of float)
+0:122 'r023' ( temp 2-component vector of float)
+0:122 degrees ( temp 2-component vector of float)
+0:122 'inF0' ( in 2-component vector of float)
0:126 Sequence
0:126 move second child to first child ( temp float)
-0:126 'r027' ( temp float)
-0:126 dot-product ( temp float)
+0:126 'r026' ( temp float)
+0:126 distance ( temp float)
0:126 'inF0' ( in 2-component vector of float)
0:126 'inF1' ( in 2-component vector of float)
-0:130 Sequence
-0:130 move second child to first child ( temp 2-component vector of float)
-0:130 'r028' ( temp 2-component vector of float)
-0:130 exp ( temp 2-component vector of float)
-0:130 'inF0' ( in 2-component vector of float)
+0:127 Sequence
+0:127 move second child to first child ( temp float)
+0:127 'r027' ( temp float)
+0:127 dot-product ( temp float)
+0:127 'inF0' ( in 2-component vector of float)
+0:127 'inF1' ( in 2-component vector of float)
0:131 Sequence
0:131 move second child to first child ( temp 2-component vector of float)
-0:131 'r029' ( temp 2-component vector of float)
-0:131 exp2 ( temp 2-component vector of float)
+0:131 'r028' ( temp 2-component vector of float)
+0:131 exp ( temp 2-component vector of float)
0:131 'inF0' ( in 2-component vector of float)
0:132 Sequence
0:132 move second child to first child ( temp 2-component vector of float)
-0:132 'r030' ( temp 2-component vector of float)
-0:132 face-forward ( temp 2-component vector of float)
+0:132 'r029' ( temp 2-component vector of float)
+0:132 exp2 ( temp 2-component vector of float)
0:132 'inF0' ( in 2-component vector of float)
-0:132 'inF1' ( in 2-component vector of float)
-0:132 'inF2' ( in 2-component vector of float)
0:133 Sequence
-0:133 move second child to first child ( temp 2-component vector of uint)
-0:133 'r031' ( temp 2-component vector of uint)
+0:133 move second child to first child ( temp 2-component vector of float)
+0:133 'r030' ( temp 2-component vector of float)
+0:133 face-forward ( temp 2-component vector of float)
+0:133 'inF0' ( in 2-component vector of float)
+0:133 'inF1' ( in 2-component vector of float)
+0:133 'inF2' ( in 2-component vector of float)
+0:134 Sequence
+0:134 move second child to first child ( temp 2-component vector of uint)
+0:134 'r031' ( temp 2-component vector of uint)
0:? findMSB ( temp 2-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 8 (const uint)
-0:134 Sequence
-0:134 move second child to first child ( temp 2-component vector of uint)
-0:134 'r032' ( temp 2-component vector of uint)
+0:135 Sequence
+0:135 move second child to first child ( temp 2-component vector of uint)
+0:135 'r032' ( temp 2-component vector of uint)
0:? findLSB ( temp 2-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 8 (const uint)
-0:135 Sequence
-0:135 move second child to first child ( temp 2-component vector of float)
-0:135 'r033' ( temp 2-component vector of float)
-0:135 Floor ( temp 2-component vector of float)
-0:135 'inF0' ( in 2-component vector of float)
-0:137 Sequence
-0:137 move second child to first child ( temp 2-component vector of float)
-0:137 'r035' ( temp 2-component vector of float)
-0:137 mod ( temp 2-component vector of float)
-0:137 'inF0' ( in 2-component vector of float)
-0:137 'inF1' ( in 2-component vector of float)
+0:136 Sequence
+0:136 move second child to first child ( temp 2-component vector of float)
+0:136 'r033' ( temp 2-component vector of float)
+0:136 Floor ( temp 2-component vector of float)
+0:136 'inF0' ( in 2-component vector of float)
0:138 Sequence
0:138 move second child to first child ( temp 2-component vector of float)
-0:138 'r036' ( temp 2-component vector of float)
-0:138 Fraction ( temp 2-component vector of float)
+0:138 'r035' ( temp 2-component vector of float)
+0:138 mod ( temp 2-component vector of float)
0:138 'inF0' ( in 2-component vector of float)
+0:138 'inF1' ( in 2-component vector of float)
0:139 Sequence
0:139 move second child to first child ( temp 2-component vector of float)
-0:139 'r037' ( temp 2-component vector of float)
-0:139 frexp ( temp 2-component vector of float)
+0:139 'r036' ( temp 2-component vector of float)
+0:139 Fraction ( temp 2-component vector of float)
0:139 'inF0' ( in 2-component vector of float)
-0:139 'inF1' ( in 2-component vector of float)
0:140 Sequence
0:140 move second child to first child ( temp 2-component vector of float)
0:140 'r038' ( temp 2-component vector of float)
@@ -746,7 +756,8 @@ gl_FragCoord origin is upper left
0:181 move second child to first child ( temp bool)
0:181 'r000' ( temp bool)
0:181 all ( temp bool)
-0:181 'inF0' ( in 3-component vector of float)
+0:181 Convert float to bool ( temp 3-component vector of bool)
+0:181 'inF0' ( in 3-component vector of float)
0:182 Sequence
0:182 move second child to first child ( temp 3-component vector of float)
0:182 'r001' ( temp 3-component vector of float)
@@ -761,7 +772,8 @@ gl_FragCoord origin is upper left
0:184 move second child to first child ( temp bool)
0:184 'r003' ( temp bool)
0:184 any ( temp bool)
-0:184 'inF0' ( in 3-component vector of float)
+0:184 Convert float to bool ( temp 3-component vector of bool)
+0:184 'inF0' ( in 3-component vector of float)
0:185 Sequence
0:185 move second child to first child ( temp 3-component vector of float)
0:185 'r004' ( temp 3-component vector of float)
@@ -816,132 +828,137 @@ gl_FragCoord origin is upper left
0:194 0.000000
0:194 true case
0:194 Branch: Kill
-0:195 Sequence
-0:195 move second child to first child ( temp 3-component vector of float)
-0:195 'r013' ( temp 3-component vector of float)
-0:195 cosine ( temp 3-component vector of float)
-0:195 'inF0' ( in 3-component vector of float)
+0:195 Test condition and select ( temp void)
+0:195 Condition
+0:195 any ( temp bool)
+0:195 Compare Less Than ( temp 3-component vector of bool)
+0:195 'inU0' ( in 3-component vector of uint)
+0:195 Constant:
+0:195 0.000000
+0:195 0.000000
+0:195 0.000000
+0:195 true case
+0:195 Branch: Kill
0:196 Sequence
0:196 move second child to first child ( temp 3-component vector of float)
-0:196 'r014' ( temp 3-component vector of float)
-0:196 hyp. cosine ( temp 3-component vector of float)
+0:196 'r013' ( temp 3-component vector of float)
+0:196 cosine ( temp 3-component vector of float)
0:196 'inF0' ( in 3-component vector of float)
0:197 Sequence
-0:197 move second child to first child ( temp 3-component vector of uint)
-0:197 'r015' ( temp 3-component vector of uint)
+0:197 move second child to first child ( temp 3-component vector of float)
+0:197 'r014' ( temp 3-component vector of float)
+0:197 hyp. cosine ( temp 3-component vector of float)
+0:197 'inF0' ( in 3-component vector of float)
+0:198 Sequence
+0:198 move second child to first child ( temp 3-component vector of uint)
+0:198 'r015' ( temp 3-component vector of uint)
0:? bitCount ( temp 3-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 3 (const uint)
0:? 5 (const uint)
-0:198 Sequence
-0:198 move second child to first child ( temp 3-component vector of float)
-0:198 'r016' ( temp 3-component vector of float)
-0:198 cross-product ( temp 3-component vector of float)
-0:198 'inF0' ( in 3-component vector of float)
-0:198 'inF1' ( in 3-component vector of float)
0:199 Sequence
0:199 move second child to first child ( temp 3-component vector of float)
-0:199 'r017' ( temp 3-component vector of float)
-0:199 dPdx ( temp 3-component vector of float)
+0:199 'r016' ( temp 3-component vector of float)
+0:199 cross-product ( temp 3-component vector of float)
0:199 'inF0' ( in 3-component vector of float)
+0:199 'inF1' ( in 3-component vector of float)
0:200 Sequence
0:200 move second child to first child ( temp 3-component vector of float)
-0:200 'r018' ( temp 3-component vector of float)
-0:200 dPdxCoarse ( temp 3-component vector of float)
+0:200 'r017' ( temp 3-component vector of float)
+0:200 dPdx ( temp 3-component vector of float)
0:200 'inF0' ( in 3-component vector of float)
0:201 Sequence
0:201 move second child to first child ( temp 3-component vector of float)
-0:201 'r019' ( temp 3-component vector of float)
-0:201 dPdxFine ( temp 3-component vector of float)
+0:201 'r018' ( temp 3-component vector of float)
+0:201 dPdxCoarse ( temp 3-component vector of float)
0:201 'inF0' ( in 3-component vector of float)
0:202 Sequence
0:202 move second child to first child ( temp 3-component vector of float)
-0:202 'r020' ( temp 3-component vector of float)
-0:202 dPdy ( temp 3-component vector of float)
+0:202 'r019' ( temp 3-component vector of float)
+0:202 dPdxFine ( temp 3-component vector of float)
0:202 'inF0' ( in 3-component vector of float)
0:203 Sequence
0:203 move second child to first child ( temp 3-component vector of float)
-0:203 'r021' ( temp 3-component vector of float)
-0:203 dPdyCoarse ( temp 3-component vector of float)
+0:203 'r020' ( temp 3-component vector of float)
+0:203 dPdy ( temp 3-component vector of float)
0:203 'inF0' ( in 3-component vector of float)
0:204 Sequence
0:204 move second child to first child ( temp 3-component vector of float)
-0:204 'r022' ( temp 3-component vector of float)
-0:204 dPdyFine ( temp 3-component vector of float)
+0:204 'r021' ( temp 3-component vector of float)
+0:204 dPdyCoarse ( temp 3-component vector of float)
0:204 'inF0' ( in 3-component vector of float)
0:205 Sequence
0:205 move second child to first child ( temp 3-component vector of float)
-0:205 'r023' ( temp 3-component vector of float)
-0:205 degrees ( temp 3-component vector of float)
+0:205 'r022' ( temp 3-component vector of float)
+0:205 dPdyFine ( temp 3-component vector of float)
0:205 'inF0' ( in 3-component vector of float)
0:206 Sequence
-0:206 move second child to first child ( temp float)
-0:206 'r024' ( temp float)
-0:206 distance ( temp float)
+0:206 move second child to first child ( temp 3-component vector of float)
+0:206 'r023' ( temp 3-component vector of float)
+0:206 degrees ( temp 3-component vector of float)
0:206 'inF0' ( in 3-component vector of float)
-0:206 'inF1' ( in 3-component vector of float)
0:207 Sequence
0:207 move second child to first child ( temp float)
-0:207 'r025' ( temp float)
-0:207 dot-product ( temp float)
+0:207 'r024' ( temp float)
+0:207 distance ( temp float)
0:207 'inF0' ( in 3-component vector of float)
0:207 'inF1' ( in 3-component vector of float)
-0:211 Sequence
-0:211 move second child to first child ( temp 3-component vector of float)
-0:211 'r029' ( temp 3-component vector of float)
-0:211 exp ( temp 3-component vector of float)
-0:211 'inF0' ( in 3-component vector of float)
+0:208 Sequence
+0:208 move second child to first child ( temp float)
+0:208 'r025' ( temp float)
+0:208 dot-product ( temp float)
+0:208 'inF0' ( in 3-component vector of float)
+0:208 'inF1' ( in 3-component vector of float)
0:212 Sequence
0:212 move second child to first child ( temp 3-component vector of float)
-0:212 'r030' ( temp 3-component vector of float)
-0:212 exp2 ( temp 3-component vector of float)
+0:212 'r029' ( temp 3-component vector of float)
+0:212 exp ( temp 3-component vector of float)
0:212 'inF0' ( in 3-component vector of float)
0:213 Sequence
0:213 move second child to first child ( temp 3-component vector of float)
-0:213 'r031' ( temp 3-component vector of float)
-0:213 face-forward ( temp 3-component vector of float)
+0:213 'r030' ( temp 3-component vector of float)
+0:213 exp2 ( temp 3-component vector of float)
0:213 'inF0' ( in 3-component vector of float)
-0:213 'inF1' ( in 3-component vector of float)
-0:213 'inF2' ( in 3-component vector of float)
0:214 Sequence
-0:214 move second child to first child ( temp 3-component vector of uint)
-0:214 'r032' ( temp 3-component vector of uint)
+0:214 move second child to first child ( temp 3-component vector of float)
+0:214 'r031' ( temp 3-component vector of float)
+0:214 face-forward ( temp 3-component vector of float)
+0:214 'inF0' ( in 3-component vector of float)
+0:214 'inF1' ( in 3-component vector of float)
+0:214 'inF2' ( in 3-component vector of float)
+0:215 Sequence
+0:215 move second child to first child ( temp 3-component vector of uint)
+0:215 'r032' ( temp 3-component vector of uint)
0:? findMSB ( temp 3-component vector of uint)
0:? Constant:
0:? 2 (const uint)
0:? 3 (const uint)
0:? 4 (const uint)
-0:215 Sequence
-0:215 move second child to first child ( temp 3-component vector of uint)
-0:215 'r033' ( temp 3-component vector of uint)
+0:216 Sequence
+0:216 move second child to first child ( temp 3-component vector of uint)
+0:216 'r033' ( temp 3-component vector of uint)
0:? findLSB ( temp 3-component vector of uint)
0:? Constant:
0:? 2 (const uint)
0:? 3 (const uint)
0:? 4 (const uint)
-0:216 Sequence
-0:216 move second child to first child ( temp 3-component vector of float)
-0:216 'r034' ( temp 3-component vector of float)
-0:216 Floor ( temp 3-component vector of float)
-0:216 'inF0' ( in 3-component vector of float)
-0:218 Sequence
-0:218 move second child to first child ( temp 3-component vector of float)
-0:218 'r036' ( temp 3-component vector of float)
-0:218 mod ( temp 3-component vector of float)
-0:218 'inF0' ( in 3-component vector of float)
-0:218 'inF1' ( in 3-component vector of float)
+0:217 Sequence
+0:217 move second child to first child ( temp 3-component vector of float)
+0:217 'r034' ( temp 3-component vector of float)
+0:217 Floor ( temp 3-component vector of float)
+0:217 'inF0' ( in 3-component vector of float)
0:219 Sequence
0:219 move second child to first child ( temp 3-component vector of float)
-0:219 'r037' ( temp 3-component vector of float)
-0:219 Fraction ( temp 3-component vector of float)
+0:219 'r036' ( temp 3-component vector of float)
+0:219 mod ( temp 3-component vector of float)
0:219 'inF0' ( in 3-component vector of float)
+0:219 'inF1' ( in 3-component vector of float)
0:220 Sequence
0:220 move second child to first child ( temp 3-component vector of float)
-0:220 'r038' ( temp 3-component vector of float)
-0:220 frexp ( temp 3-component vector of float)
+0:220 'r037' ( temp 3-component vector of float)
+0:220 Fraction ( temp 3-component vector of float)
0:220 'inF0' ( in 3-component vector of float)
-0:220 'inF1' ( in 3-component vector of float)
0:221 Sequence
0:221 move second child to first child ( temp 3-component vector of float)
0:221 'r039' ( temp 3-component vector of float)
@@ -1151,7 +1168,8 @@ gl_FragCoord origin is upper left
0:263 move second child to first child ( temp bool)
0:263 'r000' ( temp bool)
0:263 all ( temp bool)
-0:263 'inF0' ( in 4-component vector of float)
+0:263 Convert float to bool ( temp 4-component vector of bool)
+0:263 'inF0' ( in 4-component vector of float)
0:264 Sequence
0:264 move second child to first child ( temp 4-component vector of float)
0:264 'r001' ( temp 4-component vector of float)
@@ -1166,7 +1184,8 @@ gl_FragCoord origin is upper left
0:266 move second child to first child ( temp bool)
0:266 'r003' ( temp bool)
0:266 any ( temp bool)
-0:266 'inF0' ( in 4-component vector of float)
+0:266 Convert float to bool ( temp 4-component vector of bool)
+0:266 'inF0' ( in 4-component vector of float)
0:267 Sequence
0:267 move second child to first child ( temp 4-component vector of float)
0:267 'r004' ( temp 4-component vector of float)
@@ -1222,152 +1241,158 @@ gl_FragCoord origin is upper left
0:276 0.000000
0:276 true case
0:276 Branch: Kill
-0:277 Sequence
-0:277 move second child to first child ( temp 4-component vector of float)
-0:277 'r013' ( temp 4-component vector of float)
-0:277 cosine ( temp 4-component vector of float)
-0:277 'inF0' ( in 4-component vector of float)
+0:277 Test condition and select ( temp void)
+0:277 Condition
+0:277 any ( temp bool)
+0:277 Compare Less Than ( temp 4-component vector of bool)
+0:277 'inU0' ( in 4-component vector of uint)
+0:277 Constant:
+0:277 0.000000
+0:277 0.000000
+0:277 0.000000
+0:277 0.000000
+0:277 true case
+0:277 Branch: Kill
0:278 Sequence
0:278 move second child to first child ( temp 4-component vector of float)
-0:278 'r014' ( temp 4-component vector of float)
-0:278 hyp. cosine ( temp 4-component vector of float)
+0:278 'r013' ( temp 4-component vector of float)
+0:278 cosine ( temp 4-component vector of float)
0:278 'inF0' ( in 4-component vector of float)
0:279 Sequence
-0:279 move second child to first child ( temp 4-component vector of uint)
-0:279 'r015' ( temp 4-component vector of uint)
+0:279 move second child to first child ( temp 4-component vector of float)
+0:279 'r014' ( temp 4-component vector of float)
+0:279 hyp. cosine ( temp 4-component vector of float)
+0:279 'inF0' ( in 4-component vector of float)
+0:280 Sequence
+0:280 move second child to first child ( temp 4-component vector of uint)
+0:280 'r015' ( temp 4-component vector of uint)
0:? bitCount ( temp 4-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 3 (const uint)
0:? 5 (const uint)
0:? 2 (const uint)
-0:280 Sequence
-0:280 move second child to first child ( temp 4-component vector of float)
-0:280 'r016' ( temp 4-component vector of float)
-0:280 dPdx ( temp 4-component vector of float)
-0:280 'inF0' ( in 4-component vector of float)
0:281 Sequence
0:281 move second child to first child ( temp 4-component vector of float)
-0:281 'r017' ( temp 4-component vector of float)
-0:281 dPdxCoarse ( temp 4-component vector of float)
+0:281 'r016' ( temp 4-component vector of float)
+0:281 dPdx ( temp 4-component vector of float)
0:281 'inF0' ( in 4-component vector of float)
0:282 Sequence
0:282 move second child to first child ( temp 4-component vector of float)
-0:282 'r018' ( temp 4-component vector of float)
-0:282 dPdxFine ( temp 4-component vector of float)
+0:282 'r017' ( temp 4-component vector of float)
+0:282 dPdxCoarse ( temp 4-component vector of float)
0:282 'inF0' ( in 4-component vector of float)
0:283 Sequence
0:283 move second child to first child ( temp 4-component vector of float)
-0:283 'r019' ( temp 4-component vector of float)
-0:283 dPdy ( temp 4-component vector of float)
+0:283 'r018' ( temp 4-component vector of float)
+0:283 dPdxFine ( temp 4-component vector of float)
0:283 'inF0' ( in 4-component vector of float)
0:284 Sequence
0:284 move second child to first child ( temp 4-component vector of float)
-0:284 'r020' ( temp 4-component vector of float)
-0:284 dPdyCoarse ( temp 4-component vector of float)
+0:284 'r019' ( temp 4-component vector of float)
+0:284 dPdy ( temp 4-component vector of float)
0:284 'inF0' ( in 4-component vector of float)
0:285 Sequence
0:285 move second child to first child ( temp 4-component vector of float)
-0:285 'r021' ( temp 4-component vector of float)
-0:285 dPdyFine ( temp 4-component vector of float)
+0:285 'r020' ( temp 4-component vector of float)
+0:285 dPdyCoarse ( temp 4-component vector of float)
0:285 'inF0' ( in 4-component vector of float)
0:286 Sequence
0:286 move second child to first child ( temp 4-component vector of float)
-0:286 'r022' ( temp 4-component vector of float)
-0:286 degrees ( temp 4-component vector of float)
+0:286 'r021' ( temp 4-component vector of float)
+0:286 dPdyFine ( temp 4-component vector of float)
0:286 'inF0' ( in 4-component vector of float)
0:287 Sequence
-0:287 move second child to first child ( temp float)
-0:287 'r023' ( temp float)
-0:287 distance ( temp float)
+0:287 move second child to first child ( temp 4-component vector of float)
+0:287 'r022' ( temp 4-component vector of float)
+0:287 degrees ( temp 4-component vector of float)
0:287 'inF0' ( in 4-component vector of float)
-0:287 'inF1' ( in 4-component vector of float)
0:288 Sequence
0:288 move second child to first child ( temp float)
-0:288 'r024' ( temp float)
-0:288 dot-product ( temp float)
+0:288 'r023' ( temp float)
+0:288 distance ( temp float)
0:288 'inF0' ( in 4-component vector of float)
0:288 'inF1' ( in 4-component vector of float)
0:289 Sequence
-0:289 move second child to first child ( temp 4-component vector of float)
-0:289 'r025' ( temp 4-component vector of float)
-0:289 Construct vec4 ( temp 4-component vector of float)
-0:289 Constant:
-0:289 1.000000
-0:289 component-wise multiply ( temp float)
-0:289 direct index ( temp float)
-0:289 'inF0' ( in 4-component vector of float)
-0:289 Constant:
-0:289 1 (const int)
-0:289 direct index ( temp float)
-0:289 'inF1' ( in 4-component vector of float)
-0:289 Constant:
-0:289 1 (const int)
-0:289 direct index ( temp float)
-0:289 'inF0' ( in 4-component vector of float)
-0:289 Constant:
-0:289 2 (const int)
-0:289 direct index ( temp float)
-0:289 'inF1' ( in 4-component vector of float)
-0:289 Constant:
-0:289 3 (const int)
-0:293 Sequence
-0:293 move second child to first child ( temp 4-component vector of float)
-0:293 'r029' ( temp 4-component vector of float)
-0:293 exp ( temp 4-component vector of float)
-0:293 'inF0' ( in 4-component vector of float)
+0:289 move second child to first child ( temp float)
+0:289 'r024' ( temp float)
+0:289 dot-product ( temp float)
+0:289 'inF0' ( in 4-component vector of float)
+0:289 'inF1' ( in 4-component vector of float)
+0:290 Sequence
+0:290 move second child to first child ( temp 4-component vector of float)
+0:290 'r025' ( temp 4-component vector of float)
+0:290 Construct vec4 ( temp 4-component vector of float)
+0:290 Constant:
+0:290 1.000000
+0:290 component-wise multiply ( temp float)
+0:290 direct index ( temp float)
+0:290 'inF0' ( in 4-component vector of float)
+0:290 Constant:
+0:290 1 (const int)
+0:290 direct index ( temp float)
+0:290 'inF1' ( in 4-component vector of float)
+0:290 Constant:
+0:290 1 (const int)
+0:290 direct index ( temp float)
+0:290 'inF0' ( in 4-component vector of float)
+0:290 Constant:
+0:290 2 (const int)
+0:290 direct index ( temp float)
+0:290 'inF1' ( in 4-component vector of float)
+0:290 Constant:
+0:290 3 (const int)
0:294 Sequence
0:294 move second child to first child ( temp 4-component vector of float)
-0:294 'r030' ( temp 4-component vector of float)
-0:294 exp2 ( temp 4-component vector of float)
+0:294 'r029' ( temp 4-component vector of float)
+0:294 exp ( temp 4-component vector of float)
0:294 'inF0' ( in 4-component vector of float)
0:295 Sequence
0:295 move second child to first child ( temp 4-component vector of float)
-0:295 'r031' ( temp 4-component vector of float)
-0:295 face-forward ( temp 4-component vector of float)
+0:295 'r030' ( temp 4-component vector of float)
+0:295 exp2 ( temp 4-component vector of float)
0:295 'inF0' ( in 4-component vector of float)
-0:295 'inF1' ( in 4-component vector of float)
-0:295 'inF2' ( in 4-component vector of float)
0:296 Sequence
-0:296 move second child to first child ( temp 4-component vector of uint)
-0:296 'r032' ( temp 4-component vector of uint)
+0:296 move second child to first child ( temp 4-component vector of float)
+0:296 'r031' ( temp 4-component vector of float)
+0:296 face-forward ( temp 4-component vector of float)
+0:296 'inF0' ( in 4-component vector of float)
+0:296 'inF1' ( in 4-component vector of float)
+0:296 'inF2' ( in 4-component vector of float)
+0:297 Sequence
+0:297 move second child to first child ( temp 4-component vector of uint)
+0:297 'r032' ( temp 4-component vector of uint)
0:? findMSB ( temp 4-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 8 (const uint)
0:? 9 (const uint)
0:? 10 (const uint)
-0:297 Sequence
-0:297 move second child to first child ( temp 4-component vector of uint)
-0:297 'r033' ( temp 4-component vector of uint)
+0:298 Sequence
+0:298 move second child to first child ( temp 4-component vector of uint)
+0:298 'r033' ( temp 4-component vector of uint)
0:? findLSB ( temp 4-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 8 (const uint)
0:? 9 (const uint)
0:? 10 (const uint)
-0:298 Sequence
-0:298 move second child to first child ( temp 4-component vector of float)
-0:298 'r034' ( temp 4-component vector of float)
-0:298 Floor ( temp 4-component vector of float)
-0:298 'inF0' ( in 4-component vector of float)
-0:300 Sequence
-0:300 move second child to first child ( temp 4-component vector of float)
-0:300 'r036' ( temp 4-component vector of float)
-0:300 mod ( temp 4-component vector of float)
-0:300 'inF0' ( in 4-component vector of float)
-0:300 'inF1' ( in 4-component vector of float)
+0:299 Sequence
+0:299 move second child to first child ( temp 4-component vector of float)
+0:299 'r034' ( temp 4-component vector of float)
+0:299 Floor ( temp 4-component vector of float)
+0:299 'inF0' ( in 4-component vector of float)
0:301 Sequence
0:301 move second child to first child ( temp 4-component vector of float)
-0:301 'r037' ( temp 4-component vector of float)
-0:301 Fraction ( temp 4-component vector of float)
+0:301 'r036' ( temp 4-component vector of float)
+0:301 mod ( temp 4-component vector of float)
0:301 'inF0' ( in 4-component vector of float)
+0:301 'inF1' ( in 4-component vector of float)
0:302 Sequence
0:302 move second child to first child ( temp 4-component vector of float)
-0:302 'r038' ( temp 4-component vector of float)
-0:302 frexp ( temp 4-component vector of float)
+0:302 'r037' ( temp 4-component vector of float)
+0:302 Fraction ( temp 4-component vector of float)
0:302 'inF0' ( in 4-component vector of float)
-0:302 'inF1' ( in 4-component vector of float)
0:303 Sequence
0:303 move second child to first child ( temp 4-component vector of float)
0:303 'r039' ( temp 4-component vector of float)
@@ -1559,582 +1584,574 @@ gl_FragCoord origin is upper left
0:? 2.000000
0:? 3.000000
0:? 4.000000
-0:401 Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:401 Function Parameters:
-0:401 'inF0' ( in 2X2 matrix of float)
-0:401 'inF1' ( in 2X2 matrix of float)
-0:401 'inF2' ( in 2X2 matrix of float)
+0:400 Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:400 Function Parameters:
+0:400 'inF0' ( in 2X2 matrix of float)
+0:400 'inF1' ( in 2X2 matrix of float)
+0:400 'inF2' ( in 2X2 matrix of float)
0:? Sequence
-0:403 Sequence
-0:403 move second child to first child ( temp bool)
-0:403 'r000' ( temp bool)
-0:403 all ( temp bool)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r001' ( temp 2X2 matrix of float)
-0:403 Absolute value ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 arc cosine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp bool)
-0:403 'r003' ( temp bool)
-0:403 any ( temp bool)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r004' ( temp 2X2 matrix of float)
-0:403 arc sine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r005' ( temp 2X2 matrix of float)
-0:403 arc tangent ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r006' ( temp 2X2 matrix of float)
-0:403 arc tangent ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r007' ( temp 2X2 matrix of float)
-0:403 Ceiling ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Test condition and select ( temp void)
-0:403 Condition
-0:403 any ( temp bool)
-0:403 Compare Less Than ( temp 2X2 matrix of bool)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Constant:
-0:403 0.000000
-0:403 0.000000
-0:403 0.000000
-0:403 0.000000
-0:403 true case
-0:403 Branch: Kill
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r008' ( temp 2X2 matrix of float)
-0:403 clamp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 'inF2' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r009' ( temp 2X2 matrix of float)
-0:403 cosine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r010' ( temp 2X2 matrix of float)
-0:403 hyp. cosine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r011' ( temp 2X2 matrix of float)
-0:403 dPdx ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r012' ( temp 2X2 matrix of float)
-0:403 dPdxCoarse ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r013' ( temp 2X2 matrix of float)
-0:403 dPdxFine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r014' ( temp 2X2 matrix of float)
-0:403 dPdy ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r015' ( temp 2X2 matrix of float)
-0:403 dPdyCoarse ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r016' ( temp 2X2 matrix of float)
-0:403 dPdyFine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r017' ( temp 2X2 matrix of float)
-0:403 degrees ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp float)
-0:403 'r018' ( temp float)
-0:403 determinant ( temp float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r019' ( temp 2X2 matrix of float)
-0:403 exp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'R020' ( temp 2X2 matrix of float)
-0:403 exp2 ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r021' ( temp 2X2 matrix of float)
-0:403 Floor ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r022' ( temp 2X2 matrix of float)
-0:403 mod ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r023' ( temp 2X2 matrix of float)
-0:403 Fraction ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r024' ( temp 2X2 matrix of float)
-0:403 frexp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r025' ( temp 2X2 matrix of float)
-0:403 fwidth ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r026' ( temp 2X2 matrix of float)
-0:403 ldexp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r026a' ( temp 2X2 matrix of float)
-0:403 mix ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 'inF2' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r027' ( temp 2X2 matrix of float)
-0:403 log ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r028' ( temp 2X2 matrix of float)
-0:403 matrix-scale ( temp 2X2 matrix of float)
-0:403 log2 ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Constant:
-0:403 0.301030
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r029' ( temp 2X2 matrix of float)
-0:403 log2 ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r030' ( temp 2X2 matrix of float)
-0:403 max ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r031' ( temp 2X2 matrix of float)
-0:403 min ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r032' ( temp 2X2 matrix of float)
-0:403 pow ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r033' ( temp 2X2 matrix of float)
-0:403 radians ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r034' ( temp 2X2 matrix of float)
-0:403 roundEven ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r035' ( temp 2X2 matrix of float)
-0:403 inverse sqrt ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r036' ( temp 2X2 matrix of float)
-0:403 clamp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Constant:
-0:403 0.000000
-0:403 Constant:
-0:403 1.000000
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r037' ( temp 2X2 matrix of float)
-0:403 Sign ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r038' ( temp 2X2 matrix of float)
-0:403 sine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 sine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'inF2' ( in 2X2 matrix of float)
-0:403 cosine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r039' ( temp 2X2 matrix of float)
-0:403 hyp. sine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r049' ( temp 2X2 matrix of float)
-0:403 smoothstep ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 'inF2' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r041' ( temp 2X2 matrix of float)
-0:403 sqrt ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r042' ( temp 2X2 matrix of float)
-0:403 step ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r043' ( temp 2X2 matrix of float)
-0:403 tangent ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r044' ( temp 2X2 matrix of float)
-0:403 hyp. tangent ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 transpose ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r046' ( temp 2X2 matrix of float)
-0:403 trunc ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:406 Branch: Return with expression
+0:402 Sequence
+0:402 move second child to first child ( temp bool)
+0:402 'r000' ( temp bool)
+0:402 all ( temp bool)
+0:402 Convert float to bool ( temp 2X2 matrix of bool)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r001' ( temp 2X2 matrix of float)
+0:402 Absolute value ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 arc cosine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp bool)
+0:402 'r003' ( temp bool)
+0:402 any ( temp bool)
+0:402 Convert float to bool ( temp 2X2 matrix of bool)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r004' ( temp 2X2 matrix of float)
+0:402 arc sine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r005' ( temp 2X2 matrix of float)
+0:402 arc tangent ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r006' ( temp 2X2 matrix of float)
+0:402 arc tangent ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r007' ( temp 2X2 matrix of float)
+0:402 Ceiling ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Test condition and select ( temp void)
+0:402 Condition
+0:402 any ( temp bool)
+0:402 Compare Less Than ( temp 2X2 matrix of bool)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Constant:
+0:402 0.000000
+0:402 0.000000
+0:402 0.000000
+0:402 0.000000
+0:402 true case
+0:402 Branch: Kill
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r008' ( temp 2X2 matrix of float)
+0:402 clamp ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 'inF2' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r009' ( temp 2X2 matrix of float)
+0:402 cosine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r010' ( temp 2X2 matrix of float)
+0:402 hyp. cosine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r011' ( temp 2X2 matrix of float)
+0:402 dPdx ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r012' ( temp 2X2 matrix of float)
+0:402 dPdxCoarse ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r013' ( temp 2X2 matrix of float)
+0:402 dPdxFine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r014' ( temp 2X2 matrix of float)
+0:402 dPdy ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r015' ( temp 2X2 matrix of float)
+0:402 dPdyCoarse ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r016' ( temp 2X2 matrix of float)
+0:402 dPdyFine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r017' ( temp 2X2 matrix of float)
+0:402 degrees ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp float)
+0:402 'r018' ( temp float)
+0:402 determinant ( temp float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r019' ( temp 2X2 matrix of float)
+0:402 exp ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'R020' ( temp 2X2 matrix of float)
+0:402 exp2 ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r021' ( temp 2X2 matrix of float)
+0:402 Floor ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r022' ( temp 2X2 matrix of float)
+0:402 mod ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r023' ( temp 2X2 matrix of float)
+0:402 Fraction ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r025' ( temp 2X2 matrix of float)
+0:402 fwidth ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r026' ( temp 2X2 matrix of float)
+0:402 ldexp ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r026a' ( temp 2X2 matrix of float)
+0:402 mix ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 'inF2' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r027' ( temp 2X2 matrix of float)
+0:402 log ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r028' ( temp 2X2 matrix of float)
+0:402 matrix-scale ( temp 2X2 matrix of float)
+0:402 log2 ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Constant:
+0:402 0.301030
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r029' ( temp 2X2 matrix of float)
+0:402 log2 ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r030' ( temp 2X2 matrix of float)
+0:402 max ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r031' ( temp 2X2 matrix of float)
+0:402 min ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r032' ( temp 2X2 matrix of float)
+0:402 pow ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r033' ( temp 2X2 matrix of float)
+0:402 radians ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r034' ( temp 2X2 matrix of float)
+0:402 roundEven ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r035' ( temp 2X2 matrix of float)
+0:402 inverse sqrt ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r036' ( temp 2X2 matrix of float)
+0:402 clamp ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Constant:
+0:402 0.000000
+0:402 Constant:
+0:402 1.000000
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r037' ( temp 2X2 matrix of float)
+0:402 Sign ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r038' ( temp 2X2 matrix of float)
+0:402 sine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 sine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'inF2' ( in 2X2 matrix of float)
+0:402 cosine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r039' ( temp 2X2 matrix of float)
+0:402 hyp. sine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r049' ( temp 2X2 matrix of float)
+0:402 smoothstep ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 'inF2' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r041' ( temp 2X2 matrix of float)
+0:402 sqrt ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r042' ( temp 2X2 matrix of float)
+0:402 step ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r043' ( temp 2X2 matrix of float)
+0:402 tangent ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r044' ( temp 2X2 matrix of float)
+0:402 hyp. tangent ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 transpose ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r046' ( temp 2X2 matrix of float)
+0:402 trunc ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:405 Branch: Return with expression
0:? Constant:
0:? 2.000000
0:? 2.000000
0:? 2.000000
0:? 2.000000
-0:410 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:410 Function Parameters:
-0:410 'inF0' ( in 3X3 matrix of float)
-0:410 'inF1' ( in 3X3 matrix of float)
-0:410 'inF2' ( in 3X3 matrix of float)
+0:409 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:409 Function Parameters:
+0:409 'inF0' ( in 3X3 matrix of float)
+0:409 'inF1' ( in 3X3 matrix of float)
+0:409 'inF2' ( in 3X3 matrix of float)
0:? Sequence
-0:412 Sequence
-0:412 move second child to first child ( temp bool)
-0:412 'r000' ( temp bool)
-0:412 all ( temp bool)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r001' ( temp 3X3 matrix of float)
-0:412 Absolute value ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 arc cosine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp bool)
-0:412 'r003' ( temp bool)
-0:412 any ( temp bool)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r004' ( temp 3X3 matrix of float)
-0:412 arc sine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r005' ( temp 3X3 matrix of float)
-0:412 arc tangent ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r006' ( temp 3X3 matrix of float)
-0:412 arc tangent ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r007' ( temp 3X3 matrix of float)
-0:412 Ceiling ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Test condition and select ( temp void)
-0:412 Condition
-0:412 any ( temp bool)
-0:412 Compare Less Than ( temp 3X3 matrix of bool)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Constant:
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 true case
-0:412 Branch: Kill
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r008' ( temp 3X3 matrix of float)
-0:412 clamp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 'inF2' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r009' ( temp 3X3 matrix of float)
-0:412 cosine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r010' ( temp 3X3 matrix of float)
-0:412 hyp. cosine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r011' ( temp 3X3 matrix of float)
-0:412 dPdx ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r012' ( temp 3X3 matrix of float)
-0:412 dPdxCoarse ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r013' ( temp 3X3 matrix of float)
-0:412 dPdxFine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r014' ( temp 3X3 matrix of float)
-0:412 dPdy ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r015' ( temp 3X3 matrix of float)
-0:412 dPdyCoarse ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r016' ( temp 3X3 matrix of float)
-0:412 dPdyFine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r017' ( temp 3X3 matrix of float)
-0:412 degrees ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp float)
-0:412 'r018' ( temp float)
-0:412 determinant ( temp float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r019' ( temp 3X3 matrix of float)
-0:412 exp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'R020' ( temp 3X3 matrix of float)
-0:412 exp2 ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r021' ( temp 3X3 matrix of float)
-0:412 Floor ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r022' ( temp 3X3 matrix of float)
-0:412 mod ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r023' ( temp 3X3 matrix of float)
-0:412 Fraction ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r024' ( temp 3X3 matrix of float)
-0:412 frexp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r025' ( temp 3X3 matrix of float)
-0:412 fwidth ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r026' ( temp 3X3 matrix of float)
-0:412 ldexp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r026a' ( temp 3X3 matrix of float)
-0:412 mix ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 'inF2' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r027' ( temp 3X3 matrix of float)
-0:412 log ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r028' ( temp 3X3 matrix of float)
-0:412 matrix-scale ( temp 3X3 matrix of float)
-0:412 log2 ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Constant:
-0:412 0.301030
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r029' ( temp 3X3 matrix of float)
-0:412 log2 ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r030' ( temp 3X3 matrix of float)
-0:412 max ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r031' ( temp 3X3 matrix of float)
-0:412 min ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r032' ( temp 3X3 matrix of float)
-0:412 pow ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r033' ( temp 3X3 matrix of float)
-0:412 radians ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r034' ( temp 3X3 matrix of float)
-0:412 roundEven ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r035' ( temp 3X3 matrix of float)
-0:412 inverse sqrt ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r036' ( temp 3X3 matrix of float)
-0:412 clamp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Constant:
-0:412 0.000000
-0:412 Constant:
-0:412 1.000000
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r037' ( temp 3X3 matrix of float)
-0:412 Sign ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r038' ( temp 3X3 matrix of float)
-0:412 sine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 sine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'inF2' ( in 3X3 matrix of float)
-0:412 cosine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r039' ( temp 3X3 matrix of float)
-0:412 hyp. sine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r049' ( temp 3X3 matrix of float)
-0:412 smoothstep ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 'inF2' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r041' ( temp 3X3 matrix of float)
-0:412 sqrt ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r042' ( temp 3X3 matrix of float)
-0:412 step ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r043' ( temp 3X3 matrix of float)
-0:412 tangent ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r044' ( temp 3X3 matrix of float)
-0:412 hyp. tangent ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 transpose ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r046' ( temp 3X3 matrix of float)
-0:412 trunc ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:415 Branch: Return with expression
+0:411 Sequence
+0:411 move second child to first child ( temp bool)
+0:411 'r000' ( temp bool)
+0:411 all ( temp bool)
+0:411 Convert float to bool ( temp 3X3 matrix of bool)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r001' ( temp 3X3 matrix of float)
+0:411 Absolute value ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 arc cosine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp bool)
+0:411 'r003' ( temp bool)
+0:411 any ( temp bool)
+0:411 Convert float to bool ( temp 3X3 matrix of bool)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r004' ( temp 3X3 matrix of float)
+0:411 arc sine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r005' ( temp 3X3 matrix of float)
+0:411 arc tangent ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r006' ( temp 3X3 matrix of float)
+0:411 arc tangent ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r007' ( temp 3X3 matrix of float)
+0:411 Ceiling ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Test condition and select ( temp void)
+0:411 Condition
+0:411 any ( temp bool)
+0:411 Compare Less Than ( temp 3X3 matrix of bool)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Constant:
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 true case
+0:411 Branch: Kill
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r008' ( temp 3X3 matrix of float)
+0:411 clamp ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 'inF2' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r009' ( temp 3X3 matrix of float)
+0:411 cosine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r010' ( temp 3X3 matrix of float)
+0:411 hyp. cosine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r011' ( temp 3X3 matrix of float)
+0:411 dPdx ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r012' ( temp 3X3 matrix of float)
+0:411 dPdxCoarse ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r013' ( temp 3X3 matrix of float)
+0:411 dPdxFine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r014' ( temp 3X3 matrix of float)
+0:411 dPdy ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r015' ( temp 3X3 matrix of float)
+0:411 dPdyCoarse ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r016' ( temp 3X3 matrix of float)
+0:411 dPdyFine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r017' ( temp 3X3 matrix of float)
+0:411 degrees ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp float)
+0:411 'r018' ( temp float)
+0:411 determinant ( temp float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r019' ( temp 3X3 matrix of float)
+0:411 exp ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'R020' ( temp 3X3 matrix of float)
+0:411 exp2 ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r021' ( temp 3X3 matrix of float)
+0:411 Floor ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r022' ( temp 3X3 matrix of float)
+0:411 mod ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r023' ( temp 3X3 matrix of float)
+0:411 Fraction ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r025' ( temp 3X3 matrix of float)
+0:411 fwidth ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r026' ( temp 3X3 matrix of float)
+0:411 ldexp ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r026a' ( temp 3X3 matrix of float)
+0:411 mix ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 'inF2' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r027' ( temp 3X3 matrix of float)
+0:411 log ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r028' ( temp 3X3 matrix of float)
+0:411 matrix-scale ( temp 3X3 matrix of float)
+0:411 log2 ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Constant:
+0:411 0.301030
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r029' ( temp 3X3 matrix of float)
+0:411 log2 ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r030' ( temp 3X3 matrix of float)
+0:411 max ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r031' ( temp 3X3 matrix of float)
+0:411 min ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r032' ( temp 3X3 matrix of float)
+0:411 pow ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r033' ( temp 3X3 matrix of float)
+0:411 radians ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r034' ( temp 3X3 matrix of float)
+0:411 roundEven ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r035' ( temp 3X3 matrix of float)
+0:411 inverse sqrt ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r036' ( temp 3X3 matrix of float)
+0:411 clamp ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Constant:
+0:411 0.000000
+0:411 Constant:
+0:411 1.000000
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r037' ( temp 3X3 matrix of float)
+0:411 Sign ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r038' ( temp 3X3 matrix of float)
+0:411 sine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 sine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'inF2' ( in 3X3 matrix of float)
+0:411 cosine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r039' ( temp 3X3 matrix of float)
+0:411 hyp. sine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r049' ( temp 3X3 matrix of float)
+0:411 smoothstep ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 'inF2' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r041' ( temp 3X3 matrix of float)
+0:411 sqrt ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r042' ( temp 3X3 matrix of float)
+0:411 step ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r043' ( temp 3X3 matrix of float)
+0:411 tangent ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r044' ( temp 3X3 matrix of float)
+0:411 hyp. tangent ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 transpose ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r046' ( temp 3X3 matrix of float)
+0:411 trunc ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:414 Branch: Return with expression
0:? Constant:
0:? 3.000000
0:? 3.000000
@@ -2145,301 +2162,297 @@ gl_FragCoord origin is upper left
0:? 3.000000
0:? 3.000000
0:? 3.000000
-0:419 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:419 Function Parameters:
-0:419 'inF0' ( in 4X4 matrix of float)
-0:419 'inF1' ( in 4X4 matrix of float)
-0:419 'inF2' ( in 4X4 matrix of float)
+0:418 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:418 Function Parameters:
+0:418 'inF0' ( in 4X4 matrix of float)
+0:418 'inF1' ( in 4X4 matrix of float)
+0:418 'inF2' ( in 4X4 matrix of float)
0:? Sequence
-0:421 Sequence
-0:421 move second child to first child ( temp bool)
-0:421 'r000' ( temp bool)
-0:421 all ( temp bool)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r001' ( temp 4X4 matrix of float)
-0:421 Absolute value ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 arc cosine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp bool)
-0:421 'r003' ( temp bool)
-0:421 any ( temp bool)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r004' ( temp 4X4 matrix of float)
-0:421 arc sine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r005' ( temp 4X4 matrix of float)
-0:421 arc tangent ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r006' ( temp 4X4 matrix of float)
-0:421 arc tangent ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r007' ( temp 4X4 matrix of float)
-0:421 Ceiling ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Test condition and select ( temp void)
-0:421 Condition
-0:421 any ( temp bool)
-0:421 Compare Less Than ( temp 4X4 matrix of bool)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Constant:
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 true case
-0:421 Branch: Kill
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r008' ( temp 4X4 matrix of float)
-0:421 clamp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 'inF2' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r009' ( temp 4X4 matrix of float)
-0:421 cosine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r010' ( temp 4X4 matrix of float)
-0:421 hyp. cosine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r011' ( temp 4X4 matrix of float)
-0:421 dPdx ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r012' ( temp 4X4 matrix of float)
-0:421 dPdxCoarse ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r013' ( temp 4X4 matrix of float)
-0:421 dPdxFine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r014' ( temp 4X4 matrix of float)
-0:421 dPdy ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r015' ( temp 4X4 matrix of float)
-0:421 dPdyCoarse ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r016' ( temp 4X4 matrix of float)
-0:421 dPdyFine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r017' ( temp 4X4 matrix of float)
-0:421 degrees ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp float)
-0:421 'r018' ( temp float)
-0:421 determinant ( temp float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r019' ( temp 4X4 matrix of float)
-0:421 exp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'R020' ( temp 4X4 matrix of float)
-0:421 exp2 ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r021' ( temp 4X4 matrix of float)
-0:421 Floor ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r022' ( temp 4X4 matrix of float)
-0:421 mod ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r023' ( temp 4X4 matrix of float)
-0:421 Fraction ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r024' ( temp 4X4 matrix of float)
-0:421 frexp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r025' ( temp 4X4 matrix of float)
-0:421 fwidth ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r026' ( temp 4X4 matrix of float)
-0:421 ldexp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r026a' ( temp 4X4 matrix of float)
-0:421 mix ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 'inF2' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r027' ( temp 4X4 matrix of float)
-0:421 log ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r028' ( temp 4X4 matrix of float)
-0:421 matrix-scale ( temp 4X4 matrix of float)
-0:421 log2 ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Constant:
-0:421 0.301030
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r029' ( temp 4X4 matrix of float)
-0:421 log2 ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r030' ( temp 4X4 matrix of float)
-0:421 max ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r031' ( temp 4X4 matrix of float)
-0:421 min ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r032' ( temp 4X4 matrix of float)
-0:421 pow ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r033' ( temp 4X4 matrix of float)
-0:421 radians ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r034' ( temp 4X4 matrix of float)
-0:421 roundEven ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r035' ( temp 4X4 matrix of float)
-0:421 inverse sqrt ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r036' ( temp 4X4 matrix of float)
-0:421 clamp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Constant:
-0:421 0.000000
-0:421 Constant:
-0:421 1.000000
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r037' ( temp 4X4 matrix of float)
-0:421 Sign ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r038' ( temp 4X4 matrix of float)
-0:421 sine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 sine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'inF2' ( in 4X4 matrix of float)
-0:421 cosine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r039' ( temp 4X4 matrix of float)
-0:421 hyp. sine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r049' ( temp 4X4 matrix of float)
-0:421 smoothstep ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 'inF2' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r041' ( temp 4X4 matrix of float)
-0:421 sqrt ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r042' ( temp 4X4 matrix of float)
-0:421 step ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r043' ( temp 4X4 matrix of float)
-0:421 tangent ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r044' ( temp 4X4 matrix of float)
-0:421 hyp. tangent ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 transpose ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r046' ( temp 4X4 matrix of float)
-0:421 trunc ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:424 Branch: Return with expression
+0:420 Sequence
+0:420 move second child to first child ( temp bool)
+0:420 'r000' ( temp bool)
+0:420 all ( temp bool)
+0:420 Convert float to bool ( temp 4X4 matrix of bool)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r001' ( temp 4X4 matrix of float)
+0:420 Absolute value ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 arc cosine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp bool)
+0:420 'r003' ( temp bool)
+0:420 any ( temp bool)
+0:420 Convert float to bool ( temp 4X4 matrix of bool)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r004' ( temp 4X4 matrix of float)
+0:420 arc sine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r005' ( temp 4X4 matrix of float)
+0:420 arc tangent ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r006' ( temp 4X4 matrix of float)
+0:420 arc tangent ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r007' ( temp 4X4 matrix of float)
+0:420 Ceiling ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Test condition and select ( temp void)
+0:420 Condition
+0:420 any ( temp bool)
+0:420 Compare Less Than ( temp 4X4 matrix of bool)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Constant:
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 true case
+0:420 Branch: Kill
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r008' ( temp 4X4 matrix of float)
+0:420 clamp ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 'inF2' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r009' ( temp 4X4 matrix of float)
+0:420 cosine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r010' ( temp 4X4 matrix of float)
+0:420 hyp. cosine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r011' ( temp 4X4 matrix of float)
+0:420 dPdx ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r012' ( temp 4X4 matrix of float)
+0:420 dPdxCoarse ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r013' ( temp 4X4 matrix of float)
+0:420 dPdxFine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r014' ( temp 4X4 matrix of float)
+0:420 dPdy ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r015' ( temp 4X4 matrix of float)
+0:420 dPdyCoarse ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r016' ( temp 4X4 matrix of float)
+0:420 dPdyFine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r017' ( temp 4X4 matrix of float)
+0:420 degrees ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp float)
+0:420 'r018' ( temp float)
+0:420 determinant ( temp float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r019' ( temp 4X4 matrix of float)
+0:420 exp ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'R020' ( temp 4X4 matrix of float)
+0:420 exp2 ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r021' ( temp 4X4 matrix of float)
+0:420 Floor ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r022' ( temp 4X4 matrix of float)
+0:420 mod ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r023' ( temp 4X4 matrix of float)
+0:420 Fraction ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r025' ( temp 4X4 matrix of float)
+0:420 fwidth ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r026' ( temp 4X4 matrix of float)
+0:420 ldexp ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r026a' ( temp 4X4 matrix of float)
+0:420 mix ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 'inF2' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r027' ( temp 4X4 matrix of float)
+0:420 log ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r028' ( temp 4X4 matrix of float)
+0:420 matrix-scale ( temp 4X4 matrix of float)
+0:420 log2 ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Constant:
+0:420 0.301030
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r029' ( temp 4X4 matrix of float)
+0:420 log2 ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r030' ( temp 4X4 matrix of float)
+0:420 max ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r031' ( temp 4X4 matrix of float)
+0:420 min ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r032' ( temp 4X4 matrix of float)
+0:420 pow ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r033' ( temp 4X4 matrix of float)
+0:420 radians ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r034' ( temp 4X4 matrix of float)
+0:420 roundEven ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r035' ( temp 4X4 matrix of float)
+0:420 inverse sqrt ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r036' ( temp 4X4 matrix of float)
+0:420 clamp ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Constant:
+0:420 0.000000
+0:420 Constant:
+0:420 1.000000
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r037' ( temp 4X4 matrix of float)
+0:420 Sign ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r038' ( temp 4X4 matrix of float)
+0:420 sine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 sine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'inF2' ( in 4X4 matrix of float)
+0:420 cosine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r039' ( temp 4X4 matrix of float)
+0:420 hyp. sine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r049' ( temp 4X4 matrix of float)
+0:420 smoothstep ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 'inF2' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r041' ( temp 4X4 matrix of float)
+0:420 sqrt ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r042' ( temp 4X4 matrix of float)
+0:420 step ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r043' ( temp 4X4 matrix of float)
+0:420 tangent ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r044' ( temp 4X4 matrix of float)
+0:420 hyp. tangent ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 transpose ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r046' ( temp 4X4 matrix of float)
+0:420 trunc ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:423 Branch: Return with expression
0:? Constant:
0:? 4.000000
0:? 4.000000
@@ -2457,334 +2470,334 @@ gl_FragCoord origin is upper left
0:? 4.000000
0:? 4.000000
0:? 4.000000
-0:442 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:442 Function Parameters:
-0:442 'inF0' ( in float)
-0:442 'inF1' ( in float)
-0:442 'inFV0' ( in 2-component vector of float)
-0:442 'inFV1' ( in 2-component vector of float)
-0:442 'inFM0' ( in 2X2 matrix of float)
-0:442 'inFM1' ( in 2X2 matrix of float)
+0:441 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:441 Function Parameters:
+0:441 'inF0' ( in float)
+0:441 'inF1' ( in float)
+0:441 'inFV0' ( in 2-component vector of float)
+0:441 'inFV1' ( in 2-component vector of float)
+0:441 'inFM0' ( in 2X2 matrix of float)
+0:441 'inFM1' ( in 2X2 matrix of float)
0:? Sequence
-0:443 Sequence
-0:443 move second child to first child ( temp float)
-0:443 'r0' ( temp float)
-0:443 component-wise multiply ( temp float)
-0:443 'inF1' ( in float)
-0:443 'inF0' ( in float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2-component vector of float)
-0:443 'r1' ( temp 2-component vector of float)
-0:443 vector-scale ( temp 2-component vector of float)
-0:443 'inF0' ( in float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2-component vector of float)
-0:443 'r2' ( temp 2-component vector of float)
-0:443 vector-scale ( temp 2-component vector of float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 'inF0' ( in float)
-0:443 Sequence
-0:443 move second child to first child ( temp float)
-0:443 'r3' ( temp float)
-0:443 dot-product ( temp float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 'inFV1' ( in 2-component vector of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2-component vector of float)
-0:443 'r4' ( temp 2-component vector of float)
-0:443 vector-times-matrix ( temp 2-component vector of float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2-component vector of float)
-0:443 'r5' ( temp 2-component vector of float)
-0:443 matrix-times-vector ( temp 2-component vector of float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2X2 matrix of float)
-0:443 'r6' ( temp 2X2 matrix of float)
-0:443 matrix-scale ( temp 2X2 matrix of float)
-0:443 'inF0' ( in float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2X2 matrix of float)
-0:443 'r7' ( temp 2X2 matrix of float)
-0:443 matrix-scale ( temp 2X2 matrix of float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:443 'inF0' ( in float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2X2 matrix of float)
-0:443 'r8' ( temp 2X2 matrix of float)
-0:443 matrix-multiply ( temp 2X2 matrix of float)
-0:443 'inFM1' ( in 2X2 matrix of float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:449 Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:449 Function Parameters:
-0:449 'inF0' ( in float)
-0:449 'inF1' ( in float)
-0:449 'inFV0' ( in 3-component vector of float)
-0:449 'inFV1' ( in 3-component vector of float)
-0:449 'inFM0' ( in 3X3 matrix of float)
-0:449 'inFM1' ( in 3X3 matrix of float)
+0:442 Sequence
+0:442 move second child to first child ( temp float)
+0:442 'r0' ( temp float)
+0:442 component-wise multiply ( temp float)
+0:442 'inF1' ( in float)
+0:442 'inF0' ( in float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2-component vector of float)
+0:442 'r1' ( temp 2-component vector of float)
+0:442 vector-scale ( temp 2-component vector of float)
+0:442 'inF0' ( in float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2-component vector of float)
+0:442 'r2' ( temp 2-component vector of float)
+0:442 vector-scale ( temp 2-component vector of float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 'inF0' ( in float)
+0:442 Sequence
+0:442 move second child to first child ( temp float)
+0:442 'r3' ( temp float)
+0:442 dot-product ( temp float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 'inFV1' ( in 2-component vector of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2-component vector of float)
+0:442 'r4' ( temp 2-component vector of float)
+0:442 vector-times-matrix ( temp 2-component vector of float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2-component vector of float)
+0:442 'r5' ( temp 2-component vector of float)
+0:442 matrix-times-vector ( temp 2-component vector of float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2X2 matrix of float)
+0:442 'r6' ( temp 2X2 matrix of float)
+0:442 matrix-scale ( temp 2X2 matrix of float)
+0:442 'inF0' ( in float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2X2 matrix of float)
+0:442 'r7' ( temp 2X2 matrix of float)
+0:442 matrix-scale ( temp 2X2 matrix of float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:442 'inF0' ( in float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2X2 matrix of float)
+0:442 'r8' ( temp 2X2 matrix of float)
+0:442 matrix-multiply ( temp 2X2 matrix of float)
+0:442 'inFM1' ( in 2X2 matrix of float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:448 Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:448 Function Parameters:
+0:448 'inF0' ( in float)
+0:448 'inF1' ( in float)
+0:448 'inFV0' ( in 3-component vector of float)
+0:448 'inFV1' ( in 3-component vector of float)
+0:448 'inFM0' ( in 3X3 matrix of float)
+0:448 'inFM1' ( in 3X3 matrix of float)
0:? Sequence
-0:450 Sequence
-0:450 move second child to first child ( temp float)
-0:450 'r0' ( temp float)
-0:450 component-wise multiply ( temp float)
-0:450 'inF1' ( in float)
-0:450 'inF0' ( in float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3-component vector of float)
-0:450 'r1' ( temp 3-component vector of float)
-0:450 vector-scale ( temp 3-component vector of float)
-0:450 'inF0' ( in float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3-component vector of float)
-0:450 'r2' ( temp 3-component vector of float)
-0:450 vector-scale ( temp 3-component vector of float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 'inF0' ( in float)
-0:450 Sequence
-0:450 move second child to first child ( temp float)
-0:450 'r3' ( temp float)
-0:450 dot-product ( temp float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 'inFV1' ( in 3-component vector of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3-component vector of float)
-0:450 'r4' ( temp 3-component vector of float)
-0:450 vector-times-matrix ( temp 3-component vector of float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3-component vector of float)
-0:450 'r5' ( temp 3-component vector of float)
-0:450 matrix-times-vector ( temp 3-component vector of float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3X3 matrix of float)
-0:450 'r6' ( temp 3X3 matrix of float)
-0:450 matrix-scale ( temp 3X3 matrix of float)
-0:450 'inF0' ( in float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3X3 matrix of float)
-0:450 'r7' ( temp 3X3 matrix of float)
-0:450 matrix-scale ( temp 3X3 matrix of float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:450 'inF0' ( in float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3X3 matrix of float)
-0:450 'r8' ( temp 3X3 matrix of float)
-0:450 matrix-multiply ( temp 3X3 matrix of float)
-0:450 'inFM1' ( in 3X3 matrix of float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:456 Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:456 Function Parameters:
-0:456 'inF0' ( in float)
-0:456 'inF1' ( in float)
-0:456 'inFV0' ( in 4-component vector of float)
-0:456 'inFV1' ( in 4-component vector of float)
-0:456 'inFM0' ( in 4X4 matrix of float)
-0:456 'inFM1' ( in 4X4 matrix of float)
+0:449 Sequence
+0:449 move second child to first child ( temp float)
+0:449 'r0' ( temp float)
+0:449 component-wise multiply ( temp float)
+0:449 'inF1' ( in float)
+0:449 'inF0' ( in float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3-component vector of float)
+0:449 'r1' ( temp 3-component vector of float)
+0:449 vector-scale ( temp 3-component vector of float)
+0:449 'inF0' ( in float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3-component vector of float)
+0:449 'r2' ( temp 3-component vector of float)
+0:449 vector-scale ( temp 3-component vector of float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 'inF0' ( in float)
+0:449 Sequence
+0:449 move second child to first child ( temp float)
+0:449 'r3' ( temp float)
+0:449 dot-product ( temp float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 'inFV1' ( in 3-component vector of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3-component vector of float)
+0:449 'r4' ( temp 3-component vector of float)
+0:449 vector-times-matrix ( temp 3-component vector of float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3-component vector of float)
+0:449 'r5' ( temp 3-component vector of float)
+0:449 matrix-times-vector ( temp 3-component vector of float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3X3 matrix of float)
+0:449 'r6' ( temp 3X3 matrix of float)
+0:449 matrix-scale ( temp 3X3 matrix of float)
+0:449 'inF0' ( in float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3X3 matrix of float)
+0:449 'r7' ( temp 3X3 matrix of float)
+0:449 matrix-scale ( temp 3X3 matrix of float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:449 'inF0' ( in float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3X3 matrix of float)
+0:449 'r8' ( temp 3X3 matrix of float)
+0:449 matrix-multiply ( temp 3X3 matrix of float)
+0:449 'inFM1' ( in 3X3 matrix of float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:455 Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:455 Function Parameters:
+0:455 'inF0' ( in float)
+0:455 'inF1' ( in float)
+0:455 'inFV0' ( in 4-component vector of float)
+0:455 'inFV1' ( in 4-component vector of float)
+0:455 'inFM0' ( in 4X4 matrix of float)
+0:455 'inFM1' ( in 4X4 matrix of float)
0:? Sequence
-0:457 Sequence
-0:457 move second child to first child ( temp float)
-0:457 'r0' ( temp float)
-0:457 component-wise multiply ( temp float)
-0:457 'inF1' ( in float)
-0:457 'inF0' ( in float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4-component vector of float)
-0:457 'r1' ( temp 4-component vector of float)
-0:457 vector-scale ( temp 4-component vector of float)
-0:457 'inF0' ( in float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4-component vector of float)
-0:457 'r2' ( temp 4-component vector of float)
-0:457 vector-scale ( temp 4-component vector of float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 'inF0' ( in float)
-0:457 Sequence
-0:457 move second child to first child ( temp float)
-0:457 'r3' ( temp float)
-0:457 dot-product ( temp float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 'inFV1' ( in 4-component vector of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4-component vector of float)
-0:457 'r4' ( temp 4-component vector of float)
-0:457 vector-times-matrix ( temp 4-component vector of float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4-component vector of float)
-0:457 'r5' ( temp 4-component vector of float)
-0:457 matrix-times-vector ( temp 4-component vector of float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4X4 matrix of float)
-0:457 'r6' ( temp 4X4 matrix of float)
-0:457 matrix-scale ( temp 4X4 matrix of float)
-0:457 'inF0' ( in float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4X4 matrix of float)
-0:457 'r7' ( temp 4X4 matrix of float)
-0:457 matrix-scale ( temp 4X4 matrix of float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:457 'inF0' ( in float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4X4 matrix of float)
-0:457 'r8' ( temp 4X4 matrix of float)
-0:457 matrix-multiply ( temp 4X4 matrix of float)
-0:457 'inFM1' ( in 4X4 matrix of float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:466 Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:466 Function Parameters:
-0:466 'inF0' ( in float)
-0:466 'inF1' ( in float)
-0:466 'inFV2' ( in 2-component vector of float)
-0:466 'inFV3' ( in 3-component vector of float)
-0:466 'inFM2x3' ( in 2X3 matrix of float)
-0:466 'inFM3x2' ( in 3X2 matrix of float)
-0:466 'inFM3x3' ( in 3X3 matrix of float)
-0:466 'inFM3x4' ( in 3X4 matrix of float)
-0:466 'inFM2x4' ( in 2X4 matrix of float)
+0:456 Sequence
+0:456 move second child to first child ( temp float)
+0:456 'r0' ( temp float)
+0:456 component-wise multiply ( temp float)
+0:456 'inF1' ( in float)
+0:456 'inF0' ( in float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4-component vector of float)
+0:456 'r1' ( temp 4-component vector of float)
+0:456 vector-scale ( temp 4-component vector of float)
+0:456 'inF0' ( in float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4-component vector of float)
+0:456 'r2' ( temp 4-component vector of float)
+0:456 vector-scale ( temp 4-component vector of float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 'inF0' ( in float)
+0:456 Sequence
+0:456 move second child to first child ( temp float)
+0:456 'r3' ( temp float)
+0:456 dot-product ( temp float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 'inFV1' ( in 4-component vector of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4-component vector of float)
+0:456 'r4' ( temp 4-component vector of float)
+0:456 vector-times-matrix ( temp 4-component vector of float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4-component vector of float)
+0:456 'r5' ( temp 4-component vector of float)
+0:456 matrix-times-vector ( temp 4-component vector of float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4X4 matrix of float)
+0:456 'r6' ( temp 4X4 matrix of float)
+0:456 matrix-scale ( temp 4X4 matrix of float)
+0:456 'inF0' ( in float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4X4 matrix of float)
+0:456 'r7' ( temp 4X4 matrix of float)
+0:456 matrix-scale ( temp 4X4 matrix of float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:456 'inF0' ( in float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4X4 matrix of float)
+0:456 'r8' ( temp 4X4 matrix of float)
+0:456 matrix-multiply ( temp 4X4 matrix of float)
+0:456 'inFM1' ( in 4X4 matrix of float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:465 Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:465 Function Parameters:
+0:465 'inF0' ( in float)
+0:465 'inF1' ( in float)
+0:465 'inFV2' ( in 2-component vector of float)
+0:465 'inFV3' ( in 3-component vector of float)
+0:465 'inFM2x3' ( in 2X3 matrix of float)
+0:465 'inFM3x2' ( in 3X2 matrix of float)
+0:465 'inFM3x3' ( in 3X3 matrix of float)
+0:465 'inFM3x4' ( in 3X4 matrix of float)
+0:465 'inFM2x4' ( in 2X4 matrix of float)
0:? Sequence
+0:466 Sequence
+0:466 move second child to first child ( temp float)
+0:466 'r00' ( temp float)
+0:466 component-wise multiply ( temp float)
+0:466 'inF1' ( in float)
+0:466 'inF0' ( in float)
0:467 Sequence
-0:467 move second child to first child ( temp float)
-0:467 'r00' ( temp float)
-0:467 component-wise multiply ( temp float)
-0:467 'inF1' ( in float)
+0:467 move second child to first child ( temp 2-component vector of float)
+0:467 'r01' ( temp 2-component vector of float)
+0:467 vector-scale ( temp 2-component vector of float)
0:467 'inF0' ( in float)
+0:467 'inFV2' ( in 2-component vector of float)
0:468 Sequence
-0:468 move second child to first child ( temp 2-component vector of float)
-0:468 'r01' ( temp 2-component vector of float)
-0:468 vector-scale ( temp 2-component vector of float)
+0:468 move second child to first child ( temp 3-component vector of float)
+0:468 'r02' ( temp 3-component vector of float)
+0:468 vector-scale ( temp 3-component vector of float)
0:468 'inF0' ( in float)
-0:468 'inFV2' ( in 2-component vector of float)
+0:468 'inFV3' ( in 3-component vector of float)
0:469 Sequence
-0:469 move second child to first child ( temp 3-component vector of float)
-0:469 'r02' ( temp 3-component vector of float)
-0:469 vector-scale ( temp 3-component vector of float)
+0:469 move second child to first child ( temp 2-component vector of float)
+0:469 'r03' ( temp 2-component vector of float)
+0:469 vector-scale ( temp 2-component vector of float)
+0:469 'inFV2' ( in 2-component vector of float)
0:469 'inF0' ( in float)
-0:469 'inFV3' ( in 3-component vector of float)
0:470 Sequence
-0:470 move second child to first child ( temp 2-component vector of float)
-0:470 'r03' ( temp 2-component vector of float)
-0:470 vector-scale ( temp 2-component vector of float)
-0:470 'inFV2' ( in 2-component vector of float)
+0:470 move second child to first child ( temp 3-component vector of float)
+0:470 'r04' ( temp 3-component vector of float)
+0:470 vector-scale ( temp 3-component vector of float)
+0:470 'inFV3' ( in 3-component vector of float)
0:470 'inF0' ( in float)
0:471 Sequence
-0:471 move second child to first child ( temp 3-component vector of float)
-0:471 'r04' ( temp 3-component vector of float)
-0:471 vector-scale ( temp 3-component vector of float)
-0:471 'inFV3' ( in 3-component vector of float)
-0:471 'inF0' ( in float)
+0:471 move second child to first child ( temp float)
+0:471 'r05' ( temp float)
+0:471 dot-product ( temp float)
+0:471 'inFV2' ( in 2-component vector of float)
+0:471 'inFV2' ( in 2-component vector of float)
0:472 Sequence
0:472 move second child to first child ( temp float)
-0:472 'r05' ( temp float)
+0:472 'r06' ( temp float)
0:472 dot-product ( temp float)
-0:472 'inFV2' ( in 2-component vector of float)
-0:472 'inFV2' ( in 2-component vector of float)
+0:472 'inFV3' ( in 3-component vector of float)
+0:472 'inFV3' ( in 3-component vector of float)
0:473 Sequence
-0:473 move second child to first child ( temp float)
-0:473 'r06' ( temp float)
-0:473 dot-product ( temp float)
-0:473 'inFV3' ( in 3-component vector of float)
-0:473 'inFV3' ( in 3-component vector of float)
+0:473 move second child to first child ( temp 3-component vector of float)
+0:473 'r07' ( temp 3-component vector of float)
+0:473 matrix-times-vector ( temp 3-component vector of float)
+0:473 'inFM2x3' ( in 2X3 matrix of float)
+0:473 'inFV2' ( in 2-component vector of float)
0:474 Sequence
-0:474 move second child to first child ( temp 3-component vector of float)
-0:474 'r07' ( temp 3-component vector of float)
-0:474 matrix-times-vector ( temp 3-component vector of float)
-0:474 'inFM2x3' ( in 2X3 matrix of float)
-0:474 'inFV2' ( in 2-component vector of float)
+0:474 move second child to first child ( temp 2-component vector of float)
+0:474 'r08' ( temp 2-component vector of float)
+0:474 matrix-times-vector ( temp 2-component vector of float)
+0:474 'inFM3x2' ( in 3X2 matrix of float)
+0:474 'inFV3' ( in 3-component vector of float)
0:475 Sequence
0:475 move second child to first child ( temp 2-component vector of float)
-0:475 'r08' ( temp 2-component vector of float)
-0:475 matrix-times-vector ( temp 2-component vector of float)
-0:475 'inFM3x2' ( in 3X2 matrix of float)
+0:475 'r09' ( temp 2-component vector of float)
+0:475 vector-times-matrix ( temp 2-component vector of float)
0:475 'inFV3' ( in 3-component vector of float)
+0:475 'inFM2x3' ( in 2X3 matrix of float)
0:476 Sequence
-0:476 move second child to first child ( temp 2-component vector of float)
-0:476 'r09' ( temp 2-component vector of float)
-0:476 vector-times-matrix ( temp 2-component vector of float)
-0:476 'inFV3' ( in 3-component vector of float)
-0:476 'inFM2x3' ( in 2X3 matrix of float)
+0:476 move second child to first child ( temp 3-component vector of float)
+0:476 'r10' ( temp 3-component vector of float)
+0:476 vector-times-matrix ( temp 3-component vector of float)
+0:476 'inFV2' ( in 2-component vector of float)
+0:476 'inFM3x2' ( in 3X2 matrix of float)
0:477 Sequence
-0:477 move second child to first child ( temp 3-component vector of float)
-0:477 'r10' ( temp 3-component vector of float)
-0:477 vector-times-matrix ( temp 3-component vector of float)
-0:477 'inFV2' ( in 2-component vector of float)
-0:477 'inFM3x2' ( in 3X2 matrix of float)
+0:477 move second child to first child ( temp 2X3 matrix of float)
+0:477 'r11' ( temp 2X3 matrix of float)
+0:477 matrix-scale ( temp 2X3 matrix of float)
+0:477 'inF0' ( in float)
+0:477 'inFM2x3' ( in 2X3 matrix of float)
0:478 Sequence
-0:478 move second child to first child ( temp 2X3 matrix of float)
-0:478 'r11' ( temp 2X3 matrix of float)
-0:478 matrix-scale ( temp 2X3 matrix of float)
+0:478 move second child to first child ( temp 3X2 matrix of float)
+0:478 'r12' ( temp 3X2 matrix of float)
+0:478 matrix-scale ( temp 3X2 matrix of float)
0:478 'inF0' ( in float)
-0:478 'inFM2x3' ( in 2X3 matrix of float)
+0:478 'inFM3x2' ( in 3X2 matrix of float)
0:479 Sequence
-0:479 move second child to first child ( temp 3X2 matrix of float)
-0:479 'r12' ( temp 3X2 matrix of float)
-0:479 matrix-scale ( temp 3X2 matrix of float)
-0:479 'inF0' ( in float)
+0:479 move second child to first child ( temp 2X2 matrix of float)
+0:479 'r13' ( temp 2X2 matrix of float)
+0:479 matrix-multiply ( temp 2X2 matrix of float)
0:479 'inFM3x2' ( in 3X2 matrix of float)
+0:479 'inFM2x3' ( in 2X3 matrix of float)
0:480 Sequence
-0:480 move second child to first child ( temp 2X2 matrix of float)
-0:480 'r13' ( temp 2X2 matrix of float)
-0:480 matrix-multiply ( temp 2X2 matrix of float)
-0:480 'inFM3x2' ( in 3X2 matrix of float)
+0:480 move second child to first child ( temp 2X3 matrix of float)
+0:480 'r14' ( temp 2X3 matrix of float)
+0:480 matrix-multiply ( temp 2X3 matrix of float)
+0:480 'inFM3x3' ( in 3X3 matrix of float)
0:480 'inFM2x3' ( in 2X3 matrix of float)
0:481 Sequence
-0:481 move second child to first child ( temp 2X3 matrix of float)
-0:481 'r14' ( temp 2X3 matrix of float)
-0:481 matrix-multiply ( temp 2X3 matrix of float)
-0:481 'inFM3x3' ( in 3X3 matrix of float)
+0:481 move second child to first child ( temp 2X4 matrix of float)
+0:481 'r15' ( temp 2X4 matrix of float)
+0:481 matrix-multiply ( temp 2X4 matrix of float)
+0:481 'inFM3x4' ( in 3X4 matrix of float)
0:481 'inFM2x3' ( in 2X3 matrix of float)
0:482 Sequence
-0:482 move second child to first child ( temp 2X4 matrix of float)
-0:482 'r15' ( temp 2X4 matrix of float)
-0:482 matrix-multiply ( temp 2X4 matrix of float)
-0:482 'inFM3x4' ( in 3X4 matrix of float)
-0:482 'inFM2x3' ( in 2X3 matrix of float)
-0:483 Sequence
-0:483 move second child to first child ( temp 3X4 matrix of float)
-0:483 'r16' ( temp 3X4 matrix of float)
-0:483 matrix-multiply ( temp 3X4 matrix of float)
-0:483 'inFM2x4' ( in 2X4 matrix of float)
-0:483 'inFM3x2' ( in 3X2 matrix of float)
-0:489 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:489 Function Parameters:
+0:482 move second child to first child ( temp 3X4 matrix of float)
+0:482 'r16' ( temp 3X4 matrix of float)
+0:482 matrix-multiply ( temp 3X4 matrix of float)
+0:482 'inFM2x4' ( in 2X4 matrix of float)
+0:482 'inFM3x2' ( in 3X2 matrix of float)
+0:488 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:488 Function Parameters:
0:? Sequence
-0:491 move second child to first child ( temp 4-component vector of float)
-0:491 color: direct index for structure ( temp 4-component vector of float)
-0:491 'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:491 Constant:
-0:491 0 (const int)
-0:491 Constant:
-0:491 1.000000
-0:491 1.000000
-0:491 1.000000
-0:491 1.000000
-0:492 Branch: Return with expression
-0:492 'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:489 Function Definition: main( ( temp void)
-0:489 Function Parameters:
+0:490 move second child to first child ( temp 4-component vector of float)
+0:490 color: direct index for structure ( temp 4-component vector of float)
+0:490 'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:490 Constant:
+0:490 0 (const int)
+0:490 Constant:
+0:490 1.000000
+0:490 1.000000
+0:490 1.000000
+0:490 1.000000
+0:491 Branch: Return with expression
+0:491 'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:488 Function Definition: main( ( temp void)
+0:488 Function Parameters:
0:? Sequence
-0:489 Sequence
-0:489 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
-0:489 color: direct index for structure ( temp 4-component vector of float)
-0:489 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:489 Constant:
-0:489 0 (const int)
+0:488 Sequence
+0:488 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+0:488 color: direct index for structure ( temp 4-component vector of float)
+0:488 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:488 Constant:
+0:488 0 (const int)
0:? Linker Objects
0:? 'gs_ua' ( shared uint)
0:? 'gs_ub' ( shared uint)
@@ -2798,13 +2811,13 @@ gl_FragCoord origin is upper left
0:? 'gs_ua4' ( shared 4-component vector of uint)
0:? 'gs_ub4' ( shared 4-component vector of uint)
0:? 'gs_uc4' ( shared 4-component vector of uint)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:17 Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
@@ -2819,7 +2832,8 @@ gl_FragCoord origin is upper left
0:20 move second child to first child ( temp bool)
0:20 'r000' ( temp bool)
0:20 all ( temp bool)
-0:20 'inF0' ( in float)
+0:20 Convert float to bool ( temp bool)
+0:20 'inF0' ( in float)
0:21 Sequence
0:21 move second child to first child ( temp float)
0:21 'r001' ( temp float)
@@ -2834,7 +2848,8 @@ gl_FragCoord origin is upper left
0:23 move second child to first child ( temp bool)
0:23 'r003' ( temp bool)
0:23 any ( temp bool)
-0:23 'inF0' ( in float)
+0:23 Convert float to bool ( temp bool)
+0:23 'inF0' ( in float)
0:24 Sequence
0:24 move second child to first child ( temp float)
0:24 'r004' ( temp float)
@@ -2886,103 +2901,105 @@ gl_FragCoord origin is upper left
0:33 0.000000
0:33 true case
0:33 Branch: Kill
-0:34 Sequence
-0:34 move second child to first child ( temp float)
-0:34 'r014' ( temp float)
-0:34 cosine ( temp float)
-0:34 'inF0' ( in float)
+0:34 Test condition and select ( temp void)
+0:34 Condition
+0:34 Compare Less Than ( temp bool)
+0:34 'r005' ( temp int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 true case
+0:34 Branch: Kill
0:35 Sequence
0:35 move second child to first child ( temp float)
-0:35 'r015' ( temp float)
-0:35 hyp. cosine ( temp float)
+0:35 'r014' ( temp float)
+0:35 cosine ( temp float)
0:35 'inF0' ( in float)
0:36 Sequence
-0:36 move second child to first child ( temp int)
-0:36 'r016' ( temp int)
-0:36 bitCount ( temp int)
-0:36 Constant:
-0:36 7 (const int)
+0:36 move second child to first child ( temp float)
+0:36 'r015' ( temp float)
+0:36 hyp. cosine ( temp float)
+0:36 'inF0' ( in float)
0:37 Sequence
-0:37 move second child to first child ( temp float)
-0:37 'r017' ( temp float)
-0:37 dPdx ( temp float)
-0:37 'inF0' ( in float)
+0:37 move second child to first child ( temp int)
+0:37 'r016' ( temp int)
+0:37 bitCount ( temp int)
+0:37 Constant:
+0:37 7 (const int)
0:38 Sequence
0:38 move second child to first child ( temp float)
-0:38 'r018' ( temp float)
-0:38 dPdxCoarse ( temp float)
+0:38 'r017' ( temp float)
+0:38 dPdx ( temp float)
0:38 'inF0' ( in float)
0:39 Sequence
0:39 move second child to first child ( temp float)
-0:39 'r019' ( temp float)
-0:39 dPdxFine ( temp float)
+0:39 'r018' ( temp float)
+0:39 dPdxCoarse ( temp float)
0:39 'inF0' ( in float)
0:40 Sequence
0:40 move second child to first child ( temp float)
-0:40 'r020' ( temp float)
-0:40 dPdy ( temp float)
+0:40 'r019' ( temp float)
+0:40 dPdxFine ( temp float)
0:40 'inF0' ( in float)
0:41 Sequence
0:41 move second child to first child ( temp float)
-0:41 'r021' ( temp float)
-0:41 dPdyCoarse ( temp float)
+0:41 'r020' ( temp float)
+0:41 dPdy ( temp float)
0:41 'inF0' ( in float)
0:42 Sequence
0:42 move second child to first child ( temp float)
-0:42 'r022' ( temp float)
-0:42 dPdyFine ( temp float)
+0:42 'r021' ( temp float)
+0:42 dPdyCoarse ( temp float)
0:42 'inF0' ( in float)
0:43 Sequence
0:43 move second child to first child ( temp float)
-0:43 'r023' ( temp float)
-0:43 degrees ( temp float)
+0:43 'r022' ( temp float)
+0:43 dPdyFine ( temp float)
0:43 'inF0' ( in float)
-0:47 Sequence
-0:47 move second child to first child ( temp float)
-0:47 'r027' ( temp float)
-0:47 exp ( temp float)
-0:47 'inF0' ( in float)
+0:44 Sequence
+0:44 move second child to first child ( temp float)
+0:44 'r023' ( temp float)
+0:44 degrees ( temp float)
+0:44 'inF0' ( in float)
0:48 Sequence
0:48 move second child to first child ( temp float)
-0:48 'r028' ( temp float)
-0:48 exp2 ( temp float)
+0:48 'r027' ( temp float)
+0:48 exp ( temp float)
0:48 'inF0' ( in float)
0:49 Sequence
-0:49 move second child to first child ( temp uint)
-0:49 'r029' ( temp uint)
-0:49 Convert int to uint ( temp uint)
-0:49 findMSB ( temp int)
-0:49 Constant:
-0:49 7 (const int)
+0:49 move second child to first child ( temp float)
+0:49 'r028' ( temp float)
+0:49 exp2 ( temp float)
+0:49 'inF0' ( in float)
0:50 Sequence
0:50 move second child to first child ( temp uint)
-0:50 'r030' ( temp uint)
+0:50 'r029' ( temp uint)
0:50 Convert int to uint ( temp uint)
-0:50 findLSB ( temp int)
+0:50 findMSB ( temp int)
0:50 Constant:
0:50 7 (const int)
0:51 Sequence
-0:51 move second child to first child ( temp float)
-0:51 'r031' ( temp float)
-0:51 Floor ( temp float)
-0:51 'inF0' ( in float)
-0:53 Sequence
-0:53 move second child to first child ( temp float)
-0:53 'r033' ( temp float)
-0:53 mod ( temp float)
-0:53 'inF0' ( in float)
-0:53 'inF1' ( in float)
+0:51 move second child to first child ( temp uint)
+0:51 'r030' ( temp uint)
+0:51 Convert int to uint ( temp uint)
+0:51 findLSB ( temp int)
+0:51 Constant:
+0:51 7 (const int)
+0:52 Sequence
+0:52 move second child to first child ( temp float)
+0:52 'r031' ( temp float)
+0:52 Floor ( temp float)
+0:52 'inF0' ( in float)
0:54 Sequence
0:54 move second child to first child ( temp float)
-0:54 'r034' ( temp float)
-0:54 Fraction ( temp float)
+0:54 'r033' ( temp float)
+0:54 mod ( temp float)
0:54 'inF0' ( in float)
+0:54 'inF1' ( in float)
0:55 Sequence
0:55 move second child to first child ( temp float)
-0:55 'r035' ( temp float)
-0:55 frexp ( temp float)
+0:55 'r034' ( temp float)
+0:55 Fraction ( temp float)
0:55 'inF0' ( in float)
-0:55 'inF1' ( in float)
0:56 Sequence
0:56 move second child to first child ( temp float)
0:56 'r036' ( temp float)
@@ -3166,7 +3183,8 @@ gl_FragCoord origin is upper left
0:98 move second child to first child ( temp bool)
0:98 'r000' ( temp bool)
0:98 all ( temp bool)
-0:98 'inF0' ( in 2-component vector of float)
+0:98 Convert float to bool ( temp 2-component vector of bool)
+0:98 'inF0' ( in 2-component vector of float)
0:99 Sequence
0:99 move second child to first child ( temp 2-component vector of float)
0:99 'r001' ( temp 2-component vector of float)
@@ -3181,7 +3199,8 @@ gl_FragCoord origin is upper left
0:101 move second child to first child ( temp bool)
0:101 'r003' ( temp bool)
0:101 any ( temp bool)
-0:101 'inF0' ( in 2-component vector of float)
+0:101 Convert float to bool ( temp 2-component vector of bool)
+0:101 'inF0' ( in 2-component vector of float)
0:102 Sequence
0:102 move second child to first child ( temp 2-component vector of float)
0:102 'r004' ( temp 2-component vector of float)
@@ -3235,123 +3254,127 @@ gl_FragCoord origin is upper left
0:111 0.000000
0:111 true case
0:111 Branch: Kill
-0:112 Sequence
-0:112 move second child to first child ( temp 2-component vector of float)
-0:112 'r013' ( temp 2-component vector of float)
-0:112 cosine ( temp 2-component vector of float)
-0:112 'inF0' ( in 2-component vector of float)
+0:112 Test condition and select ( temp void)
+0:112 Condition
+0:112 any ( temp bool)
+0:112 Compare Less Than ( temp 2-component vector of bool)
+0:112 'inU0' ( in 2-component vector of uint)
+0:112 Constant:
+0:112 0.000000
+0:112 0.000000
+0:112 true case
+0:112 Branch: Kill
0:113 Sequence
0:113 move second child to first child ( temp 2-component vector of float)
-0:113 'r015' ( temp 2-component vector of float)
-0:113 hyp. cosine ( temp 2-component vector of float)
+0:113 'r013' ( temp 2-component vector of float)
+0:113 cosine ( temp 2-component vector of float)
0:113 'inF0' ( in 2-component vector of float)
0:114 Sequence
-0:114 move second child to first child ( temp 2-component vector of int)
-0:114 'r016' ( temp 2-component vector of int)
+0:114 move second child to first child ( temp 2-component vector of float)
+0:114 'r015' ( temp 2-component vector of float)
+0:114 hyp. cosine ( temp 2-component vector of float)
+0:114 'inF0' ( in 2-component vector of float)
+0:115 Sequence
+0:115 move second child to first child ( temp 2-component vector of int)
+0:115 'r016' ( temp 2-component vector of int)
0:? bitCount ( temp 2-component vector of int)
0:? Constant:
0:? 7 (const int)
0:? 3 (const int)
-0:115 Sequence
-0:115 move second child to first child ( temp 2-component vector of float)
-0:115 'r017' ( temp 2-component vector of float)
-0:115 dPdx ( temp 2-component vector of float)
-0:115 'inF0' ( in 2-component vector of float)
0:116 Sequence
0:116 move second child to first child ( temp 2-component vector of float)
-0:116 'r018' ( temp 2-component vector of float)
-0:116 dPdxCoarse ( temp 2-component vector of float)
+0:116 'r017' ( temp 2-component vector of float)
+0:116 dPdx ( temp 2-component vector of float)
0:116 'inF0' ( in 2-component vector of float)
0:117 Sequence
0:117 move second child to first child ( temp 2-component vector of float)
-0:117 'r019' ( temp 2-component vector of float)
-0:117 dPdxFine ( temp 2-component vector of float)
+0:117 'r018' ( temp 2-component vector of float)
+0:117 dPdxCoarse ( temp 2-component vector of float)
0:117 'inF0' ( in 2-component vector of float)
0:118 Sequence
0:118 move second child to first child ( temp 2-component vector of float)
-0:118 'r020' ( temp 2-component vector of float)
-0:118 dPdy ( temp 2-component vector of float)
+0:118 'r019' ( temp 2-component vector of float)
+0:118 dPdxFine ( temp 2-component vector of float)
0:118 'inF0' ( in 2-component vector of float)
0:119 Sequence
0:119 move second child to first child ( temp 2-component vector of float)
-0:119 'r021' ( temp 2-component vector of float)
-0:119 dPdyCoarse ( temp 2-component vector of float)
+0:119 'r020' ( temp 2-component vector of float)
+0:119 dPdy ( temp 2-component vector of float)
0:119 'inF0' ( in 2-component vector of float)
0:120 Sequence
0:120 move second child to first child ( temp 2-component vector of float)
-0:120 'r022' ( temp 2-component vector of float)
-0:120 dPdyFine ( temp 2-component vector of float)
+0:120 'r021' ( temp 2-component vector of float)
+0:120 dPdyCoarse ( temp 2-component vector of float)
0:120 'inF0' ( in 2-component vector of float)
0:121 Sequence
0:121 move second child to first child ( temp 2-component vector of float)
-0:121 'r023' ( temp 2-component vector of float)
-0:121 degrees ( temp 2-component vector of float)
+0:121 'r022' ( temp 2-component vector of float)
+0:121 dPdyFine ( temp 2-component vector of float)
0:121 'inF0' ( in 2-component vector of float)
-0:125 Sequence
-0:125 move second child to first child ( temp float)
-0:125 'r026' ( temp float)
-0:125 distance ( temp float)
-0:125 'inF0' ( in 2-component vector of float)
-0:125 'inF1' ( in 2-component vector of float)
+0:122 Sequence
+0:122 move second child to first child ( temp 2-component vector of float)
+0:122 'r023' ( temp 2-component vector of float)
+0:122 degrees ( temp 2-component vector of float)
+0:122 'inF0' ( in 2-component vector of float)
0:126 Sequence
0:126 move second child to first child ( temp float)
-0:126 'r027' ( temp float)
-0:126 dot-product ( temp float)
+0:126 'r026' ( temp float)
+0:126 distance ( temp float)
0:126 'inF0' ( in 2-component vector of float)
0:126 'inF1' ( in 2-component vector of float)
-0:130 Sequence
-0:130 move second child to first child ( temp 2-component vector of float)
-0:130 'r028' ( temp 2-component vector of float)
-0:130 exp ( temp 2-component vector of float)
-0:130 'inF0' ( in 2-component vector of float)
+0:127 Sequence
+0:127 move second child to first child ( temp float)
+0:127 'r027' ( temp float)
+0:127 dot-product ( temp float)
+0:127 'inF0' ( in 2-component vector of float)
+0:127 'inF1' ( in 2-component vector of float)
0:131 Sequence
0:131 move second child to first child ( temp 2-component vector of float)
-0:131 'r029' ( temp 2-component vector of float)
-0:131 exp2 ( temp 2-component vector of float)
+0:131 'r028' ( temp 2-component vector of float)
+0:131 exp ( temp 2-component vector of float)
0:131 'inF0' ( in 2-component vector of float)
0:132 Sequence
0:132 move second child to first child ( temp 2-component vector of float)
-0:132 'r030' ( temp 2-component vector of float)
-0:132 face-forward ( temp 2-component vector of float)
+0:132 'r029' ( temp 2-component vector of float)
+0:132 exp2 ( temp 2-component vector of float)
0:132 'inF0' ( in 2-component vector of float)
-0:132 'inF1' ( in 2-component vector of float)
-0:132 'inF2' ( in 2-component vector of float)
0:133 Sequence
-0:133 move second child to first child ( temp 2-component vector of uint)
-0:133 'r031' ( temp 2-component vector of uint)
+0:133 move second child to first child ( temp 2-component vector of float)
+0:133 'r030' ( temp 2-component vector of float)
+0:133 face-forward ( temp 2-component vector of float)
+0:133 'inF0' ( in 2-component vector of float)
+0:133 'inF1' ( in 2-component vector of float)
+0:133 'inF2' ( in 2-component vector of float)
+0:134 Sequence
+0:134 move second child to first child ( temp 2-component vector of uint)
+0:134 'r031' ( temp 2-component vector of uint)
0:? findMSB ( temp 2-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 8 (const uint)
-0:134 Sequence
-0:134 move second child to first child ( temp 2-component vector of uint)
-0:134 'r032' ( temp 2-component vector of uint)
+0:135 Sequence
+0:135 move second child to first child ( temp 2-component vector of uint)
+0:135 'r032' ( temp 2-component vector of uint)
0:? findLSB ( temp 2-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 8 (const uint)
-0:135 Sequence
-0:135 move second child to first child ( temp 2-component vector of float)
-0:135 'r033' ( temp 2-component vector of float)
-0:135 Floor ( temp 2-component vector of float)
-0:135 'inF0' ( in 2-component vector of float)
-0:137 Sequence
-0:137 move second child to first child ( temp 2-component vector of float)
-0:137 'r035' ( temp 2-component vector of float)
-0:137 mod ( temp 2-component vector of float)
-0:137 'inF0' ( in 2-component vector of float)
-0:137 'inF1' ( in 2-component vector of float)
+0:136 Sequence
+0:136 move second child to first child ( temp 2-component vector of float)
+0:136 'r033' ( temp 2-component vector of float)
+0:136 Floor ( temp 2-component vector of float)
+0:136 'inF0' ( in 2-component vector of float)
0:138 Sequence
0:138 move second child to first child ( temp 2-component vector of float)
-0:138 'r036' ( temp 2-component vector of float)
-0:138 Fraction ( temp 2-component vector of float)
+0:138 'r035' ( temp 2-component vector of float)
+0:138 mod ( temp 2-component vector of float)
0:138 'inF0' ( in 2-component vector of float)
+0:138 'inF1' ( in 2-component vector of float)
0:139 Sequence
0:139 move second child to first child ( temp 2-component vector of float)
-0:139 'r037' ( temp 2-component vector of float)
-0:139 frexp ( temp 2-component vector of float)
+0:139 'r036' ( temp 2-component vector of float)
+0:139 Fraction ( temp 2-component vector of float)
0:139 'inF0' ( in 2-component vector of float)
-0:139 'inF1' ( in 2-component vector of float)
0:140 Sequence
0:140 move second child to first child ( temp 2-component vector of float)
0:140 'r038' ( temp 2-component vector of float)
@@ -3551,7 +3574,8 @@ gl_FragCoord origin is upper left
0:181 move second child to first child ( temp bool)
0:181 'r000' ( temp bool)
0:181 all ( temp bool)
-0:181 'inF0' ( in 3-component vector of float)
+0:181 Convert float to bool ( temp 3-component vector of bool)
+0:181 'inF0' ( in 3-component vector of float)
0:182 Sequence
0:182 move second child to first child ( temp 3-component vector of float)
0:182 'r001' ( temp 3-component vector of float)
@@ -3566,7 +3590,8 @@ gl_FragCoord origin is upper left
0:184 move second child to first child ( temp bool)
0:184 'r003' ( temp bool)
0:184 any ( temp bool)
-0:184 'inF0' ( in 3-component vector of float)
+0:184 Convert float to bool ( temp 3-component vector of bool)
+0:184 'inF0' ( in 3-component vector of float)
0:185 Sequence
0:185 move second child to first child ( temp 3-component vector of float)
0:185 'r004' ( temp 3-component vector of float)
@@ -3621,132 +3646,137 @@ gl_FragCoord origin is upper left
0:194 0.000000
0:194 true case
0:194 Branch: Kill
-0:195 Sequence
-0:195 move second child to first child ( temp 3-component vector of float)
-0:195 'r013' ( temp 3-component vector of float)
-0:195 cosine ( temp 3-component vector of float)
-0:195 'inF0' ( in 3-component vector of float)
+0:195 Test condition and select ( temp void)
+0:195 Condition
+0:195 any ( temp bool)
+0:195 Compare Less Than ( temp 3-component vector of bool)
+0:195 'inU0' ( in 3-component vector of uint)
+0:195 Constant:
+0:195 0.000000
+0:195 0.000000
+0:195 0.000000
+0:195 true case
+0:195 Branch: Kill
0:196 Sequence
0:196 move second child to first child ( temp 3-component vector of float)
-0:196 'r014' ( temp 3-component vector of float)
-0:196 hyp. cosine ( temp 3-component vector of float)
+0:196 'r013' ( temp 3-component vector of float)
+0:196 cosine ( temp 3-component vector of float)
0:196 'inF0' ( in 3-component vector of float)
0:197 Sequence
-0:197 move second child to first child ( temp 3-component vector of uint)
-0:197 'r015' ( temp 3-component vector of uint)
+0:197 move second child to first child ( temp 3-component vector of float)
+0:197 'r014' ( temp 3-component vector of float)
+0:197 hyp. cosine ( temp 3-component vector of float)
+0:197 'inF0' ( in 3-component vector of float)
+0:198 Sequence
+0:198 move second child to first child ( temp 3-component vector of uint)
+0:198 'r015' ( temp 3-component vector of uint)
0:? bitCount ( temp 3-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 3 (const uint)
0:? 5 (const uint)
-0:198 Sequence
-0:198 move second child to first child ( temp 3-component vector of float)
-0:198 'r016' ( temp 3-component vector of float)
-0:198 cross-product ( temp 3-component vector of float)
-0:198 'inF0' ( in 3-component vector of float)
-0:198 'inF1' ( in 3-component vector of float)
0:199 Sequence
0:199 move second child to first child ( temp 3-component vector of float)
-0:199 'r017' ( temp 3-component vector of float)
-0:199 dPdx ( temp 3-component vector of float)
+0:199 'r016' ( temp 3-component vector of float)
+0:199 cross-product ( temp 3-component vector of float)
0:199 'inF0' ( in 3-component vector of float)
+0:199 'inF1' ( in 3-component vector of float)
0:200 Sequence
0:200 move second child to first child ( temp 3-component vector of float)
-0:200 'r018' ( temp 3-component vector of float)
-0:200 dPdxCoarse ( temp 3-component vector of float)
+0:200 'r017' ( temp 3-component vector of float)
+0:200 dPdx ( temp 3-component vector of float)
0:200 'inF0' ( in 3-component vector of float)
0:201 Sequence
0:201 move second child to first child ( temp 3-component vector of float)
-0:201 'r019' ( temp 3-component vector of float)
-0:201 dPdxFine ( temp 3-component vector of float)
+0:201 'r018' ( temp 3-component vector of float)
+0:201 dPdxCoarse ( temp 3-component vector of float)
0:201 'inF0' ( in 3-component vector of float)
0:202 Sequence
0:202 move second child to first child ( temp 3-component vector of float)
-0:202 'r020' ( temp 3-component vector of float)
-0:202 dPdy ( temp 3-component vector of float)
+0:202 'r019' ( temp 3-component vector of float)
+0:202 dPdxFine ( temp 3-component vector of float)
0:202 'inF0' ( in 3-component vector of float)
0:203 Sequence
0:203 move second child to first child ( temp 3-component vector of float)
-0:203 'r021' ( temp 3-component vector of float)
-0:203 dPdyCoarse ( temp 3-component vector of float)
+0:203 'r020' ( temp 3-component vector of float)
+0:203 dPdy ( temp 3-component vector of float)
0:203 'inF0' ( in 3-component vector of float)
0:204 Sequence
0:204 move second child to first child ( temp 3-component vector of float)
-0:204 'r022' ( temp 3-component vector of float)
-0:204 dPdyFine ( temp 3-component vector of float)
+0:204 'r021' ( temp 3-component vector of float)
+0:204 dPdyCoarse ( temp 3-component vector of float)
0:204 'inF0' ( in 3-component vector of float)
0:205 Sequence
0:205 move second child to first child ( temp 3-component vector of float)
-0:205 'r023' ( temp 3-component vector of float)
-0:205 degrees ( temp 3-component vector of float)
+0:205 'r022' ( temp 3-component vector of float)
+0:205 dPdyFine ( temp 3-component vector of float)
0:205 'inF0' ( in 3-component vector of float)
0:206 Sequence
-0:206 move second child to first child ( temp float)
-0:206 'r024' ( temp float)
-0:206 distance ( temp float)
+0:206 move second child to first child ( temp 3-component vector of float)
+0:206 'r023' ( temp 3-component vector of float)
+0:206 degrees ( temp 3-component vector of float)
0:206 'inF0' ( in 3-component vector of float)
-0:206 'inF1' ( in 3-component vector of float)
0:207 Sequence
0:207 move second child to first child ( temp float)
-0:207 'r025' ( temp float)
-0:207 dot-product ( temp float)
+0:207 'r024' ( temp float)
+0:207 distance ( temp float)
0:207 'inF0' ( in 3-component vector of float)
0:207 'inF1' ( in 3-component vector of float)
-0:211 Sequence
-0:211 move second child to first child ( temp 3-component vector of float)
-0:211 'r029' ( temp 3-component vector of float)
-0:211 exp ( temp 3-component vector of float)
-0:211 'inF0' ( in 3-component vector of float)
+0:208 Sequence
+0:208 move second child to first child ( temp float)
+0:208 'r025' ( temp float)
+0:208 dot-product ( temp float)
+0:208 'inF0' ( in 3-component vector of float)
+0:208 'inF1' ( in 3-component vector of float)
0:212 Sequence
0:212 move second child to first child ( temp 3-component vector of float)
-0:212 'r030' ( temp 3-component vector of float)
-0:212 exp2 ( temp 3-component vector of float)
+0:212 'r029' ( temp 3-component vector of float)
+0:212 exp ( temp 3-component vector of float)
0:212 'inF0' ( in 3-component vector of float)
0:213 Sequence
0:213 move second child to first child ( temp 3-component vector of float)
-0:213 'r031' ( temp 3-component vector of float)
-0:213 face-forward ( temp 3-component vector of float)
+0:213 'r030' ( temp 3-component vector of float)
+0:213 exp2 ( temp 3-component vector of float)
0:213 'inF0' ( in 3-component vector of float)
-0:213 'inF1' ( in 3-component vector of float)
-0:213 'inF2' ( in 3-component vector of float)
0:214 Sequence
-0:214 move second child to first child ( temp 3-component vector of uint)
-0:214 'r032' ( temp 3-component vector of uint)
+0:214 move second child to first child ( temp 3-component vector of float)
+0:214 'r031' ( temp 3-component vector of float)
+0:214 face-forward ( temp 3-component vector of float)
+0:214 'inF0' ( in 3-component vector of float)
+0:214 'inF1' ( in 3-component vector of float)
+0:214 'inF2' ( in 3-component vector of float)
+0:215 Sequence
+0:215 move second child to first child ( temp 3-component vector of uint)
+0:215 'r032' ( temp 3-component vector of uint)
0:? findMSB ( temp 3-component vector of uint)
0:? Constant:
0:? 2 (const uint)
0:? 3 (const uint)
0:? 4 (const uint)
-0:215 Sequence
-0:215 move second child to first child ( temp 3-component vector of uint)
-0:215 'r033' ( temp 3-component vector of uint)
+0:216 Sequence
+0:216 move second child to first child ( temp 3-component vector of uint)
+0:216 'r033' ( temp 3-component vector of uint)
0:? findLSB ( temp 3-component vector of uint)
0:? Constant:
0:? 2 (const uint)
0:? 3 (const uint)
0:? 4 (const uint)
-0:216 Sequence
-0:216 move second child to first child ( temp 3-component vector of float)
-0:216 'r034' ( temp 3-component vector of float)
-0:216 Floor ( temp 3-component vector of float)
-0:216 'inF0' ( in 3-component vector of float)
-0:218 Sequence
-0:218 move second child to first child ( temp 3-component vector of float)
-0:218 'r036' ( temp 3-component vector of float)
-0:218 mod ( temp 3-component vector of float)
-0:218 'inF0' ( in 3-component vector of float)
-0:218 'inF1' ( in 3-component vector of float)
+0:217 Sequence
+0:217 move second child to first child ( temp 3-component vector of float)
+0:217 'r034' ( temp 3-component vector of float)
+0:217 Floor ( temp 3-component vector of float)
+0:217 'inF0' ( in 3-component vector of float)
0:219 Sequence
0:219 move second child to first child ( temp 3-component vector of float)
-0:219 'r037' ( temp 3-component vector of float)
-0:219 Fraction ( temp 3-component vector of float)
+0:219 'r036' ( temp 3-component vector of float)
+0:219 mod ( temp 3-component vector of float)
0:219 'inF0' ( in 3-component vector of float)
+0:219 'inF1' ( in 3-component vector of float)
0:220 Sequence
0:220 move second child to first child ( temp 3-component vector of float)
-0:220 'r038' ( temp 3-component vector of float)
-0:220 frexp ( temp 3-component vector of float)
+0:220 'r037' ( temp 3-component vector of float)
+0:220 Fraction ( temp 3-component vector of float)
0:220 'inF0' ( in 3-component vector of float)
-0:220 'inF1' ( in 3-component vector of float)
0:221 Sequence
0:221 move second child to first child ( temp 3-component vector of float)
0:221 'r039' ( temp 3-component vector of float)
@@ -3956,7 +3986,8 @@ gl_FragCoord origin is upper left
0:263 move second child to first child ( temp bool)
0:263 'r000' ( temp bool)
0:263 all ( temp bool)
-0:263 'inF0' ( in 4-component vector of float)
+0:263 Convert float to bool ( temp 4-component vector of bool)
+0:263 'inF0' ( in 4-component vector of float)
0:264 Sequence
0:264 move second child to first child ( temp 4-component vector of float)
0:264 'r001' ( temp 4-component vector of float)
@@ -3971,7 +4002,8 @@ gl_FragCoord origin is upper left
0:266 move second child to first child ( temp bool)
0:266 'r003' ( temp bool)
0:266 any ( temp bool)
-0:266 'inF0' ( in 4-component vector of float)
+0:266 Convert float to bool ( temp 4-component vector of bool)
+0:266 'inF0' ( in 4-component vector of float)
0:267 Sequence
0:267 move second child to first child ( temp 4-component vector of float)
0:267 'r004' ( temp 4-component vector of float)
@@ -4027,152 +4059,158 @@ gl_FragCoord origin is upper left
0:276 0.000000
0:276 true case
0:276 Branch: Kill
-0:277 Sequence
-0:277 move second child to first child ( temp 4-component vector of float)
-0:277 'r013' ( temp 4-component vector of float)
-0:277 cosine ( temp 4-component vector of float)
-0:277 'inF0' ( in 4-component vector of float)
+0:277 Test condition and select ( temp void)
+0:277 Condition
+0:277 any ( temp bool)
+0:277 Compare Less Than ( temp 4-component vector of bool)
+0:277 'inU0' ( in 4-component vector of uint)
+0:277 Constant:
+0:277 0.000000
+0:277 0.000000
+0:277 0.000000
+0:277 0.000000
+0:277 true case
+0:277 Branch: Kill
0:278 Sequence
0:278 move second child to first child ( temp 4-component vector of float)
-0:278 'r014' ( temp 4-component vector of float)
-0:278 hyp. cosine ( temp 4-component vector of float)
+0:278 'r013' ( temp 4-component vector of float)
+0:278 cosine ( temp 4-component vector of float)
0:278 'inF0' ( in 4-component vector of float)
0:279 Sequence
-0:279 move second child to first child ( temp 4-component vector of uint)
-0:279 'r015' ( temp 4-component vector of uint)
+0:279 move second child to first child ( temp 4-component vector of float)
+0:279 'r014' ( temp 4-component vector of float)
+0:279 hyp. cosine ( temp 4-component vector of float)
+0:279 'inF0' ( in 4-component vector of float)
+0:280 Sequence
+0:280 move second child to first child ( temp 4-component vector of uint)
+0:280 'r015' ( temp 4-component vector of uint)
0:? bitCount ( temp 4-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 3 (const uint)
0:? 5 (const uint)
0:? 2 (const uint)
-0:280 Sequence
-0:280 move second child to first child ( temp 4-component vector of float)
-0:280 'r016' ( temp 4-component vector of float)
-0:280 dPdx ( temp 4-component vector of float)
-0:280 'inF0' ( in 4-component vector of float)
0:281 Sequence
0:281 move second child to first child ( temp 4-component vector of float)
-0:281 'r017' ( temp 4-component vector of float)
-0:281 dPdxCoarse ( temp 4-component vector of float)
+0:281 'r016' ( temp 4-component vector of float)
+0:281 dPdx ( temp 4-component vector of float)
0:281 'inF0' ( in 4-component vector of float)
0:282 Sequence
0:282 move second child to first child ( temp 4-component vector of float)
-0:282 'r018' ( temp 4-component vector of float)
-0:282 dPdxFine ( temp 4-component vector of float)
+0:282 'r017' ( temp 4-component vector of float)
+0:282 dPdxCoarse ( temp 4-component vector of float)
0:282 'inF0' ( in 4-component vector of float)
0:283 Sequence
0:283 move second child to first child ( temp 4-component vector of float)
-0:283 'r019' ( temp 4-component vector of float)
-0:283 dPdy ( temp 4-component vector of float)
+0:283 'r018' ( temp 4-component vector of float)
+0:283 dPdxFine ( temp 4-component vector of float)
0:283 'inF0' ( in 4-component vector of float)
0:284 Sequence
0:284 move second child to first child ( temp 4-component vector of float)
-0:284 'r020' ( temp 4-component vector of float)
-0:284 dPdyCoarse ( temp 4-component vector of float)
+0:284 'r019' ( temp 4-component vector of float)
+0:284 dPdy ( temp 4-component vector of float)
0:284 'inF0' ( in 4-component vector of float)
0:285 Sequence
0:285 move second child to first child ( temp 4-component vector of float)
-0:285 'r021' ( temp 4-component vector of float)
-0:285 dPdyFine ( temp 4-component vector of float)
+0:285 'r020' ( temp 4-component vector of float)
+0:285 dPdyCoarse ( temp 4-component vector of float)
0:285 'inF0' ( in 4-component vector of float)
0:286 Sequence
0:286 move second child to first child ( temp 4-component vector of float)
-0:286 'r022' ( temp 4-component vector of float)
-0:286 degrees ( temp 4-component vector of float)
+0:286 'r021' ( temp 4-component vector of float)
+0:286 dPdyFine ( temp 4-component vector of float)
0:286 'inF0' ( in 4-component vector of float)
0:287 Sequence
-0:287 move second child to first child ( temp float)
-0:287 'r023' ( temp float)
-0:287 distance ( temp float)
+0:287 move second child to first child ( temp 4-component vector of float)
+0:287 'r022' ( temp 4-component vector of float)
+0:287 degrees ( temp 4-component vector of float)
0:287 'inF0' ( in 4-component vector of float)
-0:287 'inF1' ( in 4-component vector of float)
0:288 Sequence
0:288 move second child to first child ( temp float)
-0:288 'r024' ( temp float)
-0:288 dot-product ( temp float)
+0:288 'r023' ( temp float)
+0:288 distance ( temp float)
0:288 'inF0' ( in 4-component vector of float)
0:288 'inF1' ( in 4-component vector of float)
0:289 Sequence
-0:289 move second child to first child ( temp 4-component vector of float)
-0:289 'r025' ( temp 4-component vector of float)
-0:289 Construct vec4 ( temp 4-component vector of float)
-0:289 Constant:
-0:289 1.000000
-0:289 component-wise multiply ( temp float)
-0:289 direct index ( temp float)
-0:289 'inF0' ( in 4-component vector of float)
-0:289 Constant:
-0:289 1 (const int)
-0:289 direct index ( temp float)
-0:289 'inF1' ( in 4-component vector of float)
-0:289 Constant:
-0:289 1 (const int)
-0:289 direct index ( temp float)
-0:289 'inF0' ( in 4-component vector of float)
-0:289 Constant:
-0:289 2 (const int)
-0:289 direct index ( temp float)
-0:289 'inF1' ( in 4-component vector of float)
-0:289 Constant:
-0:289 3 (const int)
-0:293 Sequence
-0:293 move second child to first child ( temp 4-component vector of float)
-0:293 'r029' ( temp 4-component vector of float)
-0:293 exp ( temp 4-component vector of float)
-0:293 'inF0' ( in 4-component vector of float)
+0:289 move second child to first child ( temp float)
+0:289 'r024' ( temp float)
+0:289 dot-product ( temp float)
+0:289 'inF0' ( in 4-component vector of float)
+0:289 'inF1' ( in 4-component vector of float)
+0:290 Sequence
+0:290 move second child to first child ( temp 4-component vector of float)
+0:290 'r025' ( temp 4-component vector of float)
+0:290 Construct vec4 ( temp 4-component vector of float)
+0:290 Constant:
+0:290 1.000000
+0:290 component-wise multiply ( temp float)
+0:290 direct index ( temp float)
+0:290 'inF0' ( in 4-component vector of float)
+0:290 Constant:
+0:290 1 (const int)
+0:290 direct index ( temp float)
+0:290 'inF1' ( in 4-component vector of float)
+0:290 Constant:
+0:290 1 (const int)
+0:290 direct index ( temp float)
+0:290 'inF0' ( in 4-component vector of float)
+0:290 Constant:
+0:290 2 (const int)
+0:290 direct index ( temp float)
+0:290 'inF1' ( in 4-component vector of float)
+0:290 Constant:
+0:290 3 (const int)
0:294 Sequence
0:294 move second child to first child ( temp 4-component vector of float)
-0:294 'r030' ( temp 4-component vector of float)
-0:294 exp2 ( temp 4-component vector of float)
+0:294 'r029' ( temp 4-component vector of float)
+0:294 exp ( temp 4-component vector of float)
0:294 'inF0' ( in 4-component vector of float)
0:295 Sequence
0:295 move second child to first child ( temp 4-component vector of float)
-0:295 'r031' ( temp 4-component vector of float)
-0:295 face-forward ( temp 4-component vector of float)
+0:295 'r030' ( temp 4-component vector of float)
+0:295 exp2 ( temp 4-component vector of float)
0:295 'inF0' ( in 4-component vector of float)
-0:295 'inF1' ( in 4-component vector of float)
-0:295 'inF2' ( in 4-component vector of float)
0:296 Sequence
-0:296 move second child to first child ( temp 4-component vector of uint)
-0:296 'r032' ( temp 4-component vector of uint)
+0:296 move second child to first child ( temp 4-component vector of float)
+0:296 'r031' ( temp 4-component vector of float)
+0:296 face-forward ( temp 4-component vector of float)
+0:296 'inF0' ( in 4-component vector of float)
+0:296 'inF1' ( in 4-component vector of float)
+0:296 'inF2' ( in 4-component vector of float)
+0:297 Sequence
+0:297 move second child to first child ( temp 4-component vector of uint)
+0:297 'r032' ( temp 4-component vector of uint)
0:? findMSB ( temp 4-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 8 (const uint)
0:? 9 (const uint)
0:? 10 (const uint)
-0:297 Sequence
-0:297 move second child to first child ( temp 4-component vector of uint)
-0:297 'r033' ( temp 4-component vector of uint)
+0:298 Sequence
+0:298 move second child to first child ( temp 4-component vector of uint)
+0:298 'r033' ( temp 4-component vector of uint)
0:? findLSB ( temp 4-component vector of uint)
0:? Constant:
0:? 7 (const uint)
0:? 8 (const uint)
0:? 9 (const uint)
0:? 10 (const uint)
-0:298 Sequence
-0:298 move second child to first child ( temp 4-component vector of float)
-0:298 'r034' ( temp 4-component vector of float)
-0:298 Floor ( temp 4-component vector of float)
-0:298 'inF0' ( in 4-component vector of float)
-0:300 Sequence
-0:300 move second child to first child ( temp 4-component vector of float)
-0:300 'r036' ( temp 4-component vector of float)
-0:300 mod ( temp 4-component vector of float)
-0:300 'inF0' ( in 4-component vector of float)
-0:300 'inF1' ( in 4-component vector of float)
+0:299 Sequence
+0:299 move second child to first child ( temp 4-component vector of float)
+0:299 'r034' ( temp 4-component vector of float)
+0:299 Floor ( temp 4-component vector of float)
+0:299 'inF0' ( in 4-component vector of float)
0:301 Sequence
0:301 move second child to first child ( temp 4-component vector of float)
-0:301 'r037' ( temp 4-component vector of float)
-0:301 Fraction ( temp 4-component vector of float)
+0:301 'r036' ( temp 4-component vector of float)
+0:301 mod ( temp 4-component vector of float)
0:301 'inF0' ( in 4-component vector of float)
+0:301 'inF1' ( in 4-component vector of float)
0:302 Sequence
0:302 move second child to first child ( temp 4-component vector of float)
-0:302 'r038' ( temp 4-component vector of float)
-0:302 frexp ( temp 4-component vector of float)
+0:302 'r037' ( temp 4-component vector of float)
+0:302 Fraction ( temp 4-component vector of float)
0:302 'inF0' ( in 4-component vector of float)
-0:302 'inF1' ( in 4-component vector of float)
0:303 Sequence
0:303 move second child to first child ( temp 4-component vector of float)
0:303 'r039' ( temp 4-component vector of float)
@@ -4364,582 +4402,574 @@ gl_FragCoord origin is upper left
0:? 2.000000
0:? 3.000000
0:? 4.000000
-0:401 Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:401 Function Parameters:
-0:401 'inF0' ( in 2X2 matrix of float)
-0:401 'inF1' ( in 2X2 matrix of float)
-0:401 'inF2' ( in 2X2 matrix of float)
+0:400 Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:400 Function Parameters:
+0:400 'inF0' ( in 2X2 matrix of float)
+0:400 'inF1' ( in 2X2 matrix of float)
+0:400 'inF2' ( in 2X2 matrix of float)
0:? Sequence
-0:403 Sequence
-0:403 move second child to first child ( temp bool)
-0:403 'r000' ( temp bool)
-0:403 all ( temp bool)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r001' ( temp 2X2 matrix of float)
-0:403 Absolute value ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 arc cosine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp bool)
-0:403 'r003' ( temp bool)
-0:403 any ( temp bool)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r004' ( temp 2X2 matrix of float)
-0:403 arc sine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r005' ( temp 2X2 matrix of float)
-0:403 arc tangent ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r006' ( temp 2X2 matrix of float)
-0:403 arc tangent ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r007' ( temp 2X2 matrix of float)
-0:403 Ceiling ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Test condition and select ( temp void)
-0:403 Condition
-0:403 any ( temp bool)
-0:403 Compare Less Than ( temp 2X2 matrix of bool)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Constant:
-0:403 0.000000
-0:403 0.000000
-0:403 0.000000
-0:403 0.000000
-0:403 true case
-0:403 Branch: Kill
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r008' ( temp 2X2 matrix of float)
-0:403 clamp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 'inF2' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r009' ( temp 2X2 matrix of float)
-0:403 cosine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r010' ( temp 2X2 matrix of float)
-0:403 hyp. cosine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r011' ( temp 2X2 matrix of float)
-0:403 dPdx ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r012' ( temp 2X2 matrix of float)
-0:403 dPdxCoarse ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r013' ( temp 2X2 matrix of float)
-0:403 dPdxFine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r014' ( temp 2X2 matrix of float)
-0:403 dPdy ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r015' ( temp 2X2 matrix of float)
-0:403 dPdyCoarse ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r016' ( temp 2X2 matrix of float)
-0:403 dPdyFine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r017' ( temp 2X2 matrix of float)
-0:403 degrees ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp float)
-0:403 'r018' ( temp float)
-0:403 determinant ( temp float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r019' ( temp 2X2 matrix of float)
-0:403 exp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'R020' ( temp 2X2 matrix of float)
-0:403 exp2 ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r021' ( temp 2X2 matrix of float)
-0:403 Floor ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r022' ( temp 2X2 matrix of float)
-0:403 mod ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r023' ( temp 2X2 matrix of float)
-0:403 Fraction ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r024' ( temp 2X2 matrix of float)
-0:403 frexp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r025' ( temp 2X2 matrix of float)
-0:403 fwidth ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r026' ( temp 2X2 matrix of float)
-0:403 ldexp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r026a' ( temp 2X2 matrix of float)
-0:403 mix ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 'inF2' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r027' ( temp 2X2 matrix of float)
-0:403 log ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r028' ( temp 2X2 matrix of float)
-0:403 matrix-scale ( temp 2X2 matrix of float)
-0:403 log2 ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Constant:
-0:403 0.301030
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r029' ( temp 2X2 matrix of float)
-0:403 log2 ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r030' ( temp 2X2 matrix of float)
-0:403 max ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r031' ( temp 2X2 matrix of float)
-0:403 min ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r032' ( temp 2X2 matrix of float)
-0:403 pow ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r033' ( temp 2X2 matrix of float)
-0:403 radians ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r034' ( temp 2X2 matrix of float)
-0:403 roundEven ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r035' ( temp 2X2 matrix of float)
-0:403 inverse sqrt ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r036' ( temp 2X2 matrix of float)
-0:403 clamp ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Constant:
-0:403 0.000000
-0:403 Constant:
-0:403 1.000000
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r037' ( temp 2X2 matrix of float)
-0:403 Sign ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r038' ( temp 2X2 matrix of float)
-0:403 sine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 sine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'inF2' ( in 2X2 matrix of float)
-0:403 cosine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r039' ( temp 2X2 matrix of float)
-0:403 hyp. sine ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r049' ( temp 2X2 matrix of float)
-0:403 smoothstep ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 'inF2' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r041' ( temp 2X2 matrix of float)
-0:403 sqrt ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r042' ( temp 2X2 matrix of float)
-0:403 step ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 'inF1' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r043' ( temp 2X2 matrix of float)
-0:403 tangent ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r044' ( temp 2X2 matrix of float)
-0:403 hyp. tangent ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 transpose ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:403 Sequence
-0:403 move second child to first child ( temp 2X2 matrix of float)
-0:403 'r046' ( temp 2X2 matrix of float)
-0:403 trunc ( temp 2X2 matrix of float)
-0:403 'inF0' ( in 2X2 matrix of float)
-0:406 Branch: Return with expression
+0:402 Sequence
+0:402 move second child to first child ( temp bool)
+0:402 'r000' ( temp bool)
+0:402 all ( temp bool)
+0:402 Convert float to bool ( temp 2X2 matrix of bool)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r001' ( temp 2X2 matrix of float)
+0:402 Absolute value ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 arc cosine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp bool)
+0:402 'r003' ( temp bool)
+0:402 any ( temp bool)
+0:402 Convert float to bool ( temp 2X2 matrix of bool)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r004' ( temp 2X2 matrix of float)
+0:402 arc sine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r005' ( temp 2X2 matrix of float)
+0:402 arc tangent ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r006' ( temp 2X2 matrix of float)
+0:402 arc tangent ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r007' ( temp 2X2 matrix of float)
+0:402 Ceiling ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Test condition and select ( temp void)
+0:402 Condition
+0:402 any ( temp bool)
+0:402 Compare Less Than ( temp 2X2 matrix of bool)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Constant:
+0:402 0.000000
+0:402 0.000000
+0:402 0.000000
+0:402 0.000000
+0:402 true case
+0:402 Branch: Kill
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r008' ( temp 2X2 matrix of float)
+0:402 clamp ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 'inF2' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r009' ( temp 2X2 matrix of float)
+0:402 cosine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r010' ( temp 2X2 matrix of float)
+0:402 hyp. cosine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r011' ( temp 2X2 matrix of float)
+0:402 dPdx ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r012' ( temp 2X2 matrix of float)
+0:402 dPdxCoarse ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r013' ( temp 2X2 matrix of float)
+0:402 dPdxFine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r014' ( temp 2X2 matrix of float)
+0:402 dPdy ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r015' ( temp 2X2 matrix of float)
+0:402 dPdyCoarse ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r016' ( temp 2X2 matrix of float)
+0:402 dPdyFine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r017' ( temp 2X2 matrix of float)
+0:402 degrees ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp float)
+0:402 'r018' ( temp float)
+0:402 determinant ( temp float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r019' ( temp 2X2 matrix of float)
+0:402 exp ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'R020' ( temp 2X2 matrix of float)
+0:402 exp2 ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r021' ( temp 2X2 matrix of float)
+0:402 Floor ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r022' ( temp 2X2 matrix of float)
+0:402 mod ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r023' ( temp 2X2 matrix of float)
+0:402 Fraction ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r025' ( temp 2X2 matrix of float)
+0:402 fwidth ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r026' ( temp 2X2 matrix of float)
+0:402 ldexp ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r026a' ( temp 2X2 matrix of float)
+0:402 mix ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 'inF2' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r027' ( temp 2X2 matrix of float)
+0:402 log ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r028' ( temp 2X2 matrix of float)
+0:402 matrix-scale ( temp 2X2 matrix of float)
+0:402 log2 ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Constant:
+0:402 0.301030
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r029' ( temp 2X2 matrix of float)
+0:402 log2 ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r030' ( temp 2X2 matrix of float)
+0:402 max ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r031' ( temp 2X2 matrix of float)
+0:402 min ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r032' ( temp 2X2 matrix of float)
+0:402 pow ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r033' ( temp 2X2 matrix of float)
+0:402 radians ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r034' ( temp 2X2 matrix of float)
+0:402 roundEven ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r035' ( temp 2X2 matrix of float)
+0:402 inverse sqrt ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r036' ( temp 2X2 matrix of float)
+0:402 clamp ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Constant:
+0:402 0.000000
+0:402 Constant:
+0:402 1.000000
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r037' ( temp 2X2 matrix of float)
+0:402 Sign ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r038' ( temp 2X2 matrix of float)
+0:402 sine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 sine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'inF2' ( in 2X2 matrix of float)
+0:402 cosine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r039' ( temp 2X2 matrix of float)
+0:402 hyp. sine ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r049' ( temp 2X2 matrix of float)
+0:402 smoothstep ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 'inF2' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r041' ( temp 2X2 matrix of float)
+0:402 sqrt ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r042' ( temp 2X2 matrix of float)
+0:402 step ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 'inF1' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r043' ( temp 2X2 matrix of float)
+0:402 tangent ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r044' ( temp 2X2 matrix of float)
+0:402 hyp. tangent ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 transpose ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:402 Sequence
+0:402 move second child to first child ( temp 2X2 matrix of float)
+0:402 'r046' ( temp 2X2 matrix of float)
+0:402 trunc ( temp 2X2 matrix of float)
+0:402 'inF0' ( in 2X2 matrix of float)
+0:405 Branch: Return with expression
0:? Constant:
0:? 2.000000
0:? 2.000000
0:? 2.000000
0:? 2.000000
-0:410 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:410 Function Parameters:
-0:410 'inF0' ( in 3X3 matrix of float)
-0:410 'inF1' ( in 3X3 matrix of float)
-0:410 'inF2' ( in 3X3 matrix of float)
+0:409 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:409 Function Parameters:
+0:409 'inF0' ( in 3X3 matrix of float)
+0:409 'inF1' ( in 3X3 matrix of float)
+0:409 'inF2' ( in 3X3 matrix of float)
0:? Sequence
-0:412 Sequence
-0:412 move second child to first child ( temp bool)
-0:412 'r000' ( temp bool)
-0:412 all ( temp bool)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r001' ( temp 3X3 matrix of float)
-0:412 Absolute value ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 arc cosine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp bool)
-0:412 'r003' ( temp bool)
-0:412 any ( temp bool)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r004' ( temp 3X3 matrix of float)
-0:412 arc sine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r005' ( temp 3X3 matrix of float)
-0:412 arc tangent ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r006' ( temp 3X3 matrix of float)
-0:412 arc tangent ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r007' ( temp 3X3 matrix of float)
-0:412 Ceiling ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Test condition and select ( temp void)
-0:412 Condition
-0:412 any ( temp bool)
-0:412 Compare Less Than ( temp 3X3 matrix of bool)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Constant:
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 0.000000
-0:412 true case
-0:412 Branch: Kill
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r008' ( temp 3X3 matrix of float)
-0:412 clamp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 'inF2' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r009' ( temp 3X3 matrix of float)
-0:412 cosine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r010' ( temp 3X3 matrix of float)
-0:412 hyp. cosine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r011' ( temp 3X3 matrix of float)
-0:412 dPdx ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r012' ( temp 3X3 matrix of float)
-0:412 dPdxCoarse ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r013' ( temp 3X3 matrix of float)
-0:412 dPdxFine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r014' ( temp 3X3 matrix of float)
-0:412 dPdy ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r015' ( temp 3X3 matrix of float)
-0:412 dPdyCoarse ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r016' ( temp 3X3 matrix of float)
-0:412 dPdyFine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r017' ( temp 3X3 matrix of float)
-0:412 degrees ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp float)
-0:412 'r018' ( temp float)
-0:412 determinant ( temp float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r019' ( temp 3X3 matrix of float)
-0:412 exp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'R020' ( temp 3X3 matrix of float)
-0:412 exp2 ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r021' ( temp 3X3 matrix of float)
-0:412 Floor ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r022' ( temp 3X3 matrix of float)
-0:412 mod ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r023' ( temp 3X3 matrix of float)
-0:412 Fraction ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r024' ( temp 3X3 matrix of float)
-0:412 frexp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r025' ( temp 3X3 matrix of float)
-0:412 fwidth ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r026' ( temp 3X3 matrix of float)
-0:412 ldexp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r026a' ( temp 3X3 matrix of float)
-0:412 mix ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 'inF2' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r027' ( temp 3X3 matrix of float)
-0:412 log ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r028' ( temp 3X3 matrix of float)
-0:412 matrix-scale ( temp 3X3 matrix of float)
-0:412 log2 ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Constant:
-0:412 0.301030
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r029' ( temp 3X3 matrix of float)
-0:412 log2 ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r030' ( temp 3X3 matrix of float)
-0:412 max ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r031' ( temp 3X3 matrix of float)
-0:412 min ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r032' ( temp 3X3 matrix of float)
-0:412 pow ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r033' ( temp 3X3 matrix of float)
-0:412 radians ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r034' ( temp 3X3 matrix of float)
-0:412 roundEven ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r035' ( temp 3X3 matrix of float)
-0:412 inverse sqrt ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r036' ( temp 3X3 matrix of float)
-0:412 clamp ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Constant:
-0:412 0.000000
-0:412 Constant:
-0:412 1.000000
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r037' ( temp 3X3 matrix of float)
-0:412 Sign ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r038' ( temp 3X3 matrix of float)
-0:412 sine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 sine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'inF2' ( in 3X3 matrix of float)
-0:412 cosine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r039' ( temp 3X3 matrix of float)
-0:412 hyp. sine ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r049' ( temp 3X3 matrix of float)
-0:412 smoothstep ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 'inF2' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r041' ( temp 3X3 matrix of float)
-0:412 sqrt ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r042' ( temp 3X3 matrix of float)
-0:412 step ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 'inF1' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r043' ( temp 3X3 matrix of float)
-0:412 tangent ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r044' ( temp 3X3 matrix of float)
-0:412 hyp. tangent ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 transpose ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:412 Sequence
-0:412 move second child to first child ( temp 3X3 matrix of float)
-0:412 'r046' ( temp 3X3 matrix of float)
-0:412 trunc ( temp 3X3 matrix of float)
-0:412 'inF0' ( in 3X3 matrix of float)
-0:415 Branch: Return with expression
+0:411 Sequence
+0:411 move second child to first child ( temp bool)
+0:411 'r000' ( temp bool)
+0:411 all ( temp bool)
+0:411 Convert float to bool ( temp 3X3 matrix of bool)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r001' ( temp 3X3 matrix of float)
+0:411 Absolute value ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 arc cosine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp bool)
+0:411 'r003' ( temp bool)
+0:411 any ( temp bool)
+0:411 Convert float to bool ( temp 3X3 matrix of bool)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r004' ( temp 3X3 matrix of float)
+0:411 arc sine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r005' ( temp 3X3 matrix of float)
+0:411 arc tangent ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r006' ( temp 3X3 matrix of float)
+0:411 arc tangent ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r007' ( temp 3X3 matrix of float)
+0:411 Ceiling ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Test condition and select ( temp void)
+0:411 Condition
+0:411 any ( temp bool)
+0:411 Compare Less Than ( temp 3X3 matrix of bool)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Constant:
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 0.000000
+0:411 true case
+0:411 Branch: Kill
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r008' ( temp 3X3 matrix of float)
+0:411 clamp ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 'inF2' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r009' ( temp 3X3 matrix of float)
+0:411 cosine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r010' ( temp 3X3 matrix of float)
+0:411 hyp. cosine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r011' ( temp 3X3 matrix of float)
+0:411 dPdx ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r012' ( temp 3X3 matrix of float)
+0:411 dPdxCoarse ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r013' ( temp 3X3 matrix of float)
+0:411 dPdxFine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r014' ( temp 3X3 matrix of float)
+0:411 dPdy ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r015' ( temp 3X3 matrix of float)
+0:411 dPdyCoarse ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r016' ( temp 3X3 matrix of float)
+0:411 dPdyFine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r017' ( temp 3X3 matrix of float)
+0:411 degrees ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp float)
+0:411 'r018' ( temp float)
+0:411 determinant ( temp float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r019' ( temp 3X3 matrix of float)
+0:411 exp ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'R020' ( temp 3X3 matrix of float)
+0:411 exp2 ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r021' ( temp 3X3 matrix of float)
+0:411 Floor ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r022' ( temp 3X3 matrix of float)
+0:411 mod ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r023' ( temp 3X3 matrix of float)
+0:411 Fraction ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r025' ( temp 3X3 matrix of float)
+0:411 fwidth ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r026' ( temp 3X3 matrix of float)
+0:411 ldexp ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r026a' ( temp 3X3 matrix of float)
+0:411 mix ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 'inF2' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r027' ( temp 3X3 matrix of float)
+0:411 log ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r028' ( temp 3X3 matrix of float)
+0:411 matrix-scale ( temp 3X3 matrix of float)
+0:411 log2 ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Constant:
+0:411 0.301030
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r029' ( temp 3X3 matrix of float)
+0:411 log2 ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r030' ( temp 3X3 matrix of float)
+0:411 max ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r031' ( temp 3X3 matrix of float)
+0:411 min ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r032' ( temp 3X3 matrix of float)
+0:411 pow ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r033' ( temp 3X3 matrix of float)
+0:411 radians ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r034' ( temp 3X3 matrix of float)
+0:411 roundEven ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r035' ( temp 3X3 matrix of float)
+0:411 inverse sqrt ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r036' ( temp 3X3 matrix of float)
+0:411 clamp ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Constant:
+0:411 0.000000
+0:411 Constant:
+0:411 1.000000
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r037' ( temp 3X3 matrix of float)
+0:411 Sign ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r038' ( temp 3X3 matrix of float)
+0:411 sine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 sine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'inF2' ( in 3X3 matrix of float)
+0:411 cosine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r039' ( temp 3X3 matrix of float)
+0:411 hyp. sine ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r049' ( temp 3X3 matrix of float)
+0:411 smoothstep ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 'inF2' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r041' ( temp 3X3 matrix of float)
+0:411 sqrt ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r042' ( temp 3X3 matrix of float)
+0:411 step ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 'inF1' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r043' ( temp 3X3 matrix of float)
+0:411 tangent ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r044' ( temp 3X3 matrix of float)
+0:411 hyp. tangent ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 transpose ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:411 Sequence
+0:411 move second child to first child ( temp 3X3 matrix of float)
+0:411 'r046' ( temp 3X3 matrix of float)
+0:411 trunc ( temp 3X3 matrix of float)
+0:411 'inF0' ( in 3X3 matrix of float)
+0:414 Branch: Return with expression
0:? Constant:
0:? 3.000000
0:? 3.000000
@@ -4950,301 +4980,297 @@ gl_FragCoord origin is upper left
0:? 3.000000
0:? 3.000000
0:? 3.000000
-0:419 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:419 Function Parameters:
-0:419 'inF0' ( in 4X4 matrix of float)
-0:419 'inF1' ( in 4X4 matrix of float)
-0:419 'inF2' ( in 4X4 matrix of float)
+0:418 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:418 Function Parameters:
+0:418 'inF0' ( in 4X4 matrix of float)
+0:418 'inF1' ( in 4X4 matrix of float)
+0:418 'inF2' ( in 4X4 matrix of float)
0:? Sequence
-0:421 Sequence
-0:421 move second child to first child ( temp bool)
-0:421 'r000' ( temp bool)
-0:421 all ( temp bool)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r001' ( temp 4X4 matrix of float)
-0:421 Absolute value ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 arc cosine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp bool)
-0:421 'r003' ( temp bool)
-0:421 any ( temp bool)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r004' ( temp 4X4 matrix of float)
-0:421 arc sine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r005' ( temp 4X4 matrix of float)
-0:421 arc tangent ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r006' ( temp 4X4 matrix of float)
-0:421 arc tangent ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r007' ( temp 4X4 matrix of float)
-0:421 Ceiling ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Test condition and select ( temp void)
-0:421 Condition
-0:421 any ( temp bool)
-0:421 Compare Less Than ( temp 4X4 matrix of bool)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Constant:
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 0.000000
-0:421 true case
-0:421 Branch: Kill
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r008' ( temp 4X4 matrix of float)
-0:421 clamp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 'inF2' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r009' ( temp 4X4 matrix of float)
-0:421 cosine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r010' ( temp 4X4 matrix of float)
-0:421 hyp. cosine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r011' ( temp 4X4 matrix of float)
-0:421 dPdx ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r012' ( temp 4X4 matrix of float)
-0:421 dPdxCoarse ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r013' ( temp 4X4 matrix of float)
-0:421 dPdxFine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r014' ( temp 4X4 matrix of float)
-0:421 dPdy ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r015' ( temp 4X4 matrix of float)
-0:421 dPdyCoarse ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r016' ( temp 4X4 matrix of float)
-0:421 dPdyFine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r017' ( temp 4X4 matrix of float)
-0:421 degrees ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp float)
-0:421 'r018' ( temp float)
-0:421 determinant ( temp float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r019' ( temp 4X4 matrix of float)
-0:421 exp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'R020' ( temp 4X4 matrix of float)
-0:421 exp2 ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r021' ( temp 4X4 matrix of float)
-0:421 Floor ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r022' ( temp 4X4 matrix of float)
-0:421 mod ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r023' ( temp 4X4 matrix of float)
-0:421 Fraction ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r024' ( temp 4X4 matrix of float)
-0:421 frexp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r025' ( temp 4X4 matrix of float)
-0:421 fwidth ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r026' ( temp 4X4 matrix of float)
-0:421 ldexp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r026a' ( temp 4X4 matrix of float)
-0:421 mix ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 'inF2' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r027' ( temp 4X4 matrix of float)
-0:421 log ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r028' ( temp 4X4 matrix of float)
-0:421 matrix-scale ( temp 4X4 matrix of float)
-0:421 log2 ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Constant:
-0:421 0.301030
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r029' ( temp 4X4 matrix of float)
-0:421 log2 ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r030' ( temp 4X4 matrix of float)
-0:421 max ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r031' ( temp 4X4 matrix of float)
-0:421 min ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r032' ( temp 4X4 matrix of float)
-0:421 pow ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r033' ( temp 4X4 matrix of float)
-0:421 radians ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r034' ( temp 4X4 matrix of float)
-0:421 roundEven ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r035' ( temp 4X4 matrix of float)
-0:421 inverse sqrt ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r036' ( temp 4X4 matrix of float)
-0:421 clamp ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Constant:
-0:421 0.000000
-0:421 Constant:
-0:421 1.000000
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r037' ( temp 4X4 matrix of float)
-0:421 Sign ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r038' ( temp 4X4 matrix of float)
-0:421 sine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 sine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'inF2' ( in 4X4 matrix of float)
-0:421 cosine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r039' ( temp 4X4 matrix of float)
-0:421 hyp. sine ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r049' ( temp 4X4 matrix of float)
-0:421 smoothstep ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 'inF2' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r041' ( temp 4X4 matrix of float)
-0:421 sqrt ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r042' ( temp 4X4 matrix of float)
-0:421 step ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 'inF1' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r043' ( temp 4X4 matrix of float)
-0:421 tangent ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r044' ( temp 4X4 matrix of float)
-0:421 hyp. tangent ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 transpose ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:421 Sequence
-0:421 move second child to first child ( temp 4X4 matrix of float)
-0:421 'r046' ( temp 4X4 matrix of float)
-0:421 trunc ( temp 4X4 matrix of float)
-0:421 'inF0' ( in 4X4 matrix of float)
-0:424 Branch: Return with expression
+0:420 Sequence
+0:420 move second child to first child ( temp bool)
+0:420 'r000' ( temp bool)
+0:420 all ( temp bool)
+0:420 Convert float to bool ( temp 4X4 matrix of bool)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r001' ( temp 4X4 matrix of float)
+0:420 Absolute value ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 arc cosine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp bool)
+0:420 'r003' ( temp bool)
+0:420 any ( temp bool)
+0:420 Convert float to bool ( temp 4X4 matrix of bool)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r004' ( temp 4X4 matrix of float)
+0:420 arc sine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r005' ( temp 4X4 matrix of float)
+0:420 arc tangent ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r006' ( temp 4X4 matrix of float)
+0:420 arc tangent ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r007' ( temp 4X4 matrix of float)
+0:420 Ceiling ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Test condition and select ( temp void)
+0:420 Condition
+0:420 any ( temp bool)
+0:420 Compare Less Than ( temp 4X4 matrix of bool)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Constant:
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 0.000000
+0:420 true case
+0:420 Branch: Kill
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r008' ( temp 4X4 matrix of float)
+0:420 clamp ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 'inF2' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r009' ( temp 4X4 matrix of float)
+0:420 cosine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r010' ( temp 4X4 matrix of float)
+0:420 hyp. cosine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r011' ( temp 4X4 matrix of float)
+0:420 dPdx ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r012' ( temp 4X4 matrix of float)
+0:420 dPdxCoarse ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r013' ( temp 4X4 matrix of float)
+0:420 dPdxFine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r014' ( temp 4X4 matrix of float)
+0:420 dPdy ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r015' ( temp 4X4 matrix of float)
+0:420 dPdyCoarse ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r016' ( temp 4X4 matrix of float)
+0:420 dPdyFine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r017' ( temp 4X4 matrix of float)
+0:420 degrees ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp float)
+0:420 'r018' ( temp float)
+0:420 determinant ( temp float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r019' ( temp 4X4 matrix of float)
+0:420 exp ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'R020' ( temp 4X4 matrix of float)
+0:420 exp2 ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r021' ( temp 4X4 matrix of float)
+0:420 Floor ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r022' ( temp 4X4 matrix of float)
+0:420 mod ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r023' ( temp 4X4 matrix of float)
+0:420 Fraction ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r025' ( temp 4X4 matrix of float)
+0:420 fwidth ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r026' ( temp 4X4 matrix of float)
+0:420 ldexp ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r026a' ( temp 4X4 matrix of float)
+0:420 mix ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 'inF2' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r027' ( temp 4X4 matrix of float)
+0:420 log ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r028' ( temp 4X4 matrix of float)
+0:420 matrix-scale ( temp 4X4 matrix of float)
+0:420 log2 ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Constant:
+0:420 0.301030
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r029' ( temp 4X4 matrix of float)
+0:420 log2 ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r030' ( temp 4X4 matrix of float)
+0:420 max ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r031' ( temp 4X4 matrix of float)
+0:420 min ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r032' ( temp 4X4 matrix of float)
+0:420 pow ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r033' ( temp 4X4 matrix of float)
+0:420 radians ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r034' ( temp 4X4 matrix of float)
+0:420 roundEven ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r035' ( temp 4X4 matrix of float)
+0:420 inverse sqrt ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r036' ( temp 4X4 matrix of float)
+0:420 clamp ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Constant:
+0:420 0.000000
+0:420 Constant:
+0:420 1.000000
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r037' ( temp 4X4 matrix of float)
+0:420 Sign ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r038' ( temp 4X4 matrix of float)
+0:420 sine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 sine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'inF2' ( in 4X4 matrix of float)
+0:420 cosine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r039' ( temp 4X4 matrix of float)
+0:420 hyp. sine ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r049' ( temp 4X4 matrix of float)
+0:420 smoothstep ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 'inF2' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r041' ( temp 4X4 matrix of float)
+0:420 sqrt ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r042' ( temp 4X4 matrix of float)
+0:420 step ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 'inF1' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r043' ( temp 4X4 matrix of float)
+0:420 tangent ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r044' ( temp 4X4 matrix of float)
+0:420 hyp. tangent ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 transpose ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:420 Sequence
+0:420 move second child to first child ( temp 4X4 matrix of float)
+0:420 'r046' ( temp 4X4 matrix of float)
+0:420 trunc ( temp 4X4 matrix of float)
+0:420 'inF0' ( in 4X4 matrix of float)
+0:423 Branch: Return with expression
0:? Constant:
0:? 4.000000
0:? 4.000000
@@ -5262,334 +5288,334 @@ gl_FragCoord origin is upper left
0:? 4.000000
0:? 4.000000
0:? 4.000000
-0:442 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:442 Function Parameters:
-0:442 'inF0' ( in float)
-0:442 'inF1' ( in float)
-0:442 'inFV0' ( in 2-component vector of float)
-0:442 'inFV1' ( in 2-component vector of float)
-0:442 'inFM0' ( in 2X2 matrix of float)
-0:442 'inFM1' ( in 2X2 matrix of float)
+0:441 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:441 Function Parameters:
+0:441 'inF0' ( in float)
+0:441 'inF1' ( in float)
+0:441 'inFV0' ( in 2-component vector of float)
+0:441 'inFV1' ( in 2-component vector of float)
+0:441 'inFM0' ( in 2X2 matrix of float)
+0:441 'inFM1' ( in 2X2 matrix of float)
0:? Sequence
-0:443 Sequence
-0:443 move second child to first child ( temp float)
-0:443 'r0' ( temp float)
-0:443 component-wise multiply ( temp float)
-0:443 'inF1' ( in float)
-0:443 'inF0' ( in float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2-component vector of float)
-0:443 'r1' ( temp 2-component vector of float)
-0:443 vector-scale ( temp 2-component vector of float)
-0:443 'inF0' ( in float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2-component vector of float)
-0:443 'r2' ( temp 2-component vector of float)
-0:443 vector-scale ( temp 2-component vector of float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 'inF0' ( in float)
-0:443 Sequence
-0:443 move second child to first child ( temp float)
-0:443 'r3' ( temp float)
-0:443 dot-product ( temp float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 'inFV1' ( in 2-component vector of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2-component vector of float)
-0:443 'r4' ( temp 2-component vector of float)
-0:443 vector-times-matrix ( temp 2-component vector of float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2-component vector of float)
-0:443 'r5' ( temp 2-component vector of float)
-0:443 matrix-times-vector ( temp 2-component vector of float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:443 'inFV0' ( in 2-component vector of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2X2 matrix of float)
-0:443 'r6' ( temp 2X2 matrix of float)
-0:443 matrix-scale ( temp 2X2 matrix of float)
-0:443 'inF0' ( in float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2X2 matrix of float)
-0:443 'r7' ( temp 2X2 matrix of float)
-0:443 matrix-scale ( temp 2X2 matrix of float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:443 'inF0' ( in float)
-0:443 Sequence
-0:443 move second child to first child ( temp 2X2 matrix of float)
-0:443 'r8' ( temp 2X2 matrix of float)
-0:443 matrix-multiply ( temp 2X2 matrix of float)
-0:443 'inFM1' ( in 2X2 matrix of float)
-0:443 'inFM0' ( in 2X2 matrix of float)
-0:449 Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:449 Function Parameters:
-0:449 'inF0' ( in float)
-0:449 'inF1' ( in float)
-0:449 'inFV0' ( in 3-component vector of float)
-0:449 'inFV1' ( in 3-component vector of float)
-0:449 'inFM0' ( in 3X3 matrix of float)
-0:449 'inFM1' ( in 3X3 matrix of float)
+0:442 Sequence
+0:442 move second child to first child ( temp float)
+0:442 'r0' ( temp float)
+0:442 component-wise multiply ( temp float)
+0:442 'inF1' ( in float)
+0:442 'inF0' ( in float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2-component vector of float)
+0:442 'r1' ( temp 2-component vector of float)
+0:442 vector-scale ( temp 2-component vector of float)
+0:442 'inF0' ( in float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2-component vector of float)
+0:442 'r2' ( temp 2-component vector of float)
+0:442 vector-scale ( temp 2-component vector of float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 'inF0' ( in float)
+0:442 Sequence
+0:442 move second child to first child ( temp float)
+0:442 'r3' ( temp float)
+0:442 dot-product ( temp float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 'inFV1' ( in 2-component vector of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2-component vector of float)
+0:442 'r4' ( temp 2-component vector of float)
+0:442 vector-times-matrix ( temp 2-component vector of float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2-component vector of float)
+0:442 'r5' ( temp 2-component vector of float)
+0:442 matrix-times-vector ( temp 2-component vector of float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:442 'inFV0' ( in 2-component vector of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2X2 matrix of float)
+0:442 'r6' ( temp 2X2 matrix of float)
+0:442 matrix-scale ( temp 2X2 matrix of float)
+0:442 'inF0' ( in float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2X2 matrix of float)
+0:442 'r7' ( temp 2X2 matrix of float)
+0:442 matrix-scale ( temp 2X2 matrix of float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:442 'inF0' ( in float)
+0:442 Sequence
+0:442 move second child to first child ( temp 2X2 matrix of float)
+0:442 'r8' ( temp 2X2 matrix of float)
+0:442 matrix-multiply ( temp 2X2 matrix of float)
+0:442 'inFM1' ( in 2X2 matrix of float)
+0:442 'inFM0' ( in 2X2 matrix of float)
+0:448 Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:448 Function Parameters:
+0:448 'inF0' ( in float)
+0:448 'inF1' ( in float)
+0:448 'inFV0' ( in 3-component vector of float)
+0:448 'inFV1' ( in 3-component vector of float)
+0:448 'inFM0' ( in 3X3 matrix of float)
+0:448 'inFM1' ( in 3X3 matrix of float)
0:? Sequence
-0:450 Sequence
-0:450 move second child to first child ( temp float)
-0:450 'r0' ( temp float)
-0:450 component-wise multiply ( temp float)
-0:450 'inF1' ( in float)
-0:450 'inF0' ( in float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3-component vector of float)
-0:450 'r1' ( temp 3-component vector of float)
-0:450 vector-scale ( temp 3-component vector of float)
-0:450 'inF0' ( in float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3-component vector of float)
-0:450 'r2' ( temp 3-component vector of float)
-0:450 vector-scale ( temp 3-component vector of float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 'inF0' ( in float)
-0:450 Sequence
-0:450 move second child to first child ( temp float)
-0:450 'r3' ( temp float)
-0:450 dot-product ( temp float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 'inFV1' ( in 3-component vector of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3-component vector of float)
-0:450 'r4' ( temp 3-component vector of float)
-0:450 vector-times-matrix ( temp 3-component vector of float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3-component vector of float)
-0:450 'r5' ( temp 3-component vector of float)
-0:450 matrix-times-vector ( temp 3-component vector of float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:450 'inFV0' ( in 3-component vector of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3X3 matrix of float)
-0:450 'r6' ( temp 3X3 matrix of float)
-0:450 matrix-scale ( temp 3X3 matrix of float)
-0:450 'inF0' ( in float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3X3 matrix of float)
-0:450 'r7' ( temp 3X3 matrix of float)
-0:450 matrix-scale ( temp 3X3 matrix of float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:450 'inF0' ( in float)
-0:450 Sequence
-0:450 move second child to first child ( temp 3X3 matrix of float)
-0:450 'r8' ( temp 3X3 matrix of float)
-0:450 matrix-multiply ( temp 3X3 matrix of float)
-0:450 'inFM1' ( in 3X3 matrix of float)
-0:450 'inFM0' ( in 3X3 matrix of float)
-0:456 Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:456 Function Parameters:
-0:456 'inF0' ( in float)
-0:456 'inF1' ( in float)
-0:456 'inFV0' ( in 4-component vector of float)
-0:456 'inFV1' ( in 4-component vector of float)
-0:456 'inFM0' ( in 4X4 matrix of float)
-0:456 'inFM1' ( in 4X4 matrix of float)
+0:449 Sequence
+0:449 move second child to first child ( temp float)
+0:449 'r0' ( temp float)
+0:449 component-wise multiply ( temp float)
+0:449 'inF1' ( in float)
+0:449 'inF0' ( in float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3-component vector of float)
+0:449 'r1' ( temp 3-component vector of float)
+0:449 vector-scale ( temp 3-component vector of float)
+0:449 'inF0' ( in float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3-component vector of float)
+0:449 'r2' ( temp 3-component vector of float)
+0:449 vector-scale ( temp 3-component vector of float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 'inF0' ( in float)
+0:449 Sequence
+0:449 move second child to first child ( temp float)
+0:449 'r3' ( temp float)
+0:449 dot-product ( temp float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 'inFV1' ( in 3-component vector of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3-component vector of float)
+0:449 'r4' ( temp 3-component vector of float)
+0:449 vector-times-matrix ( temp 3-component vector of float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3-component vector of float)
+0:449 'r5' ( temp 3-component vector of float)
+0:449 matrix-times-vector ( temp 3-component vector of float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:449 'inFV0' ( in 3-component vector of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3X3 matrix of float)
+0:449 'r6' ( temp 3X3 matrix of float)
+0:449 matrix-scale ( temp 3X3 matrix of float)
+0:449 'inF0' ( in float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3X3 matrix of float)
+0:449 'r7' ( temp 3X3 matrix of float)
+0:449 matrix-scale ( temp 3X3 matrix of float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:449 'inF0' ( in float)
+0:449 Sequence
+0:449 move second child to first child ( temp 3X3 matrix of float)
+0:449 'r8' ( temp 3X3 matrix of float)
+0:449 matrix-multiply ( temp 3X3 matrix of float)
+0:449 'inFM1' ( in 3X3 matrix of float)
+0:449 'inFM0' ( in 3X3 matrix of float)
+0:455 Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:455 Function Parameters:
+0:455 'inF0' ( in float)
+0:455 'inF1' ( in float)
+0:455 'inFV0' ( in 4-component vector of float)
+0:455 'inFV1' ( in 4-component vector of float)
+0:455 'inFM0' ( in 4X4 matrix of float)
+0:455 'inFM1' ( in 4X4 matrix of float)
0:? Sequence
-0:457 Sequence
-0:457 move second child to first child ( temp float)
-0:457 'r0' ( temp float)
-0:457 component-wise multiply ( temp float)
-0:457 'inF1' ( in float)
-0:457 'inF0' ( in float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4-component vector of float)
-0:457 'r1' ( temp 4-component vector of float)
-0:457 vector-scale ( temp 4-component vector of float)
-0:457 'inF0' ( in float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4-component vector of float)
-0:457 'r2' ( temp 4-component vector of float)
-0:457 vector-scale ( temp 4-component vector of float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 'inF0' ( in float)
-0:457 Sequence
-0:457 move second child to first child ( temp float)
-0:457 'r3' ( temp float)
-0:457 dot-product ( temp float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 'inFV1' ( in 4-component vector of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4-component vector of float)
-0:457 'r4' ( temp 4-component vector of float)
-0:457 vector-times-matrix ( temp 4-component vector of float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4-component vector of float)
-0:457 'r5' ( temp 4-component vector of float)
-0:457 matrix-times-vector ( temp 4-component vector of float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:457 'inFV0' ( in 4-component vector of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4X4 matrix of float)
-0:457 'r6' ( temp 4X4 matrix of float)
-0:457 matrix-scale ( temp 4X4 matrix of float)
-0:457 'inF0' ( in float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4X4 matrix of float)
-0:457 'r7' ( temp 4X4 matrix of float)
-0:457 matrix-scale ( temp 4X4 matrix of float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:457 'inF0' ( in float)
-0:457 Sequence
-0:457 move second child to first child ( temp 4X4 matrix of float)
-0:457 'r8' ( temp 4X4 matrix of float)
-0:457 matrix-multiply ( temp 4X4 matrix of float)
-0:457 'inFM1' ( in 4X4 matrix of float)
-0:457 'inFM0' ( in 4X4 matrix of float)
-0:466 Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:466 Function Parameters:
-0:466 'inF0' ( in float)
-0:466 'inF1' ( in float)
-0:466 'inFV2' ( in 2-component vector of float)
-0:466 'inFV3' ( in 3-component vector of float)
-0:466 'inFM2x3' ( in 2X3 matrix of float)
-0:466 'inFM3x2' ( in 3X2 matrix of float)
-0:466 'inFM3x3' ( in 3X3 matrix of float)
-0:466 'inFM3x4' ( in 3X4 matrix of float)
-0:466 'inFM2x4' ( in 2X4 matrix of float)
+0:456 Sequence
+0:456 move second child to first child ( temp float)
+0:456 'r0' ( temp float)
+0:456 component-wise multiply ( temp float)
+0:456 'inF1' ( in float)
+0:456 'inF0' ( in float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4-component vector of float)
+0:456 'r1' ( temp 4-component vector of float)
+0:456 vector-scale ( temp 4-component vector of float)
+0:456 'inF0' ( in float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4-component vector of float)
+0:456 'r2' ( temp 4-component vector of float)
+0:456 vector-scale ( temp 4-component vector of float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 'inF0' ( in float)
+0:456 Sequence
+0:456 move second child to first child ( temp float)
+0:456 'r3' ( temp float)
+0:456 dot-product ( temp float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 'inFV1' ( in 4-component vector of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4-component vector of float)
+0:456 'r4' ( temp 4-component vector of float)
+0:456 vector-times-matrix ( temp 4-component vector of float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4-component vector of float)
+0:456 'r5' ( temp 4-component vector of float)
+0:456 matrix-times-vector ( temp 4-component vector of float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:456 'inFV0' ( in 4-component vector of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4X4 matrix of float)
+0:456 'r6' ( temp 4X4 matrix of float)
+0:456 matrix-scale ( temp 4X4 matrix of float)
+0:456 'inF0' ( in float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4X4 matrix of float)
+0:456 'r7' ( temp 4X4 matrix of float)
+0:456 matrix-scale ( temp 4X4 matrix of float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:456 'inF0' ( in float)
+0:456 Sequence
+0:456 move second child to first child ( temp 4X4 matrix of float)
+0:456 'r8' ( temp 4X4 matrix of float)
+0:456 matrix-multiply ( temp 4X4 matrix of float)
+0:456 'inFM1' ( in 4X4 matrix of float)
+0:456 'inFM0' ( in 4X4 matrix of float)
+0:465 Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:465 Function Parameters:
+0:465 'inF0' ( in float)
+0:465 'inF1' ( in float)
+0:465 'inFV2' ( in 2-component vector of float)
+0:465 'inFV3' ( in 3-component vector of float)
+0:465 'inFM2x3' ( in 2X3 matrix of float)
+0:465 'inFM3x2' ( in 3X2 matrix of float)
+0:465 'inFM3x3' ( in 3X3 matrix of float)
+0:465 'inFM3x4' ( in 3X4 matrix of float)
+0:465 'inFM2x4' ( in 2X4 matrix of float)
0:? Sequence
+0:466 Sequence
+0:466 move second child to first child ( temp float)
+0:466 'r00' ( temp float)
+0:466 component-wise multiply ( temp float)
+0:466 'inF1' ( in float)
+0:466 'inF0' ( in float)
0:467 Sequence
-0:467 move second child to first child ( temp float)
-0:467 'r00' ( temp float)
-0:467 component-wise multiply ( temp float)
-0:467 'inF1' ( in float)
+0:467 move second child to first child ( temp 2-component vector of float)
+0:467 'r01' ( temp 2-component vector of float)
+0:467 vector-scale ( temp 2-component vector of float)
0:467 'inF0' ( in float)
+0:467 'inFV2' ( in 2-component vector of float)
0:468 Sequence
-0:468 move second child to first child ( temp 2-component vector of float)
-0:468 'r01' ( temp 2-component vector of float)
-0:468 vector-scale ( temp 2-component vector of float)
+0:468 move second child to first child ( temp 3-component vector of float)
+0:468 'r02' ( temp 3-component vector of float)
+0:468 vector-scale ( temp 3-component vector of float)
0:468 'inF0' ( in float)
-0:468 'inFV2' ( in 2-component vector of float)
+0:468 'inFV3' ( in 3-component vector of float)
0:469 Sequence
-0:469 move second child to first child ( temp 3-component vector of float)
-0:469 'r02' ( temp 3-component vector of float)
-0:469 vector-scale ( temp 3-component vector of float)
+0:469 move second child to first child ( temp 2-component vector of float)
+0:469 'r03' ( temp 2-component vector of float)
+0:469 vector-scale ( temp 2-component vector of float)
+0:469 'inFV2' ( in 2-component vector of float)
0:469 'inF0' ( in float)
-0:469 'inFV3' ( in 3-component vector of float)
0:470 Sequence
-0:470 move second child to first child ( temp 2-component vector of float)
-0:470 'r03' ( temp 2-component vector of float)
-0:470 vector-scale ( temp 2-component vector of float)
-0:470 'inFV2' ( in 2-component vector of float)
+0:470 move second child to first child ( temp 3-component vector of float)
+0:470 'r04' ( temp 3-component vector of float)
+0:470 vector-scale ( temp 3-component vector of float)
+0:470 'inFV3' ( in 3-component vector of float)
0:470 'inF0' ( in float)
0:471 Sequence
-0:471 move second child to first child ( temp 3-component vector of float)
-0:471 'r04' ( temp 3-component vector of float)
-0:471 vector-scale ( temp 3-component vector of float)
-0:471 'inFV3' ( in 3-component vector of float)
-0:471 'inF0' ( in float)
+0:471 move second child to first child ( temp float)
+0:471 'r05' ( temp float)
+0:471 dot-product ( temp float)
+0:471 'inFV2' ( in 2-component vector of float)
+0:471 'inFV2' ( in 2-component vector of float)
0:472 Sequence
0:472 move second child to first child ( temp float)
-0:472 'r05' ( temp float)
+0:472 'r06' ( temp float)
0:472 dot-product ( temp float)
-0:472 'inFV2' ( in 2-component vector of float)
-0:472 'inFV2' ( in 2-component vector of float)
+0:472 'inFV3' ( in 3-component vector of float)
+0:472 'inFV3' ( in 3-component vector of float)
0:473 Sequence
-0:473 move second child to first child ( temp float)
-0:473 'r06' ( temp float)
-0:473 dot-product ( temp float)
-0:473 'inFV3' ( in 3-component vector of float)
-0:473 'inFV3' ( in 3-component vector of float)
+0:473 move second child to first child ( temp 3-component vector of float)
+0:473 'r07' ( temp 3-component vector of float)
+0:473 matrix-times-vector ( temp 3-component vector of float)
+0:473 'inFM2x3' ( in 2X3 matrix of float)
+0:473 'inFV2' ( in 2-component vector of float)
0:474 Sequence
-0:474 move second child to first child ( temp 3-component vector of float)
-0:474 'r07' ( temp 3-component vector of float)
-0:474 matrix-times-vector ( temp 3-component vector of float)
-0:474 'inFM2x3' ( in 2X3 matrix of float)
-0:474 'inFV2' ( in 2-component vector of float)
+0:474 move second child to first child ( temp 2-component vector of float)
+0:474 'r08' ( temp 2-component vector of float)
+0:474 matrix-times-vector ( temp 2-component vector of float)
+0:474 'inFM3x2' ( in 3X2 matrix of float)
+0:474 'inFV3' ( in 3-component vector of float)
0:475 Sequence
0:475 move second child to first child ( temp 2-component vector of float)
-0:475 'r08' ( temp 2-component vector of float)
-0:475 matrix-times-vector ( temp 2-component vector of float)
-0:475 'inFM3x2' ( in 3X2 matrix of float)
+0:475 'r09' ( temp 2-component vector of float)
+0:475 vector-times-matrix ( temp 2-component vector of float)
0:475 'inFV3' ( in 3-component vector of float)
+0:475 'inFM2x3' ( in 2X3 matrix of float)
0:476 Sequence
-0:476 move second child to first child ( temp 2-component vector of float)
-0:476 'r09' ( temp 2-component vector of float)
-0:476 vector-times-matrix ( temp 2-component vector of float)
-0:476 'inFV3' ( in 3-component vector of float)
-0:476 'inFM2x3' ( in 2X3 matrix of float)
+0:476 move second child to first child ( temp 3-component vector of float)
+0:476 'r10' ( temp 3-component vector of float)
+0:476 vector-times-matrix ( temp 3-component vector of float)
+0:476 'inFV2' ( in 2-component vector of float)
+0:476 'inFM3x2' ( in 3X2 matrix of float)
0:477 Sequence
-0:477 move second child to first child ( temp 3-component vector of float)
-0:477 'r10' ( temp 3-component vector of float)
-0:477 vector-times-matrix ( temp 3-component vector of float)
-0:477 'inFV2' ( in 2-component vector of float)
-0:477 'inFM3x2' ( in 3X2 matrix of float)
+0:477 move second child to first child ( temp 2X3 matrix of float)
+0:477 'r11' ( temp 2X3 matrix of float)
+0:477 matrix-scale ( temp 2X3 matrix of float)
+0:477 'inF0' ( in float)
+0:477 'inFM2x3' ( in 2X3 matrix of float)
0:478 Sequence
-0:478 move second child to first child ( temp 2X3 matrix of float)
-0:478 'r11' ( temp 2X3 matrix of float)
-0:478 matrix-scale ( temp 2X3 matrix of float)
+0:478 move second child to first child ( temp 3X2 matrix of float)
+0:478 'r12' ( temp 3X2 matrix of float)
+0:478 matrix-scale ( temp 3X2 matrix of float)
0:478 'inF0' ( in float)
-0:478 'inFM2x3' ( in 2X3 matrix of float)
+0:478 'inFM3x2' ( in 3X2 matrix of float)
0:479 Sequence
-0:479 move second child to first child ( temp 3X2 matrix of float)
-0:479 'r12' ( temp 3X2 matrix of float)
-0:479 matrix-scale ( temp 3X2 matrix of float)
-0:479 'inF0' ( in float)
+0:479 move second child to first child ( temp 2X2 matrix of float)
+0:479 'r13' ( temp 2X2 matrix of float)
+0:479 matrix-multiply ( temp 2X2 matrix of float)
0:479 'inFM3x2' ( in 3X2 matrix of float)
+0:479 'inFM2x3' ( in 2X3 matrix of float)
0:480 Sequence
-0:480 move second child to first child ( temp 2X2 matrix of float)
-0:480 'r13' ( temp 2X2 matrix of float)
-0:480 matrix-multiply ( temp 2X2 matrix of float)
-0:480 'inFM3x2' ( in 3X2 matrix of float)
+0:480 move second child to first child ( temp 2X3 matrix of float)
+0:480 'r14' ( temp 2X3 matrix of float)
+0:480 matrix-multiply ( temp 2X3 matrix of float)
+0:480 'inFM3x3' ( in 3X3 matrix of float)
0:480 'inFM2x3' ( in 2X3 matrix of float)
0:481 Sequence
-0:481 move second child to first child ( temp 2X3 matrix of float)
-0:481 'r14' ( temp 2X3 matrix of float)
-0:481 matrix-multiply ( temp 2X3 matrix of float)
-0:481 'inFM3x3' ( in 3X3 matrix of float)
+0:481 move second child to first child ( temp 2X4 matrix of float)
+0:481 'r15' ( temp 2X4 matrix of float)
+0:481 matrix-multiply ( temp 2X4 matrix of float)
+0:481 'inFM3x4' ( in 3X4 matrix of float)
0:481 'inFM2x3' ( in 2X3 matrix of float)
0:482 Sequence
-0:482 move second child to first child ( temp 2X4 matrix of float)
-0:482 'r15' ( temp 2X4 matrix of float)
-0:482 matrix-multiply ( temp 2X4 matrix of float)
-0:482 'inFM3x4' ( in 3X4 matrix of float)
-0:482 'inFM2x3' ( in 2X3 matrix of float)
-0:483 Sequence
-0:483 move second child to first child ( temp 3X4 matrix of float)
-0:483 'r16' ( temp 3X4 matrix of float)
-0:483 matrix-multiply ( temp 3X4 matrix of float)
-0:483 'inFM2x4' ( in 2X4 matrix of float)
-0:483 'inFM3x2' ( in 3X2 matrix of float)
-0:489 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:489 Function Parameters:
+0:482 move second child to first child ( temp 3X4 matrix of float)
+0:482 'r16' ( temp 3X4 matrix of float)
+0:482 matrix-multiply ( temp 3X4 matrix of float)
+0:482 'inFM2x4' ( in 2X4 matrix of float)
+0:482 'inFM3x2' ( in 3X2 matrix of float)
+0:488 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:488 Function Parameters:
0:? Sequence
-0:491 move second child to first child ( temp 4-component vector of float)
-0:491 color: direct index for structure ( temp 4-component vector of float)
-0:491 'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:491 Constant:
-0:491 0 (const int)
-0:491 Constant:
-0:491 1.000000
-0:491 1.000000
-0:491 1.000000
-0:491 1.000000
-0:492 Branch: Return with expression
-0:492 'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:489 Function Definition: main( ( temp void)
-0:489 Function Parameters:
+0:490 move second child to first child ( temp 4-component vector of float)
+0:490 color: direct index for structure ( temp 4-component vector of float)
+0:490 'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:490 Constant:
+0:490 0 (const int)
+0:490 Constant:
+0:490 1.000000
+0:490 1.000000
+0:490 1.000000
+0:490 1.000000
+0:491 Branch: Return with expression
+0:491 'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:488 Function Definition: main( ( temp void)
+0:488 Function Parameters:
0:? Sequence
-0:489 Sequence
-0:489 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
-0:489 color: direct index for structure ( temp 4-component vector of float)
-0:489 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:489 Constant:
-0:489 0 (const int)
+0:488 Sequence
+0:488 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+0:488 color: direct index for structure ( temp 4-component vector of float)
+0:488 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:488 Constant:
+0:488 0 (const int)
0:? Linker Objects
0:? 'gs_ua' ( shared uint)
0:? 'gs_ub' ( shared uint)
@@ -5603,18 +5629,19 @@ gl_FragCoord origin is upper left
0:? 'gs_ua4' ( shared 4-component vector of uint)
0:? 'gs_ub4' ( shared 4-component vector of uint)
0:? 'gs_uc4' ( shared 4-component vector of uint)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 1833
+// Generated by (magic number): 80002
+// Id's are bound by 1832
Capability Shader
Capability DerivativeControl
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 1814
+ EntryPoint Fragment 4 "main" 1813
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 16 "PixelShaderFunctionS(f1;f1;f1;u1;u1;"
Name 11 "inF0"
@@ -5691,376 +5718,362 @@ gl_FragCoord origin is upper left
MemberName 131(PS_OUTPUT) 0 "color"
Name 133 "@main("
Name 137 "r000"
- Name 140 "r001"
- Name 143 "r002"
- Name 146 "r003"
- Name 149 "r004"
- Name 154 "r005"
- Name 157 "r006"
- Name 160 "r007"
- Name 163 "r009"
- Name 166 "r010"
- Name 170 "r011"
- Name 173 "r012"
- Name 184 "r014"
- Name 187 "r015"
- Name 190 "r016"
- Name 193 "r017"
- Name 196 "r018"
- Name 199 "r019"
- Name 202 "r020"
- Name 205 "r021"
- Name 208 "r022"
- Name 211 "r023"
- Name 214 "r027"
- Name 217 "r028"
- Name 220 "r029"
- Name 223 "r030"
- Name 226 "r031"
- Name 229 "r033"
- Name 233 "r034"
- Name 236 "r035"
- Name 238 "ResType"
- Name 242 "r036"
- Name 245 "r037"
- Name 248 "r038"
- Name 251 "r039"
- Name 255 "r039a"
- Name 260 "r040"
- Name 263 "r041"
- Name 268 "r042"
- Name 271 "r043"
- Name 275 "r044"
- Name 279 "r045"
- Name 283 "r046"
- Name 286 "r047"
- Name 290 "r048"
- Name 294 "r049"
- Name 297 "r050"
- Name 300 "r051"
- Name 303 "r052"
- Name 306 "r053"
- Name 313 "r055"
- Name 316 "r056"
- Name 321 "r057"
- Name 324 "r058"
- Name 328 "r059"
- Name 331 "r060"
- Name 334 "r061"
- Name 341 "r000"
- Name 344 "r001"
- Name 347 "r002"
- Name 350 "r003"
- Name 353 "r004"
- Name 358 "r005"
- Name 361 "r006"
- Name 364 "r007"
- Name 367 "r009"
- Name 370 "r010"
- Name 374 "r011"
- Name 377 "r012"
- Name 390 "r013"
- Name 393 "r015"
- Name 396 "r016"
- Name 400 "r017"
- Name 403 "r018"
- Name 406 "r019"
- Name 409 "r020"
- Name 412 "r021"
- Name 415 "r022"
- Name 418 "r023"
- Name 421 "r026"
- Name 425 "r027"
- Name 429 "r028"
- Name 432 "r029"
- Name 435 "r030"
- Name 440 "r031"
- Name 445 "r032"
- Name 447 "r033"
- Name 450 "r035"
- Name 454 "r036"
- Name 457 "r037"
- Name 459 "ResType"
- Name 463 "r038"
- Name 467 "r039"
- Name 470 "r040"
- Name 473 "r041"
- Name 477 "r039a"
- Name 482 "r042"
- Name 485 "r043"
- Name 488 "r044"
- Name 492 "r045"
- Name 495 "r046"
- Name 499 "r047"
- Name 503 "r048"
- Name 506 "r049"
- Name 510 "r050"
- Name 513 "r051"
- Name 517 "r052"
- Name 521 "r053"
- Name 526 "r054"
- Name 531 "r055"
- Name 534 "r056"
- Name 537 "r057"
- Name 542 "r058"
- Name 545 "r059"
- Name 552 "r060"
- Name 555 "r061"
- Name 560 "r062"
- Name 563 "r063"
- Name 567 "r064"
- Name 570 "r065"
- Name 573 "r066"
- Name 579 "r000"
- Name 582 "r001"
- Name 585 "r002"
- Name 588 "r003"
- Name 591 "r004"
- Name 596 "r005"
- Name 599 "r006"
- Name 602 "r007"
- Name 605 "r009"
- Name 608 "r010"
- Name 612 "r011"
- Name 615 "r012"
- Name 628 "r013"
- Name 631 "r014"
- Name 634 "r015"
- Name 639 "r016"
- Name 643 "r017"
- Name 646 "r018"
- Name 649 "r019"
- Name 652 "r020"
- Name 655 "r021"
- Name 658 "r022"
- Name 661 "r023"
- Name 664 "r024"
- Name 668 "r025"
- Name 672 "r029"
- Name 675 "r030"
- Name 678 "r031"
- Name 683 "r032"
- Name 687 "r033"
- Name 689 "r034"
- Name 692 "r036"
- Name 696 "r037"
- Name 699 "r038"
- Name 701 "ResType"
- Name 705 "r039"
- Name 709 "r040"
- Name 712 "r041"
- Name 715 "r042"
- Name 719 "r039a"
- Name 724 "r039b"
- Name 730 "r043"
- Name 733 "r044"
- Name 736 "r045"
- Name 740 "r046"
- Name 743 "r047"
- Name 747 "r048"
- Name 751 "r049"
- Name 754 "r050"
- Name 758 "r051"
- Name 761 "r052"
- Name 765 "r053"
- Name 769 "r054"
- Name 773 "r055"
- Name 776 "r056"
- Name 779 "r057"
- Name 782 "r058"
- Name 787 "r059"
- Name 790 "r060"
- Name 797 "r061"
- Name 800 "r062"
- Name 805 "r063"
- Name 808 "r064"
- Name 812 "r065"
- Name 815 "r066"
- Name 818 "r067"
- Name 825 "r000"
- Name 828 "r001"
- Name 831 "r002"
- Name 834 "r003"
- Name 837 "r004"
- Name 842 "r005"
- Name 845 "r006"
- Name 848 "r007"
- Name 851 "r009"
- Name 854 "r010"
- Name 858 "r011"
- Name 861 "r012"
- Name 874 "r013"
- Name 877 "r014"
- Name 880 "r015"
- Name 883 "r016"
- Name 886 "r017"
- Name 889 "r018"
- Name 892 "r019"
- Name 895 "r020"
- Name 898 "r021"
- Name 901 "r022"
- Name 904 "r023"
- Name 908 "r024"
- Name 912 "r025"
- Name 923 "r029"
- Name 926 "r030"
- Name 929 "r031"
- Name 934 "r032"
- Name 939 "r033"
- Name 941 "r034"
- Name 944 "r036"
- Name 948 "r037"
- Name 951 "r038"
- Name 953 "ResType"
- Name 957 "r039"
- Name 961 "r040"
- Name 964 "r041"
- Name 967 "r042"
- Name 971 "r039a"
- Name 976 "r043"
- Name 979 "r044"
- Name 982 "r045"
- Name 986 "r046"
- Name 989 "r047"
- Name 993 "r048"
- Name 997 "r049"
- Name 1000 "r050"
- Name 1004 "r051"
- Name 1007 "r052"
- Name 1011 "r053"
- Name 1015 "r054"
- Name 1019 "r055"
- Name 1022 "r056"
- Name 1025 "r057"
- Name 1028 "r058"
- Name 1033 "r059"
- Name 1036 "r060"
- Name 1043 "r061"
- Name 1046 "r062"
- Name 1051 "r063"
- Name 1054 "r064"
- Name 1058 "r065"
- Name 1061 "r066"
- Name 1064 "r067"
- Name 1071 "r000"
- Name 1074 "r001"
- Name 1079 "r003"
- Name 1082 "r004"
- Name 1085 "r005"
- Name 1088 "r006"
- Name 1092 "r007"
- Name 1103 "r008"
- Name 1108 "r009"
- Name 1111 "r010"
- Name 1114 "r011"
- Name 1117 "r012"
- Name 1120 "r013"
- Name 1123 "r014"
- Name 1126 "r015"
- Name 1129 "r016"
- Name 1132 "r017"
- Name 1135 "r018"
- Name 1138 "r019"
- Name 1141 "R020"
- Name 1144 "r021"
- Name 1147 "r022"
- Name 1157 "r023"
- Name 1160 "r024"
- Name 1162 "ResType"
- Name 1166 "r025"
- Name 1169 "r026"
- Name 1173 "r026a"
- Name 1178 "r027"
- Name 1181 "r028"
- Name 1185 "r029"
- Name 1188 "r030"
- Name 1192 "r031"
- Name 1196 "r032"
- Name 1200 "r033"
- Name 1203 "r034"
- Name 1206 "r035"
- Name 1209 "r036"
- Name 1214 "r037"
- Name 1217 "r038"
- Name 1224 "r039"
- Name 1227 "r049"
- Name 1232 "r041"
- Name 1235 "r042"
- Name 1239 "r043"
- Name 1242 "r044"
- Name 1247 "r046"
- Name 1254 "r000"
- Name 1257 "r001"
- Name 1262 "r003"
- Name 1265 "r004"
- Name 1268 "r005"
- Name 1271 "r006"
- Name 1275 "r007"
- Name 1286 "r008"
- Name 1291 "r009"
- Name 1294 "r010"
- Name 1297 "r011"
- Name 1300 "r012"
- Name 1303 "r013"
- Name 1306 "r014"
- Name 1309 "r015"
- Name 1312 "r016"
- Name 1315 "r017"
- Name 1318 "r018"
- Name 1321 "r019"
- Name 1324 "R020"
- Name 1327 "r021"
- Name 1330 "r022"
- Name 1343 "r023"
- Name 1346 "r024"
- Name 1348 "ResType"
- Name 1352 "r025"
- Name 1355 "r026"
- Name 1359 "r026a"
- Name 1364 "r027"
- Name 1367 "r028"
- Name 1371 "r029"
- Name 1374 "r030"
- Name 1378 "r031"
- Name 1382 "r032"
- Name 1386 "r033"
- Name 1389 "r034"
- Name 1392 "r035"
- Name 1395 "r036"
- Name 1400 "r037"
- Name 1403 "r038"
- Name 1410 "r039"
- Name 1413 "r049"
- Name 1418 "r041"
- Name 1421 "r042"
- Name 1425 "r043"
- Name 1428 "r044"
- Name 1433 "r046"
- Name 1440 "r000"
- Name 1443 "r001"
- Name 1448 "r003"
- Name 1451 "r004"
- Name 1454 "r005"
- Name 1457 "r006"
- Name 1461 "r007"
- Name 1472 "r008"
- Name 1477 "r009"
- Name 1480 "r010"
- Name 1483 "r011"
- Name 1486 "r012"
- Name 1489 "r013"
- Name 1492 "r014"
- Name 1495 "r015"
- Name 1498 "r016"
- Name 1501 "r017"
- Name 1504 "r018"
- Name 1507 "r019"
- Name 1510 "R020"
- Name 1513 "r021"
- Name 1516 "r022"
- Name 1532 "r023"
- Name 1535 "r024"
- Name 1537 "ResType"
+ Name 142 "r001"
+ Name 145 "r002"
+ Name 148 "r003"
+ Name 152 "r004"
+ Name 157 "r005"
+ Name 160 "r006"
+ Name 163 "r007"
+ Name 166 "r009"
+ Name 169 "r010"
+ Name 173 "r011"
+ Name 176 "r012"
+ Name 192 "r014"
+ Name 195 "r015"
+ Name 198 "r016"
+ Name 201 "r017"
+ Name 204 "r018"
+ Name 207 "r019"
+ Name 210 "r020"
+ Name 213 "r021"
+ Name 216 "r022"
+ Name 219 "r023"
+ Name 222 "r027"
+ Name 225 "r028"
+ Name 228 "r029"
+ Name 231 "r030"
+ Name 234 "r031"
+ Name 237 "r033"
+ Name 241 "r034"
+ Name 244 "r036"
+ Name 247 "r037"
+ Name 250 "r038"
+ Name 253 "r039"
+ Name 257 "r039a"
+ Name 262 "r040"
+ Name 265 "r041"
+ Name 270 "r042"
+ Name 273 "r043"
+ Name 277 "r044"
+ Name 281 "r045"
+ Name 285 "r046"
+ Name 288 "r047"
+ Name 292 "r048"
+ Name 296 "r049"
+ Name 299 "r050"
+ Name 302 "r051"
+ Name 305 "r052"
+ Name 308 "r053"
+ Name 315 "r055"
+ Name 318 "r056"
+ Name 323 "r057"
+ Name 326 "r058"
+ Name 330 "r059"
+ Name 333 "r060"
+ Name 336 "r061"
+ Name 343 "r000"
+ Name 349 "r001"
+ Name 352 "r002"
+ Name 355 "r003"
+ Name 359 "r004"
+ Name 364 "r005"
+ Name 367 "r006"
+ Name 370 "r007"
+ Name 373 "r009"
+ Name 376 "r010"
+ Name 380 "r011"
+ Name 383 "r012"
+ Name 402 "r013"
+ Name 405 "r015"
+ Name 408 "r016"
+ Name 412 "r017"
+ Name 415 "r018"
+ Name 418 "r019"
+ Name 421 "r020"
+ Name 424 "r021"
+ Name 427 "r022"
+ Name 430 "r023"
+ Name 433 "r026"
+ Name 437 "r027"
+ Name 441 "r028"
+ Name 444 "r029"
+ Name 447 "r030"
+ Name 452 "r031"
+ Name 457 "r032"
+ Name 459 "r033"
+ Name 462 "r035"
+ Name 466 "r036"
+ Name 469 "r038"
+ Name 473 "r039"
+ Name 476 "r040"
+ Name 479 "r041"
+ Name 483 "r039a"
+ Name 488 "r042"
+ Name 491 "r043"
+ Name 494 "r044"
+ Name 498 "r045"
+ Name 501 "r046"
+ Name 505 "r047"
+ Name 509 "r048"
+ Name 512 "r049"
+ Name 516 "r050"
+ Name 519 "r051"
+ Name 523 "r052"
+ Name 527 "r053"
+ Name 532 "r054"
+ Name 537 "r055"
+ Name 540 "r056"
+ Name 543 "r057"
+ Name 548 "r058"
+ Name 551 "r059"
+ Name 558 "r060"
+ Name 561 "r061"
+ Name 566 "r062"
+ Name 569 "r063"
+ Name 573 "r064"
+ Name 576 "r065"
+ Name 579 "r066"
+ Name 585 "r000"
+ Name 591 "r001"
+ Name 594 "r002"
+ Name 597 "r003"
+ Name 601 "r004"
+ Name 606 "r005"
+ Name 609 "r006"
+ Name 612 "r007"
+ Name 615 "r009"
+ Name 618 "r010"
+ Name 622 "r011"
+ Name 625 "r012"
+ Name 643 "r013"
+ Name 646 "r014"
+ Name 649 "r015"
+ Name 654 "r016"
+ Name 658 "r017"
+ Name 661 "r018"
+ Name 664 "r019"
+ Name 667 "r020"
+ Name 670 "r021"
+ Name 673 "r022"
+ Name 676 "r023"
+ Name 679 "r024"
+ Name 683 "r025"
+ Name 687 "r029"
+ Name 690 "r030"
+ Name 693 "r031"
+ Name 698 "r032"
+ Name 702 "r033"
+ Name 704 "r034"
+ Name 707 "r036"
+ Name 711 "r037"
+ Name 714 "r039"
+ Name 718 "r040"
+ Name 721 "r041"
+ Name 724 "r042"
+ Name 728 "r039a"
+ Name 733 "r039b"
+ Name 739 "r043"
+ Name 742 "r044"
+ Name 745 "r045"
+ Name 749 "r046"
+ Name 752 "r047"
+ Name 756 "r048"
+ Name 760 "r049"
+ Name 763 "r050"
+ Name 767 "r051"
+ Name 770 "r052"
+ Name 774 "r053"
+ Name 778 "r054"
+ Name 782 "r055"
+ Name 785 "r056"
+ Name 788 "r057"
+ Name 791 "r058"
+ Name 796 "r059"
+ Name 799 "r060"
+ Name 806 "r061"
+ Name 809 "r062"
+ Name 814 "r063"
+ Name 817 "r064"
+ Name 821 "r065"
+ Name 824 "r066"
+ Name 827 "r067"
+ Name 834 "r000"
+ Name 840 "r001"
+ Name 843 "r002"
+ Name 846 "r003"
+ Name 850 "r004"
+ Name 855 "r005"
+ Name 858 "r006"
+ Name 861 "r007"
+ Name 864 "r009"
+ Name 867 "r010"
+ Name 871 "r011"
+ Name 874 "r012"
+ Name 892 "r013"
+ Name 895 "r014"
+ Name 898 "r015"
+ Name 901 "r016"
+ Name 904 "r017"
+ Name 907 "r018"
+ Name 910 "r019"
+ Name 913 "r020"
+ Name 916 "r021"
+ Name 919 "r022"
+ Name 922 "r023"
+ Name 926 "r024"
+ Name 930 "r025"
+ Name 941 "r029"
+ Name 944 "r030"
+ Name 947 "r031"
+ Name 952 "r032"
+ Name 957 "r033"
+ Name 959 "r034"
+ Name 962 "r036"
+ Name 966 "r037"
+ Name 969 "r039"
+ Name 973 "r040"
+ Name 976 "r041"
+ Name 979 "r042"
+ Name 983 "r039a"
+ Name 988 "r043"
+ Name 991 "r044"
+ Name 994 "r045"
+ Name 998 "r046"
+ Name 1001 "r047"
+ Name 1005 "r048"
+ Name 1009 "r049"
+ Name 1012 "r050"
+ Name 1016 "r051"
+ Name 1019 "r052"
+ Name 1023 "r053"
+ Name 1027 "r054"
+ Name 1031 "r055"
+ Name 1034 "r056"
+ Name 1037 "r057"
+ Name 1040 "r058"
+ Name 1045 "r059"
+ Name 1048 "r060"
+ Name 1055 "r061"
+ Name 1058 "r062"
+ Name 1063 "r063"
+ Name 1066 "r064"
+ Name 1070 "r065"
+ Name 1073 "r066"
+ Name 1076 "r067"
+ Name 1083 "r000"
+ Name 1088 "r001"
+ Name 1093 "r003"
+ Name 1097 "r004"
+ Name 1100 "r005"
+ Name 1103 "r006"
+ Name 1107 "r007"
+ Name 1117 "r008"
+ Name 1122 "r009"
+ Name 1125 "r010"
+ Name 1128 "r011"
+ Name 1131 "r012"
+ Name 1134 "r013"
+ Name 1137 "r014"
+ Name 1140 "r015"
+ Name 1143 "r016"
+ Name 1146 "r017"
+ Name 1149 "r018"
+ Name 1152 "r019"
+ Name 1155 "R020"
+ Name 1158 "r021"
+ Name 1161 "r022"
+ Name 1171 "r023"
+ Name 1174 "r025"
+ Name 1177 "r026"
+ Name 1181 "r026a"
+ Name 1186 "r027"
+ Name 1189 "r028"
+ Name 1193 "r029"
+ Name 1196 "r030"
+ Name 1200 "r031"
+ Name 1204 "r032"
+ Name 1208 "r033"
+ Name 1211 "r034"
+ Name 1214 "r035"
+ Name 1217 "r036"
+ Name 1222 "r037"
+ Name 1225 "r038"
+ Name 1232 "r039"
+ Name 1235 "r049"
+ Name 1240 "r041"
+ Name 1243 "r042"
+ Name 1247 "r043"
+ Name 1250 "r044"
+ Name 1255 "r046"
+ Name 1262 "r000"
+ Name 1267 "r001"
+ Name 1272 "r003"
+ Name 1276 "r004"
+ Name 1279 "r005"
+ Name 1282 "r006"
+ Name 1286 "r007"
+ Name 1296 "r008"
+ Name 1301 "r009"
+ Name 1304 "r010"
+ Name 1307 "r011"
+ Name 1310 "r012"
+ Name 1313 "r013"
+ Name 1316 "r014"
+ Name 1319 "r015"
+ Name 1322 "r016"
+ Name 1325 "r017"
+ Name 1328 "r018"
+ Name 1331 "r019"
+ Name 1334 "R020"
+ Name 1337 "r021"
+ Name 1340 "r022"
+ Name 1353 "r023"
+ Name 1356 "r025"
+ Name 1359 "r026"
+ Name 1363 "r026a"
+ Name 1368 "r027"
+ Name 1371 "r028"
+ Name 1375 "r029"
+ Name 1378 "r030"
+ Name 1382 "r031"
+ Name 1386 "r032"
+ Name 1390 "r033"
+ Name 1393 "r034"
+ Name 1396 "r035"
+ Name 1399 "r036"
+ Name 1404 "r037"
+ Name 1407 "r038"
+ Name 1414 "r039"
+ Name 1417 "r049"
+ Name 1422 "r041"
+ Name 1425 "r042"
+ Name 1429 "r043"
+ Name 1432 "r044"
+ Name 1437 "r046"
+ Name 1444 "r000"
+ Name 1449 "r001"
+ Name 1454 "r003"
+ Name 1458 "r004"
+ Name 1461 "r005"
+ Name 1464 "r006"
+ Name 1468 "r007"
+ Name 1478 "r008"
+ Name 1483 "r009"
+ Name 1486 "r010"
+ Name 1489 "r011"
+ Name 1492 "r012"
+ Name 1495 "r013"
+ Name 1498 "r014"
+ Name 1501 "r015"
+ Name 1504 "r016"
+ Name 1507 "r017"
+ Name 1510 "r018"
+ Name 1513 "r019"
+ Name 1516 "R020"
+ Name 1519 "r021"
+ Name 1522 "r022"
+ Name 1538 "r023"
Name 1541 "r025"
Name 1544 "r026"
Name 1548 "r026a"
@@ -6128,20 +6141,20 @@ gl_FragCoord origin is upper left
Name 1797 "r15"
Name 1801 "r16"
Name 1806 "ps_output"
- Name 1814 "color"
- Name 1818 "gs_ua"
- Name 1819 "gs_ub"
- Name 1820 "gs_uc"
- Name 1822 "gs_ua2"
- Name 1823 "gs_ub2"
- Name 1824 "gs_uc2"
- Name 1826 "gs_ua3"
- Name 1827 "gs_ub3"
- Name 1828 "gs_uc3"
- Name 1830 "gs_ua4"
- Name 1831 "gs_ub4"
- Name 1832 "gs_uc4"
- Decorate 1814(color) Location 0
+ Name 1813 "@entryPointOutput.color"
+ Name 1817 "gs_ua"
+ Name 1818 "gs_ub"
+ Name 1819 "gs_uc"
+ Name 1821 "gs_ua2"
+ Name 1822 "gs_ub2"
+ Name 1823 "gs_uc2"
+ Name 1825 "gs_ua3"
+ Name 1826 "gs_ub3"
+ Name 1827 "gs_uc3"
+ Name 1829 "gs_ua4"
+ Name 1830 "gs_ub4"
+ Name 1831 "gs_uc4"
+ Decorate 1813(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -6190,99 +6203,96 @@ gl_FragCoord origin is upper left
132: TypeFunction 131(PS_OUTPUT)
135: TypeBool
136: TypePointer Function 135(bool)
- 152: TypeInt 32 1
- 153: TypePointer Function 152(int)
- 179: 6(float) Constant 0
- 191: 152(int) Constant 7
- 238(ResType): TypeStruct 6(float) 152(int)
- 266: 6(float) Constant 1050288283
- 287: 6(float) Constant 1065353216
- 291: 152(int) Constant 2
- 356: TypeVector 152(int) 2
- 357: TypePointer Function 356(ivec2)
- 383: 24(fvec2) ConstantComposite 179 179
- 384: TypeVector 135(bool) 2
- 397: 152(int) Constant 3
- 398: 356(ivec2) ConstantComposite 191 397
- 441: 8(int) Constant 7
- 442: 8(int) Constant 8
- 443: 26(ivec2) ConstantComposite 441 442
- 459(ResType): TypeStruct 24(fvec2) 356(ivec2)
- 466: TypePointer Function 384(bvec2)
- 524: 6(float) Constant 1073741824
- 527: 8(int) Constant 1
- 528: 8(int) Constant 2
- 529: 26(ivec2) ConstantComposite 527 528
- 576: 24(fvec2) ConstantComposite 287 524
- 594: TypeVector 152(int) 3
- 595: TypePointer Function 594(ivec3)
- 621: 36(fvec3) ConstantComposite 179 179 179
- 622: TypeVector 135(bool) 3
- 635: 8(int) Constant 3
- 636: 8(int) Constant 5
- 637: 38(ivec3) ConstantComposite 441 635 636
- 684: 8(int) Constant 4
- 685: 38(ivec3) ConstantComposite 528 635 684
- 701(ResType): TypeStruct 36(fvec3) 594(ivec3)
- 708: TypePointer Function 622(bvec3)
- 727: 6(float) Constant 1050253722
- 774: 38(ivec3) ConstantComposite 527 528 635
- 821: 6(float) Constant 1077936128
- 822: 36(fvec3) ConstantComposite 287 524 821
- 840: TypeVector 152(int) 4
- 841: TypePointer Function 840(ivec4)
- 867: 48(fvec4) ConstantComposite 179 179 179 179
- 868: TypeVector 135(bool) 4
- 881: 50(ivec4) ConstantComposite 441 635 636 528
- 935: 8(int) Constant 9
- 936: 8(int) Constant 10
- 937: 50(ivec4) ConstantComposite 441 442 935 936
- 953(ResType): TypeStruct 48(fvec4) 840(ivec4)
- 960: TypePointer Function 868(bvec4)
- 1020: 50(ivec4) ConstantComposite 527 528 635 684
- 1067: 6(float) Constant 1082130432
- 1068: 48(fvec4) ConstantComposite 287 524 821 1067
- 1096: 60 ConstantComposite 383 383
- 1097: TypeMatrix 384(bvec2) 2
- 1162(ResType): TypeStruct 60 356(ivec2)
- 1250: 24(fvec2) ConstantComposite 524 524
- 1251: 60 ConstantComposite 1250 1250
- 1279: 68 ConstantComposite 621 621 621
- 1280: TypeMatrix 622(bvec3) 3
- 1348(ResType): TypeStruct 68 594(ivec3)
- 1436: 36(fvec3) ConstantComposite 821 821 821
- 1437: 68 ConstantComposite 1436 1436 1436
- 1465: 76 ConstantComposite 867 867 867 867
- 1466: TypeMatrix 868(bvec4) 4
- 1537(ResType): TypeStruct 76 840(ivec4)
- 1625: 48(fvec4) ConstantComposite 1067 1067 1067 1067
+ 139: 6(float) Constant 0
+ 155: TypeInt 32 1
+ 156: TypePointer Function 155(int)
+ 187: 155(int) Constant 0
+ 199: 155(int) Constant 7
+ 268: 6(float) Constant 1050288283
+ 289: 6(float) Constant 1065353216
+ 293: 155(int) Constant 2
+ 345: TypeVector 135(bool) 2
+ 346: 24(fvec2) ConstantComposite 139 139
+ 362: TypeVector 155(int) 2
+ 363: TypePointer Function 362(ivec2)
+ 395: 8(int) Constant 0
+ 396: 26(ivec2) ConstantComposite 395 395
+ 409: 155(int) Constant 3
+ 410: 362(ivec2) ConstantComposite 199 409
+ 453: 8(int) Constant 7
+ 454: 8(int) Constant 8
+ 455: 26(ivec2) ConstantComposite 453 454
+ 472: TypePointer Function 345(bvec2)
+ 530: 6(float) Constant 1073741824
+ 533: 8(int) Constant 1
+ 534: 8(int) Constant 2
+ 535: 26(ivec2) ConstantComposite 533 534
+ 582: 24(fvec2) ConstantComposite 289 530
+ 587: TypeVector 135(bool) 3
+ 588: 36(fvec3) ConstantComposite 139 139 139
+ 604: TypeVector 155(int) 3
+ 605: TypePointer Function 604(ivec3)
+ 637: 38(ivec3) ConstantComposite 395 395 395
+ 650: 8(int) Constant 3
+ 651: 8(int) Constant 5
+ 652: 38(ivec3) ConstantComposite 453 650 651
+ 699: 8(int) Constant 4
+ 700: 38(ivec3) ConstantComposite 534 650 699
+ 717: TypePointer Function 587(bvec3)
+ 736: 6(float) Constant 1050253722
+ 783: 38(ivec3) ConstantComposite 533 534 650
+ 830: 6(float) Constant 1077936128
+ 831: 36(fvec3) ConstantComposite 289 530 830
+ 836: TypeVector 135(bool) 4
+ 837: 48(fvec4) ConstantComposite 139 139 139 139
+ 853: TypeVector 155(int) 4
+ 854: TypePointer Function 853(ivec4)
+ 886: 50(ivec4) ConstantComposite 395 395 395 395
+ 899: 50(ivec4) ConstantComposite 453 650 651 534
+ 953: 8(int) Constant 9
+ 954: 8(int) Constant 10
+ 955: 50(ivec4) ConstantComposite 453 454 953 954
+ 972: TypePointer Function 836(bvec4)
+ 1032: 50(ivec4) ConstantComposite 533 534 650 699
+ 1079: 6(float) Constant 1082130432
+ 1080: 48(fvec4) ConstantComposite 289 530 830 1079
+ 1085: TypeMatrix 345(bvec2) 2
+ 1111: 60 ConstantComposite 346 346
+ 1258: 24(fvec2) ConstantComposite 530 530
+ 1259: 60 ConstantComposite 1258 1258
+ 1264: TypeMatrix 587(bvec3) 3
+ 1290: 68 ConstantComposite 588 588 588
+ 1440: 36(fvec3) ConstantComposite 830 830 830
+ 1441: 68 ConstantComposite 1440 1440 1440
+ 1446: TypeMatrix 836(bvec4) 4
+ 1472: 76 ConstantComposite 837 837 837 837
+ 1625: 48(fvec4) ConstantComposite 1079 1079 1079 1079
1626: 76 ConstantComposite 1625 1625 1625 1625
1805: TypePointer Function 131(PS_OUTPUT)
- 1807: 152(int) Constant 0
- 1808: 48(fvec4) ConstantComposite 287 287 287 287
- 1813: TypePointer Output 48(fvec4)
- 1814(color): 1813(ptr) Variable Output
- 1817: TypePointer Workgroup 8(int)
- 1818(gs_ua): 1817(ptr) Variable Workgroup
- 1819(gs_ub): 1817(ptr) Variable Workgroup
- 1820(gs_uc): 1817(ptr) Variable Workgroup
- 1821: TypePointer Workgroup 26(ivec2)
- 1822(gs_ua2): 1821(ptr) Variable Workgroup
- 1823(gs_ub2): 1821(ptr) Variable Workgroup
- 1824(gs_uc2): 1821(ptr) Variable Workgroup
- 1825: TypePointer Workgroup 38(ivec3)
- 1826(gs_ua3): 1825(ptr) Variable Workgroup
- 1827(gs_ub3): 1825(ptr) Variable Workgroup
- 1828(gs_uc3): 1825(ptr) Variable Workgroup
- 1829: TypePointer Workgroup 50(ivec4)
- 1830(gs_ua4): 1829(ptr) Variable Workgroup
- 1831(gs_ub4): 1829(ptr) Variable Workgroup
- 1832(gs_uc4): 1829(ptr) Variable Workgroup
+ 1807: 48(fvec4) ConstantComposite 289 289 289 289
+ 1812: TypePointer Output 48(fvec4)
+1813(@entryPointOutput.color): 1812(ptr) Variable Output
+ 1816: TypePointer Workgroup 8(int)
+ 1817(gs_ua): 1816(ptr) Variable Workgroup
+ 1818(gs_ub): 1816(ptr) Variable Workgroup
+ 1819(gs_uc): 1816(ptr) Variable Workgroup
+ 1820: TypePointer Workgroup 26(ivec2)
+ 1821(gs_ua2): 1820(ptr) Variable Workgroup
+ 1822(gs_ub2): 1820(ptr) Variable Workgroup
+ 1823(gs_uc2): 1820(ptr) Variable Workgroup
+ 1824: TypePointer Workgroup 38(ivec3)
+ 1825(gs_ua3): 1824(ptr) Variable Workgroup
+ 1826(gs_ub3): 1824(ptr) Variable Workgroup
+ 1827(gs_uc3): 1824(ptr) Variable Workgroup
+ 1828: TypePointer Workgroup 50(ivec4)
+ 1829(gs_ua4): 1828(ptr) Variable Workgroup
+ 1830(gs_ub4): 1828(ptr) Variable Workgroup
+ 1831(gs_uc4): 1828(ptr) Variable Workgroup
4(main): 2 Function None 3
5: Label
- 1815:131(PS_OUTPUT) FunctionCall 133(@main()
- 1816: 48(fvec4) CompositeExtract 1815 0
- Store 1814(color) 1816
+ 1814:131(PS_OUTPUT) FunctionCall 133(@main()
+ 1815: 48(fvec4) CompositeExtract 1814 0
+ Store 1813(@entryPointOutput.color) 1815
Return
FunctionEnd
16(PixelShaderFunctionS(f1;f1;f1;u1;u1;): 6(float) Function None 10
@@ -6293,266 +6303,268 @@ gl_FragCoord origin is upper left
15(inU1): 9(ptr) FunctionParameter
17: Label
137(r000): 136(ptr) Variable Function
- 140(r001): 7(ptr) Variable Function
- 143(r002): 7(ptr) Variable Function
- 146(r003): 136(ptr) Variable Function
- 149(r004): 7(ptr) Variable Function
- 154(r005): 153(ptr) Variable Function
- 157(r006): 9(ptr) Variable Function
- 160(r007): 7(ptr) Variable Function
- 163(r009): 7(ptr) Variable Function
- 166(r010): 7(ptr) Variable Function
- 170(r011): 7(ptr) Variable Function
- 173(r012): 7(ptr) Variable Function
- 184(r014): 7(ptr) Variable Function
- 187(r015): 7(ptr) Variable Function
- 190(r016): 153(ptr) Variable Function
- 193(r017): 7(ptr) Variable Function
- 196(r018): 7(ptr) Variable Function
- 199(r019): 7(ptr) Variable Function
- 202(r020): 7(ptr) Variable Function
- 205(r021): 7(ptr) Variable Function
- 208(r022): 7(ptr) Variable Function
- 211(r023): 7(ptr) Variable Function
- 214(r027): 7(ptr) Variable Function
- 217(r028): 7(ptr) Variable Function
- 220(r029): 9(ptr) Variable Function
- 223(r030): 9(ptr) Variable Function
- 226(r031): 7(ptr) Variable Function
- 229(r033): 7(ptr) Variable Function
- 233(r034): 7(ptr) Variable Function
- 236(r035): 7(ptr) Variable Function
- 242(r036): 7(ptr) Variable Function
- 245(r037): 136(ptr) Variable Function
- 248(r038): 136(ptr) Variable Function
- 251(r039): 7(ptr) Variable Function
- 255(r039a): 7(ptr) Variable Function
- 260(r040): 7(ptr) Variable Function
- 263(r041): 7(ptr) Variable Function
- 268(r042): 7(ptr) Variable Function
- 271(r043): 7(ptr) Variable Function
- 275(r044): 7(ptr) Variable Function
- 279(r045): 7(ptr) Variable Function
- 283(r046): 7(ptr) Variable Function
- 286(r047): 7(ptr) Variable Function
- 290(r048): 9(ptr) Variable Function
- 294(r049): 7(ptr) Variable Function
- 297(r050): 7(ptr) Variable Function
- 300(r051): 7(ptr) Variable Function
- 303(r052): 7(ptr) Variable Function
- 306(r053): 7(ptr) Variable Function
- 313(r055): 7(ptr) Variable Function
- 316(r056): 7(ptr) Variable Function
- 321(r057): 7(ptr) Variable Function
- 324(r058): 7(ptr) Variable Function
- 328(r059): 7(ptr) Variable Function
- 331(r060): 7(ptr) Variable Function
- 334(r061): 7(ptr) Variable Function
+ 142(r001): 7(ptr) Variable Function
+ 145(r002): 7(ptr) Variable Function
+ 148(r003): 136(ptr) Variable Function
+ 152(r004): 7(ptr) Variable Function
+ 157(r005): 156(ptr) Variable Function
+ 160(r006): 9(ptr) Variable Function
+ 163(r007): 7(ptr) Variable Function
+ 166(r009): 7(ptr) Variable Function
+ 169(r010): 7(ptr) Variable Function
+ 173(r011): 7(ptr) Variable Function
+ 176(r012): 7(ptr) Variable Function
+ 192(r014): 7(ptr) Variable Function
+ 195(r015): 7(ptr) Variable Function
+ 198(r016): 156(ptr) Variable Function
+ 201(r017): 7(ptr) Variable Function
+ 204(r018): 7(ptr) Variable Function
+ 207(r019): 7(ptr) Variable Function
+ 210(r020): 7(ptr) Variable Function
+ 213(r021): 7(ptr) Variable Function
+ 216(r022): 7(ptr) Variable Function
+ 219(r023): 7(ptr) Variable Function
+ 222(r027): 7(ptr) Variable Function
+ 225(r028): 7(ptr) Variable Function
+ 228(r029): 9(ptr) Variable Function
+ 231(r030): 9(ptr) Variable Function
+ 234(r031): 7(ptr) Variable Function
+ 237(r033): 7(ptr) Variable Function
+ 241(r034): 7(ptr) Variable Function
+ 244(r036): 7(ptr) Variable Function
+ 247(r037): 136(ptr) Variable Function
+ 250(r038): 136(ptr) Variable Function
+ 253(r039): 7(ptr) Variable Function
+ 257(r039a): 7(ptr) Variable Function
+ 262(r040): 7(ptr) Variable Function
+ 265(r041): 7(ptr) Variable Function
+ 270(r042): 7(ptr) Variable Function
+ 273(r043): 7(ptr) Variable Function
+ 277(r044): 7(ptr) Variable Function
+ 281(r045): 7(ptr) Variable Function
+ 285(r046): 7(ptr) Variable Function
+ 288(r047): 7(ptr) Variable Function
+ 292(r048): 9(ptr) Variable Function
+ 296(r049): 7(ptr) Variable Function
+ 299(r050): 7(ptr) Variable Function
+ 302(r051): 7(ptr) Variable Function
+ 305(r052): 7(ptr) Variable Function
+ 308(r053): 7(ptr) Variable Function
+ 315(r055): 7(ptr) Variable Function
+ 318(r056): 7(ptr) Variable Function
+ 323(r057): 7(ptr) Variable Function
+ 326(r058): 7(ptr) Variable Function
+ 330(r059): 7(ptr) Variable Function
+ 333(r060): 7(ptr) Variable Function
+ 336(r061): 7(ptr) Variable Function
138: 6(float) Load 11(inF0)
- 139: 135(bool) All 138
- Store 137(r000) 139
- 141: 6(float) Load 11(inF0)
- 142: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 141
- Store 140(r001) 142
- 144: 6(float) Load 11(inF0)
- 145: 6(float) ExtInst 1(GLSL.std.450) 17(Acos) 144
- Store 143(r002) 145
- 147: 6(float) Load 11(inF0)
- 148: 135(bool) Any 147
- Store 146(r003) 148
- 150: 6(float) Load 11(inF0)
- 151: 6(float) ExtInst 1(GLSL.std.450) 16(Asin) 150
- Store 149(r004) 151
- 155: 6(float) Load 11(inF0)
- 156: 152(int) Bitcast 155
- Store 154(r005) 156
+ 140: 135(bool) FOrdNotEqual 138 139
+ 141: 135(bool) All 140
+ Store 137(r000) 141
+ 143: 6(float) Load 11(inF0)
+ 144: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 143
+ Store 142(r001) 144
+ 146: 6(float) Load 11(inF0)
+ 147: 6(float) ExtInst 1(GLSL.std.450) 17(Acos) 146
+ Store 145(r002) 147
+ 149: 6(float) Load 11(inF0)
+ 150: 135(bool) FOrdNotEqual 149 139
+ 151: 135(bool) Any 150
+ Store 148(r003) 151
+ 153: 6(float) Load 11(inF0)
+ 154: 6(float) ExtInst 1(GLSL.std.450) 16(Asin) 153
+ Store 152(r004) 154
158: 6(float) Load 11(inF0)
- 159: 8(int) Bitcast 158
- Store 157(r006) 159
- 161: 8(int) Load 14(inU0)
- 162: 6(float) Bitcast 161
- Store 160(r007) 162
- 164: 6(float) Load 11(inF0)
- 165: 6(float) ExtInst 1(GLSL.std.450) 18(Atan) 164
- Store 163(r009) 165
+ 159: 155(int) Bitcast 158
+ Store 157(r005) 159
+ 161: 6(float) Load 11(inF0)
+ 162: 8(int) Bitcast 161
+ Store 160(r006) 162
+ 164: 8(int) Load 14(inU0)
+ 165: 6(float) Bitcast 164
+ Store 163(r007) 165
167: 6(float) Load 11(inF0)
- 168: 6(float) Load 12(inF1)
- 169: 6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 167 168
- Store 166(r010) 169
- 171: 6(float) Load 11(inF0)
- 172: 6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 171
- Store 170(r011) 172
+ 168: 6(float) ExtInst 1(GLSL.std.450) 18(Atan) 167
+ Store 166(r009) 168
+ 170: 6(float) Load 11(inF0)
+ 171: 6(float) Load 12(inF1)
+ 172: 6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 170 171
+ Store 169(r010) 172
174: 6(float) Load 11(inF0)
- 175: 6(float) Load 12(inF1)
- 176: 6(float) Load 13(inF2)
- 177: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 174 175 176
- Store 173(r012) 177
- 178: 6(float) Load 11(inF0)
- 180: 135(bool) FOrdLessThan 178 179
- SelectionMerge 182 None
- BranchConditional 180 181 182
- 181: Label
+ 175: 6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 174
+ Store 173(r011) 175
+ 177: 6(float) Load 11(inF0)
+ 178: 6(float) Load 12(inF1)
+ 179: 6(float) Load 13(inF2)
+ 180: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 177 178 179
+ Store 176(r012) 180
+ 181: 6(float) Load 11(inF0)
+ 182: 135(bool) FOrdLessThan 181 139
+ SelectionMerge 184 None
+ BranchConditional 182 183 184
+ 183: Label
Kill
- 182: Label
- 185: 6(float) Load 11(inF0)
- 186: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 185
- Store 184(r014) 186
- 188: 6(float) Load 11(inF0)
- 189: 6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 188
- Store 187(r015) 189
- 192: 152(int) BitCount 191
- Store 190(r016) 192
- 194: 6(float) Load 11(inF0)
- 195: 6(float) DPdx 194
- Store 193(r017) 195
- 197: 6(float) Load 11(inF0)
- 198: 6(float) DPdxCoarse 197
- Store 196(r018) 198
- 200: 6(float) Load 11(inF0)
- 201: 6(float) DPdxFine 200
- Store 199(r019) 201
- 203: 6(float) Load 11(inF0)
- 204: 6(float) DPdy 203
- Store 202(r020) 204
- 206: 6(float) Load 11(inF0)
- 207: 6(float) DPdyCoarse 206
- Store 205(r021) 207
- 209: 6(float) Load 11(inF0)
- 210: 6(float) DPdyFine 209
- Store 208(r022) 210
- 212: 6(float) Load 11(inF0)
- 213: 6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 212
- Store 211(r023) 213
- 215: 6(float) Load 11(inF0)
- 216: 6(float) ExtInst 1(GLSL.std.450) 27(Exp) 215
- Store 214(r027) 216
- 218: 6(float) Load 11(inF0)
- 219: 6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 218
- Store 217(r028) 219
- 221: 152(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 191
- 222: 8(int) Bitcast 221
- Store 220(r029) 222
- 224: 152(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 191
- 225: 8(int) Bitcast 224
- Store 223(r030) 225
- 227: 6(float) Load 11(inF0)
- 228: 6(float) ExtInst 1(GLSL.std.450) 8(Floor) 227
- Store 226(r031) 228
- 230: 6(float) Load 11(inF0)
- 231: 6(float) Load 12(inF1)
- 232: 6(float) FMod 230 231
- Store 229(r033) 232
- 234: 6(float) Load 11(inF0)
- 235: 6(float) ExtInst 1(GLSL.std.450) 10(Fract) 234
- Store 233(r034) 235
- 237: 6(float) Load 11(inF0)
- 239:238(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 237
- 240: 152(int) CompositeExtract 239 1
- Store 12(inF1) 240
- 241: 6(float) CompositeExtract 239 0
- Store 236(r035) 241
- 243: 6(float) Load 11(inF0)
- 244: 6(float) Fwidth 243
- Store 242(r036) 244
- 246: 6(float) Load 11(inF0)
- 247: 135(bool) IsInf 246
- Store 245(r037) 247
- 249: 6(float) Load 11(inF0)
- 250: 135(bool) IsNan 249
- Store 248(r038) 250
- 252: 6(float) Load 11(inF0)
- 253: 6(float) Load 12(inF1)
- 254: 6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 252 253
- Store 251(r039) 254
- 256: 6(float) Load 11(inF0)
- 257: 6(float) Load 12(inF1)
- 258: 6(float) Load 13(inF2)
- 259: 6(float) ExtInst 1(GLSL.std.450) 46(FMix) 256 257 258
- Store 255(r039a) 259
- 261: 6(float) Load 11(inF0)
- 262: 6(float) ExtInst 1(GLSL.std.450) 28(Log) 261
- Store 260(r040) 262
- 264: 6(float) Load 11(inF0)
- 265: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 264
- 267: 6(float) FMul 265 266
- Store 263(r041) 267
- 269: 6(float) Load 11(inF0)
- 270: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 269
- Store 268(r042) 270
- 272: 6(float) Load 11(inF0)
- 273: 6(float) Load 12(inF1)
- 274: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 272 273
- Store 271(r043) 274
- 276: 6(float) Load 11(inF0)
- 277: 6(float) Load 12(inF1)
- 278: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 276 277
- Store 275(r044) 278
- 280: 6(float) Load 11(inF0)
- 281: 6(float) Load 12(inF1)
- 282: 6(float) ExtInst 1(GLSL.std.450) 26(Pow) 280 281
- Store 279(r045) 282
- 284: 6(float) Load 11(inF0)
- 285: 6(float) ExtInst 1(GLSL.std.450) 11(Radians) 284
- Store 283(r046) 285
- 288: 6(float) Load 11(inF0)
- 289: 6(float) FDiv 287 288
- Store 286(r047) 289
- 292: 152(int) BitReverse 291
- 293: 8(int) Bitcast 292
- Store 290(r048) 293
- 295: 6(float) Load 11(inF0)
- 296: 6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 295
- Store 294(r049) 296
- 298: 6(float) Load 11(inF0)
- 299: 6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 298
- Store 297(r050) 299
- 301: 6(float) Load 11(inF0)
- 302: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 301 179 287
- Store 300(r051) 302
- 304: 6(float) Load 11(inF0)
- 305: 6(float) ExtInst 1(GLSL.std.450) 6(FSign) 304
- Store 303(r052) 305
- 307: 6(float) Load 11(inF0)
- 308: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 307
- Store 306(r053) 308
+ 184: Label
+ 186: 155(int) Load 157(r005)
+ 188: 135(bool) SLessThan 186 187
+ SelectionMerge 190 None
+ BranchConditional 188 189 190
+ 189: Label
+ Kill
+ 190: Label
+ 193: 6(float) Load 11(inF0)
+ 194: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 193
+ Store 192(r014) 194
+ 196: 6(float) Load 11(inF0)
+ 197: 6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 196
+ Store 195(r015) 197
+ 200: 155(int) BitCount 199
+ Store 198(r016) 200
+ 202: 6(float) Load 11(inF0)
+ 203: 6(float) DPdx 202
+ Store 201(r017) 203
+ 205: 6(float) Load 11(inF0)
+ 206: 6(float) DPdxCoarse 205
+ Store 204(r018) 206
+ 208: 6(float) Load 11(inF0)
+ 209: 6(float) DPdxFine 208
+ Store 207(r019) 209
+ 211: 6(float) Load 11(inF0)
+ 212: 6(float) DPdy 211
+ Store 210(r020) 212
+ 214: 6(float) Load 11(inF0)
+ 215: 6(float) DPdyCoarse 214
+ Store 213(r021) 215
+ 217: 6(float) Load 11(inF0)
+ 218: 6(float) DPdyFine 217
+ Store 216(r022) 218
+ 220: 6(float) Load 11(inF0)
+ 221: 6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 220
+ Store 219(r023) 221
+ 223: 6(float) Load 11(inF0)
+ 224: 6(float) ExtInst 1(GLSL.std.450) 27(Exp) 223
+ Store 222(r027) 224
+ 226: 6(float) Load 11(inF0)
+ 227: 6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 226
+ Store 225(r028) 227
+ 229: 155(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 199
+ 230: 8(int) Bitcast 229
+ Store 228(r029) 230
+ 232: 155(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 199
+ 233: 8(int) Bitcast 232
+ Store 231(r030) 233
+ 235: 6(float) Load 11(inF0)
+ 236: 6(float) ExtInst 1(GLSL.std.450) 8(Floor) 235
+ Store 234(r031) 236
+ 238: 6(float) Load 11(inF0)
+ 239: 6(float) Load 12(inF1)
+ 240: 6(float) FMod 238 239
+ Store 237(r033) 240
+ 242: 6(float) Load 11(inF0)
+ 243: 6(float) ExtInst 1(GLSL.std.450) 10(Fract) 242
+ Store 241(r034) 243
+ 245: 6(float) Load 11(inF0)
+ 246: 6(float) Fwidth 245
+ Store 244(r036) 246
+ 248: 6(float) Load 11(inF0)
+ 249: 135(bool) IsInf 248
+ Store 247(r037) 249
+ 251: 6(float) Load 11(inF0)
+ 252: 135(bool) IsNan 251
+ Store 250(r038) 252
+ 254: 6(float) Load 11(inF0)
+ 255: 6(float) Load 12(inF1)
+ 256: 6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 254 255
+ Store 253(r039) 256
+ 258: 6(float) Load 11(inF0)
+ 259: 6(float) Load 12(inF1)
+ 260: 6(float) Load 13(inF2)
+ 261: 6(float) ExtInst 1(GLSL.std.450) 46(FMix) 258 259 260
+ Store 257(r039a) 261
+ 263: 6(float) Load 11(inF0)
+ 264: 6(float) ExtInst 1(GLSL.std.450) 28(Log) 263
+ Store 262(r040) 264
+ 266: 6(float) Load 11(inF0)
+ 267: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 266
+ 269: 6(float) FMul 267 268
+ Store 265(r041) 269
+ 271: 6(float) Load 11(inF0)
+ 272: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 271
+ Store 270(r042) 272
+ 274: 6(float) Load 11(inF0)
+ 275: 6(float) Load 12(inF1)
+ 276: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 274 275
+ Store 273(r043) 276
+ 278: 6(float) Load 11(inF0)
+ 279: 6(float) Load 12(inF1)
+ 280: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 278 279
+ Store 277(r044) 280
+ 282: 6(float) Load 11(inF0)
+ 283: 6(float) Load 12(inF1)
+ 284: 6(float) ExtInst 1(GLSL.std.450) 26(Pow) 282 283
+ Store 281(r045) 284
+ 286: 6(float) Load 11(inF0)
+ 287: 6(float) ExtInst 1(GLSL.std.450) 11(Radians) 286
+ Store 285(r046) 287
+ 290: 6(float) Load 11(inF0)
+ 291: 6(float) FDiv 289 290
+ Store 288(r047) 291
+ 294: 155(int) BitReverse 293
+ 295: 8(int) Bitcast 294
+ Store 292(r048) 295
+ 297: 6(float) Load 11(inF0)
+ 298: 6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 297
+ Store 296(r049) 298
+ 300: 6(float) Load 11(inF0)
+ 301: 6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 300
+ Store 299(r050) 301
+ 303: 6(float) Load 11(inF0)
+ 304: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 303 139 289
+ Store 302(r051) 304
+ 306: 6(float) Load 11(inF0)
+ 307: 6(float) ExtInst 1(GLSL.std.450) 6(FSign) 306
+ Store 305(r052) 307
309: 6(float) Load 11(inF0)
310: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 309
- Store 12(inF1) 310
+ Store 308(r053) 310
311: 6(float) Load 11(inF0)
- 312: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 311
- Store 13(inF2) 312
- 314: 6(float) Load 11(inF0)
- 315: 6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 314
- Store 313(r055) 315
- 317: 6(float) Load 11(inF0)
- 318: 6(float) Load 12(inF1)
- 319: 6(float) Load 13(inF2)
- 320: 6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 317 318 319
- Store 316(r056) 320
- 322: 6(float) Load 11(inF0)
- 323: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 322
- Store 321(r057) 323
- 325: 6(float) Load 11(inF0)
- 326: 6(float) Load 12(inF1)
- 327: 6(float) ExtInst 1(GLSL.std.450) 48(Step) 325 326
- Store 324(r058) 327
- 329: 6(float) Load 11(inF0)
- 330: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 329
- Store 328(r059) 330
- 332: 6(float) Load 11(inF0)
- 333: 6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 332
- Store 331(r060) 333
- 335: 6(float) Load 11(inF0)
- 336: 6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 335
- Store 334(r061) 336
- ReturnValue 179
+ 312: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 311
+ Store 12(inF1) 312
+ 313: 6(float) Load 11(inF0)
+ 314: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 313
+ Store 13(inF2) 314
+ 316: 6(float) Load 11(inF0)
+ 317: 6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 316
+ Store 315(r055) 317
+ 319: 6(float) Load 11(inF0)
+ 320: 6(float) Load 12(inF1)
+ 321: 6(float) Load 13(inF2)
+ 322: 6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 319 320 321
+ Store 318(r056) 322
+ 324: 6(float) Load 11(inF0)
+ 325: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 324
+ Store 323(r057) 325
+ 327: 6(float) Load 11(inF0)
+ 328: 6(float) Load 12(inF1)
+ 329: 6(float) ExtInst 1(GLSL.std.450) 48(Step) 327 328
+ Store 326(r058) 329
+ 331: 6(float) Load 11(inF0)
+ 332: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 331
+ Store 330(r059) 332
+ 334: 6(float) Load 11(inF0)
+ 335: 6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 334
+ Store 333(r060) 335
+ 337: 6(float) Load 11(inF0)
+ 338: 6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 337
+ Store 336(r061) 338
+ ReturnValue 139
FunctionEnd
22(PixelShaderFunction1(vf1;vf1;vf1;): 6(float) Function None 18
19(inF0): 7(ptr) FunctionParameter
20(inF1): 7(ptr) FunctionParameter
21(inF2): 7(ptr) FunctionParameter
23: Label
- ReturnValue 179
+ ReturnValue 139
FunctionEnd
34(PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2;): 24(fvec2) Function None 28
29(inF0): 25(ptr) FunctionParameter
@@ -6561,295 +6573,298 @@ gl_FragCoord origin is upper left
32(inU0): 27(ptr) FunctionParameter
33(inU1): 27(ptr) FunctionParameter
35: Label
- 341(r000): 136(ptr) Variable Function
- 344(r001): 25(ptr) Variable Function
- 347(r002): 25(ptr) Variable Function
- 350(r003): 136(ptr) Variable Function
- 353(r004): 25(ptr) Variable Function
- 358(r005): 357(ptr) Variable Function
- 361(r006): 27(ptr) Variable Function
- 364(r007): 25(ptr) Variable Function
- 367(r009): 25(ptr) Variable Function
- 370(r010): 25(ptr) Variable Function
- 374(r011): 25(ptr) Variable Function
- 377(r012): 25(ptr) Variable Function
- 390(r013): 25(ptr) Variable Function
- 393(r015): 25(ptr) Variable Function
- 396(r016): 357(ptr) Variable Function
- 400(r017): 25(ptr) Variable Function
- 403(r018): 25(ptr) Variable Function
- 406(r019): 25(ptr) Variable Function
- 409(r020): 25(ptr) Variable Function
- 412(r021): 25(ptr) Variable Function
- 415(r022): 25(ptr) Variable Function
- 418(r023): 25(ptr) Variable Function
- 421(r026): 7(ptr) Variable Function
- 425(r027): 7(ptr) Variable Function
- 429(r028): 25(ptr) Variable Function
- 432(r029): 25(ptr) Variable Function
- 435(r030): 25(ptr) Variable Function
- 440(r031): 27(ptr) Variable Function
- 445(r032): 27(ptr) Variable Function
- 447(r033): 25(ptr) Variable Function
- 450(r035): 25(ptr) Variable Function
- 454(r036): 25(ptr) Variable Function
- 457(r037): 25(ptr) Variable Function
- 463(r038): 25(ptr) Variable Function
- 467(r039): 466(ptr) Variable Function
- 470(r040): 466(ptr) Variable Function
- 473(r041): 25(ptr) Variable Function
- 477(r039a): 25(ptr) Variable Function
- 482(r042): 7(ptr) Variable Function
- 485(r043): 25(ptr) Variable Function
- 488(r044): 25(ptr) Variable Function
- 492(r045): 25(ptr) Variable Function
- 495(r046): 25(ptr) Variable Function
- 499(r047): 25(ptr) Variable Function
- 503(r048): 25(ptr) Variable Function
- 506(r049): 25(ptr) Variable Function
- 510(r050): 25(ptr) Variable Function
- 513(r051): 25(ptr) Variable Function
- 517(r052): 25(ptr) Variable Function
- 521(r053): 25(ptr) Variable Function
- 526(r054): 27(ptr) Variable Function
- 531(r055): 25(ptr) Variable Function
- 534(r056): 25(ptr) Variable Function
- 537(r057): 25(ptr) Variable Function
- 542(r058): 25(ptr) Variable Function
- 545(r059): 25(ptr) Variable Function
- 552(r060): 25(ptr) Variable Function
- 555(r061): 25(ptr) Variable Function
- 560(r062): 25(ptr) Variable Function
- 563(r063): 25(ptr) Variable Function
- 567(r064): 25(ptr) Variable Function
- 570(r065): 25(ptr) Variable Function
- 573(r066): 25(ptr) Variable Function
- 342: 24(fvec2) Load 29(inF0)
- 343: 135(bool) All 342
- Store 341(r000) 343
- 345: 24(fvec2) Load 29(inF0)
- 346: 24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 345
- Store 344(r001) 346
- 348: 24(fvec2) Load 29(inF0)
- 349: 24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 348
- Store 347(r002) 349
- 351: 24(fvec2) Load 29(inF0)
- 352: 135(bool) Any 351
- Store 350(r003) 352
- 354: 24(fvec2) Load 29(inF0)
- 355: 24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 354
- Store 353(r004) 355
- 359: 24(fvec2) Load 29(inF0)
- 360: 356(ivec2) Bitcast 359
- Store 358(r005) 360
- 362: 24(fvec2) Load 29(inF0)
- 363: 26(ivec2) Bitcast 362
- Store 361(r006) 363
- 365: 26(ivec2) Load 32(inU0)
- 366: 24(fvec2) Bitcast 365
- Store 364(r007) 366
+ 343(r000): 136(ptr) Variable Function
+ 349(r001): 25(ptr) Variable Function
+ 352(r002): 25(ptr) Variable Function
+ 355(r003): 136(ptr) Variable Function
+ 359(r004): 25(ptr) Variable Function
+ 364(r005): 363(ptr) Variable Function
+ 367(r006): 27(ptr) Variable Function
+ 370(r007): 25(ptr) Variable Function
+ 373(r009): 25(ptr) Variable Function
+ 376(r010): 25(ptr) Variable Function
+ 380(r011): 25(ptr) Variable Function
+ 383(r012): 25(ptr) Variable Function
+ 402(r013): 25(ptr) Variable Function
+ 405(r015): 25(ptr) Variable Function
+ 408(r016): 363(ptr) Variable Function
+ 412(r017): 25(ptr) Variable Function
+ 415(r018): 25(ptr) Variable Function
+ 418(r019): 25(ptr) Variable Function
+ 421(r020): 25(ptr) Variable Function
+ 424(r021): 25(ptr) Variable Function
+ 427(r022): 25(ptr) Variable Function
+ 430(r023): 25(ptr) Variable Function
+ 433(r026): 7(ptr) Variable Function
+ 437(r027): 7(ptr) Variable Function
+ 441(r028): 25(ptr) Variable Function
+ 444(r029): 25(ptr) Variable Function
+ 447(r030): 25(ptr) Variable Function
+ 452(r031): 27(ptr) Variable Function
+ 457(r032): 27(ptr) Variable Function
+ 459(r033): 25(ptr) Variable Function
+ 462(r035): 25(ptr) Variable Function
+ 466(r036): 25(ptr) Variable Function
+ 469(r038): 25(ptr) Variable Function
+ 473(r039): 472(ptr) Variable Function
+ 476(r040): 472(ptr) Variable Function
+ 479(r041): 25(ptr) Variable Function
+ 483(r039a): 25(ptr) Variable Function
+ 488(r042): 7(ptr) Variable Function
+ 491(r043): 25(ptr) Variable Function
+ 494(r044): 25(ptr) Variable Function
+ 498(r045): 25(ptr) Variable Function
+ 501(r046): 25(ptr) Variable Function
+ 505(r047): 25(ptr) Variable Function
+ 509(r048): 25(ptr) Variable Function
+ 512(r049): 25(ptr) Variable Function
+ 516(r050): 25(ptr) Variable Function
+ 519(r051): 25(ptr) Variable Function
+ 523(r052): 25(ptr) Variable Function
+ 527(r053): 25(ptr) Variable Function
+ 532(r054): 27(ptr) Variable Function
+ 537(r055): 25(ptr) Variable Function
+ 540(r056): 25(ptr) Variable Function
+ 543(r057): 25(ptr) Variable Function
+ 548(r058): 25(ptr) Variable Function
+ 551(r059): 25(ptr) Variable Function
+ 558(r060): 25(ptr) Variable Function
+ 561(r061): 25(ptr) Variable Function
+ 566(r062): 25(ptr) Variable Function
+ 569(r063): 25(ptr) Variable Function
+ 573(r064): 25(ptr) Variable Function
+ 576(r065): 25(ptr) Variable Function
+ 579(r066): 25(ptr) Variable Function
+ 344: 24(fvec2) Load 29(inF0)
+ 347: 345(bvec2) FOrdNotEqual 344 346
+ 348: 135(bool) All 347
+ Store 343(r000) 348
+ 350: 24(fvec2) Load 29(inF0)
+ 351: 24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 350
+ Store 349(r001) 351
+ 353: 24(fvec2) Load 29(inF0)
+ 354: 24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 353
+ Store 352(r002) 354
+ 356: 24(fvec2) Load 29(inF0)
+ 357: 345(bvec2) FOrdNotEqual 356 346
+ 358: 135(bool) Any 357
+ Store 355(r003) 358
+ 360: 24(fvec2) Load 29(inF0)
+ 361: 24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 360
+ Store 359(r004) 361
+ 365: 24(fvec2) Load 29(inF0)
+ 366: 362(ivec2) Bitcast 365
+ Store 364(r005) 366
368: 24(fvec2) Load 29(inF0)
- 369: 24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 368
- Store 367(r009) 369
- 371: 24(fvec2) Load 29(inF0)
- 372: 24(fvec2) Load 30(inF1)
- 373: 24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 371 372
- Store 370(r010) 373
- 375: 24(fvec2) Load 29(inF0)
- 376: 24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 375
- Store 374(r011) 376
- 378: 24(fvec2) Load 29(inF0)
- 379: 24(fvec2) Load 30(inF1)
- 380: 24(fvec2) Load 31(inF2)
- 381: 24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 378 379 380
- Store 377(r012) 381
- 382: 24(fvec2) Load 29(inF0)
- 385: 384(bvec2) FOrdLessThan 382 383
- 386: 135(bool) Any 385
- SelectionMerge 388 None
- BranchConditional 386 387 388
- 387: Label
+ 369: 26(ivec2) Bitcast 368
+ Store 367(r006) 369
+ 371: 26(ivec2) Load 32(inU0)
+ 372: 24(fvec2) Bitcast 371
+ Store 370(r007) 372
+ 374: 24(fvec2) Load 29(inF0)
+ 375: 24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 374
+ Store 373(r009) 375
+ 377: 24(fvec2) Load 29(inF0)
+ 378: 24(fvec2) Load 30(inF1)
+ 379: 24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 377 378
+ Store 376(r010) 379
+ 381: 24(fvec2) Load 29(inF0)
+ 382: 24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 381
+ Store 380(r011) 382
+ 384: 24(fvec2) Load 29(inF0)
+ 385: 24(fvec2) Load 30(inF1)
+ 386: 24(fvec2) Load 31(inF2)
+ 387: 24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 384 385 386
+ Store 383(r012) 387
+ 388: 24(fvec2) Load 29(inF0)
+ 389: 345(bvec2) FOrdLessThan 388 346
+ 390: 135(bool) Any 389
+ SelectionMerge 392 None
+ BranchConditional 390 391 392
+ 391: Label
+ Kill
+ 392: Label
+ 394: 26(ivec2) Load 32(inU0)
+ 397: 345(bvec2) ULessThan 394 396
+ 398: 135(bool) Any 397
+ SelectionMerge 400 None
+ BranchConditional 398 399 400
+ 399: Label
Kill
- 388: Label
- 391: 24(fvec2) Load 29(inF0)
- 392: 24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 391
- Store 390(r013) 392
- 394: 24(fvec2) Load 29(inF0)
- 395: 24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 394
- Store 393(r015) 395
- 399: 356(ivec2) BitCount 398
- Store 396(r016) 399
- 401: 24(fvec2) Load 29(inF0)
- 402: 24(fvec2) DPdx 401
- Store 400(r017) 402
- 404: 24(fvec2) Load 29(inF0)
- 405: 24(fvec2) DPdxCoarse 404
- Store 403(r018) 405
- 407: 24(fvec2) Load 29(inF0)
- 408: 24(fvec2) DPdxFine 407
- Store 406(r019) 408
- 410: 24(fvec2) Load 29(inF0)
- 411: 24(fvec2) DPdy 410
- Store 409(r020) 411
+ 400: Label
+ 403: 24(fvec2) Load 29(inF0)
+ 404: 24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 403
+ Store 402(r013) 404
+ 406: 24(fvec2) Load 29(inF0)
+ 407: 24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 406
+ Store 405(r015) 407
+ 411: 362(ivec2) BitCount 410
+ Store 408(r016) 411
413: 24(fvec2) Load 29(inF0)
- 414: 24(fvec2) DPdyCoarse 413
- Store 412(r021) 414
+ 414: 24(fvec2) DPdx 413
+ Store 412(r017) 414
416: 24(fvec2) Load 29(inF0)
- 417: 24(fvec2) DPdyFine 416
- Store 415(r022) 417
+ 417: 24(fvec2) DPdxCoarse 416
+ Store 415(r018) 417
419: 24(fvec2) Load 29(inF0)
- 420: 24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 419
- Store 418(r023) 420
+ 420: 24(fvec2) DPdxFine 419
+ Store 418(r019) 420
422: 24(fvec2) Load 29(inF0)
- 423: 24(fvec2) Load 30(inF1)
- 424: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 422 423
- Store 421(r026) 424
- 426: 24(fvec2) Load 29(inF0)
- 427: 24(fvec2) Load 30(inF1)
- 428: 6(float) Dot 426 427
- Store 425(r027) 428
- 430: 24(fvec2) Load 29(inF0)
- 431: 24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 430
- Store 429(r028) 431
- 433: 24(fvec2) Load 29(inF0)
- 434: 24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 433
- Store 432(r029) 434
- 436: 24(fvec2) Load 29(inF0)
- 437: 24(fvec2) Load 30(inF1)
- 438: 24(fvec2) Load 31(inF2)
- 439: 24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 436 437 438
- Store 435(r030) 439
- 444: 26(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 443
- Store 440(r031) 444
- 446: 26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 443
- Store 445(r032) 446
+ 423: 24(fvec2) DPdy 422
+ Store 421(r020) 423
+ 425: 24(fvec2) Load 29(inF0)
+ 426: 24(fvec2) DPdyCoarse 425
+ Store 424(r021) 426
+ 428: 24(fvec2) Load 29(inF0)
+ 429: 24(fvec2) DPdyFine 428
+ Store 427(r022) 429
+ 431: 24(fvec2) Load 29(inF0)
+ 432: 24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 431
+ Store 430(r023) 432
+ 434: 24(fvec2) Load 29(inF0)
+ 435: 24(fvec2) Load 30(inF1)
+ 436: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 434 435
+ Store 433(r026) 436
+ 438: 24(fvec2) Load 29(inF0)
+ 439: 24(fvec2) Load 30(inF1)
+ 440: 6(float) Dot 438 439
+ Store 437(r027) 440
+ 442: 24(fvec2) Load 29(inF0)
+ 443: 24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 442
+ Store 441(r028) 443
+ 445: 24(fvec2) Load 29(inF0)
+ 446: 24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 445
+ Store 444(r029) 446
448: 24(fvec2) Load 29(inF0)
- 449: 24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 448
- Store 447(r033) 449
- 451: 24(fvec2) Load 29(inF0)
- 452: 24(fvec2) Load 30(inF1)
- 453: 24(fvec2) FMod 451 452
- Store 450(r035) 453
- 455: 24(fvec2) Load 29(inF0)
- 456: 24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 455
- Store 454(r036) 456
- 458: 24(fvec2) Load 29(inF0)
- 460:459(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 458
- 461: 356(ivec2) CompositeExtract 460 1
- Store 30(inF1) 461
- 462: 24(fvec2) CompositeExtract 460 0
- Store 457(r037) 462
- 464: 24(fvec2) Load 29(inF0)
- 465: 24(fvec2) Fwidth 464
- Store 463(r038) 465
- 468: 24(fvec2) Load 29(inF0)
- 469: 384(bvec2) IsInf 468
- Store 467(r039) 469
- 471: 24(fvec2) Load 29(inF0)
- 472: 384(bvec2) IsNan 471
- Store 470(r040) 472
+ 449: 24(fvec2) Load 30(inF1)
+ 450: 24(fvec2) Load 31(inF2)
+ 451: 24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 448 449 450
+ Store 447(r030) 451
+ 456: 26(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 455
+ Store 452(r031) 456
+ 458: 26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 455
+ Store 457(r032) 458
+ 460: 24(fvec2) Load 29(inF0)
+ 461: 24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 460
+ Store 459(r033) 461
+ 463: 24(fvec2) Load 29(inF0)
+ 464: 24(fvec2) Load 30(inF1)
+ 465: 24(fvec2) FMod 463 464
+ Store 462(r035) 465
+ 467: 24(fvec2) Load 29(inF0)
+ 468: 24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 467
+ Store 466(r036) 468
+ 470: 24(fvec2) Load 29(inF0)
+ 471: 24(fvec2) Fwidth 470
+ Store 469(r038) 471
474: 24(fvec2) Load 29(inF0)
- 475: 24(fvec2) Load 30(inF1)
- 476: 24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 474 475
- Store 473(r041) 476
- 478: 24(fvec2) Load 29(inF0)
- 479: 24(fvec2) Load 30(inF1)
- 480: 24(fvec2) Load 31(inF2)
- 481: 24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 478 479 480
- Store 477(r039a) 481
- 483: 24(fvec2) Load 29(inF0)
- 484: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 483
- Store 482(r042) 484
- 486: 24(fvec2) Load 29(inF0)
- 487: 24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 486
- Store 485(r043) 487
+ 475: 345(bvec2) IsInf 474
+ Store 473(r039) 475
+ 477: 24(fvec2) Load 29(inF0)
+ 478: 345(bvec2) IsNan 477
+ Store 476(r040) 478
+ 480: 24(fvec2) Load 29(inF0)
+ 481: 24(fvec2) Load 30(inF1)
+ 482: 24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 480 481
+ Store 479(r041) 482
+ 484: 24(fvec2) Load 29(inF0)
+ 485: 24(fvec2) Load 30(inF1)
+ 486: 24(fvec2) Load 31(inF2)
+ 487: 24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 484 485 486
+ Store 483(r039a) 487
489: 24(fvec2) Load 29(inF0)
- 490: 24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 489
- 491: 24(fvec2) VectorTimesScalar 490 266
- Store 488(r044) 491
- 493: 24(fvec2) Load 29(inF0)
- 494: 24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 493
- Store 492(r045) 494
- 496: 24(fvec2) Load 29(inF0)
- 497: 24(fvec2) Load 30(inF1)
- 498: 24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 496 497
- Store 495(r046) 498
- 500: 24(fvec2) Load 29(inF0)
- 501: 24(fvec2) Load 30(inF1)
- 502: 24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 500 501
- Store 499(r047) 502
- 504: 24(fvec2) Load 29(inF0)
- 505: 24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 504
- Store 503(r048) 505
- 507: 24(fvec2) Load 29(inF0)
- 508: 24(fvec2) Load 30(inF1)
- 509: 24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 507 508
- Store 506(r049) 509
- 511: 24(fvec2) Load 29(inF0)
- 512: 24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 511
- Store 510(r050) 512
- 514: 24(fvec2) Load 29(inF0)
- 515: 24(fvec2) CompositeConstruct 287 287
- 516: 24(fvec2) FDiv 515 514
- Store 513(r051) 516
- 518: 24(fvec2) Load 29(inF0)
- 519: 24(fvec2) Load 30(inF1)
- 520: 24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 518 519
- Store 517(r052) 520
- 522: 24(fvec2) Load 29(inF0)
- 523: 24(fvec2) Load 30(inF1)
- 525: 24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 522 523 524
- Store 521(r053) 525
- 530: 26(ivec2) BitReverse 529
- Store 526(r054) 530
- 532: 24(fvec2) Load 29(inF0)
- 533: 24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 532
- Store 531(r055) 533
- 535: 24(fvec2) Load 29(inF0)
- 536: 24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 535
- Store 534(r056) 536
+ 490: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 489
+ Store 488(r042) 490
+ 492: 24(fvec2) Load 29(inF0)
+ 493: 24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 492
+ Store 491(r043) 493
+ 495: 24(fvec2) Load 29(inF0)
+ 496: 24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 495
+ 497: 24(fvec2) VectorTimesScalar 496 268
+ Store 494(r044) 497
+ 499: 24(fvec2) Load 29(inF0)
+ 500: 24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 499
+ Store 498(r045) 500
+ 502: 24(fvec2) Load 29(inF0)
+ 503: 24(fvec2) Load 30(inF1)
+ 504: 24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 502 503
+ Store 501(r046) 504
+ 506: 24(fvec2) Load 29(inF0)
+ 507: 24(fvec2) Load 30(inF1)
+ 508: 24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 506 507
+ Store 505(r047) 508
+ 510: 24(fvec2) Load 29(inF0)
+ 511: 24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 510
+ Store 509(r048) 511
+ 513: 24(fvec2) Load 29(inF0)
+ 514: 24(fvec2) Load 30(inF1)
+ 515: 24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 513 514
+ Store 512(r049) 515
+ 517: 24(fvec2) Load 29(inF0)
+ 518: 24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 517
+ Store 516(r050) 518
+ 520: 24(fvec2) Load 29(inF0)
+ 521: 24(fvec2) CompositeConstruct 289 289
+ 522: 24(fvec2) FDiv 521 520
+ Store 519(r051) 522
+ 524: 24(fvec2) Load 29(inF0)
+ 525: 24(fvec2) Load 30(inF1)
+ 526: 24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 524 525
+ Store 523(r052) 526
+ 528: 24(fvec2) Load 29(inF0)
+ 529: 24(fvec2) Load 30(inF1)
+ 531: 24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 528 529 530
+ Store 527(r053) 531
+ 536: 26(ivec2) BitReverse 535
+ Store 532(r054) 536
538: 24(fvec2) Load 29(inF0)
- 539: 24(fvec2) CompositeConstruct 179 179
- 540: 24(fvec2) CompositeConstruct 287 287
- 541: 24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 538 539 540
- Store 537(r057) 541
- 543: 24(fvec2) Load 29(inF0)
- 544: 24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 543
- Store 542(r058) 544
- 546: 24(fvec2) Load 29(inF0)
- 547: 24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 546
- Store 545(r059) 547
- 548: 24(fvec2) Load 29(inF0)
- 549: 24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 548
- Store 30(inF1) 549
- 550: 24(fvec2) Load 29(inF0)
- 551: 24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 550
- Store 31(inF2) 551
- 553: 24(fvec2) Load 29(inF0)
- 554: 24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 553
- Store 552(r060) 554
+ 539: 24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 538
+ Store 537(r055) 539
+ 541: 24(fvec2) Load 29(inF0)
+ 542: 24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 541
+ Store 540(r056) 542
+ 544: 24(fvec2) Load 29(inF0)
+ 545: 24(fvec2) CompositeConstruct 139 139
+ 546: 24(fvec2) CompositeConstruct 289 289
+ 547: 24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 544 545 546
+ Store 543(r057) 547
+ 549: 24(fvec2) Load 29(inF0)
+ 550: 24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 549
+ Store 548(r058) 550
+ 552: 24(fvec2) Load 29(inF0)
+ 553: 24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 552
+ Store 551(r059) 553
+ 554: 24(fvec2) Load 29(inF0)
+ 555: 24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 554
+ Store 30(inF1) 555
556: 24(fvec2) Load 29(inF0)
- 557: 24(fvec2) Load 30(inF1)
- 558: 24(fvec2) Load 31(inF2)
- 559: 24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 556 557 558
- Store 555(r061) 559
- 561: 24(fvec2) Load 29(inF0)
- 562: 24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 561
- Store 560(r062) 562
- 564: 24(fvec2) Load 29(inF0)
- 565: 24(fvec2) Load 30(inF1)
- 566: 24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 564 565
- Store 563(r063) 566
- 568: 24(fvec2) Load 29(inF0)
- 569: 24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 568
- Store 567(r064) 569
- 571: 24(fvec2) Load 29(inF0)
- 572: 24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 571
- Store 570(r065) 572
+ 557: 24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 556
+ Store 31(inF2) 557
+ 559: 24(fvec2) Load 29(inF0)
+ 560: 24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 559
+ Store 558(r060) 560
+ 562: 24(fvec2) Load 29(inF0)
+ 563: 24(fvec2) Load 30(inF1)
+ 564: 24(fvec2) Load 31(inF2)
+ 565: 24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 562 563 564
+ Store 561(r061) 565
+ 567: 24(fvec2) Load 29(inF0)
+ 568: 24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 567
+ Store 566(r062) 568
+ 570: 24(fvec2) Load 29(inF0)
+ 571: 24(fvec2) Load 30(inF1)
+ 572: 24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 570 571
+ Store 569(r063) 572
574: 24(fvec2) Load 29(inF0)
- 575: 24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 574
- Store 573(r066) 575
- ReturnValue 576
+ 575: 24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 574
+ Store 573(r064) 575
+ 577: 24(fvec2) Load 29(inF0)
+ 578: 24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 577
+ Store 576(r065) 578
+ 580: 24(fvec2) Load 29(inF0)
+ 581: 24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 580
+ Store 579(r066) 581
+ ReturnValue 582
FunctionEnd
46(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;): 36(fvec3) Function None 40
41(inF0): 37(ptr) FunctionParameter
@@ -6858,306 +6873,309 @@ gl_FragCoord origin is upper left
44(inU0): 39(ptr) FunctionParameter
45(inU1): 39(ptr) FunctionParameter
47: Label
- 579(r000): 136(ptr) Variable Function
- 582(r001): 37(ptr) Variable Function
- 585(r002): 37(ptr) Variable Function
- 588(r003): 136(ptr) Variable Function
- 591(r004): 37(ptr) Variable Function
- 596(r005): 595(ptr) Variable Function
- 599(r006): 39(ptr) Variable Function
- 602(r007): 37(ptr) Variable Function
- 605(r009): 37(ptr) Variable Function
- 608(r010): 37(ptr) Variable Function
- 612(r011): 37(ptr) Variable Function
- 615(r012): 37(ptr) Variable Function
- 628(r013): 37(ptr) Variable Function
- 631(r014): 37(ptr) Variable Function
- 634(r015): 39(ptr) Variable Function
- 639(r016): 37(ptr) Variable Function
- 643(r017): 37(ptr) Variable Function
- 646(r018): 37(ptr) Variable Function
- 649(r019): 37(ptr) Variable Function
- 652(r020): 37(ptr) Variable Function
- 655(r021): 37(ptr) Variable Function
- 658(r022): 37(ptr) Variable Function
- 661(r023): 37(ptr) Variable Function
- 664(r024): 7(ptr) Variable Function
- 668(r025): 7(ptr) Variable Function
- 672(r029): 37(ptr) Variable Function
- 675(r030): 37(ptr) Variable Function
- 678(r031): 37(ptr) Variable Function
- 683(r032): 39(ptr) Variable Function
- 687(r033): 39(ptr) Variable Function
- 689(r034): 37(ptr) Variable Function
- 692(r036): 37(ptr) Variable Function
- 696(r037): 37(ptr) Variable Function
- 699(r038): 37(ptr) Variable Function
- 705(r039): 37(ptr) Variable Function
- 709(r040): 708(ptr) Variable Function
- 712(r041): 708(ptr) Variable Function
- 715(r042): 37(ptr) Variable Function
- 719(r039a): 37(ptr) Variable Function
- 724(r039b): 37(ptr) Variable Function
- 730(r043): 7(ptr) Variable Function
- 733(r044): 37(ptr) Variable Function
- 736(r045): 37(ptr) Variable Function
- 740(r046): 37(ptr) Variable Function
- 743(r047): 37(ptr) Variable Function
- 747(r048): 37(ptr) Variable Function
- 751(r049): 37(ptr) Variable Function
- 754(r050): 37(ptr) Variable Function
- 758(r051): 37(ptr) Variable Function
- 761(r052): 37(ptr) Variable Function
- 765(r053): 37(ptr) Variable Function
- 769(r054): 37(ptr) Variable Function
- 773(r055): 39(ptr) Variable Function
- 776(r056): 37(ptr) Variable Function
- 779(r057): 37(ptr) Variable Function
- 782(r058): 37(ptr) Variable Function
- 787(r059): 37(ptr) Variable Function
- 790(r060): 37(ptr) Variable Function
- 797(r061): 37(ptr) Variable Function
- 800(r062): 37(ptr) Variable Function
- 805(r063): 37(ptr) Variable Function
- 808(r064): 37(ptr) Variable Function
- 812(r065): 37(ptr) Variable Function
- 815(r066): 37(ptr) Variable Function
- 818(r067): 37(ptr) Variable Function
- 580: 36(fvec3) Load 41(inF0)
- 581: 135(bool) All 580
- Store 579(r000) 581
- 583: 36(fvec3) Load 41(inF0)
- 584: 36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 583
- Store 582(r001) 584
+ 585(r000): 136(ptr) Variable Function
+ 591(r001): 37(ptr) Variable Function
+ 594(r002): 37(ptr) Variable Function
+ 597(r003): 136(ptr) Variable Function
+ 601(r004): 37(ptr) Variable Function
+ 606(r005): 605(ptr) Variable Function
+ 609(r006): 39(ptr) Variable Function
+ 612(r007): 37(ptr) Variable Function
+ 615(r009): 37(ptr) Variable Function
+ 618(r010): 37(ptr) Variable Function
+ 622(r011): 37(ptr) Variable Function
+ 625(r012): 37(ptr) Variable Function
+ 643(r013): 37(ptr) Variable Function
+ 646(r014): 37(ptr) Variable Function
+ 649(r015): 39(ptr) Variable Function
+ 654(r016): 37(ptr) Variable Function
+ 658(r017): 37(ptr) Variable Function
+ 661(r018): 37(ptr) Variable Function
+ 664(r019): 37(ptr) Variable Function
+ 667(r020): 37(ptr) Variable Function
+ 670(r021): 37(ptr) Variable Function
+ 673(r022): 37(ptr) Variable Function
+ 676(r023): 37(ptr) Variable Function
+ 679(r024): 7(ptr) Variable Function
+ 683(r025): 7(ptr) Variable Function
+ 687(r029): 37(ptr) Variable Function
+ 690(r030): 37(ptr) Variable Function
+ 693(r031): 37(ptr) Variable Function
+ 698(r032): 39(ptr) Variable Function
+ 702(r033): 39(ptr) Variable Function
+ 704(r034): 37(ptr) Variable Function
+ 707(r036): 37(ptr) Variable Function
+ 711(r037): 37(ptr) Variable Function
+ 714(r039): 37(ptr) Variable Function
+ 718(r040): 717(ptr) Variable Function
+ 721(r041): 717(ptr) Variable Function
+ 724(r042): 37(ptr) Variable Function
+ 728(r039a): 37(ptr) Variable Function
+ 733(r039b): 37(ptr) Variable Function
+ 739(r043): 7(ptr) Variable Function
+ 742(r044): 37(ptr) Variable Function
+ 745(r045): 37(ptr) Variable Function
+ 749(r046): 37(ptr) Variable Function
+ 752(r047): 37(ptr) Variable Function
+ 756(r048): 37(ptr) Variable Function
+ 760(r049): 37(ptr) Variable Function
+ 763(r050): 37(ptr) Variable Function
+ 767(r051): 37(ptr) Variable Function
+ 770(r052): 37(ptr) Variable Function
+ 774(r053): 37(ptr) Variable Function
+ 778(r054): 37(ptr) Variable Function
+ 782(r055): 39(ptr) Variable Function
+ 785(r056): 37(ptr) Variable Function
+ 788(r057): 37(ptr) Variable Function
+ 791(r058): 37(ptr) Variable Function
+ 796(r059): 37(ptr) Variable Function
+ 799(r060): 37(ptr) Variable Function
+ 806(r061): 37(ptr) Variable Function
+ 809(r062): 37(ptr) Variable Function
+ 814(r063): 37(ptr) Variable Function
+ 817(r064): 37(ptr) Variable Function
+ 821(r065): 37(ptr) Variable Function
+ 824(r066): 37(ptr) Variable Function
+ 827(r067): 37(ptr) Variable Function
586: 36(fvec3) Load 41(inF0)
- 587: 36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 586
- Store 585(r002) 587
- 589: 36(fvec3) Load 41(inF0)
- 590: 135(bool) Any 589
- Store 588(r003) 590
+ 589: 587(bvec3) FOrdNotEqual 586 588
+ 590: 135(bool) All 589
+ Store 585(r000) 590
592: 36(fvec3) Load 41(inF0)
- 593: 36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 592
- Store 591(r004) 593
- 597: 36(fvec3) Load 41(inF0)
- 598: 594(ivec3) Bitcast 597
- Store 596(r005) 598
- 600: 36(fvec3) Load 41(inF0)
- 601: 38(ivec3) Bitcast 600
- Store 599(r006) 601
- 603: 38(ivec3) Load 44(inU0)
- 604: 36(fvec3) Bitcast 603
- Store 602(r007) 604
- 606: 36(fvec3) Load 41(inF0)
- 607: 36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 606
- Store 605(r009) 607
- 609: 36(fvec3) Load 41(inF0)
- 610: 36(fvec3) Load 42(inF1)
- 611: 36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 609 610
- Store 608(r010) 611
- 613: 36(fvec3) Load 41(inF0)
- 614: 36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 613
- Store 612(r011) 614
+ 593: 36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 592
+ Store 591(r001) 593
+ 595: 36(fvec3) Load 41(inF0)
+ 596: 36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 595
+ Store 594(r002) 596
+ 598: 36(fvec3) Load 41(inF0)
+ 599: 587(bvec3) FOrdNotEqual 598 588
+ 600: 135(bool) Any 599
+ Store 597(r003) 600
+ 602: 36(fvec3) Load 41(inF0)
+ 603: 36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 602
+ Store 601(r004) 603
+ 607: 36(fvec3) Load 41(inF0)
+ 608: 604(ivec3) Bitcast 607
+ Store 606(r005) 608
+ 610: 36(fvec3) Load 41(inF0)
+ 611: 38(ivec3) Bitcast 610
+ Store 609(r006) 611
+ 613: 38(ivec3) Load 44(inU0)
+ 614: 36(fvec3) Bitcast 613
+ Store 612(r007) 614
616: 36(fvec3) Load 41(inF0)
- 617: 36(fvec3) Load 42(inF1)
- 618: 36(fvec3) Load 43(inF2)
- 619: 36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 616 617 618
- Store 615(r012) 619
- 620: 36(fvec3) Load 41(inF0)
- 623: 622(bvec3) FOrdLessThan 620 621
- 624: 135(bool) Any 623
- SelectionMerge 626 None
- BranchConditional 624 625 626
- 625: Label
+ 617: 36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 616
+ Store 615(r009) 617
+ 619: 36(fvec3) Load 41(inF0)
+ 620: 36(fvec3) Load 42(inF1)
+ 621: 36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 619 620
+ Store 618(r010) 621
+ 623: 36(fvec3) Load 41(inF0)
+ 624: 36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 623
+ Store 622(r011) 624
+ 626: 36(fvec3) Load 41(inF0)
+ 627: 36(fvec3) Load 42(inF1)
+ 628: 36(fvec3) Load 43(inF2)
+ 629: 36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 626 627 628
+ Store 625(r012) 629
+ 630: 36(fvec3) Load 41(inF0)
+ 631: 587(bvec3) FOrdLessThan 630 588
+ 632: 135(bool) Any 631
+ SelectionMerge 634 None
+ BranchConditional 632 633 634
+ 633: Label
+ Kill
+ 634: Label
+ 636: 38(ivec3) Load 44(inU0)
+ 638: 587(bvec3) ULessThan 636 637
+ 639: 135(bool) Any 638
+ SelectionMerge 641 None
+ BranchConditional 639 640 641
+ 640: Label
Kill
- 626: Label
- 629: 36(fvec3) Load 41(inF0)
- 630: 36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 629
- Store 628(r013) 630
- 632: 36(fvec3) Load 41(inF0)
- 633: 36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 632
- Store 631(r014) 633
- 638: 38(ivec3) BitCount 637
- Store 634(r015) 638
- 640: 36(fvec3) Load 41(inF0)
- 641: 36(fvec3) Load 42(inF1)
- 642: 36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 640 641
- Store 639(r016) 642
+ 641: Label
644: 36(fvec3) Load 41(inF0)
- 645: 36(fvec3) DPdx 644
- Store 643(r017) 645
+ 645: 36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 644
+ Store 643(r013) 645
647: 36(fvec3) Load 41(inF0)
- 648: 36(fvec3) DPdxCoarse 647
- Store 646(r018) 648
- 650: 36(fvec3) Load 41(inF0)
- 651: 36(fvec3) DPdxFine 650
- Store 649(r019) 651
- 653: 36(fvec3) Load 41(inF0)
- 654: 36(fvec3) DPdy 653
- Store 652(r020) 654
- 656: 36(fvec3) Load 41(inF0)
- 657: 36(fvec3) DPdyCoarse 656
- Store 655(r021) 657
+ 648: 36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 647
+ Store 646(r014) 648
+ 653: 38(ivec3) BitCount 652
+ Store 649(r015) 653
+ 655: 36(fvec3) Load 41(inF0)
+ 656: 36(fvec3) Load 42(inF1)
+ 657: 36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 655 656
+ Store 654(r016) 657
659: 36(fvec3) Load 41(inF0)
- 660: 36(fvec3) DPdyFine 659
- Store 658(r022) 660
+ 660: 36(fvec3) DPdx 659
+ Store 658(r017) 660
662: 36(fvec3) Load 41(inF0)
- 663: 36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 662
- Store 661(r023) 663
+ 663: 36(fvec3) DPdxCoarse 662
+ Store 661(r018) 663
665: 36(fvec3) Load 41(inF0)
- 666: 36(fvec3) Load 42(inF1)
- 667: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 665 666
- Store 664(r024) 667
- 669: 36(fvec3) Load 41(inF0)
- 670: 36(fvec3) Load 42(inF1)
- 671: 6(float) Dot 669 670
- Store 668(r025) 671
- 673: 36(fvec3) Load 41(inF0)
- 674: 36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 673
- Store 672(r029) 674
- 676: 36(fvec3) Load 41(inF0)
- 677: 36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 676
- Store 675(r030) 677
- 679: 36(fvec3) Load 41(inF0)
- 680: 36(fvec3) Load 42(inF1)
- 681: 36(fvec3) Load 43(inF2)
- 682: 36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 679 680 681
- Store 678(r031) 682
- 686: 38(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 685
- Store 683(r032) 686
- 688: 38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 685
- Store 687(r033) 688
- 690: 36(fvec3) Load 41(inF0)
- 691: 36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 690
- Store 689(r034) 691
- 693: 36(fvec3) Load 41(inF0)
- 694: 36(fvec3) Load 42(inF1)
- 695: 36(fvec3) FMod 693 694
- Store 692(r036) 695
- 697: 36(fvec3) Load 41(inF0)
- 698: 36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 697
- Store 696(r037) 698
- 700: 36(fvec3) Load 41(inF0)
- 702:701(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 700
- 703: 594(ivec3) CompositeExtract 702 1
- Store 42(inF1) 703
- 704: 36(fvec3) CompositeExtract 702 0
- Store 699(r038) 704
- 706: 36(fvec3) Load 41(inF0)
- 707: 36(fvec3) Fwidth 706
- Store 705(r039) 707
- 710: 36(fvec3) Load 41(inF0)
- 711: 622(bvec3) IsInf 710
- Store 709(r040) 711
- 713: 36(fvec3) Load 41(inF0)
- 714: 622(bvec3) IsNan 713
- Store 712(r041) 714
- 716: 36(fvec3) Load 41(inF0)
- 717: 36(fvec3) Load 42(inF1)
- 718: 36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 716 717
- Store 715(r042) 718
- 720: 36(fvec3) Load 41(inF0)
- 721: 36(fvec3) Load 42(inF1)
- 722: 36(fvec3) Load 43(inF2)
- 723: 36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 720 721 722
- Store 719(r039a) 723
+ 666: 36(fvec3) DPdxFine 665
+ Store 664(r019) 666
+ 668: 36(fvec3) Load 41(inF0)
+ 669: 36(fvec3) DPdy 668
+ Store 667(r020) 669
+ 671: 36(fvec3) Load 41(inF0)
+ 672: 36(fvec3) DPdyCoarse 671
+ Store 670(r021) 672
+ 674: 36(fvec3) Load 41(inF0)
+ 675: 36(fvec3) DPdyFine 674
+ Store 673(r022) 675
+ 677: 36(fvec3) Load 41(inF0)
+ 678: 36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 677
+ Store 676(r023) 678
+ 680: 36(fvec3) Load 41(inF0)
+ 681: 36(fvec3) Load 42(inF1)
+ 682: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 680 681
+ Store 679(r024) 682
+ 684: 36(fvec3) Load 41(inF0)
+ 685: 36(fvec3) Load 42(inF1)
+ 686: 6(float) Dot 684 685
+ Store 683(r025) 686
+ 688: 36(fvec3) Load 41(inF0)
+ 689: 36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 688
+ Store 687(r029) 689
+ 691: 36(fvec3) Load 41(inF0)
+ 692: 36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 691
+ Store 690(r030) 692
+ 694: 36(fvec3) Load 41(inF0)
+ 695: 36(fvec3) Load 42(inF1)
+ 696: 36(fvec3) Load 43(inF2)
+ 697: 36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 694 695 696
+ Store 693(r031) 697
+ 701: 38(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 700
+ Store 698(r032) 701
+ 703: 38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 700
+ Store 702(r033) 703
+ 705: 36(fvec3) Load 41(inF0)
+ 706: 36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 705
+ Store 704(r034) 706
+ 708: 36(fvec3) Load 41(inF0)
+ 709: 36(fvec3) Load 42(inF1)
+ 710: 36(fvec3) FMod 708 709
+ Store 707(r036) 710
+ 712: 36(fvec3) Load 41(inF0)
+ 713: 36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 712
+ Store 711(r037) 713
+ 715: 36(fvec3) Load 41(inF0)
+ 716: 36(fvec3) Fwidth 715
+ Store 714(r039) 716
+ 719: 36(fvec3) Load 41(inF0)
+ 720: 587(bvec3) IsInf 719
+ Store 718(r040) 720
+ 722: 36(fvec3) Load 41(inF0)
+ 723: 587(bvec3) IsNan 722
+ Store 721(r041) 723
725: 36(fvec3) Load 41(inF0)
726: 36(fvec3) Load 42(inF1)
- 728: 36(fvec3) CompositeConstruct 727 727 727
- 729: 36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 725 726 728
- Store 724(r039b) 729
- 731: 36(fvec3) Load 41(inF0)
- 732: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 731
- Store 730(r043) 732
+ 727: 36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 725 726
+ Store 724(r042) 727
+ 729: 36(fvec3) Load 41(inF0)
+ 730: 36(fvec3) Load 42(inF1)
+ 731: 36(fvec3) Load 43(inF2)
+ 732: 36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 729 730 731
+ Store 728(r039a) 732
734: 36(fvec3) Load 41(inF0)
- 735: 36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 734
- Store 733(r044) 735
- 737: 36(fvec3) Load 41(inF0)
- 738: 36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 737
- 739: 36(fvec3) VectorTimesScalar 738 266
- Store 736(r045) 739
- 741: 36(fvec3) Load 41(inF0)
- 742: 36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 741
- Store 740(r046) 742
- 744: 36(fvec3) Load 41(inF0)
- 745: 36(fvec3) Load 42(inF1)
- 746: 36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 744 745
- Store 743(r047) 746
- 748: 36(fvec3) Load 41(inF0)
- 749: 36(fvec3) Load 42(inF1)
- 750: 36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 748 749
- Store 747(r048) 750
- 752: 36(fvec3) Load 41(inF0)
- 753: 36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 752
- Store 751(r049) 753
- 755: 36(fvec3) Load 41(inF0)
- 756: 36(fvec3) Load 42(inF1)
- 757: 36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 755 756
- Store 754(r050) 757
- 759: 36(fvec3) Load 41(inF0)
- 760: 36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 759
- Store 758(r051) 760
- 762: 36(fvec3) Load 41(inF0)
- 763: 36(fvec3) CompositeConstruct 287 287 287
- 764: 36(fvec3) FDiv 763 762
- Store 761(r052) 764
- 766: 36(fvec3) Load 41(inF0)
- 767: 36(fvec3) Load 42(inF1)
- 768: 36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 766 767
- Store 765(r053) 768
- 770: 36(fvec3) Load 41(inF0)
- 771: 36(fvec3) Load 42(inF1)
- 772: 36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 770 771 524
- Store 769(r054) 772
- 775: 38(ivec3) BitReverse 774
- Store 773(r055) 775
- 777: 36(fvec3) Load 41(inF0)
- 778: 36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 777
- Store 776(r056) 778
- 780: 36(fvec3) Load 41(inF0)
- 781: 36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 780
- Store 779(r057) 781
- 783: 36(fvec3) Load 41(inF0)
- 784: 36(fvec3) CompositeConstruct 179 179 179
- 785: 36(fvec3) CompositeConstruct 287 287 287
- 786: 36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 783 784 785
- Store 782(r058) 786
- 788: 36(fvec3) Load 41(inF0)
- 789: 36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 788
- Store 787(r059) 789
- 791: 36(fvec3) Load 41(inF0)
- 792: 36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 791
- Store 790(r060) 792
- 793: 36(fvec3) Load 41(inF0)
- 794: 36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 793
- Store 42(inF1) 794
- 795: 36(fvec3) Load 41(inF0)
- 796: 36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 795
- Store 43(inF2) 796
- 798: 36(fvec3) Load 41(inF0)
- 799: 36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 798
- Store 797(r061) 799
- 801: 36(fvec3) Load 41(inF0)
- 802: 36(fvec3) Load 42(inF1)
- 803: 36(fvec3) Load 43(inF2)
- 804: 36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 801 802 803
- Store 800(r062) 804
- 806: 36(fvec3) Load 41(inF0)
- 807: 36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 806
- Store 805(r063) 807
- 809: 36(fvec3) Load 41(inF0)
- 810: 36(fvec3) Load 42(inF1)
- 811: 36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 809 810
- Store 808(r064) 811
- 813: 36(fvec3) Load 41(inF0)
- 814: 36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 813
- Store 812(r065) 814
- 816: 36(fvec3) Load 41(inF0)
- 817: 36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 816
- Store 815(r066) 817
- 819: 36(fvec3) Load 41(inF0)
- 820: 36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 819
- Store 818(r067) 820
- ReturnValue 822
+ 735: 36(fvec3) Load 42(inF1)
+ 737: 36(fvec3) CompositeConstruct 736 736 736
+ 738: 36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 734 735 737
+ Store 733(r039b) 738
+ 740: 36(fvec3) Load 41(inF0)
+ 741: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 740
+ Store 739(r043) 741
+ 743: 36(fvec3) Load 41(inF0)
+ 744: 36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 743
+ Store 742(r044) 744
+ 746: 36(fvec3) Load 41(inF0)
+ 747: 36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 746
+ 748: 36(fvec3) VectorTimesScalar 747 268
+ Store 745(r045) 748
+ 750: 36(fvec3) Load 41(inF0)
+ 751: 36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 750
+ Store 749(r046) 751
+ 753: 36(fvec3) Load 41(inF0)
+ 754: 36(fvec3) Load 42(inF1)
+ 755: 36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 753 754
+ Store 752(r047) 755
+ 757: 36(fvec3) Load 41(inF0)
+ 758: 36(fvec3) Load 42(inF1)
+ 759: 36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 757 758
+ Store 756(r048) 759
+ 761: 36(fvec3) Load 41(inF0)
+ 762: 36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 761
+ Store 760(r049) 762
+ 764: 36(fvec3) Load 41(inF0)
+ 765: 36(fvec3) Load 42(inF1)
+ 766: 36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 764 765
+ Store 763(r050) 766
+ 768: 36(fvec3) Load 41(inF0)
+ 769: 36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 768
+ Store 767(r051) 769
+ 771: 36(fvec3) Load 41(inF0)
+ 772: 36(fvec3) CompositeConstruct 289 289 289
+ 773: 36(fvec3) FDiv 772 771
+ Store 770(r052) 773
+ 775: 36(fvec3) Load 41(inF0)
+ 776: 36(fvec3) Load 42(inF1)
+ 777: 36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 775 776
+ Store 774(r053) 777
+ 779: 36(fvec3) Load 41(inF0)
+ 780: 36(fvec3) Load 42(inF1)
+ 781: 36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 779 780 530
+ Store 778(r054) 781
+ 784: 38(ivec3) BitReverse 783
+ Store 782(r055) 784
+ 786: 36(fvec3) Load 41(inF0)
+ 787: 36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 786
+ Store 785(r056) 787
+ 789: 36(fvec3) Load 41(inF0)
+ 790: 36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 789
+ Store 788(r057) 790
+ 792: 36(fvec3) Load 41(inF0)
+ 793: 36(fvec3) CompositeConstruct 139 139 139
+ 794: 36(fvec3) CompositeConstruct 289 289 289
+ 795: 36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 792 793 794
+ Store 791(r058) 795
+ 797: 36(fvec3) Load 41(inF0)
+ 798: 36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 797
+ Store 796(r059) 798
+ 800: 36(fvec3) Load 41(inF0)
+ 801: 36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 800
+ Store 799(r060) 801
+ 802: 36(fvec3) Load 41(inF0)
+ 803: 36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 802
+ Store 42(inF1) 803
+ 804: 36(fvec3) Load 41(inF0)
+ 805: 36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 804
+ Store 43(inF2) 805
+ 807: 36(fvec3) Load 41(inF0)
+ 808: 36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 807
+ Store 806(r061) 808
+ 810: 36(fvec3) Load 41(inF0)
+ 811: 36(fvec3) Load 42(inF1)
+ 812: 36(fvec3) Load 43(inF2)
+ 813: 36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 810 811 812
+ Store 809(r062) 813
+ 815: 36(fvec3) Load 41(inF0)
+ 816: 36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 815
+ Store 814(r063) 816
+ 818: 36(fvec3) Load 41(inF0)
+ 819: 36(fvec3) Load 42(inF1)
+ 820: 36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 818 819
+ Store 817(r064) 820
+ 822: 36(fvec3) Load 41(inF0)
+ 823: 36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 822
+ Store 821(r065) 823
+ 825: 36(fvec3) Load 41(inF0)
+ 826: 36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 825
+ Store 824(r066) 826
+ 828: 36(fvec3) Load 41(inF0)
+ 829: 36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 828
+ Store 827(r067) 829
+ ReturnValue 831
FunctionEnd
58(PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;): 48(fvec4) Function None 52
53(inF0): 49(ptr) FunctionParameter
@@ -7166,808 +7184,800 @@ gl_FragCoord origin is upper left
56(inU0): 51(ptr) FunctionParameter
57(inU1): 51(ptr) FunctionParameter
59: Label
- 825(r000): 136(ptr) Variable Function
- 828(r001): 49(ptr) Variable Function
- 831(r002): 49(ptr) Variable Function
- 834(r003): 136(ptr) Variable Function
- 837(r004): 49(ptr) Variable Function
- 842(r005): 841(ptr) Variable Function
- 845(r006): 51(ptr) Variable Function
- 848(r007): 49(ptr) Variable Function
- 851(r009): 49(ptr) Variable Function
- 854(r010): 49(ptr) Variable Function
- 858(r011): 49(ptr) Variable Function
- 861(r012): 49(ptr) Variable Function
- 874(r013): 49(ptr) Variable Function
- 877(r014): 49(ptr) Variable Function
- 880(r015): 51(ptr) Variable Function
- 883(r016): 49(ptr) Variable Function
- 886(r017): 49(ptr) Variable Function
- 889(r018): 49(ptr) Variable Function
- 892(r019): 49(ptr) Variable Function
- 895(r020): 49(ptr) Variable Function
- 898(r021): 49(ptr) Variable Function
- 901(r022): 49(ptr) Variable Function
- 904(r023): 7(ptr) Variable Function
- 908(r024): 7(ptr) Variable Function
- 912(r025): 49(ptr) Variable Function
- 923(r029): 49(ptr) Variable Function
- 926(r030): 49(ptr) Variable Function
- 929(r031): 49(ptr) Variable Function
- 934(r032): 51(ptr) Variable Function
- 939(r033): 51(ptr) Variable Function
- 941(r034): 49(ptr) Variable Function
- 944(r036): 49(ptr) Variable Function
- 948(r037): 49(ptr) Variable Function
- 951(r038): 49(ptr) Variable Function
- 957(r039): 49(ptr) Variable Function
- 961(r040): 960(ptr) Variable Function
- 964(r041): 960(ptr) Variable Function
- 967(r042): 49(ptr) Variable Function
- 971(r039a): 49(ptr) Variable Function
- 976(r043): 7(ptr) Variable Function
- 979(r044): 49(ptr) Variable Function
- 982(r045): 49(ptr) Variable Function
- 986(r046): 49(ptr) Variable Function
- 989(r047): 49(ptr) Variable Function
- 993(r048): 49(ptr) Variable Function
- 997(r049): 49(ptr) Variable Function
- 1000(r050): 49(ptr) Variable Function
- 1004(r051): 49(ptr) Variable Function
- 1007(r052): 49(ptr) Variable Function
- 1011(r053): 49(ptr) Variable Function
- 1015(r054): 49(ptr) Variable Function
- 1019(r055): 51(ptr) Variable Function
- 1022(r056): 49(ptr) Variable Function
- 1025(r057): 49(ptr) Variable Function
- 1028(r058): 49(ptr) Variable Function
- 1033(r059): 49(ptr) Variable Function
- 1036(r060): 49(ptr) Variable Function
- 1043(r061): 49(ptr) Variable Function
- 1046(r062): 49(ptr) Variable Function
- 1051(r063): 49(ptr) Variable Function
- 1054(r064): 49(ptr) Variable Function
- 1058(r065): 49(ptr) Variable Function
- 1061(r066): 49(ptr) Variable Function
- 1064(r067): 49(ptr) Variable Function
- 826: 48(fvec4) Load 53(inF0)
- 827: 135(bool) All 826
- Store 825(r000) 827
- 829: 48(fvec4) Load 53(inF0)
- 830: 48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 829
- Store 828(r001) 830
- 832: 48(fvec4) Load 53(inF0)
- 833: 48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 832
- Store 831(r002) 833
+ 834(r000): 136(ptr) Variable Function
+ 840(r001): 49(ptr) Variable Function
+ 843(r002): 49(ptr) Variable Function
+ 846(r003): 136(ptr) Variable Function
+ 850(r004): 49(ptr) Variable Function
+ 855(r005): 854(ptr) Variable Function
+ 858(r006): 51(ptr) Variable Function
+ 861(r007): 49(ptr) Variable Function
+ 864(r009): 49(ptr) Variable Function
+ 867(r010): 49(ptr) Variable Function
+ 871(r011): 49(ptr) Variable Function
+ 874(r012): 49(ptr) Variable Function
+ 892(r013): 49(ptr) Variable Function
+ 895(r014): 49(ptr) Variable Function
+ 898(r015): 51(ptr) Variable Function
+ 901(r016): 49(ptr) Variable Function
+ 904(r017): 49(ptr) Variable Function
+ 907(r018): 49(ptr) Variable Function
+ 910(r019): 49(ptr) Variable Function
+ 913(r020): 49(ptr) Variable Function
+ 916(r021): 49(ptr) Variable Function
+ 919(r022): 49(ptr) Variable Function
+ 922(r023): 7(ptr) Variable Function
+ 926(r024): 7(ptr) Variable Function
+ 930(r025): 49(ptr) Variable Function
+ 941(r029): 49(ptr) Variable Function
+ 944(r030): 49(ptr) Variable Function
+ 947(r031): 49(ptr) Variable Function
+ 952(r032): 51(ptr) Variable Function
+ 957(r033): 51(ptr) Variable Function
+ 959(r034): 49(ptr) Variable Function
+ 962(r036): 49(ptr) Variable Function
+ 966(r037): 49(ptr) Variable Function
+ 969(r039): 49(ptr) Variable Function
+ 973(r040): 972(ptr) Variable Function
+ 976(r041): 972(ptr) Variable Function
+ 979(r042): 49(ptr) Variable Function
+ 983(r039a): 49(ptr) Variable Function
+ 988(r043): 7(ptr) Variable Function
+ 991(r044): 49(ptr) Variable Function
+ 994(r045): 49(ptr) Variable Function
+ 998(r046): 49(ptr) Variable Function
+ 1001(r047): 49(ptr) Variable Function
+ 1005(r048): 49(ptr) Variable Function
+ 1009(r049): 49(ptr) Variable Function
+ 1012(r050): 49(ptr) Variable Function
+ 1016(r051): 49(ptr) Variable Function
+ 1019(r052): 49(ptr) Variable Function
+ 1023(r053): 49(ptr) Variable Function
+ 1027(r054): 49(ptr) Variable Function
+ 1031(r055): 51(ptr) Variable Function
+ 1034(r056): 49(ptr) Variable Function
+ 1037(r057): 49(ptr) Variable Function
+ 1040(r058): 49(ptr) Variable Function
+ 1045(r059): 49(ptr) Variable Function
+ 1048(r060): 49(ptr) Variable Function
+ 1055(r061): 49(ptr) Variable Function
+ 1058(r062): 49(ptr) Variable Function
+ 1063(r063): 49(ptr) Variable Function
+ 1066(r064): 49(ptr) Variable Function
+ 1070(r065): 49(ptr) Variable Function
+ 1073(r066): 49(ptr) Variable Function
+ 1076(r067): 49(ptr) Variable Function
835: 48(fvec4) Load 53(inF0)
- 836: 135(bool) Any 835
- Store 834(r003) 836
- 838: 48(fvec4) Load 53(inF0)
- 839: 48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 838
- Store 837(r004) 839
- 843: 48(fvec4) Load 53(inF0)
- 844: 840(ivec4) Bitcast 843
- Store 842(r005) 844
- 846: 48(fvec4) Load 53(inF0)
- 847: 50(ivec4) Bitcast 846
- Store 845(r006) 847
- 849: 50(ivec4) Load 56(inU0)
- 850: 48(fvec4) Bitcast 849
- Store 848(r007) 850
- 852: 48(fvec4) Load 53(inF0)
- 853: 48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 852
- Store 851(r009) 853
- 855: 48(fvec4) Load 53(inF0)
- 856: 48(fvec4) Load 54(inF1)
- 857: 48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 855 856
- Store 854(r010) 857
+ 838: 836(bvec4) FOrdNotEqual 835 837
+ 839: 135(bool) All 838
+ Store 834(r000) 839
+ 841: 48(fvec4) Load 53(inF0)
+ 842: 48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 841
+ Store 840(r001) 842
+ 844: 48(fvec4) Load 53(inF0)
+ 845: 48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 844
+ Store 843(r002) 845
+ 847: 48(fvec4) Load 53(inF0)
+ 848: 836(bvec4) FOrdNotEqual 847 837
+ 849: 135(bool) Any 848
+ Store 846(r003) 849
+ 851: 48(fvec4) Load 53(inF0)
+ 852: 48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 851
+ Store 850(r004) 852
+ 856: 48(fvec4) Load 53(inF0)
+ 857: 853(ivec4) Bitcast 856
+ Store 855(r005) 857
859: 48(fvec4) Load 53(inF0)
- 860: 48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 859
- Store 858(r011) 860
- 862: 48(fvec4) Load 53(inF0)
- 863: 48(fvec4) Load 54(inF1)
- 864: 48(fvec4) Load 55(inF2)
- 865: 48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 862 863 864
- Store 861(r012) 865
- 866: 48(fvec4) Load 53(inF0)
- 869: 868(bvec4) FOrdLessThan 866 867
- 870: 135(bool) Any 869
- SelectionMerge 872 None
- BranchConditional 870 871 872
- 871: Label
- Kill
- 872: Label
+ 860: 50(ivec4) Bitcast 859
+ Store 858(r006) 860
+ 862: 50(ivec4) Load 56(inU0)
+ 863: 48(fvec4) Bitcast 862
+ Store 861(r007) 863
+ 865: 48(fvec4) Load 53(inF0)
+ 866: 48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 865
+ Store 864(r009) 866
+ 868: 48(fvec4) Load 53(inF0)
+ 869: 48(fvec4) Load 54(inF1)
+ 870: 48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 868 869
+ Store 867(r010) 870
+ 872: 48(fvec4) Load 53(inF0)
+ 873: 48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 872
+ Store 871(r011) 873
875: 48(fvec4) Load 53(inF0)
- 876: 48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 875
- Store 874(r013) 876
- 878: 48(fvec4) Load 53(inF0)
- 879: 48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 878
- Store 877(r014) 879
- 882: 50(ivec4) BitCount 881
- Store 880(r015) 882
- 884: 48(fvec4) Load 53(inF0)
- 885: 48(fvec4) DPdx 884
- Store 883(r016) 885
- 887: 48(fvec4) Load 53(inF0)
- 888: 48(fvec4) DPdxCoarse 887
- Store 886(r017) 888
- 890: 48(fvec4) Load 53(inF0)
- 891: 48(fvec4) DPdxFine 890
- Store 889(r018) 891
+ 876: 48(fvec4) Load 54(inF1)
+ 877: 48(fvec4) Load 55(inF2)
+ 878: 48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 875 876 877
+ Store 874(r012) 878
+ 879: 48(fvec4) Load 53(inF0)
+ 880: 836(bvec4) FOrdLessThan 879 837
+ 881: 135(bool) Any 880
+ SelectionMerge 883 None
+ BranchConditional 881 882 883
+ 882: Label
+ Kill
+ 883: Label
+ 885: 50(ivec4) Load 56(inU0)
+ 887: 836(bvec4) ULessThan 885 886
+ 888: 135(bool) Any 887
+ SelectionMerge 890 None
+ BranchConditional 888 889 890
+ 889: Label
+ Kill
+ 890: Label
893: 48(fvec4) Load 53(inF0)
- 894: 48(fvec4) DPdy 893
- Store 892(r019) 894
+ 894: 48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 893
+ Store 892(r013) 894
896: 48(fvec4) Load 53(inF0)
- 897: 48(fvec4) DPdyCoarse 896
- Store 895(r020) 897
- 899: 48(fvec4) Load 53(inF0)
- 900: 48(fvec4) DPdyFine 899
- Store 898(r021) 900
+ 897: 48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 896
+ Store 895(r014) 897
+ 900: 50(ivec4) BitCount 899
+ Store 898(r015) 900
902: 48(fvec4) Load 53(inF0)
- 903: 48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 902
- Store 901(r022) 903
+ 903: 48(fvec4) DPdx 902
+ Store 901(r016) 903
905: 48(fvec4) Load 53(inF0)
- 906: 48(fvec4) Load 54(inF1)
- 907: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 905 906
- Store 904(r023) 907
- 909: 48(fvec4) Load 53(inF0)
- 910: 48(fvec4) Load 54(inF1)
- 911: 6(float) Dot 909 910
- Store 908(r024) 911
- 913: 7(ptr) AccessChain 53(inF0) 527
- 914: 6(float) Load 913
- 915: 7(ptr) AccessChain 54(inF1) 527
- 916: 6(float) Load 915
- 917: 6(float) FMul 914 916
- 918: 7(ptr) AccessChain 53(inF0) 528
- 919: 6(float) Load 918
- 920: 7(ptr) AccessChain 54(inF1) 635
- 921: 6(float) Load 920
- 922: 48(fvec4) CompositeConstruct 287 917 919 921
- Store 912(r025) 922
- 924: 48(fvec4) Load 53(inF0)
- 925: 48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 924
- Store 923(r029) 925
+ 906: 48(fvec4) DPdxCoarse 905
+ Store 904(r017) 906
+ 908: 48(fvec4) Load 53(inF0)
+ 909: 48(fvec4) DPdxFine 908
+ Store 907(r018) 909
+ 911: 48(fvec4) Load 53(inF0)
+ 912: 48(fvec4) DPdy 911
+ Store 910(r019) 912
+ 914: 48(fvec4) Load 53(inF0)
+ 915: 48(fvec4) DPdyCoarse 914
+ Store 913(r020) 915
+ 917: 48(fvec4) Load 53(inF0)
+ 918: 48(fvec4) DPdyFine 917
+ Store 916(r021) 918
+ 920: 48(fvec4) Load 53(inF0)
+ 921: 48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 920
+ Store 919(r022) 921
+ 923: 48(fvec4) Load 53(inF0)
+ 924: 48(fvec4) Load 54(inF1)
+ 925: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 923 924
+ Store 922(r023) 925
927: 48(fvec4) Load 53(inF0)
- 928: 48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 927
- Store 926(r030) 928
- 930: 48(fvec4) Load 53(inF0)
- 931: 48(fvec4) Load 54(inF1)
- 932: 48(fvec4) Load 55(inF2)
- 933: 48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 930 931 932
- Store 929(r031) 933
- 938: 50(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 937
- Store 934(r032) 938
- 940: 50(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 937
- Store 939(r033) 940
+ 928: 48(fvec4) Load 54(inF1)
+ 929: 6(float) Dot 927 928
+ Store 926(r024) 929
+ 931: 7(ptr) AccessChain 53(inF0) 533
+ 932: 6(float) Load 931
+ 933: 7(ptr) AccessChain 54(inF1) 533
+ 934: 6(float) Load 933
+ 935: 6(float) FMul 932 934
+ 936: 7(ptr) AccessChain 53(inF0) 534
+ 937: 6(float) Load 936
+ 938: 7(ptr) AccessChain 54(inF1) 650
+ 939: 6(float) Load 938
+ 940: 48(fvec4) CompositeConstruct 289 935 937 939
+ Store 930(r025) 940
942: 48(fvec4) Load 53(inF0)
- 943: 48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 942
- Store 941(r034) 943
+ 943: 48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 942
+ Store 941(r029) 943
945: 48(fvec4) Load 53(inF0)
- 946: 48(fvec4) Load 54(inF1)
- 947: 48(fvec4) FMod 945 946
- Store 944(r036) 947
- 949: 48(fvec4) Load 53(inF0)
- 950: 48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 949
- Store 948(r037) 950
- 952: 48(fvec4) Load 53(inF0)
- 954:953(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 952
- 955: 840(ivec4) CompositeExtract 954 1
- Store 54(inF1) 955
- 956: 48(fvec4) CompositeExtract 954 0
- Store 951(r038) 956
- 958: 48(fvec4) Load 53(inF0)
- 959: 48(fvec4) Fwidth 958
- Store 957(r039) 959
- 962: 48(fvec4) Load 53(inF0)
- 963: 868(bvec4) IsInf 962
- Store 961(r040) 963
- 965: 48(fvec4) Load 53(inF0)
- 966: 868(bvec4) IsNan 965
- Store 964(r041) 966
- 968: 48(fvec4) Load 53(inF0)
- 969: 48(fvec4) Load 54(inF1)
- 970: 48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 968 969
- Store 967(r042) 970
- 972: 48(fvec4) Load 53(inF0)
- 973: 48(fvec4) Load 54(inF1)
- 974: 48(fvec4) Load 55(inF2)
- 975: 48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 972 973 974
- Store 971(r039a) 975
+ 946: 48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 945
+ Store 944(r030) 946
+ 948: 48(fvec4) Load 53(inF0)
+ 949: 48(fvec4) Load 54(inF1)
+ 950: 48(fvec4) Load 55(inF2)
+ 951: 48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 948 949 950
+ Store 947(r031) 951
+ 956: 50(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 955
+ Store 952(r032) 956
+ 958: 50(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 955
+ Store 957(r033) 958
+ 960: 48(fvec4) Load 53(inF0)
+ 961: 48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 960
+ Store 959(r034) 961
+ 963: 48(fvec4) Load 53(inF0)
+ 964: 48(fvec4) Load 54(inF1)
+ 965: 48(fvec4) FMod 963 964
+ Store 962(r036) 965
+ 967: 48(fvec4) Load 53(inF0)
+ 968: 48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 967
+ Store 966(r037) 968
+ 970: 48(fvec4) Load 53(inF0)
+ 971: 48(fvec4) Fwidth 970
+ Store 969(r039) 971
+ 974: 48(fvec4) Load 53(inF0)
+ 975: 836(bvec4) IsInf 974
+ Store 973(r040) 975
977: 48(fvec4) Load 53(inF0)
- 978: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 977
- Store 976(r043) 978
+ 978: 836(bvec4) IsNan 977
+ Store 976(r041) 978
980: 48(fvec4) Load 53(inF0)
- 981: 48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 980
- Store 979(r044) 981
- 983: 48(fvec4) Load 53(inF0)
- 984: 48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 983
- 985: 48(fvec4) VectorTimesScalar 984 266
- Store 982(r045) 985
- 987: 48(fvec4) Load 53(inF0)
- 988: 48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 987
- Store 986(r046) 988
- 990: 48(fvec4) Load 53(inF0)
- 991: 48(fvec4) Load 54(inF1)
- 992: 48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 990 991
- Store 989(r047) 992
- 994: 48(fvec4) Load 53(inF0)
- 995: 48(fvec4) Load 54(inF1)
- 996: 48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 994 995
- Store 993(r048) 996
- 998: 48(fvec4) Load 53(inF0)
- 999: 48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 998
- Store 997(r049) 999
- 1001: 48(fvec4) Load 53(inF0)
- 1002: 48(fvec4) Load 54(inF1)
- 1003: 48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1001 1002
- Store 1000(r050) 1003
- 1005: 48(fvec4) Load 53(inF0)
- 1006: 48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1005
- Store 1004(r051) 1006
- 1008: 48(fvec4) Load 53(inF0)
- 1009: 48(fvec4) CompositeConstruct 287 287 287 287
- 1010: 48(fvec4) FDiv 1009 1008
- Store 1007(r052) 1010
- 1012: 48(fvec4) Load 53(inF0)
- 1013: 48(fvec4) Load 54(inF1)
- 1014: 48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1012 1013
- Store 1011(r053) 1014
- 1016: 48(fvec4) Load 53(inF0)
- 1017: 48(fvec4) Load 54(inF1)
- 1018: 48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1016 1017 524
- Store 1015(r054) 1018
- 1021: 50(ivec4) BitReverse 1020
- Store 1019(r055) 1021
- 1023: 48(fvec4) Load 53(inF0)
- 1024: 48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1023
- Store 1022(r056) 1024
- 1026: 48(fvec4) Load 53(inF0)
- 1027: 48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1026
- Store 1025(r057) 1027
- 1029: 48(fvec4) Load 53(inF0)
- 1030: 48(fvec4) CompositeConstruct 179 179 179 179
- 1031: 48(fvec4) CompositeConstruct 287 287 287 287
- 1032: 48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1029 1030 1031
- Store 1028(r058) 1032
- 1034: 48(fvec4) Load 53(inF0)
- 1035: 48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1034
- Store 1033(r059) 1035
- 1037: 48(fvec4) Load 53(inF0)
- 1038: 48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1037
- Store 1036(r060) 1038
- 1039: 48(fvec4) Load 53(inF0)
- 1040: 48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1039
- Store 54(inF1) 1040
+ 981: 48(fvec4) Load 54(inF1)
+ 982: 48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 980 981
+ Store 979(r042) 982
+ 984: 48(fvec4) Load 53(inF0)
+ 985: 48(fvec4) Load 54(inF1)
+ 986: 48(fvec4) Load 55(inF2)
+ 987: 48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 984 985 986
+ Store 983(r039a) 987
+ 989: 48(fvec4) Load 53(inF0)
+ 990: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 989
+ Store 988(r043) 990
+ 992: 48(fvec4) Load 53(inF0)
+ 993: 48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 992
+ Store 991(r044) 993
+ 995: 48(fvec4) Load 53(inF0)
+ 996: 48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 995
+ 997: 48(fvec4) VectorTimesScalar 996 268
+ Store 994(r045) 997
+ 999: 48(fvec4) Load 53(inF0)
+ 1000: 48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 999
+ Store 998(r046) 1000
+ 1002: 48(fvec4) Load 53(inF0)
+ 1003: 48(fvec4) Load 54(inF1)
+ 1004: 48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 1002 1003
+ Store 1001(r047) 1004
+ 1006: 48(fvec4) Load 53(inF0)
+ 1007: 48(fvec4) Load 54(inF1)
+ 1008: 48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 1006 1007
+ Store 1005(r048) 1008
+ 1010: 48(fvec4) Load 53(inF0)
+ 1011: 48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 1010
+ Store 1009(r049) 1011
+ 1013: 48(fvec4) Load 53(inF0)
+ 1014: 48(fvec4) Load 54(inF1)
+ 1015: 48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1013 1014
+ Store 1012(r050) 1015
+ 1017: 48(fvec4) Load 53(inF0)
+ 1018: 48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1017
+ Store 1016(r051) 1018
+ 1020: 48(fvec4) Load 53(inF0)
+ 1021: 48(fvec4) CompositeConstruct 289 289 289 289
+ 1022: 48(fvec4) FDiv 1021 1020
+ Store 1019(r052) 1022
+ 1024: 48(fvec4) Load 53(inF0)
+ 1025: 48(fvec4) Load 54(inF1)
+ 1026: 48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1024 1025
+ Store 1023(r053) 1026
+ 1028: 48(fvec4) Load 53(inF0)
+ 1029: 48(fvec4) Load 54(inF1)
+ 1030: 48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1028 1029 530
+ Store 1027(r054) 1030
+ 1033: 50(ivec4) BitReverse 1032
+ Store 1031(r055) 1033
+ 1035: 48(fvec4) Load 53(inF0)
+ 1036: 48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1035
+ Store 1034(r056) 1036
+ 1038: 48(fvec4) Load 53(inF0)
+ 1039: 48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1038
+ Store 1037(r057) 1039
1041: 48(fvec4) Load 53(inF0)
- 1042: 48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1041
- Store 55(inF2) 1042
- 1044: 48(fvec4) Load 53(inF0)
- 1045: 48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1044
- Store 1043(r061) 1045
- 1047: 48(fvec4) Load 53(inF0)
- 1048: 48(fvec4) Load 54(inF1)
- 1049: 48(fvec4) Load 55(inF2)
- 1050: 48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1047 1048 1049
- Store 1046(r062) 1050
- 1052: 48(fvec4) Load 53(inF0)
- 1053: 48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1052
- Store 1051(r063) 1053
- 1055: 48(fvec4) Load 53(inF0)
- 1056: 48(fvec4) Load 54(inF1)
- 1057: 48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1055 1056
- Store 1054(r064) 1057
+ 1042: 48(fvec4) CompositeConstruct 139 139 139 139
+ 1043: 48(fvec4) CompositeConstruct 289 289 289 289
+ 1044: 48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1041 1042 1043
+ Store 1040(r058) 1044
+ 1046: 48(fvec4) Load 53(inF0)
+ 1047: 48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1046
+ Store 1045(r059) 1047
+ 1049: 48(fvec4) Load 53(inF0)
+ 1050: 48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1049
+ Store 1048(r060) 1050
+ 1051: 48(fvec4) Load 53(inF0)
+ 1052: 48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1051
+ Store 54(inF1) 1052
+ 1053: 48(fvec4) Load 53(inF0)
+ 1054: 48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1053
+ Store 55(inF2) 1054
+ 1056: 48(fvec4) Load 53(inF0)
+ 1057: 48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1056
+ Store 1055(r061) 1057
1059: 48(fvec4) Load 53(inF0)
- 1060: 48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1059
- Store 1058(r065) 1060
- 1062: 48(fvec4) Load 53(inF0)
- 1063: 48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1062
- Store 1061(r066) 1063
- 1065: 48(fvec4) Load 53(inF0)
- 1066: 48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1065
- Store 1064(r067) 1066
- ReturnValue 1068
+ 1060: 48(fvec4) Load 54(inF1)
+ 1061: 48(fvec4) Load 55(inF2)
+ 1062: 48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1059 1060 1061
+ Store 1058(r062) 1062
+ 1064: 48(fvec4) Load 53(inF0)
+ 1065: 48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1064
+ Store 1063(r063) 1065
+ 1067: 48(fvec4) Load 53(inF0)
+ 1068: 48(fvec4) Load 54(inF1)
+ 1069: 48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1067 1068
+ Store 1066(r064) 1069
+ 1071: 48(fvec4) Load 53(inF0)
+ 1072: 48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1071
+ Store 1070(r065) 1072
+ 1074: 48(fvec4) Load 53(inF0)
+ 1075: 48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1074
+ Store 1073(r066) 1075
+ 1077: 48(fvec4) Load 53(inF0)
+ 1078: 48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1077
+ Store 1076(r067) 1078
+ ReturnValue 1080
FunctionEnd
66(PixelShaderFunction2x2(mf22;mf22;mf22;): 60 Function None 62
63(inF0): 61(ptr) FunctionParameter
64(inF1): 61(ptr) FunctionParameter
65(inF2): 61(ptr) FunctionParameter
67: Label
- 1071(r000): 136(ptr) Variable Function
- 1074(r001): 61(ptr) Variable Function
- 1079(r003): 136(ptr) Variable Function
- 1082(r004): 61(ptr) Variable Function
- 1085(r005): 61(ptr) Variable Function
- 1088(r006): 61(ptr) Variable Function
- 1092(r007): 61(ptr) Variable Function
- 1103(r008): 61(ptr) Variable Function
- 1108(r009): 61(ptr) Variable Function
- 1111(r010): 61(ptr) Variable Function
- 1114(r011): 61(ptr) Variable Function
- 1117(r012): 61(ptr) Variable Function
- 1120(r013): 61(ptr) Variable Function
- 1123(r014): 61(ptr) Variable Function
- 1126(r015): 61(ptr) Variable Function
- 1129(r016): 61(ptr) Variable Function
- 1132(r017): 61(ptr) Variable Function
- 1135(r018): 7(ptr) Variable Function
- 1138(r019): 61(ptr) Variable Function
- 1141(R020): 61(ptr) Variable Function
- 1144(r021): 61(ptr) Variable Function
- 1147(r022): 61(ptr) Variable Function
- 1157(r023): 61(ptr) Variable Function
- 1160(r024): 61(ptr) Variable Function
- 1166(r025): 61(ptr) Variable Function
- 1169(r026): 61(ptr) Variable Function
- 1173(r026a): 61(ptr) Variable Function
- 1178(r027): 61(ptr) Variable Function
- 1181(r028): 61(ptr) Variable Function
- 1185(r029): 61(ptr) Variable Function
- 1188(r030): 61(ptr) Variable Function
- 1192(r031): 61(ptr) Variable Function
- 1196(r032): 61(ptr) Variable Function
- 1200(r033): 61(ptr) Variable Function
- 1203(r034): 61(ptr) Variable Function
- 1206(r035): 61(ptr) Variable Function
- 1209(r036): 61(ptr) Variable Function
- 1214(r037): 61(ptr) Variable Function
- 1217(r038): 61(ptr) Variable Function
- 1224(r039): 61(ptr) Variable Function
- 1227(r049): 61(ptr) Variable Function
- 1232(r041): 61(ptr) Variable Function
- 1235(r042): 61(ptr) Variable Function
- 1239(r043): 61(ptr) Variable Function
- 1242(r044): 61(ptr) Variable Function
- 1247(r046): 61(ptr) Variable Function
- 1072: 60 Load 63(inF0)
- 1073: 135(bool) All 1072
- Store 1071(r000) 1073
- 1075: 60 Load 63(inF0)
- 1076: 60 ExtInst 1(GLSL.std.450) 4(FAbs) 1075
- Store 1074(r001) 1076
- 1077: 60 Load 63(inF0)
- 1078: 60 ExtInst 1(GLSL.std.450) 17(Acos) 1077
- 1080: 60 Load 63(inF0)
- 1081: 135(bool) Any 1080
- Store 1079(r003) 1081
- 1083: 60 Load 63(inF0)
- 1084: 60 ExtInst 1(GLSL.std.450) 16(Asin) 1083
- Store 1082(r004) 1084
- 1086: 60 Load 63(inF0)
- 1087: 60 ExtInst 1(GLSL.std.450) 18(Atan) 1086
- Store 1085(r005) 1087
+ 1083(r000): 136(ptr) Variable Function
+ 1088(r001): 61(ptr) Variable Function
+ 1093(r003): 136(ptr) Variable Function
+ 1097(r004): 61(ptr) Variable Function
+ 1100(r005): 61(ptr) Variable Function
+ 1103(r006): 61(ptr) Variable Function
+ 1107(r007): 61(ptr) Variable Function
+ 1117(r008): 61(ptr) Variable Function
+ 1122(r009): 61(ptr) Variable Function
+ 1125(r010): 61(ptr) Variable Function
+ 1128(r011): 61(ptr) Variable Function
+ 1131(r012): 61(ptr) Variable Function
+ 1134(r013): 61(ptr) Variable Function
+ 1137(r014): 61(ptr) Variable Function
+ 1140(r015): 61(ptr) Variable Function
+ 1143(r016): 61(ptr) Variable Function
+ 1146(r017): 61(ptr) Variable Function
+ 1149(r018): 7(ptr) Variable Function
+ 1152(r019): 61(ptr) Variable Function
+ 1155(R020): 61(ptr) Variable Function
+ 1158(r021): 61(ptr) Variable Function
+ 1161(r022): 61(ptr) Variable Function
+ 1171(r023): 61(ptr) Variable Function
+ 1174(r025): 61(ptr) Variable Function
+ 1177(r026): 61(ptr) Variable Function
+ 1181(r026a): 61(ptr) Variable Function
+ 1186(r027): 61(ptr) Variable Function
+ 1189(r028): 61(ptr) Variable Function
+ 1193(r029): 61(ptr) Variable Function
+ 1196(r030): 61(ptr) Variable Function
+ 1200(r031): 61(ptr) Variable Function
+ 1204(r032): 61(ptr) Variable Function
+ 1208(r033): 61(ptr) Variable Function
+ 1211(r034): 61(ptr) Variable Function
+ 1214(r035): 61(ptr) Variable Function
+ 1217(r036): 61(ptr) Variable Function
+ 1222(r037): 61(ptr) Variable Function
+ 1225(r038): 61(ptr) Variable Function
+ 1232(r039): 61(ptr) Variable Function
+ 1235(r049): 61(ptr) Variable Function
+ 1240(r041): 61(ptr) Variable Function
+ 1243(r042): 61(ptr) Variable Function
+ 1247(r043): 61(ptr) Variable Function
+ 1250(r044): 61(ptr) Variable Function
+ 1255(r046): 61(ptr) Variable Function
+ 1084: 60 Load 63(inF0)
+ 1086: 1085 FOrdNotEqual 1084 139
+ 1087: 135(bool) All 1086
+ Store 1083(r000) 1087
1089: 60 Load 63(inF0)
- 1090: 60 Load 64(inF1)
- 1091: 60 ExtInst 1(GLSL.std.450) 25(Atan2) 1089 1090
- Store 1088(r006) 1091
- 1093: 60 Load 63(inF0)
- 1094: 60 ExtInst 1(GLSL.std.450) 9(Ceil) 1093
- Store 1092(r007) 1094
- 1095: 60 Load 63(inF0)
- 1098: 1097 FOrdLessThan 1095 1096
- 1099: 135(bool) Any 1098
- SelectionMerge 1101 None
- BranchConditional 1099 1100 1101
- 1100: Label
- Kill
- 1101: Label
+ 1090: 60 ExtInst 1(GLSL.std.450) 4(FAbs) 1089
+ Store 1088(r001) 1090
+ 1091: 60 Load 63(inF0)
+ 1092: 60 ExtInst 1(GLSL.std.450) 17(Acos) 1091
+ 1094: 60 Load 63(inF0)
+ 1095: 1085 FOrdNotEqual 1094 139
+ 1096: 135(bool) Any 1095
+ Store 1093(r003) 1096
+ 1098: 60 Load 63(inF0)
+ 1099: 60 ExtInst 1(GLSL.std.450) 16(Asin) 1098
+ Store 1097(r004) 1099
+ 1101: 60 Load 63(inF0)
+ 1102: 60 ExtInst 1(GLSL.std.450) 18(Atan) 1101
+ Store 1100(r005) 1102
1104: 60 Load 63(inF0)
1105: 60 Load 64(inF1)
- 1106: 60 Load 65(inF2)
- 1107: 60 ExtInst 1(GLSL.std.450) 43(FClamp) 1104 1105 1106
- Store 1103(r008) 1107
- 1109: 60 Load 63(inF0)
- 1110: 60 ExtInst 1(GLSL.std.450) 14(Cos) 1109
- Store 1108(r009) 1110
- 1112: 60 Load 63(inF0)
- 1113: 60 ExtInst 1(GLSL.std.450) 20(Cosh) 1112
- Store 1111(r010) 1113
- 1115: 60 Load 63(inF0)
- 1116: 60 DPdx 1115
- Store 1114(r011) 1116
+ 1106: 60 ExtInst 1(GLSL.std.450) 25(Atan2) 1104 1105
+ Store 1103(r006) 1106
+ 1108: 60 Load 63(inF0)
+ 1109: 60 ExtInst 1(GLSL.std.450) 9(Ceil) 1108
+ Store 1107(r007) 1109
+ 1110: 60 Load 63(inF0)
+ 1112: 1085 FOrdLessThan 1110 1111
+ 1113: 135(bool) Any 1112
+ SelectionMerge 1115 None
+ BranchConditional 1113 1114 1115
+ 1114: Label
+ Kill
+ 1115: Label
1118: 60 Load 63(inF0)
- 1119: 60 DPdxCoarse 1118
- Store 1117(r012) 1119
- 1121: 60 Load 63(inF0)
- 1122: 60 DPdxFine 1121
- Store 1120(r013) 1122
- 1124: 60 Load 63(inF0)
- 1125: 60 DPdy 1124
- Store 1123(r014) 1125
- 1127: 60 Load 63(inF0)
- 1128: 60 DPdyCoarse 1127
- Store 1126(r015) 1128
- 1130: 60 Load 63(inF0)
- 1131: 60 DPdyFine 1130
- Store 1129(r016) 1131
- 1133: 60 Load 63(inF0)
- 1134: 60 ExtInst 1(GLSL.std.450) 12(Degrees) 1133
- Store 1132(r017) 1134
- 1136: 60 Load 63(inF0)
- 1137: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1136
- Store 1135(r018) 1137
- 1139: 60 Load 63(inF0)
- 1140: 60 ExtInst 1(GLSL.std.450) 27(Exp) 1139
- Store 1138(r019) 1140
- 1142: 60 Load 63(inF0)
- 1143: 60 ExtInst 1(GLSL.std.450) 29(Exp2) 1142
- Store 1141(R020) 1143
- 1145: 60 Load 63(inF0)
- 1146: 60 ExtInst 1(GLSL.std.450) 8(Floor) 1145
- Store 1144(r021) 1146
- 1148: 60 Load 63(inF0)
- 1149: 60 Load 64(inF1)
- 1150: 24(fvec2) CompositeExtract 1148 0
- 1151: 24(fvec2) CompositeExtract 1149 0
- 1152: 24(fvec2) FMod 1150 1151
- 1153: 24(fvec2) CompositeExtract 1148 1
- 1154: 24(fvec2) CompositeExtract 1149 1
- 1155: 24(fvec2) FMod 1153 1154
- 1156: 60 CompositeConstruct 1152 1155
- Store 1147(r022) 1156
- 1158: 60 Load 63(inF0)
- 1159: 60 ExtInst 1(GLSL.std.450) 10(Fract) 1158
- Store 1157(r023) 1159
- 1161: 60 Load 63(inF0)
- 1163:1162(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1161
- 1164: 356(ivec2) CompositeExtract 1163 1
- Store 64(inF1) 1164
- 1165: 60 CompositeExtract 1163 0
- Store 1160(r024) 1165
- 1167: 60 Load 63(inF0)
- 1168: 60 Fwidth 1167
- Store 1166(r025) 1168
- 1170: 60 Load 63(inF0)
- 1171: 60 Load 64(inF1)
- 1172: 60 ExtInst 1(GLSL.std.450) 53(Ldexp) 1170 1171
- Store 1169(r026) 1172
- 1174: 60 Load 63(inF0)
- 1175: 60 Load 64(inF1)
- 1176: 60 Load 65(inF2)
- 1177: 60 ExtInst 1(GLSL.std.450) 46(FMix) 1174 1175 1176
- Store 1173(r026a) 1177
- 1179: 60 Load 63(inF0)
- 1180: 60 ExtInst 1(GLSL.std.450) 28(Log) 1179
- Store 1178(r027) 1180
+ 1119: 60 Load 64(inF1)
+ 1120: 60 Load 65(inF2)
+ 1121: 60 ExtInst 1(GLSL.std.450) 43(FClamp) 1118 1119 1120
+ Store 1117(r008) 1121
+ 1123: 60 Load 63(inF0)
+ 1124: 60 ExtInst 1(GLSL.std.450) 14(Cos) 1123
+ Store 1122(r009) 1124
+ 1126: 60 Load 63(inF0)
+ 1127: 60 ExtInst 1(GLSL.std.450) 20(Cosh) 1126
+ Store 1125(r010) 1127
+ 1129: 60 Load 63(inF0)
+ 1130: 60 DPdx 1129
+ Store 1128(r011) 1130
+ 1132: 60 Load 63(inF0)
+ 1133: 60 DPdxCoarse 1132
+ Store 1131(r012) 1133
+ 1135: 60 Load 63(inF0)
+ 1136: 60 DPdxFine 1135
+ Store 1134(r013) 1136
+ 1138: 60 Load 63(inF0)
+ 1139: 60 DPdy 1138
+ Store 1137(r014) 1139
+ 1141: 60 Load 63(inF0)
+ 1142: 60 DPdyCoarse 1141
+ Store 1140(r015) 1142
+ 1144: 60 Load 63(inF0)
+ 1145: 60 DPdyFine 1144
+ Store 1143(r016) 1145
+ 1147: 60 Load 63(inF0)
+ 1148: 60 ExtInst 1(GLSL.std.450) 12(Degrees) 1147
+ Store 1146(r017) 1148
+ 1150: 60 Load 63(inF0)
+ 1151: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1150
+ Store 1149(r018) 1151
+ 1153: 60 Load 63(inF0)
+ 1154: 60 ExtInst 1(GLSL.std.450) 27(Exp) 1153
+ Store 1152(r019) 1154
+ 1156: 60 Load 63(inF0)
+ 1157: 60 ExtInst 1(GLSL.std.450) 29(Exp2) 1156
+ Store 1155(R020) 1157
+ 1159: 60 Load 63(inF0)
+ 1160: 60 ExtInst 1(GLSL.std.450) 8(Floor) 1159
+ Store 1158(r021) 1160
+ 1162: 60 Load 63(inF0)
+ 1163: 60 Load 64(inF1)
+ 1164: 24(fvec2) CompositeExtract 1162 0
+ 1165: 24(fvec2) CompositeExtract 1163 0
+ 1166: 24(fvec2) FMod 1164 1165
+ 1167: 24(fvec2) CompositeExtract 1162 1
+ 1168: 24(fvec2) CompositeExtract 1163 1
+ 1169: 24(fvec2) FMod 1167 1168
+ 1170: 60 CompositeConstruct 1166 1169
+ Store 1161(r022) 1170
+ 1172: 60 Load 63(inF0)
+ 1173: 60 ExtInst 1(GLSL.std.450) 10(Fract) 1172
+ Store 1171(r023) 1173
+ 1175: 60 Load 63(inF0)
+ 1176: 60 Fwidth 1175
+ Store 1174(r025) 1176
+ 1178: 60 Load 63(inF0)
+ 1179: 60 Load 64(inF1)
+ 1180: 60 ExtInst 1(GLSL.std.450) 53(Ldexp) 1178 1179
+ Store 1177(r026) 1180
1182: 60 Load 63(inF0)
- 1183: 60 ExtInst 1(GLSL.std.450) 30(Log2) 1182
- 1184: 60 MatrixTimesScalar 1183 266
- Store 1181(r028) 1184
- 1186: 60 Load 63(inF0)
- 1187: 60 ExtInst 1(GLSL.std.450) 30(Log2) 1186
- Store 1185(r029) 1187
- 1189: 60 Load 63(inF0)
- 1190: 60 Load 64(inF1)
- 1191: 60 ExtInst 1(GLSL.std.450) 40(FMax) 1189 1190
- Store 1188(r030) 1191
- 1193: 60 Load 63(inF0)
- 1194: 60 Load 64(inF1)
- 1195: 60 ExtInst 1(GLSL.std.450) 37(FMin) 1193 1194
- Store 1192(r031) 1195
+ 1183: 60 Load 64(inF1)
+ 1184: 60 Load 65(inF2)
+ 1185: 60 ExtInst 1(GLSL.std.450) 46(FMix) 1182 1183 1184
+ Store 1181(r026a) 1185
+ 1187: 60 Load 63(inF0)
+ 1188: 60 ExtInst 1(GLSL.std.450) 28(Log) 1187
+ Store 1186(r027) 1188
+ 1190: 60 Load 63(inF0)
+ 1191: 60 ExtInst 1(GLSL.std.450) 30(Log2) 1190
+ 1192: 60 MatrixTimesScalar 1191 268
+ Store 1189(r028) 1192
+ 1194: 60 Load 63(inF0)
+ 1195: 60 ExtInst 1(GLSL.std.450) 30(Log2) 1194
+ Store 1193(r029) 1195
1197: 60 Load 63(inF0)
1198: 60 Load 64(inF1)
- 1199: 60 ExtInst 1(GLSL.std.450) 26(Pow) 1197 1198
- Store 1196(r032) 1199
+ 1199: 60 ExtInst 1(GLSL.std.450) 40(FMax) 1197 1198
+ Store 1196(r030) 1199
1201: 60 Load 63(inF0)
- 1202: 60 ExtInst 1(GLSL.std.450) 11(Radians) 1201
- Store 1200(r033) 1202
- 1204: 60 Load 63(inF0)
- 1205: 60 ExtInst 1(GLSL.std.450) 2(RoundEven) 1204
- Store 1203(r034) 1205
- 1207: 60 Load 63(inF0)
- 1208: 60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1207
- Store 1206(r035) 1208
- 1210: 60 Load 63(inF0)
- 1211: 24(fvec2) CompositeConstruct 179 179
- 1212: 24(fvec2) CompositeConstruct 287 287
- 1213: 60 ExtInst 1(GLSL.std.450) 43(FClamp) 1210 1211 1212
- Store 1209(r036) 1213
+ 1202: 60 Load 64(inF1)
+ 1203: 60 ExtInst 1(GLSL.std.450) 37(FMin) 1201 1202
+ Store 1200(r031) 1203
+ 1205: 60 Load 63(inF0)
+ 1206: 60 Load 64(inF1)
+ 1207: 60 ExtInst 1(GLSL.std.450) 26(Pow) 1205 1206
+ Store 1204(r032) 1207
+ 1209: 60 Load 63(inF0)
+ 1210: 60 ExtInst 1(GLSL.std.450) 11(Radians) 1209
+ Store 1208(r033) 1210
+ 1212: 60 Load 63(inF0)
+ 1213: 60 ExtInst 1(GLSL.std.450) 2(RoundEven) 1212
+ Store 1211(r034) 1213
1215: 60 Load 63(inF0)
- 1216: 60 ExtInst 1(GLSL.std.450) 6(FSign) 1215
- Store 1214(r037) 1216
+ 1216: 60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1215
+ Store 1214(r035) 1216
1218: 60 Load 63(inF0)
- 1219: 60 ExtInst 1(GLSL.std.450) 13(Sin) 1218
- Store 1217(r038) 1219
- 1220: 60 Load 63(inF0)
- 1221: 60 ExtInst 1(GLSL.std.450) 13(Sin) 1220
- Store 64(inF1) 1221
- 1222: 60 Load 63(inF0)
- 1223: 60 ExtInst 1(GLSL.std.450) 14(Cos) 1222
- Store 65(inF2) 1223
- 1225: 60 Load 63(inF0)
- 1226: 60 ExtInst 1(GLSL.std.450) 19(Sinh) 1225
- Store 1224(r039) 1226
+ 1219: 24(fvec2) CompositeConstruct 139 139
+ 1220: 24(fvec2) CompositeConstruct 289 289
+ 1221: 60 ExtInst 1(GLSL.std.450) 43(FClamp) 1218 1219 1220
+ Store 1217(r036) 1221
+ 1223: 60 Load 63(inF0)
+ 1224: 60 ExtInst 1(GLSL.std.450) 6(FSign) 1223
+ Store 1222(r037) 1224
+ 1226: 60 Load 63(inF0)
+ 1227: 60 ExtInst 1(GLSL.std.450) 13(Sin) 1226
+ Store 1225(r038) 1227
1228: 60 Load 63(inF0)
- 1229: 60 Load 64(inF1)
- 1230: 60 Load 65(inF2)
- 1231: 60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1228 1229 1230
- Store 1227(r049) 1231
+ 1229: 60 ExtInst 1(GLSL.std.450) 13(Sin) 1228
+ Store 64(inF1) 1229
+ 1230: 60 Load 63(inF0)
+ 1231: 60 ExtInst 1(GLSL.std.450) 14(Cos) 1230
+ Store 65(inF2) 1231
1233: 60 Load 63(inF0)
- 1234: 60 ExtInst 1(GLSL.std.450) 31(Sqrt) 1233
- Store 1232(r041) 1234
+ 1234: 60 ExtInst 1(GLSL.std.450) 19(Sinh) 1233
+ Store 1232(r039) 1234
1236: 60 Load 63(inF0)
1237: 60 Load 64(inF1)
- 1238: 60 ExtInst 1(GLSL.std.450) 48(Step) 1236 1237
- Store 1235(r042) 1238
- 1240: 60 Load 63(inF0)
- 1241: 60 ExtInst 1(GLSL.std.450) 15(Tan) 1240
- Store 1239(r043) 1241
- 1243: 60 Load 63(inF0)
- 1244: 60 ExtInst 1(GLSL.std.450) 21(Tanh) 1243
- Store 1242(r044) 1244
- 1245: 60 Load 63(inF0)
- 1246: 60 Transpose 1245
+ 1238: 60 Load 65(inF2)
+ 1239: 60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1236 1237 1238
+ Store 1235(r049) 1239
+ 1241: 60 Load 63(inF0)
+ 1242: 60 ExtInst 1(GLSL.std.450) 31(Sqrt) 1241
+ Store 1240(r041) 1242
+ 1244: 60 Load 63(inF0)
+ 1245: 60 Load 64(inF1)
+ 1246: 60 ExtInst 1(GLSL.std.450) 48(Step) 1244 1245
+ Store 1243(r042) 1246
1248: 60 Load 63(inF0)
- 1249: 60 ExtInst 1(GLSL.std.450) 3(Trunc) 1248
- Store 1247(r046) 1249
- ReturnValue 1251
+ 1249: 60 ExtInst 1(GLSL.std.450) 15(Tan) 1248
+ Store 1247(r043) 1249
+ 1251: 60 Load 63(inF0)
+ 1252: 60 ExtInst 1(GLSL.std.450) 21(Tanh) 1251
+ Store 1250(r044) 1252
+ 1253: 60 Load 63(inF0)
+ 1254: 60 Transpose 1253
+ 1256: 60 Load 63(inF0)
+ 1257: 60 ExtInst 1(GLSL.std.450) 3(Trunc) 1256
+ Store 1255(r046) 1257
+ ReturnValue 1259
FunctionEnd
74(PixelShaderFunction3x3(mf33;mf33;mf33;): 68 Function None 70
71(inF0): 69(ptr) FunctionParameter
72(inF1): 69(ptr) FunctionParameter
73(inF2): 69(ptr) FunctionParameter
75: Label
- 1254(r000): 136(ptr) Variable Function
- 1257(r001): 69(ptr) Variable Function
- 1262(r003): 136(ptr) Variable Function
- 1265(r004): 69(ptr) Variable Function
- 1268(r005): 69(ptr) Variable Function
- 1271(r006): 69(ptr) Variable Function
- 1275(r007): 69(ptr) Variable Function
- 1286(r008): 69(ptr) Variable Function
- 1291(r009): 69(ptr) Variable Function
- 1294(r010): 69(ptr) Variable Function
- 1297(r011): 69(ptr) Variable Function
- 1300(r012): 69(ptr) Variable Function
- 1303(r013): 69(ptr) Variable Function
- 1306(r014): 69(ptr) Variable Function
- 1309(r015): 69(ptr) Variable Function
- 1312(r016): 69(ptr) Variable Function
- 1315(r017): 69(ptr) Variable Function
- 1318(r018): 7(ptr) Variable Function
- 1321(r019): 69(ptr) Variable Function
- 1324(R020): 69(ptr) Variable Function
- 1327(r021): 69(ptr) Variable Function
- 1330(r022): 69(ptr) Variable Function
- 1343(r023): 69(ptr) Variable Function
- 1346(r024): 69(ptr) Variable Function
- 1352(r025): 69(ptr) Variable Function
- 1355(r026): 69(ptr) Variable Function
- 1359(r026a): 69(ptr) Variable Function
- 1364(r027): 69(ptr) Variable Function
- 1367(r028): 69(ptr) Variable Function
- 1371(r029): 69(ptr) Variable Function
- 1374(r030): 69(ptr) Variable Function
- 1378(r031): 69(ptr) Variable Function
- 1382(r032): 69(ptr) Variable Function
- 1386(r033): 69(ptr) Variable Function
- 1389(r034): 69(ptr) Variable Function
- 1392(r035): 69(ptr) Variable Function
- 1395(r036): 69(ptr) Variable Function
- 1400(r037): 69(ptr) Variable Function
- 1403(r038): 69(ptr) Variable Function
- 1410(r039): 69(ptr) Variable Function
- 1413(r049): 69(ptr) Variable Function
- 1418(r041): 69(ptr) Variable Function
- 1421(r042): 69(ptr) Variable Function
- 1425(r043): 69(ptr) Variable Function
- 1428(r044): 69(ptr) Variable Function
- 1433(r046): 69(ptr) Variable Function
- 1255: 68 Load 71(inF0)
- 1256: 135(bool) All 1255
- Store 1254(r000) 1256
- 1258: 68 Load 71(inF0)
- 1259: 68 ExtInst 1(GLSL.std.450) 4(FAbs) 1258
- Store 1257(r001) 1259
- 1260: 68 Load 71(inF0)
- 1261: 68 ExtInst 1(GLSL.std.450) 17(Acos) 1260
+ 1262(r000): 136(ptr) Variable Function
+ 1267(r001): 69(ptr) Variable Function
+ 1272(r003): 136(ptr) Variable Function
+ 1276(r004): 69(ptr) Variable Function
+ 1279(r005): 69(ptr) Variable Function
+ 1282(r006): 69(ptr) Variable Function
+ 1286(r007): 69(ptr) Variable Function
+ 1296(r008): 69(ptr) Variable Function
+ 1301(r009): 69(ptr) Variable Function
+ 1304(r010): 69(ptr) Variable Function
+ 1307(r011): 69(ptr) Variable Function
+ 1310(r012): 69(ptr) Variable Function
+ 1313(r013): 69(ptr) Variable Function
+ 1316(r014): 69(ptr) Variable Function
+ 1319(r015): 69(ptr) Variable Function
+ 1322(r016): 69(ptr) Variable Function
+ 1325(r017): 69(ptr) Variable Function
+ 1328(r018): 7(ptr) Variable Function
+ 1331(r019): 69(ptr) Variable Function
+ 1334(R020): 69(ptr) Variable Function
+ 1337(r021): 69(ptr) Variable Function
+ 1340(r022): 69(ptr) Variable Function
+ 1353(r023): 69(ptr) Variable Function
+ 1356(r025): 69(ptr) Variable Function
+ 1359(r026): 69(ptr) Variable Function
+ 1363(r026a): 69(ptr) Variable Function
+ 1368(r027): 69(ptr) Variable Function
+ 1371(r028): 69(ptr) Variable Function
+ 1375(r029): 69(ptr) Variable Function
+ 1378(r030): 69(ptr) Variable Function
+ 1382(r031): 69(ptr) Variable Function
+ 1386(r032): 69(ptr) Variable Function
+ 1390(r033): 69(ptr) Variable Function
+ 1393(r034): 69(ptr) Variable Function
+ 1396(r035): 69(ptr) Variable Function
+ 1399(r036): 69(ptr) Variable Function
+ 1404(r037): 69(ptr) Variable Function
+ 1407(r038): 69(ptr) Variable Function
+ 1414(r039): 69(ptr) Variable Function
+ 1417(r049): 69(ptr) Variable Function
+ 1422(r041): 69(ptr) Variable Function
+ 1425(r042): 69(ptr) Variable Function
+ 1429(r043): 69(ptr) Variable Function
+ 1432(r044): 69(ptr) Variable Function
+ 1437(r046): 69(ptr) Variable Function
1263: 68 Load 71(inF0)
- 1264: 135(bool) Any 1263
- Store 1262(r003) 1264
- 1266: 68 Load 71(inF0)
- 1267: 68 ExtInst 1(GLSL.std.450) 16(Asin) 1266
- Store 1265(r004) 1267
- 1269: 68 Load 71(inF0)
- 1270: 68 ExtInst 1(GLSL.std.450) 18(Atan) 1269
- Store 1268(r005) 1270
- 1272: 68 Load 71(inF0)
- 1273: 68 Load 72(inF1)
- 1274: 68 ExtInst 1(GLSL.std.450) 25(Atan2) 1272 1273
- Store 1271(r006) 1274
- 1276: 68 Load 71(inF0)
- 1277: 68 ExtInst 1(GLSL.std.450) 9(Ceil) 1276
- Store 1275(r007) 1277
- 1278: 68 Load 71(inF0)
- 1281: 1280 FOrdLessThan 1278 1279
- 1282: 135(bool) Any 1281
- SelectionMerge 1284 None
- BranchConditional 1282 1283 1284
- 1283: Label
- Kill
- 1284: Label
+ 1265: 1264 FOrdNotEqual 1263 139
+ 1266: 135(bool) All 1265
+ Store 1262(r000) 1266
+ 1268: 68 Load 71(inF0)
+ 1269: 68 ExtInst 1(GLSL.std.450) 4(FAbs) 1268
+ Store 1267(r001) 1269
+ 1270: 68 Load 71(inF0)
+ 1271: 68 ExtInst 1(GLSL.std.450) 17(Acos) 1270
+ 1273: 68 Load 71(inF0)
+ 1274: 1264 FOrdNotEqual 1273 139
+ 1275: 135(bool) Any 1274
+ Store 1272(r003) 1275
+ 1277: 68 Load 71(inF0)
+ 1278: 68 ExtInst 1(GLSL.std.450) 16(Asin) 1277
+ Store 1276(r004) 1278
+ 1280: 68 Load 71(inF0)
+ 1281: 68 ExtInst 1(GLSL.std.450) 18(Atan) 1280
+ Store 1279(r005) 1281
+ 1283: 68 Load 71(inF0)
+ 1284: 68 Load 72(inF1)
+ 1285: 68 ExtInst 1(GLSL.std.450) 25(Atan2) 1283 1284
+ Store 1282(r006) 1285
1287: 68 Load 71(inF0)
- 1288: 68 Load 72(inF1)
- 1289: 68 Load 73(inF2)
- 1290: 68 ExtInst 1(GLSL.std.450) 43(FClamp) 1287 1288 1289
- Store 1286(r008) 1290
- 1292: 68 Load 71(inF0)
- 1293: 68 ExtInst 1(GLSL.std.450) 14(Cos) 1292
- Store 1291(r009) 1293
- 1295: 68 Load 71(inF0)
- 1296: 68 ExtInst 1(GLSL.std.450) 20(Cosh) 1295
- Store 1294(r010) 1296
- 1298: 68 Load 71(inF0)
- 1299: 68 DPdx 1298
- Store 1297(r011) 1299
- 1301: 68 Load 71(inF0)
- 1302: 68 DPdxCoarse 1301
- Store 1300(r012) 1302
- 1304: 68 Load 71(inF0)
- 1305: 68 DPdxFine 1304
- Store 1303(r013) 1305
- 1307: 68 Load 71(inF0)
- 1308: 68 DPdy 1307
- Store 1306(r014) 1308
- 1310: 68 Load 71(inF0)
- 1311: 68 DPdyCoarse 1310
- Store 1309(r015) 1311
- 1313: 68 Load 71(inF0)
- 1314: 68 DPdyFine 1313
- Store 1312(r016) 1314
- 1316: 68 Load 71(inF0)
- 1317: 68 ExtInst 1(GLSL.std.450) 12(Degrees) 1316
- Store 1315(r017) 1317
- 1319: 68 Load 71(inF0)
- 1320: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1319
- Store 1318(r018) 1320
- 1322: 68 Load 71(inF0)
- 1323: 68 ExtInst 1(GLSL.std.450) 27(Exp) 1322
- Store 1321(r019) 1323
- 1325: 68 Load 71(inF0)
- 1326: 68 ExtInst 1(GLSL.std.450) 29(Exp2) 1325
- Store 1324(R020) 1326
- 1328: 68 Load 71(inF0)
- 1329: 68 ExtInst 1(GLSL.std.450) 8(Floor) 1328
- Store 1327(r021) 1329
- 1331: 68 Load 71(inF0)
- 1332: 68 Load 72(inF1)
- 1333: 36(fvec3) CompositeExtract 1331 0
- 1334: 36(fvec3) CompositeExtract 1332 0
- 1335: 36(fvec3) FMod 1333 1334
- 1336: 36(fvec3) CompositeExtract 1331 1
- 1337: 36(fvec3) CompositeExtract 1332 1
- 1338: 36(fvec3) FMod 1336 1337
- 1339: 36(fvec3) CompositeExtract 1331 2
- 1340: 36(fvec3) CompositeExtract 1332 2
- 1341: 36(fvec3) FMod 1339 1340
- 1342: 68 CompositeConstruct 1335 1338 1341
- Store 1330(r022) 1342
- 1344: 68 Load 71(inF0)
- 1345: 68 ExtInst 1(GLSL.std.450) 10(Fract) 1344
- Store 1343(r023) 1345
- 1347: 68 Load 71(inF0)
- 1349:1348(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1347
- 1350: 594(ivec3) CompositeExtract 1349 1
- Store 72(inF1) 1350
- 1351: 68 CompositeExtract 1349 0
- Store 1346(r024) 1351
- 1353: 68 Load 71(inF0)
- 1354: 68 Fwidth 1353
- Store 1352(r025) 1354
- 1356: 68 Load 71(inF0)
- 1357: 68 Load 72(inF1)
- 1358: 68 ExtInst 1(GLSL.std.450) 53(Ldexp) 1356 1357
- Store 1355(r026) 1358
+ 1288: 68 ExtInst 1(GLSL.std.450) 9(Ceil) 1287
+ Store 1286(r007) 1288
+ 1289: 68 Load 71(inF0)
+ 1291: 1264 FOrdLessThan 1289 1290
+ 1292: 135(bool) Any 1291
+ SelectionMerge 1294 None
+ BranchConditional 1292 1293 1294
+ 1293: Label
+ Kill
+ 1294: Label
+ 1297: 68 Load 71(inF0)
+ 1298: 68 Load 72(inF1)
+ 1299: 68 Load 73(inF2)
+ 1300: 68 ExtInst 1(GLSL.std.450) 43(FClamp) 1297 1298 1299
+ Store 1296(r008) 1300
+ 1302: 68 Load 71(inF0)
+ 1303: 68 ExtInst 1(GLSL.std.450) 14(Cos) 1302
+ Store 1301(r009) 1303
+ 1305: 68 Load 71(inF0)
+ 1306: 68 ExtInst 1(GLSL.std.450) 20(Cosh) 1305
+ Store 1304(r010) 1306
+ 1308: 68 Load 71(inF0)
+ 1309: 68 DPdx 1308
+ Store 1307(r011) 1309
+ 1311: 68 Load 71(inF0)
+ 1312: 68 DPdxCoarse 1311
+ Store 1310(r012) 1312
+ 1314: 68 Load 71(inF0)
+ 1315: 68 DPdxFine 1314
+ Store 1313(r013) 1315
+ 1317: 68 Load 71(inF0)
+ 1318: 68 DPdy 1317
+ Store 1316(r014) 1318
+ 1320: 68 Load 71(inF0)
+ 1321: 68 DPdyCoarse 1320
+ Store 1319(r015) 1321
+ 1323: 68 Load 71(inF0)
+ 1324: 68 DPdyFine 1323
+ Store 1322(r016) 1324
+ 1326: 68 Load 71(inF0)
+ 1327: 68 ExtInst 1(GLSL.std.450) 12(Degrees) 1326
+ Store 1325(r017) 1327
+ 1329: 68 Load 71(inF0)
+ 1330: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1329
+ Store 1328(r018) 1330
+ 1332: 68 Load 71(inF0)
+ 1333: 68 ExtInst 1(GLSL.std.450) 27(Exp) 1332
+ Store 1331(r019) 1333
+ 1335: 68 Load 71(inF0)
+ 1336: 68 ExtInst 1(GLSL.std.450) 29(Exp2) 1335
+ Store 1334(R020) 1336
+ 1338: 68 Load 71(inF0)
+ 1339: 68 ExtInst 1(GLSL.std.450) 8(Floor) 1338
+ Store 1337(r021) 1339
+ 1341: 68 Load 71(inF0)
+ 1342: 68 Load 72(inF1)
+ 1343: 36(fvec3) CompositeExtract 1341 0
+ 1344: 36(fvec3) CompositeExtract 1342 0
+ 1345: 36(fvec3) FMod 1343 1344
+ 1346: 36(fvec3) CompositeExtract 1341 1
+ 1347: 36(fvec3) CompositeExtract 1342 1
+ 1348: 36(fvec3) FMod 1346 1347
+ 1349: 36(fvec3) CompositeExtract 1341 2
+ 1350: 36(fvec3) CompositeExtract 1342 2
+ 1351: 36(fvec3) FMod 1349 1350
+ 1352: 68 CompositeConstruct 1345 1348 1351
+ Store 1340(r022) 1352
+ 1354: 68 Load 71(inF0)
+ 1355: 68 ExtInst 1(GLSL.std.450) 10(Fract) 1354
+ Store 1353(r023) 1355
+ 1357: 68 Load 71(inF0)
+ 1358: 68 Fwidth 1357
+ Store 1356(r025) 1358
1360: 68 Load 71(inF0)
1361: 68 Load 72(inF1)
- 1362: 68 Load 73(inF2)
- 1363: 68 ExtInst 1(GLSL.std.450) 46(FMix) 1360 1361 1362
- Store 1359(r026a) 1363
- 1365: 68 Load 71(inF0)
- 1366: 68 ExtInst 1(GLSL.std.450) 28(Log) 1365
- Store 1364(r027) 1366
- 1368: 68 Load 71(inF0)
- 1369: 68 ExtInst 1(GLSL.std.450) 30(Log2) 1368
- 1370: 68 MatrixTimesScalar 1369 266
- Store 1367(r028) 1370
+ 1362: 68 ExtInst 1(GLSL.std.450) 53(Ldexp) 1360 1361
+ Store 1359(r026) 1362
+ 1364: 68 Load 71(inF0)
+ 1365: 68 Load 72(inF1)
+ 1366: 68 Load 73(inF2)
+ 1367: 68 ExtInst 1(GLSL.std.450) 46(FMix) 1364 1365 1366
+ Store 1363(r026a) 1367
+ 1369: 68 Load 71(inF0)
+ 1370: 68 ExtInst 1(GLSL.std.450) 28(Log) 1369
+ Store 1368(r027) 1370
1372: 68 Load 71(inF0)
1373: 68 ExtInst 1(GLSL.std.450) 30(Log2) 1372
- Store 1371(r029) 1373
- 1375: 68 Load 71(inF0)
- 1376: 68 Load 72(inF1)
- 1377: 68 ExtInst 1(GLSL.std.450) 40(FMax) 1375 1376
- Store 1374(r030) 1377
+ 1374: 68 MatrixTimesScalar 1373 268
+ Store 1371(r028) 1374
+ 1376: 68 Load 71(inF0)
+ 1377: 68 ExtInst 1(GLSL.std.450) 30(Log2) 1376
+ Store 1375(r029) 1377
1379: 68 Load 71(inF0)
1380: 68 Load 72(inF1)
- 1381: 68 ExtInst 1(GLSL.std.450) 37(FMin) 1379 1380
- Store 1378(r031) 1381
+ 1381: 68 ExtInst 1(GLSL.std.450) 40(FMax) 1379 1380
+ Store 1378(r030) 1381
1383: 68 Load 71(inF0)
1384: 68 Load 72(inF1)
- 1385: 68 ExtInst 1(GLSL.std.450) 26(Pow) 1383 1384
- Store 1382(r032) 1385
+ 1385: 68 ExtInst 1(GLSL.std.450) 37(FMin) 1383 1384
+ Store 1382(r031) 1385
1387: 68 Load 71(inF0)
- 1388: 68 ExtInst 1(GLSL.std.450) 11(Radians) 1387
- Store 1386(r033) 1388
- 1390: 68 Load 71(inF0)
- 1391: 68 ExtInst 1(GLSL.std.450) 2(RoundEven) 1390
- Store 1389(r034) 1391
- 1393: 68 Load 71(inF0)
- 1394: 68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1393
- Store 1392(r035) 1394
- 1396: 68 Load 71(inF0)
- 1397: 36(fvec3) CompositeConstruct 179 179 179
- 1398: 36(fvec3) CompositeConstruct 287 287 287
- 1399: 68 ExtInst 1(GLSL.std.450) 43(FClamp) 1396 1397 1398
- Store 1395(r036) 1399
- 1401: 68 Load 71(inF0)
- 1402: 68 ExtInst 1(GLSL.std.450) 6(FSign) 1401
- Store 1400(r037) 1402
- 1404: 68 Load 71(inF0)
- 1405: 68 ExtInst 1(GLSL.std.450) 13(Sin) 1404
- Store 1403(r038) 1405
- 1406: 68 Load 71(inF0)
- 1407: 68 ExtInst 1(GLSL.std.450) 13(Sin) 1406
- Store 72(inF1) 1407
+ 1388: 68 Load 72(inF1)
+ 1389: 68 ExtInst 1(GLSL.std.450) 26(Pow) 1387 1388
+ Store 1386(r032) 1389
+ 1391: 68 Load 71(inF0)
+ 1392: 68 ExtInst 1(GLSL.std.450) 11(Radians) 1391
+ Store 1390(r033) 1392
+ 1394: 68 Load 71(inF0)
+ 1395: 68 ExtInst 1(GLSL.std.450) 2(RoundEven) 1394
+ Store 1393(r034) 1395
+ 1397: 68 Load 71(inF0)
+ 1398: 68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1397
+ Store 1396(r035) 1398
+ 1400: 68 Load 71(inF0)
+ 1401: 36(fvec3) CompositeConstruct 139 139 139
+ 1402: 36(fvec3) CompositeConstruct 289 289 289
+ 1403: 68 ExtInst 1(GLSL.std.450) 43(FClamp) 1400 1401 1402
+ Store 1399(r036) 1403
+ 1405: 68 Load 71(inF0)
+ 1406: 68 ExtInst 1(GLSL.std.450) 6(FSign) 1405
+ Store 1404(r037) 1406
1408: 68 Load 71(inF0)
- 1409: 68 ExtInst 1(GLSL.std.450) 14(Cos) 1408
- Store 73(inF2) 1409
- 1411: 68 Load 71(inF0)
- 1412: 68 ExtInst 1(GLSL.std.450) 19(Sinh) 1411
- Store 1410(r039) 1412
- 1414: 68 Load 71(inF0)
- 1415: 68 Load 72(inF1)
- 1416: 68 Load 73(inF2)
- 1417: 68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1414 1415 1416
- Store 1413(r049) 1417
- 1419: 68 Load 71(inF0)
- 1420: 68 ExtInst 1(GLSL.std.450) 31(Sqrt) 1419
- Store 1418(r041) 1420
- 1422: 68 Load 71(inF0)
- 1423: 68 Load 72(inF1)
- 1424: 68 ExtInst 1(GLSL.std.450) 48(Step) 1422 1423
- Store 1421(r042) 1424
+ 1409: 68 ExtInst 1(GLSL.std.450) 13(Sin) 1408
+ Store 1407(r038) 1409
+ 1410: 68 Load 71(inF0)
+ 1411: 68 ExtInst 1(GLSL.std.450) 13(Sin) 1410
+ Store 72(inF1) 1411
+ 1412: 68 Load 71(inF0)
+ 1413: 68 ExtInst 1(GLSL.std.450) 14(Cos) 1412
+ Store 73(inF2) 1413
+ 1415: 68 Load 71(inF0)
+ 1416: 68 ExtInst 1(GLSL.std.450) 19(Sinh) 1415
+ Store 1414(r039) 1416
+ 1418: 68 Load 71(inF0)
+ 1419: 68 Load 72(inF1)
+ 1420: 68 Load 73(inF2)
+ 1421: 68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1418 1419 1420
+ Store 1417(r049) 1421
+ 1423: 68 Load 71(inF0)
+ 1424: 68 ExtInst 1(GLSL.std.450) 31(Sqrt) 1423
+ Store 1422(r041) 1424
1426: 68 Load 71(inF0)
- 1427: 68 ExtInst 1(GLSL.std.450) 15(Tan) 1426
- Store 1425(r043) 1427
- 1429: 68 Load 71(inF0)
- 1430: 68 ExtInst 1(GLSL.std.450) 21(Tanh) 1429
- Store 1428(r044) 1430
- 1431: 68 Load 71(inF0)
- 1432: 68 Transpose 1431
- 1434: 68 Load 71(inF0)
- 1435: 68 ExtInst 1(GLSL.std.450) 3(Trunc) 1434
- Store 1433(r046) 1435
- ReturnValue 1437
+ 1427: 68 Load 72(inF1)
+ 1428: 68 ExtInst 1(GLSL.std.450) 48(Step) 1426 1427
+ Store 1425(r042) 1428
+ 1430: 68 Load 71(inF0)
+ 1431: 68 ExtInst 1(GLSL.std.450) 15(Tan) 1430
+ Store 1429(r043) 1431
+ 1433: 68 Load 71(inF0)
+ 1434: 68 ExtInst 1(GLSL.std.450) 21(Tanh) 1433
+ Store 1432(r044) 1434
+ 1435: 68 Load 71(inF0)
+ 1436: 68 Transpose 1435
+ 1438: 68 Load 71(inF0)
+ 1439: 68 ExtInst 1(GLSL.std.450) 3(Trunc) 1438
+ Store 1437(r046) 1439
+ ReturnValue 1441
FunctionEnd
82(PixelShaderFunction4x4(mf44;mf44;mf44;): 76 Function None 78
79(inF0): 77(ptr) FunctionParameter
80(inF1): 77(ptr) FunctionParameter
81(inF2): 77(ptr) FunctionParameter
83: Label
- 1440(r000): 136(ptr) Variable Function
- 1443(r001): 77(ptr) Variable Function
- 1448(r003): 136(ptr) Variable Function
- 1451(r004): 77(ptr) Variable Function
- 1454(r005): 77(ptr) Variable Function
- 1457(r006): 77(ptr) Variable Function
- 1461(r007): 77(ptr) Variable Function
- 1472(r008): 77(ptr) Variable Function
- 1477(r009): 77(ptr) Variable Function
- 1480(r010): 77(ptr) Variable Function
- 1483(r011): 77(ptr) Variable Function
- 1486(r012): 77(ptr) Variable Function
- 1489(r013): 77(ptr) Variable Function
- 1492(r014): 77(ptr) Variable Function
- 1495(r015): 77(ptr) Variable Function
- 1498(r016): 77(ptr) Variable Function
- 1501(r017): 77(ptr) Variable Function
- 1504(r018): 7(ptr) Variable Function
- 1507(r019): 77(ptr) Variable Function
- 1510(R020): 77(ptr) Variable Function
- 1513(r021): 77(ptr) Variable Function
- 1516(r022): 77(ptr) Variable Function
- 1532(r023): 77(ptr) Variable Function
- 1535(r024): 77(ptr) Variable Function
+ 1444(r000): 136(ptr) Variable Function
+ 1449(r001): 77(ptr) Variable Function
+ 1454(r003): 136(ptr) Variable Function
+ 1458(r004): 77(ptr) Variable Function
+ 1461(r005): 77(ptr) Variable Function
+ 1464(r006): 77(ptr) Variable Function
+ 1468(r007): 77(ptr) Variable Function
+ 1478(r008): 77(ptr) Variable Function
+ 1483(r009): 77(ptr) Variable Function
+ 1486(r010): 77(ptr) Variable Function
+ 1489(r011): 77(ptr) Variable Function
+ 1492(r012): 77(ptr) Variable Function
+ 1495(r013): 77(ptr) Variable Function
+ 1498(r014): 77(ptr) Variable Function
+ 1501(r015): 77(ptr) Variable Function
+ 1504(r016): 77(ptr) Variable Function
+ 1507(r017): 77(ptr) Variable Function
+ 1510(r018): 7(ptr) Variable Function
+ 1513(r019): 77(ptr) Variable Function
+ 1516(R020): 77(ptr) Variable Function
+ 1519(r021): 77(ptr) Variable Function
+ 1522(r022): 77(ptr) Variable Function
+ 1538(r023): 77(ptr) Variable Function
1541(r025): 77(ptr) Variable Function
1544(r026): 77(ptr) Variable Function
1548(r026a): 77(ptr) Variable Function
@@ -7990,107 +8000,103 @@ gl_FragCoord origin is upper left
1614(r043): 77(ptr) Variable Function
1617(r044): 77(ptr) Variable Function
1622(r046): 77(ptr) Variable Function
- 1441: 76 Load 79(inF0)
- 1442: 135(bool) All 1441
- Store 1440(r000) 1442
- 1444: 76 Load 79(inF0)
- 1445: 76 ExtInst 1(GLSL.std.450) 4(FAbs) 1444
- Store 1443(r001) 1445
- 1446: 76 Load 79(inF0)
- 1447: 76 ExtInst 1(GLSL.std.450) 17(Acos) 1446
- 1449: 76 Load 79(inF0)
- 1450: 135(bool) Any 1449
- Store 1448(r003) 1450
+ 1445: 76 Load 79(inF0)
+ 1447: 1446 FOrdNotEqual 1445 139
+ 1448: 135(bool) All 1447
+ Store 1444(r000) 1448
+ 1450: 76 Load 79(inF0)
+ 1451: 76 ExtInst 1(GLSL.std.450) 4(FAbs) 1450
+ Store 1449(r001) 1451
1452: 76 Load 79(inF0)
- 1453: 76 ExtInst 1(GLSL.std.450) 16(Asin) 1452
- Store 1451(r004) 1453
+ 1453: 76 ExtInst 1(GLSL.std.450) 17(Acos) 1452
1455: 76 Load 79(inF0)
- 1456: 76 ExtInst 1(GLSL.std.450) 18(Atan) 1455
- Store 1454(r005) 1456
- 1458: 76 Load 79(inF0)
- 1459: 76 Load 80(inF1)
- 1460: 76 ExtInst 1(GLSL.std.450) 25(Atan2) 1458 1459
- Store 1457(r006) 1460
+ 1456: 1446 FOrdNotEqual 1455 139
+ 1457: 135(bool) Any 1456
+ Store 1454(r003) 1457
+ 1459: 76 Load 79(inF0)
+ 1460: 76 ExtInst 1(GLSL.std.450) 16(Asin) 1459
+ Store 1458(r004) 1460
1462: 76 Load 79(inF0)
- 1463: 76 ExtInst 1(GLSL.std.450) 9(Ceil) 1462
- Store 1461(r007) 1463
- 1464: 76 Load 79(inF0)
- 1467: 1466 FOrdLessThan 1464 1465
- 1468: 135(bool) Any 1467
- SelectionMerge 1470 None
- BranchConditional 1468 1469 1470
- 1469: Label
+ 1463: 76 ExtInst 1(GLSL.std.450) 18(Atan) 1462
+ Store 1461(r005) 1463
+ 1465: 76 Load 79(inF0)
+ 1466: 76 Load 80(inF1)
+ 1467: 76 ExtInst 1(GLSL.std.450) 25(Atan2) 1465 1466
+ Store 1464(r006) 1467
+ 1469: 76 Load 79(inF0)
+ 1470: 76 ExtInst 1(GLSL.std.450) 9(Ceil) 1469
+ Store 1468(r007) 1470
+ 1471: 76 Load 79(inF0)
+ 1473: 1446 FOrdLessThan 1471 1472
+ 1474: 135(bool) Any 1473
+ SelectionMerge 1476 None
+ BranchConditional 1474 1475 1476
+ 1475: Label
Kill
- 1470: Label
- 1473: 76 Load 79(inF0)
- 1474: 76 Load 80(inF1)
- 1475: 76 Load 81(inF2)
- 1476: 76 ExtInst 1(GLSL.std.450) 43(FClamp) 1473 1474 1475
- Store 1472(r008) 1476
- 1478: 76 Load 79(inF0)
- 1479: 76 ExtInst 1(GLSL.std.450) 14(Cos) 1478
- Store 1477(r009) 1479
- 1481: 76 Load 79(inF0)
- 1482: 76 ExtInst 1(GLSL.std.450) 20(Cosh) 1481
- Store 1480(r010) 1482
+ 1476: Label
+ 1479: 76 Load 79(inF0)
+ 1480: 76 Load 80(inF1)
+ 1481: 76 Load 81(inF2)
+ 1482: 76 ExtInst 1(GLSL.std.450) 43(FClamp) 1479 1480 1481
+ Store 1478(r008) 1482
1484: 76 Load 79(inF0)
- 1485: 76 DPdx 1484
- Store 1483(r011) 1485
+ 1485: 76 ExtInst 1(GLSL.std.450) 14(Cos) 1484
+ Store 1483(r009) 1485
1487: 76 Load 79(inF0)
- 1488: 76 DPdxCoarse 1487
- Store 1486(r012) 1488
+ 1488: 76 ExtInst 1(GLSL.std.450) 20(Cosh) 1487
+ Store 1486(r010) 1488
1490: 76 Load 79(inF0)
- 1491: 76 DPdxFine 1490
- Store 1489(r013) 1491
+ 1491: 76 DPdx 1490
+ Store 1489(r011) 1491
1493: 76 Load 79(inF0)
- 1494: 76 DPdy 1493
- Store 1492(r014) 1494
+ 1494: 76 DPdxCoarse 1493
+ Store 1492(r012) 1494
1496: 76 Load 79(inF0)
- 1497: 76 DPdyCoarse 1496
- Store 1495(r015) 1497
+ 1497: 76 DPdxFine 1496
+ Store 1495(r013) 1497
1499: 76 Load 79(inF0)
- 1500: 76 DPdyFine 1499
- Store 1498(r016) 1500
+ 1500: 76 DPdy 1499
+ Store 1498(r014) 1500
1502: 76 Load 79(inF0)
- 1503: 76 ExtInst 1(GLSL.std.450) 12(Degrees) 1502
- Store 1501(r017) 1503
+ 1503: 76 DPdyCoarse 1502
+ Store 1501(r015) 1503
1505: 76 Load 79(inF0)
- 1506: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1505
- Store 1504(r018) 1506
+ 1506: 76 DPdyFine 1505
+ Store 1504(r016) 1506
1508: 76 Load 79(inF0)
- 1509: 76 ExtInst 1(GLSL.std.450) 27(Exp) 1508
- Store 1507(r019) 1509
+ 1509: 76 ExtInst 1(GLSL.std.450) 12(Degrees) 1508
+ Store 1507(r017) 1509
1511: 76 Load 79(inF0)
- 1512: 76 ExtInst 1(GLSL.std.450) 29(Exp2) 1511
- Store 1510(R020) 1512
+ 1512: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1511
+ Store 1510(r018) 1512
1514: 76 Load 79(inF0)
- 1515: 76 ExtInst 1(GLSL.std.450) 8(Floor) 1514
- Store 1513(r021) 1515
+ 1515: 76 ExtInst 1(GLSL.std.450) 27(Exp) 1514
+ Store 1513(r019) 1515
1517: 76 Load 79(inF0)
- 1518: 76 Load 80(inF1)
- 1519: 48(fvec4) CompositeExtract 1517 0
- 1520: 48(fvec4) CompositeExtract 1518 0
- 1521: 48(fvec4) FMod 1519 1520
- 1522: 48(fvec4) CompositeExtract 1517 1
- 1523: 48(fvec4) CompositeExtract 1518 1
- 1524: 48(fvec4) FMod 1522 1523
- 1525: 48(fvec4) CompositeExtract 1517 2
- 1526: 48(fvec4) CompositeExtract 1518 2
+ 1518: 76 ExtInst 1(GLSL.std.450) 29(Exp2) 1517
+ Store 1516(R020) 1518
+ 1520: 76 Load 79(inF0)
+ 1521: 76 ExtInst 1(GLSL.std.450) 8(Floor) 1520
+ Store 1519(r021) 1521
+ 1523: 76 Load 79(inF0)
+ 1524: 76 Load 80(inF1)
+ 1525: 48(fvec4) CompositeExtract 1523 0
+ 1526: 48(fvec4) CompositeExtract 1524 0
1527: 48(fvec4) FMod 1525 1526
- 1528: 48(fvec4) CompositeExtract 1517 3
- 1529: 48(fvec4) CompositeExtract 1518 3
+ 1528: 48(fvec4) CompositeExtract 1523 1
+ 1529: 48(fvec4) CompositeExtract 1524 1
1530: 48(fvec4) FMod 1528 1529
- 1531: 76 CompositeConstruct 1521 1524 1527 1530
- Store 1516(r022) 1531
- 1533: 76 Load 79(inF0)
- 1534: 76 ExtInst 1(GLSL.std.450) 10(Fract) 1533
- Store 1532(r023) 1534
- 1536: 76 Load 79(inF0)
- 1538:1537(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1536
- 1539: 840(ivec4) CompositeExtract 1538 1
- Store 80(inF1) 1539
- 1540: 76 CompositeExtract 1538 0
- Store 1535(r024) 1540
+ 1531: 48(fvec4) CompositeExtract 1523 2
+ 1532: 48(fvec4) CompositeExtract 1524 2
+ 1533: 48(fvec4) FMod 1531 1532
+ 1534: 48(fvec4) CompositeExtract 1523 3
+ 1535: 48(fvec4) CompositeExtract 1524 3
+ 1536: 48(fvec4) FMod 1534 1535
+ 1537: 76 CompositeConstruct 1527 1530 1533 1536
+ Store 1522(r022) 1537
+ 1539: 76 Load 79(inF0)
+ 1540: 76 ExtInst 1(GLSL.std.450) 10(Fract) 1539
+ Store 1538(r023) 1540
1542: 76 Load 79(inF0)
1543: 76 Fwidth 1542
Store 1541(r025) 1543
@@ -8108,7 +8114,7 @@ gl_FragCoord origin is upper left
Store 1553(r027) 1555
1557: 76 Load 79(inF0)
1558: 76 ExtInst 1(GLSL.std.450) 30(Log2) 1557
- 1559: 76 MatrixTimesScalar 1558 266
+ 1559: 76 MatrixTimesScalar 1558 268
Store 1556(r028) 1559
1561: 76 Load 79(inF0)
1562: 76 ExtInst 1(GLSL.std.450) 30(Log2) 1561
@@ -8135,8 +8141,8 @@ gl_FragCoord origin is upper left
1583: 76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1582
Store 1581(r035) 1583
1585: 76 Load 79(inF0)
- 1586: 48(fvec4) CompositeConstruct 179 179 179 179
- 1587: 48(fvec4) CompositeConstruct 287 287 287 287
+ 1586: 48(fvec4) CompositeConstruct 139 139 139 139
+ 1587: 48(fvec4) CompositeConstruct 289 289 289 289
1588: 76 ExtInst 1(GLSL.std.450) 43(FClamp) 1585 1586 1587
Store 1584(r036) 1588
1590: 76 Load 79(inF0)
@@ -8445,8 +8451,8 @@ gl_FragCoord origin is upper left
133(@main():131(PS_OUTPUT) Function None 132
134: Label
1806(ps_output): 1805(ptr) Variable Function
- 1809: 49(ptr) AccessChain 1806(ps_output) 1807
- Store 1809 1808
- 1810:131(PS_OUTPUT) Load 1806(ps_output)
- ReturnValue 1810
+ 1808: 49(ptr) AccessChain 1806(ps_output) 187
+ Store 1808 1807
+ 1809:131(PS_OUTPUT) Load 1806(ps_output)
+ ReturnValue 1809
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.lit.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.lit.frag.out
index affed169b60..a280db13da8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.lit.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.lit.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.lit.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(f1;f1;f1; ( temp void)
@@ -60,7 +60,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(f1;f1;f1; ( temp void)
@@ -118,7 +118,7 @@ gl_FragCoord origin is upper left
0:? 'm' (layout( location=2) in float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 52
Capability Shader
@@ -126,6 +126,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 37 40 43
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 12 "@PixelShaderFunction(f1;f1;f1;"
Name 9 "n_dot_l"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.comp.out
index 2c8b9157d3c..ce8947df0f1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.comp.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.negative.comp
-Shader version: 450
+Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:2 Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; ( temp float)
@@ -91,7 +91,7 @@ local_size = (1, 1, 1)
Linked compute stage:
-Shader version: 450
+Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:2 Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; ( temp float)
@@ -180,7 +180,7 @@ local_size = (1, 1, 1)
0:? 'inI0' (layout( location=3) in 4-component vector of int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 99
Capability Shader
@@ -188,6 +188,7 @@ local_size = (1, 1, 1)
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "ComputeShaderFunction" 76 79 82 86 89
ExecutionMode 4 LocalSize 1 1 1
+ Source HLSL 500
Name 4 "ComputeShaderFunction"
Name 15 "ComputeShaderFunctionS(f1;f1;f1;i1;"
Name 11 "inF0"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out
index 8f770c88aed..980cc96d02d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.frag.out
@@ -1,11 +1,10 @@
hlsl.intrinsics.negative.frag
-ERROR: 0:10: 'determinant' : no matching overloaded function found
-ERROR: 0:23: 'length' : ambiguous best function under implicit type conversion
+ERROR: 0:10: 'determinant' : ambiguous best function under implicit type conversion
ERROR: 0:25: 'normalize' : ambiguous best function under implicit type conversion
ERROR: 0:26: 'reflect' : ambiguous best function under implicit type conversion
ERROR: 0:27: 'refract' : ambiguous best function under implicit type conversion
ERROR: 0:28: 'refract' : no matching overloaded function found
-ERROR: 0:30: 'transpose' : no matching overloaded function found
+ERROR: 0:30: 'transpose' : ambiguous best function under implicit type conversion
ERROR: 0:39: 'GetRenderTargetSamplePosition' : no matching overloaded function found
ERROR: 0:46: 'asdouble' : double2 conversion not implemented
ERROR: 0:47: 'CheckAccessFullyMapped' : no matching overloaded function found
@@ -59,10 +58,10 @@ ERROR: 0:133: 'normalize' : no matching overloaded function found
ERROR: 0:133: 'reflect' : no matching overloaded function found
ERROR: 0:133: 'refract' : no matching overloaded function found
ERROR: 0:133: 'reversebits' : no matching overloaded function found
-ERROR: 60 compilation errors. No code generated.
+ERROR: 59 compilation errors. No code generated.
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:2 Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; ( temp float)
@@ -105,8 +104,9 @@ ERROR: node is still EOpNull!
0:9 0 (const int)
0:9 Constant:
0:9 3 (const int)
-0:10 Constant:
-0:10 0.000000
+0:10 determinant ( temp float)
+ERROR: node is still EOpNull!
+0:10 'inF0' ( in float)
0:12 direct index ( temp float)
0:12 unpackHalf2x16 ( temp 2-component vector of float)
0:12 Convert float to uint ( temp uint)
@@ -120,8 +120,7 @@ ERROR: node is still EOpNull!
0:14 Convert float to uint ( temp uint)
0:14 'inF0' ( in float)
0:23 length ( temp float)
-0:23 Construct vec2 ( in 2-component vector of float)
-0:23 'inF0' ( in float)
+0:23 'inF0' ( in float)
0:24 Function Call: msad4(u1;vu2;vu4; ( temp 4-component vector of uint)
0:24 Convert float to uint ( temp uint)
0:24 'inF0' ( in float)
@@ -152,8 +151,9 @@ ERROR: node is still EOpNull!
0:29 bitFieldReverse ( temp uint)
0:29 Convert float to uint ( temp uint)
0:29 'inF0' ( in float)
-0:30 Constant:
-0:30 0.000000
+0:30 transpose ( temp 1X1 matrix of float)
+ERROR: node is still EOpNull!
+0:30 'inF0' ( in float)
0:32 Branch: Return with expression
0:32 Constant:
0:32 0.000000
@@ -374,7 +374,7 @@ ERROR: node is still EOpNull!
0:? 'inF2' (layout( location=2) in 4-component vector of float)
0:80 move second child to first child ( temp 4-component vector of int)
0:? 'inI0' ( temp 4-component vector of int)
-0:? 'inI0' (layout( location=3) in 4-component vector of int)
+0:? 'inI0' (layout( location=3) flat in 4-component vector of int)
0:80 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:80 Function Call: @PixelShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float)
@@ -518,13 +518,13 @@ ERROR: node is still EOpNull!
0:? 'inF0' (layout( location=0) in 4-component vector of float)
0:? 'inF1' (layout( location=1) in 4-component vector of float)
0:? 'inF2' (layout( location=2) in 4-component vector of float)
-0:? 'inI0' (layout( location=3) in 4-component vector of int)
+0:? 'inI0' (layout( location=3) flat in 4-component vector of int)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:2 Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; ( temp float)
@@ -567,8 +567,9 @@ ERROR: node is still EOpNull!
0:9 0 (const int)
0:9 Constant:
0:9 3 (const int)
-0:10 Constant:
-0:10 0.000000
+0:10 determinant ( temp float)
+ERROR: node is still EOpNull!
+0:10 'inF0' ( in float)
0:12 direct index ( temp float)
0:12 unpackHalf2x16 ( temp 2-component vector of float)
0:12 Convert float to uint ( temp uint)
@@ -582,8 +583,7 @@ ERROR: node is still EOpNull!
0:14 Convert float to uint ( temp uint)
0:14 'inF0' ( in float)
0:23 length ( temp float)
-0:23 Construct vec2 ( in 2-component vector of float)
-0:23 'inF0' ( in float)
+0:23 'inF0' ( in float)
0:24 Function Call: msad4(u1;vu2;vu4; ( temp 4-component vector of uint)
0:24 Convert float to uint ( temp uint)
0:24 'inF0' ( in float)
@@ -614,8 +614,9 @@ ERROR: node is still EOpNull!
0:29 bitFieldReverse ( temp uint)
0:29 Convert float to uint ( temp uint)
0:29 'inF0' ( in float)
-0:30 Constant:
-0:30 0.000000
+0:30 transpose ( temp 1X1 matrix of float)
+ERROR: node is still EOpNull!
+0:30 'inF0' ( in float)
0:32 Branch: Return with expression
0:32 Constant:
0:32 0.000000
@@ -836,7 +837,7 @@ ERROR: node is still EOpNull!
0:? 'inF2' (layout( location=2) in 4-component vector of float)
0:80 move second child to first child ( temp 4-component vector of int)
0:? 'inI0' ( temp 4-component vector of int)
-0:? 'inI0' (layout( location=3) in 4-component vector of int)
+0:? 'inI0' (layout( location=3) flat in 4-component vector of int)
0:80 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:80 Function Call: @PixelShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float)
@@ -980,6 +981,6 @@ ERROR: node is still EOpNull!
0:? 'inF0' (layout( location=0) in 4-component vector of float)
0:? 'inF1' (layout( location=1) in 4-component vector of float)
0:? 'inF2' (layout( location=2) in 4-component vector of float)
-0:? 'inI0' (layout( location=3) in 4-component vector of int)
+0:? 'inI0' (layout( location=3) flat in 4-component vector of int)
SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.vert.out
index 9808b1cb38f..31e3ec46c9b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.negative.vert.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.negative.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:15 Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; ( temp float)
0:15 Function Parameters:
@@ -155,7 +155,7 @@ Shader version: 450
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:15 Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; ( temp float)
0:15 Function Parameters:
@@ -308,13 +308,14 @@ Shader version: 450
0:? 'inI0' (layout( location=3) in 4-component vector of int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 155
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "VertexShaderFunction" 100 103 106 110 113
+ Source HLSL 500
Name 4 "VertexShaderFunction"
Name 15 "VertexShaderFunctionS(f1;f1;f1;i1;"
Name 11 "inF0"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
index 4f47d86f317..8df57aa0c10 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.promote.down.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:15 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -40,20 +40,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:15 Sequence
0:15 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:15 color: direct index for structure ( temp 4-component vector of float)
0:15 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:15 Constant:
0:15 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2})
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:15 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -94,17 +94,17 @@ gl_FragCoord origin is upper left
0:? Sequence
0:15 Sequence
0:15 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:15 color: direct index for structure ( temp 4-component vector of float)
0:15 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:15 Constant:
0:15 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2})
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 50
Capability Shader
@@ -112,6 +112,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 47
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "color"
@@ -129,7 +130,7 @@ gl_FragCoord origin is upper left
Name 21 ""
Name 29 "r01"
Name 37 "ps_output"
- Name 47 "color"
+ Name 47 "@entryPointOutput.color"
MemberDecorate 19($Global) 0 Offset 0
MemberDecorate 19($Global) 1 Offset 4
MemberDecorate 19($Global) 2 Offset 8
@@ -140,7 +141,7 @@ gl_FragCoord origin is upper left
MemberDecorate 19($Global) 7 Offset 40
Decorate 19($Global) Block
Decorate 21 DescriptorSet 0
- Decorate 47(color) Location 0
+ Decorate 47(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -167,12 +168,12 @@ gl_FragCoord origin is upper left
40: 7(fvec4) ConstantComposite 39 39 39 39
41: TypePointer Function 7(fvec4)
46: TypePointer Output 7(fvec4)
- 47(color): 46(ptr) Variable Output
+47(@entryPointOutput.color): 46(ptr) Variable Output
4(main): 2 Function None 3
5: Label
48:8(PS_OUTPUT) FunctionCall 10(@main()
49: 7(fvec4) CompositeExtract 48 0
- Store 47(color) 49
+ Store 47(@entryPointOutput.color) 49
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out
index 7fec7a20b81..6df1915b7bb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.promote.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -341,8 +341,8 @@ gl_FragCoord origin is upper left
0:51 move second child to first child ( temp float)
0:51 'r50' ( temp float)
0:51 Construct float ( temp float)
-0:? imageLoad ( temp 4-component vector of float)
-0:51 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? textureFetch ( temp 4-component vector of float)
+0:51 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:51 Convert uint to int ( temp int)
0:51 upos: direct index for structure ( uniform uint)
0:51 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2, uniform uint upos, uniform float fpos})
@@ -352,8 +352,8 @@ gl_FragCoord origin is upper left
0:52 move second child to first child ( temp float)
0:52 'r51' ( temp float)
0:52 Construct float ( temp float)
-0:? imageLoad ( temp 4-component vector of float)
-0:52 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? textureFetch ( temp 4-component vector of float)
+0:52 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:52 Convert float to int ( temp int)
0:52 fpos: direct index for structure ( uniform float)
0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2, uniform uint upos, uniform float fpos})
@@ -430,22 +430,22 @@ gl_FragCoord origin is upper left
0:? Sequence
0:20 Sequence
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:20 color: direct index for structure ( temp 4-component vector of float)
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:20 Constant:
0:20 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2, uniform uint upos, uniform float fpos})
-0:? 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:? 'g_tTex1df4' ( uniform texture1D)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -787,8 +787,8 @@ gl_FragCoord origin is upper left
0:51 move second child to first child ( temp float)
0:51 'r50' ( temp float)
0:51 Construct float ( temp float)
-0:? imageLoad ( temp 4-component vector of float)
-0:51 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? textureFetch ( temp 4-component vector of float)
+0:51 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:51 Convert uint to int ( temp int)
0:51 upos: direct index for structure ( uniform uint)
0:51 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2, uniform uint upos, uniform float fpos})
@@ -798,8 +798,8 @@ gl_FragCoord origin is upper left
0:52 move second child to first child ( temp float)
0:52 'r51' ( temp float)
0:52 Construct float ( temp float)
-0:? imageLoad ( temp 4-component vector of float)
-0:52 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? textureFetch ( temp 4-component vector of float)
+0:52 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:52 Convert float to int ( temp int)
0:52 fpos: direct index for structure ( uniform float)
0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2, uniform uint upos, uniform float fpos})
@@ -876,19 +876,19 @@ gl_FragCoord origin is upper left
0:? Sequence
0:20 Sequence
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:20 color: direct index for structure ( temp 4-component vector of float)
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:20 Constant:
0:20 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2, uniform uint upos, uniform float fpos})
-0:? 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:? 'g_tTex1df4' ( uniform texture1D)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 322
Capability Shader
@@ -899,6 +899,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 319
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "color"
@@ -950,7 +951,7 @@ gl_FragCoord origin is upper left
Name 297 "NumberOfLevelsI"
Name 301 "sizeQueryTemp"
Name 310 "ps_output"
- Name 319 "color"
+ Name 319 "@entryPointOutput.color"
MemberDecorate 19($Global) 0 Offset 0
MemberDecorate 19($Global) 1 Offset 4
MemberDecorate 19($Global) 2 Offset 8
@@ -964,9 +965,8 @@ gl_FragCoord origin is upper left
Decorate 19($Global) Block
Decorate 21 DescriptorSet 0
Decorate 258(g_tTexbfs) DescriptorSet 0
- Decorate 258(g_tTexbfs) NonWritable
Decorate 277(g_tTex1df4) DescriptorSet 0
- Decorate 319(color) Location 0
+ Decorate 319(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -1013,7 +1013,7 @@ gl_FragCoord origin is upper left
107: 16(ivec2) ConstantComposite 44 44
109: 14(int) Constant 4
110: TypePointer Uniform 16(ivec2)
- 256: TypeImage 6(float) Buffer nonsampled format:R32f
+ 256: TypeImage 6(float) Buffer sampled format:R32f
257: TypePointer UniformConstant 256
258(g_tTexbfs): 257(ptr) Variable UniformConstant
260: 14(int) Constant 8
@@ -1025,12 +1025,12 @@ gl_FragCoord origin is upper left
309: TypePointer Function 8(PS_OUTPUT)
313: TypePointer Function 7(fvec4)
318: TypePointer Output 7(fvec4)
- 319(color): 318(ptr) Variable Output
+319(@entryPointOutput.color): 318(ptr) Variable Output
4(main): 2 Function None 3
5: Label
320:8(PS_OUTPUT) FunctionCall 10(@main()
321: 7(fvec4) CompositeExtract 320 0
- Store 319(color) 321
+ Store 319(@entryPointOutput.color) 321
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
@@ -1275,14 +1275,14 @@ gl_FragCoord origin is upper left
261: 23(ptr) AccessChain 21 260
262: 15(int) Load 261
263: 14(int) Bitcast 262
- 264: 7(fvec4) ImageRead 259 263
+ 264: 7(fvec4) ImageFetch 259 263
265: 6(float) CompositeExtract 264 0
Store 255(r50) 265
267: 256 Load 258(g_tTexbfs)
269: 33(ptr) AccessChain 21 268
270: 6(float) Load 269
271: 14(int) ConvertFToS 270
- 272: 7(fvec4) ImageRead 267 271
+ 272: 7(fvec4) ImageFetch 267 271
273: 6(float) CompositeExtract 272 0
Store 266(r51) 273
278: 275 Load 277(g_tTex1df4)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
index 7ccc596bdc2..703d9f6d18a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.promote.outputs.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -88,22 +88,22 @@ gl_FragCoord origin is upper left
0:? Sequence
0:20 Sequence
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:20 color: direct index for structure ( temp 4-component vector of float)
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:20 Constant:
0:20 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2, uniform uint upos, uniform float fpos})
-0:? 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:? 'g_tTex1df4' ( uniform texture1D)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -192,19 +192,19 @@ gl_FragCoord origin is upper left
0:? Sequence
0:20 Sequence
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:20 color: direct index for structure ( temp 4-component vector of float)
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:20 Constant:
0:20 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int i, uniform uint u, uniform float f, uniform bool b, uniform 2-component vector of int i2, uniform 2-component vector of uint u2, uniform 2-component vector of float f2, uniform 2-component vector of bool b2, uniform uint upos, uniform float fpos})
-0:? 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:? 'g_tTex1df4' ( uniform texture1D)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 80
Capability Shader
@@ -215,6 +215,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 74
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "color"
@@ -241,7 +242,7 @@ gl_FragCoord origin is upper left
Name 53 "NumberOfLevelsI"
Name 57 "sizeQueryTemp"
Name 66 "ps_output"
- Name 74 "color"
+ Name 74 "@entryPointOutput.color"
Name 79 "g_tTexbfs"
MemberDecorate 17($Global) 0 Offset 0
MemberDecorate 17($Global) 1 Offset 4
@@ -256,9 +257,8 @@ gl_FragCoord origin is upper left
Decorate 17($Global) Block
Decorate 19 DescriptorSet 0
Decorate 31(g_tTex1df4) DescriptorSet 0
- Decorate 74(color) Location 0
+ Decorate 74(@entryPointOutput.color) Location 0
Decorate 79(g_tTexbfs) DescriptorSet 0
- Decorate 79(g_tTexbfs) NonWritable
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -288,15 +288,15 @@ gl_FragCoord origin is upper left
67: 7(fvec4) ConstantComposite 24 24 24 24
68: TypePointer Function 7(fvec4)
73: TypePointer Output 7(fvec4)
- 74(color): 73(ptr) Variable Output
- 77: TypeImage 6(float) Buffer nonsampled format:R32f
+74(@entryPointOutput.color): 73(ptr) Variable Output
+ 77: TypeImage 6(float) Buffer sampled format:R32f
78: TypePointer UniformConstant 77
79(g_tTexbfs): 78(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
75:8(PS_OUTPUT) FunctionCall 10(@main()
76: 7(fvec4) CompositeExtract 75 0
- Store 74(color) 76
+ Store 74(@entryPointOutput.color) 76
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out
index 107575b7525..e92a8a72e9e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out
@@ -1,5 +1,5 @@
hlsl.intrinsics.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:2 Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
0:2 Function Parameters:
@@ -10,13 +10,15 @@ Shader version: 450
0:2 'inU1' ( in uint)
0:? Sequence
0:3 all ( temp bool)
-0:3 'inF0' ( in float)
+0:3 Convert float to bool ( temp bool)
+0:3 'inF0' ( in float)
0:4 Absolute value ( temp float)
0:4 'inF0' ( in float)
0:5 arc cosine ( temp float)
0:5 'inF0' ( in float)
0:6 any ( temp bool)
-0:6 'inF0' ( in float)
+0:6 Convert float to bool ( temp bool)
+0:6 'inF0' ( in float)
0:7 arc sine ( temp float)
0:7 'inF0' ( in float)
0:8 floatBitsToInt ( temp int)
@@ -62,880 +64,872 @@ Shader version: 450
0:29 'inF1' ( in float)
0:30 Fraction ( temp float)
0:30 'inF0' ( in float)
-0:31 frexp ( temp float)
+0:31 isinf ( temp bool)
0:31 'inF0' ( in float)
-0:31 'inF1' ( in float)
-0:32 isinf ( temp bool)
+0:32 isnan ( temp bool)
0:32 'inF0' ( in float)
-0:33 isnan ( temp bool)
+0:33 ldexp ( temp float)
0:33 'inF0' ( in float)
-0:34 ldexp ( temp float)
+0:33 'inF1' ( in float)
+0:34 mix ( temp float)
0:34 'inF0' ( in float)
0:34 'inF1' ( in float)
-0:35 mix ( temp float)
+0:34 'inF2' ( in float)
+0:35 log ( temp float)
0:35 'inF0' ( in float)
-0:35 'inF1' ( in float)
-0:35 'inF2' ( in float)
-0:36 log ( temp float)
-0:36 'inF0' ( in float)
-0:37 component-wise multiply ( temp float)
-0:37 log2 ( temp float)
-0:37 'inF0' ( in float)
-0:37 Constant:
-0:37 0.301030
-0:38 log2 ( temp float)
+0:36 component-wise multiply ( temp float)
+0:36 log2 ( temp float)
+0:36 'inF0' ( in float)
+0:36 Constant:
+0:36 0.301030
+0:37 log2 ( temp float)
+0:37 'inF0' ( in float)
+0:38 max ( temp float)
0:38 'inF0' ( in float)
-0:39 max ( temp float)
+0:38 'inF1' ( in float)
+0:39 min ( temp float)
0:39 'inF0' ( in float)
0:39 'inF1' ( in float)
-0:40 min ( temp float)
-0:40 'inF0' ( in float)
-0:40 'inF1' ( in float)
-0:42 pow ( temp float)
+0:41 pow ( temp float)
+0:41 'inF0' ( in float)
+0:41 'inF1' ( in float)
+0:42 radians ( temp float)
0:42 'inF0' ( in float)
-0:42 'inF1' ( in float)
-0:43 radians ( temp float)
-0:43 'inF0' ( in float)
-0:44 bitFieldReverse ( temp int)
-0:44 Constant:
-0:44 2 (const int)
-0:45 roundEven ( temp float)
+0:43 bitFieldReverse ( temp int)
+0:43 Constant:
+0:43 2 (const int)
+0:44 roundEven ( temp float)
+0:44 'inF0' ( in float)
+0:45 inverse sqrt ( temp float)
0:45 'inF0' ( in float)
-0:46 inverse sqrt ( temp float)
+0:46 clamp ( temp float)
0:46 'inF0' ( in float)
-0:47 clamp ( temp float)
+0:46 Constant:
+0:46 0.000000
+0:46 Constant:
+0:46 1.000000
+0:47 Sign ( temp float)
0:47 'inF0' ( in float)
-0:47 Constant:
-0:47 0.000000
-0:47 Constant:
-0:47 1.000000
-0:48 Sign ( temp float)
+0:48 sine ( temp float)
0:48 'inF0' ( in float)
-0:49 sine ( temp float)
-0:49 'inF0' ( in float)
-0:50 Sequence
-0:50 move second child to first child ( temp float)
-0:50 'inF1' ( in float)
-0:50 sine ( temp float)
-0:50 'inF0' ( in float)
-0:50 move second child to first child ( temp float)
-0:50 'inF2' ( in float)
-0:50 cosine ( temp float)
-0:50 'inF0' ( in float)
-0:51 hyp. sine ( temp float)
+0:49 Sequence
+0:49 move second child to first child ( temp float)
+0:49 'inF1' ( in float)
+0:49 sine ( temp float)
+0:49 'inF0' ( in float)
+0:49 move second child to first child ( temp float)
+0:49 'inF2' ( in float)
+0:49 cosine ( temp float)
+0:49 'inF0' ( in float)
+0:50 hyp. sine ( temp float)
+0:50 'inF0' ( in float)
+0:51 smoothstep ( temp float)
0:51 'inF0' ( in float)
-0:52 smoothstep ( temp float)
+0:51 'inF1' ( in float)
+0:51 'inF2' ( in float)
+0:52 sqrt ( temp float)
0:52 'inF0' ( in float)
-0:52 'inF1' ( in float)
-0:52 'inF2' ( in float)
-0:53 sqrt ( temp float)
+0:53 step ( temp float)
0:53 'inF0' ( in float)
-0:54 step ( temp float)
+0:53 'inF1' ( in float)
+0:54 tangent ( temp float)
0:54 'inF0' ( in float)
-0:54 'inF1' ( in float)
-0:55 tangent ( temp float)
+0:55 hyp. tangent ( temp float)
0:55 'inF0' ( in float)
-0:56 hyp. tangent ( temp float)
-0:56 'inF0' ( in float)
-0:58 trunc ( temp float)
-0:58 'inF0' ( in float)
-0:60 Branch: Return with expression
-0:60 Constant:
-0:60 0.000000
-0:64 Function Definition: VertexShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:64 Function Parameters:
-0:64 'inF0' ( in 1-component vector of float)
-0:64 'inF1' ( in 1-component vector of float)
-0:64 'inF2' ( in 1-component vector of float)
+0:57 trunc ( temp float)
+0:57 'inF0' ( in float)
+0:59 Branch: Return with expression
+0:59 Constant:
+0:59 0.000000
+0:63 Function Definition: VertexShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:63 Function Parameters:
+0:63 'inF0' ( in 1-component vector of float)
+0:63 'inF1' ( in 1-component vector of float)
+0:63 'inF2' ( in 1-component vector of float)
0:? Sequence
-0:66 Branch: Return with expression
-0:66 Constant:
-0:66 0.000000
-0:70 Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:70 Function Parameters:
-0:70 'inF0' ( in 2-component vector of float)
-0:70 'inF1' ( in 2-component vector of float)
-0:70 'inF2' ( in 2-component vector of float)
-0:70 'inU0' ( in 2-component vector of uint)
-0:70 'inU1' ( in 2-component vector of uint)
+0:65 Branch: Return with expression
+0:65 Constant:
+0:65 0.000000
+0:69 Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:69 Function Parameters:
+0:69 'inF0' ( in 2-component vector of float)
+0:69 'inF1' ( in 2-component vector of float)
+0:69 'inF2' ( in 2-component vector of float)
+0:69 'inU0' ( in 2-component vector of uint)
+0:69 'inU1' ( in 2-component vector of uint)
0:? Sequence
-0:71 all ( temp bool)
+0:70 all ( temp bool)
+0:70 Convert float to bool ( temp 2-component vector of bool)
+0:70 'inF0' ( in 2-component vector of float)
+0:71 Absolute value ( temp 2-component vector of float)
0:71 'inF0' ( in 2-component vector of float)
-0:72 Absolute value ( temp 2-component vector of float)
+0:72 arc cosine ( temp 2-component vector of float)
0:72 'inF0' ( in 2-component vector of float)
-0:73 arc cosine ( temp 2-component vector of float)
-0:73 'inF0' ( in 2-component vector of float)
-0:74 any ( temp bool)
+0:73 any ( temp bool)
+0:73 Convert float to bool ( temp 2-component vector of bool)
+0:73 'inF0' ( in 2-component vector of float)
+0:74 arc sine ( temp 2-component vector of float)
0:74 'inF0' ( in 2-component vector of float)
-0:75 arc sine ( temp 2-component vector of float)
+0:75 floatBitsToInt ( temp 2-component vector of int)
0:75 'inF0' ( in 2-component vector of float)
-0:76 floatBitsToInt ( temp 2-component vector of int)
+0:76 floatBitsToUint ( temp 2-component vector of uint)
0:76 'inF0' ( in 2-component vector of float)
-0:77 floatBitsToUint ( temp 2-component vector of uint)
-0:77 'inF0' ( in 2-component vector of float)
-0:78 intBitsToFloat ( temp 2-component vector of float)
-0:78 'inU0' ( in 2-component vector of uint)
+0:77 intBitsToFloat ( temp 2-component vector of float)
+0:77 'inU0' ( in 2-component vector of uint)
+0:79 arc tangent ( temp 2-component vector of float)
+0:79 'inF0' ( in 2-component vector of float)
0:80 arc tangent ( temp 2-component vector of float)
0:80 'inF0' ( in 2-component vector of float)
-0:81 arc tangent ( temp 2-component vector of float)
+0:80 'inF1' ( in 2-component vector of float)
+0:81 Ceiling ( temp 2-component vector of float)
0:81 'inF0' ( in 2-component vector of float)
-0:81 'inF1' ( in 2-component vector of float)
-0:82 Ceiling ( temp 2-component vector of float)
+0:82 clamp ( temp 2-component vector of float)
0:82 'inF0' ( in 2-component vector of float)
-0:83 clamp ( temp 2-component vector of float)
+0:82 'inF1' ( in 2-component vector of float)
+0:82 'inF2' ( in 2-component vector of float)
+0:83 cosine ( temp 2-component vector of float)
0:83 'inF0' ( in 2-component vector of float)
-0:83 'inF1' ( in 2-component vector of float)
-0:83 'inF2' ( in 2-component vector of float)
-0:84 cosine ( temp 2-component vector of float)
+0:84 hyp. cosine ( temp 2-component vector of float)
0:84 'inF0' ( in 2-component vector of float)
-0:85 hyp. cosine ( temp 2-component vector of float)
-0:85 'inF0' ( in 2-component vector of float)
0:? bitCount ( temp 2-component vector of int)
0:? Constant:
0:? 7 (const int)
0:? 3 (const int)
-0:87 degrees ( temp 2-component vector of float)
+0:86 degrees ( temp 2-component vector of float)
+0:86 'inF0' ( in 2-component vector of float)
+0:87 distance ( temp float)
0:87 'inF0' ( in 2-component vector of float)
-0:88 distance ( temp float)
+0:87 'inF1' ( in 2-component vector of float)
+0:88 dot-product ( temp float)
0:88 'inF0' ( in 2-component vector of float)
0:88 'inF1' ( in 2-component vector of float)
-0:89 dot-product ( temp float)
-0:89 'inF0' ( in 2-component vector of float)
-0:89 'inF1' ( in 2-component vector of float)
-0:93 exp ( temp 2-component vector of float)
+0:92 exp ( temp 2-component vector of float)
+0:92 'inF0' ( in 2-component vector of float)
+0:93 exp2 ( temp 2-component vector of float)
0:93 'inF0' ( in 2-component vector of float)
-0:94 exp2 ( temp 2-component vector of float)
+0:94 face-forward ( temp 2-component vector of float)
0:94 'inF0' ( in 2-component vector of float)
-0:95 face-forward ( temp 2-component vector of float)
-0:95 'inF0' ( in 2-component vector of float)
-0:95 'inF1' ( in 2-component vector of float)
-0:95 'inF2' ( in 2-component vector of float)
-0:96 findMSB ( temp int)
+0:94 'inF1' ( in 2-component vector of float)
+0:94 'inF2' ( in 2-component vector of float)
+0:95 findMSB ( temp int)
+0:95 Constant:
+0:95 7 (const int)
+0:96 findLSB ( temp int)
0:96 Constant:
0:96 7 (const int)
-0:97 findLSB ( temp int)
-0:97 Constant:
-0:97 7 (const int)
-0:98 Floor ( temp 2-component vector of float)
-0:98 'inF0' ( in 2-component vector of float)
-0:100 mod ( temp 2-component vector of float)
+0:97 Floor ( temp 2-component vector of float)
+0:97 'inF0' ( in 2-component vector of float)
+0:99 mod ( temp 2-component vector of float)
+0:99 'inF0' ( in 2-component vector of float)
+0:99 'inF1' ( in 2-component vector of float)
+0:100 Fraction ( temp 2-component vector of float)
0:100 'inF0' ( in 2-component vector of float)
-0:100 'inF1' ( in 2-component vector of float)
-0:101 Fraction ( temp 2-component vector of float)
+0:101 isinf ( temp 2-component vector of bool)
0:101 'inF0' ( in 2-component vector of float)
-0:102 frexp ( temp 2-component vector of float)
+0:102 isnan ( temp 2-component vector of bool)
0:102 'inF0' ( in 2-component vector of float)
-0:102 'inF1' ( in 2-component vector of float)
-0:103 isinf ( temp 2-component vector of bool)
+0:103 ldexp ( temp 2-component vector of float)
0:103 'inF0' ( in 2-component vector of float)
-0:104 isnan ( temp 2-component vector of bool)
+0:103 'inF1' ( in 2-component vector of float)
+0:104 mix ( temp 2-component vector of float)
0:104 'inF0' ( in 2-component vector of float)
-0:105 ldexp ( temp 2-component vector of float)
+0:104 'inF1' ( in 2-component vector of float)
+0:104 'inF2' ( in 2-component vector of float)
+0:105 length ( temp float)
0:105 'inF0' ( in 2-component vector of float)
-0:105 'inF1' ( in 2-component vector of float)
-0:106 mix ( temp 2-component vector of float)
+0:106 log ( temp 2-component vector of float)
0:106 'inF0' ( in 2-component vector of float)
-0:106 'inF1' ( in 2-component vector of float)
-0:106 'inF2' ( in 2-component vector of float)
-0:107 length ( temp float)
-0:107 'inF0' ( in 2-component vector of float)
-0:108 log ( temp 2-component vector of float)
+0:107 vector-scale ( temp 2-component vector of float)
+0:107 log2 ( temp 2-component vector of float)
+0:107 'inF0' ( in 2-component vector of float)
+0:107 Constant:
+0:107 0.301030
+0:108 log2 ( temp 2-component vector of float)
0:108 'inF0' ( in 2-component vector of float)
-0:109 vector-scale ( temp 2-component vector of float)
-0:109 log2 ( temp 2-component vector of float)
-0:109 'inF0' ( in 2-component vector of float)
-0:109 Constant:
-0:109 0.301030
-0:110 log2 ( temp 2-component vector of float)
+0:109 max ( temp 2-component vector of float)
+0:109 'inF0' ( in 2-component vector of float)
+0:109 'inF1' ( in 2-component vector of float)
+0:110 min ( temp 2-component vector of float)
0:110 'inF0' ( in 2-component vector of float)
-0:111 max ( temp 2-component vector of float)
-0:111 'inF0' ( in 2-component vector of float)
-0:111 'inF1' ( in 2-component vector of float)
-0:112 min ( temp 2-component vector of float)
+0:110 'inF1' ( in 2-component vector of float)
+0:112 normalize ( temp 2-component vector of float)
0:112 'inF0' ( in 2-component vector of float)
-0:112 'inF1' ( in 2-component vector of float)
-0:114 normalize ( temp 2-component vector of float)
+0:113 pow ( temp 2-component vector of float)
+0:113 'inF0' ( in 2-component vector of float)
+0:113 'inF1' ( in 2-component vector of float)
+0:114 radians ( temp 2-component vector of float)
0:114 'inF0' ( in 2-component vector of float)
-0:115 pow ( temp 2-component vector of float)
+0:115 reflect ( temp 2-component vector of float)
0:115 'inF0' ( in 2-component vector of float)
0:115 'inF1' ( in 2-component vector of float)
-0:116 radians ( temp 2-component vector of float)
+0:116 refract ( temp 2-component vector of float)
0:116 'inF0' ( in 2-component vector of float)
-0:117 reflect ( temp 2-component vector of float)
-0:117 'inF0' ( in 2-component vector of float)
-0:117 'inF1' ( in 2-component vector of float)
-0:118 refract ( temp 2-component vector of float)
-0:118 'inF0' ( in 2-component vector of float)
-0:118 'inF1' ( in 2-component vector of float)
-0:118 Constant:
-0:118 2.000000
+0:116 'inF1' ( in 2-component vector of float)
+0:116 Constant:
+0:116 2.000000
0:? bitFieldReverse ( temp 2-component vector of int)
0:? Constant:
0:? 1 (const int)
0:? 2 (const int)
-0:120 roundEven ( temp 2-component vector of float)
+0:118 roundEven ( temp 2-component vector of float)
+0:118 'inF0' ( in 2-component vector of float)
+0:119 inverse sqrt ( temp 2-component vector of float)
+0:119 'inF0' ( in 2-component vector of float)
+0:120 clamp ( temp 2-component vector of float)
0:120 'inF0' ( in 2-component vector of float)
-0:121 inverse sqrt ( temp 2-component vector of float)
+0:120 Constant:
+0:120 0.000000
+0:120 Constant:
+0:120 1.000000
+0:121 Sign ( temp 2-component vector of float)
0:121 'inF0' ( in 2-component vector of float)
-0:122 clamp ( temp 2-component vector of float)
+0:122 sine ( temp 2-component vector of float)
0:122 'inF0' ( in 2-component vector of float)
-0:122 Constant:
-0:122 0.000000
-0:122 Constant:
-0:122 1.000000
-0:123 Sign ( temp 2-component vector of float)
-0:123 'inF0' ( in 2-component vector of float)
-0:124 sine ( temp 2-component vector of float)
+0:123 Sequence
+0:123 move second child to first child ( temp 2-component vector of float)
+0:123 'inF1' ( in 2-component vector of float)
+0:123 sine ( temp 2-component vector of float)
+0:123 'inF0' ( in 2-component vector of float)
+0:123 move second child to first child ( temp 2-component vector of float)
+0:123 'inF2' ( in 2-component vector of float)
+0:123 cosine ( temp 2-component vector of float)
+0:123 'inF0' ( in 2-component vector of float)
+0:124 hyp. sine ( temp 2-component vector of float)
0:124 'inF0' ( in 2-component vector of float)
-0:125 Sequence
-0:125 move second child to first child ( temp 2-component vector of float)
-0:125 'inF1' ( in 2-component vector of float)
-0:125 sine ( temp 2-component vector of float)
-0:125 'inF0' ( in 2-component vector of float)
-0:125 move second child to first child ( temp 2-component vector of float)
-0:125 'inF2' ( in 2-component vector of float)
-0:125 cosine ( temp 2-component vector of float)
-0:125 'inF0' ( in 2-component vector of float)
-0:126 hyp. sine ( temp 2-component vector of float)
+0:125 smoothstep ( temp 2-component vector of float)
+0:125 'inF0' ( in 2-component vector of float)
+0:125 'inF1' ( in 2-component vector of float)
+0:125 'inF2' ( in 2-component vector of float)
+0:126 sqrt ( temp 2-component vector of float)
0:126 'inF0' ( in 2-component vector of float)
-0:127 smoothstep ( temp 2-component vector of float)
+0:127 step ( temp 2-component vector of float)
0:127 'inF0' ( in 2-component vector of float)
0:127 'inF1' ( in 2-component vector of float)
-0:127 'inF2' ( in 2-component vector of float)
-0:128 sqrt ( temp 2-component vector of float)
+0:128 tangent ( temp 2-component vector of float)
0:128 'inF0' ( in 2-component vector of float)
-0:129 step ( temp 2-component vector of float)
+0:129 hyp. tangent ( temp 2-component vector of float)
0:129 'inF0' ( in 2-component vector of float)
-0:129 'inF1' ( in 2-component vector of float)
-0:130 tangent ( temp 2-component vector of float)
-0:130 'inF0' ( in 2-component vector of float)
-0:131 hyp. tangent ( temp 2-component vector of float)
+0:131 trunc ( temp 2-component vector of float)
0:131 'inF0' ( in 2-component vector of float)
-0:133 trunc ( temp 2-component vector of float)
-0:133 'inF0' ( in 2-component vector of float)
-0:136 Branch: Return with expression
+0:134 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
-0:140 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:140 Function Parameters:
-0:140 'inF0' ( in 3-component vector of float)
-0:140 'inF1' ( in 3-component vector of float)
-0:140 'inF2' ( in 3-component vector of float)
-0:140 'inU0' ( in 3-component vector of uint)
-0:140 'inU1' ( in 3-component vector of uint)
+0:138 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:138 Function Parameters:
+0:138 'inF0' ( in 3-component vector of float)
+0:138 'inF1' ( in 3-component vector of float)
+0:138 'inF2' ( in 3-component vector of float)
+0:138 'inU0' ( in 3-component vector of uint)
+0:138 'inU1' ( in 3-component vector of uint)
0:? Sequence
-0:141 all ( temp bool)
+0:139 all ( temp bool)
+0:139 Convert float to bool ( temp 3-component vector of bool)
+0:139 'inF0' ( in 3-component vector of float)
+0:140 Absolute value ( temp 3-component vector of float)
+0:140 'inF0' ( in 3-component vector of float)
+0:141 arc cosine ( temp 3-component vector of float)
0:141 'inF0' ( in 3-component vector of float)
-0:142 Absolute value ( temp 3-component vector of float)
-0:142 'inF0' ( in 3-component vector of float)
-0:143 arc cosine ( temp 3-component vector of float)
+0:142 any ( temp bool)
+0:142 Convert float to bool ( temp 3-component vector of bool)
+0:142 'inF0' ( in 3-component vector of float)
+0:143 arc sine ( temp 3-component vector of float)
0:143 'inF0' ( in 3-component vector of float)
-0:144 any ( temp bool)
+0:144 floatBitsToInt ( temp 3-component vector of int)
0:144 'inF0' ( in 3-component vector of float)
-0:145 arc sine ( temp 3-component vector of float)
+0:145 floatBitsToUint ( temp 3-component vector of uint)
0:145 'inF0' ( in 3-component vector of float)
-0:146 floatBitsToInt ( temp 3-component vector of int)
-0:146 'inF0' ( in 3-component vector of float)
-0:147 floatBitsToUint ( temp 3-component vector of uint)
-0:147 'inF0' ( in 3-component vector of float)
-0:148 intBitsToFloat ( temp 3-component vector of float)
-0:148 'inU0' ( in 3-component vector of uint)
-0:150 arc tangent ( temp 3-component vector of float)
+0:146 intBitsToFloat ( temp 3-component vector of float)
+0:146 'inU0' ( in 3-component vector of uint)
+0:148 arc tangent ( temp 3-component vector of float)
+0:148 'inF0' ( in 3-component vector of float)
+0:149 arc tangent ( temp 3-component vector of float)
+0:149 'inF0' ( in 3-component vector of float)
+0:149 'inF1' ( in 3-component vector of float)
+0:150 Ceiling ( temp 3-component vector of float)
0:150 'inF0' ( in 3-component vector of float)
-0:151 arc tangent ( temp 3-component vector of float)
+0:151 clamp ( temp 3-component vector of float)
0:151 'inF0' ( in 3-component vector of float)
0:151 'inF1' ( in 3-component vector of float)
-0:152 Ceiling ( temp 3-component vector of float)
+0:151 'inF2' ( in 3-component vector of float)
+0:152 cosine ( temp 3-component vector of float)
0:152 'inF0' ( in 3-component vector of float)
-0:153 clamp ( temp 3-component vector of float)
+0:153 hyp. cosine ( temp 3-component vector of float)
0:153 'inF0' ( in 3-component vector of float)
-0:153 'inF1' ( in 3-component vector of float)
-0:153 'inF2' ( in 3-component vector of float)
-0:154 cosine ( temp 3-component vector of float)
-0:154 'inF0' ( in 3-component vector of float)
-0:155 hyp. cosine ( temp 3-component vector of float)
-0:155 'inF0' ( in 3-component vector of float)
0:? bitCount ( temp 3-component vector of int)
0:? Constant:
0:? 7 (const int)
0:? 3 (const int)
0:? 5 (const int)
-0:157 cross-product ( temp 3-component vector of float)
+0:155 cross-product ( temp 3-component vector of float)
+0:155 'inF0' ( in 3-component vector of float)
+0:155 'inF1' ( in 3-component vector of float)
+0:156 degrees ( temp 3-component vector of float)
+0:156 'inF0' ( in 3-component vector of float)
+0:157 distance ( temp float)
0:157 'inF0' ( in 3-component vector of float)
0:157 'inF1' ( in 3-component vector of float)
-0:158 degrees ( temp 3-component vector of float)
+0:158 dot-product ( temp float)
0:158 'inF0' ( in 3-component vector of float)
-0:159 distance ( temp float)
-0:159 'inF0' ( in 3-component vector of float)
-0:159 'inF1' ( in 3-component vector of float)
-0:160 dot-product ( temp float)
-0:160 'inF0' ( in 3-component vector of float)
-0:160 'inF1' ( in 3-component vector of float)
-0:164 exp ( temp 3-component vector of float)
+0:158 'inF1' ( in 3-component vector of float)
+0:162 exp ( temp 3-component vector of float)
+0:162 'inF0' ( in 3-component vector of float)
+0:163 exp2 ( temp 3-component vector of float)
+0:163 'inF0' ( in 3-component vector of float)
+0:164 face-forward ( temp 3-component vector of float)
0:164 'inF0' ( in 3-component vector of float)
-0:165 exp2 ( temp 3-component vector of float)
-0:165 'inF0' ( in 3-component vector of float)
-0:166 face-forward ( temp 3-component vector of float)
-0:166 'inF0' ( in 3-component vector of float)
-0:166 'inF1' ( in 3-component vector of float)
-0:166 'inF2' ( in 3-component vector of float)
-0:167 findMSB ( temp int)
-0:167 Constant:
-0:167 7 (const int)
-0:168 findLSB ( temp int)
-0:168 Constant:
-0:168 7 (const int)
-0:169 Floor ( temp 3-component vector of float)
+0:164 'inF1' ( in 3-component vector of float)
+0:164 'inF2' ( in 3-component vector of float)
+0:165 findMSB ( temp int)
+0:165 Constant:
+0:165 7 (const int)
+0:166 findLSB ( temp int)
+0:166 Constant:
+0:166 7 (const int)
+0:167 Floor ( temp 3-component vector of float)
+0:167 'inF0' ( in 3-component vector of float)
+0:169 mod ( temp 3-component vector of float)
0:169 'inF0' ( in 3-component vector of float)
-0:171 mod ( temp 3-component vector of float)
+0:169 'inF1' ( in 3-component vector of float)
+0:170 Fraction ( temp 3-component vector of float)
+0:170 'inF0' ( in 3-component vector of float)
+0:171 isinf ( temp 3-component vector of bool)
0:171 'inF0' ( in 3-component vector of float)
-0:171 'inF1' ( in 3-component vector of float)
-0:172 Fraction ( temp 3-component vector of float)
+0:172 isnan ( temp 3-component vector of bool)
0:172 'inF0' ( in 3-component vector of float)
-0:173 frexp ( temp 3-component vector of float)
+0:173 ldexp ( temp 3-component vector of float)
0:173 'inF0' ( in 3-component vector of float)
0:173 'inF1' ( in 3-component vector of float)
-0:174 isinf ( temp 3-component vector of bool)
+0:174 mix ( temp 3-component vector of float)
0:174 'inF0' ( in 3-component vector of float)
-0:175 isnan ( temp 3-component vector of bool)
+0:174 'inF1' ( in 3-component vector of float)
+0:174 'inF2' ( in 3-component vector of float)
+0:175 length ( temp float)
0:175 'inF0' ( in 3-component vector of float)
-0:176 ldexp ( temp 3-component vector of float)
+0:176 log ( temp 3-component vector of float)
0:176 'inF0' ( in 3-component vector of float)
-0:176 'inF1' ( in 3-component vector of float)
-0:177 mix ( temp 3-component vector of float)
-0:177 'inF0' ( in 3-component vector of float)
-0:177 'inF1' ( in 3-component vector of float)
-0:177 'inF2' ( in 3-component vector of float)
-0:178 length ( temp float)
+0:177 vector-scale ( temp 3-component vector of float)
+0:177 log2 ( temp 3-component vector of float)
+0:177 'inF0' ( in 3-component vector of float)
+0:177 Constant:
+0:177 0.301030
+0:178 log2 ( temp 3-component vector of float)
0:178 'inF0' ( in 3-component vector of float)
-0:179 log ( temp 3-component vector of float)
+0:179 max ( temp 3-component vector of float)
0:179 'inF0' ( in 3-component vector of float)
-0:180 vector-scale ( temp 3-component vector of float)
-0:180 log2 ( temp 3-component vector of float)
-0:180 'inF0' ( in 3-component vector of float)
-0:180 Constant:
-0:180 0.301030
-0:181 log2 ( temp 3-component vector of float)
-0:181 'inF0' ( in 3-component vector of float)
-0:182 max ( temp 3-component vector of float)
+0:179 'inF1' ( in 3-component vector of float)
+0:180 min ( temp 3-component vector of float)
+0:180 'inF0' ( in 3-component vector of float)
+0:180 'inF1' ( in 3-component vector of float)
+0:182 normalize ( temp 3-component vector of float)
0:182 'inF0' ( in 3-component vector of float)
-0:182 'inF1' ( in 3-component vector of float)
-0:183 min ( temp 3-component vector of float)
+0:183 pow ( temp 3-component vector of float)
0:183 'inF0' ( in 3-component vector of float)
0:183 'inF1' ( in 3-component vector of float)
-0:185 normalize ( temp 3-component vector of float)
+0:184 radians ( temp 3-component vector of float)
+0:184 'inF0' ( in 3-component vector of float)
+0:185 reflect ( temp 3-component vector of float)
0:185 'inF0' ( in 3-component vector of float)
-0:186 pow ( temp 3-component vector of float)
+0:185 'inF1' ( in 3-component vector of float)
+0:186 refract ( temp 3-component vector of float)
0:186 'inF0' ( in 3-component vector of float)
0:186 'inF1' ( in 3-component vector of float)
-0:187 radians ( temp 3-component vector of float)
-0:187 'inF0' ( in 3-component vector of float)
-0:188 reflect ( temp 3-component vector of float)
-0:188 'inF0' ( in 3-component vector of float)
-0:188 'inF1' ( in 3-component vector of float)
-0:189 refract ( temp 3-component vector of float)
-0:189 'inF0' ( in 3-component vector of float)
-0:189 'inF1' ( in 3-component vector of float)
-0:189 Constant:
-0:189 2.000000
+0:186 Constant:
+0:186 2.000000
0:? bitFieldReverse ( temp 3-component vector of int)
0:? Constant:
0:? 1 (const int)
0:? 2 (const int)
0:? 3 (const int)
-0:191 roundEven ( temp 3-component vector of float)
+0:188 roundEven ( temp 3-component vector of float)
+0:188 'inF0' ( in 3-component vector of float)
+0:189 inverse sqrt ( temp 3-component vector of float)
+0:189 'inF0' ( in 3-component vector of float)
+0:190 clamp ( temp 3-component vector of float)
+0:190 'inF0' ( in 3-component vector of float)
+0:190 Constant:
+0:190 0.000000
+0:190 Constant:
+0:190 1.000000
+0:191 Sign ( temp 3-component vector of float)
0:191 'inF0' ( in 3-component vector of float)
-0:192 inverse sqrt ( temp 3-component vector of float)
+0:192 sine ( temp 3-component vector of float)
0:192 'inF0' ( in 3-component vector of float)
-0:193 clamp ( temp 3-component vector of float)
-0:193 'inF0' ( in 3-component vector of float)
-0:193 Constant:
-0:193 0.000000
-0:193 Constant:
-0:193 1.000000
-0:194 Sign ( temp 3-component vector of float)
+0:193 Sequence
+0:193 move second child to first child ( temp 3-component vector of float)
+0:193 'inF1' ( in 3-component vector of float)
+0:193 sine ( temp 3-component vector of float)
+0:193 'inF0' ( in 3-component vector of float)
+0:193 move second child to first child ( temp 3-component vector of float)
+0:193 'inF2' ( in 3-component vector of float)
+0:193 cosine ( temp 3-component vector of float)
+0:193 'inF0' ( in 3-component vector of float)
+0:194 hyp. sine ( temp 3-component vector of float)
0:194 'inF0' ( in 3-component vector of float)
-0:195 sine ( temp 3-component vector of float)
+0:195 smoothstep ( temp 3-component vector of float)
0:195 'inF0' ( in 3-component vector of float)
-0:196 Sequence
-0:196 move second child to first child ( temp 3-component vector of float)
-0:196 'inF1' ( in 3-component vector of float)
-0:196 sine ( temp 3-component vector of float)
-0:196 'inF0' ( in 3-component vector of float)
-0:196 move second child to first child ( temp 3-component vector of float)
-0:196 'inF2' ( in 3-component vector of float)
-0:196 cosine ( temp 3-component vector of float)
-0:196 'inF0' ( in 3-component vector of float)
-0:197 hyp. sine ( temp 3-component vector of float)
+0:195 'inF1' ( in 3-component vector of float)
+0:195 'inF2' ( in 3-component vector of float)
+0:196 sqrt ( temp 3-component vector of float)
+0:196 'inF0' ( in 3-component vector of float)
+0:197 step ( temp 3-component vector of float)
0:197 'inF0' ( in 3-component vector of float)
-0:198 smoothstep ( temp 3-component vector of float)
+0:197 'inF1' ( in 3-component vector of float)
+0:198 tangent ( temp 3-component vector of float)
0:198 'inF0' ( in 3-component vector of float)
-0:198 'inF1' ( in 3-component vector of float)
-0:198 'inF2' ( in 3-component vector of float)
-0:199 sqrt ( temp 3-component vector of float)
+0:199 hyp. tangent ( temp 3-component vector of float)
0:199 'inF0' ( in 3-component vector of float)
-0:200 step ( temp 3-component vector of float)
-0:200 'inF0' ( in 3-component vector of float)
-0:200 'inF1' ( in 3-component vector of float)
-0:201 tangent ( temp 3-component vector of float)
+0:201 trunc ( temp 3-component vector of float)
0:201 'inF0' ( in 3-component vector of float)
-0:202 hyp. tangent ( temp 3-component vector of float)
-0:202 'inF0' ( in 3-component vector of float)
-0:204 trunc ( temp 3-component vector of float)
-0:204 'inF0' ( in 3-component vector of float)
-0:207 Branch: Return with expression
+0:204 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
-0:211 Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:211 Function Parameters:
-0:211 'inF0' ( in 4-component vector of float)
-0:211 'inF1' ( in 4-component vector of float)
-0:211 'inF2' ( in 4-component vector of float)
-0:211 'inU0' ( in 4-component vector of uint)
-0:211 'inU1' ( in 4-component vector of uint)
+0:208 Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:208 Function Parameters:
+0:208 'inF0' ( in 4-component vector of float)
+0:208 'inF1' ( in 4-component vector of float)
+0:208 'inF2' ( in 4-component vector of float)
+0:208 'inU0' ( in 4-component vector of uint)
+0:208 'inU1' ( in 4-component vector of uint)
0:? Sequence
-0:212 all ( temp bool)
-0:212 'inF0' ( in 4-component vector of float)
-0:213 Absolute value ( temp 4-component vector of float)
+0:209 all ( temp bool)
+0:209 Convert float to bool ( temp 4-component vector of bool)
+0:209 'inF0' ( in 4-component vector of float)
+0:210 Absolute value ( temp 4-component vector of float)
+0:210 'inF0' ( in 4-component vector of float)
+0:211 arc cosine ( temp 4-component vector of float)
+0:211 'inF0' ( in 4-component vector of float)
+0:212 any ( temp bool)
+0:212 Convert float to bool ( temp 4-component vector of bool)
+0:212 'inF0' ( in 4-component vector of float)
+0:213 arc sine ( temp 4-component vector of float)
0:213 'inF0' ( in 4-component vector of float)
-0:214 arc cosine ( temp 4-component vector of float)
+0:214 floatBitsToInt ( temp 4-component vector of int)
0:214 'inF0' ( in 4-component vector of float)
-0:215 any ( temp bool)
+0:215 floatBitsToUint ( temp 4-component vector of uint)
0:215 'inF0' ( in 4-component vector of float)
-0:216 arc sine ( temp 4-component vector of float)
-0:216 'inF0' ( in 4-component vector of float)
-0:217 floatBitsToInt ( temp 4-component vector of int)
-0:217 'inF0' ( in 4-component vector of float)
-0:218 floatBitsToUint ( temp 4-component vector of uint)
+0:216 intBitsToFloat ( temp 4-component vector of float)
+0:216 'inU0' ( in 4-component vector of uint)
+0:218 arc tangent ( temp 4-component vector of float)
0:218 'inF0' ( in 4-component vector of float)
-0:219 intBitsToFloat ( temp 4-component vector of float)
-0:219 'inU0' ( in 4-component vector of uint)
-0:221 arc tangent ( temp 4-component vector of float)
+0:219 arc tangent ( temp 4-component vector of float)
+0:219 'inF0' ( in 4-component vector of float)
+0:219 'inF1' ( in 4-component vector of float)
+0:220 Ceiling ( temp 4-component vector of float)
+0:220 'inF0' ( in 4-component vector of float)
+0:221 clamp ( temp 4-component vector of float)
0:221 'inF0' ( in 4-component vector of float)
-0:222 arc tangent ( temp 4-component vector of float)
+0:221 'inF1' ( in 4-component vector of float)
+0:221 'inF2' ( in 4-component vector of float)
+0:222 cosine ( temp 4-component vector of float)
0:222 'inF0' ( in 4-component vector of float)
-0:222 'inF1' ( in 4-component vector of float)
-0:223 Ceiling ( temp 4-component vector of float)
+0:223 hyp. cosine ( temp 4-component vector of float)
0:223 'inF0' ( in 4-component vector of float)
-0:224 clamp ( temp 4-component vector of float)
-0:224 'inF0' ( in 4-component vector of float)
-0:224 'inF1' ( in 4-component vector of float)
-0:224 'inF2' ( in 4-component vector of float)
-0:225 cosine ( temp 4-component vector of float)
-0:225 'inF0' ( in 4-component vector of float)
-0:226 hyp. cosine ( temp 4-component vector of float)
-0:226 'inF0' ( in 4-component vector of float)
0:? bitCount ( temp 4-component vector of int)
0:? Constant:
0:? 7 (const int)
0:? 3 (const int)
0:? 5 (const int)
0:? 2 (const int)
-0:228 degrees ( temp 4-component vector of float)
-0:228 'inF0' ( in 4-component vector of float)
-0:229 distance ( temp float)
-0:229 'inF0' ( in 4-component vector of float)
-0:229 'inF1' ( in 4-component vector of float)
-0:230 dot-product ( temp float)
-0:230 'inF0' ( in 4-component vector of float)
-0:230 'inF1' ( in 4-component vector of float)
-0:231 Construct vec4 ( temp 4-component vector of float)
-0:231 Constant:
-0:231 1.000000
-0:231 component-wise multiply ( temp float)
-0:231 direct index ( temp float)
-0:231 'inF0' ( in 4-component vector of float)
-0:231 Constant:
-0:231 1 (const int)
-0:231 direct index ( temp float)
-0:231 'inF1' ( in 4-component vector of float)
-0:231 Constant:
-0:231 1 (const int)
-0:231 direct index ( temp float)
-0:231 'inF0' ( in 4-component vector of float)
-0:231 Constant:
-0:231 2 (const int)
-0:231 direct index ( temp float)
-0:231 'inF1' ( in 4-component vector of float)
-0:231 Constant:
-0:231 3 (const int)
-0:235 exp ( temp 4-component vector of float)
-0:235 'inF0' ( in 4-component vector of float)
-0:236 exp2 ( temp 4-component vector of float)
-0:236 'inF0' ( in 4-component vector of float)
-0:237 face-forward ( temp 4-component vector of float)
+0:225 degrees ( temp 4-component vector of float)
+0:225 'inF0' ( in 4-component vector of float)
+0:226 distance ( temp float)
+0:226 'inF0' ( in 4-component vector of float)
+0:226 'inF1' ( in 4-component vector of float)
+0:227 dot-product ( temp float)
+0:227 'inF0' ( in 4-component vector of float)
+0:227 'inF1' ( in 4-component vector of float)
+0:228 Construct vec4 ( temp 4-component vector of float)
+0:228 Constant:
+0:228 1.000000
+0:228 component-wise multiply ( temp float)
+0:228 direct index ( temp float)
+0:228 'inF0' ( in 4-component vector of float)
+0:228 Constant:
+0:228 1 (const int)
+0:228 direct index ( temp float)
+0:228 'inF1' ( in 4-component vector of float)
+0:228 Constant:
+0:228 1 (const int)
+0:228 direct index ( temp float)
+0:228 'inF0' ( in 4-component vector of float)
+0:228 Constant:
+0:228 2 (const int)
+0:228 direct index ( temp float)
+0:228 'inF1' ( in 4-component vector of float)
+0:228 Constant:
+0:228 3 (const int)
+0:232 exp ( temp 4-component vector of float)
+0:232 'inF0' ( in 4-component vector of float)
+0:233 exp2 ( temp 4-component vector of float)
+0:233 'inF0' ( in 4-component vector of float)
+0:234 face-forward ( temp 4-component vector of float)
+0:234 'inF0' ( in 4-component vector of float)
+0:234 'inF1' ( in 4-component vector of float)
+0:234 'inF2' ( in 4-component vector of float)
+0:235 findMSB ( temp int)
+0:235 Constant:
+0:235 7 (const int)
+0:236 findLSB ( temp int)
+0:236 Constant:
+0:236 7 (const int)
+0:237 Floor ( temp 4-component vector of float)
0:237 'inF0' ( in 4-component vector of float)
-0:237 'inF1' ( in 4-component vector of float)
-0:237 'inF2' ( in 4-component vector of float)
-0:238 findMSB ( temp int)
-0:238 Constant:
-0:238 7 (const int)
-0:239 findLSB ( temp int)
-0:239 Constant:
-0:239 7 (const int)
-0:240 Floor ( temp 4-component vector of float)
+0:239 mod ( temp 4-component vector of float)
+0:239 'inF0' ( in 4-component vector of float)
+0:239 'inF1' ( in 4-component vector of float)
+0:240 Fraction ( temp 4-component vector of float)
0:240 'inF0' ( in 4-component vector of float)
-0:242 mod ( temp 4-component vector of float)
+0:241 isinf ( temp 4-component vector of bool)
+0:241 'inF0' ( in 4-component vector of float)
+0:242 isnan ( temp 4-component vector of bool)
0:242 'inF0' ( in 4-component vector of float)
-0:242 'inF1' ( in 4-component vector of float)
-0:243 Fraction ( temp 4-component vector of float)
+0:243 ldexp ( temp 4-component vector of float)
0:243 'inF0' ( in 4-component vector of float)
-0:244 frexp ( temp 4-component vector of float)
+0:243 'inF1' ( in 4-component vector of float)
+0:244 mix ( temp 4-component vector of float)
0:244 'inF0' ( in 4-component vector of float)
0:244 'inF1' ( in 4-component vector of float)
-0:245 isinf ( temp 4-component vector of bool)
+0:244 'inF2' ( in 4-component vector of float)
+0:245 length ( temp float)
0:245 'inF0' ( in 4-component vector of float)
-0:246 isnan ( temp 4-component vector of bool)
+0:246 log ( temp 4-component vector of float)
0:246 'inF0' ( in 4-component vector of float)
-0:247 ldexp ( temp 4-component vector of float)
-0:247 'inF0' ( in 4-component vector of float)
-0:247 'inF1' ( in 4-component vector of float)
-0:248 mix ( temp 4-component vector of float)
+0:247 vector-scale ( temp 4-component vector of float)
+0:247 log2 ( temp 4-component vector of float)
+0:247 'inF0' ( in 4-component vector of float)
+0:247 Constant:
+0:247 0.301030
+0:248 log2 ( temp 4-component vector of float)
0:248 'inF0' ( in 4-component vector of float)
-0:248 'inF1' ( in 4-component vector of float)
-0:248 'inF2' ( in 4-component vector of float)
-0:249 length ( temp float)
+0:249 max ( temp 4-component vector of float)
0:249 'inF0' ( in 4-component vector of float)
-0:250 log ( temp 4-component vector of float)
+0:249 'inF1' ( in 4-component vector of float)
+0:250 min ( temp 4-component vector of float)
0:250 'inF0' ( in 4-component vector of float)
-0:251 vector-scale ( temp 4-component vector of float)
-0:251 log2 ( temp 4-component vector of float)
-0:251 'inF0' ( in 4-component vector of float)
-0:251 Constant:
-0:251 0.301030
-0:252 log2 ( temp 4-component vector of float)
+0:250 'inF1' ( in 4-component vector of float)
+0:252 normalize ( temp 4-component vector of float)
0:252 'inF0' ( in 4-component vector of float)
-0:253 max ( temp 4-component vector of float)
+0:253 pow ( temp 4-component vector of float)
0:253 'inF0' ( in 4-component vector of float)
0:253 'inF1' ( in 4-component vector of float)
-0:254 min ( temp 4-component vector of float)
+0:254 radians ( temp 4-component vector of float)
0:254 'inF0' ( in 4-component vector of float)
-0:254 'inF1' ( in 4-component vector of float)
-0:256 normalize ( temp 4-component vector of float)
+0:255 reflect ( temp 4-component vector of float)
+0:255 'inF0' ( in 4-component vector of float)
+0:255 'inF1' ( in 4-component vector of float)
+0:256 refract ( temp 4-component vector of float)
0:256 'inF0' ( in 4-component vector of float)
-0:257 pow ( temp 4-component vector of float)
-0:257 'inF0' ( in 4-component vector of float)
-0:257 'inF1' ( in 4-component vector of float)
-0:258 radians ( temp 4-component vector of float)
-0:258 'inF0' ( in 4-component vector of float)
-0:259 reflect ( temp 4-component vector of float)
-0:259 'inF0' ( in 4-component vector of float)
-0:259 'inF1' ( in 4-component vector of float)
-0:260 refract ( temp 4-component vector of float)
-0:260 'inF0' ( in 4-component vector of float)
-0:260 'inF1' ( in 4-component vector of float)
-0:260 Constant:
-0:260 2.000000
+0:256 'inF1' ( in 4-component vector of float)
+0:256 Constant:
+0:256 2.000000
0:? bitFieldReverse ( temp 4-component vector of int)
0:? Constant:
0:? 1 (const int)
0:? 2 (const int)
0:? 3 (const int)
0:? 4 (const int)
-0:262 roundEven ( temp 4-component vector of float)
+0:258 roundEven ( temp 4-component vector of float)
+0:258 'inF0' ( in 4-component vector of float)
+0:259 inverse sqrt ( temp 4-component vector of float)
+0:259 'inF0' ( in 4-component vector of float)
+0:260 clamp ( temp 4-component vector of float)
+0:260 'inF0' ( in 4-component vector of float)
+0:260 Constant:
+0:260 0.000000
+0:260 Constant:
+0:260 1.000000
+0:261 Sign ( temp 4-component vector of float)
+0:261 'inF0' ( in 4-component vector of float)
+0:262 sine ( temp 4-component vector of float)
0:262 'inF0' ( in 4-component vector of float)
-0:263 inverse sqrt ( temp 4-component vector of float)
-0:263 'inF0' ( in 4-component vector of float)
-0:264 clamp ( temp 4-component vector of float)
+0:263 Sequence
+0:263 move second child to first child ( temp 4-component vector of float)
+0:263 'inF1' ( in 4-component vector of float)
+0:263 sine ( temp 4-component vector of float)
+0:263 'inF0' ( in 4-component vector of float)
+0:263 move second child to first child ( temp 4-component vector of float)
+0:263 'inF2' ( in 4-component vector of float)
+0:263 cosine ( temp 4-component vector of float)
+0:263 'inF0' ( in 4-component vector of float)
+0:264 hyp. sine ( temp 4-component vector of float)
0:264 'inF0' ( in 4-component vector of float)
-0:264 Constant:
-0:264 0.000000
-0:264 Constant:
-0:264 1.000000
-0:265 Sign ( temp 4-component vector of float)
+0:265 smoothstep ( temp 4-component vector of float)
0:265 'inF0' ( in 4-component vector of float)
-0:266 sine ( temp 4-component vector of float)
+0:265 'inF1' ( in 4-component vector of float)
+0:265 'inF2' ( in 4-component vector of float)
+0:266 sqrt ( temp 4-component vector of float)
0:266 'inF0' ( in 4-component vector of float)
-0:267 Sequence
-0:267 move second child to first child ( temp 4-component vector of float)
-0:267 'inF1' ( in 4-component vector of float)
-0:267 sine ( temp 4-component vector of float)
-0:267 'inF0' ( in 4-component vector of float)
-0:267 move second child to first child ( temp 4-component vector of float)
-0:267 'inF2' ( in 4-component vector of float)
-0:267 cosine ( temp 4-component vector of float)
-0:267 'inF0' ( in 4-component vector of float)
-0:268 hyp. sine ( temp 4-component vector of float)
+0:267 step ( temp 4-component vector of float)
+0:267 'inF0' ( in 4-component vector of float)
+0:267 'inF1' ( in 4-component vector of float)
+0:268 tangent ( temp 4-component vector of float)
0:268 'inF0' ( in 4-component vector of float)
-0:269 smoothstep ( temp 4-component vector of float)
+0:269 hyp. tangent ( temp 4-component vector of float)
0:269 'inF0' ( in 4-component vector of float)
-0:269 'inF1' ( in 4-component vector of float)
-0:269 'inF2' ( in 4-component vector of float)
-0:270 sqrt ( temp 4-component vector of float)
-0:270 'inF0' ( in 4-component vector of float)
-0:271 step ( temp 4-component vector of float)
+0:271 trunc ( temp 4-component vector of float)
0:271 'inF0' ( in 4-component vector of float)
-0:271 'inF1' ( in 4-component vector of float)
-0:272 tangent ( temp 4-component vector of float)
-0:272 'inF0' ( in 4-component vector of float)
-0:273 hyp. tangent ( temp 4-component vector of float)
-0:273 'inF0' ( in 4-component vector of float)
-0:275 trunc ( temp 4-component vector of float)
-0:275 'inF0' ( in 4-component vector of float)
-0:278 Branch: Return with expression
+0:274 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
-0:336 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:336 Function Parameters:
-0:336 'inF0' ( in 2X2 matrix of float)
-0:336 'inF1' ( in 2X2 matrix of float)
-0:336 'inF2' ( in 2X2 matrix of float)
+0:331 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:331 Function Parameters:
+0:331 'inF0' ( in 2X2 matrix of float)
+0:331 'inF1' ( in 2X2 matrix of float)
+0:331 'inF2' ( in 2X2 matrix of float)
0:? Sequence
-0:338 all ( temp bool)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 Absolute value ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 arc cosine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 any ( temp bool)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 arc sine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 arc tangent ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 arc tangent ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 Ceiling ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 clamp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 'inF2' ( in 2X2 matrix of float)
-0:338 cosine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 hyp. cosine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 degrees ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 determinant ( temp float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 exp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 exp2 ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 findMSB ( temp int)
-0:338 Constant:
-0:338 7 (const int)
-0:338 findLSB ( temp int)
-0:338 Constant:
-0:338 7 (const int)
-0:338 Floor ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 mod ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 Fraction ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 frexp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 ldexp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 mix ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 'inF2' ( in 2X2 matrix of float)
-0:338 log ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 matrix-scale ( temp 2X2 matrix of float)
-0:338 log2 ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 Constant:
-0:338 0.301030
-0:338 log2 ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 max ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 min ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 pow ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 radians ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 roundEven ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 inverse sqrt ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 clamp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 Constant:
-0:338 0.000000
-0:338 Constant:
-0:338 1.000000
-0:338 Sign ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 sine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 Sequence
-0:338 move second child to first child ( temp 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 sine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 move second child to first child ( temp 2X2 matrix of float)
-0:338 'inF2' ( in 2X2 matrix of float)
-0:338 cosine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 hyp. sine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 smoothstep ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 'inF2' ( in 2X2 matrix of float)
-0:338 sqrt ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 step ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 tangent ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 hyp. tangent ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 transpose ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 trunc ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:341 Branch: Return with expression
+0:333 all ( temp bool)
+0:333 Convert float to bool ( temp 2X2 matrix of bool)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 Absolute value ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 arc cosine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 any ( temp bool)
+0:333 Convert float to bool ( temp 2X2 matrix of bool)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 arc sine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 arc tangent ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 arc tangent ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 Ceiling ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 clamp ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 'inF2' ( in 2X2 matrix of float)
+0:333 cosine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 hyp. cosine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 degrees ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 determinant ( temp float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 exp ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 exp2 ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 findMSB ( temp int)
+0:333 Constant:
+0:333 7 (const int)
+0:333 findLSB ( temp int)
+0:333 Constant:
+0:333 7 (const int)
+0:333 Floor ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 mod ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 Fraction ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 ldexp ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 mix ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 'inF2' ( in 2X2 matrix of float)
+0:333 log ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 matrix-scale ( temp 2X2 matrix of float)
+0:333 log2 ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 Constant:
+0:333 0.301030
+0:333 log2 ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 max ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 min ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 pow ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 radians ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 roundEven ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 inverse sqrt ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 clamp ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 Constant:
+0:333 0.000000
+0:333 Constant:
+0:333 1.000000
+0:333 Sign ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 sine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 Sequence
+0:333 move second child to first child ( temp 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 sine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 move second child to first child ( temp 2X2 matrix of float)
+0:333 'inF2' ( in 2X2 matrix of float)
+0:333 cosine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 hyp. sine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 smoothstep ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 'inF2' ( in 2X2 matrix of float)
+0:333 sqrt ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 step ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 tangent ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 hyp. tangent ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 transpose ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 trunc ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:336 Branch: Return with expression
0:? Constant:
0:? 2.000000
0:? 2.000000
0:? 2.000000
0:? 2.000000
-0:345 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:345 Function Parameters:
-0:345 'inF0' ( in 3X3 matrix of float)
-0:345 'inF1' ( in 3X3 matrix of float)
-0:345 'inF2' ( in 3X3 matrix of float)
+0:340 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:340 Function Parameters:
+0:340 'inF0' ( in 3X3 matrix of float)
+0:340 'inF1' ( in 3X3 matrix of float)
+0:340 'inF2' ( in 3X3 matrix of float)
0:? Sequence
-0:347 all ( temp bool)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 Absolute value ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 arc cosine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 any ( temp bool)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 arc sine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 arc tangent ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 arc tangent ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 Ceiling ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 clamp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 'inF2' ( in 3X3 matrix of float)
-0:347 cosine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 hyp. cosine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 degrees ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 determinant ( temp float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 exp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 exp2 ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 findMSB ( temp int)
-0:347 Constant:
-0:347 7 (const int)
-0:347 findLSB ( temp int)
-0:347 Constant:
-0:347 7 (const int)
-0:347 Floor ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 mod ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 Fraction ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 frexp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 ldexp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 mix ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 'inF2' ( in 3X3 matrix of float)
-0:347 log ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 matrix-scale ( temp 3X3 matrix of float)
-0:347 log2 ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 Constant:
-0:347 0.301030
-0:347 log2 ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 max ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 min ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 pow ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 radians ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 roundEven ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 inverse sqrt ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 clamp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 Constant:
-0:347 0.000000
-0:347 Constant:
-0:347 1.000000
-0:347 Sign ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 sine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 Sequence
-0:347 move second child to first child ( temp 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 sine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 move second child to first child ( temp 3X3 matrix of float)
-0:347 'inF2' ( in 3X3 matrix of float)
-0:347 cosine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 hyp. sine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 smoothstep ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 'inF2' ( in 3X3 matrix of float)
-0:347 sqrt ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 step ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 tangent ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 hyp. tangent ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 transpose ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 trunc ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:350 Branch: Return with expression
+0:342 all ( temp bool)
+0:342 Convert float to bool ( temp 3X3 matrix of bool)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 Absolute value ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 arc cosine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 any ( temp bool)
+0:342 Convert float to bool ( temp 3X3 matrix of bool)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 arc sine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 arc tangent ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 arc tangent ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 Ceiling ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 clamp ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 'inF2' ( in 3X3 matrix of float)
+0:342 cosine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 hyp. cosine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 degrees ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 determinant ( temp float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 exp ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 exp2 ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 findMSB ( temp int)
+0:342 Constant:
+0:342 7 (const int)
+0:342 findLSB ( temp int)
+0:342 Constant:
+0:342 7 (const int)
+0:342 Floor ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 mod ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 Fraction ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 ldexp ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 mix ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 'inF2' ( in 3X3 matrix of float)
+0:342 log ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 matrix-scale ( temp 3X3 matrix of float)
+0:342 log2 ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 Constant:
+0:342 0.301030
+0:342 log2 ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 max ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 min ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 pow ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 radians ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 roundEven ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 inverse sqrt ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 clamp ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 Constant:
+0:342 0.000000
+0:342 Constant:
+0:342 1.000000
+0:342 Sign ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 sine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 Sequence
+0:342 move second child to first child ( temp 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 sine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 move second child to first child ( temp 3X3 matrix of float)
+0:342 'inF2' ( in 3X3 matrix of float)
+0:342 cosine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 hyp. sine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 smoothstep ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 'inF2' ( in 3X3 matrix of float)
+0:342 sqrt ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 step ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 tangent ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 hyp. tangent ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 transpose ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 trunc ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:345 Branch: Return with expression
0:? Constant:
0:? 3.000000
0:? 3.000000
@@ -946,131 +940,130 @@ Shader version: 450
0:? 3.000000
0:? 3.000000
0:? 3.000000
-0:354 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:354 Function Parameters:
-0:354 'inF0' ( in 4X4 matrix of float)
-0:354 'inF1' ( in 4X4 matrix of float)
-0:354 'inF2' ( in 4X4 matrix of float)
+0:349 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:349 Function Parameters:
+0:349 'inF0' ( in 4X4 matrix of float)
+0:349 'inF1' ( in 4X4 matrix of float)
+0:349 'inF2' ( in 4X4 matrix of float)
0:? Sequence
-0:356 all ( temp bool)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 Absolute value ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 arc cosine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 any ( temp bool)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 arc sine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 arc tangent ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 arc tangent ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 Ceiling ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 clamp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 'inF2' ( in 4X4 matrix of float)
-0:356 cosine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 hyp. cosine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 degrees ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 determinant ( temp float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 exp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 exp2 ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 findMSB ( temp int)
-0:356 Constant:
-0:356 7 (const int)
-0:356 findLSB ( temp int)
-0:356 Constant:
-0:356 7 (const int)
-0:356 Floor ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 mod ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 Fraction ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 frexp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 ldexp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 mix ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 'inF2' ( in 4X4 matrix of float)
-0:356 log ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 matrix-scale ( temp 4X4 matrix of float)
-0:356 log2 ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 Constant:
-0:356 0.301030
-0:356 log2 ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 max ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 min ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 pow ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 radians ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 roundEven ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 inverse sqrt ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 clamp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 Constant:
-0:356 0.000000
-0:356 Constant:
-0:356 1.000000
-0:356 Sign ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 sine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 Sequence
-0:356 move second child to first child ( temp 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 sine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 move second child to first child ( temp 4X4 matrix of float)
-0:356 'inF2' ( in 4X4 matrix of float)
-0:356 cosine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 hyp. sine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 smoothstep ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 'inF2' ( in 4X4 matrix of float)
-0:356 sqrt ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 step ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 tangent ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 hyp. tangent ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 transpose ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 trunc ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:359 Branch: Return with expression
+0:351 all ( temp bool)
+0:351 Convert float to bool ( temp 4X4 matrix of bool)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 Absolute value ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 arc cosine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 any ( temp bool)
+0:351 Convert float to bool ( temp 4X4 matrix of bool)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 arc sine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 arc tangent ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 arc tangent ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 Ceiling ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 clamp ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 'inF2' ( in 4X4 matrix of float)
+0:351 cosine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 hyp. cosine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 degrees ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 determinant ( temp float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 exp ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 exp2 ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 findMSB ( temp int)
+0:351 Constant:
+0:351 7 (const int)
+0:351 findLSB ( temp int)
+0:351 Constant:
+0:351 7 (const int)
+0:351 Floor ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 mod ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 Fraction ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 ldexp ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 mix ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 'inF2' ( in 4X4 matrix of float)
+0:351 log ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 matrix-scale ( temp 4X4 matrix of float)
+0:351 log2 ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 Constant:
+0:351 0.301030
+0:351 log2 ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 max ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 min ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 pow ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 radians ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 roundEven ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 inverse sqrt ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 clamp ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 Constant:
+0:351 0.000000
+0:351 Constant:
+0:351 1.000000
+0:351 Sign ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 sine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 Sequence
+0:351 move second child to first child ( temp 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 sine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 move second child to first child ( temp 4X4 matrix of float)
+0:351 'inF2' ( in 4X4 matrix of float)
+0:351 cosine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 hyp. sine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 smoothstep ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 'inF2' ( in 4X4 matrix of float)
+0:351 sqrt ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 step ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 tangent ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 hyp. tangent ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 transpose ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 trunc ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:354 Branch: Return with expression
0:? Constant:
0:? 4.000000
0:? 4.000000
@@ -1088,309 +1081,309 @@ Shader version: 450
0:? 4.000000
0:? 4.000000
0:? 4.000000
-0:377 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:377 Function Parameters:
-0:377 'inF0' ( in float)
-0:377 'inF1' ( in float)
-0:377 'inFV0' ( in 2-component vector of float)
-0:377 'inFV1' ( in 2-component vector of float)
-0:377 'inFM0' ( in 2X2 matrix of float)
-0:377 'inFM1' ( in 2X2 matrix of float)
+0:372 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:372 Function Parameters:
+0:372 'inF0' ( in float)
+0:372 'inF1' ( in float)
+0:372 'inFV0' ( in 2-component vector of float)
+0:372 'inFV1' ( in 2-component vector of float)
+0:372 'inFM0' ( in 2X2 matrix of float)
+0:372 'inFM1' ( in 2X2 matrix of float)
0:? Sequence
-0:378 Sequence
-0:378 move second child to first child ( temp float)
-0:378 'r0' ( temp float)
-0:378 component-wise multiply ( temp float)
-0:378 'inF1' ( in float)
-0:378 'inF0' ( in float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2-component vector of float)
-0:378 'r1' ( temp 2-component vector of float)
-0:378 vector-scale ( temp 2-component vector of float)
-0:378 'inF0' ( in float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2-component vector of float)
-0:378 'r2' ( temp 2-component vector of float)
-0:378 vector-scale ( temp 2-component vector of float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 'inF0' ( in float)
-0:378 Sequence
-0:378 move second child to first child ( temp float)
-0:378 'r3' ( temp float)
-0:378 dot-product ( temp float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 'inFV1' ( in 2-component vector of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2-component vector of float)
-0:378 'r4' ( temp 2-component vector of float)
-0:378 vector-times-matrix ( temp 2-component vector of float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2-component vector of float)
-0:378 'r5' ( temp 2-component vector of float)
-0:378 matrix-times-vector ( temp 2-component vector of float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2X2 matrix of float)
-0:378 'r6' ( temp 2X2 matrix of float)
-0:378 matrix-scale ( temp 2X2 matrix of float)
-0:378 'inF0' ( in float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2X2 matrix of float)
-0:378 'r7' ( temp 2X2 matrix of float)
-0:378 matrix-scale ( temp 2X2 matrix of float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:378 'inF0' ( in float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2X2 matrix of float)
-0:378 'r8' ( temp 2X2 matrix of float)
-0:378 matrix-multiply ( temp 2X2 matrix of float)
-0:378 'inFM1' ( in 2X2 matrix of float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:384 Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:384 Function Parameters:
-0:384 'inF0' ( in float)
-0:384 'inF1' ( in float)
-0:384 'inFV0' ( in 3-component vector of float)
-0:384 'inFV1' ( in 3-component vector of float)
-0:384 'inFM0' ( in 3X3 matrix of float)
-0:384 'inFM1' ( in 3X3 matrix of float)
+0:373 Sequence
+0:373 move second child to first child ( temp float)
+0:373 'r0' ( temp float)
+0:373 component-wise multiply ( temp float)
+0:373 'inF1' ( in float)
+0:373 'inF0' ( in float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2-component vector of float)
+0:373 'r1' ( temp 2-component vector of float)
+0:373 vector-scale ( temp 2-component vector of float)
+0:373 'inF0' ( in float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2-component vector of float)
+0:373 'r2' ( temp 2-component vector of float)
+0:373 vector-scale ( temp 2-component vector of float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 'inF0' ( in float)
+0:373 Sequence
+0:373 move second child to first child ( temp float)
+0:373 'r3' ( temp float)
+0:373 dot-product ( temp float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 'inFV1' ( in 2-component vector of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2-component vector of float)
+0:373 'r4' ( temp 2-component vector of float)
+0:373 vector-times-matrix ( temp 2-component vector of float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2-component vector of float)
+0:373 'r5' ( temp 2-component vector of float)
+0:373 matrix-times-vector ( temp 2-component vector of float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2X2 matrix of float)
+0:373 'r6' ( temp 2X2 matrix of float)
+0:373 matrix-scale ( temp 2X2 matrix of float)
+0:373 'inF0' ( in float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2X2 matrix of float)
+0:373 'r7' ( temp 2X2 matrix of float)
+0:373 matrix-scale ( temp 2X2 matrix of float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:373 'inF0' ( in float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2X2 matrix of float)
+0:373 'r8' ( temp 2X2 matrix of float)
+0:373 matrix-multiply ( temp 2X2 matrix of float)
+0:373 'inFM1' ( in 2X2 matrix of float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:379 Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:379 Function Parameters:
+0:379 'inF0' ( in float)
+0:379 'inF1' ( in float)
+0:379 'inFV0' ( in 3-component vector of float)
+0:379 'inFV1' ( in 3-component vector of float)
+0:379 'inFM0' ( in 3X3 matrix of float)
+0:379 'inFM1' ( in 3X3 matrix of float)
0:? Sequence
-0:385 Sequence
-0:385 move second child to first child ( temp float)
-0:385 'r0' ( temp float)
-0:385 component-wise multiply ( temp float)
-0:385 'inF1' ( in float)
-0:385 'inF0' ( in float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3-component vector of float)
-0:385 'r1' ( temp 3-component vector of float)
-0:385 vector-scale ( temp 3-component vector of float)
-0:385 'inF0' ( in float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3-component vector of float)
-0:385 'r2' ( temp 3-component vector of float)
-0:385 vector-scale ( temp 3-component vector of float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 'inF0' ( in float)
-0:385 Sequence
-0:385 move second child to first child ( temp float)
-0:385 'r3' ( temp float)
-0:385 dot-product ( temp float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 'inFV1' ( in 3-component vector of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3-component vector of float)
-0:385 'r4' ( temp 3-component vector of float)
-0:385 vector-times-matrix ( temp 3-component vector of float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3-component vector of float)
-0:385 'r5' ( temp 3-component vector of float)
-0:385 matrix-times-vector ( temp 3-component vector of float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3X3 matrix of float)
-0:385 'r6' ( temp 3X3 matrix of float)
-0:385 matrix-scale ( temp 3X3 matrix of float)
-0:385 'inF0' ( in float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3X3 matrix of float)
-0:385 'r7' ( temp 3X3 matrix of float)
-0:385 matrix-scale ( temp 3X3 matrix of float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:385 'inF0' ( in float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3X3 matrix of float)
-0:385 'r8' ( temp 3X3 matrix of float)
-0:385 matrix-multiply ( temp 3X3 matrix of float)
-0:385 'inFM1' ( in 3X3 matrix of float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:391 Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:391 Function Parameters:
-0:391 'inF0' ( in float)
-0:391 'inF1' ( in float)
-0:391 'inFV0' ( in 4-component vector of float)
-0:391 'inFV1' ( in 4-component vector of float)
-0:391 'inFM0' ( in 4X4 matrix of float)
-0:391 'inFM1' ( in 4X4 matrix of float)
+0:380 Sequence
+0:380 move second child to first child ( temp float)
+0:380 'r0' ( temp float)
+0:380 component-wise multiply ( temp float)
+0:380 'inF1' ( in float)
+0:380 'inF0' ( in float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3-component vector of float)
+0:380 'r1' ( temp 3-component vector of float)
+0:380 vector-scale ( temp 3-component vector of float)
+0:380 'inF0' ( in float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3-component vector of float)
+0:380 'r2' ( temp 3-component vector of float)
+0:380 vector-scale ( temp 3-component vector of float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 'inF0' ( in float)
+0:380 Sequence
+0:380 move second child to first child ( temp float)
+0:380 'r3' ( temp float)
+0:380 dot-product ( temp float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 'inFV1' ( in 3-component vector of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3-component vector of float)
+0:380 'r4' ( temp 3-component vector of float)
+0:380 vector-times-matrix ( temp 3-component vector of float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3-component vector of float)
+0:380 'r5' ( temp 3-component vector of float)
+0:380 matrix-times-vector ( temp 3-component vector of float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3X3 matrix of float)
+0:380 'r6' ( temp 3X3 matrix of float)
+0:380 matrix-scale ( temp 3X3 matrix of float)
+0:380 'inF0' ( in float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3X3 matrix of float)
+0:380 'r7' ( temp 3X3 matrix of float)
+0:380 matrix-scale ( temp 3X3 matrix of float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:380 'inF0' ( in float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3X3 matrix of float)
+0:380 'r8' ( temp 3X3 matrix of float)
+0:380 matrix-multiply ( temp 3X3 matrix of float)
+0:380 'inFM1' ( in 3X3 matrix of float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:386 Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:386 Function Parameters:
+0:386 'inF0' ( in float)
+0:386 'inF1' ( in float)
+0:386 'inFV0' ( in 4-component vector of float)
+0:386 'inFV1' ( in 4-component vector of float)
+0:386 'inFM0' ( in 4X4 matrix of float)
+0:386 'inFM1' ( in 4X4 matrix of float)
0:? Sequence
-0:392 Sequence
-0:392 move second child to first child ( temp float)
-0:392 'r0' ( temp float)
-0:392 component-wise multiply ( temp float)
-0:392 'inF1' ( in float)
-0:392 'inF0' ( in float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4-component vector of float)
-0:392 'r1' ( temp 4-component vector of float)
-0:392 vector-scale ( temp 4-component vector of float)
-0:392 'inF0' ( in float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4-component vector of float)
-0:392 'r2' ( temp 4-component vector of float)
-0:392 vector-scale ( temp 4-component vector of float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 'inF0' ( in float)
-0:392 Sequence
-0:392 move second child to first child ( temp float)
-0:392 'r3' ( temp float)
-0:392 dot-product ( temp float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 'inFV1' ( in 4-component vector of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4-component vector of float)
-0:392 'r4' ( temp 4-component vector of float)
-0:392 vector-times-matrix ( temp 4-component vector of float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4-component vector of float)
-0:392 'r5' ( temp 4-component vector of float)
-0:392 matrix-times-vector ( temp 4-component vector of float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4X4 matrix of float)
-0:392 'r6' ( temp 4X4 matrix of float)
-0:392 matrix-scale ( temp 4X4 matrix of float)
-0:392 'inF0' ( in float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4X4 matrix of float)
-0:392 'r7' ( temp 4X4 matrix of float)
-0:392 matrix-scale ( temp 4X4 matrix of float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:392 'inF0' ( in float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4X4 matrix of float)
-0:392 'r8' ( temp 4X4 matrix of float)
-0:392 matrix-multiply ( temp 4X4 matrix of float)
-0:392 'inFM1' ( in 4X4 matrix of float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:401 Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:401 Function Parameters:
-0:401 'inF0' ( in float)
-0:401 'inF1' ( in float)
-0:401 'inFV2' ( in 2-component vector of float)
-0:401 'inFV3' ( in 3-component vector of float)
-0:401 'inFM2x3' ( in 2X3 matrix of float)
-0:401 'inFM3x2' ( in 3X2 matrix of float)
-0:401 'inFM3x3' ( in 3X3 matrix of float)
-0:401 'inFM3x4' ( in 3X4 matrix of float)
-0:401 'inFM2x4' ( in 2X4 matrix of float)
+0:387 Sequence
+0:387 move second child to first child ( temp float)
+0:387 'r0' ( temp float)
+0:387 component-wise multiply ( temp float)
+0:387 'inF1' ( in float)
+0:387 'inF0' ( in float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4-component vector of float)
+0:387 'r1' ( temp 4-component vector of float)
+0:387 vector-scale ( temp 4-component vector of float)
+0:387 'inF0' ( in float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4-component vector of float)
+0:387 'r2' ( temp 4-component vector of float)
+0:387 vector-scale ( temp 4-component vector of float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 'inF0' ( in float)
+0:387 Sequence
+0:387 move second child to first child ( temp float)
+0:387 'r3' ( temp float)
+0:387 dot-product ( temp float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 'inFV1' ( in 4-component vector of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4-component vector of float)
+0:387 'r4' ( temp 4-component vector of float)
+0:387 vector-times-matrix ( temp 4-component vector of float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4-component vector of float)
+0:387 'r5' ( temp 4-component vector of float)
+0:387 matrix-times-vector ( temp 4-component vector of float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4X4 matrix of float)
+0:387 'r6' ( temp 4X4 matrix of float)
+0:387 matrix-scale ( temp 4X4 matrix of float)
+0:387 'inF0' ( in float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4X4 matrix of float)
+0:387 'r7' ( temp 4X4 matrix of float)
+0:387 matrix-scale ( temp 4X4 matrix of float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:387 'inF0' ( in float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4X4 matrix of float)
+0:387 'r8' ( temp 4X4 matrix of float)
+0:387 matrix-multiply ( temp 4X4 matrix of float)
+0:387 'inFM1' ( in 4X4 matrix of float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:396 Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:396 Function Parameters:
+0:396 'inF0' ( in float)
+0:396 'inF1' ( in float)
+0:396 'inFV2' ( in 2-component vector of float)
+0:396 'inFV3' ( in 3-component vector of float)
+0:396 'inFM2x3' ( in 2X3 matrix of float)
+0:396 'inFM3x2' ( in 3X2 matrix of float)
+0:396 'inFM3x3' ( in 3X3 matrix of float)
+0:396 'inFM3x4' ( in 3X4 matrix of float)
+0:396 'inFM2x4' ( in 2X4 matrix of float)
0:? Sequence
+0:397 Sequence
+0:397 move second child to first child ( temp float)
+0:397 'r00' ( temp float)
+0:397 component-wise multiply ( temp float)
+0:397 'inF1' ( in float)
+0:397 'inF0' ( in float)
+0:398 Sequence
+0:398 move second child to first child ( temp 2-component vector of float)
+0:398 'r01' ( temp 2-component vector of float)
+0:398 vector-scale ( temp 2-component vector of float)
+0:398 'inF0' ( in float)
+0:398 'inFV2' ( in 2-component vector of float)
+0:399 Sequence
+0:399 move second child to first child ( temp 3-component vector of float)
+0:399 'r02' ( temp 3-component vector of float)
+0:399 vector-scale ( temp 3-component vector of float)
+0:399 'inF0' ( in float)
+0:399 'inFV3' ( in 3-component vector of float)
+0:400 Sequence
+0:400 move second child to first child ( temp 2-component vector of float)
+0:400 'r03' ( temp 2-component vector of float)
+0:400 vector-scale ( temp 2-component vector of float)
+0:400 'inFV2' ( in 2-component vector of float)
+0:400 'inF0' ( in float)
+0:401 Sequence
+0:401 move second child to first child ( temp 3-component vector of float)
+0:401 'r04' ( temp 3-component vector of float)
+0:401 vector-scale ( temp 3-component vector of float)
+0:401 'inFV3' ( in 3-component vector of float)
+0:401 'inF0' ( in float)
0:402 Sequence
0:402 move second child to first child ( temp float)
-0:402 'r00' ( temp float)
-0:402 component-wise multiply ( temp float)
-0:402 'inF1' ( in float)
-0:402 'inF0' ( in float)
+0:402 'r05' ( temp float)
+0:402 dot-product ( temp float)
+0:402 'inFV2' ( in 2-component vector of float)
+0:402 'inFV2' ( in 2-component vector of float)
0:403 Sequence
-0:403 move second child to first child ( temp 2-component vector of float)
-0:403 'r01' ( temp 2-component vector of float)
-0:403 vector-scale ( temp 2-component vector of float)
-0:403 'inF0' ( in float)
-0:403 'inFV2' ( in 2-component vector of float)
+0:403 move second child to first child ( temp float)
+0:403 'r06' ( temp float)
+0:403 dot-product ( temp float)
+0:403 'inFV3' ( in 3-component vector of float)
+0:403 'inFV3' ( in 3-component vector of float)
0:404 Sequence
0:404 move second child to first child ( temp 3-component vector of float)
-0:404 'r02' ( temp 3-component vector of float)
-0:404 vector-scale ( temp 3-component vector of float)
-0:404 'inF0' ( in float)
-0:404 'inFV3' ( in 3-component vector of float)
+0:404 'r07' ( temp 3-component vector of float)
+0:404 matrix-times-vector ( temp 3-component vector of float)
+0:404 'inFM2x3' ( in 2X3 matrix of float)
+0:404 'inFV2' ( in 2-component vector of float)
0:405 Sequence
0:405 move second child to first child ( temp 2-component vector of float)
-0:405 'r03' ( temp 2-component vector of float)
-0:405 vector-scale ( temp 2-component vector of float)
-0:405 'inFV2' ( in 2-component vector of float)
-0:405 'inF0' ( in float)
+0:405 'r08' ( temp 2-component vector of float)
+0:405 matrix-times-vector ( temp 2-component vector of float)
+0:405 'inFM3x2' ( in 3X2 matrix of float)
+0:405 'inFV3' ( in 3-component vector of float)
0:406 Sequence
-0:406 move second child to first child ( temp 3-component vector of float)
-0:406 'r04' ( temp 3-component vector of float)
-0:406 vector-scale ( temp 3-component vector of float)
+0:406 move second child to first child ( temp 2-component vector of float)
+0:406 'r09' ( temp 2-component vector of float)
+0:406 vector-times-matrix ( temp 2-component vector of float)
0:406 'inFV3' ( in 3-component vector of float)
-0:406 'inF0' ( in float)
+0:406 'inFM2x3' ( in 2X3 matrix of float)
0:407 Sequence
-0:407 move second child to first child ( temp float)
-0:407 'r05' ( temp float)
-0:407 dot-product ( temp float)
-0:407 'inFV2' ( in 2-component vector of float)
+0:407 move second child to first child ( temp 3-component vector of float)
+0:407 'r10' ( temp 3-component vector of float)
+0:407 vector-times-matrix ( temp 3-component vector of float)
0:407 'inFV2' ( in 2-component vector of float)
+0:407 'inFM3x2' ( in 3X2 matrix of float)
0:408 Sequence
-0:408 move second child to first child ( temp float)
-0:408 'r06' ( temp float)
-0:408 dot-product ( temp float)
-0:408 'inFV3' ( in 3-component vector of float)
-0:408 'inFV3' ( in 3-component vector of float)
+0:408 move second child to first child ( temp 2X3 matrix of float)
+0:408 'r11' ( temp 2X3 matrix of float)
+0:408 matrix-scale ( temp 2X3 matrix of float)
+0:408 'inF0' ( in float)
+0:408 'inFM2x3' ( in 2X3 matrix of float)
0:409 Sequence
-0:409 move second child to first child ( temp 3-component vector of float)
-0:409 'r07' ( temp 3-component vector of float)
-0:409 matrix-times-vector ( temp 3-component vector of float)
-0:409 'inFM2x3' ( in 2X3 matrix of float)
-0:409 'inFV2' ( in 2-component vector of float)
+0:409 move second child to first child ( temp 3X2 matrix of float)
+0:409 'r12' ( temp 3X2 matrix of float)
+0:409 matrix-scale ( temp 3X2 matrix of float)
+0:409 'inF0' ( in float)
+0:409 'inFM3x2' ( in 3X2 matrix of float)
0:410 Sequence
-0:410 move second child to first child ( temp 2-component vector of float)
-0:410 'r08' ( temp 2-component vector of float)
-0:410 matrix-times-vector ( temp 2-component vector of float)
+0:410 move second child to first child ( temp 2X2 matrix of float)
+0:410 'r13' ( temp 2X2 matrix of float)
+0:410 matrix-multiply ( temp 2X2 matrix of float)
0:410 'inFM3x2' ( in 3X2 matrix of float)
-0:410 'inFV3' ( in 3-component vector of float)
+0:410 'inFM2x3' ( in 2X3 matrix of float)
0:411 Sequence
-0:411 move second child to first child ( temp 2-component vector of float)
-0:411 'r09' ( temp 2-component vector of float)
-0:411 vector-times-matrix ( temp 2-component vector of float)
-0:411 'inFV3' ( in 3-component vector of float)
+0:411 move second child to first child ( temp 2X3 matrix of float)
+0:411 'r14' ( temp 2X3 matrix of float)
+0:411 matrix-multiply ( temp 2X3 matrix of float)
+0:411 'inFM3x3' ( in 3X3 matrix of float)
0:411 'inFM2x3' ( in 2X3 matrix of float)
0:412 Sequence
-0:412 move second child to first child ( temp 3-component vector of float)
-0:412 'r10' ( temp 3-component vector of float)
-0:412 vector-times-matrix ( temp 3-component vector of float)
-0:412 'inFV2' ( in 2-component vector of float)
-0:412 'inFM3x2' ( in 3X2 matrix of float)
+0:412 move second child to first child ( temp 2X4 matrix of float)
+0:412 'r15' ( temp 2X4 matrix of float)
+0:412 matrix-multiply ( temp 2X4 matrix of float)
+0:412 'inFM3x4' ( in 3X4 matrix of float)
+0:412 'inFM2x3' ( in 2X3 matrix of float)
0:413 Sequence
-0:413 move second child to first child ( temp 2X3 matrix of float)
-0:413 'r11' ( temp 2X3 matrix of float)
-0:413 matrix-scale ( temp 2X3 matrix of float)
-0:413 'inF0' ( in float)
-0:413 'inFM2x3' ( in 2X3 matrix of float)
-0:414 Sequence
-0:414 move second child to first child ( temp 3X2 matrix of float)
-0:414 'r12' ( temp 3X2 matrix of float)
-0:414 matrix-scale ( temp 3X2 matrix of float)
-0:414 'inF0' ( in float)
-0:414 'inFM3x2' ( in 3X2 matrix of float)
-0:415 Sequence
-0:415 move second child to first child ( temp 2X2 matrix of float)
-0:415 'r13' ( temp 2X2 matrix of float)
-0:415 matrix-multiply ( temp 2X2 matrix of float)
-0:415 'inFM3x2' ( in 3X2 matrix of float)
-0:415 'inFM2x3' ( in 2X3 matrix of float)
-0:416 Sequence
-0:416 move second child to first child ( temp 2X3 matrix of float)
-0:416 'r14' ( temp 2X3 matrix of float)
-0:416 matrix-multiply ( temp 2X3 matrix of float)
-0:416 'inFM3x3' ( in 3X3 matrix of float)
-0:416 'inFM2x3' ( in 2X3 matrix of float)
-0:417 Sequence
-0:417 move second child to first child ( temp 2X4 matrix of float)
-0:417 'r15' ( temp 2X4 matrix of float)
-0:417 matrix-multiply ( temp 2X4 matrix of float)
-0:417 'inFM3x4' ( in 3X4 matrix of float)
-0:417 'inFM2x3' ( in 2X3 matrix of float)
-0:418 Sequence
-0:418 move second child to first child ( temp 3X4 matrix of float)
-0:418 'r16' ( temp 3X4 matrix of float)
-0:418 matrix-multiply ( temp 3X4 matrix of float)
-0:418 'inFM2x4' ( in 2X4 matrix of float)
-0:418 'inFM3x2' ( in 3X2 matrix of float)
+0:413 move second child to first child ( temp 3X4 matrix of float)
+0:413 'r16' ( temp 3X4 matrix of float)
+0:413 matrix-multiply ( temp 3X4 matrix of float)
+0:413 'inFM2x4' ( in 2X4 matrix of float)
+0:413 'inFM3x2' ( in 3X2 matrix of float)
0:? Linker Objects
@@ -1398,7 +1391,7 @@ Linked vertex stage:
WARNING: Linking vertex stage: Entry point not found
-Shader version: 450
+Shader version: 500
0:? Sequence
0:2 Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
0:2 Function Parameters:
@@ -1409,13 +1402,15 @@ Shader version: 450
0:2 'inU1' ( in uint)
0:? Sequence
0:3 all ( temp bool)
-0:3 'inF0' ( in float)
+0:3 Convert float to bool ( temp bool)
+0:3 'inF0' ( in float)
0:4 Absolute value ( temp float)
0:4 'inF0' ( in float)
0:5 arc cosine ( temp float)
0:5 'inF0' ( in float)
0:6 any ( temp bool)
-0:6 'inF0' ( in float)
+0:6 Convert float to bool ( temp bool)
+0:6 'inF0' ( in float)
0:7 arc sine ( temp float)
0:7 'inF0' ( in float)
0:8 floatBitsToInt ( temp int)
@@ -1461,880 +1456,872 @@ Shader version: 450
0:29 'inF1' ( in float)
0:30 Fraction ( temp float)
0:30 'inF0' ( in float)
-0:31 frexp ( temp float)
+0:31 isinf ( temp bool)
0:31 'inF0' ( in float)
-0:31 'inF1' ( in float)
-0:32 isinf ( temp bool)
+0:32 isnan ( temp bool)
0:32 'inF0' ( in float)
-0:33 isnan ( temp bool)
+0:33 ldexp ( temp float)
0:33 'inF0' ( in float)
-0:34 ldexp ( temp float)
+0:33 'inF1' ( in float)
+0:34 mix ( temp float)
0:34 'inF0' ( in float)
0:34 'inF1' ( in float)
-0:35 mix ( temp float)
+0:34 'inF2' ( in float)
+0:35 log ( temp float)
0:35 'inF0' ( in float)
-0:35 'inF1' ( in float)
-0:35 'inF2' ( in float)
-0:36 log ( temp float)
-0:36 'inF0' ( in float)
-0:37 component-wise multiply ( temp float)
-0:37 log2 ( temp float)
-0:37 'inF0' ( in float)
-0:37 Constant:
-0:37 0.301030
-0:38 log2 ( temp float)
+0:36 component-wise multiply ( temp float)
+0:36 log2 ( temp float)
+0:36 'inF0' ( in float)
+0:36 Constant:
+0:36 0.301030
+0:37 log2 ( temp float)
+0:37 'inF0' ( in float)
+0:38 max ( temp float)
0:38 'inF0' ( in float)
-0:39 max ( temp float)
+0:38 'inF1' ( in float)
+0:39 min ( temp float)
0:39 'inF0' ( in float)
0:39 'inF1' ( in float)
-0:40 min ( temp float)
-0:40 'inF0' ( in float)
-0:40 'inF1' ( in float)
-0:42 pow ( temp float)
+0:41 pow ( temp float)
+0:41 'inF0' ( in float)
+0:41 'inF1' ( in float)
+0:42 radians ( temp float)
0:42 'inF0' ( in float)
-0:42 'inF1' ( in float)
-0:43 radians ( temp float)
-0:43 'inF0' ( in float)
-0:44 bitFieldReverse ( temp int)
-0:44 Constant:
-0:44 2 (const int)
-0:45 roundEven ( temp float)
+0:43 bitFieldReverse ( temp int)
+0:43 Constant:
+0:43 2 (const int)
+0:44 roundEven ( temp float)
+0:44 'inF0' ( in float)
+0:45 inverse sqrt ( temp float)
0:45 'inF0' ( in float)
-0:46 inverse sqrt ( temp float)
+0:46 clamp ( temp float)
0:46 'inF0' ( in float)
-0:47 clamp ( temp float)
+0:46 Constant:
+0:46 0.000000
+0:46 Constant:
+0:46 1.000000
+0:47 Sign ( temp float)
0:47 'inF0' ( in float)
-0:47 Constant:
-0:47 0.000000
-0:47 Constant:
-0:47 1.000000
-0:48 Sign ( temp float)
+0:48 sine ( temp float)
0:48 'inF0' ( in float)
-0:49 sine ( temp float)
-0:49 'inF0' ( in float)
-0:50 Sequence
-0:50 move second child to first child ( temp float)
-0:50 'inF1' ( in float)
-0:50 sine ( temp float)
-0:50 'inF0' ( in float)
-0:50 move second child to first child ( temp float)
-0:50 'inF2' ( in float)
-0:50 cosine ( temp float)
-0:50 'inF0' ( in float)
-0:51 hyp. sine ( temp float)
+0:49 Sequence
+0:49 move second child to first child ( temp float)
+0:49 'inF1' ( in float)
+0:49 sine ( temp float)
+0:49 'inF0' ( in float)
+0:49 move second child to first child ( temp float)
+0:49 'inF2' ( in float)
+0:49 cosine ( temp float)
+0:49 'inF0' ( in float)
+0:50 hyp. sine ( temp float)
+0:50 'inF0' ( in float)
+0:51 smoothstep ( temp float)
0:51 'inF0' ( in float)
-0:52 smoothstep ( temp float)
+0:51 'inF1' ( in float)
+0:51 'inF2' ( in float)
+0:52 sqrt ( temp float)
0:52 'inF0' ( in float)
-0:52 'inF1' ( in float)
-0:52 'inF2' ( in float)
-0:53 sqrt ( temp float)
+0:53 step ( temp float)
0:53 'inF0' ( in float)
-0:54 step ( temp float)
+0:53 'inF1' ( in float)
+0:54 tangent ( temp float)
0:54 'inF0' ( in float)
-0:54 'inF1' ( in float)
-0:55 tangent ( temp float)
+0:55 hyp. tangent ( temp float)
0:55 'inF0' ( in float)
-0:56 hyp. tangent ( temp float)
-0:56 'inF0' ( in float)
-0:58 trunc ( temp float)
-0:58 'inF0' ( in float)
-0:60 Branch: Return with expression
-0:60 Constant:
-0:60 0.000000
-0:64 Function Definition: VertexShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:64 Function Parameters:
-0:64 'inF0' ( in 1-component vector of float)
-0:64 'inF1' ( in 1-component vector of float)
-0:64 'inF2' ( in 1-component vector of float)
+0:57 trunc ( temp float)
+0:57 'inF0' ( in float)
+0:59 Branch: Return with expression
+0:59 Constant:
+0:59 0.000000
+0:63 Function Definition: VertexShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:63 Function Parameters:
+0:63 'inF0' ( in 1-component vector of float)
+0:63 'inF1' ( in 1-component vector of float)
+0:63 'inF2' ( in 1-component vector of float)
0:? Sequence
-0:66 Branch: Return with expression
-0:66 Constant:
-0:66 0.000000
-0:70 Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:70 Function Parameters:
-0:70 'inF0' ( in 2-component vector of float)
-0:70 'inF1' ( in 2-component vector of float)
-0:70 'inF2' ( in 2-component vector of float)
-0:70 'inU0' ( in 2-component vector of uint)
-0:70 'inU1' ( in 2-component vector of uint)
+0:65 Branch: Return with expression
+0:65 Constant:
+0:65 0.000000
+0:69 Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:69 Function Parameters:
+0:69 'inF0' ( in 2-component vector of float)
+0:69 'inF1' ( in 2-component vector of float)
+0:69 'inF2' ( in 2-component vector of float)
+0:69 'inU0' ( in 2-component vector of uint)
+0:69 'inU1' ( in 2-component vector of uint)
0:? Sequence
-0:71 all ( temp bool)
+0:70 all ( temp bool)
+0:70 Convert float to bool ( temp 2-component vector of bool)
+0:70 'inF0' ( in 2-component vector of float)
+0:71 Absolute value ( temp 2-component vector of float)
0:71 'inF0' ( in 2-component vector of float)
-0:72 Absolute value ( temp 2-component vector of float)
+0:72 arc cosine ( temp 2-component vector of float)
0:72 'inF0' ( in 2-component vector of float)
-0:73 arc cosine ( temp 2-component vector of float)
-0:73 'inF0' ( in 2-component vector of float)
-0:74 any ( temp bool)
+0:73 any ( temp bool)
+0:73 Convert float to bool ( temp 2-component vector of bool)
+0:73 'inF0' ( in 2-component vector of float)
+0:74 arc sine ( temp 2-component vector of float)
0:74 'inF0' ( in 2-component vector of float)
-0:75 arc sine ( temp 2-component vector of float)
+0:75 floatBitsToInt ( temp 2-component vector of int)
0:75 'inF0' ( in 2-component vector of float)
-0:76 floatBitsToInt ( temp 2-component vector of int)
+0:76 floatBitsToUint ( temp 2-component vector of uint)
0:76 'inF0' ( in 2-component vector of float)
-0:77 floatBitsToUint ( temp 2-component vector of uint)
-0:77 'inF0' ( in 2-component vector of float)
-0:78 intBitsToFloat ( temp 2-component vector of float)
-0:78 'inU0' ( in 2-component vector of uint)
+0:77 intBitsToFloat ( temp 2-component vector of float)
+0:77 'inU0' ( in 2-component vector of uint)
+0:79 arc tangent ( temp 2-component vector of float)
+0:79 'inF0' ( in 2-component vector of float)
0:80 arc tangent ( temp 2-component vector of float)
0:80 'inF0' ( in 2-component vector of float)
-0:81 arc tangent ( temp 2-component vector of float)
+0:80 'inF1' ( in 2-component vector of float)
+0:81 Ceiling ( temp 2-component vector of float)
0:81 'inF0' ( in 2-component vector of float)
-0:81 'inF1' ( in 2-component vector of float)
-0:82 Ceiling ( temp 2-component vector of float)
+0:82 clamp ( temp 2-component vector of float)
0:82 'inF0' ( in 2-component vector of float)
-0:83 clamp ( temp 2-component vector of float)
+0:82 'inF1' ( in 2-component vector of float)
+0:82 'inF2' ( in 2-component vector of float)
+0:83 cosine ( temp 2-component vector of float)
0:83 'inF0' ( in 2-component vector of float)
-0:83 'inF1' ( in 2-component vector of float)
-0:83 'inF2' ( in 2-component vector of float)
-0:84 cosine ( temp 2-component vector of float)
+0:84 hyp. cosine ( temp 2-component vector of float)
0:84 'inF0' ( in 2-component vector of float)
-0:85 hyp. cosine ( temp 2-component vector of float)
-0:85 'inF0' ( in 2-component vector of float)
0:? bitCount ( temp 2-component vector of int)
0:? Constant:
0:? 7 (const int)
0:? 3 (const int)
-0:87 degrees ( temp 2-component vector of float)
+0:86 degrees ( temp 2-component vector of float)
+0:86 'inF0' ( in 2-component vector of float)
+0:87 distance ( temp float)
0:87 'inF0' ( in 2-component vector of float)
-0:88 distance ( temp float)
+0:87 'inF1' ( in 2-component vector of float)
+0:88 dot-product ( temp float)
0:88 'inF0' ( in 2-component vector of float)
0:88 'inF1' ( in 2-component vector of float)
-0:89 dot-product ( temp float)
-0:89 'inF0' ( in 2-component vector of float)
-0:89 'inF1' ( in 2-component vector of float)
-0:93 exp ( temp 2-component vector of float)
+0:92 exp ( temp 2-component vector of float)
+0:92 'inF0' ( in 2-component vector of float)
+0:93 exp2 ( temp 2-component vector of float)
0:93 'inF0' ( in 2-component vector of float)
-0:94 exp2 ( temp 2-component vector of float)
+0:94 face-forward ( temp 2-component vector of float)
0:94 'inF0' ( in 2-component vector of float)
-0:95 face-forward ( temp 2-component vector of float)
-0:95 'inF0' ( in 2-component vector of float)
-0:95 'inF1' ( in 2-component vector of float)
-0:95 'inF2' ( in 2-component vector of float)
-0:96 findMSB ( temp int)
+0:94 'inF1' ( in 2-component vector of float)
+0:94 'inF2' ( in 2-component vector of float)
+0:95 findMSB ( temp int)
+0:95 Constant:
+0:95 7 (const int)
+0:96 findLSB ( temp int)
0:96 Constant:
0:96 7 (const int)
-0:97 findLSB ( temp int)
-0:97 Constant:
-0:97 7 (const int)
-0:98 Floor ( temp 2-component vector of float)
-0:98 'inF0' ( in 2-component vector of float)
-0:100 mod ( temp 2-component vector of float)
+0:97 Floor ( temp 2-component vector of float)
+0:97 'inF0' ( in 2-component vector of float)
+0:99 mod ( temp 2-component vector of float)
+0:99 'inF0' ( in 2-component vector of float)
+0:99 'inF1' ( in 2-component vector of float)
+0:100 Fraction ( temp 2-component vector of float)
0:100 'inF0' ( in 2-component vector of float)
-0:100 'inF1' ( in 2-component vector of float)
-0:101 Fraction ( temp 2-component vector of float)
+0:101 isinf ( temp 2-component vector of bool)
0:101 'inF0' ( in 2-component vector of float)
-0:102 frexp ( temp 2-component vector of float)
+0:102 isnan ( temp 2-component vector of bool)
0:102 'inF0' ( in 2-component vector of float)
-0:102 'inF1' ( in 2-component vector of float)
-0:103 isinf ( temp 2-component vector of bool)
+0:103 ldexp ( temp 2-component vector of float)
0:103 'inF0' ( in 2-component vector of float)
-0:104 isnan ( temp 2-component vector of bool)
+0:103 'inF1' ( in 2-component vector of float)
+0:104 mix ( temp 2-component vector of float)
0:104 'inF0' ( in 2-component vector of float)
-0:105 ldexp ( temp 2-component vector of float)
+0:104 'inF1' ( in 2-component vector of float)
+0:104 'inF2' ( in 2-component vector of float)
+0:105 length ( temp float)
0:105 'inF0' ( in 2-component vector of float)
-0:105 'inF1' ( in 2-component vector of float)
-0:106 mix ( temp 2-component vector of float)
+0:106 log ( temp 2-component vector of float)
0:106 'inF0' ( in 2-component vector of float)
-0:106 'inF1' ( in 2-component vector of float)
-0:106 'inF2' ( in 2-component vector of float)
-0:107 length ( temp float)
-0:107 'inF0' ( in 2-component vector of float)
-0:108 log ( temp 2-component vector of float)
+0:107 vector-scale ( temp 2-component vector of float)
+0:107 log2 ( temp 2-component vector of float)
+0:107 'inF0' ( in 2-component vector of float)
+0:107 Constant:
+0:107 0.301030
+0:108 log2 ( temp 2-component vector of float)
0:108 'inF0' ( in 2-component vector of float)
-0:109 vector-scale ( temp 2-component vector of float)
-0:109 log2 ( temp 2-component vector of float)
-0:109 'inF0' ( in 2-component vector of float)
-0:109 Constant:
-0:109 0.301030
-0:110 log2 ( temp 2-component vector of float)
+0:109 max ( temp 2-component vector of float)
+0:109 'inF0' ( in 2-component vector of float)
+0:109 'inF1' ( in 2-component vector of float)
+0:110 min ( temp 2-component vector of float)
0:110 'inF0' ( in 2-component vector of float)
-0:111 max ( temp 2-component vector of float)
-0:111 'inF0' ( in 2-component vector of float)
-0:111 'inF1' ( in 2-component vector of float)
-0:112 min ( temp 2-component vector of float)
+0:110 'inF1' ( in 2-component vector of float)
+0:112 normalize ( temp 2-component vector of float)
0:112 'inF0' ( in 2-component vector of float)
-0:112 'inF1' ( in 2-component vector of float)
-0:114 normalize ( temp 2-component vector of float)
+0:113 pow ( temp 2-component vector of float)
+0:113 'inF0' ( in 2-component vector of float)
+0:113 'inF1' ( in 2-component vector of float)
+0:114 radians ( temp 2-component vector of float)
0:114 'inF0' ( in 2-component vector of float)
-0:115 pow ( temp 2-component vector of float)
+0:115 reflect ( temp 2-component vector of float)
0:115 'inF0' ( in 2-component vector of float)
0:115 'inF1' ( in 2-component vector of float)
-0:116 radians ( temp 2-component vector of float)
+0:116 refract ( temp 2-component vector of float)
0:116 'inF0' ( in 2-component vector of float)
-0:117 reflect ( temp 2-component vector of float)
-0:117 'inF0' ( in 2-component vector of float)
-0:117 'inF1' ( in 2-component vector of float)
-0:118 refract ( temp 2-component vector of float)
-0:118 'inF0' ( in 2-component vector of float)
-0:118 'inF1' ( in 2-component vector of float)
-0:118 Constant:
-0:118 2.000000
+0:116 'inF1' ( in 2-component vector of float)
+0:116 Constant:
+0:116 2.000000
0:? bitFieldReverse ( temp 2-component vector of int)
0:? Constant:
0:? 1 (const int)
0:? 2 (const int)
-0:120 roundEven ( temp 2-component vector of float)
+0:118 roundEven ( temp 2-component vector of float)
+0:118 'inF0' ( in 2-component vector of float)
+0:119 inverse sqrt ( temp 2-component vector of float)
+0:119 'inF0' ( in 2-component vector of float)
+0:120 clamp ( temp 2-component vector of float)
0:120 'inF0' ( in 2-component vector of float)
-0:121 inverse sqrt ( temp 2-component vector of float)
+0:120 Constant:
+0:120 0.000000
+0:120 Constant:
+0:120 1.000000
+0:121 Sign ( temp 2-component vector of float)
0:121 'inF0' ( in 2-component vector of float)
-0:122 clamp ( temp 2-component vector of float)
+0:122 sine ( temp 2-component vector of float)
0:122 'inF0' ( in 2-component vector of float)
-0:122 Constant:
-0:122 0.000000
-0:122 Constant:
-0:122 1.000000
-0:123 Sign ( temp 2-component vector of float)
-0:123 'inF0' ( in 2-component vector of float)
-0:124 sine ( temp 2-component vector of float)
+0:123 Sequence
+0:123 move second child to first child ( temp 2-component vector of float)
+0:123 'inF1' ( in 2-component vector of float)
+0:123 sine ( temp 2-component vector of float)
+0:123 'inF0' ( in 2-component vector of float)
+0:123 move second child to first child ( temp 2-component vector of float)
+0:123 'inF2' ( in 2-component vector of float)
+0:123 cosine ( temp 2-component vector of float)
+0:123 'inF0' ( in 2-component vector of float)
+0:124 hyp. sine ( temp 2-component vector of float)
0:124 'inF0' ( in 2-component vector of float)
-0:125 Sequence
-0:125 move second child to first child ( temp 2-component vector of float)
-0:125 'inF1' ( in 2-component vector of float)
-0:125 sine ( temp 2-component vector of float)
-0:125 'inF0' ( in 2-component vector of float)
-0:125 move second child to first child ( temp 2-component vector of float)
-0:125 'inF2' ( in 2-component vector of float)
-0:125 cosine ( temp 2-component vector of float)
-0:125 'inF0' ( in 2-component vector of float)
-0:126 hyp. sine ( temp 2-component vector of float)
+0:125 smoothstep ( temp 2-component vector of float)
+0:125 'inF0' ( in 2-component vector of float)
+0:125 'inF1' ( in 2-component vector of float)
+0:125 'inF2' ( in 2-component vector of float)
+0:126 sqrt ( temp 2-component vector of float)
0:126 'inF0' ( in 2-component vector of float)
-0:127 smoothstep ( temp 2-component vector of float)
+0:127 step ( temp 2-component vector of float)
0:127 'inF0' ( in 2-component vector of float)
0:127 'inF1' ( in 2-component vector of float)
-0:127 'inF2' ( in 2-component vector of float)
-0:128 sqrt ( temp 2-component vector of float)
+0:128 tangent ( temp 2-component vector of float)
0:128 'inF0' ( in 2-component vector of float)
-0:129 step ( temp 2-component vector of float)
+0:129 hyp. tangent ( temp 2-component vector of float)
0:129 'inF0' ( in 2-component vector of float)
-0:129 'inF1' ( in 2-component vector of float)
-0:130 tangent ( temp 2-component vector of float)
-0:130 'inF0' ( in 2-component vector of float)
-0:131 hyp. tangent ( temp 2-component vector of float)
+0:131 trunc ( temp 2-component vector of float)
0:131 'inF0' ( in 2-component vector of float)
-0:133 trunc ( temp 2-component vector of float)
-0:133 'inF0' ( in 2-component vector of float)
-0:136 Branch: Return with expression
+0:134 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
-0:140 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:140 Function Parameters:
-0:140 'inF0' ( in 3-component vector of float)
-0:140 'inF1' ( in 3-component vector of float)
-0:140 'inF2' ( in 3-component vector of float)
-0:140 'inU0' ( in 3-component vector of uint)
-0:140 'inU1' ( in 3-component vector of uint)
+0:138 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:138 Function Parameters:
+0:138 'inF0' ( in 3-component vector of float)
+0:138 'inF1' ( in 3-component vector of float)
+0:138 'inF2' ( in 3-component vector of float)
+0:138 'inU0' ( in 3-component vector of uint)
+0:138 'inU1' ( in 3-component vector of uint)
0:? Sequence
-0:141 all ( temp bool)
+0:139 all ( temp bool)
+0:139 Convert float to bool ( temp 3-component vector of bool)
+0:139 'inF0' ( in 3-component vector of float)
+0:140 Absolute value ( temp 3-component vector of float)
+0:140 'inF0' ( in 3-component vector of float)
+0:141 arc cosine ( temp 3-component vector of float)
0:141 'inF0' ( in 3-component vector of float)
-0:142 Absolute value ( temp 3-component vector of float)
-0:142 'inF0' ( in 3-component vector of float)
-0:143 arc cosine ( temp 3-component vector of float)
+0:142 any ( temp bool)
+0:142 Convert float to bool ( temp 3-component vector of bool)
+0:142 'inF0' ( in 3-component vector of float)
+0:143 arc sine ( temp 3-component vector of float)
0:143 'inF0' ( in 3-component vector of float)
-0:144 any ( temp bool)
+0:144 floatBitsToInt ( temp 3-component vector of int)
0:144 'inF0' ( in 3-component vector of float)
-0:145 arc sine ( temp 3-component vector of float)
+0:145 floatBitsToUint ( temp 3-component vector of uint)
0:145 'inF0' ( in 3-component vector of float)
-0:146 floatBitsToInt ( temp 3-component vector of int)
-0:146 'inF0' ( in 3-component vector of float)
-0:147 floatBitsToUint ( temp 3-component vector of uint)
-0:147 'inF0' ( in 3-component vector of float)
-0:148 intBitsToFloat ( temp 3-component vector of float)
-0:148 'inU0' ( in 3-component vector of uint)
-0:150 arc tangent ( temp 3-component vector of float)
+0:146 intBitsToFloat ( temp 3-component vector of float)
+0:146 'inU0' ( in 3-component vector of uint)
+0:148 arc tangent ( temp 3-component vector of float)
+0:148 'inF0' ( in 3-component vector of float)
+0:149 arc tangent ( temp 3-component vector of float)
+0:149 'inF0' ( in 3-component vector of float)
+0:149 'inF1' ( in 3-component vector of float)
+0:150 Ceiling ( temp 3-component vector of float)
0:150 'inF0' ( in 3-component vector of float)
-0:151 arc tangent ( temp 3-component vector of float)
+0:151 clamp ( temp 3-component vector of float)
0:151 'inF0' ( in 3-component vector of float)
0:151 'inF1' ( in 3-component vector of float)
-0:152 Ceiling ( temp 3-component vector of float)
+0:151 'inF2' ( in 3-component vector of float)
+0:152 cosine ( temp 3-component vector of float)
0:152 'inF0' ( in 3-component vector of float)
-0:153 clamp ( temp 3-component vector of float)
+0:153 hyp. cosine ( temp 3-component vector of float)
0:153 'inF0' ( in 3-component vector of float)
-0:153 'inF1' ( in 3-component vector of float)
-0:153 'inF2' ( in 3-component vector of float)
-0:154 cosine ( temp 3-component vector of float)
-0:154 'inF0' ( in 3-component vector of float)
-0:155 hyp. cosine ( temp 3-component vector of float)
-0:155 'inF0' ( in 3-component vector of float)
0:? bitCount ( temp 3-component vector of int)
0:? Constant:
0:? 7 (const int)
0:? 3 (const int)
0:? 5 (const int)
-0:157 cross-product ( temp 3-component vector of float)
+0:155 cross-product ( temp 3-component vector of float)
+0:155 'inF0' ( in 3-component vector of float)
+0:155 'inF1' ( in 3-component vector of float)
+0:156 degrees ( temp 3-component vector of float)
+0:156 'inF0' ( in 3-component vector of float)
+0:157 distance ( temp float)
0:157 'inF0' ( in 3-component vector of float)
0:157 'inF1' ( in 3-component vector of float)
-0:158 degrees ( temp 3-component vector of float)
+0:158 dot-product ( temp float)
0:158 'inF0' ( in 3-component vector of float)
-0:159 distance ( temp float)
-0:159 'inF0' ( in 3-component vector of float)
-0:159 'inF1' ( in 3-component vector of float)
-0:160 dot-product ( temp float)
-0:160 'inF0' ( in 3-component vector of float)
-0:160 'inF1' ( in 3-component vector of float)
-0:164 exp ( temp 3-component vector of float)
+0:158 'inF1' ( in 3-component vector of float)
+0:162 exp ( temp 3-component vector of float)
+0:162 'inF0' ( in 3-component vector of float)
+0:163 exp2 ( temp 3-component vector of float)
+0:163 'inF0' ( in 3-component vector of float)
+0:164 face-forward ( temp 3-component vector of float)
0:164 'inF0' ( in 3-component vector of float)
-0:165 exp2 ( temp 3-component vector of float)
-0:165 'inF0' ( in 3-component vector of float)
-0:166 face-forward ( temp 3-component vector of float)
-0:166 'inF0' ( in 3-component vector of float)
-0:166 'inF1' ( in 3-component vector of float)
-0:166 'inF2' ( in 3-component vector of float)
-0:167 findMSB ( temp int)
-0:167 Constant:
-0:167 7 (const int)
-0:168 findLSB ( temp int)
-0:168 Constant:
-0:168 7 (const int)
-0:169 Floor ( temp 3-component vector of float)
+0:164 'inF1' ( in 3-component vector of float)
+0:164 'inF2' ( in 3-component vector of float)
+0:165 findMSB ( temp int)
+0:165 Constant:
+0:165 7 (const int)
+0:166 findLSB ( temp int)
+0:166 Constant:
+0:166 7 (const int)
+0:167 Floor ( temp 3-component vector of float)
+0:167 'inF0' ( in 3-component vector of float)
+0:169 mod ( temp 3-component vector of float)
0:169 'inF0' ( in 3-component vector of float)
-0:171 mod ( temp 3-component vector of float)
+0:169 'inF1' ( in 3-component vector of float)
+0:170 Fraction ( temp 3-component vector of float)
+0:170 'inF0' ( in 3-component vector of float)
+0:171 isinf ( temp 3-component vector of bool)
0:171 'inF0' ( in 3-component vector of float)
-0:171 'inF1' ( in 3-component vector of float)
-0:172 Fraction ( temp 3-component vector of float)
+0:172 isnan ( temp 3-component vector of bool)
0:172 'inF0' ( in 3-component vector of float)
-0:173 frexp ( temp 3-component vector of float)
+0:173 ldexp ( temp 3-component vector of float)
0:173 'inF0' ( in 3-component vector of float)
0:173 'inF1' ( in 3-component vector of float)
-0:174 isinf ( temp 3-component vector of bool)
+0:174 mix ( temp 3-component vector of float)
0:174 'inF0' ( in 3-component vector of float)
-0:175 isnan ( temp 3-component vector of bool)
+0:174 'inF1' ( in 3-component vector of float)
+0:174 'inF2' ( in 3-component vector of float)
+0:175 length ( temp float)
0:175 'inF0' ( in 3-component vector of float)
-0:176 ldexp ( temp 3-component vector of float)
+0:176 log ( temp 3-component vector of float)
0:176 'inF0' ( in 3-component vector of float)
-0:176 'inF1' ( in 3-component vector of float)
-0:177 mix ( temp 3-component vector of float)
-0:177 'inF0' ( in 3-component vector of float)
-0:177 'inF1' ( in 3-component vector of float)
-0:177 'inF2' ( in 3-component vector of float)
-0:178 length ( temp float)
+0:177 vector-scale ( temp 3-component vector of float)
+0:177 log2 ( temp 3-component vector of float)
+0:177 'inF0' ( in 3-component vector of float)
+0:177 Constant:
+0:177 0.301030
+0:178 log2 ( temp 3-component vector of float)
0:178 'inF0' ( in 3-component vector of float)
-0:179 log ( temp 3-component vector of float)
+0:179 max ( temp 3-component vector of float)
0:179 'inF0' ( in 3-component vector of float)
-0:180 vector-scale ( temp 3-component vector of float)
-0:180 log2 ( temp 3-component vector of float)
-0:180 'inF0' ( in 3-component vector of float)
-0:180 Constant:
-0:180 0.301030
-0:181 log2 ( temp 3-component vector of float)
-0:181 'inF0' ( in 3-component vector of float)
-0:182 max ( temp 3-component vector of float)
+0:179 'inF1' ( in 3-component vector of float)
+0:180 min ( temp 3-component vector of float)
+0:180 'inF0' ( in 3-component vector of float)
+0:180 'inF1' ( in 3-component vector of float)
+0:182 normalize ( temp 3-component vector of float)
0:182 'inF0' ( in 3-component vector of float)
-0:182 'inF1' ( in 3-component vector of float)
-0:183 min ( temp 3-component vector of float)
+0:183 pow ( temp 3-component vector of float)
0:183 'inF0' ( in 3-component vector of float)
0:183 'inF1' ( in 3-component vector of float)
-0:185 normalize ( temp 3-component vector of float)
+0:184 radians ( temp 3-component vector of float)
+0:184 'inF0' ( in 3-component vector of float)
+0:185 reflect ( temp 3-component vector of float)
0:185 'inF0' ( in 3-component vector of float)
-0:186 pow ( temp 3-component vector of float)
+0:185 'inF1' ( in 3-component vector of float)
+0:186 refract ( temp 3-component vector of float)
0:186 'inF0' ( in 3-component vector of float)
0:186 'inF1' ( in 3-component vector of float)
-0:187 radians ( temp 3-component vector of float)
-0:187 'inF0' ( in 3-component vector of float)
-0:188 reflect ( temp 3-component vector of float)
-0:188 'inF0' ( in 3-component vector of float)
-0:188 'inF1' ( in 3-component vector of float)
-0:189 refract ( temp 3-component vector of float)
-0:189 'inF0' ( in 3-component vector of float)
-0:189 'inF1' ( in 3-component vector of float)
-0:189 Constant:
-0:189 2.000000
+0:186 Constant:
+0:186 2.000000
0:? bitFieldReverse ( temp 3-component vector of int)
0:? Constant:
0:? 1 (const int)
0:? 2 (const int)
0:? 3 (const int)
-0:191 roundEven ( temp 3-component vector of float)
+0:188 roundEven ( temp 3-component vector of float)
+0:188 'inF0' ( in 3-component vector of float)
+0:189 inverse sqrt ( temp 3-component vector of float)
+0:189 'inF0' ( in 3-component vector of float)
+0:190 clamp ( temp 3-component vector of float)
+0:190 'inF0' ( in 3-component vector of float)
+0:190 Constant:
+0:190 0.000000
+0:190 Constant:
+0:190 1.000000
+0:191 Sign ( temp 3-component vector of float)
0:191 'inF0' ( in 3-component vector of float)
-0:192 inverse sqrt ( temp 3-component vector of float)
+0:192 sine ( temp 3-component vector of float)
0:192 'inF0' ( in 3-component vector of float)
-0:193 clamp ( temp 3-component vector of float)
-0:193 'inF0' ( in 3-component vector of float)
-0:193 Constant:
-0:193 0.000000
-0:193 Constant:
-0:193 1.000000
-0:194 Sign ( temp 3-component vector of float)
+0:193 Sequence
+0:193 move second child to first child ( temp 3-component vector of float)
+0:193 'inF1' ( in 3-component vector of float)
+0:193 sine ( temp 3-component vector of float)
+0:193 'inF0' ( in 3-component vector of float)
+0:193 move second child to first child ( temp 3-component vector of float)
+0:193 'inF2' ( in 3-component vector of float)
+0:193 cosine ( temp 3-component vector of float)
+0:193 'inF0' ( in 3-component vector of float)
+0:194 hyp. sine ( temp 3-component vector of float)
0:194 'inF0' ( in 3-component vector of float)
-0:195 sine ( temp 3-component vector of float)
+0:195 smoothstep ( temp 3-component vector of float)
0:195 'inF0' ( in 3-component vector of float)
-0:196 Sequence
-0:196 move second child to first child ( temp 3-component vector of float)
-0:196 'inF1' ( in 3-component vector of float)
-0:196 sine ( temp 3-component vector of float)
-0:196 'inF0' ( in 3-component vector of float)
-0:196 move second child to first child ( temp 3-component vector of float)
-0:196 'inF2' ( in 3-component vector of float)
-0:196 cosine ( temp 3-component vector of float)
-0:196 'inF0' ( in 3-component vector of float)
-0:197 hyp. sine ( temp 3-component vector of float)
+0:195 'inF1' ( in 3-component vector of float)
+0:195 'inF2' ( in 3-component vector of float)
+0:196 sqrt ( temp 3-component vector of float)
+0:196 'inF0' ( in 3-component vector of float)
+0:197 step ( temp 3-component vector of float)
0:197 'inF0' ( in 3-component vector of float)
-0:198 smoothstep ( temp 3-component vector of float)
+0:197 'inF1' ( in 3-component vector of float)
+0:198 tangent ( temp 3-component vector of float)
0:198 'inF0' ( in 3-component vector of float)
-0:198 'inF1' ( in 3-component vector of float)
-0:198 'inF2' ( in 3-component vector of float)
-0:199 sqrt ( temp 3-component vector of float)
+0:199 hyp. tangent ( temp 3-component vector of float)
0:199 'inF0' ( in 3-component vector of float)
-0:200 step ( temp 3-component vector of float)
-0:200 'inF0' ( in 3-component vector of float)
-0:200 'inF1' ( in 3-component vector of float)
-0:201 tangent ( temp 3-component vector of float)
+0:201 trunc ( temp 3-component vector of float)
0:201 'inF0' ( in 3-component vector of float)
-0:202 hyp. tangent ( temp 3-component vector of float)
-0:202 'inF0' ( in 3-component vector of float)
-0:204 trunc ( temp 3-component vector of float)
-0:204 'inF0' ( in 3-component vector of float)
-0:207 Branch: Return with expression
+0:204 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
-0:211 Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:211 Function Parameters:
-0:211 'inF0' ( in 4-component vector of float)
-0:211 'inF1' ( in 4-component vector of float)
-0:211 'inF2' ( in 4-component vector of float)
-0:211 'inU0' ( in 4-component vector of uint)
-0:211 'inU1' ( in 4-component vector of uint)
+0:208 Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:208 Function Parameters:
+0:208 'inF0' ( in 4-component vector of float)
+0:208 'inF1' ( in 4-component vector of float)
+0:208 'inF2' ( in 4-component vector of float)
+0:208 'inU0' ( in 4-component vector of uint)
+0:208 'inU1' ( in 4-component vector of uint)
0:? Sequence
-0:212 all ( temp bool)
-0:212 'inF0' ( in 4-component vector of float)
-0:213 Absolute value ( temp 4-component vector of float)
+0:209 all ( temp bool)
+0:209 Convert float to bool ( temp 4-component vector of bool)
+0:209 'inF0' ( in 4-component vector of float)
+0:210 Absolute value ( temp 4-component vector of float)
+0:210 'inF0' ( in 4-component vector of float)
+0:211 arc cosine ( temp 4-component vector of float)
+0:211 'inF0' ( in 4-component vector of float)
+0:212 any ( temp bool)
+0:212 Convert float to bool ( temp 4-component vector of bool)
+0:212 'inF0' ( in 4-component vector of float)
+0:213 arc sine ( temp 4-component vector of float)
0:213 'inF0' ( in 4-component vector of float)
-0:214 arc cosine ( temp 4-component vector of float)
+0:214 floatBitsToInt ( temp 4-component vector of int)
0:214 'inF0' ( in 4-component vector of float)
-0:215 any ( temp bool)
+0:215 floatBitsToUint ( temp 4-component vector of uint)
0:215 'inF0' ( in 4-component vector of float)
-0:216 arc sine ( temp 4-component vector of float)
-0:216 'inF0' ( in 4-component vector of float)
-0:217 floatBitsToInt ( temp 4-component vector of int)
-0:217 'inF0' ( in 4-component vector of float)
-0:218 floatBitsToUint ( temp 4-component vector of uint)
+0:216 intBitsToFloat ( temp 4-component vector of float)
+0:216 'inU0' ( in 4-component vector of uint)
+0:218 arc tangent ( temp 4-component vector of float)
0:218 'inF0' ( in 4-component vector of float)
-0:219 intBitsToFloat ( temp 4-component vector of float)
-0:219 'inU0' ( in 4-component vector of uint)
-0:221 arc tangent ( temp 4-component vector of float)
+0:219 arc tangent ( temp 4-component vector of float)
+0:219 'inF0' ( in 4-component vector of float)
+0:219 'inF1' ( in 4-component vector of float)
+0:220 Ceiling ( temp 4-component vector of float)
+0:220 'inF0' ( in 4-component vector of float)
+0:221 clamp ( temp 4-component vector of float)
0:221 'inF0' ( in 4-component vector of float)
-0:222 arc tangent ( temp 4-component vector of float)
+0:221 'inF1' ( in 4-component vector of float)
+0:221 'inF2' ( in 4-component vector of float)
+0:222 cosine ( temp 4-component vector of float)
0:222 'inF0' ( in 4-component vector of float)
-0:222 'inF1' ( in 4-component vector of float)
-0:223 Ceiling ( temp 4-component vector of float)
+0:223 hyp. cosine ( temp 4-component vector of float)
0:223 'inF0' ( in 4-component vector of float)
-0:224 clamp ( temp 4-component vector of float)
-0:224 'inF0' ( in 4-component vector of float)
-0:224 'inF1' ( in 4-component vector of float)
-0:224 'inF2' ( in 4-component vector of float)
-0:225 cosine ( temp 4-component vector of float)
-0:225 'inF0' ( in 4-component vector of float)
-0:226 hyp. cosine ( temp 4-component vector of float)
-0:226 'inF0' ( in 4-component vector of float)
0:? bitCount ( temp 4-component vector of int)
0:? Constant:
0:? 7 (const int)
0:? 3 (const int)
0:? 5 (const int)
0:? 2 (const int)
-0:228 degrees ( temp 4-component vector of float)
-0:228 'inF0' ( in 4-component vector of float)
-0:229 distance ( temp float)
-0:229 'inF0' ( in 4-component vector of float)
-0:229 'inF1' ( in 4-component vector of float)
-0:230 dot-product ( temp float)
-0:230 'inF0' ( in 4-component vector of float)
-0:230 'inF1' ( in 4-component vector of float)
-0:231 Construct vec4 ( temp 4-component vector of float)
-0:231 Constant:
-0:231 1.000000
-0:231 component-wise multiply ( temp float)
-0:231 direct index ( temp float)
-0:231 'inF0' ( in 4-component vector of float)
-0:231 Constant:
-0:231 1 (const int)
-0:231 direct index ( temp float)
-0:231 'inF1' ( in 4-component vector of float)
-0:231 Constant:
-0:231 1 (const int)
-0:231 direct index ( temp float)
-0:231 'inF0' ( in 4-component vector of float)
-0:231 Constant:
-0:231 2 (const int)
-0:231 direct index ( temp float)
-0:231 'inF1' ( in 4-component vector of float)
-0:231 Constant:
-0:231 3 (const int)
-0:235 exp ( temp 4-component vector of float)
-0:235 'inF0' ( in 4-component vector of float)
-0:236 exp2 ( temp 4-component vector of float)
-0:236 'inF0' ( in 4-component vector of float)
-0:237 face-forward ( temp 4-component vector of float)
+0:225 degrees ( temp 4-component vector of float)
+0:225 'inF0' ( in 4-component vector of float)
+0:226 distance ( temp float)
+0:226 'inF0' ( in 4-component vector of float)
+0:226 'inF1' ( in 4-component vector of float)
+0:227 dot-product ( temp float)
+0:227 'inF0' ( in 4-component vector of float)
+0:227 'inF1' ( in 4-component vector of float)
+0:228 Construct vec4 ( temp 4-component vector of float)
+0:228 Constant:
+0:228 1.000000
+0:228 component-wise multiply ( temp float)
+0:228 direct index ( temp float)
+0:228 'inF0' ( in 4-component vector of float)
+0:228 Constant:
+0:228 1 (const int)
+0:228 direct index ( temp float)
+0:228 'inF1' ( in 4-component vector of float)
+0:228 Constant:
+0:228 1 (const int)
+0:228 direct index ( temp float)
+0:228 'inF0' ( in 4-component vector of float)
+0:228 Constant:
+0:228 2 (const int)
+0:228 direct index ( temp float)
+0:228 'inF1' ( in 4-component vector of float)
+0:228 Constant:
+0:228 3 (const int)
+0:232 exp ( temp 4-component vector of float)
+0:232 'inF0' ( in 4-component vector of float)
+0:233 exp2 ( temp 4-component vector of float)
+0:233 'inF0' ( in 4-component vector of float)
+0:234 face-forward ( temp 4-component vector of float)
+0:234 'inF0' ( in 4-component vector of float)
+0:234 'inF1' ( in 4-component vector of float)
+0:234 'inF2' ( in 4-component vector of float)
+0:235 findMSB ( temp int)
+0:235 Constant:
+0:235 7 (const int)
+0:236 findLSB ( temp int)
+0:236 Constant:
+0:236 7 (const int)
+0:237 Floor ( temp 4-component vector of float)
0:237 'inF0' ( in 4-component vector of float)
-0:237 'inF1' ( in 4-component vector of float)
-0:237 'inF2' ( in 4-component vector of float)
-0:238 findMSB ( temp int)
-0:238 Constant:
-0:238 7 (const int)
-0:239 findLSB ( temp int)
-0:239 Constant:
-0:239 7 (const int)
-0:240 Floor ( temp 4-component vector of float)
+0:239 mod ( temp 4-component vector of float)
+0:239 'inF0' ( in 4-component vector of float)
+0:239 'inF1' ( in 4-component vector of float)
+0:240 Fraction ( temp 4-component vector of float)
0:240 'inF0' ( in 4-component vector of float)
-0:242 mod ( temp 4-component vector of float)
+0:241 isinf ( temp 4-component vector of bool)
+0:241 'inF0' ( in 4-component vector of float)
+0:242 isnan ( temp 4-component vector of bool)
0:242 'inF0' ( in 4-component vector of float)
-0:242 'inF1' ( in 4-component vector of float)
-0:243 Fraction ( temp 4-component vector of float)
+0:243 ldexp ( temp 4-component vector of float)
0:243 'inF0' ( in 4-component vector of float)
-0:244 frexp ( temp 4-component vector of float)
+0:243 'inF1' ( in 4-component vector of float)
+0:244 mix ( temp 4-component vector of float)
0:244 'inF0' ( in 4-component vector of float)
0:244 'inF1' ( in 4-component vector of float)
-0:245 isinf ( temp 4-component vector of bool)
+0:244 'inF2' ( in 4-component vector of float)
+0:245 length ( temp float)
0:245 'inF0' ( in 4-component vector of float)
-0:246 isnan ( temp 4-component vector of bool)
+0:246 log ( temp 4-component vector of float)
0:246 'inF0' ( in 4-component vector of float)
-0:247 ldexp ( temp 4-component vector of float)
-0:247 'inF0' ( in 4-component vector of float)
-0:247 'inF1' ( in 4-component vector of float)
-0:248 mix ( temp 4-component vector of float)
+0:247 vector-scale ( temp 4-component vector of float)
+0:247 log2 ( temp 4-component vector of float)
+0:247 'inF0' ( in 4-component vector of float)
+0:247 Constant:
+0:247 0.301030
+0:248 log2 ( temp 4-component vector of float)
0:248 'inF0' ( in 4-component vector of float)
-0:248 'inF1' ( in 4-component vector of float)
-0:248 'inF2' ( in 4-component vector of float)
-0:249 length ( temp float)
+0:249 max ( temp 4-component vector of float)
0:249 'inF0' ( in 4-component vector of float)
-0:250 log ( temp 4-component vector of float)
+0:249 'inF1' ( in 4-component vector of float)
+0:250 min ( temp 4-component vector of float)
0:250 'inF0' ( in 4-component vector of float)
-0:251 vector-scale ( temp 4-component vector of float)
-0:251 log2 ( temp 4-component vector of float)
-0:251 'inF0' ( in 4-component vector of float)
-0:251 Constant:
-0:251 0.301030
-0:252 log2 ( temp 4-component vector of float)
+0:250 'inF1' ( in 4-component vector of float)
+0:252 normalize ( temp 4-component vector of float)
0:252 'inF0' ( in 4-component vector of float)
-0:253 max ( temp 4-component vector of float)
+0:253 pow ( temp 4-component vector of float)
0:253 'inF0' ( in 4-component vector of float)
0:253 'inF1' ( in 4-component vector of float)
-0:254 min ( temp 4-component vector of float)
+0:254 radians ( temp 4-component vector of float)
0:254 'inF0' ( in 4-component vector of float)
-0:254 'inF1' ( in 4-component vector of float)
-0:256 normalize ( temp 4-component vector of float)
+0:255 reflect ( temp 4-component vector of float)
+0:255 'inF0' ( in 4-component vector of float)
+0:255 'inF1' ( in 4-component vector of float)
+0:256 refract ( temp 4-component vector of float)
0:256 'inF0' ( in 4-component vector of float)
-0:257 pow ( temp 4-component vector of float)
-0:257 'inF0' ( in 4-component vector of float)
-0:257 'inF1' ( in 4-component vector of float)
-0:258 radians ( temp 4-component vector of float)
-0:258 'inF0' ( in 4-component vector of float)
-0:259 reflect ( temp 4-component vector of float)
-0:259 'inF0' ( in 4-component vector of float)
-0:259 'inF1' ( in 4-component vector of float)
-0:260 refract ( temp 4-component vector of float)
-0:260 'inF0' ( in 4-component vector of float)
-0:260 'inF1' ( in 4-component vector of float)
-0:260 Constant:
-0:260 2.000000
+0:256 'inF1' ( in 4-component vector of float)
+0:256 Constant:
+0:256 2.000000
0:? bitFieldReverse ( temp 4-component vector of int)
0:? Constant:
0:? 1 (const int)
0:? 2 (const int)
0:? 3 (const int)
0:? 4 (const int)
-0:262 roundEven ( temp 4-component vector of float)
+0:258 roundEven ( temp 4-component vector of float)
+0:258 'inF0' ( in 4-component vector of float)
+0:259 inverse sqrt ( temp 4-component vector of float)
+0:259 'inF0' ( in 4-component vector of float)
+0:260 clamp ( temp 4-component vector of float)
+0:260 'inF0' ( in 4-component vector of float)
+0:260 Constant:
+0:260 0.000000
+0:260 Constant:
+0:260 1.000000
+0:261 Sign ( temp 4-component vector of float)
+0:261 'inF0' ( in 4-component vector of float)
+0:262 sine ( temp 4-component vector of float)
0:262 'inF0' ( in 4-component vector of float)
-0:263 inverse sqrt ( temp 4-component vector of float)
-0:263 'inF0' ( in 4-component vector of float)
-0:264 clamp ( temp 4-component vector of float)
+0:263 Sequence
+0:263 move second child to first child ( temp 4-component vector of float)
+0:263 'inF1' ( in 4-component vector of float)
+0:263 sine ( temp 4-component vector of float)
+0:263 'inF0' ( in 4-component vector of float)
+0:263 move second child to first child ( temp 4-component vector of float)
+0:263 'inF2' ( in 4-component vector of float)
+0:263 cosine ( temp 4-component vector of float)
+0:263 'inF0' ( in 4-component vector of float)
+0:264 hyp. sine ( temp 4-component vector of float)
0:264 'inF0' ( in 4-component vector of float)
-0:264 Constant:
-0:264 0.000000
-0:264 Constant:
-0:264 1.000000
-0:265 Sign ( temp 4-component vector of float)
+0:265 smoothstep ( temp 4-component vector of float)
0:265 'inF0' ( in 4-component vector of float)
-0:266 sine ( temp 4-component vector of float)
+0:265 'inF1' ( in 4-component vector of float)
+0:265 'inF2' ( in 4-component vector of float)
+0:266 sqrt ( temp 4-component vector of float)
0:266 'inF0' ( in 4-component vector of float)
-0:267 Sequence
-0:267 move second child to first child ( temp 4-component vector of float)
-0:267 'inF1' ( in 4-component vector of float)
-0:267 sine ( temp 4-component vector of float)
-0:267 'inF0' ( in 4-component vector of float)
-0:267 move second child to first child ( temp 4-component vector of float)
-0:267 'inF2' ( in 4-component vector of float)
-0:267 cosine ( temp 4-component vector of float)
-0:267 'inF0' ( in 4-component vector of float)
-0:268 hyp. sine ( temp 4-component vector of float)
+0:267 step ( temp 4-component vector of float)
+0:267 'inF0' ( in 4-component vector of float)
+0:267 'inF1' ( in 4-component vector of float)
+0:268 tangent ( temp 4-component vector of float)
0:268 'inF0' ( in 4-component vector of float)
-0:269 smoothstep ( temp 4-component vector of float)
+0:269 hyp. tangent ( temp 4-component vector of float)
0:269 'inF0' ( in 4-component vector of float)
-0:269 'inF1' ( in 4-component vector of float)
-0:269 'inF2' ( in 4-component vector of float)
-0:270 sqrt ( temp 4-component vector of float)
-0:270 'inF0' ( in 4-component vector of float)
-0:271 step ( temp 4-component vector of float)
+0:271 trunc ( temp 4-component vector of float)
0:271 'inF0' ( in 4-component vector of float)
-0:271 'inF1' ( in 4-component vector of float)
-0:272 tangent ( temp 4-component vector of float)
-0:272 'inF0' ( in 4-component vector of float)
-0:273 hyp. tangent ( temp 4-component vector of float)
-0:273 'inF0' ( in 4-component vector of float)
-0:275 trunc ( temp 4-component vector of float)
-0:275 'inF0' ( in 4-component vector of float)
-0:278 Branch: Return with expression
+0:274 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
-0:336 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:336 Function Parameters:
-0:336 'inF0' ( in 2X2 matrix of float)
-0:336 'inF1' ( in 2X2 matrix of float)
-0:336 'inF2' ( in 2X2 matrix of float)
+0:331 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:331 Function Parameters:
+0:331 'inF0' ( in 2X2 matrix of float)
+0:331 'inF1' ( in 2X2 matrix of float)
+0:331 'inF2' ( in 2X2 matrix of float)
0:? Sequence
-0:338 all ( temp bool)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 Absolute value ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 arc cosine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 any ( temp bool)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 arc sine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 arc tangent ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 arc tangent ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 Ceiling ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 clamp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 'inF2' ( in 2X2 matrix of float)
-0:338 cosine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 hyp. cosine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 degrees ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 determinant ( temp float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 exp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 exp2 ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 findMSB ( temp int)
-0:338 Constant:
-0:338 7 (const int)
-0:338 findLSB ( temp int)
-0:338 Constant:
-0:338 7 (const int)
-0:338 Floor ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 mod ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 Fraction ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 frexp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 ldexp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 mix ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 'inF2' ( in 2X2 matrix of float)
-0:338 log ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 matrix-scale ( temp 2X2 matrix of float)
-0:338 log2 ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 Constant:
-0:338 0.301030
-0:338 log2 ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 max ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 min ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 pow ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 radians ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 roundEven ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 inverse sqrt ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 clamp ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 Constant:
-0:338 0.000000
-0:338 Constant:
-0:338 1.000000
-0:338 Sign ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 sine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 Sequence
-0:338 move second child to first child ( temp 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 sine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 move second child to first child ( temp 2X2 matrix of float)
-0:338 'inF2' ( in 2X2 matrix of float)
-0:338 cosine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 hyp. sine ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 smoothstep ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 'inF2' ( in 2X2 matrix of float)
-0:338 sqrt ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 step ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 'inF1' ( in 2X2 matrix of float)
-0:338 tangent ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 hyp. tangent ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 transpose ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:338 trunc ( temp 2X2 matrix of float)
-0:338 'inF0' ( in 2X2 matrix of float)
-0:341 Branch: Return with expression
+0:333 all ( temp bool)
+0:333 Convert float to bool ( temp 2X2 matrix of bool)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 Absolute value ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 arc cosine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 any ( temp bool)
+0:333 Convert float to bool ( temp 2X2 matrix of bool)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 arc sine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 arc tangent ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 arc tangent ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 Ceiling ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 clamp ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 'inF2' ( in 2X2 matrix of float)
+0:333 cosine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 hyp. cosine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 degrees ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 determinant ( temp float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 exp ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 exp2 ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 findMSB ( temp int)
+0:333 Constant:
+0:333 7 (const int)
+0:333 findLSB ( temp int)
+0:333 Constant:
+0:333 7 (const int)
+0:333 Floor ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 mod ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 Fraction ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 ldexp ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 mix ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 'inF2' ( in 2X2 matrix of float)
+0:333 log ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 matrix-scale ( temp 2X2 matrix of float)
+0:333 log2 ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 Constant:
+0:333 0.301030
+0:333 log2 ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 max ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 min ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 pow ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 radians ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 roundEven ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 inverse sqrt ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 clamp ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 Constant:
+0:333 0.000000
+0:333 Constant:
+0:333 1.000000
+0:333 Sign ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 sine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 Sequence
+0:333 move second child to first child ( temp 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 sine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 move second child to first child ( temp 2X2 matrix of float)
+0:333 'inF2' ( in 2X2 matrix of float)
+0:333 cosine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 hyp. sine ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 smoothstep ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 'inF2' ( in 2X2 matrix of float)
+0:333 sqrt ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 step ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 'inF1' ( in 2X2 matrix of float)
+0:333 tangent ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 hyp. tangent ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 transpose ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:333 trunc ( temp 2X2 matrix of float)
+0:333 'inF0' ( in 2X2 matrix of float)
+0:336 Branch: Return with expression
0:? Constant:
0:? 2.000000
0:? 2.000000
0:? 2.000000
0:? 2.000000
-0:345 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:345 Function Parameters:
-0:345 'inF0' ( in 3X3 matrix of float)
-0:345 'inF1' ( in 3X3 matrix of float)
-0:345 'inF2' ( in 3X3 matrix of float)
+0:340 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:340 Function Parameters:
+0:340 'inF0' ( in 3X3 matrix of float)
+0:340 'inF1' ( in 3X3 matrix of float)
+0:340 'inF2' ( in 3X3 matrix of float)
0:? Sequence
-0:347 all ( temp bool)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 Absolute value ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 arc cosine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 any ( temp bool)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 arc sine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 arc tangent ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 arc tangent ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 Ceiling ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 clamp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 'inF2' ( in 3X3 matrix of float)
-0:347 cosine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 hyp. cosine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 degrees ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 determinant ( temp float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 exp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 exp2 ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 findMSB ( temp int)
-0:347 Constant:
-0:347 7 (const int)
-0:347 findLSB ( temp int)
-0:347 Constant:
-0:347 7 (const int)
-0:347 Floor ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 mod ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 Fraction ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 frexp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 ldexp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 mix ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 'inF2' ( in 3X3 matrix of float)
-0:347 log ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 matrix-scale ( temp 3X3 matrix of float)
-0:347 log2 ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 Constant:
-0:347 0.301030
-0:347 log2 ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 max ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 min ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 pow ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 radians ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 roundEven ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 inverse sqrt ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 clamp ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 Constant:
-0:347 0.000000
-0:347 Constant:
-0:347 1.000000
-0:347 Sign ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 sine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 Sequence
-0:347 move second child to first child ( temp 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 sine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 move second child to first child ( temp 3X3 matrix of float)
-0:347 'inF2' ( in 3X3 matrix of float)
-0:347 cosine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 hyp. sine ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 smoothstep ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 'inF2' ( in 3X3 matrix of float)
-0:347 sqrt ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 step ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 'inF1' ( in 3X3 matrix of float)
-0:347 tangent ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 hyp. tangent ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 transpose ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:347 trunc ( temp 3X3 matrix of float)
-0:347 'inF0' ( in 3X3 matrix of float)
-0:350 Branch: Return with expression
+0:342 all ( temp bool)
+0:342 Convert float to bool ( temp 3X3 matrix of bool)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 Absolute value ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 arc cosine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 any ( temp bool)
+0:342 Convert float to bool ( temp 3X3 matrix of bool)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 arc sine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 arc tangent ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 arc tangent ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 Ceiling ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 clamp ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 'inF2' ( in 3X3 matrix of float)
+0:342 cosine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 hyp. cosine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 degrees ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 determinant ( temp float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 exp ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 exp2 ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 findMSB ( temp int)
+0:342 Constant:
+0:342 7 (const int)
+0:342 findLSB ( temp int)
+0:342 Constant:
+0:342 7 (const int)
+0:342 Floor ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 mod ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 Fraction ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 ldexp ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 mix ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 'inF2' ( in 3X3 matrix of float)
+0:342 log ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 matrix-scale ( temp 3X3 matrix of float)
+0:342 log2 ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 Constant:
+0:342 0.301030
+0:342 log2 ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 max ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 min ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 pow ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 radians ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 roundEven ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 inverse sqrt ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 clamp ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 Constant:
+0:342 0.000000
+0:342 Constant:
+0:342 1.000000
+0:342 Sign ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 sine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 Sequence
+0:342 move second child to first child ( temp 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 sine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 move second child to first child ( temp 3X3 matrix of float)
+0:342 'inF2' ( in 3X3 matrix of float)
+0:342 cosine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 hyp. sine ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 smoothstep ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 'inF2' ( in 3X3 matrix of float)
+0:342 sqrt ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 step ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 'inF1' ( in 3X3 matrix of float)
+0:342 tangent ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 hyp. tangent ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 transpose ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:342 trunc ( temp 3X3 matrix of float)
+0:342 'inF0' ( in 3X3 matrix of float)
+0:345 Branch: Return with expression
0:? Constant:
0:? 3.000000
0:? 3.000000
@@ -2345,131 +2332,130 @@ Shader version: 450
0:? 3.000000
0:? 3.000000
0:? 3.000000
-0:354 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:354 Function Parameters:
-0:354 'inF0' ( in 4X4 matrix of float)
-0:354 'inF1' ( in 4X4 matrix of float)
-0:354 'inF2' ( in 4X4 matrix of float)
+0:349 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:349 Function Parameters:
+0:349 'inF0' ( in 4X4 matrix of float)
+0:349 'inF1' ( in 4X4 matrix of float)
+0:349 'inF2' ( in 4X4 matrix of float)
0:? Sequence
-0:356 all ( temp bool)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 Absolute value ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 arc cosine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 any ( temp bool)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 arc sine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 arc tangent ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 arc tangent ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 Ceiling ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 clamp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 'inF2' ( in 4X4 matrix of float)
-0:356 cosine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 hyp. cosine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 degrees ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 determinant ( temp float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 exp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 exp2 ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 findMSB ( temp int)
-0:356 Constant:
-0:356 7 (const int)
-0:356 findLSB ( temp int)
-0:356 Constant:
-0:356 7 (const int)
-0:356 Floor ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 mod ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 Fraction ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 frexp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 ldexp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 mix ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 'inF2' ( in 4X4 matrix of float)
-0:356 log ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 matrix-scale ( temp 4X4 matrix of float)
-0:356 log2 ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 Constant:
-0:356 0.301030
-0:356 log2 ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 max ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 min ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 pow ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 radians ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 roundEven ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 inverse sqrt ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 clamp ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 Constant:
-0:356 0.000000
-0:356 Constant:
-0:356 1.000000
-0:356 Sign ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 sine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 Sequence
-0:356 move second child to first child ( temp 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 sine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 move second child to first child ( temp 4X4 matrix of float)
-0:356 'inF2' ( in 4X4 matrix of float)
-0:356 cosine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 hyp. sine ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 smoothstep ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 'inF2' ( in 4X4 matrix of float)
-0:356 sqrt ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 step ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 'inF1' ( in 4X4 matrix of float)
-0:356 tangent ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 hyp. tangent ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 transpose ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:356 trunc ( temp 4X4 matrix of float)
-0:356 'inF0' ( in 4X4 matrix of float)
-0:359 Branch: Return with expression
+0:351 all ( temp bool)
+0:351 Convert float to bool ( temp 4X4 matrix of bool)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 Absolute value ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 arc cosine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 any ( temp bool)
+0:351 Convert float to bool ( temp 4X4 matrix of bool)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 arc sine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 arc tangent ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 arc tangent ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 Ceiling ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 clamp ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 'inF2' ( in 4X4 matrix of float)
+0:351 cosine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 hyp. cosine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 degrees ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 determinant ( temp float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 exp ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 exp2 ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 findMSB ( temp int)
+0:351 Constant:
+0:351 7 (const int)
+0:351 findLSB ( temp int)
+0:351 Constant:
+0:351 7 (const int)
+0:351 Floor ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 mod ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 Fraction ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 ldexp ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 mix ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 'inF2' ( in 4X4 matrix of float)
+0:351 log ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 matrix-scale ( temp 4X4 matrix of float)
+0:351 log2 ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 Constant:
+0:351 0.301030
+0:351 log2 ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 max ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 min ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 pow ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 radians ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 roundEven ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 inverse sqrt ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 clamp ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 Constant:
+0:351 0.000000
+0:351 Constant:
+0:351 1.000000
+0:351 Sign ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 sine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 Sequence
+0:351 move second child to first child ( temp 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 sine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 move second child to first child ( temp 4X4 matrix of float)
+0:351 'inF2' ( in 4X4 matrix of float)
+0:351 cosine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 hyp. sine ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 smoothstep ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 'inF2' ( in 4X4 matrix of float)
+0:351 sqrt ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 step ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 'inF1' ( in 4X4 matrix of float)
+0:351 tangent ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 hyp. tangent ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 transpose ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:351 trunc ( temp 4X4 matrix of float)
+0:351 'inF0' ( in 4X4 matrix of float)
+0:354 Branch: Return with expression
0:? Constant:
0:? 4.000000
0:? 4.000000
@@ -2487,319 +2473,320 @@ Shader version: 450
0:? 4.000000
0:? 4.000000
0:? 4.000000
-0:377 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:377 Function Parameters:
-0:377 'inF0' ( in float)
-0:377 'inF1' ( in float)
-0:377 'inFV0' ( in 2-component vector of float)
-0:377 'inFV1' ( in 2-component vector of float)
-0:377 'inFM0' ( in 2X2 matrix of float)
-0:377 'inFM1' ( in 2X2 matrix of float)
+0:372 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:372 Function Parameters:
+0:372 'inF0' ( in float)
+0:372 'inF1' ( in float)
+0:372 'inFV0' ( in 2-component vector of float)
+0:372 'inFV1' ( in 2-component vector of float)
+0:372 'inFM0' ( in 2X2 matrix of float)
+0:372 'inFM1' ( in 2X2 matrix of float)
0:? Sequence
-0:378 Sequence
-0:378 move second child to first child ( temp float)
-0:378 'r0' ( temp float)
-0:378 component-wise multiply ( temp float)
-0:378 'inF1' ( in float)
-0:378 'inF0' ( in float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2-component vector of float)
-0:378 'r1' ( temp 2-component vector of float)
-0:378 vector-scale ( temp 2-component vector of float)
-0:378 'inF0' ( in float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2-component vector of float)
-0:378 'r2' ( temp 2-component vector of float)
-0:378 vector-scale ( temp 2-component vector of float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 'inF0' ( in float)
-0:378 Sequence
-0:378 move second child to first child ( temp float)
-0:378 'r3' ( temp float)
-0:378 dot-product ( temp float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 'inFV1' ( in 2-component vector of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2-component vector of float)
-0:378 'r4' ( temp 2-component vector of float)
-0:378 vector-times-matrix ( temp 2-component vector of float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2-component vector of float)
-0:378 'r5' ( temp 2-component vector of float)
-0:378 matrix-times-vector ( temp 2-component vector of float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:378 'inFV0' ( in 2-component vector of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2X2 matrix of float)
-0:378 'r6' ( temp 2X2 matrix of float)
-0:378 matrix-scale ( temp 2X2 matrix of float)
-0:378 'inF0' ( in float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2X2 matrix of float)
-0:378 'r7' ( temp 2X2 matrix of float)
-0:378 matrix-scale ( temp 2X2 matrix of float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:378 'inF0' ( in float)
-0:378 Sequence
-0:378 move second child to first child ( temp 2X2 matrix of float)
-0:378 'r8' ( temp 2X2 matrix of float)
-0:378 matrix-multiply ( temp 2X2 matrix of float)
-0:378 'inFM1' ( in 2X2 matrix of float)
-0:378 'inFM0' ( in 2X2 matrix of float)
-0:384 Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:384 Function Parameters:
-0:384 'inF0' ( in float)
-0:384 'inF1' ( in float)
-0:384 'inFV0' ( in 3-component vector of float)
-0:384 'inFV1' ( in 3-component vector of float)
-0:384 'inFM0' ( in 3X3 matrix of float)
-0:384 'inFM1' ( in 3X3 matrix of float)
+0:373 Sequence
+0:373 move second child to first child ( temp float)
+0:373 'r0' ( temp float)
+0:373 component-wise multiply ( temp float)
+0:373 'inF1' ( in float)
+0:373 'inF0' ( in float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2-component vector of float)
+0:373 'r1' ( temp 2-component vector of float)
+0:373 vector-scale ( temp 2-component vector of float)
+0:373 'inF0' ( in float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2-component vector of float)
+0:373 'r2' ( temp 2-component vector of float)
+0:373 vector-scale ( temp 2-component vector of float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 'inF0' ( in float)
+0:373 Sequence
+0:373 move second child to first child ( temp float)
+0:373 'r3' ( temp float)
+0:373 dot-product ( temp float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 'inFV1' ( in 2-component vector of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2-component vector of float)
+0:373 'r4' ( temp 2-component vector of float)
+0:373 vector-times-matrix ( temp 2-component vector of float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2-component vector of float)
+0:373 'r5' ( temp 2-component vector of float)
+0:373 matrix-times-vector ( temp 2-component vector of float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:373 'inFV0' ( in 2-component vector of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2X2 matrix of float)
+0:373 'r6' ( temp 2X2 matrix of float)
+0:373 matrix-scale ( temp 2X2 matrix of float)
+0:373 'inF0' ( in float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2X2 matrix of float)
+0:373 'r7' ( temp 2X2 matrix of float)
+0:373 matrix-scale ( temp 2X2 matrix of float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:373 'inF0' ( in float)
+0:373 Sequence
+0:373 move second child to first child ( temp 2X2 matrix of float)
+0:373 'r8' ( temp 2X2 matrix of float)
+0:373 matrix-multiply ( temp 2X2 matrix of float)
+0:373 'inFM1' ( in 2X2 matrix of float)
+0:373 'inFM0' ( in 2X2 matrix of float)
+0:379 Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:379 Function Parameters:
+0:379 'inF0' ( in float)
+0:379 'inF1' ( in float)
+0:379 'inFV0' ( in 3-component vector of float)
+0:379 'inFV1' ( in 3-component vector of float)
+0:379 'inFM0' ( in 3X3 matrix of float)
+0:379 'inFM1' ( in 3X3 matrix of float)
0:? Sequence
-0:385 Sequence
-0:385 move second child to first child ( temp float)
-0:385 'r0' ( temp float)
-0:385 component-wise multiply ( temp float)
-0:385 'inF1' ( in float)
-0:385 'inF0' ( in float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3-component vector of float)
-0:385 'r1' ( temp 3-component vector of float)
-0:385 vector-scale ( temp 3-component vector of float)
-0:385 'inF0' ( in float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3-component vector of float)
-0:385 'r2' ( temp 3-component vector of float)
-0:385 vector-scale ( temp 3-component vector of float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 'inF0' ( in float)
-0:385 Sequence
-0:385 move second child to first child ( temp float)
-0:385 'r3' ( temp float)
-0:385 dot-product ( temp float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 'inFV1' ( in 3-component vector of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3-component vector of float)
-0:385 'r4' ( temp 3-component vector of float)
-0:385 vector-times-matrix ( temp 3-component vector of float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3-component vector of float)
-0:385 'r5' ( temp 3-component vector of float)
-0:385 matrix-times-vector ( temp 3-component vector of float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:385 'inFV0' ( in 3-component vector of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3X3 matrix of float)
-0:385 'r6' ( temp 3X3 matrix of float)
-0:385 matrix-scale ( temp 3X3 matrix of float)
-0:385 'inF0' ( in float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3X3 matrix of float)
-0:385 'r7' ( temp 3X3 matrix of float)
-0:385 matrix-scale ( temp 3X3 matrix of float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:385 'inF0' ( in float)
-0:385 Sequence
-0:385 move second child to first child ( temp 3X3 matrix of float)
-0:385 'r8' ( temp 3X3 matrix of float)
-0:385 matrix-multiply ( temp 3X3 matrix of float)
-0:385 'inFM1' ( in 3X3 matrix of float)
-0:385 'inFM0' ( in 3X3 matrix of float)
-0:391 Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:391 Function Parameters:
-0:391 'inF0' ( in float)
-0:391 'inF1' ( in float)
-0:391 'inFV0' ( in 4-component vector of float)
-0:391 'inFV1' ( in 4-component vector of float)
-0:391 'inFM0' ( in 4X4 matrix of float)
-0:391 'inFM1' ( in 4X4 matrix of float)
+0:380 Sequence
+0:380 move second child to first child ( temp float)
+0:380 'r0' ( temp float)
+0:380 component-wise multiply ( temp float)
+0:380 'inF1' ( in float)
+0:380 'inF0' ( in float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3-component vector of float)
+0:380 'r1' ( temp 3-component vector of float)
+0:380 vector-scale ( temp 3-component vector of float)
+0:380 'inF0' ( in float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3-component vector of float)
+0:380 'r2' ( temp 3-component vector of float)
+0:380 vector-scale ( temp 3-component vector of float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 'inF0' ( in float)
+0:380 Sequence
+0:380 move second child to first child ( temp float)
+0:380 'r3' ( temp float)
+0:380 dot-product ( temp float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 'inFV1' ( in 3-component vector of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3-component vector of float)
+0:380 'r4' ( temp 3-component vector of float)
+0:380 vector-times-matrix ( temp 3-component vector of float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3-component vector of float)
+0:380 'r5' ( temp 3-component vector of float)
+0:380 matrix-times-vector ( temp 3-component vector of float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:380 'inFV0' ( in 3-component vector of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3X3 matrix of float)
+0:380 'r6' ( temp 3X3 matrix of float)
+0:380 matrix-scale ( temp 3X3 matrix of float)
+0:380 'inF0' ( in float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3X3 matrix of float)
+0:380 'r7' ( temp 3X3 matrix of float)
+0:380 matrix-scale ( temp 3X3 matrix of float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:380 'inF0' ( in float)
+0:380 Sequence
+0:380 move second child to first child ( temp 3X3 matrix of float)
+0:380 'r8' ( temp 3X3 matrix of float)
+0:380 matrix-multiply ( temp 3X3 matrix of float)
+0:380 'inFM1' ( in 3X3 matrix of float)
+0:380 'inFM0' ( in 3X3 matrix of float)
+0:386 Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:386 Function Parameters:
+0:386 'inF0' ( in float)
+0:386 'inF1' ( in float)
+0:386 'inFV0' ( in 4-component vector of float)
+0:386 'inFV1' ( in 4-component vector of float)
+0:386 'inFM0' ( in 4X4 matrix of float)
+0:386 'inFM1' ( in 4X4 matrix of float)
0:? Sequence
-0:392 Sequence
-0:392 move second child to first child ( temp float)
-0:392 'r0' ( temp float)
-0:392 component-wise multiply ( temp float)
-0:392 'inF1' ( in float)
-0:392 'inF0' ( in float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4-component vector of float)
-0:392 'r1' ( temp 4-component vector of float)
-0:392 vector-scale ( temp 4-component vector of float)
-0:392 'inF0' ( in float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4-component vector of float)
-0:392 'r2' ( temp 4-component vector of float)
-0:392 vector-scale ( temp 4-component vector of float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 'inF0' ( in float)
-0:392 Sequence
-0:392 move second child to first child ( temp float)
-0:392 'r3' ( temp float)
-0:392 dot-product ( temp float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 'inFV1' ( in 4-component vector of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4-component vector of float)
-0:392 'r4' ( temp 4-component vector of float)
-0:392 vector-times-matrix ( temp 4-component vector of float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4-component vector of float)
-0:392 'r5' ( temp 4-component vector of float)
-0:392 matrix-times-vector ( temp 4-component vector of float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:392 'inFV0' ( in 4-component vector of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4X4 matrix of float)
-0:392 'r6' ( temp 4X4 matrix of float)
-0:392 matrix-scale ( temp 4X4 matrix of float)
-0:392 'inF0' ( in float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4X4 matrix of float)
-0:392 'r7' ( temp 4X4 matrix of float)
-0:392 matrix-scale ( temp 4X4 matrix of float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:392 'inF0' ( in float)
-0:392 Sequence
-0:392 move second child to first child ( temp 4X4 matrix of float)
-0:392 'r8' ( temp 4X4 matrix of float)
-0:392 matrix-multiply ( temp 4X4 matrix of float)
-0:392 'inFM1' ( in 4X4 matrix of float)
-0:392 'inFM0' ( in 4X4 matrix of float)
-0:401 Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:401 Function Parameters:
-0:401 'inF0' ( in float)
-0:401 'inF1' ( in float)
-0:401 'inFV2' ( in 2-component vector of float)
-0:401 'inFV3' ( in 3-component vector of float)
-0:401 'inFM2x3' ( in 2X3 matrix of float)
-0:401 'inFM3x2' ( in 3X2 matrix of float)
-0:401 'inFM3x3' ( in 3X3 matrix of float)
-0:401 'inFM3x4' ( in 3X4 matrix of float)
-0:401 'inFM2x4' ( in 2X4 matrix of float)
+0:387 Sequence
+0:387 move second child to first child ( temp float)
+0:387 'r0' ( temp float)
+0:387 component-wise multiply ( temp float)
+0:387 'inF1' ( in float)
+0:387 'inF0' ( in float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4-component vector of float)
+0:387 'r1' ( temp 4-component vector of float)
+0:387 vector-scale ( temp 4-component vector of float)
+0:387 'inF0' ( in float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4-component vector of float)
+0:387 'r2' ( temp 4-component vector of float)
+0:387 vector-scale ( temp 4-component vector of float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 'inF0' ( in float)
+0:387 Sequence
+0:387 move second child to first child ( temp float)
+0:387 'r3' ( temp float)
+0:387 dot-product ( temp float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 'inFV1' ( in 4-component vector of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4-component vector of float)
+0:387 'r4' ( temp 4-component vector of float)
+0:387 vector-times-matrix ( temp 4-component vector of float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4-component vector of float)
+0:387 'r5' ( temp 4-component vector of float)
+0:387 matrix-times-vector ( temp 4-component vector of float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:387 'inFV0' ( in 4-component vector of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4X4 matrix of float)
+0:387 'r6' ( temp 4X4 matrix of float)
+0:387 matrix-scale ( temp 4X4 matrix of float)
+0:387 'inF0' ( in float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4X4 matrix of float)
+0:387 'r7' ( temp 4X4 matrix of float)
+0:387 matrix-scale ( temp 4X4 matrix of float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:387 'inF0' ( in float)
+0:387 Sequence
+0:387 move second child to first child ( temp 4X4 matrix of float)
+0:387 'r8' ( temp 4X4 matrix of float)
+0:387 matrix-multiply ( temp 4X4 matrix of float)
+0:387 'inFM1' ( in 4X4 matrix of float)
+0:387 'inFM0' ( in 4X4 matrix of float)
+0:396 Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:396 Function Parameters:
+0:396 'inF0' ( in float)
+0:396 'inF1' ( in float)
+0:396 'inFV2' ( in 2-component vector of float)
+0:396 'inFV3' ( in 3-component vector of float)
+0:396 'inFM2x3' ( in 2X3 matrix of float)
+0:396 'inFM3x2' ( in 3X2 matrix of float)
+0:396 'inFM3x3' ( in 3X3 matrix of float)
+0:396 'inFM3x4' ( in 3X4 matrix of float)
+0:396 'inFM2x4' ( in 2X4 matrix of float)
0:? Sequence
+0:397 Sequence
+0:397 move second child to first child ( temp float)
+0:397 'r00' ( temp float)
+0:397 component-wise multiply ( temp float)
+0:397 'inF1' ( in float)
+0:397 'inF0' ( in float)
+0:398 Sequence
+0:398 move second child to first child ( temp 2-component vector of float)
+0:398 'r01' ( temp 2-component vector of float)
+0:398 vector-scale ( temp 2-component vector of float)
+0:398 'inF0' ( in float)
+0:398 'inFV2' ( in 2-component vector of float)
+0:399 Sequence
+0:399 move second child to first child ( temp 3-component vector of float)
+0:399 'r02' ( temp 3-component vector of float)
+0:399 vector-scale ( temp 3-component vector of float)
+0:399 'inF0' ( in float)
+0:399 'inFV3' ( in 3-component vector of float)
+0:400 Sequence
+0:400 move second child to first child ( temp 2-component vector of float)
+0:400 'r03' ( temp 2-component vector of float)
+0:400 vector-scale ( temp 2-component vector of float)
+0:400 'inFV2' ( in 2-component vector of float)
+0:400 'inF0' ( in float)
+0:401 Sequence
+0:401 move second child to first child ( temp 3-component vector of float)
+0:401 'r04' ( temp 3-component vector of float)
+0:401 vector-scale ( temp 3-component vector of float)
+0:401 'inFV3' ( in 3-component vector of float)
+0:401 'inF0' ( in float)
0:402 Sequence
0:402 move second child to first child ( temp float)
-0:402 'r00' ( temp float)
-0:402 component-wise multiply ( temp float)
-0:402 'inF1' ( in float)
-0:402 'inF0' ( in float)
+0:402 'r05' ( temp float)
+0:402 dot-product ( temp float)
+0:402 'inFV2' ( in 2-component vector of float)
+0:402 'inFV2' ( in 2-component vector of float)
0:403 Sequence
-0:403 move second child to first child ( temp 2-component vector of float)
-0:403 'r01' ( temp 2-component vector of float)
-0:403 vector-scale ( temp 2-component vector of float)
-0:403 'inF0' ( in float)
-0:403 'inFV2' ( in 2-component vector of float)
+0:403 move second child to first child ( temp float)
+0:403 'r06' ( temp float)
+0:403 dot-product ( temp float)
+0:403 'inFV3' ( in 3-component vector of float)
+0:403 'inFV3' ( in 3-component vector of float)
0:404 Sequence
0:404 move second child to first child ( temp 3-component vector of float)
-0:404 'r02' ( temp 3-component vector of float)
-0:404 vector-scale ( temp 3-component vector of float)
-0:404 'inF0' ( in float)
-0:404 'inFV3' ( in 3-component vector of float)
+0:404 'r07' ( temp 3-component vector of float)
+0:404 matrix-times-vector ( temp 3-component vector of float)
+0:404 'inFM2x3' ( in 2X3 matrix of float)
+0:404 'inFV2' ( in 2-component vector of float)
0:405 Sequence
0:405 move second child to first child ( temp 2-component vector of float)
-0:405 'r03' ( temp 2-component vector of float)
-0:405 vector-scale ( temp 2-component vector of float)
-0:405 'inFV2' ( in 2-component vector of float)
-0:405 'inF0' ( in float)
+0:405 'r08' ( temp 2-component vector of float)
+0:405 matrix-times-vector ( temp 2-component vector of float)
+0:405 'inFM3x2' ( in 3X2 matrix of float)
+0:405 'inFV3' ( in 3-component vector of float)
0:406 Sequence
-0:406 move second child to first child ( temp 3-component vector of float)
-0:406 'r04' ( temp 3-component vector of float)
-0:406 vector-scale ( temp 3-component vector of float)
+0:406 move second child to first child ( temp 2-component vector of float)
+0:406 'r09' ( temp 2-component vector of float)
+0:406 vector-times-matrix ( temp 2-component vector of float)
0:406 'inFV3' ( in 3-component vector of float)
-0:406 'inF0' ( in float)
+0:406 'inFM2x3' ( in 2X3 matrix of float)
0:407 Sequence
-0:407 move second child to first child ( temp float)
-0:407 'r05' ( temp float)
-0:407 dot-product ( temp float)
-0:407 'inFV2' ( in 2-component vector of float)
+0:407 move second child to first child ( temp 3-component vector of float)
+0:407 'r10' ( temp 3-component vector of float)
+0:407 vector-times-matrix ( temp 3-component vector of float)
0:407 'inFV2' ( in 2-component vector of float)
+0:407 'inFM3x2' ( in 3X2 matrix of float)
0:408 Sequence
-0:408 move second child to first child ( temp float)
-0:408 'r06' ( temp float)
-0:408 dot-product ( temp float)
-0:408 'inFV3' ( in 3-component vector of float)
-0:408 'inFV3' ( in 3-component vector of float)
+0:408 move second child to first child ( temp 2X3 matrix of float)
+0:408 'r11' ( temp 2X3 matrix of float)
+0:408 matrix-scale ( temp 2X3 matrix of float)
+0:408 'inF0' ( in float)
+0:408 'inFM2x3' ( in 2X3 matrix of float)
0:409 Sequence
-0:409 move second child to first child ( temp 3-component vector of float)
-0:409 'r07' ( temp 3-component vector of float)
-0:409 matrix-times-vector ( temp 3-component vector of float)
-0:409 'inFM2x3' ( in 2X3 matrix of float)
-0:409 'inFV2' ( in 2-component vector of float)
+0:409 move second child to first child ( temp 3X2 matrix of float)
+0:409 'r12' ( temp 3X2 matrix of float)
+0:409 matrix-scale ( temp 3X2 matrix of float)
+0:409 'inF0' ( in float)
+0:409 'inFM3x2' ( in 3X2 matrix of float)
0:410 Sequence
-0:410 move second child to first child ( temp 2-component vector of float)
-0:410 'r08' ( temp 2-component vector of float)
-0:410 matrix-times-vector ( temp 2-component vector of float)
+0:410 move second child to first child ( temp 2X2 matrix of float)
+0:410 'r13' ( temp 2X2 matrix of float)
+0:410 matrix-multiply ( temp 2X2 matrix of float)
0:410 'inFM3x2' ( in 3X2 matrix of float)
-0:410 'inFV3' ( in 3-component vector of float)
+0:410 'inFM2x3' ( in 2X3 matrix of float)
0:411 Sequence
-0:411 move second child to first child ( temp 2-component vector of float)
-0:411 'r09' ( temp 2-component vector of float)
-0:411 vector-times-matrix ( temp 2-component vector of float)
-0:411 'inFV3' ( in 3-component vector of float)
+0:411 move second child to first child ( temp 2X3 matrix of float)
+0:411 'r14' ( temp 2X3 matrix of float)
+0:411 matrix-multiply ( temp 2X3 matrix of float)
+0:411 'inFM3x3' ( in 3X3 matrix of float)
0:411 'inFM2x3' ( in 2X3 matrix of float)
0:412 Sequence
-0:412 move second child to first child ( temp 3-component vector of float)
-0:412 'r10' ( temp 3-component vector of float)
-0:412 vector-times-matrix ( temp 3-component vector of float)
-0:412 'inFV2' ( in 2-component vector of float)
-0:412 'inFM3x2' ( in 3X2 matrix of float)
+0:412 move second child to first child ( temp 2X4 matrix of float)
+0:412 'r15' ( temp 2X4 matrix of float)
+0:412 matrix-multiply ( temp 2X4 matrix of float)
+0:412 'inFM3x4' ( in 3X4 matrix of float)
+0:412 'inFM2x3' ( in 2X3 matrix of float)
0:413 Sequence
-0:413 move second child to first child ( temp 2X3 matrix of float)
-0:413 'r11' ( temp 2X3 matrix of float)
-0:413 matrix-scale ( temp 2X3 matrix of float)
-0:413 'inF0' ( in float)
-0:413 'inFM2x3' ( in 2X3 matrix of float)
-0:414 Sequence
-0:414 move second child to first child ( temp 3X2 matrix of float)
-0:414 'r12' ( temp 3X2 matrix of float)
-0:414 matrix-scale ( temp 3X2 matrix of float)
-0:414 'inF0' ( in float)
-0:414 'inFM3x2' ( in 3X2 matrix of float)
-0:415 Sequence
-0:415 move second child to first child ( temp 2X2 matrix of float)
-0:415 'r13' ( temp 2X2 matrix of float)
-0:415 matrix-multiply ( temp 2X2 matrix of float)
-0:415 'inFM3x2' ( in 3X2 matrix of float)
-0:415 'inFM2x3' ( in 2X3 matrix of float)
-0:416 Sequence
-0:416 move second child to first child ( temp 2X3 matrix of float)
-0:416 'r14' ( temp 2X3 matrix of float)
-0:416 matrix-multiply ( temp 2X3 matrix of float)
-0:416 'inFM3x3' ( in 3X3 matrix of float)
-0:416 'inFM2x3' ( in 2X3 matrix of float)
-0:417 Sequence
-0:417 move second child to first child ( temp 2X4 matrix of float)
-0:417 'r15' ( temp 2X4 matrix of float)
-0:417 matrix-multiply ( temp 2X4 matrix of float)
-0:417 'inFM3x4' ( in 3X4 matrix of float)
-0:417 'inFM2x3' ( in 2X3 matrix of float)
-0:418 Sequence
-0:418 move second child to first child ( temp 3X4 matrix of float)
-0:418 'r16' ( temp 3X4 matrix of float)
-0:418 matrix-multiply ( temp 3X4 matrix of float)
-0:418 'inFM2x4' ( in 2X4 matrix of float)
-0:418 'inFM3x2' ( in 3X2 matrix of float)
+0:413 move second child to first child ( temp 3X4 matrix of float)
+0:413 'r16' ( temp 3X4 matrix of float)
+0:413 matrix-multiply ( temp 3X4 matrix of float)
+0:413 'inFM2x4' ( in 2X4 matrix of float)
+0:413 'inFM3x2' ( in 3X2 matrix of float)
0:? Linker Objects
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 1240
+// Generated by (magic number): 80002
+// Id's are bound by 1225
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "VertexShaderFunction"
+ Source HLSL 500
Name 4 "VertexShaderFunction"
Name 16 "VertexShaderFunctionS(f1;f1;f1;u1;u1;"
Name 11 "inF0"
@@ -2872,57 +2859,50 @@ Shader version: 450
Name 126 "inFM3x3"
Name 127 "inFM3x4"
Name 128 "inFM2x4"
- Name 182 "ResType"
- Name 316 "ResType"
- Name 464 "ResType"
- Name 620 "ResType"
- Name 753 "ResType"
- Name 873 "ResType"
- Name 996 "ResType"
- Name 1064 "r0"
- Name 1068 "r1"
- Name 1072 "r2"
- Name 1076 "r3"
- Name 1080 "r4"
- Name 1084 "r5"
- Name 1088 "r6"
- Name 1092 "r7"
- Name 1096 "r8"
- Name 1100 "r0"
- Name 1104 "r1"
- Name 1108 "r2"
- Name 1112 "r3"
- Name 1116 "r4"
- Name 1120 "r5"
- Name 1124 "r6"
- Name 1128 "r7"
- Name 1132 "r8"
- Name 1136 "r0"
- Name 1140 "r1"
- Name 1144 "r2"
- Name 1148 "r3"
- Name 1152 "r4"
- Name 1156 "r5"
- Name 1160 "r6"
- Name 1164 "r7"
- Name 1168 "r8"
- Name 1172 "r00"
- Name 1176 "r01"
- Name 1180 "r02"
- Name 1184 "r03"
- Name 1188 "r04"
- Name 1192 "r05"
- Name 1196 "r06"
- Name 1200 "r07"
- Name 1204 "r08"
- Name 1208 "r09"
- Name 1212 "r10"
- Name 1216 "r11"
- Name 1220 "r12"
- Name 1224 "r13"
- Name 1228 "r14"
- Name 1232 "r15"
- Name 1236 "r16"
+ Name 1049 "r0"
+ Name 1053 "r1"
+ Name 1057 "r2"
+ Name 1061 "r3"
+ Name 1065 "r4"
+ Name 1069 "r5"
+ Name 1073 "r6"
+ Name 1077 "r7"
+ Name 1081 "r8"
+ Name 1085 "r0"
+ Name 1089 "r1"
+ Name 1093 "r2"
+ Name 1097 "r3"
+ Name 1101 "r4"
+ Name 1105 "r5"
+ Name 1109 "r6"
+ Name 1113 "r7"
+ Name 1117 "r8"
+ Name 1121 "r0"
+ Name 1125 "r1"
+ Name 1129 "r2"
+ Name 1133 "r3"
+ Name 1137 "r4"
+ Name 1141 "r5"
+ Name 1145 "r6"
+ Name 1149 "r7"
+ Name 1153 "r8"
+ Name 1157 "r00"
+ Name 1161 "r01"
+ Name 1165 "r02"
+ Name 1169 "r03"
+ Name 1173 "r04"
+ Name 1177 "r05"
+ Name 1181 "r06"
+ Name 1185 "r07"
+ Name 1189 "r08"
+ Name 1193 "r09"
+ Name 1197 "r10"
+ Name 1201 "r11"
+ Name 1205 "r12"
+ Name 1209 "r13"
+ Name 1213 "r14"
+ Name 1217 "r15"
+ Name 1221 "r16"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -2968,50 +2948,49 @@ Shader version: 450
118: TypePointer Function 117
119: TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 37(ptr) 112(ptr) 114(ptr) 69(ptr) 116(ptr) 118(ptr)
132: TypeBool
- 143: TypeInt 32 1
- 164: 143(int) Constant 7
- 182(ResType): TypeStruct 6(float) 143(int)
- 201: 6(float) Constant 1050288283
- 216: 143(int) Constant 2
- 223: 6(float) Constant 0
- 224: 6(float) Constant 1065353216
- 266: TypeVector 143(int) 2
- 287: 143(int) Constant 3
- 288: 266(ivec2) ConstantComposite 164 287
- 316(ResType): TypeStruct 24(fvec2) 266(ivec2)
- 321: TypeVector 132(bool) 2
- 359: 6(float) Constant 1073741824
- 361: 143(int) Constant 1
- 362: 266(ivec2) ConstantComposite 361 216
- 397: 24(fvec2) ConstantComposite 224 359
- 411: TypeVector 143(int) 3
- 432: 143(int) Constant 5
- 433: 411(ivec3) ConstantComposite 164 287 432
- 464(ResType): TypeStruct 36(fvec3) 411(ivec3)
- 469: TypeVector 132(bool) 3
- 508: 411(ivec3) ConstantComposite 361 216 287
- 543: 6(float) Constant 1077936128
- 544: 36(fvec3) ConstantComposite 224 359 543
- 558: TypeVector 143(int) 4
- 579: 558(ivec4) ConstantComposite 164 287 432 216
- 589: 8(int) Constant 1
- 595: 8(int) Constant 2
- 598: 8(int) Constant 3
- 620(ResType): TypeStruct 48(fvec4) 558(ivec4)
- 625: TypeVector 132(bool) 4
- 664: 143(int) Constant 4
- 665: 558(ivec4) ConstantComposite 361 216 287 664
- 700: 6(float) Constant 1082130432
- 701: 48(fvec4) ConstantComposite 224 359 543 700
- 753(ResType): TypeStruct 60 266(ivec2)
- 817: 24(fvec2) ConstantComposite 359 359
- 818: 60 ConstantComposite 817 817
- 873(ResType): TypeStruct 68 411(ivec3)
- 937: 36(fvec3) ConstantComposite 543 543 543
- 938: 68 ConstantComposite 937 937 937
- 996(ResType): TypeStruct 76 558(ivec4)
- 1060: 48(fvec4) ConstantComposite 700 700 700 700
- 1061: 76 ConstantComposite 1060 1060 1060 1060
+ 133: 6(float) Constant 0
+ 146: TypeInt 32 1
+ 167: 146(int) Constant 7
+ 199: 6(float) Constant 1050288283
+ 214: 146(int) Constant 2
+ 221: 6(float) Constant 1065353216
+ 253: TypeVector 132(bool) 2
+ 254: 24(fvec2) ConstantComposite 133 133
+ 267: TypeVector 146(int) 2
+ 288: 146(int) Constant 3
+ 289: 267(ivec2) ConstantComposite 167 288
+ 354: 6(float) Constant 1073741824
+ 356: 146(int) Constant 1
+ 357: 267(ivec2) ConstantComposite 356 214
+ 392: 24(fvec2) ConstantComposite 221 354
+ 396: TypeVector 132(bool) 3
+ 397: 36(fvec3) ConstantComposite 133 133 133
+ 410: TypeVector 146(int) 3
+ 431: 146(int) Constant 5
+ 432: 410(ivec3) ConstantComposite 167 288 431
+ 501: 410(ivec3) ConstantComposite 356 214 288
+ 536: 6(float) Constant 1077936128
+ 537: 36(fvec3) ConstantComposite 221 354 536
+ 541: TypeVector 132(bool) 4
+ 542: 48(fvec4) ConstantComposite 133 133 133 133
+ 555: TypeVector 146(int) 4
+ 576: 555(ivec4) ConstantComposite 167 288 431 214
+ 586: 8(int) Constant 1
+ 592: 8(int) Constant 2
+ 595: 8(int) Constant 3
+ 655: 146(int) Constant 4
+ 656: 555(ivec4) ConstantComposite 356 214 288 655
+ 691: 6(float) Constant 1082130432
+ 692: 48(fvec4) ConstantComposite 221 354 536 691
+ 696: TypeMatrix 253(bvec2) 2
+ 806: 24(fvec2) ConstantComposite 354 354
+ 807: 60 ConstantComposite 806 806
+ 811: TypeMatrix 396(bvec3) 3
+ 924: 36(fvec3) ConstantComposite 536 536 536
+ 925: 68 ConstantComposite 924 924 924
+ 929: TypeMatrix 541(bvec4) 4
+ 1045: 48(fvec4) ConstantComposite 691 691 691 691
+ 1046: 76 ConstantComposite 1045 1045 1045 1045
4(VertexShaderFunction): 2 Function None 3
5: Label
Return
@@ -3024,128 +3003,125 @@ Shader version: 450
15(inU1): 9(ptr) FunctionParameter
17: Label
131: 6(float) Load 11(inF0)
- 133: 132(bool) All 131
- 134: 6(float) Load 11(inF0)
- 135: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 134
+ 134: 132(bool) FOrdNotEqual 131 133
+ 135: 132(bool) All 134
136: 6(float) Load 11(inF0)
- 137: 6(float) ExtInst 1(GLSL.std.450) 17(Acos) 136
+ 137: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 136
138: 6(float) Load 11(inF0)
- 139: 132(bool) Any 138
+ 139: 6(float) ExtInst 1(GLSL.std.450) 17(Acos) 138
140: 6(float) Load 11(inF0)
- 141: 6(float) ExtInst 1(GLSL.std.450) 16(Asin) 140
- 142: 6(float) Load 11(inF0)
- 144: 143(int) Bitcast 142
+ 141: 132(bool) FOrdNotEqual 140 133
+ 142: 132(bool) Any 141
+ 143: 6(float) Load 11(inF0)
+ 144: 6(float) ExtInst 1(GLSL.std.450) 16(Asin) 143
145: 6(float) Load 11(inF0)
- 146: 8(int) Bitcast 145
- 147: 8(int) Load 14(inU0)
- 148: 6(float) Bitcast 147
- 149: 6(float) Load 11(inF0)
- 150: 6(float) ExtInst 1(GLSL.std.450) 18(Atan) 149
- 151: 6(float) Load 11(inF0)
- 152: 6(float) Load 12(inF1)
- 153: 6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 151 152
+ 147: 146(int) Bitcast 145
+ 148: 6(float) Load 11(inF0)
+ 149: 8(int) Bitcast 148
+ 150: 8(int) Load 14(inU0)
+ 151: 6(float) Bitcast 150
+ 152: 6(float) Load 11(inF0)
+ 153: 6(float) ExtInst 1(GLSL.std.450) 18(Atan) 152
154: 6(float) Load 11(inF0)
- 155: 6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 154
- 156: 6(float) Load 11(inF0)
- 157: 6(float) Load 12(inF1)
- 158: 6(float) Load 13(inF2)
- 159: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 156 157 158
- 160: 6(float) Load 11(inF0)
- 161: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 160
- 162: 6(float) Load 11(inF0)
- 163: 6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 162
- 165: 143(int) BitCount 164
- 166: 6(float) Load 11(inF0)
- 167: 6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 166
- 168: 6(float) Load 11(inF0)
- 169: 6(float) ExtInst 1(GLSL.std.450) 27(Exp) 168
- 170: 6(float) Load 11(inF0)
- 171: 6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 170
- 172: 143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
- 173: 143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
- 174: 6(float) Load 11(inF0)
- 175: 6(float) ExtInst 1(GLSL.std.450) 8(Floor) 174
- 176: 6(float) Load 11(inF0)
- 177: 6(float) Load 12(inF1)
- 178: 6(float) FMod 176 177
+ 155: 6(float) Load 12(inF1)
+ 156: 6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 154 155
+ 157: 6(float) Load 11(inF0)
+ 158: 6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 157
+ 159: 6(float) Load 11(inF0)
+ 160: 6(float) Load 12(inF1)
+ 161: 6(float) Load 13(inF2)
+ 162: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 159 160 161
+ 163: 6(float) Load 11(inF0)
+ 164: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 163
+ 165: 6(float) Load 11(inF0)
+ 166: 6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 165
+ 168: 146(int) BitCount 167
+ 169: 6(float) Load 11(inF0)
+ 170: 6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 169
+ 171: 6(float) Load 11(inF0)
+ 172: 6(float) ExtInst 1(GLSL.std.450) 27(Exp) 171
+ 173: 6(float) Load 11(inF0)
+ 174: 6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 173
+ 175: 146(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 167
+ 176: 146(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 167
+ 177: 6(float) Load 11(inF0)
+ 178: 6(float) ExtInst 1(GLSL.std.450) 8(Floor) 177
179: 6(float) Load 11(inF0)
- 180: 6(float) ExtInst 1(GLSL.std.450) 10(Fract) 179
- 181: 6(float) Load 11(inF0)
- 183:182(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 181
- 184: 143(int) CompositeExtract 183 1
- Store 12(inF1) 184
- 185: 6(float) CompositeExtract 183 0
+ 180: 6(float) Load 12(inF1)
+ 181: 6(float) FMod 179 180
+ 182: 6(float) Load 11(inF0)
+ 183: 6(float) ExtInst 1(GLSL.std.450) 10(Fract) 182
+ 184: 6(float) Load 11(inF0)
+ 185: 132(bool) IsInf 184
186: 6(float) Load 11(inF0)
- 187: 132(bool) IsInf 186
+ 187: 132(bool) IsNan 186
188: 6(float) Load 11(inF0)
- 189: 132(bool) IsNan 188
- 190: 6(float) Load 11(inF0)
- 191: 6(float) Load 12(inF1)
- 192: 6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 190 191
- 193: 6(float) Load 11(inF0)
- 194: 6(float) Load 12(inF1)
- 195: 6(float) Load 13(inF2)
- 196: 6(float) ExtInst 1(GLSL.std.450) 46(FMix) 193 194 195
+ 189: 6(float) Load 12(inF1)
+ 190: 6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 188 189
+ 191: 6(float) Load 11(inF0)
+ 192: 6(float) Load 12(inF1)
+ 193: 6(float) Load 13(inF2)
+ 194: 6(float) ExtInst 1(GLSL.std.450) 46(FMix) 191 192 193
+ 195: 6(float) Load 11(inF0)
+ 196: 6(float) ExtInst 1(GLSL.std.450) 28(Log) 195
197: 6(float) Load 11(inF0)
- 198: 6(float) ExtInst 1(GLSL.std.450) 28(Log) 197
- 199: 6(float) Load 11(inF0)
- 200: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 199
- 202: 6(float) FMul 200 201
+ 198: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 197
+ 200: 6(float) FMul 198 199
+ 201: 6(float) Load 11(inF0)
+ 202: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 201
203: 6(float) Load 11(inF0)
- 204: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 203
- 205: 6(float) Load 11(inF0)
- 206: 6(float) Load 12(inF1)
- 207: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 205 206
- 208: 6(float) Load 11(inF0)
- 209: 6(float) Load 12(inF1)
- 210: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 208 209
- 211: 6(float) Load 11(inF0)
- 212: 6(float) Load 12(inF1)
- 213: 6(float) ExtInst 1(GLSL.std.450) 26(Pow) 211 212
- 214: 6(float) Load 11(inF0)
- 215: 6(float) ExtInst 1(GLSL.std.450) 11(Radians) 214
- 217: 143(int) BitReverse 216
+ 204: 6(float) Load 12(inF1)
+ 205: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 203 204
+ 206: 6(float) Load 11(inF0)
+ 207: 6(float) Load 12(inF1)
+ 208: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 206 207
+ 209: 6(float) Load 11(inF0)
+ 210: 6(float) Load 12(inF1)
+ 211: 6(float) ExtInst 1(GLSL.std.450) 26(Pow) 209 210
+ 212: 6(float) Load 11(inF0)
+ 213: 6(float) ExtInst 1(GLSL.std.450) 11(Radians) 212
+ 215: 146(int) BitReverse 214
+ 216: 6(float) Load 11(inF0)
+ 217: 6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 216
218: 6(float) Load 11(inF0)
- 219: 6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 218
+ 219: 6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 218
220: 6(float) Load 11(inF0)
- 221: 6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 220
- 222: 6(float) Load 11(inF0)
- 225: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 222 223 224
- 226: 6(float) Load 11(inF0)
- 227: 6(float) ExtInst 1(GLSL.std.450) 6(FSign) 226
- 228: 6(float) Load 11(inF0)
- 229: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 228
- 230: 6(float) Load 11(inF0)
- 231: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 230
- Store 12(inF1) 231
- 232: 6(float) Load 11(inF0)
- 233: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 232
- Store 13(inF2) 233
- 234: 6(float) Load 11(inF0)
- 235: 6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 234
- 236: 6(float) Load 11(inF0)
- 237: 6(float) Load 12(inF1)
- 238: 6(float) Load 13(inF2)
- 239: 6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 236 237 238
- 240: 6(float) Load 11(inF0)
- 241: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 240
+ 222: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 220 133 221
+ 223: 6(float) Load 11(inF0)
+ 224: 6(float) ExtInst 1(GLSL.std.450) 6(FSign) 223
+ 225: 6(float) Load 11(inF0)
+ 226: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 225
+ 227: 6(float) Load 11(inF0)
+ 228: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 227
+ Store 12(inF1) 228
+ 229: 6(float) Load 11(inF0)
+ 230: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 229
+ Store 13(inF2) 230
+ 231: 6(float) Load 11(inF0)
+ 232: 6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 231
+ 233: 6(float) Load 11(inF0)
+ 234: 6(float) Load 12(inF1)
+ 235: 6(float) Load 13(inF2)
+ 236: 6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 233 234 235
+ 237: 6(float) Load 11(inF0)
+ 238: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 237
+ 239: 6(float) Load 11(inF0)
+ 240: 6(float) Load 12(inF1)
+ 241: 6(float) ExtInst 1(GLSL.std.450) 48(Step) 239 240
242: 6(float) Load 11(inF0)
- 243: 6(float) Load 12(inF1)
- 244: 6(float) ExtInst 1(GLSL.std.450) 48(Step) 242 243
- 245: 6(float) Load 11(inF0)
- 246: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 245
- 247: 6(float) Load 11(inF0)
- 248: 6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 247
- 249: 6(float) Load 11(inF0)
- 250: 6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 249
- ReturnValue 223
+ 243: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 242
+ 244: 6(float) Load 11(inF0)
+ 245: 6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 244
+ 246: 6(float) Load 11(inF0)
+ 247: 6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 246
+ ReturnValue 133
FunctionEnd
22(VertexShaderFunction1(vf1;vf1;vf1;): 6(float) Function None 18
19(inF0): 7(ptr) FunctionParameter
20(inF1): 7(ptr) FunctionParameter
21(inF2): 7(ptr) FunctionParameter
23: Label
- ReturnValue 223
+ ReturnValue 133
FunctionEnd
34(VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2;): 24(fvec2) Function None 28
29(inF0): 25(ptr) FunctionParameter
@@ -3154,144 +3130,141 @@ Shader version: 450
32(inU0): 27(ptr) FunctionParameter
33(inU1): 27(ptr) FunctionParameter
35: Label
- 255: 24(fvec2) Load 29(inF0)
+ 252: 24(fvec2) Load 29(inF0)
+ 255: 253(bvec2) FOrdNotEqual 252 254
256: 132(bool) All 255
257: 24(fvec2) Load 29(inF0)
258: 24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 257
259: 24(fvec2) Load 29(inF0)
260: 24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 259
261: 24(fvec2) Load 29(inF0)
- 262: 132(bool) Any 261
- 263: 24(fvec2) Load 29(inF0)
- 264: 24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 263
- 265: 24(fvec2) Load 29(inF0)
- 267: 266(ivec2) Bitcast 265
- 268: 24(fvec2) Load 29(inF0)
- 269: 26(ivec2) Bitcast 268
- 270: 26(ivec2) Load 32(inU0)
- 271: 24(fvec2) Bitcast 270
- 272: 24(fvec2) Load 29(inF0)
- 273: 24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 272
- 274: 24(fvec2) Load 29(inF0)
- 275: 24(fvec2) Load 30(inF1)
- 276: 24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 274 275
- 277: 24(fvec2) Load 29(inF0)
- 278: 24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 277
- 279: 24(fvec2) Load 29(inF0)
- 280: 24(fvec2) Load 30(inF1)
- 281: 24(fvec2) Load 31(inF2)
- 282: 24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 279 280 281
- 283: 24(fvec2) Load 29(inF0)
- 284: 24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 283
- 285: 24(fvec2) Load 29(inF0)
- 286: 24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 285
- 289: 266(ivec2) BitCount 288
- 290: 24(fvec2) Load 29(inF0)
- 291: 24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 290
- 292: 24(fvec2) Load 29(inF0)
- 293: 24(fvec2) Load 30(inF1)
- 294: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 292 293
- 295: 24(fvec2) Load 29(inF0)
- 296: 24(fvec2) Load 30(inF1)
- 297: 6(float) Dot 295 296
- 298: 24(fvec2) Load 29(inF0)
- 299: 24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 298
- 300: 24(fvec2) Load 29(inF0)
- 301: 24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 300
- 302: 24(fvec2) Load 29(inF0)
- 303: 24(fvec2) Load 30(inF1)
- 304: 24(fvec2) Load 31(inF2)
- 305: 24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 302 303 304
- 306: 143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
- 307: 143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
- 308: 24(fvec2) Load 29(inF0)
- 309: 24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 308
- 310: 24(fvec2) Load 29(inF0)
- 311: 24(fvec2) Load 30(inF1)
- 312: 24(fvec2) FMod 310 311
- 313: 24(fvec2) Load 29(inF0)
- 314: 24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 313
- 315: 24(fvec2) Load 29(inF0)
- 317:316(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 315
- 318: 266(ivec2) CompositeExtract 317 1
- Store 30(inF1) 318
- 319: 24(fvec2) CompositeExtract 317 0
+ 262: 253(bvec2) FOrdNotEqual 261 254
+ 263: 132(bool) Any 262
+ 264: 24(fvec2) Load 29(inF0)
+ 265: 24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 264
+ 266: 24(fvec2) Load 29(inF0)
+ 268: 267(ivec2) Bitcast 266
+ 269: 24(fvec2) Load 29(inF0)
+ 270: 26(ivec2) Bitcast 269
+ 271: 26(ivec2) Load 32(inU0)
+ 272: 24(fvec2) Bitcast 271
+ 273: 24(fvec2) Load 29(inF0)
+ 274: 24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 273
+ 275: 24(fvec2) Load 29(inF0)
+ 276: 24(fvec2) Load 30(inF1)
+ 277: 24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 275 276
+ 278: 24(fvec2) Load 29(inF0)
+ 279: 24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 278
+ 280: 24(fvec2) Load 29(inF0)
+ 281: 24(fvec2) Load 30(inF1)
+ 282: 24(fvec2) Load 31(inF2)
+ 283: 24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 280 281 282
+ 284: 24(fvec2) Load 29(inF0)
+ 285: 24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 284
+ 286: 24(fvec2) Load 29(inF0)
+ 287: 24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 286
+ 290: 267(ivec2) BitCount 289
+ 291: 24(fvec2) Load 29(inF0)
+ 292: 24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 291
+ 293: 24(fvec2) Load 29(inF0)
+ 294: 24(fvec2) Load 30(inF1)
+ 295: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 293 294
+ 296: 24(fvec2) Load 29(inF0)
+ 297: 24(fvec2) Load 30(inF1)
+ 298: 6(float) Dot 296 297
+ 299: 24(fvec2) Load 29(inF0)
+ 300: 24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 299
+ 301: 24(fvec2) Load 29(inF0)
+ 302: 24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 301
+ 303: 24(fvec2) Load 29(inF0)
+ 304: 24(fvec2) Load 30(inF1)
+ 305: 24(fvec2) Load 31(inF2)
+ 306: 24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 303 304 305
+ 307: 146(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 167
+ 308: 146(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 167
+ 309: 24(fvec2) Load 29(inF0)
+ 310: 24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 309
+ 311: 24(fvec2) Load 29(inF0)
+ 312: 24(fvec2) Load 30(inF1)
+ 313: 24(fvec2) FMod 311 312
+ 314: 24(fvec2) Load 29(inF0)
+ 315: 24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 314
+ 316: 24(fvec2) Load 29(inF0)
+ 317: 253(bvec2) IsInf 316
+ 318: 24(fvec2) Load 29(inF0)
+ 319: 253(bvec2) IsNan 318
320: 24(fvec2) Load 29(inF0)
- 322: 321(bvec2) IsInf 320
+ 321: 24(fvec2) Load 30(inF1)
+ 322: 24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 320 321
323: 24(fvec2) Load 29(inF0)
- 324: 321(bvec2) IsNan 323
- 325: 24(fvec2) Load 29(inF0)
- 326: 24(fvec2) Load 30(inF1)
- 327: 24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 325 326
- 328: 24(fvec2) Load 29(inF0)
- 329: 24(fvec2) Load 30(inF1)
- 330: 24(fvec2) Load 31(inF2)
- 331: 24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 328 329 330
- 332: 24(fvec2) Load 29(inF0)
- 333: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 332
+ 324: 24(fvec2) Load 30(inF1)
+ 325: 24(fvec2) Load 31(inF2)
+ 326: 24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 323 324 325
+ 327: 24(fvec2) Load 29(inF0)
+ 328: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 327
+ 329: 24(fvec2) Load 29(inF0)
+ 330: 24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 329
+ 331: 24(fvec2) Load 29(inF0)
+ 332: 24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 331
+ 333: 24(fvec2) VectorTimesScalar 332 199
334: 24(fvec2) Load 29(inF0)
- 335: 24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 334
+ 335: 24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 334
336: 24(fvec2) Load 29(inF0)
- 337: 24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 336
- 338: 24(fvec2) VectorTimesScalar 337 201
+ 337: 24(fvec2) Load 30(inF1)
+ 338: 24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 336 337
339: 24(fvec2) Load 29(inF0)
- 340: 24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 339
- 341: 24(fvec2) Load 29(inF0)
- 342: 24(fvec2) Load 30(inF1)
- 343: 24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 341 342
+ 340: 24(fvec2) Load 30(inF1)
+ 341: 24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 339 340
+ 342: 24(fvec2) Load 29(inF0)
+ 343: 24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 342
344: 24(fvec2) Load 29(inF0)
345: 24(fvec2) Load 30(inF1)
- 346: 24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 344 345
+ 346: 24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 344 345
347: 24(fvec2) Load 29(inF0)
- 348: 24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 347
+ 348: 24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 347
349: 24(fvec2) Load 29(inF0)
350: 24(fvec2) Load 30(inF1)
- 351: 24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 349 350
+ 351: 24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 349 350
352: 24(fvec2) Load 29(inF0)
- 353: 24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 352
- 354: 24(fvec2) Load 29(inF0)
- 355: 24(fvec2) Load 30(inF1)
- 356: 24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 354 355
- 357: 24(fvec2) Load 29(inF0)
- 358: 24(fvec2) Load 30(inF1)
- 360: 24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 357 358 359
- 363: 266(ivec2) BitReverse 362
- 364: 24(fvec2) Load 29(inF0)
- 365: 24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 364
- 366: 24(fvec2) Load 29(inF0)
- 367: 24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 366
- 368: 24(fvec2) Load 29(inF0)
- 369: 24(fvec2) CompositeConstruct 223 223
- 370: 24(fvec2) CompositeConstruct 224 224
- 371: 24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 368 369 370
- 372: 24(fvec2) Load 29(inF0)
- 373: 24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 372
- 374: 24(fvec2) Load 29(inF0)
- 375: 24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 374
- 376: 24(fvec2) Load 29(inF0)
- 377: 24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 376
- Store 30(inF1) 377
- 378: 24(fvec2) Load 29(inF0)
- 379: 24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 378
- Store 31(inF2) 379
- 380: 24(fvec2) Load 29(inF0)
- 381: 24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 380
- 382: 24(fvec2) Load 29(inF0)
- 383: 24(fvec2) Load 30(inF1)
- 384: 24(fvec2) Load 31(inF2)
- 385: 24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 382 383 384
+ 353: 24(fvec2) Load 30(inF1)
+ 355: 24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 352 353 354
+ 358: 267(ivec2) BitReverse 357
+ 359: 24(fvec2) Load 29(inF0)
+ 360: 24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 359
+ 361: 24(fvec2) Load 29(inF0)
+ 362: 24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 361
+ 363: 24(fvec2) Load 29(inF0)
+ 364: 24(fvec2) CompositeConstruct 133 133
+ 365: 24(fvec2) CompositeConstruct 221 221
+ 366: 24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 363 364 365
+ 367: 24(fvec2) Load 29(inF0)
+ 368: 24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 367
+ 369: 24(fvec2) Load 29(inF0)
+ 370: 24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 369
+ 371: 24(fvec2) Load 29(inF0)
+ 372: 24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 371
+ Store 30(inF1) 372
+ 373: 24(fvec2) Load 29(inF0)
+ 374: 24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 373
+ Store 31(inF2) 374
+ 375: 24(fvec2) Load 29(inF0)
+ 376: 24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 375
+ 377: 24(fvec2) Load 29(inF0)
+ 378: 24(fvec2) Load 30(inF1)
+ 379: 24(fvec2) Load 31(inF2)
+ 380: 24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 377 378 379
+ 381: 24(fvec2) Load 29(inF0)
+ 382: 24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 381
+ 383: 24(fvec2) Load 29(inF0)
+ 384: 24(fvec2) Load 30(inF1)
+ 385: 24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 383 384
386: 24(fvec2) Load 29(inF0)
- 387: 24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 386
+ 387: 24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 386
388: 24(fvec2) Load 29(inF0)
- 389: 24(fvec2) Load 30(inF1)
- 390: 24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 388 389
- 391: 24(fvec2) Load 29(inF0)
- 392: 24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 391
- 393: 24(fvec2) Load 29(inF0)
- 394: 24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 393
- 395: 24(fvec2) Load 29(inF0)
- 396: 24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 395
- ReturnValue 397
+ 389: 24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 388
+ 390: 24(fvec2) Load 29(inF0)
+ 391: 24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 390
+ ReturnValue 392
FunctionEnd
46(VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3;): 36(fvec3) Function None 40
41(inF0): 37(ptr) FunctionParameter
@@ -3300,147 +3273,144 @@ Shader version: 450
44(inU0): 39(ptr) FunctionParameter
45(inU1): 39(ptr) FunctionParameter
47: Label
+ 395: 36(fvec3) Load 41(inF0)
+ 398: 396(bvec3) FOrdNotEqual 395 397
+ 399: 132(bool) All 398
400: 36(fvec3) Load 41(inF0)
- 401: 132(bool) All 400
+ 401: 36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 400
402: 36(fvec3) Load 41(inF0)
- 403: 36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 402
+ 403: 36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 402
404: 36(fvec3) Load 41(inF0)
- 405: 36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 404
- 406: 36(fvec3) Load 41(inF0)
- 407: 132(bool) Any 406
- 408: 36(fvec3) Load 41(inF0)
- 409: 36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 408
- 410: 36(fvec3) Load 41(inF0)
- 412: 411(ivec3) Bitcast 410
- 413: 36(fvec3) Load 41(inF0)
- 414: 38(ivec3) Bitcast 413
- 415: 38(ivec3) Load 44(inU0)
- 416: 36(fvec3) Bitcast 415
- 417: 36(fvec3) Load 41(inF0)
- 418: 36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 417
- 419: 36(fvec3) Load 41(inF0)
- 420: 36(fvec3) Load 42(inF1)
- 421: 36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 419 420
- 422: 36(fvec3) Load 41(inF0)
- 423: 36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 422
- 424: 36(fvec3) Load 41(inF0)
- 425: 36(fvec3) Load 42(inF1)
- 426: 36(fvec3) Load 43(inF2)
- 427: 36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 424 425 426
- 428: 36(fvec3) Load 41(inF0)
- 429: 36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 428
- 430: 36(fvec3) Load 41(inF0)
- 431: 36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 430
- 434: 411(ivec3) BitCount 433
- 435: 36(fvec3) Load 41(inF0)
- 436: 36(fvec3) Load 42(inF1)
- 437: 36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 435 436
- 438: 36(fvec3) Load 41(inF0)
- 439: 36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 438
- 440: 36(fvec3) Load 41(inF0)
- 441: 36(fvec3) Load 42(inF1)
- 442: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 440 441
- 443: 36(fvec3) Load 41(inF0)
- 444: 36(fvec3) Load 42(inF1)
- 445: 6(float) Dot 443 444
- 446: 36(fvec3) Load 41(inF0)
- 447: 36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 446
- 448: 36(fvec3) Load 41(inF0)
- 449: 36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 448
- 450: 36(fvec3) Load 41(inF0)
- 451: 36(fvec3) Load 42(inF1)
- 452: 36(fvec3) Load 43(inF2)
- 453: 36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 450 451 452
- 454: 143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
- 455: 143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
- 456: 36(fvec3) Load 41(inF0)
- 457: 36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 456
- 458: 36(fvec3) Load 41(inF0)
- 459: 36(fvec3) Load 42(inF1)
- 460: 36(fvec3) FMod 458 459
- 461: 36(fvec3) Load 41(inF0)
- 462: 36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 461
- 463: 36(fvec3) Load 41(inF0)
- 465:464(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 463
- 466: 411(ivec3) CompositeExtract 465 1
- Store 42(inF1) 466
- 467: 36(fvec3) CompositeExtract 465 0
- 468: 36(fvec3) Load 41(inF0)
- 470: 469(bvec3) IsInf 468
- 471: 36(fvec3) Load 41(inF0)
- 472: 469(bvec3) IsNan 471
+ 405: 396(bvec3) FOrdNotEqual 404 397
+ 406: 132(bool) Any 405
+ 407: 36(fvec3) Load 41(inF0)
+ 408: 36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 407
+ 409: 36(fvec3) Load 41(inF0)
+ 411: 410(ivec3) Bitcast 409
+ 412: 36(fvec3) Load 41(inF0)
+ 413: 38(ivec3) Bitcast 412
+ 414: 38(ivec3) Load 44(inU0)
+ 415: 36(fvec3) Bitcast 414
+ 416: 36(fvec3) Load 41(inF0)
+ 417: 36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 416
+ 418: 36(fvec3) Load 41(inF0)
+ 419: 36(fvec3) Load 42(inF1)
+ 420: 36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 418 419
+ 421: 36(fvec3) Load 41(inF0)
+ 422: 36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 421
+ 423: 36(fvec3) Load 41(inF0)
+ 424: 36(fvec3) Load 42(inF1)
+ 425: 36(fvec3) Load 43(inF2)
+ 426: 36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 423 424 425
+ 427: 36(fvec3) Load 41(inF0)
+ 428: 36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 427
+ 429: 36(fvec3) Load 41(inF0)
+ 430: 36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 429
+ 433: 410(ivec3) BitCount 432
+ 434: 36(fvec3) Load 41(inF0)
+ 435: 36(fvec3) Load 42(inF1)
+ 436: 36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 434 435
+ 437: 36(fvec3) Load 41(inF0)
+ 438: 36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 437
+ 439: 36(fvec3) Load 41(inF0)
+ 440: 36(fvec3) Load 42(inF1)
+ 441: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 439 440
+ 442: 36(fvec3) Load 41(inF0)
+ 443: 36(fvec3) Load 42(inF1)
+ 444: 6(float) Dot 442 443
+ 445: 36(fvec3) Load 41(inF0)
+ 446: 36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 445
+ 447: 36(fvec3) Load 41(inF0)
+ 448: 36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 447
+ 449: 36(fvec3) Load 41(inF0)
+ 450: 36(fvec3) Load 42(inF1)
+ 451: 36(fvec3) Load 43(inF2)
+ 452: 36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 449 450 451
+ 453: 146(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 167
+ 454: 146(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 167
+ 455: 36(fvec3) Load 41(inF0)
+ 456: 36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 455
+ 457: 36(fvec3) Load 41(inF0)
+ 458: 36(fvec3) Load 42(inF1)
+ 459: 36(fvec3) FMod 457 458
+ 460: 36(fvec3) Load 41(inF0)
+ 461: 36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 460
+ 462: 36(fvec3) Load 41(inF0)
+ 463: 396(bvec3) IsInf 462
+ 464: 36(fvec3) Load 41(inF0)
+ 465: 396(bvec3) IsNan 464
+ 466: 36(fvec3) Load 41(inF0)
+ 467: 36(fvec3) Load 42(inF1)
+ 468: 36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 466 467
+ 469: 36(fvec3) Load 41(inF0)
+ 470: 36(fvec3) Load 42(inF1)
+ 471: 36(fvec3) Load 43(inF2)
+ 472: 36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 469 470 471
473: 36(fvec3) Load 41(inF0)
- 474: 36(fvec3) Load 42(inF1)
- 475: 36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 473 474
- 476: 36(fvec3) Load 41(inF0)
- 477: 36(fvec3) Load 42(inF1)
- 478: 36(fvec3) Load 43(inF2)
- 479: 36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 476 477 478
+ 474: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 473
+ 475: 36(fvec3) Load 41(inF0)
+ 476: 36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 475
+ 477: 36(fvec3) Load 41(inF0)
+ 478: 36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 477
+ 479: 36(fvec3) VectorTimesScalar 478 199
480: 36(fvec3) Load 41(inF0)
- 481: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 480
+ 481: 36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 480
482: 36(fvec3) Load 41(inF0)
- 483: 36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 482
- 484: 36(fvec3) Load 41(inF0)
- 485: 36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 484
- 486: 36(fvec3) VectorTimesScalar 485 201
- 487: 36(fvec3) Load 41(inF0)
- 488: 36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 487
- 489: 36(fvec3) Load 41(inF0)
- 490: 36(fvec3) Load 42(inF1)
- 491: 36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 489 490
- 492: 36(fvec3) Load 41(inF0)
- 493: 36(fvec3) Load 42(inF1)
- 494: 36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 492 493
+ 483: 36(fvec3) Load 42(inF1)
+ 484: 36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 482 483
+ 485: 36(fvec3) Load 41(inF0)
+ 486: 36(fvec3) Load 42(inF1)
+ 487: 36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 485 486
+ 488: 36(fvec3) Load 41(inF0)
+ 489: 36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 488
+ 490: 36(fvec3) Load 41(inF0)
+ 491: 36(fvec3) Load 42(inF1)
+ 492: 36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 490 491
+ 493: 36(fvec3) Load 41(inF0)
+ 494: 36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 493
495: 36(fvec3) Load 41(inF0)
- 496: 36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 495
- 497: 36(fvec3) Load 41(inF0)
- 498: 36(fvec3) Load 42(inF1)
- 499: 36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 497 498
- 500: 36(fvec3) Load 41(inF0)
- 501: 36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 500
- 502: 36(fvec3) Load 41(inF0)
- 503: 36(fvec3) Load 42(inF1)
- 504: 36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 502 503
+ 496: 36(fvec3) Load 42(inF1)
+ 497: 36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 495 496
+ 498: 36(fvec3) Load 41(inF0)
+ 499: 36(fvec3) Load 42(inF1)
+ 500: 36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 498 499 354
+ 502: 410(ivec3) BitReverse 501
+ 503: 36(fvec3) Load 41(inF0)
+ 504: 36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 503
505: 36(fvec3) Load 41(inF0)
- 506: 36(fvec3) Load 42(inF1)
- 507: 36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 505 506 359
- 509: 411(ivec3) BitReverse 508
- 510: 36(fvec3) Load 41(inF0)
- 511: 36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 510
- 512: 36(fvec3) Load 41(inF0)
- 513: 36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 512
- 514: 36(fvec3) Load 41(inF0)
- 515: 36(fvec3) CompositeConstruct 223 223 223
- 516: 36(fvec3) CompositeConstruct 224 224 224
- 517: 36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 514 515 516
- 518: 36(fvec3) Load 41(inF0)
- 519: 36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 518
- 520: 36(fvec3) Load 41(inF0)
- 521: 36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 520
- 522: 36(fvec3) Load 41(inF0)
- 523: 36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 522
- Store 42(inF1) 523
- 524: 36(fvec3) Load 41(inF0)
- 525: 36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 524
- Store 43(inF2) 525
- 526: 36(fvec3) Load 41(inF0)
- 527: 36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 526
- 528: 36(fvec3) Load 41(inF0)
- 529: 36(fvec3) Load 42(inF1)
- 530: 36(fvec3) Load 43(inF2)
- 531: 36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 528 529 530
+ 506: 36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 505
+ 507: 36(fvec3) Load 41(inF0)
+ 508: 36(fvec3) CompositeConstruct 133 133 133
+ 509: 36(fvec3) CompositeConstruct 221 221 221
+ 510: 36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 507 508 509
+ 511: 36(fvec3) Load 41(inF0)
+ 512: 36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 511
+ 513: 36(fvec3) Load 41(inF0)
+ 514: 36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 513
+ 515: 36(fvec3) Load 41(inF0)
+ 516: 36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 515
+ Store 42(inF1) 516
+ 517: 36(fvec3) Load 41(inF0)
+ 518: 36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 517
+ Store 43(inF2) 518
+ 519: 36(fvec3) Load 41(inF0)
+ 520: 36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 519
+ 521: 36(fvec3) Load 41(inF0)
+ 522: 36(fvec3) Load 42(inF1)
+ 523: 36(fvec3) Load 43(inF2)
+ 524: 36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 521 522 523
+ 525: 36(fvec3) Load 41(inF0)
+ 526: 36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 525
+ 527: 36(fvec3) Load 41(inF0)
+ 528: 36(fvec3) Load 42(inF1)
+ 529: 36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 527 528
+ 530: 36(fvec3) Load 41(inF0)
+ 531: 36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 530
532: 36(fvec3) Load 41(inF0)
- 533: 36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 532
+ 533: 36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 532
534: 36(fvec3) Load 41(inF0)
- 535: 36(fvec3) Load 42(inF1)
- 536: 36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 534 535
- 537: 36(fvec3) Load 41(inF0)
- 538: 36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 537
- 539: 36(fvec3) Load 41(inF0)
- 540: 36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 539
- 541: 36(fvec3) Load 41(inF0)
- 542: 36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 541
- ReturnValue 544
+ 535: 36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 534
+ ReturnValue 537
FunctionEnd
58(VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4;): 48(fvec4) Function None 52
53(inF0): 49(ptr) FunctionParameter
@@ -3449,529 +3419,517 @@ Shader version: 450
56(inU0): 51(ptr) FunctionParameter
57(inU1): 51(ptr) FunctionParameter
59: Label
+ 540: 48(fvec4) Load 53(inF0)
+ 543: 541(bvec4) FOrdNotEqual 540 542
+ 544: 132(bool) All 543
+ 545: 48(fvec4) Load 53(inF0)
+ 546: 48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 545
547: 48(fvec4) Load 53(inF0)
- 548: 132(bool) All 547
+ 548: 48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 547
549: 48(fvec4) Load 53(inF0)
- 550: 48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 549
- 551: 48(fvec4) Load 53(inF0)
- 552: 48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 551
- 553: 48(fvec4) Load 53(inF0)
- 554: 132(bool) Any 553
- 555: 48(fvec4) Load 53(inF0)
- 556: 48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 555
+ 550: 541(bvec4) FOrdNotEqual 549 542
+ 551: 132(bool) Any 550
+ 552: 48(fvec4) Load 53(inF0)
+ 553: 48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 552
+ 554: 48(fvec4) Load 53(inF0)
+ 556: 555(ivec4) Bitcast 554
557: 48(fvec4) Load 53(inF0)
- 559: 558(ivec4) Bitcast 557
- 560: 48(fvec4) Load 53(inF0)
- 561: 50(ivec4) Bitcast 560
- 562: 50(ivec4) Load 56(inU0)
- 563: 48(fvec4) Bitcast 562
- 564: 48(fvec4) Load 53(inF0)
- 565: 48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 564
+ 558: 50(ivec4) Bitcast 557
+ 559: 50(ivec4) Load 56(inU0)
+ 560: 48(fvec4) Bitcast 559
+ 561: 48(fvec4) Load 53(inF0)
+ 562: 48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 561
+ 563: 48(fvec4) Load 53(inF0)
+ 564: 48(fvec4) Load 54(inF1)
+ 565: 48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 563 564
566: 48(fvec4) Load 53(inF0)
- 567: 48(fvec4) Load 54(inF1)
- 568: 48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 566 567
- 569: 48(fvec4) Load 53(inF0)
- 570: 48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 569
- 571: 48(fvec4) Load 53(inF0)
- 572: 48(fvec4) Load 54(inF1)
- 573: 48(fvec4) Load 55(inF2)
- 574: 48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 571 572 573
- 575: 48(fvec4) Load 53(inF0)
- 576: 48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 575
- 577: 48(fvec4) Load 53(inF0)
- 578: 48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 577
- 580: 558(ivec4) BitCount 579
- 581: 48(fvec4) Load 53(inF0)
- 582: 48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 581
+ 567: 48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 566
+ 568: 48(fvec4) Load 53(inF0)
+ 569: 48(fvec4) Load 54(inF1)
+ 570: 48(fvec4) Load 55(inF2)
+ 571: 48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 568 569 570
+ 572: 48(fvec4) Load 53(inF0)
+ 573: 48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 572
+ 574: 48(fvec4) Load 53(inF0)
+ 575: 48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 574
+ 577: 555(ivec4) BitCount 576
+ 578: 48(fvec4) Load 53(inF0)
+ 579: 48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 578
+ 580: 48(fvec4) Load 53(inF0)
+ 581: 48(fvec4) Load 54(inF1)
+ 582: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 580 581
583: 48(fvec4) Load 53(inF0)
584: 48(fvec4) Load 54(inF1)
- 585: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 583 584
- 586: 48(fvec4) Load 53(inF0)
- 587: 48(fvec4) Load 54(inF1)
- 588: 6(float) Dot 586 587
- 590: 7(ptr) AccessChain 53(inF0) 589
- 591: 6(float) Load 590
- 592: 7(ptr) AccessChain 54(inF1) 589
- 593: 6(float) Load 592
- 594: 6(float) FMul 591 593
- 596: 7(ptr) AccessChain 53(inF0) 595
+ 585: 6(float) Dot 583 584
+ 587: 7(ptr) AccessChain 53(inF0) 586
+ 588: 6(float) Load 587
+ 589: 7(ptr) AccessChain 54(inF1) 586
+ 590: 6(float) Load 589
+ 591: 6(float) FMul 588 590
+ 593: 7(ptr) AccessChain 53(inF0) 592
+ 594: 6(float) Load 593
+ 596: 7(ptr) AccessChain 54(inF1) 595
597: 6(float) Load 596
- 599: 7(ptr) AccessChain 54(inF1) 598
- 600: 6(float) Load 599
- 601: 48(fvec4) CompositeConstruct 224 594 597 600
- 602: 48(fvec4) Load 53(inF0)
- 603: 48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 602
- 604: 48(fvec4) Load 53(inF0)
- 605: 48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 604
- 606: 48(fvec4) Load 53(inF0)
- 607: 48(fvec4) Load 54(inF1)
- 608: 48(fvec4) Load 55(inF2)
- 609: 48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 606 607 608
- 610: 143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
- 611: 143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
- 612: 48(fvec4) Load 53(inF0)
- 613: 48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 612
+ 598: 48(fvec4) CompositeConstruct 221 591 594 597
+ 599: 48(fvec4) Load 53(inF0)
+ 600: 48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 599
+ 601: 48(fvec4) Load 53(inF0)
+ 602: 48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 601
+ 603: 48(fvec4) Load 53(inF0)
+ 604: 48(fvec4) Load 54(inF1)
+ 605: 48(fvec4) Load 55(inF2)
+ 606: 48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 603 604 605
+ 607: 146(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 167
+ 608: 146(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 167
+ 609: 48(fvec4) Load 53(inF0)
+ 610: 48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 609
+ 611: 48(fvec4) Load 53(inF0)
+ 612: 48(fvec4) Load 54(inF1)
+ 613: 48(fvec4) FMod 611 612
614: 48(fvec4) Load 53(inF0)
- 615: 48(fvec4) Load 54(inF1)
- 616: 48(fvec4) FMod 614 615
- 617: 48(fvec4) Load 53(inF0)
- 618: 48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 617
- 619: 48(fvec4) Load 53(inF0)
- 621:620(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 619
- 622: 558(ivec4) CompositeExtract 621 1
- Store 54(inF1) 622
- 623: 48(fvec4) CompositeExtract 621 0
- 624: 48(fvec4) Load 53(inF0)
- 626: 625(bvec4) IsInf 624
+ 615: 48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 614
+ 616: 48(fvec4) Load 53(inF0)
+ 617: 541(bvec4) IsInf 616
+ 618: 48(fvec4) Load 53(inF0)
+ 619: 541(bvec4) IsNan 618
+ 620: 48(fvec4) Load 53(inF0)
+ 621: 48(fvec4) Load 54(inF1)
+ 622: 48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 620 621
+ 623: 48(fvec4) Load 53(inF0)
+ 624: 48(fvec4) Load 54(inF1)
+ 625: 48(fvec4) Load 55(inF2)
+ 626: 48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 623 624 625
627: 48(fvec4) Load 53(inF0)
- 628: 625(bvec4) IsNan 627
+ 628: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 627
629: 48(fvec4) Load 53(inF0)
- 630: 48(fvec4) Load 54(inF1)
- 631: 48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 629 630
- 632: 48(fvec4) Load 53(inF0)
- 633: 48(fvec4) Load 54(inF1)
- 634: 48(fvec4) Load 55(inF2)
- 635: 48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 632 633 634
+ 630: 48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 629
+ 631: 48(fvec4) Load 53(inF0)
+ 632: 48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 631
+ 633: 48(fvec4) VectorTimesScalar 632 199
+ 634: 48(fvec4) Load 53(inF0)
+ 635: 48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 634
636: 48(fvec4) Load 53(inF0)
- 637: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 636
- 638: 48(fvec4) Load 53(inF0)
- 639: 48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 638
- 640: 48(fvec4) Load 53(inF0)
- 641: 48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 640
- 642: 48(fvec4) VectorTimesScalar 641 201
- 643: 48(fvec4) Load 53(inF0)
- 644: 48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 643
- 645: 48(fvec4) Load 53(inF0)
- 646: 48(fvec4) Load 54(inF1)
- 647: 48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 645 646
- 648: 48(fvec4) Load 53(inF0)
- 649: 48(fvec4) Load 54(inF1)
- 650: 48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 648 649
- 651: 48(fvec4) Load 53(inF0)
- 652: 48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 651
- 653: 48(fvec4) Load 53(inF0)
- 654: 48(fvec4) Load 54(inF1)
- 655: 48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 653 654
- 656: 48(fvec4) Load 53(inF0)
- 657: 48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 656
+ 637: 48(fvec4) Load 54(inF1)
+ 638: 48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 636 637
+ 639: 48(fvec4) Load 53(inF0)
+ 640: 48(fvec4) Load 54(inF1)
+ 641: 48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 639 640
+ 642: 48(fvec4) Load 53(inF0)
+ 643: 48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 642
+ 644: 48(fvec4) Load 53(inF0)
+ 645: 48(fvec4) Load 54(inF1)
+ 646: 48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 644 645
+ 647: 48(fvec4) Load 53(inF0)
+ 648: 48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 647
+ 649: 48(fvec4) Load 53(inF0)
+ 650: 48(fvec4) Load 54(inF1)
+ 651: 48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 649 650
+ 652: 48(fvec4) Load 53(inF0)
+ 653: 48(fvec4) Load 54(inF1)
+ 654: 48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 652 653 354
+ 657: 555(ivec4) BitReverse 656
658: 48(fvec4) Load 53(inF0)
- 659: 48(fvec4) Load 54(inF1)
- 660: 48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 658 659
- 661: 48(fvec4) Load 53(inF0)
- 662: 48(fvec4) Load 54(inF1)
- 663: 48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 661 662 359
- 666: 558(ivec4) BitReverse 665
- 667: 48(fvec4) Load 53(inF0)
- 668: 48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 667
- 669: 48(fvec4) Load 53(inF0)
- 670: 48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 669
- 671: 48(fvec4) Load 53(inF0)
- 672: 48(fvec4) CompositeConstruct 223 223 223 223
- 673: 48(fvec4) CompositeConstruct 224 224 224 224
- 674: 48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 671 672 673
- 675: 48(fvec4) Load 53(inF0)
- 676: 48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 675
- 677: 48(fvec4) Load 53(inF0)
- 678: 48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 677
- 679: 48(fvec4) Load 53(inF0)
- 680: 48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 679
- Store 54(inF1) 680
- 681: 48(fvec4) Load 53(inF0)
- 682: 48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 681
- Store 55(inF2) 682
- 683: 48(fvec4) Load 53(inF0)
- 684: 48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 683
+ 659: 48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 658
+ 660: 48(fvec4) Load 53(inF0)
+ 661: 48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 660
+ 662: 48(fvec4) Load 53(inF0)
+ 663: 48(fvec4) CompositeConstruct 133 133 133 133
+ 664: 48(fvec4) CompositeConstruct 221 221 221 221
+ 665: 48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 662 663 664
+ 666: 48(fvec4) Load 53(inF0)
+ 667: 48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 666
+ 668: 48(fvec4) Load 53(inF0)
+ 669: 48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 668
+ 670: 48(fvec4) Load 53(inF0)
+ 671: 48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 670
+ Store 54(inF1) 671
+ 672: 48(fvec4) Load 53(inF0)
+ 673: 48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 672
+ Store 55(inF2) 673
+ 674: 48(fvec4) Load 53(inF0)
+ 675: 48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 674
+ 676: 48(fvec4) Load 53(inF0)
+ 677: 48(fvec4) Load 54(inF1)
+ 678: 48(fvec4) Load 55(inF2)
+ 679: 48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 676 677 678
+ 680: 48(fvec4) Load 53(inF0)
+ 681: 48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 680
+ 682: 48(fvec4) Load 53(inF0)
+ 683: 48(fvec4) Load 54(inF1)
+ 684: 48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 682 683
685: 48(fvec4) Load 53(inF0)
- 686: 48(fvec4) Load 54(inF1)
- 687: 48(fvec4) Load 55(inF2)
- 688: 48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 685 686 687
+ 686: 48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 685
+ 687: 48(fvec4) Load 53(inF0)
+ 688: 48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 687
689: 48(fvec4) Load 53(inF0)
- 690: 48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 689
- 691: 48(fvec4) Load 53(inF0)
- 692: 48(fvec4) Load 54(inF1)
- 693: 48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 691 692
- 694: 48(fvec4) Load 53(inF0)
- 695: 48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 694
- 696: 48(fvec4) Load 53(inF0)
- 697: 48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 696
- 698: 48(fvec4) Load 53(inF0)
- 699: 48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 698
- ReturnValue 701
+ 690: 48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 689
+ ReturnValue 692
FunctionEnd
66(VertexShaderFunction2x2(mf22;mf22;mf22;): 60 Function None 62
63(inF0): 61(ptr) FunctionParameter
64(inF1): 61(ptr) FunctionParameter
65(inF2): 61(ptr) FunctionParameter
67: Label
- 704: 60 Load 63(inF0)
- 705: 132(bool) All 704
+ 695: 60 Load 63(inF0)
+ 697: 696 FOrdNotEqual 695 133
+ 698: 132(bool) All 697
+ 699: 60 Load 63(inF0)
+ 700: 60 ExtInst 1(GLSL.std.450) 4(FAbs) 699
+ 701: 60 Load 63(inF0)
+ 702: 60 ExtInst 1(GLSL.std.450) 17(Acos) 701
+ 703: 60 Load 63(inF0)
+ 704: 696 FOrdNotEqual 703 133
+ 705: 132(bool) Any 704
706: 60 Load 63(inF0)
- 707: 60 ExtInst 1(GLSL.std.450) 4(FAbs) 706
+ 707: 60 ExtInst 1(GLSL.std.450) 16(Asin) 706
708: 60 Load 63(inF0)
- 709: 60 ExtInst 1(GLSL.std.450) 17(Acos) 708
+ 709: 60 ExtInst 1(GLSL.std.450) 18(Atan) 708
710: 60 Load 63(inF0)
- 711: 132(bool) Any 710
- 712: 60 Load 63(inF0)
- 713: 60 ExtInst 1(GLSL.std.450) 16(Asin) 712
- 714: 60 Load 63(inF0)
- 715: 60 ExtInst 1(GLSL.std.450) 18(Atan) 714
- 716: 60 Load 63(inF0)
- 717: 60 Load 64(inF1)
- 718: 60 ExtInst 1(GLSL.std.450) 25(Atan2) 716 717
+ 711: 60 Load 64(inF1)
+ 712: 60 ExtInst 1(GLSL.std.450) 25(Atan2) 710 711
+ 713: 60 Load 63(inF0)
+ 714: 60 ExtInst 1(GLSL.std.450) 9(Ceil) 713
+ 715: 60 Load 63(inF0)
+ 716: 60 Load 64(inF1)
+ 717: 60 Load 65(inF2)
+ 718: 60 ExtInst 1(GLSL.std.450) 43(FClamp) 715 716 717
719: 60 Load 63(inF0)
- 720: 60 ExtInst 1(GLSL.std.450) 9(Ceil) 719
+ 720: 60 ExtInst 1(GLSL.std.450) 14(Cos) 719
721: 60 Load 63(inF0)
- 722: 60 Load 64(inF1)
- 723: 60 Load 65(inF2)
- 724: 60 ExtInst 1(GLSL.std.450) 43(FClamp) 721 722 723
+ 722: 60 ExtInst 1(GLSL.std.450) 20(Cosh) 721
+ 723: 60 Load 63(inF0)
+ 724: 60 ExtInst 1(GLSL.std.450) 12(Degrees) 723
725: 60 Load 63(inF0)
- 726: 60 ExtInst 1(GLSL.std.450) 14(Cos) 725
+ 726: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 725
727: 60 Load 63(inF0)
- 728: 60 ExtInst 1(GLSL.std.450) 20(Cosh) 727
+ 728: 60 ExtInst 1(GLSL.std.450) 27(Exp) 727
729: 60 Load 63(inF0)
- 730: 60 ExtInst 1(GLSL.std.450) 12(Degrees) 729
- 731: 60 Load 63(inF0)
- 732: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 731
+ 730: 60 ExtInst 1(GLSL.std.450) 29(Exp2) 729
+ 731: 146(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 167
+ 732: 146(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 167
733: 60 Load 63(inF0)
- 734: 60 ExtInst 1(GLSL.std.450) 27(Exp) 733
+ 734: 60 ExtInst 1(GLSL.std.450) 8(Floor) 733
735: 60 Load 63(inF0)
- 736: 60 ExtInst 1(GLSL.std.450) 29(Exp2) 735
- 737: 143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
- 738: 143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
- 739: 60 Load 63(inF0)
- 740: 60 ExtInst 1(GLSL.std.450) 8(Floor) 739
- 741: 60 Load 63(inF0)
- 742: 60 Load 64(inF1)
- 743: 24(fvec2) CompositeExtract 741 0
- 744: 24(fvec2) CompositeExtract 742 0
- 745: 24(fvec2) FMod 743 744
- 746: 24(fvec2) CompositeExtract 741 1
- 747: 24(fvec2) CompositeExtract 742 1
- 748: 24(fvec2) FMod 746 747
- 749: 60 CompositeConstruct 745 748
- 750: 60 Load 63(inF0)
- 751: 60 ExtInst 1(GLSL.std.450) 10(Fract) 750
- 752: 60 Load 63(inF0)
- 754:753(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 752
- 755: 266(ivec2) CompositeExtract 754 1
- Store 64(inF1) 755
- 756: 60 CompositeExtract 754 0
- 757: 60 Load 63(inF0)
- 758: 60 Load 64(inF1)
- 759: 60 ExtInst 1(GLSL.std.450) 53(Ldexp) 757 758
+ 736: 60 Load 64(inF1)
+ 737: 24(fvec2) CompositeExtract 735 0
+ 738: 24(fvec2) CompositeExtract 736 0
+ 739: 24(fvec2) FMod 737 738
+ 740: 24(fvec2) CompositeExtract 735 1
+ 741: 24(fvec2) CompositeExtract 736 1
+ 742: 24(fvec2) FMod 740 741
+ 743: 60 CompositeConstruct 739 742
+ 744: 60 Load 63(inF0)
+ 745: 60 ExtInst 1(GLSL.std.450) 10(Fract) 744
+ 746: 60 Load 63(inF0)
+ 747: 60 Load 64(inF1)
+ 748: 60 ExtInst 1(GLSL.std.450) 53(Ldexp) 746 747
+ 749: 60 Load 63(inF0)
+ 750: 60 Load 64(inF1)
+ 751: 60 Load 65(inF2)
+ 752: 60 ExtInst 1(GLSL.std.450) 46(FMix) 749 750 751
+ 753: 60 Load 63(inF0)
+ 754: 60 ExtInst 1(GLSL.std.450) 28(Log) 753
+ 755: 60 Load 63(inF0)
+ 756: 60 ExtInst 1(GLSL.std.450) 30(Log2) 755
+ 757: 60 MatrixTimesScalar 756 199
+ 758: 60 Load 63(inF0)
+ 759: 60 ExtInst 1(GLSL.std.450) 30(Log2) 758
760: 60 Load 63(inF0)
761: 60 Load 64(inF1)
- 762: 60 Load 65(inF2)
- 763: 60 ExtInst 1(GLSL.std.450) 46(FMix) 760 761 762
- 764: 60 Load 63(inF0)
- 765: 60 ExtInst 1(GLSL.std.450) 28(Log) 764
+ 762: 60 ExtInst 1(GLSL.std.450) 40(FMax) 760 761
+ 763: 60 Load 63(inF0)
+ 764: 60 Load 64(inF1)
+ 765: 60 ExtInst 1(GLSL.std.450) 37(FMin) 763 764
766: 60 Load 63(inF0)
- 767: 60 ExtInst 1(GLSL.std.450) 30(Log2) 766
- 768: 60 MatrixTimesScalar 767 201
+ 767: 60 Load 64(inF1)
+ 768: 60 ExtInst 1(GLSL.std.450) 26(Pow) 766 767
769: 60 Load 63(inF0)
- 770: 60 ExtInst 1(GLSL.std.450) 30(Log2) 769
+ 770: 60 ExtInst 1(GLSL.std.450) 11(Radians) 769
771: 60 Load 63(inF0)
- 772: 60 Load 64(inF1)
- 773: 60 ExtInst 1(GLSL.std.450) 40(FMax) 771 772
- 774: 60 Load 63(inF0)
- 775: 60 Load 64(inF1)
- 776: 60 ExtInst 1(GLSL.std.450) 37(FMin) 774 775
- 777: 60 Load 63(inF0)
- 778: 60 Load 64(inF1)
- 779: 60 ExtInst 1(GLSL.std.450) 26(Pow) 777 778
- 780: 60 Load 63(inF0)
- 781: 60 ExtInst 1(GLSL.std.450) 11(Radians) 780
- 782: 60 Load 63(inF0)
- 783: 60 ExtInst 1(GLSL.std.450) 2(RoundEven) 782
- 784: 60 Load 63(inF0)
- 785: 60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 784
- 786: 60 Load 63(inF0)
- 787: 24(fvec2) CompositeConstruct 223 223
- 788: 24(fvec2) CompositeConstruct 224 224
- 789: 60 ExtInst 1(GLSL.std.450) 43(FClamp) 786 787 788
- 790: 60 Load 63(inF0)
- 791: 60 ExtInst 1(GLSL.std.450) 6(FSign) 790
- 792: 60 Load 63(inF0)
- 793: 60 ExtInst 1(GLSL.std.450) 13(Sin) 792
- 794: 60 Load 63(inF0)
- 795: 60 ExtInst 1(GLSL.std.450) 13(Sin) 794
- Store 64(inF1) 795
- 796: 60 Load 63(inF0)
- 797: 60 ExtInst 1(GLSL.std.450) 14(Cos) 796
- Store 65(inF2) 797
+ 772: 60 ExtInst 1(GLSL.std.450) 2(RoundEven) 771
+ 773: 60 Load 63(inF0)
+ 774: 60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 773
+ 775: 60 Load 63(inF0)
+ 776: 24(fvec2) CompositeConstruct 133 133
+ 777: 24(fvec2) CompositeConstruct 221 221
+ 778: 60 ExtInst 1(GLSL.std.450) 43(FClamp) 775 776 777
+ 779: 60 Load 63(inF0)
+ 780: 60 ExtInst 1(GLSL.std.450) 6(FSign) 779
+ 781: 60 Load 63(inF0)
+ 782: 60 ExtInst 1(GLSL.std.450) 13(Sin) 781
+ 783: 60 Load 63(inF0)
+ 784: 60 ExtInst 1(GLSL.std.450) 13(Sin) 783
+ Store 64(inF1) 784
+ 785: 60 Load 63(inF0)
+ 786: 60 ExtInst 1(GLSL.std.450) 14(Cos) 785
+ Store 65(inF2) 786
+ 787: 60 Load 63(inF0)
+ 788: 60 ExtInst 1(GLSL.std.450) 19(Sinh) 787
+ 789: 60 Load 63(inF0)
+ 790: 60 Load 64(inF1)
+ 791: 60 Load 65(inF2)
+ 792: 60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 789 790 791
+ 793: 60 Load 63(inF0)
+ 794: 60 ExtInst 1(GLSL.std.450) 31(Sqrt) 793
+ 795: 60 Load 63(inF0)
+ 796: 60 Load 64(inF1)
+ 797: 60 ExtInst 1(GLSL.std.450) 48(Step) 795 796
798: 60 Load 63(inF0)
- 799: 60 ExtInst 1(GLSL.std.450) 19(Sinh) 798
+ 799: 60 ExtInst 1(GLSL.std.450) 15(Tan) 798
800: 60 Load 63(inF0)
- 801: 60 Load 64(inF1)
- 802: 60 Load 65(inF2)
- 803: 60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 800 801 802
+ 801: 60 ExtInst 1(GLSL.std.450) 21(Tanh) 800
+ 802: 60 Load 63(inF0)
+ 803: 60 Transpose 802
804: 60 Load 63(inF0)
- 805: 60 ExtInst 1(GLSL.std.450) 31(Sqrt) 804
- 806: 60 Load 63(inF0)
- 807: 60 Load 64(inF1)
- 808: 60 ExtInst 1(GLSL.std.450) 48(Step) 806 807
- 809: 60 Load 63(inF0)
- 810: 60 ExtInst 1(GLSL.std.450) 15(Tan) 809
- 811: 60 Load 63(inF0)
- 812: 60 ExtInst 1(GLSL.std.450) 21(Tanh) 811
- 813: 60 Load 63(inF0)
- 814: 60 Transpose 813
- 815: 60 Load 63(inF0)
- 816: 60 ExtInst 1(GLSL.std.450) 3(Trunc) 815
- ReturnValue 818
+ 805: 60 ExtInst 1(GLSL.std.450) 3(Trunc) 804
+ ReturnValue 807
FunctionEnd
74(VertexShaderFunction3x3(mf33;mf33;mf33;): 68 Function None 70
71(inF0): 69(ptr) FunctionParameter
72(inF1): 69(ptr) FunctionParameter
73(inF2): 69(ptr) FunctionParameter
75: Label
+ 810: 68 Load 71(inF0)
+ 812: 811 FOrdNotEqual 810 133
+ 813: 132(bool) All 812
+ 814: 68 Load 71(inF0)
+ 815: 68 ExtInst 1(GLSL.std.450) 4(FAbs) 814
+ 816: 68 Load 71(inF0)
+ 817: 68 ExtInst 1(GLSL.std.450) 17(Acos) 816
+ 818: 68 Load 71(inF0)
+ 819: 811 FOrdNotEqual 818 133
+ 820: 132(bool) Any 819
821: 68 Load 71(inF0)
- 822: 132(bool) All 821
+ 822: 68 ExtInst 1(GLSL.std.450) 16(Asin) 821
823: 68 Load 71(inF0)
- 824: 68 ExtInst 1(GLSL.std.450) 4(FAbs) 823
+ 824: 68 ExtInst 1(GLSL.std.450) 18(Atan) 823
825: 68 Load 71(inF0)
- 826: 68 ExtInst 1(GLSL.std.450) 17(Acos) 825
- 827: 68 Load 71(inF0)
- 828: 132(bool) Any 827
- 829: 68 Load 71(inF0)
- 830: 68 ExtInst 1(GLSL.std.450) 16(Asin) 829
- 831: 68 Load 71(inF0)
- 832: 68 ExtInst 1(GLSL.std.450) 18(Atan) 831
- 833: 68 Load 71(inF0)
- 834: 68 Load 72(inF1)
- 835: 68 ExtInst 1(GLSL.std.450) 25(Atan2) 833 834
+ 826: 68 Load 72(inF1)
+ 827: 68 ExtInst 1(GLSL.std.450) 25(Atan2) 825 826
+ 828: 68 Load 71(inF0)
+ 829: 68 ExtInst 1(GLSL.std.450) 9(Ceil) 828
+ 830: 68 Load 71(inF0)
+ 831: 68 Load 72(inF1)
+ 832: 68 Load 73(inF2)
+ 833: 68 ExtInst 1(GLSL.std.450) 43(FClamp) 830 831 832
+ 834: 68 Load 71(inF0)
+ 835: 68 ExtInst 1(GLSL.std.450) 14(Cos) 834
836: 68 Load 71(inF0)
- 837: 68 ExtInst 1(GLSL.std.450) 9(Ceil) 836
+ 837: 68 ExtInst 1(GLSL.std.450) 20(Cosh) 836
838: 68 Load 71(inF0)
- 839: 68 Load 72(inF1)
- 840: 68 Load 73(inF2)
- 841: 68 ExtInst 1(GLSL.std.450) 43(FClamp) 838 839 840
+ 839: 68 ExtInst 1(GLSL.std.450) 12(Degrees) 838
+ 840: 68 Load 71(inF0)
+ 841: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 840
842: 68 Load 71(inF0)
- 843: 68 ExtInst 1(GLSL.std.450) 14(Cos) 842
+ 843: 68 ExtInst 1(GLSL.std.450) 27(Exp) 842
844: 68 Load 71(inF0)
- 845: 68 ExtInst 1(GLSL.std.450) 20(Cosh) 844
- 846: 68 Load 71(inF0)
- 847: 68 ExtInst 1(GLSL.std.450) 12(Degrees) 846
+ 845: 68 ExtInst 1(GLSL.std.450) 29(Exp2) 844
+ 846: 146(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 167
+ 847: 146(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 167
848: 68 Load 71(inF0)
- 849: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 848
+ 849: 68 ExtInst 1(GLSL.std.450) 8(Floor) 848
850: 68 Load 71(inF0)
- 851: 68 ExtInst 1(GLSL.std.450) 27(Exp) 850
- 852: 68 Load 71(inF0)
- 853: 68 ExtInst 1(GLSL.std.450) 29(Exp2) 852
- 854: 143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
- 855: 143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
- 856: 68 Load 71(inF0)
- 857: 68 ExtInst 1(GLSL.std.450) 8(Floor) 856
- 858: 68 Load 71(inF0)
- 859: 68 Load 72(inF1)
- 860: 36(fvec3) CompositeExtract 858 0
- 861: 36(fvec3) CompositeExtract 859 0
- 862: 36(fvec3) FMod 860 861
- 863: 36(fvec3) CompositeExtract 858 1
- 864: 36(fvec3) CompositeExtract 859 1
- 865: 36(fvec3) FMod 863 864
- 866: 36(fvec3) CompositeExtract 858 2
- 867: 36(fvec3) CompositeExtract 859 2
- 868: 36(fvec3) FMod 866 867
- 869: 68 CompositeConstruct 862 865 868
- 870: 68 Load 71(inF0)
- 871: 68 ExtInst 1(GLSL.std.450) 10(Fract) 870
- 872: 68 Load 71(inF0)
- 874:873(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 872
- 875: 411(ivec3) CompositeExtract 874 1
- Store 72(inF1) 875
- 876: 68 CompositeExtract 874 0
- 877: 68 Load 71(inF0)
- 878: 68 Load 72(inF1)
- 879: 68 ExtInst 1(GLSL.std.450) 53(Ldexp) 877 878
- 880: 68 Load 71(inF0)
- 881: 68 Load 72(inF1)
- 882: 68 Load 73(inF2)
- 883: 68 ExtInst 1(GLSL.std.450) 46(FMix) 880 881 882
+ 851: 68 Load 72(inF1)
+ 852: 36(fvec3) CompositeExtract 850 0
+ 853: 36(fvec3) CompositeExtract 851 0
+ 854: 36(fvec3) FMod 852 853
+ 855: 36(fvec3) CompositeExtract 850 1
+ 856: 36(fvec3) CompositeExtract 851 1
+ 857: 36(fvec3) FMod 855 856
+ 858: 36(fvec3) CompositeExtract 850 2
+ 859: 36(fvec3) CompositeExtract 851 2
+ 860: 36(fvec3) FMod 858 859
+ 861: 68 CompositeConstruct 854 857 860
+ 862: 68 Load 71(inF0)
+ 863: 68 ExtInst 1(GLSL.std.450) 10(Fract) 862
+ 864: 68 Load 71(inF0)
+ 865: 68 Load 72(inF1)
+ 866: 68 ExtInst 1(GLSL.std.450) 53(Ldexp) 864 865
+ 867: 68 Load 71(inF0)
+ 868: 68 Load 72(inF1)
+ 869: 68 Load 73(inF2)
+ 870: 68 ExtInst 1(GLSL.std.450) 46(FMix) 867 868 869
+ 871: 68 Load 71(inF0)
+ 872: 68 ExtInst 1(GLSL.std.450) 28(Log) 871
+ 873: 68 Load 71(inF0)
+ 874: 68 ExtInst 1(GLSL.std.450) 30(Log2) 873
+ 875: 68 MatrixTimesScalar 874 199
+ 876: 68 Load 71(inF0)
+ 877: 68 ExtInst 1(GLSL.std.450) 30(Log2) 876
+ 878: 68 Load 71(inF0)
+ 879: 68 Load 72(inF1)
+ 880: 68 ExtInst 1(GLSL.std.450) 40(FMax) 878 879
+ 881: 68 Load 71(inF0)
+ 882: 68 Load 72(inF1)
+ 883: 68 ExtInst 1(GLSL.std.450) 37(FMin) 881 882
884: 68 Load 71(inF0)
- 885: 68 ExtInst 1(GLSL.std.450) 28(Log) 884
- 886: 68 Load 71(inF0)
- 887: 68 ExtInst 1(GLSL.std.450) 30(Log2) 886
- 888: 68 MatrixTimesScalar 887 201
+ 885: 68 Load 72(inF1)
+ 886: 68 ExtInst 1(GLSL.std.450) 26(Pow) 884 885
+ 887: 68 Load 71(inF0)
+ 888: 68 ExtInst 1(GLSL.std.450) 11(Radians) 887
889: 68 Load 71(inF0)
- 890: 68 ExtInst 1(GLSL.std.450) 30(Log2) 889
+ 890: 68 ExtInst 1(GLSL.std.450) 2(RoundEven) 889
891: 68 Load 71(inF0)
- 892: 68 Load 72(inF1)
- 893: 68 ExtInst 1(GLSL.std.450) 40(FMax) 891 892
- 894: 68 Load 71(inF0)
- 895: 68 Load 72(inF1)
- 896: 68 ExtInst 1(GLSL.std.450) 37(FMin) 894 895
+ 892: 68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 891
+ 893: 68 Load 71(inF0)
+ 894: 36(fvec3) CompositeConstruct 133 133 133
+ 895: 36(fvec3) CompositeConstruct 221 221 221
+ 896: 68 ExtInst 1(GLSL.std.450) 43(FClamp) 893 894 895
897: 68 Load 71(inF0)
- 898: 68 Load 72(inF1)
- 899: 68 ExtInst 1(GLSL.std.450) 26(Pow) 897 898
- 900: 68 Load 71(inF0)
- 901: 68 ExtInst 1(GLSL.std.450) 11(Radians) 900
- 902: 68 Load 71(inF0)
- 903: 68 ExtInst 1(GLSL.std.450) 2(RoundEven) 902
- 904: 68 Load 71(inF0)
- 905: 68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 904
- 906: 68 Load 71(inF0)
- 907: 36(fvec3) CompositeConstruct 223 223 223
- 908: 36(fvec3) CompositeConstruct 224 224 224
- 909: 68 ExtInst 1(GLSL.std.450) 43(FClamp) 906 907 908
- 910: 68 Load 71(inF0)
- 911: 68 ExtInst 1(GLSL.std.450) 6(FSign) 910
- 912: 68 Load 71(inF0)
- 913: 68 ExtInst 1(GLSL.std.450) 13(Sin) 912
- 914: 68 Load 71(inF0)
- 915: 68 ExtInst 1(GLSL.std.450) 13(Sin) 914
- Store 72(inF1) 915
+ 898: 68 ExtInst 1(GLSL.std.450) 6(FSign) 897
+ 899: 68 Load 71(inF0)
+ 900: 68 ExtInst 1(GLSL.std.450) 13(Sin) 899
+ 901: 68 Load 71(inF0)
+ 902: 68 ExtInst 1(GLSL.std.450) 13(Sin) 901
+ Store 72(inF1) 902
+ 903: 68 Load 71(inF0)
+ 904: 68 ExtInst 1(GLSL.std.450) 14(Cos) 903
+ Store 73(inF2) 904
+ 905: 68 Load 71(inF0)
+ 906: 68 ExtInst 1(GLSL.std.450) 19(Sinh) 905
+ 907: 68 Load 71(inF0)
+ 908: 68 Load 72(inF1)
+ 909: 68 Load 73(inF2)
+ 910: 68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 907 908 909
+ 911: 68 Load 71(inF0)
+ 912: 68 ExtInst 1(GLSL.std.450) 31(Sqrt) 911
+ 913: 68 Load 71(inF0)
+ 914: 68 Load 72(inF1)
+ 915: 68 ExtInst 1(GLSL.std.450) 48(Step) 913 914
916: 68 Load 71(inF0)
- 917: 68 ExtInst 1(GLSL.std.450) 14(Cos) 916
- Store 73(inF2) 917
+ 917: 68 ExtInst 1(GLSL.std.450) 15(Tan) 916
918: 68 Load 71(inF0)
- 919: 68 ExtInst 1(GLSL.std.450) 19(Sinh) 918
+ 919: 68 ExtInst 1(GLSL.std.450) 21(Tanh) 918
920: 68 Load 71(inF0)
- 921: 68 Load 72(inF1)
- 922: 68 Load 73(inF2)
- 923: 68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 920 921 922
- 924: 68 Load 71(inF0)
- 925: 68 ExtInst 1(GLSL.std.450) 31(Sqrt) 924
- 926: 68 Load 71(inF0)
- 927: 68 Load 72(inF1)
- 928: 68 ExtInst 1(GLSL.std.450) 48(Step) 926 927
- 929: 68 Load 71(inF0)
- 930: 68 ExtInst 1(GLSL.std.450) 15(Tan) 929
- 931: 68 Load 71(inF0)
- 932: 68 ExtInst 1(GLSL.std.450) 21(Tanh) 931
- 933: 68 Load 71(inF0)
- 934: 68 Transpose 933
- 935: 68 Load 71(inF0)
- 936: 68 ExtInst 1(GLSL.std.450) 3(Trunc) 935
- ReturnValue 938
+ 921: 68 Transpose 920
+ 922: 68 Load 71(inF0)
+ 923: 68 ExtInst 1(GLSL.std.450) 3(Trunc) 922
+ ReturnValue 925
FunctionEnd
82(VertexShaderFunction4x4(mf44;mf44;mf44;): 76 Function None 78
79(inF0): 77(ptr) FunctionParameter
80(inF1): 77(ptr) FunctionParameter
81(inF2): 77(ptr) FunctionParameter
83: Label
+ 928: 76 Load 79(inF0)
+ 930: 929 FOrdNotEqual 928 133
+ 931: 132(bool) All 930
+ 932: 76 Load 79(inF0)
+ 933: 76 ExtInst 1(GLSL.std.450) 4(FAbs) 932
+ 934: 76 Load 79(inF0)
+ 935: 76 ExtInst 1(GLSL.std.450) 17(Acos) 934
+ 936: 76 Load 79(inF0)
+ 937: 929 FOrdNotEqual 936 133
+ 938: 132(bool) Any 937
+ 939: 76 Load 79(inF0)
+ 940: 76 ExtInst 1(GLSL.std.450) 16(Asin) 939
941: 76 Load 79(inF0)
- 942: 132(bool) All 941
+ 942: 76 ExtInst 1(GLSL.std.450) 18(Atan) 941
943: 76 Load 79(inF0)
- 944: 76 ExtInst 1(GLSL.std.450) 4(FAbs) 943
- 945: 76 Load 79(inF0)
- 946: 76 ExtInst 1(GLSL.std.450) 17(Acos) 945
- 947: 76 Load 79(inF0)
- 948: 132(bool) Any 947
- 949: 76 Load 79(inF0)
- 950: 76 ExtInst 1(GLSL.std.450) 16(Asin) 949
- 951: 76 Load 79(inF0)
- 952: 76 ExtInst 1(GLSL.std.450) 18(Atan) 951
- 953: 76 Load 79(inF0)
- 954: 76 Load 80(inF1)
- 955: 76 ExtInst 1(GLSL.std.450) 25(Atan2) 953 954
+ 944: 76 Load 80(inF1)
+ 945: 76 ExtInst 1(GLSL.std.450) 25(Atan2) 943 944
+ 946: 76 Load 79(inF0)
+ 947: 76 ExtInst 1(GLSL.std.450) 9(Ceil) 946
+ 948: 76 Load 79(inF0)
+ 949: 76 Load 80(inF1)
+ 950: 76 Load 81(inF2)
+ 951: 76 ExtInst 1(GLSL.std.450) 43(FClamp) 948 949 950
+ 952: 76 Load 79(inF0)
+ 953: 76 ExtInst 1(GLSL.std.450) 14(Cos) 952
+ 954: 76 Load 79(inF0)
+ 955: 76 ExtInst 1(GLSL.std.450) 20(Cosh) 954
956: 76 Load 79(inF0)
- 957: 76 ExtInst 1(GLSL.std.450) 9(Ceil) 956
+ 957: 76 ExtInst 1(GLSL.std.450) 12(Degrees) 956
958: 76 Load 79(inF0)
- 959: 76 Load 80(inF1)
- 960: 76 Load 81(inF2)
- 961: 76 ExtInst 1(GLSL.std.450) 43(FClamp) 958 959 960
+ 959: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 958
+ 960: 76 Load 79(inF0)
+ 961: 76 ExtInst 1(GLSL.std.450) 27(Exp) 960
962: 76 Load 79(inF0)
- 963: 76 ExtInst 1(GLSL.std.450) 14(Cos) 962
- 964: 76 Load 79(inF0)
- 965: 76 ExtInst 1(GLSL.std.450) 20(Cosh) 964
+ 963: 76 ExtInst 1(GLSL.std.450) 29(Exp2) 962
+ 964: 146(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 167
+ 965: 146(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 167
966: 76 Load 79(inF0)
- 967: 76 ExtInst 1(GLSL.std.450) 12(Degrees) 966
+ 967: 76 ExtInst 1(GLSL.std.450) 8(Floor) 966
968: 76 Load 79(inF0)
- 969: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 968
- 970: 76 Load 79(inF0)
- 971: 76 ExtInst 1(GLSL.std.450) 27(Exp) 970
- 972: 76 Load 79(inF0)
- 973: 76 ExtInst 1(GLSL.std.450) 29(Exp2) 972
- 974: 143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 164
- 975: 143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 164
- 976: 76 Load 79(inF0)
- 977: 76 ExtInst 1(GLSL.std.450) 8(Floor) 976
- 978: 76 Load 79(inF0)
- 979: 76 Load 80(inF1)
- 980: 48(fvec4) CompositeExtract 978 0
- 981: 48(fvec4) CompositeExtract 979 0
- 982: 48(fvec4) FMod 980 981
- 983: 48(fvec4) CompositeExtract 978 1
- 984: 48(fvec4) CompositeExtract 979 1
- 985: 48(fvec4) FMod 983 984
- 986: 48(fvec4) CompositeExtract 978 2
- 987: 48(fvec4) CompositeExtract 979 2
- 988: 48(fvec4) FMod 986 987
- 989: 48(fvec4) CompositeExtract 978 3
- 990: 48(fvec4) CompositeExtract 979 3
- 991: 48(fvec4) FMod 989 990
- 992: 76 CompositeConstruct 982 985 988 991
- 993: 76 Load 79(inF0)
- 994: 76 ExtInst 1(GLSL.std.450) 10(Fract) 993
- 995: 76 Load 79(inF0)
- 997:996(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 995
- 998: 558(ivec4) CompositeExtract 997 1
- Store 80(inF1) 998
- 999: 76 CompositeExtract 997 0
- 1000: 76 Load 79(inF0)
- 1001: 76 Load 80(inF1)
- 1002: 76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1000 1001
- 1003: 76 Load 79(inF0)
- 1004: 76 Load 80(inF1)
- 1005: 76 Load 81(inF2)
- 1006: 76 ExtInst 1(GLSL.std.450) 46(FMix) 1003 1004 1005
- 1007: 76 Load 79(inF0)
- 1008: 76 ExtInst 1(GLSL.std.450) 28(Log) 1007
- 1009: 76 Load 79(inF0)
- 1010: 76 ExtInst 1(GLSL.std.450) 30(Log2) 1009
- 1011: 76 MatrixTimesScalar 1010 201
+ 969: 76 Load 80(inF1)
+ 970: 48(fvec4) CompositeExtract 968 0
+ 971: 48(fvec4) CompositeExtract 969 0
+ 972: 48(fvec4) FMod 970 971
+ 973: 48(fvec4) CompositeExtract 968 1
+ 974: 48(fvec4) CompositeExtract 969 1
+ 975: 48(fvec4) FMod 973 974
+ 976: 48(fvec4) CompositeExtract 968 2
+ 977: 48(fvec4) CompositeExtract 969 2
+ 978: 48(fvec4) FMod 976 977
+ 979: 48(fvec4) CompositeExtract 968 3
+ 980: 48(fvec4) CompositeExtract 969 3
+ 981: 48(fvec4) FMod 979 980
+ 982: 76 CompositeConstruct 972 975 978 981
+ 983: 76 Load 79(inF0)
+ 984: 76 ExtInst 1(GLSL.std.450) 10(Fract) 983
+ 985: 76 Load 79(inF0)
+ 986: 76 Load 80(inF1)
+ 987: 76 ExtInst 1(GLSL.std.450) 53(Ldexp) 985 986
+ 988: 76 Load 79(inF0)
+ 989: 76 Load 80(inF1)
+ 990: 76 Load 81(inF2)
+ 991: 76 ExtInst 1(GLSL.std.450) 46(FMix) 988 989 990
+ 992: 76 Load 79(inF0)
+ 993: 76 ExtInst 1(GLSL.std.450) 28(Log) 992
+ 994: 76 Load 79(inF0)
+ 995: 76 ExtInst 1(GLSL.std.450) 30(Log2) 994
+ 996: 76 MatrixTimesScalar 995 199
+ 997: 76 Load 79(inF0)
+ 998: 76 ExtInst 1(GLSL.std.450) 30(Log2) 997
+ 999: 76 Load 79(inF0)
+ 1000: 76 Load 80(inF1)
+ 1001: 76 ExtInst 1(GLSL.std.450) 40(FMax) 999 1000
+ 1002: 76 Load 79(inF0)
+ 1003: 76 Load 80(inF1)
+ 1004: 76 ExtInst 1(GLSL.std.450) 37(FMin) 1002 1003
+ 1005: 76 Load 79(inF0)
+ 1006: 76 Load 80(inF1)
+ 1007: 76 ExtInst 1(GLSL.std.450) 26(Pow) 1005 1006
+ 1008: 76 Load 79(inF0)
+ 1009: 76 ExtInst 1(GLSL.std.450) 11(Radians) 1008
+ 1010: 76 Load 79(inF0)
+ 1011: 76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1010
1012: 76 Load 79(inF0)
- 1013: 76 ExtInst 1(GLSL.std.450) 30(Log2) 1012
+ 1013: 76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1012
1014: 76 Load 79(inF0)
- 1015: 76 Load 80(inF1)
- 1016: 76 ExtInst 1(GLSL.std.450) 40(FMax) 1014 1015
- 1017: 76 Load 79(inF0)
- 1018: 76 Load 80(inF1)
- 1019: 76 ExtInst 1(GLSL.std.450) 37(FMin) 1017 1018
+ 1015: 48(fvec4) CompositeConstruct 133 133 133 133
+ 1016: 48(fvec4) CompositeConstruct 221 221 221 221
+ 1017: 76 ExtInst 1(GLSL.std.450) 43(FClamp) 1014 1015 1016
+ 1018: 76 Load 79(inF0)
+ 1019: 76 ExtInst 1(GLSL.std.450) 6(FSign) 1018
1020: 76 Load 79(inF0)
- 1021: 76 Load 80(inF1)
- 1022: 76 ExtInst 1(GLSL.std.450) 26(Pow) 1020 1021
- 1023: 76 Load 79(inF0)
- 1024: 76 ExtInst 1(GLSL.std.450) 11(Radians) 1023
- 1025: 76 Load 79(inF0)
- 1026: 76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1025
- 1027: 76 Load 79(inF0)
- 1028: 76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1027
- 1029: 76 Load 79(inF0)
- 1030: 48(fvec4) CompositeConstruct 223 223 223 223
- 1031: 48(fvec4) CompositeConstruct 224 224 224 224
- 1032: 76 ExtInst 1(GLSL.std.450) 43(FClamp) 1029 1030 1031
- 1033: 76 Load 79(inF0)
- 1034: 76 ExtInst 1(GLSL.std.450) 6(FSign) 1033
- 1035: 76 Load 79(inF0)
- 1036: 76 ExtInst 1(GLSL.std.450) 13(Sin) 1035
+ 1021: 76 ExtInst 1(GLSL.std.450) 13(Sin) 1020
+ 1022: 76 Load 79(inF0)
+ 1023: 76 ExtInst 1(GLSL.std.450) 13(Sin) 1022
+ Store 80(inF1) 1023
+ 1024: 76 Load 79(inF0)
+ 1025: 76 ExtInst 1(GLSL.std.450) 14(Cos) 1024
+ Store 81(inF2) 1025
+ 1026: 76 Load 79(inF0)
+ 1027: 76 ExtInst 1(GLSL.std.450) 19(Sinh) 1026
+ 1028: 76 Load 79(inF0)
+ 1029: 76 Load 80(inF1)
+ 1030: 76 Load 81(inF2)
+ 1031: 76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1028 1029 1030
+ 1032: 76 Load 79(inF0)
+ 1033: 76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1032
+ 1034: 76 Load 79(inF0)
+ 1035: 76 Load 80(inF1)
+ 1036: 76 ExtInst 1(GLSL.std.450) 48(Step) 1034 1035
1037: 76 Load 79(inF0)
- 1038: 76 ExtInst 1(GLSL.std.450) 13(Sin) 1037
- Store 80(inF1) 1038
+ 1038: 76 ExtInst 1(GLSL.std.450) 15(Tan) 1037
1039: 76 Load 79(inF0)
- 1040: 76 ExtInst 1(GLSL.std.450) 14(Cos) 1039
- Store 81(inF2) 1040
+ 1040: 76 ExtInst 1(GLSL.std.450) 21(Tanh) 1039
1041: 76 Load 79(inF0)
- 1042: 76 ExtInst 1(GLSL.std.450) 19(Sinh) 1041
+ 1042: 76 Transpose 1041
1043: 76 Load 79(inF0)
- 1044: 76 Load 80(inF1)
- 1045: 76 Load 81(inF2)
- 1046: 76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1043 1044 1045
- 1047: 76 Load 79(inF0)
- 1048: 76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1047
- 1049: 76 Load 79(inF0)
- 1050: 76 Load 80(inF1)
- 1051: 76 ExtInst 1(GLSL.std.450) 48(Step) 1049 1050
- 1052: 76 Load 79(inF0)
- 1053: 76 ExtInst 1(GLSL.std.450) 15(Tan) 1052
- 1054: 76 Load 79(inF0)
- 1055: 76 ExtInst 1(GLSL.std.450) 21(Tanh) 1054
- 1056: 76 Load 79(inF0)
- 1057: 76 Transpose 1056
- 1058: 76 Load 79(inF0)
- 1059: 76 ExtInst 1(GLSL.std.450) 3(Trunc) 1058
- ReturnValue 1061
+ 1044: 76 ExtInst 1(GLSL.std.450) 3(Trunc) 1043
+ ReturnValue 1046
FunctionEnd
91(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;): 2 Function None 84
85(inF0): 7(ptr) FunctionParameter
@@ -3981,51 +3939,51 @@ Shader version: 450
89(inFM0): 61(ptr) FunctionParameter
90(inFM1): 61(ptr) FunctionParameter
92: Label
- 1064(r0): 7(ptr) Variable Function
- 1068(r1): 25(ptr) Variable Function
- 1072(r2): 25(ptr) Variable Function
- 1076(r3): 7(ptr) Variable Function
- 1080(r4): 25(ptr) Variable Function
- 1084(r5): 25(ptr) Variable Function
- 1088(r6): 61(ptr) Variable Function
- 1092(r7): 61(ptr) Variable Function
- 1096(r8): 61(ptr) Variable Function
- 1065: 6(float) Load 86(inF1)
- 1066: 6(float) Load 85(inF0)
- 1067: 6(float) FMul 1065 1066
- Store 1064(r0) 1067
- 1069: 6(float) Load 85(inF0)
- 1070: 24(fvec2) Load 87(inFV0)
- 1071: 24(fvec2) VectorTimesScalar 1070 1069
- Store 1068(r1) 1071
- 1073: 24(fvec2) Load 87(inFV0)
+ 1049(r0): 7(ptr) Variable Function
+ 1053(r1): 25(ptr) Variable Function
+ 1057(r2): 25(ptr) Variable Function
+ 1061(r3): 7(ptr) Variable Function
+ 1065(r4): 25(ptr) Variable Function
+ 1069(r5): 25(ptr) Variable Function
+ 1073(r6): 61(ptr) Variable Function
+ 1077(r7): 61(ptr) Variable Function
+ 1081(r8): 61(ptr) Variable Function
+ 1050: 6(float) Load 86(inF1)
+ 1051: 6(float) Load 85(inF0)
+ 1052: 6(float) FMul 1050 1051
+ Store 1049(r0) 1052
+ 1054: 6(float) Load 85(inF0)
+ 1055: 24(fvec2) Load 87(inFV0)
+ 1056: 24(fvec2) VectorTimesScalar 1055 1054
+ Store 1053(r1) 1056
+ 1058: 24(fvec2) Load 87(inFV0)
+ 1059: 6(float) Load 85(inF0)
+ 1060: 24(fvec2) VectorTimesScalar 1058 1059
+ Store 1057(r2) 1060
+ 1062: 24(fvec2) Load 87(inFV0)
+ 1063: 24(fvec2) Load 88(inFV1)
+ 1064: 6(float) Dot 1062 1063
+ Store 1061(r3) 1064
+ 1066: 24(fvec2) Load 87(inFV0)
+ 1067: 60 Load 89(inFM0)
+ 1068: 24(fvec2) VectorTimesMatrix 1066 1067
+ Store 1065(r4) 1068
+ 1070: 60 Load 89(inFM0)
+ 1071: 24(fvec2) Load 87(inFV0)
+ 1072: 24(fvec2) MatrixTimesVector 1070 1071
+ Store 1069(r5) 1072
1074: 6(float) Load 85(inF0)
- 1075: 24(fvec2) VectorTimesScalar 1073 1074
- Store 1072(r2) 1075
- 1077: 24(fvec2) Load 87(inFV0)
- 1078: 24(fvec2) Load 88(inFV1)
- 1079: 6(float) Dot 1077 1078
- Store 1076(r3) 1079
- 1081: 24(fvec2) Load 87(inFV0)
- 1082: 60 Load 89(inFM0)
- 1083: 24(fvec2) VectorTimesMatrix 1081 1082
- Store 1080(r4) 1083
- 1085: 60 Load 89(inFM0)
- 1086: 24(fvec2) Load 87(inFV0)
- 1087: 24(fvec2) MatrixTimesVector 1085 1086
- Store 1084(r5) 1087
- 1089: 6(float) Load 85(inF0)
- 1090: 60 Load 89(inFM0)
- 1091: 60 MatrixTimesScalar 1090 1089
- Store 1088(r6) 1091
- 1093: 60 Load 89(inFM0)
- 1094: 6(float) Load 85(inF0)
- 1095: 60 MatrixTimesScalar 1093 1094
- Store 1092(r7) 1095
- 1097: 60 Load 90(inFM1)
- 1098: 60 Load 89(inFM0)
- 1099: 60 MatrixTimesMatrix 1097 1098
- Store 1096(r8) 1099
+ 1075: 60 Load 89(inFM0)
+ 1076: 60 MatrixTimesScalar 1075 1074
+ Store 1073(r6) 1076
+ 1078: 60 Load 89(inFM0)
+ 1079: 6(float) Load 85(inF0)
+ 1080: 60 MatrixTimesScalar 1078 1079
+ Store 1077(r7) 1080
+ 1082: 60 Load 90(inFM1)
+ 1083: 60 Load 89(inFM0)
+ 1084: 60 MatrixTimesMatrix 1082 1083
+ Store 1081(r8) 1084
Return
FunctionEnd
100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;): 2 Function None 93
@@ -4036,51 +3994,51 @@ Shader version: 450
98(inFM0): 69(ptr) FunctionParameter
99(inFM1): 69(ptr) FunctionParameter
101: Label
- 1100(r0): 7(ptr) Variable Function
- 1104(r1): 37(ptr) Variable Function
- 1108(r2): 37(ptr) Variable Function
- 1112(r3): 7(ptr) Variable Function
- 1116(r4): 37(ptr) Variable Function
- 1120(r5): 37(ptr) Variable Function
- 1124(r6): 69(ptr) Variable Function
- 1128(r7): 69(ptr) Variable Function
- 1132(r8): 69(ptr) Variable Function
- 1101: 6(float) Load 95(inF1)
- 1102: 6(float) Load 94(inF0)
- 1103: 6(float) FMul 1101 1102
- Store 1100(r0) 1103
- 1105: 6(float) Load 94(inF0)
- 1106: 36(fvec3) Load 96(inFV0)
- 1107: 36(fvec3) VectorTimesScalar 1106 1105
- Store 1104(r1) 1107
- 1109: 36(fvec3) Load 96(inFV0)
+ 1085(r0): 7(ptr) Variable Function
+ 1089(r1): 37(ptr) Variable Function
+ 1093(r2): 37(ptr) Variable Function
+ 1097(r3): 7(ptr) Variable Function
+ 1101(r4): 37(ptr) Variable Function
+ 1105(r5): 37(ptr) Variable Function
+ 1109(r6): 69(ptr) Variable Function
+ 1113(r7): 69(ptr) Variable Function
+ 1117(r8): 69(ptr) Variable Function
+ 1086: 6(float) Load 95(inF1)
+ 1087: 6(float) Load 94(inF0)
+ 1088: 6(float) FMul 1086 1087
+ Store 1085(r0) 1088
+ 1090: 6(float) Load 94(inF0)
+ 1091: 36(fvec3) Load 96(inFV0)
+ 1092: 36(fvec3) VectorTimesScalar 1091 1090
+ Store 1089(r1) 1092
+ 1094: 36(fvec3) Load 96(inFV0)
+ 1095: 6(float) Load 94(inF0)
+ 1096: 36(fvec3) VectorTimesScalar 1094 1095
+ Store 1093(r2) 1096
+ 1098: 36(fvec3) Load 96(inFV0)
+ 1099: 36(fvec3) Load 97(inFV1)
+ 1100: 6(float) Dot 1098 1099
+ Store 1097(r3) 1100
+ 1102: 36(fvec3) Load 96(inFV0)
+ 1103: 68 Load 98(inFM0)
+ 1104: 36(fvec3) VectorTimesMatrix 1102 1103
+ Store 1101(r4) 1104
+ 1106: 68 Load 98(inFM0)
+ 1107: 36(fvec3) Load 96(inFV0)
+ 1108: 36(fvec3) MatrixTimesVector 1106 1107
+ Store 1105(r5) 1108
1110: 6(float) Load 94(inF0)
- 1111: 36(fvec3) VectorTimesScalar 1109 1110
- Store 1108(r2) 1111
- 1113: 36(fvec3) Load 96(inFV0)
- 1114: 36(fvec3) Load 97(inFV1)
- 1115: 6(float) Dot 1113 1114
- Store 1112(r3) 1115
- 1117: 36(fvec3) Load 96(inFV0)
- 1118: 68 Load 98(inFM0)
- 1119: 36(fvec3) VectorTimesMatrix 1117 1118
- Store 1116(r4) 1119
- 1121: 68 Load 98(inFM0)
- 1122: 36(fvec3) Load 96(inFV0)
- 1123: 36(fvec3) MatrixTimesVector 1121 1122
- Store 1120(r5) 1123
- 1125: 6(float) Load 94(inF0)
- 1126: 68 Load 98(inFM0)
- 1127: 68 MatrixTimesScalar 1126 1125
- Store 1124(r6) 1127
- 1129: 68 Load 98(inFM0)
- 1130: 6(float) Load 94(inF0)
- 1131: 68 MatrixTimesScalar 1129 1130
- Store 1128(r7) 1131
- 1133: 68 Load 99(inFM1)
- 1134: 68 Load 98(inFM0)
- 1135: 68 MatrixTimesMatrix 1133 1134
- Store 1132(r8) 1135
+ 1111: 68 Load 98(inFM0)
+ 1112: 68 MatrixTimesScalar 1111 1110
+ Store 1109(r6) 1112
+ 1114: 68 Load 98(inFM0)
+ 1115: 6(float) Load 94(inF0)
+ 1116: 68 MatrixTimesScalar 1114 1115
+ Store 1113(r7) 1116
+ 1118: 68 Load 99(inFM1)
+ 1119: 68 Load 98(inFM0)
+ 1120: 68 MatrixTimesMatrix 1118 1119
+ Store 1117(r8) 1120
Return
FunctionEnd
109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;): 2 Function None 102
@@ -4091,51 +4049,51 @@ Shader version: 450
107(inFM0): 77(ptr) FunctionParameter
108(inFM1): 77(ptr) FunctionParameter
110: Label
- 1136(r0): 7(ptr) Variable Function
- 1140(r1): 49(ptr) Variable Function
- 1144(r2): 49(ptr) Variable Function
- 1148(r3): 7(ptr) Variable Function
- 1152(r4): 49(ptr) Variable Function
- 1156(r5): 49(ptr) Variable Function
- 1160(r6): 77(ptr) Variable Function
- 1164(r7): 77(ptr) Variable Function
- 1168(r8): 77(ptr) Variable Function
- 1137: 6(float) Load 104(inF1)
- 1138: 6(float) Load 103(inF0)
- 1139: 6(float) FMul 1137 1138
- Store 1136(r0) 1139
- 1141: 6(float) Load 103(inF0)
- 1142: 48(fvec4) Load 105(inFV0)
- 1143: 48(fvec4) VectorTimesScalar 1142 1141
- Store 1140(r1) 1143
- 1145: 48(fvec4) Load 105(inFV0)
+ 1121(r0): 7(ptr) Variable Function
+ 1125(r1): 49(ptr) Variable Function
+ 1129(r2): 49(ptr) Variable Function
+ 1133(r3): 7(ptr) Variable Function
+ 1137(r4): 49(ptr) Variable Function
+ 1141(r5): 49(ptr) Variable Function
+ 1145(r6): 77(ptr) Variable Function
+ 1149(r7): 77(ptr) Variable Function
+ 1153(r8): 77(ptr) Variable Function
+ 1122: 6(float) Load 104(inF1)
+ 1123: 6(float) Load 103(inF0)
+ 1124: 6(float) FMul 1122 1123
+ Store 1121(r0) 1124
+ 1126: 6(float) Load 103(inF0)
+ 1127: 48(fvec4) Load 105(inFV0)
+ 1128: 48(fvec4) VectorTimesScalar 1127 1126
+ Store 1125(r1) 1128
+ 1130: 48(fvec4) Load 105(inFV0)
+ 1131: 6(float) Load 103(inF0)
+ 1132: 48(fvec4) VectorTimesScalar 1130 1131
+ Store 1129(r2) 1132
+ 1134: 48(fvec4) Load 105(inFV0)
+ 1135: 48(fvec4) Load 106(inFV1)
+ 1136: 6(float) Dot 1134 1135
+ Store 1133(r3) 1136
+ 1138: 48(fvec4) Load 105(inFV0)
+ 1139: 76 Load 107(inFM0)
+ 1140: 48(fvec4) VectorTimesMatrix 1138 1139
+ Store 1137(r4) 1140
+ 1142: 76 Load 107(inFM0)
+ 1143: 48(fvec4) Load 105(inFV0)
+ 1144: 48(fvec4) MatrixTimesVector 1142 1143
+ Store 1141(r5) 1144
1146: 6(float) Load 103(inF0)
- 1147: 48(fvec4) VectorTimesScalar 1145 1146
- Store 1144(r2) 1147
- 1149: 48(fvec4) Load 105(inFV0)
- 1150: 48(fvec4) Load 106(inFV1)
- 1151: 6(float) Dot 1149 1150
- Store 1148(r3) 1151
- 1153: 48(fvec4) Load 105(inFV0)
- 1154: 76 Load 107(inFM0)
- 1155: 48(fvec4) VectorTimesMatrix 1153 1154
- Store 1152(r4) 1155
- 1157: 76 Load 107(inFM0)
- 1158: 48(fvec4) Load 105(inFV0)
- 1159: 48(fvec4) MatrixTimesVector 1157 1158
- Store 1156(r5) 1159
- 1161: 6(float) Load 103(inF0)
- 1162: 76 Load 107(inFM0)
- 1163: 76 MatrixTimesScalar 1162 1161
- Store 1160(r6) 1163
- 1165: 76 Load 107(inFM0)
- 1166: 6(float) Load 103(inF0)
- 1167: 76 MatrixTimesScalar 1165 1166
- Store 1164(r7) 1167
- 1169: 76 Load 108(inFM1)
- 1170: 76 Load 107(inFM0)
- 1171: 76 MatrixTimesMatrix 1169 1170
- Store 1168(r8) 1171
+ 1147: 76 Load 107(inFM0)
+ 1148: 76 MatrixTimesScalar 1147 1146
+ Store 1145(r6) 1148
+ 1150: 76 Load 107(inFM0)
+ 1151: 6(float) Load 103(inF0)
+ 1152: 76 MatrixTimesScalar 1150 1151
+ Store 1149(r7) 1152
+ 1154: 76 Load 108(inFM1)
+ 1155: 76 Load 107(inFM0)
+ 1156: 76 MatrixTimesMatrix 1154 1155
+ Store 1153(r8) 1156
Return
FunctionEnd
129(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;): 2 Function None 119
@@ -4149,90 +4107,90 @@ Shader version: 450
127(inFM3x4): 116(ptr) FunctionParameter
128(inFM2x4): 118(ptr) FunctionParameter
130: Label
- 1172(r00): 7(ptr) Variable Function
- 1176(r01): 25(ptr) Variable Function
- 1180(r02): 37(ptr) Variable Function
- 1184(r03): 25(ptr) Variable Function
- 1188(r04): 37(ptr) Variable Function
- 1192(r05): 7(ptr) Variable Function
- 1196(r06): 7(ptr) Variable Function
- 1200(r07): 37(ptr) Variable Function
- 1204(r08): 25(ptr) Variable Function
- 1208(r09): 25(ptr) Variable Function
- 1212(r10): 37(ptr) Variable Function
- 1216(r11): 112(ptr) Variable Function
- 1220(r12): 114(ptr) Variable Function
- 1224(r13): 61(ptr) Variable Function
- 1228(r14): 112(ptr) Variable Function
- 1232(r15): 118(ptr) Variable Function
- 1236(r16): 116(ptr) Variable Function
- 1173: 6(float) Load 121(inF1)
- 1174: 6(float) Load 120(inF0)
- 1175: 6(float) FMul 1173 1174
- Store 1172(r00) 1175
- 1177: 6(float) Load 120(inF0)
+ 1157(r00): 7(ptr) Variable Function
+ 1161(r01): 25(ptr) Variable Function
+ 1165(r02): 37(ptr) Variable Function
+ 1169(r03): 25(ptr) Variable Function
+ 1173(r04): 37(ptr) Variable Function
+ 1177(r05): 7(ptr) Variable Function
+ 1181(r06): 7(ptr) Variable Function
+ 1185(r07): 37(ptr) Variable Function
+ 1189(r08): 25(ptr) Variable Function
+ 1193(r09): 25(ptr) Variable Function
+ 1197(r10): 37(ptr) Variable Function
+ 1201(r11): 112(ptr) Variable Function
+ 1205(r12): 114(ptr) Variable Function
+ 1209(r13): 61(ptr) Variable Function
+ 1213(r14): 112(ptr) Variable Function
+ 1217(r15): 118(ptr) Variable Function
+ 1221(r16): 116(ptr) Variable Function
+ 1158: 6(float) Load 121(inF1)
+ 1159: 6(float) Load 120(inF0)
+ 1160: 6(float) FMul 1158 1159
+ Store 1157(r00) 1160
+ 1162: 6(float) Load 120(inF0)
+ 1163: 24(fvec2) Load 122(inFV2)
+ 1164: 24(fvec2) VectorTimesScalar 1163 1162
+ Store 1161(r01) 1164
+ 1166: 6(float) Load 120(inF0)
+ 1167: 36(fvec3) Load 123(inFV3)
+ 1168: 36(fvec3) VectorTimesScalar 1167 1166
+ Store 1165(r02) 1168
+ 1170: 24(fvec2) Load 122(inFV2)
+ 1171: 6(float) Load 120(inF0)
+ 1172: 24(fvec2) VectorTimesScalar 1170 1171
+ Store 1169(r03) 1172
+ 1174: 36(fvec3) Load 123(inFV3)
+ 1175: 6(float) Load 120(inF0)
+ 1176: 36(fvec3) VectorTimesScalar 1174 1175
+ Store 1173(r04) 1176
1178: 24(fvec2) Load 122(inFV2)
- 1179: 24(fvec2) VectorTimesScalar 1178 1177
- Store 1176(r01) 1179
- 1181: 6(float) Load 120(inF0)
+ 1179: 24(fvec2) Load 122(inFV2)
+ 1180: 6(float) Dot 1178 1179
+ Store 1177(r05) 1180
1182: 36(fvec3) Load 123(inFV3)
- 1183: 36(fvec3) VectorTimesScalar 1182 1181
- Store 1180(r02) 1183
- 1185: 24(fvec2) Load 122(inFV2)
- 1186: 6(float) Load 120(inF0)
- 1187: 24(fvec2) VectorTimesScalar 1185 1186
- Store 1184(r03) 1187
- 1189: 36(fvec3) Load 123(inFV3)
- 1190: 6(float) Load 120(inF0)
- 1191: 36(fvec3) VectorTimesScalar 1189 1190
- Store 1188(r04) 1191
- 1193: 24(fvec2) Load 122(inFV2)
- 1194: 24(fvec2) Load 122(inFV2)
- 1195: 6(float) Dot 1193 1194
- Store 1192(r05) 1195
- 1197: 36(fvec3) Load 123(inFV3)
- 1198: 36(fvec3) Load 123(inFV3)
- 1199: 6(float) Dot 1197 1198
- Store 1196(r06) 1199
- 1201: 111 Load 124(inFM2x3)
- 1202: 24(fvec2) Load 122(inFV2)
- 1203: 36(fvec3) MatrixTimesVector 1201 1202
- Store 1200(r07) 1203
- 1205: 113 Load 125(inFM3x2)
- 1206: 36(fvec3) Load 123(inFV3)
- 1207: 24(fvec2) MatrixTimesVector 1205 1206
- Store 1204(r08) 1207
- 1209: 36(fvec3) Load 123(inFV3)
- 1210: 111 Load 124(inFM2x3)
- 1211: 24(fvec2) VectorTimesMatrix 1209 1210
- Store 1208(r09) 1211
- 1213: 24(fvec2) Load 122(inFV2)
- 1214: 113 Load 125(inFM3x2)
- 1215: 36(fvec3) VectorTimesMatrix 1213 1214
- Store 1212(r10) 1215
- 1217: 6(float) Load 120(inF0)
- 1218: 111 Load 124(inFM2x3)
- 1219: 111 MatrixTimesScalar 1218 1217
- Store 1216(r11) 1219
- 1221: 6(float) Load 120(inF0)
- 1222: 113 Load 125(inFM3x2)
- 1223: 113 MatrixTimesScalar 1222 1221
- Store 1220(r12) 1223
- 1225: 113 Load 125(inFM3x2)
- 1226: 111 Load 124(inFM2x3)
- 1227: 60 MatrixTimesMatrix 1225 1226
- Store 1224(r13) 1227
- 1229: 68 Load 126(inFM3x3)
- 1230: 111 Load 124(inFM2x3)
- 1231: 111 MatrixTimesMatrix 1229 1230
- Store 1228(r14) 1231
- 1233: 115 Load 127(inFM3x4)
- 1234: 111 Load 124(inFM2x3)
- 1235: 117 MatrixTimesMatrix 1233 1234
- Store 1232(r15) 1235
- 1237: 117 Load 128(inFM2x4)
- 1238: 113 Load 125(inFM3x2)
- 1239: 115 MatrixTimesMatrix 1237 1238
- Store 1236(r16) 1239
+ 1183: 36(fvec3) Load 123(inFV3)
+ 1184: 6(float) Dot 1182 1183
+ Store 1181(r06) 1184
+ 1186: 111 Load 124(inFM2x3)
+ 1187: 24(fvec2) Load 122(inFV2)
+ 1188: 36(fvec3) MatrixTimesVector 1186 1187
+ Store 1185(r07) 1188
+ 1190: 113 Load 125(inFM3x2)
+ 1191: 36(fvec3) Load 123(inFV3)
+ 1192: 24(fvec2) MatrixTimesVector 1190 1191
+ Store 1189(r08) 1192
+ 1194: 36(fvec3) Load 123(inFV3)
+ 1195: 111 Load 124(inFM2x3)
+ 1196: 24(fvec2) VectorTimesMatrix 1194 1195
+ Store 1193(r09) 1196
+ 1198: 24(fvec2) Load 122(inFV2)
+ 1199: 113 Load 125(inFM3x2)
+ 1200: 36(fvec3) VectorTimesMatrix 1198 1199
+ Store 1197(r10) 1200
+ 1202: 6(float) Load 120(inF0)
+ 1203: 111 Load 124(inFM2x3)
+ 1204: 111 MatrixTimesScalar 1203 1202
+ Store 1201(r11) 1204
+ 1206: 6(float) Load 120(inF0)
+ 1207: 113 Load 125(inFM3x2)
+ 1208: 113 MatrixTimesScalar 1207 1206
+ Store 1205(r12) 1208
+ 1210: 113 Load 125(inFM3x2)
+ 1211: 111 Load 124(inFM2x3)
+ 1212: 60 MatrixTimesMatrix 1210 1211
+ Store 1209(r13) 1212
+ 1214: 68 Load 126(inFM3x3)
+ 1215: 111 Load 124(inFM2x3)
+ 1216: 111 MatrixTimesMatrix 1214 1215
+ Store 1213(r14) 1216
+ 1218: 115 Load 127(inFM3x4)
+ 1219: 111 Load 124(inFM2x3)
+ 1220: 117 MatrixTimesMatrix 1218 1219
+ Store 1217(r15) 1220
+ 1222: 117 Load 128(inFM2x4)
+ 1223: 113 Load 125(inFM3x2)
+ 1224: 115 MatrixTimesMatrix 1222 1223
+ Store 1221(r16) 1224
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.isfinite.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.isfinite.frag.out
new file mode 100644
index 00000000000..9968e6b64ea
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.isfinite.frag.out
@@ -0,0 +1,293 @@
+hlsl.isfinite.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: test1(f1; ( temp bool)
+0:7 Function Parameters:
+0:7 'v' ( in float)
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 logical-and ( temp bool)
+0:8 Negate conditional ( temp bool)
+0:8 isnan ( temp bool)
+0:8 'v' ( in float)
+0:8 Sequence
+0:8 move second child to first child ( temp float)
+0:8 '@finitetmp' ( temp float)
+0:8 'v' ( in float)
+0:8 logical-and ( temp bool)
+0:8 Negate conditional ( temp bool)
+0:8 isnan ( temp bool)
+0:8 '@finitetmp' ( temp float)
+0:8 Negate conditional ( temp bool)
+0:8 isinf ( temp bool)
+0:8 '@finitetmp' ( temp float)
+0:12 Function Definition: @main( ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp float)
+0:13 '@finitetmp' ( temp float)
+0:13 f: direct index for structure ( uniform float)
+0:13 'anon@0' (layout( row_major std140) uniform block{ uniform float f, uniform 2-component vector of float f2, uniform 3-component vector of float f3})
+0:13 Constant:
+0:13 0 (const uint)
+0:13 logical-and ( temp bool)
+0:13 Negate conditional ( temp bool)
+0:13 isnan ( temp bool)
+0:13 '@finitetmp' ( temp float)
+0:13 Negate conditional ( temp bool)
+0:13 isinf ( temp bool)
+0:13 '@finitetmp' ( temp float)
+0:14 Sequence
+0:14 move second child to first child ( temp 2-component vector of float)
+0:14 '@finitetmp' ( temp 2-component vector of float)
+0:14 f2: direct index for structure ( uniform 2-component vector of float)
+0:14 'anon@0' (layout( row_major std140) uniform block{ uniform float f, uniform 2-component vector of float f2, uniform 3-component vector of float f3})
+0:14 Constant:
+0:14 1 (const uint)
+0:14 logical-and ( temp 2-component vector of bool)
+0:14 Negate conditional ( temp 2-component vector of bool)
+0:14 isnan ( temp 2-component vector of bool)
+0:14 '@finitetmp' ( temp 2-component vector of float)
+0:14 Negate conditional ( temp 2-component vector of bool)
+0:14 isinf ( temp 2-component vector of bool)
+0:14 '@finitetmp' ( temp 2-component vector of float)
+0:15 Sequence
+0:15 move second child to first child ( temp 3-component vector of float)
+0:15 '@finitetmp' ( temp 3-component vector of float)
+0:15 f3: direct index for structure ( uniform 3-component vector of float)
+0:15 'anon@0' (layout( row_major std140) uniform block{ uniform float f, uniform 2-component vector of float f2, uniform 3-component vector of float f3})
+0:15 Constant:
+0:15 2 (const uint)
+0:15 logical-and ( temp 3-component vector of bool)
+0:15 Negate conditional ( temp 3-component vector of bool)
+0:15 isnan ( temp 3-component vector of bool)
+0:15 '@finitetmp' ( temp 3-component vector of float)
+0:15 Negate conditional ( temp 3-component vector of bool)
+0:15 isinf ( temp 3-component vector of bool)
+0:15 '@finitetmp' ( temp 3-component vector of float)
+0:17 Branch: Return with expression
+0:17 Constant:
+0:17 0.000000
+0:17 0.000000
+0:17 0.000000
+0:17 0.000000
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:12 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float f, uniform 2-component vector of float f2, uniform 3-component vector of float f3})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: test1(f1; ( temp bool)
+0:7 Function Parameters:
+0:7 'v' ( in float)
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 logical-and ( temp bool)
+0:8 Negate conditional ( temp bool)
+0:8 isnan ( temp bool)
+0:8 'v' ( in float)
+0:8 Sequence
+0:8 move second child to first child ( temp float)
+0:8 '@finitetmp' ( temp float)
+0:8 'v' ( in float)
+0:8 logical-and ( temp bool)
+0:8 Negate conditional ( temp bool)
+0:8 isnan ( temp bool)
+0:8 '@finitetmp' ( temp float)
+0:8 Negate conditional ( temp bool)
+0:8 isinf ( temp bool)
+0:8 '@finitetmp' ( temp float)
+0:12 Function Definition: @main( ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp float)
+0:13 '@finitetmp' ( temp float)
+0:13 f: direct index for structure ( uniform float)
+0:13 'anon@0' (layout( row_major std140) uniform block{ uniform float f, uniform 2-component vector of float f2, uniform 3-component vector of float f3})
+0:13 Constant:
+0:13 0 (const uint)
+0:13 logical-and ( temp bool)
+0:13 Negate conditional ( temp bool)
+0:13 isnan ( temp bool)
+0:13 '@finitetmp' ( temp float)
+0:13 Negate conditional ( temp bool)
+0:13 isinf ( temp bool)
+0:13 '@finitetmp' ( temp float)
+0:14 Sequence
+0:14 move second child to first child ( temp 2-component vector of float)
+0:14 '@finitetmp' ( temp 2-component vector of float)
+0:14 f2: direct index for structure ( uniform 2-component vector of float)
+0:14 'anon@0' (layout( row_major std140) uniform block{ uniform float f, uniform 2-component vector of float f2, uniform 3-component vector of float f3})
+0:14 Constant:
+0:14 1 (const uint)
+0:14 logical-and ( temp 2-component vector of bool)
+0:14 Negate conditional ( temp 2-component vector of bool)
+0:14 isnan ( temp 2-component vector of bool)
+0:14 '@finitetmp' ( temp 2-component vector of float)
+0:14 Negate conditional ( temp 2-component vector of bool)
+0:14 isinf ( temp 2-component vector of bool)
+0:14 '@finitetmp' ( temp 2-component vector of float)
+0:15 Sequence
+0:15 move second child to first child ( temp 3-component vector of float)
+0:15 '@finitetmp' ( temp 3-component vector of float)
+0:15 f3: direct index for structure ( uniform 3-component vector of float)
+0:15 'anon@0' (layout( row_major std140) uniform block{ uniform float f, uniform 2-component vector of float f2, uniform 3-component vector of float f3})
+0:15 Constant:
+0:15 2 (const uint)
+0:15 logical-and ( temp 3-component vector of bool)
+0:15 Negate conditional ( temp 3-component vector of bool)
+0:15 isnan ( temp 3-component vector of bool)
+0:15 '@finitetmp' ( temp 3-component vector of float)
+0:15 Negate conditional ( temp 3-component vector of bool)
+0:15 isinf ( temp 3-component vector of bool)
+0:15 '@finitetmp' ( temp 3-component vector of float)
+0:17 Branch: Return with expression
+0:17 Constant:
+0:17 0.000000
+0:17 0.000000
+0:17 0.000000
+0:17 0.000000
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:12 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform float f, uniform 2-component vector of float f2, uniform 3-component vector of float f3})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 85
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 83
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "test1(f1;"
+ Name 10 "v"
+ Name 15 "@main("
+ Name 20 "@finitetmp"
+ Name 32 "@finitetmp"
+ Name 35 "$Global"
+ MemberName 35($Global) 0 "f"
+ MemberName 35($Global) 1 "f2"
+ MemberName 35($Global) 2 "f3"
+ Name 37 ""
+ Name 51 "@finitetmp"
+ Name 65 "@finitetmp"
+ Name 83 "@entryPointOutput"
+ MemberDecorate 35($Global) 0 Offset 0
+ MemberDecorate 35($Global) 1 Offset 8
+ MemberDecorate 35($Global) 2 Offset 16
+ Decorate 35($Global) Block
+ Decorate 37 DescriptorSet 0
+ Decorate 83(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypePointer Function 6(float)
+ 8: TypeBool
+ 9: TypeFunction 8(bool) 7(ptr)
+ 13: TypeVector 6(float) 4
+ 14: TypeFunction 13(fvec4)
+ 33: TypeVector 6(float) 2
+ 34: TypeVector 6(float) 3
+ 35($Global): TypeStruct 6(float) 33(fvec2) 34(fvec3)
+ 36: TypePointer Uniform 35($Global)
+ 37: 36(ptr) Variable Uniform
+ 38: TypeInt 32 1
+ 39: 38(int) Constant 0
+ 40: TypePointer Uniform 6(float)
+ 50: TypePointer Function 33(fvec2)
+ 52: 38(int) Constant 1
+ 53: TypePointer Uniform 33(fvec2)
+ 57: TypeVector 8(bool) 2
+ 64: TypePointer Function 34(fvec3)
+ 66: 38(int) Constant 2
+ 67: TypePointer Uniform 34(fvec3)
+ 71: TypeVector 8(bool) 3
+ 78: 6(float) Constant 0
+ 79: 13(fvec4) ConstantComposite 78 78 78 78
+ 82: TypePointer Output 13(fvec4)
+83(@entryPointOutput): 82(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 84: 13(fvec4) FunctionCall 15(@main()
+ Store 83(@entryPointOutput) 84
+ Return
+ FunctionEnd
+ 11(test1(f1;): 8(bool) Function None 9
+ 10(v): 7(ptr) FunctionParameter
+ 12: Label
+ 20(@finitetmp): 7(ptr) Variable Function
+ 17: 6(float) Load 10(v)
+ 18: 8(bool) IsNan 17
+ 19: 8(bool) LogicalNot 18
+ 21: 6(float) Load 10(v)
+ Store 20(@finitetmp) 21
+ 22: 6(float) Load 20(@finitetmp)
+ 23: 8(bool) IsNan 22
+ 24: 8(bool) LogicalNot 23
+ 25: 6(float) Load 20(@finitetmp)
+ 26: 8(bool) IsInf 25
+ 27: 8(bool) LogicalNot 26
+ 28: 8(bool) LogicalAnd 24 27
+ 29: 8(bool) LogicalAnd 19 28
+ ReturnValue 29
+ FunctionEnd
+ 15(@main(): 13(fvec4) Function None 14
+ 16: Label
+ 32(@finitetmp): 7(ptr) Variable Function
+ 51(@finitetmp): 50(ptr) Variable Function
+ 65(@finitetmp): 64(ptr) Variable Function
+ 41: 40(ptr) AccessChain 37 39
+ 42: 6(float) Load 41
+ Store 32(@finitetmp) 42
+ 43: 6(float) Load 32(@finitetmp)
+ 44: 8(bool) IsNan 43
+ 45: 8(bool) LogicalNot 44
+ 46: 6(float) Load 32(@finitetmp)
+ 47: 8(bool) IsInf 46
+ 48: 8(bool) LogicalNot 47
+ 49: 8(bool) LogicalAnd 45 48
+ 54: 53(ptr) AccessChain 37 52
+ 55: 33(fvec2) Load 54
+ Store 51(@finitetmp) 55
+ 56: 33(fvec2) Load 51(@finitetmp)
+ 58: 57(bvec2) IsNan 56
+ 59: 57(bvec2) LogicalNot 58
+ 60: 33(fvec2) Load 51(@finitetmp)
+ 61: 57(bvec2) IsInf 60
+ 62: 57(bvec2) LogicalNot 61
+ 63: 57(bvec2) LogicalAnd 59 62
+ 68: 67(ptr) AccessChain 37 66
+ 69: 34(fvec3) Load 68
+ Store 65(@finitetmp) 69
+ 70: 34(fvec3) Load 65(@finitetmp)
+ 72: 71(bvec3) IsNan 70
+ 73: 71(bvec3) LogicalNot 72
+ 74: 34(fvec3) Load 65(@finitetmp)
+ 75: 71(bvec3) IsInf 74
+ 76: 71(bvec3) LogicalNot 75
+ 77: 71(bvec3) LogicalAnd 73 76
+ ReturnValue 79
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out
index 6a5eceb00ae..de614d2815b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out
@@ -1,5 +1,5 @@
hlsl.layout.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:16 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -12,30 +12,30 @@ gl_FragCoord origin is upper left
0:17 add ( temp 4-component vector of float)
0:17 'input' ( in 4-component vector of float)
0:17 v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:17 'anon@0' (layout( set=3 binding=5 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
+0:17 'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:17 Constant:
0:17 0 (const uint)
0:17 v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
-0:17 'anon@1' (layout( row_major std430 push_constant) buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
+0:17 'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:17 Constant:
0:17 0 (const uint)
0:17 v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:17 'anon@2' (layout( set=4 binding=7 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
+0:17 'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:17 Constant:
0:17 0 (const uint)
0:? Linker Objects
-0:? 'anon@0' (layout( set=3 binding=5 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
-0:? 'anon@1' (layout( row_major std430 push_constant) buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
+0:? 'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
+0:? 'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:? 'specConst' ( specialization-constant const int)
0:? 10 (const int)
-0:? 'anon@2' (layout( set=4 binding=7 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
+0:? 'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:16 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -48,26 +48,26 @@ gl_FragCoord origin is upper left
0:17 add ( temp 4-component vector of float)
0:17 'input' ( in 4-component vector of float)
0:17 v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:17 'anon@0' (layout( set=3 binding=5 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
+0:17 'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:17 Constant:
0:17 0 (const uint)
0:17 v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
-0:17 'anon@1' (layout( row_major std430 push_constant) buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
+0:17 'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:17 Constant:
0:17 0 (const uint)
0:17 v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:17 'anon@2' (layout( set=4 binding=7 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
+0:17 'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:17 Constant:
0:17 0 (const uint)
0:? Linker Objects
-0:? 'anon@0' (layout( set=3 binding=5 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
-0:? 'anon@1' (layout( row_major std430 push_constant) buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
+0:? 'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
+0:? 'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:? 'specConst' ( specialization-constant const int)
0:? 10 (const int)
-0:? 'anon@2' (layout( set=4 binding=7 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
+0:? 'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 39
Capability Shader
@@ -75,6 +75,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "PixelShaderFunction(vf4;"
Name 10 "input"
@@ -88,12 +89,15 @@ gl_FragCoord origin is upper left
MemberName 30(tbufName2) 0 "v1PostLayout"
Name 32 ""
Name 38 "specConst"
+ MemberDecorate 14(tbufName) 0 NonWritable
MemberDecorate 14(tbufName) 0 Offset 16
Decorate 14(tbufName) BufferBlock
Decorate 16 DescriptorSet 3
Decorate 16 Binding 5
+ MemberDecorate 23(tbufName2) 0 NonWritable
MemberDecorate 23(tbufName2) 0 Offset 0
Decorate 23(tbufName2) BufferBlock
+ MemberDecorate 30(tbufName2) 0 NonWritable
MemberDecorate 30(tbufName2) 0 Offset 16
Decorate 30(tbufName2) BufferBlock
Decorate 32 DescriptorSet 4
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index f436f881933..634b6e87fdc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.2dms.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -152,13 +152,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -172,14 +172,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2dmsi4a' ( uniform itexture2DMSArray)
0:? 'g_tTex2dmsu4a' ( uniform utexture2DMSArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -332,13 +332,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -352,20 +352,20 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2dmsi4a' ( uniform itexture2DMSArray)
0:? 'g_tTex2dmsu4a' ( uniform utexture2DMSArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 130
Capability Shader
Capability ImageGatherExtended
- Capability ImageMSArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 120 124
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -389,8 +389,8 @@ gl_FragCoord origin is upper left
Name 82 "g_tTex2dmsu4a"
Name 106 "psout"
Name 117 "flattenTemp"
- Name 120 "Color"
- Name 124 "Depth"
+ Name 120 "@entryPointOutput.Color"
+ Name 124 "@entryPointOutput.Depth"
Name 129 "g_sSamp"
Decorate 14(g_tTex2dmsf4) DescriptorSet 0
MemberDecorate 20($Global) 0 Offset 0
@@ -408,8 +408,8 @@ gl_FragCoord origin is upper left
Decorate 66(g_tTex2dmsf4a) DescriptorSet 0
Decorate 75(g_tTex2dmsi4a) DescriptorSet 0
Decorate 82(g_tTex2dmsu4a) DescriptorSet 0
- Decorate 120(Color) Location 0
- Decorate 124(Depth) BuiltIn FragDepth
+ Decorate 120(@entryPointOutput.Color) Location 0
+ Decorate 124(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 129(g_sSamp) DescriptorSet 0
Decorate 129(g_sSamp) Binding 0
2: TypeVoid
@@ -458,9 +458,9 @@ gl_FragCoord origin is upper left
110: TypePointer Function 7(fvec4)
112: TypePointer Function 6(float)
119: TypePointer Output 7(fvec4)
- 120(Color): 119(ptr) Variable Output
+120(@entryPointOutput.Color): 119(ptr) Variable Output
123: TypePointer Output 6(float)
- 124(Depth): 123(ptr) Variable Output
+124(@entryPointOutput.Depth): 123(ptr) Variable Output
127: TypeSampler
128: TypePointer UniformConstant 127
129(g_sSamp): 128(ptr) Variable UniformConstant
@@ -471,10 +471,10 @@ gl_FragCoord origin is upper left
Store 117(flattenTemp) 118
121: 110(ptr) AccessChain 117(flattenTemp) 107
122: 7(fvec4) Load 121
- Store 120(Color) 122
+ Store 120(@entryPointOutput.Color) 122
125: 112(ptr) AccessChain 117(flattenTemp) 23
126: 6(float) Load 125
- Store 124(Depth) 126
+ Store 124(@entryPointOutput.Depth) 126
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out
index 9430e75d914..09c05d80df5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -152,13 +152,13 @@ gl_FragCoord origin is upper left
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:48 Color: direct index for structure ( temp 4-component vector of float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
0:48 0 (const int)
0:48 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:48 Depth: direct index for structure ( temp float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
@@ -187,14 +187,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -347,13 +347,13 @@ gl_FragCoord origin is upper left
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:48 Color: direct index for structure ( temp 4-component vector of float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
0:48 0 (const int)
0:48 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:48 Depth: direct index for structure ( temp float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
@@ -382,11 +382,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 159
Capability Shader
@@ -396,6 +396,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 104 108
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -419,8 +420,8 @@ gl_FragCoord origin is upper left
Name 80 "g_tTex2du4a"
Name 89 "psout"
Name 101 "flattenTemp"
- Name 104 "Color"
- Name 108 "Depth"
+ Name 104 "@entryPointOutput.Color"
+ Name 108 "@entryPointOutput.Depth"
Name 113 "g_sSamp"
Name 116 "g_tTex1df4"
Name 119 "g_tTex1di4"
@@ -453,8 +454,8 @@ gl_FragCoord origin is upper left
Decorate 57(g_tTex2df4a) DescriptorSet 0
Decorate 70(g_tTex2di4a) DescriptorSet 0
Decorate 80(g_tTex2du4a) DescriptorSet 0
- Decorate 104(Color) Location 0
- Decorate 108(Depth) BuiltIn FragDepth
+ Decorate 104(@entryPointOutput.Color) Location 0
+ Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 113(g_sSamp) DescriptorSet 0
Decorate 113(g_sSamp) Binding 0
Decorate 116(g_tTex1df4) DescriptorSet 0
@@ -521,9 +522,9 @@ gl_FragCoord origin is upper left
95: 16(int) Constant 1
96: TypePointer Function 6(float)
103: TypePointer Output 7(fvec4)
- 104(Color): 103(ptr) Variable Output
+104(@entryPointOutput.Color): 103(ptr) Variable Output
107: TypePointer Output 6(float)
- 108(Depth): 107(ptr) Variable Output
+108(@entryPointOutput.Depth): 107(ptr) Variable Output
111: TypeSampler
112: TypePointer UniformConstant 111
113(g_sSamp): 112(ptr) Variable UniformConstant
@@ -579,10 +580,10 @@ gl_FragCoord origin is upper left
Store 101(flattenTemp) 102
105: 93(ptr) AccessChain 101(flattenTemp) 90
106: 7(fvec4) Load 105
- Store 104(Color) 106
+ Store 104(@entryPointOutput.Color) 106
109: 96(ptr) AccessChain 101(flattenTemp) 95
110: 6(float) Load 109
- Store 108(Depth) 110
+ Store 108(@entryPointOutput.Depth) 110
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out
index 6a976f0910f..144d1a87588 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.basic.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -203,13 +203,13 @@ gl_FragCoord origin is upper left
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:48 Color: direct index for structure ( temp 4-component vector of float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
0:48 0 (const int)
0:48 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:48 Depth: direct index for structure ( temp float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
@@ -238,14 +238,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -449,13 +449,13 @@ gl_FragCoord origin is upper left
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:48 Color: direct index for structure ( temp 4-component vector of float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
0:48 0 (const int)
0:48 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:48 Depth: direct index for structure ( temp float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
@@ -484,11 +484,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 179
Capability Shader
@@ -498,6 +498,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 133 137
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -524,8 +525,8 @@ gl_FragCoord origin is upper left
Name 110 "g_tTex3du4"
Name 119 "psout"
Name 130 "flattenTemp"
- Name 133 "Color"
- Name 137 "Depth"
+ Name 133 "@entryPointOutput.Color"
+ Name 137 "@entryPointOutput.Depth"
Name 142 "g_sSamp"
Name 145 "g_tTexcdf4"
Name 148 "g_tTexcdi4"
@@ -559,8 +560,8 @@ gl_FragCoord origin is upper left
Decorate 87(g_tTex3df4) DescriptorSet 0
Decorate 100(g_tTex3di4) DescriptorSet 0
Decorate 110(g_tTex3du4) DescriptorSet 0
- Decorate 133(Color) Location 0
- Decorate 137(Depth) BuiltIn FragDepth
+ Decorate 133(@entryPointOutput.Color) Location 0
+ Decorate 137(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 142(g_sSamp) DescriptorSet 0
Decorate 142(g_sSamp) Binding 0
Decorate 145(g_tTexcdf4) DescriptorSet 0
@@ -634,9 +635,9 @@ gl_FragCoord origin is upper left
123: TypePointer Function 7(fvec4)
125: TypePointer Function 6(float)
132: TypePointer Output 7(fvec4)
- 133(Color): 132(ptr) Variable Output
+133(@entryPointOutput.Color): 132(ptr) Variable Output
136: TypePointer Output 6(float)
- 137(Depth): 136(ptr) Variable Output
+137(@entryPointOutput.Depth): 136(ptr) Variable Output
140: TypeSampler
141: TypePointer UniformConstant 140
142(g_sSamp): 141(ptr) Variable UniformConstant
@@ -683,10 +684,10 @@ gl_FragCoord origin is upper left
Store 130(flattenTemp) 131
134: 123(ptr) AccessChain 130(flattenTemp) 120
135: 7(fvec4) Load 134
- Store 133(Color) 135
+ Store 133(@entryPointOutput.Color) 135
138: 125(ptr) AccessChain 130(flattenTemp) 23
139: 6(float) Load 138
- Store 137(Depth) 139
+ Store 137(@entryPointOutput.Depth) 139
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out
index a41675c10b0..e8bcd66b2ba 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -1,5 +1,5 @@
hlsl.load.basic.dx10.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:47 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:47 Function Parameters:
@@ -192,7 +192,7 @@ Shader version: 450
0:? Sequence
0:47 Sequence
0:47 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:47 Pos: direct index for structure ( temp 4-component vector of float)
0:47 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:47 Constant:
@@ -221,13 +221,13 @@ Shader version: 450
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:47 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:47 Function Parameters:
@@ -420,7 +420,7 @@ Shader version: 450
0:? Sequence
0:47 Sequence
0:47 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:47 Pos: direct index for structure ( temp 4-component vector of float)
0:47 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:47 Constant:
@@ -449,18 +449,19 @@ Shader version: 450
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 174
+// Generated by (magic number): 80002
+// Id's are bound by 171
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 129 173
+ EntryPoint Vertex 4 "main" 129
+ Source HLSL 500
Name 4 "main"
Name 8 "VS_OUTPUT"
MemberName 8(VS_OUTPUT) 0 "Pos"
@@ -485,7 +486,7 @@ Shader version: 450
Name 100 "g_tTex3di4"
Name 110 "g_tTex3du4"
Name 119 "vsout"
- Name 129 "@entryPointOutput_Pos"
+ Name 129 "@entryPointOutput.Pos"
Name 134 "g_sSamp"
Name 137 "g_tTexcdf4"
Name 140 "g_tTexcdi4"
@@ -499,8 +500,6 @@ Shader version: 450
Name 164 "g_tTexcdf4a"
Name 167 "g_tTexcdi4a"
Name 170 "g_tTexcdu4a"
- Name 171 "VS_OUTPUT"
- Name 173 "@entryPointOutput"
Decorate 14(g_tTex1df4) DescriptorSet 0
Decorate 14(g_tTex1df4) Binding 0
MemberDecorate 20($Global) 0 Offset 0
@@ -521,7 +520,7 @@ Shader version: 450
Decorate 87(g_tTex3df4) DescriptorSet 0
Decorate 100(g_tTex3di4) DescriptorSet 0
Decorate 110(g_tTex3du4) DescriptorSet 0
- Decorate 129(@entryPointOutput_Pos) BuiltIn Position
+ Decorate 129(@entryPointOutput.Pos) BuiltIn Position
Decorate 134(g_sSamp) DescriptorSet 0
Decorate 134(g_sSamp) Binding 0
Decorate 137(g_tTexcdf4) DescriptorSet 0
@@ -536,7 +535,6 @@ Shader version: 450
Decorate 164(g_tTexcdf4a) DescriptorSet 0
Decorate 167(g_tTexcdi4a) DescriptorSet 0
Decorate 170(g_tTexcdu4a) DescriptorSet 0
- Decorate 173(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -595,7 +593,7 @@ Shader version: 450
122: 7(fvec4) ConstantComposite 121 121 121 121
123: TypePointer Function 7(fvec4)
128: TypePointer Output 7(fvec4)
-129(@entryPointOutput_Pos): 128(ptr) Variable Output
+129(@entryPointOutput.Pos): 128(ptr) Variable Output
132: TypeSampler
133: TypePointer UniformConstant 132
134(g_sSamp): 133(ptr) Variable UniformConstant
@@ -635,14 +633,11 @@ Shader version: 450
168: TypeImage 24(int) Cube array sampled format:Unknown
169: TypePointer UniformConstant 168
170(g_tTexcdu4a): 169(ptr) Variable UniformConstant
- 171(VS_OUTPUT): TypeStruct
- 172: TypePointer Output 171(VS_OUTPUT)
-173(@entryPointOutput): 172(ptr) Variable Output
4(main): 2 Function None 3
5: Label
130:8(VS_OUTPUT) FunctionCall 10(@main()
131: 7(fvec4) CompositeExtract 130 0
- Store 129(@entryPointOutput_Pos) 131
+ Store 129(@entryPointOutput.Pos) 131
Return
FunctionEnd
10(@main():8(VS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index 134a7fdbca3..9f873af6e4e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.buffer.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -8,8 +8,8 @@ gl_FragCoord origin is upper left
0:28 Sequence
0:28 move second child to first child ( temp 4-component vector of float)
0:28 'r00' ( temp 4-component vector of float)
-0:28 imageLoad ( temp 4-component vector of float)
-0:28 'g_tTexbf4' (layout( rgba32f) readonly uniform imageBuffer)
+0:28 textureFetch ( temp 4-component vector of float)
+0:28 'g_tTexbf4' (layout( rgba32f) uniform textureBuffer)
0:28 c1: direct index for structure ( uniform int)
0:28 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:28 Constant:
@@ -17,8 +17,8 @@ gl_FragCoord origin is upper left
0:29 Sequence
0:29 move second child to first child ( temp 4-component vector of int)
0:29 'r01' ( temp 4-component vector of int)
-0:29 imageLoad ( temp 4-component vector of int)
-0:29 'g_tTexbi4' (layout( rgba32i) readonly uniform iimageBuffer)
+0:29 textureFetch ( temp 4-component vector of int)
+0:29 'g_tTexbi4' (layout( rgba32i) uniform itextureBuffer)
0:29 c1: direct index for structure ( uniform int)
0:29 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:29 Constant:
@@ -26,8 +26,8 @@ gl_FragCoord origin is upper left
0:30 Sequence
0:30 move second child to first child ( temp 4-component vector of uint)
0:30 'r02' ( temp 4-component vector of uint)
-0:30 imageLoad ( temp 4-component vector of uint)
-0:30 'g_tTexbu4' (layout( rgba32ui) readonly uniform uimageBuffer)
+0:30 textureFetch ( temp 4-component vector of uint)
+0:30 'g_tTexbu4' (layout( rgba32ui) uniform utextureBuffer)
0:30 c1: direct index for structure ( uniform int)
0:30 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:30 Constant:
@@ -59,31 +59,31 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 1 (const int)
0:? Linker Objects
-0:? 'g_tTexbf4_test' (layout( binding=0 rgba32f) readonly uniform imageBuffer)
-0:? 'g_tTexbf4' (layout( rgba32f) readonly uniform imageBuffer)
-0:? 'g_tTexbi4' (layout( rgba32i) readonly uniform iimageBuffer)
-0:? 'g_tTexbu4' (layout( rgba32ui) readonly uniform uimageBuffer)
+0:? 'g_tTexbf4_test' (layout( binding=0 rgba32f) uniform textureBuffer)
+0:? 'g_tTexbf4' (layout( rgba32f) uniform textureBuffer)
+0:? 'g_tTexbi4' (layout( rgba32i) uniform itextureBuffer)
+0:? 'g_tTexbu4' (layout( rgba32ui) uniform utextureBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -92,8 +92,8 @@ gl_FragCoord origin is upper left
0:28 Sequence
0:28 move second child to first child ( temp 4-component vector of float)
0:28 'r00' ( temp 4-component vector of float)
-0:28 imageLoad ( temp 4-component vector of float)
-0:28 'g_tTexbf4' (layout( rgba32f) readonly uniform imageBuffer)
+0:28 textureFetch ( temp 4-component vector of float)
+0:28 'g_tTexbf4' (layout( rgba32f) uniform textureBuffer)
0:28 c1: direct index for structure ( uniform int)
0:28 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:28 Constant:
@@ -101,8 +101,8 @@ gl_FragCoord origin is upper left
0:29 Sequence
0:29 move second child to first child ( temp 4-component vector of int)
0:29 'r01' ( temp 4-component vector of int)
-0:29 imageLoad ( temp 4-component vector of int)
-0:29 'g_tTexbi4' (layout( rgba32i) readonly uniform iimageBuffer)
+0:29 textureFetch ( temp 4-component vector of int)
+0:29 'g_tTexbi4' (layout( rgba32i) uniform itextureBuffer)
0:29 c1: direct index for structure ( uniform int)
0:29 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:29 Constant:
@@ -110,8 +110,8 @@ gl_FragCoord origin is upper left
0:30 Sequence
0:30 move second child to first child ( temp 4-component vector of uint)
0:30 'r02' ( temp 4-component vector of uint)
-0:30 imageLoad ( temp 4-component vector of uint)
-0:30 'g_tTexbu4' (layout( rgba32ui) readonly uniform uimageBuffer)
+0:30 textureFetch ( temp 4-component vector of uint)
+0:30 'g_tTexbu4' (layout( rgba32ui) uniform utextureBuffer)
0:30 c1: direct index for structure ( uniform int)
0:30 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:30 Constant:
@@ -143,28 +143,28 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 1 (const int)
0:? Linker Objects
-0:? 'g_tTexbf4_test' (layout( binding=0 rgba32f) readonly uniform imageBuffer)
-0:? 'g_tTexbf4' (layout( rgba32f) readonly uniform imageBuffer)
-0:? 'g_tTexbi4' (layout( rgba32i) readonly uniform iimageBuffer)
-0:? 'g_tTexbu4' (layout( rgba32ui) readonly uniform uimageBuffer)
+0:? 'g_tTexbf4_test' (layout( binding=0 rgba32f) uniform textureBuffer)
+0:? 'g_tTexbf4' (layout( rgba32f) uniform textureBuffer)
+0:? 'g_tTexbi4' (layout( rgba32i) uniform itextureBuffer)
+0:? 'g_tTexbu4' (layout( rgba32ui) uniform utextureBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 72
Capability Shader
@@ -173,6 +173,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 64 68
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -196,11 +197,10 @@ gl_FragCoord origin is upper left
Name 45 "g_tTexbu4"
Name 51 "psout"
Name 61 "flattenTemp"
- Name 64 "Color"
- Name 68 "Depth"
+ Name 64 "@entryPointOutput.Color"
+ Name 68 "@entryPointOutput.Depth"
Name 71 "g_tTexbf4_test"
Decorate 16(g_tTexbf4) DescriptorSet 0
- Decorate 16(g_tTexbf4) NonWritable
MemberDecorate 22($Global) 0 Offset 0
MemberDecorate 22($Global) 1 Offset 8
MemberDecorate 22($Global) 2 Offset 16
@@ -212,14 +212,11 @@ gl_FragCoord origin is upper left
Decorate 22($Global) Block
Decorate 24 DescriptorSet 0
Decorate 34(g_tTexbi4) DescriptorSet 0
- Decorate 34(g_tTexbi4) NonWritable
Decorate 45(g_tTexbu4) DescriptorSet 0
- Decorate 45(g_tTexbu4) NonWritable
- Decorate 64(Color) Location 0
- Decorate 68(Depth) BuiltIn FragDepth
+ Decorate 64(@entryPointOutput.Color) Location 0
+ Decorate 68(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 71(g_tTexbf4_test) DescriptorSet 0
Decorate 71(g_tTexbf4_test) Binding 0
- Decorate 71(g_tTexbf4_test) NonWritable
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -227,7 +224,7 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 7(fvec4)
- 14: TypeImage 6(float) Buffer nonsampled format:Rgba32f
+ 14: TypeImage 6(float) Buffer sampled format:Rgba32f
15: TypePointer UniformConstant 14
16(g_tTexbf4): 15(ptr) Variable UniformConstant
18: TypeInt 32 1
@@ -240,13 +237,13 @@ gl_FragCoord origin is upper left
25: 18(int) Constant 0
26: TypePointer Uniform 18(int)
30: TypePointer Function 21(ivec4)
- 32: TypeImage 18(int) Buffer nonsampled format:Rgba32i
+ 32: TypeImage 18(int) Buffer sampled format:Rgba32i
33: TypePointer UniformConstant 32
34(g_tTexbi4): 33(ptr) Variable UniformConstant
39: TypeInt 32 0
40: TypeVector 39(int) 4
41: TypePointer Function 40(ivec4)
- 43: TypeImage 39(int) Buffer nonsampled format:Rgba32ui
+ 43: TypeImage 39(int) Buffer sampled format:Rgba32ui
44: TypePointer UniformConstant 43
45(g_tTexbu4): 44(ptr) Variable UniformConstant
50: TypePointer Function 8(PS_OUTPUT)
@@ -255,9 +252,9 @@ gl_FragCoord origin is upper left
55: 18(int) Constant 1
56: TypePointer Function 6(float)
63: TypePointer Output 7(fvec4)
- 64(Color): 63(ptr) Variable Output
+64(@entryPointOutput.Color): 63(ptr) Variable Output
67: TypePointer Output 6(float)
- 68(Depth): 67(ptr) Variable Output
+68(@entryPointOutput.Depth): 67(ptr) Variable Output
71(g_tTexbf4_test): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -266,10 +263,10 @@ gl_FragCoord origin is upper left
Store 61(flattenTemp) 62
65: 12(ptr) AccessChain 61(flattenTemp) 25
66: 7(fvec4) Load 65
- Store 64(Color) 66
+ Store 64(@entryPointOutput.Color) 66
69: 56(ptr) AccessChain 61(flattenTemp) 55
70: 6(float) Load 69
- Store 68(Depth) 70
+ Store 68(@entryPointOutput.Depth) 70
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
@@ -281,17 +278,17 @@ gl_FragCoord origin is upper left
17: 14 Load 16(g_tTexbf4)
27: 26(ptr) AccessChain 24 25
28: 18(int) Load 27
- 29: 7(fvec4) ImageRead 17 28
+ 29: 7(fvec4) ImageFetch 17 28
Store 13(r00) 29
35: 32 Load 34(g_tTexbi4)
36: 26(ptr) AccessChain 24 25
37: 18(int) Load 36
- 38: 21(ivec4) ImageRead 35 37
+ 38: 21(ivec4) ImageFetch 35 37
Store 31(r01) 38
46: 43 Load 45(g_tTexbu4)
47: 26(ptr) AccessChain 24 25
48: 18(int) Load 47
- 49: 40(ivec4) ImageRead 46 48
+ 49: 40(ivec4) ImageFetch 46 48
Store 42(r02) 49
54: 12(ptr) AccessChain 51(psout) 25
Store 54 53
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index 6ba3d993e40..085778dea64 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.buffer.float.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -9,8 +9,8 @@ gl_FragCoord origin is upper left
0:28 move second child to first child ( temp float)
0:28 'r00' ( temp float)
0:28 Construct float ( temp float)
-0:? imageLoad ( temp 4-component vector of float)
-0:28 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? textureFetch ( temp 4-component vector of float)
+0:28 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:28 c1: direct index for structure ( uniform int)
0:28 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:28 Constant:
@@ -19,8 +19,8 @@ gl_FragCoord origin is upper left
0:29 move second child to first child ( temp int)
0:29 'r01' ( temp int)
0:29 Construct int ( temp int)
-0:? imageLoad ( temp 4-component vector of int)
-0:29 'g_tTexbis' (layout( r32i) readonly uniform iimageBuffer)
+0:? textureFetch ( temp 4-component vector of int)
+0:29 'g_tTexbis' (layout( r32i) uniform itextureBuffer)
0:29 c1: direct index for structure ( uniform int)
0:29 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:29 Constant:
@@ -29,8 +29,8 @@ gl_FragCoord origin is upper left
0:30 move second child to first child ( temp uint)
0:30 'r02' ( temp uint)
0:30 Construct uint ( temp uint)
-0:? imageLoad ( temp 4-component vector of uint)
-0:30 'g_tTexbus' (layout( r32ui) readonly uniform uimageBuffer)
+0:? textureFetch ( temp 4-component vector of uint)
+0:30 'g_tTexbus' (layout( r32ui) uniform utextureBuffer)
0:30 c1: direct index for structure ( uniform int)
0:30 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:30 Constant:
@@ -62,31 +62,31 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 1 (const int)
0:? Linker Objects
-0:? 'g_tTexbfs_test' (layout( binding=0 r32f) readonly uniform imageBuffer)
-0:? 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
-0:? 'g_tTexbis' (layout( r32i) readonly uniform iimageBuffer)
-0:? 'g_tTexbus' (layout( r32ui) readonly uniform uimageBuffer)
+0:? 'g_tTexbfs_test' (layout( binding=0 r32f) uniform textureBuffer)
+0:? 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
+0:? 'g_tTexbis' (layout( r32i) uniform itextureBuffer)
+0:? 'g_tTexbus' (layout( r32ui) uniform utextureBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -96,8 +96,8 @@ gl_FragCoord origin is upper left
0:28 move second child to first child ( temp float)
0:28 'r00' ( temp float)
0:28 Construct float ( temp float)
-0:? imageLoad ( temp 4-component vector of float)
-0:28 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
+0:? textureFetch ( temp 4-component vector of float)
+0:28 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
0:28 c1: direct index for structure ( uniform int)
0:28 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:28 Constant:
@@ -106,8 +106,8 @@ gl_FragCoord origin is upper left
0:29 move second child to first child ( temp int)
0:29 'r01' ( temp int)
0:29 Construct int ( temp int)
-0:? imageLoad ( temp 4-component vector of int)
-0:29 'g_tTexbis' (layout( r32i) readonly uniform iimageBuffer)
+0:? textureFetch ( temp 4-component vector of int)
+0:29 'g_tTexbis' (layout( r32i) uniform itextureBuffer)
0:29 c1: direct index for structure ( uniform int)
0:29 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:29 Constant:
@@ -116,8 +116,8 @@ gl_FragCoord origin is upper left
0:30 move second child to first child ( temp uint)
0:30 'r02' ( temp uint)
0:30 Construct uint ( temp uint)
-0:? imageLoad ( temp 4-component vector of uint)
-0:30 'g_tTexbus' (layout( r32ui) readonly uniform uimageBuffer)
+0:? textureFetch ( temp 4-component vector of uint)
+0:30 'g_tTexbus' (layout( r32ui) uniform utextureBuffer)
0:30 c1: direct index for structure ( uniform int)
0:30 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
0:30 Constant:
@@ -149,28 +149,28 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 1 (const int)
0:? Linker Objects
-0:? 'g_tTexbfs_test' (layout( binding=0 r32f) readonly uniform imageBuffer)
-0:? 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
-0:? 'g_tTexbis' (layout( r32i) readonly uniform iimageBuffer)
-0:? 'g_tTexbus' (layout( r32ui) readonly uniform uimageBuffer)
+0:? 'g_tTexbfs_test' (layout( binding=0 r32f) uniform textureBuffer)
+0:? 'g_tTexbfs' (layout( r32f) uniform textureBuffer)
+0:? 'g_tTexbis' (layout( r32i) uniform itextureBuffer)
+0:? 'g_tTexbus' (layout( r32ui) uniform utextureBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 75
Capability Shader
@@ -179,6 +179,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 67 71
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -202,11 +203,10 @@ gl_FragCoord origin is upper left
Name 46 "g_tTexbus"
Name 54 "psout"
Name 64 "flattenTemp"
- Name 67 "Color"
- Name 71 "Depth"
+ Name 67 "@entryPointOutput.Color"
+ Name 71 "@entryPointOutput.Depth"
Name 74 "g_tTexbfs_test"
Decorate 16(g_tTexbfs) DescriptorSet 0
- Decorate 16(g_tTexbfs) NonWritable
MemberDecorate 22($Global) 0 Offset 0
MemberDecorate 22($Global) 1 Offset 8
MemberDecorate 22($Global) 2 Offset 16
@@ -218,14 +218,11 @@ gl_FragCoord origin is upper left
Decorate 22($Global) Block
Decorate 24 DescriptorSet 0
Decorate 35(g_tTexbis) DescriptorSet 0
- Decorate 35(g_tTexbis) NonWritable
Decorate 46(g_tTexbus) DescriptorSet 0
- Decorate 46(g_tTexbus) NonWritable
- Decorate 67(Color) Location 0
- Decorate 71(Depth) BuiltIn FragDepth
+ Decorate 67(@entryPointOutput.Color) Location 0
+ Decorate 71(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 74(g_tTexbfs_test) DescriptorSet 0
Decorate 74(g_tTexbfs_test) Binding 0
- Decorate 74(g_tTexbfs_test) NonWritable
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -233,7 +230,7 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 6(float)
- 14: TypeImage 6(float) Buffer nonsampled format:R32f
+ 14: TypeImage 6(float) Buffer sampled format:R32f
15: TypePointer UniformConstant 14
16(g_tTexbfs): 15(ptr) Variable UniformConstant
18: TypeInt 32 1
@@ -246,12 +243,12 @@ gl_FragCoord origin is upper left
25: 18(int) Constant 0
26: TypePointer Uniform 18(int)
31: TypePointer Function 18(int)
- 33: TypeImage 18(int) Buffer nonsampled format:R32i
+ 33: TypeImage 18(int) Buffer sampled format:R32i
34: TypePointer UniformConstant 33
35(g_tTexbis): 34(ptr) Variable UniformConstant
41: TypeInt 32 0
42: TypePointer Function 41(int)
- 44: TypeImage 41(int) Buffer nonsampled format:R32ui
+ 44: TypeImage 41(int) Buffer sampled format:R32ui
45: TypePointer UniformConstant 44
46(g_tTexbus): 45(ptr) Variable UniformConstant
50: TypeVector 41(int) 4
@@ -261,9 +258,9 @@ gl_FragCoord origin is upper left
57: TypePointer Function 7(fvec4)
59: 18(int) Constant 1
66: TypePointer Output 7(fvec4)
- 67(Color): 66(ptr) Variable Output
+67(@entryPointOutput.Color): 66(ptr) Variable Output
70: TypePointer Output 6(float)
- 71(Depth): 70(ptr) Variable Output
+71(@entryPointOutput.Depth): 70(ptr) Variable Output
74(g_tTexbfs_test): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -272,10 +269,10 @@ gl_FragCoord origin is upper left
Store 64(flattenTemp) 65
68: 57(ptr) AccessChain 64(flattenTemp) 25
69: 7(fvec4) Load 68
- Store 67(Color) 69
+ Store 67(@entryPointOutput.Color) 69
72: 12(ptr) AccessChain 64(flattenTemp) 59
73: 6(float) Load 72
- Store 71(Depth) 73
+ Store 71(@entryPointOutput.Depth) 73
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
@@ -287,19 +284,19 @@ gl_FragCoord origin is upper left
17: 14 Load 16(g_tTexbfs)
27: 26(ptr) AccessChain 24 25
28: 18(int) Load 27
- 29: 7(fvec4) ImageRead 17 28
+ 29: 7(fvec4) ImageFetch 17 28
30: 6(float) CompositeExtract 29 0
Store 13(r00) 30
36: 33 Load 35(g_tTexbis)
37: 26(ptr) AccessChain 24 25
38: 18(int) Load 37
- 39: 21(ivec4) ImageRead 36 38
+ 39: 21(ivec4) ImageFetch 36 38
40: 18(int) CompositeExtract 39 0
Store 32(r01) 40
47: 44 Load 46(g_tTexbus)
48: 26(ptr) AccessChain 24 25
49: 18(int) Load 48
- 51: 50(ivec4) ImageRead 47 49
+ 51: 50(ivec4) ImageFetch 47 49
52: 41(int) CompositeExtract 51 0
Store 43(r02) 52
58: 57(ptr) AccessChain 54(psout) 25
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out
index 7d6c63ab91a..7cd6b01f62a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -239,13 +239,13 @@ gl_FragCoord origin is upper left
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:48 Color: direct index for structure ( temp 4-component vector of float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
0:48 0 (const int)
0:48 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:48 Depth: direct index for structure ( temp float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
@@ -274,14 +274,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -521,13 +521,13 @@ gl_FragCoord origin is upper left
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:48 Color: direct index for structure ( temp 4-component vector of float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
0:48 0 (const int)
0:48 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:48 Depth: direct index for structure ( temp float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
@@ -556,11 +556,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 201
Capability Shader
@@ -571,6 +571,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 155 159
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -597,8 +598,8 @@ gl_FragCoord origin is upper left
Name 130 "g_tTex3du4"
Name 141 "psout"
Name 152 "flattenTemp"
- Name 155 "Color"
- Name 159 "Depth"
+ Name 155 "@entryPointOutput.Color"
+ Name 159 "@entryPointOutput.Depth"
Name 164 "g_sSamp"
Name 167 "g_tTexcdf4"
Name 170 "g_tTexcdi4"
@@ -632,8 +633,8 @@ gl_FragCoord origin is upper left
Decorate 102(g_tTex3df4) DescriptorSet 0
Decorate 118(g_tTex3di4) DescriptorSet 0
Decorate 130(g_tTex3du4) DescriptorSet 0
- Decorate 155(Color) Location 0
- Decorate 159(Depth) BuiltIn FragDepth
+ Decorate 155(@entryPointOutput.Color) Location 0
+ Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 164(g_sSamp) DescriptorSet 0
Decorate 164(g_sSamp) Binding 0
Decorate 167(g_tTexcdf4) DescriptorSet 0
@@ -711,9 +712,9 @@ gl_FragCoord origin is upper left
145: TypePointer Function 7(fvec4)
147: TypePointer Function 6(float)
154: TypePointer Output 7(fvec4)
- 155(Color): 154(ptr) Variable Output
+155(@entryPointOutput.Color): 154(ptr) Variable Output
158: TypePointer Output 6(float)
- 159(Depth): 158(ptr) Variable Output
+159(@entryPointOutput.Depth): 158(ptr) Variable Output
162: TypeSampler
163: TypePointer UniformConstant 162
164(g_sSamp): 163(ptr) Variable UniformConstant
@@ -760,10 +761,10 @@ gl_FragCoord origin is upper left
Store 152(flattenTemp) 153
156: 145(ptr) AccessChain 152(flattenTemp) 142
157: 7(fvec4) Load 156
- Store 155(Color) 157
+ Store 155(@entryPointOutput.Color) 157
160: 147(ptr) AccessChain 152(flattenTemp) 23
161: 6(float) Load 160
- Store 159(Depth) 161
+ Store 159(@entryPointOutput.Depth) 161
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index f20b6075d99..df03bfcf533 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.offsetarray.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -176,13 +176,13 @@ gl_FragCoord origin is upper left
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:48 Color: direct index for structure ( temp 4-component vector of float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
0:48 0 (const int)
0:48 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:48 Depth: direct index for structure ( temp float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
@@ -211,14 +211,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -395,13 +395,13 @@ gl_FragCoord origin is upper left
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:48 Color: direct index for structure ( temp 4-component vector of float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
0:48 0 (const int)
0:48 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:48 Depth: direct index for structure ( temp float)
0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:48 Constant:
@@ -430,11 +430,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 174
Capability Shader
@@ -445,6 +445,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 119 123
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -468,8 +469,8 @@ gl_FragCoord origin is upper left
Name 93 "g_tTex2du4a"
Name 104 "psout"
Name 116 "flattenTemp"
- Name 119 "Color"
- Name 123 "Depth"
+ Name 119 "@entryPointOutput.Color"
+ Name 123 "@entryPointOutput.Depth"
Name 128 "g_sSamp"
Name 131 "g_tTex1df4"
Name 134 "g_tTex1di4"
@@ -502,8 +503,8 @@ gl_FragCoord origin is upper left
Decorate 64(g_tTex2df4a) DescriptorSet 0
Decorate 81(g_tTex2di4a) DescriptorSet 0
Decorate 93(g_tTex2du4a) DescriptorSet 0
- Decorate 119(Color) Location 0
- Decorate 123(Depth) BuiltIn FragDepth
+ Decorate 119(@entryPointOutput.Color) Location 0
+ Decorate 123(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 128(g_sSamp) DescriptorSet 0
Decorate 128(g_sSamp) Binding 0
Decorate 131(g_tTex1df4) DescriptorSet 0
@@ -573,9 +574,9 @@ gl_FragCoord origin is upper left
110: 16(int) Constant 1
111: TypePointer Function 6(float)
118: TypePointer Output 7(fvec4)
- 119(Color): 118(ptr) Variable Output
+119(@entryPointOutput.Color): 118(ptr) Variable Output
122: TypePointer Output 6(float)
- 123(Depth): 122(ptr) Variable Output
+123(@entryPointOutput.Depth): 122(ptr) Variable Output
126: TypeSampler
127: TypePointer UniformConstant 126
128(g_sSamp): 127(ptr) Variable UniformConstant
@@ -631,10 +632,10 @@ gl_FragCoord origin is upper left
Store 116(flattenTemp) 117
120: 108(ptr) AccessChain 116(flattenTemp) 105
121: 7(fvec4) Load 120
- Store 119(Color) 121
+ Store 119(@entryPointOutput.Color) 121
124: 111(ptr) AccessChain 116(flattenTemp) 110
125: 6(float) Load 124
- Store 123(Depth) 125
+ Store 123(@entryPointOutput.Depth) 125
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index ea8bdd2dda4..4bfc56aa685 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.rwbuffer.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:22 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -40,7 +40,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:22 Sequence
0:22 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:22 Color: direct index for structure ( temp 4-component vector of float)
0:22 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:22 Constant:
@@ -50,13 +50,13 @@ gl_FragCoord origin is upper left
0:? 'g_tBuffI' (layout( rgba32i) uniform iimageBuffer)
0:? 'g_tBuffU' (layout( rgba32ui) uniform uimageBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:22 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -97,7 +97,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:22 Sequence
0:22 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:22 Color: direct index for structure ( temp 4-component vector of float)
0:22 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:22 Constant:
@@ -107,18 +107,19 @@ gl_FragCoord origin is upper left
0:? 'g_tBuffI' (layout( rgba32i) uniform iimageBuffer)
0:? 'g_tBuffU' (layout( rgba32ui) uniform uimageBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 57
Capability Shader
- Capability SampledBuffer
+ Capability ImageBuffer
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 54
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -137,7 +138,7 @@ gl_FragCoord origin is upper left
Name 31 "g_tBuffU"
Name 39 "g_tBuffI"
Name 45 "psout"
- Name 54 "Color"
+ Name 54 "@entryPointOutput.Color"
Decorate 14(g_tBuffF) DescriptorSet 0
MemberDecorate 20($Global) 0 Offset 0
MemberDecorate 20($Global) 1 Offset 8
@@ -151,7 +152,7 @@ gl_FragCoord origin is upper left
Decorate 22 DescriptorSet 0
Decorate 31(g_tBuffU) DescriptorSet 0
Decorate 39(g_tBuffI) DescriptorSet 0
- Decorate 54(Color) Location 0
+ Decorate 54(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -183,12 +184,12 @@ gl_FragCoord origin is upper left
47: 7(fvec4) ConstantComposite 46 46 46 46
48: TypePointer Function 7(fvec4)
53: TypePointer Output 7(fvec4)
- 54(Color): 53(ptr) Variable Output
+54(@entryPointOutput.Color): 53(ptr) Variable Output
4(main): 2 Function None 3
5: Label
55:8(PS_OUTPUT) FunctionCall 10(@main()
56: 7(fvec4) CompositeExtract 55 0
- Store 54(Color) 56
+ Store 54(@entryPointOutput.Color) 56
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
index fba29c13e44..d4960adfd22 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.rwtexture.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:40 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -68,13 +68,13 @@ gl_FragCoord origin is upper left
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:40 Color: direct index for structure ( temp 4-component vector of float)
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Constant:
0:40 0 (const int)
0:40 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:40 Depth: direct index for structure ( temp float)
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Constant:
@@ -97,14 +97,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray)
0:? 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:40 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -173,13 +173,13 @@ gl_FragCoord origin is upper left
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:40 Color: direct index for structure ( temp 4-component vector of float)
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Constant:
0:40 0 (const int)
0:40 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:40 Depth: direct index for structure ( temp float)
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Constant:
@@ -202,19 +202,20 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray)
0:? 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 119
Capability Shader
- Capability Sampled1D
+ Capability Image1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 82 86
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -238,8 +239,8 @@ gl_FragCoord origin is upper left
Name 62 "g_tTex2du4a"
Name 68 "psout"
Name 79 "flattenTemp"
- Name 82 "Color"
- Name 86 "Depth"
+ Name 82 "@entryPointOutput.Color"
+ Name 86 "@entryPointOutput.Depth"
Name 91 "g_sSamp"
Name 94 "g_tTex1df4"
Name 97 "g_tTex1di4"
@@ -266,8 +267,8 @@ gl_FragCoord origin is upper left
Decorate 46(g_tTex2df4a) DescriptorSet 0
Decorate 55(g_tTex2di4a) DescriptorSet 0
Decorate 62(g_tTex2du4a) DescriptorSet 0
- Decorate 82(Color) Location 0
- Decorate 86(Depth) BuiltIn FragDepth
+ Decorate 82(@entryPointOutput.Color) Location 0
+ Decorate 86(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 91(g_sSamp) DescriptorSet 0
Decorate 91(g_sSamp) Binding 0
Decorate 94(g_tTex1df4) DescriptorSet 0
@@ -324,9 +325,9 @@ gl_FragCoord origin is upper left
72: TypePointer Function 7(fvec4)
74: TypePointer Function 6(float)
81: TypePointer Output 7(fvec4)
- 82(Color): 81(ptr) Variable Output
+82(@entryPointOutput.Color): 81(ptr) Variable Output
85: TypePointer Output 6(float)
- 86(Depth): 85(ptr) Variable Output
+86(@entryPointOutput.Depth): 85(ptr) Variable Output
89: TypeSampler
90: TypePointer UniformConstant 89
91(g_sSamp): 90(ptr) Variable UniformConstant
@@ -364,10 +365,10 @@ gl_FragCoord origin is upper left
Store 79(flattenTemp) 80
83: 72(ptr) AccessChain 79(flattenTemp) 69
84: 7(fvec4) Load 83
- Store 82(Color) 84
+ Store 82(@entryPointOutput.Color) 84
87: 74(ptr) AccessChain 79(flattenTemp) 23
88: 6(float) Load 87
- Store 86(Depth) 88
+ Store 86(@entryPointOutput.Depth) 88
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index 2b05b31d065..e86fc35bb24 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.load.rwtexture.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:40 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -86,13 +86,13 @@ gl_FragCoord origin is upper left
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:40 Color: direct index for structure ( temp 4-component vector of float)
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Constant:
0:40 0 (const int)
0:40 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:40 Depth: direct index for structure ( temp float)
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Constant:
@@ -115,14 +115,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray)
0:? 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:40 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -209,13 +209,13 @@ gl_FragCoord origin is upper left
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:40 Color: direct index for structure ( temp 4-component vector of float)
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Constant:
0:40 0 (const int)
0:40 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:40 Depth: direct index for structure ( temp float)
0:40 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:40 Constant:
@@ -238,19 +238,20 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray)
0:? 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 132
Capability Shader
- Capability Sampled1D
+ Capability Image1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 104 108
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -277,8 +278,8 @@ gl_FragCoord origin is upper left
Name 85 "g_tTex3du4"
Name 91 "psout"
Name 101 "flattenTemp"
- Name 104 "Color"
- Name 108 "Depth"
+ Name 104 "@entryPointOutput.Color"
+ Name 108 "@entryPointOutput.Depth"
Name 113 "g_sSamp"
Name 116 "g_tTex1df4a"
Name 119 "g_tTex1di4a"
@@ -306,8 +307,8 @@ gl_FragCoord origin is upper left
Decorate 69(g_tTex3df4) DescriptorSet 0
Decorate 78(g_tTex3di4) DescriptorSet 0
Decorate 85(g_tTex3du4) DescriptorSet 0
- Decorate 104(Color) Location 0
- Decorate 108(Depth) BuiltIn FragDepth
+ Decorate 104(@entryPointOutput.Color) Location 0
+ Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 113(g_sSamp) DescriptorSet 0
Decorate 113(g_sSamp) Binding 0
Decorate 116(g_tTex1df4a) DescriptorSet 0
@@ -370,9 +371,9 @@ gl_FragCoord origin is upper left
94: TypePointer Function 7(fvec4)
96: TypePointer Function 6(float)
103: TypePointer Output 7(fvec4)
- 104(Color): 103(ptr) Variable Output
+104(@entryPointOutput.Color): 103(ptr) Variable Output
107: TypePointer Output 6(float)
- 108(Depth): 107(ptr) Variable Output
+108(@entryPointOutput.Depth): 107(ptr) Variable Output
111: TypeSampler
112: TypePointer UniformConstant 111
113(g_sSamp): 112(ptr) Variable UniformConstant
@@ -401,10 +402,10 @@ gl_FragCoord origin is upper left
Store 101(flattenTemp) 102
105: 94(ptr) AccessChain 101(flattenTemp) 23
106: 7(fvec4) Load 105
- Store 104(Color) 106
+ Store 104(@entryPointOutput.Color) 106
109: 96(ptr) AccessChain 101(flattenTemp) 48
110: 6(float) Load 109
- Store 108(Depth) 110
+ Store 108(@entryPointOutput.Depth) 110
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.localStructuredBuffer.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.localStructuredBuffer.comp.out
new file mode 100644
index 00000000000..98257f4fe7c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.localStructuredBuffer.comp.out
@@ -0,0 +1,64 @@
+hlsl.localStructuredBuffer.comp
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:2 Function Definition: @main( ( temp void)
+0:2 Function Parameters:
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:2 Function Definition: @main( ( temp void)
+0:2 Function Parameters:
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 14
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 1 1 1
+ Source HLSL 500
+ Name 4 "main"
+ Name 6 "@main("
+ Name 11 "srt0"
+ MemberName 11(srt0) 0 "@data"
+ Name 13 "srt0"
+ Decorate 10 ArrayStride 4
+ MemberDecorate 11(srt0) 0 Offset 0
+ Decorate 11(srt0) BufferBlock
+ Decorate 13(srt0) DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 9: TypeInt 32 0
+ 10: TypeRuntimeArray 9(int)
+ 11(srt0): TypeStruct 10
+ 12: TypePointer Uniform 11(srt0)
+ 13(srt0): 12(ptr) Variable Uniform
+ 4(main): 2 Function None 3
+ 5: Label
+ 8: 2 FunctionCall 6(@main()
+ Return
+ FunctionEnd
+ 6(@main(): 2 Function None 3
+ 7: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out
index 7aec2756537..de1b3f3359a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out
@@ -1,5 +1,5 @@
hlsl.logical.binary.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -52,20 +52,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 Sequence
0:12 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:12 Color: direct index for structure ( temp 4-component vector of float)
0:12 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:12 Constant:
0:12 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -118,116 +118,106 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 Sequence
0:12 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:12 Color: direct index for structure ( temp 4-component vector of float)
0:12 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:12 Constant:
0:12 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 62
+// Generated by (magic number): 80002
+// Id's are bound by 57
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 59
+ EntryPoint Fragment 4 "main" 54
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
Name 10 "@main("
- Name 15 "$Global"
- MemberName 15($Global) 0 "ival"
- MemberName 15($Global) 1 "ival4"
- MemberName 15($Global) 2 "fval"
- MemberName 15($Global) 3 "fval4"
- Name 17 ""
- Name 50 "psout"
- Name 59 "Color"
- MemberDecorate 15($Global) 0 Offset 0
- MemberDecorate 15($Global) 1 Offset 16
- MemberDecorate 15($Global) 2 Offset 32
- MemberDecorate 15($Global) 3 Offset 48
- Decorate 15($Global) Block
- Decorate 17 DescriptorSet 0
- Decorate 59(Color) Location 0
+ Name 14 "$Global"
+ MemberName 14($Global) 0 "ival"
+ MemberName 14($Global) 1 "ival4"
+ MemberName 14($Global) 2 "fval"
+ MemberName 14($Global) 3 "fval4"
+ Name 16 ""
+ Name 45 "psout"
+ Name 54 "@entryPointOutput.Color"
+ MemberDecorate 14($Global) 0 Offset 0
+ MemberDecorate 14($Global) 1 Offset 16
+ MemberDecorate 14($Global) 2 Offset 32
+ MemberDecorate 14($Global) 3 Offset 48
+ Decorate 14($Global) Block
+ Decorate 16 DescriptorSet 0
+ Decorate 54(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8(PS_OUTPUT): TypeStruct 7(fvec4)
9: TypeFunction 8(PS_OUTPUT)
- 12: TypeBool
- 13: TypeInt 32 1
- 14: TypeVector 13(int) 4
- 15($Global): TypeStruct 13(int) 14(ivec4) 6(float) 7(fvec4)
- 16: TypePointer Uniform 15($Global)
- 17: 16(ptr) Variable Uniform
- 18: 13(int) Constant 0
- 19: TypePointer Uniform 13(int)
+ 12: TypeInt 32 1
+ 13: TypeVector 12(int) 4
+ 14($Global): TypeStruct 12(int) 13(ivec4) 6(float) 7(fvec4)
+ 15: TypePointer Uniform 14($Global)
+ 16: 15(ptr) Variable Uniform
+ 17: 12(int) Constant 0
+ 18: TypePointer Uniform 12(int)
+ 21: TypeBool
22: TypeInt 32 0
23: 22(int) Constant 0
- 27: 13(int) Constant 2
- 28: TypePointer Uniform 6(float)
- 49: TypePointer Function 8(PS_OUTPUT)
- 51: 6(float) Constant 1065353216
- 52: 7(fvec4) ConstantComposite 51 51 51 51
- 53: TypePointer Function 7(fvec4)
- 58: TypePointer Output 7(fvec4)
- 59(Color): 58(ptr) Variable Output
+ 25: 12(int) Constant 2
+ 26: TypePointer Uniform 6(float)
+ 44: TypePointer Function 8(PS_OUTPUT)
+ 46: 6(float) Constant 1065353216
+ 47: 7(fvec4) ConstantComposite 46 46 46 46
+ 48: TypePointer Function 7(fvec4)
+ 53: TypePointer Output 7(fvec4)
+54(@entryPointOutput.Color): 53(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 60:8(PS_OUTPUT) FunctionCall 10(@main()
- 61: 7(fvec4) CompositeExtract 60 0
- Store 59(Color) 61
+ 55:8(PS_OUTPUT) FunctionCall 10(@main()
+ 56: 7(fvec4) CompositeExtract 55 0
+ Store 54(@entryPointOutput.Color) 56
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
- 50(psout): 49(ptr) Variable Function
- 20: 19(ptr) AccessChain 17 18
- 21: 13(int) Load 20
- 24: 12(bool) INotEqual 21 23
- SelectionMerge 26 None
- BranchConditional 24 25 26
- 25: Label
- 29: 28(ptr) AccessChain 17 27
- 30: 6(float) Load 29
- 31: 13(int) ConvertFToS 30
- 32: 12(bool) INotEqual 31 23
- Branch 26
- 26: Label
- 33: 12(bool) Phi 24 11 32 25
- SelectionMerge 35 None
- BranchConditional 33 34 35
- 34: Label
- Branch 35
- 35: Label
- 36: 19(ptr) AccessChain 17 18
- 37: 13(int) Load 36
- 38: 12(bool) INotEqual 37 23
- 39: 12(bool) LogicalNot 38
- SelectionMerge 41 None
- BranchConditional 39 40 41
- 40: Label
- 42: 28(ptr) AccessChain 17 27
- 43: 6(float) Load 42
- 44: 13(int) ConvertFToS 43
- 45: 12(bool) INotEqual 44 23
- Branch 41
- 41: Label
- 46: 12(bool) Phi 38 35 45 40
- SelectionMerge 48 None
- BranchConditional 46 47 48
- 47: Label
- Branch 48
- 48: Label
- 54: 53(ptr) AccessChain 50(psout) 18
- Store 54 52
- 55:8(PS_OUTPUT) Load 50(psout)
- ReturnValue 55
+ 45(psout): 44(ptr) Variable Function
+ 19: 18(ptr) AccessChain 16 17
+ 20: 12(int) Load 19
+ 24: 21(bool) INotEqual 20 23
+ 27: 26(ptr) AccessChain 16 25
+ 28: 6(float) Load 27
+ 29: 12(int) ConvertFToS 28
+ 30: 21(bool) INotEqual 29 23
+ 31: 21(bool) LogicalAnd 24 30
+ SelectionMerge 33 None
+ BranchConditional 31 32 33
+ 32: Label
+ Branch 33
+ 33: Label
+ 34: 18(ptr) AccessChain 16 17
+ 35: 12(int) Load 34
+ 36: 21(bool) INotEqual 35 23
+ 37: 26(ptr) AccessChain 16 25
+ 38: 6(float) Load 37
+ 39: 12(int) ConvertFToS 38
+ 40: 21(bool) INotEqual 39 23
+ 41: 21(bool) LogicalOr 36 40
+ SelectionMerge 43 None
+ BranchConditional 41 42 43
+ 42: Label
+ Branch 43
+ 43: Label
+ 49: 48(ptr) AccessChain 45(psout) 17
+ Store 49 47
+ 50:8(PS_OUTPUT) Load 45(psout)
+ ReturnValue 50
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out
index 38708ef7e02..2409b0e1113 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out
@@ -1,5 +1,5 @@
hlsl.logical.binary.vec.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -115,20 +115,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:10 Color: direct index for structure ( temp 4-component vector of float)
0:10 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:10 Constant:
0:10 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a, uniform 4-component vector of bool b4b, uniform bool b1a, uniform bool b1b})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -244,24 +244,25 @@ gl_FragCoord origin is upper left
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:10 Color: direct index for structure ( temp 4-component vector of float)
0:10 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:10 Constant:
0:10 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a, uniform 4-component vector of bool b4b, uniform bool b1a, uniform bool b1b})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 120
+// Generated by (magic number): 80002
+// Id's are bound by 115
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 117
+ EntryPoint Fragment 4 "main" 112
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -278,16 +279,16 @@ gl_FragCoord origin is upper left
Name 47 "r10"
Name 58 "r11"
Name 67 "r20"
- Name 79 "r21"
- Name 92 "psout"
- Name 117 "Color"
+ Name 77 "r21"
+ Name 87 "psout"
+ Name 112 "@entryPointOutput.Color"
MemberDecorate 18($Global) 0 Offset 0
MemberDecorate 18($Global) 1 Offset 16
MemberDecorate 18($Global) 2 Offset 32
MemberDecorate 18($Global) 3 Offset 36
Decorate 18($Global) Block
Decorate 20 DescriptorSet 0
- Decorate 117(Color) Location 0
+ Decorate 112(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -310,20 +311,20 @@ gl_FragCoord origin is upper left
34: 21(int) Constant 1
48: 21(int) Constant 2
49: TypePointer Uniform 16(int)
- 73: 21(int) Constant 3
- 91: TypePointer Function 8(PS_OUTPUT)
- 106: 6(float) Constant 0
- 107: 6(float) Constant 1065353216
- 108: 7(fvec4) ConstantComposite 106 106 106 106
- 109: 7(fvec4) ConstantComposite 107 107 107 107
- 111: TypePointer Function 7(fvec4)
- 116: TypePointer Output 7(fvec4)
- 117(Color): 116(ptr) Variable Output
+ 71: 21(int) Constant 3
+ 86: TypePointer Function 8(PS_OUTPUT)
+ 101: 6(float) Constant 0
+ 102: 6(float) Constant 1065353216
+ 103: 7(fvec4) ConstantComposite 101 101 101 101
+ 104: 7(fvec4) ConstantComposite 102 102 102 102
+ 106: TypePointer Function 7(fvec4)
+ 111: TypePointer Output 7(fvec4)
+112(@entryPointOutput.Color): 111(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 118:8(PS_OUTPUT) FunctionCall 10(@main()
- 119: 7(fvec4) CompositeExtract 118 0
- Store 117(Color) 119
+ 113:8(PS_OUTPUT) FunctionCall 10(@main()
+ 114: 7(fvec4) CompositeExtract 113 0
+ Store 112(@entryPointOutput.Color) 114
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
@@ -334,8 +335,8 @@ gl_FragCoord origin is upper left
47(r10): 14(ptr) Variable Function
58(r11): 14(ptr) Variable Function
67(r20): 14(ptr) Variable Function
- 79(r21): 14(ptr) Variable Function
- 92(psout): 91(ptr) Variable Function
+ 77(r21): 14(ptr) Variable Function
+ 87(psout): 86(ptr) Variable Function
24: 23(ptr) AccessChain 20 22
25: 17(ivec4) Load 24
28: 13(bvec4) INotEqual 25 27
@@ -378,48 +379,37 @@ gl_FragCoord origin is upper left
68: 23(ptr) AccessChain 20 22
69: 17(ivec4) Load 68
70: 13(bvec4) INotEqual 69 27
- SelectionMerge 72 None
- BranchConditional 70 71 72
- 71: Label
- 74: 49(ptr) AccessChain 20 73
- 75: 16(int) Load 74
- 76: 12(bool) INotEqual 75 26
- 77: 13(bvec4) CompositeConstruct 76 76 76 76
- Branch 72
- 72: Label
- 78: 12(bool) Phi 70 11 77 71
- Store 67(r20) 78
- 80: 23(ptr) AccessChain 20 22
- 81: 17(ivec4) Load 80
- 82: 13(bvec4) INotEqual 81 27
- 83: 12(bool) LogicalNot 82
- SelectionMerge 85 None
- BranchConditional 83 84 85
- 84: Label
- 86: 49(ptr) AccessChain 20 73
- 87: 16(int) Load 86
- 88: 12(bool) INotEqual 87 26
- 89: 13(bvec4) CompositeConstruct 88 88 88 88
- Branch 85
- 85: Label
- 90: 12(bool) Phi 82 72 89 84
- Store 79(r21) 90
- 93: 13(bvec4) Load 15(r00)
- 94: 13(bvec4) Load 30(r01)
- 95: 13(bvec4) LogicalOr 93 94
- 96: 13(bvec4) Load 39(r02)
- 97: 13(bvec4) LogicalOr 95 96
- 98: 13(bvec4) Load 47(r10)
- 99: 13(bvec4) LogicalOr 97 98
- 100: 13(bvec4) Load 58(r11)
- 101: 13(bvec4) LogicalOr 99 100
- 102: 13(bvec4) Load 67(r20)
- 103: 13(bvec4) LogicalOr 101 102
- 104: 13(bvec4) Load 79(r21)
- 105: 13(bvec4) LogicalOr 103 104
- 110: 7(fvec4) Select 105 109 108
- 112: 111(ptr) AccessChain 92(psout) 22
- Store 112 110
- 113:8(PS_OUTPUT) Load 92(psout)
- ReturnValue 113
+ 72: 49(ptr) AccessChain 20 71
+ 73: 16(int) Load 72
+ 74: 12(bool) INotEqual 73 26
+ 75: 13(bvec4) CompositeConstruct 74 74 74 74
+ 76: 13(bvec4) LogicalAnd 70 75
+ Store 67(r20) 76
+ 78: 23(ptr) AccessChain 20 22
+ 79: 17(ivec4) Load 78
+ 80: 13(bvec4) INotEqual 79 27
+ 81: 49(ptr) AccessChain 20 71
+ 82: 16(int) Load 81
+ 83: 12(bool) INotEqual 82 26
+ 84: 13(bvec4) CompositeConstruct 83 83 83 83
+ 85: 13(bvec4) LogicalOr 80 84
+ Store 77(r21) 85
+ 88: 13(bvec4) Load 15(r00)
+ 89: 13(bvec4) Load 30(r01)
+ 90: 13(bvec4) LogicalOr 88 89
+ 91: 13(bvec4) Load 39(r02)
+ 92: 13(bvec4) LogicalOr 90 91
+ 93: 13(bvec4) Load 47(r10)
+ 94: 13(bvec4) LogicalOr 92 93
+ 95: 13(bvec4) Load 58(r11)
+ 96: 13(bvec4) LogicalOr 94 95
+ 97: 13(bvec4) Load 67(r20)
+ 98: 13(bvec4) LogicalOr 96 97
+ 99: 13(bvec4) Load 77(r21)
+ 100: 13(bvec4) LogicalOr 98 99
+ 105: 7(fvec4) Select 100 104 103
+ 107: 106(ptr) AccessChain 87(psout) 22
+ Store 107 105
+ 108:8(PS_OUTPUT) Load 87(psout)
+ ReturnValue 108
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out
index 414879469dc..7d7cbf764a3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out
@@ -1,5 +1,5 @@
hlsl.logical.unary.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -31,17 +31,19 @@ gl_FragCoord origin is upper left
0:17 3 (const uint)
0:19 Test condition and select ( temp void)
0:19 Condition
-0:19 ival: direct index for structure ( uniform int)
-0:19 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:19 Constant:
-0:19 0 (const uint)
+0:19 Convert int to bool ( temp bool)
+0:19 ival: direct index for structure ( uniform int)
+0:19 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
+0:19 Constant:
+0:19 0 (const uint)
0:19 true case is null
0:20 Test condition and select ( temp void)
0:20 Condition
-0:20 fval: direct index for structure ( uniform float)
-0:20 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:20 Constant:
-0:20 2 (const uint)
+0:20 Convert float to bool ( temp bool)
+0:20 fval: direct index for structure ( uniform float)
+0:20 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
+0:20 Constant:
+0:20 2 (const uint)
0:20 true case is null
0:21 Test condition and select ( temp void)
0:21 Condition
@@ -78,20 +80,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 Sequence
0:12 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:12 Color: direct index for structure ( temp 4-component vector of float)
0:12 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:12 Constant:
0:12 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -123,17 +125,19 @@ gl_FragCoord origin is upper left
0:17 3 (const uint)
0:19 Test condition and select ( temp void)
0:19 Condition
-0:19 ival: direct index for structure ( uniform int)
-0:19 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:19 Constant:
-0:19 0 (const uint)
+0:19 Convert int to bool ( temp bool)
+0:19 ival: direct index for structure ( uniform int)
+0:19 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
+0:19 Constant:
+0:19 0 (const uint)
0:19 true case is null
0:20 Test condition and select ( temp void)
0:20 Condition
-0:20 fval: direct index for structure ( uniform float)
-0:20 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:20 Constant:
-0:20 2 (const uint)
+0:20 Convert float to bool ( temp bool)
+0:20 fval: direct index for structure ( uniform float)
+0:20 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
+0:20 Constant:
+0:20 2 (const uint)
0:20 true case is null
0:21 Test condition and select ( temp void)
0:21 Condition
@@ -170,24 +174,25 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 Sequence
0:12 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:12 Color: direct index for structure ( temp 4-component vector of float)
0:12 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:12 Constant:
0:12 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 82
+// Generated by (magic number): 80002
+// Id's are bound by 84
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 79
+ EntryPoint Fragment 4 "main" 81
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -198,15 +203,15 @@ gl_FragCoord origin is upper left
MemberName 14($Global) 2 "fval"
MemberName 14($Global) 3 "fval4"
Name 16 ""
- Name 70 "psout"
- Name 79 "Color"
+ Name 72 "psout"
+ Name 81 "@entryPointOutput.Color"
MemberDecorate 14($Global) 0 Offset 0
MemberDecorate 14($Global) 1 Offset 16
MemberDecorate 14($Global) 2 Offset 32
MemberDecorate 14($Global) 3 Offset 48
Decorate 14($Global) Block
Decorate 16 DescriptorSet 0
- Decorate 79(Color) Location 0
+ Decorate 81(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -234,22 +239,22 @@ gl_FragCoord origin is upper left
42: 12(int) Constant 3
43: TypePointer Uniform 7(fvec4)
46: 7(fvec4) ConstantComposite 39 39 39 39
- 69: TypePointer Function 8(PS_OUTPUT)
- 71: 6(float) Constant 1065353216
- 72: 7(fvec4) ConstantComposite 71 71 71 71
- 73: TypePointer Function 7(fvec4)
- 78: TypePointer Output 7(fvec4)
- 79(Color): 78(ptr) Variable Output
+ 71: TypePointer Function 8(PS_OUTPUT)
+ 73: 6(float) Constant 1065353216
+ 74: 7(fvec4) ConstantComposite 73 73 73 73
+ 75: TypePointer Function 7(fvec4)
+ 80: TypePointer Output 7(fvec4)
+81(@entryPointOutput.Color): 80(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 80:8(PS_OUTPUT) FunctionCall 10(@main()
- 81: 7(fvec4) CompositeExtract 80 0
- Store 79(Color) 81
+ 82:8(PS_OUTPUT) FunctionCall 10(@main()
+ 83: 7(fvec4) CompositeExtract 82 0
+ Store 81(@entryPointOutput.Color) 83
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
- 70(psout): 69(ptr) Variable Function
+ 72(psout): 71(ptr) Variable Function
19: 18(ptr) AccessChain 16 17
20: 12(int) Load 19
24: 21(bool) INotEqual 20 23
@@ -268,38 +273,40 @@ gl_FragCoord origin is upper left
48: 30(bvec4) LogicalNot 47
49: 18(ptr) AccessChain 16 17
50: 12(int) Load 49
- SelectionMerge 52 None
- BranchConditional 50 51 52
- 51: Label
- Branch 52
- 52: Label
- 53: 36(ptr) AccessChain 16 35
- 54: 6(float) Load 53
- SelectionMerge 56 None
- BranchConditional 54 55 56
- 55: Label
- Branch 56
- 56: Label
- 57: 18(ptr) AccessChain 16 17
- 58: 12(int) Load 57
- 59: 21(bool) INotEqual 58 23
- 60: 21(bool) LogicalNot 59
- SelectionMerge 62 None
- BranchConditional 60 61 62
- 61: Label
- Branch 62
- 62: Label
- 63: 36(ptr) AccessChain 16 35
- 64: 6(float) Load 63
- 65: 21(bool) FOrdNotEqual 64 39
- 66: 21(bool) LogicalNot 65
- SelectionMerge 68 None
- BranchConditional 66 67 68
- 67: Label
- Branch 68
- 68: Label
- 74: 73(ptr) AccessChain 70(psout) 17
- Store 74 72
- 75:8(PS_OUTPUT) Load 70(psout)
- ReturnValue 75
+ 51: 21(bool) INotEqual 50 23
+ SelectionMerge 53 None
+ BranchConditional 51 52 53
+ 52: Label
+ Branch 53
+ 53: Label
+ 54: 36(ptr) AccessChain 16 35
+ 55: 6(float) Load 54
+ 56: 21(bool) FOrdNotEqual 55 39
+ SelectionMerge 58 None
+ BranchConditional 56 57 58
+ 57: Label
+ Branch 58
+ 58: Label
+ 59: 18(ptr) AccessChain 16 17
+ 60: 12(int) Load 59
+ 61: 21(bool) INotEqual 60 23
+ 62: 21(bool) LogicalNot 61
+ SelectionMerge 64 None
+ BranchConditional 62 63 64
+ 63: Label
+ Branch 64
+ 64: Label
+ 65: 36(ptr) AccessChain 16 35
+ 66: 6(float) Load 65
+ 67: 21(bool) FOrdNotEqual 66 39
+ 68: 21(bool) LogicalNot 67
+ SelectionMerge 70 None
+ BranchConditional 68 69 70
+ 69: Label
+ Branch 70
+ 70: Label
+ 76: 75(ptr) AccessChain 72(psout) 17
+ Store 76 74
+ 77:8(PS_OUTPUT) Load 72(psout)
+ ReturnValue 77
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logicalConvert.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logicalConvert.frag.out
new file mode 100644
index 00000000000..733ca26311a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logicalConvert.frag.out
@@ -0,0 +1,342 @@
+hlsl.logicalConvert.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Test condition and select ( temp void)
+0:3 Condition
+0:3 Constant:
+0:3 false (const bool)
+0:3 true case
+0:4 Branch: Return with expression
+0:4 Constant:
+0:4 0.000000
+0:4 0.000000
+0:4 0.000000
+0:4 0.000000
+0:5 Test condition and select ( temp void)
+0:5 Condition
+0:5 Constant:
+0:5 false (const bool)
+0:5 true case
+0:6 Branch: Return with expression
+0:6 Constant:
+0:6 0.000000
+0:6 0.000000
+0:6 0.000000
+0:6 0.000000
+0:7 Test condition and select ( temp void)
+0:7 Condition
+0:7 Constant:
+0:7 true (const bool)
+0:7 true case
+0:8 Branch: Return with expression
+0:8 Constant:
+0:8 0.000000
+0:8 0.000000
+0:8 0.000000
+0:8 0.000000
+0:9 Test condition and select ( temp void)
+0:9 Condition
+0:9 Constant:
+0:9 true (const bool)
+0:9 true case
+0:10 Branch: Return with expression
+0:10 Constant:
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:11 Test condition and select ( temp void)
+0:11 Condition
+0:11 Constant:
+0:11 false (const bool)
+0:11 true case
+0:12 Branch: Return with expression
+0:12 Constant:
+0:12 0.000000
+0:12 0.000000
+0:12 0.000000
+0:12 0.000000
+0:13 Test condition and select ( temp void)
+0:13 Condition
+0:13 Constant:
+0:13 false (const bool)
+0:13 true case
+0:14 Branch: Return with expression
+0:14 Constant:
+0:14 0.000000
+0:14 0.000000
+0:14 0.000000
+0:14 0.000000
+0:15 Test condition and select ( temp void)
+0:15 Condition
+0:15 Constant:
+0:15 true (const bool)
+0:15 true case
+0:16 Branch: Return with expression
+0:16 Constant:
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:17 Test condition and select ( temp void)
+0:17 Condition
+0:17 Constant:
+0:17 false (const bool)
+0:17 true case
+0:18 Branch: Return with expression
+0:18 Constant:
+0:18 0.000000
+0:18 0.000000
+0:18 0.000000
+0:18 0.000000
+0:19 Test condition and select ( temp void)
+0:19 Condition
+0:19 Constant:
+0:19 true (const bool)
+0:19 true case
+0:20 Branch: Return with expression
+0:20 Constant:
+0:20 0.000000
+0:20 0.000000
+0:20 0.000000
+0:20 0.000000
+0:21 Test condition and select ( temp void)
+0:21 Condition
+0:21 Constant:
+0:21 true (const bool)
+0:21 true case
+0:22 Branch: Return with expression
+0:22 Constant:
+0:22 0.000000
+0:22 0.000000
+0:22 0.000000
+0:22 0.000000
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Test condition and select ( temp void)
+0:3 Condition
+0:3 Constant:
+0:3 false (const bool)
+0:3 true case
+0:4 Branch: Return with expression
+0:4 Constant:
+0:4 0.000000
+0:4 0.000000
+0:4 0.000000
+0:4 0.000000
+0:5 Test condition and select ( temp void)
+0:5 Condition
+0:5 Constant:
+0:5 false (const bool)
+0:5 true case
+0:6 Branch: Return with expression
+0:6 Constant:
+0:6 0.000000
+0:6 0.000000
+0:6 0.000000
+0:6 0.000000
+0:7 Test condition and select ( temp void)
+0:7 Condition
+0:7 Constant:
+0:7 true (const bool)
+0:7 true case
+0:8 Branch: Return with expression
+0:8 Constant:
+0:8 0.000000
+0:8 0.000000
+0:8 0.000000
+0:8 0.000000
+0:9 Test condition and select ( temp void)
+0:9 Condition
+0:9 Constant:
+0:9 true (const bool)
+0:9 true case
+0:10 Branch: Return with expression
+0:10 Constant:
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:10 0.000000
+0:11 Test condition and select ( temp void)
+0:11 Condition
+0:11 Constant:
+0:11 false (const bool)
+0:11 true case
+0:12 Branch: Return with expression
+0:12 Constant:
+0:12 0.000000
+0:12 0.000000
+0:12 0.000000
+0:12 0.000000
+0:13 Test condition and select ( temp void)
+0:13 Condition
+0:13 Constant:
+0:13 false (const bool)
+0:13 true case
+0:14 Branch: Return with expression
+0:14 Constant:
+0:14 0.000000
+0:14 0.000000
+0:14 0.000000
+0:14 0.000000
+0:15 Test condition and select ( temp void)
+0:15 Condition
+0:15 Constant:
+0:15 true (const bool)
+0:15 true case
+0:16 Branch: Return with expression
+0:16 Constant:
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:17 Test condition and select ( temp void)
+0:17 Condition
+0:17 Constant:
+0:17 false (const bool)
+0:17 true case
+0:18 Branch: Return with expression
+0:18 Constant:
+0:18 0.000000
+0:18 0.000000
+0:18 0.000000
+0:18 0.000000
+0:19 Test condition and select ( temp void)
+0:19 Condition
+0:19 Constant:
+0:19 true (const bool)
+0:19 true case
+0:20 Branch: Return with expression
+0:20 Constant:
+0:20 0.000000
+0:20 0.000000
+0:20 0.000000
+0:20 0.000000
+0:21 Test condition and select ( temp void)
+0:21 Condition
+0:21 Constant:
+0:21 true (const bool)
+0:21 true case
+0:22 Branch: Return with expression
+0:22 Constant:
+0:22 0.000000
+0:22 0.000000
+0:22 0.000000
+0:22 0.000000
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 50
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 48
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 48 "@entryPointOutput"
+ Decorate 48(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeBool
+ 12: 11(bool) ConstantFalse
+ 15: 6(float) Constant 0
+ 16: 7(fvec4) ConstantComposite 15 15 15 15
+ 21: 11(bool) ConstantTrue
+ 47: TypePointer Output 7(fvec4)
+48(@entryPointOutput): 47(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 49: 7(fvec4) FunctionCall 9(@main()
+ Store 48(@entryPointOutput) 49
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ SelectionMerge 14 None
+ BranchConditional 12 13 14
+ 13: Label
+ ReturnValue 16
+ 14: Label
+ SelectionMerge 19 None
+ BranchConditional 12 18 19
+ 18: Label
+ ReturnValue 16
+ 19: Label
+ SelectionMerge 23 None
+ BranchConditional 21 22 23
+ 22: Label
+ ReturnValue 16
+ 23: Label
+ SelectionMerge 26 None
+ BranchConditional 21 25 26
+ 25: Label
+ ReturnValue 16
+ 26: Label
+ SelectionMerge 29 None
+ BranchConditional 12 28 29
+ 28: Label
+ ReturnValue 16
+ 29: Label
+ SelectionMerge 32 None
+ BranchConditional 12 31 32
+ 31: Label
+ ReturnValue 16
+ 32: Label
+ SelectionMerge 35 None
+ BranchConditional 21 34 35
+ 34: Label
+ ReturnValue 16
+ 35: Label
+ SelectionMerge 38 None
+ BranchConditional 12 37 38
+ 37: Label
+ ReturnValue 16
+ 38: Label
+ SelectionMerge 41 None
+ BranchConditional 21 40 41
+ 40: Label
+ ReturnValue 16
+ 41: Label
+ SelectionMerge 44 None
+ BranchConditional 21 43 44
+ 43: Label
+ ReturnValue 16
+ 44: Label
+ 46: 7(fvec4) Undef
+ ReturnValue 46
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.loopattr.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.loopattr.frag.out
new file mode 100644
index 00000000000..38282a5140c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.loopattr.frag.out
@@ -0,0 +1,233 @@
+hlsl.loopattr.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3 Function Definition: @main( ( temp 4-component vector of float)
+0:3 Function Parameters:
+0:? Sequence
+0:5 Sequence
+0:5 move second child to first child ( temp int)
+0:5 'x' ( temp int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Loop with condition tested first
+0:5 Loop Condition
+0:5 Compare Less Than ( temp bool)
+0:5 'x' ( temp int)
+0:5 Constant:
+0:5 5 (const int)
+0:5 No loop body
+0:5 Loop Terminal Expression
+0:5 Pre-Increment ( temp int)
+0:5 'x' ( temp int)
+0:8 Sequence
+0:8 move second child to first child ( temp int)
+0:8 'y' ( temp int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 Loop with condition tested first
+0:8 Loop Condition
+0:8 Compare Less Than ( temp bool)
+0:8 'y' ( temp int)
+0:8 Constant:
+0:8 5 (const int)
+0:8 No loop body
+0:8 Loop Terminal Expression
+0:8 Pre-Increment ( temp int)
+0:8 'y' ( temp int)
+0:11 Sequence
+0:11 move second child to first child ( temp int)
+0:11 'z' ( temp int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Loop with condition tested first
+0:11 Loop Condition
+0:11 Compare Less Than ( temp bool)
+0:11 'z' ( temp int)
+0:11 Constant:
+0:11 5 (const int)
+0:11 No loop body
+0:11 Loop Terminal Expression
+0:11 Pre-Increment ( temp int)
+0:11 'z' ( temp int)
+0:13 Branch: Return with expression
+0:13 Constant:
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:3 Function Definition: main( ( temp void)
+0:3 Function Parameters:
+0:? Sequence
+0:3 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:3 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3 Function Definition: @main( ( temp 4-component vector of float)
+0:3 Function Parameters:
+0:? Sequence
+0:5 Sequence
+0:5 move second child to first child ( temp int)
+0:5 'x' ( temp int)
+0:5 Constant:
+0:5 0 (const int)
+0:5 Loop with condition tested first
+0:5 Loop Condition
+0:5 Compare Less Than ( temp bool)
+0:5 'x' ( temp int)
+0:5 Constant:
+0:5 5 (const int)
+0:5 No loop body
+0:5 Loop Terminal Expression
+0:5 Pre-Increment ( temp int)
+0:5 'x' ( temp int)
+0:8 Sequence
+0:8 move second child to first child ( temp int)
+0:8 'y' ( temp int)
+0:8 Constant:
+0:8 0 (const int)
+0:8 Loop with condition tested first
+0:8 Loop Condition
+0:8 Compare Less Than ( temp bool)
+0:8 'y' ( temp int)
+0:8 Constant:
+0:8 5 (const int)
+0:8 No loop body
+0:8 Loop Terminal Expression
+0:8 Pre-Increment ( temp int)
+0:8 'y' ( temp int)
+0:11 Sequence
+0:11 move second child to first child ( temp int)
+0:11 'z' ( temp int)
+0:11 Constant:
+0:11 0 (const int)
+0:11 Loop with condition tested first
+0:11 Loop Condition
+0:11 Compare Less Than ( temp bool)
+0:11 'z' ( temp int)
+0:11 Constant:
+0:11 5 (const int)
+0:11 No loop body
+0:11 Loop Terminal Expression
+0:11 Pre-Increment ( temp int)
+0:11 'z' ( temp int)
+0:13 Branch: Return with expression
+0:13 Constant:
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:3 Function Definition: main( ( temp void)
+0:3 Function Parameters:
+0:? Sequence
+0:3 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:3 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 54
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 52
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 13 "x"
+ Name 27 "y"
+ Name 37 "z"
+ Name 52 "@entryPointOutput"
+ Decorate 52(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeInt 32 1
+ 12: TypePointer Function 11(int)
+ 14: 11(int) Constant 0
+ 21: 11(int) Constant 5
+ 22: TypeBool
+ 25: 11(int) Constant 1
+ 47: 6(float) Constant 0
+ 48: 7(fvec4) ConstantComposite 47 47 47 47
+ 51: TypePointer Output 7(fvec4)
+52(@entryPointOutput): 51(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 53: 7(fvec4) FunctionCall 9(@main()
+ Store 52(@entryPointOutput) 53
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 13(x): 12(ptr) Variable Function
+ 27(y): 12(ptr) Variable Function
+ 37(z): 12(ptr) Variable Function
+ Store 13(x) 14
+ Branch 15
+ 15: Label
+ LoopMerge 17 18 Unroll
+ Branch 19
+ 19: Label
+ 20: 11(int) Load 13(x)
+ 23: 22(bool) SLessThan 20 21
+ BranchConditional 23 16 17
+ 16: Label
+ Branch 18
+ 18: Label
+ 24: 11(int) Load 13(x)
+ 26: 11(int) IAdd 24 25
+ Store 13(x) 26
+ Branch 15
+ 17: Label
+ Store 27(y) 14
+ Branch 28
+ 28: Label
+ LoopMerge 30 31 DontUnroll
+ Branch 32
+ 32: Label
+ 33: 11(int) Load 27(y)
+ 34: 22(bool) SLessThan 33 21
+ BranchConditional 34 29 30
+ 29: Label
+ Branch 31
+ 31: Label
+ 35: 11(int) Load 27(y)
+ 36: 11(int) IAdd 35 25
+ Store 27(y) 36
+ Branch 28
+ 30: Label
+ Store 37(z) 14
+ Branch 38
+ 38: Label
+ LoopMerge 40 41 None
+ Branch 42
+ 42: Label
+ 43: 11(int) Load 37(z)
+ 44: 22(bool) SLessThan 43 21
+ BranchConditional 44 39 40
+ 39: Label
+ Branch 41
+ 41: Label
+ 45: 11(int) Load 37(z)
+ 46: 11(int) IAdd 45 25
+ Store 37(z) 46
+ Branch 38
+ 40: Label
+ ReturnValue 48
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out
index cd0dbbf5d73..74c4fb6899f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out
@@ -1,5 +1,5 @@
hlsl.matNx1.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: TestMatNx1( ( temp void)
@@ -65,19 +65,19 @@ gl_FragCoord origin is upper left
0:? Sequence
0:27 Sequence
0:27 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:27 color: direct index for structure ( temp 4-component vector of float)
0:27 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:27 Constant:
0:27 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: TestMatNx1( ( temp void)
@@ -143,16 +143,16 @@ gl_FragCoord origin is upper left
0:? Sequence
0:27 Sequence
0:27 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:27 color: direct index for structure ( temp 4-component vector of float)
0:27 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:27 Constant:
0:27 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 77
Capability Shader
@@ -160,6 +160,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 74
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 6 "TestMatNx1("
Name 10 "PS_OUTPUT"
@@ -181,8 +182,8 @@ gl_FragCoord origin is upper left
Name 58 "r13"
Name 59 "f1x4"
Name 63 "ps_output"
- Name 74 "color"
- Decorate 74(color) Location 0
+ Name 74 "@entryPointOutput.color"
+ Decorate 74(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
8: TypeFloat 32
@@ -213,12 +214,12 @@ gl_FragCoord origin is upper left
67: 9(fvec4) ConstantComposite 66 66 66 66
68: TypePointer Function 9(fvec4)
73: TypePointer Output 9(fvec4)
- 74(color): 73(ptr) Variable Output
+74(@entryPointOutput.color): 73(ptr) Variable Output
4(main): 2 Function None 3
5: Label
75:10(PS_OUTPUT) FunctionCall 12(@main()
76: 9(fvec4) CompositeExtract 75 0
- Store 74(color) 76
+ Store 74(@entryPointOutput.color) 76
Return
FunctionEnd
6(TestMatNx1(): 2 Function None 3
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out
index b1c5762c8d9..aff329bc5ba 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out
@@ -1,5 +1,5 @@
hlsl.matType.bool.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: TestBoolMatTypes( ( temp void)
@@ -105,19 +105,19 @@ gl_FragCoord origin is upper left
0:? Sequence
0:49 Sequence
0:49 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:49 color: direct index for structure ( temp 4-component vector of float)
0:49 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:49 Constant:
0:49 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: TestBoolMatTypes( ( temp void)
@@ -223,16 +223,16 @@ gl_FragCoord origin is upper left
0:? Sequence
0:49 Sequence
0:49 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:49 color: direct index for structure ( temp 4-component vector of float)
0:49 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:49 Constant:
0:49 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 130
Capability Shader
@@ -240,6 +240,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 127
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 6 "TestBoolMatTypes("
Name 10 "PS_OUTPUT"
@@ -278,8 +279,8 @@ gl_FragCoord origin is upper left
Name 111 "r33"
Name 112 "b4x4"
Name 116 "ps_output"
- Name 127 "color"
- Decorate 127(color) Location 0
+ Name 127 "@entryPointOutput.color"
+ Decorate 127(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
8: TypeFloat 32
@@ -330,12 +331,12 @@ gl_FragCoord origin is upper left
120: 9(fvec4) ConstantComposite 119 119 119 119
121: TypePointer Function 9(fvec4)
126: TypePointer Output 9(fvec4)
- 127(color): 126(ptr) Variable Output
+127(@entryPointOutput.color): 126(ptr) Variable Output
4(main): 2 Function None 3
5: Label
128:10(PS_OUTPUT) FunctionCall 12(@main()
129: 9(fvec4) CompositeExtract 128 0
- Store 127(color) 129
+ Store 127(@entryPointOutput.color) 129
Return
FunctionEnd
6(TestBoolMatTypes(): 2 Function None 3
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out
index ee40879880e..1d892b55b9f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out
@@ -1,5 +1,5 @@
hlsl.matType.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: ShaderFunction(vf1;f1; ( temp 1-component vector of float)
@@ -17,7 +17,7 @@ Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: ShaderFunction(vf1;f1; ( temp 1-component vector of float)
@@ -31,7 +31,7 @@ gl_FragCoord origin is upper left
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 1-component vector of float f1, uniform 1X1 matrix of float fmat11, uniform 4X1 matrix of float fmat41, uniform 1X2 matrix of float fmat12, uniform 2X3 matrix of double dmat23, uniform 4X4 matrix of int int44})
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 30
Capability Shader
@@ -40,6 +40,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "ShaderFunction(vf1;f1;"
Name 9 "inFloat1"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out
index aef78623978..807b8b9fe08 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out
@@ -1,5 +1,5 @@
hlsl.matType.int.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: TestIntMatTypes( ( temp void)
@@ -188,19 +188,19 @@ gl_FragCoord origin is upper left
0:? Sequence
0:93 Sequence
0:93 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:93 color: direct index for structure ( temp 4-component vector of float)
0:93 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:93 Constant:
0:93 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: TestIntMatTypes( ( temp void)
@@ -389,16 +389,16 @@ gl_FragCoord origin is upper left
0:? Sequence
0:93 Sequence
0:93 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:93 color: direct index for structure ( temp 4-component vector of float)
0:93 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:93 Constant:
0:93 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 232
Capability Shader
@@ -406,6 +406,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 229
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 6 "TestIntMatTypes("
Name 8 "TestUintMatTypes("
@@ -477,8 +478,8 @@ gl_FragCoord origin is upper left
Name 214 "r33"
Name 215 "u4x4"
Name 219 "ps_output"
- Name 229 "color"
- Decorate 229(color) Location 0
+ Name 229 "@entryPointOutput.color"
+ Decorate 229(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
10: TypeFloat 32
@@ -565,12 +566,12 @@ gl_FragCoord origin is upper left
222: 11(fvec4) ConstantComposite 221 221 221 221
223: TypePointer Function 11(fvec4)
228: TypePointer Output 11(fvec4)
- 229(color): 228(ptr) Variable Output
+229(@entryPointOutput.color): 228(ptr) Variable Output
4(main): 2 Function None 3
5: Label
230:12(PS_OUTPUT) FunctionCall 14(@main()
231: 11(fvec4) CompositeExtract 230 0
- Store 229(color) 231
+ Store 229(@entryPointOutput.color) 231
Return
FunctionEnd
6(TestIntMatTypes(): 2 Function None 3
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-1.frag.out
new file mode 100644
index 00000000000..1370c19cfd6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-1.frag.out
@@ -0,0 +1,187 @@
+hlsl.matpack-1.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:23 Function Definition: @main( ( temp 4-component vector of float)
+0:23 Function Parameters:
+0:? Sequence
+0:25 Branch: Return with expression
+0:24 add ( temp 4-component vector of float)
+0:24 vector-times-matrix ( temp 4-component vector of float)
+0:24 vec1: direct index for structure ( temp 4-component vector of float)
+0:24 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo})
+0:24 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:24 Constant:
+0:24 0 (const uint)
+0:24 Constant:
+0:24 2 (const int)
+0:24 mat1: direct index for structure (layout( row_major) temp 4X4 matrix of float)
+0:24 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo})
+0:24 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:24 Constant:
+0:24 0 (const uint)
+0:24 Constant:
+0:24 0 (const int)
+0:25 vector-times-matrix ( temp 4-component vector of float)
+0:25 vec1: direct index for structure ( temp 4-component vector of float)
+0:25 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1})
+0:25 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:25 Constant:
+0:25 1 (const uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 mat1: direct index for structure (layout( column_major) temp 4X4 matrix of float)
+0:25 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1})
+0:25 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:25 Constant:
+0:25 1 (const uint)
+0:25 Constant:
+0:25 0 (const int)
+0:23 Function Definition: main( ( temp void)
+0:23 Function Parameters:
+0:? Sequence
+0:23 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:23 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:23 Function Definition: @main( ( temp 4-component vector of float)
+0:23 Function Parameters:
+0:? Sequence
+0:25 Branch: Return with expression
+0:24 add ( temp 4-component vector of float)
+0:24 vector-times-matrix ( temp 4-component vector of float)
+0:24 vec1: direct index for structure ( temp 4-component vector of float)
+0:24 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo})
+0:24 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:24 Constant:
+0:24 0 (const uint)
+0:24 Constant:
+0:24 2 (const int)
+0:24 mat1: direct index for structure (layout( row_major) temp 4X4 matrix of float)
+0:24 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo})
+0:24 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:24 Constant:
+0:24 0 (const uint)
+0:24 Constant:
+0:24 0 (const int)
+0:25 vector-times-matrix ( temp 4-component vector of float)
+0:25 vec1: direct index for structure ( temp 4-component vector of float)
+0:25 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1})
+0:25 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:25 Constant:
+0:25 1 (const uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 mat1: direct index for structure (layout( column_major) temp 4X4 matrix of float)
+0:25 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1})
+0:25 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:25 Constant:
+0:25 1 (const uint)
+0:25 Constant:
+0:25 0 (const int)
+0:23 Function Definition: main( ( temp void)
+0:23 Function Parameters:
+0:? Sequence
+0:23 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:23 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, temp 4-component vector of float vec1, temp float foo} g_MyBuffer1, layout( row_major std140) uniform structure{layout( column_major) temp 4X4 matrix of float mat1, temp 4-component vector of float vec1} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 39
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 37
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 12 "MyBuffer1"
+ MemberName 12(MyBuffer1) 0 "mat1"
+ MemberName 12(MyBuffer1) 1 "mat2"
+ MemberName 12(MyBuffer1) 2 "vec1"
+ MemberName 12(MyBuffer1) 3 "foo"
+ Name 13 "MyBuffer2"
+ MemberName 13(MyBuffer2) 0 "mat1"
+ MemberName 13(MyBuffer2) 1 "vec1"
+ Name 14 "Example"
+ MemberName 14(Example) 0 "g_MyBuffer1"
+ MemberName 14(Example) 1 "g_MyBuffer2"
+ MemberName 14(Example) 2 "mat1a"
+ Name 16 ""
+ Name 37 "@entryPointOutput"
+ MemberDecorate 12(MyBuffer1) 0 RowMajor
+ MemberDecorate 12(MyBuffer1) 0 Offset 0
+ MemberDecorate 12(MyBuffer1) 0 MatrixStride 16
+ MemberDecorate 12(MyBuffer1) 1 ColMajor
+ MemberDecorate 12(MyBuffer1) 1 Offset 64
+ MemberDecorate 12(MyBuffer1) 1 MatrixStride 16
+ MemberDecorate 12(MyBuffer1) 2 Offset 128
+ MemberDecorate 12(MyBuffer1) 3 Offset 144
+ MemberDecorate 13(MyBuffer2) 0 ColMajor
+ MemberDecorate 13(MyBuffer2) 0 Offset 0
+ MemberDecorate 13(MyBuffer2) 0 MatrixStride 16
+ MemberDecorate 13(MyBuffer2) 1 Offset 64
+ MemberDecorate 14(Example) 0 Offset 0
+ MemberDecorate 14(Example) 1 Offset 160
+ MemberDecorate 14(Example) 2 RowMajor
+ MemberDecorate 14(Example) 2 Offset 240
+ MemberDecorate 14(Example) 2 MatrixStride 16
+ Decorate 14(Example) Block
+ Decorate 16 DescriptorSet 0
+ Decorate 37(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeMatrix 7(fvec4) 4
+ 12(MyBuffer1): TypeStruct 11 11 7(fvec4) 6(float)
+ 13(MyBuffer2): TypeStruct 11 7(fvec4)
+ 14(Example): TypeStruct 12(MyBuffer1) 13(MyBuffer2) 11
+ 15: TypePointer Uniform 14(Example)
+ 16: 15(ptr) Variable Uniform
+ 17: TypeInt 32 1
+ 18: 17(int) Constant 0
+ 19: 17(int) Constant 2
+ 20: TypePointer Uniform 7(fvec4)
+ 23: TypePointer Uniform 11
+ 27: 17(int) Constant 1
+ 36: TypePointer Output 7(fvec4)
+37(@entryPointOutput): 36(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 38: 7(fvec4) FunctionCall 9(@main()
+ Store 37(@entryPointOutput) 38
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 21: 20(ptr) AccessChain 16 18 19
+ 22: 7(fvec4) Load 21
+ 24: 23(ptr) AccessChain 16 18 18
+ 25: 11 Load 24
+ 26: 7(fvec4) VectorTimesMatrix 22 25
+ 28: 20(ptr) AccessChain 16 27 27
+ 29: 7(fvec4) Load 28
+ 30: 23(ptr) AccessChain 16 27 18
+ 31: 11 Load 30
+ 32: 7(fvec4) VectorTimesMatrix 29 31
+ 33: 7(fvec4) FAdd 26 32
+ ReturnValue 33
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-pragma.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-pragma.frag.out
new file mode 100644
index 00000000000..187f5d03c25
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-pragma.frag.out
@@ -0,0 +1,268 @@
+hlsl.matpack-pragma.frag
+WARNING: 0:19: 'random_string_foo' : unknown pack_matrix pragma value
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:29 Function Definition: @main( ( temp 4-component vector of float)
+0:29 Function Parameters:
+0:? Sequence
+0:32 Branch: Return with expression
+0:32 add ( temp 4-component vector of float)
+0:32 add ( temp 4-component vector of float)
+0:31 add ( temp 4-component vector of float)
+0:31 add ( temp 4-component vector of float)
+0:31 add ( temp 4-component vector of float)
+0:31 direct index (layout( row_major) temp 4-component vector of float)
+0:31 mat1: direct index for structure (layout( row_major) temp 4X4 matrix of float)
+0:31 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3})
+0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:31 Constant:
+0:31 0 (const uint)
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 direct index (layout( column_major) temp 4-component vector of float)
+0:31 mat2: direct index for structure (layout( column_major) temp 4X4 matrix of float)
+0:31 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3})
+0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:31 Constant:
+0:31 0 (const uint)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 direct index (layout( column_major) temp 4-component vector of float)
+0:31 mat3: direct index for structure (layout( column_major) temp 4X4 matrix of float)
+0:31 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3})
+0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:31 Constant:
+0:31 0 (const uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:32 direct index (layout( row_major) temp 4-component vector of float)
+0:32 mat1: direct index for structure (layout( row_major) temp 4X4 matrix of float)
+0:32 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3})
+0:32 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:32 Constant:
+0:32 1 (const uint)
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 direct index (layout( column_major) temp 4-component vector of float)
+0:32 mat2: direct index for structure (layout( column_major) temp 4X4 matrix of float)
+0:32 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3})
+0:32 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:32 Constant:
+0:32 1 (const uint)
+0:32 Constant:
+0:32 1 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 direct index (layout( row_major) temp 4-component vector of float)
+0:32 mat3: direct index for structure (layout( row_major) temp 4X4 matrix of float)
+0:32 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3})
+0:32 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:32 Constant:
+0:32 1 (const uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:29 Function Definition: main( ( temp void)
+0:29 Function Parameters:
+0:? Sequence
+0:29 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:29 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:29 Function Definition: @main( ( temp 4-component vector of float)
+0:29 Function Parameters:
+0:? Sequence
+0:32 Branch: Return with expression
+0:32 add ( temp 4-component vector of float)
+0:32 add ( temp 4-component vector of float)
+0:31 add ( temp 4-component vector of float)
+0:31 add ( temp 4-component vector of float)
+0:31 add ( temp 4-component vector of float)
+0:31 direct index (layout( row_major) temp 4-component vector of float)
+0:31 mat1: direct index for structure (layout( row_major) temp 4X4 matrix of float)
+0:31 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3})
+0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:31 Constant:
+0:31 0 (const uint)
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 direct index (layout( column_major) temp 4-component vector of float)
+0:31 mat2: direct index for structure (layout( column_major) temp 4X4 matrix of float)
+0:31 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3})
+0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:31 Constant:
+0:31 0 (const uint)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 direct index (layout( column_major) temp 4-component vector of float)
+0:31 mat3: direct index for structure (layout( column_major) temp 4X4 matrix of float)
+0:31 g_MyBuffer1: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3})
+0:31 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:31 Constant:
+0:31 0 (const uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:32 direct index (layout( row_major) temp 4-component vector of float)
+0:32 mat1: direct index for structure (layout( row_major) temp 4X4 matrix of float)
+0:32 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3})
+0:32 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:32 Constant:
+0:32 1 (const uint)
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 direct index (layout( column_major) temp 4-component vector of float)
+0:32 mat2: direct index for structure (layout( column_major) temp 4X4 matrix of float)
+0:32 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3})
+0:32 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:32 Constant:
+0:32 1 (const uint)
+0:32 Constant:
+0:32 1 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 direct index (layout( row_major) temp 4-component vector of float)
+0:32 mat3: direct index for structure (layout( row_major) temp 4X4 matrix of float)
+0:32 g_MyBuffer2: direct index for structure (layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3})
+0:32 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:32 Constant:
+0:32 1 (const uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:29 Function Definition: main( ( temp void)
+0:29 Function Parameters:
+0:? Sequence
+0:29 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:29 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( column_major) temp 4X4 matrix of float mat3} g_MyBuffer1, layout( row_major std140) uniform structure{layout( row_major) temp 4X4 matrix of float mat1, layout( column_major) temp 4X4 matrix of float mat2, layout( row_major) temp 4X4 matrix of float mat3} g_MyBuffer2, layout( row_major std140) uniform 4X4 matrix of float mat1a})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 44
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 42
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 12 "MyBuffer1"
+ MemberName 12(MyBuffer1) 0 "mat1"
+ MemberName 12(MyBuffer1) 1 "mat2"
+ MemberName 12(MyBuffer1) 2 "mat3"
+ Name 13 "MyBuffer2"
+ MemberName 13(MyBuffer2) 0 "mat1"
+ MemberName 13(MyBuffer2) 1 "mat2"
+ MemberName 13(MyBuffer2) 2 "mat3"
+ Name 14 "Example"
+ MemberName 14(Example) 0 "g_MyBuffer1"
+ MemberName 14(Example) 1 "g_MyBuffer2"
+ MemberName 14(Example) 2 "mat1a"
+ Name 16 ""
+ Name 42 "@entryPointOutput"
+ MemberDecorate 12(MyBuffer1) 0 RowMajor
+ MemberDecorate 12(MyBuffer1) 0 Offset 0
+ MemberDecorate 12(MyBuffer1) 0 MatrixStride 16
+ MemberDecorate 12(MyBuffer1) 1 ColMajor
+ MemberDecorate 12(MyBuffer1) 1 Offset 64
+ MemberDecorate 12(MyBuffer1) 1 MatrixStride 16
+ MemberDecorate 12(MyBuffer1) 2 ColMajor
+ MemberDecorate 12(MyBuffer1) 2 Offset 128
+ MemberDecorate 12(MyBuffer1) 2 MatrixStride 16
+ MemberDecorate 13(MyBuffer2) 0 RowMajor
+ MemberDecorate 13(MyBuffer2) 0 Offset 0
+ MemberDecorate 13(MyBuffer2) 0 MatrixStride 16
+ MemberDecorate 13(MyBuffer2) 1 ColMajor
+ MemberDecorate 13(MyBuffer2) 1 Offset 64
+ MemberDecorate 13(MyBuffer2) 1 MatrixStride 16
+ MemberDecorate 13(MyBuffer2) 2 RowMajor
+ MemberDecorate 13(MyBuffer2) 2 Offset 128
+ MemberDecorate 13(MyBuffer2) 2 MatrixStride 16
+ MemberDecorate 14(Example) 0 Offset 0
+ MemberDecorate 14(Example) 1 Offset 192
+ MemberDecorate 14(Example) 2 RowMajor
+ MemberDecorate 14(Example) 2 Offset 384
+ MemberDecorate 14(Example) 2 MatrixStride 16
+ Decorate 14(Example) Block
+ Decorate 16 DescriptorSet 0
+ Decorate 42(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeMatrix 7(fvec4) 4
+ 12(MyBuffer1): TypeStruct 11 11 11
+ 13(MyBuffer2): TypeStruct 11 11 11
+ 14(Example): TypeStruct 12(MyBuffer1) 13(MyBuffer2) 11
+ 15: TypePointer Uniform 14(Example)
+ 16: 15(ptr) Variable Uniform
+ 17: TypeInt 32 1
+ 18: 17(int) Constant 0
+ 19: TypePointer Uniform 7(fvec4)
+ 22: 17(int) Constant 1
+ 26: 17(int) Constant 2
+ 41: TypePointer Output 7(fvec4)
+42(@entryPointOutput): 41(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 43: 7(fvec4) FunctionCall 9(@main()
+ Store 42(@entryPointOutput) 43
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 20: 19(ptr) AccessChain 16 18 18 18
+ 21: 7(fvec4) Load 20
+ 23: 19(ptr) AccessChain 16 18 22 18
+ 24: 7(fvec4) Load 23
+ 25: 7(fvec4) FAdd 21 24
+ 27: 19(ptr) AccessChain 16 18 26 18
+ 28: 7(fvec4) Load 27
+ 29: 7(fvec4) FAdd 25 28
+ 30: 19(ptr) AccessChain 16 22 18 18
+ 31: 7(fvec4) Load 30
+ 32: 7(fvec4) FAdd 29 31
+ 33: 19(ptr) AccessChain 16 22 22 18
+ 34: 7(fvec4) Load 33
+ 35: 7(fvec4) FAdd 32 34
+ 36: 19(ptr) AccessChain 16 22 26 18
+ 37: 7(fvec4) Load 36
+ 38: 7(fvec4) FAdd 35 37
+ ReturnValue 38
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out
index 69c774ba06b..64c21cd1cdb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out
@@ -1,5 +1,5 @@
hlsl.matrixSwizzle.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:2 Function Definition: @ShaderFunction(f1; ( temp void)
0:2 Function Parameters:
@@ -339,7 +339,7 @@ Shader version: 450
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:2 Function Definition: @ShaderFunction(f1; ( temp void)
0:2 Function Parameters:
@@ -677,13 +677,14 @@ Shader version: 450
Missing functionality: matrix swizzle
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 118
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "ShaderFunction" 81
+ Source HLSL 500
Name 4 "ShaderFunction"
Name 10 "@ShaderFunction(f1;"
Name 9 "inf"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out
index 6f2339c2fe4..8d3910cd99d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out
@@ -1,5 +1,5 @@
hlsl.matrixindex.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -124,20 +124,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:10 Color: direct index for structure ( temp 4-component vector of float)
0:10 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:10 Constant:
0:10 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int idx, uniform 3X2 matrix of float um})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -262,17 +262,17 @@ gl_FragCoord origin is upper left
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:10 Color: direct index for structure ( temp 4-component vector of float)
0:10 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:10 Constant:
0:10 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int idx, uniform 3X2 matrix of float um})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 83
Capability Shader
@@ -280,6 +280,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 80
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -307,14 +308,14 @@ gl_FragCoord origin is upper left
Name 60 "indexable"
Name 63 "r0c"
Name 71 "psout"
- Name 80 "Color"
+ Name 80 "@entryPointOutput.Color"
MemberDecorate 52($Global) 0 Offset 0
MemberDecorate 52($Global) 1 RowMajor
MemberDecorate 52($Global) 1 Offset 16
MemberDecorate 52($Global) 1 MatrixStride 16
Decorate 52($Global) Block
Decorate 54 DescriptorSet 0
- Decorate 80(Color) Location 0
+ Decorate 80(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -356,12 +357,12 @@ gl_FragCoord origin is upper left
70: TypePointer Function 8(PS_OUTPUT)
74: TypePointer Function 7(fvec4)
79: TypePointer Output 7(fvec4)
- 80(Color): 79(ptr) Variable Output
+80(@entryPointOutput.Color): 79(ptr) Variable Output
4(main): 2 Function None 3
5: Label
81:8(PS_OUTPUT) FunctionCall 10(@main()
82: 7(fvec4) CompositeExtract 81 0
- Store 80(Color) 82
+ Store 80(@entryPointOutput.Color) 82
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.max.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.max.frag.out
index 6a0762ed0c0..4200373a8d2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.max.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.max.frag.out
@@ -1,5 +1,5 @@
hlsl.max.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
@@ -34,7 +34,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
@@ -66,7 +66,7 @@ gl_FragCoord origin is upper left
0:? 'input2' (layout( location=1) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 33
Capability Shader
@@ -74,6 +74,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 21 24 27
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 12 "@PixelShaderFunction(vf4;vf4;"
Name 10 "input1"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.memberFunCall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.memberFunCall.frag.out
new file mode 100644
index 00000000000..0a0219b3e12
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.memberFunCall.frag.out
@@ -0,0 +1,264 @@
+hlsl.memberFunCall.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:1 Function Definition: method3(f1; ( temp float)
+0:1 Function Parameters:
+0:1 'a' ( in float)
+0:? Sequence
+0:1 Branch: Return with expression
+0:1 Constant:
+0:1 1.000000
+0:4 Function Definition: myContext::method1( ( temp float)
+0:4 Function Parameters:
+0:4 '@this' ( temp structure{ temp float f})
+0:? Sequence
+0:4 Branch: Return with expression
+0:4 Function Call: myContext::method2( ( temp float)
+0:? '@this' ( temp structure{ temp float f})
+0:5 Function Definition: myContext::method2( ( temp float)
+0:5 Function Parameters:
+0:5 '@this' ( temp structure{ temp float f})
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 Function Call: myContext::method3(f1; ( temp float)
+0:? '@this' ( temp structure{ temp float f})
+0:5 Constant:
+0:5 1.000000
+0:6 Function Definition: myContext::method3(f1; ( temp float)
+0:6 Function Parameters:
+0:6 '@this' ( temp structure{ temp float f})
+0:6 'a' ( in float)
+0:? Sequence
+0:6 Branch: Return with expression
+0:6 Function Call: myContext::method4(f1;f1; ( temp float)
+0:? '@this' ( temp structure{ temp float f})
+0:6 'a' ( in float)
+0:6 'a' ( in float)
+0:7 Function Definition: myContext::method4(f1;f1; ( temp float)
+0:7 Function Parameters:
+0:7 '@this' ( temp structure{ temp float f})
+0:7 'a' ( in float)
+0:7 'b' ( in float)
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 add ( temp float)
+0:7 add ( temp float)
+0:7 'a' ( in float)
+0:7 'b' ( in float)
+0:7 f: direct index for structure ( temp float)
+0:7 '@this' ( temp structure{ temp float f})
+0:7 Constant:
+0:7 0 (const uint)
+0:12 Function Definition: @main( ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? Sequence
+0:14 move second child to first child ( temp float)
+0:14 f: direct index for structure ( temp float)
+0:14 'context' ( temp structure{ temp float f})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 3.000000
+0:15 Branch: Return with expression
+0:15 Construct vec4 ( temp 4-component vector of float)
+0:15 Function Call: myContext::method1( ( temp float)
+0:15 'context' ( temp structure{ temp float f})
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:12 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:1 Function Definition: method3(f1; ( temp float)
+0:1 Function Parameters:
+0:1 'a' ( in float)
+0:? Sequence
+0:1 Branch: Return with expression
+0:1 Constant:
+0:1 1.000000
+0:4 Function Definition: myContext::method1( ( temp float)
+0:4 Function Parameters:
+0:4 '@this' ( temp structure{ temp float f})
+0:? Sequence
+0:4 Branch: Return with expression
+0:4 Function Call: myContext::method2( ( temp float)
+0:? '@this' ( temp structure{ temp float f})
+0:5 Function Definition: myContext::method2( ( temp float)
+0:5 Function Parameters:
+0:5 '@this' ( temp structure{ temp float f})
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 Function Call: myContext::method3(f1; ( temp float)
+0:? '@this' ( temp structure{ temp float f})
+0:5 Constant:
+0:5 1.000000
+0:6 Function Definition: myContext::method3(f1; ( temp float)
+0:6 Function Parameters:
+0:6 '@this' ( temp structure{ temp float f})
+0:6 'a' ( in float)
+0:? Sequence
+0:6 Branch: Return with expression
+0:6 Function Call: myContext::method4(f1;f1; ( temp float)
+0:? '@this' ( temp structure{ temp float f})
+0:6 'a' ( in float)
+0:6 'a' ( in float)
+0:7 Function Definition: myContext::method4(f1;f1; ( temp float)
+0:7 Function Parameters:
+0:7 '@this' ( temp structure{ temp float f})
+0:7 'a' ( in float)
+0:7 'b' ( in float)
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 add ( temp float)
+0:7 add ( temp float)
+0:7 'a' ( in float)
+0:7 'b' ( in float)
+0:7 f: direct index for structure ( temp float)
+0:7 '@this' ( temp structure{ temp float f})
+0:7 Constant:
+0:7 0 (const uint)
+0:12 Function Definition: @main( ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? Sequence
+0:14 move second child to first child ( temp float)
+0:14 f: direct index for structure ( temp float)
+0:14 'context' ( temp structure{ temp float f})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 3.000000
+0:15 Branch: Return with expression
+0:15 Construct vec4 ( temp 4-component vector of float)
+0:15 Function Call: myContext::method1( ( temp float)
+0:15 'context' ( temp structure{ temp float f})
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:12 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 73
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 71
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 10 "method3(f1;"
+ Name 9 "a"
+ Name 12 "myContext"
+ MemberName 12(myContext) 0 "f"
+ Name 16 "myContext::method1("
+ Name 15 "@this"
+ Name 19 "myContext::method2("
+ Name 18 "@this"
+ Name 24 "myContext::method3(f1;"
+ Name 22 "@this"
+ Name 23 "a"
+ Name 30 "myContext::method4(f1;f1;"
+ Name 27 "@this"
+ Name 28 "a"
+ Name 29 "b"
+ Name 34 "@main("
+ Name 42 "param"
+ Name 46 "param"
+ Name 48 "param"
+ Name 63 "context"
+ Name 71 "@entryPointOutput"
+ Decorate 71(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypePointer Function 6(float)
+ 8: TypeFunction 6(float) 7(ptr)
+ 12(myContext): TypeStruct 6(float)
+ 13: TypePointer Function 12(myContext)
+ 14: TypeFunction 6(float) 13(ptr)
+ 21: TypeFunction 6(float) 13(ptr) 7(ptr)
+ 26: TypeFunction 6(float) 13(ptr) 7(ptr) 7(ptr)
+ 32: TypeVector 6(float) 4
+ 33: TypeFunction 32(fvec4)
+ 36: 6(float) Constant 1065353216
+ 56: TypeInt 32 1
+ 57: 56(int) Constant 0
+ 64: 6(float) Constant 1077936128
+ 70: TypePointer Output 32(fvec4)
+71(@entryPointOutput): 70(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 72: 32(fvec4) FunctionCall 34(@main()
+ Store 71(@entryPointOutput) 72
+ Return
+ FunctionEnd
+ 10(method3(f1;): 6(float) Function None 8
+ 9(a): 7(ptr) FunctionParameter
+ 11: Label
+ ReturnValue 36
+ FunctionEnd
+16(myContext::method1(): 6(float) Function None 14
+ 15(@this): 13(ptr) FunctionParameter
+ 17: Label
+ 39: 6(float) FunctionCall 19(myContext::method2() 15(@this)
+ ReturnValue 39
+ FunctionEnd
+19(myContext::method2(): 6(float) Function None 14
+ 18(@this): 13(ptr) FunctionParameter
+ 20: Label
+ 42(param): 7(ptr) Variable Function
+ Store 42(param) 36
+ 43: 6(float) FunctionCall 24(myContext::method3(f1;) 18(@this) 42(param)
+ ReturnValue 43
+ FunctionEnd
+24(myContext::method3(f1;): 6(float) Function None 21
+ 22(@this): 13(ptr) FunctionParameter
+ 23(a): 7(ptr) FunctionParameter
+ 25: Label
+ 46(param): 7(ptr) Variable Function
+ 48(param): 7(ptr) Variable Function
+ 47: 6(float) Load 23(a)
+ Store 46(param) 47
+ 49: 6(float) Load 23(a)
+ Store 48(param) 49
+ 50: 6(float) FunctionCall 30(myContext::method4(f1;f1;) 22(@this) 46(param) 48(param)
+ ReturnValue 50
+ FunctionEnd
+30(myContext::method4(f1;f1;): 6(float) Function None 26
+ 27(@this): 13(ptr) FunctionParameter
+ 28(a): 7(ptr) FunctionParameter
+ 29(b): 7(ptr) FunctionParameter
+ 31: Label
+ 53: 6(float) Load 28(a)
+ 54: 6(float) Load 29(b)
+ 55: 6(float) FAdd 53 54
+ 58: 7(ptr) AccessChain 27(@this) 57
+ 59: 6(float) Load 58
+ 60: 6(float) FAdd 55 59
+ ReturnValue 60
+ FunctionEnd
+ 34(@main(): 32(fvec4) Function None 33
+ 35: Label
+ 63(context): 13(ptr) Variable Function
+ 65: 7(ptr) AccessChain 63(context) 57
+ Store 65 64
+ 66: 6(float) FunctionCall 16(myContext::method1() 63(context)
+ 67: 32(fvec4) CompositeConstruct 66 66 66 66
+ ReturnValue 67
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out
index 257d7e48b9f..3c058eaa362 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out
@@ -1,5 +1,5 @@
hlsl.mintypes.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -37,20 +37,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:9 Sequence
0:9 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:9 Color: direct index for structure ( temp 4-component vector of float)
0:9 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:9 Constant:
0:9 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform mediump float b1a, uniform mediump float b1b})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -88,17 +88,17 @@ gl_FragCoord origin is upper left
0:? Sequence
0:9 Sequence
0:9 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:9 Color: direct index for structure ( temp 4-component vector of float)
0:9 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:9 Constant:
0:9 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform mediump float b1a, uniform mediump float b1b})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 70
Capability Shader
@@ -106,6 +106,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 64
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -121,7 +122,7 @@ gl_FragCoord origin is upper left
Name 46 "mu16_2"
Name 49 "mu16"
Name 54 "psout"
- Name 64 "Color"
+ Name 64 "@entryPointOutput.Color"
Name 67 "$Global"
MemberName 67($Global) 0 "b1a"
MemberName 67($Global) 1 "b1b"
@@ -156,7 +157,7 @@ gl_FragCoord origin is upper left
Decorate 50 RelaxedPrecision
Decorate 51 RelaxedPrecision
Decorate 52 RelaxedPrecision
- Decorate 64(Color) Location 0
+ Decorate 64(@entryPointOutput.Color) Location 0
MemberDecorate 67($Global) 0 RelaxedPrecision
MemberDecorate 67($Global) 0 Offset 0
MemberDecorate 67($Global) 1 RelaxedPrecision
@@ -186,7 +187,7 @@ gl_FragCoord origin is upper left
57: 7(fvec4) ConstantComposite 56 56 56 56
58: TypePointer Function 7(fvec4)
63: TypePointer Output 7(fvec4)
- 64(Color): 63(ptr) Variable Output
+64(@entryPointOutput.Color): 63(ptr) Variable Output
67($Global): TypeStruct 6(float) 6(float)
68: TypePointer Uniform 67($Global)
69: 68(ptr) Variable Uniform
@@ -194,7 +195,7 @@ gl_FragCoord origin is upper left
5: Label
65:8(PS_OUTPUT) FunctionCall 10(@main()
66: 7(fvec4) CompositeExtract 65 0
- Store 64(Color) 66
+ Store 64(@entryPointOutput.Color) 66
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.negative.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.negative.frag.out
new file mode 100644
index 00000000000..36f41377d1d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.negative.frag.out
@@ -0,0 +1,68 @@
+hlsl.mip.negative.frag
+ERROR: 0:5: '' : unterminated mips operator:
+ERROR: 1 compilation errors. No code generated.
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:4 Function Definition: @main( ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:? Sequence
+0:? textureFetch ( temp 4-component vector of float)
+0:5 'g_tTex2df4' ( uniform texture2D)
+0:? Constant:
+0:? 3 (const uint)
+0:? 4 (const uint)
+0:5 Constant:
+0:5 2 (const int)
+0:7 Branch: Return with expression
+0:7 Constant:
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tTex2df4' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:4 Function Definition: @main( ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:? Sequence
+0:? textureFetch ( temp 4-component vector of float)
+0:5 'g_tTex2df4' ( uniform texture2D)
+0:? Constant:
+0:? 3 (const uint)
+0:? 4 (const uint)
+0:5 Constant:
+0:5 2 (const int)
+0:7 Branch: Return with expression
+0:7 Constant:
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tTex2df4' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.negative2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.negative2.frag.out
new file mode 100644
index 00000000000..75cf95fc5a1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.negative2.frag.out
@@ -0,0 +1,74 @@
+hlsl.mip.negative2.frag
+ERROR: 0:5: 'r' : unexpected operator on texture type: uniform texture2D
+ERROR: 1 compilation errors. No code generated.
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:4 Function Definition: @main( ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:? Sequence
+0:5 direct index ( temp float)
+0:5 textureFetch ( temp 4-component vector of float)
+0:5 'g_tTex2df4' ( uniform texture2D)
+0:5 Constant:
+0:5 2 (const int)
+0:5 Constant:
+0:5 0 (const int)
+0:? Constant:
+0:? 3 (const uint)
+0:? 4 (const uint)
+0:7 Branch: Return with expression
+0:7 Constant:
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tTex2df4' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:4 Function Definition: @main( ( temp 4-component vector of float)
+0:4 Function Parameters:
+0:? Sequence
+0:5 direct index ( temp float)
+0:5 textureFetch ( temp 4-component vector of float)
+0:5 'g_tTex2df4' ( uniform texture2D)
+0:5 Constant:
+0:5 2 (const int)
+0:5 Constant:
+0:5 0 (const int)
+0:? Constant:
+0:? 3 (const uint)
+0:? 4 (const uint)
+0:7 Branch: Return with expression
+0:7 Constant:
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:4 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tTex2df4' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.operator.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.operator.frag.out
new file mode 100644
index 00000000000..804f3b2005e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.operator.frag.out
@@ -0,0 +1,209 @@
+hlsl.mip.operator.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5 Function Definition: @main( ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? Sequence
+0:13 Branch: Return with expression
+0:9 add ( temp 4-component vector of float)
+0:6 add ( temp 4-component vector of float)
+0:? textureFetch ( temp 4-component vector of float)
+0:6 'g_tTex2df4' ( uniform texture2D)
+0:? Constant:
+0:? 3 (const uint)
+0:? 4 (const uint)
+0:6 Constant:
+0:6 2 (const int)
+0:? textureFetch ( temp 4-component vector of float)
+0:9 'g_tTex2df4a' ( uniform texture2DArray)
+0:? Constant:
+0:? 6 (const uint)
+0:? 7 (const uint)
+0:? 8 (const uint)
+0:9 Constant:
+0:9 5 (const uint)
+0:13 textureFetch ( temp 4-component vector of float)
+0:13 'g_tTex2df4' ( uniform texture2D)
+0:13 Convert float to uint ( temp 2-component vector of uint)
+0:13 vector swizzle ( temp 2-component vector of float)
+0:? textureFetch ( temp 4-component vector of float)
+0:13 'g_tTex2df4' ( uniform texture2D)
+0:? Constant:
+0:? 14 (const uint)
+0:? 15 (const uint)
+0:13 Constant:
+0:13 13 (const int)
+0:13 Sequence
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Convert float to uint ( temp uint)
+0:13 direct index ( temp float)
+0:? textureFetch ( temp 4-component vector of float)
+0:13 'g_tTex2df4' ( uniform texture2D)
+0:? Constant:
+0:? 10 (const uint)
+0:? 11 (const uint)
+0:13 Constant:
+0:13 9 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:5 Function Definition: main( ( temp void)
+0:5 Function Parameters:
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:5 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tTex2df4a' ( uniform texture2DArray)
+0:? 'g_tTex2df4' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5 Function Definition: @main( ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? Sequence
+0:13 Branch: Return with expression
+0:9 add ( temp 4-component vector of float)
+0:6 add ( temp 4-component vector of float)
+0:? textureFetch ( temp 4-component vector of float)
+0:6 'g_tTex2df4' ( uniform texture2D)
+0:? Constant:
+0:? 3 (const uint)
+0:? 4 (const uint)
+0:6 Constant:
+0:6 2 (const int)
+0:? textureFetch ( temp 4-component vector of float)
+0:9 'g_tTex2df4a' ( uniform texture2DArray)
+0:? Constant:
+0:? 6 (const uint)
+0:? 7 (const uint)
+0:? 8 (const uint)
+0:9 Constant:
+0:9 5 (const uint)
+0:13 textureFetch ( temp 4-component vector of float)
+0:13 'g_tTex2df4' ( uniform texture2D)
+0:13 Convert float to uint ( temp 2-component vector of uint)
+0:13 vector swizzle ( temp 2-component vector of float)
+0:? textureFetch ( temp 4-component vector of float)
+0:13 'g_tTex2df4' ( uniform texture2D)
+0:? Constant:
+0:? 14 (const uint)
+0:? 15 (const uint)
+0:13 Constant:
+0:13 13 (const int)
+0:13 Sequence
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 1 (const int)
+0:13 Convert float to uint ( temp uint)
+0:13 direct index ( temp float)
+0:? textureFetch ( temp 4-component vector of float)
+0:13 'g_tTex2df4' ( uniform texture2D)
+0:? Constant:
+0:? 10 (const uint)
+0:? 11 (const uint)
+0:13 Constant:
+0:13 9 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:5 Function Definition: main( ( temp void)
+0:5 Function Parameters:
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:5 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tTex2df4a' ( uniform texture2DArray)
+0:? 'g_tTex2df4' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 61
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 59
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 13 "g_tTex2df4"
+ Name 25 "g_tTex2df4a"
+ Name 59 "@entryPointOutput"
+ Decorate 13(g_tTex2df4) DescriptorSet 0
+ Decorate 25(g_tTex2df4a) DescriptorSet 0
+ Decorate 59(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeImage 6(float) 2D sampled format:Unknown
+ 12: TypePointer UniformConstant 11
+ 13(g_tTex2df4): 12(ptr) Variable UniformConstant
+ 15: TypeInt 32 0
+ 16: TypeVector 15(int) 2
+ 17: 15(int) Constant 3
+ 18: 15(int) Constant 4
+ 19: 16(ivec2) ConstantComposite 17 18
+ 20: TypeInt 32 1
+ 21: 20(int) Constant 2
+ 23: TypeImage 6(float) 2D array sampled format:Unknown
+ 24: TypePointer UniformConstant 23
+ 25(g_tTex2df4a): 24(ptr) Variable UniformConstant
+ 27: TypeVector 15(int) 3
+ 28: 15(int) Constant 6
+ 29: 15(int) Constant 7
+ 30: 15(int) Constant 8
+ 31: 27(ivec3) ConstantComposite 28 29 30
+ 32: 15(int) Constant 5
+ 37: 15(int) Constant 14
+ 38: 15(int) Constant 15
+ 39: 16(ivec2) ConstantComposite 37 38
+ 40: 20(int) Constant 13
+ 42: TypeVector 6(float) 2
+ 46: 15(int) Constant 10
+ 47: 15(int) Constant 11
+ 48: 16(ivec2) ConstantComposite 46 47
+ 49: 20(int) Constant 9
+ 51: 15(int) Constant 0
+ 58: TypePointer Output 7(fvec4)
+59(@entryPointOutput): 58(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 60: 7(fvec4) FunctionCall 9(@main()
+ Store 59(@entryPointOutput) 60
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 14: 11 Load 13(g_tTex2df4)
+ 22: 7(fvec4) ImageFetch 14 19 Lod 21
+ 26: 23 Load 25(g_tTex2df4a)
+ 33: 7(fvec4) ImageFetch 26 31 Lod 32
+ 34: 7(fvec4) FAdd 22 33
+ 35: 11 Load 13(g_tTex2df4)
+ 36: 11 Load 13(g_tTex2df4)
+ 41: 7(fvec4) ImageFetch 36 39 Lod 40
+ 43: 42(fvec2) VectorShuffle 41 41 0 1
+ 44: 16(ivec2) ConvertFToU 43
+ 45: 11 Load 13(g_tTex2df4)
+ 50: 7(fvec4) ImageFetch 45 48 Lod 49
+ 52: 6(float) CompositeExtract 50 0
+ 53: 15(int) ConvertFToU 52
+ 54: 7(fvec4) ImageFetch 35 44 Lod 53
+ 55: 7(fvec4) FAdd 34 54
+ ReturnValue 55
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiDescriptorSet.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiDescriptorSet.frag.out
new file mode 100644
index 00000000000..83113386274
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiDescriptorSet.frag.out
@@ -0,0 +1,168 @@
+hlsl.multiDescriptorSet.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 92
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 78 82 86
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "PS_INPUT"
+ MemberName 9(PS_INPUT) 0 "Pos"
+ MemberName 9(PS_INPUT) 1 "Tex"
+ Name 13 "@main(struct-PS_INPUT-vf4-vf21;"
+ Name 12 "input"
+ Name 15 "output"
+ Name 23 "cbChangesEveryFrame"
+ MemberName 23(cbChangesEveryFrame) 0 "World"
+ MemberName 23(cbChangesEveryFrame) 1 "vMeshColor"
+ Name 25 ""
+ Name 34 "cbNeverChanges"
+ MemberName 34(cbNeverChanges) 0 "View"
+ Name 36 ""
+ Name 43 "cbChangeOnResize"
+ MemberName 43(cbChangeOnResize) 0 "Projection"
+ Name 45 ""
+ Name 59 "txDiffuseA"
+ Name 63 "samLinearA"
+ Name 76 "input"
+ Name 78 "input.Pos"
+ Name 82 "input.Tex"
+ Name 86 "@entryPointOutput"
+ Name 87 "param"
+ Name 90 "txDiffuseB"
+ Name 91 "samLinearB"
+ MemberDecorate 23(cbChangesEveryFrame) 0 RowMajor
+ MemberDecorate 23(cbChangesEveryFrame) 0 Offset 0
+ MemberDecorate 23(cbChangesEveryFrame) 0 MatrixStride 16
+ MemberDecorate 23(cbChangesEveryFrame) 1 Offset 64
+ Decorate 23(cbChangesEveryFrame) Block
+ Decorate 25 DescriptorSet 2
+ Decorate 25 Binding 2
+ MemberDecorate 34(cbNeverChanges) 0 RowMajor
+ MemberDecorate 34(cbNeverChanges) 0 Offset 0
+ MemberDecorate 34(cbNeverChanges) 0 MatrixStride 16
+ Decorate 34(cbNeverChanges) Block
+ Decorate 36 DescriptorSet 2
+ Decorate 36 Binding 0
+ MemberDecorate 43(cbChangeOnResize) 0 RowMajor
+ MemberDecorate 43(cbChangeOnResize) 0 Offset 0
+ MemberDecorate 43(cbChangeOnResize) 0 MatrixStride 16
+ Decorate 43(cbChangeOnResize) Block
+ Decorate 45 DescriptorSet 2
+ Decorate 45 Binding 1
+ Decorate 59(txDiffuseA) DescriptorSet 0
+ Decorate 59(txDiffuseA) Binding 0
+ Decorate 63(samLinearA) DescriptorSet 0
+ Decorate 63(samLinearA) Binding 1
+ Decorate 78(input.Pos) BuiltIn FragCoord
+ Decorate 82(input.Tex) Location 0
+ Decorate 86(@entryPointOutput) Location 0
+ Decorate 90(txDiffuseB) DescriptorSet 1
+ Decorate 90(txDiffuseB) Binding 0
+ Decorate 91(samLinearB) DescriptorSet 1
+ Decorate 91(samLinearB) Binding 1
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeVector 6(float) 2
+ 9(PS_INPUT): TypeStruct 7(fvec4) 8(fvec2)
+ 10: TypePointer Function 9(PS_INPUT)
+ 11: TypeFunction 7(fvec4) 10(ptr)
+ 16: 6(float) Constant 0
+ 17: 7(fvec4) ConstantComposite 16 16 16 16
+ 18: 8(fvec2) ConstantComposite 16 16
+ 19: 9(PS_INPUT) ConstantComposite 17 18
+ 20: TypeInt 32 1
+ 21: 20(int) Constant 0
+ 22: TypeMatrix 7(fvec4) 4
+23(cbChangesEveryFrame): TypeStruct 22 7(fvec4)
+ 24: TypePointer Uniform 23(cbChangesEveryFrame)
+ 25: 24(ptr) Variable Uniform
+ 26: TypePointer Uniform 22
+ 29: TypePointer Function 7(fvec4)
+34(cbNeverChanges): TypeStruct 22
+ 35: TypePointer Uniform 34(cbNeverChanges)
+ 36: 35(ptr) Variable Uniform
+43(cbChangeOnResize): TypeStruct 22
+ 44: TypePointer Uniform 43(cbChangeOnResize)
+ 45: 44(ptr) Variable Uniform
+ 52: 20(int) Constant 1
+ 53: TypePointer Function 8(fvec2)
+ 57: TypeImage 6(float) 2D sampled format:Unknown
+ 58: TypePointer UniformConstant 57
+ 59(txDiffuseA): 58(ptr) Variable UniformConstant
+ 61: TypeSampler
+ 62: TypePointer UniformConstant 61
+ 63(samLinearA): 62(ptr) Variable UniformConstant
+ 65: TypeSampledImage 57
+ 70: TypePointer Uniform 7(fvec4)
+ 77: TypePointer Input 7(fvec4)
+ 78(input.Pos): 77(ptr) Variable Input
+ 81: TypePointer Input 8(fvec2)
+ 82(input.Tex): 81(ptr) Variable Input
+ 85: TypePointer Output 7(fvec4)
+86(@entryPointOutput): 85(ptr) Variable Output
+ 90(txDiffuseB): 58(ptr) Variable UniformConstant
+ 91(samLinearB): 62(ptr) Variable UniformConstant
+ 4(main): 2 Function None 3
+ 5: Label
+ 76(input): 10(ptr) Variable Function
+ 87(param): 10(ptr) Variable Function
+ 79: 7(fvec4) Load 78(input.Pos)
+ 80: 29(ptr) AccessChain 76(input) 21
+ Store 80 79
+ 83: 8(fvec2) Load 82(input.Tex)
+ 84: 53(ptr) AccessChain 76(input) 52
+ Store 84 83
+ 88: 9(PS_INPUT) Load 76(input)
+ Store 87(param) 88
+ 89: 7(fvec4) FunctionCall 13(@main(struct-PS_INPUT-vf4-vf21;) 87(param)
+ Store 86(@entryPointOutput) 89
+ Return
+ FunctionEnd
+13(@main(struct-PS_INPUT-vf4-vf21;): 7(fvec4) Function None 11
+ 12(input): 10(ptr) FunctionParameter
+ 14: Label
+ 15(output): 10(ptr) Variable Function
+ Store 15(output) 19
+ 27: 26(ptr) AccessChain 25 21
+ 28: 22 Load 27
+ 30: 29(ptr) AccessChain 12(input) 21
+ 31: 7(fvec4) Load 30
+ 32: 7(fvec4) MatrixTimesVector 28 31
+ 33: 29(ptr) AccessChain 15(output) 21
+ Store 33 32
+ 37: 26(ptr) AccessChain 36 21
+ 38: 22 Load 37
+ 39: 29(ptr) AccessChain 15(output) 21
+ 40: 7(fvec4) Load 39
+ 41: 7(fvec4) MatrixTimesVector 38 40
+ 42: 29(ptr) AccessChain 15(output) 21
+ Store 42 41
+ 46: 26(ptr) AccessChain 45 21
+ 47: 22 Load 46
+ 48: 29(ptr) AccessChain 15(output) 21
+ 49: 7(fvec4) Load 48
+ 50: 7(fvec4) MatrixTimesVector 47 49
+ 51: 29(ptr) AccessChain 15(output) 21
+ Store 51 50
+ 54: 53(ptr) AccessChain 12(input) 52
+ 55: 8(fvec2) Load 54
+ 56: 53(ptr) AccessChain 15(output) 52
+ Store 56 55
+ 60: 57 Load 59(txDiffuseA)
+ 64: 61 Load 63(samLinearA)
+ 66: 65 SampledImage 60 64
+ 67: 53(ptr) AccessChain 15(output) 52
+ 68: 8(fvec2) Load 67
+ 69: 7(fvec4) ImageSampleImplicitLod 66 68
+ 71: 70(ptr) AccessChain 25 52
+ 72: 7(fvec4) Load 71
+ 73: 7(fvec4) FMul 69 72
+ ReturnValue 73
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out
index 4873a4588e8..5ee84b34106 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out
@@ -1,13 +1,13 @@
hlsl.multiEntry.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:4 Function Definition: FakeEntrypoint(u1; ( temp 4-component vector of float)
0:4 Function Parameters:
0:4 'Index' ( in uint)
0:? Sequence
0:5 Branch: Return with expression
-0:5 imageLoad ( temp 4-component vector of float)
-0:5 'Position' (layout( rgba32f) readonly uniform imageBuffer)
+0:5 textureFetch ( temp 4-component vector of float)
+0:5 'Position' (layout( rgba32f) uniform textureBuffer)
0:5 Convert uint to int ( temp int)
0:5 'Index' ( in uint)
0:9 Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float)
@@ -28,7 +28,7 @@ Shader version: 450
0:9 Function Call: @RealEntrypoint(u1; ( temp 4-component vector of float)
0:? 'Index' ( temp uint)
0:? Linker Objects
-0:? 'Position' (layout( rgba32f) readonly uniform imageBuffer)
+0:? 'Position' (layout( rgba32f) uniform textureBuffer)
0:? '@entryPointOutput' ( out 4-component vector of float Position)
0:? 'Index' ( in uint VertexIndex)
@@ -36,15 +36,15 @@ Shader version: 450
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:4 Function Definition: FakeEntrypoint(u1; ( temp 4-component vector of float)
0:4 Function Parameters:
0:4 'Index' ( in uint)
0:? Sequence
0:5 Branch: Return with expression
-0:5 imageLoad ( temp 4-component vector of float)
-0:5 'Position' (layout( rgba32f) readonly uniform imageBuffer)
+0:5 textureFetch ( temp 4-component vector of float)
+0:5 'Position' (layout( rgba32f) uniform textureBuffer)
0:5 Convert uint to int ( temp int)
0:5 'Index' ( in uint)
0:9 Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float)
@@ -65,12 +65,12 @@ Shader version: 450
0:9 Function Call: @RealEntrypoint(u1; ( temp 4-component vector of float)
0:? 'Index' ( temp uint)
0:? Linker Objects
-0:? 'Position' (layout( rgba32f) readonly uniform imageBuffer)
+0:? 'Position' (layout( rgba32f) uniform textureBuffer)
0:? '@entryPointOutput' ( out 4-component vector of float Position)
0:? 'Index' ( in uint VertexIndex)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 41
Capability Shader
@@ -78,6 +78,7 @@ Shader version: 450
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "RealEntrypoint" 34 37
+ Source HLSL 500
Name 4 "RealEntrypoint"
Name 12 "FakeEntrypoint(u1;"
Name 11 "Index"
@@ -90,7 +91,6 @@ Shader version: 450
Name 37 "@entryPointOutput"
Name 38 "param"
Decorate 19(Position) DescriptorSet 0
- Decorate 19(Position) NonWritable
Decorate 34(Index) BuiltIn VertexIndex
Decorate 37(@entryPointOutput) BuiltIn Position
2: TypeVoid
@@ -100,7 +100,7 @@ Shader version: 450
8: TypeFloat 32
9: TypeVector 8(float) 4
10: TypeFunction 9(fvec4) 7(ptr)
- 17: TypeImage 8(float) Buffer nonsampled format:Rgba32f
+ 17: TypeImage 8(float) Buffer sampled format:Rgba32f
18: TypePointer UniformConstant 17
19(Position): 18(ptr) Variable UniformConstant
22: TypeInt 32 1
@@ -126,7 +126,7 @@ Shader version: 450
20: 17 Load 19(Position)
21: 6(int) Load 11(Index)
23: 22(int) Bitcast 21
- 24: 9(fvec4) ImageRead 20 23
+ 24: 9(fvec4) ImageFetch 20 23
ReturnValue 24
FunctionEnd
15(@RealEntrypoint(u1;): 9(fvec4) Function None 10
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out
index 9efc9fc8128..d00c35e33e2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out
@@ -1,5 +1,5 @@
hlsl.multiReturn.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: foo( ( temp structure{ temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m})
@@ -25,7 +25,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: foo( ( temp structure{ temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m})
@@ -48,7 +48,7 @@ gl_FragCoord origin is upper left
0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{ temp float f, temp 3-component vector of float v, temp 3X3 matrix of float m} s})
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 42
Capability Shader
@@ -56,6 +56,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "S"
MemberName 9(S) 0 "f"
@@ -71,9 +72,9 @@ gl_FragCoord origin is upper left
MemberName 16(bufName) 0 "s"
Name 18 ""
MemberDecorate 15(S) 0 Offset 0
- MemberDecorate 15(S) 1 Offset 16
+ MemberDecorate 15(S) 1 Offset 4
MemberDecorate 15(S) 2 RowMajor
- MemberDecorate 15(S) 2 Offset 32
+ MemberDecorate 15(S) 2 Offset 16
MemberDecorate 15(S) 2 MatrixStride 16
MemberDecorate 16(bufName) 0 Offset 0
Decorate 16(bufName) Block
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.namespace.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.namespace.frag.out
new file mode 100644
index 00000000000..f86a0a0f386
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.namespace.frag.out
@@ -0,0 +1,181 @@
+hlsl.namespace.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5 Function Definition: N1::getVec( ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 'v1' ( global 4-component vector of float)
+0:10 Function Definition: N2::getVec( ( temp 4-component vector of float)
+0:10 Function Parameters:
+0:? Sequence
+0:10 Branch: Return with expression
+0:10 'v2' ( global 4-component vector of float)
+0:12 Function Definition: N2::N3::getVec( ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? Sequence
+0:12 Branch: Return with expression
+0:12 'v2' ( global 4-component vector of float)
+0:15 Function Definition: N2::N3::C1::getVec( ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:15 '@this' ( temp structure{})
+0:? Sequence
+0:15 Branch: Return with expression
+0:15 'v2' ( global 4-component vector of float)
+0:21 Function Definition: @main( ( temp 4-component vector of float)
+0:21 Function Parameters:
+0:? Sequence
+0:22 Branch: Return with expression
+0:22 add ( temp 4-component vector of float)
+0:22 add ( temp 4-component vector of float)
+0:22 add ( temp 4-component vector of float)
+0:22 Function Call: N1::getVec( ( temp 4-component vector of float)
+0:22 Function Call: N2::getVec( ( temp 4-component vector of float)
+0:22 Function Call: N2::N3::getVec( ( temp 4-component vector of float)
+0:22 vector-scale ( temp 4-component vector of float)
+0:22 Function Call: N2::N3::C1::getVec( ( temp 4-component vector of float)
+0:22 'N2::gf' ( global float)
+0:21 Function Definition: main( ( temp void)
+0:21 Function Parameters:
+0:? Sequence
+0:21 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:21 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'v1' ( global 4-component vector of float)
+0:? 'v2' ( global 4-component vector of float)
+0:? 'N2::gf' ( global float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5 Function Definition: N1::getVec( ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? Sequence
+0:5 Branch: Return with expression
+0:5 'v1' ( global 4-component vector of float)
+0:10 Function Definition: N2::getVec( ( temp 4-component vector of float)
+0:10 Function Parameters:
+0:? Sequence
+0:10 Branch: Return with expression
+0:10 'v2' ( global 4-component vector of float)
+0:12 Function Definition: N2::N3::getVec( ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:? Sequence
+0:12 Branch: Return with expression
+0:12 'v2' ( global 4-component vector of float)
+0:15 Function Definition: N2::N3::C1::getVec( ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:15 '@this' ( temp structure{})
+0:? Sequence
+0:15 Branch: Return with expression
+0:15 'v2' ( global 4-component vector of float)
+0:21 Function Definition: @main( ( temp 4-component vector of float)
+0:21 Function Parameters:
+0:? Sequence
+0:22 Branch: Return with expression
+0:22 add ( temp 4-component vector of float)
+0:22 add ( temp 4-component vector of float)
+0:22 add ( temp 4-component vector of float)
+0:22 Function Call: N1::getVec( ( temp 4-component vector of float)
+0:22 Function Call: N2::getVec( ( temp 4-component vector of float)
+0:22 Function Call: N2::N3::getVec( ( temp 4-component vector of float)
+0:22 vector-scale ( temp 4-component vector of float)
+0:22 Function Call: N2::N3::C1::getVec( ( temp 4-component vector of float)
+0:22 'N2::gf' ( global float)
+0:21 Function Definition: main( ( temp void)
+0:21 Function Parameters:
+0:? Sequence
+0:21 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:21 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'v1' ( global 4-component vector of float)
+0:? 'v2' ( global 4-component vector of float)
+0:? 'N2::gf' ( global float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 54
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 52
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "N1::getVec("
+ Name 11 "N2::getVec("
+ Name 13 "N2::N3::getVec("
+ Name 15 "C1"
+ Name 19 "N2::N3::C1::getVec("
+ Name 18 "@this"
+ Name 21 "@main("
+ Name 24 "v1"
+ Name 28 "v2"
+ Name 45 "N2::gf"
+ Name 52 "@entryPointOutput"
+ Decorate 52(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 15(C1): TypeStruct
+ 16: TypePointer Function 15(C1)
+ 17: TypeFunction 7(fvec4) 16(ptr)
+ 23: TypePointer Private 7(fvec4)
+ 24(v1): 23(ptr) Variable Private
+ 28(v2): 23(ptr) Variable Private
+ 44: TypePointer Private 6(float)
+ 45(N2::gf): 44(ptr) Variable Private
+ 51: TypePointer Output 7(fvec4)
+52(@entryPointOutput): 51(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 53: 7(fvec4) FunctionCall 21(@main()
+ Store 52(@entryPointOutput) 53
+ Return
+ FunctionEnd
+ 9(N1::getVec(): 7(fvec4) Function None 8
+ 10: Label
+ 25: 7(fvec4) Load 24(v1)
+ ReturnValue 25
+ FunctionEnd
+ 11(N2::getVec(): 7(fvec4) Function None 8
+ 12: Label
+ 29: 7(fvec4) Load 28(v2)
+ ReturnValue 29
+ FunctionEnd
+13(N2::N3::getVec(): 7(fvec4) Function None 8
+ 14: Label
+ 32: 7(fvec4) Load 28(v2)
+ ReturnValue 32
+ FunctionEnd
+19(N2::N3::C1::getVec(): 7(fvec4) Function None 17
+ 18(@this): 16(ptr) FunctionParameter
+ 20: Label
+ 35: 7(fvec4) Load 28(v2)
+ ReturnValue 35
+ FunctionEnd
+ 21(@main(): 7(fvec4) Function None 8
+ 22: Label
+ 38: 7(fvec4) FunctionCall 9(N1::getVec()
+ 39: 7(fvec4) FunctionCall 11(N2::getVec()
+ 40: 7(fvec4) FAdd 38 39
+ 41: 7(fvec4) FunctionCall 13(N2::N3::getVec()
+ 42: 7(fvec4) FAdd 40 41
+ 43: 7(fvec4) FunctionCall 19(N2::N3::C1::getVec()
+ 46: 6(float) Load 45(N2::gf)
+ 47: 7(fvec4) VectorTimesScalar 43 46
+ 48: 7(fvec4) FAdd 42 47
+ ReturnValue 48
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonint-index.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonint-index.frag.out
new file mode 100644
index 00000000000..f512dbecb17
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonint-index.frag.out
@@ -0,0 +1,152 @@
+hlsl.nonint-index.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4 Function Definition: @main(f1; ( temp float)
+0:4 Function Parameters:
+0:4 'input' ( in float)
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 add ( temp float)
+0:7 add ( temp float)
+0:7 add ( temp float)
+0:7 indirect index ( temp float)
+0:7 Constant:
+0:7 1.000000
+0:7 2.000000
+0:7 3.000000
+0:7 Convert float to uint ( temp uint)
+0:7 'input' ( in float)
+0:7 Constant:
+0:7 3.000000
+0:7 Constant:
+0:7 2.000000
+0:7 Constant:
+0:7 1.000000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:? 'input' ( temp float)
+0:? 'input' (layout( location=0) in float)
+0:4 move second child to first child ( temp float)
+0:? '@entryPointOutput' (layout( location=0) out float)
+0:4 Function Call: @main(f1; ( temp float)
+0:? 'input' ( temp float)
+0:? Linker Objects
+0:? 'array' ( const 3-element array of float)
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? '@entryPointOutput' (layout( location=0) out float)
+0:? 'input' (layout( location=0) in float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4 Function Definition: @main(f1; ( temp float)
+0:4 Function Parameters:
+0:4 'input' ( in float)
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 add ( temp float)
+0:7 add ( temp float)
+0:7 add ( temp float)
+0:7 indirect index ( temp float)
+0:7 Constant:
+0:7 1.000000
+0:7 2.000000
+0:7 3.000000
+0:7 Convert float to uint ( temp uint)
+0:7 'input' ( in float)
+0:7 Constant:
+0:7 3.000000
+0:7 Constant:
+0:7 2.000000
+0:7 Constant:
+0:7 1.000000
+0:4 Function Definition: main( ( temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:4 move second child to first child ( temp float)
+0:? 'input' ( temp float)
+0:? 'input' (layout( location=0) in float)
+0:4 move second child to first child ( temp float)
+0:? '@entryPointOutput' (layout( location=0) out float)
+0:4 Function Call: @main(f1; ( temp float)
+0:? 'input' ( temp float)
+0:? Linker Objects
+0:? 'array' ( const 3-element array of float)
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? '@entryPointOutput' (layout( location=0) out float)
+0:? 'input' (layout( location=0) in float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 39
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 32 35
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 10 "@main(f1;"
+ Name 9 "input"
+ Name 22 "indexable"
+ Name 30 "input"
+ Name 32 "input"
+ Name 35 "@entryPointOutput"
+ Name 36 "param"
+ Decorate 32(input) Location 0
+ Decorate 35(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypePointer Function 6(float)
+ 8: TypeFunction 6(float) 7(ptr)
+ 12: TypeInt 32 0
+ 13: 12(int) Constant 3
+ 14: TypeArray 6(float) 13
+ 15: 6(float) Constant 1065353216
+ 16: 6(float) Constant 1073741824
+ 17: 6(float) Constant 1077936128
+ 18: 14 ConstantComposite 15 16 17
+ 21: TypePointer Function 14
+ 31: TypePointer Input 6(float)
+ 32(input): 31(ptr) Variable Input
+ 34: TypePointer Output 6(float)
+35(@entryPointOutput): 34(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 30(input): 7(ptr) Variable Function
+ 36(param): 7(ptr) Variable Function
+ 33: 6(float) Load 32(input)
+ Store 30(input) 33
+ 37: 6(float) Load 30(input)
+ Store 36(param) 37
+ 38: 6(float) FunctionCall 10(@main(f1;) 36(param)
+ Store 35(@entryPointOutput) 38
+ Return
+ FunctionEnd
+ 10(@main(f1;): 6(float) Function None 8
+ 9(input): 7(ptr) FunctionParameter
+ 11: Label
+ 22(indexable): 21(ptr) Variable Function
+ 19: 6(float) Load 9(input)
+ 20: 12(int) ConvertFToU 19
+ Store 22(indexable) 18
+ 23: 7(ptr) AccessChain 22(indexable) 20
+ 24: 6(float) Load 23
+ 25: 6(float) FAdd 24 17
+ 26: 6(float) FAdd 25 16
+ 27: 6(float) FAdd 26 15
+ ReturnValue 27
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
index d3049ec7e41..d1d99cac02d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
@@ -1,5 +1,5 @@
hlsl.nonstaticMemberFunction.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -135,7 +135,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -268,7 +268,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 111
Capability Shader
@@ -276,6 +276,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 109
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "type1"
MemberName 9(type1) 0 "memVar"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out
index cb246695e0f..9fcceac672e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numericsuffixes.frag.out
@@ -1,5 +1,5 @@
hlsl.numericsuffixes.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -85,19 +85,19 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 Sequence
0:5 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:5 color: direct index for structure ( temp 4-component vector of float)
0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Constant:
0:5 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
@@ -183,16 +183,16 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 Sequence
0:5 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:5 color: direct index for structure ( temp 4-component vector of float)
0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Constant:
0:5 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 54
Capability Shader
@@ -200,6 +200,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 51
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "color"
@@ -218,8 +219,8 @@ gl_FragCoord origin is upper left
Name 36 "r11"
Name 38 "r12"
Name 40 "ps_output"
- Name 51 "color"
- Decorate 51(color) Location 0
+ Name 51 "@entryPointOutput.color"
+ Decorate 51(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -244,12 +245,12 @@ gl_FragCoord origin is upper left
41: 24(int) Constant 0
45: TypePointer Function 7(fvec4)
50: TypePointer Output 7(fvec4)
- 51(color): 50(ptr) Variable Output
+51(@entryPointOutput.color): 50(ptr) Variable Output
4(main): 2 Function None 3
5: Label
52:8(PS_OUTPUT) FunctionCall 10(@main()
53: 7(fvec4) CompositeExtract 52 0
- Store 51(color) 53
+ Store 51(@entryPointOutput.color) 53
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out
index ed0017b2116..3d69af40de2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.numthreads.comp.out
@@ -1,5 +1,5 @@
hlsl.numthreads.comp
-Shader version: 450
+Shader version: 500
local_size = (4, 4, 2)
0:? Sequence
0:4 Function Definition: main(vu3; ( temp void)
@@ -23,7 +23,7 @@ local_size = (4, 4, 2)
Linked compute stage:
-Shader version: 450
+Shader version: 500
local_size = (4, 4, 2)
0:? Sequence
0:4 Function Definition: main(vu3; ( temp void)
@@ -44,7 +44,7 @@ local_size = (4, 4, 2)
0:? 'tid' ( in 3-component vector of uint GlobalInvocationID)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 23
Capability Shader
@@ -52,6 +52,7 @@ local_size = (4, 4, 2)
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main_aux1" 18
ExecutionMode 4 LocalSize 4 4 2
+ Source HLSL 500
Name 4 "main_aux1"
Name 11 "main(vu3;"
Name 10 "tid"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.opaque-type-bug.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.opaque-type-bug.frag.out
new file mode 100644
index 00000000000..95b39b3c5cd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.opaque-type-bug.frag.out
@@ -0,0 +1,112 @@
+hlsl.opaque-type-bug.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Function Definition: TexFunc(t21;vf3; ( temp void)
+0:6 Function Parameters:
+0:6 't2D' ( const (read only) texture2D)
+0:6 'RGB' ( out 3-component vector of float)
+0:? Sequence
+0:7 move second child to first child ( temp 3-component vector of float)
+0:7 'RGB' ( out 3-component vector of float)
+0:7 Constant:
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:12 Function Definition: @main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:15 Function Call: TexFunc(t21;vf3; ( temp void)
+0:15 'MyTexture' (layout( binding=0) uniform texture2D)
+0:15 'final_RGB' ( temp 3-component vector of float)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'MyTexture' (layout( binding=0) uniform texture2D)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Function Definition: TexFunc(t21;vf3; ( temp void)
+0:6 Function Parameters:
+0:6 't2D' ( const (read only) texture2D)
+0:6 'RGB' ( out 3-component vector of float)
+0:? Sequence
+0:7 move second child to first child ( temp 3-component vector of float)
+0:7 'RGB' ( out 3-component vector of float)
+0:7 Constant:
+0:7 0.000000
+0:7 0.000000
+0:7 0.000000
+0:12 Function Definition: @main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:15 Function Call: TexFunc(t21;vf3; ( temp void)
+0:15 'MyTexture' (layout( binding=0) uniform texture2D)
+0:15 'final_RGB' ( temp 3-component vector of float)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'MyTexture' (layout( binding=0) uniform texture2D)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 27
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 13 "TexFunc(t21;vf3;"
+ Name 11 "t2D"
+ Name 12 "RGB"
+ Name 15 "@main("
+ Name 20 "MyTexture"
+ Name 22 "final_RGB"
+ Name 23 "param"
+ Decorate 20(MyTexture) DescriptorSet 0
+ Decorate 20(MyTexture) Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeImage 6(float) 2D sampled format:Unknown
+ 8: TypeVector 6(float) 3
+ 9: TypePointer Function 8(fvec3)
+ 10: TypeFunction 2 7 9(ptr)
+ 17: 6(float) Constant 0
+ 18: 8(fvec3) ConstantComposite 17 17 17
+ 19: TypePointer UniformConstant 7
+ 20(MyTexture): 19(ptr) Variable UniformConstant
+ 4(main): 2 Function None 3
+ 5: Label
+ 26: 2 FunctionCall 15(@main()
+ Return
+ FunctionEnd
+13(TexFunc(t21;vf3;): 2 Function None 10
+ 11(t2D): 7 FunctionParameter
+ 12(RGB): 9(ptr) FunctionParameter
+ 14: Label
+ Store 12(RGB) 18
+ Return
+ FunctionEnd
+ 15(@main(): 2 Function None 3
+ 16: Label
+ 22(final_RGB): 9(ptr) Variable Function
+ 23(param): 9(ptr) Variable Function
+ 21: 7 Load 20(MyTexture)
+ 24: 2 FunctionCall 13(TexFunc(t21;vf3;) 21 23(param)
+ 25: 8(fvec3) Load 23(param)
+ Store 22(final_RGB) 25
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.overload.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.overload.frag.out
index 1075ffe3167..e2f67733e71 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.overload.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.overload.frag.out
@@ -1,5 +1,5 @@
hlsl.overload.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: foo1(d1;b1; ( temp void)
@@ -368,7 +368,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: foo1(d1;b1; ( temp void)
@@ -734,7 +734,7 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 520
Capability Shader
@@ -743,6 +743,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 513 516
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 13 "foo1(d1;b1;"
Name 11 "a"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out
index b8ddf0dde93..ae67f1ef5d7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out
@@ -1,5 +1,5 @@
hlsl.params.default.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: fn1(vi4;b1;b1; ( temp 4-component vector of int)
@@ -189,7 +189,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:9 Function Definition: fn1(vi4;b1;b1; ( temp 4-component vector of int)
@@ -376,7 +376,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 178
Capability Shader
@@ -384,6 +384,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 175
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 15 "fn1(vi4;b1;b1;"
Name 12 "p0"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.negative.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.negative.frag.out
index 219e920a71c..f841bd8b6fb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.negative.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.negative.frag.out
@@ -6,7 +6,7 @@ ERROR: 0:47: 'fn2' : ambiguous best function under implicit type conversion
ERROR: 4 compilation errors. No code generated.
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:7 Function Definition: fn1(vi4; ( temp 4-component vector of int)
@@ -196,7 +196,7 @@ ERROR: node is still EOpNull!
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:7 Function Definition: fn1(vi4; ( temp 4-component vector of int)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenLocal.vert.out
new file mode 100644
index 00000000000..7847c088c54
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenLocal.vert.out
@@ -0,0 +1,366 @@
+hlsl.partialFlattenLocal.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+0:? Sequence
+0:12 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:12 'pos' ( in 4-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp texture2D)
+0:? 'packed.tex' ( temp texture2D)
+0:14 'tex' ( uniform texture2D)
+0:15 move second child to first child ( temp 3-component vector of float)
+0:15 direct index ( temp 3-component vector of float)
+0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:15 Constant:
+0:15 0 (const int)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:16 move second child to first child ( temp 2-component vector of float)
+0:16 direct index ( temp 2-component vector of float)
+0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:16 Constant:
+0:16 0 (const int)
+0:? Constant:
+0:? 0.000000
+0:? 1.000000
+0:17 move second child to first child ( temp float)
+0:? 'packed.x' ( temp float)
+0:17 Constant:
+0:17 1.000000
+0:18 move second child to first child ( temp int)
+0:? 'packed.n' ( temp int)
+0:18 Constant:
+0:18 3 (const int)
+0:20 Sequence
+0:20 move second child to first child ( temp int)
+0:20 'i' ( temp int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Loop with condition tested first
+0:20 Loop Condition
+0:20 Compare Less Than ( temp bool)
+0:20 'i' ( temp int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Loop Body
+0:? Sequence
+0:21 add second child into first child ( temp 2-component vector of float)
+0:21 vector swizzle ( temp 2-component vector of float)
+0:21 indirect index ( temp 3-component vector of float)
+0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:21 'i' ( temp int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 indirect index ( temp 2-component vector of float)
+0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:21 'i' ( temp int)
+0:20 Loop Terminal Expression
+0:20 Pre-Increment ( temp int)
+0:20 'i' ( temp int)
+0:24 Sequence
+0:24 Sequence
+0:24 move second child to first child ( temp texture2D)
+0:? 'packed2.tex' ( temp texture2D)
+0:? 'packed.tex' ( temp texture2D)
+0:24 move second child to first child ( temp 3-element array of 3-component vector of float)
+0:? 'packed2.pos' ( temp 3-element array of 3-component vector of float)
+0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:24 move second child to first child ( temp 2-element array of 2-component vector of float)
+0:? 'packed2.uv' ( temp 2-element array of 2-component vector of float)
+0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:24 move second child to first child ( temp float)
+0:? 'packed2.x' ( temp float)
+0:? 'packed.x' ( temp float)
+0:24 move second child to first child ( temp int)
+0:? 'packed2.n' ( temp int)
+0:? 'packed.n' ( temp int)
+0:26 Branch: Return with expression
+0:26 add ( temp 4-component vector of float)
+0:26 'pos' ( in 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:26 direct index ( temp 3-component vector of float)
+0:? 'packed2.pos' ( temp 3-element array of 3-component vector of float)
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 0.000000
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' (layout( location=0) in 4-component vector of float)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:12 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'tex' ( uniform texture2D)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:? 'pos' (layout( location=0) in 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:12 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:12 'pos' ( in 4-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp texture2D)
+0:? 'packed.tex' ( temp texture2D)
+0:14 'tex' ( uniform texture2D)
+0:15 move second child to first child ( temp 3-component vector of float)
+0:15 direct index ( temp 3-component vector of float)
+0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:15 Constant:
+0:15 0 (const int)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:16 move second child to first child ( temp 2-component vector of float)
+0:16 direct index ( temp 2-component vector of float)
+0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:16 Constant:
+0:16 0 (const int)
+0:? Constant:
+0:? 0.000000
+0:? 1.000000
+0:17 move second child to first child ( temp float)
+0:? 'packed.x' ( temp float)
+0:17 Constant:
+0:17 1.000000
+0:18 move second child to first child ( temp int)
+0:? 'packed.n' ( temp int)
+0:18 Constant:
+0:18 3 (const int)
+0:20 Sequence
+0:20 move second child to first child ( temp int)
+0:20 'i' ( temp int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Loop with condition tested first
+0:20 Loop Condition
+0:20 Compare Less Than ( temp bool)
+0:20 'i' ( temp int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Loop Body
+0:? Sequence
+0:21 add second child into first child ( temp 2-component vector of float)
+0:21 vector swizzle ( temp 2-component vector of float)
+0:21 indirect index ( temp 3-component vector of float)
+0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:21 'i' ( temp int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 indirect index ( temp 2-component vector of float)
+0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:21 'i' ( temp int)
+0:20 Loop Terminal Expression
+0:20 Pre-Increment ( temp int)
+0:20 'i' ( temp int)
+0:24 Sequence
+0:24 Sequence
+0:24 move second child to first child ( temp texture2D)
+0:? 'packed2.tex' ( temp texture2D)
+0:? 'packed.tex' ( temp texture2D)
+0:24 move second child to first child ( temp 3-element array of 3-component vector of float)
+0:? 'packed2.pos' ( temp 3-element array of 3-component vector of float)
+0:? 'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:24 move second child to first child ( temp 2-element array of 2-component vector of float)
+0:? 'packed2.uv' ( temp 2-element array of 2-component vector of float)
+0:? 'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:24 move second child to first child ( temp float)
+0:? 'packed2.x' ( temp float)
+0:? 'packed.x' ( temp float)
+0:24 move second child to first child ( temp int)
+0:? 'packed2.n' ( temp int)
+0:? 'packed.n' ( temp int)
+0:26 Branch: Return with expression
+0:26 add ( temp 4-component vector of float)
+0:26 'pos' ( in 4-component vector of float)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:26 direct index ( temp 3-component vector of float)
+0:? 'packed2.pos' ( temp 3-element array of 3-component vector of float)
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 0.000000
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' (layout( location=0) in 4-component vector of float)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:12 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'tex' ( uniform texture2D)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:? 'pos' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 97
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 90 93
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "@main(vf4;"
+ Name 10 "pos"
+ Name 15 "packed.tex"
+ Name 17 "tex"
+ Name 24 "packed.pos"
+ Name 35 "packed.uv"
+ Name 41 "packed.x"
+ Name 43 "packed.n"
+ Name 45 "i"
+ Name 68 "packed2.tex"
+ Name 70 "packed2.pos"
+ Name 72 "packed2.uv"
+ Name 74 "packed2.x"
+ Name 76 "packed2.n"
+ Name 88 "pos"
+ Name 90 "pos"
+ Name 93 "@entryPointOutput"
+ Name 94 "param"
+ Decorate 17(tex) DescriptorSet 0
+ Decorate 90(pos) Location 0
+ Decorate 93(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeFunction 7(fvec4) 8(ptr)
+ 13: TypeImage 6(float) 2D sampled format:Unknown
+ 14: TypePointer Function 13
+ 16: TypePointer UniformConstant 13
+ 17(tex): 16(ptr) Variable UniformConstant
+ 19: TypeVector 6(float) 3
+ 20: TypeInt 32 0
+ 21: 20(int) Constant 3
+ 22: TypeArray 19(fvec3) 21
+ 23: TypePointer Function 22
+ 25: TypeInt 32 1
+ 26: 25(int) Constant 0
+ 27: 6(float) Constant 0
+ 28: 19(fvec3) ConstantComposite 27 27 27
+ 29: TypePointer Function 19(fvec3)
+ 31: TypeVector 6(float) 2
+ 32: 20(int) Constant 2
+ 33: TypeArray 31(fvec2) 32
+ 34: TypePointer Function 33
+ 36: 6(float) Constant 1065353216
+ 37: 31(fvec2) ConstantComposite 27 36
+ 38: TypePointer Function 31(fvec2)
+ 40: TypePointer Function 6(float)
+ 42: TypePointer Function 25(int)
+ 44: 25(int) Constant 3
+ 52: 25(int) Constant 1
+ 53: TypeBool
+ 89: TypePointer Input 7(fvec4)
+ 90(pos): 89(ptr) Variable Input
+ 92: TypePointer Output 7(fvec4)
+93(@entryPointOutput): 92(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 88(pos): 8(ptr) Variable Function
+ 94(param): 8(ptr) Variable Function
+ 91: 7(fvec4) Load 90(pos)
+ Store 88(pos) 91
+ 95: 7(fvec4) Load 88(pos)
+ Store 94(param) 95
+ 96: 7(fvec4) FunctionCall 11(@main(vf4;) 94(param)
+ Store 93(@entryPointOutput) 96
+ Return
+ FunctionEnd
+ 11(@main(vf4;): 7(fvec4) Function None 9
+ 10(pos): 8(ptr) FunctionParameter
+ 12: Label
+ 15(packed.tex): 14(ptr) Variable Function
+ 24(packed.pos): 23(ptr) Variable Function
+ 35(packed.uv): 34(ptr) Variable Function
+ 41(packed.x): 40(ptr) Variable Function
+ 43(packed.n): 42(ptr) Variable Function
+ 45(i): 42(ptr) Variable Function
+ 68(packed2.tex): 14(ptr) Variable Function
+ 70(packed2.pos): 23(ptr) Variable Function
+ 72(packed2.uv): 34(ptr) Variable Function
+ 74(packed2.x): 40(ptr) Variable Function
+ 76(packed2.n): 42(ptr) Variable Function
+ 18: 13 Load 17(tex)
+ Store 15(packed.tex) 18
+ 30: 29(ptr) AccessChain 24(packed.pos) 26
+ Store 30 28
+ 39: 38(ptr) AccessChain 35(packed.uv) 26
+ Store 39 37
+ Store 41(packed.x) 36
+ Store 43(packed.n) 44
+ Store 45(i) 26
+ Branch 46
+ 46: Label
+ LoopMerge 48 49 None
+ Branch 50
+ 50: Label
+ 51: 25(int) Load 45(i)
+ 54: 53(bool) SLessThan 51 52
+ BranchConditional 54 47 48
+ 47: Label
+ 55: 25(int) Load 45(i)
+ 56: 25(int) Load 45(i)
+ 57: 38(ptr) AccessChain 35(packed.uv) 56
+ 58: 31(fvec2) Load 57
+ 59: 29(ptr) AccessChain 24(packed.pos) 55
+ 60: 19(fvec3) Load 59
+ 61: 31(fvec2) VectorShuffle 60 60 0 1
+ 62: 31(fvec2) FAdd 61 58
+ 63: 29(ptr) AccessChain 24(packed.pos) 55
+ 64: 19(fvec3) Load 63
+ 65: 19(fvec3) VectorShuffle 64 62 3 4 2
+ Store 63 65
+ Branch 49
+ 49: Label
+ 66: 25(int) Load 45(i)
+ 67: 25(int) IAdd 66 52
+ Store 45(i) 67
+ Branch 46
+ 48: Label
+ 69: 13 Load 15(packed.tex)
+ Store 68(packed2.tex) 69
+ 71: 22 Load 24(packed.pos)
+ Store 70(packed2.pos) 71
+ 73: 33 Load 35(packed.uv)
+ Store 72(packed2.uv) 73
+ 75: 6(float) Load 41(packed.x)
+ Store 74(packed2.x) 75
+ 77: 25(int) Load 43(packed.n)
+ Store 76(packed2.n) 77
+ 78: 7(fvec4) Load 10(pos)
+ 79: 29(ptr) AccessChain 70(packed2.pos) 26
+ 80: 19(fvec3) Load 79
+ 81: 6(float) CompositeExtract 80 0
+ 82: 6(float) CompositeExtract 80 1
+ 83: 6(float) CompositeExtract 80 2
+ 84: 7(fvec4) CompositeConstruct 81 82 83 27
+ 85: 7(fvec4) FAdd 78 84
+ ReturnValue 85
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenMixed.vert.out
new file mode 100644
index 00000000000..50c8cb9bd0c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenMixed.vert.out
@@ -0,0 +1,150 @@
+hlsl.partialFlattenMixed.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+0:? Sequence
+0:10 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:10 Function Parameters:
+0:10 'pos' ( in 4-component vector of float)
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp texture2D)
+0:13 direct index ( temp texture2D)
+0:? 'packed.membTex' ( temp 2-element array of texture2D)
+0:13 Constant:
+0:13 0 (const int)
+0:? 'tex[0]' ( uniform texture2D)
+0:13 move second child to first child ( temp texture2D)
+0:13 direct index ( temp texture2D)
+0:? 'packed.membTex' ( temp 2-element array of texture2D)
+0:13 Constant:
+0:13 1 (const int)
+0:? 'tex[1]' ( uniform texture2D)
+0:15 Branch: Return with expression
+0:15 'pos' ( in 4-component vector of float)
+0:10 Function Definition: main( ( temp void)
+0:10 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' (layout( location=0) in 4-component vector of float)
+0:10 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:10 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'tex[0]' ( uniform texture2D)
+0:? 'tex[1]' ( uniform texture2D)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:? 'pos' (layout( location=0) in 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:10 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:10 Function Parameters:
+0:10 'pos' ( in 4-component vector of float)
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp texture2D)
+0:13 direct index ( temp texture2D)
+0:? 'packed.membTex' ( temp 2-element array of texture2D)
+0:13 Constant:
+0:13 0 (const int)
+0:? 'tex[0]' ( uniform texture2D)
+0:13 move second child to first child ( temp texture2D)
+0:13 direct index ( temp texture2D)
+0:? 'packed.membTex' ( temp 2-element array of texture2D)
+0:13 Constant:
+0:13 1 (const int)
+0:? 'tex[1]' ( uniform texture2D)
+0:15 Branch: Return with expression
+0:15 'pos' ( in 4-component vector of float)
+0:10 Function Definition: main( ( temp void)
+0:10 Function Parameters:
+0:? Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' (layout( location=0) in 4-component vector of float)
+0:10 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:10 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'tex[0]' ( uniform texture2D)
+0:? 'tex[1]' ( uniform texture2D)
+0:? '@entryPointOutput' ( out 4-component vector of float Position)
+0:? 'pos' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 42
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 35 38
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "@main(vf4;"
+ Name 10 "pos"
+ Name 18 "packed.membTex"
+ Name 22 "tex[0]"
+ Name 27 "tex[1]"
+ Name 33 "pos"
+ Name 35 "pos"
+ Name 38 "@entryPointOutput"
+ Name 39 "param"
+ Decorate 22(tex[0]) DescriptorSet 0
+ Decorate 27(tex[1]) DescriptorSet 0
+ Decorate 35(pos) Location 0
+ Decorate 38(@entryPointOutput) BuiltIn Position
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeFunction 7(fvec4) 8(ptr)
+ 13: TypeImage 6(float) 2D sampled format:Unknown
+ 14: TypeInt 32 0
+ 15: 14(int) Constant 2
+ 16: TypeArray 13 15
+ 17: TypePointer Function 16
+ 19: TypeInt 32 1
+ 20: 19(int) Constant 0
+ 21: TypePointer UniformConstant 13
+ 22(tex[0]): 21(ptr) Variable UniformConstant
+ 24: TypePointer Function 13
+ 26: 19(int) Constant 1
+ 27(tex[1]): 21(ptr) Variable UniformConstant
+ 34: TypePointer Input 7(fvec4)
+ 35(pos): 34(ptr) Variable Input
+ 37: TypePointer Output 7(fvec4)
+38(@entryPointOutput): 37(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 33(pos): 8(ptr) Variable Function
+ 39(param): 8(ptr) Variable Function
+ 36: 7(fvec4) Load 35(pos)
+ Store 33(pos) 36
+ 40: 7(fvec4) Load 33(pos)
+ Store 39(param) 40
+ 41: 7(fvec4) FunctionCall 11(@main(vf4;) 39(param)
+ Store 38(@entryPointOutput) 41
+ Return
+ FunctionEnd
+ 11(@main(vf4;): 7(fvec4) Function None 9
+ 10(pos): 8(ptr) FunctionParameter
+ 12: Label
+18(packed.membTex): 17(ptr) Variable Function
+ 23: 13 Load 22(tex[0])
+ 25: 24(ptr) AccessChain 18(packed.membTex) 20
+ Store 25 23
+ 28: 13 Load 27(tex[1])
+ 29: 24(ptr) AccessChain 18(packed.membTex) 26
+ Store 29 28
+ 30: 7(fvec4) Load 10(pos)
+ ReturnValue 30
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out
index 2dc40bee703..c0882fdb28a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out
@@ -2,7 +2,7 @@ hlsl.partialInit.frag
WARNING: 0:35: 'cgf2a' : variable with qualifier 'const' not initialized; zero initializing
WARNING: 0:36: 'ci' : variable with qualifier 'const' not initialized; zero initializing
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:8 Sequence
@@ -157,25 +157,25 @@ gl_FragCoord origin is upper left
0:18 Function Call: @PixelShaderFunction(vf4; ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:? 'input' ( temp 4-component vector of float)
0:18 move second child to first child ( temp int)
-0:? 'a' (layout( location=0) out int)
+0:? '@entryPointOutput.a' (layout( location=0) out int)
0:18 a: direct index for structure ( temp int)
0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:18 Constant:
0:18 0 (const int)
0:18 move second child to first child ( temp float)
-0:? 'b' (layout( location=1) out float)
+0:? '@entryPointOutput.b' (layout( location=1) out float)
0:18 b: direct index for structure ( temp float)
0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:18 Constant:
0:18 1 (const int)
0:18 move second child to first child ( temp bool)
-0:? 'c' (layout( location=2) out bool)
+0:? '@entryPointOutput.c' (layout( location=2) out bool)
0:18 c: direct index for structure ( temp bool)
0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:18 Constant:
0:18 2 (const int)
0:18 move second child to first child ( temp 4-component vector of float)
-0:? 'v' (layout( location=3) out 4-component vector of float)
+0:? '@entryPointOutput.v' (layout( location=3) out 4-component vector of float)
0:18 v: direct index for structure ( temp 4-component vector of float)
0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:18 Constant:
@@ -183,10 +183,10 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'gv' ( global 4-component vector of float)
0:? 'gfa' ( global 3-element array of float)
-0:? 'a' (layout( location=0) out int)
-0:? 'b' (layout( location=1) out float)
-0:? 'c' (layout( location=2) out bool)
-0:? 'v' (layout( location=3) out 4-component vector of float)
+0:? '@entryPointOutput.a' (layout( location=0) out int)
+0:? '@entryPointOutput.b' (layout( location=1) out float)
+0:? '@entryPointOutput.c' (layout( location=2) out bool)
+0:? '@entryPointOutput.v' (layout( location=3) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
0:? 'cgf2a' ( const 3-element array of 2-component vector of float)
0:? 0.000000
@@ -202,7 +202,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:8 Sequence
@@ -357,25 +357,25 @@ gl_FragCoord origin is upper left
0:18 Function Call: @PixelShaderFunction(vf4; ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:? 'input' ( temp 4-component vector of float)
0:18 move second child to first child ( temp int)
-0:? 'a' (layout( location=0) out int)
+0:? '@entryPointOutput.a' (layout( location=0) out int)
0:18 a: direct index for structure ( temp int)
0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:18 Constant:
0:18 0 (const int)
0:18 move second child to first child ( temp float)
-0:? 'b' (layout( location=1) out float)
+0:? '@entryPointOutput.b' (layout( location=1) out float)
0:18 b: direct index for structure ( temp float)
0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:18 Constant:
0:18 1 (const int)
0:18 move second child to first child ( temp bool)
-0:? 'c' (layout( location=2) out bool)
+0:? '@entryPointOutput.c' (layout( location=2) out bool)
0:18 c: direct index for structure ( temp bool)
0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:18 Constant:
0:18 2 (const int)
0:18 move second child to first child ( temp 4-component vector of float)
-0:? 'v' (layout( location=3) out 4-component vector of float)
+0:? '@entryPointOutput.v' (layout( location=3) out 4-component vector of float)
0:18 v: direct index for structure ( temp 4-component vector of float)
0:18 'flattenTemp' ( temp structure{ temp int a, temp float b, temp bool c, temp 4-component vector of float v})
0:18 Constant:
@@ -383,10 +383,10 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'gv' ( global 4-component vector of float)
0:? 'gfa' ( global 3-element array of float)
-0:? 'a' (layout( location=0) out int)
-0:? 'b' (layout( location=1) out float)
-0:? 'c' (layout( location=2) out bool)
-0:? 'v' (layout( location=3) out 4-component vector of float)
+0:? '@entryPointOutput.a' (layout( location=0) out int)
+0:? '@entryPointOutput.b' (layout( location=1) out float)
+0:? '@entryPointOutput.c' (layout( location=2) out bool)
+0:? '@entryPointOutput.v' (layout( location=3) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
0:? 'cgf2a' ( const 3-element array of 2-component vector of float)
0:? 0.000000
@@ -399,7 +399,7 @@ gl_FragCoord origin is upper left
0:? 0 (const int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 104
Capability Shader
@@ -407,6 +407,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 80 87 91 95 99
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "outs"
MemberName 11(outs) 0 "a"
@@ -432,15 +433,15 @@ gl_FragCoord origin is upper left
Name 80 "input"
Name 82 "flattenTemp"
Name 83 "param"
- Name 87 "a"
- Name 91 "b"
- Name 95 "c"
- Name 99 "v"
+ Name 87 "@entryPointOutput.a"
+ Name 91 "@entryPointOutput.b"
+ Name 95 "@entryPointOutput.c"
+ Name 99 "@entryPointOutput.v"
Decorate 80(input) Location 0
- Decorate 87(a) Location 0
- Decorate 91(b) Location 1
- Decorate 95(c) Location 2
- Decorate 99(v) Location 3
+ Decorate 87(@entryPointOutput.a) Location 0
+ Decorate 91(@entryPointOutput.b) Location 1
+ Decorate 95(@entryPointOutput.c) Location 2
+ Decorate 99(@entryPointOutput.v) Location 3
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -491,13 +492,13 @@ gl_FragCoord origin is upper left
79: TypePointer Input 7(fvec4)
80(input): 79(ptr) Variable Input
86: TypePointer Output 9(int)
- 87(a): 86(ptr) Variable Output
+87(@entryPointOutput.a): 86(ptr) Variable Output
90: TypePointer Output 6(float)
- 91(b): 90(ptr) Variable Output
+91(@entryPointOutput.b): 90(ptr) Variable Output
94: TypePointer Output 10(bool)
- 95(c): 94(ptr) Variable Output
+95(@entryPointOutput.c): 94(ptr) Variable Output
98: TypePointer Output 7(fvec4)
- 99(v): 98(ptr) Variable Output
+99(@entryPointOutput.v): 98(ptr) Variable Output
102: TypeArray 57(fvec2) 22
103: 102 ConstantComposite 62 62 62
4(PixelShaderFunction): 2 Function None 3
@@ -515,16 +516,16 @@ gl_FragCoord origin is upper left
Store 82(flattenTemp) 85
88: 64(ptr) AccessChain 82(flattenTemp) 42
89: 9(int) Load 88
- Store 87(a) 89
+ Store 87(@entryPointOutput.a) 89
92: 68(ptr) AccessChain 82(flattenTemp) 66
93: 6(float) Load 92
- Store 91(b) 93
+ Store 91(@entryPointOutput.b) 93
96: 45(ptr) AccessChain 82(flattenTemp) 35
97: 10(bool) Load 96
- Store 95(c) 97
+ Store 95(@entryPointOutput.c) 97
100: 8(ptr) AccessChain 82(flattenTemp) 29
101: 7(fvec4) Load 100
- Store 99(v) 101
+ Store 99(@entryPointOutput.v) 101
Return
FunctionEnd
14(@PixelShaderFunction(vf4;): 11(outs) Function None 12
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line.frag.out
index 6e8998d9f5c..864df8768b9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line.frag.out
@@ -1,5 +1,5 @@
hlsl.pp.line.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -41,26 +41,26 @@ gl_FragCoord origin is upper left
0:4 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:4 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:4 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:4 Color: direct index for structure ( temp 4-component vector of float)
0:4 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:4 Constant:
0:4 0 (const int)
0:4 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:4 Depth: direct index for structure ( temp float)
0:4 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:4 Constant:
0:4 1 (const int)
0:? Linker Objects
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -102,23 +102,23 @@ gl_FragCoord origin is upper left
0:4 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:4 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:4 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:4 Color: direct index for structure ( temp 4-component vector of float)
0:4 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:4 Constant:
0:4 0 (const int)
0:4 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:4 Depth: direct index for structure ( temp float)
0:4 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:4 Constant:
0:4 1 (const int)
0:? Linker Objects
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 42
Capability Shader
@@ -126,6 +126,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 35 39
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -134,10 +135,10 @@ gl_FragCoord origin is upper left
Name 14 "thisLineIs"
Name 17 "psout"
Name 32 "flattenTemp"
- Name 35 "Color"
- Name 39 "Depth"
- Decorate 35(Color) Location 0
- Decorate 39(Depth) BuiltIn FragDepth
+ Name 35 "@entryPointOutput.Color"
+ Name 39 "@entryPointOutput.Depth"
+ Decorate 35(@entryPointOutput.Color) Location 0
+ Decorate 39(@entryPointOutput.Depth) BuiltIn FragDepth
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -155,9 +156,9 @@ gl_FragCoord origin is upper left
26: 12(int) Constant 1
27: TypePointer Function 6(float)
34: TypePointer Output 7(fvec4)
- 35(Color): 34(ptr) Variable Output
+35(@entryPointOutput.Color): 34(ptr) Variable Output
38: TypePointer Output 6(float)
- 39(Depth): 38(ptr) Variable Output
+39(@entryPointOutput.Depth): 38(ptr) Variable Output
4(main): 2 Function None 3
5: Label
32(flattenTemp): 16(ptr) Variable Function
@@ -165,10 +166,10 @@ gl_FragCoord origin is upper left
Store 32(flattenTemp) 33
36: 24(ptr) AccessChain 32(flattenTemp) 18
37: 7(fvec4) Load 36
- Store 35(Color) 37
+ Store 35(@entryPointOutput.Color) 37
40: 27(ptr) AccessChain 32(flattenTemp) 26
41: 6(float) Load 40
- Store 39(Depth) 41
+ Store 39(@entryPointOutput.Depth) 41
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.vert.out
new file mode 100644
index 00000000000..42821848a39
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.vert.out
@@ -0,0 +1,61 @@
+hlsl.pp.vert
+Shader version: 500
+0:? Sequence
+0:17 Function Definition: @main( ( temp void)
+0:17 Function Parameters:
+0:17 Function Definition: main( ( temp void)
+0:17 Function Parameters:
+0:? Sequence
+0:17 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int goodGlobal1, uniform int goodGlobal2})
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:17 Function Definition: @main( ( temp void)
+0:17 Function Parameters:
+0:17 Function Definition: main( ( temp void)
+0:17 Function Parameters:
+0:? Sequence
+0:17 Function Call: @main( ( temp void)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int goodGlobal1, uniform int goodGlobal2})
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 13
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main"
+ Source HLSL 500
+ Name 4 "main"
+ Name 6 "@main("
+ Name 10 "$Global"
+ MemberName 10($Global) 0 "goodGlobal1"
+ MemberName 10($Global) 1 "goodGlobal2"
+ Name 12 ""
+ MemberDecorate 10($Global) 0 Offset 0
+ MemberDecorate 10($Global) 1 Offset 4
+ Decorate 10($Global) Block
+ Decorate 12 DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 9: TypeInt 32 1
+ 10($Global): TypeStruct 9(int) 9(int)
+ 11: TypePointer Uniform 10($Global)
+ 12: 11(ptr) Variable Uniform
+ 4(main): 2 Function None 3
+ 5: Label
+ 8: 2 FunctionCall 6(@main()
+ Return
+ FunctionEnd
+ 6(@main(): 2 Function None 3
+ 7: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence.frag.out
index 54dcf3124db..0c898cc0005 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence.frag.out
@@ -1,5 +1,5 @@
hlsl.precedence.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4; ( temp 4-component vector of float)
@@ -75,7 +75,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vf4; ( temp 4-component vector of float)
@@ -148,7 +148,7 @@ gl_FragCoord origin is upper left
0:? 'a4' (layout( location=3) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 65
Capability Shader
@@ -156,6 +156,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 43 46 49 52 55
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 14 "@PixelShaderFunction(vf4;vf4;vf4;vf4;"
Name 10 "a1"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out
index a0ddd446730..343240fc4cb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precedence2.frag.out
@@ -1,5 +1,5 @@
hlsl.precedence2.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: @PixelShaderFunction(i1;i1;i1;i1; ( temp int)
@@ -30,16 +30,16 @@ gl_FragCoord origin is upper left
0:? Sequence
0:7 move second child to first child ( temp int)
0:? 'a1' ( temp int)
-0:? 'a1' (layout( location=0) in int)
+0:? 'a1' (layout( location=0) flat in int)
0:7 move second child to first child ( temp int)
0:? 'a2' ( temp int)
-0:? 'a2' (layout( location=1) in int)
+0:? 'a2' (layout( location=1) flat in int)
0:7 move second child to first child ( temp int)
0:? 'a3' ( temp int)
-0:? 'a3' (layout( location=2) in int)
+0:? 'a3' (layout( location=2) flat in int)
0:7 move second child to first child ( temp int)
0:? 'a4' ( temp int)
-0:? 'a4' (layout( location=3) in int)
+0:? 'a4' (layout( location=3) flat in int)
0:7 move second child to first child ( temp int)
0:? '@entryPointOutput' (layout( location=0) out int)
0:7 Function Call: @PixelShaderFunction(i1;i1;i1;i1; ( temp int)
@@ -49,16 +49,16 @@ gl_FragCoord origin is upper left
0:? 'a4' ( temp int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out int)
-0:? 'a1' (layout( location=0) in int)
-0:? 'a2' (layout( location=1) in int)
-0:? 'a3' (layout( location=2) in int)
-0:? 'a4' (layout( location=3) in int)
+0:? 'a1' (layout( location=0) flat in int)
+0:? 'a2' (layout( location=1) flat in int)
+0:? 'a3' (layout( location=2) flat in int)
+0:? 'a4' (layout( location=3) flat in int)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: @PixelShaderFunction(i1;i1;i1;i1; ( temp int)
@@ -89,16 +89,16 @@ gl_FragCoord origin is upper left
0:? Sequence
0:7 move second child to first child ( temp int)
0:? 'a1' ( temp int)
-0:? 'a1' (layout( location=0) in int)
+0:? 'a1' (layout( location=0) flat in int)
0:7 move second child to first child ( temp int)
0:? 'a2' ( temp int)
-0:? 'a2' (layout( location=1) in int)
+0:? 'a2' (layout( location=1) flat in int)
0:7 move second child to first child ( temp int)
0:? 'a3' ( temp int)
-0:? 'a3' (layout( location=2) in int)
+0:? 'a3' (layout( location=2) flat in int)
0:7 move second child to first child ( temp int)
0:? 'a4' ( temp int)
-0:? 'a4' (layout( location=3) in int)
+0:? 'a4' (layout( location=3) flat in int)
0:7 move second child to first child ( temp int)
0:? '@entryPointOutput' (layout( location=0) out int)
0:7 Function Call: @PixelShaderFunction(i1;i1;i1;i1; ( temp int)
@@ -108,13 +108,13 @@ gl_FragCoord origin is upper left
0:? 'a4' ( temp int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out int)
-0:? 'a1' (layout( location=0) in int)
-0:? 'a2' (layout( location=1) in int)
-0:? 'a3' (layout( location=2) in int)
-0:? 'a4' (layout( location=3) in int)
+0:? 'a1' (layout( location=0) flat in int)
+0:? 'a2' (layout( location=1) flat in int)
+0:? 'a3' (layout( location=2) flat in int)
+0:? 'a4' (layout( location=3) flat in int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 56
Capability Shader
@@ -122,6 +122,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 34 37 40 43 46
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 13 "@PixelShaderFunction(i1;i1;i1;i1;"
Name 9 "a1"
@@ -141,9 +142,13 @@ gl_FragCoord origin is upper left
Name 49 "param"
Name 51 "param"
Name 53 "param"
+ Decorate 34(a1) Flat
Decorate 34(a1) Location 0
+ Decorate 37(a2) Flat
Decorate 37(a2) Location 1
+ Decorate 40(a3) Flat
Decorate 40(a3) Location 2
+ Decorate 43(a4) Flat
Decorate 43(a4) Location 3
Decorate 46(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out
index 8a0ac8151ae..66da1d653a0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.precise.frag.out
@@ -1,5 +1,5 @@
hlsl.precise.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:6 Function Definition: MyFunction(f1;vf3; ( temp void)
@@ -26,20 +26,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:9 Sequence
0:9 move second child to first child ( noContraction temp 4-component vector of float)
-0:? 'color' (layout( location=0) noContraction out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
0:9 color: direct index for structure ( noContraction temp 4-component vector of float)
0:9 Function Call: @main( ( temp structure{ noContraction temp 4-component vector of float color})
0:9 Constant:
0:9 0 (const int)
0:? Linker Objects
0:? 'precisefloat' ( noContraction global float)
-0:? 'color' (layout( location=0) noContraction out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:6 Function Definition: MyFunction(f1;vf3; ( temp void)
@@ -66,17 +66,17 @@ gl_FragCoord origin is upper left
0:? Sequence
0:9 Sequence
0:9 move second child to first child ( noContraction temp 4-component vector of float)
-0:? 'color' (layout( location=0) noContraction out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
0:9 color: direct index for structure ( noContraction temp 4-component vector of float)
0:9 Function Call: @main( ( temp structure{ noContraction temp 4-component vector of float color})
0:9 Constant:
0:9 0 (const int)
0:? Linker Objects
0:? 'precisefloat' ( noContraction global float)
-0:? 'color' (layout( location=0) noContraction out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 37
Capability Shader
@@ -84,6 +84,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 32
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 13 "MyFunction(f1;vf3;"
Name 11 "myfloat"
@@ -92,9 +93,9 @@ gl_FragCoord origin is upper left
MemberName 16(PS_OUTPUT) 0 "color"
Name 18 "@main("
Name 21 "ps_output"
- Name 32 "color"
+ Name 32 "@entryPointOutput.color"
Name 36 "precisefloat"
- Decorate 32(color) Location 0
+ Decorate 32(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -112,14 +113,14 @@ gl_FragCoord origin is upper left
25: 15(fvec4) ConstantComposite 24 24 24 24
26: TypePointer Function 15(fvec4)
31: TypePointer Output 15(fvec4)
- 32(color): 31(ptr) Variable Output
+32(@entryPointOutput.color): 31(ptr) Variable Output
35: TypePointer Private 6(float)
36(precisefloat): 35(ptr) Variable Private
4(main): 2 Function None 3
5: Label
33:16(PS_OUTPUT) FunctionCall 18(@main()
34: 15(fvec4) CompositeExtract 33 0
- Store 32(color) 34
+ Store 32(@entryPointOutput.color) 34
Return
FunctionEnd
13(MyFunction(f1;vf3;): 2 Function None 10
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out
new file mode 100644
index 00000000000..cbcd66fe646
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out
@@ -0,0 +1,163 @@
+hlsl.preprocessor.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:9 Function Parameters:
+0:9 'input' ( in 4-component vector of float)
+0:? Sequence
+0:10 Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 'tex' ( temp 4-component vector of float)
+0:10 texture ( temp 4-component vector of float)
+0:10 Construct combined texture-sampler ( temp sampler2D)
+0:10 'test_texture' ( uniform texture2D)
+0:10 'test_texture_ss' ( uniform sampler)
+0:10 vector swizzle ( temp 2-component vector of float)
+0:10 vector swizzle ( temp 2-component vector of float)
+0:10 'input' ( in 4-component vector of float)
+0:10 Sequence
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 1 (const int)
+0:10 Sequence
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 1 (const int)
+0:11 Branch: Return with expression
+0:11 'tex' ( temp 4-component vector of float)
+0:9 Function Definition: main( ( temp void)
+0:9 Function Parameters:
+0:? Sequence
+0:9 move second child to first child ( temp 4-component vector of float)
+0:? 'input' ( temp 4-component vector of float)
+0:? 'input' (layout( location=0) in 4-component vector of float)
+0:9 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:9 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'input' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'test_texture' ( uniform texture2D)
+0:? 'test_texture_ss' ( uniform sampler)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'input' (layout( location=0) in 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:9 Function Parameters:
+0:9 'input' ( in 4-component vector of float)
+0:? Sequence
+0:10 Sequence
+0:10 move second child to first child ( temp 4-component vector of float)
+0:10 'tex' ( temp 4-component vector of float)
+0:10 texture ( temp 4-component vector of float)
+0:10 Construct combined texture-sampler ( temp sampler2D)
+0:10 'test_texture' ( uniform texture2D)
+0:10 'test_texture_ss' ( uniform sampler)
+0:10 vector swizzle ( temp 2-component vector of float)
+0:10 vector swizzle ( temp 2-component vector of float)
+0:10 'input' ( in 4-component vector of float)
+0:10 Sequence
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 1 (const int)
+0:10 Sequence
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 1 (const int)
+0:11 Branch: Return with expression
+0:11 'tex' ( temp 4-component vector of float)
+0:9 Function Definition: main( ( temp void)
+0:9 Function Parameters:
+0:? Sequence
+0:9 move second child to first child ( temp 4-component vector of float)
+0:? 'input' ( temp 4-component vector of float)
+0:? 'input' (layout( location=0) in 4-component vector of float)
+0:9 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:9 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'input' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'test_texture' ( uniform texture2D)
+0:? 'test_texture_ss' ( uniform sampler)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'input' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 40
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 33 36
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "@main(vf4;"
+ Name 10 "input"
+ Name 13 "tex"
+ Name 16 "test_texture"
+ Name 20 "test_texture_ss"
+ Name 31 "input"
+ Name 33 "input"
+ Name 36 "@entryPointOutput"
+ Name 37 "param"
+ Decorate 16(test_texture) DescriptorSet 0
+ Decorate 20(test_texture_ss) DescriptorSet 0
+ Decorate 33(input) Location 0
+ Decorate 36(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeFunction 7(fvec4) 8(ptr)
+ 14: TypeImage 6(float) 2D sampled format:Unknown
+ 15: TypePointer UniformConstant 14
+16(test_texture): 15(ptr) Variable UniformConstant
+ 18: TypeSampler
+ 19: TypePointer UniformConstant 18
+20(test_texture_ss): 19(ptr) Variable UniformConstant
+ 22: TypeSampledImage 14
+ 24: TypeVector 6(float) 2
+ 32: TypePointer Input 7(fvec4)
+ 33(input): 32(ptr) Variable Input
+ 35: TypePointer Output 7(fvec4)
+36(@entryPointOutput): 35(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 31(input): 8(ptr) Variable Function
+ 37(param): 8(ptr) Variable Function
+ 34: 7(fvec4) Load 33(input)
+ Store 31(input) 34
+ 38: 7(fvec4) Load 31(input)
+ Store 37(param) 38
+ 39: 7(fvec4) FunctionCall 11(@main(vf4;) 37(param)
+ Store 36(@entryPointOutput) 39
+ Return
+ FunctionEnd
+ 11(@main(vf4;): 7(fvec4) Function None 9
+ 10(input): 8(ptr) FunctionParameter
+ 12: Label
+ 13(tex): 8(ptr) Variable Function
+ 17: 14 Load 16(test_texture)
+ 21: 18 Load 20(test_texture_ss)
+ 23: 22 SampledImage 17 21
+ 25: 7(fvec4) Load 10(input)
+ 26: 24(fvec2) VectorShuffle 25 25 0 1
+ 27: 7(fvec4) ImageSampleImplicitLod 23 26
+ Store 13(tex) 27
+ 28: 7(fvec4) Load 13(tex)
+ ReturnValue 28
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out
index b09f68d4e8d..2d4bd6eaa49 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out
@@ -1,5 +1,5 @@
hlsl.promote.atomic.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main( ( temp 4-component vector of float)
@@ -33,7 +33,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main( ( temp 4-component vector of float)
@@ -64,15 +64,16 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 36
Capability Shader
- Capability SampledBuffer
+ Capability ImageBuffer
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 34
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "@main("
Name 13 "Orig"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out
index 34a46f9865c..bc91ad9d116 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out
@@ -1,5 +1,5 @@
hlsl.promote.binary.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:14 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -74,20 +74,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:14 Sequence
0:14 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:14 Color: direct index for structure ( temp 4-component vector of float)
0:14 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:14 Constant:
0:14 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform bool bval, uniform 4-component vector of bool bval4, uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:14 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -162,17 +162,17 @@ gl_FragCoord origin is upper left
0:? Sequence
0:14 Sequence
0:14 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:14 Color: direct index for structure ( temp 4-component vector of float)
0:14 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:14 Constant:
0:14 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform bool bval, uniform 4-component vector of bool bval4, uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 83
Capability Shader
@@ -180,6 +180,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 80
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -194,7 +195,7 @@ gl_FragCoord origin is upper left
Name 18 ""
Name 66 "l_int"
Name 73 "psout"
- Name 80 "Color"
+ Name 80 "@entryPointOutput.Color"
MemberDecorate 16($Global) 0 Offset 0
MemberDecorate 16($Global) 1 Offset 16
MemberDecorate 16($Global) 2 Offset 32
@@ -203,7 +204,7 @@ gl_FragCoord origin is upper left
MemberDecorate 16($Global) 5 Offset 80
Decorate 16($Global) Block
Decorate 18 DescriptorSet 0
- Decorate 80(Color) Location 0
+ Decorate 80(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -241,12 +242,12 @@ gl_FragCoord origin is upper left
72: TypePointer Function 8(PS_OUTPUT)
74: TypePointer Function 7(fvec4)
79: TypePointer Output 7(fvec4)
- 80(Color): 79(ptr) Variable Output
+80(@entryPointOutput.Color): 79(ptr) Variable Output
4(main): 2 Function None 3
5: Label
81:8(PS_OUTPUT) FunctionCall 10(@main()
82: 7(fvec4) CompositeExtract 81 0
- Store 80(Color) 82
+ Store 80(@entryPointOutput.Color) 82
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.vec1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.vec1.frag.out
index c76f5d23c7b..ac0e44ef348 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.vec1.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.vec1.frag.out
@@ -1,5 +1,5 @@
hlsl.promote.vec1.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @main( ( temp 4-component vector of float)
@@ -41,7 +41,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @main( ( temp 4-component vector of float)
@@ -80,7 +80,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 31
Capability Shader
@@ -88,6 +88,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 29
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "@main("
Name 12 "f1a"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out
index d955195db82..5383959ab18 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out
@@ -1,5 +1,5 @@
hlsl.promotions.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:19 Function Definition: Fn_F3(vf3; ( temp void)
@@ -779,20 +779,20 @@ gl_FragCoord origin is upper left
0:? Sequence
0:52 Sequence
0:52 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:52 Color: direct index for structure ( temp 4-component vector of float)
0:52 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:52 Constant:
0:52 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 3-component vector of int i3, uniform 3-component vector of bool b3, uniform 3-component vector of float f3, uniform 3-component vector of uint u3, uniform 3-component vector of double d3, uniform int is, uniform bool bs, uniform float fs, uniform uint us, uniform double ds})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:19 Function Definition: Fn_F3(vf3; ( temp void)
@@ -1572,17 +1572,17 @@ gl_FragCoord origin is upper left
0:? Sequence
0:52 Sequence
0:52 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:52 Color: direct index for structure ( temp 4-component vector of float)
0:52 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:52 Constant:
0:52 0 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 3-component vector of int i3, uniform 3-component vector of bool b3, uniform 3-component vector of float f3, uniform 3-component vector of uint u3, uniform 3-component vector of double d3, uniform int is, uniform bool bs, uniform float fs, uniform uint us, uniform double ds})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 596
Capability Shader
@@ -1591,6 +1591,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 593
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "Fn_F3(vf3;"
Name 10 "x"
@@ -1681,7 +1682,7 @@ gl_FragCoord origin is upper left
Name 576 "c2"
Name 578 "outval"
Name 586 "psout"
- Name 593 "Color"
+ Name 593 "@entryPointOutput.Color"
MemberDecorate 111($Global) 0 Offset 0
MemberDecorate 111($Global) 1 Offset 16
MemberDecorate 111($Global) 2 Offset 32
@@ -1694,7 +1695,7 @@ gl_FragCoord origin is upper left
MemberDecorate 111($Global) 9 Offset 104
Decorate 111($Global) Block
Decorate 113 DescriptorSet 0
- Decorate 593(Color) Location 0
+ Decorate 593(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -1765,12 +1766,12 @@ gl_FragCoord origin is upper left
579: 6(float) Constant 1080452710
585: TypePointer Function 107(PS_OUTPUT)
592: TypePointer Output 106(fvec4)
- 593(Color): 592(ptr) Variable Output
+593(@entryPointOutput.Color): 592(ptr) Variable Output
4(main): 2 Function None 3
5: Label
594:107(PS_OUTPUT) FunctionCall 109(@main()
595: 106(fvec4) CompositeExtract 594 0
- Store 593(Color) 595
+ Store 593(@entryPointOutput.Color) 595
Return
FunctionEnd
11(Fn_F3(vf3;): 2 Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out
index 8ecfde6168f..5f7a033961b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out
@@ -2,26 +2,19 @@ hlsl.reflection.vert
Uniform reflection:
anonMember3: offset 80, type 8b52, size 1, index 0, binding -1
s.a: offset 0, type 1404, size 1, index 1, binding -1
-ablock.scalar: offset 12, type 1404, size 1, index 2, binding -1
m23: offset 16, type 8b67, size 1, index 0, binding -1
scalarAfterm23: offset 48, type 1404, size 1, index 0, binding -1
-c_m23: offset 16, type 8b67, size 1, index 3, binding -1
-c_scalarAfterm23: offset 48, type 1404, size 1, index 3, binding -1
+c_m23: offset 16, type 8b67, size 1, index 2, binding -1
+c_scalarAfterm23: offset 48, type 1404, size 1, index 2, binding -1
scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1
floatArray: offset 112, type 1406, size 5, index 0, binding -1
scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1
-ablock.memfloat2: offset 48, type 8b50, size 1, index 2, binding -1
-ablock.memf1: offset 56, type 1406, size 1, index 2, binding -1
-ablock.memf2: offset 60, type 8b56, size 1, index 2, binding -1
-ablock.memf3: offset 64, type 1404, size 1, index 2, binding -1
-ablock.memfloat2a: offset 72, type 8b50, size 1, index 2, binding -1
-ablock.m22: offset 80, type 8b5a, size 7, index 2, binding -1
+m22: offset 208, type 8b5a, size 9, index 0, binding -1
dm22: offset 32, type 8b5a, size 4, index 1, binding -1
-m22: offset 208, type 8b5a, size 3, index 0, binding -1
-nest.foo.n1.a: offset 0, type 1406, size 1, index 4, binding -1
-nest.foo.n2.b: offset 16, type 1406, size 1, index 4, binding -1
-nest.foo.n2.c: offset 20, type 1406, size 1, index 4, binding -1
-nest.foo.n2.d: offset 24, type 1406, size 1, index 4, binding -1
+foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1
+foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1
+foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1
+foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1
deepA.d2.d1[2].va: offset 376, type 8b50, size 2, index 1, binding -1
deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1
deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1
@@ -61,19 +54,18 @@ deepD[1].d2.d1[2].b: offset 2480, type 8b56, size 1, index 1, binding -1
deepD[1].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1
deepD[1].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1
deepD[1].v3: offset 2480, type 8b54, size 1, index 1, binding -1
-arrBl.foo: offset 0, type 1406, size 1, index 5, binding -1
-arrBl2.foo: offset 0, type 1406, size 1, index 6, binding -1
+foo1: offset 0, type 1406, size 1, index 4, binding -1
+foo2: offset 0, type 1406, size 1, index 5, binding -1
anonMember1: offset 0, type 8b51, size 1, index 0, binding -1
uf1: offset 16, type 1406, size 1, index 1, binding -1
Uniform block reflection:
nameless: offset -1, type ffffffff, size 496, index -1, binding -1
$Global: offset -1, type ffffffff, size 3088, index -1, binding -1
-ablock: offset -1, type ffffffff, size 304, index -1, binding -1
c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1
-nest: offset -1, type ffffffff, size 32, index -1, binding -1
-arrBl: offset -1, type ffffffff, size 4, index -1, binding -1
-arrBl2: offset -1, type ffffffff, size 4, index -1, binding -1
+nested: offset -1, type ffffffff, size 32, index -1, binding -1
+abl: offset -1, type ffffffff, size 4, index -1, binding -1
+abl2: offset -1, type ffffffff, size 4, index -1, binding -1
Vertex attribute reflection:
attributeFloat: offset 0, type 1406, size 0, index 0, binding -1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out
index a2e53584936..ae84db0f9d1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out
@@ -1,5 +1,5 @@
hlsl.rw.atomics.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -1942,7 +1942,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:45 Sequence
0:45 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:45 Color: direct index for structure ( temp 4-component vector of float)
0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:45 Constant:
@@ -1968,13 +1968,13 @@ gl_FragCoord origin is upper left
0:? 'g_tBuffI' (layout( r32i) uniform iimageBuffer)
0:? 'g_tBuffU' (layout( r32ui) uniform uimageBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform uint u1, uniform 2-component vector of uint u2, uniform 3-component vector of uint u3, uniform uint u1b, uniform uint u1c, uniform int i1, uniform 2-component vector of int i2, uniform 3-component vector of int i3, uniform int i1b, uniform int i1c})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -3917,7 +3917,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:45 Sequence
0:45 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:45 Color: direct index for structure ( temp 4-component vector of float)
0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:45 Constant:
@@ -3943,19 +3943,20 @@ gl_FragCoord origin is upper left
0:? 'g_tBuffI' (layout( r32i) uniform iimageBuffer)
0:? 'g_tBuffU' (layout( r32ui) uniform uimageBuffer)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform uint u1, uniform 2-component vector of uint u2, uniform 3-component vector of uint u3, uniform uint u1b, uniform uint u1c, uniform int i1, uniform 2-component vector of int i2, uniform 3-component vector of int i3, uniform int i1b, uniform int i1c})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 1147
Capability Shader
- Capability Sampled1D
- Capability SampledBuffer
+ Capability Image1D
+ Capability ImageBuffer
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 1117
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -3985,7 +3986,7 @@ gl_FragCoord origin is upper left
Name 931 "g_tBuffI"
Name 1020 "g_tBuffU"
Name 1108 "psout"
- Name 1117 "Color"
+ Name 1117 "@entryPointOutput.Color"
Name 1122 "g_sSamp"
Name 1125 "g_tTex1df1"
Name 1128 "g_tTex2df1"
@@ -4017,7 +4018,7 @@ gl_FragCoord origin is upper left
Decorate 670(g_tTex1du1a) DescriptorSet 0
Decorate 931(g_tBuffI) DescriptorSet 0
Decorate 1020(g_tBuffU) DescriptorSet 0
- Decorate 1117(Color) Location 0
+ Decorate 1117(@entryPointOutput.Color) Location 0
Decorate 1122(g_sSamp) DescriptorSet 0
Decorate 1125(g_tTex1df1) DescriptorSet 0
Decorate 1128(g_tTex2df1) DescriptorSet 0
@@ -4099,7 +4100,7 @@ gl_FragCoord origin is upper left
1110: 7(fvec4) ConstantComposite 1109 1109 1109 1109
1111: TypePointer Function 7(fvec4)
1116: TypePointer Output 7(fvec4)
- 1117(Color): 1116(ptr) Variable Output
+1117(@entryPointOutput.Color): 1116(ptr) Variable Output
1120: TypeSampler
1121: TypePointer UniformConstant 1120
1122(g_sSamp): 1121(ptr) Variable UniformConstant
@@ -4131,7 +4132,7 @@ gl_FragCoord origin is upper left
5: Label
1118:8(PS_OUTPUT) FunctionCall 10(@main()
1119: 7(fvec4) CompositeExtract 1118 0
- Store 1117(Color) 1119
+ Store 1117(@entryPointOutput.Color) 1119
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out
index ece7bfa3e32..c92eedc3c81 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -1,5 +1,5 @@
hlsl.rw.bracket.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:42 Function Definition: Fn1(vi4; ( temp 4-component vector of int)
@@ -844,7 +844,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:53 Sequence
0:53 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:53 Color: direct index for structure ( temp 4-component vector of float)
0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:53 Constant:
@@ -867,13 +867,13 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray)
0:? 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform 4-component vector of float uf4, uniform 4-component vector of int ui4, uniform 4-component vector of uint uu4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:42 Function Definition: Fn1(vi4; ( temp 4-component vector of int)
@@ -1718,7 +1718,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:53 Sequence
0:53 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:53 Color: direct index for structure ( temp 4-component vector of float)
0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:53 Constant:
@@ -1741,18 +1741,19 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di4a' (layout( rgba32i) uniform iimage2DArray)
0:? 'g_tTex2du4a' (layout( rgba32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform 4-component vector of float uf4, uniform 4-component vector of int ui4, uniform 4-component vector of uint uu4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 607
Capability Shader
- Capability Sampled1D
+ Capability Image1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 583
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "Fn1(vi4;"
Name 10 "x"
@@ -1871,7 +1872,7 @@ gl_FragCoord origin is upper left
Name 561 "storeTempPost"
Name 569 "storeTemp"
Name 576 "psout"
- Name 583 "Color"
+ Name 583 "@entryPointOutput.Color"
Name 588 "g_sSamp"
Name 591 "g_tTex1df4a"
Name 594 "g_tTex1di4a"
@@ -1902,7 +1903,7 @@ gl_FragCoord origin is upper left
Decorate 131(g_tTex3df4) DescriptorSet 0
Decorate 141(g_tTex3di4) DescriptorSet 0
Decorate 149(g_tTex3du4) DescriptorSet 0
- Decorate 583(Color) Location 0
+ Decorate 583(@entryPointOutput.Color) Location 0
Decorate 588(g_sSamp) DescriptorSet 0
Decorate 588(g_sSamp) Binding 0
Decorate 591(g_tTex1df4a) DescriptorSet 0
@@ -2004,7 +2005,7 @@ gl_FragCoord origin is upper left
575: TypePointer Function 42(PS_OUTPUT)
577: 21(fvec4) ConstantComposite 408 408 408 408
582: TypePointer Output 21(fvec4)
- 583(Color): 582(ptr) Variable Output
+583(@entryPointOutput.Color): 582(ptr) Variable Output
586: TypeSampler
587: TypePointer UniformConstant 586
588(g_sSamp): 587(ptr) Variable UniformConstant
@@ -2030,7 +2031,7 @@ gl_FragCoord origin is upper left
5: Label
584:42(PS_OUTPUT) FunctionCall 44(@main()
585: 21(fvec4) CompositeExtract 584 0
- Store 583(Color) 585
+ Store 583(@entryPointOutput.Color) 585
Return
FunctionEnd
11(Fn1(vi4;): 7(ivec4) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.register.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.register.frag.out
index 2e0c5622386..f8409f7f4cc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.register.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.register.frag.out
@@ -1,5 +1,5 @@
hlsl.rw.register.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -36,7 +36,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:11 Sequence
0:11 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:11 Color: direct index for structure ( temp 4-component vector of float)
0:11 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:11 Constant:
@@ -44,13 +44,13 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'g_tTex1df1' (layout( binding=2 r32f) uniform image1D)
0:? 'g_tBuf1du1' (layout( binding=3 r32ui) uniform uimageBuffer)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -87,7 +87,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:11 Sequence
0:11 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:11 Color: direct index for structure ( temp 4-component vector of float)
0:11 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:11 Constant:
@@ -95,19 +95,20 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'g_tTex1df1' (layout( binding=2 r32f) uniform image1D)
0:? 'g_tBuf1du1' (layout( binding=3 r32ui) uniform uimageBuffer)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 42
Capability Shader
- Capability Sampled1D
- Capability SampledBuffer
+ Capability Image1D
+ Capability ImageBuffer
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 39
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -117,12 +118,12 @@ gl_FragCoord origin is upper left
Name 23 "r01"
Name 26 "g_tBuf1du1"
Name 30 "psout"
- Name 39 "Color"
+ Name 39 "@entryPointOutput.Color"
Decorate 16(g_tTex1df1) DescriptorSet 0
Decorate 16(g_tTex1df1) Binding 2
Decorate 26(g_tBuf1du1) DescriptorSet 0
Decorate 26(g_tBuf1du1) Binding 3
- Decorate 39(Color) Location 0
+ Decorate 39(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -145,12 +146,12 @@ gl_FragCoord origin is upper left
32: 7(fvec4) ConstantComposite 31 31 31 31
33: TypePointer Function 7(fvec4)
38: TypePointer Output 7(fvec4)
- 39(Color): 38(ptr) Variable Output
+39(@entryPointOutput.Color): 38(ptr) Variable Output
4(main): 2 Function None 3
5: Label
40:8(PS_OUTPUT) FunctionCall 10(@main()
41: 7(fvec4) CompositeExtract 40 0
- Store 39(Color) 41
+ Store 39(@entryPointOutput.Color) 41
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
index 991d524e280..484fd90510a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
@@ -1,5 +1,5 @@
hlsl.rw.scalar.bracket.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:42 Function Definition: Fn1(i1; ( temp int)
@@ -817,7 +817,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:53 Sequence
0:53 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:53 Color: direct index for structure ( temp 4-component vector of float)
0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:53 Constant:
@@ -840,13 +840,13 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di1a' (layout( r32i) uniform iimage2DArray)
0:? 'g_tTex2du1a' (layout( r32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform float uf1, uniform int ui1, uniform uint uu1})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:42 Function Definition: Fn1(i1; ( temp int)
@@ -1664,7 +1664,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:53 Sequence
0:53 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:53 Color: direct index for structure ( temp 4-component vector of float)
0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:53 Constant:
@@ -1687,18 +1687,19 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di1a' (layout( r32i) uniform iimage2DArray)
0:? 'g_tTex2du1a' (layout( r32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform float uf1, uniform int ui1, uniform uint uu1})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 571
Capability Shader
- Capability Sampled1D
+ Capability Image1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 547
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 10 "Fn1(i1;"
Name 9 "x"
@@ -1817,7 +1818,7 @@ gl_FragCoord origin is upper left
Name 524 "storeTempPost"
Name 531 "storeTemp"
Name 539 "psout"
- Name 547 "Color"
+ Name 547 "@entryPointOutput.Color"
Name 552 "g_sSamp"
Name 555 "g_tTex1df1a"
Name 558 "g_tTex1di1a"
@@ -1847,7 +1848,7 @@ gl_FragCoord origin is upper left
Decorate 125(g_tTex3df1) DescriptorSet 0
Decorate 135(g_tTex3di1) DescriptorSet 0
Decorate 143(g_tTex3du1) DescriptorSet 0
- Decorate 547(Color) Location 0
+ Decorate 547(@entryPointOutput.Color) Location 0
Decorate 552(g_sSamp) DescriptorSet 0
Decorate 552(g_sSamp) Binding 0
Decorate 555(g_tTex1df1a) DescriptorSet 0
@@ -1933,7 +1934,7 @@ gl_FragCoord origin is upper left
540: 39(fvec4) ConstantComposite 382 382 382 382
541: TypePointer Function 39(fvec4)
546: TypePointer Output 39(fvec4)
- 547(Color): 546(ptr) Variable Output
+547(@entryPointOutput.Color): 546(ptr) Variable Output
550: TypeSampler
551: TypePointer UniformConstant 550
552(g_sSamp): 551(ptr) Variable UniformConstant
@@ -1959,7 +1960,7 @@ gl_FragCoord origin is upper left
5: Label
548:40(PS_OUTPUT) FunctionCall 42(@main()
549: 39(fvec4) CompositeExtract 548 0
- Store 547(Color) 549
+ Store 547(@entryPointOutput.Color) 549
Return
FunctionEnd
10(Fn1(i1;): 6(int) Function None 8
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out
index ae2f4c9611d..f8098a5d98b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out
@@ -1,5 +1,5 @@
hlsl.rw.swizzle.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: SomeValue( ( temp 3-component vector of float)
@@ -102,7 +102,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: SomeValue( ( temp 3-component vector of float)
@@ -202,15 +202,16 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 63
Capability Shader
- Capability SampledBuffer
+ Capability ImageBuffer
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 58
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "SomeValue("
Name 13 "@main("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
index c34ce902e0c..42e45fc0d44 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
@@ -1,5 +1,5 @@
hlsl.rw.vec2.bracket.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:42 Function Definition: Fn1(vi2; ( temp 2-component vector of int)
@@ -826,7 +826,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:53 Sequence
0:53 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:53 Color: direct index for structure ( temp 4-component vector of float)
0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:53 Constant:
@@ -849,13 +849,13 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di2a' (layout( rg32i) uniform iimage2DArray)
0:? 'g_tTex2du2a' (layout( rg32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform 2-component vector of float uf2, uniform 2-component vector of int ui2, uniform 2-component vector of uint uu2})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:42 Function Definition: Fn1(vi2; ( temp 2-component vector of int)
@@ -1682,7 +1682,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:53 Sequence
0:53 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:53 Color: direct index for structure ( temp 4-component vector of float)
0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:53 Constant:
@@ -1705,19 +1705,20 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di2a' (layout( rg32i) uniform iimage2DArray)
0:? 'g_tTex2du2a' (layout( rg32ui) uniform uimage2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform 2-component vector of float uf2, uniform 2-component vector of int ui2, uniform 2-component vector of uint uu2})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 605
Capability Shader
- Capability Sampled1D
+ Capability Image1D
Capability StorageImageExtendedFormats
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 581
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "Fn1(vi2;"
Name 10 "x"
@@ -1836,7 +1837,7 @@ gl_FragCoord origin is upper left
Name 557 "storeTempPost"
Name 565 "storeTemp"
Name 573 "psout"
- Name 581 "Color"
+ Name 581 "@entryPointOutput.Color"
Name 586 "g_sSamp"
Name 589 "g_tTex1df2a"
Name 592 "g_tTex1di2a"
@@ -1866,7 +1867,7 @@ gl_FragCoord origin is upper left
Decorate 130(g_tTex3df2) DescriptorSet 0
Decorate 140(g_tTex3di2) DescriptorSet 0
Decorate 148(g_tTex3du2) DescriptorSet 0
- Decorate 581(Color) Location 0
+ Decorate 581(@entryPointOutput.Color) Location 0
Decorate 586(g_sSamp) DescriptorSet 0
Decorate 586(g_sSamp) Binding 0
Decorate 589(g_tTex1df2a) DescriptorSet 0
@@ -1966,7 +1967,7 @@ gl_FragCoord origin is upper left
574: 42(fvec4) ConstantComposite 404 404 404 404
575: TypePointer Function 42(fvec4)
580: TypePointer Output 42(fvec4)
- 581(Color): 580(ptr) Variable Output
+581(@entryPointOutput.Color): 580(ptr) Variable Output
584: TypeSampler
585: TypePointer UniformConstant 584
586(g_sSamp): 585(ptr) Variable UniformConstant
@@ -1992,7 +1993,7 @@ gl_FragCoord origin is upper left
5: Label
582:43(PS_OUTPUT) FunctionCall 45(@main()
583: 42(fvec4) CompositeExtract 582 0
- Store 581(Color) 583
+ Store 581(@entryPointOutput.Color) 583
Return
FunctionEnd
11(Fn1(vi2;): 7(ivec2) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 5a8a79c6477..57f2e5f5b17 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.sample.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -131,13 +131,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -154,14 +154,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCubeArray)
0:? 'g_tTexcdi4' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -293,13 +293,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -316,11 +316,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCubeArray)
0:? 'g_tTexcdi4' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 146
Capability Shader
@@ -330,6 +330,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 138 142
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -356,8 +357,8 @@ gl_FragCoord origin is upper left
Name 114 "g_tTexcdu4"
Name 125 "psout"
Name 135 "flattenTemp"
- Name 138 "Color"
- Name 142 "Depth"
+ Name 138 "@entryPointOutput.Color"
+ Name 142 "@entryPointOutput.Depth"
Name 145 "g_tTex1df4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
@@ -371,8 +372,8 @@ gl_FragCoord origin is upper left
Decorate 94(g_tTexcdf4) DescriptorSet 0
Decorate 104(g_tTexcdi4) DescriptorSet 0
Decorate 114(g_tTexcdu4) DescriptorSet 0
- Decorate 138(Color) Location 0
- Decorate 142(Depth) BuiltIn FragDepth
+ Decorate 138(@entryPointOutput.Color) Location 0
+ Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 145(g_tTex1df4a) DescriptorSet 0
Decorate 145(g_tTex1df4a) Binding 1
2: TypeVoid
@@ -454,9 +455,9 @@ gl_FragCoord origin is upper left
129: 29(int) Constant 1
130: TypePointer Function 6(float)
137: TypePointer Output 7(fvec4)
- 138(Color): 137(ptr) Variable Output
+138(@entryPointOutput.Color): 137(ptr) Variable Output
141: TypePointer Output 6(float)
- 142(Depth): 141(ptr) Variable Output
+142(@entryPointOutput.Depth): 141(ptr) Variable Output
145(g_tTex1df4a): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -465,10 +466,10 @@ gl_FragCoord origin is upper left
Store 135(flattenTemp) 136
139: 12(ptr) AccessChain 135(flattenTemp) 126
140: 7(fvec4) Load 139
- Store 138(Color) 140
+ Store 138(@entryPointOutput.Color) 140
143: 130(ptr) AccessChain 135(flattenTemp) 129
144: 6(float) Load 143
- Store 142(Depth) 144
+ Store 142(@entryPointOutput.Depth) 144
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index 725de275cec..56bb39a7c0d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -1,7 +1,7 @@
hlsl.sample.basic.dx10.frag
WARNING: 0:4: 'immediate sampler state' : unimplemented
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -241,13 +241,13 @@ gl_FragCoord origin is upper left
0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:53 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:53 Color: direct index for structure ( temp 4-component vector of float)
0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:53 Constant:
0:53 0 (const int)
0:53 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:53 Depth: direct index for structure ( temp float)
0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:53 Constant:
@@ -269,14 +269,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -516,13 +516,13 @@ gl_FragCoord origin is upper left
0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:53 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:53 Color: direct index for structure ( temp 4-component vector of float)
0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:53 Constant:
0:53 0 (const int)
0:53 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:53 Depth: direct index for structure ( temp float)
0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:53 Constant:
@@ -544,11 +544,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 198
Capability Shader
@@ -557,6 +557,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 188 192
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -603,8 +604,8 @@ gl_FragCoord origin is upper left
Name 169 "g_tTexcdu4"
Name 176 "psout"
Name 185 "flattenTemp"
- Name 188 "Color"
- Name 192 "Depth"
+ Name 188 "@entryPointOutput.Color"
+ Name 192 "@entryPointOutput.Depth"
Name 195 "g_sSamp2d"
Name 196 "g_sSamp2D_b"
Name 197 "g_tTex1df4a"
@@ -623,8 +624,8 @@ gl_FragCoord origin is upper left
Decorate 151(g_tTexcdf4) DescriptorSet 0
Decorate 160(g_tTexcdi4) DescriptorSet 0
Decorate 169(g_tTexcdu4) DescriptorSet 0
- Decorate 188(Color) Location 0
- Decorate 192(Depth) BuiltIn FragDepth
+ Decorate 188(@entryPointOutput.Color) Location 0
+ Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 195(g_sSamp2d) DescriptorSet 0
Decorate 196(g_sSamp2D_b) DescriptorSet 0
Decorate 197(g_tTex1df4a) DescriptorSet 0
@@ -730,9 +731,9 @@ gl_FragCoord origin is upper left
178: 7(fvec4) ConstantComposite 177 177 177 177
180: TypePointer Function 6(float)
187: TypePointer Output 7(fvec4)
- 188(Color): 187(ptr) Variable Output
+188(@entryPointOutput.Color): 187(ptr) Variable Output
191: TypePointer Output 6(float)
- 192(Depth): 191(ptr) Variable Output
+192(@entryPointOutput.Depth): 191(ptr) Variable Output
195(g_sSamp2d): 48(ptr) Variable UniformConstant
196(g_sSamp2D_b): 48(ptr) Variable UniformConstant
197(g_tTex1df4a): 44(ptr) Variable UniformConstant
@@ -743,10 +744,10 @@ gl_FragCoord origin is upper left
Store 185(flattenTemp) 186
189: 41(ptr) AccessChain 185(flattenTemp) 29
190: 7(fvec4) Load 189
- Store 188(Color) 190
+ Store 188(@entryPointOutput.Color) 190
193: 180(ptr) AccessChain 185(flattenTemp) 16
194: 6(float) Load 193
- Store 192(Depth) 194
+ Store 192(@entryPointOutput.Depth) 194
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index 923db246227..e57f839f87d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.sample.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -149,13 +149,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -175,14 +175,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -332,13 +332,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -358,11 +358,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 161
Capability Shader
@@ -371,6 +371,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 144 148
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -397,8 +398,8 @@ gl_FragCoord origin is upper left
Name 120 "g_tTex3du4"
Name 132 "psout"
Name 141 "flattenTemp"
- Name 144 "Color"
- Name 148 "Depth"
+ Name 144 "@entryPointOutput.Color"
+ Name 148 "@entryPointOutput.Depth"
Name 151 "g_tTex1df4a"
Name 154 "g_tTexcdf4"
Name 157 "g_tTexcdi4"
@@ -415,8 +416,8 @@ gl_FragCoord origin is upper left
Decorate 96(g_tTex3df4) DescriptorSet 0
Decorate 109(g_tTex3di4) DescriptorSet 0
Decorate 120(g_tTex3du4) DescriptorSet 0
- Decorate 144(Color) Location 0
- Decorate 148(Depth) BuiltIn FragDepth
+ Decorate 144(@entryPointOutput.Color) Location 0
+ Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 151(g_tTex1df4a) DescriptorSet 0
Decorate 151(g_tTex1df4a) Binding 1
Decorate 154(g_tTexcdf4) DescriptorSet 0
@@ -507,9 +508,9 @@ gl_FragCoord origin is upper left
134: 7(fvec4) ConstantComposite 133 133 133 133
136: TypePointer Function 6(float)
143: TypePointer Output 7(fvec4)
- 144(Color): 143(ptr) Variable Output
+144(@entryPointOutput.Color): 143(ptr) Variable Output
147: TypePointer Output 6(float)
- 148(Depth): 147(ptr) Variable Output
+148(@entryPointOutput.Depth): 147(ptr) Variable Output
151(g_tTex1df4a): 15(ptr) Variable UniformConstant
152: TypeImage 6(float) Cube sampled format:Unknown
153: TypePointer UniformConstant 152
@@ -527,10 +528,10 @@ gl_FragCoord origin is upper left
Store 141(flattenTemp) 142
145: 12(ptr) AccessChain 141(flattenTemp) 64
146: 7(fvec4) Load 145
- Store 144(Color) 146
+ Store 144(@entryPointOutput.Color) 146
149: 136(ptr) AccessChain 141(flattenTemp) 26
150: 6(float) Load 149
- Store 148(Depth) 150
+ Store 148(@entryPointOutput.Depth) 150
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index d9cf65c605f..ad07c1549a5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.sample.offsetarray.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -110,13 +110,13 @@ gl_FragCoord origin is upper left
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:20 Color: direct index for structure ( temp 4-component vector of float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
0:20 0 (const int)
0:20 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:20 Depth: direct index for structure ( temp float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
@@ -130,14 +130,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2df4' ( uniform texture2DArray)
0:? 'g_tTex2di4' ( uniform itexture2DArray)
0:? 'g_tTex2du4' ( uniform utexture2DArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -248,13 +248,13 @@ gl_FragCoord origin is upper left
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:20 Color: direct index for structure ( temp 4-component vector of float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
0:20 0 (const int)
0:20 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:20 Depth: direct index for structure ( temp float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
@@ -268,11 +268,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2df4' ( uniform texture2DArray)
0:? 'g_tTex2di4' ( uniform itexture2DArray)
0:? 'g_tTex2du4' ( uniform utexture2DArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 118
Capability Shader
@@ -281,6 +281,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 110 114
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -301,8 +302,8 @@ gl_FragCoord origin is upper left
Name 87 "g_tTex2du4"
Name 98 "psout"
Name 107 "flattenTemp"
- Name 110 "Color"
- Name 114 "Depth"
+ Name 110 "@entryPointOutput.Color"
+ Name 114 "@entryPointOutput.Depth"
Name 117 "g_tTex1df4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
@@ -313,8 +314,8 @@ gl_FragCoord origin is upper left
Decorate 63(g_tTex2df4) DescriptorSet 0
Decorate 76(g_tTex2di4) DescriptorSet 0
Decorate 87(g_tTex2du4) DescriptorSet 0
- Decorate 110(Color) Location 0
- Decorate 114(Depth) BuiltIn FragDepth
+ Decorate 110(@entryPointOutput.Color) Location 0
+ Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 117(g_tTex1df4a) DescriptorSet 0
Decorate 117(g_tTex1df4a) Binding 1
2: TypeVoid
@@ -383,9 +384,9 @@ gl_FragCoord origin is upper left
100: 7(fvec4) ConstantComposite 99 99 99 99
102: TypePointer Function 6(float)
109: TypePointer Output 7(fvec4)
- 110(Color): 109(ptr) Variable Output
+110(@entryPointOutput.Color): 109(ptr) Variable Output
113: TypePointer Output 6(float)
- 114(Depth): 113(ptr) Variable Output
+114(@entryPointOutput.Depth): 113(ptr) Variable Output
117(g_tTex1df4a): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -394,10 +395,10 @@ gl_FragCoord origin is upper left
Store 107(flattenTemp) 108
111: 12(ptr) AccessChain 107(flattenTemp) 29
112: 7(fvec4) Load 111
- Store 110(Color) 112
+ Store 110(@entryPointOutput.Color) 112
115: 102(ptr) AccessChain 107(flattenTemp) 43
116: 6(float) Load 115
- Store 114(Depth) 116
+ Store 114(@entryPointOutput.Depth) 116
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index c3d6f13c9a4..5213a03102c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.sample.sub-vec4.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:14 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -61,7 +61,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:14 Sequence
0:14 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:14 Color: direct index for structure ( temp 4-component vector of float)
0:14 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:14 Constant:
@@ -72,13 +72,13 @@ gl_FragCoord origin is upper left
0:? 'g_tTex1df2' ( uniform texture1D)
0:? 'g_tTex1df3' ( uniform texture1D)
0:? 'g_tTex1df4' ( uniform texture1D)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:14 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -140,7 +140,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:14 Sequence
0:14 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:14 Color: direct index for structure ( temp 4-component vector of float)
0:14 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:14 Constant:
@@ -151,10 +151,10 @@ gl_FragCoord origin is upper left
0:? 'g_tTex1df2' ( uniform texture1D)
0:? 'g_tTex1df3' ( uniform texture1D)
0:? 'g_tTex1df4' ( uniform texture1D)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 72
Capability Shader
@@ -163,6 +163,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 69
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -177,14 +178,14 @@ gl_FragCoord origin is upper left
Name 52 "txval13"
Name 53 "g_tTex1df4"
Name 59 "psout"
- Name 69 "Color"
+ Name 69 "@entryPointOutput.Color"
Decorate 16(g_tTex1df1) DescriptorSet 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 30(g_tTex1df2) DescriptorSet 0
Decorate 42(g_tTex1df3) DescriptorSet 0
Decorate 53(g_tTex1df4) DescriptorSet 0
- Decorate 69(Color) Location 0
+ Decorate 69(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -215,12 +216,12 @@ gl_FragCoord origin is upper left
62: 6(float) Constant 1065353216
63: 7(fvec4) ConstantComposite 62 62 62 62
68: TypePointer Output 7(fvec4)
- 69(Color): 68(ptr) Variable Output
+69(@entryPointOutput.Color): 68(ptr) Variable Output
4(main): 2 Function None 3
5: Label
70:8(PS_OUTPUT) FunctionCall 10(@main()
71: 7(fvec4) CompositeExtract 70 0
- Store 69(Color) 71
+ Store 69(@entryPointOutput.Color) 71
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index 7f6881f17e8..8535c2ce2de 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplebias.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -149,13 +149,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -172,14 +172,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCubeArray)
0:? 'g_tTexcdi4' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -329,13 +329,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -352,11 +352,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCubeArray)
0:? 'g_tTexcdi4' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 146
Capability Shader
@@ -366,6 +366,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 138 142
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -392,8 +393,8 @@ gl_FragCoord origin is upper left
Name 114 "g_tTexcdu4"
Name 125 "psout"
Name 135 "flattenTemp"
- Name 138 "Color"
- Name 142 "Depth"
+ Name 138 "@entryPointOutput.Color"
+ Name 142 "@entryPointOutput.Depth"
Name 145 "g_tTex1df4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
@@ -407,8 +408,8 @@ gl_FragCoord origin is upper left
Decorate 94(g_tTexcdf4) DescriptorSet 0
Decorate 104(g_tTexcdi4) DescriptorSet 0
Decorate 114(g_tTexcdu4) DescriptorSet 0
- Decorate 138(Color) Location 0
- Decorate 142(Depth) BuiltIn FragDepth
+ Decorate 138(@entryPointOutput.Color) Location 0
+ Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 145(g_tTex1df4a) DescriptorSet 0
Decorate 145(g_tTex1df4a) Binding 1
2: TypeVoid
@@ -490,9 +491,9 @@ gl_FragCoord origin is upper left
129: 30(int) Constant 1
130: TypePointer Function 6(float)
137: TypePointer Output 7(fvec4)
- 138(Color): 137(ptr) Variable Output
+138(@entryPointOutput.Color): 137(ptr) Variable Output
141: TypePointer Output 6(float)
- 142(Depth): 141(ptr) Variable Output
+142(@entryPointOutput.Depth): 141(ptr) Variable Output
145(g_tTex1df4a): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -501,10 +502,10 @@ gl_FragCoord origin is upper left
Store 135(flattenTemp) 136
139: 12(ptr) AccessChain 135(flattenTemp) 126
140: 7(fvec4) Load 139
- Store 138(Color) 140
+ Store 138(@entryPointOutput.Color) 140
143: 130(ptr) AccessChain 135(flattenTemp) 129
144: 6(float) Load 143
- Store 142(Depth) 144
+ Store 142(@entryPointOutput.Depth) 144
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index 81e8da949a6..919fb8025c4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplebias.basic.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -179,13 +179,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -205,14 +205,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -392,13 +392,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -418,11 +418,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 170
Capability Shader
@@ -431,6 +431,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 162 166
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -463,8 +464,8 @@ gl_FragCoord origin is upper left
Name 141 "g_tTexcdu4"
Name 148 "psout"
Name 159 "flattenTemp"
- Name 162 "Color"
- Name 166 "Depth"
+ Name 162 "@entryPointOutput.Color"
+ Name 166 "@entryPointOutput.Depth"
Name 169 "g_tTex1df4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
@@ -481,8 +482,8 @@ gl_FragCoord origin is upper left
Decorate 123(g_tTexcdf4) DescriptorSet 0
Decorate 132(g_tTexcdi4) DescriptorSet 0
Decorate 141(g_tTexcdu4) DescriptorSet 0
- Decorate 162(Color) Location 0
- Decorate 166(Depth) BuiltIn FragDepth
+ Decorate 162(@entryPointOutput.Color) Location 0
+ Decorate 166(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 169(g_tTex1df4a) DescriptorSet 0
Decorate 169(g_tTex1df4a) Binding 1
2: TypeVoid
@@ -573,9 +574,9 @@ gl_FragCoord origin is upper left
153: 27(int) Constant 1
154: TypePointer Function 6(float)
161: TypePointer Output 7(fvec4)
- 162(Color): 161(ptr) Variable Output
+162(@entryPointOutput.Color): 161(ptr) Variable Output
165: TypePointer Output 6(float)
- 166(Depth): 165(ptr) Variable Output
+166(@entryPointOutput.Depth): 165(ptr) Variable Output
169(g_tTex1df4a): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -584,10 +585,10 @@ gl_FragCoord origin is upper left
Store 159(flattenTemp) 160
163: 12(ptr) AccessChain 159(flattenTemp) 149
164: 7(fvec4) Load 163
- Store 162(Color) 164
+ Store 162(@entryPointOutput.Color) 164
167: 154(ptr) AccessChain 159(flattenTemp) 153
168: 6(float) Load 167
- Store 166(Depth) 168
+ Store 166(@entryPointOutput.Depth) 168
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index 19191321b08..7972bffeab5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplebias.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -167,13 +167,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -193,14 +193,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -368,13 +368,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -394,11 +394,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 161
Capability Shader
@@ -407,6 +407,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 144 148
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -433,8 +434,8 @@ gl_FragCoord origin is upper left
Name 120 "g_tTex3du4"
Name 132 "psout"
Name 141 "flattenTemp"
- Name 144 "Color"
- Name 148 "Depth"
+ Name 144 "@entryPointOutput.Color"
+ Name 148 "@entryPointOutput.Depth"
Name 151 "g_tTex1df4a"
Name 154 "g_tTexcdf4"
Name 157 "g_tTexcdi4"
@@ -451,8 +452,8 @@ gl_FragCoord origin is upper left
Decorate 96(g_tTex3df4) DescriptorSet 0
Decorate 109(g_tTex3di4) DescriptorSet 0
Decorate 120(g_tTex3du4) DescriptorSet 0
- Decorate 144(Color) Location 0
- Decorate 148(Depth) BuiltIn FragDepth
+ Decorate 144(@entryPointOutput.Color) Location 0
+ Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 151(g_tTex1df4a) DescriptorSet 0
Decorate 151(g_tTex1df4a) Binding 1
Decorate 154(g_tTexcdf4) DescriptorSet 0
@@ -543,9 +544,9 @@ gl_FragCoord origin is upper left
134: 7(fvec4) ConstantComposite 133 133 133 133
136: TypePointer Function 6(float)
143: TypePointer Output 7(fvec4)
- 144(Color): 143(ptr) Variable Output
+144(@entryPointOutput.Color): 143(ptr) Variable Output
147: TypePointer Output 6(float)
- 148(Depth): 147(ptr) Variable Output
+148(@entryPointOutput.Depth): 147(ptr) Variable Output
151(g_tTex1df4a): 15(ptr) Variable UniformConstant
152: TypeImage 6(float) Cube sampled format:Unknown
153: TypePointer UniformConstant 152
@@ -563,10 +564,10 @@ gl_FragCoord origin is upper left
Store 141(flattenTemp) 142
145: 12(ptr) AccessChain 141(flattenTemp) 65
146: 7(fvec4) Load 145
- Store 144(Color) 146
+ Store 144(@entryPointOutput.Color) 146
149: 136(ptr) AccessChain 141(flattenTemp) 27
150: 6(float) Load 149
- Store 148(Depth) 150
+ Store 148(@entryPointOutput.Depth) 150
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index 0aab048449d..6e2bc7db065 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplebias.offsetarray.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -122,13 +122,13 @@ gl_FragCoord origin is upper left
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:20 Color: direct index for structure ( temp 4-component vector of float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
0:20 0 (const int)
0:20 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:20 Depth: direct index for structure ( temp float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
@@ -142,14 +142,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2df4' ( uniform texture2DArray)
0:? 'g_tTex2di4' ( uniform itexture2DArray)
0:? 'g_tTex2du4' ( uniform utexture2DArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -272,13 +272,13 @@ gl_FragCoord origin is upper left
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:20 Color: direct index for structure ( temp 4-component vector of float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
0:20 0 (const int)
0:20 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:20 Depth: direct index for structure ( temp float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
@@ -292,11 +292,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2df4' ( uniform texture2DArray)
0:? 'g_tTex2di4' ( uniform itexture2DArray)
0:? 'g_tTex2du4' ( uniform utexture2DArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 118
Capability Shader
@@ -305,6 +305,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 110 114
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -325,8 +326,8 @@ gl_FragCoord origin is upper left
Name 87 "g_tTex2du4"
Name 98 "psout"
Name 107 "flattenTemp"
- Name 110 "Color"
- Name 114 "Depth"
+ Name 110 "@entryPointOutput.Color"
+ Name 114 "@entryPointOutput.Depth"
Name 117 "g_tTex1df4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
@@ -337,8 +338,8 @@ gl_FragCoord origin is upper left
Decorate 64(g_tTex2df4) DescriptorSet 0
Decorate 77(g_tTex2di4) DescriptorSet 0
Decorate 87(g_tTex2du4) DescriptorSet 0
- Decorate 110(Color) Location 0
- Decorate 114(Depth) BuiltIn FragDepth
+ Decorate 110(@entryPointOutput.Color) Location 0
+ Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 117(g_tTex1df4a) DescriptorSet 0
Decorate 117(g_tTex1df4a) Binding 1
2: TypeVoid
@@ -407,9 +408,9 @@ gl_FragCoord origin is upper left
100: 7(fvec4) ConstantComposite 99 99 99 99
102: TypePointer Function 6(float)
109: TypePointer Output 7(fvec4)
- 110(Color): 109(ptr) Variable Output
+110(@entryPointOutput.Color): 109(ptr) Variable Output
113: TypePointer Output 6(float)
- 114(Depth): 113(ptr) Variable Output
+114(@entryPointOutput.Depth): 113(ptr) Variable Output
117(g_tTex1df4a): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -418,10 +419,10 @@ gl_FragCoord origin is upper left
Store 107(flattenTemp) 108
111: 12(ptr) AccessChain 107(flattenTemp) 30
112: 7(fvec4) Load 111
- Store 110(Color) 112
+ Store 110(@entryPointOutput.Color) 112
115: 102(ptr) AccessChain 107(flattenTemp) 44
116: 6(float) Load 115
- Store 114(Depth) 116
+ Store 114(@entryPointOutput.Depth) 116
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index 6f26c98f049..5a61639f9d1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplecmp.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
0:42 'r10' ( temp float)
0:42 texture ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42 'g_tTex1df4a' ( uniform texture1DArray)
+0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -23,7 +23,7 @@ gl_FragCoord origin is upper left
0:43 'r12' ( temp float)
0:43 texture ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43 'g_tTex1di4a' ( uniform itexture1DArray)
+0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -36,7 +36,7 @@ gl_FragCoord origin is upper left
0:44 'r14' ( temp float)
0:44 texture ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44 'g_tTex1du4a' ( uniform utexture1DArray)
+0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -49,7 +49,7 @@ gl_FragCoord origin is upper left
0:47 'r30' ( temp float)
0:47 texture ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47 'g_tTex2df4a' ( uniform texture2DArray)
+0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -63,7 +63,7 @@ gl_FragCoord origin is upper left
0:48 'r32' ( temp float)
0:48 texture ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48 'g_tTex2di4a' ( uniform itexture2DArray)
+0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -77,7 +77,7 @@ gl_FragCoord origin is upper left
0:49 'r34' ( temp float)
0:49 texture ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49 'g_tTex2du4a' ( uniform utexture2DArray)
+0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -91,7 +91,7 @@ gl_FragCoord origin is upper left
0:52 'r60' ( temp float)
0:52 texture ( temp float)
0:52 Construct combined texture-sampler ( temp samplerCubeArrayShadow)
-0:52 'g_tTexcdf4a' ( uniform textureCubeArray)
+0:52 'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
0:52 'g_sSamp' (layout( binding=0) uniform sampler)
0:52 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -106,7 +106,7 @@ gl_FragCoord origin is upper left
0:53 'r62' ( temp float)
0:53 texture ( temp float)
0:53 Construct combined texture-sampler ( temp isamplerCubeArrayShadow)
-0:53 'g_tTexcdi4a' ( uniform itextureCubeArray)
+0:53 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
0:53 'g_sSamp' (layout( binding=0) uniform sampler)
0:53 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -121,7 +121,7 @@ gl_FragCoord origin is upper left
0:54 'r64' ( temp float)
0:54 texture ( temp float)
0:54 Construct combined texture-sampler ( temp usamplerCubeArrayShadow)
-0:54 'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:54 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
0:54 'g_sSamp' (layout( binding=0) uniform sampler)
0:54 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -158,13 +158,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -183,23 +183,23 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'g_tTex1df4a' ( uniform texture1DArray)
-0:? 'g_tTex1di4a' ( uniform itexture1DArray)
-0:? 'g_tTex1du4a' ( uniform utexture1DArray)
-0:? 'g_tTex2df4a' ( uniform texture2DArray)
-0:? 'g_tTex2di4a' ( uniform itexture2DArray)
-0:? 'g_tTex2du4a' ( uniform utexture2DArray)
-0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
-0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
-0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? 'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:? 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:? 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:? 'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:? 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:? 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
+0:? 'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
+0:? 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
+0:? 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -210,7 +210,7 @@ gl_FragCoord origin is upper left
0:42 'r10' ( temp float)
0:42 texture ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42 'g_tTex1df4a' ( uniform texture1DArray)
+0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -223,7 +223,7 @@ gl_FragCoord origin is upper left
0:43 'r12' ( temp float)
0:43 texture ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43 'g_tTex1di4a' ( uniform itexture1DArray)
+0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -236,7 +236,7 @@ gl_FragCoord origin is upper left
0:44 'r14' ( temp float)
0:44 texture ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44 'g_tTex1du4a' ( uniform utexture1DArray)
+0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -249,7 +249,7 @@ gl_FragCoord origin is upper left
0:47 'r30' ( temp float)
0:47 texture ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47 'g_tTex2df4a' ( uniform texture2DArray)
+0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -263,7 +263,7 @@ gl_FragCoord origin is upper left
0:48 'r32' ( temp float)
0:48 texture ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48 'g_tTex2di4a' ( uniform itexture2DArray)
+0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -277,7 +277,7 @@ gl_FragCoord origin is upper left
0:49 'r34' ( temp float)
0:49 texture ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49 'g_tTex2du4a' ( uniform utexture2DArray)
+0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -291,7 +291,7 @@ gl_FragCoord origin is upper left
0:52 'r60' ( temp float)
0:52 texture ( temp float)
0:52 Construct combined texture-sampler ( temp samplerCubeArrayShadow)
-0:52 'g_tTexcdf4a' ( uniform textureCubeArray)
+0:52 'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
0:52 'g_sSamp' (layout( binding=0) uniform sampler)
0:52 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -306,7 +306,7 @@ gl_FragCoord origin is upper left
0:53 'r62' ( temp float)
0:53 texture ( temp float)
0:53 Construct combined texture-sampler ( temp isamplerCubeArrayShadow)
-0:53 'g_tTexcdi4a' ( uniform itextureCubeArray)
+0:53 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
0:53 'g_sSamp' (layout( binding=0) uniform sampler)
0:53 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -321,7 +321,7 @@ gl_FragCoord origin is upper left
0:54 'r64' ( temp float)
0:54 texture ( temp float)
0:54 Construct combined texture-sampler ( temp usamplerCubeArrayShadow)
-0:54 'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:54 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
0:54 'g_sSamp' (layout( binding=0) uniform sampler)
0:54 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -358,13 +358,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -383,29 +383,30 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'g_tTex1df4a' ( uniform texture1DArray)
-0:? 'g_tTex1di4a' ( uniform itexture1DArray)
-0:? 'g_tTex1du4a' ( uniform utexture1DArray)
-0:? 'g_tTex2df4a' ( uniform texture2DArray)
-0:? 'g_tTex2di4a' ( uniform itexture2DArray)
-0:? 'g_tTex2du4a' ( uniform utexture2DArray)
-0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
-0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
-0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? 'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:? 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:? 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:? 'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:? 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:? 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
+0:? 'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
+0:? 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
+0:? 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 218
+// Generated by (magic number): 80002
+// Id's are bound by 209
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 175 179
+ EntryPoint Fragment 4 "main" 166 170
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -414,64 +415,64 @@ gl_FragCoord origin is upper left
Name 13 "r10"
Name 16 "g_tTex1df4a"
Name 20 "g_sSamp"
- Name 36 "r12"
- Name 40 "g_tTex1di4a"
- Name 51 "r14"
- Name 55 "g_tTex1du4a"
- Name 66 "r30"
- Name 69 "g_tTex2df4a"
- Name 83 "r32"
- Name 86 "g_tTex2di4a"
- Name 98 "r34"
- Name 101 "g_tTex2du4a"
- Name 113 "r60"
- Name 116 "g_tTexcdf4a"
- Name 130 "r62"
- Name 133 "g_tTexcdi4a"
- Name 145 "r64"
- Name 148 "g_tTexcdu4a"
- Name 161 "psout"
- Name 172 "flattenTemp"
- Name 175 "Color"
- Name 179 "Depth"
- Name 184 "g_tTex1df4"
- Name 187 "g_tTex1di4"
- Name 190 "g_tTex1du4"
- Name 193 "g_tTex2df4"
- Name 196 "g_tTex2di4"
- Name 199 "g_tTex2du4"
- Name 202 "g_tTex3df4"
- Name 205 "g_tTex3di4"
- Name 208 "g_tTex3du4"
- Name 211 "g_tTexcdf4"
- Name 214 "g_tTexcdi4"
- Name 217 "g_tTexcdu4"
+ Name 35 "r12"
+ Name 39 "g_tTex1di4a"
+ Name 49 "r14"
+ Name 53 "g_tTex1du4a"
+ Name 63 "r30"
+ Name 66 "g_tTex2df4a"
+ Name 79 "r32"
+ Name 82 "g_tTex2di4a"
+ Name 93 "r34"
+ Name 96 "g_tTex2du4a"
+ Name 107 "r60"
+ Name 110 "g_tTexcdf4a"
+ Name 123 "r62"
+ Name 126 "g_tTexcdi4a"
+ Name 137 "r64"
+ Name 140 "g_tTexcdu4a"
+ Name 152 "psout"
+ Name 163 "flattenTemp"
+ Name 166 "@entryPointOutput.Color"
+ Name 170 "@entryPointOutput.Depth"
+ Name 175 "g_tTex1df4"
+ Name 178 "g_tTex1di4"
+ Name 181 "g_tTex1du4"
+ Name 184 "g_tTex2df4"
+ Name 187 "g_tTex2di4"
+ Name 190 "g_tTex2du4"
+ Name 193 "g_tTex3df4"
+ Name 196 "g_tTex3di4"
+ Name 199 "g_tTex3du4"
+ Name 202 "g_tTexcdf4"
+ Name 205 "g_tTexcdi4"
+ Name 208 "g_tTexcdu4"
Decorate 16(g_tTex1df4a) DescriptorSet 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
- Decorate 40(g_tTex1di4a) DescriptorSet 0
- Decorate 55(g_tTex1du4a) DescriptorSet 0
- Decorate 69(g_tTex2df4a) DescriptorSet 0
- Decorate 86(g_tTex2di4a) DescriptorSet 0
- Decorate 101(g_tTex2du4a) DescriptorSet 0
- Decorate 116(g_tTexcdf4a) DescriptorSet 0
- Decorate 133(g_tTexcdi4a) DescriptorSet 0
- Decorate 148(g_tTexcdu4a) DescriptorSet 0
- Decorate 175(Color) Location 0
- Decorate 179(Depth) BuiltIn FragDepth
- Decorate 184(g_tTex1df4) DescriptorSet 0
- Decorate 184(g_tTex1df4) Binding 0
- Decorate 187(g_tTex1di4) DescriptorSet 0
- Decorate 190(g_tTex1du4) DescriptorSet 0
- Decorate 193(g_tTex2df4) DescriptorSet 0
- Decorate 196(g_tTex2di4) DescriptorSet 0
- Decorate 199(g_tTex2du4) DescriptorSet 0
- Decorate 202(g_tTex3df4) DescriptorSet 0
- Decorate 205(g_tTex3di4) DescriptorSet 0
- Decorate 208(g_tTex3du4) DescriptorSet 0
- Decorate 211(g_tTexcdf4) DescriptorSet 0
- Decorate 214(g_tTexcdi4) DescriptorSet 0
- Decorate 217(g_tTexcdu4) DescriptorSet 0
+ Decorate 39(g_tTex1di4a) DescriptorSet 0
+ Decorate 53(g_tTex1du4a) DescriptorSet 0
+ Decorate 66(g_tTex2df4a) DescriptorSet 0
+ Decorate 82(g_tTex2di4a) DescriptorSet 0
+ Decorate 96(g_tTex2du4a) DescriptorSet 0
+ Decorate 110(g_tTexcdf4a) DescriptorSet 0
+ Decorate 126(g_tTexcdi4a) DescriptorSet 0
+ Decorate 140(g_tTexcdu4a) DescriptorSet 0
+ Decorate 166(@entryPointOutput.Color) Location 0
+ Decorate 170(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 175(g_tTex1df4) DescriptorSet 0
+ Decorate 175(g_tTex1df4) Binding 0
+ Decorate 178(g_tTex1di4) DescriptorSet 0
+ Decorate 181(g_tTex1du4) DescriptorSet 0
+ Decorate 184(g_tTex2df4) DescriptorSet 0
+ Decorate 187(g_tTex2di4) DescriptorSet 0
+ Decorate 190(g_tTex2du4) DescriptorSet 0
+ Decorate 193(g_tTex3df4) DescriptorSet 0
+ Decorate 196(g_tTex3di4) DescriptorSet 0
+ Decorate 199(g_tTex3du4) DescriptorSet 0
+ Decorate 202(g_tTexcdf4) DescriptorSet 0
+ Decorate 205(g_tTexcdi4) DescriptorSet 0
+ Decorate 208(g_tTexcdu4) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -479,228 +480,219 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 6(float)
- 14: TypeImage 6(float) 1D array sampled format:Unknown
+ 14: TypeImage 6(float) 1D depth array sampled format:Unknown
15: TypePointer UniformConstant 14
16(g_tTex1df4a): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(g_sSamp): 19(ptr) Variable UniformConstant
- 22: TypeImage 6(float) 1D depth array sampled format:Unknown
- 23: TypeSampledImage 22
- 25: TypeVector 6(float) 2
- 26: 6(float) Constant 1036831949
- 27: 6(float) Constant 1045220557
- 28: 25(fvec2) ConstantComposite 26 27
- 29: 6(float) Constant 1061158912
- 30: TypeVector 6(float) 3
- 37: TypeInt 32 1
- 38: TypeImage 37(int) 1D array sampled format:Unknown
- 39: TypePointer UniformConstant 38
- 40(g_tTex1di4a): 39(ptr) Variable UniformConstant
- 43: TypeImage 37(int) 1D depth array sampled format:Unknown
- 44: TypeSampledImage 43
- 52: TypeInt 32 0
- 53: TypeImage 52(int) 1D array sampled format:Unknown
- 54: TypePointer UniformConstant 53
- 55(g_tTex1du4a): 54(ptr) Variable UniformConstant
- 58: TypeImage 52(int) 1D depth array sampled format:Unknown
- 59: TypeSampledImage 58
- 67: TypeImage 6(float) 2D array sampled format:Unknown
- 68: TypePointer UniformConstant 67
- 69(g_tTex2df4a): 68(ptr) Variable UniformConstant
- 72: TypeImage 6(float) 2D depth array sampled format:Unknown
- 73: TypeSampledImage 72
- 75: 6(float) Constant 1050253722
- 76: 30(fvec3) ConstantComposite 26 27 75
- 84: TypeImage 37(int) 2D array sampled format:Unknown
- 85: TypePointer UniformConstant 84
- 86(g_tTex2di4a): 85(ptr) Variable UniformConstant
- 89: TypeImage 37(int) 2D depth array sampled format:Unknown
- 90: TypeSampledImage 89
- 99: TypeImage 52(int) 2D array sampled format:Unknown
- 100: TypePointer UniformConstant 99
-101(g_tTex2du4a): 100(ptr) Variable UniformConstant
- 104: TypeImage 52(int) 2D depth array sampled format:Unknown
- 105: TypeSampledImage 104
- 114: TypeImage 6(float) Cube array sampled format:Unknown
- 115: TypePointer UniformConstant 114
-116(g_tTexcdf4a): 115(ptr) Variable UniformConstant
- 119: TypeImage 6(float) Cube depth array sampled format:Unknown
- 120: TypeSampledImage 119
- 122: 6(float) Constant 1053609165
- 123: 7(fvec4) ConstantComposite 26 27 75 122
- 131: TypeImage 37(int) Cube array sampled format:Unknown
- 132: TypePointer UniformConstant 131
-133(g_tTexcdi4a): 132(ptr) Variable UniformConstant
- 136: TypeImage 37(int) Cube depth array sampled format:Unknown
- 137: TypeSampledImage 136
- 146: TypeImage 52(int) Cube array sampled format:Unknown
- 147: TypePointer UniformConstant 146
-148(g_tTexcdu4a): 147(ptr) Variable UniformConstant
- 151: TypeImage 52(int) Cube depth array sampled format:Unknown
- 152: TypeSampledImage 151
- 160: TypePointer Function 8(PS_OUTPUT)
- 162: 37(int) Constant 0
- 163: 6(float) Constant 1065353216
- 164: 7(fvec4) ConstantComposite 163 163 163 163
- 165: TypePointer Function 7(fvec4)
- 167: 37(int) Constant 1
- 174: TypePointer Output 7(fvec4)
- 175(Color): 174(ptr) Variable Output
- 178: TypePointer Output 6(float)
- 179(Depth): 178(ptr) Variable Output
- 182: TypeImage 6(float) 1D sampled format:Unknown
+ 22: TypeSampledImage 14
+ 24: TypeVector 6(float) 2
+ 25: 6(float) Constant 1036831949
+ 26: 6(float) Constant 1045220557
+ 27: 24(fvec2) ConstantComposite 25 26
+ 28: 6(float) Constant 1061158912
+ 29: TypeVector 6(float) 3
+ 36: TypeInt 32 1
+ 37: TypeImage 36(int) 1D depth array sampled format:Unknown
+ 38: TypePointer UniformConstant 37
+ 39(g_tTex1di4a): 38(ptr) Variable UniformConstant
+ 42: TypeSampledImage 37
+ 50: TypeInt 32 0
+ 51: TypeImage 50(int) 1D depth array sampled format:Unknown
+ 52: TypePointer UniformConstant 51
+ 53(g_tTex1du4a): 52(ptr) Variable UniformConstant
+ 56: TypeSampledImage 51
+ 64: TypeImage 6(float) 2D depth array sampled format:Unknown
+ 65: TypePointer UniformConstant 64
+ 66(g_tTex2df4a): 65(ptr) Variable UniformConstant
+ 69: TypeSampledImage 64
+ 71: 6(float) Constant 1050253722
+ 72: 29(fvec3) ConstantComposite 25 26 71
+ 80: TypeImage 36(int) 2D depth array sampled format:Unknown
+ 81: TypePointer UniformConstant 80
+ 82(g_tTex2di4a): 81(ptr) Variable UniformConstant
+ 85: TypeSampledImage 80
+ 94: TypeImage 50(int) 2D depth array sampled format:Unknown
+ 95: TypePointer UniformConstant 94
+ 96(g_tTex2du4a): 95(ptr) Variable UniformConstant
+ 99: TypeSampledImage 94
+ 108: TypeImage 6(float) Cube depth array sampled format:Unknown
+ 109: TypePointer UniformConstant 108
+110(g_tTexcdf4a): 109(ptr) Variable UniformConstant
+ 113: TypeSampledImage 108
+ 115: 6(float) Constant 1053609165
+ 116: 7(fvec4) ConstantComposite 25 26 71 115
+ 124: TypeImage 36(int) Cube depth array sampled format:Unknown
+ 125: TypePointer UniformConstant 124
+126(g_tTexcdi4a): 125(ptr) Variable UniformConstant
+ 129: TypeSampledImage 124
+ 138: TypeImage 50(int) Cube depth array sampled format:Unknown
+ 139: TypePointer UniformConstant 138
+140(g_tTexcdu4a): 139(ptr) Variable UniformConstant
+ 143: TypeSampledImage 138
+ 151: TypePointer Function 8(PS_OUTPUT)
+ 153: 36(int) Constant 0
+ 154: 6(float) Constant 1065353216
+ 155: 7(fvec4) ConstantComposite 154 154 154 154
+ 156: TypePointer Function 7(fvec4)
+ 158: 36(int) Constant 1
+ 165: TypePointer Output 7(fvec4)
+166(@entryPointOutput.Color): 165(ptr) Variable Output
+ 169: TypePointer Output 6(float)
+170(@entryPointOutput.Depth): 169(ptr) Variable Output
+ 173: TypeImage 6(float) 1D sampled format:Unknown
+ 174: TypePointer UniformConstant 173
+ 175(g_tTex1df4): 174(ptr) Variable UniformConstant
+ 176: TypeImage 36(int) 1D sampled format:Unknown
+ 177: TypePointer UniformConstant 176
+ 178(g_tTex1di4): 177(ptr) Variable UniformConstant
+ 179: TypeImage 50(int) 1D sampled format:Unknown
+ 180: TypePointer UniformConstant 179
+ 181(g_tTex1du4): 180(ptr) Variable UniformConstant
+ 182: TypeImage 6(float) 2D sampled format:Unknown
183: TypePointer UniformConstant 182
- 184(g_tTex1df4): 183(ptr) Variable UniformConstant
- 185: TypeImage 37(int) 1D sampled format:Unknown
+ 184(g_tTex2df4): 183(ptr) Variable UniformConstant
+ 185: TypeImage 36(int) 2D sampled format:Unknown
186: TypePointer UniformConstant 185
- 187(g_tTex1di4): 186(ptr) Variable UniformConstant
- 188: TypeImage 52(int) 1D sampled format:Unknown
+ 187(g_tTex2di4): 186(ptr) Variable UniformConstant
+ 188: TypeImage 50(int) 2D sampled format:Unknown
189: TypePointer UniformConstant 188
- 190(g_tTex1du4): 189(ptr) Variable UniformConstant
- 191: TypeImage 6(float) 2D sampled format:Unknown
+ 190(g_tTex2du4): 189(ptr) Variable UniformConstant
+ 191: TypeImage 6(float) 3D sampled format:Unknown
192: TypePointer UniformConstant 191
- 193(g_tTex2df4): 192(ptr) Variable UniformConstant
- 194: TypeImage 37(int) 2D sampled format:Unknown
+ 193(g_tTex3df4): 192(ptr) Variable UniformConstant
+ 194: TypeImage 36(int) 3D sampled format:Unknown
195: TypePointer UniformConstant 194
- 196(g_tTex2di4): 195(ptr) Variable UniformConstant
- 197: TypeImage 52(int) 2D sampled format:Unknown
+ 196(g_tTex3di4): 195(ptr) Variable UniformConstant
+ 197: TypeImage 50(int) 3D sampled format:Unknown
198: TypePointer UniformConstant 197
- 199(g_tTex2du4): 198(ptr) Variable UniformConstant
- 200: TypeImage 6(float) 3D sampled format:Unknown
+ 199(g_tTex3du4): 198(ptr) Variable UniformConstant
+ 200: TypeImage 6(float) Cube sampled format:Unknown
201: TypePointer UniformConstant 200
- 202(g_tTex3df4): 201(ptr) Variable UniformConstant
- 203: TypeImage 37(int) 3D sampled format:Unknown
+ 202(g_tTexcdf4): 201(ptr) Variable UniformConstant
+ 203: TypeImage 36(int) Cube sampled format:Unknown
204: TypePointer UniformConstant 203
- 205(g_tTex3di4): 204(ptr) Variable UniformConstant
- 206: TypeImage 52(int) 3D sampled format:Unknown
+ 205(g_tTexcdi4): 204(ptr) Variable UniformConstant
+ 206: TypeImage 50(int) Cube sampled format:Unknown
207: TypePointer UniformConstant 206
- 208(g_tTex3du4): 207(ptr) Variable UniformConstant
- 209: TypeImage 6(float) Cube sampled format:Unknown
- 210: TypePointer UniformConstant 209
- 211(g_tTexcdf4): 210(ptr) Variable UniformConstant
- 212: TypeImage 37(int) Cube sampled format:Unknown
- 213: TypePointer UniformConstant 212
- 214(g_tTexcdi4): 213(ptr) Variable UniformConstant
- 215: TypeImage 52(int) Cube sampled format:Unknown
- 216: TypePointer UniformConstant 215
- 217(g_tTexcdu4): 216(ptr) Variable UniformConstant
+ 208(g_tTexcdu4): 207(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
-172(flattenTemp): 160(ptr) Variable Function
- 173:8(PS_OUTPUT) FunctionCall 10(@main()
- Store 172(flattenTemp) 173
- 176: 165(ptr) AccessChain 172(flattenTemp) 162
- 177: 7(fvec4) Load 176
- Store 175(Color) 177
- 180: 12(ptr) AccessChain 172(flattenTemp) 167
- 181: 6(float) Load 180
- Store 179(Depth) 181
+163(flattenTemp): 151(ptr) Variable Function
+ 164:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 163(flattenTemp) 164
+ 167: 156(ptr) AccessChain 163(flattenTemp) 153
+ 168: 7(fvec4) Load 167
+ Store 166(@entryPointOutput.Color) 168
+ 171: 12(ptr) AccessChain 163(flattenTemp) 158
+ 172: 6(float) Load 171
+ Store 170(@entryPointOutput.Depth) 172
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
13(r10): 12(ptr) Variable Function
- 36(r12): 12(ptr) Variable Function
- 51(r14): 12(ptr) Variable Function
- 66(r30): 12(ptr) Variable Function
- 83(r32): 12(ptr) Variable Function
- 98(r34): 12(ptr) Variable Function
- 113(r60): 12(ptr) Variable Function
- 130(r62): 12(ptr) Variable Function
- 145(r64): 12(ptr) Variable Function
- 161(psout): 160(ptr) Variable Function
+ 35(r12): 12(ptr) Variable Function
+ 49(r14): 12(ptr) Variable Function
+ 63(r30): 12(ptr) Variable Function
+ 79(r32): 12(ptr) Variable Function
+ 93(r34): 12(ptr) Variable Function
+ 107(r60): 12(ptr) Variable Function
+ 123(r62): 12(ptr) Variable Function
+ 137(r64): 12(ptr) Variable Function
+ 152(psout): 151(ptr) Variable Function
17: 14 Load 16(g_tTex1df4a)
21: 18 Load 20(g_sSamp)
- 24: 23 SampledImage 17 21
- 31: 6(float) CompositeExtract 28 0
- 32: 6(float) CompositeExtract 28 1
- 33: 30(fvec3) CompositeConstruct 31 32 29
- 34: 6(float) CompositeExtract 33 2
- 35: 6(float) ImageSampleDrefImplicitLod 24 33 34
- Store 13(r10) 35
- 41: 38 Load 40(g_tTex1di4a)
- 42: 18 Load 20(g_sSamp)
- 45: 44 SampledImage 41 42
- 46: 6(float) CompositeExtract 28 0
- 47: 6(float) CompositeExtract 28 1
- 48: 30(fvec3) CompositeConstruct 46 47 29
- 49: 6(float) CompositeExtract 48 2
- 50: 6(float) ImageSampleDrefImplicitLod 45 48 49
- Store 36(r12) 50
- 56: 53 Load 55(g_tTex1du4a)
- 57: 18 Load 20(g_sSamp)
- 60: 59 SampledImage 56 57
- 61: 6(float) CompositeExtract 28 0
- 62: 6(float) CompositeExtract 28 1
- 63: 30(fvec3) CompositeConstruct 61 62 29
- 64: 6(float) CompositeExtract 63 2
- 65: 6(float) ImageSampleDrefImplicitLod 60 63 64
- Store 51(r14) 65
- 70: 67 Load 69(g_tTex2df4a)
- 71: 18 Load 20(g_sSamp)
- 74: 73 SampledImage 70 71
- 77: 6(float) CompositeExtract 76 0
- 78: 6(float) CompositeExtract 76 1
- 79: 6(float) CompositeExtract 76 2
- 80: 7(fvec4) CompositeConstruct 77 78 79 29
- 81: 6(float) CompositeExtract 80 3
- 82: 6(float) ImageSampleDrefImplicitLod 74 80 81
- Store 66(r30) 82
- 87: 84 Load 86(g_tTex2di4a)
- 88: 18 Load 20(g_sSamp)
- 91: 90 SampledImage 87 88
- 92: 6(float) CompositeExtract 76 0
- 93: 6(float) CompositeExtract 76 1
- 94: 6(float) CompositeExtract 76 2
- 95: 7(fvec4) CompositeConstruct 92 93 94 29
- 96: 6(float) CompositeExtract 95 3
- 97: 6(float) ImageSampleDrefImplicitLod 91 95 96
- Store 83(r32) 97
- 102: 99 Load 101(g_tTex2du4a)
- 103: 18 Load 20(g_sSamp)
- 106: 105 SampledImage 102 103
- 107: 6(float) CompositeExtract 76 0
- 108: 6(float) CompositeExtract 76 1
- 109: 6(float) CompositeExtract 76 2
- 110: 7(fvec4) CompositeConstruct 107 108 109 29
- 111: 6(float) CompositeExtract 110 3
- 112: 6(float) ImageSampleDrefImplicitLod 106 110 111
- Store 98(r34) 112
- 117: 114 Load 116(g_tTexcdf4a)
- 118: 18 Load 20(g_sSamp)
- 121: 120 SampledImage 117 118
- 124: 6(float) CompositeExtract 123 0
- 125: 6(float) CompositeExtract 123 1
- 126: 6(float) CompositeExtract 123 2
- 127: 6(float) CompositeExtract 123 3
- 128: 7(fvec4) CompositeConstruct 124 125 126 127
- 129: 6(float) ImageSampleDrefImplicitLod 121 128 29
- Store 113(r60) 129
- 134: 131 Load 133(g_tTexcdi4a)
- 135: 18 Load 20(g_sSamp)
- 138: 137 SampledImage 134 135
- 139: 6(float) CompositeExtract 123 0
- 140: 6(float) CompositeExtract 123 1
- 141: 6(float) CompositeExtract 123 2
- 142: 6(float) CompositeExtract 123 3
- 143: 7(fvec4) CompositeConstruct 139 140 141 142
- 144: 6(float) ImageSampleDrefImplicitLod 138 143 29
- Store 130(r62) 144
- 149: 146 Load 148(g_tTexcdu4a)
- 150: 18 Load 20(g_sSamp)
- 153: 152 SampledImage 149 150
- 154: 6(float) CompositeExtract 123 0
- 155: 6(float) CompositeExtract 123 1
- 156: 6(float) CompositeExtract 123 2
- 157: 6(float) CompositeExtract 123 3
- 158: 7(fvec4) CompositeConstruct 154 155 156 157
- 159: 6(float) ImageSampleDrefImplicitLod 153 158 29
- Store 145(r64) 159
- 166: 165(ptr) AccessChain 161(psout) 162
- Store 166 164
- 168: 12(ptr) AccessChain 161(psout) 167
- Store 168 163
- 169:8(PS_OUTPUT) Load 161(psout)
- ReturnValue 169
+ 23: 22 SampledImage 17 21
+ 30: 6(float) CompositeExtract 27 0
+ 31: 6(float) CompositeExtract 27 1
+ 32: 29(fvec3) CompositeConstruct 30 31 28
+ 33: 6(float) CompositeExtract 32 2
+ 34: 6(float) ImageSampleDrefImplicitLod 23 32 33
+ Store 13(r10) 34
+ 40: 37 Load 39(g_tTex1di4a)
+ 41: 18 Load 20(g_sSamp)
+ 43: 42 SampledImage 40 41
+ 44: 6(float) CompositeExtract 27 0
+ 45: 6(float) CompositeExtract 27 1
+ 46: 29(fvec3) CompositeConstruct 44 45 28
+ 47: 6(float) CompositeExtract 46 2
+ 48: 6(float) ImageSampleDrefImplicitLod 43 46 47
+ Store 35(r12) 48
+ 54: 51 Load 53(g_tTex1du4a)
+ 55: 18 Load 20(g_sSamp)
+ 57: 56 SampledImage 54 55
+ 58: 6(float) CompositeExtract 27 0
+ 59: 6(float) CompositeExtract 27 1
+ 60: 29(fvec3) CompositeConstruct 58 59 28
+ 61: 6(float) CompositeExtract 60 2
+ 62: 6(float) ImageSampleDrefImplicitLod 57 60 61
+ Store 49(r14) 62
+ 67: 64 Load 66(g_tTex2df4a)
+ 68: 18 Load 20(g_sSamp)
+ 70: 69 SampledImage 67 68
+ 73: 6(float) CompositeExtract 72 0
+ 74: 6(float) CompositeExtract 72 1
+ 75: 6(float) CompositeExtract 72 2
+ 76: 7(fvec4) CompositeConstruct 73 74 75 28
+ 77: 6(float) CompositeExtract 76 3
+ 78: 6(float) ImageSampleDrefImplicitLod 70 76 77
+ Store 63(r30) 78
+ 83: 80 Load 82(g_tTex2di4a)
+ 84: 18 Load 20(g_sSamp)
+ 86: 85 SampledImage 83 84
+ 87: 6(float) CompositeExtract 72 0
+ 88: 6(float) CompositeExtract 72 1
+ 89: 6(float) CompositeExtract 72 2
+ 90: 7(fvec4) CompositeConstruct 87 88 89 28
+ 91: 6(float) CompositeExtract 90 3
+ 92: 6(float) ImageSampleDrefImplicitLod 86 90 91
+ Store 79(r32) 92
+ 97: 94 Load 96(g_tTex2du4a)
+ 98: 18 Load 20(g_sSamp)
+ 100: 99 SampledImage 97 98
+ 101: 6(float) CompositeExtract 72 0
+ 102: 6(float) CompositeExtract 72 1
+ 103: 6(float) CompositeExtract 72 2
+ 104: 7(fvec4) CompositeConstruct 101 102 103 28
+ 105: 6(float) CompositeExtract 104 3
+ 106: 6(float) ImageSampleDrefImplicitLod 100 104 105
+ Store 93(r34) 106
+ 111: 108 Load 110(g_tTexcdf4a)
+ 112: 18 Load 20(g_sSamp)
+ 114: 113 SampledImage 111 112
+ 117: 6(float) CompositeExtract 116 0
+ 118: 6(float) CompositeExtract 116 1
+ 119: 6(float) CompositeExtract 116 2
+ 120: 6(float) CompositeExtract 116 3
+ 121: 7(fvec4) CompositeConstruct 117 118 119 120
+ 122: 6(float) ImageSampleDrefImplicitLod 114 121 28
+ Store 107(r60) 122
+ 127: 124 Load 126(g_tTexcdi4a)
+ 128: 18 Load 20(g_sSamp)
+ 130: 129 SampledImage 127 128
+ 131: 6(float) CompositeExtract 116 0
+ 132: 6(float) CompositeExtract 116 1
+ 133: 6(float) CompositeExtract 116 2
+ 134: 6(float) CompositeExtract 116 3
+ 135: 7(fvec4) CompositeConstruct 131 132 133 134
+ 136: 6(float) ImageSampleDrefImplicitLod 130 135 28
+ Store 123(r62) 136
+ 141: 138 Load 140(g_tTexcdu4a)
+ 142: 18 Load 20(g_sSamp)
+ 144: 143 SampledImage 141 142
+ 145: 6(float) CompositeExtract 116 0
+ 146: 6(float) CompositeExtract 116 1
+ 147: 6(float) CompositeExtract 116 2
+ 148: 6(float) CompositeExtract 116 3
+ 149: 7(fvec4) CompositeConstruct 145 146 147 148
+ 150: 6(float) ImageSampleDrefImplicitLod 144 149 28
+ Store 137(r64) 150
+ 157: 156(ptr) AccessChain 152(psout) 153
+ Store 157 155
+ 159: 12(ptr) AccessChain 152(psout) 158
+ Store 159 154
+ 160:8(PS_OUTPUT) Load 152(psout)
+ ReturnValue 160
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index df1004e11a2..729dc36f751 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplecmp.basic.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
0:42 'r00' ( temp float)
0:42 texture ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DShadow)
-0:42 'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec2 ( temp 2-component vector of float)
0:42 Constant:
@@ -22,7 +22,7 @@ gl_FragCoord origin is upper left
0:43 'r02' ( temp float)
0:43 texture ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DShadow)
-0:43 'g_tTex1di4' ( uniform itexture1D)
+0:43 'g_tTex1di4' ( uniform itexture1DShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec2 ( temp 2-component vector of float)
0:43 Constant:
@@ -34,7 +34,7 @@ gl_FragCoord origin is upper left
0:44 'r04' ( temp float)
0:44 texture ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DShadow)
-0:44 'g_tTex1du4' ( uniform utexture1D)
+0:44 'g_tTex1du4' ( uniform utexture1DShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec2 ( temp 2-component vector of float)
0:44 Constant:
@@ -46,7 +46,7 @@ gl_FragCoord origin is upper left
0:47 'r20' ( temp float)
0:47 texture ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DShadow)
-0:47 'g_tTex2df4' ( uniform texture2D)
+0:47 'g_tTex2df4' ( uniform texture2DShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -59,7 +59,7 @@ gl_FragCoord origin is upper left
0:48 'r22' ( temp float)
0:48 texture ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DShadow)
-0:48 'g_tTex2di4' ( uniform itexture2D)
+0:48 'g_tTex2di4' ( uniform itexture2DShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -72,7 +72,7 @@ gl_FragCoord origin is upper left
0:49 'r24' ( temp float)
0:49 texture ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DShadow)
-0:49 'g_tTex2du4' ( uniform utexture2D)
+0:49 'g_tTex2du4' ( uniform utexture2DShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -85,7 +85,7 @@ gl_FragCoord origin is upper left
0:53 'r50' ( temp float)
0:53 texture ( temp float)
0:53 Construct combined texture-sampler ( temp samplerCubeShadow)
-0:53 'g_tTexcdf4' ( uniform textureCube)
+0:53 'g_tTexcdf4' ( uniform textureCubeShadow)
0:53 'g_sSamp' (layout( binding=0) uniform sampler)
0:53 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -99,7 +99,7 @@ gl_FragCoord origin is upper left
0:54 'r52' ( temp float)
0:54 texture ( temp float)
0:54 Construct combined texture-sampler ( temp isamplerCubeShadow)
-0:54 'g_tTexcdi4' ( uniform itextureCube)
+0:54 'g_tTexcdi4' ( uniform itextureCubeShadow)
0:54 'g_sSamp' (layout( binding=0) uniform sampler)
0:54 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -113,7 +113,7 @@ gl_FragCoord origin is upper left
0:55 'r54' ( temp float)
0:55 texture ( temp float)
0:55 Construct combined texture-sampler ( temp usamplerCubeShadow)
-0:55 'g_tTexcdu4' ( uniform utextureCube)
+0:55 'g_tTexcdu4' ( uniform utextureCubeShadow)
0:55 'g_sSamp' (layout( binding=0) uniform sampler)
0:55 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -149,31 +149,31 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 1 (const int)
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
-0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? 'g_tTex1di4' ( uniform itexture1D)
-0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:? 'g_tTex1di4' ( uniform itexture1DShadow)
+0:? 'g_tTex1du4' ( uniform utexture1DShadow)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
-0:? 'g_tTexcdf4' ( uniform textureCube)
-0:? 'g_tTexcdi4' ( uniform itextureCube)
-0:? 'g_tTexcdu4' ( uniform utextureCube)
+0:? 'g_tTexcdf4' ( uniform textureCubeShadow)
+0:? 'g_tTexcdi4' ( uniform itextureCubeShadow)
+0:? 'g_tTexcdu4' ( uniform utextureCubeShadow)
0:? 'g_tTex1df4a' ( uniform texture1DArray)
0:? 'g_tTex1di4a' ( uniform itexture1DArray)
0:? 'g_tTex1du4a' ( uniform utexture1DArray)
@@ -183,14 +183,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -201,7 +201,7 @@ gl_FragCoord origin is upper left
0:42 'r00' ( temp float)
0:42 texture ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DShadow)
-0:42 'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec2 ( temp 2-component vector of float)
0:42 Constant:
@@ -213,7 +213,7 @@ gl_FragCoord origin is upper left
0:43 'r02' ( temp float)
0:43 texture ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DShadow)
-0:43 'g_tTex1di4' ( uniform itexture1D)
+0:43 'g_tTex1di4' ( uniform itexture1DShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec2 ( temp 2-component vector of float)
0:43 Constant:
@@ -225,7 +225,7 @@ gl_FragCoord origin is upper left
0:44 'r04' ( temp float)
0:44 texture ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DShadow)
-0:44 'g_tTex1du4' ( uniform utexture1D)
+0:44 'g_tTex1du4' ( uniform utexture1DShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec2 ( temp 2-component vector of float)
0:44 Constant:
@@ -237,7 +237,7 @@ gl_FragCoord origin is upper left
0:47 'r20' ( temp float)
0:47 texture ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DShadow)
-0:47 'g_tTex2df4' ( uniform texture2D)
+0:47 'g_tTex2df4' ( uniform texture2DShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -250,7 +250,7 @@ gl_FragCoord origin is upper left
0:48 'r22' ( temp float)
0:48 texture ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DShadow)
-0:48 'g_tTex2di4' ( uniform itexture2D)
+0:48 'g_tTex2di4' ( uniform itexture2DShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -263,7 +263,7 @@ gl_FragCoord origin is upper left
0:49 'r24' ( temp float)
0:49 texture ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DShadow)
-0:49 'g_tTex2du4' ( uniform utexture2D)
+0:49 'g_tTex2du4' ( uniform utexture2DShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -276,7 +276,7 @@ gl_FragCoord origin is upper left
0:53 'r50' ( temp float)
0:53 texture ( temp float)
0:53 Construct combined texture-sampler ( temp samplerCubeShadow)
-0:53 'g_tTexcdf4' ( uniform textureCube)
+0:53 'g_tTexcdf4' ( uniform textureCubeShadow)
0:53 'g_sSamp' (layout( binding=0) uniform sampler)
0:53 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -290,7 +290,7 @@ gl_FragCoord origin is upper left
0:54 'r52' ( temp float)
0:54 texture ( temp float)
0:54 Construct combined texture-sampler ( temp isamplerCubeShadow)
-0:54 'g_tTexcdi4' ( uniform itextureCube)
+0:54 'g_tTexcdi4' ( uniform itextureCubeShadow)
0:54 'g_sSamp' (layout( binding=0) uniform sampler)
0:54 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -304,7 +304,7 @@ gl_FragCoord origin is upper left
0:55 'r54' ( temp float)
0:55 texture ( temp float)
0:55 Construct combined texture-sampler ( temp usamplerCubeShadow)
-0:55 'g_tTexcdu4' ( uniform utextureCube)
+0:55 'g_tTexcdu4' ( uniform utextureCubeShadow)
0:55 'g_sSamp' (layout( binding=0) uniform sampler)
0:55 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -340,31 +340,31 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 1 (const int)
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
-0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? 'g_tTex1di4' ( uniform itexture1D)
-0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:? 'g_tTex1di4' ( uniform itexture1DShadow)
+0:? 'g_tTex1du4' ( uniform utexture1DShadow)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
-0:? 'g_tTexcdf4' ( uniform textureCube)
-0:? 'g_tTexcdi4' ( uniform itextureCube)
-0:? 'g_tTexcdu4' ( uniform utextureCube)
+0:? 'g_tTexcdf4' ( uniform textureCubeShadow)
+0:? 'g_tTexcdi4' ( uniform itextureCubeShadow)
+0:? 'g_tTexcdu4' ( uniform utextureCubeShadow)
0:? 'g_tTex1df4a' ( uniform texture1DArray)
0:? 'g_tTex1di4a' ( uniform itexture1DArray)
0:? 'g_tTex1du4a' ( uniform utexture1DArray)
@@ -374,20 +374,21 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 207
+// Generated by (magic number): 80002
+// Id's are bound by 198
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 164 168
+ EntryPoint Fragment 4 "main" 155 159
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -396,64 +397,64 @@ gl_FragCoord origin is upper left
Name 13 "r00"
Name 16 "g_tTex1df4"
Name 20 "g_sSamp"
- Name 31 "r02"
- Name 35 "g_tTex1di4"
- Name 44 "r04"
- Name 48 "g_tTex1du4"
- Name 57 "r20"
- Name 60 "g_tTex2df4"
- Name 74 "r22"
- Name 77 "g_tTex2di4"
- Name 88 "r24"
- Name 91 "g_tTex2du4"
- Name 102 "r50"
- Name 105 "g_tTexcdf4"
- Name 119 "r52"
- Name 122 "g_tTexcdi4"
- Name 134 "r54"
- Name 137 "g_tTexcdu4"
- Name 150 "psout"
- Name 161 "flattenTemp"
- Name 164 "Color"
- Name 168 "Depth"
- Name 173 "g_tTex3df4"
- Name 176 "g_tTex3di4"
- Name 179 "g_tTex3du4"
- Name 182 "g_tTex1df4a"
- Name 185 "g_tTex1di4a"
- Name 188 "g_tTex1du4a"
- Name 191 "g_tTex2df4a"
- Name 194 "g_tTex2di4a"
- Name 197 "g_tTex2du4a"
- Name 200 "g_tTexcdf4a"
- Name 203 "g_tTexcdi4a"
- Name 206 "g_tTexcdu4a"
+ Name 30 "r02"
+ Name 34 "g_tTex1di4"
+ Name 42 "r04"
+ Name 46 "g_tTex1du4"
+ Name 54 "r20"
+ Name 57 "g_tTex2df4"
+ Name 70 "r22"
+ Name 73 "g_tTex2di4"
+ Name 83 "r24"
+ Name 86 "g_tTex2du4"
+ Name 96 "r50"
+ Name 99 "g_tTexcdf4"
+ Name 112 "r52"
+ Name 115 "g_tTexcdi4"
+ Name 126 "r54"
+ Name 129 "g_tTexcdu4"
+ Name 141 "psout"
+ Name 152 "flattenTemp"
+ Name 155 "@entryPointOutput.Color"
+ Name 159 "@entryPointOutput.Depth"
+ Name 164 "g_tTex3df4"
+ Name 167 "g_tTex3di4"
+ Name 170 "g_tTex3du4"
+ Name 173 "g_tTex1df4a"
+ Name 176 "g_tTex1di4a"
+ Name 179 "g_tTex1du4a"
+ Name 182 "g_tTex2df4a"
+ Name 185 "g_tTex2di4a"
+ Name 188 "g_tTex2du4a"
+ Name 191 "g_tTexcdf4a"
+ Name 194 "g_tTexcdi4a"
+ Name 197 "g_tTexcdu4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
- Decorate 35(g_tTex1di4) DescriptorSet 0
- Decorate 48(g_tTex1du4) DescriptorSet 0
- Decorate 60(g_tTex2df4) DescriptorSet 0
- Decorate 77(g_tTex2di4) DescriptorSet 0
- Decorate 91(g_tTex2du4) DescriptorSet 0
- Decorate 105(g_tTexcdf4) DescriptorSet 0
- Decorate 122(g_tTexcdi4) DescriptorSet 0
- Decorate 137(g_tTexcdu4) DescriptorSet 0
- Decorate 164(Color) Location 0
- Decorate 168(Depth) BuiltIn FragDepth
- Decorate 173(g_tTex3df4) DescriptorSet 0
- Decorate 176(g_tTex3di4) DescriptorSet 0
- Decorate 179(g_tTex3du4) DescriptorSet 0
- Decorate 182(g_tTex1df4a) DescriptorSet 0
- Decorate 185(g_tTex1di4a) DescriptorSet 0
- Decorate 188(g_tTex1du4a) DescriptorSet 0
- Decorate 191(g_tTex2df4a) DescriptorSet 0
- Decorate 194(g_tTex2di4a) DescriptorSet 0
- Decorate 197(g_tTex2du4a) DescriptorSet 0
- Decorate 200(g_tTexcdf4a) DescriptorSet 0
- Decorate 203(g_tTexcdi4a) DescriptorSet 0
- Decorate 206(g_tTexcdu4a) DescriptorSet 0
+ Decorate 34(g_tTex1di4) DescriptorSet 0
+ Decorate 46(g_tTex1du4) DescriptorSet 0
+ Decorate 57(g_tTex2df4) DescriptorSet 0
+ Decorate 73(g_tTex2di4) DescriptorSet 0
+ Decorate 86(g_tTex2du4) DescriptorSet 0
+ Decorate 99(g_tTexcdf4) DescriptorSet 0
+ Decorate 115(g_tTexcdi4) DescriptorSet 0
+ Decorate 129(g_tTexcdu4) DescriptorSet 0
+ Decorate 155(@entryPointOutput.Color) Location 0
+ Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 164(g_tTex3df4) DescriptorSet 0
+ Decorate 167(g_tTex3di4) DescriptorSet 0
+ Decorate 170(g_tTex3du4) DescriptorSet 0
+ Decorate 173(g_tTex1df4a) DescriptorSet 0
+ Decorate 176(g_tTex1di4a) DescriptorSet 0
+ Decorate 179(g_tTex1du4a) DescriptorSet 0
+ Decorate 182(g_tTex2df4a) DescriptorSet 0
+ Decorate 185(g_tTex2di4a) DescriptorSet 0
+ Decorate 188(g_tTex2du4a) DescriptorSet 0
+ Decorate 191(g_tTexcdf4a) DescriptorSet 0
+ Decorate 194(g_tTexcdi4a) DescriptorSet 0
+ Decorate 197(g_tTexcdu4a) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -461,217 +462,208 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 6(float)
- 14: TypeImage 6(float) 1D sampled format:Unknown
+ 14: TypeImage 6(float) 1D depth sampled format:Unknown
15: TypePointer UniformConstant 14
16(g_tTex1df4): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(g_sSamp): 19(ptr) Variable UniformConstant
- 22: TypeImage 6(float) 1D depth sampled format:Unknown
- 23: TypeSampledImage 22
- 25: 6(float) Constant 1036831949
- 26: 6(float) Constant 1061158912
- 27: TypeVector 6(float) 2
- 32: TypeInt 32 1
- 33: TypeImage 32(int) 1D sampled format:Unknown
- 34: TypePointer UniformConstant 33
- 35(g_tTex1di4): 34(ptr) Variable UniformConstant
- 38: TypeImage 32(int) 1D depth sampled format:Unknown
- 39: TypeSampledImage 38
- 45: TypeInt 32 0
- 46: TypeImage 45(int) 1D sampled format:Unknown
- 47: TypePointer UniformConstant 46
- 48(g_tTex1du4): 47(ptr) Variable UniformConstant
- 51: TypeImage 45(int) 1D depth sampled format:Unknown
- 52: TypeSampledImage 51
- 58: TypeImage 6(float) 2D sampled format:Unknown
- 59: TypePointer UniformConstant 58
- 60(g_tTex2df4): 59(ptr) Variable UniformConstant
- 63: TypeImage 6(float) 2D depth sampled format:Unknown
- 64: TypeSampledImage 63
- 66: 6(float) Constant 1045220557
- 67: 27(fvec2) ConstantComposite 25 66
- 68: TypeVector 6(float) 3
- 75: TypeImage 32(int) 2D sampled format:Unknown
- 76: TypePointer UniformConstant 75
- 77(g_tTex2di4): 76(ptr) Variable UniformConstant
- 80: TypeImage 32(int) 2D depth sampled format:Unknown
- 81: TypeSampledImage 80
- 89: TypeImage 45(int) 2D sampled format:Unknown
- 90: TypePointer UniformConstant 89
- 91(g_tTex2du4): 90(ptr) Variable UniformConstant
- 94: TypeImage 45(int) 2D depth sampled format:Unknown
- 95: TypeSampledImage 94
- 103: TypeImage 6(float) Cube sampled format:Unknown
- 104: TypePointer UniformConstant 103
- 105(g_tTexcdf4): 104(ptr) Variable UniformConstant
- 108: TypeImage 6(float) Cube depth sampled format:Unknown
- 109: TypeSampledImage 108
- 111: 6(float) Constant 1050253722
- 112: 68(fvec3) ConstantComposite 25 66 111
- 120: TypeImage 32(int) Cube sampled format:Unknown
- 121: TypePointer UniformConstant 120
- 122(g_tTexcdi4): 121(ptr) Variable UniformConstant
- 125: TypeImage 32(int) Cube depth sampled format:Unknown
- 126: TypeSampledImage 125
- 135: TypeImage 45(int) Cube sampled format:Unknown
- 136: TypePointer UniformConstant 135
- 137(g_tTexcdu4): 136(ptr) Variable UniformConstant
- 140: TypeImage 45(int) Cube depth sampled format:Unknown
- 141: TypeSampledImage 140
- 149: TypePointer Function 8(PS_OUTPUT)
- 151: 32(int) Constant 0
- 152: 6(float) Constant 1065353216
- 153: 7(fvec4) ConstantComposite 152 152 152 152
- 154: TypePointer Function 7(fvec4)
- 156: 32(int) Constant 1
- 163: TypePointer Output 7(fvec4)
- 164(Color): 163(ptr) Variable Output
- 167: TypePointer Output 6(float)
- 168(Depth): 167(ptr) Variable Output
- 171: TypeImage 6(float) 3D sampled format:Unknown
+ 22: TypeSampledImage 14
+ 24: 6(float) Constant 1036831949
+ 25: 6(float) Constant 1061158912
+ 26: TypeVector 6(float) 2
+ 31: TypeInt 32 1
+ 32: TypeImage 31(int) 1D depth sampled format:Unknown
+ 33: TypePointer UniformConstant 32
+ 34(g_tTex1di4): 33(ptr) Variable UniformConstant
+ 37: TypeSampledImage 32
+ 43: TypeInt 32 0
+ 44: TypeImage 43(int) 1D depth sampled format:Unknown
+ 45: TypePointer UniformConstant 44
+ 46(g_tTex1du4): 45(ptr) Variable UniformConstant
+ 49: TypeSampledImage 44
+ 55: TypeImage 6(float) 2D depth sampled format:Unknown
+ 56: TypePointer UniformConstant 55
+ 57(g_tTex2df4): 56(ptr) Variable UniformConstant
+ 60: TypeSampledImage 55
+ 62: 6(float) Constant 1045220557
+ 63: 26(fvec2) ConstantComposite 24 62
+ 64: TypeVector 6(float) 3
+ 71: TypeImage 31(int) 2D depth sampled format:Unknown
+ 72: TypePointer UniformConstant 71
+ 73(g_tTex2di4): 72(ptr) Variable UniformConstant
+ 76: TypeSampledImage 71
+ 84: TypeImage 43(int) 2D depth sampled format:Unknown
+ 85: TypePointer UniformConstant 84
+ 86(g_tTex2du4): 85(ptr) Variable UniformConstant
+ 89: TypeSampledImage 84
+ 97: TypeImage 6(float) Cube depth sampled format:Unknown
+ 98: TypePointer UniformConstant 97
+ 99(g_tTexcdf4): 98(ptr) Variable UniformConstant
+ 102: TypeSampledImage 97
+ 104: 6(float) Constant 1050253722
+ 105: 64(fvec3) ConstantComposite 24 62 104
+ 113: TypeImage 31(int) Cube depth sampled format:Unknown
+ 114: TypePointer UniformConstant 113
+ 115(g_tTexcdi4): 114(ptr) Variable UniformConstant
+ 118: TypeSampledImage 113
+ 127: TypeImage 43(int) Cube depth sampled format:Unknown
+ 128: TypePointer UniformConstant 127
+ 129(g_tTexcdu4): 128(ptr) Variable UniformConstant
+ 132: TypeSampledImage 127
+ 140: TypePointer Function 8(PS_OUTPUT)
+ 142: 31(int) Constant 0
+ 143: 6(float) Constant 1065353216
+ 144: 7(fvec4) ConstantComposite 143 143 143 143
+ 145: TypePointer Function 7(fvec4)
+ 147: 31(int) Constant 1
+ 154: TypePointer Output 7(fvec4)
+155(@entryPointOutput.Color): 154(ptr) Variable Output
+ 158: TypePointer Output 6(float)
+159(@entryPointOutput.Depth): 158(ptr) Variable Output
+ 162: TypeImage 6(float) 3D sampled format:Unknown
+ 163: TypePointer UniformConstant 162
+ 164(g_tTex3df4): 163(ptr) Variable UniformConstant
+ 165: TypeImage 31(int) 3D sampled format:Unknown
+ 166: TypePointer UniformConstant 165
+ 167(g_tTex3di4): 166(ptr) Variable UniformConstant
+ 168: TypeImage 43(int) 3D sampled format:Unknown
+ 169: TypePointer UniformConstant 168
+ 170(g_tTex3du4): 169(ptr) Variable UniformConstant
+ 171: TypeImage 6(float) 1D array sampled format:Unknown
172: TypePointer UniformConstant 171
- 173(g_tTex3df4): 172(ptr) Variable UniformConstant
- 174: TypeImage 32(int) 3D sampled format:Unknown
+173(g_tTex1df4a): 172(ptr) Variable UniformConstant
+ 174: TypeImage 31(int) 1D array sampled format:Unknown
175: TypePointer UniformConstant 174
- 176(g_tTex3di4): 175(ptr) Variable UniformConstant
- 177: TypeImage 45(int) 3D sampled format:Unknown
+176(g_tTex1di4a): 175(ptr) Variable UniformConstant
+ 177: TypeImage 43(int) 1D array sampled format:Unknown
178: TypePointer UniformConstant 177
- 179(g_tTex3du4): 178(ptr) Variable UniformConstant
- 180: TypeImage 6(float) 1D array sampled format:Unknown
+179(g_tTex1du4a): 178(ptr) Variable UniformConstant
+ 180: TypeImage 6(float) 2D array sampled format:Unknown
181: TypePointer UniformConstant 180
-182(g_tTex1df4a): 181(ptr) Variable UniformConstant
- 183: TypeImage 32(int) 1D array sampled format:Unknown
+182(g_tTex2df4a): 181(ptr) Variable UniformConstant
+ 183: TypeImage 31(int) 2D array sampled format:Unknown
184: TypePointer UniformConstant 183
-185(g_tTex1di4a): 184(ptr) Variable UniformConstant
- 186: TypeImage 45(int) 1D array sampled format:Unknown
+185(g_tTex2di4a): 184(ptr) Variable UniformConstant
+ 186: TypeImage 43(int) 2D array sampled format:Unknown
187: TypePointer UniformConstant 186
-188(g_tTex1du4a): 187(ptr) Variable UniformConstant
- 189: TypeImage 6(float) 2D array sampled format:Unknown
+188(g_tTex2du4a): 187(ptr) Variable UniformConstant
+ 189: TypeImage 6(float) Cube array sampled format:Unknown
190: TypePointer UniformConstant 189
-191(g_tTex2df4a): 190(ptr) Variable UniformConstant
- 192: TypeImage 32(int) 2D array sampled format:Unknown
+191(g_tTexcdf4a): 190(ptr) Variable UniformConstant
+ 192: TypeImage 31(int) Cube array sampled format:Unknown
193: TypePointer UniformConstant 192
-194(g_tTex2di4a): 193(ptr) Variable UniformConstant
- 195: TypeImage 45(int) 2D array sampled format:Unknown
+194(g_tTexcdi4a): 193(ptr) Variable UniformConstant
+ 195: TypeImage 43(int) Cube array sampled format:Unknown
196: TypePointer UniformConstant 195
-197(g_tTex2du4a): 196(ptr) Variable UniformConstant
- 198: TypeImage 6(float) Cube array sampled format:Unknown
- 199: TypePointer UniformConstant 198
-200(g_tTexcdf4a): 199(ptr) Variable UniformConstant
- 201: TypeImage 32(int) Cube array sampled format:Unknown
- 202: TypePointer UniformConstant 201
-203(g_tTexcdi4a): 202(ptr) Variable UniformConstant
- 204: TypeImage 45(int) Cube array sampled format:Unknown
- 205: TypePointer UniformConstant 204
-206(g_tTexcdu4a): 205(ptr) Variable UniformConstant
+197(g_tTexcdu4a): 196(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
-161(flattenTemp): 149(ptr) Variable Function
- 162:8(PS_OUTPUT) FunctionCall 10(@main()
- Store 161(flattenTemp) 162
- 165: 154(ptr) AccessChain 161(flattenTemp) 151
- 166: 7(fvec4) Load 165
- Store 164(Color) 166
- 169: 12(ptr) AccessChain 161(flattenTemp) 156
- 170: 6(float) Load 169
- Store 168(Depth) 170
+152(flattenTemp): 140(ptr) Variable Function
+ 153:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 152(flattenTemp) 153
+ 156: 145(ptr) AccessChain 152(flattenTemp) 142
+ 157: 7(fvec4) Load 156
+ Store 155(@entryPointOutput.Color) 157
+ 160: 12(ptr) AccessChain 152(flattenTemp) 147
+ 161: 6(float) Load 160
+ Store 159(@entryPointOutput.Depth) 161
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
13(r00): 12(ptr) Variable Function
- 31(r02): 12(ptr) Variable Function
- 44(r04): 12(ptr) Variable Function
- 57(r20): 12(ptr) Variable Function
- 74(r22): 12(ptr) Variable Function
- 88(r24): 12(ptr) Variable Function
- 102(r50): 12(ptr) Variable Function
- 119(r52): 12(ptr) Variable Function
- 134(r54): 12(ptr) Variable Function
- 150(psout): 149(ptr) Variable Function
+ 30(r02): 12(ptr) Variable Function
+ 42(r04): 12(ptr) Variable Function
+ 54(r20): 12(ptr) Variable Function
+ 70(r22): 12(ptr) Variable Function
+ 83(r24): 12(ptr) Variable Function
+ 96(r50): 12(ptr) Variable Function
+ 112(r52): 12(ptr) Variable Function
+ 126(r54): 12(ptr) Variable Function
+ 141(psout): 140(ptr) Variable Function
17: 14 Load 16(g_tTex1df4)
21: 18 Load 20(g_sSamp)
- 24: 23 SampledImage 17 21
- 28: 27(fvec2) CompositeConstruct 25 26
- 29: 6(float) CompositeExtract 28 1
- 30: 6(float) ImageSampleDrefImplicitLod 24 28 29
- Store 13(r00) 30
- 36: 33 Load 35(g_tTex1di4)
- 37: 18 Load 20(g_sSamp)
- 40: 39 SampledImage 36 37
- 41: 27(fvec2) CompositeConstruct 25 26
- 42: 6(float) CompositeExtract 41 1
- 43: 6(float) ImageSampleDrefImplicitLod 40 41 42
- Store 31(r02) 43
- 49: 46 Load 48(g_tTex1du4)
- 50: 18 Load 20(g_sSamp)
- 53: 52 SampledImage 49 50
- 54: 27(fvec2) CompositeConstruct 25 26
- 55: 6(float) CompositeExtract 54 1
- 56: 6(float) ImageSampleDrefImplicitLod 53 54 55
- Store 44(r04) 56
- 61: 58 Load 60(g_tTex2df4)
- 62: 18 Load 20(g_sSamp)
- 65: 64 SampledImage 61 62
- 69: 6(float) CompositeExtract 67 0
- 70: 6(float) CompositeExtract 67 1
- 71: 68(fvec3) CompositeConstruct 69 70 26
- 72: 6(float) CompositeExtract 71 2
- 73: 6(float) ImageSampleDrefImplicitLod 65 71 72
- Store 57(r20) 73
- 78: 75 Load 77(g_tTex2di4)
- 79: 18 Load 20(g_sSamp)
- 82: 81 SampledImage 78 79
- 83: 6(float) CompositeExtract 67 0
- 84: 6(float) CompositeExtract 67 1
- 85: 68(fvec3) CompositeConstruct 83 84 26
- 86: 6(float) CompositeExtract 85 2
- 87: 6(float) ImageSampleDrefImplicitLod 82 85 86
- Store 74(r22) 87
- 92: 89 Load 91(g_tTex2du4)
- 93: 18 Load 20(g_sSamp)
- 96: 95 SampledImage 92 93
- 97: 6(float) CompositeExtract 67 0
- 98: 6(float) CompositeExtract 67 1
- 99: 68(fvec3) CompositeConstruct 97 98 26
- 100: 6(float) CompositeExtract 99 2
- 101: 6(float) ImageSampleDrefImplicitLod 96 99 100
- Store 88(r24) 101
- 106: 103 Load 105(g_tTexcdf4)
- 107: 18 Load 20(g_sSamp)
- 110: 109 SampledImage 106 107
- 113: 6(float) CompositeExtract 112 0
- 114: 6(float) CompositeExtract 112 1
- 115: 6(float) CompositeExtract 112 2
- 116: 7(fvec4) CompositeConstruct 113 114 115 26
- 117: 6(float) CompositeExtract 116 3
- 118: 6(float) ImageSampleDrefImplicitLod 110 116 117
- Store 102(r50) 118
- 123: 120 Load 122(g_tTexcdi4)
- 124: 18 Load 20(g_sSamp)
- 127: 126 SampledImage 123 124
- 128: 6(float) CompositeExtract 112 0
- 129: 6(float) CompositeExtract 112 1
- 130: 6(float) CompositeExtract 112 2
- 131: 7(fvec4) CompositeConstruct 128 129 130 26
- 132: 6(float) CompositeExtract 131 3
- 133: 6(float) ImageSampleDrefImplicitLod 127 131 132
- Store 119(r52) 133
- 138: 135 Load 137(g_tTexcdu4)
- 139: 18 Load 20(g_sSamp)
- 142: 141 SampledImage 138 139
- 143: 6(float) CompositeExtract 112 0
- 144: 6(float) CompositeExtract 112 1
- 145: 6(float) CompositeExtract 112 2
- 146: 7(fvec4) CompositeConstruct 143 144 145 26
- 147: 6(float) CompositeExtract 146 3
- 148: 6(float) ImageSampleDrefImplicitLod 142 146 147
- Store 134(r54) 148
- 155: 154(ptr) AccessChain 150(psout) 151
- Store 155 153
- 157: 12(ptr) AccessChain 150(psout) 156
- Store 157 152
- 158:8(PS_OUTPUT) Load 150(psout)
- ReturnValue 158
+ 23: 22 SampledImage 17 21
+ 27: 26(fvec2) CompositeConstruct 24 25
+ 28: 6(float) CompositeExtract 27 1
+ 29: 6(float) ImageSampleDrefImplicitLod 23 27 28
+ Store 13(r00) 29
+ 35: 32 Load 34(g_tTex1di4)
+ 36: 18 Load 20(g_sSamp)
+ 38: 37 SampledImage 35 36
+ 39: 26(fvec2) CompositeConstruct 24 25
+ 40: 6(float) CompositeExtract 39 1
+ 41: 6(float) ImageSampleDrefImplicitLod 38 39 40
+ Store 30(r02) 41
+ 47: 44 Load 46(g_tTex1du4)
+ 48: 18 Load 20(g_sSamp)
+ 50: 49 SampledImage 47 48
+ 51: 26(fvec2) CompositeConstruct 24 25
+ 52: 6(float) CompositeExtract 51 1
+ 53: 6(float) ImageSampleDrefImplicitLod 50 51 52
+ Store 42(r04) 53
+ 58: 55 Load 57(g_tTex2df4)
+ 59: 18 Load 20(g_sSamp)
+ 61: 60 SampledImage 58 59
+ 65: 6(float) CompositeExtract 63 0
+ 66: 6(float) CompositeExtract 63 1
+ 67: 64(fvec3) CompositeConstruct 65 66 25
+ 68: 6(float) CompositeExtract 67 2
+ 69: 6(float) ImageSampleDrefImplicitLod 61 67 68
+ Store 54(r20) 69
+ 74: 71 Load 73(g_tTex2di4)
+ 75: 18 Load 20(g_sSamp)
+ 77: 76 SampledImage 74 75
+ 78: 6(float) CompositeExtract 63 0
+ 79: 6(float) CompositeExtract 63 1
+ 80: 64(fvec3) CompositeConstruct 78 79 25
+ 81: 6(float) CompositeExtract 80 2
+ 82: 6(float) ImageSampleDrefImplicitLod 77 80 81
+ Store 70(r22) 82
+ 87: 84 Load 86(g_tTex2du4)
+ 88: 18 Load 20(g_sSamp)
+ 90: 89 SampledImage 87 88
+ 91: 6(float) CompositeExtract 63 0
+ 92: 6(float) CompositeExtract 63 1
+ 93: 64(fvec3) CompositeConstruct 91 92 25
+ 94: 6(float) CompositeExtract 93 2
+ 95: 6(float) ImageSampleDrefImplicitLod 90 93 94
+ Store 83(r24) 95
+ 100: 97 Load 99(g_tTexcdf4)
+ 101: 18 Load 20(g_sSamp)
+ 103: 102 SampledImage 100 101
+ 106: 6(float) CompositeExtract 105 0
+ 107: 6(float) CompositeExtract 105 1
+ 108: 6(float) CompositeExtract 105 2
+ 109: 7(fvec4) CompositeConstruct 106 107 108 25
+ 110: 6(float) CompositeExtract 109 3
+ 111: 6(float) ImageSampleDrefImplicitLod 103 109 110
+ Store 96(r50) 111
+ 116: 113 Load 115(g_tTexcdi4)
+ 117: 18 Load 20(g_sSamp)
+ 119: 118 SampledImage 116 117
+ 120: 6(float) CompositeExtract 105 0
+ 121: 6(float) CompositeExtract 105 1
+ 122: 6(float) CompositeExtract 105 2
+ 123: 7(fvec4) CompositeConstruct 120 121 122 25
+ 124: 6(float) CompositeExtract 123 3
+ 125: 6(float) ImageSampleDrefImplicitLod 119 123 124
+ Store 112(r52) 125
+ 130: 127 Load 129(g_tTexcdu4)
+ 131: 18 Load 20(g_sSamp)
+ 133: 132 SampledImage 130 131
+ 134: 6(float) CompositeExtract 105 0
+ 135: 6(float) CompositeExtract 105 1
+ 136: 6(float) CompositeExtract 105 2
+ 137: 7(fvec4) CompositeConstruct 134 135 136 25
+ 138: 6(float) CompositeExtract 137 3
+ 139: 6(float) ImageSampleDrefImplicitLod 133 137 138
+ Store 126(r54) 139
+ 146: 145(ptr) AccessChain 141(psout) 142
+ Store 146 144
+ 148: 12(ptr) AccessChain 141(psout) 147
+ Store 148 143
+ 149:8(PS_OUTPUT) Load 141(psout)
+ ReturnValue 149
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.dualmode.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
new file mode 100644
index 00000000000..4ac0d77aba6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
@@ -0,0 +1,157 @@
+hlsl.samplecmp.dualmode.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main( ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:? Sequence
+0:10 texture ( temp float)
+0:10 Construct combined texture-sampler ( temp sampler1DShadow)
+0:10 'g_tTex' (layout( binding=3) uniform texture1DShadow)
+0:10 'g_sSampCmp' (layout( binding=1) uniform sampler)
+0:10 Construct vec2 ( temp 2-component vector of float)
+0:10 Constant:
+0:10 0.100000
+0:10 Constant:
+0:10 0.750000
+0:11 texture ( temp 4-component vector of float)
+0:11 Construct combined texture-sampler ( temp sampler1D)
+0:11 'g_tTex' (layout( binding=3) uniform texture1D)
+0:11 'g_sSamp' (layout( binding=0) uniform sampler)
+0:11 Constant:
+0:11 0.100000
+0:13 Branch: Return with expression
+0:13 Constant:
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_sSamp' (layout( binding=0) uniform sampler)
+0:? 'g_sSampCmp' (layout( binding=1) uniform sampler)
+0:? 'g_tTex' (layout( binding=3) uniform texture1DShadow)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'g_tTex' (layout( binding=3) uniform texture1D)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main( ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:? Sequence
+0:10 texture ( temp float)
+0:10 Construct combined texture-sampler ( temp sampler1DShadow)
+0:10 'g_tTex' (layout( binding=3) uniform texture1DShadow)
+0:10 'g_sSampCmp' (layout( binding=1) uniform sampler)
+0:10 Construct vec2 ( temp 2-component vector of float)
+0:10 Constant:
+0:10 0.100000
+0:10 Constant:
+0:10 0.750000
+0:11 texture ( temp 4-component vector of float)
+0:11 Construct combined texture-sampler ( temp sampler1D)
+0:11 'g_tTex' (layout( binding=3) uniform texture1D)
+0:11 'g_sSamp' (layout( binding=0) uniform sampler)
+0:11 Constant:
+0:11 0.100000
+0:13 Branch: Return with expression
+0:13 Constant:
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:13 0.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_sSamp' (layout( binding=0) uniform sampler)
+0:? 'g_sSampCmp' (layout( binding=1) uniform sampler)
+0:? 'g_tTex' (layout( binding=3) uniform texture1DShadow)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'g_tTex' (layout( binding=3) uniform texture1D)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 43
+
+ Capability Shader
+ Capability Sampled1D
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 41
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 13 "g_tTex"
+ Name 17 "g_sSampCmp"
+ Name 29 "g_tTex"
+ Name 31 "g_sSamp"
+ Name 41 "@entryPointOutput"
+ Decorate 13(g_tTex) DescriptorSet 0
+ Decorate 13(g_tTex) Binding 3
+ Decorate 17(g_sSampCmp) DescriptorSet 0
+ Decorate 17(g_sSampCmp) Binding 1
+ Decorate 29(g_tTex) DescriptorSet 0
+ Decorate 29(g_tTex) Binding 3
+ Decorate 31(g_sSamp) DescriptorSet 0
+ Decorate 31(g_sSamp) Binding 0
+ Decorate 41(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeImage 6(float) 1D depth sampled format:Unknown
+ 12: TypePointer UniformConstant 11
+ 13(g_tTex): 12(ptr) Variable UniformConstant
+ 15: TypeSampler
+ 16: TypePointer UniformConstant 15
+ 17(g_sSampCmp): 16(ptr) Variable UniformConstant
+ 19: TypeSampledImage 11
+ 21: 6(float) Constant 1036831949
+ 22: 6(float) Constant 1061158912
+ 23: TypeVector 6(float) 2
+ 27: TypeImage 6(float) 1D sampled format:Unknown
+ 28: TypePointer UniformConstant 27
+ 29(g_tTex): 28(ptr) Variable UniformConstant
+ 31(g_sSamp): 16(ptr) Variable UniformConstant
+ 33: TypeSampledImage 27
+ 36: 6(float) Constant 0
+ 37: 7(fvec4) ConstantComposite 36 36 36 36
+ 40: TypePointer Output 7(fvec4)
+41(@entryPointOutput): 40(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 42: 7(fvec4) FunctionCall 9(@main()
+ Store 41(@entryPointOutput) 42
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 14: 11 Load 13(g_tTex)
+ 18: 15 Load 17(g_sSampCmp)
+ 20: 19 SampledImage 14 18
+ 24: 23(fvec2) CompositeConstruct 21 22
+ 25: 6(float) CompositeExtract 24 1
+ 26: 6(float) ImageSampleDrefImplicitLod 20 24 25
+ 30: 27 Load 29(g_tTex)
+ 32: 15 Load 31(g_sSamp)
+ 34: 33 SampledImage 30 32
+ 35: 7(fvec4) ImageSampleImplicitLod 34 21
+ ReturnValue 37
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.negative.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.negative.frag.out
new file mode 100644
index 00000000000..65a69e8f104
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.negative.frag.out
@@ -0,0 +1,98 @@
+hlsl.samplecmp.negative.frag
+ERROR: 0:10: '' : expected: SamplerComparisonState
+ERROR: 1 compilation errors. No code generated.
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:8 Function Definition: @main( ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:? Sequence
+0:9 texture ( temp float)
+0:9 Construct combined texture-sampler ( temp sampler2DShadow)
+0:9 'g_shadowTex' ( uniform texture2DShadow)
+0:9 'g_shadowSamplerComp' ( uniform sampler)
+0:9 Construct vec3 ( temp 3-component vector of float)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:9 Constant:
+0:9 0.000000
+0:10 ERROR: Bad aggregation op
+ ( temp float)
+0:10 'g_nonShadowTex' ( uniform texture2D)
+0:10 'g_shadowSampler' ( uniform sampler)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:10 Constant:
+0:10 0.000000
+0:12 Branch: Return with expression
+0:12 Constant:
+0:12 0.000000
+0:12 0.000000
+0:12 0.000000
+0:12 0.000000
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_nonShadowTex' ( uniform texture2D)
+0:? 'g_shadowTex' ( uniform texture2DShadow)
+0:? 'g_shadowSampler' ( uniform sampler)
+0:? 'g_shadowSamplerComp' ( uniform sampler)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:8 Function Definition: @main( ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:? Sequence
+0:9 texture ( temp float)
+0:9 Construct combined texture-sampler ( temp sampler2DShadow)
+0:9 'g_shadowTex' ( uniform texture2DShadow)
+0:9 'g_shadowSamplerComp' ( uniform sampler)
+0:9 Construct vec3 ( temp 3-component vector of float)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:9 Constant:
+0:9 0.000000
+0:10 ERROR: Bad aggregation op
+ ( temp float)
+0:10 'g_nonShadowTex' ( uniform texture2D)
+0:10 'g_shadowSampler' ( uniform sampler)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:10 Constant:
+0:10 0.000000
+0:12 Branch: Return with expression
+0:12 Constant:
+0:12 0.000000
+0:12 0.000000
+0:12 0.000000
+0:12 0.000000
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_nonShadowTex' ( uniform texture2D)
+0:? 'g_shadowTex' ( uniform texture2DShadow)
+0:? 'g_shadowSampler' ( uniform sampler)
+0:? 'g_shadowSamplerComp' ( uniform sampler)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.negative2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.negative2.frag.out
new file mode 100644
index 00000000000..996b3f87041
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.negative2.frag.out
@@ -0,0 +1,80 @@
+hlsl.samplecmp.negative2.frag
+ERROR: 0:7: '' : expected: SamplerComparisonState
+ERROR: 1 compilation errors. No code generated.
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:6 Function Definition: @main( ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:? Sequence
+0:7 ERROR: Bad aggregation op
+ ( temp 4-component vector of float)
+0:7 'g_shadowTex' ( uniform texture2D)
+0:7 'g_shadowSampler' ( uniform sampler)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:7 Constant:
+0:7 0.000000
+0:? Constant:
+0:? 0 (const int)
+0:? 0 (const int)
+0:9 Branch: Return with expression
+0:9 Constant:
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_shadowTex' ( uniform texture2D)
+0:? 'g_shadowSampler' ( uniform sampler)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:6 Function Definition: @main( ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:? Sequence
+0:7 ERROR: Bad aggregation op
+ ( temp 4-component vector of float)
+0:7 'g_shadowTex' ( uniform texture2D)
+0:7 'g_shadowSampler' ( uniform sampler)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:7 Constant:
+0:7 0.000000
+0:? Constant:
+0:? 0 (const int)
+0:? 0 (const int)
+0:9 Branch: Return with expression
+0:9 Constant:
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_shadowTex' ( uniform texture2D)
+0:? 'g_shadowSampler' ( uniform sampler)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index a6193fd9556..5b59ab876cc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplecmp.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
0:42 'r01' ( temp float)
0:42 textureOffset ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DShadow)
-0:42 'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec2 ( temp 2-component vector of float)
0:42 Constant:
@@ -24,7 +24,7 @@ gl_FragCoord origin is upper left
0:43 'r03' ( temp float)
0:43 textureOffset ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DShadow)
-0:43 'g_tTex1di4' ( uniform itexture1D)
+0:43 'g_tTex1di4' ( uniform itexture1DShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec2 ( temp 2-component vector of float)
0:43 Constant:
@@ -38,7 +38,7 @@ gl_FragCoord origin is upper left
0:44 'r05' ( temp float)
0:44 textureOffset ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DShadow)
-0:44 'g_tTex1du4' ( uniform utexture1D)
+0:44 'g_tTex1du4' ( uniform utexture1DShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec2 ( temp 2-component vector of float)
0:44 Constant:
@@ -52,7 +52,7 @@ gl_FragCoord origin is upper left
0:47 'r21' ( temp float)
0:47 textureOffset ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DShadow)
-0:47 'g_tTex2df4' ( uniform texture2D)
+0:47 'g_tTex2df4' ( uniform texture2DShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -68,7 +68,7 @@ gl_FragCoord origin is upper left
0:48 'r23' ( temp float)
0:48 textureOffset ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DShadow)
-0:48 'g_tTex2di4' ( uniform itexture2D)
+0:48 'g_tTex2di4' ( uniform itexture2DShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -84,7 +84,7 @@ gl_FragCoord origin is upper left
0:49 'r25' ( temp float)
0:49 textureOffset ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DShadow)
-0:49 'g_tTex2du4' ( uniform utexture2D)
+0:49 'g_tTex2du4' ( uniform utexture2DShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -122,25 +122,25 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 1 (const int)
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
-0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? 'g_tTex1di4' ( uniform itexture1D)
-0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:? 'g_tTex1di4' ( uniform itexture1DShadow)
+0:? 'g_tTex1du4' ( uniform utexture1DShadow)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
@@ -156,14 +156,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -174,7 +174,7 @@ gl_FragCoord origin is upper left
0:42 'r01' ( temp float)
0:42 textureOffset ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DShadow)
-0:42 'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec2 ( temp 2-component vector of float)
0:42 Constant:
@@ -188,7 +188,7 @@ gl_FragCoord origin is upper left
0:43 'r03' ( temp float)
0:43 textureOffset ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DShadow)
-0:43 'g_tTex1di4' ( uniform itexture1D)
+0:43 'g_tTex1di4' ( uniform itexture1DShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec2 ( temp 2-component vector of float)
0:43 Constant:
@@ -202,7 +202,7 @@ gl_FragCoord origin is upper left
0:44 'r05' ( temp float)
0:44 textureOffset ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DShadow)
-0:44 'g_tTex1du4' ( uniform utexture1D)
+0:44 'g_tTex1du4' ( uniform utexture1DShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec2 ( temp 2-component vector of float)
0:44 Constant:
@@ -216,7 +216,7 @@ gl_FragCoord origin is upper left
0:47 'r21' ( temp float)
0:47 textureOffset ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DShadow)
-0:47 'g_tTex2df4' ( uniform texture2D)
+0:47 'g_tTex2df4' ( uniform texture2DShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -232,7 +232,7 @@ gl_FragCoord origin is upper left
0:48 'r23' ( temp float)
0:48 textureOffset ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DShadow)
-0:48 'g_tTex2di4' ( uniform itexture2D)
+0:48 'g_tTex2di4' ( uniform itexture2DShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -248,7 +248,7 @@ gl_FragCoord origin is upper left
0:49 'r25' ( temp float)
0:49 textureOffset ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DShadow)
-0:49 'g_tTex2du4' ( uniform utexture2D)
+0:49 'g_tTex2du4' ( uniform utexture2DShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -286,25 +286,25 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 1 (const int)
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
-0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? 'g_tTex1di4' ( uniform itexture1D)
-0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:? 'g_tTex1di4' ( uniform itexture1DShadow)
+0:? 'g_tTex1du4' ( uniform utexture1DShadow)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
@@ -320,20 +320,21 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 173
+// Generated by (magic number): 80002
+// Id's are bound by 167
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 121 125
+ EntryPoint Fragment 4 "main" 115 119
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -342,61 +343,61 @@ gl_FragCoord origin is upper left
Name 13 "r01"
Name 16 "g_tTex1df4"
Name 20 "g_sSamp"
- Name 33 "r03"
- Name 36 "g_tTex1di4"
- Name 45 "r05"
- Name 49 "g_tTex1du4"
- Name 58 "r21"
- Name 61 "g_tTex2df4"
- Name 78 "r23"
- Name 81 "g_tTex2di4"
- Name 92 "r25"
- Name 95 "g_tTex2du4"
- Name 107 "psout"
- Name 118 "flattenTemp"
- Name 121 "Color"
- Name 125 "Depth"
- Name 130 "g_tTex3df4"
- Name 133 "g_tTex3di4"
- Name 136 "g_tTex3du4"
- Name 139 "g_tTexcdf4"
- Name 142 "g_tTexcdi4"
- Name 145 "g_tTexcdu4"
- Name 148 "g_tTex1df4a"
- Name 151 "g_tTex1di4a"
- Name 154 "g_tTex1du4a"
- Name 157 "g_tTex2df4a"
- Name 160 "g_tTex2di4a"
- Name 163 "g_tTex2du4a"
- Name 166 "g_tTexcdf4a"
- Name 169 "g_tTexcdi4a"
- Name 172 "g_tTexcdu4a"
+ Name 32 "r03"
+ Name 35 "g_tTex1di4"
+ Name 43 "r05"
+ Name 47 "g_tTex1du4"
+ Name 55 "r21"
+ Name 58 "g_tTex2df4"
+ Name 74 "r23"
+ Name 77 "g_tTex2di4"
+ Name 87 "r25"
+ Name 90 "g_tTex2du4"
+ Name 101 "psout"
+ Name 112 "flattenTemp"
+ Name 115 "@entryPointOutput.Color"
+ Name 119 "@entryPointOutput.Depth"
+ Name 124 "g_tTex3df4"
+ Name 127 "g_tTex3di4"
+ Name 130 "g_tTex3du4"
+ Name 133 "g_tTexcdf4"
+ Name 136 "g_tTexcdi4"
+ Name 139 "g_tTexcdu4"
+ Name 142 "g_tTex1df4a"
+ Name 145 "g_tTex1di4a"
+ Name 148 "g_tTex1du4a"
+ Name 151 "g_tTex2df4a"
+ Name 154 "g_tTex2di4a"
+ Name 157 "g_tTex2du4a"
+ Name 160 "g_tTexcdf4a"
+ Name 163 "g_tTexcdi4a"
+ Name 166 "g_tTexcdu4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
- Decorate 36(g_tTex1di4) DescriptorSet 0
- Decorate 49(g_tTex1du4) DescriptorSet 0
- Decorate 61(g_tTex2df4) DescriptorSet 0
- Decorate 81(g_tTex2di4) DescriptorSet 0
- Decorate 95(g_tTex2du4) DescriptorSet 0
- Decorate 121(Color) Location 0
- Decorate 125(Depth) BuiltIn FragDepth
- Decorate 130(g_tTex3df4) DescriptorSet 0
- Decorate 133(g_tTex3di4) DescriptorSet 0
- Decorate 136(g_tTex3du4) DescriptorSet 0
- Decorate 139(g_tTexcdf4) DescriptorSet 0
- Decorate 142(g_tTexcdi4) DescriptorSet 0
- Decorate 145(g_tTexcdu4) DescriptorSet 0
- Decorate 148(g_tTex1df4a) DescriptorSet 0
- Decorate 151(g_tTex1di4a) DescriptorSet 0
- Decorate 154(g_tTex1du4a) DescriptorSet 0
- Decorate 157(g_tTex2df4a) DescriptorSet 0
- Decorate 160(g_tTex2di4a) DescriptorSet 0
- Decorate 163(g_tTex2du4a) DescriptorSet 0
- Decorate 166(g_tTexcdf4a) DescriptorSet 0
- Decorate 169(g_tTexcdi4a) DescriptorSet 0
- Decorate 172(g_tTexcdu4a) DescriptorSet 0
+ Decorate 35(g_tTex1di4) DescriptorSet 0
+ Decorate 47(g_tTex1du4) DescriptorSet 0
+ Decorate 58(g_tTex2df4) DescriptorSet 0
+ Decorate 77(g_tTex2di4) DescriptorSet 0
+ Decorate 90(g_tTex2du4) DescriptorSet 0
+ Decorate 115(@entryPointOutput.Color) Location 0
+ Decorate 119(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 124(g_tTex3df4) DescriptorSet 0
+ Decorate 127(g_tTex3di4) DescriptorSet 0
+ Decorate 130(g_tTex3du4) DescriptorSet 0
+ Decorate 133(g_tTexcdf4) DescriptorSet 0
+ Decorate 136(g_tTexcdi4) DescriptorSet 0
+ Decorate 139(g_tTexcdu4) DescriptorSet 0
+ Decorate 142(g_tTex1df4a) DescriptorSet 0
+ Decorate 145(g_tTex1di4a) DescriptorSet 0
+ Decorate 148(g_tTex1du4a) DescriptorSet 0
+ Decorate 151(g_tTex2df4a) DescriptorSet 0
+ Decorate 154(g_tTex2di4a) DescriptorSet 0
+ Decorate 157(g_tTex2du4a) DescriptorSet 0
+ Decorate 160(g_tTexcdf4a) DescriptorSet 0
+ Decorate 163(g_tTexcdi4a) DescriptorSet 0
+ Decorate 166(g_tTexcdu4a) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -404,180 +405,174 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 6(float)
- 14: TypeImage 6(float) 1D sampled format:Unknown
+ 14: TypeImage 6(float) 1D depth sampled format:Unknown
15: TypePointer UniformConstant 14
16(g_tTex1df4): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(g_sSamp): 19(ptr) Variable UniformConstant
- 22: TypeImage 6(float) 1D depth sampled format:Unknown
- 23: TypeSampledImage 22
- 25: 6(float) Constant 1036831949
- 26: 6(float) Constant 1061158912
- 27: TypeVector 6(float) 2
- 29: TypeInt 32 1
- 30: 29(int) Constant 2
- 34: TypeImage 29(int) 1D sampled format:Unknown
- 35: TypePointer UniformConstant 34
- 36(g_tTex1di4): 35(ptr) Variable UniformConstant
- 39: TypeImage 29(int) 1D depth sampled format:Unknown
- 40: TypeSampledImage 39
- 46: TypeInt 32 0
- 47: TypeImage 46(int) 1D sampled format:Unknown
- 48: TypePointer UniformConstant 47
- 49(g_tTex1du4): 48(ptr) Variable UniformConstant
- 52: TypeImage 46(int) 1D depth sampled format:Unknown
- 53: TypeSampledImage 52
- 59: TypeImage 6(float) 2D sampled format:Unknown
- 60: TypePointer UniformConstant 59
- 61(g_tTex2df4): 60(ptr) Variable UniformConstant
- 64: TypeImage 6(float) 2D depth sampled format:Unknown
- 65: TypeSampledImage 64
- 67: 6(float) Constant 1045220557
- 68: 27(fvec2) ConstantComposite 25 67
- 69: TypeVector 6(float) 3
- 73: TypeVector 29(int) 2
- 74: 29(int) Constant 3
- 75: 73(ivec2) ConstantComposite 30 74
- 79: TypeImage 29(int) 2D sampled format:Unknown
- 80: TypePointer UniformConstant 79
- 81(g_tTex2di4): 80(ptr) Variable UniformConstant
- 84: TypeImage 29(int) 2D depth sampled format:Unknown
- 85: TypeSampledImage 84
- 93: TypeImage 46(int) 2D sampled format:Unknown
- 94: TypePointer UniformConstant 93
- 95(g_tTex2du4): 94(ptr) Variable UniformConstant
- 98: TypeImage 46(int) 2D depth sampled format:Unknown
- 99: TypeSampledImage 98
- 106: TypePointer Function 8(PS_OUTPUT)
- 108: 29(int) Constant 0
- 109: 6(float) Constant 1065353216
- 110: 7(fvec4) ConstantComposite 109 109 109 109
- 111: TypePointer Function 7(fvec4)
- 113: 29(int) Constant 1
- 120: TypePointer Output 7(fvec4)
- 121(Color): 120(ptr) Variable Output
- 124: TypePointer Output 6(float)
- 125(Depth): 124(ptr) Variable Output
- 128: TypeImage 6(float) 3D sampled format:Unknown
+ 22: TypeSampledImage 14
+ 24: 6(float) Constant 1036831949
+ 25: 6(float) Constant 1061158912
+ 26: TypeVector 6(float) 2
+ 28: TypeInt 32 1
+ 29: 28(int) Constant 2
+ 33: TypeImage 28(int) 1D depth sampled format:Unknown
+ 34: TypePointer UniformConstant 33
+ 35(g_tTex1di4): 34(ptr) Variable UniformConstant
+ 38: TypeSampledImage 33
+ 44: TypeInt 32 0
+ 45: TypeImage 44(int) 1D depth sampled format:Unknown
+ 46: TypePointer UniformConstant 45
+ 47(g_tTex1du4): 46(ptr) Variable UniformConstant
+ 50: TypeSampledImage 45
+ 56: TypeImage 6(float) 2D depth sampled format:Unknown
+ 57: TypePointer UniformConstant 56
+ 58(g_tTex2df4): 57(ptr) Variable UniformConstant
+ 61: TypeSampledImage 56
+ 63: 6(float) Constant 1045220557
+ 64: 26(fvec2) ConstantComposite 24 63
+ 65: TypeVector 6(float) 3
+ 69: TypeVector 28(int) 2
+ 70: 28(int) Constant 3
+ 71: 69(ivec2) ConstantComposite 29 70
+ 75: TypeImage 28(int) 2D depth sampled format:Unknown
+ 76: TypePointer UniformConstant 75
+ 77(g_tTex2di4): 76(ptr) Variable UniformConstant
+ 80: TypeSampledImage 75
+ 88: TypeImage 44(int) 2D depth sampled format:Unknown
+ 89: TypePointer UniformConstant 88
+ 90(g_tTex2du4): 89(ptr) Variable UniformConstant
+ 93: TypeSampledImage 88
+ 100: TypePointer Function 8(PS_OUTPUT)
+ 102: 28(int) Constant 0
+ 103: 6(float) Constant 1065353216
+ 104: 7(fvec4) ConstantComposite 103 103 103 103
+ 105: TypePointer Function 7(fvec4)
+ 107: 28(int) Constant 1
+ 114: TypePointer Output 7(fvec4)
+115(@entryPointOutput.Color): 114(ptr) Variable Output
+ 118: TypePointer Output 6(float)
+119(@entryPointOutput.Depth): 118(ptr) Variable Output
+ 122: TypeImage 6(float) 3D sampled format:Unknown
+ 123: TypePointer UniformConstant 122
+ 124(g_tTex3df4): 123(ptr) Variable UniformConstant
+ 125: TypeImage 28(int) 3D sampled format:Unknown
+ 126: TypePointer UniformConstant 125
+ 127(g_tTex3di4): 126(ptr) Variable UniformConstant
+ 128: TypeImage 44(int) 3D sampled format:Unknown
129: TypePointer UniformConstant 128
- 130(g_tTex3df4): 129(ptr) Variable UniformConstant
- 131: TypeImage 29(int) 3D sampled format:Unknown
+ 130(g_tTex3du4): 129(ptr) Variable UniformConstant
+ 131: TypeImage 6(float) Cube sampled format:Unknown
132: TypePointer UniformConstant 131
- 133(g_tTex3di4): 132(ptr) Variable UniformConstant
- 134: TypeImage 46(int) 3D sampled format:Unknown
+ 133(g_tTexcdf4): 132(ptr) Variable UniformConstant
+ 134: TypeImage 28(int) Cube sampled format:Unknown
135: TypePointer UniformConstant 134
- 136(g_tTex3du4): 135(ptr) Variable UniformConstant
- 137: TypeImage 6(float) Cube sampled format:Unknown
+ 136(g_tTexcdi4): 135(ptr) Variable UniformConstant
+ 137: TypeImage 44(int) Cube sampled format:Unknown
138: TypePointer UniformConstant 137
- 139(g_tTexcdf4): 138(ptr) Variable UniformConstant
- 140: TypeImage 29(int) Cube sampled format:Unknown
+ 139(g_tTexcdu4): 138(ptr) Variable UniformConstant
+ 140: TypeImage 6(float) 1D array sampled format:Unknown
141: TypePointer UniformConstant 140
- 142(g_tTexcdi4): 141(ptr) Variable UniformConstant
- 143: TypeImage 46(int) Cube sampled format:Unknown
+142(g_tTex1df4a): 141(ptr) Variable UniformConstant
+ 143: TypeImage 28(int) 1D array sampled format:Unknown
144: TypePointer UniformConstant 143
- 145(g_tTexcdu4): 144(ptr) Variable UniformConstant
- 146: TypeImage 6(float) 1D array sampled format:Unknown
+145(g_tTex1di4a): 144(ptr) Variable UniformConstant
+ 146: TypeImage 44(int) 1D array sampled format:Unknown
147: TypePointer UniformConstant 146
-148(g_tTex1df4a): 147(ptr) Variable UniformConstant
- 149: TypeImage 29(int) 1D array sampled format:Unknown
+148(g_tTex1du4a): 147(ptr) Variable UniformConstant
+ 149: TypeImage 6(float) 2D array sampled format:Unknown
150: TypePointer UniformConstant 149
-151(g_tTex1di4a): 150(ptr) Variable UniformConstant
- 152: TypeImage 46(int) 1D array sampled format:Unknown
+151(g_tTex2df4a): 150(ptr) Variable UniformConstant
+ 152: TypeImage 28(int) 2D array sampled format:Unknown
153: TypePointer UniformConstant 152
-154(g_tTex1du4a): 153(ptr) Variable UniformConstant
- 155: TypeImage 6(float) 2D array sampled format:Unknown
+154(g_tTex2di4a): 153(ptr) Variable UniformConstant
+ 155: TypeImage 44(int) 2D array sampled format:Unknown
156: TypePointer UniformConstant 155
-157(g_tTex2df4a): 156(ptr) Variable UniformConstant
- 158: TypeImage 29(int) 2D array sampled format:Unknown
+157(g_tTex2du4a): 156(ptr) Variable UniformConstant
+ 158: TypeImage 6(float) Cube array sampled format:Unknown
159: TypePointer UniformConstant 158
-160(g_tTex2di4a): 159(ptr) Variable UniformConstant
- 161: TypeImage 46(int) 2D array sampled format:Unknown
+160(g_tTexcdf4a): 159(ptr) Variable UniformConstant
+ 161: TypeImage 28(int) Cube array sampled format:Unknown
162: TypePointer UniformConstant 161
-163(g_tTex2du4a): 162(ptr) Variable UniformConstant
- 164: TypeImage 6(float) Cube array sampled format:Unknown
+163(g_tTexcdi4a): 162(ptr) Variable UniformConstant
+ 164: TypeImage 44(int) Cube array sampled format:Unknown
165: TypePointer UniformConstant 164
-166(g_tTexcdf4a): 165(ptr) Variable UniformConstant
- 167: TypeImage 29(int) Cube array sampled format:Unknown
- 168: TypePointer UniformConstant 167
-169(g_tTexcdi4a): 168(ptr) Variable UniformConstant
- 170: TypeImage 46(int) Cube array sampled format:Unknown
- 171: TypePointer UniformConstant 170
-172(g_tTexcdu4a): 171(ptr) Variable UniformConstant
+166(g_tTexcdu4a): 165(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
-118(flattenTemp): 106(ptr) Variable Function
- 119:8(PS_OUTPUT) FunctionCall 10(@main()
- Store 118(flattenTemp) 119
- 122: 111(ptr) AccessChain 118(flattenTemp) 108
- 123: 7(fvec4) Load 122
- Store 121(Color) 123
- 126: 12(ptr) AccessChain 118(flattenTemp) 113
- 127: 6(float) Load 126
- Store 125(Depth) 127
+112(flattenTemp): 100(ptr) Variable Function
+ 113:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 112(flattenTemp) 113
+ 116: 105(ptr) AccessChain 112(flattenTemp) 102
+ 117: 7(fvec4) Load 116
+ Store 115(@entryPointOutput.Color) 117
+ 120: 12(ptr) AccessChain 112(flattenTemp) 107
+ 121: 6(float) Load 120
+ Store 119(@entryPointOutput.Depth) 121
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
13(r01): 12(ptr) Variable Function
- 33(r03): 12(ptr) Variable Function
- 45(r05): 12(ptr) Variable Function
- 58(r21): 12(ptr) Variable Function
- 78(r23): 12(ptr) Variable Function
- 92(r25): 12(ptr) Variable Function
- 107(psout): 106(ptr) Variable Function
+ 32(r03): 12(ptr) Variable Function
+ 43(r05): 12(ptr) Variable Function
+ 55(r21): 12(ptr) Variable Function
+ 74(r23): 12(ptr) Variable Function
+ 87(r25): 12(ptr) Variable Function
+ 101(psout): 100(ptr) Variable Function
17: 14 Load 16(g_tTex1df4)
21: 18 Load 20(g_sSamp)
- 24: 23 SampledImage 17 21
- 28: 27(fvec2) CompositeConstruct 25 26
- 31: 6(float) CompositeExtract 28 1
- 32: 6(float) ImageSampleDrefImplicitLod 24 28 31 ConstOffset 30
- Store 13(r01) 32
- 37: 34 Load 36(g_tTex1di4)
- 38: 18 Load 20(g_sSamp)
- 41: 40 SampledImage 37 38
- 42: 27(fvec2) CompositeConstruct 25 26
- 43: 6(float) CompositeExtract 42 1
- 44: 6(float) ImageSampleDrefImplicitLod 41 42 43 ConstOffset 30
- Store 33(r03) 44
- 50: 47 Load 49(g_tTex1du4)
- 51: 18 Load 20(g_sSamp)
- 54: 53 SampledImage 50 51
- 55: 27(fvec2) CompositeConstruct 25 26
- 56: 6(float) CompositeExtract 55 1
- 57: 6(float) ImageSampleDrefImplicitLod 54 55 56 ConstOffset 30
- Store 45(r05) 57
- 62: 59 Load 61(g_tTex2df4)
- 63: 18 Load 20(g_sSamp)
- 66: 65 SampledImage 62 63
- 70: 6(float) CompositeExtract 68 0
- 71: 6(float) CompositeExtract 68 1
- 72: 69(fvec3) CompositeConstruct 70 71 26
- 76: 6(float) CompositeExtract 72 2
- 77: 6(float) ImageSampleDrefImplicitLod 66 72 76 ConstOffset 75
- Store 58(r21) 77
- 82: 79 Load 81(g_tTex2di4)
- 83: 18 Load 20(g_sSamp)
- 86: 85 SampledImage 82 83
- 87: 6(float) CompositeExtract 68 0
- 88: 6(float) CompositeExtract 68 1
- 89: 69(fvec3) CompositeConstruct 87 88 26
- 90: 6(float) CompositeExtract 89 2
- 91: 6(float) ImageSampleDrefImplicitLod 86 89 90 ConstOffset 75
- Store 78(r23) 91
- 96: 93 Load 95(g_tTex2du4)
- 97: 18 Load 20(g_sSamp)
- 100: 99 SampledImage 96 97
- 101: 6(float) CompositeExtract 68 0
- 102: 6(float) CompositeExtract 68 1
- 103: 69(fvec3) CompositeConstruct 101 102 26
- 104: 6(float) CompositeExtract 103 2
- 105: 6(float) ImageSampleDrefImplicitLod 100 103 104 ConstOffset 75
- Store 92(r25) 105
- 112: 111(ptr) AccessChain 107(psout) 108
- Store 112 110
- 114: 12(ptr) AccessChain 107(psout) 113
- Store 114 109
- 115:8(PS_OUTPUT) Load 107(psout)
- ReturnValue 115
+ 23: 22 SampledImage 17 21
+ 27: 26(fvec2) CompositeConstruct 24 25
+ 30: 6(float) CompositeExtract 27 1
+ 31: 6(float) ImageSampleDrefImplicitLod 23 27 30 ConstOffset 29
+ Store 13(r01) 31
+ 36: 33 Load 35(g_tTex1di4)
+ 37: 18 Load 20(g_sSamp)
+ 39: 38 SampledImage 36 37
+ 40: 26(fvec2) CompositeConstruct 24 25
+ 41: 6(float) CompositeExtract 40 1
+ 42: 6(float) ImageSampleDrefImplicitLod 39 40 41 ConstOffset 29
+ Store 32(r03) 42
+ 48: 45 Load 47(g_tTex1du4)
+ 49: 18 Load 20(g_sSamp)
+ 51: 50 SampledImage 48 49
+ 52: 26(fvec2) CompositeConstruct 24 25
+ 53: 6(float) CompositeExtract 52 1
+ 54: 6(float) ImageSampleDrefImplicitLod 51 52 53 ConstOffset 29
+ Store 43(r05) 54
+ 59: 56 Load 58(g_tTex2df4)
+ 60: 18 Load 20(g_sSamp)
+ 62: 61 SampledImage 59 60
+ 66: 6(float) CompositeExtract 64 0
+ 67: 6(float) CompositeExtract 64 1
+ 68: 65(fvec3) CompositeConstruct 66 67 25
+ 72: 6(float) CompositeExtract 68 2
+ 73: 6(float) ImageSampleDrefImplicitLod 62 68 72 ConstOffset 71
+ Store 55(r21) 73
+ 78: 75 Load 77(g_tTex2di4)
+ 79: 18 Load 20(g_sSamp)
+ 81: 80 SampledImage 78 79
+ 82: 6(float) CompositeExtract 64 0
+ 83: 6(float) CompositeExtract 64 1
+ 84: 65(fvec3) CompositeConstruct 82 83 25
+ 85: 6(float) CompositeExtract 84 2
+ 86: 6(float) ImageSampleDrefImplicitLod 81 84 85 ConstOffset 71
+ Store 74(r23) 86
+ 91: 88 Load 90(g_tTex2du4)
+ 92: 18 Load 20(g_sSamp)
+ 94: 93 SampledImage 91 92
+ 95: 6(float) CompositeExtract 64 0
+ 96: 6(float) CompositeExtract 64 1
+ 97: 65(fvec3) CompositeConstruct 95 96 25
+ 98: 6(float) CompositeExtract 97 2
+ 99: 6(float) ImageSampleDrefImplicitLod 94 97 98 ConstOffset 71
+ Store 87(r25) 99
+ 106: 105(ptr) AccessChain 101(psout) 102
+ Store 106 104
+ 108: 12(ptr) AccessChain 101(psout) 107
+ Store 108 103
+ 109:8(PS_OUTPUT) Load 101(psout)
+ ReturnValue 109
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index 2fdce6788a5..a2a99045c97 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplecmp.offsetarray.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
0:42 'r11' ( temp float)
0:42 textureOffset ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42 'g_tTex1df4a' ( uniform texture1DArray)
+0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -25,7 +25,7 @@ gl_FragCoord origin is upper left
0:43 'r13' ( temp float)
0:43 textureOffset ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43 'g_tTex1di4a' ( uniform itexture1DArray)
+0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -40,7 +40,7 @@ gl_FragCoord origin is upper left
0:44 'r15' ( temp float)
0:44 textureOffset ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44 'g_tTex1du4a' ( uniform utexture1DArray)
+0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -55,7 +55,7 @@ gl_FragCoord origin is upper left
0:47 'r31' ( temp float)
0:47 textureOffset ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47 'g_tTex2df4a' ( uniform texture2DArray)
+0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -72,7 +72,7 @@ gl_FragCoord origin is upper left
0:48 'r33' ( temp float)
0:48 textureOffset ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48 'g_tTex2di4a' ( uniform itexture2DArray)
+0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -89,7 +89,7 @@ gl_FragCoord origin is upper left
0:49 'r35' ( temp float)
0:49 textureOffset ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49 'g_tTex2du4a' ( uniform utexture2DArray)
+0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -128,13 +128,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -153,23 +153,23 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'g_tTex1df4a' ( uniform texture1DArray)
-0:? 'g_tTex1di4a' ( uniform itexture1DArray)
-0:? 'g_tTex1du4a' ( uniform utexture1DArray)
-0:? 'g_tTex2df4a' ( uniform texture2DArray)
-0:? 'g_tTex2di4a' ( uniform itexture2DArray)
-0:? 'g_tTex2du4a' ( uniform utexture2DArray)
+0:? 'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:? 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:? 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:? 'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:? 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:? 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -180,7 +180,7 @@ gl_FragCoord origin is upper left
0:42 'r11' ( temp float)
0:42 textureOffset ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42 'g_tTex1df4a' ( uniform texture1DArray)
+0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -195,7 +195,7 @@ gl_FragCoord origin is upper left
0:43 'r13' ( temp float)
0:43 textureOffset ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43 'g_tTex1di4a' ( uniform itexture1DArray)
+0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -210,7 +210,7 @@ gl_FragCoord origin is upper left
0:44 'r15' ( temp float)
0:44 textureOffset ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44 'g_tTex1du4a' ( uniform utexture1DArray)
+0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -225,7 +225,7 @@ gl_FragCoord origin is upper left
0:47 'r31' ( temp float)
0:47 textureOffset ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47 'g_tTex2df4a' ( uniform texture2DArray)
+0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -242,7 +242,7 @@ gl_FragCoord origin is upper left
0:48 'r33' ( temp float)
0:48 textureOffset ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48 'g_tTex2di4a' ( uniform itexture2DArray)
+0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -259,7 +259,7 @@ gl_FragCoord origin is upper left
0:49 'r35' ( temp float)
0:49 textureOffset ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49 'g_tTex2du4a' ( uniform utexture2DArray)
+0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -298,13 +298,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -323,29 +323,30 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'g_tTex1df4a' ( uniform texture1DArray)
-0:? 'g_tTex1di4a' ( uniform itexture1DArray)
-0:? 'g_tTex1du4a' ( uniform utexture1DArray)
-0:? 'g_tTex2df4a' ( uniform texture2DArray)
-0:? 'g_tTex2di4a' ( uniform itexture2DArray)
-0:? 'g_tTex2du4a' ( uniform utexture2DArray)
+0:? 'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:? 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:? 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:? 'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:? 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:? 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 184
+// Generated by (magic number): 80002
+// Id's are bound by 178
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 132 136
+ EntryPoint Fragment 4 "main" 126 130
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -354,61 +355,61 @@ gl_FragCoord origin is upper left
Name 13 "r11"
Name 16 "g_tTex1df4a"
Name 20 "g_sSamp"
- Name 38 "r13"
- Name 41 "g_tTex1di4a"
- Name 52 "r15"
- Name 56 "g_tTex1du4a"
- Name 67 "r31"
- Name 70 "g_tTex2df4a"
- Name 87 "r33"
- Name 90 "g_tTex2di4a"
- Name 102 "r35"
- Name 105 "g_tTex2du4a"
- Name 118 "psout"
- Name 129 "flattenTemp"
- Name 132 "Color"
- Name 136 "Depth"
- Name 141 "g_tTex1df4"
- Name 144 "g_tTex1di4"
- Name 147 "g_tTex1du4"
- Name 150 "g_tTex2df4"
- Name 153 "g_tTex2di4"
- Name 156 "g_tTex2du4"
- Name 159 "g_tTex3df4"
- Name 162 "g_tTex3di4"
- Name 165 "g_tTex3du4"
- Name 168 "g_tTexcdf4"
- Name 171 "g_tTexcdi4"
- Name 174 "g_tTexcdu4"
- Name 177 "g_tTexcdf4a"
- Name 180 "g_tTexcdi4a"
- Name 183 "g_tTexcdu4a"
+ Name 37 "r13"
+ Name 40 "g_tTex1di4a"
+ Name 50 "r15"
+ Name 54 "g_tTex1du4a"
+ Name 64 "r31"
+ Name 67 "g_tTex2df4a"
+ Name 83 "r33"
+ Name 86 "g_tTex2di4a"
+ Name 97 "r35"
+ Name 100 "g_tTex2du4a"
+ Name 112 "psout"
+ Name 123 "flattenTemp"
+ Name 126 "@entryPointOutput.Color"
+ Name 130 "@entryPointOutput.Depth"
+ Name 135 "g_tTex1df4"
+ Name 138 "g_tTex1di4"
+ Name 141 "g_tTex1du4"
+ Name 144 "g_tTex2df4"
+ Name 147 "g_tTex2di4"
+ Name 150 "g_tTex2du4"
+ Name 153 "g_tTex3df4"
+ Name 156 "g_tTex3di4"
+ Name 159 "g_tTex3du4"
+ Name 162 "g_tTexcdf4"
+ Name 165 "g_tTexcdi4"
+ Name 168 "g_tTexcdu4"
+ Name 171 "g_tTexcdf4a"
+ Name 174 "g_tTexcdi4a"
+ Name 177 "g_tTexcdu4a"
Decorate 16(g_tTex1df4a) DescriptorSet 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
- Decorate 41(g_tTex1di4a) DescriptorSet 0
- Decorate 56(g_tTex1du4a) DescriptorSet 0
- Decorate 70(g_tTex2df4a) DescriptorSet 0
- Decorate 90(g_tTex2di4a) DescriptorSet 0
- Decorate 105(g_tTex2du4a) DescriptorSet 0
- Decorate 132(Color) Location 0
- Decorate 136(Depth) BuiltIn FragDepth
- Decorate 141(g_tTex1df4) DescriptorSet 0
- Decorate 141(g_tTex1df4) Binding 0
- Decorate 144(g_tTex1di4) DescriptorSet 0
- Decorate 147(g_tTex1du4) DescriptorSet 0
- Decorate 150(g_tTex2df4) DescriptorSet 0
- Decorate 153(g_tTex2di4) DescriptorSet 0
- Decorate 156(g_tTex2du4) DescriptorSet 0
- Decorate 159(g_tTex3df4) DescriptorSet 0
- Decorate 162(g_tTex3di4) DescriptorSet 0
- Decorate 165(g_tTex3du4) DescriptorSet 0
- Decorate 168(g_tTexcdf4) DescriptorSet 0
- Decorate 171(g_tTexcdi4) DescriptorSet 0
- Decorate 174(g_tTexcdu4) DescriptorSet 0
- Decorate 177(g_tTexcdf4a) DescriptorSet 0
- Decorate 180(g_tTexcdi4a) DescriptorSet 0
- Decorate 183(g_tTexcdu4a) DescriptorSet 0
+ Decorate 40(g_tTex1di4a) DescriptorSet 0
+ Decorate 54(g_tTex1du4a) DescriptorSet 0
+ Decorate 67(g_tTex2df4a) DescriptorSet 0
+ Decorate 86(g_tTex2di4a) DescriptorSet 0
+ Decorate 100(g_tTex2du4a) DescriptorSet 0
+ Decorate 126(@entryPointOutput.Color) Location 0
+ Decorate 130(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 135(g_tTex1df4) DescriptorSet 0
+ Decorate 135(g_tTex1df4) Binding 0
+ Decorate 138(g_tTex1di4) DescriptorSet 0
+ Decorate 141(g_tTex1du4) DescriptorSet 0
+ Decorate 144(g_tTex2df4) DescriptorSet 0
+ Decorate 147(g_tTex2di4) DescriptorSet 0
+ Decorate 150(g_tTex2du4) DescriptorSet 0
+ Decorate 153(g_tTex3df4) DescriptorSet 0
+ Decorate 156(g_tTex3di4) DescriptorSet 0
+ Decorate 159(g_tTex3du4) DescriptorSet 0
+ Decorate 162(g_tTexcdf4) DescriptorSet 0
+ Decorate 165(g_tTexcdi4) DescriptorSet 0
+ Decorate 168(g_tTexcdu4) DescriptorSet 0
+ Decorate 171(g_tTexcdf4a) DescriptorSet 0
+ Decorate 174(g_tTexcdi4a) DescriptorSet 0
+ Decorate 177(g_tTexcdu4a) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -416,191 +417,185 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 6(float)
- 14: TypeImage 6(float) 1D array sampled format:Unknown
+ 14: TypeImage 6(float) 1D depth array sampled format:Unknown
15: TypePointer UniformConstant 14
16(g_tTex1df4a): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(g_sSamp): 19(ptr) Variable UniformConstant
- 22: TypeImage 6(float) 1D depth array sampled format:Unknown
- 23: TypeSampledImage 22
- 25: TypeVector 6(float) 2
- 26: 6(float) Constant 1036831949
- 27: 6(float) Constant 1045220557
- 28: 25(fvec2) ConstantComposite 26 27
- 29: 6(float) Constant 1061158912
- 30: TypeVector 6(float) 3
- 34: TypeInt 32 1
- 35: 34(int) Constant 2
- 39: TypeImage 34(int) 1D array sampled format:Unknown
- 40: TypePointer UniformConstant 39
- 41(g_tTex1di4a): 40(ptr) Variable UniformConstant
- 44: TypeImage 34(int) 1D depth array sampled format:Unknown
- 45: TypeSampledImage 44
- 53: TypeInt 32 0
- 54: TypeImage 53(int) 1D array sampled format:Unknown
- 55: TypePointer UniformConstant 54
- 56(g_tTex1du4a): 55(ptr) Variable UniformConstant
- 59: TypeImage 53(int) 1D depth array sampled format:Unknown
- 60: TypeSampledImage 59
- 68: TypeImage 6(float) 2D array sampled format:Unknown
- 69: TypePointer UniformConstant 68
- 70(g_tTex2df4a): 69(ptr) Variable UniformConstant
- 73: TypeImage 6(float) 2D depth array sampled format:Unknown
- 74: TypeSampledImage 73
- 76: 6(float) Constant 1050253722
- 77: 30(fvec3) ConstantComposite 26 27 76
- 82: TypeVector 34(int) 2
- 83: 34(int) Constant 3
- 84: 82(ivec2) ConstantComposite 35 83
- 88: TypeImage 34(int) 2D array sampled format:Unknown
- 89: TypePointer UniformConstant 88
- 90(g_tTex2di4a): 89(ptr) Variable UniformConstant
- 93: TypeImage 34(int) 2D depth array sampled format:Unknown
- 94: TypeSampledImage 93
- 103: TypeImage 53(int) 2D array sampled format:Unknown
- 104: TypePointer UniformConstant 103
-105(g_tTex2du4a): 104(ptr) Variable UniformConstant
- 108: TypeImage 53(int) 2D depth array sampled format:Unknown
- 109: TypeSampledImage 108
- 117: TypePointer Function 8(PS_OUTPUT)
- 119: 34(int) Constant 0
- 120: 6(float) Constant 1065353216
- 121: 7(fvec4) ConstantComposite 120 120 120 120
- 122: TypePointer Function 7(fvec4)
- 124: 34(int) Constant 1
- 131: TypePointer Output 7(fvec4)
- 132(Color): 131(ptr) Variable Output
- 135: TypePointer Output 6(float)
- 136(Depth): 135(ptr) Variable Output
- 139: TypeImage 6(float) 1D sampled format:Unknown
+ 22: TypeSampledImage 14
+ 24: TypeVector 6(float) 2
+ 25: 6(float) Constant 1036831949
+ 26: 6(float) Constant 1045220557
+ 27: 24(fvec2) ConstantComposite 25 26
+ 28: 6(float) Constant 1061158912
+ 29: TypeVector 6(float) 3
+ 33: TypeInt 32 1
+ 34: 33(int) Constant 2
+ 38: TypeImage 33(int) 1D depth array sampled format:Unknown
+ 39: TypePointer UniformConstant 38
+ 40(g_tTex1di4a): 39(ptr) Variable UniformConstant
+ 43: TypeSampledImage 38
+ 51: TypeInt 32 0
+ 52: TypeImage 51(int) 1D depth array sampled format:Unknown
+ 53: TypePointer UniformConstant 52
+ 54(g_tTex1du4a): 53(ptr) Variable UniformConstant
+ 57: TypeSampledImage 52
+ 65: TypeImage 6(float) 2D depth array sampled format:Unknown
+ 66: TypePointer UniformConstant 65
+ 67(g_tTex2df4a): 66(ptr) Variable UniformConstant
+ 70: TypeSampledImage 65
+ 72: 6(float) Constant 1050253722
+ 73: 29(fvec3) ConstantComposite 25 26 72
+ 78: TypeVector 33(int) 2
+ 79: 33(int) Constant 3
+ 80: 78(ivec2) ConstantComposite 34 79
+ 84: TypeImage 33(int) 2D depth array sampled format:Unknown
+ 85: TypePointer UniformConstant 84
+ 86(g_tTex2di4a): 85(ptr) Variable UniformConstant
+ 89: TypeSampledImage 84
+ 98: TypeImage 51(int) 2D depth array sampled format:Unknown
+ 99: TypePointer UniformConstant 98
+100(g_tTex2du4a): 99(ptr) Variable UniformConstant
+ 103: TypeSampledImage 98
+ 111: TypePointer Function 8(PS_OUTPUT)
+ 113: 33(int) Constant 0
+ 114: 6(float) Constant 1065353216
+ 115: 7(fvec4) ConstantComposite 114 114 114 114
+ 116: TypePointer Function 7(fvec4)
+ 118: 33(int) Constant 1
+ 125: TypePointer Output 7(fvec4)
+126(@entryPointOutput.Color): 125(ptr) Variable Output
+ 129: TypePointer Output 6(float)
+130(@entryPointOutput.Depth): 129(ptr) Variable Output
+ 133: TypeImage 6(float) 1D sampled format:Unknown
+ 134: TypePointer UniformConstant 133
+ 135(g_tTex1df4): 134(ptr) Variable UniformConstant
+ 136: TypeImage 33(int) 1D sampled format:Unknown
+ 137: TypePointer UniformConstant 136
+ 138(g_tTex1di4): 137(ptr) Variable UniformConstant
+ 139: TypeImage 51(int) 1D sampled format:Unknown
140: TypePointer UniformConstant 139
- 141(g_tTex1df4): 140(ptr) Variable UniformConstant
- 142: TypeImage 34(int) 1D sampled format:Unknown
+ 141(g_tTex1du4): 140(ptr) Variable UniformConstant
+ 142: TypeImage 6(float) 2D sampled format:Unknown
143: TypePointer UniformConstant 142
- 144(g_tTex1di4): 143(ptr) Variable UniformConstant
- 145: TypeImage 53(int) 1D sampled format:Unknown
+ 144(g_tTex2df4): 143(ptr) Variable UniformConstant
+ 145: TypeImage 33(int) 2D sampled format:Unknown
146: TypePointer UniformConstant 145
- 147(g_tTex1du4): 146(ptr) Variable UniformConstant
- 148: TypeImage 6(float) 2D sampled format:Unknown
+ 147(g_tTex2di4): 146(ptr) Variable UniformConstant
+ 148: TypeImage 51(int) 2D sampled format:Unknown
149: TypePointer UniformConstant 148
- 150(g_tTex2df4): 149(ptr) Variable UniformConstant
- 151: TypeImage 34(int) 2D sampled format:Unknown
+ 150(g_tTex2du4): 149(ptr) Variable UniformConstant
+ 151: TypeImage 6(float) 3D sampled format:Unknown
152: TypePointer UniformConstant 151
- 153(g_tTex2di4): 152(ptr) Variable UniformConstant
- 154: TypeImage 53(int) 2D sampled format:Unknown
+ 153(g_tTex3df4): 152(ptr) Variable UniformConstant
+ 154: TypeImage 33(int) 3D sampled format:Unknown
155: TypePointer UniformConstant 154
- 156(g_tTex2du4): 155(ptr) Variable UniformConstant
- 157: TypeImage 6(float) 3D sampled format:Unknown
+ 156(g_tTex3di4): 155(ptr) Variable UniformConstant
+ 157: TypeImage 51(int) 3D sampled format:Unknown
158: TypePointer UniformConstant 157
- 159(g_tTex3df4): 158(ptr) Variable UniformConstant
- 160: TypeImage 34(int) 3D sampled format:Unknown
+ 159(g_tTex3du4): 158(ptr) Variable UniformConstant
+ 160: TypeImage 6(float) Cube sampled format:Unknown
161: TypePointer UniformConstant 160
- 162(g_tTex3di4): 161(ptr) Variable UniformConstant
- 163: TypeImage 53(int) 3D sampled format:Unknown
+ 162(g_tTexcdf4): 161(ptr) Variable UniformConstant
+ 163: TypeImage 33(int) Cube sampled format:Unknown
164: TypePointer UniformConstant 163
- 165(g_tTex3du4): 164(ptr) Variable UniformConstant
- 166: TypeImage 6(float) Cube sampled format:Unknown
+ 165(g_tTexcdi4): 164(ptr) Variable UniformConstant
+ 166: TypeImage 51(int) Cube sampled format:Unknown
167: TypePointer UniformConstant 166
- 168(g_tTexcdf4): 167(ptr) Variable UniformConstant
- 169: TypeImage 34(int) Cube sampled format:Unknown
+ 168(g_tTexcdu4): 167(ptr) Variable UniformConstant
+ 169: TypeImage 6(float) Cube array sampled format:Unknown
170: TypePointer UniformConstant 169
- 171(g_tTexcdi4): 170(ptr) Variable UniformConstant
- 172: TypeImage 53(int) Cube sampled format:Unknown
+171(g_tTexcdf4a): 170(ptr) Variable UniformConstant
+ 172: TypeImage 33(int) Cube array sampled format:Unknown
173: TypePointer UniformConstant 172
- 174(g_tTexcdu4): 173(ptr) Variable UniformConstant
- 175: TypeImage 6(float) Cube array sampled format:Unknown
+174(g_tTexcdi4a): 173(ptr) Variable UniformConstant
+ 175: TypeImage 51(int) Cube array sampled format:Unknown
176: TypePointer UniformConstant 175
-177(g_tTexcdf4a): 176(ptr) Variable UniformConstant
- 178: TypeImage 34(int) Cube array sampled format:Unknown
- 179: TypePointer UniformConstant 178
-180(g_tTexcdi4a): 179(ptr) Variable UniformConstant
- 181: TypeImage 53(int) Cube array sampled format:Unknown
- 182: TypePointer UniformConstant 181
-183(g_tTexcdu4a): 182(ptr) Variable UniformConstant
+177(g_tTexcdu4a): 176(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
-129(flattenTemp): 117(ptr) Variable Function
- 130:8(PS_OUTPUT) FunctionCall 10(@main()
- Store 129(flattenTemp) 130
- 133: 122(ptr) AccessChain 129(flattenTemp) 119
- 134: 7(fvec4) Load 133
- Store 132(Color) 134
- 137: 12(ptr) AccessChain 129(flattenTemp) 124
- 138: 6(float) Load 137
- Store 136(Depth) 138
+123(flattenTemp): 111(ptr) Variable Function
+ 124:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 123(flattenTemp) 124
+ 127: 116(ptr) AccessChain 123(flattenTemp) 113
+ 128: 7(fvec4) Load 127
+ Store 126(@entryPointOutput.Color) 128
+ 131: 12(ptr) AccessChain 123(flattenTemp) 118
+ 132: 6(float) Load 131
+ Store 130(@entryPointOutput.Depth) 132
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
13(r11): 12(ptr) Variable Function
- 38(r13): 12(ptr) Variable Function
- 52(r15): 12(ptr) Variable Function
- 67(r31): 12(ptr) Variable Function
- 87(r33): 12(ptr) Variable Function
- 102(r35): 12(ptr) Variable Function
- 118(psout): 117(ptr) Variable Function
+ 37(r13): 12(ptr) Variable Function
+ 50(r15): 12(ptr) Variable Function
+ 64(r31): 12(ptr) Variable Function
+ 83(r33): 12(ptr) Variable Function
+ 97(r35): 12(ptr) Variable Function
+ 112(psout): 111(ptr) Variable Function
17: 14 Load 16(g_tTex1df4a)
21: 18 Load 20(g_sSamp)
- 24: 23 SampledImage 17 21
- 31: 6(float) CompositeExtract 28 0
- 32: 6(float) CompositeExtract 28 1
- 33: 30(fvec3) CompositeConstruct 31 32 29
- 36: 6(float) CompositeExtract 33 2
- 37: 6(float) ImageSampleDrefImplicitLod 24 33 36 ConstOffset 35
- Store 13(r11) 37
- 42: 39 Load 41(g_tTex1di4a)
- 43: 18 Load 20(g_sSamp)
- 46: 45 SampledImage 42 43
- 47: 6(float) CompositeExtract 28 0
- 48: 6(float) CompositeExtract 28 1
- 49: 30(fvec3) CompositeConstruct 47 48 29
- 50: 6(float) CompositeExtract 49 2
- 51: 6(float) ImageSampleDrefImplicitLod 46 49 50 ConstOffset 35
- Store 38(r13) 51
- 57: 54 Load 56(g_tTex1du4a)
- 58: 18 Load 20(g_sSamp)
- 61: 60 SampledImage 57 58
- 62: 6(float) CompositeExtract 28 0
- 63: 6(float) CompositeExtract 28 1
- 64: 30(fvec3) CompositeConstruct 62 63 29
- 65: 6(float) CompositeExtract 64 2
- 66: 6(float) ImageSampleDrefImplicitLod 61 64 65 ConstOffset 35
- Store 52(r15) 66
- 71: 68 Load 70(g_tTex2df4a)
- 72: 18 Load 20(g_sSamp)
- 75: 74 SampledImage 71 72
- 78: 6(float) CompositeExtract 77 0
- 79: 6(float) CompositeExtract 77 1
- 80: 6(float) CompositeExtract 77 2
- 81: 7(fvec4) CompositeConstruct 78 79 80 29
- 85: 6(float) CompositeExtract 81 3
- 86: 6(float) ImageSampleDrefImplicitLod 75 81 85 ConstOffset 84
- Store 67(r31) 86
- 91: 88 Load 90(g_tTex2di4a)
- 92: 18 Load 20(g_sSamp)
- 95: 94 SampledImage 91 92
- 96: 6(float) CompositeExtract 77 0
- 97: 6(float) CompositeExtract 77 1
- 98: 6(float) CompositeExtract 77 2
- 99: 7(fvec4) CompositeConstruct 96 97 98 29
- 100: 6(float) CompositeExtract 99 3
- 101: 6(float) ImageSampleDrefImplicitLod 95 99 100 ConstOffset 84
- Store 87(r33) 101
- 106: 103 Load 105(g_tTex2du4a)
- 107: 18 Load 20(g_sSamp)
- 110: 109 SampledImage 106 107
- 111: 6(float) CompositeExtract 77 0
- 112: 6(float) CompositeExtract 77 1
- 113: 6(float) CompositeExtract 77 2
- 114: 7(fvec4) CompositeConstruct 111 112 113 29
- 115: 6(float) CompositeExtract 114 3
- 116: 6(float) ImageSampleDrefImplicitLod 110 114 115 ConstOffset 84
- Store 102(r35) 116
- 123: 122(ptr) AccessChain 118(psout) 119
- Store 123 121
- 125: 12(ptr) AccessChain 118(psout) 124
- Store 125 120
- 126:8(PS_OUTPUT) Load 118(psout)
- ReturnValue 126
+ 23: 22 SampledImage 17 21
+ 30: 6(float) CompositeExtract 27 0
+ 31: 6(float) CompositeExtract 27 1
+ 32: 29(fvec3) CompositeConstruct 30 31 28
+ 35: 6(float) CompositeExtract 32 2
+ 36: 6(float) ImageSampleDrefImplicitLod 23 32 35 ConstOffset 34
+ Store 13(r11) 36
+ 41: 38 Load 40(g_tTex1di4a)
+ 42: 18 Load 20(g_sSamp)
+ 44: 43 SampledImage 41 42
+ 45: 6(float) CompositeExtract 27 0
+ 46: 6(float) CompositeExtract 27 1
+ 47: 29(fvec3) CompositeConstruct 45 46 28
+ 48: 6(float) CompositeExtract 47 2
+ 49: 6(float) ImageSampleDrefImplicitLod 44 47 48 ConstOffset 34
+ Store 37(r13) 49
+ 55: 52 Load 54(g_tTex1du4a)
+ 56: 18 Load 20(g_sSamp)
+ 58: 57 SampledImage 55 56
+ 59: 6(float) CompositeExtract 27 0
+ 60: 6(float) CompositeExtract 27 1
+ 61: 29(fvec3) CompositeConstruct 59 60 28
+ 62: 6(float) CompositeExtract 61 2
+ 63: 6(float) ImageSampleDrefImplicitLod 58 61 62 ConstOffset 34
+ Store 50(r15) 63
+ 68: 65 Load 67(g_tTex2df4a)
+ 69: 18 Load 20(g_sSamp)
+ 71: 70 SampledImage 68 69
+ 74: 6(float) CompositeExtract 73 0
+ 75: 6(float) CompositeExtract 73 1
+ 76: 6(float) CompositeExtract 73 2
+ 77: 7(fvec4) CompositeConstruct 74 75 76 28
+ 81: 6(float) CompositeExtract 77 3
+ 82: 6(float) ImageSampleDrefImplicitLod 71 77 81 ConstOffset 80
+ Store 64(r31) 82
+ 87: 84 Load 86(g_tTex2di4a)
+ 88: 18 Load 20(g_sSamp)
+ 90: 89 SampledImage 87 88
+ 91: 6(float) CompositeExtract 73 0
+ 92: 6(float) CompositeExtract 73 1
+ 93: 6(float) CompositeExtract 73 2
+ 94: 7(fvec4) CompositeConstruct 91 92 93 28
+ 95: 6(float) CompositeExtract 94 3
+ 96: 6(float) ImageSampleDrefImplicitLod 90 94 95 ConstOffset 80
+ Store 83(r33) 96
+ 101: 98 Load 100(g_tTex2du4a)
+ 102: 18 Load 20(g_sSamp)
+ 104: 103 SampledImage 101 102
+ 105: 6(float) CompositeExtract 73 0
+ 106: 6(float) CompositeExtract 73 1
+ 107: 6(float) CompositeExtract 73 2
+ 108: 7(fvec4) CompositeConstruct 105 106 107 28
+ 109: 6(float) CompositeExtract 108 3
+ 110: 6(float) ImageSampleDrefImplicitLod 104 108 109 ConstOffset 80
+ Store 97(r35) 110
+ 117: 116(ptr) AccessChain 112(psout) 113
+ Store 117 115
+ 119: 12(ptr) AccessChain 112(psout) 118
+ Store 119 114
+ 120:8(PS_OUTPUT) Load 112(psout)
+ ReturnValue 120
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index 3a3e1695b6d..ea7cc5e027a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplecmplevelzero.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
0:42 'r10' ( temp float)
0:42 textureLod ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42 'g_tTex1df4a' ( uniform texture1DArray)
+0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -25,7 +25,7 @@ gl_FragCoord origin is upper left
0:43 'r12' ( temp float)
0:43 textureLod ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43 'g_tTex1di4a' ( uniform itexture1DArray)
+0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -40,7 +40,7 @@ gl_FragCoord origin is upper left
0:44 'r14' ( temp float)
0:44 textureLod ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44 'g_tTex1du4a' ( uniform utexture1DArray)
+0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -55,7 +55,7 @@ gl_FragCoord origin is upper left
0:47 'r30' ( temp float)
0:47 textureLod ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47 'g_tTex2df4a' ( uniform texture2DArray)
+0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -71,7 +71,7 @@ gl_FragCoord origin is upper left
0:48 'r32' ( temp float)
0:48 textureLod ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48 'g_tTex2di4a' ( uniform itexture2DArray)
+0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -87,7 +87,7 @@ gl_FragCoord origin is upper left
0:49 'r34' ( temp float)
0:49 textureLod ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49 'g_tTex2du4a' ( uniform utexture2DArray)
+0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -103,7 +103,7 @@ gl_FragCoord origin is upper left
0:52 'r60' ( temp float)
0:52 textureLod ( temp float)
0:52 Construct combined texture-sampler ( temp samplerCubeArrayShadow)
-0:52 'g_tTexcdf4a' ( uniform textureCubeArray)
+0:52 'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
0:52 'g_sSamp' (layout( binding=0) uniform sampler)
0:52 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -120,7 +120,7 @@ gl_FragCoord origin is upper left
0:53 'r62' ( temp float)
0:53 textureLod ( temp float)
0:53 Construct combined texture-sampler ( temp isamplerCubeArrayShadow)
-0:53 'g_tTexcdi4a' ( uniform itextureCubeArray)
+0:53 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
0:53 'g_sSamp' (layout( binding=0) uniform sampler)
0:53 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -137,7 +137,7 @@ gl_FragCoord origin is upper left
0:54 'r64' ( temp float)
0:54 textureLod ( temp float)
0:54 Construct combined texture-sampler ( temp usamplerCubeArrayShadow)
-0:54 'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:54 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
0:54 'g_sSamp' (layout( binding=0) uniform sampler)
0:54 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -176,13 +176,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -201,23 +201,23 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'g_tTex1df4a' ( uniform texture1DArray)
-0:? 'g_tTex1di4a' ( uniform itexture1DArray)
-0:? 'g_tTex1du4a' ( uniform utexture1DArray)
-0:? 'g_tTex2df4a' ( uniform texture2DArray)
-0:? 'g_tTex2di4a' ( uniform itexture2DArray)
-0:? 'g_tTex2du4a' ( uniform utexture2DArray)
-0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
-0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
-0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? 'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:? 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:? 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:? 'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:? 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:? 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
+0:? 'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
+0:? 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
+0:? 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -228,7 +228,7 @@ gl_FragCoord origin is upper left
0:42 'r10' ( temp float)
0:42 textureLod ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42 'g_tTex1df4a' ( uniform texture1DArray)
+0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -243,7 +243,7 @@ gl_FragCoord origin is upper left
0:43 'r12' ( temp float)
0:43 textureLod ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43 'g_tTex1di4a' ( uniform itexture1DArray)
+0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -258,7 +258,7 @@ gl_FragCoord origin is upper left
0:44 'r14' ( temp float)
0:44 textureLod ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44 'g_tTex1du4a' ( uniform utexture1DArray)
+0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -273,7 +273,7 @@ gl_FragCoord origin is upper left
0:47 'r30' ( temp float)
0:47 textureLod ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47 'g_tTex2df4a' ( uniform texture2DArray)
+0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -289,7 +289,7 @@ gl_FragCoord origin is upper left
0:48 'r32' ( temp float)
0:48 textureLod ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48 'g_tTex2di4a' ( uniform itexture2DArray)
+0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -305,7 +305,7 @@ gl_FragCoord origin is upper left
0:49 'r34' ( temp float)
0:49 textureLod ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49 'g_tTex2du4a' ( uniform utexture2DArray)
+0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -321,7 +321,7 @@ gl_FragCoord origin is upper left
0:52 'r60' ( temp float)
0:52 textureLod ( temp float)
0:52 Construct combined texture-sampler ( temp samplerCubeArrayShadow)
-0:52 'g_tTexcdf4a' ( uniform textureCubeArray)
+0:52 'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
0:52 'g_sSamp' (layout( binding=0) uniform sampler)
0:52 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -338,7 +338,7 @@ gl_FragCoord origin is upper left
0:53 'r62' ( temp float)
0:53 textureLod ( temp float)
0:53 Construct combined texture-sampler ( temp isamplerCubeArrayShadow)
-0:53 'g_tTexcdi4a' ( uniform itextureCubeArray)
+0:53 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
0:53 'g_sSamp' (layout( binding=0) uniform sampler)
0:53 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -355,7 +355,7 @@ gl_FragCoord origin is upper left
0:54 'r64' ( temp float)
0:54 textureLod ( temp float)
0:54 Construct combined texture-sampler ( temp usamplerCubeArrayShadow)
-0:54 'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:54 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
0:54 'g_sSamp' (layout( binding=0) uniform sampler)
0:54 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -394,13 +394,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -419,29 +419,30 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'g_tTex1df4a' ( uniform texture1DArray)
-0:? 'g_tTex1di4a' ( uniform itexture1DArray)
-0:? 'g_tTex1du4a' ( uniform utexture1DArray)
-0:? 'g_tTex2df4a' ( uniform texture2DArray)
-0:? 'g_tTex2di4a' ( uniform itexture2DArray)
-0:? 'g_tTex2du4a' ( uniform utexture2DArray)
-0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
-0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
-0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? 'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:? 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:? 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:? 'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:? 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:? 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
+0:? 'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
+0:? 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
+0:? 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 219
+// Generated by (magic number): 80002
+// Id's are bound by 210
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 176 180
+ EntryPoint Fragment 4 "main" 167 171
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -450,64 +451,64 @@ gl_FragCoord origin is upper left
Name 13 "r10"
Name 16 "g_tTex1df4a"
Name 20 "g_sSamp"
- Name 37 "r12"
- Name 41 "g_tTex1di4a"
- Name 52 "r14"
- Name 56 "g_tTex1du4a"
- Name 67 "r30"
- Name 70 "g_tTex2df4a"
- Name 84 "r32"
- Name 87 "g_tTex2di4a"
- Name 99 "r34"
- Name 102 "g_tTex2du4a"
- Name 114 "r60"
- Name 117 "g_tTexcdf4a"
- Name 131 "r62"
- Name 134 "g_tTexcdi4a"
- Name 146 "r64"
- Name 149 "g_tTexcdu4a"
- Name 162 "psout"
- Name 173 "flattenTemp"
- Name 176 "Color"
- Name 180 "Depth"
- Name 185 "g_tTex1df4"
- Name 188 "g_tTex1di4"
- Name 191 "g_tTex1du4"
- Name 194 "g_tTex2df4"
- Name 197 "g_tTex2di4"
- Name 200 "g_tTex2du4"
- Name 203 "g_tTex3df4"
- Name 206 "g_tTex3di4"
- Name 209 "g_tTex3du4"
- Name 212 "g_tTexcdf4"
- Name 215 "g_tTexcdi4"
- Name 218 "g_tTexcdu4"
+ Name 36 "r12"
+ Name 40 "g_tTex1di4a"
+ Name 50 "r14"
+ Name 54 "g_tTex1du4a"
+ Name 64 "r30"
+ Name 67 "g_tTex2df4a"
+ Name 80 "r32"
+ Name 83 "g_tTex2di4a"
+ Name 94 "r34"
+ Name 97 "g_tTex2du4a"
+ Name 108 "r60"
+ Name 111 "g_tTexcdf4a"
+ Name 124 "r62"
+ Name 127 "g_tTexcdi4a"
+ Name 138 "r64"
+ Name 141 "g_tTexcdu4a"
+ Name 153 "psout"
+ Name 164 "flattenTemp"
+ Name 167 "@entryPointOutput.Color"
+ Name 171 "@entryPointOutput.Depth"
+ Name 176 "g_tTex1df4"
+ Name 179 "g_tTex1di4"
+ Name 182 "g_tTex1du4"
+ Name 185 "g_tTex2df4"
+ Name 188 "g_tTex2di4"
+ Name 191 "g_tTex2du4"
+ Name 194 "g_tTex3df4"
+ Name 197 "g_tTex3di4"
+ Name 200 "g_tTex3du4"
+ Name 203 "g_tTexcdf4"
+ Name 206 "g_tTexcdi4"
+ Name 209 "g_tTexcdu4"
Decorate 16(g_tTex1df4a) DescriptorSet 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
- Decorate 41(g_tTex1di4a) DescriptorSet 0
- Decorate 56(g_tTex1du4a) DescriptorSet 0
- Decorate 70(g_tTex2df4a) DescriptorSet 0
- Decorate 87(g_tTex2di4a) DescriptorSet 0
- Decorate 102(g_tTex2du4a) DescriptorSet 0
- Decorate 117(g_tTexcdf4a) DescriptorSet 0
- Decorate 134(g_tTexcdi4a) DescriptorSet 0
- Decorate 149(g_tTexcdu4a) DescriptorSet 0
- Decorate 176(Color) Location 0
- Decorate 180(Depth) BuiltIn FragDepth
- Decorate 185(g_tTex1df4) DescriptorSet 0
- Decorate 185(g_tTex1df4) Binding 0
- Decorate 188(g_tTex1di4) DescriptorSet 0
- Decorate 191(g_tTex1du4) DescriptorSet 0
- Decorate 194(g_tTex2df4) DescriptorSet 0
- Decorate 197(g_tTex2di4) DescriptorSet 0
- Decorate 200(g_tTex2du4) DescriptorSet 0
- Decorate 203(g_tTex3df4) DescriptorSet 0
- Decorate 206(g_tTex3di4) DescriptorSet 0
- Decorate 209(g_tTex3du4) DescriptorSet 0
- Decorate 212(g_tTexcdf4) DescriptorSet 0
- Decorate 215(g_tTexcdi4) DescriptorSet 0
- Decorate 218(g_tTexcdu4) DescriptorSet 0
+ Decorate 40(g_tTex1di4a) DescriptorSet 0
+ Decorate 54(g_tTex1du4a) DescriptorSet 0
+ Decorate 67(g_tTex2df4a) DescriptorSet 0
+ Decorate 83(g_tTex2di4a) DescriptorSet 0
+ Decorate 97(g_tTex2du4a) DescriptorSet 0
+ Decorate 111(g_tTexcdf4a) DescriptorSet 0
+ Decorate 127(g_tTexcdi4a) DescriptorSet 0
+ Decorate 141(g_tTexcdu4a) DescriptorSet 0
+ Decorate 167(@entryPointOutput.Color) Location 0
+ Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 176(g_tTex1df4) DescriptorSet 0
+ Decorate 176(g_tTex1df4) Binding 0
+ Decorate 179(g_tTex1di4) DescriptorSet 0
+ Decorate 182(g_tTex1du4) DescriptorSet 0
+ Decorate 185(g_tTex2df4) DescriptorSet 0
+ Decorate 188(g_tTex2di4) DescriptorSet 0
+ Decorate 191(g_tTex2du4) DescriptorSet 0
+ Decorate 194(g_tTex3df4) DescriptorSet 0
+ Decorate 197(g_tTex3di4) DescriptorSet 0
+ Decorate 200(g_tTex3du4) DescriptorSet 0
+ Decorate 203(g_tTexcdf4) DescriptorSet 0
+ Decorate 206(g_tTexcdi4) DescriptorSet 0
+ Decorate 209(g_tTexcdu4) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -515,229 +516,220 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 6(float)
- 14: TypeImage 6(float) 1D array sampled format:Unknown
+ 14: TypeImage 6(float) 1D depth array sampled format:Unknown
15: TypePointer UniformConstant 14
16(g_tTex1df4a): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(g_sSamp): 19(ptr) Variable UniformConstant
- 22: TypeImage 6(float) 1D depth array sampled format:Unknown
- 23: TypeSampledImage 22
- 25: TypeVector 6(float) 2
- 26: 6(float) Constant 1036831949
- 27: 6(float) Constant 1045220557
- 28: 25(fvec2) ConstantComposite 26 27
- 29: 6(float) Constant 1061158912
- 30: TypeVector 6(float) 3
- 34: 6(float) Constant 0
- 38: TypeInt 32 1
- 39: TypeImage 38(int) 1D array sampled format:Unknown
- 40: TypePointer UniformConstant 39
- 41(g_tTex1di4a): 40(ptr) Variable UniformConstant
- 44: TypeImage 38(int) 1D depth array sampled format:Unknown
- 45: TypeSampledImage 44
- 53: TypeInt 32 0
- 54: TypeImage 53(int) 1D array sampled format:Unknown
- 55: TypePointer UniformConstant 54
- 56(g_tTex1du4a): 55(ptr) Variable UniformConstant
- 59: TypeImage 53(int) 1D depth array sampled format:Unknown
- 60: TypeSampledImage 59
- 68: TypeImage 6(float) 2D array sampled format:Unknown
- 69: TypePointer UniformConstant 68
- 70(g_tTex2df4a): 69(ptr) Variable UniformConstant
- 73: TypeImage 6(float) 2D depth array sampled format:Unknown
- 74: TypeSampledImage 73
- 76: 6(float) Constant 1050253722
- 77: 30(fvec3) ConstantComposite 26 27 76
- 85: TypeImage 38(int) 2D array sampled format:Unknown
- 86: TypePointer UniformConstant 85
- 87(g_tTex2di4a): 86(ptr) Variable UniformConstant
- 90: TypeImage 38(int) 2D depth array sampled format:Unknown
- 91: TypeSampledImage 90
- 100: TypeImage 53(int) 2D array sampled format:Unknown
- 101: TypePointer UniformConstant 100
-102(g_tTex2du4a): 101(ptr) Variable UniformConstant
- 105: TypeImage 53(int) 2D depth array sampled format:Unknown
- 106: TypeSampledImage 105
- 115: TypeImage 6(float) Cube array sampled format:Unknown
- 116: TypePointer UniformConstant 115
-117(g_tTexcdf4a): 116(ptr) Variable UniformConstant
- 120: TypeImage 6(float) Cube depth array sampled format:Unknown
- 121: TypeSampledImage 120
- 123: 6(float) Constant 1053609165
- 124: 7(fvec4) ConstantComposite 26 27 76 123
- 132: TypeImage 38(int) Cube array sampled format:Unknown
- 133: TypePointer UniformConstant 132
-134(g_tTexcdi4a): 133(ptr) Variable UniformConstant
- 137: TypeImage 38(int) Cube depth array sampled format:Unknown
- 138: TypeSampledImage 137
- 147: TypeImage 53(int) Cube array sampled format:Unknown
- 148: TypePointer UniformConstant 147
-149(g_tTexcdu4a): 148(ptr) Variable UniformConstant
- 152: TypeImage 53(int) Cube depth array sampled format:Unknown
- 153: TypeSampledImage 152
- 161: TypePointer Function 8(PS_OUTPUT)
- 163: 38(int) Constant 0
- 164: 6(float) Constant 1065353216
- 165: 7(fvec4) ConstantComposite 164 164 164 164
- 166: TypePointer Function 7(fvec4)
- 168: 38(int) Constant 1
- 175: TypePointer Output 7(fvec4)
- 176(Color): 175(ptr) Variable Output
- 179: TypePointer Output 6(float)
- 180(Depth): 179(ptr) Variable Output
- 183: TypeImage 6(float) 1D sampled format:Unknown
+ 22: TypeSampledImage 14
+ 24: TypeVector 6(float) 2
+ 25: 6(float) Constant 1036831949
+ 26: 6(float) Constant 1045220557
+ 27: 24(fvec2) ConstantComposite 25 26
+ 28: 6(float) Constant 1061158912
+ 29: TypeVector 6(float) 3
+ 33: 6(float) Constant 0
+ 37: TypeInt 32 1
+ 38: TypeImage 37(int) 1D depth array sampled format:Unknown
+ 39: TypePointer UniformConstant 38
+ 40(g_tTex1di4a): 39(ptr) Variable UniformConstant
+ 43: TypeSampledImage 38
+ 51: TypeInt 32 0
+ 52: TypeImage 51(int) 1D depth array sampled format:Unknown
+ 53: TypePointer UniformConstant 52
+ 54(g_tTex1du4a): 53(ptr) Variable UniformConstant
+ 57: TypeSampledImage 52
+ 65: TypeImage 6(float) 2D depth array sampled format:Unknown
+ 66: TypePointer UniformConstant 65
+ 67(g_tTex2df4a): 66(ptr) Variable UniformConstant
+ 70: TypeSampledImage 65
+ 72: 6(float) Constant 1050253722
+ 73: 29(fvec3) ConstantComposite 25 26 72
+ 81: TypeImage 37(int) 2D depth array sampled format:Unknown
+ 82: TypePointer UniformConstant 81
+ 83(g_tTex2di4a): 82(ptr) Variable UniformConstant
+ 86: TypeSampledImage 81
+ 95: TypeImage 51(int) 2D depth array sampled format:Unknown
+ 96: TypePointer UniformConstant 95
+ 97(g_tTex2du4a): 96(ptr) Variable UniformConstant
+ 100: TypeSampledImage 95
+ 109: TypeImage 6(float) Cube depth array sampled format:Unknown
+ 110: TypePointer UniformConstant 109
+111(g_tTexcdf4a): 110(ptr) Variable UniformConstant
+ 114: TypeSampledImage 109
+ 116: 6(float) Constant 1053609165
+ 117: 7(fvec4) ConstantComposite 25 26 72 116
+ 125: TypeImage 37(int) Cube depth array sampled format:Unknown
+ 126: TypePointer UniformConstant 125
+127(g_tTexcdi4a): 126(ptr) Variable UniformConstant
+ 130: TypeSampledImage 125
+ 139: TypeImage 51(int) Cube depth array sampled format:Unknown
+ 140: TypePointer UniformConstant 139
+141(g_tTexcdu4a): 140(ptr) Variable UniformConstant
+ 144: TypeSampledImage 139
+ 152: TypePointer Function 8(PS_OUTPUT)
+ 154: 37(int) Constant 0
+ 155: 6(float) Constant 1065353216
+ 156: 7(fvec4) ConstantComposite 155 155 155 155
+ 157: TypePointer Function 7(fvec4)
+ 159: 37(int) Constant 1
+ 166: TypePointer Output 7(fvec4)
+167(@entryPointOutput.Color): 166(ptr) Variable Output
+ 170: TypePointer Output 6(float)
+171(@entryPointOutput.Depth): 170(ptr) Variable Output
+ 174: TypeImage 6(float) 1D sampled format:Unknown
+ 175: TypePointer UniformConstant 174
+ 176(g_tTex1df4): 175(ptr) Variable UniformConstant
+ 177: TypeImage 37(int) 1D sampled format:Unknown
+ 178: TypePointer UniformConstant 177
+ 179(g_tTex1di4): 178(ptr) Variable UniformConstant
+ 180: TypeImage 51(int) 1D sampled format:Unknown
+ 181: TypePointer UniformConstant 180
+ 182(g_tTex1du4): 181(ptr) Variable UniformConstant
+ 183: TypeImage 6(float) 2D sampled format:Unknown
184: TypePointer UniformConstant 183
- 185(g_tTex1df4): 184(ptr) Variable UniformConstant
- 186: TypeImage 38(int) 1D sampled format:Unknown
+ 185(g_tTex2df4): 184(ptr) Variable UniformConstant
+ 186: TypeImage 37(int) 2D sampled format:Unknown
187: TypePointer UniformConstant 186
- 188(g_tTex1di4): 187(ptr) Variable UniformConstant
- 189: TypeImage 53(int) 1D sampled format:Unknown
+ 188(g_tTex2di4): 187(ptr) Variable UniformConstant
+ 189: TypeImage 51(int) 2D sampled format:Unknown
190: TypePointer UniformConstant 189
- 191(g_tTex1du4): 190(ptr) Variable UniformConstant
- 192: TypeImage 6(float) 2D sampled format:Unknown
+ 191(g_tTex2du4): 190(ptr) Variable UniformConstant
+ 192: TypeImage 6(float) 3D sampled format:Unknown
193: TypePointer UniformConstant 192
- 194(g_tTex2df4): 193(ptr) Variable UniformConstant
- 195: TypeImage 38(int) 2D sampled format:Unknown
+ 194(g_tTex3df4): 193(ptr) Variable UniformConstant
+ 195: TypeImage 37(int) 3D sampled format:Unknown
196: TypePointer UniformConstant 195
- 197(g_tTex2di4): 196(ptr) Variable UniformConstant
- 198: TypeImage 53(int) 2D sampled format:Unknown
+ 197(g_tTex3di4): 196(ptr) Variable UniformConstant
+ 198: TypeImage 51(int) 3D sampled format:Unknown
199: TypePointer UniformConstant 198
- 200(g_tTex2du4): 199(ptr) Variable UniformConstant
- 201: TypeImage 6(float) 3D sampled format:Unknown
+ 200(g_tTex3du4): 199(ptr) Variable UniformConstant
+ 201: TypeImage 6(float) Cube sampled format:Unknown
202: TypePointer UniformConstant 201
- 203(g_tTex3df4): 202(ptr) Variable UniformConstant
- 204: TypeImage 38(int) 3D sampled format:Unknown
+ 203(g_tTexcdf4): 202(ptr) Variable UniformConstant
+ 204: TypeImage 37(int) Cube sampled format:Unknown
205: TypePointer UniformConstant 204
- 206(g_tTex3di4): 205(ptr) Variable UniformConstant
- 207: TypeImage 53(int) 3D sampled format:Unknown
+ 206(g_tTexcdi4): 205(ptr) Variable UniformConstant
+ 207: TypeImage 51(int) Cube sampled format:Unknown
208: TypePointer UniformConstant 207
- 209(g_tTex3du4): 208(ptr) Variable UniformConstant
- 210: TypeImage 6(float) Cube sampled format:Unknown
- 211: TypePointer UniformConstant 210
- 212(g_tTexcdf4): 211(ptr) Variable UniformConstant
- 213: TypeImage 38(int) Cube sampled format:Unknown
- 214: TypePointer UniformConstant 213
- 215(g_tTexcdi4): 214(ptr) Variable UniformConstant
- 216: TypeImage 53(int) Cube sampled format:Unknown
- 217: TypePointer UniformConstant 216
- 218(g_tTexcdu4): 217(ptr) Variable UniformConstant
+ 209(g_tTexcdu4): 208(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
-173(flattenTemp): 161(ptr) Variable Function
- 174:8(PS_OUTPUT) FunctionCall 10(@main()
- Store 173(flattenTemp) 174
- 177: 166(ptr) AccessChain 173(flattenTemp) 163
- 178: 7(fvec4) Load 177
- Store 176(Color) 178
- 181: 12(ptr) AccessChain 173(flattenTemp) 168
- 182: 6(float) Load 181
- Store 180(Depth) 182
+164(flattenTemp): 152(ptr) Variable Function
+ 165:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 164(flattenTemp) 165
+ 168: 157(ptr) AccessChain 164(flattenTemp) 154
+ 169: 7(fvec4) Load 168
+ Store 167(@entryPointOutput.Color) 169
+ 172: 12(ptr) AccessChain 164(flattenTemp) 159
+ 173: 6(float) Load 172
+ Store 171(@entryPointOutput.Depth) 173
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
13(r10): 12(ptr) Variable Function
- 37(r12): 12(ptr) Variable Function
- 52(r14): 12(ptr) Variable Function
- 67(r30): 12(ptr) Variable Function
- 84(r32): 12(ptr) Variable Function
- 99(r34): 12(ptr) Variable Function
- 114(r60): 12(ptr) Variable Function
- 131(r62): 12(ptr) Variable Function
- 146(r64): 12(ptr) Variable Function
- 162(psout): 161(ptr) Variable Function
+ 36(r12): 12(ptr) Variable Function
+ 50(r14): 12(ptr) Variable Function
+ 64(r30): 12(ptr) Variable Function
+ 80(r32): 12(ptr) Variable Function
+ 94(r34): 12(ptr) Variable Function
+ 108(r60): 12(ptr) Variable Function
+ 124(r62): 12(ptr) Variable Function
+ 138(r64): 12(ptr) Variable Function
+ 153(psout): 152(ptr) Variable Function
17: 14 Load 16(g_tTex1df4a)
21: 18 Load 20(g_sSamp)
- 24: 23 SampledImage 17 21
- 31: 6(float) CompositeExtract 28 0
- 32: 6(float) CompositeExtract 28 1
- 33: 30(fvec3) CompositeConstruct 31 32 29
- 35: 6(float) CompositeExtract 33 2
- 36: 6(float) ImageSampleDrefExplicitLod 24 33 35 Lod 34
- Store 13(r10) 36
- 42: 39 Load 41(g_tTex1di4a)
- 43: 18 Load 20(g_sSamp)
- 46: 45 SampledImage 42 43
- 47: 6(float) CompositeExtract 28 0
- 48: 6(float) CompositeExtract 28 1
- 49: 30(fvec3) CompositeConstruct 47 48 29
- 50: 6(float) CompositeExtract 49 2
- 51: 6(float) ImageSampleDrefExplicitLod 46 49 50 Lod 34
- Store 37(r12) 51
- 57: 54 Load 56(g_tTex1du4a)
- 58: 18 Load 20(g_sSamp)
- 61: 60 SampledImage 57 58
- 62: 6(float) CompositeExtract 28 0
- 63: 6(float) CompositeExtract 28 1
- 64: 30(fvec3) CompositeConstruct 62 63 29
- 65: 6(float) CompositeExtract 64 2
- 66: 6(float) ImageSampleDrefExplicitLod 61 64 65 Lod 34
- Store 52(r14) 66
- 71: 68 Load 70(g_tTex2df4a)
- 72: 18 Load 20(g_sSamp)
- 75: 74 SampledImage 71 72
- 78: 6(float) CompositeExtract 77 0
- 79: 6(float) CompositeExtract 77 1
- 80: 6(float) CompositeExtract 77 2
- 81: 7(fvec4) CompositeConstruct 78 79 80 29
- 82: 6(float) CompositeExtract 81 3
- 83: 6(float) ImageSampleDrefExplicitLod 75 81 82 Lod 34
- Store 67(r30) 83
- 88: 85 Load 87(g_tTex2di4a)
- 89: 18 Load 20(g_sSamp)
- 92: 91 SampledImage 88 89
- 93: 6(float) CompositeExtract 77 0
- 94: 6(float) CompositeExtract 77 1
- 95: 6(float) CompositeExtract 77 2
- 96: 7(fvec4) CompositeConstruct 93 94 95 29
- 97: 6(float) CompositeExtract 96 3
- 98: 6(float) ImageSampleDrefExplicitLod 92 96 97 Lod 34
- Store 84(r32) 98
- 103: 100 Load 102(g_tTex2du4a)
- 104: 18 Load 20(g_sSamp)
- 107: 106 SampledImage 103 104
- 108: 6(float) CompositeExtract 77 0
- 109: 6(float) CompositeExtract 77 1
- 110: 6(float) CompositeExtract 77 2
- 111: 7(fvec4) CompositeConstruct 108 109 110 29
- 112: 6(float) CompositeExtract 111 3
- 113: 6(float) ImageSampleDrefExplicitLod 107 111 112 Lod 34
- Store 99(r34) 113
- 118: 115 Load 117(g_tTexcdf4a)
- 119: 18 Load 20(g_sSamp)
- 122: 121 SampledImage 118 119
- 125: 6(float) CompositeExtract 124 0
- 126: 6(float) CompositeExtract 124 1
- 127: 6(float) CompositeExtract 124 2
- 128: 6(float) CompositeExtract 124 3
- 129: 7(fvec4) CompositeConstruct 125 126 127 128
- 130: 6(float) ImageSampleDrefExplicitLod 122 129 29 Lod 29
- Store 114(r60) 130
- 135: 132 Load 134(g_tTexcdi4a)
- 136: 18 Load 20(g_sSamp)
- 139: 138 SampledImage 135 136
- 140: 6(float) CompositeExtract 124 0
- 141: 6(float) CompositeExtract 124 1
- 142: 6(float) CompositeExtract 124 2
- 143: 6(float) CompositeExtract 124 3
- 144: 7(fvec4) CompositeConstruct 140 141 142 143
- 145: 6(float) ImageSampleDrefExplicitLod 139 144 29 Lod 29
- Store 131(r62) 145
- 150: 147 Load 149(g_tTexcdu4a)
- 151: 18 Load 20(g_sSamp)
- 154: 153 SampledImage 150 151
- 155: 6(float) CompositeExtract 124 0
- 156: 6(float) CompositeExtract 124 1
- 157: 6(float) CompositeExtract 124 2
- 158: 6(float) CompositeExtract 124 3
- 159: 7(fvec4) CompositeConstruct 155 156 157 158
- 160: 6(float) ImageSampleDrefExplicitLod 154 159 29 Lod 29
- Store 146(r64) 160
- 167: 166(ptr) AccessChain 162(psout) 163
- Store 167 165
- 169: 12(ptr) AccessChain 162(psout) 168
- Store 169 164
- 170:8(PS_OUTPUT) Load 162(psout)
- ReturnValue 170
+ 23: 22 SampledImage 17 21
+ 30: 6(float) CompositeExtract 27 0
+ 31: 6(float) CompositeExtract 27 1
+ 32: 29(fvec3) CompositeConstruct 30 31 28
+ 34: 6(float) CompositeExtract 32 2
+ 35: 6(float) ImageSampleDrefExplicitLod 23 32 34 Lod 33
+ Store 13(r10) 35
+ 41: 38 Load 40(g_tTex1di4a)
+ 42: 18 Load 20(g_sSamp)
+ 44: 43 SampledImage 41 42
+ 45: 6(float) CompositeExtract 27 0
+ 46: 6(float) CompositeExtract 27 1
+ 47: 29(fvec3) CompositeConstruct 45 46 28
+ 48: 6(float) CompositeExtract 47 2
+ 49: 6(float) ImageSampleDrefExplicitLod 44 47 48 Lod 33
+ Store 36(r12) 49
+ 55: 52 Load 54(g_tTex1du4a)
+ 56: 18 Load 20(g_sSamp)
+ 58: 57 SampledImage 55 56
+ 59: 6(float) CompositeExtract 27 0
+ 60: 6(float) CompositeExtract 27 1
+ 61: 29(fvec3) CompositeConstruct 59 60 28
+ 62: 6(float) CompositeExtract 61 2
+ 63: 6(float) ImageSampleDrefExplicitLod 58 61 62 Lod 33
+ Store 50(r14) 63
+ 68: 65 Load 67(g_tTex2df4a)
+ 69: 18 Load 20(g_sSamp)
+ 71: 70 SampledImage 68 69
+ 74: 6(float) CompositeExtract 73 0
+ 75: 6(float) CompositeExtract 73 1
+ 76: 6(float) CompositeExtract 73 2
+ 77: 7(fvec4) CompositeConstruct 74 75 76 28
+ 78: 6(float) CompositeExtract 77 3
+ 79: 6(float) ImageSampleDrefExplicitLod 71 77 78 Lod 33
+ Store 64(r30) 79
+ 84: 81 Load 83(g_tTex2di4a)
+ 85: 18 Load 20(g_sSamp)
+ 87: 86 SampledImage 84 85
+ 88: 6(float) CompositeExtract 73 0
+ 89: 6(float) CompositeExtract 73 1
+ 90: 6(float) CompositeExtract 73 2
+ 91: 7(fvec4) CompositeConstruct 88 89 90 28
+ 92: 6(float) CompositeExtract 91 3
+ 93: 6(float) ImageSampleDrefExplicitLod 87 91 92 Lod 33
+ Store 80(r32) 93
+ 98: 95 Load 97(g_tTex2du4a)
+ 99: 18 Load 20(g_sSamp)
+ 101: 100 SampledImage 98 99
+ 102: 6(float) CompositeExtract 73 0
+ 103: 6(float) CompositeExtract 73 1
+ 104: 6(float) CompositeExtract 73 2
+ 105: 7(fvec4) CompositeConstruct 102 103 104 28
+ 106: 6(float) CompositeExtract 105 3
+ 107: 6(float) ImageSampleDrefExplicitLod 101 105 106 Lod 33
+ Store 94(r34) 107
+ 112: 109 Load 111(g_tTexcdf4a)
+ 113: 18 Load 20(g_sSamp)
+ 115: 114 SampledImage 112 113
+ 118: 6(float) CompositeExtract 117 0
+ 119: 6(float) CompositeExtract 117 1
+ 120: 6(float) CompositeExtract 117 2
+ 121: 6(float) CompositeExtract 117 3
+ 122: 7(fvec4) CompositeConstruct 118 119 120 121
+ 123: 6(float) ImageSampleDrefExplicitLod 115 122 28 Lod 33
+ Store 108(r60) 123
+ 128: 125 Load 127(g_tTexcdi4a)
+ 129: 18 Load 20(g_sSamp)
+ 131: 130 SampledImage 128 129
+ 132: 6(float) CompositeExtract 117 0
+ 133: 6(float) CompositeExtract 117 1
+ 134: 6(float) CompositeExtract 117 2
+ 135: 6(float) CompositeExtract 117 3
+ 136: 7(fvec4) CompositeConstruct 132 133 134 135
+ 137: 6(float) ImageSampleDrefExplicitLod 131 136 28 Lod 33
+ Store 124(r62) 137
+ 142: 139 Load 141(g_tTexcdu4a)
+ 143: 18 Load 20(g_sSamp)
+ 145: 144 SampledImage 142 143
+ 146: 6(float) CompositeExtract 117 0
+ 147: 6(float) CompositeExtract 117 1
+ 148: 6(float) CompositeExtract 117 2
+ 149: 6(float) CompositeExtract 117 3
+ 150: 7(fvec4) CompositeConstruct 146 147 148 149
+ 151: 6(float) ImageSampleDrefExplicitLod 145 150 28 Lod 33
+ Store 138(r64) 151
+ 158: 157(ptr) AccessChain 153(psout) 154
+ Store 158 156
+ 160: 12(ptr) AccessChain 153(psout) 159
+ Store 160 155
+ 161:8(PS_OUTPUT) Load 153(psout)
+ ReturnValue 161
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index 1fcc001e2b1..278aad5952a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplecmplevelzero.basic.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
0:42 'r00' ( temp float)
0:42 textureLod ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DShadow)
-0:42 'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec2 ( temp 2-component vector of float)
0:42 Constant:
@@ -24,7 +24,7 @@ gl_FragCoord origin is upper left
0:43 'r02' ( temp float)
0:43 textureLod ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DShadow)
-0:43 'g_tTex1di4' ( uniform itexture1D)
+0:43 'g_tTex1di4' ( uniform itexture1DShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec2 ( temp 2-component vector of float)
0:43 Constant:
@@ -38,7 +38,7 @@ gl_FragCoord origin is upper left
0:44 'r04' ( temp float)
0:44 textureLod ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DShadow)
-0:44 'g_tTex1du4' ( uniform utexture1D)
+0:44 'g_tTex1du4' ( uniform utexture1DShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec2 ( temp 2-component vector of float)
0:44 Constant:
@@ -52,7 +52,7 @@ gl_FragCoord origin is upper left
0:47 'r20' ( temp float)
0:47 textureLod ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DShadow)
-0:47 'g_tTex2df4' ( uniform texture2D)
+0:47 'g_tTex2df4' ( uniform texture2DShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -67,7 +67,7 @@ gl_FragCoord origin is upper left
0:48 'r22' ( temp float)
0:48 textureLod ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DShadow)
-0:48 'g_tTex2di4' ( uniform itexture2D)
+0:48 'g_tTex2di4' ( uniform itexture2DShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -82,7 +82,7 @@ gl_FragCoord origin is upper left
0:49 'r24' ( temp float)
0:49 textureLod ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DShadow)
-0:49 'g_tTex2du4' ( uniform utexture2D)
+0:49 'g_tTex2du4' ( uniform utexture2DShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -97,7 +97,7 @@ gl_FragCoord origin is upper left
0:53 'r50' ( temp float)
0:53 textureLod ( temp float)
0:53 Construct combined texture-sampler ( temp samplerCubeShadow)
-0:53 'g_tTexcdf4' ( uniform textureCube)
+0:53 'g_tTexcdf4' ( uniform textureCubeShadow)
0:53 'g_sSamp' (layout( binding=0) uniform sampler)
0:53 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -113,7 +113,7 @@ gl_FragCoord origin is upper left
0:54 'r52' ( temp float)
0:54 textureLod ( temp float)
0:54 Construct combined texture-sampler ( temp isamplerCubeShadow)
-0:54 'g_tTexcdi4' ( uniform itextureCube)
+0:54 'g_tTexcdi4' ( uniform itextureCubeShadow)
0:54 'g_sSamp' (layout( binding=0) uniform sampler)
0:54 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -129,7 +129,7 @@ gl_FragCoord origin is upper left
0:55 'r54' ( temp float)
0:55 textureLod ( temp float)
0:55 Construct combined texture-sampler ( temp usamplerCubeShadow)
-0:55 'g_tTexcdu4' ( uniform utextureCube)
+0:55 'g_tTexcdu4' ( uniform utextureCubeShadow)
0:55 'g_sSamp' (layout( binding=0) uniform sampler)
0:55 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -167,31 +167,31 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 1 (const int)
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
-0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? 'g_tTex1di4' ( uniform itexture1D)
-0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:? 'g_tTex1di4' ( uniform itexture1DShadow)
+0:? 'g_tTex1du4' ( uniform utexture1DShadow)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
-0:? 'g_tTexcdf4' ( uniform textureCube)
-0:? 'g_tTexcdi4' ( uniform itextureCube)
-0:? 'g_tTexcdu4' ( uniform utextureCube)
+0:? 'g_tTexcdf4' ( uniform textureCubeShadow)
+0:? 'g_tTexcdi4' ( uniform itextureCubeShadow)
+0:? 'g_tTexcdu4' ( uniform utextureCubeShadow)
0:? 'g_tTex1df4a' ( uniform texture1DArray)
0:? 'g_tTex1di4a' ( uniform itexture1DArray)
0:? 'g_tTex1du4a' ( uniform utexture1DArray)
@@ -201,14 +201,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -219,7 +219,7 @@ gl_FragCoord origin is upper left
0:42 'r00' ( temp float)
0:42 textureLod ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DShadow)
-0:42 'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec2 ( temp 2-component vector of float)
0:42 Constant:
@@ -233,7 +233,7 @@ gl_FragCoord origin is upper left
0:43 'r02' ( temp float)
0:43 textureLod ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DShadow)
-0:43 'g_tTex1di4' ( uniform itexture1D)
+0:43 'g_tTex1di4' ( uniform itexture1DShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec2 ( temp 2-component vector of float)
0:43 Constant:
@@ -247,7 +247,7 @@ gl_FragCoord origin is upper left
0:44 'r04' ( temp float)
0:44 textureLod ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DShadow)
-0:44 'g_tTex1du4' ( uniform utexture1D)
+0:44 'g_tTex1du4' ( uniform utexture1DShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec2 ( temp 2-component vector of float)
0:44 Constant:
@@ -261,7 +261,7 @@ gl_FragCoord origin is upper left
0:47 'r20' ( temp float)
0:47 textureLod ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DShadow)
-0:47 'g_tTex2df4' ( uniform texture2D)
+0:47 'g_tTex2df4' ( uniform texture2DShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -276,7 +276,7 @@ gl_FragCoord origin is upper left
0:48 'r22' ( temp float)
0:48 textureLod ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DShadow)
-0:48 'g_tTex2di4' ( uniform itexture2D)
+0:48 'g_tTex2di4' ( uniform itexture2DShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -291,7 +291,7 @@ gl_FragCoord origin is upper left
0:49 'r24' ( temp float)
0:49 textureLod ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DShadow)
-0:49 'g_tTex2du4' ( uniform utexture2D)
+0:49 'g_tTex2du4' ( uniform utexture2DShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -306,7 +306,7 @@ gl_FragCoord origin is upper left
0:53 'r50' ( temp float)
0:53 textureLod ( temp float)
0:53 Construct combined texture-sampler ( temp samplerCubeShadow)
-0:53 'g_tTexcdf4' ( uniform textureCube)
+0:53 'g_tTexcdf4' ( uniform textureCubeShadow)
0:53 'g_sSamp' (layout( binding=0) uniform sampler)
0:53 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -322,7 +322,7 @@ gl_FragCoord origin is upper left
0:54 'r52' ( temp float)
0:54 textureLod ( temp float)
0:54 Construct combined texture-sampler ( temp isamplerCubeShadow)
-0:54 'g_tTexcdi4' ( uniform itextureCube)
+0:54 'g_tTexcdi4' ( uniform itextureCubeShadow)
0:54 'g_sSamp' (layout( binding=0) uniform sampler)
0:54 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -338,7 +338,7 @@ gl_FragCoord origin is upper left
0:55 'r54' ( temp float)
0:55 textureLod ( temp float)
0:55 Construct combined texture-sampler ( temp usamplerCubeShadow)
-0:55 'g_tTexcdu4' ( uniform utextureCube)
+0:55 'g_tTexcdu4' ( uniform utextureCubeShadow)
0:55 'g_sSamp' (layout( binding=0) uniform sampler)
0:55 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -376,31 +376,31 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 1 (const int)
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
-0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? 'g_tTex1di4' ( uniform itexture1D)
-0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:? 'g_tTex1di4' ( uniform itexture1DShadow)
+0:? 'g_tTex1du4' ( uniform utexture1DShadow)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
-0:? 'g_tTexcdf4' ( uniform textureCube)
-0:? 'g_tTexcdi4' ( uniform itextureCube)
-0:? 'g_tTexcdu4' ( uniform utextureCube)
+0:? 'g_tTexcdf4' ( uniform textureCubeShadow)
+0:? 'g_tTexcdi4' ( uniform itextureCubeShadow)
+0:? 'g_tTexcdu4' ( uniform utextureCubeShadow)
0:? 'g_tTex1df4a' ( uniform texture1DArray)
0:? 'g_tTex1di4a' ( uniform itexture1DArray)
0:? 'g_tTex1du4a' ( uniform utexture1DArray)
@@ -410,20 +410,21 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 208
+// Generated by (magic number): 80002
+// Id's are bound by 199
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 165 169
+ EntryPoint Fragment 4 "main" 156 160
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -432,64 +433,64 @@ gl_FragCoord origin is upper left
Name 13 "r00"
Name 16 "g_tTex1df4"
Name 20 "g_sSamp"
- Name 32 "r02"
- Name 36 "g_tTex1di4"
- Name 45 "r04"
- Name 49 "g_tTex1du4"
- Name 58 "r20"
- Name 61 "g_tTex2df4"
- Name 75 "r22"
- Name 78 "g_tTex2di4"
- Name 89 "r24"
- Name 92 "g_tTex2du4"
- Name 103 "r50"
- Name 106 "g_tTexcdf4"
- Name 120 "r52"
- Name 123 "g_tTexcdi4"
- Name 135 "r54"
- Name 138 "g_tTexcdu4"
- Name 151 "psout"
- Name 162 "flattenTemp"
- Name 165 "Color"
- Name 169 "Depth"
- Name 174 "g_tTex3df4"
- Name 177 "g_tTex3di4"
- Name 180 "g_tTex3du4"
- Name 183 "g_tTex1df4a"
- Name 186 "g_tTex1di4a"
- Name 189 "g_tTex1du4a"
- Name 192 "g_tTex2df4a"
- Name 195 "g_tTex2di4a"
- Name 198 "g_tTex2du4a"
- Name 201 "g_tTexcdf4a"
- Name 204 "g_tTexcdi4a"
- Name 207 "g_tTexcdu4a"
+ Name 31 "r02"
+ Name 35 "g_tTex1di4"
+ Name 43 "r04"
+ Name 47 "g_tTex1du4"
+ Name 55 "r20"
+ Name 58 "g_tTex2df4"
+ Name 71 "r22"
+ Name 74 "g_tTex2di4"
+ Name 84 "r24"
+ Name 87 "g_tTex2du4"
+ Name 97 "r50"
+ Name 100 "g_tTexcdf4"
+ Name 113 "r52"
+ Name 116 "g_tTexcdi4"
+ Name 127 "r54"
+ Name 130 "g_tTexcdu4"
+ Name 142 "psout"
+ Name 153 "flattenTemp"
+ Name 156 "@entryPointOutput.Color"
+ Name 160 "@entryPointOutput.Depth"
+ Name 165 "g_tTex3df4"
+ Name 168 "g_tTex3di4"
+ Name 171 "g_tTex3du4"
+ Name 174 "g_tTex1df4a"
+ Name 177 "g_tTex1di4a"
+ Name 180 "g_tTex1du4a"
+ Name 183 "g_tTex2df4a"
+ Name 186 "g_tTex2di4a"
+ Name 189 "g_tTex2du4a"
+ Name 192 "g_tTexcdf4a"
+ Name 195 "g_tTexcdi4a"
+ Name 198 "g_tTexcdu4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
- Decorate 36(g_tTex1di4) DescriptorSet 0
- Decorate 49(g_tTex1du4) DescriptorSet 0
- Decorate 61(g_tTex2df4) DescriptorSet 0
- Decorate 78(g_tTex2di4) DescriptorSet 0
- Decorate 92(g_tTex2du4) DescriptorSet 0
- Decorate 106(g_tTexcdf4) DescriptorSet 0
- Decorate 123(g_tTexcdi4) DescriptorSet 0
- Decorate 138(g_tTexcdu4) DescriptorSet 0
- Decorate 165(Color) Location 0
- Decorate 169(Depth) BuiltIn FragDepth
- Decorate 174(g_tTex3df4) DescriptorSet 0
- Decorate 177(g_tTex3di4) DescriptorSet 0
- Decorate 180(g_tTex3du4) DescriptorSet 0
- Decorate 183(g_tTex1df4a) DescriptorSet 0
- Decorate 186(g_tTex1di4a) DescriptorSet 0
- Decorate 189(g_tTex1du4a) DescriptorSet 0
- Decorate 192(g_tTex2df4a) DescriptorSet 0
- Decorate 195(g_tTex2di4a) DescriptorSet 0
- Decorate 198(g_tTex2du4a) DescriptorSet 0
- Decorate 201(g_tTexcdf4a) DescriptorSet 0
- Decorate 204(g_tTexcdi4a) DescriptorSet 0
- Decorate 207(g_tTexcdu4a) DescriptorSet 0
+ Decorate 35(g_tTex1di4) DescriptorSet 0
+ Decorate 47(g_tTex1du4) DescriptorSet 0
+ Decorate 58(g_tTex2df4) DescriptorSet 0
+ Decorate 74(g_tTex2di4) DescriptorSet 0
+ Decorate 87(g_tTex2du4) DescriptorSet 0
+ Decorate 100(g_tTexcdf4) DescriptorSet 0
+ Decorate 116(g_tTexcdi4) DescriptorSet 0
+ Decorate 130(g_tTexcdu4) DescriptorSet 0
+ Decorate 156(@entryPointOutput.Color) Location 0
+ Decorate 160(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 165(g_tTex3df4) DescriptorSet 0
+ Decorate 168(g_tTex3di4) DescriptorSet 0
+ Decorate 171(g_tTex3du4) DescriptorSet 0
+ Decorate 174(g_tTex1df4a) DescriptorSet 0
+ Decorate 177(g_tTex1di4a) DescriptorSet 0
+ Decorate 180(g_tTex1du4a) DescriptorSet 0
+ Decorate 183(g_tTex2df4a) DescriptorSet 0
+ Decorate 186(g_tTex2di4a) DescriptorSet 0
+ Decorate 189(g_tTex2du4a) DescriptorSet 0
+ Decorate 192(g_tTexcdf4a) DescriptorSet 0
+ Decorate 195(g_tTexcdi4a) DescriptorSet 0
+ Decorate 198(g_tTexcdu4a) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -497,218 +498,209 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 6(float)
- 14: TypeImage 6(float) 1D sampled format:Unknown
+ 14: TypeImage 6(float) 1D depth sampled format:Unknown
15: TypePointer UniformConstant 14
16(g_tTex1df4): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(g_sSamp): 19(ptr) Variable UniformConstant
- 22: TypeImage 6(float) 1D depth sampled format:Unknown
- 23: TypeSampledImage 22
- 25: 6(float) Constant 1036831949
- 26: 6(float) Constant 1061158912
- 27: TypeVector 6(float) 2
- 29: 6(float) Constant 0
- 33: TypeInt 32 1
- 34: TypeImage 33(int) 1D sampled format:Unknown
- 35: TypePointer UniformConstant 34
- 36(g_tTex1di4): 35(ptr) Variable UniformConstant
- 39: TypeImage 33(int) 1D depth sampled format:Unknown
- 40: TypeSampledImage 39
- 46: TypeInt 32 0
- 47: TypeImage 46(int) 1D sampled format:Unknown
- 48: TypePointer UniformConstant 47
- 49(g_tTex1du4): 48(ptr) Variable UniformConstant
- 52: TypeImage 46(int) 1D depth sampled format:Unknown
- 53: TypeSampledImage 52
- 59: TypeImage 6(float) 2D sampled format:Unknown
- 60: TypePointer UniformConstant 59
- 61(g_tTex2df4): 60(ptr) Variable UniformConstant
- 64: TypeImage 6(float) 2D depth sampled format:Unknown
- 65: TypeSampledImage 64
- 67: 6(float) Constant 1045220557
- 68: 27(fvec2) ConstantComposite 25 67
- 69: TypeVector 6(float) 3
- 76: TypeImage 33(int) 2D sampled format:Unknown
- 77: TypePointer UniformConstant 76
- 78(g_tTex2di4): 77(ptr) Variable UniformConstant
- 81: TypeImage 33(int) 2D depth sampled format:Unknown
- 82: TypeSampledImage 81
- 90: TypeImage 46(int) 2D sampled format:Unknown
- 91: TypePointer UniformConstant 90
- 92(g_tTex2du4): 91(ptr) Variable UniformConstant
- 95: TypeImage 46(int) 2D depth sampled format:Unknown
- 96: TypeSampledImage 95
- 104: TypeImage 6(float) Cube sampled format:Unknown
- 105: TypePointer UniformConstant 104
- 106(g_tTexcdf4): 105(ptr) Variable UniformConstant
- 109: TypeImage 6(float) Cube depth sampled format:Unknown
- 110: TypeSampledImage 109
- 112: 6(float) Constant 1050253722
- 113: 69(fvec3) ConstantComposite 25 67 112
- 121: TypeImage 33(int) Cube sampled format:Unknown
- 122: TypePointer UniformConstant 121
- 123(g_tTexcdi4): 122(ptr) Variable UniformConstant
- 126: TypeImage 33(int) Cube depth sampled format:Unknown
- 127: TypeSampledImage 126
- 136: TypeImage 46(int) Cube sampled format:Unknown
- 137: TypePointer UniformConstant 136
- 138(g_tTexcdu4): 137(ptr) Variable UniformConstant
- 141: TypeImage 46(int) Cube depth sampled format:Unknown
- 142: TypeSampledImage 141
- 150: TypePointer Function 8(PS_OUTPUT)
- 152: 33(int) Constant 0
- 153: 6(float) Constant 1065353216
- 154: 7(fvec4) ConstantComposite 153 153 153 153
- 155: TypePointer Function 7(fvec4)
- 157: 33(int) Constant 1
- 164: TypePointer Output 7(fvec4)
- 165(Color): 164(ptr) Variable Output
- 168: TypePointer Output 6(float)
- 169(Depth): 168(ptr) Variable Output
- 172: TypeImage 6(float) 3D sampled format:Unknown
+ 22: TypeSampledImage 14
+ 24: 6(float) Constant 1036831949
+ 25: 6(float) Constant 1061158912
+ 26: TypeVector 6(float) 2
+ 28: 6(float) Constant 0
+ 32: TypeInt 32 1
+ 33: TypeImage 32(int) 1D depth sampled format:Unknown
+ 34: TypePointer UniformConstant 33
+ 35(g_tTex1di4): 34(ptr) Variable UniformConstant
+ 38: TypeSampledImage 33
+ 44: TypeInt 32 0
+ 45: TypeImage 44(int) 1D depth sampled format:Unknown
+ 46: TypePointer UniformConstant 45
+ 47(g_tTex1du4): 46(ptr) Variable UniformConstant
+ 50: TypeSampledImage 45
+ 56: TypeImage 6(float) 2D depth sampled format:Unknown
+ 57: TypePointer UniformConstant 56
+ 58(g_tTex2df4): 57(ptr) Variable UniformConstant
+ 61: TypeSampledImage 56
+ 63: 6(float) Constant 1045220557
+ 64: 26(fvec2) ConstantComposite 24 63
+ 65: TypeVector 6(float) 3
+ 72: TypeImage 32(int) 2D depth sampled format:Unknown
+ 73: TypePointer UniformConstant 72
+ 74(g_tTex2di4): 73(ptr) Variable UniformConstant
+ 77: TypeSampledImage 72
+ 85: TypeImage 44(int) 2D depth sampled format:Unknown
+ 86: TypePointer UniformConstant 85
+ 87(g_tTex2du4): 86(ptr) Variable UniformConstant
+ 90: TypeSampledImage 85
+ 98: TypeImage 6(float) Cube depth sampled format:Unknown
+ 99: TypePointer UniformConstant 98
+ 100(g_tTexcdf4): 99(ptr) Variable UniformConstant
+ 103: TypeSampledImage 98
+ 105: 6(float) Constant 1050253722
+ 106: 65(fvec3) ConstantComposite 24 63 105
+ 114: TypeImage 32(int) Cube depth sampled format:Unknown
+ 115: TypePointer UniformConstant 114
+ 116(g_tTexcdi4): 115(ptr) Variable UniformConstant
+ 119: TypeSampledImage 114
+ 128: TypeImage 44(int) Cube depth sampled format:Unknown
+ 129: TypePointer UniformConstant 128
+ 130(g_tTexcdu4): 129(ptr) Variable UniformConstant
+ 133: TypeSampledImage 128
+ 141: TypePointer Function 8(PS_OUTPUT)
+ 143: 32(int) Constant 0
+ 144: 6(float) Constant 1065353216
+ 145: 7(fvec4) ConstantComposite 144 144 144 144
+ 146: TypePointer Function 7(fvec4)
+ 148: 32(int) Constant 1
+ 155: TypePointer Output 7(fvec4)
+156(@entryPointOutput.Color): 155(ptr) Variable Output
+ 159: TypePointer Output 6(float)
+160(@entryPointOutput.Depth): 159(ptr) Variable Output
+ 163: TypeImage 6(float) 3D sampled format:Unknown
+ 164: TypePointer UniformConstant 163
+ 165(g_tTex3df4): 164(ptr) Variable UniformConstant
+ 166: TypeImage 32(int) 3D sampled format:Unknown
+ 167: TypePointer UniformConstant 166
+ 168(g_tTex3di4): 167(ptr) Variable UniformConstant
+ 169: TypeImage 44(int) 3D sampled format:Unknown
+ 170: TypePointer UniformConstant 169
+ 171(g_tTex3du4): 170(ptr) Variable UniformConstant
+ 172: TypeImage 6(float) 1D array sampled format:Unknown
173: TypePointer UniformConstant 172
- 174(g_tTex3df4): 173(ptr) Variable UniformConstant
- 175: TypeImage 33(int) 3D sampled format:Unknown
+174(g_tTex1df4a): 173(ptr) Variable UniformConstant
+ 175: TypeImage 32(int) 1D array sampled format:Unknown
176: TypePointer UniformConstant 175
- 177(g_tTex3di4): 176(ptr) Variable UniformConstant
- 178: TypeImage 46(int) 3D sampled format:Unknown
+177(g_tTex1di4a): 176(ptr) Variable UniformConstant
+ 178: TypeImage 44(int) 1D array sampled format:Unknown
179: TypePointer UniformConstant 178
- 180(g_tTex3du4): 179(ptr) Variable UniformConstant
- 181: TypeImage 6(float) 1D array sampled format:Unknown
+180(g_tTex1du4a): 179(ptr) Variable UniformConstant
+ 181: TypeImage 6(float) 2D array sampled format:Unknown
182: TypePointer UniformConstant 181
-183(g_tTex1df4a): 182(ptr) Variable UniformConstant
- 184: TypeImage 33(int) 1D array sampled format:Unknown
+183(g_tTex2df4a): 182(ptr) Variable UniformConstant
+ 184: TypeImage 32(int) 2D array sampled format:Unknown
185: TypePointer UniformConstant 184
-186(g_tTex1di4a): 185(ptr) Variable UniformConstant
- 187: TypeImage 46(int) 1D array sampled format:Unknown
+186(g_tTex2di4a): 185(ptr) Variable UniformConstant
+ 187: TypeImage 44(int) 2D array sampled format:Unknown
188: TypePointer UniformConstant 187
-189(g_tTex1du4a): 188(ptr) Variable UniformConstant
- 190: TypeImage 6(float) 2D array sampled format:Unknown
+189(g_tTex2du4a): 188(ptr) Variable UniformConstant
+ 190: TypeImage 6(float) Cube array sampled format:Unknown
191: TypePointer UniformConstant 190
-192(g_tTex2df4a): 191(ptr) Variable UniformConstant
- 193: TypeImage 33(int) 2D array sampled format:Unknown
+192(g_tTexcdf4a): 191(ptr) Variable UniformConstant
+ 193: TypeImage 32(int) Cube array sampled format:Unknown
194: TypePointer UniformConstant 193
-195(g_tTex2di4a): 194(ptr) Variable UniformConstant
- 196: TypeImage 46(int) 2D array sampled format:Unknown
+195(g_tTexcdi4a): 194(ptr) Variable UniformConstant
+ 196: TypeImage 44(int) Cube array sampled format:Unknown
197: TypePointer UniformConstant 196
-198(g_tTex2du4a): 197(ptr) Variable UniformConstant
- 199: TypeImage 6(float) Cube array sampled format:Unknown
- 200: TypePointer UniformConstant 199
-201(g_tTexcdf4a): 200(ptr) Variable UniformConstant
- 202: TypeImage 33(int) Cube array sampled format:Unknown
- 203: TypePointer UniformConstant 202
-204(g_tTexcdi4a): 203(ptr) Variable UniformConstant
- 205: TypeImage 46(int) Cube array sampled format:Unknown
- 206: TypePointer UniformConstant 205
-207(g_tTexcdu4a): 206(ptr) Variable UniformConstant
+198(g_tTexcdu4a): 197(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
-162(flattenTemp): 150(ptr) Variable Function
- 163:8(PS_OUTPUT) FunctionCall 10(@main()
- Store 162(flattenTemp) 163
- 166: 155(ptr) AccessChain 162(flattenTemp) 152
- 167: 7(fvec4) Load 166
- Store 165(Color) 167
- 170: 12(ptr) AccessChain 162(flattenTemp) 157
- 171: 6(float) Load 170
- Store 169(Depth) 171
+153(flattenTemp): 141(ptr) Variable Function
+ 154:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 153(flattenTemp) 154
+ 157: 146(ptr) AccessChain 153(flattenTemp) 143
+ 158: 7(fvec4) Load 157
+ Store 156(@entryPointOutput.Color) 158
+ 161: 12(ptr) AccessChain 153(flattenTemp) 148
+ 162: 6(float) Load 161
+ Store 160(@entryPointOutput.Depth) 162
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
13(r00): 12(ptr) Variable Function
- 32(r02): 12(ptr) Variable Function
- 45(r04): 12(ptr) Variable Function
- 58(r20): 12(ptr) Variable Function
- 75(r22): 12(ptr) Variable Function
- 89(r24): 12(ptr) Variable Function
- 103(r50): 12(ptr) Variable Function
- 120(r52): 12(ptr) Variable Function
- 135(r54): 12(ptr) Variable Function
- 151(psout): 150(ptr) Variable Function
+ 31(r02): 12(ptr) Variable Function
+ 43(r04): 12(ptr) Variable Function
+ 55(r20): 12(ptr) Variable Function
+ 71(r22): 12(ptr) Variable Function
+ 84(r24): 12(ptr) Variable Function
+ 97(r50): 12(ptr) Variable Function
+ 113(r52): 12(ptr) Variable Function
+ 127(r54): 12(ptr) Variable Function
+ 142(psout): 141(ptr) Variable Function
17: 14 Load 16(g_tTex1df4)
21: 18 Load 20(g_sSamp)
- 24: 23 SampledImage 17 21
- 28: 27(fvec2) CompositeConstruct 25 26
- 30: 6(float) CompositeExtract 28 1
- 31: 6(float) ImageSampleDrefExplicitLod 24 28 30 Lod 29
- Store 13(r00) 31
- 37: 34 Load 36(g_tTex1di4)
- 38: 18 Load 20(g_sSamp)
- 41: 40 SampledImage 37 38
- 42: 27(fvec2) CompositeConstruct 25 26
- 43: 6(float) CompositeExtract 42 1
- 44: 6(float) ImageSampleDrefExplicitLod 41 42 43 Lod 29
- Store 32(r02) 44
- 50: 47 Load 49(g_tTex1du4)
- 51: 18 Load 20(g_sSamp)
- 54: 53 SampledImage 50 51
- 55: 27(fvec2) CompositeConstruct 25 26
- 56: 6(float) CompositeExtract 55 1
- 57: 6(float) ImageSampleDrefExplicitLod 54 55 56 Lod 29
- Store 45(r04) 57
- 62: 59 Load 61(g_tTex2df4)
- 63: 18 Load 20(g_sSamp)
- 66: 65 SampledImage 62 63
- 70: 6(float) CompositeExtract 68 0
- 71: 6(float) CompositeExtract 68 1
- 72: 69(fvec3) CompositeConstruct 70 71 26
- 73: 6(float) CompositeExtract 72 2
- 74: 6(float) ImageSampleDrefExplicitLod 66 72 73 Lod 29
- Store 58(r20) 74
- 79: 76 Load 78(g_tTex2di4)
- 80: 18 Load 20(g_sSamp)
- 83: 82 SampledImage 79 80
- 84: 6(float) CompositeExtract 68 0
- 85: 6(float) CompositeExtract 68 1
- 86: 69(fvec3) CompositeConstruct 84 85 26
- 87: 6(float) CompositeExtract 86 2
- 88: 6(float) ImageSampleDrefExplicitLod 83 86 87 Lod 29
- Store 75(r22) 88
- 93: 90 Load 92(g_tTex2du4)
- 94: 18 Load 20(g_sSamp)
- 97: 96 SampledImage 93 94
- 98: 6(float) CompositeExtract 68 0
- 99: 6(float) CompositeExtract 68 1
- 100: 69(fvec3) CompositeConstruct 98 99 26
- 101: 6(float) CompositeExtract 100 2
- 102: 6(float) ImageSampleDrefExplicitLod 97 100 101 Lod 29
- Store 89(r24) 102
- 107: 104 Load 106(g_tTexcdf4)
- 108: 18 Load 20(g_sSamp)
- 111: 110 SampledImage 107 108
- 114: 6(float) CompositeExtract 113 0
- 115: 6(float) CompositeExtract 113 1
- 116: 6(float) CompositeExtract 113 2
- 117: 7(fvec4) CompositeConstruct 114 115 116 26
- 118: 6(float) CompositeExtract 117 3
- 119: 6(float) ImageSampleDrefExplicitLod 111 117 118 Lod 29
- Store 103(r50) 119
- 124: 121 Load 123(g_tTexcdi4)
- 125: 18 Load 20(g_sSamp)
- 128: 127 SampledImage 124 125
- 129: 6(float) CompositeExtract 113 0
- 130: 6(float) CompositeExtract 113 1
- 131: 6(float) CompositeExtract 113 2
- 132: 7(fvec4) CompositeConstruct 129 130 131 26
- 133: 6(float) CompositeExtract 132 3
- 134: 6(float) ImageSampleDrefExplicitLod 128 132 133 Lod 29
- Store 120(r52) 134
- 139: 136 Load 138(g_tTexcdu4)
- 140: 18 Load 20(g_sSamp)
- 143: 142 SampledImage 139 140
- 144: 6(float) CompositeExtract 113 0
- 145: 6(float) CompositeExtract 113 1
- 146: 6(float) CompositeExtract 113 2
- 147: 7(fvec4) CompositeConstruct 144 145 146 26
- 148: 6(float) CompositeExtract 147 3
- 149: 6(float) ImageSampleDrefExplicitLod 143 147 148 Lod 29
- Store 135(r54) 149
- 156: 155(ptr) AccessChain 151(psout) 152
- Store 156 154
- 158: 12(ptr) AccessChain 151(psout) 157
- Store 158 153
- 159:8(PS_OUTPUT) Load 151(psout)
- ReturnValue 159
+ 23: 22 SampledImage 17 21
+ 27: 26(fvec2) CompositeConstruct 24 25
+ 29: 6(float) CompositeExtract 27 1
+ 30: 6(float) ImageSampleDrefExplicitLod 23 27 29 Lod 28
+ Store 13(r00) 30
+ 36: 33 Load 35(g_tTex1di4)
+ 37: 18 Load 20(g_sSamp)
+ 39: 38 SampledImage 36 37
+ 40: 26(fvec2) CompositeConstruct 24 25
+ 41: 6(float) CompositeExtract 40 1
+ 42: 6(float) ImageSampleDrefExplicitLod 39 40 41 Lod 28
+ Store 31(r02) 42
+ 48: 45 Load 47(g_tTex1du4)
+ 49: 18 Load 20(g_sSamp)
+ 51: 50 SampledImage 48 49
+ 52: 26(fvec2) CompositeConstruct 24 25
+ 53: 6(float) CompositeExtract 52 1
+ 54: 6(float) ImageSampleDrefExplicitLod 51 52 53 Lod 28
+ Store 43(r04) 54
+ 59: 56 Load 58(g_tTex2df4)
+ 60: 18 Load 20(g_sSamp)
+ 62: 61 SampledImage 59 60
+ 66: 6(float) CompositeExtract 64 0
+ 67: 6(float) CompositeExtract 64 1
+ 68: 65(fvec3) CompositeConstruct 66 67 25
+ 69: 6(float) CompositeExtract 68 2
+ 70: 6(float) ImageSampleDrefExplicitLod 62 68 69 Lod 28
+ Store 55(r20) 70
+ 75: 72 Load 74(g_tTex2di4)
+ 76: 18 Load 20(g_sSamp)
+ 78: 77 SampledImage 75 76
+ 79: 6(float) CompositeExtract 64 0
+ 80: 6(float) CompositeExtract 64 1
+ 81: 65(fvec3) CompositeConstruct 79 80 25
+ 82: 6(float) CompositeExtract 81 2
+ 83: 6(float) ImageSampleDrefExplicitLod 78 81 82 Lod 28
+ Store 71(r22) 83
+ 88: 85 Load 87(g_tTex2du4)
+ 89: 18 Load 20(g_sSamp)
+ 91: 90 SampledImage 88 89
+ 92: 6(float) CompositeExtract 64 0
+ 93: 6(float) CompositeExtract 64 1
+ 94: 65(fvec3) CompositeConstruct 92 93 25
+ 95: 6(float) CompositeExtract 94 2
+ 96: 6(float) ImageSampleDrefExplicitLod 91 94 95 Lod 28
+ Store 84(r24) 96
+ 101: 98 Load 100(g_tTexcdf4)
+ 102: 18 Load 20(g_sSamp)
+ 104: 103 SampledImage 101 102
+ 107: 6(float) CompositeExtract 106 0
+ 108: 6(float) CompositeExtract 106 1
+ 109: 6(float) CompositeExtract 106 2
+ 110: 7(fvec4) CompositeConstruct 107 108 109 25
+ 111: 6(float) CompositeExtract 110 3
+ 112: 6(float) ImageSampleDrefExplicitLod 104 110 111 Lod 28
+ Store 97(r50) 112
+ 117: 114 Load 116(g_tTexcdi4)
+ 118: 18 Load 20(g_sSamp)
+ 120: 119 SampledImage 117 118
+ 121: 6(float) CompositeExtract 106 0
+ 122: 6(float) CompositeExtract 106 1
+ 123: 6(float) CompositeExtract 106 2
+ 124: 7(fvec4) CompositeConstruct 121 122 123 25
+ 125: 6(float) CompositeExtract 124 3
+ 126: 6(float) ImageSampleDrefExplicitLod 120 124 125 Lod 28
+ Store 113(r52) 126
+ 131: 128 Load 130(g_tTexcdu4)
+ 132: 18 Load 20(g_sSamp)
+ 134: 133 SampledImage 131 132
+ 135: 6(float) CompositeExtract 106 0
+ 136: 6(float) CompositeExtract 106 1
+ 137: 6(float) CompositeExtract 106 2
+ 138: 7(fvec4) CompositeConstruct 135 136 137 25
+ 139: 6(float) CompositeExtract 138 3
+ 140: 6(float) ImageSampleDrefExplicitLod 134 138 139 Lod 28
+ Store 127(r54) 140
+ 147: 146(ptr) AccessChain 142(psout) 143
+ Store 147 145
+ 149: 12(ptr) AccessChain 142(psout) 148
+ Store 149 144
+ 150:8(PS_OUTPUT) Load 142(psout)
+ ReturnValue 150
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index 1bd82bebd05..141f1f4b208 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplecmplevelzero.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
0:42 'r01' ( temp float)
0:42 textureLodOffset ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DShadow)
-0:42 'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec2 ( temp 2-component vector of float)
0:42 Constant:
@@ -26,7 +26,7 @@ gl_FragCoord origin is upper left
0:43 'r03' ( temp float)
0:43 textureLodOffset ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DShadow)
-0:43 'g_tTex1di4' ( uniform itexture1D)
+0:43 'g_tTex1di4' ( uniform itexture1DShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec2 ( temp 2-component vector of float)
0:43 Constant:
@@ -42,7 +42,7 @@ gl_FragCoord origin is upper left
0:44 'r05' ( temp float)
0:44 textureLodOffset ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DShadow)
-0:44 'g_tTex1du4' ( uniform utexture1D)
+0:44 'g_tTex1du4' ( uniform utexture1DShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec2 ( temp 2-component vector of float)
0:44 Constant:
@@ -58,7 +58,7 @@ gl_FragCoord origin is upper left
0:47 'r21' ( temp float)
0:47 textureLodOffset ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DShadow)
-0:47 'g_tTex2df4' ( uniform texture2D)
+0:47 'g_tTex2df4' ( uniform texture2DShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -76,7 +76,7 @@ gl_FragCoord origin is upper left
0:48 'r23' ( temp float)
0:48 textureLodOffset ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DShadow)
-0:48 'g_tTex2di4' ( uniform itexture2D)
+0:48 'g_tTex2di4' ( uniform itexture2DShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -94,7 +94,7 @@ gl_FragCoord origin is upper left
0:49 'r25' ( temp float)
0:49 textureLodOffset ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DShadow)
-0:49 'g_tTex2du4' ( uniform utexture2D)
+0:49 'g_tTex2du4' ( uniform utexture2DShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -134,25 +134,25 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 1 (const int)
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
-0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? 'g_tTex1di4' ( uniform itexture1D)
-0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:? 'g_tTex1di4' ( uniform itexture1DShadow)
+0:? 'g_tTex1du4' ( uniform utexture1DShadow)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
@@ -168,14 +168,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -186,7 +186,7 @@ gl_FragCoord origin is upper left
0:42 'r01' ( temp float)
0:42 textureLodOffset ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DShadow)
-0:42 'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec2 ( temp 2-component vector of float)
0:42 Constant:
@@ -202,7 +202,7 @@ gl_FragCoord origin is upper left
0:43 'r03' ( temp float)
0:43 textureLodOffset ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DShadow)
-0:43 'g_tTex1di4' ( uniform itexture1D)
+0:43 'g_tTex1di4' ( uniform itexture1DShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec2 ( temp 2-component vector of float)
0:43 Constant:
@@ -218,7 +218,7 @@ gl_FragCoord origin is upper left
0:44 'r05' ( temp float)
0:44 textureLodOffset ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DShadow)
-0:44 'g_tTex1du4' ( uniform utexture1D)
+0:44 'g_tTex1du4' ( uniform utexture1DShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec2 ( temp 2-component vector of float)
0:44 Constant:
@@ -234,7 +234,7 @@ gl_FragCoord origin is upper left
0:47 'r21' ( temp float)
0:47 textureLodOffset ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DShadow)
-0:47 'g_tTex2df4' ( uniform texture2D)
+0:47 'g_tTex2df4' ( uniform texture2DShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -252,7 +252,7 @@ gl_FragCoord origin is upper left
0:48 'r23' ( temp float)
0:48 textureLodOffset ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DShadow)
-0:48 'g_tTex2di4' ( uniform itexture2D)
+0:48 'g_tTex2di4' ( uniform itexture2DShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -270,7 +270,7 @@ gl_FragCoord origin is upper left
0:49 'r25' ( temp float)
0:49 textureLodOffset ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DShadow)
-0:49 'g_tTex2du4' ( uniform utexture2D)
+0:49 'g_tTex2du4' ( uniform utexture2DShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -310,25 +310,25 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 1 (const int)
0:? Linker Objects
0:? 'g_sSamp' (layout( binding=0) uniform sampler)
-0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:? 'g_tTex1di4' ( uniform itexture1D)
-0:? 'g_tTex1du4' ( uniform utexture1D)
-0:? 'g_tTex2df4' ( uniform texture2D)
-0:? 'g_tTex2di4' ( uniform itexture2D)
-0:? 'g_tTex2du4' ( uniform utexture2D)
+0:? 'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:? 'g_tTex1di4' ( uniform itexture1DShadow)
+0:? 'g_tTex1du4' ( uniform utexture1DShadow)
+0:? 'g_tTex2df4' ( uniform texture2DShadow)
+0:? 'g_tTex2di4' ( uniform itexture2DShadow)
+0:? 'g_tTex2du4' ( uniform utexture2DShadow)
0:? 'g_tTex3df4' ( uniform texture3D)
0:? 'g_tTex3di4' ( uniform itexture3D)
0:? 'g_tTex3du4' ( uniform utexture3D)
@@ -344,20 +344,21 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 174
+// Generated by (magic number): 80002
+// Id's are bound by 168
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 122 126
+ EntryPoint Fragment 4 "main" 116 120
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -366,61 +367,61 @@ gl_FragCoord origin is upper left
Name 13 "r01"
Name 16 "g_tTex1df4"
Name 20 "g_sSamp"
- Name 34 "r03"
- Name 37 "g_tTex1di4"
- Name 46 "r05"
- Name 50 "g_tTex1du4"
- Name 59 "r21"
- Name 62 "g_tTex2df4"
- Name 79 "r23"
- Name 82 "g_tTex2di4"
- Name 93 "r25"
- Name 96 "g_tTex2du4"
- Name 108 "psout"
- Name 119 "flattenTemp"
- Name 122 "Color"
- Name 126 "Depth"
- Name 131 "g_tTex3df4"
- Name 134 "g_tTex3di4"
- Name 137 "g_tTex3du4"
- Name 140 "g_tTexcdf4"
- Name 143 "g_tTexcdi4"
- Name 146 "g_tTexcdu4"
- Name 149 "g_tTex1df4a"
- Name 152 "g_tTex1di4a"
- Name 155 "g_tTex1du4a"
- Name 158 "g_tTex2df4a"
- Name 161 "g_tTex2di4a"
- Name 164 "g_tTex2du4a"
- Name 167 "g_tTexcdf4a"
- Name 170 "g_tTexcdi4a"
- Name 173 "g_tTexcdu4a"
+ Name 33 "r03"
+ Name 36 "g_tTex1di4"
+ Name 44 "r05"
+ Name 48 "g_tTex1du4"
+ Name 56 "r21"
+ Name 59 "g_tTex2df4"
+ Name 75 "r23"
+ Name 78 "g_tTex2di4"
+ Name 88 "r25"
+ Name 91 "g_tTex2du4"
+ Name 102 "psout"
+ Name 113 "flattenTemp"
+ Name 116 "@entryPointOutput.Color"
+ Name 120 "@entryPointOutput.Depth"
+ Name 125 "g_tTex3df4"
+ Name 128 "g_tTex3di4"
+ Name 131 "g_tTex3du4"
+ Name 134 "g_tTexcdf4"
+ Name 137 "g_tTexcdi4"
+ Name 140 "g_tTexcdu4"
+ Name 143 "g_tTex1df4a"
+ Name 146 "g_tTex1di4a"
+ Name 149 "g_tTex1du4a"
+ Name 152 "g_tTex2df4a"
+ Name 155 "g_tTex2di4a"
+ Name 158 "g_tTex2du4a"
+ Name 161 "g_tTexcdf4a"
+ Name 164 "g_tTexcdi4a"
+ Name 167 "g_tTexcdu4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
- Decorate 37(g_tTex1di4) DescriptorSet 0
- Decorate 50(g_tTex1du4) DescriptorSet 0
- Decorate 62(g_tTex2df4) DescriptorSet 0
- Decorate 82(g_tTex2di4) DescriptorSet 0
- Decorate 96(g_tTex2du4) DescriptorSet 0
- Decorate 122(Color) Location 0
- Decorate 126(Depth) BuiltIn FragDepth
- Decorate 131(g_tTex3df4) DescriptorSet 0
- Decorate 134(g_tTex3di4) DescriptorSet 0
- Decorate 137(g_tTex3du4) DescriptorSet 0
- Decorate 140(g_tTexcdf4) DescriptorSet 0
- Decorate 143(g_tTexcdi4) DescriptorSet 0
- Decorate 146(g_tTexcdu4) DescriptorSet 0
- Decorate 149(g_tTex1df4a) DescriptorSet 0
- Decorate 152(g_tTex1di4a) DescriptorSet 0
- Decorate 155(g_tTex1du4a) DescriptorSet 0
- Decorate 158(g_tTex2df4a) DescriptorSet 0
- Decorate 161(g_tTex2di4a) DescriptorSet 0
- Decorate 164(g_tTex2du4a) DescriptorSet 0
- Decorate 167(g_tTexcdf4a) DescriptorSet 0
- Decorate 170(g_tTexcdi4a) DescriptorSet 0
- Decorate 173(g_tTexcdu4a) DescriptorSet 0
+ Decorate 36(g_tTex1di4) DescriptorSet 0
+ Decorate 48(g_tTex1du4) DescriptorSet 0
+ Decorate 59(g_tTex2df4) DescriptorSet 0
+ Decorate 78(g_tTex2di4) DescriptorSet 0
+ Decorate 91(g_tTex2du4) DescriptorSet 0
+ Decorate 116(@entryPointOutput.Color) Location 0
+ Decorate 120(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 125(g_tTex3df4) DescriptorSet 0
+ Decorate 128(g_tTex3di4) DescriptorSet 0
+ Decorate 131(g_tTex3du4) DescriptorSet 0
+ Decorate 134(g_tTexcdf4) DescriptorSet 0
+ Decorate 137(g_tTexcdi4) DescriptorSet 0
+ Decorate 140(g_tTexcdu4) DescriptorSet 0
+ Decorate 143(g_tTex1df4a) DescriptorSet 0
+ Decorate 146(g_tTex1di4a) DescriptorSet 0
+ Decorate 149(g_tTex1du4a) DescriptorSet 0
+ Decorate 152(g_tTex2df4a) DescriptorSet 0
+ Decorate 155(g_tTex2di4a) DescriptorSet 0
+ Decorate 158(g_tTex2du4a) DescriptorSet 0
+ Decorate 161(g_tTexcdf4a) DescriptorSet 0
+ Decorate 164(g_tTexcdi4a) DescriptorSet 0
+ Decorate 167(g_tTexcdu4a) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -428,181 +429,175 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 6(float)
- 14: TypeImage 6(float) 1D sampled format:Unknown
+ 14: TypeImage 6(float) 1D depth sampled format:Unknown
15: TypePointer UniformConstant 14
16(g_tTex1df4): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(g_sSamp): 19(ptr) Variable UniformConstant
- 22: TypeImage 6(float) 1D depth sampled format:Unknown
- 23: TypeSampledImage 22
- 25: 6(float) Constant 1036831949
- 26: 6(float) Constant 1061158912
- 27: TypeVector 6(float) 2
- 29: 6(float) Constant 0
- 30: TypeInt 32 1
- 31: 30(int) Constant 2
- 35: TypeImage 30(int) 1D sampled format:Unknown
- 36: TypePointer UniformConstant 35
- 37(g_tTex1di4): 36(ptr) Variable UniformConstant
- 40: TypeImage 30(int) 1D depth sampled format:Unknown
- 41: TypeSampledImage 40
- 47: TypeInt 32 0
- 48: TypeImage 47(int) 1D sampled format:Unknown
- 49: TypePointer UniformConstant 48
- 50(g_tTex1du4): 49(ptr) Variable UniformConstant
- 53: TypeImage 47(int) 1D depth sampled format:Unknown
- 54: TypeSampledImage 53
- 60: TypeImage 6(float) 2D sampled format:Unknown
- 61: TypePointer UniformConstant 60
- 62(g_tTex2df4): 61(ptr) Variable UniformConstant
- 65: TypeImage 6(float) 2D depth sampled format:Unknown
- 66: TypeSampledImage 65
- 68: 6(float) Constant 1045220557
- 69: 27(fvec2) ConstantComposite 25 68
- 70: TypeVector 6(float) 3
- 74: TypeVector 30(int) 2
- 75: 30(int) Constant 3
- 76: 74(ivec2) ConstantComposite 31 75
- 80: TypeImage 30(int) 2D sampled format:Unknown
- 81: TypePointer UniformConstant 80
- 82(g_tTex2di4): 81(ptr) Variable UniformConstant
- 85: TypeImage 30(int) 2D depth sampled format:Unknown
- 86: TypeSampledImage 85
- 94: TypeImage 47(int) 2D sampled format:Unknown
- 95: TypePointer UniformConstant 94
- 96(g_tTex2du4): 95(ptr) Variable UniformConstant
- 99: TypeImage 47(int) 2D depth sampled format:Unknown
- 100: TypeSampledImage 99
- 107: TypePointer Function 8(PS_OUTPUT)
- 109: 30(int) Constant 0
- 110: 6(float) Constant 1065353216
- 111: 7(fvec4) ConstantComposite 110 110 110 110
- 112: TypePointer Function 7(fvec4)
- 114: 30(int) Constant 1
- 121: TypePointer Output 7(fvec4)
- 122(Color): 121(ptr) Variable Output
- 125: TypePointer Output 6(float)
- 126(Depth): 125(ptr) Variable Output
- 129: TypeImage 6(float) 3D sampled format:Unknown
+ 22: TypeSampledImage 14
+ 24: 6(float) Constant 1036831949
+ 25: 6(float) Constant 1061158912
+ 26: TypeVector 6(float) 2
+ 28: 6(float) Constant 0
+ 29: TypeInt 32 1
+ 30: 29(int) Constant 2
+ 34: TypeImage 29(int) 1D depth sampled format:Unknown
+ 35: TypePointer UniformConstant 34
+ 36(g_tTex1di4): 35(ptr) Variable UniformConstant
+ 39: TypeSampledImage 34
+ 45: TypeInt 32 0
+ 46: TypeImage 45(int) 1D depth sampled format:Unknown
+ 47: TypePointer UniformConstant 46
+ 48(g_tTex1du4): 47(ptr) Variable UniformConstant
+ 51: TypeSampledImage 46
+ 57: TypeImage 6(float) 2D depth sampled format:Unknown
+ 58: TypePointer UniformConstant 57
+ 59(g_tTex2df4): 58(ptr) Variable UniformConstant
+ 62: TypeSampledImage 57
+ 64: 6(float) Constant 1045220557
+ 65: 26(fvec2) ConstantComposite 24 64
+ 66: TypeVector 6(float) 3
+ 70: TypeVector 29(int) 2
+ 71: 29(int) Constant 3
+ 72: 70(ivec2) ConstantComposite 30 71
+ 76: TypeImage 29(int) 2D depth sampled format:Unknown
+ 77: TypePointer UniformConstant 76
+ 78(g_tTex2di4): 77(ptr) Variable UniformConstant
+ 81: TypeSampledImage 76
+ 89: TypeImage 45(int) 2D depth sampled format:Unknown
+ 90: TypePointer UniformConstant 89
+ 91(g_tTex2du4): 90(ptr) Variable UniformConstant
+ 94: TypeSampledImage 89
+ 101: TypePointer Function 8(PS_OUTPUT)
+ 103: 29(int) Constant 0
+ 104: 6(float) Constant 1065353216
+ 105: 7(fvec4) ConstantComposite 104 104 104 104
+ 106: TypePointer Function 7(fvec4)
+ 108: 29(int) Constant 1
+ 115: TypePointer Output 7(fvec4)
+116(@entryPointOutput.Color): 115(ptr) Variable Output
+ 119: TypePointer Output 6(float)
+120(@entryPointOutput.Depth): 119(ptr) Variable Output
+ 123: TypeImage 6(float) 3D sampled format:Unknown
+ 124: TypePointer UniformConstant 123
+ 125(g_tTex3df4): 124(ptr) Variable UniformConstant
+ 126: TypeImage 29(int) 3D sampled format:Unknown
+ 127: TypePointer UniformConstant 126
+ 128(g_tTex3di4): 127(ptr) Variable UniformConstant
+ 129: TypeImage 45(int) 3D sampled format:Unknown
130: TypePointer UniformConstant 129
- 131(g_tTex3df4): 130(ptr) Variable UniformConstant
- 132: TypeImage 30(int) 3D sampled format:Unknown
+ 131(g_tTex3du4): 130(ptr) Variable UniformConstant
+ 132: TypeImage 6(float) Cube sampled format:Unknown
133: TypePointer UniformConstant 132
- 134(g_tTex3di4): 133(ptr) Variable UniformConstant
- 135: TypeImage 47(int) 3D sampled format:Unknown
+ 134(g_tTexcdf4): 133(ptr) Variable UniformConstant
+ 135: TypeImage 29(int) Cube sampled format:Unknown
136: TypePointer UniformConstant 135
- 137(g_tTex3du4): 136(ptr) Variable UniformConstant
- 138: TypeImage 6(float) Cube sampled format:Unknown
+ 137(g_tTexcdi4): 136(ptr) Variable UniformConstant
+ 138: TypeImage 45(int) Cube sampled format:Unknown
139: TypePointer UniformConstant 138
- 140(g_tTexcdf4): 139(ptr) Variable UniformConstant
- 141: TypeImage 30(int) Cube sampled format:Unknown
+ 140(g_tTexcdu4): 139(ptr) Variable UniformConstant
+ 141: TypeImage 6(float) 1D array sampled format:Unknown
142: TypePointer UniformConstant 141
- 143(g_tTexcdi4): 142(ptr) Variable UniformConstant
- 144: TypeImage 47(int) Cube sampled format:Unknown
+143(g_tTex1df4a): 142(ptr) Variable UniformConstant
+ 144: TypeImage 29(int) 1D array sampled format:Unknown
145: TypePointer UniformConstant 144
- 146(g_tTexcdu4): 145(ptr) Variable UniformConstant
- 147: TypeImage 6(float) 1D array sampled format:Unknown
+146(g_tTex1di4a): 145(ptr) Variable UniformConstant
+ 147: TypeImage 45(int) 1D array sampled format:Unknown
148: TypePointer UniformConstant 147
-149(g_tTex1df4a): 148(ptr) Variable UniformConstant
- 150: TypeImage 30(int) 1D array sampled format:Unknown
+149(g_tTex1du4a): 148(ptr) Variable UniformConstant
+ 150: TypeImage 6(float) 2D array sampled format:Unknown
151: TypePointer UniformConstant 150
-152(g_tTex1di4a): 151(ptr) Variable UniformConstant
- 153: TypeImage 47(int) 1D array sampled format:Unknown
+152(g_tTex2df4a): 151(ptr) Variable UniformConstant
+ 153: TypeImage 29(int) 2D array sampled format:Unknown
154: TypePointer UniformConstant 153
-155(g_tTex1du4a): 154(ptr) Variable UniformConstant
- 156: TypeImage 6(float) 2D array sampled format:Unknown
+155(g_tTex2di4a): 154(ptr) Variable UniformConstant
+ 156: TypeImage 45(int) 2D array sampled format:Unknown
157: TypePointer UniformConstant 156
-158(g_tTex2df4a): 157(ptr) Variable UniformConstant
- 159: TypeImage 30(int) 2D array sampled format:Unknown
+158(g_tTex2du4a): 157(ptr) Variable UniformConstant
+ 159: TypeImage 6(float) Cube array sampled format:Unknown
160: TypePointer UniformConstant 159
-161(g_tTex2di4a): 160(ptr) Variable UniformConstant
- 162: TypeImage 47(int) 2D array sampled format:Unknown
+161(g_tTexcdf4a): 160(ptr) Variable UniformConstant
+ 162: TypeImage 29(int) Cube array sampled format:Unknown
163: TypePointer UniformConstant 162
-164(g_tTex2du4a): 163(ptr) Variable UniformConstant
- 165: TypeImage 6(float) Cube array sampled format:Unknown
+164(g_tTexcdi4a): 163(ptr) Variable UniformConstant
+ 165: TypeImage 45(int) Cube array sampled format:Unknown
166: TypePointer UniformConstant 165
-167(g_tTexcdf4a): 166(ptr) Variable UniformConstant
- 168: TypeImage 30(int) Cube array sampled format:Unknown
- 169: TypePointer UniformConstant 168
-170(g_tTexcdi4a): 169(ptr) Variable UniformConstant
- 171: TypeImage 47(int) Cube array sampled format:Unknown
- 172: TypePointer UniformConstant 171
-173(g_tTexcdu4a): 172(ptr) Variable UniformConstant
+167(g_tTexcdu4a): 166(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
-119(flattenTemp): 107(ptr) Variable Function
- 120:8(PS_OUTPUT) FunctionCall 10(@main()
- Store 119(flattenTemp) 120
- 123: 112(ptr) AccessChain 119(flattenTemp) 109
- 124: 7(fvec4) Load 123
- Store 122(Color) 124
- 127: 12(ptr) AccessChain 119(flattenTemp) 114
- 128: 6(float) Load 127
- Store 126(Depth) 128
+113(flattenTemp): 101(ptr) Variable Function
+ 114:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 113(flattenTemp) 114
+ 117: 106(ptr) AccessChain 113(flattenTemp) 103
+ 118: 7(fvec4) Load 117
+ Store 116(@entryPointOutput.Color) 118
+ 121: 12(ptr) AccessChain 113(flattenTemp) 108
+ 122: 6(float) Load 121
+ Store 120(@entryPointOutput.Depth) 122
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
13(r01): 12(ptr) Variable Function
- 34(r03): 12(ptr) Variable Function
- 46(r05): 12(ptr) Variable Function
- 59(r21): 12(ptr) Variable Function
- 79(r23): 12(ptr) Variable Function
- 93(r25): 12(ptr) Variable Function
- 108(psout): 107(ptr) Variable Function
+ 33(r03): 12(ptr) Variable Function
+ 44(r05): 12(ptr) Variable Function
+ 56(r21): 12(ptr) Variable Function
+ 75(r23): 12(ptr) Variable Function
+ 88(r25): 12(ptr) Variable Function
+ 102(psout): 101(ptr) Variable Function
17: 14 Load 16(g_tTex1df4)
21: 18 Load 20(g_sSamp)
- 24: 23 SampledImage 17 21
- 28: 27(fvec2) CompositeConstruct 25 26
- 32: 6(float) CompositeExtract 28 1
- 33: 6(float) ImageSampleDrefExplicitLod 24 28 32 Lod ConstOffset 29 31
- Store 13(r01) 33
- 38: 35 Load 37(g_tTex1di4)
- 39: 18 Load 20(g_sSamp)
- 42: 41 SampledImage 38 39
- 43: 27(fvec2) CompositeConstruct 25 26
- 44: 6(float) CompositeExtract 43 1
- 45: 6(float) ImageSampleDrefExplicitLod 42 43 44 Lod ConstOffset 29 31
- Store 34(r03) 45
- 51: 48 Load 50(g_tTex1du4)
- 52: 18 Load 20(g_sSamp)
- 55: 54 SampledImage 51 52
- 56: 27(fvec2) CompositeConstruct 25 26
- 57: 6(float) CompositeExtract 56 1
- 58: 6(float) ImageSampleDrefExplicitLod 55 56 57 Lod ConstOffset 29 31
- Store 46(r05) 58
- 63: 60 Load 62(g_tTex2df4)
- 64: 18 Load 20(g_sSamp)
- 67: 66 SampledImage 63 64
- 71: 6(float) CompositeExtract 69 0
- 72: 6(float) CompositeExtract 69 1
- 73: 70(fvec3) CompositeConstruct 71 72 26
- 77: 6(float) CompositeExtract 73 2
- 78: 6(float) ImageSampleDrefExplicitLod 67 73 77 Lod ConstOffset 29 76
- Store 59(r21) 78
- 83: 80 Load 82(g_tTex2di4)
- 84: 18 Load 20(g_sSamp)
- 87: 86 SampledImage 83 84
- 88: 6(float) CompositeExtract 69 0
- 89: 6(float) CompositeExtract 69 1
- 90: 70(fvec3) CompositeConstruct 88 89 26
- 91: 6(float) CompositeExtract 90 2
- 92: 6(float) ImageSampleDrefExplicitLod 87 90 91 Lod ConstOffset 29 76
- Store 79(r23) 92
- 97: 94 Load 96(g_tTex2du4)
- 98: 18 Load 20(g_sSamp)
- 101: 100 SampledImage 97 98
- 102: 6(float) CompositeExtract 69 0
- 103: 6(float) CompositeExtract 69 1
- 104: 70(fvec3) CompositeConstruct 102 103 26
- 105: 6(float) CompositeExtract 104 2
- 106: 6(float) ImageSampleDrefExplicitLod 101 104 105 Lod ConstOffset 29 76
- Store 93(r25) 106
- 113: 112(ptr) AccessChain 108(psout) 109
- Store 113 111
- 115: 12(ptr) AccessChain 108(psout) 114
- Store 115 110
- 116:8(PS_OUTPUT) Load 108(psout)
- ReturnValue 116
+ 23: 22 SampledImage 17 21
+ 27: 26(fvec2) CompositeConstruct 24 25
+ 31: 6(float) CompositeExtract 27 1
+ 32: 6(float) ImageSampleDrefExplicitLod 23 27 31 Lod ConstOffset 28 30
+ Store 13(r01) 32
+ 37: 34 Load 36(g_tTex1di4)
+ 38: 18 Load 20(g_sSamp)
+ 40: 39 SampledImage 37 38
+ 41: 26(fvec2) CompositeConstruct 24 25
+ 42: 6(float) CompositeExtract 41 1
+ 43: 6(float) ImageSampleDrefExplicitLod 40 41 42 Lod ConstOffset 28 30
+ Store 33(r03) 43
+ 49: 46 Load 48(g_tTex1du4)
+ 50: 18 Load 20(g_sSamp)
+ 52: 51 SampledImage 49 50
+ 53: 26(fvec2) CompositeConstruct 24 25
+ 54: 6(float) CompositeExtract 53 1
+ 55: 6(float) ImageSampleDrefExplicitLod 52 53 54 Lod ConstOffset 28 30
+ Store 44(r05) 55
+ 60: 57 Load 59(g_tTex2df4)
+ 61: 18 Load 20(g_sSamp)
+ 63: 62 SampledImage 60 61
+ 67: 6(float) CompositeExtract 65 0
+ 68: 6(float) CompositeExtract 65 1
+ 69: 66(fvec3) CompositeConstruct 67 68 25
+ 73: 6(float) CompositeExtract 69 2
+ 74: 6(float) ImageSampleDrefExplicitLod 63 69 73 Lod ConstOffset 28 72
+ Store 56(r21) 74
+ 79: 76 Load 78(g_tTex2di4)
+ 80: 18 Load 20(g_sSamp)
+ 82: 81 SampledImage 79 80
+ 83: 6(float) CompositeExtract 65 0
+ 84: 6(float) CompositeExtract 65 1
+ 85: 66(fvec3) CompositeConstruct 83 84 25
+ 86: 6(float) CompositeExtract 85 2
+ 87: 6(float) ImageSampleDrefExplicitLod 82 85 86 Lod ConstOffset 28 72
+ Store 75(r23) 87
+ 92: 89 Load 91(g_tTex2du4)
+ 93: 18 Load 20(g_sSamp)
+ 95: 94 SampledImage 92 93
+ 96: 6(float) CompositeExtract 65 0
+ 97: 6(float) CompositeExtract 65 1
+ 98: 66(fvec3) CompositeConstruct 96 97 25
+ 99: 6(float) CompositeExtract 98 2
+ 100: 6(float) ImageSampleDrefExplicitLod 95 98 99 Lod ConstOffset 28 72
+ Store 88(r25) 100
+ 107: 106(ptr) AccessChain 102(psout) 103
+ Store 107 105
+ 109: 12(ptr) AccessChain 102(psout) 108
+ Store 109 104
+ 110:8(PS_OUTPUT) Load 102(psout)
+ ReturnValue 110
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index 8a87e9b0d55..84b830c454b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplecmplevelzero.offsetarray.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -10,7 +10,7 @@ gl_FragCoord origin is upper left
0:42 'r11' ( temp float)
0:42 textureLodOffset ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42 'g_tTex1df4a' ( uniform texture1DArray)
+0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -27,7 +27,7 @@ gl_FragCoord origin is upper left
0:43 'r13' ( temp float)
0:43 textureLodOffset ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43 'g_tTex1di4a' ( uniform itexture1DArray)
+0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -44,7 +44,7 @@ gl_FragCoord origin is upper left
0:44 'r15' ( temp float)
0:44 textureLodOffset ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44 'g_tTex1du4a' ( uniform utexture1DArray)
+0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -61,7 +61,7 @@ gl_FragCoord origin is upper left
0:47 'r31' ( temp float)
0:47 textureLodOffset ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47 'g_tTex2df4a' ( uniform texture2DArray)
+0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -80,7 +80,7 @@ gl_FragCoord origin is upper left
0:48 'r33' ( temp float)
0:48 textureLodOffset ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48 'g_tTex2di4a' ( uniform itexture2DArray)
+0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -99,7 +99,7 @@ gl_FragCoord origin is upper left
0:49 'r35' ( temp float)
0:49 textureLodOffset ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49 'g_tTex2du4a' ( uniform utexture2DArray)
+0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -140,13 +140,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -165,23 +165,23 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'g_tTex1df4a' ( uniform texture1DArray)
-0:? 'g_tTex1di4a' ( uniform itexture1DArray)
-0:? 'g_tTex1du4a' ( uniform utexture1DArray)
-0:? 'g_tTex2df4a' ( uniform texture2DArray)
-0:? 'g_tTex2di4a' ( uniform itexture2DArray)
-0:? 'g_tTex2du4a' ( uniform utexture2DArray)
+0:? 'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:? 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:? 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:? 'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:? 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:? 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -192,7 +192,7 @@ gl_FragCoord origin is upper left
0:42 'r11' ( temp float)
0:42 textureLodOffset ( temp float)
0:42 Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42 'g_tTex1df4a' ( uniform texture1DArray)
+0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow)
0:42 'g_sSamp' (layout( binding=0) uniform sampler)
0:42 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -209,7 +209,7 @@ gl_FragCoord origin is upper left
0:43 'r13' ( temp float)
0:43 textureLodOffset ( temp float)
0:43 Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43 'g_tTex1di4a' ( uniform itexture1DArray)
+0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
0:43 'g_sSamp' (layout( binding=0) uniform sampler)
0:43 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -226,7 +226,7 @@ gl_FragCoord origin is upper left
0:44 'r15' ( temp float)
0:44 textureLodOffset ( temp float)
0:44 Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44 'g_tTex1du4a' ( uniform utexture1DArray)
+0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
0:44 'g_sSamp' (layout( binding=0) uniform sampler)
0:44 Construct vec3 ( temp 3-component vector of float)
0:? Constant:
@@ -243,7 +243,7 @@ gl_FragCoord origin is upper left
0:47 'r31' ( temp float)
0:47 textureLodOffset ( temp float)
0:47 Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47 'g_tTex2df4a' ( uniform texture2DArray)
+0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow)
0:47 'g_sSamp' (layout( binding=0) uniform sampler)
0:47 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -262,7 +262,7 @@ gl_FragCoord origin is upper left
0:48 'r33' ( temp float)
0:48 textureLodOffset ( temp float)
0:48 Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48 'g_tTex2di4a' ( uniform itexture2DArray)
+0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
0:48 'g_sSamp' (layout( binding=0) uniform sampler)
0:48 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -281,7 +281,7 @@ gl_FragCoord origin is upper left
0:49 'r35' ( temp float)
0:49 textureLodOffset ( temp float)
0:49 Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49 'g_tTex2du4a' ( uniform utexture2DArray)
+0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:49 'g_sSamp' (layout( binding=0) uniform sampler)
0:49 Construct vec4 ( temp 4-component vector of float)
0:? Constant:
@@ -322,13 +322,13 @@ gl_FragCoord origin is upper left
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:38 Color: direct index for structure ( temp 4-component vector of float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
0:38 0 (const int)
0:38 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:38 Depth: direct index for structure ( temp float)
0:38 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:38 Constant:
@@ -347,29 +347,30 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'g_tTex1df4a' ( uniform texture1DArray)
-0:? 'g_tTex1di4a' ( uniform itexture1DArray)
-0:? 'g_tTex1du4a' ( uniform utexture1DArray)
-0:? 'g_tTex2df4a' ( uniform texture2DArray)
-0:? 'g_tTex2di4a' ( uniform itexture2DArray)
-0:? 'g_tTex2du4a' ( uniform utexture2DArray)
+0:? 'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:? 'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:? 'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:? 'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:? 'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:? 'g_tTex2du4a' ( uniform utexture2DArrayShadow)
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 185
+// Generated by (magic number): 80002
+// Id's are bound by 179
Capability Shader
Capability Sampled1D
Capability SampledCubeArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 133 137
+ EntryPoint Fragment 4 "main" 127 131
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -378,61 +379,61 @@ gl_FragCoord origin is upper left
Name 13 "r11"
Name 16 "g_tTex1df4a"
Name 20 "g_sSamp"
- Name 39 "r13"
- Name 42 "g_tTex1di4a"
- Name 53 "r15"
- Name 57 "g_tTex1du4a"
- Name 68 "r31"
- Name 71 "g_tTex2df4a"
- Name 88 "r33"
- Name 91 "g_tTex2di4a"
- Name 103 "r35"
- Name 106 "g_tTex2du4a"
- Name 119 "psout"
- Name 130 "flattenTemp"
- Name 133 "Color"
- Name 137 "Depth"
- Name 142 "g_tTex1df4"
- Name 145 "g_tTex1di4"
- Name 148 "g_tTex1du4"
- Name 151 "g_tTex2df4"
- Name 154 "g_tTex2di4"
- Name 157 "g_tTex2du4"
- Name 160 "g_tTex3df4"
- Name 163 "g_tTex3di4"
- Name 166 "g_tTex3du4"
- Name 169 "g_tTexcdf4"
- Name 172 "g_tTexcdi4"
- Name 175 "g_tTexcdu4"
- Name 178 "g_tTexcdf4a"
- Name 181 "g_tTexcdi4a"
- Name 184 "g_tTexcdu4a"
+ Name 38 "r13"
+ Name 41 "g_tTex1di4a"
+ Name 51 "r15"
+ Name 55 "g_tTex1du4a"
+ Name 65 "r31"
+ Name 68 "g_tTex2df4a"
+ Name 84 "r33"
+ Name 87 "g_tTex2di4a"
+ Name 98 "r35"
+ Name 101 "g_tTex2du4a"
+ Name 113 "psout"
+ Name 124 "flattenTemp"
+ Name 127 "@entryPointOutput.Color"
+ Name 131 "@entryPointOutput.Depth"
+ Name 136 "g_tTex1df4"
+ Name 139 "g_tTex1di4"
+ Name 142 "g_tTex1du4"
+ Name 145 "g_tTex2df4"
+ Name 148 "g_tTex2di4"
+ Name 151 "g_tTex2du4"
+ Name 154 "g_tTex3df4"
+ Name 157 "g_tTex3di4"
+ Name 160 "g_tTex3du4"
+ Name 163 "g_tTexcdf4"
+ Name 166 "g_tTexcdi4"
+ Name 169 "g_tTexcdu4"
+ Name 172 "g_tTexcdf4a"
+ Name 175 "g_tTexcdi4a"
+ Name 178 "g_tTexcdu4a"
Decorate 16(g_tTex1df4a) DescriptorSet 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
- Decorate 42(g_tTex1di4a) DescriptorSet 0
- Decorate 57(g_tTex1du4a) DescriptorSet 0
- Decorate 71(g_tTex2df4a) DescriptorSet 0
- Decorate 91(g_tTex2di4a) DescriptorSet 0
- Decorate 106(g_tTex2du4a) DescriptorSet 0
- Decorate 133(Color) Location 0
- Decorate 137(Depth) BuiltIn FragDepth
- Decorate 142(g_tTex1df4) DescriptorSet 0
- Decorate 142(g_tTex1df4) Binding 0
- Decorate 145(g_tTex1di4) DescriptorSet 0
- Decorate 148(g_tTex1du4) DescriptorSet 0
- Decorate 151(g_tTex2df4) DescriptorSet 0
- Decorate 154(g_tTex2di4) DescriptorSet 0
- Decorate 157(g_tTex2du4) DescriptorSet 0
- Decorate 160(g_tTex3df4) DescriptorSet 0
- Decorate 163(g_tTex3di4) DescriptorSet 0
- Decorate 166(g_tTex3du4) DescriptorSet 0
- Decorate 169(g_tTexcdf4) DescriptorSet 0
- Decorate 172(g_tTexcdi4) DescriptorSet 0
- Decorate 175(g_tTexcdu4) DescriptorSet 0
- Decorate 178(g_tTexcdf4a) DescriptorSet 0
- Decorate 181(g_tTexcdi4a) DescriptorSet 0
- Decorate 184(g_tTexcdu4a) DescriptorSet 0
+ Decorate 41(g_tTex1di4a) DescriptorSet 0
+ Decorate 55(g_tTex1du4a) DescriptorSet 0
+ Decorate 68(g_tTex2df4a) DescriptorSet 0
+ Decorate 87(g_tTex2di4a) DescriptorSet 0
+ Decorate 101(g_tTex2du4a) DescriptorSet 0
+ Decorate 127(@entryPointOutput.Color) Location 0
+ Decorate 131(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 136(g_tTex1df4) DescriptorSet 0
+ Decorate 136(g_tTex1df4) Binding 0
+ Decorate 139(g_tTex1di4) DescriptorSet 0
+ Decorate 142(g_tTex1du4) DescriptorSet 0
+ Decorate 145(g_tTex2df4) DescriptorSet 0
+ Decorate 148(g_tTex2di4) DescriptorSet 0
+ Decorate 151(g_tTex2du4) DescriptorSet 0
+ Decorate 154(g_tTex3df4) DescriptorSet 0
+ Decorate 157(g_tTex3di4) DescriptorSet 0
+ Decorate 160(g_tTex3du4) DescriptorSet 0
+ Decorate 163(g_tTexcdf4) DescriptorSet 0
+ Decorate 166(g_tTexcdi4) DescriptorSet 0
+ Decorate 169(g_tTexcdu4) DescriptorSet 0
+ Decorate 172(g_tTexcdf4a) DescriptorSet 0
+ Decorate 175(g_tTexcdi4a) DescriptorSet 0
+ Decorate 178(g_tTexcdu4a) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -440,192 +441,186 @@ gl_FragCoord origin is upper left
8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
9: TypeFunction 8(PS_OUTPUT)
12: TypePointer Function 6(float)
- 14: TypeImage 6(float) 1D array sampled format:Unknown
+ 14: TypeImage 6(float) 1D depth array sampled format:Unknown
15: TypePointer UniformConstant 14
16(g_tTex1df4a): 15(ptr) Variable UniformConstant
18: TypeSampler
19: TypePointer UniformConstant 18
20(g_sSamp): 19(ptr) Variable UniformConstant
- 22: TypeImage 6(float) 1D depth array sampled format:Unknown
- 23: TypeSampledImage 22
- 25: TypeVector 6(float) 2
- 26: 6(float) Constant 1036831949
- 27: 6(float) Constant 1045220557
- 28: 25(fvec2) ConstantComposite 26 27
- 29: 6(float) Constant 1061158912
- 30: TypeVector 6(float) 3
- 34: 6(float) Constant 0
- 35: TypeInt 32 1
- 36: 35(int) Constant 2
- 40: TypeImage 35(int) 1D array sampled format:Unknown
- 41: TypePointer UniformConstant 40
- 42(g_tTex1di4a): 41(ptr) Variable UniformConstant
- 45: TypeImage 35(int) 1D depth array sampled format:Unknown
- 46: TypeSampledImage 45
- 54: TypeInt 32 0
- 55: TypeImage 54(int) 1D array sampled format:Unknown
- 56: TypePointer UniformConstant 55
- 57(g_tTex1du4a): 56(ptr) Variable UniformConstant
- 60: TypeImage 54(int) 1D depth array sampled format:Unknown
- 61: TypeSampledImage 60
- 69: TypeImage 6(float) 2D array sampled format:Unknown
- 70: TypePointer UniformConstant 69
- 71(g_tTex2df4a): 70(ptr) Variable UniformConstant
- 74: TypeImage 6(float) 2D depth array sampled format:Unknown
- 75: TypeSampledImage 74
- 77: 6(float) Constant 1050253722
- 78: 30(fvec3) ConstantComposite 26 27 77
- 83: TypeVector 35(int) 2
- 84: 35(int) Constant 3
- 85: 83(ivec2) ConstantComposite 36 84
- 89: TypeImage 35(int) 2D array sampled format:Unknown
- 90: TypePointer UniformConstant 89
- 91(g_tTex2di4a): 90(ptr) Variable UniformConstant
- 94: TypeImage 35(int) 2D depth array sampled format:Unknown
- 95: TypeSampledImage 94
- 104: TypeImage 54(int) 2D array sampled format:Unknown
- 105: TypePointer UniformConstant 104
-106(g_tTex2du4a): 105(ptr) Variable UniformConstant
- 109: TypeImage 54(int) 2D depth array sampled format:Unknown
- 110: TypeSampledImage 109
- 118: TypePointer Function 8(PS_OUTPUT)
- 120: 35(int) Constant 0
- 121: 6(float) Constant 1065353216
- 122: 7(fvec4) ConstantComposite 121 121 121 121
- 123: TypePointer Function 7(fvec4)
- 125: 35(int) Constant 1
- 132: TypePointer Output 7(fvec4)
- 133(Color): 132(ptr) Variable Output
- 136: TypePointer Output 6(float)
- 137(Depth): 136(ptr) Variable Output
- 140: TypeImage 6(float) 1D sampled format:Unknown
+ 22: TypeSampledImage 14
+ 24: TypeVector 6(float) 2
+ 25: 6(float) Constant 1036831949
+ 26: 6(float) Constant 1045220557
+ 27: 24(fvec2) ConstantComposite 25 26
+ 28: 6(float) Constant 1061158912
+ 29: TypeVector 6(float) 3
+ 33: 6(float) Constant 0
+ 34: TypeInt 32 1
+ 35: 34(int) Constant 2
+ 39: TypeImage 34(int) 1D depth array sampled format:Unknown
+ 40: TypePointer UniformConstant 39
+ 41(g_tTex1di4a): 40(ptr) Variable UniformConstant
+ 44: TypeSampledImage 39
+ 52: TypeInt 32 0
+ 53: TypeImage 52(int) 1D depth array sampled format:Unknown
+ 54: TypePointer UniformConstant 53
+ 55(g_tTex1du4a): 54(ptr) Variable UniformConstant
+ 58: TypeSampledImage 53
+ 66: TypeImage 6(float) 2D depth array sampled format:Unknown
+ 67: TypePointer UniformConstant 66
+ 68(g_tTex2df4a): 67(ptr) Variable UniformConstant
+ 71: TypeSampledImage 66
+ 73: 6(float) Constant 1050253722
+ 74: 29(fvec3) ConstantComposite 25 26 73
+ 79: TypeVector 34(int) 2
+ 80: 34(int) Constant 3
+ 81: 79(ivec2) ConstantComposite 35 80
+ 85: TypeImage 34(int) 2D depth array sampled format:Unknown
+ 86: TypePointer UniformConstant 85
+ 87(g_tTex2di4a): 86(ptr) Variable UniformConstant
+ 90: TypeSampledImage 85
+ 99: TypeImage 52(int) 2D depth array sampled format:Unknown
+ 100: TypePointer UniformConstant 99
+101(g_tTex2du4a): 100(ptr) Variable UniformConstant
+ 104: TypeSampledImage 99
+ 112: TypePointer Function 8(PS_OUTPUT)
+ 114: 34(int) Constant 0
+ 115: 6(float) Constant 1065353216
+ 116: 7(fvec4) ConstantComposite 115 115 115 115
+ 117: TypePointer Function 7(fvec4)
+ 119: 34(int) Constant 1
+ 126: TypePointer Output 7(fvec4)
+127(@entryPointOutput.Color): 126(ptr) Variable Output
+ 130: TypePointer Output 6(float)
+131(@entryPointOutput.Depth): 130(ptr) Variable Output
+ 134: TypeImage 6(float) 1D sampled format:Unknown
+ 135: TypePointer UniformConstant 134
+ 136(g_tTex1df4): 135(ptr) Variable UniformConstant
+ 137: TypeImage 34(int) 1D sampled format:Unknown
+ 138: TypePointer UniformConstant 137
+ 139(g_tTex1di4): 138(ptr) Variable UniformConstant
+ 140: TypeImage 52(int) 1D sampled format:Unknown
141: TypePointer UniformConstant 140
- 142(g_tTex1df4): 141(ptr) Variable UniformConstant
- 143: TypeImage 35(int) 1D sampled format:Unknown
+ 142(g_tTex1du4): 141(ptr) Variable UniformConstant
+ 143: TypeImage 6(float) 2D sampled format:Unknown
144: TypePointer UniformConstant 143
- 145(g_tTex1di4): 144(ptr) Variable UniformConstant
- 146: TypeImage 54(int) 1D sampled format:Unknown
+ 145(g_tTex2df4): 144(ptr) Variable UniformConstant
+ 146: TypeImage 34(int) 2D sampled format:Unknown
147: TypePointer UniformConstant 146
- 148(g_tTex1du4): 147(ptr) Variable UniformConstant
- 149: TypeImage 6(float) 2D sampled format:Unknown
+ 148(g_tTex2di4): 147(ptr) Variable UniformConstant
+ 149: TypeImage 52(int) 2D sampled format:Unknown
150: TypePointer UniformConstant 149
- 151(g_tTex2df4): 150(ptr) Variable UniformConstant
- 152: TypeImage 35(int) 2D sampled format:Unknown
+ 151(g_tTex2du4): 150(ptr) Variable UniformConstant
+ 152: TypeImage 6(float) 3D sampled format:Unknown
153: TypePointer UniformConstant 152
- 154(g_tTex2di4): 153(ptr) Variable UniformConstant
- 155: TypeImage 54(int) 2D sampled format:Unknown
+ 154(g_tTex3df4): 153(ptr) Variable UniformConstant
+ 155: TypeImage 34(int) 3D sampled format:Unknown
156: TypePointer UniformConstant 155
- 157(g_tTex2du4): 156(ptr) Variable UniformConstant
- 158: TypeImage 6(float) 3D sampled format:Unknown
+ 157(g_tTex3di4): 156(ptr) Variable UniformConstant
+ 158: TypeImage 52(int) 3D sampled format:Unknown
159: TypePointer UniformConstant 158
- 160(g_tTex3df4): 159(ptr) Variable UniformConstant
- 161: TypeImage 35(int) 3D sampled format:Unknown
+ 160(g_tTex3du4): 159(ptr) Variable UniformConstant
+ 161: TypeImage 6(float) Cube sampled format:Unknown
162: TypePointer UniformConstant 161
- 163(g_tTex3di4): 162(ptr) Variable UniformConstant
- 164: TypeImage 54(int) 3D sampled format:Unknown
+ 163(g_tTexcdf4): 162(ptr) Variable UniformConstant
+ 164: TypeImage 34(int) Cube sampled format:Unknown
165: TypePointer UniformConstant 164
- 166(g_tTex3du4): 165(ptr) Variable UniformConstant
- 167: TypeImage 6(float) Cube sampled format:Unknown
+ 166(g_tTexcdi4): 165(ptr) Variable UniformConstant
+ 167: TypeImage 52(int) Cube sampled format:Unknown
168: TypePointer UniformConstant 167
- 169(g_tTexcdf4): 168(ptr) Variable UniformConstant
- 170: TypeImage 35(int) Cube sampled format:Unknown
+ 169(g_tTexcdu4): 168(ptr) Variable UniformConstant
+ 170: TypeImage 6(float) Cube array sampled format:Unknown
171: TypePointer UniformConstant 170
- 172(g_tTexcdi4): 171(ptr) Variable UniformConstant
- 173: TypeImage 54(int) Cube sampled format:Unknown
+172(g_tTexcdf4a): 171(ptr) Variable UniformConstant
+ 173: TypeImage 34(int) Cube array sampled format:Unknown
174: TypePointer UniformConstant 173
- 175(g_tTexcdu4): 174(ptr) Variable UniformConstant
- 176: TypeImage 6(float) Cube array sampled format:Unknown
+175(g_tTexcdi4a): 174(ptr) Variable UniformConstant
+ 176: TypeImage 52(int) Cube array sampled format:Unknown
177: TypePointer UniformConstant 176
-178(g_tTexcdf4a): 177(ptr) Variable UniformConstant
- 179: TypeImage 35(int) Cube array sampled format:Unknown
- 180: TypePointer UniformConstant 179
-181(g_tTexcdi4a): 180(ptr) Variable UniformConstant
- 182: TypeImage 54(int) Cube array sampled format:Unknown
- 183: TypePointer UniformConstant 182
-184(g_tTexcdu4a): 183(ptr) Variable UniformConstant
+178(g_tTexcdu4a): 177(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
-130(flattenTemp): 118(ptr) Variable Function
- 131:8(PS_OUTPUT) FunctionCall 10(@main()
- Store 130(flattenTemp) 131
- 134: 123(ptr) AccessChain 130(flattenTemp) 120
- 135: 7(fvec4) Load 134
- Store 133(Color) 135
- 138: 12(ptr) AccessChain 130(flattenTemp) 125
- 139: 6(float) Load 138
- Store 137(Depth) 139
+124(flattenTemp): 112(ptr) Variable Function
+ 125:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 124(flattenTemp) 125
+ 128: 117(ptr) AccessChain 124(flattenTemp) 114
+ 129: 7(fvec4) Load 128
+ Store 127(@entryPointOutput.Color) 129
+ 132: 12(ptr) AccessChain 124(flattenTemp) 119
+ 133: 6(float) Load 132
+ Store 131(@entryPointOutput.Depth) 133
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
13(r11): 12(ptr) Variable Function
- 39(r13): 12(ptr) Variable Function
- 53(r15): 12(ptr) Variable Function
- 68(r31): 12(ptr) Variable Function
- 88(r33): 12(ptr) Variable Function
- 103(r35): 12(ptr) Variable Function
- 119(psout): 118(ptr) Variable Function
+ 38(r13): 12(ptr) Variable Function
+ 51(r15): 12(ptr) Variable Function
+ 65(r31): 12(ptr) Variable Function
+ 84(r33): 12(ptr) Variable Function
+ 98(r35): 12(ptr) Variable Function
+ 113(psout): 112(ptr) Variable Function
17: 14 Load 16(g_tTex1df4a)
21: 18 Load 20(g_sSamp)
- 24: 23 SampledImage 17 21
- 31: 6(float) CompositeExtract 28 0
- 32: 6(float) CompositeExtract 28 1
- 33: 30(fvec3) CompositeConstruct 31 32 29
- 37: 6(float) CompositeExtract 33 2
- 38: 6(float) ImageSampleDrefExplicitLod 24 33 37 Lod ConstOffset 34 36
- Store 13(r11) 38
- 43: 40 Load 42(g_tTex1di4a)
- 44: 18 Load 20(g_sSamp)
- 47: 46 SampledImage 43 44
- 48: 6(float) CompositeExtract 28 0
- 49: 6(float) CompositeExtract 28 1
- 50: 30(fvec3) CompositeConstruct 48 49 29
- 51: 6(float) CompositeExtract 50 2
- 52: 6(float) ImageSampleDrefExplicitLod 47 50 51 Lod ConstOffset 34 36
- Store 39(r13) 52
- 58: 55 Load 57(g_tTex1du4a)
- 59: 18 Load 20(g_sSamp)
- 62: 61 SampledImage 58 59
- 63: 6(float) CompositeExtract 28 0
- 64: 6(float) CompositeExtract 28 1
- 65: 30(fvec3) CompositeConstruct 63 64 29
- 66: 6(float) CompositeExtract 65 2
- 67: 6(float) ImageSampleDrefExplicitLod 62 65 66 Lod ConstOffset 34 36
- Store 53(r15) 67
- 72: 69 Load 71(g_tTex2df4a)
- 73: 18 Load 20(g_sSamp)
- 76: 75 SampledImage 72 73
- 79: 6(float) CompositeExtract 78 0
- 80: 6(float) CompositeExtract 78 1
- 81: 6(float) CompositeExtract 78 2
- 82: 7(fvec4) CompositeConstruct 79 80 81 29
- 86: 6(float) CompositeExtract 82 3
- 87: 6(float) ImageSampleDrefExplicitLod 76 82 86 Lod ConstOffset 34 85
- Store 68(r31) 87
- 92: 89 Load 91(g_tTex2di4a)
- 93: 18 Load 20(g_sSamp)
- 96: 95 SampledImage 92 93
- 97: 6(float) CompositeExtract 78 0
- 98: 6(float) CompositeExtract 78 1
- 99: 6(float) CompositeExtract 78 2
- 100: 7(fvec4) CompositeConstruct 97 98 99 29
- 101: 6(float) CompositeExtract 100 3
- 102: 6(float) ImageSampleDrefExplicitLod 96 100 101 Lod ConstOffset 34 85
- Store 88(r33) 102
- 107: 104 Load 106(g_tTex2du4a)
- 108: 18 Load 20(g_sSamp)
- 111: 110 SampledImage 107 108
- 112: 6(float) CompositeExtract 78 0
- 113: 6(float) CompositeExtract 78 1
- 114: 6(float) CompositeExtract 78 2
- 115: 7(fvec4) CompositeConstruct 112 113 114 29
- 116: 6(float) CompositeExtract 115 3
- 117: 6(float) ImageSampleDrefExplicitLod 111 115 116 Lod ConstOffset 34 85
- Store 103(r35) 117
- 124: 123(ptr) AccessChain 119(psout) 120
- Store 124 122
- 126: 12(ptr) AccessChain 119(psout) 125
- Store 126 121
- 127:8(PS_OUTPUT) Load 119(psout)
- ReturnValue 127
+ 23: 22 SampledImage 17 21
+ 30: 6(float) CompositeExtract 27 0
+ 31: 6(float) CompositeExtract 27 1
+ 32: 29(fvec3) CompositeConstruct 30 31 28
+ 36: 6(float) CompositeExtract 32 2
+ 37: 6(float) ImageSampleDrefExplicitLod 23 32 36 Lod ConstOffset 33 35
+ Store 13(r11) 37
+ 42: 39 Load 41(g_tTex1di4a)
+ 43: 18 Load 20(g_sSamp)
+ 45: 44 SampledImage 42 43
+ 46: 6(float) CompositeExtract 27 0
+ 47: 6(float) CompositeExtract 27 1
+ 48: 29(fvec3) CompositeConstruct 46 47 28
+ 49: 6(float) CompositeExtract 48 2
+ 50: 6(float) ImageSampleDrefExplicitLod 45 48 49 Lod ConstOffset 33 35
+ Store 38(r13) 50
+ 56: 53 Load 55(g_tTex1du4a)
+ 57: 18 Load 20(g_sSamp)
+ 59: 58 SampledImage 56 57
+ 60: 6(float) CompositeExtract 27 0
+ 61: 6(float) CompositeExtract 27 1
+ 62: 29(fvec3) CompositeConstruct 60 61 28
+ 63: 6(float) CompositeExtract 62 2
+ 64: 6(float) ImageSampleDrefExplicitLod 59 62 63 Lod ConstOffset 33 35
+ Store 51(r15) 64
+ 69: 66 Load 68(g_tTex2df4a)
+ 70: 18 Load 20(g_sSamp)
+ 72: 71 SampledImage 69 70
+ 75: 6(float) CompositeExtract 74 0
+ 76: 6(float) CompositeExtract 74 1
+ 77: 6(float) CompositeExtract 74 2
+ 78: 7(fvec4) CompositeConstruct 75 76 77 28
+ 82: 6(float) CompositeExtract 78 3
+ 83: 6(float) ImageSampleDrefExplicitLod 72 78 82 Lod ConstOffset 33 81
+ Store 65(r31) 83
+ 88: 85 Load 87(g_tTex2di4a)
+ 89: 18 Load 20(g_sSamp)
+ 91: 90 SampledImage 88 89
+ 92: 6(float) CompositeExtract 74 0
+ 93: 6(float) CompositeExtract 74 1
+ 94: 6(float) CompositeExtract 74 2
+ 95: 7(fvec4) CompositeConstruct 92 93 94 28
+ 96: 6(float) CompositeExtract 95 3
+ 97: 6(float) ImageSampleDrefExplicitLod 91 95 96 Lod ConstOffset 33 81
+ Store 84(r33) 97
+ 102: 99 Load 101(g_tTex2du4a)
+ 103: 18 Load 20(g_sSamp)
+ 105: 104 SampledImage 102 103
+ 106: 6(float) CompositeExtract 74 0
+ 107: 6(float) CompositeExtract 74 1
+ 108: 6(float) CompositeExtract 74 2
+ 109: 7(fvec4) CompositeConstruct 106 107 108 28
+ 110: 6(float) CompositeExtract 109 3
+ 111: 6(float) ImageSampleDrefExplicitLod 105 109 110 Lod ConstOffset 33 81
+ Store 98(r35) 111
+ 118: 117(ptr) AccessChain 113(psout) 114
+ Store 118 116
+ 120: 12(ptr) AccessChain 113(psout) 119
+ Store 120 115
+ 121:8(PS_OUTPUT) Load 113(psout)
+ ReturnValue 121
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index 5a5159d36c9..f9fabcca254 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplegrad.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -185,13 +185,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -208,14 +208,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCubeArray)
0:? 'g_tTexcdi4' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -401,13 +401,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -424,11 +424,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCubeArray)
0:? 'g_tTexcdi4' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 140
Capability Shader
@@ -438,6 +438,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 132 136
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -464,8 +465,8 @@ gl_FragCoord origin is upper left
Name 111 "g_tTexcdu4"
Name 118 "psout"
Name 129 "flattenTemp"
- Name 132 "Color"
- Name 136 "Depth"
+ Name 132 "@entryPointOutput.Color"
+ Name 136 "@entryPointOutput.Depth"
Name 139 "g_tTex1df4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
@@ -479,8 +480,8 @@ gl_FragCoord origin is upper left
Decorate 89(g_tTexcdf4) DescriptorSet 0
Decorate 102(g_tTexcdi4) DescriptorSet 0
Decorate 111(g_tTexcdu4) DescriptorSet 0
- Decorate 132(Color) Location 0
- Decorate 136(Depth) BuiltIn FragDepth
+ Decorate 132(@entryPointOutput.Color) Location 0
+ Decorate 136(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 139(g_tTex1df4a) DescriptorSet 0
Decorate 139(g_tTex1df4a) Binding 1
2: TypeVoid
@@ -556,9 +557,9 @@ gl_FragCoord origin is upper left
123: 31(int) Constant 1
124: TypePointer Function 6(float)
131: TypePointer Output 7(fvec4)
- 132(Color): 131(ptr) Variable Output
+132(@entryPointOutput.Color): 131(ptr) Variable Output
135: TypePointer Output 6(float)
- 136(Depth): 135(ptr) Variable Output
+136(@entryPointOutput.Depth): 135(ptr) Variable Output
139(g_tTex1df4a): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -567,10 +568,10 @@ gl_FragCoord origin is upper left
Store 129(flattenTemp) 130
133: 12(ptr) AccessChain 129(flattenTemp) 119
134: 7(fvec4) Load 133
- Store 132(Color) 134
+ Store 132(@entryPointOutput.Color) 134
137: 124(ptr) AccessChain 129(flattenTemp) 123
138: 6(float) Load 137
- Store 136(Depth) 138
+ Store 136(@entryPointOutput.Depth) 138
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index dc61751cce1..cb40bcea307 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplegrad.basic.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -233,13 +233,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -259,14 +259,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -500,13 +500,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -526,11 +526,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 175
Capability Shader
@@ -539,6 +539,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 167 171
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -571,8 +572,8 @@ gl_FragCoord origin is upper left
Name 146 "g_tTexcdu4"
Name 153 "psout"
Name 164 "flattenTemp"
- Name 167 "Color"
- Name 171 "Depth"
+ Name 167 "@entryPointOutput.Color"
+ Name 171 "@entryPointOutput.Depth"
Name 174 "g_tTex1df4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
@@ -589,8 +590,8 @@ gl_FragCoord origin is upper left
Decorate 128(g_tTexcdf4) DescriptorSet 0
Decorate 137(g_tTexcdi4) DescriptorSet 0
Decorate 146(g_tTexcdu4) DescriptorSet 0
- Decorate 167(Color) Location 0
- Decorate 171(Depth) BuiltIn FragDepth
+ Decorate 167(@entryPointOutput.Color) Location 0
+ Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 174(g_tTex1df4a) DescriptorSet 0
Decorate 174(g_tTex1df4a) Binding 1
2: TypeVoid
@@ -686,9 +687,9 @@ gl_FragCoord origin is upper left
158: 28(int) Constant 1
159: TypePointer Function 6(float)
166: TypePointer Output 7(fvec4)
- 167(Color): 166(ptr) Variable Output
+167(@entryPointOutput.Color): 166(ptr) Variable Output
170: TypePointer Output 6(float)
- 171(Depth): 170(ptr) Variable Output
+171(@entryPointOutput.Depth): 170(ptr) Variable Output
174(g_tTex1df4a): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -697,10 +698,10 @@ gl_FragCoord origin is upper left
Store 164(flattenTemp) 165
168: 12(ptr) AccessChain 164(flattenTemp) 154
169: 7(fvec4) Load 168
- Store 167(Color) 169
+ Store 167(@entryPointOutput.Color) 169
172: 159(ptr) AccessChain 164(flattenTemp) 158
173: 6(float) Load 172
- Store 171(Depth) 173
+ Store 171(@entryPointOutput.Depth) 173
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index afce97f6eb6..e5605a1a09e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -1,5 +1,5 @@
hlsl.samplegrad.basic.dx10.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:27 Function Parameters:
@@ -222,7 +222,7 @@ Shader version: 450
0:? Sequence
0:27 Sequence
0:27 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:27 Pos: direct index for structure ( temp 4-component vector of float)
0:27 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:27 Constant:
@@ -242,13 +242,13 @@ Shader version: 450
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:27 Function Parameters:
@@ -471,7 +471,7 @@ Shader version: 450
0:? Sequence
0:27 Sequence
0:27 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:27 Pos: direct index for structure ( temp 4-component vector of float)
0:27 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:27 Constant:
@@ -491,17 +491,18 @@ Shader version: 450
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 169
+// Generated by (magic number): 80002
+// Id's are bound by 166
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 162 168
+ EntryPoint Vertex 4 "main" 162
+ Source HLSL 500
Name 4 "main"
Name 8 "VS_OUTPUT"
MemberName 8(VS_OUTPUT) 0 "Pos"
@@ -532,10 +533,8 @@ Shader version: 450
Name 143 "txval42"
Name 146 "g_tTexcdu4"
Name 153 "vsout"
- Name 162 "@entryPointOutput_Pos"
+ Name 162 "@entryPointOutput.Pos"
Name 165 "g_tTex1df4a"
- Name 166 "VS_OUTPUT"
- Name 168 "@entryPointOutput"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
@@ -551,10 +550,9 @@ Shader version: 450
Decorate 128(g_tTexcdf4) DescriptorSet 0
Decorate 137(g_tTexcdi4) DescriptorSet 0
Decorate 146(g_tTexcdu4) DescriptorSet 0
- Decorate 162(@entryPointOutput_Pos) BuiltIn Position
+ Decorate 162(@entryPointOutput.Pos) BuiltIn Position
Decorate 165(g_tTex1df4a) DescriptorSet 0
Decorate 165(g_tTex1df4a) Binding 1
- Decorate 168(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -646,16 +644,13 @@ Shader version: 450
155: 6(float) Constant 0
156: 7(fvec4) ConstantComposite 155 155 155 155
161: TypePointer Output 7(fvec4)
-162(@entryPointOutput_Pos): 161(ptr) Variable Output
+162(@entryPointOutput.Pos): 161(ptr) Variable Output
165(g_tTex1df4a): 15(ptr) Variable UniformConstant
- 166(VS_OUTPUT): TypeStruct
- 167: TypePointer Output 166(VS_OUTPUT)
-168(@entryPointOutput): 167(ptr) Variable Output
4(main): 2 Function None 3
5: Label
163:8(VS_OUTPUT) FunctionCall 10(@main()
164: 7(fvec4) CompositeExtract 163 0
- Store 162(@entryPointOutput_Pos) 164
+ Store 162(@entryPointOutput.Pos) 164
Return
FunctionEnd
10(@main():8(VS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index 9da0f17fb5d..2cc4742f956 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplegrad.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -203,13 +203,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -229,14 +229,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -440,13 +440,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -466,11 +466,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 166
Capability Shader
@@ -479,6 +479,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 149 153
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -505,8 +506,8 @@ gl_FragCoord origin is upper left
Name 125 "g_tTex3du4"
Name 137 "psout"
Name 146 "flattenTemp"
- Name 149 "Color"
- Name 153 "Depth"
+ Name 149 "@entryPointOutput.Color"
+ Name 153 "@entryPointOutput.Depth"
Name 156 "g_tTex1df4a"
Name 159 "g_tTexcdf4"
Name 162 "g_tTexcdi4"
@@ -523,8 +524,8 @@ gl_FragCoord origin is upper left
Decorate 99(g_tTex3df4) DescriptorSet 0
Decorate 114(g_tTex3di4) DescriptorSet 0
Decorate 125(g_tTex3du4) DescriptorSet 0
- Decorate 149(Color) Location 0
- Decorate 153(Depth) BuiltIn FragDepth
+ Decorate 149(@entryPointOutput.Color) Location 0
+ Decorate 153(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 156(g_tTex1df4a) DescriptorSet 0
Decorate 156(g_tTex1df4a) Binding 1
Decorate 159(g_tTexcdf4) DescriptorSet 0
@@ -620,9 +621,9 @@ gl_FragCoord origin is upper left
139: 7(fvec4) ConstantComposite 138 138 138 138
141: TypePointer Function 6(float)
148: TypePointer Output 7(fvec4)
- 149(Color): 148(ptr) Variable Output
+149(@entryPointOutput.Color): 148(ptr) Variable Output
152: TypePointer Output 6(float)
- 153(Depth): 152(ptr) Variable Output
+153(@entryPointOutput.Depth): 152(ptr) Variable Output
156(g_tTex1df4a): 15(ptr) Variable UniformConstant
157: TypeImage 6(float) Cube sampled format:Unknown
158: TypePointer UniformConstant 157
@@ -640,10 +641,10 @@ gl_FragCoord origin is upper left
Store 146(flattenTemp) 147
150: 12(ptr) AccessChain 146(flattenTemp) 67
151: 7(fvec4) Load 150
- Store 149(Color) 151
+ Store 149(@entryPointOutput.Color) 151
154: 141(ptr) AccessChain 146(flattenTemp) 28
155: 6(float) Load 154
- Store 153(Depth) 155
+ Store 153(@entryPointOutput.Depth) 155
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index a2abd0ffa5b..5d3c065c5ba 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplegrad.offsetarray.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -140,13 +140,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -163,14 +163,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCubeArray)
0:? 'g_tTexcdi4' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -311,13 +311,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -334,11 +334,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCubeArray)
0:? 'g_tTexcdi4' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 120
Capability Shader
@@ -348,6 +348,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 103 107
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -368,8 +369,8 @@ gl_FragCoord origin is upper left
Name 84 "g_tTex2du4"
Name 91 "psout"
Name 100 "flattenTemp"
- Name 103 "Color"
- Name 107 "Depth"
+ Name 103 "@entryPointOutput.Color"
+ Name 107 "@entryPointOutput.Depth"
Name 110 "g_tTex1df4a"
Name 113 "g_tTexcdf4"
Name 116 "g_tTexcdi4"
@@ -383,8 +384,8 @@ gl_FragCoord origin is upper left
Decorate 59(g_tTex2df4) DescriptorSet 0
Decorate 75(g_tTex2di4) DescriptorSet 0
Decorate 84(g_tTex2du4) DescriptorSet 0
- Decorate 103(Color) Location 0
- Decorate 107(Depth) BuiltIn FragDepth
+ Decorate 103(@entryPointOutput.Color) Location 0
+ Decorate 107(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 110(g_tTex1df4a) DescriptorSet 0
Decorate 110(g_tTex1df4a) Binding 1
Decorate 113(g_tTexcdf4) DescriptorSet 0
@@ -449,9 +450,9 @@ gl_FragCoord origin is upper left
93: 7(fvec4) ConstantComposite 92 92 92 92
95: TypePointer Function 6(float)
102: TypePointer Output 7(fvec4)
- 103(Color): 102(ptr) Variable Output
+103(@entryPointOutput.Color): 102(ptr) Variable Output
106: TypePointer Output 6(float)
- 107(Depth): 106(ptr) Variable Output
+107(@entryPointOutput.Depth): 106(ptr) Variable Output
110(g_tTex1df4a): 15(ptr) Variable UniformConstant
111: TypeImage 6(float) Cube array sampled format:Unknown
112: TypePointer UniformConstant 111
@@ -469,10 +470,10 @@ gl_FragCoord origin is upper left
Store 100(flattenTemp) 101
104: 12(ptr) AccessChain 100(flattenTemp) 69
105: 7(fvec4) Load 104
- Store 103(Color) 105
+ Store 103(@entryPointOutput.Color) 105
108: 95(ptr) AccessChain 100(flattenTemp) 31
109: 6(float) Load 108
- Store 107(Depth) 109
+ Store 107(@entryPointOutput.Depth) 109
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index 88c7de93ca0..bf435df8679 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplelevel.array.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -149,13 +149,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -172,14 +172,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:24 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -329,13 +329,13 @@ gl_FragCoord origin is upper left
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:24 Color: direct index for structure ( temp 4-component vector of float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:24 Depth: direct index for structure ( temp float)
0:24 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:24 Constant:
@@ -352,11 +352,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4a' ( uniform textureCubeArray)
0:? 'g_tTexcdi4a' ( uniform itextureCubeArray)
0:? 'g_tTexcdu4a' ( uniform utextureCubeArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 147
Capability Shader
@@ -366,6 +366,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 139 143
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -392,8 +393,8 @@ gl_FragCoord origin is upper left
Name 115 "g_tTexcdu4a"
Name 126 "psout"
Name 136 "flattenTemp"
- Name 139 "Color"
- Name 143 "Depth"
+ Name 139 "@entryPointOutput.Color"
+ Name 143 "@entryPointOutput.Depth"
Name 146 "g_tTex1df4"
Decorate 16(g_tTex1df4a) DescriptorSet 0
Decorate 16(g_tTex1df4a) Binding 1
@@ -407,8 +408,8 @@ gl_FragCoord origin is upper left
Decorate 95(g_tTexcdf4a) DescriptorSet 0
Decorate 105(g_tTexcdi4a) DescriptorSet 0
Decorate 115(g_tTexcdu4a) DescriptorSet 0
- Decorate 139(Color) Location 0
- Decorate 143(Depth) BuiltIn FragDepth
+ Decorate 139(@entryPointOutput.Color) Location 0
+ Decorate 143(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 146(g_tTex1df4) DescriptorSet 0
Decorate 146(g_tTex1df4) Binding 0
2: TypeVoid
@@ -491,9 +492,9 @@ gl_FragCoord origin is upper left
130: 30(int) Constant 1
131: TypePointer Function 6(float)
138: TypePointer Output 7(fvec4)
- 139(Color): 138(ptr) Variable Output
+139(@entryPointOutput.Color): 138(ptr) Variable Output
142: TypePointer Output 6(float)
- 143(Depth): 142(ptr) Variable Output
+143(@entryPointOutput.Depth): 142(ptr) Variable Output
146(g_tTex1df4): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -502,10 +503,10 @@ gl_FragCoord origin is upper left
Store 136(flattenTemp) 137
140: 12(ptr) AccessChain 136(flattenTemp) 127
141: 7(fvec4) Load 140
- Store 139(Color) 141
+ Store 139(@entryPointOutput.Color) 141
144: 131(ptr) AccessChain 136(flattenTemp) 130
145: 6(float) Load 144
- Store 143(Depth) 145
+ Store 143(@entryPointOutput.Depth) 145
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index 7d9f268c082..82c8b59b08c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplelevel.basic.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:29 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -179,13 +179,13 @@ gl_FragCoord origin is upper left
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:29 Color: direct index for structure ( temp 4-component vector of float)
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Constant:
0:29 0 (const int)
0:29 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:29 Depth: direct index for structure ( temp float)
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Constant:
@@ -206,14 +206,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:29 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -393,13 +393,13 @@ gl_FragCoord origin is upper left
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:29 Color: direct index for structure ( temp 4-component vector of float)
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Constant:
0:29 0 (const int)
0:29 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:29 Depth: direct index for structure ( temp float)
0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:29 Constant:
@@ -420,11 +420,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 172
Capability Shader
@@ -433,6 +433,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 163 167
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -465,8 +466,8 @@ gl_FragCoord origin is upper left
Name 142 "g_tTexcdu4"
Name 149 "psout"
Name 160 "flattenTemp"
- Name 163 "Color"
- Name 167 "Depth"
+ Name 163 "@entryPointOutput.Color"
+ Name 167 "@entryPointOutput.Depth"
Name 170 "g_sSamp2d"
Name 171 "g_tTex1df4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
@@ -484,8 +485,8 @@ gl_FragCoord origin is upper left
Decorate 124(g_tTexcdf4) DescriptorSet 0
Decorate 133(g_tTexcdi4) DescriptorSet 0
Decorate 142(g_tTexcdu4) DescriptorSet 0
- Decorate 163(Color) Location 0
- Decorate 167(Depth) BuiltIn FragDepth
+ Decorate 163(@entryPointOutput.Color) Location 0
+ Decorate 167(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 170(g_sSamp2d) DescriptorSet 0
Decorate 171(g_tTex1df4a) DescriptorSet 0
Decorate 171(g_tTex1df4a) Binding 1
@@ -578,9 +579,9 @@ gl_FragCoord origin is upper left
154: 27(int) Constant 1
155: TypePointer Function 6(float)
162: TypePointer Output 7(fvec4)
- 163(Color): 162(ptr) Variable Output
+163(@entryPointOutput.Color): 162(ptr) Variable Output
166: TypePointer Output 6(float)
- 167(Depth): 166(ptr) Variable Output
+167(@entryPointOutput.Depth): 166(ptr) Variable Output
170(g_sSamp2d): 19(ptr) Variable UniformConstant
171(g_tTex1df4a): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
@@ -590,10 +591,10 @@ gl_FragCoord origin is upper left
Store 160(flattenTemp) 161
164: 12(ptr) AccessChain 160(flattenTemp) 150
165: 7(fvec4) Load 164
- Store 163(Color) 165
+ Store 163(@entryPointOutput.Color) 165
168: 155(ptr) AccessChain 160(flattenTemp) 154
169: 6(float) Load 168
- Store 167(Depth) 169
+ Store 167(@entryPointOutput.Depth) 169
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index 40996e97638..b7e3d577553 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -1,5 +1,5 @@
hlsl.samplelevel.basic.dx10.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:27 Function Parameters:
@@ -168,7 +168,7 @@ Shader version: 450
0:? Sequence
0:27 Sequence
0:27 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:27 Pos: direct index for structure ( temp 4-component vector of float)
0:27 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:27 Constant:
@@ -188,13 +188,13 @@ Shader version: 450
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:27 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
0:27 Function Parameters:
@@ -363,7 +363,7 @@ Shader version: 450
0:? Sequence
0:27 Sequence
0:27 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:27 Pos: direct index for structure ( temp 4-component vector of float)
0:27 Function Call: @main( ( temp structure{ temp 4-component vector of float Pos})
0:27 Constant:
@@ -383,17 +383,18 @@ Shader version: 450
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? '@entryPointOutput' (layout( location=0) out structure{})
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 165
+// Generated by (magic number): 80002
+// Id's are bound by 162
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 158 164
+ EntryPoint Vertex 4 "main" 158
+ Source HLSL 500
Name 4 "main"
Name 8 "VS_OUTPUT"
MemberName 8(VS_OUTPUT) 0 "Pos"
@@ -424,10 +425,8 @@ Shader version: 450
Name 139 "txval42"
Name 142 "g_tTexcdu4"
Name 149 "vsout"
- Name 158 "@entryPointOutput_Pos"
+ Name 158 "@entryPointOutput.Pos"
Name 161 "g_tTex1df4a"
- Name 162 "VS_OUTPUT"
- Name 164 "@entryPointOutput"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
@@ -443,10 +442,9 @@ Shader version: 450
Decorate 124(g_tTexcdf4) DescriptorSet 0
Decorate 133(g_tTexcdi4) DescriptorSet 0
Decorate 142(g_tTexcdu4) DescriptorSet 0
- Decorate 158(@entryPointOutput_Pos) BuiltIn Position
+ Decorate 158(@entryPointOutput.Pos) BuiltIn Position
Decorate 161(g_tTex1df4a) DescriptorSet 0
Decorate 161(g_tTex1df4a) Binding 1
- Decorate 164(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -534,16 +532,13 @@ Shader version: 450
151: 6(float) Constant 0
152: 7(fvec4) ConstantComposite 151 151 151 151
157: TypePointer Output 7(fvec4)
-158(@entryPointOutput_Pos): 157(ptr) Variable Output
+158(@entryPointOutput.Pos): 157(ptr) Variable Output
161(g_tTex1df4a): 15(ptr) Variable UniformConstant
- 162(VS_OUTPUT): TypeStruct
- 163: TypePointer Output 162(VS_OUTPUT)
-164(@entryPointOutput): 163(ptr) Variable Output
4(main): 2 Function None 3
5: Label
159:8(VS_OUTPUT) FunctionCall 10(@main()
160: 7(fvec4) CompositeExtract 159 0
- Store 158(@entryPointOutput_Pos) 160
+ Store 158(@entryPointOutput.Pos) 160
Return
FunctionEnd
10(@main():8(VS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index 2c98171209c..2080066ff44 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplelevel.offset.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -167,13 +167,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -193,14 +193,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -368,13 +368,13 @@ gl_FragCoord origin is upper left
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:28 Color: direct index for structure ( temp 4-component vector of float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
0:28 0 (const int)
0:28 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:28 Depth: direct index for structure ( temp float)
0:28 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:28 Constant:
@@ -394,11 +394,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTexcdf4' ( uniform textureCube)
0:? 'g_tTexcdi4' ( uniform itextureCube)
0:? 'g_tTexcdu4' ( uniform utextureCube)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 162
Capability Shader
@@ -407,6 +407,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 145 149
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -433,8 +434,8 @@ gl_FragCoord origin is upper left
Name 121 "g_tTex3du4"
Name 133 "psout"
Name 142 "flattenTemp"
- Name 145 "Color"
- Name 149 "Depth"
+ Name 145 "@entryPointOutput.Color"
+ Name 149 "@entryPointOutput.Depth"
Name 152 "g_tTex1df4a"
Name 155 "g_tTexcdf4"
Name 158 "g_tTexcdi4"
@@ -451,8 +452,8 @@ gl_FragCoord origin is upper left
Decorate 97(g_tTex3df4) DescriptorSet 0
Decorate 110(g_tTex3di4) DescriptorSet 0
Decorate 121(g_tTex3du4) DescriptorSet 0
- Decorate 145(Color) Location 0
- Decorate 149(Depth) BuiltIn FragDepth
+ Decorate 145(@entryPointOutput.Color) Location 0
+ Decorate 149(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 152(g_tTex1df4a) DescriptorSet 0
Decorate 152(g_tTex1df4a) Binding 1
Decorate 155(g_tTexcdf4) DescriptorSet 0
@@ -544,9 +545,9 @@ gl_FragCoord origin is upper left
135: 7(fvec4) ConstantComposite 134 134 134 134
137: TypePointer Function 6(float)
144: TypePointer Output 7(fvec4)
- 145(Color): 144(ptr) Variable Output
+145(@entryPointOutput.Color): 144(ptr) Variable Output
148: TypePointer Output 6(float)
- 149(Depth): 148(ptr) Variable Output
+149(@entryPointOutput.Depth): 148(ptr) Variable Output
152(g_tTex1df4a): 15(ptr) Variable UniformConstant
153: TypeImage 6(float) Cube sampled format:Unknown
154: TypePointer UniformConstant 153
@@ -564,10 +565,10 @@ gl_FragCoord origin is upper left
Store 142(flattenTemp) 143
146: 12(ptr) AccessChain 142(flattenTemp) 65
147: 7(fvec4) Load 146
- Store 145(Color) 147
+ Store 145(@entryPointOutput.Color) 147
150: 137(ptr) AccessChain 142(flattenTemp) 27
151: 6(float) Load 150
- Store 149(Depth) 151
+ Store 149(@entryPointOutput.Depth) 151
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index 06b4c7b4bc7..7905b7575af 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -1,5 +1,5 @@
hlsl.samplelevel.offsetarray.dx10.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -122,13 +122,13 @@ gl_FragCoord origin is upper left
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:20 Color: direct index for structure ( temp 4-component vector of float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
0:20 0 (const int)
0:20 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:20 Depth: direct index for structure ( temp float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
@@ -142,14 +142,14 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2df4' ( uniform texture2DArray)
0:? 'g_tTex2di4' ( uniform itexture2DArray)
0:? 'g_tTex2du4' ( uniform utexture2DArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:20 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
@@ -272,13 +272,13 @@ gl_FragCoord origin is upper left
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:20 Color: direct index for structure ( temp 4-component vector of float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
0:20 0 (const int)
0:20 move second child to first child ( temp float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:20 Depth: direct index for structure ( temp float)
0:20 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
0:20 Constant:
@@ -292,11 +292,11 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2df4' ( uniform texture2DArray)
0:? 'g_tTex2di4' ( uniform itexture2DArray)
0:? 'g_tTex2du4' ( uniform utexture2DArray)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
-0:? 'Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 119
Capability Shader
@@ -305,6 +305,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 111 115
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -325,8 +326,8 @@ gl_FragCoord origin is upper left
Name 88 "g_tTex2du4"
Name 99 "psout"
Name 108 "flattenTemp"
- Name 111 "Color"
- Name 115 "Depth"
+ Name 111 "@entryPointOutput.Color"
+ Name 115 "@entryPointOutput.Depth"
Name 118 "g_tTex1df4a"
Decorate 16(g_tTex1df4) DescriptorSet 0
Decorate 16(g_tTex1df4) Binding 0
@@ -337,8 +338,8 @@ gl_FragCoord origin is upper left
Decorate 64(g_tTex2df4) DescriptorSet 0
Decorate 77(g_tTex2di4) DescriptorSet 0
Decorate 88(g_tTex2du4) DescriptorSet 0
- Decorate 111(Color) Location 0
- Decorate 115(Depth) BuiltIn FragDepth
+ Decorate 111(@entryPointOutput.Color) Location 0
+ Decorate 115(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 118(g_tTex1df4a) DescriptorSet 0
Decorate 118(g_tTex1df4a) Binding 1
2: TypeVoid
@@ -408,9 +409,9 @@ gl_FragCoord origin is upper left
101: 7(fvec4) ConstantComposite 100 100 100 100
103: TypePointer Function 6(float)
110: TypePointer Output 7(fvec4)
- 111(Color): 110(ptr) Variable Output
+111(@entryPointOutput.Color): 110(ptr) Variable Output
114: TypePointer Output 6(float)
- 115(Depth): 114(ptr) Variable Output
+115(@entryPointOutput.Depth): 114(ptr) Variable Output
118(g_tTex1df4a): 15(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
@@ -419,10 +420,10 @@ gl_FragCoord origin is upper left
Store 108(flattenTemp) 109
112: 12(ptr) AccessChain 108(flattenTemp) 30
113: 7(fvec4) Load 112
- Store 111(Color) 113
+ Store 111(@entryPointOutput.Color) 113
116: 103(ptr) AccessChain 108(flattenTemp) 44
117: 6(float) Load 116
- Store 115(Depth) 117
+ Store 115(@entryPointOutput.Depth) 117
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalar-length.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalar-length.frag.out
new file mode 100644
index 00000000000..9a51962cb90
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalar-length.frag.out
@@ -0,0 +1,112 @@
+hlsl.scalar-length.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Sequence
+0:3 move second child to first child ( temp 4-component vector of float)
+0:3 'test' ( temp 4-component vector of float)
+0:3 Constant:
+0:3 0.000000
+0:3 1.000000
+0:3 2.000000
+0:3 3.000000
+0:5 Branch: Return with expression
+0:5 Construct vec4 ( temp 4-component vector of float)
+0:5 length ( temp float)
+0:5 direct index ( temp float)
+0:5 'test' ( temp 4-component vector of float)
+0:5 Constant:
+0:5 3 (const int)
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2 Function Definition: @main( ( temp 4-component vector of float)
+0:2 Function Parameters:
+0:? Sequence
+0:3 Sequence
+0:3 move second child to first child ( temp 4-component vector of float)
+0:3 'test' ( temp 4-component vector of float)
+0:3 Constant:
+0:3 0.000000
+0:3 1.000000
+0:3 2.000000
+0:3 3.000000
+0:5 Branch: Return with expression
+0:5 Construct vec4 ( temp 4-component vector of float)
+0:5 length ( temp float)
+0:5 direct index ( temp float)
+0:5 'test' ( temp 4-component vector of float)
+0:5 Constant:
+0:5 3 (const int)
+0:2 Function Definition: main( ( temp void)
+0:2 Function Parameters:
+0:? Sequence
+0:2 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:2 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 30
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 28
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 12 "test"
+ Name 28 "@entryPointOutput"
+ Decorate 28(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypePointer Function 7(fvec4)
+ 13: 6(float) Constant 0
+ 14: 6(float) Constant 1065353216
+ 15: 6(float) Constant 1073741824
+ 16: 6(float) Constant 1077936128
+ 17: 7(fvec4) ConstantComposite 13 14 15 16
+ 18: TypeInt 32 0
+ 19: 18(int) Constant 3
+ 20: TypePointer Function 6(float)
+ 27: TypePointer Output 7(fvec4)
+28(@entryPointOutput): 27(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 29: 7(fvec4) FunctionCall 9(@main()
+ Store 28(@entryPointOutput) 29
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 12(test): 11(ptr) Variable Function
+ Store 12(test) 17
+ 21: 20(ptr) AccessChain 12(test) 19
+ 22: 6(float) Load 21
+ 23: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 22
+ 24: 7(fvec4) CompositeConstruct 23 23 23 23
+ ReturnValue 24
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalar2matrix.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalar2matrix.frag.out
new file mode 100644
index 00000000000..6b799f468d7
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalar2matrix.frag.out
@@ -0,0 +1,506 @@
+hlsl.scalar2matrix.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2 Function Definition: Fn1(mf44; ( temp void)
+0:2 Function Parameters:
+0:2 'p' ( in 4X4 matrix of float)
+0:5 Function Definition: @main( ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? Sequence
+0:10 Sequence
+0:10 move second child to first child ( temp 4X4 matrix of float)
+0:10 'mat1' ( temp 4X4 matrix of float)
+0:10 Constant:
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:11 Sequence
+0:11 move second child to first child ( temp 4X4 matrix of float)
+0:11 'mat2' ( temp 4X4 matrix of float)
+0:11 Constant:
+0:11 3.000000
+0:11 3.100000
+0:11 3.200000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:12 Sequence
+0:12 move second child to first child ( temp 4X4 matrix of float)
+0:12 'mat3' ( temp 4X4 matrix of float)
+0:12 Constant:
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:16 move second child to first child ( temp 4X4 matrix of float)
+0:16 'mat4' ( temp 4X4 matrix of float)
+0:16 Constant:
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:17 move second child to first child ( temp 4X4 matrix of float)
+0:17 'mat4' ( temp 4X4 matrix of float)
+0:? Constant:
+0:? 4.000000
+0:? 4.100000
+0:? 4.200000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:18 move second child to first child ( temp 4X4 matrix of float)
+0:18 'mat4' ( temp 4X4 matrix of float)
+0:18 Constant:
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:20 matrix scale second child into first child ( temp 4X4 matrix of float)
+0:20 'mat4' ( temp 4X4 matrix of float)
+0:20 Constant:
+0:20 0.750000
+0:21 add second child into first child ( temp 4X4 matrix of float)
+0:21 'mat4' ( temp 4X4 matrix of float)
+0:21 Constant:
+0:21 0.750000
+0:22 subtract second child into first child ( temp 4X4 matrix of float)
+0:22 'mat4' ( temp 4X4 matrix of float)
+0:22 Constant:
+0:22 0.500000
+0:23 divide second child into first child ( temp 4X4 matrix of float)
+0:23 'mat4' ( temp 4X4 matrix of float)
+0:23 Constant:
+0:23 2.000000
+0:25 Function Call: Fn1(mf44; ( temp void)
+0:25 Constant:
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:27 Branch: Return with expression
+0:27 add ( temp 4-component vector of float)
+0:27 add ( temp 4-component vector of float)
+0:27 Constant:
+0:27 0.300000
+0:27 0.300000
+0:27 0.300000
+0:27 0.300000
+0:27 direct index ( temp 4-component vector of float)
+0:27 'mat1' ( temp 4X4 matrix of float)
+0:27 Constant:
+0:27 1 (const int)
+0:27 direct index ( temp 4-component vector of float)
+0:27 'mat4' ( temp 4X4 matrix of float)
+0:27 Constant:
+0:27 2 (const int)
+0:5 Function Definition: main( ( temp void)
+0:5 Function Parameters:
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:5 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2 Function Definition: Fn1(mf44; ( temp void)
+0:2 Function Parameters:
+0:2 'p' ( in 4X4 matrix of float)
+0:5 Function Definition: @main( ( temp 4-component vector of float)
+0:5 Function Parameters:
+0:? Sequence
+0:10 Sequence
+0:10 move second child to first child ( temp 4X4 matrix of float)
+0:10 'mat1' ( temp 4X4 matrix of float)
+0:10 Constant:
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:10 0.250000
+0:11 Sequence
+0:11 move second child to first child ( temp 4X4 matrix of float)
+0:11 'mat2' ( temp 4X4 matrix of float)
+0:11 Constant:
+0:11 3.000000
+0:11 3.100000
+0:11 3.200000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:11 0.000000
+0:12 Sequence
+0:12 move second child to first child ( temp 4X4 matrix of float)
+0:12 'mat3' ( temp 4X4 matrix of float)
+0:12 Constant:
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:12 0.375000
+0:16 move second child to first child ( temp 4X4 matrix of float)
+0:16 'mat4' ( temp 4X4 matrix of float)
+0:16 Constant:
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:16 0.750000
+0:17 move second child to first child ( temp 4X4 matrix of float)
+0:17 'mat4' ( temp 4X4 matrix of float)
+0:? Constant:
+0:? 4.000000
+0:? 4.100000
+0:? 4.200000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:18 move second child to first child ( temp 4X4 matrix of float)
+0:18 'mat4' ( temp 4X4 matrix of float)
+0:18 Constant:
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:18 0.500000
+0:20 matrix scale second child into first child ( temp 4X4 matrix of float)
+0:20 'mat4' ( temp 4X4 matrix of float)
+0:20 Constant:
+0:20 0.750000
+0:21 add second child into first child ( temp 4X4 matrix of float)
+0:21 'mat4' ( temp 4X4 matrix of float)
+0:21 Constant:
+0:21 0.750000
+0:22 subtract second child into first child ( temp 4X4 matrix of float)
+0:22 'mat4' ( temp 4X4 matrix of float)
+0:22 Constant:
+0:22 0.500000
+0:23 divide second child into first child ( temp 4X4 matrix of float)
+0:23 'mat4' ( temp 4X4 matrix of float)
+0:23 Constant:
+0:23 2.000000
+0:25 Function Call: Fn1(mf44; ( temp void)
+0:25 Constant:
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:25 5.000000
+0:27 Branch: Return with expression
+0:27 add ( temp 4-component vector of float)
+0:27 add ( temp 4-component vector of float)
+0:27 Constant:
+0:27 0.300000
+0:27 0.300000
+0:27 0.300000
+0:27 0.300000
+0:27 direct index ( temp 4-component vector of float)
+0:27 'mat1' ( temp 4X4 matrix of float)
+0:27 Constant:
+0:27 1 (const int)
+0:27 direct index ( temp 4-component vector of float)
+0:27 'mat4' ( temp 4X4 matrix of float)
+0:27 Constant:
+0:27 2 (const int)
+0:5 Function Definition: main( ( temp void)
+0:5 Function Parameters:
+0:? Sequence
+0:5 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:5 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 96
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 94
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 12 "Fn1(mf44;"
+ Name 11 "p"
+ Name 15 "@main("
+ Name 17 "mat1"
+ Name 21 "mat2"
+ Name 29 "mat3"
+ Name 33 "mat4"
+ Name 77 "param"
+ Name 94 "@entryPointOutput"
+ Decorate 94(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeMatrix 7(fvec4) 4
+ 9: TypePointer Function 8
+ 10: TypeFunction 2 9(ptr)
+ 14: TypeFunction 7(fvec4)
+ 18: 6(float) Constant 1048576000
+ 19: 7(fvec4) ConstantComposite 18 18 18 18
+ 20: 8 ConstantComposite 19 19 19 19
+ 22: 6(float) Constant 1077936128
+ 23: 6(float) Constant 1078355558
+ 24: 6(float) Constant 1078774989
+ 25: 6(float) Constant 0
+ 26: 7(fvec4) ConstantComposite 22 23 24 25
+ 27: 7(fvec4) ConstantComposite 25 25 25 25
+ 28: 8 ConstantComposite 26 27 27 27
+ 30: 6(float) Constant 1052770304
+ 31: 7(fvec4) ConstantComposite 30 30 30 30
+ 32: 8 ConstantComposite 31 31 31 31
+ 34: 6(float) Constant 1061158912
+ 35: 7(fvec4) ConstantComposite 34 34 34 34
+ 36: 8 ConstantComposite 35 35 35 35
+ 37: 6(float) Constant 1082130432
+ 38: 6(float) Constant 1082340147
+ 39: 6(float) Constant 1082549862
+ 40: 7(fvec4) ConstantComposite 37 38 39 25
+ 41: 8 ConstantComposite 40 27 27 27
+ 42: 6(float) Constant 1056964608
+ 43: 7(fvec4) ConstantComposite 42 42 42 42
+ 44: 8 ConstantComposite 43 43 43 43
+ 69: 6(float) Constant 1073741824
+ 71: 6(float) Constant 1065353216
+ 74: 6(float) Constant 1084227584
+ 75: 7(fvec4) ConstantComposite 74 74 74 74
+ 76: 8 ConstantComposite 75 75 75 75
+ 79: 6(float) Constant 1050253722
+ 80: 7(fvec4) ConstantComposite 79 79 79 79
+ 81: TypeInt 32 1
+ 82: 81(int) Constant 1
+ 83: TypePointer Function 7(fvec4)
+ 87: 81(int) Constant 2
+ 93: TypePointer Output 7(fvec4)
+94(@entryPointOutput): 93(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 95: 7(fvec4) FunctionCall 15(@main()
+ Store 94(@entryPointOutput) 95
+ Return
+ FunctionEnd
+ 12(Fn1(mf44;): 2 Function None 10
+ 11(p): 9(ptr) FunctionParameter
+ 13: Label
+ Return
+ FunctionEnd
+ 15(@main(): 7(fvec4) Function None 14
+ 16: Label
+ 17(mat1): 9(ptr) Variable Function
+ 21(mat2): 9(ptr) Variable Function
+ 29(mat3): 9(ptr) Variable Function
+ 33(mat4): 9(ptr) Variable Function
+ 77(param): 9(ptr) Variable Function
+ Store 17(mat1) 20
+ Store 21(mat2) 28
+ Store 29(mat3) 32
+ Store 33(mat4) 36
+ Store 33(mat4) 41
+ Store 33(mat4) 44
+ 45: 8 Load 33(mat4)
+ 46: 8 MatrixTimesScalar 45 34
+ Store 33(mat4) 46
+ 47: 8 Load 33(mat4)
+ 48: 7(fvec4) CompositeConstruct 34 34 34 34
+ 49: 7(fvec4) CompositeExtract 47 0
+ 50: 7(fvec4) FAdd 49 48
+ 51: 7(fvec4) CompositeExtract 47 1
+ 52: 7(fvec4) FAdd 51 48
+ 53: 7(fvec4) CompositeExtract 47 2
+ 54: 7(fvec4) FAdd 53 48
+ 55: 7(fvec4) CompositeExtract 47 3
+ 56: 7(fvec4) FAdd 55 48
+ 57: 8 CompositeConstruct 50 52 54 56
+ Store 33(mat4) 57
+ 58: 8 Load 33(mat4)
+ 59: 7(fvec4) CompositeConstruct 42 42 42 42
+ 60: 7(fvec4) CompositeExtract 58 0
+ 61: 7(fvec4) FSub 60 59
+ 62: 7(fvec4) CompositeExtract 58 1
+ 63: 7(fvec4) FSub 62 59
+ 64: 7(fvec4) CompositeExtract 58 2
+ 65: 7(fvec4) FSub 64 59
+ 66: 7(fvec4) CompositeExtract 58 3
+ 67: 7(fvec4) FSub 66 59
+ 68: 8 CompositeConstruct 61 63 65 67
+ Store 33(mat4) 68
+ 70: 8 Load 33(mat4)
+ 72: 6(float) FDiv 71 69
+ 73: 8 MatrixTimesScalar 70 72
+ Store 33(mat4) 73
+ Store 77(param) 76
+ 78: 2 FunctionCall 12(Fn1(mf44;) 77(param)
+ 84: 83(ptr) AccessChain 17(mat1) 82
+ 85: 7(fvec4) Load 84
+ 86: 7(fvec4) FAdd 80 85
+ 88: 83(ptr) AccessChain 33(mat4) 87
+ 89: 7(fvec4) Load 88
+ 90: 7(fvec4) FAdd 86 89
+ ReturnValue 90
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalarCast.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalarCast.vert.out
new file mode 100644
index 00000000000..a0b0aa2e715
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scalarCast.vert.out
@@ -0,0 +1,493 @@
+hlsl.scalarCast.vert
+Shader version: 500
+0:? Sequence
+0:5 Function Definition: r0( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:5 Function Parameters:
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 Constant:
+0:7 2.000000
+0:7 2.000000
+0:7 2.000000
+0:7 2.000000
+0:7 2.000000
+0:7 2.000000
+0:9 Function Definition: r1( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:9 Function Parameters:
+0:? Sequence
+0:11 Branch: Return with expression
+0:11 Constant:
+0:11 3.000000
+0:11 3.000000
+0:11 3.000000
+0:11 3.000000
+0:11 3.000000
+0:11 3.000000
+0:13 Function Definition: r2( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:13 Function Parameters:
+0:? Sequence
+0:15 Branch: Return with expression
+0:15 Constant:
+0:15 0.909297
+0:15 0.909297
+0:15 0.909297
+0:15 0.909297
+0:15 0.909297
+0:15 0.909297
+0:17 Function Definition: r3( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:17 Function Parameters:
+0:? Sequence
+0:18 Sequence
+0:18 move second child to first child ( temp float)
+0:18 'f' ( temp float)
+0:18 Constant:
+0:18 2.000000
+0:19 Branch: Return with expression
+0:19 Construct structure ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:19 Construct vec4 ( temp 4-component vector of float)
+0:19 'f' ( temp float)
+0:19 'f' ( temp float)
+0:19 'f' ( temp float)
+0:19 'f' ( temp float)
+0:19 Construct vec2 ( temp 2-component vector of float)
+0:19 'f' ( temp float)
+0:19 'f' ( temp float)
+0:21 Function Definition: r4( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:21 Function Parameters:
+0:? Sequence
+0:22 Sequence
+0:22 move second child to first child ( temp float)
+0:22 'f' ( temp float)
+0:22 Constant:
+0:22 2.000000
+0:23 Branch: Return with expression
+0:23 Comma ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:23 move second child to first child ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:23 add ( temp float)
+0:23 'f' ( temp float)
+0:23 Constant:
+0:23 1.000000
+0:23 Construct structure ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:23 Construct vec4 ( temp 4-component vector of float)
+0:23 'scalarCopy' ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:23 Construct vec2 ( temp 2-component vector of float)
+0:23 'scalarCopy' ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:25 Function Definition: r5( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:25 Function Parameters:
+0:? Sequence
+0:26 Sequence
+0:26 move second child to first child ( temp float)
+0:26 'f' ( temp float)
+0:26 Constant:
+0:26 2.000000
+0:27 Branch: Return with expression
+0:27 Comma ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:27 move second child to first child ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:27 sine ( temp float)
+0:27 'f' ( temp float)
+0:27 Construct structure ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:27 Construct vec4 ( temp 4-component vector of float)
+0:27 'scalarCopy' ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:27 Construct vec2 ( temp 2-component vector of float)
+0:27 'scalarCopy' ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:29 Function Definition: @main( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 Function Parameters:
+0:? Sequence
+0:30 Sequence
+0:30 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:30 'v0' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:30 Function Call: r0( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:31 Sequence
+0:31 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:31 'v1' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:31 Function Call: r1( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:32 Sequence
+0:32 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:32 'v2' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:32 Function Call: r2( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:33 Sequence
+0:33 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:33 'v3' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:33 Function Call: r3( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:34 Sequence
+0:34 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:34 'v4' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:34 Function Call: r4( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:35 Sequence
+0:35 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:35 'v5' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:35 Function Call: r5( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:36 Branch: Return with expression
+0:36 Constant:
+0:36 1.000000
+0:36 1.000000
+0:36 1.000000
+0:36 1.000000
+0:36 1.000000
+0:36 1.000000
+0:29 Function Definition: main( ( temp void)
+0:29 Function Parameters:
+0:? Sequence
+0:29 Sequence
+0:29 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 Function Call: @main( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.position' ( out 4-component vector of float Position)
+0:29 position: direct index for structure ( temp 4-component vector of float)
+0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 Constant:
+0:29 0 (const int)
+0:29 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.texCoord' (layout( location=0) out 2-component vector of float)
+0:29 texCoord: direct index for structure ( temp 2-component vector of float)
+0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 Constant:
+0:29 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.position' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.texCoord' (layout( location=0) out 2-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:5 Function Definition: r0( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:5 Function Parameters:
+0:? Sequence
+0:7 Branch: Return with expression
+0:7 Constant:
+0:7 2.000000
+0:7 2.000000
+0:7 2.000000
+0:7 2.000000
+0:7 2.000000
+0:7 2.000000
+0:9 Function Definition: r1( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:9 Function Parameters:
+0:? Sequence
+0:11 Branch: Return with expression
+0:11 Constant:
+0:11 3.000000
+0:11 3.000000
+0:11 3.000000
+0:11 3.000000
+0:11 3.000000
+0:11 3.000000
+0:13 Function Definition: r2( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:13 Function Parameters:
+0:? Sequence
+0:15 Branch: Return with expression
+0:15 Constant:
+0:15 0.909297
+0:15 0.909297
+0:15 0.909297
+0:15 0.909297
+0:15 0.909297
+0:15 0.909297
+0:17 Function Definition: r3( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:17 Function Parameters:
+0:? Sequence
+0:18 Sequence
+0:18 move second child to first child ( temp float)
+0:18 'f' ( temp float)
+0:18 Constant:
+0:18 2.000000
+0:19 Branch: Return with expression
+0:19 Construct structure ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:19 Construct vec4 ( temp 4-component vector of float)
+0:19 'f' ( temp float)
+0:19 'f' ( temp float)
+0:19 'f' ( temp float)
+0:19 'f' ( temp float)
+0:19 Construct vec2 ( temp 2-component vector of float)
+0:19 'f' ( temp float)
+0:19 'f' ( temp float)
+0:21 Function Definition: r4( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:21 Function Parameters:
+0:? Sequence
+0:22 Sequence
+0:22 move second child to first child ( temp float)
+0:22 'f' ( temp float)
+0:22 Constant:
+0:22 2.000000
+0:23 Branch: Return with expression
+0:23 Comma ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:23 move second child to first child ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:23 add ( temp float)
+0:23 'f' ( temp float)
+0:23 Constant:
+0:23 1.000000
+0:23 Construct structure ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:23 Construct vec4 ( temp 4-component vector of float)
+0:23 'scalarCopy' ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:23 Construct vec2 ( temp 2-component vector of float)
+0:23 'scalarCopy' ( temp float)
+0:23 'scalarCopy' ( temp float)
+0:25 Function Definition: r5( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:25 Function Parameters:
+0:? Sequence
+0:26 Sequence
+0:26 move second child to first child ( temp float)
+0:26 'f' ( temp float)
+0:26 Constant:
+0:26 2.000000
+0:27 Branch: Return with expression
+0:27 Comma ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:27 move second child to first child ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:27 sine ( temp float)
+0:27 'f' ( temp float)
+0:27 Construct structure ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:27 Construct vec4 ( temp 4-component vector of float)
+0:27 'scalarCopy' ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:27 Construct vec2 ( temp 2-component vector of float)
+0:27 'scalarCopy' ( temp float)
+0:27 'scalarCopy' ( temp float)
+0:29 Function Definition: @main( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 Function Parameters:
+0:? Sequence
+0:30 Sequence
+0:30 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:30 'v0' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:30 Function Call: r0( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:31 Sequence
+0:31 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:31 'v1' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:31 Function Call: r1( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:32 Sequence
+0:32 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:32 'v2' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:32 Function Call: r2( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:33 Sequence
+0:33 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:33 'v3' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:33 Function Call: r3( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:34 Sequence
+0:34 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:34 'v4' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:34 Function Call: r4( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:35 Sequence
+0:35 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:35 'v5' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:35 Function Call: r5( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:36 Branch: Return with expression
+0:36 Constant:
+0:36 1.000000
+0:36 1.000000
+0:36 1.000000
+0:36 1.000000
+0:36 1.000000
+0:36 1.000000
+0:29 Function Definition: main( ( temp void)
+0:29 Function Parameters:
+0:? Sequence
+0:29 Sequence
+0:29 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 Function Call: @main( ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.position' ( out 4-component vector of float Position)
+0:29 position: direct index for structure ( temp 4-component vector of float)
+0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 Constant:
+0:29 0 (const int)
+0:29 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.texCoord' (layout( location=0) out 2-component vector of float)
+0:29 texCoord: direct index for structure ( temp 2-component vector of float)
+0:29 'flattenTemp' ( temp structure{ temp 4-component vector of float position, temp 2-component vector of float texCoord})
+0:29 Constant:
+0:29 1 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.position' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.texCoord' (layout( location=0) out 2-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 120
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 108 115
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "VertexOut"
+ MemberName 9(VertexOut) 0 "position"
+ MemberName 9(VertexOut) 1 "texCoord"
+ Name 11 "r0("
+ Name 13 "r1("
+ Name 15 "r2("
+ Name 17 "r3("
+ Name 19 "r4("
+ Name 21 "r5("
+ Name 23 "@main("
+ Name 44 "f"
+ Name 56 "f"
+ Name 57 "scalarCopy"
+ Name 72 "f"
+ Name 73 "scalarCopy"
+ Name 88 "v0"
+ Name 90 "v1"
+ Name 92 "v2"
+ Name 94 "v3"
+ Name 96 "v4"
+ Name 98 "v5"
+ Name 105 "flattenTemp"
+ Name 108 "@entryPointOutput.position"
+ Name 115 "@entryPointOutput.texCoord"
+ Decorate 108(@entryPointOutput.position) BuiltIn Position
+ Decorate 115(@entryPointOutput.texCoord) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeVector 6(float) 2
+ 9(VertexOut): TypeStruct 7(fvec4) 8(fvec2)
+ 10: TypeFunction 9(VertexOut)
+ 25: 6(float) Constant 1073741824
+ 26: 7(fvec4) ConstantComposite 25 25 25 25
+ 27: 8(fvec2) ConstantComposite 25 25
+ 28:9(VertexOut) ConstantComposite 26 27
+ 31: 6(float) Constant 1077936128
+ 32: 7(fvec4) ConstantComposite 31 31 31 31
+ 33: 8(fvec2) ConstantComposite 31 31
+ 34:9(VertexOut) ConstantComposite 32 33
+ 37: 6(float) Constant 1063831479
+ 38: 7(fvec4) ConstantComposite 37 37 37 37
+ 39: 8(fvec2) ConstantComposite 37 37
+ 40:9(VertexOut) ConstantComposite 38 39
+ 43: TypePointer Function 6(float)
+ 59: 6(float) Constant 1065353216
+ 87: TypePointer Function 9(VertexOut)
+ 100: 7(fvec4) ConstantComposite 59 59 59 59
+ 101: 8(fvec2) ConstantComposite 59 59
+ 102:9(VertexOut) ConstantComposite 100 101
+ 107: TypePointer Output 7(fvec4)
+108(@entryPointOutput.position): 107(ptr) Variable Output
+ 109: TypeInt 32 1
+ 110: 109(int) Constant 0
+ 111: TypePointer Function 7(fvec4)
+ 114: TypePointer Output 8(fvec2)
+115(@entryPointOutput.texCoord): 114(ptr) Variable Output
+ 116: 109(int) Constant 1
+ 117: TypePointer Function 8(fvec2)
+ 4(main): 2 Function None 3
+ 5: Label
+105(flattenTemp): 87(ptr) Variable Function
+ 106:9(VertexOut) FunctionCall 23(@main()
+ Store 105(flattenTemp) 106
+ 112: 111(ptr) AccessChain 105(flattenTemp) 110
+ 113: 7(fvec4) Load 112
+ Store 108(@entryPointOutput.position) 113
+ 118: 117(ptr) AccessChain 105(flattenTemp) 116
+ 119: 8(fvec2) Load 118
+ Store 115(@entryPointOutput.texCoord) 119
+ Return
+ FunctionEnd
+ 11(r0():9(VertexOut) Function None 10
+ 12: Label
+ ReturnValue 28
+ FunctionEnd
+ 13(r1():9(VertexOut) Function None 10
+ 14: Label
+ ReturnValue 34
+ FunctionEnd
+ 15(r2():9(VertexOut) Function None 10
+ 16: Label
+ ReturnValue 40
+ FunctionEnd
+ 17(r3():9(VertexOut) Function None 10
+ 18: Label
+ 44(f): 43(ptr) Variable Function
+ Store 44(f) 25
+ 45: 6(float) Load 44(f)
+ 46: 6(float) Load 44(f)
+ 47: 6(float) Load 44(f)
+ 48: 6(float) Load 44(f)
+ 49: 7(fvec4) CompositeConstruct 45 46 47 48
+ 50: 6(float) Load 44(f)
+ 51: 6(float) Load 44(f)
+ 52: 8(fvec2) CompositeConstruct 50 51
+ 53:9(VertexOut) CompositeConstruct 49 52
+ ReturnValue 53
+ FunctionEnd
+ 19(r4():9(VertexOut) Function None 10
+ 20: Label
+ 56(f): 43(ptr) Variable Function
+ 57(scalarCopy): 43(ptr) Variable Function
+ Store 56(f) 25
+ 58: 6(float) Load 56(f)
+ 60: 6(float) FAdd 58 59
+ Store 57(scalarCopy) 60
+ 61: 6(float) Load 57(scalarCopy)
+ 62: 6(float) Load 57(scalarCopy)
+ 63: 6(float) Load 57(scalarCopy)
+ 64: 6(float) Load 57(scalarCopy)
+ 65: 7(fvec4) CompositeConstruct 61 62 63 64
+ 66: 6(float) Load 57(scalarCopy)
+ 67: 6(float) Load 57(scalarCopy)
+ 68: 8(fvec2) CompositeConstruct 66 67
+ 69:9(VertexOut) CompositeConstruct 65 68
+ ReturnValue 69
+ FunctionEnd
+ 21(r5():9(VertexOut) Function None 10
+ 22: Label
+ 72(f): 43(ptr) Variable Function
+ 73(scalarCopy): 43(ptr) Variable Function
+ Store 72(f) 25
+ 74: 6(float) Load 72(f)
+ 75: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 74
+ Store 73(scalarCopy) 75
+ 76: 6(float) Load 73(scalarCopy)
+ 77: 6(float) Load 73(scalarCopy)
+ 78: 6(float) Load 73(scalarCopy)
+ 79: 6(float) Load 73(scalarCopy)
+ 80: 7(fvec4) CompositeConstruct 76 77 78 79
+ 81: 6(float) Load 73(scalarCopy)
+ 82: 6(float) Load 73(scalarCopy)
+ 83: 8(fvec2) CompositeConstruct 81 82
+ 84:9(VertexOut) CompositeConstruct 80 83
+ ReturnValue 84
+ FunctionEnd
+ 23(@main():9(VertexOut) Function None 10
+ 24: Label
+ 88(v0): 87(ptr) Variable Function
+ 90(v1): 87(ptr) Variable Function
+ 92(v2): 87(ptr) Variable Function
+ 94(v3): 87(ptr) Variable Function
+ 96(v4): 87(ptr) Variable Function
+ 98(v5): 87(ptr) Variable Function
+ 89:9(VertexOut) FunctionCall 11(r0()
+ Store 88(v0) 89
+ 91:9(VertexOut) FunctionCall 13(r1()
+ Store 90(v1) 91
+ 93:9(VertexOut) FunctionCall 15(r2()
+ Store 92(v2) 93
+ 95:9(VertexOut) FunctionCall 17(r3()
+ Store 94(v3) 95
+ 97:9(VertexOut) FunctionCall 19(r4()
+ Store 96(v4) 97
+ 99:9(VertexOut) FunctionCall 21(r5()
+ Store 98(v5) 99
+ ReturnValue 102
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scope.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scope.frag.out
index d3409d8b2fb..b7cc2a2276b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scope.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.scope.frag.out
@@ -1,5 +1,5 @@
hlsl.scope.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp void)
@@ -52,7 +52,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp void)
@@ -102,7 +102,7 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 49
Capability Shader
@@ -110,6 +110,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 44
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "@PixelShaderFunction(vf4;"
Name 10 "input"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic-1.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic-1.vert.out
new file mode 100644
index 00000000000..7e4885c4e5d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic-1.vert.out
@@ -0,0 +1,374 @@
+hlsl.semantic-1.vert
+Shader version: 500
+0:? Sequence
+0:16 Function Definition: @main(vf4; ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Function Parameters:
+0:16 'v' ( in 4-component vector of float)
+0:? Sequence
+0:18 move second child to first child ( temp 4-component vector of float)
+0:18 pos: direct index for structure ( temp 4-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:18 Constant:
+0:18 0 (const int)
+0:18 'v' ( in 4-component vector of float)
+0:19 move second child to first child ( temp 2-component vector of float)
+0:19 UV0: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:19 Constant:
+0:19 1 (const int)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:19 direct index ( temp float)
+0:19 'v' ( in 4-component vector of float)
+0:19 Constant:
+0:19 0 (const int)
+0:19 direct index ( temp float)
+0:19 'v' ( in 4-component vector of float)
+0:19 Constant:
+0:19 0 (const int)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 UV1: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:20 Constant:
+0:20 2 (const int)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:20 direct index ( temp float)
+0:20 'v' ( in 4-component vector of float)
+0:20 Constant:
+0:20 1 (const int)
+0:20 direct index ( temp float)
+0:20 'v' ( in 4-component vector of float)
+0:20 Constant:
+0:20 1 (const int)
+0:21 move second child to first child ( temp 2-component vector of float)
+0:21 UV2: direct index for structure ( temp 2-component vector of float)
+0:21 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:21 Constant:
+0:21 3 (const int)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:21 direct index ( temp float)
+0:21 'v' ( in 4-component vector of float)
+0:21 Constant:
+0:21 2 (const int)
+0:21 direct index ( temp float)
+0:21 'v' ( in 4-component vector of float)
+0:21 Constant:
+0:21 2 (const int)
+0:22 move second child to first child ( temp 2-component vector of float)
+0:22 UV3: direct index for structure ( temp 2-component vector of float)
+0:22 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:22 Constant:
+0:22 4 (const int)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:22 direct index ( temp float)
+0:22 'v' ( in 4-component vector of float)
+0:22 Constant:
+0:22 3 (const int)
+0:22 direct index ( temp float)
+0:22 'v' ( in 4-component vector of float)
+0:22 Constant:
+0:22 3 (const int)
+0:23 Branch: Return with expression
+0:23 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Function Definition: main( ( temp void)
+0:16 Function Parameters:
+0:? Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? 'v' ( temp 4-component vector of float)
+0:? 'v' (layout( location=0) in 4-component vector of float)
+0:16 Sequence
+0:16 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Function Call: @main(vf4; ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:? 'v' ( temp 4-component vector of float)
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:16 pos: direct index for structure ( temp 4-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 0 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
+0:16 UV0: direct index for structure ( temp 2-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 1 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
+0:16 UV1: direct index for structure ( temp 2-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 2 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
+0:16 UV2: direct index for structure ( temp 2-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 3 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
+0:16 UV3: direct index for structure ( temp 2-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 4 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
+0:? '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
+0:? '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
+0:? '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
+0:? 'v' (layout( location=0) in 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:16 Function Definition: @main(vf4; ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Function Parameters:
+0:16 'v' ( in 4-component vector of float)
+0:? Sequence
+0:18 move second child to first child ( temp 4-component vector of float)
+0:18 pos: direct index for structure ( temp 4-component vector of float)
+0:18 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:18 Constant:
+0:18 0 (const int)
+0:18 'v' ( in 4-component vector of float)
+0:19 move second child to first child ( temp 2-component vector of float)
+0:19 UV0: direct index for structure ( temp 2-component vector of float)
+0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:19 Constant:
+0:19 1 (const int)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:19 direct index ( temp float)
+0:19 'v' ( in 4-component vector of float)
+0:19 Constant:
+0:19 0 (const int)
+0:19 direct index ( temp float)
+0:19 'v' ( in 4-component vector of float)
+0:19 Constant:
+0:19 0 (const int)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 UV1: direct index for structure ( temp 2-component vector of float)
+0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:20 Constant:
+0:20 2 (const int)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:20 direct index ( temp float)
+0:20 'v' ( in 4-component vector of float)
+0:20 Constant:
+0:20 1 (const int)
+0:20 direct index ( temp float)
+0:20 'v' ( in 4-component vector of float)
+0:20 Constant:
+0:20 1 (const int)
+0:21 move second child to first child ( temp 2-component vector of float)
+0:21 UV2: direct index for structure ( temp 2-component vector of float)
+0:21 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:21 Constant:
+0:21 3 (const int)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:21 direct index ( temp float)
+0:21 'v' ( in 4-component vector of float)
+0:21 Constant:
+0:21 2 (const int)
+0:21 direct index ( temp float)
+0:21 'v' ( in 4-component vector of float)
+0:21 Constant:
+0:21 2 (const int)
+0:22 move second child to first child ( temp 2-component vector of float)
+0:22 UV3: direct index for structure ( temp 2-component vector of float)
+0:22 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:22 Constant:
+0:22 4 (const int)
+0:? Construct vec2 ( temp 2-component vector of float)
+0:22 direct index ( temp float)
+0:22 'v' ( in 4-component vector of float)
+0:22 Constant:
+0:22 3 (const int)
+0:22 direct index ( temp float)
+0:22 'v' ( in 4-component vector of float)
+0:22 Constant:
+0:22 3 (const int)
+0:23 Branch: Return with expression
+0:23 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Function Definition: main( ( temp void)
+0:16 Function Parameters:
+0:? Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? 'v' ( temp 4-component vector of float)
+0:? 'v' (layout( location=0) in 4-component vector of float)
+0:16 Sequence
+0:16 move second child to first child ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Function Call: @main(vf4; ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:? 'v' ( temp 4-component vector of float)
+0:16 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:16 pos: direct index for structure ( temp 4-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 0 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
+0:16 UV0: direct index for structure ( temp 2-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 1 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
+0:16 UV1: direct index for structure ( temp 2-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 2 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
+0:16 UV2: direct index for structure ( temp 2-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 3 (const int)
+0:16 move second child to first child ( temp 2-component vector of float)
+0:? '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
+0:16 UV3: direct index for structure ( temp 2-component vector of float)
+0:16 'flattenTemp' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3})
+0:16 Constant:
+0:16 4 (const int)
+0:? Linker Objects
+0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
+0:? '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
+0:? '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
+0:? '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
+0:? 'v' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 84
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 61 68 72 75 78 81
+ Source HLSL 500
+ Name 4 "main"
+ Name 10 "S"
+ MemberName 10(S) 0 "pos"
+ MemberName 10(S) 1 "UV0"
+ MemberName 10(S) 2 "UV1"
+ MemberName 10(S) 3 "UV2"
+ MemberName 10(S) 4 "UV3"
+ Name 13 "@main(vf4;"
+ Name 12 "v"
+ Name 16 "s"
+ Name 59 "v"
+ Name 61 "v"
+ Name 63 "flattenTemp"
+ Name 64 "param"
+ Name 68 "@entryPointOutput.pos"
+ Name 72 "@entryPointOutput.UV0"
+ Name 75 "@entryPointOutput.UV1"
+ Name 78 "@entryPointOutput.UV2"
+ Name 81 "@entryPointOutput.UV3"
+ Decorate 61(v) Location 0
+ Decorate 68(@entryPointOutput.pos) Location 0
+ Decorate 72(@entryPointOutput.UV0) Location 1
+ Decorate 75(@entryPointOutput.UV1) Location 2
+ Decorate 78(@entryPointOutput.UV2) Location 3
+ Decorate 81(@entryPointOutput.UV3) Location 4
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeVector 6(float) 2
+ 10(S): TypeStruct 7(fvec4) 9(fvec2) 9(fvec2) 9(fvec2) 9(fvec2)
+ 11: TypeFunction 10(S) 8(ptr)
+ 15: TypePointer Function 10(S)
+ 17: TypeInt 32 1
+ 18: 17(int) Constant 0
+ 21: 17(int) Constant 1
+ 22: TypeInt 32 0
+ 23: 22(int) Constant 0
+ 24: TypePointer Function 6(float)
+ 30: TypePointer Function 9(fvec2)
+ 32: 17(int) Constant 2
+ 33: 22(int) Constant 1
+ 40: 17(int) Constant 3
+ 41: 22(int) Constant 2
+ 48: 17(int) Constant 4
+ 49: 22(int) Constant 3
+ 60: TypePointer Input 7(fvec4)
+ 61(v): 60(ptr) Variable Input
+ 67: TypePointer Output 7(fvec4)
+68(@entryPointOutput.pos): 67(ptr) Variable Output
+ 71: TypePointer Output 9(fvec2)
+72(@entryPointOutput.UV0): 71(ptr) Variable Output
+75(@entryPointOutput.UV1): 71(ptr) Variable Output
+78(@entryPointOutput.UV2): 71(ptr) Variable Output
+81(@entryPointOutput.UV3): 71(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 59(v): 8(ptr) Variable Function
+ 63(flattenTemp): 15(ptr) Variable Function
+ 64(param): 8(ptr) Variable Function
+ 62: 7(fvec4) Load 61(v)
+ Store 59(v) 62
+ 65: 7(fvec4) Load 59(v)
+ Store 64(param) 65
+ 66: 10(S) FunctionCall 13(@main(vf4;) 64(param)
+ Store 63(flattenTemp) 66
+ 69: 8(ptr) AccessChain 63(flattenTemp) 18
+ 70: 7(fvec4) Load 69
+ Store 68(@entryPointOutput.pos) 70
+ 73: 30(ptr) AccessChain 63(flattenTemp) 21
+ 74: 9(fvec2) Load 73
+ Store 72(@entryPointOutput.UV0) 74
+ 76: 30(ptr) AccessChain 63(flattenTemp) 32
+ 77: 9(fvec2) Load 76
+ Store 75(@entryPointOutput.UV1) 77
+ 79: 30(ptr) AccessChain 63(flattenTemp) 40
+ 80: 9(fvec2) Load 79
+ Store 78(@entryPointOutput.UV2) 80
+ 82: 30(ptr) AccessChain 63(flattenTemp) 48
+ 83: 9(fvec2) Load 82
+ Store 81(@entryPointOutput.UV3) 83
+ Return
+ FunctionEnd
+ 13(@main(vf4;): 10(S) Function None 11
+ 12(v): 8(ptr) FunctionParameter
+ 14: Label
+ 16(s): 15(ptr) Variable Function
+ 19: 7(fvec4) Load 12(v)
+ 20: 8(ptr) AccessChain 16(s) 18
+ Store 20 19
+ 25: 24(ptr) AccessChain 12(v) 23
+ 26: 6(float) Load 25
+ 27: 24(ptr) AccessChain 12(v) 23
+ 28: 6(float) Load 27
+ 29: 9(fvec2) CompositeConstruct 26 28
+ 31: 30(ptr) AccessChain 16(s) 21
+ Store 31 29
+ 34: 24(ptr) AccessChain 12(v) 33
+ 35: 6(float) Load 34
+ 36: 24(ptr) AccessChain 12(v) 33
+ 37: 6(float) Load 36
+ 38: 9(fvec2) CompositeConstruct 35 37
+ 39: 30(ptr) AccessChain 16(s) 32
+ Store 39 38
+ 42: 24(ptr) AccessChain 12(v) 41
+ 43: 6(float) Load 42
+ 44: 24(ptr) AccessChain 12(v) 41
+ 45: 6(float) Load 44
+ 46: 9(fvec2) CompositeConstruct 43 45
+ 47: 30(ptr) AccessChain 16(s) 40
+ Store 47 46
+ 50: 24(ptr) AccessChain 12(v) 49
+ 51: 6(float) Load 50
+ 52: 24(ptr) AccessChain 12(v) 49
+ 53: 6(float) Load 52
+ 54: 9(fvec2) CompositeConstruct 51 53
+ 55: 30(ptr) AccessChain 16(s) 48
+ Store 55 54
+ 56: 10(S) Load 16(s)
+ ReturnValue 56
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out
index caed636d1cf..5e2214a6adc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out
@@ -1,137 +1,163 @@
hlsl.semantic.geom
-Shader version: 450
+Shader version: 500
invocations = -1
max_vertices = 4
input primitive = triangles
output primitive = line_strip
0:? Sequence
-0:12 Function Definition: @main(u1[3];struct-S-f1-f1-u1-u1-i11; ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Function Parameters:
-0:12 'VertexID' ( in 3-element array of uint)
-0:12 'OutputStream' ( out structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:13 Function Definition: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:13 Function Parameters:
+0:13 'VertexID' ( in 3-element array of uint)
+0:13 'OutputStream' ( out structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
0:? Sequence
-0:14 Branch: Return with expression
-0:14 's' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Function Definition: main( ( temp void)
-0:12 Function Parameters:
+0:15 Sequence
+0:15 Sequence
+0:15 move second child to first child ( temp float)
+0:? 'OutputStream.clip0' ( out float Position)
+0:15 clip0: direct index for structure ( temp float)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 0 (const int)
+0:? Sequence
+0:15 move second child to first child ( temp float)
+0:15 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:15 Constant:
+0:15 0 (const int)
+0:15 clip0: direct index for structure ( temp float)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 1 (const int)
+0:? Sequence
+0:15 move second child to first child ( temp float)
+0:15 direct index ( out float CullDistance)
+0:? 'OutputStream.cull0' ( out 1-element array of float CullDistance)
+0:15 Constant:
+0:15 0 (const int)
+0:15 cull0: direct index for structure ( temp float)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 2 (const int)
+0:15 move second child to first child ( temp uint)
+0:? 'OutputStream.vpai' ( out uint ViewportIndex)
+0:15 vpai: direct index for structure ( temp uint)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 3 (const int)
+0:15 move second child to first child ( temp uint)
+0:? 'OutputStream.rtai' ( out uint Layer)
+0:15 rtai: direct index for structure ( temp uint)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 4 (const int)
+0:15 move second child to first child ( temp int)
+0:? 'OutputStream.ii' (layout( location=0) out int)
+0:15 ii: direct index for structure ( temp int)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 5 (const int)
+0:15 EmitVertex ( temp void)
+0:13 Function Definition: main( ( temp void)
+0:13 Function Parameters:
0:? Sequence
-0:12 move second child to first child ( temp 3-element array of uint)
+0:13 move second child to first child ( temp 3-element array of uint)
0:? 'VertexID' ( temp 3-element array of uint)
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
-0:12 Sequence
-0:12 move second child to first child ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Function Call: @main(u1[3];struct-S-f1-f1-u1-u1-i11; ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:? 'VertexID' ( temp 3-element array of uint)
-0:? 'OutputStream' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_clip0' ( out float ClipDistance)
-0:12 clip0: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_cull0' ( out float CullDistance)
-0:12 cull0: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 1 (const int)
-0:12 move second child to first child ( temp uint)
-0:? '@entryPointOutput_vpai' ( out uint ViewportIndex)
-0:12 vpai: direct index for structure ( temp uint)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 2 (const int)
-0:12 move second child to first child ( temp uint)
-0:? '@entryPointOutput_rtai' ( out uint Layer)
-0:12 rtai: direct index for structure ( temp uint)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 3 (const int)
-0:12 move second child to first child ( temp int)
-0:12 ii: direct index for structure ( temp int)
-0:12 '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:12 ii: direct index for structure ( temp int)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 4 (const int)
+0:13 Function Call: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
-0:? '@entryPointOutput_vpai' ( out uint ViewportIndex)
+0:? 'OutputStream.clip0' ( out float Position)
+0:? 'OutputStream.vpai' ( out uint ViewportIndex)
+0:? 'OutputStream.rtai' ( out uint Layer)
+0:? 'OutputStream.ii' (layout( location=0) out int)
+0:? 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:? 'OutputStream.cull0' ( out 1-element array of float CullDistance)
Linked geometry stage:
-Shader version: 450
+Shader version: 500
invocations = 1
max_vertices = 4
input primitive = triangles
output primitive = line_strip
0:? Sequence
-0:12 Function Definition: @main(u1[3];struct-S-f1-f1-u1-u1-i11; ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Function Parameters:
-0:12 'VertexID' ( in 3-element array of uint)
-0:12 'OutputStream' ( out structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:13 Function Definition: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:13 Function Parameters:
+0:13 'VertexID' ( in 3-element array of uint)
+0:13 'OutputStream' ( out structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
0:? Sequence
-0:14 Branch: Return with expression
-0:14 's' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Function Definition: main( ( temp void)
-0:12 Function Parameters:
+0:15 Sequence
+0:15 Sequence
+0:15 move second child to first child ( temp float)
+0:? 'OutputStream.clip0' ( out float Position)
+0:15 clip0: direct index for structure ( temp float)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 0 (const int)
+0:? Sequence
+0:15 move second child to first child ( temp float)
+0:15 direct index ( out float ClipDistance)
+0:? 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:15 Constant:
+0:15 0 (const int)
+0:15 clip0: direct index for structure ( temp float)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 1 (const int)
+0:? Sequence
+0:15 move second child to first child ( temp float)
+0:15 direct index ( out float CullDistance)
+0:? 'OutputStream.cull0' ( out 1-element array of float CullDistance)
+0:15 Constant:
+0:15 0 (const int)
+0:15 cull0: direct index for structure ( temp float)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 2 (const int)
+0:15 move second child to first child ( temp uint)
+0:? 'OutputStream.vpai' ( out uint ViewportIndex)
+0:15 vpai: direct index for structure ( temp uint)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 3 (const int)
+0:15 move second child to first child ( temp uint)
+0:? 'OutputStream.rtai' ( out uint Layer)
+0:15 rtai: direct index for structure ( temp uint)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 4 (const int)
+0:15 move second child to first child ( temp int)
+0:? 'OutputStream.ii' (layout( location=0) out int)
+0:15 ii: direct index for structure ( temp int)
+0:15 's' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
+0:15 Constant:
+0:15 5 (const int)
+0:15 EmitVertex ( temp void)
+0:13 Function Definition: main( ( temp void)
+0:13 Function Parameters:
0:? Sequence
-0:12 move second child to first child ( temp 3-element array of uint)
+0:13 move second child to first child ( temp 3-element array of uint)
0:? 'VertexID' ( temp 3-element array of uint)
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
-0:12 Sequence
-0:12 move second child to first child ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Function Call: @main(u1[3];struct-S-f1-f1-u1-u1-i11; ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:? 'VertexID' ( temp 3-element array of uint)
-0:? 'OutputStream' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_clip0' ( out float ClipDistance)
-0:12 clip0: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_cull0' ( out float CullDistance)
-0:12 cull0: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 1 (const int)
-0:12 move second child to first child ( temp uint)
-0:? '@entryPointOutput_vpai' ( out uint ViewportIndex)
-0:12 vpai: direct index for structure ( temp uint)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 2 (const int)
-0:12 move second child to first child ( temp uint)
-0:? '@entryPointOutput_rtai' ( out uint Layer)
-0:12 rtai: direct index for structure ( temp uint)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 3 (const int)
-0:12 move second child to first child ( temp int)
-0:12 ii: direct index for structure ( temp int)
-0:12 '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:12 ii: direct index for structure ( temp int)
-0:12 'flattenTemp' ( temp structure{ temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
-0:12 Constant:
-0:12 4 (const int)
+0:13 Function Call: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:? 'VertexID' ( temp 3-element array of uint)
+0:? 'OutputStream' ( temp structure{ temp float clip0, temp float clip0, temp float cull0, temp uint vpai, temp uint rtai, temp int ii})
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
0:? 'VertexID' (layout( location=0) in 3-element array of uint)
-0:? '@entryPointOutput_vpai' ( out uint ViewportIndex)
+0:? 'OutputStream.clip0' ( out float Position)
+0:? 'OutputStream.vpai' ( out uint ViewportIndex)
+0:? 'OutputStream.rtai' ( out uint Layer)
+0:? 'OutputStream.ii' (layout( location=0) out int)
+0:? 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:? 'OutputStream.cull0' ( out 1-element array of float CullDistance)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 62
+// Generated by (magic number): 80002
+// Id's are bound by 65
Capability Geometry
Capability ClipDistance
@@ -139,41 +165,42 @@ output primitive = line_strip
Capability MultiViewport
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Geometry 4 "main" 25 34 39 44 49 55
+ EntryPoint Geometry 4 "main" 20 29 34 40 45 50 57
ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputLineStrip
ExecutionMode 4 OutputVertices 4
+ Source HLSL 500
Name 4 "main"
Name 12 "S"
MemberName 12(S) 0 "clip0"
- MemberName 12(S) 1 "cull0"
- MemberName 12(S) 2 "vpai"
- MemberName 12(S) 3 "rtai"
- MemberName 12(S) 4 "ii"
- Name 17 "@main(u1[3];struct-S-f1-f1-u1-u1-i11;"
+ MemberName 12(S) 1 "clip0"
+ MemberName 12(S) 2 "cull0"
+ MemberName 12(S) 3 "vpai"
+ MemberName 12(S) 4 "rtai"
+ MemberName 12(S) 5 "ii"
+ Name 17 "@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;"
Name 15 "VertexID"
Name 16 "OutputStream"
- Name 19 "s"
- Name 23 "VertexID"
- Name 25 "VertexID"
- Name 27 "flattenTemp"
- Name 28 "OutputStream"
- Name 29 "param"
- Name 31 "param"
- Name 34 "@entryPointOutput_clip0"
- Name 39 "@entryPointOutput_cull0"
- Name 44 "@entryPointOutput_vpai"
- Name 49 "@entryPointOutput_rtai"
- Name 53 "S"
- MemberName 53(S) 0 "ii"
- Name 55 "@entryPointOutput"
- Decorate 25(VertexID) Location 0
- Decorate 34(@entryPointOutput_clip0) BuiltIn ClipDistance
- Decorate 39(@entryPointOutput_cull0) BuiltIn CullDistance
- Decorate 44(@entryPointOutput_vpai) BuiltIn ViewportIndex
- Decorate 49(@entryPointOutput_rtai) BuiltIn Layer
- Decorate 55(@entryPointOutput) Location 0
+ Name 20 "OutputStream.clip0"
+ Name 21 "s"
+ Name 29 "OutputStream.clip0"
+ Name 34 "OutputStream.cull0"
+ Name 40 "OutputStream.vpai"
+ Name 45 "OutputStream.rtai"
+ Name 50 "OutputStream.ii"
+ Name 55 "VertexID"
+ Name 57 "VertexID"
+ Name 59 "OutputStream"
+ Name 60 "param"
+ Name 62 "param"
+ Decorate 20(OutputStream.clip0) BuiltIn Position
+ Decorate 29(OutputStream.clip0) BuiltIn ClipDistance
+ Decorate 34(OutputStream.cull0) BuiltIn CullDistance
+ Decorate 40(OutputStream.vpai) BuiltIn ViewportIndex
+ Decorate 45(OutputStream.rtai) BuiltIn Layer
+ Decorate 50(OutputStream.ii) Location 0
+ Decorate 57(VertexID) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -182,65 +209,72 @@ output primitive = line_strip
9: TypePointer Function 8
10: TypeFloat 32
11: TypeInt 32 1
- 12(S): TypeStruct 10(float) 10(float) 6(int) 6(int) 11(int)
+ 12(S): TypeStruct 10(float) 10(float) 10(float) 6(int) 6(int) 11(int)
13: TypePointer Function 12(S)
- 14: TypeFunction 12(S) 9(ptr) 13(ptr)
- 24: TypePointer Input 8
- 25(VertexID): 24(ptr) Variable Input
- 33: TypePointer Output 10(float)
-34(@entryPointOutput_clip0): 33(ptr) Variable Output
- 35: 11(int) Constant 0
- 36: TypePointer Function 10(float)
-39(@entryPointOutput_cull0): 33(ptr) Variable Output
- 40: 11(int) Constant 1
- 43: TypePointer Output 6(int)
-44(@entryPointOutput_vpai): 43(ptr) Variable Output
- 45: 11(int) Constant 2
- 46: TypePointer Function 6(int)
-49(@entryPointOutput_rtai): 43(ptr) Variable Output
- 50: 11(int) Constant 3
- 53(S): TypeStruct 11(int)
- 54: TypePointer Output 53(S)
-55(@entryPointOutput): 54(ptr) Variable Output
- 56: 11(int) Constant 4
- 57: TypePointer Function 11(int)
- 60: TypePointer Output 11(int)
+ 14: TypeFunction 2 9(ptr) 13(ptr)
+ 19: TypePointer Output 10(float)
+20(OutputStream.clip0): 19(ptr) Variable Output
+ 22: 11(int) Constant 0
+ 23: TypePointer Function 10(float)
+ 26: 6(int) Constant 1
+ 27: TypeArray 10(float) 26
+ 28: TypePointer Output 27
+29(OutputStream.clip0): 28(ptr) Variable Output
+ 30: 11(int) Constant 1
+34(OutputStream.cull0): 28(ptr) Variable Output
+ 35: 11(int) Constant 2
+ 39: TypePointer Output 6(int)
+40(OutputStream.vpai): 39(ptr) Variable Output
+ 41: 11(int) Constant 3
+ 42: TypePointer Function 6(int)
+45(OutputStream.rtai): 39(ptr) Variable Output
+ 46: 11(int) Constant 4
+ 49: TypePointer Output 11(int)
+50(OutputStream.ii): 49(ptr) Variable Output
+ 51: 11(int) Constant 5
+ 52: TypePointer Function 11(int)
+ 56: TypePointer Input 8
+ 57(VertexID): 56(ptr) Variable Input
4(main): 2 Function None 3
5: Label
- 23(VertexID): 9(ptr) Variable Function
- 27(flattenTemp): 13(ptr) Variable Function
-28(OutputStream): 13(ptr) Variable Function
- 29(param): 9(ptr) Variable Function
- 31(param): 13(ptr) Variable Function
- 26: 8 Load 25(VertexID)
- Store 23(VertexID) 26
- 30: 8 Load 23(VertexID)
- Store 29(param) 30
- 32: 12(S) FunctionCall 17(@main(u1[3];struct-S-f1-f1-u1-u1-i11;) 29(param) 31(param)
- Store 27(flattenTemp) 32
- 37: 36(ptr) AccessChain 27(flattenTemp) 35
- 38: 10(float) Load 37
- Store 34(@entryPointOutput_clip0) 38
- 41: 36(ptr) AccessChain 27(flattenTemp) 40
- 42: 10(float) Load 41
- Store 39(@entryPointOutput_cull0) 42
- 47: 46(ptr) AccessChain 27(flattenTemp) 45
- 48: 6(int) Load 47
- Store 44(@entryPointOutput_vpai) 48
- 51: 46(ptr) AccessChain 27(flattenTemp) 50
- 52: 6(int) Load 51
- Store 49(@entryPointOutput_rtai) 52
- 58: 57(ptr) AccessChain 27(flattenTemp) 56
- 59: 11(int) Load 58
- 61: 60(ptr) AccessChain 55(@entryPointOutput) 35
- Store 61 59
+ 55(VertexID): 9(ptr) Variable Function
+59(OutputStream): 13(ptr) Variable Function
+ 60(param): 9(ptr) Variable Function
+ 62(param): 13(ptr) Variable Function
+ 58: 8 Load 57(VertexID)
+ Store 55(VertexID) 58
+ 61: 8 Load 55(VertexID)
+ Store 60(param) 61
+ 63: 2 FunctionCall 17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;) 60(param) 62(param)
+ 64: 12(S) Load 62(param)
+ Store 59(OutputStream) 64
Return
FunctionEnd
-17(@main(u1[3];struct-S-f1-f1-u1-u1-i11;): 12(S) Function None 14
+17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;): 2 Function None 14
15(VertexID): 9(ptr) FunctionParameter
16(OutputStream): 13(ptr) FunctionParameter
18: Label
- 19(s): 13(ptr) Variable Function
- 20: 12(S) Load 19(s)
- ReturnValue 20
+ 21(s): 13(ptr) Variable Function
+ 24: 23(ptr) AccessChain 21(s) 22
+ 25: 10(float) Load 24
+ Store 20(OutputStream.clip0) 25
+ 31: 23(ptr) AccessChain 21(s) 30
+ 32: 10(float) Load 31
+ 33: 19(ptr) AccessChain 29(OutputStream.clip0) 22
+ Store 33 32
+ 36: 23(ptr) AccessChain 21(s) 35
+ 37: 10(float) Load 36
+ 38: 19(ptr) AccessChain 34(OutputStream.cull0) 22
+ Store 38 37
+ 43: 42(ptr) AccessChain 21(s) 41
+ 44: 6(int) Load 43
+ Store 40(OutputStream.vpai) 44
+ 47: 42(ptr) AccessChain 21(s) 46
+ 48: 6(int) Load 47
+ Store 45(OutputStream.rtai) 48
+ 53: 52(ptr) AccessChain 21(s) 51
+ 54: 11(int) Load 53
+ Store 50(OutputStream.ii) 54
+ EmitVertex
+ Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.vert.out
index 0b088563af5..3b4ac559f03 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.vert.out
@@ -1,370 +1,330 @@
hlsl.semantic.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
-0:12 Function Definition: @main(struct-S-f1-f1-f1-f1-f1-f1-i11; ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Function Parameters:
-0:12 'ins' ( in structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
+0:10 Function Definition: @main(struct-S-f1-f1-f1-f1-i11; ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Function Parameters:
+0:10 'ins' ( in structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
0:? Sequence
-0:14 Branch: Return with expression
-0:14 's' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Function Definition: main( ( temp void)
-0:12 Function Parameters:
+0:12 Branch: Return with expression
+0:12 's' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Function Definition: main( ( temp void)
+0:10 Function Parameters:
0:? Sequence
-0:12 Sequence
-0:12 move second child to first child ( temp float)
-0:12 clip: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:? 'clip' (layout( location=0) in float)
-0:12 move second child to first child ( temp float)
-0:12 clip0: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 1 (const int)
-0:? 'clip0' (layout( location=1) in float)
-0:12 move second child to first child ( temp float)
-0:12 clip7: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 2 (const int)
-0:? 'clip7' (layout( location=2) in float)
-0:12 move second child to first child ( temp float)
-0:12 cull: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 3 (const int)
-0:? 'cull' (layout( location=3) in float)
-0:12 move second child to first child ( temp float)
-0:12 cull2: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 4 (const int)
-0:? 'cull2' (layout( location=4) in float)
-0:12 move second child to first child ( temp float)
-0:12 cull5: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 5 (const int)
-0:? 'cull5' (layout( location=5) in float)
-0:12 move second child to first child ( temp int)
-0:12 ii: direct index for structure ( temp int)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 6 (const int)
-0:? 'ii' ( in int InstanceIndex)
-0:12 Sequence
-0:12 move second child to first child ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Function Call: @main(struct-S-f1-f1-f1-f1-f1-f1-i11; ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_clip7' ( out float ClipDistance)
-0:12 clip: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_clip7' ( out float ClipDistance)
-0:12 clip0: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 1 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_clip7' ( out float ClipDistance)
-0:12 clip7: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 2 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_cull5' ( out float CullDistance)
-0:12 cull: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 3 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_cull5' ( out float CullDistance)
-0:12 cull2: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 4 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_cull5' ( out float CullDistance)
-0:12 cull5: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 5 (const int)
-0:12 move second child to first child ( temp int)
-0:12 ii: direct index for structure ( temp int)
-0:12 '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:12 ii: direct index for structure ( temp int)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 6 (const int)
+0:10 Sequence
+0:10 move second child to first child ( temp float)
+0:10 clip0: direct index for structure ( temp float)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 0 (const int)
+0:? 'ins.clip0' (layout( location=0) in float)
+0:10 move second child to first child ( temp float)
+0:10 clip1: direct index for structure ( temp float)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 1 (const int)
+0:? 'ins.clip1' (layout( location=1) in float)
+0:10 move second child to first child ( temp float)
+0:10 cull0: direct index for structure ( temp float)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 2 (const int)
+0:? 'ins.cull0' (layout( location=0) in float)
+0:10 move second child to first child ( temp float)
+0:10 cull1: direct index for structure ( temp float)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 3 (const int)
+0:? 'ins.cull1' (layout( location=1) in float)
+0:10 move second child to first child ( temp int)
+0:10 ii: direct index for structure ( temp int)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 4 (const int)
+0:? 'ins.ii' ( in int InstanceIndex)
+0:10 Sequence
+0:10 move second child to first child ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Function Call: @main(struct-S-f1-f1-f1-f1-i11; ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:? Sequence
+0:10 move second child to first child ( temp float)
+0:10 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
+0:10 Constant:
+0:10 0 (const int)
+0:10 clip0: direct index for structure ( temp float)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 0 (const int)
+0:? Sequence
+0:10 move second child to first child ( temp float)
+0:10 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
+0:10 Constant:
+0:10 1 (const int)
+0:10 clip1: direct index for structure ( temp float)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 1 (const int)
+0:? Sequence
+0:10 move second child to first child ( temp float)
+0:10 direct index ( out float CullDistance)
+0:? '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
+0:10 Constant:
+0:10 0 (const int)
+0:10 cull0: direct index for structure ( temp float)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 2 (const int)
+0:? Sequence
+0:10 move second child to first child ( temp float)
+0:10 direct index ( out float CullDistance)
+0:? '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
+0:10 Constant:
+0:10 1 (const int)
+0:10 cull1: direct index for structure ( temp float)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 3 (const int)
+0:10 move second child to first child ( temp int)
+0:? '@entryPointOutput.ii' (layout( location=0) out int)
+0:10 ii: direct index for structure ( temp int)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 4 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
-0:? 'clip' (layout( location=0) in float)
-0:? 'clip0' (layout( location=1) in float)
-0:? 'clip7' (layout( location=2) in float)
-0:? 'cull' (layout( location=3) in float)
-0:? 'cull2' (layout( location=4) in float)
-0:? 'cull5' (layout( location=5) in float)
-0:? 'ii' ( in int InstanceIndex)
+0:? '@entryPointOutput.ii' (layout( location=0) out int)
+0:? 'ins.ii' ( in int InstanceIndex)
+0:? 'ins.clip0' (layout( location=0) in float)
+0:? 'ins.clip1' (layout( location=1) in float)
+0:? 'ins.cull0' (layout( location=0) in float)
+0:? 'ins.cull1' (layout( location=1) in float)
+0:? '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
+0:? '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
-0:12 Function Definition: @main(struct-S-f1-f1-f1-f1-f1-f1-i11; ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Function Parameters:
-0:12 'ins' ( in structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
+0:10 Function Definition: @main(struct-S-f1-f1-f1-f1-i11; ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Function Parameters:
+0:10 'ins' ( in structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
0:? Sequence
-0:14 Branch: Return with expression
-0:14 's' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Function Definition: main( ( temp void)
-0:12 Function Parameters:
+0:12 Branch: Return with expression
+0:12 's' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Function Definition: main( ( temp void)
+0:10 Function Parameters:
0:? Sequence
-0:12 Sequence
-0:12 move second child to first child ( temp float)
-0:12 clip: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:? 'clip' (layout( location=0) in float)
-0:12 move second child to first child ( temp float)
-0:12 clip0: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 1 (const int)
-0:? 'clip0' (layout( location=1) in float)
-0:12 move second child to first child ( temp float)
-0:12 clip7: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 2 (const int)
-0:? 'clip7' (layout( location=2) in float)
-0:12 move second child to first child ( temp float)
-0:12 cull: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 3 (const int)
-0:? 'cull' (layout( location=3) in float)
-0:12 move second child to first child ( temp float)
-0:12 cull2: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 4 (const int)
-0:? 'cull2' (layout( location=4) in float)
-0:12 move second child to first child ( temp float)
-0:12 cull5: direct index for structure ( temp float)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 5 (const int)
-0:? 'cull5' (layout( location=5) in float)
-0:12 move second child to first child ( temp int)
-0:12 ii: direct index for structure ( temp int)
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 6 (const int)
-0:? 'ii' ( in int InstanceIndex)
-0:12 Sequence
-0:12 move second child to first child ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Function Call: @main(struct-S-f1-f1-f1-f1-f1-f1-i11; ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:? 'ins' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_clip7' ( out float ClipDistance)
-0:12 clip: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_clip7' ( out float ClipDistance)
-0:12 clip0: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 1 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_clip7' ( out float ClipDistance)
-0:12 clip7: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 2 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_cull5' ( out float CullDistance)
-0:12 cull: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 3 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_cull5' ( out float CullDistance)
-0:12 cull2: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 4 (const int)
-0:12 move second child to first child ( temp float)
-0:? '@entryPointOutput_cull5' ( out float CullDistance)
-0:12 cull5: direct index for structure ( temp float)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 5 (const int)
-0:12 move second child to first child ( temp int)
-0:12 ii: direct index for structure ( temp int)
-0:12 '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
-0:12 Constant:
-0:12 0 (const int)
-0:12 ii: direct index for structure ( temp int)
-0:12 'flattenTemp' ( temp structure{ temp float clip, temp float clip0, temp float clip7, temp float cull, temp float cull2, temp float cull5, temp int ii})
-0:12 Constant:
-0:12 6 (const int)
+0:10 Sequence
+0:10 move second child to first child ( temp float)
+0:10 clip0: direct index for structure ( temp float)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 0 (const int)
+0:? 'ins.clip0' (layout( location=0) in float)
+0:10 move second child to first child ( temp float)
+0:10 clip1: direct index for structure ( temp float)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 1 (const int)
+0:? 'ins.clip1' (layout( location=1) in float)
+0:10 move second child to first child ( temp float)
+0:10 cull0: direct index for structure ( temp float)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 2 (const int)
+0:? 'ins.cull0' (layout( location=0) in float)
+0:10 move second child to first child ( temp float)
+0:10 cull1: direct index for structure ( temp float)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 3 (const int)
+0:? 'ins.cull1' (layout( location=1) in float)
+0:10 move second child to first child ( temp int)
+0:10 ii: direct index for structure ( temp int)
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 4 (const int)
+0:? 'ins.ii' ( in int InstanceIndex)
+0:10 Sequence
+0:10 move second child to first child ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Function Call: @main(struct-S-f1-f1-f1-f1-i11; ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:? 'ins' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:? Sequence
+0:10 move second child to first child ( temp float)
+0:10 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
+0:10 Constant:
+0:10 0 (const int)
+0:10 clip0: direct index for structure ( temp float)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 0 (const int)
+0:? Sequence
+0:10 move second child to first child ( temp float)
+0:10 direct index ( out float ClipDistance)
+0:? '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
+0:10 Constant:
+0:10 1 (const int)
+0:10 clip1: direct index for structure ( temp float)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 1 (const int)
+0:? Sequence
+0:10 move second child to first child ( temp float)
+0:10 direct index ( out float CullDistance)
+0:? '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
+0:10 Constant:
+0:10 0 (const int)
+0:10 cull0: direct index for structure ( temp float)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 2 (const int)
+0:? Sequence
+0:10 move second child to first child ( temp float)
+0:10 direct index ( out float CullDistance)
+0:? '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
+0:10 Constant:
+0:10 1 (const int)
+0:10 cull1: direct index for structure ( temp float)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 3 (const int)
+0:10 move second child to first child ( temp int)
+0:? '@entryPointOutput.ii' (layout( location=0) out int)
+0:10 ii: direct index for structure ( temp int)
+0:10 'flattenTemp' ( temp structure{ temp float clip0, temp float clip1, temp float cull0, temp float cull1, temp int ii})
+0:10 Constant:
+0:10 4 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
-0:? 'clip' (layout( location=0) in float)
-0:? 'clip0' (layout( location=1) in float)
-0:? 'clip7' (layout( location=2) in float)
-0:? 'cull' (layout( location=3) in float)
-0:? 'cull2' (layout( location=4) in float)
-0:? 'cull5' (layout( location=5) in float)
-0:? 'ii' ( in int InstanceIndex)
+0:? '@entryPointOutput.ii' (layout( location=0) out int)
+0:? 'ins.ii' ( in int InstanceIndex)
+0:? 'ins.clip0' (layout( location=0) in float)
+0:? 'ins.clip1' (layout( location=1) in float)
+0:? 'ins.cull0' (layout( location=0) in float)
+0:? 'ins.cull1' (layout( location=1) in float)
+0:? '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
+0:? '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 77
+// Generated by (magic number): 80002
+// Id's are bound by 70
Capability Shader
Capability ClipDistance
Capability CullDistance
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 21 26 30 34 38 42 47 56 63 72
+ EntryPoint Vertex 4 "main" 21 26 30 34 39 51 59 67
+ Source HLSL 500
Name 4 "main"
Name 8 "S"
- MemberName 8(S) 0 "clip"
- MemberName 8(S) 1 "clip0"
- MemberName 8(S) 2 "clip7"
- MemberName 8(S) 3 "cull"
- MemberName 8(S) 4 "cull2"
- MemberName 8(S) 5 "cull5"
- MemberName 8(S) 6 "ii"
- Name 12 "@main(struct-S-f1-f1-f1-f1-f1-f1-i11;"
+ MemberName 8(S) 0 "clip0"
+ MemberName 8(S) 1 "clip1"
+ MemberName 8(S) 2 "cull0"
+ MemberName 8(S) 3 "cull1"
+ MemberName 8(S) 4 "ii"
+ Name 12 "@main(struct-S-f1-f1-f1-f1-i11;"
Name 11 "ins"
Name 14 "s"
Name 18 "ins"
- Name 21 "clip"
- Name 26 "clip0"
- Name 30 "clip7"
- Name 34 "cull"
- Name 38 "cull2"
- Name 42 "cull5"
- Name 47 "ii"
- Name 51 "flattenTemp"
- Name 52 "param"
- Name 56 "@entryPointOutput_clip7"
- Name 63 "@entryPointOutput_cull5"
- Name 70 "S"
- MemberName 70(S) 0 "ii"
- Name 72 "@entryPointOutput"
- Decorate 21(clip) Location 0
- Decorate 26(clip0) Location 1
- Decorate 30(clip7) Location 2
- Decorate 34(cull) Location 3
- Decorate 38(cull2) Location 4
- Decorate 42(cull5) Location 5
- Decorate 47(ii) BuiltIn InstanceIndex
- Decorate 56(@entryPointOutput_clip7) BuiltIn ClipDistance
- Decorate 63(@entryPointOutput_cull5) BuiltIn CullDistance
- Decorate 72(@entryPointOutput) Location 0
+ Name 21 "ins.clip0"
+ Name 26 "ins.clip1"
+ Name 30 "ins.cull0"
+ Name 34 "ins.cull1"
+ Name 39 "ins.ii"
+ Name 43 "flattenTemp"
+ Name 44 "param"
+ Name 51 "@entryPointOutput.clip1"
+ Name 59 "@entryPointOutput.cull1"
+ Name 67 "@entryPointOutput.ii"
+ Decorate 21(ins.clip0) Location 0
+ Decorate 26(ins.clip1) Location 1
+ Decorate 30(ins.cull0) Location 0
+ Decorate 34(ins.cull1) Location 1
+ Decorate 39(ins.ii) BuiltIn InstanceIndex
+ Decorate 51(@entryPointOutput.clip1) BuiltIn ClipDistance
+ Decorate 59(@entryPointOutput.cull1) BuiltIn CullDistance
+ Decorate 67(@entryPointOutput.ii) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeInt 32 1
- 8(S): TypeStruct 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 7(int)
+ 8(S): TypeStruct 6(float) 6(float) 6(float) 6(float) 7(int)
9: TypePointer Function 8(S)
10: TypeFunction 8(S) 9(ptr)
19: 7(int) Constant 0
20: TypePointer Input 6(float)
- 21(clip): 20(ptr) Variable Input
+ 21(ins.clip0): 20(ptr) Variable Input
23: TypePointer Function 6(float)
25: 7(int) Constant 1
- 26(clip0): 20(ptr) Variable Input
+ 26(ins.clip1): 20(ptr) Variable Input
29: 7(int) Constant 2
- 30(clip7): 20(ptr) Variable Input
+ 30(ins.cull0): 20(ptr) Variable Input
33: 7(int) Constant 3
- 34(cull): 20(ptr) Variable Input
+ 34(ins.cull1): 20(ptr) Variable Input
37: 7(int) Constant 4
- 38(cull2): 20(ptr) Variable Input
- 41: 7(int) Constant 5
- 42(cull5): 20(ptr) Variable Input
- 45: 7(int) Constant 6
- 46: TypePointer Input 7(int)
- 47(ii): 46(ptr) Variable Input
- 49: TypePointer Function 7(int)
- 55: TypePointer Output 6(float)
-56(@entryPointOutput_clip7): 55(ptr) Variable Output
-63(@entryPointOutput_cull5): 55(ptr) Variable Output
- 70(S): TypeStruct 7(int)
- 71: TypePointer Output 70(S)
-72(@entryPointOutput): 71(ptr) Variable Output
- 75: TypePointer Output 7(int)
+ 38: TypePointer Input 7(int)
+ 39(ins.ii): 38(ptr) Variable Input
+ 41: TypePointer Function 7(int)
+ 47: TypeInt 32 0
+ 48: 47(int) Constant 2
+ 49: TypeArray 6(float) 48
+ 50: TypePointer Output 49
+51(@entryPointOutput.clip1): 50(ptr) Variable Output
+ 54: TypePointer Output 6(float)
+59(@entryPointOutput.cull1): 50(ptr) Variable Output
+ 66: TypePointer Output 7(int)
+67(@entryPointOutput.ii): 66(ptr) Variable Output
4(main): 2 Function None 3
5: Label
18(ins): 9(ptr) Variable Function
- 51(flattenTemp): 9(ptr) Variable Function
- 52(param): 9(ptr) Variable Function
- 22: 6(float) Load 21(clip)
+ 43(flattenTemp): 9(ptr) Variable Function
+ 44(param): 9(ptr) Variable Function
+ 22: 6(float) Load 21(ins.clip0)
24: 23(ptr) AccessChain 18(ins) 19
Store 24 22
- 27: 6(float) Load 26(clip0)
+ 27: 6(float) Load 26(ins.clip1)
28: 23(ptr) AccessChain 18(ins) 25
Store 28 27
- 31: 6(float) Load 30(clip7)
+ 31: 6(float) Load 30(ins.cull0)
32: 23(ptr) AccessChain 18(ins) 29
Store 32 31
- 35: 6(float) Load 34(cull)
+ 35: 6(float) Load 34(ins.cull1)
36: 23(ptr) AccessChain 18(ins) 33
Store 36 35
- 39: 6(float) Load 38(cull2)
- 40: 23(ptr) AccessChain 18(ins) 37
- Store 40 39
- 43: 6(float) Load 42(cull5)
- 44: 23(ptr) AccessChain 18(ins) 41
- Store 44 43
- 48: 7(int) Load 47(ii)
- 50: 49(ptr) AccessChain 18(ins) 45
- Store 50 48
- 53: 8(S) Load 18(ins)
- Store 52(param) 53
- 54: 8(S) FunctionCall 12(@main(struct-S-f1-f1-f1-f1-f1-f1-i11;) 52(param)
- Store 51(flattenTemp) 54
- 57: 23(ptr) AccessChain 51(flattenTemp) 19
- 58: 6(float) Load 57
- Store 56(@entryPointOutput_clip7) 58
- 59: 23(ptr) AccessChain 51(flattenTemp) 25
- 60: 6(float) Load 59
- Store 56(@entryPointOutput_clip7) 60
- 61: 23(ptr) AccessChain 51(flattenTemp) 29
- 62: 6(float) Load 61
- Store 56(@entryPointOutput_clip7) 62
- 64: 23(ptr) AccessChain 51(flattenTemp) 33
- 65: 6(float) Load 64
- Store 63(@entryPointOutput_cull5) 65
- 66: 23(ptr) AccessChain 51(flattenTemp) 37
- 67: 6(float) Load 66
- Store 63(@entryPointOutput_cull5) 67
- 68: 23(ptr) AccessChain 51(flattenTemp) 41
- 69: 6(float) Load 68
- Store 63(@entryPointOutput_cull5) 69
- 73: 49(ptr) AccessChain 51(flattenTemp) 45
- 74: 7(int) Load 73
- 76: 75(ptr) AccessChain 72(@entryPointOutput) 19
- Store 76 74
+ 40: 7(int) Load 39(ins.ii)
+ 42: 41(ptr) AccessChain 18(ins) 37
+ Store 42 40
+ 45: 8(S) Load 18(ins)
+ Store 44(param) 45
+ 46: 8(S) FunctionCall 12(@main(struct-S-f1-f1-f1-f1-i11;) 44(param)
+ Store 43(flattenTemp) 46
+ 52: 23(ptr) AccessChain 43(flattenTemp) 19
+ 53: 6(float) Load 52
+ 55: 54(ptr) AccessChain 51(@entryPointOutput.clip1) 19
+ Store 55 53
+ 56: 23(ptr) AccessChain 43(flattenTemp) 25
+ 57: 6(float) Load 56
+ 58: 54(ptr) AccessChain 51(@entryPointOutput.clip1) 25
+ Store 58 57
+ 60: 23(ptr) AccessChain 43(flattenTemp) 29
+ 61: 6(float) Load 60
+ 62: 54(ptr) AccessChain 59(@entryPointOutput.cull1) 19
+ Store 62 61
+ 63: 23(ptr) AccessChain 43(flattenTemp) 33
+ 64: 6(float) Load 63
+ 65: 54(ptr) AccessChain 59(@entryPointOutput.cull1) 25
+ Store 65 64
+ 68: 41(ptr) AccessChain 43(flattenTemp) 37
+ 69: 7(int) Load 68
+ Store 67(@entryPointOutput.ii) 69
Return
FunctionEnd
-12(@main(struct-S-f1-f1-f1-f1-f1-f1-i11;): 8(S) Function None 10
+12(@main(struct-S-f1-f1-f1-f1-i11;): 8(S) Function None 10
11(ins): 9(ptr) FunctionParameter
13: Label
14(s): 9(ptr) Variable Function
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semicolons.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semicolons.frag.out
index 9856b5af422..40bd1282b09 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semicolons.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semicolons.frag.out
@@ -1,5 +1,5 @@
hlsl.semicolons.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: MyFunc( ( temp void)
@@ -26,19 +26,19 @@ gl_FragCoord origin is upper left
0:? Sequence
0:13 Sequence
0:13 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:13 color: direct index for structure ( temp 4-component vector of float)
0:13 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:13 Constant:
0:13 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: MyFunc( ( temp void)
@@ -65,16 +65,16 @@ gl_FragCoord origin is upper left
0:? Sequence
0:13 Sequence
0:13 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:13 color: direct index for structure ( temp 4-component vector of float)
0:13 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:13 Constant:
0:13 0 (const int)
0:? Linker Objects
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 31
Capability Shader
@@ -82,6 +82,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 28
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 6 "MyFunc("
Name 8 "MyFunc2("
@@ -89,8 +90,8 @@ gl_FragCoord origin is upper left
MemberName 12(PS_OUTPUT) 0 "color"
Name 14 "@main("
Name 17 "ps_output"
- Name 28 "color"
- Decorate 28(color) Location 0
+ Name 28 "@entryPointOutput.color"
+ Decorate 28(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
10: TypeFloat 32
@@ -104,12 +105,12 @@ gl_FragCoord origin is upper left
21: 11(fvec4) ConstantComposite 20 20 20 20
22: TypePointer Function 11(fvec4)
27: TypePointer Output 11(fvec4)
- 28(color): 27(ptr) Variable Output
+28(@entryPointOutput.color): 27(ptr) Variable Output
4(main): 2 Function None 3
5: Label
29:12(PS_OUTPUT) FunctionCall 14(@main()
30: 11(fvec4) CompositeExtract 29 0
- Store 28(color) 30
+ Store 28(@entryPointOutput.color) 30
Return
FunctionEnd
6(MyFunc(): 2 Function None 3
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConv.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConv.frag.out
index 07fa9fd3d52..1fee20cf3a8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConv.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConv.frag.out
@@ -1,5 +1,5 @@
hlsl.shapeConv.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4;f1; ( temp 4-component vector of float)
@@ -95,21 +95,66 @@ gl_FragCoord origin is upper left
0:22 Construct vec4 ( temp 4-component vector of float)
0:22 'f' ( in float)
0:22 'v' ( temp 4-component vector of float)
-0:26 Compare Equal ( temp bool)
-0:26 'f1' ( temp 1-component vector of float)
-0:26 Construct float ( temp 1-component vector of float)
-0:26 'v' ( temp 4-component vector of float)
-0:27 Compare Less Than ( temp bool)
-0:27 Construct float ( temp 1-component vector of float)
-0:27 'v' ( temp 4-component vector of float)
-0:27 'f1' ( temp 1-component vector of float)
+0:26 Equal ( temp 4-component vector of bool)
+0:26 Construct vec4 ( temp 4-component vector of float)
+0:26 'f1' ( temp 1-component vector of float)
+0:26 'v' ( temp 4-component vector of float)
+0:27 Compare Less Than ( temp 4-component vector of bool)
+0:27 'v' ( temp 4-component vector of float)
+0:27 Construct vec4 ( temp 4-component vector of float)
+0:27 'f1' ( temp 1-component vector of float)
0:28 Construct float ( temp float)
0:28 'f1' ( temp 1-component vector of float)
0:29 Construct vec3 ( temp 3-component vector of float)
0:29 Construct float ( temp float)
0:29 'f1' ( temp 1-component vector of float)
-0:31 Branch: Return with expression
-0:31 'input' ( in 4-component vector of float)
+0:36 right-shift ( temp 3-component vector of uint)
+0:36 Construct uvec3 ( temp 3-component vector of uint)
+0:36 'ui' ( temp uint)
+0:36 'ui3' ( temp 3-component vector of uint)
+0:37 right-shift ( temp 3-component vector of uint)
+0:37 'ui3' ( temp 3-component vector of uint)
+0:37 'ui' ( temp uint)
+0:39 multiply second child into first child ( temp 4-component vector of float)
+0:39 'v' ( temp 4-component vector of float)
+0:39 'f1' ( temp 1-component vector of float)
+0:40 multiply second child into first child ( temp 1-component vector of float)
+0:40 'f1' ( temp 1-component vector of float)
+0:40 Construct float ( temp 1-component vector of float)
+0:40 'v' ( temp 4-component vector of float)
+0:42 Sequence
+0:42 move second child to first child ( temp 3-component vector of float)
+0:42 'mixed' ( temp 3-component vector of float)
+0:42 component-wise multiply ( temp 3-component vector of float)
+0:42 'u' ( temp 3-component vector of float)
+0:42 Construct vec3 ( temp 3-component vector of float)
+0:42 'v' ( temp 4-component vector of float)
+0:43 move second child to first child ( temp float)
+0:43 'f' ( in float)
+0:43 Construct float ( in float)
+0:43 'u' ( temp 3-component vector of float)
+0:44 move second child to first child ( temp 1-component vector of float)
+0:44 'f1' ( temp 1-component vector of float)
+0:44 Construct float ( temp 1-component vector of float)
+0:44 'u' ( temp 3-component vector of float)
+0:45 Sequence
+0:45 move second child to first child ( temp float)
+0:45 'sf' ( temp float)
+0:45 Construct float ( temp float)
+0:45 'v' ( temp 4-component vector of float)
+0:46 Sequence
+0:46 move second child to first child ( temp 1-component vector of float)
+0:46 'sf1' ( temp 1-component vector of float)
+0:46 Construct float ( temp 1-component vector of float)
+0:46 'v' ( temp 4-component vector of float)
+0:48 Branch: Return with expression
+0:48 component-wise multiply ( temp 4-component vector of float)
+0:48 'input' ( in 4-component vector of float)
+0:48 Constant:
+0:48 3.000000
+0:48 3.000000
+0:48 3.000000
+0:48 3.000000
0:? Linker Objects
@@ -117,7 +162,7 @@ Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4;f1; ( temp 4-component vector of float)
@@ -213,32 +258,78 @@ gl_FragCoord origin is upper left
0:22 Construct vec4 ( temp 4-component vector of float)
0:22 'f' ( in float)
0:22 'v' ( temp 4-component vector of float)
-0:26 Compare Equal ( temp bool)
-0:26 'f1' ( temp 1-component vector of float)
-0:26 Construct float ( temp 1-component vector of float)
-0:26 'v' ( temp 4-component vector of float)
-0:27 Compare Less Than ( temp bool)
-0:27 Construct float ( temp 1-component vector of float)
-0:27 'v' ( temp 4-component vector of float)
-0:27 'f1' ( temp 1-component vector of float)
+0:26 Equal ( temp 4-component vector of bool)
+0:26 Construct vec4 ( temp 4-component vector of float)
+0:26 'f1' ( temp 1-component vector of float)
+0:26 'v' ( temp 4-component vector of float)
+0:27 Compare Less Than ( temp 4-component vector of bool)
+0:27 'v' ( temp 4-component vector of float)
+0:27 Construct vec4 ( temp 4-component vector of float)
+0:27 'f1' ( temp 1-component vector of float)
0:28 Construct float ( temp float)
0:28 'f1' ( temp 1-component vector of float)
0:29 Construct vec3 ( temp 3-component vector of float)
0:29 Construct float ( temp float)
0:29 'f1' ( temp 1-component vector of float)
-0:31 Branch: Return with expression
-0:31 'input' ( in 4-component vector of float)
+0:36 right-shift ( temp 3-component vector of uint)
+0:36 Construct uvec3 ( temp 3-component vector of uint)
+0:36 'ui' ( temp uint)
+0:36 'ui3' ( temp 3-component vector of uint)
+0:37 right-shift ( temp 3-component vector of uint)
+0:37 'ui3' ( temp 3-component vector of uint)
+0:37 'ui' ( temp uint)
+0:39 multiply second child into first child ( temp 4-component vector of float)
+0:39 'v' ( temp 4-component vector of float)
+0:39 'f1' ( temp 1-component vector of float)
+0:40 multiply second child into first child ( temp 1-component vector of float)
+0:40 'f1' ( temp 1-component vector of float)
+0:40 Construct float ( temp 1-component vector of float)
+0:40 'v' ( temp 4-component vector of float)
+0:42 Sequence
+0:42 move second child to first child ( temp 3-component vector of float)
+0:42 'mixed' ( temp 3-component vector of float)
+0:42 component-wise multiply ( temp 3-component vector of float)
+0:42 'u' ( temp 3-component vector of float)
+0:42 Construct vec3 ( temp 3-component vector of float)
+0:42 'v' ( temp 4-component vector of float)
+0:43 move second child to first child ( temp float)
+0:43 'f' ( in float)
+0:43 Construct float ( in float)
+0:43 'u' ( temp 3-component vector of float)
+0:44 move second child to first child ( temp 1-component vector of float)
+0:44 'f1' ( temp 1-component vector of float)
+0:44 Construct float ( temp 1-component vector of float)
+0:44 'u' ( temp 3-component vector of float)
+0:45 Sequence
+0:45 move second child to first child ( temp float)
+0:45 'sf' ( temp float)
+0:45 Construct float ( temp float)
+0:45 'v' ( temp 4-component vector of float)
+0:46 Sequence
+0:46 move second child to first child ( temp 1-component vector of float)
+0:46 'sf1' ( temp 1-component vector of float)
+0:46 Construct float ( temp 1-component vector of float)
+0:46 'v' ( temp 4-component vector of float)
+0:48 Branch: Return with expression
+0:48 component-wise multiply ( temp 4-component vector of float)
+0:48 'input' ( in 4-component vector of float)
+0:48 Constant:
+0:48 3.000000
+0:48 3.000000
+0:48 3.000000
+0:48 3.000000
0:? Linker Objects
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 85
+// Generated by (magic number): 80002
+// Id's are bound by 127
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 13 "PixelShaderFunction(vf4;f1;"
Name 11 "input"
@@ -250,6 +341,11 @@ gl_FragCoord origin is upper left
Name 34 "MyVal"
Name 37 "foo"
Name 70 "f1"
+ Name 83 "ui"
+ Name 88 "ui3"
+ Name 103 "mixed"
+ Name 115 "sf"
+ Name 118 "sf1"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -281,6 +377,11 @@ gl_FragCoord origin is upper left
56: TypeInt 32 0
57: 56(int) Constant 0
62: TypeVector 41(bool) 4
+ 82: TypePointer Function 56(int)
+ 85: TypeVector 56(int) 3
+ 87: TypePointer Function 85(ivec3)
+ 122: 6(float) Constant 1077936128
+ 123: 7(fvec4) ConstantComposite 122 122 122 122
4(main): 2 Function None 3
5: Label
Return
@@ -296,6 +397,11 @@ gl_FragCoord origin is upper left
34(MyVal): 23(ptr) Variable Function
37(foo): 23(ptr) Variable Function
70(f1): 9(ptr) Variable Function
+ 83(ui): 82(ptr) Variable Function
+ 88(ui3): 87(ptr) Variable Function
+ 103(mixed): 23(ptr) Variable Function
+ 115(sf): 9(ptr) Variable Function
+ 118(sf1): 9(ptr) Variable Function
Store 15(v) 17
Store 15(v) 19
20: 6(float) Load 12(f)
@@ -331,16 +437,55 @@ gl_FragCoord origin is upper left
68: 62(bvec4) FOrdNotEqual 66 67
69: 41(bool) Any 68
71: 6(float) Load 70(f1)
- 72: 7(fvec4) Load 15(v)
- 73: 6(float) CompositeExtract 72 0
- 74: 41(bool) FOrdEqual 71 73
+ 72: 7(fvec4) CompositeConstruct 71 71 71 71
+ 73: 7(fvec4) Load 15(v)
+ 74: 62(bvec4) FOrdEqual 72 73
75: 7(fvec4) Load 15(v)
- 76: 6(float) CompositeExtract 75 0
- 77: 6(float) Load 70(f1)
- 78: 41(bool) FOrdLessThan 76 77
+ 76: 6(float) Load 70(f1)
+ 77: 7(fvec4) CompositeConstruct 76 76 76 76
+ 78: 62(bvec4) FOrdLessThan 75 77
79: 6(float) Load 70(f1)
80: 6(float) Load 70(f1)
81: 22(fvec3) CompositeConstruct 80 80 80
- 82: 7(fvec4) Load 11(input)
- ReturnValue 82
+ 84: 56(int) Load 83(ui)
+ 86: 85(ivec3) CompositeConstruct 84 84 84
+ 89: 85(ivec3) Load 88(ui3)
+ 90: 85(ivec3) ShiftRightLogical 86 89
+ 91: 85(ivec3) Load 88(ui3)
+ 92: 56(int) Load 83(ui)
+ 93: 85(ivec3) CompositeConstruct 92 92 92
+ 94: 85(ivec3) ShiftRightLogical 91 93
+ 95: 6(float) Load 70(f1)
+ 96: 7(fvec4) Load 15(v)
+ 97: 7(fvec4) CompositeConstruct 95 95 95 95
+ 98: 7(fvec4) FMul 96 97
+ Store 15(v) 98
+ 99: 7(fvec4) Load 15(v)
+ 100: 6(float) CompositeExtract 99 0
+ 101: 6(float) Load 70(f1)
+ 102: 6(float) FMul 101 100
+ Store 70(f1) 102
+ 104: 22(fvec3) Load 24(u)
+ 105: 7(fvec4) Load 15(v)
+ 106: 6(float) CompositeExtract 105 0
+ 107: 6(float) CompositeExtract 105 1
+ 108: 6(float) CompositeExtract 105 2
+ 109: 22(fvec3) CompositeConstruct 106 107 108
+ 110: 22(fvec3) FMul 104 109
+ Store 103(mixed) 110
+ 111: 22(fvec3) Load 24(u)
+ 112: 6(float) CompositeExtract 111 0
+ Store 12(f) 112
+ 113: 22(fvec3) Load 24(u)
+ 114: 6(float) CompositeExtract 113 0
+ Store 70(f1) 114
+ 116: 7(fvec4) Load 15(v)
+ 117: 6(float) CompositeExtract 116 0
+ Store 115(sf) 117
+ 119: 7(fvec4) Load 15(v)
+ 120: 6(float) CompositeExtract 119 0
+ Store 118(sf1) 120
+ 121: 7(fvec4) Load 11(input)
+ 124: 7(fvec4) FMul 121 123
+ ReturnValue 124
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConvRet.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConvRet.frag.out
index 54ca7fa8631..432cd6f0be0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConvRet.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shapeConvRet.frag.out
@@ -1,5 +1,5 @@
hlsl.shapeConvRet.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: foo( ( temp 3-component vector of int)
@@ -35,7 +35,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: foo( ( temp 3-component vector of int)
@@ -68,7 +68,7 @@ gl_FragCoord origin is upper left
0:? 'f' (layout( location=0) in float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 35
Capability Shader
@@ -76,6 +76,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 28 31
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "foo("
Name 16 "@main(f1;"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out
new file mode 100644
index 00000000000..57b32e55e1e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out
@@ -0,0 +1,225 @@
+hlsl.shift.per-set.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:34 Function Definition: @main( ( temp 4-component vector of float)
+0:34 Function Parameters:
+0:? Sequence
+0:35 't1' (layout( set=1 binding=1) uniform texture1D)
+0:36 't2' (layout( set=1 binding=2) uniform texture2D)
+0:37 't3' (layout( set=2 binding=1) uniform texture3D)
+0:38 direct index (layout( row_major std430) buffer 4-component vector of float)
+0:38 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:38 't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:38 Constant:
+0:38 0 (const uint)
+0:38 Constant:
+0:38 0 (const int)
+0:39 indirect index (layout( row_major std430) buffer uint)
+0:39 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:39 't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:39 Constant:
+0:39 0 (const uint)
+0:39 right-shift ( temp int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 2 (const int)
+0:40 't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
+0:42 's1' (layout( set=1 binding=1) uniform sampler)
+0:43 's2' (layout( set=2 binding=2) uniform sampler)
+0:45 'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
+0:46 'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
+0:47 'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
+0:49 imageLoad ( temp float)
+0:49 'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
+0:49 Constant:
+0:49 0 (const int)
+0:50 indirect index (layout( row_major std430) buffer uint)
+0:50 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:50 'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:50 Constant:
+0:50 0 (const uint)
+0:50 right-shift ( temp int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:51 direct index (layout( row_major std430) buffer float)
+0:51 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
+0:51 'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:51 Constant:
+0:51 0 (const uint)
+0:51 Constant:
+0:51 0 (const int)
+0:52 'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:53 'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:55 cb1: direct index for structure (layout( row_major std140) uniform int)
+0:55 'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
+0:55 Constant:
+0:55 0 (const uint)
+0:56 tb1: direct index for structure (layout( row_major std430) buffer int)
+0:56 'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
+0:56 Constant:
+0:56 0 (const uint)
+0:58 Branch: Return with expression
+0:58 Constant:
+0:58 0.000000
+0:58 0.000000
+0:58 0.000000
+0:58 0.000000
+0:34 Function Definition: main( ( temp void)
+0:34 Function Parameters:
+0:? Sequence
+0:34 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:34 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 's1' (layout( set=1 binding=1) uniform sampler)
+0:? 's2' (layout( set=2 binding=2) uniform sampler)
+0:? 't1' (layout( set=1 binding=1) uniform texture1D)
+0:? 't2' (layout( set=1 binding=2) uniform texture2D)
+0:? 't3' (layout( set=2 binding=1) uniform texture3D)
+0:? 't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:? 't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
+0:? 'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
+0:? 'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
+0:? 'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
+0:? 'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
+0:? 'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:? 'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:? 'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:? 'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:? 'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
+0:? 'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:34 Function Definition: @main( ( temp 4-component vector of float)
+0:34 Function Parameters:
+0:? Sequence
+0:35 't1' (layout( set=1 binding=1) uniform texture1D)
+0:36 't2' (layout( set=1 binding=2) uniform texture2D)
+0:37 't3' (layout( set=2 binding=1) uniform texture3D)
+0:38 direct index (layout( row_major std430) buffer 4-component vector of float)
+0:38 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:38 't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:38 Constant:
+0:38 0 (const uint)
+0:38 Constant:
+0:38 0 (const int)
+0:39 indirect index (layout( row_major std430) buffer uint)
+0:39 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:39 't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:39 Constant:
+0:39 0 (const uint)
+0:39 right-shift ( temp int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 2 (const int)
+0:40 't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
+0:42 's1' (layout( set=1 binding=1) uniform sampler)
+0:43 's2' (layout( set=2 binding=2) uniform sampler)
+0:45 'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
+0:46 'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
+0:47 'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
+0:49 imageLoad ( temp float)
+0:49 'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
+0:49 Constant:
+0:49 0 (const int)
+0:50 indirect index (layout( row_major std430) buffer uint)
+0:50 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:50 'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:50 Constant:
+0:50 0 (const uint)
+0:50 right-shift ( temp int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:51 direct index (layout( row_major std430) buffer float)
+0:51 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
+0:51 'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:51 Constant:
+0:51 0 (const uint)
+0:51 Constant:
+0:51 0 (const int)
+0:52 'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:53 'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:55 cb1: direct index for structure (layout( row_major std140) uniform int)
+0:55 'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
+0:55 Constant:
+0:55 0 (const uint)
+0:56 tb1: direct index for structure (layout( row_major std430) buffer int)
+0:56 'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
+0:56 Constant:
+0:56 0 (const uint)
+0:58 Branch: Return with expression
+0:58 Constant:
+0:58 0.000000
+0:58 0.000000
+0:58 0.000000
+0:58 0.000000
+0:34 Function Definition: main( ( temp void)
+0:34 Function Parameters:
+0:? Sequence
+0:34 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:34 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 's1' (layout( set=1 binding=1) uniform sampler)
+0:? 's2' (layout( set=2 binding=2) uniform sampler)
+0:? 't1' (layout( set=1 binding=1) uniform texture1D)
+0:? 't2' (layout( set=1 binding=2) uniform texture2D)
+0:? 't3' (layout( set=2 binding=1) uniform texture3D)
+0:? 't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:? 't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
+0:? 'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
+0:? 'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
+0:? 'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
+0:? 'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
+0:? 'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:? 'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:? 'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:? 'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:? 'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
+0:? 'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+Uniform reflection:
+t1: offset -1, type 8b5d, size 1, index -1, binding 21
+t2: offset -1, type 8b5e, size 1, index -1, binding 22
+t3: offset -1, type 8b5f, size 1, index -1, binding 26
+t4.@data: offset 0, type 8b52, size 1, index 0, binding -1
+t5.@data: offset 0, type 1405, size 0, index 1, binding -1
+t6: offset -1, type 8dc2, size 1, index -1, binding 23
+s1: offset -1, type 0, size 1, index -1, binding 11
+s2: offset -1, type 0, size 1, index -1, binding 17
+u1: offset -1, type 904c, size 1, index -1, binding 31
+u2: offset -1, type 904d, size 1, index -1, binding 42
+u3: offset -1, type 904e, size 1, index -1, binding 43
+u4: offset -1, type 9051, size 1, index -1, binding 34
+u5.@data: offset 0, type 1405, size 0, index 2, binding -1
+u6.@data: offset 0, type 1406, size 1, index 3, binding -1
+cb1: offset 0, type 1404, size 1, index 4, binding -1
+tb1: offset 0, type 1404, size 1, index 5, binding -1
+
+Uniform block reflection:
+t4: offset -1, type ffffffff, size 0, index -1, binding 21
+t5: offset -1, type ffffffff, size 0, index -1, binding 22
+u5: offset -1, type ffffffff, size 0, index -1, binding 44
+u6: offset -1, type ffffffff, size 0, index -1, binding 34
+cb: offset -1, type ffffffff, size 4, index -1, binding 51
+tb: offset -1, type ffffffff, size 4, index -1, binding 27
+
+Vertex attribute reflection:
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sin.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sin.frag.out
index 1f96440ef4b..51ee0a75a6c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sin.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sin.frag.out
@@ -1,5 +1,5 @@
hlsl.sin.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -27,7 +27,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -52,7 +52,7 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 26
Capability Shader
@@ -60,6 +60,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 19 22
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "@PixelShaderFunction(vf4;"
Name 10 "input"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.snorm.uav.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.snorm.uav.comp.out
new file mode 100644
index 00000000000..1db3da5eef1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.snorm.uav.comp.out
@@ -0,0 +1,212 @@
+hlsl.snorm.uav.comp
+Shader version: 500
+local_size = (16, 16, 1)
+0:? Sequence
+0:12 Function Definition: @main(vu3; ( temp void)
+0:12 Function Parameters:
+0:12 'tid' ( in 3-component vector of uint)
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp 4-component vector of float)
+0:13 'storeTemp' ( temp 4-component vector of float)
+0:13 add ( temp 4-component vector of float)
+0:13 textureFetch ( temp 4-component vector of float)
+0:13 'ResultInS' (layout( binding=1) uniform texture3D)
+0:13 'tid' ( in 3-component vector of uint)
+0:13 Constant:
+0:13 0 (const int)
+0:13 uf4: direct index for structure ( uniform 4-component vector of float)
+0:13 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
+0:13 Constant:
+0:13 0 (const uint)
+0:13 imageStore ( temp void)
+0:13 'ResultOutS' (layout( binding=1 rgba32f) uniform image3D)
+0:13 'tid' ( in 3-component vector of uint)
+0:13 'storeTemp' ( temp 4-component vector of float)
+0:13 'storeTemp' ( temp 4-component vector of float)
+0:14 Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 'storeTemp' ( temp 4-component vector of float)
+0:14 textureFetch ( temp 4-component vector of float)
+0:14 'ResultInU' (layout( binding=0) uniform texture3D)
+0:14 'tid' ( in 3-component vector of uint)
+0:14 Constant:
+0:14 0 (const int)
+0:14 imageStore ( temp void)
+0:14 'ResultOutU' (layout( binding=0 rgba32f) uniform image3D)
+0:14 'tid' ( in 3-component vector of uint)
+0:14 'storeTemp' ( temp 4-component vector of float)
+0:14 'storeTemp' ( temp 4-component vector of float)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 3-component vector of uint)
+0:? 'tid' ( temp 3-component vector of uint)
+0:? 'tid' ( in 3-component vector of uint GlobalInvocationID)
+0:12 Function Call: @main(vu3; ( temp void)
+0:? 'tid' ( temp 3-component vector of uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
+0:? 'ResultInU' (layout( binding=0) uniform texture3D)
+0:? 'ResultOutU' (layout( binding=0 rgba32f) uniform image3D)
+0:? 'ResultInS' (layout( binding=1) uniform texture3D)
+0:? 'ResultOutS' (layout( binding=1 rgba32f) uniform image3D)
+0:? 'tid' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (16, 16, 1)
+0:? Sequence
+0:12 Function Definition: @main(vu3; ( temp void)
+0:12 Function Parameters:
+0:12 'tid' ( in 3-component vector of uint)
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp 4-component vector of float)
+0:13 'storeTemp' ( temp 4-component vector of float)
+0:13 add ( temp 4-component vector of float)
+0:13 textureFetch ( temp 4-component vector of float)
+0:13 'ResultInS' (layout( binding=1) uniform texture3D)
+0:13 'tid' ( in 3-component vector of uint)
+0:13 Constant:
+0:13 0 (const int)
+0:13 uf4: direct index for structure ( uniform 4-component vector of float)
+0:13 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
+0:13 Constant:
+0:13 0 (const uint)
+0:13 imageStore ( temp void)
+0:13 'ResultOutS' (layout( binding=1 rgba32f) uniform image3D)
+0:13 'tid' ( in 3-component vector of uint)
+0:13 'storeTemp' ( temp 4-component vector of float)
+0:13 'storeTemp' ( temp 4-component vector of float)
+0:14 Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 'storeTemp' ( temp 4-component vector of float)
+0:14 textureFetch ( temp 4-component vector of float)
+0:14 'ResultInU' (layout( binding=0) uniform texture3D)
+0:14 'tid' ( in 3-component vector of uint)
+0:14 Constant:
+0:14 0 (const int)
+0:14 imageStore ( temp void)
+0:14 'ResultOutU' (layout( binding=0 rgba32f) uniform image3D)
+0:14 'tid' ( in 3-component vector of uint)
+0:14 'storeTemp' ( temp 4-component vector of float)
+0:14 'storeTemp' ( temp 4-component vector of float)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp 3-component vector of uint)
+0:? 'tid' ( temp 3-component vector of uint)
+0:? 'tid' ( in 3-component vector of uint GlobalInvocationID)
+0:12 Function Call: @main(vu3; ( temp void)
+0:? 'tid' ( temp 3-component vector of uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
+0:? 'ResultInU' (layout( binding=0) uniform texture3D)
+0:? 'ResultOutU' (layout( binding=0 rgba32f) uniform image3D)
+0:? 'ResultInS' (layout( binding=1) uniform texture3D)
+0:? 'ResultOutS' (layout( binding=1 rgba32f) uniform image3D)
+0:? 'tid' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 54
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 49
+ ExecutionMode 4 LocalSize 16 16 1
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "@main(vu3;"
+ Name 10 "tid"
+ Name 16 "storeTemp"
+ Name 19 "ResultInS"
+ Name 25 "$Global"
+ MemberName 25($Global) 0 "uf4"
+ Name 27 ""
+ Name 34 "ResultOutS"
+ Name 38 "storeTemp"
+ Name 39 "ResultInU"
+ Name 43 "ResultOutU"
+ Name 47 "tid"
+ Name 49 "tid"
+ Name 51 "param"
+ Decorate 19(ResultInS) DescriptorSet 0
+ Decorate 19(ResultInS) Binding 1
+ MemberDecorate 25($Global) 0 Offset 0
+ Decorate 25($Global) Block
+ Decorate 27 DescriptorSet 0
+ Decorate 34(ResultOutS) DescriptorSet 0
+ Decorate 34(ResultOutS) Binding 1
+ Decorate 39(ResultInU) DescriptorSet 0
+ Decorate 39(ResultInU) Binding 0
+ Decorate 43(ResultOutU) DescriptorSet 0
+ Decorate 43(ResultOutU) Binding 0
+ Decorate 49(tid) BuiltIn GlobalInvocationId
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypeVector 6(int) 3
+ 8: TypePointer Function 7(ivec3)
+ 9: TypeFunction 2 8(ptr)
+ 13: TypeFloat 32
+ 14: TypeVector 13(float) 4
+ 15: TypePointer Function 14(fvec4)
+ 17: TypeImage 13(float) 3D sampled format:Unknown
+ 18: TypePointer UniformConstant 17
+ 19(ResultInS): 18(ptr) Variable UniformConstant
+ 22: TypeInt 32 1
+ 23: 22(int) Constant 0
+ 25($Global): TypeStruct 14(fvec4)
+ 26: TypePointer Uniform 25($Global)
+ 27: 26(ptr) Variable Uniform
+ 28: TypePointer Uniform 14(fvec4)
+ 32: TypeImage 13(float) 3D nonsampled format:Rgba32f
+ 33: TypePointer UniformConstant 32
+ 34(ResultOutS): 33(ptr) Variable UniformConstant
+ 39(ResultInU): 18(ptr) Variable UniformConstant
+ 43(ResultOutU): 33(ptr) Variable UniformConstant
+ 48: TypePointer Input 7(ivec3)
+ 49(tid): 48(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 47(tid): 8(ptr) Variable Function
+ 51(param): 8(ptr) Variable Function
+ 50: 7(ivec3) Load 49(tid)
+ Store 47(tid) 50
+ 52: 7(ivec3) Load 47(tid)
+ Store 51(param) 52
+ 53: 2 FunctionCall 11(@main(vu3;) 51(param)
+ Return
+ FunctionEnd
+ 11(@main(vu3;): 2 Function None 9
+ 10(tid): 8(ptr) FunctionParameter
+ 12: Label
+ 16(storeTemp): 15(ptr) Variable Function
+ 38(storeTemp): 15(ptr) Variable Function
+ 20: 17 Load 19(ResultInS)
+ 21: 7(ivec3) Load 10(tid)
+ 24: 14(fvec4) ImageFetch 20 21 Lod 23
+ 29: 28(ptr) AccessChain 27 23
+ 30: 14(fvec4) Load 29
+ 31: 14(fvec4) FAdd 24 30
+ Store 16(storeTemp) 31
+ 35: 32 Load 34(ResultOutS)
+ 36: 7(ivec3) Load 10(tid)
+ 37: 14(fvec4) Load 16(storeTemp)
+ ImageWrite 35 36 37
+ 40: 17 Load 39(ResultInU)
+ 41: 7(ivec3) Load 10(tid)
+ 42: 14(fvec4) ImageFetch 40 41 Lod 23
+ Store 38(storeTemp) 42
+ 44: 32 Load 43(ResultOutU)
+ 45: 7(ivec3) Load 10(tid)
+ 46: 14(fvec4) Load 38(storeTemp)
+ ImageWrite 44 45 46
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.staticMemberFunction.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.staticMemberFunction.frag.out
index e8a98cb247d..08d0d20b2f6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.staticMemberFunction.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.staticMemberFunction.frag.out
@@ -1,5 +1,5 @@
hlsl.staticMemberFunction.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: Test::staticMemFun(vf4; ( global 4-component vector of float)
@@ -60,7 +60,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: Test::staticMemFun(vf4; ( global 4-component vector of float)
@@ -118,7 +118,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 54
Capability Shader
@@ -126,6 +126,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 52
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "Test::staticMemFun(vf4;"
Name 10 "a"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.string.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.string.frag.out
index c4a118f6b95..893e49d1659 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.string.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.string.frag.out
@@ -1,5 +1,5 @@
hlsl.string.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main(f1; ( temp float)
@@ -26,7 +26,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10 Function Definition: @main(f1; ( temp float)
@@ -50,7 +50,7 @@ gl_FragCoord origin is upper left
0:? 'f' (layout( location=0) in float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24
Capability Shader
@@ -58,6 +58,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 17 20
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 10 "@main(f1;"
Name 9 "f"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out
index c23d663c985..dcc493d7d3b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out
@@ -1,5 +1,5 @@
hlsl.stringtoken.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:16 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -22,7 +22,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:16 Sequence
0:16 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:16 Color: direct index for structure ( temp 4-component vector of float)
0:16 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:16 Constant:
@@ -30,13 +30,13 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'TestTexture' ( uniform texture2D)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float TestUF})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:16 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
@@ -59,7 +59,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:16 Sequence
0:16 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:16 Color: direct index for structure ( temp 4-component vector of float)
0:16 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:16 Constant:
@@ -67,10 +67,10 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'TestTexture' ( uniform texture2D)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float TestUF})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 34
Capability Shader
@@ -78,17 +78,18 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 25
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
Name 10 "@main("
Name 13 "psout"
- Name 25 "Color"
+ Name 25 "@entryPointOutput.Color"
Name 30 "TestTexture"
Name 31 "$Global"
MemberName 31($Global) 0 "TestUF"
Name 33 ""
- Decorate 25(Color) Location 0
+ Decorate 25(@entryPointOutput.Color) Location 0
Decorate 30(TestTexture) DescriptorSet 0
MemberDecorate 31($Global) 0 Offset 0
Decorate 31($Global) Block
@@ -107,7 +108,7 @@ gl_FragCoord origin is upper left
18: 7(fvec4) ConstantComposite 16 16 16 17
19: TypePointer Function 7(fvec4)
24: TypePointer Output 7(fvec4)
- 25(Color): 24(ptr) Variable Output
+25(@entryPointOutput.Color): 24(ptr) Variable Output
28: TypeImage 6(float) 2D sampled format:Unknown
29: TypePointer UniformConstant 28
30(TestTexture): 29(ptr) Variable UniformConstant
@@ -118,7 +119,7 @@ gl_FragCoord origin is upper left
5: Label
26:8(PS_OUTPUT) FunctionCall 10(@main()
27: 7(fvec4) CompositeExtract 26 0
- Store 25(Color) 27
+ Store 25(@entryPointOutput.Color) 27
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out
index c01e8fa7e03..c540c16203e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out
@@ -3,7 +3,7 @@ WARNING: 0:26: 'register' : ignoring shader_profile
WARNING: 0:27: 'register' : ignoring shader_profile
WARNING: 0:30: 'register' : ignoring shader_profile
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:40 Function Definition: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; ( temp 4-component vector of float)
@@ -43,70 +43,49 @@ gl_FragCoord origin is upper left
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 0 (const int)
-0:40 a: direct index for structure ( smooth temp 4-component vector of float)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 0 (const int)
+0:? 's.a' (layout( location=1) smooth in 4-component vector of float)
0:40 move second child to first child ( temp bool)
0:40 b: direct index for structure ( temp bool)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 1 (const int)
-0:40 b: direct index for structure ( flat temp bool)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 1 (const int)
+0:? 's.b' (layout( location=2) flat in bool)
0:40 move second child to first child ( temp 1-component vector of float)
0:40 c: direct index for structure ( temp 1-component vector of float)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 2 (const int)
-0:40 c: direct index for structure ( centroid noperspective temp 1-component vector of float)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 2 (const int)
+0:? 's.c' (layout( location=3) centroid noperspective in 1-component vector of float)
0:40 move second child to first child ( temp 2-component vector of float)
0:40 d: direct index for structure ( temp 2-component vector of float)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 3 (const int)
-0:40 d: direct index for structure ( centroid sample temp 2-component vector of float)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 3 (const int)
+0:? 's.d' (layout( location=4) centroid sample in 2-component vector of float)
0:40 move second child to first child ( temp bool)
0:40 ff1: direct index for structure ( temp bool)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 4 (const int)
-0:? 's_ff1' ( in bool Face)
+0:? 's.ff1' ( flat in bool Face)
0:40 move second child to first child ( temp bool)
0:40 ff2: direct index for structure ( temp bool)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 5 (const int)
-0:40 ff2: direct index for structure ( temp bool)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 4 (const int)
+0:? 's.ff2' (layout( location=5) flat in bool)
0:40 move second child to first child ( temp bool)
0:40 ff3: direct index for structure ( temp bool)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 6 (const int)
-0:40 ff3: direct index for structure ( temp bool)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 5 (const int)
+0:? 's.ff3' (layout( location=6) flat in bool)
0:40 move second child to first child ( temp 4-component vector of float)
0:40 ff4: direct index for structure ( temp 4-component vector of float)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 7 (const int)
-0:40 ff4: direct index for structure ( temp 4-component vector of float)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 6 (const int)
+0:? 's.ff4' (layout( location=7) in 4-component vector of float)
0:40 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:40 Function Call: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; ( temp 4-component vector of float)
@@ -117,14 +96,20 @@ gl_FragCoord origin is upper left
0:? 's2' ( global structure{ temp 4-component vector of float i})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
-0:? 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:? 's_ff1' ( in bool Face)
+0:? 's.ff1' ( flat in bool Face)
+0:? 's.a' (layout( location=1) smooth in 4-component vector of float)
+0:? 's.b' (layout( location=2) flat in bool)
+0:? 's.c' (layout( location=3) centroid noperspective in 1-component vector of float)
+0:? 's.d' (layout( location=4) centroid sample in 2-component vector of float)
+0:? 's.ff2' (layout( location=5) flat in bool)
+0:? 's.ff3' (layout( location=6) flat in bool)
+0:? 's.ff4' (layout( location=7) in 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:40 Function Definition: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; ( temp 4-component vector of float)
@@ -164,70 +149,49 @@ gl_FragCoord origin is upper left
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 0 (const int)
-0:40 a: direct index for structure ( smooth temp 4-component vector of float)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 0 (const int)
+0:? 's.a' (layout( location=1) smooth in 4-component vector of float)
0:40 move second child to first child ( temp bool)
0:40 b: direct index for structure ( temp bool)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 1 (const int)
-0:40 b: direct index for structure ( flat temp bool)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 1 (const int)
+0:? 's.b' (layout( location=2) flat in bool)
0:40 move second child to first child ( temp 1-component vector of float)
0:40 c: direct index for structure ( temp 1-component vector of float)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 2 (const int)
-0:40 c: direct index for structure ( centroid noperspective temp 1-component vector of float)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 2 (const int)
+0:? 's.c' (layout( location=3) centroid noperspective in 1-component vector of float)
0:40 move second child to first child ( temp 2-component vector of float)
0:40 d: direct index for structure ( temp 2-component vector of float)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 3 (const int)
-0:40 d: direct index for structure ( centroid sample temp 2-component vector of float)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 3 (const int)
+0:? 's.d' (layout( location=4) centroid sample in 2-component vector of float)
0:40 move second child to first child ( temp bool)
0:40 ff1: direct index for structure ( temp bool)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 4 (const int)
-0:? 's_ff1' ( in bool Face)
+0:? 's.ff1' ( flat in bool Face)
0:40 move second child to first child ( temp bool)
0:40 ff2: direct index for structure ( temp bool)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 5 (const int)
-0:40 ff2: direct index for structure ( temp bool)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 4 (const int)
+0:? 's.ff2' (layout( location=5) flat in bool)
0:40 move second child to first child ( temp bool)
0:40 ff3: direct index for structure ( temp bool)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 6 (const int)
-0:40 ff3: direct index for structure ( temp bool)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 5 (const int)
+0:? 's.ff3' (layout( location=6) flat in bool)
0:40 move second child to first child ( temp 4-component vector of float)
0:40 ff4: direct index for structure ( temp 4-component vector of float)
0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
0:40 Constant:
0:40 7 (const int)
-0:40 ff4: direct index for structure ( temp 4-component vector of float)
-0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40 Constant:
-0:40 6 (const int)
+0:? 's.ff4' (layout( location=7) in 4-component vector of float)
0:40 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:40 Function Call: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; ( temp 4-component vector of float)
@@ -238,18 +202,25 @@ gl_FragCoord origin is upper left
0:? 's2' ( global structure{ temp 4-component vector of float i})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
-0:? 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:? 's_ff1' ( in bool Face)
+0:? 's.ff1' ( flat in bool Face)
+0:? 's.a' (layout( location=1) smooth in 4-component vector of float)
+0:? 's.b' (layout( location=2) flat in bool)
+0:? 's.c' (layout( location=3) centroid noperspective in 1-component vector of float)
+0:? 's.d' (layout( location=4) centroid sample in 2-component vector of float)
+0:? 's.ff2' (layout( location=5) flat in bool)
+0:? 's.ff3' (layout( location=6) flat in bool)
+0:? 's.ff4' (layout( location=7) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 105
+// Generated by (magic number): 80002
+// Id's are bound by 102
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "PixelShaderFunction" 51 56 79 94
+ EntryPoint Fragment 4 "PixelShaderFunction" 51 54 59 65 71 76 80 84 87 91
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "IN_S"
MemberName 11(IN_S) 0 "a"
@@ -277,46 +248,53 @@ gl_FragCoord origin is upper left
Name 49 "input"
Name 51 "input"
Name 53 "s"
- Name 54 "IN_S"
- MemberName 54(IN_S) 0 "a"
- MemberName 54(IN_S) 1 "b"
- MemberName 54(IN_S) 2 "c"
- MemberName 54(IN_S) 3 "d"
- MemberName 54(IN_S) 4 "ff2"
- MemberName 54(IN_S) 5 "ff3"
- MemberName 54(IN_S) 6 "ff4"
- Name 56 "s"
- Name 79 "s_ff1"
- Name 94 "@entryPointOutput"
- Name 95 "param"
- Name 97 "param"
- Name 101 "myS"
- MemberName 101(myS) 0 "b"
- MemberName 101(myS) 1 "c"
- MemberName 101(myS) 2 "a"
- MemberName 101(myS) 3 "d"
- Name 102 "$Global"
- MemberName 102($Global) 0 "s1"
- MemberName 102($Global) 1 "ff5"
- MemberName 102($Global) 2 "ff6"
- Name 104 ""
+ Name 54 "s.a"
+ Name 59 "s.b"
+ Name 65 "s.c"
+ Name 71 "s.d"
+ Name 76 "s.ff1"
+ Name 80 "s.ff2"
+ Name 84 "s.ff3"
+ Name 87 "s.ff4"
+ Name 91 "@entryPointOutput"
+ Name 92 "param"
+ Name 94 "param"
+ Name 98 "myS"
+ MemberName 98(myS) 0 "b"
+ MemberName 98(myS) 1 "c"
+ MemberName 98(myS) 2 "a"
+ MemberName 98(myS) 3 "d"
+ Name 99 "$Global"
+ MemberName 99($Global) 0 "s1"
+ MemberName 99($Global) 1 "ff5"
+ MemberName 99($Global) 2 "ff6"
+ Name 101 ""
Decorate 51(input) Location 0
- MemberDecorate 54(IN_S) 1 Flat
- MemberDecorate 54(IN_S) 2 NoPerspective
- MemberDecorate 54(IN_S) 2 Centroid
- MemberDecorate 54(IN_S) 3 Centroid
- Decorate 56(s) Location 1
- Decorate 79(s_ff1) BuiltIn FrontFacing
- Decorate 94(@entryPointOutput) Location 0
- MemberDecorate 101(myS) 0 Offset 0
- MemberDecorate 101(myS) 1 Offset 4
- MemberDecorate 101(myS) 2 Offset 16
- MemberDecorate 101(myS) 3 Offset 32
- MemberDecorate 102($Global) 0 Offset 0
- MemberDecorate 102($Global) 1 Offset 1620
- MemberDecorate 102($Global) 2 Offset 1636
- Decorate 102($Global) Block
- Decorate 104 DescriptorSet 0
+ Decorate 54(s.a) Location 1
+ Decorate 59(s.b) Flat
+ Decorate 59(s.b) Location 2
+ Decorate 65(s.c) NoPerspective
+ Decorate 65(s.c) Centroid
+ Decorate 65(s.c) Location 3
+ Decorate 71(s.d) Centroid
+ Decorate 71(s.d) Location 4
+ Decorate 76(s.ff1) Flat
+ Decorate 76(s.ff1) BuiltIn FrontFacing
+ Decorate 80(s.ff2) Flat
+ Decorate 80(s.ff2) Location 5
+ Decorate 84(s.ff3) Flat
+ Decorate 84(s.ff3) Location 6
+ Decorate 87(s.ff4) Location 7
+ Decorate 91(@entryPointOutput) Location 0
+ MemberDecorate 98(myS) 0 Offset 0
+ MemberDecorate 98(myS) 1 Offset 4
+ MemberDecorate 98(myS) 2 Offset 16
+ MemberDecorate 98(myS) 3 Offset 32
+ MemberDecorate 99($Global) 0 Offset 0
+ MemberDecorate 99($Global) 1 Offset 1620
+ MemberDecorate 99($Global) 2 Offset 1636
+ Decorate 99($Global) Block
+ Decorate 101 DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -343,74 +321,71 @@ gl_FragCoord origin is upper left
42: TypePointer Function 41(containEmpty)
50: TypePointer Input 7(fvec4)
51(input): 50(ptr) Variable Input
- 54(IN_S): TypeStruct 7(fvec4) 9(bool) 6(float) 10(fvec2) 9(bool) 9(bool) 7(fvec4)
- 55: TypePointer Input 54(IN_S)
- 56(s): 55(ptr) Variable Input
- 60: 31(int) Constant 1
- 61: TypePointer Input 9(bool)
- 64: TypePointer Function 9(bool)
- 66: 31(int) Constant 2
- 67: TypePointer Input 6(float)
- 70: TypePointer Function 6(float)
- 72: 31(int) Constant 3
- 73: TypePointer Input 10(fvec2)
- 76: TypePointer Function 10(fvec2)
- 78: 31(int) Constant 4
- 79(s_ff1): 61(ptr) Variable Input
- 82: 31(int) Constant 5
- 86: 31(int) Constant 6
- 93: TypePointer Output 7(fvec4)
-94(@entryPointOutput): 93(ptr) Variable Output
- 100: TypeInt 32 0
- 101(myS): TypeStruct 100(int) 100(int) 7(fvec4) 7(fvec4)
- 102($Global): TypeStruct 101(myS) 6(float) 6(float)
- 103: TypePointer Uniform 102($Global)
- 104: 103(ptr) Variable Uniform
+ 54(s.a): 50(ptr) Variable Input
+ 57: 31(int) Constant 1
+ 58: TypePointer Input 9(bool)
+ 59(s.b): 58(ptr) Variable Input
+ 61: TypePointer Function 9(bool)
+ 63: 31(int) Constant 2
+ 64: TypePointer Input 6(float)
+ 65(s.c): 64(ptr) Variable Input
+ 67: TypePointer Function 6(float)
+ 69: 31(int) Constant 3
+ 70: TypePointer Input 10(fvec2)
+ 71(s.d): 70(ptr) Variable Input
+ 73: TypePointer Function 10(fvec2)
+ 75: 31(int) Constant 4
+ 76(s.ff1): 58(ptr) Variable Input
+ 79: 31(int) Constant 5
+ 80(s.ff2): 58(ptr) Variable Input
+ 83: 31(int) Constant 6
+ 84(s.ff3): 58(ptr) Variable Input
+ 87(s.ff4): 50(ptr) Variable Input
+ 90: TypePointer Output 7(fvec4)
+91(@entryPointOutput): 90(ptr) Variable Output
+ 97: TypeInt 32 0
+ 98(myS): TypeStruct 97(int) 97(int) 7(fvec4) 7(fvec4)
+ 99($Global): TypeStruct 98(myS) 6(float) 6(float)
+ 100: TypePointer Uniform 99($Global)
+ 101: 100(ptr) Variable Uniform
4(PixelShaderFunction): 2 Function None 3
5: Label
49(input): 8(ptr) Variable Function
53(s): 12(ptr) Variable Function
- 95(param): 8(ptr) Variable Function
- 97(param): 12(ptr) Variable Function
+ 92(param): 8(ptr) Variable Function
+ 94(param): 12(ptr) Variable Function
52: 7(fvec4) Load 51(input)
Store 49(input) 52
- 57: 50(ptr) AccessChain 56(s) 32
- 58: 7(fvec4) Load 57
- 59: 8(ptr) AccessChain 53(s) 32
- Store 59 58
- 62: 61(ptr) AccessChain 56(s) 60
- 63: 9(bool) Load 62
- 65: 64(ptr) AccessChain 53(s) 60
- Store 65 63
- 68: 67(ptr) AccessChain 56(s) 66
- 69: 6(float) Load 68
- 71: 70(ptr) AccessChain 53(s) 66
- Store 71 69
- 74: 73(ptr) AccessChain 56(s) 72
- 75: 10(fvec2) Load 74
- 77: 76(ptr) AccessChain 53(s) 72
- Store 77 75
- 80: 9(bool) Load 79(s_ff1)
- 81: 64(ptr) AccessChain 53(s) 78
- Store 81 80
- 83: 61(ptr) AccessChain 56(s) 78
- 84: 9(bool) Load 83
- 85: 64(ptr) AccessChain 53(s) 82
- Store 85 84
- 87: 61(ptr) AccessChain 56(s) 82
- 88: 9(bool) Load 87
- 89: 64(ptr) AccessChain 53(s) 86
+ 55: 7(fvec4) Load 54(s.a)
+ 56: 8(ptr) AccessChain 53(s) 32
+ Store 56 55
+ 60: 9(bool) Load 59(s.b)
+ 62: 61(ptr) AccessChain 53(s) 57
+ Store 62 60
+ 66: 6(float) Load 65(s.c)
+ 68: 67(ptr) AccessChain 53(s) 63
+ Store 68 66
+ 72: 10(fvec2) Load 71(s.d)
+ 74: 73(ptr) AccessChain 53(s) 69
+ Store 74 72
+ 77: 9(bool) Load 76(s.ff1)
+ 78: 61(ptr) AccessChain 53(s) 75
+ Store 78 77
+ 81: 9(bool) Load 80(s.ff2)
+ 82: 61(ptr) AccessChain 53(s) 79
+ Store 82 81
+ 85: 9(bool) Load 84(s.ff3)
+ 86: 61(ptr) AccessChain 53(s) 83
+ Store 86 85
+ 88: 7(fvec4) Load 87(s.ff4)
+ 89: 8(ptr) AccessChain 53(s) 33
Store 89 88
- 90: 50(ptr) AccessChain 56(s) 86
- 91: 7(fvec4) Load 90
- 92: 8(ptr) AccessChain 53(s) 33
- Store 92 91
- 96: 7(fvec4) Load 49(input)
- Store 95(param) 96
- 98: 11(IN_S) Load 53(s)
- Store 97(param) 98
- 99: 7(fvec4) FunctionCall 16(@PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41;) 95(param) 97(param)
- Store 94(@entryPointOutput) 99
+ 93: 7(fvec4) Load 49(input)
+ Store 92(param) 93
+ 95: 11(IN_S) Load 53(s)
+ Store 94(param) 95
+ 96: 7(fvec4) FunctionCall 16(@PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41;) 92(param) 94(param)
+ Store 91(@entryPointOutput) 96
Return
FunctionEnd
16(@PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41;): 7(fvec4) Function None 13
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split-1.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split-1.vert.out
index 9ec01d8393b..6086e320099 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split-1.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split-1.vert.out
@@ -1,5 +1,5 @@
hlsl.struct.split-1.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:17 Function Definition: @main(struct-VS_INPUT-i1-vf4-i11;vf4; ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:17 Function Parameters:
@@ -46,19 +46,19 @@ Shader version: 450
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:17 Constant:
0:17 0 (const int)
-0:? 'x0_in' (layout( location=0) in int)
+0:? 'vsin.x0_in' (layout( location=0) in int)
0:17 move second child to first child ( temp 4-component vector of float)
0:17 Pos_in: direct index for structure ( temp 4-component vector of float)
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:17 Constant:
0:17 1 (const int)
-0:? 'Pos_in' (layout( location=1) in 4-component vector of float)
+0:? 'vsin.Pos_in' (layout( location=1) in 4-component vector of float)
0:17 move second child to first child ( temp int)
0:17 x1_in: direct index for structure ( temp int)
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:17 Constant:
0:17 2 (const int)
-0:? 'x1_in' (layout( location=2) in int)
+0:? 'vsin.x1_in' (layout( location=2) in int)
0:17 move second child to first child ( temp 4-component vector of float)
0:? 'Pos_loose' ( temp 4-component vector of float)
0:? 'Pos_loose' (layout( location=3) in 4-component vector of float)
@@ -69,41 +69,37 @@ Shader version: 450
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:? 'Pos_loose' ( temp 4-component vector of float)
0:17 move second child to first child ( temp int)
-0:17 x0_out: direct index for structure ( temp int)
-0:17 '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:17 Constant:
-0:17 0 (const int)
+0:? '@entryPointOutput.x0_out' (layout( location=0) out int)
0:17 x0_out: direct index for structure ( temp int)
0:17 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:17 Constant:
0:17 0 (const int)
0:17 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos_out' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos_out' ( out 4-component vector of float Position)
0:17 Pos_out: direct index for structure ( temp 4-component vector of float)
0:17 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:17 Constant:
0:17 1 (const int)
0:17 move second child to first child ( temp int)
-0:17 x1_out: direct index for structure ( temp int)
-0:17 '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:17 Constant:
-0:17 1 (const int)
+0:? '@entryPointOutput.x1_out' (layout( location=1) out int)
0:17 x1_out: direct index for structure ( temp int)
0:17 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:17 Constant:
0:17 2 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:? 'x0_in' (layout( location=0) in int)
-0:? 'Pos_in' (layout( location=1) in 4-component vector of float)
-0:? 'x1_in' (layout( location=2) in int)
+0:? '@entryPointOutput.Pos_out' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.x0_out' (layout( location=0) out int)
+0:? '@entryPointOutput.x1_out' (layout( location=1) out int)
+0:? 'vsin.x0_in' (layout( location=0) in int)
+0:? 'vsin.Pos_in' (layout( location=1) in 4-component vector of float)
+0:? 'vsin.x1_in' (layout( location=2) in int)
0:? 'Pos_loose' (layout( location=3) in 4-component vector of float)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:17 Function Definition: @main(struct-VS_INPUT-i1-vf4-i11;vf4; ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:17 Function Parameters:
@@ -150,19 +146,19 @@ Shader version: 450
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:17 Constant:
0:17 0 (const int)
-0:? 'x0_in' (layout( location=0) in int)
+0:? 'vsin.x0_in' (layout( location=0) in int)
0:17 move second child to first child ( temp 4-component vector of float)
0:17 Pos_in: direct index for structure ( temp 4-component vector of float)
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:17 Constant:
0:17 1 (const int)
-0:? 'Pos_in' (layout( location=1) in 4-component vector of float)
+0:? 'vsin.Pos_in' (layout( location=1) in 4-component vector of float)
0:17 move second child to first child ( temp int)
0:17 x1_in: direct index for structure ( temp int)
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:17 Constant:
0:17 2 (const int)
-0:? 'x1_in' (layout( location=2) in int)
+0:? 'vsin.x1_in' (layout( location=2) in int)
0:17 move second child to first child ( temp 4-component vector of float)
0:? 'Pos_loose' ( temp 4-component vector of float)
0:? 'Pos_loose' (layout( location=3) in 4-component vector of float)
@@ -173,44 +169,41 @@ Shader version: 450
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:? 'Pos_loose' ( temp 4-component vector of float)
0:17 move second child to first child ( temp int)
-0:17 x0_out: direct index for structure ( temp int)
-0:17 '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:17 Constant:
-0:17 0 (const int)
+0:? '@entryPointOutput.x0_out' (layout( location=0) out int)
0:17 x0_out: direct index for structure ( temp int)
0:17 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:17 Constant:
0:17 0 (const int)
0:17 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos_out' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos_out' ( out 4-component vector of float Position)
0:17 Pos_out: direct index for structure ( temp 4-component vector of float)
0:17 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:17 Constant:
0:17 1 (const int)
0:17 move second child to first child ( temp int)
-0:17 x1_out: direct index for structure ( temp int)
-0:17 '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:17 Constant:
-0:17 1 (const int)
+0:? '@entryPointOutput.x1_out' (layout( location=1) out int)
0:17 x1_out: direct index for structure ( temp int)
0:17 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:17 Constant:
0:17 2 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:? 'x0_in' (layout( location=0) in int)
-0:? 'Pos_in' (layout( location=1) in 4-component vector of float)
-0:? 'x1_in' (layout( location=2) in int)
+0:? '@entryPointOutput.Pos_out' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.x0_out' (layout( location=0) out int)
+0:? '@entryPointOutput.x1_out' (layout( location=1) out int)
+0:? 'vsin.x0_in' (layout( location=0) in int)
+0:? 'vsin.Pos_in' (layout( location=1) in 4-component vector of float)
+0:? 'vsin.x1_in' (layout( location=2) in int)
0:? 'Pos_loose' (layout( location=3) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 73
+// Generated by (magic number): 80002
+// Id's are bound by 70
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 40 44 47 51 61 67
+ EntryPoint Vertex 4 "main" 40 44 47 51 60 64 67
+ Source HLSL 500
Name 4 "main"
Name 9 "VS_INPUT"
MemberName 9(VS_INPUT) 0 "x0_in"
@@ -225,25 +218,24 @@ Shader version: 450
Name 15 "Pos_loose"
Name 19 "vsout"
Name 38 "vsin"
- Name 40 "x0_in"
- Name 44 "Pos_in"
- Name 47 "x1_in"
+ Name 40 "vsin.x0_in"
+ Name 44 "vsin.Pos_in"
+ Name 47 "vsin.x1_in"
Name 50 "Pos_loose"
Name 51 "Pos_loose"
Name 53 "flattenTemp"
Name 54 "param"
Name 56 "param"
- Name 59 "VS_OUTPUT"
- MemberName 59(VS_OUTPUT) 0 "x0_out"
- MemberName 59(VS_OUTPUT) 1 "x1_out"
- Name 61 "@entryPointOutput"
- Name 67 "@entryPointOutput_Pos_out"
- Decorate 40(x0_in) Location 0
- Decorate 44(Pos_in) Location 1
- Decorate 47(x1_in) Location 2
+ Name 60 "@entryPointOutput.x0_out"
+ Name 64 "@entryPointOutput.Pos_out"
+ Name 67 "@entryPointOutput.x1_out"
+ Decorate 40(vsin.x0_in) Location 0
+ Decorate 44(vsin.Pos_in) Location 1
+ Decorate 47(vsin.x1_in) Location 2
Decorate 51(Pos_loose) Location 3
- Decorate 61(@entryPointOutput) Location 0
- Decorate 67(@entryPointOutput_Pos_out) BuiltIn Position
+ Decorate 60(@entryPointOutput.x0_out) Location 0
+ Decorate 64(@entryPointOutput.Pos_out) BuiltIn Position
+ Decorate 67(@entryPointOutput.x1_out) Location 1
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
@@ -260,17 +252,16 @@ Shader version: 450
25: 6(int) Constant 1
31: 6(int) Constant 2
39: TypePointer Input 6(int)
- 40(x0_in): 39(ptr) Variable Input
+ 40(vsin.x0_in): 39(ptr) Variable Input
43: TypePointer Input 8(fvec4)
- 44(Pos_in): 43(ptr) Variable Input
- 47(x1_in): 39(ptr) Variable Input
+ 44(vsin.Pos_in): 43(ptr) Variable Input
+ 47(vsin.x1_in): 39(ptr) Variable Input
51(Pos_loose): 43(ptr) Variable Input
- 59(VS_OUTPUT): TypeStruct 6(int) 6(int)
- 60: TypePointer Output 59(VS_OUTPUT)
-61(@entryPointOutput): 60(ptr) Variable Output
- 64: TypePointer Output 6(int)
- 66: TypePointer Output 8(fvec4)
-67(@entryPointOutput_Pos_out): 66(ptr) Variable Output
+ 59: TypePointer Output 6(int)
+60(@entryPointOutput.x0_out): 59(ptr) Variable Output
+ 63: TypePointer Output 8(fvec4)
+64(@entryPointOutput.Pos_out): 63(ptr) Variable Output
+67(@entryPointOutput.x1_out): 59(ptr) Variable Output
4(main): 2 Function None 3
5: Label
38(vsin): 10(ptr) Variable Function
@@ -278,13 +269,13 @@ Shader version: 450
53(flattenTemp): 18(ptr) Variable Function
54(param): 10(ptr) Variable Function
56(param): 11(ptr) Variable Function
- 41: 6(int) Load 40(x0_in)
+ 41: 6(int) Load 40(vsin.x0_in)
42: 21(ptr) AccessChain 38(vsin) 20
Store 42 41
- 45: 8(fvec4) Load 44(Pos_in)
+ 45: 8(fvec4) Load 44(vsin.Pos_in)
46: 11(ptr) AccessChain 38(vsin) 25
Store 46 45
- 48: 6(int) Load 47(x1_in)
+ 48: 6(int) Load 47(vsin.x1_in)
49: 21(ptr) AccessChain 38(vsin) 31
Store 49 48
52: 8(fvec4) Load 51(Pos_loose)
@@ -295,17 +286,15 @@ Shader version: 450
Store 56(param) 57
58:12(VS_OUTPUT) FunctionCall 16(@main(struct-VS_INPUT-i1-vf4-i11;vf4;) 54(param) 56(param)
Store 53(flattenTemp) 58
- 62: 21(ptr) AccessChain 53(flattenTemp) 20
- 63: 6(int) Load 62
- 65: 64(ptr) AccessChain 61(@entryPointOutput) 20
- Store 65 63
- 68: 11(ptr) AccessChain 53(flattenTemp) 25
- 69: 8(fvec4) Load 68
- Store 67(@entryPointOutput_Pos_out) 69
- 70: 21(ptr) AccessChain 53(flattenTemp) 31
- 71: 6(int) Load 70
- 72: 64(ptr) AccessChain 61(@entryPointOutput) 25
- Store 72 71
+ 61: 21(ptr) AccessChain 53(flattenTemp) 20
+ 62: 6(int) Load 61
+ Store 60(@entryPointOutput.x0_out) 62
+ 65: 11(ptr) AccessChain 53(flattenTemp) 25
+ 66: 8(fvec4) Load 65
+ Store 64(@entryPointOutput.Pos_out) 66
+ 68: 21(ptr) AccessChain 53(flattenTemp) 31
+ 69: 6(int) Load 68
+ Store 67(@entryPointOutput.x1_out) 69
Return
FunctionEnd
16(@main(struct-VS_INPUT-i1-vf4-i11;vf4;):12(VS_OUTPUT) Function None 13
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.array.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.array.geom.out
index b907815b89d..42f45a8a795 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.array.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.array.geom.out
@@ -1,5 +1,5 @@
hlsl.struct.split.array.geom
-Shader version: 450
+Shader version: 500
invocations = -1
max_vertices = 4
input primitive = points
@@ -72,12 +72,16 @@ output primitive = triangle_strip
0:? 'OutputStream' ( temp structure{ temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
0:? Linker Objects
0:? 'v' (layout( location=0) in 1-element array of uint)
+0:? 'OutputStream.Pos' ( out 4-component vector of float Position)
+0:? 'OutputStream.TexCoord' (layout( location=0) out 2-component vector of float)
+0:? 'OutputStream.TerrainPos' (layout( location=1) out 3-component vector of float)
+0:? 'OutputStream.VertexID' (layout( location=2) out uint)
Linked geometry stage:
-Shader version: 450
+Shader version: 500
invocations = 1
max_vertices = 4
input primitive = points
@@ -150,19 +154,24 @@ output primitive = triangle_strip
0:? 'OutputStream' ( temp structure{ temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
0:? Linker Objects
0:? 'v' (layout( location=0) in 1-element array of uint)
+0:? 'OutputStream.Pos' ( out 4-component vector of float Position)
+0:? 'OutputStream.TexCoord' (layout( location=0) out 2-component vector of float)
+0:? 'OutputStream.TerrainPos' (layout( location=1) out 3-component vector of float)
+0:? 'OutputStream.VertexID' (layout( location=2) out uint)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 73
+// Generated by (magic number): 80002
+// Id's are bound by 82
Capability Geometry
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Geometry 4 "main" 66
+ EntryPoint Geometry 4 "main" 66 75 77 79 81
ExecutionMode 4 InputPoints
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip
ExecutionMode 4 OutputVertices 4
+ Source HLSL 500
Name 4 "main"
Name 14 "PSInput"
MemberName 14(PSInput) 0 "Pos"
@@ -181,7 +190,15 @@ output primitive = triangle_strip
Name 68 "OutputStream"
Name 69 "param"
Name 71 "param"
+ Name 75 "OutputStream.Pos"
+ Name 77 "OutputStream.TexCoord"
+ Name 79 "OutputStream.TerrainPos"
+ Name 81 "OutputStream.VertexID"
Decorate 66(v) Location 0
+ Decorate 75(OutputStream.Pos) BuiltIn Position
+ Decorate 77(OutputStream.TexCoord) Location 0
+ Decorate 79(OutputStream.TerrainPos) Location 1
+ Decorate 81(OutputStream.VertexID) Location 2
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -214,6 +231,14 @@ output primitive = triangle_strip
60: 28(int) Constant 1
65: TypePointer Input 8
66(v): 65(ptr) Variable Input
+ 74: TypePointer Output 11(fvec4)
+75(OutputStream.Pos): 74(ptr) Variable Output
+ 76: TypePointer Output 12(fvec2)
+77(OutputStream.TexCoord): 76(ptr) Variable Output
+ 78: TypePointer Output 13(fvec3)
+79(OutputStream.TerrainPos): 78(ptr) Variable Output
+ 80: TypePointer Output 6(int)
+81(OutputStream.VertexID): 80(ptr) Variable Output
4(main): 2 Function None 3
5: Label
64(v): 9(ptr) Variable Function
@@ -225,6 +250,8 @@ output primitive = triangle_strip
70: 8 Load 64(v)
Store 69(param) 70
72: 2 FunctionCall 19(@main(u1[1];struct-PSInput-vf4-vf2-vf3-u11;) 69(param) 71(param)
+ 73: 14(PSInput) Load 71(param)
+ Store 68(OutputStream) 73
Return
FunctionEnd
19(@main(u1[1];struct-PSInput-vf4-vf2-vf3-u11;): 2 Function None 16
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out
index ad185ee1e8c..b42663951f9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out
@@ -1,5 +1,5 @@
hlsl.struct.split.assign.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: @main(i1;struct-S-f1-vf41[3]; ( temp 4-component vector of float)
@@ -11,16 +11,19 @@ gl_FragCoord origin is upper left
0:9 'input' ( in 3-element array of structure{ temp float f, temp 4-component vector of float pos})
0:9 'a' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos})
0:11 Branch: Return with expression
-0:11 Constant:
-0:11 1.000000
-0:11 1.000000
-0:11 1.000000
+0:11 pos: direct index for structure ( temp 4-component vector of float)
+0:11 direct index ( temp structure{ temp float f, temp 4-component vector of float pos})
+0:11 'a' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
0:7 Function Definition: main( ( temp void)
0:7 Function Parameters:
0:? Sequence
0:7 move second child to first child ( temp int)
0:? 'i' ( temp int)
-0:? 'i' (layout( location=0) in int)
+0:? 'i' (layout( location=0) flat in int)
0:7 Sequence
0:7 move second child to first child ( temp float)
0:7 f: direct index for structure ( temp float)
@@ -30,13 +33,7 @@ gl_FragCoord origin is upper left
0:7 0 (const int)
0:7 Constant:
0:7 0 (const int)
-0:7 f: direct index for structure ( temp float)
-0:7 direct index (layout( location=1) in structure{ temp float f})
-0:7 'input' (layout( location=1) in 3-element array of structure{ temp float f})
-0:7 Constant:
-0:7 0 (const int)
-0:7 Constant:
-0:7 0 (const int)
+0:? 'input[0].f' (layout( location=1) in float)
0:7 move second child to first child ( temp 4-component vector of float)
0:7 pos: direct index for structure ( temp 4-component vector of float)
0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos})
@@ -46,7 +43,7 @@ gl_FragCoord origin is upper left
0:7 Constant:
0:7 1 (const int)
0:7 direct index ( in 4-component vector of float FragCoord)
-0:? 'input_pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'input.pos' ( in 3-element array of 4-component vector of float FragCoord)
0:7 Constant:
0:7 0 (const int)
0:7 move second child to first child ( temp float)
@@ -57,13 +54,7 @@ gl_FragCoord origin is upper left
0:7 1 (const int)
0:7 Constant:
0:7 0 (const int)
-0:7 f: direct index for structure ( temp float)
-0:7 direct index (layout( location=1) in structure{ temp float f})
-0:7 'input' (layout( location=1) in 3-element array of structure{ temp float f})
-0:7 Constant:
-0:7 1 (const int)
-0:7 Constant:
-0:7 0 (const int)
+0:? 'input[1].f' (layout( location=2) in float)
0:7 move second child to first child ( temp 4-component vector of float)
0:7 pos: direct index for structure ( temp 4-component vector of float)
0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos})
@@ -73,7 +64,7 @@ gl_FragCoord origin is upper left
0:7 Constant:
0:7 1 (const int)
0:7 direct index ( in 4-component vector of float FragCoord)
-0:? 'input_pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'input.pos' ( in 3-element array of 4-component vector of float FragCoord)
0:7 Constant:
0:7 1 (const int)
0:7 move second child to first child ( temp float)
@@ -84,13 +75,7 @@ gl_FragCoord origin is upper left
0:7 2 (const int)
0:7 Constant:
0:7 0 (const int)
-0:7 f: direct index for structure ( temp float)
-0:7 direct index (layout( location=1) in structure{ temp float f})
-0:7 'input' (layout( location=1) in 3-element array of structure{ temp float f})
-0:7 Constant:
-0:7 2 (const int)
-0:7 Constant:
-0:7 0 (const int)
+0:? 'input[2].f' (layout( location=3) in float)
0:7 move second child to first child ( temp 4-component vector of float)
0:7 pos: direct index for structure ( temp 4-component vector of float)
0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos})
@@ -100,7 +85,7 @@ gl_FragCoord origin is upper left
0:7 Constant:
0:7 1 (const int)
0:7 direct index ( in 4-component vector of float FragCoord)
-0:? 'input_pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'input.pos' ( in 3-element array of 4-component vector of float FragCoord)
0:7 Constant:
0:7 2 (const int)
0:7 move second child to first child ( temp 4-component vector of float)
@@ -110,15 +95,17 @@ gl_FragCoord origin is upper left
0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos})
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'i' (layout( location=0) in int)
-0:? 'input' (layout( location=1) in 3-element array of structure{ temp float f})
-0:? 'input_pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'i' (layout( location=0) flat in int)
+0:? 'input.pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'input[0].f' (layout( location=1) in float)
+0:? 'input[1].f' (layout( location=2) in float)
+0:? 'input[2].f' (layout( location=3) in float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7 Function Definition: @main(i1;struct-S-f1-vf41[3]; ( temp 4-component vector of float)
@@ -130,16 +117,19 @@ gl_FragCoord origin is upper left
0:9 'input' ( in 3-element array of structure{ temp float f, temp 4-component vector of float pos})
0:9 'a' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos})
0:11 Branch: Return with expression
-0:11 Constant:
-0:11 1.000000
-0:11 1.000000
-0:11 1.000000
+0:11 pos: direct index for structure ( temp 4-component vector of float)
+0:11 direct index ( temp structure{ temp float f, temp 4-component vector of float pos})
+0:11 'a' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos})
+0:11 Constant:
+0:11 1 (const int)
+0:11 Constant:
+0:11 1 (const int)
0:7 Function Definition: main( ( temp void)
0:7 Function Parameters:
0:? Sequence
0:7 move second child to first child ( temp int)
0:? 'i' ( temp int)
-0:? 'i' (layout( location=0) in int)
+0:? 'i' (layout( location=0) flat in int)
0:7 Sequence
0:7 move second child to first child ( temp float)
0:7 f: direct index for structure ( temp float)
@@ -149,13 +139,7 @@ gl_FragCoord origin is upper left
0:7 0 (const int)
0:7 Constant:
0:7 0 (const int)
-0:7 f: direct index for structure ( temp float)
-0:7 direct index (layout( location=1) in structure{ temp float f})
-0:7 'input' (layout( location=1) in 3-element array of structure{ temp float f})
-0:7 Constant:
-0:7 0 (const int)
-0:7 Constant:
-0:7 0 (const int)
+0:? 'input[0].f' (layout( location=1) in float)
0:7 move second child to first child ( temp 4-component vector of float)
0:7 pos: direct index for structure ( temp 4-component vector of float)
0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos})
@@ -165,7 +149,7 @@ gl_FragCoord origin is upper left
0:7 Constant:
0:7 1 (const int)
0:7 direct index ( in 4-component vector of float FragCoord)
-0:? 'input_pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'input.pos' ( in 3-element array of 4-component vector of float FragCoord)
0:7 Constant:
0:7 0 (const int)
0:7 move second child to first child ( temp float)
@@ -176,13 +160,7 @@ gl_FragCoord origin is upper left
0:7 1 (const int)
0:7 Constant:
0:7 0 (const int)
-0:7 f: direct index for structure ( temp float)
-0:7 direct index (layout( location=1) in structure{ temp float f})
-0:7 'input' (layout( location=1) in 3-element array of structure{ temp float f})
-0:7 Constant:
-0:7 1 (const int)
-0:7 Constant:
-0:7 0 (const int)
+0:? 'input[1].f' (layout( location=2) in float)
0:7 move second child to first child ( temp 4-component vector of float)
0:7 pos: direct index for structure ( temp 4-component vector of float)
0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos})
@@ -192,7 +170,7 @@ gl_FragCoord origin is upper left
0:7 Constant:
0:7 1 (const int)
0:7 direct index ( in 4-component vector of float FragCoord)
-0:? 'input_pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'input.pos' ( in 3-element array of 4-component vector of float FragCoord)
0:7 Constant:
0:7 1 (const int)
0:7 move second child to first child ( temp float)
@@ -203,13 +181,7 @@ gl_FragCoord origin is upper left
0:7 2 (const int)
0:7 Constant:
0:7 0 (const int)
-0:7 f: direct index for structure ( temp float)
-0:7 direct index (layout( location=1) in structure{ temp float f})
-0:7 'input' (layout( location=1) in 3-element array of structure{ temp float f})
-0:7 Constant:
-0:7 2 (const int)
-0:7 Constant:
-0:7 0 (const int)
+0:? 'input[2].f' (layout( location=3) in float)
0:7 move second child to first child ( temp 4-component vector of float)
0:7 pos: direct index for structure ( temp 4-component vector of float)
0:7 direct index ( temp structure{ temp float f, temp 4-component vector of float pos})
@@ -219,7 +191,7 @@ gl_FragCoord origin is upper left
0:7 Constant:
0:7 1 (const int)
0:7 direct index ( in 4-component vector of float FragCoord)
-0:? 'input_pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'input.pos' ( in 3-element array of 4-component vector of float FragCoord)
0:7 Constant:
0:7 2 (const int)
0:7 move second child to first child ( temp 4-component vector of float)
@@ -229,19 +201,22 @@ gl_FragCoord origin is upper left
0:? 'input' ( temp 3-element array of structure{ temp float f, temp 4-component vector of float pos})
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'i' (layout( location=0) in int)
-0:? 'input' (layout( location=1) in 3-element array of structure{ temp float f})
-0:? 'input_pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'i' (layout( location=0) flat in int)
+0:? 'input.pos' ( in 3-element array of 4-component vector of float FragCoord)
+0:? 'input[0].f' (layout( location=1) in float)
+0:? 'input[1].f' (layout( location=2) in float)
+0:? 'input[2].f' (layout( location=3) in float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 73
+// Generated by (magic number): 80002
+// Id's are bound by 66
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 32 39 48 67
+ EntryPoint Fragment 4 "main" 30 35 41 46 53 60
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 10 "S"
MemberName 10(S) 0 "f"
@@ -250,20 +225,23 @@ gl_FragCoord origin is upper left
Name 16 "i"
Name 17 "input"
Name 20 "a"
+ Name 28 "i"
Name 30 "i"
- Name 32 "i"
- Name 34 "input"
- Name 36 "S"
- MemberName 36(S) 0 "f"
- Name 39 "input"
- Name 48 "input_pos"
- Name 67 "@entryPointOutput"
- Name 68 "param"
- Name 70 "param"
- Decorate 32(i) Location 0
- Decorate 39(input) Location 1
- Decorate 48(input_pos) BuiltIn FragCoord
- Decorate 67(@entryPointOutput) Location 0
+ Name 32 "input"
+ Name 35 "input[0].f"
+ Name 41 "input.pos"
+ Name 46 "input[1].f"
+ Name 53 "input[2].f"
+ Name 60 "@entryPointOutput"
+ Name 61 "param"
+ Name 63 "param"
+ Decorate 30(i) Flat
+ Decorate 30(i) Location 0
+ Decorate 35(input[0].f) Location 1
+ Decorate 41(input.pos) BuiltIn FragCoord
+ Decorate 46(input[1].f) Location 2
+ Decorate 53(input[2].f) Location 3
+ Decorate 60(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
@@ -276,65 +254,58 @@ gl_FragCoord origin is upper left
13: TypeArray 10(S) 12
14: TypePointer Function 13
15: TypeFunction 9(fvec4) 7(ptr) 14(ptr)
- 22: TypeVector 8(float) 3
- 23: 8(float) Constant 1065353216
- 24: 22(fvec3) ConstantComposite 23 23 23
- 25: TypePointer Function 9(fvec4)
- 31: TypePointer Input 6(int)
- 32(i): 31(ptr) Variable Input
- 35: 6(int) Constant 0
- 36(S): TypeStruct 8(float)
- 37: TypeArray 36(S) 12
- 38: TypePointer Input 37
- 39(input): 38(ptr) Variable Input
- 40: TypePointer Input 8(float)
- 43: TypePointer Function 8(float)
- 45: 6(int) Constant 1
- 46: TypeArray 9(fvec4) 12
- 47: TypePointer Input 46
- 48(input_pos): 47(ptr) Variable Input
- 49: TypePointer Input 9(fvec4)
- 59: 6(int) Constant 2
- 66: TypePointer Output 9(fvec4)
-67(@entryPointOutput): 66(ptr) Variable Output
+ 22: 6(int) Constant 1
+ 23: TypePointer Function 9(fvec4)
+ 29: TypePointer Input 6(int)
+ 30(i): 29(ptr) Variable Input
+ 33: 6(int) Constant 0
+ 34: TypePointer Input 8(float)
+ 35(input[0].f): 34(ptr) Variable Input
+ 37: TypePointer Function 8(float)
+ 39: TypeArray 9(fvec4) 12
+ 40: TypePointer Input 39
+ 41(input.pos): 40(ptr) Variable Input
+ 42: TypePointer Input 9(fvec4)
+ 46(input[1].f): 34(ptr) Variable Input
+ 52: 6(int) Constant 2
+ 53(input[2].f): 34(ptr) Variable Input
+ 59: TypePointer Output 9(fvec4)
+60(@entryPointOutput): 59(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 30(i): 7(ptr) Variable Function
- 34(input): 14(ptr) Variable Function
- 68(param): 7(ptr) Variable Function
- 70(param): 14(ptr) Variable Function
- 33: 6(int) Load 32(i)
- Store 30(i) 33
- 41: 40(ptr) AccessChain 39(input) 35 35
- 42: 8(float) Load 41
- 44: 43(ptr) AccessChain 34(input) 35 35
- Store 44 42
- 50: 49(ptr) AccessChain 48(input_pos) 35
- 51: 9(fvec4) Load 50
- 52: 25(ptr) AccessChain 34(input) 35 45
- Store 52 51
- 53: 40(ptr) AccessChain 39(input) 45 35
- 54: 8(float) Load 53
- 55: 43(ptr) AccessChain 34(input) 45 35
+ 28(i): 7(ptr) Variable Function
+ 32(input): 14(ptr) Variable Function
+ 61(param): 7(ptr) Variable Function
+ 63(param): 14(ptr) Variable Function
+ 31: 6(int) Load 30(i)
+ Store 28(i) 31
+ 36: 8(float) Load 35(input[0].f)
+ 38: 37(ptr) AccessChain 32(input) 33 33
+ Store 38 36
+ 43: 42(ptr) AccessChain 41(input.pos) 33
+ 44: 9(fvec4) Load 43
+ 45: 23(ptr) AccessChain 32(input) 33 22
+ Store 45 44
+ 47: 8(float) Load 46(input[1].f)
+ 48: 37(ptr) AccessChain 32(input) 22 33
+ Store 48 47
+ 49: 42(ptr) AccessChain 41(input.pos) 22
+ 50: 9(fvec4) Load 49
+ 51: 23(ptr) AccessChain 32(input) 22 22
+ Store 51 50
+ 54: 8(float) Load 53(input[2].f)
+ 55: 37(ptr) AccessChain 32(input) 52 33
Store 55 54
- 56: 49(ptr) AccessChain 48(input_pos) 45
+ 56: 42(ptr) AccessChain 41(input.pos) 52
57: 9(fvec4) Load 56
- 58: 25(ptr) AccessChain 34(input) 45 45
+ 58: 23(ptr) AccessChain 32(input) 52 22
Store 58 57
- 60: 40(ptr) AccessChain 39(input) 59 35
- 61: 8(float) Load 60
- 62: 43(ptr) AccessChain 34(input) 59 35
- Store 62 61
- 63: 49(ptr) AccessChain 48(input_pos) 59
- 64: 9(fvec4) Load 63
- 65: 25(ptr) AccessChain 34(input) 59 45
- Store 65 64
- 69: 6(int) Load 30(i)
- Store 68(param) 69
- 71: 13 Load 34(input)
- Store 70(param) 71
- 72: 9(fvec4) FunctionCall 18(@main(i1;struct-S-f1-vf41[3];) 68(param) 70(param)
- Store 67(@entryPointOutput) 72
+ 62: 6(int) Load 28(i)
+ Store 61(param) 62
+ 64: 13 Load 32(input)
+ Store 63(param) 64
+ 65: 9(fvec4) FunctionCall 18(@main(i1;struct-S-f1-vf41[3];) 61(param) 63(param)
+ Store 60(@entryPointOutput) 65
Return
FunctionEnd
18(@main(i1;struct-S-f1-vf41[3];): 9(fvec4) Function None 15
@@ -342,10 +313,9 @@ gl_FragCoord origin is upper left
17(input): 14(ptr) FunctionParameter
19: Label
20(a): 14(ptr) Variable Function
- 26: 25(ptr) Variable Function
21: 13 Load 20(a)
Store 17(input) 21
- Store 26 24
- 27: 9(fvec4) Load 26
- ReturnValue 27
+ 24: 23(ptr) AccessChain 20(a) 22 22
+ 25: 9(fvec4) Load 24
+ ReturnValue 25
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.call.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.call.vert.out
index 9dc7b856ebc..dd6e38e6c76 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.call.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.call.vert.out
@@ -1,5 +1,5 @@
hlsl.struct.split.call.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:17 Function Definition: Fn1(struct-VS_INPUT-i1-vf4-i11;struct-VS_OUTPUT-i1-vf4-i11; ( temp void)
0:17 Function Parameters:
@@ -60,59 +60,55 @@ Shader version: 450
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:22 Constant:
0:22 0 (const int)
-0:? 'x0_in' (layout( location=0) in int)
+0:? 'vsin.x0_in' (layout( location=0) in int)
0:22 move second child to first child ( temp 4-component vector of float)
0:22 Pos_in: direct index for structure ( temp 4-component vector of float)
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:22 Constant:
0:22 1 (const int)
-0:? 'Pos_in' (layout( location=1) in 4-component vector of float)
+0:? 'vsin.Pos_in' (layout( location=1) in 4-component vector of float)
0:22 move second child to first child ( temp int)
0:22 x1_in: direct index for structure ( temp int)
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:22 Constant:
0:22 2 (const int)
-0:? 'x1_in' (layout( location=2) in int)
+0:? 'vsin.x1_in' (layout( location=2) in int)
0:22 Sequence
0:22 move second child to first child ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 Function Call: @main(struct-VS_INPUT-i1-vf4-i11; ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:22 move second child to first child ( temp int)
-0:22 x0_out: direct index for structure ( temp int)
-0:22 '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:22 Constant:
-0:22 0 (const int)
+0:? '@entryPointOutput.x0_out' (layout( location=0) out int)
0:22 x0_out: direct index for structure ( temp int)
0:22 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos_out' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos_out' ( out 4-component vector of float Position)
0:22 Pos_out: direct index for structure ( temp 4-component vector of float)
0:22 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 Constant:
0:22 1 (const int)
0:22 move second child to first child ( temp int)
-0:22 x1_out: direct index for structure ( temp int)
-0:22 '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:22 Constant:
-0:22 1 (const int)
+0:? '@entryPointOutput.x1_out' (layout( location=1) out int)
0:22 x1_out: direct index for structure ( temp int)
0:22 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 Constant:
0:22 2 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:? 'x0_in' (layout( location=0) in int)
-0:? 'Pos_in' (layout( location=1) in 4-component vector of float)
-0:? 'x1_in' (layout( location=2) in int)
+0:? '@entryPointOutput.Pos_out' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.x0_out' (layout( location=0) out int)
+0:? '@entryPointOutput.x1_out' (layout( location=1) out int)
+0:? 'vsin.x0_in' (layout( location=0) in int)
+0:? 'vsin.Pos_in' (layout( location=1) in 4-component vector of float)
+0:? 'vsin.x1_in' (layout( location=2) in int)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:17 Function Definition: Fn1(struct-VS_INPUT-i1-vf4-i11;struct-VS_OUTPUT-i1-vf4-i11; ( temp void)
0:17 Function Parameters:
@@ -173,62 +169,59 @@ Shader version: 450
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:22 Constant:
0:22 0 (const int)
-0:? 'x0_in' (layout( location=0) in int)
+0:? 'vsin.x0_in' (layout( location=0) in int)
0:22 move second child to first child ( temp 4-component vector of float)
0:22 Pos_in: direct index for structure ( temp 4-component vector of float)
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:22 Constant:
0:22 1 (const int)
-0:? 'Pos_in' (layout( location=1) in 4-component vector of float)
+0:? 'vsin.Pos_in' (layout( location=1) in 4-component vector of float)
0:22 move second child to first child ( temp int)
0:22 x1_in: direct index for structure ( temp int)
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:22 Constant:
0:22 2 (const int)
-0:? 'x1_in' (layout( location=2) in int)
+0:? 'vsin.x1_in' (layout( location=2) in int)
0:22 Sequence
0:22 move second child to first child ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 Function Call: @main(struct-VS_INPUT-i1-vf4-i11; ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:? 'vsin' ( temp structure{ temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
0:22 move second child to first child ( temp int)
-0:22 x0_out: direct index for structure ( temp int)
-0:22 '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:22 Constant:
-0:22 0 (const int)
+0:? '@entryPointOutput.x0_out' (layout( location=0) out int)
0:22 x0_out: direct index for structure ( temp int)
0:22 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos_out' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos_out' ( out 4-component vector of float Position)
0:22 Pos_out: direct index for structure ( temp 4-component vector of float)
0:22 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 Constant:
0:22 1 (const int)
0:22 move second child to first child ( temp int)
-0:22 x1_out: direct index for structure ( temp int)
-0:22 '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:22 Constant:
-0:22 1 (const int)
+0:? '@entryPointOutput.x1_out' (layout( location=1) out int)
0:22 x1_out: direct index for structure ( temp int)
0:22 'flattenTemp' ( temp structure{ temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
0:22 Constant:
0:22 2 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{ temp int x0_out, temp int x1_out})
-0:? 'x0_in' (layout( location=0) in int)
-0:? 'Pos_in' (layout( location=1) in 4-component vector of float)
-0:? 'x1_in' (layout( location=2) in int)
+0:? '@entryPointOutput.Pos_out' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.x0_out' (layout( location=0) out int)
+0:? '@entryPointOutput.x1_out' (layout( location=1) out int)
+0:? 'vsin.x0_in' (layout( location=0) in int)
+0:? 'vsin.Pos_in' (layout( location=1) in 4-component vector of float)
+0:? 'vsin.x1_in' (layout( location=2) in int)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 80
+// Generated by (magic number): 80002
+// Id's are bound by 77
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 52 56 59 68 74
+ EntryPoint Vertex 4 "main" 52 56 59 67 71 74
+ Source HLSL 500
Name 4 "main"
Name 9 "VS_INPUT"
MemberName 9(VS_INPUT) 0 "x0_in"
@@ -247,21 +240,20 @@ Shader version: 450
Name 42 "param"
Name 44 "param"
Name 50 "vsin"
- Name 52 "x0_in"
- Name 56 "Pos_in"
- Name 59 "x1_in"
+ Name 52 "vsin.x0_in"
+ Name 56 "vsin.Pos_in"
+ Name 59 "vsin.x1_in"
Name 62 "flattenTemp"
Name 63 "param"
- Name 66 "VS_OUTPUT"
- MemberName 66(VS_OUTPUT) 0 "x0_out"
- MemberName 66(VS_OUTPUT) 1 "x1_out"
- Name 68 "@entryPointOutput"
- Name 74 "@entryPointOutput_Pos_out"
- Decorate 52(x0_in) Location 0
- Decorate 56(Pos_in) Location 1
- Decorate 59(x1_in) Location 2
- Decorate 68(@entryPointOutput) Location 0
- Decorate 74(@entryPointOutput_Pos_out) BuiltIn Position
+ Name 67 "@entryPointOutput.x0_out"
+ Name 71 "@entryPointOutput.Pos_out"
+ Name 74 "@entryPointOutput.x1_out"
+ Decorate 52(vsin.x0_in) Location 0
+ Decorate 56(vsin.Pos_in) Location 1
+ Decorate 59(vsin.x1_in) Location 2
+ Decorate 67(@entryPointOutput.x0_out) Location 0
+ Decorate 71(@entryPointOutput.Pos_out) BuiltIn Position
+ Decorate 74(@entryPointOutput.x1_out) Location 1
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
@@ -279,45 +271,42 @@ Shader version: 450
31: TypePointer Function 6(int)
38: 6(int) Constant 2
51: TypePointer Input 6(int)
- 52(x0_in): 51(ptr) Variable Input
+ 52(vsin.x0_in): 51(ptr) Variable Input
55: TypePointer Input 8(fvec4)
- 56(Pos_in): 55(ptr) Variable Input
- 59(x1_in): 51(ptr) Variable Input
- 66(VS_OUTPUT): TypeStruct 6(int) 6(int)
- 67: TypePointer Output 66(VS_OUTPUT)
-68(@entryPointOutput): 67(ptr) Variable Output
- 71: TypePointer Output 6(int)
- 73: TypePointer Output 8(fvec4)
-74(@entryPointOutput_Pos_out): 73(ptr) Variable Output
+ 56(vsin.Pos_in): 55(ptr) Variable Input
+ 59(vsin.x1_in): 51(ptr) Variable Input
+ 66: TypePointer Output 6(int)
+67(@entryPointOutput.x0_out): 66(ptr) Variable Output
+ 70: TypePointer Output 8(fvec4)
+71(@entryPointOutput.Pos_out): 70(ptr) Variable Output
+74(@entryPointOutput.x1_out): 66(ptr) Variable Output
4(main): 2 Function None 3
5: Label
50(vsin): 10(ptr) Variable Function
62(flattenTemp): 12(ptr) Variable Function
63(param): 10(ptr) Variable Function
- 53: 6(int) Load 52(x0_in)
+ 53: 6(int) Load 52(vsin.x0_in)
54: 31(ptr) AccessChain 50(vsin) 30
Store 54 53
- 57: 8(fvec4) Load 56(Pos_in)
+ 57: 8(fvec4) Load 56(vsin.Pos_in)
58: 23(ptr) AccessChain 50(vsin) 22
Store 58 57
- 60: 6(int) Load 59(x1_in)
+ 60: 6(int) Load 59(vsin.x1_in)
61: 31(ptr) AccessChain 50(vsin) 38
Store 61 60
64: 9(VS_INPUT) Load 50(vsin)
Store 63(param) 64
65:11(VS_OUTPUT) FunctionCall 20(@main(struct-VS_INPUT-i1-vf4-i11;) 63(param)
Store 62(flattenTemp) 65
- 69: 31(ptr) AccessChain 62(flattenTemp) 30
- 70: 6(int) Load 69
- 72: 71(ptr) AccessChain 68(@entryPointOutput) 30
- Store 72 70
- 75: 23(ptr) AccessChain 62(flattenTemp) 22
- 76: 8(fvec4) Load 75
- Store 74(@entryPointOutput_Pos_out) 76
- 77: 31(ptr) AccessChain 62(flattenTemp) 38
- 78: 6(int) Load 77
- 79: 71(ptr) AccessChain 68(@entryPointOutput) 22
- Store 79 78
+ 68: 31(ptr) AccessChain 62(flattenTemp) 30
+ 69: 6(int) Load 68
+ Store 67(@entryPointOutput.x0_out) 69
+ 72: 23(ptr) AccessChain 62(flattenTemp) 22
+ 73: 8(fvec4) Load 72
+ Store 71(@entryPointOutput.Pos_out) 73
+ 75: 31(ptr) AccessChain 62(flattenTemp) 38
+ 76: 6(int) Load 75
+ Store 74(@entryPointOutput.x1_out) 76
Return
FunctionEnd
16(Fn1(struct-VS_INPUT-i1-vf4-i11;struct-VS_OUTPUT-i1-vf4-i11;): 2 Function None 13
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.nested.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.nested.geom.out
index 42046da70c4..0d83cdf2aab 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.nested.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.nested.geom.out
@@ -1,5 +1,5 @@
hlsl.struct.split.nested.geom
-Shader version: 450
+Shader version: 500
invocations = -1
max_vertices = 3
input primitive = triangles
@@ -34,11 +34,96 @@ output primitive = triangle_strip
0:? Constant:
0:? 5.000000
0:? 6.000000
-0:30 Sequence
-0:30 move second child to first child ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
-0:30 'ts' ( out structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
-0:30 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
-0:30 EmitVertex ( temp void)
+0:29 move second child to first child ( temp float)
+0:29 direct index ( temp float)
+0:29 m0_array: direct index for structure ( temp 2-element array of float)
+0:29 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:29 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2.300000
+0:30 move second child to first child ( temp float)
+0:30 direct index ( temp float)
+0:30 m0_array: direct index for structure ( temp 2-element array of float)
+0:30 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:30 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2.300000
+0:31 move second child to first child ( temp int)
+0:31 m1: direct index for structure ( temp int)
+0:31 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:31 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:33 Sequence
+0:33 Sequence
+0:33 move second child to first child ( temp 4-component vector of float)
+0:? 'ts.pos' ( out 4-component vector of float Position)
+0:33 pos: direct index for structure ( temp 4-component vector of float)
+0:33 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 move second child to first child ( temp 2-component vector of float)
+0:? 'ts.psIn.tc' (layout( location=0) out 2-component vector of float)
+0:33 tc: direct index for structure ( temp 2-component vector of float)
+0:33 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 move second child to first child ( temp float)
+0:? 'ts.contains_no_builtin_io.m0_array[0]' (layout( location=1) out float)
+0:33 direct index ( temp float)
+0:33 m0_array: direct index for structure ( temp 2-element array of float)
+0:33 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 move second child to first child ( temp float)
+0:? 'ts.contains_no_builtin_io.m0_array[1]' (layout( location=2) out float)
+0:33 direct index ( temp float)
+0:33 m0_array: direct index for structure ( temp 2-element array of float)
+0:33 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 move second child to first child ( temp int)
+0:? 'ts.contains_no_builtin_io.m1' (layout( location=3) out int)
+0:33 m1: direct index for structure ( temp int)
+0:33 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 EmitVertex ( temp void)
0:24 Function Definition: main( ( temp void)
0:24 Function Parameters:
0:? Sequence
@@ -52,7 +137,7 @@ output primitive = triangle_strip
0:24 Constant:
0:24 0 (const int)
0:24 direct index ( in 4-component vector of float Position)
-0:? 'tin_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'tin.pos' ( in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp 2-component vector of float)
@@ -79,7 +164,7 @@ output primitive = triangle_strip
0:24 Constant:
0:24 0 (const int)
0:24 direct index ( in 4-component vector of float Position)
-0:? 'tin_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'tin.pos' ( in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 1 (const int)
0:24 move second child to first child ( temp 2-component vector of float)
@@ -106,7 +191,7 @@ output primitive = triangle_strip
0:24 Constant:
0:24 0 (const int)
0:24 direct index ( in 4-component vector of float Position)
-0:? 'tin_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'tin.pos' ( in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 2 (const int)
0:24 move second child to first child ( temp 2-component vector of float)
@@ -128,13 +213,19 @@ output primitive = triangle_strip
0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'ts' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:? Linker Objects
+0:? 'tin.pos' ( in 3-element array of 4-component vector of float Position)
0:? 'tin' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc})
+0:? 'ts.pos' ( out 4-component vector of float Position)
+0:? 'ts.psIn.tc' (layout( location=0) out 2-component vector of float)
+0:? 'ts.contains_no_builtin_io.m0_array[0]' (layout( location=1) out float)
+0:? 'ts.contains_no_builtin_io.m0_array[1]' (layout( location=2) out float)
+0:? 'ts.contains_no_builtin_io.m1' (layout( location=3) out int)
Linked geometry stage:
-Shader version: 450
+Shader version: 500
invocations = 1
max_vertices = 3
input primitive = triangles
@@ -169,11 +260,96 @@ output primitive = triangle_strip
0:? Constant:
0:? 5.000000
0:? 6.000000
-0:30 Sequence
-0:30 move second child to first child ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
-0:30 'ts' ( out structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
-0:30 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
-0:30 EmitVertex ( temp void)
+0:29 move second child to first child ( temp float)
+0:29 direct index ( temp float)
+0:29 m0_array: direct index for structure ( temp 2-element array of float)
+0:29 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:29 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2.300000
+0:30 move second child to first child ( temp float)
+0:30 direct index ( temp float)
+0:30 m0_array: direct index for structure ( temp 2-element array of float)
+0:30 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:30 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2.300000
+0:31 move second child to first child ( temp int)
+0:31 m1: direct index for structure ( temp int)
+0:31 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:31 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:33 Sequence
+0:33 Sequence
+0:33 move second child to first child ( temp 4-component vector of float)
+0:? 'ts.pos' ( out 4-component vector of float Position)
+0:33 pos: direct index for structure ( temp 4-component vector of float)
+0:33 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 move second child to first child ( temp 2-component vector of float)
+0:? 'ts.psIn.tc' (layout( location=0) out 2-component vector of float)
+0:33 tc: direct index for structure ( temp 2-component vector of float)
+0:33 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 move second child to first child ( temp float)
+0:? 'ts.contains_no_builtin_io.m0_array[0]' (layout( location=1) out float)
+0:33 direct index ( temp float)
+0:33 m0_array: direct index for structure ( temp 2-element array of float)
+0:33 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 move second child to first child ( temp float)
+0:? 'ts.contains_no_builtin_io.m0_array[1]' (layout( location=2) out float)
+0:33 direct index ( temp float)
+0:33 m0_array: direct index for structure ( temp 2-element array of float)
+0:33 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 move second child to first child ( temp int)
+0:? 'ts.contains_no_builtin_io.m1' (layout( location=3) out int)
+0:33 m1: direct index for structure ( temp int)
+0:33 contains_no_builtin_io: direct index for structure ( temp structure{ temp 2-element array of float m0_array, temp int m1})
+0:33 'o' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 EmitVertex ( temp void)
0:24 Function Definition: main( ( temp void)
0:24 Function Parameters:
0:? Sequence
@@ -187,7 +363,7 @@ output primitive = triangle_strip
0:24 Constant:
0:24 0 (const int)
0:24 direct index ( in 4-component vector of float Position)
-0:? 'tin_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'tin.pos' ( in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 0 (const int)
0:24 move second child to first child ( temp 2-component vector of float)
@@ -214,7 +390,7 @@ output primitive = triangle_strip
0:24 Constant:
0:24 0 (const int)
0:24 direct index ( in 4-component vector of float Position)
-0:? 'tin_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'tin.pos' ( in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 1 (const int)
0:24 move second child to first child ( temp 2-component vector of float)
@@ -241,7 +417,7 @@ output primitive = triangle_strip
0:24 Constant:
0:24 0 (const int)
0:24 direct index ( in 4-component vector of float Position)
-0:? 'tin_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'tin.pos' ( in 3-element array of 4-component vector of float Position)
0:24 Constant:
0:24 2 (const int)
0:24 move second child to first child ( temp 2-component vector of float)
@@ -263,20 +439,27 @@ output primitive = triangle_strip
0:? 'tin' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 2-component vector of float tc})
0:? 'ts' ( temp structure{ temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc} psIn, temp structure{ temp 2-element array of float m0_array, temp int m1} contains_no_builtin_io})
0:? Linker Objects
+0:? 'tin.pos' ( in 3-element array of 4-component vector of float Position)
0:? 'tin' (layout( location=0) in 3-element array of structure{ temp 2-component vector of float tc})
+0:? 'ts.pos' ( out 4-component vector of float Position)
+0:? 'ts.psIn.tc' (layout( location=0) out 2-component vector of float)
+0:? 'ts.contains_no_builtin_io.m0_array[0]' (layout( location=1) out float)
+0:? 'ts.contains_no_builtin_io.m0_array[1]' (layout( location=2) out float)
+0:? 'ts.contains_no_builtin_io.m1' (layout( location=3) out int)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 75
+// Generated by (magic number): 80002
+// Id's are bound by 100
Capability Geometry
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Geometry 4 "main" 44 52
+ EntryPoint Geometry 4 "main" 48 52 56 59 63 69 77
ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip
ExecutionMode 4 OutputVertices 3
+ Source HLSL 500
Name 4 "main"
Name 9 "PS_IN"
MemberName 9(PS_IN) 0 "pos"
@@ -291,16 +474,26 @@ output primitive = triangle_strip
Name 21 "tin"
Name 22 "ts"
Name 25 "o"
- Name 41 "tin"
- Name 44 "tin_pos"
- Name 49 "PS_IN"
- MemberName 49(PS_IN) 0 "tc"
- Name 52 "tin"
- Name 70 "ts"
- Name 71 "param"
- Name 73 "param"
- Decorate 44(tin_pos) BuiltIn Position
- Decorate 52(tin) Location 0
+ Name 48 "ts.pos"
+ Name 52 "ts.psIn.tc"
+ Name 56 "ts.contains_no_builtin_io.m0_array[0]"
+ Name 59 "ts.contains_no_builtin_io.m0_array[1]"
+ Name 63 "ts.contains_no_builtin_io.m1"
+ Name 66 "tin"
+ Name 69 "tin.pos"
+ Name 74 "PS_IN"
+ MemberName 74(PS_IN) 0 "tc"
+ Name 77 "tin"
+ Name 94 "ts"
+ Name 95 "param"
+ Name 97 "param"
+ Decorate 48(ts.pos) BuiltIn Position
+ Decorate 52(ts.psIn.tc) Location 0
+ Decorate 56(ts.contains_no_builtin_io.m0_array[0]) Location 1
+ Decorate 59(ts.contains_no_builtin_io.m0_array[1]) Location 2
+ Decorate 63(ts.contains_no_builtin_io.m1) Location 3
+ Decorate 69(tin.pos) BuiltIn Position
+ Decorate 77(tin) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -330,49 +523,63 @@ output primitive = triangle_strip
36: 6(float) Constant 1086324736
37: 8(fvec2) ConstantComposite 35 36
38: TypePointer Function 8(fvec2)
- 42: TypeArray 7(fvec4) 11
- 43: TypePointer Input 42
- 44(tin_pos): 43(ptr) Variable Input
- 45: TypePointer Input 7(fvec4)
- 49(PS_IN): TypeStruct 8(fvec2)
- 50: TypeArray 49(PS_IN) 11
- 51: TypePointer Input 50
- 52(tin): 51(ptr) Variable Input
- 53: TypePointer Input 8(fvec2)
- 63: 16(int) Constant 2
+ 40: 6(float) Constant 1075000115
+ 41: TypePointer Function 6(float)
+ 44: 16(int) Constant 2
+ 45: TypePointer Function 16(int)
+ 47: TypePointer Output 7(fvec4)
+ 48(ts.pos): 47(ptr) Variable Output
+ 51: TypePointer Output 8(fvec2)
+ 52(ts.psIn.tc): 51(ptr) Variable Output
+ 55: TypePointer Output 6(float)
+56(ts.contains_no_builtin_io.m0_array[0]): 55(ptr) Variable Output
+59(ts.contains_no_builtin_io.m0_array[1]): 55(ptr) Variable Output
+ 62: TypePointer Output 16(int)
+63(ts.contains_no_builtin_io.m1): 62(ptr) Variable Output
+ 67: TypeArray 7(fvec4) 11
+ 68: TypePointer Input 67
+ 69(tin.pos): 68(ptr) Variable Input
+ 70: TypePointer Input 7(fvec4)
+ 74(PS_IN): TypeStruct 8(fvec2)
+ 75: TypeArray 74(PS_IN) 11
+ 76: TypePointer Input 75
+ 77(tin): 76(ptr) Variable Input
+ 78: TypePointer Input 8(fvec2)
4(main): 2 Function None 3
5: Label
- 41(tin): 13(ptr) Variable Function
- 70(ts): 19(ptr) Variable Function
- 71(param): 13(ptr) Variable Function
- 73(param): 19(ptr) Variable Function
- 46: 45(ptr) AccessChain 44(tin_pos) 26
- 47: 7(fvec4) Load 46
- 48: 32(ptr) AccessChain 41(tin) 26 26
- Store 48 47
- 54: 53(ptr) AccessChain 52(tin) 26 26
- 55: 8(fvec2) Load 54
- 56: 38(ptr) AccessChain 41(tin) 26 34
- Store 56 55
- 57: 45(ptr) AccessChain 44(tin_pos) 34
- 58: 7(fvec4) Load 57
- 59: 32(ptr) AccessChain 41(tin) 34 26
- Store 59 58
- 60: 53(ptr) AccessChain 52(tin) 34 26
- 61: 8(fvec2) Load 60
- 62: 38(ptr) AccessChain 41(tin) 34 34
- Store 62 61
- 64: 45(ptr) AccessChain 44(tin_pos) 63
- 65: 7(fvec4) Load 64
- 66: 32(ptr) AccessChain 41(tin) 63 26
- Store 66 65
- 67: 53(ptr) AccessChain 52(tin) 63 26
- 68: 8(fvec2) Load 67
- 69: 38(ptr) AccessChain 41(tin) 63 34
- Store 69 68
- 72: 12 Load 41(tin)
- Store 71(param) 72
- 74: 2 FunctionCall 23(@main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111;) 71(param) 73(param)
+ 66(tin): 13(ptr) Variable Function
+ 94(ts): 19(ptr) Variable Function
+ 95(param): 13(ptr) Variable Function
+ 97(param): 19(ptr) Variable Function
+ 71: 70(ptr) AccessChain 69(tin.pos) 26
+ 72: 7(fvec4) Load 71
+ 73: 32(ptr) AccessChain 66(tin) 26 26
+ Store 73 72
+ 79: 78(ptr) AccessChain 77(tin) 26 26
+ 80: 8(fvec2) Load 79
+ 81: 38(ptr) AccessChain 66(tin) 26 34
+ Store 81 80
+ 82: 70(ptr) AccessChain 69(tin.pos) 34
+ 83: 7(fvec4) Load 82
+ 84: 32(ptr) AccessChain 66(tin) 34 26
+ Store 84 83
+ 85: 78(ptr) AccessChain 77(tin) 34 26
+ 86: 8(fvec2) Load 85
+ 87: 38(ptr) AccessChain 66(tin) 34 34
+ Store 87 86
+ 88: 70(ptr) AccessChain 69(tin.pos) 44
+ 89: 7(fvec4) Load 88
+ 90: 32(ptr) AccessChain 66(tin) 44 26
+ Store 90 89
+ 91: 78(ptr) AccessChain 77(tin) 44 26
+ 92: 8(fvec2) Load 91
+ 93: 38(ptr) AccessChain 66(tin) 44 34
+ Store 93 92
+ 96: 12 Load 66(tin)
+ Store 95(param) 96
+ 98: 2 FunctionCall 23(@main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111;) 95(param) 97(param)
+ 99: 18(GS_OUT) Load 97(param)
+ Store 94(ts) 99
Return
FunctionEnd
23(@main(struct-PS_IN-vf4-vf21[3];struct-GS_OUT-struct-PS_IN-vf4-vf21-struct-STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO-f1[2]-i111;): 2 Function None 20
@@ -384,8 +591,27 @@ output primitive = triangle_strip
Store 33 31
39: 38(ptr) AccessChain 25(o) 26 34
Store 39 37
- 40: 18(GS_OUT) Load 25(o)
- Store 22(ts) 40
+ 42: 41(ptr) AccessChain 25(o) 34 26 26
+ Store 42 40
+ 43: 41(ptr) AccessChain 25(o) 34 26 34
+ Store 43 40
+ 46: 45(ptr) AccessChain 25(o) 34 34
+ Store 46 44
+ 49: 32(ptr) AccessChain 25(o) 26 26
+ 50: 7(fvec4) Load 49
+ Store 48(ts.pos) 50
+ 53: 38(ptr) AccessChain 25(o) 26 34
+ 54: 8(fvec2) Load 53
+ Store 52(ts.psIn.tc) 54
+ 57: 41(ptr) AccessChain 25(o) 34 26 26
+ 58: 6(float) Load 57
+ Store 56(ts.contains_no_builtin_io.m0_array[0]) 58
+ 60: 41(ptr) AccessChain 25(o) 34 26 34
+ 61: 6(float) Load 60
+ Store 59(ts.contains_no_builtin_io.m0_array[1]) 61
+ 64: 45(ptr) AccessChain 25(o) 34 34
+ 65: 16(int) Load 64
+ Store 63(ts.contains_no_builtin_io.m1) 65
EmitVertex
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.geom.out
index 29818f141cd..31b2cda7d0a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.geom.out
@@ -1,5 +1,5 @@
hlsl.struct.split.trivial.geom
-Shader version: 450
+Shader version: 500
invocations = -1
max_vertices = 3
input primitive = triangles
@@ -35,9 +35,13 @@ output primitive = triangle_strip
0:18 Constant:
0:18 0 (const int)
0:19 Sequence
-0:19 move second child to first child ( temp structure{ temp 4-component vector of float pos})
-0:19 'ts' ( out structure{ temp 4-component vector of float pos})
-0:19 'o' ( temp structure{ temp 4-component vector of float pos})
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of float)
+0:? 'ts.pos' ( out 4-component vector of float Position)
+0:19 pos: direct index for structure ( temp 4-component vector of float)
+0:19 'o' ( temp structure{ temp 4-component vector of float pos})
+0:19 Constant:
+0:19 0 (const int)
0:19 EmitVertex ( temp void)
0:17 Loop Terminal Expression
0:17 Pre-Increment ( temp int)
@@ -55,7 +59,7 @@ output primitive = triangle_strip
0:14 Constant:
0:14 0 (const int)
0:14 direct index ( in 4-component vector of float Position)
-0:? 'i_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'i.pos' ( in 3-element array of 4-component vector of float Position)
0:14 Constant:
0:14 0 (const int)
0:14 move second child to first child ( temp 4-component vector of float)
@@ -67,7 +71,7 @@ output primitive = triangle_strip
0:14 Constant:
0:14 0 (const int)
0:14 direct index ( in 4-component vector of float Position)
-0:? 'i_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'i.pos' ( in 3-element array of 4-component vector of float Position)
0:14 Constant:
0:14 1 (const int)
0:14 move second child to first child ( temp 4-component vector of float)
@@ -79,20 +83,21 @@ output primitive = triangle_strip
0:14 Constant:
0:14 0 (const int)
0:14 direct index ( in 4-component vector of float Position)
-0:? 'i_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'i.pos' ( in 3-element array of 4-component vector of float Position)
0:14 Constant:
0:14 2 (const int)
0:14 Function Call: @main(struct-PS_IN-vf41[3];struct-GS_OUT-vf41; ( temp void)
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos})
0:? 'ts' ( temp structure{ temp 4-component vector of float pos})
0:? Linker Objects
-0:? 'i' (layout( location=0) in 3-element array of structure{})
+0:? 'i.pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'ts.pos' ( out 4-component vector of float Position)
Linked geometry stage:
-Shader version: 450
+Shader version: 500
invocations = 1
max_vertices = 3
input primitive = triangles
@@ -128,9 +133,13 @@ output primitive = triangle_strip
0:18 Constant:
0:18 0 (const int)
0:19 Sequence
-0:19 move second child to first child ( temp structure{ temp 4-component vector of float pos})
-0:19 'ts' ( out structure{ temp 4-component vector of float pos})
-0:19 'o' ( temp structure{ temp 4-component vector of float pos})
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of float)
+0:? 'ts.pos' ( out 4-component vector of float Position)
+0:19 pos: direct index for structure ( temp 4-component vector of float)
+0:19 'o' ( temp structure{ temp 4-component vector of float pos})
+0:19 Constant:
+0:19 0 (const int)
0:19 EmitVertex ( temp void)
0:17 Loop Terminal Expression
0:17 Pre-Increment ( temp int)
@@ -148,7 +157,7 @@ output primitive = triangle_strip
0:14 Constant:
0:14 0 (const int)
0:14 direct index ( in 4-component vector of float Position)
-0:? 'i_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'i.pos' ( in 3-element array of 4-component vector of float Position)
0:14 Constant:
0:14 0 (const int)
0:14 move second child to first child ( temp 4-component vector of float)
@@ -160,7 +169,7 @@ output primitive = triangle_strip
0:14 Constant:
0:14 0 (const int)
0:14 direct index ( in 4-component vector of float Position)
-0:? 'i_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'i.pos' ( in 3-element array of 4-component vector of float Position)
0:14 Constant:
0:14 1 (const int)
0:14 move second child to first child ( temp 4-component vector of float)
@@ -172,27 +181,29 @@ output primitive = triangle_strip
0:14 Constant:
0:14 0 (const int)
0:14 direct index ( in 4-component vector of float Position)
-0:? 'i_pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'i.pos' ( in 3-element array of 4-component vector of float Position)
0:14 Constant:
0:14 2 (const int)
0:14 Function Call: @main(struct-PS_IN-vf41[3];struct-GS_OUT-vf41; ( temp void)
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos})
0:? 'ts' ( temp structure{ temp 4-component vector of float pos})
0:? Linker Objects
-0:? 'i' (layout( location=0) in 3-element array of structure{})
+0:? 'i.pos' ( in 3-element array of 4-component vector of float Position)
+0:? 'ts.pos' ( out 4-component vector of float Position)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 67
Capability Geometry
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Geometry 4 "main" 46 66
+ EntryPoint Geometry 4 "main" 40 49
ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip
ExecutionMode 4 OutputVertices 3
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_IN"
MemberName 8(PS_IN) 0 "pos"
@@ -203,15 +214,14 @@ output primitive = triangle_strip
Name 17 "ts"
Name 22 "x"
Name 33 "o"
- Name 43 "i"
- Name 46 "i_pos"
- Name 58 "ts"
- Name 59 "param"
- Name 61 "param"
- Name 63 "PS_IN"
- Name 66 "i"
- Decorate 46(i_pos) BuiltIn Position
- Decorate 66(i) Location 0
+ Name 40 "ts.pos"
+ Name 46 "i"
+ Name 49 "i.pos"
+ Name 61 "ts"
+ Name 62 "param"
+ Name 64 "param"
+ Decorate 40(ts.pos) BuiltIn Position
+ Decorate 49(i.pos) BuiltIn Position
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -230,37 +240,37 @@ output primitive = triangle_strip
30: 20(int) Constant 3
31: TypeBool
35: TypePointer Function 7(fvec4)
- 41: 20(int) Constant 1
- 44: TypeArray 7(fvec4) 10
- 45: TypePointer Input 44
- 46(i_pos): 45(ptr) Variable Input
- 47: TypePointer Input 7(fvec4)
- 54: 20(int) Constant 2
- 63(PS_IN): TypeStruct
- 64: TypeArray 63(PS_IN) 10
- 65: TypePointer Input 64
- 66(i): 65(ptr) Variable Input
+ 39: TypePointer Output 7(fvec4)
+ 40(ts.pos): 39(ptr) Variable Output
+ 44: 20(int) Constant 1
+ 47: TypeArray 7(fvec4) 10
+ 48: TypePointer Input 47
+ 49(i.pos): 48(ptr) Variable Input
+ 50: TypePointer Input 7(fvec4)
+ 57: 20(int) Constant 2
4(main): 2 Function None 3
5: Label
- 43(i): 12(ptr) Variable Function
- 58(ts): 14(ptr) Variable Function
- 59(param): 12(ptr) Variable Function
- 61(param): 14(ptr) Variable Function
- 48: 47(ptr) AccessChain 46(i_pos) 23
- 49: 7(fvec4) Load 48
- 50: 35(ptr) AccessChain 43(i) 23 23
- Store 50 49
- 51: 47(ptr) AccessChain 46(i_pos) 41
+ 46(i): 12(ptr) Variable Function
+ 61(ts): 14(ptr) Variable Function
+ 62(param): 12(ptr) Variable Function
+ 64(param): 14(ptr) Variable Function
+ 51: 50(ptr) AccessChain 49(i.pos) 23
52: 7(fvec4) Load 51
- 53: 35(ptr) AccessChain 43(i) 41 23
+ 53: 35(ptr) AccessChain 46(i) 23 23
Store 53 52
- 55: 47(ptr) AccessChain 46(i_pos) 54
- 56: 7(fvec4) Load 55
- 57: 35(ptr) AccessChain 43(i) 54 23
- Store 57 56
- 60: 11 Load 43(i)
- Store 59(param) 60
- 62: 2 FunctionCall 18(@main(struct-PS_IN-vf41[3];struct-GS_OUT-vf41;) 59(param) 61(param)
+ 54: 50(ptr) AccessChain 49(i.pos) 44
+ 55: 7(fvec4) Load 54
+ 56: 35(ptr) AccessChain 46(i) 44 23
+ Store 56 55
+ 58: 50(ptr) AccessChain 49(i.pos) 57
+ 59: 7(fvec4) Load 58
+ 60: 35(ptr) AccessChain 46(i) 57 23
+ Store 60 59
+ 63: 11 Load 46(i)
+ Store 62(param) 63
+ 65: 2 FunctionCall 18(@main(struct-PS_IN-vf41[3];struct-GS_OUT-vf41;) 62(param) 64(param)
+ 66: 13(GS_OUT) Load 64(param)
+ Store 61(ts) 66
Return
FunctionEnd
18(@main(struct-PS_IN-vf41[3];struct-GS_OUT-vf41;): 2 Function None 15
@@ -284,14 +294,15 @@ output primitive = triangle_strip
37: 7(fvec4) Load 36
38: 35(ptr) AccessChain 33(o) 23
Store 38 37
- 39: 13(GS_OUT) Load 33(o)
- Store 17(ts) 39
+ 41: 35(ptr) AccessChain 33(o) 23
+ 42: 7(fvec4) Load 41
+ Store 40(ts.pos) 42
EmitVertex
Branch 27
27: Label
- 40: 20(int) Load 22(x)
- 42: 20(int) IAdd 40 41
- Store 22(x) 42
+ 43: 20(int) Load 22(x)
+ 45: 20(int) IAdd 43 44
+ Store 22(x) 45
Branch 24
26: Label
Return
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.vert.out
index 822f819970b..f3c10c46e74 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.trivial.vert.out
@@ -1,5 +1,5 @@
hlsl.struct.split.trivial.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:16 Function Definition: @main(struct-VS_INPUT-vf41;vf4; ( temp structure{ temp 4-component vector of float Pos})
0:16 Function Parameters:
@@ -28,13 +28,13 @@ Shader version: 450
0:? 'vsin' ( temp structure{ temp 4-component vector of float Pos_in})
0:16 Constant:
0:16 0 (const int)
-0:? 'Pos_in' (layout( location=0) in 4-component vector of float)
+0:? 'vsin.Pos_in' (layout( location=0) in 4-component vector of float)
0:16 move second child to first child ( temp 4-component vector of float)
0:? 'Pos_loose' ( temp 4-component vector of float)
0:? 'Pos_loose' (layout( location=1) in 4-component vector of float)
0:16 Sequence
0:16 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:16 Pos: direct index for structure ( temp 4-component vector of float)
0:16 Function Call: @main(struct-VS_INPUT-vf41;vf4; ( temp structure{ temp 4-component vector of float Pos})
0:? 'vsin' ( temp structure{ temp 4-component vector of float Pos_in})
@@ -42,15 +42,15 @@ Shader version: 450
0:16 Constant:
0:16 0 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{})
-0:? 'Pos_in' (layout( location=0) in 4-component vector of float)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:? 'vsin.Pos_in' (layout( location=0) in 4-component vector of float)
0:? 'Pos_loose' (layout( location=1) in 4-component vector of float)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:16 Function Definition: @main(struct-VS_INPUT-vf41;vf4; ( temp structure{ temp 4-component vector of float Pos})
0:16 Function Parameters:
@@ -79,13 +79,13 @@ Shader version: 450
0:? 'vsin' ( temp structure{ temp 4-component vector of float Pos_in})
0:16 Constant:
0:16 0 (const int)
-0:? 'Pos_in' (layout( location=0) in 4-component vector of float)
+0:? 'vsin.Pos_in' (layout( location=0) in 4-component vector of float)
0:16 move second child to first child ( temp 4-component vector of float)
0:? 'Pos_loose' ( temp 4-component vector of float)
0:? 'Pos_loose' (layout( location=1) in 4-component vector of float)
0:16 Sequence
0:16 move second child to first child ( temp 4-component vector of float)
-0:? '@entryPointOutput_Pos' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
0:16 Pos: direct index for structure ( temp 4-component vector of float)
0:16 Function Call: @main(struct-VS_INPUT-vf41;vf4; ( temp structure{ temp 4-component vector of float Pos})
0:? 'vsin' ( temp structure{ temp 4-component vector of float Pos_in})
@@ -93,18 +93,19 @@ Shader version: 450
0:16 Constant:
0:16 0 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' (layout( location=0) out structure{})
-0:? 'Pos_in' (layout( location=0) in 4-component vector of float)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:? 'vsin.Pos_in' (layout( location=0) in 4-component vector of float)
0:? 'Pos_loose' (layout( location=1) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 48
+// Generated by (magic number): 80002
+// Id's are bound by 45
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 31 35 38 47
+ EntryPoint Vertex 4 "main" 31 35 38
+ Source HLSL 500
Name 4 "main"
Name 8 "VS_INPUT"
MemberName 8(VS_INPUT) 0 "Pos_in"
@@ -115,18 +116,15 @@ Shader version: 450
Name 14 "Pos_loose"
Name 18 "vsout"
Name 29 "vsin"
- Name 31 "Pos_in"
+ Name 31 "vsin.Pos_in"
Name 34 "Pos_loose"
Name 35 "Pos_loose"
- Name 38 "@entryPointOutput_Pos"
+ Name 38 "@entryPointOutput.Pos"
Name 39 "param"
Name 41 "param"
- Name 45 "VS_OUTPUT"
- Name 47 "@entryPointOutput"
- Decorate 31(Pos_in) Location 0
+ Decorate 31(vsin.Pos_in) Location 0
Decorate 35(Pos_loose) Location 1
- Decorate 38(@entryPointOutput_Pos) BuiltIn Position
- Decorate 47(@entryPointOutput) Location 0
+ Decorate 38(@entryPointOutput.Pos) BuiltIn Position
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -140,20 +138,17 @@ Shader version: 450
19: TypeInt 32 1
20: 19(int) Constant 0
30: TypePointer Input 7(fvec4)
- 31(Pos_in): 30(ptr) Variable Input
+ 31(vsin.Pos_in): 30(ptr) Variable Input
35(Pos_loose): 30(ptr) Variable Input
37: TypePointer Output 7(fvec4)
-38(@entryPointOutput_Pos): 37(ptr) Variable Output
- 45(VS_OUTPUT): TypeStruct
- 46: TypePointer Output 45(VS_OUTPUT)
-47(@entryPointOutput): 46(ptr) Variable Output
+38(@entryPointOutput.Pos): 37(ptr) Variable Output
4(main): 2 Function None 3
5: Label
29(vsin): 9(ptr) Variable Function
34(Pos_loose): 10(ptr) Variable Function
39(param): 9(ptr) Variable Function
41(param): 10(ptr) Variable Function
- 32: 7(fvec4) Load 31(Pos_in)
+ 32: 7(fvec4) Load 31(vsin.Pos_in)
33: 10(ptr) AccessChain 29(vsin) 20
Store 33 32
36: 7(fvec4) Load 35(Pos_loose)
@@ -164,7 +159,7 @@ Shader version: 450
Store 41(param) 42
43:11(VS_OUTPUT) FunctionCall 15(@main(struct-VS_INPUT-vf41;vf4;) 39(param) 41(param)
44: 7(fvec4) CompositeExtract 43 0
- Store 38(@entryPointOutput_Pos) 44
+ Store 38(@entryPointOutput.Pos) 44
Return
FunctionEnd
15(@main(struct-VS_INPUT-vf41;vf4;):11(VS_OUTPUT) Function None 12
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out
index 64c60ed671f..24c902fae7d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out
@@ -1,5 +1,5 @@
hlsl.structIoFourWay.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
using depth_greater
0:? Sequence
@@ -12,52 +12,77 @@ using depth_greater
0:15 Function Definition: main( ( temp void)
0:15 Function Parameters:
0:? Sequence
-0:15 move second child to first child ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
-0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
-0:? 't' (layout( location=0) in structure{ temp float f, centroid temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Sequence
+0:15 move second child to first child ( temp float)
+0:15 f: direct index for structure ( temp float)
+0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Constant:
+0:15 0 (const int)
+0:? 't.f' (layout( location=0) in float)
+0:15 move second child to first child ( temp float)
+0:15 g: direct index for structure ( temp float)
+0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Constant:
+0:15 1 (const int)
+0:? 't.g' (layout( location=1) centroid in float)
+0:15 move second child to first child ( temp float)
+0:15 d: direct index for structure ( temp float)
+0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Constant:
+0:15 2 (const int)
+0:? 't.d' (layout( location=2) in float)
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 normal: direct index for structure ( temp 4-component vector of float)
+0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Constant:
+0:15 3 (const int)
+0:? 't.normal' (layout( location=3) in 4-component vector of float)
0:15 Sequence
0:15 move second child to first child ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Function Call: @main(struct-T-f1-f1-f1-vf41; ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 move second child to first child ( temp float)
-0:? 'f' (layout( location=0) out float)
+0:? '@entryPointOutput.f' (layout( location=0) out float)
0:15 f: direct index for structure ( temp float)
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 0 (const int)
0:15 move second child to first child ( temp float)
-0:? 'g' (layout( location=1) out float)
+0:? '@entryPointOutput.g' (layout( location=1) out float)
0:15 g: direct index for structure ( temp float)
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 1 (const int)
0:15 move second child to first child ( temp float)
-0:? 'd' ( out float FragDepth)
+0:? '@entryPointOutput.d' ( out float FragDepth)
0:15 d: direct index for structure ( temp float)
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 2 (const int)
0:15 move second child to first child ( temp 4-component vector of float)
-0:? 'normal' (layout( location=2) out 4-component vector of float)
+0:? '@entryPointOutput.normal' (layout( location=2) out 4-component vector of float)
0:15 normal: direct index for structure ( temp 4-component vector of float)
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 3 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform structure{layout( offset=68) temp float f, temp float g, temp float d, temp 4-component vector of float normal} s})
-0:? 'anon@1' (layout( row_major std140) uniform block{layout( row_major std140 offset=88) uniform structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal} t})
-0:? 'f' (layout( location=0) out float)
-0:? 'g' (layout( location=1) out float)
-0:? 'd' ( out float FragDepth)
-0:? 'normal' (layout( location=2) out 4-component vector of float)
-0:? 't' (layout( location=0) in structure{ temp float f, centroid temp float g, temp float d, temp 4-component vector of float normal})
+0:? 'anon@1' (layout( row_major std140) uniform block{layout( row_major std140 offset=88) uniform structure{layout( offset=68) temp float f, temp float g, temp float d, temp 4-component vector of float normal} t})
+0:? '@entryPointOutput.d' ( out float FragDepth)
+0:? '@entryPointOutput.f' (layout( location=0) out float)
+0:? '@entryPointOutput.g' (layout( location=1) out float)
+0:? '@entryPointOutput.normal' (layout( location=2) out 4-component vector of float)
+0:? 't.f' (layout( location=0) in float)
+0:? 't.g' (layout( location=1) centroid in float)
+0:? 't.d' (layout( location=2) in float)
+0:? 't.normal' (layout( location=3) in 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
using depth_greater
0:? Sequence
@@ -70,57 +95,83 @@ using depth_greater
0:15 Function Definition: main( ( temp void)
0:15 Function Parameters:
0:? Sequence
-0:15 move second child to first child ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
-0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
-0:? 't' (layout( location=0) in structure{ temp float f, centroid temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Sequence
+0:15 move second child to first child ( temp float)
+0:15 f: direct index for structure ( temp float)
+0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Constant:
+0:15 0 (const int)
+0:? 't.f' (layout( location=0) in float)
+0:15 move second child to first child ( temp float)
+0:15 g: direct index for structure ( temp float)
+0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Constant:
+0:15 1 (const int)
+0:? 't.g' (layout( location=1) centroid in float)
+0:15 move second child to first child ( temp float)
+0:15 d: direct index for structure ( temp float)
+0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Constant:
+0:15 2 (const int)
+0:? 't.d' (layout( location=2) in float)
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 normal: direct index for structure ( temp 4-component vector of float)
+0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
+0:15 Constant:
+0:15 3 (const int)
+0:? 't.normal' (layout( location=3) in 4-component vector of float)
0:15 Sequence
0:15 move second child to first child ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Function Call: @main(struct-T-f1-f1-f1-vf41; ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:? 't' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 move second child to first child ( temp float)
-0:? 'f' (layout( location=0) out float)
+0:? '@entryPointOutput.f' (layout( location=0) out float)
0:15 f: direct index for structure ( temp float)
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 0 (const int)
0:15 move second child to first child ( temp float)
-0:? 'g' (layout( location=1) out float)
+0:? '@entryPointOutput.g' (layout( location=1) out float)
0:15 g: direct index for structure ( temp float)
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 1 (const int)
0:15 move second child to first child ( temp float)
-0:? 'd' ( out float FragDepth)
+0:? '@entryPointOutput.d' ( out float FragDepth)
0:15 d: direct index for structure ( temp float)
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 2 (const int)
0:15 move second child to first child ( temp 4-component vector of float)
-0:? 'normal' (layout( location=2) out 4-component vector of float)
+0:? '@entryPointOutput.normal' (layout( location=2) out 4-component vector of float)
0:15 normal: direct index for structure ( temp 4-component vector of float)
0:15 'flattenTemp' ( temp structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal})
0:15 Constant:
0:15 3 (const int)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform structure{layout( offset=68) temp float f, temp float g, temp float d, temp 4-component vector of float normal} s})
-0:? 'anon@1' (layout( row_major std140) uniform block{layout( row_major std140 offset=88) uniform structure{ temp float f, temp float g, temp float d, temp 4-component vector of float normal} t})
-0:? 'f' (layout( location=0) out float)
-0:? 'g' (layout( location=1) out float)
-0:? 'd' ( out float FragDepth)
-0:? 'normal' (layout( location=2) out 4-component vector of float)
-0:? 't' (layout( location=0) in structure{ temp float f, centroid temp float g, temp float d, temp 4-component vector of float normal})
+0:? 'anon@1' (layout( row_major std140) uniform block{layout( row_major std140 offset=88) uniform structure{layout( offset=68) temp float f, temp float g, temp float d, temp 4-component vector of float normal} t})
+0:? '@entryPointOutput.d' ( out float FragDepth)
+0:? '@entryPointOutput.f' (layout( location=0) out float)
+0:? '@entryPointOutput.g' (layout( location=1) out float)
+0:? '@entryPointOutput.normal' (layout( location=2) out 4-component vector of float)
+0:? 't.f' (layout( location=0) in float)
+0:? 't.g' (layout( location=1) centroid in float)
+0:? 't.d' (layout( location=2) in float)
+0:? 't.normal' (layout( location=3) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 64
+// Generated by (magic number): 80002
+// Id's are bound by 65
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 21 43 46 49 53
+ EntryPoint Fragment 4 "main" 22 27 31 36 45 48 51 55
ExecutionMode 4 OriginUpperLeft
ExecutionMode 4 DepthGreater
+ Source HLSL 500
Name 4 "main"
Name 8 "T"
MemberName 8(T) 0 "f"
@@ -131,54 +182,46 @@ using depth_greater
Name 11 "t"
Name 14 "local"
Name 18 "t"
- Name 19 "T"
- MemberName 19(T) 0 "f"
- MemberName 19(T) 1 "g"
- MemberName 19(T) 2 "d"
- MemberName 19(T) 3 "normal"
- Name 21 "t"
- Name 38 "flattenTemp"
- Name 39 "param"
- Name 43 "f"
- Name 46 "g"
- Name 49 "d"
- Name 53 "normal"
- Name 56 "T"
- MemberName 56(T) 0 "f"
- MemberName 56(T) 1 "g"
- MemberName 56(T) 2 "d"
- MemberName 56(T) 3 "normal"
- Name 57 "$Global"
- MemberName 57($Global) 0 "s"
- Name 59 ""
- Name 60 "T"
- MemberName 60(T) 0 "f"
- MemberName 60(T) 1 "g"
- MemberName 60(T) 2 "d"
- MemberName 60(T) 3 "normal"
- Name 61 "buff"
- MemberName 61(buff) 0 "t"
- Name 63 ""
- MemberDecorate 19(T) 1 Centroid
- Decorate 21(t) Location 0
- Decorate 43(f) Location 0
- Decorate 46(g) Location 1
- Decorate 49(d) BuiltIn FragDepth
- Decorate 53(normal) Location 2
- MemberDecorate 56(T) 0 Offset 68
- MemberDecorate 56(T) 1 Offset 72
- MemberDecorate 56(T) 2 Offset 76
- MemberDecorate 56(T) 3 Offset 80
- MemberDecorate 57($Global) 0 Offset 0
- Decorate 57($Global) Block
- Decorate 59 DescriptorSet 0
- MemberDecorate 60(T) 0 Offset 0
- MemberDecorate 60(T) 1 Offset 4
- MemberDecorate 60(T) 2 Offset 8
- MemberDecorate 60(T) 3 Offset 16
- MemberDecorate 61(buff) 0 Offset 96
- Decorate 61(buff) Block
- Decorate 63 DescriptorSet 0
+ Name 22 "t.f"
+ Name 27 "t.g"
+ Name 31 "t.d"
+ Name 36 "t.normal"
+ Name 40 "flattenTemp"
+ Name 41 "param"
+ Name 45 "@entryPointOutput.f"
+ Name 48 "@entryPointOutput.g"
+ Name 51 "@entryPointOutput.d"
+ Name 55 "@entryPointOutput.normal"
+ Name 58 "T"
+ MemberName 58(T) 0 "f"
+ MemberName 58(T) 1 "g"
+ MemberName 58(T) 2 "d"
+ MemberName 58(T) 3 "normal"
+ Name 59 "$Global"
+ MemberName 59($Global) 0 "s"
+ Name 61 ""
+ Name 62 "buff"
+ MemberName 62(buff) 0 "t"
+ Name 64 ""
+ Decorate 22(t.f) Location 0
+ Decorate 27(t.g) Centroid
+ Decorate 27(t.g) Location 1
+ Decorate 31(t.d) Location 2
+ Decorate 36(t.normal) Location 3
+ Decorate 45(@entryPointOutput.f) Location 0
+ Decorate 48(@entryPointOutput.g) Location 1
+ Decorate 51(@entryPointOutput.d) BuiltIn FragDepth
+ Decorate 55(@entryPointOutput.normal) Location 2
+ MemberDecorate 58(T) 0 Offset 68
+ MemberDecorate 58(T) 1 Offset 72
+ MemberDecorate 58(T) 2 Offset 76
+ MemberDecorate 58(T) 3 Offset 80
+ MemberDecorate 59($Global) 0 Offset 0
+ Decorate 59($Global) Block
+ Decorate 61 DescriptorSet 0
+ MemberDecorate 62(buff) 0 Offset 96
+ Decorate 62(buff) Block
+ Decorate 64 DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -186,64 +229,65 @@ using depth_greater
8(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
9: TypePointer Function 8(T)
10: TypeFunction 8(T) 9(ptr)
- 19(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
- 20: TypePointer Input 19(T)
- 21(t): 20(ptr) Variable Input
- 24: TypeInt 32 1
- 25: 24(int) Constant 0
- 26: TypePointer Function 6(float)
- 29: 24(int) Constant 1
- 32: 24(int) Constant 2
- 35: 24(int) Constant 3
- 36: TypePointer Function 7(fvec4)
- 42: TypePointer Output 6(float)
- 43(f): 42(ptr) Variable Output
- 46(g): 42(ptr) Variable Output
- 49(d): 42(ptr) Variable Output
- 52: TypePointer Output 7(fvec4)
- 53(normal): 52(ptr) Variable Output
- 56(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
- 57($Global): TypeStruct 56(T)
- 58: TypePointer Uniform 57($Global)
- 59: 58(ptr) Variable Uniform
- 60(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
- 61(buff): TypeStruct 60(T)
- 62: TypePointer Uniform 61(buff)
- 63: 62(ptr) Variable Uniform
+ 19: TypeInt 32 1
+ 20: 19(int) Constant 0
+ 21: TypePointer Input 6(float)
+ 22(t.f): 21(ptr) Variable Input
+ 24: TypePointer Function 6(float)
+ 26: 19(int) Constant 1
+ 27(t.g): 21(ptr) Variable Input
+ 30: 19(int) Constant 2
+ 31(t.d): 21(ptr) Variable Input
+ 34: 19(int) Constant 3
+ 35: TypePointer Input 7(fvec4)
+ 36(t.normal): 35(ptr) Variable Input
+ 38: TypePointer Function 7(fvec4)
+ 44: TypePointer Output 6(float)
+45(@entryPointOutput.f): 44(ptr) Variable Output
+48(@entryPointOutput.g): 44(ptr) Variable Output
+51(@entryPointOutput.d): 44(ptr) Variable Output
+ 54: TypePointer Output 7(fvec4)
+55(@entryPointOutput.normal): 54(ptr) Variable Output
+ 58(T): TypeStruct 6(float) 6(float) 6(float) 7(fvec4)
+ 59($Global): TypeStruct 58(T)
+ 60: TypePointer Uniform 59($Global)
+ 61: 60(ptr) Variable Uniform
+ 62(buff): TypeStruct 58(T)
+ 63: TypePointer Uniform 62(buff)
+ 64: 63(ptr) Variable Uniform
4(main): 2 Function None 3
5: Label
18(t): 9(ptr) Variable Function
- 38(flattenTemp): 9(ptr) Variable Function
- 39(param): 9(ptr) Variable Function
- 22: 19(T) Load 21(t)
- 23: 6(float) CompositeExtract 22 0
- 27: 26(ptr) AccessChain 18(t) 25
- Store 27 23
- 28: 6(float) CompositeExtract 22 1
- 30: 26(ptr) AccessChain 18(t) 29
- Store 30 28
- 31: 6(float) CompositeExtract 22 2
- 33: 26(ptr) AccessChain 18(t) 32
- Store 33 31
- 34: 7(fvec4) CompositeExtract 22 3
- 37: 36(ptr) AccessChain 18(t) 35
- Store 37 34
- 40: 8(T) Load 18(t)
- Store 39(param) 40
- 41: 8(T) FunctionCall 12(@main(struct-T-f1-f1-f1-vf41;) 39(param)
- Store 38(flattenTemp) 41
- 44: 26(ptr) AccessChain 38(flattenTemp) 25
- 45: 6(float) Load 44
- Store 43(f) 45
- 47: 26(ptr) AccessChain 38(flattenTemp) 29
- 48: 6(float) Load 47
- Store 46(g) 48
- 50: 26(ptr) AccessChain 38(flattenTemp) 32
- 51: 6(float) Load 50
- Store 49(d) 51
- 54: 36(ptr) AccessChain 38(flattenTemp) 35
- 55: 7(fvec4) Load 54
- Store 53(normal) 55
+ 40(flattenTemp): 9(ptr) Variable Function
+ 41(param): 9(ptr) Variable Function
+ 23: 6(float) Load 22(t.f)
+ 25: 24(ptr) AccessChain 18(t) 20
+ Store 25 23
+ 28: 6(float) Load 27(t.g)
+ 29: 24(ptr) AccessChain 18(t) 26
+ Store 29 28
+ 32: 6(float) Load 31(t.d)
+ 33: 24(ptr) AccessChain 18(t) 30
+ Store 33 32
+ 37: 7(fvec4) Load 36(t.normal)
+ 39: 38(ptr) AccessChain 18(t) 34
+ Store 39 37
+ 42: 8(T) Load 18(t)
+ Store 41(param) 42
+ 43: 8(T) FunctionCall 12(@main(struct-T-f1-f1-f1-vf41;) 41(param)
+ Store 40(flattenTemp) 43
+ 46: 24(ptr) AccessChain 40(flattenTemp) 20
+ 47: 6(float) Load 46
+ Store 45(@entryPointOutput.f) 47
+ 49: 24(ptr) AccessChain 40(flattenTemp) 26
+ 50: 6(float) Load 49
+ Store 48(@entryPointOutput.g) 50
+ 52: 24(ptr) AccessChain 40(flattenTemp) 30
+ 53: 6(float) Load 52
+ Store 51(@entryPointOutput.d) 53
+ 56: 38(ptr) AccessChain 40(flattenTemp) 34
+ 57: 7(fvec4) Load 56
+ Store 55(@entryPointOutput.normal) 57
Return
FunctionEnd
12(@main(struct-T-f1-f1-f1-vf41;): 8(T) Function None 10
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structStructName.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structStructName.frag.out
index 0fc40325c62..dded13f9fa6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structStructName.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structStructName.frag.out
@@ -1,5 +1,5 @@
hlsl.structStructName.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: @main( ( temp int)
@@ -23,7 +23,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: @main( ( temp int)
@@ -44,7 +44,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 22
Capability Shader
@@ -52,6 +52,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 20
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "@main("
Name 10 "S"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out
index 7c84d37fc37..534ea7ce23d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -1,5 +1,5 @@
hlsl.structarray.flatten.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:23 Function Definition: @main(struct-PS_OUTPUT-vf41; ( temp void)
@@ -15,8 +15,8 @@ gl_FragCoord origin is upper left
0:25 add ( temp 4-component vector of float)
0:25 texture ( temp 4-component vector of float)
0:25 Construct combined texture-sampler ( temp sampler1D)
-0:? 'tex' ( uniform texture1D)
-0:? 'samp' ( uniform sampler)
+0:? 'g_texdata.tex' ( uniform texture1D)
+0:? 'g_texdata.samp' ( uniform sampler)
0:25 Constant:
0:25 0.500000
0:26 texture ( temp 4-component vector of float)
@@ -27,8 +27,14 @@ gl_FragCoord origin is upper left
0:26 0.400000
0:27 texture ( temp 4-component vector of float)
0:27 Construct combined texture-sampler ( temp sampler1D)
-0:? 'g_texdata_array2[1].tex[0]' ( uniform texture1D)
-0:? 'g_texdata_array2[1].samp[0]' ( uniform sampler)
+0:27 direct index ( temp texture1D)
+0:? 'g_texdata_array2[1].tex' ( uniform 2-element array of texture1D)
+0:27 Constant:
+0:27 0 (const int)
+0:27 direct index ( temp sampler)
+0:? 'g_texdata_array2[1].samp' ( uniform 2-element array of sampler)
+0:27 Constant:
+0:27 0 (const int)
0:27 Constant:
0:27 0.300000
0:23 Function Definition: main( ( temp void)
@@ -38,7 +44,7 @@ gl_FragCoord origin is upper left
0:? 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:23 Sequence
0:23 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? 'ps_output.color' (layout( location=0) out 4-component vector of float)
0:23 color: direct index for structure ( temp 4-component vector of float)
0:? 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:23 Constant:
@@ -46,25 +52,34 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'g_samp' ( uniform sampler)
0:? 'g_tex' ( uniform texture1D)
-0:? 'g_texdata_array2[0].samp[0]' ( uniform sampler)
-0:? 'g_texdata_array2[0].samp[1]' ( uniform sampler)
-0:? 'g_texdata_array2[0].tex[0]' ( uniform texture1D)
-0:? 'g_texdata_array2[0].tex[1]' ( uniform texture1D)
-0:? 'g_texdata_array2[1].samp[0]' ( uniform sampler)
-0:? 'g_texdata_array2[1].samp[1]' ( uniform sampler)
-0:? 'g_texdata_array2[1].tex[0]' ( uniform texture1D)
-0:? 'g_texdata_array2[1].tex[1]' ( uniform texture1D)
-0:? 'g_texdata_array2[2].samp[0]' ( uniform sampler)
-0:? 'g_texdata_array2[2].samp[1]' ( uniform sampler)
-0:? 'g_texdata_array2[2].tex[0]' ( uniform texture1D)
-0:? 'g_texdata_array2[2].tex[1]' ( uniform texture1D)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? 'g_texdata.samp' ( uniform sampler)
+0:? 'g_texdata.tex' ( uniform texture1D)
+0:? 'g_texdata.nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array[0].samp' ( uniform sampler)
+0:? 'g_texdata_array[0].tex' ( uniform texture1D)
+0:? 'g_texdata_array[0].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array[1].samp' ( uniform sampler)
+0:? 'g_texdata_array[1].tex' ( uniform texture1D)
+0:? 'g_texdata_array[1].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array[2].samp' ( uniform sampler)
+0:? 'g_texdata_array[2].tex' ( uniform texture1D)
+0:? 'g_texdata_array[2].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array2[0].samp' ( uniform 2-element array of sampler)
+0:? 'g_texdata_array2[0].tex' ( uniform 2-element array of texture1D)
+0:? 'g_texdata_array2[0].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array2[1].samp' ( uniform 2-element array of sampler)
+0:? 'g_texdata_array2[1].tex' ( uniform 2-element array of texture1D)
+0:? 'g_texdata_array2[1].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array2[2].samp' ( uniform 2-element array of sampler)
+0:? 'g_texdata_array2[2].tex' ( uniform 2-element array of texture1D)
+0:? 'g_texdata_array2[2].nonopaque_thing' ( uniform int)
+0:? 'ps_output.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:23 Function Definition: @main(struct-PS_OUTPUT-vf41; ( temp void)
@@ -80,8 +95,8 @@ gl_FragCoord origin is upper left
0:25 add ( temp 4-component vector of float)
0:25 texture ( temp 4-component vector of float)
0:25 Construct combined texture-sampler ( temp sampler1D)
-0:? 'tex' ( uniform texture1D)
-0:? 'samp' ( uniform sampler)
+0:? 'g_texdata.tex' ( uniform texture1D)
+0:? 'g_texdata.samp' ( uniform sampler)
0:25 Constant:
0:25 0.500000
0:26 texture ( temp 4-component vector of float)
@@ -92,8 +107,14 @@ gl_FragCoord origin is upper left
0:26 0.400000
0:27 texture ( temp 4-component vector of float)
0:27 Construct combined texture-sampler ( temp sampler1D)
-0:? 'g_texdata_array2[1].tex[0]' ( uniform texture1D)
-0:? 'g_texdata_array2[1].samp[0]' ( uniform sampler)
+0:27 direct index ( temp texture1D)
+0:? 'g_texdata_array2[1].tex' ( uniform 2-element array of texture1D)
+0:27 Constant:
+0:27 0 (const int)
+0:27 direct index ( temp sampler)
+0:? 'g_texdata_array2[1].samp' ( uniform 2-element array of sampler)
+0:27 Constant:
+0:27 0 (const int)
0:27 Constant:
0:27 0.300000
0:23 Function Definition: main( ( temp void)
@@ -103,7 +124,7 @@ gl_FragCoord origin is upper left
0:? 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:23 Sequence
0:23 move second child to first child ( temp 4-component vector of float)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? 'ps_output.color' (layout( location=0) out 4-component vector of float)
0:23 color: direct index for structure ( temp 4-component vector of float)
0:? 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:23 Constant:
@@ -111,75 +132,88 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'g_samp' ( uniform sampler)
0:? 'g_tex' ( uniform texture1D)
-0:? 'g_texdata_array2[0].samp[0]' ( uniform sampler)
-0:? 'g_texdata_array2[0].samp[1]' ( uniform sampler)
-0:? 'g_texdata_array2[0].tex[0]' ( uniform texture1D)
-0:? 'g_texdata_array2[0].tex[1]' ( uniform texture1D)
-0:? 'g_texdata_array2[1].samp[0]' ( uniform sampler)
-0:? 'g_texdata_array2[1].samp[1]' ( uniform sampler)
-0:? 'g_texdata_array2[1].tex[0]' ( uniform texture1D)
-0:? 'g_texdata_array2[1].tex[1]' ( uniform texture1D)
-0:? 'g_texdata_array2[2].samp[0]' ( uniform sampler)
-0:? 'g_texdata_array2[2].samp[1]' ( uniform sampler)
-0:? 'g_texdata_array2[2].tex[0]' ( uniform texture1D)
-0:? 'g_texdata_array2[2].tex[1]' ( uniform texture1D)
-0:? 'color' (layout( location=0) out 4-component vector of float)
+0:? 'g_texdata.samp' ( uniform sampler)
+0:? 'g_texdata.tex' ( uniform texture1D)
+0:? 'g_texdata.nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array[0].samp' ( uniform sampler)
+0:? 'g_texdata_array[0].tex' ( uniform texture1D)
+0:? 'g_texdata_array[0].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array[1].samp' ( uniform sampler)
+0:? 'g_texdata_array[1].tex' ( uniform texture1D)
+0:? 'g_texdata_array[1].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array[2].samp' ( uniform sampler)
+0:? 'g_texdata_array[2].tex' ( uniform texture1D)
+0:? 'g_texdata_array[2].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array2[0].samp' ( uniform 2-element array of sampler)
+0:? 'g_texdata_array2[0].tex' ( uniform 2-element array of texture1D)
+0:? 'g_texdata_array2[0].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array2[1].samp' ( uniform 2-element array of sampler)
+0:? 'g_texdata_array2[1].tex' ( uniform 2-element array of texture1D)
+0:? 'g_texdata_array2[1].nonopaque_thing' ( uniform int)
+0:? 'g_texdata_array2[2].samp' ( uniform 2-element array of sampler)
+0:? 'g_texdata_array2[2].tex' ( uniform 2-element array of texture1D)
+0:? 'g_texdata_array2[2].nonopaque_thing' ( uniform int)
+0:? 'ps_output.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 66
+// Generated by (magic number): 80002
+// Id's are bound by 80
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 51
+ EntryPoint Fragment 4 "main" 59
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "color"
Name 12 "@main(struct-PS_OUTPUT-vf41;"
Name 11 "ps_output"
- Name 18 "tex"
- Name 22 "samp"
+ Name 18 "g_texdata.tex"
+ Name 22 "g_texdata.samp"
Name 28 "g_texdata_array[1].tex"
Name 30 "g_texdata_array[1].samp"
- Name 36 "g_texdata_array2[1].tex[0]"
- Name 38 "g_texdata_array2[1].samp[0]"
- Name 46 "ps_output"
- Name 47 "param"
- Name 51 "color"
- Name 54 "g_samp"
- Name 55 "g_tex"
- Name 56 "g_texdata_array2[0].samp[0]"
- Name 57 "g_texdata_array2[0].samp[1]"
- Name 58 "g_texdata_array2[0].tex[0]"
- Name 59 "g_texdata_array2[0].tex[1]"
- Name 60 "g_texdata_array2[1].samp[1]"
- Name 61 "g_texdata_array2[1].tex[1]"
- Name 62 "g_texdata_array2[2].samp[0]"
- Name 63 "g_texdata_array2[2].samp[1]"
- Name 64 "g_texdata_array2[2].tex[0]"
- Name 65 "g_texdata_array2[2].tex[1]"
- Decorate 18(tex) DescriptorSet 0
- Decorate 22(samp) DescriptorSet 0
+ Name 40 "g_texdata_array2[1].tex"
+ Name 45 "g_texdata_array2[1].samp"
+ Name 54 "ps_output"
+ Name 55 "param"
+ Name 59 "ps_output.color"
+ Name 62 "g_samp"
+ Name 63 "g_tex"
+ Name 65 "g_texdata.nonopaque_thing"
+ Name 66 "g_texdata_array[0].samp"
+ Name 67 "g_texdata_array[0].tex"
+ Name 68 "g_texdata_array[0].nonopaque_thing"
+ Name 69 "g_texdata_array[1].nonopaque_thing"
+ Name 70 "g_texdata_array[2].samp"
+ Name 71 "g_texdata_array[2].tex"
+ Name 72 "g_texdata_array[2].nonopaque_thing"
+ Name 73 "g_texdata_array2[0].samp"
+ Name 74 "g_texdata_array2[0].tex"
+ Name 75 "g_texdata_array2[0].nonopaque_thing"
+ Name 76 "g_texdata_array2[1].nonopaque_thing"
+ Name 77 "g_texdata_array2[2].samp"
+ Name 78 "g_texdata_array2[2].tex"
+ Name 79 "g_texdata_array2[2].nonopaque_thing"
+ Decorate 18(g_texdata.tex) DescriptorSet 0
+ Decorate 22(g_texdata.samp) DescriptorSet 0
Decorate 28(g_texdata_array[1].tex) DescriptorSet 0
Decorate 30(g_texdata_array[1].samp) DescriptorSet 0
- Decorate 36(g_texdata_array2[1].tex[0]) DescriptorSet 0
- Decorate 38(g_texdata_array2[1].samp[0]) DescriptorSet 0
- Decorate 51(color) Location 0
- Decorate 54(g_samp) DescriptorSet 0
- Decorate 55(g_tex) DescriptorSet 0
- Decorate 56(g_texdata_array2[0].samp[0]) DescriptorSet 0
- Decorate 57(g_texdata_array2[0].samp[1]) DescriptorSet 0
- Decorate 58(g_texdata_array2[0].tex[0]) DescriptorSet 0
- Decorate 59(g_texdata_array2[0].tex[1]) DescriptorSet 0
- Decorate 60(g_texdata_array2[1].samp[1]) DescriptorSet 0
- Decorate 61(g_texdata_array2[1].tex[1]) DescriptorSet 0
- Decorate 62(g_texdata_array2[2].samp[0]) DescriptorSet 0
- Decorate 63(g_texdata_array2[2].samp[1]) DescriptorSet 0
- Decorate 64(g_texdata_array2[2].tex[0]) DescriptorSet 0
- Decorate 65(g_texdata_array2[2].tex[1]) DescriptorSet 0
+ Decorate 40(g_texdata_array2[1].tex) DescriptorSet 0
+ Decorate 45(g_texdata_array2[1].samp) DescriptorSet 0
+ Decorate 59(ps_output.color) Location 0
+ Decorate 62(g_samp) DescriptorSet 0
+ Decorate 63(g_tex) DescriptorSet 0
+ Decorate 66(g_texdata_array[0].samp) DescriptorSet 0
+ Decorate 67(g_texdata_array[0].tex) DescriptorSet 0
+ Decorate 70(g_texdata_array[2].samp) DescriptorSet 0
+ Decorate 71(g_texdata_array[2].tex) DescriptorSet 0
+ Decorate 73(g_texdata_array2[0].samp) DescriptorSet 0
+ Decorate 74(g_texdata_array2[0].tex) DescriptorSet 0
+ Decorate 77(g_texdata_array2[2].samp) DescriptorSet 0
+ Decorate 78(g_texdata_array2[2].tex) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -191,50 +225,62 @@ gl_FragCoord origin is upper left
15: 14(int) Constant 0
16: TypeImage 6(float) 1D sampled format:Unknown
17: TypePointer UniformConstant 16
- 18(tex): 17(ptr) Variable UniformConstant
+18(g_texdata.tex): 17(ptr) Variable UniformConstant
20: TypeSampler
21: TypePointer UniformConstant 20
- 22(samp): 21(ptr) Variable UniformConstant
+22(g_texdata.samp): 21(ptr) Variable UniformConstant
24: TypeSampledImage 16
26: 6(float) Constant 1056964608
28(g_texdata_array[1].tex): 17(ptr) Variable UniformConstant
30(g_texdata_array[1].samp): 21(ptr) Variable UniformConstant
33: 6(float) Constant 1053609165
-36(g_texdata_array2[1].tex[0]): 17(ptr) Variable UniformConstant
-38(g_texdata_array2[1].samp[0]): 21(ptr) Variable UniformConstant
- 41: 6(float) Constant 1050253722
- 44: TypePointer Function 7(fvec4)
- 50: TypePointer Output 7(fvec4)
- 51(color): 50(ptr) Variable Output
- 54(g_samp): 21(ptr) Variable UniformConstant
- 55(g_tex): 17(ptr) Variable UniformConstant
-56(g_texdata_array2[0].samp[0]): 21(ptr) Variable UniformConstant
-57(g_texdata_array2[0].samp[1]): 21(ptr) Variable UniformConstant
-58(g_texdata_array2[0].tex[0]): 17(ptr) Variable UniformConstant
-59(g_texdata_array2[0].tex[1]): 17(ptr) Variable UniformConstant
-60(g_texdata_array2[1].samp[1]): 21(ptr) Variable UniformConstant
-61(g_texdata_array2[1].tex[1]): 17(ptr) Variable UniformConstant
-62(g_texdata_array2[2].samp[0]): 21(ptr) Variable UniformConstant
-63(g_texdata_array2[2].samp[1]): 21(ptr) Variable UniformConstant
-64(g_texdata_array2[2].tex[0]): 17(ptr) Variable UniformConstant
-65(g_texdata_array2[2].tex[1]): 17(ptr) Variable UniformConstant
+ 36: TypeInt 32 0
+ 37: 36(int) Constant 2
+ 38: TypeArray 16 37
+ 39: TypePointer UniformConstant 38
+40(g_texdata_array2[1].tex): 39(ptr) Variable UniformConstant
+ 43: TypeArray 20 37
+ 44: TypePointer UniformConstant 43
+45(g_texdata_array2[1].samp): 44(ptr) Variable UniformConstant
+ 49: 6(float) Constant 1050253722
+ 52: TypePointer Function 7(fvec4)
+ 58: TypePointer Output 7(fvec4)
+59(ps_output.color): 58(ptr) Variable Output
+ 62(g_samp): 21(ptr) Variable UniformConstant
+ 63(g_tex): 17(ptr) Variable UniformConstant
+ 64: TypePointer UniformConstant 14(int)
+65(g_texdata.nonopaque_thing): 64(ptr) Variable UniformConstant
+66(g_texdata_array[0].samp): 21(ptr) Variable UniformConstant
+67(g_texdata_array[0].tex): 17(ptr) Variable UniformConstant
+68(g_texdata_array[0].nonopaque_thing): 64(ptr) Variable UniformConstant
+69(g_texdata_array[1].nonopaque_thing): 64(ptr) Variable UniformConstant
+70(g_texdata_array[2].samp): 21(ptr) Variable UniformConstant
+71(g_texdata_array[2].tex): 17(ptr) Variable UniformConstant
+72(g_texdata_array[2].nonopaque_thing): 64(ptr) Variable UniformConstant
+73(g_texdata_array2[0].samp): 44(ptr) Variable UniformConstant
+74(g_texdata_array2[0].tex): 39(ptr) Variable UniformConstant
+75(g_texdata_array2[0].nonopaque_thing): 64(ptr) Variable UniformConstant
+76(g_texdata_array2[1].nonopaque_thing): 64(ptr) Variable UniformConstant
+77(g_texdata_array2[2].samp): 44(ptr) Variable UniformConstant
+78(g_texdata_array2[2].tex): 39(ptr) Variable UniformConstant
+79(g_texdata_array2[2].nonopaque_thing): 64(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
- 46(ps_output): 9(ptr) Variable Function
- 47(param): 9(ptr) Variable Function
- 48: 2 FunctionCall 12(@main(struct-PS_OUTPUT-vf41;) 47(param)
- 49:8(PS_OUTPUT) Load 47(param)
- Store 46(ps_output) 49
- 52: 44(ptr) AccessChain 46(ps_output) 15
- 53: 7(fvec4) Load 52
- Store 51(color) 53
+ 54(ps_output): 9(ptr) Variable Function
+ 55(param): 9(ptr) Variable Function
+ 56: 2 FunctionCall 12(@main(struct-PS_OUTPUT-vf41;) 55(param)
+ 57:8(PS_OUTPUT) Load 55(param)
+ Store 54(ps_output) 57
+ 60: 52(ptr) AccessChain 54(ps_output) 15
+ 61: 7(fvec4) Load 60
+ Store 59(ps_output.color) 61
Return
FunctionEnd
12(@main(struct-PS_OUTPUT-vf41;): 2 Function None 10
11(ps_output): 9(ptr) FunctionParameter
13: Label
- 19: 16 Load 18(tex)
- 23: 20 Load 22(samp)
+ 19: 16 Load 18(g_texdata.tex)
+ 23: 20 Load 22(g_texdata.samp)
25: 24 SampledImage 19 23
27: 7(fvec4) ImageSampleImplicitLod 25 26
29: 16 Load 28(g_texdata_array[1].tex)
@@ -242,12 +288,14 @@ gl_FragCoord origin is upper left
32: 24 SampledImage 29 31
34: 7(fvec4) ImageSampleImplicitLod 32 33
35: 7(fvec4) FAdd 27 34
- 37: 16 Load 36(g_texdata_array2[1].tex[0])
- 39: 20 Load 38(g_texdata_array2[1].samp[0])
- 40: 24 SampledImage 37 39
- 42: 7(fvec4) ImageSampleImplicitLod 40 41
- 43: 7(fvec4) FAdd 35 42
- 45: 44(ptr) AccessChain 11(ps_output) 15
- Store 45 43
+ 41: 17(ptr) AccessChain 40(g_texdata_array2[1].tex) 15
+ 42: 16 Load 41
+ 46: 21(ptr) AccessChain 45(g_texdata_array2[1].samp) 15
+ 47: 20 Load 46
+ 48: 24 SampledImage 42 47
+ 50: 7(fvec4) ImageSampleImplicitLod 48 49
+ 51: 7(fvec4) FAdd 35 50
+ 53: 52(ptr) AccessChain 11(ps_output) 15
+ Store 53 51
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.geom.out
index 1af304d754c..eac315c08e0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.geom.out
@@ -1,5 +1,5 @@
hlsl.structarray.flatten.geom
-Shader version: 450
+Shader version: 500
invocations = -1
max_vertices = 4
input primitive = lines
@@ -47,9 +47,25 @@ output primitive = triangle_strip
0:21 Constant:
0:21 0 (const int)
0:22 Sequence
-0:22 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
-0:22 'outStream' ( out structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
-0:22 'vout' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:22 Sequence
+0:22 move second child to first child ( temp 4-component vector of float)
+0:? 'outStream.position' ( out 4-component vector of float Position)
+0:22 position: direct index for structure ( temp 4-component vector of float)
+0:22 'vout' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:22 Constant:
+0:22 0 (const int)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:? 'outStream.color' (layout( location=0) out 4-component vector of float)
+0:22 color: direct index for structure ( temp 4-component vector of float)
+0:22 'vout' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:22 Constant:
+0:22 1 (const int)
+0:22 move second child to first child ( temp 2-component vector of float)
+0:? 'outStream.uv' (layout( location=1) out 2-component vector of float)
+0:22 uv: direct index for structure ( temp 2-component vector of float)
+0:22 'vout' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:22 Constant:
+0:22 2 (const int)
0:22 EmitVertex ( temp void)
0:16 Function Definition: main( ( temp void)
0:16 Function Parameters:
@@ -62,12 +78,15 @@ output primitive = triangle_strip
0:? 'outStream' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? Linker Objects
0:? 'vin' (layout( location=0) in 2-element array of structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:? 'outStream.position' ( out 4-component vector of float Position)
+0:? 'outStream.color' (layout( location=0) out 4-component vector of float)
+0:? 'outStream.uv' (layout( location=1) out 2-component vector of float)
Linked geometry stage:
-Shader version: 450
+Shader version: 500
invocations = 1
max_vertices = 4
input primitive = lines
@@ -115,9 +134,25 @@ output primitive = triangle_strip
0:21 Constant:
0:21 0 (const int)
0:22 Sequence
-0:22 move second child to first child ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
-0:22 'outStream' ( out structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
-0:22 'vout' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:22 Sequence
+0:22 move second child to first child ( temp 4-component vector of float)
+0:? 'outStream.position' ( out 4-component vector of float Position)
+0:22 position: direct index for structure ( temp 4-component vector of float)
+0:22 'vout' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:22 Constant:
+0:22 0 (const int)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:? 'outStream.color' (layout( location=0) out 4-component vector of float)
+0:22 color: direct index for structure ( temp 4-component vector of float)
+0:22 'vout' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:22 Constant:
+0:22 1 (const int)
+0:22 move second child to first child ( temp 2-component vector of float)
+0:? 'outStream.uv' (layout( location=1) out 2-component vector of float)
+0:22 uv: direct index for structure ( temp 2-component vector of float)
+0:22 'vout' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:22 Constant:
+0:22 2 (const int)
0:22 EmitVertex ( temp void)
0:16 Function Definition: main( ( temp void)
0:16 Function Parameters:
@@ -130,19 +165,23 @@ output primitive = triangle_strip
0:? 'outStream' ( temp structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? Linker Objects
0:? 'vin' (layout( location=0) in 2-element array of structure{ temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
+0:? 'outStream.position' ( out 4-component vector of float Position)
+0:? 'outStream.color' (layout( location=0) out 4-component vector of float)
+0:? 'outStream.uv' (layout( location=1) out 2-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 47
+// Generated by (magic number): 80002
+// Id's are bound by 58
Capability Geometry
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Geometry 4 "main" 40
+ EntryPoint Geometry 4 "main" 38 41 45 50
ExecutionMode 4 InputLines
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip
ExecutionMode 4 OutputVertices 4
+ Source HLSL 500
Name 4 "main"
Name 9 "VertexData"
MemberName 9(VertexData) 0 "position"
@@ -156,12 +195,18 @@ output primitive = triangle_strip
Name 17 "vin"
Name 18 "outStream"
Name 21 "vout"
- Name 38 "vin"
- Name 40 "vin"
- Name 42 "outStream"
- Name 43 "param"
- Name 45 "param"
- Decorate 40(vin) Location 0
+ Name 38 "outStream.position"
+ Name 41 "outStream.color"
+ Name 45 "outStream.uv"
+ Name 48 "vin"
+ Name 50 "vin"
+ Name 52 "outStream"
+ Name 53 "param"
+ Name 55 "param"
+ Decorate 38(outStream.position) BuiltIn Position
+ Decorate 41(outStream.color) Location 0
+ Decorate 45(outStream.uv) Location 1
+ Decorate 50(vin) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -181,19 +226,26 @@ output primitive = triangle_strip
28: 22(int) Constant 2
29: TypePointer Function 8(fvec2)
33: 22(int) Constant 0
- 39: TypePointer Input 12
- 40(vin): 39(ptr) Variable Input
+ 37: TypePointer Output 7(fvec4)
+38(outStream.position): 37(ptr) Variable Output
+41(outStream.color): 37(ptr) Variable Output
+ 44: TypePointer Output 8(fvec2)
+45(outStream.uv): 44(ptr) Variable Output
+ 49: TypePointer Input 12
+ 50(vin): 49(ptr) Variable Input
4(main): 2 Function None 3
5: Label
- 38(vin): 13(ptr) Variable Function
- 42(outStream): 15(ptr) Variable Function
- 43(param): 13(ptr) Variable Function
- 45(param): 15(ptr) Variable Function
- 41: 12 Load 40(vin)
- Store 38(vin) 41
- 44: 12 Load 38(vin)
- Store 43(param) 44
- 46: 2 FunctionCall 19(@main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21;) 43(param) 45(param)
+ 48(vin): 13(ptr) Variable Function
+ 52(outStream): 15(ptr) Variable Function
+ 53(param): 13(ptr) Variable Function
+ 55(param): 15(ptr) Variable Function
+ 51: 12 Load 50(vin)
+ Store 48(vin) 51
+ 54: 12 Load 48(vin)
+ Store 53(param) 54
+ 56: 2 FunctionCall 19(@main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21;) 53(param) 55(param)
+ 57: 14(PS_IN) Load 55(param)
+ Store 52(outStream) 57
Return
FunctionEnd
19(@main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21;): 2 Function None 16
@@ -213,8 +265,15 @@ output primitive = triangle_strip
35: 7(fvec4) Load 34
36: 24(ptr) AccessChain 21(vout) 33
Store 36 35
- 37: 14(PS_IN) Load 21(vout)
- Store 18(outStream) 37
+ 39: 24(ptr) AccessChain 21(vout) 33
+ 40: 7(fvec4) Load 39
+ Store 38(outStream.position) 40
+ 42: 24(ptr) AccessChain 21(vout) 23
+ 43: 7(fvec4) Load 42
+ Store 41(outStream.color) 43
+ 46: 29(ptr) AccessChain 21(vout) 28
+ 47: 8(fvec2) Load 46
+ Store 45(outStream.uv) 47
EmitVertex
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
new file mode 100644
index 00000000000..1f79b9b5f61
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -0,0 +1,286 @@
+hlsl.structbuffer.append.fn.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8 'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:8 'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8 'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:? Sequence
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 indirect index ( buffer 4-component vector of float)
+0:9 @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
+0:9 'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:9 Constant:
+0:9 0 (const uint)
+0:9 AtomicAdd ( temp uint)
+0:9 @count: direct index for structure ( temp int)
+0:9 'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:9 Constant:
+0:9 0 (const int)
+0:9 Constant:
+0:9 1 (const int)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:10 Branch: Return with expression
+0:10 indirect index ( buffer 4-component vector of float)
+0:10 @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
+0:10 'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10 Constant:
+0:10 0 (const uint)
+0:10 add ( temp uint)
+0:10 AtomicAdd ( temp uint)
+0:10 @count: direct index for structure ( temp int)
+0:10 'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 -1 (const int)
+0:10 Constant:
+0:10 -1 (const int)
+0:19 Function Definition: @main(u1; ( temp 4-component vector of float)
+0:19 Function Parameters:
+0:19 'pos' ( in uint)
+0:? Sequence
+0:22 Branch: Return with expression
+0:22 Function Call: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
+0:22 'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:22 'sbuf_a@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:22 'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:22 'sbuf_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:19 Function Definition: main( ( temp void)
+0:19 Function Parameters:
+0:? Sequence
+0:19 move second child to first child ( temp uint)
+0:? 'pos' ( temp uint)
+0:? 'pos' (layout( location=0) flat in uint)
+0:19 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:19 Function Call: @main(u1; ( temp 4-component vector of float)
+0:? 'pos' ( temp uint)
+0:? Linker Objects
+0:? 'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' (layout( location=0) flat in uint)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
+0:8 Function Parameters:
+0:8 'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8 'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:8 'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8 'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:? Sequence
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 indirect index ( buffer 4-component vector of float)
+0:9 @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
+0:9 'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:9 Constant:
+0:9 0 (const uint)
+0:9 AtomicAdd ( temp uint)
+0:9 @count: direct index for structure ( temp int)
+0:9 'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:9 Constant:
+0:9 0 (const int)
+0:9 Constant:
+0:9 1 (const int)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:10 Branch: Return with expression
+0:10 indirect index ( buffer 4-component vector of float)
+0:10 @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
+0:10 'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10 Constant:
+0:10 0 (const uint)
+0:10 add ( temp uint)
+0:10 AtomicAdd ( temp uint)
+0:10 @count: direct index for structure ( temp int)
+0:10 'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 -1 (const int)
+0:10 Constant:
+0:10 -1 (const int)
+0:19 Function Definition: @main(u1; ( temp 4-component vector of float)
+0:19 Function Parameters:
+0:19 'pos' ( in uint)
+0:? Sequence
+0:22 Branch: Return with expression
+0:22 Function Call: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
+0:22 'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:22 'sbuf_a@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:22 'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:22 'sbuf_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:19 Function Definition: main( ( temp void)
+0:19 Function Parameters:
+0:? Sequence
+0:19 move second child to first child ( temp uint)
+0:? 'pos' ( temp uint)
+0:? 'pos' (layout( location=0) flat in uint)
+0:19 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:19 Function Call: @main(u1; ( temp 4-component vector of float)
+0:? 'pos' ( temp uint)
+0:? Linker Objects
+0:? 'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' (layout( location=0) flat in uint)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 76
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 64 67
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 ""
+ MemberName 9 0 "@data"
+ Name 12 ""
+ MemberName 12 0 "@count"
+ Name 19 "Fn2(block--vf4[0]1;block--vf4[0]1;"
+ Name 15 "arg_a"
+ Name 16 "arg_a@count"
+ Name 17 "arg_c"
+ Name 18 "arg_c@count"
+ Name 25 "@main(u1;"
+ Name 24 "pos"
+ Name 50 "sbuf_a"
+ Name 52 "sbuf_a@count"
+ Name 53 "sbuf_c"
+ Name 54 "sbuf_c@count"
+ Name 55 "param"
+ Name 56 "param"
+ Name 57 "param"
+ Name 58 "param"
+ Name 62 "pos"
+ Name 64 "pos"
+ Name 67 "@entryPointOutput"
+ Name 68 "param"
+ Name 71 "sbuf_a@count"
+ MemberName 71(sbuf_a@count) 0 "@count"
+ Name 73 "sbuf_a@count"
+ Name 74 "sbuf_c@count"
+ Name 75 "sbuf_unused"
+ Decorate 8 ArrayStride 16
+ MemberDecorate 9 0 Offset 0
+ Decorate 9 BufferBlock
+ Decorate 12 BufferBlock
+ Decorate 50(sbuf_a) DescriptorSet 0
+ Decorate 52(sbuf_a@count) DescriptorSet 0
+ Decorate 53(sbuf_c) DescriptorSet 0
+ Decorate 54(sbuf_c@count) DescriptorSet 0
+ Decorate 64(pos) Flat
+ Decorate 64(pos) Location 0
+ Decorate 67(@entryPointOutput) Location 0
+ MemberDecorate 71(sbuf_a@count) 0 Offset 0
+ Decorate 71(sbuf_a@count) BufferBlock
+ Decorate 73(sbuf_a@count) DescriptorSet 0
+ Decorate 74(sbuf_c@count) DescriptorSet 0
+ Decorate 75(sbuf_unused) DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeRuntimeArray 7(fvec4)
+ 9: TypeStruct 8
+ 10: TypePointer Function 9(struct)
+ 11: TypeInt 32 1
+ 12: TypeStruct 11(int)
+ 13: TypePointer Function 12(struct)
+ 14: TypeFunction 7(fvec4) 10(ptr) 13(ptr) 10(ptr) 13(ptr)
+ 21: TypeInt 32 0
+ 22: TypePointer Function 21(int)
+ 23: TypeFunction 7(fvec4) 22(ptr)
+ 27: 11(int) Constant 0
+ 28: TypePointer Function 11(int)
+ 30: 11(int) Constant 1
+ 31: 21(int) Constant 1
+ 32: 21(int) Constant 0
+ 34: 6(float) Constant 1065353216
+ 35: 6(float) Constant 1073741824
+ 36: 6(float) Constant 1077936128
+ 37: 6(float) Constant 1082130432
+ 38: 7(fvec4) ConstantComposite 34 35 36 37
+ 39: TypePointer Function 7(fvec4)
+ 42: 11(int) Constant 4294967295
+ 49: TypePointer Uniform 9(struct)
+ 50(sbuf_a): 49(ptr) Variable Uniform
+ 51: TypePointer Uniform 12(struct)
+52(sbuf_a@count): 51(ptr) Variable Uniform
+ 53(sbuf_c): 49(ptr) Variable Uniform
+54(sbuf_c@count): 51(ptr) Variable Uniform
+ 63: TypePointer Input 21(int)
+ 64(pos): 63(ptr) Variable Input
+ 66: TypePointer Output 7(fvec4)
+67(@entryPointOutput): 66(ptr) Variable Output
+71(sbuf_a@count): TypeStruct 11(int)
+ 72: TypePointer Uniform 71(sbuf_a@count)
+73(sbuf_a@count): 72(ptr) Variable Uniform
+74(sbuf_c@count): 72(ptr) Variable Uniform
+ 75(sbuf_unused): 49(ptr) Variable Uniform
+ 4(main): 2 Function None 3
+ 5: Label
+ 62(pos): 22(ptr) Variable Function
+ 68(param): 22(ptr) Variable Function
+ 65: 21(int) Load 64(pos)
+ Store 62(pos) 65
+ 69: 21(int) Load 62(pos)
+ Store 68(param) 69
+ 70: 7(fvec4) FunctionCall 25(@main(u1;) 68(param)
+ Store 67(@entryPointOutput) 70
+ Return
+ FunctionEnd
+19(Fn2(block--vf4[0]1;block--vf4[0]1;): 7(fvec4) Function None 14
+ 15(arg_a): 10(ptr) FunctionParameter
+ 16(arg_a@count): 13(ptr) FunctionParameter
+ 17(arg_c): 10(ptr) FunctionParameter
+ 18(arg_c@count): 13(ptr) FunctionParameter
+ 20: Label
+ 29: 28(ptr) AccessChain 16(arg_a@count) 27
+ 33: 21(int) AtomicIAdd 29 31 32 30
+ 40: 39(ptr) AccessChain 15(arg_a) 27 33
+ Store 40 38
+ 41: 28(ptr) AccessChain 18(arg_c@count) 27
+ 43: 21(int) AtomicIAdd 41 31 32 42
+ 44: 21(int) IAdd 43 42
+ 45: 39(ptr) AccessChain 17(arg_c) 27 44
+ 46: 7(fvec4) Load 45
+ ReturnValue 46
+ FunctionEnd
+ 25(@main(u1;): 7(fvec4) Function None 23
+ 24(pos): 22(ptr) FunctionParameter
+ 26: Label
+ 55(param): 10(ptr) Variable Function
+ 56(param): 13(ptr) Variable Function
+ 57(param): 10(ptr) Variable Function
+ 58(param): 13(ptr) Variable Function
+ 59: 7(fvec4) FunctionCall 19(Fn2(block--vf4[0]1;block--vf4[0]1;) 55(param) 56(param) 57(param) 58(param)
+ ReturnValue 59
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out
new file mode 100644
index 00000000000..9ff5bee37ab
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out
@@ -0,0 +1,224 @@
+hlsl.structbuffer.append.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(u1; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'pos' ( in uint)
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 indirect index (layout( row_major std430) buffer 4-component vector of float)
+0:8 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:8 'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8 Constant:
+0:8 0 (const uint)
+0:8 AtomicAdd ( temp uint)
+0:8 @count: direct index for structure ( temp int)
+0:8 'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:10 Branch: Return with expression
+0:10 indirect index (layout( row_major std430) buffer 4-component vector of float)
+0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:10 'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10 Constant:
+0:10 0 (const uint)
+0:10 add ( temp uint)
+0:10 AtomicAdd ( temp uint)
+0:10 @count: direct index for structure ( temp int)
+0:10 'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 -1 (const int)
+0:10 Constant:
+0:10 -1 (const int)
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 move second child to first child ( temp uint)
+0:? 'pos' ( temp uint)
+0:? 'pos' (layout( location=0) flat in uint)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(u1; ( temp 4-component vector of float)
+0:? 'pos' ( temp uint)
+0:? Linker Objects
+0:? 'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' (layout( location=0) flat in uint)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(u1; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'pos' ( in uint)
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 indirect index (layout( row_major std430) buffer 4-component vector of float)
+0:8 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:8 'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8 Constant:
+0:8 0 (const uint)
+0:8 AtomicAdd ( temp uint)
+0:8 @count: direct index for structure ( temp int)
+0:8 'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 1 (const int)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:10 Branch: Return with expression
+0:10 indirect index (layout( row_major std430) buffer 4-component vector of float)
+0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:10 'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10 Constant:
+0:10 0 (const uint)
+0:10 add ( temp uint)
+0:10 AtomicAdd ( temp uint)
+0:10 @count: direct index for structure ( temp int)
+0:10 'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 -1 (const int)
+0:10 Constant:
+0:10 -1 (const int)
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 move second child to first child ( temp uint)
+0:? 'pos' ( temp uint)
+0:? 'pos' (layout( location=0) flat in uint)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(u1; ( temp 4-component vector of float)
+0:? 'pos' ( temp uint)
+0:? Linker Objects
+0:? 'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' (layout( location=0) flat in uint)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 56
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 48 51
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 12 "@main(u1;"
+ Name 11 "pos"
+ Name 15 "sbuf_a"
+ MemberName 15(sbuf_a) 0 "@data"
+ Name 17 "sbuf_a"
+ Name 20 "sbuf_a@count"
+ MemberName 20(sbuf_a@count) 0 "@count"
+ Name 22 "sbuf_a@count"
+ Name 36 "sbuf_c"
+ Name 37 "sbuf_c@count"
+ Name 46 "pos"
+ Name 48 "pos"
+ Name 51 "@entryPointOutput"
+ Name 52 "param"
+ Name 55 "sbuf_unused"
+ Decorate 14 ArrayStride 16
+ MemberDecorate 15(sbuf_a) 0 Offset 0
+ Decorate 15(sbuf_a) BufferBlock
+ Decorate 17(sbuf_a) DescriptorSet 0
+ MemberDecorate 20(sbuf_a@count) 0 Offset 0
+ Decorate 20(sbuf_a@count) BufferBlock
+ Decorate 22(sbuf_a@count) DescriptorSet 0
+ Decorate 36(sbuf_c) DescriptorSet 0
+ Decorate 37(sbuf_c@count) DescriptorSet 0
+ Decorate 48(pos) Flat
+ Decorate 48(pos) Location 0
+ Decorate 51(@entryPointOutput) Location 0
+ Decorate 55(sbuf_unused) DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 8: TypeFloat 32
+ 9: TypeVector 8(float) 4
+ 10: TypeFunction 9(fvec4) 7(ptr)
+ 14: TypeRuntimeArray 9(fvec4)
+ 15(sbuf_a): TypeStruct 14
+ 16: TypePointer Uniform 15(sbuf_a)
+ 17(sbuf_a): 16(ptr) Variable Uniform
+ 18: TypeInt 32 1
+ 19: 18(int) Constant 0
+20(sbuf_a@count): TypeStruct 18(int)
+ 21: TypePointer Uniform 20(sbuf_a@count)
+22(sbuf_a@count): 21(ptr) Variable Uniform
+ 23: TypePointer Uniform 18(int)
+ 25: 18(int) Constant 1
+ 26: 6(int) Constant 1
+ 27: 6(int) Constant 0
+ 29: 8(float) Constant 1065353216
+ 30: 8(float) Constant 1073741824
+ 31: 8(float) Constant 1077936128
+ 32: 8(float) Constant 1082130432
+ 33: 9(fvec4) ConstantComposite 29 30 31 32
+ 34: TypePointer Uniform 9(fvec4)
+ 36(sbuf_c): 16(ptr) Variable Uniform
+37(sbuf_c@count): 21(ptr) Variable Uniform
+ 39: 18(int) Constant 4294967295
+ 47: TypePointer Input 6(int)
+ 48(pos): 47(ptr) Variable Input
+ 50: TypePointer Output 9(fvec4)
+51(@entryPointOutput): 50(ptr) Variable Output
+ 55(sbuf_unused): 16(ptr) Variable Uniform
+ 4(main): 2 Function None 3
+ 5: Label
+ 46(pos): 7(ptr) Variable Function
+ 52(param): 7(ptr) Variable Function
+ 49: 6(int) Load 48(pos)
+ Store 46(pos) 49
+ 53: 6(int) Load 46(pos)
+ Store 52(param) 53
+ 54: 9(fvec4) FunctionCall 12(@main(u1;) 52(param)
+ Store 51(@entryPointOutput) 54
+ Return
+ FunctionEnd
+ 12(@main(u1;): 9(fvec4) Function None 10
+ 11(pos): 7(ptr) FunctionParameter
+ 13: Label
+ 24: 23(ptr) AccessChain 22(sbuf_a@count) 19
+ 28: 6(int) AtomicIAdd 24 26 27 25
+ 35: 34(ptr) AccessChain 17(sbuf_a) 19 28
+ Store 35 33
+ 38: 23(ptr) AccessChain 37(sbuf_c@count) 19
+ 40: 6(int) AtomicIAdd 38 26 27 39
+ 41: 6(int) IAdd 40 39
+ 42: 34(ptr) AccessChain 36(sbuf_c) 19 41
+ 43: 9(fvec4) Load 42
+ ReturnValue 43
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index a463a887846..2e85173fca3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -1,5 +1,5 @@
hlsl.structbuffer.atomics.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -224,7 +224,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:5 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:5 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -232,13 +232,13 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -463,7 +463,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:5 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:5 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -471,10 +471,10 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 87
Capability Shader
@@ -482,6 +482,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 80 83
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 12 "@main(u1;"
Name 11 "pos"
@@ -497,6 +498,7 @@ gl_FragCoord origin is upper left
MemberDecorate 15(sbuf) 0 Offset 0
Decorate 15(sbuf) BufferBlock
Decorate 17(sbuf) DescriptorSet 0
+ Decorate 80(pos) Flat
Decorate 80(pos) Location 0
Decorate 83(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out
index f388f87d6ea..a4084aee4d5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -1,5 +1,5 @@
hlsl.structbuffer.byte.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -149,7 +149,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:5 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:5 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -157,13 +157,13 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -313,7 +313,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:5 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:5 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -321,10 +321,10 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 114
Capability Shader
@@ -332,6 +332,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 107 110
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 12 "@main(u1;"
Name 11 "pos"
@@ -351,6 +352,7 @@ gl_FragCoord origin is upper left
MemberDecorate 16(sbuf) 0 Offset 0
Decorate 16(sbuf) BufferBlock
Decorate 18(sbuf) DescriptorSet 0
+ Decorate 107(pos) Flat
Decorate 107(pos) Location 0
Decorate 110(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index f5210c0ee3f..baed6ffbd7f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -1,5 +1,5 @@
hlsl.structbuffer.coherent.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -74,7 +74,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:12 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:12 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -83,13 +83,13 @@ gl_FragCoord origin is upper left
0:? 'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test} @data})
0:? 'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -164,7 +164,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:12 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:12 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -173,10 +173,10 @@ gl_FragCoord origin is upper left
0:? 'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test} @data})
0:? 'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 78
Capability Shader
@@ -184,6 +184,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 71 74
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 12 "@main(u1;"
Name 11 "pos"
@@ -207,15 +208,14 @@ gl_FragCoord origin is upper left
MemberDecorate 15(sbuf2) 0 Offset 0
Decorate 15(sbuf2) BufferBlock
Decorate 17(sbuf2) DescriptorSet 0
- MemberDecorate 28(sb_t) 0 Coherent
MemberDecorate 28(sb_t) 0 Offset 0
- MemberDecorate 28(sb_t) 1 Coherent
MemberDecorate 28(sb_t) 1 Offset 12
Decorate 29 ArrayStride 16
MemberDecorate 30(sbuf) 0 Coherent
MemberDecorate 30(sbuf) 0 Offset 0
Decorate 30(sbuf) BufferBlock
Decorate 32(sbuf) DescriptorSet 0
+ Decorate 71(pos) Flat
Decorate 71(pos) Location 0
Decorate 74(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
new file mode 100644
index 00000000000..9b49bc78633
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
@@ -0,0 +1,326 @@
+hlsl.structbuffer.floatidx.comp
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:13 Function Definition: @main(vu3; ( temp void)
+0:13 Function Parameters:
+0:13 'nThreadId' ( in 3-component vector of uint)
+0:? Sequence
+0:14 Sequence
+0:14 move second child to first child ( temp structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:14 'data' ( temp structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:14 indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:14 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:14 'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId} @data})
+0:14 Constant:
+0:14 0 (const uint)
+0:14 add ( temp uint)
+0:14 AtomicAdd ( temp uint)
+0:14 @count: direct index for structure ( temp int)
+0:14 'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 -1 (const int)
+0:14 Constant:
+0:14 -1 (const int)
+0:15 Sequence
+0:15 move second child to first child ( temp 2-component vector of float)
+0:15 'coord' ( temp 2-component vector of float)
+0:15 Convert uint to float ( temp 2-component vector of float)
+0:15 vector swizzle ( temp 2-component vector of uint)
+0:15 threadId: direct index for structure ( temp 2-component vector of uint)
+0:15 'data' ( temp structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Sequence
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1 (const int)
+0:16 Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 'storeTemp' ( temp 4-component vector of float)
+0:16 color: direct index for structure ( temp 4-component vector of float)
+0:16 'data' ( temp structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:16 Constant:
+0:16 0 (const int)
+0:16 imageStore ( temp void)
+0:16 'outtx' (layout( rgba32f) uniform image2D)
+0:16 Convert float to uint ( temp 2-component vector of uint)
+0:16 'coord' ( temp 2-component vector of float)
+0:16 'storeTemp' ( temp 4-component vector of float)
+0:16 'storeTemp' ( temp 4-component vector of float)
+0:18 move second child to first child ( temp 4-component vector of float)
+0:18 indirect index (layout( row_major std430) buffer 4-component vector of float)
+0:18 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:18 'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18 Constant:
+0:18 0 (const uint)
+0:18 Convert float to uint ( temp uint)
+0:18 direct index ( temp float)
+0:18 'coord' ( temp 2-component vector of float)
+0:18 Constant:
+0:18 0 (const int)
+0:18 indirect index (layout( row_major std430) buffer 4-component vector of float)
+0:18 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:18 'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18 Constant:
+0:18 0 (const uint)
+0:18 Convert float to uint ( temp uint)
+0:18 direct index ( temp float)
+0:18 'coord' ( temp 2-component vector of float)
+0:18 Constant:
+0:18 1 (const int)
+0:13 Function Definition: main( ( temp void)
+0:13 Function Parameters:
+0:? Sequence
+0:13 move second child to first child ( temp 3-component vector of uint)
+0:? 'nThreadId' ( temp 3-component vector of uint)
+0:? 'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
+0:13 Function Call: @main(vu3; ( temp void)
+0:? 'nThreadId' ( temp 3-component vector of uint)
+0:? Linker Objects
+0:? 'outtx' (layout( rgba32f) uniform image2D)
+0:? 'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId} @data})
+0:? 'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:13 Function Definition: @main(vu3; ( temp void)
+0:13 Function Parameters:
+0:13 'nThreadId' ( in 3-component vector of uint)
+0:? Sequence
+0:14 Sequence
+0:14 move second child to first child ( temp structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:14 'data' ( temp structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:14 indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:14 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:14 'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId} @data})
+0:14 Constant:
+0:14 0 (const uint)
+0:14 add ( temp uint)
+0:14 AtomicAdd ( temp uint)
+0:14 @count: direct index for structure ( temp int)
+0:14 'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 -1 (const int)
+0:14 Constant:
+0:14 -1 (const int)
+0:15 Sequence
+0:15 move second child to first child ( temp 2-component vector of float)
+0:15 'coord' ( temp 2-component vector of float)
+0:15 Convert uint to float ( temp 2-component vector of float)
+0:15 vector swizzle ( temp 2-component vector of uint)
+0:15 threadId: direct index for structure ( temp 2-component vector of uint)
+0:15 'data' ( temp structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Sequence
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1 (const int)
+0:16 Sequence
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 'storeTemp' ( temp 4-component vector of float)
+0:16 color: direct index for structure ( temp 4-component vector of float)
+0:16 'data' ( temp structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId})
+0:16 Constant:
+0:16 0 (const int)
+0:16 imageStore ( temp void)
+0:16 'outtx' (layout( rgba32f) uniform image2D)
+0:16 Convert float to uint ( temp 2-component vector of uint)
+0:16 'coord' ( temp 2-component vector of float)
+0:16 'storeTemp' ( temp 4-component vector of float)
+0:16 'storeTemp' ( temp 4-component vector of float)
+0:18 move second child to first child ( temp 4-component vector of float)
+0:18 indirect index (layout( row_major std430) buffer 4-component vector of float)
+0:18 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:18 'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18 Constant:
+0:18 0 (const uint)
+0:18 Convert float to uint ( temp uint)
+0:18 direct index ( temp float)
+0:18 'coord' ( temp 2-component vector of float)
+0:18 Constant:
+0:18 0 (const int)
+0:18 indirect index (layout( row_major std430) buffer 4-component vector of float)
+0:18 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:18 'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18 Constant:
+0:18 0 (const uint)
+0:18 Convert float to uint ( temp uint)
+0:18 direct index ( temp float)
+0:18 'coord' ( temp 2-component vector of float)
+0:18 Constant:
+0:18 1 (const int)
+0:13 Function Definition: main( ( temp void)
+0:13 Function Parameters:
+0:? Sequence
+0:13 move second child to first child ( temp 3-component vector of uint)
+0:? 'nThreadId' ( temp 3-component vector of uint)
+0:? 'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
+0:13 Function Call: @main(vu3; ( temp void)
+0:? 'nThreadId' ( temp 3-component vector of uint)
+0:? Linker Objects
+0:? 'outtx' (layout( rgba32f) uniform image2D)
+0:? 'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color, temp 2-component vector of uint threadId} @data})
+0:? 'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:? 'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 84
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 79
+ ExecutionMode 4 LocalSize 1 1 1
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "@main(vu3;"
+ Name 10 "nThreadId"
+ Name 16 "sb_t"
+ MemberName 16(sb_t) 0 "color"
+ MemberName 16(sb_t) 1 "threadId"
+ Name 18 "data"
+ Name 19 "sb_t"
+ MemberName 19(sb_t) 0 "color"
+ MemberName 19(sb_t) 1 "threadId"
+ Name 21 "csb"
+ MemberName 21(csb) 0 "@data"
+ Name 23 "csb"
+ Name 26 "csb@count"
+ MemberName 26(csb@count) 0 "@count"
+ Name 28 "csb@count"
+ Name 48 "coord"
+ Name 52 "storeTemp"
+ Name 57 "outtx"
+ Name 63 "rwsb"
+ MemberName 63(rwsb) 0 "@data"
+ Name 65 "rwsb"
+ Name 77 "nThreadId"
+ Name 79 "nThreadId"
+ Name 81 "param"
+ MemberDecorate 19(sb_t) 0 Offset 0
+ MemberDecorate 19(sb_t) 1 Offset 16
+ Decorate 20 ArrayStride 32
+ MemberDecorate 21(csb) 0 Offset 0
+ Decorate 21(csb) BufferBlock
+ Decorate 23(csb) DescriptorSet 0
+ Decorate 23(csb) Binding 1
+ MemberDecorate 26(csb@count) 0 Offset 0
+ Decorate 26(csb@count) BufferBlock
+ Decorate 28(csb@count) DescriptorSet 0
+ Decorate 57(outtx) DescriptorSet 0
+ Decorate 62 ArrayStride 16
+ MemberDecorate 63(rwsb) 0 Offset 0
+ Decorate 63(rwsb) BufferBlock
+ Decorate 65(rwsb) DescriptorSet 0
+ Decorate 79(nThreadId) BuiltIn GlobalInvocationId
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypeVector 6(int) 3
+ 8: TypePointer Function 7(ivec3)
+ 9: TypeFunction 2 8(ptr)
+ 13: TypeFloat 32
+ 14: TypeVector 13(float) 4
+ 15: TypeVector 6(int) 2
+ 16(sb_t): TypeStruct 14(fvec4) 15(ivec2)
+ 17: TypePointer Function 16(sb_t)
+ 19(sb_t): TypeStruct 14(fvec4) 15(ivec2)
+ 20: TypeRuntimeArray 19(sb_t)
+ 21(csb): TypeStruct 20
+ 22: TypePointer Uniform 21(csb)
+ 23(csb): 22(ptr) Variable Uniform
+ 24: TypeInt 32 1
+ 25: 24(int) Constant 0
+ 26(csb@count): TypeStruct 24(int)
+ 27: TypePointer Uniform 26(csb@count)
+ 28(csb@count): 27(ptr) Variable Uniform
+ 29: TypePointer Uniform 24(int)
+ 31: 24(int) Constant 4294967295
+ 32: 6(int) Constant 1
+ 33: 6(int) Constant 0
+ 36: TypePointer Uniform 19(sb_t)
+ 40: TypePointer Function 14(fvec4)
+ 43: 24(int) Constant 1
+ 44: TypePointer Function 15(ivec2)
+ 46: TypeVector 13(float) 2
+ 47: TypePointer Function 46(fvec2)
+ 55: TypeImage 13(float) 2D nonsampled format:Rgba32f
+ 56: TypePointer UniformConstant 55
+ 57(outtx): 56(ptr) Variable UniformConstant
+ 62: TypeRuntimeArray 14(fvec4)
+ 63(rwsb): TypeStruct 62
+ 64: TypePointer Uniform 63(rwsb)
+ 65(rwsb): 64(ptr) Variable Uniform
+ 66: TypePointer Function 13(float)
+ 73: TypePointer Uniform 14(fvec4)
+ 78: TypePointer Input 7(ivec3)
+ 79(nThreadId): 78(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 77(nThreadId): 8(ptr) Variable Function
+ 81(param): 8(ptr) Variable Function
+ 80: 7(ivec3) Load 79(nThreadId)
+ Store 77(nThreadId) 80
+ 82: 7(ivec3) Load 77(nThreadId)
+ Store 81(param) 82
+ 83: 2 FunctionCall 11(@main(vu3;) 81(param)
+ Return
+ FunctionEnd
+ 11(@main(vu3;): 2 Function None 9
+ 10(nThreadId): 8(ptr) FunctionParameter
+ 12: Label
+ 18(data): 17(ptr) Variable Function
+ 48(coord): 47(ptr) Variable Function
+ 52(storeTemp): 40(ptr) Variable Function
+ 30: 29(ptr) AccessChain 28(csb@count) 25
+ 34: 6(int) AtomicIAdd 30 32 33 31
+ 35: 6(int) IAdd 34 31
+ 37: 36(ptr) AccessChain 23(csb) 25 35
+ 38: 19(sb_t) Load 37
+ 39: 14(fvec4) CompositeExtract 38 0
+ 41: 40(ptr) AccessChain 18(data) 25
+ Store 41 39
+ 42: 15(ivec2) CompositeExtract 38 1
+ 45: 44(ptr) AccessChain 18(data) 43
+ Store 45 42
+ 49: 44(ptr) AccessChain 18(data) 43
+ 50: 15(ivec2) Load 49
+ 51: 46(fvec2) ConvertUToF 50
+ Store 48(coord) 51
+ 53: 40(ptr) AccessChain 18(data) 25
+ 54: 14(fvec4) Load 53
+ Store 52(storeTemp) 54
+ 58: 55 Load 57(outtx)
+ 59: 46(fvec2) Load 48(coord)
+ 60: 15(ivec2) ConvertFToU 59
+ 61: 14(fvec4) Load 52(storeTemp)
+ ImageWrite 58 60 61
+ 67: 66(ptr) AccessChain 48(coord) 33
+ 68: 13(float) Load 67
+ 69: 6(int) ConvertFToU 68
+ 70: 66(ptr) AccessChain 48(coord) 32
+ 71: 13(float) Load 70
+ 72: 6(int) ConvertFToU 71
+ 74: 73(ptr) AccessChain 65(rwsb) 25 72
+ 75: 14(fvec4) Load 74
+ 76: 73(ptr) AccessChain 65(rwsb) 25 69
+ Store 76 75
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out
index 8ed27f68175..e5e68f11c53 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -1,5 +1,5 @@
hlsl.structbuffer.fn.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
@@ -17,6 +17,7 @@ gl_FragCoord origin is upper left
0:10 Function Definition: set(block--vu4[0]1;u1;vu4; ( temp void)
0:10 Function Parameters:
0:10 'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10 'sb@count' ( buffer block{layout( row_major std430) buffer int @count})
0:10 'bufferOffset' ( in uint)
0:10 'data' ( in 4-component vector of uint)
0:? Sequence
@@ -34,6 +35,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:21 Function Call: set(block--vu4[0]1;u1;vu4; ( temp void)
0:21 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21 'sbuf2@count' ( buffer block{layout( row_major std430) buffer int @count})
0:21 Constant:
0:21 2 (const uint)
0:21 Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
@@ -51,7 +53,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:20 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:20 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:20 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -59,15 +61,16 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:? 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:? 'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
0:? 'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 3-component vector of uint @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
@@ -85,6 +88,7 @@ gl_FragCoord origin is upper left
0:10 Function Definition: set(block--vu4[0]1;u1;vu4; ( temp void)
0:10 Function Parameters:
0:10 'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10 'sb@count' ( buffer block{layout( row_major std430) buffer int @count})
0:10 'bufferOffset' ( in uint)
0:10 'data' ( in 4-component vector of uint)
0:? Sequence
@@ -102,6 +106,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:21 Function Call: set(block--vu4[0]1;u1;vu4; ( temp void)
0:21 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21 'sbuf2@count' ( buffer block{layout( row_major std430) buffer int @count})
0:21 Constant:
0:21 2 (const uint)
0:21 Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
@@ -119,7 +124,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:20 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:20 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:20 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -127,19 +132,21 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:? 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:? 'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
0:? 'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 3-component vector of uint @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 71
+// Generated by (magic number): 80002
+// Id's are bound by 83
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 59 62
+ EntryPoint Fragment 4 "main" 68 71
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 ""
MemberName 9 0 "@data"
@@ -148,119 +155,148 @@ gl_FragCoord origin is upper left
Name 14 "bufferOffset"
Name 18 ""
MemberName 18 0 "@data"
- Name 25 "set(block--vu4[0]1;u1;vu4;"
- Name 22 "sb"
- Name 23 "bufferOffset"
- Name 24 "data"
- Name 31 "@main(u1;"
- Name 30 "pos"
- Name 44 "sbuf2"
- Name 46 "sbuf"
- Name 48 "param"
- Name 50 "param"
- Name 51 "param"
- Name 57 "pos"
- Name 59 "pos"
- Name 62 "@entryPointOutput"
- Name 63 "param"
- Name 68 "sbuf3"
- MemberName 68(sbuf3) 0 "@data"
- Name 70 "sbuf3"
+ Name 21 ""
+ MemberName 21 0 "@count"
+ Name 29 "set(block--vu4[0]1;u1;vu4;"
+ Name 25 "sb"
+ Name 26 "sb@count"
+ Name 27 "bufferOffset"
+ Name 28 "data"
+ Name 35 "@main(u1;"
+ Name 34 "pos"
+ Name 47 "sbuf2"
+ Name 49 "sbuf2@count"
+ Name 52 "sbuf"
+ Name 54 "param"
+ Name 55 "param"
+ Name 57 "param"
+ Name 58 "param"
+ Name 59 "param"
+ Name 60 "param"
+ Name 66 "pos"
+ Name 68 "pos"
+ Name 71 "@entryPointOutput"
+ Name 72 "param"
+ Name 75 "sbuf2@count"
+ MemberName 75(sbuf2@count) 0 "@count"
+ Name 77 "sbuf2@count"
+ Name 80 "sbuf3"
+ MemberName 80(sbuf3) 0 "@data"
+ Name 82 "sbuf3"
Decorate 8 ArrayStride 16
MemberDecorate 9 0 NonWritable
MemberDecorate 9 0 Offset 0
Decorate 9 BufferBlock
+ Decorate 13(sb) NonWritable
Decorate 17 ArrayStride 16
MemberDecorate 18 0 Offset 0
Decorate 18 BufferBlock
- Decorate 44(sbuf2) DescriptorSet 0
- Decorate 46(sbuf) DescriptorSet 0
- Decorate 46(sbuf) Binding 10
- Decorate 59(pos) Location 0
- Decorate 62(@entryPointOutput) Location 0
- Decorate 67 ArrayStride 16
- MemberDecorate 68(sbuf3) 0 NonWritable
- MemberDecorate 68(sbuf3) 0 Offset 0
- Decorate 68(sbuf3) BufferBlock
- Decorate 70(sbuf3) DescriptorSet 0
- Decorate 70(sbuf3) Binding 12
+ Decorate 21 BufferBlock
+ Decorate 47(sbuf2) DescriptorSet 0
+ Decorate 49(sbuf2@count) DescriptorSet 0
+ Decorate 52(sbuf) DescriptorSet 0
+ Decorate 52(sbuf) Binding 10
+ Decorate 68(pos) Flat
+ Decorate 68(pos) Location 0
+ Decorate 71(@entryPointOutput) Location 0
+ MemberDecorate 75(sbuf2@count) 0 Offset 0
+ Decorate 75(sbuf2@count) BufferBlock
+ Decorate 77(sbuf2@count) DescriptorSet 0
+ Decorate 79 ArrayStride 16
+ MemberDecorate 80(sbuf3) 0 NonWritable
+ MemberDecorate 80(sbuf3) 0 Offset 0
+ Decorate 80(sbuf3) BufferBlock
+ Decorate 82(sbuf3) DescriptorSet 0
+ Decorate 82(sbuf3) Binding 12
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypeVector 6(int) 4
8: TypeRuntimeArray 7(ivec4)
9: TypeStruct 8
- 10: TypePointer Uniform 9(struct)
+ 10: TypePointer Function 9(struct)
11: TypePointer Function 6(int)
12: TypeFunction 7(ivec4) 10(ptr) 11(ptr)
17: TypeRuntimeArray 7(ivec4)
18: TypeStruct 17
- 19: TypePointer Uniform 18(struct)
- 20: TypePointer Function 7(ivec4)
- 21: TypeFunction 2 19(ptr) 11(ptr) 20(ptr)
- 27: TypeFloat 32
- 28: TypeVector 27(float) 4
- 29: TypeFunction 28(fvec4) 11(ptr)
- 33: TypeInt 32 1
- 34: 33(int) Constant 0
- 36: TypePointer Uniform 7(ivec4)
- 44(sbuf2): 19(ptr) Variable Uniform
- 45: 6(int) Constant 2
- 46(sbuf): 10(ptr) Variable Uniform
- 47: 6(int) Constant 3
- 53: 27(float) Constant 0
- 54: 28(fvec4) ConstantComposite 53 53 53 53
- 58: TypePointer Input 6(int)
- 59(pos): 58(ptr) Variable Input
- 61: TypePointer Output 28(fvec4)
-62(@entryPointOutput): 61(ptr) Variable Output
- 66: TypeVector 6(int) 3
- 67: TypeRuntimeArray 66(ivec3)
- 68(sbuf3): TypeStruct 67
- 69: TypePointer Uniform 68(sbuf3)
- 70(sbuf3): 69(ptr) Variable Uniform
+ 19: TypePointer Function 18(struct)
+ 20: TypeInt 32 1
+ 21: TypeStruct 20(int)
+ 22: TypePointer Function 21(struct)
+ 23: TypePointer Function 7(ivec4)
+ 24: TypeFunction 2 19(ptr) 22(ptr) 11(ptr) 23(ptr)
+ 31: TypeFloat 32
+ 32: TypeVector 31(float) 4
+ 33: TypeFunction 32(fvec4) 11(ptr)
+ 37: 20(int) Constant 0
+ 46: TypePointer Uniform 18(struct)
+ 47(sbuf2): 46(ptr) Variable Uniform
+ 48: TypePointer Uniform 21(struct)
+ 49(sbuf2@count): 48(ptr) Variable Uniform
+ 50: 6(int) Constant 2
+ 51: TypePointer Uniform 9(struct)
+ 52(sbuf): 51(ptr) Variable Uniform
+ 53: 6(int) Constant 3
+ 62: 31(float) Constant 0
+ 63: 32(fvec4) ConstantComposite 62 62 62 62
+ 67: TypePointer Input 6(int)
+ 68(pos): 67(ptr) Variable Input
+ 70: TypePointer Output 32(fvec4)
+71(@entryPointOutput): 70(ptr) Variable Output
+ 75(sbuf2@count): TypeStruct 20(int)
+ 76: TypePointer Uniform 75(sbuf2@count)
+ 77(sbuf2@count): 76(ptr) Variable Uniform
+ 78: TypeVector 6(int) 3
+ 79: TypeRuntimeArray 78(ivec3)
+ 80(sbuf3): TypeStruct 79
+ 81: TypePointer Uniform 80(sbuf3)
+ 82(sbuf3): 81(ptr) Variable Uniform
4(main): 2 Function None 3
5: Label
- 57(pos): 11(ptr) Variable Function
- 63(param): 11(ptr) Variable Function
- 60: 6(int) Load 59(pos)
- Store 57(pos) 60
- 64: 6(int) Load 57(pos)
- Store 63(param) 64
- 65: 28(fvec4) FunctionCall 31(@main(u1;) 63(param)
- Store 62(@entryPointOutput) 65
+ 66(pos): 11(ptr) Variable Function
+ 72(param): 11(ptr) Variable Function
+ 69: 6(int) Load 68(pos)
+ Store 66(pos) 69
+ 73: 6(int) Load 66(pos)
+ Store 72(param) 73
+ 74: 32(fvec4) FunctionCall 35(@main(u1;) 72(param)
+ Store 71(@entryPointOutput) 74
Return
FunctionEnd
15(get(block--vu4[0]1;u1;): 7(ivec4) Function None 12
13(sb): 10(ptr) FunctionParameter
14(bufferOffset): 11(ptr) FunctionParameter
16: Label
- 35: 6(int) Load 14(bufferOffset)
- 37: 36(ptr) AccessChain 13(sb) 34 35
- 38: 7(ivec4) Load 37
- ReturnValue 38
+ 38: 6(int) Load 14(bufferOffset)
+ 39: 23(ptr) AccessChain 13(sb) 37 38
+ 40: 7(ivec4) Load 39
+ ReturnValue 40
FunctionEnd
-25(set(block--vu4[0]1;u1;vu4;): 2 Function None 21
- 22(sb): 19(ptr) FunctionParameter
-23(bufferOffset): 11(ptr) FunctionParameter
- 24(data): 20(ptr) FunctionParameter
- 26: Label
- 41: 6(int) Load 23(bufferOffset)
- 42: 7(ivec4) Load 24(data)
- 43: 36(ptr) AccessChain 22(sb) 34 41
- Store 43 42
+29(set(block--vu4[0]1;u1;vu4;): 2 Function None 24
+ 25(sb): 19(ptr) FunctionParameter
+ 26(sb@count): 22(ptr) FunctionParameter
+27(bufferOffset): 11(ptr) FunctionParameter
+ 28(data): 23(ptr) FunctionParameter
+ 30: Label
+ 43: 6(int) Load 27(bufferOffset)
+ 44: 7(ivec4) Load 28(data)
+ 45: 23(ptr) AccessChain 25(sb) 37 43
+ Store 45 44
Return
FunctionEnd
- 31(@main(u1;): 28(fvec4) Function None 29
- 30(pos): 11(ptr) FunctionParameter
- 32: Label
- 48(param): 11(ptr) Variable Function
- 50(param): 11(ptr) Variable Function
- 51(param): 20(ptr) Variable Function
- Store 48(param) 47
- 49: 7(ivec4) FunctionCall 15(get(block--vu4[0]1;u1;) 46(sbuf) 48(param)
- Store 50(param) 45
- Store 51(param) 49
- 52: 2 FunctionCall 25(set(block--vu4[0]1;u1;vu4;) 44(sbuf2) 50(param) 51(param)
- ReturnValue 54
+ 35(@main(u1;): 32(fvec4) Function None 33
+ 34(pos): 11(ptr) FunctionParameter
+ 36: Label
+ 54(param): 10(ptr) Variable Function
+ 55(param): 11(ptr) Variable Function
+ 57(param): 19(ptr) Variable Function
+ 58(param): 22(ptr) Variable Function
+ 59(param): 11(ptr) Variable Function
+ 60(param): 23(ptr) Variable Function
+ Store 55(param) 53
+ 56: 7(ivec4) FunctionCall 15(get(block--vu4[0]1;u1;) 54(param) 55(param)
+ Store 59(param) 50
+ Store 60(param) 56
+ 61: 2 FunctionCall 29(set(block--vu4[0]1;u1;vu4;) 57(param) 58(param) 59(param) 60(param)
+ ReturnValue 63
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn2.comp.out
new file mode 100644
index 00000000000..bb84b99c059
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn2.comp.out
@@ -0,0 +1,246 @@
+hlsl.structbuffer.fn2.comp
+Shader version: 500
+local_size = (256, 1, 1)
+0:? Sequence
+0:5 Function Definition: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
+0:5 Function Parameters:
+0:5 'loc' ( in uint)
+0:5 'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:? Sequence
+0:6 Sequence
+0:6 move second child to first child ( temp 2-component vector of uint)
+0:6 'result' ( temp 2-component vector of uint)
+0:? Sequence
+0:6 move second child to first child ( temp int)
+0:6 'byteAddrTemp' ( temp int)
+0:6 right-shift ( temp int)
+0:6 'loc' ( in uint)
+0:6 Constant:
+0:6 2 (const int)
+0:? Construct vec2 ( temp 2-component vector of uint)
+0:6 indirect index ( temp float)
+0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:6 'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6 Constant:
+0:6 0 (const uint)
+0:6 'byteAddrTemp' ( temp int)
+0:6 indirect index ( temp float)
+0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:6 'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6 Constant:
+0:6 0 (const uint)
+0:6 add ( temp int)
+0:6 'byteAddrTemp' ( temp int)
+0:6 Constant:
+0:6 1 (const int)
+0:7 Branch: Return with expression
+0:7 'result' ( temp 2-component vector of uint)
+0:12 Function Definition: @main(u1; ( temp void)
+0:12 Function Parameters:
+0:12 'dispatchId' ( in uint)
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp 2-component vector of uint)
+0:13 'result' ( temp 2-component vector of uint)
+0:13 Function Call: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
+0:13 'dispatchId' ( in uint)
+0:13 'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14 Sequence
+0:14 imageStore ( temp void)
+0:14 'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
+0:14 'dispatchId' ( in uint)
+0:14 'result' ( temp 2-component vector of uint)
+0:14 'result' ( temp 2-component vector of uint)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp uint)
+0:? 'dispatchId' ( temp uint)
+0:? 'dispatchId' ( in uint GlobalInvocationID)
+0:12 Function Call: @main(u1; ( temp void)
+0:? 'dispatchId' ( temp uint)
+0:? Linker Objects
+0:? 'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:? 'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
+0:? 'dispatchId' ( in uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (256, 1, 1)
+0:? Sequence
+0:5 Function Definition: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
+0:5 Function Parameters:
+0:5 'loc' ( in uint)
+0:5 'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:? Sequence
+0:6 Sequence
+0:6 move second child to first child ( temp 2-component vector of uint)
+0:6 'result' ( temp 2-component vector of uint)
+0:? Sequence
+0:6 move second child to first child ( temp int)
+0:6 'byteAddrTemp' ( temp int)
+0:6 right-shift ( temp int)
+0:6 'loc' ( in uint)
+0:6 Constant:
+0:6 2 (const int)
+0:? Construct vec2 ( temp 2-component vector of uint)
+0:6 indirect index ( temp float)
+0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:6 'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6 Constant:
+0:6 0 (const uint)
+0:6 'byteAddrTemp' ( temp int)
+0:6 indirect index ( temp float)
+0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:6 'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6 Constant:
+0:6 0 (const uint)
+0:6 add ( temp int)
+0:6 'byteAddrTemp' ( temp int)
+0:6 Constant:
+0:6 1 (const int)
+0:7 Branch: Return with expression
+0:7 'result' ( temp 2-component vector of uint)
+0:12 Function Definition: @main(u1; ( temp void)
+0:12 Function Parameters:
+0:12 'dispatchId' ( in uint)
+0:? Sequence
+0:13 Sequence
+0:13 move second child to first child ( temp 2-component vector of uint)
+0:13 'result' ( temp 2-component vector of uint)
+0:13 Function Call: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
+0:13 'dispatchId' ( in uint)
+0:13 'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14 Sequence
+0:14 imageStore ( temp void)
+0:14 'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
+0:14 'dispatchId' ( in uint)
+0:14 'result' ( temp 2-component vector of uint)
+0:14 'result' ( temp 2-component vector of uint)
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 move second child to first child ( temp uint)
+0:? 'dispatchId' ( temp uint)
+0:? 'dispatchId' ( in uint GlobalInvocationID)
+0:12 Function Call: @main(u1; ( temp void)
+0:? 'dispatchId' ( temp uint)
+0:? Linker Objects
+0:? 'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:? 'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
+0:? 'dispatchId' ( in uint GlobalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 62
+
+ Capability Shader
+ Capability ImageBuffer
+ Capability StorageImageExtendedFormats
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 57
+ ExecutionMode 4 LocalSize 256 1 1
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 ""
+ MemberName 9 0 "@data"
+ Name 15 "testLoad(u1;block--u1[0]1;"
+ Name 13 "loc"
+ Name 14 "buffer"
+ Name 19 "@main(u1;"
+ Name 18 "dispatchId"
+ Name 22 "result"
+ Name 25 "byteAddrTemp"
+ Name 42 "result"
+ Name 44 "g_input"
+ Name 45 "param"
+ Name 47 "param"
+ Name 51 "g_output"
+ Name 55 "dispatchId"
+ Name 57 "dispatchId"
+ Name 59 "param"
+ Decorate 8 ArrayStride 4
+ MemberDecorate 9 0 NonWritable
+ MemberDecorate 9 0 Offset 0
+ Decorate 9 BufferBlock
+ Decorate 14(buffer) NonWritable
+ Decorate 44(g_input) DescriptorSet 0
+ Decorate 44(g_input) Binding 0
+ Decorate 51(g_output) DescriptorSet 0
+ Decorate 51(g_output) Binding 1
+ Decorate 57(dispatchId) BuiltIn GlobalInvocationId
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 8: TypeRuntimeArray 6(int)
+ 9: TypeStruct 8
+ 10: TypePointer Function 9(struct)
+ 11: TypeVector 6(int) 2
+ 12: TypeFunction 11(ivec2) 7(ptr) 10(ptr)
+ 17: TypeFunction 2 7(ptr)
+ 21: TypePointer Function 11(ivec2)
+ 23: TypeInt 32 1
+ 24: TypePointer Function 23(int)
+ 27: 23(int) Constant 2
+ 29: 23(int) Constant 0
+ 34: 23(int) Constant 1
+ 43: TypePointer Uniform 9(struct)
+ 44(g_input): 43(ptr) Variable Uniform
+ 49: TypeImage 6(int) Buffer nonsampled format:Rg32ui
+ 50: TypePointer UniformConstant 49
+ 51(g_output): 50(ptr) Variable UniformConstant
+ 56: TypePointer Input 6(int)
+ 57(dispatchId): 56(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 55(dispatchId): 7(ptr) Variable Function
+ 59(param): 7(ptr) Variable Function
+ 58: 6(int) Load 57(dispatchId)
+ Store 55(dispatchId) 58
+ 60: 6(int) Load 55(dispatchId)
+ Store 59(param) 60
+ 61: 2 FunctionCall 19(@main(u1;) 59(param)
+ Return
+ FunctionEnd
+15(testLoad(u1;block--u1[0]1;): 11(ivec2) Function None 12
+ 13(loc): 7(ptr) FunctionParameter
+ 14(buffer): 10(ptr) FunctionParameter
+ 16: Label
+ 22(result): 21(ptr) Variable Function
+25(byteAddrTemp): 24(ptr) Variable Function
+ 26: 6(int) Load 13(loc)
+ 28: 23(int) ShiftRightLogical 26 27
+ Store 25(byteAddrTemp) 28
+ 30: 23(int) Load 25(byteAddrTemp)
+ 31: 7(ptr) AccessChain 14(buffer) 29 30
+ 32: 6(int) Load 31
+ 33: 23(int) Load 25(byteAddrTemp)
+ 35: 23(int) IAdd 33 34
+ 36: 7(ptr) AccessChain 14(buffer) 29 35
+ 37: 6(int) Load 36
+ 38: 11(ivec2) CompositeConstruct 32 37
+ Store 22(result) 38
+ 39: 11(ivec2) Load 22(result)
+ ReturnValue 39
+ FunctionEnd
+ 19(@main(u1;): 2 Function None 17
+ 18(dispatchId): 7(ptr) FunctionParameter
+ 20: Label
+ 42(result): 21(ptr) Variable Function
+ 45(param): 7(ptr) Variable Function
+ 47(param): 10(ptr) Variable Function
+ 46: 6(int) Load 18(dispatchId)
+ Store 45(param) 46
+ 48: 11(ivec2) FunctionCall 15(testLoad(u1;block--u1[0]1;) 45(param) 47(param)
+ Store 42(result) 48
+ 52: 49 Load 51(g_output)
+ 53: 6(int) Load 18(dispatchId)
+ 54: 11(ivec2) Load 42(result)
+ ImageWrite 52 53 54
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out
index 3c8b1146a7f..187a41bbefc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out
@@ -1,5 +1,5 @@
hlsl.structbuffer.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -80,7 +80,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:12 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:12 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -89,13 +89,13 @@ gl_FragCoord origin is upper left
0:? 'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2} @data})
0:? 'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -176,7 +176,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:12 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:12 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -185,17 +185,18 @@ gl_FragCoord origin is upper left
0:? 'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test, temp bool test2} @data})
0:? 'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 94
+// Generated by (magic number): 80002
+// Id's are bound by 96
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 87 90
+ EntryPoint Fragment 4 "main" 89 92
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 12 "@main(u1;"
Name 11 "pos"
@@ -211,20 +212,17 @@ gl_FragCoord origin is upper left
Name 21 "sbuf"
MemberName 21(sbuf) 0 "@data"
Name 23 "sbuf"
- Name 40 "size"
- Name 42 "stride"
- Name 57 "sbuf2"
- MemberName 57(sbuf2) 0 "@data"
+ Name 43 "size"
+ Name 45 "stride"
Name 59 "sbuf2"
- Name 85 "pos"
+ MemberName 59(sbuf2) 0 "@data"
+ Name 61 "sbuf2"
Name 87 "pos"
- Name 90 "@entryPointOutput"
- Name 91 "param"
- MemberDecorate 19(sb_t) 0 NonWritable
+ Name 89 "pos"
+ Name 92 "@entryPointOutput"
+ Name 93 "param"
MemberDecorate 19(sb_t) 0 Offset 0
- MemberDecorate 19(sb_t) 1 NonWritable
MemberDecorate 19(sb_t) 1 Offset 12
- MemberDecorate 19(sb_t) 2 NonWritable
MemberDecorate 19(sb_t) 2 Offset 16
Decorate 20 ArrayStride 32
MemberDecorate 21(sbuf) 0 NonWritable
@@ -232,13 +230,14 @@ gl_FragCoord origin is upper left
Decorate 21(sbuf) BufferBlock
Decorate 23(sbuf) DescriptorSet 0
Decorate 23(sbuf) Binding 10
- Decorate 56 ArrayStride 4
- MemberDecorate 57(sbuf2) 0 NonWritable
- MemberDecorate 57(sbuf2) 0 Offset 0
- Decorate 57(sbuf2) BufferBlock
- Decorate 59(sbuf2) DescriptorSet 0
- Decorate 87(pos) Location 0
- Decorate 90(@entryPointOutput) Location 0
+ Decorate 58 ArrayStride 4
+ MemberDecorate 59(sbuf2) 0 NonWritable
+ MemberDecorate 59(sbuf2) 0 Offset 0
+ Decorate 59(sbuf2) BufferBlock
+ Decorate 61(sbuf2) DescriptorSet 0
+ Decorate 89(pos) Flat
+ Decorate 89(pos) Location 0
+ Decorate 92(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -260,41 +259,41 @@ gl_FragCoord origin is upper left
27: TypePointer Uniform 19(sb_t)
31: TypePointer Function 14(fvec3)
34: 24(int) Constant 1
- 35: TypePointer Function 15(bool)
- 38: 24(int) Constant 2
- 43: 6(int) Constant 32
- 45: TypePointer Uniform 6(int)
- 48: 6(int) Constant 0
- 53: TypePointer Uniform 14(fvec3)
- 56: TypeRuntimeArray 8(float)
- 57(sbuf2): TypeStruct 56
- 58: TypePointer Uniform 57(sbuf2)
- 59(sbuf2): 58(ptr) Variable Uniform
- 61: TypePointer Uniform 8(float)
- 66: 8(float) Constant 0
- 73: TypePointer Function 8(float)
- 86: TypePointer Input 6(int)
- 87(pos): 86(ptr) Variable Input
- 89: TypePointer Output 9(fvec4)
-90(@entryPointOutput): 89(ptr) Variable Output
+ 35: 6(int) Constant 0
+ 37: TypePointer Function 15(bool)
+ 40: 24(int) Constant 2
+ 46: 6(int) Constant 32
+ 48: TypePointer Uniform 6(int)
+ 55: TypePointer Uniform 14(fvec3)
+ 58: TypeRuntimeArray 8(float)
+ 59(sbuf2): TypeStruct 58
+ 60: TypePointer Uniform 59(sbuf2)
+ 61(sbuf2): 60(ptr) Variable Uniform
+ 63: TypePointer Uniform 8(float)
+ 68: 8(float) Constant 0
+ 75: TypePointer Function 8(float)
+ 88: TypePointer Input 6(int)
+ 89(pos): 88(ptr) Variable Input
+ 91: TypePointer Output 9(fvec4)
+92(@entryPointOutput): 91(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 85(pos): 7(ptr) Variable Function
- 91(param): 7(ptr) Variable Function
- 88: 6(int) Load 87(pos)
- Store 85(pos) 88
- 92: 6(int) Load 85(pos)
- Store 91(param) 92
- 93: 9(fvec4) FunctionCall 12(@main(u1;) 91(param)
- Store 90(@entryPointOutput) 93
+ 87(pos): 7(ptr) Variable Function
+ 93(param): 7(ptr) Variable Function
+ 90: 6(int) Load 89(pos)
+ Store 87(pos) 90
+ 94: 6(int) Load 87(pos)
+ Store 93(param) 94
+ 95: 9(fvec4) FunctionCall 12(@main(u1;) 93(param)
+ Store 92(@entryPointOutput) 95
Return
FunctionEnd
12(@main(u1;): 9(fvec4) Function None 10
11(pos): 7(ptr) FunctionParameter
13: Label
18(mydata): 17(ptr) Variable Function
- 40(size): 7(ptr) Variable Function
- 42(stride): 7(ptr) Variable Function
+ 43(size): 7(ptr) Variable Function
+ 45(stride): 7(ptr) Variable Function
26: 6(int) Load 11(pos)
28: 27(ptr) AccessChain 23(sbuf) 25 26
29: 19(sb_t) Load 28
@@ -302,46 +301,48 @@ gl_FragCoord origin is upper left
32: 31(ptr) AccessChain 18(mydata) 25
Store 32 30
33: 6(int) CompositeExtract 29 1
- 36: 35(ptr) AccessChain 18(mydata) 34
- Store 36 33
- 37: 6(int) CompositeExtract 29 2
- 39: 35(ptr) AccessChain 18(mydata) 38
- Store 39 37
- 41: 24(int) ArrayLength 23(sbuf) 0
- Store 40(size) 41
- Store 42(stride) 43
- 44: 6(int) Load 11(pos)
- 46: 45(ptr) AccessChain 23(sbuf) 25 44 34
- 47: 6(int) Load 46
- 49: 15(bool) INotEqual 47 48
- SelectionMerge 51 None
- BranchConditional 49 50 72
- 50: Label
- 52: 6(int) Load 11(pos)
- 54: 53(ptr) AccessChain 23(sbuf) 25 52 25
- 55: 14(fvec3) Load 54
- 60: 6(int) Load 11(pos)
- 62: 61(ptr) AccessChain 59(sbuf2) 25 60
- 63: 8(float) Load 62
- 64: 14(fvec3) CompositeConstruct 63 63 63
- 65: 14(fvec3) FAdd 55 64
- 67: 8(float) CompositeExtract 65 0
- 68: 8(float) CompositeExtract 65 1
- 69: 8(float) CompositeExtract 65 2
- 70: 9(fvec4) CompositeConstruct 67 68 69 66
- ReturnValue 70
- 72: Label
- 74: 73(ptr) AccessChain 18(mydata) 25 48
- 75: 8(float) Load 74
- 76: 6(int) Load 40(size)
- 77: 8(float) ConvertUToF 76
- 78: 8(float) FAdd 75 77
- 79: 6(int) Load 42(stride)
- 80: 8(float) ConvertUToF 79
- 81: 8(float) FAdd 78 80
- 82: 9(fvec4) CompositeConstruct 81 81 81 81
- ReturnValue 82
- 51: Label
- 84: 9(fvec4) Undef
- ReturnValue 84
+ 36: 15(bool) INotEqual 33 35
+ 38: 37(ptr) AccessChain 18(mydata) 34
+ Store 38 36
+ 39: 6(int) CompositeExtract 29 2
+ 41: 15(bool) INotEqual 39 35
+ 42: 37(ptr) AccessChain 18(mydata) 40
+ Store 42 41
+ 44: 24(int) ArrayLength 23(sbuf) 0
+ Store 43(size) 44
+ Store 45(stride) 46
+ 47: 6(int) Load 11(pos)
+ 49: 48(ptr) AccessChain 23(sbuf) 25 47 34
+ 50: 6(int) Load 49
+ 51: 15(bool) INotEqual 50 35
+ SelectionMerge 53 None
+ BranchConditional 51 52 74
+ 52: Label
+ 54: 6(int) Load 11(pos)
+ 56: 55(ptr) AccessChain 23(sbuf) 25 54 25
+ 57: 14(fvec3) Load 56
+ 62: 6(int) Load 11(pos)
+ 64: 63(ptr) AccessChain 61(sbuf2) 25 62
+ 65: 8(float) Load 64
+ 66: 14(fvec3) CompositeConstruct 65 65 65
+ 67: 14(fvec3) FAdd 57 66
+ 69: 8(float) CompositeExtract 67 0
+ 70: 8(float) CompositeExtract 67 1
+ 71: 8(float) CompositeExtract 67 2
+ 72: 9(fvec4) CompositeConstruct 69 70 71 68
+ ReturnValue 72
+ 74: Label
+ 76: 75(ptr) AccessChain 18(mydata) 25 35
+ 77: 8(float) Load 76
+ 78: 6(int) Load 43(size)
+ 79: 8(float) ConvertUToF 78
+ 80: 8(float) FAdd 77 79
+ 81: 6(int) Load 45(stride)
+ 82: 8(float) ConvertUToF 81
+ 83: 8(float) FAdd 80 82
+ 84: 9(fvec4) CompositeConstruct 83 83 83 83
+ ReturnValue 84
+ 53: Label
+ 86: 9(fvec4) Undef
+ ReturnValue 86
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out
new file mode 100644
index 00000000000..a63fcbe5806
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out
@@ -0,0 +1,324 @@
+hlsl.structbuffer.incdec.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(u1; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'pos' ( in uint)
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of uint)
+0:8 'result' ( temp 4-component vector of uint)
+0:8 Constant:
+0:8 0 (const uint)
+0:8 0 (const uint)
+0:8 0 (const uint)
+0:8 0 (const uint)
+0:10 direct index (layout( row_major std430) buffer 4-component vector of uint)
+0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
+0:10 'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10 Constant:
+0:10 0 (const uint)
+0:10 Constant:
+0:10 7 (const int)
+0:11 direct index (layout( row_major std430) buffer 4-component vector of uint)
+0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
+0:11 'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11 Constant:
+0:11 0 (const uint)
+0:11 Constant:
+0:11 7 (const int)
+0:13 move second child to first child ( temp 4-component vector of uint)
+0:13 direct index (layout( row_major std430) buffer 4-component vector of uint)
+0:13 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
+0:13 'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:13 Constant:
+0:13 0 (const uint)
+0:13 Constant:
+0:13 5 (const int)
+0:13 Constant:
+0:13 2 (const uint)
+0:13 2 (const uint)
+0:13 2 (const uint)
+0:13 2 (const uint)
+0:15 Sequence
+0:15 move second child to first child ( temp uint)
+0:15 'c1' ( temp uint)
+0:15 AtomicAdd ( temp uint)
+0:15 @count: direct index for structure ( temp int)
+0:15 'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1 (const int)
+0:16 Sequence
+0:16 move second child to first child ( temp uint)
+0:16 'c2' ( temp uint)
+0:16 add ( temp uint)
+0:16 AtomicAdd ( temp uint)
+0:16 @count: direct index for structure ( temp int)
+0:16 'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 -1 (const int)
+0:16 Constant:
+0:16 -1 (const int)
+0:18 Branch: Return with expression
+0:? Construct vec4 ( temp 4-component vector of float)
+0:18 Convert uint to float ( temp float)
+0:18 direct index ( temp uint)
+0:18 'result' ( temp 4-component vector of uint)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Convert uint to float ( temp float)
+0:18 direct index ( temp uint)
+0:18 'result' ( temp 4-component vector of uint)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Convert uint to float ( temp float)
+0:18 'c1' ( temp uint)
+0:18 Convert uint to float ( temp float)
+0:18 'c2' ( temp uint)
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 move second child to first child ( temp uint)
+0:? 'pos' ( temp uint)
+0:? 'pos' (layout( location=0) flat in uint)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(u1; ( temp 4-component vector of float)
+0:? 'pos' ( temp uint)
+0:? Linker Objects
+0:? 'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:? 'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:? 'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' (layout( location=0) flat in uint)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(u1; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'pos' ( in uint)
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of uint)
+0:8 'result' ( temp 4-component vector of uint)
+0:8 Constant:
+0:8 0 (const uint)
+0:8 0 (const uint)
+0:8 0 (const uint)
+0:8 0 (const uint)
+0:10 direct index (layout( row_major std430) buffer 4-component vector of uint)
+0:10 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
+0:10 'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10 Constant:
+0:10 0 (const uint)
+0:10 Constant:
+0:10 7 (const int)
+0:11 direct index (layout( row_major std430) buffer 4-component vector of uint)
+0:11 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
+0:11 'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11 Constant:
+0:11 0 (const uint)
+0:11 Constant:
+0:11 7 (const int)
+0:13 move second child to first child ( temp 4-component vector of uint)
+0:13 direct index (layout( row_major std430) buffer 4-component vector of uint)
+0:13 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
+0:13 'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:13 Constant:
+0:13 0 (const uint)
+0:13 Constant:
+0:13 5 (const int)
+0:13 Constant:
+0:13 2 (const uint)
+0:13 2 (const uint)
+0:13 2 (const uint)
+0:13 2 (const uint)
+0:15 Sequence
+0:15 move second child to first child ( temp uint)
+0:15 'c1' ( temp uint)
+0:15 AtomicAdd ( temp uint)
+0:15 @count: direct index for structure ( temp int)
+0:15 'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:15 Constant:
+0:15 0 (const int)
+0:15 Constant:
+0:15 1 (const int)
+0:16 Sequence
+0:16 move second child to first child ( temp uint)
+0:16 'c2' ( temp uint)
+0:16 add ( temp uint)
+0:16 AtomicAdd ( temp uint)
+0:16 @count: direct index for structure ( temp int)
+0:16 'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:16 Constant:
+0:16 0 (const int)
+0:16 Constant:
+0:16 -1 (const int)
+0:16 Constant:
+0:16 -1 (const int)
+0:18 Branch: Return with expression
+0:? Construct vec4 ( temp 4-component vector of float)
+0:18 Convert uint to float ( temp float)
+0:18 direct index ( temp uint)
+0:18 'result' ( temp 4-component vector of uint)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Convert uint to float ( temp float)
+0:18 direct index ( temp uint)
+0:18 'result' ( temp 4-component vector of uint)
+0:18 Constant:
+0:18 1 (const int)
+0:18 Convert uint to float ( temp float)
+0:18 'c1' ( temp uint)
+0:18 Convert uint to float ( temp float)
+0:18 'c2' ( temp uint)
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 move second child to first child ( temp uint)
+0:? 'pos' ( temp uint)
+0:? 'pos' (layout( location=0) flat in uint)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(u1; ( temp 4-component vector of float)
+0:? 'pos' ( temp uint)
+0:? Linker Objects
+0:? 'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:? 'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:? 'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:? 'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' (layout( location=0) flat in uint)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 70
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 63 66
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 12 "@main(u1;"
+ Name 11 "pos"
+ Name 16 "result"
+ Name 20 "sbuf_rw_i"
+ MemberName 20(sbuf_rw_i) 0 "@data"
+ Name 22 "sbuf_rw_i"
+ Name 26 "sbuf_rw_d"
+ Name 27 "sbuf_rw_nocounter"
+ Name 33 "c1"
+ Name 34 "sbuf_rw_i@count"
+ MemberName 34(sbuf_rw_i@count) 0 "@count"
+ Name 36 "sbuf_rw_i@count"
+ Name 42 "c2"
+ Name 43 "sbuf_rw_d@count"
+ Name 61 "pos"
+ Name 63 "pos"
+ Name 66 "@entryPointOutput"
+ Name 67 "param"
+ Decorate 19 ArrayStride 16
+ MemberDecorate 20(sbuf_rw_i) 0 Offset 0
+ Decorate 20(sbuf_rw_i) BufferBlock
+ Decorate 22(sbuf_rw_i) DescriptorSet 0
+ Decorate 26(sbuf_rw_d) DescriptorSet 0
+ Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
+ MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
+ Decorate 34(sbuf_rw_i@count) BufferBlock
+ Decorate 36(sbuf_rw_i@count) DescriptorSet 0
+ Decorate 43(sbuf_rw_d@count) DescriptorSet 0
+ Decorate 63(pos) Flat
+ Decorate 63(pos) Location 0
+ Decorate 66(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 8: TypeFloat 32
+ 9: TypeVector 8(float) 4
+ 10: TypeFunction 9(fvec4) 7(ptr)
+ 14: TypeVector 6(int) 4
+ 15: TypePointer Function 14(ivec4)
+ 17: 6(int) Constant 0
+ 18: 14(ivec4) ConstantComposite 17 17 17 17
+ 19: TypeRuntimeArray 14(ivec4)
+ 20(sbuf_rw_i): TypeStruct 19
+ 21: TypePointer Uniform 20(sbuf_rw_i)
+ 22(sbuf_rw_i): 21(ptr) Variable Uniform
+ 23: TypeInt 32 1
+ 24: 23(int) Constant 0
+ 25: 23(int) Constant 7
+ 26(sbuf_rw_d): 21(ptr) Variable Uniform
+27(sbuf_rw_nocounter): 21(ptr) Variable Uniform
+ 28: 23(int) Constant 5
+ 29: 6(int) Constant 2
+ 30: 14(ivec4) ConstantComposite 29 29 29 29
+ 31: TypePointer Uniform 14(ivec4)
+34(sbuf_rw_i@count): TypeStruct 23(int)
+ 35: TypePointer Uniform 34(sbuf_rw_i@count)
+36(sbuf_rw_i@count): 35(ptr) Variable Uniform
+ 37: TypePointer Uniform 23(int)
+ 39: 23(int) Constant 1
+ 40: 6(int) Constant 1
+43(sbuf_rw_d@count): 35(ptr) Variable Uniform
+ 45: 23(int) Constant 4294967295
+ 62: TypePointer Input 6(int)
+ 63(pos): 62(ptr) Variable Input
+ 65: TypePointer Output 9(fvec4)
+66(@entryPointOutput): 65(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 61(pos): 7(ptr) Variable Function
+ 67(param): 7(ptr) Variable Function
+ 64: 6(int) Load 63(pos)
+ Store 61(pos) 64
+ 68: 6(int) Load 61(pos)
+ Store 67(param) 68
+ 69: 9(fvec4) FunctionCall 12(@main(u1;) 67(param)
+ Store 66(@entryPointOutput) 69
+ Return
+ FunctionEnd
+ 12(@main(u1;): 9(fvec4) Function None 10
+ 11(pos): 7(ptr) FunctionParameter
+ 13: Label
+ 16(result): 15(ptr) Variable Function
+ 33(c1): 7(ptr) Variable Function
+ 42(c2): 7(ptr) Variable Function
+ Store 16(result) 18
+ 32: 31(ptr) AccessChain 27(sbuf_rw_nocounter) 24 28
+ Store 32 30
+ 38: 37(ptr) AccessChain 36(sbuf_rw_i@count) 24
+ 41: 6(int) AtomicIAdd 38 40 17 39
+ Store 33(c1) 41
+ 44: 37(ptr) AccessChain 43(sbuf_rw_d@count) 24
+ 46: 6(int) AtomicIAdd 44 40 17 45
+ 47: 6(int) IAdd 46 45
+ Store 42(c2) 47
+ 48: 7(ptr) AccessChain 16(result) 17
+ 49: 6(int) Load 48
+ 50: 8(float) ConvertUToF 49
+ 51: 7(ptr) AccessChain 16(result) 40
+ 52: 6(int) Load 51
+ 53: 8(float) ConvertUToF 52
+ 54: 6(int) Load 33(c1)
+ 55: 8(float) ConvertUToF 54
+ 56: 6(int) Load 42(c2)
+ 57: 8(float) ConvertUToF 56
+ 58: 9(fvec4) CompositeConstruct 50 53 55 57
+ ReturnValue 58
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out
index bfe4c39b669..87d50f052ff 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -1,5 +1,5 @@
hlsl.structbuffer.rw.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -74,7 +74,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:12 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:12 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -83,13 +83,13 @@ gl_FragCoord origin is upper left
0:? 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test} @data})
0:? 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -164,7 +164,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:12 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:12 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:12 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -173,10 +173,10 @@ gl_FragCoord origin is upper left
0:? 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color, temp bool test} @data})
0:? 'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 78
Capability Shader
@@ -184,6 +184,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 71 74
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 12 "@main(u1;"
Name 11 "pos"
@@ -212,6 +213,7 @@ gl_FragCoord origin is upper left
MemberDecorate 30(sbuf) 0 Offset 0
Decorate 30(sbuf) BufferBlock
Decorate 32(sbuf) DescriptorSet 0
+ Decorate 71(pos) Flat
Decorate 71(pos) Location 0
Decorate 74(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index e99bc435d0e..77c27443a24 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -1,5 +1,5 @@
hlsl.structbuffer.rwbyte.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -490,7 +490,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:5 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:5 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -498,13 +498,13 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5 Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -995,7 +995,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:5 move second child to first child ( temp uint)
0:? 'pos' ( temp uint)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
0:5 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:5 Function Call: @main(u1; ( temp 4-component vector of float)
@@ -1003,10 +1003,10 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:? 'pos' (layout( location=0) in uint)
+0:? 'pos' (layout( location=0) flat in uint)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 240
Capability Shader
@@ -1014,6 +1014,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 233 236
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 12 "@main(u1;"
Name 11 "pos"
@@ -1036,6 +1037,7 @@ gl_FragCoord origin is upper left
MemberDecorate 16(sbuf) 0 Offset 0
Decorate 16(sbuf) BufferBlock
Decorate 18(sbuf) DescriptorSet 0
+ Decorate 233(pos) Flat
Decorate 233(pos) Location 0
Decorate 236(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structin.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structin.vert.out
index c621941e6e0..45304f52d53 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structin.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structin.vert.out
@@ -1,15 +1,15 @@
hlsl.structin.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
-0:8 Function Definition: @main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 Function Definition: @main(vf4;struct-VI-vf4[2]-vf4-vf41;vf4; ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Function Parameters:
0:8 'd' ( in 4-component vector of float)
-0:8 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 'e' ( in 4-component vector of float)
0:? Sequence
0:11 move second child to first child ( temp 4-component vector of float)
0:11 b: direct index for structure ( temp 4-component vector of float)
-0:11 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:11 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:11 Constant:
0:11 2 (const int)
0:11 add ( temp 4-component vector of float)
@@ -18,31 +18,66 @@ Shader version: 450
0:11 add ( temp 4-component vector of float)
0:11 direct index ( temp 4-component vector of float)
0:11 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:11 Constant:
0:11 0 (const int)
0:11 Constant:
0:11 1 (const int)
0:11 direct index ( temp 4-component vector of float)
0:11 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:11 Constant:
0:11 0 (const int)
0:11 Constant:
0:11 0 (const int)
0:11 Construct vec4 ( temp 4-component vector of float)
-0:11 Convert uint to float ( temp float)
-0:11 direct index ( temp uint)
-0:11 coord: direct index for structure ( temp 2-component vector of uint)
-0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:11 Constant:
-0:11 1 (const int)
+0:11 direct index ( temp float)
+0:11 coord: direct index for structure ( temp 4-component vector of float)
+0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:11 Constant:
-0:11 0 (const int)
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
0:11 'd' ( in 4-component vector of float)
0:11 'e' ( in 4-component vector of float)
-0:13 Branch: Return with expression
-0:13 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:12 move second child to first child ( temp 4-component vector of float)
+0:12 coord: direct index for structure ( temp 4-component vector of float)
+0:12 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 1.000000
+0:12 1.000000
+0:12 1.000000
+0:12 1.000000
+0:13 move second child to first child ( temp 4-component vector of float)
+0:13 direct index ( temp 4-component vector of float)
+0:13 m: direct index for structure ( temp 2-element array of 4-component vector of float)
+0:13 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 2.000000
+0:13 2.000000
+0:13 2.000000
+0:13 2.000000
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 direct index ( temp 4-component vector of float)
+0:14 m: direct index for structure ( temp 2-element array of 4-component vector of float)
+0:14 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 3.000000
+0:14 3.000000
+0:14 3.000000
+0:14 3.000000
+0:16 Branch: Return with expression
+0:16 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Function Definition: main( ( temp void)
0:8 Function Parameters:
0:? Sequence
@@ -53,96 +88,100 @@ Shader version: 450
0:8 move second child to first child ( temp 4-component vector of float)
0:8 direct index ( temp 4-component vector of float)
0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 0 (const int)
-0:? 'm[0]' (layout( location=1) in 4-component vector of float)
+0:? 'vi.m[0]' (layout( location=1) in 4-component vector of float)
0:8 move second child to first child ( temp 4-component vector of float)
0:8 direct index ( temp 4-component vector of float)
0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
-0:? 'm[1]' (layout( location=2) in 4-component vector of float)
-0:8 move second child to first child ( temp 2-component vector of uint)
-0:8 coord: direct index for structure ( temp 2-component vector of uint)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi.m[1]' (layout( location=2) in 4-component vector of float)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 coord: direct index for structure ( temp 4-component vector of float)
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 1 (const int)
-0:? 'coord' (layout( location=3) in 2-component vector of uint)
+0:? 'vi.coord' (layout( location=3) in 4-component vector of float)
0:8 move second child to first child ( temp 4-component vector of float)
0:8 b: direct index for structure ( temp 4-component vector of float)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 2 (const int)
-0:? 'b' (layout( location=4) in 4-component vector of float)
+0:? 'vi.b' (layout( location=4) in 4-component vector of float)
0:8 move second child to first child ( temp 4-component vector of float)
0:? 'e' ( temp 4-component vector of float)
0:? 'e' (layout( location=5) in 4-component vector of float)
0:8 Sequence
-0:8 move second child to first child ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:8 Function Call: @main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 move second child to first child ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:8 Function Call: @main(vf4;struct-VI-vf4[2]-vf4-vf41;vf4; ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:? 'd' ( temp 4-component vector of float)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:? 'e' ( temp 4-component vector of float)
-0:8 move second child to first child ( temp 2-element array of 4-component vector of float)
-0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:8 '@entryPointOutput' ( out structure Position{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:8 Constant:
-0:8 0 (const int)
-0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.m[0]' (layout( location=0) out 4-component vector of float)
+0:8 direct index ( temp 4-component vector of float)
+0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:8 Constant:
+0:8 0 (const int)
0:8 Constant:
0:8 0 (const int)
-0:8 move second child to first child ( temp 2-component vector of uint)
-0:8 coord: direct index for structure ( temp 2-component vector of uint)
-0:8 '@entryPointOutput' ( out structure Position{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.m[1]' (layout( location=1) out 4-component vector of float)
+0:8 direct index ( temp 4-component vector of float)
+0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:8 Constant:
+0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
-0:8 coord: direct index for structure ( temp 2-component vector of uint)
-0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.coord' ( out 4-component vector of float Position)
+0:8 coord: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 1 (const int)
0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.b' (layout( location=2) smooth out 4-component vector of float)
0:8 b: direct index for structure ( temp 4-component vector of float)
-0:8 '@entryPointOutput' ( out structure Position{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:8 Constant:
-0:8 2 (const int)
-0:8 b: direct index for structure ( temp 4-component vector of float)
-0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 2 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' ( out structure Position{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? '@entryPointOutput.coord' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.m[0]' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.m[1]' (layout( location=1) out 4-component vector of float)
+0:? '@entryPointOutput.b' (layout( location=2) smooth out 4-component vector of float)
0:? 'd' (layout( location=0) in 4-component vector of float)
-0:? 'm[0]' (layout( location=1) in 4-component vector of float)
-0:? 'm[1]' (layout( location=2) in 4-component vector of float)
-0:? 'm[0]' (layout( location=1) in 4-component vector of float)
-0:? 'm[1]' (layout( location=2) in 4-component vector of float)
-0:? 'coord' (layout( location=3) in 2-component vector of uint)
-0:? 'b' (layout( location=4) in 4-component vector of float)
+0:? 'vi.m[0]' (layout( location=1) in 4-component vector of float)
+0:? 'vi.m[1]' (layout( location=2) in 4-component vector of float)
+0:? 'vi.coord' (layout( location=3) in 4-component vector of float)
+0:? 'vi.b' (layout( location=4) in 4-component vector of float)
0:? 'e' (layout( location=5) in 4-component vector of float)
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
-0:8 Function Definition: @main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 Function Definition: @main(vf4;struct-VI-vf4[2]-vf4-vf41;vf4; ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Function Parameters:
0:8 'd' ( in 4-component vector of float)
-0:8 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 'e' ( in 4-component vector of float)
0:? Sequence
0:11 move second child to first child ( temp 4-component vector of float)
0:11 b: direct index for structure ( temp 4-component vector of float)
-0:11 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:11 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:11 Constant:
0:11 2 (const int)
0:11 add ( temp 4-component vector of float)
@@ -151,31 +190,66 @@ Shader version: 450
0:11 add ( temp 4-component vector of float)
0:11 direct index ( temp 4-component vector of float)
0:11 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:11 Constant:
0:11 0 (const int)
0:11 Constant:
0:11 1 (const int)
0:11 direct index ( temp 4-component vector of float)
0:11 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:11 Constant:
0:11 0 (const int)
0:11 Constant:
0:11 0 (const int)
0:11 Construct vec4 ( temp 4-component vector of float)
-0:11 Convert uint to float ( temp float)
-0:11 direct index ( temp uint)
-0:11 coord: direct index for structure ( temp 2-component vector of uint)
-0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:11 Constant:
-0:11 1 (const int)
+0:11 direct index ( temp float)
+0:11 coord: direct index for structure ( temp 4-component vector of float)
+0:11 'vi' ( in structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:11 Constant:
-0:11 0 (const int)
+0:11 1 (const int)
+0:11 Constant:
+0:11 0 (const int)
0:11 'd' ( in 4-component vector of float)
0:11 'e' ( in 4-component vector of float)
-0:13 Branch: Return with expression
-0:13 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:12 move second child to first child ( temp 4-component vector of float)
+0:12 coord: direct index for structure ( temp 4-component vector of float)
+0:12 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:12 Constant:
+0:12 1 (const int)
+0:12 Constant:
+0:12 1.000000
+0:12 1.000000
+0:12 1.000000
+0:12 1.000000
+0:13 move second child to first child ( temp 4-component vector of float)
+0:13 direct index ( temp 4-component vector of float)
+0:13 m: direct index for structure ( temp 2-element array of 4-component vector of float)
+0:13 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 0 (const int)
+0:13 Constant:
+0:13 2.000000
+0:13 2.000000
+0:13 2.000000
+0:13 2.000000
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 direct index ( temp 4-component vector of float)
+0:14 m: direct index for structure ( temp 2-element array of 4-component vector of float)
+0:14 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 1 (const int)
+0:14 Constant:
+0:14 3.000000
+0:14 3.000000
+0:14 3.000000
+0:14 3.000000
+0:16 Branch: Return with expression
+0:16 'local' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Function Definition: main( ( temp void)
0:8 Function Parameters:
0:? Sequence
@@ -186,124 +260,131 @@ Shader version: 450
0:8 move second child to first child ( temp 4-component vector of float)
0:8 direct index ( temp 4-component vector of float)
0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 0 (const int)
-0:? 'm[0]' (layout( location=1) in 4-component vector of float)
+0:? 'vi.m[0]' (layout( location=1) in 4-component vector of float)
0:8 move second child to first child ( temp 4-component vector of float)
0:8 direct index ( temp 4-component vector of float)
0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
-0:? 'm[1]' (layout( location=2) in 4-component vector of float)
-0:8 move second child to first child ( temp 2-component vector of uint)
-0:8 coord: direct index for structure ( temp 2-component vector of uint)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi.m[1]' (layout( location=2) in 4-component vector of float)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 coord: direct index for structure ( temp 4-component vector of float)
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 1 (const int)
-0:? 'coord' (layout( location=3) in 2-component vector of uint)
+0:? 'vi.coord' (layout( location=3) in 4-component vector of float)
0:8 move second child to first child ( temp 4-component vector of float)
0:8 b: direct index for structure ( temp 4-component vector of float)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 2 (const int)
-0:? 'b' (layout( location=4) in 4-component vector of float)
+0:? 'vi.b' (layout( location=4) in 4-component vector of float)
0:8 move second child to first child ( temp 4-component vector of float)
0:? 'e' ( temp 4-component vector of float)
0:? 'e' (layout( location=5) in 4-component vector of float)
0:8 Sequence
-0:8 move second child to first child ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:8 Function Call: @main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 move second child to first child ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:8 Function Call: @main(vf4;struct-VI-vf4[2]-vf4-vf41;vf4; ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:? 'd' ( temp 4-component vector of float)
-0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? 'vi' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:? 'e' ( temp 4-component vector of float)
-0:8 move second child to first child ( temp 2-element array of 4-component vector of float)
-0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:8 '@entryPointOutput' ( out structure Position{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:8 Constant:
-0:8 0 (const int)
-0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
-0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.m[0]' (layout( location=0) out 4-component vector of float)
+0:8 direct index ( temp 4-component vector of float)
+0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:8 Constant:
+0:8 0 (const int)
0:8 Constant:
0:8 0 (const int)
-0:8 move second child to first child ( temp 2-component vector of uint)
-0:8 coord: direct index for structure ( temp 2-component vector of uint)
-0:8 '@entryPointOutput' ( out structure Position{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.m[1]' (layout( location=1) out 4-component vector of float)
+0:8 direct index ( temp 4-component vector of float)
+0:8 m: direct index for structure ( temp 2-element array of 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
+0:8 Constant:
+0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
-0:8 coord: direct index for structure ( temp 2-component vector of uint)
-0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.coord' ( out 4-component vector of float Position)
+0:8 coord: direct index for structure ( temp 4-component vector of float)
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 1 (const int)
0:8 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.b' (layout( location=2) smooth out 4-component vector of float)
0:8 b: direct index for structure ( temp 4-component vector of float)
-0:8 '@entryPointOutput' ( out structure Position{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
-0:8 Constant:
-0:8 2 (const int)
-0:8 b: direct index for structure ( temp 4-component vector of float)
-0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:8 'flattenTemp' ( temp structure{ temp 2-element array of 4-component vector of float m, temp 4-component vector of float coord, temp 4-component vector of float b})
0:8 Constant:
0:8 2 (const int)
0:? Linker Objects
-0:? '@entryPointOutput' ( out structure Position{ temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
+0:? '@entryPointOutput.coord' ( out 4-component vector of float Position)
+0:? '@entryPointOutput.m[0]' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.m[1]' (layout( location=1) out 4-component vector of float)
+0:? '@entryPointOutput.b' (layout( location=2) smooth out 4-component vector of float)
0:? 'd' (layout( location=0) in 4-component vector of float)
-0:? 'm[0]' (layout( location=1) in 4-component vector of float)
-0:? 'm[1]' (layout( location=2) in 4-component vector of float)
-0:? 'm[0]' (layout( location=1) in 4-component vector of float)
-0:? 'm[1]' (layout( location=2) in 4-component vector of float)
-0:? 'coord' (layout( location=3) in 2-component vector of uint)
-0:? 'b' (layout( location=4) in 4-component vector of float)
+0:? 'vi.m[0]' (layout( location=1) in 4-component vector of float)
+0:? 'vi.m[1]' (layout( location=2) in 4-component vector of float)
+0:? 'vi.coord' (layout( location=3) in 4-component vector of float)
+0:? 'vi.b' (layout( location=4) in 4-component vector of float)
0:? 'e' (layout( location=5) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 92
+// Generated by (magic number): 80002
+// Id's are bound by 94
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 48 51 54 58 62 66 78
+ EntryPoint Vertex 4 "main" 55 58 61 64 67 71 82 85 88 91
+ Source HLSL 500
Name 4 "main"
- Name 13 "VI"
- MemberName 13(VI) 0 "m"
- MemberName 13(VI) 1 "coord"
- MemberName 13(VI) 2 "b"
- Name 19 "@main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4;"
- Name 16 "d"
- Name 17 "vi"
- Name 18 "e"
- Name 21 "local"
- Name 46 "d"
- Name 48 "d"
- Name 50 "vi"
- Name 51 "m[0]"
- Name 54 "m[1]"
- Name 58 "coord"
- Name 62 "b"
- Name 65 "e"
- Name 66 "e"
- Name 68 "flattenTemp"
- Name 69 "param"
- Name 71 "param"
- Name 73 "param"
- Name 76 "VI"
- MemberName 76(VI) 0 "m"
- MemberName 76(VI) 1 "coord"
- MemberName 76(VI) 2 "b"
- Name 78 "@entryPointOutput"
- Decorate 48(d) Location 0
- Decorate 51(m[0]) Location 1
- Decorate 54(m[1]) Location 2
- Decorate 58(coord) Location 3
- Decorate 62(b) Location 4
- Decorate 66(e) Location 5
- Decorate 78(@entryPointOutput) BuiltIn Position
+ Name 12 "VI"
+ MemberName 12(VI) 0 "m"
+ MemberName 12(VI) 1 "coord"
+ MemberName 12(VI) 2 "b"
+ Name 18 "@main(vf4;struct-VI-vf4[2]-vf4-vf41;vf4;"
+ Name 15 "d"
+ Name 16 "vi"
+ Name 17 "e"
+ Name 20 "local"
+ Name 53 "d"
+ Name 55 "d"
+ Name 57 "vi"
+ Name 58 "vi.m[0]"
+ Name 61 "vi.m[1]"
+ Name 64 "vi.coord"
+ Name 67 "vi.b"
+ Name 70 "e"
+ Name 71 "e"
+ Name 73 "flattenTemp"
+ Name 74 "param"
+ Name 76 "param"
+ Name 78 "param"
+ Name 82 "@entryPointOutput.m[0]"
+ Name 85 "@entryPointOutput.m[1]"
+ Name 88 "@entryPointOutput.coord"
+ Name 91 "@entryPointOutput.b"
+ Decorate 55(d) Location 0
+ Decorate 58(vi.m[0]) Location 1
+ Decorate 61(vi.m[1]) Location 2
+ Decorate 64(vi.coord) Location 3
+ Decorate 67(vi.b) Location 4
+ Decorate 71(e) Location 5
+ Decorate 82(@entryPointOutput.m[0]) Location 0
+ Decorate 85(@entryPointOutput.m[1]) Location 1
+ Decorate 88(@entryPointOutput.coord) BuiltIn Position
+ Decorate 91(@entryPointOutput.b) Location 2
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -312,101 +393,107 @@ Shader version: 450
9: TypeInt 32 0
10: 9(int) Constant 2
11: TypeArray 7(fvec4) 10
- 12: TypeVector 9(int) 2
- 13(VI): TypeStruct 11 12(ivec2) 7(fvec4)
- 14: TypePointer Function 13(VI)
- 15: TypeFunction 13(VI) 8(ptr) 14(ptr) 8(ptr)
- 22: TypeInt 32 1
- 23: 22(int) Constant 2
- 24: 22(int) Constant 0
- 25: 22(int) Constant 1
- 31: 9(int) Constant 0
- 32: TypePointer Function 9(int)
- 47: TypePointer Input 7(fvec4)
- 48(d): 47(ptr) Variable Input
- 51(m[0]): 47(ptr) Variable Input
- 54(m[1]): 47(ptr) Variable Input
- 57: TypePointer Input 12(ivec2)
- 58(coord): 57(ptr) Variable Input
- 60: TypePointer Function 12(ivec2)
- 62(b): 47(ptr) Variable Input
- 66(e): 47(ptr) Variable Input
- 76(VI): TypeStruct 11 12(ivec2) 7(fvec4)
- 77: TypePointer Output 76(VI)
-78(@entryPointOutput): 77(ptr) Variable Output
- 79: TypePointer Function 11
- 82: TypePointer Output 11
- 86: TypePointer Output 12(ivec2)
- 90: TypePointer Output 7(fvec4)
+ 12(VI): TypeStruct 11 7(fvec4) 7(fvec4)
+ 13: TypePointer Function 12(VI)
+ 14: TypeFunction 12(VI) 8(ptr) 13(ptr) 8(ptr)
+ 21: TypeInt 32 1
+ 22: 21(int) Constant 2
+ 23: 21(int) Constant 0
+ 24: 21(int) Constant 1
+ 30: 9(int) Constant 0
+ 31: TypePointer Function 6(float)
+ 41: 6(float) Constant 1065353216
+ 42: 7(fvec4) ConstantComposite 41 41 41 41
+ 44: 6(float) Constant 1073741824
+ 45: 7(fvec4) ConstantComposite 44 44 44 44
+ 47: 6(float) Constant 1077936128
+ 48: 7(fvec4) ConstantComposite 47 47 47 47
+ 54: TypePointer Input 7(fvec4)
+ 55(d): 54(ptr) Variable Input
+ 58(vi.m[0]): 54(ptr) Variable Input
+ 61(vi.m[1]): 54(ptr) Variable Input
+ 64(vi.coord): 54(ptr) Variable Input
+ 67(vi.b): 54(ptr) Variable Input
+ 71(e): 54(ptr) Variable Input
+ 81: TypePointer Output 7(fvec4)
+82(@entryPointOutput.m[0]): 81(ptr) Variable Output
+85(@entryPointOutput.m[1]): 81(ptr) Variable Output
+88(@entryPointOutput.coord): 81(ptr) Variable Output
+91(@entryPointOutput.b): 81(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 46(d): 8(ptr) Variable Function
- 50(vi): 14(ptr) Variable Function
- 65(e): 8(ptr) Variable Function
- 68(flattenTemp): 14(ptr) Variable Function
- 69(param): 8(ptr) Variable Function
- 71(param): 14(ptr) Variable Function
- 73(param): 8(ptr) Variable Function
- 49: 7(fvec4) Load 48(d)
- Store 46(d) 49
- 52: 7(fvec4) Load 51(m[0])
- 53: 8(ptr) AccessChain 50(vi) 24 24
- Store 53 52
- 55: 7(fvec4) Load 54(m[1])
- 56: 8(ptr) AccessChain 50(vi) 24 25
- Store 56 55
- 59: 12(ivec2) Load 58(coord)
- 61: 60(ptr) AccessChain 50(vi) 25
- Store 61 59
- 63: 7(fvec4) Load 62(b)
- 64: 8(ptr) AccessChain 50(vi) 23
- Store 64 63
- 67: 7(fvec4) Load 66(e)
- Store 65(e) 67
- 70: 7(fvec4) Load 46(d)
- Store 69(param) 70
- 72: 13(VI) Load 50(vi)
- Store 71(param) 72
- 74: 7(fvec4) Load 65(e)
- Store 73(param) 74
- 75: 13(VI) FunctionCall 19(@main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4;) 69(param) 71(param) 73(param)
- Store 68(flattenTemp) 75
- 80: 79(ptr) AccessChain 68(flattenTemp) 24
- 81: 11 Load 80
- 83: 82(ptr) AccessChain 78(@entryPointOutput) 24
- Store 83 81
- 84: 60(ptr) AccessChain 68(flattenTemp) 25
- 85: 12(ivec2) Load 84
- 87: 86(ptr) AccessChain 78(@entryPointOutput) 25
- Store 87 85
- 88: 8(ptr) AccessChain 68(flattenTemp) 23
- 89: 7(fvec4) Load 88
- 91: 90(ptr) AccessChain 78(@entryPointOutput) 23
- Store 91 89
+ 53(d): 8(ptr) Variable Function
+ 57(vi): 13(ptr) Variable Function
+ 70(e): 8(ptr) Variable Function
+ 73(flattenTemp): 13(ptr) Variable Function
+ 74(param): 8(ptr) Variable Function
+ 76(param): 13(ptr) Variable Function
+ 78(param): 8(ptr) Variable Function
+ 56: 7(fvec4) Load 55(d)
+ Store 53(d) 56
+ 59: 7(fvec4) Load 58(vi.m[0])
+ 60: 8(ptr) AccessChain 57(vi) 23 23
+ Store 60 59
+ 62: 7(fvec4) Load 61(vi.m[1])
+ 63: 8(ptr) AccessChain 57(vi) 23 24
+ Store 63 62
+ 65: 7(fvec4) Load 64(vi.coord)
+ 66: 8(ptr) AccessChain 57(vi) 24
+ Store 66 65
+ 68: 7(fvec4) Load 67(vi.b)
+ 69: 8(ptr) AccessChain 57(vi) 22
+ Store 69 68
+ 72: 7(fvec4) Load 71(e)
+ Store 70(e) 72
+ 75: 7(fvec4) Load 53(d)
+ Store 74(param) 75
+ 77: 12(VI) Load 57(vi)
+ Store 76(param) 77
+ 79: 7(fvec4) Load 70(e)
+ Store 78(param) 79
+ 80: 12(VI) FunctionCall 18(@main(vf4;struct-VI-vf4[2]-vf4-vf41;vf4;) 74(param) 76(param) 78(param)
+ Store 73(flattenTemp) 80
+ 83: 8(ptr) AccessChain 73(flattenTemp) 23 23
+ 84: 7(fvec4) Load 83
+ Store 82(@entryPointOutput.m[0]) 84
+ 86: 8(ptr) AccessChain 73(flattenTemp) 23 24
+ 87: 7(fvec4) Load 86
+ Store 85(@entryPointOutput.m[1]) 87
+ 89: 8(ptr) AccessChain 73(flattenTemp) 24
+ 90: 7(fvec4) Load 89
+ Store 88(@entryPointOutput.coord) 90
+ 92: 8(ptr) AccessChain 73(flattenTemp) 22
+ 93: 7(fvec4) Load 92
+ Store 91(@entryPointOutput.b) 93
Return
FunctionEnd
-19(@main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4;): 13(VI) Function None 15
- 16(d): 8(ptr) FunctionParameter
- 17(vi): 14(ptr) FunctionParameter
- 18(e): 8(ptr) FunctionParameter
- 20: Label
- 21(local): 14(ptr) Variable Function
- 26: 8(ptr) AccessChain 17(vi) 24 25
- 27: 7(fvec4) Load 26
- 28: 8(ptr) AccessChain 17(vi) 24 24
- 29: 7(fvec4) Load 28
- 30: 7(fvec4) FAdd 27 29
- 33: 32(ptr) AccessChain 17(vi) 25 31
- 34: 9(int) Load 33
- 35: 6(float) ConvertUToF 34
- 36: 7(fvec4) CompositeConstruct 35 35 35 35
- 37: 7(fvec4) FAdd 30 36
- 38: 7(fvec4) Load 16(d)
+18(@main(vf4;struct-VI-vf4[2]-vf4-vf41;vf4;): 12(VI) Function None 14
+ 15(d): 8(ptr) FunctionParameter
+ 16(vi): 13(ptr) FunctionParameter
+ 17(e): 8(ptr) FunctionParameter
+ 19: Label
+ 20(local): 13(ptr) Variable Function
+ 25: 8(ptr) AccessChain 16(vi) 23 24
+ 26: 7(fvec4) Load 25
+ 27: 8(ptr) AccessChain 16(vi) 23 23
+ 28: 7(fvec4) Load 27
+ 29: 7(fvec4) FAdd 26 28
+ 32: 31(ptr) AccessChain 16(vi) 24 30
+ 33: 6(float) Load 32
+ 34: 7(fvec4) CompositeConstruct 33 33 33 33
+ 35: 7(fvec4) FAdd 29 34
+ 36: 7(fvec4) Load 15(d)
+ 37: 7(fvec4) FAdd 35 36
+ 38: 7(fvec4) Load 17(e)
39: 7(fvec4) FAdd 37 38
- 40: 7(fvec4) Load 18(e)
- 41: 7(fvec4) FAdd 39 40
- 42: 8(ptr) AccessChain 21(local) 23
- Store 42 41
- 43: 13(VI) Load 21(local)
- ReturnValue 43
+ 40: 8(ptr) AccessChain 20(local) 22
+ Store 40 39
+ 43: 8(ptr) AccessChain 20(local) 24
+ Store 43 42
+ 46: 8(ptr) AccessChain 20(local) 23 23
+ Store 46 45
+ 49: 8(ptr) AccessChain 20(local) 23 24
+ Store 49 48
+ 50: 12(VI) Load 20(local)
+ ReturnValue 50
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.subpass.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.subpass.frag.out
new file mode 100644
index 00000000000..470699a7374
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.subpass.frag.out
@@ -0,0 +1,777 @@
+hlsl.subpass.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:68 Function Definition: @main( ( temp 4-component vector of float)
+0:68 Function Parameters:
+0:? Sequence
+0:69 Sequence
+0:69 move second child to first child ( temp 4-component vector of float)
+0:69 'result00' ( temp 4-component vector of float)
+0:69 subpassLoad ( temp 4-component vector of float)
+0:69 'subpass_f4' (layout( binding=1 input_attachment_index=1) uniform subpassInput)
+0:70 Sequence
+0:70 move second child to first child ( temp 4-component vector of int)
+0:70 'result01' ( temp 4-component vector of int)
+0:70 subpassLoad ( temp 4-component vector of int)
+0:70 'subpass_i4' ( uniform isubpassInput)
+0:71 Sequence
+0:71 move second child to first child ( temp 4-component vector of uint)
+0:71 'result02' ( temp 4-component vector of uint)
+0:71 subpassLoad ( temp 4-component vector of uint)
+0:71 'subpass_u4' ( uniform usubpassInput)
+0:73 Sequence
+0:73 move second child to first child ( temp 4-component vector of float)
+0:73 'result10' ( temp 4-component vector of float)
+0:73 subpassLoadMS ( temp 4-component vector of float)
+0:73 'subpass_ms_f4' ( uniform subpassInputMS)
+0:73 Constant:
+0:73 3 (const int)
+0:74 Sequence
+0:74 move second child to first child ( temp 4-component vector of int)
+0:74 'result11' ( temp 4-component vector of int)
+0:74 subpassLoadMS ( temp 4-component vector of int)
+0:74 'subpass_ms_i4' ( uniform isubpassInputMS)
+0:74 Constant:
+0:74 3 (const int)
+0:75 Sequence
+0:75 move second child to first child ( temp 4-component vector of uint)
+0:75 'result12' ( temp 4-component vector of uint)
+0:75 subpassLoadMS ( temp 4-component vector of uint)
+0:75 'subpass_ms_u4' ( uniform usubpassInputMS)
+0:75 Constant:
+0:75 3 (const int)
+0:77 Sequence
+0:77 move second child to first child ( temp 3-component vector of float)
+0:77 'result20' ( temp 3-component vector of float)
+0:77 Construct vec3 ( temp 3-component vector of float)
+0:77 subpassLoad ( temp 4-component vector of float)
+0:77 'subpass_f3' ( uniform subpassInput)
+0:78 Sequence
+0:78 move second child to first child ( temp 3-component vector of int)
+0:78 'result21' ( temp 3-component vector of int)
+0:78 Construct ivec3 ( temp 3-component vector of int)
+0:78 subpassLoad ( temp 4-component vector of int)
+0:78 'subpass_i3' ( uniform isubpassInput)
+0:79 Sequence
+0:79 move second child to first child ( temp 3-component vector of uint)
+0:79 'result22' ( temp 3-component vector of uint)
+0:79 Construct uvec3 ( temp 3-component vector of uint)
+0:79 subpassLoad ( temp 4-component vector of uint)
+0:79 'subpass_u3' ( uniform usubpassInput)
+0:81 Sequence
+0:81 move second child to first child ( temp 3-component vector of float)
+0:81 'result30' ( temp 3-component vector of float)
+0:81 Construct vec3 ( temp 3-component vector of float)
+0:81 subpassLoadMS ( temp 4-component vector of float)
+0:81 'subpass_ms_f3' ( uniform subpassInputMS)
+0:81 Constant:
+0:81 3 (const int)
+0:82 Sequence
+0:82 move second child to first child ( temp 3-component vector of int)
+0:82 'result31' ( temp 3-component vector of int)
+0:82 Construct ivec3 ( temp 3-component vector of int)
+0:82 subpassLoadMS ( temp 4-component vector of int)
+0:82 'subpass_ms_i3' ( uniform isubpassInputMS)
+0:82 Constant:
+0:82 3 (const int)
+0:83 Sequence
+0:83 move second child to first child ( temp 3-component vector of uint)
+0:83 'result32' ( temp 3-component vector of uint)
+0:83 Construct uvec3 ( temp 3-component vector of uint)
+0:83 subpassLoadMS ( temp 4-component vector of uint)
+0:83 'subpass_ms_u3' ( uniform usubpassInputMS)
+0:83 Constant:
+0:83 3 (const int)
+0:85 Sequence
+0:85 move second child to first child ( temp 2-component vector of float)
+0:85 'result40' ( temp 2-component vector of float)
+0:85 Construct vec2 ( temp 2-component vector of float)
+0:85 subpassLoad ( temp 4-component vector of float)
+0:85 'subpass_f2' ( uniform subpassInput)
+0:86 Sequence
+0:86 move second child to first child ( temp 2-component vector of int)
+0:86 'result41' ( temp 2-component vector of int)
+0:86 Construct ivec2 ( temp 2-component vector of int)
+0:86 subpassLoad ( temp 4-component vector of int)
+0:86 'subpass_i2' ( uniform isubpassInput)
+0:87 Sequence
+0:87 move second child to first child ( temp 2-component vector of uint)
+0:87 'result42' ( temp 2-component vector of uint)
+0:87 Construct uvec2 ( temp 2-component vector of uint)
+0:87 subpassLoad ( temp 4-component vector of uint)
+0:87 'subpass_u2' ( uniform usubpassInput)
+0:89 Sequence
+0:89 move second child to first child ( temp 2-component vector of float)
+0:89 'result50' ( temp 2-component vector of float)
+0:89 Construct vec2 ( temp 2-component vector of float)
+0:89 subpassLoadMS ( temp 4-component vector of float)
+0:89 'subpass_ms_f2' ( uniform subpassInputMS)
+0:89 Constant:
+0:89 2 (const int)
+0:90 Sequence
+0:90 move second child to first child ( temp 2-component vector of int)
+0:90 'result51' ( temp 2-component vector of int)
+0:90 Construct ivec2 ( temp 2-component vector of int)
+0:90 subpassLoadMS ( temp 4-component vector of int)
+0:90 'subpass_ms_i2' ( uniform isubpassInputMS)
+0:90 Constant:
+0:90 2 (const int)
+0:91 Sequence
+0:91 move second child to first child ( temp 2-component vector of uint)
+0:91 'result52' ( temp 2-component vector of uint)
+0:91 Construct uvec2 ( temp 2-component vector of uint)
+0:91 subpassLoadMS ( temp 4-component vector of uint)
+0:91 'subpass_ms_u2' ( uniform usubpassInputMS)
+0:91 Constant:
+0:91 2 (const int)
+0:93 Sequence
+0:93 move second child to first child ( temp float)
+0:93 'result60' ( temp float)
+0:93 Construct float ( temp float)
+0:93 subpassLoad ( temp 4-component vector of float)
+0:93 'subpass_f' ( uniform subpassInput)
+0:94 Sequence
+0:94 move second child to first child ( temp int)
+0:94 'result61' ( temp int)
+0:94 Construct int ( temp int)
+0:94 subpassLoad ( temp 4-component vector of int)
+0:94 'subpass_i' ( uniform isubpassInput)
+0:95 Sequence
+0:95 move second child to first child ( temp uint)
+0:95 'result62' ( temp uint)
+0:95 Construct uint ( temp uint)
+0:95 subpassLoad ( temp 4-component vector of uint)
+0:95 'subpass_u' ( uniform usubpassInput)
+0:97 Sequence
+0:97 move second child to first child ( temp float)
+0:97 'result70' ( temp float)
+0:97 Construct float ( temp float)
+0:97 subpassLoadMS ( temp 4-component vector of float)
+0:97 'subpass_ms_f' ( uniform subpassInputMS)
+0:97 Constant:
+0:97 2 (const int)
+0:98 Sequence
+0:98 move second child to first child ( temp int)
+0:98 'result71' ( temp int)
+0:98 Construct int ( temp int)
+0:98 subpassLoadMS ( temp 4-component vector of int)
+0:98 'subpass_ms_i' ( uniform isubpassInputMS)
+0:98 Constant:
+0:98 2 (const int)
+0:99 Sequence
+0:99 move second child to first child ( temp uint)
+0:99 'result72' ( temp uint)
+0:99 Construct uint ( temp uint)
+0:99 subpassLoadMS ( temp 4-component vector of uint)
+0:99 'subpass_ms_u' ( uniform usubpassInputMS)
+0:99 Constant:
+0:99 2 (const int)
+0:101 Sequence
+0:101 move second child to first child ( temp 4-component vector of float)
+0:101 'result73' ( temp 4-component vector of float)
+0:101 subpassLoad ( temp 4-component vector of float)
+0:101 'subpass_2' ( uniform subpassInput)
+0:112 Branch: Return with expression
+0:112 Constant:
+0:112 0.000000
+0:112 0.000000
+0:112 0.000000
+0:112 0.000000
+0:68 Function Definition: main( ( temp void)
+0:68 Function Parameters:
+0:? Sequence
+0:68 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:68 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'subpass_f4' (layout( binding=1 input_attachment_index=1) uniform subpassInput)
+0:? 'subpass_i4' ( uniform isubpassInput)
+0:? 'subpass_u4' ( uniform usubpassInput)
+0:? 'subpass_ms_f4' ( uniform subpassInputMS)
+0:? 'subpass_ms_i4' ( uniform isubpassInputMS)
+0:? 'subpass_ms_u4' ( uniform usubpassInputMS)
+0:? 'subpass_f3' ( uniform subpassInput)
+0:? 'subpass_i3' ( uniform isubpassInput)
+0:? 'subpass_u3' ( uniform usubpassInput)
+0:? 'subpass_ms_f3' ( uniform subpassInputMS)
+0:? 'subpass_ms_i3' ( uniform isubpassInputMS)
+0:? 'subpass_ms_u3' ( uniform usubpassInputMS)
+0:? 'subpass_f2' ( uniform subpassInput)
+0:? 'subpass_i2' ( uniform isubpassInput)
+0:? 'subpass_u2' ( uniform usubpassInput)
+0:? 'subpass_ms_f2' ( uniform subpassInputMS)
+0:? 'subpass_ms_i2' ( uniform isubpassInputMS)
+0:? 'subpass_ms_u2' ( uniform usubpassInputMS)
+0:? 'subpass_f' ( uniform subpassInput)
+0:? 'subpass_i' ( uniform isubpassInput)
+0:? 'subpass_u' ( uniform usubpassInput)
+0:? 'subpass_ms_f' ( uniform subpassInputMS)
+0:? 'subpass_ms_i' ( uniform isubpassInputMS)
+0:? 'subpass_ms_u' ( uniform usubpassInputMS)
+0:? 'subpass_2' ( uniform subpassInput)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:68 Function Definition: @main( ( temp 4-component vector of float)
+0:68 Function Parameters:
+0:? Sequence
+0:69 Sequence
+0:69 move second child to first child ( temp 4-component vector of float)
+0:69 'result00' ( temp 4-component vector of float)
+0:69 subpassLoad ( temp 4-component vector of float)
+0:69 'subpass_f4' (layout( binding=1 input_attachment_index=1) uniform subpassInput)
+0:70 Sequence
+0:70 move second child to first child ( temp 4-component vector of int)
+0:70 'result01' ( temp 4-component vector of int)
+0:70 subpassLoad ( temp 4-component vector of int)
+0:70 'subpass_i4' ( uniform isubpassInput)
+0:71 Sequence
+0:71 move second child to first child ( temp 4-component vector of uint)
+0:71 'result02' ( temp 4-component vector of uint)
+0:71 subpassLoad ( temp 4-component vector of uint)
+0:71 'subpass_u4' ( uniform usubpassInput)
+0:73 Sequence
+0:73 move second child to first child ( temp 4-component vector of float)
+0:73 'result10' ( temp 4-component vector of float)
+0:73 subpassLoadMS ( temp 4-component vector of float)
+0:73 'subpass_ms_f4' ( uniform subpassInputMS)
+0:73 Constant:
+0:73 3 (const int)
+0:74 Sequence
+0:74 move second child to first child ( temp 4-component vector of int)
+0:74 'result11' ( temp 4-component vector of int)
+0:74 subpassLoadMS ( temp 4-component vector of int)
+0:74 'subpass_ms_i4' ( uniform isubpassInputMS)
+0:74 Constant:
+0:74 3 (const int)
+0:75 Sequence
+0:75 move second child to first child ( temp 4-component vector of uint)
+0:75 'result12' ( temp 4-component vector of uint)
+0:75 subpassLoadMS ( temp 4-component vector of uint)
+0:75 'subpass_ms_u4' ( uniform usubpassInputMS)
+0:75 Constant:
+0:75 3 (const int)
+0:77 Sequence
+0:77 move second child to first child ( temp 3-component vector of float)
+0:77 'result20' ( temp 3-component vector of float)
+0:77 Construct vec3 ( temp 3-component vector of float)
+0:77 subpassLoad ( temp 4-component vector of float)
+0:77 'subpass_f3' ( uniform subpassInput)
+0:78 Sequence
+0:78 move second child to first child ( temp 3-component vector of int)
+0:78 'result21' ( temp 3-component vector of int)
+0:78 Construct ivec3 ( temp 3-component vector of int)
+0:78 subpassLoad ( temp 4-component vector of int)
+0:78 'subpass_i3' ( uniform isubpassInput)
+0:79 Sequence
+0:79 move second child to first child ( temp 3-component vector of uint)
+0:79 'result22' ( temp 3-component vector of uint)
+0:79 Construct uvec3 ( temp 3-component vector of uint)
+0:79 subpassLoad ( temp 4-component vector of uint)
+0:79 'subpass_u3' ( uniform usubpassInput)
+0:81 Sequence
+0:81 move second child to first child ( temp 3-component vector of float)
+0:81 'result30' ( temp 3-component vector of float)
+0:81 Construct vec3 ( temp 3-component vector of float)
+0:81 subpassLoadMS ( temp 4-component vector of float)
+0:81 'subpass_ms_f3' ( uniform subpassInputMS)
+0:81 Constant:
+0:81 3 (const int)
+0:82 Sequence
+0:82 move second child to first child ( temp 3-component vector of int)
+0:82 'result31' ( temp 3-component vector of int)
+0:82 Construct ivec3 ( temp 3-component vector of int)
+0:82 subpassLoadMS ( temp 4-component vector of int)
+0:82 'subpass_ms_i3' ( uniform isubpassInputMS)
+0:82 Constant:
+0:82 3 (const int)
+0:83 Sequence
+0:83 move second child to first child ( temp 3-component vector of uint)
+0:83 'result32' ( temp 3-component vector of uint)
+0:83 Construct uvec3 ( temp 3-component vector of uint)
+0:83 subpassLoadMS ( temp 4-component vector of uint)
+0:83 'subpass_ms_u3' ( uniform usubpassInputMS)
+0:83 Constant:
+0:83 3 (const int)
+0:85 Sequence
+0:85 move second child to first child ( temp 2-component vector of float)
+0:85 'result40' ( temp 2-component vector of float)
+0:85 Construct vec2 ( temp 2-component vector of float)
+0:85 subpassLoad ( temp 4-component vector of float)
+0:85 'subpass_f2' ( uniform subpassInput)
+0:86 Sequence
+0:86 move second child to first child ( temp 2-component vector of int)
+0:86 'result41' ( temp 2-component vector of int)
+0:86 Construct ivec2 ( temp 2-component vector of int)
+0:86 subpassLoad ( temp 4-component vector of int)
+0:86 'subpass_i2' ( uniform isubpassInput)
+0:87 Sequence
+0:87 move second child to first child ( temp 2-component vector of uint)
+0:87 'result42' ( temp 2-component vector of uint)
+0:87 Construct uvec2 ( temp 2-component vector of uint)
+0:87 subpassLoad ( temp 4-component vector of uint)
+0:87 'subpass_u2' ( uniform usubpassInput)
+0:89 Sequence
+0:89 move second child to first child ( temp 2-component vector of float)
+0:89 'result50' ( temp 2-component vector of float)
+0:89 Construct vec2 ( temp 2-component vector of float)
+0:89 subpassLoadMS ( temp 4-component vector of float)
+0:89 'subpass_ms_f2' ( uniform subpassInputMS)
+0:89 Constant:
+0:89 2 (const int)
+0:90 Sequence
+0:90 move second child to first child ( temp 2-component vector of int)
+0:90 'result51' ( temp 2-component vector of int)
+0:90 Construct ivec2 ( temp 2-component vector of int)
+0:90 subpassLoadMS ( temp 4-component vector of int)
+0:90 'subpass_ms_i2' ( uniform isubpassInputMS)
+0:90 Constant:
+0:90 2 (const int)
+0:91 Sequence
+0:91 move second child to first child ( temp 2-component vector of uint)
+0:91 'result52' ( temp 2-component vector of uint)
+0:91 Construct uvec2 ( temp 2-component vector of uint)
+0:91 subpassLoadMS ( temp 4-component vector of uint)
+0:91 'subpass_ms_u2' ( uniform usubpassInputMS)
+0:91 Constant:
+0:91 2 (const int)
+0:93 Sequence
+0:93 move second child to first child ( temp float)
+0:93 'result60' ( temp float)
+0:93 Construct float ( temp float)
+0:93 subpassLoad ( temp 4-component vector of float)
+0:93 'subpass_f' ( uniform subpassInput)
+0:94 Sequence
+0:94 move second child to first child ( temp int)
+0:94 'result61' ( temp int)
+0:94 Construct int ( temp int)
+0:94 subpassLoad ( temp 4-component vector of int)
+0:94 'subpass_i' ( uniform isubpassInput)
+0:95 Sequence
+0:95 move second child to first child ( temp uint)
+0:95 'result62' ( temp uint)
+0:95 Construct uint ( temp uint)
+0:95 subpassLoad ( temp 4-component vector of uint)
+0:95 'subpass_u' ( uniform usubpassInput)
+0:97 Sequence
+0:97 move second child to first child ( temp float)
+0:97 'result70' ( temp float)
+0:97 Construct float ( temp float)
+0:97 subpassLoadMS ( temp 4-component vector of float)
+0:97 'subpass_ms_f' ( uniform subpassInputMS)
+0:97 Constant:
+0:97 2 (const int)
+0:98 Sequence
+0:98 move second child to first child ( temp int)
+0:98 'result71' ( temp int)
+0:98 Construct int ( temp int)
+0:98 subpassLoadMS ( temp 4-component vector of int)
+0:98 'subpass_ms_i' ( uniform isubpassInputMS)
+0:98 Constant:
+0:98 2 (const int)
+0:99 Sequence
+0:99 move second child to first child ( temp uint)
+0:99 'result72' ( temp uint)
+0:99 Construct uint ( temp uint)
+0:99 subpassLoadMS ( temp 4-component vector of uint)
+0:99 'subpass_ms_u' ( uniform usubpassInputMS)
+0:99 Constant:
+0:99 2 (const int)
+0:101 Sequence
+0:101 move second child to first child ( temp 4-component vector of float)
+0:101 'result73' ( temp 4-component vector of float)
+0:101 subpassLoad ( temp 4-component vector of float)
+0:101 'subpass_2' ( uniform subpassInput)
+0:112 Branch: Return with expression
+0:112 Constant:
+0:112 0.000000
+0:112 0.000000
+0:112 0.000000
+0:112 0.000000
+0:68 Function Definition: main( ( temp void)
+0:68 Function Parameters:
+0:? Sequence
+0:68 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:68 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'subpass_f4' (layout( binding=1 input_attachment_index=1) uniform subpassInput)
+0:? 'subpass_i4' ( uniform isubpassInput)
+0:? 'subpass_u4' ( uniform usubpassInput)
+0:? 'subpass_ms_f4' ( uniform subpassInputMS)
+0:? 'subpass_ms_i4' ( uniform isubpassInputMS)
+0:? 'subpass_ms_u4' ( uniform usubpassInputMS)
+0:? 'subpass_f3' ( uniform subpassInput)
+0:? 'subpass_i3' ( uniform isubpassInput)
+0:? 'subpass_u3' ( uniform usubpassInput)
+0:? 'subpass_ms_f3' ( uniform subpassInputMS)
+0:? 'subpass_ms_i3' ( uniform isubpassInputMS)
+0:? 'subpass_ms_u3' ( uniform usubpassInputMS)
+0:? 'subpass_f2' ( uniform subpassInput)
+0:? 'subpass_i2' ( uniform isubpassInput)
+0:? 'subpass_u2' ( uniform usubpassInput)
+0:? 'subpass_ms_f2' ( uniform subpassInputMS)
+0:? 'subpass_ms_i2' ( uniform isubpassInputMS)
+0:? 'subpass_ms_u2' ( uniform usubpassInputMS)
+0:? 'subpass_f' ( uniform subpassInput)
+0:? 'subpass_i' ( uniform isubpassInput)
+0:? 'subpass_u' ( uniform usubpassInput)
+0:? 'subpass_ms_f' ( uniform subpassInputMS)
+0:? 'subpass_ms_i' ( uniform isubpassInputMS)
+0:? 'subpass_ms_u' ( uniform usubpassInputMS)
+0:? 'subpass_2' ( uniform subpassInput)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 204
+
+ Capability Shader
+ Capability InputAttachment
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 202
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 12 "result00"
+ Name 15 "subpass_f4"
+ Name 24 "result01"
+ Name 27 "subpass_i4"
+ Name 33 "result02"
+ Name 36 "subpass_u4"
+ Name 39 "result10"
+ Name 42 "subpass_ms_f4"
+ Name 46 "result11"
+ Name 49 "subpass_ms_i4"
+ Name 52 "result12"
+ Name 55 "subpass_ms_u4"
+ Name 60 "result20"
+ Name 61 "subpass_f3"
+ Name 70 "result21"
+ Name 71 "subpass_i3"
+ Name 80 "result22"
+ Name 81 "subpass_u3"
+ Name 88 "result30"
+ Name 89 "subpass_ms_f3"
+ Name 96 "result31"
+ Name 97 "subpass_ms_i3"
+ Name 104 "result32"
+ Name 105 "subpass_ms_u3"
+ Name 114 "result40"
+ Name 115 "subpass_f2"
+ Name 122 "result41"
+ Name 123 "subpass_i2"
+ Name 131 "result42"
+ Name 132 "subpass_u2"
+ Name 138 "result50"
+ Name 139 "subpass_ms_f2"
+ Name 146 "result51"
+ Name 147 "subpass_ms_i2"
+ Name 153 "result52"
+ Name 154 "subpass_ms_u2"
+ Name 161 "result60"
+ Name 162 "subpass_f"
+ Name 167 "result61"
+ Name 168 "subpass_i"
+ Name 173 "result62"
+ Name 174 "subpass_u"
+ Name 178 "result70"
+ Name 179 "subpass_ms_f"
+ Name 183 "result71"
+ Name 184 "subpass_ms_i"
+ Name 188 "result72"
+ Name 189 "subpass_ms_u"
+ Name 193 "result73"
+ Name 194 "subpass_2"
+ Name 202 "@entryPointOutput"
+ Decorate 15(subpass_f4) DescriptorSet 0
+ Decorate 15(subpass_f4) Binding 1
+ Decorate 15(subpass_f4) InputAttachmentIndex 1
+ Decorate 27(subpass_i4) DescriptorSet 0
+ Decorate 27(subpass_i4) InputAttachmentIndex 2
+ Decorate 36(subpass_u4) DescriptorSet 0
+ Decorate 36(subpass_u4) InputAttachmentIndex 3
+ Decorate 42(subpass_ms_f4) DescriptorSet 0
+ Decorate 42(subpass_ms_f4) InputAttachmentIndex 4
+ Decorate 49(subpass_ms_i4) DescriptorSet 0
+ Decorate 49(subpass_ms_i4) InputAttachmentIndex 5
+ Decorate 55(subpass_ms_u4) DescriptorSet 0
+ Decorate 55(subpass_ms_u4) InputAttachmentIndex 6
+ Decorate 61(subpass_f3) DescriptorSet 0
+ Decorate 61(subpass_f3) InputAttachmentIndex 1
+ Decorate 71(subpass_i3) DescriptorSet 0
+ Decorate 71(subpass_i3) InputAttachmentIndex 2
+ Decorate 81(subpass_u3) DescriptorSet 0
+ Decorate 81(subpass_u3) InputAttachmentIndex 3
+ Decorate 89(subpass_ms_f3) DescriptorSet 0
+ Decorate 89(subpass_ms_f3) InputAttachmentIndex 4
+ Decorate 97(subpass_ms_i3) DescriptorSet 0
+ Decorate 97(subpass_ms_i3) InputAttachmentIndex 5
+ Decorate 105(subpass_ms_u3) DescriptorSet 0
+ Decorate 105(subpass_ms_u3) InputAttachmentIndex 6
+ Decorate 115(subpass_f2) DescriptorSet 0
+ Decorate 115(subpass_f2) InputAttachmentIndex 1
+ Decorate 123(subpass_i2) DescriptorSet 0
+ Decorate 123(subpass_i2) InputAttachmentIndex 2
+ Decorate 132(subpass_u2) DescriptorSet 0
+ Decorate 132(subpass_u2) InputAttachmentIndex 3
+ Decorate 139(subpass_ms_f2) DescriptorSet 0
+ Decorate 139(subpass_ms_f2) InputAttachmentIndex 4
+ Decorate 147(subpass_ms_i2) DescriptorSet 0
+ Decorate 147(subpass_ms_i2) InputAttachmentIndex 5
+ Decorate 154(subpass_ms_u2) DescriptorSet 0
+ Decorate 154(subpass_ms_u2) InputAttachmentIndex 6
+ Decorate 162(subpass_f) DescriptorSet 0
+ Decorate 162(subpass_f) InputAttachmentIndex 1
+ Decorate 168(subpass_i) DescriptorSet 0
+ Decorate 168(subpass_i) InputAttachmentIndex 2
+ Decorate 174(subpass_u) DescriptorSet 0
+ Decorate 174(subpass_u) InputAttachmentIndex 3
+ Decorate 179(subpass_ms_f) DescriptorSet 0
+ Decorate 179(subpass_ms_f) InputAttachmentIndex 4
+ Decorate 184(subpass_ms_i) DescriptorSet 0
+ Decorate 184(subpass_ms_i) InputAttachmentIndex 5
+ Decorate 189(subpass_ms_u) DescriptorSet 0
+ Decorate 189(subpass_ms_u) InputAttachmentIndex 6
+ Decorate 194(subpass_2) DescriptorSet 0
+ Decorate 194(subpass_2) InputAttachmentIndex 7
+ Decorate 202(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypePointer Function 7(fvec4)
+ 13: TypeImage 6(float) SubpassData nonsampled format:Unknown
+ 14: TypePointer UniformConstant 13
+ 15(subpass_f4): 14(ptr) Variable UniformConstant
+ 17: TypeInt 32 1
+ 18: 17(int) Constant 0
+ 19: TypeVector 17(int) 2
+ 20: 19(ivec2) ConstantComposite 18 18
+ 22: TypeVector 17(int) 4
+ 23: TypePointer Function 22(ivec4)
+ 25: TypeImage 17(int) SubpassData nonsampled format:Unknown
+ 26: TypePointer UniformConstant 25
+ 27(subpass_i4): 26(ptr) Variable UniformConstant
+ 30: TypeInt 32 0
+ 31: TypeVector 30(int) 4
+ 32: TypePointer Function 31(ivec4)
+ 34: TypeImage 30(int) SubpassData nonsampled format:Unknown
+ 35: TypePointer UniformConstant 34
+ 36(subpass_u4): 35(ptr) Variable UniformConstant
+ 40: TypeImage 6(float) SubpassData multi-sampled nonsampled format:Unknown
+ 41: TypePointer UniformConstant 40
+42(subpass_ms_f4): 41(ptr) Variable UniformConstant
+ 44: 17(int) Constant 3
+ 47: TypeImage 17(int) SubpassData multi-sampled nonsampled format:Unknown
+ 48: TypePointer UniformConstant 47
+49(subpass_ms_i4): 48(ptr) Variable UniformConstant
+ 53: TypeImage 30(int) SubpassData multi-sampled nonsampled format:Unknown
+ 54: TypePointer UniformConstant 53
+55(subpass_ms_u4): 54(ptr) Variable UniformConstant
+ 58: TypeVector 6(float) 3
+ 59: TypePointer Function 58(fvec3)
+ 61(subpass_f3): 14(ptr) Variable UniformConstant
+ 68: TypeVector 17(int) 3
+ 69: TypePointer Function 68(ivec3)
+ 71(subpass_i3): 26(ptr) Variable UniformConstant
+ 78: TypeVector 30(int) 3
+ 79: TypePointer Function 78(ivec3)
+ 81(subpass_u3): 35(ptr) Variable UniformConstant
+89(subpass_ms_f3): 41(ptr) Variable UniformConstant
+97(subpass_ms_i3): 48(ptr) Variable UniformConstant
+105(subpass_ms_u3): 54(ptr) Variable UniformConstant
+ 112: TypeVector 6(float) 2
+ 113: TypePointer Function 112(fvec2)
+ 115(subpass_f2): 14(ptr) Variable UniformConstant
+ 121: TypePointer Function 19(ivec2)
+ 123(subpass_i2): 26(ptr) Variable UniformConstant
+ 129: TypeVector 30(int) 2
+ 130: TypePointer Function 129(ivec2)
+ 132(subpass_u2): 35(ptr) Variable UniformConstant
+139(subpass_ms_f2): 41(ptr) Variable UniformConstant
+ 141: 17(int) Constant 2
+147(subpass_ms_i2): 48(ptr) Variable UniformConstant
+154(subpass_ms_u2): 54(ptr) Variable UniformConstant
+ 160: TypePointer Function 6(float)
+ 162(subpass_f): 14(ptr) Variable UniformConstant
+ 166: TypePointer Function 17(int)
+ 168(subpass_i): 26(ptr) Variable UniformConstant
+ 172: TypePointer Function 30(int)
+ 174(subpass_u): 35(ptr) Variable UniformConstant
+179(subpass_ms_f): 41(ptr) Variable UniformConstant
+184(subpass_ms_i): 48(ptr) Variable UniformConstant
+189(subpass_ms_u): 54(ptr) Variable UniformConstant
+ 194(subpass_2): 14(ptr) Variable UniformConstant
+ 197: 6(float) Constant 0
+ 198: 7(fvec4) ConstantComposite 197 197 197 197
+ 201: TypePointer Output 7(fvec4)
+202(@entryPointOutput): 201(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 203: 7(fvec4) FunctionCall 9(@main()
+ Store 202(@entryPointOutput) 203
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 12(result00): 11(ptr) Variable Function
+ 24(result01): 23(ptr) Variable Function
+ 33(result02): 32(ptr) Variable Function
+ 39(result10): 11(ptr) Variable Function
+ 46(result11): 23(ptr) Variable Function
+ 52(result12): 32(ptr) Variable Function
+ 60(result20): 59(ptr) Variable Function
+ 70(result21): 69(ptr) Variable Function
+ 80(result22): 79(ptr) Variable Function
+ 88(result30): 59(ptr) Variable Function
+ 96(result31): 69(ptr) Variable Function
+ 104(result32): 79(ptr) Variable Function
+ 114(result40): 113(ptr) Variable Function
+ 122(result41): 121(ptr) Variable Function
+ 131(result42): 130(ptr) Variable Function
+ 138(result50): 113(ptr) Variable Function
+ 146(result51): 121(ptr) Variable Function
+ 153(result52): 130(ptr) Variable Function
+ 161(result60): 160(ptr) Variable Function
+ 167(result61): 166(ptr) Variable Function
+ 173(result62): 172(ptr) Variable Function
+ 178(result70): 160(ptr) Variable Function
+ 183(result71): 166(ptr) Variable Function
+ 188(result72): 172(ptr) Variable Function
+ 193(result73): 11(ptr) Variable Function
+ 16: 13 Load 15(subpass_f4)
+ 21: 7(fvec4) ImageRead 16 20
+ Store 12(result00) 21
+ 28: 25 Load 27(subpass_i4)
+ 29: 22(ivec4) ImageRead 28 20
+ Store 24(result01) 29
+ 37: 34 Load 36(subpass_u4)
+ 38: 31(ivec4) ImageRead 37 20
+ Store 33(result02) 38
+ 43: 40 Load 42(subpass_ms_f4)
+ 45: 7(fvec4) ImageRead 43 20 Sample 44
+ Store 39(result10) 45
+ 50: 47 Load 49(subpass_ms_i4)
+ 51: 22(ivec4) ImageRead 50 20 Sample 44
+ Store 46(result11) 51
+ 56: 53 Load 55(subpass_ms_u4)
+ 57: 31(ivec4) ImageRead 56 20 Sample 44
+ Store 52(result12) 57
+ 62: 13 Load 61(subpass_f3)
+ 63: 7(fvec4) ImageRead 62 20
+ 64: 6(float) CompositeExtract 63 0
+ 65: 6(float) CompositeExtract 63 1
+ 66: 6(float) CompositeExtract 63 2
+ 67: 58(fvec3) CompositeConstruct 64 65 66
+ Store 60(result20) 67
+ 72: 25 Load 71(subpass_i3)
+ 73: 22(ivec4) ImageRead 72 20
+ 74: 17(int) CompositeExtract 73 0
+ 75: 17(int) CompositeExtract 73 1
+ 76: 17(int) CompositeExtract 73 2
+ 77: 68(ivec3) CompositeConstruct 74 75 76
+ Store 70(result21) 77
+ 82: 34 Load 81(subpass_u3)
+ 83: 31(ivec4) ImageRead 82 20
+ 84: 30(int) CompositeExtract 83 0
+ 85: 30(int) CompositeExtract 83 1
+ 86: 30(int) CompositeExtract 83 2
+ 87: 78(ivec3) CompositeConstruct 84 85 86
+ Store 80(result22) 87
+ 90: 40 Load 89(subpass_ms_f3)
+ 91: 7(fvec4) ImageRead 90 20 Sample 44
+ 92: 6(float) CompositeExtract 91 0
+ 93: 6(float) CompositeExtract 91 1
+ 94: 6(float) CompositeExtract 91 2
+ 95: 58(fvec3) CompositeConstruct 92 93 94
+ Store 88(result30) 95
+ 98: 47 Load 97(subpass_ms_i3)
+ 99: 22(ivec4) ImageRead 98 20 Sample 44
+ 100: 17(int) CompositeExtract 99 0
+ 101: 17(int) CompositeExtract 99 1
+ 102: 17(int) CompositeExtract 99 2
+ 103: 68(ivec3) CompositeConstruct 100 101 102
+ Store 96(result31) 103
+ 106: 53 Load 105(subpass_ms_u3)
+ 107: 31(ivec4) ImageRead 106 20 Sample 44
+ 108: 30(int) CompositeExtract 107 0
+ 109: 30(int) CompositeExtract 107 1
+ 110: 30(int) CompositeExtract 107 2
+ 111: 78(ivec3) CompositeConstruct 108 109 110
+ Store 104(result32) 111
+ 116: 13 Load 115(subpass_f2)
+ 117: 7(fvec4) ImageRead 116 20
+ 118: 6(float) CompositeExtract 117 0
+ 119: 6(float) CompositeExtract 117 1
+ 120: 112(fvec2) CompositeConstruct 118 119
+ Store 114(result40) 120
+ 124: 25 Load 123(subpass_i2)
+ 125: 22(ivec4) ImageRead 124 20
+ 126: 17(int) CompositeExtract 125 0
+ 127: 17(int) CompositeExtract 125 1
+ 128: 19(ivec2) CompositeConstruct 126 127
+ Store 122(result41) 128
+ 133: 34 Load 132(subpass_u2)
+ 134: 31(ivec4) ImageRead 133 20
+ 135: 30(int) CompositeExtract 134 0
+ 136: 30(int) CompositeExtract 134 1
+ 137: 129(ivec2) CompositeConstruct 135 136
+ Store 131(result42) 137
+ 140: 40 Load 139(subpass_ms_f2)
+ 142: 7(fvec4) ImageRead 140 20 Sample 141
+ 143: 6(float) CompositeExtract 142 0
+ 144: 6(float) CompositeExtract 142 1
+ 145: 112(fvec2) CompositeConstruct 143 144
+ Store 138(result50) 145
+ 148: 47 Load 147(subpass_ms_i2)
+ 149: 22(ivec4) ImageRead 148 20 Sample 141
+ 150: 17(int) CompositeExtract 149 0
+ 151: 17(int) CompositeExtract 149 1
+ 152: 19(ivec2) CompositeConstruct 150 151
+ Store 146(result51) 152
+ 155: 53 Load 154(subpass_ms_u2)
+ 156: 31(ivec4) ImageRead 155 20 Sample 141
+ 157: 30(int) CompositeExtract 156 0
+ 158: 30(int) CompositeExtract 156 1
+ 159: 129(ivec2) CompositeConstruct 157 158
+ Store 153(result52) 159
+ 163: 13 Load 162(subpass_f)
+ 164: 7(fvec4) ImageRead 163 20
+ 165: 6(float) CompositeExtract 164 0
+ Store 161(result60) 165
+ 169: 25 Load 168(subpass_i)
+ 170: 22(ivec4) ImageRead 169 20
+ 171: 17(int) CompositeExtract 170 0
+ Store 167(result61) 171
+ 175: 34 Load 174(subpass_u)
+ 176: 31(ivec4) ImageRead 175 20
+ 177: 30(int) CompositeExtract 176 0
+ Store 173(result62) 177
+ 180: 40 Load 179(subpass_ms_f)
+ 181: 7(fvec4) ImageRead 180 20 Sample 141
+ 182: 6(float) CompositeExtract 181 0
+ Store 178(result70) 182
+ 185: 47 Load 184(subpass_ms_i)
+ 186: 22(ivec4) ImageRead 185 20 Sample 141
+ 187: 17(int) CompositeExtract 186 0
+ Store 183(result71) 187
+ 190: 53 Load 189(subpass_ms_u)
+ 191: 31(ivec4) ImageRead 190 20 Sample 141
+ 192: 30(int) CompositeExtract 191 0
+ Store 188(result72) 192
+ 195: 13 Load 194(subpass_2)
+ 196: 7(fvec4) ImageRead 195 20
+ Store 193(result73) 196
+ ReturnValue 198
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.switch.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.switch.frag.out
index 8ee9d7c4249..f1e3a4eb7eb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.switch.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.switch.frag.out
@@ -1,5 +1,5 @@
hlsl.switch.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4;i1;i1; ( temp 4-component vector of float)
@@ -129,10 +129,10 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
0:2 move second child to first child ( temp int)
0:? 'c' ( temp int)
-0:? 'c' (layout( location=1) in int)
+0:? 'c' (layout( location=1) flat in int)
0:2 move second child to first child ( temp int)
0:? 'd' ( temp int)
-0:? 'd' (layout( location=2) in int)
+0:? 'd' (layout( location=2) flat in int)
0:2 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:2 Function Call: @PixelShaderFunction(vf4;i1;i1; ( temp 4-component vector of float)
@@ -142,14 +142,14 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
-0:? 'c' (layout( location=1) in int)
-0:? 'd' (layout( location=2) in int)
+0:? 'c' (layout( location=1) flat in int)
+0:? 'd' (layout( location=2) flat in int)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4;i1;i1; ( temp 4-component vector of float)
@@ -279,10 +279,10 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
0:2 move second child to first child ( temp int)
0:? 'c' ( temp int)
-0:? 'c' (layout( location=1) in int)
+0:? 'c' (layout( location=1) flat in int)
0:2 move second child to first child ( temp int)
0:? 'd' ( temp int)
-0:? 'd' (layout( location=2) in int)
+0:? 'd' (layout( location=2) flat in int)
0:2 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:2 Function Call: @PixelShaderFunction(vf4;i1;i1; ( temp 4-component vector of float)
@@ -292,11 +292,11 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
-0:? 'c' (layout( location=1) in int)
-0:? 'd' (layout( location=2) in int)
+0:? 'c' (layout( location=1) flat in int)
+0:? 'd' (layout( location=2) flat in int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 106
Capability Shader
@@ -304,6 +304,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 88 92 95 98
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 15 "@PixelShaderFunction(vf4;i1;i1;"
Name 12 "input"
@@ -320,7 +321,9 @@ gl_FragCoord origin is upper left
Name 101 "param"
Name 103 "param"
Decorate 88(input) Location 0
+ Decorate 92(c) Flat
Decorate 92(c) Location 1
+ Decorate 95(d) Flat
Decorate 95(d) Location 2
Decorate 98(@entryPointOutput) Location 0
2: TypeVoid
@@ -396,7 +399,7 @@ gl_FragCoord origin is upper left
Branch 25
25: Label
36: 9(int) Load 13(c)
- SelectionMerge 40 None
+ SelectionMerge 40 DontFlatten
Switch 36 39
case 1: 37
case 2: 38
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.swizzle.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.swizzle.frag.out
index 4674b76438d..380a8bf759e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.swizzle.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.swizzle.frag.out
@@ -1,5 +1,5 @@
hlsl.swizzle.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -40,7 +40,7 @@ Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -77,7 +77,7 @@ gl_FragCoord origin is upper left
0:? 'AmbientColor' ( global 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 30
Capability Shader
@@ -85,6 +85,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "ShaderFunction(vf4;"
Name 10 "input"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.synthesizeInput.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.synthesizeInput.frag.out
new file mode 100644
index 00000000000..521ff7473fa
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.synthesizeInput.frag.out
@@ -0,0 +1,172 @@
+hlsl.synthesizeInput.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:? Sequence
+0:8 Branch: Return with expression
+0:? Construct vec4 ( temp 4-component vector of float)
+0:8 Convert uint to float ( temp float)
+0:8 no_interp: direct index for structure ( temp uint)
+0:8 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:8 Constant:
+0:8 1 (const int)
+0:8 interp: direct index for structure ( temp float)
+0:8 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 0.000000
+0:8 Constant:
+0:8 1.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp float)
+0:7 interp: direct index for structure ( temp float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:7 Constant:
+0:7 0 (const int)
+0:? 'input.interp' (layout( location=0) in float)
+0:7 move second child to first child ( temp uint)
+0:7 no_interp: direct index for structure ( temp uint)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:7 Constant:
+0:7 1 (const int)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'input.interp' (layout( location=0) in float)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
+0:7 Function Parameters:
+0:7 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:? Sequence
+0:8 Branch: Return with expression
+0:? Construct vec4 ( temp 4-component vector of float)
+0:8 Convert uint to float ( temp float)
+0:8 no_interp: direct index for structure ( temp uint)
+0:8 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:8 Constant:
+0:8 1 (const int)
+0:8 interp: direct index for structure ( temp float)
+0:8 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:8 Constant:
+0:8 0 (const int)
+0:8 Constant:
+0:8 0.000000
+0:8 Constant:
+0:8 1.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp float)
+0:7 interp: direct index for structure ( temp float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:7 Constant:
+0:7 0 (const int)
+0:? 'input.interp' (layout( location=0) in float)
+0:7 move second child to first child ( temp uint)
+0:7 no_interp: direct index for structure ( temp uint)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:7 Constant:
+0:7 1 (const int)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7 Function Call: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:? Linker Objects
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'input.interp' (layout( location=0) in float)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 44
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 32 36 40
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "PSInput"
+ MemberName 8(PSInput) 0 "interp"
+ MemberName 8(PSInput) 1 "no_interp"
+ Name 13 "@main(struct-PSInput-f1-u11;"
+ Name 12 "input"
+ Name 30 "input"
+ Name 32 "input.interp"
+ Name 36 "input.no_interp"
+ Name 40 "@entryPointOutput"
+ Name 41 "param"
+ Decorate 32(input.interp) Location 0
+ Decorate 36(input.no_interp) Flat
+ Decorate 36(input.no_interp) Location 1
+ Decorate 40(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeInt 32 0
+ 8(PSInput): TypeStruct 6(float) 7(int)
+ 9: TypePointer Function 8(PSInput)
+ 10: TypeVector 6(float) 4
+ 11: TypeFunction 10(fvec4) 9(ptr)
+ 15: TypeInt 32 1
+ 16: 15(int) Constant 1
+ 17: TypePointer Function 7(int)
+ 21: 15(int) Constant 0
+ 22: TypePointer Function 6(float)
+ 25: 6(float) Constant 0
+ 26: 6(float) Constant 1065353216
+ 31: TypePointer Input 6(float)
+32(input.interp): 31(ptr) Variable Input
+ 35: TypePointer Input 7(int)
+36(input.no_interp): 35(ptr) Variable Input
+ 39: TypePointer Output 10(fvec4)
+40(@entryPointOutput): 39(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 30(input): 9(ptr) Variable Function
+ 41(param): 9(ptr) Variable Function
+ 33: 6(float) Load 32(input.interp)
+ 34: 22(ptr) AccessChain 30(input) 21
+ Store 34 33
+ 37: 7(int) Load 36(input.no_interp)
+ 38: 17(ptr) AccessChain 30(input) 16
+ Store 38 37
+ 42: 8(PSInput) Load 30(input)
+ Store 41(param) 42
+ 43: 10(fvec4) FunctionCall 13(@main(struct-PSInput-f1-u11;) 41(param)
+ Store 40(@entryPointOutput) 43
+ Return
+ FunctionEnd
+13(@main(struct-PSInput-f1-u11;): 10(fvec4) Function None 11
+ 12(input): 9(ptr) FunctionParameter
+ 14: Label
+ 18: 17(ptr) AccessChain 12(input) 16
+ 19: 7(int) Load 18
+ 20: 6(float) ConvertUToF 19
+ 23: 22(ptr) AccessChain 12(input) 21
+ 24: 6(float) Load 23
+ 27: 10(fvec4) CompositeConstruct 20 24 25 26
+ ReturnValue 27
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.target.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.target.frag.out
new file mode 100644
index 00000000000..2a62e8540a5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.target.frag.out
@@ -0,0 +1,209 @@
+hlsl.target.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(struct-PSInput-f1-u11;vf4;vf4; ( temp void)
+0:7 Function Parameters:
+0:7 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:7 'out1' ( out 4-component vector of float)
+0:7 'out2' ( out 4-component vector of float)
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 'out1' ( out 4-component vector of float)
+0:8 Constant:
+0:8 1.000000
+0:8 1.000000
+0:8 1.000000
+0:8 1.000000
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 'out2' ( out 4-component vector of float)
+0:9 Constant:
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp float)
+0:7 interp: direct index for structure ( temp float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:7 Constant:
+0:7 0 (const int)
+0:? 'input.interp' (layout( location=0) in float)
+0:7 move second child to first child ( temp uint)
+0:7 no_interp: direct index for structure ( temp uint)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:7 Constant:
+0:7 1 (const int)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:7 Function Call: @main(struct-PSInput-f1-u11;vf4;vf4; ( temp void)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:? 'out1' ( temp 4-component vector of float)
+0:? 'out2' ( temp 4-component vector of float)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? 'out1' (layout( location=1) out 4-component vector of float)
+0:? 'out1' ( temp 4-component vector of float)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? 'out2' (layout( location=3) out 4-component vector of float)
+0:? 'out2' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'input.interp' (layout( location=0) in float)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:? 'out1' (layout( location=1) out 4-component vector of float)
+0:? 'out2' (layout( location=3) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7 Function Definition: @main(struct-PSInput-f1-u11;vf4;vf4; ( temp void)
+0:7 Function Parameters:
+0:7 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:7 'out1' ( out 4-component vector of float)
+0:7 'out2' ( out 4-component vector of float)
+0:? Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 'out1' ( out 4-component vector of float)
+0:8 Constant:
+0:8 1.000000
+0:8 1.000000
+0:8 1.000000
+0:8 1.000000
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 'out2' ( out 4-component vector of float)
+0:9 Constant:
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:9 0.000000
+0:7 Function Definition: main( ( temp void)
+0:7 Function Parameters:
+0:? Sequence
+0:7 Sequence
+0:7 move second child to first child ( temp float)
+0:7 interp: direct index for structure ( temp float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:7 Constant:
+0:7 0 (const int)
+0:? 'input.interp' (layout( location=0) in float)
+0:7 move second child to first child ( temp uint)
+0:7 no_interp: direct index for structure ( temp uint)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:7 Constant:
+0:7 1 (const int)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:7 Function Call: @main(struct-PSInput-f1-u11;vf4;vf4; ( temp void)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:? 'out1' ( temp 4-component vector of float)
+0:? 'out2' ( temp 4-component vector of float)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? 'out1' (layout( location=1) out 4-component vector of float)
+0:? 'out1' ( temp 4-component vector of float)
+0:7 move second child to first child ( temp 4-component vector of float)
+0:? 'out2' (layout( location=3) out 4-component vector of float)
+0:? 'out2' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'input.interp' (layout( location=0) in float)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:? 'out1' (layout( location=1) out 4-component vector of float)
+0:? 'out2' (layout( location=3) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 50
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 26 32 46 48
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "PSInput"
+ MemberName 8(PSInput) 0 "interp"
+ MemberName 8(PSInput) 1 "no_interp"
+ Name 16 "@main(struct-PSInput-f1-u11;vf4;vf4;"
+ Name 13 "input"
+ Name 14 "out1"
+ Name 15 "out2"
+ Name 22 "input"
+ Name 26 "input.interp"
+ Name 32 "input.no_interp"
+ Name 36 "out1"
+ Name 37 "out2"
+ Name 38 "param"
+ Name 40 "param"
+ Name 41 "param"
+ Name 46 "out1"
+ Name 48 "out2"
+ Decorate 26(input.interp) Location 0
+ Decorate 32(input.no_interp) Flat
+ Decorate 32(input.no_interp) Location 1
+ Decorate 46(out1) Location 1
+ Decorate 48(out2) Location 3
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeInt 32 0
+ 8(PSInput): TypeStruct 6(float) 7(int)
+ 9: TypePointer Function 8(PSInput)
+ 10: TypeVector 6(float) 4
+ 11: TypePointer Function 10(fvec4)
+ 12: TypeFunction 2 9(ptr) 11(ptr) 11(ptr)
+ 18: 6(float) Constant 1065353216
+ 19: 10(fvec4) ConstantComposite 18 18 18 18
+ 20: 6(float) Constant 0
+ 21: 10(fvec4) ConstantComposite 20 20 20 20
+ 23: TypeInt 32 1
+ 24: 23(int) Constant 0
+ 25: TypePointer Input 6(float)
+26(input.interp): 25(ptr) Variable Input
+ 28: TypePointer Function 6(float)
+ 30: 23(int) Constant 1
+ 31: TypePointer Input 7(int)
+32(input.no_interp): 31(ptr) Variable Input
+ 34: TypePointer Function 7(int)
+ 45: TypePointer Output 10(fvec4)
+ 46(out1): 45(ptr) Variable Output
+ 48(out2): 45(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 22(input): 9(ptr) Variable Function
+ 36(out1): 11(ptr) Variable Function
+ 37(out2): 11(ptr) Variable Function
+ 38(param): 9(ptr) Variable Function
+ 40(param): 11(ptr) Variable Function
+ 41(param): 11(ptr) Variable Function
+ 27: 6(float) Load 26(input.interp)
+ 29: 28(ptr) AccessChain 22(input) 24
+ Store 29 27
+ 33: 7(int) Load 32(input.no_interp)
+ 35: 34(ptr) AccessChain 22(input) 30
+ Store 35 33
+ 39: 8(PSInput) Load 22(input)
+ Store 38(param) 39
+ 42: 2 FunctionCall 16(@main(struct-PSInput-f1-u11;vf4;vf4;) 38(param) 40(param) 41(param)
+ 43: 10(fvec4) Load 40(param)
+ Store 36(out1) 43
+ 44: 10(fvec4) Load 41(param)
+ Store 37(out2) 44
+ 47: 10(fvec4) Load 36(out1)
+ Store 46(out1) 47
+ 49: 10(fvec4) Load 37(out2)
+ Store 48(out2) 49
+ Return
+ FunctionEnd
+16(@main(struct-PSInput-f1-u11;vf4;vf4;): 2 Function None 12
+ 13(input): 9(ptr) FunctionParameter
+ 14(out1): 11(ptr) FunctionParameter
+ 15(out2): 11(ptr) FunctionParameter
+ 17: Label
+ Store 14(out1) 19
+ Store 15(out2) 21
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.targetStruct1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.targetStruct1.frag.out
new file mode 100644
index 00000000000..f1edfbd3bc5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.targetStruct1.frag.out
@@ -0,0 +1,298 @@
+hlsl.targetStruct1.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12 Function Definition: @main(struct-PSInput-f1-u11;vf4; ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Parameters:
+0:12 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:12 'po' ( out 4-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 o1: direct index for structure ( temp 4-component vector of float)
+0:14 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:14 Constant:
+0:14 0 (const int)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:14 Convert uint to float ( temp float)
+0:14 no_interp: direct index for structure ( temp uint)
+0:14 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:14 Constant:
+0:14 1 (const int)
+0:14 interp: direct index for structure ( temp float)
+0:14 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 0.000000
+0:14 Constant:
+0:14 1.000000
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 o2: direct index for structure ( temp 4-component vector of float)
+0:15 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 1.000000
+0:15 1.000000
+0:15 1.000000
+0:15 1.000000
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 'po' ( out 4-component vector of float)
+0:16 Constant:
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:18 Branch: Return with expression
+0:18 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 Sequence
+0:12 move second child to first child ( temp float)
+0:12 interp: direct index for structure ( temp float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:12 Constant:
+0:12 0 (const int)
+0:? 'input.interp' (layout( location=0) in float)
+0:12 move second child to first child ( temp uint)
+0:12 no_interp: direct index for structure ( temp uint)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:12 Constant:
+0:12 1 (const int)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:12 Sequence
+0:12 move second child to first child ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Call: @main(struct-PSInput-f1-u11;vf4; ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:? 'po' ( temp 4-component vector of float)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.o1' (layout( location=2) out 4-component vector of float)
+0:12 o1: direct index for structure ( temp 4-component vector of float)
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.o2' (layout( location=1) out 4-component vector of float)
+0:12 o2: direct index for structure ( temp 4-component vector of float)
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? 'po' (layout( location=0) out 4-component vector of float)
+0:? 'po' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput.o1' (layout( location=2) out 4-component vector of float)
+0:? '@entryPointOutput.o2' (layout( location=1) out 4-component vector of float)
+0:? 'input.interp' (layout( location=0) in float)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:? 'po' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12 Function Definition: @main(struct-PSInput-f1-u11;vf4; ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Parameters:
+0:12 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:12 'po' ( out 4-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 o1: direct index for structure ( temp 4-component vector of float)
+0:14 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:14 Constant:
+0:14 0 (const int)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:14 Convert uint to float ( temp float)
+0:14 no_interp: direct index for structure ( temp uint)
+0:14 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:14 Constant:
+0:14 1 (const int)
+0:14 interp: direct index for structure ( temp float)
+0:14 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 0.000000
+0:14 Constant:
+0:14 1.000000
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 o2: direct index for structure ( temp 4-component vector of float)
+0:15 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 1.000000
+0:15 1.000000
+0:15 1.000000
+0:15 1.000000
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 'po' ( out 4-component vector of float)
+0:16 Constant:
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:18 Branch: Return with expression
+0:18 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 Sequence
+0:12 move second child to first child ( temp float)
+0:12 interp: direct index for structure ( temp float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:12 Constant:
+0:12 0 (const int)
+0:? 'input.interp' (layout( location=0) in float)
+0:12 move second child to first child ( temp uint)
+0:12 no_interp: direct index for structure ( temp uint)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:12 Constant:
+0:12 1 (const int)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:12 Sequence
+0:12 move second child to first child ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Call: @main(struct-PSInput-f1-u11;vf4; ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:? 'po' ( temp 4-component vector of float)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.o1' (layout( location=2) out 4-component vector of float)
+0:12 o1: direct index for structure ( temp 4-component vector of float)
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.o2' (layout( location=1) out 4-component vector of float)
+0:12 o2: direct index for structure ( temp 4-component vector of float)
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? 'po' (layout( location=0) out 4-component vector of float)
+0:? 'po' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput.o1' (layout( location=2) out 4-component vector of float)
+0:? '@entryPointOutput.o2' (layout( location=1) out 4-component vector of float)
+0:? 'input.interp' (layout( location=0) in float)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:? 'po' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 65
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 42 46 57 60 63
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "PSInput"
+ MemberName 8(PSInput) 0 "interp"
+ MemberName 8(PSInput) 1 "no_interp"
+ Name 12 "PSOutput"
+ MemberName 12(PSOutput) 0 "o1"
+ MemberName 12(PSOutput) 1 "o2"
+ Name 16 "@main(struct-PSInput-f1-u11;vf4;"
+ Name 14 "input"
+ Name 15 "po"
+ Name 19 "pso"
+ Name 40 "input"
+ Name 42 "input.interp"
+ Name 46 "input.no_interp"
+ Name 49 "flattenTemp"
+ Name 50 "po"
+ Name 51 "param"
+ Name 53 "param"
+ Name 57 "@entryPointOutput.o1"
+ Name 60 "@entryPointOutput.o2"
+ Name 63 "po"
+ Decorate 42(input.interp) Location 0
+ Decorate 46(input.no_interp) Flat
+ Decorate 46(input.no_interp) Location 1
+ Decorate 57(@entryPointOutput.o1) Location 2
+ Decorate 60(@entryPointOutput.o2) Location 1
+ Decorate 63(po) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeInt 32 0
+ 8(PSInput): TypeStruct 6(float) 7(int)
+ 9: TypePointer Function 8(PSInput)
+ 10: TypeVector 6(float) 4
+ 11: TypePointer Function 10(fvec4)
+ 12(PSOutput): TypeStruct 10(fvec4) 10(fvec4)
+ 13: TypeFunction 12(PSOutput) 9(ptr) 11(ptr)
+ 18: TypePointer Function 12(PSOutput)
+ 20: TypeInt 32 1
+ 21: 20(int) Constant 0
+ 22: 20(int) Constant 1
+ 23: TypePointer Function 7(int)
+ 27: TypePointer Function 6(float)
+ 30: 6(float) Constant 0
+ 31: 6(float) Constant 1065353216
+ 34: 10(fvec4) ConstantComposite 31 31 31 31
+ 36: 10(fvec4) ConstantComposite 30 30 30 30
+ 41: TypePointer Input 6(float)
+42(input.interp): 41(ptr) Variable Input
+ 45: TypePointer Input 7(int)
+46(input.no_interp): 45(ptr) Variable Input
+ 56: TypePointer Output 10(fvec4)
+57(@entryPointOutput.o1): 56(ptr) Variable Output
+60(@entryPointOutput.o2): 56(ptr) Variable Output
+ 63(po): 56(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 40(input): 9(ptr) Variable Function
+ 49(flattenTemp): 18(ptr) Variable Function
+ 50(po): 11(ptr) Variable Function
+ 51(param): 9(ptr) Variable Function
+ 53(param): 11(ptr) Variable Function
+ 43: 6(float) Load 42(input.interp)
+ 44: 27(ptr) AccessChain 40(input) 21
+ Store 44 43
+ 47: 7(int) Load 46(input.no_interp)
+ 48: 23(ptr) AccessChain 40(input) 22
+ Store 48 47
+ 52: 8(PSInput) Load 40(input)
+ Store 51(param) 52
+ 54:12(PSOutput) FunctionCall 16(@main(struct-PSInput-f1-u11;vf4;) 51(param) 53(param)
+ 55: 10(fvec4) Load 53(param)
+ Store 50(po) 55
+ Store 49(flattenTemp) 54
+ 58: 11(ptr) AccessChain 49(flattenTemp) 21
+ 59: 10(fvec4) Load 58
+ Store 57(@entryPointOutput.o1) 59
+ 61: 11(ptr) AccessChain 49(flattenTemp) 22
+ 62: 10(fvec4) Load 61
+ Store 60(@entryPointOutput.o2) 62
+ 64: 10(fvec4) Load 50(po)
+ Store 63(po) 64
+ Return
+ FunctionEnd
+16(@main(struct-PSInput-f1-u11;vf4;):12(PSOutput) Function None 13
+ 14(input): 9(ptr) FunctionParameter
+ 15(po): 11(ptr) FunctionParameter
+ 17: Label
+ 19(pso): 18(ptr) Variable Function
+ 24: 23(ptr) AccessChain 14(input) 22
+ 25: 7(int) Load 24
+ 26: 6(float) ConvertUToF 25
+ 28: 27(ptr) AccessChain 14(input) 21
+ 29: 6(float) Load 28
+ 32: 10(fvec4) CompositeConstruct 26 29 30 31
+ 33: 11(ptr) AccessChain 19(pso) 21
+ Store 33 32
+ 35: 11(ptr) AccessChain 19(pso) 22
+ Store 35 34
+ Store 15(po) 36
+ 37:12(PSOutput) Load 19(pso)
+ ReturnValue 37
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.targetStruct2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.targetStruct2.frag.out
new file mode 100644
index 00000000000..3800604b346
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.targetStruct2.frag.out
@@ -0,0 +1,298 @@
+hlsl.targetStruct2.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12 Function Definition: @main(struct-PSInput-f1-u11;vf4; ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Parameters:
+0:12 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:12 'po' ( out 4-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 o1: direct index for structure ( temp 4-component vector of float)
+0:14 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:14 Constant:
+0:14 0 (const int)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:14 Convert uint to float ( temp float)
+0:14 no_interp: direct index for structure ( temp uint)
+0:14 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:14 Constant:
+0:14 1 (const int)
+0:14 interp: direct index for structure ( temp float)
+0:14 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 0.000000
+0:14 Constant:
+0:14 1.000000
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 o2: direct index for structure ( temp 4-component vector of float)
+0:15 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 1.000000
+0:15 1.000000
+0:15 1.000000
+0:15 1.000000
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 'po' ( out 4-component vector of float)
+0:16 Constant:
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:18 Branch: Return with expression
+0:18 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 Sequence
+0:12 move second child to first child ( temp float)
+0:12 interp: direct index for structure ( temp float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:12 Constant:
+0:12 0 (const int)
+0:? 'input.interp' (layout( location=0) in float)
+0:12 move second child to first child ( temp uint)
+0:12 no_interp: direct index for structure ( temp uint)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:12 Constant:
+0:12 1 (const int)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:12 Sequence
+0:12 move second child to first child ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Call: @main(struct-PSInput-f1-u11;vf4; ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:? 'po' ( temp 4-component vector of float)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.o1' (layout( location=2) out 4-component vector of float)
+0:12 o1: direct index for structure ( temp 4-component vector of float)
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.o2' (layout( location=3) out 4-component vector of float)
+0:12 o2: direct index for structure ( temp 4-component vector of float)
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? 'po' (layout( location=0) out 4-component vector of float)
+0:? 'po' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput.o1' (layout( location=2) out 4-component vector of float)
+0:? '@entryPointOutput.o2' (layout( location=3) out 4-component vector of float)
+0:? 'input.interp' (layout( location=0) in float)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:? 'po' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12 Function Definition: @main(struct-PSInput-f1-u11;vf4; ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Parameters:
+0:12 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:12 'po' ( out 4-component vector of float)
+0:? Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 o1: direct index for structure ( temp 4-component vector of float)
+0:14 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:14 Constant:
+0:14 0 (const int)
+0:? Construct vec4 ( temp 4-component vector of float)
+0:14 Convert uint to float ( temp float)
+0:14 no_interp: direct index for structure ( temp uint)
+0:14 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:14 Constant:
+0:14 1 (const int)
+0:14 interp: direct index for structure ( temp float)
+0:14 'input' ( in structure{ temp float interp, temp uint no_interp})
+0:14 Constant:
+0:14 0 (const int)
+0:14 Constant:
+0:14 0.000000
+0:14 Constant:
+0:14 1.000000
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 o2: direct index for structure ( temp 4-component vector of float)
+0:15 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:15 Constant:
+0:15 1 (const int)
+0:15 Constant:
+0:15 1.000000
+0:15 1.000000
+0:15 1.000000
+0:15 1.000000
+0:16 move second child to first child ( temp 4-component vector of float)
+0:16 'po' ( out 4-component vector of float)
+0:16 Constant:
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:16 0.000000
+0:18 Branch: Return with expression
+0:18 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Definition: main( ( temp void)
+0:12 Function Parameters:
+0:? Sequence
+0:12 Sequence
+0:12 move second child to first child ( temp float)
+0:12 interp: direct index for structure ( temp float)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:12 Constant:
+0:12 0 (const int)
+0:? 'input.interp' (layout( location=0) in float)
+0:12 move second child to first child ( temp uint)
+0:12 no_interp: direct index for structure ( temp uint)
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:12 Constant:
+0:12 1 (const int)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:12 Sequence
+0:12 move second child to first child ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Function Call: @main(struct-PSInput-f1-u11;vf4; ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:? 'input' ( temp structure{ temp float interp, temp uint no_interp})
+0:? 'po' ( temp 4-component vector of float)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.o1' (layout( location=2) out 4-component vector of float)
+0:12 o1: direct index for structure ( temp 4-component vector of float)
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Constant:
+0:12 0 (const int)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.o2' (layout( location=3) out 4-component vector of float)
+0:12 o2: direct index for structure ( temp 4-component vector of float)
+0:12 'flattenTemp' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2})
+0:12 Constant:
+0:12 1 (const int)
+0:12 move second child to first child ( temp 4-component vector of float)
+0:? 'po' (layout( location=0) out 4-component vector of float)
+0:? 'po' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? '@entryPointOutput.o1' (layout( location=2) out 4-component vector of float)
+0:? '@entryPointOutput.o2' (layout( location=3) out 4-component vector of float)
+0:? 'input.interp' (layout( location=0) in float)
+0:? 'input.no_interp' (layout( location=1) flat in uint)
+0:? 'po' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 65
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 42 46 57 60 63
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "PSInput"
+ MemberName 8(PSInput) 0 "interp"
+ MemberName 8(PSInput) 1 "no_interp"
+ Name 12 "PSOutput"
+ MemberName 12(PSOutput) 0 "o1"
+ MemberName 12(PSOutput) 1 "o2"
+ Name 16 "@main(struct-PSInput-f1-u11;vf4;"
+ Name 14 "input"
+ Name 15 "po"
+ Name 19 "pso"
+ Name 40 "input"
+ Name 42 "input.interp"
+ Name 46 "input.no_interp"
+ Name 49 "flattenTemp"
+ Name 50 "po"
+ Name 51 "param"
+ Name 53 "param"
+ Name 57 "@entryPointOutput.o1"
+ Name 60 "@entryPointOutput.o2"
+ Name 63 "po"
+ Decorate 42(input.interp) Location 0
+ Decorate 46(input.no_interp) Flat
+ Decorate 46(input.no_interp) Location 1
+ Decorate 57(@entryPointOutput.o1) Location 2
+ Decorate 60(@entryPointOutput.o2) Location 3
+ Decorate 63(po) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeInt 32 0
+ 8(PSInput): TypeStruct 6(float) 7(int)
+ 9: TypePointer Function 8(PSInput)
+ 10: TypeVector 6(float) 4
+ 11: TypePointer Function 10(fvec4)
+ 12(PSOutput): TypeStruct 10(fvec4) 10(fvec4)
+ 13: TypeFunction 12(PSOutput) 9(ptr) 11(ptr)
+ 18: TypePointer Function 12(PSOutput)
+ 20: TypeInt 32 1
+ 21: 20(int) Constant 0
+ 22: 20(int) Constant 1
+ 23: TypePointer Function 7(int)
+ 27: TypePointer Function 6(float)
+ 30: 6(float) Constant 0
+ 31: 6(float) Constant 1065353216
+ 34: 10(fvec4) ConstantComposite 31 31 31 31
+ 36: 10(fvec4) ConstantComposite 30 30 30 30
+ 41: TypePointer Input 6(float)
+42(input.interp): 41(ptr) Variable Input
+ 45: TypePointer Input 7(int)
+46(input.no_interp): 45(ptr) Variable Input
+ 56: TypePointer Output 10(fvec4)
+57(@entryPointOutput.o1): 56(ptr) Variable Output
+60(@entryPointOutput.o2): 56(ptr) Variable Output
+ 63(po): 56(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 40(input): 9(ptr) Variable Function
+ 49(flattenTemp): 18(ptr) Variable Function
+ 50(po): 11(ptr) Variable Function
+ 51(param): 9(ptr) Variable Function
+ 53(param): 11(ptr) Variable Function
+ 43: 6(float) Load 42(input.interp)
+ 44: 27(ptr) AccessChain 40(input) 21
+ Store 44 43
+ 47: 7(int) Load 46(input.no_interp)
+ 48: 23(ptr) AccessChain 40(input) 22
+ Store 48 47
+ 52: 8(PSInput) Load 40(input)
+ Store 51(param) 52
+ 54:12(PSOutput) FunctionCall 16(@main(struct-PSInput-f1-u11;vf4;) 51(param) 53(param)
+ 55: 10(fvec4) Load 53(param)
+ Store 50(po) 55
+ Store 49(flattenTemp) 54
+ 58: 11(ptr) AccessChain 49(flattenTemp) 21
+ 59: 10(fvec4) Load 58
+ Store 57(@entryPointOutput.o1) 59
+ 61: 11(ptr) AccessChain 49(flattenTemp) 22
+ 62: 10(fvec4) Load 61
+ Store 60(@entryPointOutput.o2) 62
+ 64: 10(fvec4) Load 50(po)
+ Store 63(po) 64
+ Return
+ FunctionEnd
+16(@main(struct-PSInput-f1-u11;vf4;):12(PSOutput) Function None 13
+ 14(input): 9(ptr) FunctionParameter
+ 15(po): 11(ptr) FunctionParameter
+ 17: Label
+ 19(pso): 18(ptr) Variable Function
+ 24: 23(ptr) AccessChain 14(input) 22
+ 25: 7(int) Load 24
+ 26: 6(float) ConvertUToF 25
+ 28: 27(ptr) AccessChain 14(input) 21
+ 29: 6(float) Load 28
+ 32: 10(fvec4) CompositeConstruct 26 29 30 31
+ 33: 11(ptr) AccessChain 19(pso) 21
+ Store 33 32
+ 35: 11(ptr) AccessChain 19(pso) 22
+ Store 35 34
+ Store 15(po) 36
+ 37:12(PSOutput) Load 19(pso)
+ ReturnValue 37
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.templatetypes.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.templatetypes.frag.out
index 11ea394bf72..88783f69608 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.templatetypes.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.templatetypes.frag.out
@@ -1,5 +1,5 @@
hlsl.templatetypes.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @PixelShaderFunction( ( temp float)
@@ -255,7 +255,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @PixelShaderFunction( ( temp float)
@@ -508,7 +508,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 153
Capability Shader
@@ -517,6 +517,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 151
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 8 "@PixelShaderFunction("
Name 12 "r00"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.struct.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.struct.frag.out
new file mode 100644
index 00000000000..2aa7bd2c04f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.struct.frag.out
@@ -0,0 +1,1197 @@
+hlsl.texture.struct.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:38 Function Definition: fn1(t2-tx-struct0-1; ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Function Parameters:
+0:38 't1' ( in texture2D)
+0:? Sequence
+0:38 Branch: Return with expression
+0:38 Sequence
+0:38 move second child to first child ( temp 4-component vector of float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:38 Construct combined texture-sampler ( temp sampler2D)
+0:38 't1' ( in texture2D)
+0:38 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.600000
+0:? 0.610000
+0:38 move second child to first child ( temp float)
+0:38 c0: direct index for structure ( temp float)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Constant:
+0:38 0 (const uint)
+0:38 direct index ( temp float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:38 Constant:
+0:38 0 (const uint)
+0:38 move second child to first child ( temp float)
+0:38 direct index ( temp float)
+0:38 c1: direct index for structure ( temp 2-component vector of float)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Constant:
+0:38 1 (const uint)
+0:38 Constant:
+0:38 0 (const int)
+0:38 direct index ( temp float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:38 move second child to first child ( temp float)
+0:38 direct index ( temp float)
+0:38 c1: direct index for structure ( temp 2-component vector of float)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Constant:
+0:38 1 (const uint)
+0:38 Constant:
+0:38 1 (const int)
+0:38 direct index ( temp float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:38 Constant:
+0:38 2 (const uint)
+0:38 move second child to first child ( temp float)
+0:38 c2: direct index for structure ( temp float)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Constant:
+0:38 2 (const uint)
+0:38 direct index ( temp float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:38 Constant:
+0:38 3 (const uint)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:39 Function Definition: fn1(t2-tx-struct1-1; ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Function Parameters:
+0:39 't2' ( in texture2D)
+0:? Sequence
+0:39 Branch: Return with expression
+0:39 Sequence
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:39 Construct combined texture-sampler ( temp sampler2D)
+0:39 't2' ( in texture2D)
+0:39 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.600000
+0:? 0.610000
+0:39 move second child to first child ( temp float)
+0:39 c0: direct index for structure ( temp float)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Constant:
+0:39 0 (const uint)
+0:39 direct index ( temp float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 0 (const uint)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 c1: direct index for structure ( temp 3-component vector of float)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Constant:
+0:39 1 (const uint)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( temp float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 c1: direct index for structure ( temp 3-component vector of float)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Constant:
+0:39 1 (const uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 direct index ( temp float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 2 (const uint)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 c1: direct index for structure ( temp 3-component vector of float)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Constant:
+0:39 1 (const uint)
+0:39 Constant:
+0:39 2 (const int)
+0:39 direct index ( temp float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 3 (const uint)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:42 Function Definition: @main( ( temp 4-component vector of float)
+0:42 Function Parameters:
+0:? Sequence
+0:43 Sequence
+0:43 move second child to first child ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 's1' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Sequence
+0:43 move second child to first child ( temp 4-component vector of float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:43 Construct combined texture-sampler ( temp sampler2D)
+0:43 'g_tTex2s1' ( uniform texture2D)
+0:43 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.110000
+0:43 move second child to first child ( temp float)
+0:43 c0: direct index for structure ( temp float)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Constant:
+0:43 0 (const uint)
+0:43 direct index ( temp float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:43 Constant:
+0:43 0 (const uint)
+0:43 move second child to first child ( temp float)
+0:43 direct index ( temp float)
+0:43 c1: direct index for structure ( temp 2-component vector of float)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Constant:
+0:43 1 (const uint)
+0:43 Constant:
+0:43 0 (const int)
+0:43 direct index ( temp float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:43 Constant:
+0:43 1 (const uint)
+0:43 move second child to first child ( temp float)
+0:43 direct index ( temp float)
+0:43 c1: direct index for structure ( temp 2-component vector of float)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Constant:
+0:43 1 (const uint)
+0:43 Constant:
+0:43 1 (const int)
+0:43 direct index ( temp float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:43 Constant:
+0:43 2 (const uint)
+0:43 move second child to first child ( temp float)
+0:43 c2: direct index for structure ( temp float)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Constant:
+0:43 2 (const uint)
+0:43 direct index ( temp float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:43 Constant:
+0:43 3 (const uint)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:44 Sequence
+0:44 move second child to first child ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 's2' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Sequence
+0:44 move second child to first child ( temp 4-component vector of float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:44 Construct combined texture-sampler ( temp sampler2D)
+0:44 'g_tTex2s2' ( uniform texture2D)
+0:44 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.210000
+0:44 move second child to first child ( temp float)
+0:44 c0: direct index for structure ( temp float)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Constant:
+0:44 0 (const uint)
+0:44 direct index ( temp float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:44 Constant:
+0:44 0 (const uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 c1: direct index for structure ( temp 3-component vector of float)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Constant:
+0:44 1 (const uint)
+0:44 Constant:
+0:44 0 (const int)
+0:44 direct index ( temp float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:44 Constant:
+0:44 1 (const uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 c1: direct index for structure ( temp 3-component vector of float)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Constant:
+0:44 1 (const uint)
+0:44 Constant:
+0:44 1 (const int)
+0:44 direct index ( temp float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:44 Constant:
+0:44 2 (const uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 c1: direct index for structure ( temp 3-component vector of float)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Constant:
+0:44 1 (const uint)
+0:44 Constant:
+0:44 2 (const int)
+0:44 direct index ( temp float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:44 Constant:
+0:44 3 (const uint)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:45 Sequence
+0:45 move second child to first child ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 's3' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 Sequence
+0:45 move second child to first child ( temp 4-component vector of float)
+0:45 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:45 Construct combined texture-sampler ( temp sampler2D)
+0:45 'g_tTex2s3' ( uniform texture2D)
+0:45 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.300000
+0:? 0.310000
+0:45 move second child to first child ( temp float)
+0:45 direct index ( temp float)
+0:45 c0: direct index for structure ( temp 2-component vector of float)
+0:45 '@sampleStructTemp' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 Constant:
+0:45 0 (const uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 direct index ( temp float)
+0:45 '@sampleResultShadow' ( temp 4-component vector of float)
+0:45 Constant:
+0:45 0 (const uint)
+0:45 move second child to first child ( temp float)
+0:45 direct index ( temp float)
+0:45 c0: direct index for structure ( temp 2-component vector of float)
+0:45 '@sampleStructTemp' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 Constant:
+0:45 0 (const uint)
+0:45 Constant:
+0:45 1 (const int)
+0:45 direct index ( temp float)
+0:45 '@sampleResultShadow' ( temp 4-component vector of float)
+0:45 Constant:
+0:45 1 (const uint)
+0:45 move second child to first child ( temp float)
+0:45 direct index ( temp float)
+0:45 c1: direct index for structure ( temp 1-component vector of float)
+0:45 '@sampleStructTemp' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 Constant:
+0:45 1 (const uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 direct index ( temp float)
+0:45 '@sampleResultShadow' ( temp 4-component vector of float)
+0:45 Constant:
+0:45 2 (const uint)
+0:45 '@sampleStructTemp' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:46 Sequence
+0:46 move second child to first child ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 's4' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Sequence
+0:46 move second child to first child ( temp 4-component vector of int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:? texture ( temp 4-component vector of int)
+0:46 Construct combined texture-sampler ( temp isampler2D)
+0:46 'g_tTex2s4' ( uniform itexture2D)
+0:46 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.400000
+0:? 0.410000
+0:46 move second child to first child ( temp int)
+0:46 c0: direct index for structure ( temp int)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Constant:
+0:46 0 (const uint)
+0:46 direct index ( temp int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:46 Constant:
+0:46 0 (const uint)
+0:46 move second child to first child ( temp float)
+0:46 direct index ( temp float)
+0:46 c1: direct index for structure ( temp 2-component vector of int)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Constant:
+0:46 1 (const uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Convert int to float ( temp float)
+0:46 direct index ( temp int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:46 Constant:
+0:46 1 (const uint)
+0:46 move second child to first child ( temp float)
+0:46 direct index ( temp float)
+0:46 c1: direct index for structure ( temp 2-component vector of int)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Constant:
+0:46 1 (const uint)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Convert int to float ( temp float)
+0:46 direct index ( temp int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:46 Constant:
+0:46 2 (const uint)
+0:46 move second child to first child ( temp int)
+0:46 c2: direct index for structure ( temp int)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Constant:
+0:46 2 (const uint)
+0:46 direct index ( temp int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:46 Constant:
+0:46 3 (const uint)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:47 Sequence
+0:47 move second child to first child ( temp structure{ temp uint c0, temp uint c1})
+0:47 's5' ( temp structure{ temp uint c0, temp uint c1})
+0:47 Sequence
+0:47 move second child to first child ( temp 4-component vector of uint)
+0:47 '@sampleResultShadow' ( temp 4-component vector of uint)
+0:? texture ( temp 4-component vector of uint)
+0:47 Construct combined texture-sampler ( temp usampler2D)
+0:47 'g_tTex2s5' ( uniform utexture2D)
+0:47 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.500000
+0:? 0.510000
+0:47 move second child to first child ( temp uint)
+0:47 c0: direct index for structure ( temp uint)
+0:47 '@sampleStructTemp' ( temp structure{ temp uint c0, temp uint c1})
+0:47 Constant:
+0:47 0 (const uint)
+0:47 direct index ( temp uint)
+0:47 '@sampleResultShadow' ( temp 4-component vector of uint)
+0:47 Constant:
+0:47 0 (const uint)
+0:47 move second child to first child ( temp uint)
+0:47 c1: direct index for structure ( temp uint)
+0:47 '@sampleStructTemp' ( temp structure{ temp uint c0, temp uint c1})
+0:47 Constant:
+0:47 1 (const uint)
+0:47 direct index ( temp uint)
+0:47 '@sampleResultShadow' ( temp 4-component vector of uint)
+0:47 Constant:
+0:47 1 (const uint)
+0:47 '@sampleStructTemp' ( temp structure{ temp uint c0, temp uint c1})
+0:49 Sequence
+0:49 move second child to first child ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:49 'r0' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:49 Function Call: fn1(t2-tx-struct0-1; ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:49 'g_tTex2s1' ( uniform texture2D)
+0:50 Sequence
+0:50 move second child to first child ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:50 'r1' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:50 Function Call: fn1(t2-tx-struct1-1; ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:50 'g_tTex2s2' ( uniform texture2D)
+0:51 Sequence
+0:51 move second child to first child ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:51 'r2' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:51 Function Call: fn1(t2-tx-struct0-1; ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:51 'g_tTex2s1a' ( uniform texture2D)
+0:53 Branch: Return with expression
+0:53 Constant:
+0:53 0.000000
+0:53 0.000000
+0:53 0.000000
+0:53 0.000000
+0:42 Function Definition: main( ( temp void)
+0:42 Function Parameters:
+0:? Sequence
+0:42 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:42 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_sSamp' ( uniform sampler)
+0:? 'g_tTex2s1' ( uniform texture2D)
+0:? 'g_tTex2s2' ( uniform texture2D)
+0:? 'g_tTex2s3' ( uniform texture2D)
+0:? 'g_tTex2s4' ( uniform itexture2D)
+0:? 'g_tTex2s5' ( uniform utexture2D)
+0:? 'g_tTex2s1a' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:38 Function Definition: fn1(t2-tx-struct0-1; ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Function Parameters:
+0:38 't1' ( in texture2D)
+0:? Sequence
+0:38 Branch: Return with expression
+0:38 Sequence
+0:38 move second child to first child ( temp 4-component vector of float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:38 Construct combined texture-sampler ( temp sampler2D)
+0:38 't1' ( in texture2D)
+0:38 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.600000
+0:? 0.610000
+0:38 move second child to first child ( temp float)
+0:38 c0: direct index for structure ( temp float)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Constant:
+0:38 0 (const uint)
+0:38 direct index ( temp float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:38 Constant:
+0:38 0 (const uint)
+0:38 move second child to first child ( temp float)
+0:38 direct index ( temp float)
+0:38 c1: direct index for structure ( temp 2-component vector of float)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Constant:
+0:38 1 (const uint)
+0:38 Constant:
+0:38 0 (const int)
+0:38 direct index ( temp float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:38 move second child to first child ( temp float)
+0:38 direct index ( temp float)
+0:38 c1: direct index for structure ( temp 2-component vector of float)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Constant:
+0:38 1 (const uint)
+0:38 Constant:
+0:38 1 (const int)
+0:38 direct index ( temp float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:38 Constant:
+0:38 2 (const uint)
+0:38 move second child to first child ( temp float)
+0:38 c2: direct index for structure ( temp float)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:38 Constant:
+0:38 2 (const uint)
+0:38 direct index ( temp float)
+0:38 '@sampleResultShadow' ( temp 4-component vector of float)
+0:38 Constant:
+0:38 3 (const uint)
+0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:39 Function Definition: fn1(t2-tx-struct1-1; ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Function Parameters:
+0:39 't2' ( in texture2D)
+0:? Sequence
+0:39 Branch: Return with expression
+0:39 Sequence
+0:39 move second child to first child ( temp 4-component vector of float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:39 Construct combined texture-sampler ( temp sampler2D)
+0:39 't2' ( in texture2D)
+0:39 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.600000
+0:? 0.610000
+0:39 move second child to first child ( temp float)
+0:39 c0: direct index for structure ( temp float)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Constant:
+0:39 0 (const uint)
+0:39 direct index ( temp float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 0 (const uint)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 c1: direct index for structure ( temp 3-component vector of float)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Constant:
+0:39 1 (const uint)
+0:39 Constant:
+0:39 0 (const int)
+0:39 direct index ( temp float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 c1: direct index for structure ( temp 3-component vector of float)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Constant:
+0:39 1 (const uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 direct index ( temp float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 2 (const uint)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 c1: direct index for structure ( temp 3-component vector of float)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:39 Constant:
+0:39 1 (const uint)
+0:39 Constant:
+0:39 2 (const int)
+0:39 direct index ( temp float)
+0:39 '@sampleResultShadow' ( temp 4-component vector of float)
+0:39 Constant:
+0:39 3 (const uint)
+0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:42 Function Definition: @main( ( temp 4-component vector of float)
+0:42 Function Parameters:
+0:? Sequence
+0:43 Sequence
+0:43 move second child to first child ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 's1' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Sequence
+0:43 move second child to first child ( temp 4-component vector of float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:43 Construct combined texture-sampler ( temp sampler2D)
+0:43 'g_tTex2s1' ( uniform texture2D)
+0:43 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.110000
+0:43 move second child to first child ( temp float)
+0:43 c0: direct index for structure ( temp float)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Constant:
+0:43 0 (const uint)
+0:43 direct index ( temp float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:43 Constant:
+0:43 0 (const uint)
+0:43 move second child to first child ( temp float)
+0:43 direct index ( temp float)
+0:43 c1: direct index for structure ( temp 2-component vector of float)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Constant:
+0:43 1 (const uint)
+0:43 Constant:
+0:43 0 (const int)
+0:43 direct index ( temp float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:43 Constant:
+0:43 1 (const uint)
+0:43 move second child to first child ( temp float)
+0:43 direct index ( temp float)
+0:43 c1: direct index for structure ( temp 2-component vector of float)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Constant:
+0:43 1 (const uint)
+0:43 Constant:
+0:43 1 (const int)
+0:43 direct index ( temp float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:43 Constant:
+0:43 2 (const uint)
+0:43 move second child to first child ( temp float)
+0:43 c2: direct index for structure ( temp float)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:43 Constant:
+0:43 2 (const uint)
+0:43 direct index ( temp float)
+0:43 '@sampleResultShadow' ( temp 4-component vector of float)
+0:43 Constant:
+0:43 3 (const uint)
+0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:44 Sequence
+0:44 move second child to first child ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 's2' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Sequence
+0:44 move second child to first child ( temp 4-component vector of float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:44 Construct combined texture-sampler ( temp sampler2D)
+0:44 'g_tTex2s2' ( uniform texture2D)
+0:44 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.200000
+0:? 0.210000
+0:44 move second child to first child ( temp float)
+0:44 c0: direct index for structure ( temp float)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Constant:
+0:44 0 (const uint)
+0:44 direct index ( temp float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:44 Constant:
+0:44 0 (const uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 c1: direct index for structure ( temp 3-component vector of float)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Constant:
+0:44 1 (const uint)
+0:44 Constant:
+0:44 0 (const int)
+0:44 direct index ( temp float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:44 Constant:
+0:44 1 (const uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 c1: direct index for structure ( temp 3-component vector of float)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Constant:
+0:44 1 (const uint)
+0:44 Constant:
+0:44 1 (const int)
+0:44 direct index ( temp float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:44 Constant:
+0:44 2 (const uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 c1: direct index for structure ( temp 3-component vector of float)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:44 Constant:
+0:44 1 (const uint)
+0:44 Constant:
+0:44 2 (const int)
+0:44 direct index ( temp float)
+0:44 '@sampleResultShadow' ( temp 4-component vector of float)
+0:44 Constant:
+0:44 3 (const uint)
+0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:45 Sequence
+0:45 move second child to first child ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 's3' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 Sequence
+0:45 move second child to first child ( temp 4-component vector of float)
+0:45 '@sampleResultShadow' ( temp 4-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:45 Construct combined texture-sampler ( temp sampler2D)
+0:45 'g_tTex2s3' ( uniform texture2D)
+0:45 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.300000
+0:? 0.310000
+0:45 move second child to first child ( temp float)
+0:45 direct index ( temp float)
+0:45 c0: direct index for structure ( temp 2-component vector of float)
+0:45 '@sampleStructTemp' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 Constant:
+0:45 0 (const uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 direct index ( temp float)
+0:45 '@sampleResultShadow' ( temp 4-component vector of float)
+0:45 Constant:
+0:45 0 (const uint)
+0:45 move second child to first child ( temp float)
+0:45 direct index ( temp float)
+0:45 c0: direct index for structure ( temp 2-component vector of float)
+0:45 '@sampleStructTemp' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 Constant:
+0:45 0 (const uint)
+0:45 Constant:
+0:45 1 (const int)
+0:45 direct index ( temp float)
+0:45 '@sampleResultShadow' ( temp 4-component vector of float)
+0:45 Constant:
+0:45 1 (const uint)
+0:45 move second child to first child ( temp float)
+0:45 direct index ( temp float)
+0:45 c1: direct index for structure ( temp 1-component vector of float)
+0:45 '@sampleStructTemp' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:45 Constant:
+0:45 1 (const uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 direct index ( temp float)
+0:45 '@sampleResultShadow' ( temp 4-component vector of float)
+0:45 Constant:
+0:45 2 (const uint)
+0:45 '@sampleStructTemp' ( temp structure{ temp 2-component vector of float c0, temp 1-component vector of float c1})
+0:46 Sequence
+0:46 move second child to first child ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 's4' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Sequence
+0:46 move second child to first child ( temp 4-component vector of int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:? texture ( temp 4-component vector of int)
+0:46 Construct combined texture-sampler ( temp isampler2D)
+0:46 'g_tTex2s4' ( uniform itexture2D)
+0:46 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.400000
+0:? 0.410000
+0:46 move second child to first child ( temp int)
+0:46 c0: direct index for structure ( temp int)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Constant:
+0:46 0 (const uint)
+0:46 direct index ( temp int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:46 Constant:
+0:46 0 (const uint)
+0:46 move second child to first child ( temp float)
+0:46 direct index ( temp float)
+0:46 c1: direct index for structure ( temp 2-component vector of int)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Constant:
+0:46 1 (const uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Convert int to float ( temp float)
+0:46 direct index ( temp int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:46 Constant:
+0:46 1 (const uint)
+0:46 move second child to first child ( temp float)
+0:46 direct index ( temp float)
+0:46 c1: direct index for structure ( temp 2-component vector of int)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Constant:
+0:46 1 (const uint)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Convert int to float ( temp float)
+0:46 direct index ( temp int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:46 Constant:
+0:46 2 (const uint)
+0:46 move second child to first child ( temp int)
+0:46 c2: direct index for structure ( temp int)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:46 Constant:
+0:46 2 (const uint)
+0:46 direct index ( temp int)
+0:46 '@sampleResultShadow' ( temp 4-component vector of int)
+0:46 Constant:
+0:46 3 (const uint)
+0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2})
+0:47 Sequence
+0:47 move second child to first child ( temp structure{ temp uint c0, temp uint c1})
+0:47 's5' ( temp structure{ temp uint c0, temp uint c1})
+0:47 Sequence
+0:47 move second child to first child ( temp 4-component vector of uint)
+0:47 '@sampleResultShadow' ( temp 4-component vector of uint)
+0:? texture ( temp 4-component vector of uint)
+0:47 Construct combined texture-sampler ( temp usampler2D)
+0:47 'g_tTex2s5' ( uniform utexture2D)
+0:47 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.500000
+0:? 0.510000
+0:47 move second child to first child ( temp uint)
+0:47 c0: direct index for structure ( temp uint)
+0:47 '@sampleStructTemp' ( temp structure{ temp uint c0, temp uint c1})
+0:47 Constant:
+0:47 0 (const uint)
+0:47 direct index ( temp uint)
+0:47 '@sampleResultShadow' ( temp 4-component vector of uint)
+0:47 Constant:
+0:47 0 (const uint)
+0:47 move second child to first child ( temp uint)
+0:47 c1: direct index for structure ( temp uint)
+0:47 '@sampleStructTemp' ( temp structure{ temp uint c0, temp uint c1})
+0:47 Constant:
+0:47 1 (const uint)
+0:47 direct index ( temp uint)
+0:47 '@sampleResultShadow' ( temp 4-component vector of uint)
+0:47 Constant:
+0:47 1 (const uint)
+0:47 '@sampleStructTemp' ( temp structure{ temp uint c0, temp uint c1})
+0:49 Sequence
+0:49 move second child to first child ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:49 'r0' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:49 Function Call: fn1(t2-tx-struct0-1; ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:49 'g_tTex2s1' ( uniform texture2D)
+0:50 Sequence
+0:50 move second child to first child ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:50 'r1' ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:50 Function Call: fn1(t2-tx-struct1-1; ( temp structure{ temp float c0, temp 3-component vector of float c1})
+0:50 'g_tTex2s2' ( uniform texture2D)
+0:51 Sequence
+0:51 move second child to first child ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:51 'r2' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:51 Function Call: fn1(t2-tx-struct0-1; ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2})
+0:51 'g_tTex2s1a' ( uniform texture2D)
+0:53 Branch: Return with expression
+0:53 Constant:
+0:53 0.000000
+0:53 0.000000
+0:53 0.000000
+0:53 0.000000
+0:42 Function Definition: main( ( temp void)
+0:42 Function Parameters:
+0:? Sequence
+0:42 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:42 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_sSamp' ( uniform sampler)
+0:? 'g_tTex2s1' ( uniform texture2D)
+0:? 'g_tTex2s2' ( uniform texture2D)
+0:? 'g_tTex2s3' ( uniform texture2D)
+0:? 'g_tTex2s4' ( uniform itexture2D)
+0:? 'g_tTex2s5' ( uniform utexture2D)
+0:? 'g_tTex2s1a' ( uniform texture2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 240
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 238
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 10 "s1_t"
+ MemberName 10(s1_t) 0 "c0"
+ MemberName 10(s1_t) 1 "c1"
+ MemberName 10(s1_t) 2 "c2"
+ Name 13 "fn1(t2-tx-struct0-1;"
+ Name 12 "t1"
+ Name 16 "s2_t"
+ MemberName 16(s2_t) 0 "c0"
+ MemberName 16(s2_t) 1 "c1"
+ Name 19 "fn1(t2-tx-struct1-1;"
+ Name 18 "t2"
+ Name 23 "@main("
+ Name 26 "@sampleResultShadow"
+ Name 30 "g_sSamp"
+ Name 39 "@sampleStructTemp"
+ Name 65 "@sampleResultShadow"
+ Name 71 "@sampleStructTemp"
+ Name 87 "s1"
+ Name 88 "@sampleResultShadow"
+ Name 90 "g_tTex2s1"
+ Name 98 "@sampleStructTemp"
+ Name 112 "s2"
+ Name 113 "@sampleResultShadow"
+ Name 114 "g_tTex2s2"
+ Name 122 "@sampleStructTemp"
+ Name 136 "s3_t"
+ MemberName 136(s3_t) 0 "c0"
+ MemberName 136(s3_t) 1 "c1"
+ Name 138 "s3"
+ Name 139 "@sampleResultShadow"
+ Name 140 "g_tTex2s3"
+ Name 148 "@sampleStructTemp"
+ Name 160 "s4_t"
+ MemberName 160(s4_t) 0 "c0"
+ MemberName 160(s4_t) 1 "c1"
+ MemberName 160(s4_t) 2 "c2"
+ Name 162 "s4"
+ Name 165 "@sampleResultShadow"
+ Name 168 "g_tTex2s4"
+ Name 177 "@sampleStructTemp"
+ Name 194 "s5_t"
+ MemberName 194(s5_t) 0 "c0"
+ MemberName 194(s5_t) 1 "c1"
+ Name 196 "s5"
+ Name 199 "@sampleResultShadow"
+ Name 202 "g_tTex2s5"
+ Name 211 "@sampleStructTemp"
+ Name 220 "r0"
+ Name 221 "param"
+ Name 224 "r1"
+ Name 225 "param"
+ Name 228 "r2"
+ Name 229 "g_tTex2s1a"
+ Name 230 "param"
+ Name 238 "@entryPointOutput"
+ Decorate 30(g_sSamp) DescriptorSet 0
+ Decorate 90(g_tTex2s1) DescriptorSet 0
+ Decorate 114(g_tTex2s2) DescriptorSet 0
+ Decorate 140(g_tTex2s3) DescriptorSet 0
+ Decorate 168(g_tTex2s4) DescriptorSet 0
+ Decorate 202(g_tTex2s5) DescriptorSet 0
+ Decorate 229(g_tTex2s1a) DescriptorSet 0
+ Decorate 238(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeImage 6(float) 2D sampled format:Unknown
+ 8: TypePointer Function 7
+ 9: TypeVector 6(float) 2
+ 10(s1_t): TypeStruct 6(float) 9(fvec2) 6(float)
+ 11: TypeFunction 10(s1_t) 8(ptr)
+ 15: TypeVector 6(float) 3
+ 16(s2_t): TypeStruct 6(float) 15(fvec3)
+ 17: TypeFunction 16(s2_t) 8(ptr)
+ 21: TypeVector 6(float) 4
+ 22: TypeFunction 21(fvec4)
+ 25: TypePointer Function 21(fvec4)
+ 28: TypeSampler
+ 29: TypePointer UniformConstant 28
+ 30(g_sSamp): 29(ptr) Variable UniformConstant
+ 32: TypeSampledImage 7
+ 34: 6(float) Constant 1058642330
+ 35: 6(float) Constant 1058810102
+ 36: 9(fvec2) ConstantComposite 34 35
+ 38: TypePointer Function 10(s1_t)
+ 40: TypeInt 32 1
+ 41: 40(int) Constant 0
+ 42: TypeInt 32 0
+ 43: 42(int) Constant 0
+ 44: TypePointer Function 6(float)
+ 48: 40(int) Constant 1
+ 49: 42(int) Constant 1
+ 53: 42(int) Constant 2
+ 57: 40(int) Constant 2
+ 58: 42(int) Constant 3
+ 70: TypePointer Function 16(s2_t)
+ 89: TypePointer UniformConstant 7
+ 90(g_tTex2s1): 89(ptr) Variable UniformConstant
+ 94: 6(float) Constant 1036831949
+ 95: 6(float) Constant 1038174126
+ 96: 9(fvec2) ConstantComposite 94 95
+ 114(g_tTex2s2): 89(ptr) Variable UniformConstant
+ 118: 6(float) Constant 1045220557
+ 119: 6(float) Constant 1045891645
+ 120: 9(fvec2) ConstantComposite 118 119
+ 136(s3_t): TypeStruct 9(fvec2) 6(float)
+ 137: TypePointer Function 136(s3_t)
+ 140(g_tTex2s3): 89(ptr) Variable UniformConstant
+ 144: 6(float) Constant 1050253722
+ 145: 6(float) Constant 1050589266
+ 146: 9(fvec2) ConstantComposite 144 145
+ 159: TypeVector 40(int) 2
+ 160(s4_t): TypeStruct 40(int) 159(ivec2) 40(int)
+ 161: TypePointer Function 160(s4_t)
+ 163: TypeVector 40(int) 4
+ 164: TypePointer Function 163(ivec4)
+ 166: TypeImage 40(int) 2D sampled format:Unknown
+ 167: TypePointer UniformConstant 166
+ 168(g_tTex2s4): 167(ptr) Variable UniformConstant
+ 171: TypeSampledImage 166
+ 173: 6(float) Constant 1053609165
+ 174: 6(float) Constant 1053944709
+ 175: 9(fvec2) ConstantComposite 173 174
+ 178: TypePointer Function 40(int)
+ 194(s5_t): TypeStruct 42(int) 42(int)
+ 195: TypePointer Function 194(s5_t)
+ 197: TypeVector 42(int) 4
+ 198: TypePointer Function 197(ivec4)
+ 200: TypeImage 42(int) 2D sampled format:Unknown
+ 201: TypePointer UniformConstant 200
+ 202(g_tTex2s5): 201(ptr) Variable UniformConstant
+ 205: TypeSampledImage 200
+ 207: 6(float) Constant 1056964608
+ 208: 6(float) Constant 1057132380
+ 209: 9(fvec2) ConstantComposite 207 208
+ 212: TypePointer Function 42(int)
+ 229(g_tTex2s1a): 89(ptr) Variable UniformConstant
+ 233: 6(float) Constant 0
+ 234: 21(fvec4) ConstantComposite 233 233 233 233
+ 237: TypePointer Output 21(fvec4)
+238(@entryPointOutput): 237(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 239: 21(fvec4) FunctionCall 23(@main()
+ Store 238(@entryPointOutput) 239
+ Return
+ FunctionEnd
+13(fn1(t2-tx-struct0-1;): 10(s1_t) Function None 11
+ 12(t1): 8(ptr) FunctionParameter
+ 14: Label
+26(@sampleResultShadow): 25(ptr) Variable Function
+39(@sampleStructTemp): 38(ptr) Variable Function
+ 27: 7 Load 12(t1)
+ 31: 28 Load 30(g_sSamp)
+ 33: 32 SampledImage 27 31
+ 37: 21(fvec4) ImageSampleImplicitLod 33 36
+ Store 26(@sampleResultShadow) 37
+ 45: 44(ptr) AccessChain 26(@sampleResultShadow) 43
+ 46: 6(float) Load 45
+ 47: 44(ptr) AccessChain 39(@sampleStructTemp) 41
+ Store 47 46
+ 50: 44(ptr) AccessChain 26(@sampleResultShadow) 49
+ 51: 6(float) Load 50
+ 52: 44(ptr) AccessChain 39(@sampleStructTemp) 48 43
+ Store 52 51
+ 54: 44(ptr) AccessChain 26(@sampleResultShadow) 53
+ 55: 6(float) Load 54
+ 56: 44(ptr) AccessChain 39(@sampleStructTemp) 48 49
+ Store 56 55
+ 59: 44(ptr) AccessChain 26(@sampleResultShadow) 58
+ 60: 6(float) Load 59
+ 61: 44(ptr) AccessChain 39(@sampleStructTemp) 57
+ Store 61 60
+ 62: 10(s1_t) Load 39(@sampleStructTemp)
+ ReturnValue 62
+ FunctionEnd
+19(fn1(t2-tx-struct1-1;): 16(s2_t) Function None 17
+ 18(t2): 8(ptr) FunctionParameter
+ 20: Label
+65(@sampleResultShadow): 25(ptr) Variable Function
+71(@sampleStructTemp): 70(ptr) Variable Function
+ 66: 7 Load 18(t2)
+ 67: 28 Load 30(g_sSamp)
+ 68: 32 SampledImage 66 67
+ 69: 21(fvec4) ImageSampleImplicitLod 68 36
+ Store 65(@sampleResultShadow) 69
+ 72: 44(ptr) AccessChain 65(@sampleResultShadow) 43
+ 73: 6(float) Load 72
+ 74: 44(ptr) AccessChain 71(@sampleStructTemp) 41
+ Store 74 73
+ 75: 44(ptr) AccessChain 65(@sampleResultShadow) 49
+ 76: 6(float) Load 75
+ 77: 44(ptr) AccessChain 71(@sampleStructTemp) 48 43
+ Store 77 76
+ 78: 44(ptr) AccessChain 65(@sampleResultShadow) 53
+ 79: 6(float) Load 78
+ 80: 44(ptr) AccessChain 71(@sampleStructTemp) 48 49
+ Store 80 79
+ 81: 44(ptr) AccessChain 65(@sampleResultShadow) 58
+ 82: 6(float) Load 81
+ 83: 44(ptr) AccessChain 71(@sampleStructTemp) 48 53
+ Store 83 82
+ 84: 16(s2_t) Load 71(@sampleStructTemp)
+ ReturnValue 84
+ FunctionEnd
+ 23(@main(): 21(fvec4) Function None 22
+ 24: Label
+ 87(s1): 38(ptr) Variable Function
+88(@sampleResultShadow): 25(ptr) Variable Function
+98(@sampleStructTemp): 38(ptr) Variable Function
+ 112(s2): 70(ptr) Variable Function
+113(@sampleResultShadow): 25(ptr) Variable Function
+122(@sampleStructTemp): 70(ptr) Variable Function
+ 138(s3): 137(ptr) Variable Function
+139(@sampleResultShadow): 25(ptr) Variable Function
+148(@sampleStructTemp): 137(ptr) Variable Function
+ 162(s4): 161(ptr) Variable Function
+165(@sampleResultShadow): 164(ptr) Variable Function
+177(@sampleStructTemp): 161(ptr) Variable Function
+ 196(s5): 195(ptr) Variable Function
+199(@sampleResultShadow): 198(ptr) Variable Function
+211(@sampleStructTemp): 195(ptr) Variable Function
+ 220(r0): 38(ptr) Variable Function
+ 221(param): 8(ptr) Variable Function
+ 224(r1): 70(ptr) Variable Function
+ 225(param): 8(ptr) Variable Function
+ 228(r2): 38(ptr) Variable Function
+ 230(param): 8(ptr) Variable Function
+ 91: 7 Load 90(g_tTex2s1)
+ 92: 28 Load 30(g_sSamp)
+ 93: 32 SampledImage 91 92
+ 97: 21(fvec4) ImageSampleImplicitLod 93 96
+ Store 88(@sampleResultShadow) 97
+ 99: 44(ptr) AccessChain 88(@sampleResultShadow) 43
+ 100: 6(float) Load 99
+ 101: 44(ptr) AccessChain 98(@sampleStructTemp) 41
+ Store 101 100
+ 102: 44(ptr) AccessChain 88(@sampleResultShadow) 49
+ 103: 6(float) Load 102
+ 104: 44(ptr) AccessChain 98(@sampleStructTemp) 48 43
+ Store 104 103
+ 105: 44(ptr) AccessChain 88(@sampleResultShadow) 53
+ 106: 6(float) Load 105
+ 107: 44(ptr) AccessChain 98(@sampleStructTemp) 48 49
+ Store 107 106
+ 108: 44(ptr) AccessChain 88(@sampleResultShadow) 58
+ 109: 6(float) Load 108
+ 110: 44(ptr) AccessChain 98(@sampleStructTemp) 57
+ Store 110 109
+ 111: 10(s1_t) Load 98(@sampleStructTemp)
+ Store 87(s1) 111
+ 115: 7 Load 114(g_tTex2s2)
+ 116: 28 Load 30(g_sSamp)
+ 117: 32 SampledImage 115 116
+ 121: 21(fvec4) ImageSampleImplicitLod 117 120
+ Store 113(@sampleResultShadow) 121
+ 123: 44(ptr) AccessChain 113(@sampleResultShadow) 43
+ 124: 6(float) Load 123
+ 125: 44(ptr) AccessChain 122(@sampleStructTemp) 41
+ Store 125 124
+ 126: 44(ptr) AccessChain 113(@sampleResultShadow) 49
+ 127: 6(float) Load 126
+ 128: 44(ptr) AccessChain 122(@sampleStructTemp) 48 43
+ Store 128 127
+ 129: 44(ptr) AccessChain 113(@sampleResultShadow) 53
+ 130: 6(float) Load 129
+ 131: 44(ptr) AccessChain 122(@sampleStructTemp) 48 49
+ Store 131 130
+ 132: 44(ptr) AccessChain 113(@sampleResultShadow) 58
+ 133: 6(float) Load 132
+ 134: 44(ptr) AccessChain 122(@sampleStructTemp) 48 53
+ Store 134 133
+ 135: 16(s2_t) Load 122(@sampleStructTemp)
+ Store 112(s2) 135
+ 141: 7 Load 140(g_tTex2s3)
+ 142: 28 Load 30(g_sSamp)
+ 143: 32 SampledImage 141 142
+ 147: 21(fvec4) ImageSampleImplicitLod 143 146
+ Store 139(@sampleResultShadow) 147
+ 149: 44(ptr) AccessChain 139(@sampleResultShadow) 43
+ 150: 6(float) Load 149
+ 151: 44(ptr) AccessChain 148(@sampleStructTemp) 41 43
+ Store 151 150
+ 152: 44(ptr) AccessChain 139(@sampleResultShadow) 49
+ 153: 6(float) Load 152
+ 154: 44(ptr) AccessChain 148(@sampleStructTemp) 41 49
+ Store 154 153
+ 155: 44(ptr) AccessChain 139(@sampleResultShadow) 53
+ 156: 6(float) Load 155
+ 157: 44(ptr) AccessChain 148(@sampleStructTemp) 48
+ Store 157 156
+ 158: 136(s3_t) Load 148(@sampleStructTemp)
+ Store 138(s3) 158
+ 169: 166 Load 168(g_tTex2s4)
+ 170: 28 Load 30(g_sSamp)
+ 172: 171 SampledImage 169 170
+ 176: 163(ivec4) ImageSampleImplicitLod 172 175
+ Store 165(@sampleResultShadow) 176
+ 179: 178(ptr) AccessChain 165(@sampleResultShadow) 43
+ 180: 40(int) Load 179
+ 181: 178(ptr) AccessChain 177(@sampleStructTemp) 41
+ Store 181 180
+ 182: 178(ptr) AccessChain 165(@sampleResultShadow) 49
+ 183: 40(int) Load 182
+ 184: 6(float) ConvertSToF 183
+ 185: 178(ptr) AccessChain 177(@sampleStructTemp) 48 43
+ Store 185 184
+ 186: 178(ptr) AccessChain 165(@sampleResultShadow) 53
+ 187: 40(int) Load 186
+ 188: 6(float) ConvertSToF 187
+ 189: 178(ptr) AccessChain 177(@sampleStructTemp) 48 49
+ Store 189 188
+ 190: 178(ptr) AccessChain 165(@sampleResultShadow) 58
+ 191: 40(int) Load 190
+ 192: 178(ptr) AccessChain 177(@sampleStructTemp) 57
+ Store 192 191
+ 193: 160(s4_t) Load 177(@sampleStructTemp)
+ Store 162(s4) 193
+ 203: 200 Load 202(g_tTex2s5)
+ 204: 28 Load 30(g_sSamp)
+ 206: 205 SampledImage 203 204
+ 210: 197(ivec4) ImageSampleImplicitLod 206 209
+ Store 199(@sampleResultShadow) 210
+ 213: 212(ptr) AccessChain 199(@sampleResultShadow) 43
+ 214: 42(int) Load 213
+ 215: 212(ptr) AccessChain 211(@sampleStructTemp) 41
+ Store 215 214
+ 216: 212(ptr) AccessChain 199(@sampleResultShadow) 49
+ 217: 42(int) Load 216
+ 218: 212(ptr) AccessChain 211(@sampleStructTemp) 48
+ Store 218 217
+ 219: 194(s5_t) Load 211(@sampleStructTemp)
+ Store 196(s5) 219
+ 222: 7 Load 90(g_tTex2s1)
+ Store 221(param) 222
+ 223: 10(s1_t) FunctionCall 13(fn1(t2-tx-struct0-1;) 221(param)
+ Store 220(r0) 223
+ 226: 7 Load 114(g_tTex2s2)
+ Store 225(param) 226
+ 227: 16(s2_t) FunctionCall 19(fn1(t2-tx-struct1-1;) 225(param)
+ Store 224(r1) 227
+ 231: 7 Load 229(g_tTex2s1a)
+ Store 230(param) 231
+ 232: 10(s1_t) FunctionCall 13(fn1(t2-tx-struct0-1;) 230(param)
+ Store 228(r2) 232
+ ReturnValue 234
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.subvec4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.subvec4.frag.out
new file mode 100644
index 00000000000..deaa82b5c98
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.subvec4.frag.out
@@ -0,0 +1,544 @@
+hlsl.texture.subvec4.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15 Function Definition: @main( ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:? Sequence
+0:24 Sequence
+0:24 move second child to first child ( temp 2-component vector of uint)
+0:24 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:24 textureSize ( temp 2-component vector of uint)
+0:24 'g_tTex2dmsf1' ( uniform texture2DMS)
+0:24 move second child to first child ( temp uint)
+0:24 'WidthU' ( temp uint)
+0:24 direct index ( temp uint)
+0:24 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:24 Constant:
+0:24 0 (const int)
+0:24 move second child to first child ( temp uint)
+0:24 'HeightU' ( temp uint)
+0:24 direct index ( temp uint)
+0:24 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 move second child to first child ( temp uint)
+0:24 'NumberOfSamplesU' ( temp uint)
+0:24 imageQuerySamples ( temp uint)
+0:24 'g_tTex2dmsf1' ( uniform texture2DMS)
+0:25 Sequence
+0:25 move second child to first child ( temp 2-component vector of uint)
+0:25 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:25 textureSize ( temp 2-component vector of uint)
+0:25 'g_tTex2dmsf2' ( uniform texture2DMS)
+0:25 move second child to first child ( temp uint)
+0:25 'WidthU' ( temp uint)
+0:25 direct index ( temp uint)
+0:25 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:25 Constant:
+0:25 0 (const int)
+0:25 move second child to first child ( temp uint)
+0:25 'HeightU' ( temp uint)
+0:25 direct index ( temp uint)
+0:25 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 move second child to first child ( temp uint)
+0:25 'NumberOfSamplesU' ( temp uint)
+0:25 imageQuerySamples ( temp uint)
+0:25 'g_tTex2dmsf2' ( uniform texture2DMS)
+0:26 Sequence
+0:26 move second child to first child ( temp 2-component vector of uint)
+0:26 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:26 textureSize ( temp 2-component vector of uint)
+0:26 'g_tTex2dmsf3' ( uniform texture2DMS)
+0:26 move second child to first child ( temp uint)
+0:26 'WidthU' ( temp uint)
+0:26 direct index ( temp uint)
+0:26 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:26 Constant:
+0:26 0 (const int)
+0:26 move second child to first child ( temp uint)
+0:26 'HeightU' ( temp uint)
+0:26 direct index ( temp uint)
+0:26 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:26 Constant:
+0:26 1 (const int)
+0:26 move second child to first child ( temp uint)
+0:26 'NumberOfSamplesU' ( temp uint)
+0:26 imageQuerySamples ( temp uint)
+0:26 'g_tTex2dmsf3' ( uniform texture2DMS)
+0:27 Sequence
+0:27 move second child to first child ( temp 2-component vector of uint)
+0:27 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:27 textureSize ( temp 2-component vector of uint)
+0:27 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:27 move second child to first child ( temp uint)
+0:27 'WidthU' ( temp uint)
+0:27 direct index ( temp uint)
+0:27 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:27 Constant:
+0:27 0 (const int)
+0:27 move second child to first child ( temp uint)
+0:27 'HeightU' ( temp uint)
+0:27 direct index ( temp uint)
+0:27 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 move second child to first child ( temp uint)
+0:27 'NumberOfSamplesU' ( temp uint)
+0:27 imageQuerySamples ( temp uint)
+0:27 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:29 Construct float ( temp float)
+0:? textureFetch ( temp 4-component vector of float)
+0:29 'g_tTex2dmsf1' ( uniform texture2DMS)
+0:? Constant:
+0:? 1 (const int)
+0:? 2 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:30 Construct vec2 ( temp 2-component vector of float)
+0:? textureFetch ( temp 4-component vector of float)
+0:30 'g_tTex2dmsf2' ( uniform texture2DMS)
+0:? Constant:
+0:? 1 (const int)
+0:? 2 (const int)
+0:30 Constant:
+0:30 3 (const int)
+0:31 Construct vec3 ( temp 3-component vector of float)
+0:? textureFetch ( temp 4-component vector of float)
+0:31 'g_tTex2dmsf3' ( uniform texture2DMS)
+0:? Constant:
+0:? 1 (const int)
+0:? 2 (const int)
+0:31 Constant:
+0:31 3 (const int)
+0:32 textureFetch ( temp 4-component vector of float)
+0:32 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:? Constant:
+0:? 1 (const int)
+0:? 2 (const int)
+0:32 Constant:
+0:32 3 (const int)
+0:34 Construct float ( temp float)
+0:? texture ( temp 4-component vector of float)
+0:34 Construct combined texture-sampler ( temp sampler2D)
+0:34 'g_tTex2df1' ( uniform texture2D)
+0:34 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.200000
+0:35 Construct vec2 ( temp 2-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:35 Construct combined texture-sampler ( temp sampler2D)
+0:35 'g_tTex2df2' ( uniform texture2D)
+0:35 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.200000
+0:36 Construct vec3 ( temp 3-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:36 Construct combined texture-sampler ( temp sampler2D)
+0:36 'g_tTex2df3' ( uniform texture2D)
+0:36 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.200000
+0:37 texture ( temp 4-component vector of float)
+0:37 Construct combined texture-sampler ( temp sampler2D)
+0:37 'g_tTex2df4' ( uniform texture2D)
+0:37 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.200000
+0:39 Branch: Return with expression
+0:39 Constant:
+0:39 0.000000
+0:39 0.000000
+0:39 0.000000
+0:39 0.000000
+0:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tTex2dmsf1' ( uniform texture2DMS)
+0:? 'g_tTex2dmsf2' ( uniform texture2DMS)
+0:? 'g_tTex2dmsf3' ( uniform texture2DMS)
+0:? 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:? 'g_tTex2df1' ( uniform texture2D)
+0:? 'g_tTex2df2' ( uniform texture2D)
+0:? 'g_tTex2df3' ( uniform texture2D)
+0:? 'g_tTex2df4' ( uniform texture2D)
+0:? 'g_sSamp' ( uniform sampler)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15 Function Definition: @main( ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:? Sequence
+0:24 Sequence
+0:24 move second child to first child ( temp 2-component vector of uint)
+0:24 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:24 textureSize ( temp 2-component vector of uint)
+0:24 'g_tTex2dmsf1' ( uniform texture2DMS)
+0:24 move second child to first child ( temp uint)
+0:24 'WidthU' ( temp uint)
+0:24 direct index ( temp uint)
+0:24 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:24 Constant:
+0:24 0 (const int)
+0:24 move second child to first child ( temp uint)
+0:24 'HeightU' ( temp uint)
+0:24 direct index ( temp uint)
+0:24 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 move second child to first child ( temp uint)
+0:24 'NumberOfSamplesU' ( temp uint)
+0:24 imageQuerySamples ( temp uint)
+0:24 'g_tTex2dmsf1' ( uniform texture2DMS)
+0:25 Sequence
+0:25 move second child to first child ( temp 2-component vector of uint)
+0:25 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:25 textureSize ( temp 2-component vector of uint)
+0:25 'g_tTex2dmsf2' ( uniform texture2DMS)
+0:25 move second child to first child ( temp uint)
+0:25 'WidthU' ( temp uint)
+0:25 direct index ( temp uint)
+0:25 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:25 Constant:
+0:25 0 (const int)
+0:25 move second child to first child ( temp uint)
+0:25 'HeightU' ( temp uint)
+0:25 direct index ( temp uint)
+0:25 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 move second child to first child ( temp uint)
+0:25 'NumberOfSamplesU' ( temp uint)
+0:25 imageQuerySamples ( temp uint)
+0:25 'g_tTex2dmsf2' ( uniform texture2DMS)
+0:26 Sequence
+0:26 move second child to first child ( temp 2-component vector of uint)
+0:26 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:26 textureSize ( temp 2-component vector of uint)
+0:26 'g_tTex2dmsf3' ( uniform texture2DMS)
+0:26 move second child to first child ( temp uint)
+0:26 'WidthU' ( temp uint)
+0:26 direct index ( temp uint)
+0:26 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:26 Constant:
+0:26 0 (const int)
+0:26 move second child to first child ( temp uint)
+0:26 'HeightU' ( temp uint)
+0:26 direct index ( temp uint)
+0:26 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:26 Constant:
+0:26 1 (const int)
+0:26 move second child to first child ( temp uint)
+0:26 'NumberOfSamplesU' ( temp uint)
+0:26 imageQuerySamples ( temp uint)
+0:26 'g_tTex2dmsf3' ( uniform texture2DMS)
+0:27 Sequence
+0:27 move second child to first child ( temp 2-component vector of uint)
+0:27 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:27 textureSize ( temp 2-component vector of uint)
+0:27 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:27 move second child to first child ( temp uint)
+0:27 'WidthU' ( temp uint)
+0:27 direct index ( temp uint)
+0:27 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:27 Constant:
+0:27 0 (const int)
+0:27 move second child to first child ( temp uint)
+0:27 'HeightU' ( temp uint)
+0:27 direct index ( temp uint)
+0:27 'sizeQueryTemp' ( temp 2-component vector of uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 move second child to first child ( temp uint)
+0:27 'NumberOfSamplesU' ( temp uint)
+0:27 imageQuerySamples ( temp uint)
+0:27 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:29 Construct float ( temp float)
+0:? textureFetch ( temp 4-component vector of float)
+0:29 'g_tTex2dmsf1' ( uniform texture2DMS)
+0:? Constant:
+0:? 1 (const int)
+0:? 2 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:30 Construct vec2 ( temp 2-component vector of float)
+0:? textureFetch ( temp 4-component vector of float)
+0:30 'g_tTex2dmsf2' ( uniform texture2DMS)
+0:? Constant:
+0:? 1 (const int)
+0:? 2 (const int)
+0:30 Constant:
+0:30 3 (const int)
+0:31 Construct vec3 ( temp 3-component vector of float)
+0:? textureFetch ( temp 4-component vector of float)
+0:31 'g_tTex2dmsf3' ( uniform texture2DMS)
+0:? Constant:
+0:? 1 (const int)
+0:? 2 (const int)
+0:31 Constant:
+0:31 3 (const int)
+0:32 textureFetch ( temp 4-component vector of float)
+0:32 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:? Constant:
+0:? 1 (const int)
+0:? 2 (const int)
+0:32 Constant:
+0:32 3 (const int)
+0:34 Construct float ( temp float)
+0:? texture ( temp 4-component vector of float)
+0:34 Construct combined texture-sampler ( temp sampler2D)
+0:34 'g_tTex2df1' ( uniform texture2D)
+0:34 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.200000
+0:35 Construct vec2 ( temp 2-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:35 Construct combined texture-sampler ( temp sampler2D)
+0:35 'g_tTex2df2' ( uniform texture2D)
+0:35 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.200000
+0:36 Construct vec3 ( temp 3-component vector of float)
+0:? texture ( temp 4-component vector of float)
+0:36 Construct combined texture-sampler ( temp sampler2D)
+0:36 'g_tTex2df3' ( uniform texture2D)
+0:36 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.200000
+0:37 texture ( temp 4-component vector of float)
+0:37 Construct combined texture-sampler ( temp sampler2D)
+0:37 'g_tTex2df4' ( uniform texture2D)
+0:37 'g_sSamp' ( uniform sampler)
+0:? Constant:
+0:? 0.100000
+0:? 0.200000
+0:39 Branch: Return with expression
+0:39 Constant:
+0:39 0.000000
+0:39 0.000000
+0:39 0.000000
+0:39 0.000000
+0:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'g_tTex2dmsf1' ( uniform texture2DMS)
+0:? 'g_tTex2dmsf2' ( uniform texture2DMS)
+0:? 'g_tTex2dmsf3' ( uniform texture2DMS)
+0:? 'g_tTex2dmsf4' ( uniform texture2DMS)
+0:? 'g_tTex2df1' ( uniform texture2D)
+0:? 'g_tTex2df2' ( uniform texture2D)
+0:? 'g_tTex2df3' ( uniform texture2D)
+0:? 'g_tTex2df4' ( uniform texture2D)
+0:? 'g_sSamp' ( uniform sampler)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 130
+
+ Capability Shader
+ Capability ImageQuery
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 128
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 14 "sizeQueryTemp"
+ Name 17 "g_tTex2dmsf1"
+ Name 21 "WidthU"
+ Name 25 "HeightU"
+ Name 29 "NumberOfSamplesU"
+ Name 32 "sizeQueryTemp"
+ Name 33 "g_tTex2dmsf2"
+ Name 42 "sizeQueryTemp"
+ Name 43 "g_tTex2dmsf3"
+ Name 52 "sizeQueryTemp"
+ Name 53 "g_tTex2dmsf4"
+ Name 88 "g_tTex2df1"
+ Name 92 "g_sSamp"
+ Name 101 "g_tTex2df2"
+ Name 109 "g_tTex2df3"
+ Name 118 "g_tTex2df4"
+ Name 128 "@entryPointOutput"
+ Decorate 17(g_tTex2dmsf1) DescriptorSet 0
+ Decorate 33(g_tTex2dmsf2) DescriptorSet 0
+ Decorate 43(g_tTex2dmsf3) DescriptorSet 0
+ Decorate 53(g_tTex2dmsf4) DescriptorSet 0
+ Decorate 88(g_tTex2df1) DescriptorSet 0
+ Decorate 92(g_sSamp) DescriptorSet 0
+ Decorate 101(g_tTex2df2) DescriptorSet 0
+ Decorate 109(g_tTex2df3) DescriptorSet 0
+ Decorate 118(g_tTex2df4) DescriptorSet 0
+ Decorate 128(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeInt 32 0
+ 12: TypeVector 11(int) 2
+ 13: TypePointer Function 12(ivec2)
+ 15: TypeImage 6(float) 2D multi-sampled sampled format:Unknown
+ 16: TypePointer UniformConstant 15
+17(g_tTex2dmsf1): 16(ptr) Variable UniformConstant
+ 20: TypePointer Function 11(int)
+ 22: 11(int) Constant 0
+ 26: 11(int) Constant 1
+33(g_tTex2dmsf2): 16(ptr) Variable UniformConstant
+43(g_tTex2dmsf3): 16(ptr) Variable UniformConstant
+53(g_tTex2dmsf4): 16(ptr) Variable UniformConstant
+ 63: TypeInt 32 1
+ 64: TypeVector 63(int) 2
+ 65: 63(int) Constant 1
+ 66: 63(int) Constant 2
+ 67: 64(ivec2) ConstantComposite 65 66
+ 68: 63(int) Constant 3
+ 73: TypeVector 6(float) 2
+ 79: TypeVector 6(float) 3
+ 86: TypeImage 6(float) 2D sampled format:Unknown
+ 87: TypePointer UniformConstant 86
+ 88(g_tTex2df1): 87(ptr) Variable UniformConstant
+ 90: TypeSampler
+ 91: TypePointer UniformConstant 90
+ 92(g_sSamp): 91(ptr) Variable UniformConstant
+ 94: TypeSampledImage 86
+ 96: 6(float) Constant 1036831949
+ 97: 6(float) Constant 1045220557
+ 98: 73(fvec2) ConstantComposite 96 97
+ 101(g_tTex2df2): 87(ptr) Variable UniformConstant
+ 109(g_tTex2df3): 87(ptr) Variable UniformConstant
+ 118(g_tTex2df4): 87(ptr) Variable UniformConstant
+ 123: 6(float) Constant 0
+ 124: 7(fvec4) ConstantComposite 123 123 123 123
+ 127: TypePointer Output 7(fvec4)
+128(@entryPointOutput): 127(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 129: 7(fvec4) FunctionCall 9(@main()
+ Store 128(@entryPointOutput) 129
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+14(sizeQueryTemp): 13(ptr) Variable Function
+ 21(WidthU): 20(ptr) Variable Function
+ 25(HeightU): 20(ptr) Variable Function
+29(NumberOfSamplesU): 20(ptr) Variable Function
+32(sizeQueryTemp): 13(ptr) Variable Function
+42(sizeQueryTemp): 13(ptr) Variable Function
+52(sizeQueryTemp): 13(ptr) Variable Function
+ 18: 15 Load 17(g_tTex2dmsf1)
+ 19: 12(ivec2) ImageQuerySize 18
+ Store 14(sizeQueryTemp) 19
+ 23: 20(ptr) AccessChain 14(sizeQueryTemp) 22
+ 24: 11(int) Load 23
+ Store 21(WidthU) 24
+ 27: 20(ptr) AccessChain 14(sizeQueryTemp) 26
+ 28: 11(int) Load 27
+ Store 25(HeightU) 28
+ 30: 15 Load 17(g_tTex2dmsf1)
+ 31: 11(int) ImageQuerySamples 30
+ Store 29(NumberOfSamplesU) 31
+ 34: 15 Load 33(g_tTex2dmsf2)
+ 35: 12(ivec2) ImageQuerySize 34
+ Store 32(sizeQueryTemp) 35
+ 36: 20(ptr) AccessChain 32(sizeQueryTemp) 22
+ 37: 11(int) Load 36
+ Store 21(WidthU) 37
+ 38: 20(ptr) AccessChain 32(sizeQueryTemp) 26
+ 39: 11(int) Load 38
+ Store 25(HeightU) 39
+ 40: 15 Load 33(g_tTex2dmsf2)
+ 41: 11(int) ImageQuerySamples 40
+ Store 29(NumberOfSamplesU) 41
+ 44: 15 Load 43(g_tTex2dmsf3)
+ 45: 12(ivec2) ImageQuerySize 44
+ Store 42(sizeQueryTemp) 45
+ 46: 20(ptr) AccessChain 42(sizeQueryTemp) 22
+ 47: 11(int) Load 46
+ Store 21(WidthU) 47
+ 48: 20(ptr) AccessChain 42(sizeQueryTemp) 26
+ 49: 11(int) Load 48
+ Store 25(HeightU) 49
+ 50: 15 Load 43(g_tTex2dmsf3)
+ 51: 11(int) ImageQuerySamples 50
+ Store 29(NumberOfSamplesU) 51
+ 54: 15 Load 53(g_tTex2dmsf4)
+ 55: 12(ivec2) ImageQuerySize 54
+ Store 52(sizeQueryTemp) 55
+ 56: 20(ptr) AccessChain 52(sizeQueryTemp) 22
+ 57: 11(int) Load 56
+ Store 21(WidthU) 57
+ 58: 20(ptr) AccessChain 52(sizeQueryTemp) 26
+ 59: 11(int) Load 58
+ Store 25(HeightU) 59
+ 60: 15 Load 53(g_tTex2dmsf4)
+ 61: 11(int) ImageQuerySamples 60
+ Store 29(NumberOfSamplesU) 61
+ 62: 15 Load 17(g_tTex2dmsf1)
+ 69: 7(fvec4) ImageFetch 62 67 Sample 68
+ 70: 6(float) CompositeExtract 69 0
+ 71: 15 Load 33(g_tTex2dmsf2)
+ 72: 7(fvec4) ImageFetch 71 67 Sample 68
+ 74: 6(float) CompositeExtract 72 0
+ 75: 6(float) CompositeExtract 72 1
+ 76: 73(fvec2) CompositeConstruct 74 75
+ 77: 15 Load 43(g_tTex2dmsf3)
+ 78: 7(fvec4) ImageFetch 77 67 Sample 68
+ 80: 6(float) CompositeExtract 78 0
+ 81: 6(float) CompositeExtract 78 1
+ 82: 6(float) CompositeExtract 78 2
+ 83: 79(fvec3) CompositeConstruct 80 81 82
+ 84: 15 Load 53(g_tTex2dmsf4)
+ 85: 7(fvec4) ImageFetch 84 67 Sample 68
+ 89: 86 Load 88(g_tTex2df1)
+ 93: 90 Load 92(g_sSamp)
+ 95: 94 SampledImage 89 93
+ 99: 7(fvec4) ImageSampleImplicitLod 95 98
+ 100: 6(float) CompositeExtract 99 0
+ 102: 86 Load 101(g_tTex2df2)
+ 103: 90 Load 92(g_sSamp)
+ 104: 94 SampledImage 102 103
+ 105: 7(fvec4) ImageSampleImplicitLod 104 98
+ 106: 6(float) CompositeExtract 105 0
+ 107: 6(float) CompositeExtract 105 1
+ 108: 73(fvec2) CompositeConstruct 106 107
+ 110: 86 Load 109(g_tTex2df3)
+ 111: 90 Load 92(g_sSamp)
+ 112: 94 SampledImage 110 111
+ 113: 7(fvec4) ImageSampleImplicitLod 112 98
+ 114: 6(float) CompositeExtract 113 0
+ 115: 6(float) CompositeExtract 113 1
+ 116: 6(float) CompositeExtract 113 2
+ 117: 79(fvec3) CompositeConstruct 114 115 116
+ 119: 86 Load 118(g_tTex2df4)
+ 120: 90 Load 92(g_sSamp)
+ 121: 94 SampledImage 119 120
+ 122: 7(fvec4) ImageSampleImplicitLod 121 98
+ ReturnValue 124
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texturebuffer.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texturebuffer.frag.out
new file mode 100644
index 00000000000..e1e36b00f25
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texturebuffer.frag.out
@@ -0,0 +1,153 @@
+hlsl.texturebuffer.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:15 'pos' ( in 4-component vector of float)
+0:? Sequence
+0:16 Branch: Return with expression
+0:16 add ( temp 4-component vector of float)
+0:16 f: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:16 'TextureBuffer_var' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f, layout( row_major std430) buffer 4-component vector of int i})
+0:16 Constant:
+0:16 0 (const int)
+0:16 f2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:16 'anon@0' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f2, layout( row_major std430) buffer 4-component vector of int i2})
+0:16 Constant:
+0:16 0 (const uint)
+0:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'TextureBuffer_var' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f, layout( row_major std430) buffer 4-component vector of int i})
+0:? 'anon@0' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f2, layout( row_major std430) buffer 4-component vector of int i2})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15 Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:15 'pos' ( in 4-component vector of float)
+0:? Sequence
+0:16 Branch: Return with expression
+0:16 add ( temp 4-component vector of float)
+0:16 f: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:16 'TextureBuffer_var' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f, layout( row_major std430) buffer 4-component vector of int i})
+0:16 Constant:
+0:16 0 (const int)
+0:16 f2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:16 'anon@0' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f2, layout( row_major std430) buffer 4-component vector of int i2})
+0:16 Constant:
+0:16 0 (const uint)
+0:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15 Function Call: @main(vf4; ( temp 4-component vector of float)
+0:? 'pos' ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'TextureBuffer_var' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f, layout( row_major std430) buffer 4-component vector of int i})
+0:? 'anon@0' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f2, layout( row_major std430) buffer 4-component vector of int i2})
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:? 'pos' ( in 4-component vector of float FragCoord)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 39
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 32 35
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "@main(vf4;"
+ Name 10 "pos"
+ Name 15 "TextureBuffer_var"
+ MemberName 15(TextureBuffer_var) 0 "f"
+ MemberName 15(TextureBuffer_var) 1 "i"
+ Name 17 "TextureBuffer_var"
+ Name 22 "tbuf2"
+ MemberName 22(tbuf2) 0 "f2"
+ MemberName 22(tbuf2) 1 "i2"
+ Name 24 ""
+ Name 30 "pos"
+ Name 32 "pos"
+ Name 35 "@entryPointOutput"
+ Name 36 "param"
+ MemberDecorate 15(TextureBuffer_var) 0 NonWritable
+ MemberDecorate 15(TextureBuffer_var) 0 Offset 0
+ MemberDecorate 15(TextureBuffer_var) 1 NonWritable
+ MemberDecorate 15(TextureBuffer_var) 1 Offset 16
+ Decorate 15(TextureBuffer_var) BufferBlock
+ Decorate 17(TextureBuffer_var) DescriptorSet 0
+ Decorate 17(TextureBuffer_var) Binding 0
+ MemberDecorate 22(tbuf2) 0 NonWritable
+ MemberDecorate 22(tbuf2) 0 Offset 0
+ MemberDecorate 22(tbuf2) 1 NonWritable
+ MemberDecorate 22(tbuf2) 1 Offset 16
+ Decorate 22(tbuf2) BufferBlock
+ Decorate 24 DescriptorSet 0
+ Decorate 32(pos) BuiltIn FragCoord
+ Decorate 35(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 9: TypeFunction 7(fvec4) 8(ptr)
+ 13: TypeInt 32 1
+ 14: TypeVector 13(int) 4
+15(TextureBuffer_var): TypeStruct 7(fvec4) 14(ivec4)
+ 16: TypePointer Uniform 15(TextureBuffer_var)
+17(TextureBuffer_var): 16(ptr) Variable Uniform
+ 18: 13(int) Constant 0
+ 19: TypePointer Uniform 7(fvec4)
+ 22(tbuf2): TypeStruct 7(fvec4) 14(ivec4)
+ 23: TypePointer Uniform 22(tbuf2)
+ 24: 23(ptr) Variable Uniform
+ 31: TypePointer Input 7(fvec4)
+ 32(pos): 31(ptr) Variable Input
+ 34: TypePointer Output 7(fvec4)
+35(@entryPointOutput): 34(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 30(pos): 8(ptr) Variable Function
+ 36(param): 8(ptr) Variable Function
+ 33: 7(fvec4) Load 32(pos)
+ Store 30(pos) 33
+ 37: 7(fvec4) Load 30(pos)
+ Store 36(param) 37
+ 38: 7(fvec4) FunctionCall 11(@main(vf4;) 36(param)
+ Store 35(@entryPointOutput) 38
+ Return
+ FunctionEnd
+ 11(@main(vf4;): 7(fvec4) Function None 9
+ 10(pos): 8(ptr) FunctionParameter
+ 12: Label
+ 20: 19(ptr) AccessChain 17(TextureBuffer_var) 18
+ 21: 7(fvec4) Load 20
+ 25: 19(ptr) AccessChain 24 18
+ 26: 7(fvec4) Load 25
+ 27: 7(fvec4) FAdd 21 26
+ ReturnValue 27
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.this.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.this.frag.out
index 8619468e2e6..f538abc32bb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.this.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.this.frag.out
@@ -1,5 +1,5 @@
hlsl.this.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -121,7 +121,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Sequence
@@ -240,7 +240,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 98
Capability Shader
@@ -248,6 +248,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 96
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "type1"
MemberName 9(type1) 0 "bar"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out
index 9e1db24f35e..94bea4cd3b5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out
@@ -1,5 +1,5 @@
hlsl.tx.bracket.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: Fn1(vi4; ( temp 4-component vector of int)
@@ -183,7 +183,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:45 Sequence
0:45 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:45 Color: direct index for structure ( temp 4-component vector of float)
0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:45 Constant:
@@ -206,13 +206,13 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di4a' ( uniform itexture2DArray)
0:? 'g_tTex2du4a' ( uniform utexture2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: Fn1(vi4; ( temp 4-component vector of int)
@@ -396,7 +396,7 @@ gl_FragCoord origin is upper left
0:? Sequence
0:45 Sequence
0:45 move second child to first child ( temp 4-component vector of float)
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:45 Color: direct index for structure ( temp 4-component vector of float)
0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:45 Constant:
@@ -419,10 +419,10 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2di4a' ( uniform itexture2DArray)
0:? 'g_tTex2du4a' ( uniform utexture2DArray)
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4})
-0:? 'Color' (layout( location=0) out 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 188
Capability Shader
@@ -431,6 +431,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 164
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "Fn1(vi4;"
Name 10 "x"
@@ -474,7 +475,7 @@ gl_FragCoord origin is upper left
Name 147 "param"
Name 153 "param"
Name 156 "psout"
- Name 164 "Color"
+ Name 164 "@entryPointOutput.Color"
Name 169 "g_sSamp"
Name 172 "g_tTex1df4a"
Name 175 "g_tTex1di4a"
@@ -502,7 +503,7 @@ gl_FragCoord origin is upper left
Decorate 114(g_tTex3df4) DescriptorSet 0
Decorate 124(g_tTex3di4) DescriptorSet 0
Decorate 132(g_tTex3du4) DescriptorSet 0
- Decorate 164(Color) Location 0
+ Decorate 164(@entryPointOutput.Color) Location 0
Decorate 169(g_sSamp) DescriptorSet 0
Decorate 169(g_sSamp) Binding 0
Decorate 172(g_tTex1df4a) DescriptorSet 0
@@ -572,7 +573,7 @@ gl_FragCoord origin is upper left
157: 20(float) Constant 1065353216
158: 21(fvec4) ConstantComposite 157 157 157 157
163: TypePointer Output 21(fvec4)
- 164(Color): 163(ptr) Variable Output
+164(@entryPointOutput.Color): 163(ptr) Variable Output
167: TypeSampler
168: TypePointer UniformConstant 167
169(g_sSamp): 168(ptr) Variable UniformConstant
@@ -598,7 +599,7 @@ gl_FragCoord origin is upper left
5: Label
165:30(PS_OUTPUT) FunctionCall 32(@main()
166: 21(fvec4) CompositeExtract 165 0
- Store 164(Color) 166
+ Store 164(@entryPointOutput.Color) 166
Return
FunctionEnd
11(Fn1(vi4;): 7(ivec4) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.overload.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.overload.frag.out
new file mode 100644
index 00000000000..6e6bef07f07
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.overload.frag.out
@@ -0,0 +1,247 @@
+hlsl.tx.overload.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: Func(t211; ( temp float)
+0:8 Function Parameters:
+0:8 'DummyTex' ( in texture2D)
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 Constant:
+0:8 1.000000
+0:9 Function Definition: Func(t21; ( temp 4-component vector of float)
+0:9 Function Parameters:
+0:9 'DummyTex' ( in texture2D)
+0:? Sequence
+0:9 Branch: Return with expression
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:11 Function Definition: Func(I211; ( temp float)
+0:11 Function Parameters:
+0:11 'DummyTex' (layout( r32f) in image2D)
+0:? Sequence
+0:11 Branch: Return with expression
+0:11 Constant:
+0:11 1.000000
+0:12 Function Definition: Func(I21; ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:12 'DummyTex' (layout( rgba32f) in image2D)
+0:? Sequence
+0:12 Branch: Return with expression
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:15 Function Definition: @main( ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:? Sequence
+0:16 Branch: Return with expression
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 Function Call: Func(t211; ( temp float)
+0:16 'tf1' ( uniform texture2D)
+0:16 Function Call: Func(t21; ( temp 4-component vector of float)
+0:16 'tf4' ( uniform texture2D)
+0:16 Function Call: Func(I211; ( temp float)
+0:16 'twf1' (layout( r32f) uniform image2D)
+0:16 Function Call: Func(I21; ( temp 4-component vector of float)
+0:16 'twf4' (layout( rgba32f) uniform image2D)
+0:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'tf1' ( uniform texture2D)
+0:? 'tf4' ( uniform texture2D)
+0:? 'twf1' (layout( r32f) uniform image2D)
+0:? 'twf4' (layout( rgba32f) uniform image2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8 Function Definition: Func(t211; ( temp float)
+0:8 Function Parameters:
+0:8 'DummyTex' ( in texture2D)
+0:? Sequence
+0:8 Branch: Return with expression
+0:8 Constant:
+0:8 1.000000
+0:9 Function Definition: Func(t21; ( temp 4-component vector of float)
+0:9 Function Parameters:
+0:9 'DummyTex' ( in texture2D)
+0:? Sequence
+0:9 Branch: Return with expression
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:11 Function Definition: Func(I211; ( temp float)
+0:11 Function Parameters:
+0:11 'DummyTex' (layout( r32f) in image2D)
+0:? Sequence
+0:11 Branch: Return with expression
+0:11 Constant:
+0:11 1.000000
+0:12 Function Definition: Func(I21; ( temp 4-component vector of float)
+0:12 Function Parameters:
+0:12 'DummyTex' (layout( rgba32f) in image2D)
+0:? Sequence
+0:12 Branch: Return with expression
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:15 Function Definition: @main( ( temp 4-component vector of float)
+0:15 Function Parameters:
+0:? Sequence
+0:16 Branch: Return with expression
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 add ( temp 4-component vector of float)
+0:16 Function Call: Func(t211; ( temp float)
+0:16 'tf1' ( uniform texture2D)
+0:16 Function Call: Func(t21; ( temp 4-component vector of float)
+0:16 'tf4' ( uniform texture2D)
+0:16 Function Call: Func(I211; ( temp float)
+0:16 'twf1' (layout( r32f) uniform image2D)
+0:16 Function Call: Func(I21; ( temp 4-component vector of float)
+0:16 'twf4' (layout( rgba32f) uniform image2D)
+0:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'tf1' ( uniform texture2D)
+0:? 'tf4' ( uniform texture2D)
+0:? 'twf1' (layout( r32f) uniform image2D)
+0:? 'twf4' (layout( rgba32f) uniform image2D)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 73
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 71
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 11 "Func(t211;"
+ Name 10 "DummyTex"
+ Name 16 "Func(t21;"
+ Name 15 "DummyTex"
+ Name 22 "Func(I211;"
+ Name 21 "DummyTex"
+ Name 28 "Func(I21;"
+ Name 27 "DummyTex"
+ Name 31 "@main("
+ Name 45 "tf1"
+ Name 46 "param"
+ Name 49 "tf4"
+ Name 50 "param"
+ Name 56 "twf1"
+ Name 57 "param"
+ Name 63 "twf4"
+ Name 64 "param"
+ Name 71 "@entryPointOutput"
+ Decorate 45(tf1) DescriptorSet 0
+ Decorate 49(tf4) DescriptorSet 0
+ Decorate 56(twf1) DescriptorSet 0
+ Decorate 63(twf4) DescriptorSet 0
+ Decorate 71(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeImage 6(float) 2D sampled format:Unknown
+ 8: TypePointer Function 7
+ 9: TypeFunction 6(float) 8(ptr)
+ 13: TypeVector 6(float) 4
+ 14: TypeFunction 13(fvec4) 8(ptr)
+ 18: TypeImage 6(float) 2D nonsampled format:R32f
+ 19: TypePointer Function 18
+ 20: TypeFunction 6(float) 19(ptr)
+ 24: TypeImage 6(float) 2D nonsampled format:Rgba32f
+ 25: TypePointer Function 24
+ 26: TypeFunction 13(fvec4) 25(ptr)
+ 30: TypeFunction 13(fvec4)
+ 33: 6(float) Constant 1065353216
+ 36: 6(float) Constant 0
+ 37: 13(fvec4) ConstantComposite 36 36 36 36
+ 44: TypePointer UniformConstant 7
+ 45(tf1): 44(ptr) Variable UniformConstant
+ 49(tf4): 44(ptr) Variable UniformConstant
+ 55: TypePointer UniformConstant 18
+ 56(twf1): 55(ptr) Variable UniformConstant
+ 62: TypePointer UniformConstant 24
+ 63(twf4): 62(ptr) Variable UniformConstant
+ 70: TypePointer Output 13(fvec4)
+71(@entryPointOutput): 70(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 72: 13(fvec4) FunctionCall 31(@main()
+ Store 71(@entryPointOutput) 72
+ Return
+ FunctionEnd
+ 11(Func(t211;): 6(float) Function None 9
+ 10(DummyTex): 8(ptr) FunctionParameter
+ 12: Label
+ ReturnValue 33
+ FunctionEnd
+ 16(Func(t21;): 13(fvec4) Function None 14
+ 15(DummyTex): 8(ptr) FunctionParameter
+ 17: Label
+ ReturnValue 37
+ FunctionEnd
+ 22(Func(I211;): 6(float) Function None 20
+ 21(DummyTex): 19(ptr) FunctionParameter
+ 23: Label
+ ReturnValue 33
+ FunctionEnd
+ 28(Func(I21;): 13(fvec4) Function None 26
+ 27(DummyTex): 25(ptr) FunctionParameter
+ 29: Label
+ ReturnValue 37
+ FunctionEnd
+ 31(@main(): 13(fvec4) Function None 30
+ 32: Label
+ 46(param): 8(ptr) Variable Function
+ 50(param): 8(ptr) Variable Function
+ 57(param): 19(ptr) Variable Function
+ 64(param): 25(ptr) Variable Function
+ 47: 7 Load 45(tf1)
+ Store 46(param) 47
+ 48: 6(float) FunctionCall 11(Func(t211;) 46(param)
+ 51: 7 Load 49(tf4)
+ Store 50(param) 51
+ 52: 13(fvec4) FunctionCall 16(Func(t21;) 50(param)
+ 53: 13(fvec4) CompositeConstruct 48 48 48 48
+ 54: 13(fvec4) FAdd 53 52
+ 58: 18 Load 56(twf1)
+ Store 57(param) 58
+ 59: 6(float) FunctionCall 22(Func(I211;) 57(param)
+ 60: 13(fvec4) CompositeConstruct 59 59 59 59
+ 61: 13(fvec4) FAdd 54 60
+ 65: 24 Load 63(twf4)
+ Store 64(param) 65
+ 66: 13(fvec4) FunctionCall 28(Func(I21;) 64(param)
+ 67: 13(fvec4) FAdd 61 66
+ ReturnValue 67
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.half.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.half.frag.out
index 104c7394690..75750f92efc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.half.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.half.frag.out
@@ -1,47 +1,75 @@
hlsl.type.half.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @main( ( temp 4-component vector of float)
0:3 Function Parameters:
0:? Sequence
0:4 Sequence
-0:4 move second child to first child ( temp mediump float)
-0:4 'h0' ( temp mediump float)
+0:4 move second child to first child ( temp float)
+0:4 'h0' ( temp float)
0:4 Constant:
0:4 0.000000
0:5 Sequence
-0:5 move second child to first child ( temp mediump 1-component vector of float)
-0:5 'h1' ( temp mediump 1-component vector of float)
+0:5 move second child to first child ( temp 1-component vector of float)
+0:5 'h1' ( temp 1-component vector of float)
0:5 Constant:
0:5 1.000000
0:6 Sequence
-0:6 move second child to first child ( temp mediump 2-component vector of float)
-0:6 'h2' ( temp mediump 2-component vector of float)
+0:6 move second child to first child ( temp 2-component vector of float)
+0:6 'h2' ( temp 2-component vector of float)
0:6 Constant:
0:6 2.000000
0:6 2.000000
0:7 Sequence
-0:7 move second child to first child ( temp mediump 3-component vector of float)
-0:7 'h3' ( temp mediump 3-component vector of float)
+0:7 move second child to first child ( temp 3-component vector of float)
+0:7 'h3' ( temp 3-component vector of float)
0:7 Constant:
0:7 3.000000
0:7 3.000000
0:7 3.000000
0:8 Sequence
-0:8 move second child to first child ( temp mediump 4-component vector of float)
-0:8 'h4' ( temp mediump 4-component vector of float)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 'h4' ( temp 4-component vector of float)
0:8 Constant:
0:8 4.000000
0:8 4.000000
0:8 4.000000
0:8 4.000000
-0:10 Branch: Return with expression
-0:10 Constant:
-0:10 0.000000
-0:10 0.000000
-0:10 0.000000
-0:10 0.000000
+0:15 Sequence
+0:15 move second child to first child ( temp 2X2 matrix of float)
+0:15 'h22' ( temp 2X2 matrix of float)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:16 Sequence
+0:16 move second child to first child ( temp 2X3 matrix of float)
+0:16 'h23' ( temp 2X3 matrix of float)
+0:16 Constant:
+0:16 4.900000
+0:16 4.900000
+0:16 4.900000
+0:16 4.900000
+0:16 4.900000
+0:16 4.900000
+0:27 Branch: Return with expression
+0:27 Construct vec4 ( temp 4-component vector of float)
+0:27 add ( temp float)
+0:27 add ( temp float)
+0:27 direct index ( temp float)
+0:27 direct index ( temp 3-component vector of float)
+0:27 'h23' ( temp 2X3 matrix of float)
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:27 direct index ( temp float)
+0:27 'h4' ( temp 4-component vector of float)
+0:27 Constant:
+0:27 1 (const int)
+0:27 'h0' ( temp float)
0:3 Function Definition: main( ( temp void)
0:3 Function Parameters:
0:? Sequence
@@ -55,49 +83,77 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: @main( ( temp 4-component vector of float)
0:3 Function Parameters:
0:? Sequence
0:4 Sequence
-0:4 move second child to first child ( temp mediump float)
-0:4 'h0' ( temp mediump float)
+0:4 move second child to first child ( temp float)
+0:4 'h0' ( temp float)
0:4 Constant:
0:4 0.000000
0:5 Sequence
-0:5 move second child to first child ( temp mediump 1-component vector of float)
-0:5 'h1' ( temp mediump 1-component vector of float)
+0:5 move second child to first child ( temp 1-component vector of float)
+0:5 'h1' ( temp 1-component vector of float)
0:5 Constant:
0:5 1.000000
0:6 Sequence
-0:6 move second child to first child ( temp mediump 2-component vector of float)
-0:6 'h2' ( temp mediump 2-component vector of float)
+0:6 move second child to first child ( temp 2-component vector of float)
+0:6 'h2' ( temp 2-component vector of float)
0:6 Constant:
0:6 2.000000
0:6 2.000000
0:7 Sequence
-0:7 move second child to first child ( temp mediump 3-component vector of float)
-0:7 'h3' ( temp mediump 3-component vector of float)
+0:7 move second child to first child ( temp 3-component vector of float)
+0:7 'h3' ( temp 3-component vector of float)
0:7 Constant:
0:7 3.000000
0:7 3.000000
0:7 3.000000
0:8 Sequence
-0:8 move second child to first child ( temp mediump 4-component vector of float)
-0:8 'h4' ( temp mediump 4-component vector of float)
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 'h4' ( temp 4-component vector of float)
0:8 Constant:
0:8 4.000000
0:8 4.000000
0:8 4.000000
0:8 4.000000
-0:10 Branch: Return with expression
-0:10 Constant:
-0:10 0.000000
-0:10 0.000000
-0:10 0.000000
-0:10 0.000000
+0:15 Sequence
+0:15 move second child to first child ( temp 2X2 matrix of float)
+0:15 'h22' ( temp 2X2 matrix of float)
+0:? Constant:
+0:? 1.000000
+0:? 2.000000
+0:? 3.000000
+0:? 4.000000
+0:16 Sequence
+0:16 move second child to first child ( temp 2X3 matrix of float)
+0:16 'h23' ( temp 2X3 matrix of float)
+0:16 Constant:
+0:16 4.900000
+0:16 4.900000
+0:16 4.900000
+0:16 4.900000
+0:16 4.900000
+0:16 4.900000
+0:27 Branch: Return with expression
+0:27 Construct vec4 ( temp 4-component vector of float)
+0:27 add ( temp float)
+0:27 add ( temp float)
+0:27 direct index ( temp float)
+0:27 direct index ( temp 3-component vector of float)
+0:27 'h23' ( temp 2X3 matrix of float)
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:27 direct index ( temp float)
+0:27 'h4' ( temp 4-component vector of float)
+0:27 Constant:
+0:27 1 (const int)
+0:27 'h0' ( temp float)
0:3 Function Definition: main( ( temp void)
0:3 Function Parameters:
0:? Sequence
@@ -108,14 +164,15 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 36
+// Generated by (magic number): 80002
+// Id's are bound by 60
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 34
+ EntryPoint Fragment 4 "main" 58
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 9 "@main("
Name 12 "h0"
@@ -123,13 +180,10 @@ gl_FragCoord origin is upper left
Name 18 "h2"
Name 23 "h3"
Name 27 "h4"
- Name 34 "@entryPointOutput"
- Decorate 12(h0) RelaxedPrecision
- Decorate 14(h1) RelaxedPrecision
- Decorate 18(h2) RelaxedPrecision
- Decorate 23(h3) RelaxedPrecision
- Decorate 27(h4) RelaxedPrecision
- Decorate 34(@entryPointOutput) Location 0
+ Name 32 "h22"
+ Name 38 "h23"
+ Name 58 "@entryPointOutput"
+ Decorate 58(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -149,13 +203,27 @@ gl_FragCoord origin is upper left
26: TypePointer Function 7(fvec4)
28: 6(float) Constant 1082130432
29: 7(fvec4) ConstantComposite 28 28 28 28
- 30: 7(fvec4) ConstantComposite 13 13 13 13
- 33: TypePointer Output 7(fvec4)
-34(@entryPointOutput): 33(ptr) Variable Output
+ 30: TypeMatrix 16(fvec2) 2
+ 31: TypePointer Function 30
+ 33: 16(fvec2) ConstantComposite 15 19
+ 34: 16(fvec2) ConstantComposite 24 28
+ 35: 30 ConstantComposite 33 34
+ 36: TypeMatrix 21(fvec3) 2
+ 37: TypePointer Function 36
+ 39: 6(float) Constant 1084017869
+ 40: 21(fvec3) ConstantComposite 39 39 39
+ 41: 36 ConstantComposite 40 40
+ 42: TypeInt 32 1
+ 43: 42(int) Constant 0
+ 44: TypeInt 32 0
+ 45: 44(int) Constant 0
+ 48: 44(int) Constant 1
+ 57: TypePointer Output 7(fvec4)
+58(@entryPointOutput): 57(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 35: 7(fvec4) FunctionCall 9(@main()
- Store 34(@entryPointOutput) 35
+ 59: 7(fvec4) FunctionCall 9(@main()
+ Store 58(@entryPointOutput) 59
Return
FunctionEnd
9(@main(): 7(fvec4) Function None 8
@@ -165,10 +233,22 @@ gl_FragCoord origin is upper left
18(h2): 17(ptr) Variable Function
23(h3): 22(ptr) Variable Function
27(h4): 26(ptr) Variable Function
+ 32(h22): 31(ptr) Variable Function
+ 38(h23): 37(ptr) Variable Function
Store 12(h0) 13
Store 14(h1) 15
Store 18(h2) 20
Store 23(h3) 25
Store 27(h4) 29
- ReturnValue 30
+ Store 32(h22) 35
+ Store 38(h23) 41
+ 46: 11(ptr) AccessChain 38(h23) 43 45
+ 47: 6(float) Load 46
+ 49: 11(ptr) AccessChain 27(h4) 48
+ 50: 6(float) Load 49
+ 51: 6(float) FAdd 47 50
+ 52: 6(float) Load 12(h0)
+ 53: 6(float) FAdd 51 52
+ 54: 7(fvec4) CompositeConstruct 53 53 53 53
+ ReturnValue 54
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.identifier.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.identifier.frag.out
index e8a763c9798..fe6ac01d49c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.identifier.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.type.identifier.frag.out
@@ -1,5 +1,5 @@
hlsl.type.identifier.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:6 Function Definition: fn(f1; ( temp float)
@@ -50,8 +50,8 @@ gl_FragCoord origin is upper left
0:15 'min10float' ( temp mediump float)
0:15 'min16float' ( temp mediump float)
0:16 Sequence
-0:16 move second child to first child ( temp mediump float)
-0:16 'half' ( temp mediump float)
+0:16 move second child to first child ( temp float)
+0:16 'half' ( temp float)
0:16 Constant:
0:16 0.500000
0:? Sequence
@@ -99,9 +99,28 @@ gl_FragCoord origin is upper left
0:25 'float' ( temp mediump float)
0:25 Function Call: fn(f1; ( temp mediump float)
0:25 'float' ( temp mediump float)
-0:27 Branch: Return with expression
-0:27 Construct vec4 ( temp 4-component vector of float)
-0:27 'float' ( temp float)
+0:28 move second child to first child ( temp float)
+0:28 direct index ( temp float)
+0:28 direct index ( temp 3-component vector of float)
+0:28 'half2x3' ( temp 2X3 matrix of float)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 component-wise multiply ( temp float)
+0:28 'float' ( temp float)
+0:28 'float' ( temp float)
+0:30 Branch: Return with expression
+0:30 Construct vec4 ( temp 4-component vector of float)
+0:30 add ( temp float)
+0:30 'float' ( temp float)
+0:30 direct index ( temp float)
+0:30 direct index ( temp 3-component vector of float)
+0:30 'half2x3' ( temp 2X3 matrix of float)
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 0 (const int)
0:9 Function Definition: main( ( temp void)
0:9 Function Parameters:
0:? Sequence
@@ -115,7 +134,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:6 Function Definition: fn(f1; ( temp float)
@@ -166,8 +185,8 @@ gl_FragCoord origin is upper left
0:15 'min10float' ( temp mediump float)
0:15 'min16float' ( temp mediump float)
0:16 Sequence
-0:16 move second child to first child ( temp mediump float)
-0:16 'half' ( temp mediump float)
+0:16 move second child to first child ( temp float)
+0:16 'half' ( temp float)
0:16 Constant:
0:16 0.500000
0:? Sequence
@@ -215,9 +234,28 @@ gl_FragCoord origin is upper left
0:25 'float' ( temp mediump float)
0:25 Function Call: fn(f1; ( temp mediump float)
0:25 'float' ( temp mediump float)
-0:27 Branch: Return with expression
-0:27 Construct vec4 ( temp 4-component vector of float)
-0:27 'float' ( temp float)
+0:28 move second child to first child ( temp float)
+0:28 direct index ( temp float)
+0:28 direct index ( temp 3-component vector of float)
+0:28 'half2x3' ( temp 2X3 matrix of float)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 component-wise multiply ( temp float)
+0:28 'float' ( temp float)
+0:28 'float' ( temp float)
+0:30 Branch: Return with expression
+0:30 Construct vec4 ( temp 4-component vector of float)
+0:30 add ( temp float)
+0:30 'float' ( temp float)
+0:30 direct index ( temp float)
+0:30 direct index ( temp 3-component vector of float)
+0:30 'half2x3' ( temp 2X3 matrix of float)
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 0 (const int)
0:9 Function Definition: main( ( temp void)
0:9 Function Parameters:
0:? Sequence
@@ -228,14 +266,15 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 97
+// Generated by (magic number): 80002
+// Id's are bound by 109
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 95
+ EntryPoint Fragment 4 "main" 107
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 10 "fn(f1;"
Name 9 "float"
@@ -251,13 +290,13 @@ gl_FragCoord origin is upper left
MemberName 56(foo_t) 0 "float"
Name 58 "float"
Name 86 "param"
- Name 95 "@entryPointOutput"
+ Name 93 "half2x3"
+ Name 107 "@entryPointOutput"
Decorate 49(min16float) RelaxedPrecision
Decorate 50 RelaxedPrecision
Decorate 51 RelaxedPrecision
Decorate 52(min10float) RelaxedPrecision
Decorate 53 RelaxedPrecision
- Decorate 54(half) RelaxedPrecision
Decorate 64 RelaxedPrecision
Decorate 65 RelaxedPrecision
Decorate 66 RelaxedPrecision
@@ -277,7 +316,7 @@ gl_FragCoord origin is upper left
Decorate 87 RelaxedPrecision
Decorate 88 RelaxedPrecision
Decorate 89 RelaxedPrecision
- Decorate 95(@entryPointOutput) Location 0
+ Decorate 107(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -302,12 +341,16 @@ gl_FragCoord origin is upper left
56(foo_t): TypeStruct 6(float)
57: TypePointer Function 56(foo_t)
59: 6(float) Constant 1109917696
- 94: TypePointer Output 12(fvec4)
-95(@entryPointOutput): 94(ptr) Variable Output
+ 90: TypeVector 6(float) 3
+ 91: TypeMatrix 90(fvec3) 2
+ 92: TypePointer Function 91
+ 97: 22(int) Constant 0
+ 106: TypePointer Output 12(fvec4)
+107(@entryPointOutput): 106(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 96: 12(fvec4) FunctionCall 14(@main()
- Store 95(@entryPointOutput) 96
+ 108: 12(fvec4) FunctionCall 14(@main()
+ Store 107(@entryPointOutput) 108
Return
FunctionEnd
10(fn(f1;): 6(float) Function None 8
@@ -328,6 +371,7 @@ gl_FragCoord origin is upper left
58(float): 57(ptr) Variable Function
75: 7(ptr) Variable Function
86(param): 7(ptr) Variable Function
+ 93(half2x3): 92(ptr) Variable Function
Store 19(float) 20
27: 6(float) Load 19(float)
29: 21(bool) FOrdNotEqual 27 28
@@ -389,7 +433,15 @@ gl_FragCoord origin is upper left
88: 6(float) FunctionCall 10(fn(f1;) 86(param)
89: 6(float) FAdd 85 88
Store 19(float) 89
- 90: 6(float) Load 19(float)
- 91: 12(fvec4) CompositeConstruct 90 90 90 90
- ReturnValue 91
+ 94: 6(float) Load 19(float)
+ 95: 6(float) Load 19(float)
+ 96: 6(float) FMul 94 95
+ 98: 7(ptr) AccessChain 93(half2x3) 40 97
+ Store 98 96
+ 99: 6(float) Load 19(float)
+ 100: 7(ptr) AccessChain 93(half2x3) 40 97
+ 101: 6(float) Load 100
+ 102: 6(float) FAdd 99 101
+ 103: 12(fvec4) CompositeConstruct 102 102 102 102
+ ReturnValue 103
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out
index 7d55c44047d..4ae33e20cfa 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out
@@ -1,5 +1,5 @@
hlsl.typeGraphCopy.vert
-Shader version: 450
+Shader version: 500
0:? Sequence
0:22 Function Definition: @main( ( temp float)
0:22 Function Parameters:
@@ -32,7 +32,7 @@ Shader version: 450
Linked vertex stage:
-Shader version: 450
+Shader version: 500
0:? Sequence
0:22 Function Definition: @main( ( temp float)
0:22 Function Parameters:
@@ -62,13 +62,14 @@ Shader version: 450
0:? '@entryPointOutput' (layout( location=0) out float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 28
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 26
+ Source HLSL 500
Name 4 "main"
Name 8 "@main("
Name 11 "N1"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typedef.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typedef.frag.out
index 6edb191d7a4..3f3e34cc009 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typedef.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typedef.frag.out
@@ -1,5 +1,5 @@
hlsl.typedef.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: ShaderFunction(vf4;i1; ( temp 4-component vector of float)
@@ -41,7 +41,7 @@ Linked fragment stage:
WARNING: Linking fragment stage: Entry point not found
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: ShaderFunction(vf4;i1; ( temp 4-component vector of float)
@@ -79,7 +79,7 @@ gl_FragCoord origin is upper left
0:? Linker Objects
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 34
Capability Shader
@@ -87,6 +87,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction"
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 14 "ShaderFunction(vf4;i1;"
Name 12 "input"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.void.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.void.frag.out
index 584f3784f91..e685c2c51e9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.void.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.void.frag.out
@@ -1,5 +1,5 @@
hlsl.void.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Function Definition: foo1( ( temp void)
@@ -28,7 +28,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1 Function Definition: foo1( ( temp void)
@@ -54,7 +54,7 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 27
Capability Shader
@@ -62,6 +62,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 22
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 6 "foo1("
Name 8 "foo2("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.whileLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.whileLoop.frag.out
index 2f68da116a6..cffef62660f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.whileLoop.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.whileLoop.frag.out
@@ -1,5 +1,5 @@
hlsl.whileLoop.frag
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -49,7 +49,7 @@ gl_FragCoord origin is upper left
Linked fragment stage:
-Shader version: 450
+Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
@@ -96,7 +96,7 @@ gl_FragCoord origin is upper left
0:? 'input' (layout( location=0) in 4-component vector of float)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 52
Capability Shader
@@ -104,6 +104,7 @@ gl_FragCoord origin is upper left
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 45 48
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "PixelShaderFunction"
Name 11 "@PixelShaderFunction(vf4;"
Name 10 "input"
@@ -170,7 +171,7 @@ gl_FragCoord origin is upper left
28: Label
Branch 32
32: Label
- LoopMerge 34 35 None
+ LoopMerge 34 35 Unroll
Branch 36
36: Label
BranchConditional 31 33 34
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/implicitInnerAtomicUint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/implicitInnerAtomicUint.frag.out
new file mode 100644
index 00000000000..ed9771e7ca1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/implicitInnerAtomicUint.frag.out
@@ -0,0 +1,20 @@
+implicitInnerAtomicUint.frag
+ERROR: 0:2: '[]' : only outermost dimension of an array of arrays can be implicitly sized
+ERROR: 1 compilation errors. No code generated.
+
+
+Shader version: 460
+ERROR: node is still EOpNull!
+0:? Linker Objects
+0:? 'c' (layout( binding=0 offset=0) uniform 1-element array of 1-element array of atomic_uint)
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 460
+ERROR: node is still EOpNull!
+0:? Linker Objects
+0:? 'c' (layout( binding=0 offset=0) uniform 1-element array of 1-element array of atomic_uint)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/include.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/include.vert.out
new file mode 100644
index 00000000000..42f10323a55
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/include.vert.out
@@ -0,0 +1,67 @@
+include.vert
+Shader version: 450
+Requested GL_GOOGLE_cpp_style_line_directive
+Requested GL_GOOGLE_include_directive
+0:? Sequence
+0:13 Function Definition: main( ( global void)
+0:13 Function Parameters:
+0:15 Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 'color' ( smooth out 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 'i1' ( global 4-component vector of float)
+0:15 'i2' ( global 4-component vector of float)
+0:15 'i3' ( global 4-component vector of float)
+0:15 'i4' ( global 4-component vector of float)
+0:15 'i5' ( global 4-component vector of float)
+0:15 'i6' ( global 4-component vector of float)
+0:? Linker Objects
+0:? 'i1' ( global 4-component vector of float)
+0:? 'i2' ( global 4-component vector of float)
+0:? 'i4' ( global 4-component vector of float)
+0:? 'i3' ( global 4-component vector of float)
+0:? 'i6' ( global 4-component vector of float)
+0:? 'i5' ( global 4-component vector of float)
+0:? 'color' ( smooth out 4-component vector of float)
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 450
+Requested GL_GOOGLE_cpp_style_line_directive
+Requested GL_GOOGLE_include_directive
+0:? Sequence
+0:13 Function Definition: main( ( global void)
+0:13 Function Parameters:
+0:15 Sequence
+0:15 move second child to first child ( temp 4-component vector of float)
+0:15 'color' ( smooth out 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 add ( temp 4-component vector of float)
+0:15 'i1' ( global 4-component vector of float)
+0:15 'i2' ( global 4-component vector of float)
+0:15 'i3' ( global 4-component vector of float)
+0:15 'i4' ( global 4-component vector of float)
+0:15 'i5' ( global 4-component vector of float)
+0:15 'i6' ( global 4-component vector of float)
+0:? Linker Objects
+0:? 'i1' ( global 4-component vector of float)
+0:? 'i2' ( global 4-component vector of float)
+0:? 'i4' ( global 4-component vector of float)
+0:? 'i3' ( global 4-component vector of float)
+0:? 'i6' ( global 4-component vector of float)
+0:? 'i5' ( global 4-component vector of float)
+0:? 'color' ( smooth out 4-component vector of float)
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/invalidSwizzle.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/invalidSwizzle.vert.out
new file mode 100644
index 00000000000..5104fdcdccc
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/invalidSwizzle.vert.out
@@ -0,0 +1,38 @@
+invalidSwizzle.vert
+ERROR: 0:7: 'rr' : does not apply to this type: uniform sampler2D
+ERROR: 0:7: '=' : cannot convert from ' uniform sampler2D' to ' temp 2-component vector of float'
+ERROR: 0:8: 'xx' : does not apply to this type: global void
+ERROR: 0:9: 'xy' : does not apply to this type: global void
+ERROR: 4 compilation errors. No code generated.
+
+
+Shader version: 420
+ERROR: node is still EOpNull!
+0:6 Function Definition: main( ( global void)
+0:6 Function Parameters:
+0:? Sequence
+0:8 Function Call: f( ( global void)
+0:9 Function Call: f( ( global void)
+0:? Linker Objects
+0:? 's' ( uniform sampler2D)
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: No function definition (body) found:
+ f(
+
+Shader version: 420
+ERROR: node is still EOpNull!
+0:6 Function Definition: main( ( global void)
+0:6 Function Parameters:
+0:? Sequence
+0:8 Function Call: f( ( global void)
+0:9 Function Call: f( ( global void)
+0:? Linker Objects
+0:? 's' ( uniform sampler2D)
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation.vert.out
index 929041545bf..3dd8206106e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/lineContinuation.vert.out
@@ -19,7 +19,7 @@ ERROR: 0:112: '#if' : unexpected tokens following directive
ERROR: 0:117: 'macro expansion' : End of line in macro substitution: FOOM
ERROR: 0:118: 'preprocessor evaluation' : can't evaluate expression
ERROR: 0:118: '#if' : unexpected tokens following directive
-ERROR: 0:150: '' : syntax error
+ERROR: 0:150: '' : syntax error, unexpected EQUAL
ERROR: 19 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out
index 436f5e217e5..26a26af875f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out
@@ -1,6 +1,4 @@
link1.vk.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
@@ -14,8 +12,6 @@ gl_FragCoord origin is upper left
0:? 'color' ( out highp 4-component vector of float)
link2.vk.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/missingBodies.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/missingBodies.vert.out
index 7760c3fd30b..3a9a99f6c2c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/missingBodies.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/missingBodies.vert.out
@@ -1,6 +1,4 @@
missingBodies.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 450
0:? Sequence
0:4 Function Definition: foo( ( global void)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out
index abdd51e2cca..0a5ba310fb6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out
@@ -1,5 +1,4 @@
negativeArraySize.comp
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:9: '' : array size must be a positive integer
ERROR: 1 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/newTexture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/newTexture.frag.out
index 3a1c7a201c8..52921e8fc15 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/newTexture.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/newTexture.frag.out
@@ -1,6 +1,4 @@
newTexture.frag
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 430
0:? Sequence
0:36 Function Definition: main( ( global void)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonVulkan.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonVulkan.frag.out
index 236f5a84714..2b8b6a0ce3c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonVulkan.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonVulkan.frag.out
@@ -1,5 +1,4 @@
nonVulkan.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: 'constant_id' : only allowed when generating SPIR-V
ERROR: 0:4: 'input_attachment_index' : only allowed when using GLSL for Vulkan
ERROR: 0:4: 'input_attachment_index' : can only be used with a subpass
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/numeral.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/numeral.frag.out
index 22f4a949895..c1e313478b5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/numeral.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/numeral.frag.out
@@ -1,5 +1,4 @@
numeral.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:14: '' : octal literal digit too large
ERROR: 0:15: '' : octal literal digit too large
ERROR: 0:16: '' : octal literal digit too large
@@ -12,7 +11,9 @@ ERROR: 0:50: '' : hexadecimal literal too big
ERROR: 0:88: '' : float literal needs a decimal point or exponent
ERROR: 0:98: '' : numeric literal too big
ERROR: 0:101: '' : numeric literal too big
-ERROR: 12 compilation errors. No code generated.
+ERROR: 0:104: '#' : preprocessor directive cannot be preceded by another token
+ERROR: 0:104: '' : syntax error, unexpected $end, expecting COMMA or SEMICOLON
+ERROR: 14 compilation errors. No code generated.
Shader version: 400
@@ -418,6 +419,7 @@ ERROR: node is still EOpNull!
0:? 'g4' ( global int)
0:? 'g5' ( global int)
0:? 'g6' ( global int)
+0:? 'inf1' ( global float)
Linked fragment stage:
@@ -826,4 +828,5 @@ ERROR: node is still EOpNull!
0:? 'g4' ( global int)
0:? 'g5' ( global int)
0:? 'g6' ( global int)
+0:? 'inf1' ( global float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/overlongLiteral.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/overlongLiteral.frag.out
new file mode 100644
index 00000000000..372d7777545
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/overlongLiteral.frag.out
@@ -0,0 +1,19 @@
+overlongLiteral.frag
+ERROR: 0:1: '' : hexadecimal literal too long
+ERROR: 0:1: '' : syntax error, unexpected INTCONSTANT
+ERROR: 2 compilation errors. No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:? Linker Objects
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:? Linker Objects
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise.tesc.out
index 7beff892e42..abe56f7509d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise.tesc.out
@@ -1,6 +1,4 @@
precise.tesc
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 450
Requested GL_EXT_gpu_shader5
Requested GL_EXT_shader_io_blocks
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise_struct_block.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise_struct_block.vert.out
index 638bd1b5203..a239e95de25 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise_struct_block.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/precise_struct_block.vert.out
@@ -1,6 +1,4 @@
precise_struct_block.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 450
0:? Sequence
0:11 Function Definition: struct_member( ( global float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.err
index 5f177e6cc12..e69de29bb2d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.err
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.edge_cases.vert.err
@@ -1,2 +0,0 @@
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.err
index cfde4041e9f..bc588958fe3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.err
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.errors.vert.err
@@ -1,4 +1,3 @@
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:9: '#error' : This should show up in pp output .
ERROR: 0:14: '#' : invalid directive: def
ERROR: 0:15: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile Y
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.err
index 925cc0ca05d..35db3034196 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.err
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.extensions.vert.err
@@ -1,3 +1,2 @@
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:6: '#extension' : extension not supported: GL_EXT_shader_texture_image_samples
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.err
index 5f177e6cc12..e69de29bb2d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.err
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.function_macro.vert.err
@@ -1,2 +0,0 @@
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.err
index 5f177e6cc12..e69de29bb2d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.err
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.line.frag.err
@@ -1,2 +0,0 @@
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.err
index 5f177e6cc12..e69de29bb2d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.err
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.pragma.vert.err
@@ -1,2 +0,0 @@
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.err b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.err
index 5f177e6cc12..e69de29bb2d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.err
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/preprocessor.simple.vert.err
@@ -1,2 +0,0 @@
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out
index ba3e0e698a0..422c049be68 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out
@@ -1,6 +1,4 @@
reflection.vert
-Warning, version 440 is not yet complete; most version-specific features are present, but some are missing.
-
Uniform reflection:
image_ui2D: offset -1, type 9063, size 1, index -1, binding -1
sampler_2D: offset -1, type 8b5e, size 1, index -1, binding -1
@@ -72,6 +70,10 @@ deepD[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1
deepD[1].v3: offset -1, type 8b54, size 1, index -1, binding -1
abl.foo: offset 0, type 1406, size 1, index 7, binding -1
abl2.foo: offset 0, type 1406, size 1, index 11, binding -1
+buf1.runtimeArray: offset 4, type 1406, size 4, index 12, binding -1
+buf2.runtimeArray.c: offset 8, type 1406, size 1, index 13, binding -1
+buf3.runtimeArray: offset 4, type 1406, size 0, index 14, binding -1
+buf4.runtimeArray.c: offset 8, type 1406, size 1, index 15, binding -1
anonMember1: offset 0, type 8b51, size 1, index 0, binding -1
uf1: offset -1, type 1406, size 1, index -1, binding -1
uf2: offset -1, type 1406, size 1, index -1, binding -1
@@ -90,6 +92,10 @@ abl2[0]: offset -1, type ffffffff, size 4, index -1, binding -1
abl2[1]: offset -1, type ffffffff, size 4, index -1, binding -1
abl2[2]: offset -1, type ffffffff, size 4, index -1, binding -1
abl2[3]: offset -1, type ffffffff, size 4, index -1, binding -1
+buf1: offset -1, type ffffffff, size 4, index -1, binding -1
+buf2: offset -1, type ffffffff, size 4, index -1, binding -1
+buf3: offset -1, type ffffffff, size 4, index -1, binding -1
+buf4: offset -1, type ffffffff, size 4, index -1, binding -1
Vertex attribute reflection:
attributeFloat: offset 0, type 1406, size 0, index 0, binding -1
@@ -97,4 +103,5 @@ attributeFloat2: offset 0, type 8b50, size 0, index 0, binding -1
attributeFloat3: offset 0, type 8b51, size 0, index 0, binding -1
attributeFloat4: offset 0, type 8b52, size 0, index 0, binding -1
attributeMat4: offset 0, type 8b5c, size 0, index 0, binding -1
+gl_InstanceID: offset 0, type 1404, size 0, index 0, binding -1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcefunc.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcefunc.frag.out
index c28d90a3957..da8f78a2396 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcefunc.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.dcefunc.frag.out
@@ -1,8 +1,6 @@
remap.basic.dcefunc.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 22
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.everything.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.everything.frag.out
index 357a8d2be5a..bf17c59fd0f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.everything.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.everything.frag.out
@@ -1,8 +1,6 @@
remap.basic.everything.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24969
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.none.frag.out
index 44f5747bf13..054a6b45d47 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.none.frag.out
@@ -1,8 +1,6 @@
remap.basic.none.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 22
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.strip.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.strip.frag.out
index ab1a003af32..ee9d93cfe2b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.strip.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.basic.strip.frag.out
@@ -1,8 +1,6 @@
remap.basic.strip.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 22
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index 4fc29872009..b986a7d9d20 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
@@ -2,14 +2,14 @@ remap.hlsl.sample.basic.everything.frag
WARNING: 0:4: 'immediate sampler state' : unimplemented
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24878
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 5663 "main" 4656 4112
+ EntryPoint Fragment 5663 "main" 4253 3709
ExecutionMode 5663 OriginUpperLeft
Decorate 4727 DescriptorSet 0
Decorate 4727 Binding 0
@@ -26,8 +26,8 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
Decorate 3789 DescriptorSet 0
Decorate 3805 DescriptorSet 0
Decorate 3869 DescriptorSet 0
- Decorate 4656 Location 0
- Decorate 4112 BuiltIn FragDepth
+ Decorate 4253 Location 0
+ Decorate 3709 BuiltIn FragDepth
8: TypeVoid
1282: TypeFunction 8
13: TypeFloat 32
@@ -127,9 +127,9 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
1284: 29(fvec4) ConstantComposite 138 138 138 138
650: TypePointer Function 13(float)
667: TypePointer Output 29(fvec4)
- 4656: 667(ptr) Variable Output
+ 4253: 667(ptr) Variable Output
651: TypePointer Output 13(float)
- 4112: 651(ptr) Variable Output
+ 3709: 651(ptr) Variable Output
5663: 8 Function None 1282
24877: Label
4104: 1669(ptr) Variable Function
@@ -137,10 +137,10 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
Store 4104 18803
13396: 666(ptr) AccessChain 4104 2571
7967: 29(fvec4) Load 13396
- Store 4656 7967
+ Store 4253 7967
16622: 650(ptr) AccessChain 4104 2574
11539: 13(float) Load 16622
- Store 4112 11539
+ Store 3709 11539
Return
FunctionEnd
3317:1032(struct) Function None 319
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index 5af75db0309..699fb8d8528 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
@@ -2,7 +2,7 @@ remap.hlsl.sample.basic.none.frag
WARNING: 0:4: 'immediate sampler state' : unimplemented
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 198
Capability Shader
@@ -11,6 +11,7 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 188 192
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -57,8 +58,8 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
Name 169 "g_tTexcdu4"
Name 176 "psout"
Name 185 "flattenTemp"
- Name 188 "Color"
- Name 192 "Depth"
+ Name 188 "@entryPointOutput.Color"
+ Name 192 "@entryPointOutput.Depth"
Name 195 "g_sSamp2d"
Name 196 "g_sSamp2D_b"
Name 197 "g_tTex1df4a"
@@ -77,8 +78,8 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
Decorate 151(g_tTexcdf4) DescriptorSet 0
Decorate 160(g_tTexcdi4) DescriptorSet 0
Decorate 169(g_tTexcdu4) DescriptorSet 0
- Decorate 188(Color) Location 0
- Decorate 192(Depth) BuiltIn FragDepth
+ Decorate 188(@entryPointOutput.Color) Location 0
+ Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 195(g_sSamp2d) DescriptorSet 0
Decorate 196(g_sSamp2D_b) DescriptorSet 0
Decorate 197(g_tTex1df4a) DescriptorSet 0
@@ -184,9 +185,9 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
178: 7(fvec4) ConstantComposite 177 177 177 177
180: TypePointer Function 6(float)
187: TypePointer Output 7(fvec4)
- 188(Color): 187(ptr) Variable Output
+188(@entryPointOutput.Color): 187(ptr) Variable Output
191: TypePointer Output 6(float)
- 192(Depth): 191(ptr) Variable Output
+192(@entryPointOutput.Depth): 191(ptr) Variable Output
195(g_sSamp2d): 48(ptr) Variable UniformConstant
196(g_sSamp2D_b): 48(ptr) Variable UniformConstant
197(g_tTex1df4a): 44(ptr) Variable UniformConstant
@@ -197,10 +198,10 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
Store 185(flattenTemp) 186
189: 41(ptr) AccessChain 185(flattenTemp) 29
190: 7(fvec4) Load 189
- Store 188(Color) 190
+ Store 188(@entryPointOutput.Color) 190
193: 180(ptr) AccessChain 185(flattenTemp) 16
194: 6(float) Load 193
- Store 192(Depth) 194
+ Store 192(@entryPointOutput.Depth) 194
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index d76bdd93c67..f46f93f0740 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
@@ -2,7 +2,7 @@ remap.hlsl.sample.basic.strip.frag
WARNING: 0:4: 'immediate sampler state' : unimplemented
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 198
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
index 330aecd6037..fe2df78d8a7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
@@ -1,6 +1,6 @@
remap.hlsl.templatetypes.everything.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24954
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
index c5d8a010ed0..bc5916e1d5e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
@@ -1,6 +1,6 @@
remap.hlsl.templatetypes.none.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 160
Capability Shader
@@ -9,6 +9,7 @@ remap.hlsl.templatetypes.none.frag
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 153 156
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "@main(vf4;"
Name 10 "input"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.everything.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.everything.frag.out
index d20564c5dd5..7a1733e4167 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.everything.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.everything.frag.out
@@ -1,8 +1,6 @@
remap.if.everything.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 22855
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.none.frag.out
index 081d5cdd699..1601a6cc56e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.if.none.frag.out
@@ -1,8 +1,6 @@
remap.if.none.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 25
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.invalid-spirv-1.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.invalid-spirv-1.out
new file mode 100644
index 00000000000..91b4b6d90c3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.invalid-spirv-1.out
@@ -0,0 +1 @@
+ID out of range: 4160749568
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.invalid-spirv-2.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.invalid-spirv-2.out
new file mode 100644
index 00000000000..808b9b870b6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.invalid-spirv-2.out
@@ -0,0 +1 @@
+ID not found
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.everything.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.everything.frag.out
index 384b8e8619b..f67acfbaf83 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.everything.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.everything.frag.out
@@ -1,8 +1,6 @@
remap.similar_1a.everything.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24916
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.none.frag.out
index 910ef424a44..2bbf53a6cc8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1a.none.frag.out
@@ -1,8 +1,6 @@
remap.similar_1a.none.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 86
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.everything.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.everything.frag.out
index 0ce4544c963..67ff7df7f48 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.everything.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.everything.frag.out
@@ -1,8 +1,6 @@
remap.similar_1b.everything.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24916
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.none.frag.out
index ce79e00beff..089ea5c3374 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.similar_1b.none.frag.out
@@ -1,8 +1,6 @@
remap.similar_1b.none.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 91
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.specconst.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.specconst.comp.out
new file mode 100644
index 00000000000..cc439f12aa6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.specconst.comp.out
@@ -0,0 +1,31 @@
+remap.specconst.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 16104
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 5663 "main"
+ ExecutionMode 5663 LocalSize 1 1 1
+ Decorate 2 SpecId 0
+ Decorate 3 SpecId 1
+ Decorate 4 SpecId 2
+ Decorate 5 BuiltIn WorkgroupSize
+ 8: TypeVoid
+ 1282: TypeFunction 8
+ 11: TypeInt 32 0
+ 2: 11(int) SpecConstant 1
+ 3: 11(int) SpecConstant 1
+ 4: 11(int) SpecConstant 1
+ 20: TypeVector 11(int) 3
+ 5: 20(ivec3) SpecConstantComposite 2 3 4
+ 6: 11(int) SpecConstantOp 81 5 0
+ 7: 11(int) SpecConstantOp 81 5 1(GLSL.std.450)
+ 9: 11(int) SpecConstantOp 81 5 2
+ 10: 11(int) SpecConstantOp 132 7 9
+ 12: 11(int) SpecConstantOp 128 6 10
+ 5663: 8 Function None 1282
+ 16103: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.everything.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.everything.frag.out
index e5a7ef75977..c1fddd9ab9f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.everything.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.everything.frag.out
@@ -1,10 +1,9 @@
remap.switch.everything.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
"precision mediump int; precision highp float;"
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 23990
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.none.frag.out
index 68d075b2579..fa78e77f19b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.switch.none.frag.out
@@ -1,10 +1,9 @@
remap.switch.none.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
"precision mediump int; precision highp float;"
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 48
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.everything.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.everything.frag.out
index ed906d535a0..aa9014c5839 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.everything.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.everything.frag.out
@@ -1,6 +1,6 @@
remap.uniformarray.everything.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 25030
Capability Shader
@@ -8,6 +8,7 @@ remap.uniformarray.everything.frag
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main" 3608 4957 4339 5139
ExecutionMode 5663 OriginUpperLeft
+ Decorate 5139 Location 0
8: TypeVoid
1282: TypeFunction 8
13: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out
index 526b9e49698..cba724ea91f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out
@@ -1,6 +1,6 @@
remap.uniformarray.none.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 53
Capability Shader
@@ -16,6 +16,7 @@ remap.uniformarray.none.frag
Name 35 "alpha"
Name 47 "gl_FragColor"
Name 52 "texSampler2D"
+ Decorate 47(gl_FragColor) Location 0
Decorate 52(texSampler2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.frag.out
index 939ea62067a..ba47b6c753f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.frag.out
@@ -1,5 +1,4 @@
specExamples.frag
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:6: '=' : cannot convert from ' const uint' to ' global int'
ERROR: 0:20: '' : numeric literal too big
ERROR: 0:21: '' : hexadecimal literal too big
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out
index f050477be82..71ce868987d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out
@@ -1,5 +1,4 @@
specExamples.vert
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:29: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers
ERROR: 0:31: 'triangles' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)
ERROR: 0:31: 'invocations' : there is no such layout identifier for this stage taking an assigned value
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.100ops.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.100ops.frag.out
index efd82012b02..5cf2100f2d3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.100ops.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.100ops.frag.out
@@ -1,8 +1,6 @@
spv.100ops.frag
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 49
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out
index 19c6db0df2e..51e8b093cf1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out
@@ -2,7 +2,7 @@ spv.130.frag
WARNING: 0:31: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 205
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out
index 324cc0c5ca5..c63fb934062 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out
@@ -1,6 +1,6 @@
spv.140.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 96
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out
index 1c98c70e72a..50267685506 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out
@@ -1,6 +1,6 @@
spv.150.geom
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 71
Capability Geometry
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out
index 28431397210..2ad94617cad 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out
@@ -1,6 +1,6 @@
spv.150.vert
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 63
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300BuiltIns.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300BuiltIns.vert.out
index 7dc949dcaf9..a2c5075f929 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300BuiltIns.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300BuiltIns.vert.out
@@ -1,8 +1,6 @@
spv.300BuiltIns.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 42
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.frag.out
index 7ce08d86891..8200bb828d3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.frag.out
@@ -1,8 +1,6 @@
spv.300layout.frag
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 37
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out
index 69f66b6a33c..a820796107d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out
@@ -1,8 +1,6 @@
spv.300layout.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 163
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out
index 5924137cdca..78098eb2f0c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out
@@ -1,8 +1,6 @@
spv.300layoutp.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 115
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.bitcast.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.bitcast.frag.out
index 14e184a47dc..bcbe8e69f33 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.bitcast.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.bitcast.frag.out
@@ -1,8 +1,6 @@
spv.310.bitcast.frag
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 153
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out
index 4b47c7d7615..fec52c59c6e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out
@@ -1,8 +1,6 @@
spv.310.comp
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 69
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.330.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.330.geom.out
index 3e81dcbc79b..eccaccd218a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.330.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.330.geom.out
@@ -1,6 +1,6 @@
spv.330.geom
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 32
Capability Geometry
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out
index cb2de968711..2b574ab62a1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out
@@ -1,8 +1,6 @@
spv.400.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 1118
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tesc.out
index 68b142e5af0..5b6a6b1ad06 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tesc.out
@@ -1,8 +1,6 @@
spv.400.tesc
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 93
Capability Tessellation
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tese.out
index 0c62bed6d29..37cdb4b0d71 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tese.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.tese.out
@@ -1,8 +1,6 @@
spv.400.tese
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 96
Capability Tessellation
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out
index 6413d5a4521..28665bc71a1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out
@@ -1,8 +1,6 @@
spv.420.geom
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 72
Capability Geometry
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.frag.out
index abe2a58a0ea..4aedf77eef7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.frag.out
@@ -1,8 +1,6 @@
spv.430.frag
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.vert.out
index 8ea95d1a73e..c63d5e97cfe 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.430.vert.out
@@ -1,8 +1,6 @@
spv.430.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 66
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.geom.out
index 85c68143211..f745068445e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.geom.out
@@ -1,15 +1,14 @@
spv.450.geom
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 26
+// Generated by (magic number): 80002
+// Id's are bound by 31
Capability Geometry
Capability GeometryPointSize
+ Capability MultiViewport
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Geometry 4 "main" 13 20
+ EntryPoint Geometry 4 "main" 13 20 27 29
ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 4
ExecutionMode 4 OutputLineStrip
@@ -28,6 +27,8 @@ Warning, version 450 is not yet complete; most version-specific features are pre
MemberName 16(gl_PerVertex) 2 "gl_ClipDistance"
MemberName 16(gl_PerVertex) 3 "gl_CullDistance"
Name 20 "gl_in"
+ Name 27 "gl_Layer"
+ Name 29 "gl_ViewportIndex"
MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
@@ -38,6 +39,8 @@ Warning, version 450 is not yet complete; most version-specific features are pre
MemberDecorate 16(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 16(gl_PerVertex) 3 BuiltIn CullDistance
Decorate 16(gl_PerVertex) Block
+ Decorate 27(gl_Layer) BuiltIn Layer
+ Decorate 29(gl_ViewportIndex) BuiltIn ViewportIndex
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -57,11 +60,18 @@ Warning, version 450 is not yet complete; most version-specific features are pre
20(gl_in): 19(ptr) Variable Input
21: TypePointer Input 6(float)
24: TypePointer Output 6(float)
+ 26: TypePointer Output 14(int)
+ 27(gl_Layer): 26(ptr) Variable Output
+ 28: 14(int) Constant 2
+29(gl_ViewportIndex): 26(ptr) Variable Output
+ 30: 14(int) Constant 3
4(main): 2 Function None 3
5: Label
22: 21(ptr) AccessChain 20(gl_in) 15 15
23: 6(float) Load 22
25: 24(ptr) AccessChain 13 15
Store 25 23
+ Store 27(gl_Layer) 28
+ Store 29(gl_ViewportIndex) 30
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.noRedecl.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.noRedecl.tesc.out
index e62aa38aafd..4d6a25a2848 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.noRedecl.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.noRedecl.tesc.out
@@ -1,8 +1,6 @@
spv.450.noRedecl.tesc
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 21
Capability Tessellation
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.tesc.out
index a0bf3dd3bab..5cbaca92a9e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.450.tesc.out
@@ -1,79 +1,120 @@
spv.450.tesc
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 23
+// Generated by (magic number): 80002
+// Id's are bound by 45
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint TessellationControl 4 "main" 9 16 19 22
+ EntryPoint TessellationControl 4 "main" 15 18 25 32 38 41 44
ExecutionMode 4 OutputVertices 4
Source GLSL 450
Name 4 "main"
- Name 9 "patchOut"
- Name 10 "S"
- MemberName 10(S) 0 "sMem1"
- MemberName 10(S) 1 "sMem2"
- Name 11 "TheBlock"
- MemberName 11(TheBlock) 0 "bMem1"
- MemberName 11(TheBlock) 1 "bMem2"
- MemberName 11(TheBlock) 2 "s"
- Name 16 "tcBlock"
- Name 17 "SingleBlock"
- MemberName 17(SingleBlock) 0 "bMem1"
- MemberName 17(SingleBlock) 1 "bMem2"
- MemberName 17(SingleBlock) 2 "s"
- Name 19 "singleBlock"
- Name 20 "bn"
- MemberName 20(bn) 0 "v1"
- MemberName 20(bn) 1 "v2"
- MemberName 20(bn) 2 "v3"
- Name 22 ""
- Decorate 9(patchOut) Patch
- MemberDecorate 11(TheBlock) 0 Patch
- MemberDecorate 11(TheBlock) 1 Patch
- MemberDecorate 11(TheBlock) 2 Patch
- Decorate 11(TheBlock) Block
- Decorate 16(tcBlock) Location 12
- MemberDecorate 17(SingleBlock) 0 Patch
- MemberDecorate 17(SingleBlock) 0 Location 2
- MemberDecorate 17(SingleBlock) 1 Patch
- MemberDecorate 17(SingleBlock) 1 Location 3
- MemberDecorate 17(SingleBlock) 2 Patch
- MemberDecorate 17(SingleBlock) 2 Location 4
- Decorate 17(SingleBlock) Block
- Decorate 19(singleBlock) Location 2
- MemberDecorate 20(bn) 0 Patch
- MemberDecorate 20(bn) 0 Location 20
- MemberDecorate 20(bn) 0 Component 0
- MemberDecorate 20(bn) 1 Patch
- MemberDecorate 20(bn) 1 Location 24
- MemberDecorate 20(bn) 2 Patch
- MemberDecorate 20(bn) 2 Location 25
- MemberDecorate 20(bn) 2 Component 0
- Decorate 20(bn) Block
+ Name 11 "gl_PerVertex"
+ MemberName 11(gl_PerVertex) 0 "gl_Position"
+ MemberName 11(gl_PerVertex) 1 "gl_PointSize"
+ MemberName 11(gl_PerVertex) 2 "gl_ClipDistance"
+ MemberName 11(gl_PerVertex) 3 "gl_CullDistance"
+ Name 15 "gl_out"
+ Name 18 "gl_InvocationID"
+ Name 21 "gl_PerVertex"
+ MemberName 21(gl_PerVertex) 0 "gl_Position"
+ MemberName 21(gl_PerVertex) 1 "gl_PointSize"
+ MemberName 21(gl_PerVertex) 2 "gl_ClipDistance"
+ MemberName 21(gl_PerVertex) 3 "gl_CullDistance"
+ Name 25 "gl_in"
+ Name 32 "patchOut"
+ Name 33 "S"
+ MemberName 33(S) 0 "sMem1"
+ MemberName 33(S) 1 "sMem2"
+ Name 34 "TheBlock"
+ MemberName 34(TheBlock) 0 "bMem1"
+ MemberName 34(TheBlock) 1 "bMem2"
+ MemberName 34(TheBlock) 2 "s"
+ Name 38 "tcBlock"
+ Name 39 "SingleBlock"
+ MemberName 39(SingleBlock) 0 "bMem1"
+ MemberName 39(SingleBlock) 1 "bMem2"
+ MemberName 39(SingleBlock) 2 "s"
+ Name 41 "singleBlock"
+ Name 42 "bn"
+ MemberName 42(bn) 0 "v1"
+ MemberName 42(bn) 1 "v2"
+ MemberName 42(bn) 2 "v3"
+ Name 44 ""
+ MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+ MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+ MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+ MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
+ Decorate 11(gl_PerVertex) Block
+ Decorate 18(gl_InvocationID) BuiltIn InvocationId
+ MemberDecorate 21(gl_PerVertex) 0 BuiltIn Position
+ MemberDecorate 21(gl_PerVertex) 1 BuiltIn PointSize
+ MemberDecorate 21(gl_PerVertex) 2 BuiltIn ClipDistance
+ MemberDecorate 21(gl_PerVertex) 3 BuiltIn CullDistance
+ Decorate 21(gl_PerVertex) Block
+ Decorate 32(patchOut) Patch
+ Decorate 32(patchOut) Location 1
+ MemberDecorate 34(TheBlock) 0 Patch
+ MemberDecorate 34(TheBlock) 1 Patch
+ MemberDecorate 34(TheBlock) 2 Patch
+ Decorate 34(TheBlock) Block
+ Decorate 38(tcBlock) Location 12
+ MemberDecorate 39(SingleBlock) 0 Patch
+ MemberDecorate 39(SingleBlock) 1 Patch
+ MemberDecorate 39(SingleBlock) 2 Patch
+ Decorate 39(SingleBlock) Block
+ Decorate 41(singleBlock) Location 2
+ MemberDecorate 42(bn) 0 Patch
+ MemberDecorate 42(bn) 0 Location 20
+ MemberDecorate 42(bn) 1 Patch
+ MemberDecorate 42(bn) 1 Location 24
+ MemberDecorate 42(bn) 2 Patch
+ MemberDecorate 42(bn) 2 Location 25
+ Decorate 42(bn) Block
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
- 8: TypePointer Output 7(fvec4)
- 9(patchOut): 8(ptr) Variable Output
- 10(S): TypeStruct 6(float) 6(float)
- 11(TheBlock): TypeStruct 6(float) 6(float) 10(S)
- 12: TypeInt 32 0
- 13: 12(int) Constant 2
- 14: TypeArray 11(TheBlock) 13
- 15: TypePointer Output 14
- 16(tcBlock): 15(ptr) Variable Output
- 17(SingleBlock): TypeStruct 6(float) 6(float) 10(S)
- 18: TypePointer Output 17(SingleBlock)
- 19(singleBlock): 18(ptr) Variable Output
- 20(bn): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4)
- 21: TypePointer Output 20(bn)
- 22: 21(ptr) Variable Output
+ 8: TypeInt 32 0
+ 9: 8(int) Constant 1
+ 10: TypeArray 6(float) 9
+11(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 10
+ 12: 8(int) Constant 4
+ 13: TypeArray 11(gl_PerVertex) 12
+ 14: TypePointer Output 13
+ 15(gl_out): 14(ptr) Variable Output
+ 16: TypeInt 32 1
+ 17: TypePointer Input 16(int)
+18(gl_InvocationID): 17(ptr) Variable Input
+ 20: 16(int) Constant 0
+21(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 10
+ 22: 8(int) Constant 32
+ 23: TypeArray 21(gl_PerVertex) 22
+ 24: TypePointer Input 23
+ 25(gl_in): 24(ptr) Variable Input
+ 27: TypePointer Input 7(fvec4)
+ 30: TypePointer Output 7(fvec4)
+ 32(patchOut): 30(ptr) Variable Output
+ 33(S): TypeStruct 6(float) 6(float)
+ 34(TheBlock): TypeStruct 6(float) 6(float) 33(S)
+ 35: 8(int) Constant 2
+ 36: TypeArray 34(TheBlock) 35
+ 37: TypePointer Output 36
+ 38(tcBlock): 37(ptr) Variable Output
+ 39(SingleBlock): TypeStruct 6(float) 6(float) 33(S)
+ 40: TypePointer Output 39(SingleBlock)
+ 41(singleBlock): 40(ptr) Variable Output
+ 42(bn): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4)
+ 43: TypePointer Output 42(bn)
+ 44: 43(ptr) Variable Output
4(main): 2 Function None 3
5: Label
+ 19: 16(int) Load 18(gl_InvocationID)
+ 26: 16(int) Load 18(gl_InvocationID)
+ 28: 27(ptr) AccessChain 25(gl_in) 26 20
+ 29: 7(fvec4) Load 28
+ 31: 30(ptr) AccessChain 15(gl_out) 19 20
+ Store 31 29
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.comp.out
new file mode 100644
index 00000000000..d8e68be372e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.comp.out
@@ -0,0 +1,33 @@
+spv.460.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 15
+
+ Capability Shader
+ Capability SubgroupVoteKHR
+ Extension "SPV_KHR_subgroup_vote"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 1 1 1
+ Source GLSL 460
+ Name 4 "main"
+ Name 8 "b1"
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeBool
+ 7: TypePointer Function 6(bool)
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(b1): 7(ptr) Variable Function
+ 9: 6(bool) Load 8(b1)
+ 10: 6(bool) SubgroupAnyKHR 9
+ Store 8(b1) 10
+ 11: 6(bool) Load 8(b1)
+ 12: 6(bool) SubgroupAllKHR 11
+ Store 8(b1) 12
+ 13: 6(bool) Load 8(b1)
+ 14: 6(bool) SubgroupAllEqualKHR 13
+ Store 8(b1) 14
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.frag.out
new file mode 100644
index 00000000000..6cdcc85084a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.frag.out
@@ -0,0 +1,51 @@
+spv.460.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 32
+
+ Capability Shader
+ Capability AtomicStorage
+ Capability AtomicStorageOps
+ Extension "SPV_KHR_shader_atomic_counter_ops"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginLowerLeft
+ Source GLSL 460
+ Name 4 "main"
+ Name 8 "aui"
+ Name 10 "ui"
+ Decorate 8(aui) Offset 0
+ Decorate 8(aui) Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer AtomicCounter 6(int)
+ 8(aui): 7(ptr) Variable AtomicCounter
+ 9: TypePointer Private 6(int)
+ 10(ui): 9(ptr) Variable Private
+ 12: 6(int) Constant 1
+ 13: 6(int) Constant 0
+ 4(main): 2 Function None 3
+ 5: Label
+ 11: 6(int) Load 10(ui)
+ 14: 6(int) AtomicIAdd 8(aui) 12 13 11
+ 15: 6(int) Load 10(ui)
+ 16: 6(int) AtomicISub 8(aui) 12 13 15
+ 17: 6(int) Load 10(ui)
+ 18: 6(int) AtomicUMin 8(aui) 12 13 17
+ 19: 6(int) Load 10(ui)
+ 20: 6(int) AtomicUMax 8(aui) 12 13 19
+ 21: 6(int) Load 10(ui)
+ 22: 6(int) AtomicAnd 8(aui) 12 13 21
+ 23: 6(int) Load 10(ui)
+ 24: 6(int) AtomicOr 8(aui) 12 13 23
+ 25: 6(int) Load 10(ui)
+ 26: 6(int) AtomicXor 8(aui) 12 13 25
+ 27: 6(int) Load 10(ui)
+ 28: 6(int) AtomicExchange 8(aui) 12 13 27
+ 29: 6(int) Load 10(ui)
+ 30: 6(int) Load 10(ui)
+ 31: 6(int) AtomicCompareExchange 8(aui) 12 13 13 30 29
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.vert.out
new file mode 100644
index 00000000000..7b8d953e2b8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.460.vert.out
@@ -0,0 +1,45 @@
+spv.460.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 20
+
+ Capability Shader
+ Capability DrawParameters
+ Extension "SPV_KHR_shader_draw_parameters"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 10 12 15 18 19
+ Source GLSL 460
+ Name 4 "main"
+ Name 8 "a"
+ Name 10 "gl_BaseVertex"
+ Name 12 "gl_BaseInstance"
+ Name 15 "gl_DrawID"
+ Name 18 "gl_VertexID"
+ Name 19 "gl_InstanceID"
+ Decorate 10(gl_BaseVertex) BuiltIn BaseVertex
+ Decorate 12(gl_BaseInstance) BuiltIn BaseInstance
+ Decorate 15(gl_DrawID) BuiltIn DrawIndex
+ Decorate 18(gl_VertexID) BuiltIn VertexId
+ Decorate 19(gl_InstanceID) BuiltIn InstanceId
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypePointer Function 6(int)
+ 9: TypePointer Input 6(int)
+10(gl_BaseVertex): 9(ptr) Variable Input
+12(gl_BaseInstance): 9(ptr) Variable Input
+ 15(gl_DrawID): 9(ptr) Variable Input
+ 18(gl_VertexID): 9(ptr) Variable Input
+19(gl_InstanceID): 9(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(a): 7(ptr) Variable Function
+ 11: 6(int) Load 10(gl_BaseVertex)
+ 13: 6(int) Load 12(gl_BaseInstance)
+ 14: 6(int) IAdd 11 13
+ 16: 6(int) Load 15(gl_DrawID)
+ 17: 6(int) IAdd 14 16
+ Store 8(a) 17
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out
index 4eb756301b5..8c0d6c09392 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out
@@ -1,8 +1,6 @@
spv.AofA.frag
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 104
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.GeometryShaderPassthrough.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
index 05aeb9710ee..2b85ddf6bb0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
@@ -1,8 +1,6 @@
spv.GeometryShaderPassthrough.geom
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 15
Capability Geometry
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.OVR_multiview.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.OVR_multiview.vert.out
new file mode 100644
index 00000000000..49901a5cd68
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.OVR_multiview.vert.out
@@ -0,0 +1,57 @@
+spv.OVR_multiview.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 27
+
+ Capability Shader
+ Capability MultiView
+ Extension "SPV_KHR_multiview"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 13 17 25 26
+ Source GLSL 330
+ SourceExtension "GL_OVR_multiview"
+ Name 4 "main"
+ Name 11 "gl_PerVertex"
+ MemberName 11(gl_PerVertex) 0 "gl_Position"
+ MemberName 11(gl_PerVertex) 1 "gl_PointSize"
+ MemberName 11(gl_PerVertex) 2 "gl_ClipDistance"
+ Name 13 ""
+ Name 17 "gl_ViewID_OVR"
+ Name 25 "gl_VertexID"
+ Name 26 "gl_InstanceID"
+ MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+ MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+ MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+ Decorate 11(gl_PerVertex) Block
+ Decorate 17(gl_ViewID_OVR) BuiltIn ViewIndex
+ Decorate 25(gl_VertexID) BuiltIn VertexId
+ Decorate 26(gl_InstanceID) BuiltIn InstanceId
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeInt 32 0
+ 9: 8(int) Constant 1
+ 10: TypeArray 6(float) 9
+11(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10
+ 12: TypePointer Output 11(gl_PerVertex)
+ 13: 12(ptr) Variable Output
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16: TypePointer Input 8(int)
+17(gl_ViewID_OVR): 16(ptr) Variable Input
+ 20: 6(float) Constant 0
+ 22: TypePointer Output 7(fvec4)
+ 24: TypePointer Input 14(int)
+ 25(gl_VertexID): 24(ptr) Variable Input
+26(gl_InstanceID): 24(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 18: 8(int) Load 17(gl_ViewID_OVR)
+ 19: 6(float) ConvertUToF 18
+ 21: 7(fvec4) CompositeConstruct 19 20 20 20
+ 23: 22(ptr) AccessChain 13 15
+ Store 23 21
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.Operations.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.Operations.frag.out
index aeee253bfb4..8f61e02119b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.Operations.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.Operations.frag.out
@@ -1,8 +1,6 @@
spv.Operations.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 532
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.accessChain.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.accessChain.frag.out
index b319cfd13dd..89a39a0371a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.accessChain.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.accessChain.frag.out
@@ -1,8 +1,6 @@
spv.accessChain.frag
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 206
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out
index c3ceb9a67b2..ca495c1884b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out
@@ -1,10 +1,9 @@
spv.aggOps.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:4: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
"precision mediump int; precision highp float;"
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 215
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard.frag.out
index 652d45c846e..ac4c9f39286 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard.frag.out
@@ -1,6 +1,6 @@
spv.always-discard.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 84
Capability Shader
@@ -18,6 +18,7 @@ spv.always-discard.frag
Name 30 "y"
Name 36 "radius"
Name 59 "gl_FragColor"
+ Decorate 59(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard2.frag.out
index 0bbb9eee890..5aed2e07772 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard2.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.always-discard2.frag.out
@@ -1,6 +1,6 @@
spv.always-discard2.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 40
Capability Shader
@@ -17,6 +17,7 @@ spv.always-discard2.frag
Name 21 "tex_coord"
Name 30 "y"
Name 38 "gl_FragColor"
+ Decorate 38(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.arbPostDepthCoverage.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.arbPostDepthCoverage.frag.out
new file mode 100644
index 00000000000..b7ac2b669a4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.arbPostDepthCoverage.frag.out
@@ -0,0 +1,42 @@
+spv.arbPostDepthCoverage.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 18
+
+ Capability Shader
+ Capability SampleMaskPostDepthCoverage
+ Extension "SPV_KHR_post_depth_coverage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 8 13
+ ExecutionMode 4 OriginUpperLeft
+ ExecutionMode 4 EarlyFragmentTests
+ ExecutionMode 4 PostDepthCoverage
+ Source GLSL 450
+ SourceExtension "GL_ARB_post_depth_coverage"
+ SourceExtension "GL_EXT_post_depth_coverage"
+ Name 4 "main"
+ Name 8 "readSampleMaskIn"
+ Name 13 "gl_SampleMaskIn"
+ Decorate 8(readSampleMaskIn) Location 0
+ Decorate 13(gl_SampleMaskIn) Flat
+ Decorate 13(gl_SampleMaskIn) BuiltIn SampleMask
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypePointer Output 6(int)
+8(readSampleMaskIn): 7(ptr) Variable Output
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 1
+ 11: TypeArray 6(int) 10
+ 12: TypePointer Input 11
+13(gl_SampleMaskIn): 12(ptr) Variable Input
+ 14: 6(int) Constant 0
+ 15: TypePointer Input 6(int)
+ 4(main): 2 Function None 3
+ 5: Label
+ 16: 15(ptr) AccessChain 13(gl_SampleMaskIn) 14
+ 17: 6(int) Load 16
+ Store 8(readSampleMaskIn) 17
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.arbPostDepthCoverage_Error.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.arbPostDepthCoverage_Error.frag.out
new file mode 100644
index 00000000000..b210144da25
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.arbPostDepthCoverage_Error.frag.out
@@ -0,0 +1,7 @@
+spv.arbPostDepthCoverage_Error.frag
+ERROR: 0:7: 'early_fragment_tests' : can only apply to a standalone qualifier
+ERROR: 0:7: 'post_depth_coverage' : can only apply to a standalone qualifier
+ERROR: 2 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomic.comp.out
index 97c7f6e3ab4..b64dc90b793 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomic.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomic.comp.out
@@ -1,9 +1,7 @@
spv.atomic.comp
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 73
+// Generated by (magic number): 80002
+// Id's are bound by 74
Capability Shader
Capability AtomicStorage
@@ -19,29 +17,29 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Name 20 "counter"
Name 23 "val"
Name 27 "countArr"
- Name 35 "origi"
- Name 37 "atomi"
- Name 40 "origu"
- Name 42 "atomu"
- Name 43 "value"
- Name 60 "dataSSB"
- MemberName 60(dataSSB) 0 "f"
- MemberName 60(dataSSB) 1 "n_frames_rendered"
- Name 62 "result"
- Name 70 "arrX"
- Name 71 "arrY"
- Name 72 "arrZ"
+ Name 37 "origi"
+ Name 39 "atomi"
+ Name 42 "origu"
+ Name 44 "atomu"
+ Name 45 "value"
+ Name 62 "dataSSB"
+ MemberName 62(dataSSB) 0 "f"
+ MemberName 62(dataSSB) 1 "n_frames_rendered"
+ Name 64 "result"
+ Name 71 "arrX"
+ Name 72 "arrY"
+ Name 73 "arrZ"
Decorate 20(counter) Offset 0
Decorate 20(counter) Binding 0
Decorate 27(countArr) Offset 4
Decorate 27(countArr) Binding 0
- MemberDecorate 60(dataSSB) 0 Restrict
- MemberDecorate 60(dataSSB) 0 Offset 0
- MemberDecorate 60(dataSSB) 1 Restrict
- MemberDecorate 60(dataSSB) 1 Offset 16
- Decorate 60(dataSSB) BufferBlock
- Decorate 62(result) DescriptorSet 0
- Decorate 62(result) Binding 0
+ MemberDecorate 62(dataSSB) 0 Restrict
+ MemberDecorate 62(dataSSB) 0 Offset 0
+ MemberDecorate 62(dataSSB) 1 Restrict
+ MemberDecorate 62(dataSSB) 1 Offset 16
+ Decorate 62(dataSSB) BufferBlock
+ Decorate 64(result) DescriptorSet 0
+ Decorate 64(result) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -58,29 +56,29 @@ Warning, version 450 is not yet complete; most version-specific features are pre
27(countArr): 26(ptr) Variable AtomicCounter
28: TypeInt 32 1
29: 28(int) Constant 2
- 34: TypePointer Function 28(int)
- 36: TypePointer Workgroup 28(int)
- 37(atomi): 36(ptr) Variable Workgroup
- 38: 28(int) Constant 3
- 41: TypePointer Workgroup 6(int)
- 42(atomu): 41(ptr) Variable Workgroup
- 43(value): 41(ptr) Variable Workgroup
- 46: 6(int) Constant 7
- 51: 28(int) Constant 7
- 55: 6(int) Constant 10
- 58: TypeFloat 32
- 59: TypeVector 28(int) 4
- 60(dataSSB): TypeStruct 58(float) 59(ivec4)
- 61: TypePointer Uniform 60(dataSSB)
- 62(result): 61(ptr) Variable Uniform
- 63: 28(int) Constant 1
- 64: 6(int) Constant 2
- 65: TypePointer Uniform 28(int)
- 68: TypeArray 28(int) 14
- 69: TypePointer Private 68
- 70(arrX): 69(ptr) Variable Private
- 71(arrY): 69(ptr) Variable Private
- 72(arrZ): 69(ptr) Variable Private
+ 33: 28(int) Constant 1
+ 36: TypePointer Function 28(int)
+ 38: TypePointer Workgroup 28(int)
+ 39(atomi): 38(ptr) Variable Workgroup
+ 40: 28(int) Constant 3
+ 43: TypePointer Workgroup 6(int)
+ 44(atomu): 43(ptr) Variable Workgroup
+ 45(value): 43(ptr) Variable Workgroup
+ 48: 6(int) Constant 7
+ 53: 28(int) Constant 7
+ 57: 6(int) Constant 10
+ 60: TypeFloat 32
+ 61: TypeVector 28(int) 4
+ 62(dataSSB): TypeStruct 60(float) 61(ivec4)
+ 63: TypePointer Uniform 62(dataSSB)
+ 64(result): 63(ptr) Variable Uniform
+ 65: 6(int) Constant 2
+ 66: TypePointer Uniform 28(int)
+ 69: TypeArray 28(int) 14
+ 70: TypePointer Private 69
+ 71(arrX): 70(ptr) Variable Private
+ 72(arrY): 70(ptr) Variable Private
+ 73(arrZ): 70(ptr) Variable Private
4(main): 2 Function None 3
5: Label
23(val): 22(ptr) Variable Function
@@ -90,7 +88,8 @@ Warning, version 450 is not yet complete; most version-specific features are pre
31: 6(int) AtomicLoad 30 14 15
Store 23(val) 31
32: 6(int) AtomicIDecrement 20(counter) 14 15
- 33: 6(int) AtomicIIncrement 20(counter) 14 15
+ 34: 6(int) ISub 32 33
+ 35: 6(int) AtomicIIncrement 20(counter) 14 15
Return
FunctionEnd
10(func(au1;): 6(int) Function None 8
@@ -101,29 +100,29 @@ Warning, version 450 is not yet complete; most version-specific features are pre
FunctionEnd
12(atoms(): 2 Function None 3
13: Label
- 35(origi): 34(ptr) Variable Function
- 40(origu): 22(ptr) Variable Function
- 39: 28(int) AtomicIAdd 37(atomi) 14 15 38
- Store 35(origi) 39
- 44: 6(int) Load 43(value)
- 45: 6(int) AtomicAnd 42(atomu) 14 15 44
- Store 40(origu) 45
- 47: 6(int) AtomicOr 42(atomu) 14 15 46
- Store 40(origu) 47
- 48: 6(int) AtomicXor 42(atomu) 14 15 46
- Store 40(origu) 48
- 49: 6(int) Load 43(value)
- 50: 6(int) AtomicUMin 42(atomu) 14 15 49
- Store 40(origu) 50
- 52: 28(int) AtomicSMax 37(atomi) 14 15 51
- Store 35(origi) 52
- 53: 28(int) Load 35(origi)
- 54: 28(int) AtomicExchange 37(atomi) 14 15 53
- Store 35(origi) 54
- 56: 6(int) Load 43(value)
- 57: 6(int) AtomicCompareExchange 42(atomu) 14 15 15 56 55
- Store 40(origu) 57
- 66: 65(ptr) AccessChain 62(result) 63 64
- 67: 28(int) AtomicIAdd 66 14 15 63
+ 37(origi): 36(ptr) Variable Function
+ 42(origu): 22(ptr) Variable Function
+ 41: 28(int) AtomicIAdd 39(atomi) 14 15 40
+ Store 37(origi) 41
+ 46: 6(int) Load 45(value)
+ 47: 6(int) AtomicAnd 44(atomu) 14 15 46
+ Store 42(origu) 47
+ 49: 6(int) AtomicOr 44(atomu) 14 15 48
+ Store 42(origu) 49
+ 50: 6(int) AtomicXor 44(atomu) 14 15 48
+ Store 42(origu) 50
+ 51: 6(int) Load 45(value)
+ 52: 6(int) AtomicUMin 44(atomu) 14 15 51
+ Store 42(origu) 52
+ 54: 28(int) AtomicSMax 39(atomi) 14 15 53
+ Store 37(origi) 54
+ 55: 28(int) Load 37(origi)
+ 56: 28(int) AtomicExchange 39(atomi) 14 15 55
+ Store 37(origi) 56
+ 58: 6(int) Load 45(value)
+ 59: 6(int) AtomicCompareExchange 44(atomu) 14 15 15 58 57
+ Store 42(origu) 59
+ 67: 66(ptr) AccessChain 64(result) 33 65
+ 68: 28(int) AtomicIAdd 67 14 15 33
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomicInt64.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomicInt64.comp.out
new file mode 100644
index 00000000000..cbd7c1cbc6c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.atomicInt64.comp.out
@@ -0,0 +1,215 @@
+spv.atomicInt64.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 149
+
+ Capability Shader
+ Capability Int64
+ Capability Int64Atomics
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 16 16 1
+ Source GLSL 450
+ SourceExtension "GL_ARB_gpu_shader_int64"
+ SourceExtension "GL_NV_shader_atomic_int64"
+ Name 4 "main"
+ Name 8 "i64"
+ Name 12 "u64"
+ Name 14 "Buffer"
+ MemberName 14(Buffer) 0 "i64"
+ MemberName 14(Buffer) 1 "u64"
+ Name 16 "buf"
+ Name 84 "Struct"
+ MemberName 84(Struct) 0 "i64"
+ MemberName 84(Struct) 1 "u64"
+ Name 86 "s"
+ MemberDecorate 14(Buffer) 0 Offset 0
+ MemberDecorate 14(Buffer) 1 Offset 8
+ Decorate 14(Buffer) BufferBlock
+ Decorate 16(buf) DescriptorSet 0
+ Decorate 16(buf) Binding 0
+ Decorate 148 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 64 1
+ 7: TypePointer Function 6(int)
+ 9: 6(int) Constant 0 0
+ 10: TypeInt 64 0
+ 11: TypePointer Function 10(int)
+ 13: 10(int) Constant 0 0
+ 14(Buffer): TypeStruct 6(int) 10(int)
+ 15: TypePointer Uniform 14(Buffer)
+ 16(buf): 15(ptr) Variable Uniform
+ 17: TypeInt 32 1
+ 18: 17(int) Constant 0
+ 19: TypePointer Uniform 6(int)
+ 21: 6(int) Constant 4294967272 4294967295
+ 22: TypeInt 32 0
+ 23: 22(int) Constant 1
+ 24: 22(int) Constant 0
+ 28: 17(int) Constant 1
+ 29: TypePointer Uniform 10(int)
+ 31: 10(int) Constant 15 0
+ 84(Struct): TypeStruct 6(int) 10(int)
+ 85: TypePointer Workgroup 84(Struct)
+ 86(s): 85(ptr) Variable Workgroup
+ 87: TypePointer Workgroup 6(int)
+ 92: TypePointer Workgroup 10(int)
+ 146: TypeVector 22(int) 3
+ 147: 22(int) Constant 16
+ 148: 146(ivec3) ConstantComposite 147 147 23
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(i64): 7(ptr) Variable Function
+ 12(u64): 11(ptr) Variable Function
+ Store 8(i64) 9
+ Store 12(u64) 13
+ 20: 19(ptr) AccessChain 16(buf) 18
+ 25: 6(int) AtomicSMin 20 23 24 21
+ 26: 6(int) Load 8(i64)
+ 27: 6(int) IAdd 26 25
+ Store 8(i64) 27
+ 30: 29(ptr) AccessChain 16(buf) 28
+ 32: 10(int) AtomicUMin 30 23 24 31
+ 33: 10(int) Load 12(u64)
+ 34: 10(int) IAdd 33 32
+ Store 12(u64) 34
+ 35: 19(ptr) AccessChain 16(buf) 18
+ 36: 6(int) AtomicSMax 35 23 24 21
+ 37: 6(int) Load 8(i64)
+ 38: 6(int) IAdd 37 36
+ Store 8(i64) 38
+ 39: 29(ptr) AccessChain 16(buf) 28
+ 40: 10(int) AtomicUMax 39 23 24 31
+ 41: 10(int) Load 12(u64)
+ 42: 10(int) IAdd 41 40
+ Store 12(u64) 42
+ 43: 19(ptr) AccessChain 16(buf) 18
+ 44: 6(int) AtomicAnd 43 23 24 21
+ 45: 6(int) Load 8(i64)
+ 46: 6(int) IAdd 45 44
+ Store 8(i64) 46
+ 47: 29(ptr) AccessChain 16(buf) 28
+ 48: 10(int) AtomicAnd 47 23 24 31
+ 49: 10(int) Load 12(u64)
+ 50: 10(int) IAdd 49 48
+ Store 12(u64) 50
+ 51: 19(ptr) AccessChain 16(buf) 18
+ 52: 6(int) AtomicOr 51 23 24 21
+ 53: 6(int) Load 8(i64)
+ 54: 6(int) IAdd 53 52
+ Store 8(i64) 54
+ 55: 29(ptr) AccessChain 16(buf) 28
+ 56: 10(int) AtomicOr 55 23 24 31
+ 57: 10(int) Load 12(u64)
+ 58: 10(int) IAdd 57 56
+ Store 12(u64) 58
+ 59: 19(ptr) AccessChain 16(buf) 18
+ 60: 6(int) AtomicXor 59 23 24 21
+ 61: 6(int) Load 8(i64)
+ 62: 6(int) IAdd 61 60
+ Store 8(i64) 62
+ 63: 29(ptr) AccessChain 16(buf) 28
+ 64: 10(int) AtomicXor 63 23 24 31
+ 65: 10(int) Load 12(u64)
+ 66: 10(int) IAdd 65 64
+ Store 12(u64) 66
+ 67: 19(ptr) AccessChain 16(buf) 18
+ 68: 6(int) AtomicIAdd 67 23 24 21
+ 69: 6(int) Load 8(i64)
+ 70: 6(int) IAdd 69 68
+ Store 8(i64) 70
+ 71: 19(ptr) AccessChain 16(buf) 18
+ 72: 6(int) AtomicExchange 71 23 24 21
+ 73: 6(int) Load 8(i64)
+ 74: 6(int) IAdd 73 72
+ Store 8(i64) 74
+ 75: 19(ptr) AccessChain 16(buf) 18
+ 76: 6(int) Load 8(i64)
+ 77: 6(int) AtomicCompareExchange 75 23 24 24 76 21
+ 78: 6(int) Load 8(i64)
+ 79: 6(int) IAdd 78 77
+ Store 8(i64) 79
+ 80: 6(int) Load 8(i64)
+ 81: 19(ptr) AccessChain 16(buf) 18
+ Store 81 80
+ 82: 10(int) Load 12(u64)
+ 83: 29(ptr) AccessChain 16(buf) 28
+ Store 83 82
+ Store 8(i64) 9
+ Store 12(u64) 13
+ 88: 87(ptr) AccessChain 86(s) 18
+ 89: 6(int) AtomicSMin 88 23 24 21
+ 90: 6(int) Load 8(i64)
+ 91: 6(int) IAdd 90 89
+ Store 8(i64) 91
+ 93: 92(ptr) AccessChain 86(s) 28
+ 94: 10(int) AtomicUMin 93 23 24 31
+ 95: 10(int) Load 12(u64)
+ 96: 10(int) IAdd 95 94
+ Store 12(u64) 96
+ 97: 87(ptr) AccessChain 86(s) 18
+ 98: 6(int) AtomicSMax 97 23 24 21
+ 99: 6(int) Load 8(i64)
+ 100: 6(int) IAdd 99 98
+ Store 8(i64) 100
+ 101: 92(ptr) AccessChain 86(s) 28
+ 102: 10(int) AtomicUMax 101 23 24 31
+ 103: 10(int) Load 12(u64)
+ 104: 10(int) IAdd 103 102
+ Store 12(u64) 104
+ 105: 87(ptr) AccessChain 86(s) 18
+ 106: 6(int) AtomicAnd 105 23 24 21
+ 107: 6(int) Load 8(i64)
+ 108: 6(int) IAdd 107 106
+ Store 8(i64) 108
+ 109: 92(ptr) AccessChain 86(s) 28
+ 110: 10(int) AtomicAnd 109 23 24 31
+ 111: 10(int) Load 12(u64)
+ 112: 10(int) IAdd 111 110
+ Store 12(u64) 112
+ 113: 87(ptr) AccessChain 86(s) 18
+ 114: 6(int) AtomicOr 113 23 24 21
+ 115: 6(int) Load 8(i64)
+ 116: 6(int) IAdd 115 114
+ Store 8(i64) 116
+ 117: 92(ptr) AccessChain 86(s) 28
+ 118: 10(int) AtomicOr 117 23 24 31
+ 119: 10(int) Load 12(u64)
+ 120: 10(int) IAdd 119 118
+ Store 12(u64) 120
+ 121: 87(ptr) AccessChain 86(s) 18
+ 122: 6(int) AtomicXor 121 23 24 21
+ 123: 6(int) Load 8(i64)
+ 124: 6(int) IAdd 123 122
+ Store 8(i64) 124
+ 125: 92(ptr) AccessChain 86(s) 28
+ 126: 10(int) AtomicXor 125 23 24 31
+ 127: 10(int) Load 12(u64)
+ 128: 10(int) IAdd 127 126
+ Store 12(u64) 128
+ 129: 87(ptr) AccessChain 86(s) 18
+ 130: 6(int) AtomicIAdd 129 23 24 21
+ 131: 6(int) Load 8(i64)
+ 132: 6(int) IAdd 131 130
+ Store 8(i64) 132
+ 133: 87(ptr) AccessChain 86(s) 18
+ 134: 6(int) AtomicExchange 133 23 24 21
+ 135: 6(int) Load 8(i64)
+ 136: 6(int) IAdd 135 134
+ Store 8(i64) 136
+ 137: 87(ptr) AccessChain 86(s) 18
+ 138: 6(int) Load 8(i64)
+ 139: 6(int) AtomicCompareExchange 137 23 24 24 138 21
+ 140: 6(int) Load 8(i64)
+ 141: 6(int) IAdd 140 139
+ Store 8(i64) 141
+ 142: 6(int) Load 8(i64)
+ 143: 87(ptr) AccessChain 86(s) 18
+ Store 143 142
+ 144: 10(int) Load 12(u64)
+ 145: 92(ptr) AccessChain 86(s) 28
+ Store 145 144
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bitCast.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bitCast.frag.out
index 07dd729e6d5..75662132be4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bitCast.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bitCast.frag.out
@@ -1,8 +1,6 @@
spv.bitCast.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 172
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out
index 2810ff1e4fc..5f02671a34a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out
@@ -1,9 +1,7 @@
spv.bool.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 44
+// Generated by (magic number): 80002
+// Id's are bound by 46
Capability Shader
1: ExtInstImport "GLSL.std.450"
@@ -56,7 +54,8 @@ Warning, version 450 is not yet complete; most version-specific features are pre
38: 18(fvec4) ConstantComposite 37 37 37 37
39: 17(float) Constant 1065353216
40: 18(fvec4) ConstantComposite 39 39 39 39
- 42: TypePointer Output 18(fvec4)
+ 41: TypeVector 6(bool) 4
+ 44: TypePointer Output 18(fvec4)
4(main): 2 Function None 3
5: Label
30(param): 7(ptr) Variable Function
@@ -65,9 +64,10 @@ Warning, version 450 is not yet complete; most version-specific features are pre
35: 6(bool) INotEqual 33 34
Store 30(param) 35
36: 6(bool) FunctionCall 10(foo(b1;) 30(param)
- 41: 18(fvec4) Select 36 38 40
- 43: 42(ptr) AccessChain 24 26
- Store 43 41
+ 42: 41(bvec4) CompositeConstruct 36 36 36 36
+ 43: 18(fvec4) Select 42 38 40
+ 45: 44(ptr) AccessChain 24 26
+ Store 45 43
Return
FunctionEnd
10(foo(b1;): 6(bool) Function None 8
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.boolInBlock.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.boolInBlock.frag.out
index 2181f26d686..6102c4a184f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.boolInBlock.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.boolInBlock.frag.out
@@ -1,8 +1,6 @@
spv.boolInBlock.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 107
Capability Shader
@@ -52,9 +50,9 @@ Warning, version 450 is not yet complete; most version-specific features are pre
28: 27(int) Constant 0
29: 6(bool) ConstantFalse
30: 9(bvec2) ConstantComposite 29 29
- 31: 22(int) Constant 0
+ 31: 22(int) Constant 1
32: 23(ivec2) ConstantComposite 31 31
- 33: 22(int) Constant 1
+ 33: 22(int) Constant 0
34: 23(ivec2) ConstantComposite 33 33
36: TypePointer Uniform 23(ivec2)
38: TypeVector 22(int) 4
@@ -62,7 +60,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
40: TypePointer Uniform 39(Uniform)
41: 40(ptr) Variable Uniform
42: TypePointer Uniform 38(ivec4)
- 65: 38(ivec4) ConstantComposite 31 31 31 31
+ 65: 38(ivec4) ConstantComposite 33 33 33 33
72: TypeFloat 32
73: TypeVector 72(float) 4
74: TypePointer Output 73(fvec4)
@@ -73,22 +71,22 @@ Warning, version 450 is not yet complete; most version-specific features are pre
5: Label
62(param): 8(ptr) Variable Function
67(param): 10(ptr) Variable Function
- 35: 23(ivec2) Select 30 34 32
+ 35: 23(ivec2) Select 30 32 34
37: 36(ptr) AccessChain 26 28
Store 37 35
43: 42(ptr) AccessChain 41 28
44: 38(ivec4) Load 43
45: 22(int) CompositeExtract 44 2
- 46: 6(bool) INotEqual 45 31
+ 46: 6(bool) INotEqual 45 33
SelectionMerge 48 None
BranchConditional 46 47 48
47: Label
49: 42(ptr) AccessChain 41 28
50: 38(ivec4) Load 49
51: 22(int) CompositeExtract 50 0
- 52: 6(bool) INotEqual 51 31
+ 52: 6(bool) INotEqual 51 33
53: 9(bvec2) CompositeConstruct 52 52
- 54: 23(ivec2) Select 53 34 32
+ 54: 23(ivec2) Select 53 32 34
55: 36(ptr) AccessChain 26 28
Store 55 54
Branch 48
@@ -96,7 +94,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
56: 36(ptr) AccessChain 26 28
57: 23(ivec2) Load 56
58: 22(int) CompositeExtract 57 0
- 59: 6(bool) INotEqual 58 31
+ 59: 6(bool) INotEqual 58 33
SelectionMerge 61 None
BranchConditional 59 60 61
60: Label
@@ -106,7 +104,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Store 62(param) 66
68: 2 FunctionCall 14(foo(vb4;vb2;) 62(param) 67(param)
69: 9(bvec2) Load 67(param)
- 70: 23(ivec2) Select 69 34 32
+ 70: 23(ivec2) Select 69 32 34
71: 36(ptr) AccessChain 26 28
Store 71 70
Branch 61
@@ -114,14 +112,14 @@ Warning, version 450 is not yet complete; most version-specific features are pre
76: 42(ptr) AccessChain 41 28
77: 38(ivec4) Load 76
78: 22(int) CompositeExtract 77 0
- 79: 6(bool) INotEqual 78 31
+ 79: 6(bool) INotEqual 78 33
SelectionMerge 81 None
BranchConditional 79 80 81
80: Label
82: 42(ptr) AccessChain 41 28
83: 38(ivec4) Load 82
84: 22(int) CompositeExtract 83 1
- 85: 6(bool) INotEqual 84 31
+ 85: 6(bool) INotEqual 84 33
Branch 81
81: Label
86: 6(bool) Phi 79 61 85 80
@@ -131,7 +129,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
91: 42(ptr) AccessChain 41 28
92: 38(ivec4) Load 91
93: 22(int) CompositeExtract 92 0
- 94: 6(bool) INotEqual 93 31
+ 94: 6(bool) INotEqual 93 33
95: 6(bool) LogicalNot 94
SelectionMerge 97 None
BranchConditional 95 96 97
@@ -139,7 +137,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
98: 42(ptr) AccessChain 41 28
99: 38(ivec4) Load 98
100: 22(int) CompositeExtract 99 1
- 101: 6(bool) INotEqual 100 31
+ 101: 6(bool) INotEqual 100 33
Branch 97
97: Label
102: 6(bool) Phi 94 81 101 96
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.branch-return.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.branch-return.vert.out
index 9093135b954..6633d660da2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.branch-return.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.branch-return.vert.out
@@ -1,8 +1,6 @@
spv.branch-return.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 38
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.buffer.autoassign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.buffer.autoassign.frag.out
index 8fb6215ccf2..549a5a28303 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.buffer.autoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.buffer.autoassign.frag.out
@@ -1,6 +1,6 @@
spv.buffer.autoassign.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 50
Capability Shader
@@ -8,6 +8,7 @@ spv.buffer.autoassign.frag
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 47
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -23,7 +24,7 @@ spv.buffer.autoassign.frag
Name 34 "MyUB3"
MemberName 34(MyUB3) 0 "g_d"
Name 36 ""
- Name 47 "Color"
+ Name 47 "@entryPointOutput.Color"
MemberDecorate 16(MyUB1) 0 Offset 0
MemberDecorate 16(MyUB1) 1 Offset 4
Decorate 16(MyUB1) Block
@@ -37,7 +38,7 @@ spv.buffer.autoassign.frag
Decorate 34(MyUB3) Block
Decorate 36 DescriptorSet 0
Decorate 36 Binding 16
- Decorate 47(Color) Location 0
+ Decorate 47(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -61,12 +62,12 @@ spv.buffer.autoassign.frag
36: 35(ptr) Variable Uniform
41: TypePointer Function 7(fvec4)
46: TypePointer Output 7(fvec4)
- 47(Color): 46(ptr) Variable Output
+47(@entryPointOutput.Color): 46(ptr) Variable Output
4(main): 2 Function None 3
5: Label
48:8(PS_OUTPUT) FunctionCall 10(@main()
49: 7(fvec4) CompositeExtract 48 0
- Store 47(Color) 49
+ Store 47(@entryPointOutput.Color) 49
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out
index b3cb8e866a7..b62e3b3e49e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -1,8 +1,6 @@
spv.conditionalDiscard.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 36
Capability Shader
@@ -17,6 +15,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 17 "coord"
Name 34 "gl_FragColor"
Decorate 13(tex) DescriptorSet 0
+ Decorate 34(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conversion.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conversion.frag.out
index b38d84e8266..bdc1972f610 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conversion.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conversion.frag.out
@@ -1,6 +1,6 @@
spv.conversion.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 455
Capability Shader
@@ -51,6 +51,7 @@ spv.conversion.frag
Name 454 "i_f4"
Decorate 39(i_i) Flat
Decorate 157(i_i4) Flat
+ Decorate 322(gl_FragColor) Location 0
Decorate 446(i_i2) Flat
Decorate 448(i_i3) Flat
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOut.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOut.frag.out
index 9dbe5d124b3..6b990647c53 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOut.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOut.frag.out
@@ -1,6 +1,6 @@
spv.dataOut.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 20
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out
index 663092fd324..520d9a84868 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -1,6 +1,6 @@
spv.dataOutIndirect.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 26
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.vert.out
index 1523fab59e8..764cec12ce7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.vert.out
@@ -2,7 +2,7 @@ spv.dataOutIndirect.vert
WARNING: 0:3: attribute deprecated in version 130; may be removed in future release
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 38
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.debugInfo.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.debugInfo.frag.out
new file mode 100644
index 00000000000..706f068e40d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.debugInfo.frag.out
@@ -0,0 +1,280 @@
+spv.debugInfo.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 126
+
+ Capability Shader
+ 2: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 5 "main" 24 52
+ ExecutionMode 5 OriginLowerLeft
+ 1: String "spv.debugInfo.frag"
+ Source GLSL 450 1 "// OpModuleProcessed no-storage-format
+// OpModuleProcessed resource-set-binding 3
+// OpModuleProcessed auto-map-locations
+// OpModuleProcessed client opengl100
+// OpModuleProcessed target-env opengl
+// OpModuleProcessed relaxed-errors
+// OpModuleProcessed suppress-warnings
+// OpModuleProcessed hlsl-offsets
+// OpModuleProcessed entry-point main
+#line 1
+#version 450
+
+struct S {
+ int a;
+};
+
+uniform ubuf {
+ S s;
+};
+
+uniform sampler2D s2d;
+
+layout(location = 0) in vec4 inv;
+layout(location = 0) out vec4 outv;
+
+vec4 foo(S s)
+{
+ vec4 r = s.a * inv;
+ ++r;
+ if (r.x > 3.0)
+ --r;
+ else
+ r *= 2;
+
+ return r;
+}
+
+void main()
+{
+ outv = foo(s);
+ outv += texture(s2d, vec2(0.5));
+
+ switch (s.a) {
+ case 10:
+ ++outv;
+ break;
+ case 20:
+ outv = 2 * outv;
+ ++outv;
+ break;
+ default:
+ --outv;
+ break;
+ }
+
+ for (int i = 0; i < 10; ++i)
+ outv *= 3.0;
+
+ outv.x < 10.0 ?
+ outv = sin(outv) :
+ outv = cos(outv);
+}"
+ Name 5 "main"
+ Name 8 "S"
+ MemberName 8(S) 0 "a"
+ Name 14 "foo(struct-S-i11;"
+ Name 13 "s"
+ Name 17 "r"
+ Name 24 "inv"
+ Name 52 "outv"
+ Name 53 "S"
+ MemberName 53(S) 0 "a"
+ Name 54 "ubuf"
+ MemberName 54(ubuf) 0 "s"
+ Name 56 ""
+ Name 57 "S"
+ MemberName 57(S) 0 "a"
+ Name 59 "param"
+ Name 69 "s2d"
+ Name 99 "i"
+ Decorate 24(inv) Location 0
+ Decorate 52(outv) Location 0
+ MemberDecorate 53(S) 0 Offset 0
+ MemberDecorate 54(ubuf) 0 Offset 0
+ Decorate 54(ubuf) Block
+ Decorate 56 DescriptorSet 3
+ Decorate 69(s2d) DescriptorSet 3
+ 3: TypeVoid
+ 4: TypeFunction 3
+ 7: TypeInt 32 1
+ 8(S): TypeStruct 7(int)
+ 9: TypePointer Function 8(S)
+ 10: TypeFloat 32
+ 11: TypeVector 10(float) 4
+ 12: TypeFunction 11(fvec4) 9(ptr)
+ 16: TypePointer Function 11(fvec4)
+ 18: 7(int) Constant 0
+ 19: TypePointer Function 7(int)
+ 23: TypePointer Input 11(fvec4)
+ 24(inv): 23(ptr) Variable Input
+ 28: 10(float) Constant 1065353216
+ 31: TypeInt 32 0
+ 32: 31(int) Constant 0
+ 33: TypePointer Function 10(float)
+ 36: 10(float) Constant 1077936128
+ 37: TypeBool
+ 45: 10(float) Constant 1073741824
+ 51: TypePointer Output 11(fvec4)
+ 52(outv): 51(ptr) Variable Output
+ 53(S): TypeStruct 7(int)
+ 54(ubuf): TypeStruct 53(S)
+ 55: TypePointer Uniform 54(ubuf)
+ 56: 55(ptr) Variable Uniform
+ 57(S): TypeStruct 7(int)
+ 58: TypePointer Function 57(S)
+ 60: TypePointer Uniform 53(S)
+ 66: TypeImage 10(float) 2D sampled format:Unknown
+ 67: TypeSampledImage 66
+ 68: TypePointer UniformConstant 67
+ 69(s2d): 68(ptr) Variable UniformConstant
+ 71: TypeVector 10(float) 2
+ 72: 10(float) Constant 1056964608
+ 73: 71(fvec2) ConstantComposite 72 72
+ 77: TypePointer Uniform 7(int)
+ 106: 7(int) Constant 10
+ 111: 7(int) Constant 1
+ 114: TypePointer Output 10(float)
+ 117: 10(float) Constant 1092616192
+ 5(main): 3 Function None 4
+ 6: Label
+ 59(param): 58(ptr) Variable Function
+ 99(i): 19(ptr) Variable Function
+ 113: 16(ptr) Variable Function
+ Line 1 30 0
+ 61: 60(ptr) AccessChain 56 18
+ 62: 53(S) Load 61
+ 63: 7(int) CompositeExtract 62 0
+ 64: 19(ptr) AccessChain 59(param) 18
+ Store 64 63
+ 65: 11(fvec4) FunctionCall 14(foo(struct-S-i11;) 59(param)
+ Store 52(outv) 65
+ Line 1 31 0
+ 70: 67 Load 69(s2d)
+ 74: 11(fvec4) ImageSampleImplicitLod 70 73
+ 75: 11(fvec4) Load 52(outv)
+ 76: 11(fvec4) FAdd 75 74
+ Store 52(outv) 76
+ Line 1 33 0
+ 78: 77(ptr) AccessChain 56 18 18
+ 79: 7(int) Load 78
+ SelectionMerge 83 None
+ Switch 79 82
+ case 10: 80
+ case 20: 81
+ 82: Label
+ Line 1 42 0
+ 94: 11(fvec4) Load 52(outv)
+ 95: 11(fvec4) CompositeConstruct 28 28 28 28
+ 96: 11(fvec4) FSub 94 95
+ Store 52(outv) 96
+ Line 1 43 0
+ Branch 83
+ 80: Label
+ Line 1 35 0
+ 84: 11(fvec4) Load 52(outv)
+ 85: 11(fvec4) CompositeConstruct 28 28 28 28
+ 86: 11(fvec4) FAdd 84 85
+ Store 52(outv) 86
+ Line 1 36 0
+ Branch 83
+ 81: Label
+ Line 1 38 0
+ 88: 11(fvec4) Load 52(outv)
+ 89: 11(fvec4) VectorTimesScalar 88 45
+ Store 52(outv) 89
+ Line 1 39 0
+ 90: 11(fvec4) Load 52(outv)
+ 91: 11(fvec4) CompositeConstruct 28 28 28 28
+ 92: 11(fvec4) FAdd 90 91
+ Store 52(outv) 92
+ Line 1 40 0
+ Branch 83
+ 83: Label
+ Line 1 46 0
+ Store 99(i) 18
+ Branch 100
+ 100: Label
+ LoopMerge 102 103 None
+ Branch 104
+ 104: Label
+ 105: 7(int) Load 99(i)
+ 107: 37(bool) SLessThan 105 106
+ BranchConditional 107 101 102
+ 101: Label
+ Line 1 47 0
+ 108: 11(fvec4) Load 52(outv)
+ 109: 11(fvec4) VectorTimesScalar 108 36
+ Store 52(outv) 109
+ Branch 103
+ 103: Label
+ Line 1 46 0
+ 110: 7(int) Load 99(i)
+ 112: 7(int) IAdd 110 111
+ Store 99(i) 112
+ Branch 100
+ 102: Label
+ Line 1 49 0
+ 115: 114(ptr) AccessChain 52(outv) 32
+ 116: 10(float) Load 115
+ 118: 37(bool) FOrdLessThan 116 117
+ SelectionMerge 120 None
+ BranchConditional 118 119 123
+ 119: Label
+ Line 1 50 0
+ 121: 11(fvec4) Load 52(outv)
+ 122: 11(fvec4) ExtInst 2(GLSL.std.450) 13(Sin) 121
+ Store 52(outv) 122
+ Store 113 122
+ Branch 120
+ 123: Label
+ Line 1 51 0
+ 124: 11(fvec4) Load 52(outv)
+ 125: 11(fvec4) ExtInst 2(GLSL.std.450) 14(Cos) 124
+ Store 52(outv) 125
+ Store 113 125
+ Branch 120
+ 120: Label
+ Return
+ FunctionEnd
+14(foo(struct-S-i11;): 11(fvec4) Function None 12
+ 13(s): 9(ptr) FunctionParameter
+ 15: Label
+ 17(r): 16(ptr) Variable Function
+ Line 1 18 0
+ 20: 19(ptr) AccessChain 13(s) 18
+ 21: 7(int) Load 20
+ 22: 10(float) ConvertSToF 21
+ 25: 11(fvec4) Load 24(inv)
+ 26: 11(fvec4) VectorTimesScalar 25 22
+ Store 17(r) 26
+ Line 1 19 0
+ 27: 11(fvec4) Load 17(r)
+ 29: 11(fvec4) CompositeConstruct 28 28 28 28
+ 30: 11(fvec4) FAdd 27 29
+ Store 17(r) 30
+ Line 1 20 0
+ 34: 33(ptr) AccessChain 17(r) 32
+ 35: 10(float) Load 34
+ 38: 37(bool) FOrdGreaterThan 35 36
+ SelectionMerge 40 None
+ BranchConditional 38 39 44
+ 39: Label
+ Line 1 21 0
+ 41: 11(fvec4) Load 17(r)
+ 42: 11(fvec4) CompositeConstruct 28 28 28 28
+ 43: 11(fvec4) FSub 41 42
+ Store 17(r) 43
+ Branch 40
+ 44: Label
+ Line 1 23 0
+ 46: 11(fvec4) Load 17(r)
+ 47: 11(fvec4) VectorTimesScalar 46 45
+ Store 17(r) 47
+ Branch 40
+ 40: Label
+ Line 1 25 0
+ 48: 11(fvec4) Load 17(r)
+ ReturnValue 48
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out
index b6613ef5ae9..4561f02173e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out
@@ -1,12 +1,12 @@
spv.deepRvalue.frag
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 150
+// Generated by (magic number): 80002
+// Id's are bound by 152
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 144
+ EntryPoint Fragment 4 "main" 146
ExecutionMode 4 OriginUpperLeft
Source GLSL 330
Name 4 "main"
@@ -21,13 +21,14 @@ spv.deepRvalue.frag
Name 106 "h"
Name 107 "i"
Name 111 "samp2D"
- Name 129 "str"
- MemberName 129(str) 0 "a"
- MemberName 129(str) 1 "b"
- MemberName 129(str) 2 "c"
- Name 131 "t"
- Name 144 "gl_FragColor"
+ Name 131 "str"
+ MemberName 131(str) 0 "a"
+ MemberName 131(str) 1 "b"
+ MemberName 131(str) 2 "c"
+ Name 133 "t"
+ Name 146 "gl_FragColor"
Decorate 111(samp2D) DescriptorSet 0
+ Decorate 146(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -77,19 +78,20 @@ spv.deepRvalue.frag
115: 113(fvec2) ConstantComposite 114 114
119: 6(float) Constant 1036831949
120: TypeBool
- 128: TypeArray 113(fvec2) 84
- 129(str): TypeStruct 81(int) 128 120(bool)
- 130: TypePointer Function 129(str)
- 132: 113(fvec2) ConstantComposite 10 11
- 133: 6(float) Constant 1082130432
- 134: 113(fvec2) ConstantComposite 133 12
- 135: 6(float) Constant 1086324736
- 136: 113(fvec2) ConstantComposite 135 13
- 137: 128 ConstantComposite 132 134 136
- 138: 120(bool) ConstantTrue
- 139: 129(str) ConstantComposite 82 137 138
- 143: TypePointer Output 7(fvec4)
-144(gl_FragColor): 143(ptr) Variable Output
+ 124: TypeVector 120(bool) 4
+ 130: TypeArray 113(fvec2) 84
+ 131(str): TypeStruct 81(int) 130 120(bool)
+ 132: TypePointer Function 131(str)
+ 134: 113(fvec2) ConstantComposite 10 11
+ 135: 6(float) Constant 1082130432
+ 136: 113(fvec2) ConstantComposite 135 12
+ 137: 6(float) Constant 1086324736
+ 138: 113(fvec2) ConstantComposite 137 13
+ 139: 130 ConstantComposite 134 136 138
+ 140: 120(bool) ConstantTrue
+ 141: 131(str) ConstantComposite 82 139 140
+ 145: TypePointer Output 7(fvec4)
+146(gl_FragColor): 145(ptr) Variable Output
4(main): 2 Function None 3
5: Label
35(m): 34(ptr) Variable Function
@@ -98,7 +100,7 @@ spv.deepRvalue.frag
87(g): 79(ptr) Variable Function
106(h): 79(ptr) Variable Function
107(i): 79(ptr) Variable Function
- 131(t): 130(ptr) Variable Function
+ 133(t): 132(ptr) Variable Function
Store 9(v1) 14
Store 15(v2) 20
Store 21(v3) 26
@@ -174,21 +176,22 @@ spv.deepRvalue.frag
121: 120(bool) FOrdGreaterThan 118 119
122: 7(fvec4) Load 9(v1)
123: 7(fvec4) Load 15(v2)
- 124: 7(fvec4) Select 121 122 123
- 125: 6(float) CompositeExtract 124 3
- 126: 6(float) Load 107(i)
- 127: 6(float) FAdd 126 125
- Store 107(i) 127
- Store 131(t) 139
- 140: 6(float) CompositeExtract 139 1 2 1
- 141: 6(float) Load 107(i)
- 142: 6(float) FAdd 141 140
- Store 107(i) 142
- 145: 6(float) Load 80(f)
- 146: 6(float) Load 87(g)
- 147: 6(float) Load 106(h)
- 148: 6(float) Load 107(i)
- 149: 7(fvec4) CompositeConstruct 145 146 147 148
- Store 144(gl_FragColor) 149
+ 125: 124(bvec4) CompositeConstruct 121 121 121 121
+ 126: 7(fvec4) Select 125 122 123
+ 127: 6(float) CompositeExtract 126 3
+ 128: 6(float) Load 107(i)
+ 129: 6(float) FAdd 128 127
+ Store 107(i) 129
+ Store 133(t) 141
+ 142: 6(float) CompositeExtract 141 1 2 1
+ 143: 6(float) Load 107(i)
+ 144: 6(float) FAdd 143 142
+ Store 107(i) 144
+ 147: 6(float) Load 80(f)
+ 148: 6(float) Load 87(g)
+ 149: 6(float) Load 106(h)
+ 150: 6(float) Load 107(i)
+ 151: 7(fvec4) CompositeConstruct 147 148 149 150
+ Store 146(gl_FragColor) 151
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out
index 247b2f3d084..12ac32cd0b7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out
@@ -1,8 +1,6 @@
spv.depthOut.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 15
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deviceGroup.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deviceGroup.frag.out
index 42e045b3c89..1761c92c680 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deviceGroup.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deviceGroup.frag.out
@@ -1,8 +1,6 @@
spv.deviceGroup.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 17
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.discard-dce.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.discard-dce.frag.out
index 173ea260ae9..770199b848e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.discard-dce.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.discard-dce.frag.out
@@ -1,6 +1,6 @@
spv.discard-dce.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 84
Capability Shader
@@ -18,6 +18,7 @@ spv.discard-dce.frag
Name 30 "y"
Name 36 "radius"
Name 59 "gl_FragColor"
+ Decorate 59(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-simple.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-simple.vert.out
index d6d4c28f338..f503be062d5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-simple.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-simple.vert.out
@@ -1,8 +1,6 @@
spv.do-simple.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 21
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-while-continue-break.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-while-continue-break.vert.out
index d1d0c85c98a..c6a8b8680ca 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-while-continue-break.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.do-while-continue-break.vert.out
@@ -1,8 +1,6 @@
spv.do-while-continue-break.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 43
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.doWhileLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.doWhileLoop.frag.out
index 9b8cee7013f..4cf8f09e5f4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.doWhileLoop.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.doWhileLoop.frag.out
@@ -1,6 +1,6 @@
spv.doWhileLoop.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 34
Capability Shader
@@ -15,6 +15,7 @@ spv.doWhileLoop.frag
Name 17 "bigColor"
Name 27 "d"
Name 32 "gl_FragColor"
+ Decorate 32(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out
index 3b1bdc89ca8..52410d8a38e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out
@@ -1,8 +1,6 @@
spv.double.comp
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 60
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.drawParams.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.drawParams.vert.out
index b75efe0482d..c5b29a3ee0b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.drawParams.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.drawParams.vert.out
@@ -1,8 +1,6 @@
spv.drawParams.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 29
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.earlyReturnDiscard.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.earlyReturnDiscard.frag.out
index 41441b7f6f3..61788aa0dd7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.earlyReturnDiscard.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.earlyReturnDiscard.frag.out
@@ -1,6 +1,6 @@
spv.earlyReturnDiscard.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 110
Capability Shader
@@ -24,6 +24,7 @@ spv.earlyReturnDiscard.frag
Name 77 "b"
Name 105 "gl_FragColor"
Name 109 "threshhold3"
+ Decorate 105(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.extPostDepthCoverage.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.extPostDepthCoverage.frag.out
new file mode 100644
index 00000000000..ca777e0fc71
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.extPostDepthCoverage.frag.out
@@ -0,0 +1,23 @@
+spv.extPostDepthCoverage.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 6
+
+ Capability Shader
+ Capability SampleMaskPostDepthCoverage
+ Extension "SPV_KHR_post_depth_coverage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ ExecutionMode 4 EarlyFragmentTests
+ ExecutionMode 4 PostDepthCoverage
+ Source ESSL 310
+ SourceExtension "GL_EXT_post_depth_coverage"
+ Name 4 "main"
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 4(main): 2 Function None 3
+ 5: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.extPostDepthCoverage_Error.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.extPostDepthCoverage_Error.frag.out
new file mode 100644
index 00000000000..9ce299f462f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.extPostDepthCoverage_Error.frag.out
@@ -0,0 +1,4 @@
+spv.extPostDepthCoverage_Error.frag
+ERROR: Linking fragment stage: post_depth_coverage requires early_fragment_tests
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out
index 78156e40b1d..004ba52bdd6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out
@@ -1,8 +1,6 @@
spv.float16.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 534
Capability Shader
@@ -11,7 +9,11 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Capability Int64
Capability DerivativeControl
Capability InterpolationFunction
+ Capability StorageUniformBufferBlock16
+ Capability StorageUniform16
+ Capability StorageInputOutput16
Extension "SPV_AMD_gpu_shader_half_float"
+ Extension "SPV_KHR_16bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 465
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.flowControl.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.flowControl.frag.out
index 274cb74612e..ca04e07cbb2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.flowControl.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.flowControl.frag.out
@@ -1,6 +1,6 @@
spv.flowControl.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 39
Capability Shader
@@ -19,6 +19,7 @@ spv.flowControl.frag
Name 25 "bigColor"
Name 30 "smallColor"
Name 35 "gl_FragColor"
+ Decorate 35(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-complex-condition.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-complex-condition.vert.out
index 939d082735a..0bea463f0f9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-complex-condition.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-complex-condition.vert.out
@@ -1,8 +1,6 @@
spv.for-complex-condition.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 31
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-continue-break.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-continue-break.vert.out
index 764001dbe37..98c8fd07419 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-continue-break.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-continue-break.vert.out
@@ -1,8 +1,6 @@
spv.for-continue-break.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 45
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-nobody.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-nobody.vert.out
index 0ec3584da80..919c71aa82e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-nobody.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-nobody.vert.out
@@ -1,8 +1,6 @@
spv.for-nobody.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 25
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-notest.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-notest.vert.out
index c7346f9df8c..b2e574c2ba0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-notest.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-notest.vert.out
@@ -1,8 +1,6 @@
spv.for-notest.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 20
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-simple.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-simple.vert.out
index 996b65a4af0..945668c5b6c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-simple.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.for-simple.vert.out
@@ -1,8 +1,6 @@
spv.for-simple.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forLoop.frag.out
index 628c791f67f..6095a45047d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forLoop.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forLoop.frag.out
@@ -1,6 +1,6 @@
spv.forLoop.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 131
Capability Shader
@@ -26,6 +26,7 @@ spv.forLoop.frag
Name 104 "f"
Name 117 "i"
Decorate 24(Count) Flat
+ Decorate 36(gl_FragColor) Location 0
Decorate 53(v4) Flat
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forwardFun.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forwardFun.frag.out
index 65759531edb..06d76bff133 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forwardFun.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.forwardFun.frag.out
@@ -1,6 +1,6 @@
spv.forwardFun.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 60
Capability Shader
@@ -32,6 +32,7 @@ spv.forwardFun.frag
Decorate 27(f) RelaxedPrecision
Decorate 28 RelaxedPrecision
Decorate 30(gl_FragColor) RelaxedPrecision
+ Decorate 30(gl_FragColor) Location 0
Decorate 31 RelaxedPrecision
Decorate 32 RelaxedPrecision
Decorate 33 RelaxedPrecision
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionCall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionCall.frag.out
index 69a525f7912..c9762d9054e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionCall.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionCall.frag.out
@@ -4,7 +4,7 @@ WARNING: 0:4: varying deprecated in version 130; may be removed in future releas
WARNING: 0:5: varying deprecated in version 130; may be removed in future release
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 76
Capability Shader
@@ -28,6 +28,7 @@ WARNING: 0:5: varying deprecated in version 130; may be removed in future releas
Name 66 "g"
Name 69 "gl_FragColor"
Name 75 "bigColor"
+ Decorate 69(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out
index 1dae38144f6..71f994e0562 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out
@@ -1,8 +1,6 @@
spv.functionNestedOpaque.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 39
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionSemantics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionSemantics.frag.out
index 005a315bb1e..e81cb30c410 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionSemantics.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionSemantics.frag.out
@@ -1,8 +1,6 @@
spv.functionSemantics.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 156
Capability Shader
@@ -44,6 +42,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 133 "param"
Name 136 "arg"
Name 152 "gl_FragColor"
+ Decorate 152(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glFragColor.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glFragColor.frag.out
index febbdf46981..15f77654c3e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glFragColor.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glFragColor.frag.out
@@ -1,6 +1,6 @@
spv.glFragColor.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 12
Capability Shader
@@ -11,6 +11,7 @@ spv.glFragColor.frag
Source GLSL 330
Name 4 "main"
Name 9 "gl_FragColor"
+ Decorate 9(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out
index 11818f6473b..e26fd6ada35 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out
@@ -1,8 +1,6 @@
spv.glsl.register.autoassign.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 142
Capability Shader
@@ -78,6 +76,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Decorate 126(g_tTex_unused2) DescriptorSet 0
Decorate 126(g_tTex_unused2) Binding 12
Decorate 128(g_sSamp_unused2) DescriptorSet 0
+ Decorate 137(FragColor) Location 0
Decorate 141(g_tTex_unused3) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.noautoassign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.noautoassign.frag.out
index 327ac04aea5..5fd0596b8e1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.noautoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.noautoassign.frag.out
@@ -1,8 +1,6 @@
spv.glsl.register.noautoassign.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 142
Capability Shader
@@ -72,6 +70,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Decorate 126(g_tTex_unused2) DescriptorSet 0
Decorate 126(g_tTex_unused2) Binding 12
Decorate 128(g_sSamp_unused2) DescriptorSet 0
+ Decorate 137(FragColor) Location 0
Decorate 141(g_tTex_unused3) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslDebugInfo.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslDebugInfo.frag.out
new file mode 100644
index 00000000000..9eddfdfad52
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslDebugInfo.frag.out
@@ -0,0 +1,58 @@
+spv.hlslDebugInfo.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 19
+
+ Capability Shader
+ 2: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 5 "newMain" 17
+ 1: String "spv.hlslDebugInfo.vert"
+ Source HLSL 500 1 "// OpModuleProcessed entry-point newMain
+// OpModuleProcessed shift-sampler-binding 2
+// OpModuleProcessed shift-texture-binding 4
+// OpModuleProcessed shift-image-binding 1
+// OpModuleProcessed shift-UBO-binding 6
+// OpModuleProcessed shift-ssbo-binding 3
+// OpModuleProcessed shift-uav-binding 5
+// OpModuleProcessed flatten-uniform-arrays
+// OpModuleProcessed no-storage-format
+// OpModuleProcessed resource-set-binding t0 0 0
+// OpModuleProcessed hlsl-iomap
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed auto-map-locations
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed source-entrypoint origMain
+// OpModuleProcessed hlsl-offsets
+#line 1
+float4 origMain() : SV_Position
+{
+ return (float4)0;
+}
+"
+ Name 5 "newMain"
+ Name 10 "@newMain("
+ Name 17 "@entryPointOutput"
+ Decorate 17(@entryPointOutput) BuiltIn Position
+ 3: TypeVoid
+ 4: TypeFunction 3
+ 7: TypeFloat 32
+ 8: TypeVector 7(float) 4
+ 9: TypeFunction 8(fvec4)
+ 12: 7(float) Constant 0
+ 13: 8(fvec4) ConstantComposite 12 12 12 12
+ 16: TypePointer Output 8(fvec4)
+17(@entryPointOutput): 16(ptr) Variable Output
+ 5(newMain): 3 Function None 4
+ 6: Label
+ Line 1 2 0
+ 18: 8(fvec4) FunctionCall 10(@newMain()
+ Store 17(@entryPointOutput) 18
+ Return
+ FunctionEnd
+ 10(@newMain(): 8(fvec4) Function None 9
+ 11: Label
+ Line 1 3 0
+ ReturnValue 13
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslOffsets.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslOffsets.vert.out
new file mode 100644
index 00000000000..f96a629e927
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslOffsets.vert.out
@@ -0,0 +1,76 @@
+spv.hlslOffsets.vert
+Shader version: 450
+0:? Sequence
+0:27 Function Definition: main( ( global void)
+0:27 Function Parameters:
+0:? Linker Objects
+0:? 'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
+
+
+Linked vertex stage:
+
+
+Shader version: 450
+0:? Sequence
+0:27 Function Definition: main( ( global void)
+0:27 Function Parameters:
+0:? Linker Objects
+0:? 'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 14
+
+ Capability Shader
+ Capability Float64
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main"
+ Source GLSL 450
+ Name 4 "main"
+ Name 11 "block"
+ MemberName 11(block) 0 "m0"
+ MemberName 11(block) 1 "m4"
+ MemberName 11(block) 2 "m16"
+ MemberName 11(block) 3 "m20"
+ MemberName 11(block) 4 "m32"
+ MemberName 11(block) 5 "m48"
+ MemberName 11(block) 6 "m56"
+ MemberName 11(block) 7 "m64"
+ MemberName 11(block) 8 "m68"
+ MemberName 11(block) 9 "m76"
+ MemberName 11(block) 10 "m80"
+ MemberName 11(block) 11 "m88"
+ MemberName 11(block) 12 "m96"
+ MemberName 11(block) 13 "m112"
+ Name 13 ""
+ MemberDecorate 11(block) 0 Offset 0
+ MemberDecorate 11(block) 1 Offset 4
+ MemberDecorate 11(block) 2 Offset 16
+ MemberDecorate 11(block) 3 Offset 20
+ MemberDecorate 11(block) 4 Offset 32
+ MemberDecorate 11(block) 5 Offset 48
+ MemberDecorate 11(block) 6 Offset 56
+ MemberDecorate 11(block) 7 Offset 64
+ MemberDecorate 11(block) 8 Offset 68
+ MemberDecorate 11(block) 9 Offset 76
+ MemberDecorate 11(block) 10 Offset 80
+ MemberDecorate 11(block) 11 Offset 88
+ MemberDecorate 11(block) 12 Offset 96
+ MemberDecorate 11(block) 13 Offset 112
+ Decorate 11(block) BufferBlock
+ Decorate 13 DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 3
+ 8: TypeVector 6(float) 2
+ 9: TypeFloat 64
+ 10: TypeVector 9(float) 2
+ 11(block): TypeStruct 6(float) 7(fvec3) 6(float) 7(fvec3) 7(fvec3) 8(fvec2) 8(fvec2) 6(float) 8(fvec2) 6(float) 6(float) 8(fvec2) 8(fvec2) 10(fvec2)
+ 12: TypePointer Uniform 11(block)
+ 13: 12(ptr) Variable Uniform
+ 4(main): 2 Function None 3
+ 5: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out
index ee29baf2e1c..6e35b36761b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out
@@ -1,22 +1,21 @@
spv.image.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 374
+// Generated by (magic number): 80002
+// Id's are bound by 376
Capability Shader
- Capability SampledRect
- Capability Sampled1D
- Capability SampledCubeArray
- Capability SampledBuffer
+ Capability StorageImageMultisample
+ Capability ImageCubeArray
+ Capability ImageRect
+ Capability Image1D
+ Capability ImageBuffer
Capability ImageMSArray
Capability StorageImageExtendedFormats
Capability ImageQuery
Capability StorageImageWriteWithoutFormat
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 132 142 152 248 362 373
+ EntryPoint Fragment 4 "main" 132 142 152 248 362 375
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
Name 4 "main"
@@ -42,7 +41,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Name 248 "value"
Name 357 "wo2D"
Name 362 "fragData"
- Name 373 "ic4D"
+ Name 375 "ic4D"
Decorate 15(i1D) DescriptorSet 0
Decorate 15(i1D) Binding 0
Decorate 27(i2D) DescriptorSet 0
@@ -76,7 +75,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Decorate 357(wo2D) DescriptorSet 0
Decorate 357(wo2D) Binding 1
Decorate 357(wo2D) NonReadable
- Decorate 373(ic4D) Flat
+ Decorate 375(ic4D) Flat
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
@@ -164,9 +163,10 @@ Warning, version 450 is not yet complete; most version-specific features are pre
361: TypePointer Output 125(fvec4)
362(fragData): 361(ptr) Variable Output
367: TypeBool
- 371: TypeVector 6(int) 4
- 372: TypePointer Input 371(ivec4)
- 373(ic4D): 372(ptr) Variable Input
+ 370: TypeVector 367(bool) 4
+ 373: TypeVector 6(int) 4
+ 374: TypePointer Input 373(ivec4)
+ 375(ic4D): 374(ptr) Variable Input
4(main): 2 Function None 3
5: Label
9(iv): 8(ptr) Variable Function
@@ -503,7 +503,8 @@ Warning, version 450 is not yet complete; most version-specific features are pre
366: 18(int) Bitcast 365
368: 367(bool) INotEqual 363 366
369: 125(fvec4) Load 127(v)
- 370: 125(fvec4) Select 368 369 129
- Store 362(fragData) 370
+ 371: 370(bvec4) CompositeConstruct 368 368 368 368
+ 372: 125(fvec4) Select 371 369 129
+ Store 362(fragData) 372
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.imageLoadStoreLod.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.imageLoadStoreLod.frag.out
new file mode 100644
index 00000000000..50b04a82747
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -0,0 +1,135 @@
+spv.imageLoadStoreLod.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 82
+
+ Capability Shader
+ Capability ImageCubeArray
+ Capability SparseResidency
+ Capability Image1D
+ Capability ImageReadWriteLodAMD
+ Extension "SPV_AMD_shader_image_load_store_lod"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 77
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_AMD_shader_image_load_store_lod"
+ Name 4 "main"
+ Name 9 "f4"
+ Name 14 "i1D"
+ Name 24 "i2D"
+ Name 34 "i3D"
+ Name 46 "iiCube"
+ Name 53 "ii1DArray"
+ Name 60 "ui2DArray"
+ Name 64 "u4"
+ Name 65 "ResType"
+ Name 71 "uiCubeArray"
+ Name 77 "fragColor"
+ Decorate 14(i1D) DescriptorSet 0
+ Decorate 14(i1D) Binding 0
+ Decorate 24(i2D) DescriptorSet 0
+ Decorate 24(i2D) Binding 1
+ Decorate 34(i3D) DescriptorSet 0
+ Decorate 34(i3D) Binding 2
+ Decorate 46(iiCube) DescriptorSet 0
+ Decorate 46(iiCube) Binding 3
+ Decorate 53(ii1DArray) DescriptorSet 0
+ Decorate 53(ii1DArray) Binding 4
+ Decorate 60(ui2DArray) DescriptorSet 0
+ Decorate 60(ui2DArray) Binding 5
+ Decorate 71(uiCubeArray) DescriptorSet 0
+ Decorate 71(uiCubeArray) Binding 6
+ Decorate 77(fragColor) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 10: 6(float) Constant 0
+ 11: 7(fvec4) ConstantComposite 10 10 10 10
+ 12: TypeImage 6(float) 1D nonsampled format:Rgba32f
+ 13: TypePointer UniformConstant 12
+ 14(i1D): 13(ptr) Variable UniformConstant
+ 16: TypeInt 32 1
+ 17: 16(int) Constant 1
+ 18: 16(int) Constant 3
+ 22: TypeImage 6(float) 2D nonsampled format:Rgba32f
+ 23: TypePointer UniformConstant 22
+ 24(i2D): 23(ptr) Variable UniformConstant
+ 26: TypeVector 16(int) 2
+ 27: 16(int) Constant 2
+ 28: 26(ivec2) ConstantComposite 27 18
+ 32: TypeImage 6(float) 3D nonsampled format:Rgba32f
+ 33: TypePointer UniformConstant 32
+ 34(i3D): 33(ptr) Variable UniformConstant
+ 36: TypeVector 16(int) 3
+ 37: 16(int) Constant 4
+ 38: 16(int) Constant 5
+ 39: 16(int) Constant 6
+ 40: 36(ivec3) ConstantComposite 37 38 39
+ 44: TypeImage 16(int) Cube nonsampled format:Rgba32i
+ 45: TypePointer UniformConstant 44
+ 46(iiCube): 45(ptr) Variable UniformConstant
+ 49: TypeVector 16(int) 4
+ 51: TypeImage 16(int) 1D array nonsampled format:Rgba32i
+ 52: TypePointer UniformConstant 51
+ 53(ii1DArray): 52(ptr) Variable UniformConstant
+ 57: TypeInt 32 0
+ 58: TypeImage 57(int) 2D array nonsampled format:Rgba32ui
+ 59: TypePointer UniformConstant 58
+ 60(ui2DArray): 59(ptr) Variable UniformConstant
+ 62: TypeVector 57(int) 4
+ 63: TypePointer Function 62(ivec4)
+ 65(ResType): TypeStruct 16(int) 62(ivec4)
+ 69: TypeImage 57(int) Cube array nonsampled format:Rgba32ui
+ 70: TypePointer UniformConstant 69
+ 71(uiCubeArray): 70(ptr) Variable UniformConstant
+ 76: TypePointer Output 7(fvec4)
+ 77(fragColor): 76(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(f4): 8(ptr) Variable Function
+ 64(u4): 63(ptr) Variable Function
+ Store 9(f4) 11
+ 15: 12 Load 14(i1D)
+ 19: 7(fvec4) ImageRead 15 17 Lod 18
+ 20: 7(fvec4) Load 9(f4)
+ 21: 7(fvec4) FAdd 20 19
+ Store 9(f4) 21
+ 25: 22 Load 24(i2D)
+ 29: 7(fvec4) ImageRead 25 28 Lod 18
+ 30: 7(fvec4) Load 9(f4)
+ 31: 7(fvec4) FAdd 30 29
+ Store 9(f4) 31
+ 35: 32 Load 34(i3D)
+ 41: 7(fvec4) ImageRead 35 40 Lod 18
+ 42: 7(fvec4) Load 9(f4)
+ 43: 7(fvec4) FAdd 42 41
+ Store 9(f4) 43
+ 47: 44 Load 46(iiCube)
+ 48: 7(fvec4) Load 9(f4)
+ 50: 49(ivec4) ConvertFToS 48
+ ImageWrite 47 40 50 Lod 18
+ 54: 51 Load 53(ii1DArray)
+ 55: 7(fvec4) Load 9(f4)
+ 56: 49(ivec4) ConvertFToS 55
+ ImageWrite 54 28 56 Lod 18
+ 61: 58 Load 60(ui2DArray)
+ 66: 65(ResType) ImageSparseRead 61 40 Lod 18
+ 67: 62(ivec4) CompositeExtract 66 1
+ Store 64(u4) 67
+ 68: 16(int) CompositeExtract 66 0
+ 72: 69 Load 71(uiCubeArray)
+ 73: 65(ResType) ImageSparseRead 72 40 Lod 18
+ 74: 62(ivec4) CompositeExtract 73 1
+ Store 64(u4) 74
+ 75: 16(int) CompositeExtract 73 0
+ 78: 7(fvec4) Load 9(f4)
+ 79: 62(ivec4) Load 64(u4)
+ 80: 7(fvec4) ConvertUToF 79
+ 81: 7(fvec4) FAdd 78 80
+ Store 77(fragColor) 81
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.frag.out
new file mode 100644
index 00000000000..6cc60705418
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.frag.out
@@ -0,0 +1,779 @@
+spv.int16.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 561
+
+ Capability Shader
+ Capability Float16
+ Capability Float64
+ Capability Int64
+ Capability Int16
+ Capability StorageUniform16
+ Capability StorageInputOutput16
+ Extension "SPV_AMD_gpu_shader_half_float"
+ Extension "SPV_AMD_gpu_shader_int16"
+ Extension "SPV_KHR_16bit_storage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 520 522
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_AMD_gpu_shader_half_float"
+ SourceExtension "GL_AMD_gpu_shader_int16"
+ SourceExtension "GL_ARB_gpu_shader_int64"
+ Name 4 "main"
+ Name 6 "literal("
+ Name 8 "operators("
+ Name 10 "typeCast("
+ Name 12 "builtinFuncs("
+ Name 16 "u16"
+ Name 25 "Uniforms"
+ MemberName 25(Uniforms) 0 "i"
+ Name 27 ""
+ Name 34 "indexable"
+ Name 45 "indexable"
+ Name 51 "u16v"
+ Name 57 "i16"
+ Name 70 "u16"
+ Name 108 "i"
+ Name 130 "b"
+ Name 151 "u"
+ Name 190 "i16v"
+ Name 193 "bv"
+ Name 201 "u16v"
+ Name 214 "iv"
+ Name 227 "uv"
+ Name 241 "fv"
+ Name 253 "dv"
+ Name 265 "f16v"
+ Name 277 "i64v"
+ Name 291 "u64v"
+ Name 306 "i16v"
+ Name 312 "i16"
+ Name 320 "u16v"
+ Name 322 "u16"
+ Name 394 "f16v"
+ Name 397 "exp"
+ Name 398 "ResType"
+ Name 419 "packi"
+ Name 424 "packu"
+ Name 433 "packi64"
+ Name 442 "packu64"
+ Name 451 "bv"
+ Name 516 "Block"
+ MemberName 516(Block) 0 "i16v"
+ MemberName 516(Block) 1 "u16"
+ Name 518 "block"
+ Name 520 "iu16v"
+ Name 522 "ii16"
+ Name 523 "si64"
+ Name 524 "su64"
+ Name 525 "si"
+ Name 526 "su"
+ Name 527 "sb"
+ Name 528 "si16"
+ Name 529 "su16"
+ MemberDecorate 25(Uniforms) 0 Offset 0
+ Decorate 25(Uniforms) Block
+ Decorate 27 DescriptorSet 0
+ Decorate 27 Binding 0
+ MemberDecorate 516(Block) 0 Offset 0
+ MemberDecorate 516(Block) 1 Offset 6
+ Decorate 516(Block) Block
+ Decorate 518(block) DescriptorSet 0
+ Decorate 518(block) Binding 1
+ Decorate 520(iu16v) Flat
+ Decorate 520(iu16v) Location 0
+ Decorate 522(ii16) Flat
+ Decorate 522(ii16) Location 1
+ Decorate 523(si64) SpecId 100
+ Decorate 524(su64) SpecId 101
+ Decorate 525(si) SpecId 102
+ Decorate 526(su) SpecId 103
+ Decorate 527(sb) SpecId 104
+ Decorate 528(si16) SpecId 105
+ Decorate 529(su16) SpecId 106
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 14: TypeInt 16 0
+ 15: TypePointer Function 14(int)
+ 17: TypeInt 16 1
+ 18: TypeInt 32 0
+ 19: 18(int) Constant 3
+ 20: TypeArray 17(int) 19
+ 21: 17(int) Constant 273
+ 22: 17(int) Constant 65534
+ 23: 17(int) Constant 256
+ 24: 20 ConstantComposite 21 22 23
+ 25(Uniforms): TypeStruct 18(int)
+ 26: TypePointer Uniform 25(Uniforms)
+ 27: 26(ptr) Variable Uniform
+ 28: TypeInt 32 1
+ 29: 28(int) Constant 0
+ 30: TypePointer Uniform 18(int)
+ 33: TypePointer Function 20
+ 35: TypePointer Function 17(int)
+ 39: TypeArray 14(int) 19
+ 40: 14(int) Constant 65535
+ 41: 39 ConstantComposite 40 40 40
+ 44: TypePointer Function 39
+ 49: TypeVector 14(int) 3
+ 50: TypePointer Function 49(ivec3)
+ 53: 17(int) Constant 1
+ 54: TypeVector 17(int) 3
+ 107: TypePointer Function 28(int)
+ 111: TypeVector 28(int) 3
+ 114: 18(int) Constant 1
+ 120: 18(int) Constant 2
+ 128: TypeBool
+ 129: TypePointer Function 128(bool)
+ 131: 18(int) Constant 0
+ 150: TypePointer Function 18(int)
+ 188: TypeVector 17(int) 2
+ 189: TypePointer Function 188(ivec2)
+ 191: TypeVector 128(bool) 2
+ 192: TypePointer Function 191(bvec2)
+ 195: 17(int) Constant 0
+ 196: 188(ivec2) ConstantComposite 195 195
+ 197: 188(ivec2) ConstantComposite 53 53
+ 199: TypeVector 14(int) 2
+ 200: TypePointer Function 199(ivec2)
+ 203: 14(int) Constant 0
+ 204: 14(int) Constant 1
+ 205: 199(ivec2) ConstantComposite 203 203
+ 206: 199(ivec2) ConstantComposite 204 204
+ 212: TypeVector 28(int) 2
+ 213: TypePointer Function 212(ivec2)
+ 223: TypeVector 18(int) 2
+ 226: TypePointer Function 223(ivec2)
+ 238: TypeFloat 32
+ 239: TypeVector 238(float) 2
+ 240: TypePointer Function 239(fvec2)
+ 250: TypeFloat 64
+ 251: TypeVector 250(float) 2
+ 252: TypePointer Function 251(fvec2)
+ 262: TypeFloat 16
+ 263: TypeVector 262(float) 2
+ 264: TypePointer Function 263(fvec2)
+ 274: TypeInt 64 1
+ 275: TypeVector 274(int) 2
+ 276: TypePointer Function 275(ivec2)
+ 286: TypeInt 64 0
+ 287: TypeVector 286(int) 2
+ 290: TypePointer Function 287(ivec2)
+ 317: 17(int) Constant 65535
+ 318: 188(ivec2) ConstantComposite 317 317
+ 327: 49(ivec3) ConstantComposite 203 203 203
+ 369: 128(bool) ConstantTrue
+ 376: 128(bool) ConstantFalse
+ 377: 191(bvec2) ConstantComposite 376 376
+ 389: TypeVector 128(bool) 3
+ 390: 389(bvec3) ConstantComposite 376 376 376
+ 392: TypeVector 262(float) 3
+ 393: TypePointer Function 392(fvec3)
+ 396: TypePointer Function 54(ivec3)
+ 398(ResType): TypeStruct 392(fvec3) 54(ivec3)
+ 408: TypePointer Function 262(float)
+ 432: TypePointer Function 274(int)
+ 435: TypeVector 17(int) 4
+ 441: TypePointer Function 286(int)
+ 444: TypeVector 14(int) 4
+ 450: TypePointer Function 389(bvec3)
+ 516(Block): TypeStruct 54(ivec3) 14(int)
+ 517: TypePointer Uniform 516(Block)
+ 518(block): 517(ptr) Variable Uniform
+ 519: TypePointer Input 49(ivec3)
+ 520(iu16v): 519(ptr) Variable Input
+ 521: TypePointer Input 17(int)
+ 522(ii16): 521(ptr) Variable Input
+ 523(si64): 274(int) SpecConstant 4294967286 4294967295
+ 524(su64): 286(int) SpecConstant 20 0
+ 525(si): 28(int) SpecConstant 4294967291
+ 526(su): 18(int) SpecConstant 4
+ 527(sb): 128(bool) SpecConstantTrue
+ 528(si16): 17(int) SpecConstant 65531
+ 529(su16): 14(int) SpecConstant 4
+ 530: 128(bool) SpecConstantOp 171 528(si16) 203
+ 531: 128(bool) SpecConstantOp 171 529(su16) 203
+ 532: 17(int) SpecConstantOp 169 527(sb) 53 195
+ 533: 14(int) SpecConstantOp 169 527(sb) 204 203
+ 534: 28(int) SpecConstantOp 114 528(si16)
+ 535: 18(int) SpecConstantOp 113 529(su16)
+ 536: 28(int) SpecConstantOp 128 535 131
+ 537: 17(int) SpecConstantOp 114 525(si)
+ 538: 17(int) SpecConstantOp 114 525(si)
+ 539: 14(int) SpecConstantOp 128 538 203
+ 540: 28(int) SpecConstantOp 114 528(si16)
+ 541: 18(int) SpecConstantOp 128 540 131
+ 542: 18(int) SpecConstantOp 113 529(su16)
+ 543: 14(int) SpecConstantOp 113 526(su)
+ 544: 17(int) SpecConstantOp 128 543 203
+ 545: 14(int) SpecConstantOp 113 526(su)
+ 546: 274(int) SpecConstantOp 114 528(si16)
+ 547: 286(int) SpecConstantOp 113 529(su16)
+ 548: 286(int) Constant 0 0
+ 549: 274(int) SpecConstantOp 128 547 548
+ 550: 17(int) SpecConstantOp 114 523(si64)
+ 551: 17(int) SpecConstantOp 114 523(si64)
+ 552: 14(int) SpecConstantOp 128 551 203
+ 553: 274(int) SpecConstantOp 114 528(si16)
+ 554: 286(int) SpecConstantOp 128 553 548
+ 555: 286(int) SpecConstantOp 113 529(su16)
+ 556: 14(int) SpecConstantOp 113 524(su64)
+ 557: 17(int) SpecConstantOp 128 556 203
+ 558: 14(int) SpecConstantOp 113 524(su64)
+ 559: 14(int) SpecConstantOp 128 528(si16) 203
+ 560: 17(int) SpecConstantOp 128 529(su16) 203
+ 4(main): 2 Function None 3
+ 5: Label
+ 512: 2 FunctionCall 6(literal()
+ 513: 2 FunctionCall 8(operators()
+ 514: 2 FunctionCall 10(typeCast()
+ 515: 2 FunctionCall 12(builtinFuncs()
+ Return
+ FunctionEnd
+ 6(literal(): 2 Function None 3
+ 7: Label
+ 16(u16): 15(ptr) Variable Function
+ 34(indexable): 33(ptr) Variable Function
+ 45(indexable): 44(ptr) Variable Function
+ 31: 30(ptr) AccessChain 27 29
+ 32: 18(int) Load 31
+ Store 34(indexable) 24
+ 36: 35(ptr) AccessChain 34(indexable) 32
+ 37: 17(int) Load 36
+ 38: 14(int) Bitcast 37
+ 42: 30(ptr) AccessChain 27 29
+ 43: 18(int) Load 42
+ Store 45(indexable) 41
+ 46: 15(ptr) AccessChain 45(indexable) 43
+ 47: 14(int) Load 46
+ 48: 14(int) IAdd 38 47
+ Store 16(u16) 48
+ Return
+ FunctionEnd
+ 8(operators(): 2 Function None 3
+ 9: Label
+ 51(u16v): 50(ptr) Variable Function
+ 57(i16): 35(ptr) Variable Function
+ 70(u16): 15(ptr) Variable Function
+ 108(i): 107(ptr) Variable Function
+ 130(b): 129(ptr) Variable Function
+ 151(u): 150(ptr) Variable Function
+ 52: 49(ivec3) Load 51(u16v)
+ 55: 54(ivec3) CompositeConstruct 53 53 53
+ 56: 49(ivec3) IAdd 52 55
+ Store 51(u16v) 56
+ 58: 17(int) Load 57(i16)
+ 59: 17(int) ISub 58 53
+ Store 57(i16) 59
+ 60: 17(int) Load 57(i16)
+ 61: 17(int) IAdd 60 53
+ Store 57(i16) 61
+ 62: 49(ivec3) Load 51(u16v)
+ 63: 54(ivec3) CompositeConstruct 53 53 53
+ 64: 49(ivec3) ISub 62 63
+ Store 51(u16v) 64
+ 65: 49(ivec3) Load 51(u16v)
+ 66: 49(ivec3) Not 65
+ Store 51(u16v) 66
+ 67: 17(int) Load 57(i16)
+ Store 57(i16) 67
+ 68: 49(ivec3) Load 51(u16v)
+ 69: 49(ivec3) SNegate 68
+ Store 51(u16v) 69
+ 71: 17(int) Load 57(i16)
+ 72: 14(int) Bitcast 71
+ 73: 14(int) Load 70(u16)
+ 74: 14(int) IAdd 73 72
+ Store 70(u16) 74
+ 75: 49(ivec3) Load 51(u16v)
+ 76: 49(ivec3) Load 51(u16v)
+ 77: 49(ivec3) ISub 76 75
+ Store 51(u16v) 77
+ 78: 17(int) Load 57(i16)
+ 79: 17(int) Load 57(i16)
+ 80: 17(int) IMul 79 78
+ Store 57(i16) 80
+ 81: 49(ivec3) Load 51(u16v)
+ 82: 49(ivec3) Load 51(u16v)
+ 83: 49(ivec3) UDiv 82 81
+ Store 51(u16v) 83
+ 84: 17(int) Load 57(i16)
+ 85: 14(int) Bitcast 84
+ 86: 49(ivec3) Load 51(u16v)
+ 87: 49(ivec3) CompositeConstruct 85 85 85
+ 88: 49(ivec3) UMod 86 87
+ Store 51(u16v) 88
+ 89: 49(ivec3) Load 51(u16v)
+ 90: 49(ivec3) Load 51(u16v)
+ 91: 49(ivec3) IAdd 89 90
+ Store 51(u16v) 91
+ 92: 17(int) Load 57(i16)
+ 93: 14(int) Bitcast 92
+ 94: 14(int) Load 70(u16)
+ 95: 14(int) ISub 93 94
+ Store 70(u16) 95
+ 96: 49(ivec3) Load 51(u16v)
+ 97: 17(int) Load 57(i16)
+ 98: 14(int) Bitcast 97
+ 99: 49(ivec3) CompositeConstruct 98 98 98
+ 100: 49(ivec3) IMul 96 99
+ Store 51(u16v) 100
+ 101: 17(int) Load 57(i16)
+ 102: 17(int) Load 57(i16)
+ 103: 17(int) IMul 101 102
+ Store 57(i16) 103
+ 104: 17(int) Load 57(i16)
+ 105: 17(int) Load 57(i16)
+ 106: 17(int) SMod 104 105
+ Store 57(i16) 106
+ 109: 28(int) Load 108(i)
+ 110: 49(ivec3) Load 51(u16v)
+ 112: 111(ivec3) CompositeConstruct 109 109 109
+ 113: 49(ivec3) ShiftLeftLogical 110 112
+ Store 51(u16v) 113
+ 115: 15(ptr) AccessChain 51(u16v) 114
+ 116: 14(int) Load 115
+ 117: 17(int) Load 57(i16)
+ 118: 17(int) ShiftRightArithmetic 117 116
+ Store 57(i16) 118
+ 119: 17(int) Load 57(i16)
+ 121: 15(ptr) AccessChain 51(u16v) 120
+ 122: 14(int) Load 121
+ 123: 17(int) ShiftLeftLogical 119 122
+ Store 57(i16) 123
+ 124: 49(ivec3) Load 51(u16v)
+ 125: 17(int) Load 57(i16)
+ 126: 54(ivec3) CompositeConstruct 125 125 125
+ 127: 49(ivec3) ShiftLeftLogical 124 126
+ Store 51(u16v) 127
+ 132: 15(ptr) AccessChain 51(u16v) 131
+ 133: 14(int) Load 132
+ 134: 17(int) Load 57(i16)
+ 135: 14(int) Bitcast 134
+ 136: 128(bool) INotEqual 133 135
+ Store 130(b) 136
+ 137: 17(int) Load 57(i16)
+ 138: 14(int) Bitcast 137
+ 139: 15(ptr) AccessChain 51(u16v) 131
+ 140: 14(int) Load 139
+ 141: 128(bool) IEqual 138 140
+ Store 130(b) 141
+ 142: 15(ptr) AccessChain 51(u16v) 131
+ 143: 14(int) Load 142
+ 144: 15(ptr) AccessChain 51(u16v) 114
+ 145: 14(int) Load 144
+ 146: 128(bool) UGreaterThan 143 145
+ Store 130(b) 146
+ 147: 17(int) Load 57(i16)
+ 148: 28(int) SConvert 147
+ 149: 18(int) Bitcast 148
+ 152: 18(int) Load 151(u)
+ 153: 128(bool) ULessThan 149 152
+ Store 130(b) 153
+ 154: 15(ptr) AccessChain 51(u16v) 114
+ 155: 14(int) Load 154
+ 156: 15(ptr) AccessChain 51(u16v) 131
+ 157: 14(int) Load 156
+ 158: 128(bool) UGreaterThanEqual 155 157
+ Store 130(b) 158
+ 159: 17(int) Load 57(i16)
+ 160: 28(int) SConvert 159
+ 161: 28(int) Load 108(i)
+ 162: 128(bool) SLessThanEqual 160 161
+ Store 130(b) 162
+ 163: 17(int) Load 57(i16)
+ 164: 14(int) Bitcast 163
+ 165: 49(ivec3) Load 51(u16v)
+ 166: 49(ivec3) CompositeConstruct 164 164 164
+ 167: 49(ivec3) BitwiseOr 165 166
+ Store 51(u16v) 167
+ 168: 17(int) Load 57(i16)
+ 169: 14(int) Bitcast 168
+ 170: 14(int) Load 70(u16)
+ 171: 14(int) BitwiseOr 169 170
+ Store 70(u16) 171
+ 172: 17(int) Load 57(i16)
+ 173: 17(int) Load 57(i16)
+ 174: 17(int) BitwiseAnd 173 172
+ Store 57(i16) 174
+ 175: 49(ivec3) Load 51(u16v)
+ 176: 49(ivec3) Load 51(u16v)
+ 177: 49(ivec3) BitwiseAnd 175 176
+ Store 51(u16v) 177
+ 178: 17(int) Load 57(i16)
+ 179: 14(int) Bitcast 178
+ 180: 49(ivec3) Load 51(u16v)
+ 181: 49(ivec3) CompositeConstruct 179 179 179
+ 182: 49(ivec3) BitwiseXor 180 181
+ Store 51(u16v) 182
+ 183: 49(ivec3) Load 51(u16v)
+ 184: 17(int) Load 57(i16)
+ 185: 14(int) Bitcast 184
+ 186: 49(ivec3) CompositeConstruct 185 185 185
+ 187: 49(ivec3) BitwiseXor 183 186
+ Store 51(u16v) 187
+ Return
+ FunctionEnd
+ 10(typeCast(): 2 Function None 3
+ 11: Label
+ 190(i16v): 189(ptr) Variable Function
+ 193(bv): 192(ptr) Variable Function
+ 201(u16v): 200(ptr) Variable Function
+ 214(iv): 213(ptr) Variable Function
+ 227(uv): 226(ptr) Variable Function
+ 241(fv): 240(ptr) Variable Function
+ 253(dv): 252(ptr) Variable Function
+ 265(f16v): 264(ptr) Variable Function
+ 277(i64v): 276(ptr) Variable Function
+ 291(u64v): 290(ptr) Variable Function
+ 194: 191(bvec2) Load 193(bv)
+ 198: 188(ivec2) Select 194 197 196
+ Store 190(i16v) 198
+ 202: 191(bvec2) Load 193(bv)
+ 207: 199(ivec2) Select 202 206 205
+ Store 201(u16v) 207
+ 208: 188(ivec2) Load 190(i16v)
+ 209: 191(bvec2) INotEqual 208 205
+ Store 193(bv) 209
+ 210: 199(ivec2) Load 201(u16v)
+ 211: 191(bvec2) INotEqual 210 205
+ Store 193(bv) 211
+ 215: 212(ivec2) Load 214(iv)
+ 216: 188(ivec2) SConvert 215
+ Store 190(i16v) 216
+ 217: 212(ivec2) Load 214(iv)
+ 218: 188(ivec2) SConvert 217
+ 219: 199(ivec2) Bitcast 218
+ Store 201(u16v) 219
+ 220: 188(ivec2) Load 190(i16v)
+ 221: 212(ivec2) SConvert 220
+ Store 214(iv) 221
+ 222: 199(ivec2) Load 201(u16v)
+ 224: 223(ivec2) UConvert 222
+ 225: 212(ivec2) Bitcast 224
+ Store 214(iv) 225
+ 228: 223(ivec2) Load 227(uv)
+ 229: 199(ivec2) UConvert 228
+ 230: 188(ivec2) Bitcast 229
+ Store 190(i16v) 230
+ 231: 223(ivec2) Load 227(uv)
+ 232: 199(ivec2) UConvert 231
+ Store 201(u16v) 232
+ 233: 188(ivec2) Load 190(i16v)
+ 234: 212(ivec2) SConvert 233
+ 235: 223(ivec2) Bitcast 234
+ Store 227(uv) 235
+ 236: 199(ivec2) Load 201(u16v)
+ 237: 223(ivec2) UConvert 236
+ Store 227(uv) 237
+ 242: 239(fvec2) Load 241(fv)
+ 243: 188(ivec2) ConvertFToS 242
+ Store 190(i16v) 243
+ 244: 239(fvec2) Load 241(fv)
+ 245: 199(ivec2) ConvertFToU 244
+ Store 201(u16v) 245
+ 246: 188(ivec2) Load 190(i16v)
+ 247: 239(fvec2) ConvertSToF 246
+ Store 241(fv) 247
+ 248: 199(ivec2) Load 201(u16v)
+ 249: 239(fvec2) ConvertUToF 248
+ Store 241(fv) 249
+ 254: 251(fvec2) Load 253(dv)
+ 255: 188(ivec2) ConvertFToS 254
+ Store 190(i16v) 255
+ 256: 251(fvec2) Load 253(dv)
+ 257: 199(ivec2) ConvertFToU 256
+ Store 201(u16v) 257
+ 258: 188(ivec2) Load 190(i16v)
+ 259: 251(fvec2) ConvertSToF 258
+ Store 253(dv) 259
+ 260: 199(ivec2) Load 201(u16v)
+ 261: 251(fvec2) ConvertUToF 260
+ Store 253(dv) 261
+ 266: 263(fvec2) Load 265(f16v)
+ 267: 188(ivec2) ConvertFToS 266
+ Store 190(i16v) 267
+ 268: 263(fvec2) Load 265(f16v)
+ 269: 199(ivec2) ConvertFToU 268
+ Store 201(u16v) 269
+ 270: 188(ivec2) Load 190(i16v)
+ 271: 263(fvec2) ConvertSToF 270
+ Store 265(f16v) 271
+ 272: 199(ivec2) Load 201(u16v)
+ 273: 263(fvec2) ConvertUToF 272
+ Store 265(f16v) 273
+ 278: 275(ivec2) Load 277(i64v)
+ 279: 188(ivec2) SConvert 278
+ Store 190(i16v) 279
+ 280: 275(ivec2) Load 277(i64v)
+ 281: 188(ivec2) SConvert 280
+ 282: 199(ivec2) Bitcast 281
+ Store 201(u16v) 282
+ 283: 188(ivec2) Load 190(i16v)
+ 284: 275(ivec2) SConvert 283
+ Store 277(i64v) 284
+ 285: 199(ivec2) Load 201(u16v)
+ 288: 287(ivec2) UConvert 285
+ 289: 275(ivec2) Bitcast 288
+ Store 277(i64v) 289
+ 292: 287(ivec2) Load 291(u64v)
+ 293: 199(ivec2) UConvert 292
+ 294: 188(ivec2) Bitcast 293
+ Store 190(i16v) 294
+ 295: 287(ivec2) Load 291(u64v)
+ 296: 199(ivec2) UConvert 295
+ Store 201(u16v) 296
+ 297: 188(ivec2) Load 190(i16v)
+ 298: 275(ivec2) SConvert 297
+ 299: 287(ivec2) Bitcast 298
+ Store 291(u64v) 299
+ 300: 199(ivec2) Load 201(u16v)
+ 301: 287(ivec2) UConvert 300
+ Store 291(u64v) 301
+ 302: 199(ivec2) Load 201(u16v)
+ 303: 188(ivec2) Bitcast 302
+ Store 190(i16v) 303
+ 304: 188(ivec2) Load 190(i16v)
+ 305: 199(ivec2) Bitcast 304
+ Store 201(u16v) 305
+ Return
+ FunctionEnd
+12(builtinFuncs(): 2 Function None 3
+ 13: Label
+ 306(i16v): 189(ptr) Variable Function
+ 312(i16): 35(ptr) Variable Function
+ 320(u16v): 50(ptr) Variable Function
+ 322(u16): 15(ptr) Variable Function
+ 394(f16v): 393(ptr) Variable Function
+ 397(exp): 396(ptr) Variable Function
+ 419(packi): 107(ptr) Variable Function
+ 424(packu): 150(ptr) Variable Function
+ 433(packi64): 432(ptr) Variable Function
+ 442(packu64): 441(ptr) Variable Function
+ 451(bv): 450(ptr) Variable Function
+ 307: 188(ivec2) Load 306(i16v)
+ 308: 188(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 307
+ Store 306(i16v) 308
+ 309: 188(ivec2) Load 306(i16v)
+ 310: 188(ivec2) ExtInst 1(GLSL.std.450) 7(SSign) 309
+ Store 306(i16v) 310
+ 311: 188(ivec2) Load 306(i16v)
+ 313: 17(int) Load 312(i16)
+ 314: 188(ivec2) CompositeConstruct 313 313
+ 315: 188(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 311 314
+ Store 306(i16v) 315
+ 316: 188(ivec2) Load 306(i16v)
+ 319: 188(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 316 318
+ Store 306(i16v) 319
+ 321: 49(ivec3) Load 320(u16v)
+ 323: 14(int) Load 322(u16)
+ 324: 49(ivec3) CompositeConstruct 323 323 323
+ 325: 49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 321 324
+ Store 320(u16v) 325
+ 326: 49(ivec3) Load 320(u16v)
+ 328: 49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 326 327
+ Store 320(u16v) 328
+ 329: 188(ivec2) Load 306(i16v)
+ 330: 17(int) Load 312(i16)
+ 331: 188(ivec2) CompositeConstruct 330 330
+ 332: 188(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 329 331
+ Store 306(i16v) 332
+ 333: 188(ivec2) Load 306(i16v)
+ 334: 188(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 333 318
+ Store 306(i16v) 334
+ 335: 49(ivec3) Load 320(u16v)
+ 336: 14(int) Load 322(u16)
+ 337: 49(ivec3) CompositeConstruct 336 336 336
+ 338: 49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 335 337
+ Store 320(u16v) 338
+ 339: 49(ivec3) Load 320(u16v)
+ 340: 49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 339 327
+ Store 320(u16v) 340
+ 341: 188(ivec2) Load 306(i16v)
+ 342: 17(int) Load 312(i16)
+ 343: 17(int) SNegate 342
+ 344: 17(int) Load 312(i16)
+ 345: 188(ivec2) CompositeConstruct 343 343
+ 346: 188(ivec2) CompositeConstruct 344 344
+ 347: 188(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 341 345 346
+ Store 306(i16v) 347
+ 348: 188(ivec2) Load 306(i16v)
+ 349: 188(ivec2) Load 306(i16v)
+ 350: 188(ivec2) SNegate 349
+ 351: 188(ivec2) Load 306(i16v)
+ 352: 188(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 348 350 351
+ Store 306(i16v) 352
+ 353: 49(ivec3) Load 320(u16v)
+ 354: 14(int) Load 322(u16)
+ 355: 14(int) SNegate 354
+ 356: 14(int) Load 322(u16)
+ 357: 49(ivec3) CompositeConstruct 355 355 355
+ 358: 49(ivec3) CompositeConstruct 356 356 356
+ 359: 49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 353 357 358
+ Store 320(u16v) 359
+ 360: 49(ivec3) Load 320(u16v)
+ 361: 49(ivec3) Load 320(u16v)
+ 362: 49(ivec3) SNegate 361
+ 363: 49(ivec3) Load 320(u16v)
+ 364: 49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 360 362 363
+ Store 320(u16v) 364
+ 365: 35(ptr) AccessChain 306(i16v) 131
+ 366: 17(int) Load 365
+ 367: 35(ptr) AccessChain 306(i16v) 114
+ 368: 17(int) Load 367
+ 370: 17(int) Select 369 368 366
+ Store 312(i16) 370
+ 371: 17(int) Load 312(i16)
+ 372: 188(ivec2) CompositeConstruct 371 371
+ 373: 17(int) Load 312(i16)
+ 374: 17(int) SNegate 373
+ 375: 188(ivec2) CompositeConstruct 374 374
+ 378: 188(ivec2) Select 377 375 372
+ Store 306(i16v) 378
+ 379: 15(ptr) AccessChain 320(u16v) 131
+ 380: 14(int) Load 379
+ 381: 15(ptr) AccessChain 320(u16v) 114
+ 382: 14(int) Load 381
+ 383: 14(int) Select 369 382 380
+ Store 322(u16) 383
+ 384: 14(int) Load 322(u16)
+ 385: 49(ivec3) CompositeConstruct 384 384 384
+ 386: 14(int) Load 322(u16)
+ 387: 14(int) SNegate 386
+ 388: 49(ivec3) CompositeConstruct 387 387 387
+ 391: 49(ivec3) Select 390 388 385
+ Store 320(u16v) 391
+ 395: 392(fvec3) Load 394(f16v)
+ 399:398(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 395
+ 400: 54(ivec3) CompositeExtract 399 1
+ Store 397(exp) 400
+ 401: 392(fvec3) CompositeExtract 399 0
+ Store 394(f16v) 401
+ 402: 392(fvec3) Load 394(f16v)
+ 403: 54(ivec3) Load 397(exp)
+ 404: 392(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 402 403
+ Store 394(f16v) 404
+ 405: 392(fvec3) Load 394(f16v)
+ 406: 263(fvec2) VectorShuffle 405 405 0 1
+ 407: 188(ivec2) Bitcast 406
+ Store 306(i16v) 407
+ 409: 408(ptr) AccessChain 394(f16v) 120
+ 410: 262(float) Load 409
+ 411: 14(int) Bitcast 410
+ 412: 15(ptr) AccessChain 320(u16v) 131
+ Store 412 411
+ 413: 188(ivec2) Load 306(i16v)
+ 414: 263(fvec2) Bitcast 413
+ 415: 392(fvec3) Load 394(f16v)
+ 416: 392(fvec3) VectorShuffle 415 414 3 4 2
+ Store 394(f16v) 416
+ 417: 49(ivec3) Load 320(u16v)
+ 418: 392(fvec3) Bitcast 417
+ Store 394(f16v) 418
+ 420: 188(ivec2) Load 306(i16v)
+ 421: 28(int) Bitcast 420
+ Store 419(packi) 421
+ 422: 28(int) Load 419(packi)
+ 423: 188(ivec2) Bitcast 422
+ Store 306(i16v) 423
+ 425: 49(ivec3) Load 320(u16v)
+ 426: 199(ivec2) VectorShuffle 425 425 0 1
+ 427: 18(int) Bitcast 426
+ Store 424(packu) 427
+ 428: 18(int) Load 424(packu)
+ 429: 199(ivec2) Bitcast 428
+ 430: 49(ivec3) Load 320(u16v)
+ 431: 49(ivec3) VectorShuffle 430 429 3 4 2
+ Store 320(u16v) 431
+ 434: 17(int) Load 312(i16)
+ 436: 435(ivec4) CompositeConstruct 434 434 434 434
+ 437: 274(int) Bitcast 436
+ Store 433(packi64) 437
+ 438: 274(int) Load 433(packi64)
+ 439: 435(ivec4) Bitcast 438
+ 440: 188(ivec2) VectorShuffle 439 439 0 1
+ Store 306(i16v) 440
+ 443: 14(int) Load 322(u16)
+ 445: 444(ivec4) CompositeConstruct 443 443 443 443
+ 446: 286(int) Bitcast 445
+ Store 442(packu64) 446
+ 447: 286(int) Load 442(packu64)
+ 448: 444(ivec4) Bitcast 447
+ 449: 49(ivec3) VectorShuffle 448 448 0 1 2
+ Store 320(u16v) 449
+ 452: 49(ivec3) Load 320(u16v)
+ 453: 14(int) Load 322(u16)
+ 454: 49(ivec3) CompositeConstruct 453 453 453
+ 455: 389(bvec3) ULessThan 452 454
+ Store 451(bv) 455
+ 456: 188(ivec2) Load 306(i16v)
+ 457: 17(int) Load 312(i16)
+ 458: 188(ivec2) CompositeConstruct 457 457
+ 459: 191(bvec2) SLessThan 456 458
+ 460: 389(bvec3) Load 451(bv)
+ 461: 389(bvec3) VectorShuffle 460 459 3 4 2
+ Store 451(bv) 461
+ 462: 49(ivec3) Load 320(u16v)
+ 463: 14(int) Load 322(u16)
+ 464: 49(ivec3) CompositeConstruct 463 463 463
+ 465: 389(bvec3) ULessThanEqual 462 464
+ Store 451(bv) 465
+ 466: 188(ivec2) Load 306(i16v)
+ 467: 17(int) Load 312(i16)
+ 468: 188(ivec2) CompositeConstruct 467 467
+ 469: 191(bvec2) SLessThanEqual 466 468
+ 470: 389(bvec3) Load 451(bv)
+ 471: 389(bvec3) VectorShuffle 470 469 3 4 2
+ Store 451(bv) 471
+ 472: 49(ivec3) Load 320(u16v)
+ 473: 14(int) Load 322(u16)
+ 474: 49(ivec3) CompositeConstruct 473 473 473
+ 475: 389(bvec3) UGreaterThan 472 474
+ Store 451(bv) 475
+ 476: 188(ivec2) Load 306(i16v)
+ 477: 17(int) Load 312(i16)
+ 478: 188(ivec2) CompositeConstruct 477 477
+ 479: 191(bvec2) SGreaterThan 476 478
+ 480: 389(bvec3) Load 451(bv)
+ 481: 389(bvec3) VectorShuffle 480 479 3 4 2
+ Store 451(bv) 481
+ 482: 49(ivec3) Load 320(u16v)
+ 483: 14(int) Load 322(u16)
+ 484: 49(ivec3) CompositeConstruct 483 483 483
+ 485: 389(bvec3) UGreaterThanEqual 482 484
+ Store 451(bv) 485
+ 486: 188(ivec2) Load 306(i16v)
+ 487: 17(int) Load 312(i16)
+ 488: 188(ivec2) CompositeConstruct 487 487
+ 489: 191(bvec2) SGreaterThanEqual 486 488
+ 490: 389(bvec3) Load 451(bv)
+ 491: 389(bvec3) VectorShuffle 490 489 3 4 2
+ Store 451(bv) 491
+ 492: 49(ivec3) Load 320(u16v)
+ 493: 14(int) Load 322(u16)
+ 494: 49(ivec3) CompositeConstruct 493 493 493
+ 495: 389(bvec3) IEqual 492 494
+ Store 451(bv) 495
+ 496: 188(ivec2) Load 306(i16v)
+ 497: 17(int) Load 312(i16)
+ 498: 188(ivec2) CompositeConstruct 497 497
+ 499: 191(bvec2) IEqual 496 498
+ 500: 389(bvec3) Load 451(bv)
+ 501: 389(bvec3) VectorShuffle 500 499 3 4 2
+ Store 451(bv) 501
+ 502: 49(ivec3) Load 320(u16v)
+ 503: 14(int) Load 322(u16)
+ 504: 49(ivec3) CompositeConstruct 503 503 503
+ 505: 389(bvec3) INotEqual 502 504
+ Store 451(bv) 505
+ 506: 188(ivec2) Load 306(i16v)
+ 507: 17(int) Load 312(i16)
+ 508: 188(ivec2) CompositeConstruct 507 507
+ 509: 191(bvec2) INotEqual 506 508
+ 510: 389(bvec3) Load 451(bv)
+ 511: 389(bvec3) VectorShuffle 510 509 3 4 2
+ Store 451(bv) 511
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out
index df35fea780e..3c6dc8509b4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out
@@ -1,8 +1,6 @@
spv.int64.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 480
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intOps.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intOps.vert.out
index 93d2dfdae19..33e57bf37cd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intOps.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intOps.vert.out
@@ -1,8 +1,6 @@
spv.intOps.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 268
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.interpOps.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.interpOps.frag.out
index 88d8e53cfd6..05e7f62f6af 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.interpOps.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.interpOps.frag.out
@@ -1,8 +1,6 @@
spv.interpOps.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 100
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.layoutNested.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.layoutNested.vert.out
index 0d0b28bbec6..3e73b84ac66 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.layoutNested.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.layoutNested.vert.out
@@ -1,8 +1,6 @@
spv.layoutNested.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 66
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.length.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.length.frag.out
index 76f6ca63d60..2bb07e2ee11 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.length.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.length.frag.out
@@ -1,6 +1,6 @@
spv.length.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 33
Capability Shader
@@ -14,6 +14,7 @@ spv.length.frag
Name 14 "v"
Name 26 "gl_FragColor"
Name 32 "u"
+ Decorate 26(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out
index 7ffa874171c..b59dfd89a52 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out
@@ -1,8 +1,6 @@
spv.localAggregates.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 136
Capability Shader
@@ -42,6 +40,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 135 "foo2"
Decorate 15(foo3) Flat
Decorate 90(condition) Flat
+ Decorate 108(gl_FragColor) Location 0
Decorate 128(samp2D) DescriptorSet 0
Decorate 134(foo) Flat
Decorate 135(foo2) Flat
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loops.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loops.frag.out
index 8b1b48076d7..7ce2c1c5bee 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loops.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loops.frag.out
@@ -1,6 +1,6 @@
spv.loops.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 725
Capability Shader
@@ -49,6 +49,7 @@ spv.loops.frag
Name 687 "d18"
Name 698 "d17"
Decorate 157(Count) Flat
+ Decorate 615(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loopsArtificial.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loopsArtificial.frag.out
index 707a78df0e8..a2339bd849c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loopsArtificial.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.loopsArtificial.frag.out
@@ -1,6 +1,6 @@
spv.loopsArtificial.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 158
Capability Shader
@@ -30,6 +30,7 @@ spv.loopsArtificial.frag
Name 153 "d2"
Name 154 "d3"
Name 157 "Count"
+ Decorate 140(gl_FragColor) Location 0
Decorate 157(Count) Flat
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.looseUniformNoLoc.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.looseUniformNoLoc.vert.out
new file mode 100644
index 00000000000..55d1639cb28
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.looseUniformNoLoc.vert.out
@@ -0,0 +1,8 @@
+spv.looseUniformNoLoc.vert
+ERROR: spv.looseUniformNoLoc.vert:9: 'uv' : non-opaque uniform variables need a layout(location=L)
+ERROR: 1 compilation errors. No code generated.
+
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out
index 38d9d2cf1fc..832f38ed6dd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out
@@ -1,8 +1,6 @@
spv.matFun.vert
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 103
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out
index c7077b9a066..1ac5ad5af26 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix.frag.out
@@ -1,8 +1,6 @@
spv.matrix.frag
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 286
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix2.frag.out
index 78facff346c..b6d747362a0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix2.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matrix2.frag.out
@@ -1,6 +1,6 @@
spv.matrix2.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 221
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out
index a990e47594a..b1ae8df8a58 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out
@@ -1,13 +1,11 @@
spv.memoryQualifier.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 97
Capability Shader
- Capability SampledRect
- Capability Sampled1D
+ Capability ImageRect
+ Capability Image1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
@@ -46,9 +44,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Decorate 44(iCube) DescriptorSet 0
Decorate 44(iCube) Binding 3
Decorate 44(iCube) NonReadable
- MemberDecorate 49(Data) 0 Coherent
MemberDecorate 49(Data) 0 Offset 0
- MemberDecorate 49(Data) 1 Coherent
MemberDecorate 49(Data) 1 Offset 8
MemberDecorate 50(Buffer) 0 Coherent
MemberDecorate 50(Buffer) 0 Volatile
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.merge-unreachable.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.merge-unreachable.frag.out
index 58bbb0627af..24c0f4b4466 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.merge-unreachable.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.merge-unreachable.frag.out
@@ -1,8 +1,6 @@
spv.merge-unreachable.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 25
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStruct.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStruct.comp.out
index f8c0eead85b..04e9c3a3e4e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStruct.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStruct.comp.out
@@ -1,9 +1,7 @@
spv.multiStruct.comp
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 157
+// Generated by (magic number): 80002
+// Id's are bound by 161
Capability Shader
1: ExtInstImport "GLSL.std.450"
@@ -22,31 +20,31 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Name 17 "SSBO0"
MemberName 17(SSBO0) 0 "a"
Name 19 "inBuf"
- Name 37 "SSBO1"
- MemberName 37(SSBO1) 0 "b"
- Name 39 "outBuf"
- Name 57 "MyStruct"
- MemberName 57(MyStruct) 0 "foo"
- MemberName 57(MyStruct) 1 "sb"
- Name 58 "UBO"
- MemberName 58(UBO) 0 "c"
- Name 60 "uBuf"
- Name 84 "Nested"
- MemberName 84(Nested) 0 "f"
- MemberName 84(Nested) 1 "S"
- Name 86 "n"
- Name 88 "Nested"
- MemberName 88(Nested) 0 "f"
- MemberName 88(Nested) 1 "S"
- Name 89 "UBON"
- MemberName 89(UBON) 0 "N1"
- Name 91 "uBufN"
- Name 122 "Nested"
- MemberName 122(Nested) 0 "f"
- MemberName 122(Nested) 1 "S"
- Name 123 "SSBO1N"
- MemberName 123(SSBO1N) 0 "N2"
- Name 125 "outBufN"
+ Name 39 "SSBO1"
+ MemberName 39(SSBO1) 0 "b"
+ Name 41 "outBuf"
+ Name 58 "MyStruct"
+ MemberName 58(MyStruct) 0 "foo"
+ MemberName 58(MyStruct) 1 "sb"
+ Name 59 "UBO"
+ MemberName 59(UBO) 0 "c"
+ Name 61 "uBuf"
+ Name 86 "Nested"
+ MemberName 86(Nested) 0 "f"
+ MemberName 86(Nested) 1 "S"
+ Name 88 "n"
+ Name 90 "Nested"
+ MemberName 90(Nested) 0 "f"
+ MemberName 90(Nested) 1 "S"
+ Name 91 "UBON"
+ MemberName 91(UBON) 0 "N1"
+ Name 93 "uBufN"
+ Name 126 "Nested"
+ MemberName 126(Nested) 0 "f"
+ MemberName 126(Nested) 1 "S"
+ Name 127 "SSBO1N"
+ MemberName 127(SSBO1N) 0 "N2"
+ Name 129 "outBufN"
Decorate 15 ArrayStride 8
MemberDecorate 16(MyStruct) 0 Offset 0
MemberDecorate 16(MyStruct) 1 Offset 16
@@ -54,31 +52,31 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Decorate 17(SSBO0) BufferBlock
Decorate 19(inBuf) DescriptorSet 0
Decorate 19(inBuf) Binding 0
- MemberDecorate 37(SSBO1) 0 Offset 0
- Decorate 37(SSBO1) BufferBlock
- Decorate 39(outBuf) DescriptorSet 0
- Decorate 39(outBuf) Binding 1
- Decorate 56 ArrayStride 16
- MemberDecorate 57(MyStruct) 0 Offset 0
- MemberDecorate 57(MyStruct) 1 Offset 32
- MemberDecorate 58(UBO) 0 Offset 0
- Decorate 58(UBO) Block
- Decorate 60(uBuf) DescriptorSet 0
- Decorate 60(uBuf) Binding 2
- Decorate 87 ArrayStride 48
- MemberDecorate 88(Nested) 0 Offset 0
- MemberDecorate 88(Nested) 1 Offset 16
- MemberDecorate 89(UBON) 0 Offset 0
- Decorate 89(UBON) Block
- Decorate 91(uBufN) DescriptorSet 0
- Decorate 91(uBufN) Binding 2
- Decorate 121 ArrayStride 24
- MemberDecorate 122(Nested) 0 Offset 0
- MemberDecorate 122(Nested) 1 Offset 8
- MemberDecorate 123(SSBO1N) 0 Offset 0
- Decorate 123(SSBO1N) BufferBlock
- Decorate 125(outBufN) DescriptorSet 0
- Decorate 125(outBufN) Binding 1
+ MemberDecorate 39(SSBO1) 0 Offset 0
+ Decorate 39(SSBO1) BufferBlock
+ Decorate 41(outBuf) DescriptorSet 0
+ Decorate 41(outBuf) Binding 1
+ Decorate 57 ArrayStride 16
+ MemberDecorate 58(MyStruct) 0 Offset 0
+ MemberDecorate 58(MyStruct) 1 Offset 32
+ MemberDecorate 59(UBO) 0 Offset 0
+ Decorate 59(UBO) Block
+ Decorate 61(uBuf) DescriptorSet 0
+ Decorate 61(uBuf) Binding 2
+ Decorate 89 ArrayStride 48
+ MemberDecorate 90(Nested) 0 Offset 0
+ MemberDecorate 90(Nested) 1 Offset 16
+ MemberDecorate 91(UBON) 0 Offset 0
+ Decorate 91(UBON) Block
+ Decorate 93(uBufN) DescriptorSet 0
+ Decorate 93(uBufN) Binding 2
+ Decorate 125 ArrayStride 24
+ MemberDecorate 126(Nested) 0 Offset 0
+ MemberDecorate 126(Nested) 1 Offset 8
+ MemberDecorate 127(SSBO1N) 0 Offset 0
+ Decorate 127(SSBO1N) BufferBlock
+ Decorate 129(outBufN) DescriptorSet 0
+ Decorate 129(outBufN) Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -100,44 +98,44 @@ Warning, version 450 is not yet complete; most version-specific features are pre
26: TypePointer Function 10
29: TypePointer Function 7(fvec2)
32: 20(int) Constant 1
- 35: TypePointer Function 11(bool)
- 37(SSBO1): TypeStruct 16(MyStruct)
- 38: TypePointer Uniform 37(SSBO1)
- 39(outBuf): 38(ptr) Variable Uniform
- 43: TypePointer Uniform 15
- 46: TypePointer Uniform 7(fvec2)
- 51: 8(int) Constant 0
- 52: 8(int) Constant 1
- 54: TypePointer Uniform 8(int)
- 56: TypeArray 7(fvec2) 9
- 57(MyStruct): TypeStruct 56 8(int)
- 58(UBO): TypeStruct 57(MyStruct)
- 59: TypePointer Uniform 58(UBO)
- 60(uBuf): 59(ptr) Variable Uniform
- 61: TypePointer Uniform 57(MyStruct)
- 83: TypeArray 12(MyStruct) 9
- 84(Nested): TypeStruct 6(float) 83
- 85: TypePointer Function 84(Nested)
- 87: TypeArray 57(MyStruct) 9
- 88(Nested): TypeStruct 6(float) 87
- 89(UBON): TypeStruct 88(Nested)
- 90: TypePointer Uniform 89(UBON)
- 91(uBufN): 90(ptr) Variable Uniform
- 92: TypePointer Uniform 88(Nested)
- 96: TypePointer Function 6(float)
- 99: TypePointer Function 83
- 121: TypeArray 16(MyStruct) 9
- 122(Nested): TypeStruct 6(float) 121
- 123(SSBO1N): TypeStruct 122(Nested)
- 124: TypePointer Uniform 123(SSBO1N)
- 125(outBufN): 124(ptr) Variable Uniform
- 127: TypePointer Uniform 122(Nested)
- 130: TypePointer Uniform 6(float)
- 133: TypePointer Uniform 121
+ 35: 8(int) Constant 0
+ 37: TypePointer Function 11(bool)
+ 39(SSBO1): TypeStruct 16(MyStruct)
+ 40: TypePointer Uniform 39(SSBO1)
+ 41(outBuf): 40(ptr) Variable Uniform
+ 45: TypePointer Uniform 15
+ 48: TypePointer Uniform 7(fvec2)
+ 53: 8(int) Constant 1
+ 55: TypePointer Uniform 8(int)
+ 57: TypeArray 7(fvec2) 9
+ 58(MyStruct): TypeStruct 57 8(int)
+ 59(UBO): TypeStruct 58(MyStruct)
+ 60: TypePointer Uniform 59(UBO)
+ 61(uBuf): 60(ptr) Variable Uniform
+ 62: TypePointer Uniform 58(MyStruct)
+ 85: TypeArray 12(MyStruct) 9
+ 86(Nested): TypeStruct 6(float) 85
+ 87: TypePointer Function 86(Nested)
+ 89: TypeArray 58(MyStruct) 9
+ 90(Nested): TypeStruct 6(float) 89
+ 91(UBON): TypeStruct 90(Nested)
+ 92: TypePointer Uniform 91(UBON)
+ 93(uBufN): 92(ptr) Variable Uniform
+ 94: TypePointer Uniform 90(Nested)
+ 98: TypePointer Function 6(float)
+ 101: TypePointer Function 85
+ 125: TypeArray 16(MyStruct) 9
+ 126(Nested): TypeStruct 6(float) 125
+ 127(SSBO1N): TypeStruct 126(Nested)
+ 128: TypePointer Uniform 127(SSBO1N)
+ 129(outBufN): 128(ptr) Variable Uniform
+ 131: TypePointer Uniform 126(Nested)
+ 134: TypePointer Uniform 6(float)
+ 137: TypePointer Uniform 125
4(main): 2 Function None 3
5: Label
14(t): 13(ptr) Variable Function
- 86(n): 85(ptr) Variable Function
+ 88(n): 87(ptr) Variable Function
23: 22(ptr) AccessChain 19(inBuf) 21
24:16(MyStruct) Load 23
25: 15 CompositeExtract 24 0
@@ -149,116 +147,120 @@ Warning, version 450 is not yet complete; most version-specific features are pre
33: 29(ptr) AccessChain 27 32
Store 33 31
34: 8(int) CompositeExtract 24 1
- 36: 35(ptr) AccessChain 14(t) 32
- Store 36 34
- 40:12(MyStruct) Load 14(t)
- 41: 22(ptr) AccessChain 39(outBuf) 21
- 42: 10 CompositeExtract 40 0
- 44: 43(ptr) AccessChain 41 21
- 45: 7(fvec2) CompositeExtract 42 0
- 47: 46(ptr) AccessChain 44 21
- Store 47 45
- 48: 7(fvec2) CompositeExtract 42 1
- 49: 46(ptr) AccessChain 44 32
- Store 49 48
- 50: 11(bool) CompositeExtract 40 1
- 53: 8(int) Select 50 52 51
- 55: 54(ptr) AccessChain 41 32
- Store 55 53
- 62: 61(ptr) AccessChain 60(uBuf) 21
- 63:57(MyStruct) Load 62
- 64: 56 CompositeExtract 63 0
- 65: 26(ptr) AccessChain 14(t) 21
- 66: 7(fvec2) CompositeExtract 64 0
- 67: 29(ptr) AccessChain 65 21
- Store 67 66
- 68: 7(fvec2) CompositeExtract 64 1
- 69: 29(ptr) AccessChain 65 32
- Store 69 68
- 70: 8(int) CompositeExtract 63 1
- 71: 35(ptr) AccessChain 14(t) 32
- Store 71 70
- 72:12(MyStruct) Load 14(t)
- 73: 22(ptr) AccessChain 39(outBuf) 21
- 74: 10 CompositeExtract 72 0
- 75: 43(ptr) AccessChain 73 21
- 76: 7(fvec2) CompositeExtract 74 0
- 77: 46(ptr) AccessChain 75 21
- Store 77 76
- 78: 7(fvec2) CompositeExtract 74 1
- 79: 46(ptr) AccessChain 75 32
+ 36: 11(bool) INotEqual 34 35
+ 38: 37(ptr) AccessChain 14(t) 32
+ Store 38 36
+ 42:12(MyStruct) Load 14(t)
+ 43: 22(ptr) AccessChain 41(outBuf) 21
+ 44: 10 CompositeExtract 42 0
+ 46: 45(ptr) AccessChain 43 21
+ 47: 7(fvec2) CompositeExtract 44 0
+ 49: 48(ptr) AccessChain 46 21
+ Store 49 47
+ 50: 7(fvec2) CompositeExtract 44 1
+ 51: 48(ptr) AccessChain 46 32
+ Store 51 50
+ 52: 11(bool) CompositeExtract 42 1
+ 54: 8(int) Select 52 53 35
+ 56: 55(ptr) AccessChain 43 32
+ Store 56 54
+ 63: 62(ptr) AccessChain 61(uBuf) 21
+ 64:58(MyStruct) Load 63
+ 65: 57 CompositeExtract 64 0
+ 66: 26(ptr) AccessChain 14(t) 21
+ 67: 7(fvec2) CompositeExtract 65 0
+ 68: 29(ptr) AccessChain 66 21
+ Store 68 67
+ 69: 7(fvec2) CompositeExtract 65 1
+ 70: 29(ptr) AccessChain 66 32
+ Store 70 69
+ 71: 8(int) CompositeExtract 64 1
+ 72: 11(bool) INotEqual 71 35
+ 73: 37(ptr) AccessChain 14(t) 32
+ Store 73 72
+ 74:12(MyStruct) Load 14(t)
+ 75: 22(ptr) AccessChain 41(outBuf) 21
+ 76: 10 CompositeExtract 74 0
+ 77: 45(ptr) AccessChain 75 21
+ 78: 7(fvec2) CompositeExtract 76 0
+ 79: 48(ptr) AccessChain 77 21
Store 79 78
- 80: 11(bool) CompositeExtract 72 1
- 81: 8(int) Select 80 52 51
- 82: 54(ptr) AccessChain 73 32
- Store 82 81
- 93: 92(ptr) AccessChain 91(uBufN) 21
- 94: 88(Nested) Load 93
- 95: 6(float) CompositeExtract 94 0
- 97: 96(ptr) AccessChain 86(n) 21
- Store 97 95
- 98: 87 CompositeExtract 94 1
- 100: 99(ptr) AccessChain 86(n) 32
- 101:57(MyStruct) CompositeExtract 98 0
- 102: 13(ptr) AccessChain 100 21
- 103: 56 CompositeExtract 101 0
- 104: 26(ptr) AccessChain 102 21
- 105: 7(fvec2) CompositeExtract 103 0
- 106: 29(ptr) AccessChain 104 21
- Store 106 105
- 107: 7(fvec2) CompositeExtract 103 1
- 108: 29(ptr) AccessChain 104 32
+ 80: 7(fvec2) CompositeExtract 76 1
+ 81: 48(ptr) AccessChain 77 32
+ Store 81 80
+ 82: 11(bool) CompositeExtract 74 1
+ 83: 8(int) Select 82 53 35
+ 84: 55(ptr) AccessChain 75 32
+ Store 84 83
+ 95: 94(ptr) AccessChain 93(uBufN) 21
+ 96: 90(Nested) Load 95
+ 97: 6(float) CompositeExtract 96 0
+ 99: 98(ptr) AccessChain 88(n) 21
+ Store 99 97
+ 100: 89 CompositeExtract 96 1
+ 102: 101(ptr) AccessChain 88(n) 32
+ 103:58(MyStruct) CompositeExtract 100 0
+ 104: 13(ptr) AccessChain 102 21
+ 105: 57 CompositeExtract 103 0
+ 106: 26(ptr) AccessChain 104 21
+ 107: 7(fvec2) CompositeExtract 105 0
+ 108: 29(ptr) AccessChain 106 21
Store 108 107
- 109: 8(int) CompositeExtract 101 1
- 110: 35(ptr) AccessChain 102 32
+ 109: 7(fvec2) CompositeExtract 105 1
+ 110: 29(ptr) AccessChain 106 32
Store 110 109
- 111:57(MyStruct) CompositeExtract 98 1
- 112: 13(ptr) AccessChain 100 32
- 113: 56 CompositeExtract 111 0
- 114: 26(ptr) AccessChain 112 21
- 115: 7(fvec2) CompositeExtract 113 0
- 116: 29(ptr) AccessChain 114 21
- Store 116 115
- 117: 7(fvec2) CompositeExtract 113 1
- 118: 29(ptr) AccessChain 114 32
- Store 118 117
- 119: 8(int) CompositeExtract 111 1
- 120: 35(ptr) AccessChain 112 32
- Store 120 119
- 126: 84(Nested) Load 86(n)
- 128: 127(ptr) AccessChain 125(outBufN) 21
- 129: 6(float) CompositeExtract 126 0
- 131: 130(ptr) AccessChain 128 21
- Store 131 129
- 132: 83 CompositeExtract 126 1
- 134: 133(ptr) AccessChain 128 32
- 135:12(MyStruct) CompositeExtract 132 0
- 136: 22(ptr) AccessChain 134 21
- 137: 10 CompositeExtract 135 0
- 138: 43(ptr) AccessChain 136 21
- 139: 7(fvec2) CompositeExtract 137 0
- 140: 46(ptr) AccessChain 138 21
- Store 140 139
- 141: 7(fvec2) CompositeExtract 137 1
- 142: 46(ptr) AccessChain 138 32
- Store 142 141
- 143: 11(bool) CompositeExtract 135 1
- 144: 8(int) Select 143 52 51
- 145: 54(ptr) AccessChain 136 32
- Store 145 144
- 146:12(MyStruct) CompositeExtract 132 1
- 147: 22(ptr) AccessChain 134 32
- 148: 10 CompositeExtract 146 0
- 149: 43(ptr) AccessChain 147 21
- 150: 7(fvec2) CompositeExtract 148 0
- 151: 46(ptr) AccessChain 149 21
- Store 151 150
- 152: 7(fvec2) CompositeExtract 148 1
- 153: 46(ptr) AccessChain 149 32
- Store 153 152
- 154: 11(bool) CompositeExtract 146 1
- 155: 8(int) Select 154 52 51
- 156: 54(ptr) AccessChain 147 32
- Store 156 155
+ 111: 8(int) CompositeExtract 103 1
+ 112: 11(bool) INotEqual 111 35
+ 113: 37(ptr) AccessChain 104 32
+ Store 113 112
+ 114:58(MyStruct) CompositeExtract 100 1
+ 115: 13(ptr) AccessChain 102 32
+ 116: 57 CompositeExtract 114 0
+ 117: 26(ptr) AccessChain 115 21
+ 118: 7(fvec2) CompositeExtract 116 0
+ 119: 29(ptr) AccessChain 117 21
+ Store 119 118
+ 120: 7(fvec2) CompositeExtract 116 1
+ 121: 29(ptr) AccessChain 117 32
+ Store 121 120
+ 122: 8(int) CompositeExtract 114 1
+ 123: 11(bool) INotEqual 122 35
+ 124: 37(ptr) AccessChain 115 32
+ Store 124 123
+ 130: 86(Nested) Load 88(n)
+ 132: 131(ptr) AccessChain 129(outBufN) 21
+ 133: 6(float) CompositeExtract 130 0
+ 135: 134(ptr) AccessChain 132 21
+ Store 135 133
+ 136: 85 CompositeExtract 130 1
+ 138: 137(ptr) AccessChain 132 32
+ 139:12(MyStruct) CompositeExtract 136 0
+ 140: 22(ptr) AccessChain 138 21
+ 141: 10 CompositeExtract 139 0
+ 142: 45(ptr) AccessChain 140 21
+ 143: 7(fvec2) CompositeExtract 141 0
+ 144: 48(ptr) AccessChain 142 21
+ Store 144 143
+ 145: 7(fvec2) CompositeExtract 141 1
+ 146: 48(ptr) AccessChain 142 32
+ Store 146 145
+ 147: 11(bool) CompositeExtract 139 1
+ 148: 8(int) Select 147 53 35
+ 149: 55(ptr) AccessChain 140 32
+ Store 149 148
+ 150:12(MyStruct) CompositeExtract 136 1
+ 151: 22(ptr) AccessChain 138 32
+ 152: 10 CompositeExtract 150 0
+ 153: 45(ptr) AccessChain 151 21
+ 154: 7(fvec2) CompositeExtract 152 0
+ 155: 48(ptr) AccessChain 153 21
+ Store 155 154
+ 156: 7(fvec2) CompositeExtract 152 1
+ 157: 48(ptr) AccessChain 153 32
+ Store 157 156
+ 158: 11(bool) CompositeExtract 150 1
+ 159: 8(int) Select 158 53 35
+ 160: 55(ptr) AccessChain 151 32
+ Store 160 159
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out
index b9b0cb2cb66..195f20f764c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out
@@ -1,8 +1,6 @@
spv.multiStructFuncall.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 63
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiView.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiView.frag.out
index de2a5496042..0633a121975 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiView.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiView.frag.out
@@ -1,8 +1,6 @@
spv.multiView.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 17
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index f93aa0172a3..b3ed72c3947 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
@@ -1,8 +1,6 @@
spv.multiviewPerViewAttributes.tesc
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 37
Capability Tessellation
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
index 350944a85b2..f4a589e8183 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
@@ -1,8 +1,6 @@
spv.multiviewPerViewAttributes.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 29
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out
index ea694eeafb2..4d3f4c7b821 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out
@@ -1,8 +1,6 @@
spv.newTexture.frag
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 284
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noBuiltInLoc.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noBuiltInLoc.vert.out
new file mode 100644
index 00000000000..6cdc321f58c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noBuiltInLoc.vert.out
@@ -0,0 +1,74 @@
+spv.noBuiltInLoc.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 33
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 9 11 18 31 32
+ Source GLSL 450
+ Name 4 "main"
+ Name 9 "bar"
+ Name 11 "foo"
+ Name 16 "gl_PerVertex"
+ MemberName 16(gl_PerVertex) 0 "gl_Position"
+ MemberName 16(gl_PerVertex) 1 "gl_PointSize"
+ MemberName 16(gl_PerVertex) 2 "gl_ClipDistance"
+ MemberName 16(gl_PerVertex) 3 "gl_CullDistance"
+ Name 18 ""
+ Name 24 "uv1"
+ Name 26 "uv2"
+ Name 29 "uv3"
+ Name 31 "gl_VertexID"
+ Name 32 "gl_InstanceID"
+ Decorate 9(bar) Location 0
+ Decorate 11(foo) Location 0
+ MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position
+ MemberDecorate 16(gl_PerVertex) 1 BuiltIn PointSize
+ MemberDecorate 16(gl_PerVertex) 2 BuiltIn ClipDistance
+ MemberDecorate 16(gl_PerVertex) 3 BuiltIn CullDistance
+ Decorate 16(gl_PerVertex) Block
+ Decorate 24(uv1) Location 0
+ Decorate 24(uv1) DescriptorSet 0
+ Decorate 26(uv2) Location 1
+ Decorate 26(uv2) DescriptorSet 0
+ Decorate 29(uv3) Location 2
+ Decorate 29(uv3) DescriptorSet 0
+ Decorate 31(gl_VertexID) BuiltIn VertexId
+ Decorate 32(gl_InstanceID) BuiltIn InstanceId
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Output 7(fvec4)
+ 9(bar): 8(ptr) Variable Output
+ 10: TypePointer Input 7(fvec4)
+ 11(foo): 10(ptr) Variable Input
+ 13: TypeInt 32 0
+ 14: 13(int) Constant 1
+ 15: TypeArray 6(float) 14
+16(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 15 15
+ 17: TypePointer Output 16(gl_PerVertex)
+ 18: 17(ptr) Variable Output
+ 19: TypeInt 32 1
+ 20: 19(int) Constant 0
+ 23: TypePointer UniformConstant 7(fvec4)
+ 24(uv1): 23(ptr) Variable UniformConstant
+ 25: TypePointer UniformConstant 6(float)
+ 26(uv2): 25(ptr) Variable UniformConstant
+ 27: TypeVector 6(float) 3
+ 28: TypePointer UniformConstant 27(fvec3)
+ 29(uv3): 28(ptr) Variable UniformConstant
+ 30: TypePointer Input 19(int)
+ 31(gl_VertexID): 30(ptr) Variable Input
+32(gl_InstanceID): 30(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 12: 7(fvec4) Load 11(foo)
+ Store 9(bar) 12
+ 21: 7(fvec4) Load 11(foo)
+ 22: 8(ptr) AccessChain 18 20
+ Store 22 21
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noDeadDecorations.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noDeadDecorations.vert.out
index 41d2a43147a..cba32b5f422 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noDeadDecorations.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noDeadDecorations.vert.out
@@ -1,8 +1,6 @@
spv.noDeadDecorations.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 32
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noLocation.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noLocation.vert.out
new file mode 100644
index 00000000000..7a664745f71
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noLocation.vert.out
@@ -0,0 +1,10 @@
+spv.noLocation.vert
+ERROR: spv.noLocation.vert:4: 'location' : SPIR-V requires location for user input/output
+ERROR: spv.noLocation.vert:8: 'location' : SPIR-V requires location for user input/output
+ERROR: spv.noLocation.vert:19: 'location' : SPIR-V requires location for user input/output
+ERROR: spv.noLocation.vert:25: 'location' : SPIR-V requires location for user input/output
+ERROR: spv.noLocation.vert:29: 'location' : SPIR-V requires location for user input/output
+ERROR: 5 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noWorkgroup.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noWorkgroup.comp.out
index 0f88436c5a9..97e7119705a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noWorkgroup.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.noWorkgroup.comp.out
@@ -1,8 +1,6 @@
spv.noWorkgroup.comp
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 12
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonSquare.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonSquare.vert.out
index 684d4f16b31..ca472521091 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonSquare.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonSquare.vert.out
@@ -1,6 +1,6 @@
spv.nonSquare.vert
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 90
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.offsets.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.offsets.frag.out
index ea4be8f4c66..f9b01441719 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.offsets.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.offsets.frag.out
@@ -1,8 +1,6 @@
spv.offsets.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 15
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.paramMemory.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.paramMemory.frag.out
new file mode 100644
index 00000000000..28d96bb73a7
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.paramMemory.frag.out
@@ -0,0 +1,137 @@
+spv.paramMemory.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 69
+
+ Capability Shader
+ Capability StorageImageReadWithoutFormat
+ Capability StorageImageWriteWithoutFormat
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 27 66
+ ExecutionMode 4 OriginUpperLeft
+ Source ESSL 310
+ Name 4 "main"
+ Name 16 "image_load(I21;vi2;"
+ Name 14 "image"
+ Name 15 "coords"
+ Name 23 "image_store(I21;vi2;vf4;"
+ Name 20 "image"
+ Name 21 "coords"
+ Name 22 "data"
+ Name 27 "in_coords"
+ Name 35 "read1"
+ Name 38 "image1"
+ Name 39 "param"
+ Name 42 "read2"
+ Name 45 "image2"
+ Name 46 "param"
+ Name 49 "image3"
+ Name 53 "param"
+ Name 55 "param"
+ Name 57 "image4"
+ Name 61 "param"
+ Name 63 "param"
+ Name 66 "out_color"
+ Decorate 14(image) Coherent
+ Decorate 14(image) NonWritable
+ Decorate 20(image) Coherent
+ Decorate 20(image) NonReadable
+ Decorate 27(in_coords) Flat
+ Decorate 27(in_coords) Location 0
+ Decorate 38(image1) DescriptorSet 0
+ Decorate 38(image1) Binding 0
+ Decorate 38(image1) Coherent
+ Decorate 38(image1) NonWritable
+ Decorate 45(image2) DescriptorSet 0
+ Decorate 45(image2) Binding 2
+ Decorate 45(image2) NonWritable
+ Decorate 49(image3) DescriptorSet 0
+ Decorate 49(image3) Binding 1
+ Decorate 49(image3) Coherent
+ Decorate 49(image3) NonReadable
+ Decorate 57(image4) DescriptorSet 0
+ Decorate 57(image4) Binding 3
+ Decorate 57(image4) NonReadable
+ Decorate 66(out_color) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeImage 6(float) 2D nonsampled format:Unknown
+ 8: TypePointer UniformConstant 7
+ 9: TypeInt 32 1
+ 10: TypeVector 9(int) 2
+ 11: TypePointer Function 10(ivec2)
+ 12: TypeVector 6(float) 4
+ 13: TypeFunction 12(fvec4) 8(ptr) 11(ptr)
+ 18: TypePointer Function 12(fvec4)
+ 19: TypeFunction 2 8(ptr) 11(ptr) 18(ptr)
+ 26: TypePointer Input 10(ivec2)
+ 27(in_coords): 26(ptr) Variable Input
+ 36: TypeImage 6(float) 2D nonsampled format:Rgba32f
+ 37: TypePointer UniformConstant 36
+ 38(image1): 37(ptr) Variable UniformConstant
+ 43: TypeImage 6(float) 2D nonsampled format:Rgba16f
+ 44: TypePointer UniformConstant 43
+ 45(image2): 44(ptr) Variable UniformConstant
+ 49(image3): 37(ptr) Variable UniformConstant
+ 51: 6(float) Constant 1056964608
+ 57(image4): 44(ptr) Variable UniformConstant
+ 59: 6(float) Constant 1073741824
+ 65: TypePointer Output 12(fvec4)
+ 66(out_color): 65(ptr) Variable Output
+ 67: 6(float) Constant 0
+ 68: 12(fvec4) ConstantComposite 67 67 67 67
+ 4(main): 2 Function None 3
+ 5: Label
+ 35(read1): 18(ptr) Variable Function
+ 39(param): 11(ptr) Variable Function
+ 42(read2): 18(ptr) Variable Function
+ 46(param): 11(ptr) Variable Function
+ 53(param): 11(ptr) Variable Function
+ 55(param): 18(ptr) Variable Function
+ 61(param): 11(ptr) Variable Function
+ 63(param): 18(ptr) Variable Function
+ 40: 10(ivec2) Load 27(in_coords)
+ Store 39(param) 40
+ 41: 12(fvec4) FunctionCall 16(image_load(I21;vi2;) 38(image1) 39(param)
+ Store 35(read1) 41
+ 47: 10(ivec2) Load 27(in_coords)
+ Store 46(param) 47
+ 48: 12(fvec4) FunctionCall 16(image_load(I21;vi2;) 45(image2) 46(param)
+ Store 42(read2) 48
+ 50: 12(fvec4) Load 35(read1)
+ 52: 12(fvec4) VectorTimesScalar 50 51
+ 54: 10(ivec2) Load 27(in_coords)
+ Store 53(param) 54
+ Store 55(param) 52
+ 56: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 49(image3) 53(param) 55(param)
+ 58: 12(fvec4) Load 42(read2)
+ 60: 12(fvec4) VectorTimesScalar 58 59
+ 62: 10(ivec2) Load 27(in_coords)
+ Store 61(param) 62
+ Store 63(param) 60
+ 64: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 57(image4) 61(param) 63(param)
+ Store 66(out_color) 68
+ Return
+ FunctionEnd
+16(image_load(I21;vi2;): 12(fvec4) Function None 13
+ 14(image): 8(ptr) FunctionParameter
+ 15(coords): 11(ptr) FunctionParameter
+ 17: Label
+ 25: 7 Load 14(image)
+ 28: 10(ivec2) Load 27(in_coords)
+ 29: 12(fvec4) ImageRead 25 28
+ ReturnValue 29
+ FunctionEnd
+23(image_store(I21;vi2;vf4;): 2 Function None 19
+ 20(image): 8(ptr) FunctionParameter
+ 21(coords): 11(ptr) FunctionParameter
+ 22(data): 18(ptr) FunctionParameter
+ 24: Label
+ 32: 7 Load 20(image)
+ 33: 10(ivec2) Load 27(in_coords)
+ 34: 12(fvec4) Load 22(data)
+ ImageWrite 32 33 34
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tesc.out
index 4bae395a8aa..91c2f35dfb7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tesc.out
@@ -1,8 +1,6 @@
spv.precise.tesc
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 72
Capability Tessellation
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tese.out
index 4f1839c7752..c05ced41551 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tese.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precise.tese.out
@@ -1,8 +1,6 @@
spv.precise.tese
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 119
Capability Tessellation
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precision.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precision.frag.out
index f49b3566381..2284108f23e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precision.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precision.frag.out
@@ -1,8 +1,6 @@
spv.precision.frag
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 127
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precisionNonESSamp.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precisionNonESSamp.frag.out
new file mode 100644
index 00000000000..5bb1dee985e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precisionNonESSamp.frag.out
@@ -0,0 +1,98 @@
+spv.precisionNonESSamp.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 47
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 9 17 27 39
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 9 "color"
+ Name 13 "s"
+ Name 17 "v2"
+ Name 23 "t"
+ Name 27 "v3"
+ Name 31 "vi1"
+ Name 34 "i1"
+ Name 39 "iv2"
+ Name 42 "vi2"
+ Name 43 "i2"
+ Decorate 9(color) RelaxedPrecision
+ Decorate 9(color) Location 0
+ Decorate 13(s) RelaxedPrecision
+ Decorate 13(s) DescriptorSet 0
+ Decorate 14 RelaxedPrecision
+ Decorate 17(v2) RelaxedPrecision
+ Decorate 17(v2) Location 0
+ Decorate 18 RelaxedPrecision
+ Decorate 19 RelaxedPrecision
+ Decorate 23(t) DescriptorSet 0
+ Decorate 27(v3) RelaxedPrecision
+ Decorate 27(v3) Location 1
+ Decorate 28 RelaxedPrecision
+ Decorate 31(vi1) RelaxedPrecision
+ Decorate 34(i1) RelaxedPrecision
+ Decorate 34(i1) DescriptorSet 0
+ Decorate 35 RelaxedPrecision
+ Decorate 39(iv2) RelaxedPrecision
+ Decorate 39(iv2) Flat
+ Decorate 39(iv2) Location 3
+ Decorate 40 RelaxedPrecision
+ Decorate 41 RelaxedPrecision
+ Decorate 42(vi2) RelaxedPrecision
+ Decorate 43(i2) DescriptorSet 0
+ Decorate 45 RelaxedPrecision
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Output 7(fvec4)
+ 9(color): 8(ptr) Variable Output
+ 10: TypeImage 6(float) 2D sampled format:Unknown
+ 11: TypeSampledImage 10
+ 12: TypePointer UniformConstant 11
+ 13(s): 12(ptr) Variable UniformConstant
+ 15: TypeVector 6(float) 2
+ 16: TypePointer Input 15(fvec2)
+ 17(v2): 16(ptr) Variable Input
+ 20: TypeImage 6(float) 3D sampled format:Unknown
+ 21: TypeSampledImage 20
+ 22: TypePointer UniformConstant 21
+ 23(t): 22(ptr) Variable UniformConstant
+ 25: TypeVector 6(float) 3
+ 26: TypePointer Input 25(fvec3)
+ 27(v3): 26(ptr) Variable Input
+ 30: TypePointer Function 7(fvec4)
+ 32: TypeImage 6(float) 2D nonsampled format:Rgba32f
+ 33: TypePointer UniformConstant 32
+ 34(i1): 33(ptr) Variable UniformConstant
+ 36: TypeInt 32 1
+ 37: TypeVector 36(int) 2
+ 38: TypePointer Input 37(ivec2)
+ 39(iv2): 38(ptr) Variable Input
+ 43(i2): 33(ptr) Variable UniformConstant
+ 4(main): 2 Function None 3
+ 5: Label
+ 31(vi1): 30(ptr) Variable Function
+ 42(vi2): 30(ptr) Variable Function
+ 14: 11 Load 13(s)
+ 18: 15(fvec2) Load 17(v2)
+ 19: 7(fvec4) ImageSampleImplicitLod 14 18
+ Store 9(color) 19
+ 24: 21 Load 23(t)
+ 28: 25(fvec3) Load 27(v3)
+ 29: 7(fvec4) ImageSampleImplicitLod 24 28
+ Store 9(color) 29
+ 35: 32 Load 34(i1)
+ 40: 37(ivec2) Load 39(iv2)
+ 41: 7(fvec4) ImageRead 35 40
+ Store 31(vi1) 41
+ 44: 32 Load 43(i2)
+ 45: 37(ivec2) Load 39(iv2)
+ 46: 7(fvec4) ImageRead 44 45
+ Store 42(vi2) 46
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.prepost.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.prepost.frag.out
index 410286cad0f..68a6909b3ea 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.prepost.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.prepost.frag.out
@@ -1,6 +1,6 @@
spv.prepost.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 94
Capability Shader
@@ -20,6 +20,7 @@ spv.prepost.frag
Name 66 "z"
Name 73 "v"
Name 90 "gl_FragColor"
+ Decorate 90(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstant.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstant.vert.out
index bdefd63de6d..e86320fa099 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstant.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstant.vert.out
@@ -1,8 +1,6 @@
spv.pushConstant.vert
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 35
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstantAnon.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstantAnon.vert.out
index 9559815b5b3..37e61ae9106 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstantAnon.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pushConstantAnon.vert.out
@@ -1,8 +1,6 @@
spv.pushConstantAnon.vert
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 38
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.qualifiers.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.qualifiers.vert.out
index 37f474cca54..fa51edc175a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.qualifiers.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.qualifiers.vert.out
@@ -1,8 +1,6 @@
spv.qualifiers.vert
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 21
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out
index fbdcbc8130f..419d213ce15 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out
@@ -1,8 +1,6 @@
spv.queryL.frag
-Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 224
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign-2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign-2.frag.out
index c8273dd14fd..14040df4b4b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign-2.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign-2.frag.out
@@ -1,6 +1,6 @@
spv.register.autoassign-2.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 47
Capability Shader
@@ -8,6 +8,7 @@ spv.register.autoassign-2.frag
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 44
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -18,14 +19,14 @@ spv.register.autoassign-2.frag
Name 31 "g_tScene[1]"
Name 39 "psout"
Name 40 "param"
- Name 44 "Color"
+ Name 44 "psout.Color"
Decorate 18(g_tScene[0]) DescriptorSet 0
Decorate 18(g_tScene[0]) Binding 10
Decorate 22(g_tSamp) DescriptorSet 0
Decorate 22(g_tSamp) Binding 5
Decorate 31(g_tScene[1]) DescriptorSet 0
Decorate 31(g_tScene[1]) Binding 11
- Decorate 44(Color) Location 0
+ Decorate 44(psout.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -49,7 +50,7 @@ spv.register.autoassign-2.frag
31(g_tScene[1]): 17(ptr) Variable UniformConstant
37: TypePointer Function 7(fvec4)
43: TypePointer Output 7(fvec4)
- 44(Color): 43(ptr) Variable Output
+ 44(psout.Color): 43(ptr) Variable Output
4(main): 2 Function None 3
5: Label
39(psout): 9(ptr) Variable Function
@@ -59,7 +60,7 @@ spv.register.autoassign-2.frag
Store 39(psout) 42
45: 37(ptr) AccessChain 39(psout) 15
46: 7(fvec4) Load 45
- Store 44(Color) 46
+ Store 44(psout.Color) 46
Return
FunctionEnd
12(@main(struct-PS_OUTPUT-vf41;): 2 Function None 10
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out
index ae048ce9878..854025322a8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out
@@ -1,6 +1,6 @@
spv.register.autoassign.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 155
Capability Shader
@@ -9,6 +9,7 @@ spv.register.autoassign.frag
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main_ep" 151
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main_ep"
Name 9 "Func1("
Name 11 "Func2("
@@ -41,7 +42,7 @@ spv.register.autoassign.frag
Name 130 "g_tTex_unused2"
Name 132 "g_sSamp_unused2"
Name 141 "psout"
- Name 151 "Color"
+ Name 151 "@entryPointOutput.Color"
Name 154 "g_tTex_unused3"
Decorate 21(g_tTex1) DescriptorSet 0
Decorate 21(g_tTex1) Binding 11
@@ -79,7 +80,7 @@ spv.register.autoassign.frag
Decorate 130(g_tTex_unused2) DescriptorSet 0
Decorate 130(g_tTex_unused2) Binding 12
Decorate 132(g_sSamp_unused2) DescriptorSet 0
- Decorate 151(Color) Location 0
+ Decorate 151(@entryPointOutput.Color) Location 0
Decorate 154(g_tTex_unused3) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
@@ -140,13 +141,13 @@ spv.register.autoassign.frag
140: TypePointer Function 15(PS_OUTPUT)
145: TypePointer Function 7(fvec4)
150: TypePointer Output 7(fvec4)
- 151(Color): 150(ptr) Variable Output
+151(@entryPointOutput.Color): 150(ptr) Variable Output
154(g_tTex_unused3): 20(ptr) Variable UniformConstant
4(main_ep): 2 Function None 3
5: Label
152:15(PS_OUTPUT) FunctionCall 17(@main_ep()
153: 7(fvec4) CompositeExtract 152 0
- Store 151(Color) 153
+ Store 151(@entryPointOutput.Color) 153
Return
FunctionEnd
9(Func1(): 7(fvec4) Function None 8
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out
index afadc48f907..a6339935138 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out
@@ -1,6 +1,6 @@
spv.register.noautoassign.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 155
Capability Shader
@@ -9,6 +9,7 @@ spv.register.noautoassign.frag
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main_ep" 151
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main_ep"
Name 9 "Func1("
Name 11 "Func2("
@@ -41,7 +42,7 @@ spv.register.noautoassign.frag
Name 130 "g_tTex_unused2"
Name 132 "g_sSamp_unused2"
Name 141 "psout"
- Name 151 "Color"
+ Name 151 "@entryPointOutput.Color"
Name 154 "g_tTex_unused3"
Decorate 21(g_tTex1) DescriptorSet 0
Decorate 21(g_tTex1) Binding 11
@@ -72,7 +73,7 @@ spv.register.noautoassign.frag
Decorate 130(g_tTex_unused2) DescriptorSet 0
Decorate 130(g_tTex_unused2) Binding 12
Decorate 132(g_sSamp_unused2) DescriptorSet 0
- Decorate 151(Color) Location 0
+ Decorate 151(@entryPointOutput.Color) Location 0
Decorate 154(g_tTex_unused3) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
@@ -133,13 +134,13 @@ spv.register.noautoassign.frag
140: TypePointer Function 15(PS_OUTPUT)
145: TypePointer Function 7(fvec4)
150: TypePointer Output 7(fvec4)
- 151(Color): 150(ptr) Variable Output
+151(@entryPointOutput.Color): 150(ptr) Variable Output
154(g_tTex_unused3): 20(ptr) Variable UniformConstant
4(main_ep): 2 Function None 3
5: Label
152:15(PS_OUTPUT) FunctionCall 17(@main_ep()
153: 7(fvec4) CompositeExtract 152 0
- Store 151(Color) 153
+ Store 151(@entryPointOutput.Color) 153
Return
FunctionEnd
9(Func1(): 7(fvec4) Function None 8
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.subpass.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.subpass.frag.out
new file mode 100644
index 00000000000..2a2232648a5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.subpass.frag.out
@@ -0,0 +1,75 @@
+spv.register.subpass.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 40
+
+ Capability Shader
+ Capability InputAttachment
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 38
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 12 "result00"
+ Name 15 "subpass_f4"
+ Name 22 "result10"
+ Name 25 "subpass_ms_f4"
+ Name 29 "result73"
+ Name 30 "subpass_2"
+ Name 38 "@entryPointOutput"
+ Decorate 15(subpass_f4) DescriptorSet 0
+ Decorate 15(subpass_f4) Binding 21
+ Decorate 15(subpass_f4) InputAttachmentIndex 1
+ Decorate 25(subpass_ms_f4) DescriptorSet 0
+ Decorate 25(subpass_ms_f4) Binding 20
+ Decorate 25(subpass_ms_f4) InputAttachmentIndex 4
+ Decorate 30(subpass_2) DescriptorSet 0
+ Decorate 30(subpass_2) Binding 22
+ Decorate 30(subpass_2) InputAttachmentIndex 7
+ Decorate 38(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypePointer Function 7(fvec4)
+ 13: TypeImage 6(float) SubpassData nonsampled format:Unknown
+ 14: TypePointer UniformConstant 13
+ 15(subpass_f4): 14(ptr) Variable UniformConstant
+ 17: TypeInt 32 1
+ 18: 17(int) Constant 0
+ 19: TypeVector 17(int) 2
+ 20: 19(ivec2) ConstantComposite 18 18
+ 23: TypeImage 6(float) SubpassData multi-sampled nonsampled format:Unknown
+ 24: TypePointer UniformConstant 23
+25(subpass_ms_f4): 24(ptr) Variable UniformConstant
+ 27: 17(int) Constant 3
+ 30(subpass_2): 14(ptr) Variable UniformConstant
+ 33: 6(float) Constant 0
+ 34: 7(fvec4) ConstantComposite 33 33 33 33
+ 37: TypePointer Output 7(fvec4)
+38(@entryPointOutput): 37(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 39: 7(fvec4) FunctionCall 9(@main()
+ Store 38(@entryPointOutput) 39
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 12(result00): 11(ptr) Variable Function
+ 22(result10): 11(ptr) Variable Function
+ 29(result73): 11(ptr) Variable Function
+ 16: 13 Load 15(subpass_f4)
+ 21: 7(fvec4) ImageRead 16 20
+ Store 12(result00) 21
+ 26: 23 Load 25(subpass_ms_f4)
+ 28: 7(fvec4) ImageRead 26 20 Sample 27
+ Store 22(result10) 28
+ 31: 13 Load 30(subpass_2)
+ 32: 7(fvec4) ImageRead 31 20
+ Store 29(result73) 32
+ ReturnValue 34
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.rw.autoassign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.rw.autoassign.frag.out
index e2b544abebb..ecca7617842 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.rw.autoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.rw.autoassign.frag.out
@@ -1,15 +1,16 @@
spv.rw.autoassign.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 42
Capability Shader
- Capability Sampled1D
- Capability SampledBuffer
+ Capability Image1D
+ Capability ImageBuffer
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 39
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
@@ -19,12 +20,12 @@ spv.rw.autoassign.frag
Name 23 "r01"
Name 26 "g_tBuf1du1"
Name 30 "psout"
- Name 39 "Color"
+ Name 39 "@entryPointOutput.Color"
Decorate 16(g_tTex1df1) DescriptorSet 0
Decorate 16(g_tTex1df1) Binding 20
Decorate 26(g_tBuf1du1) DescriptorSet 0
Decorate 26(g_tBuf1du1) Binding 21
- Decorate 39(Color) Location 0
+ Decorate 39(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -47,12 +48,12 @@ spv.rw.autoassign.frag
32: 7(fvec4) ConstantComposite 31 31 31 31
33: TypePointer Function 7(fvec4)
38: TypePointer Output 7(fvec4)
- 39(Color): 38(ptr) Variable Output
+39(@entryPointOutput.Color): 38(ptr) Variable Output
4(main): 2 Function None 3
5: Label
40:8(PS_OUTPUT) FunctionCall 10(@main()
41: 7(fvec4) CompositeExtract 40 0
- Store 39(Color) 41
+ Store 39(@entryPointOutput.Color) 41
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sample.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sample.frag.out
new file mode 100644
index 00000000000..166ce943dcf
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sample.frag.out
@@ -0,0 +1,32 @@
+spv.sample.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 13
+
+ Capability Shader
+ Capability SampleRateShading
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 9 11
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 9 "color"
+ Name 11 "samp"
+ Decorate 9(color) Location 0
+ Decorate 11(samp) Sample
+ Decorate 11(samp) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Output 7(fvec4)
+ 9(color): 8(ptr) Variable Output
+ 10: TypePointer Input 7(fvec4)
+ 11(samp): 10(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 12: 7(fvec4) Load 11(samp)
+ Store 9(color) 12
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleId.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleId.frag.out
new file mode 100644
index 00000000000..11ade877954
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleId.frag.out
@@ -0,0 +1,52 @@
+spv.sampleId.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 26
+
+ Capability Shader
+ Capability SampleRateShading
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 8 18 20
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 8 "gl_SampleID"
+ Name 18 "color"
+ Name 20 "samp"
+ Decorate 8(gl_SampleID) Flat
+ Decorate 8(gl_SampleID) BuiltIn SampleId
+ Decorate 18(color) Location 0
+ Decorate 20(samp) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypePointer Input 6(int)
+ 8(gl_SampleID): 7(ptr) Variable Input
+ 10: 6(int) Constant 3
+ 11: TypeBool
+ 15: TypeFloat 32
+ 16: TypeVector 15(float) 4
+ 17: TypePointer Output 16(fvec4)
+ 18(color): 17(ptr) Variable Output
+ 19: TypePointer Input 16(fvec4)
+ 20(samp): 19(ptr) Variable Input
+ 23: 15(float) Constant 1073741824
+ 4(main): 2 Function None 3
+ 5: Label
+ 9: 6(int) Load 8(gl_SampleID)
+ 12: 11(bool) SLessThan 9 10
+ SelectionMerge 14 None
+ BranchConditional 12 13 22
+ 13: Label
+ 21: 16(fvec4) Load 20(samp)
+ Store 18(color) 21
+ Branch 14
+ 22: Label
+ 24: 16(fvec4) Load 20(samp)
+ 25: 16(fvec4) VectorTimesScalar 24 23
+ Store 18(color) 25
+ Branch 14
+ 14: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
index 6bae6bd0c3f..848b4a048dc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
@@ -1,12 +1,9 @@
spv.sampleMaskOverrideCoverage.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 20
Capability Shader
- Capability SampleRateShading
Extension "SPV_NV_sample_mask_override_coverage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.samplePosition.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.samplePosition.frag.out
new file mode 100644
index 00000000000..5f4a0b93e0c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.samplePosition.frag.out
@@ -0,0 +1,55 @@
+spv.samplePosition.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 30
+
+ Capability Shader
+ Capability SampleRateShading
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 9 22 24
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 9 "gl_SamplePosition"
+ Name 22 "color"
+ Name 24 "samp"
+ Decorate 9(gl_SamplePosition) BuiltIn SamplePosition
+ Decorate 22(color) Location 0
+ Decorate 24(samp) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 2
+ 8: TypePointer Input 7(fvec2)
+9(gl_SamplePosition): 8(ptr) Variable Input
+ 10: TypeInt 32 0
+ 11: 10(int) Constant 1
+ 12: TypePointer Input 6(float)
+ 15: 6(float) Constant 1056964608
+ 16: TypeBool
+ 20: TypeVector 6(float) 4
+ 21: TypePointer Output 20(fvec4)
+ 22(color): 21(ptr) Variable Output
+ 23: TypePointer Input 20(fvec4)
+ 24(samp): 23(ptr) Variable Input
+ 27: 6(float) Constant 1073741824
+ 4(main): 2 Function None 3
+ 5: Label
+ 13: 12(ptr) AccessChain 9(gl_SamplePosition) 11
+ 14: 6(float) Load 13
+ 17: 16(bool) FOrdLessThan 14 15
+ SelectionMerge 19 None
+ BranchConditional 17 18 26
+ 18: Label
+ 25: 20(fvec4) Load 24(samp)
+ Store 22(color) 25
+ Branch 19
+ 26: Label
+ 28: 20(fvec4) Load 24(samp)
+ 29: 20(fvec4) VectorTimesScalar 28 27
+ Store 22(color) 29
+ Branch 19
+ 19: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out
index c654117f7f4..0e6243be919 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out
@@ -1,8 +1,6 @@
spv.separate.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 319
Capability Shader
@@ -10,7 +8,6 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Capability Sampled1D
Capability SampledCubeArray
Capability SampledBuffer
- Capability ImageMSArray
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 11 34
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.set.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.set.vert.out
index 38cb669c6ae..530b5546b66 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.set.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.set.vert.out
@@ -1,8 +1,6 @@
spv.set.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 22
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out
index b8d5e3a0193..8be7a06f273 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out
@@ -1,8 +1,6 @@
spv.shaderBallot.comp
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 298
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out
index bb7f8c1627f..51a52f3005f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out
@@ -1,8 +1,6 @@
spv.shaderBallotAMD.comp
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 1048
Capability Shader
@@ -10,8 +8,11 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Capability Float64
Capability Int64
Capability Groups
+ Capability StorageUniformBufferBlock16
+ Capability StorageUniform16
Extension "SPV_AMD_gpu_shader_half_float"
Extension "SPV_AMD_shader_ballot"
+ Extension "SPV_KHR_16bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderDrawParams.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderDrawParams.vert.out
index 41ad78d480c..36c5ca5916c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderDrawParams.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderDrawParams.vert.out
@@ -1,8 +1,6 @@
spv.shaderDrawParams.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 53
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderFragMaskAMD.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderFragMaskAMD.frag.out
new file mode 100644
index 00000000000..56081b12928
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderFragMaskAMD.frag.out
@@ -0,0 +1,122 @@
+spv.shaderFragMaskAMD.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 80
+
+ Capability Shader
+ Capability InputAttachment
+ Capability FragmentMaskAMD
+ Extension "SPV_AMD_shader_fragment_mask"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 78
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_AMD_shader_fragment_mask"
+ Name 4 "main"
+ Name 9 "f4"
+ Name 14 "fragMask"
+ Name 18 "s2DMS"
+ Name 27 "fragIndex"
+ Name 42 "is2DMSArray"
+ Name 62 "usubpassMS"
+ Name 78 "fragColor"
+ Decorate 18(s2DMS) DescriptorSet 0
+ Decorate 18(s2DMS) Binding 0
+ Decorate 42(is2DMSArray) DescriptorSet 0
+ Decorate 42(is2DMSArray) Binding 1
+ Decorate 62(usubpassMS) DescriptorSet 0
+ Decorate 62(usubpassMS) Binding 2
+ Decorate 62(usubpassMS) InputAttachmentIndex 0
+ Decorate 78(fragColor) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 10: 6(float) Constant 0
+ 11: 7(fvec4) ConstantComposite 10 10 10 10
+ 12: TypeInt 32 0
+ 13: TypePointer Function 12(int)
+ 15: TypeImage 6(float) 2D multi-sampled sampled format:Unknown
+ 16: TypeSampledImage 15
+ 17: TypePointer UniformConstant 16
+ 18(s2DMS): 17(ptr) Variable UniformConstant
+ 20: TypeInt 32 1
+ 21: TypeVector 20(int) 2
+ 22: 20(int) Constant 2
+ 23: 20(int) Constant 3
+ 24: 21(ivec2) ConstantComposite 22 23
+ 29: 12(int) Constant 240
+ 31: 20(int) Constant 4
+ 34: 12(int) Constant 1
+ 39: TypeImage 20(int) 2D array multi-sampled sampled format:Unknown
+ 40: TypeSampledImage 39
+ 41: TypePointer UniformConstant 40
+ 42(is2DMSArray): 41(ptr) Variable UniformConstant
+ 44: TypeVector 20(int) 3
+ 45: 20(int) Constant 1
+ 46: 44(ivec3) ConstantComposite 22 23 45
+ 55: TypeVector 20(int) 4
+ 60: TypeImage 12(int) SubpassData multi-sampled nonsampled format:Unknown
+ 61: TypePointer UniformConstant 60
+ 62(usubpassMS): 61(ptr) Variable UniformConstant
+ 64: 20(int) Constant 0
+ 65: 21(ivec2) ConstantComposite 64 64
+ 72: TypeVector 12(int) 4
+ 77: TypePointer Output 7(fvec4)
+ 78(fragColor): 77(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(f4): 8(ptr) Variable Function
+ 14(fragMask): 13(ptr) Variable Function
+ 27(fragIndex): 13(ptr) Variable Function
+ Store 9(f4) 11
+ 19: 16 Load 18(s2DMS)
+ 25: 15 Image 19
+ 26: 12(int) FragmentMaskFetchAMD 25 24
+ Store 14(fragMask) 26
+ 28: 12(int) Load 14(fragMask)
+ 30: 12(int) BitwiseAnd 28 29
+ 32: 12(int) ShiftRightLogical 30 31
+ Store 27(fragIndex) 32
+ 33: 16 Load 18(s2DMS)
+ 35: 15 Image 33
+ 36: 7(fvec4) FragmentFetchAMD 35 24 34
+ 37: 7(fvec4) Load 9(f4)
+ 38: 7(fvec4) FAdd 37 36
+ Store 9(f4) 38
+ 43: 40 Load 42(is2DMSArray)
+ 47: 39 Image 43
+ 48: 12(int) FragmentMaskFetchAMD 47 46
+ Store 14(fragMask) 48
+ 49: 12(int) Load 14(fragMask)
+ 50: 12(int) BitwiseAnd 49 29
+ 51: 12(int) ShiftRightLogical 50 31
+ Store 27(fragIndex) 51
+ 52: 40 Load 42(is2DMSArray)
+ 53: 12(int) Load 27(fragIndex)
+ 54: 39 Image 52
+ 56: 55(ivec4) FragmentFetchAMD 54 46 53
+ 57: 7(fvec4) ConvertSToF 56
+ 58: 7(fvec4) Load 9(f4)
+ 59: 7(fvec4) FAdd 58 57
+ Store 9(f4) 59
+ 63: 60 Load 62(usubpassMS)
+ 66: 12(int) FragmentMaskFetchAMD 63 65
+ Store 14(fragMask) 66
+ 67: 12(int) Load 14(fragMask)
+ 68: 12(int) BitwiseAnd 67 29
+ 69: 12(int) ShiftRightLogical 68 31
+ Store 27(fragIndex) 69
+ 70: 60 Load 62(usubpassMS)
+ 71: 12(int) Load 27(fragIndex)
+ 73: 72(ivec4) FragmentFetchAMD 70 65 71
+ 74: 7(fvec4) ConvertUToF 73
+ 75: 7(fvec4) Load 9(f4)
+ 76: 7(fvec4) FAdd 75 74
+ Store 9(f4) 76
+ 79: 7(fvec4) Load 9(f4)
+ Store 78(fragColor) 79
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out
index 027714941d1..abd180468ce 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderGroupVote.comp.out
@@ -1,8 +1,6 @@
spv.shaderGroupVote.comp
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 33
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderStencilExport.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderStencilExport.frag.out
new file mode 100644
index 00000000000..a126e96ebe9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderStencilExport.frag.out
@@ -0,0 +1,28 @@
+spv.shaderStencilExport.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 10
+
+ Capability Shader
+ Capability StencilExportEXT
+ Extension "SPV_EXT_shader_stencil_export"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 8
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_ARB_shader_stencil_export"
+ Name 4 "main"
+ Name 8 "gl_FragStencilRefARB"
+ Decorate 8(gl_FragStencilRefARB) BuiltIn FragStencilRefEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypePointer Output 6(int)
+8(gl_FragStencilRefARB): 7(ptr) Variable Output
+ 9: 6(int) Constant 100
+ 4(main): 2 Function None 3
+ 5: Label
+ Store 8(gl_FragStencilRefARB) 9
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shiftOps.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shiftOps.frag.out
index 498c287784b..b2bfcad1278 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shiftOps.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shiftOps.frag.out
@@ -1,8 +1,6 @@
spv.shiftOps.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 38
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shortCircuit.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shortCircuit.frag.out
index 7d5189a2518..33eec772282 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shortCircuit.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shortCircuit.frag.out
@@ -1,8 +1,6 @@
spv.shortCircuit.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 147
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleFunctionCall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleFunctionCall.frag.out
index 2e6b671f468..62b42550123 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleFunctionCall.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleFunctionCall.frag.out
@@ -1,6 +1,6 @@
spv.simpleFunctionCall.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 19
Capability Shader
@@ -13,6 +13,7 @@ spv.simpleFunctionCall.frag
Name 9 "foo("
Name 12 "BaseColor"
Name 17 "gl_FragColor"
+ Decorate 17(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleMat.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleMat.vert.out
index 2cad63137f1..56933e4c464 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleMat.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.simpleMat.vert.out
@@ -2,7 +2,7 @@ spv.simpleMat.vert
WARNING: 0:3: varying deprecated in version 130; may be removed in future release
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 39
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out
index 431ef152847..376a8747519 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out
@@ -1,11 +1,10 @@
spv.sparseTexture.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 438
Capability Shader
+ Capability StorageImageMultisample
Capability SampledRect
Capability SparseResidency
Capability SampledCubeArray
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out
index 175dc35c8a5..21f9583cab8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -1,8 +1,6 @@
spv.sparseTextureClamp.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 360
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConst.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConst.vert.out
index 5e2020fe015..766bdaf78db 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConst.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConst.vert.out
@@ -1,8 +1,6 @@
spv.specConst.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 27
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out
index 481ed68c3ac..de8411be7d0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out
@@ -1,8 +1,6 @@
spv.specConstant.comp
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 27
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out
index ea4e542a350..8dda41d4951 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out
@@ -1,8 +1,6 @@
spv.specConstant.vert
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 81
Capability Shader
@@ -13,7 +11,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Source GLSL 400
Name 4 "main"
Name 9 "arraySize"
- Name 14 "foo(vf4[s1518];"
+ Name 14 "foo(vf4[s1506];"
Name 13 "p"
Name 17 "builtin_spec_constant("
Name 20 "color"
@@ -104,10 +102,10 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Store 20(color) 46
48: 10 Load 22(ucol)
Store 47(param) 48
- 49: 2 FunctionCall 14(foo(vf4[s1518];) 47(param)
+ 49: 2 FunctionCall 14(foo(vf4[s1506];) 47(param)
Return
FunctionEnd
-14(foo(vf4[s1518];): 2 Function None 12
+14(foo(vf4[s1506];): 2 Function None 12
13(p): 11(ptr) FunctionParameter
15: Label
54: 24(ptr) AccessChain 53(dupUcol) 23
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantComposite.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantComposite.vert.out
index 9079554bae9..194f567f869 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantComposite.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantComposite.vert.out
@@ -1,8 +1,6 @@
spv.specConstantComposite.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 43
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantOperations.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantOperations.vert.out
index 597820b940c..429e0682572 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantOperations.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstantOperations.vert.out
@@ -1,9 +1,7 @@
spv.specConstantOperations.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 160
+// Generated by (magic number): 80002
+// Id's are bound by 162
Capability Shader
Capability Float64
@@ -168,7 +166,9 @@ Warning, version 450 is not yet complete; most version-specific features are pre
156: 154(fvec2) ConstantComposite 155 155
157: 39(float) Constant 1073741824
158: 154(fvec2) ConstantComposite 157 157
- 159: 154(fvec2) SpecConstantOp 169 153 156 158
+ 159: TypeVector 22(bool) 2
+ 160: 159(bvec2) SpecConstantComposite 153 153
+ 161: 154(fvec2) SpecConstantOp 169 160 156 158
4(main): 2 Function None 3
5: Label
Return
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssbo.autoassign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssbo.autoassign.frag.out
index 8d10b6b75cd..02de2cb25cc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssbo.autoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssbo.autoassign.frag.out
@@ -1,13 +1,14 @@
spv.ssbo.autoassign.frag
// Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 95
+// Generated by (magic number): 80002
+// Id's are bound by 99
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 88 91
+ EntryPoint Fragment 4 "main" 92 95
ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
Name 4 "main"
Name 11 "@main(vf4;"
Name 10 "pos"
@@ -22,16 +23,14 @@ spv.ssbo.autoassign.frag
MemberName 26(TestCB) 0 "W"
MemberName 26(TestCB) 1 "H"
Name 28 ""
- Name 55 "SB1"
- MemberName 55(SB1) 0 "@data"
Name 57 "SB1"
- Name 86 "pos"
- Name 88 "pos"
- Name 91 "@entryPointOutput"
- Name 92 "param"
- MemberDecorate 14(BufType) 0 NonWritable
+ MemberName 57(SB1) 0 "@data"
+ Name 59 "SB1"
+ Name 90 "pos"
+ Name 92 "pos"
+ Name 95 "@entryPointOutput"
+ Name 96 "param"
MemberDecorate 14(BufType) 0 Offset 0
- MemberDecorate 14(BufType) 1 NonWritable
MemberDecorate 14(BufType) 1 Offset 16
Decorate 15 ArrayStride 32
MemberDecorate 16(SB0) 0 NonWritable
@@ -44,13 +43,13 @@ spv.ssbo.autoassign.frag
Decorate 26(TestCB) Block
Decorate 28 DescriptorSet 0
Decorate 28 Binding 15
- Decorate 54 ArrayStride 32
- MemberDecorate 55(SB1) 0 Offset 0
- Decorate 55(SB1) BufferBlock
- Decorate 57(SB1) DescriptorSet 0
- Decorate 57(SB1) Binding 31
- Decorate 88(pos) Location 0
- Decorate 91(@entryPointOutput) Location 0
+ Decorate 56 ArrayStride 32
+ MemberDecorate 57(SB1) 0 Offset 0
+ Decorate 57(SB1) BufferBlock
+ Decorate 59(SB1) DescriptorSet 0
+ Decorate 59(SB1) Binding 31
+ Decorate 92(pos) Location 0
+ Decorate 95(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -72,26 +71,26 @@ spv.ssbo.autoassign.frag
28: 27(ptr) Variable Uniform
29: TypePointer Uniform 21(int)
34: 21(int) Constant 0
- 38: TypePointer Uniform 7(fvec4)
- 50: 19(int) Constant 1
- 54: TypeRuntimeArray 14(BufType)
- 55(SB1): TypeStruct 54
- 56: TypePointer Uniform 55(SB1)
- 57(SB1): 56(ptr) Variable Uniform
- 87: TypePointer Input 7(fvec4)
- 88(pos): 87(ptr) Variable Input
- 90: TypePointer Output 7(fvec4)
-91(@entryPointOutput): 90(ptr) Variable Output
+ 39: TypePointer Uniform 7(fvec4)
+ 52: 19(int) Constant 1
+ 56: TypeRuntimeArray 14(BufType)
+ 57(SB1): TypeStruct 56
+ 58: TypePointer Uniform 57(SB1)
+ 59(SB1): 58(ptr) Variable Uniform
+ 91: TypePointer Input 7(fvec4)
+ 92(pos): 91(ptr) Variable Input
+ 94: TypePointer Output 7(fvec4)
+95(@entryPointOutput): 94(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 86(pos): 8(ptr) Variable Function
- 92(param): 8(ptr) Variable Function
- 89: 7(fvec4) Load 88(pos)
- Store 86(pos) 89
- 93: 7(fvec4) Load 86(pos)
- Store 92(param) 93
- 94: 7(fvec4) FunctionCall 11(@main(vf4;) 92(param)
- Store 91(@entryPointOutput) 94
+ 90(pos): 8(ptr) Variable Function
+ 96(param): 8(ptr) Variable Function
+ 93: 7(fvec4) Load 92(pos)
+ Store 90(pos) 93
+ 97: 7(fvec4) Load 90(pos)
+ Store 96(param) 97
+ 98: 7(fvec4) FunctionCall 11(@main(vf4;) 96(param)
+ Store 95(@entryPointOutput) 98
Return
FunctionEnd
11(@main(vf4;): 7(fvec4) Function None 9
@@ -107,47 +106,51 @@ spv.ssbo.autoassign.frag
35: 23(ptr) AccessChain 10(pos) 34
36: 6(float) Load 35
37: 6(float) FAdd 33 36
- 39: 38(ptr) AccessChain 18(SB0) 20 37 20
- 40: 7(fvec4) Load 39
- 41: 23(ptr) AccessChain 10(pos) 22
- 42: 6(float) Load 41
- 43: 29(ptr) AccessChain 28 20
- 44: 21(int) Load 43
- 45: 6(float) ConvertUToF 44
- 46: 6(float) FMul 42 45
- 47: 23(ptr) AccessChain 10(pos) 34
- 48: 6(float) Load 47
- 49: 6(float) FAdd 46 48
- 51: 38(ptr) AccessChain 18(SB0) 20 49 50
- 52: 7(fvec4) Load 51
- 53: 7(fvec4) FAdd 40 52
- Store 13(vTmp) 53
- 58: 23(ptr) AccessChain 10(pos) 22
- 59: 6(float) Load 58
- 60: 29(ptr) AccessChain 28 20
- 61: 21(int) Load 60
- 62: 6(float) ConvertUToF 61
- 63: 6(float) FMul 59 62
- 64: 23(ptr) AccessChain 10(pos) 34
- 65: 6(float) Load 64
- 66: 6(float) FAdd 63 65
- 67: 38(ptr) AccessChain 57(SB1) 20 66 20
- 68: 7(fvec4) Load 67
- 69: 23(ptr) AccessChain 10(pos) 22
- 70: 6(float) Load 69
- 71: 29(ptr) AccessChain 28 20
- 72: 21(int) Load 71
- 73: 6(float) ConvertUToF 72
- 74: 6(float) FMul 70 73
- 75: 23(ptr) AccessChain 10(pos) 34
- 76: 6(float) Load 75
- 77: 6(float) FAdd 74 76
- 78: 38(ptr) AccessChain 57(SB1) 20 77 50
- 79: 7(fvec4) Load 78
- 80: 7(fvec4) FAdd 68 79
- 81: 7(fvec4) Load 13(vTmp)
- 82: 7(fvec4) FAdd 81 80
- Store 13(vTmp) 82
- 83: 7(fvec4) Load 13(vTmp)
- ReturnValue 83
+ 38: 21(int) ConvertFToU 37
+ 40: 39(ptr) AccessChain 18(SB0) 20 38 20
+ 41: 7(fvec4) Load 40
+ 42: 23(ptr) AccessChain 10(pos) 22
+ 43: 6(float) Load 42
+ 44: 29(ptr) AccessChain 28 20
+ 45: 21(int) Load 44
+ 46: 6(float) ConvertUToF 45
+ 47: 6(float) FMul 43 46
+ 48: 23(ptr) AccessChain 10(pos) 34
+ 49: 6(float) Load 48
+ 50: 6(float) FAdd 47 49
+ 51: 21(int) ConvertFToU 50
+ 53: 39(ptr) AccessChain 18(SB0) 20 51 52
+ 54: 7(fvec4) Load 53
+ 55: 7(fvec4) FAdd 41 54
+ Store 13(vTmp) 55
+ 60: 23(ptr) AccessChain 10(pos) 22
+ 61: 6(float) Load 60
+ 62: 29(ptr) AccessChain 28 20
+ 63: 21(int) Load 62
+ 64: 6(float) ConvertUToF 63
+ 65: 6(float) FMul 61 64
+ 66: 23(ptr) AccessChain 10(pos) 34
+ 67: 6(float) Load 66
+ 68: 6(float) FAdd 65 67
+ 69: 21(int) ConvertFToU 68
+ 70: 39(ptr) AccessChain 59(SB1) 20 69 20
+ 71: 7(fvec4) Load 70
+ 72: 23(ptr) AccessChain 10(pos) 22
+ 73: 6(float) Load 72
+ 74: 29(ptr) AccessChain 28 20
+ 75: 21(int) Load 74
+ 76: 6(float) ConvertUToF 75
+ 77: 6(float) FMul 73 76
+ 78: 23(ptr) AccessChain 10(pos) 34
+ 79: 6(float) Load 78
+ 80: 6(float) FAdd 77 79
+ 81: 21(int) ConvertFToU 80
+ 82: 39(ptr) AccessChain 59(SB1) 20 81 52
+ 83: 7(fvec4) Load 82
+ 84: 7(fvec4) FAdd 71 83
+ 85: 7(fvec4) Load 13(vTmp)
+ 86: 7(fvec4) FAdd 85 84
+ Store 13(vTmp) 86
+ 87: 7(fvec4) Load 13(vTmp)
+ ReturnValue 87
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssboAlias.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssboAlias.frag.out
new file mode 100644
index 00000000000..876646d8e45
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.ssboAlias.frag.out
@@ -0,0 +1,88 @@
+spv.ssboAlias.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 46
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 43
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 13 "Buf1"
+ MemberName 13(Buf1) 0 "@data"
+ Name 15 "Buf1"
+ Name 18 "Buf1@count"
+ MemberName 18(Buf1@count) 0 "@count"
+ Name 20 "Buf1@count"
+ Name 30 "Buf2"
+ Name 31 "Buf2@count"
+ Name 43 "@entryPointOutput"
+ Name 45 "Buf3"
+ Decorate 12 ArrayStride 4
+ MemberDecorate 13(Buf1) 0 Offset 0
+ Decorate 13(Buf1) BufferBlock
+ Decorate 15(Buf1) DescriptorSet 0
+ Decorate 15(Buf1) Binding 84
+ MemberDecorate 18(Buf1@count) 0 Offset 0
+ Decorate 18(Buf1@count) BufferBlock
+ Decorate 20(Buf1@count) DescriptorSet 0
+ Decorate 20(Buf1@count) Binding 83
+ Decorate 30(Buf2) DescriptorSet 0
+ Decorate 30(Buf2) Binding 85
+ Decorate 31(Buf2@count) DescriptorSet 0
+ Decorate 31(Buf2@count) Binding 86
+ Decorate 43(@entryPointOutput) Location 0
+ Decorate 45(Buf3) DescriptorSet 0
+ Decorate 45(Buf3) Binding 84
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeInt 32 0
+ 12: TypeRuntimeArray 11(int)
+ 13(Buf1): TypeStruct 12
+ 14: TypePointer Uniform 13(Buf1)
+ 15(Buf1): 14(ptr) Variable Uniform
+ 16: TypeInt 32 1
+ 17: 16(int) Constant 0
+ 18(Buf1@count): TypeStruct 16(int)
+ 19: TypePointer Uniform 18(Buf1@count)
+ 20(Buf1@count): 19(ptr) Variable Uniform
+ 21: TypePointer Uniform 16(int)
+ 23: 16(int) Constant 1
+ 24: 11(int) Constant 1
+ 25: 11(int) Constant 0
+ 27: 11(int) Constant 10
+ 28: TypePointer Uniform 11(int)
+ 30(Buf2): 14(ptr) Variable Uniform
+ 31(Buf2@count): 19(ptr) Variable Uniform
+ 34: 11(int) Constant 20
+ 36: 6(float) Constant 1065353216
+ 37: 6(float) Constant 1077936128
+ 38: 6(float) Constant 1084227584
+ 39: 7(fvec4) ConstantComposite 36 37 38 36
+ 42: TypePointer Output 7(fvec4)
+43(@entryPointOutput): 42(ptr) Variable Output
+ 45(Buf3): 14(ptr) Variable Uniform
+ 4(main): 2 Function None 3
+ 5: Label
+ 44: 7(fvec4) FunctionCall 9(@main()
+ Store 43(@entryPointOutput) 44
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 22: 21(ptr) AccessChain 20(Buf1@count) 17
+ 26: 11(int) AtomicIAdd 22 24 25 23
+ 29: 28(ptr) AccessChain 15(Buf1) 17 26
+ Store 29 27
+ 32: 21(ptr) AccessChain 31(Buf2@count) 17
+ 33: 11(int) AtomicIAdd 32 24 25 23
+ 35: 28(ptr) AccessChain 30(Buf2) 17 33
+ Store 35 34
+ ReturnValue 39
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out
index 8fd6dd5c882..b2c9b39b2ba 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -1,85 +1,86 @@
spv.stereoViewRendering.tesc
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 38
+ Capability Geometry
Capability Tessellation
+ Capability ShaderViewportIndexLayerNV
Capability ShaderViewportMaskNV
Capability ShaderStereoViewNV
+ Extension "SPV_EXT_shader_viewport_index_layer"
Extension "SPV_NV_stereo_view_rendering"
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint TessellationControl 4 "main" 16 18 32
+ EntryPoint TessellationControl 4 "main" 16 18 31 37
ExecutionMode 4 OutputVertices 4
Source GLSL 450
SourceExtension "GL_NV_stereo_view_rendering"
SourceExtension "GL_NV_viewport_array2"
Name 4 "main"
Name 12 "gl_PerVertex"
- MemberName 12(gl_PerVertex) 0 "gl_Layer"
- MemberName 12(gl_PerVertex) 1 "gl_SecondaryPositionNV"
- MemberName 12(gl_PerVertex) 2 "gl_SecondaryViewportMaskNV"
+ MemberName 12(gl_PerVertex) 0 "gl_SecondaryPositionNV"
+ MemberName 12(gl_PerVertex) 1 "gl_SecondaryViewportMaskNV"
Name 16 "gl_out"
Name 18 "gl_InvocationID"
- Name 28 "gl_PerVertex"
- MemberName 28(gl_PerVertex) 0 "gl_Position"
- MemberName 28(gl_PerVertex) 1 "gl_PointSize"
- MemberName 28(gl_PerVertex) 2 "gl_ClipDistance"
- MemberName 28(gl_PerVertex) 3 "gl_CullDistance"
- MemberName 28(gl_PerVertex) 4 "gl_SecondaryPositionNV"
- Name 32 "gl_in"
- MemberDecorate 12(gl_PerVertex) 0 BuiltIn Layer
- MemberDecorate 12(gl_PerVertex) 0 ViewportRelativeNV
- MemberDecorate 12(gl_PerVertex) 0 SecondaryViewportRelativeNV 1
- MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryPositionNV
- MemberDecorate 12(gl_PerVertex) 2 BuiltIn SecondaryViewportMaskNV
+ Name 27 "gl_PerVertex"
+ MemberName 27(gl_PerVertex) 0 "gl_Position"
+ MemberName 27(gl_PerVertex) 1 "gl_PointSize"
+ MemberName 27(gl_PerVertex) 2 "gl_ClipDistance"
+ MemberName 27(gl_PerVertex) 3 "gl_CullDistance"
+ MemberName 27(gl_PerVertex) 4 "gl_SecondaryPositionNV"
+ Name 31 "gl_in"
+ Name 37 "gl_Layer"
+ MemberDecorate 12(gl_PerVertex) 0 BuiltIn SecondaryPositionNV
+ MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryViewportMaskNV
Decorate 12(gl_PerVertex) Block
Decorate 18(gl_InvocationID) BuiltIn InvocationId
- MemberDecorate 28(gl_PerVertex) 0 BuiltIn Position
- MemberDecorate 28(gl_PerVertex) 1 BuiltIn PointSize
- MemberDecorate 28(gl_PerVertex) 2 BuiltIn ClipDistance
- MemberDecorate 28(gl_PerVertex) 3 BuiltIn CullDistance
- Decorate 28(gl_PerVertex) Block
+ MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
+ MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
+ MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
+ MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
+ Decorate 27(gl_PerVertex) Block
+ Decorate 37(gl_Layer) BuiltIn Layer
+ Decorate 37(gl_Layer) ViewportRelativeNV
+ Decorate 37(gl_Layer) SecondaryViewportRelativeNV 1
2: TypeVoid
3: TypeFunction 2
- 6: TypeInt 32 1
- 7: TypeFloat 32
- 8: TypeVector 7(float) 4
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeInt 32 1
9: TypeInt 32 0
10: 9(int) Constant 2
- 11: TypeArray 6(int) 10
-12(gl_PerVertex): TypeStruct 6(int) 8(fvec4) 11
+ 11: TypeArray 8(int) 10
+12(gl_PerVertex): TypeStruct 7(fvec4) 11
13: 9(int) Constant 4
14: TypeArray 12(gl_PerVertex) 13
15: TypePointer Output 14
16(gl_out): 15(ptr) Variable Output
- 17: TypePointer Input 6(int)
+ 17: TypePointer Input 8(int)
18(gl_InvocationID): 17(ptr) Variable Input
- 20: 6(int) Constant 2
- 21: 6(int) Constant 0
- 22: 6(int) Constant 1
- 23: TypePointer Output 6(int)
- 26: 9(int) Constant 1
- 27: TypeArray 7(float) 26
-28(gl_PerVertex): TypeStruct 8(fvec4) 7(float) 27 27 8(fvec4)
- 29: 9(int) Constant 32
- 30: TypeArray 28(gl_PerVertex) 29
- 31: TypePointer Input 30
- 32(gl_in): 31(ptr) Variable Input
- 33: TypePointer Input 8(fvec4)
- 36: TypePointer Output 8(fvec4)
+ 20: 8(int) Constant 1
+ 21: 8(int) Constant 0
+ 22: TypePointer Output 8(int)
+ 25: 9(int) Constant 1
+ 26: TypeArray 6(float) 25
+27(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 26 26 7(fvec4)
+ 28: 9(int) Constant 32
+ 29: TypeArray 27(gl_PerVertex) 28
+ 30: TypePointer Input 29
+ 31(gl_in): 30(ptr) Variable Input
+ 32: TypePointer Input 7(fvec4)
+ 35: TypePointer Output 7(fvec4)
+ 37(gl_Layer): 22(ptr) Variable Output
4(main): 2 Function None 3
5: Label
- 19: 6(int) Load 18(gl_InvocationID)
- 24: 23(ptr) AccessChain 16(gl_out) 19 20 21
- Store 24 22
- 25: 6(int) Load 18(gl_InvocationID)
- 34: 33(ptr) AccessChain 32(gl_in) 22 21
- 35: 8(fvec4) Load 34
- 37: 36(ptr) AccessChain 16(gl_out) 25 22
- Store 37 35
+ 19: 8(int) Load 18(gl_InvocationID)
+ 23: 22(ptr) AccessChain 16(gl_out) 19 20 21
+ Store 23 20
+ 24: 8(int) Load 18(gl_InvocationID)
+ 33: 32(ptr) AccessChain 31(gl_in) 20 21
+ 34: 7(fvec4) Load 33
+ 36: 35(ptr) AccessChain 16(gl_out) 24 21
+ Store 36 34
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.vert.out
index d6c695601e3..f2b22d5f5b7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.vert.out
@@ -1,8 +1,6 @@
spv.stereoViewRendering.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 27
Capability Shader
@@ -10,6 +8,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Capability ShaderViewportIndexLayerNV
Capability ShaderViewportMaskNV
Capability ShaderStereoViewNV
+ Extension "SPV_EXT_shader_viewport_index_layer"
Extension "SPV_NV_stereo_view_rendering"
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.storageBuffer.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.storageBuffer.vert.out
new file mode 100644
index 00000000000..b8b7e9410e6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.storageBuffer.vert.out
@@ -0,0 +1,67 @@
+spv.storageBuffer.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 31
+
+ Capability Shader
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 13
+ Source GLSL 450
+ Name 4 "main"
+ Name 11 "gl_PerVertex"
+ MemberName 11(gl_PerVertex) 0 "gl_Position"
+ MemberName 11(gl_PerVertex) 1 "gl_PointSize"
+ MemberName 11(gl_PerVertex) 2 "gl_ClipDistance"
+ MemberName 11(gl_PerVertex) 3 "gl_CullDistance"
+ Name 13 ""
+ Name 16 "ub"
+ MemberName 16(ub) 0 "a"
+ Name 18 "ubi"
+ Name 22 "bb"
+ MemberName 22(bb) 0 "b"
+ Name 24 "bbi"
+ MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+ MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+ MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+ MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
+ Decorate 11(gl_PerVertex) Block
+ MemberDecorate 16(ub) 0 Offset 0
+ Decorate 16(ub) Block
+ Decorate 18(ubi) DescriptorSet 0
+ MemberDecorate 22(bb) 0 Offset 0
+ Decorate 22(bb) Block
+ Decorate 24(bbi) DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeInt 32 0
+ 9: 8(int) Constant 1
+ 10: TypeArray 6(float) 9
+11(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 10
+ 12: TypePointer Output 11(gl_PerVertex)
+ 13: 12(ptr) Variable Output
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16(ub): TypeStruct 7(fvec4)
+ 17: TypePointer Uniform 16(ub)
+ 18(ubi): 17(ptr) Variable Uniform
+ 19: TypePointer Uniform 7(fvec4)
+ 22(bb): TypeStruct 7(fvec4)
+ 23: TypePointer StorageBuffer 22(bb)
+ 24(bbi): 23(ptr) Variable StorageBuffer
+ 25: TypePointer StorageBuffer 7(fvec4)
+ 29: TypePointer Output 7(fvec4)
+ 4(main): 2 Function None 3
+ 5: Label
+ 20: 19(ptr) AccessChain 18(ubi) 15
+ 21: 7(fvec4) Load 20
+ 26: 25(ptr) AccessChain 24(bbi) 15
+ 27: 7(fvec4) Load 26
+ 28: 7(fvec4) FAdd 21 27
+ 30: 29(ptr) AccessChain 13 15
+ Store 30 28
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out
index eb796f7c89c..b107de2bd74 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out
@@ -3,7 +3,7 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to
"precision mediump int; precision highp float;"
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 50
Capability Shader
@@ -36,6 +36,7 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to
MemberDecorate 9(lunarStruct2) 0 RelaxedPrecision
MemberDecorate 10(lunarStruct3) 1 RelaxedPrecision
Decorate 16 RelaxedPrecision
+ Decorate 31(gl_FragColor) Location 0
Decorate 40(samp2D) DescriptorSet 0
Decorate 44(coord) RelaxedPrecision
Decorate 45 RelaxedPrecision
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out
index e60159f9952..fb55c71ac8f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out
@@ -1,6 +1,6 @@
spv.structDeref.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 123
Capability Shader
@@ -40,6 +40,7 @@ spv.structDeref.frag
Name 99 "gl_FragColor"
Name 116 "samp2D"
Name 122 "foo2"
+ Decorate 99(gl_FragColor) Location 0
Decorate 116(samp2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out
index f7cb2d2a258..5672196e964 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out
@@ -1,6 +1,6 @@
spv.structure.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 60
Capability Shader
@@ -24,6 +24,7 @@ spv.structure.frag
Name 50 "samp2D"
Name 54 "coord"
Name 59 "foo"
+ Decorate 45(gl_FragColor) Location 0
Decorate 50(samp2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out
index c2421113881..76248982cdb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out
@@ -1,8 +1,6 @@
spv.subpass.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 67
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.switch.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.switch.frag.out
index 86acb6c8eea..0a35155533f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.switch.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.switch.frag.out
@@ -1,11 +1,10 @@
spv.switch.frag
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:121: 'switch' : last case/default label not followed by statements
WARNING: 0:134: 'switch' : last case/default label not followed by statements
WARNING: 0:139: 'switch' : last case/default label not followed by statements
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 269
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzle.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzle.frag.out
index 46978f8c60c..b194d272117 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzle.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzle.frag.out
@@ -1,6 +1,6 @@
spv.swizzle.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 108
Capability Shader
@@ -24,6 +24,7 @@ spv.swizzle.frag
Name 81 "c"
Name 83 "rep"
Name 107 "blend"
+ Decorate 69(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzleInversion.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzleInversion.frag.out
index bf0699a3cf7..dd910f7cbb5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzleInversion.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.swizzleInversion.frag.out
@@ -1,8 +1,6 @@
spv.swizzleInversion.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 46
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out
index bf0135aebe6..e61785ce0e5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out
@@ -1,8 +1,6 @@
spv.test.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 55
Capability Shader
@@ -25,6 +23,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 49 "blend"
Decorate 16(texSampler2D) DescriptorSet 0
Decorate 33(texSampler3D) DescriptorSet 0
+ Decorate 43(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.vert.out
index 623d16ba679..5f3d41edd4e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.vert.out
@@ -2,7 +2,7 @@ spv.test.vert
WARNING: 0:5: attribute deprecated in version 130; may be removed in future release
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 24
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out
index 467f2545896..99bb381aecf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out
@@ -4,7 +4,7 @@ WARNING: 0:11: varying deprecated in version 130; may be removed in future relea
WARNING: 0:12: varying deprecated in version 130; may be removed in future release
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 305
Capability Shader
@@ -45,6 +45,7 @@ WARNING: 0:12: varying deprecated in version 130; may be removed in future relea
Decorate 130(texSamplerCube) DescriptorSet 0
Decorate 145(shadowSampler1D) DescriptorSet 0
Decorate 164(shadowSampler2D) DescriptorSet 0
+ Decorate 291(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out
new file mode 100644
index 00000000000..6af2b4fb728
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out
@@ -0,0 +1,37 @@
+spv.texture.sampler.transform.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 20
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 9 17
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 440
+ Name 4 "main"
+ Name 9 "color"
+ Name 13 "tex"
+ Name 17 "coord"
+ Decorate 13(tex) DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Output 7(fvec4)
+ 9(color): 8(ptr) Variable Output
+ 10: TypeImage 6(float) 2D sampled format:Unknown
+ 11: TypeSampledImage 10
+ 12: TypePointer UniformConstant 11
+ 13(tex): 12(ptr) Variable UniformConstant
+ 15: TypeVector 6(float) 2
+ 16: TypePointer Input 15(fvec2)
+ 17(coord): 16(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 14: 11 Load 13(tex)
+ 18: 15(fvec2) Load 17(coord)
+ 19: 7(fvec4) ImageSampleImplicitLod 14 18
+ Store 9(color) 19
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out
index c361549952d..c704f9fa033 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out
@@ -1,6 +1,6 @@
spv.texture.vert
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 150
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureBuffer.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureBuffer.vert.out
new file mode 100644
index 00000000000..2a9432dc37f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureBuffer.vert.out
@@ -0,0 +1,64 @@
+spv.textureBuffer.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 42
+
+ Capability Shader
+ Capability SampledBuffer
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main"
+ Source GLSL 450
+ Name 4 "main"
+ Name 9 "tBuf"
+ Name 13 "s"
+ Name 23 "sBuf"
+ Name 32 "utBuf"
+ Name 38 "itBuf"
+ Decorate 9(tBuf) DescriptorSet 0
+ Decorate 13(s) DescriptorSet 0
+ Decorate 23(sBuf) DescriptorSet 0
+ Decorate 32(utBuf) DescriptorSet 0
+ Decorate 38(itBuf) DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeImage 6(float) Buffer sampled format:Unknown
+ 8: TypePointer UniformConstant 7
+ 9(tBuf): 8(ptr) Variable UniformConstant
+ 11: TypeSampler
+ 12: TypePointer UniformConstant 11
+ 13(s): 12(ptr) Variable UniformConstant
+ 15: TypeSampledImage 7
+ 17: TypeInt 32 1
+ 18: 17(int) Constant 13
+ 20: TypeVector 6(float) 4
+ 22: TypePointer UniformConstant 15
+ 23(sBuf): 22(ptr) Variable UniformConstant
+ 29: TypeInt 32 0
+ 30: TypeImage 29(int) Buffer sampled format:Unknown
+ 31: TypePointer UniformConstant 30
+ 32(utBuf): 31(ptr) Variable UniformConstant
+ 34: TypeVector 29(int) 4
+ 36: TypeImage 17(int) Buffer sampled format:Unknown
+ 37: TypePointer UniformConstant 36
+ 38(itBuf): 37(ptr) Variable UniformConstant
+ 40: TypeVector 17(int) 4
+ 4(main): 2 Function None 3
+ 5: Label
+ 10: 7 Load 9(tBuf)
+ 14: 11 Load 13(s)
+ 16: 15 SampledImage 10 14
+ 19: 7 Image 16
+ 21: 20(fvec4) ImageFetch 19 18
+ 24: 15 Load 23(sBuf)
+ 25: 7 Image 24
+ 26: 20(fvec4) ImageFetch 25 18
+ 27: 7 Load 9(tBuf)
+ 28: 20(fvec4) ImageFetch 27 18
+ 33: 30 Load 32(utBuf)
+ 35: 34(ivec4) ImageFetch 33 18
+ 39: 36 Load 38(itBuf)
+ 41: 40(ivec4) ImageFetch 39 18
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureGatherBiasLod.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureGatherBiasLod.frag.out
new file mode 100644
index 00000000000..3a416687df1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureGatherBiasLod.frag.out
@@ -0,0 +1,384 @@
+spv.textureGatherBiasLod.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 298
+
+ Capability Shader
+ Capability SparseResidency
+ Capability SampledCubeArray
+ Capability ImageGatherBiasLodAMD
+ Extension "SPV_AMD_texture_gather_bias_lod"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 20 25 37 61 176 296
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_AMD_texture_gather_bias_lod"
+ SourceExtension "GL_ARB_sparse_texture2"
+ Name 4 "main"
+ Name 9 "texel"
+ Name 12 "result"
+ Name 16 "s2D"
+ Name 20 "c2"
+ Name 25 "bias"
+ Name 33 "s2DArray"
+ Name 37 "c3"
+ Name 47 "sCube"
+ Name 58 "sCubeArray"
+ Name 61 "c4"
+ Name 104 "ResType"
+ Name 176 "lod"
+ Name 296 "fragColor"
+ Decorate 16(s2D) DescriptorSet 0
+ Decorate 33(s2DArray) DescriptorSet 0
+ Decorate 47(sCube) DescriptorSet 0
+ Decorate 58(sCubeArray) DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 10: 6(float) Constant 0
+ 11: 7(fvec4) ConstantComposite 10 10 10 10
+ 13: TypeImage 6(float) 2D sampled format:Unknown
+ 14: TypeSampledImage 13
+ 15: TypePointer UniformConstant 14
+ 16(s2D): 15(ptr) Variable UniformConstant
+ 18: TypeVector 6(float) 2
+ 19: TypePointer Input 18(fvec2)
+ 20(c2): 19(ptr) Variable Input
+ 22: TypeInt 32 1
+ 23: 22(int) Constant 0
+ 24: TypePointer Input 6(float)
+ 25(bias): 24(ptr) Variable Input
+ 30: TypeImage 6(float) 2D array sampled format:Unknown
+ 31: TypeSampledImage 30
+ 32: TypePointer UniformConstant 31
+ 33(s2DArray): 32(ptr) Variable UniformConstant
+ 35: TypeVector 6(float) 3
+ 36: TypePointer Input 35(fvec3)
+ 37(c3): 36(ptr) Variable Input
+ 39: 22(int) Constant 1
+ 44: TypeImage 6(float) Cube sampled format:Unknown
+ 45: TypeSampledImage 44
+ 46: TypePointer UniformConstant 45
+ 47(sCube): 46(ptr) Variable UniformConstant
+ 50: 22(int) Constant 2
+ 55: TypeImage 6(float) Cube array sampled format:Unknown
+ 56: TypeSampledImage 55
+ 57: TypePointer UniformConstant 56
+ 58(sCubeArray): 57(ptr) Variable UniformConstant
+ 60: TypePointer Input 7(fvec4)
+ 61(c4): 60(ptr) Variable Input
+ 63: 22(int) Constant 3
+ 70: TypeVector 22(int) 2
+ 71: 70(ivec2) ConstantComposite 23 23
+ 78: 70(ivec2) ConstantComposite 23 39
+ 85: TypeInt 32 0
+ 86: 85(int) Constant 4
+ 87: TypeArray 70(ivec2) 86
+ 88: 70(ivec2) ConstantComposite 39 23
+ 89: 70(ivec2) ConstantComposite 39 39
+ 90: 87 ConstantComposite 71 78 88 89
+ 104(ResType): TypeStruct 22(int) 7(fvec4)
+ 176(lod): 24(ptr) Variable Input
+ 295: TypePointer Output 7(fvec4)
+ 296(fragColor): 295(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(texel): 8(ptr) Variable Function
+ 12(result): 8(ptr) Variable Function
+ Store 9(texel) 11
+ Store 12(result) 11
+ 17: 14 Load 16(s2D)
+ 21: 18(fvec2) Load 20(c2)
+ 26: 6(float) Load 25(bias)
+ 27: 7(fvec4) ImageGather 17 21 23 Bias 26
+ 28: 7(fvec4) Load 9(texel)
+ 29: 7(fvec4) FAdd 28 27
+ Store 9(texel) 29
+ 34: 31 Load 33(s2DArray)
+ 38: 35(fvec3) Load 37(c3)
+ 40: 6(float) Load 25(bias)
+ 41: 7(fvec4) ImageGather 34 38 39 Bias 40
+ 42: 7(fvec4) Load 9(texel)
+ 43: 7(fvec4) FAdd 42 41
+ Store 9(texel) 43
+ 48: 45 Load 47(sCube)
+ 49: 35(fvec3) Load 37(c3)
+ 51: 6(float) Load 25(bias)
+ 52: 7(fvec4) ImageGather 48 49 50 Bias 51
+ 53: 7(fvec4) Load 9(texel)
+ 54: 7(fvec4) FAdd 53 52
+ Store 9(texel) 54
+ 59: 56 Load 58(sCubeArray)
+ 62: 7(fvec4) Load 61(c4)
+ 64: 6(float) Load 25(bias)
+ 65: 7(fvec4) ImageGather 59 62 63 Bias 64
+ 66: 7(fvec4) Load 9(texel)
+ 67: 7(fvec4) FAdd 66 65
+ Store 9(texel) 67
+ 68: 14 Load 16(s2D)
+ 69: 18(fvec2) Load 20(c2)
+ 72: 6(float) Load 25(bias)
+ 73: 7(fvec4) ImageGather 68 69 23 Bias ConstOffset 72 71
+ 74: 7(fvec4) Load 9(texel)
+ 75: 7(fvec4) FAdd 74 73
+ Store 9(texel) 75
+ 76: 31 Load 33(s2DArray)
+ 77: 35(fvec3) Load 37(c3)
+ 79: 6(float) Load 25(bias)
+ 80: 7(fvec4) ImageGather 76 77 39 Bias ConstOffset 79 78
+ 81: 7(fvec4) Load 9(texel)
+ 82: 7(fvec4) FAdd 81 80
+ Store 9(texel) 82
+ 83: 14 Load 16(s2D)
+ 84: 18(fvec2) Load 20(c2)
+ 91: 6(float) Load 25(bias)
+ 92: 7(fvec4) ImageGather 83 84 23 Bias ConstOffsets 91 90
+ 93: 7(fvec4) Load 9(texel)
+ 94: 7(fvec4) FAdd 93 92
+ Store 9(texel) 94
+ 95: 31 Load 33(s2DArray)
+ 96: 35(fvec3) Load 37(c3)
+ 97: 6(float) Load 25(bias)
+ 98: 7(fvec4) ImageGather 95 96 39 Bias ConstOffsets 97 90
+ 99: 7(fvec4) Load 9(texel)
+ 100: 7(fvec4) FAdd 99 98
+ Store 9(texel) 100
+ 101: 14 Load 16(s2D)
+ 102: 18(fvec2) Load 20(c2)
+ 103: 6(float) Load 25(bias)
+ 105:104(ResType) ImageSparseGather 101 102 23 Bias 103
+ 106: 7(fvec4) CompositeExtract 105 1
+ Store 12(result) 106
+ 107: 22(int) CompositeExtract 105 0
+ 108: 7(fvec4) Load 12(result)
+ 109: 7(fvec4) Load 9(texel)
+ 110: 7(fvec4) FAdd 109 108
+ Store 9(texel) 110
+ 111: 31 Load 33(s2DArray)
+ 112: 35(fvec3) Load 37(c3)
+ 113: 6(float) Load 25(bias)
+ 114:104(ResType) ImageSparseGather 111 112 39 Bias 113
+ 115: 7(fvec4) CompositeExtract 114 1
+ Store 12(result) 115
+ 116: 22(int) CompositeExtract 114 0
+ 117: 7(fvec4) Load 12(result)
+ 118: 7(fvec4) Load 9(texel)
+ 119: 7(fvec4) FAdd 118 117
+ Store 9(texel) 119
+ 120: 45 Load 47(sCube)
+ 121: 35(fvec3) Load 37(c3)
+ 122: 6(float) Load 25(bias)
+ 123:104(ResType) ImageSparseGather 120 121 50 Bias 122
+ 124: 7(fvec4) CompositeExtract 123 1
+ Store 12(result) 124
+ 125: 22(int) CompositeExtract 123 0
+ 126: 7(fvec4) Load 12(result)
+ 127: 7(fvec4) Load 9(texel)
+ 128: 7(fvec4) FAdd 127 126
+ Store 9(texel) 128
+ 129: 56 Load 58(sCubeArray)
+ 130: 7(fvec4) Load 61(c4)
+ 131: 6(float) Load 25(bias)
+ 132:104(ResType) ImageSparseGather 129 130 50 Bias 131
+ 133: 7(fvec4) CompositeExtract 132 1
+ Store 12(result) 133
+ 134: 22(int) CompositeExtract 132 0
+ 135: 7(fvec4) Load 12(result)
+ 136: 7(fvec4) Load 9(texel)
+ 137: 7(fvec4) FAdd 136 135
+ Store 9(texel) 137
+ 138: 14 Load 16(s2D)
+ 139: 18(fvec2) Load 20(c2)
+ 140: 6(float) Load 25(bias)
+ 141:104(ResType) ImageSparseGather 138 139 23 Bias ConstOffset 140 71
+ 142: 7(fvec4) CompositeExtract 141 1
+ Store 12(result) 142
+ 143: 22(int) CompositeExtract 141 0
+ 144: 7(fvec4) Load 12(result)
+ 145: 7(fvec4) Load 9(texel)
+ 146: 7(fvec4) FAdd 145 144
+ Store 9(texel) 146
+ 147: 31 Load 33(s2DArray)
+ 148: 35(fvec3) Load 37(c3)
+ 149: 6(float) Load 25(bias)
+ 150:104(ResType) ImageSparseGather 147 148 39 Bias ConstOffset 149 78
+ 151: 7(fvec4) CompositeExtract 150 1
+ Store 12(result) 151
+ 152: 22(int) CompositeExtract 150 0
+ 153: 7(fvec4) Load 12(result)
+ 154: 7(fvec4) Load 9(texel)
+ 155: 7(fvec4) FAdd 154 153
+ Store 9(texel) 155
+ 156: 14 Load 16(s2D)
+ 157: 18(fvec2) Load 20(c2)
+ 158: 6(float) Load 25(bias)
+ 159:104(ResType) ImageSparseGather 156 157 23 Bias ConstOffsets 158 90
+ 160: 7(fvec4) CompositeExtract 159 1
+ Store 12(result) 160
+ 161: 22(int) CompositeExtract 159 0
+ 162: 7(fvec4) Load 12(result)
+ 163: 7(fvec4) Load 9(texel)
+ 164: 7(fvec4) FAdd 163 162
+ Store 9(texel) 164
+ 165: 31 Load 33(s2DArray)
+ 166: 35(fvec3) Load 37(c3)
+ 167: 6(float) Load 25(bias)
+ 168:104(ResType) ImageSparseGather 165 166 39 Bias ConstOffsets 167 90
+ 169: 7(fvec4) CompositeExtract 168 1
+ Store 12(result) 169
+ 170: 22(int) CompositeExtract 168 0
+ 171: 7(fvec4) Load 12(result)
+ 172: 7(fvec4) Load 9(texel)
+ 173: 7(fvec4) FAdd 172 171
+ Store 9(texel) 173
+ 174: 14 Load 16(s2D)
+ 175: 18(fvec2) Load 20(c2)
+ 177: 6(float) Load 176(lod)
+ 178: 7(fvec4) ImageGather 174 175 23 Lod 177
+ 179: 7(fvec4) Load 9(texel)
+ 180: 7(fvec4) FAdd 179 178
+ Store 9(texel) 180
+ 181: 31 Load 33(s2DArray)
+ 182: 35(fvec3) Load 37(c3)
+ 183: 6(float) Load 176(lod)
+ 184: 7(fvec4) ImageGather 181 182 39 Lod 183
+ 185: 7(fvec4) Load 9(texel)
+ 186: 7(fvec4) FAdd 185 184
+ Store 9(texel) 186
+ 187: 45 Load 47(sCube)
+ 188: 35(fvec3) Load 37(c3)
+ 189: 6(float) Load 176(lod)
+ 190: 7(fvec4) ImageGather 187 188 50 Lod 189
+ 191: 7(fvec4) Load 9(texel)
+ 192: 7(fvec4) FAdd 191 190
+ Store 9(texel) 192
+ 193: 56 Load 58(sCubeArray)
+ 194: 7(fvec4) Load 61(c4)
+ 195: 6(float) Load 176(lod)
+ 196: 7(fvec4) ImageGather 193 194 63 Lod 195
+ 197: 7(fvec4) Load 9(texel)
+ 198: 7(fvec4) FAdd 197 196
+ Store 9(texel) 198
+ 199: 14 Load 16(s2D)
+ 200: 18(fvec2) Load 20(c2)
+ 201: 6(float) Load 176(lod)
+ 202: 7(fvec4) ImageGather 199 200 23 Lod ConstOffset 201 71
+ 203: 7(fvec4) Load 9(texel)
+ 204: 7(fvec4) FAdd 203 202
+ Store 9(texel) 204
+ 205: 31 Load 33(s2DArray)
+ 206: 35(fvec3) Load 37(c3)
+ 207: 6(float) Load 176(lod)
+ 208: 7(fvec4) ImageGather 205 206 39 Lod ConstOffset 207 78
+ 209: 7(fvec4) Load 9(texel)
+ 210: 7(fvec4) FAdd 209 208
+ Store 9(texel) 210
+ 211: 14 Load 16(s2D)
+ 212: 18(fvec2) Load 20(c2)
+ 213: 6(float) Load 176(lod)
+ 214: 7(fvec4) ImageGather 211 212 23 Lod ConstOffsets 213 90
+ 215: 7(fvec4) Load 9(texel)
+ 216: 7(fvec4) FAdd 215 214
+ Store 9(texel) 216
+ 217: 31 Load 33(s2DArray)
+ 218: 35(fvec3) Load 37(c3)
+ 219: 6(float) Load 176(lod)
+ 220: 7(fvec4) ImageGather 217 218 39 Lod ConstOffsets 219 90
+ 221: 7(fvec4) Load 9(texel)
+ 222: 7(fvec4) FAdd 221 220
+ Store 9(texel) 222
+ 223: 14 Load 16(s2D)
+ 224: 18(fvec2) Load 20(c2)
+ 225: 6(float) Load 176(lod)
+ 226:104(ResType) ImageSparseGather 223 224 23 Lod 225
+ 227: 7(fvec4) CompositeExtract 226 1
+ Store 12(result) 227
+ 228: 22(int) CompositeExtract 226 0
+ 229: 7(fvec4) Load 12(result)
+ 230: 7(fvec4) Load 9(texel)
+ 231: 7(fvec4) FAdd 230 229
+ Store 9(texel) 231
+ 232: 31 Load 33(s2DArray)
+ 233: 35(fvec3) Load 37(c3)
+ 234: 6(float) Load 176(lod)
+ 235:104(ResType) ImageSparseGather 232 233 39 Lod 234
+ 236: 7(fvec4) CompositeExtract 235 1
+ Store 12(result) 236
+ 237: 22(int) CompositeExtract 235 0
+ 238: 7(fvec4) Load 12(result)
+ 239: 7(fvec4) Load 9(texel)
+ 240: 7(fvec4) FAdd 239 238
+ Store 9(texel) 240
+ 241: 45 Load 47(sCube)
+ 242: 35(fvec3) Load 37(c3)
+ 243: 6(float) Load 176(lod)
+ 244:104(ResType) ImageSparseGather 241 242 50 Lod 243
+ 245: 7(fvec4) CompositeExtract 244 1
+ Store 12(result) 245
+ 246: 22(int) CompositeExtract 244 0
+ 247: 7(fvec4) Load 12(result)
+ 248: 7(fvec4) Load 9(texel)
+ 249: 7(fvec4) FAdd 248 247
+ Store 9(texel) 249
+ 250: 56 Load 58(sCubeArray)
+ 251: 7(fvec4) Load 61(c4)
+ 252: 6(float) Load 176(lod)
+ 253:104(ResType) ImageSparseGather 250 251 50 Lod 252
+ 254: 7(fvec4) CompositeExtract 253 1
+ Store 12(result) 254
+ 255: 22(int) CompositeExtract 253 0
+ 256: 7(fvec4) Load 12(result)
+ 257: 7(fvec4) Load 9(texel)
+ 258: 7(fvec4) FAdd 257 256
+ Store 9(texel) 258
+ 259: 14 Load 16(s2D)
+ 260: 18(fvec2) Load 20(c2)
+ 261: 6(float) Load 176(lod)
+ 262:104(ResType) ImageSparseGather 259 260 23 Lod ConstOffset 261 71
+ 263: 7(fvec4) CompositeExtract 262 1
+ Store 12(result) 263
+ 264: 22(int) CompositeExtract 262 0
+ 265: 7(fvec4) Load 12(result)
+ 266: 7(fvec4) Load 9(texel)
+ 267: 7(fvec4) FAdd 266 265
+ Store 9(texel) 267
+ 268: 31 Load 33(s2DArray)
+ 269: 35(fvec3) Load 37(c3)
+ 270: 6(float) Load 176(lod)
+ 271:104(ResType) ImageSparseGather 268 269 39 Lod ConstOffset 270 78
+ 272: 7(fvec4) CompositeExtract 271 1
+ Store 12(result) 272
+ 273: 22(int) CompositeExtract 271 0
+ 274: 7(fvec4) Load 12(result)
+ 275: 7(fvec4) Load 9(texel)
+ 276: 7(fvec4) FAdd 275 274
+ Store 9(texel) 276
+ 277: 14 Load 16(s2D)
+ 278: 18(fvec2) Load 20(c2)
+ 279: 6(float) Load 176(lod)
+ 280:104(ResType) ImageSparseGather 277 278 23 Lod ConstOffsets 279 90
+ 281: 7(fvec4) CompositeExtract 280 1
+ Store 12(result) 281
+ 282: 22(int) CompositeExtract 280 0
+ 283: 7(fvec4) Load 12(result)
+ 284: 7(fvec4) Load 9(texel)
+ 285: 7(fvec4) FAdd 284 283
+ Store 9(texel) 285
+ 286: 31 Load 33(s2DArray)
+ 287: 35(fvec3) Load 37(c3)
+ 288: 6(float) Load 176(lod)
+ 289:104(ResType) ImageSparseGather 286 287 39 Lod ConstOffsets 288 90
+ 290: 7(fvec4) CompositeExtract 289 1
+ Store 12(result) 290
+ 291: 22(int) CompositeExtract 289 0
+ 292: 7(fvec4) Load 12(result)
+ 293: 7(fvec4) Load 9(texel)
+ 294: 7(fvec4) FAdd 293 292
+ Store 9(texel) 294
+ 297: 7(fvec4) Load 9(texel)
+ Store 296(fragColor) 297
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.types.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.types.frag.out
index 9a2d8e35f94..87264868b78 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.types.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.types.frag.out
@@ -1,6 +1,6 @@
spv.types.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 260
Capability Shader
@@ -55,6 +55,7 @@ spv.types.frag
Decorate 111(i_i3) Flat
Decorate 118(u_i4) Flat
Decorate 120(i_i4) Flat
+ Decorate 160(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeBool
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out
index e9ba0ce2633..92c4ce7ba1b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out
@@ -1,8 +1,6 @@
spv.uint.frag
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 213
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out
index 447ad4fd4e3..87aa2f26b2f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out
@@ -1,6 +1,6 @@
spv.uniformArray.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 53
Capability Shader
@@ -16,6 +16,7 @@ spv.uniformArray.frag
Name 35 "alpha"
Name 47 "gl_FragColor"
Name 52 "texSampler2D"
+ Decorate 47(gl_FragColor) Location 0
Decorate 52(texSampler2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out
index b4d3fe01a4d..fa682cd928f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -1,8 +1,6 @@
spv.variableArrayIndex.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 93
Capability Shader
@@ -38,6 +36,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Decorate 20(foo3) Flat
Decorate 34(foo2) Flat
Decorate 36(foo) Flat
+ Decorate 54(gl_FragColor) Location 0
Decorate 59(samp2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out
index 58833ea1b67..22748ac5aa5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out
@@ -1,6 +1,6 @@
spv.varyingArray.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 61
Capability Shader
@@ -18,6 +18,7 @@ spv.varyingArray.frag
Name 45 "gl_FragColor"
Name 48 "foo"
Decorate 13(texSampler2D) DescriptorSet 0
+ Decorate 45(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out
index 9c018406ab8..701f9d198d3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -1,6 +1,6 @@
spv.varyingArrayIndirect.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 70
Capability Shader
@@ -22,6 +22,7 @@ spv.varyingArrayIndirect.frag
Decorate 13(texSampler2D) DescriptorSet 0
Decorate 22(b) Flat
Decorate 31(a) Flat
+ Decorate 56(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out
index fdfa2b88432..d62455cbd8d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out
@@ -1,58 +1,58 @@
spv.viewportArray2.tesc
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 25
+ Capability Geometry
Capability Tessellation
Capability MultiViewport
Capability ShaderViewportIndexLayerNV
Capability ShaderViewportMaskNV
+ Extension "SPV_EXT_shader_viewport_index_layer"
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint TessellationControl 4 "main" 14 16
+ EntryPoint TessellationControl 4 "main" 14 16 22 24
ExecutionMode 4 OutputVertices 4
Source GLSL 450
SourceExtension "GL_NV_viewport_array2"
Name 4 "main"
Name 10 "gl_PerVertex"
- MemberName 10(gl_PerVertex) 0 "gl_ViewportIndex"
- MemberName 10(gl_PerVertex) 1 "gl_Layer"
- MemberName 10(gl_PerVertex) 2 "gl_ViewportMask"
+ MemberName 10(gl_PerVertex) 0 "gl_ViewportMask"
Name 14 "gl_out"
Name 16 "gl_InvocationID"
- MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportIndex
- MemberDecorate 10(gl_PerVertex) 1 BuiltIn Layer
- MemberDecorate 10(gl_PerVertex) 1 ViewportRelativeNV
- MemberDecorate 10(gl_PerVertex) 2 BuiltIn ViewportMaskNV
+ Name 22 "gl_ViewportIndex"
+ Name 24 "gl_Layer"
+ MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportMaskNV
Decorate 10(gl_PerVertex) Block
Decorate 16(gl_InvocationID) BuiltIn InvocationId
+ Decorate 22(gl_ViewportIndex) BuiltIn ViewportIndex
+ Decorate 24(gl_Layer) BuiltIn Layer
+ Decorate 24(gl_Layer) ViewportRelativeNV
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeInt 32 0
8: 7(int) Constant 2
9: TypeArray 6(int) 8
-10(gl_PerVertex): TypeStruct 6(int) 6(int) 9
+10(gl_PerVertex): TypeStruct 9
11: 7(int) Constant 4
12: TypeArray 10(gl_PerVertex) 11
13: TypePointer Output 12
14(gl_out): 13(ptr) Variable Output
15: TypePointer Input 6(int)
16(gl_InvocationID): 15(ptr) Variable Input
- 18: 6(int) Constant 2
- 19: 6(int) Constant 0
- 20: 6(int) Constant 1
- 21: TypePointer Output 6(int)
+ 18: 6(int) Constant 0
+ 19: 6(int) Constant 1
+ 20: TypePointer Output 6(int)
+22(gl_ViewportIndex): 20(ptr) Variable Output
+ 23: 6(int) Constant 2
+ 24(gl_Layer): 20(ptr) Variable Output
4(main): 2 Function None 3
5: Label
17: 6(int) Load 16(gl_InvocationID)
- 22: 21(ptr) AccessChain 14(gl_out) 17 18 19
- Store 22 20
- 23: 6(int) Load 16(gl_InvocationID)
- 24: 21(ptr) AccessChain 14(gl_out) 23 19
- Store 24 18
+ 21: 20(ptr) AccessChain 14(gl_out) 17 18 18
+ Store 21 19
+ Store 22(gl_ViewportIndex) 23
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.vert.out
index 766685f6978..b627b4680c7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.vert.out
@@ -1,8 +1,6 @@
spv.viewportArray2.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 19
Capability Shader
@@ -10,6 +8,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Capability MultiViewport
Capability ShaderViewportIndexLayerNV
Capability ShaderViewportMaskNV
+ Extension "SPV_EXT_shader_viewport_index_layer"
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.voidFunction.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.voidFunction.frag.out
index 44348616e80..1fbd69f9209 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.voidFunction.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.voidFunction.frag.out
@@ -1,8 +1,6 @@
spv.voidFunction.frag
-Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 43
Capability Shader
@@ -20,6 +18,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 37 "gl_FragColor"
Name 40 "BaseColor"
Name 42 "d"
+ Decorate 37(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
10: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-continue-break.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-continue-break.vert.out
index 73dc35ced38..1d343ed2627 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-continue-break.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-continue-break.vert.out
@@ -1,8 +1,6 @@
spv.while-continue-break.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 41
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-simple.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-simple.vert.out
index 82121dd00c0..d956c6c3f41 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-simple.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.while-simple.vert.out
@@ -1,8 +1,6 @@
spv.while-simple.vert
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 22
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.whileLoop.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.whileLoop.frag.out
index ce1e195d0dc..e58fb043c80 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.whileLoop.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.whileLoop.frag.out
@@ -1,6 +1,6 @@
spv.whileLoop.frag
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 35
Capability Shader
@@ -15,6 +15,7 @@ spv.whileLoop.frag
Name 24 "d"
Name 28 "bigColor"
Name 33 "gl_FragColor"
+ Decorate 33(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/syntaxError.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/syntaxError.frag.out
index cdda760f78d..b6ebea3ea41 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/syntaxError.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/syntaxError.frag.out
@@ -1,6 +1,6 @@
syntaxError.frag
ERROR: 0:9: 'vec5' : undeclared identifier
-ERROR: 0:9: '' : syntax error
+ERROR: 0:9: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
ERROR: 2 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenPaste.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenPaste.vert.out
index e544d9ee330..b5ba9a5f878 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenPaste.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/tokenPaste.vert.out
@@ -1,5 +1,4 @@
tokenPaste.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:38: '##' : unexpected location
ERROR: 0:40: '##' : unexpected location; end of replacement list
ERROR: 0:49: '##' : combined tokens are too long
@@ -8,7 +7,8 @@ ERROR: 0:69: '##' : combined token is invalid
ERROR: 0:82: 'macro expansion' : Too few args in Macro rec
ERROR: 0:82: '##' : unexpected location
ERROR: 0:82: '##' : unexpected location
-ERROR: 8 compilation errors. No code generated.
+ERROR: 0:86: '##' : unexpected location; end of argument
+ERROR: 9 compilation errors. No code generated.
Shader version: 450
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.vert.out
index cd9da127b6b..eb2e07b36fb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsClean.vert.out
@@ -1,6 +1,4 @@
versionsClean.vert
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 420
0:? Sequence
0:40 Function Definition: main( ( global void)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.vert.out
index 0d371365c40..f11e0114f67 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/versionsErrors.vert.out
@@ -1,5 +1,4 @@
versionsErrors.vert
-Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:38: attribute deprecated in version 130; may be removed in future release
ERROR: 0:38: 'attribute' : no longer supported in core profile; removed in version 420
ERROR: 0:45: 'discard' : not supported in this stage: vertex
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.ast.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.ast.vert.out
index bfc38c0355a..0712e07106b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.ast.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.ast.vert.out
@@ -1,6 +1,4 @@
vulkan.ast.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
-
Shader version: 450
0:? Sequence
0:7 Function Definition: main( ( global void)
@@ -260,7 +258,7 @@ Shader version: 450
0:? 2 (const int)
// Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
// Id's are bound by 50
Capability Shader
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.comp.out
index 5eb4c5b484e..e56dca48e90 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.comp.out
@@ -1,5 +1,4 @@
vulkan.comp
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:5: 'local_size' : cannot change previously set size
ERROR: 1 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.frag.out
index 27edff9b829..0440cf494d3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.frag.out
@@ -1,5 +1,4 @@
vulkan.frag
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:14: 'sampler2D' : sampler-constructor requires two arguments
ERROR: 0:15: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type
ERROR: 0:16: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type
@@ -26,9 +25,9 @@ ERROR: 0:60: 'subpassLoadMS' : no matching overloaded function found
ERROR: 0:61: 'subpassLoad' : no matching overloaded function found
ERROR: 0:63: 'subpassLoadMS' : no matching overloaded function found
ERROR: 0:66: 'subroutine' : not allowed when generating SPIR-V
-ERROR: 0:66: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
+ERROR: 0:66: 'subroutine' : feature not yet implemented
ERROR: 0:67: 'subroutine' : not allowed when generating SPIR-V
-ERROR: 0:67: 'uniform' : no qualifiers allowed for function return
+ERROR: 0:67: 'subroutine' : feature not yet implemented
ERROR: 0:69: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
ERROR: 0:73: 'texture' : no matching overloaded function found
ERROR: 0:74: 'imageStore' : no matching overloaded function found
@@ -40,7 +39,11 @@ ERROR: 0:93: ',' : sampler constructor must appear at point of use
ERROR: 0:94: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' temp sampler2D' and a right operand of type ' temp sampler2D' (or there is no acceptable conversion)
ERROR: 0:94: 'call argument' : sampler constructor must appear at point of use
ERROR: 0:96: 'gl_NumSamples' : undeclared identifier
-ERROR: 38 compilation errors. No code generated.
+ERROR: 0:101: 'noise1' : no matching overloaded function found
+ERROR: 0:102: 'noise2' : no matching overloaded function found
+ERROR: 0:103: 'noise3' : no matching overloaded function found
+ERROR: 0:104: 'noise4' : no matching overloaded function found
+ERROR: 42 compilation errors. No code generated.
ERROR: Linking fragment stage: Only one push_constant block is allowed per stage
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out
index 1e7441721cb..0b2ea5309c5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out
@@ -1,5 +1,4 @@
vulkan.vert
-Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 0:3: 'subpass input' : not supported in this stage: vertex
ERROR: 0:4: 'subpass input' : not supported in this stage: vertex
ERROR: 0:5: 'subpass input' : not supported in this stage: vertex
@@ -23,7 +22,11 @@ ERROR: 0:32: 'initializer' : can't use with types containing arrays sized with a
ERROR: 0:34: '=' : can't use with types containing arrays sized with a specialization constant
ERROR: 0:35: '==' : can't use with types containing arrays sized with a specialization constant
ERROR: 0:39: 'set' : cannot be used with push_constant
-ERROR: 23 compilation errors. No code generated.
+ERROR: 0:49: '[]' : only outermost dimension of an array of arrays can be a specialization constant
+ERROR: 0:50: '[]' : only outermost dimension of an array of arrays can be a specialization constant
+ERROR: 0:51: '[]' : only outermost dimension of an array of arrays can be a specialization constant
+ERROR: 0:54: '[]' : only outermost dimension of an array of arrays can be a specialization constant
+ERROR: 27 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/constFoldIntMin.frag b/3rdparty/bgfx/3rdparty/glslang/Test/constFoldIntMin.frag
new file mode 100644
index 00000000000..68618326cbc
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/constFoldIntMin.frag
@@ -0,0 +1,12 @@
+#version 460 core
+#extension GL_AMD_gpu_shader_int16 : enable
+#extension GL_ARB_gpu_shader_int64 : enable
+
+void a(){
+ int16_t u = -32768S / -1S; // SHRT_MIN
+ int v = -2147483648 / -1; // INT_MIN
+ int64_t w = -9223372036854775808L / -1L; // LLONG_MIN
+ int16_t x = -32768S % -1S; // SHRT_MIN
+ int y = -2147483648 % -1; // INT_MIN
+ int64_t z = -9223372036854775808L % -1L; // LLONG_MIN
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppDeepNest.frag b/3rdparty/bgfx/3rdparty/glslang/Test/cppDeepNest.frag
new file mode 100644
index 00000000000..51c436e4f95
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppDeepNest.frag
@@ -0,0 +1,117 @@
+#ifdef O
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#if
+#endif
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppIntMinOverNegativeOne.frag b/3rdparty/bgfx/3rdparty/glslang/Test/cppIntMinOverNegativeOne.frag
new file mode 100644
index 00000000000..b7e0a95364f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppIntMinOverNegativeOne.frag
@@ -0,0 +1,6 @@
+#if (-2147483648 / -1) != 0
+#error INT_MIN / -1 should yield 0, something went wrong.
+#endif
+#if (-2147483648 % -1) != 0
+#error INT_MIN % -1 should yield 0, something went wrong.
+#endif \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppPassMacroName.frag b/3rdparty/bgfx/3rdparty/glslang/Test/cppPassMacroName.frag
new file mode 100644
index 00000000000..f42d9de6d5b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppPassMacroName.frag
@@ -0,0 +1,12 @@
+#define f1(i) ((i)*(i))
+#define I2(f, n) f(n) + f(n+1)
+#define I3(f, n) I2(f, n) + f(n+2)
+
+void main()
+{
+ int f1 = 4;
+ int f2 = f1;
+ int f3 = f1(3);
+ int f4 = I2(f1, 0);
+ int f5 = I3(f1, 0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppSimple.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppSimple.vert
index 198203a69d7..fdd14221b63 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/cppSimple.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppSimple.vert
@@ -337,6 +337,16 @@ int aoeua = FOOOM;
#error \ 376
#error \377
+// ERROR for macro expansion to yield 'defined'
+#line 9600
+#define DEF_MAC
+#define DEF_DEFINED defined
+#if DEF_DEFINED DEF_MAC
+#error DEF_DEFINED then
+#else
+#error DEF_DEFINED else
+#endif
+
#line 10000
#if 1
#else
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/foo.h b/3rdparty/bgfx/3rdparty/glslang/Test/foo.h
new file mode 100644
index 00000000000..7f79340b6d1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/foo.h
@@ -0,0 +1 @@
+#error should not be included \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.-D-U.frag b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.-D-U.frag
new file mode 100644
index 00000000000..4d2325f1daa
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.-D-U.frag
@@ -0,0 +1,32 @@
+#version 450
+
+#define IN_SHADER
+
+layout(location=0) out vec4 color;
+
+void main()
+{
+#if FOO==200
+ color = vec4(1.0);
+#else
+ #error expected FOO 200
+#endif
+
+#ifdef IN_SHADER
+ color++;
+#else
+ #error IN_SHADER was undef
+#endif
+
+#ifdef UNDEFED
+ #error UNDEFED defined
+#else
+ color *= 3.0;
+#endif
+
+#if MUL == 400
+ color *= MUL;
+#else
+ #error bad MUL
+#endif
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.entryPointRename.vert b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.entryPointRename.vert
new file mode 100644
index 00000000000..7fc6b7a1bd5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.entryPointRename.vert
@@ -0,0 +1,11 @@
+#version 460
+
+void bar()
+{
+ gl_Position = vec4(1);
+}
+
+void main()
+{
+ gl_Position = vec4(1);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.entryPointRename2.vert b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.entryPointRename2.vert
new file mode 100644
index 00000000000..0473e9bc4c5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.entryPointRename2.vert
@@ -0,0 +1,6 @@
+#version 460
+
+void bar()
+{
+ gl_Position = vec4(1);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glspv.frag b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.frag
index cea8e135b25..86c9f6aba64 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/glspv.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glspv.frag
@@ -1,4 +1,4 @@
-#version 330
+#version 450
#ifdef GL_SPIRV
#error GL_SPIRV is set ( correct, not an error )
@@ -11,4 +11,17 @@ void main()
{
}
+uniform float f; // ERROR, no location
+layout(location = 2) uniform float g;
+uniform sampler2D s1;
+layout(location = 3) uniform sampler2D s2;
+
+void noise()
+{
+ noise1(vec4(1));
+ noise2(4.0);
+ noise3(vec2(3));
+ noise4(1);
+}
+
layout(input_attachment_index = 1) uniform subpassInput sub; // ERROR, no inputs
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.-D-U.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.-D-U.frag
new file mode 100644
index 00000000000..0a022220813
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.-D-U.frag
@@ -0,0 +1,31 @@
+
+#define IN_SHADER
+
+static float4 color;
+
+void main()
+{
+#if FOO==200
+ color = 1.0;
+#else
+ #error expected FOO 200
+#endif
+
+#ifdef FOO
+ color -= 5.0;
+#else
+ #error expected FOO 200
+#endif
+
+#ifdef IN_SHADER
+ color++;
+#else
+ #error IN_SHADER was undef
+#endif
+
+#ifdef UNDEFED
+ #error UNDEFED defined
+#else
+ color *= 3.0;
+#endif
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.aliasOpaque.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.aliasOpaque.frag
new file mode 100644
index 00000000000..8b1cceff91f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.aliasOpaque.frag
@@ -0,0 +1,29 @@
+struct OS {
+ SamplerState ss;
+ float a;
+ Texture2D tex;
+};
+
+SamplerState gss;
+SamplerState gss2;
+Texture2D gtex;
+
+float4 osCall(OS s)
+{
+ return s.a * s.tex.Sample(s.ss, float2(0.2, 0.3));
+}
+
+float4 main() : SV_TARGET0
+{
+ OS os;
+ os.ss = gss2;
+ os.ss = gss;
+ os.tex = gtex;
+ os.a = 3.0;
+
+ // this should give an error
+ //SamplerState localss;
+ //localss = gss2;
+
+ return osCall(os);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.frag
index 1abba89fce1..ff0004fd83d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.array.frag
@@ -4,8 +4,15 @@ struct {
float4 m[7];
} s[11];
-float4 PixelShaderFunction(int i, float4 input[3]) : COLOR0
+static float4 C = float4(1,2,3,4);
+float4 a1[1] = { float4(1,2,3,4) };
+float4 a2[2] = { float4(1,2,3,4), float4(5,2,3,4), };
+const float4 c1[1] = { float4(1,2,3,4) };
+static const float4 c2[2] = { C, float4(1,2,3,4), };
+
+float4 PixelShaderFunction(int i : sem1, float4 input[3] : sem2) : SV_TARGET0
{
- float4 b[10];
- return a[1] + a[i] + input[2] + input[i] + b[5] + b[i] + s[i].m[i];
-} \ No newline at end of file
+ float4 b[10] = { C, C, C, C, C, C, C, C, C, C };
+ float4 tmp = C + a1[0] + c1[0] + a2[i] + c2[i];
+ return a[1] + a[i] + input[2] + input[i] + b[5] + b[i] + s[i].m[i] + tmp;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attributeC11.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attributeC11.frag
new file mode 100644
index 00000000000..4fe663a2a4f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attributeC11.frag
@@ -0,0 +1,18 @@
+struct S {
+ float2 f;
+};
+
+[[vk::binding(1)]]
+StructuredBuffer<S> buffer1;
+
+[[vk::binding(3, 2)]]
+StructuredBuffer<S> buffer3;
+
+[[vk::input_attachment_index(4)]]
+Texture2D<float4> attach;
+
+[[vk::location(7)]] float4
+main([[vk::location(8)]] float4 input: A) : B
+{
+ return input + attach.Load(float2(0.5));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attributeGlobalBuffer.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attributeGlobalBuffer.frag
new file mode 100644
index 00000000000..a1177dab232
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.attributeGlobalBuffer.frag
@@ -0,0 +1,8 @@
+[[vk::global_cbuffer_binding(5, 2)]]
+float4 u1;
+float4 u2;
+
+float4 main() : SV_Target0
+{
+ return u1 + u2;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.automap.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.automap.frag
new file mode 100644
index 00000000000..da1e885fce5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.automap.frag
@@ -0,0 +1,57 @@
+// Test register class offsets for different resource types
+
+SamplerState s1 : register(s1);
+SamplerComparisonState s2 : register(s2);
+
+Texture1D <float4> t1 : register(t1);
+Texture2D <float4> t2 : register(t2);
+Texture3D <float4> t3 : register(t3);
+StructuredBuffer<float4> t4 : register(t4);
+ByteAddressBuffer t5 : register(t5);
+Buffer<float4> t6 : register(t6);
+
+RWTexture1D <float4> u1 : register(u1);
+RWTexture2D <float4> u2 : register(u2);
+RWTexture3D <float4> u3 : register(u3);
+
+RWBuffer <float> u4 : register(u4);
+RWByteAddressBuffer u5 : register(u5);
+RWStructuredBuffer<float> u6 : register(u6);
+AppendStructuredBuffer<float> u7 : register(u7);
+ConsumeStructuredBuffer<float> u8 : register(u8);
+
+cbuffer cb : register(b1) {
+ int cb1;
+};
+
+tbuffer tb : register(t7) {
+ int tb1;
+};
+
+float4 main() : SV_Target0
+{
+ t1;
+ t2;
+ t3;
+ t4[0];
+ t5.Load(0);
+ t6;
+
+ s1;
+ s2;
+
+ u1;
+ u2;
+ u3;
+
+ u4[0];
+ u5.Load(0);
+ u6[0];
+ u7;
+ u8;
+
+ cb1;
+ tb1;
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.boolConv.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.boolConv.vert
new file mode 100644
index 00000000000..7efe20b0ae5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.boolConv.vert
@@ -0,0 +1,20 @@
+static bool a, b = true;
+float4 main() : SV_Position
+{
+ int r = 0;
+
+ r += a + b;
+ r += a - b;
+ r += a * b;
+ r += a / b;
+ r += a % b;
+
+ r += a & b;
+ r += a | b;
+ r += a ^ b;
+
+ r += a << b;
+ r += a >> b;
+
+ return r;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.buffer.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.buffer.frag
index b93dcd3124c..520de09e855 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.buffer.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.buffer.frag
@@ -1,17 +1,17 @@
-cbuffer {
+cbuffer buf1 {
float4 v1;
-};
+}; // extraneous ;
-tbuffer {
+tbuffer buf2 {
float4 v2;
-};
+}; // extraneous ;
-cbuffer cbufName : register(b2, space10) {
- float4 v3;
- int i3 : packoffset(c1.y);
-};
+cbuffer cbufName {
+ float4 v3 : packoffset(c0);
+ int i3 : packoffset(c1.y);
+}
-tbuffer tbufName : register(b8) {
+tbuffer tbufName : register(t8) {
float4 v4 : packoffset(c1);
int i4 : packoffset(c3);
float f1 : packoffset(c3.w);
@@ -19,14 +19,19 @@ tbuffer tbufName : register(b8) {
float f4 : packoffset(c4.y);
float f5 : packoffset(c4.z);
float f6 : packoffset(c);
- float f7;
- float3x4 m1;
- row_major float3x4 m2;
- column_major float3x4 m3;
- float3x4 m4;
-};
+ float f7 : packoffset(c8);
+ float3x4 m1 : packoffset(c7);
+ row_major float3x4 m2 : packoffset(c11);
+ column_major float3x4 m3 : packoffset(c15);
+ float3x4 m4 : packoffset(c19);
+}
+
+float foo() // float looks like identifier, but can't be part of tbuffer
+{
+ return 1.0;
+}
-float4 PixelShaderFunction(float4 input) : COLOR0
+float4 PixelShaderFunction(float4 input : SV_POSITION) : SV_TARGET0
{
- return input + v1 + v2 + v3 + v4;
+ return (input + v1 + v2 + v3 + v4) * foo();
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.charLit.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.charLit.vert
new file mode 100644
index 00000000000..36c4a1e5e00
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.charLit.vert
@@ -0,0 +1,17 @@
+float4 main() : SV_Position
+{
+ uint a1 = 'A';
+ int a2 = '0';
+
+ int a3 = '\a';
+ a3 += '\b';
+ a3 += '\t';
+ a3 += '\n';
+ a3 += '\v';
+ a3 += '\f';
+ a3 += '\r';
+
+ int a10 = '\c';
+
+ return a1 + a2 + a3 + a10;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clip.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clip.frag
new file mode 100644
index 00000000000..a44c9e95036
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clip.frag
@@ -0,0 +1,12 @@
+
+float GetEntitySelectClip()
+{
+ return 1.0f;
+}
+
+float4 main() : SV_TARGET
+{
+ clip(GetEntitySelectClip());
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.frag
new file mode 100644
index 00000000000..10813b30baa
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.frag
@@ -0,0 +1,6 @@
+float4 main(in float4 pos : SV_Position,
+ in float clip : SV_ClipDistance,
+ in float cull : SV_CullDistance) : SV_Target0
+{
+ return pos + clip + cull;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.geom
new file mode 100644
index 00000000000..76c34b35518
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.geom
@@ -0,0 +1,19 @@
+struct S {
+ float4 pos : SV_Position;
+ float2 clip : SV_ClipDistance0;
+};
+
+[maxvertexcount(3)]
+void main(triangle in float4 pos[3] : SV_Position,
+ triangle in uint VertexID[3] : VertexID,
+ inout LineStream<S> OutputStream,
+ triangle in float4 clip[3] : SV_ClipDistance) // externally: an array 3 of array 4 (not vec4!) of float.
+{
+ S s;
+
+ s.pos = pos[0];
+ s.clip = clip[0].xy;
+
+ OutputStream.Append(s);
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.vert
new file mode 100644
index 00000000000..bcebafc3339
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-1.vert
@@ -0,0 +1,8 @@
+void main(out float4 pos : SV_Position,
+ out float clip : SV_ClipDistance, // scalar float
+ out float cull : SV_CullDistance) // scalar float
+{
+ pos = 1.0f.xxxx;
+ clip = 0.5f;
+ cull = 0.51f;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.frag
new file mode 100644
index 00000000000..b6f88d567a9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.frag
@@ -0,0 +1,7 @@
+float4 main(in float4 pos : SV_Position,
+ in float2 clip[2] : SV_ClipDistance, // array of vector float
+ in float2 cull[2] : SV_CullDistance) : SV_Target0 // array of vector float
+{
+
+ return pos + clip[0][0] + cull[0][0];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.geom
new file mode 100644
index 00000000000..90f047feb7e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.geom
@@ -0,0 +1,19 @@
+struct S {
+ float4 pos : SV_Position;
+ float2 clip[2] : SV_ClipDistance0;
+};
+
+[maxvertexcount(3)]
+void main(triangle in float4 pos[3] : SV_Position,
+ triangle in uint VertexID[3] : VertexID,
+ inout LineStream<S> OutputStream,
+ triangle in float2 clip[3][2] : SV_ClipDistance) // externally: an array 3 of array 4 of float.
+{
+ S s;
+
+ s.pos = pos[0];
+ s.clip[0] = clip[0][0];
+ s.clip[1] = clip[0][1];
+
+ OutputStream.Append(s);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.vert
new file mode 100644
index 00000000000..bf8c0ee029e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-2.vert
@@ -0,0 +1,15 @@
+void main(out float4 pos : SV_Position,
+ out float2 clip[2] : SV_ClipDistance, // array of vector float
+ out float2 cull[2] : SV_CullDistance) // array of vector float
+{
+ pos = 1.0f.xxxx;
+ clip[0].x = 0.5f;
+ clip[0].y = 0.6f;
+ clip[1].x = 0.7f;
+ clip[1].y = 0.8f;
+
+ cull[0].x = 0.525f;
+ cull[0].y = 0.625f;
+ cull[1].x = 0.725f;
+ cull[1].y = 0.825f;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.frag
new file mode 100644
index 00000000000..e2b6b8627e7
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.frag
@@ -0,0 +1,6 @@
+float4 main(in float4 pos : SV_Position,
+ in float clip[2] : SV_ClipDistance, // array of scalar float
+ in float cull[2] : SV_CullDistance) : SV_Target0 // array of scalar float
+{
+ return pos + clip[0] + cull[0];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.geom
new file mode 100644
index 00000000000..2aa4cd46d41
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.geom
@@ -0,0 +1,20 @@
+struct S {
+ float4 pos : SV_Position;
+ float2 clip0 : SV_ClipDistance0; // clip0 and clip1 form an array of float[4] externally.
+ float2 clip1 : SV_ClipDistance1;
+};
+
+[maxvertexcount(3)]
+void main(triangle in float4 pos[3] : SV_Position,
+ triangle in uint VertexID[3] : VertexID,
+ inout LineStream<S> OutputStream,
+ triangle in float4 clip[3] : SV_ClipDistance) // externally: an array 3 of array 4 (not vec4!) of float.
+{
+ S s;
+
+ s.pos = pos[0];
+ s.clip0 = clip[0].xy;
+ s.clip1 = clip[0].zw;
+
+ OutputStream.Append(s);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.vert
new file mode 100644
index 00000000000..a759a9ccf46
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-3.vert
@@ -0,0 +1,13 @@
+void main(out float4 pos : SV_Position,
+ out float clip[2] : SV_ClipDistance, // array of scalar float
+ out float cull[2] : SV_CullDistance) // array of scalar float
+{
+ pos = 1.0f.xxxx;
+ clip[0] = 0.5f;
+ clip[1] = 0.6f;
+
+ cull[0] = 0.525f;
+ cull[1] = 0.625f;
+}
+
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.frag
new file mode 100644
index 00000000000..61441604ae6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.frag
@@ -0,0 +1,9 @@
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float4 ClipRect : SV_ClipDistance0; // vector in split struct
+};
+
+float4 main(const VS_OUTPUT v) : SV_Target0
+{
+ return v.Position + v.ClipRect;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.geom
new file mode 100644
index 00000000000..ff296a88ce3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.geom
@@ -0,0 +1,21 @@
+struct S {
+ float4 pos : SV_Position;
+ float2 clip0 : SV_ClipDistance0; // clip0 and clip1 form an array of float[4] externally.
+ float2 clip1 : SV_ClipDistance1;
+};
+
+[maxvertexcount(3)]
+void main(triangle in float4 pos[3] : SV_Position,
+ triangle in uint VertexID[3] : VertexID,
+ inout LineStream<S> OutputStream,
+ triangle in float2 clip0[3] : SV_ClipDistance0, // test input arrayed semantic vars
+ triangle in float2 clip1[3] : SV_ClipDistance1)
+{
+ S s;
+
+ s.pos = pos[0];
+ s.clip0 = clip0[0];
+ s.clip1 = clip1[0];
+
+ OutputStream.Append(s);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.vert
new file mode 100644
index 00000000000..5e0d082f147
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-4.vert
@@ -0,0 +1,21 @@
+struct VS_INPUT {
+ float4 Position : POSITION;
+};
+
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float4 ClipRect : SV_ClipDistance0; // vector in split struct
+};
+
+VS_OUTPUT main(const VS_INPUT v)
+{
+ VS_OUTPUT Output;
+ Output.Position = 0;
+
+ Output.ClipRect.x = 1;
+ Output.ClipRect.y = 2;
+ Output.ClipRect.z = 3;
+ Output.ClipRect.w = 4;
+
+ return Output;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-5.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-5.frag
new file mode 100644
index 00000000000..472299948d2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-5.frag
@@ -0,0 +1,9 @@
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float2 ClipRect[2] : SV_ClipDistance0; // array of float2 in split struct
+};
+
+float4 main(const VS_OUTPUT v) : SV_Target0
+{
+ return v.Position + v.ClipRect[0].x + v.ClipRect[1].x;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-5.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-5.vert
new file mode 100644
index 00000000000..02fb86270d6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-5.vert
@@ -0,0 +1,21 @@
+struct VS_INPUT {
+ float4 Position : POSITION;
+};
+
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float2 ClipRect[2] : SV_ClipDistance0; // array of float2 in split struct
+};
+
+VS_OUTPUT main(const VS_INPUT v)
+{
+ VS_OUTPUT Output;
+ Output.Position = 0;
+
+ Output.ClipRect[0].x = 1;
+ Output.ClipRect[0].y = 2;
+ Output.ClipRect[1].x = 3;
+ Output.ClipRect[1].y = 4;
+
+ return Output;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-6.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-6.frag
new file mode 100644
index 00000000000..646197be7e1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-6.frag
@@ -0,0 +1,10 @@
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float4 clip0 : SV_ClipDistance0; // multiple semantic IDs, two vec4s (no extra packing)
+ float4 clip1 : SV_ClipDistance1; // ...
+};
+
+float4 main(VS_OUTPUT v) : SV_Target0
+{
+ return v.Position + v.clip0 + v.clip1;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-6.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-6.vert
new file mode 100644
index 00000000000..d68c2254cc9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-6.vert
@@ -0,0 +1,23 @@
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float4 clip0 : SV_ClipDistance0; // multiple semantic IDs, two vec4s (no extra packing)
+ float4 clip1 : SV_ClipDistance1; // ...
+};
+
+VS_OUTPUT main()
+{
+ VS_OUTPUT Output;
+ Output.Position = 0;
+
+ Output.clip0.x = 0;
+ Output.clip0.y = 1;
+ Output.clip0.z = 2;
+ Output.clip0.w = 3;
+
+ Output.clip1.x = 4;
+ Output.clip1.y = 5;
+ Output.clip1.z = 6;
+ Output.clip1.w = 7;
+
+ return Output;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-7.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-7.frag
new file mode 100644
index 00000000000..1a26df8a4ff
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-7.frag
@@ -0,0 +1,10 @@
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float3 clip0 : SV_ClipDistance0; // multiple semantic IDs, vec3+vec4 (skip)
+ float4 clip1 : SV_ClipDistance1; // ...
+};
+
+float4 main(VS_OUTPUT v) : SV_Target0
+{
+ return v.Position + v.clip0.x + v.clip1.x;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-7.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-7.vert
new file mode 100644
index 00000000000..c615d1f8c99
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-7.vert
@@ -0,0 +1,23 @@
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float3 clip0 : SV_ClipDistance0; // multiple semantic IDs, vec3+vec4 (skip)
+ float4 clip1 : SV_ClipDistance1; // ...
+};
+
+VS_OUTPUT main()
+{
+ VS_OUTPUT Output;
+ Output.Position = 0;
+
+ Output.clip0.x = 0;
+ Output.clip0.y = 1;
+ Output.clip0.z = 2;
+ // Position 3 is skipped
+
+ Output.clip1.x = 4;
+ Output.clip1.y = 5;
+ Output.clip1.z = 6;
+ Output.clip1.w = 7;
+
+ return Output;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-8.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-8.frag
new file mode 100644
index 00000000000..2edf1948f1e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-8.frag
@@ -0,0 +1,10 @@
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float3 clip0 : SV_ClipDistance0; // multiple semantic IDs, vec3+float (pack)
+ float clip1 : SV_ClipDistance1; // ...
+};
+
+float4 main(VS_OUTPUT v) : SV_Target0
+{
+ return v.Position + v.clip0.x + v.clip1;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-8.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-8.vert
new file mode 100644
index 00000000000..c6377d2ddd3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-8.vert
@@ -0,0 +1,20 @@
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+ float3 clip0 : SV_ClipDistance0; // multiple semantic IDs, vec3+float (pack)
+ float clip1 : SV_ClipDistance1; // ...
+};
+
+VS_OUTPUT main()
+{
+ VS_OUTPUT Output;
+ Output.Position = 0;
+
+ Output.clip0.x = 0;
+ Output.clip0.y = 1;
+ Output.clip0.z = 2;
+
+ // Position 3 is packed from clip1's float
+ Output.clip1 = 3;
+
+ return Output;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-9.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-9.frag
new file mode 100644
index 00000000000..cbe940af36a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-9.frag
@@ -0,0 +1,8 @@
+
+// Test packing 0 and 1 semantics into single array[4], from in fn params.
+float4 main(in float4 Position : SV_Position,
+ in float3 clip0 : SV_ClipDistance0,
+ in float clip1 : SV_ClipDistance1) : SV_Target0
+{
+ return Position + clip0.x + clip1;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-9.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-9.vert
new file mode 100644
index 00000000000..d48830703b3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.clipdistance-9.vert
@@ -0,0 +1,19 @@
+struct VS_OUTPUT {
+ float4 Position : SV_Position;
+};
+
+// Test packing 0 and 1 semantics into single array[4] output, from out fn params.
+VS_OUTPUT main(out float3 clip0 : SV_ClipDistance0, out float clip1 : SV_ClipDistance1)
+{
+ VS_OUTPUT Output;
+ Output.Position = 0;
+
+ clip0.x = 0;
+ clip0.y = 1;
+ clip0.z = 2;
+
+ // Position 3 is packed from clip1's float
+ clip1 = 3;
+
+ return Output;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.conditional.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.conditional.frag
index 128c5931a69..91f75eec7fd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.conditional.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.conditional.frag
@@ -1,3 +1,28 @@
+float4 c4;
+float4 t4;
+float4 f4;
+float t;
+float f;
+
+float4 vectorCond()
+{
+ return (c4 ? t4 : f4) +
+ (c4 ? t : f ) +
+ (t4 < f4 ? t4 : f4) +
+ (c4 ? t : f4);
+}
+
+float4 scalarCond()
+{
+ float4 ret = t != f ? t * f4 : 1;
+ return ret;
+}
+
+float2 fbSelect(bool2 cnd, float2 src0, float2 src1)
+{
+ return cnd ? src0 : src1;
+}
+
float4 PixelShaderFunction(float4 input) : COLOR0
{
int a = 1 < 2 ? 3 < 4 ? 5 : 6 : 7;
@@ -12,5 +37,6 @@ float4 PixelShaderFunction(float4 input) : COLOR0
e = a = b ? c = d : 10, b = a ? d = c : 11;
float4 f;
f = ret.x < input.y ? c * input : d * input;
- return e * ret + f;
+ return e * ret + f + vectorCond() + scalarCond() +
+ float4(fbSelect(bool2(true, false), float2(1.0, 2.0), float2(3.0, 4.0)), 10.0, 10.0);
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constantbuffer.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constantbuffer.frag
new file mode 100644
index 00000000000..c2b3a00ca99
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constantbuffer.frag
@@ -0,0 +1,26 @@
+
+struct c1_t {
+ float4 x;
+};
+
+struct c2_t {
+ bool x;
+ float y;
+};
+
+ConstantBuffer<c1_t> cb1 : register(b12);
+ConstantBuffer<c2_t> cb2[3];
+ConstantBuffer<c2_t> cb3[2][4];
+
+cbuffer cbuff {
+ int c1;
+};
+
+float4 main() : SV_Target0
+{
+ if (cb3[1][2].x)
+ return cb1.x + cb2[1].y + c1;
+ else
+ return cb3[1][3].y;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructArray.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructArray.vert
new file mode 100644
index 00000000000..52c4b6f0c92
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructArray.vert
@@ -0,0 +1,10 @@
+float4 main() : SV_POSITION
+{
+ int4 int4_array[3];
+ float4 float4_array_times[2] = (float4[2])int4_array;
+ float2 float2_array_times2[4] = (float2[4])int4_array;
+ int4 int4_array2[2] = (int4[2])int4_array;
+ int int1_array[2] = (int[2])int4_array;
+
+ return (float4)0.0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructimat.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructimat.frag
new file mode 100644
index 00000000000..f320ba152b8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.constructimat.frag
@@ -0,0 +1,52 @@
+int main() : SV_TARGET
+{
+ // integer mat constructors
+ const int4x4 var441 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
+ const int4x4 var442 = int4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
+ int4x4 var443 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
+ int4x4 var444 = int4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
+
+ const int4x2 var421 = { 0,1, 1,1, 1,0, 0,0 };
+ const int4x2 var422 = int4x2( 0,1, 1,1, 1,0, 0,0 );
+ int4x2 var423 = { 0,1, 1,1, 1,0, 0,0 };
+ int4x2 var424 = int4x2( 0,1, 1,1, 1,0, 0,0 );
+
+ const int3x2 var321 = { 0,1, 1,1, 1,0 };
+ const int3x2 var322 = int3x2( 0,1, 1,1, 1,0 );
+ int3x2 var323 = { 0,1, 1,1, 1,0 };
+ int3x2 var234 = int3x2( 0,1, 1,1, 1,0);
+
+ // unsigned integer mat constructors
+ const uint4x4 uvar441 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
+ const uint4x4 uvar442 = uint4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
+ uint4x4 uvar443 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
+ uint4x4 uvar444 = uint4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
+
+ const uint4x2 uvar421 = { 0,1, 1,1, 1,0, 0,0 };
+ const uint4x2 uvar422 = uint4x2( 0,1, 1,1, 1,0, 0,0 );
+ uint4x2 uvar423 = { 0,1, 1,1, 1,0, 0,0 };
+ uint4x2 uvar424 = uint4x2( 0,1, 1,1, 1,0, 0,0 );
+
+ const uint3x2 uvar321 = { 0,1, 1,1, 1,0 };
+ const uint3x2 uvar322 = uint3x2( 0,1, 1,1, 1,0 );
+ uint3x2 uvar323 = { 0,1, 1,1, 1,0 };
+ uint3x2 uvar234 = uint3x2( 0,1, 1,1, 1,0);
+
+ // boolean mat constructors
+ const bool4x4 bvar441 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
+ const bool4x4 bvar442 = bool4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
+ bool4x4 bvar443 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
+ bool4x4 bvar444 = bool4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
+
+ const bool4x2 bvar421 = { 0,1, 1,1, 1,0, 0,0 };
+ const bool4x2 bvar422 = bool4x2( 0,1, 1,1, 1,0, 0,0 );
+ bool4x2 bvar423 = { 0,1, 1,1, 1,0, 0,0 };
+ bool4x2 bvar424 = bool4x2( 0,1, 1,1, 1,0, 0,0 );
+
+ const bool3x2 bvar321 = { 0,1, 1,1, 1,0 };
+ const bool3x2 bvar322 = bool3x2( 0,1, 1,1, 1,0 );
+ bool3x2 bvar323 = { 0,1, 1,1, 1,0 };
+ bool3x2 bvar234 = bool3x2( 0,1, 1,1, 1,0);
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.dashI.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.dashI.vert
new file mode 100644
index 00000000000..a432be51e96
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.dashI.vert
@@ -0,0 +1,13 @@
+// For -Iinc1/path1 -Iinc1/path2
+// bar.h from local directory will define i1, while the ones from inc1/path1 and inc1/path2 will not.
+// notHere.h is only in inc1/path1 and inc2/path2, and only inc1/path1 defines p1, p2, and p3
+// parent.h is local again, and defines i4
+
+#include "bar.h"
+#include "notHere.h"
+#include "parent.h"
+
+float4 main() : SV_Position
+{
+ return i1 + i4 + p1 + p2 + p3;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.doLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.doLoop.frag
index 251a8c12063..0318dc8f39e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.doLoop.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.doLoop.frag
@@ -1,6 +1,9 @@
-float4 PixelShaderFunction(float4 input) : COLOR0
+float4 PixelShaderFunction(float input) : COLOR0
{
[unroll] do {} while (false);
[unroll] do {;} while (false);
- do { return input; } while (all(input == input));
+ do { return (float4)input; } while (input > 2.0);
+ do ++input; while (input < 10.0);
+ do while (++input < 10.0); while (++input < 10.0); // nest while inside do-while
+ return (float4)input;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.1.tese b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.1.tese
new file mode 100644
index 00000000000..7366e9bc6fd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.1.tese
@@ -0,0 +1,32 @@
+
+struct ds_in_t
+{
+ float4 pos : POSITION;
+ float3 norm : TEXCOORD0;
+};
+
+struct pcf_in_t
+{
+ float flTessFactor [3] : SV_TessFactor;
+ float flInsideTessFactor : SV_InsideTessFactor;
+};
+
+struct gs_in_t
+{
+ float4 pos : POSITION;
+ float3 norm : TEXCOORD0;
+};
+
+[domain ( "tri" )]
+gs_in_t main (const OutputPatch <ds_in_t, 3> i, float f : msem, float3 tesscoord : SV_DomainLocation, pcf_in_t pcf_data )
+{
+ gs_in_t o;
+
+ o.pos = i[0].pos + tesscoord.x * f;
+ o.norm = i[0].norm + tesscoord.y;
+
+ tesscoord.z;
+
+ return o;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.2.tese b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.2.tese
new file mode 100644
index 00000000000..ffb53f1f993
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.2.tese
@@ -0,0 +1,35 @@
+// This will test having the PCF input to the domain shader not be given at the end of
+// the argument list. We must move it to the end of the linkage in this case.
+
+struct ds_in_t
+{
+ float4 pos : POSITION;
+ float3 norm : TEXCOORD0;
+};
+
+struct pcf_in_t
+{
+ float flTessFactor [3] : SV_TessFactor;
+ float flInsideTessFactor : SV_InsideTessFactor;
+ float foo : PCF_FOO;
+};
+
+struct gs_in_t
+{
+ float4 pos : POSITION;
+ float3 norm : TEXCOORD0;
+};
+
+[domain ( "tri" )]
+gs_in_t main (pcf_in_t pcf_data, const OutputPatch <ds_in_t, 3> i, float3 tesscoord : SV_DomainLocation)
+{
+ gs_in_t o;
+
+ o.pos = i[0].pos + tesscoord.x;
+ o.norm = i[0].norm + tesscoord.y;
+
+ tesscoord.z;
+
+ return o;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.3.tese b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.3.tese
new file mode 100644
index 00000000000..aeceedacb95
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.domain.3.tese
@@ -0,0 +1,31 @@
+// Test vec2 tessellation coordinate: the IO form should be a vec3, copied to a vec2
+// at the entry point boundary.
+
+struct ds_in_t
+{
+ float4 pos : POSITION;
+ float3 norm : TEXCOORD0;
+};
+
+struct pcf_in_t
+{
+ float flTessFactor [3] : SV_TessFactor;
+ float flInsideTessFactor : SV_InsideTessFactor;
+};
+
+struct gs_in_t
+{
+ float4 pos : POSITION;
+ float3 norm : TEXCOORD0;
+};
+
+[domain ( "isoline" )]
+gs_in_t main (const OutputPatch <ds_in_t, 2> i, float2 tesscoord : SV_DomainLocation, pcf_in_t pcf_data )
+{
+ gs_in_t o;
+
+ o.pos = i[0].pos + tesscoord.x;
+ o.norm = i[0].norm + tesscoord.y;
+
+ return o;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystruct.init.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystruct.init.vert
new file mode 100644
index 00000000000..02050f8ba1b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.emptystruct.init.vert
@@ -0,0 +1,8 @@
+struct Test { };
+
+static const Test Test_Empty;
+
+float4 main(in uint vertexIndex : VERTEXID) : VS_OUT_POSITION
+{
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.explicitDescriptorSet.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.explicitDescriptorSet.frag
new file mode 100644
index 00000000000..1cff8d303f0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.explicitDescriptorSet.frag
@@ -0,0 +1,15 @@
+SamplerState g_sSamp : register(s1);
+
+Texture1D <float4> g_tTex1df4 : register(t0);
+
+SamplerState g_sSamp2_amb;
+uniform float floatval_amb;
+
+Buffer<float> floatbuff;
+
+float4 main() : SV_Target0
+{
+ g_sSamp2_amb;
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaque.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaque.frag
new file mode 100644
index 00000000000..279be8a0bd2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaque.frag
@@ -0,0 +1,40 @@
+struct os {
+ sampler2D s2D;
+};
+
+struct os2 {
+ sampler2D s2D;
+ Texture2D tex;
+};
+
+Texture2D tex;
+os s;
+os2 s2;
+
+float4 osCall1(os s)
+{
+ return tex.Sample(s.s2D, float2(0.2, 0.3));
+}
+
+float4 osCall2(os s, float2 f2)
+{
+ return tex.Sample(s.s2D, f2);
+}
+
+float4 os2Call1(os2 s)
+{
+ return s.tex.Sample(s.s2D, float2(0.2, 0.3));
+}
+
+float4 os2Call2(os2 s, float2 f2)
+{
+ return s.tex.Sample(s.s2D, f2);
+}
+
+float4 main() : SV_TARGET0
+{
+ return osCall1(s) +
+ osCall2(s, float2(0.2, 0.3)) +
+ os2Call1(s2) +
+ os2Call2(s2, float2(0.2, 0.3));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaqueInit.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaqueInit.vert
new file mode 100644
index 00000000000..bcf39ceb697
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaqueInit.vert
@@ -0,0 +1,23 @@
+struct FxaaTex { SamplerState smpl; Texture2D tex; };
+SamplerState g_tInputTexture_sampler; Texture2D g_tInputTexture;
+
+float4 lookUp(FxaaTex tex)
+{
+ return tex.tex.Sample(tex.smpl, float2(0.3, 0.4));
+}
+
+FxaaTex fillOpaque()
+{
+ FxaaTex t;
+ t.smpl = g_tInputTexture_sampler;
+ t.tex = g_tInputTexture;
+ return t;
+}
+
+float4 main() : SV_TARGET0
+{
+ FxaaTex tex1 = { g_tInputTexture_sampler, g_tInputTexture };
+ FxaaTex tex2 = fillOpaque();
+ FxaaTex tex3 = tex1;
+ return lookUp(tex3);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaqueInitMix.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaqueInitMix.vert
new file mode 100644
index 00000000000..2e712ee5bb4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenOpaqueInitMix.vert
@@ -0,0 +1,13 @@
+struct FxaaTex { SamplerState smpl; Texture2D tex; float f; };
+SamplerState g_tInputTexture_sampler; Texture2D g_tInputTexture;
+
+float4 lookUp(FxaaTex tex)
+{
+ return tex.tex.Sample(tex.smpl, float2(tex.f, tex.f));
+}
+
+float4 main() : SV_TARGET0
+{
+ FxaaTex tex = { g_tInputTexture_sampler, g_tInputTexture, 0.5 };
+ return lookUp(tex);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenSubset.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenSubset.frag
new file mode 100644
index 00000000000..c80e093c8b0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenSubset.frag
@@ -0,0 +1,36 @@
+struct S0
+{
+ int x;
+ int y;
+ SamplerState ss;
+};
+
+struct S1
+{
+ float b;
+ SamplerState samplerState;
+ S0 s0;
+ int a;
+};
+
+struct S2
+{
+ int a1;
+ int a2;
+ int a3;
+ int a4;
+ int a5;
+ S1 resources;
+};
+
+SamplerState samp;
+Texture2D tex;
+
+float4 main(float4 vpos : VPOS) : COLOR0
+{
+ S1 s1;
+ S2 s2;
+ s1.s0.ss = samp;
+ s2.resources = s1;
+ return tex.Sample(s2.resources.s0.ss, float2(0.5));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenSubset2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenSubset2.frag
new file mode 100644
index 00000000000..753475dc1f0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.flattenSubset2.frag
@@ -0,0 +1,24 @@
+struct Nested { float y; Texture2D texNested; };
+struct A { Nested n; float x; };
+struct B { Nested n; Texture2D tex; };
+
+Texture2D someTex;
+
+float4 main(float4 vpos : VPOS) : COLOR0
+{
+ A a1, a2;
+ B b;
+
+ // Assignment of nested structs to nested structs
+ a1.n = a2.n;
+ b .n = a1.n;
+
+ // Assignment of nested struct to standalone
+ Nested n = b.n;
+
+ // Assignment to nestested struct members
+ a2.n.texNested = someTex;
+ a1.n.y = 1.0;
+
+ return float4(0,0,0,0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.forLoop.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.forLoop.frag
index 937899670da..9cf60ee4600 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.forLoop.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.forLoop.frag
@@ -5,9 +5,13 @@ float4 PixelShaderFunction(float4 input) : COLOR0
[unroll] for (; any(input != input); ) {}
for (; any(input != input); ) { return -input; }
for (--input; any(input != input); input += 2) { return -input; }
- for (;;) if (input.x > 2.0) break;
- for (;;) if (input.x > 2.0) continue;
- float ii;
- for (int ii = -1; ii < 3; ++ii) if (ii == 2) continue;
- --ii;
+ for (;;) if (input.x > 2.0) break;
+ for (;;) if (input.x > 2.0) continue;
+ float ii;
+ for (int ii = -1; ii < 3; ++ii) if (ii == 2) continue;
+ --ii;
+ for (int first = 0, second = 1; ;) first + second;
+ for ( int i = 0, count = int(ii); i < count; i++ );
+ for (float first = 0, second[2], third; first < second[0]; ++second[1]) first + second[1] + third;
+ for (--ii, --ii, --ii;;) ii;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.fraggeom.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.fraggeom.frag
new file mode 100644
index 00000000000..5592e857a6b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.fraggeom.frag
@@ -0,0 +1,17 @@
+// test geometry shader in fragment shader. GS attributes should be successfully ignored.
+
+struct myVertex {
+ float4 pos : SV_Position;
+};
+
+[maxvertexcount(1)]
+void GS_Draw(point myVertex IN, inout PointStream<myVertex> OutputStream)
+{
+ OutputStream.Append(IN);
+ OutputStream.RestartStrip();
+}
+
+float4 main() : SV_TARGET
+{
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.function.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.function.frag
new file mode 100644
index 00000000000..5834b319642
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.function.frag
@@ -0,0 +1,25 @@
+float4 fun0()
+{
+ return 1.0f;
+}
+
+uint fun2(float4 col)
+{
+ return 7;
+}
+
+float4 fun4(uint id1, uniform uint id2)
+{
+ return id1 * id2;
+}
+
+float4 fun1(int index)
+{
+ uint entityId = fun2(fun0());
+ return fun4(entityId, entityId);
+}
+
+int main() : SV_TARGET
+{
+ return fun1;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.array.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.array.dx10.frag
index 4ed7f4b4cd1..b6310acb647 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.array.dx10.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.array.dx10.frag
@@ -29,6 +29,10 @@ PS_OUTPUT main()
// no 1D gathers
+ float4 txval80 = g_tTex2df4a . GatherCmp(g_sSampCmp, c3, .75);
+ int4 txval81 = g_tTex2di4a . GatherCmp(g_sSampCmp, c3, .75);
+ uint4 txval82 = g_tTex2du4a . GatherCmp(g_sSampCmp, c3, .75);
+
float4 txval00 = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, .75);
int4 txval01 = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, .75);
uint4 txval02 = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, .75);
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.basic.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.basic.dx10.frag
index 9dc163150ad..94ef576dd0f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.basic.dx10.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.basic.dx10.frag
@@ -51,6 +51,10 @@ PS_OUTPUT main()
int4 txval31 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75);
uint4 txval32 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75);
+ float4 txval80 = g_tTex2df4 . GatherCmp(g_sSampCmp, c2, 0.75);
+ int4 txval81 = g_tTex2di4 . GatherCmp(g_sSampCmp, c2, 0.75);
+ uint4 txval82 = g_tTex2du4 . GatherCmp(g_sSampCmp, c2, 0.75);
+
// no 3D gathers
float4 txval40 = g_tTexcdf4 . GatherCmpRed(g_sSampCmp, c3, 0.75);
@@ -69,6 +73,10 @@ PS_OUTPUT main()
int4 txval71 = g_tTexcdi4 . GatherCmpAlpha(g_sSampCmp, c3, 0.75);
uint4 txval72 = g_tTexcdu4 . GatherCmpAlpha(g_sSampCmp, c3, 0.75);
+ float4 txval90 = g_tTexcdf4 . GatherCmp(g_sSampCmp, c3, 0.75);
+ int4 txval91 = g_tTexcdi4 . GatherCmp(g_sSampCmp, c3, 0.75);
+ uint4 txval92 = g_tTexcdu4 . GatherCmp(g_sSampCmp, c3, 0.75);
+
psout.Color = 1.0;
psout.Depth = 1.0;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offset.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offset.dx10.frag
index 18e3a37e093..7287fe48e66 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offset.dx10.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offset.dx10.frag
@@ -50,13 +50,9 @@ PS_OUTPUT main()
int4 txval014 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,-1), int2(1,-1), int2(1,-1), int2(1,-1));
uint4 txval024 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,1), int2(1,1), int2(1,1), int2(1,1));
- // float4 txval00s = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), status);
- // int4 txval01s = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), status);
- // uint4 txval02s = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), status);
-
- // float4 txval004s = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
- // int4 txval014s = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
- // uint4 txval024s = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+ float4 txval401 = g_tTex2df4 . GatherCmp(g_sSampCmp, c2, 0.75, int2(1,0));
+ int4 txval411 = g_tTex2di4 . GatherCmp(g_sSampCmp, c2, 0.75, int2(1,-1));
+ uint4 txval421 = g_tTex2du4 . GatherCmp(g_sSampCmp, c2, 0.75, int2(1,1));
// GatherCmpGreen not implemented pending OpImageDrefGather component input
// float4 txval101 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0));
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag
index 11131bcb7bb..7f381bb1e7d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag
@@ -36,6 +36,10 @@ PS_OUTPUT main()
// no 1D gathers
+ float4 txval401 = g_tTex2df4a . GatherCmp(g_sSampCmp, c3, 0.75, o2);
+ int4 txval411 = g_tTex2di4a . GatherCmp(g_sSampCmp, c3, 0.75, o2);
+ uint4 txval421 = g_tTex2du4a . GatherCmp(g_sSampCmp, c3, 0.75, o2);
+
float4 txval001 = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2);
int4 txval011 = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2);
uint4 txval021 = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2);
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getsampleposition.dx10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getsampleposition.dx10.frag
index a7a93b3784a..a1182fb6b0f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getsampleposition.dx10.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.getsampleposition.dx10.frag
@@ -9,12 +9,12 @@ struct PS_OUTPUT
float Depth : SV_Depth;
};
-PS_OUTPUT main()
+PS_OUTPUT main(int sample : SAMPLE)
{
PS_OUTPUT psout;
- float2 r00 = g_tTex2dmsf4.GetSamplePosition(1);
- float2 r01 = g_tTex2dmsf4a.GetSamplePosition(2);
+ float2 r00 = g_tTex2dmsf4.GetSamplePosition(sample);
+ float2 r01 = g_tTex2dmsf4a.GetSamplePosition(sample);
psout.Color = 1.0;
psout.Depth = 1.0;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.global-const-init.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.global-const-init.frag
new file mode 100644
index 00000000000..d8f36c9664f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.global-const-init.frag
@@ -0,0 +1,14 @@
+
+cbuffer CB {
+ float4 foo;
+};
+
+static const float4 bar = foo; // test const (in the immutable sense) initializer from non-const.
+
+static const float2 a1[2] = { { 1, 2 }, { foo.x, 4 } }; // not entirely constant
+static const float2 a2[2] = { { 5, 6 }, { 7, 8 } }; // entirely constant
+
+float4 main() : SV_Target0
+{
+ return bar;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gs-hs-mix.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gs-hs-mix.tesc
new file mode 100644
index 00000000000..451969611ec
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.gs-hs-mix.tesc
@@ -0,0 +1,119 @@
+cbuffer UniformBlock0 : register(b0)
+{
+ float4x4 model_view_matrix;
+ float4x4 proj_matrix;
+ float4x4 model_view_proj_matrix;
+ float3x3 normal_matrix;
+ float3 color;
+ float3 view_dir;
+ float3 tess_factor;
+};
+
+// =============================================================================
+// Hull Shader
+// =============================================================================
+struct HSInput {
+ float3 PositionWS : POSITION;
+ float3 NormalWS : NORMAL;
+};
+
+struct HSOutput {
+ float3 PositionWS : POSITION;
+};
+
+struct HSTrianglePatchConstant {
+ float EdgeTessFactor[3] : SV_TessFactor;
+ float InsideTessFactor : SV_InsideTessFactor;
+ float3 NormalWS[3] : NORMAL;
+};
+
+HSTrianglePatchConstant HSPatchConstant(InputPatch<HSInput, 3> patch)
+{
+ float3 roundedEdgeTessFactor = tess_factor;
+ float roundedInsideTessFactor = 3;
+ float insideTessFactor = 1;
+
+ HSTrianglePatchConstant result;
+
+ // Edge and inside tessellation factors
+ result.EdgeTessFactor[0] = roundedEdgeTessFactor.x;
+ result.EdgeTessFactor[1] = roundedEdgeTessFactor.y;
+ result.EdgeTessFactor[2] = roundedEdgeTessFactor.z;
+ result.InsideTessFactor = roundedInsideTessFactor;
+
+ // Constant data
+ result.NormalWS[0] = patch[0].NormalWS;
+ result.NormalWS[1] = patch[1].NormalWS;
+ result.NormalWS[2] = patch[2].NormalWS;
+
+ return result;
+}
+
+[domain("tri")]
+[partitioning("fractional_odd")]
+[outputtopology("triangle_ccw")]
+[outputcontrolpoints(3)]
+[patchconstantfunc("HSPatchConstant")]
+HSOutput HSMain(
+ InputPatch<HSInput, 3> patch,
+ uint id : SV_OutputControlPointID
+)
+{
+ HSOutput output;
+ output.PositionWS = patch[id].PositionWS;
+ return output;
+}
+
+// =============================================================================
+// Geometry Shader
+// =============================================================================
+struct GSVertexInput {
+ float3 PositionWS : POSITION;
+ float3 NormalWS : NORMAL;
+};
+
+struct GSVertexOutput {
+ float4 PositionCS : SV_POSITION;
+};
+
+[maxvertexcount(6)]
+void GSMain(
+ triangle GSVertexInput input[3],
+ inout LineStream<GSVertexOutput> output
+)
+{
+
+ float3 P0 = input[0].PositionWS.xyz;
+ float3 P1 = input[1].PositionWS.xyz;
+ float3 P2 = input[2].PositionWS.xyz;
+
+ GSVertexOutput vertex;
+ // Totally hacky...
+ P0.z += 0.001;
+ P1.z += 0.001;
+ P2.z += 0.001;
+ float4 Q0 = mul(proj_matrix, float4(P0, 1.0));
+ float4 Q1 = mul(proj_matrix, float4(P1, 1.0));
+ float4 Q2 = mul(proj_matrix, float4(P2, 1.0));
+
+ // Edge 0
+ vertex.PositionCS = Q0;
+ output.Append(vertex);
+ vertex.PositionCS = Q1;
+ output.Append(vertex);
+ output.RestartStrip();
+
+ // Edge 1
+ vertex.PositionCS = Q1;
+ output.Append(vertex);
+ vertex.PositionCS = Q2;
+ output.Append(vertex);
+ output.RestartStrip();
+
+ // Edge 2
+ vertex.PositionCS = Q2;
+ output.Append(vertex);
+ vertex.PositionCS = Q0;
+ output.Append(vertex);
+ output.RestartStrip();
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hlslOffset.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hlslOffset.vert
new file mode 100644
index 00000000000..aa95f6a344e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hlslOffset.vert
@@ -0,0 +1,20 @@
+cbuffer b {
+ float m0;
+ float3 m4;
+ //////
+ float m16;
+ float3 m20 : packoffset(c1.y);
+ /////
+ float3 m36 : packoffset(c2.y);
+ /////
+ float2 m56 : packoffset(c3.z);
+ /////
+ float m64;
+ float2 m68;
+ float m76;
+ //////
+ float m80;
+ float2 m96[1];
+};
+
+void main() {}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.3.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.3.tesc
new file mode 100644
index 00000000000..8509dca1e3a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.3.tesc
@@ -0,0 +1,39 @@
+// ***
+// invocation ID coming from synthesized variable
+// ***
+
+struct VS_OUT
+{
+ float3 cpoint : CPOINT;
+};
+
+struct HS_CONSTANT_OUT
+{
+ float edges[2] : SV_TessFactor;
+};
+
+struct HS_OUT
+{
+ float3 cpoint : CPOINT;
+};
+
+[domain("tri")]
+[partitioning("integer")]
+[outputtopology("point")]
+[outputcontrolpoints(4)]
+[patchconstantfunc("PCF")]
+HS_OUT main(InputPatch<VS_OUT, 4> ip)
+{
+ HS_OUT output;
+ output.cpoint = ip[0].cpoint;
+ return output;
+}
+
+HS_CONSTANT_OUT PCF(uint pid : SV_PrimitiveId, float4 pos : SV_Position)
+{
+ HS_CONSTANT_OUT output;
+
+ output.edges[0] = 2.0f;
+ output.edges[1] = 8.0f;
+ return output;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.4.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.4.tesc
new file mode 100644
index 00000000000..cd2b094436e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.4.tesc
@@ -0,0 +1,43 @@
+
+// Test mixed InputPatch structure: user and builtin members. Hull shaders involve extra
+// logic in this case due to patch constant function call synthesis.
+
+// This example tests the main EP and the PCF EP both having an input patch.
+
+struct HS_Main_Output
+{
+ float4 m_Position : SV_POSITION ;
+};
+
+struct HS_Output
+{
+ float fTessFactor [ 3 ] : SV_TessFactor ;
+ float fInsideTessFactor : SV_InsideTessFactor ;
+};
+
+struct HS_Input
+{
+ float4 m_Position : SV_POSITION;
+ float4 m_Normal : TEXCOORD2;
+};
+
+HS_Output HS_ConstFunc ( InputPatch < HS_Input , 3 > I )
+{
+ HS_Output O = (HS_Output)0;
+
+ O.fInsideTessFactor = I [ 0 ].m_Position.w + I [ 0 ].m_Normal.w;
+
+ return O;
+}
+
+[ domain ( "tri" ) ]
+[ partitioning ( "fractional_odd" ) ]
+[ outputtopology ( "triangle_cw" ) ]
+[ patchconstantfunc ( "HS_ConstFunc" ) ]
+[ outputcontrolpoints ( 3 ) ]
+HS_Main_Output main( InputPatch < HS_Input , 3 > I , uint cpid : SV_OutputControlPointID )
+{
+ HS_Main_Output output = ( HS_Main_Output ) 0 ;
+ output.m_Position = 0;
+ return output ;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.5.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.5.tesc
new file mode 100644
index 00000000000..c9e511ebf42
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.5.tesc
@@ -0,0 +1,43 @@
+
+// Test mixed InputPatch structure: user and builtin members. Hull shaders involve extra
+// logic in this case due to patch constant function call synthesis.
+
+// This example tests the PCF EP having an InputPatch, but the main EP does not.
+
+struct HS_Main_Output
+{
+ float4 m_Position : SV_POSITION ;
+};
+
+struct HS_Output
+{
+ float fTessFactor [ 3 ] : SV_TessFactor ;
+ float fInsideTessFactor : SV_InsideTessFactor ;
+};
+
+struct HS_Input
+{
+ float4 m_Position : SV_POSITION;
+ float4 m_Normal : TEXCOORD2;
+};
+
+HS_Output HS_ConstFunc ( InputPatch < HS_Input , 3 > I )
+{
+ HS_Output O = (HS_Output)0;
+
+ O.fInsideTessFactor = I [ 0 ].m_Position.w + I [ 0 ].m_Normal.w;
+
+ return O;
+}
+
+[ domain ( "tri" ) ]
+[ partitioning ( "fractional_odd" ) ]
+[ outputtopology ( "triangle_cw" ) ]
+[ patchconstantfunc ( "HS_ConstFunc" ) ]
+[ outputcontrolpoints ( 3 ) ]
+HS_Main_Output main( uint cpid : SV_OutputControlPointID )
+{
+ HS_Main_Output output = ( HS_Main_Output ) 0 ;
+ output.m_Position = 0;
+ return output ;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.ctrlpt-1.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.ctrlpt-1.tesc
new file mode 100644
index 00000000000..3e329f253bd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.ctrlpt-1.tesc
@@ -0,0 +1,43 @@
+// ***
+// per-control-point invocation of PCF from entry point return value
+// ***
+
+struct hs_in_t
+{
+ float3 val : TEXCOORD0;
+};
+
+struct hs_pcf_t
+{
+ float tfactor[3] : SV_TessFactor; // must turn into a size 4 array in SPIR-V
+ float flInFactor : SV_InsideTessFactor; // must turn into a size 2 array in SPIR-V
+};
+
+struct hs_out_t
+{
+ float3 val : TEXCOORD0;
+};
+
+[ domain ("tri") ]
+[ partitioning ("fractional_odd") ]
+[ outputtopology ("triangle_cw") ]
+[ outputcontrolpoints (3) ]
+[ patchconstantfunc ( "PCF" ) ]
+hs_out_t main (InputPatch <hs_in_t, 3> i , uint cpid : SV_OutputControlPointID)
+{
+ hs_out_t o;
+ o.val = cpid;
+ return o;
+}
+
+hs_pcf_t PCF( const OutputPatch <hs_out_t, 3> pcf_out)
+{
+ hs_pcf_t o;
+
+ o.tfactor[0] = pcf_out[0].val.x;
+ o.tfactor[1] = pcf_out[1].val.x;
+ o.tfactor[2] = pcf_out[2].val.x;
+ o.flInFactor = 4;
+
+ return o;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.ctrlpt-2.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.ctrlpt-2.tesc
new file mode 100644
index 00000000000..1f65ce4b1e5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.ctrlpt-2.tesc
@@ -0,0 +1,47 @@
+// ***
+// per-control-point invocation of PCF from entry point return value with
+// both OutputPatch and InputPatch given to PCF.
+// ***
+
+struct hs_in_t
+{
+ float3 val : TEXCOORD0;
+};
+
+struct hs_pcf_t
+{
+ float tfactor[3] : SV_TessFactor; // must turn into a size 4 array in SPIR-V
+ float flInFactor : SV_InsideTessFactor; // must turn into a size 2 array in SPIR-V
+};
+
+struct hs_out_t
+{
+ float3 val : TEXCOORD0;
+};
+
+[ domain ("tri") ]
+[ partitioning ("fractional_odd") ]
+[ outputtopology ("triangle_cw") ]
+[ outputcontrolpoints (3) ]
+[ patchconstantfunc ( "PCF" ) ]
+hs_out_t main (InputPatch <hs_in_t, 3> i , uint cpid : SV_OutputControlPointID)
+{
+ i[0].val;
+
+ hs_out_t o;
+ o.val = cpid;
+ return o;
+}
+
+hs_pcf_t PCF( const OutputPatch <hs_out_t, 3> pcf_out,
+ const InputPatch <hs_in_t, 3> pcf_in)
+{
+ hs_pcf_t o;
+
+ o.tfactor[0] = pcf_out[0].val.x;
+ o.tfactor[1] = pcf_out[1].val.x;
+ o.tfactor[2] = pcf_out[2].val.x;
+ o.flInFactor = 4;
+
+ return o;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.void.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.void.tesc
index 971d613bf78..c96ecb4312f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.void.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.hull.void.tesc
@@ -19,7 +19,7 @@ struct HS_OUT
[domain("tri")]
[partitioning("fractional_even")]
-[outputtopology("line")]
+[outputtopology("triangle_ccw")]
[outputcontrolpoints(3)]
[patchconstantfunc("PCF")]
HS_OUT main(InputPatch<VS_OUT, 3> ip)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.implicitBool.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.implicitBool.frag
new file mode 100644
index 00000000000..c6aea9d1eaa
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.implicitBool.frag
@@ -0,0 +1,32 @@
+float condf;
+int condi;
+float1 condf1;
+int1 condi1;
+
+float4 main() : SV_Target0
+{
+ float4 a = float4(2.0, 2.0, 2.0, 2.0);
+ if (condi)
+ return a + 1.0;
+ if (condf)
+ return a + 2.0;
+ if (condf1)
+ return a + 3.0;
+ if (condi1)
+ return a + 4.0;
+ if (condi && condf || condf1)
+ return a + 5.0;
+
+ float f = condf;
+ while (f) { --f; }
+
+ int i = condi;
+ do { --i; } while (i);
+
+ for (; i; ) { --i; }
+
+ float g = condf ? 7.0 : 8.0;
+ a += g;
+
+ return a - 1.0;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.include.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.include.vert
new file mode 100644
index 00000000000..683398e5272
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.include.vert
@@ -0,0 +1,8 @@
+#include "bar.h"
+#include "./inc1/bar.h"
+#include "inc2\bar.h"
+
+float4 main() : SV_Position
+{
+ return i1 + i2 + i3 + i4 + i5 + i6;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.includeNegative.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.includeNegative.vert
new file mode 100644
index 00000000000..64d31fab996
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.includeNegative.vert
@@ -0,0 +1,8 @@
+#include "foo.h"
+#include "inc2/../foo.h"
+#include "inc1/badInc.h"
+
+float4 main() : SV_Position
+{
+#error in main
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inf.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inf.vert
new file mode 100644
index 00000000000..d57b83793b2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inf.vert
@@ -0,0 +1,11 @@
+float4 main() : SV_Position
+{
+ float f1 = -1.#INF;
+ float f2 = 1.#INF;
+ float f3 = +1.#INF;
+ float f4 = f2 * 1.#INF + 1.#INF;
+ const float f5 = -1.#INF;
+ const float f6 = f5 * 0.0f;
+
+ return (float4)(f1 + f2 + f3 + f4 + f5 + f6);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inoutquals.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inoutquals.frag
index 9328dfbe7e0..6a124f8dd06 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inoutquals.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.inoutquals.frag
@@ -4,11 +4,12 @@ struct PS_OUTPUT
float Depth : SV_Depth;
};
-inline void MyFunc(in float x, out float y, inout float z)
+inline void MyFunc(in float x, out float y, inout float z, in out float w)
{
y = x;
z = y;
x = -1; // no effect since x = in param
+ w *= 1;
}
PS_OUTPUT main(noperspective in float4 inpos : SV_Position, out int sampleMask : SV_Coverage)
@@ -16,7 +17,7 @@ PS_OUTPUT main(noperspective in float4 inpos : SV_Position, out int sampleMask :
PS_OUTPUT psout;
float x = 7, y, z = 3;
- MyFunc(x, y, z);
+ MyFunc(x, y, z, inpos.w);
psout.Color = float4(x, y, z, 1);
psout.Depth = inpos.w;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsic.frexp.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsic.frexp.frag
new file mode 100644
index 00000000000..fde87c9daa3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsic.frexp.frag
@@ -0,0 +1,37 @@
+
+float PixelShaderFunctionS(float inF0, float inF1)
+{
+ float r000 = frexp(inF0, inF1);
+ return 0.0;
+}
+
+float2 PixelShaderFunction2(float2 inF0, float2 inF1)
+{
+ float2 r000 = frexp(inF0, inF1);
+ return float2(1,2);
+}
+
+float3 PixelShaderFunction3(float3 inF0, float3 inF1)
+{
+ float3 r000 = frexp(inF0, inF1);
+ return float3(1,2,3);
+}
+
+float4 PixelShaderFunction(float4 inF0, float4 inF1)
+{
+ float4 r000 = frexp(inF0, inF1);
+ return float4(1,2,3,4);
+}
+
+// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
+#define MATFNS(MT) \
+ MT r000 = frexp(inF0, inF1);
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+ PS_OUTPUT ps_output;
+ ps_output.color = 1.0;
+ return ps_output;
+};
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsic.frexp.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsic.frexp.vert
new file mode 100644
index 00000000000..f0fd5e00151
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsic.frexp.vert
@@ -0,0 +1,28 @@
+float VertexShaderFunctionS(float inF0, float inF1)
+{
+ frexp(inF0, inF1);
+ return 0.0;
+}
+
+float2 VertexShaderFunction2(float2 inF0, float2 inF1)
+{
+ frexp(inF0, inF1);
+ return float2(1,2);
+}
+
+float3 VertexShaderFunction3(float3 inF0, float3 inF1)
+{
+ frexp(inF0, inF1);
+ return float3(1,2,3);
+}
+
+float4 VertexShaderFunction4(float4 inF0, float4 inF1)
+{
+ frexp(inF0, inF1);
+ return float4(1,2,3,4);
+}
+
+// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
+#define MATFNS() \
+ frexp(inF0, inF1);
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.frag
index 15db6376ca1..9343f6d8cfe 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.frag
@@ -31,6 +31,7 @@ float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint i
float r011 = ceil(inF0);
float r012 = clamp(inF0, inF1, inF2);
clip(inF0);
+ clip(r005);
float r014 = cos(inF0);
float r015 = cosh(inF0);
int r016 = countbits(7);
@@ -52,7 +53,6 @@ float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint i
// TODO: fma(inD0, inD1, inD2);
float r033 = fmod(inF0, inF1);
float r034 = frac(inF0);
- float r035 = frexp(inF0, inF1);
float r036 = fwidth(inF0);
bool r037 = isinf(inF0);
bool r038 = isnan(inF0);
@@ -109,6 +109,7 @@ float2 PixelShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, u
float2 r011 = ceil(inF0);
float2 r012 = clamp(inF0, inF1, inF2);
clip(inF0);
+ clip(inU0);
float2 r013 = cos(inF0);
float2 r015 = cosh(inF0);
int2 r016 = countbits(int2(7,3));
@@ -136,7 +137,6 @@ float2 PixelShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, u
// TODO: fma(inD0, inD1, inD2);
float2 r035 = fmod(inF0, inF1);
float2 r036 = frac(inF0);
- float2 r037 = frexp(inF0, inF1);
float2 r038 = fwidth(inF0);
bool2 r039 = isinf(inF0);
bool2 r040 = isnan(inF0);
@@ -192,6 +192,7 @@ float3 PixelShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, u
float3 r011 = ceil(inF0);
float3 r012 = clamp(inF0, inF1, inF2);
clip(inF0);
+ clip(inU0);
float3 r013 = cos(inF0);
float3 r014 = cosh(inF0);
uint3 r015 = countbits(uint3(7,3,5));
@@ -217,7 +218,6 @@ float3 PixelShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, u
// TODO: fma(inD0, inD1, inD2);
float3 r036 = fmod(inF0, inF1);
float3 r037 = frac(inF0);
- float3 r038 = frexp(inF0, inF1);
float3 r039 = fwidth(inF0);
bool3 r040 = isinf(inF0);
bool3 r041 = isnan(inF0);
@@ -274,6 +274,7 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, ui
float4 r011 = ceil(inF0);
float4 r012 = clamp(inF0, inF1, inF2);
clip(inF0);
+ clip(inU0);
float4 r013 = cos(inF0);
float4 r014 = cosh(inF0);
uint4 r015 = countbits(uint4(7,3,5,2));
@@ -299,7 +300,6 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, ui
// TODO: fma(inD0, inD1, inD2);
float4 r036 = fmod(inF0, inF1);
float4 r037 = frac(inF0);
- float4 r038 = frexp(inF0, inF1);
float4 r039 = fwidth(inF0);
bool4 r040 = isinf(inF0);
bool4 r041 = isnan(inF0);
@@ -369,7 +369,6 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, ui
MT r021 = floor(inF0); \
MT r022 = fmod(inF0, inF1); \
MT r023 = frac(inF0); \
- MT r024 = frexp(inF0, inF1); \
MT r025 = fwidth(inF0); \
MT r026 = ldexp(inF0, inF1); \
MT r026a = lerp(inF0, inF1, inF2); \
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.vert
index de9476cbd09..c442f16a500 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.vert
@@ -28,7 +28,6 @@ float VertexShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint
// TODO: fma(inD0, inD1, inD2);
fmod(inF0, inF1);
frac(inF0);
- frexp(inF0, inF1);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@@ -99,7 +98,6 @@ float2 VertexShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0,
// TODO: fma(inD0, inD1, inD2);
fmod(inF0, inF1);
frac(inF0);
- frexp(inF0, inF1);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@@ -170,7 +168,6 @@ float3 VertexShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0,
// TODO: fma(inD0, inD1, inD2);
fmod(inF0, inF1);
frac(inF0);
- frexp(inF0, inF1);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@@ -241,7 +238,6 @@ float4 VertexShaderFunction4(float4 inF0, float4 inF1, float4 inF2, uint4 inU0,
// TODO: fma(inD0, inD1, inD2);
fmod(inF0, inF1);
frac(inF0);
- frexp(inF0, inF1);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@@ -305,7 +301,6 @@ float4 VertexShaderFunction4(float4 inF0, float4 inF1, float4 inF2, uint4 inU0,
floor(inF0); \
fmod(inF0, inF1); \
frac(inF0); \
- frexp(inF0, inF1); \
ldexp(inF0, inF1); \
lerp(inF0, inF1, inF2); \
log(inF0); \
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.isfinite.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.isfinite.frag
new file mode 100644
index 00000000000..6e40f6a8e3d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.isfinite.frag
@@ -0,0 +1,18 @@
+
+uniform float f;
+uniform float2 f2;
+uniform float3 f3;
+
+bool test1(float v)
+{
+ return !isnan(v) && isfinite(v);
+}
+
+float4 main() : SV_Target0
+{
+ isfinite(f);
+ isfinite(f2);
+ isfinite(f3);
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.localStructuredBuffer.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.localStructuredBuffer.comp
new file mode 100644
index 00000000000..34e06e001e1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.localStructuredBuffer.comp
@@ -0,0 +1,4 @@
+RWStructuredBuffer<uint> srt0;
+void main() {
+ RWStructuredBuffer<uint> srt0Local = srt0;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logicalConvert.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logicalConvert.frag
new file mode 100644
index 00000000000..b353eb1eed6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.logicalConvert.frag
@@ -0,0 +1,23 @@
+float4 main() : SV_TARGET
+{
+ if (!(0) && (0) || (!1))
+ return 0.0.xxxx;
+ if (0)
+ return 0.0.xxxx;
+ if (!(bool)0)
+ return 0.0.xxxx;
+ if (!0)
+ return 0.0.xxxx;
+ if (!(bool)1)
+ return 0.0.xxxx;
+ if (!1)
+ return 0.0.xxxx;
+ if (0 || 1)
+ return 0.0.xxxx;
+ if (1 && 0)
+ return 0.0.xxxx;
+ if (1 || false)
+ return 0.0.xxxx;
+ if (true && 1)
+ return 0.0.xxxx;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.loopattr.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.loopattr.frag
new file mode 100644
index 00000000000..5b4d374f5f1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.loopattr.frag
@@ -0,0 +1,14 @@
+
+float4 main() : SV_Target0
+{
+ // Unroll hint
+ [unroll(5) ] for (int x=0; x<5; ++x);
+
+ // Don't unroll hint
+ [loop] for (int y=0; y<5; ++y);
+
+ // No hint
+ for (int z=0; z<5; ++z);
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matpack-1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matpack-1.frag
new file mode 100644
index 00000000000..5d02a3e4645
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matpack-1.frag
@@ -0,0 +1,27 @@
+struct MyBuffer1
+{
+ column_major float4x4 mat1;
+ row_major float4x4 mat2;
+ float4 vec1;
+ float foo;
+};
+
+struct MyBuffer2
+{
+ row_major float4x4 mat1;
+ float4 vec1;
+};
+
+cbuffer Example
+{
+ MyBuffer1 g_MyBuffer1;
+ MyBuffer2 g_MyBuffer2;
+ column_major float4x4 mat1a;
+};
+
+float4 main() : SV_Target0
+{
+ return mul(g_MyBuffer1.mat1, g_MyBuffer1.vec1) +
+ mul(g_MyBuffer2.mat1, g_MyBuffer2.vec1);
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matpack-pragma.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matpack-pragma.frag
new file mode 100644
index 00000000000..a9a283354f6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.matpack-pragma.frag
@@ -0,0 +1,33 @@
+#pragma pack_matrix(row_major)
+
+struct MyBuffer1
+{
+ column_major float4x4 mat1;
+ row_major float4x4 mat2;
+ /*floating*/ float4x4 mat3;
+};
+
+#pragma pack_matrix(column_major)
+
+struct MyBuffer2
+{
+ column_major float4x4 mat1;
+ row_major float4x4 mat2;
+ /*floating*/ float4x4 mat3;
+};
+
+#pragma pack_matrix(random_string_foo)
+
+cbuffer Example
+{
+ MyBuffer1 g_MyBuffer1;
+ MyBuffer2 g_MyBuffer2;
+ column_major float4x4 mat1a;
+};
+
+float4 main() : SV_Target0
+{
+ return
+ g_MyBuffer1.mat1[0] + g_MyBuffer1.mat2[0] + g_MyBuffer1.mat3[0] +
+ g_MyBuffer2.mat1[0] + g_MyBuffer2.mat2[0] + g_MyBuffer2.mat3[0];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.memberFunCall.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.memberFunCall.frag
new file mode 100644
index 00000000000..27d3f6e0177
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.memberFunCall.frag
@@ -0,0 +1,16 @@
+float method3(float a) { return 1.0; }
+
+struct myContext {
+ float method1() { return method2(); }
+ float method2() { return method3(1.0); }
+ float method3(float a) { return method4(a, a); }
+ float method4(float a, float b) { return a + b + f; }
+ float f;
+};
+
+float4 main() : SV_TARGET0
+{
+ myContext context;
+ context.f = 3.0;
+ return (float4)context.method1();
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.negative.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.negative.frag
new file mode 100644
index 00000000000..900d385063a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.negative.frag
@@ -0,0 +1,9 @@
+Texture2D g_tTex2df4;
+
+float4 main() : SV_Target0
+{
+ g_tTex2df4.mips.mips[2][uint2(3, 4)]; // error to chain like this
+
+ return 0;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.negative2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.negative2.frag
new file mode 100644
index 00000000000..c07179eb28d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.negative2.frag
@@ -0,0 +1,9 @@
+Texture2D g_tTex2df4;
+
+float4 main() : SV_Target0
+{
+ g_tTex2df4.r[2][uint2(3, 4)]; // '.r' not valid on texture object
+
+ return 0;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.operator.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.operator.frag
new file mode 100644
index 00000000000..af4f150136e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.mip.operator.frag
@@ -0,0 +1,14 @@
+Texture2DArray g_tTex2df4a;
+Texture2D g_tTex2df4;
+
+float4 main() : SV_Target0
+{
+ return g_tTex2df4.mips[2][uint2(3, 4)] +
+
+ // test float->uint cast on the mip arg
+ g_tTex2df4a.mips[5.2][uint3(6, 7, 8)] +
+
+ // Test nesting involving .mips operators:
+ // ....outer operator mip level...... .....outer operator coordinate....
+ g_tTex2df4.mips[ g_tTex2df4.mips[9][uint2(10,11)][0] ][ g_tTex2df4.mips[13][uint2(14,15)].xy ];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiDescriptorSet.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiDescriptorSet.frag
new file mode 100644
index 00000000000..6c4be21ef3a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.multiDescriptorSet.frag
@@ -0,0 +1,45 @@
+Texture2D txDiffuseA : register( t0 );
+Texture2D txDiffuseB : register( t1 );
+
+SamplerState samLinearA : register( s0 );
+SamplerState samLinearB : register( s1 );
+
+cbuffer cbNeverChanges : register( b0 )
+{
+ matrix View;
+};
+
+cbuffer cbChangeOnResize : register( b1 )
+{
+ matrix Projection;
+};
+
+cbuffer cbChangesEveryFrame : register( b2 )
+{
+ matrix World;
+ float4 vMeshColor;
+};
+
+
+struct VS_INPUT
+{
+ float4 Pos : POSITION;
+ float2 Tex : TEXCOORD0;
+};
+
+struct PS_INPUT
+{
+ float4 Pos : SV_POSITION;
+ float2 Tex : TEXCOORD0;
+};
+
+
+float4 main( PS_INPUT input) : SV_Target
+{
+ PS_INPUT output = (PS_INPUT)0;
+ output.Pos = mul( input.Pos, World );
+ output.Pos = mul( output.Pos, View );
+ output.Pos = mul( output.Pos, Projection );
+ output.Tex = input.Tex;
+ return txDiffuseA.Sample( samLinearA, output.Tex ) * vMeshColor;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.namespace.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.namespace.frag
new file mode 100644
index 00000000000..76c3062d6a1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.namespace.frag
@@ -0,0 +1,23 @@
+static float4 v1;
+static float4 v2;
+
+namespace N1 {
+ float4 getVec() { return v1; }
+}
+
+namespace N2 {
+ static float gf;
+ float4 getVec() { return v2; }
+ namespace N3 {
+ float4 getVec() { return v2; }
+
+ class C1 {
+ float4 getVec() { return v2; }
+ };
+ }
+}
+
+float4 main() : SV_Target0
+{
+ return N1::getVec() + N2::getVec() + N2::N3::getVec() + N2::N3::C1::getVec() * N2::gf;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.nonint-index.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.nonint-index.frag
new file mode 100644
index 00000000000..c7a751e306a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.nonint-index.frag
@@ -0,0 +1,9 @@
+static const float array[3] = { 1, 2, 3 };
+
+float main(float input : IN) : SV_Target0
+{
+ // non-integer indexes get converted to uints:
+ // uint(input) 3.0 2.0 1.0
+ return array[input] + array[2.0] + array[true] + array[false];
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.opaque-type-bug.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.opaque-type-bug.frag
new file mode 100644
index 00000000000..f4ccaea2907
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.opaque-type-bug.frag
@@ -0,0 +1,16 @@
+
+Texture2D MyTexture : register(t0);
+
+//----------------------------------------------------------------------------------------
+void TexFunc(in const Texture2D t2D, out float3 RGB)
+{
+ RGB = 0;
+}
+
+//-----------------------------------------------------------------------------------
+void main()
+{
+ float3 final_RGB;
+
+ TexFunc(MyTexture, final_RGB);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialFlattenLocal.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialFlattenLocal.vert
new file mode 100644
index 00000000000..9d6cdc900c8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialFlattenLocal.vert
@@ -0,0 +1,27 @@
+Texture2D tex;
+
+struct Packed {
+ Texture2D tex;
+ float3 pos[3];
+ float2 uv[2];
+ float x;
+ int n;
+};
+
+float4 main(float4 pos : POSITION) : SV_POSITION
+{
+ Packed packed;
+ packed.tex = tex;
+ packed.pos[0] = float3(0, 0, 0);
+ packed.uv[0] = float2(0, 1);
+ packed.x = 1.0;
+ packed.n = 3;
+
+ for (int i = 0; i < 1; ++i) {
+ packed.pos[i].xy += packed.uv[i];
+ }
+
+ Packed packed2 = packed;
+
+ return pos + float4(packed2.pos[0], 0);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialFlattenMixed.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialFlattenMixed.vert
new file mode 100644
index 00000000000..3fc9d68e23d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.partialFlattenMixed.vert
@@ -0,0 +1,16 @@
+Texture2D tex[2];
+
+struct Packed {
+ int a;
+ Texture2D membTex[2];
+ int b;
+};
+
+float4 main(float4 pos : POSITION) : SV_POSITION
+{
+ Packed packed;
+
+ packed.membTex = tex;
+
+ return pos;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.vert
new file mode 100644
index 00000000000..4b0a451239b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.vert
@@ -0,0 +1,17 @@
+#define A defined(B)
+
+#if A
+int badGlobal1;
+#else
+int goodGlobal1;
+#endif
+
+#define B
+
+#if A
+int goodGlobal2;
+#else
+int badGlobal2;
+#endif
+
+void main() {}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.preprocessor.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.preprocessor.frag
new file mode 100644
index 00000000000..dba341efdd5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.preprocessor.frag
@@ -0,0 +1,13 @@
+#define DEFINE_TEXTURE(name) Texture2D name; SamplerState name##_ss;
+#define SAMPLE_TEXTURE(name, uv) name.Sample(name##_ss, (uv).xy)
+
+#define test_texture2 test_texture
+
+DEFINE_TEXTURE(test_texture)
+
+float4 main(float4 input : TEXCOORD0) : SV_TARGET
+{
+ float4 tex = SAMPLE_TEXTURE(test_texture2, input.xy);
+ return tex;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.vert
index 21cc81092e9..06207c74f89 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.reflection.vert
@@ -19,27 +19,10 @@ cbuffer c_nameless {
float4 c_anonMember3;
};
-cbuffer named {
- float3 deadMember1;
- int scalar;
- float4 member2;
- float4 member3;
- float2 memfloat2;
- float memf1;
- bool memf2;
- int memf3;
- float2 memfloat2a;
- float2x2 m22[7];
-} ablock;
-
cbuffer namelessdead {
int a;
};
-cbuffer namedDead {
- int b;
-} bblock;
-
struct N1 {
float a;
};
@@ -57,7 +40,7 @@ struct N3 {
cbuffer nested {
N3 foo;
-} nest;
+}
struct TS {
int a;
@@ -89,16 +72,12 @@ struct deep3 {
int3 v3;
};
-
-
-
uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2];
const bool control = true;
void deadFunction()
{
- float3 v3 = ablock.deadMember1;
float4 v = anonDeadMember2;
float f = ufDead4;
}
@@ -110,12 +89,12 @@ void liveFunction2()
}
tbuffer abl {
- float foo;
-} arrBl;
+ float foo1;
+}
tbuffer abl2 {
- float foo;
-} arrBl2;
+ float foo2;
+}
void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attributeFloat3, in float4 attributeFloat4, in float4x4 attributeMat4)
{
@@ -130,22 +109,16 @@ void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attribu
liveFunction2();
f = anonMember3.z;
f = s.a;
- f = ablock.scalar;
f = m23[1].y + scalarAfterm23;
f = c_m23[1].y + c_scalarAfterm23;
f += scalarBeforeArray;
f += floatArray[2];
f += floatArray[4];
f += scalarAfterArray;
- f += ablock.memfloat2.x;
- f += ablock.memf1;
- f += float(ablock.memf2);
- f += ablock.memf3;
- f += ablock.memfloat2a.y;
- f += ablock.m22[i][1][0];
+ f += m22[i][1][0];
f += dm22[3][0][1];
f += m22[2][1].y;
- f += nest.foo.n1.a + nest.foo.n2.b + nest.foo.n2.c + nest.foo.n2.d;
+ f += foo.n1.a + foo.n2.b + foo.n2.c + foo.n2.d;
f += deepA[i].d2.d1[2].va[1].x;
f += deepB[1].d2.d1[i].va[1].x;
f += deepB[i].d2.d1[i].va[1].x;
@@ -154,8 +127,8 @@ void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attribu
} else
f = ufDead3;
- f += arrBl.foo + arrBl.foo;
- f += arrBl2.foo;
+ f += foo1 + foo2;
+ f += foo2;
f += attributeFloat;
f += attributeFloat2.x;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.dualmode.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.dualmode.frag
new file mode 100644
index 00000000000..5b600f3b6e6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.dualmode.frag
@@ -0,0 +1,14 @@
+SamplerState g_sSamp : register(s0);
+SamplerComparisonState g_sSampCmp : register(s1);
+
+uniform Texture1D <float4> g_tTex : register(t3);
+
+float4 main() : SV_Target0
+{
+ // This texture is used with both shadow modes. It will need post-compilation
+ // legalization.
+ g_tTex.SampleCmp(g_sSampCmp, 0.1, 0.75);
+ g_tTex.Sample(g_sSamp, 0.1);
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.negative.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.negative.frag
new file mode 100644
index 00000000000..8851982129b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.negative.frag
@@ -0,0 +1,13 @@
+
+Texture2D g_nonShadowTex;
+Texture2D g_shadowTex;
+SamplerState g_shadowSampler;
+SamplerComparisonState g_shadowSamplerComp;
+
+float4 main() : SV_Target0
+{
+ g_shadowTex.SampleCmp(g_shadowSamplerComp, float2(0,0), 0); // OK
+ g_nonShadowTex.SampleCmp(g_shadowSampler, float2(0,0), 0); // ERROR (should be comparison sampler)
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.negative2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.negative2.frag
new file mode 100644
index 00000000000..33a2133ab0e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.samplecmp.negative2.frag
@@ -0,0 +1,10 @@
+
+Texture2D g_shadowTex;
+SamplerState g_shadowSampler;
+
+float4 main() : SV_Target0
+{
+ g_shadowTex.GatherCmpRed(g_shadowSampler, float2(0,0), 0, int2(0,0)); // ERROR (should be comparison sampler)
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalar-length.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalar-length.frag
new file mode 100644
index 00000000000..2b7ebdb92d1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalar-length.frag
@@ -0,0 +1,6 @@
+float4 main() : SV_Target0
+{
+ float4 test = { 0, 1, 2, 3 };
+
+ return length(test.a);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalar2matrix.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalar2matrix.frag
new file mode 100644
index 00000000000..406887574bd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalar2matrix.frag
@@ -0,0 +1,28 @@
+
+void Fn1(float4x4 p) { }
+
+float4 main() : SV_TARGET
+{
+ const float4x4 mat1c = 0.20;
+ const float4x4 mat2c = {2, 2.1, 2.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ const float4x4 mat3c = (float4x4)float1(0.1);
+
+ float4x4 mat1 = 0.25;
+ float4x4 mat2 = {3, 3.1, 3.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ float4x4 mat3 = (float4x4)0.375;
+ // float4x4 mat5 = (float4x4)Fn2(); // TODO: enable when compex rvalue handling is in place
+
+ float4x4 mat4;
+ mat4 = 0.75;
+ mat4 = float4x4(4, 4.1, 4.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ mat4 = (float4x4)0.5;
+
+ mat4 *= 0.75;
+ mat4 += 0.75;
+ mat4 -= 0.5;
+ mat4 /= 2.0;
+
+ Fn1(5.0); // test calling fn accepting matrix with scalar type
+
+ return mat1c[0] + mat3c[0] + mat1[1] + mat4[2];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalarCast.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalarCast.vert
new file mode 100644
index 00000000000..83bfd6eb20b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.scalarCast.vert
@@ -0,0 +1,37 @@
+struct VertexOut {
+ float4 position : SV_Position;
+ float2 texCoord : TEXCOORD;
+};
+VertexOut r0() {
+ const float f = 2.0;
+ return (VertexOut)f;
+}
+VertexOut r1() {
+ const float f = 2.0;
+ return (VertexOut)(f + 1.0);
+}
+VertexOut r2() {
+ const float f = 2.0;
+ return (VertexOut)(sin(f));
+}
+VertexOut r3() {
+ float f = 2.0;
+ return (VertexOut)f;
+}
+VertexOut r4() {
+ float f = 2.0;
+ return (VertexOut)(f + 1.0);
+}
+VertexOut r5() {
+ float f = 2.0;
+ return (VertexOut)(sin(f));
+}
+VertexOut main() {
+ VertexOut v0 = r0();
+ VertexOut v1 = r1();
+ VertexOut v2 = r2();
+ VertexOut v3 = r3();
+ VertexOut v4 = r4();
+ VertexOut v5 = r5();
+ return (VertexOut)1;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic-1.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic-1.vert
new file mode 100644
index 00000000000..ec92428caf6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic-1.vert
@@ -0,0 +1,24 @@
+#define DLAYER 3
+
+#define DMACRO1 TEXCOORD1
+#define DMACRO(num) TEXCOORD##num
+
+struct S {
+ float4 pos : POSITION;
+ float2 UV0 : TEXCOORD0;
+ float2 UV1 : DMACRO1;
+ float2 UV2 : DMACRO(2);
+ float2 UV3 : DMACRO(DLAYER);
+};
+
+
+S main(float4 v : POSITION)
+{
+ S s;
+ s.pos = v;
+ s.UV0 = float2(v.x,v.x);
+ s.UV1 = float2(v.y,v.y);
+ s.UV2 = float2(v.z,v.z);
+ s.UV3 = float2(v.w,v.w);
+ return s;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.geom
index c4d7abad7e7..fc6a53ab4ca 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.geom
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.geom
@@ -1,4 +1,5 @@
struct S {
+ float clip0 : SV_Position;
float clip0 : SV_ClipDistance0;
float cull0 : SV_CullDistance0;
uint vpai : SV_ViewportArrayIndex;
@@ -7,9 +8,9 @@ struct S {
};
[maxvertexcount(4)]
-S main(triangle in uint VertexID[3] : VertexID,
+void main(triangle in uint VertexID[3] : VertexID,
inout LineStream<S> OutputStream)
{
S s;
- return s;
+ OutputStream.Append(s);
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.vert
index 16bba37f9a0..1845dc3c728 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.semantic.vert
@@ -1,10 +1,8 @@
struct S {
- float clip : SV_ClipDistance;
float clip0 : SV_ClipDistance0;
- float clip7 : SV_ClipDistance7;
- float cull : SV_CullDistance;
- float cull2 : SV_CullDistance2;
- float cull5 : SV_CullDistance5;
+ float clip1 : SV_ClipDistance1;
+ float cull0 : SV_CullDistance0;
+ float cull1 : SV_CullDistance1;
int ii : SV_InstanceID;
};
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConv.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConv.frag
index adb170eab35..bc09d80a350 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConv.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shapeConv.frag
@@ -28,5 +28,22 @@ float4 PixelShaderFunction(float4 input, float f) : COLOR0
f1.x;
f1.xxx;
- return input;
+ const float4 f4 = 3.0;
+
+ uint ui;
+ uint3 ui3;
+
+ ui >> ui3;
+ ui3 >> ui;
+
+ v *= f1;
+ f1 *= v;
+
+ float3 mixed = u * v;
+ f = u;
+ f1 = u;
+ float sf = v;
+ float1 sf1 = v;
+
+ return input * f4;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shift.per-set.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shift.per-set.frag
new file mode 100644
index 00000000000..9c29f9d96cc
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.shift.per-set.frag
@@ -0,0 +1,59 @@
+// Test register class offsets for different resource types
+
+SamplerState s1 : register(s1, space1);
+SamplerComparisonState s2 : register(s2, space2);
+
+Texture1D <float4> t1 : register(t1, space1);
+Texture2D <float4> t2 : register(t2, space1);
+Texture3D <float4> t3 : register(t1, space2);
+
+StructuredBuffer<float4> t4 : register(t1, space3);
+
+ByteAddressBuffer t5 : register(t2, space3);
+Buffer<float4> t6 : register(t3, space3);
+
+RWTexture1D <float4> u1 : register(u1, space1);
+RWTexture2D <float4> u2 : register(u2, space2);
+RWTexture3D <float4> u3 : register(u3, space2);
+
+RWBuffer <float> u4 : register(u4, space1);
+RWByteAddressBuffer u5 : register(u4, space2);
+RWStructuredBuffer<float> u6 : register(u4, space3);
+AppendStructuredBuffer<float> u7 : register(u4, space4);
+ConsumeStructuredBuffer<float> u8 : register(u4, space5);
+
+cbuffer cb : register(b1, space6) {
+ int cb1;
+};
+
+tbuffer tb : register(t7) {
+ int tb1;
+};
+
+float4 main() : SV_Target0
+{
+ t1;
+ t2;
+ t3;
+ t4[0];
+ t5.Load(0);
+ t6;
+
+ s1;
+ s2;
+
+ u1;
+ u2;
+ u3;
+
+ u4[0];
+ u5.Load(0);
+ u6[0];
+ u7;
+ u8;
+
+ cb1;
+ tb1;
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.snorm.uav.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.snorm.uav.comp
new file mode 100644
index 00000000000..c6cafebeb97
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.snorm.uav.comp
@@ -0,0 +1,15 @@
+
+unorm float4 uf4;
+
+Texture3D<unorm float4> ResultInU: register(t0);
+RWTexture3D<unorm float4> ResultOutU: register(u0);
+
+Texture3D<snorm float4> ResultInS: register(t1);
+RWTexture3D<snorm float4> ResultOutS: register(u1);
+
+[numthreads(16, 16, 1)]
+void main(uint3 tid: SV_DispatchThreadID)
+{
+ ResultOutS[tid] = ResultInS[tid] + uf4;
+ ResultOutU[tid] = ResultInU[tid];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.assign.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.assign.frag
index e7fe028870c..d9921f30e6e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.assign.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.assign.frag
@@ -8,5 +8,5 @@ float4 main(int i, S input[3]) : COLOR0
S a[3];
input = a;
- return float3(1.0);
+ return a[1].pos;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.nested.geom b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.nested.geom
index 03bf38f3e28..8bcc5b994ab 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.nested.geom
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.struct.split.nested.geom
@@ -1,8 +1,8 @@
struct STRUCT_WITH_NO_BUILTIN_INTERSTAGE_IO
{
- float m0_array[2];
- int m1;
+ float m0_array[2] : mysemA;
+ int m1 : mysemB;
};
struct PS_IN
@@ -26,6 +26,9 @@ void main(triangle PS_IN tin[3], inout TriangleStream <GS_OUT> ts )
o.psIn.pos = float4(1,2,3,4);
o.psIn.tc = float2(5,6);
+ o.contains_no_builtin_io.m0_array[0] = 2.3;
+ o.contains_no_builtin_io.m0_array[1] = 2.3;
+ o.contains_no_builtin_io.m1 = 2;
ts.Append(o);
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.append.fn.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.append.fn.frag
new file mode 100644
index 00000000000..668bc1e8eaa
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.append.fn.frag
@@ -0,0 +1,23 @@
+
+// float4 Fn1(ConsumeStructuredBuffer<float4> arg_c)
+// {
+// return arg_c.Consume();
+// }
+
+float4 Fn2(AppendStructuredBuffer<float4> arg_a, ConsumeStructuredBuffer<float4> arg_c)
+{
+ arg_a.Append(float4(1,2,3,4));
+ return arg_c.Consume();
+}
+
+AppendStructuredBuffer<float4> sbuf_a;
+ConsumeStructuredBuffer<float4> sbuf_c;
+
+AppendStructuredBuffer<float4> sbuf_unused;
+
+float4 main(uint pos : FOO) : SV_Target0
+{
+ // Fn1(sbuf_c);
+
+ return Fn2(sbuf_a, sbuf_c);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.append.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.append.frag
new file mode 100644
index 00000000000..4c4bc3fc56d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.append.frag
@@ -0,0 +1,11 @@
+AppendStructuredBuffer<float4> sbuf_a;
+ConsumeStructuredBuffer<float4> sbuf_c;
+
+AppendStructuredBuffer<float4> sbuf_unused;
+
+float4 main(uint pos : FOO) : SV_Target0
+{
+ sbuf_a.Append(float4(1,2,3,4));
+
+ return sbuf_c.Consume();
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.floatidx.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.floatidx.comp
new file mode 100644
index 00000000000..0ddf0c21c4c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.floatidx.comp
@@ -0,0 +1,19 @@
+struct sb_t
+{
+ float4 color;
+ uint2 threadId;
+};
+
+RWTexture2D<float4> outtx;
+ConsumeStructuredBuffer<sb_t> csb : register(u1);
+RWStructuredBuffer<float4> rwsb;
+
+[numthreads(1, 1, 1)]
+void main(uint3 nThreadId : SV_DispatchThreadID)
+{
+ sb_t data = csb.Consume();
+ float2 coord = float2(data.threadId.xy);
+ outtx[coord] = data.color;
+
+ rwsb[coord.x] = rwsb.Load(coord.y);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.fn2.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.fn2.comp
new file mode 100644
index 00000000000..e651e91939a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.fn2.comp
@@ -0,0 +1,15 @@
+ByteAddressBuffer g_input: register(t0);
+RWBuffer<uint2> g_output : register(u1);
+
+uint2 testLoad(uint loc, ByteAddressBuffer buffer)
+{
+ uint2 result = buffer.Load2(loc);
+ return result;
+}
+
+[numthreads(256, 1, 1)]
+void main(uint dispatchId : SV_DispatchThreadID)
+{
+ uint2 result = testLoad(dispatchId, g_input);
+ g_output[dispatchId] = result;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.incdec.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.incdec.frag
new file mode 100644
index 00000000000..108dcb61030
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structbuffer.incdec.frag
@@ -0,0 +1,19 @@
+RWStructuredBuffer<uint4> sbuf_rw_i;
+RWStructuredBuffer<uint4> sbuf_rw_d;
+
+RWStructuredBuffer<uint4> sbuf_rw_nocounter; // doesn't use inc or dec
+
+float4 main(uint pos : FOO) : SV_Target0
+{
+ uint4 result = 0;
+
+ sbuf_rw_i[7];
+ sbuf_rw_d[7];
+
+ sbuf_rw_nocounter[5] = 2;
+
+ uint c1 = sbuf_rw_i.IncrementCounter();
+ uint c2 = sbuf_rw_d.DecrementCounter();
+
+ return float4(result.x, result.y, c1, c2);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structin.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structin.vert
index 43d0cfd0bbd..20a26dd9eb9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structin.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.structin.vert
@@ -1,14 +1,17 @@
struct VI {
- float4 m[2];
- uint2 coord;
- linear float4 b;
+ float4 m[2] : mysemA;
+ float4 coord : SV_POSITION;
+ linear float4 b : mysemB;
};
-VI main(float4 d, VI vi, float4 e) : SV_POSITION
+VI main(float4 d : mysem, VI vi, float4 e : mysem)
{
VI local;
- local.b = vi.m[1] + vi.m[0] + float4(vi.coord.x) + d + e;
+ local.b = vi.m[1] + vi.m[0] + (float4)vi.coord.x + d + e;
+ local.coord = (float4)1;
+ local.m[0] = (float4)2;
+ local.m[1] = (float4)3;
return local;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.subpass.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.subpass.frag
new file mode 100644
index 00000000000..20a717f8fc4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.subpass.frag
@@ -0,0 +1,113 @@
+
+layout(input_attachment_index = 1) SubpassInput<float4> subpass_f4 : register(t1);
+layout(input_attachment_index = 2) SubpassInput<int4> subpass_i4;
+layout(input_attachment_index = 3) SubpassInput<uint4> subpass_u4;
+
+layout(input_attachment_index = 4) SubpassInputMS<float4> subpass_ms_f4;
+layout(input_attachment_index = 5) SubpassInputMS<int4> subpass_ms_i4;
+layout(input_attachment_index = 6) SubpassInputMS<uint4> subpass_ms_u4;
+
+layout(input_attachment_index = 1) SubpassInput<float3> subpass_f3;
+layout(input_attachment_index = 2) SubpassInput<int3> subpass_i3;
+layout(input_attachment_index = 3) SubpassInput<uint3> subpass_u3;
+
+layout(input_attachment_index = 4) SubpassInputMS<float3> subpass_ms_f3;
+layout(input_attachment_index = 5) SubpassInputMS<int3> subpass_ms_i3;
+layout(input_attachment_index = 6) SubpassInputMS<uint3> subpass_ms_u3;
+
+layout(input_attachment_index = 1) SubpassInput<float2> subpass_f2;
+layout(input_attachment_index = 2) SubpassInput<int2> subpass_i2;
+layout(input_attachment_index = 3) SubpassInput<uint2> subpass_u2;
+
+layout(input_attachment_index = 4) SubpassInputMS<float2> subpass_ms_f2;
+layout(input_attachment_index = 5) SubpassInputMS<int2> subpass_ms_i2;
+layout(input_attachment_index = 6) SubpassInputMS<uint2> subpass_ms_u2;
+
+layout(input_attachment_index = 1) SubpassInput<float> subpass_f;
+layout(input_attachment_index = 2) SubpassInput<int> subpass_i;
+layout(input_attachment_index = 3) SubpassInput<uint> subpass_u;
+
+layout(input_attachment_index = 4) SubpassInputMS<float> subpass_ms_f;
+layout(input_attachment_index = 5) SubpassInputMS<int> subpass_ms_i;
+layout(input_attachment_index = 6) SubpassInputMS<uint> subpass_ms_u;
+
+[[vk::input_attachment_index(7)]] SubpassInput subpass_2;
+
+struct mystruct_f_t
+{
+ float c0;
+ float2 c1;
+ float c2;
+};
+
+struct mystruct_i_t
+{
+ int c0;
+ int2 c1;
+ int c2;
+};
+
+struct mystruct_u_t
+{
+ uint c0;
+ uint2 c1;
+ uint c2;
+};
+
+// TODO: ...
+// layout(input_attachment_index = 7) SubpassInput<mystruct_f_t> subpass_fs;
+// layout(input_attachment_index = 8) SubpassInputMS<mystruct_f_t> subpass_ms_fs;
+
+// layout(input_attachment_index = 7) SubpassInput<mystruct_i_t> subpass_is;
+// layout(input_attachment_index = 8) SubpassInputMS<mystruct_i_t> subpass_ms_is;
+
+// layout(input_attachment_index = 7) SubpassInput<mystruct_u_t> subpass_us;
+// layout(input_attachment_index = 8) SubpassInputMS<mystruct_u_t> subpass_ms_us;
+
+float4 main() : SV_Target0
+{
+ float4 result00 = subpass_f4.SubpassLoad();
+ int4 result01 = subpass_i4.SubpassLoad();
+ uint4 result02 = subpass_u4.SubpassLoad();
+
+ float4 result10 = subpass_ms_f4.SubpassLoad(3);
+ int4 result11 = subpass_ms_i4.SubpassLoad(3);
+ uint4 result12 = subpass_ms_u4.SubpassLoad(3);
+
+ float3 result20 = subpass_f3.SubpassLoad();
+ int3 result21 = subpass_i3.SubpassLoad();
+ uint3 result22 = subpass_u3.SubpassLoad();
+
+ float3 result30 = subpass_ms_f3.SubpassLoad(3);
+ int3 result31 = subpass_ms_i3.SubpassLoad(3);
+ uint3 result32 = subpass_ms_u3.SubpassLoad(3);
+
+ float2 result40 = subpass_f2.SubpassLoad();
+ int2 result41 = subpass_i2.SubpassLoad();
+ uint2 result42 = subpass_u2.SubpassLoad();
+
+ float2 result50 = subpass_ms_f2.SubpassLoad(2);
+ int2 result51 = subpass_ms_i2.SubpassLoad(2);
+ uint2 result52 = subpass_ms_u2.SubpassLoad(2);
+
+ float result60 = subpass_f.SubpassLoad();
+ int result61 = subpass_i.SubpassLoad();
+ uint result62 = subpass_u.SubpassLoad();
+
+ float result70 = subpass_ms_f.SubpassLoad(2);
+ int result71 = subpass_ms_i.SubpassLoad(2);
+ uint result72 = subpass_ms_u.SubpassLoad(2);
+
+ float4 result73 = subpass_2.SubpassLoad();
+
+ // TODO:
+ // mystruct_f_t result80 = subpass_fs.SubpassLoad();
+ // mystruct_i_t result81 = subpass_is.SubpassLoad();
+ // mystruct_u_t result82 = subpass_us.SubpassLoad();
+
+ // mystruct_f_t result90 = subpass_ms_sf.SubpassLoad(2);
+ // mystruct_i_t result91 = subpass_ms_if.SubpassLoad(2);
+ // mystruct_u_t result92 = subpass_ms_uf.SubpassLoad(2);
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.switch.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.switch.frag
index 88239c2bec9..78ebfef343d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.switch.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.switch.frag
@@ -18,7 +18,7 @@ float4 PixelShaderFunction(float4 input, int c, int d) : COLOR0
break;
}
- switch (c) {
+ [branch] switch (c) {
case 1:
++input;
break;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.synthesizeInput.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.synthesizeInput.frag
new file mode 100644
index 00000000000..c4b2fa4c82b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.synthesizeInput.frag
@@ -0,0 +1,9 @@
+struct PSInput {
+ float interp;
+ uint no_interp;
+};
+
+float4 main(PSInput input : INPUT) : SV_TARGET
+{
+ return float4(float(input.no_interp), input.interp, 0, 1);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.target.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.target.frag
new file mode 100644
index 00000000000..5317236a04c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.target.frag
@@ -0,0 +1,10 @@
+struct PSInput {
+ float interp;
+ uint no_interp;
+};
+
+void main(PSInput input : INPUT, out float4 out1 : SV_TARGET1, out float4 out2 : SV_TARGET3)
+{
+ out1 = 1;
+ out2 = 0;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.targetStruct1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.targetStruct1.frag
new file mode 100644
index 00000000000..7fcc0827d30
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.targetStruct1.frag
@@ -0,0 +1,19 @@
+struct PSInput {
+ float interp;
+ uint no_interp;
+};
+
+struct PSOutput {
+ float4 o1 : SV_TARGET2;
+ float4 o2 : SV_TARGET1;
+};
+
+PSOutput main(PSInput input : INPUT, out float4 po : SV_TARGET0)
+{
+ PSOutput pso;
+ pso.o1 = float4(float(input.no_interp), input.interp, 0, 1);
+ pso.o2 = 1;
+ po = 0;
+
+ return pso;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.targetStruct2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.targetStruct2.frag
new file mode 100644
index 00000000000..e62ba0f6e2d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.targetStruct2.frag
@@ -0,0 +1,19 @@
+struct PSInput {
+ float interp;
+ uint no_interp;
+};
+
+struct PSOutput {
+ float4 o1 : SV_TARGET1;
+ float4 o2 : SV_TARGET0;
+};
+
+PSOutput main(PSInput input : INPUT, out float4 po : SV_TARGET0) : SV_TARGET2
+{
+ PSOutput pso;
+ pso.o1 = float4(float(input.no_interp), input.interp, 0, 1);
+ pso.o2 = 1;
+ po = 0;
+
+ return pso;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texture.struct.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texture.struct.frag
new file mode 100644
index 00000000000..461469cd484
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texture.struct.frag
@@ -0,0 +1,55 @@
+struct s1_t {
+ float c0;
+ float2 c1;
+ float c2;
+};
+
+struct s2_t {
+ float c0;
+ float3 c1;
+};
+
+struct s3_t {
+ float2 c0;
+ float1 c1;
+};
+
+struct s4_t {
+ int c0;
+ int2 c1;
+ int c2;
+};
+
+struct s5_t {
+ uint c0;
+ uint c1;
+};
+
+SamplerState g_sSamp;
+Texture2D <s1_t> g_tTex2s1;
+Texture2D <s2_t> g_tTex2s2;
+Texture2D <s3_t> g_tTex2s3;
+Texture2D <s4_t> g_tTex2s4;
+Texture2D <s5_t> g_tTex2s5;
+
+Texture2D <s1_t> g_tTex2s1a; // same type as g_tTex2s1, to test fn signature matching.
+
+// function overloading to test name mangling with textures templatized on structs
+s1_t fn1(Texture2D <s1_t> t1) { return t1 . Sample(g_sSamp, float2(0.6, 0.61)); }
+s2_t fn1(Texture2D <s2_t> t2) { return t2 . Sample(g_sSamp, float2(0.6, 0.61)); }
+
+float4 main() : SV_Target0
+{
+ s1_t s1 = g_tTex2s1 . Sample(g_sSamp, float2(0.1, 0.11));
+ s2_t s2 = g_tTex2s2 . Sample(g_sSamp, float2(0.2, 0.21));
+ s3_t s3 = g_tTex2s3 . Sample(g_sSamp, float2(0.3, 0.31));
+ s4_t s4 = g_tTex2s4 . Sample(g_sSamp, float2(0.4, 0.41));
+ s5_t s5 = g_tTex2s5 . Sample(g_sSamp, float2(0.5, 0.51));
+
+ s1_t r0 = fn1(g_tTex2s1);
+ s2_t r1 = fn1(g_tTex2s2);
+ s1_t r2 = fn1(g_tTex2s1a);
+
+ return 0;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texture.subvec4.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texture.subvec4.frag
new file mode 100644
index 00000000000..56fd4106ce9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texture.subvec4.frag
@@ -0,0 +1,41 @@
+
+Texture2DMS <float> g_tTex2dmsf1;
+Texture2DMS <float2> g_tTex2dmsf2;
+Texture2DMS <float3> g_tTex2dmsf3;
+Texture2DMS <float4> g_tTex2dmsf4;
+
+Texture2D <float> g_tTex2df1;
+Texture2D <float2> g_tTex2df2;
+Texture2D <float3> g_tTex2df3;
+Texture2D <float4> g_tTex2df4;
+
+SamplerState g_sSamp;
+
+float4 main() : SV_Target0
+{
+ uint MipLevel;
+ uint WidthU;
+ uint HeightU;
+ uint ElementsU;
+ uint DepthU;
+ uint NumberOfLevelsU;
+ uint NumberOfSamplesU;
+
+ g_tTex2dmsf1 . GetDimensions(WidthU, HeightU, NumberOfSamplesU);
+ g_tTex2dmsf2 . GetDimensions(WidthU, HeightU, NumberOfSamplesU);
+ g_tTex2dmsf3 . GetDimensions(WidthU, HeightU, NumberOfSamplesU);
+ g_tTex2dmsf4 . GetDimensions(WidthU, HeightU, NumberOfSamplesU);
+
+ g_tTex2dmsf1 . Load(int2(1,2), 3);
+ g_tTex2dmsf2 . Load(int2(1,2), 3);
+ g_tTex2dmsf3 . Load(int2(1,2), 3);
+ g_tTex2dmsf4 . Load(int2(1,2), 3);
+
+ g_tTex2df1 . Sample(g_sSamp, float2(.1, .2));
+ g_tTex2df2 . Sample(g_sSamp, float2(.1, .2));
+ g_tTex2df3 . Sample(g_sSamp, float2(.1, .2));
+ g_tTex2df4 . Sample(g_sSamp, float2(.1, .2));
+
+ return 0;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texturebuffer.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texturebuffer.frag
new file mode 100644
index 00000000000..d06974656c7
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.texturebuffer.frag
@@ -0,0 +1,17 @@
+
+struct Data {
+ float4 f;
+ int4 i;
+};
+
+TextureBuffer<Data> TextureBuffer_var : register(t0);
+
+tbuffer tbuf2 {
+ float4 f2;
+ int4 i2;
+};
+
+float4 main(float4 pos : SV_POSITION) : SV_TARGET
+{
+ return TextureBuffer_var.f + f2;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.tx.overload.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.tx.overload.frag
new file mode 100644
index 00000000000..8b83ddfc99d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.tx.overload.frag
@@ -0,0 +1,17 @@
+
+Texture2D<float> tf1;
+Texture2D<float4> tf4;
+
+RWTexture2D<float> twf1;
+RWTexture2D<float4> twf4;
+
+float Func(Texture2D<float> DummyTex) { return 1.0f; }
+float4 Func(Texture2D<float4> DummyTex) { return float4(0,0,0,0); }
+
+float Func(RWTexture2D<float> DummyTex) { return 1.0f; }
+float4 Func(RWTexture2D<float4> DummyTex) { return float4(0,0,0,0); }
+
+float4 main() : SV_TARGET
+{
+ return Func(tf1) + Func(tf4) + Func(twf1) + Func(twf4);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.half.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.half.frag
index f082039d296..a78afabf95d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.half.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.half.frag
@@ -7,5 +7,22 @@ float4 main() : SV_Target0
half3 h3 = 3;
half4 h4 = 4;
- return 0.0;
+ half1x1 h11;
+ half1x2 h12;
+ half1x3 h13;
+ half1x4 h14;
+ half2x1 h21;
+ half2x2 h22 = half2x2(1,2,3,4);
+ half2x3 h23 = (half2x3)4.9;
+ half2x4 h24;
+ half3x1 h31;
+ half3x2 h32;
+ half3x3 h33;
+ half3x4 h34;
+ half4x1 h41;
+ half4x2 h42;
+ half4x3 h43;
+ half4x4 h44;
+
+ return h23._11 + h4.y + h0;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.identifier.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.identifier.frag
index 25ba45739f6..4e53a82ff15 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.identifier.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.type.identifier.frag
@@ -24,5 +24,8 @@ float4 main() : SV_Target0
float = float + int + uint + min16float + min10float + (bool[0] ? int : float) + fn(float);
- return float;
+ half2x3 half2x3;
+ half2x3._11 = (float) * float;
+
+ return float + half2x3._11;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/implicitInnerAtomicUint.frag b/3rdparty/bgfx/3rdparty/glslang/Test/implicitInnerAtomicUint.frag
new file mode 100644
index 00000000000..bb76516fd60
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/implicitInnerAtomicUint.frag
@@ -0,0 +1,2 @@
+#version 460
+layout(binding = 0) uniform atomic_uint c[1][]; \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc1/badInc.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/badInc.h
new file mode 100644
index 00000000000..a77135538c5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/badInc.h
@@ -0,0 +1 @@
+#include "parentBad"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc1/bar.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/bar.h
new file mode 100644
index 00000000000..1a650fb6ad1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/bar.h
@@ -0,0 +1,3 @@
+float4 i2;
+
+#include "foo.h"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc1/foo.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/foo.h
new file mode 100644
index 00000000000..1819034d558
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/foo.h
@@ -0,0 +1,3 @@
+#include "parent.h"
+
+float4 i3;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/bar.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/bar.h
new file mode 100644
index 00000000000..46141dd1bc3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/bar.h
@@ -0,0 +1 @@
+float4 i9991;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/local.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/local.h
new file mode 100644
index 00000000000..b3aac8e3af6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/local.h
@@ -0,0 +1 @@
+float4 p2;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/notHere.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/notHere.h
new file mode 100644
index 00000000000..2e7d56a67b9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path1/notHere.h
@@ -0,0 +1,4 @@
+float4 p1;
+
+#include "local.h"
+#include "remote.h"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/bar.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/bar.h
new file mode 100644
index 00000000000..46141dd1bc3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/bar.h
@@ -0,0 +1 @@
+float4 i9991;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/notHere.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/notHere.h
new file mode 100644
index 00000000000..63f4ca47c8d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/notHere.h
@@ -0,0 +1 @@
+float4 paoeu1;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/remote.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/remote.h
new file mode 100644
index 00000000000..c925d27adcd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc1/path2/remote.h
@@ -0,0 +1 @@
+float4 p3;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc2/bar.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc2/bar.h
new file mode 100644
index 00000000000..901c058e7b9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc2/bar.h
@@ -0,0 +1,2 @@
+#include "foo.h"
+float4 i5;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/inc2/foo.h b/3rdparty/bgfx/3rdparty/glslang/Test/inc2/foo.h
new file mode 100644
index 00000000000..fd09e808c4e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/inc2/foo.h
@@ -0,0 +1 @@
+float4 i6; \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/include.vert b/3rdparty/bgfx/3rdparty/glslang/Test/include.vert
new file mode 100644
index 00000000000..192a4891a4c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/include.vert
@@ -0,0 +1,16 @@
+#version 450
+
+#extension GL_GOOGLE_include_directive : enable
+
+#define float4 vec4
+
+#include "bar.h"
+#include "./inc1/bar.h"
+#include "inc2\bar.h"
+
+out vec4 color;
+
+void main()
+{
+ color = i1 + i2 + i3 + i4 + i5 + i6;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/invalidSwizzle.vert b/3rdparty/bgfx/3rdparty/glslang/Test/invalidSwizzle.vert
new file mode 100644
index 00000000000..799ff872d5c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/invalidSwizzle.vert
@@ -0,0 +1,10 @@
+#version 420
+
+void f();
+uniform sampler2D s;
+
+void main() {
+ vec2 v = s.rr; // Swizzles do not apply to samplers
+ f().xx; // Scalar swizzle does not apply to void
+ f().xy; // Vector swizzle does not apply either
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/numeral.frag b/3rdparty/bgfx/3rdparty/glslang/Test/numeral.frag
index cc0862ccd10..39814f4eddf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/numeral.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/numeral.frag
@@ -101,3 +101,6 @@ uint g3 = 4294967294u;
int g4 = 4294967296; // ERROR, too big
int g5 = 4294967295;
int g6 = 4294967294;
+float inf1 = -1.#INF;
+float inf2 = 1.#INF;
+float inf3 = +1.#INF;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/overlongLiteral.frag b/3rdparty/bgfx/3rdparty/glslang/Test/overlongLiteral.frag
new file mode 100644
index 00000000000..c351ed6b8b0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/overlongLiteral.frag
@@ -0,0 +1 @@
+0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/parent.h b/3rdparty/bgfx/3rdparty/glslang/Test/parent.h
new file mode 100644
index 00000000000..9ef68e0b844
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/parent.h
@@ -0,0 +1 @@
+float4 i4;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/parentBad b/3rdparty/bgfx/3rdparty/glslang/Test/parentBad
new file mode 100644
index 00000000000..e54c10d0599
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/parentBad
@@ -0,0 +1,3 @@
+int a;
+
+#error bad parent
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert
index be49822523c..7549f0816d7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert
@@ -133,6 +133,26 @@ uniform abl2 {
float foo;
} arrBl2[4];
+buffer buf1 {
+ float scalar;
+ float runtimeArray[];
+} buf1i;
+
+buffer buf2 {
+ float scalar;
+ N2 runtimeArray[];
+} buf2i;
+
+buffer buf3 {
+ float scalar;
+ float runtimeArray[];
+} buf3i;
+
+buffer buf4 {
+ float scalar;
+ N2 runtimeArray[];
+} buf4i;
+
void main()
{
liveFunction1(image_ui2D, sampler_2D, sampler_2DMSArray);
@@ -179,4 +199,8 @@ void main()
f += attributeFloat3.x;
f += attributeFloat4.x;
f += attributeMat4[0][1];
+ f += buf1i.runtimeArray[3];
+ f += buf2i.runtimeArray[3].c;
+ f += buf3i.runtimeArray[gl_InstanceID];
+ f += buf4i.runtimeArray[gl_InstanceID].c;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.invalid-spirv-1.spv b/3rdparty/bgfx/3rdparty/glslang/Test/remap.invalid-spirv-1.spv
new file mode 100644
index 00000000000..e5d59d4fbf8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.invalid-spirv-1.spv
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.invalid-spirv-2.spv b/3rdparty/bgfx/3rdparty/glslang/Test/remap.invalid-spirv-2.spv
new file mode 100644
index 00000000000..df8c96d8aa1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.invalid-spirv-2.spv
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/remap.specconst.comp b/3rdparty/bgfx/3rdparty/glslang/Test/remap.specconst.comp
new file mode 100644
index 00000000000..52ac07aa054
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/remap.specconst.comp
@@ -0,0 +1,7 @@
+#version 450
+
+layout (local_size_x_id = 0, local_size_y_id = 1, local_size_z_id = 2) in;
+
+shared int foo[gl_WorkGroupSize.x + gl_WorkGroupSize.y * gl_WorkGroupSize.z];
+
+void main () {}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/runtests b/3rdparty/bgfx/3rdparty/glslang/Test/runtests
index 86ffef345cc..814210ba4a7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/runtests
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/runtests
@@ -3,6 +3,7 @@
TARGETDIR=localResults
BASEDIR=baseResults
EXE=../build/install/bin/glslangValidator
+REMAPEXE=../build/install/bin/spirv-remap
HASERROR=0
mkdir -p localResults
@@ -31,11 +32,12 @@ diff -b $BASEDIR/badMacroArgs.frag.out $TARGETDIR/badMacroArgs.frag.out || HASER
echo Running reflection...
$EXE -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out
diff -b $BASEDIR/reflection.vert.out $TARGETDIR/reflection.vert.out || HASERROR=1
-$EXE -D -e flizv -l -q -C -V hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
+$EXE -D -e flizv -l -q -C -V -Od hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
diff -b $BASEDIR/hlsl.reflection.vert.out $TARGETDIR/hlsl.reflection.vert.out || HASERROR=1
-$EXE -D -e main -l -q -C -V hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
+$EXE -D -e main -l -q -C -V -Od hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
diff -b $BASEDIR/hlsl.reflection.binding.frag.out $TARGETDIR/hlsl.reflection.binding.frag.out || HASERROR=1
-
+$EXE -D -e main -l -q --hlsl-iomap --auto-map-bindings --stb 10 --sbb 20 --ssb 30 --suavb 40 --scb 50 -D -V -e main -Od hlsl.automap.frag > $TARGETDIR/hlsl.automap.frag.out
+diff -b $BASEDIR/hlsl.automap.frag.out $TARGETDIR/hlsl.automap.frag.out || HASERROR=1
#
# multi-threaded test
@@ -44,19 +46,24 @@ echo Comparing single thread to multithread for all tests in current directory..
$EXE -i -C *.vert *.geom *.frag *.tes* *.comp > singleThread.out
$EXE -i -C *.vert *.geom *.frag *.tes* *.comp -t > multiThread.out
diff singleThread.out multiThread.out || HASERROR=1
+if [ $HASERROR -eq 0 ]
+then
+ rm singleThread.out
+ rm multiThread.out
+fi
#
# entry point renaming tests
#
echo Running entry-point renaming tests
-$EXE -i -H -V -D -e main_in_spv --ku --source-entrypoint main hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
+$EXE -i -H -V -D -e main_in_spv --ku --source-entrypoint main -Od hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
diff -b $BASEDIR/hlsl.entry.rename.frag.out $TARGETDIR/hlsl.entry.rename.frag.out || HASERROR=1
#
# Testing ill-defined uncalled function
#
echo Running ill-defined uncalled function
-$EXE -D -e main -H hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out
+$EXE -D -e main -H -Od hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out
diff -b $BASEDIR/hlsl.deadFunctionMissingBody.vert.out $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out || HASERROR=1
if [ $HASERROR -eq 0 ]
@@ -73,6 +80,115 @@ echo Running explicit stage test
$EXE -i -S vert nosuffix > $TARGETDIR/nosuffix.out
diff -b $BASEDIR/nosuffix.out $TARGETDIR/nosuffix.out || HASERROR=1
+#
+# Testing --hlsl-offsets
+#
+echo Running hlsl offsets
+$EXE -i --hlsl-offsets -H spv.hlslOffsets.vert > $TARGETDIR/spv.hlslOffsets.vert.out
+diff -b $BASEDIR/spv.hlslOffsets.vert.out $TARGETDIR/spv.hlslOffsets.vert.out || HASERROR=1
+
+echo Running hlsl offsets
+$EXE -i --hlsl-offsets -D -e main -H -Od hlsl.hlslOffset.vert > $TARGETDIR/hlsl.hlslOffset.vert.out
+diff -b $BASEDIR/hlsl.hlslOffset.vert.out $TARGETDIR/hlsl.hlslOffset.vert.out || HASERROR=1
+
+#
+# Testing --resource-set-binding
+#
+echo Configuring HLSL descriptor set and binding number manually
+$EXE -V -D -e main -H -Od hlsl.multiDescriptorSet.frag --rsb frag t0 0 0 t1 1 0 s0 0 1 s1 1 1 b0 2 0 b1 2 1 b2 2 2 > $TARGETDIR/hlsl.multiDescriptorSet.frag.out
+diff -b $BASEDIR/hlsl.multiDescriptorSet.frag.out $TARGETDIR/hlsl.multiDescriptorSet.frag.out || HASERROR=1
+
+$EXE -V -D -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb 4 > $TARGETDIR/hlsl.explicitDescriptorSet.frag.out
+diff -b $BASEDIR/hlsl.explicitDescriptorSet.frag.out $TARGETDIR/hlsl.explicitDescriptorSet.frag.out || HASERROR=1
+
+$EXE -V -D -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb frag 3 > $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out
+diff -b $BASEDIR/hlsl.explicitDescriptorSet-2.frag.out $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out || HASERROR=1
+
+#
+# Testing per-descriptor-set IO map shift
+#
+echo 'Testing per-descriptor-set IO map shift'
+$EXE -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --suavb 30 --suavb 40 2 --sub 50 6 -i -q -D -V hlsl.shift.per-set.frag > $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
+diff -b $BASEDIR/hlsl.shift.per-set.frag.out $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
+
+#
+# Testing location error
+#
+echo Testing SPV no location
+$EXE -V -C spv.noLocation.vert > $TARGETDIR/spv.noLocation.vert.out
+diff -b $BASEDIR/spv.noLocation.vert.out $TARGETDIR/spv.noLocation.vert.out || HASERROR=1
+$EXE -G -H --aml spv.noBuiltInLoc.vert > $TARGETDIR/spv.noBuiltInLoc.vert.out
+diff -b $BASEDIR/spv.noBuiltInLoc.vert.out $TARGETDIR/spv.noBuiltInLoc.vert.out || HASERROR=1
+$EXE -G spv.looseUniformNoLoc.vert > $TARGETDIR/spv.looseUniformNoLoc.vert.out
+diff -b $BASEDIR/spv.looseUniformNoLoc.vert.out $TARGETDIR/spv.looseUniformNoLoc.vert.out || HASERROR=1
+
+#
+# Testing debug information
+#
+echo Testing SPV Debug Information
+$EXE -g --relaxed-errors --suppress-warnings --aml --hlsl-offsets --nsf \
+ -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out
+diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1
+$EXE -g -D -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
+ --sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > $TARGETDIR/spv.hlslDebugInfo.frag.out
+diff -b $BASEDIR/spv.hlslDebugInfo.frag.out $TARGETDIR/spv.hlslDebugInfo.frag.out || HASERROR=1
+
+#
+# Testing Includer
+#
+echo Testing Includer
+$EXE -D -e main -H -Od ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out
+diff -b $BASEDIR/hlsl.include.vert.out $TARGETDIR/hlsl.include.vert.out || HASERROR=1
+$EXE -D -e main -H -Od hlsl.includeNegative.vert > $TARGETDIR/hlsl.includeNegative.vert.out
+diff -b $BASEDIR/hlsl.includeNegative.vert.out $TARGETDIR/hlsl.includeNegative.vert.out || HASERROR=1
+$EXE -l -i include.vert > $TARGETDIR/include.vert.out
+diff -b $BASEDIR/include.vert.out $TARGETDIR/include.vert.out || HASERROR=1
+$EXE -D -e main -H -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out
+diff -b $BASEDIR/hlsl.dashI.vert.out $TARGETDIR/hlsl.dashI.vert.out || HASERROR=1
+
+#
+# Testing -D and -U
+#
+echo "Testing -D and -U"
+$EXE -DUNDEFED -UIN_SHADER -DFOO=200 -i -l -UUNDEFED -DMUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out
+diff -b $BASEDIR/glsl.-D-U.frag.out $TARGETDIR/glsl.-D-U.frag.out || HASERROR=1
+$EXE -D -e main -V -i -DUNDEFED -UIN_SHADER -DFOO=200 -UUNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
+diff -b $BASEDIR/hlsl.-D-U.frag.out $TARGETDIR/hlsl.-D-U.frag.out || HASERROR=1
+
+#
+# Test --client and --target-env
+#
+echo "Testing --client and --target-env"
+$EXE --client vulkan100 spv.targetVulkan.vert || HASERROR=1
+$EXE --client opengl100 spv.targetOpenGL.vert || HASERROR=1
+$EXE --target-env vulkan1.0 spv.targetVulkan.vert || HASERROR=1
+$EXE --target-env opengl spv.targetOpenGL.vert || HASERROR=1
+$EXE -V100 spv.targetVulkan.vert || HASERROR=1
+$EXE -G100 spv.targetOpenGL.vert || HASERROR=1
+
+#
+# Testing GLSL entry point rename
+#
+echo "Testing GLSL entry point rename"
+$EXE -H -e foo --source-entrypoint main glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.out
+diff -b $BASEDIR/glsl.entryPointRename.vert.out $TARGETDIR/glsl.entryPointRename.vert.out || HASERROR=1
+$EXE -H -e foo --source-entrypoint bar glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.bad.out
+diff -b $BASEDIR/glsl.entryPointRename.vert.bad.out $TARGETDIR/glsl.entryPointRename.vert.bad.out || HASERROR=1
+$EXE -H -e foo --source-entrypoint main glsl.entryPointRename2.vert > $TARGETDIR/glsl.entryPointRename2.vert.out
+diff -b $BASEDIR/glsl.entryPointRename2.vert.out $TARGETDIR/glsl.entryPointRename2.vert.out || HASERROR=1
+
+#
+# Testing remapper error handling
+#
+echo "Testing remapper error handling"
+$REMAPEXE --do-everything -i remap.invalid-spirv-1.spv -o $TARGETDIR > $TARGETDIR/remap.invalid-spirv-1.out && HASERROR=1
+diff -b $BASEDIR/remap.invalid-spirv-1.out $TARGETDIR/remap.invalid-spirv-1.out || HASERROR=1
+$REMAPEXE --do-everything -i remap.invalid-spirv-2.spv -o $TARGETDIR > $TARGETDIR/remap.invalid-spirv-2.out && HASERROR=1
+diff -b $BASEDIR/remap.invalid-spirv-2.out $TARGETDIR/remap.invalid-spirv-2.out || HASERROR=1
+
+#
+# Final checking
+#
if [ $HASERROR -eq 0 ]
then
echo Tests Succeeded.
@@ -80,4 +196,6 @@ else
echo Tests Failed.
fi
+rm -f comp.spv frag.spv geom.spv tesc.spv tese.spv vert.spv
+
exit $HASERROR
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.geom b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.geom
index 8aefe507665..3489a888146 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.geom
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.geom
@@ -9,4 +9,6 @@ layout(invocations = 4) in;
void main()
{
gl_PointSize = gl_in[1].gl_PointSize;
+ gl_Layer = 2;
+ gl_ViewportIndex = 3;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.tesc
index c3719f96d17..47b9a40876e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.450.tesc
@@ -2,7 +2,7 @@
layout(vertices = 4) out;
-patch out vec4 patchOut;
+layout(location=1) patch out vec4 patchOut;
struct S {
float sMem1; // should not see a patch decoration
@@ -17,6 +17,7 @@ layout(location = 12) patch out TheBlock {
void main()
{
+ gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
}
layout(location = 2) patch out SingleBlock {
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.460.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.460.comp
new file mode 100644
index 00000000000..eb671a38b3d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.460.comp
@@ -0,0 +1,9 @@
+#version 460
+
+void main()
+{
+ bool b1;
+ b1 = anyInvocation(b1);
+ b1 = allInvocations(b1);
+ b1 = allInvocationsEqual(b1);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.460.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.460.frag
new file mode 100644
index 00000000000..9eb8bf46f73
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.460.frag
@@ -0,0 +1,17 @@
+#version 460 core
+
+layout(binding = 0) uniform atomic_uint aui;
+uint ui;
+
+void main()
+{
+ atomicCounterAdd(aui, ui);
+ atomicCounterSubtract(aui, ui);
+ atomicCounterMin(aui, ui);
+ atomicCounterMax(aui, ui);
+ atomicCounterAnd(aui, ui);
+ atomicCounterOr(aui, ui);
+ atomicCounterXor(aui, ui);
+ atomicCounterExchange(aui, ui);
+ atomicCounterCompSwap(aui, ui, ui);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.460.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.460.vert
new file mode 100644
index 00000000000..72d4e775f4a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.460.vert
@@ -0,0 +1,6 @@
+#version 460
+
+void main()
+{
+ int a = gl_BaseVertex + gl_BaseInstance + gl_DrawID;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.OVR_multiview.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.OVR_multiview.vert
new file mode 100644
index 00000000000..c81a4d996cd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.OVR_multiview.vert
@@ -0,0 +1,9 @@
+#version 330
+
+#extension GL_OVR_multiview : enable
+
+layout(num_views = 2) in;
+
+void main() {
+ gl_Position = vec4(gl_ViewID_OVR, 0, 0, 0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.arbPostDepthCoverage.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.arbPostDepthCoverage.frag
new file mode 100644
index 00000000000..03b61cb5ea4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.arbPostDepthCoverage.frag
@@ -0,0 +1,13 @@
+#version 450
+
+#extension GL_ARB_post_depth_coverage : enable
+#extension GL_EXT_post_depth_coverage : enable //according to ARB_post_depth_coverage,
+ //if both enabled, this one should be ignored
+precision highp int;
+layout(post_depth_coverage) in;
+
+layout (location = 0) out int readSampleMaskIn;
+
+void main () {
+ readSampleMaskIn = gl_SampleMaskIn[0];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.arbPostDepthCoverage_Error.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.arbPostDepthCoverage_Error.frag
new file mode 100644
index 00000000000..652933b8121
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.arbPostDepthCoverage_Error.frag
@@ -0,0 +1,12 @@
+#version 310 es
+
+#extension GL_ARB_post_depth_coverage : enable
+
+precision highp float;
+
+layout(post_depth_coverage, location = 0) in float a; // should fail since post_depth_coverage may only
+ // be declared on in only (not with variable declarations)
+
+void main () {
+
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.atomicInt64.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.atomicInt64.comp
new file mode 100644
index 00000000000..a56c7ec0300
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.atomicInt64.comp
@@ -0,0 +1,79 @@
+#version 450 core
+
+#extension GL_ARB_gpu_shader_int64: enable
+#extension GL_NV_shader_atomic_int64: enable
+
+layout(local_size_x = 16, local_size_y = 16) in;
+
+layout(binding = 0) buffer Buffer
+{
+ int64_t i64;
+ uint64_t u64;
+} buf;
+
+struct Struct
+{
+ int64_t i64;
+ uint64_t u64;
+};
+
+shared Struct s;
+
+void main()
+{
+ const int64_t i64c = -24;
+ const uint64_t u64c = 0xF00000000F;
+
+ // Test shader storage block
+ int64_t i64 = 0;
+ uint64_t u64 = 0;
+
+ i64 += atomicMin(buf.i64, i64c);
+ u64 += atomicMin(buf.u64, u64c);
+
+ i64 += atomicMax(buf.i64, i64c);
+ u64 += atomicMax(buf.u64, u64c);
+
+ i64 += atomicAnd(buf.i64, i64c);
+ u64 += atomicAnd(buf.u64, u64c);
+
+ i64 += atomicOr(buf.i64, i64c);
+ u64 += atomicOr(buf.u64, u64c);
+
+ i64 += atomicXor(buf.i64, i64c);
+ u64 += atomicXor(buf.u64, u64c);
+
+ i64 += atomicAdd(buf.i64, i64c);
+ i64 += atomicExchange(buf.i64, i64c);
+ i64 += atomicCompSwap(buf.i64, i64c, i64);
+
+ buf.i64 = i64;
+ buf.u64 = u64;
+
+ // Test shared variable
+ i64 = 0;
+ u64 = 0;
+
+ i64 += atomicMin(s.i64, i64c);
+ u64 += atomicMin(s.u64, u64c);
+
+ i64 += atomicMax(s.i64, i64c);
+ u64 += atomicMax(s.u64, u64c);
+
+ i64 += atomicAnd(s.i64, i64c);
+ u64 += atomicAnd(s.u64, u64c);
+
+ i64 += atomicOr(s.i64, i64c);
+ u64 += atomicOr(s.u64, u64c);
+
+ i64 += atomicXor(s.i64, i64c);
+ u64 += atomicXor(s.u64, u64c);
+
+ i64 += atomicAdd(s.i64, i64c);
+ i64 += atomicExchange(s.i64, i64c);
+ i64 += atomicCompSwap(s.i64, i64c, i64);
+
+ s.i64 = i64;
+ s.u64 = u64;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.debugInfo.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.debugInfo.frag
new file mode 100644
index 00000000000..3b6cd27fead
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.debugInfo.frag
@@ -0,0 +1,52 @@
+#version 450
+
+struct S {
+ int a;
+};
+
+uniform ubuf {
+ S s;
+};
+
+uniform sampler2D s2d;
+
+layout(location = 0) in vec4 inv;
+layout(location = 0) out vec4 outv;
+
+vec4 foo(S s)
+{
+ vec4 r = s.a * inv;
+ ++r;
+ if (r.x > 3.0)
+ --r;
+ else
+ r *= 2;
+
+ return r;
+}
+
+void main()
+{
+ outv = foo(s);
+ outv += texture(s2d, vec2(0.5));
+
+ switch (s.a) {
+ case 10:
+ ++outv;
+ break;
+ case 20:
+ outv = 2 * outv;
+ ++outv;
+ break;
+ default:
+ --outv;
+ break;
+ }
+
+ for (int i = 0; i < 10; ++i)
+ outv *= 3.0;
+
+ outv.x < 10.0 ?
+ outv = sin(outv) :
+ outv = cos(outv);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.extPostDepthCoverage.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.extPostDepthCoverage.frag
new file mode 100644
index 00000000000..20aebc395db
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.extPostDepthCoverage.frag
@@ -0,0 +1,9 @@
+#version 310 es
+
+#extension GL_EXT_post_depth_coverage : enable
+
+layout(post_depth_coverage) in;
+layout(early_fragment_tests) in;
+
+void main () {
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.extPostDepthCoverage_Error.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.extPostDepthCoverage_Error.frag
new file mode 100644
index 00000000000..25ce2e2e6c9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.extPostDepthCoverage_Error.frag
@@ -0,0 +1,9 @@
+#version 450
+
+#extension GL_EXT_post_depth_coverage : enable
+
+layout(post_depth_coverage) in; // should fail since for GL_EXT_post_depth_coverage
+ // explicit declaration of early_fragment_tests is required
+
+void main () {
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslDebugInfo.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslDebugInfo.vert
new file mode 100644
index 00000000000..b2bc1877837
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslDebugInfo.vert
@@ -0,0 +1,4 @@
+float4 origMain() : SV_Position
+{
+ return (float4)0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslOffsets.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslOffsets.vert
new file mode 100644
index 00000000000..87e32a729c2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslOffsets.vert
@@ -0,0 +1,27 @@
+#version 450
+
+buffer block {
+ float m0;
+ vec3 m4;
+ //////
+ float m16;
+ layout(offset=20) vec3 m20;
+ /////
+ vec3 m32;
+ /////
+ vec2 m48;
+ vec2 m56;
+ ////
+ float m64;
+ vec2 m68;
+ float m76;
+ //////
+ float m80;
+ layout(offset=88) vec2 m88;
+ //////
+ vec2 m96;
+ ///////
+ dvec2 m112;
+};
+
+void main() {} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.imageLoadStoreLod.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.imageLoadStoreLod.frag
new file mode 100644
index 00000000000..0da1da125dd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.imageLoadStoreLod.frag
@@ -0,0 +1,36 @@
+#version 450 core
+
+#extension GL_AMD_shader_image_load_store_lod: enable
+
+layout(rgba32f, binding = 0) uniform image1D i1D;
+layout(rgba32f, binding = 1) uniform image2D i2D;
+layout(rgba32f, binding = 2) uniform image3D i3D;
+layout(rgba32i, binding = 3) uniform iimageCube iiCube;
+layout(rgba32i, binding = 4) uniform iimage1DArray ii1DArray;
+layout(rgba32ui, binding = 5) uniform uimage2DArray ui2DArray;
+layout(rgba32ui, binding = 6) uniform uimageCubeArray uiCubeArray;
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ const int c1 = 1;
+ const ivec2 c2 = ivec2(2, 3);
+ const ivec3 c3 = ivec3(4, 5, 6);
+
+ const int lod = 3;
+
+ vec4 f4 = vec4(0.0);
+ f4 += imageLoadLodAMD(i1D, c1, lod);
+ f4 += imageLoadLodAMD(i2D, c2, lod);
+ f4 += imageLoadLodAMD(i3D, c3, lod);
+
+ imageStoreLodAMD(iiCube, c3, lod, ivec4(f4));
+ imageStoreLodAMD(ii1DArray, c2, lod, ivec4(f4));
+
+ uvec4 u4;
+ sparseImageLoadLodAMD(ui2DArray, c3, lod, u4);
+ sparseImageLoadLodAMD(uiCubeArray, c3, lod, u4);
+
+ fragColor = f4 + vec4(u4);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int16.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int16.frag
new file mode 100644
index 00000000000..9dd9090c855
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int16.frag
@@ -0,0 +1,314 @@
+#version 450 core
+
+#extension GL_ARB_gpu_shader_int64: enable
+#extension GL_AMD_gpu_shader_half_float: enable
+#extension GL_AMD_gpu_shader_int16: enable
+
+layout(binding = 0) uniform Uniforms
+{
+ uint i;
+};
+
+// int16/uint16 in block
+layout(std140, binding = 1) uniform Block
+{
+ i16vec3 i16v;
+ uint16_t u16;
+} block;
+
+// int16/uint16 for input
+layout(location = 0) in flat u16vec3 iu16v;
+layout(location = 1) in flat int16_t ii16;
+
+void literal()
+{
+ const int16_t i16c[3] =
+ {
+ 0x111S, // Hex
+ -2s, // Dec
+ 0400s, // Oct
+ };
+
+ const uint16_t u16c[] =
+ {
+ 0xFFFFus, // Hex
+ 65535US, // Dec
+ 0177777us, // Oct
+ };
+
+ uint16_t u16 = i16c[i] + u16c[i];
+}
+
+void operators()
+{
+ u16vec3 u16v;
+ int16_t i16;
+ uint16_t u16;
+ int i;
+ uint u;
+ bool b;
+
+ // Unary
+ u16v++;
+ i16--;
+ ++i16;
+ --u16v;
+
+ u16v = ~u16v;
+
+ i16 = +i16;
+ u16v = -u16v;
+
+ // Arithmetic
+ u16 += i16;
+ u16v -= u16v;
+ i16 *= i16;
+ u16v /= u16v;
+ u16v %= i16;
+
+ u16v = u16v + u16v;
+ u16 = i16 - u16;
+ u16v = u16v * i16;
+ i16 = i16 * i16;
+ i16 = i16 % i16;
+
+ // Shift
+ u16v <<= i;
+ i16 >>= u16v.y;
+
+ i16 = i16 << u16v.z;
+ u16v = u16v << i16;
+
+ // Relational
+ b = (u16v.x != i16);
+ b = (i16 == u16v.x);
+ b = (u16v.x > u16v.y);
+ b = (i16 < u);
+ b = (u16v.y >= u16v.x);
+ b = (i16 <= i);
+
+ // Bitwise
+ u16v |= i16;
+ u16 = i16 | u16;
+ i16 &= i16;
+ u16v = u16v & u16v;
+ u16v ^= i16;
+ u16v = u16v ^ i16;
+}
+
+void typeCast()
+{
+ bvec2 bv;
+ ivec2 iv;
+ uvec2 uv;
+ vec2 fv;
+ dvec2 dv;
+
+ f16vec2 f16v;
+ i64vec2 i64v;
+ u64vec2 u64v;
+ i16vec2 i16v;
+ u16vec2 u16v;
+
+ i16v = i16vec2(bv); // bool -> int16
+ u16v = u16vec2(bv); // bool -> uint16
+ bv = bvec2(i16v); // int16 -> bool
+ bv = bvec2(u16v); // uint16 -> bool
+
+ i16v = i16vec2(iv); // int -> int16
+ u16v = u16vec2(iv); // int -> uint16
+ iv = i16v; // int16 -> int
+ iv = ivec2(u16v); // uint16 -> int
+
+ i16v = i16vec2(uv); // uint -> int16
+ u16v = u16vec2(uv); // uint -> uint16
+ uv = i16v; // int16 -> uint
+ uv = u16v; // uint16 -> uint
+
+ i16v = i16vec2(fv); // float -> int16
+ u16v = u16vec2(fv); // float -> uint16
+ fv = i16v; // int16 -> float
+ fv = u16v; // uint16 -> float
+
+ i16v = i16vec2(dv); // double -> int16
+ u16v = u16vec2(dv); // double -> uint16
+ dv = i16v; // int16 -> double
+ dv = u16v; // uint16 -> double
+
+ i16v = i16vec2(f16v); // float16 -> int16
+ u16v = u16vec2(f16v); // float16 -> uint16
+ f16v = i16v; // int16 -> float16
+ f16v = u16v; // uint16 -> float16
+
+ i16v = i16vec2(i64v); // int64 -> int16
+ u16v = u16vec2(i64v); // int64 -> uint16
+ i64v = i16v; // int16 -> int64
+ i64v = i64vec2(u16v); // uint16 -> int64
+
+ i16v = i16vec2(u64v); // uint64 -> int16
+ u16v = u16vec2(u64v); // uint64 -> uint16
+ u64v = i16v; // int16 -> uint64
+ u64v = u16v; // uint16 -> uint64
+
+ i16v = i16vec2(u16v); // uint16 -> int16
+ u16v = i16v; // int16 -> uint16
+}
+
+void builtinFuncs()
+{
+ i16vec2 i16v;
+ u16vec3 u16v;
+ f16vec3 f16v;
+ bvec3 bv;
+
+ int16_t i16;
+ uint16_t u16;
+
+ // abs()
+ i16v = abs(i16v);
+
+ // sign()
+ i16v = sign(i16v);
+
+ // min()
+ i16v = min(i16v, i16);
+ i16v = min(i16v, i16vec2(-1s));
+ u16v = min(u16v, u16);
+ u16v = min(u16v, u16vec3(0us));
+
+ // max()
+ i16v = max(i16v, i16);
+ i16v = max(i16v, i16vec2(-1s));
+ u16v = max(u16v, u16);
+ u16v = max(u16v, u16vec3(0us));
+
+ // clamp()
+ i16v = clamp(i16v, -i16, i16);
+ i16v = clamp(i16v, -i16v, i16v);
+ u16v = clamp(u16v, -u16, u16);
+ u16v = clamp(u16v, -u16v, u16v);
+
+ // mix()
+ i16 = mix(i16v.x, i16v.y, true);
+ i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
+ u16 = mix(u16v.x, u16v.y, true);
+ u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
+
+ // frexp()
+ i16vec3 exp;
+ f16v = frexp(f16v, exp);
+
+ // ldexp()
+ f16v = ldexp(f16v, exp);
+
+ // float16BitsToInt16()
+ i16v = float16BitsToInt16(f16v.xy);
+
+ // float16BitsToUint16()
+ u16v.x = float16BitsToUint16(f16v.z);
+
+ // int16BitsToFloat16()
+ f16v.xy = int16BitsToFloat16(i16v);
+
+ // uint16BitsToFloat16()
+ f16v = uint16BitsToFloat16(u16v);
+
+ // packInt2x16()
+ int packi = packInt2x16(i16v);
+
+ // unpackInt2x16()
+ i16v = unpackInt2x16(packi);
+
+ // packUint2x16()
+ uint packu = packUint2x16(u16v.xy);
+
+ // unpackUint2x16()
+ u16v.xy = unpackUint2x16(packu);
+
+ // packInt4x16()
+ int64_t packi64 = packInt4x16(i16vec4(i16));
+
+ // unpackInt4x16()
+ i16v = unpackInt4x16(packi64).xy;
+
+ // packUint4x16()
+ uint64_t packu64 = packUint4x16(u16vec4(u16));
+
+ // unpackUint4x16()
+ u16v = unpackUint4x16(packu64).xyz;
+
+ // lessThan()
+ bv = lessThan(u16v, u16vec3(u16));
+ bv.xy = lessThan(i16v, i16vec2(i16));
+
+ // lessThanEqual()
+ bv = lessThanEqual(u16v, u16vec3(u16));
+ bv.xy = lessThanEqual(i16v, i16vec2(i16));
+
+ // greaterThan()
+ bv = greaterThan(u16v, u16vec3(u16));
+ bv.xy = greaterThan(i16v, i16vec2(i16));
+
+ // greaterThanEqual()
+ bv = greaterThanEqual(u16v, u16vec3(u16));
+ bv.xy = greaterThanEqual(i16v, i16vec2(i16));
+
+ // equal()
+ bv = equal(u16v, u16vec3(u16));
+ bv.xy = equal(i16v, i16vec2(i16));
+
+ // notEqual()
+ bv = notEqual(u16v, u16vec3(u16));
+ bv.xy = notEqual(i16v, i16vec2(i16));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int64_t si64 = -10L;
+layout(constant_id = 101) const uint64_t su64 = 20UL;
+layout(constant_id = 102) const int si = -5;
+layout(constant_id = 103) const uint su = 4;
+layout(constant_id = 104) const bool sb = true;
+layout(constant_id = 105) const int16_t si16 = -5S;
+layout(constant_id = 106) const uint16_t su16 = 4US;
+
+// bool <-> int16/uint16
+const bool i16_to_b = bool(si16);
+const bool u16_to_b = bool(su16);
+const int16_t b_to_i16 = int16_t(sb);
+const uint16_t b_to_u16 = uint16_t(sb);
+
+// int <-> int16/uint16
+const int i16_to_i = int(si16);
+const int u16_to_i = int(su16);
+const int16_t i_to_i16 = int16_t(si);
+const uint16_t i_to_u16 = uint16_t(si);
+
+// uint <-> int16/uint16
+const uint i16_to_u = uint(si16);
+const uint u16_to_u = uint(su16);
+const int16_t u_to_i16 = int16_t(su);
+const uint16_t u_to_u16 = uint16_t(su);
+
+// int64 <-> int16/uint16
+const int64_t i16_to_i64 = int64_t(si16);
+const int64_t u16_to_i64 = int64_t(su16);
+const int16_t i64_to_i16 = int16_t(si64);
+const uint16_t i64_to_u16 = uint16_t(si64);
+
+// uint64 <-> int16/uint16
+const uint64_t i16_to_u64 = uint64_t(si16);
+const uint64_t u16_to_u64 = uint64_t(su16);
+const int16_t u64_to_i16 = int16_t(su64);
+const uint16_t u64_to_u16 = uint16_t(su64);
+
+// int16 <-> uint16
+const uint16_t i16_to_u16 = uint16_t(si16);
+const int16_t u16_to_i16 = int16_t(su16);
+
+void main()
+{
+ literal();
+ operators();
+ typeCast();
+ builtinFuncs();
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.looseUniformNoLoc.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.looseUniformNoLoc.vert
new file mode 100644
index 00000000000..e8873594495
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.looseUniformNoLoc.vert
@@ -0,0 +1,15 @@
+#version 450 core
+
+layout(location = 0)
+in vec4 foo;
+
+layout(location = 0)
+out vec4 bar;
+
+uniform vec4 uv;
+
+void main()
+{
+ bar = foo;
+ gl_Position = foo;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.noBuiltInLoc.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.noBuiltInLoc.vert
new file mode 100644
index 00000000000..5fbe25219e3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.noBuiltInLoc.vert
@@ -0,0 +1,17 @@
+#version 450 core
+
+layout(location = 0)
+in vec4 foo;
+
+layout(location = 0)
+out vec4 bar;
+
+uniform vec4 uv1;
+uniform float uv2;
+uniform vec3 uv3;
+
+void main()
+{
+ bar = foo;
+ gl_Position = foo;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.noLocation.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.noLocation.vert
new file mode 100644
index 00000000000..43998525ea6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.noLocation.vert
@@ -0,0 +1,39 @@
+#version 450
+
+layout(location = 1) in vec4 in1;
+in vec4 in2; // ERROR
+layout(location = 3) in vec4 in3;
+
+layout(location = 1) out vec4 out1;
+out vec4 out2; // ERROR
+layout(location = 3) out vec4 out3;
+
+layout(location = 10) out inb1 {
+ vec4 a;
+ vec4 b;
+} inbi1;
+out inb2 {
+ layout(location = 12) vec4 a;
+ layout(location = 13) vec4 b;
+} inbi2;
+out inb3 { // ERROR
+ vec4 a;
+ vec4 b;
+} inbi3;
+
+layout(location = 14) out struct S1 { vec4 a; } s1;
+out struct S2 { vec4 a; } s2; // ERROR
+
+struct SS { int a; };
+out layout(location = 15) SS ss1;
+out SS ss2; // ERROR
+
+out gl_PerVertex {
+ vec4 gl_Position;
+ float gl_ClipDistance[2];
+};
+
+void main()
+{
+ gl_ClipDistance[0] = 1.0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.paramMemory.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.paramMemory.frag
new file mode 100644
index 00000000000..79d2fe579de
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.paramMemory.frag
@@ -0,0 +1,30 @@
+#version 310 es
+
+readonly coherent uniform layout(set = 0, binding = 0, rgba32f) highp image2D image1;
+readonly uniform layout(set = 0, binding = 2, rgba16f) highp image2D image2;
+writeonly coherent uniform layout(set = 0, binding = 1, rgba32f) highp image2D image3;
+writeonly uniform layout(set = 0, binding = 3, rgba16f) highp image2D image4;
+
+flat in layout(location = 0) highp ivec2 in_coords;
+out layout(location = 0) highp vec4 out_color;
+
+highp vec4 image_load(readonly coherent highp image2D image, highp ivec2 coords)
+{
+ return imageLoad(image, in_coords);
+}
+
+void image_store(writeonly coherent highp image2D image, highp ivec2 coords, highp vec4 data)
+{
+ imageStore(image, in_coords, data);
+}
+
+void main()
+{
+ highp vec4 read1 = image_load(image1, in_coords);
+ highp vec4 read2 = image_load(image2, in_coords);
+
+ image_store(image3, in_coords, read1*0.5);
+ image_store(image4, in_coords, read2*2.0);
+
+ out_color = vec4(0.0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.precisionNonESSamp.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.precisionNonESSamp.frag
new file mode 100644
index 00000000000..8abf839eb9b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.precisionNonESSamp.frag
@@ -0,0 +1,24 @@
+#version 450
+
+precision lowp sampler2D;
+precision lowp int;
+precision lowp float;
+
+uniform lowp sampler2D s;
+uniform highp sampler3D t;
+layout(rgba32f) uniform lowp image2D i1;
+layout(rgba32f) uniform highp image2D i2;
+
+layout(location = 0) in lowp vec2 v2;
+layout(location = 1) in lowp vec3 v3;
+layout(location = 3) flat in lowp ivec2 iv2;
+
+layout(location = 0) out lowp vec4 color;
+
+void main()
+{
+ color = texture(s, v2);
+ color = texture(t, v3);
+ lowp vec4 vi1 = imageLoad(i1, iv2);
+ lowp vec4 vi2 = imageLoad(i2, iv2);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.subpass.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.subpass.frag
new file mode 100644
index 00000000000..281c2f7043d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.register.subpass.frag
@@ -0,0 +1,15 @@
+
+// Test binding autoassignment and offset for SubpassInput objects
+
+layout(input_attachment_index = 1) SubpassInput<float4> subpass_f4 : register(t1);
+layout(input_attachment_index = 4) SubpassInputMS<float4> subpass_ms_f4;
+[[vk::input_attachment_index(7)]] SubpassInput subpass_2;
+
+float4 main() : SV_Target0
+{
+ float4 result00 = subpass_f4.SubpassLoad();
+ float4 result10 = subpass_ms_f4.SubpassLoad(3);
+ float4 result73 = subpass_2.SubpassLoad();
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.sample.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sample.frag
new file mode 100644
index 00000000000..b62afe27980
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sample.frag
@@ -0,0 +1,9 @@
+#version 450
+
+layout(location = 0) in sample vec4 samp;
+layout(location = 0) out vec4 color;
+
+void main()
+{
+ color = samp;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.sampleId.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sampleId.frag
new file mode 100644
index 00000000000..d5473f79a18
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.sampleId.frag
@@ -0,0 +1,12 @@
+#version 450
+
+layout(location = 0) in vec4 samp;
+layout(location = 0) out vec4 color;
+
+void main()
+{
+ if (gl_SampleID < 3)
+ color = samp;
+ else
+ color = 2 * samp;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.samplePosition.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.samplePosition.frag
new file mode 100644
index 00000000000..b73dd61fa58
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.samplePosition.frag
@@ -0,0 +1,12 @@
+#version 450
+
+layout(location = 0) in vec4 samp;
+layout(location = 0) out vec4 color;
+
+void main()
+{
+ if (gl_SamplePosition.y < 0.5)
+ color = samp;
+ else
+ color = 2 * samp;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderFragMaskAMD.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderFragMaskAMD.frag
new file mode 100644
index 00000000000..b9e8ab05961
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderFragMaskAMD.frag
@@ -0,0 +1,29 @@
+#version 450 core
+
+#extension GL_AMD_shader_fragment_mask: enable
+
+layout(binding = 0) uniform sampler2DMS s2DMS;
+layout(binding = 1) uniform isampler2DMSArray is2DMSArray;
+
+layout(binding = 2, input_attachment_index = 0) uniform usubpassInputMS usubpassMS;
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ vec4 f4 = vec4(0.0);
+
+ uint fragMask = fragmentMaskFetchAMD(s2DMS, ivec2(2, 3));
+ uint fragIndex = (fragMask & 0xF0) >> 4;
+ f4 += fragmentFetchAMD(s2DMS, ivec2(2, 3), 1);
+
+ fragMask = fragmentMaskFetchAMD(is2DMSArray, ivec3(2, 3, 1));
+ fragIndex = (fragMask & 0xF0) >> 4;
+ f4 += fragmentFetchAMD(is2DMSArray, ivec3(2, 3, 1), fragIndex);
+
+ fragMask = fragmentMaskFetchAMD(usubpassMS);
+ fragIndex = (fragMask & 0xF0) >> 4;
+ f4 += fragmentFetchAMD(usubpassMS, fragIndex);
+
+ fragColor = f4;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderStencilExport.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderStencilExport.frag
new file mode 100644
index 00000000000..62e0f573ab5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.shaderStencilExport.frag
@@ -0,0 +1,8 @@
+#version 450 core
+
+#extension GL_ARB_shader_stencil_export: enable
+
+void main()
+{
+ gl_FragStencilRefARB = 100;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.ssboAlias.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.ssboAlias.frag
new file mode 100644
index 00000000000..ed3d3e793bd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.ssboAlias.frag
@@ -0,0 +1,10 @@
+AppendStructuredBuffer<uint> Buf1 : register(u1);
+AppendStructuredBuffer<uint> Buf2 : register(u2);
+AppendStructuredBuffer<uint> Buf3 : register(u1);
+
+float4 main() : SV_Target
+{
+ Buf1.Append(10u);
+ Buf2.Append(20u);
+ return float4(1.0, 3.0, 5.0, 1.0);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc
index 62fc956be5d..e8cfe003420 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc
@@ -8,9 +8,10 @@ layout(vertices = 4) out;
out gl_PerVertex {
int gl_SecondaryViewportMaskNV[2];
vec4 gl_SecondaryPositionNV;
- layout (viewport_relative, secondary_view_offset = 1) out highp int gl_Layer;
} gl_out[4];
+layout (viewport_relative, secondary_view_offset = 1) out highp int gl_Layer;
+
void main()
{
gl_out[gl_InvocationID].gl_SecondaryViewportMaskNV[0] = 1;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.storageBuffer.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.storageBuffer.vert
new file mode 100644
index 00000000000..6dd629e8135
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.storageBuffer.vert
@@ -0,0 +1,16 @@
+#version 450
+
+#pragma use_storage_buffer
+
+uniform ub {
+ vec4 a;
+} ubi;
+
+buffer bb {
+ vec4 b;
+} bbi;
+
+void main()
+{
+ gl_Position = ubi.a + bbi.b;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.targetOpenGL.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.targetOpenGL.vert
new file mode 100644
index 00000000000..6d68a339121
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.targetOpenGL.vert
@@ -0,0 +1,10 @@
+#version 450
+
+layout(constant_id = 3) const int a = 2;
+layout(location = 2) uniform float f;
+layout(location = 4) uniform sampler2D s1;
+uniform sampler2D s2;
+
+void main()
+{
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.targetVulkan.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.targetVulkan.vert
new file mode 100644
index 00000000000..d879122b08e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.targetVulkan.vert
@@ -0,0 +1,9 @@
+#version 450
+
+layout(constant_id = 3) const int a = 2;
+
+layout(push_constant) uniform pc { float f; };
+
+void main()
+{
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.sampler.transform.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.sampler.transform.frag
new file mode 100644
index 00000000000..872d9b04d26
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.texture.sampler.transform.frag
@@ -0,0 +1,13 @@
+#version 440
+
+uniform sampler smp;
+uniform texture2D tex;
+
+in vec2 coord;
+
+out vec4 color;
+
+void main()
+{
+ color = texture(sampler2D(tex, smp), coord);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.textureBuffer.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.textureBuffer.vert
new file mode 100644
index 00000000000..fc6fa3acaa6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.textureBuffer.vert
@@ -0,0 +1,17 @@
+#version 450
+
+uniform textureBuffer tBuf;
+uniform sampler s;
+uniform samplerBuffer sBuf;
+
+uniform utextureBuffer utBuf;
+uniform itextureBuffer itBuf;
+
+void main()
+{
+ texelFetch(samplerBuffer(tBuf, s), 13);
+ texelFetch(sBuf, 13);
+ texelFetch(tBuf, 13);
+ texelFetch(utBuf, 13);
+ texelFetch(itBuf, 13);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.textureGatherBiasLod.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.textureGatherBiasLod.frag
new file mode 100644
index 00000000000..35bd035aadf
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.textureGatherBiasLod.frag
@@ -0,0 +1,88 @@
+#version 450 core
+
+#extension GL_ARB_sparse_texture2: enable
+#extension GL_AMD_texture_gather_bias_lod: enable
+
+uniform sampler2D s2D;
+uniform sampler2DArray s2DArray;
+uniform samplerCube sCube;
+uniform samplerCubeArray sCubeArray;
+
+in vec2 c2;
+in vec3 c3;
+in vec4 c4;
+
+in float lod;
+in float bias;
+
+out vec4 fragColor;
+
+void main()
+{
+ vec4 texel = vec4(0.0);
+ vec4 result = vec4(0.0);
+
+ const ivec2 offsets[4] = { ivec2(0, 0), ivec2(0, 1), ivec2(1, 0), ivec2(1, 1) };
+
+ texel += textureGather(s2D, c2, 0, bias);
+ texel += textureGather(s2DArray, c3, 1, bias);
+ texel += textureGather(sCube, c3, 2, bias);
+ texel += textureGather(sCubeArray, c4, 3, bias);
+
+ texel += textureGatherOffset(s2D, c2, offsets[0], 0, bias);
+ texel += textureGatherOffset(s2DArray, c3, offsets[1], 1, bias);
+
+ texel += textureGatherOffsets(s2D, c2, offsets, 0, bias);
+ texel += textureGatherOffsets(s2DArray, c3, offsets, 1, bias);
+
+ sparseTextureGatherARB(s2D, c2, result, 0, bias);
+ texel += result;
+ sparseTextureGatherARB(s2DArray, c3, result, 1, bias);
+ texel += result;
+ sparseTextureGatherARB(sCube, c3, result, 2, bias);
+ texel += result;
+ sparseTextureGatherARB(sCubeArray, c4, result, 2, bias);
+ texel += result;
+
+ sparseTextureGatherOffsetARB(s2D, c2, offsets[0], result, 0, bias);
+ texel += result;
+ sparseTextureGatherOffsetARB(s2DArray, c3, offsets[1], result, 1, bias);
+ texel += result;
+
+ sparseTextureGatherOffsetsARB(s2D, c2, offsets, result, 0, bias);
+ texel += result;
+ sparseTextureGatherOffsetsARB(s2DArray, c3, offsets, result, 1, bias);
+ texel += result;
+
+ texel += textureGatherLodAMD(s2D, c2, lod);
+ texel += textureGatherLodAMD(s2DArray, c3, lod, 1);
+ texel += textureGatherLodAMD(sCube, c3, lod, 2);
+ texel += textureGatherLodAMD(sCubeArray, c4, lod, 3);
+
+ texel += textureGatherLodOffsetAMD(s2D, c2, lod, offsets[0]);
+ texel += textureGatherLodOffsetAMD(s2DArray, c3, lod, offsets[1], 1);
+
+ texel += textureGatherLodOffsetsAMD(s2D, c2, lod, offsets);
+ texel += textureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, 1);
+
+ sparseTextureGatherLodAMD(s2D, c2, lod, result);
+ texel += result;
+ sparseTextureGatherLodAMD(s2DArray, c3, lod, result, 1);
+ texel += result;
+ sparseTextureGatherLodAMD(sCube, c3, lod, result, 2);
+ texel += result;
+ sparseTextureGatherLodAMD(sCubeArray, c4, lod, result, 2);
+ texel += result;
+
+ sparseTextureGatherLodOffsetAMD(s2D, c2, lod, offsets[0], result);
+ texel += result;
+ sparseTextureGatherLodOffsetAMD(s2DArray, c3, lod, offsets[1], result, 1);
+ texel += result;
+
+ sparseTextureGatherLodOffsetsAMD(s2D, c2, lod, offsets, result);
+ texel += result;
+ sparseTextureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, result, 1);
+ texel += result;
+
+ fragColor = texel;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.tesc
index f629b438ca1..7fc208a45ef 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.viewportArray2.tesc
@@ -5,12 +5,12 @@ layout(vertices = 4) out;
out gl_PerVertex {
int gl_ViewportMask[2];
- int gl_ViewportIndex;
- layout (viewport_relative) out highp int gl_Layer;
} gl_out[4];
+layout (viewport_relative) out highp int gl_Layer;
+
void main()
{
- gl_out[gl_InvocationID].gl_ViewportMask[0] = 1;
- gl_out[gl_InvocationID].gl_ViewportIndex = 2;
+ gl_out[gl_InvocationID].gl_ViewportMask[0] = 1;
+ gl_ViewportIndex = 2;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/tokenPaste.vert b/3rdparty/bgfx/3rdparty/glslang/Test/tokenPaste.vert
index 7aa113a2924..40de6f92199 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/tokenPaste.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/tokenPaste.vert
@@ -79,4 +79,8 @@ uniform M_OUTER(argPaste);
uniform M_OUTER2(argPaste);
#define rec(x)##
-rec(rec()) \ No newline at end of file
+rec(rec())
+
+#define bax(bay)
+#define baz bax(/##)
+baz
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/validate-shaders.sh b/3rdparty/bgfx/3rdparty/glslang/Test/validate-shaders.sh
new file mode 100644
index 00000000000..9211106225e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/validate-shaders.sh
@@ -0,0 +1,269 @@
+#!/bin/bash
+
+# This script validates shaders (if successfully compiled) using spirv-val.
+# It is not meant to preclude the possible addition of the validator to
+# glslang.
+
+declare -r EXE='../build/install/bin/glslangValidator'
+
+# search common locations for spirv-tools: keep first one
+for toolsdir in '../External/spirv-tools/build/tools' '../../SPIRV-Tools/build/tools' '/usr/local/bin'; do
+ [[ -z "$VAL" && -x "${toolsdir}/spirv-val" ]] && declare -r VAL="${toolsdir}/spirv-val"
+ [[ -z "$DIS" && -x "${toolsdir}/spirv-dis" ]] && declare -r DIS="${toolsdir}/spirv-dis"
+done
+
+declare -r gtests='../gtests/Hlsl.FromFile.cpp ../gtests/Spv.FromFile.cpp'
+
+declare -r targetenv='vulkan1.0'
+
+function fatal() { echo "ERROR: $@"; exit 5; }
+
+function usage
+{
+ echo
+ echo "Usage: $(basename $0) [options...] shaders..."
+ echo
+ echo " Validates shaders (if successfully compiled) through spirv-val."
+ echo
+ echo "General options:"
+ echo " --help prints this text"
+ echo " --no-color disables output colorization"
+ echo " --dump-asm dumps all successfully compiled shader assemblies"
+ echo " --dump-val dumps all validation results"
+ echo " --dump-comp dumps all compilation logs"
+ echo "Spam reduction options:"
+ echo " --no-summary disables result summaries"
+ echo " --skip-ok do not print successful validations"
+ echo " --skip-comperr do not print compilation errors"
+ echo " --skip-valerr do not print validation errors"
+ echo " --quiet synonym for --skip-ok --skip-comperr --skip-valerr --no-summary"
+ echo " --terse print terse single line progress summary"
+ echo "Disassembly options:"
+ echo " --raw-id uses raw ids for disassembly"
+ echo
+ echo "Usage examples. Note most non-hlsl tests fail to compile for expected reasons."
+ echo " Exercise all hlsl.* files:"
+ echo " $(basename $0) hlsl.*"
+ echo " Exercise all hlsl.* files, tersely:"
+ echo " $(basename $0) --terse hlsl.*"
+ echo " Print validator output for myfile.frag:"
+ echo " $(basename $0) --quiet --dump-val myfile.frag"
+ echo " Exercise hlsl.* files, only printing validation errors:"
+ echo " $(basename $0) --skip-ok --skip-comperr hlsl.*"
+
+ exit 5
+}
+
+function status()
+{
+ printf "%-40s: %b\n" "$1" "$2"
+}
+
+# make sure we can find glslang
+[[ -x "$EXE" ]] || fatal "Unable to locate $(basename "$EXE") executable"
+[[ -x "$VAL" ]] || fatal "Unable to locate spirv-val executable"
+[[ -x "$DIS" ]] || fatal "Unable to locate spirv-dis executable"
+
+for gtest in $gtests; do
+ [[ -r "$gtest" ]] || fatal "Unable to locate source file: $(basename $gtest)"
+done
+
+# temp files
+declare -r spvfile='out.spv' \
+ complog='comp.out' \
+ vallog='val.out' \
+ dislog='dis.out' \
+
+# options
+declare opt_vallog=false \
+ opt_complog=false \
+ opt_dislog=false \
+ opt_summary=true \
+ opt_stat_comperr=true \
+ opt_stat_ok=true \
+ opt_stat_valerr=true \
+ opt_color=true \
+ opt_raw_id=false \
+ opt_quiet=false \
+ opt_terse=false
+
+# clean up on exit
+trap "rm -f ${spvfile} ${complog} ${vallog} ${dislog}" EXIT
+
+# Language guesser: there is no fixed mapping from filenames to language,
+# so this examines the file and return one of:
+# hlsl
+# glsl
+# bin
+# unknown
+# This is easier WRT future expansion than a big explicit list.
+function FindLanguage()
+{
+ local test="$1"
+
+ # If it starts with hlsl, assume it's hlsl.
+ if [[ "$test" == *hlsl.* ]]; then
+ echo hlsl
+ return
+ fi
+
+ if [[ "$test" == *.spv ]]; then
+ echo bin
+ return;
+ fi
+
+ # If it doesn't start with spv., assume it's GLSL.
+ if [[ ! "$test" == spv.* && ! "$test" == remap.* ]]; then
+ echo glsl
+ return
+ fi
+
+ # Otherwise, attempt to guess from shader contents, since there's no
+ # fixed mapping of filenames to languages.
+ local contents="$(cat "$test")"
+
+ if [[ "$contents" == *#version* ]]; then
+ echo glsl
+ return
+ fi
+
+ if [[ "$contents" == *SamplerState* ||
+ "$contents" == *cbuffer* ||
+ "$contents" == *SV_* ]]; then
+ echo hlsl
+ return
+ fi
+
+ echo unknown
+}
+
+# Attempt to discover entry point
+function FindEntryPoint()
+{
+ local test="$1"
+
+ # if it's not hlsl, always use main
+ if [[ "$language" != 'hlsl' ]]; then
+ echo 'main'
+ return
+ fi
+
+ # Try to find it in test sources
+ awk -F '[ (){",]+' -e "\$2 == \"${test}\" { print \$3; found=1; } END { if (found==0) print \"main\"; } " $gtests
+}
+
+# command line options
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ # -c) glslang="$2"; shift 2;;
+ --help|-?) usage;;
+ --no-color) opt_color=false; shift;;
+ --no-summary) opt_summary=false; shift;;
+ --skip-ok) opt_stat_ok=false; shift;;
+ --skip-comperr) opt_stat_comperr=false; shift;;
+ --skip-valerr) opt_stat_valerr=false; shift;;
+ --dump-asm) opt_dislog=true; shift;;
+ --dump-val) opt_vallog=true; shift;;
+ --dump-comp) opt_complog=true; shift;;
+ --raw-id) opt_raw_id=true; shift;;
+ --quiet) opt_quiet=true; shift;;
+ --terse) opt_quiet=true
+ opt_terse=true
+ shift;;
+ --*) fatal "Unknown command line option: $1";;
+ *) break;;
+ esac
+done
+
+# this is what quiet means
+if $opt_quiet; then
+ opt_stat_ok=false
+ opt_stat_comperr=false
+ opt_stat_valerr=false
+ $opt_terse || opt_summary=false
+fi
+
+if $opt_color; then
+ declare -r white="\e[1;37m" cyan="\e[1;36m" red="\e[0;31m" no_color="\e[0m"
+else
+ declare -r white="" cyan="" red="" no_color=""
+fi
+
+# stats
+declare -i count_ok=0 count_err=0 count_nocomp=0 count_total=0
+
+declare -r dashsep='------------------------------------------------------------------------'
+
+testfiles=(${@})
+# if no shaders given, look for everything in current directory
+[[ ${#testfiles[*]} == 0 ]] && testfiles=(*.frag *.vert *.tesc *.tese *.geom *.comp)
+
+$opt_summary && printf "\nValidating: ${#testfiles[*]} shaders\n\n"
+
+# Loop through the shaders we were given, compiling them if we can.
+for test in ${testfiles[*]}
+do
+ if [[ ! -r "$test" ]]; then
+ $opt_quiet || status "$test" "${red}FILE NOT FOUND${no_color}"
+ continue
+ fi
+
+ ((++count_total))
+
+ $opt_terse && printf "\r[%-3d/%-3d : ${white}comperr=%-3d ${red}valerr=%-3d ${cyan}ok=%-3d${no_color}]" \
+ ${count_total} ${#testfiles[*]} ${count_nocomp} ${count_err} ${count_ok}
+
+ language="$(FindLanguage $test)"
+ entry="$(FindEntryPoint $test)"
+ langops=''
+
+ case "$language" in
+ hlsl) langops='-D --hlsl-iomap --hlsl-offsets';;
+ glsl) ;;
+ bin) continue;; # skip binaries
+ *) $opt_quiet || status "$test" "${red}UNKNOWN LANGUAGE${no_color}"; continue;;
+ esac
+
+ # compile the test file
+ if compout=$("$EXE" -e "$entry" $langops -V -o "$spvfile" "$test" 2>&1)
+ then
+ # successful compilation: validate
+ if valout=$("$VAL" --target-env ${targetenv} "$spvfile" 2>&1)
+ then
+ # validated OK
+ $opt_stat_ok && status "$test" "${cyan}OK${no_color}"
+ ((++count_ok))
+ else
+ # validation failure
+ $opt_stat_valerr && status "$test" "${red}VAL ERROR${no_color}"
+ printf "%s\n%s:\n%s\n" "$dashsep" "$test" "$valout" >> "$vallog"
+ ((++count_err))
+ fi
+
+ if $opt_dislog; then
+ printf "%s\n%s:\n" "$dashsep" "$test" >> "$dislog"
+ $opt_raw_id && id_opt=--raw-id
+ "$DIS" ${id_opt} "$spvfile" >> "$dislog"
+ fi
+ else
+ # compile failure
+ $opt_stat_comperr && status "$test" "${white}COMP ERROR${no_color}"
+ printf "%s\n%s\n" "$dashsep" "$compout" >> "$complog"
+ ((++count_nocomp))
+ fi
+done
+
+$opt_terse && echo
+
+# summarize
+$opt_summary && printf "\nSummary: ${white}${count_nocomp} compile errors${no_color}, ${red}${count_err} validation errors${no_color}, ${cyan}${count_ok} successes${no_color}\n"
+
+# dump logs
+$opt_vallog && [[ -r $vallog ]] && cat "$vallog"
+$opt_complog && [[ -r $complog ]] && cat "$complog"
+$opt_dislog && [[ -r $dislog ]] && cat "$dislog"
+
+# exit code
+[[ ${count_err} -gt 0 ]] && exit 1
+exit 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.frag b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.frag
index 2b686eb2a7e..14c0c30168d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.frag
@@ -43,7 +43,7 @@ layout(push_constant) buffer pcb { // ERROR, not on a buffer
layout(push_constant) uniform float pcfloat; // ERROR 2X: not on a non-block, and non-opaque outside block
layout(push_constant) uniform; // ERROR, needs an object
-
+layout(std430, push_constant) uniform pcb1 { int a; } pcb1inst;
layout(push_constant) uniform pcb2 {
int a;
}; // Okay now to have no instance name
@@ -95,3 +95,11 @@ void callUserTexture()
gl_NumSamples; // ERROR, not for Vulkan
}
+
+void noise()
+{
+ noise1(dv4);
+ noise2(4.0);
+ noise3(vec2(3));
+ noise4(dv4);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert
index b234c75bb43..e670e958d0e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert
@@ -45,3 +45,19 @@ layout(set = 1, push_constant) uniform badpc { int a; } badpcI; // ERROR, no de
#if VULKAN != 100
#error VULKAN should be 100
#endif
+
+float AofA0[2][arraySize]; // ERROR, only outer dimension
+float AofA1[arraySize][arraySize]; // ERROR, only outer dimension
+float AofA2[arraySize][2 + arraySize]; // ERROR, only outer dimension
+float AofA3[arraySize][2];
+
+out ban1 { // ERROR, only outer dimension
+ float f;
+} bai1[2][arraySize];
+
+out ban2 {
+ float f;
+} bai2[arraySize][2];
+
+layout(binding = 3000) uniform sampler2D s3000;
+layout(binding = 3001) uniform b3001 { int a; };
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt
index dac8cb89210..ac3973373ae 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt
@@ -31,9 +31,7 @@ set(SOURCES
MachineIndependent/preprocessor/Pp.cpp
MachineIndependent/preprocessor/PpAtom.cpp
MachineIndependent/preprocessor/PpContext.cpp
- MachineIndependent/preprocessor/PpMemory.cpp
MachineIndependent/preprocessor/PpScanner.cpp
- MachineIndependent/preprocessor/PpSymbols.cpp
MachineIndependent/preprocessor/PpTokens.cpp
MachineIndependent/propagateNoContraction.cpp
GenericCodeGen/CodeGen.cpp
@@ -82,9 +80,10 @@ set(HEADERS
add_library(glslang STATIC ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS})
set_property(TARGET glslang PROPERTY FOLDER glslang)
+set_property(TARGET glslang PROPERTY POSITION_INDEPENDENT_CODE ON)
target_link_libraries(glslang OGLCompiler OSDependent)
if(ENABLE_HLSL)
- target_link_libraries(glslang HLSL)
+ target_link_libraries(glslang HLSL)
endif()
if(WIN32)
@@ -95,10 +94,14 @@ if(WIN32)
source_group("MachineIndependent\\Preprocessor" REGULAR_EXPRESSION "MachineIndependent/preprocessor/*")
endif(WIN32)
-install(TARGETS glslang
- ARCHIVE DESTINATION lib)
+if(ENABLE_GLSLANG_INSTALL)
+ install(TARGETS glslang
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif(ENABLE_GLSLANG_INSTALL)
-foreach(file ${HEADERS})
- get_filename_component(dir ${file} DIRECTORY)
- install(FILES ${file} DESTINATION include/glslang/${dir})
-endforeach()
+if(ENABLE_GLSLANG_INSTALL)
+ foreach(file ${HEADERS})
+ get_filename_component(dir ${file} DIRECTORY)
+ install(FILES ${file} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/${dir})
+ endforeach()
+endif(ENABLE_GLSLANG_INSTALL)
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h
index 230a6b9cb06..0a46a7c0f06 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h
@@ -53,6 +53,10 @@ enum TBasicType {
EbtUint,
EbtInt64,
EbtUint64,
+#ifdef AMD_EXTENSIONS
+ EbtInt16,
+ EbtUint16,
+#endif
EbtBool,
EbtAtomicUint,
EbtSampler,
@@ -189,10 +193,12 @@ enum TBuiltInVariable {
EbvFragColor,
EbvFragData,
EbvFragDepth,
+ EbvFragStencilRef,
EbvSampleId,
EbvSamplePosition,
EbvSampleMask,
EbvHelperInvocation,
+
#ifdef AMD_EXTENSIONS
EbvBaryCoordNoPersp,
EbvBaryCoordNoPerspCentroid,
@@ -218,7 +224,16 @@ enum TBuiltInVariable {
// to one of the above.
EbvFragDepthGreater,
EbvFragDepthLesser,
- EbvStencilRef,
+ EbvGsOutputStream,
+ EbvOutputPatch,
+ EbvInputPatch,
+
+ // structbuffer types
+ EbvAppendConsume, // no need to differentiate append and consume
+ EbvRWStructuredBuffer,
+ EbvStructuredBuffer,
+ EbvByteAddressBuffer,
+ EbvRWByteAddressBuffer,
EbvLast
};
@@ -315,10 +330,12 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvFragColor: return "FragColor";
case EbvFragData: return "FragData";
case EbvFragDepth: return "FragDepth";
+ case EbvFragStencilRef: return "FragStencilRef";
case EbvSampleId: return "SampleId";
case EbvSamplePosition: return "SamplePosition";
case EbvSampleMask: return "SampleMaskIn";
case EbvHelperInvocation: return "HelperInvocation";
+
#ifdef AMD_EXTENSIONS
case EbvBaryCoordNoPersp: return "BaryCoordNoPersp";
case EbvBaryCoordNoPerspCentroid: return "BaryCoordNoPerspCentroid";
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h
index 17c2bd984fc..c3814f0bf97 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h
@@ -63,7 +63,7 @@ std::string to_string(const T& val) {
}
#endif
-#if defined(_MSC_VER) && _MSC_VER < 1700
+#if defined(_MSC_VER) && _MSC_VER < 1800
inline long long int strtoll (const char* str, char** endptr, int base)
{
return _strtoi64(str, endptr, base);
@@ -78,6 +78,10 @@ inline long long int atoll (const char* str)
}
#endif
+#if defined(_MSC_VER)
+#define strdup _strdup
+#endif
+
/* windows only pragma */
#ifdef _MSC_VER
#pragma warning(disable : 4786) // Don't warn about too long identifiers
@@ -222,6 +226,7 @@ inline const TString String(const int i, const int /*base*/ = 10)
struct TSourceLoc {
void init() { name = nullptr; string = 0; line = 0; column = 0; }
+ void init(int stringNum) { init(); string = stringNum; }
// Returns the name if it exists. Otherwise, returns the string number.
std::string getStringNameOrNum(bool quoteStringName = true) const
{
@@ -235,7 +240,10 @@ struct TSourceLoc {
int column;
};
-typedef TMap<TString, TString> TPragmaTable;
+class TPragmaTable : public TMap<TString, TString> {
+public:
+ POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
+};
const int MaxTokenLength = 1024;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InitializeGlobals.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InitializeGlobals.h
index 4cf2dca7c40..95d0a40e99a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InitializeGlobals.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/InitializeGlobals.h
@@ -37,10 +37,7 @@
namespace glslang {
-void InitializeMemoryPools();
-void FreeGlobalPools();
bool InitializePoolIndex();
-void FreePoolIndex();
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h
index 69bacb156f8..0e237a6a2c0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h
@@ -250,15 +250,8 @@ private:
// different times. But a simple use is to have a global pop
// with everyone using the same global allocator.
//
-typedef TPoolAllocator* PoolAllocatorPointer;
extern TPoolAllocator& GetThreadPoolAllocator();
-
-struct TThreadMemoryPools
-{
- TPoolAllocator* threadPoolAllocator;
-};
-
-void SetThreadPoolAllocator(TPoolAllocator& poolAllocator);
+void SetThreadPoolAllocator(TPoolAllocator* poolAllocator);
//
// This STL compatible allocator is intended to be used as the allocator
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ShHandle.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ShHandle.h
index 64ba6d636c0..df07bd8edad 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ShHandle.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ShHandle.h
@@ -56,11 +56,14 @@ class TUniformMap;
//
class TShHandleBase {
public:
- TShHandleBase() { }
- virtual ~TShHandleBase() { }
+ TShHandleBase() { pool = new glslang::TPoolAllocator; }
+ virtual ~TShHandleBase() { delete pool; }
virtual TCompiler* getAsCompiler() { return 0; }
virtual TLinker* getAsLinker() { return 0; }
virtual TUniformMap* getAsUniformMap() { return 0; }
+ virtual glslang::TPoolAllocator* getPool() const { return pool; }
+private:
+ glslang::TPoolAllocator* pool;
};
//
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h
index 2207d0b3f95..b5b91f527ea 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h
@@ -43,6 +43,8 @@
#include "../Public/ShaderLang.h"
#include "arrays.h"
+#include <algorithm>
+
namespace glslang {
const int GlslangMaxTypeLength = 200; // TODO: need to print block/struct one member per line, so this can stay bounded
@@ -78,7 +80,19 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
bool combined : 1; // true means texture is combined with a sampler, false means texture with no sampler
bool sampler : 1; // true means a pure sampler, other fields should be clear()
bool external : 1; // GL_OES_EGL_image_external
- unsigned int vectorSize : 3; // return vector size. TODO: support arbitrary types.
+ unsigned int vectorSize : 3; // vector return type size.
+
+ // Some languages support structures as sample results. Storing the whole structure in the
+ // TSampler is too large, so there is an index to a separate table.
+ static const unsigned structReturnIndexBits = 4; // number of index bits to use.
+ static const unsigned structReturnSlots = (1<<structReturnIndexBits)-1; // number of valid values
+ static const unsigned noReturnStruct = structReturnSlots; // value if no return struct type.
+
+ // Index into a language specific table of texture return structures.
+ unsigned int structReturnIndex : structReturnIndexBits;
+
+ // Encapsulate getting members' vector sizes packed into the vectorSize bitfield.
+ unsigned int getVectorSize() const { return vectorSize; }
bool isImage() const { return image && dim != EsdSubpass; }
bool isSubpass() const { return dim == EsdSubpass; }
@@ -88,6 +102,7 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
bool isShadow() const { return shadow; }
bool isArrayed() const { return arrayed; }
bool isMultiSample() const { return ms; }
+ bool hasReturnStruct() const { return structReturnIndex != noReturnStruct; }
void clear()
{
@@ -100,6 +115,9 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
combined = false;
sampler = false;
external = false;
+ structReturnIndex = noReturnStruct;
+
+ // by default, returns a single vec4;
vectorSize = 4;
}
@@ -158,16 +176,17 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
bool operator==(const TSampler& right) const
{
- return type == right.type &&
- dim == right.dim &&
- arrayed == right.arrayed &&
- shadow == right.shadow &&
- ms == right.ms &&
- image == right.image &&
- combined == right.combined &&
- sampler == right.sampler &&
- external == right.external &&
- vectorSize == right.vectorSize;
+ return type == right.type &&
+ dim == right.dim &&
+ arrayed == right.arrayed &&
+ shadow == right.shadow &&
+ ms == right.ms &&
+ image == right.image &&
+ combined == right.combined &&
+ sampler == right.sampler &&
+ external == right.external &&
+ vectorSize == right.vectorSize &&
+ structReturnIndex == right.structReturnIndex;
}
bool operator!=(const TSampler& right) const
@@ -188,8 +207,6 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
case EbtFloat: break;
case EbtInt: s.append("i"); break;
case EbtUint: s.append("u"); break;
- case EbtInt64: s.append("i64"); break;
- case EbtUint64: s.append("u64"); break;
default: break; // some compilers want this
}
if (image) {
@@ -398,6 +415,7 @@ public:
invariant = false;
noContraction = false;
makeTemporary();
+ declaredBuiltIn = EbvNone;
}
// drop qualifiers that don't belong in a temporary variable
@@ -455,6 +473,7 @@ public:
const char* semanticName;
TStorageQualifier storage : 6;
TBuiltInVariable builtIn : 8;
+ TBuiltInVariable declaredBuiltIn : 8;
TPrecisionQualifier precision : 3;
bool invariant : 1; // require canonical treatment for cross-shader invariance
bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects
@@ -966,8 +985,10 @@ struct TShaderQualifiers {
int localSize[3]; // compute shader
int localSizeSpecId[3]; // compute shader specialization id for gl_WorkGroupSize
bool earlyFragmentTests; // fragment input
+ bool postDepthCoverage; // fragment input
TLayoutDepth layoutDepth;
bool blendEquation; // true if any blend equation was specified
+ int numViews; // multiview extenstions
#ifdef NV_EXTENSIONS
bool layoutOverrideCoverage; // true if layout override_coverage set
@@ -990,8 +1011,10 @@ struct TShaderQualifiers {
localSizeSpecId[1] = TQualifier::layoutNotSet;
localSizeSpecId[2] = TQualifier::layoutNotSet;
earlyFragmentTests = false;
+ postDepthCoverage = false;
layoutDepth = EldNone;
blendEquation = false;
+ numViews = TQualifier::layoutNotSet;
#ifdef NV_EXTENSIONS
layoutOverrideCoverage = false;
#endif
@@ -1027,10 +1050,14 @@ struct TShaderQualifiers {
}
if (src.earlyFragmentTests)
earlyFragmentTests = true;
+ if (src.postDepthCoverage)
+ postDepthCoverage = true;
if (src.layoutDepth)
layoutDepth = src.layoutDepth;
if (src.blendEquation)
blendEquation = src.blendEquation;
+ if (src.numViews != TQualifier::layoutNotSet)
+ numViews = src.numViews;
#ifdef NV_EXTENSIONS
if (src.layoutOverrideCoverage)
layoutOverrideCoverage = src.layoutOverrideCoverage;
@@ -1306,6 +1333,7 @@ public:
virtual TBasicType getBasicType() const { return basicType; }
virtual const TSampler& getSampler() const { return sampler; }
+ virtual TSampler& getSampler() { return sampler; }
virtual TQualifier& getQualifier() { return qualifier; }
virtual const TQualifier& getQualifier() const { return qualifier; }
@@ -1335,174 +1363,109 @@ public:
#else
virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble; }
#endif
-
+ virtual bool isIntegerDomain() const
+ {
+ switch (basicType) {
+ case EbtInt:
+ case EbtUint:
+ case EbtInt64:
+ case EbtUint64:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ case EbtUint16:
+#endif
+ case EbtAtomicUint:
+ return true;
+ default:
+ break;
+ }
+ return false;
+ }
virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint; }
+ virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
// "Image" is a superset of "Subpass"
virtual bool isImage() const { return basicType == EbtSampler && getSampler().isImage(); }
virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
- virtual bool isBuiltInInterstageIO(EShLanguage language) const
- {
- return isPerVertexAndBuiltIn(language) || isLooseAndBuiltIn(language);
- }
-
- // Return true if this is an interstage IO builtin
- virtual bool isPerVertexAndBuiltIn(EShLanguage language) const
+ // return true if this type contains any subtype which satisfies the given predicate.
+ template <typename P>
+ bool contains(P predicate) const
{
- if (language == EShLangFragment)
- return false;
-
- // Any non-fragment stage
- switch (getQualifier().builtIn) {
- case EbvPosition:
- case EbvPointSize:
- case EbvClipDistance:
- case EbvCullDistance:
-#ifdef NV_EXTENSIONS
- case EbvLayer:
- case EbvViewportMaskNV:
- case EbvSecondaryPositionNV:
- case EbvSecondaryViewportMaskNV:
- case EbvPositionPerViewNV:
- case EbvViewportMaskPerViewNV:
-#endif
+ if (predicate(this))
return true;
- default:
- return false;
- }
- }
- // Return true if this is a loose builtin
- virtual bool isLooseAndBuiltIn(EShLanguage language) const
- {
- if (getQualifier().builtIn == EbvNone)
- return false;
+ const auto hasa = [predicate](const TTypeLoc& tl) { return tl.type->contains(predicate); };
- return !isPerVertexAndBuiltIn(language);
+ return structure && std::any_of(structure->begin(), structure->end(), hasa);
}
-
+
// Recursively checks if the type contains the given basic type
virtual bool containsBasicType(TBasicType checkType) const
{
- if (basicType == checkType)
- return true;
- if (! structure)
- return false;
- for (unsigned int i = 0; i < structure->size(); ++i) {
- if ((*structure)[i].type->containsBasicType(checkType))
- return true;
- }
- return false;
+ return contains([checkType](const TType* t) { return t->basicType == checkType; } );
}
// Recursively check the structure for any arrays, needed for some error checks
virtual bool containsArray() const
{
- if (isArray())
- return true;
- if (structure == nullptr)
- return false;
- for (unsigned int i = 0; i < structure->size(); ++i) {
- if ((*structure)[i].type->containsArray())
- return true;
- }
- return false;
+ return contains([](const TType* t) { return t->isArray(); } );
}
// Check the structure for any structures, needed for some error checks
virtual bool containsStructure() const
{
- if (structure == nullptr)
- return false;
- for (unsigned int i = 0; i < structure->size(); ++i) {
- if ((*structure)[i].type->structure)
- return true;
- }
- return false;
+ return contains([this](const TType* t) { return t != this && t->isStruct(); } );
}
// Recursively check the structure for any implicitly-sized arrays, needed for triggering a copyUp().
virtual bool containsImplicitlySizedArray() const
{
- if (isImplicitlySizedArray())
- return true;
- if (structure == nullptr)
- return false;
- for (unsigned int i = 0; i < structure->size(); ++i) {
- if ((*structure)[i].type->containsImplicitlySizedArray())
- return true;
- }
- return false;
+ return contains([](const TType* t) { return t->isImplicitlySizedArray(); } );
}
virtual bool containsOpaque() const
{
- if (isOpaque())
- return true;
- if (! structure)
- return false;
- for (unsigned int i = 0; i < structure->size(); ++i) {
- if ((*structure)[i].type->containsOpaque())
- return true;
- }
- return false;
+ return contains([](const TType* t) { return t->isOpaque(); } );
}
- // Recursively checks if the type contains an interstage IO builtin
- virtual bool containsBuiltInInterstageIO(EShLanguage language) const
+ // Recursively checks if the type contains a built-in variable
+ virtual bool containsBuiltIn() const
{
- if (isBuiltInInterstageIO(language))
- return true;
-
- if (! structure)
- return false;
- for (unsigned int i = 0; i < structure->size(); ++i) {
- if ((*structure)[i].type->containsBuiltInInterstageIO(language))
- return true;
- }
- return false;
+ return contains([](const TType* t) { return t->isBuiltIn(); } );
}
virtual bool containsNonOpaque() const
{
- // list all non-opaque types
- switch (basicType) {
- case EbtVoid:
- case EbtFloat:
- case EbtDouble:
+ const auto nonOpaque = [](const TType* t) {
+ switch (t->basicType) {
+ case EbtVoid:
+ case EbtFloat:
+ case EbtDouble:
#ifdef AMD_EXTENSIONS
- case EbtFloat16:
+ case EbtFloat16:
#endif
- case EbtInt:
- case EbtUint:
- case EbtInt64:
- case EbtUint64:
- case EbtBool:
- return true;
- default:
- break;
- }
- if (! structure)
- return false;
- for (unsigned int i = 0; i < structure->size(); ++i) {
- if ((*structure)[i].type->containsNonOpaque())
+ case EbtInt:
+ case EbtUint:
+ case EbtInt64:
+ case EbtUint64:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ case EbtUint16:
+#endif
+ case EbtBool:
return true;
- }
- return false;
+ default:
+ return false;
+ }
+ };
+
+ return contains(nonOpaque);
}
virtual bool containsSpecializationSize() const
{
- if (isArray() && arraySizes->containsNode())
- return true;
- if (! structure)
- return false;
- for (unsigned int i = 0; i < structure->size(); ++i) {
- if ((*structure)[i].type->containsSpecializationSize())
- return true;
- }
- return false;
+ return contains([](const TType* t) { return t->isArray() && t->arraySizes->isOuterSpecialization(); } );
}
// Array editing methods. Array descriptors can be shared across
@@ -1573,6 +1536,10 @@ public:
case EbtUint: return "uint";
case EbtInt64: return "int64_t";
case EbtUint64: return "uint64_t";
+#ifdef AMD_EXTENSIONS
+ case EbtInt16: return "int16_t";
+ case EbtUint16: return "uint16_t";
+#endif
case EbtBool: return "bool";
case EbtAtomicUint: return "atomic_uint";
case EbtSampler: return "sampler/image";
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h
index b6b5e479d74..1660a99f9c2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h
@@ -264,6 +264,29 @@ struct TArraySizes {
return false;
}
+ bool clearInnerImplicit()
+ {
+ for (int d = 1; d < sizes.size(); ++d) {
+ if (sizes.getDimSize(d) == (unsigned)UnsizedArraySize)
+ setDimSize(d, 1);
+ }
+
+ return false;
+ }
+ bool isInnerSpecialization() const
+ {
+ for (int d = 1; d < sizes.size(); ++d) {
+ if (sizes.getDimNode(d) != nullptr)
+ return true;
+ }
+
+ return false;
+ }
+ bool isOuterSpecialization()
+ {
+ return sizes.getDimNode(0) != nullptr;
+ }
+
bool isImplicit() const { return getOuterSize() == UnsizedArraySize || isInnerImplicit(); }
void addOuterSizes(const TArraySizes& s) { sizes.push_front(s.sizes); }
void dereference() { sizes.pop_front(); }
@@ -288,18 +311,6 @@ struct TArraySizes {
return true;
}
- // Returns true if any of the dimensions of the array is sized with a node
- // instead of a front-end compile-time constant.
- bool containsNode()
- {
- for (int d = 0; d < sizes.size(); ++d) {
- if (sizes.getDimNode(d) != nullptr)
- return true;
- }
-
- return false;
- }
-
bool operator==(const TArraySizes& rhs) { return sizes == rhs.sizes; }
bool operator!=(const TArraySizes& rhs) { return sizes != rhs.sizes; }
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h
index 934994d9aa4..4a28e35672d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h
@@ -141,6 +141,42 @@ enum TOperator {
EOpConvFloat16ToDouble,
EOpConvFloat16ToInt64,
EOpConvFloat16ToUint64,
+
+ EOpConvBoolToInt16,
+ EOpConvIntToInt16,
+ EOpConvUintToInt16,
+ EOpConvFloatToInt16,
+ EOpConvDoubleToInt16,
+ EOpConvFloat16ToInt16,
+ EOpConvInt64ToInt16,
+ EOpConvUint64ToInt16,
+ EOpConvUint16ToInt16,
+ EOpConvInt16ToBool,
+ EOpConvInt16ToInt,
+ EOpConvInt16ToUint,
+ EOpConvInt16ToFloat,
+ EOpConvInt16ToDouble,
+ EOpConvInt16ToFloat16,
+ EOpConvInt16ToInt64,
+ EOpConvInt16ToUint64,
+
+ EOpConvBoolToUint16,
+ EOpConvIntToUint16,
+ EOpConvUintToUint16,
+ EOpConvFloatToUint16,
+ EOpConvDoubleToUint16,
+ EOpConvFloat16ToUint16,
+ EOpConvInt64ToUint16,
+ EOpConvUint64ToUint16,
+ EOpConvInt16ToUint16,
+ EOpConvUint16ToBool,
+ EOpConvUint16ToInt,
+ EOpConvUint16ToUint,
+ EOpConvUint16ToFloat,
+ EOpConvUint16ToDouble,
+ EOpConvUint16ToFloat16,
+ EOpConvUint16ToInt64,
+ EOpConvUint16ToUint64,
#endif
//
@@ -244,6 +280,12 @@ enum TOperator {
EOpDoubleBitsToUint64,
EOpInt64BitsToDouble,
EOpUint64BitsToDouble,
+#ifdef AMD_EXTENSIONS
+ EOpFloat16BitsToInt16,
+ EOpFloat16BitsToUint16,
+ EOpInt16BitsToFloat16,
+ EOpUint16BitsToFloat16,
+#endif
EOpPackSnorm2x16,
EOpUnpackSnorm2x16,
EOpPackUnorm2x16,
@@ -263,6 +305,14 @@ enum TOperator {
#ifdef AMD_EXTENSIONS
EOpPackFloat2x16,
EOpUnpackFloat2x16,
+ EOpPackInt2x16,
+ EOpUnpackInt2x16,
+ EOpPackUint2x16,
+ EOpUnpackUint2x16,
+ EOpPackInt4x16,
+ EOpUnpackInt4x16,
+ EOpPackUint4x16,
+ EOpUnpackUint4x16,
#endif
EOpLength,
@@ -367,9 +417,18 @@ enum TOperator {
EOpAtomicExchange,
EOpAtomicCompSwap,
- EOpAtomicCounterIncrement,
- EOpAtomicCounterDecrement,
+ EOpAtomicCounterIncrement, // results in pre-increment value
+ EOpAtomicCounterDecrement, // results in post-decrement value
EOpAtomicCounter,
+ EOpAtomicCounterAdd,
+ EOpAtomicCounterSubtract,
+ EOpAtomicCounterMin,
+ EOpAtomicCounterMax,
+ EOpAtomicCounterAnd,
+ EOpAtomicCounterOr,
+ EOpAtomicCounterXor,
+ EOpAtomicCounterExchange,
+ EOpAtomicCounterCompSwap,
EOpAny,
EOpAll,
@@ -394,15 +453,27 @@ enum TOperator {
EOpConstructUint,
EOpConstructInt64,
EOpConstructUint64,
+#ifdef AMD_EXTENSIONS
+ EOpConstructInt16,
+ EOpConstructUint16,
+#endif
EOpConstructBool,
EOpConstructFloat,
EOpConstructDouble,
+#ifdef AMD_EXTENSIONS
+ EOpConstructFloat16,
+#endif
EOpConstructVec2,
EOpConstructVec3,
EOpConstructVec4,
EOpConstructDVec2,
EOpConstructDVec3,
EOpConstructDVec4,
+#ifdef AMD_EXTENSIONS
+ EOpConstructF16Vec2,
+ EOpConstructF16Vec3,
+ EOpConstructF16Vec4,
+#endif
EOpConstructBVec2,
EOpConstructBVec3,
EOpConstructBVec4,
@@ -418,6 +489,14 @@ enum TOperator {
EOpConstructU64Vec2,
EOpConstructU64Vec3,
EOpConstructU64Vec4,
+#ifdef AMD_EXTENSIONS
+ EOpConstructI16Vec2,
+ EOpConstructI16Vec3,
+ EOpConstructI16Vec4,
+ EOpConstructU16Vec2,
+ EOpConstructU16Vec3,
+ EOpConstructU16Vec4,
+#endif
EOpConstructMat2x2,
EOpConstructMat2x3,
EOpConstructMat2x4,
@@ -436,11 +515,34 @@ enum TOperator {
EOpConstructDMat4x2,
EOpConstructDMat4x3,
EOpConstructDMat4x4,
+ EOpConstructIMat2x2,
+ EOpConstructIMat2x3,
+ EOpConstructIMat2x4,
+ EOpConstructIMat3x2,
+ EOpConstructIMat3x3,
+ EOpConstructIMat3x4,
+ EOpConstructIMat4x2,
+ EOpConstructIMat4x3,
+ EOpConstructIMat4x4,
+ EOpConstructUMat2x2,
+ EOpConstructUMat2x3,
+ EOpConstructUMat2x4,
+ EOpConstructUMat3x2,
+ EOpConstructUMat3x3,
+ EOpConstructUMat3x4,
+ EOpConstructUMat4x2,
+ EOpConstructUMat4x3,
+ EOpConstructUMat4x4,
+ EOpConstructBMat2x2,
+ EOpConstructBMat2x3,
+ EOpConstructBMat2x4,
+ EOpConstructBMat3x2,
+ EOpConstructBMat3x3,
+ EOpConstructBMat3x4,
+ EOpConstructBMat4x2,
+ EOpConstructBMat4x3,
+ EOpConstructBMat4x4,
#ifdef AMD_EXTENSIONS
- EOpConstructFloat16,
- EOpConstructF16Vec2,
- EOpConstructF16Vec3,
- EOpConstructF16Vec4,
EOpConstructF16Mat2x2,
EOpConstructF16Mat2x3,
EOpConstructF16Mat2x4,
@@ -491,6 +593,10 @@ enum TOperator {
EOpImageQuerySamples,
EOpImageLoad,
EOpImageStore,
+#ifdef AMD_EXTENSIONS
+ EOpImageLoadLod,
+ EOpImageStoreLod,
+#endif
EOpImageAtomicAdd,
EOpImageAtomicMin,
EOpImageAtomicMax,
@@ -503,6 +609,9 @@ enum TOperator {
EOpSubpassLoad,
EOpSubpassLoadMS,
EOpSparseImageLoad,
+#ifdef AMD_EXTENSIONS
+ EOpSparseImageLoadLod,
+#endif
EOpImageGuardEnd,
@@ -540,6 +649,13 @@ enum TOperator {
EOpTextureOffsetClamp,
EOpTextureGradClamp,
EOpTextureGradOffsetClamp,
+#ifdef AMD_EXTENSIONS
+ EOpTextureGatherLod,
+ EOpTextureGatherLodOffset,
+ EOpTextureGatherLodOffsets,
+ EOpFragmentMaskFetch,
+ EOpFragmentFetch,
+#endif
EOpSparseTextureGuardBegin,
@@ -559,6 +675,11 @@ enum TOperator {
EOpSparseTextureOffsetClamp,
EOpSparseTextureGradClamp,
EOpSparseTextureGradOffsetClamp,
+#ifdef AMD_EXTENSIONS
+ EOpSparseTextureGatherLod,
+ EOpSparseTextureGatherLodOffset,
+ EOpSparseTextureGatherLodOffsets,
+#endif
EOpSparseTextureGuardEnd,
EOpSamplingGuardEnd,
@@ -633,6 +754,10 @@ enum TOperator {
EOpMethodStore2, // ...
EOpMethodStore3, // ...
EOpMethodStore4, // ...
+ EOpMethodIncrementCounter, // ...
+ EOpMethodDecrementCounter, // ...
+ // EOpMethodAppend is defined for geo shaders below
+ EOpMethodConsume,
// SM5 texture methods
EOpMethodGatherRed, // These are covered under the above EOpMethodSample comment about
@@ -665,6 +790,7 @@ class TIntermBranch;
class TIntermTyped;
class TIntermMethod;
class TIntermSymbol;
+class TIntermLoop;
} // end namespace glslang
@@ -692,6 +818,7 @@ public:
virtual glslang::TIntermMethod* getAsMethodNode() { return 0; }
virtual glslang::TIntermSymbol* getAsSymbolNode() { return 0; }
virtual glslang::TIntermBranch* getAsBranchNode() { return 0; }
+ virtual glslang::TIntermLoop* getAsLoopNode() { return 0; }
virtual const glslang::TIntermTyped* getAsTyped() const { return 0; }
virtual const glslang::TIntermOperator* getAsOperator() const { return 0; }
@@ -704,6 +831,7 @@ public:
virtual const glslang::TIntermMethod* getAsMethodNode() const { return 0; }
virtual const glslang::TIntermSymbol* getAsSymbolNode() const { return 0; }
virtual const glslang::TIntermBranch* getAsBranchNode() const { return 0; }
+ virtual const glslang::TIntermLoop* getAsLoopNode() const { return 0; }
virtual ~TIntermNode() { }
protected:
@@ -747,6 +875,8 @@ public:
virtual bool isVector() const { return type.isVector(); }
virtual bool isScalar() const { return type.isScalar(); }
virtual bool isStruct() const { return type.isStruct(); }
+ virtual bool isFloatingDomain() const { return type.isFloatingDomain(); }
+ virtual bool isIntegerDomain() const { return type.isIntegerDomain(); }
TString getCompleteString() const { return type.getCompleteString(); }
protected:
@@ -755,6 +885,24 @@ protected:
};
//
+// Selection control hints
+//
+enum TSelectionControl {
+ ESelectionControlNone,
+ ESelectionControlFlatten,
+ ESelectionControlDontFlatten,
+};
+
+//
+// Loop control hints
+//
+enum TLoopControl {
+ ELoopControlNone,
+ ELoopControlUnroll,
+ ELoopControlDontUnroll,
+};
+
+//
// Handle for, do-while, and while loops.
//
class TIntermLoop : public TIntermNode {
@@ -763,17 +911,27 @@ public:
body(aBody),
test(aTest),
terminal(aTerminal),
- first(testFirst) { }
+ first(testFirst),
+ control(ELoopControlNone)
+ { }
+
+ virtual TIntermLoop* getAsLoopNode() { return this; }
+ virtual const TIntermLoop* getAsLoopNode() const { return this; }
virtual void traverse(TIntermTraverser*);
TIntermNode* getBody() const { return body; }
TIntermTyped* getTest() const { return test; }
TIntermTyped* getTerminal() const { return terminal; }
bool testFirst() const { return first; }
+
+ void setLoopControl(TLoopControl c) { control = c; }
+ TLoopControl getLoopControl() const { return control; }
+
protected:
TIntermNode* body; // code to loop over
TIntermTyped* test; // exit condition associated with loop, could be 0 for 'for' loops
TIntermTyped* terminal; // exists for for-loops
bool first; // true for while and for, not for do-while
+ TLoopControl control; // loop control hint
};
//
@@ -821,7 +979,11 @@ public:
// per process threadPoolAllocator, then it causes increased memory usage per compile
// it is essential to use "symbol = sym" to assign to symbol
TIntermSymbol(int i, const TString& n, const TType& t)
- : TIntermTyped(t), id(i), constSubtree(nullptr)
+ : TIntermTyped(t), id(i),
+#ifdef ENABLE_HLSL
+ flattenSubset(-1),
+#endif
+ constSubtree(nullptr)
{ name = n; }
virtual int getId() const { return id; }
virtual const TString& getName() const { return name; }
@@ -832,9 +994,20 @@ public:
const TConstUnionArray& getConstArray() const { return constArray; }
void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; }
TIntermTyped* getConstSubtree() const { return constSubtree; }
+#ifdef ENABLE_HLSL
+ void setFlattenSubset(int subset) { flattenSubset = subset; }
+ int getFlattenSubset() const { return flattenSubset; } // -1 means full object
+#endif
+
+ // This is meant for cases where a node has already been constructed, and
+ // later on, it becomes necessary to switch to a different symbol.
+ virtual void switchId(int newId) { id = newId; }
protected:
int id; // the unique id of the symbol this node represents
+#ifdef ENABLE_HLSL
+ int flattenSubset; // how deeply the flattened object rooted at id has been dereferenced
+#endif
TString name; // the name of the symbol this node represents
TConstUnionArray constArray; // if the symbol is a front-end compile-time constant, this is its value
TIntermTyped* constSubtree;
@@ -872,6 +1045,9 @@ struct TCrackedTextureOp {
bool grad;
bool subpass;
bool lodClamp;
+#ifdef AMD_EXTENSIONS
+ bool fragMask;
+#endif
};
//
@@ -919,6 +1095,9 @@ public:
cracked.grad = false;
cracked.subpass = false;
cracked.lodClamp = false;
+#ifdef AMD_EXTENSIONS
+ cracked.fragMask = false;
+#endif
switch (op) {
case EOpImageQuerySize:
@@ -1027,6 +1206,38 @@ public:
cracked.gather = true;
cracked.offsets = true;
break;
+#ifdef AMD_EXTENSIONS
+ case EOpTextureGatherLod:
+ case EOpSparseTextureGatherLod:
+ cracked.gather = true;
+ cracked.lod = true;
+ break;
+ case EOpTextureGatherLodOffset:
+ case EOpSparseTextureGatherLodOffset:
+ cracked.gather = true;
+ cracked.offset = true;
+ cracked.lod = true;
+ break;
+ case EOpTextureGatherLodOffsets:
+ case EOpSparseTextureGatherLodOffsets:
+ cracked.gather = true;
+ cracked.offsets = true;
+ cracked.lod = true;
+ break;
+ case EOpImageLoadLod:
+ case EOpImageStoreLod:
+ case EOpSparseImageLoadLod:
+ cracked.lod = true;
+ break;
+ case EOpFragmentMaskFetch:
+ cracked.subpass = sampler.dim == EsdSubpass;
+ cracked.fragMask = true;
+ break;
+ case EOpFragmentFetch:
+ cracked.subpass = sampler.dim == EsdSubpass;
+ cracked.fragMask = true;
+ break;
+#endif
case EOpSubpassLoad:
case EOpSubpassLoadMS:
cracked.subpass = true;
@@ -1086,14 +1297,14 @@ protected:
};
typedef TVector<TIntermNode*> TIntermSequence;
-typedef TVector<int> TQualifierList;
+typedef TVector<TStorageQualifier> TQualifierList;
//
// Nodes that operate on an arbitrary sized set of children.
//
class TIntermAggregate : public TIntermOperator {
public:
- TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(0) { }
- TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(0) { }
+ TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { }
+ TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(nullptr) { }
~TIntermAggregate() { delete pragmaTable; }
virtual TIntermAggregate* getAsAggregate() { return this; }
virtual const TIntermAggregate* getAsAggregate() const { return this; }
@@ -1111,7 +1322,7 @@ public:
void setDebug(bool d) { debug = d; }
bool getOptimize() const { return optimize; }
bool getDebug() const { return debug; }
- void addToPragmaTable(const TPragmaTable& pTable);
+ void setPragmaTable(const TPragmaTable& pTable);
const TPragmaTable& getPragmaTable() const { return *pragmaTable; }
protected:
TIntermAggregate(const TIntermAggregate&); // disallow copy constructor
@@ -1131,19 +1342,22 @@ protected:
class TIntermSelection : public TIntermTyped {
public:
TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB) :
- TIntermTyped(EbtVoid), condition(cond), trueBlock(trueB), falseBlock(falseB) {}
+ TIntermTyped(EbtVoid), condition(cond), trueBlock(trueB), falseBlock(falseB), control(ESelectionControlNone) {}
TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB, const TType& type) :
- TIntermTyped(type), condition(cond), trueBlock(trueB), falseBlock(falseB) {}
+ TIntermTyped(type), condition(cond), trueBlock(trueB), falseBlock(falseB), control(ESelectionControlNone) {}
virtual void traverse(TIntermTraverser*);
virtual TIntermTyped* getCondition() const { return condition; }
virtual TIntermNode* getTrueBlock() const { return trueBlock; }
virtual TIntermNode* getFalseBlock() const { return falseBlock; }
virtual TIntermSelection* getAsSelectionNode() { return this; }
virtual const TIntermSelection* getAsSelectionNode() const { return this; }
+ void setSelectionControl(TSelectionControl c) { control = c; }
+ TSelectionControl getSelectionControl() const { return control; }
protected:
TIntermTyped* condition;
TIntermNode* trueBlock;
TIntermNode* falseBlock;
+ TSelectionControl control; // selection control hint
};
//
@@ -1154,15 +1368,18 @@ protected:
//
class TIntermSwitch : public TIntermNode {
public:
- TIntermSwitch(TIntermTyped* cond, TIntermAggregate* b) : condition(cond), body(b) { }
+ TIntermSwitch(TIntermTyped* cond, TIntermAggregate* b) : condition(cond), body(b), control(ESelectionControlNone) { }
virtual void traverse(TIntermTraverser*);
virtual TIntermNode* getCondition() const { return condition; }
virtual TIntermAggregate* getBody() const { return body; }
virtual TIntermSwitch* getAsSwitchNode() { return this; }
virtual const TIntermSwitch* getAsSwitchNode() const { return this; }
+ void setSelectionControl(TSelectionControl c) { control = c; }
+ TSelectionControl getSelectionControl() const { return control; }
protected:
TIntermTyped* condition;
TIntermAggregate* body;
+ TSelectionControl control; // selection control hint
};
enum TVisit
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h
index d4429094d4b..218f8b67f51 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h
@@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
-#define GLSLANG_REVISION "Overload400-PrecQual.1937"
-#define GLSLANG_DATE "24-Mar-2017"
+#define GLSLANG_REVISION "Overload400-PrecQual.2000"
+#define GLSLANG_DATE "12-Apr-2017"
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp
index fff8fd26da0..1b73d969f17 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp
@@ -38,6 +38,7 @@
#include <cmath>
#include <cfloat>
#include <cstdlib>
+#include <climits>
namespace {
@@ -193,7 +194,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
case EbtUint:
if (rightUnionArray[i] == 0) {
- newConstArray[i].setUConst(0xFFFFFFFF);
+ newConstArray[i].setUConst(0xFFFFFFFFu);
} else
newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
break;
@@ -213,6 +214,23 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
} else
newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const());
break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ if (rightUnionArray[i] == 0)
+ newConstArray[i].setIConst(0x7FFF);
+ else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)0x8000)
+ newConstArray[i].setIConst(0x8000);
+ else
+ newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
+ break;
+
+ case EbtUint16:
+ if (rightUnionArray[i] == 0) {
+ newConstArray[i].setUConst(0xFFFFu);
+ } else
+ newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
+ break;
+#endif
default:
return 0;
}
@@ -246,8 +264,31 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
for (int i = 0; i < newComps; i++) {
if (rightUnionArray[i] == 0)
newConstArray[i] = leftUnionArray[i];
- else
- newConstArray[i] = leftUnionArray[i] % rightUnionArray[i];
+ else {
+ switch (getType().getBasicType()) {
+ case EbtInt:
+ if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == INT_MIN) {
+ newConstArray[i].setIConst(0);
+ break;
+ } else goto modulo_default;
+
+ case EbtInt64:
+ if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN) {
+ newConstArray[i].setI64Const(0);
+ break;
+ } else goto modulo_default;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == SHRT_MIN) {
+ newConstArray[i].setIConst(0);
+ break;
+ } else goto modulo_default;
+#endif
+ default:
+ modulo_default:
+ newConstArray[i] = leftUnionArray[i] % rightUnionArray[i];
+ }
+ }
}
break;
@@ -457,10 +498,16 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EbtFloat16:
#endif
case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+#endif
case EbtInt: newConstArray[i].setIConst(-unionArray[i].getIConst()); break;
+#ifdef AMD_EXTENSIONS
+ case EbtUint16:
+#endif
case EbtUint: newConstArray[i].setUConst(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getUConst()))); break;
case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break;
- case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getU64Const()))); break;
+ case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned long long>(-static_cast<long long>(unionArray[i].getU64Const()))); break;
default:
return 0;
}
@@ -610,6 +657,14 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpUintBitsToFloat:
case EOpDoubleBitsToInt64:
case EOpDoubleBitsToUint64:
+ case EOpInt64BitsToDouble:
+ case EOpUint64BitsToDouble:
+#ifdef AMD_EXTENSIONS
+ case EOpFloat16BitsToInt16:
+ case EOpFloat16BitsToUint16:
+ case EOpInt16BitsToFloat16:
+ case EOpUint16BitsToFloat16:
+#endif
default:
return 0;
@@ -702,6 +757,9 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
#endif
children[0]->getAsTyped()->getBasicType() == EbtDouble;
bool isSigned = children[0]->getAsTyped()->getBasicType() == EbtInt ||
+#ifdef AMD_EXTENSIONS
+ children[0]->getAsTyped()->getBasicType() == EbtInt16 ||
+#endif
children[0]->getAsTyped()->getBasicType() == EbtInt64;
bool isInt64 = children[0]->getAsTyped()->getBasicType() == EbtInt64 ||
children[0]->getAsTyped()->getBasicType() == EbtUint64;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp
index 2c46e4f3cc8..40f46b3532b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp
@@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2016 LunarG, Inc.
-// Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2015-2017 Google, Inc.
//
// All rights reserved.
//
@@ -85,8 +85,6 @@ TBuiltIns::TBuiltIns()
prefixes[EbtFloat] = "";
prefixes[EbtInt] = "i";
prefixes[EbtUint] = "u";
- prefixes[EbtInt64] = "i64";
- prefixes[EbtUint64] = "u64";
postfixes[2] = "2";
postfixes[3] = "3";
postfixes[4] = "4";
@@ -925,6 +923,32 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+#ifdef NV_EXTENSIONS
+ if (profile != EEsProfile && version >= 440) {
+ commonBuiltins.append(
+ "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);"
+ " int64_t atomicMin(coherent volatile inout int64_t, int64_t);"
+
+ "uint64_t atomicMax(coherent volatile inout uint64_t, uint64_t);"
+ " int64_t atomicMax(coherent volatile inout int64_t, int64_t);"
+
+ "uint64_t atomicAnd(coherent volatile inout uint64_t, uint64_t);"
+ " int64_t atomicAnd(coherent volatile inout int64_t, int64_t);"
+
+ "uint64_t atomicOr (coherent volatile inout uint64_t, uint64_t);"
+ " int64_t atomicOr (coherent volatile inout int64_t, int64_t);"
+
+ "uint64_t atomicXor(coherent volatile inout uint64_t, uint64_t);"
+ " int64_t atomicXor(coherent volatile inout int64_t, int64_t);"
+
+ " int64_t atomicAdd(coherent volatile inout int64_t, int64_t);"
+ " int64_t atomicExchange(coherent volatile inout int64_t, int64_t);"
+ " int64_t atomicCompSwap(coherent volatile inout int64_t, int64_t, int64_t);"
+
+ "\n");
+ }
+#endif
+
if ((profile == EEsProfile && version >= 310) ||
(profile != EEsProfile && version >= 450)) {
commonBuiltins.append(
@@ -1326,15 +1350,33 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
if (profile == EEsProfile) {
if (spvVersion.spv == 0) {
+ if (version < 300) {
+ commonBuiltins.append(
+ "vec4 texture2D(samplerExternalOES, vec2 coord);" // GL_OES_EGL_image_external
+ "vec4 texture2DProj(samplerExternalOES, vec3);" // GL_OES_EGL_image_external
+ "vec4 texture2DProj(samplerExternalOES, vec4);" // GL_OES_EGL_image_external
+ "\n");
+ } else {
+ commonBuiltins.append(
+ "highp ivec2 textureSize(samplerExternalOES, int lod);" // GL_OES_EGL_image_external_essl3
+ "vec4 texture(samplerExternalOES, vec2);" // GL_OES_EGL_image_external_essl3
+ "vec4 texture(samplerExternalOES, vec2, float bias);" // GL_OES_EGL_image_external_essl3
+ "vec4 textureProj(samplerExternalOES, vec3);" // GL_OES_EGL_image_external_essl3
+ "vec4 textureProj(samplerExternalOES, vec3, float bias);" // GL_OES_EGL_image_external_essl3
+ "vec4 textureProj(samplerExternalOES, vec4);" // GL_OES_EGL_image_external_essl3
+ "vec4 textureProj(samplerExternalOES, vec4, float bias);" // GL_OES_EGL_image_external_essl3
+ "vec4 texelFetch(samplerExternalOES, ivec2, int lod);" // GL_OES_EGL_image_external_essl3
+ "\n");
+ }
commonBuiltins.append(
- "vec4 texture2D(samplerExternalOES, vec2 coord);" // GL_OES_EGL_image_external, caught by keyword check
- "vec4 texture2DProj(samplerExternalOES, vec3);" // GL_OES_EGL_image_external, caught by keyword check
- "vec4 texture2DProj(samplerExternalOES, vec4);" // GL_OES_EGL_image_external, caught by keyword check
"vec4 texture2DGradEXT(sampler2D, vec2, vec2, vec2);" // GL_EXT_shader_texture_lod
"vec4 texture2DProjGradEXT(sampler2D, vec3, vec2, vec2);" // GL_EXT_shader_texture_lod
"vec4 texture2DProjGradEXT(sampler2D, vec4, vec2, vec2);" // GL_EXT_shader_texture_lod
"vec4 textureCubeGradEXT(samplerCube, vec3, vec3, vec3);" // GL_EXT_shader_texture_lod
+ "float shadow2DEXT(sampler2DShadow, vec3);" // GL_EXT_shadow_samplers
+ "float shadow2DProjEXT(sampler2DShadow, vec4);" // GL_EXT_shadow_samplers
+
"\n");
}
}
@@ -1342,7 +1384,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
//
// Noise functions.
//
- if (profile != EEsProfile) {
+ if (spvVersion.spv == 0 && profile != EEsProfile) {
commonBuiltins.append(
"float noise1(float x);"
"float noise1(vec2 x);"
@@ -1374,9 +1416,23 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
if ((profile != EEsProfile && version >= 300) ||
(profile == EEsProfile && version >= 310)) {
commonBuiltins.append(
- "uint atomicCounterIncrement(atomic_uint x);"
- "uint atomicCounterDecrement(atomic_uint x);"
- "uint atomicCounter(atomic_uint x);"
+ "uint atomicCounterIncrement(atomic_uint);"
+ "uint atomicCounterDecrement(atomic_uint);"
+ "uint atomicCounter(atomic_uint);"
+
+ "\n");
+ }
+ if (profile != EEsProfile && version >= 460) {
+ commonBuiltins.append(
+ "uint atomicCounterAdd(atomic_uint, uint);"
+ "uint atomicCounterSubtract(atomic_uint, uint);"
+ "uint atomicCounterMin(atomic_uint, uint);"
+ "uint atomicCounterMax(atomic_uint, uint);"
+ "uint atomicCounterAnd(atomic_uint, uint);"
+ "uint atomicCounterOr(atomic_uint, uint);"
+ "uint atomicCounterXor(atomic_uint, uint);"
+ "uint atomicCounterExchange(atomic_uint, uint);"
+ "uint atomicCounterCompSwap(atomic_uint, uint, uint);"
"\n");
}
@@ -1561,7 +1617,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
- // GL_ARB_shader_group_vote
+ // GL_ARB_shader_group_vote
if (profile != EEsProfile && version >= 430) {
commonBuiltins.append(
"bool anyInvocationARB(bool);"
@@ -1571,6 +1627,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+ if (profile != EEsProfile && version >= 460) {
+ commonBuiltins.append(
+ "bool anyInvocation(bool);"
+ "bool allInvocations(bool);"
+ "bool allInvocationsEqual(bool);"
+
+ "\n");
+ }
+
#ifdef AMD_EXTENSIONS
// GL_AMD_shader_ballot
if (profile != EEsProfile && version >= 450) {
@@ -2259,7 +2324,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
if (profile != EEsProfile && version >= 450) {
commonBuiltins.append(
"float cubeFaceIndexAMD(vec3);"
- "vec2 cubeFaceCoordAMD(vec3);"
+ "vec2 cubeFaceCoordAMD(vec3);"
"uint64_t timeAMD();"
"\n");
@@ -2612,6 +2677,180 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+
+ // GL_AMD_gpu_shader_int16
+ if (profile != EEsProfile && version >= 450) {
+ commonBuiltins.append(
+ "int16_t abs(int16_t);"
+ "i16vec2 abs(i16vec2);"
+ "i16vec3 abs(i16vec3);"
+ "i16vec4 abs(i16vec4);"
+
+ "int16_t sign(int16_t);"
+ "i16vec2 sign(i16vec2);"
+ "i16vec3 sign(i16vec3);"
+ "i16vec4 sign(i16vec4);"
+
+ "int16_t min(int16_t, int16_t);"
+ "i16vec2 min(i16vec2, int16_t);"
+ "i16vec3 min(i16vec3, int16_t);"
+ "i16vec4 min(i16vec4, int16_t);"
+ "i16vec2 min(i16vec2, i16vec2);"
+ "i16vec3 min(i16vec3, i16vec3);"
+ "i16vec4 min(i16vec4, i16vec4);"
+ "uint16_t min(uint16_t, uint16_t);"
+ "u16vec2 min(u16vec2, uint16_t);"
+ "u16vec3 min(u16vec3, uint16_t);"
+ "u16vec4 min(u16vec4, uint16_t);"
+ "u16vec2 min(u16vec2, u16vec2);"
+ "u16vec3 min(u16vec3, u16vec3);"
+ "u16vec4 min(u16vec4, u16vec4);"
+
+ "int16_t max(int16_t, int16_t);"
+ "i16vec2 max(i16vec2, int16_t);"
+ "i16vec3 max(i16vec3, int16_t);"
+ "i16vec4 max(i16vec4, int16_t);"
+ "i16vec2 max(i16vec2, i16vec2);"
+ "i16vec3 max(i16vec3, i16vec3);"
+ "i16vec4 max(i16vec4, i16vec4);"
+ "uint16_t max(uint16_t, uint16_t);"
+ "u16vec2 max(u16vec2, uint16_t);"
+ "u16vec3 max(u16vec3, uint16_t);"
+ "u16vec4 max(u16vec4, uint16_t);"
+ "u16vec2 max(u16vec2, u16vec2);"
+ "u16vec3 max(u16vec3, u16vec3);"
+ "u16vec4 max(u16vec4, u16vec4);"
+
+ "int16_t clamp(int16_t, int16_t, int16_t);"
+ "i16vec2 clamp(i16vec2, int16_t, int16_t);"
+ "i16vec3 clamp(i16vec3, int16_t, int16_t);"
+ "i16vec4 clamp(i16vec4, int16_t, int16_t);"
+ "i16vec2 clamp(i16vec2, i16vec2, i16vec2);"
+ "i16vec3 clamp(i16vec3, i16vec3, i16vec3);"
+ "i16vec4 clamp(i16vec4, i16vec4, i16vec4);"
+ "uint16_t clamp(uint16_t, uint16_t, uint16_t);"
+ "u16vec2 clamp(u16vec2, uint16_t, uint16_t);"
+ "u16vec3 clamp(u16vec3, uint16_t, uint16_t);"
+ "u16vec4 clamp(u16vec4, uint16_t, uint16_t);"
+ "u16vec2 clamp(u16vec2, u16vec2, u16vec2);"
+ "u16vec3 clamp(u16vec3, u16vec3, u16vec3);"
+ "u16vec4 clamp(u16vec4, u16vec4, u16vec4);"
+
+ "int16_t mix(int16_t, int16_t, bool);"
+ "i16vec2 mix(i16vec2, i16vec2, bvec2);"
+ "i16vec3 mix(i16vec3, i16vec3, bvec3);"
+ "i16vec4 mix(i16vec4, i16vec4, bvec4);"
+ "uint16_t mix(uint16_t, uint16_t, bool);"
+ "u16vec2 mix(u16vec2, u16vec2, bvec2);"
+ "u16vec3 mix(u16vec3, u16vec3, bvec3);"
+ "u16vec4 mix(u16vec4, u16vec4, bvec4);"
+
+ "float16_t frexp(float16_t, out int16_t);"
+ "f16vec2 frexp(f16vec2, out i16vec2);"
+ "f16vec3 frexp(f16vec3, out i16vec3);"
+ "f16vec4 frexp(f16vec4, out i16vec4);"
+
+ "float16_t ldexp(float16_t, int16_t);"
+ "f16vec2 ldexp(f16vec2, i16vec2);"
+ "f16vec3 ldexp(f16vec3, i16vec3);"
+ "f16vec4 ldexp(f16vec4, i16vec4);"
+
+ "int16_t float16BitsToInt16(float16_t);"
+ "i16vec2 float16BitsToInt16(f16vec2);"
+ "i16vec3 float16BitsToInt16(f16vec3);"
+ "i16vec4 float16BitsToInt16(f16vec4);"
+
+ "uint16_t float16BitsToUint16(float16_t);"
+ "u16vec2 float16BitsToUint16(f16vec2);"
+ "u16vec3 float16BitsToUint16(f16vec3);"
+ "u16vec4 float16BitsToUint16(f16vec4);"
+
+ "float16_t int16BitsToFloat16(int16_t);"
+ "f16vec2 int16BitsToFloat16(i16vec2);"
+ "f16vec3 int16BitsToFloat16(i16vec3);"
+ "f16vec4 int16BitsToFloat16(i16vec4);"
+
+ "float16_t uint16BitsToFloat16(uint16_t);"
+ "f16vec2 uint16BitsToFloat16(u16vec2);"
+ "f16vec3 uint16BitsToFloat16(u16vec3);"
+ "f16vec4 uint16BitsToFloat16(u16vec4);"
+
+ "int packInt2x16(i16vec2);"
+ "uint packUint2x16(u16vec2);"
+ "int64_t packInt4x16(i16vec4);"
+ "uint64_t packUint4x16(u16vec4);"
+ "i16vec2 unpackInt2x16(int);"
+ "u16vec2 unpackUint2x16(uint);"
+ "i16vec4 unpackInt4x16(int64_t);"
+ "u16vec4 unpackUint4x16(uint64_t);"
+
+ "bvec2 lessThan(i16vec2, i16vec2);"
+ "bvec3 lessThan(i16vec3, i16vec3);"
+ "bvec4 lessThan(i16vec4, i16vec4);"
+ "bvec2 lessThan(u16vec2, u16vec2);"
+ "bvec3 lessThan(u16vec3, u16vec3);"
+ "bvec4 lessThan(u16vec4, u16vec4);"
+
+ "bvec2 lessThanEqual(i16vec2, i16vec2);"
+ "bvec3 lessThanEqual(i16vec3, i16vec3);"
+ "bvec4 lessThanEqual(i16vec4, i16vec4);"
+ "bvec2 lessThanEqual(u16vec2, u16vec2);"
+ "bvec3 lessThanEqual(u16vec3, u16vec3);"
+ "bvec4 lessThanEqual(u16vec4, u16vec4);"
+
+ "bvec2 greaterThan(i16vec2, i16vec2);"
+ "bvec3 greaterThan(i16vec3, i16vec3);"
+ "bvec4 greaterThan(i16vec4, i16vec4);"
+ "bvec2 greaterThan(u16vec2, u16vec2);"
+ "bvec3 greaterThan(u16vec3, u16vec3);"
+ "bvec4 greaterThan(u16vec4, u16vec4);"
+
+ "bvec2 greaterThanEqual(i16vec2, i16vec2);"
+ "bvec3 greaterThanEqual(i16vec3, i16vec3);"
+ "bvec4 greaterThanEqual(i16vec4, i16vec4);"
+ "bvec2 greaterThanEqual(u16vec2, u16vec2);"
+ "bvec3 greaterThanEqual(u16vec3, u16vec3);"
+ "bvec4 greaterThanEqual(u16vec4, u16vec4);"
+
+ "bvec2 equal(i16vec2, i16vec2);"
+ "bvec3 equal(i16vec3, i16vec3);"
+ "bvec4 equal(i16vec4, i16vec4);"
+ "bvec2 equal(u16vec2, u16vec2);"
+ "bvec3 equal(u16vec3, u16vec3);"
+ "bvec4 equal(u16vec4, u16vec4);"
+
+ "bvec2 notEqual(i16vec2, i16vec2);"
+ "bvec3 notEqual(i16vec3, i16vec3);"
+ "bvec4 notEqual(i16vec4, i16vec4);"
+ "bvec2 notEqual(u16vec2, u16vec2);"
+ "bvec3 notEqual(u16vec3, u16vec3);"
+ "bvec4 notEqual(u16vec4, u16vec4);"
+
+ "\n");
+ }
+
+ // GL_AMD_shader_fragment_mask
+ if (profile != EEsProfile && version >= 450) {
+ commonBuiltins.append(
+ "uint fragmentMaskFetchAMD(sampler2DMS, ivec2);"
+ "uint fragmentMaskFetchAMD(isampler2DMS, ivec2);"
+ "uint fragmentMaskFetchAMD(usampler2DMS, ivec2);"
+
+ "uint fragmentMaskFetchAMD(sampler2DMSArray, ivec3);"
+ "uint fragmentMaskFetchAMD(isampler2DMSArray, ivec3);"
+ "uint fragmentMaskFetchAMD(usampler2DMSArray, ivec3);"
+
+ "vec4 fragmentFetchAMD(sampler2DMS, ivec2, uint);"
+ "ivec4 fragmentFetchAMD(isampler2DMS, ivec2, uint);"
+ "uvec4 fragmentFetchAMD(usampler2DMS, ivec2, uint);"
+
+ "vec4 fragmentFetchAMD(sampler2DMSArray, ivec3, uint);"
+ "ivec4 fragmentFetchAMD(isampler2DMSArray, ivec3, uint);"
+ "uvec4 fragmentFetchAMD(usampler2DMSArray, ivec3, uint);"
+
+ "\n");
+ }
+
#endif
//============================================================================
@@ -2951,6 +3190,20 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+
+ // GL_AMD_shader_fragment_mask
+ if (profile != EEsProfile && version >= 450 && spvVersion.vulkan >= 100) {
+ stageBuiltins[EShLangFragment].append(
+ "uint fragmentMaskFetchAMD(subpassInputMS);"
+ "uint fragmentMaskFetchAMD(isubpassInputMS);"
+ "uint fragmentMaskFetchAMD(usubpassInputMS);"
+
+ "vec4 fragmentFetchAMD(subpassInputMS, uint);"
+ "ivec4 fragmentFetchAMD(isubpassInputMS, uint);"
+ "uvec4 fragmentFetchAMD(usubpassInputMS, uint);"
+
+ "\n");
+ }
#endif
//============================================================================
@@ -3250,12 +3503,23 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in int gl_DrawIDARB;"
);
}
+ if (version >= 410) {
+ stageBuiltins[EShLangVertex].append(
+ "out int gl_ViewportIndex;"
+ "out int gl_Layer;"
+ );
+ }
+ if (version >= 460) {
+ stageBuiltins[EShLangVertex].append(
+ "in int gl_BaseVertex;"
+ "in int gl_BaseInstance;"
+ "in int gl_DrawID;"
+ );
+ }
#ifdef NV_EXTENSIONS
if (version >= 450)
stageBuiltins[EShLangVertex].append(
- "out int gl_ViewportIndex;"
- "out int gl_Layer;"
"out int gl_ViewportMask[];" // GL_NV_viewport_array2
"out int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering
"out vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering
@@ -3305,6 +3569,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+ if (version >= 300 /* both ES and non-ES */) {
+ stageBuiltins[EShLangVertex].append(
+ "in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2
+ "\n");
+ }
+
//============================================================================
//
@@ -3366,6 +3636,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"out int gl_PrimitiveID;"
"out int gl_Layer;");
+ if (version >= 150)
+ stageBuiltins[EShLangGeometry].append(
+ "out int gl_ViewportIndex;"
+ );
+
if (profile == ECompatibilityProfile && version < 400)
stageBuiltins[EShLangGeometry].append(
"out vec4 gl_ClipVertex;"
@@ -3375,11 +3650,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
stageBuiltins[EShLangGeometry].append(
"in int gl_InvocationID;"
);
- // GL_ARB_viewport_array
- if (version >= 150)
- stageBuiltins[EShLangGeometry].append(
- "out int gl_ViewportIndex;"
- );
#ifdef NV_EXTENSIONS
if (version >= 450)
@@ -3456,8 +3726,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
stageBuiltins[EShLangTessControl].append(
"float gl_CullDistance[];"
#ifdef NV_EXTENSIONS
- "int gl_ViewportIndex;"
- "int gl_Layer;"
"int gl_ViewportMask[];" // GL_NV_viewport_array2
"vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering
"int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering
@@ -3471,6 +3739,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"patch out float gl_TessLevelOuter[4];"
"patch out float gl_TessLevelInner[2];"
"\n");
+
+ if (version >= 410)
+ stageBuiltins[EShLangTessControl].append(
+ "out int gl_ViewportIndex;"
+ "out int gl_Layer;"
+ "\n");
+
} else {
// Note: "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
// as it depends on the resource sizing of gl_MaxPatchVertices.
@@ -3542,11 +3817,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"};"
"\n");
+ if (version >= 410)
+ stageBuiltins[EShLangTessEvaluation].append(
+ "out int gl_ViewportIndex;"
+ "out int gl_Layer;"
+ "\n");
+
#ifdef NV_EXTENSIONS
if (version >= 450)
stageBuiltins[EShLangTessEvaluation].append(
- "out int gl_ViewportIndex;"
- "out int gl_Layer;"
"out int gl_ViewportMask[];" // GL_NV_viewport_array2
"out vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering
"out int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering
@@ -3601,6 +3880,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
stageBuiltins[EShLangFragment].append(
"vec2 gl_PointCoord;" // needs qualifier fixed later
);
+ if (version >= 140)
+ stageBuiltins[EShLangFragment].append(
+ "out int gl_FragStencilRefARB;"
+ );
if (IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && version < 420))
stageBuiltins[EShLangFragment].append(
"vec4 gl_FragColor;" // needs qualifier fixed later
@@ -3749,6 +4032,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+ if (version >= 300 /* both ES and non-ES */) {
+ stageBuiltins[EShLangFragment].append(
+ "flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2
+ "\n");
+ }
+
// printf("%s\n", commonBuiltins.c_str());
// printf("%s\n", stageBuiltins[EShLangFragment].c_str());
}
@@ -3844,6 +4133,17 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
else {
addSamplingFunctions(sampler, typeName, version, profile);
addGatherFunctions(sampler, typeName, version, profile);
+
+ if (spvVersion.vulkan > 0 && sampler.dim == EsdBuffer && sampler.isCombined()) {
+ // Vulkan wants a textureBuffer to allow texelFetch() --
+ // a sampled image with no sampler.
+ // So, add sampling functions for both the
+ // samplerBuffer and textureBuffer types.
+ sampler.setTexture(sampler.type, sampler.dim, sampler.arrayed, sampler.shadow,
+ sampler.ms);
+ TString textureTypeName = sampler.getString();
+ addSamplingFunctions(sampler, textureTypeName, version, profile);
+ }
}
}
}
@@ -3867,7 +4167,7 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
//
// Add all the query functions for the given type.
//
-void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int version, EProfile profile)
+void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile)
{
if (sampler.image && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 430)))
return;
@@ -3944,7 +4244,7 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int versi
//
// Add all the image access functions for the given type.
//
-void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int version, EProfile profile)
+void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile)
{
int dims = dimMap[sampler.dim];
// most things with an array add a dimension, except for cubemaps
@@ -4029,6 +4329,43 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi
}
}
}
+
+#ifdef AMD_EXTENSIONS
+ if (sampler.dim == EsdRect || sampler.dim == EsdBuffer || sampler.shadow || sampler.ms)
+ return;
+
+ if (profile == EEsProfile || version < 450)
+ return;
+
+ TString imageLodParams = typeName;
+ if (dims == 1)
+ imageLodParams.append(", int");
+ else {
+ imageLodParams.append(", ivec");
+ imageLodParams.append(postfixes[dims]);
+ }
+ imageLodParams.append(", int");
+
+ commonBuiltins.append(prefixes[sampler.type]);
+ commonBuiltins.append("vec4 imageLoadLodAMD(readonly volatile coherent ");
+ commonBuiltins.append(imageLodParams);
+ commonBuiltins.append(");\n");
+
+ commonBuiltins.append("void imageStoreLodAMD(writeonly volatile coherent ");
+ commonBuiltins.append(imageLodParams);
+ commonBuiltins.append(", ");
+ commonBuiltins.append(prefixes[sampler.type]);
+ commonBuiltins.append("vec4);\n");
+
+ if (sampler.dim != Esd1D) {
+ commonBuiltins.append("int sparseImageLoadLodAMD(readonly volatile coherent ");
+ commonBuiltins.append(imageLodParams);
+ commonBuiltins.append(", out ");
+ commonBuiltins.append(prefixes[sampler.type]);
+ commonBuiltins.append("vec4");
+ commonBuiltins.append(");\n");
+ }
+#endif
}
//
@@ -4037,7 +4374,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi
//
// Add all the subpass access functions for the given type.
//
-void TBuiltIns::addSubpassSampling(TSampler sampler, TString& typeName, int /*version*/, EProfile /*profile*/)
+void TBuiltIns::addSubpassSampling(TSampler sampler, const TString& typeName, int /*version*/, EProfile /*profile*/)
{
stageBuiltins[EShLangFragment].append(prefixes[sampler.type]);
stageBuiltins[EShLangFragment].append("vec4 subpassLoad");
@@ -4054,7 +4391,7 @@ void TBuiltIns::addSubpassSampling(TSampler sampler, TString& typeName, int /*ve
//
// Add all the texture lookup functions for the given type.
//
-void TBuiltIns::addSamplingFunctions(TSampler sampler, TString& typeName, int version, EProfile profile)
+void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile)
{
//
// texturing
@@ -4284,7 +4621,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, TString& typeName, int ve
//
// Add all the texture gather functions for the given type.
//
-void TBuiltIns::addGatherFunctions(TSampler sampler, TString& typeName, int version, EProfile profile)
+void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile)
{
switch (sampler.dim) {
case Esd2D:
@@ -4339,6 +4676,7 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, TString& typeName, int vers
default:
break;
}
+
if (sparse)
s.append("ARB");
s.append("(");
@@ -4378,6 +4716,116 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, TString& typeName, int vers
}
}
}
+
+#ifdef AMD_EXTENSIONS
+ if (sampler.dim == EsdRect || sampler.shadow)
+ return;
+
+ if (profile == EEsProfile || version < 450)
+ return;
+
+ for (int bias = 0; bias < 2; ++bias) { // loop over presence of bias argument
+
+ for (int lod = 0; lod < 2; ++lod) { // loop over presence of lod argument
+
+ if ((lod && bias) || (lod == 0 && bias == 0))
+ continue;
+
+ for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name: none, Offset, and Offsets
+
+ for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
+
+ if (comp == 0 && bias)
+ continue;
+
+ if (offset > 0 && sampler.dim == EsdCube)
+ continue;
+
+ for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
+ if (sparse && (profile == EEsProfile || version < 450))
+ continue;
+
+ TString s;
+
+ // return type
+ if (sparse)
+ s.append("int ");
+ else {
+ s.append(prefixes[sampler.type]);
+ s.append("vec4 ");
+ }
+
+ // name
+ if (sparse)
+ s.append("sparseTextureGather");
+ else
+ s.append("textureGather");
+
+ if (lod)
+ s.append("Lod");
+
+ switch (offset) {
+ case 1:
+ s.append("Offset");
+ break;
+ case 2:
+ s.append("Offsets");
+ default:
+ break;
+ }
+
+ if (lod)
+ s.append("AMD");
+ else if (sparse)
+ s.append("ARB");
+
+ s.append("(");
+
+ // sampler type argument
+ s.append(typeName);
+
+ // P coordinate argument
+ s.append(",vec");
+ int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
+ s.append(postfixes[totalDims]);
+
+ // lod argument
+ if (lod)
+ s.append(",float");
+
+ // offset argument
+ if (offset > 0) {
+ s.append(",ivec2");
+ if (offset == 2)
+ s.append("[4]");
+ }
+
+ // texel out (for sparse texture)
+ if (sparse) {
+ s.append(",out ");
+ s.append(prefixes[sampler.type]);
+ s.append("vec4 ");
+ }
+
+ // comp argument
+ if (comp)
+ s.append(",int");
+
+ // bias argument
+ if (bias)
+ s.append(",float");
+
+ s.append(");\n");
+ if (bias)
+ stageBuiltins[EShLangFragment].append(s);
+ else
+ commonBuiltins.append(s);
+ }
+ }
+ }
+ }
+ }
+#endif
}
//
@@ -4926,16 +5374,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
switch(language) {
case EShLangVertex:
if (profile != EEsProfile) {
- symbolTable.setVariableExtensions("gl_BaseVertexARB", 1, &E_GL_ARB_shader_draw_parameters);
- symbolTable.setVariableExtensions("gl_BaseInstanceARB", 1, &E_GL_ARB_shader_draw_parameters);
- symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters);
-
- BuiltInVariable("gl_BaseVertexARB", EbvBaseVertex, symbolTable);
- BuiltInVariable("gl_BaseInstanceARB", EbvBaseInstance, symbolTable);
- BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable);
- }
-
- if (profile != EEsProfile) {
+ if (version >= 440) {
+ symbolTable.setVariableExtensions("gl_BaseVertexARB", 1, &E_GL_ARB_shader_draw_parameters);
+ symbolTable.setVariableExtensions("gl_BaseInstanceARB", 1, &E_GL_ARB_shader_draw_parameters);
+ symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters);
+ BuiltInVariable("gl_BaseVertexARB", EbvBaseVertex, symbolTable);
+ BuiltInVariable("gl_BaseInstanceARB", EbvBaseInstance, symbolTable);
+ BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable);
+ }
+ if (version >= 460) {
+ BuiltInVariable("gl_BaseVertex", EbvBaseVertex, symbolTable);
+ BuiltInVariable("gl_BaseInstance", EbvBaseInstance, symbolTable);
+ BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable);
+ }
symbolTable.setVariableExtensions("gl_SubGroupSizeARB", 1, &E_GL_ARB_shader_ballot);
symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB", 1, &E_GL_ARB_shader_ballot);
@@ -4959,9 +5410,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
// Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
- symbolTable.setFunctionExtensions("anyInvocationARB", 1, &E_GL_ARB_shader_group_vote);
- symbolTable.setFunctionExtensions("allInvocationsARB", 1, &E_GL_ARB_shader_group_vote);
- symbolTable.setFunctionExtensions("allInvocationsEqualARB", 1, &E_GL_ARB_shader_group_vote);
+ if (version >= 430) {
+ symbolTable.setFunctionExtensions("anyInvocationARB", 1, &E_GL_ARB_shader_group_vote);
+ symbolTable.setFunctionExtensions("allInvocationsARB", 1, &E_GL_ARB_shader_group_vote);
+ symbolTable.setFunctionExtensions("allInvocationsEqualARB", 1, &E_GL_ARB_shader_group_vote);
+ }
}
#ifdef AMD_EXTENSIONS
@@ -5002,6 +5455,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("cubeFaceCoordAMD", 1, &E_GL_AMD_gcn_shader);
symbolTable.setFunctionExtensions("timeAMD", 1, &E_GL_AMD_gcn_shader);
}
+
+ if (profile != EEsProfile) {
+ symbolTable.setFunctionExtensions("fragmentMaskFetchAMD", 1, &E_GL_AMD_shader_fragment_mask);
+ symbolTable.setFunctionExtensions("fragmentFetchAMD", 1, &E_GL_AMD_shader_fragment_mask);
+ }
#endif
// Compatibility variables, vertex only
@@ -5026,13 +5484,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("texture2DGradEXT", 1, &E_GL_EXT_shader_texture_lod);
symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
symbolTable.setFunctionExtensions("textureCubeGradEXT", 1, &E_GL_EXT_shader_texture_lod);
- symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
+ if (version == 310)
+ symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
}
- if (version >= 310)
+ if (version == 310)
symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
}
- if (profile == EEsProfile) {
+ if (profile == EEsProfile && version < 320) {
symbolTable.setFunctionExtensions("imageAtomicAdd", 1, &E_GL_OES_shader_image_atomic);
symbolTable.setFunctionExtensions("imageAtomicMin", 1, &E_GL_OES_shader_image_atomic);
symbolTable.setFunctionExtensions("imageAtomicMax", 1, &E_GL_OES_shader_image_atomic);
@@ -5053,12 +5512,24 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
}
+ if (version >= 300 /* both ES and non-ES */) {
+ symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
+ BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
+ }
+
+ if (profile == EEsProfile) {
+ symbolTable.setFunctionExtensions("shadow2DEXT", 1, &E_GL_EXT_shadow_samplers);
+ symbolTable.setFunctionExtensions("shadow2DProjEXT", 1, &E_GL_EXT_shadow_samplers);
+ }
+
// Fall through
case EShLangTessControl:
if (profile == EEsProfile && version >= 310) {
- symbolTable.setVariableExtensions("gl_BoundingBoxOES", Num_AEP_primitive_bounding_box, AEP_primitive_bounding_box);
BuiltInVariable("gl_BoundingBoxOES", EbvBoundingBox, symbolTable);
+ if (version < 320)
+ symbolTable.setVariableExtensions("gl_BoundingBoxOES", Num_AEP_primitive_bounding_box,
+ AEP_primitive_bounding_box);
}
// Fall through
@@ -5092,6 +5563,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setVariableExtensions("gl_Layer", Num_viewportEXTs, viewportEXTs);
symbolTable.setVariableExtensions("gl_ViewportIndex", Num_viewportEXTs, viewportEXTs);
}
+#else
+ if (language != EShLangGeometry && version >= 410) {
+ symbolTable.setVariableExtensions("gl_Layer", 1, &E_GL_ARB_shader_viewport_layer_array);
+ symbolTable.setVariableExtensions("gl_ViewportIndex", 1, &E_GL_ARB_shader_viewport_layer_array);
+ }
+#endif
+
+#ifdef NV_EXTENSIONS
symbolTable.setVariableExtensions("gl_ViewportMask", 1, &E_GL_NV_viewport_array2);
symbolTable.setVariableExtensions("gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
symbolTable.setVariableExtensions("gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
@@ -5108,8 +5587,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
BuiltInVariable("gl_in", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
}
- BuiltInVariable("gl_out", "gl_Layer", EbvLayer, symbolTable);
- BuiltInVariable("gl_out", "gl_ViewportIndex", EbvViewportIndex, symbolTable);
BuiltInVariable("gl_out", "gl_ViewportMask", EbvViewportMaskNV, symbolTable);
BuiltInVariable("gl_out", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
BuiltInVariable("gl_out", "gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable);
@@ -5177,7 +5654,15 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
SpecialQualifier("gl_FrontFacing", EvqFace, EbvFace, symbolTable);
SpecialQualifier("gl_FragCoord", EvqFragCoord, EbvFragCoord, symbolTable);
SpecialQualifier("gl_PointCoord", EvqPointCoord, EbvPointCoord, symbolTable);
- SpecialQualifier("gl_FragColor", EvqFragColor, EbvFragColor, symbolTable);
+ if (spvVersion.spv == 0)
+ SpecialQualifier("gl_FragColor", EvqFragColor, EbvFragColor, symbolTable);
+ else {
+ TSymbol* symbol = symbolTable.find("gl_FragColor");
+ if (symbol) {
+ symbol->getWritableType().getQualifier().storage = EvqVaryingOut;
+ symbol->getWritableType().getQualifier().layoutLocation = 0;
+ }
+ }
SpecialQualifier("gl_FragDepth", EvqFragDepth, EbvFragDepth, symbolTable);
SpecialQualifier("gl_FragDepthEXT", EvqFragDepth, EbvFragDepth, symbolTable);
SpecialQualifier("gl_HelperInvocation", EvqVaryingIn, EbvHelperInvocation, symbolTable);
@@ -5186,13 +5671,18 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_CullDistance", EbvCullDistance, symbolTable);
BuiltInVariable("gl_PrimitiveID", EbvPrimitiveId, symbolTable);
+ if (profile != EEsProfile && version >= 140) {
+ symbolTable.setVariableExtensions("gl_FragStencilRefARB", 1, &E_GL_ARB_shader_stencil_export);
+ BuiltInVariable("gl_FragStencilRefARB", EbvFragStencilRef, symbolTable);
+ }
+
if ((profile != EEsProfile && version >= 400) ||
(profile == EEsProfile && version >= 310)) {
BuiltInVariable("gl_SampleID", EbvSampleId, symbolTable);
BuiltInVariable("gl_SamplePosition", EbvSamplePosition, symbolTable);
BuiltInVariable("gl_SampleMaskIn", EbvSampleMask, symbolTable);
BuiltInVariable("gl_SampleMask", EbvSampleMask, symbolTable);
- if (profile == EEsProfile) {
+ if (profile == EEsProfile && version < 320) {
symbolTable.setVariableExtensions("gl_SampleID", 1, &E_GL_OES_sample_variables);
symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_OES_sample_variables);
symbolTable.setVariableExtensions("gl_SampleMaskIn", 1, &E_GL_OES_sample_variables);
@@ -5226,14 +5716,15 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("texture2DGradEXT", 1, &E_GL_EXT_shader_texture_lod);
symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
symbolTable.setFunctionExtensions("textureCubeGradEXT", 1, &E_GL_EXT_shader_texture_lod);
- symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
+ if (version < 320)
+ symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
}
if (version == 100) {
symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_OES_standard_derivatives);
symbolTable.setFunctionExtensions("dFdy", 1, &E_GL_OES_standard_derivatives);
symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_OES_standard_derivatives);
}
- if (version >= 310) {
+ if (version == 310) {
symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
symbolTable.setFunctionExtensions("interpolateAtCentroid", 1, &E_GL_OES_shader_multisample_interpolation);
symbolTable.setFunctionExtensions("interpolateAtSample", 1, &E_GL_OES_shader_multisample_interpolation);
@@ -5348,16 +5839,33 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_BaryCoordSmoothSampleAMD", EbvBaryCoordSmoothSample, symbolTable);
BuiltInVariable("gl_BaryCoordPullModelAMD", EbvBaryCoordPullModel, symbolTable);
}
+
+ // E_GL_AMD_texture_gather_bias_lod
+ if (profile != EEsProfile) {
+ symbolTable.setFunctionExtensions("textureGatherLodAMD", 1, &E_GL_AMD_texture_gather_bias_lod);
+ symbolTable.setFunctionExtensions("textureGatherLodOffsetAMD", 1, &E_GL_AMD_texture_gather_bias_lod);
+ symbolTable.setFunctionExtensions("textureGatherLodOffsetsAMD", 1, &E_GL_AMD_texture_gather_bias_lod);
+ symbolTable.setFunctionExtensions("sparseTextureGatherLodAMD", 1, &E_GL_AMD_texture_gather_bias_lod);
+ symbolTable.setFunctionExtensions("sparseTextureGatherLodOffsetAMD", 1, &E_GL_AMD_texture_gather_bias_lod);
+ symbolTable.setFunctionExtensions("sparseTextureGatherLodOffsetsAMD", 1, &E_GL_AMD_texture_gather_bias_lod);
+ }
+
+ // E_GL_AMD_shader_image_load_store_lod
+ if (profile != EEsProfile) {
+ symbolTable.setFunctionExtensions("imageLoadLodAMD", 1, &E_GL_AMD_shader_image_load_store_lod);
+ symbolTable.setFunctionExtensions("imageStoreLodAMD", 1, &E_GL_AMD_shader_image_load_store_lod);
+ symbolTable.setFunctionExtensions("sparseImageLoadLodAMD", 1, &E_GL_AMD_shader_image_load_store_lod);
+ }
#endif
symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
- if (profile == EEsProfile) {
+ if (profile == EEsProfile && version < 320) {
symbolTable.setVariableExtensions("gl_PrimitiveID", Num_AEP_geometry_shader, AEP_geometry_shader);
symbolTable.setVariableExtensions("gl_Layer", Num_AEP_geometry_shader, AEP_geometry_shader);
}
- if (profile == EEsProfile) {
+ if (profile == EEsProfile && version < 320) {
symbolTable.setFunctionExtensions("imageAtomicAdd", 1, &E_GL_OES_shader_image_atomic);
symbolTable.setFunctionExtensions("imageAtomicMin", 1, &E_GL_OES_shader_image_atomic);
symbolTable.setFunctionExtensions("imageAtomicMax", 1, &E_GL_OES_shader_image_atomic);
@@ -5372,6 +5880,15 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
+ if (version >= 300 /* both ES and non-ES */) {
+ symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
+ BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
+ }
+
+ if (profile == EEsProfile) {
+ symbolTable.setFunctionExtensions("shadow2DEXT", 1, &E_GL_EXT_shadow_samplers);
+ symbolTable.setFunctionExtensions("shadow2DProjEXT", 1, &E_GL_EXT_shadow_samplers);
+ }
break;
case EShLangCompute:
@@ -5499,6 +6016,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64);
symbolTable.relateToOperator("int64BitsToDouble", EOpInt64BitsToDouble);
symbolTable.relateToOperator("uint64BitsToDouble", EOpUint64BitsToDouble);
+#ifdef AMD_EXTENSIONS
+ symbolTable.relateToOperator("float16BitsToInt16", EOpFloat16BitsToInt16);
+ symbolTable.relateToOperator("float16BitsToUint16", EOpFloat16BitsToUint16);
+ symbolTable.relateToOperator("int16BitsToFloat16", EOpInt16BitsToFloat16);
+ symbolTable.relateToOperator("uint16BitsToFloat16", EOpUint16BitsToFloat16);
+#endif
symbolTable.relateToOperator("packSnorm2x16", EOpPackSnorm2x16);
symbolTable.relateToOperator("unpackSnorm2x16", EOpUnpackSnorm2x16);
@@ -5522,6 +6045,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("unpackUint2x32", EOpUnpackUint2x32);
#ifdef AMD_EXTENSIONS
+ symbolTable.relateToOperator("packInt2x16", EOpPackInt2x16);
+ symbolTable.relateToOperator("unpackInt2x16", EOpUnpackInt2x16);
+ symbolTable.relateToOperator("packUint2x16", EOpPackUint2x16);
+ symbolTable.relateToOperator("unpackUint2x16", EOpUnpackUint2x16);
+
+ symbolTable.relateToOperator("packInt4x16", EOpPackInt4x16);
+ symbolTable.relateToOperator("unpackInt4x16", EOpUnpackInt4x16);
+ symbolTable.relateToOperator("packUint4x16", EOpPackUint4x16);
+ symbolTable.relateToOperator("unpackUint4x16", EOpUnpackUint4x16);
+
symbolTable.relateToOperator("packFloat2x16", EOpPackFloat2x16);
symbolTable.relateToOperator("unpackFloat2x16", EOpUnpackFloat2x16);
#endif
@@ -5557,6 +6090,18 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement);
symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter);
+ if (profile != EEsProfile && version >= 460) {
+ symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicCounterAdd);
+ symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicCounterSubtract);
+ symbolTable.relateToOperator("atomicCounterMin", EOpAtomicCounterMin);
+ symbolTable.relateToOperator("atomicCounterMax", EOpAtomicCounterMax);
+ symbolTable.relateToOperator("atomicCounterAnd", EOpAtomicCounterAnd);
+ symbolTable.relateToOperator("atomicCounterOr", EOpAtomicCounterOr);
+ symbolTable.relateToOperator("atomicCounterXor", EOpAtomicCounterXor);
+ symbolTable.relateToOperator("atomicCounterExchange", EOpAtomicCounterExchange);
+ symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCounterCompSwap);
+ }
+
symbolTable.relateToOperator("fma", EOpFma);
symbolTable.relateToOperator("frexp", EOpFrexp);
symbolTable.relateToOperator("ldexp", EOpLdexp);
@@ -5699,10 +6244,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("readInvocationARB", EOpReadInvocation);
symbolTable.relateToOperator("readFirstInvocationARB", EOpReadFirstInvocation);
- symbolTable.relateToOperator("anyInvocationARB", EOpAnyInvocation);
- symbolTable.relateToOperator("allInvocationsARB", EOpAllInvocations);
- symbolTable.relateToOperator("allInvocationsEqualARB", EOpAllInvocationsEqual);
-
+ if (version >= 430) {
+ symbolTable.relateToOperator("anyInvocationARB", EOpAnyInvocation);
+ symbolTable.relateToOperator("allInvocationsARB", EOpAllInvocations);
+ symbolTable.relateToOperator("allInvocationsEqualARB", EOpAllInvocationsEqual);
+ }
+ if (version >= 460) {
+ symbolTable.relateToOperator("anyInvocation", EOpAnyInvocation);
+ symbolTable.relateToOperator("allInvocations", EOpAllInvocations);
+ symbolTable.relateToOperator("allInvocationsEqual", EOpAllInvocationsEqual);
+ }
#ifdef AMD_EXTENSIONS
symbolTable.relateToOperator("minInvocationsAMD", EOpMinInvocations);
symbolTable.relateToOperator("maxInvocationsAMD", EOpMaxInvocations);
@@ -5734,8 +6285,26 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("cubeFaceIndexAMD", EOpCubeFaceIndex);
symbolTable.relateToOperator("cubeFaceCoordAMD", EOpCubeFaceCoord);
symbolTable.relateToOperator("timeAMD", EOpTime);
+
+ symbolTable.relateToOperator("textureGatherLodAMD", EOpTextureGatherLod);
+ symbolTable.relateToOperator("textureGatherLodOffsetAMD", EOpTextureGatherLodOffset);
+ symbolTable.relateToOperator("textureGatherLodOffsetsAMD", EOpTextureGatherLodOffsets);
+ symbolTable.relateToOperator("sparseTextureGatherLodAMD", EOpSparseTextureGatherLod);
+ symbolTable.relateToOperator("sparseTextureGatherLodOffsetAMD", EOpSparseTextureGatherLodOffset);
+ symbolTable.relateToOperator("sparseTextureGatherLodOffsetsAMD", EOpSparseTextureGatherLodOffsets);
+
+ symbolTable.relateToOperator("imageLoadLodAMD", EOpImageLoadLod);
+ symbolTable.relateToOperator("imageStoreLodAMD", EOpImageStoreLod);
+ symbolTable.relateToOperator("sparseImageLoadLodAMD", EOpSparseImageLoadLod);
+
+ symbolTable.relateToOperator("fragmentMaskFetchAMD", EOpFragmentMaskFetch);
+ symbolTable.relateToOperator("fragmentFetchAMD", EOpFragmentFetch);
#endif
}
+ if (profile == EEsProfile) {
+ symbolTable.relateToOperator("shadow2DEXT", EOpTexture);
+ symbolTable.relateToOperator("shadow2DProjEXT", EOpTextureProj);
+ }
}
switch(language) {
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h
index 45b439562f2..6b54c4da623 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h
@@ -94,11 +94,11 @@ public:
protected:
void add2ndGenerationSamplingImaging(int version, EProfile profile, const SpvVersion& spvVersion);
- void addSubpassSampling(TSampler, TString& typeName, int version, EProfile profile);
- void addQueryFunctions(TSampler, TString& typeName, int version, EProfile profile);
- void addImageFunctions(TSampler, TString& typeName, int version, EProfile profile);
- void addSamplingFunctions(TSampler, TString& typeName, int version, EProfile profile);
- void addGatherFunctions(TSampler, TString& typeName, int version, EProfile profile);
+ void addSubpassSampling(TSampler, const TString& typeName, int version, EProfile profile);
+ void addQueryFunctions(TSampler, const TString& typeName, int version, EProfile profile);
+ void addImageFunctions(TSampler, const TString& typeName, int version, EProfile profile);
+ void addSamplingFunctions(TSampler, const TString& typeName, int version, EProfile profile);
+ void addGatherFunctions(TSampler, const TString& typeName, int version, EProfile profile);
// Helpers for making textual representations of the permutations
// of texturing/imaging functions.
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
index 8abd9e397a8..2fa0d8a85e4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
@@ -130,8 +130,9 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn
}
// Convert the children's type shape to be compatible.
- right = addShapeConversion(op, left->getType(), right);
- left = addShapeConversion(op, right->getType(), left);
+ addBiShapeConversion(op, left, right);
+ if (left == nullptr || right == nullptr)
+ return nullptr;
//
// Need a new node holding things together. Make
@@ -147,8 +148,8 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn
// If they are both (non-specialization) constants, they must be folded.
// (Unless it's the sequence (comma) operator, but that's handled in addComma().)
//
- TIntermConstantUnion *leftTempConstant = left->getAsConstantUnion();
- TIntermConstantUnion *rightTempConstant = right->getAsConstantUnion();
+ TIntermConstantUnion *leftTempConstant = node->getLeft()->getAsConstantUnion();
+ TIntermConstantUnion *rightTempConstant = node->getRight()->getAsConstantUnion();
if (leftTempConstant && rightTempConstant) {
TIntermTyped* folded = leftTempConstant->fold(node->getOp(), rightTempConstant);
if (folded)
@@ -157,7 +158,7 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn
// If can propagate spec-constantness and if the operation is an allowed
// specialization-constant operation, make a spec-constant.
- if (specConstantPropagates(*left, *right) && isSpecializationOperation(*node))
+ if (specConstantPropagates(*node->getLeft(), *node->getRight()) && isSpecializationOperation(*node))
node->getWritableType().getQualifier().makeSpecConstant();
return node;
@@ -238,7 +239,7 @@ TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TInterm
return nullptr;
// convert shape
- right = addShapeConversion(op, left->getType(), right);
+ right = addUniShapeConversion(op, left->getType(), right);
// build the node
TIntermBinary* node = addBinaryNode(op, left, right, loc);
@@ -307,6 +308,10 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
case EOpConstructUint: newType = EbtUint; break;
case EOpConstructInt64: newType = EbtInt64; break;
case EOpConstructUint64: newType = EbtUint64; break;
+#ifdef AMD_EXTENSIONS
+ case EOpConstructInt16: newType = EbtInt16; break;
+ case EOpConstructUint16: newType = EbtUint16; break;
+#endif
case EOpConstructBool: newType = EbtBool; break;
case EOpConstructFloat: newType = EbtFloat; break;
case EOpConstructDouble: newType = EbtDouble; break;
@@ -335,6 +340,10 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
case EOpConstructUint:
case EOpConstructInt64:
case EOpConstructUint64:
+#ifdef AMD_EXTENSIONS
+ case EOpConstructInt16:
+ case EOpConstructUint16:
+#endif
case EOpConstructBool:
case EOpConstructFloat:
case EOpConstructDouble:
@@ -356,12 +365,12 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
node->updatePrecision();
// If it's a (non-specialization) constant, it must be folded.
- if (child->getAsConstantUnion())
- return child->getAsConstantUnion()->fold(op, node->getType());
+ if (node->getOperand()->getAsConstantUnion())
+ return node->getOperand()->getAsConstantUnion()->fold(op, node->getType());
// If it's a specialization constant, the result is too,
// if the operation is allowed for specialization constants.
- if (child->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*node))
+ if (node->getOperand()->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*node))
node->getWritableType().getQualifier().makeSpecConstant();
return node;
@@ -527,6 +536,14 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
case EOpConstructUint64:
promoteTo = EbtUint64;
break;
+#ifdef AMD_EXTENSIONS
+ case EOpConstructInt16:
+ promoteTo = EbtInt16;
+ break;
+ case EOpConstructUint16:
+ promoteTo = EbtUint16;
+ break;
+#endif
//
// List all the binary ops that can implicitly convert one operand to the other's type;
@@ -615,15 +632,26 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
case EOpRightShiftAssign:
if ((type.getBasicType() == EbtInt ||
type.getBasicType() == EbtUint ||
+#ifdef AMD_EXTENSIONS
+ type.getBasicType() == EbtInt16 ||
+ type.getBasicType() == EbtUint16 ||
+#endif
type.getBasicType() == EbtInt64 ||
type.getBasicType() == EbtUint64) &&
(node->getType().getBasicType() == EbtInt ||
node->getType().getBasicType() == EbtUint ||
+#ifdef AMD_EXTENSIONS
+ node->getType().getBasicType() == EbtInt16 ||
+ node->getType().getBasicType() == EbtUint16 ||
+#endif
node->getType().getBasicType() == EbtInt64 ||
node->getType().getBasicType() == EbtUint64))
return node;
- else
+ else if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool) {
+ promoteTo = type.getBasicType();
+ break;
+ } else
return nullptr;
default:
@@ -659,6 +687,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
#endif
case EbtInt64: newOp = EOpConvInt64ToDouble; break;
case EbtUint64: newOp = EOpConvUint64ToDouble; break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16: newOp = EOpConvInt16ToDouble; break;
+ case EbtUint16: newOp = EOpConvUint16ToDouble; break;
+#endif
default:
return nullptr;
}
@@ -674,6 +706,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
#endif
case EbtInt64: newOp = EOpConvInt64ToFloat; break;
case EbtUint64: newOp = EOpConvUint64ToFloat; break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16: newOp = EOpConvInt16ToFloat; break;
+ case EbtUint16: newOp = EOpConvUint16ToFloat; break;
+#endif
default:
return nullptr;
}
@@ -688,6 +724,8 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
case EbtInt64: newOp = EOpConvInt64ToFloat16; break;
case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
+ case EbtInt16: newOp = EOpConvInt16ToFloat16; break;
+ case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
default:
return nullptr;
}
@@ -704,6 +742,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
#endif
case EbtInt64: newOp = EOpConvInt64ToBool; break;
case EbtUint64: newOp = EOpConvUint64ToBool; break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16: newOp = EOpConvInt16ToBool; break;
+ case EbtUint16: newOp = EOpConvUint16ToBool; break;
+#endif
default:
return nullptr;
}
@@ -719,6 +761,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
#endif
case EbtInt64: newOp = EOpConvInt64ToInt; break;
case EbtUint64: newOp = EOpConvUint64ToInt; break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16: newOp = EOpConvInt16ToInt; break;
+ case EbtUint16: newOp = EOpConvUint16ToInt; break;
+#endif
default:
return nullptr;
}
@@ -734,6 +780,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
#endif
case EbtInt64: newOp = EOpConvInt64ToUint; break;
case EbtUint64: newOp = EOpConvUint64ToUint; break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16: newOp = EOpConvInt16ToUint; break;
+ case EbtUint16: newOp = EOpConvUint16ToUint; break;
+#endif
default:
return nullptr;
}
@@ -749,6 +799,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
#endif
case EbtUint64: newOp = EOpConvUint64ToInt64; break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16: newOp = EOpConvInt16ToInt64; break;
+ case EbtUint16: newOp = EOpConvUint16ToInt64; break;
+#endif
default:
return nullptr;
}
@@ -764,10 +818,46 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
#endif
case EbtInt64: newOp = EOpConvInt64ToUint64; break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16: newOp = EOpConvInt16ToUint64; break;
+ case EbtUint16: newOp = EOpConvUint16ToUint64; break;
+#endif
+ default:
+ return nullptr;
+ }
+ break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ switch (node->getBasicType()) {
+ case EbtInt: newOp = EOpConvIntToInt16; break;
+ case EbtUint: newOp = EOpConvUintToInt16; break;
+ case EbtBool: newOp = EOpConvBoolToInt16; break;
+ case EbtFloat: newOp = EOpConvFloatToInt16; break;
+ case EbtDouble: newOp = EOpConvDoubleToInt16; break;
+ case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
+ case EbtInt64: newOp = EOpConvInt64ToInt16; break;
+ case EbtUint64: newOp = EOpConvUint64ToInt16; break;
+ case EbtUint16: newOp = EOpConvUint16ToInt16; break;
+ default:
+ return nullptr;
+ }
+ break;
+ case EbtUint16:
+ switch (node->getBasicType()) {
+ case EbtInt: newOp = EOpConvIntToUint16; break;
+ case EbtUint: newOp = EOpConvUintToUint16; break;
+ case EbtBool: newOp = EOpConvBoolToUint16; break;
+ case EbtFloat: newOp = EOpConvFloatToUint16; break;
+ case EbtDouble: newOp = EOpConvDoubleToUint16; break;
+ case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
+ case EbtInt64: newOp = EOpConvInt64ToUint16; break;
+ case EbtUint64: newOp = EOpConvUint64ToUint16; break;
+ case EbtInt16: newOp = EOpConvInt16ToUint16; break;
default:
return nullptr;
}
break;
+#endif
default:
return nullptr;
}
@@ -785,7 +875,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
}
// Convert the node's shape of type for the given type, as allowed by the
-// operation involved: 'op'.
+// operation involved: 'op'. This is for situations where there is only one
+// direction to consider doing the shape conversion.
+//
+// This implements policy, it call addShapeConversion() for the mechanism.
//
// Generally, the AST represents allowed GLSL shapes, so this isn't needed
// for GLSL. Bad shapes are caught in conversion or promotion.
@@ -793,7 +886,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
// Return 'node' if no conversion was done. Promotion handles final shape
// checking.
//
-TIntermTyped* TIntermediate::addShapeConversion(TOperator op, const TType& type, TIntermTyped* node)
+TIntermTyped* TIntermediate::addUniShapeConversion(TOperator op, const TType& type, TIntermTyped* node)
{
// some source languages don't do this
switch (source) {
@@ -806,23 +899,142 @@ TIntermTyped* TIntermediate::addShapeConversion(TOperator op, const TType& type,
// some operations don't do this
switch (op) {
+ case EOpFunctionCall:
+ case EOpReturn:
+ break;
+
+ case EOpMulAssign:
+ // want to support vector *= scalar native ops in AST and lower, not smear, similarly for
+ // matrix *= scalar, etc.
+
+ case EOpAddAssign:
+ case EOpSubAssign:
+ case EOpDivAssign:
+ case EOpAndAssign:
+ case EOpInclusiveOrAssign:
+ case EOpExclusiveOrAssign:
+ case EOpRightShiftAssign:
+ case EOpLeftShiftAssign:
+ if (node->getVectorSize() == 1)
+ return node;
+ break;
+
+ case EOpAssign:
+ break;
+
+ case EOpMix:
+ break;
+
+ default:
+ return node;
+ }
+
+ return addShapeConversion(type, node);
+}
+
+// Convert the nodes' shapes to be compatible for the operation 'op'.
+//
+// This implements policy, it call addShapeConversion() for the mechanism.
+//
+// Generally, the AST represents allowed GLSL shapes, so this isn't needed
+// for GLSL. Bad shapes are caught in conversion or promotion.
+//
+void TIntermediate::addBiShapeConversion(TOperator op, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode)
+{
+ // some source languages don't do this
+ switch (source) {
+ case EShSourceHlsl:
+ break;
+ case EShSourceGlsl:
+ default:
+ return;
+ }
+
+ // some operations don't do this
+ // 'break' will mean attempt bidirectional conversion
+ switch (op) {
+ case EOpMulAssign:
case EOpAssign:
+ case EOpAddAssign:
+ case EOpSubAssign:
+ case EOpDivAssign:
+ case EOpAndAssign:
+ case EOpInclusiveOrAssign:
+ case EOpExclusiveOrAssign:
+ case EOpRightShiftAssign:
+ case EOpLeftShiftAssign:
+ // switch to unidirectional conversion (the lhs can't change)
+ rhsNode = addUniShapeConversion(op, lhsNode->getType(), rhsNode);
+ return;
+
+ case EOpAdd:
+ case EOpSub:
+ case EOpMul:
+ case EOpDiv:
+ // want to support vector * scalar native ops in AST and lower, not smear, similarly for
+ // matrix * vector, etc.
+ if (lhsNode->getVectorSize() == 1 || rhsNode->getVectorSize() == 1)
+ return;
+ break;
+
+ case EOpRightShift:
+ case EOpLeftShift:
+ // can natively support the right operand being a scalar and the left a vector,
+ // but not the reverse
+ if (rhsNode->getVectorSize() == 1)
+ return;
+ break;
+
case EOpLessThan:
case EOpGreaterThan:
case EOpLessThanEqual:
case EOpGreaterThanEqual:
+
case EOpEqual:
case EOpNotEqual:
- case EOpFunctionCall:
- case EOpReturn:
+
case EOpLogicalAnd:
case EOpLogicalOr:
case EOpLogicalXor:
+
+ case EOpAnd:
+ case EOpInclusiveOr:
+ case EOpExclusiveOr:
+
+ case EOpMix:
break;
+
default:
- return node;
+ return;
}
+ // Do bidirectional conversions
+ if (lhsNode->getType().isScalarOrVec1() || rhsNode->getType().isScalarOrVec1()) {
+ if (lhsNode->getType().isScalarOrVec1())
+ lhsNode = addShapeConversion(rhsNode->getType(), lhsNode);
+ else
+ rhsNode = addShapeConversion(lhsNode->getType(), rhsNode);
+ }
+ lhsNode = addShapeConversion(rhsNode->getType(), lhsNode);
+ rhsNode = addShapeConversion(lhsNode->getType(), rhsNode);
+}
+
+// Convert the node's shape of type for the given type. It's not necessarily
+// an error if they are different and not converted, as some operations accept
+// mixed types. Promotion will do final shape checking.
+//
+// If there is a chance of two nodes, with conversions possible in each direction,
+// the policy for what to ask for must be in the caller; this will do what is asked.
+//
+// Return 'node' if no conversion was done. Promotion handles final shape
+// checking.
+//
+TIntermTyped* TIntermediate::addShapeConversion(const TType& type, TIntermTyped* node)
+{
+ // no conversion needed
+ if (node->getType() == type)
+ return node;
+
// structures and arrays don't change shape, either to or from
if (node->getType().isStruct() || node->getType().isArray() ||
type.isStruct() || type.isArray())
@@ -831,12 +1043,38 @@ TIntermTyped* TIntermediate::addShapeConversion(TOperator op, const TType& type,
// The new node that handles the conversion
TOperator constructorOp = mapTypeToConstructorOp(type);
- // scalar -> smeared -> vector, or
- // vec1 -> scalar, or
- // bigger vector -> smaller vector or scalar
- if ((type.isVector() && node->getType().isScalar()) ||
- (node->getType().isVector() && node->getVectorSize() == 1 && type.isScalar()) ||
- (node->getVectorSize() > type.getVectorSize() && type.isVector()))
+ // HLSL has custom semantics for scalar->mat shape conversions.
+ if (source == EShSourceHlsl) {
+ if (node->getType().isScalarOrVec1() && type.isMatrix()) {
+
+ // HLSL semantics: the scalar (or vec1) is replicated to every component of the matrix. Left to its
+ // own devices, the constructor from a scalar would populate the diagonal. This forces replication
+ // to every matrix element.
+
+ // Note that if the node is complex (e.g, a function call), we don't want to duplicate it here
+ // repeatedly, so we copy it to a temp, then use the temp.
+ const int matSize = type.getMatrixRows() * type.getMatrixCols();
+ TIntermAggregate* rhsAggregate = new TIntermAggregate();
+
+ const bool isSimple = (node->getAsSymbolNode() != nullptr) || (node->getAsConstantUnion() != nullptr);
+
+ if (!isSimple) {
+ assert(0); // TODO: use node replicator service when available.
+ }
+
+ for (int x=0; x<matSize; ++x)
+ rhsAggregate->getSequence().push_back(node);
+
+ return setAggregateOperator(rhsAggregate, constructorOp, type, node->getLoc());
+ }
+ }
+
+ // scalar -> vector or vec1 -> vector or
+ // vector -> scalar or
+ // bigger vector -> smaller vector
+ if ((node->getType().isScalarOrVec1() && type.isVector()) ||
+ (node->getType().isVector() && type.isScalar()) ||
+ (node->isVector() && type.isVector() && node->getVectorSize() > type.getVectorSize()))
return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());
return node;
@@ -894,6 +1132,10 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
case EbtUint:
case EbtInt64:
case EbtUint64:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ case EbtUint16:
+#endif
case EbtFloat:
case EbtDouble:
#ifdef AMD_EXTENSIONS
@@ -907,6 +1149,10 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
switch (from) {
case EbtInt:
case EbtUint:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ case EbtUint16:
+#endif
case EbtFloat:
#ifdef AMD_EXTENSIONS
case EbtFloat16:
@@ -920,8 +1166,12 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
case EbtUint:
switch (from) {
case EbtInt:
- return version >= 400;
+ return version >= 400 || (source == EShSourceHlsl);
case EbtUint:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ case EbtUint16:
+#endif
return true;
case EbtBool:
return (source == EShSourceHlsl);
@@ -931,6 +1181,9 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
case EbtInt:
switch (from) {
case EbtInt:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+#endif
return true;
case EbtBool:
return (source == EShSourceHlsl);
@@ -943,6 +1196,10 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
case EbtUint:
case EbtInt64:
case EbtUint64:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ case EbtUint16:
+#endif
return true;
default:
return false;
@@ -951,10 +1208,32 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
switch (from) {
case EbtInt:
case EbtInt64:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+#endif
+ return true;
+ default:
+ return false;
+ }
+#ifdef AMD_EXTENSIONS
+ case EbtFloat16:
+ switch (from) {
+ case EbtInt16:
+ case EbtUint16:
+ case EbtFloat16:
+ return true;
+ default:
+ return false;
+ }
+ case EbtUint16:
+ switch (from) {
+ case EbtInt16:
+ case EbtUint16:
return true;
default:
return false;
}
+#endif
default:
return false;
}
@@ -1094,21 +1373,79 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
break;
#endif
case EbtInt:
- switch(type.getVectorSize()) {
- case 1: op = EOpConstructInt; break;
- case 2: op = EOpConstructIVec2; break;
- case 3: op = EOpConstructIVec3; break;
- case 4: op = EOpConstructIVec4; break;
- default: break; // some compilers want this
+ if (type.getMatrixCols()) {
+ switch (type.getMatrixCols()) {
+ case 2:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructIMat2x2; break;
+ case 3: op = EOpConstructIMat2x3; break;
+ case 4: op = EOpConstructIMat2x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 3:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructIMat3x2; break;
+ case 3: op = EOpConstructIMat3x3; break;
+ case 4: op = EOpConstructIMat3x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 4:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructIMat4x2; break;
+ case 3: op = EOpConstructIMat4x3; break;
+ case 4: op = EOpConstructIMat4x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ }
+ } else {
+ switch(type.getVectorSize()) {
+ case 1: op = EOpConstructInt; break;
+ case 2: op = EOpConstructIVec2; break;
+ case 3: op = EOpConstructIVec3; break;
+ case 4: op = EOpConstructIVec4; break;
+ default: break; // some compilers want this
+ }
}
break;
case EbtUint:
- switch(type.getVectorSize()) {
- case 1: op = EOpConstructUint; break;
- case 2: op = EOpConstructUVec2; break;
- case 3: op = EOpConstructUVec3; break;
- case 4: op = EOpConstructUVec4; break;
- default: break; // some compilers want this
+ if (type.getMatrixCols()) {
+ switch (type.getMatrixCols()) {
+ case 2:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructUMat2x2; break;
+ case 3: op = EOpConstructUMat2x3; break;
+ case 4: op = EOpConstructUMat2x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 3:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructUMat3x2; break;
+ case 3: op = EOpConstructUMat3x3; break;
+ case 4: op = EOpConstructUMat3x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 4:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructUMat4x2; break;
+ case 3: op = EOpConstructUMat4x3; break;
+ case 4: op = EOpConstructUMat4x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ }
+ } else {
+ switch(type.getVectorSize()) {
+ case 1: op = EOpConstructUint; break;
+ case 2: op = EOpConstructUVec2; break;
+ case 3: op = EOpConstructUVec3; break;
+ case 4: op = EOpConstructUVec4; break;
+ default: break; // some compilers want this
+ }
}
break;
case EbtInt64:
@@ -1129,15 +1466,64 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
default: break; // some compilers want this
}
break;
- case EbtBool:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ switch(type.getVectorSize()) {
+ case 1: op = EOpConstructInt16; break;
+ case 2: op = EOpConstructI16Vec2; break;
+ case 3: op = EOpConstructI16Vec3; break;
+ case 4: op = EOpConstructI16Vec4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case EbtUint16:
switch(type.getVectorSize()) {
- case 1: op = EOpConstructBool; break;
- case 2: op = EOpConstructBVec2; break;
- case 3: op = EOpConstructBVec3; break;
- case 4: op = EOpConstructBVec4; break;
+ case 1: op = EOpConstructUint16; break;
+ case 2: op = EOpConstructU16Vec2; break;
+ case 3: op = EOpConstructU16Vec3; break;
+ case 4: op = EOpConstructU16Vec4; break;
default: break; // some compilers want this
}
break;
+#endif
+ case EbtBool:
+ if (type.getMatrixCols()) {
+ switch (type.getMatrixCols()) {
+ case 2:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructBMat2x2; break;
+ case 3: op = EOpConstructBMat2x3; break;
+ case 4: op = EOpConstructBMat2x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 3:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructBMat3x2; break;
+ case 3: op = EOpConstructBMat3x3; break;
+ case 4: op = EOpConstructBMat3x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 4:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructBMat4x2; break;
+ case 3: op = EOpConstructBMat4x3; break;
+ case 4: op = EOpConstructBMat4x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ }
+ } else {
+ switch(type.getVectorSize()) {
+ case 1: op = EOpConstructBool; break;
+ case 2: op = EOpConstructBVec2; break;
+ case 3: op = EOpConstructBVec3; break;
+ case 4: op = EOpConstructBVec4; break;
+ default: break; // some compilers want this
+ }
+ }
+ break;
default:
break;
}
@@ -1228,7 +1614,7 @@ TIntermAggregate* TIntermediate::makeAggregate(const TSourceLoc& loc)
//
// Returns the selection node created.
//
-TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermNodePair nodePair, const TSourceLoc& loc)
+TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermNodePair nodePair, const TSourceLoc& loc, TSelectionControl control)
{
//
// Don't prune the false path for compile-time constants; it's needed
@@ -1237,6 +1623,7 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermNodePair no
TIntermSelection* node = new TIntermSelection(cond, nodePair.node1, nodePair.node2);
node->setLoc(loc);
+ node->setSelectionControl(control);
return node;
}
@@ -1271,19 +1658,20 @@ TIntermTyped* TIntermediate::addMethod(TIntermTyped* object, const TType& type,
//
// For "?:" test nodes. There are three children; a condition,
// a true path, and a false path. The two paths are specified
-// as separate parameters.
+// as separate parameters. For vector 'cond', the true and false
+// are not paths, but vectors to mix.
//
// Specialization constant operations include
// - The ternary operator ( ? : )
//
// Returns the selection node created, or nullptr if one could not be.
//
-TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc& loc)
+TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc& loc, TSelectionControl control)
{
// If it's void, go to the if-then-else selection()
if (trueBlock->getBasicType() == EbtVoid && falseBlock->getBasicType() == EbtVoid) {
TIntermNodePair pair = { trueBlock, falseBlock };
- return addSelection(cond, pair, loc);
+ return addSelection(cond, pair, loc, control);
}
//
@@ -1300,14 +1688,39 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true
return nullptr;
}
+ // Handle a vector condition as a mix
+ if (!cond->getType().isScalarOrVec1()) {
+ TType targetVectorType(trueBlock->getType().getBasicType(), EvqTemporary,
+ cond->getType().getVectorSize());
+ // smear true/false operands as needed
+ trueBlock = addUniShapeConversion(EOpMix, targetVectorType, trueBlock);
+ falseBlock = addUniShapeConversion(EOpMix, targetVectorType, falseBlock);
+
+ // After conversion, types have to match.
+ if (falseBlock->getType() != trueBlock->getType())
+ return nullptr;
+
+ // make the mix operation
+ TIntermAggregate* mix = makeAggregate(loc);
+ mix = growAggregate(mix, falseBlock);
+ mix = growAggregate(mix, trueBlock);
+ mix = growAggregate(mix, cond);
+ mix->setType(targetVectorType);
+ mix->setOp(EOpMix);
+
+ return mix;
+ }
+
+ // Now have a scalar condition...
+
+ // Convert true and false expressions to matching types
+ addBiShapeConversion(EOpMix, trueBlock, falseBlock);
+
// After conversion, types have to match.
if (falseBlock->getType() != trueBlock->getType())
return nullptr;
- //
- // See if all the operands are constant, then fold it otherwise not.
- //
-
+ // Eliminate the selection when the condition is a scalar and all operands are constant.
if (cond->getAsConstantUnion() && trueBlock->getAsConstantUnion() && falseBlock->getAsConstantUnion()) {
if (cond->getAsConstantUnion()->getConstArray()[0].getBConst())
return trueBlock;
@@ -1381,6 +1794,24 @@ TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned long long u64, co
return addConstantUnion(unionArray, TType(EbtUint64, EvqConst), loc, literal);
}
+#ifdef AMD_EXTENSIONS
+TIntermConstantUnion* TIntermediate::addConstantUnion(short i16, const TSourceLoc& loc, bool literal) const
+{
+ TConstUnionArray unionArray(1);
+ unionArray[0].setIConst(i16);
+
+ return addConstantUnion(unionArray, TType(EbtInt16, EvqConst), loc, literal);
+}
+
+TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned short u16, const TSourceLoc& loc, bool literal) const
+{
+ TConstUnionArray unionArray(1);
+ unionArray[0].setUConst(u16);
+
+ return addConstantUnion(unionArray, TType(EbtUint16, EvqConst), loc, literal);
+}
+#endif
+
TIntermConstantUnion* TIntermediate::addConstantUnion(bool b, const TSourceLoc& loc, bool literal) const
{
TConstUnionArray unionArray(1);
@@ -1478,10 +1909,11 @@ const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool
//
// Create while and do-while loop nodes.
//
-TIntermLoop* TIntermediate::addLoop(TIntermNode* body, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc)
+TIntermLoop* TIntermediate::addLoop(TIntermNode* body, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc, TLoopControl control)
{
TIntermLoop* node = new TIntermLoop(body, test, terminal, testFirst);
node->setLoc(loc);
+ node->setLoopControl(control);
return node;
}
@@ -1489,13 +1921,19 @@ TIntermLoop* TIntermediate::addLoop(TIntermNode* body, TIntermTyped* test, TInte
//
// Create a for-loop sequence.
//
-TIntermAggregate* TIntermediate::addForLoop(TIntermNode* body, TIntermNode* initializer, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc)
+TIntermAggregate* TIntermediate::addForLoop(TIntermNode* body, TIntermNode* initializer, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc, TLoopControl control)
{
TIntermLoop* node = new TIntermLoop(body, test, terminal, testFirst);
node->setLoc(loc);
-
- // make a sequence of the initializer and statement
- TIntermAggregate* loopSequence = makeAggregate(initializer, loc);
+ node->setLoopControl(control);
+
+ // make a sequence of the initializer and statement, but try to reuse the
+ // aggregate already created for whatever is in the initializer, if there is one
+ TIntermAggregate* loopSequence = (initializer == nullptr ||
+ initializer->getAsAggregate() == nullptr) ? makeAggregate(initializer, loc)
+ : initializer->getAsAggregate();
+ if (loopSequence != nullptr && loopSequence->getOp() == EOpSequence)
+ loopSequence->setOp(EOpNull);
loopSequence = growAggregate(loopSequence, node);
loopSequence->setOperator(EOpSequence);
@@ -1535,6 +1973,14 @@ bool TIntermediate::postProcess(TIntermNode* root, EShLanguage /*language*/)
// Propagate 'noContraction' label in backward from 'precise' variables.
glslang::PropagateNoContraction(*this);
+ switch (textureSamplerTransformMode) {
+ case EShTexSampTransKeep:
+ break;
+ case EShTexSampTransUpgradeTextureRemoveSampler:
+ performTextureUpgradeAndSamplerRemovalTransformation(root);
+ break;
+ }
+
return true;
}
@@ -1725,6 +2171,30 @@ bool TIntermediate::isSpecializationOperation(const TIntermOperator& node) const
case EOpConvUintToInt64:
case EOpConvUint64ToInt:
case EOpConvIntToUint64:
+#ifdef AMD_EXTENSIONS
+ case EOpConvInt16ToBool:
+ case EOpConvBoolToInt16:
+ case EOpConvInt16ToInt:
+ case EOpConvIntToInt16:
+ case EOpConvInt16ToUint:
+ case EOpConvUintToInt16:
+ case EOpConvInt16ToInt64:
+ case EOpConvInt64ToInt16:
+ case EOpConvInt16ToUint64:
+ case EOpConvUint64ToInt16:
+ case EOpConvUint16ToBool:
+ case EOpConvBoolToUint16:
+ case EOpConvUint16ToInt:
+ case EOpConvIntToUint16:
+ case EOpConvUint16ToUint:
+ case EOpConvUintToUint16:
+ case EOpConvUint16ToInt64:
+ case EOpConvInt64ToUint16:
+ case EOpConvUint16ToUint64:
+ case EOpConvUint64ToUint16:
+ case EOpConvInt16ToUint16:
+ case EOpConvUint16ToInt16:
+#endif
// unary operations
case EOpNegative:
@@ -1853,6 +2323,10 @@ bool TIntermediate::promoteUnary(TIntermUnary& node)
case EOpBitwiseNot:
if (operand->getBasicType() != EbtInt &&
operand->getBasicType() != EbtUint &&
+#ifdef AMD_EXTENSIONS
+ operand->getBasicType() != EbtInt16 &&
+ operand->getBasicType() != EbtUint16 &&
+#endif
operand->getBasicType() != EbtInt64 &&
operand->getBasicType() != EbtUint64)
@@ -1867,6 +2341,10 @@ bool TIntermediate::promoteUnary(TIntermUnary& node)
operand->getBasicType() != EbtUint &&
operand->getBasicType() != EbtInt64 &&
operand->getBasicType() != EbtUint64 &&
+#ifdef AMD_EXTENSIONS
+ operand->getBasicType() != EbtInt16 &&
+ operand->getBasicType() != EbtUint16 &&
+#endif
operand->getBasicType() != EbtFloat &&
#ifdef AMD_EXTENSIONS
operand->getBasicType() != EbtFloat16 &&
@@ -1967,6 +2445,42 @@ bool TIntermediate::promoteBinary(TIntermBinary& node)
// We now have only scalars, vectors, and matrices to worry about.
//
+ // HLSL implicitly promotes bool -> int for numeric operations.
+ // (Implicit conversions to make the operands match each other's types were already done.)
+ if (getSource() == EShSourceHlsl &&
+ (left->getBasicType() == EbtBool || right->getBasicType() == EbtBool)) {
+ switch (op) {
+ case EOpLessThan:
+ case EOpGreaterThan:
+ case EOpLessThanEqual:
+ case EOpGreaterThanEqual:
+
+ case EOpRightShift:
+ case EOpLeftShift:
+
+ case EOpMod:
+
+ case EOpAnd:
+ case EOpInclusiveOr:
+ case EOpExclusiveOr:
+
+ case EOpAdd:
+ case EOpSub:
+ case EOpDiv:
+ case EOpMul:
+ left = addConversion(op, TType(EbtInt, EvqTemporary, left->getVectorSize()), left);
+ right = addConversion(op, TType(EbtInt, EvqTemporary, right->getVectorSize()), right);
+ if (left == nullptr || right == nullptr)
+ return false;
+ node.setLeft(left);
+ node.setRight(right);
+ break;
+
+ default:
+ break;
+ }
+ }
+
// Do general type checks against individual operands (comparing left and right is coming up, checking mixed shapes after that)
switch (op) {
case EOpLessThan:
@@ -2037,8 +2551,14 @@ bool TIntermediate::promoteBinary(TIntermBinary& node)
// Check for integer-only operands.
if ((left->getBasicType() != EbtInt && left->getBasicType() != EbtUint &&
- left->getBasicType() != EbtInt64 && left->getBasicType() != EbtUint64) ||
+#ifdef AMD_EXTENSIONS
+ left->getBasicType() != EbtInt16 && left->getBasicType() != EbtUint16 &&
+#endif
+ left->getBasicType() != EbtInt64 && left->getBasicType() != EbtUint64) ||
(right->getBasicType() != EbtInt && right->getBasicType() != EbtUint &&
+#ifdef AMD_EXTENSIONS
+ right->getBasicType() != EbtInt16 && right->getBasicType() != EbtUint16 &&
+#endif
right->getBasicType() != EbtInt64 && right->getBasicType() != EbtUint64))
return false;
if (left->isMatrix() || right->isMatrix())
@@ -2079,8 +2599,6 @@ bool TIntermediate::promoteBinary(TIntermBinary& node)
case EOpLogicalXor:
return left->getType() == right->getType();
- // no shifts: they can mix types (scalar int can shift a vector uint, etc.)
-
case EOpMod:
case EOpModAssign:
@@ -2094,6 +2612,7 @@ bool TIntermediate::promoteBinary(TIntermBinary& node)
case EOpAdd:
case EOpSub:
case EOpDiv:
+
case EOpAddAssign:
case EOpSubAssign:
case EOpDivAssign:
@@ -2118,7 +2637,7 @@ bool TIntermediate::promoteBinary(TIntermBinary& node)
return true;
// Finish handling the case, for all ops, where there are two vectors of different sizes
- if (left->isVector() && right->isVector() && left->getVectorSize() != right->getVectorSize())
+ if (left->isVector() && right->isVector() && left->getVectorSize() != right->getVectorSize() && right->getVectorSize() > 1)
return false;
//
@@ -2651,10 +3170,10 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
node->getLoc());
}
-void TIntermAggregate::addToPragmaTable(const TPragmaTable& pTable)
+void TIntermAggregate::setPragmaTable(const TPragmaTable& pTable)
{
- assert(!pragmaTable);
- pragmaTable = new TPragmaTable();
+ assert(pragmaTable == nullptr);
+ pragmaTable = new TPragmaTable;
*pragmaTable = pTable;
}
@@ -2667,4 +3186,56 @@ bool TIntermediate::specConstantPropagates(const TIntermTyped& node1, const TInt
(node2.getType().getQualifier().isSpecConstant() && node1.getType().getQualifier().isConstant());
}
+struct TextureUpgradeAndSamplerRemovalTransform : public TIntermTraverser {
+ void visitSymbol(TIntermSymbol* symbol) override {
+ if (symbol->getBasicType() == EbtSampler && symbol->getType().getSampler().isTexture()) {
+ symbol->getWritableType().getSampler().combined = true;
+ }
+ }
+ bool visitAggregate(TVisit, TIntermAggregate* ag) override {
+ using namespace std;
+ TIntermSequence& seq = ag->getSequence();
+ // remove pure sampler variables
+ TIntermSequence::iterator newEnd = remove_if(seq.begin(), seq.end(), [](TIntermNode* node) {
+ TIntermSymbol* symbol = node->getAsSymbolNode();
+ if (!symbol)
+ return false;
+
+ return (symbol->getBasicType() == EbtSampler && symbol->getType().getSampler().isPureSampler());
+ });
+ seq.erase(newEnd, seq.end());
+ // replace constructors with sampler/textures
+ for_each(seq.begin(), seq.end(), [](TIntermNode*& node) {
+ TIntermAggregate *constructor = node->getAsAggregate();
+ if (constructor && constructor->getOp() == EOpConstructTextureSampler) {
+ if (!constructor->getSequence().empty())
+ node = constructor->getSequence()[0];
+ }
+ });
+ return true;
+ }
+};
+
+void TIntermediate::performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root)
+{
+ TextureUpgradeAndSamplerRemovalTransform transform;
+ root->traverse(&transform);
+}
+
+const char* TIntermediate::getResourceName(TResourceType res)
+{
+ switch (res) {
+ case EResSampler: return "shift-sampler-binding";
+ case EResTexture: return "shift-texture-binding";
+ case EResImage: return "shift-image-binding";
+ case EResUbo: return "shift-UBO-binding";
+ case EResSsbo: return "shift-ssbo-binding";
+ case EResUav: return "shift-uav-binding";
+ default:
+ assert(0); // internal error: should only be called with valid resource types.
+ return nullptr;
+ }
+}
+
+
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h
index 029c24a822b..7333bc964e4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h
@@ -33,6 +33,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
+#pragma once
+
#include "../Include/Common.h"
#include "reflection.h"
#include "localintermediate.h"
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
index d2b6b260f2a..bbc3cac085f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
@@ -234,6 +234,31 @@ void TParseContextBase::trackLinkage(TSymbol& symbol)
linkageSymbols.push_back(&symbol);
}
+// Ensure index is in bounds, correct if necessary.
+// Give an error if not.
+void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int& index)
+{
+ if (index < 0) {
+ error(loc, "", "[", "index out of range '%d'", index);
+ index = 0;
+ } else if (type.isArray()) {
+ if (type.isExplicitlySizedArray() && index >= type.getOuterArraySize()) {
+ error(loc, "", "[", "array index out of range '%d'", index);
+ index = type.getOuterArraySize() - 1;
+ }
+ } else if (type.isVector()) {
+ if (index >= type.getVectorSize()) {
+ error(loc, "", "[", "vector index out of range '%d'", index);
+ index = type.getVectorSize() - 1;
+ }
+ } else if (type.isMatrix()) {
+ if (index >= type.getMatrixCols()) {
+ error(loc, "", "[", "matrix index out of range '%d'", index);
+ index = type.getMatrixCols() - 1;
+ }
+ }
+}
+
// Make a shared symbol have a non-shared version that can be edited by the current
// compile, such that editing its type will not change the shared version and will
// effect all nodes already sharing it (non-shallow type),
@@ -531,7 +556,7 @@ void TParseContextBase::parseSwizzleSelector(const TSourceLoc& loc, const TStrin
// Make the passed-in variable information become a member of the
// global uniform block. If this doesn't exist yet, make it.
//
-void TParseContextBase::growGlobalUniformBlock(TSourceLoc& loc, TType& memberType, TString& memberName, TTypeList* typeList)
+void TParseContextBase::growGlobalUniformBlock(const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList)
{
// Make the global block, if not yet made.
if (globalUniformBlock == nullptr) {
@@ -544,6 +569,10 @@ void TParseContextBase::growGlobalUniformBlock(TSourceLoc& loc, TType& memberTyp
firstNewMember = 0;
}
+ // Update with binding and set
+ globalUniformBlock->getWritableType().getQualifier().layoutBinding = globalUniformBinding;
+ globalUniformBlock->getWritableType().getQualifier().layoutSet = globalUniformSet;
+
// Add the requested member as a member to the global block.
TType* type = new TType;
type->shallowCopy(memberType);
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
index 78f459a9240..733b74dab1b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
@@ -49,10 +49,12 @@ namespace glslang {
TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins,
int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
- TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) :
- TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
- contextPragma(true, false), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0), statementNestingLevel(0),
- inMain(false), postMainReturn(false), currentFunctionType(nullptr), blockName(nullptr),
+ TInfoSink& infoSink, bool forwardCompatible, EShMessages messages,
+ const TString* entryPoint) :
+ TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language,
+ infoSink, forwardCompatible, messages, entryPoint),
+ inMain(false),
+ blockName(nullptr),
limits(resources.limits),
atomicUintOffsets(nullptr), anyIndexLimits(false)
{
@@ -87,6 +89,9 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b
if (language == EShLangGeometry)
globalOutputDefaults.layoutStream = 0;
+
+ if (entryPoint != nullptr && entryPoint->size() > 0 && *entryPoint != "main")
+ infoSink.info.message(EPrefixError, "Source entry point must be \"main\"");
}
TParseContext::~TParseContext()
@@ -121,11 +126,6 @@ void TParseContext::setPrecisionDefaults()
sampler.set(EbtFloat, Esd2D);
sampler.external = true;
defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
- } else {
- // Non-ES profile
- // All default to highp.
- for (int type = 0; type < maxSamplerIndex; ++type)
- defaultSamplerPrecision[type] = EpqHigh;
}
// If we are parsing built-in computational variables/functions, it is meaningful to record
@@ -141,6 +141,13 @@ void TParseContext::setPrecisionDefaults()
defaultPrecision[EbtUint] = EpqHigh;
defaultPrecision[EbtFloat] = EpqHigh;
}
+
+ if (profile != EEsProfile) {
+ // Non-ES profile
+ // All sampler precisions default to highp.
+ for (int type = 0; type < maxSamplerIndex; ++type)
+ defaultSamplerPrecision[type] = EpqHigh;
+ }
}
defaultPrecision[EbtSampler] = EpqLow;
@@ -255,6 +262,10 @@ void TParseContext::handlePragma(const TSourceLoc& loc, const TVector<TString>&
error(loc, "\")\" expected to end 'debug' pragma", "#pragma", "");
return;
}
+ } else if (spvVersion.spv > 0 && tokens[0].compare("use_storage_buffer") == 0) {
+ if (tokens.size() != 1)
+ error(loc, "extra tokens", "#pragma", "");
+ intermediate.setUseStorageBuffer();
}
}
@@ -342,10 +353,8 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
TIntermTyped* result = nullptr;
int indexValue = 0;
- if (index->getQualifier().isFrontEndConstant()) {
+ if (index->getQualifier().isFrontEndConstant())
indexValue = index->getAsConstantUnion()->getConstArray()[0].getIConst();
- checkIndex(loc, base->getType(), indexValue);
- }
variableCheck(base);
if (! base->isArray() && ! base->isMatrix() && ! base->isVector()) {
@@ -353,10 +362,12 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
error(loc, " left of '[' is not of type array, matrix, or vector ", base->getAsSymbolNode()->getName().c_str(), "");
else
error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", "");
- } else if (base->getType().getQualifier().isFrontEndConstant() && index->getQualifier().isFrontEndConstant())
+ } else if (base->getType().getQualifier().isFrontEndConstant() && index->getQualifier().isFrontEndConstant()) {
+ // both base and index are front-end constants
+ checkIndex(loc, base->getType(), indexValue);
return intermediate.foldDereference(base, indexValue, loc);
- else {
- // at least one of base and index is variable...
+ } else {
+ // at least one of base and index is not a front-end constant variable...
if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
handleIoResizeArrayAccess(loc, base);
@@ -364,6 +375,8 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
if (index->getQualifier().isFrontEndConstant()) {
if (base->getType().isImplicitlySizedArray())
updateImplicitArraySize(loc, base, indexValue);
+ else
+ checkIndex(loc, base->getType(), indexValue);
result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
} else {
if (base->getType().isImplicitlySizedArray()) {
@@ -376,7 +389,8 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
if (base->getQualifier().storage == EvqBuffer)
requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array");
else if (base->getQualifier().storage == EvqUniform)
- profileRequires(base->getLoc(), EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, "variable indexing uniform block array");
+ profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5,
+ "variable indexing uniform block array");
else {
// input/output blocks either don't exist or can be variable indexed
}
@@ -385,7 +399,7 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
else if (base->getBasicType() == EbtSampler && version >= 130) {
const char* explanation = "variable indexing sampler array";
requireProfile(base->getLoc(), EEsProfile | ECoreProfile | ECompatibilityProfile, explanation);
- profileRequires(base->getLoc(), EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, explanation);
+ profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, explanation);
profileRequires(base->getLoc(), ECoreProfile | ECompatibilityProfile, 400, nullptr, explanation);
}
@@ -417,29 +431,6 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
return result;
}
-void TParseContext::checkIndex(const TSourceLoc& loc, const TType& type, int& index)
-{
- if (index < 0) {
- error(loc, "", "[", "index out of range '%d'", index);
- index = 0;
- } else if (type.isArray()) {
- if (type.isExplicitlySizedArray() && index >= type.getOuterArraySize()) {
- error(loc, "", "[", "array index out of range '%d'", index);
- index = type.getOuterArraySize() - 1;
- }
- } else if (type.isVector()) {
- if (index >= type.getVectorSize()) {
- error(loc, "", "[", "vector index out of range '%d'", index);
- index = type.getVectorSize() - 1;
- }
- } else if (type.isMatrix()) {
- if (index >= type.getMatrixCols()) {
- error(loc, "", "[", "matrix index out of range '%d'", index);
- index = type.getMatrixCols() - 1;
- }
- }
-}
-
// for ES 2.0 (version 100) limitations for almost all index operations except vertex-shader uniforms
void TParseContext::handleIndexLimits(const TSourceLoc& /*loc*/, TIntermTyped* base, TIntermTyped* index)
{
@@ -674,7 +665,8 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm
// leaving swizzles and struct/block dereferences.
TIntermTyped* result = base;
- if (base->isVector() || base->isScalar()) {
+ if ((base->isVector() || base->isScalar()) &&
+ (base->isFloatingDomain() || base->isIntegerDomain() || base->getBasicType() == EbtBool)) {
if (base->isScalar()) {
const char* dotFeature = "scalar swizzle";
requireProfile(loc, ~EEsProfile, dotFeature);
@@ -906,7 +898,7 @@ TIntermAggregate* TParseContext::handleFunctionDefinition(const TSourceLoc& loc,
loopNestingLevel = 0;
statementNestingLevel = 0;
controlFlowNestingLevel = 0;
- postMainReturn = false;
+ postEntryPointReturn = false;
return paramNodes;
}
@@ -1136,7 +1128,13 @@ void TParseContext::computeBuiltinPrecisions(TIntermTyped& node, const TFunction
operationPrecision = std::max(operationPrecision, function[arg].type->getQualifier().precision);
}
// compute the result precision
+#ifdef AMD_EXTENSIONS
+ if (agg->isSampling() ||
+ agg->getOp() == EOpImageLoad || agg->getOp() == EOpImageStore ||
+ agg->getOp() == EOpImageLoadLod || agg->getOp() == EOpImageStoreLod)
+#else
if (agg->isSampling() || agg->getOp() == EOpImageLoad || agg->getOp() == EOpImageStore)
+#endif
resultPrecision = sequence[0]->getAsTyped()->getQualifier().precision;
else if (function.getType().getBasicType() != EbtBool)
resultPrecision = function.getType().getQualifier().precision == EpqNone ?
@@ -1187,7 +1185,7 @@ void TParseContext::checkLocation(const TSourceLoc& loc, TOperator op)
error(loc, "tessellation control barrier() cannot be placed within flow control", "", "");
if (! inMain)
error(loc, "tessellation control barrier() must be in main()", "", "");
- else if (postMainReturn)
+ else if (postEntryPointReturn)
error(loc, "tessellation control barrier() cannot be placed after a return from main()", "", "");
}
break;
@@ -1379,7 +1377,6 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
unaryArg = callNode.getAsUnaryNode()->getOperand();
arg0 = unaryArg;
}
- const TIntermSequence& aggArgs = *argp; // only valid when unaryArg is nullptr
switch (callNode.getOp()) {
case EOpTextureGather:
@@ -1410,8 +1407,9 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_texture_gather, feature);
else
profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature);
- if (! aggArgs[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion())
- profileRequires(loc, EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, "non-constant offset argument");
+ if (! (*argp)[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion())
+ profileRequires(loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5,
+ "non-constant offset argument");
if (! fnCandidate[0].type->getSampler().shadow)
compArg = 3;
break;
@@ -1420,7 +1418,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
if (! fnCandidate[0].type->getSampler().shadow)
compArg = 3;
// check for constant offsets
- if (! aggArgs[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion())
+ if (! (*argp)[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion())
error(loc, "must be a compile-time constant:", feature, "offsets argument");
break;
default:
@@ -1428,16 +1426,63 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
}
if (compArg > 0 && compArg < fnCandidate.getParamCount()) {
- if (aggArgs[compArg]->getAsConstantUnion()) {
- int value = aggArgs[compArg]->getAsConstantUnion()->getConstArray()[0].getIConst();
+ if ((*argp)[compArg]->getAsConstantUnion()) {
+ int value = (*argp)[compArg]->getAsConstantUnion()->getConstArray()[0].getIConst();
if (value < 0 || value > 3)
error(loc, "must be 0, 1, 2, or 3:", feature, "component argument");
} else
error(loc, "must be a compile-time constant:", feature, "component argument");
}
+#ifdef AMD_EXTENSIONS
+ bool bias = false;
+ if (callNode.getOp() == EOpTextureGather)
+ bias = fnCandidate.getParamCount() > 3;
+ else if (callNode.getOp() == EOpTextureGatherOffset ||
+ callNode.getOp() == EOpTextureGatherOffsets)
+ bias = fnCandidate.getParamCount() > 4;
+
+ if (bias) {
+ TString biasFeatureString = fnCandidate.getName() + "with bias argument";
+ const char* feature = biasFeatureString.c_str();
+ profileRequires(loc, ~EEsProfile, 450, nullptr, feature);
+ requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature);
+ }
+#endif
+
+ break;
+ }
+
+#ifdef AMD_EXTENSIONS
+ case EOpSparseTextureGather:
+ case EOpSparseTextureGatherOffset:
+ case EOpSparseTextureGatherOffsets:
+ {
+ bool bias = false;
+ if (callNode.getOp() == EOpSparseTextureGather)
+ bias = fnCandidate.getParamCount() > 4;
+ else if (callNode.getOp() == EOpSparseTextureGatherOffset ||
+ callNode.getOp() == EOpSparseTextureGatherOffsets)
+ bias = fnCandidate.getParamCount() > 5;
+
+ if (bias) {
+ TString featureString = fnCandidate.getName() + "with bias argument";
+ const char* feature = featureString.c_str();
+ profileRequires(loc, ~EEsProfile, 450, nullptr, feature);
+ requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature);
+ }
+
+ break;
+ }
+
+ case EOpSparseTextureGatherLod:
+ case EOpSparseTextureGatherLodOffset:
+ case EOpSparseTextureGatherLodOffsets:
+ {
+ requireExtensions(loc, 1, &E_GL_ARB_sparse_texture2, fnCandidate.getName().c_str());
break;
}
+#endif
case EOpTextureOffset:
case EOpTextureFetchOffset:
@@ -1464,12 +1509,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
}
if (arg > 0) {
- if (! aggArgs[arg]->getAsConstantUnion())
+ if (! (*argp)[arg]->getAsConstantUnion())
error(loc, "argument must be compile-time constant", "texel offset", "");
else {
- const TType& type = aggArgs[arg]->getAsTyped()->getType();
+ const TType& type = (*argp)[arg]->getAsTyped()->getType();
for (int c = 0; c < type.getVectorSize(); ++c) {
- int offset = aggArgs[arg]->getAsConstantUnion()->getConstArray()[c].getIConst();
+ int offset = (*argp)[arg]->getAsConstantUnion()->getConstArray()[c].getIConst();
if (offset > resources.maxProgramTexelOffset || offset < resources.minProgramTexelOffset)
error(loc, "value is out of range:", "texel offset", "[gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]");
}
@@ -1509,6 +1554,23 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
break;
}
+#ifdef NV_EXTENSIONS
+ case EOpAtomicAdd:
+ case EOpAtomicMin:
+ case EOpAtomicMax:
+ case EOpAtomicAnd:
+ case EOpAtomicOr:
+ case EOpAtomicXor:
+ case EOpAtomicExchange:
+ case EOpAtomicCompSwap:
+ {
+ if (arg0->getType().getBasicType() == EbtInt64 || arg0->getType().getBasicType() == EbtUint64)
+ requireExtensions(loc, 1, &E_GL_NV_shader_atomic_int64, fnCandidate.getName().c_str());
+
+ break;
+ }
+#endif
+
case EOpInterpolateAtCentroid:
case EOpInterpolateAtSample:
case EOpInterpolateAtOffset:
@@ -1578,7 +1640,8 @@ void TParseContext::nonOpBuiltInCheck(const TSourceLoc& loc, const TFunction& fn
profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature);
int offsetArg = fnCandidate[0].type->getSampler().shadow ? 3 : 2;
if (! callNode.getSequence()[offsetArg]->getAsConstantUnion())
- profileRequires(loc, EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, "non-constant offset argument");
+ profileRequires(loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5,
+ "non-constant offset argument");
if (! fnCandidate[0].type->getSampler().shadow)
compArg = 3;
} else if (fnCandidate.getName().compare("textureGatherOffsets") == 0) {
@@ -2096,6 +2159,17 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
case EOpConstructDMat4x2:
case EOpConstructDMat4x3:
case EOpConstructDMat4x4:
+#ifdef AMD_EXTENSIONS
+ case EOpConstructF16Mat2x2:
+ case EOpConstructF16Mat2x3:
+ case EOpConstructF16Mat2x4:
+ case EOpConstructF16Mat3x2:
+ case EOpConstructF16Mat3x3:
+ case EOpConstructF16Mat3x4:
+ case EOpConstructF16Mat4x2:
+ case EOpConstructF16Mat4x3:
+ case EOpConstructF16Mat4x4:
+#endif
constructingMatrix = true;
break;
default:
@@ -2156,6 +2230,10 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
case EOpConstructUint:
case EOpConstructInt64:
case EOpConstructUint64:
+#ifdef AMD_EXTENSIONS
+ case EOpConstructInt16:
+ case EOpConstructUint16:
+#endif
case EOpConstructBool:
case EOpConstructBVec2:
case EOpConstructBVec3:
@@ -2172,6 +2250,14 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
case EOpConstructU64Vec2:
case EOpConstructU64Vec3:
case EOpConstructU64Vec4:
+#ifdef AMD_EXTENSIONS
+ case EOpConstructI16Vec2:
+ case EOpConstructI16Vec3:
+ case EOpConstructI16Vec4:
+ case EOpConstructU16Vec2:
+ case EOpConstructU16Vec3:
+ case EOpConstructU16Vec4:
+#endif
// This was the list of valid ones, if they aren't converting from float
// and aren't making an array.
makeSpecConst = ! floatArgument && ! type.isArray();
@@ -2372,6 +2458,16 @@ void TParseContext::boolCheck(const TSourceLoc& loc, const TPublicType& pType)
void TParseContext::samplerCheck(const TSourceLoc& loc, const TType& type, const TString& identifier, TIntermTyped* /*initializer*/)
{
+ // Check that the appropriate extension is enabled if external sampler is used.
+ // There are two extensions. The correct one must be used based on GLSL version.
+ if (type.getBasicType() == EbtSampler && type.getSampler().external) {
+ if (version < 300) {
+ requireExtensions(loc, 1, &E_GL_OES_EGL_image_external, "samplerExternalOES");
+ } else {
+ requireExtensions(loc, 1, &E_GL_OES_EGL_image_external_essl3, "samplerExternalOES");
+ }
+ }
+
if (type.getQualifier().storage == EvqUniform)
return;
@@ -2396,16 +2492,22 @@ void TParseContext::atomicUintCheck(const TSourceLoc& loc, const TType& type, co
error(loc, "atomic_uints can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
}
-void TParseContext::transparentCheck(const TSourceLoc& loc, const TType& type, const TString& /*identifier*/)
+void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
{
if (parsingBuiltins)
return;
- // Vulkan doesn't allow transparent uniforms outside of blocks
- if (spvVersion.vulkan == 0 || type.getQualifier().storage != EvqUniform)
+ if (type.getQualifier().storage != EvqUniform)
return;
- if (type.containsNonOpaque())
- vulkanRemoved(loc, "non-opaque uniforms outside a block");
+
+ if (type.containsNonOpaque()) {
+ // Vulkan doesn't allow transparent uniforms outside of blocks
+ if (spvVersion.vulkan > 0)
+ vulkanRemoved(loc, "non-opaque uniforms outside a block");
+ // OpenGL wants locations on these (unless they are getting automapped)
+ if (spvVersion.openGl > 0 && !type.getQualifier().hasLocation() && !intermediate.getAutoMapLocations())
+ error(loc, "non-opaque uniform variables need a layout(location=L)", identifier.c_str(), "");
+ }
}
//
@@ -2464,6 +2566,9 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
}
if (publicType.basicType == EbtInt || publicType.basicType == EbtUint ||
+#ifdef AMD_EXTENSIONS
+ publicType.basicType == EbtInt16 || publicType.basicType == EbtUint16 ||
+#endif
publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 ||
publicType.basicType == EbtDouble)
profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
@@ -2474,6 +2579,9 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
if (!qualifier.flat) {
#endif
if (publicType.basicType == EbtInt || publicType.basicType == EbtUint ||
+#ifdef AMD_EXTENSIONS
+ publicType.basicType == EbtInt16 || publicType.basicType == EbtUint16 ||
+#endif
publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 ||
publicType.basicType == EbtDouble ||
(publicType.userDef && (publicType.userDef->containsBasicType(EbtInt) ||
@@ -2894,7 +3002,7 @@ void TParseContext::structArrayCheck(const TSourceLoc& /*loc*/, const TType& typ
}
}
-void TParseContext::arrayUnsizedCheck(const TSourceLoc& loc, const TQualifier& qualifier, const TArraySizes* arraySizes, bool initializer, bool lastMember)
+void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qualifier, TArraySizes* arraySizes, bool initializer, bool lastMember)
{
assert(arraySizes);
@@ -2906,9 +3014,14 @@ void TParseContext::arrayUnsizedCheck(const TSourceLoc& loc, const TQualifier& q
if (initializer)
return;
- // No environment lets any non-outer-dimension that's to be implicitly sized
- if (arraySizes->isInnerImplicit())
+ // No environment allows any non-outer-dimension to be implicitly sized
+ if (arraySizes->isInnerImplicit()) {
error(loc, "only outermost dimension of an array of arrays can be implicitly sized", "[]", "");
+ arraySizes->clearInnerImplicit();
+ }
+
+ if (arraySizes->isInnerSpecialization())
+ error(loc, "only outermost dimension of an array of arrays can be a specialization constant", "[]", "");
// desktop always allows outer-dimension-unsized variable arrays,
if (profile != EEsProfile)
@@ -2925,19 +3038,22 @@ void TParseContext::arrayUnsizedCheck(const TSourceLoc& loc, const TQualifier& q
switch (language) {
case EShLangGeometry:
if (qualifier.storage == EvqVaryingIn)
- if (extensionsTurnedOn(Num_AEP_geometry_shader, AEP_geometry_shader))
+ if ((profile == EEsProfile && version >= 320) ||
+ extensionsTurnedOn(Num_AEP_geometry_shader, AEP_geometry_shader))
return;
break;
case EShLangTessControl:
if ( qualifier.storage == EvqVaryingIn ||
(qualifier.storage == EvqVaryingOut && ! qualifier.patch))
- if (extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
+ if ((profile == EEsProfile && version >= 320) ||
+ extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
return;
break;
case EShLangTessEvaluation:
if ((qualifier.storage == EvqVaryingIn && ! qualifier.patch) ||
qualifier.storage == EvqVaryingOut)
- if (extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
+ if ((profile == EEsProfile && version >= 320) ||
+ extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
return;
break;
default:
@@ -2990,7 +3106,7 @@ void TParseContext::arrayDimMerge(TType& type, const TArraySizes* sizes)
// Do all the semantic checking for declaring or redeclaring an array, with and
// without a size, and make the right changes to the symbol table.
//
-void TParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol)
+void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifier, const TType& type, TSymbol*& symbol)
{
if (symbol == nullptr) {
bool currentScope;
@@ -3176,7 +3292,8 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS
return nullptr;
bool nonEsRedecls = (profile != EEsProfile && (version >= 130 || identifier == "gl_TexCoord"));
- bool esRedecls = (profile == EEsProfile && extensionsTurnedOn(Num_AEP_shader_io_blocks, AEP_shader_io_blocks));
+ bool esRedecls = (profile == EEsProfile &&
+ (version >= 320 || extensionsTurnedOn(Num_AEP_shader_io_blocks, AEP_shader_io_blocks)));
if (! esRedecls && ! nonEsRedecls)
return nullptr;
@@ -3315,7 +3432,7 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS
void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newTypeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes)
{
const char* feature = "built-in block redeclaration";
- profileRequires(loc, EEsProfile, 0, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
+ profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment") {
@@ -3424,14 +3541,6 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
oldType.getQualifier().flat = newType.getQualifier().flat;
oldType.getQualifier().nopersp = newType.getQualifier().nopersp;
-#ifdef NV_EXTENSIONS
- if (member->type->getFieldName() == "gl_Layer") {
- if (!newType.getQualifier().layoutViewportRelative && newType.getQualifier().layoutSecondaryViewportRelativeOffset == -2048)
- error(loc, "redeclaration only allowed for viewport_relative or secondary_view_offset layout", "redeclaration", member->type->getFieldName().c_str());
- oldType.getQualifier().layoutViewportRelative = newType.getQualifier().layoutViewportRelative;
- oldType.getQualifier().layoutSecondaryViewportRelativeOffset = newType.getQualifier().layoutSecondaryViewportRelativeOffset;
- }
-#endif
if (oldType.isImplicitlySizedArray() && newType.isExplicitlySizedArray())
oldType.changeOuterArraySize(newType.getOuterArraySize());
@@ -3929,6 +4038,14 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
publicType.shaderQualifiers.earlyFragmentTests = true;
return;
}
+ if (id == "post_depth_coverage") {
+ requireExtensions(loc, Num_post_depth_coverageEXTs, post_depth_coverageEXTs, "post depth coverage");
+ if (extensionTurnedOn(E_GL_ARB_post_depth_coverage)) {
+ publicType.shaderQualifiers.earlyFragmentTests = true;
+ }
+ publicType.shaderQualifiers.postDepthCoverage = true;
+ return;
+ }
for (TLayoutDepth depth = (TLayoutDepth)(EldNone + 1); depth < EldCount; depth = (TLayoutDepth)(depth+1)) {
if (id == TQualifier::getLayoutDepthString(depth)) {
requireProfile(loc, ECoreProfile | ECompatibilityProfile, "depth layout qualifier");
@@ -3941,7 +4058,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
bool found = false;
for (TBlendEquationShift be = (TBlendEquationShift)0; be < EBlendCount; be = (TBlendEquationShift)(be + 1)) {
if (id == TQualifier::getBlendEquationString(be)) {
- requireExtensions(loc, 1, &E_GL_KHR_blend_equation_advanced, "blend equation");
+ profileRequires(loc, EEsProfile, 320, E_GL_KHR_blend_equation_advanced, "blend equation");
+ profileRequires(loc, ~EEsProfile, 0, E_GL_KHR_blend_equation_advanced, "blend equation");
intermediate.addBlendEquation(be);
publicType.shaderQualifiers.blendEquation = true;
found = true;
@@ -4120,6 +4238,11 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
}
return;
}
+ if (id == "num_views") {
+ requireExtensions(loc, Num_OVR_multiview_EXTs, OVR_multiview_EXTs, "num_views");
+ publicType.shaderQualifiers.numViews = value;
+ return;
+ }
#if NV_EXTENSIONS
if (language == EShLangVertex ||
@@ -4196,6 +4319,10 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
if (id.compare(0, 11, "local_size_") == 0) {
profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize");
profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
+ if (id.size() == 12 && value == 0) {
+ error(loc, "must be at least 1", id.c_str(), "");
+ return;
+ }
if (id == "local_size_x") {
publicType.shaderQualifiers.localSize[0] = value;
return;
@@ -4246,7 +4373,6 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
// This is also true for overriding layout-qualifier-names, where one
// overrides the other (e.g., row_major vs. column_major); only the last
// occurrence has any effect."
-//
void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifier& src, bool inheritOnly)
{
if (src.hasMatrix())
@@ -4328,6 +4454,25 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb
}
}
+ // user-variable location check, which are required for SPIR-V in/out:
+ // - variables have it directly,
+ // - blocks have it on each member (already enforced), so check first one
+ if (spvVersion.spv > 0 && !parsingBuiltins && qualifier.builtIn == EbvNone &&
+ !qualifier.hasLocation() && !intermediate.getAutoMapLocations()) {
+
+ switch (qualifier.storage) {
+ case EvqVaryingIn:
+ case EvqVaryingOut:
+ if (type.getBasicType() != EbtBlock ||
+ (!(*type.getStruct())[0].type->getQualifier().hasLocation() &&
+ (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone))
+ error(loc, "SPIR-V requires location for user input/output", "location", "");
+ break;
+ default:
+ break;
+ }
+ }
+
// Check packing and matrix
if (qualifier.hasUniformLayout()) {
switch (qualifier.storage) {
@@ -4355,6 +4500,22 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb
}
}
+// "For some blocks declared as arrays, the location can only be applied at the block level:
+// When a block is declared as an array where additional locations are needed for each member
+// for each block array element, it is a compile-time error to specify locations on the block
+// members. That is, when locations would be under specified by applying them on block members,
+// they are not allowed on block members. For arrayed interfaces (those generally having an
+// extra level of arrayness due to interface expansion), the outer array is stripped before
+// applying this rule."
+void TParseContext::layoutMemberLocationArrayCheck(const TSourceLoc& loc, bool memberWithLocation, TArraySizes* arraySizes)
+{
+ if (memberWithLocation && arraySizes != nullptr) {
+ if (arraySizes->getNumDims() > (currentBlockQualifier.isArrayedIo(language) ? 1 : 0))
+ error(loc, "cannot use in a block array where new locations are needed for each block element",
+ "location", "");
+ }
+}
+
// Do layout error checking with respect to a type.
void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
{
@@ -4455,7 +4616,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
} else
lastBinding += type.getCumulativeArraySize();
}
- if (lastBinding >= resources.maxCombinedTextureImageUnits)
+ if (spvVersion.vulkan == 0 && lastBinding >= resources.maxCombinedTextureImageUnits)
error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : "");
}
if (type.getBasicType() == EbtAtomicUint) {
@@ -4500,7 +4661,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
}
}
} else if (type.isImage() && ! qualifier.writeonly) {
- const char *explanation = "image variables declared 'writeonly' without a format layout qualifier";
+ const char *explanation = "image variables not declared 'writeonly' and without a format layout qualifier";
requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation);
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation);
}
@@ -4529,6 +4690,10 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
case EbtUint:
case EbtInt64:
case EbtUint64:
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ case EbtUint16:
+#endif
case EbtBool:
case EbtFloat:
case EbtDouble:
@@ -4650,8 +4815,24 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua
if (shaderQualifiers.geometry != ElgNone)
error(loc, message, TQualifier::getGeometryString(shaderQualifiers.geometry), "");
+ if (shaderQualifiers.spacing != EvsNone)
+ error(loc, message, TQualifier::getVertexSpacingString(shaderQualifiers.spacing), "");
+ if (shaderQualifiers.order != EvoNone)
+ error(loc, message, TQualifier::getVertexOrderString(shaderQualifiers.order), "");
+ if (shaderQualifiers.pointMode)
+ error(loc, message, "point_mode", "");
if (shaderQualifiers.invocations != TQualifier::layoutNotSet)
error(loc, message, "invocations", "");
+ if (shaderQualifiers.earlyFragmentTests)
+ error(loc, message, "early_fragment_tests", "");
+ if (shaderQualifiers.postDepthCoverage)
+ error(loc, message, "post_depth_coverage", "");
+ for (int i = 0; i < 3; ++i) {
+ if (shaderQualifiers.localSize[i] > 1)
+ error(loc, message, "local_size", "");
+ if (shaderQualifiers.localSizeSpecId[i] != TQualifier::layoutNotSet)
+ error(loc, message, "local_size id", "");
+ }
if (shaderQualifiers.vertices != TQualifier::layoutNotSet) {
if (language == EShLangGeometry)
error(loc, message, "max_vertices", "");
@@ -4660,15 +4841,10 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua
else
assert(0);
}
- for (int i = 0; i < 3; ++i) {
- if (shaderQualifiers.localSize[i] > 1)
- error(loc, message, "local_size", "");
- if (shaderQualifiers.localSizeSpecId[i] != TQualifier::layoutNotSet)
- error(loc, message, "local_size id", "");
- }
if (shaderQualifiers.blendEquation)
error(loc, message, "blend equation", "");
- // TBD: correctness: are any of these missing? pixelCenterInteger, originUpperLeft, spacing, order, pointmode, earlyfragment, depth
+ if (shaderQualifiers.numViews != TQualifier::layoutNotSet)
+ error(loc, message, "num_views", "");
}
// Correct and/or advance an object's offset layout qualifier.
@@ -4689,15 +4865,11 @@ void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol)
// Check for overlap
int numOffsets = 4;
if (symbol.getType().isArray()) {
- if (symbol.getType().isExplicitlySizedArray())
+ if (symbol.getType().isExplicitlySizedArray() && ! symbol.getType().getArraySizes()->isInnerImplicit())
numOffsets *= symbol.getType().getCumulativeArraySize();
else {
- // TODO: functionality: implicitly-sized atomic_uint arrays.
- // We don't know the full size until later. This might
- // be a specification problem, will report to Khronos. For the
- // cases that is not true, the rest of the checking would need
- // to be done at link time instead of compile time.
- warn(loc, "implicitly sized atomic_uint array treated as having one element for tracking the default offset", "atomic_uint", "");
+ // "It is a compile-time error to declare an unsized array of atomic_uint."
+ error(loc, "array must be explicitly sized", "atomic_uint", "");
}
}
int repeated = intermediate.addUsedOffsets(qualifier.layoutBinding, offset, numOffsets);
@@ -4960,7 +5132,7 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
samplerCheck(loc, type, identifier, initializer);
atomicUintCheck(loc, type, identifier);
- transparentCheck(loc, type, identifier);
+ transparentOpaqueCheck(loc, type, identifier);
if (identifier != "gl_FragCoord" && (publicType.shaderQualifiers.originUpperLeft || publicType.shaderQualifiers.pixelCenterInteger))
error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", "");
@@ -4983,7 +5155,7 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
arrayDimMerge(type, arraySizes);
// Check that implicit sizing is only where allowed.
- arrayUnsizedCheck(loc, type.getQualifier(), &type.getArraySizes(), initializer != nullptr, false);
+ arraySizesCheck(loc, type.getQualifier(), &type.getArraySizes(), initializer != nullptr, false);
if (! arrayQualifierError(loc, type.getQualifier()) && ! arrayError(loc, type))
declareArray(loc, identifier, type, symbol);
@@ -5016,6 +5188,8 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
// look for errors in layout qualifier use
layoutObjectCheck(loc, *symbol);
+
+ // fix up
fixOffset(loc, *symbol);
return initNode;
@@ -5053,7 +5227,7 @@ TVariable* TParseContext::makeInternalVariable(const char* name, const TType& ty
//
// Return the successfully declared variable.
//
-TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type)
+TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, const TString& identifier, const TType& type)
{
// make a new variable
TVariable* variable = new TVariable(&identifier, type);
@@ -5300,6 +5474,9 @@ TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const
// Test for the correctness of the parameters passed to various constructor functions
// and also convert them to the right data type, if allowed and required.
//
+// 'node' is what to construct from.
+// 'type' is what type to construct.
+//
// Returns nullptr for an error or the constructed node (aggregate or typed) for no error.
//
TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* node, const TType& type)
@@ -5329,7 +5506,7 @@ TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode*
bool singleArg;
if (aggrNode) {
- if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1)
+ if (aggrNode->getOp() != EOpNull)
singleArg = true;
else
singleArg = false;
@@ -5477,6 +5654,22 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
basicOp = EOpConstructUint64;
break;
+#ifdef AMD_EXTENSIONS
+ case EOpConstructI16Vec2:
+ case EOpConstructI16Vec3:
+ case EOpConstructI16Vec4:
+ case EOpConstructInt16:
+ basicOp = EOpConstructInt16;
+ break;
+
+ case EOpConstructU16Vec2:
+ case EOpConstructU16Vec3:
+ case EOpConstructU16Vec4:
+ case EOpConstructUint16:
+ basicOp = EOpConstructUint16;
+ break;
+#endif
+
case EOpConstructBVec2:
case EOpConstructBVec3:
case EOpConstructBVec4:
@@ -5533,7 +5726,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
blockStageIoCheck(loc, currentBlockQualifier);
blockQualifierCheck(loc, currentBlockQualifier, instanceName != nullptr);
if (arraySizes) {
- arrayUnsizedCheck(loc, currentBlockQualifier, arraySizes, false, false);
+ arraySizesCheck(loc, currentBlockQualifier, arraySizes, false, false);
arrayDimCheck(loc, arraySizes, 0);
if (arraySizes->getNumDims() > 1)
requireProfile(loc, ~EEsProfile, "array-of-array of block");
@@ -5551,7 +5744,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
if ((currentBlockQualifier.storage == EvqUniform || currentBlockQualifier.storage == EvqBuffer) && (memberQualifier.isInterpolation() || memberQualifier.isAuxiliary()))
error(memberLoc, "member of uniform or buffer block cannot have an auxiliary or interpolation qualifier", memberType.getFieldName().c_str(), "");
if (memberType.isArray())
- arrayUnsizedCheck(memberLoc, currentBlockQualifier, &memberType.getArraySizes(), false, member == typeList.size() - 1);
+ arraySizesCheck(memberLoc, currentBlockQualifier, &memberType.getArraySizes(), false, member == typeList.size() - 1);
if (memberQualifier.hasOffset()) {
if (spvVersion.spv == 0) {
requireProfile(memberLoc, ~EEsProfile, "offset on block member");
@@ -5633,7 +5826,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
case EvqVaryingOut:
requireProfile(memberLoc, ECoreProfile | ECompatibilityProfile | EEsProfile, feature);
profileRequires(memberLoc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature);
- profileRequires(memberLoc, EEsProfile, 0, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
+ profileRequires(memberLoc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
memberWithLocation = true;
break;
default:
@@ -5655,6 +5848,8 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
memberQualifier = newMemberQualification;
}
+ layoutMemberLocationArrayCheck(loc, memberWithLocation, arraySizes);
+
// Process the members
fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation);
fixBlockXfbOffsets(currentBlockQualifier, typeList);
@@ -5722,6 +5917,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
// Check for general layout qualifier errors
layoutObjectCheck(loc, variable);
+ // fix up
if (isIoResizeArray(blockType)) {
ioArraySymbolResizeList.push_back(&variable);
checkIoArraysConsistency(loc, true);
@@ -5754,14 +5950,14 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q
// "Compute shaders do not permit user-defined input variables..."
requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|EShLangFragmentMask), "input block");
if (language == EShLangFragment)
- profileRequires(loc, EEsProfile, 0, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block");
+ profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block");
break;
case EvqVaryingOut:
profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "output block");
requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask), "output block");
// ES 310 can have a block before shader_io is turned on, so skip this test for built-ins
if (language == EShLangVertex && ! parsingBuiltins)
- profileRequires(loc, EEsProfile, 0, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block");
+ profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block");
break;
default:
error(loc, "only uniform, buffer, in, or out blocks are supported", blockName->c_str(), "");
@@ -5770,7 +5966,7 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q
}
// Do all block-declaration checking regarding its qualifiers.
-void TParseContext::blockQualifierCheck(const TSourceLoc& loc, const TQualifier& qualifier, bool instanceName)
+void TParseContext::blockQualifierCheck(const TSourceLoc& loc, const TQualifier& qualifier, bool /*instanceName*/)
{
// The 4.5 specification says:
//
@@ -5836,7 +6032,7 @@ void TParseContext::fixBlockLocations(const TSourceLoc& loc, TQualifier& qualifi
if (nextLocation >= (int)TQualifier::layoutLocationEnd)
error(memberLoc, "location is too large", "location", "");
memberQualifier.layoutLocation = nextLocation;
- memberQualifier.layoutComponent = 0;
+ memberQualifier.layoutComponent = TQualifier::layoutComponentEnd;
}
nextLocation = memberQualifier.layoutLocation + intermediate.computeTypeLocationSize(*typeList[member].type);
}
@@ -6127,6 +6323,12 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
else
error(loc, "can only apply to 'in'", "early_fragment_tests", "");
}
+ if (publicType.shaderQualifiers.postDepthCoverage) {
+ if (publicType.qualifier.storage == EvqVaryingIn)
+ intermediate.setPostDepthCoverage();
+ else
+ error(loc, "can only apply to 'in'", "post_coverage_coverage", "");
+ }
if (publicType.shaderQualifiers.blendEquation) {
if (publicType.qualifier.storage != EvqVaryingOut)
error(loc, "can only apply to 'out'", "blend equation", "");
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h
index 61db6fe64f4..0d929789345 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h
@@ -74,12 +74,23 @@ class TParseContextBase : public TParseVersions {
public:
TParseContextBase(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins, int version,
EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
- TInfoSink& infoSink, bool forwardCompatible, EShMessages messages)
+ TInfoSink& infoSink, bool forwardCompatible, EShMessages messages,
+ const TString* entryPoint = nullptr)
: TParseVersions(interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
+ scopeMangler("::"),
symbolTable(symbolTable),
+ statementNestingLevel(0), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0),
+ postEntryPointReturn(false),
+ contextPragma(true, false),
parsingBuiltins(parsingBuiltins), scanContext(nullptr), ppContext(nullptr),
- globalUniformBlock(nullptr)
- { }
+ limits(resources.limits),
+ globalUniformBlock(nullptr),
+ globalUniformBinding(TQualifier::layoutBindingEnd),
+ globalUniformSet(TQualifier::layoutSetEnd)
+ {
+ if (entryPoint != nullptr)
+ sourceEntryPointName = *entryPoint;
+ }
virtual ~TParseContextBase() { }
virtual void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken,
@@ -93,6 +104,8 @@ public:
virtual void setLimits(const TBuiltInResource&) = 0;
+ void checkIndex(const TSourceLoc&, const TType&, int& index);
+
EShLanguage getLanguage() const { return language; }
void setScanContext(TScanContext* c) { scanContext = c; }
TScanContext* getScanContext() const { return scanContext; }
@@ -133,15 +146,39 @@ public:
extensionCallback(line, extension, behavior);
}
- TSymbolTable& symbolTable; // symbol table that goes with the current language, version, and profile
-
// Manage the global uniform block (default uniforms in GLSL, $Global in HLSL)
- virtual void growGlobalUniformBlock(TSourceLoc&, TType&, TString& memberName, TTypeList* typeList = nullptr);
+ virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr);
+
+ // Potentially rename shader entry point function
+ void renameShaderFunction(TString*& name) const
+ {
+ // Replace the entry point name given in the shader with the real entry point name,
+ // if there is a substitution.
+ if (name != nullptr && *name == sourceEntryPointName && intermediate.getEntryPointName().size() > 0)
+ name = NewPoolTString(intermediate.getEntryPointName().c_str());
+ }
virtual bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
virtual void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
- const char* const scopeMangler = "::";
+ const char* const scopeMangler;
+
+ // Basic parsing state, easily accessible to the grammar
+
+ TSymbolTable& symbolTable; // symbol table that goes with the current language, version, and profile
+ int statementNestingLevel; // 0 if outside all flow control or compound statements
+ int loopNestingLevel; // 0 if outside all loops
+ int structNestingLevel; // 0 if outside blocks and structures
+ int controlFlowNestingLevel; // 0 if outside all flow control
+ const TType* currentFunctionType; // the return type of the function that's currently being parsed
+ bool functionReturnsValue; // true if a non-void function has a return
+ // if inside a function, true if the function is the entry point and this is after a return statement
+ bool postEntryPointReturn;
+ // case, node, case, case, node, ...; ensure only one node between cases; stack of them for nesting
+ TList<TIntermSequence*> switchSequenceStack;
+ // the statementNestingLevel the current switch statement is at, which must match the level of its case statements
+ TList<int> switchLevel;
+ struct TPragma contextPragma;
protected:
TParseContextBase(TParseContextBase&);
@@ -151,6 +188,9 @@ protected:
TVector<TSymbol*> linkageSymbols; // these need to be transferred to 'linkage', after all editing is done
TScanContext* scanContext;
TPpContext* ppContext;
+ TBuiltInResource resources;
+ TLimits& limits;
+ TString sourceEntryPointName;
// These, if set, will be called when a line, pragma ... is preprocessed.
// They will be called with any parameters to the original directive.
@@ -170,11 +210,13 @@ protected:
TSwizzleSelectors<TVectorSelector>&);
// Manage the global uniform block (default uniforms in GLSL, $Global in HLSL)
- TVariable* globalUniformBlock; // the actual block, inserted into the symbol table
- int firstNewMember; // the index of the first member not yet inserted into the symbol table
+ TVariable* globalUniformBlock; // the actual block, inserted into the symbol table
+ unsigned int globalUniformBinding; // the block's binding number
+ unsigned int globalUniformSet; // the block's set number
+ int firstNewMember; // the index of the first member not yet inserted into the symbol table
// override this to set the language-specific name
virtual const char* getGlobalUniformBlockName() const { return ""; }
- virtual void setUniformBlockDefaults(TType& block) const { }
+ virtual void setUniformBlockDefaults(TType&) const { }
virtual void finalizeGlobalUniformBlockLayout(TVariable&) { }
virtual void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken,
const char* szExtraInfoFormat, TPrefixType prefix,
@@ -227,7 +269,8 @@ protected:
class TParseContext : public TParseContextBase {
public:
TParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins, int version, EProfile, const SpvVersion& spvVersion, EShLanguage, TInfoSink&,
- bool forwardCompatible = false, EShMessages messages = EShMsgDefault);
+ bool forwardCompatible = false, EShMessages messages = EShMsgDefault,
+ const TString* entryPoint = nullptr);
virtual ~TParseContext();
bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); };
@@ -246,7 +289,6 @@ public:
void handlePragma(const TSourceLoc&, const TVector<TString>&) override;
TIntermTyped* handleVariable(const TSourceLoc&, TSymbol* symbol, const TString* string);
TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
- void checkIndex(const TSourceLoc&, const TType&, int& index);
void handleIndexLimits(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
void makeEditable(TSymbol*&) override;
@@ -296,7 +338,7 @@ public:
bool arrayError(const TSourceLoc&, const TType&);
void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&);
void structArrayCheck(const TSourceLoc&, const TType& structure);
- void arrayUnsizedCheck(const TSourceLoc&, const TQualifier&, const TArraySizes*, bool initializer, bool lastMember);
+ void arraySizesCheck(const TSourceLoc&, const TQualifier&, TArraySizes*, bool initializer, bool lastMember);
void arrayOfArrayVersionCheck(const TSourceLoc&);
void arrayDimCheck(const TSourceLoc&, const TArraySizes* sizes1, const TArraySizes* sizes2);
void arrayDimCheck(const TSourceLoc&, const TType*, const TArraySizes*);
@@ -306,7 +348,7 @@ public:
void boolCheck(const TSourceLoc&, const TPublicType&);
void samplerCheck(const TSourceLoc&, const TType&, const TString& identifier, TIntermTyped* initializer);
void atomicUintCheck(const TSourceLoc&, const TType&, const TString& identifier);
- void transparentCheck(const TSourceLoc&, const TType&, const TString& identifier);
+ void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier);
void globalQualifierFixCheck(const TSourceLoc&, TQualifier&);
void globalQualifierTypeCheck(const TSourceLoc&, const TQualifier&, const TPublicType&);
bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
@@ -338,6 +380,7 @@ public:
void setLayoutQualifier(const TSourceLoc&, TPublicType&, TString&, const TIntermTyped*);
void mergeObjectLayoutQualifiers(TQualifier& dest, const TQualifier& src, bool inheritOnly);
void layoutObjectCheck(const TSourceLoc&, const TSymbol&);
+ void layoutMemberLocationArrayCheck(const TSourceLoc&, bool memberWithLocation, TArraySizes* arraySizes);
void layoutTypeCheck(const TSourceLoc&, const TType&);
void layoutQualifierCheck(const TSourceLoc&, const TQualifier&);
void checkNoShaderLayouts(const TSourceLoc&, const TShaderQualifiers&);
@@ -371,8 +414,8 @@ protected:
void nonInitConstCheck(const TSourceLoc&, TString& identifier, TType& type);
void inheritGlobalDefaults(TQualifier& dst) const;
TVariable* makeInternalVariable(const char* name, const TType&) const;
- TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&);
- void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&);
+ TVariable* declareNonArray(const TSourceLoc&, const TString& identifier, const TType&);
+ void declareArray(const TSourceLoc&, const TString& identifier, const TType&, TSymbol*&);
TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
void finish() override;
@@ -383,17 +426,7 @@ public:
//
// Current state of parsing
- struct TPragma contextPragma;
- int loopNestingLevel; // 0 if outside all loops
- int structNestingLevel; // 0 if outside blocks and structures
- int controlFlowNestingLevel; // 0 if outside all flow control
- int statementNestingLevel; // 0 if outside all flow control or compound statements
- TList<TIntermSequence*> switchSequenceStack; // case, node, case, case, node, ...; ensure only one node between cases; stack of them for nesting
- TList<int> switchLevel; // the statementNestingLevel the current switch statement is at, which must match the level of its case statements
bool inMain; // if inside a function, true if the function is main
- bool postMainReturn; // if inside a function, true if the function is main and this is after a return statement
- const TType* currentFunctionType; // the return type of the function that's currently being parsed
- bool functionReturnsValue; // true if a non-void function has a return
const TString* blockName;
TQualifier currentBlockQualifier;
TPrecisionQualifier defaultPrecision[EbtNumTypes];
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/PoolAlloc.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/PoolAlloc.cpp
index 4007c386153..84c40f4e795 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/PoolAlloc.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/PoolAlloc.cpp
@@ -40,35 +40,22 @@
namespace glslang {
+// Process-wide TLS index
OS_TLSIndex PoolIndex;
-void InitializeMemoryPools()
+// Return the thread-specific current pool.
+TPoolAllocator& GetThreadPoolAllocator()
{
- TThreadMemoryPools* pools = static_cast<TThreadMemoryPools*>(OS_GetTLSValue(PoolIndex));
- if (pools)
- return;
-
- TPoolAllocator *threadPoolAllocator = new TPoolAllocator();
-
- TThreadMemoryPools* threadData = new TThreadMemoryPools();
-
- threadData->threadPoolAllocator = threadPoolAllocator;
-
- OS_SetTLSValue(PoolIndex, threadData);
+ return *static_cast<TPoolAllocator*>(OS_GetTLSValue(PoolIndex));
}
-void FreeGlobalPools()
+// Set the thread-specific current pool.
+void SetThreadPoolAllocator(TPoolAllocator* poolAllocator)
{
- // Release the allocated memory for this thread.
- TThreadMemoryPools* globalPools = static_cast<TThreadMemoryPools*>(OS_GetTLSValue(PoolIndex));
- if (! globalPools)
- return;
-
- GetThreadPoolAllocator().popAll();
- delete &GetThreadPoolAllocator();
- delete globalPools;
+ OS_SetTLSValue(PoolIndex, poolAllocator);
}
+// Process-wide set up of the TLS pool storage.
bool InitializePoolIndex()
{
// Allocate a TLS index.
@@ -78,26 +65,6 @@ bool InitializePoolIndex()
return true;
}
-void FreePoolIndex()
-{
- // Release the TLS index.
- OS_FreeTLSIndex(PoolIndex);
-}
-
-TPoolAllocator& GetThreadPoolAllocator()
-{
- TThreadMemoryPools* threadData = static_cast<TThreadMemoryPools*>(OS_GetTLSValue(PoolIndex));
-
- return *threadData->threadPoolAllocator;
-}
-
-void SetThreadPoolAllocator(TPoolAllocator& poolAllocator)
-{
- TThreadMemoryPools* threadData = static_cast<TThreadMemoryPools*>(OS_GetTLSValue(PoolIndex));
-
- threadData->threadPoolAllocator = &poolAllocator;
-}
-
//
// Implement the functionality of the TPoolAllocator class, which
// is documented in PoolAlloc.h.
@@ -234,13 +201,16 @@ void TPoolAllocator::pop()
currentPageOffset = stack.back().offset;
while (inUseList != page) {
- // invoke destructor to free allocation list
- inUseList->~tHeader();
-
tHeader* nextInUse = inUseList->nextPage;
- if (inUseList->pageCount > 1)
+ size_t pageCount = inUseList->pageCount;
+
+ // This technically ends the lifetime of the header as C++ object,
+ // but we will still control the memory and reuse it.
+ inUseList->~tHeader(); // currently, just a debug allocation checker
+
+ if (pageCount > 1) {
delete [] reinterpret_cast<char*>(inUseList);
- else {
+ } else {
inUseList->nextPage = freeList;
freeList = inUseList;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.h
index 507307e44b3..1ed015626b8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/RemoveTree.h
@@ -32,6 +32,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
+#pragma once
+
namespace glslang {
void RemoveAllTreeNodes(TIntermNode*);
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp
index 8b3a30636f9..68d1500b4ad 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp
@@ -175,7 +175,7 @@ bool TInputScanner::scanVersion(int& version, EProfile& profile, bool& notFirstT
bool versionNotFirst = false; // means not first WRT comments and white space, nothing more
notFirstToken = false; // means not first WRT to real tokens
- version = 0; // means not found
+ version = 0; // means not found
profile = ENoProfile;
bool foundNonSpaceTab = false;
@@ -464,6 +464,15 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["u64vec4"] = U64VEC4;
#ifdef AMD_EXTENSIONS
+ (*KeywordMap)["int16_t"] = INT16_T;
+ (*KeywordMap)["uint16_t"] = UINT16_T;
+ (*KeywordMap)["i16vec2"] = I16VEC2;
+ (*KeywordMap)["i16vec3"] = I16VEC3;
+ (*KeywordMap)["i16vec4"] = I16VEC4;
+ (*KeywordMap)["u16vec2"] = U16VEC2;
+ (*KeywordMap)["u16vec3"] = U16VEC3;
+ (*KeywordMap)["u16vec4"] = U16VEC4;
+
(*KeywordMap)["float16_t"] = FLOAT16_T;
(*KeywordMap)["f16vec2"] = F16VEC2;
(*KeywordMap)["f16vec3"] = F16VEC3;
@@ -709,6 +718,10 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
case PpAtomConstUint: parserToken->sType.lex.i = ppToken.ival; return UINTCONSTANT;
case PpAtomConstInt64: parserToken->sType.lex.i64 = ppToken.i64val; return INT64CONSTANT;
case PpAtomConstUint64: parserToken->sType.lex.i64 = ppToken.i64val; return UINT64CONSTANT;
+#ifdef AMD_EXTENSIONS
+ case PpAtomConstInt16: parserToken->sType.lex.i = ppToken.ival; return INT16CONSTANT;
+ case PpAtomConstUint16: parserToken->sType.lex.i = ppToken.ival; return UINT16CONSTANT;
+#endif
case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT;
case PpAtomConstDouble: parserToken->sType.lex.d = ppToken.dval; return DOUBLECONSTANT;
#ifdef AMD_EXTENSIONS
@@ -851,14 +864,17 @@ int TScanContext::tokenizeIdentifier()
case PATCH:
if (parseContext.symbolTable.atBuiltInLevel() ||
- (parseContext.profile == EEsProfile && parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader)) ||
+ (parseContext.profile == EEsProfile &&
+ (parseContext.version >= 320 ||
+ parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))) ||
(parseContext.profile != EEsProfile && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
return keyword;
return es30ReservedFromGLSL(400);
case SAMPLE:
- if (parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
+ if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
return keyword;
return es30ReservedFromGLSL(400);
@@ -912,7 +928,8 @@ int TScanContext::tokenizeIdentifier()
case IIMAGEBUFFER:
case UIMAGEBUFFER:
afterType = true;
- if (parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
+ if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
return keyword;
return firstGenerationImage(false);
@@ -935,7 +952,8 @@ int TScanContext::tokenizeIdentifier()
case IIMAGECUBEARRAY:
case UIMAGECUBEARRAY:
afterType = true;
- if (parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
+ if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
return keyword;
return secondGenerationImage();
@@ -973,6 +991,21 @@ int TScanContext::tokenizeIdentifier()
return identifierOrType();
#ifdef AMD_EXTENSIONS
+ case INT16_T:
+ case UINT16_T:
+ case I16VEC2:
+ case I16VEC3:
+ case I16VEC4:
+ case U16VEC2:
+ case U16VEC3:
+ case U16VEC4:
+ afterType = true;
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) &&
+ parseContext.profile != EEsProfile && parseContext.version >= 450))
+ return keyword;
+ return identifierOrType();
+
case FLOAT16_T:
case F16VEC2:
case F16VEC3:
@@ -1002,7 +1035,8 @@ int TScanContext::tokenizeIdentifier()
case ISAMPLERCUBEARRAY:
case USAMPLERCUBEARRAY:
afterType = true;
- if (parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
+ if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
return keyword;
if (parseContext.profile == EEsProfile || (parseContext.version < 400 && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array)))
reservedWord();
@@ -1041,14 +1075,16 @@ int TScanContext::tokenizeIdentifier()
case SAMPLERBUFFER:
afterType = true;
- if (parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
+ if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
return keyword;
return es30ReservedFromGLSL(130);
case ISAMPLERBUFFER:
case USAMPLERBUFFER:
afterType = true;
- if (parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
+ if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
return keyword;
return es30ReservedFromGLSL(140);
@@ -1064,7 +1100,8 @@ int TScanContext::tokenizeIdentifier()
case ISAMPLER2DMSARRAY:
case USAMPLER2DMSARRAY:
afterType = true;
- if (parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array))
+ if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array))
return keyword;
return es30ReservedFromGLSL(150);
@@ -1085,8 +1122,10 @@ int TScanContext::tokenizeIdentifier()
case SAMPLER2DSHADOW:
afterType = true;
- if (parseContext.profile == EEsProfile && parseContext.version < 300)
- reservedWord();
+ if (parseContext.profile == EEsProfile && parseContext.version < 300) {
+ if (!parseContext.extensionTurnedOn(E_GL_EXT_shadow_samplers))
+ reservedWord();
+ }
return keyword;
case SAMPLER2DRECT:
@@ -1113,7 +1152,9 @@ int TScanContext::tokenizeIdentifier()
case SAMPLEREXTERNALOES:
afterType = true;
- if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external))
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external) ||
+ parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external_essl3))
return keyword;
return identifierOrType();
@@ -1198,7 +1239,8 @@ int TScanContext::tokenizeIdentifier()
return keyword;
case PRECISE:
- if ((parseContext.profile == EEsProfile && parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5)) ||
+ if ((parseContext.profile == EEsProfile &&
+ (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
(parseContext.profile != EEsProfile && parseContext.version >= 400))
return keyword;
if (parseContext.profile == EEsProfile && parseContext.version == 310) {
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h
index 9b8f2d4517c..2c26c2efd41 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h
@@ -51,25 +51,24 @@ const int EndOfInput = -1;
//
class TInputScanner {
public:
- TInputScanner(int n, const char* const s[], size_t L[], const char* const* names = nullptr, int b = 0, int f = 0, bool single = false) :
+ TInputScanner(int n, const char* const s[], size_t L[], const char* const* names = nullptr,
+ int b = 0, int f = 0, bool single = false) :
numSources(n),
- sources(reinterpret_cast<const unsigned char* const *>(s)), // up to this point, common usage is "char*", but now we need positive 8-bit characters
- lengths(L), currentSource(0), currentChar(0), stringBias(b), finale(f), singleLogical(single), endOfFileReached(false)
+ // up to this point, common usage is "char*", but now we need positive 8-bit characters
+ sources(reinterpret_cast<const unsigned char* const *>(s)),
+ lengths(L), currentSource(0), currentChar(0), stringBias(b), finale(f), singleLogical(single),
+ endOfFileReached(false)
{
loc = new TSourceLoc[numSources];
for (int i = 0; i < numSources; ++i) {
- loc[i].init();
+ loc[i].init(i - stringBias);
}
if (names != nullptr) {
for (int i = 0; i < numSources; ++i)
loc[i].name = names[i];
}
- loc[currentSource].string = -stringBias;
loc[currentSource].line = 1;
- loc[currentSource].column = 0;
- logicalSourceLoc.string = 0;
- logicalSourceLoc.line = 1;
- logicalSourceLoc.column = 0;
+ logicalSourceLoc.init(1);
logicalSourceLoc.name = loc[0].name;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h
index 1d86348eb38..608ae067e07 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h
@@ -38,6 +38,8 @@
// sits between the preprocessor scanner and parser.
//
+#pragma once
+
#include "ParseHelper.h"
namespace glslang {
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp
index 5a8f679d10b..62e079e5567 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp
@@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013-2016 LunarG, Inc.
-// Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2015-2017 Google, Inc.
//
// All rights reserved.
//
@@ -69,6 +69,10 @@
namespace { // anonymous namespace for file-local functions and symbols
+// Total number of successful initializers of glslang: a refcount
+// Shared global; access should be protected by a global mutex/critical section.
+int NumberOfClients = 0;
+
using namespace glslang;
// Create a language specific version of parseables.
@@ -91,18 +95,16 @@ TParseContextBase* CreateParseContext(TSymbolTable& symbolTable, TIntermediate&
int version, EProfile profile, EShSource source,
EShLanguage language, TInfoSink& infoSink,
SpvVersion spvVersion, bool forwardCompatible, EShMessages messages,
- bool parsingBuiltIns, const std::string sourceEntryPointName = "")
+ bool parsingBuiltIns, std::string sourceEntryPointName = "")
{
-#ifndef ENABLE_HLSL
- (void)sourceEntryPointName; // Unused argument.
-#endif
-
switch (source) {
- case EShSourceGlsl:
- intermediate.setEntryPointName("main");
+ case EShSourceGlsl: {
+ if (sourceEntryPointName.size() == 0)
+ intermediate.setEntryPointName("main");
+ TString entryPoint = sourceEntryPointName.c_str();
return new TParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
- language, infoSink, forwardCompatible, messages);
-
+ language, infoSink, forwardCompatible, messages, &entryPoint);
+ }
#ifdef ENABLE_HLSL
case EShSourceHlsl:
return new HlslParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
@@ -116,7 +118,7 @@ TParseContextBase* CreateParseContext(TSymbolTable& symbolTable, TIntermediate&
// Local mapping functions for making arrays of symbol tables....
-const int VersionCount = 15; // index range in MapVersionToIndex
+const int VersionCount = 17; // index range in MapVersionToIndex
int MapVersionToIndex(int version)
{
@@ -138,7 +140,10 @@ int MapVersionToIndex(int version)
case 440: index = 12; break;
case 310: index = 13; break;
case 450: index = 14; break;
- default: break;
+ case 500: index = 0; break; // HLSL
+ case 320: index = 15; break;
+ case 460: index = 16; break;
+ default: assert(0); break;
}
assert(index < VersionCount);
@@ -216,7 +221,7 @@ enum EPrecisionClass {
TSymbolTable* CommonSymbolTable[VersionCount][SpvVersionCount][ProfileCount][SourceCount][EPcCount] = {};
TSymbolTable* SharedSymbolTables[VersionCount][SpvVersionCount][ProfileCount][SourceCount][EShLangCount] = {};
-TPoolAllocator* PerProcessGPA = 0;
+TPoolAllocator* PerProcessGPA = nullptr;
//
// Parse and add to the given symbol table the content of the given shader string.
@@ -360,7 +365,7 @@ bool AddContextSpecificSymbols(const TBuiltInResource* resources, TInfoSink& inf
// pool allocator intact, so:
// - Switch to a new pool for parsing the built-ins
// - Do the parsing, which builds the symbol table, using the new pool
-// - Switch to the process-global pool to save a copy the resulting symbol table
+// - Switch to the process-global pool to save a copy of the resulting symbol table
// - Free up the new pool used to parse the built-ins
// - Switch back to the original thread's pool
//
@@ -387,8 +392,8 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp
// Switch to a new pool
TPoolAllocator& previousAllocator = GetThreadPoolAllocator();
- TPoolAllocator* builtInPoolAllocator = new TPoolAllocator();
- SetThreadPoolAllocator(*builtInPoolAllocator);
+ TPoolAllocator* builtInPoolAllocator = new TPoolAllocator;
+ SetThreadPoolAllocator(builtInPoolAllocator);
// Dynamically allocate the local symbol tables so we can control when they are deallocated WRT when the pool is popped.
TSymbolTable* commonTable[EPcCount];
@@ -402,7 +407,7 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp
InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spvVersion, source);
// Switch to the process-global pool
- SetThreadPoolAllocator(*PerProcessGPA);
+ SetThreadPoolAllocator(PerProcessGPA);
// Copy the local symbol tables from the new pool to the global tables using the process-global pool
for (int precClass = 0; precClass < EPcCount; ++precClass) {
@@ -429,7 +434,7 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp
delete stageTables[stage];
delete builtInPoolAllocator;
- SetThreadPoolAllocator(previousAllocator);
+ SetThreadPoolAllocator(&previousAllocator);
glslang::ReleaseGlobalLock();
}
@@ -442,12 +447,12 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
bool correct = true;
if (source == EShSourceHlsl) {
- version = 450; // TODO: GLSL parser is still used for builtins.
+ version = 500; // shader model; currently a characteristic of glslang, not the input
profile = ECoreProfile; // allow doubles in prototype parsing
return correct;
}
- // Get a good version...
+ // Get a version...
if (version == 0) {
version = defaultVersion;
// infoSink.info.message(EPrefixWarning, "#version: statement missing; use #version on first line of shader");
@@ -455,9 +460,9 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
// Get a good profile...
if (profile == ENoProfile) {
- if (version == 300 || version == 310) {
+ if (version == 300 || version == 310 || version == 320) {
correct = false;
- infoSink.info.message(EPrefixError, "#version: versions 300 and 310 require specifying the 'es' profile");
+ infoSink.info.message(EPrefixError, "#version: versions 300, 310, and 320 require specifying the 'es' profile");
profile = EEsProfile;
} else if (version == 100)
profile = EEsProfile;
@@ -474,16 +479,16 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
profile = EEsProfile;
else
profile = ENoProfile;
- } else if (version == 300 || version == 310) {
+ } else if (version == 300 || version == 310 || version == 320) {
if (profile != EEsProfile) {
correct = false;
- infoSink.info.message(EPrefixError, "#version: versions 300 and 310 support only the es profile");
+ infoSink.info.message(EPrefixError, "#version: versions 300, 310, and 320 support only the es profile");
}
profile = EEsProfile;
} else {
if (profile == EEsProfile) {
correct = false;
- infoSink.info.message(EPrefixError, "#version: only version 300 and 310 support the es profile");
+ infoSink.info.message(EPrefixError, "#version: only version 300, 310, and 320 support the es profile");
if (version >= FirstProfileVersion)
profile = ECoreProfile;
else
@@ -493,6 +498,42 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
}
}
+ // Fix version...
+ switch (version) {
+ // ES versions
+ case 100: break;
+ case 300: break;
+ case 310: break;
+ case 320: break;
+
+ // desktop versions
+ case 110: break;
+ case 120: break;
+ case 130: break;
+ case 140: break;
+ case 150: break;
+ case 330: break;
+ case 400: break;
+ case 410: break;
+ case 420: break;
+ case 430: break;
+ case 440: break;
+ case 450: break;
+ case 460: break;
+
+ // unknown version
+ default:
+ correct = false;
+ infoSink.info.message(EPrefixError, "version not supported");
+ if (profile == EEsProfile)
+ version = 310;
+ else {
+ version = 450;
+ profile = ECoreProfile;
+ }
+ break;
+ }
+
// Correct for stage type...
switch (stage) {
case EShLangGeometry:
@@ -566,42 +607,90 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
}
}
- // A meta check on the condition of the compiler itself...
- switch (version) {
-
- // ES versions
- case 100:
- case 300:
- // versions are complete
- break;
-
- // Desktop versions
- case 110:
- case 120:
- case 130:
- case 140:
- case 150:
- case 330:
- // versions are complete
- break;
+ return correct;
+}
- case 310:
- case 400:
- case 410:
- case 420:
- case 430:
- case 440:
- case 450:
- infoSink.info << "Warning, version " << version << " is not yet complete; most version-specific features are present, but some are missing.\n";
- break;
+// There are multiple paths in for setting environment stuff.
+// TEnvironment takes precedence, for what it sets, so sort all this out.
+// Ideally, the internal code could be made to use TEnvironment, but for
+// now, translate it to the historically used parameters.
+void TranslateEnvironment(const TEnvironment* environment, EShMessages& messages, EShSource& source,
+ EShLanguage& stage, SpvVersion& spvVersion)
+{
+ // Set up environmental defaults, first ignoring 'environment'.
+ if (messages & EShMsgSpvRules)
+ spvVersion.spv = 0x00010000;
+ if (messages & EShMsgVulkanRules) {
+ spvVersion.vulkan = 100;
+ spvVersion.vulkanGlsl = 100;
+ } else if (spvVersion.spv != 0)
+ spvVersion.openGl = 100;
+
+ // Now, override, based on any content set in 'environment'.
+ // 'environment' must be cleared to ESh*None settings when items
+ // are not being set.
+ if (environment != nullptr) {
+ // input language
+ if (environment->input.languageFamily != EShSourceNone) {
+ stage = environment->input.stage;
+ switch (environment->input.dialect) {
+ case EShClientNone:
+ break;
+ case EShClientVulkan:
+ spvVersion.vulkanGlsl = environment->input.dialectVersion;
+ break;
+ case EShClientOpenGL:
+ spvVersion.openGl = environment->input.dialectVersion;
+ break;
+ }
+ switch (environment->input.languageFamily) {
+ case EShSourceNone:
+ break;
+ case EShSourceGlsl:
+ source = EShSourceGlsl;
+ messages = static_cast<EShMessages>(messages & ~EShMsgReadHlsl);
+ break;
+ case EShSourceHlsl:
+ source = EShSourceHlsl;
+ messages = static_cast<EShMessages>(messages | EShMsgReadHlsl);
+ break;
+ }
+ }
- default:
- infoSink.info << "Warning, version " << version << " is unknown.\n";
- break;
+ // client
+ switch (environment->client.client) {
+ case EShClientVulkan:
+ spvVersion.vulkan = environment->client.version;
+ break;
+ default:
+ break;
+ }
+ // generated code
+ switch (environment->target.language) {
+ case EshTargetSpv:
+ spvVersion.spv = environment->target.version;
+ break;
+ default:
+ break;
+ }
}
+}
- return correct;
+// Most processes are recorded when set in the intermediate representation,
+// These are the few that are not.
+void RecordProcesses(TIntermediate& intermediate, EShMessages messages, const std::string& sourceEntryPointName)
+{
+ if ((messages & EShMsgRelaxedErrors) != 0)
+ intermediate.addProcess("relaxed-errors");
+ if ((messages & EShMsgSuppressWarnings) != 0)
+ intermediate.addProcess("suppress-warnings");
+ if ((messages & EShMsgKeepUncalled) != 0)
+ intermediate.addProcess("keep-uncalled");
+ if (sourceEntryPointName.size() > 0) {
+ intermediate.addProcess("source-entrypoint");
+ intermediate.addProcessArgument(sourceEntryPointName);
+ }
}
// This is the common setup and cleanup code for PreprocessDeferred and
@@ -623,7 +712,7 @@ bool ProcessDeferred(
const char* customPreamble,
const EShOptimizationLevel optLevel,
const TBuiltInResource* resources,
- int defaultVersion, // use 100 for ES environment, 110 for desktop; this is the GLSL version, not SPIR-V or Vulkan
+ int defaultVersion, // use 100 for ES environment, 110 for desktop; this is the GLSL version, not SPIR-V or Vulkan
EProfile defaultProfile,
// set version/profile to defaultVersion/defaultProfile regardless of the #version
// directive in the source code
@@ -634,12 +723,9 @@ bool ProcessDeferred(
ProcessingContext& processingContext,
bool requireNonempty,
TShader::Includer& includer,
- const std::string sourceEntryPointName = ""
- )
+ const std::string sourceEntryPointName = "",
+ const TEnvironment* environment = nullptr) // optional way of fully setting all versions, overriding the above
{
- if (! InitThread())
- return false;
-
// This must be undone (.pop()) by the caller, after it finishes consuming the created tree.
GetThreadPoolAllocator().push();
@@ -663,7 +749,7 @@ bool ProcessDeferred(
const char** names = new const char*[numTotal];
for (int s = 0; s < numStrings; ++s) {
strings[s + numPre] = shaderStrings[s];
- if (inputLengths == 0 || inputLengths[s] < 0)
+ if (inputLengths == nullptr || inputLengths[s] < 0)
lengths[s + numPre] = strlen(shaderStrings[s]);
else
lengths[s + numPre] = inputLengths[s];
@@ -676,16 +762,25 @@ bool ProcessDeferred(
names[s + numPre] = nullptr;
}
+ // Get all the stages, languages, clients, and other environment
+ // stuff sorted out.
+ EShSource source = (messages & EShMsgReadHlsl) != 0 ? EShSourceHlsl : EShSourceGlsl;
+ SpvVersion spvVersion;
+ EShLanguage stage = compiler->getLanguage();
+ TranslateEnvironment(environment, messages, source, stage, spvVersion);
+
// First, without using the preprocessor or parser, find the #version, so we know what
// symbol tables, processing rules, etc. to set up. This does not need the extra strings
- // outlined above, just the user shader.
- int version;
- EProfile profile;
- glslang::TInputScanner userInput(numStrings, &strings[numPre], &lengths[numPre]); // no preamble
- bool versionNotFirstToken;
- bool versionNotFirst = userInput.scanVersion(version, profile, versionNotFirstToken);
+ // outlined above, just the user shader, after the system and user preambles.
+ glslang::TInputScanner userInput(numStrings, &strings[numPre], &lengths[numPre]);
+ int version = 0;
+ EProfile profile = ENoProfile;
+ bool versionNotFirstToken = false;
+ bool versionNotFirst = (source == EShSourceHlsl)
+ ? true
+ : userInput.scanVersion(version, profile, versionNotFirstToken);
bool versionNotFound = version == 0;
- if (forceDefaultVersionAndProfile) {
+ if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
(version != defaultVersion || profile != defaultProfile)) {
compiler->infoSink.info << "Warning, (version, profile) forced to be ("
@@ -702,15 +797,9 @@ bool ProcessDeferred(
version = defaultVersion;
profile = defaultProfile;
}
- SpvVersion spvVersion;
- if (messages & EShMsgSpvRules)
- spvVersion.spv = 0x00010000; // TODO: eventually have this come from the outside
- EShSource source = (messages & EShMsgReadHlsl) ? EShSourceHlsl : EShSourceGlsl;
- if (messages & EShMsgVulkanRules)
- spvVersion.vulkan = 100; // TODO: eventually have this come from the outside
- else if (spvVersion.spv != 0)
- spvVersion.openGl = 100; // TODO: eventually have this come from the outside
- bool goodVersion = DeduceVersionProfile(compiler->infoSink, compiler->getLanguage(), versionNotFirst, defaultVersion, source, version, profile, spvVersion);
+
+ bool goodVersion = DeduceVersionProfile(compiler->infoSink, stage,
+ versionNotFirst, defaultVersion, source, version, profile, spvVersion);
bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
bool warnVersionNotFirst = false;
if (! versionWillBeError && versionNotFirstToken) {
@@ -724,15 +813,23 @@ bool ProcessDeferred(
intermediate.setVersion(version);
intermediate.setProfile(profile);
intermediate.setSpv(spvVersion);
+ RecordProcesses(intermediate, messages, sourceEntryPointName);
if (spvVersion.vulkan >= 100)
intermediate.setOriginUpperLeft();
+ if ((messages & EShMsgHlslOffsets) || source == EShSourceHlsl)
+ intermediate.setHlslOffsets();
+ if (messages & EShMsgDebugInfo) {
+ intermediate.setSourceFile(names[numPre]);
+ for (int s = 0; s < numStrings; ++s)
+ intermediate.addSourceText(strings[numPre + s]);
+ }
SetupBuiltinSymbolTable(version, profile, spvVersion, source);
TSymbolTable* cachedTable = SharedSymbolTables[MapVersionToIndex(version)]
[MapSpvVersionToIndex(spvVersion)]
[MapProfileToIndex(profile)]
[MapSourceToIndex(source)]
- [compiler->getLanguage()];
+ [stage];
// Dynamically allocate the symbol table so we can control when it is deallocated WRT the pool.
TSymbolTable* symbolTableMemory = new TSymbolTable;
@@ -743,7 +840,7 @@ bool ProcessDeferred(
// Add built-in symbols that are potentially context dependent;
// they get popped again further down.
if (! AddContextSpecificSymbols(resources, compiler->infoSink, symbolTable, version, profile, spvVersion,
- compiler->getLanguage(), source))
+ stage, source))
return false;
//
@@ -751,14 +848,14 @@ bool ProcessDeferred(
//
TParseContextBase* parseContext = CreateParseContext(symbolTable, intermediate, version, profile, source,
- compiler->getLanguage(), compiler->infoSink,
+ stage, compiler->infoSink,
spvVersion, forwardCompatible, messages, false, sourceEntryPointName);
- TPpContext ppContext(*parseContext, names[numPre]? names[numPre]: "", includer);
+ TPpContext ppContext(*parseContext, names[numPre] ? names[numPre] : "", includer);
// only GLSL (bison triggered, really) needs an externally set scan context
glslang::TScanContext scanContext(*parseContext);
- if ((messages & EShMsgReadHlsl) == 0)
+ if (source == EShSourceGlsl)
parseContext->setScanContext(&scanContext);
parseContext->setPpContext(&ppContext);
@@ -1077,14 +1174,15 @@ bool CompileDeferred(
EShMessages messages, // warnings/errors/AST; things to print out
TIntermediate& intermediate,// returned tree, etc.
TShader::Includer& includer,
- const std::string sourceEntryPointName = "")
+ const std::string sourceEntryPointName = "",
+ TEnvironment* environment = nullptr)
{
DoFullParse parser;
return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames,
preamble, optLevel, resources, defaultVersion,
defaultProfile, forceDefaultVersionAndProfile,
forwardCompatible, messages, intermediate, parser,
- true, includer, sourceEntryPointName);
+ true, includer, sourceEntryPointName, environment);
}
} // end anonymous namespace for local functions
@@ -1099,7 +1197,11 @@ int ShInitialize()
if (! InitProcess())
return 0;
- if (! PerProcessGPA)
+ glslang::GetGlobalLock();
+ ++NumberOfClients;
+ glslang::ReleaseGlobalLock();
+
+ if (PerProcessGPA == nullptr)
PerProcessGPA = new TPoolAllocator();
glslang::TScanContext::fillInKeywordMap();
@@ -1165,6 +1267,14 @@ void ShDestruct(ShHandle handle)
//
int __fastcall ShFinalize()
{
+ glslang::GetGlobalLock();
+ --NumberOfClients;
+ assert(NumberOfClients >= 0);
+ bool finalize = NumberOfClients == 0;
+ glslang::ReleaseGlobalLock();
+ if (! finalize)
+ return 1;
+
for (int version = 0; version < VersionCount; ++version) {
for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
for (int p = 0; p < ProfileCount; ++p) {
@@ -1191,10 +1301,9 @@ int __fastcall ShFinalize()
}
}
- if (PerProcessGPA) {
- PerProcessGPA->popAll();
+ if (PerProcessGPA != nullptr) {
delete PerProcessGPA;
- PerProcessGPA = 0;
+ PerProcessGPA = nullptr;
}
glslang::TScanContext::deleteKeywordMap();
@@ -1235,6 +1344,8 @@ int ShCompile(
if (compiler == 0)
return 0;
+ SetThreadPoolAllocator(compiler->getPool());
+
compiler->infoSink.info.erase();
compiler->infoSink.debug.erase();
@@ -1292,6 +1403,8 @@ int ShLinkExt(
TShHandleBase* base = reinterpret_cast<TShHandleBase*>(linkHandle);
TLinker* linker = static_cast<TLinker*>(base->getAsLinker());
+ SetThreadPoolAllocator(linker->getPool());
+
if (linker == 0)
return 0;
@@ -1326,9 +1439,6 @@ void ShSetEncryptionMethod(ShHandle handle)
//
const char* ShGetInfoLog(const ShHandle handle)
{
- if (!InitThread())
- return 0;
-
if (handle == 0)
return 0;
@@ -1352,9 +1462,6 @@ const char* ShGetInfoLog(const ShHandle handle)
//
const void* ShGetExecutable(const ShHandle handle)
{
- if (!InitThread())
- return 0;
-
if (handle == 0)
return 0;
@@ -1377,9 +1484,6 @@ const void* ShGetExecutable(const ShHandle handle)
//
int ShSetVirtualAttributeBindings(const ShHandle handle, const ShBindingTable* table)
{
- if (!InitThread())
- return 0;
-
if (handle == 0)
return 0;
@@ -1399,9 +1503,6 @@ int ShSetVirtualAttributeBindings(const ShHandle handle, const ShBindingTable* t
//
int ShSetFixedAttributeBindings(const ShHandle handle, const ShBindingTable* table)
{
- if (!InitThread())
- return 0;
-
if (handle == 0)
return 0;
@@ -1420,9 +1521,6 @@ int ShSetFixedAttributeBindings(const ShHandle handle, const ShBindingTable* tab
//
int ShExcludeAttributes(const ShHandle handle, int *attributes, int count)
{
- if (!InitThread())
- return 0;
-
if (handle == 0)
return 0;
@@ -1444,9 +1542,6 @@ int ShExcludeAttributes(const ShHandle handle, int *attributes, int count)
//
int ShGetUniformLocation(const ShHandle handle, const char* name)
{
- if (!InitThread())
- return 0;
-
if (handle == 0)
return -1;
@@ -1475,12 +1570,12 @@ namespace glslang {
const char* GetEsslVersionString()
{
- return "OpenGL ES GLSL 3.00 glslang LunarG Khronos." GLSLANG_REVISION " " GLSLANG_DATE;
+ return "OpenGL ES GLSL 3.20 glslang Khronos." GLSLANG_REVISION " " GLSLANG_DATE;
}
const char* GetGlslVersionString()
{
- return "4.20 glslang LunarG Khronos." GLSLANG_REVISION " " GLSLANG_DATE;
+ return "4.60 glslang Khronos." GLSLANG_REVISION " " GLSLANG_DATE;
}
int GetKhronosToolId()
@@ -1505,11 +1600,18 @@ public:
};
TShader::TShader(EShLanguage s)
- : pool(0), stage(s), lengths(nullptr), stringNames(nullptr), preamble("")
+ : stage(s), lengths(nullptr), stringNames(nullptr), preamble("")
{
+ pool = new TPoolAllocator;
infoSink = new TInfoSink;
compiler = new TDeferredCompiler(stage, *infoSink);
intermediate = new TIntermediate(s);
+
+ // clear environment (avoid constructors in them for use in a C interface)
+ environment.input.languageFamily = EShSourceNone;
+ environment.input.dialect = EShClientNone;
+ environment.client.client = EShClientNone;
+ environment.target.language = EShTargetNone;
}
TShader::~TShader()
@@ -1553,14 +1655,45 @@ void TShader::setSourceEntryPoint(const char* name)
sourceEntryPointName = name;
}
-void TShader::setShiftSamplerBinding(unsigned int base) { intermediate->setShiftSamplerBinding(base); }
-void TShader::setShiftTextureBinding(unsigned int base) { intermediate->setShiftTextureBinding(base); }
-void TShader::setShiftImageBinding(unsigned int base) { intermediate->setShiftImageBinding(base); }
-void TShader::setShiftUboBinding(unsigned int base) { intermediate->setShiftUboBinding(base); }
-void TShader::setShiftSsboBinding(unsigned int base) { intermediate->setShiftSsboBinding(base); }
+void TShader::addProcesses(const std::vector<std::string>& p)
+{
+ intermediate->addProcesses(p);
+}
+
+// Set binding base for given resource type
+void TShader::setShiftBinding(TResourceType res, unsigned int base) {
+ intermediate->setShiftBinding(res, base);
+}
+
+// Set binding base for given resource type for a given binding set.
+void TShader::setShiftBindingForSet(TResourceType res, unsigned int base, unsigned int set) {
+ intermediate->setShiftBindingForSet(res, base, set);
+}
+
+// Set binding base for sampler types
+void TShader::setShiftSamplerBinding(unsigned int base) { setShiftBinding(EResSampler, base); }
+// Set binding base for texture types (SRV)
+void TShader::setShiftTextureBinding(unsigned int base) { setShiftBinding(EResTexture, base); }
+// Set binding base for image types
+void TShader::setShiftImageBinding(unsigned int base) { setShiftBinding(EResImage, base); }
+// Set binding base for uniform buffer objects (CBV)
+void TShader::setShiftUboBinding(unsigned int base) { setShiftBinding(EResUbo, base); }
+// Synonym for setShiftUboBinding, to match HLSL language.
+void TShader::setShiftCbufferBinding(unsigned int base) { setShiftBinding(EResUbo, base); }
+// Set binding base for UAV (unordered access view)
+void TShader::setShiftUavBinding(unsigned int base) { setShiftBinding(EResUav, base); }
+// Set binding base for SSBOs
+void TShader::setShiftSsboBinding(unsigned int base) { setShiftBinding(EResSsbo, base); }
+// Enables binding automapping using TIoMapper
void TShader::setAutoMapBindings(bool map) { intermediate->setAutoMapBindings(map); }
+// Fragile: currently within one stage: simple auto-assignment of location
+void TShader::setAutoMapLocations(bool map) { intermediate->setAutoMapLocations(map); }
+// See comment above TDefaultHlslIoMapper in iomapper.cpp:
+void TShader::setHlslIoMapping(bool hlslIoMap) { intermediate->setHlslIoMapping(hlslIoMap); }
void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlattenUniformArrays(flatten); }
void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); }
+void TShader::setResourceSetBinding(const std::vector<std::string>& base) { intermediate->setResourceSetBinding(base); }
+void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); }
//
// Turn the shader strings into a parse tree in the TIntermediate.
@@ -1572,21 +1705,16 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion
{
if (! InitThread())
return false;
+ SetThreadPoolAllocator(pool);
- pool = new TPoolAllocator();
- SetThreadPoolAllocator(*pool);
if (! preamble)
preamble = "";
return CompileDeferred(compiler, strings, numStrings, lengths, stringNames,
preamble, EShOptNone, builtInResources, defaultVersion,
defaultProfile, forceDefaultVersionAndProfile,
- forwardCompatible, messages, *intermediate, includer, sourceEntryPointName);
-}
-
-bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages)
-{
- return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages);
+ forwardCompatible, messages, *intermediate, includer, sourceEntryPointName,
+ &environment);
}
// Fill in a string with the result of preprocessing ShaderStrings
@@ -1600,9 +1728,8 @@ bool TShader::preprocess(const TBuiltInResource* builtInResources,
{
if (! InitThread())
return false;
+ SetThreadPoolAllocator(pool);
- pool = new TPoolAllocator();
- SetThreadPoolAllocator(*pool);
if (! preamble)
preamble = "";
@@ -1622,8 +1749,9 @@ const char* TShader::getInfoDebugLog()
return infoSink->debug.c_str();
}
-TProgram::TProgram() : pool(0), reflection(0), ioMapper(nullptr), linked(false)
+TProgram::TProgram() : reflection(0), ioMapper(nullptr), linked(false)
{
+ pool = new TPoolAllocator;
infoSink = new TInfoSink;
for (int s = 0; s < EShLangCount; ++s) {
intermediate[s] = 0;
@@ -1658,8 +1786,7 @@ bool TProgram::link(EShMessages messages)
bool error = false;
- pool = new TPoolAllocator();
- SetThreadPoolAllocator(*pool);
+ SetThreadPoolAllocator(pool);
for (int s = 0; s < EShLangCount; ++s) {
if (! linkStage((EShLanguage)s, messages))
@@ -1775,7 +1902,9 @@ const char* TProgram::getUniformName(int index) const { return reflection
const char* TProgram::getUniformBlockName(int index) const { return reflection->getUniformBlock(index).name.c_str(); }
int TProgram::getUniformBlockSize(int index) const { return reflection->getUniformBlock(index).size; }
int TProgram::getUniformIndex(const char* name) const { return reflection->getIndex(name); }
+int TProgram::getUniformBinding(int index) const { return reflection->getUniform(index).getBinding(); }
int TProgram::getUniformBlockIndex(int index) const { return reflection->getUniform(index).index; }
+int TProgram::getUniformBlockCounterIndex(int index) const { return reflection->getUniformBlock(index).counterIndex; }
int TProgram::getUniformType(int index) const { return reflection->getUniform(index).glDefineType; }
int TProgram::getUniformBufferOffset(int index) const { return reflection->getUniform(index).offset; }
int TProgram::getUniformArraySize(int index) const { return reflection->getUniform(index).size; }
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp
index 790b76b15e8..233033e7846 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp
@@ -67,6 +67,10 @@ void TType::buildMangledName(TString& mangledName) const
case EbtUint: mangledName += 'u'; break;
case EbtInt64: mangledName += "i64"; break;
case EbtUint64: mangledName += "u64"; break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16: mangledName += "i16"; break;
+ case EbtUint16: mangledName += "u16"; break;
+#endif
case EbtBool: mangledName += 'b'; break;
case EbtAtomicUint: mangledName += "au"; break;
case EbtSampler:
@@ -99,6 +103,23 @@ void TType::buildMangledName(TString& mangledName) const
case EsdSubpass: mangledName += "P"; break;
default: break; // some compilers want this
}
+
+ if (sampler.hasReturnStruct()) {
+ // Name mangle for sampler return struct uses struct table index.
+ mangledName += "-tx-struct";
+
+ char text[16]; // plenty enough space for the small integers.
+ snprintf(text, sizeof(text), "%d-", sampler.structReturnIndex);
+ mangledName += text;
+ } else {
+ switch (sampler.getVectorSize()) {
+ case 1: mangledName += "1"; break;
+ case 2: mangledName += "2"; break;
+ case 3: mangledName += "3"; break;
+ case 4: break; // default to prior name mangle behavior
+ }
+ }
+
if (sampler.ms)
mangledName += "M";
break;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h
index 8dc154cdc55..f928b7aedfc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h
@@ -198,7 +198,6 @@ struct TParameter {
TString *name;
TType* type;
TIntermTyped* defaultValue;
- TBuiltInVariable declaredBuiltIn;
void copyParam(const TParameter& param)
{
if (param.name)
@@ -207,8 +206,8 @@ struct TParameter {
name = 0;
type = param.type->clone();
defaultValue = param.defaultValue;
- declaredBuiltIn = param.declaredBuiltIn;
}
+ TBuiltInVariable getDeclaredBuiltIn() const { return type->getQualifier().declaredBuiltIn; }
};
//
@@ -241,7 +240,6 @@ public:
virtual void addParameter(TParameter& p)
{
assert(writable);
- p.declaredBuiltIn = p.type->getQualifier().builtIn;
parameters.push_back(p);
p.type->appendMangledName(mangledName);
@@ -264,6 +262,12 @@ public:
mangledName.insert(0, prefix);
}
+ virtual void removePrefix(const TString& prefix)
+ {
+ assert(mangledName.compare(0, prefix.size(), prefix) == 0);
+ mangledName.erase(0, prefix.size());
+ }
+
virtual const TString& getMangledName() const override { return mangledName; }
virtual const TType& getType() const override { return returnType; }
virtual TBuiltInVariable getDeclaredBuiltInType() const { return declaredBuiltIn; }
@@ -688,19 +692,27 @@ public:
// Normal find of a symbol, that can optionally say whether the symbol was found
// at a built-in level or the current top-scope level.
- TSymbol* find(const TString& name, bool* builtIn = 0, bool *currentScope = 0)
+ TSymbol* find(const TString& name, bool* builtIn = 0, bool* currentScope = 0, int* thisDepthP = 0)
{
int level = currentLevel();
TSymbol* symbol;
+ int thisDepth = 0;
do {
+ if (table[level]->isThisLevel())
+ ++thisDepth;
symbol = table[level]->find(name);
--level;
- } while (symbol == 0 && level >= 0);
+ } while (symbol == nullptr && level >= 0);
level++;
if (builtIn)
*builtIn = isBuiltInLevel(level);
if (currentScope)
*currentScope = isGlobalLevel(currentLevel()) || level == currentLevel(); // consider shared levels as "current scope" WRT user globals
+ if (thisDepthP != nullptr) {
+ if (! table[level]->isThisLevel())
+ thisDepth = 0;
+ *thisDepthP = thisDepth;
+ }
return symbol;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp
index 528333f4679..b1893b37ea0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp
@@ -154,8 +154,9 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_OES_standard_derivatives] = EBhDisable;
extensionBehavior[E_GL_EXT_frag_depth] = EBhDisable;
extensionBehavior[E_GL_OES_EGL_image_external] = EBhDisable;
+ extensionBehavior[E_GL_OES_EGL_image_external_essl3] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_texture_lod] = EBhDisable;
-
+ extensionBehavior[E_GL_EXT_shadow_samplers] = EBhDisable;
extensionBehavior[E_GL_ARB_texture_rectangle] = EBhDisable;
extensionBehavior[E_GL_3DL_array_objects] = EBhDisable;
extensionBehavior[E_GL_ARB_shading_language_420pack] = EBhDisable;
@@ -179,10 +180,14 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_ARB_shader_ballot] = EBhDisable;
extensionBehavior[E_GL_ARB_sparse_texture2] = EBhDisable;
extensionBehavior[E_GL_ARB_sparse_texture_clamp] = EBhDisable;
+ extensionBehavior[E_GL_ARB_shader_stencil_export] = EBhDisable;
// extensionBehavior[E_GL_ARB_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members
+ extensionBehavior[E_GL_ARB_post_depth_coverage] = EBhDisable;
+ extensionBehavior[E_GL_ARB_shader_viewport_layer_array] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable;
- extensionBehavior[E_GL_EXT_shader_image_load_formatted] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_image_load_formatted] = EBhDisable;
+ extensionBehavior[E_GL_EXT_post_depth_coverage] = EBhDisable;
// #line and #include
extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhDisable;
@@ -194,15 +199,19 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_AMD_shader_explicit_vertex_parameter] = EBhDisable;
extensionBehavior[E_GL_AMD_gcn_shader] = EBhDisable;
extensionBehavior[E_GL_AMD_gpu_shader_half_float] = EBhDisable;
+ extensionBehavior[E_GL_AMD_texture_gather_bias_lod] = EBhDisable;
+ extensionBehavior[E_GL_AMD_gpu_shader_int16] = EBhDisable;
+ extensionBehavior[E_GL_AMD_shader_image_load_store_lod] = EBhDisable;
+ extensionBehavior[E_GL_AMD_shader_fragment_mask] = EBhDisable;
#endif
#ifdef NV_EXTENSIONS
extensionBehavior[E_GL_NV_sample_mask_override_coverage] = EBhDisable;
extensionBehavior[E_SPV_NV_geometry_shader_passthrough] = EBhDisable;
- extensionBehavior[E_GL_ARB_shader_viewport_layer_array] = EBhDisable;
extensionBehavior[E_GL_NV_viewport_array2] = EBhDisable;
extensionBehavior[E_GL_NV_stereo_view_rendering] = EBhDisable;
extensionBehavior[E_GL_NVX_multiview_per_view_attributes] = EBhDisable;
+ extensionBehavior[E_GL_NV_shader_atomic_int64] = EBhDisable;
#endif
// AEP
@@ -236,6 +245,10 @@ void TParseVersions::initializeExtensionBehavior()
// EXT extensions
extensionBehavior[E_GL_EXT_device_group] = EBhDisable;
extensionBehavior[E_GL_EXT_multiview] = EBhDisable;
+
+ // OVR extensions
+ extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
+ extensionBehavior[E_GL_OVR_multiview2] = EBhDisable;
}
// Get code that is not part of a shared symbol table, is specific to this shader,
@@ -250,7 +263,9 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_OES_standard_derivatives 1\n"
"#define GL_EXT_frag_depth 1\n"
"#define GL_OES_EGL_image_external 1\n"
+ "#define GL_OES_EGL_image_external_essl3 1\n"
"#define GL_EXT_shader_texture_lod 1\n"
+ "#define GL_EXT_shadow_samplers 1\n"
// AEP
"#define GL_ANDROID_extension_pack_es31a 1\n"
@@ -306,9 +321,12 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_ARB_shader_ballot 1\n"
"#define GL_ARB_sparse_texture2 1\n"
"#define GL_ARB_sparse_texture_clamp 1\n"
+ "#define GL_ARB_shader_stencil_export 1\n"
// "#define GL_ARB_cull_distance 1\n" // present for 4.5, but need extension control over block members
+ "#define GL_ARB_post_depth_coverage 1\n"
"#define GL_EXT_shader_non_constant_global_initializers 1\n"
"#define GL_EXT_shader_image_load_formatted 1\n"
+ "#define GL_EXT_post_depth_coverage 1\n"
#ifdef AMD_EXTENSIONS
"#define GL_AMD_shader_ballot 1\n"
@@ -316,12 +334,17 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_AMD_shader_explicit_vertex_parameter 1\n"
"#define GL_AMD_gcn_shader 1\n"
"#define GL_AMD_gpu_shader_half_float 1\n"
+ "#define GL_AMD_texture_gather_bias_lod 1\n"
+ "#define GL_AMD_gpu_shader_int16 1\n"
+ "#define GL_AMD_shader_image_load_store_lod 1\n"
+ "#define GL_AMD_shader_fragment_mask 1\n"
#endif
#ifdef NV_EXTENSIONS
"#define GL_NV_sample_mask_override_coverage 1\n"
"#define GL_NV_geometry_shader_passthrough 1\n"
"#define GL_NV_viewport_array2 1\n"
+ "#define GL_NV_shader_atomic_int64 1\n"
#endif
;
@@ -336,12 +359,19 @@ void TParseVersions::getPreamble(std::string& preamble)
if ((profile != EEsProfile && version >= 140) ||
(profile == EEsProfile && version >= 310)) {
- preamble +=
+ preamble +=
"#define GL_EXT_device_group 1\n"
"#define GL_EXT_multiview 1\n"
;
}
+ if (version >= 300 /* both ES and non-ES */) {
+ preamble +=
+ "#define GL_OVR_multiview 1\n"
+ "#define GL_OVR_multiview2 1\n"
+ ;
+ }
+
// #line and #include
preamble +=
"#define GL_GOOGLE_cpp_style_line_directive 1\n"
@@ -351,9 +381,9 @@ void TParseVersions::getPreamble(std::string& preamble)
// #define VULKAN XXXX
const int numberBufSize = 12;
char numberBuf[numberBufSize];
- if (spvVersion.vulkan > 0) {
+ if (spvVersion.vulkanGlsl > 0) {
preamble += "#define VULKAN ";
- snprintf(numberBuf, numberBufSize, "%d", spvVersion.vulkan);
+ snprintf(numberBuf, numberBufSize, "%d", spvVersion.vulkanGlsl);
preamble += numberBuf;
preamble += "\n";
}
@@ -498,6 +528,11 @@ void TParseVersions::requireNotRemoved(const TSourceLoc& loc, int profileMask, i
}
}
+void TParseVersions::unimplemented(const TSourceLoc& loc, const char* featureDesc)
+{
+ error(loc, "feature not yet implemented", featureDesc, "");
+}
+
// Returns true if at least one of the extensions in the extensions parameter is requested. Otherwise, returns false.
// Warns appropriately if the requested behavior of an extension is "warn".
bool TParseVersions::checkExtensionsRequested(const TSourceLoc& loc, int numExtensions, const char* const extensions[], const char* featureDesc)
@@ -703,10 +738,21 @@ void TParseVersions::doubleCheck(const TSourceLoc& loc, const char* op)
}
#ifdef AMD_EXTENSIONS
-// Call for any operation needing float16 data-type support.
+// Call for any operation needing GLSL 16-bit integer data-type support.
+void TParseVersions::int16Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+ if (! builtIn) {
+ requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_int16, "shader int16");
+ requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+ profileRequires(loc, ECoreProfile, 450, nullptr, op);
+ profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+ }
+}
+
+// Call for any operation needing GLSL float16 data-type support.
void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
- if (!builtIn) {
+ if (! builtIn) {
requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float, "shader half float");
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h
index 7f5d33d5ef3..bd57103afea 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h
@@ -72,14 +72,19 @@ inline const char* ProfileName(EProfile profile)
}
//
-// SPIR-V has versions for multiple things; tie them together.
-// 0 means a target or rule set is not enabled.
+// What source rules, validation rules, target language, etc. are needed
+// desired for SPIR-V?
+//
+// 0 means a target or rule set is not enabled (ignore rules from that entity).
+// Non-0 means to apply semantic rules arising from that version of its rule set.
+// The union of all requested rule sets will be applied.
//
struct SpvVersion {
- SpvVersion() : spv(0), vulkan(0), openGl(0) {}
- unsigned int spv; // the version of the targeted SPIR-V, as defined by SPIR-V in word 1 of the SPIR-V binary header
- int vulkan; // the version of semantics for Vulkan; e.g., for GLSL from KHR_vulkan_glsl "#define VULKAN"
- int openGl; // the version of semantics for OpenGL; e.g., for GLSL from KHR_vulkan_glsl "#define GL_SPIRV"
+ SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0) {}
+ unsigned int spv; // the version of SPIR-V to target, as defined by "word 1" of the SPIR-V binary header
+ int vulkanGlsl; // the version of GLSL semantics for Vulkan, from GL_KHR_vulkan_glsl, for "#define VULKAN XXX"
+ int vulkan; // the version of Vulkan, for which SPIR-V execution environment rules to use (100 means 1.0)
+ int openGl; // the version of GLSL semantics for OpenGL, from GL_ARB_gl_spirv, for "#define GL_SPIRV XXX"
};
//
@@ -102,7 +107,9 @@ const char* const E_GL_OES_texture_3D = "GL_OES_texture_3D";
const char* const E_GL_OES_standard_derivatives = "GL_OES_standard_derivatives";
const char* const E_GL_EXT_frag_depth = "GL_EXT_frag_depth";
const char* const E_GL_OES_EGL_image_external = "GL_OES_EGL_image_external";
+const char* const E_GL_OES_EGL_image_external_essl3 = "GL_OES_EGL_image_external_essl3";
const char* const E_GL_EXT_shader_texture_lod = "GL_EXT_shader_texture_lod";
+const char* const E_GL_EXT_shadow_samplers = "GL_EXT_shadow_samplers";
const char* const E_GL_ARB_texture_rectangle = "GL_ARB_texture_rectangle";
const char* const E_GL_3DL_array_objects = "GL_3DL_array_objects";
@@ -127,7 +134,10 @@ const char* const E_GL_ARB_gpu_shader_int64 = "GL_ARB_gpu_shader_int
const char* const E_GL_ARB_shader_ballot = "GL_ARB_shader_ballot";
const char* const E_GL_ARB_sparse_texture2 = "GL_ARB_sparse_texture2";
const char* const E_GL_ARB_sparse_texture_clamp = "GL_ARB_sparse_texture_clamp";
+const char* const E_GL_ARB_shader_stencil_export = "GL_ARB_shader_stencil_export";
// const char* const E_GL_ARB_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members
+const char* const E_GL_ARB_post_depth_coverage = "GL_ARB_post_depth_coverage";
+const char* const E_GL_ARB_shader_viewport_layer_array = "GL_ARB_shader_viewport_layer_array";
const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers";
const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted";
@@ -135,6 +145,19 @@ const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_lo
// EXT extensions
const char* const E_GL_EXT_device_group = "GL_EXT_device_group";
const char* const E_GL_EXT_multiview = "GL_EXT_multiview";
+const char* const E_GL_EXT_post_depth_coverage = "GL_EXT_post_depth_coverage";
+
+// Arrays of extensions for the above viewportEXTs duplications
+
+const char* const post_depth_coverageEXTs[] = { E_GL_ARB_post_depth_coverage, E_GL_EXT_post_depth_coverage };
+const int Num_post_depth_coverageEXTs = sizeof(post_depth_coverageEXTs) / sizeof(post_depth_coverageEXTs[0]);
+
+// OVR extensions
+const char* const E_GL_OVR_multiview = "GL_OVR_multiview";
+const char* const E_GL_OVR_multiview2 = "GL_OVR_multiview2";
+
+const char* const OVR_multiview_EXTs[] = { E_GL_OVR_multiview, E_GL_OVR_multiview2 };
+const int Num_OVR_multiview_EXTs = sizeof(OVR_multiview_EXTs) / sizeof(OVR_multiview_EXTs[0]);
// #line and #include
const char* const E_GL_GOOGLE_cpp_style_line_directive = "GL_GOOGLE_cpp_style_line_directive";
@@ -146,15 +169,20 @@ const char* const E_GL_AMD_shader_trinary_minmax = "GL_AMD_shader
const char* const E_GL_AMD_shader_explicit_vertex_parameter = "GL_AMD_shader_explicit_vertex_parameter";
const char* const E_GL_AMD_gcn_shader = "GL_AMD_gcn_shader";
const char* const E_GL_AMD_gpu_shader_half_float = "GL_AMD_gpu_shader_half_float";
+const char* const E_GL_AMD_texture_gather_bias_lod = "GL_AMD_texture_gather_bias_lod";
+const char* const E_GL_AMD_gpu_shader_int16 = "GL_AMD_gpu_shader_int16";
+const char* const E_GL_AMD_shader_image_load_store_lod = "GL_AMD_shader_image_load_store_lod";
+const char* const E_GL_AMD_shader_fragment_mask = "GL_AMD_shader_fragment_mask";
#endif
+
#ifdef NV_EXTENSIONS
const char* const E_GL_NV_sample_mask_override_coverage = "GL_NV_sample_mask_override_coverage";
const char* const E_SPV_NV_geometry_shader_passthrough = "GL_NV_geometry_shader_passthrough";
-const char* const E_GL_ARB_shader_viewport_layer_array = "GL_ARB_shader_viewport_layer_array";
const char* const E_GL_NV_viewport_array2 = "GL_NV_viewport_array2";
const char* const E_GL_NV_stereo_view_rendering = "GL_NV_stereo_view_rendering";
const char* const E_GL_NVX_multiview_per_view_attributes = "GL_NVX_multiview_per_view_attributes";
+const char* const E_GL_NV_shader_atomic_int64 = "GL_NV_shader_atomic_int64";
// Arrays of extensions for the above viewportEXTs duplications
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h
index d7cb31fe38a..ae00ae57ecf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h
@@ -21,6 +21,8 @@
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
+#pragma once
+
#define GL_FLOAT 0x1406
#define GL_FLOAT_VEC2 0x8B50
#define GL_FLOAT_VEC3 0x8B51
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y
index f2512b82801..52358c7d209 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y
@@ -63,6 +63,8 @@ using namespace glslang;
%}
+%define parse.error verbose
+
%union {
struct {
glslang::TSourceLoc loc;
@@ -119,7 +121,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
%expect 1 // One shift reduce conflict because of if | else
%token <lex> ATTRIBUTE VARYING
-%token <lex> CONST BOOL FLOAT DOUBLE INT UINT INT64_T UINT64_T FLOAT16_T
+%token <lex> CONST BOOL FLOAT DOUBLE INT UINT INT64_T UINT64_T INT16_T UINT16_T FLOAT16_T
%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE
%token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 I64VEC2 I64VEC3 I64VEC4 UVEC2 UVEC3 UVEC4 U64VEC2 U64VEC3 U64VEC4 VEC2 VEC3 VEC4
%token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
@@ -127,6 +129,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
%token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
%token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
+%token <lex> I16VEC2 I16VEC3 I16VEC4 U16VEC2 U16VEC3 U16VEC4
%token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT __EXPLICITINTERPAMD
%token <lex> MAT2X2 MAT2X3 MAT2X4
@@ -186,7 +189,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> STRUCT VOID WHILE
%token <lex> IDENTIFIER TYPE_NAME
-%token <lex> FLOATCONSTANT DOUBLECONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT BOOLCONSTANT FLOAT16CONSTANT
+%token <lex> FLOATCONSTANT DOUBLECONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT INT16CONSTANT UINT16CONSTANT BOOLCONSTANT FLOAT16CONSTANT
%token <lex> LEFT_OP RIGHT_OP
%token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
%token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
@@ -271,6 +274,18 @@ primary_expression
parseContext.int64Check($1.loc, "64-bit unsigned integer literal");
$$ = parseContext.intermediate.addConstantUnion($1.u64, $1.loc, true);
}
+ | INT16CONSTANT {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit integer literal");
+ $$ = parseContext.intermediate.addConstantUnion((short)$1.i, $1.loc, true);
+#endif
+ }
+ | UINT16CONSTANT {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit unsigned integer literal");
+ $$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
+#endif
+ }
| FLOATCONSTANT {
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
}
@@ -845,6 +860,11 @@ function_header
// Add the function as a prototype after parsing it (we do not support recursion)
TFunction *function;
TType type($1);
+
+ // Potentially rename shader entry point function. No-op most of the time.
+ parseContext.renameShaderFunction($2.string);
+
+ // Make the function
function = new TFunction($2.string, type);
$$ = function;
}
@@ -1229,6 +1249,7 @@ storage_qualifier
$$.qualifier.storage = EvqBuffer;
}
| SHARED {
+ parseContext.globalCheck($1.loc, "shared");
parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
parseContext.requireStage($1.loc, EShLangCompute, "shared");
@@ -1258,25 +1279,25 @@ storage_qualifier
| SUBROUTINE {
parseContext.spvRemoved($1.loc, "subroutine");
parseContext.globalCheck($1.loc, "subroutine");
+ parseContext.unimplemented($1.loc, "subroutine");
$$.init($1.loc);
- $$.qualifier.storage = EvqUniform;
}
| SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN {
parseContext.spvRemoved($1.loc, "subroutine");
parseContext.globalCheck($1.loc, "subroutine");
+ parseContext.unimplemented($1.loc, "subroutine");
$$.init($1.loc);
- $$.qualifier.storage = EvqUniform;
- // TODO: 4.0 semantics: subroutines
- // 1) make sure each identifier is a type declared earlier with SUBROUTINE
- // 2) save all of the identifiers for future comparison with the declared function
}
;
type_name_list
- : TYPE_NAME {
- // TODO: 4.0 functionality: subroutine type to list
+ : IDENTIFIER {
+ // TODO
}
- | type_name_list COMMA TYPE_NAME {
+ | type_name_list COMMA IDENTIFIER {
+ // TODO: 4.0 semantics: subroutines
+ // 1) make sure each identifier is a type declared earlier with SUBROUTINE
+ // 2) save all of the identifiers for future comparison with the declared function
}
;
@@ -1360,6 +1381,20 @@ type_specifier_nonarray
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint64;
}
+ | INT16_T {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit integer", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt16;
+#endif
+ }
+ | UINT16_T {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint16;
+#endif
+ }
| BOOL {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtBool;
@@ -1469,6 +1504,30 @@ type_specifier_nonarray
$$.basicType = EbtInt64;
$$.setVector(4);
}
+ | I16VEC2 {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt16;
+ $$.setVector(2);
+#endif
+ }
+ | I16VEC3 {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt16;
+ $$.setVector(3);
+#endif
+ }
+ | I16VEC4 {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt16;
+ $$.setVector(4);
+#endif
+ }
| UVEC2 {
parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1505,6 +1564,30 @@ type_specifier_nonarray
$$.basicType = EbtUint64;
$$.setVector(4);
}
+ | U16VEC2 {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint16;
+ $$.setVector(2);
+#endif
+ }
+ | U16VEC3 {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint16;
+ $$.setVector(3);
+#endif
+ }
+ | U16VEC4 {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint16;
+ $$.setVector(4);
+#endif
+ }
| MAT2 {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
@@ -2775,7 +2858,7 @@ jump_statement
if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
parseContext.error($1.loc, "non-void function must return a value", "return", "");
if (parseContext.inMain)
- parseContext.postMainReturn = true;
+ parseContext.postEntryPointReturn = true;
}
| RETURN expression SEMICOLON {
$$ = parseContext.handleReturnValue($1.loc, $2);
@@ -2794,8 +2877,10 @@ translation_unit
parseContext.intermediate.setTreeRoot($$);
}
| translation_unit external_declaration {
- $$ = parseContext.intermediate.growAggregate($1, $2);
- parseContext.intermediate.setTreeRoot($$);
+ if ($2 != nullptr) {
+ $$ = parseContext.intermediate.growAggregate($1, $2);
+ parseContext.intermediate.setTreeRoot($$);
+ }
}
;
@@ -2806,6 +2891,11 @@ external_declaration
| declaration {
$$ = $1;
}
+ | SEMICOLON {
+ parseContext.requireProfile($1.loc, ~EEsProfile, "extraneous semicolon");
+ parseContext.profileRequires($1.loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
+ $$ = nullptr;
+ }
;
function_definition
@@ -2826,7 +2916,7 @@ function_definition
// information. This information can be queried from the parse tree
$$->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
$$->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
- $$->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
+ $$->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
}
;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp
index 3507c04e625..72415681bd2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7. */
+/* A Bison parser, made by GNU Bison 3.0. */
/* Bison implementation for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,7 +26,7 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.7"
+#define YYBISON_VERSION "3.0"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -62,8 +62,7 @@
/* Copy the first part of user declarations. */
-/* Line 371 of yacc.c */
-#line 41 "glslang.y"
+#line 41 "MachineIndependent/glslang.y" /* yacc.c:339 */
/* Based on:
@@ -88,8 +87,7 @@ Jutta Degener, 1995
using namespace glslang;
-/* Line 371 of yacc.c */
-#line 93 "glslang_tab.cpp"
+#line 91 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339 */
# ifndef YY_NULL
# if defined __cplusplus && 201103L <= __cplusplus
@@ -104,14 +102,14 @@ using namespace glslang;
# undef YYERROR_VERBOSE
# define YYERROR_VERBOSE 1
#else
-# define YYERROR_VERBOSE 0
+# define YYERROR_VERBOSE 1
#endif
/* In a future release of Bison, this section will be replaced
by #include "glslang_tab.cpp.h". */
-#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
-/* Enabling traces. */
+#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#endif
@@ -119,306 +117,315 @@ using namespace glslang;
extern int yydebug;
#endif
-/* Tokens. */
+/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- ATTRIBUTE = 258,
- VARYING = 259,
- CONST = 260,
- BOOL = 261,
- FLOAT = 262,
- DOUBLE = 263,
- INT = 264,
- UINT = 265,
- INT64_T = 266,
- UINT64_T = 267,
- FLOAT16_T = 268,
- BREAK = 269,
- CONTINUE = 270,
- DO = 271,
- ELSE = 272,
- FOR = 273,
- IF = 274,
- DISCARD = 275,
- RETURN = 276,
- SWITCH = 277,
- CASE = 278,
- DEFAULT = 279,
- SUBROUTINE = 280,
- BVEC2 = 281,
- BVEC3 = 282,
- BVEC4 = 283,
- IVEC2 = 284,
- IVEC3 = 285,
- IVEC4 = 286,
- I64VEC2 = 287,
- I64VEC3 = 288,
- I64VEC4 = 289,
- UVEC2 = 290,
- UVEC3 = 291,
- UVEC4 = 292,
- U64VEC2 = 293,
- U64VEC3 = 294,
- U64VEC4 = 295,
- VEC2 = 296,
- VEC3 = 297,
- VEC4 = 298,
- MAT2 = 299,
- MAT3 = 300,
- MAT4 = 301,
- CENTROID = 302,
- IN = 303,
- OUT = 304,
- INOUT = 305,
- UNIFORM = 306,
- PATCH = 307,
- SAMPLE = 308,
- BUFFER = 309,
- SHARED = 310,
- COHERENT = 311,
- VOLATILE = 312,
- RESTRICT = 313,
- READONLY = 314,
- WRITEONLY = 315,
- DVEC2 = 316,
- DVEC3 = 317,
- DVEC4 = 318,
- DMAT2 = 319,
- DMAT3 = 320,
- DMAT4 = 321,
- F16VEC2 = 322,
- F16VEC3 = 323,
- F16VEC4 = 324,
- F16MAT2 = 325,
- F16MAT3 = 326,
- F16MAT4 = 327,
- NOPERSPECTIVE = 328,
- FLAT = 329,
- SMOOTH = 330,
- LAYOUT = 331,
- __EXPLICITINTERPAMD = 332,
- MAT2X2 = 333,
- MAT2X3 = 334,
- MAT2X4 = 335,
- MAT3X2 = 336,
- MAT3X3 = 337,
- MAT3X4 = 338,
- MAT4X2 = 339,
- MAT4X3 = 340,
- MAT4X4 = 341,
- DMAT2X2 = 342,
- DMAT2X3 = 343,
- DMAT2X4 = 344,
- DMAT3X2 = 345,
- DMAT3X3 = 346,
- DMAT3X4 = 347,
- DMAT4X2 = 348,
- DMAT4X3 = 349,
- DMAT4X4 = 350,
- F16MAT2X2 = 351,
- F16MAT2X3 = 352,
- F16MAT2X4 = 353,
- F16MAT3X2 = 354,
- F16MAT3X3 = 355,
- F16MAT3X4 = 356,
- F16MAT4X2 = 357,
- F16MAT4X3 = 358,
- F16MAT4X4 = 359,
- ATOMIC_UINT = 360,
- SAMPLER1D = 361,
- SAMPLER2D = 362,
- SAMPLER3D = 363,
- SAMPLERCUBE = 364,
- SAMPLER1DSHADOW = 365,
- SAMPLER2DSHADOW = 366,
- SAMPLERCUBESHADOW = 367,
- SAMPLER1DARRAY = 368,
- SAMPLER2DARRAY = 369,
- SAMPLER1DARRAYSHADOW = 370,
- SAMPLER2DARRAYSHADOW = 371,
- ISAMPLER1D = 372,
- ISAMPLER2D = 373,
- ISAMPLER3D = 374,
- ISAMPLERCUBE = 375,
- ISAMPLER1DARRAY = 376,
- ISAMPLER2DARRAY = 377,
- USAMPLER1D = 378,
- USAMPLER2D = 379,
- USAMPLER3D = 380,
- USAMPLERCUBE = 381,
- USAMPLER1DARRAY = 382,
- USAMPLER2DARRAY = 383,
- SAMPLER2DRECT = 384,
- SAMPLER2DRECTSHADOW = 385,
- ISAMPLER2DRECT = 386,
- USAMPLER2DRECT = 387,
- SAMPLERBUFFER = 388,
- ISAMPLERBUFFER = 389,
- USAMPLERBUFFER = 390,
- SAMPLERCUBEARRAY = 391,
- SAMPLERCUBEARRAYSHADOW = 392,
- ISAMPLERCUBEARRAY = 393,
- USAMPLERCUBEARRAY = 394,
- SAMPLER2DMS = 395,
- ISAMPLER2DMS = 396,
- USAMPLER2DMS = 397,
- SAMPLER2DMSARRAY = 398,
- ISAMPLER2DMSARRAY = 399,
- USAMPLER2DMSARRAY = 400,
- SAMPLEREXTERNALOES = 401,
- SAMPLER = 402,
- SAMPLERSHADOW = 403,
- TEXTURE1D = 404,
- TEXTURE2D = 405,
- TEXTURE3D = 406,
- TEXTURECUBE = 407,
- TEXTURE1DARRAY = 408,
- TEXTURE2DARRAY = 409,
- ITEXTURE1D = 410,
- ITEXTURE2D = 411,
- ITEXTURE3D = 412,
- ITEXTURECUBE = 413,
- ITEXTURE1DARRAY = 414,
- ITEXTURE2DARRAY = 415,
- UTEXTURE1D = 416,
- UTEXTURE2D = 417,
- UTEXTURE3D = 418,
- UTEXTURECUBE = 419,
- UTEXTURE1DARRAY = 420,
- UTEXTURE2DARRAY = 421,
- TEXTURE2DRECT = 422,
- ITEXTURE2DRECT = 423,
- UTEXTURE2DRECT = 424,
- TEXTUREBUFFER = 425,
- ITEXTUREBUFFER = 426,
- UTEXTUREBUFFER = 427,
- TEXTURECUBEARRAY = 428,
- ITEXTURECUBEARRAY = 429,
- UTEXTURECUBEARRAY = 430,
- TEXTURE2DMS = 431,
- ITEXTURE2DMS = 432,
- UTEXTURE2DMS = 433,
- TEXTURE2DMSARRAY = 434,
- ITEXTURE2DMSARRAY = 435,
- UTEXTURE2DMSARRAY = 436,
- SUBPASSINPUT = 437,
- SUBPASSINPUTMS = 438,
- ISUBPASSINPUT = 439,
- ISUBPASSINPUTMS = 440,
- USUBPASSINPUT = 441,
- USUBPASSINPUTMS = 442,
- IMAGE1D = 443,
- IIMAGE1D = 444,
- UIMAGE1D = 445,
- IMAGE2D = 446,
- IIMAGE2D = 447,
- UIMAGE2D = 448,
- IMAGE3D = 449,
- IIMAGE3D = 450,
- UIMAGE3D = 451,
- IMAGE2DRECT = 452,
- IIMAGE2DRECT = 453,
- UIMAGE2DRECT = 454,
- IMAGECUBE = 455,
- IIMAGECUBE = 456,
- UIMAGECUBE = 457,
- IMAGEBUFFER = 458,
- IIMAGEBUFFER = 459,
- UIMAGEBUFFER = 460,
- IMAGE1DARRAY = 461,
- IIMAGE1DARRAY = 462,
- UIMAGE1DARRAY = 463,
- IMAGE2DARRAY = 464,
- IIMAGE2DARRAY = 465,
- UIMAGE2DARRAY = 466,
- IMAGECUBEARRAY = 467,
- IIMAGECUBEARRAY = 468,
- UIMAGECUBEARRAY = 469,
- IMAGE2DMS = 470,
- IIMAGE2DMS = 471,
- UIMAGE2DMS = 472,
- IMAGE2DMSARRAY = 473,
- IIMAGE2DMSARRAY = 474,
- UIMAGE2DMSARRAY = 475,
- STRUCT = 476,
- VOID = 477,
- WHILE = 478,
- IDENTIFIER = 479,
- TYPE_NAME = 480,
- FLOATCONSTANT = 481,
- DOUBLECONSTANT = 482,
- INTCONSTANT = 483,
- UINTCONSTANT = 484,
- INT64CONSTANT = 485,
- UINT64CONSTANT = 486,
- BOOLCONSTANT = 487,
- FLOAT16CONSTANT = 488,
- LEFT_OP = 489,
- RIGHT_OP = 490,
- INC_OP = 491,
- DEC_OP = 492,
- LE_OP = 493,
- GE_OP = 494,
- EQ_OP = 495,
- NE_OP = 496,
- AND_OP = 497,
- OR_OP = 498,
- XOR_OP = 499,
- MUL_ASSIGN = 500,
- DIV_ASSIGN = 501,
- ADD_ASSIGN = 502,
- MOD_ASSIGN = 503,
- LEFT_ASSIGN = 504,
- RIGHT_ASSIGN = 505,
- AND_ASSIGN = 506,
- XOR_ASSIGN = 507,
- OR_ASSIGN = 508,
- SUB_ASSIGN = 509,
- LEFT_PAREN = 510,
- RIGHT_PAREN = 511,
- LEFT_BRACKET = 512,
- RIGHT_BRACKET = 513,
- LEFT_BRACE = 514,
- RIGHT_BRACE = 515,
- DOT = 516,
- COMMA = 517,
- COLON = 518,
- EQUAL = 519,
- SEMICOLON = 520,
- BANG = 521,
- DASH = 522,
- TILDE = 523,
- PLUS = 524,
- STAR = 525,
- SLASH = 526,
- PERCENT = 527,
- LEFT_ANGLE = 528,
- RIGHT_ANGLE = 529,
- VERTICAL_BAR = 530,
- CARET = 531,
- AMPERSAND = 532,
- QUESTION = 533,
- INVARIANT = 534,
- PRECISE = 535,
- HIGH_PRECISION = 536,
- MEDIUM_PRECISION = 537,
- LOW_PRECISION = 538,
- PRECISION = 539,
- PACKED = 540,
- RESOURCE = 541,
- SUPERP = 542
- };
+ enum yytokentype
+ {
+ ATTRIBUTE = 258,
+ VARYING = 259,
+ CONST = 260,
+ BOOL = 261,
+ FLOAT = 262,
+ DOUBLE = 263,
+ INT = 264,
+ UINT = 265,
+ INT64_T = 266,
+ UINT64_T = 267,
+ INT16_T = 268,
+ UINT16_T = 269,
+ FLOAT16_T = 270,
+ BREAK = 271,
+ CONTINUE = 272,
+ DO = 273,
+ ELSE = 274,
+ FOR = 275,
+ IF = 276,
+ DISCARD = 277,
+ RETURN = 278,
+ SWITCH = 279,
+ CASE = 280,
+ DEFAULT = 281,
+ SUBROUTINE = 282,
+ BVEC2 = 283,
+ BVEC3 = 284,
+ BVEC4 = 285,
+ IVEC2 = 286,
+ IVEC3 = 287,
+ IVEC4 = 288,
+ I64VEC2 = 289,
+ I64VEC3 = 290,
+ I64VEC4 = 291,
+ UVEC2 = 292,
+ UVEC3 = 293,
+ UVEC4 = 294,
+ U64VEC2 = 295,
+ U64VEC3 = 296,
+ U64VEC4 = 297,
+ VEC2 = 298,
+ VEC3 = 299,
+ VEC4 = 300,
+ MAT2 = 301,
+ MAT3 = 302,
+ MAT4 = 303,
+ CENTROID = 304,
+ IN = 305,
+ OUT = 306,
+ INOUT = 307,
+ UNIFORM = 308,
+ PATCH = 309,
+ SAMPLE = 310,
+ BUFFER = 311,
+ SHARED = 312,
+ COHERENT = 313,
+ VOLATILE = 314,
+ RESTRICT = 315,
+ READONLY = 316,
+ WRITEONLY = 317,
+ DVEC2 = 318,
+ DVEC3 = 319,
+ DVEC4 = 320,
+ DMAT2 = 321,
+ DMAT3 = 322,
+ DMAT4 = 323,
+ F16VEC2 = 324,
+ F16VEC3 = 325,
+ F16VEC4 = 326,
+ F16MAT2 = 327,
+ F16MAT3 = 328,
+ F16MAT4 = 329,
+ I16VEC2 = 330,
+ I16VEC3 = 331,
+ I16VEC4 = 332,
+ U16VEC2 = 333,
+ U16VEC3 = 334,
+ U16VEC4 = 335,
+ NOPERSPECTIVE = 336,
+ FLAT = 337,
+ SMOOTH = 338,
+ LAYOUT = 339,
+ __EXPLICITINTERPAMD = 340,
+ MAT2X2 = 341,
+ MAT2X3 = 342,
+ MAT2X4 = 343,
+ MAT3X2 = 344,
+ MAT3X3 = 345,
+ MAT3X4 = 346,
+ MAT4X2 = 347,
+ MAT4X3 = 348,
+ MAT4X4 = 349,
+ DMAT2X2 = 350,
+ DMAT2X3 = 351,
+ DMAT2X4 = 352,
+ DMAT3X2 = 353,
+ DMAT3X3 = 354,
+ DMAT3X4 = 355,
+ DMAT4X2 = 356,
+ DMAT4X3 = 357,
+ DMAT4X4 = 358,
+ F16MAT2X2 = 359,
+ F16MAT2X3 = 360,
+ F16MAT2X4 = 361,
+ F16MAT3X2 = 362,
+ F16MAT3X3 = 363,
+ F16MAT3X4 = 364,
+ F16MAT4X2 = 365,
+ F16MAT4X3 = 366,
+ F16MAT4X4 = 367,
+ ATOMIC_UINT = 368,
+ SAMPLER1D = 369,
+ SAMPLER2D = 370,
+ SAMPLER3D = 371,
+ SAMPLERCUBE = 372,
+ SAMPLER1DSHADOW = 373,
+ SAMPLER2DSHADOW = 374,
+ SAMPLERCUBESHADOW = 375,
+ SAMPLER1DARRAY = 376,
+ SAMPLER2DARRAY = 377,
+ SAMPLER1DARRAYSHADOW = 378,
+ SAMPLER2DARRAYSHADOW = 379,
+ ISAMPLER1D = 380,
+ ISAMPLER2D = 381,
+ ISAMPLER3D = 382,
+ ISAMPLERCUBE = 383,
+ ISAMPLER1DARRAY = 384,
+ ISAMPLER2DARRAY = 385,
+ USAMPLER1D = 386,
+ USAMPLER2D = 387,
+ USAMPLER3D = 388,
+ USAMPLERCUBE = 389,
+ USAMPLER1DARRAY = 390,
+ USAMPLER2DARRAY = 391,
+ SAMPLER2DRECT = 392,
+ SAMPLER2DRECTSHADOW = 393,
+ ISAMPLER2DRECT = 394,
+ USAMPLER2DRECT = 395,
+ SAMPLERBUFFER = 396,
+ ISAMPLERBUFFER = 397,
+ USAMPLERBUFFER = 398,
+ SAMPLERCUBEARRAY = 399,
+ SAMPLERCUBEARRAYSHADOW = 400,
+ ISAMPLERCUBEARRAY = 401,
+ USAMPLERCUBEARRAY = 402,
+ SAMPLER2DMS = 403,
+ ISAMPLER2DMS = 404,
+ USAMPLER2DMS = 405,
+ SAMPLER2DMSARRAY = 406,
+ ISAMPLER2DMSARRAY = 407,
+ USAMPLER2DMSARRAY = 408,
+ SAMPLEREXTERNALOES = 409,
+ SAMPLER = 410,
+ SAMPLERSHADOW = 411,
+ TEXTURE1D = 412,
+ TEXTURE2D = 413,
+ TEXTURE3D = 414,
+ TEXTURECUBE = 415,
+ TEXTURE1DARRAY = 416,
+ TEXTURE2DARRAY = 417,
+ ITEXTURE1D = 418,
+ ITEXTURE2D = 419,
+ ITEXTURE3D = 420,
+ ITEXTURECUBE = 421,
+ ITEXTURE1DARRAY = 422,
+ ITEXTURE2DARRAY = 423,
+ UTEXTURE1D = 424,
+ UTEXTURE2D = 425,
+ UTEXTURE3D = 426,
+ UTEXTURECUBE = 427,
+ UTEXTURE1DARRAY = 428,
+ UTEXTURE2DARRAY = 429,
+ TEXTURE2DRECT = 430,
+ ITEXTURE2DRECT = 431,
+ UTEXTURE2DRECT = 432,
+ TEXTUREBUFFER = 433,
+ ITEXTUREBUFFER = 434,
+ UTEXTUREBUFFER = 435,
+ TEXTURECUBEARRAY = 436,
+ ITEXTURECUBEARRAY = 437,
+ UTEXTURECUBEARRAY = 438,
+ TEXTURE2DMS = 439,
+ ITEXTURE2DMS = 440,
+ UTEXTURE2DMS = 441,
+ TEXTURE2DMSARRAY = 442,
+ ITEXTURE2DMSARRAY = 443,
+ UTEXTURE2DMSARRAY = 444,
+ SUBPASSINPUT = 445,
+ SUBPASSINPUTMS = 446,
+ ISUBPASSINPUT = 447,
+ ISUBPASSINPUTMS = 448,
+ USUBPASSINPUT = 449,
+ USUBPASSINPUTMS = 450,
+ IMAGE1D = 451,
+ IIMAGE1D = 452,
+ UIMAGE1D = 453,
+ IMAGE2D = 454,
+ IIMAGE2D = 455,
+ UIMAGE2D = 456,
+ IMAGE3D = 457,
+ IIMAGE3D = 458,
+ UIMAGE3D = 459,
+ IMAGE2DRECT = 460,
+ IIMAGE2DRECT = 461,
+ UIMAGE2DRECT = 462,
+ IMAGECUBE = 463,
+ IIMAGECUBE = 464,
+ UIMAGECUBE = 465,
+ IMAGEBUFFER = 466,
+ IIMAGEBUFFER = 467,
+ UIMAGEBUFFER = 468,
+ IMAGE1DARRAY = 469,
+ IIMAGE1DARRAY = 470,
+ UIMAGE1DARRAY = 471,
+ IMAGE2DARRAY = 472,
+ IIMAGE2DARRAY = 473,
+ UIMAGE2DARRAY = 474,
+ IMAGECUBEARRAY = 475,
+ IIMAGECUBEARRAY = 476,
+ UIMAGECUBEARRAY = 477,
+ IMAGE2DMS = 478,
+ IIMAGE2DMS = 479,
+ UIMAGE2DMS = 480,
+ IMAGE2DMSARRAY = 481,
+ IIMAGE2DMSARRAY = 482,
+ UIMAGE2DMSARRAY = 483,
+ STRUCT = 484,
+ VOID = 485,
+ WHILE = 486,
+ IDENTIFIER = 487,
+ TYPE_NAME = 488,
+ FLOATCONSTANT = 489,
+ DOUBLECONSTANT = 490,
+ INTCONSTANT = 491,
+ UINTCONSTANT = 492,
+ INT64CONSTANT = 493,
+ UINT64CONSTANT = 494,
+ INT16CONSTANT = 495,
+ UINT16CONSTANT = 496,
+ BOOLCONSTANT = 497,
+ FLOAT16CONSTANT = 498,
+ LEFT_OP = 499,
+ RIGHT_OP = 500,
+ INC_OP = 501,
+ DEC_OP = 502,
+ LE_OP = 503,
+ GE_OP = 504,
+ EQ_OP = 505,
+ NE_OP = 506,
+ AND_OP = 507,
+ OR_OP = 508,
+ XOR_OP = 509,
+ MUL_ASSIGN = 510,
+ DIV_ASSIGN = 511,
+ ADD_ASSIGN = 512,
+ MOD_ASSIGN = 513,
+ LEFT_ASSIGN = 514,
+ RIGHT_ASSIGN = 515,
+ AND_ASSIGN = 516,
+ XOR_ASSIGN = 517,
+ OR_ASSIGN = 518,
+ SUB_ASSIGN = 519,
+ LEFT_PAREN = 520,
+ RIGHT_PAREN = 521,
+ LEFT_BRACKET = 522,
+ RIGHT_BRACKET = 523,
+ LEFT_BRACE = 524,
+ RIGHT_BRACE = 525,
+ DOT = 526,
+ COMMA = 527,
+ COLON = 528,
+ EQUAL = 529,
+ SEMICOLON = 530,
+ BANG = 531,
+ DASH = 532,
+ TILDE = 533,
+ PLUS = 534,
+ STAR = 535,
+ SLASH = 536,
+ PERCENT = 537,
+ LEFT_ANGLE = 538,
+ RIGHT_ANGLE = 539,
+ VERTICAL_BAR = 540,
+ CARET = 541,
+ AMPERSAND = 542,
+ QUESTION = 543,
+ INVARIANT = 544,
+ PRECISE = 545,
+ HIGH_PRECISION = 546,
+ MEDIUM_PRECISION = 547,
+ LOW_PRECISION = 548,
+ PRECISION = 549,
+ PACKED = 550,
+ RESOURCE = 551,
+ SUPERP = 552
+ };
#endif
-
+/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+typedef union YYSTYPE YYSTYPE;
+union YYSTYPE
{
-/* Line 387 of yacc.c */
-#line 66 "glslang.y"
+#line 68 "MachineIndependent/glslang.y" /* yacc.c:355 */
struct {
glslang::TSourceLoc loc;
@@ -452,35 +459,20 @@ typedef union YYSTYPE
};
} interm;
-
-/* Line 387 of yacc.c */
-#line 458 "glslang_tab.cpp"
-} YYSTYPE;
+#line 463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */
+};
# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
+
int yyparse (glslang::TParseContext* pParseContext);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED */
+#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */
/* Copy the second part of user declarations. */
-/* Line 390 of yacc.c */
-#line 100 "glslang.y"
+#line 102 "MachineIndependent/glslang.y" /* yacc.c:358 */
/* windows only pragma */
@@ -496,8 +488,7 @@ int yyparse ();
extern int yylex(YYSTYPE*, TParseContext&);
-/* Line 390 of yacc.c */
-#line 501 "glslang_tab.cpp"
+#line 492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */
#ifdef short
# undef short
@@ -511,11 +502,8 @@ typedef unsigned char yytype_uint8;
#ifdef YYTYPE_INT8
typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
#else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
#endif
#ifdef YYTYPE_UINT16
@@ -535,8 +523,7 @@ typedef short int yytype_int16;
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# else
@@ -558,6 +545,14 @@ typedef short int yytype_int16;
# endif
#endif
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+ || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+# define __attribute__(Spec) /* empty */
+# endif
+#endif
+
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
# define YYUSE(E) ((void) (E))
@@ -565,24 +560,26 @@ typedef short int yytype_int16;
# define YYUSE(E) /* empty */
#endif
-/* Identity function, used to suppress warnings about constant conditions. */
-#ifndef lint
-# define YYID(N) (N)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
#else
-static int
-YYID (yyi)
- int yyi;
+# define YY_INITIAL_VALUE(Value) Value
#endif
-{
- return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
+
#if ! defined yyoverflow || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
@@ -600,8 +597,7 @@ YYID (yyi)
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
/* Use EXIT_SUCCESS as a witness for stdlib.h. */
# ifndef EXIT_SUCCESS
@@ -613,8 +609,8 @@ YYID (yyi)
# endif
# ifdef YYSTACK_ALLOC
- /* Pacify GCC's `empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+ /* Pacify GCC's 'empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
# ifndef YYSTACK_ALLOC_MAXIMUM
/* The OS might guarantee only one guard page at the bottom of the stack,
and a page size can be as small as 4096 bytes. So we cannot safely
@@ -630,7 +626,7 @@ YYID (yyi)
# endif
# if (defined __cplusplus && ! defined EXIT_SUCCESS \
&& ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
+ && (defined YYFREE || defined free)))
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
@@ -638,15 +634,13 @@ YYID (yyi)
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
-# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# if ! defined malloc && ! defined EXIT_SUCCESS
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# ifndef YYFREE
# define YYFREE free
-# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# if ! defined free && ! defined EXIT_SUCCESS
void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
@@ -656,7 +650,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
#if (! defined yyoverflow \
&& (! defined __cplusplus \
- || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
@@ -681,16 +675,16 @@ union yyalloc
elements in the stack, and YYPTR gives the new location of the
stack. Advance YYPTR to a properly aligned location for the next
stack. */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
- Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
#endif
@@ -709,33 +703,35 @@ union yyalloc
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
- while (YYID (0))
+ while (0)
# endif
# endif
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 265
+#define YYFINAL 274
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 6373
+#define YYLAST 6614
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 288
+#define YYNTOKENS 298
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 100
/* YYNRULES -- Number of rules. */
-#define YYNRULES 439
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 571
+#define YYNRULES 450
+/* YYNSTATES -- Number of states. */
+#define YYNSTATES 582
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+ by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 542
+#define YYMAXUTOK 552
-#define YYTRANSLATE(YYX) \
+#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, without out-of-bounds checking. */
static const yytype_uint16 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -792,259 +788,98 @@ static const yytype_uint16 yytranslate[] =
255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297
};
#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const yytype_uint16 yyprhs[] =
-{
- 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
- 19, 21, 23, 27, 29, 34, 36, 40, 43, 46,
- 48, 50, 52, 55, 58, 61, 63, 66, 70, 73,
- 75, 77, 79, 82, 85, 88, 90, 92, 94, 96,
- 98, 102, 106, 110, 112, 116, 120, 122, 126, 130,
- 132, 136, 140, 144, 148, 150, 154, 158, 160, 164,
- 166, 170, 172, 176, 178, 182, 184, 188, 190, 194,
- 196, 197, 204, 206, 210, 212, 214, 216, 218, 220,
- 222, 224, 226, 228, 230, 232, 234, 238, 240, 243,
- 246, 251, 254, 258, 263, 266, 270, 275, 276, 283,
- 286, 290, 293, 295, 297, 300, 304, 308, 311, 315,
- 318, 320, 323, 325, 327, 329, 333, 338, 345, 351,
- 353, 356, 360, 366, 371, 373, 376, 378, 380, 382,
- 384, 386, 391, 393, 397, 399, 403, 405, 407, 409,
- 412, 414, 416, 418, 420, 422, 424, 426, 428, 430,
- 432, 434, 436, 438, 440, 442, 444, 446, 448, 450,
- 452, 454, 456, 458, 460, 465, 467, 471, 473, 476,
- 479, 483, 487, 492, 494, 496, 498, 500, 502, 504,
- 506, 508, 510, 512, 514, 516, 518, 520, 522, 524,
- 526, 528, 530, 532, 534, 536, 538, 540, 542, 544,
- 546, 548, 550, 552, 554, 556, 558, 560, 562, 564,
- 566, 568, 570, 572, 574, 576, 578, 580, 582, 584,
- 586, 588, 590, 592, 594, 596, 598, 600, 602, 604,
- 606, 608, 610, 612, 614, 616, 618, 620, 622, 624,
- 626, 628, 630, 632, 634, 636, 638, 640, 642, 644,
- 646, 648, 650, 652, 654, 656, 658, 660, 662, 664,
- 666, 668, 670, 672, 674, 676, 678, 680, 682, 684,
- 686, 688, 690, 692, 694, 696, 698, 700, 702, 704,
- 706, 708, 710, 712, 714, 716, 718, 720, 722, 724,
- 726, 728, 730, 732, 734, 736, 738, 740, 742, 744,
- 746, 748, 750, 752, 754, 756, 758, 760, 762, 764,
- 766, 768, 770, 772, 774, 776, 778, 780, 782, 784,
- 786, 788, 790, 792, 794, 796, 798, 800, 802, 804,
- 806, 808, 810, 812, 814, 816, 818, 820, 822, 824,
- 826, 828, 830, 832, 834, 836, 838, 840, 842, 844,
- 846, 848, 850, 852, 854, 856, 858, 860, 862, 864,
- 866, 868, 870, 872, 873, 880, 881, 887, 889, 892,
- 896, 901, 903, 907, 909, 912, 914, 918, 923, 925,
- 929, 931, 933, 935, 937, 939, 941, 943, 945, 947,
- 949, 952, 953, 954, 960, 962, 964, 965, 968, 969,
- 972, 975, 979, 981, 984, 986, 989, 995, 999, 1001,
- 1003, 1008, 1009, 1018, 1019, 1021, 1025, 1028, 1029, 1036,
- 1037, 1046, 1047, 1055, 1057, 1059, 1061, 1062, 1065, 1069,
- 1072, 1075, 1078, 1082, 1085, 1087, 1090, 1092, 1094, 1095
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yytype_int16 yyrhs[] =
-{
- 384, 0, -1, 224, -1, 289, -1, 228, -1, 229,
- -1, 230, -1, 231, -1, 226, -1, 227, -1, 233,
- -1, 232, -1, 255, 317, 256, -1, 290, -1, 291,
- 257, 292, 258, -1, 293, -1, 291, 261, 224, -1,
- 291, 236, -1, 291, 237, -1, 317, -1, 294, -1,
- 295, -1, 297, 256, -1, 296, 256, -1, 298, 222,
- -1, 298, -1, 298, 315, -1, 297, 262, 315, -1,
- 299, 255, -1, 343, -1, 291, -1, 291, -1, 236,
- 300, -1, 237, 300, -1, 301, 300, -1, 269, -1,
- 267, -1, 266, -1, 268, -1, 300, -1, 302, 270,
- 300, -1, 302, 271, 300, -1, 302, 272, 300, -1,
- 302, -1, 303, 269, 302, -1, 303, 267, 302, -1,
- 303, -1, 304, 234, 303, -1, 304, 235, 303, -1,
- 304, -1, 305, 273, 304, -1, 305, 274, 304, -1,
- 305, 238, 304, -1, 305, 239, 304, -1, 305, -1,
- 306, 240, 305, -1, 306, 241, 305, -1, 306, -1,
- 307, 277, 306, -1, 307, -1, 308, 276, 307, -1,
- 308, -1, 309, 275, 308, -1, 309, -1, 310, 242,
- 309, -1, 310, -1, 311, 244, 310, -1, 311, -1,
- 312, 243, 311, -1, 312, -1, -1, 312, 278, 314,
- 317, 263, 315, -1, 313, -1, 300, 316, 315, -1,
- 264, -1, 245, -1, 246, -1, 248, -1, 247, -1,
- 254, -1, 249, -1, 250, -1, 251, -1, 252, -1,
- 253, -1, 315, -1, 317, 262, 315, -1, 313, -1,
- 323, 265, -1, 330, 265, -1, 284, 346, 343, 265,
- -1, 320, 265, -1, 320, 224, 265, -1, 320, 224,
- 344, 265, -1, 339, 265, -1, 339, 224, 265, -1,
- 339, 224, 322, 265, -1, -1, 339, 224, 259, 321,
- 350, 260, -1, 262, 224, -1, 322, 262, 224, -1,
- 324, 256, -1, 326, -1, 325, -1, 326, 328, -1,
- 325, 262, 328, -1, 332, 224, 255, -1, 343, 224,
- -1, 343, 224, 344, -1, 339, 327, -1, 327, -1,
- 339, 329, -1, 329, -1, 343, -1, 331, -1, 330,
- 262, 224, -1, 330, 262, 224, 344, -1, 330, 262,
- 224, 344, 264, 354, -1, 330, 262, 224, 264, 354,
- -1, 332, -1, 332, 224, -1, 332, 224, 344, -1,
- 332, 224, 344, 264, 354, -1, 332, 224, 264, 354,
- -1, 343, -1, 339, 343, -1, 279, -1, 75, -1,
- 74, -1, 73, -1, 77, -1, 76, 255, 336, 256,
- -1, 337, -1, 336, 262, 337, -1, 224, -1, 224,
- 264, 318, -1, 55, -1, 280, -1, 340, -1, 339,
- 340, -1, 341, -1, 335, -1, 346, -1, 334, -1,
- 333, -1, 338, -1, 5, -1, 3, -1, 4, -1,
- 50, -1, 48, -1, 49, -1, 47, -1, 52, -1,
- 53, -1, 51, -1, 54, -1, 55, -1, 56, -1,
- 57, -1, 58, -1, 59, -1, 60, -1, 25, -1,
- 25, 255, 342, 256, -1, 225, -1, 342, 262, 225,
- -1, 345, -1, 345, 344, -1, 257, 258, -1, 257,
- 313, 258, -1, 344, 257, 258, -1, 344, 257, 313,
- 258, -1, 222, -1, 7, -1, 8, -1, 13, -1,
- 9, -1, 10, -1, 11, -1, 12, -1, 6, -1,
- 41, -1, 42, -1, 43, -1, 61, -1, 62, -1,
- 63, -1, 67, -1, 68, -1, 69, -1, 26, -1,
- 27, -1, 28, -1, 29, -1, 30, -1, 31, -1,
- 32, -1, 33, -1, 34, -1, 35, -1, 36, -1,
- 37, -1, 38, -1, 39, -1, 40, -1, 44, -1,
- 45, -1, 46, -1, 78, -1, 79, -1, 80, -1,
- 81, -1, 82, -1, 83, -1, 84, -1, 85, -1,
- 86, -1, 64, -1, 65, -1, 66, -1, 87, -1,
- 88, -1, 89, -1, 90, -1, 91, -1, 92, -1,
- 93, -1, 94, -1, 95, -1, 70, -1, 71, -1,
- 72, -1, 96, -1, 97, -1, 98, -1, 99, -1,
- 100, -1, 101, -1, 102, -1, 103, -1, 104, -1,
- 105, -1, 106, -1, 107, -1, 108, -1, 109, -1,
- 110, -1, 111, -1, 112, -1, 113, -1, 114, -1,
- 115, -1, 116, -1, 136, -1, 137, -1, 117, -1,
- 118, -1, 119, -1, 120, -1, 121, -1, 122, -1,
- 138, -1, 123, -1, 124, -1, 125, -1, 126, -1,
- 127, -1, 128, -1, 139, -1, 129, -1, 130, -1,
- 131, -1, 132, -1, 133, -1, 134, -1, 135, -1,
- 140, -1, 141, -1, 142, -1, 143, -1, 144, -1,
- 145, -1, 147, -1, 148, -1, 149, -1, 150, -1,
- 151, -1, 152, -1, 153, -1, 154, -1, 173, -1,
- 155, -1, 156, -1, 157, -1, 158, -1, 159, -1,
- 160, -1, 174, -1, 161, -1, 162, -1, 163, -1,
- 164, -1, 165, -1, 166, -1, 175, -1, 167, -1,
- 168, -1, 169, -1, 170, -1, 171, -1, 172, -1,
- 176, -1, 177, -1, 178, -1, 179, -1, 180, -1,
- 181, -1, 188, -1, 189, -1, 190, -1, 191, -1,
- 192, -1, 193, -1, 194, -1, 195, -1, 196, -1,
- 197, -1, 198, -1, 199, -1, 200, -1, 201, -1,
- 202, -1, 203, -1, 204, -1, 205, -1, 206, -1,
- 207, -1, 208, -1, 209, -1, 210, -1, 211, -1,
- 212, -1, 213, -1, 214, -1, 215, -1, 216, -1,
- 217, -1, 218, -1, 219, -1, 220, -1, 146, -1,
- 182, -1, 183, -1, 184, -1, 185, -1, 186, -1,
- 187, -1, 347, -1, 225, -1, 281, -1, 282, -1,
- 283, -1, -1, 221, 224, 259, 348, 350, 260, -1,
- -1, 221, 259, 349, 350, 260, -1, 351, -1, 350,
- 351, -1, 343, 352, 265, -1, 339, 343, 352, 265,
- -1, 353, -1, 352, 262, 353, -1, 224, -1, 224,
- 344, -1, 315, -1, 259, 355, 260, -1, 259, 355,
- 262, 260, -1, 354, -1, 355, 262, 354, -1, 319,
- -1, 359, -1, 358, -1, 356, -1, 368, -1, 369,
- -1, 372, -1, 375, -1, 376, -1, 383, -1, 259,
- 260, -1, -1, -1, 259, 360, 367, 361, 260, -1,
- 366, -1, 358, -1, -1, 364, 359, -1, -1, 365,
- 358, -1, 259, 260, -1, 259, 367, 260, -1, 357,
- -1, 367, 357, -1, 265, -1, 317, 265, -1, 19,
- 255, 317, 256, 370, -1, 363, 17, 363, -1, 363,
- -1, 317, -1, 332, 224, 264, 354, -1, -1, 22,
- 255, 317, 256, 373, 259, 374, 260, -1, -1, 367,
- -1, 23, 317, 263, -1, 24, 263, -1, -1, 223,
- 255, 377, 371, 256, 362, -1, -1, 16, 378, 357,
- 223, 255, 317, 256, 265, -1, -1, 18, 255, 379,
- 380, 382, 256, 362, -1, 368, -1, 356, -1, 371,
- -1, -1, 381, 265, -1, 381, 265, 317, -1, 15,
- 265, -1, 14, 265, -1, 21, 265, -1, 21, 317,
- 265, -1, 20, 265, -1, 385, -1, 384, 385, -1,
- 386, -1, 319, -1, -1, 323, 387, 366, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 250, 250, 256, 259, 262, 266, 270, 274, 277,
- 281, 287, 290, 298, 301, 304, 307, 310, 315, 323,
- 330, 337, 343, 347, 354, 357, 363, 370, 380, 388,
- 393, 423, 429, 433, 437, 457, 458, 459, 460, 466,
- 467, 472, 477, 486, 487, 492, 500, 501, 507, 516,
- 517, 522, 527, 532, 540, 541, 549, 560, 561, 570,
- 571, 580, 581, 590, 591, 599, 600, 608, 609, 617,
- 618, 618, 636, 637, 652, 656, 660, 664, 669, 673,
- 677, 681, 685, 689, 693, 700, 703, 714, 721, 726,
- 731, 739, 743, 747, 751, 756, 761, 770, 770, 781,
- 785, 792, 799, 802, 809, 817, 837, 855, 870, 893,
- 904, 914, 924, 934, 943, 946, 950, 954, 959, 967,
- 972, 977, 982, 987, 996, 1007, 1034, 1043, 1050, 1057,
- 1064, 1076, 1082, 1085, 1092, 1096, 1100, 1108, 1117, 1120,
- 1131, 1134, 1137, 1141, 1145, 1149, 1156, 1160, 1172, 1186,
- 1191, 1197, 1203, 1210, 1216, 1221, 1226, 1231, 1238, 1242,
- 1246, 1250, 1254, 1258, 1264, 1276, 1279, 1284, 1288, 1297,
- 1302, 1310, 1314, 1324, 1328, 1332, 1337, 1344, 1348, 1353,
- 1358, 1363, 1367, 1372, 1377, 1382, 1388, 1394, 1400, 1408,
- 1416, 1424, 1429, 1434, 1439, 1444, 1449, 1454, 1460, 1466,
- 1472, 1478, 1484, 1490, 1496, 1502, 1508, 1513, 1518, 1523,
- 1528, 1533, 1538, 1543, 1548, 1553, 1558, 1563, 1568, 1574,
- 1580, 1586, 1592, 1598, 1604, 1610, 1616, 1622, 1628, 1634,
- 1640, 1648, 1656, 1664, 1672, 1680, 1688, 1696, 1704, 1712,
- 1720, 1728, 1736, 1741, 1746, 1751, 1756, 1761, 1766, 1771,
- 1776, 1781, 1786, 1791, 1796, 1801, 1806, 1811, 1816, 1821,
- 1826, 1831, 1836, 1841, 1846, 1851, 1856, 1861, 1866, 1871,
- 1876, 1881, 1886, 1891, 1896, 1901, 1906, 1911, 1916, 1921,
- 1926, 1931, 1936, 1941, 1946, 1951, 1956, 1961, 1966, 1971,
- 1976, 1981, 1986, 1991, 1996, 2001, 2006, 2011, 2016, 2021,
- 2026, 2031, 2036, 2041, 2046, 2051, 2056, 2061, 2066, 2071,
- 2076, 2081, 2086, 2091, 2096, 2101, 2106, 2111, 2116, 2121,
- 2126, 2131, 2136, 2141, 2146, 2151, 2156, 2161, 2166, 2171,
- 2176, 2181, 2186, 2191, 2196, 2201, 2206, 2211, 2216, 2221,
- 2226, 2231, 2236, 2241, 2246, 2251, 2256, 2261, 2266, 2271,
- 2276, 2281, 2287, 2293, 2299, 2305, 2311, 2317, 2323, 2328,
- 2344, 2349, 2354, 2362, 2362, 2373, 2373, 2383, 2386, 2399,
- 2417, 2441, 2445, 2451, 2456, 2467, 2470, 2476, 2485, 2488,
- 2494, 2498, 2499, 2505, 2506, 2507, 2508, 2509, 2510, 2511,
- 2515, 2516, 2520, 2516, 2532, 2533, 2537, 2537, 2544, 2544,
- 2558, 2561, 2569, 2577, 2588, 2589, 2593, 2600, 2604, 2612,
- 2616, 2629, 2629, 2649, 2652, 2658, 2670, 2682, 2682, 2697,
- 2697, 2713, 2713, 2734, 2737, 2743, 2746, 2752, 2756, 2763,
- 2768, 2773, 2780, 2783, 2792, 2796, 2803, 2806, 2812, 2812
+ 0, 253, 253, 259, 262, 265, 269, 273, 277, 283,
+ 289, 292, 296, 302, 305, 313, 316, 319, 322, 325,
+ 330, 338, 345, 352, 358, 362, 369, 372, 378, 385,
+ 395, 403, 408, 438, 444, 448, 452, 472, 473, 474,
+ 475, 481, 482, 487, 492, 501, 502, 507, 515, 516,
+ 522, 531, 532, 537, 542, 547, 555, 556, 564, 575,
+ 576, 585, 586, 595, 596, 605, 606, 614, 615, 623,
+ 624, 632, 633, 633, 651, 652, 667, 671, 675, 679,
+ 684, 688, 692, 696, 700, 704, 708, 715, 718, 729,
+ 736, 741, 746, 754, 758, 762, 766, 771, 776, 785,
+ 785, 796, 800, 807, 814, 817, 824, 832, 852, 875,
+ 890, 913, 924, 934, 944, 954, 963, 966, 970, 974,
+ 979, 987, 992, 997, 1002, 1007, 1016, 1027, 1054, 1063,
+ 1070, 1077, 1084, 1096, 1102, 1105, 1112, 1116, 1120, 1128,
+ 1137, 1140, 1151, 1154, 1157, 1161, 1165, 1169, 1176, 1180,
+ 1192, 1206, 1211, 1217, 1223, 1230, 1236, 1241, 1246, 1251,
+ 1259, 1263, 1267, 1271, 1275, 1279, 1285, 1294, 1297, 1305,
+ 1309, 1318, 1323, 1331, 1335, 1345, 1349, 1353, 1358, 1365,
+ 1369, 1374, 1379, 1384, 1391, 1398, 1402, 1407, 1412, 1417,
+ 1423, 1429, 1435, 1443, 1451, 1459, 1464, 1469, 1474, 1479,
+ 1484, 1489, 1495, 1501, 1507, 1515, 1523, 1531, 1537, 1543,
+ 1549, 1555, 1561, 1567, 1575, 1583, 1591, 1596, 1601, 1606,
+ 1611, 1616, 1621, 1626, 1631, 1636, 1641, 1646, 1651, 1657,
+ 1663, 1669, 1675, 1681, 1687, 1693, 1699, 1705, 1711, 1717,
+ 1723, 1731, 1739, 1747, 1755, 1763, 1771, 1779, 1787, 1795,
+ 1803, 1811, 1819, 1824, 1829, 1834, 1839, 1844, 1849, 1854,
+ 1859, 1864, 1869, 1874, 1879, 1884, 1889, 1894, 1899, 1904,
+ 1909, 1914, 1919, 1924, 1929, 1934, 1939, 1944, 1949, 1954,
+ 1959, 1964, 1969, 1974, 1979, 1984, 1989, 1994, 1999, 2004,
+ 2009, 2014, 2019, 2024, 2029, 2034, 2039, 2044, 2049, 2054,
+ 2059, 2064, 2069, 2074, 2079, 2084, 2089, 2094, 2099, 2104,
+ 2109, 2114, 2119, 2124, 2129, 2134, 2139, 2144, 2149, 2154,
+ 2159, 2164, 2169, 2174, 2179, 2184, 2189, 2194, 2199, 2204,
+ 2209, 2214, 2219, 2224, 2229, 2234, 2239, 2244, 2249, 2254,
+ 2259, 2264, 2269, 2274, 2279, 2284, 2289, 2294, 2299, 2304,
+ 2309, 2314, 2319, 2324, 2329, 2334, 2339, 2344, 2349, 2354,
+ 2359, 2364, 2370, 2376, 2382, 2388, 2394, 2400, 2406, 2411,
+ 2427, 2432, 2437, 2445, 2445, 2456, 2456, 2466, 2469, 2482,
+ 2500, 2524, 2528, 2534, 2539, 2550, 2553, 2559, 2568, 2571,
+ 2577, 2581, 2582, 2588, 2589, 2590, 2591, 2592, 2593, 2594,
+ 2598, 2599, 2603, 2599, 2615, 2616, 2620, 2620, 2627, 2627,
+ 2641, 2644, 2652, 2660, 2671, 2672, 2676, 2683, 2687, 2695,
+ 2699, 2712, 2712, 2732, 2735, 2741, 2753, 2765, 2765, 2780,
+ 2780, 2796, 2796, 2817, 2820, 2826, 2829, 2835, 2839, 2846,
+ 2851, 2856, 2863, 2866, 2875, 2879, 2888, 2891, 2894, 2902,
+ 2902
};
#endif
-#if YYDEBUG || YYERROR_VERBOSE || 0
+#if YYDEBUG || YYERROR_VERBOSE || 1
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
"$end", "error", "$undefined", "ATTRIBUTE", "VARYING", "CONST", "BOOL",
- "FLOAT", "DOUBLE", "INT", "UINT", "INT64_T", "UINT64_T", "FLOAT16_T",
- "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN",
- "SWITCH", "CASE", "DEFAULT", "SUBROUTINE", "BVEC2", "BVEC3", "BVEC4",
- "IVEC2", "IVEC3", "IVEC4", "I64VEC2", "I64VEC3", "I64VEC4", "UVEC2",
- "UVEC3", "UVEC4", "U64VEC2", "U64VEC3", "U64VEC4", "VEC2", "VEC3",
- "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID", "IN", "OUT", "INOUT",
- "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED", "COHERENT", "VOLATILE",
- "RESTRICT", "READONLY", "WRITEONLY", "DVEC2", "DVEC3", "DVEC4", "DMAT2",
- "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3",
- "F16MAT4", "NOPERSPECTIVE", "FLAT", "SMOOTH", "LAYOUT",
- "__EXPLICITINTERPAMD", "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3",
- "MAT3X4", "MAT4X2", "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3", "DMAT2X4",
- "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4",
- "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2", "F16MAT3X3",
- "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4", "ATOMIC_UINT",
- "SAMPLER1D", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER1DSHADOW",
- "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER1DARRAY",
- "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW", "SAMPLER2DARRAYSHADOW",
- "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE",
- "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D", "USAMPLER2D",
- "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY", "USAMPLER2DARRAY",
- "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT",
- "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER",
- "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
- "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
- "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
- "SAMPLEREXTERNALOES", "SAMPLER", "SAMPLERSHADOW", "TEXTURE1D",
- "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", "TEXTURE1DARRAY",
+ "FLOAT", "DOUBLE", "INT", "UINT", "INT64_T", "UINT64_T", "INT16_T",
+ "UINT16_T", "FLOAT16_T", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF",
+ "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "SUBROUTINE", "BVEC2",
+ "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "I64VEC2", "I64VEC3",
+ "I64VEC4", "UVEC2", "UVEC3", "UVEC4", "U64VEC2", "U64VEC3", "U64VEC4",
+ "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID", "IN", "OUT",
+ "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED", "COHERENT",
+ "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "DVEC2", "DVEC3",
+ "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4",
+ "F16MAT2", "F16MAT3", "F16MAT4", "I16VEC2", "I16VEC3", "I16VEC4",
+ "U16VEC2", "U16VEC3", "U16VEC4", "NOPERSPECTIVE", "FLAT", "SMOOTH",
+ "LAYOUT", "__EXPLICITINTERPAMD", "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2",
+ "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3",
+ "DMAT2X4", "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3",
+ "DMAT4X4", "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2",
+ "F16MAT3X3", "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4",
+ "ATOMIC_UINT", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE",
+ "SAMPLER1DSHADOW", "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW",
+ "SAMPLER1DARRAY", "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW",
+ "SAMPLER2DARRAYSHADOW", "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D",
+ "ISAMPLERCUBE", "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D",
+ "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY",
+ "USAMPLER2DARRAY", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
+ "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
+ "USAMPLERBUFFER", "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW",
+ "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS",
+ "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY",
+ "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "SAMPLER", "SAMPLERSHADOW",
+ "TEXTURE1D", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", "TEXTURE1DARRAY",
"TEXTURE2DARRAY", "ITEXTURE1D", "ITEXTURE2D", "ITEXTURE3D",
"ITEXTURECUBE", "ITEXTURE1DARRAY", "ITEXTURE2DARRAY", "UTEXTURE1D",
"UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE", "UTEXTURE1DARRAY",
@@ -1063,20 +898,20 @@ static const char *const yytname[] =
"UIMAGE2DMS", "IMAGE2DMSARRAY", "IIMAGE2DMSARRAY", "UIMAGE2DMSARRAY",
"STRUCT", "VOID", "WHILE", "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT",
"DOUBLECONSTANT", "INTCONSTANT", "UINTCONSTANT", "INT64CONSTANT",
- "UINT64CONSTANT", "BOOLCONSTANT", "FLOAT16CONSTANT", "LEFT_OP",
- "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP",
- "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN",
- "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN",
- "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
- "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON",
- "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH",
- "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET",
- "AMPERSAND", "QUESTION", "INVARIANT", "PRECISE", "HIGH_PRECISION",
- "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE",
- "SUPERP", "$accept", "variable_identifier", "primary_expression",
- "postfix_expression", "integer_expression", "function_call",
- "function_call_or_method", "function_call_generic",
- "function_call_header_no_parameters",
+ "UINT64CONSTANT", "INT16CONSTANT", "UINT16CONSTANT", "BOOLCONSTANT",
+ "FLOAT16CONSTANT", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
+ "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
+ "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
+ "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN",
+ "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE",
+ "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG",
+ "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT", "LEFT_ANGLE",
+ "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND", "QUESTION",
+ "INVARIANT", "PRECISE", "HIGH_PRECISION", "MEDIUM_PRECISION",
+ "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP", "$accept",
+ "variable_identifier", "primary_expression", "postfix_expression",
+ "integer_expression", "function_call", "function_call_or_method",
+ "function_call_generic", "function_call_header_no_parameters",
"function_call_header_with_parameters", "function_call_header",
"function_identifier", "unary_expression", "unary_operator",
"multiplicative_expression", "additive_expression", "shift_expression",
@@ -1111,8 +946,8 @@ static const char *const yytname[] =
#endif
# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
- token YYLEX-NUM. */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+ (internal) symbol number NUM (which must be that of a token). */
static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
@@ -1143,585 +978,306 @@ static const yytype_uint16 yytoknum[] =
505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
- 535, 536, 537, 538, 539, 540, 541, 542
+ 535, 536, 537, 538, 539, 540, 541, 542, 543, 544,
+ 545, 546, 547, 548, 549, 550, 551, 552
};
# endif
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint16 yyr1[] =
-{
- 0, 288, 289, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 290, 291, 291, 291, 291, 291, 291, 292,
- 293, 294, 295, 295, 296, 296, 297, 297, 298, 299,
- 299, 300, 300, 300, 300, 301, 301, 301, 301, 302,
- 302, 302, 302, 303, 303, 303, 304, 304, 304, 305,
- 305, 305, 305, 305, 306, 306, 306, 307, 307, 308,
- 308, 309, 309, 310, 310, 311, 311, 312, 312, 313,
- 314, 313, 315, 315, 316, 316, 316, 316, 316, 316,
- 316, 316, 316, 316, 316, 317, 317, 318, 319, 319,
- 319, 319, 319, 319, 319, 319, 319, 321, 320, 322,
- 322, 323, 324, 324, 325, 325, 326, 327, 327, 328,
- 328, 328, 328, 329, 330, 330, 330, 330, 330, 331,
- 331, 331, 331, 331, 332, 332, 333, 334, 334, 334,
- 334, 335, 336, 336, 337, 337, 337, 338, 339, 339,
- 340, 340, 340, 340, 340, 340, 341, 341, 341, 341,
- 341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
- 341, 341, 341, 341, 341, 342, 342, 343, 343, 344,
- 344, 344, 344, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
- 346, 346, 346, 348, 347, 349, 347, 350, 350, 351,
- 351, 352, 352, 353, 353, 354, 354, 354, 355, 355,
- 356, 357, 357, 358, 358, 358, 358, 358, 358, 358,
- 359, 360, 361, 359, 362, 362, 364, 363, 365, 363,
- 366, 366, 367, 367, 368, 368, 369, 370, 370, 371,
- 371, 373, 372, 374, 374, 375, 375, 377, 376, 378,
- 376, 379, 376, 380, 380, 381, 381, 382, 382, 383,
- 383, 383, 383, 383, 384, 384, 385, 385, 387, 386
-};
+#define YYPACT_NINF -525
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-525)))
+
+#define YYTABLE_NINF -407
+
+#define yytable_value_is_error(Yytable_value) \
+ 0
+
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+static const yytype_int16 yypact[] =
{
- 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 3, 1, 4, 1, 3, 2, 2, 1,
- 1, 1, 2, 2, 2, 1, 2, 3, 2, 1,
- 1, 1, 2, 2, 2, 1, 1, 1, 1, 1,
- 3, 3, 3, 1, 3, 3, 1, 3, 3, 1,
- 3, 3, 3, 3, 1, 3, 3, 1, 3, 1,
- 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
- 0, 6, 1, 3, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 3, 1, 2, 2,
- 4, 2, 3, 4, 2, 3, 4, 0, 6, 2,
- 3, 2, 1, 1, 2, 3, 3, 2, 3, 2,
- 1, 2, 1, 1, 1, 3, 4, 6, 5, 1,
- 2, 3, 5, 4, 1, 2, 1, 1, 1, 1,
- 1, 4, 1, 3, 1, 3, 1, 1, 1, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 4, 1, 3, 1, 2, 2,
- 3, 3, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 0, 6, 0, 5, 1, 2, 3,
- 4, 1, 3, 1, 2, 1, 3, 4, 1, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 0, 0, 5, 1, 1, 0, 2, 0, 2,
- 2, 3, 1, 2, 1, 2, 5, 3, 1, 1,
- 4, 0, 8, 0, 1, 3, 2, 0, 6, 0,
- 8, 0, 7, 1, 1, 1, 0, 2, 3, 2,
- 2, 2, 3, 2, 1, 2, 1, 1, 0, 3
+ 2619, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -243, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -228, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -215, -525, -525, -525,
+ -525, -525, -525, -525, -525, -157, -525, -216, -218, -205,
+ -141, 4260, -165, -525, -94, -525, -525, -525, -525, 3183,
+ -525, -525, -525, -117, -525, -525, 575, -525, -525, -80,
+ -48, -114, -525, 6381, -242, -525, -525, -113, -525, 4260,
+ -525, -525, -525, 4260, -75, -74, -525, -235, -190, -525,
+ -525, -525, 4765, -108, -525, -525, -525, -186, -525, -112,
+ -178, -525, -525, 4260, -115, -525, -226, 867, -525, -525,
+ -525, -525, -117, -229, -525, 5039, -224, -525, -71, -525,
+ -158, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, 5861, 5861, 5861, -525, -525, -525, -525, -525,
+ -525, -525, -223, -525, -525, -525, -102, -177, 6121, -100,
+ -525, 5861, -204, -171, -132, -221, -199, -124, -120, -111,
+ -84, -83, -233, -98, -525, 5313, -525, -60, 5861, -525,
+ -48, 4260, 4260, -59, 3456, -525, -525, -525, -99, -97,
+ -525, -90, -88, -96, 5587, -85, 5861, -92, -79, -81,
+ -525, -525, -191, -525, -525, -153, -525, -218, -78, -525,
+ -525, -525, -525, 1159, -525, -525, -525, -525, -525, -525,
+ -108, 5039, -193, 5039, -525, -525, 5039, 4260, -525, -47,
+ -525, -525, -525, -176, -525, -525, 5861, -42, -525, -525,
+ 5861, -73, -525, -525, -525, 5861, 5861, 5861, 5861, 5861,
+ 5861, 5861, 5861, 5861, 5861, 5861, 5861, 5861, 5861, 5861,
+ 5861, 5861, 5861, 5861, -525, -525, -525, -76, -525, -525,
+ -525, -525, 3724, -59, -117, -152, -525, -525, -525, -525,
+ -525, 1451, -525, 5861, -525, -525, -143, 5861, -180, -525,
+ -525, -525, 1451, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, 5861, 5861, -525, -525, -525, -525,
+ 5039, -525, -133, -525, 3992, -525, -525, -72, -77, -525,
+ -525, -525, -525, -525, -204, -204, -171, -171, -132, -132,
+ -132, -132, -221, -221, -199, -124, -120, -111, -84, -83,
+ 5861, -525, -525, -142, -108, -59, -525, -37, 2327, -175,
+ -525, -163, -525, 2892, 1451, -525, -525, -525, -525, 4491,
+ -525, -525, -129, -525, -525, -68, -525, -525, 2892, -70,
+ -525, -77, -32, 4260, -63, -66, -525, -525, 5861, 5861,
+ -525, -69, -61, 188, -58, 2035, -525, -56, -57, 1743,
+ -525, -525, -161, 5861, 1743, -70, -525, -525, 1451, 5039,
+ -525, -525, -525, -67, -77, -525, -525, 1451, -54, -525,
+ -525, -525
};
-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
- Performed when YYTABLE doesn't specify something else to do. Zero
- means the default is an error. */
+ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE does not specify something else to do. Zero
+ means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 0, 147, 148, 146, 181, 174, 175, 177, 178, 179,
- 180, 176, 163, 191, 192, 193, 194, 195, 196, 197,
- 198, 199, 200, 201, 202, 203, 204, 205, 182, 183,
- 184, 206, 207, 208, 152, 150, 151, 149, 155, 153,
- 154, 156, 157, 158, 159, 160, 161, 162, 185, 186,
- 187, 218, 219, 220, 188, 189, 190, 230, 231, 232,
- 129, 128, 127, 0, 130, 209, 210, 211, 212, 213,
- 214, 215, 216, 217, 221, 222, 223, 224, 225, 226,
- 227, 228, 229, 233, 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
- 250, 251, 252, 253, 256, 257, 258, 259, 260, 261,
- 263, 264, 265, 266, 267, 268, 270, 271, 272, 273,
- 274, 275, 276, 254, 255, 262, 269, 277, 278, 279,
- 280, 281, 282, 351, 283, 284, 285, 286, 287, 288,
- 289, 290, 292, 293, 294, 295, 296, 297, 299, 300,
- 301, 302, 303, 304, 306, 307, 308, 309, 310, 311,
- 291, 298, 305, 312, 313, 314, 315, 316, 317, 352,
- 353, 354, 355, 356, 357, 318, 319, 320, 321, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
- 333, 334, 335, 336, 337, 338, 339, 340, 341, 342,
- 343, 344, 345, 346, 347, 348, 349, 350, 0, 173,
- 359, 126, 137, 360, 361, 362, 0, 437, 0, 438,
- 0, 103, 102, 0, 114, 119, 144, 143, 141, 145,
- 0, 138, 140, 124, 167, 142, 358, 0, 434, 436,
- 0, 0, 0, 365, 0, 0, 91, 88, 0, 101,
- 0, 110, 104, 112, 0, 113, 0, 89, 120, 0,
- 94, 139, 125, 0, 168, 1, 435, 165, 0, 136,
- 134, 0, 132, 363, 0, 0, 92, 0, 0, 439,
- 105, 109, 111, 107, 115, 106, 0, 121, 97, 0,
- 95, 0, 2, 8, 9, 4, 5, 6, 7, 11,
- 10, 0, 0, 0, 169, 37, 36, 38, 35, 3,
- 13, 31, 15, 20, 21, 0, 0, 25, 0, 39,
- 0, 43, 46, 49, 54, 57, 59, 61, 63, 65,
- 67, 69, 0, 29, 0, 164, 0, 0, 131, 0,
- 0, 0, 0, 0, 367, 90, 93, 0, 0, 419,
- 0, 0, 0, 0, 0, 0, 0, 0, 391, 400,
- 404, 39, 72, 85, 0, 380, 0, 124, 383, 402,
- 382, 381, 0, 384, 385, 386, 387, 388, 389, 108,
- 0, 116, 0, 375, 123, 0, 0, 99, 0, 96,
- 32, 33, 0, 17, 18, 0, 0, 23, 22, 0,
- 173, 26, 28, 34, 0, 0, 0, 0, 0, 0,
+ 0, 149, 150, 148, 185, 176, 177, 179, 180, 181,
+ 182, 183, 184, 178, 165, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 207, 208, 209, 210, 211, 212,
+ 186, 187, 188, 216, 217, 218, 154, 152, 153, 151,
+ 157, 155, 156, 158, 159, 160, 161, 162, 163, 164,
+ 189, 190, 191, 228, 229, 230, 192, 193, 194, 240,
+ 241, 242, 204, 205, 206, 213, 214, 215, 131, 130,
+ 129, 0, 132, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 231, 232, 233, 234, 235, 236, 237, 238,
+ 239, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 266, 267, 268, 269, 270, 271, 273, 274,
+ 275, 276, 277, 278, 280, 281, 282, 283, 284, 285,
+ 286, 264, 265, 272, 279, 287, 288, 289, 290, 291,
+ 292, 361, 293, 294, 295, 296, 297, 298, 299, 300,
+ 302, 303, 304, 305, 306, 307, 309, 310, 311, 312,
+ 313, 314, 316, 317, 318, 319, 320, 321, 301, 308,
+ 315, 322, 323, 324, 325, 326, 327, 362, 363, 364,
+ 365, 366, 367, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
+ 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
+ 355, 356, 357, 358, 359, 360, 0, 175, 369, 448,
+ 128, 139, 370, 371, 372, 0, 447, 0, 449, 0,
+ 105, 104, 0, 116, 121, 146, 145, 143, 147, 0,
+ 140, 142, 126, 169, 144, 368, 0, 444, 446, 0,
+ 0, 0, 375, 0, 0, 93, 90, 0, 103, 0,
+ 112, 106, 114, 0, 115, 0, 91, 122, 0, 96,
+ 141, 127, 0, 170, 1, 445, 167, 0, 138, 136,
+ 0, 134, 373, 0, 0, 94, 0, 0, 450, 107,
+ 111, 113, 109, 117, 108, 0, 123, 99, 0, 97,
+ 0, 2, 10, 11, 4, 5, 6, 7, 8, 9,
+ 13, 12, 0, 0, 0, 171, 39, 38, 40, 37,
+ 3, 15, 33, 17, 22, 23, 0, 0, 27, 0,
+ 41, 0, 45, 48, 51, 56, 59, 61, 63, 65,
+ 67, 69, 71, 0, 31, 0, 166, 0, 0, 133,
+ 0, 0, 0, 0, 0, 377, 92, 95, 0, 0,
+ 429, 0, 0, 0, 0, 0, 0, 0, 0, 401,
+ 410, 414, 41, 74, 87, 0, 390, 0, 126, 393,
+ 412, 392, 391, 0, 394, 395, 396, 397, 398, 399,
+ 110, 0, 118, 0, 385, 125, 0, 0, 101, 0,
+ 98, 34, 35, 0, 19, 20, 0, 0, 25, 24,
+ 0, 175, 28, 30, 36, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 70, 170, 171, 0, 166, 87, 135,
- 133, 0, 0, 373, 0, 371, 366, 368, 430, 429,
- 0, 421, 0, 433, 431, 0, 0, 0, 416, 417,
- 390, 0, 75, 76, 78, 77, 80, 81, 82, 83,
- 84, 79, 74, 0, 0, 405, 401, 403, 118, 0,
- 378, 0, 122, 0, 100, 12, 0, 19, 16, 27,
- 40, 41, 42, 45, 44, 47, 48, 52, 53, 50,
- 51, 55, 56, 58, 60, 62, 64, 66, 68, 0,
- 172, 364, 0, 374, 0, 369, 0, 0, 0, 432,
- 0, 415, 0, 392, 73, 86, 117, 376, 0, 98,
- 14, 0, 370, 372, 0, 424, 423, 426, 398, 411,
- 409, 0, 0, 0, 0, 377, 379, 0, 0, 425,
- 0, 0, 408, 0, 0, 406, 0, 0, 0, 393,
- 71, 0, 427, 0, 398, 397, 399, 413, 0, 395,
- 418, 394, 0, 428, 422, 407, 414, 0, 410, 420,
- 412
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int16 yydefgoto[] =
-{
- -1, 309, 310, 311, 476, 312, 313, 314, 315, 316,
- 317, 318, 361, 320, 321, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 362, 499, 363, 463, 364,
- 429, 365, 218, 386, 291, 366, 220, 221, 222, 251,
- 252, 253, 223, 224, 225, 226, 227, 228, 271, 272,
- 229, 230, 231, 232, 268, 333, 264, 234, 235, 236,
- 340, 274, 343, 344, 434, 435, 384, 471, 368, 369,
- 370, 371, 451, 534, 560, 542, 543, 544, 561, 372,
- 373, 374, 545, 533, 375, 546, 567, 376, 377, 512,
- 440, 507, 527, 540, 541, 378, 237, 238, 239, 248
+ 0, 0, 0, 0, 72, 172, 173, 0, 168, 89,
+ 137, 135, 0, 0, 383, 0, 381, 376, 378, 440,
+ 439, 0, 431, 0, 443, 441, 0, 0, 0, 426,
+ 427, 400, 0, 77, 78, 80, 79, 82, 83, 84,
+ 85, 86, 81, 76, 0, 0, 415, 411, 413, 120,
+ 0, 388, 0, 124, 0, 102, 14, 0, 21, 18,
+ 29, 42, 43, 44, 47, 46, 49, 50, 54, 55,
+ 52, 53, 57, 58, 60, 62, 64, 66, 68, 70,
+ 0, 174, 374, 0, 384, 0, 379, 0, 0, 0,
+ 442, 0, 425, 0, 402, 75, 88, 119, 386, 0,
+ 100, 16, 0, 380, 382, 0, 434, 433, 436, 408,
+ 421, 419, 0, 0, 0, 0, 387, 389, 0, 0,
+ 435, 0, 0, 418, 0, 0, 416, 0, 0, 0,
+ 403, 73, 0, 437, 0, 408, 407, 409, 423, 0,
+ 405, 428, 404, 0, 438, 432, 417, 424, 0, 420,
+ 430, 422
};
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -512
-static const yytype_int16 yypact[] =
+ /* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
{
- 2538, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -235, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -201, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, -512, -203, -512,
- -512, -512, -512, -512, -512, -512, -153, -512, -210, -220,
- -152, -189, 4119, -160, -512, -128, -512, -512, -512, -512,
- 3079, -512, -512, -512, -122, -512, -512, 564, -512, -512,
- -72, -46, -105, -512, 6148, -216, -512, -512, -102, -512,
- 4119, -512, -512, -512, 4119, -68, -66, -512, -225, -187,
- -512, -512, -512, 4606, -98, -512, -512, -512, -179, -512,
- -104, -172, -512, -512, 4119, -101, -512, -186, 846, -512,
- -512, -512, -512, -122, -233, -512, 4870, -217, -512, -63,
- -512, -151, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, 5648, 5648, 5648, -512, -512, -512, -512, -512, -512,
- -512, -209, -512, -512, -512, -94, -170, 5898, -92, -512,
- 5648, -139, -133, -109, -223, -103, -111, -108, -106, -71,
- -74, -218, -86, -512, 5134, -512, -52, 5648, -512, -46,
- 4119, 4119, -50, 3342, -512, -512, -512, -90, -89, -512,
- -78, -76, -85, 5398, -70, 5648, -80, -69, -64, -512,
- -512, -184, -512, -512, -150, -512, -220, -67, -512, -512,
- -512, -512, 1128, -512, -512, -512, -512, -512, -512, -98,
- 4870, -183, 4870, -512, -512, 4870, 4119, -512, -40, -512,
- -512, -512, -169, -512, -512, 5648, -35, -512, -512, 5648,
- -65, -512, -512, -512, 5648, 5648, 5648, 5648, 5648, 5648,
- 5648, 5648, 5648, 5648, 5648, 5648, 5648, 5648, 5648, 5648,
- 5648, 5648, 5648, -512, -512, -512, -61, -512, -512, -512,
- -512, 3601, -50, -122, -144, -512, -512, -512, -512, -512,
- 1410, -512, 5648, -512, -512, -142, 5648, -123, -512, -512,
- -512, 1410, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, 5648, 5648, -512, -512, -512, -512, 4870,
- -512, -226, -512, 3860, -512, -512, -60, -62, -512, -512,
- -512, -512, -512, -139, -139, -133, -133, -109, -109, -109,
- -109, -223, -223, -103, -111, -108, -106, -71, -74, 5648,
- -512, -512, -138, -98, -50, -512, -33, 2256, -168, -512,
- -167, -512, 2798, 1410, -512, -512, -512, -512, 4342, -512,
- -512, -121, -512, -512, -56, -512, -512, 2798, -58, -512,
- -62, -32, 4119, -49, -51, -512, -512, 5648, 5648, -512,
- -57, -45, 177, -55, 1974, -512, -47, -44, 1692, -512,
- -512, -165, 5648, 1692, -58, -512, -512, 1410, 4870, -512,
- -512, -512, -48, -62, -512, -512, 1410, -42, -512, -512,
- -512
+ -525, -525, -525, -525, -525, -525, -525, -525, -525, -525,
+ -525, -525, -103, -525, -278, -274, -297, -273, -214, -211,
+ -210, -212, -209, -208, -525, -261, -525, -292, -525, -308,
+ -525, 4, -525, -525, -525, 5, -525, -525, -525, -41,
+ -38, -39, -525, -525, -504, -525, -525, -525, -525, -123,
+ -525, -230, -237, -525, -525, 0, -246, -525, 1, -525,
+ -525, -525, -337, -342, -207, -286, -378, -525, -285, -376,
+ -524, -322, -525, -525, -330, -327, -525, -525, -22, -452,
+ -275, -525, -525, -298, -525, -525, -525, -525, -525, -525,
+ -525, -525, -525, -525, -525, -525, -525, -2, -525, -525
};
-/* YYPGOTO[NTERM-NUM]. */
-static const yytype_int16 yypgoto[] =
+ /* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
{
- -512, -512, -512, -512, -512, -512, -512, -512, -512, -512,
- -512, -512, -96, -512, -263, -262, -304, -264, -204, -199,
- -205, -197, -206, -196, -512, -252, -512, -282, -512, -296,
- -512, 3, -512, -512, -512, 6, -512, -512, -512, -29,
- -23, -26, -512, -512, -489, -512, -512, -512, -512, -118,
- -512, -221, -228, -512, -512, 0, -240, -512, 13, -512,
- -512, -512, -328, -330, -200, -271, -363, -512, -273, -364,
- -511, -308, -512, -512, -314, -309, -512, -512, -2, -441,
- -260, -512, -512, -279, -512, -512, -512, -512, -512, -512,
- -512, -512, -512, -512, -512, -512, -512, 12, -512, -512
+ -1, 320, 321, 322, 487, 323, 324, 325, 326, 327,
+ 328, 329, 372, 331, 332, 333, 334, 335, 336, 337,
+ 338, 339, 340, 341, 342, 373, 510, 374, 474, 375,
+ 440, 376, 227, 397, 300, 377, 229, 230, 231, 260,
+ 261, 262, 232, 233, 234, 235, 236, 237, 280, 281,
+ 238, 239, 240, 241, 277, 344, 273, 243, 244, 245,
+ 351, 283, 354, 355, 445, 446, 395, 482, 379, 380,
+ 381, 382, 462, 545, 571, 553, 554, 555, 572, 383,
+ 384, 385, 556, 544, 386, 557, 578, 387, 388, 523,
+ 451, 518, 538, 551, 552, 389, 246, 247, 248, 257
};
-/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule which
- number is the opposite. If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -397
+ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule whose
+ number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 233, 254, 261, 217, 383, 277, 219, 392, 467, 269,
- 513, 332, 431, 437, 245, 411, 412, 468, 287, 470,
- 240, 242, 472, 531, 263, 422, 261, 393, 394, 254,
- 285, 380, 263, 556, 517, 401, 518, 559, 531, 286,
- 334, 263, 559, 379, 381, 247, -30, 385, 395, 276,
- 413, 414, 396, 341, 241, 246, 243, 445, 473, 447,
- 423, 452, 453, 454, 455, 456, 457, 458, 459, 460,
- 461, 334, 288, 250, 334, 289, 506, 335, 290, 346,
- 462, 469, 426, 336, 338, 428, 398, 475, 528, 529,
- 339, 562, 399, 464, 464, 464, 258, 464, 383, 477,
- 383, 437, 256, 383, 249, 257, 516, 487, 488, 489,
- 490, 388, 464, 261, 389, 465, 566, 479, 504, 341,
- 464, 505, 341, 509, 504, 409, 410, 522, 213, 214,
- 215, 404, 405, 406, 407, 263, 408, 415, 416, 464,
- 511, 464, 537, 437, 483, 484, 508, 485, 486, 467,
- 510, 491, 492, 267, 273, 536, 283, 278, 284, 334,
- 337, 387, 397, 402, 345, 341, 417, 319, 418, 419,
- 421, 420, 424, 427, 433, 438, 439, 441, 270, 442,
- 443, 514, 515, 448, 474, 446, 449, 383, -29, 478,
- 524, -24, 547, 503, 554, 568, 450, 500, 520, 538,
- 464, -396, 467, 521, 358, 390, 391, 548, 552, 549,
- 341, 553, 557, 493, 495, 497, 530, 569, 570, 494,
- 558, 430, 255, 496, 403, 281, 498, 280, 282, 244,
- 262, 530, 502, 523, 525, 555, 383, 233, 319, 564,
- 217, 319, 551, 219, 275, 565, 279, 526, 539, 266,
- 255, 0, 341, 0, 255, 550, 563, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 342, 0, 383, 0, 367, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 532, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 261, 0, 532, 0, 480, 481,
- 482, 319, 319, 319, 319, 319, 319, 319, 319, 319,
- 319, 319, 319, 319, 319, 319, 319, 0, 0, 0,
+ 242, 263, 270, 394, 226, 228, 403, 478, 286, 278,
+ 524, 343, 448, 479, 442, 481, 254, 251, 483, 542,
+ 433, 296, 249, 404, 405, 272, 270, 422, 423, 263,
+ 294, 567, 272, 285, 542, 570, 412, 250, 272, 295,
+ 570, 345, -32, 345, 406, 391, 390, 392, 407, 357,
+ 396, 426, 427, 352, 252, 434, 456, 256, 458, 255,
+ 484, 258, 424, 425, 463, 464, 465, 466, 467, 468,
+ 469, 470, 471, 472, 345, 517, 415, 416, 417, 297,
+ 346, 480, 298, 473, 437, 299, 347, 439, 349, 409,
+ 486, 539, 475, 522, 350, 410, 475, 475, 488, 394,
+ 448, 394, 527, 540, 394, 573, 418, 265, 419, 475,
+ 266, 475, 420, 421, 399, 270, 577, 400, 490, 475,
+ 515, 352, 476, 516, 352, 498, 499, 500, 501, 475,
+ 515, 259, 520, 533, 222, 223, 224, 528, 267, 529,
+ 494, 495, 448, 475, 548, 519, 496, 497, 478, 521,
+ 272, 547, 276, 502, 503, 282, 287, 292, 293, 345,
+ 356, 398, 348, 428, 408, 413, 429, 352, 431, 330,
+ 435, 432, 438, 444, 430, 452, 449, 453, 450, 454,
+ 457, 459, 525, 526, 279, 485, 460, -31, 394, 461,
+ 489, 579, 511, -26, 535, 475, 531, 549, 514, -406,
+ 558, 478, 532, 559, 560, 564, 563, 565, 580, 401,
+ 402, 369, 352, 568, 504, 541, 581, 569, 505, 507,
+ 506, 289, 290, 508, 291, 509, 253, 441, 414, 534,
+ 541, 264, 566, 536, 575, 288, 513, 394, 576, 271,
+ 550, 562, 330, 537, 275, 330, 242, 0, 0, 0,
+ 226, 228, 0, 284, 352, 574, 561, 0, 0, 264,
+ 0, 0, 0, 264, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 394, 0, 0,
+ 0, 0, 0, 353, 0, 0, 0, 378, 0, 0,
+ 0, 0, 0, 543, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 270, 0, 543, 0,
+ 0, 0, 491, 492, 493, 330, 330, 330, 330, 330,
+ 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
+ 330, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 342, 432, 0, 342, 0, 0, 0, 0, 0, 0,
+ 0, 353, 443, 0, 353, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 367, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 342, 0, 0, 0,
+ 0, 0, 0, 378, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 353, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 342, 0, 0, 0, 0, 0, 0, 0, 0,
- 367, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 367, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 342, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 367, 0, 0,
- 0, 0, 367, 367, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 367, 0, 0,
- 0, 0, 262, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 367, 0, 0, 0, 367, 0,
- 0, 0, 0, 367, 0, 0, 0, 367, 0, 0,
- 0, 0, 0, 0, 265, 0, 367, 1, 2, 3,
- 4, 5, 6, 7, 8, 9, 10, 11, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
- 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 0, 0, 210,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 211, 212, 213, 214, 215, 216, 1,
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 347, 348, 349, 0, 350, 351, 352, 353, 354, 355,
- 356, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 357,
- 292, 210, 293, 294, 295, 296, 297, 298, 299, 300,
- 0, 0, 301, 302, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 303, 0, 0, 0, 358, 359, 0, 0, 0,
- 0, 360, 305, 306, 307, 308, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 211, 212, 213, 214, 215,
- 216, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 347, 348, 349, 0, 350, 351, 352, 353,
- 354, 355, 356, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 357, 292, 210, 293, 294, 295, 296, 297, 298,
- 299, 300, 0, 0, 301, 302, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 303, 0, 0, 0, 358, 466, 0,
- 0, 0, 0, 360, 305, 306, 307, 308, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 211, 212, 213,
- 214, 215, 216, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 347, 348, 349, 0, 350, 351,
- 352, 353, 354, 355, 356, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 357, 292, 210, 293, 294, 295, 296,
- 297, 298, 299, 300, 0, 0, 301, 302, 0, 0,
+ 0, 0, 353, 0, 0, 0, 0, 0, 0, 0,
+ 0, 378, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 378, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 303, 0, 0, 0, 358,
- 0, 0, 0, 0, 0, 360, 305, 306, 307, 308,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 211,
- 212, 213, 214, 215, 216, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 347, 348, 349, 0,
- 350, 351, 352, 353, 354, 355, 356, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 357, 292, 210, 293, 294,
- 295, 296, 297, 298, 299, 300, 0, 0, 301, 302,
+ 0, 0, 0, 0, 353, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 303, 0, 0,
- 0, 278, 0, 0, 0, 0, 0, 360, 305, 306,
- 307, 308, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 211, 212, 213, 214, 215, 216, 1, 2, 3,
- 4, 5, 6, 7, 8, 9, 10, 11, 347, 348,
- 349, 0, 350, 351, 352, 353, 354, 355, 356, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
- 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 357, 292, 210,
- 293, 294, 295, 296, 297, 298, 299, 300, 0, 0,
- 301, 302, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 303,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 360,
- 305, 306, 307, 308, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 211, 212, 213, 214, 215, 216, 1,
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 0,
- 292, 210, 293, 294, 295, 296, 297, 298, 299, 300,
- 0, 0, 301, 302, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 378, 0,
+ 0, 0, 0, 378, 378, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 378, 0,
+ 0, 0, 0, 271, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 378, 0, 0, 0, 378,
+ 0, 0, 0, 0, 378, 0, 0, 0, 378, 0,
+ 0, 0, 0, 0, 0, 274, 0, 378, 1, 2,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 0, 0, 218, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 303, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 360, 305, 306, 307, 308, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 211, 212, 213, 214, 215,
- 216, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 0, 0, 210, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 0, 0, 0, 0, 0, 211, 212, 213,
- 214, 215, 216, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 0, 292, 210, 293, 294, 295, 296, 297, 298,
- 299, 300, 0, 0, 301, 302, 0, 0, 0, 0,
+ 219, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 220, 221, 222, 223, 224, 225,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 358, 359, 360, 0, 361, 362, 363,
+ 364, 365, 366, 367, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 215, 216, 217, 368, 301,
+ 218, 302, 303, 304, 305, 306, 307, 308, 309, 310,
+ 311, 0, 0, 312, 313, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 303, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 305, 306, 307, 308, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 211, 212, 213,
- 214, 215, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 13, 14, 15, 16, 17,
+ 0, 0, 314, 0, 0, 0, 369, 370, 0, 0,
+ 0, 0, 371, 316, 317, 318, 319, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 220, 221, 222, 223,
+ 224, 225, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 358, 359, 360, 0, 361,
+ 362, 363, 364, 365, 366, 367, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
@@ -1741,39 +1297,16 @@ static const yytype_int16 yytable[] =
178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
- 208, 209, 0, 259, 210, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 260, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 0, 0, 211, 212,
- 213, 214, 215, 0, 0, 0, 0, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 0, 0, 210, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 368, 301, 218, 302, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 0, 0, 312, 313, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 436, 0, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 0, 0, 0, 0, 0,
- 0, 211, 212, 213, 214, 215, 12, 13, 14, 15,
+ 0, 0, 0, 0, 314, 0, 0, 0, 369, 477,
+ 0, 0, 0, 0, 371, 316, 317, 318, 319, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 220, 221,
+ 222, 223, 224, 225, 1, 2, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 358, 359, 360,
+ 0, 361, 362, 363, 364, 365, 366, 367, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
@@ -1793,39 +1326,104 @@ static const yytype_int16 yytable[] =
176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
- 206, 207, 208, 209, 0, 0, 210, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 501, 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 0, 0, 0, 0, 0, 0,
- 211, 212, 213, 214, 215, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 0, 0, 210, 0, 0, 0, 0,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 368, 301, 218, 302, 303, 304, 305, 306,
+ 307, 308, 309, 310, 311, 0, 0, 312, 313, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 314, 0, 0, 0,
+ 369, 0, 0, 0, 0, 0, 371, 316, 317, 318,
+ 319, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 220, 221, 222, 223, 224, 225, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 358,
+ 359, 360, 0, 361, 362, 363, 364, 365, 366, 367,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 368, 301, 218, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 0, 0, 312,
+ 313, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 314, 0,
+ 0, 0, 287, 0, 0, 0, 0, 0, 371, 316,
+ 317, 318, 319, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 220, 221, 222, 223, 224, 225, 1, 2,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 358, 359, 360, 0, 361, 362, 363, 364, 365,
+ 366, 367, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 368, 301, 218, 302,
+ 303, 304, 305, 306, 307, 308, 309, 310, 311, 0,
+ 0, 312, 313, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 314, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 371, 316, 317, 318, 319, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 220, 221, 222, 223, 224, 225,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 215, 216, 217, 0, 301,
+ 218, 302, 303, 304, 305, 306, 307, 308, 309, 310,
+ 311, 0, 0, 312, 313, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 519, 0, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 0, 0, 0, 0, 0, 0, 211,
- 212, 213, 214, 215, 12, 13, 14, 15, 16, 17,
+ 0, 0, 314, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 371, 316, 317, 318, 319, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 220, 221, 222, 223,
+ 224, 225, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
@@ -1845,14 +1443,19 @@ static const yytype_int16 yytable[] =
178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
- 208, 209, 0, 0, 210, 0, 0, 0, 4, 5,
- 6, 7, 8, 9, 10, 11, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 13, 14,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 0, 0, 218, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 219, 1, 2, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 220, 221,
+ 222, 223, 224, 225, 0, 0, 0, 0, 0, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 211, 212,
- 213, 214, 215, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 0, 0, 0, 0, 0,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
@@ -1867,19 +1470,49 @@ static const yytype_int16 yytable[] =
175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 0, 292, 210, 293, 294,
- 295, 296, 297, 298, 299, 300, 0, 0, 301, 302,
+ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
+ 215, 216, 217, 0, 301, 218, 302, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 0, 0, 312, 313,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 303, 0, 0,
- 0, 382, 535, 0, 0, 0, 0, 0, 305, 306,
- 307, 308, 4, 5, 6, 7, 8, 9, 10, 11,
+ 0, 0, 0, 0, 0, 0, 0, 314, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 316, 317,
+ 318, 319, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 220, 221, 222, 223, 224, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 13, 14, 15, 16, 17, 18, 19, 20,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 0, 268, 218, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 269, 1,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 220, 221, 222, 223, 224, 0, 0, 0,
+ 0, 0, 0, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 0,
- 0, 0, 0, 0, 65, 66, 67, 68, 69, 70,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
@@ -1893,46 +1526,20 @@ static const yytype_int16 yytable[] =
171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 0,
- 292, 210, 293, 294, 295, 296, 297, 298, 299, 300,
- 0, 0, 301, 302, 0, 0, 0, 0, 0, 0,
+ 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
+ 211, 212, 213, 214, 215, 216, 217, 0, 0, 218,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 303, 0, 0, 304, 0, 0, 0, 0, 0,
- 0, 0, 305, 306, 307, 308, 4, 5, 6, 7,
- 8, 9, 10, 11, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 0, 0, 0, 0, 0, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 0, 292, 210, 293, 294, 295, 296,
- 297, 298, 299, 300, 0, 0, 301, 302, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 303, 0, 0, 0, 382,
- 0, 0, 0, 0, 0, 0, 305, 306, 307, 308,
- 4, 5, 6, 7, 8, 9, 10, 11, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 0, 0, 0, 0, 0, 0, 447, 1, 2, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 0, 0, 0, 0, 0, 220, 221, 222, 223, 224,
+ 0, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 0, 0, 0,
- 0, 0, 65, 66, 67, 68, 69, 70, 71, 72,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
@@ -1946,183 +1553,70 @@ static const yytype_int16 yytable[] =
173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 0, 292, 210,
- 293, 294, 295, 296, 297, 298, 299, 300, 0, 0,
- 301, 302, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 303,
- 0, 0, 425, 0, 0, 0, 0, 0, 0, 0,
- 305, 306, 307, 308, 4, 5, 6, 7, 8, 9,
- 10, 11, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 0, 0, 0, 0, 0, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 0, 292, 210, 293, 294, 295, 296, 297, 298,
- 299, 300, 0, 0, 301, 302, 0, 0, 0, 0,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 0, 0, 218, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 303, 4, 5, 6, 7, 8, 9,
- 10, 11, 0, 444, 305, 306, 307, 308, 0, 0,
- 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 0, 0, 0, 0, 0, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 0, 292, 210, 293, 294, 295, 296, 297, 298,
- 299, 300, 0, 0, 301, 302, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 303, 4, 5, 6, 7, 8, 9,
- 10, 11, 0, 0, 305, 306, 307, 308, 0, 0,
- 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 0, 0, 0, 0, 0, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 400, 0, 292, 210, 293, 294, 295, 296, 297, 298,
- 299, 300, 0, 0, 301, 302, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 303, 4, 5, 6, 7, 8, 9,
- 10, 11, 0, 0, 305, 306, 307, 308, 0, 0,
- 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 0, 0, 0, 0, 0, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 0, 0, 210
-};
-
-#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-512)))
-
-#define yytable_value_is_error(Yytable_value) \
- YYID (0)
-
-static const yytype_int16 yycheck[] =
-{
- 0, 222, 230, 0, 286, 245, 0, 303, 372, 55,
- 451, 263, 340, 343, 224, 238, 239, 380, 258, 382,
- 255, 224, 385, 512, 257, 243, 254, 236, 237, 250,
- 255, 264, 257, 544, 260, 317, 262, 548, 527, 264,
- 257, 257, 553, 283, 284, 265, 255, 264, 257, 265,
- 273, 274, 261, 274, 255, 265, 259, 353, 386, 355,
- 278, 245, 246, 247, 248, 249, 250, 251, 252, 253,
- 254, 257, 259, 262, 257, 262, 440, 256, 265, 265,
- 264, 264, 334, 262, 256, 337, 256, 256, 256, 256,
- 262, 256, 262, 262, 262, 262, 224, 262, 380, 395,
- 382, 431, 262, 385, 256, 265, 469, 411, 412, 413,
- 414, 262, 262, 341, 265, 265, 557, 399, 262, 340,
- 262, 265, 343, 265, 262, 234, 235, 265, 281, 282,
- 283, 270, 271, 272, 267, 257, 269, 240, 241, 262,
- 263, 262, 263, 473, 407, 408, 442, 409, 410, 513,
- 446, 415, 416, 225, 259, 518, 224, 259, 224, 257,
- 264, 224, 256, 255, 265, 386, 277, 263, 276, 275,
- 244, 242, 258, 225, 224, 265, 265, 255, 224, 255,
- 265, 463, 464, 263, 224, 255, 255, 469, 255, 224,
- 223, 256, 224, 433, 17, 558, 260, 258, 258, 255,
- 262, 259, 566, 499, 259, 301, 302, 256, 265, 260,
- 431, 256, 259, 417, 419, 421, 512, 265, 260, 418,
- 264, 339, 222, 420, 320, 254, 422, 250, 254, 216,
- 230, 527, 432, 504, 507, 543, 518, 237, 334, 553,
- 237, 337, 538, 237, 244, 554, 248, 507, 527, 237,
- 250, -1, 473, -1, 254, 537, 552, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 274, -1, 558, -1, 278, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 512, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 532, -1, 527, -1, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 414, 415,
- 416, 417, 418, 419, 420, 421, 422, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 340, 341, -1, 343, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 372, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 386, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 431, -1, -1, -1, -1, -1, -1, -1, -1,
- 440, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 451, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 473, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 507, -1, -1,
- -1, -1, 512, 513, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 527, -1, -1,
- -1, -1, 532, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 544, -1, -1, -1, 548, -1,
- -1, -1, -1, 553, -1, -1, -1, 557, -1, -1,
- -1, -1, -1, -1, 0, -1, 566, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 25,
+ 0, 0, 0, 0, 512, 1, 2, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 0, 0,
+ 0, 0, 0, 220, 221, 222, 223, 224, 0, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
+ 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
+ 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
+ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
+ 215, 216, 217, 0, 0, 218, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 530, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 0, 0, 0, 0,
+ 0, 220, 221, 222, 223, 224, 0, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
+ 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
+ 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
+ 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
+ 217, 0, 0, 218, 0, 0, 0, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 220,
+ 221, 222, 223, 224, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 66, 67, 0, 0, 0, 0, 0, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
@@ -2137,49 +1631,20 @@ static const yytype_int16 yycheck[] =
186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
- 216, 217, 218, 219, 220, 221, 222, -1, -1, 225,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 279, 280, 281, 282, 283, 284, 3,
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, -1, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
- 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
- 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
- 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
- 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
- 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
- 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
- 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
- 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
- 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
- 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
- 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
- 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
- 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
- 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
- -1, -1, 236, 237, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 255, -1, -1, -1, 259, 260, -1, -1, -1,
- -1, 265, 266, 267, 268, 269, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 279, 280, 281, 282, 283,
- 284, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, -1, 18, 19, 20, 21,
+ 216, 217, 0, 301, 218, 302, 303, 304, 305, 306,
+ 307, 308, 309, 310, 311, 0, 0, 312, 313, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 314, 0, 0, 0,
+ 393, 546, 0, 0, 0, 0, 0, 316, 317, 318,
+ 319, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 32, 33, 34, 35, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 62, 63, 64, 65, 66, 67, 0, 0, 0, 0,
+ 0, 73, 74, 75, 76, 77, 78, 79, 80, 81,
82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
@@ -2193,49 +1658,20 @@ static const yytype_int16 yycheck[] =
182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, -1, -1, 236, 237, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 255, -1, -1, -1, 259, 260, -1,
- -1, -1, -1, 265, 266, 267, 268, 269, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 279, 280, 281,
- 282, 283, 284, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, -1, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
- 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
- 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
- 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
- 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
- 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
- 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
- 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
- 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
- 230, 231, 232, 233, -1, -1, 236, 237, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 255, -1, -1, -1, 259,
- -1, -1, -1, -1, -1, 265, 266, 267, 268, 269,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 279,
- 280, 281, 282, 283, 284, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15, 16, -1,
+ 212, 213, 214, 215, 216, 217, 0, 301, 218, 302,
+ 303, 304, 305, 306, 307, 308, 309, 310, 311, 0,
+ 0, 312, 313, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 314, 0, 0, 315, 0, 0, 0, 0, 0, 0,
+ 0, 316, 317, 318, 319, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 28, 29, 30, 31, 32, 33, 34, 35, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 0, 0, 0, 0, 0, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
@@ -2250,20 +1686,74 @@ static const yytype_int16 yycheck[] =
188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
- 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
- 228, 229, 230, 231, 232, 233, -1, -1, 236, 237,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 255, -1, -1,
- -1, 259, -1, -1, -1, -1, -1, 265, 266, 267,
- 268, 269, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 279, 280, 281, 282, 283, 284, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, -1, 18, 19, 20, 21, 22, 23, 24, 25,
+ 0, 301, 218, 302, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 0, 0, 312, 313, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 314, 0, 0, 0, 393, 0,
+ 0, 0, 0, 0, 0, 316, 317, 318, 319, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 0, 0, 0, 0, 0, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 0, 301, 218, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 0, 0, 312,
+ 313, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 314, 0,
+ 0, 436, 0, 0, 0, 0, 0, 0, 0, 316,
+ 317, 318, 319, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 0, 0,
+ 0, 0, 0, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 215, 216, 217, 0, 301,
+ 218, 302, 303, 304, 305, 306, 307, 308, 309, 310,
+ 311, 0, 0, 312, 313, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 314, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 455, 316, 317, 318, 319, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 66, 67, 0, 0, 0, 0, 0, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
@@ -2278,98 +1768,182 @@ static const yytype_int16 yycheck[] =
186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
- 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
- 226, 227, 228, 229, 230, 231, 232, 233, -1, -1,
- 236, 237, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 255,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 265,
- 266, 267, 268, 269, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 279, 280, 281, 282, 283, 284, 3,
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 216, 217, 0, 301, 218, 302, 303, 304, 305, 306,
+ 307, 308, 309, 310, 311, 0, 0, 312, 313, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 314, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 316, 317, 318,
+ 319, 0, 0, 0, 0, 0, 0, 0, 0, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 0, 0, 0, 0, 0, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 411, 0, 301, 218, 302, 303, 304, 305, 306,
+ 307, 308, 309, 310, 311, 0, 0, 312, 313, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 314, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 316, 317, 318,
+ 319, 0, 0, 0, 0, 0, 0, 0, 0, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 0, 0, 0, 0, 0, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 0, 0, 218
+};
+
+static const yytype_int16 yycheck[] =
+{
+ 0, 231, 239, 295, 0, 0, 314, 383, 254, 57,
+ 462, 272, 354, 391, 351, 393, 232, 232, 396, 523,
+ 253, 267, 265, 246, 247, 267, 263, 248, 249, 259,
+ 265, 555, 267, 275, 538, 559, 328, 265, 267, 274,
+ 564, 267, 265, 267, 267, 274, 292, 293, 271, 275,
+ 274, 250, 251, 283, 269, 288, 364, 275, 366, 275,
+ 397, 266, 283, 284, 255, 256, 257, 258, 259, 260,
+ 261, 262, 263, 264, 267, 451, 280, 281, 282, 269,
+ 266, 274, 272, 274, 345, 275, 272, 348, 266, 266,
+ 266, 266, 272, 273, 272, 272, 272, 272, 406, 391,
+ 442, 393, 480, 266, 396, 266, 277, 272, 279, 272,
+ 275, 272, 244, 245, 272, 352, 568, 275, 410, 272,
+ 272, 351, 275, 275, 354, 422, 423, 424, 425, 272,
+ 272, 272, 275, 275, 291, 292, 293, 270, 232, 272,
+ 418, 419, 484, 272, 273, 453, 420, 421, 524, 457,
+ 267, 529, 232, 426, 427, 269, 269, 232, 232, 267,
+ 275, 232, 274, 287, 266, 265, 286, 397, 252, 272,
+ 268, 254, 232, 232, 285, 265, 275, 265, 275, 275,
+ 265, 273, 474, 475, 232, 232, 265, 265, 480, 270,
+ 232, 569, 268, 266, 231, 272, 268, 265, 444, 269,
+ 232, 577, 510, 266, 270, 266, 275, 19, 275, 312,
+ 313, 269, 442, 269, 428, 523, 270, 274, 429, 431,
+ 430, 259, 263, 432, 263, 433, 225, 350, 331, 515,
+ 538, 231, 554, 518, 564, 257, 443, 529, 565, 239,
+ 538, 549, 345, 518, 246, 348, 246, -1, -1, -1,
+ 246, 246, -1, 253, 484, 563, 548, -1, -1, 259,
+ -1, -1, -1, 263, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 569, -1, -1,
+ -1, -1, -1, 283, -1, -1, -1, 287, -1, -1,
+ -1, -1, -1, 523, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 543, -1, 538, -1,
+ -1, -1, 415, 416, 417, 418, 419, 420, 421, 422,
+ 423, 424, 425, 426, 427, 428, 429, 430, 431, 432,
+ 433, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 25, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
- 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
- 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
- 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
- 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
- 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
- 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
- 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
- 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
- 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
- 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
- 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
- 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
- 214, 215, 216, 217, 218, 219, 220, 221, 222, -1,
- 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
- -1, -1, 236, 237, -1, -1, -1, -1, -1, -1,
+ -1, 351, 352, -1, 354, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 255, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 265, 266, 267, 268, 269, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 279, 280, 281, 282, 283,
- 284, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
- 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
- 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- 222, -1, -1, 225, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 383, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 397, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, -1, -1, -1, -1, -1, 279, 280, 281,
- 282, 283, 284, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
- 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
- 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- 222, -1, 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, -1, -1, 236, 237, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 255, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 266, 267, 268, 269, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 279, 280, 281,
- 282, 283, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 25, 26, 27, 28, 29, 30,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 442, -1, -1, -1, -1, -1, -1, -1,
+ -1, 451, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 462, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 484, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 518, -1,
+ -1, -1, -1, 523, 524, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 538, -1,
+ -1, -1, -1, 543, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 555, -1, -1, -1, 559,
+ -1, -1, -1, -1, 564, -1, -1, -1, 568, -1,
+ -1, -1, -1, -1, -1, 0, -1, 577, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
+ 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
+ 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
+ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
+ 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
+ 225, 226, 227, 228, 229, 230, -1, -1, 233, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 275, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 289, 290, 291, 292, 293, 294,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, -1, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+ 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
+ 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
+ 243, -1, -1, 246, 247, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 265, -1, -1, -1, 269, 270, -1, -1,
+ -1, -1, 275, 276, 277, 278, 279, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 289, 290, 291, 292,
+ 293, 294, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, -1, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
@@ -2389,39 +1963,16 @@ static const yytype_int16 yycheck[] =
191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, -1, 224, 225, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 265, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, -1, -1, 279, 280,
- 281, 282, 283, -1, -1, -1, -1, 25, 26, 27,
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
- 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
- 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
- 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
- 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
- 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
- 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
- 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
- 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
- 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
- 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
- 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
- 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
- 218, 219, 220, 221, 222, -1, -1, 225, -1, -1,
+ 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
+ 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
+ 241, 242, 243, -1, -1, 246, 247, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 260, -1, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, -1, -1, -1, -1, -1,
- -1, 279, 280, 281, 282, 283, 25, 26, 27, 28,
+ -1, -1, -1, -1, 265, -1, -1, -1, 269, 270,
+ -1, -1, -1, -1, 275, 276, 277, 278, 279, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 289, 290,
+ 291, 292, 293, 294, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ -1, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
@@ -2441,39 +1992,104 @@ static const yytype_int16 yycheck[] =
189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
- 219, 220, 221, 222, -1, -1, 225, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 260, -1, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, -1, -1, -1, -1, -1, -1,
- 279, 280, 281, 282, 283, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
- 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
- 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
- 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
- 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
- 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
- 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
- 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
- 220, 221, 222, -1, -1, 225, -1, -1, -1, -1,
+ 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
+ 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
+ 239, 240, 241, 242, 243, -1, -1, 246, 247, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 265, -1, -1, -1,
+ 269, -1, -1, -1, -1, -1, 275, 276, 277, 278,
+ 279, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 289, 290, 291, 292, 293, 294, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, -1, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
+ 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
+ 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
+ 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
+ 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
+ 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
+ 237, 238, 239, 240, 241, 242, 243, -1, -1, 246,
+ 247, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 265, -1,
+ -1, -1, 269, -1, -1, -1, -1, -1, 275, 276,
+ 277, 278, 279, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 289, 290, 291, 292, 293, 294, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, -1, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
+ 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
+ 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
+ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
+ 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
+ 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
+ 235, 236, 237, 238, 239, 240, 241, 242, 243, -1,
+ -1, 246, 247, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 265, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 275, 276, 277, 278, 279, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 289, 290, 291, 292, 293, 294,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+ 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 230, -1, 232,
+ 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
+ 243, -1, -1, 246, 247, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 260, -1, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, -1, -1, -1, -1, -1, -1, 279,
- 280, 281, 282, 283, 25, 26, 27, 28, 29, 30,
+ -1, -1, 265, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 275, 276, 277, 278, 279, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 289, 290, 291, 292,
+ 293, 294, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
@@ -2493,14 +2109,19 @@ static const yytype_int16 yycheck[] =
191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, -1, -1, 225, -1, -1, -1, 6, 7,
- 8, 9, 10, 11, 12, 13, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 26, 27,
+ 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
+ -1, -1, 233, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 275, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, 289, 290,
+ 291, 292, 293, 294, -1, -1, -1, -1, -1, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, 43, 44, 45, 46, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 279, 280,
- 281, 282, 283, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, -1, -1, -1, -1, -1,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
@@ -2515,19 +2136,49 @@ static const yytype_int16 yycheck[] =
188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
- 218, 219, 220, 221, 222, -1, 224, 225, 226, 227,
- 228, 229, 230, 231, 232, 233, -1, -1, 236, 237,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, -1, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, -1, -1, 246, 247,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 255, -1, -1,
- -1, 259, 260, -1, -1, -1, -1, -1, 266, 267,
- 268, 269, 6, 7, 8, 9, 10, 11, 12, 13,
+ -1, -1, -1, -1, -1, -1, -1, 265, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 276, 277,
+ 278, 279, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 289, 290, 291, 292, 293, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 26, 27, 28, 29, 30, 31, 32, 33,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
+ 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
+ 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
+ 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
+ 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
+ 227, 228, 229, 230, -1, 232, 233, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 275, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 289, 290, 291, 292, 293, -1, -1, -1,
+ -1, -1, -1, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, -1,
- -1, -1, -1, -1, 78, 79, 80, 81, 82, 83,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
@@ -2541,19 +2192,73 @@ static const yytype_int16 yycheck[] =
184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
- 214, 215, 216, 217, 218, 219, 220, 221, 222, -1,
- 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
- -1, -1, 236, 237, -1, -1, -1, -1, -1, -1,
+ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, -1, -1, 233,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 270, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ -1, -1, -1, -1, -1, 289, 290, 291, 292, 293,
+ -1, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 230, -1, -1, 233, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 255, -1, -1, 258, -1, -1, -1, -1, -1,
- -1, -1, 266, 267, 268, 269, 6, 7, 8, 9,
- 10, 11, 12, 13, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, -1, -1, -1, -1, -1, 78, 79,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 270, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, -1, -1,
+ -1, -1, -1, 289, 290, 291, 292, 293, -1, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, -1, -1, 233, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 270, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, -1, -1, -1, -1,
+ -1, 289, 290, 291, 292, 293, -1, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
@@ -2568,143 +2273,228 @@ static const yytype_int16 yycheck[] =
190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
- 220, 221, 222, -1, 224, 225, 226, 227, 228, 229,
- 230, 231, 232, 233, -1, -1, 236, 237, -1, -1,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+ 230, -1, -1, 233, -1, -1, -1, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 289,
+ 290, 291, 292, 293, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, -1, -1, -1, -1, -1, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
+ 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
+ 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+ 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
+ 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
+ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
+ 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
+ 229, 230, -1, 232, 233, 234, 235, 236, 237, 238,
+ 239, 240, 241, 242, 243, -1, -1, 246, 247, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 255, -1, -1, -1, 259,
- -1, -1, -1, -1, -1, -1, 266, 267, 268, 269,
- 6, 7, 8, 9, 10, 11, 12, 13, -1, -1,
+ -1, -1, -1, -1, -1, -1, 265, -1, -1, -1,
+ 269, 270, -1, -1, -1, -1, -1, 276, 277, 278,
+ 279, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, -1, -1, -1, -1,
+ -1, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
+ 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
+ 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
+ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
+ 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
+ 225, 226, 227, 228, 229, 230, -1, 232, 233, 234,
+ 235, 236, 237, 238, 239, 240, 241, 242, 243, -1,
+ -1, 246, 247, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, -1, -1, -1,
- -1, -1, 78, 79, 80, 81, 82, 83, 84, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
- 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
- 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
- 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
- 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
- 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
- 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
- 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
- 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
- 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
- 216, 217, 218, 219, 220, 221, 222, -1, 224, 225,
- 226, 227, 228, 229, 230, 231, 232, 233, -1, -1,
- 236, 237, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 255,
- -1, -1, 258, -1, -1, -1, -1, -1, -1, -1,
- 266, 267, 268, 269, 6, 7, 8, 9, 10, 11,
- 12, 13, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, -1, -1, -1, -1, -1, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
- 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
- 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- 222, -1, 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, -1, -1, 236, 237, -1, -1, -1, -1,
+ 265, -1, -1, 268, -1, -1, -1, -1, -1, -1,
+ -1, 276, 277, 278, 279, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 255, 6, 7, 8, 9, 10, 11,
- 12, 13, -1, 265, 266, 267, 268, 269, -1, -1,
- -1, -1, -1, -1, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, -1, -1, -1, -1, -1, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
- 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
- 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- 222, -1, 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, -1, -1, 236, 237, -1, -1, -1, -1,
+ -1, -1, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ -1, -1, -1, -1, -1, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
+ 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
+ 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
+ 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
+ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
+ 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
+ 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
+ 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
+ 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
+ -1, 232, 233, 234, 235, 236, 237, 238, 239, 240,
+ 241, 242, 243, -1, -1, 246, 247, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 255, 6, 7, 8, 9, 10, 11,
- 12, 13, -1, -1, 266, 267, 268, 269, -1, -1,
- -1, -1, -1, -1, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, -1, -1, -1, -1, -1, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
- 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
- 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- 222, -1, 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, -1, -1, 236, 237, -1, -1, -1, -1,
+ -1, -1, -1, -1, 265, -1, -1, -1, 269, -1,
+ -1, -1, -1, -1, -1, 276, 277, 278, 279, 6,
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 255, 6, 7, 8, 9, 10, 11,
- 12, 13, -1, -1, 266, 267, 268, 269, -1, -1,
- -1, -1, -1, -1, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, -1, -1, -1, -1, -1, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
- 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
- 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- 222, -1, -1, 225
+ -1, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, -1, -1, -1, -1, -1, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
+ 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
+ 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
+ 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
+ 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
+ 227, 228, 229, 230, -1, 232, 233, 234, 235, 236,
+ 237, 238, 239, 240, 241, 242, 243, -1, -1, 246,
+ 247, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 265, -1,
+ -1, 268, -1, -1, -1, -1, -1, -1, -1, 276,
+ 277, 278, 279, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, -1, -1,
+ -1, -1, -1, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+ 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 230, -1, 232,
+ 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
+ 243, -1, -1, 246, 247, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 265, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 275, 276, 277, 278, 279, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, -1, -1, -1, -1, -1, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
+ 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
+ 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+ 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
+ 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
+ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
+ 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
+ 229, 230, -1, 232, 233, 234, 235, 236, 237, 238,
+ 239, 240, 241, 242, 243, -1, -1, 246, 247, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 265, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 276, 277, 278,
+ 279, -1, -1, -1, -1, -1, -1, -1, -1, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, -1, -1, -1, -1, -1, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
+ 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
+ 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+ 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
+ 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
+ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
+ 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
+ 229, 230, -1, 232, 233, 234, 235, 236, 237, 238,
+ 239, 240, 241, 242, 243, -1, -1, 246, 247, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 265, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 276, 277, 278,
+ 279, -1, -1, -1, -1, -1, -1, -1, -1, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, -1, -1, -1, -1, -1, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
+ 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
+ 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+ 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
+ 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
+ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
+ 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
+ 229, 230, -1, -1, 233
};
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
static const yytype_uint16 yystos[] =
{
0, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 25, 26, 27, 28, 29, 30, 31, 32,
+ 12, 13, 14, 15, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
@@ -2724,69 +2514,158 @@ static const yytype_uint16 yystos[] =
193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 225, 279, 280, 281, 282, 283, 284, 319, 320, 323,
- 324, 325, 326, 330, 331, 332, 333, 334, 335, 338,
- 339, 340, 341, 343, 345, 346, 347, 384, 385, 386,
- 255, 255, 224, 259, 346, 224, 265, 265, 387, 256,
- 262, 327, 328, 329, 339, 343, 262, 265, 224, 224,
- 265, 340, 343, 257, 344, 0, 385, 225, 342, 55,
- 224, 336, 337, 259, 349, 343, 265, 344, 259, 366,
- 328, 327, 329, 224, 224, 255, 264, 344, 259, 262,
- 265, 322, 224, 226, 227, 228, 229, 230, 231, 232,
- 233, 236, 237, 255, 258, 266, 267, 268, 269, 289,
- 290, 291, 293, 294, 295, 296, 297, 298, 299, 300,
- 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 343, 257, 256, 262, 264, 256, 262,
- 348, 339, 343, 350, 351, 265, 265, 14, 15, 16,
- 18, 19, 20, 21, 22, 23, 24, 223, 259, 260,
- 265, 300, 313, 315, 317, 319, 323, 343, 356, 357,
- 358, 359, 367, 368, 369, 372, 375, 376, 383, 344,
- 264, 344, 259, 315, 354, 264, 321, 224, 262, 265,
- 300, 300, 317, 236, 237, 257, 261, 256, 256, 262,
- 222, 315, 255, 300, 270, 271, 272, 267, 269, 234,
- 235, 238, 239, 273, 274, 240, 241, 277, 276, 275,
- 242, 244, 243, 278, 258, 258, 313, 225, 313, 318,
- 337, 350, 343, 224, 352, 353, 260, 351, 265, 265,
- 378, 255, 255, 265, 265, 317, 255, 317, 263, 255,
- 260, 360, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 264, 316, 262, 265, 260, 357, 354, 264,
- 354, 355, 354, 350, 224, 256, 292, 317, 224, 315,
- 300, 300, 300, 302, 302, 303, 303, 304, 304, 304,
- 304, 305, 305, 306, 307, 308, 309, 310, 311, 314,
- 258, 260, 352, 344, 262, 265, 357, 379, 317, 265,
- 317, 263, 377, 367, 315, 315, 354, 260, 262, 260,
- 258, 317, 265, 353, 223, 356, 368, 380, 256, 256,
- 317, 332, 339, 371, 361, 260, 354, 263, 255, 371,
- 381, 382, 363, 364, 365, 370, 373, 224, 256, 260,
- 315, 317, 265, 256, 17, 359, 358, 259, 264, 358,
- 362, 366, 256, 317, 362, 363, 367, 374, 354, 265,
- 260
+ 223, 224, 225, 226, 227, 228, 229, 230, 233, 275,
+ 289, 290, 291, 292, 293, 294, 329, 330, 333, 334,
+ 335, 336, 340, 341, 342, 343, 344, 345, 348, 349,
+ 350, 351, 353, 355, 356, 357, 394, 395, 396, 265,
+ 265, 232, 269, 356, 232, 275, 275, 397, 266, 272,
+ 337, 338, 339, 349, 353, 272, 275, 232, 232, 275,
+ 350, 353, 267, 354, 0, 395, 232, 352, 57, 232,
+ 346, 347, 269, 359, 353, 275, 354, 269, 376, 338,
+ 337, 339, 232, 232, 265, 274, 354, 269, 272, 275,
+ 332, 232, 234, 235, 236, 237, 238, 239, 240, 241,
+ 242, 243, 246, 247, 265, 268, 276, 277, 278, 279,
+ 299, 300, 301, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+ 320, 321, 322, 323, 353, 267, 266, 272, 274, 266,
+ 272, 358, 349, 353, 360, 361, 275, 275, 16, 17,
+ 18, 20, 21, 22, 23, 24, 25, 26, 231, 269,
+ 270, 275, 310, 323, 325, 327, 329, 333, 353, 366,
+ 367, 368, 369, 377, 378, 379, 382, 385, 386, 393,
+ 354, 274, 354, 269, 325, 364, 274, 331, 232, 272,
+ 275, 310, 310, 327, 246, 247, 267, 271, 266, 266,
+ 272, 230, 325, 265, 310, 280, 281, 282, 277, 279,
+ 244, 245, 248, 249, 283, 284, 250, 251, 287, 286,
+ 285, 252, 254, 253, 288, 268, 268, 323, 232, 323,
+ 328, 347, 360, 353, 232, 362, 363, 270, 361, 275,
+ 275, 388, 265, 265, 275, 275, 327, 265, 327, 273,
+ 265, 270, 370, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 264, 274, 326, 272, 275, 270, 367, 364,
+ 274, 364, 365, 364, 360, 232, 266, 302, 327, 232,
+ 325, 310, 310, 310, 312, 312, 313, 313, 314, 314,
+ 314, 314, 315, 315, 316, 317, 318, 319, 320, 321,
+ 324, 268, 270, 362, 354, 272, 275, 367, 389, 327,
+ 275, 327, 273, 387, 377, 325, 325, 364, 270, 272,
+ 270, 268, 327, 275, 363, 231, 366, 378, 390, 266,
+ 266, 327, 342, 349, 381, 371, 270, 364, 273, 265,
+ 381, 391, 392, 373, 374, 375, 380, 383, 232, 266,
+ 270, 325, 327, 275, 266, 19, 369, 368, 269, 274,
+ 368, 372, 376, 266, 327, 372, 373, 377, 384, 364,
+ 275, 270
};
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror. This remains here temporarily
- to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. However,
- YYFAIL appears to be in use. Nevertheless, it is formally deprecated
- in Bison 2.4.2's NEWS entry, where a plan to phase it out is
- discussed. */
-
-#define YYFAIL goto yyerrlab
-#if defined YYFAIL
- /* This is here to suppress warnings from the GCC cpp's
- -Wunused-macros. Normally we don't worry about that warning, but
- some users do, and we want to make it easy for users to remove
- YYFAIL uses, which will produce warnings from Bison 2.5. */
-#endif
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint16 yyr1[] =
+{
+ 0, 298, 299, 300, 300, 300, 300, 300, 300, 300,
+ 300, 300, 300, 300, 300, 301, 301, 301, 301, 301,
+ 301, 302, 303, 304, 305, 305, 306, 306, 307, 307,
+ 308, 309, 309, 310, 310, 310, 310, 311, 311, 311,
+ 311, 312, 312, 312, 312, 313, 313, 313, 314, 314,
+ 314, 315, 315, 315, 315, 315, 316, 316, 316, 317,
+ 317, 318, 318, 319, 319, 320, 320, 321, 321, 322,
+ 322, 323, 324, 323, 325, 325, 326, 326, 326, 326,
+ 326, 326, 326, 326, 326, 326, 326, 327, 327, 328,
+ 329, 329, 329, 329, 329, 329, 329, 329, 329, 331,
+ 330, 332, 332, 333, 334, 334, 335, 335, 336, 337,
+ 337, 338, 338, 338, 338, 339, 340, 340, 340, 340,
+ 340, 341, 341, 341, 341, 341, 342, 342, 343, 344,
+ 344, 344, 344, 345, 346, 346, 347, 347, 347, 348,
+ 349, 349, 350, 350, 350, 350, 350, 350, 351, 351,
+ 351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
+ 351, 351, 351, 351, 351, 351, 351, 352, 352, 353,
+ 353, 354, 354, 354, 354, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
+ 356, 356, 356, 358, 357, 359, 357, 360, 360, 361,
+ 361, 362, 362, 363, 363, 364, 364, 364, 365, 365,
+ 366, 367, 367, 368, 368, 368, 368, 368, 368, 368,
+ 369, 370, 371, 369, 372, 372, 374, 373, 375, 373,
+ 376, 376, 377, 377, 378, 378, 379, 380, 380, 381,
+ 381, 383, 382, 384, 384, 385, 385, 387, 386, 388,
+ 386, 389, 386, 390, 390, 391, 391, 392, 392, 393,
+ 393, 393, 393, 393, 394, 394, 395, 395, 395, 397,
+ 396
+};
+
+ /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 3, 1, 4, 1, 3, 2,
+ 2, 1, 1, 1, 2, 2, 2, 1, 2, 3,
+ 2, 1, 1, 1, 2, 2, 2, 1, 1, 1,
+ 1, 1, 3, 3, 3, 1, 3, 3, 1, 3,
+ 3, 1, 3, 3, 3, 3, 1, 3, 3, 1,
+ 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
+ 3, 1, 0, 6, 1, 3, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
+ 2, 2, 4, 2, 3, 4, 2, 3, 4, 0,
+ 6, 2, 3, 2, 1, 1, 2, 3, 3, 2,
+ 3, 2, 1, 2, 1, 1, 1, 3, 4, 6,
+ 5, 1, 2, 3, 5, 4, 1, 2, 1, 1,
+ 1, 1, 1, 4, 1, 3, 1, 3, 1, 1,
+ 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 4, 1, 3, 1,
+ 2, 2, 3, 3, 4, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 6, 0, 5, 1, 2, 3,
+ 4, 1, 3, 1, 2, 1, 3, 4, 1, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 0, 0, 5, 1, 1, 0, 2, 0, 2,
+ 2, 3, 1, 2, 1, 2, 5, 3, 1, 1,
+ 4, 0, 8, 0, 1, 3, 2, 0, 6, 0,
+ 8, 0, 7, 1, 1, 1, 0, 2, 3, 2,
+ 2, 2, 3, 2, 1, 2, 1, 1, 1, 0,
+ 3
+};
+
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
#define YYRECOVERING() (!!yyerrstatus)
@@ -2803,27 +2682,15 @@ do \
else \
{ \
yyerror (pParseContext, YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (YYID (0))
+ YYERROR; \
+ } \
+while (0)
/* Error token number */
-#define YYTERROR 1
-#define YYERRCODE 256
-
-
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
+#define YYTERROR 1
+#define YYERRCODE 256
-/* YYLEX -- calling `yylex' with the right arguments. */
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval, parseContext)
-#endif
/* Enable debugging if requested. */
#if YYDEBUG
@@ -2833,58 +2700,47 @@ while (YYID (0))
# define YYFPRINTF fprintf
# endif
-# define YYDPRINTF(Args) \
-do { \
- if (yydebug) \
- YYFPRINTF Args; \
-} while (YYID (0))
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
-do { \
- if (yydebug) \
- { \
- YYFPRINTF (stderr, "%s ", Title); \
- yy_symbol_print (stderr, \
- Type, Value, pParseContext); \
- YYFPRINTF (stderr, "\n"); \
- } \
-} while (YYID (0))
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value, pParseContext); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT. |
+`----------------------------------------*/
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
- glslang::TParseContext* pParseContext;
-#endif
{
FILE *yyo = yyoutput;
YYUSE (yyo);
+ YYUSE (pParseContext);
if (!yyvaluep)
return;
- YYUSE (pParseContext);
# ifdef YYPRINT
if (yytype < YYNTOKENS)
YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
- YYUSE (yyoutput);
# endif
- switch (yytype)
- {
- default:
- break;
- }
+ YYUSE (yytype);
}
@@ -2892,23 +2748,11 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext)
| Print this symbol on YYOUTPUT. |
`--------------------------------*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep, pParseContext)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
- glslang::TParseContext* pParseContext;
-#endif
{
- if (yytype < YYNTOKENS)
- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
- else
- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+ YYFPRINTF (yyoutput, "%s %s (",
+ yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext);
YYFPRINTF (yyoutput, ")");
@@ -2919,16 +2763,8 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, pParseContext)
| TOP (included). |
`------------------------------------------------------------------*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
- yytype_int16 *yybottom;
- yytype_int16 *yytop;
-#endif
{
YYFPRINTF (stderr, "Stack now");
for (; yybottom <= yytop; yybottom++)
@@ -2939,50 +2775,42 @@ yy_stack_print (yybottom, yytop)
YYFPRINTF (stderr, "\n");
}
-# define YY_STACK_PRINT(Bottom, Top) \
-do { \
- if (yydebug) \
- yy_stack_print ((Bottom), (Top)); \
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (0)
/*------------------------------------------------.
| Report that the YYRULE is going to be reduced. |
`------------------------------------------------*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule, pParseContext)
- YYSTYPE *yyvsp;
- int yyrule;
- glslang::TParseContext* pParseContext;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext)
{
+ unsigned long int yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
- unsigned long int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
- yyrule - 1, yylno);
+ yyrule - 1, yylno);
/* The symbols being reduced. */
for (yyi = 0; yyi < yynrhs; yyi++)
{
YYFPRINTF (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- , pParseContext);
+ yy_symbol_print (stderr,
+ yystos[yyssp[yyi + 1 - yynrhs]],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ , pParseContext);
YYFPRINTF (stderr, "\n");
}
}
-# define YY_REDUCE_PRINT(Rule) \
-do { \
- if (yydebug) \
- yy_reduce_print (yyvsp, Rule, pParseContext); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyssp, yyvsp, Rule, pParseContext); \
+} while (0)
/* Nonzero means print parse trace. It is left uninitialized so that
multiple parsers can coexist. */
@@ -2996,7 +2824,7 @@ int yydebug;
/* YYINITDEPTH -- initial size of the parser's stacks. */
-#ifndef YYINITDEPTH
+#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif
@@ -3019,15 +2847,8 @@ int yydebug;
# define yystrlen strlen
# else
/* Return the length of YYSTR. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static YYSIZE_T
yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
- const char *yystr;
-#endif
{
YYSIZE_T yylen;
for (yylen = 0; yystr[yylen]; yylen++)
@@ -3043,16 +2864,8 @@ yystrlen (yystr)
# else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
YYDEST. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static char *
yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
- char *yydest;
- const char *yysrc;
-#endif
{
char *yyd = yydest;
const char *yys = yysrc;
@@ -3082,27 +2895,27 @@ yytnamerr (char *yyres, const char *yystr)
char const *yyp = yystr;
for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
do_not_strip_quotes: ;
}
@@ -3137,10 +2950,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
int yycount = 0;
/* There are many possibilities here to consider:
- - Assume YYFAIL is not used. It's too flawed to consider. See
- <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
- for details. YYERROR is fine as it does not invoke this
- function.
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
is an error action. In that case, don't check for expected
@@ -3257,33 +3066,18 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
| Release the memory associated to this symbol. |
`-----------------------------------------------*/
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep, pParseContext)
- const char *yymsg;
- int yytype;
- YYSTYPE *yyvaluep;
- glslang::TParseContext* pParseContext;
-#endif
{
YYUSE (yyvaluep);
YYUSE (pParseContext);
-
if (!yymsg)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
- switch (yytype)
- {
-
- default:
- break;
- }
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YYUSE (yytype);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
}
@@ -3293,56 +3087,18 @@ yydestruct (yymsg, yytype, yyvaluep, pParseContext)
| yyparse. |
`----------*/
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
- void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
int
yyparse (glslang::TParseContext* pParseContext)
-#else
-int
-yyparse (pParseContext)
- glslang::TParseContext* pParseContext;
-#endif
-#endif
{
/* The lookahead symbol. */
int yychar;
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
- _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
- _Pragma ("GCC diagnostic pop")
-#else
+/* The semantic value of the lookahead symbol. */
/* Default value used for initialization, for pacifying older GCCs
or non-GCC compilers. */
-static YYSTYPE yyval_default;
-# define YY_INITIAL_VALUE(Value) = Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
-/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
+YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
+YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
/* Number of syntax errors so far. */
int yynerrs;
@@ -3352,8 +3108,8 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
int yyerrstatus;
/* The stacks and their tools:
- `yyss': related to states.
- `yyvs': related to semantic values.
+ 'yyss': related to states.
+ 'yyvs': related to semantic values.
Refer to the stacks through separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
@@ -3421,23 +3177,23 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
#ifdef yyoverflow
{
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
}
#else /* no yyoverflow */
# ifndef YYSTACK_RELOCATE
@@ -3445,22 +3201,22 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
# else
/* Extend the stack our own way. */
if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
+ goto yyexhaustedlab;
yystacksize *= 2;
if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
+ yystacksize = YYMAXDEPTH;
{
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss_alloc, yyss);
- YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
}
# endif
#endif /* no yyoverflow */
@@ -3469,10 +3225,10 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
yyvsp = yyvs + yysize - 1;
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
+ (unsigned long int) yystacksize));
if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
+ YYABORT;
}
YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -3501,7 +3257,7 @@ yybackup:
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
+ yychar = yylex (&yylval, parseContext);
}
if (yychar <= YYEOF)
@@ -3566,7 +3322,7 @@ yyreduce:
yylen = yyr2[yyn];
/* If YYLEN is nonzero, implement the default value of the action:
- `$$ = $1'.
+ '$$ = $1'.
Otherwise, the following line sets YYVAL to garbage.
This behavior is undocumented and Bison
@@ -3580,259 +3336,280 @@ yyreduce:
switch (yyn)
{
case 2:
-/* Line 1792 of yacc.c */
-#line 250 "glslang.y"
+#line 253 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[(1) - (1)].lex).loc, (yyvsp[(1) - (1)].lex).symbol, (yyvsp[(1) - (1)].lex).string);
+ (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
}
+#line 3344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 3:
-/* Line 1792 of yacc.c */
-#line 256 "glslang.y"
+#line 259 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
+#line 3352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 4:
-/* Line 1792 of yacc.c */
-#line 259 "glslang.y"
+#line 262 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).i, (yyvsp[(1) - (1)].lex).loc, true);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
}
+#line 3360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 5:
-/* Line 1792 of yacc.c */
-#line 262 "glslang.y"
+#line 265 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).u, (yyvsp[(1) - (1)].lex).loc, true);
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
}
+#line 3369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 6:
-/* Line 1792 of yacc.c */
-#line 266 "glslang.y"
+#line 269 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).i64, (yyvsp[(1) - (1)].lex).loc, true);
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
}
+#line 3378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 7:
-/* Line 1792 of yacc.c */
-#line 270 "glslang.y"
+#line 273 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).u64, (yyvsp[(1) - (1)].lex).loc, true);
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
}
+#line 3387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 8:
-/* Line 1792 of yacc.c */
-#line 274 "glslang.y"
+#line 277 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).d, EbtFloat, (yyvsp[(1) - (1)].lex).loc, true);
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+#endif
}
+#line 3398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 9:
-/* Line 1792 of yacc.c */
-#line 277 "glslang.y"
+#line 283 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).d, EbtDouble, (yyvsp[(1) - (1)].lex).loc, true);
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+#endif
}
+#line 3409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 10:
-/* Line 1792 of yacc.c */
-#line 281 "glslang.y"
+#line 289 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).d, EbtFloat16, (yyvsp[(1) - (1)].lex).loc, true);
-#endif
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
}
+#line 3417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 11:
-/* Line 1792 of yacc.c */
-#line 287 "glslang.y"
+#line 292 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[(1) - (1)].lex).b, (yyvsp[(1) - (1)].lex).loc, true);
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
}
+#line 3426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 12:
-/* Line 1792 of yacc.c */
-#line 290 "glslang.y"
+#line 296 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = (yyvsp[(2) - (3)].interm.intermTypedNode);
- if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
- (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
+#ifdef AMD_EXTENSIONS
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
+#endif
}
+#line 3437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 13:
-/* Line 1792 of yacc.c */
-#line 298 "glslang.y"
+#line 302 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
}
+#line 3445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 14:
-/* Line 1792 of yacc.c */
-#line 301 "glslang.y"
+#line 305 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[(2) - (4)].lex).loc, (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(3) - (4)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
+ if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
+ (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
}
+#line 3455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 15:
-/* Line 1792 of yacc.c */
-#line 304 "glslang.y"
+#line 313 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
+#line 3463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 16:
-/* Line 1792 of yacc.c */
-#line 307 "glslang.y"
+#line 316 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[(3) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode), *(yyvsp[(3) - (3)].lex).string);
+ (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
}
+#line 3471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 17:
-/* Line 1792 of yacc.c */
-#line 310 "glslang.y"
+#line 319 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.variableCheck((yyvsp[(1) - (2)].interm.intermTypedNode));
- parseContext.lValueErrorCheck((yyvsp[(2) - (2)].lex).loc, "++", (yyvsp[(1) - (2)].interm.intermTypedNode));
- (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(2) - (2)].lex).loc, "++", EOpPostIncrement, (yyvsp[(1) - (2)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
+#line 3479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 18:
-/* Line 1792 of yacc.c */
-#line 315 "glslang.y"
+#line 322 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.variableCheck((yyvsp[(1) - (2)].interm.intermTypedNode));
- parseContext.lValueErrorCheck((yyvsp[(2) - (2)].lex).loc, "--", (yyvsp[(1) - (2)].interm.intermTypedNode));
- (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(2) - (2)].lex).loc, "--", EOpPostDecrement, (yyvsp[(1) - (2)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
}
+#line 3487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 19:
-/* Line 1792 of yacc.c */
-#line 323 "glslang.y"
+#line 325 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.integerCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "[]");
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+ parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
+ parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
}
+#line 3497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 20:
-/* Line 1792 of yacc.c */
-#line 330 "glslang.y"
+#line 330 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[(1) - (1)].interm).loc, (yyvsp[(1) - (1)].interm).function, (yyvsp[(1) - (1)].interm).intermNode);
- delete (yyvsp[(1) - (1)].interm).function;
+ parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
+ parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
}
+#line 3507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 21:
-/* Line 1792 of yacc.c */
-#line 337 "glslang.y"
+#line 338 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (1)].interm);
+ parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
+#line 3516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 22:
-/* Line 1792 of yacc.c */
-#line 343 "glslang.y"
+#line 345 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (2)].interm);
- (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc;
+ (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
+ delete (yyvsp[0].interm).function;
}
+#line 3525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 23:
-/* Line 1792 of yacc.c */
-#line 347 "glslang.y"
+#line 352 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (2)].interm);
- (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc;
+ (yyval.interm) = (yyvsp[0].interm);
}
+#line 3533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 24:
-/* Line 1792 of yacc.c */
-#line 354 "glslang.y"
+#line 358 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (2)].interm);
+ (yyval.interm) = (yyvsp[-1].interm);
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
}
+#line 3542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 25:
-/* Line 1792 of yacc.c */
-#line 357 "glslang.y"
+#line 362 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (1)].interm);
+ (yyval.interm) = (yyvsp[-1].interm);
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
}
+#line 3551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 26:
-/* Line 1792 of yacc.c */
-#line 363 "glslang.y"
+#line 369 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- TParameter param = { 0, new TType };
- param.type->shallowCopy((yyvsp[(2) - (2)].interm.intermTypedNode)->getType());
- (yyvsp[(1) - (2)].interm).function->addParameter(param);
- (yyval.interm).function = (yyvsp[(1) - (2)].interm).function;
- (yyval.interm).intermNode = (yyvsp[(2) - (2)].interm.intermTypedNode);
+ (yyval.interm) = (yyvsp[-1].interm);
}
+#line 3559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 27:
-/* Line 1792 of yacc.c */
-#line 370 "glslang.y"
+#line 372 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- TParameter param = { 0, new TType };
- param.type->shallowCopy((yyvsp[(3) - (3)].interm.intermTypedNode)->getType());
- (yyvsp[(1) - (3)].interm).function->addParameter(param);
- (yyval.interm).function = (yyvsp[(1) - (3)].interm).function;
- (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).loc);
+ (yyval.interm) = (yyvsp[0].interm);
}
+#line 3567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 28:
-/* Line 1792 of yacc.c */
-#line 380 "glslang.y"
+#line 378 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (2)].interm);
+ TParameter param = { 0, new TType };
+ param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
+ (yyvsp[-1].interm).function->addParameter(param);
+ (yyval.interm).function = (yyvsp[-1].interm).function;
+ (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
}
+#line 3579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 29:
-/* Line 1792 of yacc.c */
-#line 388 "glslang.y"
+#line 385 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ TParameter param = { 0, new TType };
+ param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
+ (yyvsp[-2].interm).function->addParameter(param);
+ (yyval.interm).function = (yyvsp[-2].interm).function;
+ (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
+ }
+#line 3591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 30:
+#line 395 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyval.interm) = (yyvsp[-1].interm);
+ }
+#line 3599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 31:
+#line 403 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// Constructor
(yyval.interm).intermNode = 0;
- (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[(1) - (1)].interm.type).loc, (yyvsp[(1) - (1)].interm.type));
+ (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
}
+#line 3609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 30:
-/* Line 1792 of yacc.c */
-#line 393 "glslang.y"
+ case 32:
+#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
//
// Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -3840,18 +3617,18 @@ yyreduce:
(yyval.interm).function = 0;
(yyval.interm).intermNode = 0;
- TIntermMethod* method = (yyvsp[(1) - (1)].interm.intermTypedNode)->getAsMethodNode();
+ TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode();
if (method) {
(yyval.interm).function = new TFunction(&method->getMethodName(), TType(EbtInt), EOpArrayLength);
(yyval.interm).intermNode = method->getObject();
} else {
- TIntermSymbol* symbol = (yyvsp[(1) - (1)].interm.intermTypedNode)->getAsSymbolNode();
+ TIntermSymbol* symbol = (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode();
if (symbol) {
parseContext.reservedErrorCheck(symbol->getLoc(), symbol->getName());
TFunction *function = new TFunction(&symbol->getName(), TType(EbtVoid));
(yyval.interm).function = function;
} else
- parseContext.error((yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc(), "function call, method, or subroutine call expected", "", "");
+ parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "function call, method, or subroutine call expected", "", "");
}
if ((yyval.interm).function == 0) {
@@ -3860,3916 +3637,4024 @@ yyreduce:
(yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
}
}
+#line 3641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 31:
-/* Line 1792 of yacc.c */
-#line 423 "glslang.y"
+ case 33:
+#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.variableCheck((yyvsp[(1) - (1)].interm.intermTypedNode));
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
- if (TIntermMethod* method = (yyvsp[(1) - (1)].interm.intermTypedNode)->getAsMethodNode())
- parseContext.error((yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
+ parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+ if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
+ parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
}
+#line 3652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 32:
-/* Line 1792 of yacc.c */
-#line 429 "glslang.y"
+ case 34:
+#line 444 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.lValueErrorCheck((yyvsp[(1) - (2)].lex).loc, "++", (yyvsp[(2) - (2)].interm.intermTypedNode));
- (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(1) - (2)].lex).loc, "++", EOpPreIncrement, (yyvsp[(2) - (2)].interm.intermTypedNode));
+ parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
}
+#line 3661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 33:
-/* Line 1792 of yacc.c */
-#line 433 "glslang.y"
+ case 35:
+#line 448 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.lValueErrorCheck((yyvsp[(1) - (2)].lex).loc, "--", (yyvsp[(2) - (2)].interm.intermTypedNode));
- (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(1) - (2)].lex).loc, "--", EOpPreDecrement, (yyvsp[(2) - (2)].interm.intermTypedNode));
+ parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
}
+#line 3670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 34:
-/* Line 1792 of yacc.c */
-#line 437 "glslang.y"
+ case 36:
+#line 452 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- if ((yyvsp[(1) - (2)].interm).op != EOpNull) {
+ if ((yyvsp[-1].interm).op != EOpNull) {
char errorOp[2] = {0, 0};
- switch((yyvsp[(1) - (2)].interm).op) {
+ switch((yyvsp[-1].interm).op) {
case EOpNegative: errorOp[0] = '-'; break;
case EOpLogicalNot: errorOp[0] = '!'; break;
case EOpBitwiseNot: errorOp[0] = '~'; break;
default: break; // some compilers want this
}
- (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[(1) - (2)].interm).loc, errorOp, (yyvsp[(1) - (2)].interm).op, (yyvsp[(2) - (2)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].interm).loc, errorOp, (yyvsp[-1].interm).op, (yyvsp[0].interm.intermTypedNode));
} else {
- (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
(yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
}
}
- break;
-
- case 35:
-/* Line 1792 of yacc.c */
-#line 457 "glslang.y"
- { (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpNull; }
- break;
-
- case 36:
-/* Line 1792 of yacc.c */
-#line 458 "glslang.y"
- { (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 3691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 37:
-/* Line 1792 of yacc.c */
-#line 459 "glslang.y"
- { (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 472 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 3697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 38:
-/* Line 1792 of yacc.c */
-#line 460 "glslang.y"
- { (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpBitwiseNot;
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise not"); }
+#line 473 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 3703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 39:
-/* Line 1792 of yacc.c */
-#line 466 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 474 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 3709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 40:
-/* Line 1792 of yacc.c */
-#line 467 "glslang.y"
- {
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "*", EOpMul, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
- if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
- }
+#line 475 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
+#line 3716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 41:
-/* Line 1792 of yacc.c */
-#line 472 "glslang.y"
- {
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "/", EOpDiv, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
- if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
- }
+#line 481 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 42:
-/* Line 1792 of yacc.c */
-#line 477 "glslang.y"
+#line 482 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "%");
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "%", EOpMod, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
+#line 3732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 43:
-/* Line 1792 of yacc.c */
-#line 486 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 487 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+ if ((yyval.interm.intermTypedNode) == 0)
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+ }
+#line 3742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 44:
-/* Line 1792 of yacc.c */
-#line 487 "glslang.y"
+#line 492 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "+", EOpAdd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
+#line 3753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 45:
-/* Line 1792 of yacc.c */
-#line 492 "glslang.y"
- {
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "-", EOpSub, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
- if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
- }
+#line 501 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 46:
-/* Line 1792 of yacc.c */
-#line 500 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 502 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+ if ((yyval.interm.intermTypedNode) == 0)
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+ }
+#line 3769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 47:
-/* Line 1792 of yacc.c */
-#line 501 "glslang.y"
+#line 507 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bit shift left");
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "<<", EOpLeftShift, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
+#line 3779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 48:
-/* Line 1792 of yacc.c */
-#line 507 "glslang.y"
- {
- parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bit shift right");
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, ">>", EOpRightShift, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
- if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
- }
+#line 515 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 49:
-/* Line 1792 of yacc.c */
-#line 516 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 516 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+ if ((yyval.interm.intermTypedNode) == 0)
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+ }
+#line 3796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 50:
-/* Line 1792 of yacc.c */
-#line 517 "glslang.y"
+#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "<", EOpLessThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
+#line 3807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 51:
-/* Line 1792 of yacc.c */
-#line 522 "glslang.y"
- {
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, ">", EOpGreaterThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
- if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
- }
+#line 531 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 52:
-/* Line 1792 of yacc.c */
-#line 527 "glslang.y"
+#line 532 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "<=", EOpLessThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
+#line 3823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 53:
-/* Line 1792 of yacc.c */
-#line 532 "glslang.y"
+#line 537 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
+#line 3833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 54:
-/* Line 1792 of yacc.c */
-#line 540 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 542 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+ if ((yyval.interm.intermTypedNode) == 0)
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+ }
+#line 3843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 55:
-/* Line 1792 of yacc.c */
-#line 541 "glslang.y"
+#line 547 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.arrayObjectCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "array comparison");
- parseContext.opaqueCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "==");
- parseContext.specializationCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "==");
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "==", EOpEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
+#line 3853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 56:
-/* Line 1792 of yacc.c */
-#line 549 "glslang.y"
- {
- parseContext.arrayObjectCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "array comparison");
- parseContext.opaqueCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "!=");
- parseContext.specializationCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "!=");
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "!=", EOpNotEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
- if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
- }
+#line 555 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 57:
-/* Line 1792 of yacc.c */
-#line 560 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 556 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
+ parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
+ parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "==", EOpEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+ if ((yyval.interm.intermTypedNode) == 0)
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
+ }
+#line 3872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 58:
-/* Line 1792 of yacc.c */
-#line 561 "glslang.y"
+#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bitwise and");
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "&", EOpAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
+ parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
+ parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "!=", EOpNotEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
+#line 3885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 59:
-/* Line 1792 of yacc.c */
-#line 570 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 575 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 60:
-/* Line 1792 of yacc.c */
-#line 571 "glslang.y"
+#line 576 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bitwise exclusive or");
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "^", EOpExclusiveOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
+#line 3902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 61:
-/* Line 1792 of yacc.c */
-#line 580 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 585 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 62:
-/* Line 1792 of yacc.c */
-#line 581 "glslang.y"
+#line 586 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(2) - (3)].lex).loc, "bitwise inclusive or");
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "|", EOpInclusiveOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
+#line 3919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 63:
-/* Line 1792 of yacc.c */
-#line 590 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 595 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 64:
-/* Line 1792 of yacc.c */
-#line 591 "glslang.y"
+#line 596 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "&&", EOpLogicalAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
+#line 3936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 65:
-/* Line 1792 of yacc.c */
-#line 599 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 605 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 66:
-/* Line 1792 of yacc.c */
-#line 600 "glslang.y"
+#line 606 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "^^", EOpLogicalXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
+#line 3952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 67:
-/* Line 1792 of yacc.c */
-#line 608 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 614 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 68:
-/* Line 1792 of yacc.c */
-#line 609 "glslang.y"
+#line 615 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[(2) - (3)].lex).loc, "||", EOpLogicalOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[(2) - (3)].lex).loc);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
+#line 3968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 69:
-/* Line 1792 of yacc.c */
-#line 617 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 70:
-/* Line 1792 of yacc.c */
-#line 618 "glslang.y"
+#line 624 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- ++parseContext.controlFlowNestingLevel;
+ (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+ if ((yyval.interm.intermTypedNode) == 0)
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
+#line 3984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 71:
-/* Line 1792 of yacc.c */
-#line 621 "glslang.y"
- {
- --parseContext.controlFlowNestingLevel;
- parseContext.boolCheck((yyvsp[(2) - (6)].lex).loc, (yyvsp[(1) - (6)].interm.intermTypedNode));
- parseContext.rValueErrorCheck((yyvsp[(2) - (6)].lex).loc, "?", (yyvsp[(1) - (6)].interm.intermTypedNode));
- parseContext.rValueErrorCheck((yyvsp[(5) - (6)].lex).loc, ":", (yyvsp[(4) - (6)].interm.intermTypedNode));
- parseContext.rValueErrorCheck((yyvsp[(5) - (6)].lex).loc, ":", (yyvsp[(6) - (6)].interm.intermTypedNode));
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[(1) - (6)].interm.intermTypedNode), (yyvsp[(4) - (6)].interm.intermTypedNode), (yyvsp[(6) - (6)].interm.intermTypedNode), (yyvsp[(2) - (6)].lex).loc);
- if ((yyval.interm.intermTypedNode) == 0) {
- parseContext.binaryOpError((yyvsp[(2) - (6)].lex).loc, ":", (yyvsp[(4) - (6)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(6) - (6)].interm.intermTypedNode)->getCompleteString());
- (yyval.interm.intermTypedNode) = (yyvsp[(6) - (6)].interm.intermTypedNode);
- }
- }
+#line 632 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 3990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 72:
-/* Line 1792 of yacc.c */
-#line 636 "glslang.y"
- { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ ++parseContext.controlFlowNestingLevel;
+ }
+#line 3998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 73:
-/* Line 1792 of yacc.c */
-#line 637 "glslang.y"
- {
- parseContext.arrayObjectCheck((yyvsp[(2) - (3)].interm).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "array assignment");
- parseContext.opaqueCheck((yyvsp[(2) - (3)].interm).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "=");
- parseContext.specializationCheck((yyvsp[(2) - (3)].interm).loc, (yyvsp[(1) - (3)].interm.intermTypedNode)->getType(), "=");
- parseContext.lValueErrorCheck((yyvsp[(2) - (3)].interm).loc, "assign", (yyvsp[(1) - (3)].interm.intermTypedNode));
- parseContext.rValueErrorCheck((yyvsp[(2) - (3)].interm).loc, "assign", (yyvsp[(3) - (3)].interm.intermTypedNode));
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addAssign((yyvsp[(2) - (3)].interm).op, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].interm).loc);
+#line 636 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ --parseContext.controlFlowNestingLevel;
+ parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
+ parseContext.rValueErrorCheck((yyvsp[-4].lex).loc, "?", (yyvsp[-5].interm.intermTypedNode));
+ parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode));
+ parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[-5].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-4].lex).loc);
if ((yyval.interm.intermTypedNode) == 0) {
- parseContext.assignError((yyvsp[(2) - (3)].interm).loc, "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+ parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
}
+#line 4015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 74:
-/* Line 1792 of yacc.c */
-#line 652 "glslang.y"
- {
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
- (yyval.interm).op = EOpAssign;
- }
+#line 651 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 75:
-/* Line 1792 of yacc.c */
-#line 656 "glslang.y"
- {
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
- (yyval.interm).op = EOpMulAssign;
+#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
+ parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
+ parseContext.specializationCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
+ parseContext.lValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode));
+ parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addAssign((yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].interm).loc);
+ if ((yyval.interm.intermTypedNode) == 0) {
+ parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
+ }
}
+#line 4038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 76:
-/* Line 1792 of yacc.c */
-#line 660 "glslang.y"
+#line 667 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
- (yyval.interm).op = EOpDivAssign;
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
+ (yyval.interm).op = EOpAssign;
}
+#line 4047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 77:
-/* Line 1792 of yacc.c */
-#line 664 "glslang.y"
+#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "%=");
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
- (yyval.interm).op = EOpModAssign;
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
+ (yyval.interm).op = EOpMulAssign;
}
+#line 4056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 78:
-/* Line 1792 of yacc.c */
-#line 669 "glslang.y"
+#line 675 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
- (yyval.interm).op = EOpAddAssign;
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
+ (yyval.interm).op = EOpDivAssign;
}
+#line 4065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 79:
-/* Line 1792 of yacc.c */
-#line 673 "glslang.y"
+#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc;
- (yyval.interm).op = EOpSubAssign;
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
+ (yyval.interm).op = EOpModAssign;
}
+#line 4075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 80:
-/* Line 1792 of yacc.c */
-#line 677 "glslang.y"
+#line 684 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bit-shift left assign");
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
+ (yyval.interm).op = EOpAddAssign;
}
+#line 4084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 81:
-/* Line 1792 of yacc.c */
-#line 681 "glslang.y"
+#line 688 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bit-shift right assign");
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
+ (yyval.interm).op = EOpSubAssign;
}
+#line 4093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 82:
-/* Line 1792 of yacc.c */
-#line 685 "glslang.y"
+#line 692 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise-and assign");
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpAndAssign;
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
+ (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
}
+#line 4102 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 83:
-/* Line 1792 of yacc.c */
-#line 689 "glslang.y"
+#line 696 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise-xor assign");
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
+ (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
}
+#line 4111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 84:
-/* Line 1792 of yacc.c */
-#line 693 "glslang.y"
+#line 700 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "bitwise-or assign");
- (yyval.interm).loc = (yyvsp[(1) - (1)].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
+ (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
}
+#line 4120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 85:
-/* Line 1792 of yacc.c */
-#line 700 "glslang.y"
+#line 704 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
+ (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
}
+#line 4129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 86:
-/* Line 1792 of yacc.c */
-#line 703 "glslang.y"
+#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.samplerConstructorLocationCheck((yyvsp[(2) - (3)].lex).loc, ",", (yyvsp[(3) - (3)].interm.intermTypedNode));
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).loc);
- if ((yyval.interm.intermTypedNode) == 0) {
- parseContext.binaryOpError((yyvsp[(2) - (3)].lex).loc, ",", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
- (yyval.interm.intermTypedNode) = (yyvsp[(3) - (3)].interm.intermTypedNode);
- }
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
+ (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
}
+#line 4138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 87:
-/* Line 1792 of yacc.c */
-#line 714 "glslang.y"
+#line 715 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.constantValueCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "");
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
+#line 4146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 88:
-/* Line 1792 of yacc.c */
-#line 721 "glslang.y"
+#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.handleFunctionDeclarator((yyvsp[(1) - (2)].interm).loc, *(yyvsp[(1) - (2)].interm).function, true /* prototype */);
- (yyval.interm.intermNode) = 0;
- // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
+ parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
+ if ((yyval.interm.intermTypedNode) == 0) {
+ parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+ }
}
+#line 4159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 89:
-/* Line 1792 of yacc.c */
-#line 726 "glslang.y"
+#line 729 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- if ((yyvsp[(1) - (2)].interm).intermNode && (yyvsp[(1) - (2)].interm).intermNode->getAsAggregate())
- (yyvsp[(1) - (2)].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
- (yyval.interm.intermNode) = (yyvsp[(1) - (2)].interm).intermNode;
+ parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
+#line 4168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 90:
-/* Line 1792 of yacc.c */
-#line 731 "glslang.y"
+#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.profileRequires((yyvsp[(1) - (4)].lex).loc, ENoProfile, 130, 0, "precision statement");
-
- // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
- parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
- parseContext.setDefaultPrecision((yyvsp[(1) - (4)].lex).loc, (yyvsp[(3) - (4)].interm.type), (yyvsp[(2) - (4)].interm.type).qualifier.precision);
+ parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
(yyval.interm.intermNode) = 0;
+ // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
}
+#line 4178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 91:
-/* Line 1792 of yacc.c */
-#line 739 "glslang.y"
+#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.declareBlock((yyvsp[(1) - (2)].interm).loc, *(yyvsp[(1) - (2)].interm).typeList);
- (yyval.interm.intermNode) = 0;
+ if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
+ (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
+ (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
}
+#line 4188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 92:
-/* Line 1792 of yacc.c */
-#line 743 "glslang.y"
+#line 746 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.declareBlock((yyvsp[(1) - (3)].interm).loc, *(yyvsp[(1) - (3)].interm).typeList, (yyvsp[(2) - (3)].lex).string);
+ parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
+
+ // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
+ parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
+ parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
(yyval.interm.intermNode) = 0;
}
+#line 4201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 93:
-/* Line 1792 of yacc.c */
-#line 747 "glslang.y"
+#line 754 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.declareBlock((yyvsp[(1) - (4)].interm).loc, *(yyvsp[(1) - (4)].interm).typeList, (yyvsp[(2) - (4)].lex).string, (yyvsp[(3) - (4)].interm).arraySizes);
+ parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
(yyval.interm.intermNode) = 0;
}
+#line 4210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 94:
-/* Line 1792 of yacc.c */
-#line 751 "glslang.y"
+#line 758 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalQualifierFixCheck((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier);
- parseContext.updateStandaloneQualifierDefaults((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type));
+ parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
(yyval.interm.intermNode) = 0;
}
+#line 4219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 95:
-/* Line 1792 of yacc.c */
-#line 756 "glslang.y"
+#line 762 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.checkNoShaderLayouts((yyvsp[(1) - (3)].interm.type).loc, (yyvsp[(1) - (3)].interm.type).shaderQualifiers);
- parseContext.addQualifierToExisting((yyvsp[(1) - (3)].interm.type).loc, (yyvsp[(1) - (3)].interm.type).qualifier, *(yyvsp[(2) - (3)].lex).string);
+ parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
(yyval.interm.intermNode) = 0;
}
+#line 4228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 96:
-/* Line 1792 of yacc.c */
-#line 761 "glslang.y"
+#line 766 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.checkNoShaderLayouts((yyvsp[(1) - (4)].interm.type).loc, (yyvsp[(1) - (4)].interm.type).shaderQualifiers);
- (yyvsp[(3) - (4)].interm.identifierList)->push_back((yyvsp[(2) - (4)].lex).string);
- parseContext.addQualifierToExisting((yyvsp[(1) - (4)].interm.type).loc, (yyvsp[(1) - (4)].interm.type).qualifier, *(yyvsp[(3) - (4)].interm.identifierList));
+ parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
+ parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
(yyval.interm.intermNode) = 0;
}
+#line 4238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 97:
-/* Line 1792 of yacc.c */
-#line 770 "glslang.y"
- { parseContext.nestedBlockCheck((yyvsp[(1) - (3)].interm.type).loc); }
+#line 771 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
+ parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
+ (yyval.interm.intermNode) = 0;
+ }
+#line 4248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 98:
-/* Line 1792 of yacc.c */
-#line 770 "glslang.y"
+#line 776 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- --parseContext.structNestingLevel;
- parseContext.blockName = (yyvsp[(2) - (6)].lex).string;
- parseContext.globalQualifierFixCheck((yyvsp[(1) - (6)].interm.type).loc, (yyvsp[(1) - (6)].interm.type).qualifier);
- parseContext.checkNoShaderLayouts((yyvsp[(1) - (6)].interm.type).loc, (yyvsp[(1) - (6)].interm.type).shaderQualifiers);
- parseContext.currentBlockQualifier = (yyvsp[(1) - (6)].interm.type).qualifier;
- (yyval.interm).loc = (yyvsp[(1) - (6)].interm.type).loc;
- (yyval.interm).typeList = (yyvsp[(5) - (6)].interm.typeList);
+ parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
+ (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
+ parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
+ (yyval.interm.intermNode) = 0;
}
+#line 4259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 99:
-/* Line 1792 of yacc.c */
-#line 781 "glslang.y"
- {
- (yyval.interm.identifierList) = new TIdentifierList;
- (yyval.interm.identifierList)->push_back((yyvsp[(2) - (2)].lex).string);
- }
+#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
+#line 4265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 100:
-/* Line 1792 of yacc.c */
-#line 785 "glslang.y"
+#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.identifierList) = (yyvsp[(1) - (3)].interm.identifierList);
- (yyval.interm.identifierList)->push_back((yyvsp[(3) - (3)].lex).string);
+ --parseContext.structNestingLevel;
+ parseContext.blockName = (yyvsp[-4].lex).string;
+ parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier);
+ parseContext.checkNoShaderLayouts((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).shaderQualifiers);
+ parseContext.currentBlockQualifier = (yyvsp[-5].interm.type).qualifier;
+ (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
+ (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
}
+#line 4279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 101:
-/* Line 1792 of yacc.c */
-#line 792 "glslang.y"
+#line 796 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).function = (yyvsp[(1) - (2)].interm.function);
- (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc;
+ (yyval.interm.identifierList) = new TIdentifierList;
+ (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
}
+#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 102:
-/* Line 1792 of yacc.c */
-#line 799 "glslang.y"
+#line 800 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
+ (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
+ (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
}
+#line 4297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 103:
-/* Line 1792 of yacc.c */
-#line 802 "glslang.y"
+#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
+ (yyval.interm).function = (yyvsp[-1].interm.function);
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
}
+#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 104:
-/* Line 1792 of yacc.c */
-#line 809 "glslang.y"
+#line 814 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyval.interm.function) = (yyvsp[0].interm.function);
+ }
+#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 105:
+#line 817 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyval.interm.function) = (yyvsp[0].interm.function);
+ }
+#line 4322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 106:
+#line 824 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// Add the parameter
- (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
- if ((yyvsp[(2) - (2)].interm).param.type->getBasicType() != EbtVoid)
- (yyvsp[(1) - (2)].interm.function)->addParameter((yyvsp[(2) - (2)].interm).param);
+ (yyval.interm.function) = (yyvsp[-1].interm.function);
+ if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
+ (yyvsp[-1].interm.function)->addParameter((yyvsp[0].interm).param);
else
- delete (yyvsp[(2) - (2)].interm).param.type;
+ delete (yyvsp[0].interm).param.type;
}
+#line 4335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 105:
-/* Line 1792 of yacc.c */
-#line 817 "glslang.y"
+ case 107:
+#line 832 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
//
// Only first parameter of one-parameter functions can be void
// The check for named parameters not being void is done in parameter_declarator
//
- if ((yyvsp[(3) - (3)].interm).param.type->getBasicType() == EbtVoid) {
+ if ((yyvsp[0].interm).param.type->getBasicType() == EbtVoid) {
//
// This parameter > first is void
//
- parseContext.error((yyvsp[(2) - (3)].lex).loc, "cannot be an argument type except for '(void)'", "void", "");
- delete (yyvsp[(3) - (3)].interm).param.type;
+ parseContext.error((yyvsp[-1].lex).loc, "cannot be an argument type except for '(void)'", "void", "");
+ delete (yyvsp[0].interm).param.type;
} else {
// Add the parameter
- (yyval.interm.function) = (yyvsp[(1) - (3)].interm.function);
- (yyvsp[(1) - (3)].interm.function)->addParameter((yyvsp[(3) - (3)].interm).param);
+ (yyval.interm.function) = (yyvsp[-2].interm.function);
+ (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
}
}
+#line 4357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 106:
-/* Line 1792 of yacc.c */
-#line 837 "glslang.y"
+ case 108:
+#line 852 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- if ((yyvsp[(1) - (3)].interm.type).qualifier.storage != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier.storage != EvqTemporary) {
- parseContext.error((yyvsp[(2) - (3)].lex).loc, "no qualifiers allowed for function return",
- GetStorageQualifierString((yyvsp[(1) - (3)].interm.type).qualifier.storage), "");
+ if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
+ parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
+ GetStorageQualifierString((yyvsp[-2].interm.type).qualifier.storage), "");
}
- if ((yyvsp[(1) - (3)].interm.type).arraySizes)
- parseContext.arraySizeRequiredCheck((yyvsp[(1) - (3)].interm.type).loc, *(yyvsp[(1) - (3)].interm.type).arraySizes);
+ if ((yyvsp[-2].interm.type).arraySizes)
+ parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
// Add the function as a prototype after parsing it (we do not support recursion)
TFunction *function;
- TType type((yyvsp[(1) - (3)].interm.type));
- function = new TFunction((yyvsp[(2) - (3)].lex).string, type);
+ TType type((yyvsp[-2].interm.type));
+
+ // Potentially rename shader entry point function. No-op most of the time.
+ parseContext.renameShaderFunction((yyvsp[-1].lex).string);
+
+ // Make the function
+ function = new TFunction((yyvsp[-1].lex).string, type);
(yyval.interm.function) = function;
}
+#line 4381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 107:
-/* Line 1792 of yacc.c */
-#line 855 "glslang.y"
+ case 109:
+#line 875 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- if ((yyvsp[(1) - (2)].interm.type).arraySizes) {
- parseContext.profileRequires((yyvsp[(1) - (2)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
- parseContext.profileRequires((yyvsp[(1) - (2)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
- parseContext.arraySizeRequiredCheck((yyvsp[(1) - (2)].interm.type).loc, *(yyvsp[(1) - (2)].interm.type).arraySizes);
+ if ((yyvsp[-1].interm.type).arraySizes) {
+ parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+ parseContext.profileRequires((yyvsp[-1].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+ parseContext.arraySizeRequiredCheck((yyvsp[-1].interm.type).loc, *(yyvsp[-1].interm.type).arraySizes);
}
- if ((yyvsp[(1) - (2)].interm.type).basicType == EbtVoid) {
- parseContext.error((yyvsp[(2) - (2)].lex).loc, "illegal use of type 'void'", (yyvsp[(2) - (2)].lex).string->c_str(), "");
+ if ((yyvsp[-1].interm.type).basicType == EbtVoid) {
+ parseContext.error((yyvsp[0].lex).loc, "illegal use of type 'void'", (yyvsp[0].lex).string->c_str(), "");
}
- parseContext.reservedErrorCheck((yyvsp[(2) - (2)].lex).loc, *(yyvsp[(2) - (2)].lex).string);
+ parseContext.reservedErrorCheck((yyvsp[0].lex).loc, *(yyvsp[0].lex).string);
- TParameter param = {(yyvsp[(2) - (2)].lex).string, new TType((yyvsp[(1) - (2)].interm.type))};
- (yyval.interm).loc = (yyvsp[(2) - (2)].lex).loc;
+ TParameter param = {(yyvsp[0].lex).string, new TType((yyvsp[-1].interm.type))};
+ (yyval.interm).loc = (yyvsp[0].lex).loc;
(yyval.interm).param = param;
}
+#line 4401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 108:
-/* Line 1792 of yacc.c */
-#line 870 "glslang.y"
+ case 110:
+#line 890 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- if ((yyvsp[(1) - (3)].interm.type).arraySizes) {
- parseContext.profileRequires((yyvsp[(1) - (3)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
- parseContext.profileRequires((yyvsp[(1) - (3)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
- parseContext.arraySizeRequiredCheck((yyvsp[(1) - (3)].interm.type).loc, *(yyvsp[(1) - (3)].interm.type).arraySizes);
+ if ((yyvsp[-2].interm.type).arraySizes) {
+ parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+ parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+ parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
}
- parseContext.arrayDimCheck((yyvsp[(2) - (3)].lex).loc, (yyvsp[(1) - (3)].interm.type).arraySizes, (yyvsp[(3) - (3)].interm).arraySizes);
+ parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.type).arraySizes, (yyvsp[0].interm).arraySizes);
- parseContext.arraySizeRequiredCheck((yyvsp[(3) - (3)].interm).loc, *(yyvsp[(3) - (3)].interm).arraySizes);
- parseContext.reservedErrorCheck((yyvsp[(2) - (3)].lex).loc, *(yyvsp[(2) - (3)].lex).string);
+ parseContext.arraySizeRequiredCheck((yyvsp[0].interm).loc, *(yyvsp[0].interm).arraySizes);
+ parseContext.reservedErrorCheck((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string);
- (yyvsp[(1) - (3)].interm.type).arraySizes = (yyvsp[(3) - (3)].interm).arraySizes;
+ (yyvsp[-2].interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
- TParameter param = { (yyvsp[(2) - (3)].lex).string, new TType((yyvsp[(1) - (3)].interm.type))};
- (yyval.interm).loc = (yyvsp[(2) - (3)].lex).loc;
+ TParameter param = { (yyvsp[-1].lex).string, new TType((yyvsp[-2].interm.type))};
+ (yyval.interm).loc = (yyvsp[-1].lex).loc;
(yyval.interm).param = param;
}
+#line 4423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 109:
-/* Line 1792 of yacc.c */
-#line 893 "glslang.y"
+ case 111:
+#line 913 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(2) - (2)].interm);
- if ((yyvsp[(1) - (2)].interm.type).qualifier.precision != EpqNone)
- (yyval.interm).param.type->getQualifier().precision = (yyvsp[(1) - (2)].interm.type).qualifier.precision;
+ (yyval.interm) = (yyvsp[0].interm);
+ if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
+ (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
- parseContext.checkNoShaderLayouts((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).shaderQualifiers);
- parseContext.parameterTypeCheck((yyvsp[(2) - (2)].interm).loc, (yyvsp[(1) - (2)].interm.type).qualifier.storage, *(yyval.interm).param.type);
- parseContext.paramCheckFix((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier, *(yyval.interm).param.type);
+ parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
+ parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
+ parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
}
+#line 4439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 110:
-/* Line 1792 of yacc.c */
-#line 904 "glslang.y"
+ case 112:
+#line 924 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (1)].interm);
+ (yyval.interm) = (yyvsp[0].interm);
- parseContext.parameterTypeCheck((yyvsp[(1) - (1)].interm).loc, EvqIn, *(yyvsp[(1) - (1)].interm).param.type);
- parseContext.paramCheckFix((yyvsp[(1) - (1)].interm).loc, EvqTemporary, *(yyval.interm).param.type);
+ parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
+ parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
}
+#line 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 111:
-/* Line 1792 of yacc.c */
-#line 914 "glslang.y"
+ case 113:
+#line 934 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(2) - (2)].interm);
- if ((yyvsp[(1) - (2)].interm.type).qualifier.precision != EpqNone)
- (yyval.interm).param.type->getQualifier().precision = (yyvsp[(1) - (2)].interm.type).qualifier.precision;
- parseContext.precisionQualifierCheck((yyvsp[(1) - (2)].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
+ (yyval.interm) = (yyvsp[0].interm);
+ if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
+ (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
+ parseContext.precisionQualifierCheck((yyvsp[-1].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
- parseContext.checkNoShaderLayouts((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).shaderQualifiers);
- parseContext.parameterTypeCheck((yyvsp[(2) - (2)].interm).loc, (yyvsp[(1) - (2)].interm.type).qualifier.storage, *(yyval.interm).param.type);
- parseContext.paramCheckFix((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier, *(yyval.interm).param.type);
+ parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
+ parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
+ parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
}
+#line 4466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 112:
-/* Line 1792 of yacc.c */
-#line 924 "glslang.y"
+ case 114:
+#line 944 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (1)].interm);
+ (yyval.interm) = (yyvsp[0].interm);
- parseContext.parameterTypeCheck((yyvsp[(1) - (1)].interm).loc, EvqIn, *(yyvsp[(1) - (1)].interm).param.type);
- parseContext.paramCheckFix((yyvsp[(1) - (1)].interm).loc, EvqTemporary, *(yyval.interm).param.type);
+ parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
+ parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
}
+#line 4478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 113:
-/* Line 1792 of yacc.c */
-#line 934 "glslang.y"
+ case 115:
+#line 954 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- TParameter param = { 0, new TType((yyvsp[(1) - (1)].interm.type)) };
+ TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
(yyval.interm).param = param;
- if ((yyvsp[(1) - (1)].interm.type).arraySizes)
- parseContext.arraySizeRequiredCheck((yyvsp[(1) - (1)].interm.type).loc, *(yyvsp[(1) - (1)].interm.type).arraySizes);
+ if ((yyvsp[0].interm.type).arraySizes)
+ parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
}
+#line 4489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 114:
-/* Line 1792 of yacc.c */
-#line 943 "glslang.y"
+ case 116:
+#line 963 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (1)].interm);
+ (yyval.interm) = (yyvsp[0].interm);
}
+#line 4497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 115:
-/* Line 1792 of yacc.c */
-#line 946 "glslang.y"
+ case 117:
+#line 966 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (3)].interm);
- parseContext.declareVariable((yyvsp[(3) - (3)].lex).loc, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(1) - (3)].interm).type);
+ (yyval.interm) = (yyvsp[-2].interm);
+ parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
}
+#line 4506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 116:
-/* Line 1792 of yacc.c */
-#line 950 "glslang.y"
+ case 118:
+#line 970 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (4)].interm);
- parseContext.declareVariable((yyvsp[(3) - (4)].lex).loc, *(yyvsp[(3) - (4)].lex).string, (yyvsp[(1) - (4)].interm).type, (yyvsp[(4) - (4)].interm).arraySizes);
+ (yyval.interm) = (yyvsp[-3].interm);
+ parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
}
+#line 4515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 117:
-/* Line 1792 of yacc.c */
-#line 954 "glslang.y"
+ case 119:
+#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).type = (yyvsp[(1) - (6)].interm).type;
- TIntermNode* initNode = parseContext.declareVariable((yyvsp[(3) - (6)].lex).loc, *(yyvsp[(3) - (6)].lex).string, (yyvsp[(1) - (6)].interm).type, (yyvsp[(4) - (6)].interm).arraySizes, (yyvsp[(6) - (6)].interm.intermTypedNode));
- (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[(1) - (6)].interm).intermNode, initNode, (yyvsp[(5) - (6)].lex).loc);
+ (yyval.interm).type = (yyvsp[-5].interm).type;
+ TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
}
+#line 4525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 118:
-/* Line 1792 of yacc.c */
-#line 959 "glslang.y"
+ case 120:
+#line 979 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).type = (yyvsp[(1) - (5)].interm).type;
- TIntermNode* initNode = parseContext.declareVariable((yyvsp[(3) - (5)].lex).loc, *(yyvsp[(3) - (5)].lex).string, (yyvsp[(1) - (5)].interm).type, 0, (yyvsp[(5) - (5)].interm.intermTypedNode));
- (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[(1) - (5)].interm).intermNode, initNode, (yyvsp[(4) - (5)].lex).loc);
+ (yyval.interm).type = (yyvsp[-4].interm).type;
+ TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
}
+#line 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 119:
-/* Line 1792 of yacc.c */
-#line 967 "glslang.y"
+ case 121:
+#line 987 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).type = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm).type = (yyvsp[0].interm.type);
(yyval.interm).intermNode = 0;
parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
}
+#line 4545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 120:
-/* Line 1792 of yacc.c */
-#line 972 "glslang.y"
+ case 122:
+#line 992 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).type = (yyvsp[(1) - (2)].interm.type);
+ (yyval.interm).type = (yyvsp[-1].interm.type);
(yyval.interm).intermNode = 0;
- parseContext.declareVariable((yyvsp[(2) - (2)].lex).loc, *(yyvsp[(2) - (2)].lex).string, (yyvsp[(1) - (2)].interm.type));
+ parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
}
+#line 4555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 121:
-/* Line 1792 of yacc.c */
-#line 977 "glslang.y"
+ case 123:
+#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).type = (yyvsp[(1) - (3)].interm.type);
+ (yyval.interm).type = (yyvsp[-2].interm.type);
(yyval.interm).intermNode = 0;
- parseContext.declareVariable((yyvsp[(2) - (3)].lex).loc, *(yyvsp[(2) - (3)].lex).string, (yyvsp[(1) - (3)].interm.type), (yyvsp[(3) - (3)].interm).arraySizes);
+ parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
}
+#line 4565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 122:
-/* Line 1792 of yacc.c */
-#line 982 "glslang.y"
+ case 124:
+#line 1002 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).type = (yyvsp[(1) - (5)].interm.type);
- TIntermNode* initNode = parseContext.declareVariable((yyvsp[(2) - (5)].lex).loc, *(yyvsp[(2) - (5)].lex).string, (yyvsp[(1) - (5)].interm.type), (yyvsp[(3) - (5)].interm).arraySizes, (yyvsp[(5) - (5)].interm.intermTypedNode));
- (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[(4) - (5)].lex).loc);
+ (yyval.interm).type = (yyvsp[-4].interm.type);
+ TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
}
+#line 4575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 123:
-/* Line 1792 of yacc.c */
-#line 987 "glslang.y"
+ case 125:
+#line 1007 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).type = (yyvsp[(1) - (4)].interm.type);
- TIntermNode* initNode = parseContext.declareVariable((yyvsp[(2) - (4)].lex).loc, *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), 0, (yyvsp[(4) - (4)].interm.intermTypedNode));
- (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[(3) - (4)].lex).loc);
+ (yyval.interm).type = (yyvsp[-3].interm.type);
+ TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
}
+#line 4585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 124:
-/* Line 1792 of yacc.c */
-#line 996 "glslang.y"
+ case 126:
+#line 1016 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
- parseContext.globalQualifierTypeCheck((yyvsp[(1) - (1)].interm.type).loc, (yyvsp[(1) - (1)].interm.type).qualifier, (yyval.interm.type));
- if ((yyvsp[(1) - (1)].interm.type).arraySizes) {
- parseContext.profileRequires((yyvsp[(1) - (1)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
- parseContext.profileRequires((yyvsp[(1) - (1)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+ parseContext.globalQualifierTypeCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyval.interm.type));
+ if ((yyvsp[0].interm.type).arraySizes) {
+ parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+ parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
}
parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
}
+#line 4601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 125:
-/* Line 1792 of yacc.c */
-#line 1007 "glslang.y"
+ case 127:
+#line 1027 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalQualifierFixCheck((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier);
- parseContext.globalQualifierTypeCheck((yyvsp[(1) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type));
+ parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
+ parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
- if ((yyvsp[(2) - (2)].interm.type).arraySizes) {
- parseContext.profileRequires((yyvsp[(2) - (2)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
- parseContext.profileRequires((yyvsp[(2) - (2)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+ if ((yyvsp[0].interm.type).arraySizes) {
+ parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+ parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
}
- if ((yyvsp[(2) - (2)].interm.type).arraySizes && parseContext.arrayQualifierError((yyvsp[(2) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).qualifier))
- (yyvsp[(2) - (2)].interm.type).arraySizes = 0;
+ if ((yyvsp[0].interm.type).arraySizes && parseContext.arrayQualifierError((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).qualifier))
+ (yyvsp[0].interm.type).arraySizes = 0;
- parseContext.checkNoShaderLayouts((yyvsp[(2) - (2)].interm.type).loc, (yyvsp[(1) - (2)].interm.type).shaderQualifiers);
- (yyvsp[(2) - (2)].interm.type).shaderQualifiers.merge((yyvsp[(1) - (2)].interm.type).shaderQualifiers);
- parseContext.mergeQualifiers((yyvsp[(2) - (2)].interm.type).loc, (yyvsp[(2) - (2)].interm.type).qualifier, (yyvsp[(1) - (2)].interm.type).qualifier, true);
- parseContext.precisionQualifierCheck((yyvsp[(2) - (2)].interm.type).loc, (yyvsp[(2) - (2)].interm.type).basicType, (yyvsp[(2) - (2)].interm.type).qualifier);
+ parseContext.checkNoShaderLayouts((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
+ (yyvsp[0].interm.type).shaderQualifiers.merge((yyvsp[-1].interm.type).shaderQualifiers);
+ parseContext.mergeQualifiers((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyvsp[-1].interm.type).qualifier, true);
+ parseContext.precisionQualifierCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).basicType, (yyvsp[0].interm.type).qualifier);
- (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
if (! (yyval.interm.type).qualifier.isInterpolation() &&
((parseContext.language == EShLangVertex && (yyval.interm.type).qualifier.storage == EvqVaryingOut) ||
(parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
(yyval.interm.type).qualifier.smooth = true;
}
+#line 4630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 126:
-/* Line 1792 of yacc.c */
-#line 1034 "glslang.y"
+ case 128:
+#line 1054 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "invariant");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.invariant = true;
}
+#line 4641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 127:
-/* Line 1792 of yacc.c */
-#line 1043 "glslang.y"
+ case 129:
+#line 1063 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "smooth");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "smooth");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, 0, "smooth");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
+ parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "smooth");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.smooth = true;
}
+#line 4653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 128:
-/* Line 1792 of yacc.c */
-#line 1050 "glslang.y"
+ case 130:
+#line 1070 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "flat");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "flat");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, 0, "flat");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
+ parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "flat");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.flat = true;
}
+#line 4665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 129:
-/* Line 1792 of yacc.c */
-#line 1057 "glslang.y"
+ case 131:
+#line 1077 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "noperspective");
- parseContext.requireProfile((yyvsp[(1) - (1)].lex).loc, ~EEsProfile, "noperspective");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "noperspective");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
+ parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.nopersp = true;
}
+#line 4677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 130:
-/* Line 1792 of yacc.c */
-#line 1064 "glslang.y"
+ case 132:
+#line 1084 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "__explicitInterpAMD");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.explicitInterp = true;
#endif
}
+#line 4691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 131:
-/* Line 1792 of yacc.c */
-#line 1076 "glslang.y"
+ case 133:
+#line 1096 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(3) - (4)].interm.type);
+ (yyval.interm.type) = (yyvsp[-1].interm.type);
}
+#line 4699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 132:
-/* Line 1792 of yacc.c */
-#line 1082 "glslang.y"
+ case 134:
+#line 1102 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
}
+#line 4707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 133:
-/* Line 1792 of yacc.c */
-#line 1085 "glslang.y"
+ case 135:
+#line 1105 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(1) - (3)].interm.type);
- (yyval.interm.type).shaderQualifiers.merge((yyvsp[(3) - (3)].interm.type).shaderQualifiers);
- parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[(3) - (3)].interm.type).qualifier, false);
+ (yyval.interm.type) = (yyvsp[-2].interm.type);
+ (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
+ parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
}
+#line 4717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 134:
-/* Line 1792 of yacc.c */
-#line 1092 "glslang.y"
+ case 136:
+#line 1112 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
- parseContext.setLayoutQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type), *(yyvsp[(1) - (1)].lex).string);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
+ parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
}
+#line 4726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 135:
-/* Line 1792 of yacc.c */
-#line 1096 "glslang.y"
+ case 137:
+#line 1116 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (3)].lex).loc);
- parseContext.setLayoutQualifier((yyvsp[(1) - (3)].lex).loc, (yyval.interm.type), *(yyvsp[(1) - (3)].lex).string, (yyvsp[(3) - (3)].interm.intermTypedNode));
+ (yyval.interm.type).init((yyvsp[-2].lex).loc);
+ parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
}
+#line 4735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 136:
-/* Line 1792 of yacc.c */
-#line 1100 "glslang.y"
+ case 138:
+#line 1120 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ // because "shared" is both an identifier and a keyword
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
TString strShared("shared");
- parseContext.setLayoutQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type), strShared);
+ parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
}
+#line 4745 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 137:
-/* Line 1792 of yacc.c */
-#line 1108 "glslang.y"
+ case 139:
+#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.noContraction = true;
}
+#line 4756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 138:
-/* Line 1792 of yacc.c */
-#line 1117 "glslang.y"
+ case 140:
+#line 1137 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
}
+#line 4764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 139:
-/* Line 1792 of yacc.c */
-#line 1120 "glslang.y"
+ case 141:
+#line 1140 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(1) - (2)].interm.type);
+ (yyval.interm.type) = (yyvsp[-1].interm.type);
if ((yyval.interm.type).basicType == EbtVoid)
- (yyval.interm.type).basicType = (yyvsp[(2) - (2)].interm.type).basicType;
+ (yyval.interm.type).basicType = (yyvsp[0].interm.type).basicType;
- (yyval.interm.type).shaderQualifiers.merge((yyvsp[(2) - (2)].interm.type).shaderQualifiers);
- parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[(2) - (2)].interm.type).qualifier, false);
+ (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
+ parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
}
+#line 4777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 140:
-/* Line 1792 of yacc.c */
-#line 1131 "glslang.y"
+ case 142:
+#line 1151 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
}
+#line 4785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 141:
-/* Line 1792 of yacc.c */
-#line 1134 "glslang.y"
+ case 143:
+#line 1154 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
}
+#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 142:
-/* Line 1792 of yacc.c */
-#line 1137 "glslang.y"
+ case 144:
+#line 1157 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.checkPrecisionQualifier((yyvsp[(1) - (1)].interm.type).loc, (yyvsp[(1) - (1)].interm.type).qualifier.precision);
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
}
+#line 4802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 143:
-/* Line 1792 of yacc.c */
-#line 1141 "glslang.y"
+ case 145:
+#line 1161 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// allow inheritance of storage qualifier from block declaration
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
}
+#line 4811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 144:
-/* Line 1792 of yacc.c */
-#line 1145 "glslang.y"
+ case 146:
+#line 1165 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// allow inheritance of storage qualifier from block declaration
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
}
+#line 4820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 145:
-/* Line 1792 of yacc.c */
-#line 1149 "glslang.y"
+ case 147:
+#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// allow inheritance of storage qualifier from block declaration
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
}
+#line 4829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 146:
-/* Line 1792 of yacc.c */
-#line 1156 "glslang.y"
+ case 148:
+#line 1176 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant
}
+#line 4838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 147:
-/* Line 1792 of yacc.c */
-#line 1160 "glslang.y"
+ case 149:
+#line 1180 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangVertex, "attribute");
- parseContext.checkDeprecated((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 130, "attribute");
- parseContext.checkDeprecated((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, "attribute");
- parseContext.requireNotRemoved((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 420, "attribute");
- parseContext.requireNotRemoved((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, "attribute");
+ parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
+ parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
+ parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "attribute");
+ parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "attribute");
+ parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "attribute");
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "attribute");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "attribute");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqVaryingIn;
}
+#line 4855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 148:
-/* Line 1792 of yacc.c */
-#line 1172 "glslang.y"
+ case 150:
+#line 1192 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.checkDeprecated((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, "varying");
- parseContext.checkDeprecated((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 130, "varying");
- parseContext.requireNotRemoved((yyvsp[(1) - (1)].lex).loc, ECoreProfile, 420, "varying");
- parseContext.requireNotRemoved((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, "varying");
+ parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
+ parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
+ parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "varying");
+ parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "varying");
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "varying");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "varying");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
if (parseContext.language == EShLangVertex)
(yyval.interm.type).qualifier.storage = EvqVaryingOut;
else
(yyval.interm.type).qualifier.storage = EvqVaryingIn;
}
+#line 4874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 149:
-/* Line 1792 of yacc.c */
-#line 1186 "glslang.y"
+ case 151:
+#line 1206 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "inout");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqInOut;
}
+#line 4884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 150:
-/* Line 1792 of yacc.c */
-#line 1191 "glslang.y"
+ case 152:
+#line 1211 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "in");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "in");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
// whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
(yyval.interm.type).qualifier.storage = EvqIn;
}
+#line 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 151:
-/* Line 1792 of yacc.c */
-#line 1197 "glslang.y"
+ case 153:
+#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "out");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "out");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
// whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
(yyval.interm.type).qualifier.storage = EvqOut;
}
+#line 4906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 152:
-/* Line 1792 of yacc.c */
-#line 1203 "glslang.y"
+ case 154:
+#line 1223 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 120, 0, "centroid");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 300, 0, "centroid");
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "centroid");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
+ parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.centroid = true;
}
+#line 4918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 153:
-/* Line 1792 of yacc.c */
-#line 1210 "glslang.y"
+ case 155:
+#line 1230 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "patch");
- parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
+ parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.patch = true;
}
+#line 4929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 154:
-/* Line 1792 of yacc.c */
-#line 1216 "glslang.y"
+ case 156:
+#line 1236 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "sample");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.sample = true;
}
+#line 4939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 155:
-/* Line 1792 of yacc.c */
-#line 1221 "glslang.y"
+ case 157:
+#line 1241 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "uniform");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqUniform;
}
+#line 4949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 156:
-/* Line 1792 of yacc.c */
-#line 1226 "glslang.y"
+ case 158:
+#line 1246 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "buffer");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqBuffer;
}
+#line 4959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 157:
-/* Line 1792 of yacc.c */
-#line 1231 "glslang.y"
+ case 159:
+#line 1251 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, EEsProfile, 310, 0, "shared");
- parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangCompute, "shared");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
+ parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
+ parseContext.requireStage((yyvsp[0].lex).loc, EShLangCompute, "shared");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqShared;
}
+#line 4972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 158:
-/* Line 1792 of yacc.c */
-#line 1238 "glslang.y"
+ case 160:
+#line 1259 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.coherent = true;
}
+#line 4981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 159:
-/* Line 1792 of yacc.c */
-#line 1242 "glslang.y"
+ case 161:
+#line 1263 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.volatil = true;
}
+#line 4990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 160:
-/* Line 1792 of yacc.c */
-#line 1246 "glslang.y"
+ case 162:
+#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.restrict = true;
}
+#line 4999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 161:
-/* Line 1792 of yacc.c */
-#line 1250 "glslang.y"
+ case 163:
+#line 1271 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.readonly = true;
}
+#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 162:
-/* Line 1792 of yacc.c */
-#line 1254 "glslang.y"
+ case 164:
+#line 1275 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.writeonly = true;
}
+#line 5017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 163:
-/* Line 1792 of yacc.c */
-#line 1258 "glslang.y"
+ case 165:
+#line 1279 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.spvRemoved((yyvsp[(1) - (1)].lex).loc, "subroutine");
- parseContext.globalCheck((yyvsp[(1) - (1)].lex).loc, "subroutine");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc);
- (yyval.interm.type).qualifier.storage = EvqUniform;
+ parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
+ parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
}
+#line 5028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 164:
-/* Line 1792 of yacc.c */
-#line 1264 "glslang.y"
+ case 166:
+#line 1285 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.spvRemoved((yyvsp[(1) - (4)].lex).loc, "subroutine");
- parseContext.globalCheck((yyvsp[(1) - (4)].lex).loc, "subroutine");
- (yyval.interm.type).init((yyvsp[(1) - (4)].lex).loc);
- (yyval.interm.type).qualifier.storage = EvqUniform;
- // TODO: 4.0 semantics: subroutines
- // 1) make sure each identifier is a type declared earlier with SUBROUTINE
- // 2) save all of the identifiers for future comparison with the declared function
+ parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
+ parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
+ parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
+ (yyval.interm.type).init((yyvsp[-3].lex).loc);
}
+#line 5039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 165:
-/* Line 1792 of yacc.c */
-#line 1276 "glslang.y"
+ case 167:
+#line 1294 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- // TODO: 4.0 functionality: subroutine type to list
+ // TODO
}
+#line 5047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 166:
-/* Line 1792 of yacc.c */
-#line 1279 "glslang.y"
+ case 168:
+#line 1297 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ // TODO: 4.0 semantics: subroutines
+ // 1) make sure each identifier is a type declared earlier with SUBROUTINE
+ // 2) save all of the identifiers for future comparison with the declared function
}
+#line 5057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 167:
-/* Line 1792 of yacc.c */
-#line 1284 "glslang.y"
+ case 169:
+#line 1305 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
(yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
}
+#line 5066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 168:
-/* Line 1792 of yacc.c */
-#line 1288 "glslang.y"
+ case 170:
+#line 1309 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.arrayDimCheck((yyvsp[(2) - (2)].interm).loc, (yyvsp[(2) - (2)].interm).arraySizes, 0);
- (yyval.interm.type) = (yyvsp[(1) - (2)].interm.type);
+ parseContext.arrayDimCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes, 0);
+ (yyval.interm.type) = (yyvsp[-1].interm.type);
(yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
- (yyval.interm.type).arraySizes = (yyvsp[(2) - (2)].interm).arraySizes;
+ (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
}
+#line 5077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 169:
-/* Line 1792 of yacc.c */
-#line 1297 "glslang.y"
+ case 171:
+#line 1318 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).loc = (yyvsp[(1) - (2)].lex).loc;
+ (yyval.interm).loc = (yyvsp[-1].lex).loc;
(yyval.interm).arraySizes = new TArraySizes;
(yyval.interm).arraySizes->addInnerSize();
}
+#line 5087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 170:
-/* Line 1792 of yacc.c */
-#line 1302 "glslang.y"
+ case 172:
+#line 1323 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm).loc = (yyvsp[(1) - (3)].lex).loc;
+ (yyval.interm).loc = (yyvsp[-2].lex).loc;
(yyval.interm).arraySizes = new TArraySizes;
TArraySize size;
- parseContext.arraySizeCheck((yyvsp[(2) - (3)].interm.intermTypedNode)->getLoc(), (yyvsp[(2) - (3)].interm.intermTypedNode), size);
+ parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
(yyval.interm).arraySizes->addInnerSize(size);
}
+#line 5100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 171:
-/* Line 1792 of yacc.c */
-#line 1310 "glslang.y"
+ case 173:
+#line 1331 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (3)].interm);
+ (yyval.interm) = (yyvsp[-2].interm);
(yyval.interm).arraySizes->addInnerSize();
}
+#line 5109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 172:
-/* Line 1792 of yacc.c */
-#line 1314 "glslang.y"
+ case 174:
+#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm) = (yyvsp[(1) - (4)].interm);
+ (yyval.interm) = (yyvsp[-3].interm);
TArraySize size;
- parseContext.arraySizeCheck((yyvsp[(3) - (4)].interm.intermTypedNode)->getLoc(), (yyvsp[(3) - (4)].interm.intermTypedNode), size);
+ parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
(yyval.interm).arraySizes->addInnerSize(size);
}
+#line 5121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 173:
-/* Line 1792 of yacc.c */
-#line 1324 "glslang.y"
+ case 175:
+#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtVoid;
}
+#line 5130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 174:
-/* Line 1792 of yacc.c */
-#line 1328 "glslang.y"
+ case 176:
+#line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
}
+#line 5139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 175:
-/* Line 1792 of yacc.c */
-#line 1332 "glslang.y"
+ case 177:
+#line 1353 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
}
+#line 5149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 176:
-/* Line 1792 of yacc.c */
-#line 1337 "glslang.y"
+ case 178:
+#line 1358 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
#endif
}
+#line 5161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 177:
-/* Line 1792 of yacc.c */
-#line 1344 "glslang.y"
+ case 179:
+#line 1365 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtInt;
}
+#line 5170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 178:
-/* Line 1792 of yacc.c */
-#line 1348 "glslang.y"
+ case 180:
+#line 1369 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtUint;
}
+#line 5180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 179:
-/* Line 1792 of yacc.c */
-#line 1353 "glslang.y"
+ case 181:
+#line 1374 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtInt64;
}
+#line 5190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 180:
-/* Line 1792 of yacc.c */
-#line 1358 "glslang.y"
+ case 182:
+#line 1379 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtUint64;
}
+#line 5200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 181:
-/* Line 1792 of yacc.c */
-#line 1363 "glslang.y"
+ case 183:
+#line 1384 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtInt16;
+#endif
+ }
+#line 5212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 184:
+#line 1391 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtUint16;
+#endif
+ }
+#line 5224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 185:
+#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtBool;
}
+#line 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 182:
-/* Line 1792 of yacc.c */
-#line 1367 "glslang.y"
+ case 186:
+#line 1402 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setVector(2);
}
+#line 5243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 183:
-/* Line 1792 of yacc.c */
-#line 1372 "glslang.y"
+ case 187:
+#line 1407 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setVector(3);
}
+#line 5253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 184:
-/* Line 1792 of yacc.c */
-#line 1377 "glslang.y"
+ case 188:
+#line 1412 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setVector(4);
}
+#line 5263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 185:
-/* Line 1792 of yacc.c */
-#line 1382 "glslang.y"
+ case 189:
+#line 1417 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double vector");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setVector(2);
}
+#line 5274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 186:
-/* Line 1792 of yacc.c */
-#line 1388 "glslang.y"
+ case 190:
+#line 1423 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double vector");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setVector(3);
}
+#line 5285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 187:
-/* Line 1792 of yacc.c */
-#line 1394 "glslang.y"
+ case 191:
+#line 1429 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double vector");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setVector(4);
}
+#line 5296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 188:
-/* Line 1792 of yacc.c */
-#line 1400 "glslang.y"
+ case 192:
+#line 1435 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setVector(2);
#endif
}
+#line 5309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 189:
-/* Line 1792 of yacc.c */
-#line 1408 "glslang.y"
+ case 193:
+#line 1443 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setVector(3);
#endif
}
+#line 5322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 190:
-/* Line 1792 of yacc.c */
-#line 1416 "glslang.y"
+ case 194:
+#line 1451 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setVector(4);
#endif
}
+#line 5335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 191:
-/* Line 1792 of yacc.c */
-#line 1424 "glslang.y"
+ case 195:
+#line 1459 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtBool;
(yyval.interm.type).setVector(2);
}
+#line 5345 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 192:
-/* Line 1792 of yacc.c */
-#line 1429 "glslang.y"
+ case 196:
+#line 1464 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtBool;
(yyval.interm.type).setVector(3);
}
+#line 5355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 193:
-/* Line 1792 of yacc.c */
-#line 1434 "glslang.y"
+ case 197:
+#line 1469 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtBool;
(yyval.interm.type).setVector(4);
}
+#line 5365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 194:
-/* Line 1792 of yacc.c */
-#line 1439 "glslang.y"
+ case 198:
+#line 1474 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtInt;
(yyval.interm.type).setVector(2);
}
+#line 5375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 195:
-/* Line 1792 of yacc.c */
-#line 1444 "glslang.y"
+ case 199:
+#line 1479 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtInt;
(yyval.interm.type).setVector(3);
}
+#line 5385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 196:
-/* Line 1792 of yacc.c */
-#line 1449 "glslang.y"
+ case 200:
+#line 1484 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtInt;
(yyval.interm.type).setVector(4);
}
+#line 5395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 197:
-/* Line 1792 of yacc.c */
-#line 1454 "glslang.y"
+ case 201:
+#line 1489 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtInt64;
(yyval.interm.type).setVector(2);
}
+#line 5406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 198:
-/* Line 1792 of yacc.c */
-#line 1460 "glslang.y"
+ case 202:
+#line 1495 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtInt64;
(yyval.interm.type).setVector(3);
}
+#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 199:
-/* Line 1792 of yacc.c */
-#line 1466 "glslang.y"
+ case 203:
+#line 1501 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtInt64;
(yyval.interm.type).setVector(4);
}
+#line 5428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 200:
-/* Line 1792 of yacc.c */
-#line 1472 "glslang.y"
+ case 204:
+#line 1507 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer vector");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtInt16;
+ (yyval.interm.type).setVector(2);
+#endif
+ }
+#line 5441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 205:
+#line 1515 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtInt16;
+ (yyval.interm.type).setVector(3);
+#endif
+ }
+#line 5454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 206:
+#line 1523 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtInt16;
+ (yyval.interm.type).setVector(4);
+#endif
+ }
+#line 5467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 207:
+#line 1531 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtUint;
(yyval.interm.type).setVector(2);
}
+#line 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 201:
-/* Line 1792 of yacc.c */
-#line 1478 "glslang.y"
+ case 208:
+#line 1537 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer vector");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtUint;
(yyval.interm.type).setVector(3);
}
+#line 5489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 202:
-/* Line 1792 of yacc.c */
-#line 1484 "glslang.y"
+ case 209:
+#line 1543 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[(1) - (1)].lex).loc, "unsigned integer vector");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtUint;
(yyval.interm.type).setVector(4);
}
+#line 5500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 203:
-/* Line 1792 of yacc.c */
-#line 1490 "glslang.y"
+ case 210:
+#line 1549 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtUint64;
(yyval.interm.type).setVector(2);
}
+#line 5511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 204:
-/* Line 1792 of yacc.c */
-#line 1496 "glslang.y"
+ case 211:
+#line 1555 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtUint64;
(yyval.interm.type).setVector(3);
}
+#line 5522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 205:
-/* Line 1792 of yacc.c */
-#line 1502 "glslang.y"
+ case 212:
+#line 1561 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[(1) - (1)].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtUint64;
(yyval.interm.type).setVector(4);
}
+#line 5533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 206:
-/* Line 1792 of yacc.c */
-#line 1508 "glslang.y"
+ case 213:
+#line 1567 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtUint16;
+ (yyval.interm.type).setVector(2);
+#endif
+ }
+#line 5546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 214:
+#line 1575 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtUint16;
+ (yyval.interm.type).setVector(3);
+#endif
+ }
+#line 5559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 215:
+#line 1583 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+#ifdef AMD_EXTENSIONS
+ parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtUint16;
+ (yyval.interm.type).setVector(4);
+#endif
+ }
+#line 5572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 216:
+#line 1591 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(2, 2);
}
+#line 5582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 207:
-/* Line 1792 of yacc.c */
-#line 1513 "glslang.y"
+ case 217:
+#line 1596 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(3, 3);
}
+#line 5592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 208:
-/* Line 1792 of yacc.c */
-#line 1518 "glslang.y"
+ case 218:
+#line 1601 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(4, 4);
}
+#line 5602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 209:
-/* Line 1792 of yacc.c */
-#line 1523 "glslang.y"
+ case 219:
+#line 1606 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(2, 2);
}
+#line 5612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 210:
-/* Line 1792 of yacc.c */
-#line 1528 "glslang.y"
+ case 220:
+#line 1611 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(2, 3);
}
+#line 5622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 211:
-/* Line 1792 of yacc.c */
-#line 1533 "glslang.y"
+ case 221:
+#line 1616 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(2, 4);
}
+#line 5632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 212:
-/* Line 1792 of yacc.c */
-#line 1538 "glslang.y"
+ case 222:
+#line 1621 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(3, 2);
}
+#line 5642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 213:
-/* Line 1792 of yacc.c */
-#line 1543 "glslang.y"
+ case 223:
+#line 1626 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(3, 3);
}
+#line 5652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 214:
-/* Line 1792 of yacc.c */
-#line 1548 "glslang.y"
+ case 224:
+#line 1631 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(3, 4);
}
+#line 5662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 215:
-/* Line 1792 of yacc.c */
-#line 1553 "glslang.y"
+ case 225:
+#line 1636 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(4, 2);
}
+#line 5672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 216:
-/* Line 1792 of yacc.c */
-#line 1558 "glslang.y"
+ case 226:
+#line 1641 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(4, 3);
}
+#line 5682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 217:
-/* Line 1792 of yacc.c */
-#line 1563 "glslang.y"
+ case 227:
+#line 1646 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
(yyval.interm.type).setMatrix(4, 4);
}
+#line 5692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 218:
-/* Line 1792 of yacc.c */
-#line 1568 "glslang.y"
+ case 228:
+#line 1651 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(2, 2);
}
+#line 5703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 219:
-/* Line 1792 of yacc.c */
-#line 1574 "glslang.y"
+ case 229:
+#line 1657 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(3, 3);
}
+#line 5714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 220:
-/* Line 1792 of yacc.c */
-#line 1580 "glslang.y"
+ case 230:
+#line 1663 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(4, 4);
}
+#line 5725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 221:
-/* Line 1792 of yacc.c */
-#line 1586 "glslang.y"
+ case 231:
+#line 1669 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(2, 2);
}
+#line 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 222:
-/* Line 1792 of yacc.c */
-#line 1592 "glslang.y"
+ case 232:
+#line 1675 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(2, 3);
}
+#line 5747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 223:
-/* Line 1792 of yacc.c */
-#line 1598 "glslang.y"
+ case 233:
+#line 1681 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(2, 4);
}
+#line 5758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 224:
-/* Line 1792 of yacc.c */
-#line 1604 "glslang.y"
+ case 234:
+#line 1687 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(3, 2);
}
+#line 5769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 225:
-/* Line 1792 of yacc.c */
-#line 1610 "glslang.y"
+ case 235:
+#line 1693 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(3, 3);
}
+#line 5780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 226:
-/* Line 1792 of yacc.c */
-#line 1616 "glslang.y"
+ case 236:
+#line 1699 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(3, 4);
}
+#line 5791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 227:
-/* Line 1792 of yacc.c */
-#line 1622 "glslang.y"
+ case 237:
+#line 1705 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(4, 2);
}
+#line 5802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 228:
-/* Line 1792 of yacc.c */
-#line 1628 "glslang.y"
+ case 238:
+#line 1711 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(4, 3);
}
+#line 5813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 229:
-/* Line 1792 of yacc.c */
-#line 1634 "glslang.y"
+ case 239:
+#line 1717 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[(1) - (1)].lex).loc, "double matrix");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
(yyval.interm.type).setMatrix(4, 4);
}
+#line 5824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 230:
-/* Line 1792 of yacc.c */
-#line 1640 "glslang.y"
+ case 240:
+#line 1723 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(2, 2);
#endif
}
+#line 5837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 231:
-/* Line 1792 of yacc.c */
-#line 1648 "glslang.y"
+ case 241:
+#line 1731 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(3, 3);
#endif
}
+#line 5850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 232:
-/* Line 1792 of yacc.c */
-#line 1656 "glslang.y"
+ case 242:
+#line 1739 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(4, 4);
#endif
}
+#line 5863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 233:
-/* Line 1792 of yacc.c */
-#line 1664 "glslang.y"
+ case 243:
+#line 1747 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(2, 2);
#endif
}
+#line 5876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 234:
-/* Line 1792 of yacc.c */
-#line 1672 "glslang.y"
+ case 244:
+#line 1755 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(2, 3);
#endif
}
+#line 5889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 235:
-/* Line 1792 of yacc.c */
-#line 1680 "glslang.y"
+ case 245:
+#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(2, 4);
#endif
}
+#line 5902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 236:
-/* Line 1792 of yacc.c */
-#line 1688 "glslang.y"
+ case 246:
+#line 1771 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(3, 2);
#endif
}
+#line 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 237:
-/* Line 1792 of yacc.c */
-#line 1696 "glslang.y"
+ case 247:
+#line 1779 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(3, 3);
#endif
}
+#line 5928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 238:
-/* Line 1792 of yacc.c */
-#line 1704 "glslang.y"
+ case 248:
+#line 1787 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(3, 4);
#endif
}
+#line 5941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 239:
-/* Line 1792 of yacc.c */
-#line 1712 "glslang.y"
+ case 249:
+#line 1795 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(4, 2);
#endif
}
+#line 5954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 240:
-/* Line 1792 of yacc.c */
-#line 1720 "glslang.y"
+ case 250:
+#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(4, 3);
#endif
}
+#line 5967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 241:
-/* Line 1792 of yacc.c */
-#line 1728 "glslang.y"
+ case 251:
+#line 1811 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifdef AMD_EXTENSIONS
- parseContext.float16Check((yyvsp[(1) - (1)].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
(yyval.interm.type).setMatrix(4, 4);
#endif
}
+#line 5980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 242:
-/* Line 1792 of yacc.c */
-#line 1736 "glslang.y"
+ case 252:
+#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.vulkanRemoved((yyvsp[(1) - (1)].lex).loc, "atomic counter types");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtAtomicUint;
}
+#line 5990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 243:
-/* Line 1792 of yacc.c */
-#line 1741 "glslang.y"
+ case 253:
+#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd1D);
}
+#line 6000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 244:
-/* Line 1792 of yacc.c */
-#line 1746 "glslang.y"
+ case 254:
+#line 1829 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D);
}
+#line 6010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 245:
-/* Line 1792 of yacc.c */
-#line 1751 "glslang.y"
+ case 255:
+#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd3D);
}
+#line 6020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 246:
-/* Line 1792 of yacc.c */
-#line 1756 "glslang.y"
+ case 256:
+#line 1839 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdCube);
}
+#line 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 247:
-/* Line 1792 of yacc.c */
-#line 1761 "glslang.y"
+ case 257:
+#line 1844 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
}
+#line 6040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 248:
-/* Line 1792 of yacc.c */
-#line 1766 "glslang.y"
+ case 258:
+#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
}
+#line 6050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 249:
-/* Line 1792 of yacc.c */
-#line 1771 "glslang.y"
+ case 259:
+#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
}
+#line 6060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 250:
-/* Line 1792 of yacc.c */
-#line 1776 "glslang.y"
+ case 260:
+#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
}
+#line 6070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 251:
-/* Line 1792 of yacc.c */
-#line 1781 "glslang.y"
+ case 261:
+#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
}
+#line 6080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 252:
-/* Line 1792 of yacc.c */
-#line 1786 "glslang.y"
+ case 262:
+#line 1869 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
}
+#line 6090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 253:
-/* Line 1792 of yacc.c */
-#line 1791 "glslang.y"
+ case 263:
+#line 1874 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
}
+#line 6100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 254:
-/* Line 1792 of yacc.c */
-#line 1796 "glslang.y"
+ case 264:
+#line 1879 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
}
+#line 6110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 255:
-/* Line 1792 of yacc.c */
-#line 1801 "glslang.y"
+ case 265:
+#line 1884 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
}
+#line 6120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 256:
-/* Line 1792 of yacc.c */
-#line 1806 "glslang.y"
+ case 266:
+#line 1889 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd1D);
}
+#line 6130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 257:
-/* Line 1792 of yacc.c */
-#line 1811 "glslang.y"
+ case 267:
+#line 1894 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd2D);
}
+#line 6140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 258:
-/* Line 1792 of yacc.c */
-#line 1816 "glslang.y"
+ case 268:
+#line 1899 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd3D);
}
+#line 6150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 259:
-/* Line 1792 of yacc.c */
-#line 1821 "glslang.y"
+ case 269:
+#line 1904 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, EsdCube);
}
+#line 6160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 260:
-/* Line 1792 of yacc.c */
-#line 1826 "glslang.y"
+ case 270:
+#line 1909 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
}
+#line 6170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 261:
-/* Line 1792 of yacc.c */
-#line 1831 "glslang.y"
+ case 271:
+#line 1914 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
}
+#line 6180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 262:
-/* Line 1792 of yacc.c */
-#line 1836 "glslang.y"
+ case 272:
+#line 1919 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
}
+#line 6190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 263:
-/* Line 1792 of yacc.c */
-#line 1841 "glslang.y"
+ case 273:
+#line 1924 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd1D);
}
+#line 6200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 264:
-/* Line 1792 of yacc.c */
-#line 1846 "glslang.y"
+ case 274:
+#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd2D);
}
+#line 6210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 265:
-/* Line 1792 of yacc.c */
-#line 1851 "glslang.y"
+ case 275:
+#line 1934 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd3D);
}
+#line 6220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 266:
-/* Line 1792 of yacc.c */
-#line 1856 "glslang.y"
+ case 276:
+#line 1939 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, EsdCube);
}
+#line 6230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 267:
-/* Line 1792 of yacc.c */
-#line 1861 "glslang.y"
+ case 277:
+#line 1944 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
}
+#line 6240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 268:
-/* Line 1792 of yacc.c */
-#line 1866 "glslang.y"
+ case 278:
+#line 1949 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
}
+#line 6250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 269:
-/* Line 1792 of yacc.c */
-#line 1871 "glslang.y"
+ case 279:
+#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
}
+#line 6260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 270:
-/* Line 1792 of yacc.c */
-#line 1876 "glslang.y"
+ case 280:
+#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdRect);
}
+#line 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 271:
-/* Line 1792 of yacc.c */
-#line 1881 "glslang.y"
+ case 281:
+#line 1964 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
}
+#line 6280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 272:
-/* Line 1792 of yacc.c */
-#line 1886 "glslang.y"
+ case 282:
+#line 1969 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, EsdRect);
}
+#line 6290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 273:
-/* Line 1792 of yacc.c */
-#line 1891 "glslang.y"
+ case 283:
+#line 1974 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, EsdRect);
}
+#line 6300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 274:
-/* Line 1792 of yacc.c */
-#line 1896 "glslang.y"
+ case 284:
+#line 1979 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
}
+#line 6310 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 275:
-/* Line 1792 of yacc.c */
-#line 1901 "glslang.y"
+ case 285:
+#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
}
+#line 6320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 276:
-/* Line 1792 of yacc.c */
-#line 1906 "glslang.y"
+ case 286:
+#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
}
+#line 6330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 277:
-/* Line 1792 of yacc.c */
-#line 1911 "glslang.y"
+ case 287:
+#line 1994 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
}
+#line 6340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 278:
-/* Line 1792 of yacc.c */
-#line 1916 "glslang.y"
+ case 288:
+#line 1999 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
}
+#line 6350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 279:
-/* Line 1792 of yacc.c */
-#line 1921 "glslang.y"
+ case 289:
+#line 2004 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
}
+#line 6360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 280:
-/* Line 1792 of yacc.c */
-#line 1926 "glslang.y"
+ case 290:
+#line 2009 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
}
+#line 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 281:
-/* Line 1792 of yacc.c */
-#line 1931 "glslang.y"
+ case 291:
+#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
}
+#line 6380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 282:
-/* Line 1792 of yacc.c */
-#line 1936 "glslang.y"
+ case 292:
+#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
}
+#line 6390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 283:
-/* Line 1792 of yacc.c */
-#line 1941 "glslang.y"
+ case 293:
+#line 2024 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setPureSampler(false);
}
+#line 6400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 284:
-/* Line 1792 of yacc.c */
-#line 1946 "glslang.y"
+ case 294:
+#line 2029 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setPureSampler(true);
}
+#line 6410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 285:
-/* Line 1792 of yacc.c */
-#line 1951 "glslang.y"
+ case 295:
+#line 2034 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
}
+#line 6420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 286:
-/* Line 1792 of yacc.c */
-#line 1956 "glslang.y"
+ case 296:
+#line 2039 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
}
+#line 6430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 287:
-/* Line 1792 of yacc.c */
-#line 1961 "glslang.y"
+ case 297:
+#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
}
+#line 6440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 288:
-/* Line 1792 of yacc.c */
-#line 1966 "glslang.y"
+ case 298:
+#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
}
+#line 6450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 289:
-/* Line 1792 of yacc.c */
-#line 1971 "glslang.y"
+ case 299:
+#line 2054 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
}
+#line 6460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 290:
-/* Line 1792 of yacc.c */
-#line 1976 "glslang.y"
+ case 300:
+#line 2059 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
}
+#line 6470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 291:
-/* Line 1792 of yacc.c */
-#line 1981 "glslang.y"
+ case 301:
+#line 2064 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
}
+#line 6480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 292:
-/* Line 1792 of yacc.c */
-#line 1986 "glslang.y"
+ case 302:
+#line 2069 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
}
+#line 6490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 293:
-/* Line 1792 of yacc.c */
-#line 1991 "glslang.y"
+ case 303:
+#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
}
+#line 6500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 294:
-/* Line 1792 of yacc.c */
-#line 1996 "glslang.y"
+ case 304:
+#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
}
+#line 6510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 295:
-/* Line 1792 of yacc.c */
-#line 2001 "glslang.y"
+ case 305:
+#line 2084 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
}
+#line 6520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 296:
-/* Line 1792 of yacc.c */
-#line 2006 "glslang.y"
+ case 306:
+#line 2089 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
}
+#line 6530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 297:
-/* Line 1792 of yacc.c */
-#line 2011 "glslang.y"
+ case 307:
+#line 2094 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
}
+#line 6540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 298:
-/* Line 1792 of yacc.c */
-#line 2016 "glslang.y"
+ case 308:
+#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
}
+#line 6550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 299:
-/* Line 1792 of yacc.c */
-#line 2021 "glslang.y"
+ case 309:
+#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
}
+#line 6560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 300:
-/* Line 1792 of yacc.c */
-#line 2026 "glslang.y"
+ case 310:
+#line 2109 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
}
+#line 6570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 301:
-/* Line 1792 of yacc.c */
-#line 2031 "glslang.y"
+ case 311:
+#line 2114 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
}
+#line 6580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 302:
-/* Line 1792 of yacc.c */
-#line 2036 "glslang.y"
+ case 312:
+#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
}
+#line 6590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 303:
-/* Line 1792 of yacc.c */
-#line 2041 "glslang.y"
+ case 313:
+#line 2124 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
}
+#line 6600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 304:
-/* Line 1792 of yacc.c */
-#line 2046 "glslang.y"
+ case 314:
+#line 2129 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
}
+#line 6610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 305:
-/* Line 1792 of yacc.c */
-#line 2051 "glslang.y"
+ case 315:
+#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
}
+#line 6620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 306:
-/* Line 1792 of yacc.c */
-#line 2056 "glslang.y"
+ case 316:
+#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
}
+#line 6630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 307:
-/* Line 1792 of yacc.c */
-#line 2061 "glslang.y"
+ case 317:
+#line 2144 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
}
+#line 6640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 308:
-/* Line 1792 of yacc.c */
-#line 2066 "glslang.y"
+ case 318:
+#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
}
+#line 6650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 309:
-/* Line 1792 of yacc.c */
-#line 2071 "glslang.y"
+ case 319:
+#line 2154 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
}
+#line 6660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 310:
-/* Line 1792 of yacc.c */
-#line 2076 "glslang.y"
+ case 320:
+#line 2159 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
}
+#line 6670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 311:
-/* Line 1792 of yacc.c */
-#line 2081 "glslang.y"
+ case 321:
+#line 2164 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
}
+#line 6680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 312:
-/* Line 1792 of yacc.c */
-#line 2086 "glslang.y"
+ case 322:
+#line 2169 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
}
+#line 6690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 313:
-/* Line 1792 of yacc.c */
-#line 2091 "glslang.y"
+ case 323:
+#line 2174 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
}
+#line 6700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 314:
-/* Line 1792 of yacc.c */
-#line 2096 "glslang.y"
+ case 324:
+#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
}
+#line 6710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 315:
-/* Line 1792 of yacc.c */
-#line 2101 "glslang.y"
+ case 325:
+#line 2184 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
}
+#line 6720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 316:
-/* Line 1792 of yacc.c */
-#line 2106 "glslang.y"
+ case 326:
+#line 2189 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
}
+#line 6730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 317:
-/* Line 1792 of yacc.c */
-#line 2111 "glslang.y"
+ case 327:
+#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
}
+#line 6740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 318:
-/* Line 1792 of yacc.c */
-#line 2116 "glslang.y"
+ case 328:
+#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
}
+#line 6750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 319:
-/* Line 1792 of yacc.c */
-#line 2121 "glslang.y"
+ case 329:
+#line 2204 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
}
+#line 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 320:
-/* Line 1792 of yacc.c */
-#line 2126 "glslang.y"
+ case 330:
+#line 2209 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
}
+#line 6770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 321:
-/* Line 1792 of yacc.c */
-#line 2131 "glslang.y"
+ case 331:
+#line 2214 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
}
+#line 6780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 322:
-/* Line 1792 of yacc.c */
-#line 2136 "glslang.y"
+ case 332:
+#line 2219 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
}
+#line 6790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 323:
-/* Line 1792 of yacc.c */
-#line 2141 "glslang.y"
+ case 333:
+#line 2224 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
}
+#line 6800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 324:
-/* Line 1792 of yacc.c */
-#line 2146 "glslang.y"
+ case 334:
+#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
}
+#line 6810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 325:
-/* Line 1792 of yacc.c */
-#line 2151 "glslang.y"
+ case 335:
+#line 2234 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
}
+#line 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 326:
-/* Line 1792 of yacc.c */
-#line 2156 "glslang.y"
+ case 336:
+#line 2239 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
}
+#line 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 327:
-/* Line 1792 of yacc.c */
-#line 2161 "glslang.y"
+ case 337:
+#line 2244 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
}
+#line 6840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 328:
-/* Line 1792 of yacc.c */
-#line 2166 "glslang.y"
+ case 338:
+#line 2249 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
}
+#line 6850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 329:
-/* Line 1792 of yacc.c */
-#line 2171 "glslang.y"
+ case 339:
+#line 2254 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
}
+#line 6860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 330:
-/* Line 1792 of yacc.c */
-#line 2176 "glslang.y"
+ case 340:
+#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
}
+#line 6870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 331:
-/* Line 1792 of yacc.c */
-#line 2181 "glslang.y"
+ case 341:
+#line 2264 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
}
+#line 6880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 332:
-/* Line 1792 of yacc.c */
-#line 2186 "glslang.y"
+ case 342:
+#line 2269 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
}
+#line 6890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 333:
-/* Line 1792 of yacc.c */
-#line 2191 "glslang.y"
+ case 343:
+#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
}
+#line 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 334:
-/* Line 1792 of yacc.c */
-#line 2196 "glslang.y"
+ case 344:
+#line 2279 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
}
+#line 6910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 335:
-/* Line 1792 of yacc.c */
-#line 2201 "glslang.y"
+ case 345:
+#line 2284 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
}
+#line 6920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 336:
-/* Line 1792 of yacc.c */
-#line 2206 "glslang.y"
+ case 346:
+#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
}
+#line 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 337:
-/* Line 1792 of yacc.c */
-#line 2211 "glslang.y"
+ case 347:
+#line 2294 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
}
+#line 6940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 338:
-/* Line 1792 of yacc.c */
-#line 2216 "glslang.y"
+ case 348:
+#line 2299 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
}
+#line 6950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 339:
-/* Line 1792 of yacc.c */
-#line 2221 "glslang.y"
+ case 349:
+#line 2304 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
}
+#line 6960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 340:
-/* Line 1792 of yacc.c */
-#line 2226 "glslang.y"
+ case 350:
+#line 2309 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
}
+#line 6970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 341:
-/* Line 1792 of yacc.c */
-#line 2231 "glslang.y"
+ case 351:
+#line 2314 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
}
+#line 6980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 342:
-/* Line 1792 of yacc.c */
-#line 2236 "glslang.y"
+ case 352:
+#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
}
+#line 6990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 343:
-/* Line 1792 of yacc.c */
-#line 2241 "glslang.y"
+ case 353:
+#line 2324 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
}
+#line 7000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 344:
-/* Line 1792 of yacc.c */
-#line 2246 "glslang.y"
+ case 354:
+#line 2329 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
}
+#line 7010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 345:
-/* Line 1792 of yacc.c */
-#line 2251 "glslang.y"
+ case 355:
+#line 2334 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
}
+#line 7020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 346:
-/* Line 1792 of yacc.c */
-#line 2256 "glslang.y"
+ case 356:
+#line 2339 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
}
+#line 7030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 347:
-/* Line 1792 of yacc.c */
-#line 2261 "glslang.y"
+ case 357:
+#line 2344 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
}
+#line 7040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 348:
-/* Line 1792 of yacc.c */
-#line 2266 "glslang.y"
+ case 358:
+#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
}
+#line 7050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 349:
-/* Line 1792 of yacc.c */
-#line 2271 "glslang.y"
+ case 359:
+#line 2354 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
}
+#line 7060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 350:
-/* Line 1792 of yacc.c */
-#line 2276 "glslang.y"
+ case 360:
+#line 2359 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
}
+#line 7070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 351:
-/* Line 1792 of yacc.c */
-#line 2281 "glslang.y"
+ case 361:
+#line 2364 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ // GL_OES_EGL_image_external
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D);
(yyval.interm.type).sampler.external = true;
}
+#line 7081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 352:
-/* Line 1792 of yacc.c */
-#line 2287 "glslang.y"
+ case 362:
+#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtFloat);
}
+#line 7092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 353:
-/* Line 1792 of yacc.c */
-#line 2293 "glslang.y"
+ case 363:
+#line 2376 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtFloat, true);
}
+#line 7103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 354:
-/* Line 1792 of yacc.c */
-#line 2299 "glslang.y"
+ case 364:
+#line 2382 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtInt);
}
+#line 7114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 355:
-/* Line 1792 of yacc.c */
-#line 2305 "glslang.y"
+ case 365:
+#line 2388 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtInt, true);
}
+#line 7125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 356:
-/* Line 1792 of yacc.c */
-#line 2311 "glslang.y"
+ case 366:
+#line 2394 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtUint);
}
+#line 7136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 357:
-/* Line 1792 of yacc.c */
-#line 2317 "glslang.y"
+ case 367:
+#line 2400 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.requireStage((yyvsp[(1) - (1)].lex).loc, EShLangFragment, "subpass input");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtUint, true);
}
+#line 7147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 358:
-/* Line 1792 of yacc.c */
-#line 2323 "glslang.y"
+ case 368:
+#line 2406 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
(yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
}
+#line 7157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 359:
-/* Line 1792 of yacc.c */
-#line 2328 "glslang.y"
+ case 369:
+#line 2411 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
//
// This is for user defined type names. The lexical phase looked up the
// type.
//
- if (const TVariable* variable = ((yyvsp[(1) - (1)].lex).symbol)->getAsVariable()) {
+ if (const TVariable* variable = ((yyvsp[0].lex).symbol)->getAsVariable()) {
const TType& structure = variable->getType();
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtStruct;
(yyval.interm.type).userDef = &structure;
} else
- parseContext.error((yyvsp[(1) - (1)].lex).loc, "expected type name", (yyvsp[(1) - (1)].lex).string->c_str(), "");
+ parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
}
+#line 7175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 360:
-/* Line 1792 of yacc.c */
-#line 2344 "glslang.y"
+ case 370:
+#line 2427 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
- parseContext.handlePrecisionQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
+ parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
}
+#line 7185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 361:
-/* Line 1792 of yacc.c */
-#line 2349 "glslang.y"
+ case 371:
+#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
- parseContext.handlePrecisionQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
+ parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
}
+#line 7195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 362:
-/* Line 1792 of yacc.c */
-#line 2354 "glslang.y"
+ case 372:
+#line 2437 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.profileRequires((yyvsp[(1) - (1)].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
- (yyval.interm.type).init((yyvsp[(1) - (1)].lex).loc, parseContext.symbolTable.atGlobalLevel());
- parseContext.handlePrecisionQualifier((yyvsp[(1) - (1)].lex).loc, (yyval.interm.type).qualifier, EpqLow);
+ parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
}
+#line 7205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 363:
-/* Line 1792 of yacc.c */
-#line 2362 "glslang.y"
- { parseContext.nestedStructCheck((yyvsp[(1) - (3)].lex).loc); }
+ case 373:
+#line 2445 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
+#line 7211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 364:
-/* Line 1792 of yacc.c */
-#line 2362 "glslang.y"
+ case 374:
+#line 2445 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- TType* structure = new TType((yyvsp[(5) - (6)].interm.typeList), *(yyvsp[(2) - (6)].lex).string);
- parseContext.structArrayCheck((yyvsp[(2) - (6)].lex).loc, *structure);
- TVariable* userTypeDef = new TVariable((yyvsp[(2) - (6)].lex).string, *structure, true);
+ TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
+ parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
+ TVariable* userTypeDef = new TVariable((yyvsp[-4].lex).string, *structure, true);
if (! parseContext.symbolTable.insert(*userTypeDef))
- parseContext.error((yyvsp[(2) - (6)].lex).loc, "redefinition", (yyvsp[(2) - (6)].lex).string->c_str(), "struct");
- (yyval.interm.type).init((yyvsp[(1) - (6)].lex).loc);
+ parseContext.error((yyvsp[-4].lex).loc, "redefinition", (yyvsp[-4].lex).string->c_str(), "struct");
+ (yyval.interm.type).init((yyvsp[-5].lex).loc);
(yyval.interm.type).basicType = EbtStruct;
(yyval.interm.type).userDef = structure;
--parseContext.structNestingLevel;
}
+#line 7227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 365:
-/* Line 1792 of yacc.c */
-#line 2373 "glslang.y"
- { parseContext.nestedStructCheck((yyvsp[(1) - (2)].lex).loc); }
+ case 375:
+#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
+#line 7233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 366:
-/* Line 1792 of yacc.c */
-#line 2373 "glslang.y"
+ case 376:
+#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString(""));
- (yyval.interm.type).init((yyvsp[(1) - (5)].lex).loc);
+ TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
+ (yyval.interm.type).init((yyvsp[-4].lex).loc);
(yyval.interm.type).basicType = EbtStruct;
(yyval.interm.type).userDef = structure;
--parseContext.structNestingLevel;
}
+#line 7245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 367:
-/* Line 1792 of yacc.c */
-#line 2383 "glslang.y"
+ case 377:
+#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
+ (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
}
+#line 7253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 368:
-/* Line 1792 of yacc.c */
-#line 2386 "glslang.y"
+ case 378:
+#line 2469 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
- for (unsigned int i = 0; i < (yyvsp[(2) - (2)].interm.typeList)->size(); ++i) {
+ (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
+ for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
- if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[(2) - (2)].interm.typeList))[i].type->getFieldName())
- parseContext.error((*(yyvsp[(2) - (2)].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[(2) - (2)].interm.typeList))[i].type->getFieldName().c_str());
+ if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[0].interm.typeList))[i].type->getFieldName())
+ parseContext.error((*(yyvsp[0].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[0].interm.typeList))[i].type->getFieldName().c_str());
}
- (yyval.interm.typeList)->push_back((*(yyvsp[(2) - (2)].interm.typeList))[i]);
+ (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
}
}
+#line 7268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 369:
-/* Line 1792 of yacc.c */
-#line 2399 "glslang.y"
+ case 379:
+#line 2482 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- if ((yyvsp[(1) - (3)].interm.type).arraySizes) {
- parseContext.profileRequires((yyvsp[(1) - (3)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
- parseContext.profileRequires((yyvsp[(1) - (3)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+ if ((yyvsp[-2].interm.type).arraySizes) {
+ parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+ parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
if (parseContext.profile == EEsProfile)
- parseContext.arraySizeRequiredCheck((yyvsp[(1) - (3)].interm.type).loc, *(yyvsp[(1) - (3)].interm.type).arraySizes);
+ parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
}
- (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
+ (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
- parseContext.voidErrorCheck((yyvsp[(1) - (3)].interm.type).loc, (*(yyvsp[(2) - (3)].interm.typeList))[0].type->getFieldName(), (yyvsp[(1) - (3)].interm.type).basicType);
- parseContext.precisionQualifierCheck((yyvsp[(1) - (3)].interm.type).loc, (yyvsp[(1) - (3)].interm.type).basicType, (yyvsp[(1) - (3)].interm.type).qualifier);
+ parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
+ parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier);
for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
- parseContext.arrayDimCheck((yyvsp[(1) - (3)].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[(1) - (3)].interm.type).arraySizes);
- (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[(1) - (3)].interm.type));
+ parseContext.arrayDimCheck((yyvsp[-2].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[-2].interm.type).arraySizes);
+ (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
}
}
+#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 370:
-/* Line 1792 of yacc.c */
-#line 2417 "glslang.y"
+ case 380:
+#line 2500 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalQualifierFixCheck((yyvsp[(1) - (4)].interm.type).loc, (yyvsp[(1) - (4)].interm.type).qualifier);
- if ((yyvsp[(2) - (4)].interm.type).arraySizes) {
- parseContext.profileRequires((yyvsp[(2) - (4)].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
- parseContext.profileRequires((yyvsp[(2) - (4)].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
+ parseContext.globalQualifierFixCheck((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier);
+ if ((yyvsp[-2].interm.type).arraySizes) {
+ parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+ parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
if (parseContext.profile == EEsProfile)
- parseContext.arraySizeRequiredCheck((yyvsp[(2) - (4)].interm.type).loc, *(yyvsp[(2) - (4)].interm.type).arraySizes);
+ parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
}
- (yyval.interm.typeList) = (yyvsp[(3) - (4)].interm.typeList);
+ (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
- parseContext.checkNoShaderLayouts((yyvsp[(1) - (4)].interm.type).loc, (yyvsp[(1) - (4)].interm.type).shaderQualifiers);
- parseContext.voidErrorCheck((yyvsp[(2) - (4)].interm.type).loc, (*(yyvsp[(3) - (4)].interm.typeList))[0].type->getFieldName(), (yyvsp[(2) - (4)].interm.type).basicType);
- parseContext.mergeQualifiers((yyvsp[(2) - (4)].interm.type).loc, (yyvsp[(2) - (4)].interm.type).qualifier, (yyvsp[(1) - (4)].interm.type).qualifier, true);
- parseContext.precisionQualifierCheck((yyvsp[(2) - (4)].interm.type).loc, (yyvsp[(2) - (4)].interm.type).basicType, (yyvsp[(2) - (4)].interm.type).qualifier);
+ parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
+ parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
+ parseContext.mergeQualifiers((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, (yyvsp[-3].interm.type).qualifier, true);
+ parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier);
for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
- parseContext.arrayDimCheck((yyvsp[(1) - (4)].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[(2) - (4)].interm.type).arraySizes);
- (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[(2) - (4)].interm.type));
+ parseContext.arrayDimCheck((yyvsp[-3].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[-2].interm.type).arraySizes);
+ (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
}
}
+#line 7317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 371:
-/* Line 1792 of yacc.c */
-#line 2441 "glslang.y"
+ case 381:
+#line 2524 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.typeList) = new TTypeList;
- (yyval.interm.typeList)->push_back((yyvsp[(1) - (1)].interm.typeLine));
+ (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
}
+#line 7326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 372:
-/* Line 1792 of yacc.c */
-#line 2445 "glslang.y"
+ case 382:
+#line 2528 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
+ (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
}
+#line 7334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 373:
-/* Line 1792 of yacc.c */
-#line 2451 "glslang.y"
+ case 383:
+#line 2534 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.typeLine).type = new TType(EbtVoid);
- (yyval.interm.typeLine).loc = (yyvsp[(1) - (1)].lex).loc;
- (yyval.interm.typeLine).type->setFieldName(*(yyvsp[(1) - (1)].lex).string);
+ (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
+ (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
}
+#line 7344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 374:
-/* Line 1792 of yacc.c */
-#line 2456 "glslang.y"
+ case 384:
+#line 2539 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.arrayDimCheck((yyvsp[(1) - (2)].lex).loc, (yyvsp[(2) - (2)].interm).arraySizes, 0);
+ parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes, 0);
(yyval.interm.typeLine).type = new TType(EbtVoid);
- (yyval.interm.typeLine).loc = (yyvsp[(1) - (2)].lex).loc;
- (yyval.interm.typeLine).type->setFieldName(*(yyvsp[(1) - (2)].lex).string);
- (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[(2) - (2)].interm).arraySizes);
+ (yyval.interm.typeLine).loc = (yyvsp[-1].lex).loc;
+ (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
+ (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[0].interm).arraySizes);
}
+#line 7357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 375:
-/* Line 1792 of yacc.c */
-#line 2467 "glslang.y"
+ case 385:
+#line 2550 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
+#line 7365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 376:
-/* Line 1792 of yacc.c */
-#line 2470 "glslang.y"
+ case 386:
+#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
const char* initFeature = "{ } style initializers";
- parseContext.requireProfile((yyvsp[(1) - (3)].lex).loc, ~EEsProfile, initFeature);
- parseContext.profileRequires((yyvsp[(1) - (3)].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
- (yyval.interm.intermTypedNode) = (yyvsp[(2) - (3)].interm.intermTypedNode);
+ parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
+ parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
+ (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
}
+#line 7376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 377:
-/* Line 1792 of yacc.c */
-#line 2476 "glslang.y"
+ case 387:
+#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
const char* initFeature = "{ } style initializers";
- parseContext.requireProfile((yyvsp[(1) - (4)].lex).loc, ~EEsProfile, initFeature);
- parseContext.profileRequires((yyvsp[(1) - (4)].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
- (yyval.interm.intermTypedNode) = (yyvsp[(2) - (4)].interm.intermTypedNode);
+ parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
+ parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
+ (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
+#line 7387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 378:
-/* Line 1792 of yacc.c */
-#line 2485 "glslang.y"
+ case 388:
+#line 2568 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[(1) - (1)].interm.intermTypedNode), (yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc());
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
}
+#line 7395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 379:
-/* Line 1792 of yacc.c */
-#line 2488 "glslang.y"
+ case 389:
+#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
}
+#line 7403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 380:
-/* Line 1792 of yacc.c */
-#line 2494 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 390:
+#line 2577 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 381:
-/* Line 1792 of yacc.c */
-#line 2498 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 391:
+#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 382:
-/* Line 1792 of yacc.c */
-#line 2499 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 392:
+#line 2582 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 383:
-/* Line 1792 of yacc.c */
-#line 2505 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 393:
+#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 384:
-/* Line 1792 of yacc.c */
-#line 2506 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 394:
+#line 2589 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 385:
-/* Line 1792 of yacc.c */
-#line 2507 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 395:
+#line 2590 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 386:
-/* Line 1792 of yacc.c */
-#line 2508 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 396:
+#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 387:
-/* Line 1792 of yacc.c */
-#line 2509 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 397:
+#line 2592 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 388:
-/* Line 1792 of yacc.c */
-#line 2510 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 398:
+#line 2593 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 389:
-/* Line 1792 of yacc.c */
-#line 2511 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 399:
+#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 390:
-/* Line 1792 of yacc.c */
-#line 2515 "glslang.y"
+ case 400:
+#line 2598 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = 0; }
+#line 7469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 391:
-/* Line 1792 of yacc.c */
-#line 2516 "glslang.y"
+ case 401:
+#line 2599 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.push();
++parseContext.statementNestingLevel;
}
+#line 7478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 392:
-/* Line 1792 of yacc.c */
-#line 2520 "glslang.y"
+ case 402:
+#line 2603 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
--parseContext.statementNestingLevel;
}
+#line 7487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 393:
-/* Line 1792 of yacc.c */
-#line 2524 "glslang.y"
+ case 403:
+#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- if ((yyvsp[(3) - (5)].interm.intermNode) && (yyvsp[(3) - (5)].interm.intermNode)->getAsAggregate())
- (yyvsp[(3) - (5)].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
- (yyval.interm.intermNode) = (yyvsp[(3) - (5)].interm.intermNode);
+ if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
+ (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
+ (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
}
+#line 7497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 394:
-/* Line 1792 of yacc.c */
-#line 2532 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 404:
+#line 2615 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 395:
-/* Line 1792 of yacc.c */
-#line 2533 "glslang.y"
- { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+ case 405:
+#line 2616 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 396:
-/* Line 1792 of yacc.c */
-#line 2537 "glslang.y"
+ case 406:
+#line 2620 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
++parseContext.controlFlowNestingLevel;
}
+#line 7517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 397:
-/* Line 1792 of yacc.c */
-#line 2540 "glslang.y"
+ case 407:
+#line 2623 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
--parseContext.controlFlowNestingLevel;
- (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode);
+ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
+#line 7526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 398:
-/* Line 1792 of yacc.c */
-#line 2544 "glslang.y"
+ case 408:
+#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.push();
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
+#line 7536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 399:
-/* Line 1792 of yacc.c */
-#line 2549 "glslang.y"
+ case 409:
+#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
- (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode);
+ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
+#line 7547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 400:
-/* Line 1792 of yacc.c */
-#line 2558 "glslang.y"
+ case 410:
+#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
}
+#line 7555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 401:
-/* Line 1792 of yacc.c */
-#line 2561 "glslang.y"
+ case 411:
+#line 2644 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- if ((yyvsp[(2) - (3)].interm.intermNode) && (yyvsp[(2) - (3)].interm.intermNode)->getAsAggregate())
- (yyvsp[(2) - (3)].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
- (yyval.interm.intermNode) = (yyvsp[(2) - (3)].interm.intermNode);
+ if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
+ (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
+ (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
}
+#line 7565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 402:
-/* Line 1792 of yacc.c */
-#line 2569 "glslang.y"
+ case 412:
+#line 2652 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode));
- if ((yyvsp[(1) - (1)].interm.intermNode) && (yyvsp[(1) - (1)].interm.intermNode)->getAsBranchNode() && ((yyvsp[(1) - (1)].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
- (yyvsp[(1) - (1)].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
- parseContext.wrapupSwitchSubsequence(0, (yyvsp[(1) - (1)].interm.intermNode));
+ (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
+ if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
+ (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
+ parseContext.wrapupSwitchSubsequence(0, (yyvsp[0].interm.intermNode));
(yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case
}
}
+#line 7578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 403:
-/* Line 1792 of yacc.c */
-#line 2577 "glslang.y"
+ case 413:
+#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- if ((yyvsp[(2) - (2)].interm.intermNode) && (yyvsp[(2) - (2)].interm.intermNode)->getAsBranchNode() && ((yyvsp[(2) - (2)].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
- (yyvsp[(2) - (2)].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
- parseContext.wrapupSwitchSubsequence((yyvsp[(1) - (2)].interm.intermNode) ? (yyvsp[(1) - (2)].interm.intermNode)->getAsAggregate() : 0, (yyvsp[(2) - (2)].interm.intermNode));
+ if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
+ (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
+ parseContext.wrapupSwitchSubsequence((yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0, (yyvsp[0].interm.intermNode));
(yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case
} else
- (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode));
+ (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
}
+#line 7591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 404:
-/* Line 1792 of yacc.c */
-#line 2588 "glslang.y"
+ case 414:
+#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = 0; }
+#line 7597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 405:
-/* Line 1792 of yacc.c */
-#line 2589 "glslang.y"
- { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
+ case 415:
+#line 2672 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
+#line 7603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 406:
-/* Line 1792 of yacc.c */
-#line 2593 "glslang.y"
+ case 416:
+#line 2676 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.boolCheck((yyvsp[(1) - (5)].lex).loc, (yyvsp[(3) - (5)].interm.intermTypedNode));
- (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[(3) - (5)].interm.intermTypedNode), (yyvsp[(5) - (5)].interm.nodePair), (yyvsp[(1) - (5)].lex).loc);
+ parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
+ (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
}
+#line 7612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 407:
-/* Line 1792 of yacc.c */
-#line 2600 "glslang.y"
+ case 417:
+#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
- (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermNode);
+ (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
+ (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
}
+#line 7621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 408:
-/* Line 1792 of yacc.c */
-#line 2604 "glslang.y"
+ case 418:
+#line 2687 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
+ (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
(yyval.interm.nodePair).node2 = 0;
}
+#line 7630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 409:
-/* Line 1792 of yacc.c */
-#line 2612 "glslang.y"
+ case 419:
+#line 2695 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
- parseContext.boolCheck((yyvsp[(1) - (1)].interm.intermTypedNode)->getLoc(), (yyvsp[(1) - (1)].interm.intermTypedNode));
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+ parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
}
+#line 7639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 410:
-/* Line 1792 of yacc.c */
-#line 2616 "glslang.y"
+ case 420:
+#line 2699 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.boolCheck((yyvsp[(2) - (4)].lex).loc, (yyvsp[(1) - (4)].interm.type));
+ parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
- TType type((yyvsp[(1) - (4)].interm.type));
- TIntermNode* initNode = parseContext.declareVariable((yyvsp[(2) - (4)].lex).loc, *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), 0, (yyvsp[(4) - (4)].interm.intermTypedNode));
+ TType type((yyvsp[-3].interm.type));
+ TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
if (initNode)
(yyval.interm.intermTypedNode) = initNode->getAsTyped();
else
(yyval.interm.intermTypedNode) = 0;
}
+#line 7654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 411:
-/* Line 1792 of yacc.c */
-#line 2629 "glslang.y"
+ case 421:
+#line 2712 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// start new switch sequence on the switch stack
++parseContext.controlFlowNestingLevel;
@@ -7778,13 +7663,13 @@ yyreduce:
parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
parseContext.symbolTable.push();
}
+#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 412:
-/* Line 1792 of yacc.c */
-#line 2637 "glslang.y"
+ case 422:
+#line 2720 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[(1) - (8)].lex).loc, (yyvsp[(3) - (8)].interm.intermTypedNode), (yyvsp[(7) - (8)].interm.intermNode) ? (yyvsp[(7) - (8)].interm.intermNode)->getAsAggregate() : 0);
+ (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
delete parseContext.switchSequenceStack.back();
parseContext.switchSequenceStack.pop_back();
parseContext.switchLevel.pop_back();
@@ -7792,299 +7677,311 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
+#line 7681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 413:
-/* Line 1792 of yacc.c */
-#line 2649 "glslang.y"
+ case 423:
+#line 2732 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
}
+#line 7689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 414:
-/* Line 1792 of yacc.c */
-#line 2652 "glslang.y"
+ case 424:
+#line 2735 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
+#line 7697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 415:
-/* Line 1792 of yacc.c */
-#line 2658 "glslang.y"
+ case 425:
+#line 2741 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
if (parseContext.switchLevel.size() == 0)
- parseContext.error((yyvsp[(1) - (3)].lex).loc, "cannot appear outside switch statement", "case", "");
+ parseContext.error((yyvsp[-2].lex).loc, "cannot appear outside switch statement", "case", "");
else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
- parseContext.error((yyvsp[(1) - (3)].lex).loc, "cannot be nested inside control flow", "case", "");
+ parseContext.error((yyvsp[-2].lex).loc, "cannot be nested inside control flow", "case", "");
else {
- parseContext.constantValueCheck((yyvsp[(2) - (3)].interm.intermTypedNode), "case");
- parseContext.integerCheck((yyvsp[(2) - (3)].interm.intermTypedNode), "case");
- (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).loc);
+ parseContext.constantValueCheck((yyvsp[-1].interm.intermTypedNode), "case");
+ parseContext.integerCheck((yyvsp[-1].interm.intermTypedNode), "case");
+ (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
}
}
+#line 7714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 416:
-/* Line 1792 of yacc.c */
-#line 2670 "glslang.y"
+ case 426:
+#line 2753 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
if (parseContext.switchLevel.size() == 0)
- parseContext.error((yyvsp[(1) - (2)].lex).loc, "cannot appear outside switch statement", "default", "");
+ parseContext.error((yyvsp[-1].lex).loc, "cannot appear outside switch statement", "default", "");
else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
- parseContext.error((yyvsp[(1) - (2)].lex).loc, "cannot be nested inside control flow", "default", "");
+ parseContext.error((yyvsp[-1].lex).loc, "cannot be nested inside control flow", "default", "");
else
- (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[(1) - (2)].lex).loc);
+ (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
}
+#line 7728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 417:
-/* Line 1792 of yacc.c */
-#line 2682 "glslang.y"
+ case 427:
+#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (! parseContext.limits.whileLoops)
- parseContext.error((yyvsp[(1) - (2)].lex).loc, "while loops not available", "limitation", "");
+ parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
parseContext.symbolTable.push();
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
+#line 7741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 418:
-/* Line 1792 of yacc.c */
-#line 2690 "glslang.y"
+ case 428:
+#line 2773 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
- (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[(6) - (6)].interm.intermNode), (yyvsp[(4) - (6)].interm.intermTypedNode), 0, true, (yyvsp[(1) - (6)].lex).loc);
+ (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
--parseContext.loopNestingLevel;
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
+#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 419:
-/* Line 1792 of yacc.c */
-#line 2697 "glslang.y"
+ case 429:
+#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
+#line 7763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 420:
-/* Line 1792 of yacc.c */
-#line 2702 "glslang.y"
+ case 430:
+#line 2785 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (! parseContext.limits.whileLoops)
- parseContext.error((yyvsp[(1) - (8)].lex).loc, "do-while loops not available", "limitation", "");
+ parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
- parseContext.boolCheck((yyvsp[(8) - (8)].lex).loc, (yyvsp[(6) - (8)].interm.intermTypedNode));
+ parseContext.boolCheck((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode));
- (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[(3) - (8)].interm.intermNode), (yyvsp[(6) - (8)].interm.intermTypedNode), 0, false, (yyvsp[(4) - (8)].lex).loc);
+ (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[-5].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, false, (yyvsp[-4].lex).loc);
--parseContext.loopNestingLevel;
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
+#line 7779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 421:
-/* Line 1792 of yacc.c */
-#line 2713 "glslang.y"
+ case 431:
+#line 2796 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.push();
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
+#line 7790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 422:
-/* Line 1792 of yacc.c */
-#line 2719 "glslang.y"
+ case 432:
+#line 2802 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
- (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[(4) - (7)].interm.intermNode), (yyvsp[(2) - (7)].lex).loc);
- TIntermLoop* forLoop = parseContext.intermediate.addLoop((yyvsp[(7) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), true, (yyvsp[(1) - (7)].lex).loc);
+ (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
+ TIntermLoop* forLoop = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[-2].interm.nodePair).node2), true, (yyvsp[-6].lex).loc);
if (! parseContext.limits.nonInductiveForLoops)
- parseContext.inductiveLoopCheck((yyvsp[(1) - (7)].lex).loc, (yyvsp[(4) - (7)].interm.intermNode), forLoop);
- (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyval.interm.intermNode), forLoop, (yyvsp[(1) - (7)].lex).loc);
+ parseContext.inductiveLoopCheck((yyvsp[-6].lex).loc, (yyvsp[-3].interm.intermNode), forLoop);
+ (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyval.interm.intermNode), forLoop, (yyvsp[-6].lex).loc);
(yyval.interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
--parseContext.loopNestingLevel;
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
+#line 7807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 423:
-/* Line 1792 of yacc.c */
-#line 2734 "glslang.y"
+ case 433:
+#line 2817 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
+#line 7815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 424:
-/* Line 1792 of yacc.c */
-#line 2737 "glslang.y"
+ case 434:
+#line 2820 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
+#line 7823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 425:
-/* Line 1792 of yacc.c */
-#line 2743 "glslang.y"
+ case 435:
+#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
+#line 7831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 426:
-/* Line 1792 of yacc.c */
-#line 2746 "glslang.y"
+ case 436:
+#line 2829 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = 0;
}
+#line 7839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 427:
-/* Line 1792 of yacc.c */
-#line 2752 "glslang.y"
+ case 437:
+#line 2835 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
+ (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
(yyval.interm.nodePair).node2 = 0;
}
+#line 7848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 428:
-/* Line 1792 of yacc.c */
-#line 2756 "glslang.y"
+ case 438:
+#line 2839 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
- (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermTypedNode);
+ (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
+ (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
}
+#line 7857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 429:
-/* Line 1792 of yacc.c */
-#line 2763 "glslang.y"
+ case 439:
+#line 2846 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (parseContext.loopNestingLevel <= 0)
- parseContext.error((yyvsp[(1) - (2)].lex).loc, "continue statement only allowed in loops", "", "");
- (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[(1) - (2)].lex).loc);
+ parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
+ (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
}
+#line 7867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 430:
-/* Line 1792 of yacc.c */
-#line 2768 "glslang.y"
+ case 440:
+#line 2851 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
- parseContext.error((yyvsp[(1) - (2)].lex).loc, "break statement only allowed in switch and loops", "", "");
- (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[(1) - (2)].lex).loc);
+ parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
+ (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
}
+#line 7877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 431:
-/* Line 1792 of yacc.c */
-#line 2773 "glslang.y"
+ case 441:
+#line 2856 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).loc);
+ (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
- parseContext.error((yyvsp[(1) - (2)].lex).loc, "non-void function must return a value", "return", "");
+ parseContext.error((yyvsp[-1].lex).loc, "non-void function must return a value", "return", "");
if (parseContext.inMain)
- parseContext.postMainReturn = true;
+ parseContext.postEntryPointReturn = true;
}
+#line 7889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 432:
-/* Line 1792 of yacc.c */
-#line 2780 "glslang.y"
+ case 442:
+#line 2863 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[(1) - (3)].lex).loc, (yyvsp[(2) - (3)].interm.intermTypedNode));
+ (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
}
+#line 7897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 433:
-/* Line 1792 of yacc.c */
-#line 2783 "glslang.y"
+ case 443:
+#line 2866 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.requireStage((yyvsp[(1) - (2)].lex).loc, EShLangFragment, "discard");
- (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[(1) - (2)].lex).loc);
+ parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
+ (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
}
+#line 7906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 434:
-/* Line 1792 of yacc.c */
-#line 2792 "glslang.y"
+ case 444:
+#line 2875 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
}
+#line 7915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 435:
-/* Line 1792 of yacc.c */
-#line 2796 "glslang.y"
+ case 445:
+#line 2879 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode));
- parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
+ if ((yyvsp[0].interm.intermNode) != nullptr) {
+ (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
+ parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
+ }
}
+#line 7926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 436:
-/* Line 1792 of yacc.c */
-#line 2803 "glslang.y"
+ case 446:
+#line 2888 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
+#line 7934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 437:
-/* Line 1792 of yacc.c */
-#line 2806 "glslang.y"
+ case 447:
+#line 2891 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
+#line 7942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 438:
-/* Line 1792 of yacc.c */
-#line 2812 "glslang.y"
+ case 448:
+#line 2894 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyvsp[(1) - (1)].interm).function = parseContext.handleFunctionDeclarator((yyvsp[(1) - (1)].interm).loc, *(yyvsp[(1) - (1)].interm).function, false /* not prototype */);
- (yyvsp[(1) - (1)].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[(1) - (1)].interm).loc, *(yyvsp[(1) - (1)].interm).function);
+ parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
+ (yyval.interm.intermNode) = nullptr;
}
+#line 7952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 439:
-/* Line 1792 of yacc.c */
-#line 2816 "glslang.y"
+ case 449:
+#line 2902 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
+ (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
+ }
+#line 7961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 450:
+#line 2906 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// May be best done as post process phase on intermediate code
if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
- parseContext.error((yyvsp[(1) - (3)].interm).loc, "function does not return a value:", "", (yyvsp[(1) - (3)].interm).function->getName().c_str());
+ parseContext.error((yyvsp[-2].interm).loc, "function does not return a value:", "", (yyvsp[-2].interm).function->getName().c_str());
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
- (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermNode));
- parseContext.intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[(1) - (3)].interm).function->getType(), (yyvsp[(1) - (3)].interm).loc);
- (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[(1) - (3)].interm).function->getMangledName().c_str());
+ (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermNode));
+ parseContext.intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[-2].interm).function->getType(), (yyvsp[-2].interm).loc);
+ (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[-2].interm).function->getMangledName().c_str());
// store the pragma information for debug and optimize and other vendor specific
// information. This information can be queried from the parse tree
(yyval.interm.intermNode)->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
(yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
- (yyval.interm.intermNode)->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
+ (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
}
+#line 7981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
-/* Line 1792 of yacc.c */
-#line 8088 "glslang_tab.cpp"
+#line 7985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -8106,7 +8003,7 @@ yyreduce:
*++yyvsp = yyval;
- /* Now `shift' the result of the reduction. Determine what state
+ /* Now 'shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
@@ -8121,9 +8018,9 @@ yyreduce:
goto yynewstate;
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error. |
+`--------------------------------------*/
yyerrlab:
/* Make sure we have latest lookahead translation. See comments at
user semantic actions for why this is necessary. */
@@ -8174,20 +8071,20 @@ yyerrlab:
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse lookahead token after an
- error, discard it. */
+ error, discard it. */
if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval, pParseContext);
- yychar = YYEMPTY;
- }
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval, pParseContext);
+ yychar = YYEMPTY;
+ }
}
/* Else will try to reuse lookahead token after shifting the error
@@ -8206,7 +8103,7 @@ yyerrorlab:
if (/*CONSTCOND*/ 0)
goto yyerrorlab;
- /* Do not reclaim the symbols of the rule which action triggered
+ /* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
YYPOPSTACK (yylen);
yylen = 0;
@@ -8219,29 +8116,29 @@ yyerrorlab:
| yyerrlab1 -- common code for both syntax error and YYERROR. |
`-------------------------------------------------------------*/
yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
{
yyn = yypact[yystate];
if (!yypact_value_is_default (yyn))
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
/* Pop the current state because it cannot handle the error token. */
if (yyssp == yyss)
- YYABORT;
+ YYABORT;
yydestruct ("Error: popping",
- yystos[yystate], yyvsp, pParseContext);
+ yystos[yystate], yyvsp, pParseContext);
YYPOPSTACK (1);
yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
@@ -8292,14 +8189,14 @@ yyreturn:
yydestruct ("Cleanup: discarding lookahead",
yytoken, &yylval, pParseContext);
}
- /* Do not reclaim the symbols of the rule which action triggered
+ /* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
YYPOPSTACK (yylen);
YY_STACK_PRINT (yyss, yyssp);
while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp, pParseContext);
+ yystos[*yyssp], yyvsp, pParseContext);
YYPOPSTACK (1);
}
#ifndef yyoverflow
@@ -8310,11 +8207,7 @@ yyreturn:
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
#endif
- /* Make sure YYID is used. */
- return YYID (yyresult);
+ return yyresult;
}
-
-
-/* Line 2055 of yacc.c */
-#line 2833 "glslang.y"
+#line 2923 "MachineIndependent/glslang.y" /* yacc.c:1906 */
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h
index b6d27993c96..b2e00632d9a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7. */
+/* A Bison parser, made by GNU Bison 3.0. */
/* Bison interface for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,13 +26,13 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
-#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
-/* Enabling traces. */
+#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#endif
@@ -40,306 +40,315 @@
extern int yydebug;
#endif
-/* Tokens. */
+/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- ATTRIBUTE = 258,
- VARYING = 259,
- CONST = 260,
- BOOL = 261,
- FLOAT = 262,
- DOUBLE = 263,
- INT = 264,
- UINT = 265,
- INT64_T = 266,
- UINT64_T = 267,
- FLOAT16_T = 268,
- BREAK = 269,
- CONTINUE = 270,
- DO = 271,
- ELSE = 272,
- FOR = 273,
- IF = 274,
- DISCARD = 275,
- RETURN = 276,
- SWITCH = 277,
- CASE = 278,
- DEFAULT = 279,
- SUBROUTINE = 280,
- BVEC2 = 281,
- BVEC3 = 282,
- BVEC4 = 283,
- IVEC2 = 284,
- IVEC3 = 285,
- IVEC4 = 286,
- I64VEC2 = 287,
- I64VEC3 = 288,
- I64VEC4 = 289,
- UVEC2 = 290,
- UVEC3 = 291,
- UVEC4 = 292,
- U64VEC2 = 293,
- U64VEC3 = 294,
- U64VEC4 = 295,
- VEC2 = 296,
- VEC3 = 297,
- VEC4 = 298,
- MAT2 = 299,
- MAT3 = 300,
- MAT4 = 301,
- CENTROID = 302,
- IN = 303,
- OUT = 304,
- INOUT = 305,
- UNIFORM = 306,
- PATCH = 307,
- SAMPLE = 308,
- BUFFER = 309,
- SHARED = 310,
- COHERENT = 311,
- VOLATILE = 312,
- RESTRICT = 313,
- READONLY = 314,
- WRITEONLY = 315,
- DVEC2 = 316,
- DVEC3 = 317,
- DVEC4 = 318,
- DMAT2 = 319,
- DMAT3 = 320,
- DMAT4 = 321,
- F16VEC2 = 322,
- F16VEC3 = 323,
- F16VEC4 = 324,
- F16MAT2 = 325,
- F16MAT3 = 326,
- F16MAT4 = 327,
- NOPERSPECTIVE = 328,
- FLAT = 329,
- SMOOTH = 330,
- LAYOUT = 331,
- __EXPLICITINTERPAMD = 332,
- MAT2X2 = 333,
- MAT2X3 = 334,
- MAT2X4 = 335,
- MAT3X2 = 336,
- MAT3X3 = 337,
- MAT3X4 = 338,
- MAT4X2 = 339,
- MAT4X3 = 340,
- MAT4X4 = 341,
- DMAT2X2 = 342,
- DMAT2X3 = 343,
- DMAT2X4 = 344,
- DMAT3X2 = 345,
- DMAT3X3 = 346,
- DMAT3X4 = 347,
- DMAT4X2 = 348,
- DMAT4X3 = 349,
- DMAT4X4 = 350,
- F16MAT2X2 = 351,
- F16MAT2X3 = 352,
- F16MAT2X4 = 353,
- F16MAT3X2 = 354,
- F16MAT3X3 = 355,
- F16MAT3X4 = 356,
- F16MAT4X2 = 357,
- F16MAT4X3 = 358,
- F16MAT4X4 = 359,
- ATOMIC_UINT = 360,
- SAMPLER1D = 361,
- SAMPLER2D = 362,
- SAMPLER3D = 363,
- SAMPLERCUBE = 364,
- SAMPLER1DSHADOW = 365,
- SAMPLER2DSHADOW = 366,
- SAMPLERCUBESHADOW = 367,
- SAMPLER1DARRAY = 368,
- SAMPLER2DARRAY = 369,
- SAMPLER1DARRAYSHADOW = 370,
- SAMPLER2DARRAYSHADOW = 371,
- ISAMPLER1D = 372,
- ISAMPLER2D = 373,
- ISAMPLER3D = 374,
- ISAMPLERCUBE = 375,
- ISAMPLER1DARRAY = 376,
- ISAMPLER2DARRAY = 377,
- USAMPLER1D = 378,
- USAMPLER2D = 379,
- USAMPLER3D = 380,
- USAMPLERCUBE = 381,
- USAMPLER1DARRAY = 382,
- USAMPLER2DARRAY = 383,
- SAMPLER2DRECT = 384,
- SAMPLER2DRECTSHADOW = 385,
- ISAMPLER2DRECT = 386,
- USAMPLER2DRECT = 387,
- SAMPLERBUFFER = 388,
- ISAMPLERBUFFER = 389,
- USAMPLERBUFFER = 390,
- SAMPLERCUBEARRAY = 391,
- SAMPLERCUBEARRAYSHADOW = 392,
- ISAMPLERCUBEARRAY = 393,
- USAMPLERCUBEARRAY = 394,
- SAMPLER2DMS = 395,
- ISAMPLER2DMS = 396,
- USAMPLER2DMS = 397,
- SAMPLER2DMSARRAY = 398,
- ISAMPLER2DMSARRAY = 399,
- USAMPLER2DMSARRAY = 400,
- SAMPLEREXTERNALOES = 401,
- SAMPLER = 402,
- SAMPLERSHADOW = 403,
- TEXTURE1D = 404,
- TEXTURE2D = 405,
- TEXTURE3D = 406,
- TEXTURECUBE = 407,
- TEXTURE1DARRAY = 408,
- TEXTURE2DARRAY = 409,
- ITEXTURE1D = 410,
- ITEXTURE2D = 411,
- ITEXTURE3D = 412,
- ITEXTURECUBE = 413,
- ITEXTURE1DARRAY = 414,
- ITEXTURE2DARRAY = 415,
- UTEXTURE1D = 416,
- UTEXTURE2D = 417,
- UTEXTURE3D = 418,
- UTEXTURECUBE = 419,
- UTEXTURE1DARRAY = 420,
- UTEXTURE2DARRAY = 421,
- TEXTURE2DRECT = 422,
- ITEXTURE2DRECT = 423,
- UTEXTURE2DRECT = 424,
- TEXTUREBUFFER = 425,
- ITEXTUREBUFFER = 426,
- UTEXTUREBUFFER = 427,
- TEXTURECUBEARRAY = 428,
- ITEXTURECUBEARRAY = 429,
- UTEXTURECUBEARRAY = 430,
- TEXTURE2DMS = 431,
- ITEXTURE2DMS = 432,
- UTEXTURE2DMS = 433,
- TEXTURE2DMSARRAY = 434,
- ITEXTURE2DMSARRAY = 435,
- UTEXTURE2DMSARRAY = 436,
- SUBPASSINPUT = 437,
- SUBPASSINPUTMS = 438,
- ISUBPASSINPUT = 439,
- ISUBPASSINPUTMS = 440,
- USUBPASSINPUT = 441,
- USUBPASSINPUTMS = 442,
- IMAGE1D = 443,
- IIMAGE1D = 444,
- UIMAGE1D = 445,
- IMAGE2D = 446,
- IIMAGE2D = 447,
- UIMAGE2D = 448,
- IMAGE3D = 449,
- IIMAGE3D = 450,
- UIMAGE3D = 451,
- IMAGE2DRECT = 452,
- IIMAGE2DRECT = 453,
- UIMAGE2DRECT = 454,
- IMAGECUBE = 455,
- IIMAGECUBE = 456,
- UIMAGECUBE = 457,
- IMAGEBUFFER = 458,
- IIMAGEBUFFER = 459,
- UIMAGEBUFFER = 460,
- IMAGE1DARRAY = 461,
- IIMAGE1DARRAY = 462,
- UIMAGE1DARRAY = 463,
- IMAGE2DARRAY = 464,
- IIMAGE2DARRAY = 465,
- UIMAGE2DARRAY = 466,
- IMAGECUBEARRAY = 467,
- IIMAGECUBEARRAY = 468,
- UIMAGECUBEARRAY = 469,
- IMAGE2DMS = 470,
- IIMAGE2DMS = 471,
- UIMAGE2DMS = 472,
- IMAGE2DMSARRAY = 473,
- IIMAGE2DMSARRAY = 474,
- UIMAGE2DMSARRAY = 475,
- STRUCT = 476,
- VOID = 477,
- WHILE = 478,
- IDENTIFIER = 479,
- TYPE_NAME = 480,
- FLOATCONSTANT = 481,
- DOUBLECONSTANT = 482,
- INTCONSTANT = 483,
- UINTCONSTANT = 484,
- INT64CONSTANT = 485,
- UINT64CONSTANT = 486,
- BOOLCONSTANT = 487,
- FLOAT16CONSTANT = 488,
- LEFT_OP = 489,
- RIGHT_OP = 490,
- INC_OP = 491,
- DEC_OP = 492,
- LE_OP = 493,
- GE_OP = 494,
- EQ_OP = 495,
- NE_OP = 496,
- AND_OP = 497,
- OR_OP = 498,
- XOR_OP = 499,
- MUL_ASSIGN = 500,
- DIV_ASSIGN = 501,
- ADD_ASSIGN = 502,
- MOD_ASSIGN = 503,
- LEFT_ASSIGN = 504,
- RIGHT_ASSIGN = 505,
- AND_ASSIGN = 506,
- XOR_ASSIGN = 507,
- OR_ASSIGN = 508,
- SUB_ASSIGN = 509,
- LEFT_PAREN = 510,
- RIGHT_PAREN = 511,
- LEFT_BRACKET = 512,
- RIGHT_BRACKET = 513,
- LEFT_BRACE = 514,
- RIGHT_BRACE = 515,
- DOT = 516,
- COMMA = 517,
- COLON = 518,
- EQUAL = 519,
- SEMICOLON = 520,
- BANG = 521,
- DASH = 522,
- TILDE = 523,
- PLUS = 524,
- STAR = 525,
- SLASH = 526,
- PERCENT = 527,
- LEFT_ANGLE = 528,
- RIGHT_ANGLE = 529,
- VERTICAL_BAR = 530,
- CARET = 531,
- AMPERSAND = 532,
- QUESTION = 533,
- INVARIANT = 534,
- PRECISE = 535,
- HIGH_PRECISION = 536,
- MEDIUM_PRECISION = 537,
- LOW_PRECISION = 538,
- PRECISION = 539,
- PACKED = 540,
- RESOURCE = 541,
- SUPERP = 542
- };
+ enum yytokentype
+ {
+ ATTRIBUTE = 258,
+ VARYING = 259,
+ CONST = 260,
+ BOOL = 261,
+ FLOAT = 262,
+ DOUBLE = 263,
+ INT = 264,
+ UINT = 265,
+ INT64_T = 266,
+ UINT64_T = 267,
+ INT16_T = 268,
+ UINT16_T = 269,
+ FLOAT16_T = 270,
+ BREAK = 271,
+ CONTINUE = 272,
+ DO = 273,
+ ELSE = 274,
+ FOR = 275,
+ IF = 276,
+ DISCARD = 277,
+ RETURN = 278,
+ SWITCH = 279,
+ CASE = 280,
+ DEFAULT = 281,
+ SUBROUTINE = 282,
+ BVEC2 = 283,
+ BVEC3 = 284,
+ BVEC4 = 285,
+ IVEC2 = 286,
+ IVEC3 = 287,
+ IVEC4 = 288,
+ I64VEC2 = 289,
+ I64VEC3 = 290,
+ I64VEC4 = 291,
+ UVEC2 = 292,
+ UVEC3 = 293,
+ UVEC4 = 294,
+ U64VEC2 = 295,
+ U64VEC3 = 296,
+ U64VEC4 = 297,
+ VEC2 = 298,
+ VEC3 = 299,
+ VEC4 = 300,
+ MAT2 = 301,
+ MAT3 = 302,
+ MAT4 = 303,
+ CENTROID = 304,
+ IN = 305,
+ OUT = 306,
+ INOUT = 307,
+ UNIFORM = 308,
+ PATCH = 309,
+ SAMPLE = 310,
+ BUFFER = 311,
+ SHARED = 312,
+ COHERENT = 313,
+ VOLATILE = 314,
+ RESTRICT = 315,
+ READONLY = 316,
+ WRITEONLY = 317,
+ DVEC2 = 318,
+ DVEC3 = 319,
+ DVEC4 = 320,
+ DMAT2 = 321,
+ DMAT3 = 322,
+ DMAT4 = 323,
+ F16VEC2 = 324,
+ F16VEC3 = 325,
+ F16VEC4 = 326,
+ F16MAT2 = 327,
+ F16MAT3 = 328,
+ F16MAT4 = 329,
+ I16VEC2 = 330,
+ I16VEC3 = 331,
+ I16VEC4 = 332,
+ U16VEC2 = 333,
+ U16VEC3 = 334,
+ U16VEC4 = 335,
+ NOPERSPECTIVE = 336,
+ FLAT = 337,
+ SMOOTH = 338,
+ LAYOUT = 339,
+ __EXPLICITINTERPAMD = 340,
+ MAT2X2 = 341,
+ MAT2X3 = 342,
+ MAT2X4 = 343,
+ MAT3X2 = 344,
+ MAT3X3 = 345,
+ MAT3X4 = 346,
+ MAT4X2 = 347,
+ MAT4X3 = 348,
+ MAT4X4 = 349,
+ DMAT2X2 = 350,
+ DMAT2X3 = 351,
+ DMAT2X4 = 352,
+ DMAT3X2 = 353,
+ DMAT3X3 = 354,
+ DMAT3X4 = 355,
+ DMAT4X2 = 356,
+ DMAT4X3 = 357,
+ DMAT4X4 = 358,
+ F16MAT2X2 = 359,
+ F16MAT2X3 = 360,
+ F16MAT2X4 = 361,
+ F16MAT3X2 = 362,
+ F16MAT3X3 = 363,
+ F16MAT3X4 = 364,
+ F16MAT4X2 = 365,
+ F16MAT4X3 = 366,
+ F16MAT4X4 = 367,
+ ATOMIC_UINT = 368,
+ SAMPLER1D = 369,
+ SAMPLER2D = 370,
+ SAMPLER3D = 371,
+ SAMPLERCUBE = 372,
+ SAMPLER1DSHADOW = 373,
+ SAMPLER2DSHADOW = 374,
+ SAMPLERCUBESHADOW = 375,
+ SAMPLER1DARRAY = 376,
+ SAMPLER2DARRAY = 377,
+ SAMPLER1DARRAYSHADOW = 378,
+ SAMPLER2DARRAYSHADOW = 379,
+ ISAMPLER1D = 380,
+ ISAMPLER2D = 381,
+ ISAMPLER3D = 382,
+ ISAMPLERCUBE = 383,
+ ISAMPLER1DARRAY = 384,
+ ISAMPLER2DARRAY = 385,
+ USAMPLER1D = 386,
+ USAMPLER2D = 387,
+ USAMPLER3D = 388,
+ USAMPLERCUBE = 389,
+ USAMPLER1DARRAY = 390,
+ USAMPLER2DARRAY = 391,
+ SAMPLER2DRECT = 392,
+ SAMPLER2DRECTSHADOW = 393,
+ ISAMPLER2DRECT = 394,
+ USAMPLER2DRECT = 395,
+ SAMPLERBUFFER = 396,
+ ISAMPLERBUFFER = 397,
+ USAMPLERBUFFER = 398,
+ SAMPLERCUBEARRAY = 399,
+ SAMPLERCUBEARRAYSHADOW = 400,
+ ISAMPLERCUBEARRAY = 401,
+ USAMPLERCUBEARRAY = 402,
+ SAMPLER2DMS = 403,
+ ISAMPLER2DMS = 404,
+ USAMPLER2DMS = 405,
+ SAMPLER2DMSARRAY = 406,
+ ISAMPLER2DMSARRAY = 407,
+ USAMPLER2DMSARRAY = 408,
+ SAMPLEREXTERNALOES = 409,
+ SAMPLER = 410,
+ SAMPLERSHADOW = 411,
+ TEXTURE1D = 412,
+ TEXTURE2D = 413,
+ TEXTURE3D = 414,
+ TEXTURECUBE = 415,
+ TEXTURE1DARRAY = 416,
+ TEXTURE2DARRAY = 417,
+ ITEXTURE1D = 418,
+ ITEXTURE2D = 419,
+ ITEXTURE3D = 420,
+ ITEXTURECUBE = 421,
+ ITEXTURE1DARRAY = 422,
+ ITEXTURE2DARRAY = 423,
+ UTEXTURE1D = 424,
+ UTEXTURE2D = 425,
+ UTEXTURE3D = 426,
+ UTEXTURECUBE = 427,
+ UTEXTURE1DARRAY = 428,
+ UTEXTURE2DARRAY = 429,
+ TEXTURE2DRECT = 430,
+ ITEXTURE2DRECT = 431,
+ UTEXTURE2DRECT = 432,
+ TEXTUREBUFFER = 433,
+ ITEXTUREBUFFER = 434,
+ UTEXTUREBUFFER = 435,
+ TEXTURECUBEARRAY = 436,
+ ITEXTURECUBEARRAY = 437,
+ UTEXTURECUBEARRAY = 438,
+ TEXTURE2DMS = 439,
+ ITEXTURE2DMS = 440,
+ UTEXTURE2DMS = 441,
+ TEXTURE2DMSARRAY = 442,
+ ITEXTURE2DMSARRAY = 443,
+ UTEXTURE2DMSARRAY = 444,
+ SUBPASSINPUT = 445,
+ SUBPASSINPUTMS = 446,
+ ISUBPASSINPUT = 447,
+ ISUBPASSINPUTMS = 448,
+ USUBPASSINPUT = 449,
+ USUBPASSINPUTMS = 450,
+ IMAGE1D = 451,
+ IIMAGE1D = 452,
+ UIMAGE1D = 453,
+ IMAGE2D = 454,
+ IIMAGE2D = 455,
+ UIMAGE2D = 456,
+ IMAGE3D = 457,
+ IIMAGE3D = 458,
+ UIMAGE3D = 459,
+ IMAGE2DRECT = 460,
+ IIMAGE2DRECT = 461,
+ UIMAGE2DRECT = 462,
+ IMAGECUBE = 463,
+ IIMAGECUBE = 464,
+ UIMAGECUBE = 465,
+ IMAGEBUFFER = 466,
+ IIMAGEBUFFER = 467,
+ UIMAGEBUFFER = 468,
+ IMAGE1DARRAY = 469,
+ IIMAGE1DARRAY = 470,
+ UIMAGE1DARRAY = 471,
+ IMAGE2DARRAY = 472,
+ IIMAGE2DARRAY = 473,
+ UIMAGE2DARRAY = 474,
+ IMAGECUBEARRAY = 475,
+ IIMAGECUBEARRAY = 476,
+ UIMAGECUBEARRAY = 477,
+ IMAGE2DMS = 478,
+ IIMAGE2DMS = 479,
+ UIMAGE2DMS = 480,
+ IMAGE2DMSARRAY = 481,
+ IIMAGE2DMSARRAY = 482,
+ UIMAGE2DMSARRAY = 483,
+ STRUCT = 484,
+ VOID = 485,
+ WHILE = 486,
+ IDENTIFIER = 487,
+ TYPE_NAME = 488,
+ FLOATCONSTANT = 489,
+ DOUBLECONSTANT = 490,
+ INTCONSTANT = 491,
+ UINTCONSTANT = 492,
+ INT64CONSTANT = 493,
+ UINT64CONSTANT = 494,
+ INT16CONSTANT = 495,
+ UINT16CONSTANT = 496,
+ BOOLCONSTANT = 497,
+ FLOAT16CONSTANT = 498,
+ LEFT_OP = 499,
+ RIGHT_OP = 500,
+ INC_OP = 501,
+ DEC_OP = 502,
+ LE_OP = 503,
+ GE_OP = 504,
+ EQ_OP = 505,
+ NE_OP = 506,
+ AND_OP = 507,
+ OR_OP = 508,
+ XOR_OP = 509,
+ MUL_ASSIGN = 510,
+ DIV_ASSIGN = 511,
+ ADD_ASSIGN = 512,
+ MOD_ASSIGN = 513,
+ LEFT_ASSIGN = 514,
+ RIGHT_ASSIGN = 515,
+ AND_ASSIGN = 516,
+ XOR_ASSIGN = 517,
+ OR_ASSIGN = 518,
+ SUB_ASSIGN = 519,
+ LEFT_PAREN = 520,
+ RIGHT_PAREN = 521,
+ LEFT_BRACKET = 522,
+ RIGHT_BRACKET = 523,
+ LEFT_BRACE = 524,
+ RIGHT_BRACE = 525,
+ DOT = 526,
+ COMMA = 527,
+ COLON = 528,
+ EQUAL = 529,
+ SEMICOLON = 530,
+ BANG = 531,
+ DASH = 532,
+ TILDE = 533,
+ PLUS = 534,
+ STAR = 535,
+ SLASH = 536,
+ PERCENT = 537,
+ LEFT_ANGLE = 538,
+ RIGHT_ANGLE = 539,
+ VERTICAL_BAR = 540,
+ CARET = 541,
+ AMPERSAND = 542,
+ QUESTION = 543,
+ INVARIANT = 544,
+ PRECISE = 545,
+ HIGH_PRECISION = 546,
+ MEDIUM_PRECISION = 547,
+ LOW_PRECISION = 548,
+ PRECISION = 549,
+ PACKED = 550,
+ RESOURCE = 551,
+ SUPERP = 552
+ };
#endif
-
+/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+typedef union YYSTYPE YYSTYPE;
+union YYSTYPE
{
-/* Line 2058 of yacc.c */
-#line 66 "glslang.y"
+#line 68 "MachineIndependent/glslang.y" /* yacc.c:1909 */
struct {
glslang::TSourceLoc loc;
@@ -373,28 +382,14 @@ typedef union YYSTYPE
};
} interm;
-
-/* Line 2058 of yacc.c */
-#line 379 "glslang_tab.cpp.h"
-} YYSTYPE;
+#line 386 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */
+};
# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
+
int yyparse (glslang::TParseContext* pParseContext);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED */
+#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp
index b8a6969d1b6..7e15392da68 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp
@@ -45,11 +45,31 @@
namespace {
-bool is_positive_infinity(double x) {
+bool IsInfinity(double x) {
#ifdef _MSC_VER
- return _fpclass(x) == _FPCLASS_PINF;
+ switch (_fpclass(x)) {
+ case _FPCLASS_NINF:
+ case _FPCLASS_PINF:
+ return true;
+ default:
+ return false;
+ }
#else
- return std::isinf(x) && (x >= 0);
+ return std::isinf(x);
+#endif
+}
+
+bool IsNan(double x) {
+#ifdef _MSC_VER
+ switch (_fpclass(x)) {
+ case _FPCLASS_SNAN:
+ case _FPCLASS_QNAN:
+ return true;
+ default:
+ return false;
+ }
+#else
+ return std::isnan(x);
#endif
}
@@ -176,6 +196,7 @@ bool TOutputTraverser::visitBinary(TVisit /* visit */, TIntermBinary* node)
case EOpLogicalOr: out.debug << "logical-or"; break;
case EOpLogicalXor: out.debug << "logical-xor"; break;
case EOpLogicalAnd: out.debug << "logical-and"; break;
+
default: out.debug << "<unknown op>";
}
@@ -288,6 +309,13 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpDoubleBitsToUint64: out.debug << "doubleBitsToUint64"; break;
case EOpInt64BitsToDouble: out.debug << "int64BitsToDouble"; break;
case EOpUint64BitsToDouble: out.debug << "uint64BitsToDouble"; break;
+#ifdef AMD_EXTENSIONS
+ case EOpFloat16BitsToInt16: out.debug << "float16BitsToInt16"; break;
+ case EOpFloat16BitsToUint16: out.debug << "float16BitsToUint16"; break;
+ case EOpInt16BitsToFloat16: out.debug << "int16BitsToFloat16"; break;
+ case EOpUint16BitsToFloat16: out.debug << "uint16BitsToFloat16"; break;
+#endif
+
case EOpPackSnorm2x16: out.debug << "packSnorm2x16"; break;
case EOpUnpackSnorm2x16:out.debug << "unpackSnorm2x16"; break;
case EOpPackUnorm2x16: out.debug << "packUnorm2x16"; break;
@@ -308,6 +336,16 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpUnpackUint2x32: out.debug << "unpackUint2x32"; break;
#ifdef AMD_EXTENSIONS
+ case EOpPackInt2x16: out.debug << "packInt2x16"; break;
+ case EOpUnpackInt2x16: out.debug << "unpackInt2x16"; break;
+ case EOpPackUint2x16: out.debug << "packUint2x16"; break;
+ case EOpUnpackUint2x16: out.debug << "unpackUint2x16"; break;
+
+ case EOpPackInt4x16: out.debug << "packInt4x16"; break;
+ case EOpUnpackInt4x16: out.debug << "unpackInt4x16"; break;
+ case EOpPackUint4x16: out.debug << "packUint4x16"; break;
+ case EOpUnpackUint4x16: out.debug << "unpackUint4x16"; break;
+
case EOpPackFloat2x16: out.debug << "packFloat2x16"; break;
case EOpUnpackFloat2x16: out.debug << "unpackFloat2x16"; break;
#endif
@@ -370,6 +408,8 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpRcp: out.debug << "rcp"; break;
case EOpSaturate: out.debug << "saturate"; break;
+ case EOpSparseTexelsResident: out.debug << "sparseTexelsResident"; break;
+
#ifdef AMD_EXTENSIONS
case EOpMinInvocations: out.debug << "minInvocations"; break;
case EOpMaxInvocations: out.debug << "maxInvocations"; break;
@@ -392,10 +432,13 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpMaxInvocationsExclusiveScanNonUniform: out.debug << "maxInvocationsExclusiveScanNonUniform"; break;
case EOpAddInvocationsExclusiveScanNonUniform: out.debug << "addInvocationsExclusiveScanNonUniform"; break;
- case EOpMbcnt: out.debug << "mbcnt"; break;
+ case EOpMbcnt: out.debug << "mbcnt"; break;
+
+ case EOpCubeFaceIndex: out.debug << "cubeFaceIndex"; break;
+ case EOpCubeFaceCoord: out.debug << "cubeFaceCoord"; break;
- case EOpCubeFaceIndex: out.debug << "cubeFaceIndex"; break;
- case EOpCubeFaceCoord: out.debug << "cubeFaceCoord"; break;
+ case EOpFragmentMaskFetch: out.debug << "fragmentMaskFetchAMD"; break;
+ case EOpFragmentFetch: out.debug << "fragmentFetchAMD"; break;
case EOpConvBoolToFloat16: out.debug << "Convert bool to float16"; break;
case EOpConvIntToFloat16: out.debug << "Convert int to float16"; break;
@@ -411,8 +454,47 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpConvFloat16ToDouble: out.debug << "Convert float16 to double"; break;
case EOpConvFloat16ToInt64: out.debug << "Convert float16 to int64"; break;
case EOpConvFloat16ToUint64: out.debug << "Convert float16 to uint64"; break;
+
+ case EOpConvBoolToInt16: out.debug << "Convert bool to int16"; break;
+ case EOpConvIntToInt16: out.debug << "Convert int to int16"; break;
+ case EOpConvUintToInt16: out.debug << "Convert uint to int16"; break;
+ case EOpConvFloatToInt16: out.debug << "Convert float to int16"; break;
+ case EOpConvDoubleToInt16: out.debug << "Convert double to int16"; break;
+ case EOpConvFloat16ToInt16: out.debug << "Convert float16 to int16"; break;
+ case EOpConvInt64ToInt16: out.debug << "Convert int64 to int16"; break;
+ case EOpConvUint64ToInt16: out.debug << "Convert uint64 to int16"; break;
+ case EOpConvUint16ToInt16: out.debug << "Convert uint16 to int16"; break;
+ case EOpConvInt16ToBool: out.debug << "Convert int16 to bool"; break;
+ case EOpConvInt16ToInt: out.debug << "Convert int16 to int"; break;
+ case EOpConvInt16ToUint: out.debug << "Convert int16 to uint"; break;
+ case EOpConvInt16ToFloat: out.debug << "Convert int16 to float"; break;
+ case EOpConvInt16ToDouble: out.debug << "Convert int16 to double"; break;
+ case EOpConvInt16ToFloat16: out.debug << "Convert int16 to float16"; break;
+ case EOpConvInt16ToInt64: out.debug << "Convert int16 to int64"; break;
+ case EOpConvInt16ToUint64: out.debug << "Convert int16 to uint64"; break;
+
+ case EOpConvBoolToUint16: out.debug << "Convert bool to uint16"; break;
+ case EOpConvIntToUint16: out.debug << "Convert int to uint16"; break;
+ case EOpConvUintToUint16: out.debug << "Convert uint to uint16"; break;
+ case EOpConvFloatToUint16: out.debug << "Convert float to uint16"; break;
+ case EOpConvDoubleToUint16: out.debug << "Convert double to uint16"; break;
+ case EOpConvFloat16ToUint16: out.debug << "Convert float16 to uint16"; break;
+ case EOpConvInt64ToUint16: out.debug << "Convert int64 to uint16"; break;
+ case EOpConvUint64ToUint16: out.debug << "Convert uint64 to uint16"; break;
+ case EOpConvInt16ToUint16: out.debug << "Convert int16 to uint16"; break;
+ case EOpConvUint16ToBool: out.debug << "Convert uint16 to bool"; break;
+ case EOpConvUint16ToInt: out.debug << "Convert uint16 to int"; break;
+ case EOpConvUint16ToUint: out.debug << "Convert uint16 to uint"; break;
+ case EOpConvUint16ToFloat: out.debug << "Convert uint16 to float"; break;
+ case EOpConvUint16ToDouble: out.debug << "Convert uint16 to double"; break;
+ case EOpConvUint16ToFloat16: out.debug << "Convert uint16 to float16"; break;
+ case EOpConvUint16ToInt64: out.debug << "Convert uint16 to int64"; break;
+ case EOpConvUint16ToUint64: out.debug << "Convert uint16 to uint64"; break;
#endif
+ case EOpSubpassLoad: out.debug << "subpassLoad"; break;
+ case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
+
default: out.debug.message(EPrefixError, "Bad unary op");
}
@@ -444,9 +526,13 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpConstructFloat: out.debug << "Construct float"; break;
case EOpConstructDouble:out.debug << "Construct double"; break;
+
case EOpConstructVec2: out.debug << "Construct vec2"; break;
case EOpConstructVec3: out.debug << "Construct vec3"; break;
case EOpConstructVec4: out.debug << "Construct vec4"; break;
+ case EOpConstructDVec2: out.debug << "Construct dvec2"; break;
+ case EOpConstructDVec3: out.debug << "Construct dvec3"; break;
+ case EOpConstructDVec4: out.debug << "Construct dvec4"; break;
case EOpConstructBool: out.debug << "Construct bool"; break;
case EOpConstructBVec2: out.debug << "Construct bvec2"; break;
case EOpConstructBVec3: out.debug << "Construct bvec3"; break;
@@ -467,6 +553,16 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpConstructU64Vec2: out.debug << "Construct u64vec2"; break;
case EOpConstructU64Vec3: out.debug << "Construct u64vec3"; break;
case EOpConstructU64Vec4: out.debug << "Construct u64vec4"; break;
+#ifdef AMD_EXTENSIONS
+ case EOpConstructInt16: out.debug << "Construct int16_t"; break;
+ case EOpConstructI16Vec2: out.debug << "Construct i16vec2"; break;
+ case EOpConstructI16Vec3: out.debug << "Construct i16vec3"; break;
+ case EOpConstructI16Vec4: out.debug << "Construct i16vec4"; break;
+ case EOpConstructUint16: out.debug << "Construct uint16_t"; break;
+ case EOpConstructU16Vec2: out.debug << "Construct u16vec2"; break;
+ case EOpConstructU16Vec3: out.debug << "Construct u16vec3"; break;
+ case EOpConstructU16Vec4: out.debug << "Construct u16vec4"; break;
+#endif
case EOpConstructMat2x2: out.debug << "Construct mat2"; break;
case EOpConstructMat2x3: out.debug << "Construct mat2x3"; break;
case EOpConstructMat2x4: out.debug << "Construct mat2x4"; break;
@@ -485,6 +581,33 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpConstructDMat4x2: out.debug << "Construct dmat4x2"; break;
case EOpConstructDMat4x3: out.debug << "Construct dmat4x3"; break;
case EOpConstructDMat4x4: out.debug << "Construct dmat4"; break;
+ case EOpConstructIMat2x2: out.debug << "Construct imat2"; break;
+ case EOpConstructIMat2x3: out.debug << "Construct imat2x3"; break;
+ case EOpConstructIMat2x4: out.debug << "Construct imat2x4"; break;
+ case EOpConstructIMat3x2: out.debug << "Construct imat3x2"; break;
+ case EOpConstructIMat3x3: out.debug << "Construct imat3"; break;
+ case EOpConstructIMat3x4: out.debug << "Construct imat3x4"; break;
+ case EOpConstructIMat4x2: out.debug << "Construct imat4x2"; break;
+ case EOpConstructIMat4x3: out.debug << "Construct imat4x3"; break;
+ case EOpConstructIMat4x4: out.debug << "Construct imat4"; break;
+ case EOpConstructUMat2x2: out.debug << "Construct umat2"; break;
+ case EOpConstructUMat2x3: out.debug << "Construct umat2x3"; break;
+ case EOpConstructUMat2x4: out.debug << "Construct umat2x4"; break;
+ case EOpConstructUMat3x2: out.debug << "Construct umat3x2"; break;
+ case EOpConstructUMat3x3: out.debug << "Construct umat3"; break;
+ case EOpConstructUMat3x4: out.debug << "Construct umat3x4"; break;
+ case EOpConstructUMat4x2: out.debug << "Construct umat4x2"; break;
+ case EOpConstructUMat4x3: out.debug << "Construct umat4x3"; break;
+ case EOpConstructUMat4x4: out.debug << "Construct umat4"; break;
+ case EOpConstructBMat2x2: out.debug << "Construct bmat2"; break;
+ case EOpConstructBMat2x3: out.debug << "Construct bmat2x3"; break;
+ case EOpConstructBMat2x4: out.debug << "Construct bmat2x4"; break;
+ case EOpConstructBMat3x2: out.debug << "Construct bmat3x2"; break;
+ case EOpConstructBMat3x3: out.debug << "Construct bmat3"; break;
+ case EOpConstructBMat3x4: out.debug << "Construct bmat3x4"; break;
+ case EOpConstructBMat4x2: out.debug << "Construct bmat4x2"; break;
+ case EOpConstructBMat4x3: out.debug << "Construct bmat4x3"; break;
+ case EOpConstructBMat4x4: out.debug << "Construct bmat4"; break;
#ifdef AMD_EXTENSIONS
case EOpConstructFloat16: out.debug << "Construct float16_t"; break;
case EOpConstructF16Vec2: out.debug << "Construct f16vec2"; break;
@@ -566,6 +689,16 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpAtomicExchange: out.debug << "AtomicExchange"; break;
case EOpAtomicCompSwap: out.debug << "AtomicCompSwap"; break;
+ case EOpAtomicCounterAdd: out.debug << "AtomicCounterAdd"; break;
+ case EOpAtomicCounterSubtract: out.debug << "AtomicCounterSubtract"; break;
+ case EOpAtomicCounterMin: out.debug << "AtomicCounterMin"; break;
+ case EOpAtomicCounterMax: out.debug << "AtomicCounterMax"; break;
+ case EOpAtomicCounterAnd: out.debug << "AtomicCounterAnd"; break;
+ case EOpAtomicCounterOr: out.debug << "AtomicCounterOr"; break;
+ case EOpAtomicCounterXor: out.debug << "AtomicCounterXor"; break;
+ case EOpAtomicCounterExchange: out.debug << "AtomicCounterExchange"; break;
+ case EOpAtomicCounterCompSwap: out.debug << "AtomicCounterCompSwap"; break;
+
case EOpImageQuerySize: out.debug << "imageQuerySize"; break;
case EOpImageQuerySamples: out.debug << "imageQuerySamples"; break;
case EOpImageLoad: out.debug << "imageLoad"; break;
@@ -578,6 +711,10 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpImageAtomicXor: out.debug << "imageAtomicXor"; break;
case EOpImageAtomicExchange: out.debug << "imageAtomicExchange"; break;
case EOpImageAtomicCompSwap: out.debug << "imageAtomicCompSwap"; break;
+#ifdef AMD_EXTENSIONS
+ case EOpImageLoadLod: out.debug << "imageLoadLod"; break;
+ case EOpImageStoreLod: out.debug << "imageStoreLod"; break;
+#endif
case EOpTextureQuerySize: out.debug << "textureSize"; break;
case EOpTextureQueryLod: out.debug << "textureQueryLod"; break;
@@ -600,6 +737,38 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpTextureGather: out.debug << "textureGather"; break;
case EOpTextureGatherOffset: out.debug << "textureGatherOffset"; break;
case EOpTextureGatherOffsets: out.debug << "textureGatherOffsets"; break;
+ case EOpTextureClamp: out.debug << "textureClamp"; break;
+ case EOpTextureOffsetClamp: out.debug << "textureOffsetClamp"; break;
+ case EOpTextureGradClamp: out.debug << "textureGradClamp"; break;
+ case EOpTextureGradOffsetClamp: out.debug << "textureGradOffsetClamp"; break;
+#ifdef AMD_EXTENSIONS
+ case EOpTextureGatherLod: out.debug << "textureGatherLod"; break;
+ case EOpTextureGatherLodOffset: out.debug << "textureGatherLodOffset"; break;
+ case EOpTextureGatherLodOffsets: out.debug << "textureGatherLodOffsets"; break;
+#endif
+
+ case EOpSparseTexture: out.debug << "sparseTexture"; break;
+ case EOpSparseTextureOffset: out.debug << "sparseTextureOffset"; break;
+ case EOpSparseTextureLod: out.debug << "sparseTextureLod"; break;
+ case EOpSparseTextureLodOffset: out.debug << "sparseTextureLodOffset"; break;
+ case EOpSparseTextureFetch: out.debug << "sparseTexelFetch"; break;
+ case EOpSparseTextureFetchOffset: out.debug << "sparseTexelFetchOffset"; break;
+ case EOpSparseTextureGrad: out.debug << "sparseTextureGrad"; break;
+ case EOpSparseTextureGradOffset: out.debug << "sparseTextureGradOffset"; break;
+ case EOpSparseTextureGather: out.debug << "sparseTextureGather"; break;
+ case EOpSparseTextureGatherOffset: out.debug << "sparseTextureGatherOffset"; break;
+ case EOpSparseTextureGatherOffsets: out.debug << "sparseTextureGatherOffsets"; break;
+ case EOpSparseImageLoad: out.debug << "sparseImageLoad"; break;
+ case EOpSparseTextureClamp: out.debug << "sparseTextureClamp"; break;
+ case EOpSparseTextureOffsetClamp: out.debug << "sparseTextureOffsetClamp"; break;
+ case EOpSparseTextureGradClamp: out.debug << "sparseTextureGradClamp"; break;
+ case EOpSparseTextureGradOffsetClamp: out.debug << "sparseTextureGradOffsetClam"; break;
+#ifdef AMD_EXTENSIONS
+ case EOpSparseTextureGatherLod: out.debug << "sparseTextureGatherLod"; break;
+ case EOpSparseTextureGatherLodOffset: out.debug << "sparseTextureGatherLodOffset"; break;
+ case EOpSparseTextureGatherLodOffsets: out.debug << "sparseTextureGatherLodOffsets"; break;
+ case EOpSparseImageLoadLod: out.debug << "sparseImageLoadLod"; break;
+#endif
case EOpAddCarry: out.debug << "addCarry"; break;
case EOpSubBorrow: out.debug << "subBorrow"; break;
@@ -626,6 +795,9 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpWorkgroupMemoryBarrier: out.debug << "WorkgroupMemoryBarrier"; break;
case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break;
+ case EOpSubpassLoad: out.debug << "subpassLoad"; break;
+ case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
+
default: out.debug.message(EPrefixError, "Bad aggregation op");
}
@@ -694,11 +866,14 @@ static void OutputConstantUnion(TInfoSink& out, const TIntermTyped* node, const
#endif
{
const double value = constUnion[i].getDConst();
- // Print infinity in a portable way, for test stability.
- // Other cases may be needed in the future: negative infinity,
- // and NaNs.
- if (is_positive_infinity(value))
- out.debug << "inf\n";
+ // Print infinities and NaNs in a portable way.
+ if (IsInfinity(value)) {
+ if (value < 0)
+ out.debug << "-1.#INF\n";
+ else
+ out.debug << "+1.#INF\n";
+ } else if (IsNan(value))
+ out.debug << "1.#IND\n";
else {
const int maxSize = 300;
char buf[maxSize];
@@ -744,6 +919,26 @@ static void OutputConstantUnion(TInfoSink& out, const TIntermTyped* node, const
out.debug << buf << "\n";
}
break;
+#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ {
+ const int maxSize = 300;
+ char buf[maxSize];
+ snprintf(buf, maxSize, "%d (%s)", constUnion[i].getIConst(), "const int16_t");
+
+ out.debug << buf << "\n";
+ }
+ break;
+ case EbtUint16:
+ {
+ const int maxSize = 300;
+ char buf[maxSize];
+ snprintf(buf, maxSize, "%u (%s)", constUnion[i].getUConst(), "const uint16_t");
+
+ out.debug << buf << "\n";
+ }
+ break;
+#endif
default:
out.info.message(EPrefixInternalError, "Unknown constant", node->getLoc());
break;
@@ -884,6 +1079,13 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree)
case EShLangTessControl:
infoSink.debug << "vertices = " << vertices << "\n";
+
+ if (inputPrimitive != ElgNone)
+ infoSink.debug << "input primitive = " << TQualifier::getGeometryString(inputPrimitive) << "\n";
+ if (vertexSpacing != EvsNone)
+ infoSink.debug << "vertex spacing = " << TQualifier::getVertexSpacingString(vertexSpacing) << "\n";
+ if (vertexOrder != EvoNone)
+ infoSink.debug << "triangle order = " << TQualifier::getVertexOrderString(vertexOrder) << "\n";
break;
case EShLangTessEvaluation:
@@ -908,6 +1110,8 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree)
infoSink.debug << "gl_FragCoord origin is upper left\n";
if (earlyFragmentTests)
infoSink.debug << "using early_fragment_tests\n";
+ if (postDepthCoverage)
+ infoSink.debug << "using post_depth_coverage\n";
if (depthLayout != EldNone)
infoSink.debug << "using " << TQualifier::getLayoutDepthString(depthLayout) << "\n";
if (blendEquations != 0) {
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp
index bebf775d918..a7d9d91d19c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2016 LunarG, Inc.
+// Copyright (C) 2016-2017 LunarG, Inc.
//
// All rights reserved.
//
@@ -201,11 +201,45 @@ public:
const TVarLiveMap& uniformList;
};
+struct TNotifyUniformAdaptor
+{
+ EShLanguage stage;
+ TIoMapResolver& resolver;
+ inline TNotifyUniformAdaptor(EShLanguage s, TIoMapResolver& r)
+ : stage(s)
+ , resolver(r)
+ {
+ }
+ inline void operator()(TVarEntryInfo& ent)
+ {
+ resolver.notifyBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+ }
+private:
+ TNotifyUniformAdaptor& operator=(TNotifyUniformAdaptor&);
+};
+
+struct TNotifyInOutAdaptor
+{
+ EShLanguage stage;
+ TIoMapResolver& resolver;
+ inline TNotifyInOutAdaptor(EShLanguage s, TIoMapResolver& r)
+ : stage(s)
+ , resolver(r)
+ {
+ }
+ inline void operator()(TVarEntryInfo& ent)
+ {
+ resolver.notifyInOut(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+ }
+private:
+ TNotifyInOutAdaptor& operator=(TNotifyInOutAdaptor&);
+};
+
struct TResolverUniformAdaptor
{
TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e, TIntermediate& interm)
- : resolver(r)
- , stage(s)
+ : stage(s)
+ , resolver(r)
, infoSink(i)
, error(e)
, intermediate(interm)
@@ -219,10 +253,14 @@ struct TResolverUniformAdaptor
ent.newBinding = -1;
ent.newSet = -1;
ent.newIndex = -1;
- const bool isValid = resolver.validateBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+ const bool isValid = resolver.validateBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(),
+ ent.live);
if (isValid) {
- ent.newBinding = resolver.resolveBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+ ent.newBinding = resolver.resolveBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(),
+ ent.live);
ent.newSet = resolver.resolveSet(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+ ent.newLocation = resolver.resolveUniformLocation(stage, ent.symbol->getName().c_str(),
+ ent.symbol->getType(), ent.live);
if (ent.newBinding != -1) {
if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) {
@@ -260,8 +298,8 @@ private:
struct TResolverInOutAdaptor
{
TResolverInOutAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e, TIntermediate& interm)
- : resolver(r)
- , stage(s)
+ : stage(s)
+ , resolver(r)
, infoSink(i)
, error(e)
, intermediate(interm)
@@ -310,21 +348,24 @@ private:
TResolverInOutAdaptor& operator=(TResolverInOutAdaptor&);
};
-/*
- * Basic implementation of glslang::TIoMapResolver that replaces the
- * previous offset behavior.
- * It does the same, uses the offsets for the corresponding uniform
- * types. Also respects the EOptionAutoMapBindings flag and binds
- * them if needed.
- */
-struct TDefaultIoResolver : public glslang::TIoMapResolver
+// Base class for shared TIoMapResolver services, used by several derivations.
+struct TDefaultIoResolverBase : public glslang::TIoMapResolver
{
- int baseSamplerBinding;
- int baseTextureBinding;
- int baseImageBinding;
- int baseUboBinding;
- int baseSsboBinding;
- bool doAutoMapping;
+ TDefaultIoResolverBase(const TIntermediate &intermediate) :
+ intermediate(intermediate),
+ nextUniformLocation(0)
+ { }
+
+ int getBaseBinding(TResourceType res, unsigned int set) const {
+ return selectBaseBinding(intermediate.getShiftBinding(res),
+ intermediate.getShiftBindingForSet(res, set));
+ }
+
+ const std::vector<std::string>& getResourceSetBinding() const { return intermediate.getResourceSetBinding(); }
+
+ bool doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); }
+ bool doAutoLocationMapping() const { return intermediate.getAutoMapLocations(); }
+
typedef std::vector<int> TSlotSet;
typedef std::unordered_map<int, TSlotSet> TSlotSetMap;
TSlotSetMap slots;
@@ -343,7 +384,12 @@ struct TDefaultIoResolver : public glslang::TIoMapResolver
int reserveSlot(int set, int slot)
{
TSlotSet::iterator at = findSlot(set, slot);
- slots[set].insert(at, slot);
+
+ // tolerate aliasing, by not double-recording aliases
+ // (policy about appropriateness of the alias is higher up)
+ if (at == slots[set].end() || *at != slot)
+ slots[set].insert(at, slot);
+
return slot;
}
@@ -360,123 +406,312 @@ struct TDefaultIoResolver : public glslang::TIoMapResolver
return reserveSlot(set, base);
}
- bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
- {
- if (type.getQualifier().hasBinding()) {
- int set;
- if (type.getQualifier().hasSet())
- set = type.getQualifier().layoutSet;
- else
- set = 0;
+ virtual bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override = 0;
- if (type.getBasicType() == glslang::EbtSampler) {
- const glslang::TSampler& sampler = type.getSampler();
- if (sampler.isPureSampler())
- return checkEmpty(set, baseSamplerBinding + type.getQualifier().layoutBinding);
+ virtual int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override = 0;
- if (sampler.isTexture())
- return checkEmpty(set, baseTextureBinding + type.getQualifier().layoutBinding);
- }
+ int resolveSet(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
+ {
+ if (type.getQualifier().hasSet())
+ return type.getQualifier().layoutSet;
- if (type.getQualifier().storage == EvqUniform)
- return checkEmpty(set, baseUboBinding + type.getQualifier().layoutBinding);
+ // If a command line or API option requested a single descriptor set, use that (if not overrided by spaceN)
+ if (getResourceSetBinding().size() == 1)
+ return atoi(getResourceSetBinding()[0].c_str());
- if (type.getQualifier().storage == EvqBuffer)
- return checkEmpty(set, baseSsboBinding + type.getQualifier().layoutBinding);
+ return 0;
+ }
+ int resolveUniformLocation(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
+ {
+ // kick out of not doing this
+ if (!doAutoLocationMapping())
+ return -1;
+
+ // no locations added if already present, a built-in variable, a block, or an opaque
+ if (type.getQualifier().hasLocation() || type.isBuiltIn() ||
+ type.getBasicType() == EbtBlock || type.containsOpaque())
+ return -1;
+
+ // no locations on blocks of built-in variables
+ if (type.isStruct()) {
+ if (type.getStruct()->size() < 1)
+ return -1;
+ if ((*type.getStruct())[0].type->isBuiltIn())
+ return -1;
}
+
+ return nextUniformLocation++;
+ }
+ bool validateInOut(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
+ {
return true;
}
+ int resolveInOutLocation(EShLanguage /*stage*/, const char* /*name*/, const TType& type, bool /*is_live*/) override
+ {
+ // kick out of not doing this
+ if (!doAutoLocationMapping())
+ return -1;
+
+ // no locations added if already present, or a built-in variable
+ if (type.getQualifier().hasLocation() || type.isBuiltIn())
+ return -1;
+
+ // no locations on blocks of built-in variables
+ if (type.isStruct()) {
+ if (type.getStruct()->size() < 1)
+ return -1;
+ if ((*type.getStruct())[0].type->isBuiltIn())
+ return -1;
+ }
- int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override
+ // Placeholder.
+ // TODO: It would be nice to flesh this out using
+ // intermediate->computeTypeLocationSize(type), or functions that call it like
+ // intermediate->addUsedLocation()
+ // These in turn would want the intermediate, which is not available here, but
+ // is available in many places, and a lot of copying from it could be saved if
+ // it were just available.
+ return 0;
+ }
+ int resolveInOutComponent(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
+ {
+ return -1;
+ }
+ int resolveInOutIndex(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
{
- int set;
+ return -1;
+ }
+
+ void notifyBinding(EShLanguage, const char* /*name*/, const TType&, bool /*is_live*/) override {}
+ void notifyInOut(EShLanguage, const char* /*name*/, const TType&, bool /*is_live*/) override {}
+ void endNotifications(EShLanguage) override {}
+ void beginNotifications(EShLanguage) override {}
+ void beginResolve(EShLanguage) override {}
+ void endResolve(EShLanguage) override {}
+
+protected:
+ const TIntermediate &intermediate;
+ int nextUniformLocation;
+
+ // Return descriptor set specific base if there is one, and the generic base otherwise.
+ int selectBaseBinding(int base, int descriptorSetBase) const {
+ return descriptorSetBase != -1 ? descriptorSetBase : base;
+ }
+
+ static int getLayoutSet(const glslang::TType& type) {
if (type.getQualifier().hasSet())
- set = type.getQualifier().layoutSet;
+ return type.getQualifier().layoutSet;
else
- set = 0;
+ return 0;
+ }
+
+ static bool isSamplerType(const glslang::TType& type) {
+ return type.getBasicType() == glslang::EbtSampler && type.getSampler().isPureSampler();
+ }
+
+ static bool isTextureType(const glslang::TType& type) {
+ return (type.getBasicType() == glslang::EbtSampler &&
+ (type.getSampler().isTexture() || type.getSampler().isSubpass()));
+ }
+
+ static bool isUboType(const glslang::TType& type) {
+ return type.getQualifier().storage == EvqUniform;
+ }
+};
+
+/*
+ * Basic implementation of glslang::TIoMapResolver that replaces the
+ * previous offset behavior.
+ * It does the same, uses the offsets for the corresponding uniform
+ * types. Also respects the EOptionAutoMapBindings flag and binds
+ * them if needed.
+ */
+/*
+ * Default resolver
+ */
+struct TDefaultIoResolver : public TDefaultIoResolverBase
+{
+ TDefaultIoResolver(const TIntermediate &intermediate) : TDefaultIoResolverBase(intermediate) { }
+
+ bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& /*type*/, bool /*is_live*/) override
+ {
+ return true;
+ }
+
+ int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override
+ {
+ const int set = getLayoutSet(type);
if (type.getQualifier().hasBinding()) {
- if (type.getBasicType() == glslang::EbtSampler) {
- const glslang::TSampler& sampler = type.getSampler();
- if (sampler.isImage())
- return reserveSlot(set, baseImageBinding + type.getQualifier().layoutBinding);
+ if (isImageType(type))
+ return reserveSlot(set, getBaseBinding(EResImage, set) + type.getQualifier().layoutBinding);
- if (sampler.isPureSampler())
- return reserveSlot(set, baseSamplerBinding + type.getQualifier().layoutBinding);
+ if (isTextureType(type))
+ return reserveSlot(set, getBaseBinding(EResTexture, set) + type.getQualifier().layoutBinding);
- if (sampler.isTexture())
- return reserveSlot(set, baseTextureBinding + type.getQualifier().layoutBinding);
- }
+ if (isSsboType(type))
+ return reserveSlot(set, getBaseBinding(EResSsbo, set) + type.getQualifier().layoutBinding);
- if (type.getQualifier().storage == EvqUniform)
- return reserveSlot(set, baseUboBinding + type.getQualifier().layoutBinding);
+ if (isSamplerType(type))
+ return reserveSlot(set, getBaseBinding(EResSampler, set) + type.getQualifier().layoutBinding);
- if (type.getQualifier().storage == EvqBuffer)
- return reserveSlot(set, baseSsboBinding + type.getQualifier().layoutBinding);
- } else if (is_live && doAutoMapping) {
+ if (isUboType(type))
+ return reserveSlot(set, getBaseBinding(EResUbo, set) + type.getQualifier().layoutBinding);
+ } else if (is_live && doAutoBindingMapping()) {
// find free slot, the caller did make sure it passes all vars with binding
// first and now all are passed that do not have a binding and needs one
- if (type.getBasicType() == glslang::EbtSampler) {
- const glslang::TSampler& sampler = type.getSampler();
- if (sampler.isImage())
- return getFreeSlot(set, baseImageBinding);
- if (sampler.isPureSampler())
- return getFreeSlot(set, baseSamplerBinding);
+ if (isImageType(type))
+ return getFreeSlot(set, getBaseBinding(EResImage, set));
- if (sampler.isTexture())
- return getFreeSlot(set, baseTextureBinding);
- }
+ if (isTextureType(type))
+ return getFreeSlot(set, getBaseBinding(EResTexture, set));
+
+ if (isSsboType(type))
+ return getFreeSlot(set, getBaseBinding(EResSsbo, set));
- if (type.getQualifier().storage == EvqUniform)
- return getFreeSlot(set, baseUboBinding);
+ if (isSamplerType(type))
+ return getFreeSlot(set, getBaseBinding(EResSampler, set));
- if (type.getQualifier().storage == EvqBuffer)
- return getFreeSlot(set, baseSsboBinding);
+ if (isUboType(type))
+ return getFreeSlot(set, getBaseBinding(EResUbo, set));
}
return -1;
}
- int resolveSet(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
- {
- if (type.getQualifier().hasSet())
- return type.getQualifier().layoutSet;
- return 0;
+protected:
+ static bool isImageType(const glslang::TType& type) {
+ return type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage();
}
- bool validateInOut(EShLanguage stage, const char* name, const TType& type, bool is_live) override
+ static bool isSsboType(const glslang::TType& type) {
+ return type.getQualifier().storage == EvqBuffer;
+ }
+};
+
+/********************************************************************************
+The following IO resolver maps types in HLSL register space, as follows:
+
+t – for shader resource views (SRV)
+ TEXTURE1D
+ TEXTURE1DARRAY
+ TEXTURE2D
+ TEXTURE2DARRAY
+ TEXTURE3D
+ TEXTURECUBE
+ TEXTURECUBEARRAY
+ TEXTURE2DMS
+ TEXTURE2DMSARRAY
+ STRUCTUREDBUFFER
+ BYTEADDRESSBUFFER
+ BUFFER
+ TBUFFER
+
+s – for samplers
+ SAMPLER
+ SAMPLER1D
+ SAMPLER2D
+ SAMPLER3D
+ SAMPLERCUBE
+ SAMPLERSTATE
+ SAMPLERCOMPARISONSTATE
+
+u – for unordered access views (UAV)
+ RWBYTEADDRESSBUFFER
+ RWSTRUCTUREDBUFFER
+ APPENDSTRUCTUREDBUFFER
+ CONSUMESTRUCTUREDBUFFER
+ RWBUFFER
+ RWTEXTURE1D
+ RWTEXTURE1DARRAY
+ RWTEXTURE2D
+ RWTEXTURE2DARRAY
+ RWTEXTURE3D
+
+b – for constant buffer views (CBV)
+ CBUFFER
+ CONSTANTBUFFER
+ ********************************************************************************/
+struct TDefaultHlslIoResolver : public TDefaultIoResolverBase
+{
+ TDefaultHlslIoResolver(const TIntermediate &intermediate) : TDefaultIoResolverBase(intermediate) { }
+
+ bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& /*type*/, bool /*is_live*/) override
{
return true;
}
- int resolveInOutLocation(EShLanguage stage, const char* name, const TType& type, bool is_live) override
+
+ int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override
{
+ const int set = getLayoutSet(type);
+
+ if (type.getQualifier().hasBinding()) {
+ if (isUavType(type))
+ return reserveSlot(set, getBaseBinding(EResUav, set) + type.getQualifier().layoutBinding);
+
+ if (isSrvType(type))
+ return reserveSlot(set, getBaseBinding(EResTexture, set) + type.getQualifier().layoutBinding);
+
+ if (isSamplerType(type))
+ return reserveSlot(set, getBaseBinding(EResSampler, set) + type.getQualifier().layoutBinding);
+
+ if (isUboType(type))
+ return reserveSlot(set, getBaseBinding(EResUbo, set) + type.getQualifier().layoutBinding);
+ } else if (is_live && doAutoBindingMapping()) {
+ // find free slot, the caller did make sure it passes all vars with binding
+ // first and now all are passed that do not have a binding and needs one
+
+ if (isUavType(type))
+ return getFreeSlot(set, getBaseBinding(EResUav, set));
+
+ if (isSrvType(type))
+ return getFreeSlot(set, getBaseBinding(EResTexture, set));
+
+ if (isSamplerType(type))
+ return getFreeSlot(set, getBaseBinding(EResSampler, set));
+
+ if (isUboType(type))
+ return getFreeSlot(set, getBaseBinding(EResUbo, set));
+ }
+
return -1;
}
- int resolveInOutComponent(EShLanguage stage, const char* name, const TType& type, bool is_live) override
- {
- return -1;
+
+protected:
+ // Return true if this is a SRV (shader resource view) type:
+ static bool isSrvType(const glslang::TType& type) {
+ return isTextureType(type) || type.getQualifier().storage == EvqBuffer;
}
- int resolveInOutIndex(EShLanguage stage, const char* name, const TType& type, bool is_live) override
- {
- return -1;
+
+ // Return true if this is a UAV (unordered access view) type:
+ static bool isUavType(const glslang::TType& type) {
+ if (type.getQualifier().readonly)
+ return false;
+
+ return (type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage()) ||
+ (type.getQualifier().storage == EvqBuffer);
}
};
+
// Map I/O variables to provided offsets, and make bindings for
// unbound but live variables.
//
// Returns false if the input is too malformed to do this.
bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSink &infoSink, TIoMapResolver *resolver)
{
- // Trivial return if there is nothing to do.
- if (intermediate.getShiftSamplerBinding() == 0 &&
- intermediate.getShiftTextureBinding() == 0 &&
- intermediate.getShiftImageBinding() == 0 &&
- intermediate.getShiftUboBinding() == 0 &&
- intermediate.getShiftSsboBinding() == 0 &&
- intermediate.getAutoMapBindings() == false &&
- resolver == nullptr)
+ bool somethingToDo = !intermediate.getResourceSetBinding().empty() ||
+ intermediate.getAutoMapBindings() ||
+ intermediate.getAutoMapLocations();
+
+ for (int res = 0; res < EResCount; ++res) {
+ somethingToDo = somethingToDo ||
+ (intermediate.getShiftBinding(TResourceType(res)) != 0) ||
+ intermediate.hasShiftBindingForSet(TResourceType(res));
+ }
+
+ if (!somethingToDo && resolver == nullptr)
return true;
if (intermediate.getNumEntryPoints() != 1 || intermediate.isRecursive())
@@ -487,16 +722,15 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSi
return false;
// if no resolver is provided, use the default resolver with the given shifts and auto map settings
- TDefaultIoResolver defaultResolver;
- if (resolver == nullptr) {
- defaultResolver.baseSamplerBinding = intermediate.getShiftSamplerBinding();
- defaultResolver.baseTextureBinding = intermediate.getShiftTextureBinding();
- defaultResolver.baseImageBinding = intermediate.getShiftImageBinding();
- defaultResolver.baseUboBinding = intermediate.getShiftUboBinding();
- defaultResolver.baseSsboBinding = intermediate.getShiftSsboBinding();
- defaultResolver.doAutoMapping = intermediate.getAutoMapBindings();
+ TDefaultIoResolver defaultResolver(intermediate);
+ TDefaultHlslIoResolver defaultHlslResolver(intermediate);
- resolver = &defaultResolver;
+ if (resolver == nullptr) {
+ // TODO: use a passed in IO mapper for this
+ if (intermediate.usingHlslIoMapping())
+ resolver = &defaultHlslResolver;
+ else
+ resolver = &defaultResolver;
}
TVarLiveMap inVarMap, outVarMap, uniformVarMap;
@@ -516,11 +750,20 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSi
std::sort(uniformVarMap.begin(), uniformVarMap.end(), TVarEntryInfo::TOrderByPriority());
bool hadError = false;
+ TNotifyInOutAdaptor inOutNotify(stage, *resolver);
+ TNotifyUniformAdaptor uniformNotify(stage, *resolver);
TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError, intermediate);
TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError, intermediate);
+ resolver->beginNotifications(stage);
+ std::for_each(inVarMap.begin(), inVarMap.end(), inOutNotify);
+ std::for_each(outVarMap.begin(), outVarMap.end(), inOutNotify);
+ std::for_each(uniformVarMap.begin(), uniformVarMap.end(), uniformNotify);
+ resolver->endNotifications(stage);
+ resolver->beginResolve(stage);
std::for_each(inVarMap.begin(), inVarMap.end(), inOutResolve);
std::for_each(outVarMap.begin(), outVarMap.end(), inOutResolve);
std::for_each(uniformVarMap.begin(), uniformVarMap.end(), uniformResolve);
+ resolver->endResolve(stage);
if (!hadError) {
// sort by id again, so we can use lower bound to find entries
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp
index 761cb4164b3..9ca1557b50e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp
@@ -101,6 +101,9 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
if (! earlyFragmentTests)
earlyFragmentTests = unit.earlyFragmentTests;
+ if (!postDepthCoverage)
+ postDepthCoverage = unit.postDepthCoverage;
+
if (depthLayout == EldNone)
depthLayout = unit.depthLayout;
else if (depthLayout != unit.depthLayout)
@@ -459,12 +462,14 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
error(infoSink, "At least one shader must specify an output layout(vertices=...)");
break;
case EShLangTessEvaluation:
- if (inputPrimitive == ElgNone)
- error(infoSink, "At least one shader must specify an input layout primitive");
- if (vertexSpacing == EvsNone)
- vertexSpacing = EvsEqual;
- if (vertexOrder == EvoNone)
- vertexOrder = EvoCcw;
+ if (source == EShSourceGlsl) {
+ if (inputPrimitive == ElgNone)
+ error(infoSink, "At least one shader must specify an input layout primitive");
+ if (vertexSpacing == EvsNone)
+ vertexSpacing = EvsEqual;
+ if (vertexOrder == EvoNone)
+ vertexOrder = EvoCcw;
+ }
break;
case EShLangGeometry:
if (inputPrimitive == ElgNone)
@@ -483,6 +488,11 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
error(infoSink, "At least one shader must specify a layout(max_vertices = value)");
break;
case EShLangFragment:
+ // for GL_ARB_post_depth_coverage, EarlyFragmentTest is set automatically in
+ // ParseHelper.cpp. So if we reach here, this must be GL_EXT_post_depth_coverage
+ // requiring explicit early_fragment_tests
+ if (getPostDepthCoverage() && !getEarlyFragmentTests())
+ error(infoSink, "post_depth_coverage requires early_fragment_tests");
break;
case EShLangCompute:
break;
@@ -858,7 +868,7 @@ int TIntermediate::checkLocationRange(int set, const TIoRange& range, const TTyp
return -1; // no collision
}
-// Accumulate locations used for inputs, outputs, and uniforms, and check for collisions
+// Accumulate bindings and offsets, and check for collisions
// as the accumulation is done.
//
// Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value.
@@ -1045,9 +1055,9 @@ unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& contains
const int baseAlignmentVec4Std140 = 16;
-// Return the size and alignment of a scalar.
+// Return the size and alignment of a component of the given type.
// The size is returned in the 'size' parameter
-// Return value is the alignment of the type.
+// Return value is the alignment..
int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size)
{
switch (type.getBasicType()) {
@@ -1055,6 +1065,8 @@ int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size)
case EbtUint64:
case EbtDouble: size = 8; return 8;
#ifdef AMD_EXTENSIONS
+ case EbtInt16:
+ case EbtUint16:
case EbtFloat16: size = 2; return 2;
#endif
default: size = 4; return 4;
@@ -1217,4 +1229,14 @@ int TIntermediate::getBaseAlignment(const TType& type, int& size, int& stride, b
return baseAlignmentVec4Std140;
}
+// To aid the basic HLSL rule about crossing vec4 boundaries.
+bool TIntermediate::improperStraddle(const TType& type, int size, int offset)
+{
+ if (! type.isVector() || type.isArray())
+ return false;
+
+ return size <= 16 ? offset / 16 != (offset + size - 1) / 16
+ : offset % 16 != 0;
+}
+
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h
index 5460dd5f9dc..062eb1b0895 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h
@@ -42,6 +42,7 @@
#include <algorithm>
#include <set>
+#include <array>
class TInfoSink;
@@ -150,6 +151,54 @@ struct TXfbBuffer {
bool containsDouble;
};
+// Track a set of strings describing how the module was processed.
+// Using the form:
+// process arg0 arg1 arg2 ...
+// process arg0 arg1 arg2 ...
+// where everything is textual, and there can be zero or more arguments
+class TProcesses {
+public:
+ TProcesses() {}
+ ~TProcesses() {}
+
+ void addProcess(const char* process)
+ {
+ processes.push_back(process);
+ }
+ void addProcess(const std::string& process)
+ {
+ processes.push_back(process);
+ }
+ void addArgument(int arg)
+ {
+ processes.back().append(" ");
+ std::string argString = std::to_string(arg);
+ processes.back().append(argString);
+ }
+ void addArgument(const char* arg)
+ {
+ processes.back().append(" ");
+ processes.back().append(arg);
+ }
+ void addArgument(const std::string& arg)
+ {
+ processes.back().append(" ");
+ processes.back().append(arg);
+ }
+ void addIfNonZero(const char* process, int value)
+ {
+ if (value != 0) {
+ addProcess(process);
+ addArgument(value);
+ }
+ }
+
+ const std::vector<std::string>& getProcesses() const { return processes; }
+
+private:
+ std::vector<std::string> processes;
+};
+
class TSymbolTable;
class TSymbol;
class TVariable;
@@ -160,24 +209,28 @@ class TVariable;
class TIntermediate {
public:
explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
+ implicitThisName("@this"),
language(l), source(EShSourceNone), profile(p), version(v), treeRoot(0),
numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
- invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet), inputPrimitive(ElgNone), outputPrimitive(ElgNone),
+ invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet),
+ inputPrimitive(ElgNone), outputPrimitive(ElgNone),
pixelCenterInteger(false), originUpperLeft(false),
- vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false), depthLayout(EldNone), depthReplacing(false), blendEquations(0),
- xfbMode(false), multiStream(false),
+ vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false),
+ postDepthCoverage(false), depthLayout(EldNone), depthReplacing(false),
+ blendEquations(0), xfbMode(false), multiStream(false),
#ifdef NV_EXTENSIONS
layoutOverrideCoverage(false),
geoPassthroughEXT(false),
#endif
- shiftSamplerBinding(0),
- shiftTextureBinding(0),
- shiftImageBinding(0),
- shiftUboBinding(0),
- shiftSsboBinding(0),
autoMapBindings(false),
+ autoMapLocations(false),
flattenUniformArrays(false),
- useUnknownFormat(false)
+ useUnknownFormat(false),
+ hlslOffsets(false),
+ useStorageBuffer(false),
+ hlslIoMapping(false),
+ textureSamplerTransformMode(EShTexSampTransKeep),
+ needToLegalize(false)
{
localSize[0] = 1;
localSize[1] = 1;
@@ -186,6 +239,8 @@ public:
localSizeSpecId[1] = TQualifier::layoutNotSet;
localSizeSpecId[2] = TQualifier::layoutNotSet;
xfbBuffers.resize(TQualifier::layoutXfbBufferEnd);
+
+ shiftBinding.fill(0);
}
void setLimits(const TBuiltInResource& r) { resources = r; }
@@ -195,33 +250,132 @@ public:
void setSource(EShSource s) { source = s; }
EShSource getSource() const { return source; }
- void setEntryPointName(const char* ep) { entryPointName = ep; }
+ void setEntryPointName(const char* ep)
+ {
+ entryPointName = ep;
+ processes.addProcess("entry-point");
+ processes.addArgument(entryPointName);
+ }
void setEntryPointMangledName(const char* ep) { entryPointMangledName = ep; }
const std::string& getEntryPointName() const { return entryPointName; }
const std::string& getEntryPointMangledName() const { return entryPointMangledName; }
- void setShiftSamplerBinding(unsigned int shift) { shiftSamplerBinding = shift; }
- unsigned int getShiftSamplerBinding() const { return shiftSamplerBinding; }
- void setShiftTextureBinding(unsigned int shift) { shiftTextureBinding = shift; }
- unsigned int getShiftTextureBinding() const { return shiftTextureBinding; }
- void setShiftImageBinding(unsigned int shift) { shiftImageBinding = shift; }
- unsigned int getShiftImageBinding() const { return shiftImageBinding; }
- void setShiftUboBinding(unsigned int shift) { shiftUboBinding = shift; }
- unsigned int getShiftUboBinding() const { return shiftUboBinding; }
- void setShiftSsboBinding(unsigned int shift) { shiftSsboBinding = shift; }
- unsigned int getShiftSsboBinding() const { return shiftSsboBinding; }
- void setAutoMapBindings(bool map) { autoMapBindings = map; }
- bool getAutoMapBindings() const { return autoMapBindings; }
- void setFlattenUniformArrays(bool flatten) { flattenUniformArrays = flatten; }
- bool getFlattenUniformArrays() const { return flattenUniformArrays; }
- void setNoStorageFormat(bool b) { useUnknownFormat = b; }
- bool getNoStorageFormat() const { return useUnknownFormat; }
+ void setShiftBinding(TResourceType res, unsigned int shift)
+ {
+ shiftBinding[res] = shift;
+
+ const char* name = getResourceName(res);
+ if (name != nullptr)
+ processes.addIfNonZero(name, shift);
+ }
+
+ unsigned int getShiftBinding(TResourceType res) const { return shiftBinding[res]; }
+
+ void setShiftBindingForSet(TResourceType res, unsigned int shift, unsigned int set)
+ {
+ if (shift == 0) // ignore if there's no shift: it's a no-op.
+ return;
+
+ shiftBindingForSet[res][set] = shift;
+
+ const char* name = getResourceName(res);
+ if (name != nullptr) {
+ processes.addProcess(name);
+ processes.addArgument(shift);
+ processes.addArgument(set);
+ }
+ }
+
+ int getShiftBindingForSet(TResourceType res, unsigned int set) const
+ {
+ const auto shift = shiftBindingForSet[res].find(set);
+ return shift == shiftBindingForSet[res].end() ? -1 : shift->second;
+ }
+ bool hasShiftBindingForSet(TResourceType res) const { return !shiftBindingForSet[res].empty(); }
+
+ void setResourceSetBinding(const std::vector<std::string>& shift)
+ {
+ resourceSetBinding = shift;
+ if (shift.size() > 0) {
+ processes.addProcess("resource-set-binding");
+ for (int s = 0; s < (int)shift.size(); ++s)
+ processes.addArgument(shift[s]);
+ }
+ }
+ const std::vector<std::string>& getResourceSetBinding() const { return resourceSetBinding; }
+ void setAutoMapBindings(bool map)
+ {
+ autoMapBindings = map;
+ if (autoMapBindings)
+ processes.addProcess("auto-map-bindings");
+ }
+ bool getAutoMapBindings() const { return autoMapBindings; }
+ void setAutoMapLocations(bool map)
+ {
+ autoMapLocations = map;
+ if (autoMapLocations)
+ processes.addProcess("auto-map-locations");
+ }
+ bool getAutoMapLocations() const { return autoMapLocations; }
+ void setFlattenUniformArrays(bool flatten)
+ {
+ flattenUniformArrays = flatten;
+ if (flattenUniformArrays)
+ processes.addProcess("flatten-uniform-arrays");
+ }
+ bool getFlattenUniformArrays() const { return flattenUniformArrays; }
+ void setNoStorageFormat(bool b)
+ {
+ useUnknownFormat = b;
+ if (useUnknownFormat)
+ processes.addProcess("no-storage-format");
+ }
+ bool getNoStorageFormat() const { return useUnknownFormat; }
+ void setHlslOffsets()
+ {
+ hlslOffsets = true;
+ if (hlslOffsets)
+ processes.addProcess("hlsl-offsets");
+ }
+ bool usingHlslOFfsets() const { return hlslOffsets; }
+ void setUseStorageBuffer()
+ {
+ useStorageBuffer = true;
+ processes.addProcess("use-storage-buffer");
+ }
+ bool usingStorageBuffer() const { return useStorageBuffer; }
+ void setHlslIoMapping(bool b)
+ {
+ hlslIoMapping = b;
+ if (hlslIoMapping)
+ processes.addProcess("hlsl-iomap");
+ }
+ bool usingHlslIoMapping() { return hlslIoMapping; }
+
+ void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; }
void setVersion(int v) { version = v; }
int getVersion() const { return version; }
void setProfile(EProfile p) { profile = p; }
EProfile getProfile() const { return profile; }
- void setSpv(const SpvVersion& s) { spvVersion = s; }
+ void setSpv(const SpvVersion& s)
+ {
+ spvVersion = s;
+
+ // client processes
+ if (spvVersion.vulkan > 0)
+ processes.addProcess("client vulkan100");
+ if (spvVersion.openGl > 0)
+ processes.addProcess("client opengl100");
+
+ // target-environment processes
+ if (spvVersion.vulkan == 100)
+ processes.addProcess("target-env vulkan1.0");
+ else if (spvVersion.vulkan > 0)
+ processes.addProcess("target-env vulkanUnknown");
+ if (spvVersion.openGl > 0)
+ processes.addProcess("target-env opengl");
+ }
const SpvVersion& getSpv() const { return spvVersion; }
EShLanguage getStage() const { return language; }
void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); }
@@ -240,7 +394,9 @@ public:
TIntermSymbol* addSymbol(const TType&, const TSourceLoc&);
TIntermSymbol* addSymbol(const TIntermSymbol&);
TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*) const;
- TIntermTyped* addShapeConversion(TOperator, const TType&, TIntermTyped*);
+ TIntermTyped* addUniShapeConversion(TOperator, const TType&, TIntermTyped*);
+ void addBiShapeConversion(TOperator, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode);
+ TIntermTyped* addShapeConversion(const TType&, TIntermTyped*);
TIntermTyped* addBinaryMath(TOperator, TIntermTyped* left, TIntermTyped* right, TSourceLoc);
TIntermTyped* addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc);
TIntermTyped* addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, TSourceLoc);
@@ -255,8 +411,8 @@ public:
TIntermAggregate* makeAggregate(const TSourceLoc&);
TIntermTyped* setAggregateOperator(TIntermNode*, TOperator, const TType& type, TSourceLoc);
bool areAllChildConst(TIntermAggregate* aggrNode);
- TIntermTyped* addSelection(TIntermTyped* cond, TIntermNodePair code, const TSourceLoc&);
- TIntermTyped* addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc&);
+ TIntermTyped* addSelection(TIntermTyped* cond, TIntermNodePair code, const TSourceLoc&, TSelectionControl = ESelectionControlNone);
+ TIntermTyped* addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc&, TSelectionControl = ESelectionControlNone);
TIntermTyped* addComma(TIntermTyped* left, TIntermTyped* right, const TSourceLoc&);
TIntermTyped* addMethod(TIntermTyped*, const TType&, const TString*, const TSourceLoc&);
TIntermConstantUnion* addConstantUnion(const TConstUnionArray&, const TType&, const TSourceLoc&, bool literal = false) const;
@@ -264,13 +420,18 @@ public:
TIntermConstantUnion* addConstantUnion(unsigned int, const TSourceLoc&, bool literal = false) const;
TIntermConstantUnion* addConstantUnion(long long, const TSourceLoc&, bool literal = false) const;
TIntermConstantUnion* addConstantUnion(unsigned long long, const TSourceLoc&, bool literal = false) const;
+#ifdef AMD_EXTENSIONS
+ TIntermConstantUnion* addConstantUnion(short, const TSourceLoc&, bool literal = false) const;
+ TIntermConstantUnion* addConstantUnion(unsigned short, const TSourceLoc&, bool literal = false) const;
+
+#endif
TIntermConstantUnion* addConstantUnion(bool, const TSourceLoc&, bool literal = false) const;
TIntermConstantUnion* addConstantUnion(double, TBasicType, const TSourceLoc&, bool literal = false) const;
TIntermConstantUnion* addConstantUnion(const TString*, const TSourceLoc&, bool literal = false) const;
TIntermTyped* promoteConstantUnion(TBasicType, TIntermConstantUnion*) const;
bool parseConstTree(TIntermNode*, TConstUnionArray, TOperator, const TType&, bool singleConstantParam = false);
- TIntermLoop* addLoop(TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&);
- TIntermAggregate* addForLoop(TIntermNode*, TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&);
+ TIntermLoop* addLoop(TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&, TLoopControl = ELoopControlNone);
+ TIntermAggregate* addForLoop(TIntermNode*, TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&, TLoopControl = ELoopControlNone);
TIntermBranch* addBranch(TOperator, const TSourceLoc&);
TIntermBranch* addBranch(TOperator, TIntermTyped*, const TSourceLoc&);
template<typename selectorType> TIntermTyped* addSwizzle(TSwizzleSelectors<selectorType>&, const TSourceLoc&);
@@ -377,6 +538,8 @@ public:
bool getPixelCenterInteger() const { return pixelCenterInteger; }
void setEarlyFragmentTests() { earlyFragmentTests = true; }
bool getEarlyFragmentTests() const { return earlyFragmentTests; }
+ void setPostDepthCoverage() { postDepthCoverage = true; }
+ bool getPostDepthCoverage() const { return postDepthCoverage; }
bool setDepth(TLayoutDepth d)
{
if (depthLayout != EldNone)
@@ -413,7 +576,9 @@ public:
}
int addXfbBufferOffset(const TType&);
unsigned int computeTypeXfbSize(const TType&, bool& containsDouble) const;
+ static int getBaseAlignmentScalar(const TType&, int& size);
static int getBaseAlignment(const TType&, int& size, int& stride, bool std140, bool rowMajor);
+ static bool improperStraddle(const TType& type, int size, int offset);
bool promote(TIntermOperator*);
#ifdef NV_EXTENSIONS
@@ -428,7 +593,22 @@ public:
return semanticNameSet.insert(name).first->c_str();
}
- const char* const implicitThisName = "@this";
+ void setSourceFile(const char* file) { sourceFile = file; }
+ const std::string& getSourceFile() const { return sourceFile; }
+ void addSourceText(const char* text) { sourceText = sourceText + text; }
+ const std::string& getSourceText() const { return sourceText; }
+ void addProcesses(const std::vector<std::string>& p) {
+ for (int i = 0; i < (int)p.size(); ++i)
+ processes.addProcess(p[i]);
+ }
+ void addProcess(const std::string& process) { processes.addProcess(process); }
+ void addProcessArgument(const std::string& arg) { processes.addArgument(arg); }
+ const std::vector<std::string>& getProcesses() const { return processes.getProcesses(); }
+
+ void setNeedsLegalization() { needToLegalize = true; }
+ bool needsLegalization() const { return needToLegalize; }
+
+ const char* const implicitThisName;
protected:
TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
@@ -443,7 +623,6 @@ protected:
void inOutLocationCheck(TInfoSink&);
TIntermSequence& findLinkerObjects() const;
bool userOutputUsed() const;
- static int getBaseAlignmentScalar(const TType&, int& size);
bool isSpecializationOperation(const TIntermOperator&) const;
bool promoteUnary(TIntermUnary&);
bool promoteBinary(TIntermBinary&);
@@ -452,6 +631,8 @@ protected:
void pushSelector(TIntermSequence&, const TVectorSelector&, const TSourceLoc&);
void pushSelector(TIntermSequence&, const TMatrixSelector&, const TSourceLoc&);
bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&);
+ void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root);
+ static const char* getResourceName(TResourceType);
const EShLanguage language; // stage, known at construction time
EShSource source; // source language, known a bit later
@@ -480,6 +661,7 @@ protected:
int localSize[3];
int localSizeSpecId[3];
bool earlyFragmentTests;
+ bool postDepthCoverage;
TLayoutDepth depthLayout;
bool depthReplacing;
int blendEquations; // an 'or'ing of masks of shifts of TBlendEquationShift
@@ -491,14 +673,20 @@ protected:
bool geoPassthroughEXT;
#endif
- unsigned int shiftSamplerBinding;
- unsigned int shiftTextureBinding;
- unsigned int shiftImageBinding;
- unsigned int shiftUboBinding;
- unsigned int shiftSsboBinding;
+ // Base shift values
+ std::array<unsigned int, EResCount> shiftBinding;
+
+ // Per-descriptor-set shift values
+ std::array<std::map<int, int>, EResCount> shiftBindingForSet;
+
+ std::vector<std::string> resourceSetBinding;
bool autoMapBindings;
+ bool autoMapLocations;
bool flattenUniformArrays;
bool useUnknownFormat;
+ bool hlslOffsets;
+ bool useStorageBuffer;
+ bool hlslIoMapping;
typedef std::list<TCall> TGraph;
TGraph callGraph;
@@ -510,6 +698,17 @@ protected:
std::unordered_set<int> usedConstantId; // specialization constant ids used
std::set<TString> semanticNameSet;
+ EShTextureSamplerTransformMode textureSamplerTransformMode;
+
+ // source code of shader, useful as part of debug information
+ std::string sourceFile;
+ std::string sourceText;
+
+ // for OpModuleProcessed, or equivalent
+ TProcesses processes;
+
+ bool needToLegalize;
+
private:
void operator=(TIntermediate&); // prevent assignments
};
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseConst.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseConst.cpp
index 22b55516aaa..1a8e6d9987c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseConst.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseConst.cpp
@@ -76,12 +76,6 @@ bool TConstTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node)
return false;
}
- if (node->getSequence().size() == 0) {
- error = true;
-
- return false;
- }
-
bool flag = node->getSequence().size() == 1 && node->getSequence()[0]->getAsTyped()->getAsConstantUnion();
if (flag) {
singleConstantParam = true;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h
index 0c85f8a19a7..5f26b4371d9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h
@@ -68,6 +68,7 @@ public:
virtual void requireStage(const TSourceLoc&, EShLanguage, const char* featureDesc);
virtual void checkDeprecated(const TSourceLoc&, int queryProfiles, int depVersion, const char* featureDesc);
virtual void requireNotRemoved(const TSourceLoc&, int queryProfiles, int removedVersion, const char* featureDesc);
+ virtual void unimplemented(const TSourceLoc&, const char* featureDesc);
virtual void requireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc);
virtual void ppRequireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc);
virtual TExtensionBehavior getExtensionBehavior(const char*);
@@ -77,6 +78,7 @@ public:
virtual void fullIntegerCheck(const TSourceLoc&, const char* op);
virtual void doubleCheck(const TSourceLoc&, const char* op);
#ifdef AMD_EXTENSIONS
+ virtual void int16Check(const TSourceLoc& loc, const char* op, bool builtIn = false);
virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false);
#endif
virtual void int64Check(const TSourceLoc&, const char* op, bool builtIn = false);
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp
index 590290bbd90..3ae711c86c1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -76,12 +76,15 @@ TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\****************************************************************************/
+#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
+#endif
#include <sstream>
#include <cstdlib>
#include <cstring>
#include <cctype>
+#include <climits>
#include "PpContext.h"
#include "PpTokens.h"
@@ -239,15 +242,20 @@ int TPpContext::CPPelse(int matchelse, TPpToken* ppToken)
int nextAtom = atomStrings.getAtom(ppToken->name);
if (nextAtom == PpAtomIf || nextAtom == PpAtomIfdef || nextAtom == PpAtomIfndef) {
depth++;
- ifdepth++;
- elsetracker++;
+ if (ifdepth >= maxIfNesting || elsetracker >= maxIfNesting) {
+ parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#if/#ifdef/#ifndef", "");
+ return EndOfInput;
+ } else {
+ ifdepth++;
+ elsetracker++;
+ }
} else if (nextAtom == PpAtomEndif) {
token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken));
elseSeen[elsetracker] = false;
--elsetracker;
if (depth == 0) {
// found the #endif we are looking for
- if (ifdepth)
+ if (ifdepth > 0)
--ifdepth;
break;
}
@@ -264,7 +272,7 @@ int TPpContext::CPPelse(int matchelse, TPpToken* ppToken)
parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
/* we decrement ifdepth here, because CPPif will increment
* it and we really want to leave it alone */
- if (ifdepth) {
+ if (ifdepth > 0) {
--ifdepth;
elseSeen[elsetracker] = false;
--elsetracker;
@@ -343,8 +351,8 @@ namespace {
int op_add(int a, int b) { return a + b; }
int op_sub(int a, int b) { return a - b; }
int op_mul(int a, int b) { return a * b; }
- int op_div(int a, int b) { return a / b; }
- int op_mod(int a, int b) { return a % b; }
+ int op_div(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a / b; }
+ int op_mod(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a % b; }
int op_pos(int a) { return a; }
int op_neg(int a) { return -a; }
int op_cmpl(int a) { return ~a; }
@@ -391,6 +399,14 @@ int TPpContext::eval(int token, int precedence, bool shortCircuit, int& res, boo
TSourceLoc loc = ppToken->loc; // because we sometimes read the newline before reporting the error
if (token == PpAtomIdentifier) {
if (strcmp("defined", ppToken->name) == 0) {
+ if (! parseContext.isReadingHLSL() && isMacroInput()) {
+ if (parseContext.relaxedErrors())
+ parseContext.ppWarn(ppToken->loc, "nonportable when expanded from macros for preprocessor expression",
+ "defined", "");
+ else
+ parseContext.ppError(ppToken->loc, "cannot use in preprocessor expression when expanded from macros",
+ "defined", "");
+ }
bool needclose = 0;
token = scanToken(ppToken);
if (token == '(') {
@@ -526,11 +542,12 @@ int TPpContext::evalToToken(int token, bool shortCircuit, int& res, bool& err, T
int TPpContext::CPPif(TPpToken* ppToken)
{
int token = scanToken(ppToken);
- elsetracker++;
- ifdepth++;
- if (ifdepth > maxIfNesting) {
+ if (ifdepth >= maxIfNesting || elsetracker >= maxIfNesting) {
parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#if", "");
- return 0;
+ return EndOfInput;
+ } else {
+ elsetracker++;
+ ifdepth++;
}
int res = 0;
bool err = false;
@@ -546,11 +563,14 @@ int TPpContext::CPPif(TPpToken* ppToken)
int TPpContext::CPPifdef(int defined, TPpToken* ppToken)
{
int token = scanToken(ppToken);
- if (++ifdepth > maxIfNesting) {
+ if (ifdepth > maxIfNesting || elsetracker > maxIfNesting) {
parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#ifdef", "");
- return 0;
+ return EndOfInput;
+ } else {
+ elsetracker++;
+ ifdepth++;
}
- elsetracker++;
+
if (token != PpAtomIdentifier) {
if (defined)
parseContext.ppError(ppToken->loc, "must be followed by macro name", "#ifdef", "");
@@ -611,14 +631,14 @@ int TPpContext::CPPinclude(TPpToken* ppToken)
TShader::Includer::IncludeResult* res = nullptr;
if (startWithLocalSearch)
res = includer.includeLocal(filename.c_str(), currentSourceFile.c_str(), includeStack.size() + 1);
- if (! res || res->headerName.empty()) {
+ if (res == nullptr || res->headerName.empty()) {
includer.releaseInclude(res);
res = includer.includeSystem(filename.c_str(), currentSourceFile.c_str(), includeStack.size() + 1);
}
// Process the results
- if (res && !res->headerName.empty()) {
- if (res->headerData && res->headerLength) {
+ if (res != nullptr && !res->headerName.empty()) {
+ if (res->headerData != nullptr && res->headerLength > 0) {
// path for processing one or more tokens from an included header, hand off 'res'
const bool forNextLine = parseContext.lineDirectiveShouldSetNextLine();
std::ostringstream prologue;
@@ -636,8 +656,8 @@ int TPpContext::CPPinclude(TPpToken* ppToken)
} else {
// error path, clean up
std::string message =
- res ? std::string(res->headerData, res->headerLength)
- : std::string("Could not process include directive");
+ res != nullptr ? std::string(res->headerData, res->headerLength)
+ : std::string("Could not process include directive");
parseContext.ppError(directiveLoc, message.c_str(), "#include", "for header name: %s", filename.c_str());
includer.releaseInclude(res);
}
@@ -714,6 +734,7 @@ int TPpContext::CPPerror(TPpToken* ppToken)
if (token == PpAtomConstInt || token == PpAtomConstUint ||
token == PpAtomConstInt64 || token == PpAtomConstUint64 ||
#ifdef AMD_EXTENSIONS
+ token == PpAtomConstInt16 || token == PpAtomConstUint16 ||
token == PpAtomConstFloat16 ||
#endif
token == PpAtomConstFloat || token == PpAtomConstDouble) {
@@ -748,6 +769,10 @@ int TPpContext::CPPpragma(TPpToken* ppToken)
case PpAtomConstUint:
case PpAtomConstInt64:
case PpAtomConstUint64:
+#ifdef AMD_EXTENSIONS
+ case PpAtomConstInt16:
+ case PpAtomConstUint16:
+#endif
case PpAtomConstFloat:
case PpAtomConstDouble:
#ifdef AMD_EXTENSIONS
@@ -776,8 +801,12 @@ int TPpContext::CPPversion(TPpToken* ppToken)
{
int token = scanToken(ppToken);
- if (errorOnVersion || versionSeen)
- parseContext.ppError(ppToken->loc, "must occur first in shader", "#version", "");
+ if (errorOnVersion || versionSeen) {
+ if (parseContext.isReadingHLSL())
+ parseContext.ppError(ppToken->loc, "invalid preprocessor command", "#version", "");
+ else
+ parseContext.ppError(ppToken->loc, "must occur first in shader", "#version", "");
+ }
versionSeen = true;
if (token == '\n') {
@@ -867,16 +896,16 @@ int TPpContext::readCPPline(TPpToken* ppToken)
token = CPPdefine(ppToken);
break;
case PpAtomElse:
- if (elsetracker[elseSeen])
+ if (elseSeen[elsetracker])
parseContext.ppError(ppToken->loc, "#else after #else", "#else", "");
- elsetracker[elseSeen] = true;
- if (! ifdepth)
+ elseSeen[elsetracker] = true;
+ if (ifdepth == 0)
parseContext.ppError(ppToken->loc, "mismatched statements", "#else", "");
token = extraTokenCheck(PpAtomElse, ppToken, scanToken(ppToken));
token = CPPelse(0, ppToken);
break;
case PpAtomElif:
- if (! ifdepth)
+ if (ifdepth == 0)
parseContext.ppError(ppToken->loc, "mismatched statements", "#elif", "");
if (elseSeen[elsetracker])
parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
@@ -887,7 +916,7 @@ int TPpContext::readCPPline(TPpToken* ppToken)
token = CPPelse(0, ppToken);
break;
case PpAtomEndif:
- if (! ifdepth)
+ if (ifdepth == 0)
parseContext.ppError(ppToken->loc, "mismatched statements", "#endif", "");
else {
elseSeen[elsetracker] = false;
@@ -1049,6 +1078,10 @@ int TPpContext::tMacroInput::scan(TPpToken* ppToken)
pasting = true;
}
+ // HLSL does expand macros before concatenation
+ if (pasting && pp->parseContext.isReadingHLSL())
+ pasting = false;
+
// TODO: preprocessor: properly handle whitespace (or lack of it) between tokens when expanding
if (token == PpAtomIdentifier) {
int i;
@@ -1124,7 +1157,6 @@ int TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, bool newLineOka
}
MacroSymbol* macro = macroAtom == 0 ? nullptr : lookupMacroDef(macroAtom);
- int token;
int depth = 0;
// no recursive expansions
@@ -1146,13 +1178,12 @@ int TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, bool newLineOka
TSourceLoc loc = ppToken->loc; // in case we go to the next line before discovering the error
in->mac = macro;
if (macro->args.size() > 0 || macro->emptyArgs) {
- token = scanToken(ppToken);
+ int token = scanToken(ppToken);
if (newLineOkay) {
while (token == '\n')
token = scanToken(ppToken);
}
if (token != '(') {
- parseContext.ppError(loc, "expected '(' following", "macro expansion", atomStrings.getString(macroAtom));
UngetToken(token, ppToken);
delete in;
return 0;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp
index 52df3b025de..06c2333ef10 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp
@@ -76,7 +76,9 @@ TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\****************************************************************************/
+#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
+#endif
#include <cassert>
#include <cstdlib>
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h
index f1c41abd38d..854bbbad206 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h
@@ -92,7 +92,7 @@ namespace glslang {
class TPpToken {
public:
- TPpToken() : space(false), ival(0), dval(0.0), i64val(0)
+ TPpToken() : space(false), i64val(0)
{
loc.init();
name[0] = 0;
@@ -108,10 +108,14 @@ public:
bool operator!=(const TPpToken& right) { return ! operator==(right); }
TSourceLoc loc;
- bool space; // true if a space (for white space or a removed comment) should also be recognized, in front of the token returned
- int ival;
- double dval;
- long long i64val;
+ bool space; // true if a space (for white space or a removed comment) should also be recognized, in front of the token returned
+
+ union {
+ int ival;
+ double dval;
+ long long i64val;
+ };
+
char name[MaxTokenLength + 1];
};
@@ -196,6 +200,7 @@ public:
virtual void ungetch() = 0;
virtual bool peekPasting() { return false; } // true when about to see ##
virtual bool endOfReplacementList() { return false; } // true when at the end of a macro replacement list (RHS of #define)
+ virtual bool isMacroInput() { return false; }
// Will be called when we start reading tokens from this instance
virtual void notifyActivated() {}
@@ -302,8 +307,9 @@ protected:
void ungetChar() { inputStack.back()->ungetch(); }
bool peekPasting() { return !inputStack.empty() && inputStack.back()->peekPasting(); }
bool endOfReplacementList() { return inputStack.empty() || inputStack.back()->endOfReplacementList(); }
+ bool isMacroInput() { return inputStack.size() > 0 && inputStack.back()->isMacroInput(); }
- static const int maxIfNesting = 64;
+ static const int maxIfNesting = 65;
int ifdepth; // current #if-#else-#endif nesting in the cpp.c file (pre-processor)
bool elseSeen[maxIfNesting]; // Keep a track of whether an else has been seen at a particular depth
@@ -325,6 +331,7 @@ protected:
virtual void ungetch() override { assert(0); }
bool peekPasting() override { return prepaste; }
bool endOfReplacementList() override { return mac->body.atEnd(); }
+ bool isMacroInput() override { return true; }
MacroSymbol *mac;
TVector<TokenStream*> args;
@@ -584,6 +591,7 @@ protected:
int ScanFromString(char* s);
void missingEndifCheck();
int lFloatConst(int len, int ch, TPpToken* ppToken);
+ int characterLiteral(TPpToken* ppToken);
void push_include(TShader::Includer::IncludeResult* result)
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpMemory.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpMemory.cpp
deleted file mode 100644
index e30db7f6d26..00000000000
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpMemory.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
-// Copyright (C) 2013 LunarG, Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-//
-// Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//
-// Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-//
-// Neither the name of 3Dlabs Inc. Ltd. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-//
-/****************************************************************************\
-Copyright (c) 2002, NVIDIA Corporation.
-
-NVIDIA Corporation("NVIDIA") supplies this software to you in
-consideration of your agreement to the following terms, and your use,
-installation, modification or redistribution of this NVIDIA software
-constitutes acceptance of these terms. If you do not agree with these
-terms, please do not use, install, modify or redistribute this NVIDIA
-software.
-
-In consideration of your agreement to abide by the following terms, and
-subject to these terms, NVIDIA grants you a personal, non-exclusive
-license, under NVIDIA's copyrights in this original NVIDIA software (the
-"NVIDIA Software"), to use, reproduce, modify and redistribute the
-NVIDIA Software, with or without modifications, in source and/or binary
-forms; provided that if you redistribute the NVIDIA Software, you must
-retain the copyright notice of NVIDIA, this notice and the following
-text and disclaimers in all such redistributions of the NVIDIA Software.
-Neither the name, trademarks, service marks nor logos of NVIDIA
-Corporation may be used to endorse or promote products derived from the
-NVIDIA Software without specific prior written permission from NVIDIA.
-Except as expressly stated in this notice, no other rights or licenses
-express or implied, are granted by NVIDIA herein, including but not
-limited to any patent rights that may be infringed by your derivative
-works or by other works in which the NVIDIA Software may be
-incorporated. No hardware is licensed hereunder.
-
-THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED,
-INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
-ITS USE AND OPERATION EITHER ALONE OR IN COMBINATION WITH OTHER
-PRODUCTS.
-
-IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT,
-INCIDENTAL, EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-TO, LOST PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY
-OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE
-NVIDIA SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT,
-TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
-NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-\****************************************************************************/
-
-namespace glslang {
-
-} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index b9e7a5b542e..b58bbeeab9d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -76,7 +76,9 @@ TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\****************************************************************************/
+#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
+#endif
#include <cstdlib>
#include <cstring>
@@ -124,6 +126,35 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
HasDecimalOrExponent = true;
saveName(ch);
ch = getChar();
+
+ // 1.#INF or -1.#INF
+ if (parseContext.intermediate.getSource() == EShSourceHlsl && ch == '#') {
+ if ((len < 2) ||
+ (len == 2 && ppToken->name[0] != '1') ||
+ (len == 3 && ppToken->name[1] != '1' && !(ppToken->name[0] == '-' || ppToken->name[0] == '+')) ||
+ (len > 3))
+ parseContext.ppError(ppToken->loc, "unexpected use of", "#", "");
+ else {
+ // we have 1.# or -1.# or +1.#, check for 'INF'
+ if ((ch = getChar()) != 'I' ||
+ (ch = getChar()) != 'N' ||
+ (ch = getChar()) != 'F')
+ parseContext.ppError(ppToken->loc, "expected 'INF'", "#", "");
+ else {
+ // we have [+-].#INF, and we are targeting IEEE 754, so wrap it up:
+ saveName('I');
+ saveName('N');
+ saveName('F');
+ ppToken->name[len] = '\0';
+ if (ppToken->name[0] == '-')
+ ppToken->i64val = 0xfff0000000000000; // -Infinity
+ else
+ ppToken->i64val = 0x7ff0000000000000; // +Infinity
+ return PpAtomConstFloat;
+ }
+ }
+ }
+
while (ch >= '0' && ch <= '9') {
saveName(ch);
ch = getChar();
@@ -216,6 +247,82 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
return PpAtomConstFloat;
}
+// Recognize a character literal.
+//
+// The first ' has already been accepted, read the rest, through the closing '.
+//
+// Always returns PpAtomConstInt.
+//
+int TPpContext::characterLiteral(TPpToken* ppToken)
+{
+ ppToken->name[0] = 0;
+ ppToken->ival = 0;
+
+ if (parseContext.intermediate.getSource() != EShSourceHlsl) {
+ // illegal, except in macro definition, for which case we report the character
+ return '\'';
+ }
+
+ int ch = getChar();
+ switch (ch) {
+ case '\'':
+ // As empty sequence: ''
+ parseContext.ppError(ppToken->loc, "unexpected", "\'", "");
+ return PpAtomConstInt;
+ case '\\':
+ // As escape sequence: '\XXX'
+ switch (ch = getChar()) {
+ case 'a':
+ ppToken->ival = 7;
+ break;
+ case 'b':
+ ppToken->ival = 8;
+ break;
+ case 't':
+ ppToken->ival = 9;
+ break;
+ case 'n':
+ ppToken->ival = 10;
+ break;
+ case 'v':
+ ppToken->ival = 11;
+ break;
+ case 'f':
+ ppToken->ival = 12;
+ break;
+ case 'r':
+ ppToken->ival = 13;
+ break;
+ case 'x':
+ case '0':
+ parseContext.ppError(ppToken->loc, "octal and hex sequences not supported", "\\", "");
+ break;
+ default:
+ // This catches '\'', '\"', '\?', etc.
+ // Also, things like '\C' mean the same thing as 'C'
+ // (after the above cases are filtered out).
+ ppToken->ival = ch;
+ break;
+ }
+ break;
+ default:
+ ppToken->ival = ch;
+ break;
+ }
+ ppToken->name[0] = (char)ppToken->ival;
+ ppToken->name[1] = '\0';
+ ch = getChar();
+ if (ch != '\'') {
+ parseContext.ppError(ppToken->loc, "expected", "\'", "");
+ // Look ahead for a closing '
+ do {
+ ch = getChar();
+ } while (ch != '\'' && ch != EndOfInput && ch != '\n');
+ }
+
+ return PpAtomConstInt;
+}
+
//
// Scanner used to tokenize source stream.
//
@@ -227,6 +334,9 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
int ii = 0;
unsigned long long ival = 0;
bool enableInt64 = pp->parseContext.version >= 450 && pp->parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64);
+#ifdef AMD_EXTENSIONS
+ bool enableInt16 = pp->parseContext.version >= 450 && pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16);
+#endif
bool acceptHalf = pp->parseContext.intermediate.getSource() == EShSourceHlsl;
#ifdef AMD_EXTENSIONS
if (pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float))
@@ -299,6 +409,9 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
bool isUnsigned = false;
bool isInt64 = false;
+#ifdef AMD_EXTENSIONS
+ bool isInt16 = false;
+#endif
ppToken->name[len++] = (char)ch;
ch = getch();
if ((ch >= '0' && ch <= '9') ||
@@ -307,7 +420,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
ival = 0;
do {
- if (ival <= 0x0fffffff || (enableInt64 && ival <= 0x0fffffffffffffffull)) {
+ if (len < MaxTokenLength && (ival <= 0x0fffffffu || (enableInt64 && ival <= 0x0fffffffffffffffull))) {
ppToken->name[len++] = (char)ch;
if (ch >= '0' && ch <= '9') {
ii = ch - '0';
@@ -320,7 +433,10 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
ival = (ival << 4) | ii;
} else {
if (! AlreadyComplained) {
- pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
+ if(len < MaxTokenLength)
+ pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
+ else
+ pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too long", "", "");
AlreadyComplained = 1;
}
ival = 0xffffffffffffffffull;
@@ -346,11 +462,28 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
} else
ungetch();
}
- }
- else if (enableInt64 && (ch == 'l' || ch == 'L')) {
+
+#ifdef AMD_EXTENSIONS
+ if (enableInt16) {
+ int nextCh = getch();
+ if ((ch == 'u' && nextCh == 's') || (ch == 'U' && nextCh == 'S')) {
+ if (len < MaxTokenLength)
+ ppToken->name[len++] = (char)nextCh;
+ isInt16 = true;
+ } else
+ ungetch();
+ }
+#endif
+ } else if (enableInt64 && (ch == 'l' || ch == 'L')) {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
isInt64 = true;
+#ifdef AMD_EXTENSIONS
+ } else if (enableInt16 && (ch == 's' || ch == 'S')) {
+ if (len < MaxTokenLength)
+ ppToken->name[len++] = (char)ch;
+ isInt16 = true;
+#endif
} else
ungetch();
ppToken->name[len] = '\0';
@@ -358,6 +491,11 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
if (isInt64) {
ppToken->i64val = ival;
return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
+#ifdef AMD_EXTENSIONS
+ } else if (isInt16) {
+ ppToken->ival = (int)ival;
+ return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
+#endif
} else {
ppToken->ival = (int)ival;
return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -367,6 +505,9 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
bool isUnsigned = false;
bool isInt64 = false;
+#ifdef AMD_EXTENSIONS
+ bool isInt16 = false;
+#endif
bool octalOverflow = false;
bool nonOctal = false;
ival = 0;
@@ -379,7 +520,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", "");
AlreadyComplained = 1;
}
- if (ival <= 0x1fffffff || (enableInt64 && ival <= 0x1fffffffffffffffull)) {
+ if (ival <= 0x1fffffffu || (enableInt64 && ival <= 0x1fffffffffffffffull)) {
ii = ch - '0';
ival = (ival << 3) | ii;
} else
@@ -421,11 +562,28 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
} else
ungetch();
}
- }
- else if (enableInt64 && (ch == 'l' || ch == 'L')) {
+
+#ifdef AMD_EXTENSIONS
+ if (enableInt16) {
+ int nextCh = getch();
+ if ((ch == 'u' && nextCh == 's') || (ch == 'U' && nextCh == 'S')) {
+ if (len < MaxTokenLength)
+ ppToken->name[len++] = (char)nextCh;
+ isInt16 = true;
+ } else
+ ungetch();
+ }
+#endif
+ } else if (enableInt64 && (ch == 'l' || ch == 'L')) {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
isInt64 = true;
+#ifdef AMD_EXTENSIONS
+ } else if (enableInt16 && (ch == 's' || ch == 'S')) {
+ if (len < MaxTokenLength)
+ ppToken->name[len++] = (char)ch;
+ isInt16 = true;
+#endif
} else
ungetch();
ppToken->name[len] = '\0';
@@ -436,6 +594,11 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
if (isInt64) {
ppToken->i64val = ival;
return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
+#ifdef AMD_EXTENSIONS
+ } else if (isInt16) {
+ ppToken->ival = (int)ival;
+ return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
+#endif
} else {
ppToken->ival = (int)ival;
return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -462,6 +625,9 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
int numericLen = len;
bool isUnsigned = false;
bool isInt64 = false;
+#ifdef AMD_EXTENSIONS
+ bool isInt16 = false;
+#endif
if (ch == 'u' || ch == 'U') {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
@@ -476,10 +642,28 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
} else
ungetch();
}
+
+#ifdef AMD_EXTENSIONS
+ if (enableInt16) {
+ int nextCh = getch();
+ if ((ch == 'u' && nextCh == 's') || (ch == 'U' && nextCh == 'S')) {
+ if (len < MaxTokenLength)
+ ppToken->name[len++] = (char)nextCh;
+ isInt16 = true;
+ } else
+ ungetch();
+ }
+#endif
} else if (enableInt64 && (ch == 'l' || ch == 'L')) {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
isInt64 = true;
+#ifdef AMD_EXTENSIONS
+ } else if (enableInt16 && (ch == 's' || ch == 'S')) {
+ if (len < MaxTokenLength)
+ ppToken->name[len++] = (char)ch;
+ isInt16 = true;
+#endif
} else
ungetch();
@@ -489,10 +673,22 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
const unsigned remainderMaxInt = 0xFFFFFFFFu - 10 * oneTenthMaxInt;
const unsigned long long oneTenthMaxInt64 = 0xFFFFFFFFFFFFFFFFull / 10;
const unsigned long long remainderMaxInt64 = 0xFFFFFFFFFFFFFFFFull - 10 * oneTenthMaxInt64;
+#ifdef AMD_EXTENSIONS
+ const unsigned short oneTenthMaxInt16 = 0xFFFFu / 10;
+ const unsigned short remainderMaxInt16 = 0xFFFFu - 10 * oneTenthMaxInt16;
+#endif
for (int i = 0; i < numericLen; i++) {
ch = ppToken->name[i] - '0';
- if ((enableInt64 == false && ((ival > oneTenthMaxInt) || (ival == oneTenthMaxInt && (unsigned)ch > remainderMaxInt))) ||
- (enableInt64 && ((ival > oneTenthMaxInt64) || (ival == oneTenthMaxInt64 && (unsigned long long)ch > remainderMaxInt64)))) {
+ bool overflow = false;
+ if (isInt64)
+ overflow = (ival > oneTenthMaxInt64 || (ival == oneTenthMaxInt64 && (unsigned long long)ch > remainderMaxInt64));
+#ifdef AMD_EXTENSIONS
+ else if (isInt16)
+ overflow = (ival > oneTenthMaxInt16 || (ival == oneTenthMaxInt16 && (unsigned short)ch > remainderMaxInt16));
+#endif
+ else
+ overflow = (ival > oneTenthMaxInt || (ival == oneTenthMaxInt && (unsigned)ch > remainderMaxInt));
+ if (overflow) {
pp->parseContext.ppError(ppToken->loc, "numeric literal too big", "", "");
ival = 0xFFFFFFFFFFFFFFFFull;
break;
@@ -503,6 +699,11 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
if (isInt64) {
ppToken->i64val = ival;
return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
+#ifdef AMD_EXTENSIONS
+ } else if (isInt16) {
+ ppToken->ival = (int)ival;
+ return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
+#endif
} else {
ppToken->ival = (int)ival;
return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -672,6 +873,8 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
return '/';
}
break;
+ case '\'':
+ return pp->characterLiteral(ppToken);
case '"':
// TODO: If this gets enhanced to handle escape sequences, or
// anything that is different than what #include needs, then
@@ -750,6 +953,10 @@ int TPpContext::tokenize(TPpToken& ppToken)
case PpAtomConstFloat:
case PpAtomConstInt64:
case PpAtomConstUint64:
+#ifdef AMD_EXTENSIONS
+ case PpAtomConstInt16:
+ case PpAtomConstUint16:
+#endif
case PpAtomConstDouble:
#ifdef AMD_EXTENSIONS
case PpAtomConstFloat16:
@@ -799,6 +1006,7 @@ int TPpContext::tokenPaste(int token, TPpToken& ppToken)
token = scanToken(&pastedPpToken);
assert(token == PpAtomPaste);
+ // This covers end of macro expansion
if (endOfReplacementList()) {
parseContext.ppError(ppToken.loc, "unexpected location; end of replacement list", "##", "");
break;
@@ -807,6 +1015,12 @@ int TPpContext::tokenPaste(int token, TPpToken& ppToken)
// get the token after the ##
token = scanToken(&pastedPpToken);
+ // This covers end of argument expansion
+ if (token == tMarkerInput::marker) {
+ parseContext.ppError(ppToken.loc, "unexpected location; end of argument", "##", "");
+ break;
+ }
+
// get the token text
switch (resultToken) {
case PpAtomIdentifier:
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpSymbols.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpSymbols.cpp
deleted file mode 100644
index 700d82e2fe8..00000000000
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpSymbols.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
-// Copyright (C) 2013 LunarG, Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-//
-// Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//
-// Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-//
-// Neither the name of 3Dlabs Inc. Ltd. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-//
-/****************************************************************************\
-Copyright (c) 2002, NVIDIA Corporation.
-
-NVIDIA Corporation("NVIDIA") supplies this software to you in
-consideration of your agreement to the following terms, and your use,
-installation, modification or redistribution of this NVIDIA software
-constitutes acceptance of these terms. If you do not agree with these
-terms, please do not use, install, modify or redistribute this NVIDIA
-software.
-
-In consideration of your agreement to abide by the following terms, and
-subject to these terms, NVIDIA grants you a personal, non-exclusive
-license, under NVIDIA's copyrights in this original NVIDIA software (the
-"NVIDIA Software"), to use, reproduce, modify and redistribute the
-NVIDIA Software, with or without modifications, in source and/or binary
-forms; provided that if you redistribute the NVIDIA Software, you must
-retain the copyright notice of NVIDIA, this notice and the following
-text and disclaimers in all such redistributions of the NVIDIA Software.
-Neither the name, trademarks, service marks nor logos of NVIDIA
-Corporation may be used to endorse or promote products derived from the
-NVIDIA Software without specific prior written permission from NVIDIA.
-Except as expressly stated in this notice, no other rights or licenses
-express or implied, are granted by NVIDIA herein, including but not
-limited to any patent rights that may be infringed by your derivative
-works or by other works in which the NVIDIA Software may be
-incorporated. No hardware is licensed hereunder.
-
-THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED,
-INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
-ITS USE AND OPERATION EITHER ALONE OR IN COMBINATION WITH OTHER
-PRODUCTS.
-
-IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT,
-INCIDENTAL, EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-TO, LOST PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY
-OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE
-NVIDIA SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT,
-TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
-NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-\****************************************************************************/
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp
index 7fa06a5a4a8..bc145e251fc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp
@@ -80,8 +80,10 @@ NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// For recording and playing back the stream of tokens in a macro definition.
//
-#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/)
+#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
+#endif
+#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/)
#define snprintf sprintf_s
#endif
@@ -139,6 +141,10 @@ void TPpContext::TokenStream::putToken(int token, TPpToken* ppToken)
case PpAtomConstUint:
case PpAtomConstInt64:
case PpAtomConstUint64:
+#ifdef AMD_EXTENSIONS
+ case PpAtomConstInt16:
+ case PpAtomConstUint16:
+#endif
case PpAtomConstFloat:
case PpAtomConstDouble:
#ifdef AMD_EXTENSIONS
@@ -188,6 +194,10 @@ int TPpContext::TokenStream::getToken(TParseContextBase& parseContext, TPpToken
case PpAtomConstUint:
case PpAtomConstInt64:
case PpAtomConstUint64:
+#ifdef AMD_EXTENSIONS
+ case PpAtomConstInt16:
+ case PpAtomConstUint16:
+#endif
len = 0;
ch = getSubtoken();
while (ch != 0 && ch != EndOfInput) {
@@ -215,6 +225,9 @@ int TPpContext::TokenStream::getToken(TParseContextBase& parseContext, TPpToken
ppToken->dval = atof(ppToken->name);
break;
case PpAtomConstInt:
+#ifdef AMD_EXTENSIONS
+ case PpAtomConstInt16:
+#endif
if (len > 0 && ppToken->name[0] == '0') {
if (len > 1 && (ppToken->name[1] == 'x' || ppToken->name[1] == 'X'))
ppToken->ival = (int)strtol(ppToken->name, 0, 16);
@@ -224,6 +237,9 @@ int TPpContext::TokenStream::getToken(TParseContextBase& parseContext, TPpToken
ppToken->ival = atoi(ppToken->name);
break;
case PpAtomConstUint:
+#ifdef AMD_EXTENSIONS
+ case PpAtomConstUint16:
+#endif
if (len > 0 && ppToken->name[0] == '0') {
if (len > 1 && (ppToken->name[1] == 'x' || ppToken->name[1] == 'X'))
ppToken->ival = (int)strtoul(ppToken->name, 0, 16);
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h
index ee442d68e75..d56df576541 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h
@@ -127,6 +127,10 @@ enum EFixedAtoms {
PpAtomConstUint,
PpAtomConstInt64,
PpAtomConstUint64,
+#ifdef AMD_EXTENSIONS
+ PpAtomConstInt16,
+ PpAtomConstUint16,
+#endif
PpAtomConstFloat,
PpAtomConstDouble,
PpAtomConstFloat16,
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.h
index 3412c85dc6c..8521ad7d6a9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.h
@@ -37,6 +37,8 @@
// propagate 'noContraction' qualifier.
//
+#pragma once
+
#include "../Include/intermediate.h"
namespace glslang {
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp
index f3f28f026c5..50fb602789e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp
@@ -131,8 +131,11 @@ public:
for (int m = 0; m <= index; ++m) {
// modify just the children's view of matrix layout, if there is one for this member
TLayoutMatrix subMatrixLayout = memberList[m].type->getQualifier().layoutMatrix;
- int memberAlignment = intermediate.getBaseAlignment(*memberList[m].type, memberSize, dummyStride, type.getQualifier().layoutPacking == ElpStd140,
- subMatrixLayout != ElmNone ? subMatrixLayout == ElmRowMajor : type.getQualifier().layoutMatrix == ElmRowMajor);
+ int memberAlignment = intermediate.getBaseAlignment(*memberList[m].type, memberSize, dummyStride,
+ type.getQualifier().layoutPacking == ElpStd140,
+ subMatrixLayout != ElmNone
+ ? subMatrixLayout == ElmRowMajor
+ : type.getQualifier().layoutMatrix == ElmRowMajor);
RoundToPow2(offset, memberAlignment);
if (m < index)
offset += memberSize;
@@ -151,7 +154,8 @@ public:
int lastMemberSize;
int dummyStride;
- intermediate.getBaseAlignment(*memberList[lastIndex].type, lastMemberSize, dummyStride, blockType.getQualifier().layoutPacking == ElpStd140,
+ intermediate.getBaseAlignment(*memberList[lastIndex].type, lastMemberSize, dummyStride,
+ blockType.getQualifier().layoutPacking == ElpStd140,
blockType.getQualifier().layoutMatrix == ElmRowMajor);
return lastOffset + lastMemberSize;
@@ -167,7 +171,7 @@ public:
void blowUpActiveAggregate(const TType& baseType, const TString& baseName, const TList<TIntermBinary*>& derefs,
TList<TIntermBinary*>::const_iterator deref, int offset, int blockIndex, int arraySize)
{
- // process the part of the derefence chain that was explicit in the shader
+ // process the part of the dereference chain that was explicit in the shader
TString name = baseName;
const TType* terminalType = &baseType;
for (; deref != derefs.end(); ++deref) {
@@ -177,7 +181,7 @@ public:
switch (visitNode->getOp()) {
case EOpIndexIndirect:
// Visit all the indices of this array, and for each one add on the remaining dereferencing
- for (int i = 0; i < visitNode->getLeft()->getType().getOuterArraySize(); ++i) {
+ for (int i = 0; i < std::max(visitNode->getLeft()->getType().getOuterArraySize(), 1); ++i) {
TString newBaseName = name;
if (baseType.getBasicType() != EbtBlock)
newBaseName.append(TString("[") + String(i) + "]");
@@ -212,7 +216,7 @@ public:
if (terminalType->isArray()) {
// Visit all the indices of this array, and for each one,
// fully explode the remaining aggregate to dereference
- for (int i = 0; i < terminalType->getOuterArraySize(); ++i) {
+ for (int i = 0; i < std::max(terminalType->getOuterArraySize(), 1); ++i) {
TString newBaseName = name;
newBaseName.append(TString("[") + String(i) + "]");
TType derefType(*terminalType, 0);
@@ -235,7 +239,7 @@ public:
}
// Finally, add a full string to the reflection database, and update the array size if necessary.
- // If the derefenced entity to record is an array, compute the size and update the maximum size.
+ // If the dereferenced entity to record is an array, compute the size and update the maximum size.
// there might not be a final array dereference, it could have been copied as an array object
if (arraySize == 0)
@@ -244,7 +248,8 @@ public:
TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name);
if (it == reflection.nameToIndex.end()) {
reflection.nameToIndex[name] = (int)reflection.indexToUniform.size();
- reflection.indexToUniform.push_back(TObjectReflection(name, *terminalType, offset, mapToGlType(*terminalType),
+ reflection.indexToUniform.push_back(TObjectReflection(name, *terminalType, offset,
+ mapToGlType(*terminalType),
arraySize, blockIndex));
} else if (arraySize > 1) {
int& reflectedArraySize = reflection.indexToUniform[it->second].size;
@@ -417,7 +422,8 @@ public:
case Esd2D:
switch ((int)sampler.ms) {
case false: return sampler.arrayed ? GL_INT_SAMPLER_2D_ARRAY : GL_INT_SAMPLER_2D;
- case true: return sampler.arrayed ? GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY : GL_INT_SAMPLER_2D_MULTISAMPLE;
+ case true: return sampler.arrayed ? GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY
+ : GL_INT_SAMPLER_2D_MULTISAMPLE;
}
case Esd3D:
return GL_INT_SAMPLER_3D;
@@ -435,7 +441,8 @@ public:
case Esd2D:
switch ((int)sampler.ms) {
case false: return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_ARRAY : GL_UNSIGNED_INT_SAMPLER_2D;
- case true: return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY : GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE;
+ case true: return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY
+ : GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE;
}
case Esd3D:
return GL_UNSIGNED_INT_SAMPLER_3D;
@@ -495,7 +502,8 @@ public:
case Esd2D:
switch ((int)sampler.ms) {
case false: return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_ARRAY : GL_UNSIGNED_INT_IMAGE_2D;
- case true: return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY : GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE;
+ case true: return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY
+ : GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE;
}
case Esd3D:
return GL_UNSIGNED_INT_IMAGE_3D;
@@ -707,12 +715,27 @@ void TReflection::buildAttributeReflection(EShLanguage stage, const TIntermediat
}
}
+// build counter block index associations for buffers
+void TReflection::buildCounterIndices()
+{
+ // search for ones that have counters
+ for (int i = 0; i < int(indexToUniformBlock.size()); ++i) {
+ const TString counterName(indexToUniformBlock[i].name + "@count");
+ const int index = getIndex(counterName);
+
+ if (index >= 0)
+ indexToUniformBlock[i].counterIndex = index;
+ }
+}
+
// Merge live symbols from 'intermediate' into the existing reflection database.
//
// Returns false if the input is too malformed to do this.
bool TReflection::addStage(EShLanguage stage, const TIntermediate& intermediate)
{
- if (intermediate.getNumEntryPoints() != 1 || intermediate.isRecursive())
+ if (intermediate.getTreeRoot() == nullptr ||
+ intermediate.getNumEntryPoints() != 1 ||
+ intermediate.isRecursive())
return false;
buildAttributeReflection(stage, intermediate);
@@ -729,6 +752,8 @@ bool TReflection::addStage(EShLanguage stage, const TIntermediate& intermediate)
function->traverse(&it);
}
+ buildCounterIndices();
+
return true;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h
index c80d3ea90e7..fedfbe8d4a0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h
@@ -57,30 +57,35 @@ class TObjectReflection {
public:
TObjectReflection(const TString& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex) :
name(pName), offset(pOffset),
- glDefineType(pGLDefineType), size(pSize), index(pIndex), type(pType.clone()) { }
+ glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1), type(pType.clone()) { }
- void dump() const {
- printf("%s: offset %d, type %x, size %d, index %d, binding %d\n",
- name.c_str(), offset, glDefineType, size, index, getBinding() );
+ const TType* const getType() const { return type; }
+ int getBinding() const
+ {
+ if (type == nullptr || !type->getQualifier().hasBinding())
+ return -1;
+ return type->getQualifier().layoutBinding;
}
+ void dump() const
+ {
+ printf("%s: offset %d, type %x, size %d, index %d, binding %d",
+ name.c_str(), offset, glDefineType, size, index, getBinding() );
- const TType* const getType() const { return type; }
+ if (counterIndex != -1)
+ printf(", counter %d", counterIndex);
+
+ printf("\n");
+ }
+ static TObjectReflection badReflection() { return TObjectReflection(); }
TString name;
int offset;
int glDefineType;
int size; // data size in bytes for a block, array size for a (non-block) object that's an array
int index;
-
- static TObjectReflection badReflection() { return TObjectReflection(); }
+ int counterIndex;
protected:
- int getBinding() const {
- if (type == nullptr || type->getQualifier().layoutBinding == TQualifier::layoutBindingEnd)
- return -1;
- return type->getQualifier().layoutBinding;
- }
-
TObjectReflection() : offset(-1), glDefineType(-1), size(-1), index(-1), type(nullptr) { }
const TType* type;
@@ -140,6 +145,9 @@ public:
return it->second;
}
+ // see getIndex(const char*)
+ int getIndex(const TString& name) const { return getIndex(name.c_str()); }
+
// Thread local size
unsigned getLocalSize(int dim) const { return dim <= 2 ? localSize[dim] : 0; }
@@ -148,6 +156,7 @@ public:
protected:
friend class glslang::TReflectionTraverser;
+ void buildCounterIndices();
void buildAttributeReflection(EShLanguage, const TIntermediate&);
// Need a TString hash: typedef std::unordered_map<TString, int> TNameToIndex;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt
index 174cc9167e0..1bf49e1256d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt
@@ -1,5 +1,8 @@
add_library(OSDependent STATIC ossource.cpp ../osinclude.h)
set_property(TARGET OSDependent PROPERTY FOLDER glslang)
+set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON)
-install(TARGETS OSDependent
- ARCHIVE DESTINATION lib)
+if(ENABLE_GLSLANG_INSTALL)
+ install(TARGETS OSDependent
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif(ENABLE_GLSLANG_INSTALL)
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp
index 4f8098b752a..f59bbceb4a9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp
@@ -43,6 +43,9 @@
#include <assert.h>
#include <errno.h>
#include <stdint.h>
+#include <cstdio>
+#include <sys/time.h>
+#include <sys/resource.h>
namespace glslang {
@@ -184,22 +187,18 @@ void ReleaseGlobalLock()
pthread_mutex_unlock(&gMutex);
}
-// TODO: non-windows: if we need these on linux, flesh them out
-void* OS_CreateThread(TThreadEntrypoint /*entry*/)
-{
- return 0;
-}
-
-void OS_WaitForAllThreads(void* /*threads*/, int /*numThreads*/)
-{
-}
-
-void OS_Sleep(int /*milliseconds*/)
-{
-}
+// #define DUMP_COUNTERS
void OS_DumpMemoryCounters()
{
+#ifdef DUMP_COUNTERS
+ struct rusage usage;
+
+ if (getrusage(RUSAGE_SELF, &usage) == 0)
+ printf("Working set size: %ld\n", usage.ru_maxrss * 1024);
+#else
+ printf("Recompile with DUMP_COUNTERS defined to see counters.\n");
+#endif
}
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/CMakeLists.txt
index 399760c30a7..f257418abbe 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/CMakeLists.txt
@@ -2,16 +2,19 @@ set(SOURCES ossource.cpp ../osinclude.h)
add_library(OSDependent STATIC ${SOURCES})
set_property(TARGET OSDependent PROPERTY FOLDER glslang)
+set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON)
# MinGW GCC complains about function pointer casts to void*.
# Turn that off with -fpermissive.
if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
- target_compile_options(OSDependent PRIVATE -fpermissive)
+ target_compile_options(OSDependent PRIVATE -fpermissive)
endif()
if(WIN32)
source_group("Source" FILES ${SOURCES})
endif(WIN32)
-install(TARGETS OSDependent
- ARCHIVE DESTINATION lib)
+if(ENABLE_GLSLANG_INSTALL)
+ install(TARGETS OSDependent
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif(ENABLE_GLSLANG_INSTALL)
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp
index 73ae0ca7162..870840c56ea 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp
@@ -131,21 +131,6 @@ unsigned int __stdcall EnterGenericThread (void* entry)
return ((TThreadEntrypoint)entry)(0);
}
-void* OS_CreateThread(TThreadEntrypoint entry)
-{
- return (void*)_beginthreadex(0, 0, EnterGenericThread, (void*)entry, 0, 0);
-}
-
-void OS_WaitForAllThreads(void* threads, int numThreads)
-{
- WaitForMultipleObjects(numThreads, (HANDLE*)threads, true, INFINITE);
-}
-
-void OS_Sleep(int milliseconds)
-{
- Sleep(milliseconds);
-}
-
//#define DUMP_COUNTERS
void OS_DumpMemoryCounters()
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/osinclude.h b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/osinclude.h
index e8325268e9b..218abe4f23f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/osinclude.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/osinclude.h
@@ -53,11 +53,8 @@ void GetGlobalLock();
void ReleaseGlobalLock();
typedef unsigned int (*TThreadEntrypoint)(void*);
-void* OS_CreateThread(TThreadEntrypoint);
-void OS_WaitForAllThreads(void* threads, int numThreads);
void OS_CleanupThreadData(void);
-void OS_Sleep(int milliseconds);
void OS_DumpMemoryCounters();
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h
index 8d8abd777bc..6e22bdd727a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h
@@ -40,6 +40,7 @@
#include "../MachineIndependent/Versions.h"
#include <cstring>
+#include <vector>
#ifdef _WIN32
#define C_DECL __cdecl
@@ -67,15 +68,14 @@
#endif
//
-// Driver must call this first, once, before doing any other
-// compiler/linker operations.
+// Call before doing any other compiler/linker operations.
//
// (Call once per process, not once per thread.)
//
SH_IMPORT_EXPORT int ShInitialize();
//
-// Driver should call this at process shutdown.
+// Call this at process shutdown to clean up memory.
//
SH_IMPORT_EXPORT int __fastcall ShFinalize();
@@ -109,7 +109,44 @@ typedef enum {
EShSourceNone,
EShSourceGlsl,
EShSourceHlsl,
-} EShSource; // if EShLanguage were EShStage, this could be EShLanguage instead
+} EShSource; // if EShLanguage were EShStage, this could be EShLanguage instead
+
+typedef enum {
+ EShClientNone,
+ EShClientVulkan,
+ EShClientOpenGL,
+} EShClient;
+
+typedef enum {
+ EShTargetNone,
+ EshTargetSpv,
+} EShTargetLanguage;
+
+struct TInputLanguage {
+ EShSource languageFamily; // redundant information with other input, this one overrides when not EShSourceNone
+ EShLanguage stage; // redundant information with other input, this one overrides when not EShSourceNone
+ EShClient dialect;
+ int dialectVersion; // version of client's language definition, not the client (when not EShClientNone)
+};
+
+struct TClient {
+ EShClient client;
+ int version; // version of client itself (not the client's input dialect)
+};
+
+struct TTarget {
+ EShTargetLanguage language;
+ unsigned int version; // the version to target, if SPIR-V, defined by "word 1" of the SPIR-V binary header
+};
+
+// All source/client/target versions and settings.
+// Can override previous methods of setting, when items are set here.
+// Expected to grow, as more are added, rather than growing parameter lists.
+struct TEnvironment {
+ TInputLanguage input; // definition of the input language
+ TClient client; // what client is the overall compilation being done for?
+ TTarget target; // what to generate
+};
const char* StageName(EShLanguage);
@@ -134,6 +171,14 @@ typedef enum {
} EShOptimizationLevel;
//
+// Texture and Sampler transformation mode.
+//
+typedef enum {
+ EShTexSampTransKeep, // keep textures and samplers as is (default)
+ EShTexSampTransUpgradeTextureRemoveSampler, // change texture w/o embeded sampler into sampled texture and throw away all samplers
+} EShTextureSamplerTransformMode;
+
+//
// Message choices for what errors and warnings are given.
//
enum EShMessages {
@@ -147,6 +192,8 @@ enum EShMessages {
EShMsgReadHlsl = (1 << 6), // use HLSL parsing rules and semantics
EShMsgCascadingErrors = (1 << 7), // get cascading errors; risks error-recovery issues, instead of an early exit
EShMsgKeepUncalled = (1 << 8), // for testing, don't eliminate uncalled functions
+ EShMsgHlslOffsets = (1 << 9), // allow block offsets to follow HLSL rules instead of GLSL rules
+ EShMsgDebugInfo = (1 << 10), // save debug information
};
//
@@ -242,7 +289,7 @@ SH_IMPORT_EXPORT int ShGetUniformLocation(const ShHandle uniformMap, const char*
// Deferred-Lowering C++ Interface
// -----------------------------------
//
-// Below is a new alternate C++ interface that might potentially replace the above
+// Below is a new alternate C++ interface, which deprecates the above
// opaque handle-based interface.
//
// The below is further designed to handle multiple compilation units per stage, where
@@ -276,6 +323,17 @@ bool InitializeProcess();
// Call once per process to tear down everything
void FinalizeProcess();
+// Resource type for IO resolver
+enum TResourceType {
+ EResSampler,
+ EResTexture,
+ EResImage,
+ EResUbo,
+ EResSsbo,
+ EResUav,
+ EResCount
+};
+
// Make one TShader per shader that you will link into a program. Then provide
// the shader through setStrings() or setStringsWithLengths(), then call parse(),
// then query the info logs.
@@ -298,14 +356,44 @@ public:
void setPreamble(const char* s) { preamble = s; }
void setEntryPoint(const char* entryPoint);
void setSourceEntryPoint(const char* sourceEntryPointName);
- void setShiftSamplerBinding(unsigned int base);
- void setShiftTextureBinding(unsigned int base);
- void setShiftImageBinding(unsigned int base);
- void setShiftUboBinding(unsigned int base);
- void setShiftSsboBinding(unsigned int base);
+ void addProcesses(const std::vector<std::string>&);
+
+ // IO resolver binding data: see comments in ShaderLang.cpp
+ void setShiftBinding(TResourceType res, unsigned int base);
+ void setShiftSamplerBinding(unsigned int base); // DEPRECATED: use setShiftBinding
+ void setShiftTextureBinding(unsigned int base); // DEPRECATED: use setShiftBinding
+ void setShiftImageBinding(unsigned int base); // DEPRECATED: use setShiftBinding
+ void setShiftUboBinding(unsigned int base); // DEPRECATED: use setShiftBinding
+ void setShiftUavBinding(unsigned int base); // DEPRECATED: use setShiftBinding
+ void setShiftCbufferBinding(unsigned int base); // synonym for setShiftUboBinding
+ void setShiftSsboBinding(unsigned int base); // DEPRECATED: use setShiftBinding
+ void setShiftBindingForSet(TResourceType res, unsigned int base, unsigned int set);
+ void setResourceSetBinding(const std::vector<std::string>& base);
void setAutoMapBindings(bool map);
+ void setAutoMapLocations(bool map);
+ void setHlslIoMapping(bool hlslIoMap);
void setFlattenUniformArrays(bool flatten);
void setNoStorageFormat(bool useUnknownFormat);
+ void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode);
+
+ // For setting up the environment (initialized in the constructor):
+ void setEnvInput(EShSource lang, EShLanguage envStage, EShClient client, int version)
+ {
+ environment.input.languageFamily = lang;
+ environment.input.stage = envStage;
+ environment.input.dialect = client;
+ environment.input.dialectVersion = version;
+ }
+ void setEnvClient(EShClient client, int version)
+ {
+ environment.client.client = client;
+ environment.client.version = version;
+ }
+ void setEnvTarget(EShTargetLanguage lang, unsigned int version)
+ {
+ environment.target.language = lang;
+ environment.target.version = version;
+ }
// Interface to #include handlers.
//
@@ -390,6 +478,9 @@ public:
virtual void releaseInclude(IncludeResult*) override { }
};
+ bool parse(const TBuiltInResource*, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile,
+ bool forwardCompatible, EShMessages, Includer&);
+
bool parse(const TBuiltInResource* res, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile,
bool forwardCompatible, EShMessages messages)
{
@@ -397,12 +488,18 @@ public:
return parse(res, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, forwardCompatible, messages, includer);
}
- bool parse(const TBuiltInResource*, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile,
- bool forwardCompatible, EShMessages, Includer&);
-
// Equivalent to parse() without a default profile and without forcing defaults.
- // Provided for backwards compatibility.
- bool parse(const TBuiltInResource*, int defaultVersion, bool forwardCompatible, EShMessages);
+ bool parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages)
+ {
+ return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages);
+ }
+
+ bool parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages,
+ Includer& includer)
+ {
+ return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages, includer);
+ }
+
bool preprocess(const TBuiltInResource* builtInResources,
int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile,
bool forwardCompatible, EShMessages message, std::string* outputString,
@@ -410,8 +507,8 @@ public:
const char* getInfoLog();
const char* getInfoDebugLog();
-
EShLanguage getStage() const { return stage; }
+ TIntermediate* getIntermediate() const { return intermediate; }
protected:
TPoolAllocator* pool;
@@ -437,6 +534,8 @@ protected:
// a function in the source string can be renamed FROM this TO the name given in setEntryPoint.
std::string sourceEntryPointName;
+ TEnvironment environment;
+
friend class TProgram;
private:
@@ -448,9 +547,10 @@ class TIoMapper;
// Allows to customize the binding layout after linking.
// All used uniform variables will invoke at least validateBinding.
-// If validateBinding returned true then the other resolveBinding
-// and resolveSet are invoked to resolve the binding and descriptor
-// set index respectively.
+// If validateBinding returned true then the other resolveBinding,
+// resolveSet, and resolveLocation are invoked to resolve the binding
+// and descriptor set index respectively.
+//
// Invocations happen in a particular order:
// 1) all shader inputs
// 2) all shader outputs
@@ -459,6 +559,13 @@ class TIoMapper;
// 5) all uniforms with set but no binding defined
// 6) all uniforms with no binding and no set defined
//
+// mapIO will use this resolver in two phases. The first
+// phase is a notification phase, calling the corresponging
+// notifiy callbacks, this phase ends with a call to endNotifications.
+// Phase two starts directly after the call to endNotifications
+// and calls all other callbacks to validate and to get the
+// bindings, sets, locations, component and color indices.
+//
// NOTE: that still limit checks are applied to bindings and sets
// and may result in an error.
class TIoMapResolver
@@ -466,27 +573,42 @@ class TIoMapResolver
public:
virtual ~TIoMapResolver() {}
- // Should return true if the resulting/current binding would be ok.
+ // Should return true if the resulting/current binding would be okay.
// Basic idea is to do aliasing binding checks with this.
virtual bool validateBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
// Should return a value >= 0 if the current binding should be overridden.
// Return -1 if the current binding (including no binding) should be kept.
virtual int resolveBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current set should be overriden.
+ // Should return a value >= 0 if the current set should be overridden.
// Return -1 if the current set (including no set) should be kept.
virtual int resolveSet(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return true if the resuling/current setup would be ok.
+ // Should return a value >= 0 if the current location should be overridden.
+ // Return -1 if the current location (including no location) should be kept.
+ virtual int resolveUniformLocation(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+ // Should return true if the resulting/current setup would be okay.
// Basic idea is to do aliasing checks and reject invalid semantic names.
virtual bool validateInOut(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current location should be overriden.
+ // Should return a value >= 0 if the current location should be overridden.
// Return -1 if the current location (including no location) should be kept.
virtual int resolveInOutLocation(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current component index should be overriden.
+ // Should return a value >= 0 if the current component index should be overridden.
// Return -1 if the current component index (including no index) should be kept.
virtual int resolveInOutComponent(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current color index should be overriden.
+ // Should return a value >= 0 if the current color index should be overridden.
// Return -1 if the current color index (including no index) should be kept.
virtual int resolveInOutIndex(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+ // Notification of a uniform variable
+ virtual void notifyBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+ // Notification of a in or out variable
+ virtual void notifyInOut(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+ // Called by mapIO when it has finished the notify pass
+ virtual void endNotifications(EShLanguage stage) = 0;
+ // Called by mapIO when it starts its notify pass for the given stage
+ virtual void beginNotifications(EShLanguage stage) = 0;
+ // Called by mipIO when it starts its resolve pass for the given stage
+ virtual void beginResolve(EShLanguage stage) = 0;
+ // Called by mapIO when it has finished the resolve pass
+ virtual void endResolve(EShLanguage stage) = 0;
};
// Make one TProgram per set of shaders that will get linked together. Add all
@@ -516,7 +638,9 @@ public:
const char* getUniformBlockName(int blockIndex) const; // can be used for glGetActiveUniformBlockName()
int getUniformBlockSize(int blockIndex) const; // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
int getUniformIndex(const char* name) const; // can be used for glGetUniformIndices()
+ int getUniformBinding(int index) const; // returns the binding number
int getUniformBlockIndex(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
+ int getUniformBlockCounterIndex(int index) const; // returns block index of associated counter.
int getUniformType(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
int getUniformBufferOffset(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET)
int getUniformArraySize(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE)
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp
index d8a5ef94c92..5f6de4f6d50 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp
@@ -62,6 +62,7 @@ INSTANTIATE_TEST_CASE_P(
"versionsErrors.frag",
"versionsErrors.vert",
"100.frag",
+ "100samplerExternal.frag",
"120.vert",
"120.frag",
"130.vert",
@@ -77,10 +78,13 @@ INSTANTIATE_TEST_CASE_P(
"matrixError.vert",
"cppSimple.vert",
"cppIndent.vert",
+ "cppIntMinOverNegativeOne.frag",
"cppNest.vert",
"cppBad.vert",
"cppBad2.vert",
"cppComplexExpr.vert",
+ "cppDeepNest.frag",
+ "cppPassMacroName.frag",
"badChars.frag",
"pointCoord.frag",
"array.frag",
@@ -93,6 +97,7 @@ INSTANTIATE_TEST_CASE_P(
"300layout.frag",
"300operations.frag",
"300block.frag",
+ "300samplerExternal.frag",
"310.comp",
"310.vert",
"310.geom",
@@ -101,10 +106,17 @@ INSTANTIATE_TEST_CASE_P(
"310.tese",
"310implicitSizeArrayError.vert",
"310AofA.vert",
+ "320.comp",
+ "320.vert",
+ "320.geom",
+ "320.frag",
+ "320.tesc",
+ "320.tese",
"330.frag",
"330comp.frag",
"constErrors.frag",
"constFold.frag",
+ "constFoldIntMin.frag",
"errors.frag",
"forwardRef.frag",
"uint.frag",
@@ -136,6 +148,7 @@ INSTANTIATE_TEST_CASE_P(
"430.vert",
"430.comp",
"430AofA.frag",
+ "435.vert",
"440.vert",
"440.frag",
"450.vert",
@@ -144,8 +157,11 @@ INSTANTIATE_TEST_CASE_P(
"450.tese",
"450.frag",
"450.comp",
+ "460.frag",
+ "460.vert",
"dce.frag",
"atomic_uint.frag",
+ "implicitInnerAtomicUint.frag",
"aggOps.frag",
"always-discard.frag",
"always-discard2.frag",
@@ -170,12 +186,14 @@ INSTANTIATE_TEST_CASE_P(
"matrix2.frag",
"newTexture.frag",
"Operations.frag",
+ "overlongLiteral.frag",
"prepost.frag",
"simpleFunctionCall.frag",
"structAssignment.frag",
"structDeref.frag",
"structure.frag",
"swizzle.frag",
+ "invalidSwizzle.vert",
"syntaxError.frag",
"test.frag",
"texture.frag",
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/gtests/CMakeLists.txt
index c383ca0741e..15b73f4bde9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/CMakeLists.txt
@@ -1,55 +1,59 @@
-if (TARGET gmock)
- message(STATUS "Google Mock found - building tests")
+if(BUILD_TESTING)
+ if(TARGET gmock)
+ message(STATUS "Google Mock found - building tests")
- set(TEST_SOURCES
- # Framework related source files
- ${CMAKE_CURRENT_SOURCE_DIR}/Initializer.h
- ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/Settings.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/Settings.h
- ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.h
+ set(TEST_SOURCES
+ # Framework related source files
+ ${CMAKE_CURRENT_SOURCE_DIR}/Initializer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/Settings.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/Settings.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.h
- # Test related source files
- ${CMAKE_CURRENT_SOURCE_DIR}/AST.FromFile.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/BuiltInResource.FromFile.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/Config.FromFile.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/HexFloat.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/Hlsl.FromFile.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp
- # -- Remapper tests
- ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp
- )
+ # Test related source files
+ ${CMAKE_CURRENT_SOURCE_DIR}/AST.FromFile.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/BuiltInResource.FromFile.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/Config.FromFile.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/HexFloat.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/Hlsl.FromFile.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp
- add_executable(glslangtests ${TEST_SOURCES})
- set_property(TARGET glslangtests PROPERTY FOLDER tests)
- glslang_set_link_args(glslangtests)
- install(TARGETS glslangtests
- RUNTIME DESTINATION bin)
+ # -- Remapper tests
+ ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp)
- set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
- # Supply a default test root directory, so that manual testing
- # doesn't have to specify the --test-root option in the normal
- # case that you want to use the tests from the same source tree.
- target_compile_definitions(glslangtests
- PRIVATE GLSLANG_TEST_DIRECTORY="${GLSLANG_TEST_DIRECTORY}")
- target_include_directories(glslangtests PRIVATE
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${PROJECT_SOURCE_DIR}
- ${gmock_SOURCE_DIR}/include
- ${gtest_SOURCE_DIR}/include)
+ add_executable(glslangtests ${TEST_SOURCES})
+ set_property(TARGET glslangtests PROPERTY FOLDER tests)
+ glslang_set_link_args(glslangtests)
+ if(ENABLE_GLSLANG_INSTALL)
+ install(TARGETS glslangtests
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+ endif(ENABLE_GLSLANG_INSTALL)
- set(LIBRARIES
- SPVRemapper glslang OSDependent OGLCompiler glslang
- SPIRV glslang-default-resource-limits)
- if(ENABLE_HLSL)
- set(LIBRARIES ${LIBRARIES} HLSL)
- endif(ENABLE_HLSL)
- target_link_libraries(glslangtests PRIVATE ${LIBRARIES} gmock)
+ set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
+ # Supply a default test root directory, so that manual testing
+ # doesn't have to specify the --test-root option in the normal
+ # case that you want to use the tests from the same source tree.
+ target_compile_definitions(glslangtests
+ PRIVATE GLSLANG_TEST_DIRECTORY="${GLSLANG_TEST_DIRECTORY}")
+ target_include_directories(glslangtests PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${PROJECT_SOURCE_DIR}
+ ${gmock_SOURCE_DIR}/include
+ ${gtest_SOURCE_DIR}/include)
- add_test(NAME glslang-gtests
- COMMAND glslangtests --test-root "${GLSLANG_TEST_DIRECTORY}")
+ set(LIBRARIES
+ SPVRemapper glslang OSDependent OGLCompiler glslang
+ SPIRV glslang-default-resource-limits)
+ if(ENABLE_HLSL)
+ set(LIBRARIES ${LIBRARIES} HLSL)
+ endif(ENABLE_HLSL)
+ target_link_libraries(glslangtests PRIVATE ${LIBRARIES} gmock)
+
+ add_test(NAME glslang-gtests
+ COMMAND glslangtests --test-root "${GLSLANG_TEST_DIRECTORY}")
+ endif()
endif()
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp
index 0b68aeab827..2e4b146d647 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp
@@ -59,9 +59,10 @@ std::string FileNameAsCustomTestSuffix(
using HlslCompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslLegalizeTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
-// Compiling HLSL to SPIR-V under Vulkan semantics. Expected to successfully
-// generate both AST and SPIR-V.
+// Compiling HLSL to pre-legalized SPIR-V under Vulkan semantics. Expected
+// to successfully generate both AST and SPIR-V.
TEST_P(HlslCompileTest, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
@@ -76,37 +77,85 @@ TEST_P(HlslCompileAndFlattenTest, FromFile)
Target::BothASTAndSpv, GetParam().entryPoint);
}
+// Compiling HLSL to legal SPIR-V under Vulkan semantics. Expected to
+// successfully generate SPIR-V.
+TEST_P(HlslLegalizeTest, FromFile)
+{
+ loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+ Source::HLSL, Semantics::Vulkan,
+ Target::Spv, GetParam().entryPoint,
+ "/baseLegalResults/", false);
+}
+
// clang-format off
INSTANTIATE_TEST_CASE_P(
ToSpirv, HlslCompileTest,
::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
{"hlsl.amend.frag", "f1"},
+ {"hlsl.aliasOpaque.frag", "main"},
{"hlsl.array.frag", "PixelShaderFunction"},
{"hlsl.array.implicit-size.frag", "PixelShaderFunction"},
{"hlsl.array.multidim.frag", "main"},
{"hlsl.assoc.frag", "PixelShaderFunction"},
{"hlsl.attribute.frag", "PixelShaderFunction"},
{"hlsl.attribute.expression.comp", "main"},
+ {"hlsl.attributeC11.frag", "main"},
+ {"hlsl.attributeGlobalBuffer.frag", "main"},
{"hlsl.basic.comp", "main"},
{"hlsl.basic.geom", "main"},
+ {"hlsl.boolConv.vert", "main"},
{"hlsl.buffer.frag", "PixelShaderFunction"},
{"hlsl.calculatelod.dx10.frag", "main"},
{"hlsl.calculatelodunclamped.dx10.frag", "main"},
{"hlsl.cast.frag", "PixelShaderFunction"},
+ {"hlsl.charLit.vert", "main"},
+ {"hlsl.clip.frag", "main"},
+ {"hlsl.clipdistance-1.frag", "main"},
+ {"hlsl.clipdistance-1.geom", "main"},
+ {"hlsl.clipdistance-1.vert", "main"},
+ {"hlsl.clipdistance-2.frag", "main"},
+ {"hlsl.clipdistance-2.geom", "main"},
+ {"hlsl.clipdistance-2.vert", "main"},
+ {"hlsl.clipdistance-3.frag", "main"},
+ {"hlsl.clipdistance-3.geom", "main"},
+ {"hlsl.clipdistance-3.vert", "main"},
+ {"hlsl.clipdistance-4.frag", "main"},
+ {"hlsl.clipdistance-4.geom", "main"},
+ {"hlsl.clipdistance-4.vert", "main"},
+ {"hlsl.clipdistance-5.frag", "main"},
+ {"hlsl.clipdistance-5.vert", "main"},
+ {"hlsl.clipdistance-6.frag", "main"},
+ {"hlsl.clipdistance-6.vert", "main"},
+ {"hlsl.clipdistance-7.frag", "main"},
+ {"hlsl.clipdistance-7.vert", "main"},
+ {"hlsl.clipdistance-8.frag", "main"},
+ {"hlsl.clipdistance-8.vert", "main"},
+ {"hlsl.clipdistance-9.frag", "main"},
+ {"hlsl.clipdistance-9.vert", "main"},
{"hlsl.comparison.vec.frag", "main"},
{"hlsl.conditional.frag", "PixelShaderFunction"},
+ {"hlsl.constantbuffer.frag", "main"},
+ {"hlsl.constructArray.vert", "main"},
{"hlsl.constructexpr.frag", "main"},
+ {"hlsl.constructimat.frag", "main"},
{"hlsl.depthGreater.frag", "PixelShaderFunction"},
{"hlsl.depthLess.frag", "PixelShaderFunction"},
{"hlsl.discard.frag", "PixelShaderFunction"},
{"hlsl.doLoop.frag", "PixelShaderFunction"},
{"hlsl.emptystructreturn.frag", "main"},
{"hlsl.emptystructreturn.vert", "main"},
+ {"hlsl.emptystruct.init.vert", "main"},
{"hlsl.entry-in.frag", "PixelShaderFunction"},
{"hlsl.entry-out.frag", "PixelShaderFunction"},
+ {"hlsl.fraggeom.frag", "main"},
{"hlsl.float1.frag", "PixelShaderFunction"},
{"hlsl.float4.frag", "PixelShaderFunction"},
{"hlsl.flatten.return.frag", "main"},
+ {"hlsl.flattenOpaque.frag", "main"},
+ {"hlsl.flattenOpaqueInit.vert", "main"},
+ {"hlsl.flattenOpaqueInitMix.vert", "main"},
+ {"hlsl.flattenSubset.frag", "main"},
+ {"hlsl.flattenSubset2.frag", "main"},
{"hlsl.forLoop.frag", "PixelShaderFunction"},
{"hlsl.gather.array.dx10.frag", "main"},
{"hlsl.gather.basic.dx10.frag", "main"},
@@ -122,14 +171,28 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.getdimensions.rw.dx10.frag", "main"},
{"hlsl.getdimensions.dx10.vert", "main"},
{"hlsl.getsampleposition.dx10.frag", "main"},
+ {"hlsl.global-const-init.frag", "main"},
+ {"hlsl.gs-hs-mix.tesc", "HSMain"},
+ {"hlsl.domain.1.tese", "main"},
+ {"hlsl.domain.2.tese", "main"},
+ {"hlsl.domain.3.tese", "main"},
+ {"hlsl.function.frag", "main"},
{"hlsl.hull.1.tesc", "main"},
{"hlsl.hull.2.tesc", "main"},
+ {"hlsl.hull.3.tesc", "main"},
+ {"hlsl.hull.4.tesc", "main"},
+ {"hlsl.hull.5.tesc", "main"},
{"hlsl.hull.void.tesc", "main"},
+ {"hlsl.hull.ctrlpt-1.tesc", "main"},
+ {"hlsl.hull.ctrlpt-2.tesc", "main"},
{"hlsl.identifier.sample.frag", "main"},
{"hlsl.if.frag", "PixelShaderFunction"},
+ {"hlsl.implicitBool.frag", "main"},
+ {"hlsl.inf.vert", "main"},
{"hlsl.inoutquals.frag", "main"},
{"hlsl.init.frag", "ShaderFunction"},
{"hlsl.init2.frag", "main"},
+ {"hlsl.isfinite.frag", "main"},
{"hlsl.intrinsics.barriers.comp", "ComputeShaderFunction"},
{"hlsl.intrinsics.comp", "ComputeShaderFunction"},
{"hlsl.intrinsics.evalfns.frag", "main"},
@@ -138,6 +201,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.intrinsics.f1632.frag", "main"},
{"hlsl.intrinsics.f3216.frag", "main"},
{"hlsl.intrinsics.frag", "main"},
+ {"hlsl.intrinsic.frexp.frag", "main"},
{"hlsl.intrinsics.lit.frag", "PixelShaderFunction"},
{"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"},
{"hlsl.intrinsics.negative.frag", "PixelShaderFunction"},
@@ -157,11 +221,22 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.load.rwtexture.array.dx10.frag", "main"},
{"hlsl.load.offset.dx10.frag", "main"},
{"hlsl.load.offsetarray.dx10.frag", "main"},
- {"hlsl.logical.unary.frag", "main"},
+ {"hlsl.localStructuredBuffer.comp", "main"},
{"hlsl.logical.binary.frag", "main"},
{"hlsl.logical.binary.vec.frag", "main"},
+ {"hlsl.logicalConvert.frag", "main"},
+ {"hlsl.logical.unary.frag", "main"},
+ {"hlsl.loopattr.frag", "main"},
+ {"hlsl.matpack-pragma.frag", "main"},
+ {"hlsl.mip.operator.frag", "main"},
+ {"hlsl.mip.negative.frag", "main"},
+ {"hlsl.mip.negative2.frag", "main"},
+ {"hlsl.namespace.frag", "main"},
+ {"hlsl.nonint-index.frag", "main"},
{"hlsl.matNx1.frag", "main"},
+ {"hlsl.matpack-1.frag", "main"},
{"hlsl.matrixSwizzle.vert", "ShaderFunction"},
+ {"hlsl.memberFunCall.frag", "main"},
{"hlsl.mintypes.frag", "main"},
{"hlsl.multiEntry.vert", "RealEntrypoint"},
{"hlsl.multiReturn.frag", "main"},
@@ -170,9 +245,12 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.numericsuffixes.frag", "main"},
{"hlsl.numthreads.comp", "main_aux1"},
{"hlsl.overload.frag", "PixelShaderFunction"},
+ {"hlsl.opaque-type-bug.frag", "main"},
{"hlsl.params.default.frag", "main"},
{"hlsl.params.default.negative.frag", "main"},
{"hlsl.partialInit.frag", "PixelShaderFunction"},
+ {"hlsl.partialFlattenLocal.vert", "main"},
+ {"hlsl.pp.vert", "main"},
{"hlsl.pp.line.frag", "main"},
{"hlsl.precise.frag", "main"},
{"hlsl.promote.atomic.frag", "main"},
@@ -195,8 +273,11 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.samplebias.offsetarray.dx10.frag", "main"},
{"hlsl.samplecmp.array.dx10.frag", "main"},
{"hlsl.samplecmp.basic.dx10.frag", "main"},
+ {"hlsl.samplecmp.dualmode.frag", "main"},
{"hlsl.samplecmp.offset.dx10.frag", "main"},
{"hlsl.samplecmp.offsetarray.dx10.frag", "main"},
+ {"hlsl.samplecmp.negative.frag", "main"},
+ {"hlsl.samplecmp.negative2.frag", "main"},
{"hlsl.samplecmplevelzero.array.dx10.frag", "main"},
{"hlsl.samplecmplevelzero.basic.dx10.frag", "main"},
{"hlsl.samplecmplevelzero.offset.dx10.frag", "main"},
@@ -212,9 +293,12 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.samplelevel.offset.dx10.frag", "main"},
{"hlsl.samplelevel.offsetarray.dx10.frag", "main"},
{"hlsl.sample.sub-vec4.dx10.frag", "main"},
+ {"hlsl.scalar-length.frag", "main"},
+ {"hlsl.scalarCast.vert", "main"},
{"hlsl.semicolons.frag", "main"},
{"hlsl.shapeConv.frag", "main"},
{"hlsl.shapeConvRet.frag", "main"},
+ {"hlsl.snorm.uav.comp", "main"},
{"hlsl.staticMemberFunction.frag", "main"},
{"hlsl.stringtoken.frag", "main"},
{"hlsl.string.frag", "main"},
@@ -228,38 +312,56 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.structarray.flatten.frag", "main"},
{"hlsl.structarray.flatten.geom", "main"},
{"hlsl.structbuffer.frag", "main"},
+ {"hlsl.structbuffer.append.frag", "main"},
+ {"hlsl.structbuffer.append.fn.frag", "main"},
{"hlsl.structbuffer.atomics.frag", "main"},
{"hlsl.structbuffer.byte.frag", "main"},
{"hlsl.structbuffer.coherent.frag", "main"},
+ {"hlsl.structbuffer.floatidx.comp", "main"},
+ {"hlsl.structbuffer.incdec.frag", "main"},
{"hlsl.structbuffer.fn.frag", "main"},
+ {"hlsl.structbuffer.fn2.comp", "main"},
{"hlsl.structbuffer.rw.frag", "main"},
{"hlsl.structbuffer.rwbyte.frag", "main"},
{"hlsl.structin.vert", "main"},
{"hlsl.structIoFourWay.frag", "main"},
{"hlsl.structStructName.frag", "main"},
+ {"hlsl.subpass.frag", "main"},
+ {"hlsl.synthesizeInput.frag", "main"},
+ {"hlsl.texturebuffer.frag", "main"},
+ {"hlsl.texture.struct.frag", "main"},
+ {"hlsl.texture.subvec4.frag", "main"},
{"hlsl.this.frag", "main"},
{"hlsl.intrinsics.vert", "VertexShaderFunction"},
+ {"hlsl.intrinsic.frexp.vert", "VertexShaderFunction"},
{"hlsl.matType.frag", "PixelShaderFunction"},
{"hlsl.matType.bool.frag", "main"},
{"hlsl.matType.int.frag", "main"},
{"hlsl.max.frag", "PixelShaderFunction"},
+ {"hlsl.preprocessor.frag", "main"},
{"hlsl.precedence.frag", "PixelShaderFunction"},
{"hlsl.precedence2.frag", "PixelShaderFunction"},
+ {"hlsl.scalar2matrix.frag", "main"},
{"hlsl.semantic.geom", "main"},
{"hlsl.semantic.vert", "main"},
+ {"hlsl.semantic-1.vert", "main"},
{"hlsl.scope.frag", "PixelShaderFunction"},
{"hlsl.sin.frag", "PixelShaderFunction"},
{"hlsl.struct.frag", "PixelShaderFunction"},
{"hlsl.switch.frag", "PixelShaderFunction"},
{"hlsl.swizzle.frag", "PixelShaderFunction"},
+ {"hlsl.target.frag", "main"},
+ {"hlsl.targetStruct1.frag", "main"},
+ {"hlsl.targetStruct2.frag", "main"},
{"hlsl.templatetypes.frag", "PixelShaderFunction"},
{"hlsl.tx.bracket.frag", "main"},
+ {"hlsl.tx.overload.frag", "main"},
{"hlsl.type.half.frag", "main"},
{"hlsl.type.identifier.frag", "main"},
{"hlsl.typeGraphCopy.vert", "main"},
{"hlsl.typedef.frag", "PixelShaderFunction"},
{"hlsl.whileLoop.frag", "PixelShaderFunction"},
- {"hlsl.void.frag", "PixelShaderFunction"},
+ {"hlsl.void.frag", "PixelShaderFunction"}
}),
FileNameAsCustomTestSuffix
);
@@ -270,10 +372,30 @@ INSTANTIATE_TEST_CASE_P(
ToSpirv, HlslCompileAndFlattenTest,
::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
{"hlsl.array.flatten.frag", "main"},
+ {"hlsl.partialFlattenMixed.vert", "main"},
}),
FileNameAsCustomTestSuffix
);
+// clang-format on
+#ifdef ENABLE_OPT
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+ ToSpirv, HlslLegalizeTest,
+ ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+ {"hlsl.aliasOpaque.frag", "main"},
+ {"hlsl.flattenOpaque.frag", "main"},
+ {"hlsl.flattenOpaqueInit.vert", "main"},
+ {"hlsl.flattenOpaqueInitMix.vert", "main"},
+ {"hlsl.flattenSubset.frag", "main"},
+ {"hlsl.flattenSubset2.frag", "main"},
+ {"hlsl.partialFlattenLocal.vert", "main"},
+ {"hlsl.partialFlattenMixed.vert", "main"}
+ }),
+ FileNameAsCustomTestSuffix
+);
// clang-format on
+#endif
+
} // anonymous namespace
} // namespace glslangtest
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp
index 6ce1fe9f79a..6e1969a2eb3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp
@@ -60,6 +60,7 @@ TEST_P(LinkTestVulkan, FromFile)
shaders.emplace_back(
new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i]))));
auto* shader = shaders.back().get();
+ shader->setAutoMapLocations(true);
compile(shader, contents, "", controls);
result.shaderResults.push_back(
{fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog()});
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Remap.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Remap.FromFile.cpp
index 9f25a6f2277..50bce8e357c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/Remap.FromFile.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Remap.FromFile.cpp
@@ -89,6 +89,7 @@ INSTANTIATE_TEST_CASE_P(
{ "remap.basic.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.basic.dcefunc.frag", "main", Source::GLSL, spv::spirvbin_t::DCE_FUNCS },
{ "remap.basic.strip.frag", "main", Source::GLSL, spv::spirvbin_t::STRIP },
+ { "remap.specconst.comp", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.switch.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE },
{ "remap.switch.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.literal64.none.spv", "main", Source::GLSL, spv::spirvbin_t::NONE },
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp
index a8d4b017e79..4a396273dd1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp
@@ -75,6 +75,7 @@ using CompileVulkanToSpirvTestAMD = GlslangTest<::testing::TestWithParam<std::st
#ifdef NV_EXTENSIONS
using CompileVulkanToSpirvTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
#endif
+using CompileUpgradeTextureToSampledTextureAndDropSamplersTest = GlslangTest<::testing::TestWithParam<std::string>>;
// Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully
// generate SPIR-V.
@@ -172,6 +173,15 @@ TEST_P(CompileVulkanToSpirvTestNV, FromFile)
}
#endif
+TEST_P(CompileUpgradeTextureToSampledTextureAndDropSamplersTest, FromFile)
+{
+ loadCompileUpgradeTextureToSampledTextureAndDropSamplersAndCheck(GlobalTestSettings.testRoot,
+ GetParam(),
+ Source::GLSL,
+ Semantics::Vulkan,
+ Target::Spv);
+}
+
// clang-format off
INSTANTIATE_TEST_CASE_P(
Glsl, CompileVulkanToSpirvTest,
@@ -216,6 +226,8 @@ INSTANTIATE_TEST_CASE_P(
"spv.aggOps.frag",
"spv.always-discard.frag",
"spv.always-discard2.frag",
+ "spv.arbPostDepthCoverage.frag",
+ "spv.arbPostDepthCoverage_Error.frag",
"spv.bitCast.frag",
"spv.bool.vert",
"spv.boolInBlock.frag",
@@ -232,6 +244,8 @@ INSTANTIATE_TEST_CASE_P(
"spv.drawParams.vert",
"spv.doWhileLoop.frag",
"spv.earlyReturnDiscard.frag",
+ "spv.extPostDepthCoverage.frag",
+ "spv.extPostDepthCoverage_Error.frag",
"spv.flowControl.frag",
"spv.forLoop.frag",
"spv.forwardFun.frag",
@@ -261,13 +275,19 @@ INSTANTIATE_TEST_CASE_P(
"spv.noWorkgroup.comp",
"spv.offsets.frag",
"spv.Operations.frag",
+ "spv.paramMemory.frag",
"spv.precision.frag",
+ "spv.precisionNonESSamp.frag",
"spv.prepost.frag",
"spv.qualifiers.vert",
+ "spv.sample.frag",
+ "spv.sampleId.frag",
+ "spv.samplePosition.frag",
"spv.sampleMaskOverrideCoverage.frag",
"spv.shaderBallot.comp",
"spv.shaderDrawParams.vert",
"spv.shaderGroupVote.comp",
+ "spv.shaderStencilExport.frag",
"spv.shiftOps.frag",
"spv.simpleFunctionCall.frag",
"spv.simpleMat.vert",
@@ -283,6 +303,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.test.vert",
"spv.texture.frag",
"spv.texture.vert",
+ "spv.textureBuffer.vert",
"spv.image.frag",
"spv.types.frag",
"spv.uint.frag",
@@ -303,6 +324,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.specConstant.comp",
"spv.specConstantComposite.vert",
"spv.specConstantOperations.vert",
+ "spv.storageBuffer.vert",
"spv.precise.tese",
"spv.precise.tesc",
})),
@@ -316,10 +338,12 @@ INSTANTIATE_TEST_CASE_P(
{ "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, 30, true, false },
{ "spv.register.noautoassign.frag", "main_ep", 5, 10, 0, 15, 30, false, false },
{ "spv.register.autoassign-2.frag", "main", 5, 10, 0, 15, 30, true, true },
+ { "spv.register.subpass.frag", "main", 0, 20, 0, 0, 0, true, true },
{ "spv.buffer.autoassign.frag", "main", 5, 10, 0, 15, 30, true, true },
{ "spv.ssbo.autoassign.frag", "main", 5, 10, 0, 15, 30, true, true },
+ { "spv.ssboAlias.frag", "main", 0, 0, 0, 0, 83, true, false },
{ "spv.rw.autoassign.frag", "main", 5, 10, 20, 15, 30, true, true },
- { "spv.register.autoassign.rangetest.frag", "main",
+ { "spv.register.autoassign.rangetest.frag", "main",
glslang::TQualifier::layoutBindingEnd-2,
glslang::TQualifier::layoutBindingEnd+5,
20, 30, true, false },
@@ -341,9 +365,13 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P(
Glsl, CompileOpenGLToSpirvTest,
::testing::ValuesIn(std::vector<std::string>({
+ "spv.460.frag",
+ "spv.460.vert",
+ "spv.460.comp",
"spv.atomic.comp",
"spv.glFragColor.frag",
"spv.specConst.vert",
+ "spv.OVR_multiview.vert",
})),
FileNameAsCustomTestSuffix
);
@@ -383,7 +411,11 @@ INSTANTIATE_TEST_CASE_P(
Glsl, CompileVulkanToSpirvTestAMD,
::testing::ValuesIn(std::vector<std::string>({
"spv.float16.frag",
- "spv.shaderBallotAMD.comp"
+ "spv.imageLoadStoreLod.frag",
+ "spv.int16.frag",
+ "spv.shaderBallotAMD.comp",
+ "spv.shaderFragMaskAMD.frag",
+ "spv.textureGatherBiasLod.frag",
})),
FileNameAsCustomTestSuffix
);
@@ -401,10 +433,19 @@ INSTANTIATE_TEST_CASE_P(
"spv.stereoViewRendering.tesc",
"spv.multiviewPerViewAttributes.vert",
"spv.multiviewPerViewAttributes.tesc",
+ "spv.atomicInt64.comp",
})),
FileNameAsCustomTestSuffix
);
#endif
+
+INSTANTIATE_TEST_CASE_P(
+ Glsl, CompileUpgradeTextureToSampledTextureAndDropSamplersTest,
+ ::testing::ValuesIn(std::vector<std::string>({
+ "spv.texture.sampler.transform.frag",
+ })),
+ FileNameAsCustomTestSuffix
+);
// clang-format on
} // anonymous namespace
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h
index 38ec54c63bc..2dac99bca24 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h
@@ -197,11 +197,15 @@ public:
GlslangResult compileAndLink(
const std::string shaderName, const std::string& code,
const std::string& entryPointName, EShMessages controls,
- bool flattenUniformArrays = false)
+ bool flattenUniformArrays = false,
+ EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep,
+ bool disableOptimizer = true)
{
const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
glslang::TShader shader(kind);
+ shader.setAutoMapLocations(true);
+ shader.setTextureSamplerTransformMode(texSampTransMode);
shader.setFlattenUniformArrays(flattenUniformArrays);
bool success = compile(&shader, code, entryPointName, controls);
@@ -214,8 +218,10 @@ public:
if (success && (controls & EShMsgSpvRules)) {
std::vector<uint32_t> spirv_binary;
+ glslang::SpvOptions options;
+ options.disableOptimizer = disableOptimizer;
glslang::GlslangToSpv(*program.getIntermediate(kind),
- spirv_binary, &logger);
+ spirv_binary, &logger, &options);
std::ostringstream disassembly_stream;
spv::Parameterize();
@@ -254,6 +260,7 @@ public:
shader.setShiftUboBinding(baseUboBinding);
shader.setShiftSsboBinding(baseSsboBinding);
shader.setAutoMapBindings(autoMapBindings);
+ shader.setAutoMapLocations(true);
shader.setFlattenUniformArrays(flattenUniformArrays);
bool success = compile(&shader, code, entryPointName, controls);
@@ -295,6 +302,8 @@ public:
const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
glslang::TShader shader(kind);
+ shader.setAutoMapLocations(true);
+
bool success = compile(&shader, code, entryPointName, controls);
glslang::TProgram program;
@@ -375,18 +384,20 @@ public:
Source source,
Semantics semantics,
Target target,
- const std::string& entryPointName="")
+ const std::string& entryPointName="",
+ const std::string& baseDir="/baseResults/",
+ const bool disableOptimizer = true)
{
const std::string inputFname = testDir + "/" + testName;
const std::string expectedOutputFname =
- testDir + "/baseResults/" + testName + ".out";
+ testDir + baseDir + testName + ".out";
std::string input, expectedOutput;
tryLoadFile(inputFname, "input", &input);
tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
const EShMessages controls = DeriveOptions(source, semantics, target);
- GlslangResult result = compileAndLink(testName, input, entryPointName, controls);
+ GlslangResult result = compileAndLink(testName, input, entryPointName, controls, false, EShTexSampTransKeep, disableOptimizer);
// Generate the hybrid output in the way of glslangValidator.
std::ostringstream stream;
@@ -566,6 +577,31 @@ public:
expectedErrorFname);
}
+ void loadCompileUpgradeTextureToSampledTextureAndDropSamplersAndCheck(const std::string& testDir,
+ const std::string& testName,
+ Source source,
+ Semantics semantics,
+ Target target,
+ const std::string& entryPointName = "")
+ {
+ const std::string inputFname = testDir + "/" + testName;
+ const std::string expectedOutputFname = testDir + "/baseResults/" + testName + ".out";
+ std::string input, expectedOutput;
+
+ tryLoadFile(inputFname, "input", &input);
+ tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
+
+ const EShMessages controls = DeriveOptions(source, semantics, target);
+ GlslangResult result = compileAndLink(testName, input, entryPointName, controls, false, EShTexSampTransUpgradeTextureRemoveSampler);
+
+ // Generate the hybrid output in the way of glslangValidator.
+ std::ostringstream stream;
+ outputResultToStream(&stream, result, controls);
+
+ checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
+ expectedOutputFname);
+ }
+
private:
const int defaultVersion;
const EProfile defaultProfile;
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt
index ec5f1a569ea..98dfad7c963 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt
@@ -7,7 +7,7 @@ set(SOURCES
hlslGrammar.cpp
hlslParseables.cpp)
- set(HEADERS
+set(HEADERS
hlslAttributes.h
hlslParseHelper.h
hlslTokens.h
@@ -19,10 +19,13 @@ set(SOURCES
add_library(HLSL STATIC ${SOURCES} ${HEADERS})
set_property(TARGET HLSL PROPERTY FOLDER hlsl)
+set_property(TARGET HLSL PROPERTY POSITION_INDEPENDENT_CODE ON)
if(WIN32)
source_group("Source" FILES ${SOURCES} ${HEADERS})
endif(WIN32)
-install(TARGETS HLSL
- ARCHIVE DESTINATION lib)
+if(ENABLE_GLSLANG_INSTALL)
+ install(TARGETS HLSL
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif(ENABLE_GLSLANG_INSTALL)
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp
index df370468890..fccf6c18775 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp
@@ -36,15 +36,34 @@
#include "hlslAttributes.h"
#include <cstdlib>
#include <cctype>
+#include <algorithm>
namespace glslang {
// Map the given string to an attribute enum from TAttributeType,
// or EatNone if invalid.
- TAttributeType TAttributeMap::attributeFromName(const TString& name)
+ TAttributeType TAttributeMap::attributeFromName(const TString& nameSpace, const TString& name)
{
// These are case insensitive.
TString lowername(name);
std::transform(lowername.begin(), lowername.end(), lowername.begin(), ::tolower);
+ TString lowernameSpace(nameSpace);
+ std::transform(lowernameSpace.begin(), lowernameSpace.end(), lowernameSpace.begin(), ::tolower);
+
+ // handle names within a namespace
+
+ if (lowernameSpace == "vk") {
+ if (lowername == "input_attachment_index")
+ return EatInputAttachment;
+ else if (lowername == "location")
+ return EatLocation;
+ else if (lowername == "binding")
+ return EatBinding;
+ else if (lowername == "global_cbuffer_binding")
+ return EatGlobalBinding;
+ } else if (lowernameSpace.size() > 0)
+ return EatNone;
+
+ // handle names with no namespace
if (lowername == "allow_uav_condition")
return EatAllow_uav_condition;
@@ -80,18 +99,20 @@ namespace glslang {
return EatPatchConstantFunc;
else if (lowername == "unroll")
return EatUnroll;
+ else if (lowername == "loop")
+ return EatLoop;
else
return EatNone;
}
// Look up entry, inserting if it's not there, and if name is a valid attribute name
// as known by attributeFromName.
- TAttributeType TAttributeMap::setAttribute(const TString* name, TIntermAggregate* value)
+ TAttributeType TAttributeMap::setAttribute(const TString& nameSpace, const TString* name, TIntermAggregate* value)
{
if (name == nullptr)
return EatNone;
- const TAttributeType attr = attributeFromName(*name);
+ const TAttributeType attr = attributeFromName(nameSpace, *name);
if (attr != EatNone)
attributes[attr] = value;
@@ -107,4 +128,57 @@ namespace glslang {
return (entry == attributes.end()) ? nullptr : entry->second;
}
+ // True if entry exists in map (even if value is nullptr)
+ bool TAttributeMap::contains(TAttributeType attr) const
+ {
+ return attributes.find(attr) != attributes.end();
+ }
+
+ // extract integers out of attribute arguments stored in attribute aggregate
+ bool TAttributeMap::getInt(TAttributeType attr, int& value, int argNum) const
+ {
+ const TConstUnion* intConst = getConstUnion(attr, EbtInt, argNum);
+
+ if (intConst == nullptr)
+ return false;
+
+ value = intConst->getIConst();
+ return true;
+ };
+
+ // extract strings out of attribute arguments stored in attribute aggregate.
+ // convert to lower case if converToLower is true (for case-insensitive compare convenience)
+ bool TAttributeMap::getString(TAttributeType attr, TString& value, int argNum, bool convertToLower) const
+ {
+ const TConstUnion* stringConst = getConstUnion(attr, EbtString, argNum);
+
+ if (stringConst == nullptr)
+ return false;
+
+ value = *stringConst->getSConst();
+
+ // Convenience.
+ if (convertToLower)
+ std::transform(value.begin(), value.end(), value.begin(), ::tolower);
+
+ return true;
+ };
+
+ // Helper to get attribute const union. Returns nullptr on failure.
+ const TConstUnion* TAttributeMap::getConstUnion(TAttributeType attr, TBasicType basicType, int argNum) const
+ {
+ const TIntermAggregate* attrAgg = (*this)[attr];
+ if (attrAgg == nullptr)
+ return nullptr;
+
+ if (argNum >= int(attrAgg->getSequence().size()))
+ return nullptr;
+
+ const TConstUnion* constVal = &attrAgg->getSequence()[argNum]->getAsConstantUnion()->getConstArray()[0];
+ if (constVal == nullptr || constVal->getType() != basicType)
+ return nullptr;
+
+ return constVal;
+ }
+
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.h
index ad44d2ab199..1fdb4ba0453 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.h
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.h
@@ -62,6 +62,11 @@ namespace glslang {
EatPatchConstantFunc,
EatPatchSize,
EatUnroll,
+ EatLoop,
+ EatBinding,
+ EatGlobalBinding,
+ EatLocation,
+ EatInputAttachment
};
}
@@ -81,14 +86,26 @@ namespace glslang {
public:
// Search for and potentially add the attribute into the map. Return the
// attribute type enum for it, if found, else EatNone.
- TAttributeType setAttribute(const TString* name, TIntermAggregate* value);
+ TAttributeType setAttribute(const TString& nameSpace, const TString* name, TIntermAggregate* value);
// Const lookup: search for (but do not modify) the attribute in the map.
const TIntermAggregate* operator[](TAttributeType) const;
+ // True if entry exists in map (even if value is nullptr)
+ bool contains(TAttributeType) const;
+
+ // Obtain attribute as integer
+ bool getInt(TAttributeType attr, int& value, int argNum = 0) const;
+
+ // Obtain attribute as string, with optional to-lower transform
+ bool getString(TAttributeType attr, TString& value, int argNum = 0, bool convertToLower = true) const;
+
protected:
+ // Helper to get attribute const union
+ const TConstUnion* getConstUnion(TAttributeType attr, TBasicType, int argNum) const;
+
// Find an attribute enum given its name.
- static TAttributeType attributeFromName(const TString&);
+ static TAttributeType attributeFromName(const TString& nameSpace, const TString& name);
std::unordered_map<TAttributeType, TIntermAggregate*> attributes;
};
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp
index 4f6f8030c97..cf0bf0512c7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp
@@ -107,26 +107,14 @@ bool HlslGrammar::acceptIdentifier(HlslToken& idToken)
// valid identifier, nor is "linear". This code special cases the known instances of this, so
// e.g, "int sample;" or "float float;" is accepted. Other cases can be added here if needed.
- TString* idString = nullptr;
- switch (peek()) {
- case EHTokSample: idString = NewPoolTString("sample"); break;
- case EHTokHalf: idString = NewPoolTString("half"); break;
- case EHTokBool: idString = NewPoolTString("bool"); break;
- case EHTokFloat: idString = NewPoolTString("float"); break;
- case EHTokDouble: idString = NewPoolTString("double"); break;
- case EHTokInt: idString = NewPoolTString("int"); break;
- case EHTokUint: idString = NewPoolTString("uint"); break;
- case EHTokMin16float: idString = NewPoolTString("min16float"); break;
- case EHTokMin10float: idString = NewPoolTString("min10float"); break;
- case EHTokMin16int: idString = NewPoolTString("min16int"); break;
- case EHTokMin12int: idString = NewPoolTString("min12int"); break;
- default:
+ const char* idString = getTypeString(peek());
+ if (idString == nullptr)
return false;
- }
- token.string = idString;
+ token.string = NewPoolTString(idString);
token.tokenClass = EHTokIdentifier;
- idToken = token;
+ idToken = token;
+ typeIdentifiers = true;
advanceToken();
@@ -134,22 +122,17 @@ bool HlslGrammar::acceptIdentifier(HlslToken& idToken)
}
// compilationUnit
-// : list of externalDeclaration
-// | SEMICOLONS
+// : declaration_list EOF
//
bool HlslGrammar::acceptCompilationUnit()
{
TIntermNode* unitNode = nullptr;
- while (! peekTokenClass(EHTokNone)) {
- // HLSL allows semicolons between global declarations, e.g, between functions.
- if (acceptTokenClass(EHTokSemicolon))
- continue;
+ if (! acceptDeclarationList(unitNode))
+ return false;
- // externalDeclaration
- if (! acceptDeclaration(unitNode))
- return false;
- }
+ if (! peekTokenClass(EHTokNone))
+ return false;
// set root of AST
if (unitNode && !unitNode->getAsAggregate())
@@ -159,6 +142,34 @@ bool HlslGrammar::acceptCompilationUnit()
return true;
}
+// Recognize the following, but with the extra condition that it can be
+// successfully terminated by EOF or '}'.
+//
+// declaration_list
+// : list of declaration_or_semicolon followed by EOF or RIGHT_BRACE
+//
+// declaration_or_semicolon
+// : declaration
+// : SEMICOLON
+//
+bool HlslGrammar::acceptDeclarationList(TIntermNode*& nodeList)
+{
+ do {
+ // HLSL allows extra semicolons between global declarations
+ do { } while (acceptTokenClass(EHTokSemicolon));
+
+ // EOF or RIGHT_BRACE
+ if (peekTokenClass(EHTokNone) || peekTokenClass(EHTokRightBrace))
+ return true;
+
+ // declaration
+ if (! acceptDeclaration(nodeList))
+ return false;
+ } while (true);
+
+ return true;
+}
+
// sampler_state
// : LEFT_BRACE [sampler_state_assignment ... ] RIGHT_BRACE
//
@@ -284,8 +295,13 @@ bool HlslGrammar::acceptSamplerDeclarationDX9(TType& /*type*/)
}
// declaration
+// : attributes attributed_declaration
+// | NAMESPACE IDENTIFIER LEFT_BRACE declaration_list RIGHT_BRACE
+//
+// attributed_declaration
// : sampler_declaration_dx9 post_decls SEMICOLON
-// | fully_specified_type declarator_list SEMICOLON
+// | fully_specified_type // for cbuffer/tbuffer
+// | fully_specified_type declarator_list SEMICOLON // for non cbuffer/tbuffer
// | fully_specified_type identifier function_parameters post_decls compound_statement // function definition
// | fully_specified_type identifier sampler_state post_decls compound_statement // sampler definition
// | typedef declaration
@@ -314,6 +330,30 @@ bool HlslGrammar::acceptSamplerDeclarationDX9(TType& /*type*/)
//
bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
{
+ // NAMESPACE IDENTIFIER LEFT_BRACE declaration_list RIGHT_BRACE
+ if (acceptTokenClass(EHTokNamespace)) {
+ HlslToken namespaceToken;
+ if (!acceptIdentifier(namespaceToken)) {
+ expected("namespace name");
+ return false;
+ }
+ parseContext.pushNamespace(*namespaceToken.string);
+ if (!acceptTokenClass(EHTokLeftBrace)) {
+ expected("{");
+ return false;
+ }
+ if (!acceptDeclarationList(nodeList)) {
+ expected("declaration list");
+ return false;
+ }
+ if (!acceptTokenClass(EHTokRightBrace)) {
+ expected("}");
+ return false;
+ }
+ parseContext.popNamespace();
+ return true;
+ }
+
bool declarator_list = false; // true when processing comma separation
// attributes
@@ -334,23 +374,35 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
// if (acceptSamplerDeclarationDX9(declaredType))
// return true;
+ bool forbidDeclarators = (peekTokenClass(EHTokCBuffer) || peekTokenClass(EHTokTBuffer));
// fully_specified_type
if (! acceptFullySpecifiedType(declaredType, nodeList))
return false;
- // identifier
+ parseContext.transferTypeAttributes(declarator.attributes, declaredType);
+
+ // cbuffer and tbuffer end with the closing '}'.
+ // No semicolon is included.
+ if (forbidDeclarators)
+ return true;
+
+ // declarator_list
+ // : declarator
+ // : identifier
HlslToken idToken;
TIntermAggregate* initializers = nullptr;
while (acceptIdentifier(idToken)) {
+ TString *fullName = idToken.string;
+ if (parseContext.symbolTable.atGlobalLevel())
+ parseContext.getFullNamespaceName(fullName);
if (peekTokenClass(EHTokLeftParen)) {
// looks like function parameters
- TString* fnName = idToken.string;
// Potentially rename shader entry point function. No-op most of the time.
- parseContext.renameShaderFunction(fnName);
+ parseContext.renameShaderFunction(fullName);
// function_parameters
- declarator.function = new TFunction(fnName, declaredType);
+ declarator.function = new TFunction(fullName, declaredType);
if (!acceptFunctionParameters(*declarator.function)) {
expected("function parameter list");
return false;
@@ -424,30 +476,31 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
// TODO: strings are not yet handled.
if (variableType.getBasicType() != EbtString && parseContext.getAnnotationNestingLevel() == 0) {
if (typedefDecl)
- parseContext.declareTypedef(idToken.loc, *idToken.string, variableType);
- else if (variableType.getBasicType() == EbtBlock)
- parseContext.declareBlock(idToken.loc, variableType, idToken.string);
- else {
+ parseContext.declareTypedef(idToken.loc, *fullName, variableType);
+ else if (variableType.getBasicType() == EbtBlock) {
+ parseContext.declareBlock(idToken.loc, variableType, fullName,
+ variableType.isArray() ? &variableType.getArraySizes() : nullptr);
+ parseContext.declareStructBufferCounter(idToken.loc, variableType, *fullName);
+ } else {
if (variableType.getQualifier().storage == EvqUniform && ! variableType.containsOpaque()) {
// this isn't really an individual variable, but a member of the $Global buffer
- parseContext.growGlobalUniformBlock(idToken.loc, variableType, *idToken.string);
+ parseContext.growGlobalUniformBlock(idToken.loc, variableType, *fullName);
} else {
// Declare the variable and add any initializer code to the AST.
// The top-level node is always made into an aggregate, as that's
// historically how the AST has been.
initializers = intermediate.growAggregate(initializers,
- parseContext.declareVariable(idToken.loc, *idToken.string, variableType, expressionNode),
+ parseContext.declareVariable(idToken.loc, *fullName, variableType, expressionNode),
idToken.loc);
}
}
}
}
- if (acceptTokenClass(EHTokComma)) {
+ // COMMA
+ if (acceptTokenClass(EHTokComma))
declarator_list = true;
- continue;
- }
- };
+ }
// The top-level initializer node is a sequence.
if (initializers != nullptr)
@@ -465,12 +518,13 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
// was actually an assignment such as "float = 4", where "float" is an identifier.
// We put the token back to let further parsing happen for cases where that may
// happen. This errors on the side of caution, and mostly triggers the error.
-
- if (peek() == EHTokAssign || peek() == EHTokLeftBracket || peek() == EHTokDot || peek() == EHTokComma)
+ if (peek() == EHTokAssign || peek() == EHTokLeftBracket || peek() == EHTokDot || peek() == EHTokComma) {
recedeToken();
- else
+ return false;
+ } else {
expected(";");
- return false;
+ return false;
+ }
}
return true;
@@ -551,7 +605,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList)
// the type was a block, which set some parts of the qualifier
parseContext.mergeQualifiers(type.getQualifier(), qualifier);
// further, it can create an anonymous instance of the block
- if (peekTokenClass(EHTokSemicolon))
+ if (peek() != EHTokIdentifier)
parseContext.declareBlock(loc, type);
} else {
// Some qualifiers are set when parsing the type. Merge those with
@@ -561,16 +615,15 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList)
qualifier.layoutFormat = type.getQualifier().layoutFormat;
qualifier.precision = type.getQualifier().precision;
- // Propagate sampler readonly qualifier for buffers
- if (type.getBasicType() == EbtSampler)
- qualifier.readonly = type.getQualifier().readonly;
-
- if (type.getQualifier().storage == EvqVaryingOut ||
+ if (type.getQualifier().storage == EvqOut ||
type.getQualifier().storage == EvqBuffer) {
qualifier.storage = type.getQualifier().storage;
qualifier.readonly = type.getQualifier().readonly;
}
+ if (type.isBuiltIn())
+ qualifier.builtIn = type.getQualifier().builtIn;
+
type.getQualifier() = qualifier;
}
@@ -632,10 +685,10 @@ bool HlslGrammar::acceptQualifier(TQualifier& qualifier)
qualifier.noContraction = true;
break;
case EHTokIn:
- qualifier.storage = EvqIn;
+ qualifier.storage = (qualifier.storage == EvqOut) ? EvqInOut : EvqIn;
break;
case EHTokOut:
- qualifier.storage = EvqOut;
+ qualifier.storage = (qualifier.storage == EvqIn) ? EvqInOut : EvqOut;
break;
case EHTokInOut:
qualifier.storage = EvqInOut;
@@ -914,14 +967,14 @@ bool HlslGrammar::acceptOutputPrimitiveGeometry(TLayoutGeometry& geometry)
// : INPUTPATCH
// | OUTPUTPATCH
//
-bool HlslGrammar::acceptTessellationDeclType()
+bool HlslGrammar::acceptTessellationDeclType(TBuiltInVariable& patchType)
{
// read geometry type
const EHlslTokenClass tessType = peek();
switch (tessType) {
- case EHTokInputPatch: break;
- case EHTokOutputPatch: break;
+ case EHTokInputPatch: patchType = EbvInputPatch; break;
+ case EHTokOutputPatch: patchType = EbvOutputPatch; break;
default:
return false; // not a tessellation decl
}
@@ -935,7 +988,9 @@ bool HlslGrammar::acceptTessellationDeclType()
//
bool HlslGrammar::acceptTessellationPatchTemplateType(TType& type)
{
- if (! acceptTessellationDeclType())
+ TBuiltInVariable patchType;
+
+ if (! acceptTessellationDeclType(patchType))
return false;
if (! acceptTokenClass(EHTokLeftAngle))
@@ -962,6 +1017,7 @@ bool HlslGrammar::acceptTessellationPatchTemplateType(TType& type)
TArraySizes* arraySizes = new TArraySizes;
arraySizes->addInnerSize(size->getAsConstantUnion()->getConstArray()[0].getIConst());
type.newArraySizes(*arraySizes);
+ type.getQualifier().builtIn = patchType;
if (! acceptTokenClass(EHTokRightAngle)) {
expected("right angle bracket");
@@ -989,7 +1045,8 @@ bool HlslGrammar::acceptStreamOutTemplateType(TType& type, TLayoutGeometry& geom
return false;
}
- type.getQualifier().storage = EvqVaryingOut;
+ type.getQualifier().storage = EvqOut;
+ type.getQualifier().builtIn = EbvGsOutputStream;
if (! acceptTokenClass(EHTokRightAngle)) {
expected("right angle bracket");
@@ -1031,6 +1088,69 @@ bool HlslGrammar::acceptAnnotations(TQualifier&)
return true;
}
+// subpass input type
+// : SUBPASSINPUT
+// | SUBPASSINPUT VECTOR LEFT_ANGLE template_type RIGHT_ANGLE
+// | SUBPASSINPUTMS
+// | SUBPASSINPUTMS VECTOR LEFT_ANGLE template_type RIGHT_ANGLE
+bool HlslGrammar::acceptSubpassInputType(TType& type)
+{
+ // read subpass type
+ const EHlslTokenClass subpassInputType = peek();
+
+ bool multisample;
+
+ switch (subpassInputType) {
+ case EHTokSubpassInput: multisample = false; break;
+ case EHTokSubpassInputMS: multisample = true; break;
+ default:
+ return false; // not a subpass input declaration
+ }
+
+ advanceToken(); // consume the sampler type keyword
+
+ TType subpassType(EbtFloat, EvqUniform, 4); // default type is float4
+
+ if (acceptTokenClass(EHTokLeftAngle)) {
+ if (! acceptType(subpassType)) {
+ expected("scalar or vector type");
+ return false;
+ }
+
+ const TBasicType basicRetType = subpassType.getBasicType() ;
+
+ switch (basicRetType) {
+ case EbtFloat:
+ case EbtUint:
+ case EbtInt:
+ case EbtStruct:
+ break;
+ default:
+ unimplemented("basic type in subpass input");
+ return false;
+ }
+
+ if (! acceptTokenClass(EHTokRightAngle)) {
+ expected("right angle bracket");
+ return false;
+ }
+ }
+
+ const TBasicType subpassBasicType = subpassType.isStruct() ? (*subpassType.getStruct())[0].type->getBasicType()
+ : subpassType.getBasicType();
+
+ TSampler sampler;
+ sampler.setSubpass(subpassBasicType, multisample);
+
+ // Remember the declared return type. Function returns false on error.
+ if (!parseContext.setTextureReturnType(sampler, subpassType, token.loc))
+ return false;
+
+ type.shallowCopy(TType(sampler, EvqUniform));
+
+ return true;
+}
+
// sampler_type
// : SAMPLER
// | SAMPLER1D
@@ -1099,25 +1219,25 @@ bool HlslGrammar::acceptTextureType(TType& type)
bool array = false;
bool ms = false;
bool image = false;
- bool readonly = false;
+ bool combined = true;
switch (textureType) {
- case EHTokTexture1d: dim = Esd1D; break;
- case EHTokTexture1darray: dim = Esd1D; array = true; break;
- case EHTokTexture2d: dim = Esd2D; break;
- case EHTokTexture2darray: dim = Esd2D; array = true; break;
- case EHTokTexture3d: dim = Esd3D; break;
- case EHTokTextureCube: dim = EsdCube; break;
- case EHTokTextureCubearray: dim = EsdCube; array = true; break;
- case EHTokTexture2DMS: dim = Esd2D; ms = true; break;
- case EHTokTexture2DMSarray: dim = Esd2D; array = true; ms = true; break;
- case EHTokBuffer: dim = EsdBuffer; readonly=true; image=true; break;
- case EHTokRWBuffer: dim = EsdBuffer; image=true; break;
- case EHTokRWTexture1d: dim = Esd1D; array=false; image=true; break;
- case EHTokRWTexture1darray: dim = Esd1D; array=true; image=true; break;
- case EHTokRWTexture2d: dim = Esd2D; array=false; image=true; break;
- case EHTokRWTexture2darray: dim = Esd2D; array=true; image=true; break;
- case EHTokRWTexture3d: dim = Esd3D; array=false; image=true; break;
+ case EHTokBuffer: dim = EsdBuffer; combined = false; break;
+ case EHTokTexture1d: dim = Esd1D; break;
+ case EHTokTexture1darray: dim = Esd1D; array = true; break;
+ case EHTokTexture2d: dim = Esd2D; break;
+ case EHTokTexture2darray: dim = Esd2D; array = true; break;
+ case EHTokTexture3d: dim = Esd3D; break;
+ case EHTokTextureCube: dim = EsdCube; break;
+ case EHTokTextureCubearray: dim = EsdCube; array = true; break;
+ case EHTokTexture2DMS: dim = Esd2D; ms = true; break;
+ case EHTokTexture2DMSarray: dim = Esd2D; array = true; ms = true; break;
+ case EHTokRWBuffer: dim = EsdBuffer; image=true; break;
+ case EHTokRWTexture1d: dim = Esd1D; array=false; image=true; break;
+ case EHTokRWTexture1darray: dim = Esd1D; array=true; image=true; break;
+ case EHTokRWTexture2d: dim = Esd2D; array=false; image=true; break;
+ case EHTokRWTexture2darray: dim = Esd2D; array=true; image=true; break;
+ case EHTokRWTexture3d: dim = Esd3D; array=false; image=true; break;
default:
return false; // not a texture declaration
}
@@ -1137,7 +1257,13 @@ bool HlslGrammar::acceptTextureType(TType& type)
const TBasicType basicRetType = txType.getBasicType() ;
- if (basicRetType != EbtFloat && basicRetType != EbtUint && basicRetType != EbtInt) {
+ switch (basicRetType) {
+ case EbtFloat:
+ case EbtUint:
+ case EbtInt:
+ case EbtStruct:
+ break;
+ default:
unimplemented("basic type in texture");
return false;
}
@@ -1154,8 +1280,8 @@ bool HlslGrammar::acceptTextureType(TType& type)
return false;
}
- if (!txType.isScalar() && !txType.isVector()) {
- expected("scalar or vector type");
+ if (!txType.isScalar() && !txType.isVector() && !txType.isStruct()) {
+ expected("scalar, vector, or struct type");
return false;
}
@@ -1177,7 +1303,7 @@ bool HlslGrammar::acceptTextureType(TType& type)
} else if (ms) {
expected("texture type for multisample");
return false;
- } else if (image && !readonly) {
+ } else if (image) {
expected("type for RWTexture/RWBuffer");
return false;
}
@@ -1192,25 +1318,31 @@ bool HlslGrammar::acceptTextureType(TType& type)
if (image || dim == EsdBuffer)
format = parseContext.getLayoutFromTxType(token.loc, txType);
+ const TBasicType txBasicType = txType.isStruct() ? (*txType.getStruct())[0].type->getBasicType()
+ : txType.getBasicType();
+
// Non-image Buffers are combined
if (dim == EsdBuffer && !image) {
sampler.set(txType.getBasicType(), dim, array);
} else {
// DX10 textures are separated. TODO: DX9.
if (image) {
- sampler.setImage(txType.getBasicType(), dim, array, shadow, ms);
+ sampler.setImage(txBasicType, dim, array, shadow, ms);
} else {
- sampler.setTexture(txType.getBasicType(), dim, array, shadow, ms);
+ sampler.setTexture(txBasicType, dim, array, shadow, ms);
}
}
- // Remember the declared vector size.
- sampler.vectorSize = txType.getVectorSize();
+ // Remember the declared return type. Function returns false on error.
+ if (!parseContext.setTextureReturnType(sampler, txType, token.loc))
+ return false;
- type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
+ // Force uncombined, if necessary
+ if (!combined)
+ sampler.combined = false;
+ type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
type.getQualifier().layoutFormat = format;
- type.getQualifier().readonly = readonly;
return true;
}
@@ -1234,6 +1366,35 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
static const TBasicType min12int_bt = EbtInt;
static const TBasicType min16uint_bt = EbtUint;
+ // Some types might have turned into identifiers. Take the hit for checking
+ // when this has happened.
+ if (typeIdentifiers) {
+ const char* identifierString = getTypeString(peek());
+ if (identifierString != nullptr) {
+ TString name = identifierString;
+ // if it's an identifier, it's not a type
+ if (parseContext.symbolTable.find(name) != nullptr)
+ return false;
+ }
+ }
+
+ bool isUnorm = false;
+ bool isSnorm = false;
+
+ // Accept snorm and unorm. Presently, this is ignored, save for an error check below.
+ switch (peek()) {
+ case EHTokUnorm:
+ isUnorm = true;
+ advanceToken(); // eat the token
+ break;
+ case EHTokSNorm:
+ isSnorm = true;
+ advanceToken(); // eat the token
+ break;
+ default:
+ break;
+ }
+
switch (peek()) {
case EHTokVector:
return acceptVectorTemplateType(type);
@@ -1276,6 +1437,11 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
return acceptSamplerType(type);
break;
+ case EHTokSubpassInput: // fall through
+ case EHTokSubpassInputMS: // ...
+ return acceptSubpassInputType(type);
+ break;
+
case EHTokBuffer: // fall through
case EHTokTexture1d: // ...
case EHTokTexture1darray: // ...
@@ -1304,6 +1470,13 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
return acceptStructBufferType(type);
break;
+ case EHTokTextureBuffer:
+ return acceptTextureBufferType(type);
+ break;
+
+ case EHTokConstantBuffer:
+ return acceptConstantBufferType(type);
+
case EHTokClass:
case EHTokStruct:
case EHTokCBuffer:
@@ -1415,20 +1588,20 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
break;
case EHTokHalf:
- new(&type) TType(half_bt, EvqTemporary, EpqMedium);
+ new(&type) TType(half_bt, EvqTemporary);
break;
case EHTokHalf1:
- new(&type) TType(half_bt, EvqTemporary, EpqMedium);
+ new(&type) TType(half_bt, EvqTemporary);
type.makeVector();
break;
case EHTokHalf2:
- new(&type) TType(half_bt, EvqTemporary, EpqMedium, 2);
+ new(&type) TType(half_bt, EvqTemporary, 2);
break;
case EHTokHalf3:
- new(&type) TType(half_bt, EvqTemporary, EpqMedium, 3);
+ new(&type) TType(half_bt, EvqTemporary, 3);
break;
case EHTokHalf4:
- new(&type) TType(half_bt, EvqTemporary, EpqMedium, 4);
+ new(&type) TType(half_bt, EvqTemporary, 4);
break;
case EHTokMin16float:
@@ -1712,6 +1885,55 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 4);
break;
+ case EHTokHalf1x1:
+ new(&type) TType(half_bt, EvqTemporary, 0, 1, 1);
+ break;
+ case EHTokHalf1x2:
+ new(&type) TType(half_bt, EvqTemporary, 0, 1, 2);
+ break;
+ case EHTokHalf1x3:
+ new(&type) TType(half_bt, EvqTemporary, 0, 1, 3);
+ break;
+ case EHTokHalf1x4:
+ new(&type) TType(half_bt, EvqTemporary, 0, 1, 4);
+ break;
+ case EHTokHalf2x1:
+ new(&type) TType(half_bt, EvqTemporary, 0, 2, 1);
+ break;
+ case EHTokHalf2x2:
+ new(&type) TType(half_bt, EvqTemporary, 0, 2, 2);
+ break;
+ case EHTokHalf2x3:
+ new(&type) TType(half_bt, EvqTemporary, 0, 2, 3);
+ break;
+ case EHTokHalf2x4:
+ new(&type) TType(half_bt, EvqTemporary, 0, 2, 4);
+ break;
+ case EHTokHalf3x1:
+ new(&type) TType(half_bt, EvqTemporary, 0, 3, 1);
+ break;
+ case EHTokHalf3x2:
+ new(&type) TType(half_bt, EvqTemporary, 0, 3, 2);
+ break;
+ case EHTokHalf3x3:
+ new(&type) TType(half_bt, EvqTemporary, 0, 3, 3);
+ break;
+ case EHTokHalf3x4:
+ new(&type) TType(half_bt, EvqTemporary, 0, 3, 4);
+ break;
+ case EHTokHalf4x1:
+ new(&type) TType(half_bt, EvqTemporary, 0, 4, 1);
+ break;
+ case EHTokHalf4x2:
+ new(&type) TType(half_bt, EvqTemporary, 0, 4, 2);
+ break;
+ case EHTokHalf4x3:
+ new(&type) TType(half_bt, EvqTemporary, 0, 4, 3);
+ break;
+ case EHTokHalf4x4:
+ new(&type) TType(half_bt, EvqTemporary, 0, 4, 4);
+ break;
+
case EHTokDouble1x1:
new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 1);
break;
@@ -1767,6 +1989,11 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
advanceToken();
+ if ((isUnorm || isSnorm) && !type.isFloatingDomain()) {
+ parseContext.error(token.loc, "unorm and snorm only valid in floating point domain", "", "");
+ return false;
+ }
+
return true;
}
@@ -1786,17 +2013,21 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
// This storage qualifier will tell us whether it's an AST
// block type or just a generic structure type.
TStorageQualifier storageQualifier = EvqTemporary;
+ bool readonly = false;
- // CBUFFER
- if (acceptTokenClass(EHTokCBuffer))
+ if (acceptTokenClass(EHTokCBuffer)) {
+ // CBUFFER
storageQualifier = EvqUniform;
- // TBUFFER
- else if (acceptTokenClass(EHTokTBuffer))
+ } else if (acceptTokenClass(EHTokTBuffer)) {
+ // TBUFFER
storageQualifier = EvqBuffer;
- // CLASS
- // STRUCT
- else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct))
+ readonly = true;
+ } else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct)) {
+ // Neither CLASS nor STRUCT
return false;
+ }
+
+ // Now known to be one of CBUFFER, TBUFFER, CLASS, or STRUCT
// IDENTIFIER
TString structName = "";
@@ -1829,7 +2060,7 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
TVector<TFunctionDeclarator> functionDeclarators;
parseContext.pushNamespace(structName);
- bool acceptedList = acceptStructDeclarationList(typeList, nodeList, structName, functionDeclarators);
+ bool acceptedList = acceptStructDeclarationList(typeList, nodeList, functionDeclarators);
parseContext.popNamespace();
if (! acceptedList) {
@@ -1848,6 +2079,7 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
new(&type) TType(typeList, structName);
else {
postDeclQualifier.storage = storageQualifier;
+ postDeclQualifier.readonly = readonly;
new(&type) TType(typeList, structName, postDeclQualifier); // sets EbtBlock
}
@@ -1865,7 +2097,7 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
// All member functions get parsed inside the class/struct namespace and with the
// class/struct members in a symbol-table level.
parseContext.pushNamespace(structName);
- parseContext.pushThisScope(type);
+ parseContext.pushThisScope(type, functionDeclarators);
bool deferredSuccess = true;
for (int b = 0; b < (int)functionDeclarators.size() && deferredSuccess; ++b) {
// parse body
@@ -1880,6 +2112,84 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
return deferredSuccess;
}
+// constantbuffer
+// : CONSTANTBUFFER LEFT_ANGLE type RIGHT_ANGLE
+bool HlslGrammar::acceptConstantBufferType(TType& type)
+{
+ if (! acceptTokenClass(EHTokConstantBuffer))
+ return false;
+
+ if (! acceptTokenClass(EHTokLeftAngle)) {
+ expected("left angle bracket");
+ return false;
+ }
+
+ TType templateType;
+ if (! acceptType(templateType)) {
+ expected("type");
+ return false;
+ }
+
+ if (! acceptTokenClass(EHTokRightAngle)) {
+ expected("right angle bracket");
+ return false;
+ }
+
+ TQualifier postDeclQualifier;
+ postDeclQualifier.clear();
+ postDeclQualifier.storage = EvqUniform;
+
+ if (templateType.isStruct()) {
+ // Make a block from the type parsed as the template argument
+ TTypeList* typeList = templateType.getWritableStruct();
+ new(&type) TType(typeList, "", postDeclQualifier); // sets EbtBlock
+
+ type.getQualifier().storage = EvqUniform;
+
+ return true;
+ } else {
+ parseContext.error(token.loc, "non-structure type in ConstantBuffer", "", "");
+ return false;
+ }
+}
+
+// texture_buffer
+// : TEXTUREBUFFER LEFT_ANGLE type RIGHT_ANGLE
+bool HlslGrammar::acceptTextureBufferType(TType& type)
+{
+ if (! acceptTokenClass(EHTokTextureBuffer))
+ return false;
+
+ if (! acceptTokenClass(EHTokLeftAngle)) {
+ expected("left angle bracket");
+ return false;
+ }
+
+ TType templateType;
+ if (! acceptType(templateType)) {
+ expected("type");
+ return false;
+ }
+
+ if (! acceptTokenClass(EHTokRightAngle)) {
+ expected("right angle bracket");
+ return false;
+ }
+
+ templateType.getQualifier().storage = EvqBuffer;
+ templateType.getQualifier().readonly = true;
+
+ TType blockType(templateType.getWritableStruct(), "", templateType.getQualifier());
+
+ blockType.getQualifier().storage = EvqBuffer;
+ blockType.getQualifier().readonly = true;
+
+ type.shallowCopy(blockType);
+
+ return true;
+}
+
+
// struct_buffer
// : APPENDSTRUCTUREDBUFFER
// | BYTEADDRESSBUFFER
@@ -1896,24 +2206,29 @@ bool HlslGrammar::acceptStructBufferType(TType& type)
bool readonly = false;
TStorageQualifier storage = EvqBuffer;
+ TBuiltInVariable builtinType = EbvNone;
switch (structBuffType) {
case EHTokAppendStructuredBuffer:
- unimplemented("AppendStructuredBuffer");
- return false;
+ builtinType = EbvAppendConsume;
+ break;
case EHTokByteAddressBuffer:
hasTemplateType = false;
readonly = true;
+ builtinType = EbvByteAddressBuffer;
break;
case EHTokConsumeStructuredBuffer:
- unimplemented("ConsumeStructuredBuffer");
- return false;
+ builtinType = EbvAppendConsume;
+ break;
case EHTokRWByteAddressBuffer:
hasTemplateType = false;
+ builtinType = EbvRWByteAddressBuffer;
break;
case EHTokRWStructuredBuffer:
+ builtinType = EbvRWStructuredBuffer;
break;
case EHTokStructuredBuffer:
+ builtinType = EbvStructuredBuffer;
readonly = true;
break;
default:
@@ -1955,8 +2270,6 @@ bool HlslGrammar::acceptStructBufferType(TType& type)
// field name is canonical for all structbuffers
templateType->setFieldName("@data");
- // Create block type. TODO: hidden internal uint member when needed
-
TTypeList* blockStruct = new TTypeList;
TTypeLoc member = { templateType, token.loc };
blockStruct->push_back(member);
@@ -1966,6 +2279,7 @@ bool HlslGrammar::acceptStructBufferType(TType& type)
blockType.getQualifier().storage = storage;
blockType.getQualifier().readonly = readonly;
+ blockType.getQualifier().builtIn = builtinType;
// We may have created an equivalent type before, in which case we should use its
// deep structure.
@@ -1988,7 +2302,7 @@ bool HlslGrammar::acceptStructBufferType(TType& type)
// | IDENTIFIER array_specifier post_decls
// | IDENTIFIER function_parameters post_decls // member-function prototype
//
-bool HlslGrammar::acceptStructDeclarationList(TTypeList*& typeList, TIntermNode*& nodeList, const TString& typeName,
+bool HlslGrammar::acceptStructDeclarationList(TTypeList*& typeList, TIntermNode*& nodeList,
TVector<TFunctionDeclarator>& declarators)
{
typeList = new TTypeList();
@@ -2085,12 +2399,13 @@ bool HlslGrammar::acceptStructDeclarationList(TTypeList*& typeList, TIntermNode*
//
// Expects type to have EvqGlobal for a static member and
// EvqTemporary for non-static member.
-bool HlslGrammar::acceptMemberFunctionDefinition(TIntermNode*& nodeList, const TType& type, const TString& memberName,
+bool HlslGrammar::acceptMemberFunctionDefinition(TIntermNode*& nodeList, const TType& type, TString& memberName,
TFunctionDeclarator& declarator)
{
bool accepted = false;
- TString* functionName = parseContext.getFullNamespaceName(memberName);
+ TString* functionName = &memberName;
+ parseContext.getFullNamespaceName(functionName);
declarator.function = new TFunction(functionName, type);
if (type.getQualifier().storage == EvqTemporary)
declarator.function->setImplicitThis();
@@ -2163,7 +2478,7 @@ bool HlslGrammar::acceptDefaultParameterDeclaration(const TType& type, TIntermTy
// For initializer lists, we have to const-fold into a constructor for the type, so build
// that.
- TFunction* constructor = parseContext.handleConstructorCall(token.loc, type);
+ TFunction* constructor = parseContext.makeConstructorCall(token.loc, type);
if (constructor == nullptr) // cannot construct
return false;
@@ -2174,6 +2489,9 @@ bool HlslGrammar::acceptDefaultParameterDeclaration(const TType& type, TIntermTy
node = parseContext.handleFunctionCall(token.loc, constructor, node);
}
+ if (node == nullptr)
+ return false;
+
// If this is simply a constant, we can use it directly.
if (node->getAsConstantUnion())
return true;
@@ -2192,16 +2510,25 @@ bool HlslGrammar::acceptDefaultParameterDeclaration(const TType& type, TIntermTy
}
// parameter_declaration
+// : attributes attributed_declaration
+//
+// attributed_declaration
// : fully_specified_type post_decls [ = default_parameter_declaration ]
// | fully_specified_type identifier array_specifier post_decls [ = default_parameter_declaration ]
//
bool HlslGrammar::acceptParameterDeclaration(TFunction& function)
{
+ // attributes
+ TAttributeMap attributes;
+ acceptAttributes(attributes);
+
// fully_specified_type
TType* type = new TType;
if (! acceptFullySpecifiedType(*type))
return false;
+ parseContext.transferTypeAttributes(attributes, *type);
+
// identifier
HlslToken idToken;
acceptIdentifier(idToken);
@@ -2384,8 +2711,19 @@ bool HlslGrammar::acceptInitializer(TIntermTyped*& node)
expected("assignment expression in initializer list");
return false;
}
+
+ const bool firstNode = (node == nullptr);
+
node = intermediate.growAggregate(node, expr, loc);
+ // If every sub-node in the list has qualifier EvqConst, the returned node becomes
+ // EvqConst. Otherwise, it becomes EvqTemporary. That doesn't happen with e.g.
+ // EvqIn or EvqPosition, since the collection isn't EvqPosition if all the members are.
+ if (firstNode && expr->getQualifier().storage == EvqConst)
+ node->getQualifier().storage = EvqConst;
+ else if (expr->getQualifier().storage != EvqConst)
+ node->getQualifier().storage = EvqTemporary;
+
// COMMA
if (acceptTokenClass(EHTokComma)) {
if (acceptTokenClass(EHTokRightBrace)) // allow trailing comma
@@ -2476,6 +2814,12 @@ bool HlslGrammar::acceptConditionalExpression(TIntermTyped*& node)
if (! acceptTokenClass(EHTokQuestion))
return true;
+ node = parseContext.convertConditionalExpression(token.loc, node, false);
+ if (node == nullptr)
+ return false;
+
+ ++parseContext.controlFlowNestingLevel; // this only needs to work right if no errors
+
TIntermTyped* trueNode = nullptr;
if (! acceptExpression(trueNode)) {
expected("expression after ?");
@@ -2494,6 +2838,8 @@ bool HlslGrammar::acceptConditionalExpression(TIntermTyped*& node)
return false;
}
+ --parseContext.controlFlowNestingLevel;
+
node = intermediate.addSelection(node, trueNode, falseNode, loc);
return true;
@@ -2561,14 +2907,19 @@ bool HlslGrammar::acceptUnaryExpression(TIntermTyped*& node)
if (acceptTokenClass(EHTokLeftParen)) {
TType castType;
if (acceptType(castType)) {
+ // recognize any array_specifier as part of the type
+ TArraySizes* arraySizes = nullptr;
+ acceptArraySpecifier(arraySizes);
+ if (arraySizes != nullptr)
+ castType.newArraySizes(*arraySizes);
+ TSourceLoc loc = token.loc;
if (acceptTokenClass(EHTokRightParen)) {
// We've matched "(type)" now, get the expression to cast
- TSourceLoc loc = token.loc;
if (! acceptUnaryExpression(node))
return false;
// Hook it up like a constructor
- TFunction* constructorFunction = parseContext.handleConstructorCall(loc, castType);
+ TFunction* constructorFunction = parseContext.makeConstructorCall(loc, castType);
if (constructorFunction == nullptr) {
expected("type that can be constructed");
return false;
@@ -2577,12 +2928,17 @@ bool HlslGrammar::acceptUnaryExpression(TIntermTyped*& node)
parseContext.handleFunctionArgument(constructorFunction, arguments, node);
node = parseContext.handleFunctionCall(loc, constructorFunction, arguments);
- return true;
+ return node != nullptr;
} else {
// This could be a parenthesized constructor, ala (int(3)), and we just accepted
// the '(int' part. We must back up twice.
recedeToken();
recedeToken();
+
+ // Note, there are no array constructors like
+ // (float[2](...))
+ if (arraySizes != nullptr)
+ parseContext.error(loc, "parenthesized array constructor not allowed", "([]())", "", "");
}
} else {
// This isn't a type cast, but it still started "(", so if it is a
@@ -2623,12 +2979,12 @@ bool HlslGrammar::acceptUnaryExpression(TIntermTyped*& node)
// : LEFT_PAREN expression RIGHT_PAREN
// | literal
// | constructor
-// | identifier
+// | IDENTIFIER [ COLONCOLON IDENTIFIER [ COLONCOLON IDENTIFIER ... ] ]
// | function_call
// | postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET
// | postfix_expression DOT IDENTIFIER
// | postfix_expression DOT IDENTIFIER arguments
-// | postfix_expression COLONCOLON IDENTIFIER arguments
+// | postfix_expression arguments
// | postfix_expression INC_OP
// | postfix_expression DEC_OP
//
@@ -2640,9 +2996,6 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node)
// idToken will pick up either a variable or a function name in a function call
HlslToken idToken;
- // scopeBase will pick up the type symbol on the left of '::'
- TSymbol* scope = nullptr;
-
// Find something before the postfix operations, as they can't operate
// on nothing. So, no "return true", they fall through, only "return false".
if (acceptTokenClass(EHTokLeftParen)) {
@@ -2656,21 +3009,26 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node)
return false;
}
} else if (acceptLiteral(node)) {
- // literal (nothing else to do yet), go on to the
+ // literal (nothing else to do yet)
} else if (acceptConstructor(node)) {
// constructor (nothing else to do yet)
} else if (acceptIdentifier(idToken)) {
- // user-type, identifier, or function name
- if (peekTokenClass(EHTokColonColon)) {
- TType type;
- scope = parseContext.lookupUserType(*idToken.string, type);
- if (scope == nullptr) {
- expected("type left of ::");
+ // user-type, namespace name, variable, or function name
+ TString* fullName = idToken.string;
+ while (acceptTokenClass(EHTokColonColon)) {
+ // user-type or namespace name
+ fullName = NewPoolTString(fullName->c_str());
+ fullName->append(parseContext.scopeMangler);
+ if (acceptIdentifier(idToken))
+ fullName->append(*idToken.string);
+ else {
+ expected("identifier after ::");
return false;
}
- } else if (! peekTokenClass(EHTokLeftParen)) {
- node = parseContext.handleVariable(idToken.loc, idToken.string);
- } else if (acceptFunctionCall(idToken, node)) {
+ }
+ if (! peekTokenClass(EHTokLeftParen)) {
+ node = parseContext.handleVariable(idToken.loc, fullName);
+ } else if (acceptFunctionCall(idToken.loc, *fullName, node, nullptr)) {
// function_call (nothing else to do yet)
} else {
expected("function call arguments");
@@ -2681,23 +3039,6 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node)
return false;
}
- // This is to guarantee we do this no matter how we get out of the stack frame.
- // This way there's no bug if an early return forgets to do it.
- struct tFinalize {
- tFinalize(HlslParseContext& p) : parseContext(p) { }
- ~tFinalize() { parseContext.finalizeFlattening(); }
- HlslParseContext& parseContext;
- private:
- const tFinalize& operator=(const tFinalize&) { return *this; }
- tFinalize(const tFinalize& f) : parseContext(f.parseContext) { }
- } finalize(parseContext);
-
- // Initialize the flattening accumulation data, so we can track data across multiple bracket or
- // dot operators. This can also be nested, e.g, for [], so we have to track each nesting
- // level: hence the init and finalize. Even though in practice these must be
- // constants, they are parsed no matter what.
- parseContext.initFlattening();
-
// Something was found, chain as many postfix operations as exist.
do {
TSourceLoc loc = token.loc;
@@ -2734,7 +3075,7 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node)
TIntermTyped* thisNode = node;
// arguments
- if (! acceptFunctionCall(field, node, thisNode, scope)) {
+ if (! acceptFunctionCall(field.loc, *field.string, node, thisNode)) {
expected("function parameters");
return false;
}
@@ -2754,6 +3095,8 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node)
}
advanceToken();
node = parseContext.handleBracketDereference(indexNode->getLoc(), node, indexNode);
+ if (node == nullptr)
+ return false;
break;
}
case EOpPostIncrement:
@@ -2779,7 +3122,7 @@ bool HlslGrammar::acceptConstructor(TIntermTyped*& node)
// type
TType type;
if (acceptType(type)) {
- TFunction* constructorFunction = parseContext.handleConstructorCall(token.loc, type);
+ TFunction* constructorFunction = parseContext.makeConstructorCall(token.loc, type);
if (constructorFunction == nullptr)
return false;
@@ -2795,7 +3138,7 @@ bool HlslGrammar::acceptConstructor(TIntermTyped*& node)
// hook it up
node = parseContext.handleFunctionCall(arguments->getLoc(), constructorFunction, arguments);
- return true;
+ return node != nullptr;
}
return false;
@@ -2806,26 +3149,26 @@ bool HlslGrammar::acceptConstructor(TIntermTyped*& node)
// function_call
// : [idToken] arguments
//
-bool HlslGrammar::acceptFunctionCall(HlslToken callToken, TIntermTyped*& node, TIntermTyped* baseObject,
- const TSymbol* scope)
+bool HlslGrammar::acceptFunctionCall(const TSourceLoc& loc, TString& name, TIntermTyped*& node, TIntermTyped* baseObject)
{
// name
TString* functionName = nullptr;
- if ((baseObject == nullptr && scope == nullptr)) {
- functionName = callToken.string;
- } else if (parseContext.isBuiltInMethod(callToken.loc, baseObject, *callToken.string)) {
+ if (baseObject == nullptr) {
+ functionName = &name;
+ } else if (parseContext.isBuiltInMethod(loc, baseObject, name)) {
// Built-in methods are not in the symbol table as methods, but as global functions
// taking an explicit 'this' as the first argument.
functionName = NewPoolTString(BUILTIN_PREFIX);
- functionName->append(*callToken.string);
+ functionName->append(name);
} else {
+ if (! baseObject->getType().isStruct()) {
+ expected("structure");
+ return false;
+ }
functionName = NewPoolTString("");
- if (baseObject != nullptr)
- functionName->append(baseObject->getType().getTypeName());
- else if (scope != nullptr)
- functionName->append(scope->getType().getTypeName());
+ functionName->append(baseObject->getType().getTypeName());
parseContext.addScopeMangler(*functionName);
- functionName->append(*callToken.string);
+ functionName->append(name);
}
// function
@@ -2841,9 +3184,9 @@ bool HlslGrammar::acceptFunctionCall(HlslToken callToken, TIntermTyped*& node, T
return false;
// call
- node = parseContext.handleFunctionCall(callToken.loc, function, arguments);
+ node = parseContext.handleFunctionCall(loc, function, arguments);
- return true;
+ return node != nullptr;
}
// arguments
@@ -2858,11 +3201,16 @@ bool HlslGrammar::acceptArguments(TFunction* function, TIntermTyped*& arguments)
if (! acceptTokenClass(EHTokLeftParen))
return false;
+ // RIGHT_PAREN
+ if (acceptTokenClass(EHTokRightParen))
+ return true;
+
+ // must now be at least one expression...
do {
// expression
TIntermTyped* arg;
if (! acceptAssignmentExpression(arg))
- break;
+ return false;
// hook it up
parseContext.handleFunctionArgument(function, arguments, arg);
@@ -2912,6 +3260,37 @@ bool HlslGrammar::acceptLiteral(TIntermTyped*& node)
return true;
}
+// simple_statement
+// : SEMICOLON
+// | declaration_statement
+// | expression SEMICOLON
+//
+bool HlslGrammar::acceptSimpleStatement(TIntermNode*& statement)
+{
+ // SEMICOLON
+ if (acceptTokenClass(EHTokSemicolon))
+ return true;
+
+ // declaration
+ if (acceptDeclaration(statement))
+ return true;
+
+ // expression
+ TIntermTyped* node;
+ if (acceptExpression(node))
+ statement = node;
+ else
+ return false;
+
+ // SEMICOLON (following an expression)
+ if (acceptTokenClass(EHTokSemicolon))
+ return true;
+ else {
+ expected(";");
+ return false;
+ }
+}
+
// compound_statement
// : LEFT_CURLY statement statement ... RIGHT_CURLY
//
@@ -2969,12 +3348,11 @@ bool HlslGrammar::acceptScopedCompoundStatement(TIntermNode*& statement)
//
// attributed_statement
// : compound_statement
-// | SEMICOLON
-// | expression SEMICOLON
-// | declaration_statement
+// | simple_statement
// | selection_statement
// | switch_statement
// | case_label
+// | default_label
// | iteration_statement
// | jump_statement
//
@@ -2992,15 +3370,15 @@ bool HlslGrammar::acceptStatement(TIntermNode*& statement)
return acceptScopedCompoundStatement(statement);
case EHTokIf:
- return acceptSelectionStatement(statement);
+ return acceptSelectionStatement(statement, attributes);
case EHTokSwitch:
- return acceptSwitchStatement(statement);
+ return acceptSwitchStatement(statement, attributes);
case EHTokFor:
case EHTokDo:
case EHTokWhile:
- return acceptIterationStatement(statement);
+ return acceptIterationStatement(statement, attributes);
case EHTokContinue:
case EHTokBreak:
@@ -3013,40 +3391,28 @@ bool HlslGrammar::acceptStatement(TIntermNode*& statement)
case EHTokDefault:
return acceptDefaultLabel(statement);
- case EHTokSemicolon:
- return acceptTokenClass(EHTokSemicolon);
-
case EHTokRightBrace:
// Performance: not strictly necessary, but stops a bunch of hunting early,
// and is how sequences of statements end.
return false;
default:
- {
- // declaration
- if (acceptDeclaration(statement))
- return true;
-
- // expression
- TIntermTyped* node;
- if (acceptExpression(node))
- statement = node;
- else
- return false;
-
- // SEMICOLON (following an expression)
- if (! acceptTokenClass(EHTokSemicolon)) {
- expected(";");
- return false;
- }
- }
+ return acceptSimpleStatement(statement);
}
return true;
}
// attributes
-// : list of zero or more of: LEFT_BRACKET attribute RIGHT_BRACKET
+// : [zero or more:] bracketed-attribute
+//
+// bracketed-attribute:
+// : LEFT_BRACKET scoped-attribute RIGHT_BRACKET
+// : LEFT_BRACKET LEFT_BRACKET scoped-attribute RIGHT_BRACKET RIGHT_BRACKET
+//
+// scoped-attribute:
+// : attribute
+// | namespace COLON COLON attribute
//
// attribute:
// : UNROLL
@@ -3073,18 +3439,33 @@ void HlslGrammar::acceptAttributes(TAttributeMap& attributes)
// numthreads, which is used to set the CS local size.
// TODO: subset to correct set? Pass on?
do {
- HlslToken idToken;
+ HlslToken attributeToken;
// LEFT_BRACKET?
if (! acceptTokenClass(EHTokLeftBracket))
return;
+ // another LEFT_BRACKET?
+ bool doubleBrackets = false;
+ if (acceptTokenClass(EHTokLeftBracket))
+ doubleBrackets = true;
+
+ // attribute? (could be namespace; will adjust later)
+ if (!acceptIdentifier(attributeToken)) {
+ if (!peekTokenClass(EHTokRightBracket)) {
+ expected("namespace or attribute identifier");
+ advanceToken();
+ }
+ }
- // attribute
- if (acceptIdentifier(idToken)) {
- // 'idToken.string' is the attribute
- } else if (! peekTokenClass(EHTokRightBracket)) {
- expected("identifier");
- advanceToken();
+ TString nameSpace;
+ if (acceptTokenClass(EHTokColonColon)) {
+ // namespace COLON COLON
+ nameSpace = *attributeToken.string;
+ // attribute
+ if (!acceptIdentifier(attributeToken)) {
+ expected("attribute identifier");
+ return;
+ }
}
TIntermAggregate* expressions = nullptr;
@@ -3117,10 +3498,15 @@ void HlslGrammar::acceptAttributes(TAttributeMap& attributes)
expected("]");
return;
}
+ // another RIGHT_BRACKET?
+ if (doubleBrackets && !acceptTokenClass(EHTokRightBracket)) {
+ expected("]]");
+ return;
+ }
// Add any values we found into the attribute map. This accepts
// (and ignores) values not mapping to a known TAttributeType;
- attributes.setAttribute(idToken.string, expressions);
+ attributes.setAttribute(nameSpace, attributeToken.string, expressions);
} while (true);
}
@@ -3128,10 +3514,12 @@ void HlslGrammar::acceptAttributes(TAttributeMap& attributes)
// : IF LEFT_PAREN expression RIGHT_PAREN statement
// : IF LEFT_PAREN expression RIGHT_PAREN statement ELSE statement
//
-bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement)
+bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement, const TAttributeMap& attributes)
{
TSourceLoc loc = token.loc;
+ const TSelectionControl control = parseContext.handleSelectionControl(attributes);
+
// IF
if (! acceptTokenClass(EHTokIf))
return false;
@@ -3144,10 +3532,15 @@ bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement)
TIntermTyped* condition;
if (! acceptParenExpression(condition))
return false;
+ condition = parseContext.convertConditionalExpression(loc, condition);
+ if (condition == nullptr)
+ return false;
// create the child statements
TIntermNodePair thenElse = { nullptr, nullptr };
+ ++parseContext.controlFlowNestingLevel; // this only needs to work right if no errors
+
// then statement
if (! acceptScopedStatement(thenElse.node1)) {
expected("then statement");
@@ -3164,8 +3557,9 @@ bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement)
}
// Put the pieces together
- statement = intermediate.addSelection(condition, thenElse, loc);
+ statement = intermediate.addSelection(condition, thenElse, loc, control);
parseContext.popScope();
+ --parseContext.controlFlowNestingLevel;
return true;
}
@@ -3173,10 +3567,13 @@ bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement)
// switch_statement
// : SWITCH LEFT_PAREN expression RIGHT_PAREN compound_statement
//
-bool HlslGrammar::acceptSwitchStatement(TIntermNode*& statement)
+bool HlslGrammar::acceptSwitchStatement(TIntermNode*& statement, const TAttributeMap& attributes)
{
// SWITCH
TSourceLoc loc = token.loc;
+
+ const TSelectionControl control = parseContext.handleSelectionControl(attributes);
+
if (! acceptTokenClass(EHTokSwitch))
return false;
@@ -3190,9 +3587,13 @@ bool HlslGrammar::acceptSwitchStatement(TIntermNode*& statement)
// compound_statement
parseContext.pushSwitchSequence(new TIntermSequence);
+
+ ++parseContext.controlFlowNestingLevel;
bool statementOkay = acceptCompoundStatement(statement);
+ --parseContext.controlFlowNestingLevel;
+
if (statementOkay)
- statement = parseContext.addSwitch(loc, switchExpression, statement ? statement->getAsAggregate() : nullptr);
+ statement = parseContext.addSwitch(loc, switchExpression, statement ? statement->getAsAggregate() : nullptr, control);
parseContext.popSwitchSequence();
parseContext.popScope();
@@ -3206,7 +3607,7 @@ bool HlslGrammar::acceptSwitchStatement(TIntermNode*& statement)
// | FOR LEFT_PAREN for_init_statement for_rest_statement RIGHT_PAREN statement
//
// Non-speculative, only call if it needs to be found; WHILE or DO or FOR already seen.
-bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement)
+bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement, const TAttributeMap& attributes)
{
TSourceLoc loc = token.loc;
TIntermTyped* condition = nullptr;
@@ -3216,17 +3617,23 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement)
// WHILE or DO or FOR
advanceToken();
+
+ const TLoopControl control = parseContext.handleLoopControl(attributes);
switch (loop) {
case EHTokWhile:
// so that something declared in the condition is scoped to the lifetime
// of the while sub-statement
- parseContext.pushScope();
+ parseContext.pushScope(); // this only needs to work right if no errors
parseContext.nestLooping();
+ ++parseContext.controlFlowNestingLevel;
// LEFT_PAREN condition RIGHT_PAREN
if (! acceptParenExpression(condition))
return false;
+ condition = parseContext.convertConditionalExpression(loc, condition);
+ if (condition == nullptr)
+ return false;
// statement
if (! acceptScopedStatement(statement)) {
@@ -3236,26 +3643,22 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement)
parseContext.unnestLooping();
parseContext.popScope();
+ --parseContext.controlFlowNestingLevel;
- statement = intermediate.addLoop(statement, condition, nullptr, true, loc);
+ statement = intermediate.addLoop(statement, condition, nullptr, true, loc, control);
return true;
case EHTokDo:
- parseContext.nestLooping();
-
- if (! acceptTokenClass(EHTokLeftBrace))
- expected("{");
+ parseContext.nestLooping(); // this only needs to work right if no errors
+ ++parseContext.controlFlowNestingLevel;
// statement
- if (! peekTokenClass(EHTokRightBrace) && ! acceptScopedStatement(statement)) {
+ if (! acceptScopedStatement(statement)) {
expected("do sub-statement");
return false;
}
- if (! acceptTokenClass(EHTokRightBrace))
- expected("}");
-
// WHILE
if (! acceptTokenClass(EHTokWhile)) {
expected("while");
@@ -3266,13 +3669,17 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement)
TIntermTyped* condition;
if (! acceptParenExpression(condition))
return false;
+ condition = parseContext.convertConditionalExpression(loc, condition);
+ if (condition == nullptr)
+ return false;
if (! acceptTokenClass(EHTokSemicolon))
expected(";");
parseContext.unnestLooping();
+ --parseContext.controlFlowNestingLevel;
- statement = intermediate.addLoop(statement, condition, 0, false, loc);
+ statement = intermediate.addLoop(statement, condition, 0, false, loc, control);
return true;
@@ -3288,21 +3695,21 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement)
// initializer
TIntermNode* initNode = nullptr;
- if (! acceptControlDeclaration(initNode)) {
- TIntermTyped* initExpr = nullptr;
- acceptExpression(initExpr);
- initNode = initExpr;
- }
- // SEMI_COLON
- if (! acceptTokenClass(EHTokSemicolon))
- expected(";");
+ if (! acceptSimpleStatement(initNode))
+ expected("for-loop initializer statement");
- parseContext.nestLooping();
+ parseContext.nestLooping(); // this only needs to work right if no errors
+ ++parseContext.controlFlowNestingLevel;
// condition SEMI_COLON
acceptExpression(condition);
if (! acceptTokenClass(EHTokSemicolon))
expected(";");
+ if (condition != nullptr) {
+ condition = parseContext.convertConditionalExpression(loc, condition);
+ if (condition == nullptr)
+ return false;
+ }
// iterator SEMI_COLON
TIntermTyped* iterator = nullptr;
@@ -3316,10 +3723,11 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement)
return false;
}
- statement = intermediate.addForLoop(statement, initNode, condition, iterator, true, loc);
+ statement = intermediate.addForLoop(statement, initNode, condition, iterator, true, loc, control);
parseContext.popScope();
parseContext.unnestLooping();
+ --parseContext.controlFlowNestingLevel;
return true;
}
@@ -3617,4 +4025,40 @@ bool HlslGrammar::captureBlockTokens(TVector<HlslToken>& tokens)
return true;
}
+// Return a string for just the types that can also be declared as an identifier.
+const char* HlslGrammar::getTypeString(EHlslTokenClass tokenClass) const
+{
+ switch (tokenClass) {
+ case EHTokSample: return "sample";
+ case EHTokHalf: return "half";
+ case EHTokHalf1x1: return "half1x1";
+ case EHTokHalf1x2: return "half1x2";
+ case EHTokHalf1x3: return "half1x3";
+ case EHTokHalf1x4: return "half1x4";
+ case EHTokHalf2x1: return "half2x1";
+ case EHTokHalf2x2: return "half2x2";
+ case EHTokHalf2x3: return "half2x3";
+ case EHTokHalf2x4: return "half2x4";
+ case EHTokHalf3x1: return "half3x1";
+ case EHTokHalf3x2: return "half3x2";
+ case EHTokHalf3x3: return "half3x3";
+ case EHTokHalf3x4: return "half3x4";
+ case EHTokHalf4x1: return "half4x1";
+ case EHTokHalf4x2: return "half4x2";
+ case EHTokHalf4x3: return "half4x3";
+ case EHTokHalf4x4: return "half4x4";
+ case EHTokBool: return "bool";
+ case EHTokFloat: return "float";
+ case EHTokDouble: return "double";
+ case EHTokInt: return "int";
+ case EHTokUint: return "uint";
+ case EHTokMin16float: return "min16float";
+ case EHTokMin10float: return "min10float";
+ case EHTokMin16int: return "min16int";
+ case EHTokMin12int: return "min12int";
+ default:
+ return nullptr;
+ }
+}
+
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h
index 1a3abf10997..9d5380c1031 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h
@@ -52,7 +52,8 @@ namespace glslang {
class HlslGrammar : public HlslTokenStream {
public:
HlslGrammar(HlslScanContext& scanner, HlslParseContext& parseContext)
- : HlslTokenStream(scanner), parseContext(parseContext), intermediate(parseContext.intermediate) { }
+ : HlslTokenStream(scanner), parseContext(parseContext), intermediate(parseContext.intermediate),
+ typeIdentifiers(false) { }
virtual ~HlslGrammar() { }
bool parse();
@@ -65,6 +66,7 @@ namespace glslang {
void unimplemented(const char*);
bool acceptIdentifier(HlslToken&);
bool acceptCompilationUnit();
+ bool acceptDeclarationList(TIntermNode*&);
bool acceptDeclaration(TIntermNode*&);
bool acceptControlDeclaration(TIntermNode*& node);
bool acceptSamplerDeclarationDX9(TType&);
@@ -78,18 +80,20 @@ namespace glslang {
bool acceptTemplateVecMatBasicType(TBasicType&);
bool acceptVectorTemplateType(TType&);
bool acceptMatrixTemplateType(TType&);
- bool acceptTessellationDeclType();
+ bool acceptTessellationDeclType(TBuiltInVariable&);
bool acceptTessellationPatchTemplateType(TType&);
bool acceptStreamOutTemplateType(TType&, TLayoutGeometry&);
bool acceptOutputPrimitiveGeometry(TLayoutGeometry&);
bool acceptAnnotations(TQualifier&);
bool acceptSamplerType(TType&);
bool acceptTextureType(TType&);
+ bool acceptSubpassInputType(TType&);
bool acceptStructBufferType(TType&);
+ bool acceptTextureBufferType(TType&);
+ bool acceptConstantBufferType(TType&);
bool acceptStruct(TType&, TIntermNode*& nodeList);
- bool acceptStructDeclarationList(TTypeList*&, TIntermNode*& nodeList, const TString& typeName,
- TVector<TFunctionDeclarator>&);
- bool acceptMemberFunctionDefinition(TIntermNode*& nodeList, const TType&, const TString& memberName,
+ bool acceptStructDeclarationList(TTypeList*&, TIntermNode*& nodeList, TVector<TFunctionDeclarator>&);
+ bool acceptMemberFunctionDefinition(TIntermNode*& nodeList, const TType&, TString& memberName,
TFunctionDeclarator&);
bool acceptFunctionParameters(TFunction&);
bool acceptParameterDeclaration(TFunction&);
@@ -104,19 +108,19 @@ namespace glslang {
bool acceptUnaryExpression(TIntermTyped*&);
bool acceptPostfixExpression(TIntermTyped*&);
bool acceptConstructor(TIntermTyped*&);
- bool acceptFunctionCall(HlslToken, TIntermTyped*&, TIntermTyped* objectBase = nullptr,
- const TSymbol* scope = nullptr);
+ bool acceptFunctionCall(const TSourceLoc&, TString& name, TIntermTyped*&, TIntermTyped* objectBase);
bool acceptArguments(TFunction*, TIntermTyped*&);
bool acceptLiteral(TIntermTyped*&);
+ bool acceptSimpleStatement(TIntermNode*&);
bool acceptCompoundStatement(TIntermNode*&);
- bool acceptStatement(TIntermNode*&);
bool acceptScopedStatement(TIntermNode*&);
bool acceptScopedCompoundStatement(TIntermNode*&);
+ bool acceptStatement(TIntermNode*&);
bool acceptNestedStatement(TIntermNode*&);
void acceptAttributes(TAttributeMap&);
- bool acceptSelectionStatement(TIntermNode*&);
- bool acceptSwitchStatement(TIntermNode*&);
- bool acceptIterationStatement(TIntermNode*&);
+ bool acceptSelectionStatement(TIntermNode*&, const TAttributeMap&);
+ bool acceptSwitchStatement(TIntermNode*&, const TAttributeMap&);
+ bool acceptIterationStatement(TIntermNode*&, const TAttributeMap&);
bool acceptJumpStatement(TIntermNode*&);
bool acceptCaseLabel(TIntermNode*&);
bool acceptDefaultLabel(TIntermNode*&);
@@ -125,9 +129,11 @@ namespace glslang {
bool acceptDefaultParameterDeclaration(const TType&, TIntermTyped*&);
bool captureBlockTokens(TVector<HlslToken>& tokens);
+ const char* getTypeString(EHlslTokenClass tokenClass) const;
HlslParseContext& parseContext; // state of parsing and helper functions for building the intermediate
TIntermediate& intermediate; // the final product, the intermediate representation, includes the AST
+ bool typeIdentifiers; // shader uses some types as identifiers
};
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp
index 48b94b62c4f..adb955f7cc9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp
@@ -1,6 +1,6 @@
//
-// Copyright (C) 2016 Google, Inc.
-// Copyright (C) 2016 LunarG, Inc.
+// Copyright (C) 2017 Google, Inc.
+// Copyright (C) 2017 LunarG, Inc.
//
// All rights reserved.
//
@@ -53,20 +53,22 @@
namespace glslang {
HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins,
- int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink,
+ int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
+ TInfoSink& infoSink,
const TString sourceEntryPointName,
bool forwardCompatible, EShMessages messages) :
- TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
- contextPragma(true, false),
- loopNestingLevel(0), annotationNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0),
- postEntryPointReturn(false),
- limits(resources.limits),
- builtInIoIndex(nullptr),
- builtInIoBase(nullptr),
+ TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink,
+ forwardCompatible, messages, &sourceEntryPointName),
+ annotationNestingLevel(0),
+ inputPatch(nullptr),
nextInLocation(0), nextOutLocation(0),
- sourceEntryPointName(sourceEntryPointName),
entryPointFunction(nullptr),
- entryPointFunctionBody(nullptr)
+ entryPointFunctionBody(nullptr),
+ gsStreamOutput(nullptr),
+ clipDistanceInput(nullptr),
+ cullDistanceInput(nullptr),
+ clipDistanceOutput(nullptr),
+ cullDistanceOutput(nullptr)
{
globalUniformDefaults.clear();
globalUniformDefaults.layoutMatrix = ElmRowMajor;
@@ -79,6 +81,11 @@ HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& int
globalInputDefaults.clear();
globalOutputDefaults.clear();
+ clipSemanticNSizeIn.fill(0);
+ cullSemanticNSizeIn.fill(0);
+ clipSemanticNSizeOut.fill(0);
+ cullSemanticNSizeOut.fill(0);
+
// "Shaders in the transform
// feedback capturing mode have an initial global default of
// layout(xfb_buffer = 0) out;"
@@ -129,7 +136,8 @@ bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner&
// Print a message formated such that if you click on the message it will take you right to
// the line through most UIs.
const glslang::TSourceLoc& sourceLoc = input.getSourceLoc();
- infoSink.info << sourceLoc.name << "(" << sourceLoc.line << "): error at column " << sourceLoc.column << ", HLSL parsing failed.\n";
+ infoSink.info << sourceLoc.name << "(" << sourceLoc.line << "): error at column " << sourceLoc.column
+ << ", HLSL parsing failed.\n";
++numErrors;
return false;
}
@@ -145,7 +153,7 @@ bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner&
//
bool HlslParseContext::shouldConvertLValue(const TIntermNode* node) const
{
- if (node == nullptr)
+ if (node == nullptr || node->getAsTyped() == nullptr)
return false;
const TIntermAggregate* lhsAsAggregate = node->getAsAggregate();
@@ -155,14 +163,14 @@ bool HlslParseContext::shouldConvertLValue(const TIntermNode* node) const
if (lhsAsBinary != nullptr &&
(lhsAsBinary->getOp() == EOpVectorSwizzle || lhsAsBinary->getOp() == EOpIndexDirect))
lhsAsAggregate = lhsAsBinary->getLeft()->getAsAggregate();
-
if (lhsAsAggregate != nullptr && lhsAsAggregate->getOp() == EOpImageLoad)
return true;
return false;
}
-void HlslParseContext::growGlobalUniformBlock(TSourceLoc& loc, TType& memberType, TString& memberName, TTypeList* newTypeList)
+void HlslParseContext::growGlobalUniformBlock(const TSourceLoc& loc, TType& memberType, const TString& memberName,
+ TTypeList* newTypeList)
{
newTypeList = nullptr;
correctUniform(memberType.getQualifier());
@@ -179,7 +187,14 @@ void HlslParseContext::growGlobalUniformBlock(TSourceLoc& loc, TType& memberType
//
TLayoutFormat HlslParseContext::getLayoutFromTxType(const TSourceLoc& loc, const TType& txType)
{
+ if (txType.isStruct()) {
+ // TODO: implement.
+ error(loc, "unimplemented: structure type in image or buffer", "", "");
+ return ElfNone;
+ }
+
const int components = txType.getVectorSize();
+ const TBasicType txBasicType = txType.getBasicType();
const auto selectFormat = [this,&components](TLayoutFormat v1, TLayoutFormat v2, TLayoutFormat v4) -> TLayoutFormat {
if (intermediate.getNoStorageFormat())
@@ -189,7 +204,7 @@ TLayoutFormat HlslParseContext::getLayoutFromTxType(const TSourceLoc& loc, const
components == 2 ? v2 : v4;
};
- switch (txType.getBasicType()) {
+ switch (txBasicType) {
case EbtFloat: return selectFormat(ElfR32f, ElfRg32f, ElfRgba32f);
case EbtInt: return selectFormat(ElfR32i, ElfRg32i, ElfRgba32i);
case EbtUint: return selectFormat(ElfR32ui, ElfRg32ui, ElfRgba32ui);
@@ -219,6 +234,13 @@ bool HlslParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, T
}
}
+ // We tolerate samplers as l-values, even though they are nominally
+ // illegal, because we expect a later optimization to eliminate them.
+ if (node->getType().getBasicType() == EbtSampler) {
+ intermediate.setNeedsLegalization();
+ return false;
+ }
+
// Let the base class check errors
return TParseContextBase::lValueErrorCheck(loc, op, node);
}
@@ -231,7 +253,7 @@ bool HlslParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, T
//
// Most things are passed through unmodified, except for error checking.
//
-TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* op, TIntermTyped* node)
+TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* op, TIntermTyped*& node)
{
if (node == nullptr)
return nullptr;
@@ -333,13 +355,6 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char*
[](bool isSet) { return isSet; } );
};
- // helper to create a temporary variable
- const auto addTmpVar = [&](const char* name, const TType& derefType) -> TIntermSymbol* {
- TVariable* tmpVar = makeInternalVariable(name, derefType);
- tmpVar->getWritableType().getQualifier().makeTemporary();
- return intermediate.addSymbol(*tmpVar, loc);
- };
-
// Create swizzle matching input swizzle
const auto addSwizzle = [&](TIntermSymbol* var, TIntermBinary* swizzle) -> TIntermTyped* {
if (swizzle)
@@ -363,7 +378,8 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char*
const TSampler& texSampler = object->getType().getSampler();
- const TType objDerefType(texSampler.type, EvqTemporary, texSampler.vectorSize);
+ TType objDerefType;
+ getTextureReturnType(texSampler, objDerefType);
if (nodeAsBinary) {
TIntermTyped* rhs = nodeAsBinary->getRight();
@@ -390,12 +406,13 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char*
// fall through...
case EOpAssign:
{
- // Since this is an lvalue, we'll convert an image load to a sequence like this (to still provide the value):
+ // Since this is an lvalue, we'll convert an image load to a sequence like this
+ // (to still provide the value):
// OpSequence
// OpImageStore(object, lhs, rhs)
// rhs
- // But if it's not a simple symbol RHS (say, a fn call), we don't want to duplicate the RHS, so we'll convert
- // instead to this:
+ // But if it's not a simple symbol RHS (say, a fn call), we don't want to duplicate the RHS,
+ // so we'll convert instead to this:
// OpSequence
// rhsTmp = rhs
// OpImageStore(object, coord, rhsTmp)
@@ -417,7 +434,7 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char*
TIntermTyped* coordTmp = coord;
if (rhsTmp == nullptr || isModifyOp || lhsIsSwizzle) {
- rhsTmp = addTmpVar("storeTemp", objDerefType);
+ rhsTmp = makeInternalVariableNode(loc, "storeTemp", objDerefType);
// Partial updates not yet supported
if (!writesAllComponents(rhsTmp, lhsAsBinary)) {
@@ -427,7 +444,7 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char*
// Assign storeTemp = rhs
if (isModifyOp) {
// We have to make a temp var for the coordinate, to avoid evaluating it twice.
- coordTmp = addTmpVar("coordTemp", coord->getType());
+ coordTmp = makeInternalVariableNode(loc, "coordTemp", coord->getType());
makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1]
makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp)
}
@@ -460,8 +477,8 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char*
// OpImageStore(object, coordTmp, rhsTmp)
// rhsTmp
- TIntermSymbol* rhsTmp = addTmpVar("storeTemp", objDerefType);
- TIntermTyped* coordTmp = addTmpVar("coordTemp", coord->getType());
+ TIntermSymbol* rhsTmp = makeInternalVariableNode(loc, "storeTemp", objDerefType);
+ TIntermTyped* coordTmp = makeInternalVariableNode(loc, "coordTemp", coord->getType());
makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1]
makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp)
@@ -481,9 +498,9 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char*
// rhsTmp2 op
// OpImageStore(object, coordTmp, rhsTmp2)
// rhsTmp1 (pre-op value)
- TIntermSymbol* rhsTmp1 = addTmpVar("storeTempPre", objDerefType);
- TIntermSymbol* rhsTmp2 = addTmpVar("storeTempPost", objDerefType);
- TIntermTyped* coordTmp = addTmpVar("coordTemp", coord->getType());
+ TIntermSymbol* rhsTmp1 = makeInternalVariableNode(loc, "storeTempPre", objDerefType);
+ TIntermSymbol* rhsTmp2 = makeInternalVariableNode(loc, "storeTempPost", objDerefType);
+ TIntermTyped* coordTmp = makeInternalVariableNode(loc, "coordTemp", coord->getType());
makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1]
makeLoad(rhsTmp1, object, coordTmp, objDerefType); // rhsTmp1 = OpImageLoad(object, coordTmp)
@@ -512,6 +529,28 @@ void HlslParseContext::handlePragma(const TSourceLoc& loc, const TVector<TString
if (tokens.size() == 0)
return;
+
+ // These pragmas are case insensitive in HLSL, so we'll compare in lower case.
+ TVector<TString> lowerTokens = tokens;
+
+ for (auto it = lowerTokens.begin(); it != lowerTokens.end(); ++it)
+ std::transform(it->begin(), it->end(), it->begin(), ::tolower);
+
+ // Handle pack_matrix
+ if (tokens.size() == 4 && lowerTokens[0] == "pack_matrix" && tokens[1] == "(" && tokens[3] == ")") {
+ // Note that HLSL semantic order is Mrc, not Mcr like SPIR-V, so we reverse the sense.
+ // Row major becomes column major and vice versa.
+
+ if (lowerTokens[2] == "row_major") {
+ globalUniformDefaults.layoutMatrix = globalBufferDefaults.layoutMatrix = ElmColumnMajor;
+ } else if (lowerTokens[2] == "column_major") {
+ globalUniformDefaults.layoutMatrix = globalBufferDefaults.layoutMatrix = ElmRowMajor;
+ } else {
+ // unknown majorness strings are treated as (HLSL column major)==(SPIR-V row major)
+ warn(loc, "unknown pack_matrix pragma value", tokens[2].c_str(), "");
+ globalUniformDefaults.layoutMatrix = globalBufferDefaults.layoutMatrix = ElmRowMajor;
+ }
+ }
}
//
@@ -654,7 +693,7 @@ TIntermTyped* HlslParseContext::handleVariable(const TSourceLoc& loc, const TStr
}
// Recovery, if it wasn't found or was not a variable.
- if (! variable) {
+ if (variable == nullptr) {
error(loc, "unknown variable", string->c_str(), "");
variable = new TVariable(string, TType(EbtVoid));
}
@@ -682,19 +721,33 @@ TIntermTyped* HlslParseContext::handleBracketOperator(const TSourceLoc& loc, TIn
if (base->getType().getBasicType() == EbtSampler && !base->isArray()) {
const TSampler& sampler = base->getType().getSampler();
if (sampler.isImage() || sampler.isTexture()) {
- TIntermAggregate* load = new TIntermAggregate(sampler.isImage() ? EOpImageLoad : EOpTextureFetch);
-
- load->setType(TType(sampler.type, EvqTemporary, sampler.vectorSize));
- load->setLoc(loc);
- load->getSequence().push_back(base);
- load->getSequence().push_back(index);
-
- // Textures need a MIP. First indirection is always to mip 0. If there's another, we'll add it
- // later.
- if (sampler.isTexture())
- load->getSequence().push_back(intermediate.addConstantUnion(0, loc, true));
+ if (! mipsOperatorMipArg.empty() && mipsOperatorMipArg.back().mipLevel == nullptr) {
+ // The first operator[] to a .mips[] sequence is the mip level. We'll remember it.
+ mipsOperatorMipArg.back().mipLevel = index;
+ return base; // next [] index is to the same base.
+ } else {
+ TIntermAggregate* load = new TIntermAggregate(sampler.isImage() ? EOpImageLoad : EOpTextureFetch);
+
+ TType sampReturnType;
+ getTextureReturnType(sampler, sampReturnType);
+
+ load->setType(sampReturnType);
+ load->setLoc(loc);
+ load->getSequence().push_back(base);
+ load->getSequence().push_back(index);
+
+ // Textures need a MIP. If we saw one go by, use it. Otherwise, use zero.
+ if (sampler.isTexture()) {
+ if (! mipsOperatorMipArg.empty()) {
+ load->getSequence().push_back(mipsOperatorMipArg.back().mipLevel);
+ mipsOperatorMipArg.pop_back();
+ } else {
+ load->getSequence().push_back(intermediate.addConstantUnion(0, loc, true));
+ }
+ }
- return load;
+ return load;
+ }
}
}
@@ -718,10 +771,33 @@ TIntermTyped* HlslParseContext::handleBracketOperator(const TSourceLoc& loc, TIn
}
//
+// Cast index value to a uint if it isn't already (for operator[], load indexes, etc)
+TIntermTyped* HlslParseContext::makeIntegerIndex(TIntermTyped* index)
+{
+ const TBasicType indexBasicType = index->getType().getBasicType();
+ const int vecSize = index->getType().getVectorSize();
+
+ // We can use int types directly as the index
+ if (indexBasicType == EbtInt || indexBasicType == EbtUint ||
+ indexBasicType == EbtInt64 || indexBasicType == EbtUint64)
+ return index;
+
+ // Cast index to unsigned integer if it isn't one.
+ return intermediate.addConversion(EOpConstructUint, TType(EbtUint, EvqTemporary, vecSize), index);
+}
+
+//
// Handle seeing a base[index] dereference in the grammar.
//
TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index)
{
+ index = makeIntegerIndex(index);
+
+ if (index == nullptr) {
+ error(loc, " unknown index type ", "", "");
+ return nullptr;
+ }
+
TIntermTyped* result = handleBracketOperator(loc, base, index);
if (result != nullptr)
@@ -729,34 +805,35 @@ TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc,
bool flattened = false;
int indexValue = 0;
- if (index->getQualifier().storage == EvqConst) {
+ if (index->getQualifier().isFrontEndConstant())
indexValue = index->getAsConstantUnion()->getConstArray()[0].getIConst();
- checkIndex(loc, base->getType(), indexValue);
- }
variableCheck(base);
if (! base->isArray() && ! base->isMatrix() && ! base->isVector()) {
if (base->getAsSymbolNode())
- error(loc, " left of '[' is not of type array, matrix, or vector ", base->getAsSymbolNode()->getName().c_str(), "");
+ error(loc, " left of '[' is not of type array, matrix, or vector ",
+ base->getAsSymbolNode()->getName().c_str(), "");
else
error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", "");
- } else if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst)
+ } else if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst) {
+ // both base and index are front-end constants
+ checkIndex(loc, base->getType(), indexValue);
return intermediate.foldDereference(base, indexValue, loc);
- else {
+ } else {
// at least one of base and index is variable...
- if (base->getAsSymbolNode() && (wasFlattened(base) || shouldFlattenUniform(base->getType()))) {
+ if (base->getAsSymbolNode() && wasFlattened(base)) {
if (index->getQualifier().storage != EvqConst)
error(loc, "Invalid variable index to flattened array", base->getAsSymbolNode()->getName().c_str(), "");
result = flattenAccess(base, indexValue);
flattened = (result != base);
} else {
- splitAccessArray(loc, base, index);
-
- if (index->getQualifier().storage == EvqConst) {
+ if (index->getQualifier().isFrontEndConstant()) {
if (base->getType().isImplicitlySizedArray())
updateImplicitArraySize(loc, base, indexValue);
+ else
+ checkIndex(loc, base->getType(), indexValue);
result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
} else {
result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
@@ -785,23 +862,20 @@ TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc,
return result;
}
-void HlslParseContext::checkIndex(const TSourceLoc& /*loc*/, const TType& /*type*/, int& /*index*/)
-{
- // HLSL todo: any rules for index fixups?
-}
-
// Handle seeing a binary node with a math operation.
-TIntermTyped* HlslParseContext::handleBinaryMath(const TSourceLoc& loc, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right)
+TIntermTyped* HlslParseContext::handleBinaryMath(const TSourceLoc& loc, const char* str, TOperator op,
+ TIntermTyped* left, TIntermTyped* right)
{
TIntermTyped* result = intermediate.addBinaryMath(op, left, right, loc);
- if (! result)
+ if (result == nullptr)
binaryOpError(loc, str, left->getCompleteString(), right->getCompleteString());
return result;
}
// Handle seeing a unary node with a math operation.
-TIntermTyped* HlslParseContext::handleUnaryMath(const TSourceLoc& loc, const char* str, TOperator op, TIntermTyped* childNode)
+TIntermTyped* HlslParseContext::handleUnaryMath(const TSourceLoc& loc, const char* str, TOperator op,
+ TIntermTyped* childNode)
{
TIntermTyped* result = intermediate.addUnaryMath(op, childNode, loc);
@@ -835,7 +909,11 @@ bool HlslParseContext::isStructBufferMethod(const TString& name) const
name == "InterlockedMax" ||
name == "InterlockedMin" ||
name == "InterlockedOr" ||
- name == "InterlockedXor";
+ name == "InterlockedXor" ||
+ name == "IncrementCounter" ||
+ name == "DecrementCounter" ||
+ name == "Append" ||
+ name == "Consume";
}
//
@@ -852,7 +930,23 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
}
TIntermTyped* result = base;
- if (base->isVector() || base->isScalar()) {
+
+ if (base->getType().getBasicType() == EbtSampler) {
+ // Handle .mips[mipid][pos] operation on textures
+ const TSampler& sampler = base->getType().getSampler();
+ if (sampler.isTexture() && field == "mips") {
+ // Push a null to signify that we expect a mip level under operator[] next.
+ mipsOperatorMipArg.push_back(tMipsOperatorData(loc, nullptr));
+ // Keep 'result' pointing to 'base', since we expect an operator[] to go by next.
+ } else {
+ if (field == "mips")
+ error(loc, "unexpected texture type for .mips[][] operator:",
+ base->getType().getCompleteString().c_str(), "");
+ else
+ error(loc, "unexpected operator on texture type:", field.c_str(),
+ base->getType().getCompleteString().c_str());
+ }
+ } else if (base->isVector() || base->isScalar()) {
TSwizzleSelectors<TVectorSelector> selectors;
parseSwizzleSelector(loc, field, base->getVectorSize(), selectors);
@@ -884,7 +978,8 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
} else {
TIntermTyped* index = intermediate.addSwizzle(selectors, loc);
result = intermediate.addIndex(EOpVectorSwizzle, base, index, loc);
- result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision, selectors.size()));
+ result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision,
+ selectors.size()));
}
}
} else if (base->isMatrix()) {
@@ -898,10 +993,14 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
result = intermediate.foldDereference(base, selectors[0].coord1, loc);
result = intermediate.foldDereference(result, selectors[0].coord2, loc);
} else {
- result = intermediate.addIndex(EOpIndexDirect, base, intermediate.addConstantUnion(selectors[0].coord1, loc), loc);
+ result = intermediate.addIndex(EOpIndexDirect, base,
+ intermediate.addConstantUnion(selectors[0].coord1, loc),
+ loc);
TType dereferencedCol(base->getType(), 0);
result->setType(dereferencedCol);
- result = intermediate.addIndex(EOpIndexDirect, result, intermediate.addConstantUnion(selectors[0].coord2, loc), loc);
+ result = intermediate.addIndex(EOpIndexDirect, result,
+ intermediate.addConstantUnion(selectors[0].coord2, loc),
+ loc);
TType dereferenced(dereferencedCol, 0);
result->setType(dereferenced);
}
@@ -912,7 +1011,8 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
if (base->getType().getQualifier().isFrontEndConstant())
result = intermediate.foldDereference(base, column, loc);
else {
- result = intermediate.addIndex(EOpIndexDirect, base, intermediate.addConstantUnion(column, loc), loc);
+ result = intermediate.addIndex(EOpIndexDirect, base, intermediate.addConstantUnion(column, loc),
+ loc);
TType dereferenced(base->getType(), 0);
result->setType(dereferenced);
}
@@ -920,7 +1020,8 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
// general case, not a column, not a single component
TIntermTyped* index = intermediate.addSwizzle(selectors, loc);
result = intermediate.addIndex(EOpMatrixSwizzle, base, index, loc);
- result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision, selectors.size()));
+ result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision,
+ selectors.size()));
}
}
} else if (base->getBasicType() == EbtStruct || base->getBasicType() == EbtBlock) {
@@ -934,21 +1035,15 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
}
}
if (fieldFound) {
- if (base->getAsSymbolNode() && (wasFlattened(base) || shouldFlattenUniform(base->getType()))) {
+ if (base->getAsSymbolNode() && wasFlattened(base)) {
result = flattenAccess(base, member);
} else {
- // Update the base and member to access if this was a split structure.
- result = splitAccessStruct(loc, base, member);
- fields = base->getType().getStruct();
-
- if (result == nullptr) {
- if (base->getType().getQualifier().storage == EvqConst)
- result = intermediate.foldDereference(base, member, loc);
- else {
- TIntermTyped* index = intermediate.addConstantUnion(member, loc);
- result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc);
- result->setType(*(*fields)[member].type);
- }
+ if (base->getType().getQualifier().storage == EvqConst)
+ result = intermediate.foldDereference(base, member, loc);
+ else {
+ TIntermTyped* index = intermediate.addConstantUnion(member, loc);
+ result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc);
+ result->setType(*(*fields)[member].type);
}
}
} else
@@ -983,109 +1078,107 @@ bool HlslParseContext::isBuiltInMethod(const TSourceLoc&, TIntermTyped* base, co
return false;
}
-// Split the type of the given node into two structs:
-// 1. interstage IO
-// 2. everything else
-// IO members are put into the ioStruct. The type is modified to remove them.
-void HlslParseContext::split(TIntermTyped* node)
+// Independently establish a built-in that is a member of a structure.
+// 'arraySizes' are what's desired for the independent built-in, whatever
+// the higher-level source/expression of them was.
+void HlslParseContext::splitBuiltIn(const TString& baseName, const TType& memberType, const TArraySizes* arraySizes,
+ const TQualifier& outerQualifier)
{
- if (node == nullptr)
- return;
+ // Because of arrays of structs, we might be asked more than once,
+ // but the arraySizes passed in should have captured the whole thing
+ // the first time.
+ // However, clip/cull rely on multiple updates.
+ if (!isClipOrCullDistance(memberType))
+ if (splitBuiltIns.find(tInterstageIoData(memberType.getQualifier().builtIn, outerQualifier.storage)) !=
+ splitBuiltIns.end())
+ return;
- TIntermSymbol* symNode = node->getAsSymbolNode();
+ TVariable* ioVar = makeInternalVariable(baseName + "." + memberType.getFieldName(), memberType);
- if (symNode == nullptr)
- return;
+ if (arraySizes != nullptr && !memberType.isArray())
+ ioVar->getWritableType().newArraySizes(*arraySizes);
- // Create a new variable:
- TType& splitType = split(*symNode->getType().clone(), symNode->getName());
+ splitBuiltIns[tInterstageIoData(memberType.getQualifier().builtIn, outerQualifier.storage)] = ioVar;
+ if (!isClipOrCullDistance(ioVar->getType()))
+ trackLinkage(*ioVar);
+
+ // Merge qualifier from the user structure
+ mergeQualifiers(ioVar->getWritableType().getQualifier(), outerQualifier);
- splitIoVars[symNode->getId()] = makeInternalVariable(symNode->getName(), splitType);
+ // Fix the builtin type if needed (e.g, some types require fixed array sizes, no matter how the
+ // shader declared them). This is done after mergeQualifiers(), in case fixBuiltInIoType looks
+ // at the qualifier to determine e.g, in or out qualifications.
+ fixBuiltInIoType(ioVar->getWritableType());
+
+ // But, not location, we're losing that
+ ioVar->getWritableType().getQualifier().layoutLocation = TQualifier::layoutLocationEnd;
}
-// Split the type of the given variable into two structs:
+// Split a type into
+// 1. a struct of non-I/O members
+// 2. a collection of independent I/O variables
void HlslParseContext::split(const TVariable& variable)
{
- const TType& type = variable.getType();
-
- TString name = variable.getName();
-
// Create a new variable:
- TType& splitType = split(*type.clone(), name);
-
- splitIoVars[variable.getUniqueId()] = makeInternalVariable(variable.getName(), splitType);
+ const TType& clonedType = *variable.getType().clone();
+ const TType& splitType = split(clonedType, variable.getName(), clonedType.getQualifier());
+ splitNonIoVars[variable.getUniqueId()] = makeInternalVariable(variable.getName(), splitType);
}
-// Recursive implementation of split(const TVariable& variable).
+// Recursive implementation of split().
// Returns reference to the modified type.
-TType& HlslParseContext::split(TType& type, TString name, const TType* outerStructType)
+const TType& HlslParseContext::split(const TType& type, const TString& name, const TQualifier& outerQualifier)
{
- const TArraySizes* arraySizes = nullptr;
-
- // At the outer-most scope, remember the struct type so we can examine its storage class
- // at deeper levels.
- if (outerStructType == nullptr)
- outerStructType = &type;
-
- if (type.isArray())
- arraySizes = &type.getArraySizes();
-
- // We can ignore arrayness: it's uninvolved.
if (type.isStruct()) {
TTypeList* userStructure = type.getWritableStruct();
-
- // Get iterator to (now at end) set of builtin interstage IO members
- const auto firstIo = std::stable_partition(userStructure->begin(), userStructure->end(),
- [this](const TTypeLoc& t) {return !t.type->isBuiltInInterstageIO(language);});
-
- // Move those to the builtin IO. However, we also propagate arrayness (just one level is handled
- // now) to this variable.
- for (auto ioType = firstIo; ioType != userStructure->end(); ++ioType) {
- const TType& memberType = *ioType->type;
- TVariable* ioVar = makeInternalVariable(name + (name.empty() ? "" : "_") + memberType.getFieldName(), memberType);
-
- if (arraySizes)
- ioVar->getWritableType().newArraySizes(*arraySizes);
-
- interstageBuiltInIo[tInterstageIoData(memberType, *outerStructType)] = ioVar;
-
- // Merge qualifier from the user structure
- mergeQualifiers(ioVar->getWritableType().getQualifier(), outerStructType->getQualifier());
+ for (auto ioType = userStructure->begin(); ioType != userStructure->end(); ) {
+ if (ioType->type->isBuiltIn()) {
+ // move out the built-in
+ splitBuiltIn(name, *ioType->type, type.getArraySizes(), outerQualifier);
+ ioType = userStructure->erase(ioType);
+ } else {
+ split(*ioType->type, name + "." + ioType->type->getFieldName(), outerQualifier);
+ ++ioType;
+ }
}
-
- // Erase the IO vars from the user structure.
- userStructure->erase(firstIo, userStructure->end());
-
- // Recurse further into the members.
- for (unsigned int i = 0; i < userStructure->size(); ++i)
- split(*(*userStructure)[i].type,
- name + (name.empty() ? "" : "_") + (*userStructure)[i].type->getFieldName(),
- outerStructType);
}
return type;
}
-// Is this a uniform array which should be flattened?
-bool HlslParseContext::shouldFlattenUniform(const TType& type) const
+// Is this an aggregate that should be flattened?
+// Can be applied to intermediate levels of type in a hierarchy.
+// Some things like flattening uniform arrays are only about the top level
+// of the aggregate, triggered on 'topLevel'.
+bool HlslParseContext::shouldFlatten(const TType& type, TStorageQualifier qualifier, bool topLevel) const
{
- const TStorageQualifier qualifier = type.getQualifier().storage;
-
- return qualifier == EvqUniform &&
- ((type.isArray() && intermediate.getFlattenUniformArrays()) || type.isStruct()) &&
- type.containsOpaque();
+ switch (qualifier) {
+ case EvqVaryingIn:
+ case EvqVaryingOut:
+ return type.isStruct() || type.isArray();
+ case EvqUniform:
+ return (type.isArray() && intermediate.getFlattenUniformArrays() && topLevel) ||
+ (type.isStruct() && type.containsOpaque());
+ default:
+ return type.isStruct() && type.containsOpaque();
+ };
}
// Top level variable flattening: construct data
-void HlslParseContext::flatten(const TSourceLoc& loc, const TVariable& variable)
+void HlslParseContext::flatten(const TVariable& variable, bool linkage)
{
const TType& type = variable.getType();
+ // If it's a standalone built-in, there is nothing to flatten
+ if (type.isBuiltIn() && !type.isStruct())
+ return;
+
auto entry = flattenMap.insert(std::make_pair(variable.getUniqueId(),
- TFlattenData(type.getQualifier().layoutBinding)));
+ TFlattenData(type.getQualifier().layoutBinding,
+ type.getQualifier().layoutLocation)));
// the item is a map pair, so first->second is the TFlattenData itself.
- flatten(loc, variable, type, entry.first->second, "");
+ flatten(variable, type, entry.first->second, variable.getName(), linkage, type.getQualifier(), nullptr);
}
// Recursively flatten the given variable at the provided type, building the flattenData as we go.
@@ -1115,15 +1208,17 @@ void HlslParseContext::flatten(const TSourceLoc& loc, const TVariable& variable)
//
// so the 4th flattened member in traversal order is ours.
//
-int HlslParseContext::flatten(const TSourceLoc& loc, const TVariable& variable, const TType& type,
- TFlattenData& flattenData, TString name)
+int HlslParseContext::flatten(const TVariable& variable, const TType& type,
+ TFlattenData& flattenData, TString name, bool linkage,
+ const TQualifier& outerQualifier,
+ const TArraySizes* builtInArraySizes)
{
// If something is an arrayed struct, the array flattener will recursively call flatten()
// to then flatten the struct, so this is an "if else": we don't do both.
if (type.isArray())
- return flattenArray(loc, variable, type, flattenData, name);
+ return flattenArray(variable, type, flattenData, name, linkage, outerQualifier);
else if (type.isStruct())
- return flattenStruct(loc, variable, type, flattenData, name);
+ return flattenStruct(variable, type, flattenData, name, linkage, outerQualifier, builtInArraySizes);
else {
assert(0); // should never happen
return -1;
@@ -1132,11 +1227,12 @@ int HlslParseContext::flatten(const TSourceLoc& loc, const TVariable& variable,
// Add a single flattened member to the flattened data being tracked for the composite
// Returns true for the final flattening level.
-int HlslParseContext::addFlattenedMember(const TSourceLoc& loc,
- const TVariable& variable, const TType& type, TFlattenData& flattenData,
- const TString& memberName, bool track)
+int HlslParseContext::addFlattenedMember(const TVariable& variable, const TType& type, TFlattenData& flattenData,
+ const TString& memberName, bool linkage,
+ const TQualifier& outerQualifier,
+ const TArraySizes* builtInArraySizes)
{
- if (isFinalFlattening(type)) {
+ if (!shouldFlatten(type, outerQualifier.storage, false)) {
// This is as far as we flatten. Insert the variable.
TVariable* memberVariable = makeInternalVariable(memberName, type);
mergeQualifiers(memberVariable->getWritableType().getQualifier(), variable.getType().getQualifier());
@@ -1144,16 +1240,28 @@ int HlslParseContext::addFlattenedMember(const TSourceLoc& loc,
if (flattenData.nextBinding != TQualifier::layoutBindingEnd)
memberVariable->getWritableType().getQualifier().layoutBinding = flattenData.nextBinding++;
+ if (memberVariable->getType().isBuiltIn()) {
+ // inherited locations are nonsensical for built-ins (TODO: what if semantic had a number)
+ memberVariable->getWritableType().getQualifier().layoutLocation = TQualifier::layoutLocationEnd;
+ } else {
+ // inherited locations must be auto bumped, not replicated
+ if (flattenData.nextLocation != TQualifier::layoutLocationEnd) {
+ memberVariable->getWritableType().getQualifier().layoutLocation = flattenData.nextLocation;
+ flattenData.nextLocation += intermediate.computeTypeLocationSize(memberVariable->getType());
+ nextOutLocation = std::max(nextOutLocation, flattenData.nextLocation);
+ }
+ }
+
flattenData.offsets.push_back(static_cast<int>(flattenData.members.size()));
flattenData.members.push_back(memberVariable);
- if (track)
+ if (linkage)
trackLinkage(*memberVariable);
- return static_cast<int>(flattenData.offsets.size())-1; // location of the member reference
+ return static_cast<int>(flattenData.offsets.size()) - 1; // location of the member reference
} else {
// Further recursion required
- return flatten(loc, variable, type, flattenData, memberName);
+ return flatten(variable, type, flattenData, memberName, linkage, outerQualifier, builtInArraySizes);
}
}
@@ -1161,8 +1269,10 @@ int HlslParseContext::addFlattenedMember(const TSourceLoc& loc,
// equivalent set of individual variables.
//
// Assumes shouldFlatten() or equivalent was called first.
-int HlslParseContext::flattenStruct(const TSourceLoc& loc, const TVariable& variable, const TType& type,
- TFlattenData& flattenData, TString name)
+int HlslParseContext::flattenStruct(const TVariable& variable, const TType& type,
+ TFlattenData& flattenData, TString name, bool linkage,
+ const TQualifier& outerQualifier,
+ const TArraySizes* builtInArraySizes)
{
assert(type.isStruct());
@@ -1170,15 +1280,22 @@ int HlslParseContext::flattenStruct(const TSourceLoc& loc, const TVariable& vari
// Reserve space for this tree level.
int start = static_cast<int>(flattenData.offsets.size());
- int pos = start;
+ int pos = start;
flattenData.offsets.resize(int(pos + members.size()), -1);
for (int member = 0; member < (int)members.size(); ++member) {
TType& dereferencedType = *members[member].type;
- const TString memberName = name + (name.empty() ? "" : ".") + dereferencedType.getFieldName();
-
- const int mpos = addFlattenedMember(loc, variable, dereferencedType, flattenData, memberName, false);
- flattenData.offsets[pos++] = mpos;
+ if (dereferencedType.isBuiltIn())
+ splitBuiltIn(variable.getName(), dereferencedType, builtInArraySizes, outerQualifier);
+ else {
+ const int mpos = addFlattenedMember(variable, dereferencedType, flattenData,
+ name + "." + dereferencedType.getFieldName(),
+ linkage, outerQualifier,
+ builtInArraySizes == nullptr && dereferencedType.isArray()
+ ? &dereferencedType.getArraySizes()
+ : builtInArraySizes);
+ flattenData.offsets[pos++] = mpos;
+ }
}
return start;
@@ -1188,13 +1305,11 @@ int HlslParseContext::flattenStruct(const TSourceLoc& loc, const TVariable& vari
// equivalent set of individual variables.
//
// Assumes shouldFlatten() or equivalent was called first.
-int HlslParseContext::flattenArray(const TSourceLoc& loc, const TVariable& variable, const TType& type,
- TFlattenData& flattenData, TString name)
+int HlslParseContext::flattenArray(const TVariable& variable, const TType& type,
+ TFlattenData& flattenData, TString name, bool linkage,
+ const TQualifier& outerQualifier)
{
- assert(type.isArray());
-
- if (type.isImplicitlySizedArray())
- error(loc, "cannot flatten implicitly sized array", variable.getName().c_str(), "");
+ assert(type.isArray() && !type.isImplicitlySizedArray());
const int size = type.getOuterArraySize();
const TType dereferencedType(type, 0);
@@ -1210,8 +1325,9 @@ int HlslParseContext::flattenArray(const TSourceLoc& loc, const TVariable& varia
for (int element=0; element < size; ++element) {
char elementNumBuf[20]; // sufficient for MAXINT
snprintf(elementNumBuf, sizeof(elementNumBuf)-1, "[%d]", element);
- const int mpos = addFlattenedMember(loc, variable, dereferencedType, flattenData,
- name + elementNumBuf, true);
+ const int mpos = addFlattenedMember(variable, dereferencedType, flattenData,
+ name + elementNumBuf, linkage, outerQualifier,
+ type.getArraySizes());
flattenData.offsets[pos++] = mpos;
}
@@ -1223,185 +1339,208 @@ int HlslParseContext::flattenArray(const TSourceLoc& loc, const TVariable& varia
bool HlslParseContext::wasFlattened(const TIntermTyped* node) const
{
return node != nullptr && node->getAsSymbolNode() != nullptr &&
- wasFlattened(node->getAsSymbolNode()->getId());
+ wasFlattened(node->getAsSymbolNode()->getId());
}
// Return true if we have split this structure
bool HlslParseContext::wasSplit(const TIntermTyped* node) const
{
return node != nullptr && node->getAsSymbolNode() != nullptr &&
- wasSplit(node->getAsSymbolNode()->getId());
+ wasSplit(node->getAsSymbolNode()->getId());
}
// Turn an access into an aggregate that was flattened to instead be
// an access to the individual variable the member was flattened to.
-// Assumes shouldFlatten() or equivalent was called first.
+// Assumes wasFlattened() or equivalent was called first.
TIntermTyped* HlslParseContext::flattenAccess(TIntermTyped* base, int member)
{
const TType dereferencedType(base->getType(), member); // dereferenced type
-
const TIntermSymbol& symbolNode = *base->getAsSymbolNode();
+ TIntermTyped* flattened = flattenAccess(symbolNode.getId(), member, base->getQualifier().storage,
+ dereferencedType, symbolNode.getFlattenSubset());
- const auto flattenData = flattenMap.find(symbolNode.getId());
+ return flattened ? flattened : base;
+}
+TIntermTyped* HlslParseContext::flattenAccess(int uniqueId, int member, TStorageQualifier outerStorage,
+ const TType& dereferencedType, int subset)
+{
+ const auto flattenData = flattenMap.find(uniqueId);
if (flattenData == flattenMap.end())
- return base;
+ return nullptr;
// Calculate new cumulative offset from the packed tree
- flattenOffset.back() = flattenData->second.offsets[flattenOffset.back() + member];
+ int newSubset = flattenData->second.offsets[subset >= 0 ? subset + member : member];
- if (isFinalFlattening(dereferencedType)) {
+ TIntermSymbol* subsetSymbol;
+ if (!shouldFlatten(dereferencedType, outerStorage, false)) {
// Finished flattening: create symbol for variable
- member = flattenData->second.offsets[flattenOffset.back()];
+ member = flattenData->second.offsets[newSubset];
const TVariable* memberVariable = flattenData->second.members[member];
- return intermediate.addSymbol(*memberVariable);
+ subsetSymbol = intermediate.addSymbol(*memberVariable);
+ subsetSymbol->setFlattenSubset(-1);
} else {
+
// If this is not the final flattening, accumulate the position and return
// an object of the partially dereferenced type.
- return new TIntermSymbol(symbolNode.getId(), "flattenShadow", dereferencedType);
+ subsetSymbol = new TIntermSymbol(uniqueId, "flattenShadow", dereferencedType);
+ subsetSymbol->setFlattenSubset(newSubset);
}
+
+ return subsetSymbol;
}
-// Find and return the split IO TVariable for id, or nullptr if none.
-TVariable* HlslParseContext::getSplitIoVar(int id) const
+// For finding where the first leaf is in a subtree of a multi-level aggregate
+// that is just getting a subset assigned. Follows the same logic as flattenAccess,
+// but logically going down the "left-most" tree branch each step of the way.
+//
+// Returns the offset into the first leaf of the subset.
+int HlslParseContext::findSubtreeOffset(const TIntermNode& node) const
{
- const auto splitIoVar = splitIoVars.find(id);
+ const TIntermSymbol* sym = node.getAsSymbolNode();
+ if (sym == nullptr)
+ return 0;
+ if (!sym->isArray() && !sym->isStruct())
+ return 0;
+ int subset = sym->getFlattenSubset();
+ if (subset == -1)
+ return 0;
- if (splitIoVar == splitIoVars.end())
- return nullptr;
+ // Getting this far means a partial aggregate is identified by the flatten subset.
+ // Find the first leaf of the subset.
- return splitIoVar->second;
-}
+ const auto flattenData = flattenMap.find(sym->getId());
+ if (flattenData == flattenMap.end())
+ return 0;
-// Find and return the split IO TVariable for variable, or nullptr if none.
-TVariable* HlslParseContext::getSplitIoVar(const TVariable* var) const
-{
- if (var == nullptr)
- return nullptr;
+ return findSubtreeOffset(sym->getType(), subset, flattenData->second.offsets);
- return getSplitIoVar(var->getUniqueId());
+ do {
+ subset = flattenData->second.offsets[subset];
+ } while (true);
}
-
-// Find and return the split IO TVariable for symbol in this node, or nullptr if none.
-TVariable* HlslParseContext::getSplitIoVar(const TIntermTyped* node) const
+// Recursively do the desent
+int HlslParseContext::findSubtreeOffset(const TType& type, int subset, const TVector<int>& offsets) const
{
- if (node == nullptr)
- return nullptr;
-
- const TIntermSymbol* symbolNode = node->getAsSymbolNode();
+ if (!type.isArray() && !type.isStruct())
+ return offsets[subset];
+ TType derefType(type, 0);
+ return findSubtreeOffset(derefType, offsets[subset], offsets);
+};
- if (symbolNode == nullptr)
+// Find and return the split IO TVariable for id, or nullptr if none.
+TVariable* HlslParseContext::getSplitNonIoVar(int id) const
+{
+ const auto splitNonIoVar = splitNonIoVars.find(id);
+ if (splitNonIoVar == splitNonIoVars.end())
return nullptr;
- return getSplitIoVar(symbolNode->getId());
+ return splitNonIoVar->second;
}
-// Remember the index used to dereference into this structure, in case it has to be moved to a
-// split-off builtin IO member.
-void HlslParseContext::splitAccessArray(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index)
+// Pass through to base class after remembering built-in mappings.
+void HlslParseContext::trackLinkage(TSymbol& symbol)
{
- const TVariable* splitIoVar = getSplitIoVar(base);
-
- // Not a split structure
- if (splitIoVar == nullptr)
- return;
+ TBuiltInVariable biType = symbol.getType().getQualifier().builtIn;
- if (builtInIoBase) {
- error(loc, "only one array dimension supported for builtIn IO variable", "", "");
- return;
- }
+ if (biType != EbvNone)
+ builtInTessLinkageSymbols[biType] = symbol.clone();
- builtInIoBase = base;
- builtInIoIndex = index;
+ TParseContextBase::trackLinkage(symbol);
}
-// Turn an access into an struct that was split to instead be an
-// access to either the modified structure, or a direct reference to
-// one of the split member variables.
-TIntermTyped* HlslParseContext::splitAccessStruct(const TSourceLoc& loc, TIntermTyped*& base, int& member)
-{
- // nothing to do
- if (base == nullptr)
- return nullptr;
-
- // We have a pending bracket reference to an outer struct that we may want to move to an inner member.
- if (builtInIoBase)
- base = builtInIoBase;
- const TVariable* splitIoVar = getSplitIoVar(base);
-
- if (splitIoVar == nullptr)
- return nullptr;
-
- const TTypeList& members = *base->getType().getStruct();
+// Returns true if the built-in is a clip or cull distance variable.
+bool HlslParseContext::isClipOrCullDistance(TBuiltInVariable builtIn)
+{
+ return builtIn == EbvClipDistance || builtIn == EbvCullDistance;
+}
- const TType& memberType = *members[member].type;
+// Some types require fixed array sizes in SPIR-V, but can be scalars or
+// arrays of sizes SPIR-V doesn't allow. For example, tessellation factors.
+// This creates the right size. A conversion is performed when the internal
+// type is copied to or from the external type. This corrects the externally
+// facing input or output type to abide downstream semantics.
+void HlslParseContext::fixBuiltInIoType(TType& type)
+{
+ int requiredArraySize = 0;
- if (memberType.isBuiltInInterstageIO(language)) {
- // It's one of the interstage IO variables we split off.
- TIntermTyped* builtIn = intermediate.addSymbol(*interstageBuiltInIo[tInterstageIoData(memberType, base->getType())], loc);
+ switch (type.getQualifier().builtIn) {
+ case EbvTessLevelOuter: requiredArraySize = 4; break;
+ case EbvTessLevelInner: requiredArraySize = 2; break;
- // If there's an array reference to an outer split struct, we re-apply it here.
- if (builtInIoIndex != nullptr) {
- if (builtInIoIndex->getQualifier().storage == EvqConst)
- builtIn = intermediate.addIndex(EOpIndexDirect, builtIn, builtInIoIndex, loc);
- else
- builtIn = intermediate.addIndex(EOpIndexIndirect, builtIn, builtInIoIndex, loc);
+ case EbvTessCoord:
+ {
+ // tesscoord is always a vec3 for the IO variable, no matter the shader's
+ // declared vector size.
+ TType tessCoordType(type.getBasicType(), type.getQualifier().storage, 3);
- builtIn->setType(memberType);
+ tessCoordType.getQualifier() = type.getQualifier();
+ type.shallowCopy(tessCoordType);
- builtInIoIndex = nullptr;
- builtInIoBase = nullptr;
+ break;
}
+ default:
+ if (isClipOrCullDistance(type)) {
+ const int loc = type.getQualifier().layoutLocation;
- return builtIn;
- } else {
- // It's not an IO variable. Find the equivalent index into the new variable.
- base = intermediate.addSymbol(*splitIoVar, loc);
-
- int newMember = 0;
- for (int m=0; m<member; ++m)
- if (!members[m].type->isBuiltInInterstageIO(language))
- ++newMember;
-
- member = newMember;
+ if (type.getQualifier().builtIn == EbvClipDistance) {
+ if (type.getQualifier().storage == EvqVaryingIn)
+ clipSemanticNSizeIn[loc] = type.getVectorSize();
+ else
+ clipSemanticNSizeOut[loc] = type.getVectorSize();
+ } else {
+ if (type.getQualifier().storage == EvqVaryingIn)
+ cullSemanticNSizeIn[loc] = type.getVectorSize();
+ else
+ cullSemanticNSizeOut[loc] = type.getVectorSize();
+ }
+ }
- return nullptr;
+ return;
}
-}
-
-// Pass through to base class after remembering builtin mappings.
-void HlslParseContext::trackLinkage(TSymbol& symbol)
-{
- TBuiltInVariable biType = symbol.getType().getQualifier().builtIn;
- if (biType != EbvNone)
- builtInLinkageSymbols[biType] = symbol.clone();
- TParseContextBase::trackLinkage(symbol);
+ // Alter or set array size as needed.
+ if (requiredArraySize > 0) {
+ if (!type.isArray() || type.getOuterArraySize() != requiredArraySize) {
+ TArraySizes arraySizes;
+ arraySizes.addInnerSize(requiredArraySize);
+ type.newArraySizes(arraySizes);
+ }
+ }
}
-
// Variables that correspond to the user-interface in and out of a stage
-// (not the built-in interface) are assigned locations and
-// registered as a linkage node (part of the stage's external interface).
-//
+// (not the built-in interface) are
+// - assigned locations
+// - registered as a linkage node (part of the stage's external interface).
// Assumes it is called in the order in which locations should be assigned.
-void HlslParseContext::assignLocations(TVariable& variable)
+void HlslParseContext::assignToInterface(TVariable& variable)
{
const auto assignLocation = [&](TVariable& variable) {
- const TQualifier& qualifier = variable.getType().getQualifier();
- if (qualifier.storage == EvqVaryingIn || qualifier.storage == EvqVaryingOut) {
- if (qualifier.builtIn == EbvNone) {
- if (qualifier.storage == EvqVaryingIn) {
- variable.getWritableType().getQualifier().layoutLocation = nextInLocation;
- nextInLocation += intermediate.computeTypeLocationSize(variable.getType());
- } else {
- variable.getWritableType().getQualifier().layoutLocation = nextOutLocation;
- nextOutLocation += intermediate.computeTypeLocationSize(variable.getType());
+ TType& type = variable.getWritableType();
+ if (!type.isStruct() || type.getStruct()->size() > 0) {
+ TQualifier& qualifier = type.getQualifier();
+ if (qualifier.storage == EvqVaryingIn || qualifier.storage == EvqVaryingOut) {
+ if (qualifier.builtIn == EbvNone && !qualifier.hasLocation()) {
+ // Strip off the outer array dimension for those having an extra one.
+ int size;
+ if (type.isArray() && qualifier.isArrayedIo(language)) {
+ TType elementType(type, 0);
+ size = intermediate.computeTypeLocationSize(elementType);
+ } else
+ size = intermediate.computeTypeLocationSize(type);
+
+ if (qualifier.storage == EvqVaryingIn) {
+ variable.getWritableType().getQualifier().layoutLocation = nextInLocation;
+ nextInLocation += size;
+ } else {
+ variable.getWritableType().getQualifier().layoutLocation = nextOutLocation;
+ nextOutLocation += size;
+ }
}
+ trackLinkage(variable);
}
-
- trackLinkage(variable);
}
};
@@ -1410,7 +1549,7 @@ void HlslParseContext::assignLocations(TVariable& variable)
for (auto member = memberList.begin(); member != memberList.end(); ++member)
assignLocation(**member);
} else if (wasSplit(variable.getUniqueId())) {
- TVariable* splitIoVar = getSplitIoVar(&variable);
+ TVariable* splitIoVar = getSplitNonIoVar(variable.getUniqueId());
assignLocation(*splitIoVar);
} else {
assignLocation(variable);
@@ -1451,30 +1590,27 @@ void HlslParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFunction
error(loc, "function name is redeclaration of existing name", function.getName().c_str(), "");
}
-// Add interstage IO variables to the linkage in canonical order.
-void HlslParseContext::addInterstageIoToLinkage()
+// For struct buffers with counters, we must pass the counter buffer as hidden parameter.
+// This adds the hidden parameter to the parameter list in 'paramNodes' if needed.
+// Otherwise, it's a no-op
+void HlslParseContext::addStructBufferHiddenCounterParam(const TSourceLoc& loc, TParameter& param,
+ TIntermAggregate*& paramNodes)
{
- TSourceLoc loc;
- loc.init();
-
- std::vector<tInterstageIoData> io;
- io.reserve(interstageBuiltInIo.size());
+ if (! hasStructBuffCounter(*param.type))
+ return;
- for (auto ioVar = interstageBuiltInIo.begin(); ioVar != interstageBuiltInIo.end(); ++ioVar)
- io.push_back(ioVar->first);
+ const TString counterBlockName(getStructBuffCounterName(*param.name));
- // Our canonical order is the TBuiltInVariable numeric order.
- std::sort(io.begin(), io.end());
+ TType counterType;
+ counterBufferType(loc, counterType);
+ TVariable *variable = makeInternalVariable(counterBlockName, counterType);
- // We have to (potentially) track two IO blocks, one in, one out. E.g, a GS may have a
- // PerVertex block in both directions, possibly with different members.
- for (int idx = 0; idx < int(io.size()); ++idx) {
- TVariable* var = interstageBuiltInIo[io[idx]];
+ if (! symbolTable.insert(*variable))
+ error(loc, "redefinition", variable->getName().c_str(), "");
- // Add the loose interstage IO to the linkage
- if (var->getType().isLooseAndBuiltIn(language))
- trackLinkage(*var);
- }
+ paramNodes = intermediate.growAggregate(paramNodes,
+ intermediate.addSymbol(*variable, loc),
+ loc);
}
//
@@ -1484,13 +1620,14 @@ void HlslParseContext::addInterstageIoToLinkage()
// Returns an aggregate of parameter-symbol nodes.
//
TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& loc, TFunction& function,
- const TAttributeMap& attributes, TIntermNode*& entryPointTree)
+ const TAttributeMap& attributes,
+ TIntermNode*& entryPointTree)
{
currentCaller = function.getMangledName();
TSymbol* symbol = symbolTable.find(function.getMangledName());
TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
- if (! prevDec)
+ if (prevDec == nullptr)
error(loc, "can't find function", function.getName().c_str(), "");
// Note: 'prevDec' could be 'function' if this is the first time we've seen function
// as it would have just been put in the symbol table. Otherwise, we're looking up
@@ -1538,13 +1675,33 @@ TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& l
symbolTable.makeInternalVariable(*variable);
pushImplicitThis(variable);
}
+
// Insert the parameters with name in the symbol table.
if (! symbolTable.insert(*variable))
error(loc, "redefinition", variable->getName().c_str(), "");
- // Add the parameter to the AST
- paramNodes = intermediate.growAggregate(paramNodes,
- intermediate.addSymbol(*variable, loc),
- loc);
+
+ // Add parameters to the AST list.
+ if (shouldFlatten(variable->getType(), variable->getType().getQualifier().storage, true)) {
+ // Expand the AST parameter nodes (but not the name mangling or symbol table view)
+ // for structures that need to be flattened.
+ flatten(*variable, false);
+ const TTypeList* structure = variable->getType().getStruct();
+ for (int mem = 0; mem < (int)structure->size(); ++mem) {
+ paramNodes = intermediate.growAggregate(paramNodes,
+ flattenAccess(variable->getUniqueId(), mem,
+ variable->getType().getQualifier().storage,
+ *(*structure)[mem].type),
+ loc);
+ }
+ } else {
+ // Add the parameter to the AST
+ paramNodes = intermediate.growAggregate(paramNodes,
+ intermediate.addSymbol(*variable, loc),
+ loc);
+ }
+
+ // Add hidden AST parameter for struct buffer counters, if needed.
+ addStructBufferHiddenCounterParam(loc, param, paramNodes);
} else
paramNodes = intermediate.growAggregate(paramNodes, intermediate.addSymbol(*param.type, loc), loc);
}
@@ -1559,48 +1716,9 @@ TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& l
return paramNodes;
}
-//
-// Do all special handling for the entry point, including wrapping
-// the shader's entry point with the official entry point that will call it.
-//
-// The following:
-//
-// retType shaderEntryPoint(args...) // shader declared entry point
-// { body }
-//
-// Becomes
-//
-// out retType ret;
-// in iargs<that are input>...;
-// out oargs<that are output> ...;
-//
-// void shaderEntryPoint() // synthesized, but official, entry point
-// {
-// args<that are input> = iargs...;
-// ret = @shaderEntryPoint(args...);
-// oargs = args<that are output>...;
-// }
-//
-// The symbol table will still map the original entry point name to the
-// the modified function and it's new name:
-//
-// symbol table: shaderEntryPoint -> @shaderEntryPoint
-//
-// Returns nullptr if no entry-point tree was built, otherwise, returns
-// a subtree that creates the entry point.
-//
-TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunction& userFunction, const TAttributeMap& attributes)
+// Handle all [attrib] attribute for the shader entry point
+void HlslParseContext::handleEntryPointAttributes(const TSourceLoc& loc, const TAttributeMap& attributes)
{
- // if we aren't in the entry point, fix the IO as such and exit
- if (userFunction.getName().compare(intermediate.getEntryPointName().c_str()) != 0) {
- remapNonEntryPointIO(userFunction);
- return nullptr;
- }
-
- entryPointFunction = &userFunction; // needed in finish()
-
- // entry point logic...
-
// Handle entry-point function attributes
const TIntermAggregate* numThreads = attributes[EatNumThreads];
if (numThreads != nullptr) {
@@ -1611,35 +1729,33 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
}
// MaxVertexCount
- const TIntermAggregate* maxVertexCount = attributes[EatMaxVertexCount];
- if (maxVertexCount != nullptr) {
- if (! intermediate.setVertices(maxVertexCount->getSequence()[0]->getAsConstantUnion()->getConstArray()[0].getIConst())) {
- error(loc, "cannot change previously set maxvertexcount attribute", "", "");
+ if (attributes.contains(EatMaxVertexCount)) {
+ int maxVertexCount;
+
+ if (! attributes.getInt(EatMaxVertexCount, maxVertexCount)) {
+ error(loc, "invalid maxvertexcount", "", "");
+ } else {
+ if (! intermediate.setVertices(maxVertexCount))
+ error(loc, "cannot change previously set maxvertexcount attribute", "", "");
}
}
// Handle [patchconstantfunction("...")]
- const TIntermAggregate* pcfAttr = attributes[EatPatchConstantFunc];
- if (pcfAttr != nullptr) {
- const TConstUnion& pcfName = pcfAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
-
- if (pcfName.getType() != EbtString) {
+ if (attributes.contains(EatPatchConstantFunc)) {
+ TString pcfName;
+ if (! attributes.getString(EatPatchConstantFunc, pcfName, 0, false)) {
error(loc, "invalid patch constant function", "", "");
} else {
- patchConstantFunctionName = *pcfName.getSConst();
+ patchConstantFunctionName = pcfName;
}
}
// Handle [domain("...")]
- const TIntermAggregate* domainAttr = attributes[EatDomain];
- if (domainAttr != nullptr) {
- const TConstUnion& domainType = domainAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
- if (domainType.getType() != EbtString) {
+ if (attributes.contains(EatDomain)) {
+ TString domainStr;
+ if (! attributes.getString(EatDomain, domainStr)) {
error(loc, "invalid domain", "", "");
} else {
- TString domainStr = *domainType.getSConst();
- std::transform(domainStr.begin(), domainStr.end(), domainStr.begin(), ::tolower);
-
TLayoutGeometry domain = ElgNone;
if (domainStr == "tri") {
@@ -1652,54 +1768,56 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
error(loc, "unsupported domain type", domainStr.c_str(), "");
}
- if (! intermediate.setInputPrimitive(domain)) {
- error(loc, "cannot change previously set domain", TQualifier::getGeometryString(domain), "");
+ if (language == EShLangTessEvaluation) {
+ if (! intermediate.setInputPrimitive(domain))
+ error(loc, "cannot change previously set domain", TQualifier::getGeometryString(domain), "");
+ } else {
+ if (! intermediate.setOutputPrimitive(domain))
+ error(loc, "cannot change previously set domain", TQualifier::getGeometryString(domain), "");
}
}
}
- // Handle [outputtoplogy("...")]
- const TIntermAggregate* topologyAttr = attributes[EatOutputTopology];
- if (topologyAttr != nullptr) {
- const TConstUnion& topoType = topologyAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
- if (topoType.getType() != EbtString) {
- error(loc, "invalid outputtoplogy", "", "");
+ // Handle [outputtopology("...")]
+ if (attributes.contains(EatOutputTopology)) {
+ TString topologyStr;
+ if (! attributes.getString(EatOutputTopology, topologyStr)) {
+ error(loc, "invalid outputtopology", "", "");
} else {
- TString topologyStr = *topoType.getSConst();
- std::transform(topologyStr.begin(), topologyStr.end(), topologyStr.begin(), ::tolower);
+ TVertexOrder vertexOrder = EvoNone;
+ TLayoutGeometry primitive = ElgNone;
- TVertexOrder topology = EvoNone;
-
if (topologyStr == "point") {
- topology = EvoNone;
+ intermediate.setPointMode();
} else if (topologyStr == "line") {
- topology = EvoNone;
+ primitive = ElgIsolines;
} else if (topologyStr == "triangle_cw") {
- topology = EvoCw;
+ vertexOrder = EvoCw;
+ primitive = ElgTriangles;
} else if (topologyStr == "triangle_ccw") {
- topology = EvoCcw;
+ vertexOrder = EvoCcw;
+ primitive = ElgTriangles;
} else {
- error(loc, "unsupported outputtoplogy type", topologyStr.c_str(), "");
+ error(loc, "unsupported outputtopology type", topologyStr.c_str(), "");
}
- if (topology != EvoNone) {
- if (! intermediate.setVertexOrder(topology)) {
- error(loc, "cannot change previously set outputtopology", TQualifier::getVertexOrderString(topology), "");
+ if (vertexOrder != EvoNone) {
+ if (! intermediate.setVertexOrder(vertexOrder)) {
+ error(loc, "cannot change previously set outputtopology",
+ TQualifier::getVertexOrderString(vertexOrder), "");
}
}
+ if (primitive != ElgNone)
+ intermediate.setOutputPrimitive(primitive);
}
}
// Handle [partitioning("...")]
- const TIntermAggregate* partitionAttr = attributes[EatPartitioning];
- if (partitionAttr != nullptr) {
- const TConstUnion& partType = partitionAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
- if (partType.getType() != EbtString) {
+ if (attributes.contains(EatPartitioning)) {
+ TString partitionStr;
+ if (! attributes.getString(EatPartitioning, partitionStr)) {
error(loc, "invalid partitioning", "", "");
} else {
- TString partitionStr = *partType.getSConst();
- std::transform(partitionStr.begin(), partitionStr.end(), partitionStr.begin(), ::tolower);
-
TVertexSpacing partitioning = EvsNone;
if (partitionStr == "integer") {
@@ -1714,23 +1832,112 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
}
if (! intermediate.setVertexSpacing(partitioning))
- error(loc, "cannot change previously set partitioning", TQualifier::getVertexSpacingString(partitioning), "");
+ error(loc, "cannot change previously set partitioning",
+ TQualifier::getVertexSpacingString(partitioning), "");
}
}
// Handle [outputcontrolpoints("...")]
- const TIntermAggregate* outputControlPoints = attributes[EatOutputControlPoints];
- if (outputControlPoints != nullptr) {
- const TConstUnion& ctrlPointConst = outputControlPoints->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
- if (ctrlPointConst.getType() != EbtInt) {
+ if (attributes.contains(EatOutputControlPoints)) {
+ int ctrlPoints;
+ if (! attributes.getInt(EatOutputControlPoints, ctrlPoints)) {
error(loc, "invalid outputcontrolpoints", "", "");
} else {
- const int ctrlPoints = ctrlPointConst.getIConst();
if (! intermediate.setVertices(ctrlPoints)) {
error(loc, "cannot change previously set outputcontrolpoints attribute", "", "");
}
}
}
+}
+
+// Update the given type with any type-like attribute information in the
+// attributes.
+void HlslParseContext::transferTypeAttributes(const TAttributeMap& attributes, TType& type)
+{
+ // location
+ int value;
+ if (attributes.getInt(EatLocation, value))
+ type.getQualifier().layoutLocation = value;
+
+ // binding
+ if (attributes.getInt(EatBinding, value)) {
+ type.getQualifier().layoutBinding = value;
+ type.getQualifier().layoutSet = 0;
+ }
+
+ // set
+ if (attributes.getInt(EatBinding, value, 1))
+ type.getQualifier().layoutSet = value;
+
+ // global cbuffer binding
+ if (attributes.getInt(EatGlobalBinding, value))
+ globalUniformBinding = value;
+
+ // global cbuffer binding
+ if (attributes.getInt(EatGlobalBinding, value, 1))
+ globalUniformSet = value;
+
+ // input attachment
+ if (attributes.getInt(EatInputAttachment, value))
+ type.getQualifier().layoutAttachment = value;
+}
+
+//
+// Do all special handling for the entry point, including wrapping
+// the shader's entry point with the official entry point that will call it.
+//
+// The following:
+//
+// retType shaderEntryPoint(args...) // shader declared entry point
+// { body }
+//
+// Becomes
+//
+// out retType ret;
+// in iargs<that are input>...;
+// out oargs<that are output> ...;
+//
+// void shaderEntryPoint() // synthesized, but official, entry point
+// {
+// args<that are input> = iargs...;
+// ret = @shaderEntryPoint(args...);
+// oargs = args<that are output>...;
+// }
+// retType @shaderEntryPoint(args...)
+// { body }
+//
+// The symbol table will still map the original entry point name to the
+// the modified function and its new name:
+//
+// symbol table: shaderEntryPoint -> @shaderEntryPoint
+//
+// Returns nullptr if no entry-point tree was built, otherwise, returns
+// a subtree that creates the entry point.
+//
+TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunction& userFunction,
+ const TAttributeMap& attributes)
+{
+ // Return true if this is a tessellation patch constant function input to a domain shader.
+ const auto isDsPcfInput = [this](const TType& type) {
+ return language == EShLangTessEvaluation &&
+ type.contains([](const TType* t) {
+ return t->getQualifier().builtIn == EbvTessLevelOuter ||
+ t->getQualifier().builtIn == EbvTessLevelInner;
+ });
+ };
+
+ // if we aren't in the entry point, fix the IO as such and exit
+ if (userFunction.getName().compare(intermediate.getEntryPointName().c_str()) != 0) {
+ remapNonEntryPointIO(userFunction);
+ return nullptr;
+ }
+
+ entryPointFunction = &userFunction; // needed in finish()
+
+ // Handle entry point attributes
+ handleEntryPointAttributes(loc, attributes);
+
+ // entry point logic...
// Move parameters and return value to shader in/out
TVariable* entryPointOutput; // gets created in remapEntryPointIO
@@ -1741,24 +1948,41 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
// Further this return/in/out transform by flattening, splitting, and assigning locations
const auto makeVariableInOut = [&](TVariable& variable) {
if (variable.getType().isStruct()) {
- const TStorageQualifier qualifier = variable.getType().getQualifier().storage;
- // struct inputs to the vertex stage and outputs from the fragment stage must be flattened
- if ((language == EShLangVertex && qualifier == EvqVaryingIn) ||
- (language == EShLangFragment && qualifier == EvqVaryingOut))
- flatten(loc, variable);
- // Mixture of IO and non-IO must be split
- else if (variable.getType().containsBuiltInInterstageIO(language))
- split(variable);
- }
- assignLocations(variable);
+ if (variable.getType().getQualifier().isArrayedIo(language)) {
+ if (variable.getType().containsBuiltIn())
+ split(variable);
+ } else if (shouldFlatten(variable.getType(), EvqVaryingIn /* not assigned yet, but close enough */, true))
+ flatten(variable, false /* don't track linkage here, it will be tracked in assignToInterface() */);
+ }
+ // TODO: flatten arrays too
+ // TODO: flatten everything in I/O
+ // TODO: replace all split with flatten, make all paths can create flattened I/O, then split code can be removed
+
+ // For clip and cull distance, multiple output variables potentially get merged
+ // into one in assignClipCullDistance. That code in assignClipCullDistance
+ // handles the interface logic, so we avoid it here in that case.
+ if (!isClipOrCullDistance(variable.getType()))
+ assignToInterface(variable);
};
- if (entryPointOutput)
+ if (entryPointOutput != nullptr)
makeVariableInOut(*entryPointOutput);
for (auto it = inputs.begin(); it != inputs.end(); ++it)
- makeVariableInOut(*(*it));
+ if (!isDsPcfInput((*it)->getType())) // wait until the end for PCF input (see comment below)
+ makeVariableInOut(*(*it));
for (auto it = outputs.begin(); it != outputs.end(); ++it)
makeVariableInOut(*(*it));
+ // In the domain shader, PCF input must be at the end of the linkage. That's because in the
+ // hull shader there is no ordering: the output comes from the separate PCF, which does not
+ // participate in the argument list. That is always put at the end of the HS linkage, so the
+ // input side of the DS must match. The argument may be in any position in the DS argument list
+ // however, so this ensures the linkage is built in the correct order regardless of argument order.
+ if (language == EShLangTessEvaluation) {
+ for (auto it = inputs.begin(); it != inputs.end(); ++it)
+ if (isDsPcfInput((*it)->getType()))
+ makeVariableInOut(*(*it));
+ }
+
// Synthesize the call
pushScope(); // matches the one in handleFunctionBody()
@@ -1780,10 +2004,16 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
TIntermAggregate* synthBody = new TIntermAggregate();
auto inputIt = inputs.begin();
TIntermTyped* callingArgs = nullptr;
+
for (int i = 0; i < userFunction.getParamCount(); i++) {
TParameter& param = userFunction[i];
argVars.push_back(makeInternalVariable(*param.name, *param.type));
argVars.back()->getWritableType().getQualifier().makeTemporary();
+
+ // Track the input patch, which is the only non-builtin supported by hull shader PCF.
+ if (param.getDeclaredBuiltIn() == EbvInputPatch)
+ inputPatch = argVars.back();
+
TIntermSymbol* arg = intermediate.addSymbol(*argVars.back());
handleFunctionArgument(&callee, callingArgs, arg);
if (param.type->getQualifier().isParamInput()) {
@@ -1799,20 +2029,62 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
currentCaller = userFunction.getMangledName();
// Return value
- if (entryPointOutput)
- intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign,
- intermediate.addSymbol(*entryPointOutput), callReturn));
- else
+ if (entryPointOutput) {
+ TIntermTyped* returnAssign;
+
+ // For hull shaders, the wrapped entry point return value is written to
+ // an array element as indexed by invocation ID, which we might have to make up.
+ // This is required to match SPIR-V semantics.
+ if (language == EShLangTessControl) {
+ TIntermSymbol* invocationIdSym = findTessLinkageSymbol(EbvInvocationId);
+
+ // If there is no user declared invocation ID, we must make one.
+ if (invocationIdSym == nullptr) {
+ TType invocationIdType(EbtUint, EvqIn, 1);
+ TString* invocationIdName = NewPoolTString("InvocationId");
+ invocationIdType.getQualifier().builtIn = EbvInvocationId;
+
+ TVariable* variable = makeInternalVariable(*invocationIdName, invocationIdType);
+
+ globalQualifierFix(loc, variable->getWritableType().getQualifier());
+ trackLinkage(*variable);
+
+ invocationIdSym = intermediate.addSymbol(*variable);
+ }
+
+ TIntermTyped* element = intermediate.addIndex(EOpIndexIndirect, intermediate.addSymbol(*entryPointOutput),
+ invocationIdSym, loc);
+
+ // Set the type of the array element being dereferenced
+ const TType derefElementType(entryPointOutput->getType(), 0);
+ element->setType(derefElementType);
+
+ returnAssign = handleAssign(loc, EOpAssign, element, callReturn);
+ } else {
+ returnAssign = handleAssign(loc, EOpAssign, intermediate.addSymbol(*entryPointOutput), callReturn);
+ }
+ intermediate.growAggregate(synthBody, returnAssign);
+ } else
intermediate.growAggregate(synthBody, callReturn);
// Output copies
auto outputIt = outputs.begin();
for (int i = 0; i < userFunction.getParamCount(); i++) {
TParameter& param = userFunction[i];
+
+ // GS outputs are via emit, so we do not copy them here.
if (param.type->getQualifier().isParamOutput()) {
- intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign,
- intermediate.addSymbol(**outputIt),
- intermediate.addSymbol(*argVars[i])));
+ if (param.getDeclaredBuiltIn() == EbvGsOutputStream) {
+ // GS output stream does not assign outputs here: it's the Append() method
+ // which writes to the output, probably multiple times separated by Emit.
+ // We merely remember the output to use, here.
+ gsStreamOutput = *outputIt;
+ } else {
+ intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign,
+ intermediate.addSymbol(**outputIt),
+ intermediate.addSymbol(*argVars[i])));
+ }
+
outputIt++;
}
}
@@ -1828,7 +2100,8 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
return synthFunctionDef;
}
-void HlslParseContext::handleFunctionBody(const TSourceLoc& loc, TFunction& function, TIntermNode* functionBody, TIntermNode*& node)
+void HlslParseContext::handleFunctionBody(const TSourceLoc& loc, TFunction& function, TIntermNode* functionBody,
+ TIntermNode*& node)
{
node = intermediate.growAggregate(node, functionBody);
intermediate.setAggregateOperator(node, EOpFunction, function.getType(), loc);
@@ -1848,12 +2121,63 @@ void HlslParseContext::handleFunctionBody(const TSourceLoc& loc, TFunction& func
void HlslParseContext::remapEntryPointIO(TFunction& function, TVariable*& returnValue,
TVector<TVariable*>& inputs, TVector<TVariable*>& outputs)
{
+ // We might have in input structure type with no decorations that caused it
+ // to look like an input type, yet it has (e.g.) interpolation types that
+ // must be modified that turn it into an input type.
+ // Hence, a missing ioTypeMap for 'input' might need to be synthesized.
+ const auto synthesizeEditedInput = [this](TType& type) {
+ // True if a type needs to be 'flat'
+ const auto needsFlat = [](const TType& type) {
+ return type.containsBasicType(EbtInt) ||
+ type.containsBasicType(EbtUint) ||
+ type.containsBasicType(EbtInt64) ||
+ type.containsBasicType(EbtUint64) ||
+ type.containsBasicType(EbtBool) ||
+ type.containsBasicType(EbtDouble);
+ };
+
+ if (language == EShLangFragment && needsFlat(type)) {
+ if (type.isStruct()) {
+ TTypeList* finalList = nullptr;
+ auto it = ioTypeMap.find(type.getStruct());
+ if (it == ioTypeMap.end() || it->second.input == nullptr) {
+ // Getting here means we have no input struct, but we need one.
+ auto list = new TTypeList;
+ for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) {
+ TType* newType = new TType;
+ newType->shallowCopy(*member->type);
+ TTypeLoc typeLoc = { newType, member->loc };
+ list->push_back(typeLoc);
+ }
+ // install the new input type
+ if (it == ioTypeMap.end()) {
+ tIoKinds newLists = { list, nullptr, nullptr };
+ ioTypeMap[type.getStruct()] = newLists;
+ } else
+ it->second.input = list;
+ finalList = list;
+ } else
+ finalList = it->second.input;
+ // edit for 'flat'
+ for (auto member = finalList->begin(); member != finalList->end(); ++member) {
+ if (needsFlat(*member->type)) {
+ member->type->getQualifier().clearInterpolation();
+ member->type->getQualifier().flat = true;
+ }
+ }
+ } else {
+ type.getQualifier().clearInterpolation();
+ type.getQualifier().flat = true;
+ }
+ }
+ };
+
// Do the actual work to make a type be a shader input or output variable,
// and clear the original to be non-IO (for use as a normal function parameter/return).
const auto makeIoVariable = [this](const char* name, TType& type, TStorageQualifier storage) -> TVariable* {
TVariable* ioVariable = makeInternalVariable(name, type);
clearUniformInputOutput(type.getQualifier());
- if (type.getStruct() != nullptr) {
+ if (type.isStruct()) {
auto newLists = ioTypeMap.find(ioVariable->getType().getStruct());
if (newLists != ioTypeMap.end()) {
if (storage == EvqVaryingIn && newLists->second.input)
@@ -1862,24 +2186,51 @@ void HlslParseContext::remapEntryPointIO(TFunction& function, TVariable*& return
ioVariable->getWritableType().setStruct(newLists->second.output);
}
}
- if (storage == EvqVaryingIn)
+ if (storage == EvqVaryingIn) {
correctInput(ioVariable->getWritableType().getQualifier());
- else
+ if (language == EShLangTessEvaluation)
+ if (!ioVariable->getType().isArray())
+ ioVariable->getWritableType().getQualifier().patch = true;
+ } else {
correctOutput(ioVariable->getWritableType().getQualifier());
+ }
ioVariable->getWritableType().getQualifier().storage = storage;
+
+ fixBuiltInIoType(ioVariable->getWritableType());
+
return ioVariable;
};
// return value is actually a shader-scoped output (out)
- if (function.getType().getBasicType() == EbtVoid)
+ if (function.getType().getBasicType() == EbtVoid) {
returnValue = nullptr;
- else
- returnValue = makeIoVariable("@entryPointOutput", function.getWritableType(), EvqVaryingOut);
+ } else {
+ if (language == EShLangTessControl) {
+ // tessellation evaluation in HLSL writes a per-ctrl-pt value, but it needs to be an
+ // array in SPIR-V semantics. We'll write to it indexed by invocation ID.
+
+ returnValue = makeIoVariable("@entryPointOutput", function.getWritableType(), EvqVaryingOut);
+
+ TType outputType;
+ outputType.shallowCopy(function.getType());
+
+ // vertices has necessarily already been set when handling entry point attributes.
+ TArraySizes arraySizes;
+ arraySizes.addInnerSize(intermediate.getVertices());
+ outputType.newArraySizes(arraySizes);
+
+ clearUniformInputOutput(function.getWritableType().getQualifier());
+ returnValue = makeIoVariable("@entryPointOutput", outputType, EvqVaryingOut);
+ } else {
+ returnValue = makeIoVariable("@entryPointOutput", function.getWritableType(), EvqVaryingOut);
+ }
+ }
// parameters are actually shader-scoped inputs and outputs (in or out)
for (int i = 0; i < function.getParamCount(); i++) {
TType& paramType = *function[i].type;
if (paramType.getQualifier().isParamInput()) {
+ synthesizeEditedInput(paramType);
TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingIn);
inputs.push_back(argAsGlobal);
}
@@ -1917,8 +2268,8 @@ TIntermNode* HlslParseContext::handleReturnValue(const TSourceLoc& loc, TIntermT
} else if (*currentFunctionType != value->getType()) {
value = intermediate.addConversion(EOpReturn, *currentFunctionType, value);
if (value && *currentFunctionType != value->getType())
- value = intermediate.addShapeConversion(EOpReturn, *currentFunctionType, value);
- if (value == nullptr) {
+ value = intermediate.addUniShapeConversion(EOpReturn, *currentFunctionType, value);
+ if (value == nullptr || *currentFunctionType != value->getType()) {
error(loc, "type does not match, or is not convertible to, the function's return type", "return", "");
return value;
}
@@ -1940,30 +2291,290 @@ void HlslParseContext::handleFunctionArgument(TFunction* function,
arguments = newArg;
}
+// Clip and cull distance require special handling due to a semantic mismatch. In HLSL,
+// these can be float scalar, float vector, or arrays of float scalar or float vector.
+// In SPIR-V, they are arrays of scalar floats in all cases. We must copy individual components
+// (e.g, both x and y components of a float2) out into the destination float array.
+//
+// The values are assigned to sequential members of the output array. The inner dimension
+// is vector components. The outer dimension is array elements.
+TIntermAggregate* HlslParseContext::assignClipCullDistance(const TSourceLoc& loc, TOperator op, int semanticId,
+ TIntermTyped* left, TIntermTyped* right)
+{
+ switch (language) {
+ case EShLangFragment:
+ case EShLangVertex:
+ case EShLangGeometry:
+ break;
+ default:
+ error(loc, "unimplemented: clip/cull not currently implemented for this stage", "", "");
+ return nullptr;
+ }
+
+ TVariable** clipCullVar = nullptr;
+
+ // Figure out if we are assigning to, or from, clip or cull distance.
+ const bool isOutput = isClipOrCullDistance(left->getType());
+
+ // This is the rvalue or lvalue holding the clip or cull distance.
+ TIntermTyped* clipCullNode = isOutput ? left : right;
+ // This is the value going into or out of the clip or cull distance.
+ TIntermTyped* internalNode = isOutput ? right : left;
+
+ const TBuiltInVariable builtInType = clipCullNode->getQualifier().builtIn;
+
+ decltype(clipSemanticNSizeIn)* semanticNSize = nullptr;
+
+ // Refer to either the clip or the cull distance, depending on semantic.
+ switch (builtInType) {
+ case EbvClipDistance:
+ clipCullVar = isOutput ? &clipDistanceOutput : &clipDistanceInput;
+ semanticNSize = isOutput ? &clipSemanticNSizeOut : &clipSemanticNSizeIn;
+ break;
+ case EbvCullDistance:
+ clipCullVar = isOutput ? &cullDistanceOutput : &cullDistanceInput;
+ semanticNSize = isOutput ? &cullSemanticNSizeOut : &cullSemanticNSizeIn;
+ break;
+
+ // called invalidly: we expected a clip or a cull distance.
+ // static compile time problem: should not happen.
+ default: assert(0); return nullptr;
+ }
+
+ // This is the offset in the destination array of a given semantic's data
+ std::array<int, maxClipCullRegs> semanticOffset;
+
+ // Calculate offset of variable of semantic N in destination array
+ int arrayLoc = 0;
+ int vecItems = 0;
+
+ for (int x = 0; x < maxClipCullRegs; ++x) {
+ // See if we overflowed the vec4 packing
+ if ((vecItems + (*semanticNSize)[x]) > 4) {
+ arrayLoc = (arrayLoc + 3) & (~0x3); // round up to next multiple of 4
+ vecItems = 0;
+ }
+
+ semanticOffset[x] = arrayLoc;
+ vecItems += (*semanticNSize)[x];
+ arrayLoc += (*semanticNSize)[x];
+ }
+
+
+ // It can have up to 2 array dimensions (in the case of geometry shader inputs)
+ const TArraySizes* const internalArraySizes = internalNode->getType().getArraySizes();
+ const int internalArrayDims = internalNode->getType().isArray() ? internalArraySizes->getNumDims() : 0;
+ // vector sizes:
+ const int internalVectorSize = internalNode->getType().getVectorSize();
+ // array sizes, or 1 if it's not an array:
+ const int internalInnerArraySize = (internalArrayDims > 0 ? internalArraySizes->getDimSize(internalArrayDims-1) : 1);
+ const int internalOuterArraySize = (internalArrayDims > 1 ? internalArraySizes->getDimSize(0) : 1);
+
+ // The created type may be an array of arrays, e.g, for geometry shader inputs.
+ const bool isImplicitlyArrayed = (language == EShLangGeometry && !isOutput);
+
+ // If we haven't created the output already, create it now.
+ if (*clipCullVar == nullptr) {
+ // ClipDistance and CullDistance are handled specially in the entry point input/output copy
+ // algorithm, because they may need to be unpacked from components of vectors (or a scalar)
+ // into a float array, or vice versa. Here, we make the array the right size and type,
+ // which depends on the incoming data, which has several potential dimensions:
+ // * Semantic ID
+ // * vector size
+ // * array size
+ // Of those, semantic ID and array size cannot appear simultaneously.
+ //
+ // Also to note: for implicitly arrayed forms (e.g, geometry shader inputs), we need to create two
+ // array dimensions. The shader's declaration may have one or two array dimensions. One is always
+ // the geometry's dimension.
+
+ const bool useInnerSize = internalArrayDims > 1 || !isImplicitlyArrayed;
+
+ const int requiredInnerArraySize = arrayLoc * (useInnerSize ? internalInnerArraySize : 1);
+ const int requiredOuterArraySize = (internalArrayDims > 0) ? internalArraySizes->getDimSize(0) : 1;
+
+ TType clipCullType(EbtFloat, clipCullNode->getType().getQualifier().storage, 1);
+ clipCullType.getQualifier() = clipCullNode->getType().getQualifier();
+
+ // Create required array dimension
+ TArraySizes arraySizes;
+ if (isImplicitlyArrayed)
+ arraySizes.addInnerSize(requiredOuterArraySize);
+ arraySizes.addInnerSize(requiredInnerArraySize);
+ clipCullType.newArraySizes(arraySizes);
+
+ // Obtain symbol name: we'll use that for the symbol we introduce.
+ TIntermSymbol* sym = clipCullNode->getAsSymbolNode();
+ assert(sym != nullptr);
+
+ // We are moving the semantic ID from the layout location, so it is no longer needed or
+ // desired there.
+ clipCullType.getQualifier().layoutLocation = TQualifier::layoutLocationEnd;
+
+ // Create variable and track its linkage
+ *clipCullVar = makeInternalVariable(sym->getName().c_str(), clipCullType);
+
+ trackLinkage(**clipCullVar);
+ }
+
+ // Create symbol for the clip or cull variable.
+ TIntermSymbol* clipCullSym = intermediate.addSymbol(**clipCullVar);
+
+ // vector sizes:
+ const int clipCullVectorSize = clipCullSym->getType().getVectorSize();
+
+ // array sizes, or 1 if it's not an array:
+ const TArraySizes* const clipCullArraySizes = clipCullSym->getType().getArraySizes();
+ const int clipCullOuterArraySize = isImplicitlyArrayed ? clipCullArraySizes->getDimSize(0) : 1;
+ const int clipCullInnerArraySize = clipCullArraySizes->getDimSize(isImplicitlyArrayed ? 1 : 0);
+
+ // clipCullSym has got to be an array of scalar floats, per SPIR-V semantics.
+ // fixBuiltInIoType() should have handled that upstream.
+ assert(clipCullSym->getType().isArray());
+ assert(clipCullSym->getType().getVectorSize() == 1);
+ assert(clipCullSym->getType().getBasicType() == EbtFloat);
+
+ // We may be creating multiple sub-assignments. This is an aggregate to hold them.
+ // TODO: it would be possible to be clever sometimes and avoid the sequence node if not needed.
+ TIntermAggregate* assignList = nullptr;
+
+ // Holds individual component assignments as we make them.
+ TIntermTyped* clipCullAssign = nullptr;
+
+ // If the types are homomorphic, use a simple assign. No need to mess about with
+ // individual components.
+ if (clipCullSym->getType().isArray() == internalNode->getType().isArray() &&
+ clipCullInnerArraySize == internalInnerArraySize &&
+ clipCullOuterArraySize == internalOuterArraySize &&
+ clipCullVectorSize == internalVectorSize) {
+
+ if (isOutput)
+ clipCullAssign = intermediate.addAssign(op, clipCullSym, internalNode, loc);
+ else
+ clipCullAssign = intermediate.addAssign(op, internalNode, clipCullSym, loc);
+
+ assignList = intermediate.growAggregate(assignList, clipCullAssign);
+ assignList->setOperator(EOpSequence);
+
+ return assignList;
+ }
+
+ // We are going to copy each component of the internal (per array element if indicated) to sequential
+ // array elements of the clipCullSym. This tracks the lhs element we're writing to as we go along.
+ // We may be starting in the middle - e.g, for a non-zero semantic ID calculated above.
+ int clipCullInnerArrayPos = semanticOffset[semanticId];
+ int clipCullOuterArrayPos = 0;
+
+ // Lambda to add an index to a node, set the type of the result, and return the new node.
+ const auto addIndex = [this, &loc](TIntermTyped* node, int pos) -> TIntermTyped* {
+ const TType derefType(node->getType(), 0);
+ node = intermediate.addIndex(EOpIndexDirect, node, intermediate.addConstantUnion(pos, loc), loc);
+ node->setType(derefType);
+ return node;
+ };
+
+ // Loop through every component of every element of the internal, and copy to or from the matching external.
+ for (int internalOuterArrayPos = 0; internalOuterArrayPos < internalOuterArraySize; ++internalOuterArrayPos) {
+ for (int internalInnerArrayPos = 0; internalInnerArrayPos < internalInnerArraySize; ++internalInnerArrayPos) {
+ for (int internalComponent = 0; internalComponent < internalVectorSize; ++internalComponent) {
+ // clip/cull array member to read from / write to:
+ TIntermTyped* clipCullMember = clipCullSym;
+
+ // If implicitly arrayed, there is an outer array dimension involved
+ if (isImplicitlyArrayed)
+ clipCullMember = addIndex(clipCullMember, clipCullOuterArrayPos);
+
+ // Index into proper array position for clip cull member
+ clipCullMember = addIndex(clipCullMember, clipCullInnerArrayPos++);
+
+ // if needed, start over with next outer array slice.
+ if (isImplicitlyArrayed && clipCullInnerArrayPos >= clipCullInnerArraySize) {
+ clipCullInnerArrayPos = semanticOffset[semanticId];
+ ++clipCullOuterArrayPos;
+ }
+
+ // internal member to read from / write to:
+ TIntermTyped* internalMember = internalNode;
+
+ // If internal node has outer array dimension, index appropriately.
+ if (internalArrayDims > 1)
+ internalMember = addIndex(internalMember, internalOuterArrayPos);
+
+ // If internal node has inner array dimension, index appropriately.
+ if (internalArrayDims > 0)
+ internalMember = addIndex(internalMember, internalInnerArrayPos);
+
+ // If internal node is a vector, extract the component of interest.
+ if (internalNode->getType().isVector())
+ internalMember = addIndex(internalMember, internalComponent);
+
+ // Create an assignment: output from internal to clip cull, or input from clip cull to internal.
+ if (isOutput)
+ clipCullAssign = intermediate.addAssign(op, clipCullMember, internalMember, loc);
+ else
+ clipCullAssign = intermediate.addAssign(op, internalMember, clipCullMember, loc);
+
+ // Track assignment in the sequence.
+ assignList = intermediate.growAggregate(assignList, clipCullAssign);
+ }
+ }
+ }
+
+ assert(assignList != nullptr);
+ assignList->setOperator(EOpSequence);
+
+ return assignList;
+}
+
// Some simple source assignments need to be flattened to a sequence
// of AST assignments. Catch these and flatten, otherwise, pass through
// to intermediate.addAssign().
//
// Also, assignment to matrix swizzles requires multiple component assignments,
// intercept those as well.
-TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right)
+TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left,
+ TIntermTyped* right)
{
if (left == nullptr || right == nullptr)
return nullptr;
+ // writing to opaques will require fixing transforms
+ if (left->getType().containsOpaque())
+ intermediate.setNeedsLegalization();
+
if (left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle)
return handleAssignToMatrixSwizzle(loc, op, left, right);
- const bool isSplitLeft = wasSplit(left);
- const bool isSplitRight = wasSplit(right);
+ // Return true if the given node is an index operation into a split variable.
+ const auto indexesSplit = [this](const TIntermTyped* node) -> bool {
+ const TIntermBinary* binaryNode = node->getAsBinaryNode();
+
+ if (binaryNode == nullptr)
+ return false;
+
+ return (binaryNode->getOp() == EOpIndexDirect || binaryNode->getOp() == EOpIndexIndirect) &&
+ wasSplit(binaryNode->getLeft());
+ };
+
+ const bool isSplitLeft = wasSplit(left) || indexesSplit(left);
+ const bool isSplitRight = wasSplit(right) || indexesSplit(right);
const bool isFlattenLeft = wasFlattened(left);
const bool isFlattenRight = wasFlattened(right);
- // OK to do a single assign if both are split, or both are unsplit. But if one is and the other
- // isn't, we fall back to a member-wise copy.
- if (! isFlattenLeft && ! isFlattenRight && !isSplitLeft && !isSplitRight)
+ // OK to do a single assign if neither side is split or flattened. Otherwise,
+ // fall through to a member-wise copy.
+ if (!isFlattenLeft && !isFlattenRight && !isSplitLeft && !isSplitRight) {
+ // Clip and cull distance requires more processing. See comment above assignClipCullDistance.
+ if (isClipOrCullDistance(left->getType()) || isClipOrCullDistance(right->getType())) {
+ const bool isOutput = isClipOrCullDistance(left->getType());
+
+ const int semanticId = (isOutput ? left : right)->getType().getQualifier().layoutLocation;
+ return assignClipCullDistance(loc, op, semanticId, left, right);
+ }
+
return intermediate.addAssign(op, left, right, loc);
+ }
TIntermAggregate* assignList = nullptr;
const TVector<TVariable*>* leftVariables = nullptr;
@@ -1971,7 +2582,7 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
// A temporary to store the right node's value, so we don't keep indirecting into it
// if it's not a simple symbol.
- TVariable* rhsTempVar = nullptr;
+ TVariable* rhsTempVar = nullptr;
// If the RHS is a simple symbol node, we'll copy it for each member.
TIntermSymbol* cloneSymNode = nullptr;
@@ -2008,49 +2619,68 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
TIntermTyped* noFlattenRHS = intermediate.addSymbol(*rhsTempVar, loc);
// Add this to the aggregate being built.
- assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, noFlattenRHS, right, loc), loc);
+ assignList = intermediate.growAggregate(assignList,
+ intermediate.addAssign(op, noFlattenRHS, right, loc), loc);
}
}
}
- int memberIdx = 0;
-
- // When dealing with split arrayed structures of builtins, the arrayness is moved to the extracted builtin
+ // When dealing with split arrayed structures of built-ins, the arrayness is moved to the extracted built-in
// variables, which is awkward when copying between split and unsplit structures. This variable tracks
// array indirections so they can be percolated from outer structs to inner variables.
std::vector <int> arrayElement;
- // We track the outer-most aggregate, so that we can use its storage class later.
- const TIntermTyped* outerLeft = left;
- const TIntermTyped* outerRight = right;
-
- const auto getMember = [&](bool isLeft, TIntermTyped* node, int member, TIntermTyped* splitNode, int splitMember) -> TIntermTyped * {
- TIntermTyped* subTree;
+ TStorageQualifier leftStorage = left->getType().getQualifier().storage;
+ TStorageQualifier rightStorage = right->getType().getQualifier().storage;
- const bool flattened = isLeft ? isFlattenLeft : isFlattenRight;
- const bool split = isLeft ? isSplitLeft : isSplitRight;
- const TIntermTyped* outer = isLeft ? outerLeft : outerRight;
- const TVector<TVariable*>& flatVariables = isLeft ? *leftVariables : *rightVariables;
- const TOperator op = node->getType().isArray() ? EOpIndexDirect : EOpIndexDirectStruct;
- const TType derefType(node->getType(), member);
+ int leftOffset = findSubtreeOffset(*left);
+ int rightOffset = findSubtreeOffset(*right);
- if (split && derefType.isBuiltInInterstageIO(language)) {
- // copy from interstage IO builtin if needed
- subTree = intermediate.addSymbol(*interstageBuiltInIo.find(HlslParseContext::tInterstageIoData(derefType, outer->getType()))->second);
+ const auto getMember = [&](bool isLeft, const TType& type, int member, TIntermTyped* splitNode, int splitMember,
+ bool flattened)
+ -> TIntermTyped * {
+ const bool split = isLeft ? isSplitLeft : isSplitRight;
- // Arrayness of builtIn symbols isn't handled by the normal recursion: it's been extracted and moved to the builtin.
+ TIntermTyped* subTree;
+ const TType derefType(type, member);
+ const TVariable* builtInVar = nullptr;
+ if ((flattened || split) && derefType.isBuiltIn()) {
+ auto splitPair = splitBuiltIns.find(HlslParseContext::tInterstageIoData(
+ derefType.getQualifier().builtIn,
+ isLeft ? leftStorage : rightStorage));
+ if (splitPair != splitBuiltIns.end())
+ builtInVar = splitPair->second;
+ }
+ if (builtInVar != nullptr) {
+ // copy from interstage IO built-in if needed
+ subTree = intermediate.addSymbol(*builtInVar);
+
+ // Arrayness of builtIn symbols isn't handled by the normal recursion:
+ // it's been extracted and moved to the built-in.
if (subTree->getType().isArray() && !arrayElement.empty()) {
const TType splitDerefType(subTree->getType(), arrayElement.back());
- subTree = intermediate.addIndex(EOpIndexDirect, subTree, intermediate.addConstantUnion(arrayElement.back(), loc), loc);
+ subTree = intermediate.addIndex(EOpIndexDirect, subTree,
+ intermediate.addConstantUnion(arrayElement.back(), loc), loc);
subTree->setType(splitDerefType);
}
- } else if (flattened && isFinalFlattening(derefType)) {
- subTree = intermediate.addSymbol(*flatVariables[memberIdx++]);
+ } else if (flattened && !shouldFlatten(derefType, isLeft ? leftStorage : rightStorage, false)) {
+ if (isLeft)
+ subTree = intermediate.addSymbol(*(*leftVariables)[leftOffset++]);
+ else
+ subTree = intermediate.addSymbol(*(*rightVariables)[rightOffset++]);
} else {
- const TType splitDerefType(splitNode->getType(), splitMember);
-
- subTree = intermediate.addIndex(op, splitNode, intermediate.addConstantUnion(splitMember, loc), loc);
- subTree->setType(splitDerefType);
+ // Index operator if it's an aggregate, else EOpNull
+ const TOperator accessOp = type.isArray() ? EOpIndexDirect
+ : type.isStruct() ? EOpIndexDirectStruct
+ : EOpNull;
+ if (accessOp == EOpNull) {
+ subTree = splitNode;
+ } else {
+ subTree = intermediate.addIndex(accessOp, splitNode, intermediate.addConstantUnion(splitMember, loc),
+ loc);
+ const TType splitDerefType(splitNode->getType(), splitMember);
+ subTree->setType(splitDerefType);
+ }
}
return subTree;
@@ -2058,39 +2688,55 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
// Use the proper RHS node: a new symbol from a TVariable, copy
// of an TIntermSymbol node, or sometimes the right node directly.
- right = rhsTempVar ? intermediate.addSymbol(*rhsTempVar, loc) :
- cloneSymNode ? intermediate.addSymbol(*cloneSymNode) :
+ right = rhsTempVar != nullptr ? intermediate.addSymbol(*rhsTempVar, loc) :
+ cloneSymNode != nullptr ? intermediate.addSymbol(*cloneSymNode) :
right;
// Cannot use auto here, because this is recursive, and auto can't work out the type without seeing the
// whole thing. So, we'll resort to an explicit type via std::function.
- const std::function<void(TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight)>
- traverse = [&](TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight) -> void {
+ const std::function<void(TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight,
+ bool topLevel)>
+ traverse = [&](TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight,
+ bool topLevel) -> void {
// If we get here, we are assigning to or from a whole array or struct that must be
// flattened, so have to do member-by-member assignment:
- if (left->getType().isArray()) {
- const TType dereferencedType(left->getType(), 0);
+ bool shouldFlattenSubsetLeft = isFlattenLeft && shouldFlatten(left->getType(), leftStorage, topLevel);
+ bool shouldFlattenSubsetRight = isFlattenRight && shouldFlatten(right->getType(), rightStorage, topLevel);
+
+ if ((left->getType().isArray() || right->getType().isArray()) &&
+ (shouldFlattenSubsetLeft || isSplitLeft ||
+ shouldFlattenSubsetRight || isSplitRight)) {
+ const int elementsL = left->getType().isArray() ? left->getType().getOuterArraySize() : 1;
+ const int elementsR = right->getType().isArray() ? right->getType().getOuterArraySize() : 1;
+
+ // The arrays might not be the same size,
+ // e.g., if the size has been forced for EbvTessLevelInner/Outer.
+ const int elementsToCopy = std::min(elementsL, elementsR);
// array case
- for (int element=0; element < left->getType().getOuterArraySize(); ++element) {
+ for (int element = 0; element < elementsToCopy; ++element) {
arrayElement.push_back(element);
// Add a new AST symbol node if we have a temp variable holding a complex RHS.
- TIntermTyped* subLeft = getMember(true, left, element, left, element);
- TIntermTyped* subRight = getMember(false, right, element, right, element);
+ TIntermTyped* subLeft = getMember(true, left->getType(), element, left, element,
+ shouldFlattenSubsetLeft);
+ TIntermTyped* subRight = getMember(false, right->getType(), element, right, element,
+ shouldFlattenSubsetRight);
- TIntermTyped* subSplitLeft = isSplitLeft ? getMember(true, left, element, splitLeft, element) : subLeft;
- TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right, element, splitRight, element) : subRight;
+ TIntermTyped* subSplitLeft = isSplitLeft ? getMember(true, left->getType(), element, splitLeft,
+ element, shouldFlattenSubsetLeft)
+ : subLeft;
+ TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right->getType(), element, splitRight,
+ element, shouldFlattenSubsetRight)
+ : subRight;
- if (isFinalFlattening(dereferencedType))
- assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc), loc);
- else
- traverse(subLeft, subRight, subSplitLeft, subSplitRight);
+ traverse(subLeft, subRight, subSplitLeft, subSplitRight, false);
arrayElement.pop_back();
}
- } else if (left->getType().isStruct()) {
+ } else if (left->getType().isStruct() && (shouldFlattenSubsetLeft || isSplitLeft ||
+ shouldFlattenSubsetRight || isSplitRight)) {
// struct case
const auto& membersL = *left->getType().getStruct();
const auto& membersR = *right->getType().getStruct();
@@ -2108,31 +2754,58 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
const TType& typeL = *membersL[member].type;
const TType& typeR = *membersR[member].type;
- TIntermTyped* subLeft = getMember(true, left, member, left, member);
- TIntermTyped* subRight = getMember(false, right, member, right, member);
+ TIntermTyped* subLeft = getMember(true, left->getType(), member, left, member,
+ shouldFlattenSubsetLeft);
+ TIntermTyped* subRight = getMember(false, right->getType(), member, right, member,
+ shouldFlattenSubsetRight);
// If there is no splitting, use the same values to avoid inefficiency.
- TIntermTyped* subSplitLeft = isSplitLeft ? getMember(true, left, member, splitLeft, memberL) : subLeft;
- TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right, member, splitRight, memberR) : subRight;
-
- // If this is the final flattening (no nested types below to flatten) we'll copy the member, else
- // recurse into the type hierarchy. However, if splitting the struct, that means we can copy a whole
- // subtree here IFF it does not itself contain any interstage built-in IO variables, so we only have to
- // recurse into it if there's something for splitting to do. That can save a lot of AST verbosity for
- // a bunch of memberwise copies.
- if (isFinalFlattening(typeL) || (!isFlattenLeft && !isFlattenRight &&
- !typeL.containsBuiltInInterstageIO(language) && !typeR.containsBuiltInInterstageIO(language))) {
- assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subSplitLeft, subSplitRight, loc), loc);
+ TIntermTyped* subSplitLeft = isSplitLeft ? getMember(true, left->getType(), member, splitLeft,
+ memberL, shouldFlattenSubsetLeft)
+ : subLeft;
+ TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right->getType(), member, splitRight,
+ memberR, shouldFlattenSubsetRight)
+ : subRight;
+
+ if (isClipOrCullDistance(subSplitLeft->getType()) || isClipOrCullDistance(subSplitRight->getType())) {
+ // Clip and cull distance built-in assignment is complex in its own right, and is handled in
+ // a separate function dedicated to that task. See comment above assignClipCullDistance;
+
+ const bool isOutput = isClipOrCullDistance(subSplitLeft->getType());
+
+ // Since all clip/cull semantics boil down to the same built-in type, we need to get the
+ // semantic ID from the dereferenced type's layout location, to avoid an N-1 mapping.
+ const TType derefType((isOutput ? left : right)->getType(), member);
+ const int semanticId = derefType.getQualifier().layoutLocation;
+
+ TIntermAggregate* clipCullAssign = assignClipCullDistance(loc, op, semanticId,
+ subSplitLeft, subSplitRight);
+
+ assignList = intermediate.growAggregate(assignList, clipCullAssign, loc);
+
+ } else if (!shouldFlattenSubsetLeft && !shouldFlattenSubsetRight &&
+ !typeL.containsBuiltIn() && !typeR.containsBuiltIn()) {
+ // If this is the final flattening (no nested types below to flatten)
+ // we'll copy the member, else recurse into the type hierarchy.
+ // However, if splitting the struct, that means we can copy a whole
+ // subtree here IFF it does not itself contain any interstage built-in
+ // IO variables, so we only have to recurse into it if there's something
+ // for splitting to do. That can save a lot of AST verbosity for
+ // a bunch of memberwise copies.
+
+ assignList = intermediate.growAggregate(assignList,
+ intermediate.addAssign(op, subSplitLeft, subSplitRight, loc),
+ loc);
} else {
- traverse(subLeft, subRight, subSplitLeft, subSplitRight);
+ traverse(subLeft, subRight, subSplitLeft, subSplitRight, false);
}
- memberL += (typeL.isBuiltInInterstageIO(language) ? 0 : 1);
- memberR += (typeR.isBuiltInInterstageIO(language) ? 0 : 1);
+ memberL += (typeL.isBuiltIn() ? 0 : 1);
+ memberR += (typeR.isBuiltIn() ? 0 : 1);
}
} else {
- assert(0); // we should never be called on a non-flattenable thing, because
- // that case bails out above to a simple copy.
+ // Member copy
+ assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, left, right, loc), loc);
}
};
@@ -2141,15 +2814,32 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
TIntermTyped* splitRight = right;
// If either left or right was a split structure, we must read or write it, but still have to
- // parallel-recurse through the unsplit structure to identify the builtin IO vars.
- if (isSplitLeft)
- splitLeft = intermediate.addSymbol(*getSplitIoVar(left), loc);
+ // parallel-recurse through the unsplit structure to identify the built-in IO vars.
+ // The left can be either a symbol, or an index into a symbol (e.g, array reference)
+ if (isSplitLeft) {
+ if (indexesSplit(left)) {
+ // Index case: Refer to the indexed symbol, if the left is an index operator.
+ const TIntermSymbol* symNode = left->getAsBinaryNode()->getLeft()->getAsSymbolNode();
+
+ TIntermTyped* splitLeftNonIo = intermediate.addSymbol(*getSplitNonIoVar(symNode->getId()), loc);
+
+ splitLeft = intermediate.addIndex(left->getAsBinaryNode()->getOp(), splitLeftNonIo,
+ left->getAsBinaryNode()->getRight(), loc);
+
+ const TType derefType(splitLeftNonIo->getType(), 0);
+ splitLeft->setType(derefType);
+ } else {
+ // Symbol case: otherwise, if not indexed, we have the symbol directly.
+ const TIntermSymbol* symNode = left->getAsSymbolNode();
+ splitLeft = intermediate.addSymbol(*getSplitNonIoVar(symNode->getId()), loc);
+ }
+ }
if (isSplitRight)
- splitRight = intermediate.addSymbol(*getSplitIoVar(right), loc);
+ splitRight = intermediate.addSymbol(*getSplitNonIoVar(right->getAsSymbolNode()->getId()), loc);
// This makes the whole assignment, recursing through subtypes as needed.
- traverse(left, right, splitLeft, splitRight);
+ traverse(left, right, splitLeft, splitRight, true);
assert(assignList != nullptr);
assignList->setOperator(EOpSequence);
@@ -2160,7 +2850,8 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
// An assignment to matrix swizzle must be decomposed into individual assignments.
// These must be selected component-wise from the RHS and stored component-wise
// into the LHS.
-TIntermTyped* HlslParseContext::handleAssignToMatrixSwizzle(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right)
+TIntermTyped* HlslParseContext::handleAssignToMatrixSwizzle(const TSourceLoc& loc, TOperator op, TIntermTyped* left,
+ TIntermTyped* right)
{
assert(left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle);
@@ -2242,7 +2933,8 @@ TOperator HlslParseContext::mapAtomicOp(const TSourceLoc& loc, TOperator op, boo
//
// Create a combined sampler/texture from separate sampler and texture.
//
-TIntermAggregate* HlslParseContext::handleSamplerTextureCombine(const TSourceLoc& loc, TIntermTyped* argTex, TIntermTyped* argSampler)
+TIntermAggregate* HlslParseContext::handleSamplerTextureCombine(const TSourceLoc& loc, TIntermTyped* argTex,
+ TIntermTyped* argSampler)
{
TIntermAggregate* txcombine = new TIntermAggregate(EOpConstructTextureSampler);
@@ -2251,7 +2943,66 @@ TIntermAggregate* HlslParseContext::handleSamplerTextureCombine(const TSourceLoc
TSampler samplerType = argTex->getType().getSampler();
samplerType.combined = true;
- samplerType.shadow = argSampler->getType().getSampler().shadow;
+
+ // TODO:
+ // This block exists until the spec no longer requires shadow modes on texture objects.
+ // It can be deleted after that, along with the shadowTextureVariant member.
+ {
+ const bool shadowMode = argSampler->getType().getSampler().shadow;
+
+ TIntermSymbol* texSymbol = argTex->getAsSymbolNode();
+
+ if (texSymbol == nullptr)
+ texSymbol = argTex->getAsBinaryNode()->getLeft()->getAsSymbolNode();
+
+ if (texSymbol == nullptr) {
+ error(loc, "unable to find texture symbol", "", "");
+ return nullptr;
+ }
+
+ // This forces the texture's shadow state to be the sampler's
+ // shadow state. This depends on downstream optimization to
+ // DCE one variant in [shadow, nonshadow] if both are present,
+ // or the SPIR-V module would be invalid.
+ int newId = texSymbol->getId();
+
+ // Check to see if this texture has been given a shadow mode already.
+ // If so, look up the one we already have.
+ const auto textureShadowEntry = textureShadowVariant.find(texSymbol->getId());
+
+ if (textureShadowEntry != textureShadowVariant.end())
+ newId = textureShadowEntry->second->get(shadowMode);
+ else
+ textureShadowVariant[texSymbol->getId()] = new tShadowTextureSymbols;
+
+ // Sometimes we have to create another symbol (if this texture has been seen before,
+ // and we haven't created the form for this shadow mode).
+ if (newId == -1) {
+ TType texType;
+ texType.shallowCopy(argTex->getType());
+ texType.getSampler().shadow = shadowMode; // set appropriate shadow mode.
+ globalQualifierFix(loc, texType.getQualifier());
+
+ TVariable* newTexture = makeInternalVariable(texSymbol->getName(), texType);
+
+ trackLinkage(*newTexture);
+
+ newId = newTexture->getUniqueId();
+ }
+
+ assert(newId != -1);
+
+ if (textureShadowVariant.find(newId) == textureShadowVariant.end())
+ textureShadowVariant[newId] = textureShadowVariant[texSymbol->getId()];
+
+ textureShadowVariant[newId]->set(shadowMode, newId);
+
+ // Remember this shadow mode in the texture and the merged type.
+ argTex->getWritableType().getSampler().shadow = shadowMode;
+ samplerType.shadow = shadowMode;
+
+ texSymbol->switchId(newId);
+ }
txcombine->setType(TType(samplerType, EvqTemporary));
txcombine->setLoc(loc);
@@ -2259,21 +3010,127 @@ TIntermAggregate* HlslParseContext::handleSamplerTextureCombine(const TSourceLoc
return txcombine;
}
+// Return true if this a buffer type that has an associated counter buffer.
+bool HlslParseContext::hasStructBuffCounter(const TType& type) const
+{
+ switch (type.getQualifier().declaredBuiltIn) {
+ case EbvAppendConsume: // fall through...
+ case EbvRWStructuredBuffer: // ...
+ return true;
+ default:
+ return false; // the other structuredbuffer types do not have a counter.
+ }
+}
+
+void HlslParseContext::counterBufferType(const TSourceLoc& loc, TType& type)
+{
+ // Counter type
+ TType* counterType = new TType(EbtInt, EvqBuffer);
+ counterType->setFieldName("@count");
+
+ TTypeList* blockStruct = new TTypeList;
+ TTypeLoc member = { counterType, loc };
+ blockStruct->push_back(member);
+
+ TType blockType(blockStruct, "", counterType->getQualifier());
+ blockType.getQualifier().storage = EvqBuffer;
+
+ type.shallowCopy(blockType);
+ shareStructBufferType(type);
+}
+
+// knowledge of how to construct block name, in one place instead of N places.
+TString HlslParseContext::getStructBuffCounterName(const TString& blockName) const
+{
+ return blockName + "@count";
+}
+
+// declare counter for a structured buffer type
+void HlslParseContext::declareStructBufferCounter(const TSourceLoc& loc, const TType& bufferType, const TString& name)
+{
+ // Bail out if not a struct buffer
+ if (! isStructBufferType(bufferType))
+ return;
+
+ if (! hasStructBuffCounter(bufferType))
+ return;
+
+ TType blockType;
+ counterBufferType(loc, blockType);
+
+ TString* blockName = new TString(getStructBuffCounterName(name));
+
+ // Counter buffer does not have its own counter buffer. TODO: there should be a better way to track this.
+ structBufferCounter[*blockName] = false;
+
+ shareStructBufferType(blockType);
+ declareBlock(loc, blockType, blockName);
+}
+
+// return the counter that goes with a given structuredbuffer
+TIntermTyped* HlslParseContext::getStructBufferCounter(const TSourceLoc& loc, TIntermTyped* buffer)
+{
+ // Bail out if not a struct buffer
+ if (buffer == nullptr || ! isStructBufferType(buffer->getType()))
+ return nullptr;
+
+ const TString counterBlockName(getStructBuffCounterName(buffer->getAsSymbolNode()->getName()));
+
+ // Mark the counter as being used
+ structBufferCounter[counterBlockName] = true;
+
+ TIntermTyped* counterVar = handleVariable(loc, &counterBlockName); // find the block structure
+ TIntermTyped* index = intermediate.addConstantUnion(0, loc); // index to counter inside block struct
+
+ TIntermTyped* counterMember = intermediate.addIndex(EOpIndexDirectStruct, counterVar, index, loc);
+ counterMember->setType(TType(EbtInt));
+ return counterMember;
+}
+
+
//
// Decompose structure buffer methods into AST
//
void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
{
- if (!node || !node->getAsOperator())
+ if (node == nullptr || node->getAsOperator() == nullptr || arguments == nullptr)
return;
const TOperator op = node->getAsOperator()->getOp();
- TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr;
- if (argAggregate == nullptr)
- return;
+ TIntermAggregate* argAggregate = arguments->getAsAggregate();
// Buffer is the object upon which method is called, so always arg 0
- TIntermTyped* bufferObj = argAggregate->getSequence()[0]->getAsTyped();
+ TIntermTyped* bufferObj = nullptr;
+
+ // The parameters can be an aggregate, or just a the object as a symbol if there are no fn params.
+ if (argAggregate) {
+ if (argAggregate->getSequence().empty())
+ return;
+ bufferObj = argAggregate->getSequence()[0]->getAsTyped();
+ } else {
+ bufferObj = arguments->getAsSymbolNode();
+ }
+
+ if (bufferObj == nullptr || bufferObj->getAsSymbolNode() == nullptr)
+ return;
+
+ // Some methods require a hidden internal counter, obtained via getStructBufferCounter().
+ // This lambda adds something to it and returns the old value.
+ const auto incDecCounter = [&](int incval) -> TIntermTyped* {
+ TIntermTyped* incrementValue = intermediate.addConstantUnion(incval, loc, true);
+ TIntermTyped* counter = getStructBufferCounter(loc, bufferObj); // obtain the counter member
+
+ if (counter == nullptr)
+ return nullptr;
+
+ TIntermAggregate* counterIncrement = new TIntermAggregate(EOpAtomicAdd);
+ counterIncrement->setType(TType(EbtUint, EvqTemporary));
+ counterIncrement->setLoc(loc);
+ counterIncrement->getSequence().push_back(counter);
+ counterIncrement->getSequence().push_back(incrementValue);
+
+ return counterIncrement;
+ };
// Index to obtain the runtime sized array out of the buffer.
TIntermTyped* argArray = indexStructBufferContent(loc, bufferObj);
@@ -2283,13 +3140,21 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
switch (op) {
case EOpMethodLoad:
{
- TIntermTyped* argIndex = argAggregate->getSequence()[1]->getAsTyped(); // index
+ TIntermTyped* argIndex = makeIntegerIndex(argAggregate->getSequence()[1]->getAsTyped()); // index
+
+ const TType& bufferType = bufferObj->getType();
+
+ const TBuiltInVariable builtInType = bufferType.getQualifier().declaredBuiltIn;
// Byte address buffers index in bytes (only multiples of 4 permitted... not so much a byte address
// buffer then, but that's what it calls itself.
- const bool isByteAddressBuffer = (argArray->getBasicType() == EbtUint);
+ const bool isByteAddressBuffer = (builtInType == EbvByteAddressBuffer ||
+ builtInType == EbvRWByteAddressBuffer);
+
+
if (isByteAddressBuffer)
- argIndex = intermediate.addBinaryNode(EOpRightShift, argIndex, intermediate.addConstantUnion(2, loc, true),
+ argIndex = intermediate.addBinaryNode(EOpRightShift, argIndex,
+ intermediate.addConstantUnion(2, loc, true),
loc, TType(EbtInt));
// Index into the array to find the item being loaded.
@@ -2307,7 +3172,7 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
case EOpMethodLoad3:
case EOpMethodLoad4:
{
- TIntermTyped* argIndex = argAggregate->getSequence()[1]->getAsTyped(); // index
+ TIntermTyped* argIndex = makeIntegerIndex(argAggregate->getSequence()[1]->getAsTyped()); // index
TOperator constructOp = EOpNull;
int size = 0;
@@ -2324,7 +3189,8 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
// First, we'll store the address in a variable to avoid multiple shifts
// (we must convert the byte address to an item address)
TIntermTyped* byteAddrIdx = intermediate.addBinaryNode(EOpRightShift, argIndex,
- intermediate.addConstantUnion(2, loc, true), loc, TType(EbtInt));
+ intermediate.addConstantUnion(2, loc, true),
+ loc, TType(EbtInt));
TVariable* byteAddrSym = makeInternalVariable("byteAddrTemp", TType(EbtInt, EvqTemporary));
TIntermTyped* byteAddrIdxVar = intermediate.addSymbol(*byteAddrSym, loc);
@@ -2340,10 +3206,12 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
// add index offset
if (idx != 0)
- offsetIdx = intermediate.addBinaryNode(EOpAdd, offsetIdx, intermediate.addConstantUnion(idx, loc, true),
+ offsetIdx = intermediate.addBinaryNode(EOpAdd, offsetIdx,
+ intermediate.addConstantUnion(idx, loc, true),
loc, TType(EbtInt));
- const TOperator idxOp = (offsetIdx->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect;
+ const TOperator idxOp = (offsetIdx->getQualifier().storage == EvqConst) ? EOpIndexDirect
+ : EOpIndexIndirect;
vec = intermediate.growAggregate(vec, intermediate.addIndex(idxOp, argArray, offsetIdx, loc));
}
@@ -2365,7 +3233,7 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
case EOpMethodStore3:
case EOpMethodStore4:
{
- TIntermTyped* argIndex = argAggregate->getSequence()[1]->getAsTyped(); // address
+ TIntermTyped* argIndex = makeIntegerIndex(argAggregate->getSequence()[1]->getAsTyped()); // index
TIntermTyped* argValue = argAggregate->getSequence()[2]->getAsTyped(); // value
// Index into the array to find the item being loaded.
@@ -2402,7 +3270,8 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
if (idx != 0)
offsetIdx = intermediate.addBinaryNode(EOpAdd, offsetIdx, idxConst, loc, TType(EbtInt));
- const TOperator idxOp = (offsetIdx->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect;
+ const TOperator idxOp = (offsetIdx->getQualifier().storage == EvqConst) ? EOpIndexDirect
+ : EOpIndexIndirect;
TIntermTyped* lValue = intermediate.addIndex(idxOp, argArray, offsetIdx, loc);
TIntermTyped* rValue = (size == 1) ? argValue :
@@ -2435,7 +3304,8 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
body = intermediate.growAggregate(body, assign, loc);
} else {
const int length = argArray->getType().getOuterArraySize();
- TIntermTyped* assign = intermediate.addAssign(EOpAssign, argNumItems, intermediate.addConstantUnion(length, loc, true), loc);
+ TIntermTyped* assign = intermediate.addAssign(EOpAssign, argNumItems,
+ intermediate.addConstantUnion(length, loc, true), loc);
body = intermediate.growAggregate(body, assign, loc);
}
@@ -2446,7 +3316,8 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
intermediate.getBaseAlignment(argArray->getType(), size, stride, false,
argArray->getType().getQualifier().layoutMatrix == ElmRowMajor);
- TIntermTyped* assign = intermediate.addAssign(EOpAssign, argStride, intermediate.addConstantUnion(stride, loc, true), loc);
+ TIntermTyped* assign = intermediate.addAssign(EOpAssign, argStride,
+ intermediate.addConstantUnion(stride, loc, true), loc);
body = intermediate.growAggregate(body, assign);
}
@@ -2472,7 +3343,7 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
TIntermSequence& sequence = argAggregate->getSequence();
- TIntermTyped* argIndex = sequence[1]->getAsTyped(); // index
+ TIntermTyped* argIndex = makeIntegerIndex(sequence[1]->getAsTyped()); // index
argIndex = intermediate.addBinaryNode(EOpRightShift, argIndex, intermediate.addConstantUnion(2, loc, true),
loc, TType(EbtInt));
@@ -2488,46 +3359,241 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
}
break;
+ case EOpMethodIncrementCounter:
+ {
+ node = incDecCounter(1);
+ break;
+ }
+
+ case EOpMethodDecrementCounter:
+ {
+ TIntermTyped* preIncValue = incDecCounter(-1); // result is original value
+ node = intermediate.addBinaryNode(EOpAdd, preIncValue, intermediate.addConstantUnion(-1, loc, true), loc,
+ preIncValue->getType());
+ break;
+ }
+
+ case EOpMethodAppend:
+ {
+ TIntermTyped* oldCounter = incDecCounter(1);
+
+ TIntermTyped* lValue = intermediate.addIndex(EOpIndexIndirect, argArray, oldCounter, loc);
+ TIntermTyped* rValue = argAggregate->getSequence()[1]->getAsTyped();
+
+ const TType derefType(argArray->getType(), 0);
+ lValue->setType(derefType);
+
+ node = intermediate.addAssign(EOpAssign, lValue, rValue, loc);
+
+ break;
+ }
+
+ case EOpMethodConsume:
+ {
+ TIntermTyped* oldCounter = incDecCounter(-1);
+
+ TIntermTyped* newCounter = intermediate.addBinaryNode(EOpAdd, oldCounter,
+ intermediate.addConstantUnion(-1, loc, true), loc,
+ oldCounter->getType());
+
+ node = intermediate.addIndex(EOpIndexIndirect, argArray, newCounter, loc);
+
+ const TType derefType(argArray->getType(), 0);
+ node->setType(derefType);
+
+ break;
+ }
+
default:
break; // most pass through unchanged
}
}
+
+// Create array of standard sample positions for given sample count.
+// TODO: remove when a real method to query sample pos exists in SPIR-V.
+TIntermConstantUnion* HlslParseContext::getSamplePosArray(int count)
+{
+ struct tSamplePos { float x, y; };
+
+ static const tSamplePos pos1[] = {
+ { 0.0/16.0, 0.0/16.0 },
+ };
+
+ // standard sample positions for 2, 4, 8, and 16 samples.
+ static const tSamplePos pos2[] = {
+ { 4.0/16.0, 4.0/16.0 }, {-4.0/16.0, -4.0/16.0 },
+ };
+
+ static const tSamplePos pos4[] = {
+ {-2.0/16.0, -6.0/16.0 }, { 6.0/16.0, -2.0/16.0 }, {-6.0/16.0, 2.0/16.0 }, { 2.0/16.0, 6.0/16.0 },
+ };
+
+ static const tSamplePos pos8[] = {
+ { 1.0/16.0, -3.0/16.0 }, {-1.0/16.0, 3.0/16.0 }, { 5.0/16.0, 1.0/16.0 }, {-3.0/16.0, -5.0/16.0 },
+ {-5.0/16.0, 5.0/16.0 }, {-7.0/16.0, -1.0/16.0 }, { 3.0/16.0, 7.0/16.0 }, { 7.0/16.0, -7.0/16.0 },
+ };
+
+ static const tSamplePos pos16[] = {
+ { 1.0/16.0, 1.0/16.0 }, {-1.0/16.0, -3.0/16.0 }, {-3.0/16.0, 2.0/16.0 }, { 4.0/16.0, -1.0/16.0 },
+ {-5.0/16.0, -2.0/16.0 }, { 2.0/16.0, 5.0/16.0 }, { 5.0/16.0, 3.0/16.0 }, { 3.0/16.0, -5.0/16.0 },
+ {-2.0/16.0, 6.0/16.0 }, { 0.0/16.0, -7.0/16.0 }, {-4.0/16.0, -6.0/16.0 }, {-6.0/16.0, 4.0/16.0 },
+ {-8.0/16.0, 0.0/16.0 }, { 7.0/16.0, -4.0/16.0 }, { 6.0/16.0, 7.0/16.0 }, {-7.0/16.0, -8.0/16.0 },
+ };
+
+ const tSamplePos* sampleLoc = nullptr;
+ int numSamples = count;
+
+ switch (count) {
+ case 2: sampleLoc = pos2; break;
+ case 4: sampleLoc = pos4; break;
+ case 8: sampleLoc = pos8; break;
+ case 16: sampleLoc = pos16; break;
+ default:
+ sampleLoc = pos1;
+ numSamples = 1;
+ }
+
+ TConstUnionArray* values = new TConstUnionArray(numSamples*2);
+ for (int pos=0; pos<count; ++pos) {
+ TConstUnion x, y;
+ x.setDConst(sampleLoc[pos].x);
+ y.setDConst(sampleLoc[pos].y);
+
+ (*values)[pos*2+0] = x;
+ (*values)[pos*2+1] = y;
+ }
+
+ TType retType(EbtFloat, EvqConst, 2);
+
+ if (numSamples != 1) {
+ TArraySizes arraySizes;
+ arraySizes.addInnerSize(numSamples);
+ retType.newArraySizes(arraySizes);
+ }
+
+ return new TIntermConstantUnion(*values, retType);
+}
+
//
// Decompose DX9 and DX10 sample intrinsics & object methods into AST
//
void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
{
- if (!node || !node->getAsOperator())
+ if (node == nullptr || !node->getAsOperator())
return;
- const auto clampReturn = [&loc, &node, this](TIntermTyped* result, const TSampler& sampler) -> TIntermTyped* {
- // Sampler return must always be a vec4, but we can construct a shorter vector
+ // Sampler return must always be a vec4, but we can construct a shorter vector or a structure from it.
+ const auto convertReturn = [&loc, &node, this](TIntermTyped* result, const TSampler& sampler) -> TIntermTyped* {
result->setType(TType(node->getType().getBasicType(), EvqTemporary, node->getVectorSize()));
- if (sampler.vectorSize < (unsigned)node->getVectorSize()) {
- // Too many components. Construct shorter vector from it.
- const TType clampedType(result->getType().getBasicType(), EvqTemporary, sampler.vectorSize);
+ TIntermTyped* convertedResult = nullptr;
+
+ TType retType;
+ getTextureReturnType(sampler, retType);
+
+ if (retType.isStruct()) {
+ // For type convenience, conversionAggregate points to the convertedResult (we know it's an aggregate here)
+ TIntermAggregate* conversionAggregate = new TIntermAggregate;
+ convertedResult = conversionAggregate;
+
+ // Convert vector output to return structure. We will need a temp symbol to copy the results to.
+ TVariable* structVar = makeInternalVariable("@sampleStructTemp", retType);
+
+ // We also need a temp symbol to hold the result of the texture. We don't want to re-fetch the
+ // sample each time we'll index into the result, so we'll copy to this, and index into the copy.
+ TVariable* sampleShadow = makeInternalVariable("@sampleResultShadow", result->getType());
- const TOperator op = intermediate.mapTypeToConstructorOp(clampedType);
+ // Initial copy from texture to our sample result shadow.
+ TIntermTyped* shadowCopy = intermediate.addAssign(EOpAssign, intermediate.addSymbol(*sampleShadow, loc),
+ result, loc);
- result = constructBuiltIn(clampedType, op, result, loc, false);
+ conversionAggregate->getSequence().push_back(shadowCopy);
+
+ unsigned vec4Pos = 0;
+
+ for (unsigned m = 0; m < unsigned(retType.getStruct()->size()); ++m) {
+ const TType memberType(retType, m); // dereferenced type of the member we're about to assign.
+
+ // Check for bad struct members. This should have been caught upstream. Complain, because
+ // wwe don't know what to do with it. This algorithm could be generalized to handle
+ // other things, e.g, sub-structures, but HLSL doesn't allow them.
+ if (!memberType.isVector() && !memberType.isScalar()) {
+ error(loc, "expected: scalar or vector type in texture structure", "", "");
+ return nullptr;
+ }
+
+ // Index into the struct variable to find the member to assign.
+ TIntermTyped* structMember = intermediate.addIndex(EOpIndexDirectStruct,
+ intermediate.addSymbol(*structVar, loc),
+ intermediate.addConstantUnion(m, loc), loc);
+
+ structMember->setType(memberType);
+
+ // Assign each component of (possible) vector in struct member.
+ for (int component = 0; component < memberType.getVectorSize(); ++component) {
+ TIntermTyped* vec4Member = intermediate.addIndex(EOpIndexDirect,
+ intermediate.addSymbol(*sampleShadow, loc),
+ intermediate.addConstantUnion(vec4Pos++, loc), loc);
+ vec4Member->setType(TType(memberType.getBasicType(), EvqTemporary, 1));
+
+ TIntermTyped* memberAssign = nullptr;
+
+ if (memberType.isVector()) {
+ // Vector member: we need to create an access chain to the vector component.
+
+ TIntermTyped* structVecComponent = intermediate.addIndex(EOpIndexDirect, structMember,
+ intermediate.addConstantUnion(component, loc), loc);
+
+ memberAssign = intermediate.addAssign(EOpAssign, structVecComponent, vec4Member, loc);
+ } else {
+ // Scalar member: we can assign to it directly.
+ memberAssign = intermediate.addAssign(EOpAssign, structMember, vec4Member, loc);
+ }
+
+
+ conversionAggregate->getSequence().push_back(memberAssign);
+ }
+ }
+
+ // Add completed variable so the expression results in the whole struct value we just built.
+ conversionAggregate->getSequence().push_back(intermediate.addSymbol(*structVar, loc));
+
+ // Make it a sequence.
+ intermediate.setAggregateOperator(conversionAggregate, EOpSequence, retType, loc);
+ } else {
+ // vector clamp the output if template vector type is smaller than sample result.
+ if (retType.getVectorSize() < node->getVectorSize()) {
+ // Too many components. Construct shorter vector from it.
+ const TOperator op = intermediate.mapTypeToConstructorOp(retType);
+
+ convertedResult = constructBuiltIn(retType, op, result, loc, false);
+ } else {
+ // Enough components. Use directly.
+ convertedResult = result;
+ }
}
- result->setLoc(loc);
- return result;
+ convertedResult->setLoc(loc);
+ return convertedResult;
};
const TOperator op = node->getAsOperator()->getOp();
const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr;
- // Bail out if not a sampler method
+ // Bail out if not a sampler method.
+ // Note though this is odd to do before checking the op, because the op
+ // could be something that takes the arguments, and the function in question
+ // takes the result of the op. So, this is not the final word.
if (arguments != nullptr) {
- if ((argAggregate != nullptr && argAggregate->getSequence()[0]->getAsTyped()->getBasicType() != EbtSampler))
- return;
-
- if (argAggregate == nullptr && arguments->getAsTyped()->getBasicType() != EbtSampler)
- return;
+ if (argAggregate == nullptr) {
+ if (arguments->getAsTyped()->getBasicType() != EbtSampler)
+ return;
+ } else {
+ if (argAggregate->getSequence().size() == 0 ||
+ argAggregate->getSequence()[0]->getAsTyped()->getBasicType() != EbtSampler)
+ return;
+ }
}
switch (op) {
@@ -2575,7 +3641,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
tex->getSequence().push_back(constructCoord); // coordinate
tex->getSequence().push_back(bias); // bias
- node = clampReturn(tex, sampler);
+ node = convertReturn(tex, sampler);
break;
}
@@ -2615,7 +3681,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
if (argOffset != nullptr)
txsample->getSequence().push_back(argOffset);
- node = clampReturn(txsample, sampler);
+ node = convertReturn(txsample, sampler);
break;
}
@@ -2648,7 +3714,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
if (argOffset != nullptr)
txsample->getSequence().push_back(argOffset);
- node = clampReturn(txsample, sampler);
+ node = convertReturn(txsample, sampler);
break;
}
@@ -2793,6 +3859,18 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
TIntermTyped* argCmpVal = argAggregate->getSequence()[3]->getAsTyped();
TIntermTyped* argOffset = nullptr;
+ // Sampler argument should be a sampler.
+ if (argSamp->getType().getBasicType() != EbtSampler) {
+ error(loc, "expected: sampler type", "", "");
+ return;
+ }
+
+ // Sampler should be a SamplerComparisonState
+ if (! argSamp->getType().getSampler().isShadow()) {
+ error(loc, "expected: SamplerComparisonState", "", "");
+ return;
+ }
+
// optional offset value
if (argAggregate->getSequence().size() > 4)
argOffset = argAggregate->getSequence()[4]->getAsTyped();
@@ -2912,7 +3990,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
txfetch->getSequence().push_back(argOffset);
}
- node = clampReturn(txfetch, sampler);
+ node = convertReturn(txfetch, sampler);
break;
}
@@ -2943,7 +4021,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
if (argOffset != nullptr)
txsample->getSequence().push_back(argOffset);
- node = clampReturn(txsample, sampler);
+ node = convertReturn(txsample, sampler);
break;
}
@@ -3030,6 +4108,18 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
bool hasOffset1 = false;
bool hasOffset4 = false;
+ // Sampler argument should be a sampler.
+ if (argSamp->getType().getBasicType() != EbtSampler) {
+ error(loc, "expected: sampler type", "", "");
+ return;
+ }
+
+ // Cmp forms require SamplerComparisonState
+ if (cmpValues > 0 && ! argSamp->getType().getSampler().isShadow()) {
+ error(loc, "expected: SamplerComparisonState", "", "");
+ return;
+ }
+
// Only 2D forms can have offsets. Discover if we have 0, 1 or 4 offsets.
if (dim == Esd2D) {
hasOffset1 = (argSize == (4+cmpValues) || argSize == (5+cmpValues));
@@ -3135,10 +4225,90 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
case EOpMethodGetSamplePosition:
{
- error(loc, "unimplemented: GetSamplePosition", "", "");
+ // TODO: this entire decomposition exists because there is not yet a way to query
+ // the sample position directly through SPIR-V. Instead, we return fixed sample
+ // positions for common cases. *** If the sample positions are set differently,
+ // this will be wrong. ***
+
+ TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped();
+ TIntermTyped* argSampIdx = argAggregate->getSequence()[1]->getAsTyped();
+
+ TIntermAggregate* samplesQuery = new TIntermAggregate(EOpImageQuerySamples);
+ samplesQuery->getSequence().push_back(argTex);
+ samplesQuery->setType(TType(EbtUint, EvqTemporary, 1));
+ samplesQuery->setLoc(loc);
+
+ TIntermAggregate* compoundStatement = nullptr;
+
+ TVariable* outSampleCount = makeInternalVariable("@sampleCount", TType(EbtUint));
+ outSampleCount->getWritableType().getQualifier().makeTemporary();
+ TIntermTyped* compAssign = intermediate.addAssign(EOpAssign, intermediate.addSymbol(*outSampleCount, loc),
+ samplesQuery, loc);
+ compoundStatement = intermediate.growAggregate(compoundStatement, compAssign);
+
+ TIntermTyped* idxtest[4];
+
+ // Create tests against 2, 4, 8, and 16 sample values
+ int count = 0;
+ for (int val = 2; val <= 16; val *= 2)
+ idxtest[count++] =
+ intermediate.addBinaryNode(EOpEqual,
+ intermediate.addSymbol(*outSampleCount, loc),
+ intermediate.addConstantUnion(val, loc),
+ loc, TType(EbtBool));
+
+ const TOperator idxOp = (argSampIdx->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect;
+
+ // Create index ops into position arrays given sample index.
+ // TODO: should it be clamped?
+ TIntermTyped* index[4];
+ count = 0;
+ for (int val = 2; val <= 16; val *= 2) {
+ index[count] = intermediate.addIndex(idxOp, getSamplePosArray(val), argSampIdx, loc);
+ index[count++]->setType(TType(EbtFloat, EvqTemporary, 2));
+ }
+
+ // Create expression as:
+ // (sampleCount == 2) ? pos2[idx] :
+ // (sampleCount == 4) ? pos4[idx] :
+ // (sampleCount == 8) ? pos8[idx] :
+ // (sampleCount == 16) ? pos16[idx] : float2(0,0);
+ TIntermTyped* test =
+ intermediate.addSelection(idxtest[0], index[0],
+ intermediate.addSelection(idxtest[1], index[1],
+ intermediate.addSelection(idxtest[2], index[2],
+ intermediate.addSelection(idxtest[3], index[3],
+ getSamplePosArray(1), loc), loc), loc), loc);
+
+ compoundStatement = intermediate.growAggregate(compoundStatement, test);
+ compoundStatement->setOperator(EOpSequence);
+ compoundStatement->setLoc(loc);
+ compoundStatement->setType(TType(EbtFloat, EvqTemporary, 2));
+
+ node = compoundStatement;
+
break;
}
+ case EOpSubpassLoad:
+ {
+ const TIntermTyped* argSubpass =
+ argAggregate ? argAggregate->getSequence()[0]->getAsTyped() :
+ arguments->getAsTyped();
+
+ const TSampler& sampler = argSubpass->getType().getSampler();
+
+ // subpass load: the multisample form is overloaded. Here, we convert that to
+ // the EOpSubpassLoadMS opcode.
+ if (argAggregate != nullptr && argAggregate->getSequence().size() > 1)
+ node->getAsOperator()->setOp(EOpSubpassLoadMS);
+
+ node = convertReturn(node, sampler);
+
+ break;
+ }
+
+
default:
break; // most pass through unchanged
}
@@ -3149,7 +4319,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
//
void HlslParseContext::decomposeGeometryMethods(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
{
- if (!node || !node->getAsOperator())
+ if (node == nullptr || !node->getAsOperator())
return;
const TOperator op = node->getAsOperator()->getOp();
@@ -3158,15 +4328,27 @@ void HlslParseContext::decomposeGeometryMethods(const TSourceLoc& loc, TIntermTy
switch (op) {
case EOpMethodAppend:
if (argAggregate) {
+ // Don't emit these for non-GS stage, since we won't have the gsStreamOutput symbol.
+ if (language != EShLangGeometry) {
+ node = nullptr;
+ return;
+ }
+
TIntermAggregate* sequence = nullptr;
TIntermAggregate* emit = new TIntermAggregate(EOpEmitVertex);
emit->setLoc(loc);
emit->setType(TType(EbtVoid));
+ // find the matching output
+ if (gsStreamOutput == nullptr) {
+ error(loc, "unable to find output symbol for Append()", "", "");
+ return;
+ }
+
sequence = intermediate.growAggregate(sequence,
handleAssign(loc, EOpAssign,
- argAggregate->getSequence()[0]->getAsTyped(),
+ intermediate.addSymbol(*gsStreamOutput, loc),
argAggregate->getSequence()[1]->getAsTyped()),
loc);
@@ -3181,6 +4363,12 @@ void HlslParseContext::decomposeGeometryMethods(const TSourceLoc& loc, TIntermTy
case EOpMethodRestartStrip:
{
+ // Don't emit these for non-GS stage, since we won't have the gsStreamOutput symbol.
+ if (language != EShLangGeometry) {
+ node = nullptr;
+ return;
+ }
+
TIntermAggregate* cut = new TIntermAggregate(EOpEndPrimitive);
cut->setLoc(loc);
cut->setType(TType(EbtVoid));
@@ -3259,6 +4447,28 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
break;
}
+ case EOpAny: // fall through
+ case EOpAll:
+ {
+ TIntermTyped* typedArg = arguments->getAsTyped();
+
+ // HLSL allows float/etc types here, and the SPIR-V opcode requires a bool.
+ // We'll convert here. Note that for efficiency, we could add a smarter
+ // decomposition for some type cases, e.g, maybe by decomposing a dot product.
+ if (typedArg->getType().getBasicType() != EbtBool) {
+ const TType boolType(EbtBool, EvqTemporary,
+ typedArg->getVectorSize(),
+ typedArg->getMatrixCols(),
+ typedArg->getMatrixRows(),
+ typedArg->isVector());
+
+ typedArg = intermediate.addConversion(EOpConstructBool, boolType, typedArg);
+ node->getAsUnaryNode()->setOperand(typedArg);
+ }
+
+ break;
+ }
+
case EOpSaturate:
{
// saturate(a) -> clamp(a,0,1)
@@ -3328,14 +4538,21 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
std::max(arg0->getType().getMatrixRows(), 1);
TConstUnion zero;
- zero.setDConst(0.0);
+ if (arg0->getType().isIntegerDomain())
+ zero.setDConst(0);
+ else
+ zero.setDConst(0.0);
TConstUnionArray zeros(constComponentCount, zero);
less->getSequence().push_back(intermediate.addConstantUnion(zeros, arg0->getType(), loc, true));
compareNode = intermediate.addBuiltInFunctionCall(loc, EOpAny, true, less, TType(EbtBool));
} else {
- TIntermTyped* zero = intermediate.addConstantUnion(0, type0, loc, true);
+ TIntermTyped* zero;
+ if (arg0->getType().isIntegerDomain())
+ zero = intermediate.addConstantUnion(0, loc, true);
+ else
+ zero = intermediate.addConstantUnion(0.0, type0, loc, true);
compareNode = handleBinaryMath(loc, "clip", EOpLessThan, arg0, zero);
}
@@ -3702,6 +4919,51 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
break;
}
+ case EOpIsFinite:
+ {
+ // Since OPIsFinite in SPIR-V is only supported with the Kernel capability, we translate
+ // it to !isnan && !isinf
+
+ TIntermTyped* arg0 = node->getAsUnaryNode()->getOperand();
+
+ // We'll make a temporary in case the RHS is cmoplex
+ TVariable* tempArg = makeInternalVariable("@finitetmp", arg0->getType());
+ tempArg->getWritableType().getQualifier().makeTemporary();
+
+ TIntermTyped* tmpArgAssign = intermediate.addAssign(EOpAssign,
+ intermediate.addSymbol(*tempArg, loc),
+ arg0, loc);
+
+ TIntermAggregate* compoundStatement = intermediate.makeAggregate(tmpArgAssign, loc);
+
+ const TType boolType(EbtBool, EvqTemporary, arg0->getVectorSize(), arg0->getMatrixCols(),
+ arg0->getMatrixRows());
+
+ TIntermTyped* isnan = handleUnaryMath(loc, "isnan", EOpIsNan, intermediate.addSymbol(*tempArg, loc));
+ isnan->setType(boolType);
+
+ TIntermTyped* notnan = handleUnaryMath(loc, "!", EOpLogicalNot, isnan);
+ notnan->setType(boolType);
+
+ TIntermTyped* isinf = handleUnaryMath(loc, "isinf", EOpIsInf, intermediate.addSymbol(*tempArg, loc));
+ isinf->setType(boolType);
+
+ TIntermTyped* notinf = handleUnaryMath(loc, "!", EOpLogicalNot, isinf);
+ notinf->setType(boolType);
+
+ TIntermTyped* andNode = handleBinaryMath(loc, "and", EOpLogicalAnd, notnan, notinf);
+ andNode->setType(boolType);
+
+ compoundStatement = intermediate.growAggregate(compoundStatement, andNode);
+ compoundStatement->setOperator(EOpSequence);
+ compoundStatement->setLoc(loc);
+ compoundStatement->setType(boolType);
+
+ node = compoundStatement;
+
+ break;
+ }
+
default:
break; // most pass through unchanged
}
@@ -3732,9 +4994,11 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
//
// It's a constructor, of type 'type'.
//
- result = addConstructor(loc, arguments, type);
- if (result == nullptr)
+ result = handleConstructor(loc, arguments, type);
+ if (result == nullptr) {
error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), "");
+ return nullptr;
+ }
}
} else {
//
@@ -3742,12 +5006,25 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
//
const TFunction* fnCandidate = nullptr;
bool builtIn = false;
+ int thisDepth = 0;
+
+ TIntermAggregate* aggregate = arguments ? arguments->getAsAggregate() : nullptr;
// TODO: this needs improvement: there's no way at present to look up a signature in
// the symbol table for an arbitrary type. This is a temporary hack until that ability exists.
// It will have false positives, since it doesn't check arg counts or types.
- if (arguments && arguments->getAsAggregate()) {
- if (isStructBufferType(arguments->getAsAggregate()->getSequence()[0]->getAsTyped()->getType())) {
+ if (arguments) {
+ // Check if first argument is struct buffer type. It may be an aggregate or a symbol, so we
+ // look for either case.
+
+ TIntermTyped* arg0 = nullptr;
+
+ if (aggregate && aggregate->getSequence().size() > 0)
+ arg0 = aggregate->getSequence()[0]->getAsTyped();
+ else if (arguments->getAsSymbolNode())
+ arg0 = arguments->getAsSymbolNode();
+
+ if (arg0 != nullptr && isStructBufferType(arg0->getType())) {
static const int methodPrefixSize = sizeof(BUILTIN_PREFIX)-1;
if (function->getName().length() > methodPrefixSize &&
@@ -3762,7 +5039,7 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
}
if (fnCandidate == nullptr)
- fnCandidate = findFunction(loc, *function, builtIn, arguments);
+ fnCandidate = findFunction(loc, *function, builtIn, thisDepth, arguments);
if (fnCandidate) {
// This is a declared function that might map to
@@ -3772,16 +5049,39 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
// Error check for a function requiring specific extensions present.
if (builtIn && fnCandidate->getNumExtensions())
- requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str());
+ requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(),
+ fnCandidate->getName().c_str());
- // Convert 'in' arguments
+ // turn an implicit member-function resolution into an explicit call
+ TString callerName;
+ if (thisDepth == 0)
+ callerName = fnCandidate->getMangledName();
+ else {
+ // get the explicit (full) name of the function
+ callerName = currentTypePrefix[currentTypePrefix.size() - thisDepth];
+ callerName += fnCandidate->getMangledName();
+ // insert the implicit calling argument
+ pushFrontArguments(intermediate.addSymbol(*getImplicitThis(thisDepth)), arguments);
+ }
+
+ // Convert 'in' arguments, so that types match.
+ // However, skip those that need expansion, that is covered next.
if (arguments)
addInputArgumentConversions(*fnCandidate, arguments);
+ // Expand arguments. Some arguments must physically expand to a different set
+ // than what the shader declared and passes.
+ if (arguments && !builtIn)
+ expandArguments(loc, *fnCandidate, arguments);
+
+ // Expansion may have changed the form of arguments
+ aggregate = arguments ? arguments->getAsAggregate() : nullptr;
+
op = fnCandidate->getBuiltInOp();
if (builtIn && op != EOpNull) {
// A function call mapped to a built-in operation.
- result = intermediate.addBuiltInFunctionCall(loc, op, fnCandidate->getParamCount() == 1, arguments, fnCandidate->getType());
+ result = intermediate.addBuiltInFunctionCall(loc, op, fnCandidate->getParamCount() == 1, arguments,
+ fnCandidate->getType());
if (result == nullptr) {
error(arguments->getLoc(), " wrong operand type", "Internal Error",
"built in unary operator function. Type: %s",
@@ -3794,14 +5094,14 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
// It could still be a built-in function, but only if PureOperatorBuiltins == false.
result = intermediate.setAggregateOperator(arguments, EOpFunctionCall, fnCandidate->getType(), loc);
TIntermAggregate* call = result->getAsAggregate();
- call->setName(fnCandidate->getMangledName());
+ call->setName(callerName);
// this is how we know whether the given function is a built-in function or a user-defined function
// if builtIn == false, it's a userDefined -> could be an overloaded built-in function also
// if builtIn == true, it's definitely a built-in function with EOpNull
if (! builtIn) {
call->setUserDefined();
- intermediate.addToCallGraph(infoSink, currentCaller, fnCandidate->getMangledName());
+ intermediate.addToCallGraph(infoSink, currentCaller, callerName);
}
}
@@ -3814,50 +5114,83 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
decomposeSampleMethods(loc, result, arguments); // HLSL->AST sample method decompositions
decomposeGeometryMethods(loc, result, arguments); // HLSL->AST geometry method decompositions
- // Convert 'out' arguments. If it was a constant folded built-in, it won't be an aggregate anymore.
- // Built-ins with a single argument aren't called with an aggregate, but they also don't have an output.
- // Also, build the qualifier list for user function calls, which are always called with an aggregate.
- // We don't do this is if there has been a decomposition, which will have added its own conversions
- // for output parameters.
+ // Create the qualifier list, carried in the AST for the call.
+ // Because some arguments expand to multiple arguments, the qualifier list will
+ // be longer than the formal parameter list.
if (result == fnNode && result->getAsAggregate()) {
TQualifierList& qualifierList = result->getAsAggregate()->getQualifierList();
for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
TStorageQualifier qual = (*fnCandidate)[i].type->getQualifier().storage;
- qualifierList.push_back(qual);
+ if (hasStructBuffCounter(*(*fnCandidate)[i].type)) {
+ // add buffer and counter buffer argument qualifier
+ qualifierList.push_back(qual);
+ qualifierList.push_back(qual);
+ } else if (shouldFlatten(*(*fnCandidate)[i].type, (*fnCandidate)[i].type->getQualifier().storage,
+ true)) {
+ // add structure member expansion
+ for (int memb = 0; memb < (int)(*fnCandidate)[i].type->getStruct()->size(); ++memb)
+ qualifierList.push_back(qual);
+ } else {
+ // Normal 1:1 case
+ qualifierList.push_back(qual);
+ }
}
- result = addOutputArgumentConversions(*fnCandidate, *result->getAsOperator());
}
+
+ // Convert 'out' arguments. If it was a constant folded built-in, it won't be an aggregate anymore.
+ // Built-ins with a single argument aren't called with an aggregate, but they also don't have an output.
+ // Also, build the qualifier list for user function calls, which are always called with an aggregate.
+ // We don't do this is if there has been a decomposition, which will have added its own conversions
+ // for output parameters.
+ if (result == fnNode && result->getAsAggregate())
+ result = addOutputArgumentConversions(*fnCandidate, *result->getAsOperator());
}
}
// generic error recovery
- // TODO: simplification: localize all the error recoveries that look like this, and taking type into account to reduce cascades
+ // TODO: simplification: localize all the error recoveries that look like this, and taking type into account to
+ // reduce cascades
if (result == nullptr)
result = intermediate.addConstantUnion(0.0, EbtFloat, loc);
return result;
}
+// An initial argument list is difficult: it can be null, or a single node,
+// or an aggregate if more than one argument. Add one to the front, maintaining
+// this lack of uniformity.
+void HlslParseContext::pushFrontArguments(TIntermTyped* front, TIntermTyped*& arguments)
+{
+ if (arguments == nullptr)
+ arguments = front;
+ else if (arguments->getAsAggregate() != nullptr)
+ arguments->getAsAggregate()->getSequence().insert(arguments->getAsAggregate()->getSequence().begin(), front);
+ else
+ arguments = intermediate.growAggregate(front, arguments);
+}
+
//
// Add any needed implicit conversions for function-call arguments to input parameters.
//
void HlslParseContext::addInputArgumentConversions(const TFunction& function, TIntermTyped*& arguments)
{
TIntermAggregate* aggregate = arguments->getAsAggregate();
- const auto setArg = [&](int argNum, TIntermTyped* arg) {
+
+ // Replace a single argument with a single argument.
+ const auto setArg = [&](int paramNum, TIntermTyped* arg) {
if (function.getParamCount() == 1)
arguments = arg;
else {
- if (aggregate)
- aggregate->getSequence()[argNum] = arg;
- else
+ if (aggregate == nullptr)
arguments = arg;
+ else
+ aggregate->getSequence()[paramNum] = arg;
}
};
// Process each argument's conversion
- for (int i = 0; i < function.getParamCount(); ++i) {
- if (! function[i].type->getQualifier().isParamInput())
+ for (int param = 0; param < function.getParamCount(); ++param) {
+ if (! function[param].type->getQualifier().isParamInput())
continue;
// At this early point there is a slight ambiguity between whether an aggregate 'arguments'
@@ -3865,40 +5198,117 @@ void HlslParseContext::addInputArgumentConversions(const TFunction& function, TI
// means take 'arguments' itself as the one argument.
TIntermTyped* arg = function.getParamCount() == 1
? arguments->getAsTyped()
- : (aggregate ? aggregate->getSequence()[i]->getAsTyped() : arguments->getAsTyped());
- if (*function[i].type != arg->getType()) {
+ : (aggregate ?
+ aggregate->getSequence()[param]->getAsTyped() :
+ arguments->getAsTyped());
+ if (*function[param].type != arg->getType()) {
// In-qualified arguments just need an extra node added above the argument to
// convert to the correct type.
- TIntermTyped* convArg = intermediate.addConversion(EOpFunctionCall, *function[i].type, arg);
+ TIntermTyped* convArg = intermediate.addConversion(EOpFunctionCall, *function[param].type, arg);
if (convArg != nullptr)
- convArg = intermediate.addShapeConversion(EOpFunctionCall, *function[i].type, convArg);
+ convArg = intermediate.addUniShapeConversion(EOpFunctionCall, *function[param].type, convArg);
if (convArg != nullptr)
- setArg(i, convArg);
+ setArg(param, convArg);
else
- error(arg->getLoc(), "cannot convert input argument, argument", "", "%d", i);
+ error(arg->getLoc(), "cannot convert input argument, argument", "", "%d", param);
} else {
- if (wasFlattened(arg) || wasSplit(arg)) {
- // Will make a two-level subtree.
- // The deepest will copy member-by-member to build the structure to pass.
- // The level above that will be a two-operand EOpComma sequence that follows the copy by the
- // object itself.
- TVariable* internalAggregate = makeInternalVariable("aggShadow", *function[i].type);
- internalAggregate->getWritableType().getQualifier().makeTemporary();
- TIntermSymbol* internalSymbolNode = new TIntermSymbol(internalAggregate->getUniqueId(),
- internalAggregate->getName(),
- internalAggregate->getType());
- internalSymbolNode->setLoc(arg->getLoc());
- // This makes the deepest level, the member-wise copy
- TIntermAggregate* assignAgg = handleAssign(arg->getLoc(), EOpAssign, internalSymbolNode, arg)->getAsAggregate();
+ if (wasFlattened(arg)) {
+ // If both formal and calling arg are to be flattened, leave that to argument
+ // expansion, not conversion.
+ if (!shouldFlatten(*function[param].type, function[param].type->getQualifier().storage, true)) {
+ // Will make a two-level subtree.
+ // The deepest will copy member-by-member to build the structure to pass.
+ // The level above that will be a two-operand EOpComma sequence that follows the copy by the
+ // object itself.
+ TVariable* internalAggregate = makeInternalVariable("aggShadow", *function[param].type);
+ internalAggregate->getWritableType().getQualifier().makeTemporary();
+ TIntermSymbol* internalSymbolNode = new TIntermSymbol(internalAggregate->getUniqueId(),
+ internalAggregate->getName(),
+ internalAggregate->getType());
+ internalSymbolNode->setLoc(arg->getLoc());
+ // This makes the deepest level, the member-wise copy
+ TIntermAggregate* assignAgg = handleAssign(arg->getLoc(), EOpAssign,
+ internalSymbolNode, arg)->getAsAggregate();
+
+ // Now, pair that with the resulting aggregate.
+ assignAgg = intermediate.growAggregate(assignAgg, internalSymbolNode, arg->getLoc());
+ assignAgg->setOperator(EOpComma);
+ assignAgg->setType(internalAggregate->getType());
+ setArg(param, assignAgg);
+ }
+ }
+ }
+ }
+}
- // Now, pair that with the resulting aggregate.
- assignAgg = intermediate.growAggregate(assignAgg, internalSymbolNode, arg->getLoc());
- assignAgg->setOperator(EOpComma);
- assignAgg->setType(internalAggregate->getType());
- setArg(i, assignAgg);
+//
+// Add any needed implicit expansion of calling arguments from what the shader listed to what's
+// internally needed for the AST (given the constraints downstream).
+//
+void HlslParseContext::expandArguments(const TSourceLoc& loc, const TFunction& function, TIntermTyped*& arguments)
+{
+ TIntermAggregate* aggregate = arguments->getAsAggregate();
+ int functionParamNumberOffset = 0;
+
+ // Replace a single argument with a single argument.
+ const auto setArg = [&](int paramNum, TIntermTyped* arg) {
+ if (function.getParamCount() + functionParamNumberOffset == 1)
+ arguments = arg;
+ else {
+ if (aggregate == nullptr)
+ arguments = arg;
+ else
+ aggregate->getSequence()[paramNum] = arg;
+ }
+ };
+
+ // Replace a single argument with a list of arguments
+ const auto setArgList = [&](int paramNum, const TVector<TIntermTyped*>& args) {
+ if (args.size() == 1)
+ setArg(paramNum, args.front());
+ else if (args.size() > 1) {
+ if (function.getParamCount() + functionParamNumberOffset == 1) {
+ arguments = intermediate.makeAggregate(args.front());
+ std::for_each(args.begin() + 1, args.end(),
+ [&](TIntermTyped* arg) {
+ arguments = intermediate.growAggregate(arguments, arg);
+ });
+ } else {
+ auto it = aggregate->getSequence().erase(aggregate->getSequence().begin() + paramNum);
+ aggregate->getSequence().insert(it, args.begin(), args.end());
}
+ functionParamNumberOffset += (int)(args.size() - 1);
+ }
+ };
+
+ // Process each argument's conversion
+ for (int param = 0; param < function.getParamCount(); ++param) {
+ // At this early point there is a slight ambiguity between whether an aggregate 'arguments'
+ // is the single argument itself or its children are the arguments. Only one argument
+ // means take 'arguments' itself as the one argument.
+ TIntermTyped* arg = function.getParamCount() == 1
+ ? arguments->getAsTyped()
+ : (aggregate ?
+ aggregate->getSequence()[param + functionParamNumberOffset]->getAsTyped() :
+ arguments->getAsTyped());
+
+ if (wasFlattened(arg) && shouldFlatten(*function[param].type, function[param].type->getQualifier().storage, true)) {
+ // Need to pass the structure members instead of the structure.
+ TVector<TIntermTyped*> memberArgs;
+ for (int memb = 0; memb < (int)arg->getType().getStruct()->size(); ++memb)
+ memberArgs.push_back(flattenAccess(arg, memb));
+ setArgList(param + functionParamNumberOffset, memberArgs);
}
}
+
+ // TODO: if we need both hidden counter args (below) and struct expansion (above)
+ // the two algorithms need to be merged: Each assumes the list starts out 1:1 between
+ // parameters and arguments.
+
+ // If any argument is a pass-by-reference struct buffer with an associated counter
+ // buffer, we have to add another hidden parameter for that counter.
+ if (aggregate)
+ addStructBuffArguments(loc, aggregate);
}
//
@@ -3972,7 +5382,8 @@ TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& fu
TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, loc);
// This makes the deepest level, the member-wise copy
- TIntermTyped* tempAssign = handleAssign(arguments[i]->getLoc(), EOpAssign, arguments[i]->getAsTyped(), tempArgNode);
+ TIntermTyped* tempAssign = handleAssign(arguments[i]->getLoc(), EOpAssign, arguments[i]->getAsTyped(),
+ tempArgNode);
tempAssign = handleLvalue(arguments[i]->getLoc(), "assign", tempAssign);
conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc());
@@ -3994,6 +5405,55 @@ TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& fu
}
//
+// Add any needed "hidden" counter buffer arguments for function calls.
+//
+// Modifies the 'aggregate' argument if needed. Otherwise, is no-op.
+//
+void HlslParseContext::addStructBuffArguments(const TSourceLoc& loc, TIntermAggregate*& aggregate)
+{
+ // See if there are any SB types with counters.
+ const bool hasStructBuffArg =
+ std::any_of(aggregate->getSequence().begin(),
+ aggregate->getSequence().end(),
+ [this](const TIntermNode* node) {
+ return (node->getAsTyped() != nullptr) && hasStructBuffCounter(node->getAsTyped()->getType());
+ });
+
+ // Nothing to do, if we didn't find one.
+ if (! hasStructBuffArg)
+ return;
+
+ TIntermSequence argsWithCounterBuffers;
+
+ for (int param = 0; param < int(aggregate->getSequence().size()); ++param) {
+ argsWithCounterBuffers.push_back(aggregate->getSequence()[param]);
+
+ if (hasStructBuffCounter(aggregate->getSequence()[param]->getAsTyped()->getType())) {
+ const TIntermSymbol* blockSym = aggregate->getSequence()[param]->getAsSymbolNode();
+ if (blockSym != nullptr) {
+ TType counterType;
+ counterBufferType(loc, counterType);
+
+ const TString counterBlockName(getStructBuffCounterName(blockSym->getName()));
+
+ TVariable* variable = makeInternalVariable(counterBlockName, counterType);
+
+ // Mark this buffer as requiring a counter block. TODO: there should be a better
+ // way to track it.
+ structBufferCounter[counterBlockName] = true;
+
+ TIntermSymbol* sym = intermediate.addSymbol(*variable, loc);
+ argsWithCounterBuffers.push_back(sym);
+ }
+ }
+ }
+
+ // Swap with the temp list we've built up.
+ aggregate->getSequence().swap(argsWithCounterBuffers);
+}
+
+
+//
// Do additional checking of built-in function calls that is not caught
// by normal semantic checks on argument type, extension tagging, etc.
//
@@ -4033,7 +5493,8 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn
case EOpTextureGather:
// More than two arguments needs gpu_shader5, and rectangular or shadow needs gpu_shader5,
// otherwise, need GL_ARB_texture_gather.
- if (fnCandidate.getParamCount() > 2 || fnCandidate[0].type->getSampler().dim == EsdRect || fnCandidate[0].type->getSampler().shadow) {
+ if (fnCandidate.getParamCount() > 2 || fnCandidate[0].type->getSampler().dim == EsdRect ||
+ fnCandidate[0].type->getSampler().shadow) {
if (! fnCandidate[0].type->getSampler().shadow)
compArg = 2;
}
@@ -4088,14 +5549,15 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn
}
if (arg > 0) {
- if (! aggArgs[arg]->getAsConstantUnion())
+ if (aggArgs[arg]->getAsConstantUnion() == nullptr)
error(loc, "argument must be compile-time constant", "texel offset", "");
else {
const TType& type = aggArgs[arg]->getAsTyped()->getType();
for (int c = 0; c < type.getVectorSize(); ++c) {
int offset = aggArgs[arg]->getAsConstantUnion()->getConstArray()[c].getIConst();
if (offset > resources.maxProgramTexelOffset || offset < resources.minProgramTexelOffset)
- error(loc, "value is out of range:", "texel offset", "[gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]");
+ error(loc, "value is out of range:", "texel offset",
+ "[gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]");
}
}
}
@@ -4131,7 +5593,8 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn
// desktop 4.4 and later: swizzles may be used
const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true);
if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn)
- error(loc, "first argument must be an interpolant, or interpolant-array element", fnCandidate.getName().c_str(), "");
+ error(loc, "first argument must be an interpolant, or interpolant-array element",
+ fnCandidate.getName().c_str(), "");
}
break;
@@ -4141,9 +5604,13 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn
}
//
-// Handle seeing a built-in constructor in a grammar production.
+// Handle seeing something in a grammar production that can be done by calling
+// a constructor.
//
-TFunction* HlslParseContext::handleConstructorCall(const TSourceLoc& loc, const TType& type)
+// The constructor still must be "handled" by handleFunctionCall(), which will
+// then call handleConstructor().
+//
+TFunction* HlslParseContext::makeConstructorCall(const TSourceLoc& loc, const TType& type)
{
TOperator op = intermediate.mapTypeToConstructorOp(type);
@@ -4161,18 +5628,55 @@ TFunction* HlslParseContext::handleConstructorCall(const TSourceLoc& loc, const
// Handle seeing a "COLON semantic" at the end of a type declaration,
// by updating the type according to the semantic.
//
-void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, TBuiltInVariable builtIn, const TString& upperCase)
+void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, TBuiltInVariable builtIn,
+ const TString& upperCase)
{
- // adjust for stage in/out
+ // Parse and return semantic number. If limit is 0, it will be ignored. Otherwise, if the parsed
+ // semantic number is >= limit, errorMsg is issued and 0 is returned.
+ // TODO: it would be nicer if limit and errorMsg had default parameters, but some compilers don't yet
+ // accept those in lambda functions.
+ const auto getSemanticNumber = [this, loc](const TString& semantic, unsigned int limit, const char* errorMsg) -> unsigned int {
+ size_t pos = semantic.find_last_not_of("0123456789");
+ if (pos == std::string::npos)
+ return 0u;
+
+ unsigned int semanticNum = (unsigned int)atoi(semantic.c_str() + pos + 1);
+
+ if (limit != 0 && semanticNum >= limit) {
+ error(loc, errorMsg, semantic.c_str(), "");
+ return 0u;
+ }
+
+ return semanticNum;
+ };
switch(builtIn) {
+ case EbvNone:
+ // Get location numbers from fragment outputs, instead of
+ // auto-assigning them.
+ if (language == EShLangFragment && upperCase.compare(0, 9, "SV_TARGET") == 0) {
+ qualifier.layoutLocation = getSemanticNumber(upperCase, 0, nullptr);
+ nextOutLocation = std::max(nextOutLocation, qualifier.layoutLocation + 1u);
+ } else if (upperCase.compare(0, 15, "SV_CLIPDISTANCE") == 0) {
+ builtIn = EbvClipDistance;
+ qualifier.layoutLocation = getSemanticNumber(upperCase, maxClipCullRegs, "invalid clip semantic");
+ } else if (upperCase.compare(0, 15, "SV_CULLDISTANCE") == 0) {
+ builtIn = EbvCullDistance;
+ qualifier.layoutLocation = getSemanticNumber(upperCase, maxClipCullRegs, "invalid cull semantic");
+ }
+ break;
case EbvPosition:
+ // adjust for stage in/out
if (language == EShLangFragment)
builtIn = EbvFragCoord;
break;
- case EbvStencilRef:
+ case EbvFragStencilRef:
error(loc, "unimplemented; need ARB_shader_stencil_export", "SV_STENCILREF", "");
break;
+ case EbvTessLevelInner:
+ case EbvTessLevelOuter:
+ qualifier.patch = true;
+ break;
default:
break;
}
@@ -4249,6 +5753,7 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
}
// TODO: learn what all these really mean and how they interact with regNumber and subComponent
+ const std::vector<std::string>& resourceInfo = intermediate.getResourceSetBinding();
switch (std::tolower(desc[0])) {
case 'b':
case 't':
@@ -4256,6 +5761,19 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
case 's':
case 'u':
qualifier.layoutBinding = regNumber + subComponent;
+
+ // This handles per-register layout sets numbers. For the global mode which sets
+ // every symbol to the same value, see setLinkageLayoutSets().
+ if ((resourceInfo.size() % 3) == 0) {
+ // Apply per-symbol resource set and binding.
+ for (auto it = resourceInfo.cbegin(); it != resourceInfo.cend(); it = it + 3) {
+ if (strcmp(desc.c_str(), it[0].c_str()) == 0) {
+ qualifier.layoutSet = atoi(it[1].c_str());
+ qualifier.layoutBinding = atoi(it[2].c_str()) + subComponent;
+ break;
+ }
+ }
+ }
break;
default:
warn(loc, "ignoring unrecognized register type", "register", "%c", desc[0]);
@@ -4285,6 +5803,20 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
}
}
+// Convert to a scalar boolean, or if not allowed by HLSL semantics,
+// report an error and return nullptr.
+TIntermTyped* HlslParseContext::convertConditionalExpression(const TSourceLoc& loc, TIntermTyped* condition,
+ bool mustBeScalar)
+{
+ if (mustBeScalar && !condition->getType().isScalarOrVec1()) {
+ error(loc, "requires a scalar", "conditional expression", "");
+ return nullptr;
+ }
+
+ return intermediate.addConversion(EOpConstructBool, TType(EbtBool, EvqTemporary, condition->getVectorSize()),
+ condition);
+}
+
//
// Same error message for all places assignments don't work.
//
@@ -4411,6 +5943,33 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node
case EOpConstructDMat4x2:
case EOpConstructDMat4x3:
case EOpConstructDMat4x4:
+ case EOpConstructIMat2x2:
+ case EOpConstructIMat2x3:
+ case EOpConstructIMat2x4:
+ case EOpConstructIMat3x2:
+ case EOpConstructIMat3x3:
+ case EOpConstructIMat3x4:
+ case EOpConstructIMat4x2:
+ case EOpConstructIMat4x3:
+ case EOpConstructIMat4x4:
+ case EOpConstructUMat2x2:
+ case EOpConstructUMat2x3:
+ case EOpConstructUMat2x4:
+ case EOpConstructUMat3x2:
+ case EOpConstructUMat3x3:
+ case EOpConstructUMat3x4:
+ case EOpConstructUMat4x2:
+ case EOpConstructUMat4x3:
+ case EOpConstructUMat4x4:
+ case EOpConstructBMat2x2:
+ case EOpConstructBMat2x3:
+ case EOpConstructBMat2x4:
+ case EOpConstructBMat3x2:
+ case EOpConstructBMat3x3:
+ case EOpConstructBMat3x4:
+ case EOpConstructBMat4x2:
+ case EOpConstructBMat4x3:
+ case EOpConstructBMat4x4:
constructingMatrix = true;
break;
default:
@@ -4467,7 +6026,8 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node
if (type.isImplicitlySizedArray()) {
// auto adapt the constructor type to the number of arguments
type.changeOuterArraySize(function.getParamCount());
- } else if (type.getOuterArraySize() != function.getParamCount()) {
+ } else if (type.getOuterArraySize() != function.getParamCount() &&
+ type.computeNumComponents() > size) {
error(loc, "array constructor needs one argument per array element", "constructor", "");
return true;
}
@@ -4479,7 +6039,8 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node
TArraySizes& arraySizes = type.getArraySizes();
// At least the dimensionalities have to match.
- if (! function[0].type->isArray() || arraySizes.getNumDims() != function[0].type->getArraySizes().getNumDims() + 1) {
+ if (! function[0].type->isArray() ||
+ arraySizes.getNumDims() != function[0].type->getArraySizes().getNumDims() + 1) {
error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
return true;
}
@@ -4496,6 +6057,12 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node
}
}
+ // Some array -> array type casts are okay
+ if (arrayArg && function.getParamCount() == 1 && op != EOpConstructStruct && type.isArray() &&
+ !type.isArrayOfArrays() && !function[0].type->isArrayOfArrays() &&
+ type.getVectorSize() >= 1 && function[0].type->getVectorSize() >= 1)
+ return false;
+
if (arrayArg && op != EOpConstructStruct && ! type.isArrayOfArrays()) {
error(loc, "constructing non-array constituent from array argument", "constructor", "");
return true;
@@ -4510,7 +6077,7 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node
return true;
}
- if (op == EOpConstructStruct && ! type.isArray() && isZeroConstructor(node))
+ if (op == EOpConstructStruct && ! type.isArray() && isScalarConstructor(node))
return false;
if (op == EOpConstructStruct && ! type.isArray() && (int)type.getStruct()->size() != function.getParamCount()) {
@@ -4527,10 +6094,21 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node
return false;
}
-bool HlslParseContext::isZeroConstructor(const TIntermNode* node)
+// See if 'node', in the context of constructing aggregates, is a scalar argument
+// to a constructor.
+//
+bool HlslParseContext::isScalarConstructor(const TIntermNode* node)
{
- return node->getAsTyped()->isScalar() && node->getAsConstantUnion() &&
- node->getAsConstantUnion()->getConstArray()[0].getIConst() == 0;
+ // Obviously, it must be a scalar, but an aggregate node might not be fully
+ // completed yet: holding a sequence of initializers under an aggregate
+ // would not yet be typed, so don't check it's type. This corresponds to
+ // the aggregate operator also not being set yet. (An aggregate operation
+ // that legitimately yields a scalar will have a getOp() of that operator,
+ // not EOpNull.)
+
+ return node->getAsTyped() != nullptr &&
+ node->getAsTyped()->isScalar() &&
+ (node->getAsAggregate() == nullptr || node->getAsAggregate()->getOp() != EOpNull);
}
// Verify all the correct semantics for constructing a combined texture/sampler.
@@ -4586,7 +6164,8 @@ bool HlslParseContext::constructorTextureSamplerError(const TSourceLoc& loc, con
return true;
}
if (function.getType().getSampler().shadow != function[1].type->getSampler().shadow) {
- error(loc, "sampler-constructor second argument presence of shadow must match constructor presence of shadow", token, "");
+ error(loc, "sampler-constructor second argument presence of shadow must match constructor presence of shadow",
+ token, "");
return true;
}
@@ -4607,13 +6186,6 @@ bool HlslParseContext::voidErrorCheck(const TSourceLoc& loc, const TString& iden
return false;
}
-// Checks to see if the node (for the expression) contains a scalar boolean expression or not
-void HlslParseContext::boolCheck(const TSourceLoc& loc, const TIntermTyped* type)
-{
- if (type->getBasicType() != EbtBool || type->isArray() || type->isMatrix() || type->isVector())
- error(loc, "boolean expression expected", "", "");
-}
-
//
// Fix just a full qualifier (no variables or types yet, but qualifier is complete) at global level.
//
@@ -4683,7 +6255,8 @@ int HlslParseContext::computeSamplerTypeIndex(TSampler& sampler)
int shadowIndex = sampler.shadow ? 1 : 0;
int externalIndex = sampler.external ? 1 : 0;
- return EsdNumDims * (EbtNumTypes * (2 * (2 * arrayIndex + shadowIndex) + externalIndex) + sampler.type) + sampler.dim;
+ return EsdNumDims *
+ (EbtNumTypes * (2 * (2 * arrayIndex + shadowIndex) + externalIndex) + sampler.type) + sampler.dim;
}
//
@@ -4759,9 +6332,10 @@ void HlslParseContext::arrayDimMerge(TType& type, const TArraySizes* sizes)
// Do all the semantic checking for declaring or redeclaring an array, with and
// without a size, and make the right changes to the symbol table.
//
-void HlslParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol, bool track)
+void HlslParseContext::declareArray(const TSourceLoc& loc, const TString& identifier, const TType& type,
+ TSymbol*& symbol, bool track)
{
- if (! symbol) {
+ if (symbol == nullptr) {
bool currentScope;
symbol = symbolTable.find(identifier, nullptr, &currentScope);
@@ -4792,7 +6366,7 @@ void HlslParseContext::declareArray(const TSourceLoc& loc, TString& identifier,
// Process a redeclaration.
//
- if (! symbol) {
+ if (symbol == nullptr) {
error(loc, "array variable name expected", identifier.c_str(), "");
return;
}
@@ -4801,7 +6375,8 @@ void HlslParseContext::declareArray(const TSourceLoc& loc, TString& identifier,
TType& existingType = symbol->getWritableType();
if (existingType.isExplicitlySizedArray()) {
- // be more lenient for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size
+ // be more lenient for input arrays to geometry shaders and tessellation control outputs,
+ // where the redeclaration is the same size
return;
}
@@ -4857,7 +6432,8 @@ void HlslParseContext::updateImplicitArraySize(const TSourceLoc& loc, TIntermNod
//
// Enforce non-initializer type/qualifier rules.
//
-void HlslParseContext::fixConstInit(const TSourceLoc& loc, TString& identifier, TType& type, TIntermTyped*& initializer)
+void HlslParseContext::fixConstInit(const TSourceLoc& loc, const TString& identifier, TType& type,
+ TIntermTyped*& initializer)
{
//
// Make the qualifier make sense, given that there is an initializer.
@@ -4892,126 +6468,6 @@ TSymbol* HlslParseContext::redeclareBuiltinVariable(const TSourceLoc& /*loc*/, c
}
//
-// Either redeclare the requested block, or give an error message why it can't be done.
-//
-// TODO: functionality: explicitly sizing members of redeclared blocks is not giving them an explicit size
-void HlslParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newTypeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes)
-{
- // Redeclaring a built-in block...
-
- // Blocks with instance names are easy to find, lookup the instance name,
- // Anonymous blocks need to be found via a member.
- bool builtIn;
- TSymbol* block;
- if (instanceName)
- block = symbolTable.find(*instanceName, &builtIn);
- else
- block = symbolTable.find(newTypeList.front().type->getFieldName(), &builtIn);
-
- // If the block was not found, this must be a version/profile/stage
- // that doesn't have it, or the instance name is wrong.
- const char* errorName = instanceName ? instanceName->c_str() : newTypeList.front().type->getFieldName().c_str();
- if (! block) {
- error(loc, "no declaration found for redeclaration", errorName, "");
- return;
- }
- // Built-in blocks cannot be redeclared more than once, which if happened,
- // we'd be finding the already redeclared one here, rather than the built in.
- if (! builtIn) {
- error(loc, "can only redeclare a built-in block once, and before any use", blockName.c_str(), "");
- return;
- }
-
- // Copy the block to make a writable version, to insert into the block table after editing.
- block = symbolTable.copyUpDeferredInsert(block);
-
- if (block->getType().getBasicType() != EbtBlock) {
- error(loc, "cannot redeclare a non block as a block", errorName, "");
- return;
- }
-
- // Edit and error check the container against the redeclaration
- // - remove unused members
- // - ensure remaining qualifiers/types match
- TType& type = block->getWritableType();
- TTypeList::iterator member = type.getWritableStruct()->begin();
- size_t numOriginalMembersFound = 0;
- while (member != type.getStruct()->end()) {
- // look for match
- bool found = false;
- TTypeList::const_iterator newMember;
- TSourceLoc memberLoc;
- memberLoc.init();
- for (newMember = newTypeList.begin(); newMember != newTypeList.end(); ++newMember) {
- if (member->type->getFieldName() == newMember->type->getFieldName()) {
- found = true;
- memberLoc = newMember->loc;
- break;
- }
- }
-
- if (found) {
- ++numOriginalMembersFound;
- // - ensure match between redeclared members' types
- // - check for things that can't be changed
- // - update things that can be changed
- TType& oldType = *member->type;
- const TType& newType = *newMember->type;
- if (! newType.sameElementType(oldType))
- error(memberLoc, "cannot redeclare block member with a different type", member->type->getFieldName().c_str(), "");
- if (oldType.isArray() != newType.isArray())
- error(memberLoc, "cannot change arrayness of redeclared block member", member->type->getFieldName().c_str(), "");
- else if (! oldType.sameArrayness(newType) && oldType.isExplicitlySizedArray())
- error(memberLoc, "cannot change array size of redeclared block member", member->type->getFieldName().c_str(), "");
- if (newType.getQualifier().isMemory())
- error(memberLoc, "cannot add memory qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
- if (newType.getQualifier().hasLayout())
- error(memberLoc, "cannot add layout to redeclared block member", member->type->getFieldName().c_str(), "");
- if (newType.getQualifier().patch)
- error(memberLoc, "cannot add patch to redeclared block member", member->type->getFieldName().c_str(), "");
- oldType.getQualifier().centroid = newType.getQualifier().centroid;
- oldType.getQualifier().sample = newType.getQualifier().sample;
- oldType.getQualifier().invariant = newType.getQualifier().invariant;
- oldType.getQualifier().noContraction = newType.getQualifier().noContraction;
- oldType.getQualifier().smooth = newType.getQualifier().smooth;
- oldType.getQualifier().flat = newType.getQualifier().flat;
- oldType.getQualifier().nopersp = newType.getQualifier().nopersp;
-
- // go to next member
- ++member;
- } else {
- // For missing members of anonymous blocks that have been redeclared,
- // hide the original (shared) declaration.
- // Instance-named blocks can just have the member removed.
- if (instanceName)
- member = type.getWritableStruct()->erase(member);
- else {
- member->type->hideMember();
- ++member;
- }
- }
- }
-
- if (numOriginalMembersFound < newTypeList.size())
- error(loc, "block redeclaration has extra members", blockName.c_str(), "");
- if (type.isArray() != (arraySizes != nullptr))
- error(loc, "cannot change arrayness of redeclared block", blockName.c_str(), "");
- else if (type.isArray()) {
- if (type.isExplicitlySizedArray() && arraySizes->getOuterSize() == UnsizedArraySize)
- error(loc, "block already declared with size, can't redeclare as implicitly-sized", blockName.c_str(), "");
- else if (type.isExplicitlySizedArray() && type.getArraySizes() != *arraySizes)
- error(loc, "cannot change array size of redeclared block", blockName.c_str(), "");
- else if (type.isImplicitlySizedArray() && arraySizes->getOuterSize() != UnsizedArraySize)
- type.changeOuterArraySize(arraySizes->getOuterSize());
- }
-
- symbolTable.insert(*block);
-
- // Save it in the AST for linker use.
- trackLinkage(*block);
-}
-
-//
// Generate index to the array element in a structure buffer (SSBO)
//
TIntermTyped* HlslParseContext::indexStructBufferContent(const TSourceLoc& loc, TIntermTyped* buffer) const
@@ -5107,6 +6563,7 @@ void HlslParseContext::paramFix(TType& type)
type.getQualifier().storage = EvqConstReadOnly;
break;
case EvqGlobal:
+ case EvqUniform:
case EvqTemporary:
type.getQualifier().storage = EvqIn;
break;
@@ -5119,6 +6576,7 @@ void HlslParseContext::paramFix(TType& type)
bufferQualifier.storage = type.getQualifier().storage;
bufferQualifier.readonly = type.getQualifier().readonly;
bufferQualifier.coherent = type.getQualifier().coherent;
+ bufferQualifier.declaredBuiltIn = type.getQualifier().declaredBuiltIn;
type.getQualifier() = bufferQualifier;
break;
}
@@ -5295,7 +6753,8 @@ void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TQualifier& qua
// Put the id's layout qualifier value into the public type, for qualifiers having a number set.
// This is before we know any type information for error checking.
-void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TQualifier& qualifier, TString& id, const TIntermTyped* node)
+void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TQualifier& qualifier, TString& id,
+ const TIntermTyped* node)
{
const char* feature = "layout-id value";
// const char* nonLiteralFeature = "non-literal layout-id value";
@@ -5353,7 +6812,8 @@ void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TQualifier& qua
// "It is a compile-time error to specify an *xfb_buffer* that is greater than
// the implementation-dependent constant gl_MaxTransformFeedbackBuffers."
if (value >= resources.maxTransformFeedbackBuffers)
- error(loc, "buffer is too large:", id.c_str(), "gl_MaxTransformFeedbackBuffers is %d", resources.maxTransformFeedbackBuffers);
+ error(loc, "buffer is too large:", id.c_str(), "gl_MaxTransformFeedbackBuffers is %d",
+ resources.maxTransformFeedbackBuffers);
if (value >= (int)TQualifier::layoutXfbBufferEnd)
error(loc, "buffer is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbBufferEnd - 1);
else
@@ -5369,7 +6829,8 @@ void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TQualifier& qua
// "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the
// implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents."
if (value > 4 * resources.maxTransformFeedbackInterleavedComponents)
- error(loc, "1/4 stride is too large:", id.c_str(), "gl_MaxTransformFeedbackInterleavedComponents is %d", resources.maxTransformFeedbackInterleavedComponents);
+ error(loc, "1/4 stride is too large:", id.c_str(), "gl_MaxTransformFeedbackInterleavedComponents is %d",
+ resources.maxTransformFeedbackInterleavedComponents);
else if (value >= (int)TQualifier::layoutXfbStrideEnd)
error(loc, "stride is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbStrideEnd - 1);
if (value < (int)TQualifier::layoutXfbStrideEnd)
@@ -5563,18 +7024,17 @@ void HlslParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQuali
//
// Return the function symbol if found, otherwise nullptr.
//
-const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction& call, bool& builtIn,
+const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction& call, bool& builtIn, int& thisDepth,
TIntermTyped*& args)
{
- // const TFunction* function = nullptr;
-
if (symbolTable.isFunctionNameVariable(call.getName())) {
error(loc, "can't use function syntax on variable", call.getName().c_str(), "");
return nullptr;
}
// first, look for an exact match
- TSymbol* symbol = symbolTable.find(call.getMangledName(), &builtIn);
+ bool dummyScope;
+ TSymbol* symbol = symbolTable.find(call.getMangledName(), &builtIn, &dummyScope, &thisDepth);
if (symbol)
return symbol->getAsFunction();
@@ -5584,11 +7044,14 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction
TVector<const TFunction*> candidateList;
symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
- // These builtin ops can accept any type, so we bypass the argument selection
+ // These built-in ops can accept any type, so we bypass the argument selection
if (candidateList.size() == 1 && builtIn &&
(candidateList[0]->getBuiltInOp() == EOpMethodAppend ||
- candidateList[0]->getBuiltInOp() == EOpMethodRestartStrip)) {
-
+ candidateList[0]->getBuiltInOp() == EOpMethodRestartStrip ||
+ candidateList[0]->getBuiltInOp() == EOpMethodIncrementCounter ||
+ candidateList[0]->getBuiltInOp() == EOpMethodDecrementCounter ||
+ candidateList[0]->getBuiltInOp() == EOpMethodAppend ||
+ candidateList[0]->getBuiltInOp() == EOpMethodConsume)) {
return candidateList[0];
}
@@ -5668,6 +7131,7 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction
// shapes have to be convertible
if ((from.isScalarOrVec1() && to.isScalarOrVec1()) ||
(from.isScalarOrVec1() && to.isVector()) ||
+ (from.isScalarOrVec1() && to.isMatrix()) ||
(from.isVector() && to.isVector() && from.getVectorSize() >= to.getVectorSize()))
return true;
@@ -5758,7 +7222,7 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction
return nullptr;
}
- // For builtins, we can convert across the arguments. This will happen in several steps:
+ // For built-ins, we can convert across the arguments. This will happen in several steps:
// Step 1: If there's an exact match, use it.
// Step 2a: Otherwise, get the operator from the best match and promote arguments:
// Step 2b: reconstruct the TFunction based on the new arg types
@@ -5846,7 +7310,7 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction
// 'parseType' is the type part of the declaration (to the left)
// 'arraySizes' is the arrayness tagged on the identifier (to the right)
//
-void HlslParseContext::declareTypedef(const TSourceLoc& loc, TString& identifier, const TType& parseType)
+void HlslParseContext::declareTypedef(const TSourceLoc& loc, const TString& identifier, const TType& parseType)
{
TVariable* typeSymbol = new TVariable(&identifier, parseType, true);
if (! symbolTable.insert(*typeSymbol))
@@ -5933,6 +7397,11 @@ void HlslParseContext::declareStruct(const TSourceLoc& loc, TString& structName,
}
if (newLists.uniform) {
newMember(newUniformMember);
+
+ // inherit default matrix layout (changeable via #pragma pack_matrix), if none given.
+ if (member->type->isMatrix() && member->type->getQualifier().layoutMatrix == ElmNone)
+ newUniformMember.type->getQualifier().layoutMatrix = globalUniformDefaults.layoutMatrix;
+
correctUniform(newUniformMember.type->getQualifier());
newLists.uniform->push_back(newUniformMember);
}
@@ -5977,11 +7446,27 @@ TSymbol* HlslParseContext::lookupUserType(const TString& typeName, TType& type)
// 'parseType' is the type part of the declaration (to the left)
// 'arraySizes' is the arrayness tagged on the identifier (to the right)
//
-TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, TType& type, TIntermTyped* initializer)
+TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, const TString& identifier, TType& type,
+ TIntermTyped* initializer)
{
if (voidErrorCheck(loc, identifier, type.getBasicType()))
return nullptr;
+ // Global consts with initializers that are non-const act like EvqGlobal in HLSL.
+ // This test is implicitly recursive, because initializers propagate constness
+ // up the aggregate node tree during creation. E.g, for:
+ // { { 1, 2 }, { 3, 4 } }
+ // the initializer list is marked EvqConst at the top node, and remains so here. However:
+ // { 1, { myvar, 2 }, 3 }
+ // is not a const intializer, and still becomes EvqGlobal here.
+
+ const bool nonConstInitializer = (initializer != nullptr && initializer->getQualifier().storage != EvqConst);
+
+ if (type.getQualifier().storage == EvqConst && symbolTable.atGlobalLevel() && nonConstInitializer) {
+ // Force to global
+ type.getQualifier().storage = EvqGlobal;
+ }
+
// make const and initialization consistent
fixConstInit(loc, identifier, type, initializer);
@@ -5990,7 +7475,7 @@ TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& i
inheritGlobalDefaults(type.getQualifier());
- const bool flattenVar = shouldFlattenUniform(type);
+ const bool flattenVar = shouldFlatten(type, type.getQualifier().storage, true);
// correct IO in the type
switch (type.getQualifier().storage) {
@@ -6018,33 +7503,28 @@ TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& i
declareArray(loc, identifier, type, symbol, !flattenVar);
} else {
// non-array case
- if (! symbol)
+ if (symbol == nullptr)
symbol = declareNonArray(loc, identifier, type, !flattenVar);
else if (type != symbol->getType())
error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str());
}
+ if (symbol == nullptr)
+ return nullptr;
+
if (flattenVar)
- flatten(loc, *symbol->getAsVariable());
+ flatten(*symbol->getAsVariable(), symbolTable.atGlobalLevel());
- if (! symbol)
+ if (initializer == nullptr)
return nullptr;
// Deal with initializer
- TIntermNode* initNode = nullptr;
- if (symbol && initializer) {
- if (flattenVar)
- error(loc, "flattened array with initializer list unsupported", identifier.c_str(), "");
-
- TVariable* variable = symbol->getAsVariable();
- if (! variable) {
- error(loc, "initializer requires a variable, not a member", identifier.c_str(), "");
- return nullptr;
- }
- initNode = executeInitializer(loc, initializer, variable);
+ TVariable* variable = symbol->getAsVariable();
+ if (variable == nullptr) {
+ error(loc, "initializer requires a variable, not a member", identifier.c_str(), "");
+ return nullptr;
}
-
- return initNode;
+ return executeInitializer(loc, initializer, variable);
}
// Pick up global defaults from the provide global defaults into dst.
@@ -6073,13 +7553,24 @@ TVariable* HlslParseContext::makeInternalVariable(const char* name, const TType&
return variable;
}
+// Make a symbol node holding a new internal temporary variable.
+TIntermSymbol* HlslParseContext::makeInternalVariableNode(const TSourceLoc& loc, const char* name,
+ const TType& type) const
+{
+ TVariable* tmpVar = makeInternalVariable(name, type);
+ tmpVar->getWritableType().getQualifier().makeTemporary();
+
+ return intermediate.addSymbol(*tmpVar, loc);
+}
+
//
// Declare a non-array variable, the main point being there is no redeclaration
// for resizing allowed.
//
// Return the successfully declared variable.
//
-TVariable* HlslParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type, bool track)
+TVariable* HlslParseContext::declareNonArray(const TSourceLoc& loc, const TString& identifier, const TType& type,
+ bool track)
{
// make a new variable
TVariable* variable = new TVariable(&identifier, type);
@@ -6123,8 +7614,8 @@ TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TInterm
skeletalType.shallowCopy(variable->getType());
skeletalType.getQualifier().makeTemporary();
if (initializer->getAsAggregate() && initializer->getAsAggregate()->getOp() == EOpNull)
- initializer = convertInitializerList(loc, skeletalType, initializer);
- if (! initializer) {
+ initializer = convertInitializerList(loc, skeletalType, initializer, nullptr);
+ if (initializer == nullptr) {
// error recovery; don't leave const without constant values
if (qualifier == EvqConst)
variable->getWritableType().getQualifier().storage = EvqTemporary;
@@ -6153,13 +7644,8 @@ TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TInterm
variable->getWritableType().getQualifier().storage = EvqTemporary;
return nullptr;
}
- if (qualifier == EvqConst && symbolTable.atGlobalLevel() && initializer->getType().getQualifier().storage != EvqConst) {
- error(loc, "global const initializers must be constant", "=", "'%s'", variable->getType().getCompleteString().c_str());
- variable->getWritableType().getQualifier().storage = EvqTemporary;
- return nullptr;
- }
- // Const variables require a constant initializer, depending on version
+ // Const variables require a constant initializer
if (qualifier == EvqConst) {
if (initializer->getType().getQualifier().storage != EvqConst) {
variable->getWritableType().getQualifier().storage = EvqConstReadOnly;
@@ -6171,7 +7657,10 @@ TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TInterm
// Compile-time tagging of the variable with its constant value...
initializer = intermediate.addConversion(EOpAssign, variable->getType(), initializer);
- if (! initializer || ! initializer->getAsConstantUnion() || variable->getType() != initializer->getType()) {
+ if (initializer != nullptr && variable->getType() != initializer->getType())
+ initializer = intermediate.addUniShapeConversion(EOpAssign, variable->getType(), initializer);
+ if (initializer == nullptr || !initializer->getAsConstantUnion() ||
+ variable->getType() != initializer->getType()) {
error(loc, "non-matching or non-convertible constant type for const initializer",
variable->getType().getStorageQualifierString(), "");
variable->getWritableType().getQualifier().storage = EvqTemporary;
@@ -6184,9 +7673,8 @@ TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TInterm
specializationCheck(loc, initializer->getType(), "initializer");
TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc);
TIntermNode* initNode = handleAssign(loc, EOpAssign, intermSymbol, initializer);
- if (! initNode)
+ if (initNode == nullptr)
assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString());
-
return initNode;
}
@@ -6205,7 +7693,8 @@ TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TInterm
//
// Returns nullptr if there is an error.
//
-TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, const TType& type, TIntermTyped* initializer)
+TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, const TType& type,
+ TIntermTyped* initializer, TIntermTyped* scalarInit)
{
// Will operate recursively. Once a subtree is found that is constructor style,
// everything below it is already good: Only the "top part" of the initializer
@@ -6213,7 +7702,7 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
// see if we have bottomed out in the tree within the initializer-list part
TIntermAggregate* initList = initializer->getAsAggregate();
- if (! initList || initList->getOp() != EOpNull) {
+ if (initList == nullptr || initList->getOp() != EOpNull) {
// We don't have a list, but if it's a scalar and the 'type' is a
// composite, we need to lengthen below to make it useful.
// Otherwise, this is an already formed object to initialize with.
@@ -6251,27 +7740,37 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
}
// lengthen list to be long enough
- lengthenList(loc, initList->getSequence(), arrayType.getOuterArraySize());
+ lengthenList(loc, initList->getSequence(), arrayType.getOuterArraySize(), scalarInit);
// recursively process each element
TType elementType(arrayType, 0); // dereferenced type
for (int i = 0; i < arrayType.getOuterArraySize(); ++i) {
- initList->getSequence()[i] = convertInitializerList(loc, elementType, initList->getSequence()[i]->getAsTyped());
+ initList->getSequence()[i] = convertInitializerList(loc, elementType,
+ initList->getSequence()[i]->getAsTyped(), scalarInit);
if (initList->getSequence()[i] == nullptr)
return nullptr;
}
return addConstructor(loc, initList, arrayType);
} else if (type.isStruct()) {
+ // do we have implicit assignments to opaques?
+ for (size_t i = initList->getSequence().size(); i < type.getStruct()->size(); ++i) {
+ if ((*type.getStruct())[i].type->containsOpaque()) {
+ error(loc, "cannot implicitly initialize opaque members", "initializer list", "");
+ return nullptr;
+ }
+ }
+
// lengthen list to be long enough
- lengthenList(loc, initList->getSequence(), static_cast<int>(type.getStruct()->size()));
+ lengthenList(loc, initList->getSequence(), static_cast<int>(type.getStruct()->size()), scalarInit);
if (type.getStruct()->size() != initList->getSequence().size()) {
error(loc, "wrong number of structure members", "initializer list", "");
return nullptr;
}
for (size_t i = 0; i < type.getStruct()->size(); ++i) {
- initList->getSequence()[i] = convertInitializerList(loc, *(*type.getStruct())[i].type, initList->getSequence()[i]->getAsTyped());
+ initList->getSequence()[i] = convertInitializerList(loc, *(*type.getStruct())[i].type,
+ initList->getSequence()[i]->getAsTyped(), scalarInit);
if (initList->getSequence()[i] == nullptr)
return nullptr;
}
@@ -6282,7 +7781,7 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
// a constructor; no further processing needed.
} else {
// lengthen list to be long enough
- lengthenList(loc, initList->getSequence(), type.getMatrixCols());
+ lengthenList(loc, initList->getSequence(), type.getMatrixCols(), scalarInit);
if (type.getMatrixCols() != (int)initList->getSequence().size()) {
error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString().c_str());
@@ -6290,23 +7789,25 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
}
TType vectorType(type, 0); // dereferenced type
for (int i = 0; i < type.getMatrixCols(); ++i) {
- initList->getSequence()[i] = convertInitializerList(loc, vectorType, initList->getSequence()[i]->getAsTyped());
+ initList->getSequence()[i] = convertInitializerList(loc, vectorType,
+ initList->getSequence()[i]->getAsTyped(), scalarInit);
if (initList->getSequence()[i] == nullptr)
return nullptr;
}
}
} else if (type.isVector()) {
// lengthen list to be long enough
- lengthenList(loc, initList->getSequence(), type.getVectorSize());
+ lengthenList(loc, initList->getSequence(), type.getVectorSize(), scalarInit);
// error check; we're at bottom, so work is finished below
if (type.getVectorSize() != (int)initList->getSequence().size()) {
- error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString().c_str());
+ error(loc, "wrong vector size (or rows in a matrix column):", "initializer list",
+ type.getCompleteString().c_str());
return nullptr;
}
} else if (type.isScalar()) {
// lengthen list to be long enough
- lengthenList(loc, initList->getSequence(), 1);
+ lengthenList(loc, initList->getSequence(), 1, scalarInit);
if ((int)initList->getSequence().size() != 1) {
error(loc, "scalar expected one element:", "initializer list", type.getCompleteString().c_str());
@@ -6319,9 +7820,9 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
// Now that the subtree is processed, process this node as if the
// initializer list is a set of arguments to a constructor.
- TIntermNode* emulatedConstructorArguments;
+ TIntermTyped* emulatedConstructorArguments;
if (initList->getSequence().size() == 1)
- emulatedConstructorArguments = initList->getSequence()[0];
+ emulatedConstructorArguments = initList->getSequence()[0]->getAsTyped();
else
emulatedConstructorArguments = initList;
@@ -6331,10 +7832,21 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
// Lengthen list to be long enough to cover any gap from the current list size
// to 'size'. If the list is longer, do nothing.
// The value to lengthen with is the default for short lists.
-void HlslParseContext::lengthenList(const TSourceLoc& loc, TIntermSequence& list, int size)
+//
+// By default, lists that are too short due to lack of initializers initialize to zero.
+// Alternatively, it could be a scalar initializer for a structure. Both cases are handled,
+// based on whether something is passed in as 'scalarInit'.
+//
+// 'scalarInit' must be safe to use each time this is called (no side effects replication).
+//
+void HlslParseContext::lengthenList(const TSourceLoc& loc, TIntermSequence& list, int size, TIntermTyped* scalarInit)
{
- for (int c = (int)list.size(); c < size; ++c)
- list.push_back(intermediate.addConstantUnion(0, loc));
+ for (int c = (int)list.size(); c < size; ++c) {
+ if (scalarInit == nullptr)
+ list.push_back(intermediate.addConstantUnion(0, loc));
+ else
+ list.push_back(scalarInit);
+ }
}
//
@@ -6343,15 +7855,42 @@ void HlslParseContext::lengthenList(const TSourceLoc& loc, TIntermSequence& list
//
// Returns nullptr for an error or the constructed node (aggregate or typed) for no error.
//
-TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* node, const TType& type)
+TIntermTyped* HlslParseContext::handleConstructor(const TSourceLoc& loc, TIntermTyped* node, const TType& type)
{
- if (node == nullptr || node->getAsTyped() == nullptr)
+ if (node == nullptr)
return nullptr;
- // Handle the idiom "(struct type)0"
- if (type.isStruct() && isZeroConstructor(node))
- return convertInitializerList(loc, type, intermediate.makeAggregate(loc));
+ // Handle the idiom "(struct type)<scalar value>"
+ if (type.isStruct() && isScalarConstructor(node)) {
+ // 'node' will almost always get used multiple times, so should not be used directly,
+ // it would create a DAG instead of a tree, which might be okay (would
+ // like to formalize that for constants and symbols), but if it has
+ // side effects, they would get executed multiple times, which is not okay.
+ if (node->getAsConstantUnion() == nullptr && node->getAsSymbolNode() == nullptr) {
+ TIntermAggregate* seq = intermediate.makeAggregate(loc);
+ TIntermSymbol* copy = makeInternalVariableNode(loc, "scalarCopy", node->getType());
+ seq = intermediate.growAggregate(seq, intermediate.addBinaryNode(EOpAssign, copy, node, loc));
+ seq = intermediate.growAggregate(seq, convertInitializerList(loc, type, intermediate.makeAggregate(loc), copy));
+ seq->setOp(EOpComma);
+ seq->setType(type);
+ return seq;
+ } else
+ return convertInitializerList(loc, type, intermediate.makeAggregate(loc), node);
+ }
+
+ return addConstructor(loc, node, type);
+}
+// Add a constructor, either from the grammar, or other programmatic reasons.
+//
+// 'node' is what to construct from.
+// 'type' is what type to construct.
+//
+// Returns the constructed object.
+// Return nullptr if it can't be done.
+//
+TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermTyped* node, const TType& type)
+{
TIntermAggregate* aggrNode = node->getAsAggregate();
TOperator op = intermediate.mapTypeToConstructorOp(type);
@@ -6372,8 +7911,8 @@ TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermNod
elementType.shallowCopy(type);
bool singleArg;
- if (aggrNode) {
- if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1)
+ if (aggrNode != nullptr) {
+ if (aggrNode->getOp() != EOpNull)
singleArg = true;
else
singleArg = false;
@@ -6382,14 +7921,27 @@ TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermNod
TIntermTyped *newNode;
if (singleArg) {
+ // Handle array -> array conversion
+ // Constructing an array of one type from an array of another type is allowed,
+ // assuming there are enough components available (semantic-checked earlier).
+ if (type.isArray() && node->isArray())
+ newNode = convertArray(node, type);
+
// If structure constructor or array constructor is being called
- // for only one parameter inside the structure, we need to call constructAggregate function once.
- if (type.isArray())
+ // for only one parameter inside the aggregate, we need to call constructAggregate function once.
+ else if (type.isArray())
newNode = constructAggregate(node, elementType, 1, node->getLoc());
else if (op == EOpConstructStruct)
newNode = constructAggregate(node, *(*memberTypes).type, 1, node->getLoc());
- else
- newNode = constructBuiltIn(type, op, node->getAsTyped(), node->getLoc(), false);
+ else {
+ // shape conversion for matrix constructor from scalar. HLSL semantics are: scalar
+ // is replicated into every element of the matrix (not just the diagnonal), so
+ // that is handled specially here.
+ if (type.isMatrix() && node->getType().isScalarOrVec1())
+ node = intermediate.addShapeConversion(type, node);
+
+ newNode = constructBuiltIn(type, op, node, node->getLoc(), false);
+ }
if (newNode && (type.isArray() || op == EOpConstructStruct))
newNode = intermediate.setAggregateOperator(newNode, EOpConstructStruct, type, loc);
@@ -6400,7 +7952,7 @@ TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermNod
//
// Handle list of arguments.
//
- TIntermSequence &sequenceVector = aggrNode->getSequence(); // Stores the information about the parameter to the constructor
+ TIntermSequence& sequenceVector = aggrNode->getSequence(); // Stores the information about the parameter to the constructor
// if the structure constructor contains more than one parameter, then construct
// each parameter
@@ -6437,7 +7989,8 @@ TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermNod
//
// Returns nullptr for an error or the constructed node.
//
-TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op, TIntermTyped* node, const TSourceLoc& loc, bool subset)
+TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op, TIntermTyped* node,
+ const TSourceLoc& loc, bool subset)
{
TIntermTyped* newNode;
TOperator basicOp;
@@ -6481,6 +8034,15 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
case EOpConstructIVec2:
case EOpConstructIVec3:
case EOpConstructIVec4:
+ case EOpConstructIMat2x2:
+ case EOpConstructIMat2x3:
+ case EOpConstructIMat2x4:
+ case EOpConstructIMat3x2:
+ case EOpConstructIMat3x3:
+ case EOpConstructIMat3x4:
+ case EOpConstructIMat4x2:
+ case EOpConstructIMat4x3:
+ case EOpConstructIMat4x4:
case EOpConstructInt:
basicOp = EOpConstructInt;
break;
@@ -6488,6 +8050,15 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
case EOpConstructUVec2:
case EOpConstructUVec3:
case EOpConstructUVec4:
+ case EOpConstructUMat2x2:
+ case EOpConstructUMat2x3:
+ case EOpConstructUMat2x4:
+ case EOpConstructUMat3x2:
+ case EOpConstructUMat3x3:
+ case EOpConstructUMat3x4:
+ case EOpConstructUMat4x2:
+ case EOpConstructUMat4x3:
+ case EOpConstructUMat4x4:
case EOpConstructUint:
basicOp = EOpConstructUint;
break;
@@ -6495,6 +8066,15 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
case EOpConstructBVec2:
case EOpConstructBVec3:
case EOpConstructBVec4:
+ case EOpConstructBMat2x2:
+ case EOpConstructBMat2x3:
+ case EOpConstructBMat2x4:
+ case EOpConstructBMat3x2:
+ case EOpConstructBMat3x3:
+ case EOpConstructBMat3x4:
+ case EOpConstructBMat4x2:
+ case EOpConstructBMat4x3:
+ case EOpConstructBMat4x4:
case EOpConstructBool:
basicOp = EOpConstructBool;
break;
@@ -6522,15 +8102,88 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
return intermediate.setAggregateOperator(newNode, op, type, loc);
}
+// Convert the array in node to the requested type, which is also an array.
+// Returns nullptr on failure, otherwise returns aggregate holding the list of
+// elements needed to construct the array.
+TIntermTyped* HlslParseContext::convertArray(TIntermTyped* node, const TType& type)
+{
+ assert(node->isArray() && type.isArray());
+ if (node->getType().computeNumComponents() < type.computeNumComponents())
+ return nullptr;
+
+ // TODO: write an argument replicator, for the case the argument should not be
+ // executed multiple times, yet multiple copies are needed.
+
+ TIntermTyped* constructee = node->getAsTyped();
+ // track where we are in consuming the argument
+ int constructeeElement = 0;
+ int constructeeComponent = 0;
+
+ // bump up to the next component to consume
+ const auto getNextComponent = [&]() {
+ TIntermTyped* component;
+ component = handleBracketDereference(node->getLoc(), constructee,
+ intermediate.addConstantUnion(constructeeElement, node->getLoc()));
+ if (component->isVector())
+ component = handleBracketDereference(node->getLoc(), component,
+ intermediate.addConstantUnion(constructeeComponent, node->getLoc()));
+ // bump component pointer up
+ ++constructeeComponent;
+ if (constructeeComponent == constructee->getVectorSize()) {
+ constructeeComponent = 0;
+ ++constructeeElement;
+ }
+ return component;
+ };
+
+ // make one subnode per constructed array element
+ TIntermAggregate* constructor = nullptr;
+ TType derefType(type, 0);
+ TType speculativeComponentType(derefType, 0);
+ TType* componentType = derefType.isVector() ? &speculativeComponentType : &derefType;
+ TOperator componentOp = intermediate.mapTypeToConstructorOp(*componentType);
+ TType crossType(node->getBasicType(), EvqTemporary, type.getVectorSize());
+ for (int e = 0; e < type.getOuterArraySize(); ++e) {
+ // construct an element
+ TIntermTyped* elementArg;
+ if (type.getVectorSize() == constructee->getVectorSize()) {
+ // same element shape
+ elementArg = handleBracketDereference(node->getLoc(), constructee,
+ intermediate.addConstantUnion(e, node->getLoc()));
+ } else {
+ // mismatched element shapes
+ if (type.getVectorSize() == 1)
+ elementArg = getNextComponent();
+ else {
+ // make a vector
+ TIntermAggregate* elementConstructee = nullptr;
+ for (int c = 0; c < type.getVectorSize(); ++c)
+ elementConstructee = intermediate.growAggregate(elementConstructee, getNextComponent());
+ elementArg = addConstructor(node->getLoc(), elementConstructee, crossType);
+ }
+ }
+ // convert basic types
+ elementArg = intermediate.addConversion(componentOp, derefType, elementArg);
+ if (elementArg == nullptr)
+ return nullptr;
+ // combine with top-level constructor
+ constructor = intermediate.growAggregate(constructor, elementArg);
+ }
+
+ return constructor;
+}
+
// This function tests for the type of the parameters to the structure or array constructor. Raises
// an error message if the expected type does not match the parameter passed to the constructor.
//
// Returns nullptr for an error or the input node itself if the expected and the given parameter types match.
//
-TIntermTyped* HlslParseContext::constructAggregate(TIntermNode* node, const TType& type, int paramCount, const TSourceLoc& loc)
+TIntermTyped* HlslParseContext::constructAggregate(TIntermNode* node, const TType& type, int paramCount,
+ const TSourceLoc& loc)
{
+ // Handle cases that map more 1:1 between constructor arguments and constructed.
TIntermTyped* converted = intermediate.addConversion(EOpConstructStruct, type, node->getAsTyped());
- if (! converted || converted->getType() != type) {
+ if (converted == nullptr || converted->getType() != type) {
error(loc, "", "constructor", "cannot convert parameter %d from '%s' to '%s'", paramCount,
node->getAsTyped()->getType().getCompleteString().c_str(), type.getCompleteString().c_str());
@@ -6580,17 +8233,17 @@ void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TS
case EvqBuffer:
correctUniform(type.getQualifier());
if (it != ioTypeMap.end() && it->second.uniform)
- type.setStruct(it->second.uniform);
+ memberType.setStruct(it->second.uniform);
break;
case EvqVaryingIn:
correctInput(type.getQualifier());
if (it != ioTypeMap.end() && it->second.input)
- type.setStruct(it->second.input);
+ memberType.setStruct(it->second.input);
break;
case EvqVaryingOut:
correctOutput(type.getQualifier());
if (it != ioTypeMap.end() && it->second.output)
- type.setStruct(it->second.output);
+ memberType.setStruct(it->second.output);
break;
default:
break;
@@ -6598,13 +8251,6 @@ void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TS
}
}
- // This might be a redeclaration of a built-in block. If so, redeclareBuiltinBlock() will
- // do all the rest.
- // if (! symbolTable.atBuiltInLevel() && builtInName(*blockName)) {
- // redeclareBuiltinBlock(loc, typeList, *blockName, instanceName, arraySizes);
- // return;
- //}
-
// Make default block qualification, and adjust the member qualifications
TQualifier defaultQualification;
@@ -6683,21 +8329,23 @@ void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TS
// Add the variable, as anonymous or named instanceName.
// Make an anonymous variable if no name was provided.
- if (! instanceName)
+ if (instanceName == nullptr)
instanceName = NewPoolTString("");
TVariable& variable = *new TVariable(instanceName, blockType);
if (! symbolTable.insert(variable)) {
if (*instanceName == "")
- error(loc, "nameless block contains a member that already has a name at global scope", "" /* blockName->c_str() */, "");
+ error(loc, "nameless block contains a member that already has a name at global scope",
+ "" /* blockName->c_str() */, "");
else
error(loc, "block instance name redefinition", variable.getName().c_str(), "");
return;
}
- // Save it in the AST for linker use.
- trackLinkage(variable);
+ // Save it in the AST for linker use.
+ if (symbolTable.atGlobalLevel())
+ trackLinkage(variable);
}
//
@@ -6737,7 +8385,8 @@ void HlslParseContext::fixBlockLocations(const TSourceLoc& loc, TQualifier& qual
memberQualifier.layoutLocation = nextLocation;
memberQualifier.layoutComponent = 0;
}
- nextLocation = memberQualifier.layoutLocation + intermediate.computeTypeLocationSize(*typeList[member].type);
+ nextLocation = memberQualifier.layoutLocation +
+ intermediate.computeTypeLocationSize(*typeList[member].type);
}
}
}
@@ -6800,8 +8449,9 @@ void HlslParseContext::fixBlockUniformOffsets(const TQualifier& qualifier, TType
int dummyStride;
int memberAlignment = intermediate.getBaseAlignment(*typeList[member].type, memberSize, dummyStride,
qualifier.layoutPacking == ElpStd140,
- subMatrixLayout != ElmNone ? subMatrixLayout == ElmRowMajor
- : qualifier.layoutMatrix == ElmRowMajor);
+ subMatrixLayout != ElmNone
+ ? subMatrixLayout == ElmRowMajor
+ : qualifier.layoutMatrix == ElmRowMajor);
if (memberQualifier.hasOffset()) {
// "The specified offset must be a multiple
// of the base alignment of the type of the block member it qualifies, or a compile-time error results."
@@ -6833,7 +8483,7 @@ void HlslParseContext::fixBlockUniformOffsets(const TQualifier& qualifier, TType
void HlslParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier qualifier, const TString& identifier)
{
TSymbol* symbol = symbolTable.find(identifier);
- if (! symbol) {
+ if (symbol == nullptr) {
error(loc, "identifier not previously declared", identifier.c_str(), "");
return;
}
@@ -6909,6 +8559,11 @@ bool HlslParseContext::handleInputGeometry(const TSourceLoc& loc, const TLayoutG
//
bool HlslParseContext::handleOutputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry)
{
+ // If this is not a geometry shader, ignore. It might be a mixed shader including several stages.
+ // Since that's an OK situation, return true for success.
+ if (language != EShLangGeometry)
+ return true;
+
switch (geometry) {
case ElgPoints:
case ElgLineStrip:
@@ -6927,6 +8582,32 @@ bool HlslParseContext::handleOutputGeometry(const TSourceLoc& loc, const TLayout
}
//
+// Selection hints
+//
+TSelectionControl HlslParseContext::handleSelectionControl(const TAttributeMap& attributes) const
+{
+ if (attributes.contains(EatFlatten))
+ return ESelectionControlFlatten;
+ else if (attributes.contains(EatBranch))
+ return ESelectionControlDontFlatten;
+ else
+ return ESelectionControlNone;
+}
+
+//
+// Loop hints
+//
+TLoopControl HlslParseContext::handleLoopControl(const TAttributeMap& attributes) const
+{
+ if (attributes.contains(EatUnroll))
+ return ELoopControlUnroll;
+ else if (attributes.contains(EatLoop))
+ return ELoopControlDontUnroll;
+ else
+ return ELoopControlNone;
+}
+
+//
// Updating default qualifier for the case of a declaration with just a qualifier,
// no type, block, or identifier.
//
@@ -6952,12 +8633,14 @@ void HlslParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc,
case ElgIsolines:
break;
default:
- error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
+ error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry),
+ "");
}
} else if (publicType.qualifier.storage == EvqVaryingOut) {
handleOutputGeometry(loc, publicType.shaderQualifiers.geometry);
} else
- error(loc, "cannot apply to:", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), GetStorageQualifierString(publicType.qualifier.storage));
+ error(loc, "cannot apply to:", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry),
+ GetStorageQualifierString(publicType.qualifier.storage));
}
if (publicType.shaderQualifiers.spacing != EvsNone)
intermediate.setVertexSpacing(publicType.shaderQualifiers.spacing);
@@ -7015,7 +8698,8 @@ void HlslParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc,
globalOutputDefaults.layoutXfbBuffer = qualifier.layoutXfbBuffer;
if (globalOutputDefaults.hasXfbBuffer() && qualifier.hasXfbStride()) {
if (! intermediate.setXfbBufferStride(globalOutputDefaults.layoutXfbBuffer, qualifier.layoutXfbStride))
- error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d", qualifier.layoutXfbBuffer);
+ error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d",
+ qualifier.layoutXfbBuffer);
}
break;
default:
@@ -7064,7 +8748,8 @@ void HlslParseContext::wrapupSwitchSubsequence(TIntermAggregate* statements, TIn
// Turn the top-level node sequence built up of wrapupSwitchSubsequence
// into a switch node.
//
-TIntermNode* HlslParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* expression, TIntermAggregate* lastStatements)
+TIntermNode* HlslParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* expression,
+ TIntermAggregate* lastStatements, TSelectionControl control)
{
wrapupSwitchSubsequence(lastStatements, nullptr);
@@ -7091,17 +8776,30 @@ TIntermNode* HlslParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* ex
TIntermSwitch* switchNode = new TIntermSwitch(expression, body);
switchNode->setLoc(loc);
+ switchNode->setSelectionControl(control);
return switchNode;
}
// Make a new symbol-table level that is made out of the members of a structure.
// This should be done as an anonymous struct (name is "") so that the symbol table
-// finds the members with on explicit reference to a 'this' variable.
-void HlslParseContext::pushThisScope(const TType& thisStruct)
+// finds the members with no explicit reference to a 'this' variable.
+void HlslParseContext::pushThisScope(const TType& thisStruct, const TVector<TFunctionDeclarator>& functionDeclarators)
{
+ // member variables
TVariable& thisVariable = *new TVariable(NewPoolTString(""), thisStruct);
symbolTable.pushThis(thisVariable);
+
+ // member functions
+ for (auto it = functionDeclarators.begin(); it != functionDeclarators.end(); ++it) {
+ // member should have a prefix matching currentTypePrefix.back()
+ // but, symbol lookup within the class scope will just use the
+ // unprefixed name. Hence, there are two: one fully prefixed and
+ // one with no prefix.
+ TFunction& member = *it->function->clone();
+ member.removePrefix(currentTypePrefix.back());
+ symbolTable.insert(member);
+ }
}
// Track levels of class/struct/namespace nesting with a prefix string using
@@ -7116,11 +8814,10 @@ void HlslParseContext::pushNamespace(const TString& typeName)
{
// make new type prefix
TString newPrefix;
- if (currentTypePrefix.size() > 0) {
+ if (currentTypePrefix.size() > 0)
newPrefix = currentTypePrefix.back();
- newPrefix.append(scopeMangler);
- }
newPrefix.append(typeName);
+ newPrefix.append(scopeMangler);
currentTypePrefix.push_back(newPrefix);
}
@@ -7132,15 +8829,14 @@ void HlslParseContext::popNamespace()
// Use the class/struct nesting string to create a global name for
// a member of a class/struct.
-TString* HlslParseContext::getFullNamespaceName(const TString& localName) const
+void HlslParseContext::getFullNamespaceName(TString*& name) const
{
- TString* name = NewPoolTString("");
- if (currentTypePrefix.size() > 0)
- name->append(currentTypePrefix.back());
- name->append(scopeMangler);
- name->append(localName);
+ if (currentTypePrefix.size() == 0)
+ return;
- return name;
+ TString* fullName = NewPoolTString(currentTypePrefix.back().c_str());
+ fullName->append(*name);
+ name = fullName;
}
// Helper function to add the namespace scope mangling syntax to a string.
@@ -7149,15 +8845,6 @@ void HlslParseContext::addScopeMangler(TString& name)
name.append(scopeMangler);
}
-// Potentially rename shader entry point function
-void HlslParseContext::renameShaderFunction(TString*& name) const
-{
- // Replace the entry point name given in the shader with the real entry point name,
- // if there is a substitution.
- if (name != nullptr && *name == sourceEntryPointName)
- name = NewPoolTString(intermediate.getEntryPointName().c_str());
-}
-
// Return true if this has uniform-interface like decorations.
bool HlslParseContext::hasUniform(const TQualifier& qualifier) const
{
@@ -7215,6 +8902,8 @@ bool HlslParseContext::isInputBuiltIn(const TQualifier& qualifier) const
case EbvTessLevelInner:
case EbvTessLevelOuter:
return language == EShLangTessEvaluation;
+ case EbvTessCoord:
+ return language == EShLangTessEvaluation;
default:
return false;
}
@@ -7340,6 +9029,9 @@ void HlslParseContext::correctOutput(TQualifier& qualifier)
// Make the IO decorations etc. be appropriate only for uniform type interfaces.
void HlslParseContext::correctUniform(TQualifier& qualifier)
{
+ if (qualifier.declaredBuiltIn == EbvNone)
+ qualifier.declaredBuiltIn = qualifier.builtIn;
+
qualifier.builtIn = EbvNone;
qualifier.clearInterstage();
qualifier.clearInterstageLayout();
@@ -7352,19 +9044,129 @@ void HlslParseContext::clearUniformInputOutput(TQualifier& qualifier)
correctUniform(qualifier);
}
-// Add patch constant function invocation
-void HlslParseContext::addPatchConstantInvocation()
+
+// Set texture return type. Returns success (not all types are valid).
+bool HlslParseContext::setTextureReturnType(TSampler& sampler, const TType& retType, const TSourceLoc& loc)
{
- TSourceLoc loc;
- loc.init();
+ // Seed the output with an invalid index. We will set it to a valid one if we can.
+ sampler.structReturnIndex = TSampler::noReturnStruct;
- // If there's no patch constant function, or we're not a HS, do nothing.
- if (patchConstantFunctionName.empty() || language != EShLangTessControl)
- return;
+ // Arrays aren't supported.
+ if (retType.isArray()) {
+ error(loc, "Arrays not supported in texture template types", "", "");
+ return false;
+ }
+
+ // If return type is a vector, remember the vector size in the sampler, and return.
+ if (retType.isVector() || retType.isScalar()) {
+ sampler.vectorSize = retType.getVectorSize();
+ return true;
+ }
+
+ // If it wasn't a vector, it must be a struct meeting certain requirements. The requirements
+ // are checked below: just check for struct-ness here.
+ if (!retType.isStruct()) {
+ error(loc, "Invalid texture template type", "", "");
+ return false;
+ }
+
+ // TODO: Subpass doesn't handle struct returns, due to some oddities with fn overloading.
+ if (sampler.isSubpass()) {
+ error(loc, "Unimplemented: structure template type in subpass input", "", "");
+ return false;
+ }
+
+ TTypeList* members = retType.getWritableStruct();
+
+ // Check for too many or not enough structure members.
+ if (members->size() > 4 || members->size() == 0) {
+ error(loc, "Invalid member count in texture template structure", "", "");
+ return false;
+ }
+ // Error checking: We must have <= 4 total components, all of the same basic type.
+ unsigned totalComponents = 0;
+ for (unsigned m = 0; m < members->size(); ++m) {
+ // Check for bad member types
+ if (!(*members)[m].type->isScalar() && !(*members)[m].type->isVector()) {
+ error(loc, "Invalid texture template struct member type", "", "");
+ return false;
+ }
+
+ const unsigned memberVectorSize = (*members)[m].type->getVectorSize();
+ totalComponents += memberVectorSize;
+
+ // too many total member components
+ if (totalComponents > 4) {
+ error(loc, "Too many components in texture template structure type", "", "");
+ return false;
+ }
+
+ // All members must be of a common basic type
+ if ((*members)[m].type->getBasicType() != (*members)[0].type->getBasicType()) {
+ error(loc, "Texture template structure members must same basic type", "", "");
+ return false;
+ }
+ }
+
+ // If the structure in the return type already exists in the table, we'll use it. Otherwise, we'll make
+ // a new entry. This is a linear search, but it hardly ever happens, and the list cannot be very large.
+ for (unsigned int idx = 0; idx < textureReturnStruct.size(); ++idx) {
+ if (textureReturnStruct[idx] == members) {
+ sampler.structReturnIndex = idx;
+ return true;
+ }
+ }
+
+ // It wasn't found as an existing entry. See if we have room for a new one.
+ if (textureReturnStruct.size() >= TSampler::structReturnSlots) {
+ error(loc, "Texture template struct return slots exceeded", "", "");
+ return false;
+ }
+
+ // Insert it in the vector that tracks struct return types.
+ sampler.structReturnIndex = unsigned(textureReturnStruct.size());
+ textureReturnStruct.push_back(members);
+
+ // Success!
+ return true;
+}
+
+// Return the sampler return type in retType.
+void HlslParseContext::getTextureReturnType(const TSampler& sampler, TType& retType) const
+{
+ if (sampler.hasReturnStruct()) {
+ assert(textureReturnStruct.size() >= sampler.structReturnIndex);
+
+ // We land here if the texture return is a structure.
+ TTypeList* blockStruct = textureReturnStruct[sampler.structReturnIndex];
+
+ const TType resultType(blockStruct, "");
+ retType.shallowCopy(resultType);
+ } else {
+ // We land here if the texture return is a vector or scalar.
+ const TType resultType(sampler.type, EvqTemporary, sampler.getVectorSize());
+ retType.shallowCopy(resultType);
+ }
+}
+
+
+// Return a symbol for the tessellation linkage variable of the given TBuiltInVariable type
+TIntermSymbol* HlslParseContext::findTessLinkageSymbol(TBuiltInVariable biType) const
+{
+ const auto it = builtInTessLinkageSymbols.find(biType);
+ if (it == builtInTessLinkageSymbols.end()) // if it wasn't declared by the user, return nullptr
+ return nullptr;
+
+ return intermediate.addSymbol(*it->second->getAsVariable());
+}
+
+// Find the patch constant function (issues error, returns nullptr if not found)
+const TFunction* HlslParseContext::findPatchConstantFunction(const TSourceLoc& loc)
+{
if (symbolTable.isFunctionNameVariable(patchConstantFunctionName)) {
error(loc, "can't use variable in patch constant function", patchConstantFunctionName.c_str(), "");
- return;
+ return nullptr;
}
const TString mangledName = patchConstantFunctionName + "(";
@@ -7378,7 +9180,7 @@ void HlslParseContext::addPatchConstantInvocation()
// allow any disambiguation of overloads.
if (candidateList.empty()) {
error(loc, "patch constant function not found", patchConstantFunctionName.c_str(), "");
- return;
+ return nullptr;
}
// Based on directed experiments, it appears that if there are overloaded patchconstantfunctions,
@@ -7386,23 +9188,38 @@ void HlslParseContext::addPatchConstantInvocation()
// out if there is more than one candidate.
if (candidateList.size() > 1) {
error(loc, "ambiguous patch constant function", patchConstantFunctionName.c_str(), "");
- return;
+ return nullptr;
}
- // Look for builtin variables in a function's parameter list.
+ return candidateList[0];
+}
+
+// Finalization step: Add patch constant function invocation
+void HlslParseContext::addPatchConstantInvocation()
+{
+ TSourceLoc loc;
+ loc.init();
+
+ // If there's no patch constant function, or we're not a HS, do nothing.
+ if (patchConstantFunctionName.empty() || language != EShLangTessControl)
+ return;
+
+ // Look for built-in variables in a function's parameter list.
const auto findBuiltIns = [&](const TFunction& function, std::set<tInterstageIoData>& builtIns) {
for (int p=0; p<function.getParamCount(); ++p) {
- const TStorageQualifier storage = function[p].type->getQualifier().storage;
+ TStorageQualifier storage = function[p].type->getQualifier().storage;
- if (function[p].declaredBuiltIn != EbvNone)
- builtIns.insert(HlslParseContext::tInterstageIoData(function[p].declaredBuiltIn, storage));
+ if (storage == EvqConstReadOnly) // treated identically to input
+ storage = EvqIn;
+
+ if (function[p].getDeclaredBuiltIn() != EbvNone)
+ builtIns.insert(HlslParseContext::tInterstageIoData(function[p].getDeclaredBuiltIn(), storage));
else
builtIns.insert(HlslParseContext::tInterstageIoData(function[p].type->getQualifier().builtIn, storage));
}
};
-
- // If we synthesize a builtin interface variable, we must add it to the linkage.
+ // If we synthesize a built-in interface variable, we must add it to the linkage.
const auto addToLinkage = [&](const TType& type, const TString* name, TIntermSymbol** symbolNode) {
if (name == nullptr) {
error(loc, "unable to locate patch function parameter name", "", "");
@@ -7423,44 +9240,52 @@ void HlslParseContext::addPatchConstantInvocation()
}
};
- // Return a symbol for the linkage variable of the given TBuiltInVariable type
- const auto findLinkageSymbol = [this](TBuiltInVariable biType) -> TIntermSymbol* {
- const auto it = builtInLinkageSymbols.find(biType);
- if (it == builtInLinkageSymbols.end()) // if it wasn't declared by the user, return nullptr
- return nullptr;
+ const auto isOutputPatch = [](TFunction& patchConstantFunction, int param) {
+ const TType& type = *patchConstantFunction[param].type;
+ const TBuiltInVariable biType = patchConstantFunction[param].getDeclaredBuiltIn();
- return intermediate.addSymbol(*it->second->getAsVariable());
+ return type.isArray() && !type.isRuntimeSizedArray() && biType == EbvOutputPatch;
};
// We will perform these steps. Each is in a scoped block for separation: they could
// become separate functions to make addPatchConstantInvocation shorter.
//
- // 1. Union the interfaces, and create builtins for anything present in the PCF and
- // declared as a builtin variable that isn't present in the entry point's signature.
+ // 1. Union the interfaces, and create built-ins for anything present in the PCF and
+ // declared as a built-in variable that isn't present in the entry point's signature.
//
- // 2. Synthesizes a call to the patchconstfunction using builtin variables from either main,
- // or the ones we created. Matching is based on builtin type. We may use synthesized
+ // 2. Synthesizes a call to the patchconstfunction using built-in variables from either main,
+ // or the ones we created. Matching is based on built-in type. We may use synthesized
// variables from (1) above.
+ //
+ // 2B: Synthesize per control point invocations of wrapped entry point if the PCF requires them.
//
// 3. Create a return sequence: copy the return value (if any) from the PCF to a
// (non-sanitized) output variable. In case this may involve multiple copies, such as for
// an arrayed variable, a temporary copy of the PCF output is created to avoid multiple
// indirections into a complex R-value coming from the call to the PCF.
- //
- // 4. Add a barrier to the end of the entry point body
- //
- // 5. Call the PCF inside an if test for (invocation id == 0).
+ //
+ // 4. Create a barrier.
+ //
+ // 5/5B. Call the PCF inside an if test for (invocation id == 0).
+
+ TFunction* patchConstantFunctionPtr = const_cast<TFunction*>(findPatchConstantFunction(loc));
+
+ if (patchConstantFunctionPtr == nullptr)
+ return;
+
+ TFunction& patchConstantFunction = *patchConstantFunctionPtr;
- TFunction& patchConstantFunction = const_cast<TFunction&>(*candidateList[0]);
const int pcfParamCount = patchConstantFunction.getParamCount();
- TIntermSymbol* invocationIdSym = findLinkageSymbol(EbvInvocationId);
+ TIntermSymbol* invocationIdSym = findTessLinkageSymbol(EbvInvocationId);
TIntermSequence& epBodySeq = entryPointFunctionBody->getAsAggregate()->getSequence();
+ int outPatchParam = -1; // -1 means there isn't one.
+
// ================ Step 1A: Union Interfaces ================
// Our patch constant function.
{
- std::set<tInterstageIoData> pcfBuiltIns; // patch constant function builtins
- std::set<tInterstageIoData> epfBuiltIns; // entry point function builtins
+ std::set<tInterstageIoData> pcfBuiltIns; // patch constant function built-ins
+ std::set<tInterstageIoData> epfBuiltIns; // entry point function built-ins
assert(entryPointFunction);
assert(entryPointFunctionBody);
@@ -7468,17 +9293,7 @@ void HlslParseContext::addPatchConstantInvocation()
findBuiltIns(patchConstantFunction, pcfBuiltIns);
findBuiltIns(*entryPointFunction, epfBuiltIns);
- // Patchconstantfunction can contain only builtin qualified variables. (Technically, only HS inputs,
- // but this test is less assertive than that).
-
- for (auto bi = pcfBuiltIns.begin(); bi != pcfBuiltIns.end(); ++bi) {
- if (bi->builtIn == EbvNone) {
- error(loc, "patch constant function invalid parameter", "", "");
- return;
- }
- }
-
- // Find the set of builtins in the PCF that are not present in the entry point.
+ // Find the set of built-ins in the PCF that are not present in the entry point.
std::set<tInterstageIoData> notInEntryPoint;
notInEntryPoint = pcfBuiltIns;
@@ -7489,15 +9304,39 @@ void HlslParseContext::addPatchConstantInvocation()
// Now we'll add those to the entry and to the linkage.
for (int p=0; p<pcfParamCount; ++p) {
- TType* paramType = patchConstantFunction[p].type->clone();
- const TBuiltInVariable biType = patchConstantFunction[p].declaredBuiltIn;
- const TStorageQualifier storage = patchConstantFunction[p].type->getQualifier().storage;
+ const TBuiltInVariable biType = patchConstantFunction[p].getDeclaredBuiltIn();
+ TStorageQualifier storage = patchConstantFunction[p].type->getQualifier().storage;
+
+ // Track whether there is an output patch param
+ if (isOutputPatch(patchConstantFunction, p)) {
+ if (outPatchParam >= 0) {
+ // Presently we only support one per ctrl pt input.
+ error(loc, "unimplemented: multiple output patches in patch constant function", "", "");
+ return;
+ }
+ outPatchParam = p;
+ }
+
+ if (biType != EbvNone) {
+ TType* paramType = patchConstantFunction[p].type->clone();
- // Use the original declaration type for the linkage
- paramType->getQualifier().builtIn = biType;
+ if (storage == EvqConstReadOnly) // treated identically to input
+ storage = EvqIn;
- if (notInEntryPoint.count(tInterstageIoData(biType, storage)) == 1)
- addToLinkage(*paramType, patchConstantFunction[p].name, nullptr);
+ // Presently, the only non-built-in we support is InputPatch, which is treated as
+ // a pseudo-built-in.
+ if (biType == EbvInputPatch) {
+ builtInTessLinkageSymbols[biType] = inputPatch;
+ } else if (biType == EbvOutputPatch) {
+ // Nothing...
+ } else {
+ // Use the original declaration type for the linkage
+ paramType->getQualifier().builtIn = biType;
+
+ if (notInEntryPoint.count(tInterstageIoData(biType, storage)) == 1)
+ addToLinkage(*paramType, patchConstantFunction[p].name, nullptr);
+ }
+ }
}
// If we didn't find it because the shader made one, add our own.
@@ -7512,36 +9351,48 @@ void HlslParseContext::addPatchConstantInvocation()
}
TIntermTyped* pcfArguments = nullptr;
+ TVariable* perCtrlPtVar = nullptr;
// ================ Step 1B: Argument synthesis ================
// Create pcfArguments for synthesis of patchconstantfunction invocation
- // TODO: handle struct or array inputs
{
for (int p=0; p<pcfParamCount; ++p) {
- if (patchConstantFunction[p].type->isArray() ||
- patchConstantFunction[p].type->isStruct()) {
- error(loc, "unimplemented array or variable in patch constant function signature", "", "");
- return;
- }
-
- // find which builtin it is
- const TBuiltInVariable biType = patchConstantFunction[p].declaredBuiltIn;
+ TIntermTyped* inputArg = nullptr;
- TIntermSymbol* builtIn = findLinkageSymbol(biType);
-
- if (builtIn == nullptr) {
- error(loc, "unable to find patch constant function builtin variable", "", "");
- return;
+ if (p == outPatchParam) {
+ if (perCtrlPtVar == nullptr) {
+ perCtrlPtVar = makeInternalVariable(*patchConstantFunction[outPatchParam].name,
+ *patchConstantFunction[outPatchParam].type);
+
+ perCtrlPtVar->getWritableType().getQualifier().makeTemporary();
+ }
+ inputArg = intermediate.addSymbol(*perCtrlPtVar, loc);
+ } else {
+ // find which built-in it is
+ const TBuiltInVariable biType = patchConstantFunction[p].getDeclaredBuiltIn();
+
+ if (biType == EbvInputPatch && inputPatch == nullptr) {
+ error(loc, "unimplemented: PCF input patch without entry point input patch parameter", "", "");
+ return;
+ }
+
+ inputArg = findTessLinkageSymbol(biType);
+
+ if (inputArg == nullptr) {
+ error(loc, "unable to find patch constant function built-in variable", "", "");
+ return;
+ }
}
if (pcfParamCount == 1)
- pcfArguments = builtIn;
+ pcfArguments = inputArg;
else
- pcfArguments = intermediate.growAggregate(pcfArguments, builtIn);
+ pcfArguments = intermediate.growAggregate(pcfArguments, inputArg);
}
}
// ================ Step 2: Synthesize call to PCF ================
+ TIntermAggregate* pcfCallSequence = nullptr;
TIntermTyped* pcfCall = nullptr;
{
@@ -7553,7 +9404,8 @@ void HlslParseContext::addPatchConstantInvocation()
pcfCall = intermediate.setAggregateOperator(pcfArguments, EOpFunctionCall, patchConstantFunction.getType(), loc);
pcfCall->getAsAggregate()->setUserDefined();
pcfCall->getAsAggregate()->setName(patchConstantFunction.getMangledName());
- intermediate.addToCallGraph(infoSink, entryPointFunction->getMangledName(), patchConstantFunction.getMangledName());
+ intermediate.addToCallGraph(infoSink, intermediate.getEntryPointMangledName().c_str(),
+ patchConstantFunction.getMangledName());
if (pcfCall->getAsAggregate()) {
TQualifierList& qualifierList = pcfCall->getAsAggregate()->getQualifierList();
@@ -7565,6 +9417,71 @@ void HlslParseContext::addPatchConstantInvocation()
}
}
+ // ================ Step 2B: Per Control Point synthesis ================
+ // If there is per control point data, we must either emulate that with multiple
+ // invocations of the entry point to build up an array, or (TODO:) use a yet
+ // unavailable extension to look across the SIMD lanes. This is the former
+ // as a placeholder for the latter.
+ if (outPatchParam >= 0) {
+ // We must introduce a local temp variable of the type wanted by the PCF input.
+ const int arraySize = patchConstantFunction[outPatchParam].type->getOuterArraySize();
+
+ if (entryPointFunction->getType().getBasicType() == EbtVoid) {
+ error(loc, "entry point must return a value for use with patch constant function", "", "");
+ return;
+ }
+
+ // Create calls to wrapped main to fill in the array. We will substitute fixed values
+ // of invocation ID when calling the wrapped main.
+
+ // This is the type of the each member of the per ctrl point array.
+ const TType derefType(perCtrlPtVar->getType(), 0);
+
+ for (int cpt = 0; cpt < arraySize; ++cpt) {
+ // TODO: improve. substr(1) here is to avoid the '@' that was grafted on but isn't in the symtab
+ // for this function.
+ const TString origName = entryPointFunction->getName().substr(1);
+ TFunction callee(&origName, TType(EbtVoid));
+ TIntermTyped* callingArgs = nullptr;
+
+ for (int i = 0; i < entryPointFunction->getParamCount(); i++) {
+ TParameter& param = (*entryPointFunction)[i];
+ TType& paramType = *param.type;
+
+ if (paramType.getQualifier().isParamOutput()) {
+ error(loc, "unimplemented: entry point outputs in patch constant function invocation", "", "");
+ return;
+ }
+
+ if (paramType.getQualifier().isParamInput()) {
+ TIntermTyped* arg = nullptr;
+ if ((*entryPointFunction)[i].getDeclaredBuiltIn() == EbvInvocationId) {
+ // substitute invocation ID with the array element ID
+ arg = intermediate.addConstantUnion(cpt, loc);
+ } else {
+ TVariable* argVar = makeInternalVariable(*param.name, *param.type);
+ argVar->getWritableType().getQualifier().makeTemporary();
+ arg = intermediate.addSymbol(*argVar);
+ }
+
+ handleFunctionArgument(&callee, callingArgs, arg);
+ }
+ }
+
+ // Call and assign to per ctrl point variable
+ currentCaller = intermediate.getEntryPointMangledName().c_str();
+ TIntermTyped* callReturn = handleFunctionCall(loc, &callee, callingArgs);
+ TIntermTyped* index = intermediate.addConstantUnion(cpt, loc);
+ TIntermSymbol* perCtrlPtSym = intermediate.addSymbol(*perCtrlPtVar, loc);
+ TIntermTyped* element = intermediate.addIndex(EOpIndexDirect, perCtrlPtSym, index, loc);
+ element->setType(derefType);
+ element->setLoc(loc);
+
+ pcfCallSequence = intermediate.growAggregate(pcfCallSequence,
+ handleAssign(loc, EOpAssign, element, callReturn));
+ }
+ }
+
// ================ Step 3: Create return Sequence ================
// Return sequence: copy PCF result to a temporary, then to shader output variable.
if (pcfCall->getBasicType() != EbtVoid) {
@@ -7577,34 +9494,36 @@ void HlslParseContext::addPatchConstantInvocation()
if (newLists != ioTypeMap.end())
outType.setStruct(newLists->second.output);
- // Substitute the top level type's builtin type
+ // Substitute the top level type's built-in type
if (patchConstantFunction.getDeclaredBuiltInType() != EbvNone)
outType.getQualifier().builtIn = patchConstantFunction.getDeclaredBuiltInType();
+ outType.getQualifier().patch = true; // make it a per-patch variable
+
TVariable* pcfOutput = makeInternalVariable("@patchConstantOutput", outType);
pcfOutput->getWritableType().getQualifier().storage = EvqVaryingOut;
- if (pcfOutput->getType().containsBuiltInInterstageIO(language))
+ if (pcfOutput->getType().containsBuiltIn())
split(*pcfOutput);
+ assignToInterface(*pcfOutput);
+
TIntermSymbol* pcfOutputSym = intermediate.addSymbol(*pcfOutput, loc);
// The call to the PCF is a complex R-value: we want to store it in a temp to avoid
// repeated calls to the PCF:
TVariable* pcfCallResult = makeInternalVariable("@patchConstantResult", *retType);
pcfCallResult->getWritableType().getQualifier().makeTemporary();
- TIntermSymbol* pcfResultVar = intermediate.addSymbol(*pcfCallResult, loc);
- // sanitizeType(&pcfCall->getWritableType());
- TIntermNode* pcfResultAssign = intermediate.addAssign(EOpAssign, pcfResultVar, pcfCall, loc);
- TIntermNode* pcfResultToOut = handleAssign(loc, EOpAssign, pcfOutputSym, intermediate.addSymbol(*pcfCallResult, loc));
-
- TIntermTyped* pcfAggregate = nullptr;
- pcfAggregate = intermediate.growAggregate(pcfAggregate, pcfResultAssign);
- pcfAggregate = intermediate.growAggregate(pcfAggregate, pcfResultToOut);
- pcfAggregate = intermediate.setAggregateOperator(pcfAggregate, EOpSequence, *retType, loc);
+ TIntermSymbol* pcfResultVar = intermediate.addSymbol(*pcfCallResult, loc);
+ TIntermNode* pcfResultAssign = handleAssign(loc, EOpAssign, pcfResultVar, pcfCall);
+ TIntermNode* pcfResultToOut = handleAssign(loc, EOpAssign, pcfOutputSym,
+ intermediate.addSymbol(*pcfCallResult, loc));
- pcfCall = pcfAggregate;
+ pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfResultAssign);
+ pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfResultToOut);
+ } else {
+ pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfCall);
}
// ================ Step 4: Barrier ================
@@ -7613,23 +9532,70 @@ void HlslParseContext::addPatchConstantInvocation()
barrier->setType(TType(EbtVoid));
epBodySeq.insert(epBodySeq.end(), barrier);
- // ================ Step 5: Test on invocation ID ================
+ // ================ Step 5: Test on invocation ID ================
TIntermTyped* zero = intermediate.addConstantUnion(0, loc, true);
TIntermTyped* cmp = intermediate.addBinaryNode(EOpEqual, invocationIdSym, zero, loc, TType(EbtBool));
- // Create if statement
- TIntermTyped* invocationIdTest = new TIntermSelection(cmp, pcfCall, nullptr);
+
+ // ================ Step 5B: Create if statement on Invocation ID == 0 ================
+ intermediate.setAggregateOperator(pcfCallSequence, EOpSequence, TType(EbtVoid), loc);
+ TIntermTyped* invocationIdTest = new TIntermSelection(cmp, pcfCallSequence, nullptr);
invocationIdTest->setLoc(loc);
// add our test sequence before the return.
epBodySeq.insert(epBodySeq.end(), invocationIdTest);
}
+// Finalization step: remove unused buffer blocks from linkage (we don't know until the
+// shader is entirely compiled)
+void HlslParseContext::removeUnusedStructBufferCounters()
+{
+ const auto endIt = std::remove_if(linkageSymbols.begin(), linkageSymbols.end(),
+ [this](const TSymbol* sym) {
+ const auto sbcIt = structBufferCounter.find(sym->getName());
+ return sbcIt != structBufferCounter.end() && !sbcIt->second;
+ });
+
+ linkageSymbols.erase(endIt, linkageSymbols.end());
+}
+
+// Finalization step: patch texture shadow modes to match samplers they were combined with
+void HlslParseContext::fixTextureShadowModes()
+{
+ for (auto symbol = linkageSymbols.begin(); symbol != linkageSymbols.end(); ++symbol) {
+ TSampler& sampler = (*symbol)->getWritableType().getSampler();
+
+ if (sampler.isTexture()) {
+ const auto shadowMode = textureShadowVariant.find((*symbol)->getUniqueId());
+ if (shadowMode != textureShadowVariant.end()) {
+
+ if (shadowMode->second->overloaded())
+ // Texture needs legalization if it's been seen with both shadow and non-shadow modes.
+ intermediate.setNeedsLegalization();
+
+ sampler.shadow = shadowMode->second->isShadowId((*symbol)->getUniqueId());
+ }
+ }
+ }
+}
+
// post-processing
void HlslParseContext::finish()
{
+ // Error check: There was a dangling .mips operator. These are not nested constructs in the grammar, so
+ // cannot be detected there. This is not strictly needed in a non-validating parser; it's just helpful.
+ if (! mipsOperatorMipArg.empty()) {
+ error(mipsOperatorMipArg.back().loc, "unterminated mips operator:", "", "");
+ }
+
+ removeUnusedStructBufferCounters();
addPatchConstantInvocation();
- addInterstageIoToLinkage();
+ fixTextureShadowModes();
+
+ // Communicate out (esp. for command line) that we formed AST that will make
+ // illegal AST SPIR-V and it needs transforms to legalize it.
+ if (intermediate.needsLegalization())
+ infoSink.info << "WARNING: AST will form illegal SPIR-V; need to transform to legalize";
TParseContextBase::finish();
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h
index 2d1968114c4..c1752f12919 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h
@@ -39,9 +39,12 @@
#include "../glslang/MachineIndependent/parseVersions.h"
#include "../glslang/MachineIndependent/ParseHelper.h"
+#include <array>
+
namespace glslang {
class TAttributeMap; // forward declare
+class TFunctionDeclarator;
class HlslParseContext : public TParseContextBase {
public:
@@ -70,16 +73,17 @@ public:
TIntermTyped* handleVariable(const TSourceLoc&, const TString* string);
TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
TIntermTyped* handleBracketOperator(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
- void checkIndex(const TSourceLoc&, const TType&, int& index);
TIntermTyped* handleBinaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right);
TIntermTyped* handleUnaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* childNode);
TIntermTyped* handleDotDereference(const TSourceLoc&, TIntermTyped* base, const TString& field);
bool isBuiltInMethod(const TSourceLoc&, TIntermTyped* base, const TString& field);
- void assignLocations(TVariable& variable);
+ void assignToInterface(TVariable& variable);
void handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&, const TAttributeMap&, TIntermNode*& entryPointTree);
TIntermNode* transformEntryPoint(const TSourceLoc&, TFunction&, const TAttributeMap&);
+ void handleEntryPointAttributes(const TSourceLoc&, const TAttributeMap&);
+ void transferTypeAttributes(const TAttributeMap&, TType&);
void handleFunctionBody(const TSourceLoc&, TFunction&, TIntermNode* functionBody, TIntermNode*& node);
void remapEntryPointIO(TFunction& function, TVariable*& returnValue, TVector<TVariable*>& inputs, TVector<TVariable*>& outputs);
void remapNonEntryPointIO(TFunction& function);
@@ -88,20 +92,23 @@ public:
TIntermTyped* handleAssign(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
TIntermTyped* handleAssignToMatrixSwizzle(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermTyped*);
+ TIntermAggregate* assignClipCullDistance(const TSourceLoc&, TOperator, int semanticId, TIntermTyped* left, TIntermTyped* right);
void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
void decomposeStructBufferMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
void decomposeGeometryMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
+ void pushFrontArguments(TIntermTyped* front, TIntermTyped*& arguments);
void addInputArgumentConversions(const TFunction&, TIntermTyped*&);
+ void expandArguments(const TSourceLoc&, const TFunction&, TIntermTyped*&);
TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermOperator&);
void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&);
- TFunction* handleConstructorCall(const TSourceLoc&, const TType&);
+ TFunction* makeConstructorCall(const TSourceLoc&, const TType&);
void handleSemantic(TSourceLoc, TQualifier&, TBuiltInVariable, const TString& upperCase);
void handlePackOffset(const TSourceLoc&, TQualifier&, const glslang::TString& location,
const glslang::TString* component);
void handleRegister(const TSourceLoc&, TQualifier&, const glslang::TString* profile, const glslang::TString& desc,
int subComponent, const glslang::TString*);
-
+ TIntermTyped* convertConditionalExpression(const TSourceLoc&, TIntermTyped*, bool mustBeScalar = true);
TIntermAggregate* handleSamplerTextureCombine(const TSourceLoc& loc, TIntermTyped* argTex, TIntermTyped* argSampler);
bool parseMatrixSwizzleSelector(const TSourceLoc&, const TString&, int cols, int rows, TSwizzleSelectors<TMatrixSelector>&);
@@ -120,13 +127,11 @@ public:
void structArrayCheck(const TSourceLoc&, const TType& structure);
void arrayDimMerge(TType& type, const TArraySizes* sizes);
bool voidErrorCheck(const TSourceLoc&, const TString&, TBasicType);
- void boolCheck(const TSourceLoc&, const TIntermTyped*);
void globalQualifierFix(const TSourceLoc&, TQualifier&);
bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
void mergeQualifiers(TQualifier& dst, const TQualifier& src);
int computeSamplerTypeIndex(TSampler&);
TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&);
- void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes);
void paramFix(TType& type);
void specializationCheck(const TSourceLoc&, const TType&, const char* op);
@@ -135,16 +140,19 @@ public:
void mergeObjectLayoutQualifiers(TQualifier& dest, const TQualifier& src, bool inheritOnly);
void checkNoShaderLayouts(const TSourceLoc&, const TShaderQualifiers&);
- const TFunction* findFunction(const TSourceLoc& loc, TFunction& call, bool& builtIn, TIntermTyped*& args);
- void declareTypedef(const TSourceLoc&, TString& identifier, const TType&);
+ const TFunction* findFunction(const TSourceLoc& loc, TFunction& call, bool& builtIn, int& thisDepth, TIntermTyped*& args);
+ void declareTypedef(const TSourceLoc&, const TString& identifier, const TType&);
void declareStruct(const TSourceLoc&, TString& structName, TType&);
TSymbol* lookupUserType(const TString&, TType&);
- TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, TType&, TIntermTyped* initializer = 0);
- void lengthenList(const TSourceLoc&, TIntermSequence& list, int size);
- TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
+ TIntermNode* declareVariable(const TSourceLoc&, const TString& identifier, TType&, TIntermTyped* initializer = 0);
+ void lengthenList(const TSourceLoc&, TIntermSequence& list, int size, TIntermTyped* scalarInit);
+ TIntermTyped* handleConstructor(const TSourceLoc&, TIntermTyped*, const TType&);
+ TIntermTyped* addConstructor(const TSourceLoc&, TIntermTyped*, const TType&);
+ TIntermTyped* convertArray(TIntermTyped*, const TType&);
TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&);
TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset);
void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = 0, TArraySizes* arraySizes = 0);
+ void declareStructBufferCounter(const TSourceLoc& loc, const TType& bufferType, const TString& name);
void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation);
void fixBlockXfbOffsets(TQualifier&, TTypeList&);
void fixBlockUniformOffsets(const TQualifier&, TTypeList&);
@@ -152,7 +160,7 @@ public:
void addQualifierToExisting(const TSourceLoc&, TQualifier, TIdentifierList&);
void updateStandaloneQualifierDefaults(const TSourceLoc&, const TPublicType&);
void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode);
- TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body);
+ TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body, TSelectionControl control);
void updateImplicitArraySize(const TSourceLoc&, TIntermNode*, int index);
@@ -164,7 +172,7 @@ public:
void pushScope() { symbolTable.push(); }
void popScope() { symbolTable.pop(0); }
- void pushThisScope(const TType&);
+ void pushThisScope(const TType&, const TVector<TFunctionDeclarator>&);
void popThisScope() { symbolTable.pop(0); }
void pushImplicitThis(TVariable* thisParameter) { implicitThisStack.push_back(thisParameter); }
@@ -173,16 +181,17 @@ public:
void pushNamespace(const TString& name);
void popNamespace();
- TString* getFullNamespaceName(const TString& localName) const;
+ void getFullNamespaceName(TString*&) const;
void addScopeMangler(TString&);
void pushSwitchSequence(TIntermSequence* sequence) { switchSequenceStack.push_back(sequence); }
void popSwitchSequence() { switchSequenceStack.pop_back(); }
- virtual void growGlobalUniformBlock(TSourceLoc&, TType&, TString& memberName, TTypeList* typeList = nullptr) override;
+ virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName,
+ TTypeList* typeList = nullptr) override;
// Apply L-value conversions. E.g, turning a write to a RWTexture into an ImageStore.
- TIntermTyped* handleLvalue(const TSourceLoc&, const char* op, TIntermTyped* node);
+ TIntermTyped* handleLvalue(const TSourceLoc&, const char* op, TIntermTyped*& node);
bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override;
TLayoutFormat getLayoutFromTxType(const TSourceLoc&, const TType&);
@@ -190,37 +199,45 @@ public:
bool handleOutputGeometry(const TSourceLoc&, const TLayoutGeometry& geometry);
bool handleInputGeometry(const TSourceLoc&, const TLayoutGeometry& geometry);
- // Potentially rename shader entry point function
- void renameShaderFunction(TString*& name) const;
+ // Determine selection control from attributes
+ TSelectionControl handleSelectionControl(const TAttributeMap& attributes) const;
- // Reset data for incrementally built referencing of flattened composite structures
- void initFlattening() { flattenLevel.push_back(0); flattenOffset.push_back(0); }
- void finalizeFlattening() { flattenLevel.pop_back(); flattenOffset.pop_back(); }
+ // Determine loop control from attributes
+ TLoopControl handleLoopControl(const TAttributeMap& attributes) const;
// Share struct buffer deep types
void shareStructBufferType(TType&);
+ // Set texture return type of the given sampler. Returns success (not all types are valid).
+ bool setTextureReturnType(TSampler& sampler, const TType& retType, const TSourceLoc& loc);
+
+ // Obtain the sampler return type of the given sampler in retType.
+ void getTextureReturnType(const TSampler& sampler, TType& retType) const;
+
protected:
struct TFlattenData {
- TFlattenData() : nextBinding(TQualifier::layoutBindingEnd) { }
- TFlattenData(int nb) : nextBinding(nb) { }
+ TFlattenData() : nextBinding(TQualifier::layoutBindingEnd),
+ nextLocation(TQualifier::layoutLocationEnd) { }
+ TFlattenData(int nb, int nl) : nextBinding(nb), nextLocation(nl) { }
TVector<TVariable*> members; // individual flattened variables
- TVector<int> offsets; // offset to next tree level
- int nextBinding; // next binding to use.
+ TVector<int> offsets; // offset to next tree level
+ unsigned int nextBinding; // next binding to use.
+ unsigned int nextLocation; // next location to use
};
- void fixConstInit(const TSourceLoc&, TString& identifier, TType& type, TIntermTyped*& initializer);
+ void fixConstInit(const TSourceLoc&, const TString& identifier, TType& type, TIntermTyped*& initializer);
void inheritGlobalDefaults(TQualifier& dst) const;
TVariable* makeInternalVariable(const char* name, const TType&) const;
TVariable* makeInternalVariable(const TString& name, const TType& type) const {
return makeInternalVariable(name.c_str(), type);
}
- TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&, bool track);
- void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool track);
+ TIntermSymbol* makeInternalVariableNode(const TSourceLoc&, const char* name, const TType&) const;
+ TVariable* declareNonArray(const TSourceLoc&, const TString& identifier, const TType&, bool track);
+ void declareArray(const TSourceLoc&, const TString& identifier, const TType&, TSymbol*&, bool track);
TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
- TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
- bool isZeroConstructor(const TIntermNode*);
+ TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer, TIntermTyped* scalarInit);
+ bool isScalarConstructor(const TIntermNode*);
TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage);
// Return true if this node requires L-value conversion (e.g, to an imageStore).
@@ -228,30 +245,35 @@ protected:
// Array and struct flattening
TIntermTyped* flattenAccess(TIntermTyped* base, int member);
- bool shouldFlattenUniform(const TType&) const;
+ TIntermTyped* flattenAccess(int uniqueId, int member, TStorageQualifier outerStorage, const TType&, int subset = -1);
+ int findSubtreeOffset(const TIntermNode&) const;
+ int findSubtreeOffset(const TType&, int subset, const TVector<int>& offsets) const;
+ bool shouldFlatten(const TType&, TStorageQualifier, bool topLevel) const;
bool wasFlattened(const TIntermTyped* node) const;
bool wasFlattened(int id) const { return flattenMap.find(id) != flattenMap.end(); }
- int addFlattenedMember(const TSourceLoc& loc, const TVariable&, const TType&, TFlattenData&, const TString& name, bool track);
- bool isFinalFlattening(const TType& type) const { return !(type.isStruct() || type.isArray()); }
-
- // Structure splitting (splits interstage builtin types into its own struct)
- TIntermTyped* splitAccessStruct(const TSourceLoc& loc, TIntermTyped*& base, int& member);
- void splitAccessArray(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index);
- TType& split(TType& type, TString name, const TType* outerStructType = nullptr);
- void split(TIntermTyped*);
+ int addFlattenedMember(const TVariable&, const TType&, TFlattenData&, const TString& name, bool linkage,
+ const TQualifier& outerQualifier, const TArraySizes* builtInArraySizes);
+
+ // Structure splitting (splits interstage built-in types into its own struct)
void split(const TVariable&);
+ void splitBuiltIn(const TString& baseName, const TType& memberType, const TArraySizes*, const TQualifier&);
+ const TType& split(const TType& type, const TString& name, const TQualifier&);
bool wasSplit(const TIntermTyped* node) const;
- bool wasSplit(int id) const { return splitIoVars.find(id) != splitIoVars.end(); }
- TVariable* getSplitIoVar(const TIntermTyped* node) const;
- TVariable* getSplitIoVar(const TVariable* var) const;
- TVariable* getSplitIoVar(int id) const;
- void addInterstageIoToLinkage();
+ bool wasSplit(int id) const { return splitNonIoVars.find(id) != splitNonIoVars.end(); }
+ TVariable* getSplitNonIoVar(int id) const;
void addPatchConstantInvocation();
+ void fixTextureShadowModes();
+ TIntermTyped* makeIntegerIndex(TIntermTyped*);
+
+ void fixBuiltInIoType(TType&);
- void flatten(const TSourceLoc& loc, const TVariable& variable);
- int flatten(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
- int flattenStruct(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
- int flattenArray(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
+ void flatten(const TVariable& variable, bool linkage);
+ int flatten(const TVariable& variable, const TType&, TFlattenData&, TString name, bool linkage,
+ const TQualifier& outerQualifier, const TArraySizes* builtInArraySizes);
+ int flattenStruct(const TVariable& variable, const TType&, TFlattenData&, TString name, bool linkage,
+ const TQualifier& outerQualifier, const TArraySizes* builtInArraySizes);
+ int flattenArray(const TVariable& variable, const TType&, TFlattenData&, TString name, bool linkage,
+ const TQualifier& outerQualifier);
bool hasUniform(const TQualifier& qualifier) const;
void clearUniform(TQualifier& qualifier);
@@ -266,33 +288,48 @@ protected:
// Test method names
bool isStructBufferMethod(const TString& name) const;
+ void counterBufferType(const TSourceLoc& loc, TType& type);
+
+ // Return standard sample position array
+ TIntermConstantUnion* getSamplePosArray(int count);
TType* getStructBufferContentType(const TType& type) const;
bool isStructBufferType(const TType& type) const { return getStructBufferContentType(type) != nullptr; }
TIntermTyped* indexStructBufferContent(const TSourceLoc& loc, TIntermTyped* buffer) const;
+ TIntermTyped* getStructBufferCounter(const TSourceLoc& loc, TIntermTyped* buffer);
+ TString getStructBuffCounterName(const TString&) const;
+ void addStructBuffArguments(const TSourceLoc& loc, TIntermAggregate*&);
+ void addStructBufferHiddenCounterParam(const TSourceLoc& loc, TParameter&, TIntermAggregate*&);
// Return true if this type is a reference. This is not currently a type method in case that's
// a language specific answer.
bool isReference(const TType& type) const { return isStructBufferType(type); }
- // Pass through to base class after remembering builtin mappings.
+ // Return true if this a buffer type that has an associated counter buffer.
+ bool hasStructBuffCounter(const TType&) const;
+
+ // Finalization step: remove unused buffer blocks from linkage (we don't know until the
+ // shader is entirely compiled)
+ void removeUnusedStructBufferCounters();
+
+ static bool isClipOrCullDistance(TBuiltInVariable);
+ static bool isClipOrCullDistance(const TQualifier& qual) { return isClipOrCullDistance(qual.builtIn); }
+ static bool isClipOrCullDistance(const TType& type) { return isClipOrCullDistance(type.getQualifier()); }
+
+ // Find the patch constant function (issues error, returns nullptr if not found)
+ const TFunction* findPatchConstantFunction(const TSourceLoc& loc);
+
+ // Pass through to base class after remembering built-in mappings.
using TParseContextBase::trackLinkage;
void trackLinkage(TSymbol& variable) override;
void finish() override; // post-processing
+ // Linkage symbol helpers
+ TIntermSymbol* findTessLinkageSymbol(TBuiltInVariable biType) const;
+
// Current state of parsing
- struct TPragma contextPragma;
- int loopNestingLevel; // 0 if outside all loops
int annotationNestingLevel; // 0 if outside all annotations
- int structNestingLevel; // 0 if outside blocks and structures
- int controlFlowNestingLevel; // 0 if outside all flow control
- TList<TIntermSequence*> switchSequenceStack; // case, node, case, case, node, ...; ensure only one node between cases; stack of them for nesting
- bool postEntryPointReturn; // if inside a function, true if the function is the entry point and this is after a return statement
- const TType* currentFunctionType; // the return type of the function that's currently being parsed
- bool functionReturnsValue; // true if a non-void function has a return
- TBuiltInResource resources;
- TLimits& limits;
HlslParseContext(HlslParseContext&);
HlslParseContext& operator=(HlslParseContext&);
@@ -341,8 +378,6 @@ protected:
TVector<TSymbol*> ioArraySymbolResizeList;
TMap<int, TFlattenData> flattenMap;
- TVector<int> flattenLevel; // nested postfix operator level for flattening
- TVector<int> flattenOffset; // cumulative offset for flattening
// IO-type map. Maps a pure symbol-table form of a structure-member list into
// each of the (up to) three kinds of IO, as each as different allowed decorations,
@@ -355,22 +390,24 @@ protected:
TMap<const TTypeList*, tIoKinds> ioTypeMap;
// Structure splitting data:
- TMap<int, TVariable*> splitIoVars; // variables with the builtin interstage IO removed, indexed by unique ID.
+ TMap<int, TVariable*> splitNonIoVars; // variables with the built-in interstage IO removed, indexed by unique ID.
// Structuredbuffer shared types. Typically there are only a few.
TVector<TType*> structBufferTypes;
- // The builtin interstage IO map considers e.g, EvqPosition on input and output separately, so that we
+ // This tracks texture sample user structure return types. Only a limited number are supported, as
+ // may fit in TSampler::structReturnIndex.
+ TVector<TTypeList*> textureReturnStruct;
+
+ TMap<TString, bool> structBufferCounter;
+
+ // The built-in interstage IO map considers e.g, EvqPosition on input and output separately, so that we
// can build the linkage correctly if position appears on both sides. Otherwise, multiple positions
// are considered identical.
struct tInterstageIoData {
tInterstageIoData(TBuiltInVariable bi, TStorageQualifier q) :
builtIn(bi), storage(q) { }
- tInterstageIoData(const TType& memberType, const TType& storageType) :
- builtIn(memberType.getQualifier().builtIn),
- storage(storageType.getQualifier().storage) { }
-
TBuiltInVariable builtIn;
TStorageQualifier storage;
@@ -380,29 +417,72 @@ protected:
}
};
- TMap<tInterstageIoData, TVariable*> interstageBuiltInIo; // individual builtin interstage IO vars, indexed by builtin type.
-
- // We have to move array references to structs containing builtin interstage IO to the split variables.
- // This is only handled for one level. This stores the index, because we'll need it in the future, since
- // unlike normal array references, here the index happens before we discover what it applies to.
- TIntermTyped* builtInIoIndex;
- TIntermTyped* builtInIoBase;
+ TMap<tInterstageIoData, TVariable*> splitBuiltIns; // split built-ins, indexed by built-in type.
+ TVariable* inputPatch; // input patch is special for PCF: it's the only non-builtin PCF input,
+ // and is handled as a pseudo-builtin.
unsigned int nextInLocation;
unsigned int nextOutLocation;
- TString sourceEntryPointName;
TFunction* entryPointFunction;
TIntermNode* entryPointFunctionBody;
TString patchConstantFunctionName; // hull shader patch constant function name, from function level attribute.
- TMap<TBuiltInVariable, TSymbol*> builtInLinkageSymbols; // used for tessellation, finding declared builtins
+ TMap<TBuiltInVariable, TSymbol*> builtInTessLinkageSymbols; // used for tessellation, finding declared built-ins
TVector<TString> currentTypePrefix; // current scoping prefix for nested structures
TVector<TVariable*> implicitThisStack; // currently active 'this' variables for nested structures
+
+ TVariable* gsStreamOutput; // geometry shader stream outputs, for emit (Append method)
+
+ TVariable* clipDistanceOutput; // synthesized clip distance out variable (shader might have >1)
+ TVariable* cullDistanceOutput; // synthesized cull distance out variable (shader might have >1)
+ TVariable* clipDistanceInput; // synthesized clip distance in variable (shader might have >1)
+ TVariable* cullDistanceInput; // synthesized cull distance in variable (shader might have >1)
+
+ static const int maxClipCullRegs = 2;
+ std::array<int, maxClipCullRegs> clipSemanticNSizeIn; // vector, indexed by clip semantic ID
+ std::array<int, maxClipCullRegs> cullSemanticNSizeIn; // vector, indexed by cull semantic ID
+ std::array<int, maxClipCullRegs> clipSemanticNSizeOut; // vector, indexed by clip semantic ID
+ std::array<int, maxClipCullRegs> cullSemanticNSizeOut; // vector, indexed by cull semantic ID
+
+ // This tracks the first (mip level) argument to the .mips[][] operator. Since this can be nested as
+ // in tx.mips[tx.mips[0][1].x][2], we need a stack. We also track the TSourceLoc for error reporting
+ // purposes.
+ struct tMipsOperatorData {
+ tMipsOperatorData(TSourceLoc l, TIntermTyped* m) : loc(l), mipLevel(m) { }
+ TSourceLoc loc;
+ TIntermTyped* mipLevel;
+ };
+
+ TVector<tMipsOperatorData> mipsOperatorMipArg;
+
+ // A texture object may be used with shadow and non-shadow samplers, but both may not be
+ // alive post-DCE in the same shader. We do not know at compilation time which are alive: that's
+ // only known post-DCE. If a texture is used both ways, we create two textures, and
+ // leave the elimiation of one to the optimizer. This maps the shader variant to
+ // the shadow variant.
+ //
+ // This can be removed if and when the texture shadow code in
+ // HlslParseContext::handleSamplerTextureCombine is removed.
+ struct tShadowTextureSymbols {
+ tShadowTextureSymbols() { symId.fill(-1); }
+
+ void set(bool shadow, int id) { symId[int(shadow)] = id; }
+ int get(bool shadow) const { return symId[int(shadow)]; }
+
+ // True if this texture has been seen with both shadow and non-shadow modes
+ bool overloaded() const { return symId[0] != -1 && symId[1] != -1; }
+ bool isShadowId(int id) const { return symId[1] == id; }
+
+ private:
+ std::array<int, 2> symId;
+ };
+
+ TMap<int, tShadowTextureSymbols*> textureShadowVariant;
};
-// This is the prefix we use for builtin methods to avoid namespace collisions with
+// This is the prefix we use for built-in methods to avoid namespace collisions with
// global scope user functions.
// TODO: this would be better as a nonparseable character, but that would
// require changing the scanner.
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp
index 1a47a0bb65e..bae9e6e8c64 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp
@@ -68,14 +68,21 @@ const char* BaseTypeName(const char argOrder, const char* scalarName, const char
}
}
-bool IsSamplerType(const char argType) { return argType == 'S' || argType == 's'; }
-bool IsArrayed(const char argOrder) { return argOrder == '@' || argOrder == '&' || argOrder == '#'; }
-bool IsTextureMS(const char argOrder) { return argOrder == '$' || argOrder == '&'; }
-bool IsBuffer(const char argOrder) { return argOrder == '*' || argOrder == '~'; }
-bool IsImage(const char argOrder) { return argOrder == '!' || argOrder == '#' || argOrder == '~'; }
+// arg order queries
+bool IsSamplerType(const char argType) { return argType == 'S' || argType == 's'; }
+bool IsArrayed(const char argOrder) { return argOrder == '@' || argOrder == '&' || argOrder == '#'; }
+bool IsTextureNonMS(const char argOrder) { return argOrder == '%'; }
+bool IsSubpassInput(const char argOrder) { return argOrder == '[' || argOrder == ']'; }
+bool IsArrayedTexture(const char argOrder) { return argOrder == '@'; }
+bool IsTextureMS(const char argOrder) { return argOrder == '$' || argOrder == '&'; }
+bool IsMS(const char argOrder) { return IsTextureMS(argOrder) || argOrder == ']'; }
+bool IsBuffer(const char argOrder) { return argOrder == '*' || argOrder == '~'; }
+bool IsImage(const char argOrder) { return argOrder == '!' || argOrder == '#' || argOrder == '~'; }
+
bool IsTextureType(const char argOrder)
{
- return argOrder == '%' || argOrder == '@' || IsTextureMS(argOrder) || IsBuffer(argOrder) | IsImage(argOrder);
+ return IsTextureNonMS(argOrder) || IsArrayedTexture(argOrder) ||
+ IsTextureMS(argOrder) || IsBuffer(argOrder) || IsImage(argOrder);
}
// Reject certain combinations that are illegal sample methods. For example,
@@ -111,7 +118,8 @@ bool IsIllegalSample(const glslang::TString& name, const char* argOrder, int dim
name == "GatherAlpha");
const bool isGatherCmp =
- (name == "GatherCmpRed" ||
+ (name == "GatherCmp" ||
+ name == "GatherCmpRed" ||
name == "GatherCmpGreen" ||
name == "GatherCmpBlue" ||
name == "GatherCmpAlpha");
@@ -221,15 +229,16 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
const bool isTexture = IsTextureType(argOrder[0]);
const bool isArrayed = IsArrayed(argOrder[0]);
const bool isSampler = IsSamplerType(argType[0]);
- const bool isMS = IsTextureMS(argOrder[0]);
+ const bool isMS = IsMS(argOrder[0]);
const bool isBuffer = IsBuffer(argOrder[0]);
const bool isImage = IsImage(argOrder[0]);
+ const bool isSubpass = IsSubpassInput(argOrder[0]);
char type = *argType;
if (isTranspose) { // Take transpose of matrix dimensions
std::swap(dim0, dim1);
- } else if (isTexture) {
+ } else if (isTexture || isSubpass) {
if (type == 'F') // map base type to texture of that type.
type = 'T'; // e.g, int -> itexture, uint -> utexture, etc.
else if (type == 'I')
@@ -254,16 +263,23 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
case 'S': s += "sampler"; break;
case 's': s += "SamplerComparisonState"; break;
case 'T': s += ((isBuffer && isImage) ? "RWBuffer" :
+ isSubpass ? "SubpassInput" :
isBuffer ? "Buffer" :
isImage ? "RWTexture" : "Texture"); break;
case 'i': s += ((isBuffer && isImage) ? "RWBuffer" :
+ isSubpass ? "SubpassInput" :
isBuffer ? "Buffer" :
isImage ? "RWTexture" : "Texture"); break;
case 'u': s += ((isBuffer && isImage) ? "RWBuffer" :
+ isSubpass ? "SubpassInput" :
isBuffer ? "Buffer" :
isImage ? "RWTexture" : "Texture"); break;
default: s += "UNKNOWN_TYPE"; break;
}
+
+ if (isSubpass && isMS)
+ s += "MS";
+
} else {
switch (type) {
case '-': s += "void"; break;
@@ -281,6 +297,7 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
s += type;
s += ((isImage && isBuffer) ? "imageBuffer" :
+ isSubpass ? "subpassInput" :
isImage ? "image" :
isBuffer ? "samplerBuffer" :
"texture");
@@ -295,6 +312,9 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
if (fixedVecSize != 0)
dim0 = dim1 = fixedVecSize;
+ const char dim0Char = ('0' + char(dim0));
+ const char dim1Char = ('0' + char(dim1));
+
// Add sampler dimensions
if (isSampler || isTexture) {
if ((order == 'V' || isTexture) && !isBuffer) {
@@ -319,12 +339,12 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
case '-': break; // no dimensions for voids
case 'S': break; // no dimensions on scalars
case 'V':
- s += ('0' + char(dim0));
+ s += dim0Char;
break;
case 'M':
- s += ('0' + char(dim0));
+ s += dim0Char;
s += 'x';
- s += ('0' + char(dim1));
+ s += dim1Char;
break;
default:
break;
@@ -338,9 +358,9 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
// For HLSL, append return type for texture types
if (UseHlslTypes) {
switch (type) {
- case 'i': s += "<int4>"; break;
- case 'u': s += "<uint4>"; break;
- case 'T': s += "<float4>"; break;
+ case 'i': s += "<int"; s += dim0Char; s += ">"; break;
+ case 'u': s += "<uint"; s += dim0Char; s += ">"; break;
+ case 'T': s += "<float"; s += dim0Char; s += ">"; break;
default: break;
}
}
@@ -359,7 +379,7 @@ inline bool IsValid(const char* cname, char retOrder, char retType, char argOrde
const std::string name(cname);
// these do not have vec1 versions
- if (dim0 == 1 && (name == "length" || name == "normalize" || name == "reflect" || name == "refract"))
+ if (dim0 == 1 && (name == "normalize" || name == "reflect" || name == "refract"))
return false;
if (!IsTextureType(argOrder) && (isVec && dim0 == 1)) // avoid vec1
@@ -413,7 +433,7 @@ inline void FindVectorMatrixBounds(const char* argOrder, int fixedVecSize, int&
const char* nthArgOrder(NthArg(argOrder, arg));
if (nthArgOrder == nullptr)
break;
- else if (*nthArgOrder == 'V')
+ else if (*nthArgOrder == 'V' || IsSubpassInput(*nthArgOrder))
dim0Max = 4;
else if (*nthArgOrder == 'M')
dim0Max = dim1Max = 4;
@@ -501,7 +521,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
static const EShLanguageMask EShLangAll = EShLanguageMask(EShLangCount - 1);
// These are the actual stage masks defined in the documentation, in case they are
- // needed for furture validation. For now, they are commented out, and set below
+ // needed for future validation. For now, they are commented out, and set below
// to EShLangAll, to allow any intrinsic to be used in any shader, which is legal
// if it is not called.
//
@@ -536,6 +556,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
// '!' as first letter of order creates image object
// '#' as first letter of order creates arrayed image object
// '~' as first letter of order creates an image buffer object
+ // '[' / ']' as first letter of order creates a SubpassInput/SubpassInputMS object
static const struct {
const char* name; // intrinsic name
@@ -546,8 +567,8 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
unsigned int stage; // stage mask
bool method; // true if it's a method.
} hlslIntrinsics[] = {
- // name retOrd retType argOrder argType stage mask
- // -----------------------------------------------------------------------------------------------
+ // name retOrd retType argOrder argType stage mask method
+ // ----------------------------------------------------------------------------------------------------------------
{ "abort", nullptr, nullptr, "-", "-", EShLangAll, false },
{ "abs", nullptr, nullptr, "SVM", "DFUI", EShLangAll, false },
{ "acos", nullptr, nullptr, "SVM", "F", EShLangAll, false },
@@ -566,7 +587,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
{ "ceil", nullptr, nullptr, "SVM", "F", EShLangAll, false },
{ "CheckAccessFullyMapped", "S", "B" , "S", "U", EShLangPSCS, false },
{ "clamp", nullptr, nullptr, "SVM,,", "FUI,,", EShLangAll, false },
- { "clip", "-", "-", "SVM", "F", EShLangPS, false },
+ { "clip", "-", "-", "SVM", "FUI", EShLangPS, false },
{ "cos", nullptr, nullptr, "SVM", "F", EShLangAll, false },
{ "cosh", nullptr, nullptr, "SVM", "F", EShLangAll, false },
{ "countbits", nullptr, nullptr, "SV", "UI", EShLangAll, false },
@@ -625,7 +646,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
{ "isinf", nullptr, "B" , "SVM", "F", EShLangAll, false },
{ "isnan", nullptr, "B" , "SVM", "F", EShLangAll, false },
{ "ldexp", nullptr, nullptr, "SVM,", "F,", EShLangAll, false },
- { "length", "S", "F", "V", "F", EShLangAll, false },
+ { "length", "S", "F", "SV", "F", EShLangAll, false },
{ "lerp", nullptr, nullptr, "VM,,", "F,,", EShLangAll, false },
{ "lerp", nullptr, nullptr, "SVM,,S", "F,,", EShLangAll, false },
{ "lit", "V4", "F", "S,,", "F,,", EShLangAll, false },
@@ -824,6 +845,12 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
{ "GatherAlpha", /* O-4 */ "V4", nullptr, "%@,S,V,,,,", "FIU,S,F,I,,,", EShLangAll, true },
{ "GatherAlpha", /* O-4, status */"V4", nullptr, "%@,S,V,,,,,S", "FIU,S,F,I,,,,U", EShLangAll, true },
+ { "GatherCmp", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,s,F,", EShLangAll, true },
+ { "GatherCmp", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,s,F,,I", EShLangAll, true },
+ { "GatherCmp", /* O, status*/ "V4", nullptr, "%@,S,V,S,V,>S", "FIU,s,F,,I,U", EShLangAll, true },
+ { "GatherCmp", /* O-4 */ "V4", nullptr, "%@,S,V,S,V,,,", "FIU,s,F,,I,,,", EShLangAll, true },
+ { "GatherCmp", /* O-4, status */"V4", nullptr, "%@,S,V,S,V,,V,S","FIU,s,F,,I,,,,U",EShLangAll, true },
+
{ "GatherCmpRed", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,s,F,", EShLangAll, true },
{ "GatherCmpRed", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,s,F,,I", EShLangAll, true },
{ "GatherCmpRed", /* O, status*/ "V4", nullptr, "%@,S,V,S,V,>S", "FIU,s,F,,I,U", EShLangAll, true },
@@ -871,6 +898,13 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
{ "InterlockedMin", nullptr, nullptr, "-", "-", EShLangAll, true },
{ "InterlockedOr", nullptr, nullptr, "-", "-", EShLangAll, true },
{ "InterlockedXor", nullptr, nullptr, "-", "-", EShLangAll, true },
+ { "IncrementCounter", nullptr, nullptr, "-", "-", EShLangAll, true },
+ { "DecrementCounter", nullptr, nullptr, "-", "-", EShLangAll, true },
+ { "Consume", nullptr, nullptr, "-", "-", EShLangAll, true },
+
+ // Methods for subpass input objects
+ { "SubpassLoad", "V4", nullptr, "[", "FIU", EShLangPS, true },
+ { "SubpassLoad", "V4", nullptr, "],S", "FIU,I", EShLangPS, true },
// Mark end of list, since we want to avoid a range-based for, as some compilers don't handle it yet.
{ nullptr, nullptr, nullptr, nullptr, nullptr, 0, false },
@@ -1180,6 +1214,10 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil
symbolTable.relateToOperator(BUILTIN_PREFIX "Store2", EOpMethodStore2);
symbolTable.relateToOperator(BUILTIN_PREFIX "Store3", EOpMethodStore3);
symbolTable.relateToOperator(BUILTIN_PREFIX "Store4", EOpMethodStore4);
+ symbolTable.relateToOperator(BUILTIN_PREFIX "IncrementCounter", EOpMethodIncrementCounter);
+ symbolTable.relateToOperator(BUILTIN_PREFIX "DecrementCounter", EOpMethodDecrementCounter);
+ // Append is also a GS method: we don't add it twice
+ symbolTable.relateToOperator(BUILTIN_PREFIX "Consume", EOpMethodConsume);
symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedAdd", EOpInterlockedAdd);
symbolTable.relateToOperator(BUILTIN_PREFIX "InterlockedAnd", EOpInterlockedAnd);
@@ -1196,6 +1234,7 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil
symbolTable.relateToOperator(BUILTIN_PREFIX "GatherGreen", EOpMethodGatherGreen);
symbolTable.relateToOperator(BUILTIN_PREFIX "GatherBlue", EOpMethodGatherBlue);
symbolTable.relateToOperator(BUILTIN_PREFIX "GatherAlpha", EOpMethodGatherAlpha);
+ symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmp", EOpMethodGatherCmpRed); // alias
symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpRed", EOpMethodGatherCmpRed);
symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpGreen", EOpMethodGatherCmpGreen);
symbolTable.relateToOperator(BUILTIN_PREFIX "GatherCmpBlue", EOpMethodGatherCmpBlue);
@@ -1204,6 +1243,10 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil
// GS methods
symbolTable.relateToOperator(BUILTIN_PREFIX "Append", EOpMethodAppend);
symbolTable.relateToOperator(BUILTIN_PREFIX "RestartStrip", EOpMethodRestartStrip);
+
+ // Subpass input methods
+ symbolTable.relateToOperator(BUILTIN_PREFIX "SubpassLoad", EOpSubpassLoad);
+ symbolTable.relateToOperator(BUILTIN_PREFIX "SubpassLoadMS", EOpSubpassLoadMS);
}
//
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.cpp
index 7b0365f4f92..d1e0be6e136 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslScanContext.cpp
@@ -279,6 +279,22 @@ void HlslScanContext::fillInKeywordMap()
(*KeywordMap)["float4x2"] = EHTokFloat4x2;
(*KeywordMap)["float4x3"] = EHTokFloat4x3;
(*KeywordMap)["float4x4"] = EHTokFloat4x4;
+ (*KeywordMap)["half1x1"] = EHTokHalf1x1;
+ (*KeywordMap)["half1x2"] = EHTokHalf1x2;
+ (*KeywordMap)["half1x3"] = EHTokHalf1x3;
+ (*KeywordMap)["half1x4"] = EHTokHalf1x4;
+ (*KeywordMap)["half2x1"] = EHTokHalf2x1;
+ (*KeywordMap)["half2x2"] = EHTokHalf2x2;
+ (*KeywordMap)["half2x3"] = EHTokHalf2x3;
+ (*KeywordMap)["half2x4"] = EHTokHalf2x4;
+ (*KeywordMap)["half3x1"] = EHTokHalf3x1;
+ (*KeywordMap)["half3x2"] = EHTokHalf3x2;
+ (*KeywordMap)["half3x3"] = EHTokHalf3x3;
+ (*KeywordMap)["half3x4"] = EHTokHalf3x4;
+ (*KeywordMap)["half4x1"] = EHTokHalf4x1;
+ (*KeywordMap)["half4x2"] = EHTokHalf4x2;
+ (*KeywordMap)["half4x3"] = EHTokHalf4x3;
+ (*KeywordMap)["half4x4"] = EHTokHalf4x4;
(*KeywordMap)["double1x1"] = EHTokDouble1x1;
(*KeywordMap)["double1x2"] = EHTokDouble1x2;
(*KeywordMap)["double1x3"] = EHTokDouble1x3;
@@ -320,6 +336,8 @@ void HlslScanContext::fillInKeywordMap()
(*KeywordMap)["RWTexture2DArray"] = EHTokRWTexture2darray;
(*KeywordMap)["RWTexture3D"] = EHTokRWTexture3d;
(*KeywordMap)["RWBuffer"] = EHTokRWBuffer;
+ (*KeywordMap)["SubpassInput"] = EHTokSubpassInput;
+ (*KeywordMap)["SubpassInputMS"] = EHTokSubpassInputMS;
(*KeywordMap)["AppendStructuredBuffer"] = EHTokAppendStructuredBuffer;
(*KeywordMap)["ByteAddressBuffer"] = EHTokByteAddressBuffer;
@@ -327,13 +345,16 @@ void HlslScanContext::fillInKeywordMap()
(*KeywordMap)["RWByteAddressBuffer"] = EHTokRWByteAddressBuffer;
(*KeywordMap)["RWStructuredBuffer"] = EHTokRWStructuredBuffer;
(*KeywordMap)["StructuredBuffer"] = EHTokStructuredBuffer;
+ (*KeywordMap)["TextureBuffer"] = EHTokTextureBuffer;
(*KeywordMap)["class"] = EHTokClass;
(*KeywordMap)["struct"] = EHTokStruct;
(*KeywordMap)["cbuffer"] = EHTokCBuffer;
+ (*KeywordMap)["ConstantBuffer"] = EHTokConstantBuffer;
(*KeywordMap)["tbuffer"] = EHTokTBuffer;
(*KeywordMap)["typedef"] = EHTokTypedef;
(*KeywordMap)["this"] = EHTokThis;
+ (*KeywordMap)["namespace"] = EHTokNamespace;
(*KeywordMap)["true"] = EHTokBoolConstant;
(*KeywordMap)["false"] = EHTokBoolConstant;
@@ -402,32 +423,6 @@ void HlslScanContext::fillInKeywordMap()
}
(*SemanticMap)["SV_POSITION"] = EbvPosition;
- (*SemanticMap)["SV_CLIPDISTANCE"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE0"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE1"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE2"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE3"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE4"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE5"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE6"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE7"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE8"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE9"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE10"] = EbvClipDistance;
- (*SemanticMap)["SV_CLIPDISTANCE11"] = EbvClipDistance;
- (*SemanticMap)["SV_CULLDISTANCE"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE0"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE1"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE2"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE3"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE4"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE5"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE6"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE7"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE8"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE9"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE10"] = EbvCullDistance;
- (*SemanticMap)["SV_CULLDISTANCE11"] = EbvCullDistance;
(*SemanticMap)["SV_VERTEXID"] = EbvVertexIndex;
(*SemanticMap)["SV_VIEWPORTARRAYINDEX"] = EbvViewportIndex;
(*SemanticMap)["SV_TESSFACTOR"] = EbvTessLevelOuter;
@@ -448,7 +443,7 @@ void HlslScanContext::fillInKeywordMap()
(*SemanticMap)["SV_COVERAGE"] = EbvSampleMask;
(*SemanticMap)["SV_DEPTHGREATEREQUAL"] = EbvFragDepthGreater;
(*SemanticMap)["SV_DEPTHLESSEQUAL"] = EbvFragDepthLesser;
- (*SemanticMap)["SV_STENCILREF"] = EbvStencilRef;
+ (*SemanticMap)["SV_STENCILREF"] = EbvFragStencilRef;
}
void HlslScanContext::deleteKeywordMap()
@@ -771,6 +766,22 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier()
case EHTokFloat4x2:
case EHTokFloat4x3:
case EHTokFloat4x4:
+ case EHTokHalf1x1:
+ case EHTokHalf1x2:
+ case EHTokHalf1x3:
+ case EHTokHalf1x4:
+ case EHTokHalf2x1:
+ case EHTokHalf2x2:
+ case EHTokHalf2x3:
+ case EHTokHalf2x4:
+ case EHTokHalf3x1:
+ case EHTokHalf3x2:
+ case EHTokHalf3x3:
+ case EHTokHalf3x4:
+ case EHTokHalf4x1:
+ case EHTokHalf4x2:
+ case EHTokHalf4x3:
+ case EHTokHalf4x4:
case EHTokDouble1x1:
case EHTokDouble1x2:
case EHTokDouble1x3:
@@ -819,6 +830,9 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier()
case EHTokRWByteAddressBuffer:
case EHTokRWStructuredBuffer:
case EHTokStructuredBuffer:
+ case EHTokTextureBuffer:
+ case EHTokSubpassInput:
+ case EHTokSubpassInputMS:
return keyword;
// variable, user type, ...
@@ -826,8 +840,10 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier()
case EHTokStruct:
case EHTokTypedef:
case EHTokCBuffer:
+ case EHTokConstantBuffer:
case EHTokTBuffer:
case EHTokThis:
+ case EHTokNamespace:
return keyword;
case EHTokBoolConstant:
@@ -876,28 +892,4 @@ EHlslTokenClass HlslScanContext::reservedWord()
return EHTokNone;
}
-EHlslTokenClass HlslScanContext::identifierOrReserved(bool reserved)
-{
- if (reserved) {
- reservedWord();
-
- return EHTokNone;
- }
-
- if (parseContext.forwardCompatible)
- parseContext.warn(loc, "using future reserved keyword", tokenText, "");
-
- return identifierOrType();
-}
-
-// For a keyword that was never reserved, until it suddenly
-// showed up.
-EHlslTokenClass HlslScanContext::nonreservedKeyword(int version)
-{
- if (parseContext.version < version)
- return identifierOrType();
-
- return keyword;
-}
-
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokens.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokens.h
index 9f91906cd38..98450c9a0e2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokens.h
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslTokens.h
@@ -216,6 +216,22 @@ enum EHlslTokenClass {
EHTokFloat4x2,
EHTokFloat4x3,
EHTokFloat4x4,
+ EHTokHalf1x1,
+ EHTokHalf1x2,
+ EHTokHalf1x3,
+ EHTokHalf1x4,
+ EHTokHalf2x1,
+ EHTokHalf2x2,
+ EHTokHalf2x3,
+ EHTokHalf2x4,
+ EHTokHalf3x1,
+ EHTokHalf3x2,
+ EHTokHalf3x3,
+ EHTokHalf3x4,
+ EHTokHalf4x1,
+ EHTokHalf4x2,
+ EHTokHalf4x3,
+ EHTokHalf4x4,
EHTokDouble1x1,
EHTokDouble1x2,
EHTokDouble1x3,
@@ -257,6 +273,8 @@ enum EHlslTokenClass {
EHTokRWTexture2darray,
EHTokRWTexture3d,
EHTokRWBuffer,
+ EHTokSubpassInput,
+ EHTokSubpassInputMS,
// Structure buffer variants
EHTokAppendStructuredBuffer,
@@ -265,6 +283,7 @@ enum EHlslTokenClass {
EHTokRWByteAddressBuffer,
EHTokRWStructuredBuffer,
EHTokStructuredBuffer,
+ EHTokTextureBuffer,
// variable, user type, ...
EHTokIdentifier,
@@ -274,6 +293,8 @@ enum EHlslTokenClass {
EHTokTBuffer,
EHTokTypedef,
EHTokThis,
+ EHTokNamespace,
+ EHTokConstantBuffer,
// constant
EHTokFloatConstant,
diff --git a/3rdparty/bgfx/3rdparty/glslang/known_good.json b/3rdparty/bgfx/3rdparty/glslang/known_good.json
new file mode 100644
index 00000000000..d318235ff24
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/known_good.json
@@ -0,0 +1,18 @@
+{
+ "commits" : [
+ {
+ "name" : "spirv-tools",
+ "site" : "github",
+ "subrepo" : "KhronosGroup/SPIRV-Tools",
+ "subdir" : "External/spirv-tools",
+ "commit" : "ac04b2faeabc15811e8c542a5d7a36dbdba243b8"
+ },
+ {
+ "name" : "spirv-tools/external/spirv-headers",
+ "site" : "github",
+ "subrepo" : "KhronosGroup/SPIRV-Headers",
+ "subdir" : "External/spirv-tools/external/spirv-headers",
+ "commit" : "061097878467b8e040fbf153a837d844ef9f9f96"
+ }
+ ]
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/update_glslang_sources.py b/3rdparty/bgfx/3rdparty/glslang/update_glslang_sources.py
new file mode 100644
index 00000000000..331a30116c6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/update_glslang_sources.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python
+
+# Copyright 2017 The Glslang Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Get source files for Glslang and its dependencies from public repositories.
+"""
+
+from __future__ import print_function
+
+import argparse
+import json
+import distutils.dir_util
+import os.path
+import subprocess
+import sys
+
+KNOWN_GOOD_FILE = 'known_good.json'
+
+# Maps a site name to its hostname.
+SITE_TO_HOST = { 'github' : 'github.com' }
+
+VERBOSE = True
+
+
+def command_output(cmd, directory, fail_ok=False):
+ """Runs a command in a directory and returns its standard output stream.
+
+ Captures the standard error stream.
+
+ Raises a RuntimeError if the command fails to launch or otherwise fails.
+ """
+ if VERBOSE:
+ print('In {d}: {cmd}'.format(d=directory, cmd=cmd))
+ p = subprocess.Popen(cmd,
+ cwd=directory,
+ stdout=subprocess.PIPE)
+ (stdout, _) = p.communicate()
+ if p.returncode != 0 and not fail_ok:
+ raise RuntimeError('Failed to run {} in {}'.format(cmd, directory))
+ if VERBOSE:
+ print(stdout)
+ return stdout
+
+
+def command_retval(cmd, directory):
+ """Runs a command in a directory and returns its return value.
+
+ Captures the standard error stream.
+ """
+ p = subprocess.Popen(cmd,
+ cwd=directory,
+ stdout=subprocess.PIPE)
+ (stdout, _) = p.communicate()
+ return p.returncode
+
+
+class GoodCommit(object):
+ """Represents a good commit for a repository."""
+
+ def __init__(self, json):
+ """Initializes this good commit object.
+
+ Args:
+ 'json': A fully populated JSON object describing the commit.
+ """
+ self._json = json
+ self.name = json['name']
+ self.site = json['site']
+ self.subrepo = json['subrepo']
+ self.subdir = json['subdir'] if ('subdir' in json) else '.'
+ self.commit = json['commit']
+
+ def GetUrl(self, style='https'):
+ """Returns the URL for the repository."""
+ host = SITE_TO_HOST[self.site]
+ sep = '/' if (style is 'https') else ':'
+ return '{style}://{host}{sep}{subrepo}'.format(
+ style=style,
+ host=host,
+ sep=sep,
+ subrepo=self.subrepo)
+
+ def AddRemote(self):
+ """Add the remote 'known-good' if it does not exist."""
+ print('Ignore "fatal" errors for missing known-good remote:')
+ if command_retval(['git', 'remote', 'show', 'known-good'], self.subdir) != 0:
+ command_output(['git', 'remote', 'add', 'known-good', self.GetUrl()], self.subdir)
+
+ def HasCommit(self):
+ """Check if the repository contains the known-good commit."""
+ return 0 == subprocess.call(['git', 'rev-parse', '--verify', '--quiet',
+ self.commit + "^{commit}"],
+ cwd=self.subdir)
+
+ def Clone(self):
+ distutils.dir_util.mkpath(self.subdir)
+ command_output(['git', 'clone', self.GetUrl(), '.'], self.subdir)
+
+ def Fetch(self):
+ command_output(['git', 'fetch', 'known-good'], self.subdir)
+
+ def Checkout(self):
+ if not os.path.exists(os.path.join(self.subdir,'.git')):
+ self.Clone()
+ self.AddRemote()
+ if not self.HasCommit():
+ self.Fetch()
+ command_output(['git', 'checkout', self.commit], self.subdir)
+
+
+def GetGoodCommits():
+ """Returns the latest list of GoodCommit objects."""
+ with open(KNOWN_GOOD_FILE) as known_good:
+ return [GoodCommit(c) for c in json.loads(known_good.read())['commits']]
+
+
+def main():
+ parser = argparse.ArgumentParser(description='Get Glslang source dependencies at a known-good commit')
+ parser.add_argument('--dir', dest='dir', default='.',
+ help="Set target directory for Glslang source root. Default is \'.\'.")
+
+ args = parser.parse_args()
+
+ commits = GetGoodCommits()
+
+ distutils.dir_util.mkpath(args.dir)
+ print('Change directory to {d}'.format(d=args.dir))
+ os.chdir(args.dir)
+
+ # Create the subdirectories in sorted order so that parent git repositories
+ # are created first.
+ for c in sorted(commits, key=lambda x: x.subdir):
+ print('Get {n}\n'.format(n=c.name))
+ c.Checkout()
+ sys.exit(0)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h
index 5d0fc766ecc..72f80493caf 100644
--- a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h
@@ -2,7 +2,7 @@
// File: vk_platform.h
//
/*
-** Copyright (c) 2014-2015 The Khronos Group Inc.
+** Copyright (c) 2014-2017 The Khronos Group Inc.
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -51,13 +51,13 @@ extern "C"
#define VKAPI_ATTR
#define VKAPI_CALL __stdcall
#define VKAPI_PTR VKAPI_CALL
-#elif defined(__ANDROID__) && defined(__ARM_EABI__) && !defined(__ARM_ARCH_7A__)
- // Android does not support Vulkan in native code using the "armeabi" ABI.
- #error "Vulkan requires the 'armeabi-v7a' or 'armeabi-v7a-hard' ABI on 32-bit ARM CPUs"
-#elif defined(__ANDROID__) && defined(__ARM_ARCH_7A__)
- // On Android/ARMv7a, Vulkan functions use the armeabi-v7a-hard calling
- // convention, even if the application's native code is compiled with the
- // armeabi-v7a calling convention.
+#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
+ #error "Vulkan isn't supported for the 'armeabi' NDK ABI"
+#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
+ // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat"
+ // calling convention, i.e. float parameters are passed in registers. This
+ // is true even if the rest of the application passes floats on the stack,
+ // as it does by default when compiling for the armeabi-v7a NDK ABI.
#define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
#define VKAPI_CALL
#define VKAPI_PTR VKAPI_ATTR
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h
index 2f180768567..ef0c2467803 100644
--- a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h
@@ -6,7 +6,7 @@ extern "C" {
#endif
/*
-** Copyright (c) 2015-2016 The Khronos Group Inc.
+** Copyright (c) 2015-2017 The Khronos Group Inc.
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -43,7 +43,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file
-#define VK_HEADER_VERSION 13
+#define VK_HEADER_VERSION 46
#define VK_NULL_HANDLE 0
@@ -53,11 +53,13 @@ extern "C" {
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
-#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
+#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
+#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
#else
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
#endif
+#endif
@@ -135,6 +137,7 @@ typedef enum VkResult {
VK_ERROR_INCOMPATIBLE_DRIVER = -9,
VK_ERROR_TOO_MANY_OBJECTS = -10,
VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
+ VK_ERROR_FRAGMENTED_POOL = -12,
VK_ERROR_SURFACE_LOST_KHR = -1000000000,
VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
VK_SUBOPTIMAL_KHR = 1000001003,
@@ -142,9 +145,11 @@ typedef enum VkResult {
VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
VK_ERROR_INVALID_SHADER_NV = -1000012000,
- VK_RESULT_BEGIN_RANGE = VK_ERROR_FORMAT_NOT_SUPPORTED,
+ VK_ERROR_OUT_OF_POOL_MEMORY_KHR = -1000069000,
+ VK_ERROR_INVALID_EXTERNAL_HANDLE_KHX = -1000072003,
+ VK_RESULT_BEGIN_RANGE = VK_ERROR_FRAGMENTED_POOL,
VK_RESULT_END_RANGE = VK_INCOMPLETE,
- VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FORMAT_NOT_SUPPORTED + 1),
+ VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FRAGMENTED_POOL + 1),
VK_RESULT_MAX_ENUM = 0x7FFFFFFF
} VkResult;
@@ -214,6 +219,90 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
+ VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
+ VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
+ VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
+ VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHX = 1000053000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHX = 1000053001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHX = 1000053002,
+ VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000,
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001,
+ VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000,
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001,
+ VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = 1000059000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = 1000059001,
+ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = 1000059002,
+ VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = 1000059003,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = 1000059004,
+ VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = 1000059005,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = 1000059006,
+ VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = 1000059007,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = 1000059008,
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX = 1000060000,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX = 1000060001,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX = 1000060002,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX = 1000060003,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX = 1000060004,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX = 1000060005,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX = 1000060006,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX = 1000060007,
+ VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHX = 1000060008,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHX = 1000060009,
+ VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHX = 1000060010,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX = 1000060011,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX = 1000060012,
+ VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000,
+ VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX = 1000070000,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX = 1000070001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHX = 1000071000,
+ VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHX = 1000071001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHX = 1000071002,
+ VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHX = 1000071003,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHX = 1000071004,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHX = 1000071005,
+ VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHX = 1000071006,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHX = 1000071007,
+ VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHX = 1000072000,
+ VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHX = 1000072001,
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHX = 1000072002,
+ VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHX = 1000073000,
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHX = 1000073001,
+ VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHX = 1000073002,
+ VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHX = 1000074000,
+ VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHX = 1000074001,
+ VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHX = 1000075000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHX = 1000076000,
+ VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHX = 1000076001,
+ VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHX = 1000077000,
+ VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHX = 1000078000,
+ VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHX = 1000078001,
+ VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHX = 1000078002,
+ VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHX = 1000079000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000,
+ VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = 1000085000,
+ VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = 1000086000,
+ VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = 1000086001,
+ VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX = 1000086002,
+ VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX = 1000086003,
+ VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX = 1000086004,
+ VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX = 1000086005,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000,
+ VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = 1000090000,
+ VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000,
+ VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001,
+ VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002,
+ VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003,
+ VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000,
+ VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001,
+ VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000,
+ VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000,
+ VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000,
VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
@@ -426,6 +515,14 @@ typedef enum VkFormat {
VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
+ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000,
+ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001,
+ VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002,
+ VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003,
+ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004,
+ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005,
+ VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006,
+ VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007,
VK_FORMAT_BEGIN_RANGE = VK_FORMAT_UNDEFINED,
VK_FORMAT_END_RANGE = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
VK_FORMAT_RANGE_SIZE = (VK_FORMAT_ASTC_12x12_SRGB_BLOCK - VK_FORMAT_UNDEFINED + 1),
@@ -674,6 +771,8 @@ typedef enum VkDynamicState {
VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
+ VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000,
+ VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000,
VK_DYNAMIC_STATE_BEGIN_RANGE = VK_DYNAMIC_STATE_VIEWPORT,
VK_DYNAMIC_STATE_END_RANGE = VK_DYNAMIC_STATE_STENCIL_REFERENCE,
VK_DYNAMIC_STATE_RANGE_SIZE = (VK_DYNAMIC_STATE_STENCIL_REFERENCE - VK_DYNAMIC_STATE_VIEWPORT + 1),
@@ -814,6 +913,8 @@ typedef enum VkFormatFeatureFlagBits {
VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
+ VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = 0x00004000,
+ VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = 0x00008000,
VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkFormatFeatureFlagBits;
typedef VkFlags VkFormatFeatureFlags;
@@ -837,6 +938,8 @@ typedef enum VkImageCreateFlagBits {
VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
+ VK_IMAGE_CREATE_BIND_SFR_BIT_KHX = 0x00000040,
+ VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = 0x00000020,
VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkImageCreateFlagBits;
typedef VkFlags VkImageCreateFlags;
@@ -874,6 +977,7 @@ typedef VkFlags VkMemoryPropertyFlags;
typedef enum VkMemoryHeapFlagBits {
VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
+ VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHX = 0x00000002,
VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkMemoryHeapFlagBits;
typedef VkFlags VkMemoryHeapFlags;
@@ -898,6 +1002,7 @@ typedef enum VkPipelineStageFlagBits {
VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
+ VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX = 0x00020000,
VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkPipelineStageFlagBits;
typedef VkFlags VkPipelineStageFlags;
@@ -990,6 +1095,8 @@ typedef enum VkPipelineCreateFlagBits {
VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
+ VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHX = 0x00000008,
+ VK_PIPELINE_CREATE_DISPATCH_BASE_KHX = 0x00000010,
VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkPipelineCreateFlagBits;
typedef VkFlags VkPipelineCreateFlags;
@@ -1036,6 +1143,11 @@ typedef VkFlags VkPipelineDynamicStateCreateFlags;
typedef VkFlags VkPipelineLayoutCreateFlags;
typedef VkFlags VkShaderStageFlags;
typedef VkFlags VkSamplerCreateFlags;
+
+typedef enum VkDescriptorSetLayoutCreateFlagBits {
+ VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = 0x00000001,
+ VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorSetLayoutCreateFlagBits;
typedef VkFlags VkDescriptorSetLayoutCreateFlags;
typedef enum VkDescriptorPoolCreateFlagBits {
@@ -1052,6 +1164,12 @@ typedef enum VkAttachmentDescriptionFlagBits {
VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkAttachmentDescriptionFlagBits;
typedef VkFlags VkAttachmentDescriptionFlags;
+
+typedef enum VkSubpassDescriptionFlagBits {
+ VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001,
+ VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002,
+ VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSubpassDescriptionFlagBits;
typedef VkFlags VkSubpassDescriptionFlags;
typedef enum VkAccessFlagBits {
@@ -1072,12 +1190,16 @@ typedef enum VkAccessFlagBits {
VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
+ VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX = 0x00020000,
+ VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX = 0x00040000,
VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkAccessFlagBits;
typedef VkFlags VkAccessFlags;
typedef enum VkDependencyFlagBits {
VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
+ VK_DEPENDENCY_VIEW_LOCAL_BIT_KHX = 0x00000002,
+ VK_DEPENDENCY_DEVICE_GROUP_BIT_KHX = 0x00000004,
VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkDependencyFlagBits;
typedef VkFlags VkDependencyFlags;
@@ -2340,14 +2462,14 @@ typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const uint32_t* pData);
+typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
@@ -2976,9 +3098,9 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
VkCommandBuffer commandBuffer,
- uint32_t x,
- uint32_t y,
- uint32_t z);
+ uint32_t groupCountX,
+ uint32_t groupCountY,
+ uint32_t groupCountZ);
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
VkCommandBuffer commandBuffer,
@@ -3032,7 +3154,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
VkBuffer dstBuffer,
VkDeviceSize dstOffset,
VkDeviceSize dataSize,
- const uint32_t* pData);
+ const void* pData);
VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
VkCommandBuffer commandBuffer,
@@ -3177,6 +3299,19 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
typedef enum VkColorSpaceKHR {
VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
+ VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
+ VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
+ VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = 1000104003,
+ VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
+ VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
+ VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
+ VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
+ VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
+ VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
+ VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
+ VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
+ VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
+ VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
VK_COLOR_SPACE_BEGIN_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
VK_COLOR_SPACE_END_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
VK_COLOR_SPACE_RANGE_SIZE_KHR = (VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR + 1),
@@ -3279,6 +3414,11 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
#define VK_KHR_SWAPCHAIN_SPEC_VERSION 68
#define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain"
+
+typedef enum VkSwapchainCreateFlagBitsKHR {
+ VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX = 0x00000001,
+ VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkSwapchainCreateFlagBitsKHR;
typedef VkFlags VkSwapchainCreateFlagsKHR;
typedef struct VkSwapchainCreateInfoKHR {
@@ -3579,7 +3719,7 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
#define VK_KHR_wayland_surface 1
#include <wayland-client.h>
-#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 5
+#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6
#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
typedef VkFlags VkWaylandSurfaceCreateFlagsKHR;
@@ -3712,10 +3852,259 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge"
+#define VK_KHR_get_physical_device_properties2 1
+#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 1
+#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2"
+
+typedef struct VkPhysicalDeviceFeatures2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkPhysicalDeviceFeatures features;
+} VkPhysicalDeviceFeatures2KHR;
+
+typedef struct VkPhysicalDeviceProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkPhysicalDeviceProperties properties;
+} VkPhysicalDeviceProperties2KHR;
+
+typedef struct VkFormatProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkFormatProperties formatProperties;
+} VkFormatProperties2KHR;
+
+typedef struct VkImageFormatProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkImageFormatProperties imageFormatProperties;
+} VkImageFormatProperties2KHR;
+
+typedef struct VkPhysicalDeviceImageFormatInfo2KHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkFormat format;
+ VkImageType type;
+ VkImageTiling tiling;
+ VkImageUsageFlags usage;
+ VkImageCreateFlags flags;
+} VkPhysicalDeviceImageFormatInfo2KHR;
+
+typedef struct VkQueueFamilyProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkQueueFamilyProperties queueFamilyProperties;
+} VkQueueFamilyProperties2KHR;
+
+typedef struct VkPhysicalDeviceMemoryProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkPhysicalDeviceMemoryProperties memoryProperties;
+} VkPhysicalDeviceMemoryProperties2KHR;
+
+typedef struct VkSparseImageFormatProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkSparseImageFormatProperties properties;
+} VkSparseImageFormatProperties2KHR;
+
+typedef struct VkPhysicalDeviceSparseImageFormatInfo2KHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkFormat format;
+ VkImageType type;
+ VkSampleCountFlagBits samples;
+ VkImageUsageFlags usage;
+ VkImageTiling tiling;
+} VkPhysicalDeviceSparseImageFormatInfo2KHR;
+
+
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2KHR* pFeatures);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2KHR* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2KHR* pFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo, VkImageFormatProperties2KHR* pImageFormatProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2KHR* pQueueFamilyProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2KHR* pProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceFeatures2KHR* pFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceProperties2KHR* pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkFormatProperties2KHR* pFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo,
+ VkImageFormatProperties2KHR* pImageFormatProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pQueueFamilyPropertyCount,
+ VkQueueFamilyProperties2KHR* pQueueFamilyProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo,
+ uint32_t* pPropertyCount,
+ VkSparseImageFormatProperties2KHR* pProperties);
+#endif
+
+#define VK_KHR_shader_draw_parameters 1
+#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1
+#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters"
+
+
+#define VK_KHR_maintenance1 1
+#define VK_KHR_MAINTENANCE1_SPEC_VERSION 1
+#define VK_KHR_MAINTENANCE1_EXTENSION_NAME "VK_KHR_maintenance1"
+
+typedef VkFlags VkCommandPoolTrimFlagsKHR;
+
+typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlagsKHR flags);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR(
+ VkDevice device,
+ VkCommandPool commandPool,
+ VkCommandPoolTrimFlagsKHR flags);
+#endif
+
+#define VK_KHR_push_descriptor 1
+#define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 1
+#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor"
+
+typedef struct VkPhysicalDevicePushDescriptorPropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxPushDescriptors;
+} VkPhysicalDevicePushDescriptorPropertiesKHR;
+
+
+typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR(
+ VkCommandBuffer commandBuffer,
+ VkPipelineBindPoint pipelineBindPoint,
+ VkPipelineLayout layout,
+ uint32_t set,
+ uint32_t descriptorWriteCount,
+ const VkWriteDescriptorSet* pDescriptorWrites);
+#endif
+
+#define VK_KHR_incremental_present 1
+#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
+#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
+
+typedef struct VkRectLayerKHR {
+ VkOffset2D offset;
+ VkExtent2D extent;
+ uint32_t layer;
+} VkRectLayerKHR;
+
+typedef struct VkPresentRegionKHR {
+ uint32_t rectangleCount;
+ const VkRectLayerKHR* pRectangles;
+} VkPresentRegionKHR;
+
+typedef struct VkPresentRegionsKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t swapchainCount;
+ const VkPresentRegionKHR* pRegions;
+} VkPresentRegionsKHR;
+
+
+
+#define VK_KHR_descriptor_update_template 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplateKHR)
+
+#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1
+#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template"
+
+
+typedef enum VkDescriptorUpdateTemplateTypeKHR {
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = 0,
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1,
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_BEGIN_RANGE_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR,
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_END_RANGE_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_RANGE_SIZE_KHR = (VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR - VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR + 1),
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkDescriptorUpdateTemplateTypeKHR;
+
+typedef VkFlags VkDescriptorUpdateTemplateCreateFlagsKHR;
+
+typedef struct VkDescriptorUpdateTemplateEntryKHR {
+ uint32_t dstBinding;
+ uint32_t dstArrayElement;
+ uint32_t descriptorCount;
+ VkDescriptorType descriptorType;
+ size_t offset;
+ size_t stride;
+} VkDescriptorUpdateTemplateEntryKHR;
+
+typedef struct VkDescriptorUpdateTemplateCreateInfoKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkDescriptorUpdateTemplateCreateFlagsKHR flags;
+ uint32_t descriptorUpdateEntryCount;
+ const VkDescriptorUpdateTemplateEntryKHR* pDescriptorUpdateEntries;
+ VkDescriptorUpdateTemplateTypeKHR templateType;
+ VkDescriptorSetLayout descriptorSetLayout;
+ VkPipelineBindPoint pipelineBindPoint;
+ VkPipelineLayout pipelineLayout;
+ uint32_t set;
+} VkDescriptorUpdateTemplateCreateInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate);
+typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void* pData);
+typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR(
+ VkDevice device,
+ const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR(
+ VkDevice device,
+ VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateKHR(
+ VkDevice device,
+ VkDescriptorSet descriptorSet,
+ VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
+ const void* pData);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR(
+ VkCommandBuffer commandBuffer,
+ VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
+ VkPipelineLayout layout,
+ uint32_t set,
+ const void* pData);
+#endif
+
#define VK_EXT_debug_report 1
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
-#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 2
+#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 6
#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
#define VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
@@ -3750,9 +4139,14 @@ typedef enum VkDebugReportObjectTypeEXT {
VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26,
VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27,
VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = 28,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30,
+ VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT = 31,
+ VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT = 32,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = 1000085000,
VK_DEBUG_REPORT_OBJECT_TYPE_BEGIN_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
- VK_DEBUG_REPORT_OBJECT_TYPE_END_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT,
- VK_DEBUG_REPORT_OBJECT_TYPE_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT + 1),
+ VK_DEBUG_REPORT_OBJECT_TYPE_END_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT + 1),
VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} VkDebugReportObjectTypeEXT;
@@ -3855,8 +4249,18 @@ typedef struct VkPipelineRasterizationStateRasterizationOrderAMD {
+#define VK_AMD_shader_trinary_minmax 1
+#define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1
+#define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax"
+
+
+#define VK_AMD_shader_explicit_vertex_parameter 1
+#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1
+#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter"
+
+
#define VK_EXT_debug_marker 1
-#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 3
+#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4
#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker"
typedef struct VkDebugMarkerObjectNameInfoEXT {
@@ -3912,6 +4316,1506 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT(
VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
#endif
+#define VK_AMD_gcn_shader 1
+#define VK_AMD_GCN_SHADER_SPEC_VERSION 1
+#define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader"
+
+
+#define VK_NV_dedicated_allocation 1
+#define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1
+#define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation"
+
+typedef struct VkDedicatedAllocationImageCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 dedicatedAllocation;
+} VkDedicatedAllocationImageCreateInfoNV;
+
+typedef struct VkDedicatedAllocationBufferCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 dedicatedAllocation;
+} VkDedicatedAllocationBufferCreateInfoNV;
+
+typedef struct VkDedicatedAllocationMemoryAllocateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage image;
+ VkBuffer buffer;
+} VkDedicatedAllocationMemoryAllocateInfoNV;
+
+
+
+#define VK_AMD_draw_indirect_count 1
+#define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 1
+#define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count"
+
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ VkBuffer countBuffer,
+ VkDeviceSize countBufferOffset,
+ uint32_t maxDrawCount,
+ uint32_t stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ VkBuffer countBuffer,
+ VkDeviceSize countBufferOffset,
+ uint32_t maxDrawCount,
+ uint32_t stride);
+#endif
+
+#define VK_AMD_negative_viewport_height 1
+#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1
+#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height"
+
+
+#define VK_AMD_gpu_shader_half_float 1
+#define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 1
+#define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float"
+
+
+#define VK_AMD_shader_ballot 1
+#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1
+#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot"
+
+
+#define VK_KHX_multiview 1
+#define VK_KHX_MULTIVIEW_SPEC_VERSION 1
+#define VK_KHX_MULTIVIEW_EXTENSION_NAME "VK_KHX_multiview"
+
+typedef struct VkRenderPassMultiviewCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t subpassCount;
+ const uint32_t* pViewMasks;
+ uint32_t dependencyCount;
+ const int32_t* pViewOffsets;
+ uint32_t correlationMaskCount;
+ const uint32_t* pCorrelationMasks;
+} VkRenderPassMultiviewCreateInfoKHX;
+
+typedef struct VkPhysicalDeviceMultiviewFeaturesKHX {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 multiview;
+ VkBool32 multiviewGeometryShader;
+ VkBool32 multiviewTessellationShader;
+} VkPhysicalDeviceMultiviewFeaturesKHX;
+
+typedef struct VkPhysicalDeviceMultiviewPropertiesKHX {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxMultiviewViewCount;
+ uint32_t maxMultiviewInstanceIndex;
+} VkPhysicalDeviceMultiviewPropertiesKHX;
+
+
+
+#define VK_IMG_format_pvrtc 1
+#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1
+#define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc"
+
+
+#define VK_NV_external_memory_capabilities 1
+#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
+#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities"
+
+
+typedef enum VkExternalMemoryHandleTypeFlagBitsNV {
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
+} VkExternalMemoryHandleTypeFlagBitsNV;
+typedef VkFlags VkExternalMemoryHandleTypeFlagsNV;
+
+typedef enum VkExternalMemoryFeatureFlagBitsNV {
+ VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001,
+ VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002,
+ VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004,
+ VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
+} VkExternalMemoryFeatureFlagBitsNV;
+typedef VkFlags VkExternalMemoryFeatureFlagsNV;
+
+typedef struct VkExternalImageFormatPropertiesNV {
+ VkImageFormatProperties imageFormatProperties;
+ VkExternalMemoryFeatureFlagsNV externalMemoryFeatures;
+ VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
+ VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
+} VkExternalImageFormatPropertiesNV;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkImageType type,
+ VkImageTiling tiling,
+ VkImageUsageFlags usage,
+ VkImageCreateFlags flags,
+ VkExternalMemoryHandleTypeFlagsNV externalHandleType,
+ VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
+#endif
+
+#define VK_NV_external_memory 1
+#define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1
+#define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory"
+
+typedef struct VkExternalMemoryImageCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagsNV handleTypes;
+} VkExternalMemoryImageCreateInfoNV;
+
+typedef struct VkExportMemoryAllocateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagsNV handleTypes;
+} VkExportMemoryAllocateInfoNV;
+
+
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+#define VK_NV_external_memory_win32 1
+#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
+#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32"
+
+typedef struct VkImportMemoryWin32HandleInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagsNV handleType;
+ HANDLE handle;
+} VkImportMemoryWin32HandleInfoNV;
+
+typedef struct VkExportMemoryWin32HandleInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ const SECURITY_ATTRIBUTES* pAttributes;
+ DWORD dwAccess;
+} VkExportMemoryWin32HandleInfoNV;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV(
+ VkDevice device,
+ VkDeviceMemory memory,
+ VkExternalMemoryHandleTypeFlagsNV handleType,
+ HANDLE* pHandle);
+#endif
+#endif /* VK_USE_PLATFORM_WIN32_KHR */
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+#define VK_NV_win32_keyed_mutex 1
+#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 1
+#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
+
+typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t acquireCount;
+ const VkDeviceMemory* pAcquireSyncs;
+ const uint64_t* pAcquireKeys;
+ const uint32_t* pAcquireTimeoutMilliseconds;
+ uint32_t releaseCount;
+ const VkDeviceMemory* pReleaseSyncs;
+ const uint64_t* pReleaseKeys;
+} VkWin32KeyedMutexAcquireReleaseInfoNV;
+
+
+#endif /* VK_USE_PLATFORM_WIN32_KHR */
+
+#define VK_KHX_device_group 1
+#define VK_MAX_DEVICE_GROUP_SIZE_KHX 32
+#define VK_KHX_DEVICE_GROUP_SPEC_VERSION 1
+#define VK_KHX_DEVICE_GROUP_EXTENSION_NAME "VK_KHX_device_group"
+
+
+typedef enum VkPeerMemoryFeatureFlagBitsKHX {
+ VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHX = 0x00000001,
+ VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHX = 0x00000002,
+ VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHX = 0x00000004,
+ VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHX = 0x00000008,
+ VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkPeerMemoryFeatureFlagBitsKHX;
+typedef VkFlags VkPeerMemoryFeatureFlagsKHX;
+
+typedef enum VkMemoryAllocateFlagBitsKHX {
+ VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX = 0x00000001,
+ VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkMemoryAllocateFlagBitsKHX;
+typedef VkFlags VkMemoryAllocateFlagsKHX;
+
+typedef enum VkDeviceGroupPresentModeFlagBitsKHX {
+ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX = 0x00000001,
+ VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX = 0x00000002,
+ VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX = 0x00000004,
+ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX = 0x00000008,
+ VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkDeviceGroupPresentModeFlagBitsKHX;
+typedef VkFlags VkDeviceGroupPresentModeFlagsKHX;
+
+typedef struct VkMemoryAllocateFlagsInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkMemoryAllocateFlagsKHX flags;
+ uint32_t deviceMask;
+} VkMemoryAllocateFlagsInfoKHX;
+
+typedef struct VkBindBufferMemoryInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkBuffer buffer;
+ VkDeviceMemory memory;
+ VkDeviceSize memoryOffset;
+ uint32_t deviceIndexCount;
+ const uint32_t* pDeviceIndices;
+} VkBindBufferMemoryInfoKHX;
+
+typedef struct VkBindImageMemoryInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage image;
+ VkDeviceMemory memory;
+ VkDeviceSize memoryOffset;
+ uint32_t deviceIndexCount;
+ const uint32_t* pDeviceIndices;
+ uint32_t SFRRectCount;
+ const VkRect2D* pSFRRects;
+} VkBindImageMemoryInfoKHX;
+
+typedef struct VkDeviceGroupRenderPassBeginInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceMask;
+ uint32_t deviceRenderAreaCount;
+ const VkRect2D* pDeviceRenderAreas;
+} VkDeviceGroupRenderPassBeginInfoKHX;
+
+typedef struct VkDeviceGroupCommandBufferBeginInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceMask;
+} VkDeviceGroupCommandBufferBeginInfoKHX;
+
+typedef struct VkDeviceGroupSubmitInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreCount;
+ const uint32_t* pWaitSemaphoreDeviceIndices;
+ uint32_t commandBufferCount;
+ const uint32_t* pCommandBufferDeviceMasks;
+ uint32_t signalSemaphoreCount;
+ const uint32_t* pSignalSemaphoreDeviceIndices;
+} VkDeviceGroupSubmitInfoKHX;
+
+typedef struct VkDeviceGroupBindSparseInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t resourceDeviceIndex;
+ uint32_t memoryDeviceIndex;
+} VkDeviceGroupBindSparseInfoKHX;
+
+typedef struct VkDeviceGroupPresentCapabilitiesKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE_KHX];
+ VkDeviceGroupPresentModeFlagsKHX modes;
+} VkDeviceGroupPresentCapabilitiesKHX;
+
+typedef struct VkImageSwapchainCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+} VkImageSwapchainCreateInfoKHX;
+
+typedef struct VkBindImageMemorySwapchainInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+ uint32_t imageIndex;
+} VkBindImageMemorySwapchainInfoKHX;
+
+typedef struct VkAcquireNextImageInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+ uint64_t timeout;
+ VkSemaphore semaphore;
+ VkFence fence;
+ uint32_t deviceMask;
+} VkAcquireNextImageInfoKHX;
+
+typedef struct VkDeviceGroupPresentInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t swapchainCount;
+ const uint32_t* pDeviceMasks;
+ VkDeviceGroupPresentModeFlagBitsKHX mode;
+} VkDeviceGroupPresentInfoKHX;
+
+typedef struct VkDeviceGroupSwapchainCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceGroupPresentModeFlagsKHX modes;
+} VkDeviceGroupSwapchainCreateInfoKHX;
+
+
+typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHX)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures);
+typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHX)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfoKHX* pBindInfos);
+typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHX)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfoKHX* pBindInfos);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHX)(VkCommandBuffer commandBuffer, uint32_t deviceMask);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHX)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHX)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHX)(VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, uint32_t* pImageIndex);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHX)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHX)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHX(
+ VkDevice device,
+ uint32_t heapIndex,
+ uint32_t localDeviceIndex,
+ uint32_t remoteDeviceIndex,
+ VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHX(
+ VkDevice device,
+ uint32_t bindInfoCount,
+ const VkBindBufferMemoryInfoKHX* pBindInfos);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHX(
+ VkDevice device,
+ uint32_t bindInfoCount,
+ const VkBindImageMemoryInfoKHX* pBindInfos);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHX(
+ VkCommandBuffer commandBuffer,
+ uint32_t deviceMask);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHX(
+ VkDevice device,
+ VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHX(
+ VkDevice device,
+ VkSurfaceKHR surface,
+ VkDeviceGroupPresentModeFlagsKHX* pModes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHX(
+ VkDevice device,
+ const VkAcquireNextImageInfoKHX* pAcquireInfo,
+ uint32_t* pImageIndex);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHX(
+ VkCommandBuffer commandBuffer,
+ uint32_t baseGroupX,
+ uint32_t baseGroupY,
+ uint32_t baseGroupZ,
+ uint32_t groupCountX,
+ uint32_t groupCountY,
+ uint32_t groupCountZ);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHX(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ uint32_t* pRectCount,
+ VkRect2D* pRects);
+#endif
+
+#define VK_EXT_validation_flags 1
+#define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 1
+#define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags"
+
+
+typedef enum VkValidationCheckEXT {
+ VK_VALIDATION_CHECK_ALL_EXT = 0,
+ VK_VALIDATION_CHECK_BEGIN_RANGE_EXT = VK_VALIDATION_CHECK_ALL_EXT,
+ VK_VALIDATION_CHECK_END_RANGE_EXT = VK_VALIDATION_CHECK_ALL_EXT,
+ VK_VALIDATION_CHECK_RANGE_SIZE_EXT = (VK_VALIDATION_CHECK_ALL_EXT - VK_VALIDATION_CHECK_ALL_EXT + 1),
+ VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkValidationCheckEXT;
+
+typedef struct VkValidationFlagsEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t disabledValidationCheckCount;
+ VkValidationCheckEXT* pDisabledValidationChecks;
+} VkValidationFlagsEXT;
+
+
+
+#ifdef VK_USE_PLATFORM_VI_NN
+#define VK_NN_vi_surface 1
+#define VK_NN_VI_SURFACE_SPEC_VERSION 1
+#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface"
+
+typedef VkFlags VkViSurfaceCreateFlagsNN;
+
+typedef struct VkViSurfaceCreateInfoNN {
+ VkStructureType sType;
+ const void* pNext;
+ VkViSurfaceCreateFlagsNN flags;
+ void* window;
+} VkViSurfaceCreateInfoNN;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(
+ VkInstance instance,
+ const VkViSurfaceCreateInfoNN* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+#endif /* VK_USE_PLATFORM_VI_NN */
+
+#define VK_EXT_shader_subgroup_ballot 1
+#define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1
+#define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot"
+
+
+#define VK_EXT_shader_subgroup_vote 1
+#define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1
+#define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote"
+
+
+#define VK_KHX_device_group_creation 1
+#define VK_KHX_DEVICE_GROUP_CREATION_SPEC_VERSION 1
+#define VK_KHX_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHX_device_group_creation"
+
+typedef struct VkPhysicalDeviceGroupPropertiesKHX {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t physicalDeviceCount;
+ VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE_KHX];
+ VkBool32 subsetAllocation;
+} VkPhysicalDeviceGroupPropertiesKHX;
+
+typedef struct VkDeviceGroupDeviceCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t physicalDeviceCount;
+ const VkPhysicalDevice* pPhysicalDevices;
+} VkDeviceGroupDeviceCreateInfoKHX;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHX)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHX(
+ VkInstance instance,
+ uint32_t* pPhysicalDeviceGroupCount,
+ VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties);
+#endif
+
+#define VK_KHX_external_memory_capabilities 1
+#define VK_LUID_SIZE_KHX 8
+#define VK_KHX_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
+#define VK_KHX_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHX_external_memory_capabilities"
+
+
+typedef enum VkExternalMemoryHandleTypeFlagBitsKHX {
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHX = 0x00000001,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHX = 0x00000002,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHX = 0x00000004,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHX = 0x00000008,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHX = 0x00000010,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHX = 0x00000020,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHX = 0x00000040,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkExternalMemoryHandleTypeFlagBitsKHX;
+typedef VkFlags VkExternalMemoryHandleTypeFlagsKHX;
+
+typedef enum VkExternalMemoryFeatureFlagBitsKHX {
+ VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHX = 0x00000001,
+ VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHX = 0x00000002,
+ VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHX = 0x00000004,
+ VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkExternalMemoryFeatureFlagBitsKHX;
+typedef VkFlags VkExternalMemoryFeatureFlagsKHX;
+
+typedef struct VkExternalMemoryPropertiesKHX {
+ VkExternalMemoryFeatureFlagsKHX externalMemoryFeatures;
+ VkExternalMemoryHandleTypeFlagsKHX exportFromImportedHandleTypes;
+ VkExternalMemoryHandleTypeFlagsKHX compatibleHandleTypes;
+} VkExternalMemoryPropertiesKHX;
+
+typedef struct VkPhysicalDeviceExternalImageFormatInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagBitsKHX handleType;
+} VkPhysicalDeviceExternalImageFormatInfoKHX;
+
+typedef struct VkExternalImageFormatPropertiesKHX {
+ VkStructureType sType;
+ void* pNext;
+ VkExternalMemoryPropertiesKHX externalMemoryProperties;
+} VkExternalImageFormatPropertiesKHX;
+
+typedef struct VkPhysicalDeviceExternalBufferInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCreateFlags flags;
+ VkBufferUsageFlags usage;
+ VkExternalMemoryHandleTypeFlagBitsKHX handleType;
+} VkPhysicalDeviceExternalBufferInfoKHX;
+
+typedef struct VkExternalBufferPropertiesKHX {
+ VkStructureType sType;
+ void* pNext;
+ VkExternalMemoryPropertiesKHX externalMemoryProperties;
+} VkExternalBufferPropertiesKHX;
+
+typedef struct VkPhysicalDeviceIDPropertiesKHX {
+ VkStructureType sType;
+ void* pNext;
+ uint8_t deviceUUID[VK_UUID_SIZE];
+ uint8_t driverUUID[VK_UUID_SIZE];
+ uint8_t deviceLUID[VK_LUID_SIZE_KHX];
+ VkBool32 deviceLUIDValid;
+} VkPhysicalDeviceIDPropertiesKHX;
+
+
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHX)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfoKHX* pExternalBufferInfo, VkExternalBufferPropertiesKHX* pExternalBufferProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHX(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceExternalBufferInfoKHX* pExternalBufferInfo,
+ VkExternalBufferPropertiesKHX* pExternalBufferProperties);
+#endif
+
+#define VK_KHX_external_memory 1
+#define VK_KHX_EXTERNAL_MEMORY_SPEC_VERSION 1
+#define VK_KHX_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHX_external_memory"
+#define VK_QUEUE_FAMILY_EXTERNAL_KHX (~0U-1)
+
+typedef struct VkExternalMemoryImageCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagsKHX handleTypes;
+} VkExternalMemoryImageCreateInfoKHX;
+
+typedef struct VkExternalMemoryBufferCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagsKHX handleTypes;
+} VkExternalMemoryBufferCreateInfoKHX;
+
+typedef struct VkExportMemoryAllocateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagsKHX handleTypes;
+} VkExportMemoryAllocateInfoKHX;
+
+
+
+#ifdef VK_USE_PLATFORM_WIN32_KHX
+#define VK_KHX_external_memory_win32 1
+#define VK_KHX_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
+#define VK_KHX_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHX_external_memory_win32"
+
+typedef struct VkImportMemoryWin32HandleInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagBitsKHX handleType;
+ HANDLE handle;
+} VkImportMemoryWin32HandleInfoKHX;
+
+typedef struct VkExportMemoryWin32HandleInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ const SECURITY_ATTRIBUTES* pAttributes;
+ DWORD dwAccess;
+ LPCWSTR name;
+} VkExportMemoryWin32HandleInfoKHX;
+
+typedef struct VkMemoryWin32HandlePropertiesKHX {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t memoryTypeBits;
+} VkMemoryWin32HandlePropertiesKHX;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHX)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagBitsKHX handleType, HANDLE* pHandle);
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHX)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHX handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHX* pMemoryWin32HandleProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHX(
+ VkDevice device,
+ VkDeviceMemory memory,
+ VkExternalMemoryHandleTypeFlagBitsKHX handleType,
+ HANDLE* pHandle);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHX(
+ VkDevice device,
+ VkExternalMemoryHandleTypeFlagBitsKHX handleType,
+ HANDLE handle,
+ VkMemoryWin32HandlePropertiesKHX* pMemoryWin32HandleProperties);
+#endif
+#endif /* VK_USE_PLATFORM_WIN32_KHX */
+
+#define VK_KHX_external_memory_fd 1
+#define VK_KHX_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
+#define VK_KHX_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHX_external_memory_fd"
+
+typedef struct VkImportMemoryFdInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagBitsKHX handleType;
+ int fd;
+} VkImportMemoryFdInfoKHX;
+
+typedef struct VkMemoryFdPropertiesKHX {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t memoryTypeBits;
+} VkMemoryFdPropertiesKHX;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHX)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagBitsKHX handleType, int* pFd);
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHX)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHX handleType, int fd, VkMemoryFdPropertiesKHX* pMemoryFdProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHX(
+ VkDevice device,
+ VkDeviceMemory memory,
+ VkExternalMemoryHandleTypeFlagBitsKHX handleType,
+ int* pFd);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHX(
+ VkDevice device,
+ VkExternalMemoryHandleTypeFlagBitsKHX handleType,
+ int fd,
+ VkMemoryFdPropertiesKHX* pMemoryFdProperties);
+#endif
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+#define VK_KHX_win32_keyed_mutex 1
+#define VK_KHX_WIN32_KEYED_MUTEX_SPEC_VERSION 1
+#define VK_KHX_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHX_win32_keyed_mutex"
+
+typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t acquireCount;
+ const VkDeviceMemory* pAcquireSyncs;
+ const uint64_t* pAcquireKeys;
+ const uint32_t* pAcquireTimeouts;
+ uint32_t releaseCount;
+ const VkDeviceMemory* pReleaseSyncs;
+ const uint64_t* pReleaseKeys;
+} VkWin32KeyedMutexAcquireReleaseInfoKHX;
+
+
+#endif /* VK_USE_PLATFORM_WIN32_KHR */
+
+#define VK_KHX_external_semaphore_capabilities 1
+#define VK_KHX_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1
+#define VK_KHX_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHX_external_semaphore_capabilities"
+
+
+typedef enum VkExternalSemaphoreHandleTypeFlagBitsKHX {
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHX = 0x00000001,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHX = 0x00000002,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHX = 0x00000004,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHX = 0x00000008,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHX = 0x00000010,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkExternalSemaphoreHandleTypeFlagBitsKHX;
+typedef VkFlags VkExternalSemaphoreHandleTypeFlagsKHX;
+
+typedef enum VkExternalSemaphoreFeatureFlagBitsKHX {
+ VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHX = 0x00000001,
+ VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHX = 0x00000002,
+ VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkExternalSemaphoreFeatureFlagBitsKHX;
+typedef VkFlags VkExternalSemaphoreFeatureFlagsKHX;
+
+typedef struct VkPhysicalDeviceExternalSemaphoreInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalSemaphoreHandleTypeFlagBitsKHX handleType;
+} VkPhysicalDeviceExternalSemaphoreInfoKHX;
+
+typedef struct VkExternalSemaphorePropertiesKHX {
+ VkStructureType sType;
+ void* pNext;
+ VkExternalSemaphoreHandleTypeFlagsKHX exportFromImportedHandleTypes;
+ VkExternalSemaphoreHandleTypeFlagsKHX compatibleHandleTypes;
+ VkExternalSemaphoreFeatureFlagsKHX externalSemaphoreFeatures;
+} VkExternalSemaphorePropertiesKHX;
+
+
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHX)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfoKHX* pExternalSemaphoreInfo, VkExternalSemaphorePropertiesKHX* pExternalSemaphoreProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHX(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceExternalSemaphoreInfoKHX* pExternalSemaphoreInfo,
+ VkExternalSemaphorePropertiesKHX* pExternalSemaphoreProperties);
+#endif
+
+#define VK_KHX_external_semaphore 1
+#define VK_KHX_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
+#define VK_KHX_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHX_external_semaphore"
+
+typedef struct VkExportSemaphoreCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalSemaphoreHandleTypeFlagsKHX handleTypes;
+} VkExportSemaphoreCreateInfoKHX;
+
+
+
+#ifdef VK_USE_PLATFORM_WIN32_KHX
+#define VK_KHX_external_semaphore_win32 1
+#define VK_KHX_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1
+#define VK_KHX_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHX_external_semaphore_win32"
+
+typedef struct VkImportSemaphoreWin32HandleInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphore semaphore;
+ VkExternalSemaphoreHandleTypeFlagsKHX handleType;
+ HANDLE handle;
+} VkImportSemaphoreWin32HandleInfoKHX;
+
+typedef struct VkExportSemaphoreWin32HandleInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ const SECURITY_ATTRIBUTES* pAttributes;
+ DWORD dwAccess;
+ LPCWSTR name;
+} VkExportSemaphoreWin32HandleInfoKHX;
+
+typedef struct VkD3D12FenceSubmitInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreValuesCount;
+ const uint64_t* pWaitSemaphoreValues;
+ uint32_t signalSemaphoreValuesCount;
+ const uint64_t* pSignalSemaphoreValues;
+} VkD3D12FenceSubmitInfoKHX;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHX)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHX* pImportSemaphoreWin32HandleInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHX)(VkDevice device, VkSemaphore semaphore, VkExternalSemaphoreHandleTypeFlagBitsKHX handleType, HANDLE* pHandle);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHX(
+ VkDevice device,
+ const VkImportSemaphoreWin32HandleInfoKHX* pImportSemaphoreWin32HandleInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHX(
+ VkDevice device,
+ VkSemaphore semaphore,
+ VkExternalSemaphoreHandleTypeFlagBitsKHX handleType,
+ HANDLE* pHandle);
+#endif
+#endif /* VK_USE_PLATFORM_WIN32_KHX */
+
+#define VK_KHX_external_semaphore_fd 1
+#define VK_KHX_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1
+#define VK_KHX_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHX_external_semaphore_fd"
+
+typedef struct VkImportSemaphoreFdInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphore semaphore;
+ VkExternalSemaphoreHandleTypeFlagBitsKHX handleType;
+ int fd;
+} VkImportSemaphoreFdInfoKHX;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHX)(VkDevice device, const VkImportSemaphoreFdInfoKHX* pImportSemaphoreFdInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHX)(VkDevice device, VkSemaphore semaphore, VkExternalSemaphoreHandleTypeFlagBitsKHX handleType, int* pFd);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHX(
+ VkDevice device,
+ const VkImportSemaphoreFdInfoKHX* pImportSemaphoreFdInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHX(
+ VkDevice device,
+ VkSemaphore semaphore,
+ VkExternalSemaphoreHandleTypeFlagBitsKHX handleType,
+ int* pFd);
+#endif
+
+#define VK_NVX_device_generated_commands 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkObjectTableNVX)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNVX)
+
+#define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 1
+#define VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NVX_device_generated_commands"
+
+
+typedef enum VkIndirectCommandsTokenTypeNVX {
+ VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX = 0,
+ VK_INDIRECT_COMMANDS_TOKEN_DESCRIPTOR_SET_NVX = 1,
+ VK_INDIRECT_COMMANDS_TOKEN_INDEX_BUFFER_NVX = 2,
+ VK_INDIRECT_COMMANDS_TOKEN_VERTEX_BUFFER_NVX = 3,
+ VK_INDIRECT_COMMANDS_TOKEN_PUSH_CONSTANT_NVX = 4,
+ VK_INDIRECT_COMMANDS_TOKEN_DRAW_INDEXED_NVX = 5,
+ VK_INDIRECT_COMMANDS_TOKEN_DRAW_NVX = 6,
+ VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX = 7,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_BEGIN_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_END_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_RANGE_SIZE_NVX = (VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX - VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX + 1),
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
+} VkIndirectCommandsTokenTypeNVX;
+
+typedef enum VkObjectEntryTypeNVX {
+ VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX = 0,
+ VK_OBJECT_ENTRY_PIPELINE_NVX = 1,
+ VK_OBJECT_ENTRY_INDEX_BUFFER_NVX = 2,
+ VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX = 3,
+ VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX = 4,
+ VK_OBJECT_ENTRY_TYPE_BEGIN_RANGE_NVX = VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX,
+ VK_OBJECT_ENTRY_TYPE_END_RANGE_NVX = VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX,
+ VK_OBJECT_ENTRY_TYPE_RANGE_SIZE_NVX = (VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX - VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX + 1),
+ VK_OBJECT_ENTRY_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
+} VkObjectEntryTypeNVX;
+
+
+typedef enum VkIndirectCommandsLayoutUsageFlagBitsNVX {
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX = 0x00000001,
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX = 0x00000002,
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX = 0x00000004,
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX = 0x00000008,
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
+} VkIndirectCommandsLayoutUsageFlagBitsNVX;
+typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNVX;
+
+typedef enum VkObjectEntryUsageFlagBitsNVX {
+ VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX = 0x00000001,
+ VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX = 0x00000002,
+ VK_OBJECT_ENTRY_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
+} VkObjectEntryUsageFlagBitsNVX;
+typedef VkFlags VkObjectEntryUsageFlagsNVX;
+
+typedef struct VkDeviceGeneratedCommandsFeaturesNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 computeBindingPointSupport;
+} VkDeviceGeneratedCommandsFeaturesNVX;
+
+typedef struct VkDeviceGeneratedCommandsLimitsNVX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t maxIndirectCommandsLayoutTokenCount;
+ uint32_t maxObjectEntryCounts;
+ uint32_t minSequenceCountBufferOffsetAlignment;
+ uint32_t minSequenceIndexBufferOffsetAlignment;
+ uint32_t minCommandsTokenBufferOffsetAlignment;
+} VkDeviceGeneratedCommandsLimitsNVX;
+
+typedef struct VkIndirectCommandsTokenNVX {
+ VkIndirectCommandsTokenTypeNVX tokenType;
+ VkBuffer buffer;
+ VkDeviceSize offset;
+} VkIndirectCommandsTokenNVX;
+
+typedef struct VkIndirectCommandsLayoutTokenNVX {
+ VkIndirectCommandsTokenTypeNVX tokenType;
+ uint32_t bindingUnit;
+ uint32_t dynamicCount;
+ uint32_t divisor;
+} VkIndirectCommandsLayoutTokenNVX;
+
+typedef struct VkIndirectCommandsLayoutCreateInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineBindPoint pipelineBindPoint;
+ VkIndirectCommandsLayoutUsageFlagsNVX flags;
+ uint32_t tokenCount;
+ const VkIndirectCommandsLayoutTokenNVX* pTokens;
+} VkIndirectCommandsLayoutCreateInfoNVX;
+
+typedef struct VkCmdProcessCommandsInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkObjectTableNVX objectTable;
+ VkIndirectCommandsLayoutNVX indirectCommandsLayout;
+ uint32_t indirectCommandsTokenCount;
+ const VkIndirectCommandsTokenNVX* pIndirectCommandsTokens;
+ uint32_t maxSequencesCount;
+ VkCommandBuffer targetCommandBuffer;
+ VkBuffer sequencesCountBuffer;
+ VkDeviceSize sequencesCountOffset;
+ VkBuffer sequencesIndexBuffer;
+ VkDeviceSize sequencesIndexOffset;
+} VkCmdProcessCommandsInfoNVX;
+
+typedef struct VkCmdReserveSpaceForCommandsInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkObjectTableNVX objectTable;
+ VkIndirectCommandsLayoutNVX indirectCommandsLayout;
+ uint32_t maxSequencesCount;
+} VkCmdReserveSpaceForCommandsInfoNVX;
+
+typedef struct VkObjectTableCreateInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t objectCount;
+ const VkObjectEntryTypeNVX* pObjectEntryTypes;
+ const uint32_t* pObjectEntryCounts;
+ const VkObjectEntryUsageFlagsNVX* pObjectEntryUsageFlags;
+ uint32_t maxUniformBuffersPerDescriptor;
+ uint32_t maxStorageBuffersPerDescriptor;
+ uint32_t maxStorageImagesPerDescriptor;
+ uint32_t maxSampledImagesPerDescriptor;
+ uint32_t maxPipelineLayouts;
+} VkObjectTableCreateInfoNVX;
+
+typedef struct VkObjectTableEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+} VkObjectTableEntryNVX;
+
+typedef struct VkObjectTablePipelineEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkPipeline pipeline;
+} VkObjectTablePipelineEntryNVX;
+
+typedef struct VkObjectTableDescriptorSetEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkPipelineLayout pipelineLayout;
+ VkDescriptorSet descriptorSet;
+} VkObjectTableDescriptorSetEntryNVX;
+
+typedef struct VkObjectTableVertexBufferEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkBuffer buffer;
+} VkObjectTableVertexBufferEntryNVX;
+
+typedef struct VkObjectTableIndexBufferEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkBuffer buffer;
+ VkIndexType indexType;
+} VkObjectTableIndexBufferEntryNVX;
+
+typedef struct VkObjectTablePushConstantEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkPipelineLayout pipelineLayout;
+ VkShaderStageFlags stageFlags;
+} VkObjectTablePushConstantEntryNVX;
+
+
+typedef void (VKAPI_PTR *PFN_vkCmdProcessCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdReserveSpaceForCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNVX)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNVX)(VkDevice device, VkIndirectCommandsLayoutNVX indirectCommandsLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateObjectTableNVX)(VkDevice device, const VkObjectTableCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkObjectTableNVX* pObjectTable);
+typedef void (VKAPI_PTR *PFN_vkDestroyObjectTableNVX)(VkDevice device, VkObjectTableNVX objectTable, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectTableEntryNVX* const* ppObjectTableEntries, const uint32_t* pObjectIndices);
+typedef VkResult (VKAPI_PTR *PFN_vkUnregisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectEntryTypeNVX* pObjectEntryTypes, const uint32_t* pObjectIndices);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX)(VkPhysicalDevice physicalDevice, VkDeviceGeneratedCommandsFeaturesNVX* pFeatures, VkDeviceGeneratedCommandsLimitsNVX* pLimits);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdProcessCommandsNVX(
+ VkCommandBuffer commandBuffer,
+ const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdReserveSpaceForCommandsNVX(
+ VkCommandBuffer commandBuffer,
+ const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNVX(
+ VkDevice device,
+ const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNVX(
+ VkDevice device,
+ VkIndirectCommandsLayoutNVX indirectCommandsLayout,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateObjectTableNVX(
+ VkDevice device,
+ const VkObjectTableCreateInfoNVX* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkObjectTableNVX* pObjectTable);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyObjectTableNVX(
+ VkDevice device,
+ VkObjectTableNVX objectTable,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterObjectsNVX(
+ VkDevice device,
+ VkObjectTableNVX objectTable,
+ uint32_t objectCount,
+ const VkObjectTableEntryNVX* const* ppObjectTableEntries,
+ const uint32_t* pObjectIndices);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkUnregisterObjectsNVX(
+ VkDevice device,
+ VkObjectTableNVX objectTable,
+ uint32_t objectCount,
+ const VkObjectEntryTypeNVX* pObjectEntryTypes,
+ const uint32_t* pObjectIndices);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
+ VkPhysicalDevice physicalDevice,
+ VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
+ VkDeviceGeneratedCommandsLimitsNVX* pLimits);
+#endif
+
+#define VK_NV_clip_space_w_scaling 1
+#define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1
+#define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling"
+
+typedef struct VkViewportWScalingNV {
+ float xcoeff;
+ float ycoeff;
+} VkViewportWScalingNV;
+
+typedef struct VkPipelineViewportWScalingStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 viewportWScalingEnable;
+ uint32_t viewportCount;
+ const VkViewportWScalingNV* pViewportWScalings;
+} VkPipelineViewportWScalingStateCreateInfoNV;
+
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstViewport,
+ uint32_t viewportCount,
+ const VkViewportWScalingNV* pViewportWScalings);
+#endif
+
+#define VK_EXT_direct_mode_display 1
+#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1
+#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display"
+
+typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display);
+#endif
+
+#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
+#define VK_EXT_acquire_xlib_display 1
+#include <X11/extensions/Xrandr.h>
+
+#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1
+#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display"
+
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display);
+typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT(
+ VkPhysicalDevice physicalDevice,
+ Display* dpy,
+ VkDisplayKHR display);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT(
+ VkPhysicalDevice physicalDevice,
+ Display* dpy,
+ RROutput rrOutput,
+ VkDisplayKHR* pDisplay);
+#endif
+#endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */
+
+#define VK_EXT_display_surface_counter 1
+#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter"
+
+
+typedef enum VkSurfaceCounterFlagBitsEXT {
+ VK_SURFACE_COUNTER_VBLANK_EXT = 0x00000001,
+ VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkSurfaceCounterFlagBitsEXT;
+typedef VkFlags VkSurfaceCounterFlagsEXT;
+
+typedef struct VkSurfaceCapabilities2EXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t minImageCount;
+ uint32_t maxImageCount;
+ VkExtent2D currentExtent;
+ VkExtent2D minImageExtent;
+ VkExtent2D maxImageExtent;
+ uint32_t maxImageArrayLayers;
+ VkSurfaceTransformFlagsKHR supportedTransforms;
+ VkSurfaceTransformFlagBitsKHR currentTransform;
+ VkCompositeAlphaFlagsKHR supportedCompositeAlpha;
+ VkImageUsageFlags supportedUsageFlags;
+ VkSurfaceCounterFlagsEXT supportedSurfaceCounters;
+} VkSurfaceCapabilities2EXT;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
+#endif
+
+#define VK_EXT_display_control 1
+#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control"
+
+
+typedef enum VkDisplayPowerStateEXT {
+ VK_DISPLAY_POWER_STATE_OFF_EXT = 0,
+ VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1,
+ VK_DISPLAY_POWER_STATE_ON_EXT = 2,
+ VK_DISPLAY_POWER_STATE_BEGIN_RANGE_EXT = VK_DISPLAY_POWER_STATE_OFF_EXT,
+ VK_DISPLAY_POWER_STATE_END_RANGE_EXT = VK_DISPLAY_POWER_STATE_ON_EXT,
+ VK_DISPLAY_POWER_STATE_RANGE_SIZE_EXT = (VK_DISPLAY_POWER_STATE_ON_EXT - VK_DISPLAY_POWER_STATE_OFF_EXT + 1),
+ VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDisplayPowerStateEXT;
+
+typedef enum VkDeviceEventTypeEXT {
+ VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0,
+ VK_DEVICE_EVENT_TYPE_BEGIN_RANGE_EXT = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT,
+ VK_DEVICE_EVENT_TYPE_END_RANGE_EXT = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT,
+ VK_DEVICE_EVENT_TYPE_RANGE_SIZE_EXT = (VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT - VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT + 1),
+ VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDeviceEventTypeEXT;
+
+typedef enum VkDisplayEventTypeEXT {
+ VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0,
+ VK_DISPLAY_EVENT_TYPE_BEGIN_RANGE_EXT = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT,
+ VK_DISPLAY_EVENT_TYPE_END_RANGE_EXT = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT,
+ VK_DISPLAY_EVENT_TYPE_RANGE_SIZE_EXT = (VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT - VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT + 1),
+ VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDisplayEventTypeEXT;
+
+typedef struct VkDisplayPowerInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDisplayPowerStateEXT powerState;
+} VkDisplayPowerInfoEXT;
+
+typedef struct VkDeviceEventInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceEventTypeEXT deviceEvent;
+} VkDeviceEventInfoEXT;
+
+typedef struct VkDisplayEventInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDisplayEventTypeEXT displayEvent;
+} VkDisplayEventInfoEXT;
+
+typedef struct VkSwapchainCounterCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkSurfaceCounterFlagsEXT surfaceCounters;
+} VkSwapchainCounterCreateInfoEXT;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT(
+ VkDevice device,
+ VkDisplayKHR display,
+ const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT(
+ VkDevice device,
+ const VkDeviceEventInfoEXT* pDeviceEventInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkFence* pFence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT(
+ VkDevice device,
+ VkDisplayKHR display,
+ const VkDisplayEventInfoEXT* pDisplayEventInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkFence* pFence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ VkSurfaceCounterFlagBitsEXT counter,
+ uint64_t* pCounterValue);
+#endif
+
+#define VK_GOOGLE_display_timing 1
+#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1
+#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing"
+
+typedef struct VkRefreshCycleDurationGOOGLE {
+ uint64_t refreshDuration;
+} VkRefreshCycleDurationGOOGLE;
+
+typedef struct VkPastPresentationTimingGOOGLE {
+ uint32_t presentID;
+ uint64_t desiredPresentTime;
+ uint64_t actualPresentTime;
+ uint64_t earliestPresentTime;
+ uint64_t presentMargin;
+} VkPastPresentationTimingGOOGLE;
+
+typedef struct VkPresentTimeGOOGLE {
+ uint32_t presentID;
+ uint64_t desiredPresentTime;
+} VkPresentTimeGOOGLE;
+
+typedef struct VkPresentTimesInfoGOOGLE {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t swapchainCount;
+ const VkPresentTimeGOOGLE* pTimes;
+} VkPresentTimesInfoGOOGLE;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ uint32_t* pPresentationTimingCount,
+ VkPastPresentationTimingGOOGLE* pPresentationTimings);
+#endif
+
+#define VK_NV_sample_mask_override_coverage 1
+#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1
+#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage"
+
+
+#define VK_NV_geometry_shader_passthrough 1
+#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1
+#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough"
+
+
+#define VK_NV_viewport_array2 1
+#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION 1
+#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME "VK_NV_viewport_array2"
+
+
+#define VK_NVX_multiview_per_view_attributes 1
+#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1
+#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes"
+
+typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 perViewPositionAllComponents;
+} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX;
+
+
+
+#define VK_NV_viewport_swizzle 1
+#define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1
+#define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle"
+
+
+typedef enum VkViewportCoordinateSwizzleNV {
+ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_BEGIN_RANGE_NV = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_END_RANGE_NV = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_RANGE_SIZE_NV = (VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV - VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV + 1),
+ VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkViewportCoordinateSwizzleNV;
+
+typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV;
+
+typedef struct VkViewportSwizzleNV {
+ VkViewportCoordinateSwizzleNV x;
+ VkViewportCoordinateSwizzleNV y;
+ VkViewportCoordinateSwizzleNV z;
+ VkViewportCoordinateSwizzleNV w;
+} VkViewportSwizzleNV;
+
+typedef struct VkPipelineViewportSwizzleStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineViewportSwizzleStateCreateFlagsNV flags;
+ uint32_t viewportCount;
+ const VkViewportSwizzleNV* pViewportSwizzles;
+} VkPipelineViewportSwizzleStateCreateInfoNV;
+
+
+
+#define VK_EXT_discard_rectangles 1
+#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1
+#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles"
+
+
+typedef enum VkDiscardRectangleModeEXT {
+ VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0,
+ VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1,
+ VK_DISCARD_RECTANGLE_MODE_BEGIN_RANGE_EXT = VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT,
+ VK_DISCARD_RECTANGLE_MODE_END_RANGE_EXT = VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT,
+ VK_DISCARD_RECTANGLE_MODE_RANGE_SIZE_EXT = (VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT - VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT + 1),
+ VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDiscardRectangleModeEXT;
+
+typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT;
+
+typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxDiscardRectangles;
+} VkPhysicalDeviceDiscardRectanglePropertiesEXT;
+
+typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineDiscardRectangleStateCreateFlagsEXT flags;
+ VkDiscardRectangleModeEXT discardRectangleMode;
+ uint32_t discardRectangleCount;
+ const VkRect2D* pDiscardRectangles;
+} VkPipelineDiscardRectangleStateCreateInfoEXT;
+
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstDiscardRectangle,
+ uint32_t discardRectangleCount,
+ const VkRect2D* pDiscardRectangles);
+#endif
+
+#define VK_EXT_swapchain_colorspace 1
+#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 2
+#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
+
+
+#define VK_EXT_hdr_metadata 1
+#define VK_EXT_HDR_METADATA_SPEC_VERSION 1
+#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"
+
+typedef struct VkXYColorEXT {
+ float x;
+ float y;
+} VkXYColorEXT;
+
+typedef struct VkHdrMetadataEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkXYColorEXT displayPrimaryRed;
+ VkXYColorEXT displayPrimaryGreen;
+ VkXYColorEXT displayPrimaryBlue;
+ VkXYColorEXT whitePoint;
+ float maxLuminance;
+ float minLuminance;
+ float maxContentLightLevel;
+ float maxFrameAverageLightLevel;
+} VkHdrMetadataEXT;
+
+
+typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT(
+ VkDevice device,
+ uint32_t swapchainCount,
+ const VkSwapchainKHR* pSwapchains,
+ const VkHdrMetadataEXT* pMetadata);
+#endif
+
+#ifdef VK_USE_PLATFORM_IOS_MVK
+#define VK_MVK_ios_surface 1
+#define VK_MVK_IOS_SURFACE_SPEC_VERSION 2
+#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface"
+
+typedef VkFlags VkIOSSurfaceCreateFlagsMVK;
+
+typedef struct VkIOSSurfaceCreateInfoMVK {
+ VkStructureType sType;
+ const void* pNext;
+ VkIOSSurfaceCreateFlagsMVK flags;
+ const void* pView;
+} VkIOSSurfaceCreateInfoMVK;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
+ VkInstance instance,
+ const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+#endif /* VK_USE_PLATFORM_IOS_MVK */
+
+#ifdef VK_USE_PLATFORM_MACOS_MVK
+#define VK_MVK_macos_surface 1
+#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 2
+#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface"
+
+typedef VkFlags VkMacOSSurfaceCreateFlagsMVK;
+
+typedef struct VkMacOSSurfaceCreateInfoMVK {
+ VkStructureType sType;
+ const void* pNext;
+ VkMacOSSurfaceCreateFlagsMVK flags;
+ const void* pView;
+} VkMacOSSurfaceCreateInfoMVK;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
+ VkInstance instance,
+ const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+#endif /* VK_USE_PLATFORM_MACOS_MVK */
+
#ifdef __cplusplus
}
#endif
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvtt.cpp b/3rdparty/bgfx/3rdparty/nvtt/nvtt.cpp
deleted file mode 100644
index 51a2bce3f57..00000000000
--- a/3rdparty/bgfx/3rdparty/nvtt/nvtt.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#include "nvtt.h"
-
-#include <string.h>
-#include <bx/uint32_t.h>
-
-#include "bc6h/zoh.h"
-#include "bc7/avpcl.h"
-#include "nvmath/vector.inl"
-
-NVCORE_API int nvAbort(const char *, const char *, int , const char *, const char *, ...)
-{
- abort();
- return 0;
-}
-
-namespace nvtt
-{
- using namespace nv;
-
- void compressBC6H(const void* _input, uint32_t _width, uint32_t _height, uint32_t _stride, void* _output)
- {
- const uint8_t* src = (const uint8_t*)_input;
- char* dst = (char*)_output;
-
- for (uint32_t yy = 0; yy < _height; yy += 4)
- {
- for (uint32_t xx = 0; xx < _width; xx += 4)
- {
- const Vector4* rgba = (const Vector4*)&src[yy*_stride + xx*sizeof(float)*4];
-
- ZOH::Utils::FORMAT = ZOH::UNSIGNED_F16;
- ZOH::Tile zohTile(4, 4);
-
- memset(zohTile.data, 0, sizeof(zohTile.data) );
- memset(zohTile.importance_map, 0, sizeof(zohTile.importance_map) );
-
- for (uint32_t blockY = 0; blockY < 4; ++blockY)
- {
- for (uint32_t blockX = 0; blockX < 4; ++blockX)
- {
- Vector4 color = rgba[blockY*4 + blockX];
- uint16 rHalf = bx::halfFromFloat(color.x);
- uint16 gHalf = bx::halfFromFloat(color.y);
- uint16 bHalf = bx::halfFromFloat(color.z);
- zohTile.data[blockY][blockX].x = ZOH::Tile::half2float(rHalf);
- zohTile.data[blockY][blockX].y = ZOH::Tile::half2float(gHalf);
- zohTile.data[blockY][blockX].z = ZOH::Tile::half2float(bHalf);
- zohTile.importance_map[blockY][blockX] = 1.0f;
- }
- }
-
- ZOH::compress(zohTile, &dst[( (yy*_width) + xx)/4 * 16]);
- }
- }
- }
-
- void compressBC7(const void* _input, uint32_t _width, uint32_t _height, uint32_t _stride, void* _output)
- {
- const uint8_t* src = (const uint8_t*)_input;
- char* dst = (char*)_output;
-
- for (uint32_t yy = 0; yy < _height; yy += 4)
- {
- for (uint32_t xx = 0; xx < _width; xx += 4)
- {
- const Vector4* rgba = (const Vector4*)&src[yy*_stride + xx*sizeof(float)*4];
-
- AVPCL::mode_rgb = false;
- AVPCL::flag_premult = false;
- AVPCL::flag_nonuniform = false;
- AVPCL::flag_nonuniform_ati = false;
-
- AVPCL::Tile avpclTile(4, 4);
- memset(avpclTile.data, 0, sizeof(avpclTile.data) );
- for (uint32_t blockY = 0; blockY < 4; ++blockY)
- {
- for (uint32_t blockX = 0; blockX < 4; ++blockX)
- {
- Vector4 color = rgba[blockY*4 + blockX];
- avpclTile.data[blockY][blockX] = color * 255.0f;
- avpclTile.importance_map[blockY][blockX] = 1.0f;
- }
- }
-
- AVPCL::compress(avpclTile, &dst[( (yy*_width) + xx)/4 * 16]);
- }
- }
- }
-
-} //namespace nvtt
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imconfig.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imconfig.h
index f2b0289ce27..45d7d2b8919 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imconfig.h
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imconfig.h
@@ -30,8 +30,8 @@
#define IMGUI_INCLUDE_IMGUI_USER_H
//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions)
-#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS
-#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS
+#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
+#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
//---- Don't implement help and test window functionality (ShowUserGuide()/ShowStyleEditor()/ShowTestWindow() methods will be empty)
//#define IMGUI_DISABLE_TEST_WINDOWS
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
index db8ce64e9cb..361377f8903 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
@@ -1,11 +1,11 @@
-// dear imgui, v1.50 WIP
+// dear imgui, v1.53 WIP
// (main code and documentation)
// See ImGui::ShowTestWindow() in imgui_demo.cpp for demo code.
-// Newcomers, read 'Programmer guide' below for notes on how to setup ImGui in your codebase.
+// Newcomers, read 'Programmer guide' below for notes on how to setup Dear ImGui in your codebase.
// Get latest version at https://github.com/ocornut/imgui
// Releases change-log at https://github.com/ocornut/imgui/releases
-// Gallery (please post your screenshots/video there!): https://github.com/ocornut/imgui/issues/772
+// Gallery (please post your screenshots/video there!): https://github.com/ocornut/imgui/issues/1269
// Developed by Omar Cornut and every direct or indirect contributors to the GitHub.
// This library is free but I need your support to sustain development and maintenance.
// If you work for a company, please consider financial support, e.g: https://www.patreon.com/imgui
@@ -16,19 +16,23 @@
- MISSION STATEMENT
- END-USER GUIDE
- PROGRAMMER GUIDE (read me!)
+ - Read first
+ - How to update to a newer version of Dear ImGui
+ - Getting started with integrating Dear ImGui in your code/engine
- API BREAKING CHANGES (read me when you update!)
+ - ISSUES & TODO LIST
- FREQUENTLY ASKED QUESTIONS (FAQ), TIPS
- How can I help?
- - How do I update to a newer version of ImGui?
- What is ImTextureID and how do I display an image?
- - I integrated ImGui in my engine and the text or lines are blurry..
- - I integrated ImGui in my engine and some elements are clipping or disappearing when I move windows around..
- - How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs.
- - How can I tell when ImGui wants my mouse/keyboard inputs and when I can pass them to my application?
+ - I integrated Dear ImGui in my engine and the text or lines are blurry..
+ - I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around..
+ - How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on labels/IDs.
+ - How can I tell when Dear ImGui wants my mouse/keyboard inputs VS when I can pass them to my application?
- How can I load a different font than the default?
- How can I easily use icons in my application?
- How can I load multiple fonts?
- How can I display and input non-latin characters such as Chinese, Japanese, Korean, Cyrillic?
+ - How can I preserve my Dear ImGui context across reloading a DLL? (loss of the global/static variables)
- How can I use the drawing facilities without an ImGui window? (using ImDrawList API)
- ISSUES & TODO-LIST
- CODE
@@ -37,112 +41,169 @@
MISSION STATEMENT
=================
- - easy to use to create code-driven and data-driven tools
- - easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools
- - easy to hack and improve
- - minimize screen real-estate usage
- - minimize setup and maintenance
- - minimize state storage on user side
- - portable, minimize dependencies, run on target (consoles, phones, etc.)
- - efficient runtime (NB- we do allocate when "growing" content - creating a window / opening a tree node for the first time, etc. - but a typical frame won't allocate anything)
- - read about immediate-mode gui principles @ http://mollyrocket.com/861, http://mollyrocket.com/forums/index.html
+ - Easy to use to create code-driven and data-driven tools
+ - Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools
+ - Easy to hack and improve
+ - Minimize screen real-estate usage
+ - Minimize setup and maintenance
+ - Minimize state storage on user side
+ - Portable, minimize dependencies, run on target (consoles, phones, etc.)
+ - Efficient runtime and memory consumption (NB- we do allocate when "growing" content e.g. creating a window, opening a tree node
+ for the first time, etc. but a typical frame won't allocate anything)
Designed for developers and content-creators, not the typical end-user! Some of the weaknesses includes:
- - doesn't look fancy, doesn't animate
- - limited layout features, intricate layouts are typically crafted in code
- - occasionally uses statically sized buffers for string manipulations - won't crash, but some very long pieces of text may be clipped. functions like ImGui::TextUnformatted() don't have such restriction.
+ - Doesn't look fancy, doesn't animate
+ - Limited layout features, intricate layouts are typically crafted in code
END-USER GUIDE
==============
- - double-click title bar to collapse window
- - click upper right corner to close a window, available when 'bool* p_open' is passed to ImGui::Begin()
- - click and drag on lower right corner to resize window
- - click and drag on any empty space to move window
- - double-click/double-tap on lower right corner grip to auto-fit to content
- - TAB/SHIFT+TAB to cycle through keyboard editable fields
- - use mouse wheel to scroll
- - use CTRL+mouse wheel to zoom window contents (if IO.FontAllowScaling is true)
- - CTRL+Click on a slider or drag box to input value as text
- - text editor:
+ - Double-click on title bar to collapse window.
+ - Click upper right corner to close a window, available when 'bool* p_open' is passed to ImGui::Begin().
+ - Click and drag on lower right corner to resize window (double-click to auto fit window to its contents).
+ - Click and drag on any empty space to move window.
+ - TAB/SHIFT+TAB to cycle through keyboard editable fields.
+ - CTRL+Click on a slider or drag box to input value as text.
+ - Use mouse wheel to scroll.
+ - Text editor:
- Hold SHIFT or use mouse to select text.
- - CTRL+Left/Right to word jump
- - CTRL+Shift+Left/Right to select words
- - CTRL+A our Double-Click to select all
- - CTRL+X,CTRL+C,CTRL+V to use OS clipboard
- - CTRL+Z,CTRL+Y to undo/redo
- - ESCAPE to revert text to its original value
+ - CTRL+Left/Right to word jump.
+ - CTRL+Shift+Left/Right to select words.
+ - CTRL+A our Double-Click to select all.
+ - CTRL+X,CTRL+C,CTRL+V to use OS clipboard/
+ - CTRL+Z,CTRL+Y to undo/redo.
+ - ESCAPE to revert text to its original value.
- You can apply arithmetic operators +,*,/ on numerical values. Use +- to subtract (because - would set a negative value!)
+ - Controls are automatically adjusted for OSX to match standard OSX text editing operations.
PROGRAMMER GUIDE
================
- - read the FAQ below this section!
- - your code creates the UI, if your code doesn't run the UI is gone! == very dynamic UI, no construction/destructions steps, less data retention on your side, no state duplication, less sync, less bugs.
- - call and read ImGui::ShowTestWindow() for demo code demonstrating most features.
- - see examples/ folder for standalone sample applications. Prefer reading examples/opengl2_example/ first as it is the simplest.
- you may be able to grab and copy a ready made imgui_impl_*** file from the examples/.
- - customization: PushStyleColor()/PushStyleVar() or the style editor to tweak the look of the interface (e.g. if you want a more compact UI or a different color scheme).
-
- - getting started:
- - init: call ImGui::GetIO() to retrieve the ImGuiIO structure and fill the fields marked 'Settings'.
- - init: call io.Fonts->GetTexDataAsRGBA32(...) and load the font texture pixels into graphics memory.
- - every frame:
- 1/ in your mainloop or right after you got your keyboard/mouse info, call ImGui::GetIO() and fill the fields marked 'Input'
- 2/ call ImGui::NewFrame() as early as you can!
- 3/ use any ImGui function you want between NewFrame() and Render()
- 4/ call ImGui::Render() as late as you can to end the frame and finalize render data. it will call your RenderDrawListFn handler that you set in the IO structure.
- (if you don't need to render, you still need to call Render() and ignore the callback, or call EndFrame() instead. if you call neither some aspects of windows focusing/moving will appear broken.)
- - all rendering information are stored into command-lists until ImGui::Render() is called.
- - ImGui never touches or know about your GPU state. the only function that knows about GPU is the RenderDrawListFn handler that you provide.
- - effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render" phases of your own application.
- - refer to the examples applications in the examples/ folder for instruction on how to setup your code.
- - a typical application skeleton may be:
-
- // Application init
+ READ FIRST
+
+ - Read the FAQ below this section!
+ - Your code creates the UI, if your code doesn't run the UI is gone! == very dynamic UI, no construction/destructions steps, less data retention
+ on your side, no state duplication, less sync, less bugs.
+ - Call and read ImGui::ShowTestWindow() for demo code demonstrating most features.
+ - You can learn about immediate-mode gui principles at http://www.johno.se/book/imgui.html or watch http://mollyrocket.com/861
+
+ HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
+
+ - Overwrite all the sources files except for imconfig.h (if you have made modification to your copy of imconfig.h)
+ - Read the "API BREAKING CHANGES" section (below). This is where we list occasional API breaking changes.
+ If a function/type has been renamed / or marked obsolete, try to fix the name in your code before it is permanently removed from the public API.
+ If you have a problem with a missing function/symbols, search for its name in the code, there will likely be a comment about it.
+ Please report any issue to the GitHub page!
+ - Try to keep your copy of dear imgui reasonably up to date.
+
+ GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
+
+ - Add the Dear ImGui source files to your projects, using your preferred build system.
+ It is recommended you build the .cpp files as part of your project and not as a library.
+ - You can later customize the imconfig.h file to tweak some compilation time behavior, such as integrating imgui types with your own maths types.
+ - See examples/ folder for standalone sample applications.
+ - You may be able to grab and copy a ready made imgui_impl_*** file from the examples/.
+ - When using Dear ImGui, your programming IDE is your friend: follow the declaration of variables, functions and types to find comments about them.
+
+ - Init: retrieve the ImGuiIO structure with ImGui::GetIO() and fill the fields marked 'Settings': at minimum you need to set io.DisplaySize
+ (application resolution). Later on you will fill your keyboard mapping, clipboard handlers, and other advanced features but for a basic
+ integration you don't need to worry about it all.
+ - Init: call io.Fonts->GetTexDataAsRGBA32(...), it will build the font atlas texture, then load the texture pixels into graphics memory.
+ - Every frame:
+ - In your main loop as early a possible, fill the IO fields marked 'Input' (e.g. mouse position, buttons, keyboard info, etc.)
+ - Call ImGui::NewFrame() to begin the frame
+ - You can use any ImGui function you want between NewFrame() and Render()
+ - Call ImGui::Render() as late as you can to end the frame and finalize render data. it will call your io.RenderDrawListFn handler.
+ (Even if you don't render, call Render() and ignore the callback, or call EndFrame() instead. Otherwhise some features will break)
+ - All rendering information are stored into command-lists until ImGui::Render() is called.
+ - Dear ImGui never touches or knows about your GPU state. the only function that knows about GPU is the RenderDrawListFn handler that you provide.
+ - Effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render" phases
+ of your own application.
+ - Refer to the examples applications in the examples/ folder for instruction on how to setup your code.
+ - A minimal application skeleton may be:
+
+ // Application init
+ ImGuiIO& io = ImGui::GetIO();
+ io.DisplaySize.x = 1920.0f;
+ io.DisplaySize.y = 1280.0f;
+ io.RenderDrawListsFn = MyRenderFunction; // Setup a render function, or set to NULL and call GetDrawData() after Render() to access render data.
+ // TODO: Fill others settings of the io structure later.
+
+ // Load texture atlas (there is a default font so you don't need to care about choosing a font yet)
+ unsigned char* pixels;
+ int width, height;
+ io.Fonts->GetTexDataAsRGBA32(pixels, &width, &height);
+ // TODO: At this points you've got the texture data and you need to upload that your your graphic system:
+ MyTexture* texture = MyEngine::CreateTextureFromMemoryPixels(pixels, width, height, TEXTURE_TYPE_RGBA)
+ // TODO: Store your texture pointer/identifier (whatever your engine uses) in 'io.Fonts->TexID'. This will be passed back to your via the renderer.
+ io.Fonts->TexID = (void*)texture;
+
+ // Application main loop
+ while (true)
+ {
+ // Setup low-level inputs (e.g. on Win32, GetKeyboardState(), or write to those fields from your Windows message loop handlers, etc.)
ImGuiIO& io = ImGui::GetIO();
- io.DisplaySize.x = 1920.0f;
- io.DisplaySize.y = 1280.0f;
- io.IniFilename = "imgui.ini";
- io.RenderDrawListsFn = my_render_function; // Setup a render function, or set to NULL and call GetDrawData() after Render() to access the render data.
- // TODO: Fill others settings of the io structure
-
- // Load texture atlas
- // There is a default font so you don't need to care about choosing a font yet
- unsigned char* pixels;
- int width, height;
- io.Fonts->GetTexDataAsRGBA32(pixels, &width, &height);
- // TODO: At this points you've got a texture pointed to by 'pixels' and you need to upload that your your graphic system
- // TODO: Store your texture pointer/identifier (whatever your engine uses) in 'io.Fonts->TexID'
-
- // Application main loop
- while (true)
- {
- // 1) get low-level inputs (e.g. on Win32, GetKeyboardState(), or poll your events, etc.)
- // TODO: fill all fields of IO structure and call NewFrame
- ImGuiIO& io = ImGui::GetIO();
- io.DeltaTime = 1.0f/60.0f;
- io.MousePos = mouse_pos;
- io.MouseDown[0] = mouse_button_0;
- io.MouseDown[1] = mouse_button_1;
- io.KeysDown[i] = ...
-
- // 2) call NewFrame(), after this point you can use ImGui::* functions anytime
- ImGui::NewFrame();
-
- // 3) most of your application code here
- MyGameUpdate(); // may use any ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End();
- MyGameRender(); // may use any ImGui functions
-
- // 4) render & swap video buffers
- ImGui::Render();
- SwapBuffers();
- }
+ io.DeltaTime = 1.0f/60.0f;
+ io.MousePos = mouse_pos;
+ io.MouseDown[0] = mouse_button_0;
+ io.MouseDown[1] = mouse_button_1;
+
+ // Call NewFrame(), after this point you can use ImGui::* functions anytime
+ ImGui::NewFrame();
+
+ // Most of your application code here
+ MyGameUpdate(); // may use any ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End();
+ MyGameRender(); // may use any ImGui functions as well!
+
+ // Render & swap video buffers
+ ImGui::Render();
+ SwapBuffers();
+ }
+
+ - A minimal render function skeleton may be:
+
+ void void MyRenderFunction(ImDrawData* draw_data)(ImDrawData* draw_data)
+ {
+ // TODO: Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled
+ // TODO: Setup viewport, orthographic projection matrix
+ // TODO: Setup shader: vertex { float2 pos, float2 uv, u32 color }, fragment shader sample color from 1 texture, multiply by vertex color.
+ for (int n = 0; n < draw_data->CmdListsCount; n++)
+ {
+ const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data; // vertex buffer generated by ImGui
+ const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data; // index buffer generated by ImGui
+ for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
+ {
+ const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
+ if (pcmd->UserCallback)
+ {
+ pcmd->UserCallback(cmd_list, pcmd);
+ }
+ else
+ {
+ // The texture for the draw call is specified by pcmd->TextureId.
+ // The vast majority of draw calls with use the imgui texture atlas, which value you have set yourself during initialization.
+ MyEngineBindTexture(pcmd->TextureId);
+
+ // We are using scissoring to clip some objects. All low-level graphics API supports it.
+ // If your engine doesn't support scissoring yet, you will get some small glitches (some elements outside their bounds) which you can fix later.
+ MyEngineScissor((int)pcmd->ClipRect.x, (int)pcmd->ClipRect.y, (int)(pcmd->ClipRect.z - pcmd->ClipRect.x), (int)(pcmd->ClipRect.w - pcmd->ClipRect.y));
+
+ // Render 'pcmd->ElemCount/3' indexed triangles.
+ // By default the indices ImDrawIdx are 16-bits, you can change them to 32-bits if your engine doesn't support 16-bits indices.
+ MyEngineDrawIndexedTriangles(pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer, vtx_buffer);
+ }
+ idx_buffer += pcmd->ElemCount;
+ }
+ }
+ }
+
+ - The examples/ folders contains many functional implementation of the pseudo-code above.
+ - When calling NewFrame(), the 'io.WantCaptureMouse'/'io.WantCaptureKeyboard'/'io.WantTextInput' flags are updated.
+ They tell you if ImGui intends to use your inputs. So for example, if 'io.WantCaptureMouse' is set you would typically want to hide
+ mouse inputs from the rest of your application. Read the FAQ below for more information about those flags.
- - You can read back 'io.WantCaptureMouse', 'io.WantCaptureKeybord' etc. flags from the IO structure to tell how ImGui intends to use your
- inputs and to know if you should share them or hide them from the rest of your application. Read the FAQ below for more information.
API BREAKING CHANGES
@@ -152,6 +213,37 @@
Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code.
Also read releases logs https://github.com/ocornut/imgui/releases for more details.
+ - 2017/11/27 (1.53) - renamed ImGuiTextBuffer::append() helper to appendf(), appendv() to appendfv(). If you copied the 'Log' demo in your code, it uses appendv() so that needs to be renamed.
+ - 2017/11/18 (1.53) - Style, Begin: removed ImGuiWindowFlags_ShowBorders window flag. Borders are now fully set up in the ImGuiStyle structure (see e.g. style.FrameBorderSize, style.WindowBorderSize). Use ImGui::ShowStyleEditor() to look them up.
+ Please note that the style system will keep evolving (hopefully stabilizing in Q1 2018), and so custom styles will probably subtly break over time. It is recommended you use the StyleColorsClassic(), StyleColorsDark(), StyleColorsLight() functions.
+ - 2017/11/18 (1.53) - Style: removed ImGuiCol_ComboBg in favor of combo boxes using ImGuiCol_PopupBg for consistency.
+ - 2017/11/18 (1.53) - Style: renamed ImGuiCol_ChildWindowBg to ImGuiCol_ChildBg.
+ - 2017/11/18 (1.53) - Style: renamed style.ChildWindowRounding to style.ChildRounding, ImGuiStyleVar_ChildWindowRounding to ImGuiStyleVar_ChildRounding.
+ - 2017/11/02 (1.53) - marked IsRootWindowOrAnyChildHovered() as obsolete is favor of using IsWindowHovered(ImGuiHoveredFlags_FlattenChilds);
+ - 2017/10/24 (1.52) - renamed IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS to IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS for consistency.
+ - 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it.
+ - 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details.
+ removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51 since they were merely more consistent names for the two functions we are now obsoleting.
+ - 2017/10/17 (1.52) - marked the old 5-parameters version of Begin() as obsolete (still available). Use SetNextWindowSize()+Begin() instead!
+ - 2017/10/11 (1.52) - renamed AlignFirstTextHeightToWidgets() to AlignTextToFramePadding(). Kept inline redirection function (will obsolete).
+ - 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because SetNextWindowPos() now has the optional pivot information to do the same and more. Kept redirection function (will obsolete).
+ - 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previously ImVec2(-1,-1) was enough but we now accept negative mouse coordinates. In your binding if you need to support unavailable mouse, make sure to replace "io.MousePos = ImVec2(-1,-1)" with "io.MousePos = ImVec2(-FLT_MAX,-FLT_MAX)".
+ - 2017/08/22 (1.51) - renamed IsItemHoveredRect() to IsItemRectHovered(). Kept inline redirection function (will obsolete). -> (1.52) use IsItemHovered(ImGuiHoveredFlags_RectOnly)!
+ - renamed IsMouseHoveringAnyWindow() to IsAnyWindowHovered() for consistency. Kept inline redirection function (will obsolete).
+ - renamed IsMouseHoveringWindow() to IsWindowRectHovered() for consistency. Kept inline redirection function (will obsolete).
+ - 2017/08/20 (1.51) - renamed GetStyleColName() to GetStyleColorName() for consistency.
+ - 2017/08/20 (1.51) - added PushStyleColor(ImGuiCol idx, ImU32 col) overload, which _might_ cause an "ambiguous call" compilation error if you are using ImColor() with implicit cast. Cast to ImU32 or ImVec4 explicily to fix.
+ - 2017/08/15 (1.51) - marked the weird IMGUI_ONCE_UPON_A_FRAME helper macro as obsolete. prefer using the more explicit ImGuiOnceUponAFrame.
+ - 2017/08/15 (1.51) - changed parameter order for BeginPopupContextWindow() from (const char*,int buttons,bool also_over_items) to (const char*,int buttons,bool also_over_items). Note that most calls relied on default parameters completely.
+ - 2017/08/13 (1.51) - renamed ImGuiCol_Columns*** to ImGuiCol_Separator***. Kept redirection enums (will obsolete).
+ - 2017/08/11 (1.51) - renamed ImGuiSetCond_*** types and flags to ImGuiCond_***. Kept redirection enums (will obsolete).
+ - 2017/08/09 (1.51) - removed ValueColor() helpers, they are equivalent to calling Text(label) + SameLine() + ColorButton().
+ - 2017/08/08 (1.51) - removed ColorEditMode() and ImGuiColorEditMode in favor of ImGuiColorEditFlags and parameters to the various Color*() functions. The SetColorEditOptions() allows to initialize default but the user can still change them with right-click context menu.
+ - changed prototype of 'ColorEdit4(const char* label, float col[4], bool show_alpha = true)' to 'ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0)', where passing flags = 0x01 is a safe no-op (hello dodgy backward compatibility!). - check and run the demo window, under "Color/Picker Widgets", to understand the various new options.
+ - changed prototype of rarely used 'ColorButton(ImVec4 col, bool small_height = false, bool outline_border = true)' to 'ColorButton(const char* desc_id, ImVec4 col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0))'
+ - 2017/07/20 (1.51) - removed IsPosHoveringAnyWindow(ImVec2), which was partly broken and misleading. ASSERT + redirect user to io.WantCaptureMouse
+ - 2017/05/26 (1.50) - removed ImFontConfig::MergeGlyphCenterV in favor of a more multipurpose ImFontConfig::GlyphOffset.
+ - 2017/05/01 (1.50) - renamed ImDrawList::PathFill() (rarely used directly) to ImDrawList::PathFillConvex() for clarity.
- 2016/11/06 (1.50) - BeginChild(const char*) now applies the stack id to the provided label, consistently with other functions as it should always have been. It shouldn't affect you unless (extremely unlikely) you were appending multiple times to a same child from different locations of the stack id. If that's the case, generate an id with GetId() and use it instead of passing string to BeginChild().
- 2016/10/15 (1.50) - avoid 'void* user_data' parameter to io.SetClipboardTextFn/io.GetClipboardTextFn pointers. We pass io.ClipboardUserData to it.
- 2016/09/25 (1.50) - style.WindowTitleAlign is now a ImVec2 (ImGuiAlign enum was removed). set to (0.5f,0.5f) for horizontal+vertical centering, (0.0f,0.0f) for upper-left, etc.
@@ -260,58 +352,50 @@
- 2014/08/28 (1.09) - changed the behavior of IO.PixelCenterOffset following various rendering fixes
+ ISSUES & TODO-LIST
+ ==================
+ See TODO.txt
+
+
FREQUENTLY ASKED QUESTIONS (FAQ), TIPS
======================================
Q: How can I help?
- A: - If you are experienced enough with ImGui and with C/C++, look at the todo list and see how you want/can help!
- - Become a Patron/donate. Convince your company to become a Patron or provide serious funding for development time.
-
- Q: How do I update to a newer version of ImGui?
- A: Overwrite the following files:
- imgui.cpp
- imgui.h
- imgui_demo.cpp
- imgui_draw.cpp
- imgui_internal.h
- stb_rect_pack.h
- stb_textedit.h
- stb_truetype.h
- Don't overwrite imconfig.h if you have made modification to your copy.
- Check the "API BREAKING CHANGES" sections for a list of occasional API breaking changes. If you have a problem with a function, search for its name
- in the code, there will likely be a comment about it. Please report any issue to the GitHub page!
+ A: - If you are experienced enough with Dear ImGui and with C/C++, look at the todo list and see how you want/can help!
+ - Become a Patron/donate! Convince your company to become a Patron or provide serious funding for development time! See http://www.patreon.com/imgui
Q: What is ImTextureID and how do I display an image?
A: ImTextureID is a void* used to pass renderer-agnostic texture references around until it hits your render function.
- ImGui knows nothing about what those bits represent, it just passes them around. It is up to you to decide what you want the void* to carry!
+ Dear ImGui knows nothing about what those bits represent, it just passes them around. It is up to you to decide what you want the void* to carry!
It could be an identifier to your OpenGL texture (cast GLuint to void*), a pointer to your custom engine material (cast MyMaterial* to void*), etc.
At the end of the chain, your renderer takes this void* to cast it back into whatever it needs to select a current texture to render.
Refer to examples applications, where each renderer (in a imgui_impl_xxxx.cpp file) is treating ImTextureID as a different thing.
(c++ tip: OpenGL uses integers to identify textures. You can safely store an integer into a void*, just cast it to void*, don't take it's address!)
To display a custom image/texture within an ImGui window, you may use ImGui::Image(), ImGui::ImageButton(), ImDrawList::AddImage() functions.
- ImGui will generate the geometry and draw calls using the ImTextureID that you passed and which your renderer can use.
+ Dear ImGui will generate the geometry and draw calls using the ImTextureID that you passed and which your renderer can use.
It is your responsibility to get textures uploaded to your GPU.
- Q: I integrated ImGui in my engine and the text or lines are blurry..
+ Q: I integrated Dear ImGui in my engine and the text or lines are blurry..
A: In your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f).
Also make sure your orthographic projection matrix and io.DisplaySize matches your actual framebuffer dimension.
- Q: I integrated ImGui in my engine and some elements are clipping or disappearing when I move windows around..
- A: Most likely you are mishandling the clipping rectangles in your render function. Rectangles provided by ImGui are defined as (x1=left,y1=top,x2=right,y2=bottom) and NOT as (x1,y1,width,height).
+ Q: I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around..
+ A: You are probably mishandling the clipping rectangles in your render function.
+ Rectangles provided by ImGui are defined as (x1=left,y1=top,x2=right,y2=bottom) and NOT as (x1,y1,width,height).
- Q: Can I have multiple widgets with the same label? Can I have widget without a label? (Yes)
- A: Yes. A primer on the use of labels/IDs in ImGui..
+ Q: Can I have multiple widgets with the same label? Can I have widget without a label?
+ A: Yes. A primer on the use of labels/IDs in Dear ImGui..
- Elements that are not clickable, such as Text() items don't need an ID.
- - Interactive widgets require state to be carried over multiple frames (most typically ImGui often needs to remember what is the "active" widget).
- to do so they need a unique ID. unique ID are typically derived from a string label, an integer index or a pointer.
+ - Interactive widgets require state to be carried over multiple frames (most typically Dear ImGui often needs to remember what is
+ the "active" widget). to do so they need a unique ID. unique ID are typically derived from a string label, an integer index or a pointer.
Button("OK"); // Label = "OK", ID = hash of "OK"
Button("Cancel"); // Label = "Cancel", ID = hash of "Cancel"
- - ID are uniquely scoped within windows, tree nodes, etc. so no conflict can happen if you have two buttons called "OK" in two different windows
- or in two different locations of a tree.
+ - ID are uniquely scoped within windows, tree nodes, etc. so no conflict can happen if you have two buttons called "OK"
+ in two different windows or in two different locations of a tree.
- If you have a same ID twice in the same location, you'll have a conflict:
@@ -320,8 +404,8 @@
Fear not! this is easy to solve and there are many ways to solve it!
- - When passing a label you can optionally specify extra unique ID information within string itself. This helps solving the simpler collision cases.
- use "##" to pass a complement to the ID that won't be visible to the end-user:
+ - When passing a label you can optionally specify extra unique ID information within string itself.
+ This helps solving the simpler collision cases. Use "##" to pass a complement to the ID that won't be visible to the end-user:
Button("Play"); // Label = "Play", ID = hash of "Play"
Button("Play##foo1"); // Label = "Play", ID = hash of "Play##foo1" (different from above)
@@ -389,27 +473,33 @@
- When working with trees, ID are used to preserve the open/close state of each tree node.
Depending on your use cases you may want to use strings, indices or pointers as ID.
- e.g. when displaying a single object that may change over time (1-1 relationship), using a static string as ID will preserve your node open/closed state when the targeted object change.
- e.g. when displaying a list of objects, using indices or pointers as ID will preserve the node open/closed state differently. experiment and see what makes more sense!
-
- Q: How can I tell when ImGui wants my mouse/keyboard inputs and when I can pass them to my application?
- A: You can read the 'io.WantCaptureXXX' flags in the ImGuiIO structure. Preferably read them after calling ImGui::NewFrame() to avoid those flags lagging by one frame, but either should be fine.
- When 'io.WantCaptureMouse' or 'io.WantCaptureKeyboard' flags are set you may want to discard/hide the inputs from the rest of your application.
- When 'io.WantInputsCharacters' is set to may want to notify your OS to popup an on-screen keyboard, if available.
- ImGui is tracking dragging and widget activity that may occur outside the boundary of a window, so 'io.WantCaptureMouse' is a more accurate and complete than testing for ImGui::IsMouseHoveringAnyWindow().
- (Advanced note: text input releases focus on Return 'KeyDown', so the following Return 'KeyUp' event that your application receive will typically have 'io.WantcaptureKeyboard=false'.
- Depending on your application logic it may or not be inconvenient. You might want to track which key-downs were for ImGui (e.g. with an array of bool) and filter out the corresponding key-ups.)
+ e.g. when displaying a single object that may change over time (dynamic 1-1 relationship), using a static string as ID will preserve your
+ node open/closed state when the targeted object change.
+ e.g. when displaying a list of objects, using indices or pointers as ID will preserve the node open/closed state differently.
+ experiment and see what makes more sense!
+
+ Q: How can I tell when Dear ImGui wants my mouse/keyboard inputs VS when I can pass them to my application?
+ A: You can read the 'io.WantCaptureMouse'/'io.WantCaptureKeyboard'/'ioWantTextInput' flags from the ImGuiIO structure.
+ - When 'io.WantCaptureMouse' or 'io.WantCaptureKeyboard' flags are set you may want to discard/hide the inputs from the rest of your application.
+ - When 'io.WantTextInput' is set to may want to notify your OS to popup an on-screen keyboard, if available (e.g. on a mobile phone, or console OS).
+ Preferably read the flags after calling ImGui::NewFrame() to avoid them lagging by one frame. But reading those flags before calling NewFrame() is
+ also generally ok, as the bool toggles fairly rarely and you don't generally expect to interact with either Dear ImGui or your application during
+ the same frame when that transition occurs. Dear ImGui is tracking dragging and widget activity that may occur outside the boundary of a window,
+ so 'io.WantCaptureMouse' is more accurate and correct than checking if a window is hovered.
+ (Advanced note: text input releases focus on Return 'KeyDown', so the following Return 'KeyUp' event that your application receive will typically
+ have 'io.WantCaptureKeyboard=false'. Depending on your application logic it may or not be inconvenient. You might want to track which key-downs
+ were for Dear ImGui, e.g. with an array of bool, and filter out the corresponding key-ups.)
Q: How can I load a different font than the default? (default is an embedded version of ProggyClean.ttf, rendered at size 13)
- A: Use the font atlas to load the TTF file you want:
+ A: Use the font atlas to load the TTF/OTF file you want:
ImGuiIO& io = ImGui::GetIO();
io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels);
io.Fonts->GetTexDataAsRGBA32() or GetTexDataAsAlpha8()
Q: How can I easily use icons in my application?
- A: The most convenient and practical way is to merge an icon font such as FontAwesome inside you main font. Then you can refer to icons within your strings.
- Read 'How can I load multiple fonts?' and the file 'extra_fonts/README.txt' for instructions.
+ A: The most convenient and practical way is to merge an icon font such as FontAwesome inside you main font. Then you can refer to icons within your
+ strings. Read 'How can I load multiple fonts?' and the file 'extra_fonts/README.txt' for instructions and useful header files.
Q: How can I load multiple fonts?
A: Use the font atlas to pack them into a single texture:
@@ -427,7 +517,8 @@
ImFontConfig config;
config.OversampleH = 3;
config.OversampleV = 1;
- config.GlyphExtraSpacing.x = 1.0f;
+ config.GlyphOffset.y -= 2.0f; // Move everything by 2 pixels up
+ config.GlyphExtraSpacing.x = 1.0f; // Increase spacing between characters
io.Fonts->LoadFromFileTTF("myfontfile.ttf", size_pixels, &config);
// Combine multiple fonts into one (e.g. for icon fonts)
@@ -440,174 +531,45 @@
Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic?
A: When loading a font, pass custom Unicode ranges to specify the glyphs to load.
- All your strings needs to use UTF-8 encoding. Specifying literal in your source code using a local code page (such as CP-923 for Japanese or CP-1251 for Cyrillic) will not work.
- In C++11 you can encode a string literal in UTF-8 by using the u8"hello" syntax. Otherwise you can convert yourself to UTF-8 or load text data from file already saved as UTF-8.
- You can also try to remap your local codepage characters to their Unicode codepoint using font->AddRemapChar(), but international users may have problems reading/editing your source code.
-
- io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels, NULL, io.Fonts->GetGlyphRangesJapanese()); // Load Japanese characters
- io.Fonts->GetTexDataAsRGBA32() or GetTexDataAsAlpha8()
- io.ImeWindowHandle = MY_HWND; // To input using Microsoft IME, give ImGui the hwnd of your application
- As for text input, depends on you passing the right character code to io.AddInputCharacter(). The example applications do that.
+ // Add default Japanese ranges
+ io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels, NULL, io.Fonts->GetGlyphRangesJapanese());
+
+ // Or create your own custom ranges (e.g. for a game you can feed your entire game script and only build the characters the game need)
+ ImVector<ImWchar> ranges;
+ ImFontAtlas::GlyphRangesBuilder builder;
+ builder.AddText("Hello world"); // Add a string (here "Hello world" contains 7 unique characters)
+ builder.AddChar(0x7262); // Add a specific character
+ builder.AddRanges(io.Fonts->GetGlyphRangesJapanese()); // Add one of the default ranges
+ builder.BuildRanges(&ranges); // Build the final result (ordered ranges with all the unique characters submitted)
+ io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels, NULL, ranges.Data);
+
+ All your strings needs to use UTF-8 encoding. In C++11 you can encode a string literal in UTF-8 by using the u8"hello" syntax.
+ Specifying literal in your source code using a local code page (such as CP-923 for Japanese or CP-1251 for Cyrillic) will NOT work!
+ Otherwise you can convert yourself to UTF-8 or load text data from file already saved as UTF-8.
+
+ Text input: it is up to your application to pass the right character code to io.AddInputCharacter(). The applications in examples/ are doing that.
+ For languages using IME, on Windows you can copy the Hwnd of your application to io.ImeWindowHandle.
+ The default implementation of io.ImeSetInputScreenPosFn() on Windows will set your IME position correctly.
+
+ Q: How can I preserve my Dear ImGui context across reloading a DLL? (loss of the global/static variables)
+ A: Create your own context 'ctx = CreateContext()' + 'SetCurrentContext(ctx)' and your own font atlas 'ctx->GetIO().Fonts = new ImFontAtlas()'
+ so you don't rely on the default globals.
Q: How can I use the drawing facilities without an ImGui window? (using ImDrawList API)
- A: The easiest way is to create a dummy window. Call Begin() with NoTitleBar|NoResize|NoMove|NoScrollbar|NoSavedSettings|NoInputs flag, zero background alpha,
- then retrieve the ImDrawList* via GetWindowDrawList() and draw to it in any way you like.
-
- - tip: the construct 'IMGUI_ONCE_UPON_A_FRAME { ... }' will run the block of code only once a frame. You can use it to quickly add custom UI in the middle of a deep nested inner loop in your code.
- - tip: you can create widgets without a Begin()/End() block, they will go in an implicit window called "Debug"
- - tip: you can call Begin() multiple times with the same name during the same frame, it will keep appending to the same window. this is also useful to set yourself in the context of another window (to get/set other settings)
+ A: The easiest way is to create a dummy window. Call Begin() with NoTitleBar|NoResize|NoMove|NoScrollbar|NoSavedSettings|NoInputs flag,
+ zero background alpha, then retrieve the ImDrawList* via GetWindowDrawList() and draw to it in any way you like.
+ You can also perfectly create a standalone ImDrawList instance _but_ you need ImGui to be initialized because ImDrawList pulls from ImGui
+ data to retrieve the coordinates of the white pixel.
+
+ - tip: you can call Begin() multiple times with the same name during the same frame, it will keep appending to the same window.
+ this is also useful to set yourself in the context of another window (to get/set other settings)
+ - tip: you can create widgets without a Begin()/End() block, they will go in an implicit window called "Debug".
+ - tip: the ImGuiOnceUponAFrame helper will allow run the block of code only once a frame. You can use it to quickly add custom UI in the middle
+ of a deep nested inner loop in your code.
- tip: you can call Render() multiple times (e.g for VR renders).
- tip: call and read the ShowTestWindow() code in imgui_demo.cpp for more example of how to use ImGui!
-
- ISSUES & TODO-LIST
- ==================
- Issue numbers (#) refer to github issues listed at https://github.com/ocornut/imgui/issues
- The list below consist mostly of ideas noted down before they are requested/discussed by users (at which point it usually moves to the github)
-
- - doc: add a proper documentation+regression testing system (#435)
- - window: add a way for very transient windows (non-saved, temporary overlay over hundreds of objects) to "clean" up from the global window list. perhaps a lightweight explicit cleanup pass.
- - window: calling SetNextWindowSize() every frame with <= 0 doesn't do anything, may be useful to allow (particularly when used for a single axis) (#690)
- - window: auto-fit feedback loop when user relies on any dynamic layout (window width multiplier, column) appears weird to end-user. clarify.
- - window: allow resizing of child windows (possibly given min/max for each axis?)
- - window: background options for child windows, border option (disable rounding)
- - window: add a way to clear an existing window instead of appending (e.g. for tooltip override using a consistent api rather than the deferred tooltip)
- - window: resizing from any sides? + mouse cursor directives for app.
-!- window: begin with *p_open == false should return false.
- - window: get size/pos helpers given names (see discussion in #249)
- - window: a collapsed window can be stuck behind the main menu bar?
- - window: when window is small, prioritize resize button over close button.
- - window: detect extra End() call that pop the "Debug" window out and assert at call site instead of later.
- - window/tooltip: allow to set the width of a tooltip to allow TextWrapped() etc. while keeping the height automatic.
- - window: increase minimum size of a window with menus or fix the menu rendering so that it doesn't look odd.
- - draw-list: maintaining bounding box per command would allow to merge draw command when clipping isn't relied on (typical non-scrolling window or non-overflowing column would merge with previous command).
-!- scrolling: allow immediately effective change of scroll if we haven't appended items yet
- - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319)
- - widgets: display mode: widget-label, label-widget (aligned on column or using fixed size), label-newline-tab-widget etc.
- - widgets: clean up widgets internal toward exposing everything.
- - widgets: add disabled and read-only modes (#211)
- - main: considering adding an Init() function? some constructs are awkward in the implementation because of the lack of them.
-!- main: make it so that a frame with no window registered won't refocus every window on subsequent frames (~bump LastFrameActive of all windows).
- - main: IsItemHovered() make it more consistent for various type of widgets, widgets with multiple components, etc. also effectively IsHovered() region sometimes differs from hot region, e.g tree nodes
- - main: IsItemHovered() info stored in a stack? so that 'if TreeNode() { Text; TreePop; } if IsHovered' return the hover state of the TreeNode?
- - input text: clean up the mess caused by converting UTF-8 <> wchar. the code is rather inefficient right now and super fragile.
- - input text: reorganize event handling, allow CharFilter to modify buffers, allow multiple events? (#541)
- - input text: expose CursorPos in char filter event (#816)
- - input text: flag to disable live update of the user buffer (also applies to float/int text input)
- - input text: resize behavior - field could stretch when being edited? hover tooltip shows more text?
- - input text: add ImGuiInputTextFlags_EnterToApply? (off #218)
- - input text: add discard flag (e.g. ImGuiInputTextFlags_DiscardActiveBuffer) or make it easier to clear active focus for text replacement during edition (#725)
- - input text multi-line: don't directly call AddText() which does an unnecessary vertex reserve for character count prior to clipping. and/or more line-based clipping to AddText(). and/or reorganize TextUnformatted/RenderText for more efficiency for large text (e.g TextUnformatted could clip and log separately, etc).
- - input text multi-line: way to dynamically grow the buffer without forcing the user to initially allocate for worse case (follow up on #200)
- - input text multi-line: line numbers? status bar? (follow up on #200)
- - input text multi-line: behave better when user changes input buffer while editing is active (even though it is illegal behavior). namely, the change of buffer can create a scrollbar glitch (#725)
- - input text: allow centering/positioning text so that ctrl+clicking Drag or Slider keeps the textual value at the same pixel position.
- - input number: optional range min/max for Input*() functions
- - input number: holding [-]/[+] buttons could increase the step speed non-linearly (or user-controlled)
- - input number: use mouse wheel to step up/down
- - input number: applying arithmetics ops (+,-,*,/) messes up with text edit undo stack.
- - button: provide a button that looks framed.
- - text: proper alignment options
- - image/image button: misalignment on padded/bordered button?
- - image/image button: parameters are confusing, image() has tint_col,border_col whereas imagebutton() has bg_col/tint_col. Even thou they are different parameters ordering could be more consistent. can we fix that?
- - layout: horizontal layout helper (#97)
- - layout: horizontal flow until no space left (#404)
- - layout: more generic alignment state (left/right/centered) for single items?
- - layout: clean up the InputFloatN/SliderFloatN/ColorEdit4 layout code. item width should include frame padding.
- - layout: BeginGroup() needs a border option.
- - columns: declare column set (each column: fixed size, %, fill, distribute default size among fills) (#513, #125)
- - columns: add a conditional parameter to SetColumnOffset() (#513, #125)
- - columns: separator function or parameter that works within the column (currently Separator() bypass all columns) (#125)
- - columns: columns header to act as button (~sort op) and allow resize/reorder (#513, #125)
- - columns: user specify columns size (#513, #125)
- - columns: flag to add horizontal separator above/below?
- - columns/layout: setup minimum line height (equivalent of automatically calling AlignFirstTextHeightToWidgets)
- - combo: sparse combo boxes (via function call?) / iterators
- - combo: contents should extends to fit label if combo widget is small
- - combo/listbox: keyboard control. need InputText-like non-active focus + key handling. considering keyboard for custom listbox (pr #203)
- - listbox: multiple selection
- - listbox: user may want to initial scroll to focus on the one selected value?
- - listbox: keyboard navigation.
- - listbox: scrolling should track modified selection.
-!- popups/menus: clarify usage of popups id, how MenuItem/Selectable closing parent popups affects the ID, etc. this is quite fishy needs improvement! (#331, #402)
- - popups: add variant using global identifier similar to Begin/End (#402)
- - popups: border options. richer api like BeginChild() perhaps? (#197)
- - tooltip: tooltip that doesn't fit in entire screen seems to lose their "last preferred button" and may teleport when moving mouse
- - menus: local shortcuts, global shortcuts (#456, #126)
- - menus: icons
- - menus: menubars: some sort of priority / effect of main menu-bar on desktop size?
- - menus: calling BeginMenu() twice with a same name doesn't seem to append nicely
- - statusbar: add a per-window status bar helper similar to what menubar does.
- - tabs (#261, #351)
- - separator: separator on the initial position of a window is not visible (cursorpos.y <= clippos.y)
-!- color: the color helpers/typing is a mess and needs sorting out.
- - color: add a better color picker (#346)
- - node/graph editor (#306)
- - pie menus patterns (#434)
- - drag'n drop, dragging helpers (carry dragging info, visualize drag source before clicking, drop target, etc.) (#143, #479)
- - plot: PlotLines() should use the polygon-stroke facilities (currently issues with averaging normals)
- - plot: make it easier for user to draw extra stuff into the graph (e.g: draw basis, highlight certain points, 2d plots, multiple plots)
- - plot: "smooth" automatic scale over time, user give an input 0.0(full user scale) 1.0(full derived from value)
- - plot: add a helper e.g. Plot(char* label, float value, float time_span=2.0f) that stores values and Plot them for you - probably another function name. and/or automatically allow to plot ANY displayed value (more reliance on stable ID)
- - slider: allow using the [-]/[+] buttons used by InputFloat()/InputInt()
- - slider: initial absolute click is imprecise. change to relative movement slider (same as scrollbar).
- - slider: add dragging-based widgets to edit values with mouse (on 2 axises), saving screen real-estate.
- - slider: tint background based on value (e.g. v_min -> v_max, or use 0.0f either side of the sign)
- - slider & drag: int data passing through a float
- - drag float: up/down axis
- - drag float: added leeway on edge (e.g. a few invisible steps past the clamp limits)
- - tree node / optimization: avoid formatting when clipped.
- - tree node: tree-node/header right-most side doesn't take account of horizontal scrolling.
- - tree node: add treenode/treepush int variants? not there because (void*) cast from int warns on some platforms/settings?
- - tree node: try to apply scrolling at time of TreePop() if node was just opened and end of node is past scrolling limits?
- - tree node / selectable render mismatch which is visible if you use them both next to each other (e.g. cf. property viewer)
- - tree node: tweak color scheme to distinguish headers from selected tree node (#581)
- - textwrapped: figure out better way to use TextWrapped() in an always auto-resize context (tooltip, etc.) (#249)
- - settings: write more decent code to allow saving/loading new fields
- - settings: api for per-tool simple persistent data (bool,int,float,columns sizes,etc.) in .ini file
- - style: add window shadows.
- - style/optimization: store rounded corners in texture to use 1 quad per corner (filled and wireframe) to lower the cost of rounding.
- - style: color-box not always square?
- - style: a concept of "compact style" that the end-user can easily rely on (e.g. PushStyleCompact()?) that maps to other settings? avoid implementing duplicate helpers such as SmallCheckbox(), etc.
- - style: try to make PushStyleVar() more robust to incorrect parameters (to be more friendly to edit & continues situation).
- - style: global scale setting.
- - style: WindowPadding needs to be EVEN needs the 0.5 multiplier probably have a subtle effect on clip rectangle
- - text: simple markup language for color change?
- - font: dynamic font atlas to avoid baking huge ranges into bitmap and make scaling easier.
- - font: small opt: for monospace font (like the defalt one) we can trim IndexXAdvance as long as trailing value is == FallbackXAdvance
- - font: add support for kerning, probably optional. perhaps default to (32..128)^2 matrix ~ 36KB then hash fallback.
- - font: add a simpler CalcTextSizeA() api? current one ok but not welcome if user needs to call it directly (without going through ImGui::CalcTextSize)
- - font: fix AddRemapChar() to work before font has been built.
- - log: LogButtons() options for specifying depth and/or hiding depth slider
- - log: have more control over the log scope (e.g. stop logging when leaving current tree node scope)
- - log: be able to log anything (e.g. right-click on a window/tree-node, shows context menu? log into tty/file/clipboard)
- - log: let user copy any window content to clipboard easily (CTRL+C on windows? while moving it? context menu?). code is commented because it fails with multiple Begin/End pairs.
- - filters: set a current filter that tree node can automatically query to hide themselves
- - filters: handle wildcards (with implicit leading/trailing *), regexps
- - shortcuts: add a shortcut api, e.g. parse "&Save" and/or "Save (CTRL+S)", pass in to widgets or provide simple ways to use (button=activate, input=focus)
-!- keyboard: tooltip & combo boxes are messing up / not honoring keyboard tabbing
- - keyboard: full keyboard navigation and focus. (#323)
- - focus: preserve ActiveId/focus stack state, e.g. when opening a menu and close it, previously selected InputText() focus gets restored (#622)
- - focus: SetKeyboardFocusHere() on with >= 0 offset could be done on same frame (else latch and modulate on beginning of next frame)
- - input: rework IO system to be able to pass actual ordered/timestamped events. (~#335, #71)
- - input: allow to decide and pass explicit double-clicks (e.g. for windows by the CS_DBLCLKS style).
- - input: support track pad style scrolling & slider edit.
- - misc: provide a way to compile out the entire implementation while providing a dummy API (e.g. #define IMGUI_DUMMY_IMPL)
- - misc: double-clicking on title bar to minimize isn't consistent, perhaps move to single-click on left-most collapse icon?
- - misc: provide HoveredTime and ActivatedTime to ease the creation of animations.
- - style editor: have a more global HSV setter (e.g. alter hue on all elements). consider replacing active/hovered by offset in HSV space? (#438)
- - style editor: color child window height expressed in multiple of line height.
- - remote: make a system like RemoteImGui first-class citizen/project (#75)
- - drawlist: move Font, FontSize, FontTexUvWhitePixel inside ImDrawList and make it self-contained (apart from drawing settings?)
- - drawlist: end-user probably can't call Clear() directly because we expect a texture to be pushed in the stack.
- - examples: directx9: save/restore device state more thoroughly.
- - examples: window minimize, maximize (#583)
- - optimization: add a flag to disable most of rendering, for the case where the user expect to skip it (#335)
- - optimization: use another hash function than crc32, e.g. FNV1a
- - optimization/render: merge command-lists with same clip-rect into one even if they aren't sequential? (as long as in-between clip rectangle don't overlap)?
- - optimization: turn some the various stack vectors into statically-sized arrays
- - optimization: better clipping for multi-component widgets
*/
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
@@ -638,8 +600,9 @@
// Clang warnings with -Weverything
#ifdef __clang__
+#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning : unknown warning group '-Wformat-pedantic *' // not all warnings are known by all clang versions.. so ignoring warnings triggers new warnings on some configuration. great!
#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse.
-#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants ok.
+#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok.
#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning : format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference it.
@@ -648,6 +611,7 @@
#pragma clang diagnostic ignored "-Wdeprecated-declarations"// warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code)
#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int'
#pragma clang diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used
+#pragma clang diagnostic ignored "-Wformat-pedantic" // warning : format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic.
#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' //
#elif defined(__GNUC__)
#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used
@@ -656,15 +620,13 @@
#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function
#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value
#pragma GCC diagnostic ignored "-Wcast-qual" // warning: cast from type 'xxxx' to type 'xxxx' casts away qualifiers
+#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
#endif
//-------------------------------------------------------------------------
// Forward Declarations
//-------------------------------------------------------------------------
-static void LogRenderedText(const ImVec2& ref_pos, const char* text, const char* text_end = NULL);
-
-static void PushMultiItemsWidths(int components, float w_full = 0.0f);
static float GetDraggedColumnOffset(int column_index);
static bool IsKeyPressedMap(ImGuiKey key, bool repeat = true);
@@ -673,34 +635,31 @@ static ImFont* GetDefaultFont();
static void SetCurrentFont(ImFont* font);
static void SetCurrentWindow(ImGuiWindow* window);
static void SetWindowScrollY(ImGuiWindow* window, float new_scroll_y);
-static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiSetCond cond);
-static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiSetCond cond);
-static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiSetCond cond);
-static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs);
+static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond);
+static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond);
+static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond);
+static ImGuiWindow* FindHoveredWindow(ImVec2 pos);
static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags);
-static inline bool IsWindowContentHoverable(ImGuiWindow* window);
static void ClearSetNextWindowData();
static void CheckStacksSize(ImGuiWindow* window, bool write);
-static void Scrollbar(ImGuiWindow* window, bool horizontal);
+static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window);
static void AddDrawListToRenderList(ImVector<ImDrawList*>& out_render_list, ImDrawList* draw_list);
static void AddWindowToRenderList(ImVector<ImDrawList*>& out_render_list, ImGuiWindow* window);
static void AddWindowToSortedBuffer(ImVector<ImGuiWindow*>& out_sorted_windows, ImGuiWindow* window);
-static ImGuiIniData* FindWindowSettings(const char* name);
-static ImGuiIniData* AddWindowSettings(const char* name);
+static ImGuiWindowSettings* AddWindowSettings(const char* name);
+
static void LoadIniSettingsFromDisk(const char* ini_filename);
+static void LoadIniSettingsFromMemory(const char* buf);
static void SaveIniSettingsToDisk(const char* ini_filename);
-static void MarkIniSettingsDirty();
+static void SaveIniSettingsToMemory(ImVector<char>& out_buf);
+static void MarkIniSettingsDirty(ImGuiWindow* window);
-static void PushColumnClipRect(int column_index = -1);
static ImRect GetVisibleRect();
-static bool BeginPopupEx(const char* str_id, ImGuiWindowFlags extra_flags);
-static void CloseInactivePopups();
+static void CloseInactivePopups(ImGuiWindow* ref_window);
static void ClosePopupToLevel(int remaining);
-static void ClosePopup(ImGuiID id);
-static bool IsPopupOpen(ImGuiID id);
static ImGuiWindow* GetFrontMostModalRootWindow();
static ImVec2 FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size, int* last_dir, const ImRect& rect_to_avoid);
@@ -713,6 +672,11 @@ static inline void DataTypeFormatString(ImGuiDataType data_type, void* data
static void DataTypeApplyOp(ImGuiDataType data_type, int op, void* value1, const void* value2);
static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* data_ptr, const char* scalar_format);
+namespace ImGui
+{
+static void FocusPreviousWindow();
+}
+
//-----------------------------------------------------------------------------
// Platform dependent default implementations
//-----------------------------------------------------------------------------
@@ -725,12 +689,13 @@ static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y);
// Context
//-----------------------------------------------------------------------------
-// Default font atlas storage .
+// Default font atlas storage.
// New contexts always point by default to this font atlas. It can be changed by reassigning the GetIO().Fonts variable.
static ImFontAtlas GImDefaultFontAtlas;
// Default context storage + current context pointer.
// Implicitely used by all ImGui functions. Always assumed to be != NULL. Change to a different context by calling ImGui::SetCurrentContext()
+// If you are hot-reloading this code in a DLL you will lose the static/global variables. Create your own context+font atlas instead of relying on those default (see FAQ entry "How can I preserve my ImGui context across reloading a DLL?").
// ImGui is currently not thread-safe because of this variable. If you want thread-safety to allow N threads to access N different contexts, you might work around it by:
// - Having multiple instances of the ImGui code compiled inside different namespace (easiest/safest, if you have a finite number of contexts)
// - or: Changing this variable to be TLS. You may #define GImGui in imconfig.h for further custom hackery. Future development aim to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586
@@ -747,12 +712,17 @@ ImGuiStyle::ImGuiStyle()
{
Alpha = 1.0f; // Global alpha applies to everything in ImGui
WindowPadding = ImVec2(8,8); // Padding within a window
- WindowMinSize = ImVec2(32,32); // Minimum window size
WindowRounding = 9.0f; // Radius of window corners rounding. Set to 0.0f to have rectangular windows
+ WindowBorderSize = 0.0f; // Thickness of border around windows. Generally set to 0.0f or 1.0f. Other values not well tested.
+ WindowMinSize = ImVec2(32,32); // Minimum window size
WindowTitleAlign = ImVec2(0.0f,0.5f);// Alignment for title bar text
- ChildWindowRounding = 0.0f; // Radius of child window corners rounding. Set to 0.0f to have rectangular child windows
+ ChildRounding = 0.0f; // Radius of child window corners rounding. Set to 0.0f to have rectangular child windows
+ ChildBorderSize = 1.0f; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. Other values not well tested.
+ PopupRounding = 0.0f; // Radius of popup window corners rounding. Set to 0.0f to have rectangular child windows
+ PopupBorderSize = 1.0f; // Thickness of border around popup or tooltip windows. Generally set to 0.0f or 1.0f. Other values not well tested.
FramePadding = ImVec2(4,3); // Padding within a framed rectangle (used by most widgets)
FrameRounding = 0.0f; // Radius of frame corners rounding. Set to 0.0f to have rectangular frames (used by most widgets).
+ FrameBorderSize = 0.0f; // Thickness of border around frames. Generally set to 0.0f or 1.0f. Other values not well tested.
ItemSpacing = ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines
ItemInnerSpacing = ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label)
TouchExtraPadding = ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
@@ -769,49 +739,31 @@ ImGuiStyle::ImGuiStyle()
AntiAliasedShapes = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.)
CurveTessellationTol = 1.25f; // Tessellation tolerance. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
- Colors[ImGuiCol_Text] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);
- Colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
- Colors[ImGuiCol_WindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.70f);
- Colors[ImGuiCol_ChildWindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
- Colors[ImGuiCol_PopupBg] = ImVec4(0.05f, 0.05f, 0.10f, 0.90f);
- Colors[ImGuiCol_Border] = ImVec4(0.70f, 0.70f, 0.70f, 0.65f);
- Colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
- Colors[ImGuiCol_FrameBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.30f); // Background of checkbox, radio button, plot, slider, text input
- Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.90f, 0.80f, 0.80f, 0.40f);
- Colors[ImGuiCol_FrameBgActive] = ImVec4(0.90f, 0.65f, 0.65f, 0.45f);
- Colors[ImGuiCol_TitleBg] = ImVec4(0.27f, 0.27f, 0.54f, 0.83f);
- Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.40f, 0.40f, 0.80f, 0.20f);
- Colors[ImGuiCol_TitleBgActive] = ImVec4(0.32f, 0.32f, 0.63f, 0.87f);
- Colors[ImGuiCol_MenuBarBg] = ImVec4(0.40f, 0.40f, 0.55f, 0.80f);
- Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.20f, 0.25f, 0.30f, 0.60f);
- Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.40f, 0.40f, 0.80f, 0.30f);
- Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.80f, 0.40f);
- Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.80f, 0.50f, 0.50f, 0.40f);
- Colors[ImGuiCol_ComboBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.99f);
- Colors[ImGuiCol_CheckMark] = ImVec4(0.90f, 0.90f, 0.90f, 0.50f);
- Colors[ImGuiCol_SliderGrab] = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
- Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.80f, 0.50f, 0.50f, 1.00f);
- Colors[ImGuiCol_Button] = ImVec4(0.67f, 0.40f, 0.40f, 0.60f);
- Colors[ImGuiCol_ButtonHovered] = ImVec4(0.67f, 0.40f, 0.40f, 1.00f);
- Colors[ImGuiCol_ButtonActive] = ImVec4(0.80f, 0.50f, 0.50f, 1.00f);
- Colors[ImGuiCol_Header] = ImVec4(0.40f, 0.40f, 0.90f, 0.45f);
- Colors[ImGuiCol_HeaderHovered] = ImVec4(0.45f, 0.45f, 0.90f, 0.80f);
- Colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.53f, 0.87f, 0.80f);
- Colors[ImGuiCol_Column] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
- Colors[ImGuiCol_ColumnHovered] = ImVec4(0.70f, 0.60f, 0.60f, 1.00f);
- Colors[ImGuiCol_ColumnActive] = ImVec4(0.90f, 0.70f, 0.70f, 1.00f);
- Colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
- Colors[ImGuiCol_ResizeGripHovered] = ImVec4(1.00f, 1.00f, 1.00f, 0.60f);
- Colors[ImGuiCol_ResizeGripActive] = ImVec4(1.00f, 1.00f, 1.00f, 0.90f);
- Colors[ImGuiCol_CloseButton] = ImVec4(0.50f, 0.50f, 0.90f, 0.50f);
- Colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.70f, 0.70f, 0.90f, 0.60f);
- Colors[ImGuiCol_CloseButtonActive] = ImVec4(0.70f, 0.70f, 0.70f, 1.00f);
- Colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
- Colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
- Colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
- Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
- Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
- Colors[ImGuiCol_ModalWindowDarkening] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
+ ImGui::StyleColorsClassic(this);
+}
+
+// To scale your entire UI (e.g. if you want your app to use High DPI or generally be DPI aware) you may use this helper function. Scaling the fonts is done separately and is up to you.
+// Important: This operation is lossy because we round all sizes to integer. If you need to change your scale multiples, call this over a freshly initialized ImGuiStyle structure rather than scaling multiple times.
+void ImGuiStyle::ScaleAllSizes(float scale_factor)
+{
+ WindowPadding = ImFloor(WindowPadding * scale_factor);
+ WindowRounding = ImFloor(WindowRounding * scale_factor);
+ WindowMinSize = ImFloor(WindowMinSize * scale_factor);
+ ChildRounding = ImFloor(ChildRounding * scale_factor);
+ PopupRounding = ImFloor(PopupRounding * scale_factor);
+ FramePadding = ImFloor(FramePadding * scale_factor);
+ FrameRounding = ImFloor(FrameRounding * scale_factor);
+ ItemSpacing = ImFloor(ItemSpacing * scale_factor);
+ ItemInnerSpacing = ImFloor(ItemInnerSpacing * scale_factor);
+ TouchExtraPadding = ImFloor(TouchExtraPadding * scale_factor);
+ IndentSpacing = ImFloor(IndentSpacing * scale_factor);
+ ColumnsMinSpacing = ImFloor(ColumnsMinSpacing * scale_factor);
+ ScrollbarSize = ImFloor(ScrollbarSize * scale_factor);
+ ScrollbarRounding = ImFloor(ScrollbarRounding * scale_factor);
+ GrabMinSize = ImFloor(GrabMinSize * scale_factor);
+ GrabRounding = ImFloor(GrabRounding * scale_factor);
+ DisplayWindowPadding = ImFloor(DisplayWindowPadding * scale_factor);
+ DisplaySafeAreaPadding = ImFloor(DisplaySafeAreaPadding * scale_factor);
}
ImGuiIO::ImGuiIO()
@@ -819,31 +771,36 @@ ImGuiIO::ImGuiIO()
// Most fields are initialized with zero
memset(this, 0, sizeof(*this));
+ // Settings
DisplaySize = ImVec2(-1.0f, -1.0f);
DeltaTime = 1.0f/60.0f;
IniSavingRate = 5.0f;
IniFilename = "imgui.ini";
LogFilename = "imgui_log.txt";
- Fonts = &GImDefaultFontAtlas;
- FontGlobalScale = 1.0f;
- FontDefault = NULL;
- DisplayFramebufferScale = ImVec2(1.0f, 1.0f);
- MousePos = ImVec2(-1,-1);
- MousePosPrev = ImVec2(-1,-1);
MouseDoubleClickTime = 0.30f;
MouseDoubleClickMaxDist = 6.0f;
- MouseDragThreshold = 6.0f;
- for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++)
- MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f;
- for (int i = 0; i < IM_ARRAYSIZE(KeysDownDuration); i++)
- KeysDownDuration[i] = KeysDownDurationPrev[i] = -1.0f;
for (int i = 0; i < ImGuiKey_COUNT; i++)
KeyMap[i] = -1;
KeyRepeatDelay = 0.250f;
KeyRepeatRate = 0.050f;
UserData = NULL;
- // User functions
+ Fonts = &GImDefaultFontAtlas;
+ FontGlobalScale = 1.0f;
+ FontDefault = NULL;
+ FontAllowUserScaling = false;
+ DisplayFramebufferScale = ImVec2(1.0f, 1.0f);
+ DisplayVisibleMin = DisplayVisibleMax = ImVec2(0.0f, 0.0f);
+
+ // Advanced/subtle behaviors
+#ifdef __APPLE__
+ OptMacOSXBehaviors = true; // Set Mac OS X style defaults based on __APPLE__ compile time flag
+#else
+ OptMacOSXBehaviors = false;
+#endif
+ OptCursorBlink = true;
+
+ // Settings (User Functions)
RenderDrawListsFn = NULL;
MemAllocFn = malloc;
MemFreeFn = free;
@@ -851,11 +808,14 @@ ImGuiIO::ImGuiIO()
SetClipboardTextFn = SetClipboardTextFn_DefaultImpl;
ClipboardUserData = NULL;
ImeSetInputScreenPosFn = ImeSetInputScreenPosFn_DefaultImpl;
+ ImeWindowHandle = NULL;
- // Set OS X style defaults based on __APPLE__ compile time flag
-#ifdef __APPLE__
- OSXBehaviors = true;
-#endif
+ // Input (NB: we already have memset zero the entire structure)
+ MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
+ MousePosPrev = ImVec2(-FLT_MAX, -FLT_MAX);
+ MouseDragThreshold = 6.0f;
+ for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f;
+ for (int i = 0; i < IM_ARRAYSIZE(KeysDownDuration); i++) KeysDownDuration[i] = KeysDownDurationPrev[i] = -1.0f;
}
// Pass in translated ASCII characters for text input.
@@ -895,7 +855,21 @@ void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars)
#define IM_NEWLINE "\n"
#endif
-bool ImIsPointInTriangle(const ImVec2& p, const ImVec2& a, const ImVec2& b, const ImVec2& c)
+ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p)
+{
+ ImVec2 ap = p - a;
+ ImVec2 ab_dir = b - a;
+ float ab_len = sqrtf(ab_dir.x * ab_dir.x + ab_dir.y * ab_dir.y);
+ ab_dir *= 1.0f / ab_len;
+ float dot = ap.x * ab_dir.x + ap.y * ab_dir.y;
+ if (dot < 0.0f)
+ return a;
+ if (dot > ab_len)
+ return b;
+ return a + ab_dir * dot;
+}
+
+bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p)
{
bool b1 = ((p.x - b.x) * (a.y - b.y) - (p.y - b.y) * (a.x - b.x)) < 0.0f;
bool b2 = ((p.x - c.x) * (b.y - c.y) - (p.y - c.y) * (b.x - c.x)) < 0.0f;
@@ -903,6 +877,33 @@ bool ImIsPointInTriangle(const ImVec2& p, const ImVec2& a, const ImVec2& b, cons
return ((b1 == b2) && (b2 == b3));
}
+void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w)
+{
+ ImVec2 v0 = b - a;
+ ImVec2 v1 = c - a;
+ ImVec2 v2 = p - a;
+ const float denom = v0.x * v1.y - v1.x * v0.y;
+ out_v = (v2.x * v1.y - v1.x * v2.y) / denom;
+ out_w = (v0.x * v2.y - v2.x * v0.y) / denom;
+ out_u = 1.0f - out_v - out_w;
+}
+
+ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p)
+{
+ ImVec2 proj_ab = ImLineClosestPoint(a, b, p);
+ ImVec2 proj_bc = ImLineClosestPoint(b, c, p);
+ ImVec2 proj_ca = ImLineClosestPoint(c, a, p);
+ float dist2_ab = ImLengthSqr(p - proj_ab);
+ float dist2_bc = ImLengthSqr(p - proj_bc);
+ float dist2_ca = ImLengthSqr(p - proj_ca);
+ float m = ImMin(dist2_ab, ImMin(dist2_bc, dist2_ca));
+ if (m == dist2_ab)
+ return proj_ab;
+ if (m == dist2_bc)
+ return proj_bc;
+ return proj_ca;
+}
+
int ImStricmp(const char* str1, const char* str2)
{
int d;
@@ -927,8 +928,16 @@ void ImStrncpy(char* dst, const char* src, int count)
char* ImStrdup(const char *str)
{
size_t len = strlen(str) + 1;
- void* buff = ImGui::MemAlloc(len);
- return (char*)memcpy(buff, (const void*)str, len);
+ void* buf = ImGui::MemAlloc(len);
+ return (char*)memcpy(buf, (const void*)str, len);
+}
+
+char* ImStrchrRange(const char* str, const char* str_end, char c)
+{
+ for ( ; str < str_end; str++)
+ if (*str == c)
+ return (char*)str;
+ return NULL;
}
int ImStrlenW(const ImWchar* str)
@@ -967,16 +976,30 @@ const char* ImStristr(const char* haystack, const char* haystack_end, const char
return NULL;
}
+static const char* ImAtoi(const char* src, int* output)
+{
+ int negative = 0;
+ if (*src == '-') { negative = 1; src++; }
+ if (*src == '+') { src++; }
+ int v = 0;
+ while (*src >= '0' && *src <= '9')
+ v = (v * 10) + (*src++ - '0');
+ *output = negative ? -v : v;
+ return src;
+}
-// MSVC version appears to return -1 on overflow, whereas glibc appears to return total count (which may be >= buf_size).
+// A) MSVC version appears to return -1 on overflow, whereas glibc appears to return total count (which may be >= buf_size).
// Ideally we would test for only one of those limits at runtime depending on the behavior the vsnprintf(), but trying to deduct it at compile time sounds like a pandora can of worm.
+// B) When buf==NULL vsnprintf() will return the output size.
+#ifndef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS
int ImFormatString(char* buf, int buf_size, const char* fmt, ...)
{
- IM_ASSERT(buf_size > 0);
va_list args;
va_start(args, fmt);
int w = vsnprintf(buf, buf_size, fmt, args);
va_end(args);
+ if (buf == NULL)
+ return w;
if (w == -1 || w >= buf_size)
w = buf_size - 1;
buf[w] = 0;
@@ -985,13 +1008,15 @@ int ImFormatString(char* buf, int buf_size, const char* fmt, ...)
int ImFormatStringV(char* buf, int buf_size, const char* fmt, va_list args)
{
- IM_ASSERT(buf_size > 0);
int w = vsnprintf(buf, buf_size, fmt, args);
+ if (buf == NULL)
+ return w;
if (w == -1 || w >= buf_size)
w = buf_size - 1;
buf[w] = 0;
return w;
}
+#endif // #ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS
// Pass data_size==0 for zero-terminated strings
// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
@@ -1235,18 +1260,36 @@ ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
{
- ImVec4 c = GImGui->Style.Colors[idx];
- c.w *= GImGui->Style.Alpha * alpha_mul;
+ ImGuiStyle& style = GImGui->Style;
+ ImVec4 c = style.Colors[idx];
+ c.w *= style.Alpha * alpha_mul;
return ColorConvertFloat4ToU32(c);
}
ImU32 ImGui::GetColorU32(const ImVec4& col)
{
+ ImGuiStyle& style = GImGui->Style;
ImVec4 c = col;
- c.w *= GImGui->Style.Alpha;
+ c.w *= style.Alpha;
return ColorConvertFloat4ToU32(c);
}
+const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
+{
+ ImGuiStyle& style = GImGui->Style;
+ return style.Colors[idx];
+}
+
+ImU32 ImGui::GetColorU32(ImU32 col)
+{
+ float style_alpha = GImGui->Style.Alpha;
+ if (style_alpha >= 1.0f)
+ return col;
+ int a = (col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT;
+ a = (int)(a * style_alpha); // We don't need to clamp 0..255 because Style.Alpha is in 0..1 range.
+ return (col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT);
+}
+
// Convert rgb floats ([0-1],[0-1],[0-1]) to hsv floats ([0-1],[0-1],[0-1]), from Foley & van Dam p592
// Optimized http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv
void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v)
@@ -1254,12 +1297,12 @@ void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float&
float K = 0.f;
if (g < b)
{
- const float tmp = g; g = b; b = tmp;
+ ImSwap(g, b);
K = -1.f;
}
if (r < g)
{
- const float tmp = r; r = g; g = tmp;
+ ImSwap(r, g);
K = -2.f / 6.f - K;
}
@@ -1358,23 +1401,18 @@ void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, int*
//-----------------------------------------------------------------------------
// ImGuiStorage
-//-----------------------------------------------------------------------------
-
// Helper: Key->value storage
-void ImGuiStorage::Clear()
-{
- Data.clear();
-}
+//-----------------------------------------------------------------------------
// std::lower_bound but without the bullshit
static ImVector<ImGuiStorage::Pair>::iterator LowerBound(ImVector<ImGuiStorage::Pair>& data, ImGuiID key)
{
ImVector<ImGuiStorage::Pair>::iterator first = data.begin();
ImVector<ImGuiStorage::Pair>::iterator last = data.end();
- int count = (int)(last - first);
+ size_t count = (size_t)(last - first);
while (count > 0)
{
- int count2 = count / 2;
+ size_t count2 = count >> 1;
ImVector<ImGuiStorage::Pair>::iterator mid = first + count2;
if (mid->key < key)
{
@@ -1389,6 +1427,23 @@ static ImVector<ImGuiStorage::Pair>::iterator LowerBound(ImVector<ImGuiStorage::
return first;
}
+// For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
+void ImGuiStorage::BuildSortByKey()
+{
+ struct StaticFunc
+ {
+ static int PairCompareByID(const void* lhs, const void* rhs)
+ {
+ // We can't just do a subtraction because qsort uses signed integers and subtracting our ID doesn't play well with that.
+ if (((const Pair*)lhs)->key > ((const Pair*)rhs)->key) return +1;
+ if (((const Pair*)lhs)->key < ((const Pair*)rhs)->key) return -1;
+ return 0;
+ }
+ };
+ if (Data.Size > 1)
+ qsort(Data.Data, (size_t)Data.Size, sizeof(Pair), StaticFunc::PairCompareByID);
+}
+
int ImGuiStorage::GetInt(ImGuiID key, int default_val) const
{
ImVector<Pair>::iterator it = LowerBound(const_cast<ImVector<ImGuiStorage::Pair>&>(Data), key);
@@ -1604,12 +1659,12 @@ bool ImGuiTextFilter::PassFilter(const char* text, const char* text_end) const
#endif
// Helper: Text buffer for logging/accumulating text
-void ImGuiTextBuffer::appendv(const char* fmt, va_list args)
+void ImGuiTextBuffer::appendfv(const char* fmt, va_list args)
{
va_list args_copy;
va_copy(args_copy, args);
- int len = vsnprintf(NULL, 0, fmt, args); // FIXME-OPT: could do a first pass write attempt, likely successful on first pass.
+ int len = ImFormatStringV(NULL, 0, fmt, args); // FIXME-OPT: could do a first pass write attempt, likely successful on first pass.
if (len <= 0)
return;
@@ -1622,19 +1677,19 @@ void ImGuiTextBuffer::appendv(const char* fmt, va_list args)
}
Buf.resize(needed_sz);
- ImFormatStringV(&Buf[write_off] - 1, len+1, fmt, args_copy);
+ ImFormatStringV(&Buf[write_off - 1], len + 1, fmt, args_copy);
}
-void ImGuiTextBuffer::append(const char* fmt, ...)
+void ImGuiTextBuffer::appendf(const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
- appendv(fmt, args);
+ appendfv(fmt, args);
va_end(args);
}
//-----------------------------------------------------------------------------
-// ImGuiSimpleColumns
+// ImGuiSimpleColumns (internal use only)
//-----------------------------------------------------------------------------
ImGuiSimpleColumns::ImGuiSimpleColumns()
@@ -1770,32 +1825,35 @@ ImGuiWindow::ImGuiWindow(const char* name)
Name = ImStrdup(name);
ID = ImHash(name, 0);
IDStack.push_back(ID);
- MoveId = GetID("#MOVE");
-
Flags = 0;
- IndexWithinParent = 0;
+ OrderWithinParent = 0;
PosFloat = Pos = ImVec2(0.0f, 0.0f);
Size = SizeFull = ImVec2(0.0f, 0.0f);
SizeContents = SizeContentsExplicit = ImVec2(0.0f, 0.0f);
WindowPadding = ImVec2(0.0f, 0.0f);
+ WindowRounding = 0.0f;
+ WindowBorderSize = 0.0f;
+ MoveId = GetID("#MOVE");
Scroll = ImVec2(0.0f, 0.0f);
ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
ScrollTargetCenterRatio = ImVec2(0.5f, 0.5f);
ScrollbarX = ScrollbarY = false;
ScrollbarSizes = ImVec2(0.0f, 0.0f);
- BorderSize = 0.0f;
Active = WasActive = false;
- Accessed = false;
+ WriteAccessed = false;
Collapsed = false;
SkipItems = false;
+ Appearing = false;
+ CloseButton = false;
BeginCount = 0;
PopupId = 0;
AutoFitFramesX = AutoFitFramesY = -1;
AutoFitOnlyGrows = false;
+ AutoFitChildAxises = 0x00;
AutoPosLastDirection = -1;
HiddenFrames = 0;
- SetWindowPosAllowFlags = SetWindowSizeAllowFlags = SetWindowCollapsedAllowFlags = ImGuiSetCond_Always | ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing;
- SetWindowPosCenterWanted = false;
+ SetWindowPosAllowFlags = SetWindowSizeAllowFlags = SetWindowCollapsedAllowFlags = ImGuiCond_Always | ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing;
+ SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX);
LastFrameActive = -1;
ItemWidthDefault = 0.0f;
@@ -1804,9 +1862,9 @@ ImGuiWindow::ImGuiWindow(const char* name)
DrawList = (ImDrawList*)ImGui::MemAlloc(sizeof(ImDrawList));
IM_PLACEMENT_NEW(DrawList) ImDrawList();
DrawList->_OwnerName = Name;
+ ParentWindow = NULL;
RootWindow = NULL;
RootNonPopupWindow = NULL;
- ParentWindow = NULL;
FocusIdxAllCounter = FocusIdxTabCounter = -1;
FocusIdxAllRequestCurrent = FocusIdxTabRequestCurrent = INT_MAX;
@@ -1866,11 +1924,12 @@ ImGuiWindow* ImGui::GetParentWindow()
void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
{
ImGuiContext& g = *GImGui;
+ g.ActiveIdIsJustActivated = (g.ActiveId != id);
+ if (g.ActiveIdIsJustActivated)
+ g.ActiveIdTimer = 0.0f;
g.ActiveId = id;
g.ActiveIdAllowOverlap = false;
- g.ActiveIdIsJustActivated = true;
- if (id)
- g.ActiveIdIsAlive = true;
+ g.ActiveIdIsAlive |= (id != 0);
g.ActiveIdWindow = window;
}
@@ -1884,6 +1943,7 @@ void ImGui::SetHoveredID(ImGuiID id)
ImGuiContext& g = *GImGui;
g.HoveredId = id;
g.HoveredIdAllowOverlap = false;
+ g.HoveredIdTimer = (id != 0 && g.HoveredIdPreviousFrame == id) ? (g.HoveredIdTimer + g.IO.DeltaTime) : 0.0f;
}
void ImGui::KeepAliveID(ImGuiID id)
@@ -1893,27 +1953,51 @@ void ImGui::KeepAliveID(ImGuiID id)
g.ActiveIdIsAlive = true;
}
+static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags)
+{
+ // An active popup disable hovering on other windows (apart from its own children)
+ // FIXME-OPT: This could be cached/stored within the window.
+ ImGuiContext& g = *GImGui;
+ if (g.NavWindow)
+ if (ImGuiWindow* focused_root_window = g.NavWindow->RootWindow)
+ if (focused_root_window->WasActive && focused_root_window != window->RootWindow)
+ {
+ // For the purpose of those flags we differentiate "standard popup" from "modal popup"
+ // NB: The order of those two tests is important because Modal windows are also Popups.
+ if (focused_root_window->Flags & ImGuiWindowFlags_Modal)
+ return false;
+ if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+ return false;
+ }
+
+ return true;
+}
+
// Advance cursor given item size for layout.
void ImGui::ItemSize(const ImVec2& size, float text_offset_y)
{
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
if (window->SkipItems)
return;
// Always align ourselves on pixel boundaries
- ImGuiContext& g = *GImGui;
const float line_height = ImMax(window->DC.CurrentLineHeight, size.y);
const float text_base_offset = ImMax(window->DC.CurrentLineTextBaseOffset, text_offset_y);
+ //if (g.IO.KeyAlt) window->DrawList->AddRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(size.x, line_height), IM_COL32(255,0,0,200)); // [DEBUG]
window->DC.CursorPosPrevLine = ImVec2(window->DC.CursorPos.x + size.x, window->DC.CursorPos.y);
window->DC.CursorPos = ImVec2((float)(int)(window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX), (float)(int)(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y));
window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPosPrevLine.x);
- window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y);
-
- //window->DrawList->AddCircle(window->DC.CursorMaxPos, 3.0f, IM_COL32(255,0,0,255), 4); // Debug
+ window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y - g.Style.ItemSpacing.y);
+ //if (g.IO.KeyAlt) window->DrawList->AddCircle(window->DC.CursorMaxPos, 3.0f, IM_COL32(255,0,0,255), 4); // [DEBUG]
window->DC.PrevLineHeight = line_height;
window->DC.PrevLineTextBaseOffset = text_base_offset;
window->DC.CurrentLineHeight = window->DC.CurrentLineTextBaseOffset = 0.0f;
+
+ // Horizontal layout mode
+ if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
+ SameLine();
}
void ImGui::ItemSize(const ImRect& bb, float text_offset_y)
@@ -1924,74 +2008,101 @@ void ImGui::ItemSize(const ImRect& bb, float text_offset_y)
// Declare item bounding box for clipping and interaction.
// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface
// declares their minimum size requirement to ItemSize() and then use a larger region for drawing/interaction, which is passed to ItemAdd().
-bool ImGui::ItemAdd(const ImRect& bb, const ImGuiID* id)
+bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id)
{
- ImGuiWindow* window = GetCurrentWindow();
- window->DC.LastItemId = id ? *id : 0;
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ const bool is_clipped = IsClippedEx(bb, id, false);
+ window->DC.LastItemId = id;
window->DC.LastItemRect = bb;
- window->DC.LastItemHoveredAndUsable = window->DC.LastItemHoveredRect = false;
- if (IsClippedEx(bb, id, false))
+ window->DC.LastItemRectHoveredRect = false;
+ if (is_clipped)
return false;
+ //if (g.IO.KeyAlt) window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255,255,0,120)); // [DEBUG]
+
+ // We need to calculate this now to take account of the current clipping rectangle (as items like Selectable may change them)
+ window->DC.LastItemRectHoveredRect = IsMouseHoveringRect(bb.Min, bb.Max);
+ return true;
+}
- // This is a sensible default, but widgets are free to override it after calling ItemAdd()
+// This is roughly matching the behavior of internal-facing ItemHoverable()
+// - we allow hovering to be true when ActiveId==window->MoveID, so that clicking on non-interactive items such as a Text() item still returns true with IsItemHovered()
+// - this should work even for non-interactive items that have no ID, so we cannot use LastItemId
+bool ImGui::IsItemHovered(ImGuiHoveredFlags flags)
+{
ImGuiContext& g = *GImGui;
- if (IsMouseHoveringRect(bb.Min, bb.Max))
- {
- // Matching the behavior of IsHovered() but allow if ActiveId==window->MoveID (we clicked on the window background)
- // So that clicking on items with no active id such as Text() still returns true with IsItemHovered()
- window->DC.LastItemHoveredRect = true;
- if (g.HoveredRootWindow == window->RootWindow)
- if (g.ActiveId == 0 || (id && g.ActiveId == *id) || g.ActiveIdAllowOverlap || (g.ActiveId == window->MoveId))
- if (IsWindowContentHoverable(window))
- window->DC.LastItemHoveredAndUsable = true;
- }
+ ImGuiWindow* window = g.CurrentWindow;
+ if (!window->DC.LastItemRectHoveredRect)
+ return false;
+ IM_ASSERT((flags & ImGuiHoveredFlags_FlattenChilds) == 0); // Flags not supported by this function
+
+ // [2017/10/16] Reverted commit 344d48be3 and testing RootWindow instead. I believe it is correct to NOT test for RootWindow but this leaves us unable to use IsItemHovered() after EndChild() itself.
+ // Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was the test that has been running for a long while.
+ //if (g.HoveredWindow != window)
+ // return false;
+ if (g.HoveredRootWindow != window->RootWindow && !(flags & ImGuiHoveredFlags_AllowWhenOverlapped))
+ return false;
+ if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
+ if (g.ActiveId != 0 && g.ActiveId != window->DC.LastItemId && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId)
+ return false;
+ if (!IsWindowContentHoverable(window, flags))
+ return false;
+ if (window->DC.ItemFlags & ImGuiItemFlags_Disabled)
+ return false;
+ // Special handling for the 1st item after Begin() which represent the title bar. When the window is collapsed (SkipItems==true) that last item will never be overwritten.
+ if (window->DC.LastItemId == window->MoveId && window->WriteAccessed)
+ return false;
return true;
}
-bool ImGui::IsClippedEx(const ImRect& bb, const ImGuiID* id, bool clip_even_when_logged)
+// Internal facing ItemHoverable() used when submitting widgets. Differs slightly from IsItemHovered().
+bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindowRead();
+ if (g.HoveredId != 0 && g.HoveredId != id && !g.HoveredIdAllowOverlap)
+ return false;
- if (!bb.Overlaps(window->ClipRect))
- if (!id || *id != GImGui->ActiveId)
- if (clip_even_when_logged || !g.LogEnabled)
- return true;
- return false;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.HoveredWindow != window)
+ return false;
+ if (g.ActiveId != 0 && g.ActiveId != id && !g.ActiveIdAllowOverlap)
+ return false;
+ if (!IsMouseHoveringRect(bb.Min, bb.Max))
+ return false;
+ if (!IsWindowContentHoverable(window, ImGuiHoveredFlags_Default))
+ return false;
+ if (window->DC.ItemFlags & ImGuiItemFlags_Disabled)
+ return false;
+
+ SetHoveredID(id);
+ return true;
}
-// NB: This is an internal helper. The user-facing IsItemHovered() is using data emitted from ItemAdd(), with a slightly different logic.
-bool ImGui::IsHovered(const ImRect& bb, ImGuiID id, bool flatten_childs)
+bool ImGui::IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged)
{
ImGuiContext& g = *GImGui;
- if (g.HoveredId == 0 || g.HoveredId == id || g.HoveredIdAllowOverlap)
- {
- ImGuiWindow* window = GetCurrentWindowRead();
- if (g.HoveredWindow == window || (flatten_childs && g.HoveredRootWindow == window->RootWindow))
- if ((g.ActiveId == 0 || g.ActiveId == id || g.ActiveIdAllowOverlap) && IsMouseHoveringRect(bb.Min, bb.Max))
- if (IsWindowContentHoverable(g.HoveredRootWindow))
- return true;
- }
+ ImGuiWindow* window = g.CurrentWindow;
+ if (!bb.Overlaps(window->ClipRect))
+ if (id == 0 || id != g.ActiveId)
+ if (clip_even_when_logged || !g.LogEnabled)
+ return true;
return false;
}
-bool ImGui::FocusableItemRegister(ImGuiWindow* window, bool is_active, bool tab_stop)
+bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id, bool tab_stop)
{
ImGuiContext& g = *GImGui;
- const bool allow_keyboard_focus = window->DC.AllowKeyboardFocus;
+ const bool allow_keyboard_focus = (window->DC.ItemFlags & (ImGuiItemFlags_AllowKeyboardFocus | ImGuiItemFlags_Disabled)) == ImGuiItemFlags_AllowKeyboardFocus;
window->FocusIdxAllCounter++;
if (allow_keyboard_focus)
window->FocusIdxTabCounter++;
- // Process keyboard input at this point: TAB, Shift-TAB switch focus
- // We can always TAB out of a widget that doesn't allow tabbing in.
- if (tab_stop && window->FocusIdxAllRequestNext == INT_MAX && window->FocusIdxTabRequestNext == INT_MAX && is_active && IsKeyPressedMap(ImGuiKey_Tab))
- {
- // Modulo on index will be applied at the end of frame once we've got the total counter of items.
- window->FocusIdxTabRequestNext = window->FocusIdxTabCounter + (g.IO.KeyShift ? (allow_keyboard_focus ? -1 : 0) : +1);
- }
+ // Process keyboard input at this point: TAB/Shift-TAB to tab out of the currently focused item.
+ // Note that we can always TAB out of a widget that doesn't allow tabbing in.
+ if (tab_stop && (g.ActiveId == id) && window->FocusIdxAllRequestNext == INT_MAX && window->FocusIdxTabRequestNext == INT_MAX && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab))
+ window->FocusIdxTabRequestNext = window->FocusIdxTabCounter + (g.IO.KeyShift ? (allow_keyboard_focus ? -1 : 0) : +1); // Modulo on index will be applied at the end of frame once we've got the total counter of items.
if (window->FocusIdxAllCounter == window->FocusIdxAllRequestCurrent)
return true;
@@ -2132,29 +2243,25 @@ void ImGui::NewFrame()
ImGuiContext& g = *GImGui;
// Check user data
- IM_ASSERT(g.IO.DeltaTime >= 0.0f); // Need a positive DeltaTime (zero is tolerated but will cause some timing issues)
- IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f);
- IM_ASSERT(g.IO.Fonts->Fonts.Size > 0); // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ?
- IM_ASSERT(g.IO.Fonts->Fonts[0]->IsLoaded()); // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ?
- IM_ASSERT(g.Style.CurveTessellationTol > 0.0f); // Invalid style setting
-
+ // (We pass an error message in the assert expression as a trick to get it visible to programmers who are not using a debugger, as most assert handlers display their argument)
+ IM_ASSERT(g.IO.DeltaTime >= 0.0f && "Need a positive DeltaTime (zero is tolerated but will cause some timing issues)");
+ IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f && "Invalid DisplaySize value");
+ IM_ASSERT(g.IO.Fonts->Fonts.Size > 0 && "Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ?");
+ IM_ASSERT(g.IO.Fonts->Fonts[0]->IsLoaded() && "Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ?");
+ IM_ASSERT(g.Style.CurveTessellationTol > 0.0f && "Invalid style setting");
+ IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f && "Invalid style setting. Alpha cannot be negative (allows us to avoid a few clamps in color computations)");
+ IM_ASSERT((g.FrameCount == 0 || g.FrameCountEnded == g.FrameCount) && "Forgot to call Render() or EndFrame() at the end of the previous frame?");
+
+ // Initialize on first frame
if (!g.Initialized)
- {
- // Initialize on first frame
- g.LogClipboard = (ImGuiTextBuffer*)ImGui::MemAlloc(sizeof(ImGuiTextBuffer));
- IM_PLACEMENT_NEW(g.LogClipboard) ImGuiTextBuffer();
-
- IM_ASSERT(g.Settings.empty());
- LoadIniSettingsFromDisk(g.IO.IniFilename);
- g.Initialized = true;
- }
+ ImGui::Initialize();
SetCurrentFont(GetDefaultFont());
IM_ASSERT(g.Font->IsLoaded());
g.Time += g.IO.DeltaTime;
g.FrameCount += 1;
- g.Tooltip[0] = '\0';
+ g.TooltipOverrideCount = 0;
g.OverlayDrawList.Clear();
g.OverlayDrawList.PushTextureID(g.IO.Fonts->TexID);
g.OverlayDrawList.PushClipRectFullScreen();
@@ -2164,13 +2271,33 @@ void ImGui::NewFrame()
g.RenderDrawData.CmdLists = NULL;
g.RenderDrawData.CmdListsCount = g.RenderDrawData.TotalVtxCount = g.RenderDrawData.TotalIdxCount = 0;
- // Update inputs state
- if (g.IO.MousePos.x < 0 && g.IO.MousePos.y < 0)
- g.IO.MousePos = ImVec2(-9999.0f, -9999.0f);
- if ((g.IO.MousePos.x < 0 && g.IO.MousePos.y < 0) || (g.IO.MousePosPrev.x < 0 && g.IO.MousePosPrev.y < 0)) // if mouse just appeared or disappeared (negative coordinate) we cancel out movement in MouseDelta
- g.IO.MouseDelta = ImVec2(0.0f, 0.0f);
- else
+ // Clear reference to active widget if the widget isn't alive anymore
+ if (!g.HoveredIdPreviousFrame)
+ g.HoveredIdTimer = 0.0f;
+ g.HoveredIdPreviousFrame = g.HoveredId;
+ g.HoveredId = 0;
+ g.HoveredIdAllowOverlap = false;
+ if (!g.ActiveIdIsAlive && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0)
+ ClearActiveID();
+ if (g.ActiveId)
+ g.ActiveIdTimer += g.IO.DeltaTime;
+ g.ActiveIdPreviousFrame = g.ActiveId;
+ g.ActiveIdIsAlive = false;
+ g.ActiveIdIsJustActivated = false;
+ if (g.ScalarAsInputTextId && g.ActiveId != g.ScalarAsInputTextId)
+ g.ScalarAsInputTextId = 0;
+
+ // Update keyboard input state
+ memcpy(g.IO.KeysDownDurationPrev, g.IO.KeysDownDuration, sizeof(g.IO.KeysDownDuration));
+ for (int i = 0; i < IM_ARRAYSIZE(g.IO.KeysDown); i++)
+ g.IO.KeysDownDuration[i] = g.IO.KeysDown[i] ? (g.IO.KeysDownDuration[i] < 0.0f ? 0.0f : g.IO.KeysDownDuration[i] + g.IO.DeltaTime) : -1.0f;
+
+ // Update mouse input state
+ // If mouse just appeared or disappeared (usually denoted by -FLT_MAX component, but in reality we test for -256000.0f) we cancel out movement in MouseDelta
+ if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MousePosPrev))
g.IO.MouseDelta = g.IO.MousePos - g.IO.MousePosPrev;
+ else
+ g.IO.MouseDelta = ImVec2(0.0f, 0.0f);
g.IO.MousePosPrev = g.IO.MousePos;
for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++)
{
@@ -2192,16 +2319,17 @@ void ImGui::NewFrame()
g.IO.MouseClickedTime[i] = g.Time;
}
g.IO.MouseClickedPos[i] = g.IO.MousePos;
+ g.IO.MouseDragMaxDistanceAbs[i] = ImVec2(0.0f, 0.0f);
g.IO.MouseDragMaxDistanceSqr[i] = 0.0f;
}
else if (g.IO.MouseDown[i])
{
- g.IO.MouseDragMaxDistanceSqr[i] = ImMax(g.IO.MouseDragMaxDistanceSqr[i], ImLengthSqr(g.IO.MousePos - g.IO.MouseClickedPos[i]));
+ ImVec2 mouse_delta = g.IO.MousePos - g.IO.MouseClickedPos[i];
+ g.IO.MouseDragMaxDistanceAbs[i].x = ImMax(g.IO.MouseDragMaxDistanceAbs[i].x, mouse_delta.x < 0.0f ? -mouse_delta.x : mouse_delta.x);
+ g.IO.MouseDragMaxDistanceAbs[i].y = ImMax(g.IO.MouseDragMaxDistanceAbs[i].y, mouse_delta.y < 0.0f ? -mouse_delta.y : mouse_delta.y);
+ g.IO.MouseDragMaxDistanceSqr[i] = ImMax(g.IO.MouseDragMaxDistanceSqr[i], ImLengthSqr(mouse_delta));
}
}
- memcpy(g.IO.KeysDownDurationPrev, g.IO.KeysDownDuration, sizeof(g.IO.KeysDownDuration));
- for (int i = 0; i < IM_ARRAYSIZE(g.IO.KeysDown); i++)
- g.IO.KeysDownDuration[i] = g.IO.KeysDown[i] ? (g.IO.KeysDownDuration[i] < 0.0f ? 0.0f : g.IO.KeysDownDuration[i] + g.IO.DeltaTime) : -1.0f;
// Calculate frame-rate for the user, as a purely luxurious feature
g.FramerateSecPerFrameAccum += g.IO.DeltaTime - g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx];
@@ -2209,43 +2337,30 @@ void ImGui::NewFrame()
g.FramerateSecPerFrameIdx = (g.FramerateSecPerFrameIdx + 1) % IM_ARRAYSIZE(g.FramerateSecPerFrame);
g.IO.Framerate = 1.0f / (g.FramerateSecPerFrameAccum / (float)IM_ARRAYSIZE(g.FramerateSecPerFrame));
- // Clear reference to active widget if the widget isn't alive anymore
- g.HoveredIdPreviousFrame = g.HoveredId;
- g.HoveredId = 0;
- g.HoveredIdAllowOverlap = false;
- if (!g.ActiveIdIsAlive && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0)
- ClearActiveID();
- g.ActiveIdPreviousFrame = g.ActiveId;
- g.ActiveIdIsAlive = false;
- g.ActiveIdIsJustActivated = false;
-
- // Handle user moving window (at the beginning of the frame to avoid input lag or sheering). Only valid for root windows.
- if (g.MovedWindowMoveId && g.MovedWindowMoveId == g.ActiveId)
+ // Handle user moving window with mouse (at the beginning of the frame to avoid input lag or sheering). Only valid for root windows.
+ if (g.MovingWindowMoveId && g.MovingWindowMoveId == g.ActiveId)
{
- KeepAliveID(g.MovedWindowMoveId);
- IM_ASSERT(g.MovedWindow && g.MovedWindow->RootWindow);
- IM_ASSERT(g.MovedWindow->RootWindow->MoveId == g.MovedWindowMoveId);
+ KeepAliveID(g.MovingWindowMoveId);
+ IM_ASSERT(g.MovingWindow && g.MovingWindow->RootWindow);
+ IM_ASSERT(g.MovingWindow->MoveId == g.MovingWindowMoveId);
if (g.IO.MouseDown[0])
{
- if (!(g.MovedWindow->Flags & ImGuiWindowFlags_NoMove))
- {
- g.MovedWindow->PosFloat += g.IO.MouseDelta;
- if (!(g.MovedWindow->Flags & ImGuiWindowFlags_NoSavedSettings) && (g.IO.MouseDelta.x != 0.0f || g.IO.MouseDelta.y != 0.0f))
- MarkIniSettingsDirty();
- }
- FocusWindow(g.MovedWindow);
+ g.MovingWindow->RootWindow->PosFloat += g.IO.MouseDelta;
+ if (g.IO.MouseDelta.x != 0.0f || g.IO.MouseDelta.y != 0.0f)
+ MarkIniSettingsDirty(g.MovingWindow->RootWindow);
+ FocusWindow(g.MovingWindow);
}
else
{
ClearActiveID();
- g.MovedWindow = NULL;
- g.MovedWindowMoveId = 0;
+ g.MovingWindow = NULL;
+ g.MovingWindowMoveId = 0;
}
}
else
{
- g.MovedWindow = NULL;
- g.MovedWindowMoveId = 0;
+ g.MovingWindow = NULL;
+ g.MovingWindowMoveId = 0;
}
// Delay saving settings so we don't spam disk too much
@@ -2256,12 +2371,12 @@ void ImGui::NewFrame()
SaveIniSettingsToDisk(g.IO.IniFilename);
}
- // Find the window we are hovering. Child windows can extend beyond the limit of their parent so we need to derive HoveredRootWindow from HoveredWindow
- g.HoveredWindow = g.MovedWindow ? g.MovedWindow : FindHoveredWindow(g.IO.MousePos, false);
- if (g.HoveredWindow && (g.HoveredWindow->Flags & ImGuiWindowFlags_ChildWindow))
- g.HoveredRootWindow = g.HoveredWindow->RootWindow;
- else
- g.HoveredRootWindow = g.MovedWindow ? g.MovedWindow->RootWindow : FindHoveredWindow(g.IO.MousePos, true);
+ // Find the window we are hovering
+ // - Child windows can extend beyond the limit of their parent so we need to derive HoveredRootWindow from HoveredWindow.
+ // - When moving a window we can skip the search, which also conveniently bypasses the fact that window->WindowRectClipped is lagging as this point.
+ // - We also support the moved window toggling the NoInputs flag after moving has started in order to be able to detect windows below it, which is useful for e.g. docking mechanisms.
+ g.HoveredWindow = (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoInputs)) ? g.MovingWindow : FindHoveredWindow(g.IO.MousePos);
+ g.HoveredRootWindow = g.HoveredWindow ? g.HoveredWindow->RootWindow : NULL;
if (ImGuiWindow* modal_window = GetFrontMostModalRootWindow())
{
@@ -2277,7 +2392,7 @@ void ImGui::NewFrame()
g.ModalWindowDarkeningRatio = 0.0f;
}
- // Are we using inputs? Tell user so they can capture/discard the inputs away from the rest of their application.
+ // Update the WantCaptureMouse/WantCAptureKeyboard flags, so user can capture/discard the inputs away from the rest of their application.
// When clicking outside of a window we assume the click is owned by the application and won't request capture. We need to track click ownership.
int mouse_earliest_button_down = -1;
bool mouse_any_down = false;
@@ -2287,21 +2402,22 @@ void ImGui::NewFrame()
g.IO.MouseDownOwned[i] = (g.HoveredWindow != NULL) || (!g.OpenPopupStack.empty());
mouse_any_down |= g.IO.MouseDown[i];
if (g.IO.MouseDown[i])
- if (mouse_earliest_button_down == -1 || g.IO.MouseClickedTime[mouse_earliest_button_down] > g.IO.MouseClickedTime[i])
+ if (mouse_earliest_button_down == -1 || g.IO.MouseClickedTime[i] < g.IO.MouseClickedTime[mouse_earliest_button_down])
mouse_earliest_button_down = i;
}
bool mouse_avail_to_imgui = (mouse_earliest_button_down == -1) || g.IO.MouseDownOwned[mouse_earliest_button_down];
- if (g.CaptureMouseNextFrame != -1)
- g.IO.WantCaptureMouse = (g.CaptureMouseNextFrame != 0);
+ if (g.WantCaptureMouseNextFrame != -1)
+ g.IO.WantCaptureMouse = (g.WantCaptureMouseNextFrame != 0);
else
- g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (g.ActiveId != 0) || (!g.OpenPopupStack.empty());
- g.IO.WantCaptureKeyboard = (g.CaptureKeyboardNextFrame != -1) ? (g.CaptureKeyboardNextFrame != 0) : (g.ActiveId != 0);
- g.IO.WantTextInput = (g.ActiveId != 0 && g.InputTextState.Id == g.ActiveId);
+ g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (!g.OpenPopupStack.empty());
+ g.IO.WantCaptureKeyboard = (g.WantCaptureKeyboardNextFrame != -1) ? (g.WantCaptureKeyboardNextFrame != 0) : (g.ActiveId != 0);
+ g.IO.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : 0;
g.MouseCursor = ImGuiMouseCursor_Arrow;
- g.CaptureMouseNextFrame = g.CaptureKeyboardNextFrame = -1;
+ g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1;
g.OsImePosRequest = ImVec2(1.0f, 1.0f); // OS Input Method Editor showing on top-left of our window by default
// If mouse was first clicked outside of ImGui bounds we also cancel out hovering.
+ // FIXME: For patterns of drag and drop between "application" and "imgui" we may need to rework/remove this test (first committed 311c0ca9 on 2015/02)
if (!mouse_avail_to_imgui)
g.HoveredWindow = g.HoveredRootWindow = NULL;
@@ -2309,23 +2425,20 @@ void ImGui::NewFrame()
if (g.HoveredWindow && g.IO.MouseWheel != 0.0f && !g.HoveredWindow->Collapsed)
{
ImGuiWindow* window = g.HoveredWindow;
- if (g.IO.KeyCtrl)
+ if (g.IO.KeyCtrl && g.IO.FontAllowUserScaling)
{
- if (g.IO.FontAllowUserScaling)
- {
- // Zoom / Scale window
- float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
- float scale = new_font_scale / window->FontWindowScale;
- window->FontWindowScale = new_font_scale;
-
- const ImVec2 offset = window->Size * (1.0f - scale) * (g.IO.MousePos - window->Pos) / window->Size;
- window->Pos += offset;
- window->PosFloat += offset;
- window->Size *= scale;
- window->SizeFull *= scale;
- }
+ // Zoom / Scale window
+ const float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
+ const float scale = new_font_scale / window->FontWindowScale;
+ window->FontWindowScale = new_font_scale;
+
+ const ImVec2 offset = window->Size * (1.0f - scale) * (g.IO.MousePos - window->Pos) / window->Size;
+ window->Pos += offset;
+ window->PosFloat += offset;
+ window->Size *= scale;
+ window->SizeFull *= scale;
}
- else if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse))
+ else if (!g.IO.KeyCtrl && !(window->Flags & ImGuiWindowFlags_NoScrollWithMouse))
{
// Scroll
const int scroll_lines = (window->Flags & ImGuiWindowFlags_ComboBox) ? 3 : 5;
@@ -2334,9 +2447,8 @@ void ImGui::NewFrame()
}
// Pressing TAB activate widget focus
- // NB: Don't discard FocusedWindow if it isn't active, so that a window that go on/off programatically won't lose its keyboard focus.
- if (g.ActiveId == 0 && g.FocusedWindow != NULL && g.FocusedWindow->Active && IsKeyPressedMap(ImGuiKey_Tab, false))
- g.FocusedWindow->FocusIdxTabRequestNext = 0;
+ if (g.ActiveId == 0 && g.NavWindow != NULL && g.NavWindow->Active && IsKeyPressedMap(ImGuiKey_Tab, false))
+ g.NavWindow->FocusIdxTabRequestNext = 0;
// Mark all windows as not visible
for (int i = 0; i != g.Windows.Size; i++)
@@ -2344,30 +2456,100 @@ void ImGui::NewFrame()
ImGuiWindow* window = g.Windows[i];
window->WasActive = window->Active;
window->Active = false;
- window->Accessed = false;
+ window->WriteAccessed = false;
}
// Closing the focused window restore focus to the first active root window in descending z-order
- if (g.FocusedWindow && !g.FocusedWindow->WasActive)
- for (int i = g.Windows.Size-1; i >= 0; i--)
- if (g.Windows[i]->WasActive && !(g.Windows[i]->Flags & ImGuiWindowFlags_ChildWindow))
- {
- FocusWindow(g.Windows[i]);
- break;
- }
+ if (g.NavWindow && !g.NavWindow->WasActive)
+ FocusPreviousWindow();
// No window should be open at the beginning of the frame.
// But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear.
g.CurrentWindowStack.resize(0);
g.CurrentPopupStack.resize(0);
- CloseInactivePopups();
+ CloseInactivePopups(g.NavWindow);
// Create implicit window - we will only render it if the user has added something to it.
- ImGui::SetNextWindowSize(ImVec2(400,400), ImGuiSetCond_FirstUseEver);
- ImGui::Begin("Debug");
+ // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
+ ImGui::SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver);
+ ImGui::Begin("Debug##Default");
+}
+
+static void* SettingsHandlerWindow_ReadOpen(ImGuiContext&, const char* name)
+{
+ ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHash(name, 0));
+ if (!settings)
+ settings = AddWindowSettings(name);
+ return (void*)settings;
+}
+
+static void SettingsHandlerWindow_ReadLine(ImGuiContext&, void* entry, const char* line)
+{
+ ImGuiWindowSettings* settings = (ImGuiWindowSettings*)entry;
+ float x, y;
+ int i;
+ if (sscanf(line, "Pos=%f,%f", &x, &y) == 2) settings->Pos = ImVec2(x, y);
+ else if (sscanf(line, "Size=%f,%f", &x, &y) == 2) settings->Size = ImMax(ImVec2(x, y), GImGui->Style.WindowMinSize);
+ else if (sscanf(line, "Collapsed=%d", &i) == 1) settings->Collapsed = (i != 0);
+}
+
+static void SettingsHandlerWindow_WriteAll(ImGuiContext& g, ImGuiTextBuffer* buf)
+{
+ // Gather data from windows that were active during this session
+ for (int i = 0; i != g.Windows.Size; i++)
+ {
+ ImGuiWindow* window = g.Windows[i];
+ if (window->Flags & ImGuiWindowFlags_NoSavedSettings)
+ continue;
+ ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID);
+ if (!settings)
+ settings = AddWindowSettings(window->Name);
+ settings->Pos = window->Pos;
+ settings->Size = window->SizeFull;
+ settings->Collapsed = window->Collapsed;
+ }
+
+ // Write a buffer
+ // If a window wasn't opened in this session we preserve its settings
+ buf->reserve(buf->size() + g.SettingsWindows.Size * 96); // ballpark reserve
+ for (int i = 0; i != g.SettingsWindows.Size; i++)
+ {
+ const ImGuiWindowSettings* settings = &g.SettingsWindows[i];
+ if (settings->Pos.x == FLT_MAX)
+ continue;
+ const char* name = settings->Name;
+ if (const char* p = strstr(name, "###")) // Skip to the "###" marker if any. We don't skip past to match the behavior of GetID()
+ name = p;
+ buf->appendf("[Window][%s]\n", name);
+ buf->appendf("Pos=%d,%d\n", (int)settings->Pos.x, (int)settings->Pos.y);
+ buf->appendf("Size=%d,%d\n", (int)settings->Size.x, (int)settings->Size.y);
+ buf->appendf("Collapsed=%d\n", settings->Collapsed);
+ buf->appendf("\n");
+ }
+}
+
+void ImGui::Initialize()
+{
+ ImGuiContext& g = *GImGui;
+ g.LogClipboard = (ImGuiTextBuffer*)ImGui::MemAlloc(sizeof(ImGuiTextBuffer));
+ IM_PLACEMENT_NEW(g.LogClipboard) ImGuiTextBuffer();
+
+ // Add .ini handle for ImGuiWindow type
+ ImGuiSettingsHandler ini_handler;
+ ini_handler.TypeName = "Window";
+ ini_handler.TypeHash = ImHash("Window", 0, 0);
+ ini_handler.ReadOpenFn = SettingsHandlerWindow_ReadOpen;
+ ini_handler.ReadLineFn = SettingsHandlerWindow_ReadLine;
+ ini_handler.WriteAllFn = SettingsHandlerWindow_WriteAll;
+ g.SettingsHandlers.push_front(ini_handler);
+
+ // Load .ini file
+ IM_ASSERT(g.SettingsWindows.empty());
+ LoadIniSettingsFromDisk(g.IO.IniFilename);
+ g.Initialized = true;
}
-// NB: behavior of ImGui after Shutdown() is not tested/guaranteed at the moment. This function is merely here to free heap allocations.
+// This function is merely here to free heap allocations.
void ImGui::Shutdown()
{
ImGuiContext& g = *GImGui;
@@ -2376,7 +2558,7 @@ void ImGui::Shutdown()
if (g.IO.Fonts) // Testing for NULL to allow user to NULLify in case of running Shutdown() on multiple contexts. Bit hacky.
g.IO.Fonts->Clear();
- // Cleanup of other data are conditional on actually having used ImGui.
+ // Cleanup of other data are conditional on actually having initialize ImGui.
if (!g.Initialized)
return;
@@ -2391,14 +2573,14 @@ void ImGui::Shutdown()
g.WindowsSortBuffer.clear();
g.CurrentWindow = NULL;
g.CurrentWindowStack.clear();
- g.FocusedWindow = NULL;
+ g.WindowsById.Clear();
+ g.NavWindow = NULL;
g.HoveredWindow = NULL;
g.HoveredRootWindow = NULL;
g.ActiveIdWindow = NULL;
- g.MovedWindow = NULL;
- for (int i = 0; i < g.Settings.Size; i++)
- ImGui::MemFree(g.Settings[i].Name);
- g.Settings.clear();
+ g.MovingWindow = NULL;
+ for (int i = 0; i < g.SettingsWindows.Size; i++)
+ ImGui::MemFree(g.SettingsWindows[i].Name);
g.ColorModifiers.clear();
g.StyleModifiers.clear();
g.FontStack.clear();
@@ -2409,16 +2591,14 @@ void ImGui::Shutdown()
for (int i = 0; i < IM_ARRAYSIZE(g.RenderDrawLists); i++)
g.RenderDrawLists[i].clear();
g.OverlayDrawList.ClearFreeMemory();
- g.ColorEditModeStorage.Clear();
- if (g.PrivateClipboard)
- {
- ImGui::MemFree(g.PrivateClipboard);
- g.PrivateClipboard = NULL;
- }
+ g.PrivateClipboard.clear();
g.InputTextState.Text.clear();
g.InputTextState.InitialText.clear();
g.InputTextState.TempTextBuffer.clear();
+ g.SettingsWindows.clear();
+ g.SettingsHandlers.clear();
+
if (g.LogFile && g.LogFile != stdout)
{
fclose(g.LogFile);
@@ -2433,76 +2613,96 @@ void ImGui::Shutdown()
g.Initialized = false;
}
-static ImGuiIniData* FindWindowSettings(const char* name)
+ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
{
ImGuiContext& g = *GImGui;
- ImGuiID id = ImHash(name, 0);
- for (int i = 0; i != g.Settings.Size; i++)
- {
- ImGuiIniData* ini = &g.Settings[i];
- if (ini->Id == id)
- return ini;
- }
+ for (int i = 0; i != g.SettingsWindows.Size; i++)
+ if (g.SettingsWindows[i].Id == id)
+ return &g.SettingsWindows[i];
return NULL;
}
-static ImGuiIniData* AddWindowSettings(const char* name)
+static ImGuiWindowSettings* AddWindowSettings(const char* name)
{
- GImGui->Settings.resize(GImGui->Settings.Size + 1);
- ImGuiIniData* ini = &GImGui->Settings.back();
- ini->Name = ImStrdup(name);
- ini->Id = ImHash(name, 0);
- ini->Collapsed = false;
- ini->Pos = ImVec2(FLT_MAX,FLT_MAX);
- ini->Size = ImVec2(0,0);
- return ini;
+ ImGuiContext& g = *GImGui;
+ g.SettingsWindows.push_back(ImGuiWindowSettings());
+ ImGuiWindowSettings* settings = &g.SettingsWindows.back();
+ settings->Name = ImStrdup(name);
+ settings->Id = ImHash(name, 0);
+ return settings;
}
-// Zero-tolerance, poor-man .ini parsing
-// FIXME: Write something less rubbish
static void LoadIniSettingsFromDisk(const char* ini_filename)
{
- ImGuiContext& g = *GImGui;
if (!ini_filename)
return;
-
- int file_size;
- char* file_data = (char*)ImFileLoadToMemory(ini_filename, "rb", &file_size, 1);
+ char* file_data = (char*)ImFileLoadToMemory(ini_filename, "rb", NULL, +1);
if (!file_data)
return;
+ LoadIniSettingsFromMemory(file_data);
+ ImGui::MemFree(file_data);
+}
+
+ImGuiSettingsHandler* ImGui::FindSettingsHandler(ImGuiID type_hash)
+{
+ ImGuiContext& g = *GImGui;
+ for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
+ if (g.SettingsHandlers[handler_n].TypeHash == type_hash)
+ return &g.SettingsHandlers[handler_n];
+ return NULL;
+}
+
+// Zero-tolerance, no error reporting, cheap .ini parsing
+static void LoadIniSettingsFromMemory(const char* buf_readonly)
+{
+ // For convenience and to make the code simpler, we'll write zero terminators inside the buffer. So let's create a writable copy.
+ char* buf = ImStrdup(buf_readonly);
+ char* buf_end = buf + strlen(buf);
+
+ ImGuiContext& g = *GImGui;
+ void* entry_data = NULL;
+ const ImGuiSettingsHandler* entry_handler = NULL;
- ImGuiIniData* settings = NULL;
- const char* buf_end = file_data + file_size;
- for (const char* line_start = file_data; line_start < buf_end; )
+ char* line_end = NULL;
+ for (char* line = buf; line < buf_end; line = line_end + 1)
{
- const char* line_end = line_start;
+ // Skip new lines markers, then find end of the line
+ while (*line == '\n' || *line == '\r')
+ line++;
+ line_end = line;
while (line_end < buf_end && *line_end != '\n' && *line_end != '\r')
line_end++;
+ line_end[0] = 0;
- if (line_start[0] == '[' && line_end > line_start && line_end[-1] == ']')
+ if (line[0] == '[' && line_end > line && line_end[-1] == ']')
{
- char name[64];
- ImFormatString(name, IM_ARRAYSIZE(name), "%.*s", (int)(line_end-line_start-2), line_start+1);
- settings = FindWindowSettings(name);
- if (!settings)
- settings = AddWindowSettings(name);
+ // Parse "[Type][Name]". Note that 'Name' can itself contains [] characters, which is acceptable with the current format and parsing code.
+ char* name_end = line_end - 1;
+ *name_end = 0;
+ const char* type_start = line + 1;
+ char* type_end = ImStrchrRange(type_start, name_end, ']');
+ const char* name_start = type_end ? ImStrchrRange(type_end + 1, name_end, '[') : NULL;
+ if (!type_end || !name_start)
+ {
+ name_start = type_start; // Import legacy entries that have no type
+ type_start = "Window";
+ }
+ else
+ {
+ *type_end = 0; // Overwrite first ']'
+ name_start++; // Skip second '['
+ }
+ const ImGuiID type_hash = ImHash(type_start, 0, 0);
+ entry_handler = ImGui::FindSettingsHandler(type_hash);
+ entry_data = entry_handler ? entry_handler->ReadOpenFn(g, name_start) : NULL;
}
- else if (settings)
+ else if (entry_handler != NULL && entry_data != NULL)
{
- float x, y;
- int i;
- if (sscanf(line_start, "Pos=%f,%f", &x, &y) == 2)
- settings->Pos = ImVec2(x, y);
- else if (sscanf(line_start, "Size=%f,%f", &x, &y) == 2)
- settings->Size = ImMax(ImVec2(x, y), g.Style.WindowMinSize);
- else if (sscanf(line_start, "Collapsed=%d", &i) == 1)
- settings->Collapsed = (i != 0);
+ // Let type handler parse the line
+ entry_handler->ReadLineFn(g, entry_data, line);
}
-
- line_start = line_end+1;
}
-
- ImGui::MemFree(file_data);
+ ImGui::MemFree(buf);
}
static void SaveIniSettingsToDisk(const char* ini_filename)
@@ -2512,48 +2712,44 @@ static void SaveIniSettingsToDisk(const char* ini_filename)
if (!ini_filename)
return;
- // Gather data from windows that were active during this session
- for (int i = 0; i != g.Windows.Size; i++)
- {
- ImGuiWindow* window = g.Windows[i];
- if (window->Flags & ImGuiWindowFlags_NoSavedSettings)
- continue;
- ImGuiIniData* settings = FindWindowSettings(window->Name);
- settings->Pos = window->Pos;
- settings->Size = window->SizeFull;
- settings->Collapsed = window->Collapsed;
- }
+ ImVector<char> buf;
+ SaveIniSettingsToMemory(buf);
- // Write .ini file
- // If a window wasn't opened in this session we preserve its settings
FILE* f = ImFileOpen(ini_filename, "wt");
if (!f)
return;
- for (int i = 0; i != g.Settings.Size; i++)
- {
- const ImGuiIniData* settings = &g.Settings[i];
- if (settings->Pos.x == FLT_MAX)
- continue;
- const char* name = settings->Name;
- if (const char* p = strstr(name, "###")) // Skip to the "###" marker if any. We don't skip past to match the behavior of GetID()
- name = p;
- fprintf(f, "[%s]\n", name);
- fprintf(f, "Pos=%d,%d\n", (int)settings->Pos.x, (int)settings->Pos.y);
- fprintf(f, "Size=%d,%d\n", (int)settings->Size.x, (int)settings->Size.y);
- fprintf(f, "Collapsed=%d\n", settings->Collapsed);
- fprintf(f, "\n");
- }
-
+ fwrite(buf.Data, sizeof(char), (size_t)buf.Size, f);
fclose(f);
}
-static void MarkIniSettingsDirty()
+static void SaveIniSettingsToMemory(ImVector<char>& out_buf)
+{
+ ImGuiContext& g = *GImGui;
+ g.SettingsDirtyTimer = 0.0f;
+
+ ImGuiTextBuffer buf;
+ for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
+ g.SettingsHandlers[handler_n].WriteAllFn(g, &buf);
+
+ buf.Buf.pop_back(); // Remove extra zero-terminator used by ImGuiTextBuffer
+ out_buf.swap(buf.Buf);
+}
+
+void ImGui::MarkIniSettingsDirty()
{
ImGuiContext& g = *GImGui;
if (g.SettingsDirtyTimer <= 0.0f)
g.SettingsDirtyTimer = g.IO.IniSavingRate;
}
+static void MarkIniSettingsDirty(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ if (!(window->Flags & ImGuiWindowFlags_NoSavedSettings))
+ if (g.SettingsDirtyTimer <= 0.0f)
+ g.SettingsDirtyTimer = g.IO.IniSavingRate;
+}
+
// FIXME: Add a more explicit sort order in the window structure.
static int ChildWindowComparer(const void* lhs, const void* rhs)
{
@@ -2565,7 +2761,7 @@ static int ChildWindowComparer(const void* lhs, const void* rhs)
return d;
if (int d = (a->Flags & ImGuiWindowFlags_ComboBox) - (b->Flags & ImGuiWindowFlags_ComboBox))
return d;
- return (a->IndexWithinParent - b->IndexWithinParent);
+ return (a->OrderWithinParent - b->OrderWithinParent);
}
static void AddWindowToSortedBuffer(ImVector<ImGuiWindow*>& out_sorted_windows, ImGuiWindow* window)
@@ -2599,14 +2795,19 @@ static void AddDrawListToRenderList(ImVector<ImDrawList*>& out_render_list, ImDr
return;
}
- // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc.
+ // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc. May trigger for you if you are using PrimXXX functions incorrectly.
IM_ASSERT(draw_list->VtxBuffer.Size == 0 || draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size);
IM_ASSERT(draw_list->IdxBuffer.Size == 0 || draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size);
IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size);
- // Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = 2 bytes = 64K vertices)
- // If this assert triggers because you are drawing lots of stuff manually, A) workaround by calling BeginChild()/EndChild() to put your draw commands in multiple draw lists, B) #define ImDrawIdx to a 'unsigned int' in imconfig.h and render accordingly.
- IM_ASSERT((int64_t)draw_list->_VtxCurrentIdx <= ((int64_t)1L << (sizeof(ImDrawIdx)*8))); // Too many vertices in same ImDrawList. See comment above.
+ // Check that draw_list doesn't use more vertices than indexable in a single draw call (default ImDrawIdx = unsigned short = 2 bytes = 64K vertices per window)
+ // If this assert triggers because you are drawing lots of stuff manually, you can:
+ // A) Add '#define ImDrawIdx unsigned int' in imconfig.h to set the index size to 4 bytes. You'll need to handle the 4-bytes indices to your renderer.
+ // For example, the OpenGL example code detect index size at compile-time by doing:
+ // 'glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);'
+ // Your own engine or render API may use different parameters or function calls to specify index sizes. 2 and 4 bytes indices are generally supported by most API.
+ // B) If for some reason you cannot use 4 bytes indices or don't want to, a workaround is to call BeginChild()/EndChild() before reaching the 64K limit to split your draw commands in multiple draw lists.
+ IM_ASSERT(((ImU64)draw_list->_VtxCurrentIdx >> (sizeof(ImDrawIdx)*8)) == 0); // Too many vertices in same ImDrawList. See comment above.
out_render_list.push_back(draw_list);
GImGui->IO.MetricsRenderVertices += draw_list->VtxBuffer.Size;
@@ -2627,6 +2828,19 @@ static void AddWindowToRenderList(ImVector<ImDrawList*>& out_render_list, ImGuiW
}
}
+static void AddWindowToRenderListSelectLayer(ImGuiWindow* window)
+{
+ // FIXME: Generalize this with a proper layering system so e.g. user can draw in specific layers, below text, ..
+ ImGuiContext& g = *GImGui;
+ g.IO.MetricsActiveWindows++;
+ if (window->Flags & ImGuiWindowFlags_Popup)
+ AddWindowToRenderList(g.RenderDrawLists[1], window);
+ else if (window->Flags & ImGuiWindowFlags_Tooltip)
+ AddWindowToRenderList(g.RenderDrawLists[2], window);
+ else
+ AddWindowToRenderList(g.RenderDrawLists[0], window);
+}
+
// When using this function it is sane to ensure that float are perfectly rounded to integer values, to that e.g. (int)(max.x-min.x) in user's render produce correct result.
void ImGui::PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect)
{
@@ -2647,15 +2861,8 @@ void ImGui::EndFrame()
{
ImGuiContext& g = *GImGui;
IM_ASSERT(g.Initialized); // Forgot to call ImGui::NewFrame()
- IM_ASSERT(g.FrameCountEnded != g.FrameCount); // ImGui::EndFrame() called multiple times, or forgot to call ImGui::NewFrame() again
-
- // Render tooltip
- if (g.Tooltip[0])
- {
- ImGui::BeginTooltip();
- ImGui::TextUnformatted(g.Tooltip);
- ImGui::EndTooltip();
- }
+ if (g.FrameCountEnded == g.FrameCount) // Don't process EndFrame() multiple times.
+ return;
// Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
if (g.IO.ImeSetInputScreenPosFn && ImLengthSqr(g.OsImePosRequest - g.OsImePosSet) > 0.0001f)
@@ -2666,29 +2873,53 @@ void ImGui::EndFrame()
// Hide implicit "Debug" window if it hasn't been used
IM_ASSERT(g.CurrentWindowStack.Size == 1); // Mismatched Begin()/End() calls
- if (g.CurrentWindow && !g.CurrentWindow->Accessed)
+ if (g.CurrentWindow && !g.CurrentWindow->WriteAccessed)
g.CurrentWindow->Active = false;
ImGui::End();
- // Click to focus window and start moving (after we're done with all our widgets)
- if (g.ActiveId == 0 && g.HoveredId == 0 && g.IO.MouseClicked[0])
+ if (g.ActiveId == 0 && g.HoveredId == 0)
{
- if (!(g.FocusedWindow && !g.FocusedWindow->WasActive && g.FocusedWindow->Active)) // Unless we just made a popup appear
+ if (!g.NavWindow || !g.NavWindow->Appearing) // Unless we just made a window/popup appear
{
- if (g.HoveredRootWindow != NULL)
+ // Click to focus window and start moving (after we're done with all our widgets)
+ if (g.IO.MouseClicked[0])
{
- FocusWindow(g.HoveredWindow);
- if (!(g.HoveredWindow->Flags & ImGuiWindowFlags_NoMove))
+ if (g.HoveredRootWindow != NULL)
+ {
+ FocusWindow(g.HoveredWindow);
+ if (!(g.HoveredWindow->Flags & ImGuiWindowFlags_NoMove) && !(g.HoveredRootWindow->Flags & ImGuiWindowFlags_NoMove))
+ {
+ g.MovingWindow = g.HoveredWindow;
+ g.MovingWindowMoveId = g.MovingWindow->MoveId;
+ SetActiveID(g.MovingWindowMoveId, g.HoveredRootWindow);
+ }
+ }
+ else if (g.NavWindow != NULL && GetFrontMostModalRootWindow() == NULL)
{
- g.MovedWindow = g.HoveredWindow;
- g.MovedWindowMoveId = g.HoveredRootWindow->MoveId;
- SetActiveID(g.MovedWindowMoveId, g.HoveredRootWindow);
+ // Clicking on void disable focus
+ FocusWindow(NULL);
}
}
- else if (g.FocusedWindow != NULL && GetFrontMostModalRootWindow() == NULL)
+
+ // With right mouse button we close popups without changing focus
+ // (The left mouse button path calls FocusWindow which will lead NewFrame->CloseInactivePopups to trigger)
+ if (g.IO.MouseClicked[1])
{
- // Clicking on void disable focus
- FocusWindow(NULL);
+ // Find the top-most window between HoveredWindow and the front most Modal Window.
+ // This is where we can trim the popup stack.
+ ImGuiWindow* modal = GetFrontMostModalRootWindow();
+ bool hovered_window_above_modal = false;
+ if (modal == NULL)
+ hovered_window_above_modal = true;
+ for (int i = g.Windows.Size - 1; i >= 0 && hovered_window_above_modal == false; i--)
+ {
+ ImGuiWindow* window = g.Windows[i];
+ if (window == modal)
+ break;
+ if (window == g.HoveredWindow)
+ hovered_window_above_modal = true;
+ }
+ CloseInactivePopups(hovered_window_above_modal ? g.HoveredWindow : modal);
}
}
}
@@ -2704,6 +2935,7 @@ void ImGui::EndFrame()
continue;
AddWindowToSortedBuffer(g.WindowsSortBuffer, window);
}
+
IM_ASSERT(g.Windows.Size == g.WindowsSortBuffer.Size); // we done something wrong
g.Windows.swap(g.WindowsSortBuffer);
@@ -2735,16 +2967,7 @@ void ImGui::Render()
{
ImGuiWindow* window = g.Windows[i];
if (window->Active && window->HiddenFrames <= 0 && (window->Flags & (ImGuiWindowFlags_ChildWindow)) == 0)
- {
- // FIXME: Generalize this with a proper layering system so e.g. user can draw in specific layers, below text, ..
- g.IO.MetricsActiveWindows++;
- if (window->Flags & ImGuiWindowFlags_Popup)
- AddWindowToRenderList(g.RenderDrawLists[1], window);
- else if (window->Flags & ImGuiWindowFlags_Tooltip)
- AddWindowToRenderList(g.RenderDrawLists[2], window);
- else
- AddWindowToRenderList(g.RenderDrawLists[0], window);
- }
+ AddWindowToRenderListSelectLayer(window);
}
// Flatten layers
@@ -2818,23 +3041,24 @@ void ImGui::LogText(const char* fmt, ...)
}
else
{
- g.LogClipboard->appendv(fmt, args);
+ g.LogClipboard->appendfv(fmt, args);
}
va_end(args);
}
// Internal version that takes a position to decide on newline placement and pad items according to their depth.
// We split text into individual lines to add current tree level padding
-static void LogRenderedText(const ImVec2& ref_pos, const char* text, const char* text_end)
+static void LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = ImGui::GetCurrentWindowRead();
+ ImGuiWindow* window = g.CurrentWindow;
if (!text_end)
text_end = ImGui::FindRenderedTextEnd(text, text_end);
- const bool log_new_line = ref_pos.y > window->DC.LogLinePosY+1;
- window->DC.LogLinePosY = ref_pos.y;
+ const bool log_new_line = ref_pos && (ref_pos->y > window->DC.LogLinePosY + 1);
+ if (ref_pos)
+ window->DC.LogLinePosY = ref_pos->y;
const char* text_remaining = text;
if (g.LogStartDepth > window->DC.TreeDepth) // Re-adjust padding if we have popped out of our starting depth
@@ -2879,7 +3103,7 @@ static void LogRenderedText(const ImVec2& ref_pos, const char* text, const char*
void ImGui::RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = g.CurrentWindow;
// Hide anything after a '##' string
const char* text_display_end;
@@ -2899,14 +3123,14 @@ void ImGui::RenderText(ImVec2 pos, const char* text, const char* text_end, bool
{
window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end);
if (g.LogEnabled)
- LogRenderedText(pos, text, text_display_end);
+ LogRenderedText(&pos, text, text_display_end);
}
}
void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = g.CurrentWindow;
if (!text_end)
text_end = text + strlen(text); // FIXME-OPT
@@ -2916,7 +3140,7 @@ void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end
{
window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_end, wrap_width);
if (g.LogEnabled)
- LogRenderedText(pos, text, text_end);
+ LogRenderedText(&pos, text, text_end);
}
}
@@ -2931,7 +3155,7 @@ void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, cons
return;
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = g.CurrentWindow;
// Perform CPU side clipping for single clipped element to avoid using scissor state
ImVec2 pos = pos_min;
@@ -2958,75 +3182,95 @@ void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, cons
window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, NULL);
}
if (g.LogEnabled)
- LogRenderedText(pos, text, text_display_end);
+ LogRenderedText(&pos, text, text_display_end);
}
// Render a rectangle shaped with optional rounding and borders
void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border, float rounding)
{
- ImGuiWindow* window = GetCurrentWindow();
-
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
window->DrawList->AddRectFilled(p_min, p_max, fill_col, rounding);
- if (border && (window->Flags & ImGuiWindowFlags_ShowBorders))
+ const float border_size = g.Style.FrameBorderSize;
+ if (border && border_size > 0.0f)
+ {
+ window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size);
+ window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size);
+ }
+}
+
+void ImGui::RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ const float border_size = g.Style.FrameBorderSize;
+ if (border_size > 0.0f)
{
- window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding);
- window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding);
+ window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size);
+ window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size);
}
}
// Render a triangle to denote expanded/collapsed state
-void ImGui::RenderCollapseTriangle(ImVec2 p_min, bool is_open, float scale)
+void ImGui::RenderTriangle(ImVec2 p_min, ImGuiDir dir, float scale)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = g.CurrentWindow;
const float h = g.FontSize * 1.00f;
- const float r = h * 0.40f * scale;
- ImVec2 center = p_min + ImVec2(h*0.50f, h*0.50f*scale);
+ float r = h * 0.40f * scale;
+ ImVec2 center = p_min + ImVec2(h * 0.50f, h * 0.50f * scale);
ImVec2 a, b, c;
- if (is_open)
- {
- center.y -= r*0.25f;
- a = center + ImVec2(0,1)*r;
- b = center + ImVec2(-0.866f,-0.5f)*r;
- c = center + ImVec2(0.866f,-0.5f)*r;
- }
- else
- {
- a = center + ImVec2(1,0)*r;
- b = center + ImVec2(-0.500f,0.866f)*r;
- c = center + ImVec2(-0.500f,-0.866f)*r;
+ switch (dir)
+ {
+ case ImGuiDir_Up:
+ r = -r; // ...fall through, no break!
+ case ImGuiDir_Down:
+ center.y -= r * 0.25f;
+ a = ImVec2(0,1) * r;
+ b = ImVec2(-0.866f,-0.5f) * r;
+ c = ImVec2(+0.866f,-0.5f) * r;
+ break;
+ case ImGuiDir_Left:
+ r = -r; // ...fall through, no break!
+ case ImGuiDir_Right:
+ center.x -= r * 0.25f;
+ a = ImVec2(1,0) * r;
+ b = ImVec2(-0.500f,+0.866f) * r;
+ c = ImVec2(-0.500f,-0.866f) * r;
+ break;
+ default:
+ IM_ASSERT(0);
+ break;
}
- window->DrawList->AddTriangleFilled(a, b, c, GetColorU32(ImGuiCol_Text));
+ window->DrawList->AddTriangleFilled(center + a, center + b, center + c, GetColorU32(ImGuiCol_Text));
}
void ImGui::RenderBullet(ImVec2 pos)
{
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
window->DrawList->AddCircleFilled(pos, GImGui->FontSize*0.20f, GetColorU32(ImGuiCol_Text), 8);
}
-void ImGui::RenderCheckMark(ImVec2 pos, ImU32 col)
+void ImGui::RenderCheckMark(ImVec2 pos, ImU32 col, float sz)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = g.CurrentWindow;
- ImVec2 a, b, c;
- float start_x = (float)(int)(g.FontSize * 0.307f + 0.5f);
- float rem_third = (float)(int)((g.FontSize - start_x) / 3.0f);
- a.x = pos.x + 0.5f + start_x;
- b.x = a.x + rem_third;
- c.x = a.x + rem_third * 3.0f;
- b.y = pos.y - 1.0f + (float)(int)(g.Font->Ascent * (g.FontSize / g.Font->FontSize) + 0.5f) + (float)(int)(g.Font->DisplayOffset.y);
- a.y = b.y - rem_third;
- c.y = b.y - rem_third * 2.0f;
+ float thickness = ImMax(sz / 5.0f, 1.0f);
+ sz -= thickness*0.5f;
+ pos += ImVec2(thickness*0.25f, thickness*0.25f);
- window->DrawList->PathLineTo(a);
- window->DrawList->PathLineTo(b);
- window->DrawList->PathLineTo(c);
- window->DrawList->PathStroke(col, false);
+ float third = sz / 3.0f;
+ float bx = pos.x + third;
+ float by = pos.y + sz - third*0.5f;
+ window->DrawList->PathLineTo(ImVec2(bx - third, by - third));
+ window->DrawList->PathLineTo(ImVec2(bx, by));
+ window->DrawList->PathLineTo(ImVec2(bx + third*2, by - third*2));
+ window->DrawList->PathStroke(col, false, thickness);
}
// Calculate text size. Text can be multi-line. Optionally ignore text after a ## marker.
@@ -3047,7 +3291,7 @@ ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_tex
return ImVec2(0.0f, font_size);
ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL);
- // Cancel out character spacing for the last character of a line (it is baked into glyph->XAdvance field)
+ // Cancel out character spacing for the last character of a line (it is baked into glyph->AdvanceX field)
const float font_scale = font_size / font->FontSize;
const float character_spacing_x = 1.0f * font_scale;
if (text_size.x > 0.0f)
@@ -3063,7 +3307,7 @@ ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_tex
void ImGui::CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = g.CurrentWindow;
if (g.LogEnabled)
{
// If logging is active, do not perform any clipping
@@ -3088,7 +3332,7 @@ void ImGui::CalcListClipping(int items_count, float items_height, int* out_items
// Find window given position, search front-to-back
// FIXME: Note that we have a lag here because WindowRectClipped is updated in Begin() so windows moved by user via SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is called, aka before the next Begin(). Moving window thankfully isn't affected.
-static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs)
+static ImGuiWindow* FindHoveredWindow(ImVec2 pos)
{
ImGuiContext& g = *GImGui;
for (int i = g.Windows.Size-1; i >= 0; i--)
@@ -3098,10 +3342,8 @@ static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs)
continue;
if (window->Flags & ImGuiWindowFlags_NoInputs)
continue;
- if (excluding_childs && (window->Flags & ImGuiWindowFlags_ChildWindow) != 0)
- continue;
- // Using the clipped AABB so a child window will typically be clipped by its parent.
+ // Using the clipped AABB, a child window will typically be clipped by its parent (not always)
ImRect bb(window->WindowRectClipped.Min - g.Style.TouchExtraPadding, window->WindowRectClipped.Max + g.Style.TouchExtraPadding);
if (bb.Contains(pos))
return window;
@@ -3115,78 +3357,82 @@ static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs)
bool ImGui::IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = g.CurrentWindow;
// Clip
ImRect rect_clipped(r_min, r_max);
if (clip)
- rect_clipped.Clip(window->ClipRect);
+ rect_clipped.ClipWith(window->ClipRect);
// Expand for touch input
const ImRect rect_for_touch(rect_clipped.Min - g.Style.TouchExtraPadding, rect_clipped.Max + g.Style.TouchExtraPadding);
return rect_for_touch.Contains(g.IO.MousePos);
}
-bool ImGui::IsMouseHoveringWindow()
-{
- ImGuiContext& g = *GImGui;
- return g.HoveredWindow == g.CurrentWindow;
-}
-
-bool ImGui::IsMouseHoveringAnyWindow()
+bool ImGui::IsAnyWindowHovered()
{
ImGuiContext& g = *GImGui;
return g.HoveredWindow != NULL;
}
-bool ImGui::IsPosHoveringAnyWindow(const ImVec2& pos)
+static bool IsKeyPressedMap(ImGuiKey key, bool repeat)
{
- return FindHoveredWindow(pos, false) != NULL;
+ const int key_index = GImGui->IO.KeyMap[key];
+ return (key_index >= 0) ? ImGui::IsKeyPressed(key_index, repeat) : false;
}
-static bool IsKeyPressedMap(ImGuiKey key, bool repeat)
+int ImGui::GetKeyIndex(ImGuiKey imgui_key)
{
- const int key_index = GImGui->IO.KeyMap[key];
- return ImGui::IsKeyPressed(key_index, repeat);
+ IM_ASSERT(imgui_key >= 0 && imgui_key < ImGuiKey_COUNT);
+ return GImGui->IO.KeyMap[imgui_key];
}
-int ImGui::GetKeyIndex(ImGuiKey key)
+// Note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]!
+bool ImGui::IsKeyDown(int user_key_index)
{
- IM_ASSERT(key >= 0 && key < ImGuiKey_COUNT);
- return GImGui->IO.KeyMap[key];
+ if (user_key_index < 0) return false;
+ IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(GImGui->IO.KeysDown));
+ return GImGui->IO.KeysDown[user_key_index];
}
-bool ImGui::IsKeyDown(int key_index)
+int ImGui::CalcTypematicPressedRepeatAmount(float t, float t_prev, float repeat_delay, float repeat_rate)
{
- if (key_index < 0) return false;
- IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(GImGui->IO.KeysDown));
- return GImGui->IO.KeysDown[key_index];
+ if (t == 0.0f)
+ return 1;
+ if (t <= repeat_delay || repeat_rate <= 0.0f)
+ return 0;
+ const int count = (int)((t - repeat_delay) / repeat_rate) - (int)((t_prev - repeat_delay) / repeat_rate);
+ return (count > 0) ? count : 0;
}
-bool ImGui::IsKeyPressed(int key_index, bool repeat)
+int ImGui::GetKeyPressedAmount(int key_index, float repeat_delay, float repeat_rate)
{
ImGuiContext& g = *GImGui;
if (key_index < 0) return false;
IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown));
const float t = g.IO.KeysDownDuration[key_index];
+ return CalcTypematicPressedRepeatAmount(t, t - g.IO.DeltaTime, repeat_delay, repeat_rate);
+}
+
+bool ImGui::IsKeyPressed(int user_key_index, bool repeat)
+{
+ ImGuiContext& g = *GImGui;
+ if (user_key_index < 0) return false;
+ IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
+ const float t = g.IO.KeysDownDuration[user_key_index];
if (t == 0.0f)
return true;
-
if (repeat && t > g.IO.KeyRepeatDelay)
- {
- float delay = g.IO.KeyRepeatDelay, rate = g.IO.KeyRepeatRate;
- if ((fmodf(t - delay, rate) > rate*0.5f) != (fmodf(t - delay - g.IO.DeltaTime, rate) > rate*0.5f))
- return true;
- }
+ return GetKeyPressedAmount(user_key_index, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate) > 0;
return false;
}
-bool ImGui::IsKeyReleased(int key_index)
+bool ImGui::IsKeyReleased(int user_key_index)
{
ImGuiContext& g = *GImGui;
- if (key_index < 0) return false;
- IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown));
- if (g.IO.KeysDownDurationPrev[key_index] >= 0.0f && !g.IO.KeysDown[key_index])
+ if (user_key_index < 0) return false;
+ IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
+ if (g.IO.KeysDownDurationPrev[user_key_index] >= 0.0f && !g.IO.KeysDown[user_key_index])
return true;
return false;
}
@@ -3255,6 +3501,15 @@ ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
return g.IO.MousePos;
}
+// We typically use ImVec2(-FLT_MAX,-FLT_MAX) to denote an invalid mouse position
+bool ImGui::IsMousePosValid(const ImVec2* mouse_pos)
+{
+ if (mouse_pos == NULL)
+ mouse_pos = &GImGui->IO.MousePos;
+ const float MOUSE_INVALID = -256000.0f;
+ return mouse_pos->x >= MOUSE_INVALID && mouse_pos->y >= MOUSE_INVALID;
+}
+
ImVec2 ImGui::GetMouseDragDelta(int button, float lock_threshold)
{
ImGuiContext& g = *GImGui;
@@ -3287,24 +3542,12 @@ void ImGui::SetMouseCursor(ImGuiMouseCursor cursor_type)
void ImGui::CaptureKeyboardFromApp(bool capture)
{
- GImGui->CaptureKeyboardNextFrame = capture ? 1 : 0;
+ GImGui->WantCaptureKeyboardNextFrame = capture ? 1 : 0;
}
void ImGui::CaptureMouseFromApp(bool capture)
{
- GImGui->CaptureMouseNextFrame = capture ? 1 : 0;
-}
-
-bool ImGui::IsItemHovered()
-{
- ImGuiWindow* window = GetCurrentWindowRead();
- return window->DC.LastItemHoveredAndUsable;
-}
-
-bool ImGui::IsItemHoveredRect()
-{
- ImGuiWindow* window = GetCurrentWindowRead();
- return window->DC.LastItemHoveredRect;
+ GImGui->WantCaptureMouseNextFrame = capture ? 1 : 0;
}
bool ImGui::IsItemActive()
@@ -3312,7 +3555,7 @@ bool ImGui::IsItemActive()
ImGuiContext& g = *GImGui;
if (g.ActiveId)
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = g.CurrentWindow;
return g.ActiveId == window->DC.LastItemId;
}
return false;
@@ -3320,7 +3563,7 @@ bool ImGui::IsItemActive()
bool ImGui::IsItemClicked(int mouse_button)
{
- return IsMouseClicked(mouse_button) && IsItemHovered();
+ return IsMouseClicked(mouse_button) && IsItemHovered(ImGuiHoveredFlags_Default);
}
bool ImGui::IsAnyItemHovered()
@@ -3336,8 +3579,7 @@ bool ImGui::IsAnyItemActive()
bool ImGui::IsItemVisible()
{
ImGuiWindow* window = GetCurrentWindowRead();
- ImRect r(window->ClipRect);
- return r.Overlaps(window->DC.LastItemRect);
+ return window->ClipRect.Overlaps(window->DC.LastItemRect);
}
// Allow last item to be overlapped by a subsequent item. Both may be activated during the same frame before the later one takes priority.
@@ -3376,11 +3618,37 @@ ImVec2 ImGui::CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge, float ou
return rect.GetClosestPoint(pos, on_edge);
}
-// Tooltip is stored and turned into a BeginTooltip()/EndTooltip() sequence at the end of the frame. Each call override previous value.
-void ImGui::SetTooltipV(const char* fmt, va_list args)
+static ImRect GetVisibleRect()
{
ImGuiContext& g = *GImGui;
- ImFormatStringV(g.Tooltip, IM_ARRAYSIZE(g.Tooltip), fmt, args);
+ if (g.IO.DisplayVisibleMin.x != g.IO.DisplayVisibleMax.x && g.IO.DisplayVisibleMin.y != g.IO.DisplayVisibleMax.y)
+ return ImRect(g.IO.DisplayVisibleMin, g.IO.DisplayVisibleMax);
+ return ImRect(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y);
+}
+
+// Not exposed publicly as BeginTooltip() because bool parameters are evil. Let's see if other needs arise first.
+void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, bool override_previous_tooltip)
+{
+ ImGuiContext& g = *GImGui;
+ char window_name[16];
+ ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip%02d", g.TooltipOverrideCount);
+ if (override_previous_tooltip)
+ if (ImGuiWindow* window = ImGui::FindWindowByName(window_name))
+ if (window->Active)
+ {
+ // Hide previous tooltips. We can't easily "reset" the content of a window so we create a new one.
+ window->HiddenFrames = 1;
+ ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip%02d", ++g.TooltipOverrideCount);
+ }
+ ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize;
+ ImGui::Begin(window_name, NULL, flags | extra_flags);
+}
+
+void ImGui::SetTooltipV(const char* fmt, va_list args)
+{
+ BeginTooltipEx(0, true);
+ TextV(fmt, args);
+ EndTooltip();
}
void ImGui::SetTooltip(const char* fmt, ...)
@@ -3391,18 +3659,9 @@ void ImGui::SetTooltip(const char* fmt, ...)
va_end(args);
}
-static ImRect GetVisibleRect()
-{
- ImGuiContext& g = *GImGui;
- if (g.IO.DisplayVisibleMin.x != g.IO.DisplayVisibleMax.x && g.IO.DisplayVisibleMin.y != g.IO.DisplayVisibleMax.y)
- return ImRect(g.IO.DisplayVisibleMin, g.IO.DisplayVisibleMax);
- return ImRect(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y);
-}
-
void ImGui::BeginTooltip()
{
- ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize;
- ImGui::Begin("##Tooltip", NULL, flags);
+ BeginTooltipEx(0, false);
}
void ImGui::EndTooltip()
@@ -3411,21 +3670,14 @@ void ImGui::EndTooltip()
ImGui::End();
}
-static bool IsPopupOpen(ImGuiID id)
-{
- ImGuiContext& g = *GImGui;
- return g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == id;
-}
-
// Mark popup as open (toggle toward open state).
// Popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block.
// Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
// One open popup per level of the popup hierarchy (NB: when assigning we reset the Window member of ImGuiPopupRef to NULL)
-void ImGui::OpenPopupEx(const char* str_id, bool reopen_existing)
+void ImGui::OpenPopupEx(ImGuiID id, bool reopen_existing)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
- ImGuiID id = window->GetID(str_id);
int current_stack_size = g.CurrentPopupStack.Size;
ImGuiPopupRef popup_ref = ImGuiPopupRef(id, window, window->GetID("##menus"), g.IO.MousePos); // Tagged as new ref because constructor sets Window to NULL (we are passing the ParentWindow info here)
if (g.OpenPopupStack.Size < current_stack_size + 1)
@@ -3434,24 +3686,30 @@ void ImGui::OpenPopupEx(const char* str_id, bool reopen_existing)
{
g.OpenPopupStack.resize(current_stack_size+1);
g.OpenPopupStack[current_stack_size] = popup_ref;
+
+ // When reopening a popup we first refocus its parent, otherwise if its parent is itself a popup it would get closed by CloseInactivePopups().
+ // This is equivalent to what ClosePopupToLevel() does.
+ if (g.OpenPopupStack[current_stack_size].PopupId == id)
+ FocusWindow(window);
}
}
void ImGui::OpenPopup(const char* str_id)
{
- ImGui::OpenPopupEx(str_id, false);
+ ImGuiContext& g = *GImGui;
+ OpenPopupEx(g.CurrentWindow->GetID(str_id), false);
}
-static void CloseInactivePopups()
+static void CloseInactivePopups(ImGuiWindow* ref_window)
{
ImGuiContext& g = *GImGui;
if (g.OpenPopupStack.empty())
return;
// When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it.
- // Don't close our own child popup windows
+ // Don't close our own child popup windows.
int n = 0;
- if (g.FocusedWindow)
+ if (ref_window)
{
for (n = 0; n < g.OpenPopupStack.Size; n++)
{
@@ -3462,24 +3720,25 @@ static void CloseInactivePopups()
if (popup.Window->Flags & ImGuiWindowFlags_ChildWindow)
continue;
+ // Trim the stack if popups are not direct descendant of the reference window (which is often the NavWindow)
bool has_focus = false;
for (int m = n; m < g.OpenPopupStack.Size && !has_focus; m++)
- has_focus = (g.OpenPopupStack[m].Window && g.OpenPopupStack[m].Window->RootWindow == g.FocusedWindow->RootWindow);
+ has_focus = (g.OpenPopupStack[m].Window && g.OpenPopupStack[m].Window->RootWindow == ref_window->RootWindow);
if (!has_focus)
break;
}
}
- if (n < g.OpenPopupStack.Size) // This test is not required but it allows to set a useful breakpoint on the line below
- g.OpenPopupStack.resize(n);
+ if (n < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the block below
+ ClosePopupToLevel(n);
}
static ImGuiWindow* GetFrontMostModalRootWindow()
{
ImGuiContext& g = *GImGui;
for (int n = g.OpenPopupStack.Size-1; n >= 0; n--)
- if (ImGuiWindow* front_most_popup = g.OpenPopupStack.Data[n].Window)
- if (front_most_popup->Flags & ImGuiWindowFlags_Modal)
- return front_most_popup;
+ if (ImGuiWindow* popup = g.OpenPopupStack.Data[n].Window)
+ if (popup->Flags & ImGuiWindowFlags_Modal)
+ return popup;
return NULL;
}
@@ -3493,7 +3752,7 @@ static void ClosePopupToLevel(int remaining)
g.OpenPopupStack.resize(remaining);
}
-static void ClosePopup(ImGuiID id)
+void ImGui::ClosePopup(ImGuiID id)
{
if (!IsPopupOpen(id))
return;
@@ -3506,7 +3765,7 @@ void ImGui::CloseCurrentPopup()
{
ImGuiContext& g = *GImGui;
int popup_idx = g.CurrentPopupStack.Size - 1;
- if (popup_idx < 0 || popup_idx > g.OpenPopupStack.Size || g.CurrentPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId)
+ if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.CurrentPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId)
return;
while (popup_idx > 0 && g.OpenPopupStack[popup_idx].Window && (g.OpenPopupStack[popup_idx].Window->Flags & ImGuiWindowFlags_ChildMenu))
popup_idx--;
@@ -3515,24 +3774,22 @@ void ImGui::CloseCurrentPopup()
static inline void ClearSetNextWindowData()
{
+ // FIXME-OPT
ImGuiContext& g = *GImGui;
g.SetNextWindowPosCond = g.SetNextWindowSizeCond = g.SetNextWindowContentSizeCond = g.SetNextWindowCollapsedCond = 0;
g.SetNextWindowSizeConstraint = g.SetNextWindowFocus = false;
}
-static bool BeginPopupEx(const char* str_id, ImGuiWindowFlags extra_flags)
+bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = g.CurrentWindow;
- const ImGuiID id = window->GetID(str_id);
if (!IsPopupOpen(id))
{
ClearSetNextWindowData(); // We behave like Begin() and need to consume those values
return false;
}
- ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
- ImGuiWindowFlags flags = extra_flags|ImGuiWindowFlags_Popup|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize;
+ ImGuiWindowFlags flags = extra_flags|ImGuiWindowFlags_Popup|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings;
char name[20];
if (flags & ImGuiWindowFlags_ChildMenu)
@@ -3540,23 +3797,34 @@ static bool BeginPopupEx(const char* str_id, ImGuiWindowFlags extra_flags)
else
ImFormatString(name, IM_ARRAYSIZE(name), "##popup_%08x", id); // Not recycling, so we can close/open during the same frame
- bool is_open = ImGui::Begin(name, NULL, flags);
- if (!(window->Flags & ImGuiWindowFlags_ShowBorders))
- g.CurrentWindow->Flags &= ~ImGuiWindowFlags_ShowBorders;
- if (!is_open) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
- ImGui::EndPopup();
+ bool is_open = Begin(name, NULL, flags);
+ if (!is_open) // NB: Begin can return false when the popup is completely clipped (e.g. zero size display)
+ EndPopup();
return is_open;
}
bool ImGui::BeginPopup(const char* str_id)
{
- if (GImGui->OpenPopupStack.Size <= GImGui->CurrentPopupStack.Size) // Early out for performance
+ ImGuiContext& g = *GImGui;
+ if (g.OpenPopupStack.Size <= g.CurrentPopupStack.Size) // Early out for performance
{
ClearSetNextWindowData(); // We behave like Begin() and need to consume those values
return false;
}
- return BeginPopupEx(str_id, ImGuiWindowFlags_ShowBorders);
+ return BeginPopupEx(g.CurrentWindow->GetID(str_id), ImGuiWindowFlags_AlwaysAutoResize);
+}
+
+bool ImGui::IsPopupOpen(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ return g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == id;
+}
+
+bool ImGui::IsPopupOpen(const char* str_id)
+{
+ ImGuiContext& g = *GImGui;
+ return g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == g.CurrentWindow->GetID(str_id);
}
bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags extra_flags)
@@ -3570,11 +3838,15 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags ext
return false;
}
+ // Center modal windows by default
+ if ((window->SetWindowPosAllowFlags & g.SetNextWindowPosCond) == 0)
+ SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
+
ImGuiWindowFlags flags = extra_flags|ImGuiWindowFlags_Popup|ImGuiWindowFlags_Modal|ImGuiWindowFlags_NoCollapse|ImGuiWindowFlags_NoSavedSettings;
- bool is_open = ImGui::Begin(name, p_open, flags);
+ bool is_open = Begin(name, p_open, flags);
if (!is_open || (p_open && !*p_open)) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
{
- ImGui::EndPopup();
+ EndPopup();
if (is_open)
ClosePopup(id);
return false;
@@ -3585,79 +3857,91 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags ext
void ImGui::EndPopup()
{
- ImGuiWindow* window = GetCurrentWindow();
- IM_ASSERT(window->Flags & ImGuiWindowFlags_Popup); // Mismatched BeginPopup()/EndPopup() calls
- IM_ASSERT(GImGui->CurrentPopupStack.Size > 0);
- ImGui::End();
- if (!(window->Flags & ImGuiWindowFlags_Modal))
- ImGui::PopStyleVar();
-}
-
-// This is a helper to handle the most simple case of associating one named popup to one given widget.
-// 1. If you have many possible popups (for different "instances" of a same widget, or for wholly different widgets), you may be better off handling
-// this yourself so you can store data relative to the widget that opened the popup instead of choosing different popup identifiers.
-// 2. If you want right-clicking on the same item to reopen the popup at new location, use the same code replacing IsItemHovered() with IsItemHoveredRect()
-// and passing true to the OpenPopupEx().
-// Because: hovering an item in a window below the popup won't normally trigger is hovering behavior/coloring. The pattern of ignoring the fact that
-// the item isn't interactable (because it is blocked by the active popup) may useful in some situation when e.g. large canvas as one item, content of menu
-// driven by click position.
+ ImGuiContext& g = *GImGui; (void)g;
+ IM_ASSERT(g.CurrentWindow->Flags & ImGuiWindowFlags_Popup); // Mismatched BeginPopup()/EndPopup() calls
+ IM_ASSERT(g.CurrentPopupStack.Size > 0);
+ End();
+}
+
+bool ImGui::OpenPopupOnItemClick(const char* str_id, int mouse_button)
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ if (IsMouseClicked(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+ {
+ ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
+ IM_ASSERT(id != 0); // However, you cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
+ OpenPopupEx(id, true);
+ return true;
+ }
+ return false;
+}
+
+// This is a helper to handle the simplest case of associating one named popup to one given widget.
+// You may want to handle this on user side if you have specific needs (e.g. tweaking IsItemHovered() parameters).
+// You can pass a NULL str_id to use the identifier of the last item.
bool ImGui::BeginPopupContextItem(const char* str_id, int mouse_button)
{
- if (IsItemHovered() && IsMouseClicked(mouse_button))
- OpenPopupEx(str_id, false);
- return BeginPopup(str_id);
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
+ IM_ASSERT(id != 0); // However, you cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
+ if (IsMouseClicked(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+ OpenPopupEx(id, true);
+ return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize);
}
-bool ImGui::BeginPopupContextWindow(bool also_over_items, const char* str_id, int mouse_button)
+bool ImGui::BeginPopupContextWindow(const char* str_id, int mouse_button, bool also_over_items)
{
- if (!str_id) str_id = "window_context_menu";
- if (IsMouseHoveringWindow() && IsMouseClicked(mouse_button))
- if (also_over_items || !IsAnyItemHovered())
- OpenPopupEx(str_id, true);
- return BeginPopup(str_id);
+ if (!str_id)
+ str_id = "window_context";
+ ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
+ if (IsMouseClicked(mouse_button))
+ if (IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+ if (also_over_items || !IsAnyItemHovered())
+ OpenPopupEx(id, true);
+ return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize);
}
bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button)
{
- if (!str_id) str_id = "void_context_menu";
- if (!IsMouseHoveringAnyWindow() && IsMouseClicked(mouse_button))
- OpenPopupEx(str_id, true);
- return BeginPopup(str_id);
+ if (!str_id)
+ str_id = "void_context";
+ ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
+ if (!IsAnyWindowHovered() && IsMouseClicked(mouse_button))
+ OpenPopupEx(id, true);
+ return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize);
}
static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
{
- ImGuiWindow* window = ImGui::GetCurrentWindow();
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* parent_window = ImGui::GetCurrentWindow();
ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow;
+ flags |= (parent_window->Flags & ImGuiWindowFlags_NoMove); // Inherit the NoMove flag
const ImVec2 content_avail = ImGui::GetContentRegionAvail();
ImVec2 size = ImFloor(size_arg);
+ const int auto_fit_axises = ((size.x == 0.0f) ? 0x01 : 0x00) | ((size.y == 0.0f) ? 0x02 : 0x00);
if (size.x <= 0.0f)
- {
- if (size.x == 0.0f)
- flags |= ImGuiWindowFlags_ChildWindowAutoFitX;
size.x = ImMax(content_avail.x, 4.0f) - fabsf(size.x); // Arbitrary minimum zero-ish child size of 4.0f (0.0f causing too much issues)
- }
if (size.y <= 0.0f)
- {
- if (size.y == 0.0f)
- flags |= ImGuiWindowFlags_ChildWindowAutoFitY;
size.y = ImMax(content_avail.y, 4.0f) - fabsf(size.y);
- }
- if (border)
- flags |= ImGuiWindowFlags_ShowBorders;
+
+ const float backup_border_size = g.Style.ChildBorderSize;
+ if (!border)
+ g.Style.ChildBorderSize = 0.0f;
flags |= extra_flags;
char title[256];
if (name)
- ImFormatString(title, IM_ARRAYSIZE(title), "%s.%s.%08X", window->Name, name, id);
+ ImFormatString(title, IM_ARRAYSIZE(title), "%s/%s_%08X", parent_window->Name, name, id);
else
- ImFormatString(title, IM_ARRAYSIZE(title), "%s.%08X", window->Name, id);
-
- bool ret = ImGui::Begin(title, NULL, size, -1.0f, flags);
+ ImFormatString(title, IM_ARRAYSIZE(title), "%s/%08X", parent_window->Name, id);
- if (!(window->Flags & ImGuiWindowFlags_ShowBorders))
- ImGui::GetCurrentWindow()->Flags &= ~ImGuiWindowFlags_ShowBorders;
+ ImGui::SetNextWindowSize(size);
+ bool ret = ImGui::Begin(title, NULL, flags);
+ ImGuiWindow* child_window = ImGui::GetCurrentWindow();
+ child_window->AutoFitChildAxises = auto_fit_axises;
+ g.Style.ChildBorderSize = backup_border_size;
return ret;
}
@@ -3686,17 +3970,16 @@ void ImGui::EndChild()
{
// When using auto-filling child window, we don't provide full width/height to ItemSize so that it doesn't feed back into automatic size-fitting.
ImVec2 sz = GetWindowSize();
- if (window->Flags & ImGuiWindowFlags_ChildWindowAutoFitX) // Arbitrary minimum zero-ish child size of 4.0f causes less trouble than a 0.0f
+ if (window->AutoFitChildAxises & 0x01) // Arbitrary minimum zero-ish child size of 4.0f causes less trouble than a 0.0f
sz.x = ImMax(4.0f, sz.x);
- if (window->Flags & ImGuiWindowFlags_ChildWindowAutoFitY)
+ if (window->AutoFitChildAxises & 0x02)
sz.y = ImMax(4.0f, sz.y);
-
ImGui::End();
- window = GetCurrentWindow();
- ImRect bb(window->DC.CursorPos, window->DC.CursorPos + sz);
+ ImGuiWindow* parent_window = GetCurrentWindow();
+ ImRect bb(parent_window->DC.CursorPos, parent_window->DC.CursorPos + sz);
ItemSize(sz);
- ItemAdd(bb, NULL);
+ ItemAdd(bb, 0);
}
}
@@ -3705,17 +3988,18 @@ bool ImGui::BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags ext
{
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
- ImGui::PushStyleColor(ImGuiCol_ChildWindowBg, style.Colors[ImGuiCol_FrameBg]);
- ImGui::PushStyleVar(ImGuiStyleVar_ChildWindowRounding, style.FrameRounding);
- ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
- return ImGui::BeginChild(id, size, (g.CurrentWindow->Flags & ImGuiWindowFlags_ShowBorders) ? true : false, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding | extra_flags);
+ PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]);
+ PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding);
+ PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize);
+ PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
+ return BeginChild(id, size, true, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding | extra_flags);
}
void ImGui::EndChildFrame()
{
- ImGui::EndChild();
- ImGui::PopStyleVar(2);
- ImGui::PopStyleColor();
+ EndChild();
+ PopStyleVar(3);
+ PopStyleColor();
}
// Save and compare stack sizes on Begin()/End() to detect usage errors
@@ -3724,12 +4008,12 @@ static void CheckStacksSize(ImGuiWindow* window, bool write)
// NOT checking: DC.ItemWidth, DC.AllowKeyboardFocus, DC.ButtonRepeat, DC.TextWrapPos (per window) to allow user to conveniently push once and not pop (they are cleared on Begin)
ImGuiContext& g = *GImGui;
int* p_backup = &window->DC.StackSizesBackup[0];
- { int current = window->IDStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushID/PopID Mismatch!"); p_backup++; } // User forgot PopID()
- { int current = window->DC.GroupStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "BeginGroup/EndGroup Mismatch!"); p_backup++; } // User forgot EndGroup()
- { int current = g.CurrentPopupStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch"); p_backup++; }// User forgot EndPopup()/EndMenu()
- { int current = g.ColorModifiers.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushStyleColor/PopStyleColor Mismatch!"); p_backup++; } // User forgot PopStyleColor()
- { int current = g.StyleModifiers.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushStyleVar/PopStyleVar Mismatch!"); p_backup++; } // User forgot PopStyleVar()
- { int current = g.FontStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushFont/PopFont Mismatch!"); p_backup++; } // User forgot PopFont()
+ { int current = window->IDStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushID/PopID or TreeNode/TreePop Mismatch!"); p_backup++; } // Too few or too many PopID()/TreePop()
+ { int current = window->DC.GroupStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "BeginGroup/EndGroup Mismatch!"); p_backup++; } // Too few or too many EndGroup()
+ { int current = g.CurrentPopupStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch"); p_backup++;}// Too few or too many EndMenu()/EndPopup()
+ { int current = g.ColorModifiers.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushStyleColor/PopStyleColor Mismatch!"); p_backup++; } // Too few or too many PopStyleColor()
+ { int current = g.StyleModifiers.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushStyleVar/PopStyleVar Mismatch!"); p_backup++; } // Too few or too many PopStyleVar()
+ { int current = g.FontStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushFont/PopFont Mismatch!"); p_backup++; } // Too few or too many PopFont()
IM_ASSERT(p_backup == window->DC.StackSizesBackup + IM_ARRAYSIZE(window->DC.StackSizesBackup));
}
@@ -3740,7 +4024,7 @@ static ImVec2 FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size,
// Clamp into visible area while not overlapping the cursor. Safety padding is optional if our popup size won't fit without it.
ImVec2 safe_padding = style.DisplaySafeAreaPadding;
ImRect r_outer(GetVisibleRect());
- r_outer.Reduce(ImVec2((size.x - r_outer.GetWidth() > safe_padding.x*2) ? safe_padding.x : 0.0f, (size.y - r_outer.GetHeight() > safe_padding.y*2) ? safe_padding.y : 0.0f));
+ r_outer.Expand(ImVec2((size.x - r_outer.GetWidth() > safe_padding.x*2) ? -safe_padding.x : 0.0f, (size.y - r_outer.GetHeight() > safe_padding.y*2) ? -safe_padding.y : 0.0f));
ImVec2 base_pos_clamped = ImClamp(base_pos, r_outer.Min, r_outer.Max - size);
for (int n = (*last_dir != -1) ? -1 : 0; n < 4; n++) // Last, Right, down, up, left. (Favor last used direction).
@@ -3761,15 +4045,18 @@ static ImVec2 FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size,
return pos;
}
+static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond flags, bool enabled)
+{
+ window->SetWindowPosAllowFlags = enabled ? (window->SetWindowPosAllowFlags | flags) : (window->SetWindowPosAllowFlags & ~flags);
+ window->SetWindowSizeAllowFlags = enabled ? (window->SetWindowSizeAllowFlags | flags) : (window->SetWindowSizeAllowFlags & ~flags);
+ window->SetWindowCollapsedAllowFlags = enabled ? (window->SetWindowCollapsedAllowFlags | flags) : (window->SetWindowCollapsedAllowFlags & ~flags);
+}
+
ImGuiWindow* ImGui::FindWindowByName(const char* name)
{
- // FIXME-OPT: Store sorted hashes -> pointers so we can do a bissection in a contiguous block
ImGuiContext& g = *GImGui;
ImGuiID id = ImHash(name, 0);
- for (int i = 0; i < g.Windows.Size; i++)
- if (g.Windows[i]->ID == id)
- return g.Windows[i];
- return NULL;
+ return (ImGuiWindow*)g.WindowsById.GetVoidPtr(id);
}
static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags)
@@ -3780,6 +4067,7 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
ImGuiWindow* window = (ImGuiWindow*)ImGui::MemAlloc(sizeof(ImGuiWindow));
IM_PLACEMENT_NEW(window) ImGuiWindow(name);
window->Flags = flags;
+ g.WindowsById.SetVoidPtr(window->ID, window);
if (flags & ImGuiWindowFlags_NoSavedSettings)
{
@@ -3793,27 +4081,15 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
window->PosFloat = ImVec2(60, 60);
window->Pos = ImVec2((float)(int)window->PosFloat.x, (float)(int)window->PosFloat.y);
- ImGuiIniData* settings = FindWindowSettings(name);
- if (!settings)
- {
- settings = AddWindowSettings(name);
- }
- else
- {
- window->SetWindowPosAllowFlags &= ~ImGuiSetCond_FirstUseEver;
- window->SetWindowSizeAllowFlags &= ~ImGuiSetCond_FirstUseEver;
- window->SetWindowCollapsedAllowFlags &= ~ImGuiSetCond_FirstUseEver;
- }
-
- if (settings->Pos.x != FLT_MAX)
+ if (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID))
{
+ SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false);
window->PosFloat = settings->Pos;
window->Pos = ImVec2((float)(int)window->PosFloat.x, (float)(int)window->PosFloat.y);
window->Collapsed = settings->Collapsed;
+ if (ImLengthSqr(settings->Size) > 0.00001f)
+ size = settings->Size;
}
-
- if (ImLengthSqr(settings->Size) > 0.00001f && !(flags & ImGuiWindowFlags_NoResize))
- size = settings->Size;
window->Size = window->SizeFull = size;
}
@@ -3838,7 +4114,7 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
return window;
}
-static void ApplySizeFullWithConstraint(ImGuiWindow* window, ImVec2 new_size)
+static ImVec2 CalcSizeFullWithConstraint(ImGuiWindow* window, ImVec2 new_size)
{
ImGuiContext& g = *GImGui;
if (g.SetNextWindowSizeConstraint)
@@ -3859,26 +4135,83 @@ static void ApplySizeFullWithConstraint(ImGuiWindow* window, ImVec2 new_size)
}
}
if (!(window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_AlwaysAutoResize)))
+ {
new_size = ImMax(new_size, g.Style.WindowMinSize);
- window->SizeFull = new_size;
+ new_size.y = ImMax(new_size.y, window->TitleBarHeight() + window->MenuBarHeight() + ImMax(0.0f, g.Style.WindowRounding - 1.0f)); // Reduce artifacts with very small windows
+ }
+ return new_size;
+}
+
+static ImVec2 CalcSizeAutoFit(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiStyle& style = g.Style;
+ ImGuiWindowFlags flags = window->Flags;
+ ImVec2 size_auto_fit;
+ if ((flags & ImGuiWindowFlags_Tooltip) != 0)
+ {
+ // Tooltip always resize. We keep the spacing symmetric on both axises for aesthetic purpose.
+ size_auto_fit = window->SizeContents;
+ }
+ else
+ {
+ // Handling case of auto fit window not fitting on the screen (on either axis): we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than DisplaySize-WindowPadding.
+ size_auto_fit = ImClamp(window->SizeContents, style.WindowMinSize, ImMax(style.WindowMinSize, g.IO.DisplaySize - g.Style.DisplaySafeAreaPadding));
+ ImVec2 size_auto_fit_after_constraint = CalcSizeFullWithConstraint(window, size_auto_fit);
+ if (size_auto_fit_after_constraint.x < window->SizeContents.x && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar))
+ size_auto_fit.y += style.ScrollbarSize;
+ if (size_auto_fit_after_constraint.y < window->SizeContents.y && !(flags & ImGuiWindowFlags_NoScrollbar))
+ size_auto_fit.x += style.ScrollbarSize;
+ }
+ return size_auto_fit;
+}
+
+static float GetScrollMaxX(ImGuiWindow* window)
+{
+ return ImMax(0.0f, window->SizeContents.x - (window->SizeFull.x - window->ScrollbarSizes.x));
+}
+
+static float GetScrollMaxY(ImGuiWindow* window)
+{
+ return ImMax(0.0f, window->SizeContents.y - (window->SizeFull.y - window->ScrollbarSizes.y));
+}
+
+static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window)
+{
+ ImVec2 scroll = window->Scroll;
+ float cr_x = window->ScrollTargetCenterRatio.x;
+ float cr_y = window->ScrollTargetCenterRatio.y;
+ if (window->ScrollTarget.x < FLT_MAX)
+ scroll.x = window->ScrollTarget.x - cr_x * (window->SizeFull.x - window->ScrollbarSizes.x);
+ if (window->ScrollTarget.y < FLT_MAX)
+ scroll.y = window->ScrollTarget.y - (1.0f - cr_y) * (window->TitleBarHeight() + window->MenuBarHeight()) - cr_y * (window->SizeFull.y - window->ScrollbarSizes.y);
+ scroll = ImMax(scroll, ImVec2(0.0f, 0.0f));
+ if (!window->Collapsed && !window->SkipItems)
+ {
+ scroll.x = ImMin(scroll.x, GetScrollMaxX(window));
+ scroll.y = ImMin(scroll.y, GetScrollMaxY(window));
+ }
+ return scroll;
+}
+
+static ImGuiCol GetWindowBgColorIdxFromFlags(ImGuiWindowFlags flags)
+{
+ if (flags & (ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup))
+ return ImGuiCol_PopupBg;
+ if (flags & ImGuiWindowFlags_ChildWindow)
+ return ImGuiCol_ChildBg;
+ return ImGuiCol_WindowBg;
}
// Push a new ImGui window to add widgets to.
// - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair.
// - Begin/End can be called multiple times during the frame with the same window name to append content.
-// - 'size_on_first_use' for a regular window denote the initial size for first-time creation (no saved data) and isn't that useful. Use SetNextWindowSize() prior to calling Begin() for more flexible window manipulation.
// - The window name is used as a unique identifier to preserve window information across frames (and save rudimentary information to the .ini file).
// You can use the "##" or "###" markers to use the same label with different id, or same id with different label. See documentation at the top of this file.
// - Return false when window is collapsed, so you can early out in your code. You always need to call ImGui::End() even if false is returned.
// - Passing 'bool* p_open' displays a Close button on the upper-right corner of the window, the pointed value will be set to false when the button is pressed.
-// - Passing non-zero 'size' is roughly equivalent to calling SetNextWindowSize(size, ImGuiSetCond_FirstUseEver) prior to calling Begin().
bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
{
- return ImGui::Begin(name, p_open, ImVec2(0.f, 0.f), -1.0f, flags);
-}
-
-bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha, ImGuiWindowFlags flags)
-{
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
IM_ASSERT(name != NULL); // Window name required
@@ -3893,59 +4226,65 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
ImGuiWindow* window = FindWindowByName(name);
if (!window)
{
+ ImVec2 size_on_first_use = (g.SetNextWindowSizeCond != 0) ? g.SetNextWindowSizeVal : ImVec2(0.0f, 0.0f); // Any condition flag will do since we are creating a new window here.
window = CreateNewWindow(name, size_on_first_use, flags);
window_is_new = true;
}
- const int current_frame = ImGui::GetFrameCount();
+ const int current_frame = g.FrameCount;
const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame);
if (first_begin_of_the_frame)
window->Flags = (ImGuiWindowFlags)flags;
else
flags = window->Flags;
+ // Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack
+ ImGuiWindow* parent_window = first_begin_of_the_frame ? (!g.CurrentWindowStack.empty() ? g.CurrentWindowStack.back() : NULL) : window->ParentWindow;
+ IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow));
+
// Add to stack
- ImGuiWindow* parent_window = !g.CurrentWindowStack.empty() ? g.CurrentWindowStack.back() : NULL;
g.CurrentWindowStack.push_back(window);
SetCurrentWindow(window);
CheckStacksSize(window, true);
- IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow));
- bool window_was_active = (window->LastFrameActive == current_frame - 1); // Not using !WasActive because the implicit "Debug" window would always toggle off->on
+ bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1); // Not using !WasActive because the implicit "Debug" window would always toggle off->on
if (flags & ImGuiWindowFlags_Popup)
{
ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size];
- window_was_active &= (window->PopupId == popup_ref.PopupId);
- window_was_active &= (window == popup_ref.Window);
+ window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed
+ window_just_activated_by_user |= (window != popup_ref.Window);
popup_ref.Window = window;
g.CurrentPopupStack.push_back(popup_ref);
window->PopupId = popup_ref.PopupId;
}
- const bool window_appearing_after_being_hidden = (window->HiddenFrames == 1);
+ const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFrames == 1);
+ window->Appearing = (window_just_activated_by_user || window_just_appearing_after_hidden_for_resize);
+ window->CloseButton = (p_open != NULL);
// Process SetNextWindow***() calls
+ if (window->Appearing)
+ SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, true);
bool window_pos_set_by_api = false, window_size_set_by_api = false;
if (g.SetNextWindowPosCond)
{
- const ImVec2 backup_cursor_pos = window->DC.CursorPos; // FIXME: not sure of the exact reason of this saving/restore anymore :( need to look into that.
- if (!window_was_active || window_appearing_after_being_hidden) window->SetWindowPosAllowFlags |= ImGuiSetCond_Appearing;
window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.SetNextWindowPosCond) != 0;
- if (window_pos_set_by_api && ImLengthSqr(g.SetNextWindowPosVal - ImVec2(-FLT_MAX,-FLT_MAX)) < 0.001f)
+ if (window_pos_set_by_api && ImLengthSqr(g.SetNextWindowPosPivot) > 0.00001f)
{
- window->SetWindowPosCenterWanted = true; // May be processed on the next frame if this is our first frame and we are measuring size
- window->SetWindowPosAllowFlags &= ~(ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing);
+ // May be processed on the next frame if this is our first frame and we are measuring size
+ // FIXME: Look into removing the branch so everything can go through this same code path for consistency.
+ window->SetWindowPosVal = g.SetNextWindowPosVal;
+ window->SetWindowPosPivot = g.SetNextWindowPosPivot;
+ window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
}
else
{
SetWindowPos(window, g.SetNextWindowPosVal, g.SetNextWindowPosCond);
}
- window->DC.CursorPos = backup_cursor_pos;
g.SetNextWindowPosCond = 0;
}
if (g.SetNextWindowSizeCond)
{
- if (!window_was_active || window_appearing_after_being_hidden) window->SetWindowSizeAllowFlags |= ImGuiSetCond_Appearing;
window_size_set_by_api = (window->SetWindowSizeAllowFlags & g.SetNextWindowSizeCond) != 0;
SetWindowSize(window, g.SetNextWindowSizeVal, g.SetNextWindowSizeCond);
g.SetNextWindowSizeCond = 0;
@@ -3961,33 +4300,30 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
}
if (g.SetNextWindowCollapsedCond)
{
- if (!window_was_active || window_appearing_after_being_hidden) window->SetWindowCollapsedAllowFlags |= ImGuiSetCond_Appearing;
SetWindowCollapsed(window, g.SetNextWindowCollapsedVal, g.SetNextWindowCollapsedCond);
g.SetNextWindowCollapsedCond = 0;
}
if (g.SetNextWindowFocus)
{
- ImGui::SetWindowFocus();
+ SetWindowFocus();
g.SetNextWindowFocus = false;
}
-
- // Update known root window (if we are a child window, otherwise window == window->RootWindow)
- int root_idx, root_non_popup_idx;
- for (root_idx = g.CurrentWindowStack.Size - 1; root_idx > 0; root_idx--)
- if (!(g.CurrentWindowStack[root_idx]->Flags & ImGuiWindowFlags_ChildWindow))
- break;
- for (root_non_popup_idx = root_idx; root_non_popup_idx > 0; root_non_popup_idx--)
- if (!(g.CurrentWindowStack[root_non_popup_idx]->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)))
- break;
- window->ParentWindow = parent_window;
- window->RootWindow = g.CurrentWindowStack[root_idx];
- window->RootNonPopupWindow = g.CurrentWindowStack[root_non_popup_idx]; // This is merely for displaying the TitleBgActive color.
+ if (window->Appearing)
+ SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false);
// When reusing window again multiple times a frame, just append content (don't need to setup again)
if (first_begin_of_the_frame)
{
+ // Initialize
+ window->ParentWindow = parent_window;
+ window->RootWindow = !(flags & ImGuiWindowFlags_ChildWindow) ? window : parent_window->RootWindow;
+ window->RootNonPopupWindow = !(flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) || (flags & ImGuiWindowFlags_Modal) ? window : parent_window->RootNonPopupWindow; // Used to display TitleBgActive color and for selecting which window to use for NavWindowing
+ //window->RootNavWindow = window;
+ //while (window->RootNavWindow->Flags & ImGuiWindowFlags_NavFlattened)
+ // window->RootNavWindow = window->RootNavWindow->ParentWindow;
+
window->Active = true;
- window->IndexWithinParent = 0;
+ window->OrderWithinParent = 0;
window->BeginCount = 0;
window->ClipRect = ImVec4(-FLT_MAX,-FLT_MAX,+FLT_MAX,+FLT_MAX);
window->LastFrameActive = current_frame;
@@ -4002,7 +4338,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
else
PushClipRect(fullscreen_rect.Min, fullscreen_rect.Max, true);
- if (!window_was_active)
+ if (window_just_activated_by_user)
{
// Popup first latch mouse position, will position itself when it appears next frame
window->AutoPosLastDirection = -1;
@@ -4018,8 +4354,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
if (g.HoveredWindow == window && IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max) && g.IO.MouseDoubleClicked[0])
{
window->Collapsed = !window->Collapsed;
- if (!(flags & ImGuiWindowFlags_NoSavedSettings))
- MarkIniSettingsDirty();
+ MarkIniSettingsDirty(window);
FocusWindow(window);
}
}
@@ -4030,14 +4365,15 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
// SIZE
- // Save contents size from last frame for auto-fitting (unless explicitly specified)
+ // Update contents size from last frame for auto-fitting (unless explicitly specified)
window->SizeContents.x = (float)(int)((window->SizeContentsExplicit.x != 0.0f) ? window->SizeContentsExplicit.x : ((window_is_new ? 0.0f : window->DC.CursorMaxPos.x - window->Pos.x) + window->Scroll.x));
window->SizeContents.y = (float)(int)((window->SizeContentsExplicit.y != 0.0f) ? window->SizeContentsExplicit.y : ((window_is_new ? 0.0f : window->DC.CursorMaxPos.y - window->Pos.y) + window->Scroll.y));
+ window->SizeContents += window->WindowPadding;
// Hide popup/tooltip window when first appearing while we measure size (because we recycle them)
if (window->HiddenFrames > 0)
window->HiddenFrames--;
- if ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0 && !window_was_active)
+ if ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0 && window_just_activated_by_user)
{
window->HiddenFrames = 1;
if (flags & ImGuiWindowFlags_AlwaysAutoResize)
@@ -4048,29 +4384,17 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
}
}
- // Lock window padding so that altering the ShowBorders flag for children doesn't have side-effects.
- window->WindowPadding = ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_ComboBox | ImGuiWindowFlags_Popup))) ? ImVec2(0,0) : style.WindowPadding;
-
- // Calculate auto-fit size
- ImVec2 size_auto_fit;
- if ((flags & ImGuiWindowFlags_Tooltip) != 0)
- {
- // Tooltip always resize. We keep the spacing symmetric on both axises for aesthetic purpose.
- size_auto_fit = window->SizeContents + window->WindowPadding - ImVec2(0.0f, style.ItemSpacing.y);
- }
- else
- {
- size_auto_fit = ImClamp(window->SizeContents + window->WindowPadding, style.WindowMinSize, ImMax(style.WindowMinSize, g.IO.DisplaySize - g.Style.DisplaySafeAreaPadding));
-
- // Handling case of auto fit window not fitting in screen on one axis, we are growing auto fit size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than DisplaySize-WindowPadding.
- if (size_auto_fit.x < window->SizeContents.x && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar))
- size_auto_fit.y += style.ScrollbarSize;
- if (size_auto_fit.y < window->SizeContents.y && !(flags & ImGuiWindowFlags_NoScrollbar))
- size_auto_fit.x += style.ScrollbarSize;
- size_auto_fit.y = ImMax(size_auto_fit.y - style.ItemSpacing.y, 0.0f);
- }
-
- // Handle automatic resize
+ // Lock window rounding, border size and rounding so that altering the border sizes for children doesn't have side-effects.
+ window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding;
+ window->WindowBorderSize = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildBorderSize : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
+ window->WindowPadding = style.WindowPadding;
+ if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_ComboBox | ImGuiWindowFlags_Popup)) && window->WindowBorderSize == 0.0f)
+ window->WindowPadding = ImVec2(0.0f, (flags & ImGuiWindowFlags_MenuBar) ? style.WindowPadding.y : 0.0f);
+ const float window_rounding = window->WindowRounding;
+ const float window_border_size = window->WindowBorderSize;
+
+ // Calculate auto-fit size, handle automatic resize
+ const ImVec2 size_auto_fit = CalcSizeAutoFit(window);
if (window->Collapsed)
{
// We still process initial auto-fit on collapsed windows to get a window width,
@@ -4080,61 +4404,75 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
if (window->AutoFitFramesY > 0)
window->SizeFull.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y;
}
- else
+ else if (!window_size_set_by_api)
{
- if ((flags & ImGuiWindowFlags_AlwaysAutoResize) && !window_size_set_by_api)
+ if (flags & ImGuiWindowFlags_AlwaysAutoResize)
{
window->SizeFull = size_auto_fit;
}
- else if ((window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0) && !window_size_set_by_api)
+ else if (window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
{
// Auto-fit only grows during the first few frames
if (window->AutoFitFramesX > 0)
window->SizeFull.x = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.x, size_auto_fit.x) : size_auto_fit.x;
if (window->AutoFitFramesY > 0)
window->SizeFull.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y;
- if (!(flags & ImGuiWindowFlags_NoSavedSettings))
- MarkIniSettingsDirty();
+ MarkIniSettingsDirty(window);
}
}
// Apply minimum/maximum window size constraints and final size
- ApplySizeFullWithConstraint(window, window->SizeFull);
+ window->SizeFull = CalcSizeFullWithConstraint(window, window->SizeFull);
window->Size = window->Collapsed ? window->TitleBarRect().GetSize() : window->SizeFull;
-
+ if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup))
+ {
+ IM_ASSERT(window_size_set_by_api); // Submitted by BeginChild()
+ window->Size = window->SizeFull;
+ }
+
+ // SCROLLBAR STATUS
+
+ // Update scrollbar status (based on the Size that was effective during last frame or the auto-resized Size). We need to do this before manual resize (below) is effective.
+ if (!window->Collapsed)
+ {
+ window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((window->SizeContents.y > window->SizeFull.y) && !(flags & ImGuiWindowFlags_NoScrollbar));
+ window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((window->SizeContents.x > window->SizeFull.x - (window->ScrollbarY ? style.ScrollbarSize : 0.0f) - window->WindowPadding.x) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar));
+ if (window->ScrollbarX && !window->ScrollbarY)
+ window->ScrollbarY = (window->SizeContents.y > window->SizeFull.y + style.ScrollbarSize) && !(flags & ImGuiWindowFlags_NoScrollbar);
+ window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f);
+ }
+
// POSITION
// Position child window
if (flags & ImGuiWindowFlags_ChildWindow)
{
- window->IndexWithinParent = parent_window->DC.ChildWindows.Size;
+ window->OrderWithinParent = parent_window->DC.ChildWindows.Size;
parent_window->DC.ChildWindows.push_back(window);
}
- if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup))
- {
+ if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_pos_set_by_api)
window->Pos = window->PosFloat = parent_window->DC.CursorPos;
- window->Size = window->SizeFull = size_on_first_use; // NB: argument name 'size_on_first_use' misleading here, it's really just 'size' as provided by user passed via BeginChild()->Begin().
- }
- bool window_pos_center = false;
- window_pos_center |= (window->SetWindowPosCenterWanted && window->HiddenFrames == 0);
- window_pos_center |= ((flags & ImGuiWindowFlags_Modal) && !window_pos_set_by_api && window_appearing_after_being_hidden);
- if (window_pos_center)
+ const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFrames == 0);
+ if (window_pos_with_pivot)
{
- // Center (any sort of window)
- SetWindowPos(window, ImMax(style.DisplaySafeAreaPadding, fullscreen_rect.GetCenter() - window->SizeFull * 0.5f), 0);
+ // Position given a pivot (e.g. for centering)
+ SetWindowPos(window, ImMax(style.DisplaySafeAreaPadding, window->SetWindowPosVal - window->SizeFull * window->SetWindowPosPivot), 0);
}
else if (flags & ImGuiWindowFlags_ChildMenu)
{
+ // Child menus typically request _any_ position within the parent menu item, and then our FindBestPopupWindowPos() function will move the new menu outside the parent bounds.
+ // This is how we end up with child menus appearing (most-commonly) on the right of the parent menu.
IM_ASSERT(window_pos_set_by_api);
+ float horizontal_overlap = style.ItemSpacing.x; // We want some overlap to convey the relative depth of each popup (currently the amount of overlap it is hard-coded to style.ItemSpacing.x, may need to introduce another style value).
ImRect rect_to_avoid;
if (parent_window->DC.MenuBarAppending)
rect_to_avoid = ImRect(-FLT_MAX, parent_window->Pos.y + parent_window->TitleBarHeight(), FLT_MAX, parent_window->Pos.y + parent_window->TitleBarHeight() + parent_window->MenuBarHeight());
else
- rect_to_avoid = ImRect(parent_window->Pos.x + style.ItemSpacing.x, -FLT_MAX, parent_window->Pos.x + parent_window->Size.x - style.ItemSpacing.x - parent_window->ScrollbarSizes.x, FLT_MAX); // We want some overlap to convey the relative depth of each popup (here hard-coded to 4)
+ rect_to_avoid = ImRect(parent_window->Pos.x + horizontal_overlap, -FLT_MAX, parent_window->Pos.x + parent_window->Size.x - horizontal_overlap - parent_window->ScrollbarSizes.x, FLT_MAX);
window->PosFloat = FindBestPopupWindowPos(window->PosFloat, window->Size, &window->AutoPosLastDirection, rect_to_avoid);
}
- else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_appearing_after_being_hidden)
+ else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize)
{
ImRect rect_to_avoid(window->PosFloat.x - 1, window->PosFloat.y - 1, window->PosFloat.x + 1, window->PosFloat.y + 1);
window->PosFloat = FindBestPopupWindowPos(window->PosFloat, window->Size, &window->AutoPosLastDirection, rect_to_avoid);
@@ -4143,10 +4481,11 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
// Position tooltip (always follows mouse)
if ((flags & ImGuiWindowFlags_Tooltip) != 0 && !window_pos_set_by_api)
{
- ImRect rect_to_avoid(g.IO.MousePos.x - 16, g.IO.MousePos.y - 8, g.IO.MousePos.x + 24, g.IO.MousePos.y + 24); // FIXME: Completely hard-coded. Perhaps center on cursor hit-point instead?
- window->PosFloat = FindBestPopupWindowPos(g.IO.MousePos, window->Size, &window->AutoPosLastDirection, rect_to_avoid);
+ ImVec2 ref_pos = g.IO.MousePos;
+ ImRect rect_to_avoid(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 24, ref_pos.y + 24); // FIXME: Completely hard-coded. Perhaps center on cursor hit-point instead?
+ window->PosFloat = FindBestPopupWindowPos(ref_pos, window->Size, &window->AutoPosLastDirection, rect_to_avoid);
if (window->AutoPosLastDirection == -1)
- window->PosFloat = g.IO.MousePos + ImVec2(2,2); // If there's not enough room, for tooltip we prefer avoiding the cursor at all cost even if it means that part of the tooltip won't be visible.
+ window->PosFloat = ref_pos + ImVec2(2,2); // If there's not enough room, for tooltip we prefer avoiding the cursor at all cost even if it means that part of the tooltip won't be visible.
}
// Clamp position so it stays visible
@@ -4174,20 +4513,8 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
window->FocusIdxAllRequestNext = window->FocusIdxTabRequestNext = INT_MAX;
// Apply scrolling
- if (window->ScrollTarget.x < FLT_MAX)
- {
- window->Scroll.x = window->ScrollTarget.x;
- window->ScrollTarget.x = FLT_MAX;
- }
- if (window->ScrollTarget.y < FLT_MAX)
- {
- float center_ratio = window->ScrollTargetCenterRatio.y;
- window->Scroll.y = window->ScrollTarget.y - ((1.0f - center_ratio) * (window->TitleBarHeight() + window->MenuBarHeight())) - (center_ratio * window->SizeFull.y);
- window->ScrollTarget.y = FLT_MAX;
- }
- window->Scroll = ImMax(window->Scroll, ImVec2(0.0f, 0.0f));
- if (!window->Collapsed && !window->SkipItems)
- window->Scroll = ImMin(window->Scroll, ImMax(ImVec2(0.0f, 0.0f), window->SizeContents - window->SizeFull + window->ScrollbarSizes));
+ window->Scroll = CalcNextScrollFromScrollTargetAndClamp(window);
+ window->ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
// Modal window darkens what is behind them
if ((flags & ImGuiWindowFlags_Modal) != 0 && window == GetFrontMostModalRootWindow())
@@ -4195,11 +4522,13 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
// Draw window + handle manual resize
ImRect title_bar_rect = window->TitleBarRect();
- const float window_rounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildWindowRounding : style.WindowRounding;
if (window->Collapsed)
{
- // Draw title bar only
- RenderFrame(title_bar_rect.GetTL(), title_bar_rect.GetBR(), GetColorU32(ImGuiCol_TitleBgCollapsed), true, window_rounding);
+ // Title bar only
+ float backup_border_size = style.FrameBorderSize;
+ g.Style.FrameBorderSize = window->WindowBorderSize;
+ RenderFrame(title_bar_rect.Min, title_bar_rect.Max, GetColorU32(ImGuiCol_TitleBgCollapsed), true, window_rounding);
+ g.Style.FrameBorderSize = backup_border_size;
}
else
{
@@ -4208,95 +4537,79 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
if (!(flags & ImGuiWindowFlags_AlwaysAutoResize) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && !(flags & ImGuiWindowFlags_NoResize))
{
// Manual resize
+ // Using the FlattenChilds button flag, we make the resize button accessible even if we are hovering over a child window
const ImVec2 br = window->Rect().GetBR();
- const ImRect resize_rect(br - ImVec2(resize_corner_size * 0.75f, resize_corner_size * 0.75f), br);
+ const ImRect resize_rect(br - ImFloor(ImVec2(resize_corner_size * 0.75f, resize_corner_size * 0.75f)), br);
const ImGuiID resize_id = window->GetID("#RESIZE");
bool hovered, held;
ButtonBehavior(resize_rect, resize_id, &hovered, &held, ImGuiButtonFlags_FlattenChilds);
resize_col = GetColorU32(held ? ImGuiCol_ResizeGripActive : hovered ? ImGuiCol_ResizeGripHovered : ImGuiCol_ResizeGrip);
-
if (hovered || held)
g.MouseCursor = ImGuiMouseCursor_ResizeNWSE;
+ ImVec2 size_target(FLT_MAX,FLT_MAX);
if (g.HoveredWindow == window && held && g.IO.MouseDoubleClicked[0])
{
// Manual auto-fit when double-clicking
- ApplySizeFullWithConstraint(window, size_auto_fit);
- if (!(flags & ImGuiWindowFlags_NoSavedSettings))
- MarkIniSettingsDirty();
+ size_target = size_auto_fit;
ClearActiveID();
}
else if (held)
{
// We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position
- ApplySizeFullWithConstraint(window, (g.IO.MousePos - g.ActiveIdClickOffset + resize_rect.GetSize()) - window->Pos);
- if (!(flags & ImGuiWindowFlags_NoSavedSettings))
- MarkIniSettingsDirty();
+ size_target = (g.IO.MousePos - g.ActiveIdClickOffset - window->Pos) + resize_rect.GetSize();
}
+ if (size_target.x != FLT_MAX && size_target.y != FLT_MAX)
+ {
+ window->SizeFull = CalcSizeFullWithConstraint(window, size_target);
+ MarkIniSettingsDirty(window);
+ }
window->Size = window->SizeFull;
title_bar_rect = window->TitleBarRect();
}
- // Scrollbars
- window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((window->SizeContents.y > window->Size.y + style.ItemSpacing.y) && !(flags & ImGuiWindowFlags_NoScrollbar));
- window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((window->SizeContents.x > window->Size.x - (window->ScrollbarY ? style.ScrollbarSize : 0.0f) - window->WindowPadding.x) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar));
- window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f);
- window->BorderSize = (flags & ImGuiWindowFlags_ShowBorders) ? 1.0f : 0.0f;
-
// Window background, Default Alpha
- ImGuiCol bg_color_idx = ImGuiCol_WindowBg;
- if ((flags & ImGuiWindowFlags_ComboBox) != 0)
- bg_color_idx = ImGuiCol_ComboBg;
- else if ((flags & ImGuiWindowFlags_Tooltip) != 0 || (flags & ImGuiWindowFlags_Popup) != 0)
- bg_color_idx = ImGuiCol_PopupBg;
- else if ((flags & ImGuiWindowFlags_ChildWindow) != 0)
- bg_color_idx = ImGuiCol_ChildWindowBg;
- ImVec4 bg_color = style.Colors[bg_color_idx];
- if (bg_alpha >= 0.0f)
- bg_color.w = bg_alpha;
- bg_color.w *= style.Alpha;
- if (bg_color.w > 0.0f)
- window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, ColorConvertFloat4ToU32(bg_color), window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImGuiCorner_All : ImGuiCorner_BottomLeft|ImGuiCorner_BottomRight);
+ ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
+ window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot);
// Title bar
+ const bool window_is_focused = g.NavWindow && window->RootNonPopupWindow == g.NavWindow->RootNonPopupWindow;
if (!(flags & ImGuiWindowFlags_NoTitleBar))
- window->DrawList->AddRectFilled(title_bar_rect.GetTL(), title_bar_rect.GetBR(), GetColorU32((g.FocusedWindow && window->RootNonPopupWindow == g.FocusedWindow->RootNonPopupWindow) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg), window_rounding, ImGuiCorner_TopLeft|ImGuiCorner_TopRight);
+ window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, GetColorU32(window_is_focused ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg), window_rounding, ImDrawCornerFlags_Top);
// Menu bar
if (flags & ImGuiWindowFlags_MenuBar)
{
ImRect menu_bar_rect = window->MenuBarRect();
- if (flags & ImGuiWindowFlags_ShowBorders)
- window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border));
- window->DrawList->AddRectFilled(menu_bar_rect.GetTL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImGuiCorner_TopLeft|ImGuiCorner_TopRight);
+ menu_bar_rect.ClipWith(window->Rect()); // Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them.
+ window->DrawList->AddRectFilled(menu_bar_rect.Min, menu_bar_rect.Max, GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImDrawCornerFlags_Top);
+ if (style.FrameBorderSize > 0.0f && menu_bar_rect.Max.y < window->Pos.y + window->Size.y)
+ window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border), style.FrameBorderSize);
}
// Scrollbars
if (window->ScrollbarX)
- Scrollbar(window, true);
+ Scrollbar(ImGuiLayoutType_Horizontal);
if (window->ScrollbarY)
- Scrollbar(window, false);
+ Scrollbar(ImGuiLayoutType_Vertical);
// Render resize grip
// (after the input handling so we don't have a frame of latency)
if (!(flags & ImGuiWindowFlags_NoResize))
{
const ImVec2 br = window->Rect().GetBR();
- window->DrawList->PathLineTo(br + ImVec2(-resize_corner_size, -window->BorderSize));
- window->DrawList->PathLineTo(br + ImVec2(-window->BorderSize, -resize_corner_size));
- window->DrawList->PathArcToFast(ImVec2(br.x - window_rounding - window->BorderSize, br.y - window_rounding - window->BorderSize), window_rounding, 0, 3);
- window->DrawList->PathFill(resize_col);
+ window->DrawList->PathLineTo(br + ImVec2(-resize_corner_size, -window_border_size));
+ window->DrawList->PathLineTo(br + ImVec2(-window_border_size, -resize_corner_size));
+ window->DrawList->PathArcToFast(ImVec2(br.x - window_rounding - window_border_size, br.y - window_rounding - window_border_size), window_rounding, 0, 3);
+ window->DrawList->PathFillConvex(resize_col);
}
// Borders
- if (flags & ImGuiWindowFlags_ShowBorders)
- {
- window->DrawList->AddRect(window->Pos+ImVec2(1,1), window->Pos+window->Size+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), window_rounding);
- window->DrawList->AddRect(window->Pos, window->Pos+window->Size, GetColorU32(ImGuiCol_Border), window_rounding);
- if (!(flags & ImGuiWindowFlags_NoTitleBar))
- window->DrawList->AddLine(title_bar_rect.GetBL()+ImVec2(1,0), title_bar_rect.GetBR()-ImVec2(1,0), GetColorU32(ImGuiCol_Border));
- }
+ if (window_border_size > 0.0f)
+ window->DrawList->AddRect(window->Pos, window->Pos+window->Size, GetColorU32(ImGuiCol_Border), window_rounding, ImDrawCornerFlags_All, window_border_size);
+ if (style.FrameBorderSize > 0 && !(flags & ImGuiWindowFlags_NoTitleBar))
+ window->DrawList->AddLine(title_bar_rect.GetBL()+ImVec2(1,-1), title_bar_rect.GetBR()+ImVec2(-1,-1), GetColorU32(ImGuiCol_Border), style.FrameBorderSize);
}
// Update ContentsRegionMax. All the variable it depends on are set above in this function.
@@ -4306,6 +4619,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
window->ContentsRegionRect.Max.y = -window->Scroll.y - window->WindowPadding.y + (window->SizeContentsExplicit.y != 0.0f ? window->SizeContentsExplicit.y : (window->Size.y - window->ScrollbarSizes.y));
// Setup drawing context
+ // (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.)
window->DC.IndentX = 0.0f + window->WindowPadding.x - window->Scroll.x;
window->DC.GroupOffsetX = 0.0f;
window->DC.ColumnsOffsetX = 0.0f;
@@ -4320,23 +4634,27 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f;
window->DC.ChildWindows.resize(0);
window->DC.LayoutType = ImGuiLayoutType_Vertical;
+ window->DC.ItemFlags = ImGuiItemFlags_Default_;
window->DC.ItemWidth = window->ItemWidthDefault;
window->DC.TextWrapPos = -1.0f; // disabled
- window->DC.AllowKeyboardFocus = true;
- window->DC.ButtonRepeat = false;
+ window->DC.ItemFlagsStack.resize(0);
window->DC.ItemWidthStack.resize(0);
- window->DC.AllowKeyboardFocusStack.resize(0);
- window->DC.ButtonRepeatStack.resize(0);
window->DC.TextWrapPosStack.resize(0);
window->DC.ColumnsCurrent = 0;
window->DC.ColumnsCount = 1;
window->DC.ColumnsStartPosY = window->DC.CursorPos.y;
+ window->DC.ColumnsStartMaxPosX = window->DC.CursorMaxPos.x;
window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.ColumnsStartPosY;
window->DC.TreeDepth = 0;
window->DC.StateStorage = &window->StateStorage;
window->DC.GroupStack.resize(0);
- window->DC.ColorEditMode = ImGuiColorEditMode_UserSelect;
- window->MenuColumns.Update(3, style.ItemSpacing.x, !window_was_active);
+ window->MenuColumns.Update(3, style.ItemSpacing.x, window_just_activated_by_user);
+
+ if ((flags & ImGuiWindowFlags_ChildWindow) && (window->DC.ItemFlags != parent_window->DC.ItemFlags))
+ {
+ window->DC.ItemFlags = parent_window->DC.ItemFlags;
+ window->DC.ItemFlagsStack.push_back(window->DC.ItemFlags);
+ }
if (window->AutoFitFramesX > 0)
window->AutoFitFramesX--;
@@ -4344,25 +4662,30 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
window->AutoFitFramesY--;
// New windows appears in front (we need to do that AFTER setting DC.CursorStartPos so our initial navigation reference rectangle can start around there)
- if (!window_was_active && !(flags & ImGuiWindowFlags_NoFocusOnAppearing))
+ if (window_just_activated_by_user && !(flags & ImGuiWindowFlags_NoFocusOnAppearing))
if (!(flags & (ImGuiWindowFlags_ChildWindow|ImGuiWindowFlags_Tooltip)) || (flags & ImGuiWindowFlags_Popup))
FocusWindow(window);
// Title bar
if (!(flags & ImGuiWindowFlags_NoTitleBar))
{
+ // Collapse button
+ if (!(flags & ImGuiWindowFlags_NoCollapse))
+ {
+ RenderTriangle(window->Pos + style.FramePadding, window->Collapsed ? ImGuiDir_Right : ImGuiDir_Down, 1.0f);
+ }
+
+ // Close button
if (p_open != NULL)
{
- const float pad = 2.0f;
- const float rad = (window->TitleBarHeight() - pad*2.0f) * 0.5f;
- if (CloseButton(window->GetID("#CLOSE"), window->Rect().GetTR() + ImVec2(-pad - rad, pad + rad), rad))
+ const float PAD = 2.0f;
+ const float rad = (window->TitleBarHeight() - PAD*2.0f) * 0.5f;
+ if (CloseButton(window->GetID("#CLOSE"), window->Rect().GetTR() + ImVec2(-PAD - rad, PAD + rad), rad))
*p_open = false;
}
+ // Title text (FIXME: refactor text alignment facilities along with RenderText helpers)
const ImVec2 text_size = CalcTextSize(name, NULL, true);
- if (!(flags & ImGuiWindowFlags_NoCollapse))
- RenderCollapseTriangle(window->Pos + style.FramePadding, !window->Collapsed, 1.0f);
-
ImVec2 text_min = window->Pos;
ImVec2 text_max = window->Pos + ImVec2(window->Size.x, style.FramePadding.y*2 + text_size.y);
ImRect clip_rect;
@@ -4378,7 +4701,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
// Save clipped aabb so we can access it in constant-time in FindHoveredWindow()
window->WindowRectClipped = window->Rect();
- window->WindowRectClipped.Clip(window->ClipRect);
+ window->WindowRectClipped.ClipWith(window->ClipRect);
// Pressing CTRL+C while holding on a window copy its content to the clipboard
// This works but 1. doesn't handle multiple Begin/End pairs, 2. recursing into another Begin/End pair - so we need to work that out and add better logging scope.
@@ -4388,23 +4711,36 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
if (g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_C))
ImGui::LogToClipboard();
*/
+
+ // Inner rectangle
+ // We set this up after processing the resize grip so that our clip rectangle doesn't lag by a frame
+ // Note that if our window is collapsed we will end up with a null clipping rectangle which is the correct behavior.
+ window->InnerRect.Min.x = title_bar_rect.Min.x;
+ window->InnerRect.Min.y = title_bar_rect.Max.y + window->MenuBarHeight();
+ window->InnerRect.Max.x = window->Pos.x + window->Size.x - window->ScrollbarSizes.x;
+ window->InnerRect.Max.y = window->Pos.y + window->Size.y - window->ScrollbarSizes.y;
+ //window->DrawList->AddRect(window->InnerRect.Min, window->InnerRect.Max, IM_COL32_WHITE);
+
+ // After Begin() we fill the last item / hovered data using the title bar data. Make that a standard behavior (to allow usage of context menus on title bar only, etc.).
+ window->DC.LastItemId = window->MoveId;
+ window->DC.LastItemRect = title_bar_rect;
+ window->DC.LastItemRectHoveredRect = IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false);
}
// Inner clipping rectangle
- // We set this up after processing the resize grip so that our clip rectangle doesn't lag by a frame
- // Note that if our window is collapsed we will end up with a null clipping rectangle which is the correct behavior.
- const ImRect title_bar_rect = window->TitleBarRect();
- const float border_size = window->BorderSize;
- ImRect clip_rect; // Force round to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
- clip_rect.Min.x = ImFloor(0.5f + title_bar_rect.Min.x + ImMax(border_size, ImFloor(window->WindowPadding.x*0.5f)));
- clip_rect.Min.y = ImFloor(0.5f + title_bar_rect.Max.y + window->MenuBarHeight() + border_size);
- clip_rect.Max.x = ImFloor(0.5f + window->Pos.x + window->Size.x - window->ScrollbarSizes.x - ImMax(border_size, ImFloor(window->WindowPadding.x*0.5f)));
- clip_rect.Max.y = ImFloor(0.5f + window->Pos.y + window->Size.y - window->ScrollbarSizes.y - border_size);
+ // Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
+ const float border_size = window->WindowBorderSize;
+ ImRect clip_rect;
+ clip_rect.Min.x = ImFloor(0.5f + window->InnerRect.Min.x + ImMax(border_size, ImFloor(window->WindowPadding.x*0.5f)));
+ clip_rect.Min.y = ImFloor(0.5f + window->InnerRect.Min.y + border_size);
+ clip_rect.Max.x = ImFloor(0.5f + window->InnerRect.Max.x - ImMax(border_size, ImFloor(window->WindowPadding.x*0.5f)));
+ clip_rect.Max.y = ImFloor(0.5f + window->InnerRect.Max.y - border_size);
PushClipRect(clip_rect.Min, clip_rect.Max, true);
- // Clear 'accessed' flag last thing
+ // Clear 'accessed' flag last thing (After PushClipRect which will set the flag. We want the flag to stay false when the default "Debug" window is unused)
if (first_begin_of_the_frame)
- window->Accessed = false;
+ window->WriteAccessed = false;
+
window->BeginCount++;
g.SetNextWindowSizeConstraint = false;
@@ -4431,12 +4767,39 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
return !window->SkipItems;
}
+// Old Begin() API with 5 parameters, avoid calling this version directly! Use SetNextWindowSize()+Begin() instead.
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha_override, ImGuiWindowFlags flags)
+{
+ // Old API feature: we could pass the initial window size as a parameter, however this was very misleading because in most cases it would only affect the window when it didn't have storage in the .ini file.
+ if (size_on_first_use.x != 0.0f || size_on_first_use.y != 0.0f)
+ SetNextWindowSize(size_on_first_use, ImGuiCond_FirstUseEver);
+
+ // Old API feature: we could override the window background alpha with a parameter. This is actually tricky to reproduce manually because:
+ // (1) there are multiple variants of WindowBg (popup, tooltip, etc.) and (2) you can't call PushStyleColor before Begin and PopStyleColor just after Begin() because of how CheckStackSizes() behave.
+ // The user-side solution is to do backup = GetStyleColorVec4(ImGuiCol_xxxBG), PushStyleColor(ImGuiCol_xxxBg), Begin, PushStyleColor(ImGuiCol_xxxBg, backup), [...], PopStyleColor(), End(); PopStyleColor() - which is super awkward.
+ // The alpha override was rarely used but for now we'll leave the Begin() variant around for a bit. We may either lift the constraint on CheckStackSizes() either add a SetNextWindowBgAlpha() helper that does it magically.
+ ImGuiContext& g = *GImGui;
+ const ImGuiCol bg_color_idx = GetWindowBgColorIdxFromFlags(flags);
+ const ImVec4 bg_color_backup = g.Style.Colors[bg_color_idx];
+ if (bg_alpha_override >= 0.0f)
+ g.Style.Colors[bg_color_idx].w = bg_alpha_override;
+
+ bool ret = Begin(name, p_open, flags);
+
+ if (bg_alpha_override >= 0.0f)
+ g.Style.Colors[bg_color_idx] = bg_color_backup;
+ return ret;
+}
+#endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+
void ImGui::End()
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
- Columns(1, "#CloseColumns");
+ if (window->DC.ColumnsCount != 1) // close columns set if any is open
+ EndColumns();
PopClipRect(); // inner window clip rectangle
// Stop logging
@@ -4457,9 +4820,12 @@ void ImGui::End()
// - We handle absolute seeking (when first clicking outside the grab) and relative manipulation (afterward or when clicking inside the grab)
// - We store values as normalized ratio and in a form that allows the window content to change while we are holding on a scrollbar
// - We handle both horizontal and vertical scrollbars, which makes the terminology not ideal.
-static void Scrollbar(ImGuiWindow* window, bool horizontal)
+void ImGui::Scrollbar(ImGuiLayoutType direction)
{
ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ const bool horizontal = (direction == ImGuiLayoutType_Horizontal);
const ImGuiStyle& style = g.Style;
const ImGuiID id = window->GetID(horizontal ? "#SCROLLX" : "#SCROLLY");
@@ -4467,38 +4833,41 @@ static void Scrollbar(ImGuiWindow* window, bool horizontal)
bool other_scrollbar = (horizontal ? window->ScrollbarY : window->ScrollbarX);
float other_scrollbar_size_w = other_scrollbar ? style.ScrollbarSize : 0.0f;
const ImRect window_rect = window->Rect();
- const float border_size = window->BorderSize;
+ const float border_size = window->WindowBorderSize;
ImRect bb = horizontal
? ImRect(window->Pos.x + border_size, window_rect.Max.y - style.ScrollbarSize, window_rect.Max.x - other_scrollbar_size_w - border_size, window_rect.Max.y - border_size)
: ImRect(window_rect.Max.x - style.ScrollbarSize, window->Pos.y + border_size, window_rect.Max.x - border_size, window_rect.Max.y - other_scrollbar_size_w - border_size);
if (!horizontal)
bb.Min.y += window->TitleBarHeight() + ((window->Flags & ImGuiWindowFlags_MenuBar) ? window->MenuBarHeight() : 0.0f);
+ if (bb.GetWidth() <= 0.0f || bb.GetHeight() <= 0.0f)
+ return;
- float window_rounding = (window->Flags & ImGuiWindowFlags_ChildWindow) ? style.ChildWindowRounding : style.WindowRounding;
int window_rounding_corners;
if (horizontal)
- window_rounding_corners = ImGuiCorner_BottomLeft | (other_scrollbar ? 0 : ImGuiCorner_BottomRight);
+ window_rounding_corners = ImDrawCornerFlags_BotLeft | (other_scrollbar ? 0 : ImDrawCornerFlags_BotRight);
else
- window_rounding_corners = (((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImGuiCorner_TopRight : 0) | (other_scrollbar ? 0 : ImGuiCorner_BottomRight);
- window->DrawList->AddRectFilled(bb.Min, bb.Max, ImGui::GetColorU32(ImGuiCol_ScrollbarBg), window_rounding, window_rounding_corners);
- bb.Reduce(ImVec2(ImClamp((float)(int)((bb.Max.x - bb.Min.x - 2.0f) * 0.5f), 0.0f, 3.0f), ImClamp((float)(int)((bb.Max.y - bb.Min.y - 2.0f) * 0.5f), 0.0f, 3.0f)));
+ window_rounding_corners = (((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImDrawCornerFlags_TopRight : 0) | (other_scrollbar ? 0 : ImDrawCornerFlags_BotRight);
+ window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_ScrollbarBg), window->WindowRounding, window_rounding_corners);
+ bb.Expand(ImVec2(-ImClamp((float)(int)((bb.Max.x - bb.Min.x - 2.0f) * 0.5f), 0.0f, 3.0f), -ImClamp((float)(int)((bb.Max.y - bb.Min.y - 2.0f) * 0.5f), 0.0f, 3.0f)));
- // V denote the main axis of the scrollbar
+ // V denote the main, longer axis of the scrollbar (= height for a vertical scrollbar)
float scrollbar_size_v = horizontal ? bb.GetWidth() : bb.GetHeight();
float scroll_v = horizontal ? window->Scroll.x : window->Scroll.y;
- float win_size_avail_v = (horizontal ? window->Size.x : window->Size.y) - other_scrollbar_size_w;
+ float win_size_avail_v = (horizontal ? window->SizeFull.x : window->SizeFull.y) - other_scrollbar_size_w;
float win_size_contents_v = horizontal ? window->SizeContents.x : window->SizeContents.y;
- // The grabable box size generally represent the amount visible (vs the total scrollable amount)
+ // Calculate the height of our grabbable box. It generally represent the amount visible (vs the total scrollable amount)
// But we maintain a minimum size in pixel to allow for the user to still aim inside.
- const float grab_h_pixels = ImMin(ImMax(scrollbar_size_v * ImSaturate(win_size_avail_v / ImMax(win_size_contents_v, win_size_avail_v)), style.GrabMinSize), scrollbar_size_v);
+ IM_ASSERT(ImMax(win_size_contents_v, win_size_avail_v) > 0.0f); // Adding this assert to check if the ImMax(XXX,1.0f) is still needed. PLEASE CONTACT ME if this triggers.
+ const float win_size_v = ImMax(ImMax(win_size_contents_v, win_size_avail_v), 1.0f);
+ const float grab_h_pixels = ImClamp(scrollbar_size_v * (win_size_avail_v / win_size_v), style.GrabMinSize, scrollbar_size_v);
const float grab_h_norm = grab_h_pixels / scrollbar_size_v;
// Handle input right away. None of the code of Begin() is relying on scrolling position before calling Scrollbar().
bool held = false;
bool hovered = false;
const bool previously_held = (g.ActiveId == id);
- ImGui::ButtonBehavior(bb, id, &hovered, &held);
+ ButtonBehavior(bb, id, &hovered, &held);
float scroll_max = ImMax(1.0f, win_size_contents_v - win_size_avail_v);
float scroll_ratio = ImSaturate(scroll_v / scroll_max);
@@ -4511,7 +4880,7 @@ static void Scrollbar(ImGuiWindow* window, bool horizontal)
// Click position in scrollbar normalized space (0.0f->1.0f)
const float clicked_v_norm = ImSaturate((mouse_pos_v - scrollbar_pos_v) / scrollbar_size_v);
- ImGui::SetHoveredID(id);
+ SetHoveredID(id);
bool seek_absolute = false;
if (!previously_held)
@@ -4547,26 +4916,56 @@ static void Scrollbar(ImGuiWindow* window, bool horizontal)
}
// Render
- const ImU32 grab_col = ImGui::GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab);
+ const ImU32 grab_col = GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab);
+ ImRect grab_rect;
if (horizontal)
- window->DrawList->AddRectFilled(ImVec2(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y), ImVec2(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, bb.Max.y), grab_col, style.ScrollbarRounding);
+ grab_rect = ImRect(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y, ImMin(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, window_rect.Max.x), bb.Max.y);
else
- window->DrawList->AddRectFilled(ImVec2(bb.Min.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm)), ImVec2(bb.Max.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm) + grab_h_pixels), grab_col, style.ScrollbarRounding);
+ grab_rect = ImRect(bb.Min.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm), bb.Max.x, ImMin(ImLerp(bb.Min.y, bb.Max.y, grab_v_norm) + grab_h_pixels, window_rect.Max.y));
+ window->DrawList->AddRectFilled(grab_rect.Min, grab_rect.Max, grab_col, style.ScrollbarRounding);
+}
+
+void ImGui::BringWindowToFront(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.Windows.back() == window)
+ return;
+ for (int i = 0; i < g.Windows.Size; i++)
+ if (g.Windows[i] == window)
+ {
+ g.Windows.erase(g.Windows.begin() + i);
+ g.Windows.push_back(window);
+ break;
+ }
}
-// Moving window to front of display (which happens to be back of our sorted list)
+void ImGui::BringWindowToBack(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.Windows[0] == window)
+ return;
+ for (int i = 0; i < g.Windows.Size; i++)
+ if (g.Windows[i] == window)
+ {
+ memmove(&g.Windows[1], &g.Windows[0], (size_t)i * sizeof(ImGuiWindow*));
+ g.Windows[0] = window;
+ break;
+ }
+}
+
+// Moving window to front of display and set focus (which happens to be back of our sorted list)
void ImGui::FocusWindow(ImGuiWindow* window)
{
ImGuiContext& g = *GImGui;
// Always mark the window we passed as focused. This is used for keyboard interactions such as tabbing.
- g.FocusedWindow = window;
+ g.NavWindow = window;
// Passing NULL allow to disable keyboard focus
if (!window)
return;
- // And move its root window to the top of the pile
+ // Move the root window to the top of the pile
if (window->RootWindow)
window = window->RootWindow;
@@ -4576,15 +4975,19 @@ void ImGui::FocusWindow(ImGuiWindow* window)
ClearActiveID();
// Bring to front
- if ((window->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus) || g.Windows.back() == window)
- return;
- for (int i = 0; i < g.Windows.Size; i++)
- if (g.Windows[i] == window)
+ if (!(window->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus))
+ BringWindowToFront(window);
+}
+
+void ImGui::FocusPreviousWindow()
+{
+ ImGuiContext& g = *GImGui;
+ for (int i = g.Windows.Size - 1; i >= 0; i--)
+ if (g.Windows[i]->WasActive && !(g.Windows[i]->Flags & ImGuiWindowFlags_ChildWindow))
{
- g.Windows.erase(g.Windows.begin() + i);
- break;
+ FocusWindow(g.Windows[i]);
+ return;
}
- g.Windows.push_back(window);
}
void ImGui::PushItemWidth(float item_width)
@@ -4594,12 +4997,12 @@ void ImGui::PushItemWidth(float item_width)
window->DC.ItemWidthStack.push_back(window->DC.ItemWidth);
}
-static void PushMultiItemsWidths(int components, float w_full)
+void ImGui::PushMultiItemsWidths(int components, float w_full)
{
- ImGuiWindow* window = ImGui::GetCurrentWindow();
+ ImGuiWindow* window = GetCurrentWindow();
const ImGuiStyle& style = GImGui->Style;
if (w_full <= 0.0f)
- w_full = ImGui::CalcItemWidth();
+ w_full = CalcItemWidth();
const float w_item_one = ImMax(1.0f, (float)(int)((w_full - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
const float w_item_last = ImMax(1.0f, (float)(int)(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
window->DC.ItemWidthStack.push_back(w_item_last);
@@ -4664,32 +5067,41 @@ void ImGui::PopFont()
SetCurrentFont(g.FontStack.empty() ? GetDefaultFont() : g.FontStack.back());
}
-void ImGui::PushAllowKeyboardFocus(bool allow_keyboard_focus)
+void ImGui::PushItemFlag(ImGuiItemFlags option, bool enabled)
{
ImGuiWindow* window = GetCurrentWindow();
- window->DC.AllowKeyboardFocus = allow_keyboard_focus;
- window->DC.AllowKeyboardFocusStack.push_back(allow_keyboard_focus);
+ if (enabled)
+ window->DC.ItemFlags |= option;
+ else
+ window->DC.ItemFlags &= ~option;
+ window->DC.ItemFlagsStack.push_back(window->DC.ItemFlags);
}
-void ImGui::PopAllowKeyboardFocus()
+void ImGui::PopItemFlag()
{
ImGuiWindow* window = GetCurrentWindow();
- window->DC.AllowKeyboardFocusStack.pop_back();
- window->DC.AllowKeyboardFocus = window->DC.AllowKeyboardFocusStack.empty() ? true : window->DC.AllowKeyboardFocusStack.back();
+ window->DC.ItemFlagsStack.pop_back();
+ window->DC.ItemFlags = window->DC.ItemFlagsStack.empty() ? ImGuiItemFlags_Default_ : window->DC.ItemFlagsStack.back();
+}
+
+void ImGui::PushAllowKeyboardFocus(bool allow_keyboard_focus)
+{
+ PushItemFlag(ImGuiItemFlags_AllowKeyboardFocus, allow_keyboard_focus);
+}
+
+void ImGui::PopAllowKeyboardFocus()
+{
+ PopItemFlag();
}
void ImGui::PushButtonRepeat(bool repeat)
{
- ImGuiWindow* window = GetCurrentWindow();
- window->DC.ButtonRepeat = repeat;
- window->DC.ButtonRepeatStack.push_back(repeat);
+ PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat);
}
void ImGui::PopButtonRepeat()
{
- ImGuiWindow* window = GetCurrentWindow();
- window->DC.ButtonRepeatStack.pop_back();
- window->DC.ButtonRepeat = window->DC.ButtonRepeatStack.empty() ? false : window->DC.ButtonRepeatStack.back();
+ PopItemFlag();
}
void ImGui::PushTextWrapPos(float wrap_pos_x)
@@ -4706,6 +5118,17 @@ void ImGui::PopTextWrapPos()
window->DC.TextWrapPos = window->DC.TextWrapPosStack.empty() ? -1.0f : window->DC.TextWrapPosStack.back();
}
+// FIXME: This may incur a round-trip (if the end user got their data from a float4) but eventually we aim to store the in-flight colors as ImU32
+void ImGui::PushStyleColor(ImGuiCol idx, ImU32 col)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiColMod backup;
+ backup.Col = idx;
+ backup.BackupValue = g.Style.Colors[idx];
+ g.ColorModifiers.push_back(backup);
+ g.Style.Colors[idx] = ColorConvertU32ToFloat4(col);
+}
+
void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col)
{
ImGuiContext& g = *GImGui;
@@ -4732,23 +5155,28 @@ struct ImGuiStyleVarInfo
{
ImGuiDataType Type;
ImU32 Offset;
- void* GetVarPtr() const { return (void*)((unsigned char*)&GImGui->Style + Offset); }
+ void* GetVarPtr(ImGuiStyle* style) const { return (void*)((unsigned char*)style + Offset); }
};
static const ImGuiStyleVarInfo GStyleVarInfo[ImGuiStyleVar_Count_] =
{
- { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) },
- { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) },
- { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) },
- { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) },
- { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildWindowRounding) },
- { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) },
- { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) },
- { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) },
- { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) },
- { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) },
- { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) },
- { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) },
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, // ImGuiStyleVar_Alpha
+ { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) }, // ImGuiStyleVar_WindowPadding
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) }, // ImGuiStyleVar_WindowRounding
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowBorderSize) }, // ImGuiStyleVar_WindowBorderSize
+ { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) }, // ImGuiStyleVar_WindowMinSize
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildRounding) }, // ImGuiStyleVar_ChildRounding
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildBorderSize) }, // ImGuiStyleVar_ChildBorderSize
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupRounding) }, // ImGuiStyleVar_PopupRounding
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupBorderSize) }, // ImGuiStyleVar_PopupBorderSize
+ { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) }, // ImGuiStyleVar_FramePadding
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) }, // ImGuiStyleVar_FrameRounding
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameBorderSize) }, // ImGuiStyleVar_FrameBorderSize
+ { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) }, // ImGuiStyleVar_ItemSpacing
+ { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) }, // ImGuiStyleVar_ItemInnerSpacing
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) }, // ImGuiStyleVar_IndentSpacing
+ { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) }, // ImGuiStyleVar_GrabMinSize
+ { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) }, // ImGuiStyleVar_ButtonTextAlign
{ ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, ViewId) },
};
@@ -4763,8 +5191,9 @@ void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
if (var_info->Type == ImGuiDataType_Float)
{
- float* pvar = (float*)var_info->GetVarPtr();
- GImGui->StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
+ ImGuiContext& g = *GImGui;
+ float* pvar = (float*)var_info->GetVarPtr(&g.Style);
+ g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
*pvar = val;
return;
}
@@ -4776,8 +5205,9 @@ void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
if (var_info->Type == ImGuiDataType_Float2)
{
- ImVec2* pvar = (ImVec2*)var_info->GetVarPtr();
- GImGui->StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
+ ImGuiContext& g = *GImGui;
+ ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(&g.Style);
+ g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
*pvar = val;
return;
}
@@ -4791,15 +5221,15 @@ void ImGui::PopStyleVar(int count)
{
ImGuiStyleMod& backup = g.StyleModifiers.back();
const ImGuiStyleVarInfo* info = GetStyleVarInfo(backup.VarIdx);
- if (info->Type == ImGuiDataType_Float) (*(float*)info->GetVarPtr()) = backup.BackupFloat[0];
- else if (info->Type == ImGuiDataType_Float2) (*(ImVec2*)info->GetVarPtr()) = ImVec2(backup.BackupFloat[0], backup.BackupFloat[1]);
- else if (info->Type == ImGuiDataType_Int) (*(int*)info->GetVarPtr()) = backup.BackupInt[0];
+ if (info->Type == ImGuiDataType_Float) (*(float*)info->GetVarPtr(&g.Style)) = backup.BackupFloat[0];
+ else if (info->Type == ImGuiDataType_Float2) (*(ImVec2*)info->GetVarPtr(&g.Style)) = ImVec2(backup.BackupFloat[0], backup.BackupFloat[1]);
+ else if (info->Type == ImGuiDataType_Int) (*(int*)info->GetVarPtr(&g.Style)) = backup.BackupInt[0];
g.StyleModifiers.pop_back();
count--;
}
}
-const char* ImGui::GetStyleColName(ImGuiCol idx)
+const char* ImGui::GetStyleColorName(ImGuiCol idx)
{
// Create switch-case from enum with regexp: ImGuiCol_{.*}, --> case ImGuiCol_\1: return "\1";
switch (idx)
@@ -4807,7 +5237,7 @@ const char* ImGui::GetStyleColName(ImGuiCol idx)
case ImGuiCol_Text: return "Text";
case ImGuiCol_TextDisabled: return "TextDisabled";
case ImGuiCol_WindowBg: return "WindowBg";
- case ImGuiCol_ChildWindowBg: return "ChildWindowBg";
+ case ImGuiCol_ChildBg: return "ChildBg";
case ImGuiCol_PopupBg: return "PopupBg";
case ImGuiCol_Border: return "Border";
case ImGuiCol_BorderShadow: return "BorderShadow";
@@ -4815,14 +5245,13 @@ const char* ImGui::GetStyleColName(ImGuiCol idx)
case ImGuiCol_FrameBgHovered: return "FrameBgHovered";
case ImGuiCol_FrameBgActive: return "FrameBgActive";
case ImGuiCol_TitleBg: return "TitleBg";
- case ImGuiCol_TitleBgCollapsed: return "TitleBgCollapsed";
case ImGuiCol_TitleBgActive: return "TitleBgActive";
+ case ImGuiCol_TitleBgCollapsed: return "TitleBgCollapsed";
case ImGuiCol_MenuBarBg: return "MenuBarBg";
case ImGuiCol_ScrollbarBg: return "ScrollbarBg";
case ImGuiCol_ScrollbarGrab: return "ScrollbarGrab";
case ImGuiCol_ScrollbarGrabHovered: return "ScrollbarGrabHovered";
case ImGuiCol_ScrollbarGrabActive: return "ScrollbarGrabActive";
- case ImGuiCol_ComboBg: return "ComboBg";
case ImGuiCol_CheckMark: return "CheckMark";
case ImGuiCol_SliderGrab: return "SliderGrab";
case ImGuiCol_SliderGrabActive: return "SliderGrabActive";
@@ -4832,9 +5261,9 @@ const char* ImGui::GetStyleColName(ImGuiCol idx)
case ImGuiCol_Header: return "Header";
case ImGuiCol_HeaderHovered: return "HeaderHovered";
case ImGuiCol_HeaderActive: return "HeaderActive";
- case ImGuiCol_Column: return "Column";
- case ImGuiCol_ColumnHovered: return "ColumnHovered";
- case ImGuiCol_ColumnActive: return "ColumnActive";
+ case ImGuiCol_Separator: return "Separator";
+ case ImGuiCol_SeparatorHovered: return "SeparatorHovered";
+ case ImGuiCol_SeparatorActive: return "SeparatorActive";
case ImGuiCol_ResizeGrip: return "ResizeGrip";
case ImGuiCol_ResizeGripHovered: return "ResizeGripHovered";
case ImGuiCol_ResizeGripActive: return "ResizeGripActive";
@@ -4852,34 +5281,47 @@ const char* ImGui::GetStyleColName(ImGuiCol idx)
return "Unknown";
}
-bool ImGui::IsWindowHovered()
+bool ImGui::IsWindowHovered(ImGuiHoveredFlags flags)
{
+ IM_ASSERT((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0); // Flags not supported by this function
ImGuiContext& g = *GImGui;
- return g.HoveredWindow == g.CurrentWindow && IsWindowContentHoverable(g.HoveredRootWindow);
+ if (flags & ImGuiHoveredFlags_FlattenChilds)
+ {
+ if (g.HoveredRootWindow != g.CurrentWindow->RootWindow)
+ return false;
+ }
+ else
+ {
+ if (g.HoveredWindow != g.CurrentWindow)
+ return false;
+ }
+ if (!IsWindowContentHoverable(g.HoveredRootWindow, flags))
+ return false;
+ if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
+ if (g.ActiveId != 0 && !g.ActiveIdAllowOverlap && g.ActiveId != g.HoveredWindow->MoveId)
+ return false;
+ return true;
}
bool ImGui::IsWindowFocused()
{
ImGuiContext& g = *GImGui;
- return g.FocusedWindow == g.CurrentWindow;
+ IM_ASSERT(g.CurrentWindow); // Not inside a Begin()/End()
+ return g.NavWindow == g.CurrentWindow;
}
bool ImGui::IsRootWindowFocused()
{
ImGuiContext& g = *GImGui;
- return g.FocusedWindow == g.CurrentWindow->RootWindow;
+ IM_ASSERT(g.CurrentWindow); // Not inside a Begin()/End()
+ return g.NavWindow == g.CurrentWindow->RootWindow;
}
bool ImGui::IsRootWindowOrAnyChildFocused()
{
ImGuiContext& g = *GImGui;
- return g.FocusedWindow && g.FocusedWindow->RootWindow == g.CurrentWindow->RootWindow;
-}
-
-bool ImGui::IsRootWindowOrAnyChildHovered()
-{
- ImGuiContext& g = *GImGui;
- return g.HoveredRootWindow && (g.HoveredRootWindow == g.CurrentWindow->RootWindow) && IsWindowContentHoverable(g.HoveredRootWindow);
+ IM_ASSERT(g.CurrentWindow); // Not inside a Begin()/End()
+ return g.NavWindow && g.NavWindow->RootWindow == g.CurrentWindow->RootWindow;
}
float ImGui::GetWindowWidth()
@@ -4903,18 +5345,18 @@ ImVec2 ImGui::GetWindowPos()
static void SetWindowScrollY(ImGuiWindow* window, float new_scroll_y)
{
- window->DC.CursorMaxPos.y += window->Scroll.y;
+ window->DC.CursorMaxPos.y += window->Scroll.y; // SizeContents is generally computed based on CursorMaxPos which is affected by scroll position, so we need to apply our change to it.
window->Scroll.y = new_scroll_y;
window->DC.CursorMaxPos.y -= window->Scroll.y;
}
-static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiSetCond cond)
+static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond)
{
// Test condition (NB: bit 0 is always true) and clear flags for next time
if (cond && (window->SetWindowPosAllowFlags & cond) == 0)
return;
- window->SetWindowPosAllowFlags &= ~(ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing);
- window->SetWindowPosCenterWanted = false;
+ window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
+ window->SetWindowPosVal = ImVec2(FLT_MAX, FLT_MAX);
// Set
const ImVec2 old_pos = window->Pos;
@@ -4924,13 +5366,13 @@ static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiSetCond co
window->DC.CursorMaxPos += (window->Pos - old_pos); // And more importantly we need to adjust this so size calculation doesn't get affected.
}
-void ImGui::SetWindowPos(const ImVec2& pos, ImGuiSetCond cond)
+void ImGui::SetWindowPos(const ImVec2& pos, ImGuiCond cond)
{
ImGuiWindow* window = GetCurrentWindowRead();
SetWindowPos(window, pos, cond);
}
-void ImGui::SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond)
+void ImGui::SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond)
{
if (ImGuiWindow* window = FindWindowByName(name))
SetWindowPos(window, pos, cond);
@@ -4942,12 +5384,12 @@ ImVec2 ImGui::GetWindowSize()
return window->Size;
}
-static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiSetCond cond)
+static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond)
{
// Test condition (NB: bit 0 is always true) and clear flags for next time
if (cond && (window->SetWindowSizeAllowFlags & cond) == 0)
return;
- window->SetWindowSizeAllowFlags &= ~(ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing);
+ window->SetWindowSizeAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
// Set
if (size.x > 0.0f)
@@ -4972,43 +5414,48 @@ static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiSetCond
}
}
-void ImGui::SetWindowSize(const ImVec2& size, ImGuiSetCond cond)
+void ImGui::SetWindowSize(const ImVec2& size, ImGuiCond cond)
{
SetWindowSize(GImGui->CurrentWindow, size, cond);
}
-void ImGui::SetWindowSize(const char* name, const ImVec2& size, ImGuiSetCond cond)
+void ImGui::SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond)
{
- ImGuiWindow* window = FindWindowByName(name);
- if (window)
+ if (ImGuiWindow* window = FindWindowByName(name))
SetWindowSize(window, size, cond);
}
-static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiSetCond cond)
+static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond)
{
// Test condition (NB: bit 0 is always true) and clear flags for next time
if (cond && (window->SetWindowCollapsedAllowFlags & cond) == 0)
return;
- window->SetWindowCollapsedAllowFlags &= ~(ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing);
+ window->SetWindowCollapsedAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
// Set
window->Collapsed = collapsed;
}
-void ImGui::SetWindowCollapsed(bool collapsed, ImGuiSetCond cond)
+void ImGui::SetWindowCollapsed(bool collapsed, ImGuiCond cond)
{
SetWindowCollapsed(GImGui->CurrentWindow, collapsed, cond);
}
bool ImGui::IsWindowCollapsed()
{
- return GImGui->CurrentWindow->Collapsed;
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->Collapsed;
}
-void ImGui::SetWindowCollapsed(const char* name, bool collapsed, ImGuiSetCond cond)
+bool ImGui::IsWindowAppearing()
{
- ImGuiWindow* window = FindWindowByName(name);
- if (window)
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->Appearing;
+}
+
+void ImGui::SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond)
+{
+ if (ImGuiWindow* window = FindWindowByName(name))
SetWindowCollapsed(window, collapsed, cond);
}
@@ -5030,25 +5477,19 @@ void ImGui::SetWindowFocus(const char* name)
}
}
-void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiSetCond cond)
+void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiCond cond, const ImVec2& pivot)
{
ImGuiContext& g = *GImGui;
g.SetNextWindowPosVal = pos;
- g.SetNextWindowPosCond = cond ? cond : ImGuiSetCond_Always;
-}
-
-void ImGui::SetNextWindowPosCenter(ImGuiSetCond cond)
-{
- ImGuiContext& g = *GImGui;
- g.SetNextWindowPosVal = ImVec2(-FLT_MAX, -FLT_MAX);
- g.SetNextWindowPosCond = cond ? cond : ImGuiSetCond_Always;
+ g.SetNextWindowPosPivot = pivot;
+ g.SetNextWindowPosCond = cond ? cond : ImGuiCond_Always;
}
-void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiSetCond cond)
+void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
{
ImGuiContext& g = *GImGui;
g.SetNextWindowSizeVal = size;
- g.SetNextWindowSizeCond = cond ? cond : ImGuiSetCond_Always;
+ g.SetNextWindowSizeCond = cond ? cond : ImGuiCond_Always;
}
void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback, void* custom_callback_user_data)
@@ -5064,21 +5505,21 @@ void ImGui::SetNextWindowContentSize(const ImVec2& size)
{
ImGuiContext& g = *GImGui;
g.SetNextWindowContentSizeVal = size;
- g.SetNextWindowContentSizeCond = ImGuiSetCond_Always;
+ g.SetNextWindowContentSizeCond = ImGuiCond_Always;
}
void ImGui::SetNextWindowContentWidth(float width)
{
ImGuiContext& g = *GImGui;
g.SetNextWindowContentSizeVal = ImVec2(width, g.SetNextWindowContentSizeCond ? g.SetNextWindowContentSizeVal.y : 0.0f);
- g.SetNextWindowContentSizeCond = ImGuiSetCond_Always;
+ g.SetNextWindowContentSizeCond = ImGuiCond_Always;
}
-void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiSetCond cond)
+void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
{
ImGuiContext& g = *GImGui;
g.SetNextWindowCollapsedVal = collapsed;
- g.SetNextWindowCollapsedCond = cond ? cond : ImGuiSetCond_Always;
+ g.SetNextWindowCollapsedCond = cond ? cond : ImGuiCond_Always;
}
void ImGui::SetNextWindowFocus()
@@ -5246,14 +5687,12 @@ float ImGui::GetScrollY()
float ImGui::GetScrollMaxX()
{
- ImGuiWindow* window = GetCurrentWindowRead();
- return window->SizeContents.x - window->SizeFull.x - window->ScrollbarSizes.x;
+ return GetScrollMaxX(GImGui->CurrentWindow);
}
float ImGui::GetScrollMaxY()
{
- ImGuiWindow* window = GetCurrentWindowRead();
- return window->SizeContents.y - window->SizeFull.y - window->ScrollbarSizes.y;
+ return GetScrollMaxY(GImGui->CurrentWindow);
}
void ImGui::SetScrollX(float scroll_x)
@@ -5276,21 +5715,27 @@ void ImGui::SetScrollFromPosY(float pos_y, float center_y_ratio)
ImGuiWindow* window = GetCurrentWindow();
IM_ASSERT(center_y_ratio >= 0.0f && center_y_ratio <= 1.0f);
window->ScrollTarget.y = (float)(int)(pos_y + window->Scroll.y);
- if (center_y_ratio <= 0.0f && window->ScrollTarget.y <= window->WindowPadding.y) // Minor hack to make "scroll to top" take account of WindowPadding, else it would scroll to (WindowPadding.y - ItemSpacing.y)
- window->ScrollTarget.y = 0.0f;
window->ScrollTargetCenterRatio.y = center_y_ratio;
+
+ // Minor hack to to make scrolling to top/bottom of window take account of WindowPadding, it looks more right to the user this way
+ if (center_y_ratio <= 0.0f && window->ScrollTarget.y <= window->WindowPadding.y)
+ window->ScrollTarget.y = 0.0f;
+ else if (center_y_ratio >= 1.0f && window->ScrollTarget.y >= window->SizeContents.y - window->WindowPadding.y + GImGui->Style.ItemSpacing.y)
+ window->ScrollTarget.y = window->SizeContents.y;
}
// center_y_ratio: 0.0f top of last item, 0.5f vertical center of last item, 1.0f bottom of last item.
void ImGui::SetScrollHere(float center_y_ratio)
{
ImGuiWindow* window = GetCurrentWindow();
- float target_y = window->DC.CursorPosPrevLine.y + (window->DC.PrevLineHeight * center_y_ratio) + (GImGui->Style.ItemSpacing.y * (center_y_ratio - 0.5f) * 2.0f); // Precisely aim above, in the middle or below the last line.
- SetScrollFromPosY(target_y - window->Pos.y, center_y_ratio);
+ float target_y = window->DC.CursorPosPrevLine.y - window->Pos.y; // Top of last item, in window space
+ target_y += (window->DC.PrevLineHeight * center_y_ratio) + (GImGui->Style.ItemSpacing.y * (center_y_ratio - 0.5f) * 2.0f); // Precisely aim above, in the middle or below the last line.
+ SetScrollFromPosY(target_y, center_y_ratio);
}
void ImGui::SetKeyboardFocusHere(int offset)
{
+ IM_ASSERT(offset >= -1); // -1 is allowed but not below
ImGuiWindow* window = GetCurrentWindow();
window->FocusIdxAllRequestNext = window->FocusIdxAllCounter + 1 + offset;
window->FocusIdxTabRequestNext = INT_MAX;
@@ -5385,6 +5830,7 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
if (text_end == NULL)
text_end = text + strlen(text); // FIXME-OPT
+ const ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrentLineTextBaseOffset);
const float wrap_pos_x = window->DC.TextWrapPos;
const bool wrap_enabled = wrap_pos_x >= 0.0f;
if (text_end - text > 2000 && !wrap_enabled)
@@ -5395,7 +5841,6 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
// We also don't vertically center the text within the line full height, which is unlikely to matter because we are likely the biggest and only item on the line.
const char* line = text;
const float line_height = GetTextLineHeight();
- const ImVec2 text_pos = window->DC.CursorPos + ImVec2(0.0f, window->DC.CurrentLineTextBaseOffset);
const ImRect clip_rect = window->ClipRect;
ImVec2 text_size(0,0);
@@ -5429,7 +5874,7 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
while (line < text_end)
{
const char* line_end = strchr(line, '\n');
- if (IsClippedEx(line_rect, NULL, false))
+ if (IsClippedEx(line_rect, 0, false))
break;
const ImVec2 line_size = CalcTextSize(line, line_end, false);
@@ -5461,7 +5906,7 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
ImRect bb(text_pos, text_pos + text_size);
ItemSize(bb);
- ItemAdd(bb, NULL);
+ ItemAdd(bb, 0);
}
else
{
@@ -5469,10 +5914,9 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
const ImVec2 text_size = CalcTextSize(text_begin, text_end, false, wrap_width);
// Account of baseline offset
- ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrentLineTextBaseOffset);
ImRect bb(text_pos, text_pos + text_size);
ItemSize(text_size);
- if (!ItemAdd(bb, NULL))
+ if (!ItemAdd(bb, 0))
return;
// Render (we don't hide text after ## in this end-user function)
@@ -5480,16 +5924,15 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
}
}
-void ImGui::AlignFirstTextHeightToWidgets()
+void ImGui::AlignTextToFramePadding()
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
return;
- // Declare a dummy item size to that upcoming items that are smaller will center-align on the newly expanded line height.
ImGuiContext& g = *GImGui;
- ItemSize(ImVec2(0, g.FontSize + g.Style.FramePadding.y*2), g.Style.FramePadding.y);
- SameLine(0, 0);
+ window->DC.CurrentLineHeight = ImMax(window->DC.CurrentLineHeight, g.FontSize + g.Style.FramePadding.y * 2);
+ window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.CurrentLineTextBaseOffset, g.Style.FramePadding.y);
}
// Add a label+text combo aligned to other label+value widgets
@@ -5507,7 +5950,7 @@ void ImGui::LabelTextV(const char* label, const char* fmt, va_list args)
const ImRect value_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2));
const ImRect total_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w + (label_size.x > 0.0f ? style.ItemInnerSpacing.x : 0.0f), style.FramePadding.y*2) + label_size);
ItemSize(total_bb, style.FramePadding.y);
- if (!ItemAdd(total_bb, NULL))
+ if (!ItemAdd(total_bb, 0))
return;
// Render
@@ -5526,18 +5969,6 @@ void ImGui::LabelText(const char* label, const char* fmt, ...)
va_end(args);
}
-static inline bool IsWindowContentHoverable(ImGuiWindow* window)
-{
- // An active popup disable hovering on other windows (apart from its own children)
- ImGuiContext& g = *GImGui;
- if (ImGuiWindow* focused_window = g.FocusedWindow)
- if (ImGuiWindow* focused_root_window = focused_window->RootWindow)
- if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) != 0 && focused_root_window->WasActive && focused_root_window != window->RootWindow)
- return false;
-
- return true;
-}
-
bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags)
{
ImGuiContext& g = *GImGui;
@@ -5551,14 +5982,26 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
return false;
}
+ // Default behavior requires click+release on same spot
if ((flags & (ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick)) == 0)
flags |= ImGuiButtonFlags_PressedOnClickRelease;
+ ImGuiWindow* backup_hovered_window = g.HoveredWindow;
+ if ((flags & ImGuiButtonFlags_FlattenChilds) && g.HoveredRootWindow == window)
+ g.HoveredWindow = window;
+
bool pressed = false;
- bool hovered = IsHovered(bb, id, (flags & ImGuiButtonFlags_FlattenChilds) != 0);
+ bool hovered = ItemHoverable(bb, id);
+
+ if ((flags & ImGuiButtonFlags_FlattenChilds) && g.HoveredRootWindow == window)
+ g.HoveredWindow = backup_hovered_window;
+
+ // AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one.
+ if (hovered && (flags & ImGuiButtonFlags_AllowOverlapMode) && (g.HoveredIdPreviousFrame != id && g.HoveredIdPreviousFrame != 0))
+ hovered = false;
+
if (hovered)
{
- SetHoveredID(id);
if (!(flags & ImGuiButtonFlags_NoKeyModifiers) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt))
{
// | CLICKING | HOLDING with ImGuiButtonFlags_Repeat
@@ -5575,7 +6018,15 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
if (((flags & ImGuiButtonFlags_PressedOnClick) && g.IO.MouseClicked[0]) || ((flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDoubleClicked[0]))
{
pressed = true;
- ClearActiveID();
+ if (flags & ImGuiButtonFlags_NoHoldingActiveID)
+ {
+ ClearActiveID();
+ }
+ else
+ {
+ SetActiveID(id, window); // Hold on ID
+ g.ActiveIdClickOffset = g.IO.MousePos - bb.Min;
+ }
FocusWindow(window);
}
if ((flags & ImGuiButtonFlags_PressedOnRelease) && g.IO.MouseReleased[0])
@@ -5608,10 +6059,6 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
}
}
- // AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one.
- if (hovered && (flags & ImGuiButtonFlags_AllowOverlapMode) && (g.HoveredIdPreviousFrame != id && g.HoveredIdPreviousFrame != 0))
- hovered = pressed = held = false;
-
if (out_hovered) *out_hovered = hovered;
if (out_held) *out_held = held;
@@ -5636,10 +6083,10 @@ bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags
const ImRect bb(pos, pos + size);
ItemSize(bb, style.FramePadding.y);
- if (!ItemAdd(bb, &id))
+ if (!ItemAdd(bb, id))
return false;
- if (window->DC.ButtonRepeat) flags |= ImGuiButtonFlags_Repeat;
+ if (window->DC.ItemFlags & ImGuiItemFlags_ButtonRepeat) flags |= ImGuiButtonFlags_Repeat;
bool hovered, held;
bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
@@ -5683,7 +6130,7 @@ bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg)
ImVec2 size = CalcItemSize(size_arg, 0.0f, 0.0f);
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
ItemSize(bb);
- if (!ItemAdd(bb, &id))
+ if (!ItemAdd(bb, id))
return false;
bool hovered, held;
@@ -5717,6 +6164,34 @@ bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos, float radius)
return pressed;
}
+// [Internal]
+bool ImGui::ArrowButton(ImGuiID id, ImGuiDir dir, ImVec2 padding, ImGuiButtonFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ const ImGuiStyle& style = g.Style;
+
+ const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize + padding.x * 2.0f, g.FontSize + padding.y * 2.0f));
+ ItemSize(bb, style.FramePadding.y);
+ if (!ItemAdd(bb, id))
+ return false;
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
+
+ const ImU32 col = GetColorU32((hovered && held) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+#ifdef IMGUI_HAS_NAV
+ RenderNavHighlight(bb, id);
+#endif
+ RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding);
+ RenderTriangle(bb.Min + padding, dir, 1.0f);
+
+ return pressed;
+}
+
void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImVec4& border_col)
{
ImGuiWindow* window = GetCurrentWindow();
@@ -5727,7 +6202,7 @@ void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2&
if (border_col.w > 0.0f)
bb.Max += ImVec2(2,2);
ItemSize(bb);
- if (!ItemAdd(bb, NULL))
+ if (!ItemAdd(bb, 0))
return;
if (border_col.w > 0.0f)
@@ -5764,7 +6239,7 @@ bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const I
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size + padding*2);
const ImRect image_bb(window->DC.CursorPos + padding, window->DC.CursorPos + padding + size);
ItemSize(bb);
- if (!ItemAdd(bb, &id))
+ if (!ItemAdd(bb, id))
return false;
bool hovered, held;
@@ -5786,7 +6261,7 @@ void ImGui::LogToTTY(int max_depth)
ImGuiContext& g = *GImGui;
if (g.LogEnabled)
return;
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = g.CurrentWindow;
g.LogEnabled = true;
g.LogFile = stdout;
@@ -5801,7 +6276,7 @@ void ImGui::LogToFile(int max_depth, const char* filename)
ImGuiContext& g = *GImGui;
if (g.LogEnabled)
return;
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = g.CurrentWindow;
if (!filename)
{
@@ -5828,7 +6303,7 @@ void ImGui::LogToClipboard(int max_depth)
ImGuiContext& g = *GImGui;
if (g.LogEnabled)
return;
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = g.CurrentWindow;
g.LogEnabled = true;
g.LogFile = NULL;
@@ -5898,14 +6373,14 @@ bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags)
bool is_open;
if (g.SetNextTreeNodeOpenCond != 0)
{
- if (g.SetNextTreeNodeOpenCond & ImGuiSetCond_Always)
+ if (g.SetNextTreeNodeOpenCond & ImGuiCond_Always)
{
is_open = g.SetNextTreeNodeOpenVal;
storage->SetInt(id, is_open);
}
else
{
- // We treat ImGuiSetCondition_Once and ImGuiSetCondition_FirstUseEver the same because tree node state are not saved persistently.
+ // We treat ImGuiCond_Once and ImGuiCond_FirstUseEver the same because tree node state are not saved persistently.
const int stored_value = storage->GetInt(id, -1);
if (stored_value == -1)
{
@@ -5941,14 +6416,14 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
const bool display_frame = (flags & ImGuiTreeNodeFlags_Framed) != 0;
- const ImVec2 padding = display_frame ? style.FramePadding : ImVec2(style.FramePadding.x, 0.0f);
+ const ImVec2 padding = (display_frame || (flags & ImGuiTreeNodeFlags_FramePadding)) ? style.FramePadding : ImVec2(style.FramePadding.x, 0.0f);
if (!label_end)
label_end = FindRenderedTextEnd(label);
const ImVec2 label_size = CalcTextSize(label, label_end, false);
// We vertically grow up to current line height up the typical widget height.
- const float text_base_offset_y = ImMax(0.0f, window->DC.CurrentLineTextBaseOffset - padding.y); // Latch before ItemSize changes it
+ const float text_base_offset_y = ImMax(padding.y, window->DC.CurrentLineTextBaseOffset); // Latch before ItemSize changes it
const float frame_height = ImMax(ImMin(window->DC.CurrentLineHeight, g.FontSize + style.FramePadding.y*2), label_size.y + padding.y*2);
ImRect bb = ImRect(window->DC.CursorPos, ImVec2(window->Pos.x + GetContentRegionMax().x, window->DC.CursorPos.y + frame_height));
if (display_frame)
@@ -5963,10 +6438,10 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
ItemSize(ImVec2(text_width, frame_height), text_base_offset_y);
// For regular tree nodes, we arbitrary allow to click past 2 worth of ItemSpacing
- // (Ideally we'd want to add a flag for the user to specify we want want the hit test to be done up to the right side of the content or not)
+ // (Ideally we'd want to add a flag for the user to specify if we want the hit test to be done up to the right side of the content or not)
const ImRect interact_bb = display_frame ? bb : ImRect(bb.Min.x, bb.Min.y, bb.Min.x + text_width + style.ItemSpacing.x*2, bb.Max.y);
bool is_open = TreeNodeBehaviorIsOpen(id, flags);
- if (!ItemAdd(interact_bb, &id))
+ if (!ItemAdd(interact_bb, id))
{
if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
TreePushRawID(id);
@@ -6000,20 +6475,20 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
// Render
const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
- const ImVec2 text_pos = bb.Min + ImVec2(text_offset_x, padding.y + text_base_offset_y);
+ const ImVec2 text_pos = bb.Min + ImVec2(text_offset_x, text_base_offset_y);
if (display_frame)
{
// Framed type
RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding);
- RenderCollapseTriangle(bb.Min + padding + ImVec2(0.0f, text_base_offset_y), is_open, 1.0f);
+ RenderTriangle(bb.Min + ImVec2(padding.x, text_base_offset_y), is_open ? ImGuiDir_Down : ImGuiDir_Right, 1.0f);
if (g.LogEnabled)
{
// NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here.
const char log_prefix[] = "\n##";
const char log_suffix[] = "##";
- LogRenderedText(text_pos, log_prefix, log_prefix+3);
+ LogRenderedText(&text_pos, log_prefix, log_prefix+3);
RenderTextClipped(text_pos, bb.Max, label, label_end, &label_size);
- LogRenderedText(text_pos, log_suffix+1, log_suffix+3);
+ LogRenderedText(&text_pos, log_suffix+1, log_suffix+3);
}
else
{
@@ -6029,9 +6504,9 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
if (flags & ImGuiTreeNodeFlags_Bullet)
RenderBullet(bb.Min + ImVec2(text_offset_x * 0.5f, g.FontSize*0.50f + text_base_offset_y));
else if (!(flags & ImGuiTreeNodeFlags_Leaf))
- RenderCollapseTriangle(bb.Min + ImVec2(padding.x, g.FontSize*0.15f + text_base_offset_y), is_open, 0.70f);
+ RenderTriangle(bb.Min + ImVec2(padding.x, g.FontSize*0.15f + text_base_offset_y), is_open ? ImGuiDir_Down : ImGuiDir_Right, 0.70f);
if (g.LogEnabled)
- LogRenderedText(text_pos, ">");
+ LogRenderedText(&text_pos, ">");
RenderText(text_pos, label, label_end, false);
}
@@ -6067,8 +6542,11 @@ bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags
// Create a small overlapping close button // FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc.
ImGuiContext& g = *GImGui;
float button_sz = g.FontSize * 0.5f;
+ ImGuiItemHoveredDataBackup last_item_backup;
+ last_item_backup.Backup();
if (CloseButton(window->GetID((void*)(intptr_t)(id+1)), ImVec2(ImMin(window->DC.LastItemRect.Max.x, window->ClipRect.Max.x) - g.Style.FramePadding.x - button_sz, window->DC.LastItemRect.Min.y + g.Style.FramePadding.y + button_sz), button_sz))
*p_open = false;
+ last_item_backup.Restore();
}
return is_open;
@@ -6172,41 +6650,43 @@ float ImGui::GetTreeNodeToLabelSpacing()
return g.FontSize + (g.Style.FramePadding.x * 2.0f);
}
-void ImGui::SetNextTreeNodeOpen(bool is_open, ImGuiSetCond cond)
+void ImGui::SetNextTreeNodeOpen(bool is_open, ImGuiCond cond)
{
ImGuiContext& g = *GImGui;
+ if (g.CurrentWindow->SkipItems)
+ return;
g.SetNextTreeNodeOpenVal = is_open;
- g.SetNextTreeNodeOpenCond = cond ? cond : ImGuiSetCond_Always;
+ g.SetNextTreeNodeOpenCond = cond ? cond : ImGuiCond_Always;
}
void ImGui::PushID(const char* str_id)
{
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = GetCurrentWindowRead();
window->IDStack.push_back(window->GetID(str_id));
}
void ImGui::PushID(const char* str_id_begin, const char* str_id_end)
{
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = GetCurrentWindowRead();
window->IDStack.push_back(window->GetID(str_id_begin, str_id_end));
}
void ImGui::PushID(const void* ptr_id)
{
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = GetCurrentWindowRead();
window->IDStack.push_back(window->GetID(ptr_id));
}
void ImGui::PushID(int int_id)
{
const void* ptr_id = (void*)(intptr_t)int_id;
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = GetCurrentWindowRead();
window->IDStack.push_back(window->GetID(ptr_id));
}
void ImGui::PopID()
{
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = GetCurrentWindowRead();
window->IDStack.pop_back();
}
@@ -6236,7 +6716,7 @@ void ImGui::Bullet()
const float line_height = ImMax(ImMin(window->DC.CurrentLineHeight, g.FontSize + g.Style.FramePadding.y*2), g.FontSize);
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height));
ItemSize(bb);
- if (!ItemAdd(bb, NULL))
+ if (!ItemAdd(bb, 0))
{
SameLine(0, style.FramePadding.x*2);
return;
@@ -6264,7 +6744,7 @@ void ImGui::BulletTextV(const char* fmt, va_list args)
const float line_height = ImMax(ImMin(window->DC.CurrentLineHeight, g.FontSize + g.Style.FramePadding.y*2), g.FontSize);
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize + (label_size.x > 0.0f ? (label_size.x + style.FramePadding.x*2) : 0.0f), ImMax(line_height, label_size.y))); // Empty text doesn't add padding
ItemSize(bb);
- if (!ItemAdd(bb, NULL))
+ if (!ItemAdd(bb, 0))
return;
// Render
@@ -6352,16 +6832,16 @@ static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_b
scalar_format = "%d";
int* v = (int*)data_ptr;
const int old_v = *v;
- int arg0 = *v;
- if (op && sscanf(initial_value_buf, scalar_format, &arg0) < 1)
+ int arg0i = *v;
+ if (op && sscanf(initial_value_buf, scalar_format, &arg0i) < 1)
return false;
// Store operand in a float so we can use fractional value for multipliers (*1.1), but constant always parsed as integer so we can fit big integers (e.g. 2000000003) past float precision
- float arg1 = 0.0f;
- if (op == '+') { if (sscanf(buf, "%f", &arg1) == 1) *v = (int)(arg0 + arg1); } // Add (use "+-" to subtract)
- else if (op == '*') { if (sscanf(buf, "%f", &arg1) == 1) *v = (int)(arg0 * arg1); } // Multiply
- else if (op == '/') { if (sscanf(buf, "%f", &arg1) == 1 && arg1 != 0.0f) *v = (int)(arg0 / arg1); }// Divide
- else { if (sscanf(buf, scalar_format, &arg0) == 1) *v = arg0; } // Assign constant
+ float arg1f = 0.0f;
+ if (op == '+') { if (sscanf(buf, "%f", &arg1f) == 1) *v = (int)(arg0i + arg1f); } // Add (use "+-" to subtract)
+ else if (op == '*') { if (sscanf(buf, "%f", &arg1f) == 1) *v = (int)(arg0i * arg1f); } // Multiply
+ else if (op == '/') { if (sscanf(buf, "%f", &arg1f) == 1 && arg1f != 0.0f) *v = (int)(arg0i / arg1f); }// Divide
+ else { if (sscanf(buf, scalar_format, &arg0i) == 1) *v = arg0i; } // Assign constant (read as integer so big values are not lossy)
return (old_v != *v);
}
else if (data_type == ImGuiDataType_Float)
@@ -6370,17 +6850,17 @@ static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_b
scalar_format = "%f";
float* v = (float*)data_ptr;
const float old_v = *v;
- float arg0 = *v;
- if (op && sscanf(initial_value_buf, scalar_format, &arg0) < 1)
+ float arg0f = *v;
+ if (op && sscanf(initial_value_buf, scalar_format, &arg0f) < 1)
return false;
- float arg1 = 0.0f;
- if (sscanf(buf, scalar_format, &arg1) < 1)
+ float arg1f = 0.0f;
+ if (sscanf(buf, scalar_format, &arg1f) < 1)
return false;
- if (op == '+') { *v = arg0 + arg1; } // Add (use "+-" to subtract)
- else if (op == '*') { *v = arg0 * arg1; } // Multiply
- else if (op == '/') { if (arg1 != 0.0f) *v = arg0 / arg1; } // Divide
- else { *v = arg1; } // Assign constant
+ if (op == '+') { *v = arg0f + arg1f; } // Add (use "+-" to subtract)
+ else if (op == '*') { *v = arg0f * arg1f; } // Multiply
+ else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide
+ else { *v = arg1f; } // Assign constant
return (old_v != *v);
}
@@ -6388,12 +6868,14 @@ static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_b
}
// Create text input in place of a slider (when CTRL+Clicking on slider)
+// FIXME: Logic is messy and confusing.
bool ImGui::InputScalarAsWidgetReplacement(const ImRect& aabb, const char* label, ImGuiDataType data_type, void* data_ptr, ImGuiID id, int decimal_precision)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = GetCurrentWindow();
// Our replacement widget will override the focus ID (registered previously to allow for a TAB focus to happen)
+ // On the first frame, g.ScalarAsInputTextId == 0, then on subsequent frames it becomes == id
SetActiveID(g.ScalarAsInputTextId, window);
SetHoveredID(0);
FocusableItemUnregister(window);
@@ -6401,18 +6883,12 @@ bool ImGui::InputScalarAsWidgetReplacement(const ImRect& aabb, const char* label
char buf[32];
DataTypeFormatString(data_type, data_ptr, decimal_precision, buf, IM_ARRAYSIZE(buf));
bool text_value_changed = InputTextEx(label, buf, IM_ARRAYSIZE(buf), aabb.GetSize(), ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_AutoSelectAll);
- if (g.ScalarAsInputTextId == 0)
+ if (g.ScalarAsInputTextId == 0) // First frame we started displaying the InputText widget
{
- // First frame
IM_ASSERT(g.ActiveId == id); // InputText ID expected to match the Slider ID (else we'd need to store them both, which is also possible)
g.ScalarAsInputTextId = g.ActiveId;
SetHoveredID(id);
}
- else if (g.ActiveId != g.ScalarAsInputTextId)
- {
- // Release
- g.ScalarAsInputTextId = 0;
- }
if (text_value_changed)
return DataTypeApplyOpFromText(buf, GImGui->InputTextState.InitialText.begin(), data_type, data_ptr, NULL);
return false;
@@ -6430,22 +6906,31 @@ int ImGui::ParseFormatPrecision(const char* fmt, int default_precision)
fmt++;
if (*fmt == '.')
{
- precision = atoi(fmt + 1);
+ fmt = ImAtoi(fmt + 1, &precision);
if (precision < 0 || precision > 10)
precision = default_precision;
}
+ if (*fmt == 'e' || *fmt == 'E') // Maximum precision with scientific notation
+ precision = -1;
break;
}
return precision;
}
+static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
+{
+ static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f };
+ return (decimal_precision >= 0 && decimal_precision < 10) ? min_steps[decimal_precision] : powf(10.0f, (float)-decimal_precision);
+}
+
float ImGui::RoundScalar(float value, int decimal_precision)
{
// Round past decimal precision
// So when our value is 1.99999 with a precision of 0.001 we'll end up rounding to 2.0
// FIXME: Investigate better rounding methods
- static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f };
- float min_step = (decimal_precision >= 0 && decimal_precision < 10) ? min_steps[decimal_precision] : powf(10.0f, (float)-decimal_precision);
+ if (decimal_precision < 0)
+ return value;
+ const float min_step = GetMinimumStepAtDecimalPrecision(decimal_precision);
bool negative = value < 0.0f;
value = fabsf(value);
float remainder = fmodf(value, min_step);
@@ -6496,7 +6981,7 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v
const float grab_padding = 2.0f;
const float slider_sz = is_horizontal ? (frame_bb.GetWidth() - grab_padding * 2.0f) : (frame_bb.GetHeight() - grab_padding * 2.0f);
float grab_sz;
- if (decimal_precision > 0)
+ if (decimal_precision != 0)
grab_sz = ImMin(style.GrabMinSize, slider_sz);
else
grab_sz = ImMin(ImMax(1.0f * (slider_sz / ((v_min < v_max ? v_max - v_min : v_min - v_max) + 1.0f)), style.GrabMinSize), slider_sz); // Integer sliders, if possible have the grab size represent 1 unit
@@ -6523,13 +7008,23 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v
bool value_changed = false;
if (g.ActiveId == id)
{
+ bool set_new_value = false;
+ float clicked_t = 0.0f;
if (g.IO.MouseDown[0])
{
const float mouse_abs_pos = is_horizontal ? g.IO.MousePos.x : g.IO.MousePos.y;
- float clicked_t = (slider_usable_sz > 0.0f) ? ImClamp((mouse_abs_pos - slider_usable_pos_min) / slider_usable_sz, 0.0f, 1.0f) : 0.0f;
+ clicked_t = (slider_usable_sz > 0.0f) ? ImClamp((mouse_abs_pos - slider_usable_pos_min) / slider_usable_sz, 0.0f, 1.0f) : 0.0f;
if (!is_horizontal)
clicked_t = 1.0f - clicked_t;
+ set_new_value = true;
+ }
+ else
+ {
+ ClearActiveID();
+ }
+ if (set_new_value)
+ {
float new_value;
if (is_non_linear)
{
@@ -6567,16 +7062,10 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v
value_changed = true;
}
}
- else
- {
- ClearActiveID();
- }
}
- // Calculate slider grab positioning
- float grab_t = SliderBehaviorCalcRatioFromValue(*v, v_min, v_max, power, linear_zero_pos);
-
// Draw
+ float grab_t = SliderBehaviorCalcRatioFromValue(*v, v_min, v_max, power, linear_zero_pos);
if (!is_horizontal)
grab_t = 1.0f - grab_t;
const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t);
@@ -6611,15 +7100,12 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
// NB- we don't call ItemSize() yet because we may turn into a text edit box below
- if (!ItemAdd(total_bb, &id))
+ if (!ItemAdd(total_bb, id))
{
ItemSize(total_bb, style.FramePadding.y);
return false;
}
-
- const bool hovered = IsHovered(frame_bb, id);
- if (hovered)
- SetHoveredID(id);
+ const bool hovered = ItemHoverable(frame_bb, id);
if (!display_format)
display_format = "%.3f";
@@ -6627,12 +7113,11 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
// Tabbing or CTRL-clicking on Slider turns it into an input box
bool start_text_input = false;
- const bool tab_focus_requested = FocusableItemRegister(window, g.ActiveId == id);
+ const bool tab_focus_requested = FocusableItemRegister(window, id);
if (tab_focus_requested || (hovered && g.IO.MouseClicked[0]))
{
SetActiveID(id, window);
FocusWindow(window);
-
if (tab_focus_requested || g.IO.KeyCtrl)
{
start_text_input = true;
@@ -6642,9 +7127,8 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id))
return InputScalarAsWidgetReplacement(frame_bb, label, ImGuiDataType_Float, v, id, decimal_precision);
- ItemSize(total_bb, style.FramePadding.y);
-
// Actual slider behavior + render grab
+ ItemSize(total_bb, style.FramePadding.y);
const bool value_changed = SliderBehavior(frame_bb, id, v, v_min, v_max, power, decimal_precision);
// Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
@@ -6673,12 +7157,9 @@ bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float
const ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
ItemSize(bb, style.FramePadding.y);
- if (!ItemAdd(frame_bb, &id))
+ if (!ItemAdd(frame_bb, id))
return false;
-
- const bool hovered = IsHovered(frame_bb, id);
- if (hovered)
- SetHoveredID(id);
+ const bool hovered = ItemHoverable(frame_bb, id);
if (!display_format)
display_format = "%.3f";
@@ -6840,34 +7321,39 @@ bool ImGui::DragBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_s
g.DragLastMouseDelta = ImVec2(0.f, 0.f);
}
+ if (v_speed == 0.0f && (v_max - v_min) != 0.0f && (v_max - v_min) < FLT_MAX)
+ v_speed = (v_max - v_min) * g.DragSpeedDefaultRatio;
+
float v_cur = g.DragCurrentValue;
const ImVec2 mouse_drag_delta = GetMouseDragDelta(0, 1.0f);
- if (fabsf(mouse_drag_delta.x - g.DragLastMouseDelta.x) > 0.0f)
+ float adjust_delta = 0.0f;
+ //if (g.ActiveIdSource == ImGuiInputSource_Mouse)
{
- float speed = v_speed;
- if (speed == 0.0f && (v_max - v_min) != 0.0f && (v_max - v_min) < FLT_MAX)
- speed = (v_max - v_min) * g.DragSpeedDefaultRatio;
+ adjust_delta = mouse_drag_delta.x - g.DragLastMouseDelta.x;
if (g.IO.KeyShift && g.DragSpeedScaleFast >= 0.0f)
- speed = speed * g.DragSpeedScaleFast;
+ adjust_delta *= g.DragSpeedScaleFast;
if (g.IO.KeyAlt && g.DragSpeedScaleSlow >= 0.0f)
- speed = speed * g.DragSpeedScaleSlow;
+ adjust_delta *= g.DragSpeedScaleSlow;
+ }
+ adjust_delta *= v_speed;
+ g.DragLastMouseDelta.x = mouse_drag_delta.x;
- float delta = (mouse_drag_delta.x - g.DragLastMouseDelta.x) * speed;
+ if (fabsf(adjust_delta) > 0.0f)
+ {
if (fabsf(power - 1.0f) > 0.001f)
{
// Logarithmic curve on both side of 0.0
float v0_abs = v_cur >= 0.0f ? v_cur : -v_cur;
float v0_sign = v_cur >= 0.0f ? 1.0f : -1.0f;
- float v1 = powf(v0_abs, 1.0f / power) + (delta * v0_sign);
+ float v1 = powf(v0_abs, 1.0f / power) + (adjust_delta * v0_sign);
float v1_abs = v1 >= 0.0f ? v1 : -v1;
float v1_sign = v1 >= 0.0f ? 1.0f : -1.0f; // Crossed sign line
v_cur = powf(v1_abs, power) * v0_sign * v1_sign; // Reapply sign
}
else
{
- v_cur += delta;
+ v_cur += adjust_delta;
}
- g.DragLastMouseDelta.x = mouse_drag_delta.x;
// Clamp
if (v_min < v_max)
@@ -6909,15 +7395,12 @@ bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, f
const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
// NB- we don't call ItemSize() yet because we may turn into a text edit box below
- if (!ItemAdd(total_bb, &id))
+ if (!ItemAdd(total_bb, id))
{
ItemSize(total_bb, style.FramePadding.y);
return false;
}
-
- const bool hovered = IsHovered(frame_bb, id);
- if (hovered)
- SetHoveredID(id);
+ const bool hovered = ItemHoverable(frame_bb, id);
if (!display_format)
display_format = "%.3f";
@@ -6925,12 +7408,11 @@ bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, f
// Tabbing or CTRL-clicking on Drag turns it into an input box
bool start_text_input = false;
- const bool tab_focus_requested = FocusableItemRegister(window, g.ActiveId == id);
- if (tab_focus_requested || (hovered && (g.IO.MouseClicked[0] | g.IO.MouseDoubleClicked[0])))
+ const bool tab_focus_requested = FocusableItemRegister(window, id);
+ if (tab_focus_requested || (hovered && (g.IO.MouseClicked[0] || g.IO.MouseDoubleClicked[0])))
{
SetActiveID(id, window);
FocusWindow(window);
-
if (tab_focus_requested || g.IO.KeyCtrl || g.IO.MouseDoubleClicked[0])
{
start_text_input = true;
@@ -7119,8 +7601,9 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge
const ImRect inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding);
const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0));
ItemSize(total_bb, style.FramePadding.y);
- if (!ItemAdd(total_bb, NULL))
+ if (!ItemAdd(total_bb, 0))
return;
+ const bool hovered = ItemHoverable(inner_bb, 0);
// Determine scale from values if not specified
if (scale_min == FLT_MAX || scale_max == FLT_MAX)
@@ -7148,7 +7631,7 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge
// Tooltip on hover
int v_hovered = -1;
- if (IsHovered(inner_bb, 0))
+ if (hovered)
{
const float t = ImClamp((g.IO.MousePos.x - inner_bb.Min.x) / (inner_bb.Max.x - inner_bb.Min.x), 0.0f, 0.9999f);
const int v_idx = (int)(t * item_count);
@@ -7167,7 +7650,8 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge
float v0 = values_getter(data, (0 + values_offset) % values_count);
float t0 = 0.0f;
- ImVec2 tp0 = ImVec2( t0, 1.0f - ImSaturate((v0 - scale_min) / (scale_max - scale_min)) ); // Point in the normalized space of our target rectangle
+ ImVec2 tp0 = ImVec2( t0, 1.0f - ImSaturate((v0 - scale_min) / (scale_max - scale_min)) ); // Point in the normalized space of our target rectangle
+ float histogram_zero_line_t = (scale_min * scale_max < 0.0f) ? (-scale_min / (scale_max - scale_min)) : (scale_min < 0.0f ? 0.0f : 1.0f); // Where does the zero line stands
const ImU32 col_base = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLines : ImGuiCol_PlotHistogram);
const ImU32 col_hovered = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLinesHovered : ImGuiCol_PlotHistogramHovered);
@@ -7182,7 +7666,7 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge
// NB: Draw calls are merged together by the DrawList system. Still, we should render our batch are lower level to save a bit of CPU.
ImVec2 pos0 = ImLerp(inner_bb.Min, inner_bb.Max, tp0);
- ImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, 1.0f));
+ ImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, histogram_zero_line_t));
if (plot_type == ImGuiPlotType_Lines)
{
window->DrawList->AddLine(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base);
@@ -7257,15 +7741,15 @@ void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* over
ImVec2 pos = window->DC.CursorPos;
ImRect bb(pos, pos + CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f));
ItemSize(bb, style.FramePadding.y);
- if (!ItemAdd(bb, NULL))
+ if (!ItemAdd(bb, 0))
return;
// Render
fraction = ImSaturate(fraction);
RenderFrame(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
- bb.Reduce(ImVec2(window->BorderSize, window->BorderSize));
+ bb.Expand(ImVec2(-style.FrameBorderSize, -style.FrameBorderSize));
const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction), bb.Max.y);
- RenderFrame(bb.Min, fill_br, GetColorU32(ImGuiCol_PlotHistogram), false, style.FrameRounding);
+ RenderRectFilledRangeH(window->DrawList, bb, GetColorU32(ImGuiCol_PlotHistogram), 0.0f, fraction, style.FrameRounding);
// Default displaying the fraction as percentage string, but user can override it
char overlay_buf[32];
@@ -7291,7 +7775,7 @@ bool ImGui::Checkbox(const char* label, bool* v)
const ImGuiID id = window->GetID(label);
const ImVec2 label_size = CalcTextSize(label, NULL, true);
- const ImRect check_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(label_size.y + style.FramePadding.y*2, label_size.y + style.FramePadding.y*2));
+ const ImRect check_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(label_size.y + style.FramePadding.y*2, label_size.y + style.FramePadding.y*2)); // We want a square shape to we use Y twice
ItemSize(check_bb, style.FramePadding.y);
ImRect total_bb = check_bb;
@@ -7304,7 +7788,7 @@ bool ImGui::Checkbox(const char* label, bool* v)
total_bb = ImRect(ImMin(check_bb.Min, text_bb.Min), ImMax(check_bb.Max, text_bb.Max));
}
- if (!ItemAdd(total_bb, &id))
+ if (!ItemAdd(total_bb, id))
return false;
bool hovered, held;
@@ -7317,13 +7801,13 @@ bool ImGui::Checkbox(const char* label, bool* v)
{
const float check_sz = ImMin(check_bb.GetWidth(), check_bb.GetHeight());
const float pad = ImMax(1.0f, (float)(int)(check_sz / 6.0f));
- window->DrawList->AddRectFilled(check_bb.Min+ImVec2(pad,pad), check_bb.Max-ImVec2(pad,pad), GetColorU32(ImGuiCol_CheckMark), style.FrameRounding);
+ RenderCheckMark(check_bb.Min + ImVec2(pad,pad), GetColorU32(ImGuiCol_CheckMark), check_bb.GetWidth() - pad*2.0f);
}
if (g.LogEnabled)
- LogRenderedText(text_bb.GetTL(), *v ? "[x]" : "[ ]");
+ LogRenderedText(&text_bb.Min, *v ? "[x]" : "[ ]");
if (label_size.x > 0.0f)
- RenderText(text_bb.GetTL(), label);
+ RenderText(text_bb.Min, label);
return pressed;
}
@@ -7367,7 +7851,7 @@ bool ImGui::RadioButton(const char* label, bool active)
total_bb.Add(text_bb);
}
- if (!ItemAdd(total_bb, &id))
+ if (!ItemAdd(total_bb, id))
return false;
ImVec2 center = check_bb.GetCenter();
@@ -7386,16 +7870,16 @@ bool ImGui::RadioButton(const char* label, bool active)
window->DrawList->AddCircleFilled(center, radius-pad, GetColorU32(ImGuiCol_CheckMark), 16);
}
- if (window->Flags & ImGuiWindowFlags_ShowBorders)
+ if (style.FrameBorderSize > 0.0f)
{
- window->DrawList->AddCircle(center+ImVec2(1,1), radius, GetColorU32(ImGuiCol_BorderShadow), 16);
- window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16);
+ window->DrawList->AddCircle(center+ImVec2(1,1), radius, GetColorU32(ImGuiCol_BorderShadow), 16, style.FrameBorderSize);
+ window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16, style.FrameBorderSize);
}
if (g.LogEnabled)
- LogRenderedText(text_bb.GetTL(), active ? "(x)" : "( )");
+ LogRenderedText(&text_bb.Min, active ? "(x)" : "( )");
if (label_size.x > 0.0f)
- RenderText(text_bb.GetTL(), label);
+ RenderText(text_bb.Min, label);
return pressed;
}
@@ -7705,14 +8189,17 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
else
{
ItemSize(total_bb, style.FramePadding.y);
- if (!ItemAdd(total_bb, &id))
+ if (!ItemAdd(total_bb, id))
return false;
}
+ const bool hovered = ItemHoverable(frame_bb, id);
+ if (hovered)
+ g.MouseCursor = ImGuiMouseCursor_TextInput;
// Password pushes a temporary font with only a fallback glyph
if (is_password)
{
- const ImFont::Glyph* glyph = g.Font->FindGlyph('*');
+ const ImFontGlyph* glyph = g.Font->FindGlyph('*');
ImFont* password_font = &g.InputTextPasswordFont;
password_font->FontSize = g.Font->FontSize;
password_font->Scale = g.Font->Scale;
@@ -7721,27 +8208,23 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
password_font->Descent = g.Font->Descent;
password_font->ContainerAtlas = g.Font->ContainerAtlas;
password_font->FallbackGlyph = glyph;
- password_font->FallbackXAdvance = glyph->XAdvance;
- IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexXAdvance.empty() && password_font->IndexLookup.empty());
+ password_font->FallbackAdvanceX = glyph->AdvanceX;
+ IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexAdvanceX.empty() && password_font->IndexLookup.empty());
PushFont(password_font);
}
// NB: we are only allowed to access 'edit_state' if we are the active widget.
ImGuiTextEditState& edit_state = g.InputTextState;
- const bool focus_requested = FocusableItemRegister(window, g.ActiveId == id, (flags & (ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_AllowTabInput)) == 0); // Using completion callback disable keyboard tabbing
+ const bool focus_requested = FocusableItemRegister(window, id, (flags & (ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_AllowTabInput)) == 0); // Using completion callback disable keyboard tabbing
const bool focus_requested_by_code = focus_requested && (window->FocusIdxAllCounter == window->FocusIdxAllRequestCurrent);
const bool focus_requested_by_tab = focus_requested && !focus_requested_by_code;
- const bool hovered = IsHovered(frame_bb, id);
- if (hovered)
- {
- SetHoveredID(id);
- g.MouseCursor = ImGuiMouseCursor_TextInput;
- }
const bool user_clicked = hovered && io.MouseClicked[0];
const bool user_scrolled = is_multiline && g.ActiveId == 0 && edit_state.Id == id && g.ActiveIdPreviousFrame == draw_window->GetIDNoKeepAlive("#SCROLLY");
+ bool clear_active_id = false;
+
bool select_all = (g.ActiveId != id) && (flags & ImGuiInputTextFlags_AutoSelectAll) != 0;
if (focus_requested || user_clicked || user_scrolled)
{
@@ -7787,8 +8270,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
else if (io.MouseClicked[0])
{
// Release focus when we click outside
- if (g.ActiveId == id)
- ClearActiveID();
+ clear_active_id = true;
}
bool value_changed = false;
@@ -7811,12 +8293,13 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
// Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
// Down the line we should have a cleaner library-wide concept of Selected vs Active.
g.ActiveIdAllowOverlap = !io.MouseDown[0];
+ g.WantTextInputNextFrame = 1;
// Edit in progress
const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + edit_state.ScrollX;
const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f));
- const bool osx_double_click_selects_words = io.OSXBehaviors; // OS X style: Double click selects by word instead of selecting whole text
+ const bool osx_double_click_selects_words = io.OptMacOSXBehaviors; // OS X style: Double click selects by word instead of selecting whole text
if (select_all || (hovered && !osx_double_click_selects_words && io.MouseDoubleClicked[0]))
{
edit_state.SelectAll();
@@ -7861,13 +8344,16 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
// Consume characters
memset(g.IO.InputCharacters, 0, sizeof(g.IO.InputCharacters));
}
+ }
- // Handle various key-presses
- bool cancel_edit = false;
+ bool cancel_edit = false;
+ if (g.ActiveId == id && !g.ActiveIdIsJustActivated && !clear_active_id)
+ {
+ // Handle key-presses
const int k_mask = (io.KeyShift ? STB_TEXTEDIT_K_SHIFT : 0);
- const bool is_shortcut_key_only = (io.OSXBehaviors ? (io.KeySuper && !io.KeyCtrl) : (io.KeyCtrl && !io.KeySuper)) && !io.KeyAlt && !io.KeyShift; // OS X style: Shortcuts using Cmd/Super instead of Ctrl
- const bool is_wordmove_key_down = io.OSXBehaviors ? io.KeyAlt : io.KeyCtrl; // OS X style: Text editing cursor movement using Alt instead of Ctrl
- const bool is_startend_key_down = io.OSXBehaviors && io.KeySuper && !io.KeyCtrl && !io.KeyAlt; // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End
+ const bool is_shortcut_key_only = (io.OptMacOSXBehaviors ? (io.KeySuper && !io.KeyCtrl) : (io.KeyCtrl && !io.KeySuper)) && !io.KeyAlt && !io.KeyShift; // OS X style: Shortcuts using Cmd/Super instead of Ctrl
+ const bool is_wordmove_key_down = io.OptMacOSXBehaviors ? io.KeyAlt : io.KeyCtrl; // OS X style: Text editing cursor movement using Alt instead of Ctrl
+ const bool is_startend_key_down = io.OptMacOSXBehaviors && io.KeySuper && !io.KeyCtrl && !io.KeyAlt; // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End
if (IsKeyPressedMap(ImGuiKey_LeftArrow)) { edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); }
else if (IsKeyPressedMap(ImGuiKey_RightArrow)) { edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); }
@@ -7881,7 +8367,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
if (!edit_state.HasSelection())
{
if (is_wordmove_key_down) edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT);
- else if (io.OSXBehaviors && io.KeySuper && !io.KeyAlt && !io.KeyCtrl) edit_state.OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT);
+ else if (io.OptMacOSXBehaviors && io.KeySuper && !io.KeyAlt && !io.KeyCtrl) edit_state.OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT);
}
edit_state.OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask);
}
@@ -7890,8 +8376,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0;
if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl))
{
- ClearActiveID();
- enter_pressed = true;
+ enter_pressed = clear_active_id = true;
}
else if (is_editable)
{
@@ -7906,10 +8391,10 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
if (InputTextFilterCharacter(&c, flags, callback, user_data))
edit_state.OnKeyPressed((int)c);
}
- else if (IsKeyPressedMap(ImGuiKey_Escape)) { ClearActiveID(); cancel_edit = true; }
- else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Z) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_UNDO); edit_state.ClearSelection(); }
- else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Y) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_REDO); edit_state.ClearSelection(); }
- else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_A)) { edit_state.SelectAll(); edit_state.CursorFollow = true; }
+ else if (IsKeyPressedMap(ImGuiKey_Escape)) { clear_active_id = cancel_edit = true; }
+ else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Z) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_UNDO); edit_state.ClearSelection(); }
+ else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Y) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_REDO); edit_state.ClearSelection(); }
+ else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_A)) { edit_state.SelectAll(); edit_state.CursorFollow = true; }
else if (is_shortcut_key_only && !is_password && ((IsKeyPressedMap(ImGuiKey_X) && is_editable) || IsKeyPressedMap(ImGuiKey_C)) && (!is_multiline || edit_state.HasSelection()))
{
// Cut, Copy
@@ -7960,7 +8445,10 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
ImGui::MemFree(clipboard_filtered);
}
}
+ }
+ if (g.ActiveId == id)
+ {
if (cancel_edit)
{
// Restore initial value
@@ -7970,7 +8458,11 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
value_changed = true;
}
}
- else
+
+ // When using 'ImGuiInputTextFlags_EnterReturnsTrue' as a special case we reapply the live buffer back to the input buffer before clearing ActiveId, even though strictly speaking it wasn't modified on this frame.
+ // If we didn't do that, code like InputInt() with ImGuiInputTextFlags_EnterReturnsTrue would fail. Also this allows the user to use InputText() with ImGuiInputTextFlags_EnterReturnsTrue without maintaining any user-side storage.
+ bool apply_edit_back_to_user_buffer = !cancel_edit || (enter_pressed && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0);
+ if (apply_edit_back_to_user_buffer)
{
// Apply new value immediately - copy modified buffer back
// Note that as soon as the input box is active, the in-widget value gets priority over any underlying modification of the input buffer
@@ -8058,6 +8550,10 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
}
}
+ // Release active ID at the end of the function (so e.g. pressing Return still does a final application of the value)
+ if (clear_active_id && g.ActiveId == id)
+ ClearActiveID();
+
// Render
// Select which buffer we are going to display. When ImGuiInputTextFlags_NoLiveEdit is set 'buf' might still be the old value. We set buf to NULL to prevent accidental usage from now on.
const char* buf_display = (g.ActiveId == id && is_editable) ? edit_state.TempTextBuffer.Data : buf; buf = NULL;
@@ -8120,7 +8616,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
select_start_offset.y = searches_result_line_number[1] * g.FontSize;
}
- // Calculate text height
+ // Store text height (note that we haven't calculated text width at all, see GitHub issues #383, #1224)
if (is_multiline)
text_size = ImVec2(size.x, line_count * g.FontSize);
}
@@ -8183,7 +8679,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
ImVec2 rect_size = InputTextCalcTextSizeW(p, text_selected_end, &p, NULL, true);
if (rect_size.x <= 0.0f) rect_size.x = (float)(int)(g.Font->GetCharAdvance((unsigned short)' ') * 0.50f); // So we can see selected empty lines
ImRect rect(rect_pos + ImVec2(0.0f, bg_offy_up - g.FontSize), rect_pos +ImVec2(rect_size.x, bg_offy_dn));
- rect.Clip(clip_rect);
+ rect.ClipWith(clip_rect);
if (rect.Overlaps(clip_rect))
draw_window->DrawList->AddRectFilled(rect.Min, rect.Max, bg_color);
}
@@ -8195,7 +8691,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
draw_window->DrawList->AddText(g.Font, g.FontSize, render_pos - render_scroll, GetColorU32(ImGuiCol_Text), buf_display, buf_display + edit_state.CurLenA, 0.0f, is_multiline ? NULL : &clip_rect);
// Draw blinking cursor
- bool cursor_is_visible = (g.InputTextState.CursorAnim <= 0.0f) || fmodf(g.InputTextState.CursorAnim, 1.20f) <= 0.80f;
+ bool cursor_is_visible = (!g.IO.OptCursorBlink) || (g.InputTextState.CursorAnim <= 0.0f) || fmodf(g.InputTextState.CursorAnim, 1.20f) <= 0.80f;
ImVec2 cursor_screen_pos = render_pos + cursor_offset - render_scroll;
ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y-g.FontSize+0.5f, cursor_screen_pos.x+1.0f, cursor_screen_pos.y-1.5f);
if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect))
@@ -8226,7 +8722,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
// Log as text
if (g.LogEnabled && !is_password)
- LogRenderedText(render_pos, buf_display, NULL);
+ LogRenderedText(&render_pos, buf_display, NULL);
if (label_size.x > 0)
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
@@ -8248,6 +8744,12 @@ bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, co
return InputTextEx(label, buf, (int)buf_size, size, flags | ImGuiInputTextFlags_Multiline, callback, user_data);
}
+static inline float SmallSquareSize()
+{
+ ImGuiContext& g = *GImGui;
+ return g.FontSize + g.Style.FramePadding.y * 2.0f;
+}
+
// NB: scalar_format here must be a simple "%xx" format string with no prefix/suffix (unlike the Drag/Slider functions "display_format" argument)
bool ImGui::InputScalarEx(const char* label, ImGuiDataType data_type, void* data_ptr, void* step_ptr, void* step_fast_ptr, const char* scalar_format, ImGuiInputTextFlags extra_flags)
{
@@ -8261,7 +8763,7 @@ bool ImGui::InputScalarEx(const char* label, ImGuiDataType data_type, void* data
BeginGroup();
PushID(label);
- const ImVec2 button_sz = ImVec2(g.FontSize, g.FontSize) + style.FramePadding*2.0f;
+ const ImVec2 button_sz = ImVec2(SmallSquareSize(), SmallSquareSize());
if (step_ptr)
PushItemWidth(ImMax(1.0f, CalcItemWidth() - (button_sz.x + style.ItemInnerSpacing.x)*2));
@@ -8343,7 +8845,6 @@ bool ImGui::InputFloatN(const char* label, float* v, int components, int decimal
}
PopID();
- window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.CurrentLineTextBaseOffset, g.Style.FramePadding.y);
TextUnformatted(label, FindRenderedTextEnd(label));
EndGroup();
@@ -8386,7 +8887,6 @@ bool ImGui::InputIntN(const char* label, int* v, int components, ImGuiInputTextF
}
PopID();
- window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.CurrentLineTextBaseOffset, g.Style.FramePadding.y);
TextUnformatted(label, FindRenderedTextEnd(label));
EndGroup();
@@ -8457,8 +8957,7 @@ bool ImGui::Combo(const char* label, int* current_item, const char* items_separa
return value_changed;
}
-// Combo box function.
-bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items)
+bool ImGui::BeginCombo(const char* label, const char* preview_value, ImVec2 popup_size)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
@@ -8473,95 +8972,111 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f));
const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
ItemSize(total_bb, style.FramePadding.y);
- if (!ItemAdd(total_bb, &id))
+ if (!ItemAdd(total_bb, id))
return false;
- const float arrow_size = (g.FontSize + style.FramePadding.x * 2.0f);
- const bool hovered = IsHovered(frame_bb, id);
+ const float arrow_size = SmallSquareSize();
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held);
+
bool popup_open = IsPopupOpen(id);
- bool popup_opened_now = false;
const ImRect value_bb(frame_bb.Min, frame_bb.Max - ImVec2(arrow_size, 0.0f));
RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
RenderFrame(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y), frame_bb.Max, GetColorU32(popup_open || hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button), true, style.FrameRounding); // FIXME-ROUNDING
- RenderCollapseTriangle(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y) + style.FramePadding, true);
+ RenderTriangle(ImVec2(frame_bb.Max.x - arrow_size + style.FramePadding.y, frame_bb.Min.y + style.FramePadding.y), ImGuiDir_Down);
- if (*current_item >= 0 && *current_item < items_count)
- {
- const char* item_text;
- if (items_getter(data, *current_item, &item_text))
- RenderTextClipped(frame_bb.Min + style.FramePadding, value_bb.Max, item_text, NULL, NULL, ImVec2(0.0f,0.0f));
- }
+ if (preview_value != NULL)
+ RenderTextClipped(frame_bb.Min + style.FramePadding, value_bb.Max, preview_value, NULL, NULL, ImVec2(0.0f,0.0f));
if (label_size.x > 0)
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
- if (hovered)
+ if (pressed && !popup_open)
{
- SetHoveredID(id);
- if (g.IO.MouseClicked[0])
- {
- ClearActiveID();
- if (IsPopupOpen(id))
- {
- ClosePopup(id);
- }
- else
- {
- FocusWindow(window);
- OpenPopup(label);
- popup_open = popup_opened_now = true;
- }
- }
+ OpenPopupEx(id, false);
+ popup_open = true;
}
- bool value_changed = false;
- if (IsPopupOpen(id))
+ if (!popup_open)
+ return false;
+
+ if (popup_size.x == 0.0f)
+ popup_size.x = w;
+
+ float popup_y1 = frame_bb.Max.y;
+ float popup_y2 = ImClamp(popup_y1 + popup_size.y, popup_y1, g.IO.DisplaySize.y - style.DisplaySafeAreaPadding.y);
+ if ((popup_y2 - popup_y1) < ImMin(popup_size.y, frame_bb.Min.y - style.DisplaySafeAreaPadding.y))
{
- // Size default to hold ~7 items
- if (height_in_items < 0)
- height_in_items = 7;
+ // Position our combo ABOVE because there's more space to fit! (FIXME: Handle in Begin() or use a shared helper. We have similar code in Begin() for popup placement)
+ popup_y1 = ImClamp(frame_bb.Min.y - popup_size.y, style.DisplaySafeAreaPadding.y, frame_bb.Min.y);
+ popup_y2 = frame_bb.Min.y;
+ SetNextWindowPos(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FrameBorderSize), ImGuiCond_Always, ImVec2(0.0f, 1.0f));
+ }
+ else
+ {
+ // Position our combo below
+ SetNextWindowPos(ImVec2(frame_bb.Min.x, frame_bb.Max.y - style.FrameBorderSize), ImGuiCond_Always, ImVec2(0.0f, 0.0f));
+ }
+ SetNextWindowSize(ImVec2(popup_size.x, popup_y2 - popup_y1), ImGuiCond_Appearing);
+ PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
- float popup_height = (label_size.y + style.ItemSpacing.y) * ImMin(items_count, height_in_items) + (style.FramePadding.y * 3);
- float popup_y1 = frame_bb.Max.y;
- float popup_y2 = ImClamp(popup_y1 + popup_height, popup_y1, g.IO.DisplaySize.y - style.DisplaySafeAreaPadding.y);
- if ((popup_y2 - popup_y1) < ImMin(popup_height, frame_bb.Min.y - style.DisplaySafeAreaPadding.y))
- {
- // Position our combo ABOVE because there's more space to fit! (FIXME: Handle in Begin() or use a shared helper. We have similar code in Begin() for popup placement)
- popup_y1 = ImClamp(frame_bb.Min.y - popup_height, style.DisplaySafeAreaPadding.y, frame_bb.Min.y);
- popup_y2 = frame_bb.Min.y;
- }
- ImRect popup_rect(ImVec2(frame_bb.Min.x, popup_y1), ImVec2(frame_bb.Max.x, popup_y2));
- SetNextWindowPos(popup_rect.Min);
- SetNextWindowSize(popup_rect.GetSize());
- PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
+ if (!BeginPopupEx(id, ImGuiWindowFlags_ComboBox))
+ {
+ IM_ASSERT(0); // This should never happen as we tested for IsPopupOpen() above
+ return false;
+ }
+ Spacing();
+
+ return true;
+}
+
+void ImGui::EndCombo()
+{
+ EndPopup();
+ PopStyleVar();
+}
+
+// Combo box function.
+bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items)
+{
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+
+ const char* preview_text = NULL;
+ if (*current_item >= 0 && *current_item < items_count)
+ items_getter(data, *current_item, &preview_text);
+
+ // Size default to hold ~7 items
+ if (height_in_items < 0)
+ height_in_items = 7;
+ float popup_height = (g.FontSize + style.ItemSpacing.y) * ImMin(items_count, height_in_items) + (style.FramePadding.y * 3);
+
+ if (!BeginCombo(label, preview_text, ImVec2(0.0f, popup_height)))
+ return false;
- const ImGuiWindowFlags flags = ImGuiWindowFlags_ComboBox | ((window->Flags & ImGuiWindowFlags_ShowBorders) ? ImGuiWindowFlags_ShowBorders : 0);
- if (BeginPopupEx(label, flags))
+ // Display items
+ // FIXME-OPT: Use clipper
+ bool value_changed = false;
+ for (int i = 0; i < items_count; i++)
+ {
+ PushID((void*)(intptr_t)i);
+ const bool item_selected = (i == *current_item);
+ const char* item_text;
+ if (!items_getter(data, i, &item_text))
+ item_text = "*Unknown item*";
+ if (Selectable(item_text, item_selected))
{
- // Display items
- Spacing();
- for (int i = 0; i < items_count; i++)
- {
- PushID((void*)(intptr_t)i);
- const bool item_selected = (i == *current_item);
- const char* item_text;
- if (!items_getter(data, i, &item_text))
- item_text = "*Unknown item*";
- if (Selectable(item_text, item_selected))
- {
- ClearActiveID();
- value_changed = true;
- *current_item = i;
- }
- if (item_selected && popup_opened_now)
- SetScrollHere();
- PopID();
- }
- EndPopup();
+ value_changed = true;
+ *current_item = i;
}
- PopStyleVar();
+ if (item_selected && IsWindowAppearing())
+ SetScrollHere();
+ PopID();
}
+
+ EndCombo();
return value_changed;
}
@@ -8576,7 +9091,7 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
- if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsCount > 1)
+ if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsCount > 1) // FIXME-OPT: Avoid if vertically clipped.
PopClipRect();
ImGuiID id = window->GetID(label);
@@ -8605,7 +9120,7 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
bb_with_spacing.Min.y -= spacing_U;
bb_with_spacing.Max.x += spacing_R;
bb_with_spacing.Max.y += spacing_D;
- if (!ItemAdd(bb_with_spacing, &id))
+ if (!ItemAdd(bb_with_spacing, id))
{
if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsCount > 1)
PushColumnClipRect();
@@ -8613,8 +9128,8 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
}
ImGuiButtonFlags button_flags = 0;
- if (flags & ImGuiSelectableFlags_Menu) button_flags |= ImGuiButtonFlags_PressedOnClick;
- if (flags & ImGuiSelectableFlags_MenuItem) button_flags |= ImGuiButtonFlags_PressedOnClick|ImGuiButtonFlags_PressedOnRelease;
+ if (flags & ImGuiSelectableFlags_Menu) button_flags |= ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_NoHoldingActiveID;
+ if (flags & ImGuiSelectableFlags_MenuItem) button_flags |= ImGuiButtonFlags_PressedOnRelease;
if (flags & ImGuiSelectableFlags_Disabled) button_flags |= ImGuiButtonFlags_Disabled;
if (flags & ImGuiSelectableFlags_AllowDoubleClick) button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick;
bool hovered, held;
@@ -8640,7 +9155,7 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor();
// Automatically close popups
- if (pressed && !(flags & ImGuiSelectableFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup))
+ if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(window->DC.ItemFlags & ImGuiItemFlags_SelectableDontClosePopup))
CloseCurrentPopup();
return pressed;
}
@@ -8727,7 +9242,7 @@ bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(v
// Assume all items have even height (= 1 line of text). If you need items of different or variable sizes you can create a custom version of ListBox() in your code without using the clipper.
bool value_changed = false;
- ImGuiListClipper clipper(items_count, GetTextLineHeightWithSpacing());
+ ImGuiListClipper clipper(items_count, GetTextLineHeightWithSpacing()); // We know exactly our line height here so we pass it as a minor optimization, but generally you don't need to.
while (clipper.Step())
for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
{
@@ -8755,23 +9270,38 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo
return false;
ImGuiContext& g = *GImGui;
+ ImGuiStyle& style = g.Style;
ImVec2 pos = window->DC.CursorPos;
ImVec2 label_size = CalcTextSize(label, NULL, true);
- ImVec2 shortcut_size = shortcut ? CalcTextSize(shortcut, NULL) : ImVec2(0.0f, 0.0f);
- float w = window->MenuColumns.DeclColumns(label_size.x, shortcut_size.x, (float)(int)(g.FontSize * 1.20f)); // Feedback for next frame
- float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w);
- bool pressed = Selectable(label, false, ImGuiSelectableFlags_MenuItem | ImGuiSelectableFlags_DrawFillAvailWidth | (enabled ? 0 : ImGuiSelectableFlags_Disabled), ImVec2(w, 0.0f));
- if (shortcut_size.x > 0.0f)
+ ImGuiSelectableFlags flags = ImGuiSelectableFlags_MenuItem | (enabled ? 0 : ImGuiSelectableFlags_Disabled);
+ bool pressed;
+ if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
+ {
+ // Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful
+ // Note that in this situation we render neither the shortcut neither the selected tick mark
+ float w = label_size.x;
+ window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f);
+ PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing * 2.0f);
+ pressed = Selectable(label, false, flags, ImVec2(w, 0.0f));
+ PopStyleVar();
+ window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
+ }
+ else
{
- PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
- RenderText(pos + ImVec2(window->MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false);
- PopStyleColor();
+ ImVec2 shortcut_size = shortcut ? CalcTextSize(shortcut, NULL) : ImVec2(0.0f, 0.0f);
+ float w = window->MenuColumns.DeclColumns(label_size.x, shortcut_size.x, (float)(int)(g.FontSize * 1.20f)); // Feedback for next frame
+ float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w);
+ pressed = Selectable(label, false, flags | ImGuiSelectableFlags_DrawFillAvailWidth, ImVec2(w, 0.0f));
+ if (shortcut_size.x > 0.0f)
+ {
+ PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
+ RenderText(pos + ImVec2(window->MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false);
+ PopStyleColor();
+ }
+ if (selected)
+ RenderCheckMark(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize * 0.866f);
}
-
- if (selected)
- RenderCheckMark(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.20f, 0.0f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled));
-
return pressed;
}
@@ -8822,12 +9352,18 @@ bool ImGui::BeginMenuBar()
IM_ASSERT(!window->DC.MenuBarAppending);
BeginGroup(); // Save position
PushID("##menubar");
- ImRect rect = window->MenuBarRect();
- PushClipRect(ImVec2(ImFloor(rect.Min.x+0.5f), ImFloor(rect.Min.y + window->BorderSize + 0.5f)), ImVec2(ImFloor(rect.Max.x+0.5f), ImFloor(rect.Max.y+0.5f)), false);
- window->DC.CursorPos = ImVec2(rect.Min.x + window->DC.MenuBarOffsetX, rect.Min.y);// + g.Style.FramePadding.y);
+
+ // We don't clip with regular window clipping rectangle as it is already set to the area below. However we clip with window full rect.
+ // We remove 1 worth of rounding to Max.x to that text in long menus don't tend to display over the lower-right rounded area, which looks particularly glitchy.
+ ImRect bar_rect = window->MenuBarRect();
+ ImRect clip_rect(ImFloor(bar_rect.Min.x + 0.5f), ImFloor(bar_rect.Min.y + window->WindowBorderSize + 0.5f), ImFloor(ImMax(bar_rect.Min.x, bar_rect.Max.x - window->WindowRounding) + 0.5f), ImFloor(bar_rect.Max.y + 0.5f));
+ clip_rect.ClipWith(window->Rect());
+ PushClipRect(clip_rect.Min, clip_rect.Max, false);
+
+ window->DC.CursorPos = ImVec2(bar_rect.Min.x + window->DC.MenuBarOffsetX, bar_rect.Min.y);// + g.Style.FramePadding.y);
window->DC.LayoutType = ImGuiLayoutType_Horizontal;
window->DC.MenuBarAppending = true;
- AlignFirstTextHeightToWidgets();
+ AlignTextToFramePadding();
return true;
}
@@ -8859,43 +9395,47 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
const ImGuiID id = window->GetID(label);
ImVec2 label_size = CalcTextSize(label, NULL, true);
- ImGuiWindow* backed_focused_window = g.FocusedWindow;
bool pressed;
bool menu_is_open = IsPopupOpen(id);
bool menuset_is_open = !(window->Flags & ImGuiWindowFlags_Popup) && (g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].ParentMenuSet == window->GetID("##menus"));
+ ImGuiWindow* backed_nav_window = g.NavWindow;
if (menuset_is_open)
- g.FocusedWindow = window;
+ g.NavWindow = window; // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent)
+ // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu (using FindBestPopupWindowPos).
ImVec2 popup_pos, pos = window->DC.CursorPos;
if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
{
+ // Menu inside an horizontal menu bar
+ // Selectable extend their highlight by half ItemSpacing in each direction.
+ // For ChildMenu, the popup position will be overwritten by the call to FindBestPopupWindowPos() in Begin()
popup_pos = ImVec2(pos.x - window->WindowPadding.x, pos.y - style.FramePadding.y + window->MenuBarHeight());
window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f);
PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing * 2.0f);
float w = label_size.x;
pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f));
PopStyleVar();
- SameLine();
- window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f);
+ window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
}
else
{
+ // Menu inside a menu
popup_pos = ImVec2(pos.x, pos.y - style.WindowPadding.y);
float w = window->MenuColumns.DeclColumns(label_size.x, 0.0f, (float)(int)(g.FontSize * 1.20f)); // Feedback to next frame
float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w);
pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_DrawFillAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f));
if (!enabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
- RenderCollapseTriangle(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.20f, 0.0f), false);
+ RenderTriangle(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.30f, 0.0f), ImGuiDir_Right);
if (!enabled) PopStyleColor();
}
- bool hovered = enabled && IsHovered(window->DC.LastItemRect, id);
+ const bool hovered = enabled && ItemHoverable(window->DC.LastItemRect, id);
if (menuset_is_open)
- g.FocusedWindow = backed_focused_window;
+ g.NavWindow = backed_nav_window;
bool want_open = false, want_close = false;
- if (window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu))
+ if (window->DC.LayoutType != ImGuiLayoutType_Horizontal) // (window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu))
{
// Implement http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown to avoid using timers, so menus feels more reactive.
bool moving_within_opened_triangle = false;
@@ -8911,7 +9451,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
ta.x += (window->Pos.x < next_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues
tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale?
tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f);
- moving_within_opened_triangle = ImIsPointInTriangle(g.IO.MousePos, ta, tb, tc);
+ moving_within_opened_triangle = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos);
//window->DrawList->PushClipRectFullScreen(); window->DrawList->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); window->DrawList->PopClipRect(); // Debug
}
}
@@ -8919,13 +9459,20 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
want_close = (menu_is_open && !hovered && g.HoveredWindow == window && g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrame != id && !moving_within_opened_triangle);
want_open = (!menu_is_open && hovered && !moving_within_opened_triangle) || (!menu_is_open && hovered && pressed);
}
- else if (menu_is_open && pressed && menuset_is_open) // menu-bar: click open menu to close
+ else
{
- want_close = true;
- want_open = menu_is_open = false;
+ // Menu bar
+ if (menu_is_open && pressed && menuset_is_open) // Click an open menu again to close it
+ {
+ want_close = true;
+ want_open = menu_is_open = false;
+ }
+ else if (pressed || (hovered && menuset_is_open && !menu_is_open)) // First click to open, then hover to open others
+ {
+ want_open = true;
+ }
}
- else if (pressed || (hovered && menuset_is_open && !menu_is_open)) // menu-bar: first click to open, then hover to open others
- want_open = true;
+
if (!enabled) // explicitly close if an open menu becomes disabled, facilitate users code a lot in pattern such as 'if (BeginMenu("options", has_object)) { ..use object.. }'
want_close = true;
if (want_close && IsPopupOpen(id))
@@ -8944,9 +9491,9 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
if (menu_is_open)
{
- SetNextWindowPos(popup_pos, ImGuiSetCond_Always);
- ImGuiWindowFlags flags = ImGuiWindowFlags_ShowBorders | ((window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) ? ImGuiWindowFlags_ChildMenu|ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu);
- menu_is_open = BeginPopupEx(label, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
+ SetNextWindowPos(popup_pos, ImGuiCond_Always);
+ ImGuiWindowFlags flags = ImGuiWindowFlags_AlwaysAutoResize | ((window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) ? ImGuiWindowFlags_ChildMenu|ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu);
+ menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
}
return menu_is_open;
@@ -8957,50 +9504,245 @@ void ImGui::EndMenu()
EndPopup();
}
+// Note: only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+
+ int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
+ BeginTooltipEx(0, true);
+
+ const char* text_end = text ? FindRenderedTextEnd(text, NULL) : text;
+ if (text_end > text)
+ {
+ TextUnformatted(text, text_end);
+ Separator();
+ }
+
+ ImVec2 sz(g.FontSize * 3 + g.Style.FramePadding.y * 2, g.FontSize * 3 + g.Style.FramePadding.y * 2);
+ ColorButton("##preview", ImVec4(col[0], col[1], col[2], col[3]), (flags & (ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz);
+ SameLine();
+ if (flags & ImGuiColorEditFlags_NoAlpha)
+ Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]);
+ else
+ Text("#%02X%02X%02X%02X\nR:%d, G:%d, B:%d, A:%d\n(%.3f, %.3f, %.3f, %.3f)", cr, cg, cb, ca, cr, cg, cb, ca, col[0], col[1], col[2], col[3]);
+ EndTooltip();
+}
+
+static inline ImU32 ImAlphaBlendColor(ImU32 col_a, ImU32 col_b)
+{
+ float t = ((col_b >> IM_COL32_A_SHIFT) & 0xFF) / 255.f;
+ int r = ImLerp((int)(col_a >> IM_COL32_R_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_R_SHIFT) & 0xFF, t);
+ int g = ImLerp((int)(col_a >> IM_COL32_G_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_G_SHIFT) & 0xFF, t);
+ int b = ImLerp((int)(col_a >> IM_COL32_B_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_B_SHIFT) & 0xFF, t);
+ return IM_COL32(r, g, b, 0xFF);
+}
+
+// NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that.
+// I spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding alltogether.
+void ImGui::RenderColorRectWithAlphaCheckerboard(ImVec2 p_min, ImVec2 p_max, ImU32 col, float grid_step, ImVec2 grid_off, float rounding, int rounding_corners_flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (((col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT) < 0xFF)
+ {
+ ImU32 col_bg1 = GetColorU32(ImAlphaBlendColor(IM_COL32(204,204,204,255), col));
+ ImU32 col_bg2 = GetColorU32(ImAlphaBlendColor(IM_COL32(128,128,128,255), col));
+ window->DrawList->AddRectFilled(p_min, p_max, col_bg1, rounding, rounding_corners_flags);
+
+ int yi = 0;
+ for (float y = p_min.y + grid_off.y; y < p_max.y; y += grid_step, yi++)
+ {
+ float y1 = ImClamp(y, p_min.y, p_max.y), y2 = ImMin(y + grid_step, p_max.y);
+ if (y2 <= y1)
+ continue;
+ for (float x = p_min.x + grid_off.x + (yi & 1) * grid_step; x < p_max.x; x += grid_step * 2.0f)
+ {
+ float x1 = ImClamp(x, p_min.x, p_max.x), x2 = ImMin(x + grid_step, p_max.x);
+ if (x2 <= x1)
+ continue;
+ int rounding_corners_flags_cell = 0;
+ if (y1 <= p_min.y) { if (x1 <= p_min.x) rounding_corners_flags_cell |= ImDrawCornerFlags_TopLeft; if (x2 >= p_max.x) rounding_corners_flags_cell |= ImDrawCornerFlags_TopRight; }
+ if (y2 >= p_max.y) { if (x1 <= p_min.x) rounding_corners_flags_cell |= ImDrawCornerFlags_BotLeft; if (x2 >= p_max.x) rounding_corners_flags_cell |= ImDrawCornerFlags_BotRight; }
+ rounding_corners_flags_cell &= rounding_corners_flags;
+ window->DrawList->AddRectFilled(ImVec2(x1,y1), ImVec2(x2,y2), col_bg2, rounding_corners_flags_cell ? rounding : 0.0f, rounding_corners_flags_cell);
+ }
+ }
+ }
+ else
+ {
+ window->DrawList->AddRectFilled(p_min, p_max, col, rounding, rounding_corners_flags);
+ }
+}
+
+void ImGui::SetColorEditOptions(ImGuiColorEditFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ if ((flags & ImGuiColorEditFlags__InputsMask) == 0)
+ flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__InputsMask;
+ if ((flags & ImGuiColorEditFlags__DataTypeMask) == 0)
+ flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DataTypeMask;
+ if ((flags & ImGuiColorEditFlags__PickerMask) == 0)
+ flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__PickerMask;
+ IM_ASSERT(ImIsPowerOfTwo((int)(flags & ImGuiColorEditFlags__InputsMask))); // Check only 1 option is selected
+ IM_ASSERT(ImIsPowerOfTwo((int)(flags & ImGuiColorEditFlags__DataTypeMask))); // Check only 1 option is selected
+ IM_ASSERT(ImIsPowerOfTwo((int)(flags & ImGuiColorEditFlags__PickerMask))); // Check only 1 option is selected
+ g.ColorEditOptions = flags;
+}
+
// A little colored square. Return true when clicked.
// FIXME: May want to display/ignore the alpha component in the color display? Yet show it in the tooltip.
-bool ImGui::ColorButton(const ImVec4& col, bool small_height, bool outline_border)
+// 'desc_id' is not called 'label' because we don't display it next to the button, but only in the tooltip.
+bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags, ImVec2 size)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
return false;
ImGuiContext& g = *GImGui;
- const ImGuiStyle& style = g.Style;
- const ImGuiID id = window->GetID("#colorbutton");
- const float square_size = g.FontSize;
- const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(square_size + style.FramePadding.y*2, square_size + (small_height ? 0 : style.FramePadding.y*2)));
- ItemSize(bb, small_height ? 0.0f : style.FramePadding.y);
- if (!ItemAdd(bb, &id))
+ const ImGuiID id = window->GetID(desc_id);
+ float default_size = SmallSquareSize();
+ if (size.x == 0.0f)
+ size.x = default_size;
+ if (size.y == 0.0f)
+ size.y = default_size;
+ const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+ ItemSize(bb, (size.y >= default_size) ? g.Style.FramePadding.y : 0.0f);
+ if (!ItemAdd(bb, id))
return false;
bool hovered, held;
bool pressed = ButtonBehavior(bb, id, &hovered, &held);
- RenderFrame(bb.Min, bb.Max, GetColorU32(col), outline_border, style.FrameRounding);
- if (hovered)
- SetTooltip("Color:\n(%.2f,%.2f,%.2f,%.2f)\n#%02X%02X%02X%02X", col.x, col.y, col.z, col.w, IM_F32_TO_INT8_SAT(col.x), IM_F32_TO_INT8_SAT(col.y), IM_F32_TO_INT8_SAT(col.z), IM_F32_TO_INT8_SAT(col.z));
+ if (flags & ImGuiColorEditFlags_NoAlpha)
+ flags &= ~(ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf);
+
+ ImVec4 col_without_alpha(col.x, col.y, col.z, 1.0f);
+ float grid_step = ImMin(size.x, size.y) / 2.99f;
+ float rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5f);
+ ImRect bb_inner = bb;
+ float off = -0.75f; // The border (using Col_FrameBg) tends to look off when color is near-opaque and rounding is enabled. This offset seemed like a good middle ground to reduce those artifacts.
+ bb_inner.Expand(off);
+ if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col.w < 1.0f)
+ {
+ float mid_x = (float)(int)((bb_inner.Min.x + bb_inner.Max.x) * 0.5f + 0.5f);
+ RenderColorRectWithAlphaCheckerboard(ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight| ImDrawCornerFlags_BotRight);
+ window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_without_alpha), rounding, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotLeft);
+ }
+ else
+ {
+ // Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha
+ ImVec4 col_source = (flags & ImGuiColorEditFlags_AlphaPreview) ? col : col_without_alpha;
+ if (col_source.w < 1.0f)
+ RenderColorRectWithAlphaCheckerboard(bb_inner.Min, bb_inner.Max, GetColorU32(col_source), grid_step, ImVec2(off, off), rounding);
+ else
+ window->DrawList->AddRectFilled(bb_inner.Min, bb_inner.Max, GetColorU32(col_source), rounding, ImDrawCornerFlags_All);
+ }
+ if (g.Style.FrameBorderSize > 0.0f)
+ RenderFrameBorder(bb.Min, bb.Max, rounding);
+ else
+ window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), rounding); // Color button are often in need of some sort of border
+
+ if (hovered && !(flags & ImGuiColorEditFlags_NoTooltip))
+ ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf));
return pressed;
}
-bool ImGui::ColorEdit3(const char* label, float col[3])
+bool ImGui::ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags)
{
- float col4[4];
- col4[0] = col[0];
- col4[1] = col[1];
- col4[2] = col[2];
- col4[3] = 1.0f;
- const bool value_changed = ColorEdit4(label, col4, false);
- col[0] = col4[0];
- col[1] = col4[1];
- col[2] = col4[2];
- return value_changed;
+ return ColorEdit4(label, col, flags | ImGuiColorEditFlags_NoAlpha);
}
-// Edit colors components (each component in 0.0f..1.0f range
-// Use CTRL-Click to input value and TAB to go to next item.
-bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha)
+void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags)
+{
+ bool allow_opt_inputs = !(flags & ImGuiColorEditFlags__InputsMask);
+ bool allow_opt_datatype = !(flags & ImGuiColorEditFlags__DataTypeMask);
+ if ((!allow_opt_inputs && !allow_opt_datatype) || !BeginPopup("context"))
+ return;
+ ImGuiContext& g = *GImGui;
+ ImGuiColorEditFlags opts = g.ColorEditOptions;
+ if (allow_opt_inputs)
+ {
+ if (RadioButton("RGB", (opts & ImGuiColorEditFlags_RGB) ? 1 : 0)) opts = (opts & ~ImGuiColorEditFlags__InputsMask) | ImGuiColorEditFlags_RGB;
+ if (RadioButton("HSV", (opts & ImGuiColorEditFlags_HSV) ? 1 : 0)) opts = (opts & ~ImGuiColorEditFlags__InputsMask) | ImGuiColorEditFlags_HSV;
+ if (RadioButton("HEX", (opts & ImGuiColorEditFlags_HEX) ? 1 : 0)) opts = (opts & ~ImGuiColorEditFlags__InputsMask) | ImGuiColorEditFlags_HEX;
+ }
+ if (allow_opt_datatype)
+ {
+ if (allow_opt_inputs) Separator();
+ if (RadioButton("0..255", (opts & ImGuiColorEditFlags_Uint8) ? 1 : 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Uint8;
+ if (RadioButton("0.00..1.00", (opts & ImGuiColorEditFlags_Float) ? 1 : 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Float;
+ }
+
+ if (allow_opt_inputs || allow_opt_datatype)
+ Separator();
+ if (Button("Copy as..", ImVec2(-1,0)))
+ OpenPopup("Copy");
+ if (BeginPopup("Copy"))
+ {
+ int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
+ char buf[64];
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "(%.3ff, %.3ff, %.3ff, %.3ff)", col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
+ if (Selectable(buf))
+ SetClipboardText(buf);
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "(%d,%d,%d,%d)", cr, cg, cb, ca);
+ if (Selectable(buf))
+ SetClipboardText(buf);
+ if (flags & ImGuiColorEditFlags_NoAlpha)
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "0x%02X%02X%02X", cr, cg, cb);
+ else
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "0x%02X%02X%02X%02X", cr, cg, cb, ca);
+ if (Selectable(buf))
+ SetClipboardText(buf);
+ EndPopup();
+ }
+
+ g.ColorEditOptions = opts;
+ EndPopup();
+}
+
+static void ColorPickerOptionsPopup(ImGuiColorEditFlags flags, float* ref_col)
+{
+ bool allow_opt_picker = !(flags & ImGuiColorEditFlags__PickerMask);
+ bool allow_opt_alpha_bar = !(flags & ImGuiColorEditFlags_NoAlpha) && !(flags & ImGuiColorEditFlags_AlphaBar);
+ if ((!allow_opt_picker && !allow_opt_alpha_bar) || !ImGui::BeginPopup("context"))
+ return;
+ ImGuiContext& g = *GImGui;
+ if (allow_opt_picker)
+ {
+ ImVec2 picker_size(g.FontSize * 8, ImMax(g.FontSize * 8 - (SmallSquareSize() + g.Style.ItemInnerSpacing.x), 1.0f)); // FIXME: Picker size copied from main picker function
+ ImGui::PushItemWidth(picker_size.x);
+ for (int picker_type = 0; picker_type < 2; picker_type++)
+ {
+ // Draw small/thumbnail version of each picker type (over an invisible button for selection)
+ if (picker_type > 0) ImGui::Separator();
+ ImGui::PushID(picker_type);
+ ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs|ImGuiColorEditFlags_NoOptions|ImGuiColorEditFlags_NoLabel|ImGuiColorEditFlags_NoSidePreview|(flags & ImGuiColorEditFlags_NoAlpha);
+ if (picker_type == 0) picker_flags |= ImGuiColorEditFlags_PickerHueBar;
+ if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel;
+ ImVec2 backup_pos = ImGui::GetCursorScreenPos();
+ if (ImGui::Selectable("##selectable", false, 0, picker_size)) // By default, Selectable() is closing popup
+ g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask);
+ ImGui::SetCursorScreenPos(backup_pos);
+ ImVec4 dummy_ref_col;
+ memcpy(&dummy_ref_col.x, ref_col, sizeof(float) * (picker_flags & ImGuiColorEditFlags_NoAlpha ? 3 : 4));
+ ImGui::ColorPicker4("##dummypicker", &dummy_ref_col.x, picker_flags);
+ ImGui::PopID();
+ }
+ ImGui::PopItemWidth();
+ }
+ if (allow_opt_alpha_bar)
+ {
+ if (allow_opt_picker) ImGui::Separator();
+ ImGui::CheckboxFlags("Alpha Bar", (unsigned int*)&g.ColorEditOptions, ImGuiColorEditFlags_AlphaBar);
+ }
+ ImGui::EndPopup();
+}
+
+// Edit colors components (each component in 0.0f..1.0f range).
+// See enum ImGuiColorEditFlags_ for available options. e.g. Only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+// With typical options: Left-click on colored square to open color picker. Right-click to open option menu. CTRL-Click over input fields to edit them and TAB to go to next item.
+bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
@@ -9008,146 +9750,513 @@ bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha)
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
- const ImGuiID id = window->GetID(label);
- const float w_full = CalcItemWidth();
- const float square_sz = (g.FontSize + style.FramePadding.y * 2.0f);
+ const float square_sz = SmallSquareSize();
+ const float w_extra = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x);
+ const float w_items_all = CalcItemWidth() - w_extra;
+ const char* label_display_end = FindRenderedTextEnd(label);
- ImGuiColorEditMode edit_mode = window->DC.ColorEditMode;
- if (edit_mode == ImGuiColorEditMode_UserSelect || edit_mode == ImGuiColorEditMode_UserSelectShowButton)
- edit_mode = g.ColorEditModeStorage.GetInt(id, 0) % 3;
+ const bool alpha = (flags & ImGuiColorEditFlags_NoAlpha) == 0;
+ const bool hdr = (flags & ImGuiColorEditFlags_HDR) != 0;
+ const int components = alpha ? 4 : 3;
+ const ImGuiColorEditFlags flags_untouched = flags;
- float f[4] = { col[0], col[1], col[2], col[3] };
- if (edit_mode == ImGuiColorEditMode_HSV)
- ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
+ BeginGroup();
+ PushID(label);
+ // If we're not showing any slider there's no point in doing any HSV conversions
+ if (flags & ImGuiColorEditFlags_NoInputs)
+ flags = (flags & (~ImGuiColorEditFlags__InputsMask)) | ImGuiColorEditFlags_RGB | ImGuiColorEditFlags_NoOptions;
+
+ // Context menu: display and modify options (before defaults are applied)
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ ColorEditOptionsPopup(col, flags);
+
+ // Read stored options
+ if (!(flags & ImGuiColorEditFlags__InputsMask))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags__InputsMask);
+ if (!(flags & ImGuiColorEditFlags__DataTypeMask))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DataTypeMask);
+ if (!(flags & ImGuiColorEditFlags__PickerMask))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags__PickerMask);
+ flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags__InputsMask | ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask));
+
+ // Convert to the formats we need
+ float f[4] = { col[0], col[1], col[2], alpha ? col[3] : 1.0f };
+ if (flags & ImGuiColorEditFlags_HSV)
+ ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) };
- int components = alpha ? 4 : 3;
bool value_changed = false;
+ bool value_changed_as_float = false;
- BeginGroup();
- PushID(label);
+ if ((flags & (ImGuiColorEditFlags_RGB | ImGuiColorEditFlags_HSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
+ {
+ // RGB/HSV 0..255 Sliders
+ const float w_item_one = ImMax(1.0f, (float)(int)((w_items_all - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
+ const float w_item_last = ImMax(1.0f, (float)(int)(w_items_all - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
+
+ const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x);
+ const char* ids[4] = { "##X", "##Y", "##Z", "##W" };
+ const char* fmt_table_int[3][4] =
+ {
+ { "%3.0f", "%3.0f", "%3.0f", "%3.0f" }, // Short display
+ { "R:%3.0f", "G:%3.0f", "B:%3.0f", "A:%3.0f" }, // Long display for RGBA
+ { "H:%3.0f", "S:%3.0f", "V:%3.0f", "A:%3.0f" } // Long display for HSVA
+ };
+ const char* fmt_table_float[3][4] =
+ {
+ { "%0.3f", "%0.3f", "%0.3f", "%0.3f" }, // Short display
+ { "R:%0.3f", "G:%0.3f", "B:%0.3f", "A:%0.3f" }, // Long display for RGBA
+ { "H:%0.3f", "S:%0.3f", "V:%0.3f", "A:%0.3f" } // Long display for HSVA
+ };
+ const int fmt_idx = hide_prefix ? 0 : (flags & ImGuiColorEditFlags_HSV) ? 2 : 1;
+
+ PushItemWidth(w_item_one);
+ for (int n = 0; n < components; n++)
+ {
+ if (n > 0)
+ SameLine(0, style.ItemInnerSpacing.x);
+ if (n + 1 == components)
+ PushItemWidth(w_item_last);
+ if (flags & ImGuiColorEditFlags_Float)
+ value_changed = value_changed_as_float = value_changed | DragFloat(ids[n], &f[n], 1.0f/255.0f, 0.0f, hdr ? 0.0f : 1.0f, fmt_table_float[fmt_idx][n]);
+ else
+ value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, hdr ? 0 : 255, fmt_table_int[fmt_idx][n]);
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context");
+ }
+ PopItemWidth();
+ PopItemWidth();
+ }
+ else if ((flags & ImGuiColorEditFlags_HEX) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
+ {
+ // RGB Hexadecimal Input
+ char buf[64];
+ if (alpha)
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255), ImClamp(i[3],0,255));
+ else
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255));
+ PushItemWidth(w_items_all);
+ if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
+ {
+ value_changed = true;
+ char* p = buf;
+ while (*p == '#' || ImCharIsSpace(*p))
+ p++;
+ i[0] = i[1] = i[2] = i[3] = 0;
+ if (alpha)
+ sscanf(p, "%02X%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2], (unsigned int*)&i[3]); // Treat at unsigned (%X is unsigned)
+ else
+ sscanf(p, "%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2]);
+ }
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context");
+ PopItemWidth();
+ }
- const bool hsv = (edit_mode == 1);
- switch (edit_mode)
+ bool picker_active = false;
+ if (!(flags & ImGuiColorEditFlags_NoSmallPreview))
{
- case ImGuiColorEditMode_RGB:
- case ImGuiColorEditMode_HSV:
+ if (!(flags & ImGuiColorEditFlags_NoInputs))
+ SameLine(0, style.ItemInnerSpacing.x);
+
+ const ImVec4 col_v4(col[0], col[1], col[2], alpha ? col[3] : 1.0f);
+ if (ColorButton("##ColorButton", col_v4, flags))
{
- // RGB/HSV 0..255 Sliders
- const float w_items_all = w_full - (square_sz + style.ItemInnerSpacing.x);
- const float w_item_one = ImMax(1.0f, (float)(int)((w_items_all - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
- const float w_item_last = ImMax(1.0f, (float)(int)(w_items_all - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
-
- const bool hide_prefix = (w_item_one <= CalcTextSize("M:999").x);
- const char* ids[4] = { "##X", "##Y", "##Z", "##W" };
- const char* fmt_table[3][4] =
+ if (!(flags & ImGuiColorEditFlags_NoPicker))
{
- { "%3.0f", "%3.0f", "%3.0f", "%3.0f" },
- { "R:%3.0f", "G:%3.0f", "B:%3.0f", "A:%3.0f" },
- { "H:%3.0f", "S:%3.0f", "V:%3.0f", "A:%3.0f" }
- };
- const char** fmt = hide_prefix ? fmt_table[0] : hsv ? fmt_table[2] : fmt_table[1];
-
- PushItemWidth(w_item_one);
- for (int n = 0; n < components; n++)
+ // Store current color and open a picker
+ g.ColorPickerRef = col_v4;
+ OpenPopup("picker");
+ SetNextWindowPos(window->DC.LastItemRect.GetBL() + ImVec2(-1,style.ItemSpacing.y));
+ }
+ }
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context");
+
+ if (BeginPopup("picker"))
+ {
+ picker_active = true;
+ if (label != label_display_end)
{
- if (n > 0)
- SameLine(0, style.ItemInnerSpacing.x);
- if (n + 1 == components)
- PushItemWidth(w_item_last);
- value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, 255, fmt[n]);
+ TextUnformatted(label, label_display_end);
+ Separator();
}
+ ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar;
+ ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags__InputsMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
+ PushItemWidth(square_sz * 12.0f); // Use 256 + bar sizes?
+ value_changed |= ColorPicker4("##picker", col, picker_flags, &g.ColorPickerRef.x);
PopItemWidth();
- PopItemWidth();
+ EndPopup();
}
- break;
- case ImGuiColorEditMode_HEX:
+ }
+
+ if (label != label_display_end && !(flags & ImGuiColorEditFlags_NoLabel))
+ {
+ SameLine(0, style.ItemInnerSpacing.x);
+ TextUnformatted(label, label_display_end);
+ }
+
+ // Convert back
+ if (!picker_active)
+ {
+ if (!value_changed_as_float)
+ for (int n = 0; n < 4; n++)
+ f[n] = i[n] / 255.0f;
+ if (flags & ImGuiColorEditFlags_HSV)
+ ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
+ if (value_changed)
{
- // RGB Hexadecimal Input
- const float w_slider_all = w_full - square_sz;
- char buf[64];
+ col[0] = f[0];
+ col[1] = f[1];
+ col[2] = f[2];
if (alpha)
- ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", i[0], i[1], i[2], i[3]);
- else
- ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", i[0], i[1], i[2]);
- PushItemWidth(w_slider_all - style.ItemInnerSpacing.x);
- if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
+ col[3] = f[3];
+ }
+ }
+
+ PopID();
+ EndGroup();
+
+ return value_changed;
+}
+
+bool ImGui::ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags)
+{
+ float col4[4] = { col[0], col[1], col[2], 1.0f };
+ if (!ColorPicker4(label, col4, flags | ImGuiColorEditFlags_NoAlpha))
+ return false;
+ col[0] = col4[0]; col[1] = col4[1]; col[2] = col4[2];
+ return true;
+}
+
+// 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
+static void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
+{
+ switch (direction)
+ {
+ case ImGuiDir_Left: draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), pos, col); return;
+ case ImGuiDir_Right: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), pos, col); return;
+ case ImGuiDir_Up: draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), pos, col); return;
+ case ImGuiDir_Down: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), pos, col); return;
+ default: return; // Fix warning for ImGuiDir_None
+ }
+}
+
+static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, float bar_w)
+{
+ RenderArrow(draw_list, ImVec2(pos.x + half_sz.x + 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Right, IM_COL32_BLACK);
+ RenderArrow(draw_list, ImVec2(pos.x + half_sz.x, pos.y), half_sz, ImGuiDir_Right, IM_COL32_WHITE);
+ RenderArrow(draw_list, ImVec2(pos.x + bar_w - half_sz.x - 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Left, IM_COL32_BLACK);
+ RenderArrow(draw_list, ImVec2(pos.x + bar_w - half_sz.x, pos.y), half_sz, ImGuiDir_Left, IM_COL32_WHITE);
+}
+
+// ColorPicker
+// Note: only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+// FIXME: we adjust the big color square height based on item width, which may cause a flickering feedback loop (if automatic height makes a vertical scrollbar appears, affecting automatic width..)
+bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags, const float* ref_col)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ ImDrawList* draw_list = window->DrawList;
+
+ ImGuiStyle& style = g.Style;
+ ImGuiIO& io = g.IO;
+
+ PushID(label);
+ BeginGroup();
+
+ if (!(flags & ImGuiColorEditFlags_NoSidePreview))
+ flags |= ImGuiColorEditFlags_NoSmallPreview;
+
+ // Context menu: display and store options.
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ ColorPickerOptionsPopup(flags, col);
+
+ // Read stored options
+ if (!(flags & ImGuiColorEditFlags__PickerMask))
+ flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__PickerMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__PickerMask;
+ IM_ASSERT(ImIsPowerOfTwo((int)(flags & ImGuiColorEditFlags__PickerMask))); // Check that only 1 is selected
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags_AlphaBar);
+
+ // Setup
+ bool alpha_bar = (flags & ImGuiColorEditFlags_AlphaBar) && !(flags & ImGuiColorEditFlags_NoAlpha);
+ ImVec2 picker_pos = window->DC.CursorPos;
+ float square_sz = SmallSquareSize();
+ float bars_width = square_sz; // Arbitrary smallish width of Hue/Alpha picking bars
+ float sv_picker_size = ImMax(bars_width * 1, CalcItemWidth() - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box
+ float bar0_pos_x = picker_pos.x + sv_picker_size + style.ItemInnerSpacing.x;
+ float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x;
+ float bars_triangles_half_sz = (float)(int)(bars_width * 0.20f);
+
+ float wheel_thickness = sv_picker_size * 0.08f;
+ float wheel_r_outer = sv_picker_size * 0.50f;
+ float wheel_r_inner = wheel_r_outer - wheel_thickness;
+ ImVec2 wheel_center(picker_pos.x + (sv_picker_size + bars_width)*0.5f, picker_pos.y + sv_picker_size*0.5f);
+
+ // Note: the triangle is displayed rotated with triangle_pa pointing to Hue, but most coordinates stays unrotated for logic.
+ float triangle_r = wheel_r_inner - (int)(sv_picker_size * 0.027f);
+ ImVec2 triangle_pa = ImVec2(triangle_r, 0.0f); // Hue point.
+ ImVec2 triangle_pb = ImVec2(triangle_r * -0.5f, triangle_r * -0.866025f); // Black point.
+ ImVec2 triangle_pc = ImVec2(triangle_r * -0.5f, triangle_r * +0.866025f); // White point.
+
+ float H,S,V;
+ ColorConvertRGBtoHSV(col[0], col[1], col[2], H, S, V);
+
+ bool value_changed = false, value_changed_h = false, value_changed_sv = false;
+
+ if (flags & ImGuiColorEditFlags_PickerHueWheel)
+ {
+ // Hue wheel + SV triangle logic
+ InvisibleButton("hsv", ImVec2(sv_picker_size + style.ItemInnerSpacing.x + bars_width, sv_picker_size));
+ if (IsItemActive())
+ {
+ ImVec2 initial_off = g.IO.MouseClickedPos[0] - wheel_center;
+ ImVec2 current_off = g.IO.MousePos - wheel_center;
+ float initial_dist2 = ImLengthSqr(initial_off);
+ if (initial_dist2 >= (wheel_r_inner-1)*(wheel_r_inner-1) && initial_dist2 <= (wheel_r_outer+1)*(wheel_r_outer+1))
{
- value_changed |= true;
- char* p = buf;
- while (*p == '#' || ImCharIsSpace(*p))
- p++;
- i[0] = i[1] = i[2] = i[3] = 0;
- if (alpha)
- sscanf(p, "%02X%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2], (unsigned int*)&i[3]); // Treat at unsigned (%X is unsigned)
- else
- sscanf(p, "%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2]);
+ // Interactive with Hue wheel
+ H = atan2f(current_off.y, current_off.x) / IM_PI*0.5f;
+ if (H < 0.0f)
+ H += 1.0f;
+ value_changed = value_changed_h = true;
+ }
+ float cos_hue_angle = cosf(-H * 2.0f * IM_PI);
+ float sin_hue_angle = sinf(-H * 2.0f * IM_PI);
+ if (ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, ImRotate(initial_off, cos_hue_angle, sin_hue_angle)))
+ {
+ // Interacting with SV triangle
+ ImVec2 current_off_unrotated = ImRotate(current_off, cos_hue_angle, sin_hue_angle);
+ if (!ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated))
+ current_off_unrotated = ImTriangleClosestPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated);
+ float uu, vv, ww;
+ ImTriangleBarycentricCoords(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated, uu, vv, ww);
+ V = ImClamp(1.0f - vv, 0.0001f, 1.0f);
+ S = ImClamp(uu / V, 0.0001f, 1.0f);
+ value_changed = value_changed_sv = true;
}
- PopItemWidth();
}
- break;
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context");
}
+ else if (flags & ImGuiColorEditFlags_PickerHueBar)
+ {
+ // SV rectangle logic
+ InvisibleButton("sv", ImVec2(sv_picker_size, sv_picker_size));
+ if (IsItemActive())
+ {
+ S = ImSaturate((io.MousePos.x - picker_pos.x) / (sv_picker_size-1));
+ V = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1));
+ value_changed = value_changed_sv = true;
+ }
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context");
- SameLine(0, style.ItemInnerSpacing.x);
-
- const ImVec4 col_display(col[0], col[1], col[2], 1.0f);
- if (ColorButton(col_display))
- g.ColorEditModeStorage.SetInt(id, (edit_mode + 1) % 3); // Don't set local copy of 'edit_mode' right away!
+ // Hue bar logic
+ SetCursorScreenPos(ImVec2(bar0_pos_x, picker_pos.y));
+ InvisibleButton("hue", ImVec2(bars_width, sv_picker_size));
+ if (IsItemActive())
+ {
+ H = ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1));
+ value_changed = value_changed_h = true;
+ }
+ }
- // Recreate our own tooltip over's ColorButton() one because we want to display correct alpha here
- if (IsItemHovered())
- SetTooltip("Color:\n(%.2f,%.2f,%.2f,%.2f)\n#%02X%02X%02X%02X", col[0], col[1], col[2], col[3], IM_F32_TO_INT8_SAT(col[0]), IM_F32_TO_INT8_SAT(col[1]), IM_F32_TO_INT8_SAT(col[2]), IM_F32_TO_INT8_SAT(col[3]));
+ // Alpha bar logic
+ if (alpha_bar)
+ {
+ SetCursorScreenPos(ImVec2(bar1_pos_x, picker_pos.y));
+ InvisibleButton("alpha", ImVec2(bars_width, sv_picker_size));
+ if (IsItemActive())
+ {
+ col[3] = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1));
+ value_changed = true;
+ }
+ }
- if (window->DC.ColorEditMode == ImGuiColorEditMode_UserSelectShowButton)
+ if (!(flags & ImGuiColorEditFlags_NoSidePreview))
{
SameLine(0, style.ItemInnerSpacing.x);
- const char* button_titles[3] = { "RGB", "HSV", "HEX" };
- if (ButtonEx(button_titles[edit_mode], ImVec2(0,0), ImGuiButtonFlags_DontClosePopups))
- g.ColorEditModeStorage.SetInt(id, (edit_mode + 1) % 3); // Don't set local copy of 'edit_mode' right away!
+ BeginGroup();
}
- const char* label_display_end = FindRenderedTextEnd(label);
- if (label != label_display_end)
+ if (!(flags & ImGuiColorEditFlags_NoLabel))
{
- SameLine(0, (window->DC.ColorEditMode == ImGuiColorEditMode_UserSelectShowButton) ? -1.0f : style.ItemInnerSpacing.x);
- TextUnformatted(label, label_display_end);
+ const char* label_display_end = FindRenderedTextEnd(label);
+ if (label != label_display_end)
+ {
+ if ((flags & ImGuiColorEditFlags_NoSidePreview))
+ SameLine(0, style.ItemInnerSpacing.x);
+ TextUnformatted(label, label_display_end);
+ }
}
- // Convert back
- for (int n = 0; n < 4; n++)
- f[n] = i[n] / 255.0f;
- if (edit_mode == 1)
- ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
+ if (!(flags & ImGuiColorEditFlags_NoSidePreview))
+ {
+ ImVec4 col_v4(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
+ if ((flags & ImGuiColorEditFlags_NoLabel))
+ Text("Current");
+ ColorButton("##current", col_v4, (flags & (ImGuiColorEditFlags_HDR|ImGuiColorEditFlags_AlphaPreview|ImGuiColorEditFlags_AlphaPreviewHalf|ImGuiColorEditFlags_NoTooltip)), ImVec2(square_sz * 3, square_sz * 2));
+ if (ref_col != NULL)
+ {
+ Text("Original");
+ ImVec4 ref_col_v4(ref_col[0], ref_col[1], ref_col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : ref_col[3]);
+ if (ColorButton("##original", ref_col_v4, (flags & (ImGuiColorEditFlags_HDR|ImGuiColorEditFlags_AlphaPreview|ImGuiColorEditFlags_AlphaPreviewHalf|ImGuiColorEditFlags_NoTooltip)), ImVec2(square_sz * 3, square_sz * 2)))
+ {
+ memcpy(col, ref_col, ((flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4) * sizeof(float));
+ value_changed = true;
+ }
+ }
+ EndGroup();
+ }
+
+ // Convert back color to RGB
+ if (value_changed_h || value_changed_sv)
+ ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]);
+
+ // R,G,B and H,S,V slider color editor
+ if ((flags & ImGuiColorEditFlags_NoInputs) == 0)
+ {
+ PushItemWidth((alpha_bar ? bar1_pos_x : bar0_pos_x) + bars_width - picker_pos.x);
+ ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf;
+ ImGuiColorEditFlags sub_flags = (flags & sub_flags_to_forward) | ImGuiColorEditFlags_NoPicker;
+ if (flags & ImGuiColorEditFlags_RGB || (flags & ImGuiColorEditFlags__InputsMask) == 0)
+ value_changed |= ColorEdit4("##rgb", col, sub_flags | ImGuiColorEditFlags_RGB);
+ if (flags & ImGuiColorEditFlags_HSV || (flags & ImGuiColorEditFlags__InputsMask) == 0)
+ value_changed |= ColorEdit4("##hsv", col, sub_flags | ImGuiColorEditFlags_HSV);
+ if (flags & ImGuiColorEditFlags_HEX || (flags & ImGuiColorEditFlags__InputsMask) == 0)
+ value_changed |= ColorEdit4("##hex", col, sub_flags | ImGuiColorEditFlags_HEX);
+ PopItemWidth();
+ }
+ // Try to cancel hue wrap (after ColorEdit), if any
if (value_changed)
{
- col[0] = f[0];
- col[1] = f[1];
- col[2] = f[2];
- if (alpha)
- col[3] = f[3];
+ float new_H, new_S, new_V;
+ ColorConvertRGBtoHSV(col[0], col[1], col[2], new_H, new_S, new_V);
+ if (new_H <= 0 && H > 0)
+ {
+ if (new_V <= 0 && V != new_V)
+ ColorConvertHSVtoRGB(H, S, new_V <= 0 ? V * 0.5f : new_V, col[0], col[1], col[2]);
+ else if (new_S <= 0)
+ ColorConvertHSVtoRGB(H, new_S <= 0 ? S * 0.5f : new_S, new_V, col[0], col[1], col[2]);
+ }
+ }
+
+ ImVec4 hue_color_f(1, 1, 1, 1); ColorConvertHSVtoRGB(H, 1, 1, hue_color_f.x, hue_color_f.y, hue_color_f.z);
+ ImU32 hue_color32 = ColorConvertFloat4ToU32(hue_color_f);
+ ImU32 col32_no_alpha = ColorConvertFloat4ToU32(ImVec4(col[0], col[1], col[2], 1.0f));
+
+ const ImU32 hue_colors[6+1] = { IM_COL32(255,0,0,255), IM_COL32(255,255,0,255), IM_COL32(0,255,0,255), IM_COL32(0,255,255,255), IM_COL32(0,0,255,255), IM_COL32(255,0,255,255), IM_COL32(255,0,0,255) };
+ ImVec2 sv_cursor_pos;
+
+ if (flags & ImGuiColorEditFlags_PickerHueWheel)
+ {
+ // Render Hue Wheel
+ const float aeps = 1.5f / wheel_r_outer; // Half a pixel arc length in radians (2pi cancels out).
+ const int segment_per_arc = ImMax(4, (int)wheel_r_outer / 12);
+ for (int n = 0; n < 6; n++)
+ {
+ const float a0 = (n) /6.0f * 2.0f * IM_PI - aeps;
+ const float a1 = (n+1.0f)/6.0f * 2.0f * IM_PI + aeps;
+ const int vert_start_idx = draw_list->VtxBuffer.Size;
+ draw_list->PathArcTo(wheel_center, (wheel_r_inner + wheel_r_outer)*0.5f, a0, a1, segment_per_arc);
+ draw_list->PathStroke(IM_COL32_WHITE, false, wheel_thickness);
+ const int vert_end_idx = draw_list->VtxBuffer.Size;
+
+ // Paint colors over existing vertices
+ ImVec2 gradient_p0(wheel_center.x + cosf(a0) * wheel_r_inner, wheel_center.y + sinf(a0) * wheel_r_inner);
+ ImVec2 gradient_p1(wheel_center.x + cosf(a1) * wheel_r_inner, wheel_center.y + sinf(a1) * wheel_r_inner);
+ ShadeVertsLinearColorGradientKeepAlpha(draw_list->VtxBuffer.Data + vert_start_idx, draw_list->VtxBuffer.Data + vert_end_idx, gradient_p0, gradient_p1, hue_colors[n], hue_colors[n+1]);
+ }
+
+ // Render Cursor + preview on Hue Wheel
+ float cos_hue_angle = cosf(H * 2.0f * IM_PI);
+ float sin_hue_angle = sinf(H * 2.0f * IM_PI);
+ ImVec2 hue_cursor_pos(wheel_center.x + cos_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f, wheel_center.y + sin_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f);
+ float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f;
+ int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32);
+ draw_list->AddCircleFilled(hue_cursor_pos, hue_cursor_rad, hue_color32, hue_cursor_segments);
+ draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad+1, IM_COL32(128,128,128,255), hue_cursor_segments);
+ draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad, IM_COL32_WHITE, hue_cursor_segments);
+
+ // Render SV triangle (rotated according to hue)
+ ImVec2 tra = wheel_center + ImRotate(triangle_pa, cos_hue_angle, sin_hue_angle);
+ ImVec2 trb = wheel_center + ImRotate(triangle_pb, cos_hue_angle, sin_hue_angle);
+ ImVec2 trc = wheel_center + ImRotate(triangle_pc, cos_hue_angle, sin_hue_angle);
+ ImVec2 uv_white = g.FontTexUvWhitePixel;
+ draw_list->PrimReserve(6, 6);
+ draw_list->PrimVtx(tra, uv_white, hue_color32);
+ draw_list->PrimVtx(trb, uv_white, hue_color32);
+ draw_list->PrimVtx(trc, uv_white, IM_COL32_WHITE);
+ draw_list->PrimVtx(tra, uv_white, IM_COL32_BLACK_TRANS);
+ draw_list->PrimVtx(trb, uv_white, IM_COL32_BLACK);
+ draw_list->PrimVtx(trc, uv_white, IM_COL32_BLACK_TRANS);
+ draw_list->AddTriangle(tra, trb, trc, IM_COL32(128,128,128,255), 1.5f);
+ sv_cursor_pos = ImLerp(ImLerp(trc, tra, ImSaturate(S)), trb, ImSaturate(1 - V));
+ }
+ else if (flags & ImGuiColorEditFlags_PickerHueBar)
+ {
+ // Render SV Square
+ draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size,sv_picker_size), IM_COL32_WHITE, hue_color32, hue_color32, IM_COL32_WHITE);
+ draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size,sv_picker_size), IM_COL32_BLACK_TRANS, IM_COL32_BLACK_TRANS, IM_COL32_BLACK, IM_COL32_BLACK);
+ RenderFrameBorder(picker_pos, picker_pos + ImVec2(sv_picker_size,sv_picker_size), 0.0f);
+ sv_cursor_pos.x = ImClamp((float)(int)(picker_pos.x + ImSaturate(S) * sv_picker_size + 0.5f), picker_pos.x + 2, picker_pos.x + sv_picker_size - 2); // Sneakily prevent the circle to stick out too much
+ sv_cursor_pos.y = ImClamp((float)(int)(picker_pos.y + ImSaturate(1 - V) * sv_picker_size + 0.5f), picker_pos.y + 2, picker_pos.y + sv_picker_size - 2);
+
+ // Render Hue Bar
+ for (int i = 0; i < 6; ++i)
+ draw_list->AddRectFilledMultiColor(ImVec2(bar0_pos_x, picker_pos.y + i * (sv_picker_size / 6)), ImVec2(bar0_pos_x + bars_width, picker_pos.y + (i + 1) * (sv_picker_size / 6)), hue_colors[i], hue_colors[i], hue_colors[i + 1], hue_colors[i + 1]);
+ float bar0_line_y = (float)(int)(picker_pos.y + H * sv_picker_size + 0.5f);
+ RenderFrameBorder(ImVec2(bar0_pos_x, picker_pos.y), ImVec2(bar0_pos_x + bars_width, picker_pos.y + sv_picker_size), 0.0f);
+ RenderArrowsForVerticalBar(draw_list, ImVec2(bar0_pos_x - 1, bar0_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f);
+ }
+
+ // Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range)
+ float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f;
+ draw_list->AddCircleFilled(sv_cursor_pos, sv_cursor_rad, col32_no_alpha, 12);
+ draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad+1, IM_COL32(128,128,128,255), 12);
+ draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad, IM_COL32_WHITE, 12);
+
+ // Render alpha bar
+ if (alpha_bar)
+ {
+ float alpha = ImSaturate(col[3]);
+ ImRect bar1_bb(bar1_pos_x, picker_pos.y, bar1_pos_x + bars_width, picker_pos.y + sv_picker_size);
+ RenderColorRectWithAlphaCheckerboard(bar1_bb.Min, bar1_bb.Max, IM_COL32(0,0,0,0), bar1_bb.GetWidth() / 2.0f, ImVec2(0.0f, 0.0f));
+ draw_list->AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, col32_no_alpha, col32_no_alpha, col32_no_alpha & ~IM_COL32_A_MASK, col32_no_alpha & ~IM_COL32_A_MASK);
+ float bar1_line_y = (float)(int)(picker_pos.y + (1.0f - alpha) * sv_picker_size + 0.5f);
+ RenderFrameBorder(bar1_bb.Min, bar1_bb.Max, 0.0f);
+ RenderArrowsForVerticalBar(draw_list, ImVec2(bar1_pos_x - 1, bar1_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f);
}
- PopID();
EndGroup();
+ PopID();
return value_changed;
}
-void ImGui::ColorEditMode(ImGuiColorEditMode mode)
-{
- ImGuiWindow* window = GetCurrentWindow();
- window->DC.ColorEditMode = mode;
-}
-
// Horizontal separating line.
void ImGui::Separator()
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
return;
+ ImGuiContext& g = *GImGui;
+
+ ImGuiWindowFlags flags = 0;
+ if ((flags & (ImGuiSeparatorFlags_Horizontal | ImGuiSeparatorFlags_Vertical)) == 0)
+ flags |= (window->DC.LayoutType == ImGuiLayoutType_Horizontal) ? ImGuiSeparatorFlags_Vertical : ImGuiSeparatorFlags_Horizontal;
+ IM_ASSERT(ImIsPowerOfTwo((int)(flags & (ImGuiSeparatorFlags_Horizontal | ImGuiSeparatorFlags_Vertical)))); // Check that only 1 option is selected
+ if (flags & ImGuiSeparatorFlags_Vertical)
+ {
+ VerticalSeparator();
+ return;
+ }
+ // Horizontal Separator
if (window->DC.ColumnsCount > 1)
PopClipRect();
@@ -9158,18 +10267,17 @@ void ImGui::Separator()
const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y+1.0f));
ItemSize(ImVec2(0.0f, 0.0f)); // NB: we don't provide our width so that it doesn't get feed back into AutoFit, we don't provide height to not alter layout.
- if (!ItemAdd(bb, NULL))
+ if (!ItemAdd(bb, 0))
{
if (window->DC.ColumnsCount > 1)
PushColumnClipRect();
return;
}
- window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x,bb.Min.y), GetColorU32(ImGuiCol_Border));
+ window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x,bb.Min.y), GetColorU32(ImGuiCol_Separator));
- ImGuiContext& g = *GImGui;
if (g.LogEnabled)
- LogText(IM_NEWLINE "--------------------------------");
+ LogRenderedText(NULL, IM_NEWLINE "--------------------------------");
if (window->DC.ColumnsCount > 1)
{
@@ -9178,6 +10286,74 @@ void ImGui::Separator()
}
}
+void ImGui::VerticalSeparator()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+ ImGuiContext& g = *GImGui;
+
+ float y1 = window->DC.CursorPos.y;
+ float y2 = window->DC.CursorPos.y + window->DC.CurrentLineHeight;
+ const ImRect bb(ImVec2(window->DC.CursorPos.x, y1), ImVec2(window->DC.CursorPos.x + 1.0f, y2));
+ ItemSize(ImVec2(bb.GetWidth(), 0.0f));
+ if (!ItemAdd(bb, 0))
+ return;
+
+ window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y), ImVec2(bb.Min.x, bb.Max.y), GetColorU32(ImGuiCol_Separator));
+ if (g.LogEnabled)
+ LogText(" |");
+}
+
+bool ImGui::SplitterBehavior(ImGuiID id, const ImRect& bb, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags;
+#ifdef IMGUI_HAS_NAV
+ window->DC.ItemFlags |= ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus;
+#endif
+ bool add = ItemAdd(bb, id);
+ window->DC.ItemFlags = item_flags_backup;
+ if (!add)
+ return false;
+
+ bool hovered, held;
+ ImRect bb_interact = bb;
+ bb_interact.Expand(axis == ImGuiAxis_Y ? ImVec2(0.0f, hover_extend) : ImVec2(hover_extend, 0.0f));
+ ButtonBehavior(bb_interact, id, &hovered, &held, ImGuiButtonFlags_FlattenChilds | ImGuiButtonFlags_AllowOverlapMode);
+ if (g.ActiveId != id)
+ SetItemAllowOverlap();
+
+ if (held || (g.HoveredId == id && g.HoveredIdPreviousFrame == id))
+ SetMouseCursor(axis == ImGuiAxis_Y ? ImGuiMouseCursor_ResizeNS : ImGuiMouseCursor_ResizeEW);
+
+ ImRect bb_render = bb;
+ if (held)
+ {
+ ImVec2 mouse_delta_2d = g.IO.MousePos - g.ActiveIdClickOffset - bb_interact.Min;
+ float mouse_delta = (axis == ImGuiAxis_Y) ? mouse_delta_2d.y : mouse_delta_2d.x;
+
+ // Minimum pane size
+ if (mouse_delta < min_size1 - *size1)
+ mouse_delta = min_size1 - *size1;
+ if (mouse_delta > *size2 - min_size2)
+ mouse_delta = *size2 - min_size2;
+
+ // Apply resize
+ *size1 += mouse_delta;
+ *size2 -= mouse_delta;
+ bb_render.Translate((axis == ImGuiAxis_X) ? ImVec2(mouse_delta, 0.0f) : ImVec2(0.0f, mouse_delta));
+ }
+
+ // Render
+ const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
+ RenderFrame(bb_render.Min, bb_render.Max, col, true, g.Style.FrameRounding);
+
+ return held;
+}
+
void ImGui::Spacing()
{
ImGuiWindow* window = GetCurrentWindow();
@@ -9194,7 +10370,7 @@ void ImGui::Dummy(const ImVec2& size)
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
ItemSize(bb);
- ItemAdd(bb, NULL);
+ ItemAdd(bb, 0);
}
bool ImGui::IsRectVisible(const ImVec2& size)
@@ -9238,12 +10414,11 @@ void ImGui::EndGroup()
ImGuiContext& g = *GImGui;
ImGuiWindow* window = GetCurrentWindow();
- IM_ASSERT(!window->DC.GroupStack.empty()); // Mismatched BeginGroup()/EndGroup() calls
+ IM_ASSERT(!window->DC.GroupStack.empty()); // Mismatched BeginGroup()/EndGroup() calls
ImGuiGroupData& group_data = window->DC.GroupStack.back();
ImRect group_bb(group_data.BackupCursorPos, window->DC.CursorMaxPos);
- group_bb.Max.y -= g.Style.ItemSpacing.y; // Cancel out last vertical spacing because we are adding one ourselves.
group_bb.Max = ImMax(group_bb.Min, group_bb.Max);
window->DC.CursorPos = group_data.BackupCursorPos;
@@ -9258,20 +10433,19 @@ void ImGui::EndGroup()
{
window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.PrevLineTextBaseOffset, group_data.BackupCurrentLineTextBaseOffset); // FIXME: Incorrect, we should grab the base offset from the *first line* of the group but it is hard to obtain now.
ItemSize(group_bb.GetSize(), group_data.BackupCurrentLineTextBaseOffset);
- ItemAdd(group_bb, NULL);
+ ItemAdd(group_bb, 0);
}
- // If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive() will function on the entire group.
+ // If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive() will be functional on the entire group.
// It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but if you search for LastItemId you'll notice it is only used in that context.
const bool active_id_within_group = (!group_data.BackupActiveIdIsAlive && g.ActiveIdIsAlive && g.ActiveId && g.ActiveIdWindow->RootWindow == window->RootWindow);
if (active_id_within_group)
window->DC.LastItemId = g.ActiveId;
- if (active_id_within_group && g.HoveredId == g.ActiveId)
- window->DC.LastItemHoveredAndUsable = window->DC.LastItemHoveredRect = true;
+ window->DC.LastItemRect = group_bb;
window->DC.GroupStack.pop_back();
- //window->DrawList->AddRect(group_bb.Min, group_bb.Max, IM_COL32(255,0,255,255)); // Debug
+ //window->DrawList->AddRect(group_bb.Min, group_bb.Max, IM_COL32(255,0,255,255)); // [Debug]
}
// Gets back to previous line and continue with horizontal layout
@@ -9307,10 +10481,15 @@ void ImGui::NewLine()
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
return;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiLayoutType backup_layout_type = window->DC.LayoutType;
+ window->DC.LayoutType = ImGuiLayoutType_Vertical;
if (window->DC.CurrentLineHeight > 0.0f) // In the event that we are on a line with items that is smaller that FontSize high, we will preserve its height.
ItemSize(ImVec2(0,0));
else
- ItemSize(ImVec2(0.0f, GImGui->FontSize));
+ ItemSize(ImVec2(0.0f, g.FontSize));
+ window->DC.LayoutType = backup_layout_type;
}
void ImGui::NextColumn()
@@ -9358,53 +10537,77 @@ int ImGui::GetColumnsCount()
return window->DC.ColumnsCount;
}
+static float OffsetNormToPixels(ImGuiWindow* window, float offset_norm)
+{
+ return offset_norm * (window->DC.ColumnsMaxX - window->DC.ColumnsMinX);
+}
+
+static float PixelsToOffsetNorm(ImGuiWindow* window, float offset)
+{
+ return (offset - window->DC.ColumnsMinX) / (window->DC.ColumnsMaxX - window->DC.ColumnsMinX);
+}
+
static float GetDraggedColumnOffset(int column_index)
{
// Active (dragged) column always follow mouse. The reason we need this is that dragging a column to the right edge of an auto-resizing
// window creates a feedback loop because we store normalized positions. So while dragging we enforce absolute positioning.
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = ImGui::GetCurrentWindowRead();
+ ImGuiWindow* window = g.CurrentWindow;
IM_ASSERT(column_index > 0); // We cannot drag column 0. If you get this assert you may have a conflict between the ID of your columns and another widgets.
IM_ASSERT(g.ActiveId == window->DC.ColumnsSetId + ImGuiID(column_index));
float x = g.IO.MousePos.x - g.ActiveIdClickOffset.x - window->Pos.x;
- x = ImClamp(x, ImGui::GetColumnOffset(column_index-1)+g.Style.ColumnsMinSpacing, ImGui::GetColumnOffset(column_index+1)-g.Style.ColumnsMinSpacing);
+ x = ImMax(x, ImGui::GetColumnOffset(column_index-1) + g.Style.ColumnsMinSpacing);
+ if ((window->DC.ColumnsFlags & ImGuiColumnsFlags_NoPreserveWidths))
+ x = ImMin(x, ImGui::GetColumnOffset(column_index+1) - g.Style.ColumnsMinSpacing);
- return (float)(int)x;
+ return x;
}
float ImGui::GetColumnOffset(int column_index)
{
- ImGuiContext& g = *GImGui;
ImGuiWindow* window = GetCurrentWindowRead();
if (column_index < 0)
column_index = window->DC.ColumnsCurrent;
+ /*
if (g.ActiveId)
{
+ ImGuiContext& g = *GImGui;
const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(column_index);
if (g.ActiveId == column_id)
return GetDraggedColumnOffset(column_index);
}
+ */
IM_ASSERT(column_index < window->DC.ColumnsData.Size);
const float t = window->DC.ColumnsData[column_index].OffsetNorm;
- const float x_offset = window->DC.ColumnsMinX + t * (window->DC.ColumnsMaxX - window->DC.ColumnsMinX);
- return (float)(int)x_offset;
+ const float x_offset = ImLerp(window->DC.ColumnsMinX, window->DC.ColumnsMaxX, t);
+ return x_offset;
}
void ImGui::SetColumnOffset(int column_index, float offset)
{
+ ImGuiContext& g = *GImGui;
ImGuiWindow* window = GetCurrentWindow();
if (column_index < 0)
column_index = window->DC.ColumnsCurrent;
IM_ASSERT(column_index < window->DC.ColumnsData.Size);
- const float t = (offset - window->DC.ColumnsMinX) / (window->DC.ColumnsMaxX - window->DC.ColumnsMinX);
- window->DC.ColumnsData[column_index].OffsetNorm = t;
+
+ const bool preserve_width = !(window->DC.ColumnsFlags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < window->DC.ColumnsCount-1);
+ const float width = preserve_width ? GetColumnWidth(column_index) : 0.0f;
+
+ if (!(window->DC.ColumnsFlags & ImGuiColumnsFlags_NoForceWithinWindow))
+ offset = ImMin(offset, window->DC.ColumnsMaxX - g.Style.ColumnsMinSpacing * (window->DC.ColumnsCount - column_index));
+ const float offset_norm = PixelsToOffsetNorm(window, offset);
const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(column_index);
- window->DC.StateStorage->SetFloat(column_id, t);
+ window->DC.StateStorage->SetFloat(column_id, offset_norm);
+ window->DC.ColumnsData[column_index].OffsetNorm = offset_norm;
+
+ if (preserve_width)
+ SetColumnOffset(column_index + 1, offset + ImMax(g.Style.ColumnsMinSpacing, width));
}
float ImGui::GetColumnWidth(int column_index)
@@ -9413,111 +10616,162 @@ float ImGui::GetColumnWidth(int column_index)
if (column_index < 0)
column_index = window->DC.ColumnsCurrent;
- float w = GetColumnOffset(column_index+1) - GetColumnOffset(column_index);
- return w;
+ return OffsetNormToPixels(window, window->DC.ColumnsData[column_index+1].OffsetNorm - window->DC.ColumnsData[column_index].OffsetNorm);
}
-static void PushColumnClipRect(int column_index)
+void ImGui::SetColumnWidth(int column_index, float width)
{
- ImGuiWindow* window = ImGui::GetCurrentWindow();
+ ImGuiWindow* window = GetCurrentWindowRead();
if (column_index < 0)
column_index = window->DC.ColumnsCurrent;
- float x1 = ImFloor(0.5f + window->Pos.x + ImGui::GetColumnOffset(column_index) - 1.0f);
- float x2 = ImFloor(0.5f + window->Pos.x + ImGui::GetColumnOffset(column_index+1) - 1.0f);
- ImGui::PushClipRect(ImVec2(x1,-FLT_MAX), ImVec2(x2,+FLT_MAX), true);
+ SetColumnOffset(column_index+1, GetColumnOffset(column_index) + width);
}
-void ImGui::Columns(int columns_count, const char* id, bool border)
+void ImGui::PushColumnClipRect(int column_index)
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ if (column_index < 0)
+ column_index = window->DC.ColumnsCurrent;
+
+ PushClipRect(window->DC.ColumnsData[column_index].ClipRect.Min, window->DC.ColumnsData[column_index].ClipRect.Max, false);
+}
+
+void ImGui::BeginColumns(const char* id, int columns_count, ImGuiColumnsFlags flags)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = GetCurrentWindow();
- IM_ASSERT(columns_count >= 1);
- if (window->DC.ColumnsCount != 1)
+ IM_ASSERT(columns_count > 1);
+ IM_ASSERT(window->DC.ColumnsCount == 1); // Nested columns are currently not supported
+
+ // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget.
+ // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer.
+ PushID(0x11223347 + (id ? 0 : columns_count));
+ window->DC.ColumnsSetId = window->GetID(id ? id : "columns");
+ PopID();
+
+ // Set state for first column
+ window->DC.ColumnsCurrent = 0;
+ window->DC.ColumnsCount = columns_count;
+ window->DC.ColumnsFlags = flags;
+
+ const float content_region_width = (window->SizeContentsExplicit.x != 0.0f) ? (window->SizeContentsExplicit.x) : (window->Size.x -window->ScrollbarSizes.x);
+ window->DC.ColumnsMinX = window->DC.IndentX - g.Style.ItemSpacing.x; // Lock our horizontal range
+ //window->DC.ColumnsMaxX = content_region_width - window->Scroll.x -((window->Flags & ImGuiWindowFlags_NoScrollbar) ? 0 : g.Style.ScrollbarSize);// - window->WindowPadding().x;
+ window->DC.ColumnsMaxX = content_region_width - window->Scroll.x;
+ window->DC.ColumnsStartPosY = window->DC.CursorPos.y;
+ window->DC.ColumnsStartMaxPosX = window->DC.CursorMaxPos.x;
+ window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.CursorPos.y;
+ window->DC.ColumnsOffsetX = 0.0f;
+ window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX);
+
+ // Cache column offsets
+ window->DC.ColumnsData.resize(columns_count + 1);
+ for (int column_index = 0; column_index < columns_count + 1; column_index++)
{
- if (window->DC.ColumnsCurrent != 0)
- ItemSize(ImVec2(0,0)); // Advance to column 0
- PopItemWidth();
- PopClipRect();
- window->DrawList->ChannelsMerge();
+ const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(column_index);
+ KeepAliveID(column_id);
+ const float default_t = column_index / (float)window->DC.ColumnsCount;
+ float t = window->DC.StateStorage->GetFloat(column_id, default_t);
+ if (!(window->DC.ColumnsFlags & ImGuiColumnsFlags_NoForceWithinWindow))
+ t = ImMin(t, PixelsToOffsetNorm(window, window->DC.ColumnsMaxX - g.Style.ColumnsMinSpacing * (window->DC.ColumnsCount - column_index)));
+ window->DC.ColumnsData[column_index].OffsetNorm = t;
+ }
- window->DC.ColumnsCellMaxY = ImMax(window->DC.ColumnsCellMaxY, window->DC.CursorPos.y);
- window->DC.CursorPos.y = window->DC.ColumnsCellMaxY;
+ // Cache clipping rectangles
+ for (int column_index = 0; column_index < columns_count; column_index++)
+ {
+ float clip_x1 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(column_index) - 1.0f);
+ float clip_x2 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(column_index + 1) - 1.0f);
+ window->DC.ColumnsData[column_index].ClipRect = ImRect(clip_x1, -FLT_MAX, clip_x2, +FLT_MAX);
+ window->DC.ColumnsData[column_index].ClipRect.ClipWith(window->ClipRect);
}
- // Draw columns borders and handle resize at the time of "closing" a columns set
- if (window->DC.ColumnsCount != columns_count && window->DC.ColumnsCount != 1 && window->DC.ColumnsShowBorders && !window->SkipItems)
+ window->DrawList->ChannelsSplit(window->DC.ColumnsCount);
+ PushColumnClipRect();
+ PushItemWidth(GetColumnWidth() * 0.65f);
+}
+
+void ImGui::EndColumns()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ IM_ASSERT(window->DC.ColumnsCount > 1);
+
+ PopItemWidth();
+ PopClipRect();
+ window->DrawList->ChannelsMerge();
+
+ window->DC.ColumnsCellMaxY = ImMax(window->DC.ColumnsCellMaxY, window->DC.CursorPos.y);
+ window->DC.CursorPos.y = window->DC.ColumnsCellMaxY;
+ if (!(window->DC.ColumnsFlags & ImGuiColumnsFlags_GrowParentContentsSize))
+ window->DC.CursorMaxPos.x = ImMax(window->DC.ColumnsStartMaxPosX, window->DC.ColumnsMaxX); // Restore cursor max pos, as columns don't grow parent
+
+ // Draw columns borders and handle resize
+ if (!(window->DC.ColumnsFlags & ImGuiColumnsFlags_NoBorder) && !window->SkipItems)
{
const float y1 = window->DC.ColumnsStartPosY;
const float y2 = window->DC.CursorPos.y;
+ int dragging_column = -1;
for (int i = 1; i < window->DC.ColumnsCount; i++)
{
float x = window->Pos.x + GetColumnOffset(i);
const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(i);
- const ImRect column_rect(ImVec2(x-4,y1),ImVec2(x+4,y2));
- if (IsClippedEx(column_rect, &column_id, false))
+ const float column_hw = 4.0f; // Half-width for interaction
+ const ImRect column_rect(ImVec2(x - column_hw, y1), ImVec2(x + column_hw, y2));
+ if (IsClippedEx(column_rect, column_id, false))
continue;
+
+ bool hovered = false, held = false;
+ if (!(window->DC.ColumnsFlags & ImGuiColumnsFlags_NoResize))
+ {
+ ButtonBehavior(column_rect, column_id, &hovered, &held);
+ if (hovered || held)
+ g.MouseCursor = ImGuiMouseCursor_ResizeEW;
+ if (held && g.ActiveIdIsJustActivated)
+ g.ActiveIdClickOffset.x -= column_hw; // Store from center of column line (we used a 8 wide rect for columns clicking). This is used by GetDraggedColumnOffset().
+ if (held)
+ dragging_column = i;
+ }
- bool hovered, held;
- ButtonBehavior(column_rect, column_id, &hovered, &held);
- if (hovered || held)
- g.MouseCursor = ImGuiMouseCursor_ResizeEW;
-
- // Draw before resize so our items positioning are in sync with the line being drawn
- const ImU32 col = GetColorU32(held ? ImGuiCol_ColumnActive : hovered ? ImGuiCol_ColumnHovered : ImGuiCol_Column);
+ // Draw column
+ // We clip the Y boundaries CPU side because very long triangles are mishandled by some GPU drivers.
+ const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
const float xi = (float)(int)x;
- window->DrawList->AddLine(ImVec2(xi, y1+1.0f), ImVec2(xi, y2), col);
+ window->DrawList->AddLine(ImVec2(xi, ImMax(y1 + 1.0f, window->ClipRect.Min.y)), ImVec2(xi, ImMin(y2, window->ClipRect.Max.y)), col);
+ }
- if (held)
- {
- if (g.ActiveIdIsJustActivated)
- g.ActiveIdClickOffset.x -= 4; // Store from center of column line (we used a 8 wide rect for columns clicking)
- x = GetDraggedColumnOffset(i);
- SetColumnOffset(i, x);
- }
+ // Apply dragging after drawing the column lines, so our rendered lines are in sync with how items were displayed during the frame.
+ if (dragging_column != -1)
+ {
+ float x = GetDraggedColumnOffset(dragging_column);
+ SetColumnOffset(dragging_column, x);
}
}
- // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget.
- // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer.
- PushID(0x11223347 + (id ? 0 : columns_count));
- window->DC.ColumnsSetId = window->GetID(id ? id : "columns");
- PopID();
-
- // Set state for first column
+ window->DC.ColumnsSetId = 0;
window->DC.ColumnsCurrent = 0;
- window->DC.ColumnsCount = columns_count;
- window->DC.ColumnsShowBorders = border;
-
- const float content_region_width = (window->SizeContentsExplicit.x != 0.0f) ? window->SizeContentsExplicit.x : window->Size.x;
- window->DC.ColumnsMinX = window->DC.IndentX; // Lock our horizontal range
- window->DC.ColumnsMaxX = content_region_width - window->Scroll.x - ((window->Flags & ImGuiWindowFlags_NoScrollbar) ? 0 : g.Style.ScrollbarSize);// - window->WindowPadding().x;
- window->DC.ColumnsStartPosY = window->DC.CursorPos.y;
- window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.CursorPos.y;
+ window->DC.ColumnsCount = 1;
+ window->DC.ColumnsFlags = 0;
+ window->DC.ColumnsData.resize(0);
window->DC.ColumnsOffsetX = 0.0f;
window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX);
+}
- if (window->DC.ColumnsCount != 1)
- {
- // Cache column offsets
- window->DC.ColumnsData.resize(columns_count + 1);
- for (int column_index = 0; column_index < columns_count + 1; column_index++)
- {
- const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(column_index);
- KeepAliveID(column_id);
- const float default_t = column_index / (float)window->DC.ColumnsCount;
- const float t = window->DC.StateStorage->GetFloat(column_id, default_t); // Cheaply store our floating point value inside the integer (could store a union into the map?)
- window->DC.ColumnsData[column_index].OffsetNorm = t;
- }
- window->DrawList->ChannelsSplit(window->DC.ColumnsCount);
- PushColumnClipRect();
- PushItemWidth(GetColumnWidth() * 0.65f);
- }
- else
- {
- window->DC.ColumnsData.resize(0);
- }
+// [2017/08: This is currently the only public API, while we are working on making BeginColumns/EndColumns user-facing]
+void ImGui::Columns(int columns_count, const char* id, bool border)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ IM_ASSERT(columns_count >= 1);
+
+ if (window->DC.ColumnsCount != columns_count && window->DC.ColumnsCount != 1)
+ EndColumns();
+
+ ImGuiColumnsFlags flags = (border ? 0 : ImGuiColumnsFlags_NoBorder);
+ //flags |= ImGuiColumnsFlags_NoPreserveWidths; // NB: Legacy behavior
+ if (columns_count != 1)
+ BeginColumns(id, columns_count, flags);
}
void ImGui::Indent(float indent_w)
@@ -9597,33 +10851,18 @@ void ImGui::Value(const char* prefix, float v, const char* float_format)
}
}
-// FIXME: May want to remove those helpers?
-void ImGui::ValueColor(const char* prefix, const ImVec4& v)
-{
- Text("%s: (%.2f,%.2f,%.2f,%.2f)", prefix, v.x, v.y, v.z, v.w);
- SameLine();
- ColorButton(v, true);
-}
-
-void ImGui::ValueColor(const char* prefix, ImU32 v)
-{
- Text("%s: %08X", prefix, v);
- SameLine();
- ColorButton(ColorConvertU32ToFloat4(v), true);
-}
-
//-----------------------------------------------------------------------------
// PLATFORM DEPENDENT HELPERS
//-----------------------------------------------------------------------------
-#if defined(_WIN32) && !defined(_WINDOWS_) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS))
+#if defined(_WIN32) && !defined(_WINDOWS_) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS))
#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
// Win32 API clipboard implementation
-#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS)
+#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS)
#ifdef _MSC_VER
#pragma comment(lib, "user32")
@@ -9637,7 +10876,10 @@ static const char* GetClipboardTextFn_DefaultImpl(void*)
return NULL;
HANDLE wbuf_handle = GetClipboardData(CF_UNICODETEXT);
if (wbuf_handle == NULL)
+ {
+ CloseClipboard();
return NULL;
+ }
if (ImWchar* wbuf_global = (ImWchar*)GlobalLock(wbuf_handle))
{
int buf_len = ImTextCountUtf8BytesFromStr(wbuf_global, NULL) + 1;
@@ -9656,7 +10898,10 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
const int wbuf_length = ImTextCountCharsFromUtf8(text, NULL) + 1;
HGLOBAL wbuf_handle = GlobalAlloc(GMEM_MOVEABLE, (SIZE_T)wbuf_length * sizeof(ImWchar));
if (wbuf_handle == NULL)
+ {
+ CloseClipboard();
return;
+ }
ImWchar* wbuf_global = (ImWchar*)GlobalLock(wbuf_handle);
ImTextStrFromUtf8(wbuf_global, wbuf_length, text, NULL);
GlobalUnlock(wbuf_handle);
@@ -9670,28 +10915,25 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
static const char* GetClipboardTextFn_DefaultImpl(void*)
{
- return GImGui->PrivateClipboard;
+ ImGuiContext& g = *GImGui;
+ return g.PrivateClipboard.empty() ? NULL : g.PrivateClipboard.begin();
}
// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
{
ImGuiContext& g = *GImGui;
- if (g.PrivateClipboard)
- {
- ImGui::MemFree(g.PrivateClipboard);
- g.PrivateClipboard = NULL;
- }
+ g.PrivateClipboard.clear();
const char* text_end = text + strlen(text);
- g.PrivateClipboard = (char*)ImGui::MemAlloc((size_t)(text_end - text) + 1);
- memcpy(g.PrivateClipboard, text, (size_t)(text_end - text));
+ g.PrivateClipboard.resize((int)(text_end - text) + 1);
+ memcpy(&g.PrivateClipboard[0], text, (size_t)(text_end - text));
g.PrivateClipboard[(int)(text_end - text)] = 0;
}
#endif
// Win32 API IME support (for Asian languages, etc.)
-#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS)
+#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)
#include <imm.h>
#ifdef _MSC_VER
@@ -9731,7 +10973,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
ImGui::Text("%d vertices, %d indices (%d triangles)", ImGui::GetIO().MetricsRenderVertices, ImGui::GetIO().MetricsRenderIndices, ImGui::GetIO().MetricsRenderIndices / 3);
ImGui::Text("%d allocations", ImGui::GetIO().MetricsAllocs);
static bool show_clip_rects = true;
- ImGui::Checkbox("Show clipping rectangles when hovering a ImDrawCmd", &show_clip_rects);
+ ImGui::Checkbox("Show clipping rectangles when hovering an ImDrawCmd", &show_clip_rects);
ImGui::Separator();
struct Funcs
@@ -9754,6 +10996,8 @@ void ImGui::ShowMetricsWindow(bool* p_open)
int elem_offset = 0;
for (const ImDrawCmd* pcmd = draw_list->CmdBuffer.begin(); pcmd < draw_list->CmdBuffer.end(); elem_offset += pcmd->ElemCount, pcmd++)
{
+ if (pcmd->UserCallback == NULL && pcmd->ElemCount == 0)
+ continue;
if (pcmd->UserCallback)
{
ImGui::BulletText("Callback %p, user_data %p", pcmd->UserCallback, pcmd->UserCallbackData);
@@ -9776,13 +11020,14 @@ void ImGui::ShowMetricsWindow(bool* p_open)
while (clipper.Step())
for (int prim = clipper.DisplayStart, vtx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++)
{
- char buf[300], *buf_p = buf;
+ char buf[300];
+ char *buf_p = buf, *buf_end = buf + IM_ARRAYSIZE(buf);
ImVec2 triangles_pos[3];
for (int n = 0; n < 3; n++, vtx_i++)
{
ImDrawVert& v = draw_list->VtxBuffer[idx_buffer ? idx_buffer[vtx_i] : vtx_i];
triangles_pos[n] = v.pos;
- buf_p += sprintf(buf_p, "%s %04d { pos = (%8.2f,%8.2f), uv = (%.6f,%.6f), col = %08X }\n", (n == 0) ? "vtx" : " ", vtx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col);
+ buf_p += ImFormatString(buf_p, (int)(buf_end - buf_p), "%s %04d { pos = (%8.2f,%8.2f), uv = (%.6f,%.6f), col = %08X }\n", (n == 0) ? "vtx" : " ", vtx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col);
}
ImGui::Selectable(buf, false);
if (ImGui::IsItemHovered())
@@ -9808,9 +11053,11 @@ void ImGui::ShowMetricsWindow(bool* p_open)
if (!ImGui::TreeNode(window, "%s '%s', %d @ 0x%p", label, window->Name, window->Active || window->WasActive, window))
return;
NodeDrawList(window->DrawList, "DrawList");
- ImGui::BulletText("Pos: (%.1f,%.1f)", window->Pos.x, window->Pos.y);
- ImGui::BulletText("Size: (%.1f,%.1f), SizeContents (%.1f,%.1f)", window->Size.x, window->Size.y, window->SizeContents.x, window->SizeContents.y);
- ImGui::BulletText("Scroll: (%.2f,%.2f)", window->Scroll.x, window->Scroll.y);
+ ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), SizeContents (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->SizeContents.x, window->SizeContents.y);
+ if (ImGui::IsItemHovered())
+ GImGui->OverlayDrawList.AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255,255,0,255));
+ ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f)", window->Scroll.x, GetScrollMaxX(window), window->Scroll.y, GetScrollMaxY(window));
+ ImGui::BulletText("Active: %d, WriteAccessed: %d", window->Active, window->WriteAccessed);
if (window->RootWindow != window) NodeWindow(window->RootWindow, "RootWindow");
if (window->DC.ChildWindows.Size > 0) NodeWindows(window->DC.ChildWindows, "ChildWindows");
ImGui::BulletText("Storage: %d bytes", window->StateStorage.Data.Size * (int)sizeof(ImGuiStorage::Pair));
@@ -9822,8 +11069,9 @@ void ImGui::ShowMetricsWindow(bool* p_open)
Funcs::NodeWindows(g.Windows, "Windows");
if (ImGui::TreeNode("DrawList", "Active DrawLists (%d)", g.RenderDrawLists[0].Size))
{
- for (int i = 0; i < g.RenderDrawLists[0].Size; i++)
- Funcs::NodeDrawList(g.RenderDrawLists[0][i], "DrawList");
+ for (int layer = 0; layer < IM_ARRAYSIZE(g.RenderDrawLists); layer++)
+ for (int i = 0; i < g.RenderDrawLists[layer].Size; i++)
+ Funcs::NodeDrawList(g.RenderDrawLists[0][i], "DrawList");
ImGui::TreePop();
}
if (ImGui::TreeNode("Popups", "Open Popups Stack (%d)", g.OpenPopupStack.Size))
@@ -9837,11 +11085,12 @@ void ImGui::ShowMetricsWindow(bool* p_open)
}
if (ImGui::TreeNode("Basic state"))
{
- ImGui::Text("FocusedWindow: '%s'", g.FocusedWindow ? g.FocusedWindow->Name : "NULL");
ImGui::Text("HoveredWindow: '%s'", g.HoveredWindow ? g.HoveredWindow->Name : "NULL");
ImGui::Text("HoveredRootWindow: '%s'", g.HoveredRootWindow ? g.HoveredRootWindow->Name : "NULL");
- ImGui::Text("HoveredID: 0x%08X/0x%08X", g.HoveredId, g.HoveredIdPreviousFrame); // Data is "in-flight" so depending on when the Metrics window is called we may see current frame information or not
- ImGui::Text("ActiveID: 0x%08X/0x%08X", g.ActiveId, g.ActiveIdPreviousFrame);
+ ImGui::Text("HoveredId: 0x%08X/0x%08X (%.2f sec)", g.HoveredId, g.HoveredIdPreviousFrame, g.HoveredIdTimer); // Data is "in-flight" so depending on when the Metrics window is called we may see current frame information or not
+ ImGui::Text("ActiveId: 0x%08X/0x%08X (%.2f sec)", g.ActiveId, g.ActiveIdPreviousFrame, g.ActiveIdTimer);
+ ImGui::Text("ActiveIdWindow: '%s'", g.ActiveIdWindow ? g.ActiveIdWindow->Name : "NULL");
+ ImGui::Text("NavWindow: '%s'", g.NavWindow ? g.NavWindow->Name : "NULL");
ImGui::TreePop();
}
}
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h
index f698f0be874..7a1d209af48 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h
@@ -1,4 +1,4 @@
-// dear imgui, v1.50 WIP
+// dear imgui, v1.53 WIP
// (headers)
// See imgui.cpp file for documentation.
@@ -16,7 +16,7 @@
#include <stddef.h> // ptrdiff_t, NULL
#include <string.h> // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
-#define IMGUI_VERSION "1.50 WIP"
+#define IMGUI_VERSION "1.53 WIP"
// Define attributes of all API symbols declarations, e.g. for DLL under Windows.
#ifndef IMGUI_API
@@ -29,12 +29,16 @@
#define IM_ASSERT(_EXPR, ...) assert(_EXPR)
#endif
+// Helpers
// Some compilers support applying printf-style warnings to user functions.
#if 0 // defined(__clang__) || defined(__GNUC__)
-#define IM_PRINTFARGS(FMT) __attribute__((format(printf, FMT, (FMT+1))))
+#define IM_FMTARGS(FMT) __attribute__((format(printf, FMT, FMT+1)))
+#define IM_FMTLIST(FMT) __attribute__((format(printf, FMT, 0)))
#else
-#define IM_PRINTFARGS(FMT)
+#define IM_FMTARGS(FMT)
+#define IM_FMTLIST(FMT)
#endif
+#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR)/sizeof(*_ARR)))
#if defined(__clang__)
#pragma clang diagnostic push
@@ -48,7 +52,7 @@ struct ImDrawData; // All draw command lists required to render
struct ImDrawList; // A single draw command list (generally one per window)
struct ImDrawVert; // A single vertex (20 bytes by default, override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
struct ImFont; // Runtime data for a single font within a parent ImFontAtlas
-struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF font loader
+struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
struct ImFontConfig; // Configuration data when adding a font or merging fonts
struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4
struct ImGuiIO; // Main configuration and I/O between your application and ImGui
@@ -67,18 +71,26 @@ typedef unsigned int ImU32; // 32-bit unsigned integer (typically used t
typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string)
typedef unsigned short ImWchar; // character for keyboard input/display
typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp)
-typedef int ImGuiCol; // a color identifier for styling // enum ImGuiCol_
-typedef int ImGuiStyleVar; // a variable identifier for styling // enum ImGuiStyleVar_
-typedef int ImGuiKey; // a key identifier (ImGui-side enum) // enum ImGuiKey_
-typedef int ImGuiColorEditMode; // color edit mode for ColorEdit*() // enum ImGuiColorEditMode_
-typedef int ImGuiMouseCursor; // a mouse cursor identifier // enum ImGuiMouseCursor_
-typedef int ImGuiWindowFlags; // window flags for Begin*() // enum ImGuiWindowFlags_
-typedef int ImGuiSetCond; // condition flags for Set*() // enum ImGuiSetCond_
-typedef int ImGuiInputTextFlags; // flags for InputText*() // enum ImGuiInputTextFlags_
-typedef int ImGuiSelectableFlags; // flags for Selectable() // enum ImGuiSelectableFlags_
-typedef int ImGuiTreeNodeFlags; // flags for TreeNode*(), Collapsing*() // enum ImGuiTreeNodeFlags_
+typedef int ImGuiCol; // enum: a color identifier for styling // enum ImGuiCol_
+typedef int ImGuiStyleVar; // enum: a variable identifier for styling // enum ImGuiStyleVar_
+typedef int ImGuiKey; // enum: a key identifier (ImGui-side enum) // enum ImGuiKey_
+typedef int ImGuiMouseCursor; // enum: a mouse cursor identifier // enum ImGuiMouseCursor_
+typedef int ImGuiCond; // enum: a condition for Set*() // enum ImGuiCond_
+typedef int ImDrawCornerFlags; // flags: corner flags for AddRect*() etc. // enum ImDrawCornerFlags_
+typedef int ImGuiColorEditFlags; // flags: color edit flags for Color*() // enum ImGuiColorEditFlags_
+typedef int ImGuiWindowFlags; // flags: window flags for Begin*() // enum ImGuiWindowFlags_
+typedef int ImGuiColumnsFlags; // flags: for *Columns*() // enum ImGuiColumnsFlags_
+typedef int ImGuiInputTextFlags; // flags: for InputText*() // enum ImGuiInputTextFlags_
+typedef int ImGuiSelectableFlags; // flags: for Selectable() // enum ImGuiSelectableFlags_
+typedef int ImGuiTreeNodeFlags; // flags: for TreeNode*(), Collapsing*() // enum ImGuiTreeNodeFlags_
+typedef int ImGuiHoveredFlags; // flags: for IsItemHovered() // enum ImGuiHoveredFlags_
typedef int (*ImGuiTextEditCallback)(ImGuiTextEditCallbackData *data);
typedef void (*ImGuiSizeConstraintCallback)(ImGuiSizeConstraintCallbackData* data);
+#ifdef _MSC_VER
+typedef unsigned __int64 ImU64; // 64-bit unsigned integer
+#else
+typedef unsigned long long ImU64; // 64-bit unsigned integer
+#endif
// Others helpers at bottom of the file:
// class ImVector<> // Lightweight std::vector like class.
@@ -112,17 +124,19 @@ namespace ImGui
IMGUI_API ImGuiIO& GetIO();
IMGUI_API ImGuiStyle& GetStyle();
IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame()
- IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until NewFrame()/Render().
- IMGUI_API void Render(); // ends the ImGui frame, finalize rendering data, then call your io.RenderDrawListsFn() function if set.
+ IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame().
+ IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set.
+ IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead!
IMGUI_API void Shutdown();
- IMGUI_API void ShowUserGuide(); // help block
- IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // style editor block. you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
- IMGUI_API void ShowTestWindow(bool* p_open = NULL); // test window demonstrating ImGui features
- IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // metrics window for debugging ImGui
+
+ // Demo/Debug/Info
+ IMGUI_API void ShowTestWindow(bool* p_open = NULL); // create demo/test window. demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
+ IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc.
+ IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
+ IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls).
// Window
IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false).
- IMGUI_API bool Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha = -1.0f, ImGuiWindowFlags flags = 0); // OBSOLETE. this is the older/longer API. the extra parameters aren't very relevant. call SetNextWindowSize() instead if you want to set a window size. For regular windows, 'size_on_first_use' only applies to the first time EVER the window is created and probably not what you want! might obsolete this API eventually.
IMGUI_API void End(); // finish appending to current window, pop it off the window stack.
IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400).
IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // "
@@ -139,24 +153,24 @@ namespace ImGui
IMGUI_API float GetWindowWidth();
IMGUI_API float GetWindowHeight();
IMGUI_API bool IsWindowCollapsed();
+ IMGUI_API bool IsWindowAppearing();
IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows
- IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiSetCond cond = 0); // set next window position. call before Begin()
- IMGUI_API void SetNextWindowPosCenter(ImGuiSetCond cond = 0); // set next window position to be centered on screen. call before Begin()
- IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin()
+ IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc.
+ IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin()
IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints.
IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (enforce the range of scrollbars). set axis to 0.0f to leave it automatic. call before Begin()
IMGUI_API void SetNextWindowContentWidth(float width); // set next window content width (enforce the range of horizontal scrollbar). call before Begin()
- IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // set next window collapsed state. call before Begin()
+ IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin()
IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin()
- IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiSetCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
- IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
- IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
+ IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
+ IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
+ IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus().
- IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond = 0); // set named window position.
- IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiSetCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis.
- IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiSetCond cond = 0); // set named window collapsed state
- IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus.
+ IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position.
+ IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis.
+ IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state
+ IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus.
IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()]
IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()]
@@ -166,23 +180,26 @@ namespace ImGui
IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()]
IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom.
IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions.
- IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use negative 'offset' to access previous widgets.
+ IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget.
IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it)
IMGUI_API ImGuiStorage* GetStateStorage();
// Parameters stacks (shared)
IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font
IMGUI_API void PopFont();
+ IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col);
IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col);
IMGUI_API void PopStyleColor(int count = 1);
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val);
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val);
IMGUI_API void PopStyleVar(int count = 1);
+ IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha.
IMGUI_API ImFont* GetFont(); // get current font
IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied
IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API
IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier
IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied
+ IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied
// Parameters stacks (current window)
IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side)
@@ -190,13 +207,13 @@ namespace ImGui
IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position
IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space
IMGUI_API void PopTextWrapPos();
- IMGUI_API void PushAllowKeyboardFocus(bool v); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
+ IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
IMGUI_API void PopAllowKeyboardFocus();
- IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (uses io.KeyRepeatDelay/io.KeyRepeatRate for now). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame.
+ IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame.
IMGUI_API void PopButtonRepeat();
// Cursor / Layout
- IMGUI_API void Separator(); // horizontal line
+ IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally
IMGUI_API void NewLine(); // undo a SameLine()
IMGUI_API void Spacing(); // add vertical spacing
@@ -214,50 +231,53 @@ namespace ImGui
IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position
IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API)
IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize]
- IMGUI_API void AlignFirstTextHeightToWidgets(); // call once if the first item on the line is a Text() item and you want to vertically lower it to match subsequent (bigger) widgets
+ IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets)
IMGUI_API float GetTextLineHeight(); // height of font == GetWindowFontSize()
IMGUI_API float GetTextLineHeightWithSpacing(); // distance (in pixels) between 2 consecutive lines of text == GetWindowFontSize() + GetStyle().ItemSpacing.y
IMGUI_API float GetItemsLineHeightWithSpacing(); // distance (in pixels) between 2 consecutive lines of standard height widgets == GetWindowFontSize() + GetStyle().FramePadding.y*2 + GetStyle().ItemSpacing.y
// Columns
- // You can also use SameLine(pos_x) for simplified columning. The columns API is still work-in-progress and rather lacking.
- IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); // setup number of columns. use an identifier to distinguish multiple column sets. close with Columns(1).
- IMGUI_API void NextColumn(); // next column
+ // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking.
+ IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true);
+ IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished
IMGUI_API int GetColumnIndex(); // get current column index
- IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetcolumnsCount() inclusive. column 0 is usually 0.0f and not resizable unless you call this
+ IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column
+ IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column
+ IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f
IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column
- IMGUI_API float GetColumnWidth(int column_index = -1); // column width (== GetColumnOffset(GetColumnIndex()+1) - GetColumnOffset(GetColumnOffset())
- IMGUI_API int GetColumnsCount(); // number of columns (what was passed to Columns())
+ IMGUI_API int GetColumnsCount();
// ID scopes
- // If you are creating widgets in a loop you most likely want to push a unique identifier so ImGui can differentiate them.
+ // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them.
// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details.
- IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the *entire* stack!
+ IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack!
IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end);
IMGUI_API void PushID(const void* ptr_id);
IMGUI_API void PushID(int int_id);
IMGUI_API void PopID();
- IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). useful if you want to query into ImGuiStorage yourself. otherwise rarely needed
+ IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself
IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end);
IMGUI_API ImGuiID GetID(const void* ptr_id);
- // Widgets
- IMGUI_API void Text(const char* fmt, ...) IM_PRINTFARGS(1);
- IMGUI_API void TextV(const char* fmt, va_list args);
- IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_PRINTFARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
- IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args);
- IMGUI_API void TextDisabled(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor();
- IMGUI_API void TextDisabledV(const char* fmt, va_list args);
- IMGUI_API void TextWrapped(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize().
- IMGUI_API void TextWrappedV(const char* fmt, va_list args);
- IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // doesn't require null terminated string if 'text_end' is specified. no copy done to any bounded stack buffer, recommended for long chunks of text
- IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_PRINTFARGS(2); // display text+label aligned the same way as value+label widgets
- IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args);
- IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
- IMGUI_API void BulletText(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for Bullet()+Text()
- IMGUI_API void BulletTextV(const char* fmt, va_list args);
+ // Widgets: Text
+ IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text.
+ IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text
+ IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1);
+ IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
+ IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2);
+ IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor();
+ IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1);
+ IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize().
+ IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1);
+ IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets
+ IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2);
+ IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text()
+ IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1);
+ IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
+
+ // Widgets: Main
IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button
- IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0)
+ IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text
IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size);
IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0));
IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding
@@ -266,12 +286,8 @@ namespace ImGui
IMGUI_API bool RadioButton(const char* label, bool active);
IMGUI_API bool RadioButton(const char* label, int* v, int v_button);
IMGUI_API bool Combo(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1);
- IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items = -1); // separate items with \0, end item-list with \0\0
+ IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items = -1); // separate items with \0, end item-list with \0\0
IMGUI_API bool Combo(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1);
- IMGUI_API bool ColorButton(const ImVec4& col, bool small_height = false, bool outline_border = true);
- IMGUI_API bool ColorEdit3(const char* label, float col[3]); // Hint: 'float col[3]' function argument is same as 'float* col'. You can pass address of first element out of a contiguous set, e.g. &myvector.x
- IMGUI_API bool ColorEdit4(const char* label, float col[4], bool show_alpha = true); // "
- IMGUI_API void ColorEditMode(ImGuiColorEditMode mode); // FIXME-OBSOLETE: This is inconsistent with most of the API and will be obsoleted/replaced.
IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float));
IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0));
IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float));
@@ -279,7 +295,7 @@ namespace ImGui
IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL);
// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds)
- // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, remember than a 'float v[3]' function argument is the same as 'float* v'. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
+ // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound
IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);
IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);
@@ -304,7 +320,7 @@ namespace ImGui
IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0);
// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds)
- IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix. Use power!=1.0 for logarithmic sliders
+ IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders
IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
@@ -316,23 +332,32 @@ namespace ImGui
IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f");
+ // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.)
+ // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x
+ IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
+ IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0);
+ IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
+ IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL);
+ IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed.
+ IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls.
+
// Widgets: Trees
IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop().
- IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_PRINTFARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
- IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_PRINTFARGS(2); // "
- IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args); // "
- IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args); // "
+ IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
+ IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // "
+ IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2);
+ IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2);
IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0);
- IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_PRINTFARGS(3);
- IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_PRINTFARGS(3);
- IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args);
- IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args);
- IMGUI_API void TreePush(const char* str_id = NULL); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose
+ IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
+ IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
+ IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
+ IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
+ IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose
IMGUI_API void TreePush(const void* ptr_id = NULL); // "
IMGUI_API void TreePop(); // ~ Unindent()+PopId()
IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing()
IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
- IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiSetCond cond = 0); // set next TreeNode/CollapsingHeader open state.
+ IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state.
IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop().
IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header
@@ -350,19 +375,17 @@ namespace ImGui
IMGUI_API void Value(const char* prefix, int v);
IMGUI_API void Value(const char* prefix, unsigned int v);
IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL);
- IMGUI_API void ValueColor(const char* prefix, const ImVec4& v);
- IMGUI_API void ValueColor(const char* prefix, ImU32 v);
// Tooltips
- IMGUI_API void SetTooltip(const char* fmt, ...) IM_PRINTFARGS(1); // set tooltip under mouse-cursor, typically use with ImGui::IsHovered(). last call wins
- IMGUI_API void SetTooltipV(const char* fmt, va_list args);
- IMGUI_API void BeginTooltip(); // use to create full-featured tooltip windows that aren't just text
+ IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip().
+ IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
+ IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents).
IMGUI_API void EndTooltip();
// Menus
IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true!
IMGUI_API void EndMainMenuBar();
- IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set). only call EndMenuBar() if this returns true!
+ IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true!
IMGUI_API void EndMenuBar();
IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true!
IMGUI_API void EndMenu();
@@ -370,13 +393,15 @@ namespace ImGui
IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL
// Popups
- IMGUI_API void OpenPopup(const char* str_id); // mark popup as open. popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
+ IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
+ IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened.
IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true!
IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside)
- IMGUI_API bool BeginPopupContextItem(const char* str_id, int mouse_button = 1); // helper to open and begin popup when clicked on last item. read comments in .cpp!
- IMGUI_API bool BeginPopupContextWindow(bool also_over_items = true, const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on current window.
- IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (no window).
+ IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp!
+ IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window.
+ IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows).
IMGUI_API void EndPopup();
+ IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open
IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup.
// Logging: all text output from interface is redirected to tty/file/clipboard. By default, tree nodes are automatically opened during logging.
@@ -385,40 +410,43 @@ namespace ImGui
IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard
IMGUI_API void LogFinish(); // stop logging (close file, etc.)
IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard
- IMGUI_API void LogText(const char* fmt, ...) IM_PRINTFARGS(1); // pass text data straight to log (without being displayed)
+ IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed)
// Clipping
IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
IMGUI_API void PopClipRect();
+ // Styles
+ IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL);
+ IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL);
+ IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL);
+
// Utilities
- IMGUI_API bool IsItemHovered(); // was the last item hovered by mouse?
- IMGUI_API bool IsItemHoveredRect(); // was the last item hovered by mouse? even if another item is active or window is blocked by popup while we are hovering this
- IMGUI_API bool IsItemActive(); // was the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false)
- IMGUI_API bool IsItemClicked(int mouse_button = 0); // was the last item clicked? (e.g. button/node just clicked on)
- IMGUI_API bool IsItemVisible(); // was the last item visible? (aka not out of sight due to clipping/scrolling.)
+ IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered by mouse (and usable)?
+ IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false)
+ IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on)
+ IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.)
IMGUI_API bool IsAnyItemHovered();
IMGUI_API bool IsAnyItemActive();
IMGUI_API ImVec2 GetItemRectMin(); // get bounding rect of last item in screen space
IMGUI_API ImVec2 GetItemRectMax(); // "
IMGUI_API ImVec2 GetItemRectSize(); // "
IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
- IMGUI_API bool IsWindowHovered(); // is current window hovered and hoverable (not blocked by a popup) (differentiate child windows from each others)
- IMGUI_API bool IsWindowFocused(); // is current window focused
- IMGUI_API bool IsRootWindowFocused(); // is current root window focused (root = top-most parent of a child, otherwise self)
- IMGUI_API bool IsRootWindowOrAnyChildFocused(); // is current root window or any of its child (including current window) focused
- IMGUI_API bool IsRootWindowOrAnyChildHovered(); // is current root window or any of its child (including current window) hovered and hoverable (not blocked by a popup)
+ IMGUI_API bool IsWindowFocused(); // is current Begin()-ed window focused?
+ IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current Begin()-ed window hovered (and typically: not blocked by a popup/modal)?
+ IMGUI_API bool IsRootWindowFocused(); // is current Begin()-ed root window focused (root = top-most parent of a child, otherwise self)?
+ IMGUI_API bool IsRootWindowOrAnyChildFocused(); // is current Begin()-ed root window or any of its child (including current window) focused?
+ IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window
IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side.
- IMGUI_API bool IsPosHoveringAnyWindow(const ImVec2& pos); // is given position hovering any active imgui window
IMGUI_API float GetTime();
IMGUI_API int GetFrameCount();
- IMGUI_API const char* GetStyleColName(ImGuiCol idx);
+ IMGUI_API const char* GetStyleColorName(ImGuiCol idx);
IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items
IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can.
- IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame
+ IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame
IMGUI_API void EndChildFrame();
IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in);
@@ -427,23 +455,23 @@ namespace ImGui
IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b);
// Inputs
- IMGUI_API int GetKeyIndex(ImGuiKey key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key]
- IMGUI_API bool IsKeyDown(int key_index); // key_index into the keys_down[] array, imgui doesn't know the semantic of each entry, uses your own indices!
- IMGUI_API bool IsKeyPressed(int key_index, bool repeat = true); // uses user's key indices as stored in the keys_down[] array. if repeat=true. uses io.KeyRepeatDelay / KeyRepeatRate
- IMGUI_API bool IsKeyReleased(int key_index); // "
+ IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key]
+ IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]!
+ IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate
+ IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down)..
+ IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate
IMGUI_API bool IsMouseDown(int button); // is mouse button held
IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down)
IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime.
IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down)
- IMGUI_API bool IsMouseHoveringWindow(); // is mouse hovering current window ("window" in API names always refer to current window). disregarding of any consideration of being blocked by a popup. (unlike IsWindowHovered() this will return true even if the window is blocked because of a popup)
- IMGUI_API bool IsMouseHoveringAnyWindow(); // is mouse hovering any visible window
- IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup.
IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
+ IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup.
+ IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); //
IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into
IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
IMGUI_API void ResetMouseDragDelta(int button = 0); //
- IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you
+ IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you
IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type
IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered.
IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle).
@@ -462,16 +490,6 @@ namespace ImGui
IMGUI_API ImGuiContext* GetCurrentContext();
IMGUI_API void SetCurrentContext(ImGuiContext* ctx);
- // Obsolete (will be removed)
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
- static inline bool CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1<<5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+
- static inline ImFont* GetWindowFont() { return GetFont(); } // OBSOLETE 1.48+
- static inline float GetWindowFontSize() { return GetFontSize(); } // OBSOLETE 1.48+
- static inline void SetScrollPosHere() { SetScrollHere(); } // OBSOLETE 1.42+
- static inline bool GetWindowCollapsed() { return ImGui::IsWindowCollapsed(); } // OBSOLETE 1.39+
- static inline bool IsRectClipped(const ImVec2& size) { return !IsRectVisible(size); } // OBSOLETE 1.39+
-#endif
-
} // namespace ImGui
// Flags for ImGui::Begin()
@@ -485,9 +503,9 @@ enum ImGuiWindowFlags_
ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel
ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it
ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame
- ImGuiWindowFlags_ShowBorders = 1 << 7, // Show borders around windows and items
+ //ImGuiWindowFlags_ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders).
ImGuiWindowFlags_NoSavedSettings = 1 << 8, // Never load/save settings in .ini file
- ImGuiWindowFlags_NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs
+ ImGuiWindowFlags_NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through.
ImGuiWindowFlags_MenuBar = 1 << 10, // Has a menu-bar
ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state
@@ -496,9 +514,7 @@ enum ImGuiWindowFlags_
ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
// [Internal]
- ImGuiWindowFlags_ChildWindow = 1 << 20, // Don't use! For internal use by BeginChild()
- ImGuiWindowFlags_ChildWindowAutoFitX = 1 << 21, // Don't use! For internal use by BeginChild()
- ImGuiWindowFlags_ChildWindowAutoFitY = 1 << 22, // Don't use! For internal use by BeginChild()
+ ImGuiWindowFlags_ChildWindow = 1 << 22, // Don't use! For internal use by BeginChild()
ImGuiWindowFlags_ComboBox = 1 << 23, // Don't use! For internal use by ComboBox()
ImGuiWindowFlags_Tooltip = 1 << 24, // Don't use! For internal use by BeginTooltip()
ImGuiWindowFlags_Popup = 1 << 25, // Don't use! For internal use by BeginPopup()
@@ -521,7 +537,7 @@ enum ImGuiInputTextFlags_
ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer.
ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character.
ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field
- ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, allow exiting edition by pressing Enter. Ctrl+Enter to add new line (by default adds new lines with Enter).
+ ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter).
ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally
ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, // Insert mode
ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode
@@ -543,8 +559,9 @@ enum ImGuiTreeNodeFlags_
ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open.
ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes).
ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow
- //ImGuITreeNodeFlags_SpanAllAvailWidth = 1 << 10, // FIXME: TODO: Extend hit box horizontally even if not framed
- //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 11, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible
+ ImGuiTreeNodeFlags_FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding().
+ //ImGuITreeNodeFlags_SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed
+ //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible
ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoAutoOpenOnLog
};
@@ -557,6 +574,18 @@ enum ImGuiSelectableFlags_
ImGuiSelectableFlags_AllowDoubleClick = 1 << 2 // Generate press events on double clicks too
};
+// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered()
+enum ImGuiHoveredFlags_
+{
+ ImGuiHoveredFlags_Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them.
+ ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 0, // Return true even if a popup window is normally blocking access to this item/window
+ //ImGuiHoveredFlags_AllowWhenBlockedByModal = 1 << 1, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet.
+ ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 2, // Return true even if an active item is blocking access to this item/window
+ ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 3, // Return true even if the position is overlapped by another window
+ ImGuiHoveredFlags_FlattenChilds = 1 << 4, // Treat all child windows as the same window (for IsWindowHovered())
+ ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped
+};
+
// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array
enum ImGuiKey_
{
@@ -588,7 +617,7 @@ enum ImGuiCol_
ImGuiCol_Text,
ImGuiCol_TextDisabled,
ImGuiCol_WindowBg, // Background of normal windows
- ImGuiCol_ChildWindowBg, // Background of child windows
+ ImGuiCol_ChildBg, // Background of child windows
ImGuiCol_PopupBg, // Background of popups, menus, tooltips windows
ImGuiCol_Border,
ImGuiCol_BorderShadow,
@@ -596,14 +625,13 @@ enum ImGuiCol_
ImGuiCol_FrameBgHovered,
ImGuiCol_FrameBgActive,
ImGuiCol_TitleBg,
- ImGuiCol_TitleBgCollapsed,
ImGuiCol_TitleBgActive,
+ ImGuiCol_TitleBgCollapsed,
ImGuiCol_MenuBarBg,
ImGuiCol_ScrollbarBg,
ImGuiCol_ScrollbarGrab,
ImGuiCol_ScrollbarGrabHovered,
ImGuiCol_ScrollbarGrabActive,
- ImGuiCol_ComboBg,
ImGuiCol_CheckMark,
ImGuiCol_SliderGrab,
ImGuiCol_SliderGrabActive,
@@ -613,9 +641,9 @@ enum ImGuiCol_
ImGuiCol_Header,
ImGuiCol_HeaderHovered,
ImGuiCol_HeaderActive,
- ImGuiCol_Column,
- ImGuiCol_ColumnHovered,
- ImGuiCol_ColumnActive,
+ ImGuiCol_Separator,
+ ImGuiCol_SeparatorHovered,
+ ImGuiCol_SeparatorActive,
ImGuiCol_ResizeGrip,
ImGuiCol_ResizeGripHovered,
ImGuiCol_ResizeGripActive,
@@ -629,37 +657,74 @@ enum ImGuiCol_
ImGuiCol_TextSelectedBg,
ImGuiCol_ModalWindowDarkening, // darken entire screen when a modal window is active
ImGuiCol_COUNT
+
+ // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ //, ImGuiCol_ComboBg = ImGuiCol_PopupBg // ComboBg has been merged with PopupBg, so a redirect isn't accurate.
+ , ImGuiCol_ChildWindowBg = ImGuiCol_ChildBg, ImGuiCol_Column = ImGuiCol_Separator, ImGuiCol_ColumnHovered = ImGuiCol_SeparatorHovered, ImGuiCol_ColumnActive = ImGuiCol_SeparatorActive
+#endif
};
-// Enumeration for PushStyleVar() / PopStyleVar()
-// NB: the enum only refers to fields of ImGuiStyle() which makes sense to be pushed/poped in UI code. Feel free to add others.
+// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure.
+// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/poped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly.
+// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type.
enum ImGuiStyleVar_
{
- ImGuiStyleVar_Alpha, // float
- ImGuiStyleVar_WindowPadding, // ImVec2
- ImGuiStyleVar_WindowRounding, // float
- ImGuiStyleVar_WindowMinSize, // ImVec2
- ImGuiStyleVar_ChildWindowRounding, // float
- ImGuiStyleVar_FramePadding, // ImVec2
- ImGuiStyleVar_FrameRounding, // float
- ImGuiStyleVar_ItemSpacing, // ImVec2
- ImGuiStyleVar_ItemInnerSpacing, // ImVec2
- ImGuiStyleVar_IndentSpacing, // float
- ImGuiStyleVar_GrabMinSize, // float
- ImGuiStyleVar_ButtonTextAlign, // flags ImGuiAlign_*
+ // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions)
+ ImGuiStyleVar_Alpha, // float Alpha
+ ImGuiStyleVar_WindowPadding, // ImVec2 WindowPadding
+ ImGuiStyleVar_WindowRounding, // float WindowRounding
+ ImGuiStyleVar_WindowBorderSize, // float WindowBorderSize
+ ImGuiStyleVar_WindowMinSize, // ImVec2 WindowMinSize
+ ImGuiStyleVar_ChildRounding, // float ChildRounding
+ ImGuiStyleVar_ChildBorderSize, // float ChildBorderSize
+ ImGuiStyleVar_PopupRounding, // float PopupRounding
+ ImGuiStyleVar_PopupBorderSize, // float PopupBorderSize
+ ImGuiStyleVar_FramePadding, // ImVec2 FramePadding
+ ImGuiStyleVar_FrameRounding, // float FrameRounding
+ ImGuiStyleVar_FrameBorderSize, // float FrameBorderSize
+ ImGuiStyleVar_ItemSpacing, // ImVec2 ItemSpacing
+ ImGuiStyleVar_ItemInnerSpacing, // ImVec2 ItemInnerSpacing
+ ImGuiStyleVar_IndentSpacing, // float IndentSpacing
+ ImGuiStyleVar_GrabMinSize, // float GrabMinSize
+ ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign
ImGuiStyleVar_ViewId, // uint8_t
ImGuiStyleVar_Count_
+
+ // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ , ImGuiStyleVar_ChildWindowRounding = ImGuiStyleVar_ChildRounding
+#endif
};
-// Enumeration for ColorEditMode()
-// FIXME-OBSOLETE: Will be replaced by future color/picker api
-enum ImGuiColorEditMode_
+// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton()
+enum ImGuiColorEditFlags_
{
- ImGuiColorEditMode_UserSelect = -2,
- ImGuiColorEditMode_UserSelectShowButton = -1,
- ImGuiColorEditMode_RGB = 0,
- ImGuiColorEditMode_HSV = 1,
- ImGuiColorEditMode_HEX = 2
+ ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer).
+ ImGuiColorEditFlags_NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square.
+ ImGuiColorEditFlags_NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview.
+ ImGuiColorEditFlags_NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs)
+ ImGuiColorEditFlags_NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square).
+ ImGuiColorEditFlags_NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview.
+ ImGuiColorEditFlags_NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker).
+ ImGuiColorEditFlags_NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead.
+ // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup.
+ ImGuiColorEditFlags_AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker.
+ ImGuiColorEditFlags_AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque.
+ ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque.
+ ImGuiColorEditFlags_HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well).
+ ImGuiColorEditFlags_RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX.
+ ImGuiColorEditFlags_HSV = 1 << 14, // [Inputs] // "
+ ImGuiColorEditFlags_HEX = 1 << 15, // [Inputs] // "
+ ImGuiColorEditFlags_Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255.
+ ImGuiColorEditFlags_Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers.
+ ImGuiColorEditFlags_PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value.
+ ImGuiColorEditFlags_PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value.
+ // Internals/Masks
+ ImGuiColorEditFlags__InputsMask = ImGuiColorEditFlags_RGB|ImGuiColorEditFlags_HSV|ImGuiColorEditFlags_HEX,
+ ImGuiColorEditFlags__DataTypeMask = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_Float,
+ ImGuiColorEditFlags__PickerMask = ImGuiColorEditFlags_PickerHueWheel|ImGuiColorEditFlags_PickerHueBar,
+ ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_RGB|ImGuiColorEditFlags_PickerHueBar // Change application default using SetColorEditOptions()
};
// Enumeration for GetMouseCursor()
@@ -676,26 +741,36 @@ enum ImGuiMouseCursor_
ImGuiMouseCursor_Count_
};
-// Condition flags for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions
-// All those functions treat 0 as a shortcut to ImGuiSetCond_Always
-enum ImGuiSetCond_
+// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions
+// All those functions treat 0 as a shortcut to ImGuiCond_Always. From the point of view of the user use this as an enum (don't combine multiple values into flags).
+enum ImGuiCond_
{
- ImGuiSetCond_Always = 1 << 0, // Set the variable
- ImGuiSetCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed)
- ImGuiSetCond_FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file)
- ImGuiSetCond_Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time)
+ ImGuiCond_Always = 1 << 0, // Set the variable
+ ImGuiCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed)
+ ImGuiCond_FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file)
+ ImGuiCond_Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time)
+
+ // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ , ImGuiSetCond_Always = ImGuiCond_Always, ImGuiSetCond_Once = ImGuiCond_Once, ImGuiSetCond_FirstUseEver = ImGuiCond_FirstUseEver, ImGuiSetCond_Appearing = ImGuiCond_Appearing
+#endif
};
struct ImGuiStyle
{
float Alpha; // Global alpha applies to everything in ImGui
ImVec2 WindowPadding; // Padding within a window
- ImVec2 WindowMinSize; // Minimum window size
float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows
+ float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly)
+ ImVec2 WindowMinSize; // Minimum window size
ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered.
- float ChildWindowRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows
+ float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows.
+ float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly)
+ float PopupRounding; // Radius of popup window corners rounding.
+ float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly)
ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets)
float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets).
+ float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly)
ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines
ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label)
ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
@@ -715,6 +790,7 @@ struct ImGuiStyle
ImVec4 Colors[ImGuiCol_COUNT];
IMGUI_API ImGuiStyle();
+ IMGUI_API void ScaleAllSizes(float scale_factor);
};
// This is where your app communicate with ImGui. Access via ImGui::GetIO().
@@ -735,7 +811,7 @@ struct ImGuiIO
float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging
int KeyMap[ImGuiKey_COUNT]; // <unset> // Map of indices into the KeysDown[512] entries array
float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
- float KeyRepeatRate; // = 0.020f // When holding a key/button, rate at which it repeats, in seconds.
+ float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds.
void* UserData; // = NULL // Store your own data for retrieval by callbacks.
ImFontAtlas* Fonts; // <auto> // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array.
@@ -747,10 +823,11 @@ struct ImGuiIO
ImVec2 DisplayVisibleMax; // <unset> (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize
// Advanced/subtle behaviors
- bool OSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl
+ bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl
+ bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying.
//------------------------------------------------------------------
- // User Functions
+ // Settings (User Functions)
//------------------------------------------------------------------
// Rendering function, will be called in Render().
@@ -778,7 +855,7 @@ struct ImGuiIO
// Input - Fill before calling NewFrame()
//------------------------------------------------------------------
- ImVec2 MousePos; // Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.)
+ ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.)
bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text.
bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor).
@@ -798,30 +875,32 @@ struct ImGuiIO
// Output - Retrieve after calling NewFrame()
//------------------------------------------------------------------
- bool WantCaptureMouse; // Mouse is hovering a window or widget is active (= ImGui will use your mouse input). Use to hide mouse from the rest of your application
- bool WantCaptureKeyboard; // Widget is active (= ImGui will use your keyboard input). Use to hide keyboard from the rest of your application
- bool WantTextInput; // Some text input widget is active, which will read input characters from the InputCharacters array. Use to activate on screen keyboard if your system needs one
+ bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active).
+ bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs.
+ bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
+ bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'.
float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames
int MetricsAllocs; // Number of active memory allocations
int MetricsRenderVertices; // Vertices output during last call to Render()
int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3
int MetricsActiveWindows; // Number of visible root windows (exclude child windows)
- ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are negative, so a disappearing/reappearing mouse won't have a huge delta for one frame.
+ ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
//------------------------------------------------------------------
- // [Private] ImGui will maintain those fields. Forward compatibility not guaranteed!
+ // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed!
//------------------------------------------------------------------
ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame())
- bool MouseClicked[5]; // Mouse button went from !Down to Down
ImVec2 MouseClickedPos[5]; // Position at time of clicking
float MouseClickedTime[5]; // Time of last click (used to figure out double-click)
+ bool MouseClicked[5]; // Mouse button went from !Down to Down
bool MouseDoubleClicked[5]; // Has mouse button been double-clicked?
bool MouseReleased[5]; // Mouse button went from Down to !Down
bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds.
float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked)
float MouseDownDurationPrev[5]; // Previous time the mouse button has been down
- float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the click point
+ ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point
+ float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point
float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed)
float KeysDownDurationPrev[512]; // Previous duration the key has been down
@@ -829,6 +908,28 @@ struct ImGuiIO
};
//-----------------------------------------------------------------------------
+// Obsolete functions (Will be removed! Also see 'API BREAKING CHANGES' section in imgui.cpp)
+//-----------------------------------------------------------------------------
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+namespace ImGui
+{
+ static inline bool IsRootWindowOrAnyChildHovered(ImGuiHoveredFlags flags = 0) { return IsItemHovered(flags | ImGuiHoveredFlags_FlattenChilds); } // OBSOLETE 1.53+ use flags directly
+ bool Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha_override = -1.0f, ImGuiWindowFlags flags = 0); // OBSOLETE 1.52+. use SetNextWindowSize() instead if you want to set a window size.
+ static inline void AlignFirstTextHeightToWidgets() { AlignTextToFramePadding(); } // OBSOLETE 1.52+
+ static inline void SetNextWindowPosCenter(ImGuiCond cond = 0) { SetNextWindowPos(ImVec2(GetIO().DisplaySize.x * 0.5f, GetIO().DisplaySize.y * 0.5f), cond, ImVec2(0.5f, 0.5f)); } // OBSOLETE 1.52+
+ static inline bool IsItemHoveredRect() { return IsItemHovered(ImGuiHoveredFlags_RectOnly); } // OBSOLETE 1.51+
+ static inline bool IsPosHoveringAnyWindow(const ImVec2&) { IM_ASSERT(0); return false; } // OBSOLETE 1.51+. This was partly broken. You probably wanted to use ImGui::GetIO().WantCaptureMouse instead.
+ static inline bool IsMouseHoveringAnyWindow() { return IsAnyWindowHovered(); } // OBSOLETE 1.51+
+ static inline bool IsMouseHoveringWindow() { return IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem); } // OBSOLETE 1.51+
+ static inline bool CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1 << 5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+
+ static inline ImFont* GetWindowFont() { return GetFont(); } // OBSOLETE 1.48+
+ static inline float GetWindowFontSize() { return GetFontSize(); } // OBSOLETE 1.48+
+ static inline void SetScrollPosHere() { SetScrollHere(); } // OBSOLETE 1.42+
+}
+#endif
+
+//-----------------------------------------------------------------------------
// Helpers
//-----------------------------------------------------------------------------
@@ -867,16 +968,16 @@ public:
inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size-1]; }
inline void swap(ImVector<T>& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
- inline int _grow_capacity(int new_size) { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > new_size ? new_capacity : new_size; }
+ inline int _grow_capacity(int sz) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > sz ? new_capacity : sz; }
inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
+ inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; }
inline void reserve(int new_capacity)
{
if (new_capacity <= Capacity) return;
- T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(value_type));
- memset(&new_data[Size], 0, (size_t)(new_capacity - Size) * sizeof(value_type)); // BK - clear garbage so that 0 initialized ImString works properly.
+ T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T));
if (Data)
- memcpy(new_data, Data, (size_t)Size * sizeof(value_type));
+ memcpy(new_data, Data, (size_t)Size * sizeof(T));
ImGui::MemFree(Data);
Data = new_data;
Capacity = new_capacity;
@@ -884,20 +985,17 @@ public:
inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size+1)); Data[Size++] = v; }
inline void pop_back() { IM_ASSERT(Size > 0); Size--; }
+ inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); }
inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; }
inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(Capacity ? Capacity * 2 : 4); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; }
};
-// Helper: execute a block of code at maximum once a frame
-// Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame.
+// Helper: execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame.
// Usage:
-// IMGUI_ONCE_UPON_A_FRAME
-// {
-// // code block will be executed one per frame
-// }
-// Attention! the macro expands into 2 statement so make sure you don't use it within e.g. an if() statement without curly braces.
-#define IMGUI_ONCE_UPON_A_FRAME static ImGuiOnceUponAFrame imgui_oaf##__LINE__; if (imgui_oaf##__LINE__)
+// static ImGuiOnceUponAFrame oaf;
+// if (oaf)
+// ImGui::Text("This will be called only once per frame");
struct ImGuiOnceUponAFrame
{
ImGuiOnceUponAFrame() { RefFrame = -1; }
@@ -905,6 +1003,11 @@ struct ImGuiOnceUponAFrame
operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; }
};
+// Helper macro for ImGuiOnceUponAFrame. Attention: The macro expands into 2 statement so make sure you don't use it within e.g. an if() statement without curly braces.
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS // Will obsolete
+#define IMGUI_ONCE_UPON_A_FRAME static ImGuiOnceUponAFrame imgui_oaf; if (imgui_oaf)
+#endif
+
// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
struct ImGuiTextFilter
{
@@ -928,13 +1031,12 @@ struct ImGuiTextFilter
ImVector<TextRange> Filters;
int CountGrep;
- ImGuiTextFilter(const char* default_filter = "");
- ~ImGuiTextFilter() {}
+ IMGUI_API ImGuiTextFilter(const char* default_filter = "");
+ IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
+ IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const;
+ IMGUI_API void Build();
void Clear() { InputBuf[0] = 0; Build(); }
- bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
- bool PassFilter(const char* text, const char* text_end = NULL) const;
bool IsActive() const { return !Filters.empty(); }
- IMGUI_API void Build();
};
// Helper: Text buffer for logging/accumulating text
@@ -949,18 +1051,19 @@ struct ImGuiTextBuffer
int size() const { return Buf.Size - 1; }
bool empty() { return Buf.Size <= 1; }
void clear() { Buf.clear(); Buf.push_back(0); }
+ void reserve(int capacity) { Buf.reserve(capacity); }
const char* c_str() const { return Buf.Data; }
- IMGUI_API void append(const char* fmt, ...) IM_PRINTFARGS(2);
- IMGUI_API void appendv(const char* fmt, va_list args);
+ IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2);
+ IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2);
};
// Helper: Simple Key->value storage
// Typically you don't have to worry about this since a storage is held within each Window.
-// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options.
-// You can use it as custom user storage for temporary values.
-// Declare your own storage if:
+// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options.
+// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions)
+// You can use it as custom user storage for temporary values. Declare your own storage if, for example:
// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state).
-// - You want to store custom debug data easily without adding or editing structures in your code.
+// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient)
// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types.
struct ImGuiStorage
{
@@ -968,7 +1071,7 @@ struct ImGuiStorage
{
ImGuiID key;
union { int val_i; float val_f; void* val_p; };
- Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; }
+ Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; }
Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; }
Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; }
};
@@ -977,7 +1080,7 @@ struct ImGuiStorage
// - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N)
// - Set***() functions find pair, insertion on demand if missing.
// - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair.
- IMGUI_API void Clear();
+ void Clear() { Data.clear(); }
IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const;
IMGUI_API void SetInt(ImGuiID key, int val);
IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const;
@@ -998,6 +1101,9 @@ struct ImGuiStorage
// Use on your own storage if you know only integer are being stored (open/close all tree nodes)
IMGUI_API void SetAllInt(int val);
+
+ // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
+ IMGUI_API void BuildSortByKey();
};
// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered.
@@ -1023,9 +1129,9 @@ struct ImGuiTextEditCallbackData
int SelectionEnd; // // Read-write
// NB: Helper functions for text manipulation. Calling those function loses selection.
- void DeleteChars(int pos, int bytes_count);
- void InsertChars(int pos, const char* text, const char* text_end = NULL);
- bool HasSelection() const { return SelectionStart != SelectionEnd; }
+ IMGUI_API void DeleteChars(int pos, int bytes_count);
+ IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL);
+ bool HasSelection() const { return SelectionStart != SelectionEnd; }
};
// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin().
@@ -1033,8 +1139,8 @@ struct ImGuiTextEditCallbackData
struct ImGuiSizeConstraintCallbackData
{
void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints()
- ImVec2 Pos; // Read-only. Window position, for reference.
- ImVec2 CurrentSize; // Read-only. Current window size.
+ ImVec2 Pos; // Read-only. Window position, for reference.
+ ImVec2 CurrentSize; // Read-only. Current window size.
ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing.
};
@@ -1053,14 +1159,14 @@ struct ImGuiSizeConstraintCallbackData
#define IM_COL32_A_MASK 0xFF000000
#endif
#define IM_COL32(R,G,B,A) (((ImU32)(A)<<IM_COL32_A_SHIFT) | ((ImU32)(B)<<IM_COL32_B_SHIFT) | ((ImU32)(G)<<IM_COL32_G_SHIFT) | ((ImU32)(R)<<IM_COL32_R_SHIFT))
-#define IM_COL32_WHITE IM_COL32(255,255,255,255) // Opaque white
+#define IM_COL32_WHITE IM_COL32(255,255,255,255) // Opaque white = 0xFFFFFFFF
#define IM_COL32_BLACK IM_COL32(0,0,0,255) // Opaque black
-#define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0) // Transparent black
+#define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0) // Transparent black = 0x00000000
// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
-// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class.
-// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats.
+// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE.
+// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed.
struct ImColor
{
ImVec4 Value;
@@ -1073,8 +1179,8 @@ struct ImColor
inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); }
inline operator ImVec4() const { return Value; }
+ // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers.
inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; }
-
static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); }
};
@@ -1149,6 +1255,7 @@ struct ImDrawVert
// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h
// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine.
// The type has to be described within the macro (you can either declare the struct or use a typedef)
+// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM.
IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
#endif
@@ -1160,16 +1267,30 @@ struct ImDrawChannel
ImVector<ImDrawIdx> IdxBuffer;
};
+enum ImDrawCornerFlags_
+{
+ ImDrawCornerFlags_TopLeft = 1 << 0, // 0x1
+ ImDrawCornerFlags_TopRight = 1 << 1, // 0x2
+ ImDrawCornerFlags_BotLeft = 1 << 2, // 0x4
+ ImDrawCornerFlags_BotRight = 1 << 3, // 0x8
+ ImDrawCornerFlags_Top = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_TopRight, // 0x3
+ ImDrawCornerFlags_Bot = ImDrawCornerFlags_BotLeft | ImDrawCornerFlags_BotRight, // 0xC
+ ImDrawCornerFlags_Left = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft, // 0x5
+ ImDrawCornerFlags_Right = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight, // 0xA
+ ImDrawCornerFlags_All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of ImDrawCornerFlags_All, as a convenience
+};
+
// Draw command list
// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering.
// At the moment, each ImGui window contains its own ImDrawList but they could potentially be merged in the future.
// If you want to add custom rendering within a window, you can use ImGui::GetWindowDrawList() to access the current draw list and add your own primitives.
// You can interleave normal ImGui:: calls and adding primitives to the current draw list.
-// All positions are in screen coordinates (0,0=top-left, 1 pixel per unit). Primitives are always added to the list and not culled (culling is done at render time and at a higher-level by ImGui:: functions).
+// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well)
+// Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions).
struct ImDrawList
{
// This is what you have to render
- ImVector<ImDrawCmd> CmdBuffer; // Commands. Typically 1 command = 1 gpu draw call.
+ ImVector<ImDrawCmd> CmdBuffer; // Commands. Typically 1 command = 1 GPU draw call.
ImVector<ImDrawIdx> IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those
ImVector<ImDrawVert> VtxBuffer; // Vertex buffer.
@@ -1192,11 +1313,13 @@ struct ImDrawList
IMGUI_API void PopClipRect();
IMGUI_API void PushTextureID(const ImTextureID& texture_id);
IMGUI_API void PopTextureID();
+ inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); }
+ inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); }
// Primitives
IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f);
- IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ~0, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round
- IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ~0); // a: upper-left, b: lower-right
+ IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round
+ IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right
IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f);
IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col);
@@ -1206,7 +1329,9 @@ struct ImDrawList
IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL);
- IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), ImU32 col = 0xFFFFFFFF);
+ IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF);
+ IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF);
+ IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All);
IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness, bool anti_aliased);
IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col, bool anti_aliased);
IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0);
@@ -1215,12 +1340,12 @@ struct ImDrawList
inline void PathClear() { _Path.resize(0); }
inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); }
inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); }
- inline void PathFill(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col, true); PathClear(); }
+ inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col, true); PathClear(); }
inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness, true); PathClear(); }
IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10);
IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0);
- IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ~0); // rounding_corners_flags: 4-bits corresponding to which corner to round
+ IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All);
// Channels
// - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives)
@@ -1259,40 +1384,49 @@ struct ImDrawData
// Functions
ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; }
- IMGUI_API void DeIndexAllBuffers(); // For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
+ IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
};
struct ImFontConfig
{
- void* FontData; // // TTF data
- int FontDataSize; // // TTF data size
- bool FontDataOwnedByAtlas; // true // TTF data ownership taken by the container ImFontAtlas (will delete memory itself). Set to true
- int FontNo; // 0 // Index of font within TTF file
- float SizePixels; // // Size in pixels for rasterizer
+ void* FontData; // // TTF/OTF data
+ int FontDataSize; // // TTF/OTF data size
+ bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
+ int FontNo; // 0 // Index of font within TTF/OTF file
+ float SizePixels; // // Size in pixels for rasterizer.
int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
- ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs
- const ImWchar* GlyphRanges; // // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE.
- bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs).
- bool MergeGlyphCenterV; // false // When merging (multiple ImFontInput for one ImFont), vertically center new glyphs instead of aligning their baseline
+ ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
+ ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input.
+ const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE.
+ bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights.
+ unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one.
+ float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable.
// [Internal]
- char Name[32]; // Name (strictly for debugging)
+ char Name[32]; // Name (strictly to ease debugging)
ImFont* DstFont;
IMGUI_API ImFontConfig();
};
-// Load and rasterize multiple TTF fonts into a same texture.
+struct ImFontGlyph
+{
+ ImWchar Codepoint; // 0x0000..0xFFFF
+ float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in)
+ float X0, Y0, X1, Y1; // Glyph corners
+ float U0, V0, U1, V1; // Texture coordinates
+};
+
+// Load and rasterize multiple TTF/OTF fonts into a same texture.
// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering.
// We also add custom graphic data into the texture that serves for ImGui.
// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you.
// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data.
// 3. Upload the pixels data into a texture within your graphics system.
// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture.
-// 5. Call ClearTexData() to free textures memory on the heap.
-// NB: If you use a 'glyph_ranges' array you need to make sure that your array persist up until the ImFont is cleared. We only copy the pointer, not the data.
+// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data.
struct ImFontAtlas
{
IMGUI_API ImFontAtlas();
@@ -1300,70 +1434,106 @@ struct ImFontAtlas
IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg);
IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL);
IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
- IMGUI_API ImFont* AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Transfer ownership of 'ttf_data' to ImFontAtlas, will be deleted after Build()
- IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_ttf_data' still owned by caller. Compress with binary_to_compressed_c.cpp
- IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_ttf_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 paramaeter
+ IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership.
+ IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp.
+ IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter.
IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory.
IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges)
IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates)
IMGUI_API void Clear(); // Clear all
- // Retrieve texture data
- // User is in charge of copying the pixels into graphics memory, then call SetTextureUserID()
- // After loading the texture into your graphic system, store your texture handle in 'TexID' (ignore if you aren't using multiple fonts nor images)
- // RGBA32 format is provided for convenience and high compatibility, but note that all RGB pixels are white, so 75% of the memory is wasted.
+ // Build atlas, retrieve pixel data.
+ // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID().
+ // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste).
// Pitch = Width * BytesPerPixels
+ IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions.
IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel
IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel
- void SetTexID(void* id) { TexID = id; }
+ void SetTexID(ImTextureID id) { TexID = id; }
+
+ //-------------------------------------------
+ // Glyph Ranges
+ //-------------------------------------------
// Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list)
- // NB: Make sure that your string are UTF-8 and NOT in your local code page. See FAQ for details.
+ // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details.
IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin
IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters
IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs
- IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Japanese + full set of about 21000 CJK Unified Ideographs
+ IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs
IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters
IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters
+ // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges().
+ struct GlyphRangesBuilder
+ {
+ ImVector<unsigned char> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
+ GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); }
+ bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; }
+ void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array
+ void AddChar(ImWchar c) { SetBit(c); } // Add character
+ IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
+ IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext
+ IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
+ };
+
+ //-------------------------------------------
+ // Custom Rectangles/Glyphs API
+ //-------------------------------------------
+
+ // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels.
+ // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs.
+ struct CustomRect
+ {
+ unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data.
+ unsigned short Width, Height; // Input // Desired rectangle dimension
+ unsigned short X, Y; // Output // Packed position in Atlas
+ float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance
+ ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset
+ ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font
+ CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; }
+ bool IsPacked() const { return X != 0xFFFF; }
+ };
+
+ IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList
+ IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font.
+ IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max);
+ const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; }
+
+ //-------------------------------------------
// Members
- // (Access texture data via GetTexData*() calls which will setup a default font for you.)
- void* TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It ia passed back to you during rendering.
+ //-------------------------------------------
+
+ ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure.
+ int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
+ int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1.
+
+ // [Internal]
+ // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you.
unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
int TexWidth; // Texture width calculated during Build().
int TexHeight; // Texture height calculated during Build().
- int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel
ImVector<ImFont*> Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
-
- // Private
+ ImVector<CustomRect> CustomRects; // Rectangles for packing custom texture data into the atlas.
ImVector<ImFontConfig> ConfigData; // Internal data
- IMGUI_API bool Build(); // Build pixels data. This is automatically for you by the GetTexData*** functions.
- IMGUI_API void RenderCustomTexData(int pass, void* rects);
+ int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList
};
// Font runtime data and rendering
// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32().
struct ImFont
{
- struct Glyph
- {
- ImWchar Codepoint;
- float XAdvance;
- float X0, Y0, X1, Y1;
- float U0, V0, U1, V1; // Texture coordinates
- };
-
// Members: Hot ~62/78 bytes
float FontSize; // <user set> // Height of characters, set during loading (don't change after loading)
float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale()
ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels
- ImVector<Glyph> Glyphs; // // All glyphs.
- ImVector<float> IndexXAdvance; // // Sparse. Glyphs->XAdvance in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI).
+ ImVector<ImFontGlyph> Glyphs; // // All glyphs.
+ ImVector<float> IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI).
ImVector<unsigned short> IndexLookup; // // Sparse. Index glyphs by Unicode code-point.
- const Glyph* FallbackGlyph; // == FindGlyph(FontFallbackChar)
- float FallbackXAdvance; // == FallbackGlyph->XAdvance
+ const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar)
+ float FallbackAdvanceX; // == FallbackGlyph->AdvanceX
ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar()
// Members: Cold ~18/26 bytes
@@ -1371,15 +1541,16 @@ struct ImFont
ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData
ImFontAtlas* ContainerAtlas; // // What we has been loaded into
float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
+ int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
// Methods
IMGUI_API ImFont();
IMGUI_API ~ImFont();
- IMGUI_API void Clear();
+ IMGUI_API void ClearOutputData();
IMGUI_API void BuildLookupTable();
- IMGUI_API const Glyph* FindGlyph(ImWchar c) const;
+ IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
IMGUI_API void SetFallbackChar(ImWchar c);
- float GetCharAdvance(ImWchar c) const { return ((int)c < IndexXAdvance.Size) ? IndexXAdvance[(int)c] : FallbackXAdvance; }
+ float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; }
bool IsLoaded() const { return ContainerAtlas != NULL; }
// 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
@@ -1389,9 +1560,14 @@ struct ImFont
IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const;
IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const;
- // Private
+ // [Internal]
IMGUI_API void GrowIndex(int new_size);
+ IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);
IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built.
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ typedef ImFontGlyph Glyph; // OBSOLETE 1.52+
+#endif
};
#if defined(__clang__)
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp
index c08de0ccf3e..6b0fed76931 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp
@@ -1,9 +1,22 @@
-// dear imgui, v1.50 WIP
+// dear imgui, v1.53 WIP
// (demo code)
-// Don't remove this file from your project! It is useful reference code that you can execute.
-// You can call ImGui::ShowTestWindow() in your code to learn about various features of ImGui.
+// Message to the person tempted to delete this file when integrating ImGui into their code base:
+// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to.
// Everything in this file will be stripped out by the linker if you don't call ImGui::ShowTestWindow().
+// During development, you can call ImGui::ShowTestWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu!
+// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library.
+// Note that you can #define IMGUI_DISABLE_TEST_WINDOWS in imconfig.h for the same effect.
+// If you want to link core ImGui in your public builds but not those test windows, #define IMGUI_DISABLE_TEST_WINDOWS in imconfig.h and those functions will be empty.
+// For any other case, if you have ImGui available you probably want this to be available for reference and execution.
+// Thank you,
+// -Your beloved friend, imgui_demo.cpp (that you won't delete)
+
+// Message to beginner C/C++ programmer about the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions.
+// We do this as a way to gather code and data in the same place, make the demo code faster to read, faster to write, and smaller. A static variable persist across calls,
+// so it is essentially like a global variable but declared inside the scope of the function.
+// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads.
+// This may be a pattern you want to use in your code (simple is beautiful!), but most of the real data you would be editing is likely to be stored outside your function.
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS
@@ -13,7 +26,7 @@
#include <ctype.h> // toupper, isprint
#include <math.h> // sqrtf, powf, cosf, sinf, floorf, ceilf
#include <stdio.h> // vsnprintf, sscanf, printf
-#include <stdlib.h> // NULL, malloc, free, qsort, atoi
+#include <stdlib.h> // NULL, malloc, free, atoi
#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
#include <stddef.h> // intptr_t
#else
@@ -88,23 +101,23 @@ static void ShowHelpMarker(const char* desc)
void ImGui::ShowUserGuide()
{
ImGui::BulletText("Double-click on title bar to collapse window.");
- ImGui::BulletText("Click and drag on lower right corner to resize window.");
+ ImGui::BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents).");
ImGui::BulletText("Click and drag on any empty space to move window.");
- ImGui::BulletText("Mouse Wheel to scroll.");
+ ImGui::BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields.");
+ ImGui::BulletText("CTRL+Click on a slider or drag box to input value as text.");
if (ImGui::GetIO().FontAllowUserScaling)
ImGui::BulletText("CTRL+Mouse Wheel to zoom window contents.");
- ImGui::BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields.");
- ImGui::BulletText("CTRL+Click on a slider or drag box to input text.");
- ImGui::BulletText(
- "While editing text:\n"
- "- Hold SHIFT or use mouse to select text\n"
- "- CTRL+Left/Right to word jump\n"
- "- CTRL+A or double-click to select all\n"
- "- CTRL+X,CTRL+C,CTRL+V clipboard\n"
- "- CTRL+Z,CTRL+Y undo/redo\n"
- "- ESCAPE to revert\n"
- "- You can apply arithmetic operators +,*,/ on numerical values.\n"
- " Use +- to subtract.\n");
+ ImGui::BulletText("Mouse Wheel to scroll.");
+ ImGui::BulletText("While editing text:\n");
+ ImGui::Indent();
+ ImGui::BulletText("Hold SHIFT or use mouse to select text.");
+ ImGui::BulletText("CTRL+Left/Right to word jump.");
+ ImGui::BulletText("CTRL+A or double-click to select all.");
+ ImGui::BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard.");
+ ImGui::BulletText("CTRL+Z,CTRL+Y to undo/redo.");
+ ImGui::BulletText("ESCAPE to revert.");
+ ImGui::BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract.");
+ ImGui::Unindent();
}
// Demonstrate most ImGui features (big function!)
@@ -152,23 +165,21 @@ void ImGui::ShowTestWindow(bool* p_open)
}
static bool no_titlebar = false;
- static bool no_border = true;
- static bool no_resize = false;
- static bool no_move = false;
static bool no_scrollbar = false;
- static bool no_collapse = false;
static bool no_menu = false;
+ static bool no_move = false;
+ static bool no_resize = false;
+ static bool no_collapse = false;
// Demonstrate the various window flags. Typically you would just use the default.
ImGuiWindowFlags window_flags = 0;
if (no_titlebar) window_flags |= ImGuiWindowFlags_NoTitleBar;
- if (!no_border) window_flags |= ImGuiWindowFlags_ShowBorders;
- if (no_resize) window_flags |= ImGuiWindowFlags_NoResize;
- if (no_move) window_flags |= ImGuiWindowFlags_NoMove;
if (no_scrollbar) window_flags |= ImGuiWindowFlags_NoScrollbar;
- if (no_collapse) window_flags |= ImGuiWindowFlags_NoCollapse;
if (!no_menu) window_flags |= ImGuiWindowFlags_MenuBar;
- ImGui::SetNextWindowSize(ImVec2(550,680), ImGuiSetCond_FirstUseEver);
+ if (no_move) window_flags |= ImGuiWindowFlags_NoMove;
+ if (no_resize) window_flags |= ImGuiWindowFlags_NoResize;
+ if (no_collapse) window_flags |= ImGuiWindowFlags_NoCollapse;
+ ImGui::SetNextWindowSize(ImVec2(550,680), ImGuiCond_FirstUseEver);
if (!ImGui::Begin("ImGui Demo", p_open, window_flags))
{
// Early out if the window is collapsed, as an optimization.
@@ -179,7 +190,7 @@ void ImGui::ShowTestWindow(bool* p_open)
//ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.65f); // 2/3 of the space for widget and 1/3 for labels
ImGui::PushItemWidth(-140); // Right align, keep 140 pixels for labels
- ImGui::Text("Dear ImGui says hello.");
+ ImGui::Text("dear imgui says hello. (%s)", IMGUI_VERSION);
// Menu
if (ImGui::BeginMenuBar())
@@ -217,19 +228,19 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::Spacing();
if (ImGui::CollapsingHeader("Help"))
{
- ImGui::TextWrapped("This window is being created by the ShowTestWindow() function. Please refer to the code for programming reference.\n\nUser Guide:");
+ ImGui::TextWrapped("This window is being created by the ShowTestWindow() function. Please refer to the code in imgui_demo.cpp for reference.\n\n");
+ ImGui::Text("USER GUIDE:");
ImGui::ShowUserGuide();
}
if (ImGui::CollapsingHeader("Window options"))
{
ImGui::Checkbox("No titlebar", &no_titlebar); ImGui::SameLine(150);
- ImGui::Checkbox("No border", &no_border); ImGui::SameLine(300);
- ImGui::Checkbox("No resize", &no_resize);
- ImGui::Checkbox("No move", &no_move); ImGui::SameLine(150);
ImGui::Checkbox("No scrollbar", &no_scrollbar); ImGui::SameLine(300);
- ImGui::Checkbox("No collapse", &no_collapse);
ImGui::Checkbox("No menu", &no_menu);
+ ImGui::Checkbox("No move", &no_move); ImGui::SameLine(150);
+ ImGui::Checkbox("No resize", &no_resize); ImGui::SameLine(300);
+ ImGui::Checkbox("No collapse", &no_collapse);
if (ImGui::TreeNode("Style"))
{
@@ -247,6 +258,129 @@ void ImGui::ShowTestWindow(bool* p_open)
if (ImGui::CollapsingHeader("Widgets"))
{
+ if (ImGui::TreeNode("Basic"))
+ {
+ static int clicked = 0;
+ if (ImGui::Button("Button"))
+ clicked++;
+ if (clicked & 1)
+ {
+ ImGui::SameLine();
+ ImGui::Text("Thanks for clicking me!");
+ }
+
+ static bool check = true;
+ ImGui::Checkbox("checkbox", &check);
+
+ static int e = 0;
+ ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine();
+ ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();
+ ImGui::RadioButton("radio c", &e, 2);
+
+ // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style.
+ for (int i = 0; i < 7; i++)
+ {
+ if (i > 0) ImGui::SameLine();
+ ImGui::PushID(i);
+ ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.6f));
+ ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.7f));
+ ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(i/7.0f, 0.8f, 0.8f));
+ ImGui::Button("Click");
+ ImGui::PopStyleColor(3);
+ ImGui::PopID();
+ }
+
+ ImGui::Text("Hover over me");
+ if (ImGui::IsItemHovered())
+ ImGui::SetTooltip("I am a tooltip");
+
+ ImGui::SameLine();
+ ImGui::Text("- or me");
+ if (ImGui::IsItemHovered())
+ {
+ ImGui::BeginTooltip();
+ ImGui::Text("I am a fancy tooltip");
+ static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
+ ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr));
+ ImGui::EndTooltip();
+ }
+
+ // Testing ImGuiOnceUponAFrame helper.
+ //static ImGuiOnceUponAFrame once;
+ //for (int i = 0; i < 5; i++)
+ // if (once)
+ // ImGui::Text("This will be displayed only once.");
+
+ ImGui::Separator();
+
+ ImGui::LabelText("label", "Value");
+
+ static int item = 1;
+ ImGui::Combo("combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); // Combo using values packed in a single constant string (for really quick combo)
+
+ const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK" };
+ static int item2 = -1;
+ ImGui::Combo("combo scroll", &item2, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that.
+
+ {
+ static char str0[128] = "Hello, world!";
+ static int i0=123;
+ static float f0=0.001f;
+ ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0));
+ ImGui::SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n");
+
+ ImGui::InputInt("input int", &i0);
+ ImGui::SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n");
+
+ ImGui::InputFloat("input float", &f0, 0.01f, 1.0f);
+
+ static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
+ ImGui::InputFloat3("input float3", vec4a);
+ }
+
+ {
+ static int i1=50, i2=42;
+ ImGui::DragInt("drag int", &i1, 1);
+ ImGui::SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value.");
+
+ ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%.0f%%");
+
+ static float f1=1.00f, f2=0.0067f;
+ ImGui::DragFloat("drag float", &f1, 0.005f);
+ ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns");
+ }
+
+ {
+ static int i1=0;
+ ImGui::SliderInt("slider int", &i1, -1, 3);
+ ImGui::SameLine(); ShowHelpMarker("CTRL+click to input value.");
+
+ static float f1=0.123f, f2=0.0f;
+ ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f");
+ ImGui::SliderFloat("slider log float", &f2, -10.0f, 10.0f, "%.4f", 3.0f);
+ static float angle = 0.0f;
+ ImGui::SliderAngle("slider angle", &angle);
+ }
+
+ static float col1[3] = { 1.0f,0.0f,0.2f };
+ static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
+ ImGui::ColorEdit3("color 1", col1);
+ ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n");
+
+ ImGui::ColorEdit4("color 2", col2);
+
+ const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" };
+ static int listbox_item_current = 1;
+ ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
+
+ //static int listbox_item_current2 = 2;
+ //ImGui::PushItemWidth(-1);
+ //ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
+ //ImGui::PopItemWidth();
+
+ ImGui::TreePop();
+ }
+
if (ImGui::TreeNode("Trees"))
{
if (ImGui::TreeNode("Basic trees"))
@@ -293,7 +427,8 @@ void ImGui::ShowTestWindow(bool* p_open)
else
{
// Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text().
- ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags | ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen, "Selectable Leaf %d", i);
+ node_flags |= ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen; // ImGuiTreeNodeFlags_Bullet
+ ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Leaf %d", i);
if (ImGui::IsItemClicked())
node_clicked = i;
}
@@ -317,14 +452,16 @@ void ImGui::ShowTestWindow(bool* p_open)
if (ImGui::TreeNode("Collapsing Headers"))
{
static bool closable_group = true;
+ ImGui::Checkbox("Enable extra group", &closable_group);
if (ImGui::CollapsingHeader("Header"))
{
- ImGui::Checkbox("Enable extra group", &closable_group);
+ ImGui::Text("IsItemHovered: %d", IsItemHovered());
for (int i = 0; i < 5; i++)
ImGui::Text("Some content %d", i);
}
if (ImGui::CollapsingHeader("Header with a close button", &closable_group))
{
+ ImGui::Text("IsItemHovered: %d", IsItemHovered());
for (int i = 0; i < 5; i++)
ImGui::Text("More content %d", i);
}
@@ -340,79 +477,95 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::TreePop();
}
- if (ImGui::TreeNode("Colored Text"))
+ if (ImGui::TreeNode("Text"))
{
- // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility.
- ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink");
- ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow");
- ImGui::TextDisabled("Disabled");
- ImGui::TreePop();
- }
-
- if (ImGui::TreeNode("Word Wrapping"))
- {
- // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility.
- ImGui::TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages.");
- ImGui::Spacing();
-
- static float wrap_width = 200.0f;
- ImGui::SliderFloat("Wrap width", &wrap_width, -20, 600, "%.0f");
+ if (ImGui::TreeNode("Colored Text"))
+ {
+ // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility.
+ ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink");
+ ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow");
+ ImGui::TextDisabled("Disabled");
+ ImGui::SameLine(); ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle.");
+ ImGui::TreePop();
+ }
- ImGui::Text("Test paragraph 1:");
- ImVec2 pos = ImGui::GetCursorScreenPos();
- ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
- ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
- ImGui::Text("The lazy dog is a good dog. This paragraph is made to fit within %.0f pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.", wrap_width);
- ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
- ImGui::PopTextWrapPos();
-
- ImGui::Text("Test paragraph 2:");
- pos = ImGui::GetCursorScreenPos();
- ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
- ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
- ImGui::Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh");
- ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
- ImGui::PopTextWrapPos();
+ if (ImGui::TreeNode("Word Wrapping"))
+ {
+ // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility.
+ ImGui::TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages.");
+ ImGui::Spacing();
+
+ static float wrap_width = 200.0f;
+ ImGui::SliderFloat("Wrap width", &wrap_width, -20, 600, "%.0f");
+
+ ImGui::Text("Test paragraph 1:");
+ ImVec2 pos = ImGui::GetCursorScreenPos();
+ ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
+ ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
+ ImGui::Text("The lazy dog is a good dog. This paragraph is made to fit within %.0f pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.", wrap_width);
+ ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
+ ImGui::PopTextWrapPos();
+
+ ImGui::Text("Test paragraph 2:");
+ pos = ImGui::GetCursorScreenPos();
+ ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
+ ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
+ ImGui::Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh");
+ ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
+ ImGui::PopTextWrapPos();
- ImGui::TreePop();
- }
+ ImGui::TreePop();
+ }
- if (ImGui::TreeNode("UTF-8 Text"))
- {
- // UTF-8 test with Japanese characters
- // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html)
- // Most compiler appears to support UTF-8 in source code (with Visual Studio you need to save your file as 'UTF-8 without signature')
- // However for the sake for maximum portability here we are *not* including raw UTF-8 character in this source file, instead we encode the string with hexadecimal constants.
- // In your own application be reasonable and use UTF-8 in source or retrieve the data from file system!
- // Note that characters values are preserved even if the font cannot be displayed, so you can safely copy & paste garbled characters into another application.
- ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges.");
- ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)");
- ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)");
- static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e";
- ImGui::InputText("UTF-8 input", buf, IM_ARRAYSIZE(buf));
+ if (ImGui::TreeNode("UTF-8 Text"))
+ {
+ // UTF-8 test with Japanese characters
+ // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html)
+ // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8
+ // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature')
+ // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE.
+ // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application!
+ // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application.
+ ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges.");
+ ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)");
+ ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)");
+ static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"; // "nihongo"
+ ImGui::InputText("UTF-8 input", buf, IM_ARRAYSIZE(buf));
+ ImGui::TreePop();
+ }
ImGui::TreePop();
}
if (ImGui::TreeNode("Images"))
{
ImGui::TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!");
- ImVec2 tex_screen_pos = ImGui::GetCursorScreenPos();
- float tex_w = (float)ImGui::GetIO().Fonts->TexWidth;
- float tex_h = (float)ImGui::GetIO().Fonts->TexHeight;
- ImTextureID tex_id = ImGui::GetIO().Fonts->TexID;
- ImGui::Text("%.0fx%.0f", tex_w, tex_h);
- ImGui::Image(tex_id, ImVec2(tex_w, tex_h), ImVec2(0,0), ImVec2(1,1), ImColor(255,255,255,255), ImColor(255,255,255,128));
+ ImGuiIO& io = ImGui::GetIO();
+
+ // Here we are grabbing the font texture because that's the only one we have access to inside the demo code.
+ // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure.
+ // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID.
+ // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.)
+ // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui::Image(), and gather width/height through your own functions, etc.
+ // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this.
+ // Consider using the lower-level ImDrawList::AddImage() API, via ImGui::GetWindowDrawList()->AddImage().
+ ImTextureID my_tex_id = io.Fonts->TexID;
+ float my_tex_w = (float)io.Fonts->TexWidth;
+ float my_tex_h = (float)io.Fonts->TexHeight;
+
+ ImGui::Text("%.0fx%.0f", my_tex_w, my_tex_h);
+ ImVec2 pos = ImGui::GetCursorScreenPos();
+ ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), ImVec2(0,0), ImVec2(1,1), ImColor(255,255,255,255), ImColor(255,255,255,128));
if (ImGui::IsItemHovered())
{
ImGui::BeginTooltip();
float focus_sz = 32.0f;
- float focus_x = ImGui::GetMousePos().x - tex_screen_pos.x - focus_sz * 0.5f; if (focus_x < 0.0f) focus_x = 0.0f; else if (focus_x > tex_w - focus_sz) focus_x = tex_w - focus_sz;
- float focus_y = ImGui::GetMousePos().y - tex_screen_pos.y - focus_sz * 0.5f; if (focus_y < 0.0f) focus_y = 0.0f; else if (focus_y > tex_h - focus_sz) focus_y = tex_h - focus_sz;
+ float focus_x = io.MousePos.x - pos.x - focus_sz * 0.5f; if (focus_x < 0.0f) focus_x = 0.0f; else if (focus_x > my_tex_w - focus_sz) focus_x = my_tex_w - focus_sz;
+ float focus_y = io.MousePos.y - pos.y - focus_sz * 0.5f; if (focus_y < 0.0f) focus_y = 0.0f; else if (focus_y > my_tex_h - focus_sz) focus_y = my_tex_h - focus_sz;
ImGui::Text("Min: (%.2f, %.2f)", focus_x, focus_y);
ImGui::Text("Max: (%.2f, %.2f)", focus_x + focus_sz, focus_y + focus_sz);
- ImVec2 uv0 = ImVec2((focus_x) / tex_w, (focus_y) / tex_h);
- ImVec2 uv1 = ImVec2((focus_x + focus_sz) / tex_w, (focus_y + focus_sz) / tex_h);
- ImGui::Image(tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128));
+ ImVec2 uv0 = ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h);
+ ImVec2 uv1 = ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h);
+ ImGui::Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128));
ImGui::EndTooltip();
}
ImGui::TextWrapped("And now some textured buttons..");
@@ -421,7 +574,7 @@ void ImGui::ShowTestWindow(bool* p_open)
{
ImGui::PushID(i);
int frame_padding = -1 + i; // -1 = uses default padding
- if (ImGui::ImageButton(tex_id, ImVec2(32,32), ImVec2(0,0), ImVec2(32.0f/tex_w,32/tex_h), frame_padding, ImColor(0,0,0,255)))
+ if (ImGui::ImageButton(my_tex_id, ImVec2(32,32), ImVec2(0,0), ImVec2(32.0f/my_tex_w,32/my_tex_h), frame_padding, ImColor(0,0,0,255)))
pressed_count += 1;
ImGui::PopID();
ImGui::SameLine();
@@ -529,143 +682,202 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::TreePop();
}
- static bool a=false;
- if (ImGui::Button("Button")) { printf("Clicked\n"); a ^= 1; }
- if (a)
- {
- ImGui::SameLine();
- ImGui::Text("Thanks for clicking me!");
- }
-
- static bool check = true;
- ImGui::Checkbox("checkbox", &check);
-
- static int e = 0;
- ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine();
- ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();
- ImGui::RadioButton("radio c", &e, 2);
-
- // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style.
- for (int i = 0; i < 7; i++)
+ if (ImGui::TreeNode("Plots widgets"))
{
- if (i > 0) ImGui::SameLine();
- ImGui::PushID(i);
- ImGui::PushStyleColor(ImGuiCol_Button, ImColor::HSV(i/7.0f, 0.6f, 0.6f));
- ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImColor::HSV(i/7.0f, 0.7f, 0.7f));
- ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImColor::HSV(i/7.0f, 0.8f, 0.8f));
- ImGui::Button("Click");
- ImGui::PopStyleColor(3);
- ImGui::PopID();
- }
-
- ImGui::Text("Hover over me");
- if (ImGui::IsItemHovered())
- ImGui::SetTooltip("I am a tooltip");
+ static bool animate = true;
+ ImGui::Checkbox("Animate", &animate);
- ImGui::SameLine();
- ImGui::Text("- or me");
- if (ImGui::IsItemHovered())
- {
- ImGui::BeginTooltip();
- ImGui::Text("I am a fancy tooltip");
static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
- ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr));
- ImGui::EndTooltip();
- }
-
- // Testing IMGUI_ONCE_UPON_A_FRAME macro
- //for (int i = 0; i < 5; i++)
- //{
- // IMGUI_ONCE_UPON_A_FRAME
- // {
- // ImGui::Text("This will be displayed only once.");
- // }
- //}
-
- ImGui::Separator();
-
- ImGui::LabelText("label", "Value");
-
- static int item = 1;
- ImGui::Combo("combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); // Combo using values packed in a single constant string (for really quick combo)
-
- const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK" };
- static int item2 = -1;
- ImGui::Combo("combo scroll", &item2, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that.
+ ImGui::PlotLines("Frame Times", arr, IM_ARRAYSIZE(arr));
+
+ // Create a dummy array of contiguous float values to plot
+ // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter.
+ static float values[90] = { 0 };
+ static int values_offset = 0;
+ static float refresh_time = 0.0f;
+ if (!animate || refresh_time == 0.0f)
+ refresh_time = ImGui::GetTime();
+ while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo
+ {
+ static float phase = 0.0f;
+ values[values_offset] = cosf(phase);
+ values_offset = (values_offset+1) % IM_ARRAYSIZE(values);
+ phase += 0.10f*values_offset;
+ refresh_time += 1.0f/60.0f;
+ }
+ ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, "avg 0.0", -1.0f, 1.0f, ImVec2(0,80));
+ ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0,80));
- {
- static char str0[128] = "Hello, world!";
- static int i0=123;
- static float f0=0.001f;
- ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0));
- ImGui::SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n");
+ // Use functions to generate output
+ // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count.
+ struct Funcs
+ {
+ static float Sin(void*, int i) { return sinf(i * 0.1f); }
+ static float Saw(void*, int i) { return (i & 1) ? 1.0f : -1.0f; }
+ };
+ static int func_type = 0, display_count = 70;
+ ImGui::Separator();
+ ImGui::PushItemWidth(100); ImGui::Combo("func", &func_type, "Sin\0Saw\0"); ImGui::PopItemWidth();
+ ImGui::SameLine();
+ ImGui::SliderInt("Sample count", &display_count, 1, 400);
+ float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw;
+ ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
+ ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
+ ImGui::Separator();
- ImGui::InputInt("input int", &i0);
- ImGui::SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n");
+ // Animate a simple progress bar
+ static float progress = 0.0f, progress_dir = 1.0f;
+ if (animate)
+ {
+ progress += progress_dir * 0.4f * ImGui::GetIO().DeltaTime;
+ if (progress >= +1.1f) { progress = +1.1f; progress_dir *= -1.0f; }
+ if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; }
+ }
- ImGui::InputFloat("input float", &f0, 0.01f, 1.0f);
+ // Typically we would use ImVec2(-1.0f,0.0f) to use all available width, or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth.
+ ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f));
+ ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+ ImGui::Text("Progress Bar");
- static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
- ImGui::InputFloat3("input float3", vec4a);
+ float progress_saturated = (progress < 0.0f) ? 0.0f : (progress > 1.0f) ? 1.0f : progress;
+ char buf[32];
+ sprintf(buf, "%d/%d", (int)(progress_saturated*1753), 1753);
+ ImGui::ProgressBar(progress, ImVec2(0.f,0.f), buf);
+ ImGui::TreePop();
}
+ if (ImGui::TreeNode("Color/Picker Widgets"))
{
- static int i1=50, i2=42;
- ImGui::DragInt("drag int", &i1, 1);
- ImGui::SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value.");
+ static ImVec4 color = ImColor(114, 144, 154, 200);
- ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%.0f%%");
+ static bool hdr = false;
+ static bool alpha_preview = true;
+ static bool alpha_half_preview = false;
+ static bool options_menu = true;
+ ImGui::Checkbox("With HDR", &hdr); ImGui::SameLine(); ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets.");
+ ImGui::Checkbox("With Alpha Preview", &alpha_preview);
+ ImGui::Checkbox("With Half Alpha Preview", &alpha_half_preview);
+ ImGui::Checkbox("With Options Menu", &options_menu); ImGui::SameLine(); ShowHelpMarker("Right-click on the individual color widget to show options.");
+ int misc_flags = (hdr ? ImGuiColorEditFlags_HDR : 0) | (alpha_half_preview ? ImGuiColorEditFlags_AlphaPreviewHalf : (alpha_preview ? ImGuiColorEditFlags_AlphaPreview : 0)) | (options_menu ? 0 : ImGuiColorEditFlags_NoOptions);
- static float f1=1.00f, f2=0.0067f;
- ImGui::DragFloat("drag float", &f1, 0.005f);
- ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns");
- }
+ ImGui::Text("Color widget:");
+ ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n");
+ ImGui::ColorEdit3("MyColor##1", (float*)&color, misc_flags);
- {
- static int i1=0;
- ImGui::SliderInt("slider int", &i1, -1, 3);
- ImGui::SameLine(); ShowHelpMarker("CTRL+click to input value.");
+ ImGui::Text("Color widget HSV with Alpha:");
+ ImGui::ColorEdit4("MyColor##2", (float*)&color, ImGuiColorEditFlags_HSV | misc_flags);
- static float f1=0.123f, f2=0.0f;
- ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f");
- ImGui::SliderFloat("slider log float", &f2, -10.0f, 10.0f, "%.4f", 3.0f);
- static float angle = 0.0f;
- ImGui::SliderAngle("slider angle", &angle);
- }
+ ImGui::Text("Color widget with Float Display:");
+ ImGui::ColorEdit4("MyColor##2f", (float*)&color, ImGuiColorEditFlags_Float | misc_flags);
- static float col1[3] = { 1.0f,0.0f,0.2f };
- static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
- ImGui::ColorEdit3("color 1", col1);
- ImGui::SameLine(); ShowHelpMarker("Click on the colored square to change edit mode.\nCTRL+click on individual component to input value.\n");
+ ImGui::Text("Color button with Picker:");
+ ImGui::SameLine(); ShowHelpMarker("With the ImGuiColorEditFlags_NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags_NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup.");
+ ImGui::ColorEdit4("MyColor##3", (float*)&color, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | misc_flags);
- ImGui::ColorEdit4("color 2", col2);
+ ImGui::Text("Color button with Custom Picker Popup:");
+ static bool saved_palette_inited = false;
+ static ImVec4 saved_palette[32];
+ static ImVec4 backup_color;
+ if (!saved_palette_inited)
+ for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++)
+ ImGui::ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z);
+ bool open_popup = ImGui::ColorButton("MyColor##3b", color, misc_flags);
+ ImGui::SameLine();
+ open_popup |= ImGui::Button("Palette");
+ if (open_popup)
+ {
+ ImGui::OpenPopup("mypicker");
+ backup_color = color;
+ }
+ if (ImGui::BeginPopup("mypicker"))
+ {
+ // FIXME: Adding a drag and drop example here would be perfect!
+ ImGui::Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!");
+ ImGui::Separator();
+ ImGui::ColorPicker4("##picker", (float*)&color, misc_flags | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoSmallPreview);
+ ImGui::SameLine();
+ ImGui::BeginGroup();
+ ImGui::Text("Current");
+ ImGui::ColorButton("##current", color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40));
+ ImGui::Text("Previous");
+ if (ImGui::ColorButton("##previous", backup_color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40)))
+ color = backup_color;
+ ImGui::Separator();
+ ImGui::Text("Palette");
+ for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++)
+ {
+ ImGui::PushID(n);
+ if ((n % 8) != 0)
+ ImGui::SameLine(0.0f, ImGui::GetStyle().ItemSpacing.y);
+ if (ImGui::ColorButton("##palette", saved_palette[n], ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip, ImVec2(20,20)))
+ color = ImVec4(saved_palette[n].x, saved_palette[n].y, saved_palette[n].z, color.w); // Preserve alpha!
+ ImGui::PopID();
+ }
+ ImGui::EndGroup();
+ ImGui::EndPopup();
+ }
- const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" };
- static int listbox_item_current = 1;
- ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
+ ImGui::Text("Color button only:");
+ ImGui::ColorButton("MyColor##3c", *(ImVec4*)&color, misc_flags, ImVec2(80,80));
+
+ ImGui::Text("Color picker:");
+ static bool alpha = true;
+ static bool alpha_bar = true;
+ static bool side_preview = true;
+ static bool ref_color = false;
+ static ImVec4 ref_color_v(1.0f,0.0f,1.0f,0.5f);
+ static int inputs_mode = 2;
+ static int picker_mode = 0;
+ ImGui::Checkbox("With Alpha", &alpha);
+ ImGui::Checkbox("With Alpha Bar", &alpha_bar);
+ ImGui::Checkbox("With Side Preview", &side_preview);
+ if (side_preview)
+ {
+ ImGui::SameLine();
+ ImGui::Checkbox("With Ref Color", &ref_color);
+ if (ref_color)
+ {
+ ImGui::SameLine();
+ ImGui::ColorEdit4("##RefColor", &ref_color_v.x, ImGuiColorEditFlags_NoInputs | misc_flags);
+ }
+ }
+ ImGui::Combo("Inputs Mode", &inputs_mode, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0");
+ ImGui::Combo("Picker Mode", &picker_mode, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0");
+ ImGui::SameLine(); ShowHelpMarker("User can right-click the picker to change mode.");
+ ImGuiColorEditFlags flags = misc_flags;
+ if (!alpha) flags |= ImGuiColorEditFlags_NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4()
+ if (alpha_bar) flags |= ImGuiColorEditFlags_AlphaBar;
+ if (!side_preview) flags |= ImGuiColorEditFlags_NoSidePreview;
+ if (picker_mode == 1) flags |= ImGuiColorEditFlags_PickerHueBar;
+ if (picker_mode == 2) flags |= ImGuiColorEditFlags_PickerHueWheel;
+ if (inputs_mode == 1) flags |= ImGuiColorEditFlags_NoInputs;
+ if (inputs_mode == 2) flags |= ImGuiColorEditFlags_RGB;
+ if (inputs_mode == 3) flags |= ImGuiColorEditFlags_HSV;
+ if (inputs_mode == 4) flags |= ImGuiColorEditFlags_HEX;
+ ImGui::ColorPicker4("MyColor##4", (float*)&color, flags, ref_color ? &ref_color_v.x : NULL);
+
+ ImGui::Text("Programmatically set defaults/options:");
+ ImGui::SameLine(); ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible.");
+ if (ImGui::Button("Uint8 + HSV"))
+ ImGui::SetColorEditOptions(ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_HSV);
+ ImGui::SameLine();
+ if (ImGui::Button("Float + HDR"))
+ ImGui::SetColorEditOptions(ImGuiColorEditFlags_Float | ImGuiColorEditFlags_RGB);
- //static int listbox_item_current2 = 2;
- //ImGui::PushItemWidth(-1);
- //ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
- //ImGui::PopItemWidth();
+ ImGui::TreePop();
+ }
if (ImGui::TreeNode("Range Widgets"))
{
- ImGui::Unindent();
-
static float begin = 10, end = 90;
static int begin_i = 100, end_i = 1000;
ImGui::DragFloatRange2("range", &begin, &end, 0.25f, 0.0f, 100.0f, "Min: %.1f %%", "Max: %.1f %%");
ImGui::DragIntRange2("range int (no bounds)", &begin_i, &end_i, 5, 0, 0, "Min: %.0f units", "Max: %.0f units");
-
- ImGui::Indent();
ImGui::TreePop();
}
if (ImGui::TreeNode("Multi-component Widgets"))
{
- ImGui::Unindent();
-
static float vec4f[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
static int vec4i[4] = { 1, 5, 100, 255 };
@@ -692,13 +904,11 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::DragInt4("drag int4", vec4i, 1, 0, 255);
ImGui::SliderInt4("slider int4", vec4i, 0, 255);
- ImGui::Indent();
ImGui::TreePop();
}
if (ImGui::TreeNode("Vertical Sliders"))
{
- ImGui::Unindent();
const float spacing = 4;
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing));
@@ -712,10 +922,10 @@ void ImGui::ShowTestWindow(bool* p_open)
{
if (i > 0) ImGui::SameLine();
ImGui::PushID(i);
- ImGui::PushStyleColor(ImGuiCol_FrameBg, ImColor::HSV(i/7.0f, 0.5f, 0.5f));
- ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImColor::HSV(i/7.0f, 0.6f, 0.5f));
- ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImColor::HSV(i/7.0f, 0.7f, 0.5f));
- ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImColor::HSV(i/7.0f, 0.9f, 0.9f));
+ ImGui::PushStyleColor(ImGuiCol_FrameBg, (ImVec4)ImColor::HSV(i/7.0f, 0.5f, 0.5f));
+ ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.5f));
+ ImGui::PushStyleColor(ImGuiCol_FrameBgActive, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.5f));
+ ImGui::PushStyleColor(ImGuiCol_SliderGrab, (ImVec4)ImColor::HSV(i/7.0f, 0.9f, 0.9f));
ImGui::VSliderFloat("##v", ImVec2(18,160), &values[i], 0.0f, 1.0f, "");
if (ImGui::IsItemActive() || ImGui::IsItemHovered())
ImGui::SetTooltip("%.3f", values[i]);
@@ -758,75 +968,10 @@ void ImGui::ShowTestWindow(bool* p_open)
}
ImGui::PopID();
ImGui::PopStyleVar();
-
- ImGui::Indent();
ImGui::TreePop();
}
}
- if (ImGui::CollapsingHeader("Graphs widgets"))
- {
- static bool animate = true;
- ImGui::Checkbox("Animate", &animate);
-
- static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
- ImGui::PlotLines("Frame Times", arr, IM_ARRAYSIZE(arr));
-
- // Create a dummy array of contiguous float values to plot
- // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter.
- static float values[90] = { 0 };
- static int values_offset = 0;
- if (animate)
- {
- static float refresh_time = ImGui::GetTime(); // Create dummy data at fixed 60 hz rate for the demo
- for (; ImGui::GetTime() > refresh_time + 1.0f/60.0f; refresh_time += 1.0f/60.0f)
- {
- static float phase = 0.0f;
- values[values_offset] = cosf(phase);
- values_offset = (values_offset+1) % IM_ARRAYSIZE(values);
- phase += 0.10f*values_offset;
- }
- }
- ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, "avg 0.0", -1.0f, 1.0f, ImVec2(0,80));
- ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0,80));
-
- // Use functions to generate output
- // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count.
- struct Funcs
- {
- static float Sin(void*, int i) { return sinf(i * 0.1f); }
- static float Saw(void*, int i) { return (i & 1) ? 1.0f : 0.0f; }
- };
- static int func_type = 0, display_count = 70;
- ImGui::Separator();
- ImGui::PushItemWidth(100); ImGui::Combo("func", &func_type, "Sin\0Saw\0"); ImGui::PopItemWidth();
- ImGui::SameLine();
- ImGui::SliderInt("Sample count", &display_count, 1, 400);
- float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw;
- ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
- ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
- ImGui::Separator();
-
- // Animate a simple progress bar
- static float progress = 0.0f, progress_dir = 1.0f;
- if (animate)
- {
- progress += progress_dir * 0.4f * ImGui::GetIO().DeltaTime;
- if (progress >= +1.1f) { progress = +1.1f; progress_dir *= -1.0f; }
- if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; }
- }
-
- // Typically we would use ImVec2(-1.0f,0.0f) to use all available width, or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth.
- ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f));
- ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
- ImGui::Text("Progress Bar");
-
- float progress_saturated = (progress < 0.0f) ? 0.0f : (progress > 1.0f) ? 1.0f : progress;
- char buf[32];
- sprintf(buf, "%d/%d", (int)(progress_saturated*1753), 1753);
- ImGui::ProgressBar(progress, ImVec2(0.f,0.f), buf);
- }
-
if (ImGui::CollapsingHeader("Layout"))
{
if (ImGui::TreeNode("Child regions"))
@@ -851,7 +996,7 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::SameLine();
- ImGui::PushStyleVar(ImGuiStyleVar_ChildWindowRounding, 5.0f);
+ ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 5.0f);
ImGui::BeginChild("Sub2", ImVec2(0,300), true);
ImGui::Text("With border");
ImGui::Columns(2);
@@ -918,7 +1063,7 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::TextColored(ImVec4(1,1,0,1), "Sailor");
// Button
- ImGui::AlignFirstTextHeightToWidgets();
+ ImGui::AlignTextToFramePadding();
ImGui::Text("Normal buttons"); ImGui::SameLine();
ImGui::Button("Banana"); ImGui::SameLine();
ImGui::Button("Apple"); ImGui::SameLine();
@@ -991,11 +1136,11 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::Button("CCC");
ImGui::Button("DDD");
ImGui::EndGroup();
- if (ImGui::IsItemHovered())
- ImGui::SetTooltip("Group hovered");
ImGui::SameLine();
ImGui::Button("EEE");
ImGui::EndGroup();
+ if (ImGui::IsItemHovered())
+ ImGui::SetTooltip("First group hovered");
}
// Capture the group size and create widgets using the same size
ImVec2 size = ImGui::GetItemRectSize();
@@ -1044,11 +1189,12 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::Text("TEST"); ImGui::SameLine();
ImGui::SmallButton("TEST##2");
- ImGui::AlignFirstTextHeightToWidgets(); // If your line starts with text, call this to align it to upcoming widgets.
+ ImGui::AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets.
ImGui::Text("Text aligned to Widget"); ImGui::SameLine();
ImGui::Button("Widget##1"); ImGui::SameLine();
ImGui::Text("Widget"); ImGui::SameLine();
- ImGui::SmallButton("Widget##2");
+ ImGui::SmallButton("Widget##2"); ImGui::SameLine();
+ ImGui::Button("Widget##3");
// Tree
const float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
@@ -1056,7 +1202,7 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::SameLine(0.0f, spacing);
if (ImGui::TreeNode("Node##1")) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data
- ImGui::AlignFirstTextHeightToWidgets(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit).
+ ImGui::AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit).
bool node_open = ImGui::TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content.
ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##2");
if (node_open) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data
@@ -1066,7 +1212,7 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::SameLine(0.0f, spacing);
ImGui::BulletText("Bullet text");
- ImGui::AlignFirstTextHeightToWidgets();
+ ImGui::AlignTextToFramePadding();
ImGui::BulletText("Node");
ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##4");
@@ -1080,9 +1226,9 @@ void ImGui::ShowTestWindow(bool* p_open)
static int track_line = 50, scroll_to_px = 200;
ImGui::Checkbox("Track", &track);
ImGui::PushItemWidth(100);
- ImGui::SameLine(130); track |= ImGui::DragInt("##line", &track_line, 0.25f, 0, 99, "Line %.0f");
- bool scroll_to = ImGui::Button("Scroll To");
- ImGui::SameLine(130); scroll_to |= ImGui::DragInt("##pos_y", &scroll_to_px, 1.00f, 0, 9999, "y = %.0f px");
+ ImGui::SameLine(130); track |= ImGui::DragInt("##line", &track_line, 0.25f, 0, 99, "Line = %.0f");
+ bool scroll_to = ImGui::Button("Scroll To Pos");
+ ImGui::SameLine(130); scroll_to |= ImGui::DragInt("##pos_y", &scroll_to_px, 1.00f, 0, 9999, "Y = %.0f px");
ImGui::PopItemWidth();
if (scroll_to) track = false;
@@ -1106,7 +1252,9 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::Text("Line %d", line);
}
}
+ float scroll_y = ImGui::GetScrollY(), scroll_max_y = ImGui::GetScrollMaxY();
ImGui::EndChild();
+ ImGui::Text("%.0f/%0.f", scroll_y, scroll_max_y);
ImGui::EndGroup();
}
ImGui::TreePop();
@@ -1133,20 +1281,22 @@ void ImGui::ShowTestWindow(bool* p_open)
char num_buf[16];
const char* label = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : (sprintf(num_buf, "%d", n), num_buf);
float hue = n*0.05f;
- ImGui::PushStyleColor(ImGuiCol_Button, ImColor::HSV(hue, 0.6f, 0.6f));
- ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImColor::HSV(hue, 0.7f, 0.7f));
- ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImColor::HSV(hue, 0.8f, 0.8f));
+ ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(hue, 0.6f, 0.6f));
+ ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(hue, 0.7f, 0.7f));
+ ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(hue, 0.8f, 0.8f));
ImGui::Button(label, ImVec2(40.0f + sinf((float)(line + n)) * 20.0f, 0.0f));
ImGui::PopStyleColor(3);
ImGui::PopID();
}
}
+ float scroll_x = ImGui::GetScrollX(), scroll_max_x = ImGui::GetScrollMaxX();
ImGui::EndChild();
ImGui::PopStyleVar(2);
float scroll_x_delta = 0.0f;
- ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f;
- ImGui::SameLine(); ImGui::Text("Scroll from code"); ImGui::SameLine();
- ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f;
+ ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; ImGui::SameLine();
+ ImGui::Text("Scroll from code"); ImGui::SameLine();
+ ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; ImGui::SameLine();
+ ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x);
if (scroll_x_delta != 0.0f)
{
ImGui::BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window)
@@ -1187,7 +1337,7 @@ void ImGui::ShowTestWindow(bool* p_open)
if (ImGui::Button("Select.."))
ImGui::OpenPopup("select");
ImGui::SameLine();
- ImGui::Text(selected_fish == -1 ? "<None>" : names[selected_fish]);
+ ImGui::TextUnformatted(selected_fish == -1 ? "<None>" : names[selected_fish]);
if (ImGui::BeginPopup("select"))
{
ImGui::Text("Aquarium");
@@ -1240,42 +1390,35 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::EndPopup();
}
- ImGui::Spacing();
- ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!");
- ImGui::Separator();
- // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above.
- // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here
- // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus.
- ImGui::PushID("foo");
- ImGui::MenuItem("Menu item", "CTRL+M");
- if (ImGui::BeginMenu("Menu inside a regular window"))
- {
- ShowExampleMenuFile();
- ImGui::EndMenu();
- }
- ImGui::PopID();
- ImGui::Separator();
-
ImGui::TreePop();
}
if (ImGui::TreeNode("Context menus"))
{
+ // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing:
+ // if (IsItemHovered() && IsMouseClicked(0))
+ // OpenPopup(id);
+ // return BeginPopup(id);
+ // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation.
static float value = 0.5f;
ImGui::Text("Value = %.3f (<-- right-click here)", value);
if (ImGui::BeginPopupContextItem("item context menu"))
{
if (ImGui::Selectable("Set to zero")) value = 0.0f;
if (ImGui::Selectable("Set to PI")) value = 3.1415f;
+ ImGui::PushItemWidth(-1);
+ ImGui::DragFloat("##Value", &value, 0.1f, 0.0f, 0.0f);
+ ImGui::PopItemWidth();
ImGui::EndPopup();
}
- static ImVec4 color = ImColor(0.8f, 0.5f, 1.0f, 1.0f);
- ImGui::ColorButton(color);
- if (ImGui::BeginPopupContextItem("color context menu"))
+ static char name[32] = "Label1";
+ char buf[64]; sprintf(buf, "Button: %s###Button", name); // ### operator override ID ignoring the preceding label
+ ImGui::Button(buf);
+ if (ImGui::BeginPopupContextItem()) // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem().
{
- ImGui::Text("Edit color");
- ImGui::ColorEdit3("##edit", (float*)&color);
+ ImGui::Text("Edit name:");
+ ImGui::InputText("##edit", name, IM_ARRAYSIZE(name));
if (ImGui::Button("Close"))
ImGui::CloseCurrentPopup();
ImGui::EndPopup();
@@ -1293,7 +1436,7 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::OpenPopup("Delete?");
if (ImGui::BeginPopupModal("Delete?", NULL, ImGuiWindowFlags_AlwaysAutoResize))
{
- ImGui::Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n");
+ ImGui::Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n");
ImGui::Separator();
//static int dummy_i = 0;
@@ -1314,9 +1457,13 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::OpenPopup("Stacked 1");
if (ImGui::BeginPopupModal("Stacked 1"))
{
- ImGui::Text("Hello from Stacked The First");
+ ImGui::Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol_ModalWindowDarkening] for darkening.");
+ static int item = 1;
+ ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
+ static float color[4] = { 0.4f,0.7f,0.0f,0.5f };
+ ImGui::ColorEdit4("color", color); // This is to test behavior of stacked regular popups over a modal
- if (ImGui::Button("Another one.."))
+ if (ImGui::Button("Add another modal.."))
ImGui::OpenPopup("Stacked 2");
if (ImGui::BeginPopupModal("Stacked 2"))
{
@@ -1333,10 +1480,31 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::TreePop();
}
+
+ if (ImGui::TreeNode("Menus inside a regular window"))
+ {
+ ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!");
+ ImGui::Separator();
+ // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above.
+ // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here
+ // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus.
+ ImGui::PushID("foo");
+ ImGui::MenuItem("Menu item", "CTRL+M");
+ if (ImGui::BeginMenu("Menu inside a regular window"))
+ {
+ ShowExampleMenuFile();
+ ImGui::EndMenu();
+ }
+ ImGui::PopID();
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
}
if (ImGui::CollapsingHeader("Columns"))
{
+ ImGui::PushID("Columns");
+
// Basic columns
if (ImGui::TreeNode("Basic"))
{
@@ -1360,7 +1528,7 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::Text("ID"); ImGui::NextColumn();
ImGui::Text("Name"); ImGui::NextColumn();
ImGui::Text("Path"); ImGui::NextColumn();
- ImGui::Text("Flags"); ImGui::NextColumn();
+ ImGui::Text("Hovered"); ImGui::NextColumn();
ImGui::Separator();
const char* names[3] = { "One", "Two", "Three" };
const char* paths[3] = { "/path/one", "/path/two", "/path/three" };
@@ -1371,42 +1539,17 @@ void ImGui::ShowTestWindow(bool* p_open)
sprintf(label, "%04d", i);
if (ImGui::Selectable(label, selected == i, ImGuiSelectableFlags_SpanAllColumns))
selected = i;
+ bool hovered = ImGui::IsItemHovered();
ImGui::NextColumn();
ImGui::Text(names[i]); ImGui::NextColumn();
ImGui::Text(paths[i]); ImGui::NextColumn();
- ImGui::Text("...."); ImGui::NextColumn();
+ ImGui::Text("%d", hovered); ImGui::NextColumn();
}
ImGui::Columns(1);
ImGui::Separator();
ImGui::TreePop();
}
- // Scrolling columns
- /*
- if (ImGui::TreeNode("Scrolling"))
- {
- ImGui::BeginChild("##header", ImVec2(0, ImGui::GetTextLineHeightWithSpacing()+ImGui::GetStyle().ItemSpacing.y));
- ImGui::Columns(3);
- ImGui::Text("ID"); ImGui::NextColumn();
- ImGui::Text("Name"); ImGui::NextColumn();
- ImGui::Text("Path"); ImGui::NextColumn();
- ImGui::Columns(1);
- ImGui::Separator();
- ImGui::EndChild();
- ImGui::BeginChild("##scrollingregion", ImVec2(0, 60));
- ImGui::Columns(3);
- for (int i = 0; i < 10; i++)
- {
- ImGui::Text("%04d", i); ImGui::NextColumn();
- ImGui::Text("Foobar"); ImGui::NextColumn();
- ImGui::Text("/path/foobar/%04d/", i); ImGui::NextColumn();
- }
- ImGui::Columns(1);
- ImGui::EndChild();
- ImGui::TreePop();
- }
- */
-
// Create multiple items in a same cell before switching to next column
if (ImGui::TreeNode("Mixed items"))
{
@@ -1424,7 +1567,7 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::Text("An extra line here.");
ImGui::NextColumn();
- ImGui::Text("Sailor");
+ ImGui::Text("Sailor");
ImGui::Button("Corniflower");
static float bar = 1.0f;
ImGui::InputFloat("blue", &bar, 0.05f, 0, 3);
@@ -1455,25 +1598,76 @@ void ImGui::ShowTestWindow(bool* p_open)
if (ImGui::TreeNode("Borders"))
{
+ // NB: Future columns API should allow automatic horizontal borders.
static bool h_borders = true;
static bool v_borders = true;
ImGui::Checkbox("horizontal", &h_borders);
ImGui::SameLine();
ImGui::Checkbox("vertical", &v_borders);
ImGui::Columns(4, NULL, v_borders);
- if (h_borders) ImGui::Separator();
- for (int i = 0; i < 8; i++)
+ for (int i = 0; i < 4*3; i++)
{
+ if (h_borders && ImGui::GetColumnIndex() == 0)
+ ImGui::Separator();
ImGui::Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i);
+ ImGui::Text("Width %.2f\nOffset %.2f", ImGui::GetColumnWidth(), ImGui::GetColumnOffset());
ImGui::NextColumn();
}
ImGui::Columns(1);
- if (h_borders) ImGui::Separator();
+ if (h_borders)
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+
+ // Scrolling columns
+ /*
+ if (ImGui::TreeNode("Vertical Scrolling"))
+ {
+ ImGui::BeginChild("##header", ImVec2(0, ImGui::GetTextLineHeightWithSpacing()+ImGui::GetStyle().ItemSpacing.y));
+ ImGui::Columns(3);
+ ImGui::Text("ID"); ImGui::NextColumn();
+ ImGui::Text("Name"); ImGui::NextColumn();
+ ImGui::Text("Path"); ImGui::NextColumn();
+ ImGui::Columns(1);
+ ImGui::Separator();
+ ImGui::EndChild();
+ ImGui::BeginChild("##scrollingregion", ImVec2(0, 60));
+ ImGui::Columns(3);
+ for (int i = 0; i < 10; i++)
+ {
+ ImGui::Text("%04d", i); ImGui::NextColumn();
+ ImGui::Text("Foobar"); ImGui::NextColumn();
+ ImGui::Text("/path/foobar/%04d/", i); ImGui::NextColumn();
+ }
+ ImGui::Columns(1);
+ ImGui::EndChild();
+ ImGui::TreePop();
+ }
+ */
+
+ if (ImGui::TreeNode("Horizontal Scrolling"))
+ {
+ ImGui::SetNextWindowContentWidth(1500);
+ ImGui::BeginChild("##ScrollingRegion", ImVec2(0, ImGui::GetFontSize() * 20), false, ImGuiWindowFlags_HorizontalScrollbar);
+ ImGui::Columns(10);
+ int ITEMS_COUNT = 2000;
+ ImGuiListClipper clipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list
+ while (clipper.Step())
+ {
+ for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+ for (int j = 0; j < 10; j++)
+ {
+ ImGui::Text("Line %d Column %d...", i, j);
+ ImGui::NextColumn();
+ }
+ }
+ ImGui::Columns(1);
+ ImGui::EndChild();
ImGui::TreePop();
}
bool node_open = ImGui::TreeNode("Tree within single cell");
- ImGui::SameLine(); ShowHelpMarker("NB: Tree node must be poped before ending the cell.\nThere's no storage of state per-cell.");
+ ImGui::SameLine(); ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell.");
if (node_open)
{
ImGui::Columns(2, "tree items");
@@ -1484,6 +1678,7 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::Separator();
ImGui::TreePop();
}
+ ImGui::PopID();
}
if (ImGui::CollapsingHeader("Filtering"))
@@ -1501,8 +1696,43 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::BulletText("%s", lines[i]);
}
- if (ImGui::CollapsingHeader("Keyboard, Mouse & Focus"))
+ if (ImGui::CollapsingHeader("Inputs & Focus"))
{
+ ImGuiIO& io = ImGui::GetIO();
+ ImGui::Checkbox("io.MouseDrawCursor", &io.MouseDrawCursor);
+ ImGui::SameLine(); ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via regular GPU rendering will feel more laggy than hardware cursor, but will be more in sync with your other visuals.");
+
+ ImGui::Text("WantCaptureMouse: %d", io.WantCaptureMouse);
+ ImGui::Text("WantCaptureKeyboard: %d", io.WantCaptureKeyboard);
+ ImGui::Text("WantTextInput: %d", io.WantTextInput);
+ ImGui::Text("WantMoveMouse: %d", io.WantMoveMouse);
+
+ if (ImGui::TreeNode("Keyboard & Mouse State"))
+ {
+ ImGui::Text("Mouse pos: (%g, %g)", io.MousePos.x, io.MousePos.y);
+ ImGui::Text("Mouse down:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); }
+ ImGui::Text("Mouse clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
+ ImGui::Text("Mouse dbl-clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseDoubleClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
+ ImGui::Text("Mouse released:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseReleased(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
+ ImGui::Text("Mouse wheel: %.1f", io.MouseWheel);
+
+ ImGui::Text("Keys down:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("%d (%.02f secs)", i, io.KeysDownDuration[i]); }
+ ImGui::Text("Keys pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i)) { ImGui::SameLine(); ImGui::Text("%d", i); }
+ ImGui::Text("Keys release:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i)) { ImGui::SameLine(); ImGui::Text("%d", i); }
+ ImGui::Text("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : "");
+
+
+ ImGui::Button("Hovering me sets the\nkeyboard capture flag");
+ if (ImGui::IsItemHovered())
+ ImGui::CaptureKeyboardFromApp(true);
+ ImGui::SameLine();
+ ImGui::Button("Holding me clears the\nthe keyboard capture flag");
+ if (ImGui::IsItemActive())
+ ImGui::CaptureKeyboardFromApp(false);
+
+ ImGui::TreePop();
+ }
+
if (ImGui::TreeNode("Tabbing"))
{
ImGui::Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields.");
@@ -1547,6 +1777,36 @@ void ImGui::ShowTestWindow(bool* p_open)
ImGui::TreePop();
}
+ if (ImGui::TreeNode("Hovering"))
+ {
+ // Testing IsWindowHovered() function with its various flags (note that the flags can be combined)
+ ImGui::BulletText(
+ "IsWindowHovered() = %d\n"
+ "IsWindowHovered(_AllowWhenBlockedByPopup) = %d\n"
+ "IsWindowHovered(_AllowWhenBlockedByActiveItem) = %d\n"
+ "IsWindowHovered(_FlattenChilds) = %d\n",
+ ImGui::IsWindowHovered(),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_FlattenChilds));
+
+ // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code)
+ ImGui::Button("ITEM");
+ ImGui::BulletText(
+ "IsItemHovered() = %d\n"
+ "IsItemHovered(_AllowWhenBlockedByPopup) = %d\n"
+ "IsItemHovered(_AllowWhenBlockedByActiveItem) = %d\n"
+ "IsItemHovered(_AllowWhenOverlapped) = %d\n"
+ "IsItemhovered(_RectOnly) = %d\n",
+ ImGui::IsItemHovered(),
+ ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
+ ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
+ ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenOverlapped),
+ ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly));
+
+ ImGui::TreePop();
+ }
+
if (ImGui::TreeNode("Dragging"))
{
ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget.");
@@ -1556,52 +1816,20 @@ void ImGui::ShowTestWindow(bool* p_open)
// Draw a line between the button and the mouse cursor
ImDrawList* draw_list = ImGui::GetWindowDrawList();
draw_list->PushClipRectFullScreen();
- draw_list->AddLine(ImGui::CalcItemRectClosestPoint(ImGui::GetIO().MousePos, true, -2.0f), ImGui::GetIO().MousePos, ImColor(ImGui::GetStyle().Colors[ImGuiCol_Button]), 4.0f);
+ draw_list->AddLine(ImGui::CalcItemRectClosestPoint(io.MousePos, true, -2.0f), io.MousePos, ImColor(ImGui::GetStyle().Colors[ImGuiCol_Button]), 4.0f);
draw_list->PopClipRect();
ImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f);
ImVec2 value_with_lock_threshold = ImGui::GetMouseDragDelta(0);
- ImVec2 mouse_delta = ImGui::GetIO().MouseDelta;
+ ImVec2 mouse_delta = io.MouseDelta;
ImGui::SameLine(); ImGui::Text("Raw (%.1f, %.1f), WithLockThresold (%.1f, %.1f), MouseDelta (%.1f, %.1f)", value_raw.x, value_raw.y, value_with_lock_threshold.x, value_with_lock_threshold.y, mouse_delta.x, mouse_delta.y);
}
ImGui::TreePop();
}
- if (ImGui::TreeNode("Keyboard & Mouse State"))
- {
- ImGuiIO& io = ImGui::GetIO();
-
- ImGui::Text("MousePos: (%g, %g)", io.MousePos.x, io.MousePos.y);
- ImGui::Text("Mouse down:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); }
- ImGui::Text("Mouse clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
- ImGui::Text("Mouse dbl-clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseDoubleClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
- ImGui::Text("Mouse released:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseReleased(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
- ImGui::Text("MouseWheel: %.1f", io.MouseWheel);
-
- ImGui::Text("Keys down:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("%d (%.02f secs)", i, io.KeysDownDuration[i]); }
- ImGui::Text("Keys pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i)) { ImGui::SameLine(); ImGui::Text("%d", i); }
- ImGui::Text("Keys release:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i)) { ImGui::SameLine(); ImGui::Text("%d", i); }
- ImGui::Text("KeyMods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : "");
-
- ImGui::Text("WantCaptureMouse: %s", io.WantCaptureMouse ? "true" : "false");
- ImGui::Text("WantCaptureKeyboard: %s", io.WantCaptureKeyboard ? "true" : "false");
- ImGui::Text("WantTextInput: %s", io.WantTextInput ? "true" : "false");
-
- ImGui::Button("Hovering me sets the\nkeyboard capture flag");
- if (ImGui::IsItemHovered())
- ImGui::CaptureKeyboardFromApp(true);
- ImGui::SameLine();
- ImGui::Button("Holding me clears the\nthe keyboard capture flag");
- if (ImGui::IsItemActive())
- ImGui::CaptureKeyboardFromApp(false);
-
- ImGui::TreePop();
- }
-
if (ImGui::TreeNode("Mouse cursors"))
{
- ImGui::TextWrapped("Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. You can also set io.MouseDrawCursor to ask ImGui to render the cursor for you in software.");
- ImGui::Checkbox("io.MouseDrawCursor", &ImGui::GetIO().MouseDrawCursor);
ImGui::Text("Hover to see mouse cursors:");
+ ImGui::SameLine(); ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it.");
for (int i = 0; i < ImGuiMouseCursor_Count_; i++)
{
char label[32];
@@ -1619,25 +1847,54 @@ void ImGui::ShowTestWindow(bool* p_open)
void ImGui::ShowStyleEditor(ImGuiStyle* ref)
{
+ // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference)
ImGuiStyle& style = ImGui::GetStyle();
+ static ImGuiStyle ref_saved_style;
+
+ // Default to using internal storage as reference
+ static bool init = true;
+ if (init && ref == NULL)
+ ref_saved_style = style;
+ init = false;
+ if (ref == NULL)
+ ref = &ref_saved_style;
- // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to the default style)
- const ImGuiStyle default_style; // Default style
- if (ImGui::Button("Revert Style"))
- style = ref ? *ref : default_style;
+ ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.50f);
- if (ref)
+ // Default Styles Selector
+ static int style_idx = 0;
+ if (ImGui::Combo("Colors##Selector", &style_idx, "Classic\0Dark\0Light\0"))
{
- ImGui::SameLine();
- if (ImGui::Button("Save Style"))
- *ref = style;
+ switch (style_idx)
+ {
+ case 0: ImGui::StyleColorsClassic(); break;
+ case 1: ImGui::StyleColorsDark(); break;
+ case 2: ImGui::StyleColorsLight(); break;
+ }
+ ref_saved_style = style;
}
- ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.55f);
+ // Simplified Settings
+ if (ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f"))
+ style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding
+ { bool window_border = (style.WindowBorderSize > 0.0f); if (ImGui::Checkbox("WindowBorder", &window_border)) style.WindowBorderSize = window_border ? 1.0f : 0.0f; }
+ ImGui::SameLine();
+ { bool frame_border = (style.FrameBorderSize > 0.0f); if (ImGui::Checkbox("FrameBorder", &frame_border)) style.FrameBorderSize = frame_border ? 1.0f : 0.0f; }
+ ImGui::SameLine();
+ { bool popup_border = (style.PopupBorderSize > 0.0f); if (ImGui::Checkbox("PopupBorder", &popup_border)) style.PopupBorderSize = popup_border ? 1.0f : 0.0f; }
+
+ // Save/Revert button
+ if (ImGui::Button("Save Ref"))
+ *ref = ref_saved_style = style;
+ ImGui::SameLine();
+ if (ImGui::Button("Revert Ref"))
+ style = *ref;
+ ImGui::SameLine();
+ ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere.");
if (ImGui::TreeNode("Rendering"))
{
- ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines);
+ ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines); ImGui::SameLine(); ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well.");
ImGui::Checkbox("Anti-aliased shapes", &style.AntiAliasedShapes);
ImGui::PushItemWidth(100);
ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, FLT_MAX, NULL, 2.0f);
@@ -1650,18 +1907,25 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
if (ImGui::TreeNode("Settings"))
{
ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f");
- ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 16.0f, "%.0f");
- ImGui::SliderFloat("ChildWindowRounding", &style.ChildWindowRounding, 0.0f, 16.0f, "%.0f");
+ ImGui::SliderFloat("PopupRounding", &style.PopupRounding, 0.0f, 16.0f, "%.0f");
ImGui::SliderFloat2("FramePadding", (float*)&style.FramePadding, 0.0f, 20.0f, "%.0f");
- ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 16.0f, "%.0f");
ImGui::SliderFloat2("ItemSpacing", (float*)&style.ItemSpacing, 0.0f, 20.0f, "%.0f");
ImGui::SliderFloat2("ItemInnerSpacing", (float*)&style.ItemInnerSpacing, 0.0f, 20.0f, "%.0f");
ImGui::SliderFloat2("TouchExtraPadding", (float*)&style.TouchExtraPadding, 0.0f, 10.0f, "%.0f");
ImGui::SliderFloat("IndentSpacing", &style.IndentSpacing, 0.0f, 30.0f, "%.0f");
ImGui::SliderFloat("ScrollbarSize", &style.ScrollbarSize, 1.0f, 20.0f, "%.0f");
- ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 16.0f, "%.0f");
ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f");
- ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 16.0f, "%.0f");
+ ImGui::Text("BorderSize");
+ ImGui::SliderFloat("WindowBorderSize", &style.WindowBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("ChildBorderSize", &style.ChildBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::Text("Rounding");
+ ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 14.0f, "%.0f");
+ ImGui::SliderFloat("ChildRounding", &style.ChildRounding, 0.0f, 16.0f, "%.0f");
+ ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 12.0f, "%.0f");
ImGui::Text("Alignment");
ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f");
ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content.");
@@ -1671,52 +1935,54 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
if (ImGui::TreeNode("Colors"))
{
static int output_dest = 0;
- static bool output_only_modified = false;
- if (ImGui::Button("Copy Colors"))
+ static bool output_only_modified = true;
+ if (ImGui::Button("Export Unsaved"))
{
if (output_dest == 0)
ImGui::LogToClipboard();
else
ImGui::LogToTTY();
- ImGui::LogText("ImGuiStyle& style = ImGui::GetStyle();" IM_NEWLINE);
+ ImGui::LogText("ImVec4* colors = ImGui::GetStyle().Colors;" IM_NEWLINE);
for (int i = 0; i < ImGuiCol_COUNT; i++)
{
const ImVec4& col = style.Colors[i];
- const char* name = ImGui::GetStyleColName(i);
- if (!output_only_modified || memcmp(&col, (ref ? &ref->Colors[i] : &default_style.Colors[i]), sizeof(ImVec4)) != 0)
- ImGui::LogText("style.Colors[ImGuiCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);" IM_NEWLINE, name, 22 - (int)strlen(name), "", col.x, col.y, col.z, col.w);
+ const char* name = ImGui::GetStyleColorName(i);
+ if (!output_only_modified || memcmp(&col, &ref->Colors[i], sizeof(ImVec4)) != 0)
+ ImGui::LogText("colors[ImGuiCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);" IM_NEWLINE, name, 23-(int)strlen(name), "", col.x, col.y, col.z, col.w);
}
ImGui::LogFinish();
}
ImGui::SameLine(); ImGui::PushItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0"); ImGui::PopItemWidth();
- ImGui::SameLine(); ImGui::Checkbox("Only Modified Fields", &output_only_modified);
+ ImGui::SameLine(); ImGui::Checkbox("Only Modified Colors", &output_only_modified);
- static ImGuiColorEditMode edit_mode = ImGuiColorEditMode_RGB;
- ImGui::RadioButton("RGB", &edit_mode, ImGuiColorEditMode_RGB);
- ImGui::SameLine();
- ImGui::RadioButton("HSV", &edit_mode, ImGuiColorEditMode_HSV);
- ImGui::SameLine();
- ImGui::RadioButton("HEX", &edit_mode, ImGuiColorEditMode_HEX);
- //ImGui::Text("Tip: Click on colored square to change edit mode.");
+ ImGui::Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu.");
static ImGuiTextFilter filter;
filter.Draw("Filter colors", 200);
- ImGui::BeginChild("#colors", ImVec2(0, 300), true, ImGuiWindowFlags_AlwaysVerticalScrollbar);
+ static ImGuiColorEditFlags alpha_flags = 0;
+ ImGui::RadioButton("Opaque", &alpha_flags, 0); ImGui::SameLine();
+ ImGui::RadioButton("Alpha", &alpha_flags, ImGuiColorEditFlags_AlphaPreview); ImGui::SameLine();
+ ImGui::RadioButton("Both", &alpha_flags, ImGuiColorEditFlags_AlphaPreviewHalf);
+
+ ImGui::BeginChild("#colors", ImVec2(0, 300), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar);
ImGui::PushItemWidth(-160);
- ImGui::ColorEditMode(edit_mode);
for (int i = 0; i < ImGuiCol_COUNT; i++)
{
- const char* name = ImGui::GetStyleColName(i);
+ const char* name = ImGui::GetStyleColorName(i);
if (!filter.PassFilter(name))
continue;
ImGui::PushID(i);
- ImGui::ColorEdit4(name, (float*)&style.Colors[i], true);
- if (memcmp(&style.Colors[i], (ref ? &ref->Colors[i] : &default_style.Colors[i]), sizeof(ImVec4)) != 0)
+ ImGui::ColorEdit4("##color", (float*)&style.Colors[i], ImGuiColorEditFlags_AlphaBar | alpha_flags);
+ if (memcmp(&style.Colors[i], &ref->Colors[i], sizeof(ImVec4)) != 0)
{
- ImGui::SameLine(); if (ImGui::Button("Revert")) style.Colors[i] = ref ? ref->Colors[i] : default_style.Colors[i];
- if (ref) { ImGui::SameLine(); if (ImGui::Button("Save")) ref->Colors[i] = style.Colors[i]; }
+ // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons.
+ // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient!
+ ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Save")) ref->Colors[i] = style.Colors[i];
+ ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Revert")) style.Colors[i] = ref->Colors[i];
}
+ ImGui::SameLine(0.0f, style.ItemInnerSpacing.x);
+ ImGui::TextUnformatted(name);
ImGui::PopID();
}
ImGui::PopItemWidth();
@@ -1725,9 +1991,10 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
ImGui::TreePop();
}
- if (ImGui::TreeNode("Fonts", "Fonts (%d)", ImGui::GetIO().Fonts->Fonts.Size))
+ bool fonts_opened = ImGui::TreeNode("Fonts", "Fonts (%d)", ImGui::GetIO().Fonts->Fonts.Size);
+ ImGui::SameLine(); ShowHelpMarker("Tip: Load fonts with io.Fonts->AddFontFromFileTTF()\nbefore calling io.Fonts->GetTex* functions.");
+ if (fonts_opened)
{
- ImGui::SameLine(); ShowHelpMarker("Tip: Load fonts with io.Fonts->AddFontFromFileTTF()\nbefore calling io.Fonts->GetTex* functions.");
ImFontAtlas* atlas = ImGui::GetIO().Fonts;
if (ImGui::TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight))
{
@@ -1738,27 +2005,28 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
for (int i = 0; i < atlas->Fonts.Size; i++)
{
ImFont* font = atlas->Fonts[i];
- ImGui::BulletText("Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size);
- ImGui::TreePush((void*)(intptr_t)i);
+ ImGui::PushID(font);
+ bool font_details_opened = ImGui::TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size);
ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) ImGui::GetIO().FontDefault = font;
- ImGui::PushFont(font);
- ImGui::Text("The quick brown fox jumps over the lazy dog");
- ImGui::PopFont();
- if (ImGui::TreeNode("Details"))
+ if (font_details_opened)
{
+ ImGui::PushFont(font);
+ ImGui::Text("The quick brown fox jumps over the lazy dog");
+ ImGui::PopFont();
ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font
ImGui::SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)");
ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent);
ImGui::Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar);
+ ImGui::Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface));
for (int config_i = 0; config_i < font->ConfigDataCount; config_i++)
{
ImFontConfig* cfg = &font->ConfigData[config_i];
- ImGui::BulletText("Input %d: \'%s\'\nOversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH);
+ ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH);
}
if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
{
// Display all glyphs of the fonts in separate pages of 256 characters
- const ImFont::Glyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return NULL on fallback, which isn't the default behavior.
+ const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return NULL on fallback, which isn't the default behavior.
font->FallbackGlyph = NULL;
for (int base = 0; base < 0x10000; base += 256)
{
@@ -1775,7 +2043,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
{
ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing));
ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y);
- const ImFont::Glyph* glyph = font->FindGlyph((ImWchar)(base+n));;
+ const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));;
draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50));
font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui::GetColorU32(ImGuiCol_Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string.
if (glyph && ImGui::IsMouseHoveringRect(cell_p1, cell_p2))
@@ -1783,7 +2051,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
ImGui::BeginTooltip();
ImGui::Text("Codepoint: U+%04X", base+n);
ImGui::Separator();
- ImGui::Text("XAdvance+1: %.1f", glyph->XAdvance);
+ ImGui::Text("AdvanceX: %.1f", glyph->AdvanceX);
ImGui::Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1);
ImGui::Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1);
ImGui::EndTooltip();
@@ -1798,7 +2066,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
}
ImGui::TreePop();
}
- ImGui::TreePop();
+ ImGui::PopID();
}
static float window_scale = 1.0f;
ImGui::DragFloat("this window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.1f"); // scale only this window
@@ -1871,15 +2139,24 @@ static void ShowExampleMenuFile()
ImGui::EndChild();
static float f = 0.5f;
static int n = 0;
+ static bool b = true;
ImGui::SliderFloat("Value", &f, 0.0f, 1.0f);
ImGui::InputFloat("Input", &f, 0.1f);
ImGui::Combo("Combo", &n, "Yes\0No\0Maybe\0\0");
+ ImGui::Checkbox("Check", &b);
ImGui::EndMenu();
}
if (ImGui::BeginMenu("Colors"))
{
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0,0));
for (int i = 0; i < ImGuiCol_COUNT; i++)
- ImGui::MenuItem(ImGui::GetStyleColName((ImGuiCol)i));
+ {
+ const char* name = ImGui::GetStyleColorName((ImGuiCol)i);
+ ImGui::ColorButton(name, ImGui::GetStyleColorVec4((ImGuiCol)i));
+ ImGui::SameLine();
+ ImGui::MenuItem(name);
+ }
+ ImGui::PopStyleVar();
ImGui::EndMenu();
}
if (ImGui::BeginMenu("Disabled", false)) // Disabled
@@ -1916,48 +2193,69 @@ static void ShowExampleAppConstrainedResize(bool* p_open)
static void Step(ImGuiSizeConstraintCallbackData* data) { float step = (float)(int)(intptr_t)data->UserData; data->DesiredSize = ImVec2((int)(data->DesiredSize.x / step + 0.5f) * step, (int)(data->DesiredSize.y / step + 0.5f) * step); }
};
+ static bool auto_resize = false;
static int type = 0;
+ static int display_lines = 10;
if (type == 0) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 0), ImVec2(-1, FLT_MAX)); // Vertical only
if (type == 1) ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1), ImVec2(FLT_MAX, -1)); // Horizontal only
if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100
- if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(300, 0), ImVec2(400, FLT_MAX)); // Width 300-400
- if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square
- if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step
+ if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1), ImVec2(500, -1)); // Width 400-500
+ if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400), ImVec2(-1, 500)); // Height 400-500
+ if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square
+ if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step
- if (ImGui::Begin("Example: Constrained Resize", p_open))
+ ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0;
+ if (ImGui::Begin("Example: Constrained Resize", p_open, flags))
{
const char* desc[] =
{
"Resize vertical only",
"Resize horizontal only",
"Width > 100, Height > 100",
- "Width 300-400",
+ "Width 400-500",
+ "Height 400-500",
"Custom: Always Square",
"Custom: Fixed Steps (100)",
};
- ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc));
- if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200,200)); } ImGui::SameLine();
- if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500,500)); } ImGui::SameLine();
- if (ImGui::Button("800x200")) ImGui::SetWindowSize(ImVec2(800,200));
- for (int i = 0; i < 10; i++)
- ImGui::Text("Hello, sailor! Making this line long enough for the example.");
+ if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200, 200)); } ImGui::SameLine();
+ if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500, 500)); } ImGui::SameLine();
+ if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800, 200)); }
+ ImGui::PushItemWidth(200);
+ ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc));
+ ImGui::DragInt("Lines", &display_lines, 0.2f, 1, 100);
+ ImGui::PopItemWidth();
+ ImGui::Checkbox("Auto-resize", &auto_resize);
+ for (int i = 0; i < display_lines; i++)
+ ImGui::Text("%*sHello, sailor! Making this line long enough for the example.", i * 4, "");
}
ImGui::End();
}
-// Demonstrate creating a simple static window with no decoration.
+// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use.
static void ShowExampleAppFixedOverlay(bool* p_open)
{
- ImGui::SetNextWindowPos(ImVec2(10,10));
- if (!ImGui::Begin("Example: Fixed Overlay", p_open, ImVec2(0,0), 0.3f, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoSavedSettings))
+ const float DISTANCE = 10.0f;
+ static int corner = 0;
+ ImVec2 window_pos = ImVec2((corner & 1) ? ImGui::GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? ImGui::GetIO().DisplaySize.y - DISTANCE : DISTANCE);
+ ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f);
+ ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
+ ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.0f, 0.0f, 0.0f, 0.3f)); // Transparent background
+ if (ImGui::Begin("Example: Fixed Overlay", p_open, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoSavedSettings))
{
+ ImGui::Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)");
+ ImGui::Separator();
+ ImGui::Text("Mouse Position: (%.1f,%.1f)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y);
+ if (ImGui::BeginPopupContextWindow())
+ {
+ if (ImGui::MenuItem("Top-left", NULL, corner == 0)) corner = 0;
+ if (ImGui::MenuItem("Top-right", NULL, corner == 1)) corner = 1;
+ if (ImGui::MenuItem("Bottom-left", NULL, corner == 2)) corner = 2;
+ if (ImGui::MenuItem("Bottom-right", NULL, corner == 3)) corner = 3;
+ ImGui::EndPopup();
+ }
ImGui::End();
- return;
}
- ImGui::Text("Simple overlay\non the top-left side of the screen.");
- ImGui::Separator();
- ImGui::Text("Mouse Position: (%.1f,%.1f)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y);
- ImGui::End();
+ ImGui::PopStyleColor();
}
// Demonstrate using "##" and "###" in identifiers to manipulate ID generation.
@@ -1968,12 +2266,12 @@ static void ShowExampleAppManipulatingWindowTitle(bool*)
// You can use the "##" and "###" markers to manipulate the display/ID.
// Using "##" to display same title but have unique identifier.
- ImGui::SetNextWindowPos(ImVec2(100,100), ImGuiSetCond_FirstUseEver);
+ ImGui::SetNextWindowPos(ImVec2(100,100), ImGuiCond_FirstUseEver);
ImGui::Begin("Same title as another window##1");
ImGui::Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique.");
ImGui::End();
- ImGui::SetNextWindowPos(ImVec2(100,200), ImGuiSetCond_FirstUseEver);
+ ImGui::SetNextWindowPos(ImVec2(100,200), ImGuiCond_FirstUseEver);
ImGui::Begin("Same title as another window##2");
ImGui::Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique.");
ImGui::End();
@@ -1981,7 +2279,7 @@ static void ShowExampleAppManipulatingWindowTitle(bool*)
// Using "###" to display a changing title but keep a static identifier "AnimatedTitle"
char buf[128];
sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime()/0.25f)&3], rand());
- ImGui::SetNextWindowPos(ImVec2(100,300), ImGuiSetCond_FirstUseEver);
+ ImGui::SetNextWindowPos(ImVec2(100,300), ImGuiCond_FirstUseEver);
ImGui::Begin(buf);
ImGui::Text("This window has a changing title.");
ImGui::End();
@@ -1990,7 +2288,7 @@ static void ShowExampleAppManipulatingWindowTitle(bool*)
// Demonstrate using the low-level ImDrawList to draw custom shapes.
static void ShowExampleAppCustomRendering(bool* p_open)
{
- ImGui::SetNextWindowSize(ImVec2(350,560), ImGuiSetCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(350,560), ImGuiCond_FirstUseEver);
if (!ImGui::Begin("Example: Custom rendering", p_open))
{
ImGui::End();
@@ -2017,8 +2315,9 @@ static void ShowExampleAppCustomRendering(bool* p_open)
{
float thickness = (n == 0) ? 1.0f : 4.0f;
draw_list->AddCircle(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 20, thickness); x += sz+spacing;
- draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 0.0f, ~0, thickness); x += sz+spacing;
- draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ~0, thickness); x += sz+spacing;
+ draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 0.0f, ImDrawCornerFlags_All, thickness); x += sz+spacing;
+ draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_All, thickness); x += sz+spacing;
+ draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotRight, thickness); x += sz+spacing;
draw_list->AddTriangle(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32, thickness); x += sz+spacing;
draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y ), col32, thickness); x += sz+spacing;
draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, thickness); x += sz+spacing;
@@ -2030,6 +2329,7 @@ static void ShowExampleAppCustomRendering(bool* p_open)
draw_list->AddCircleFilled(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 32); x += sz+spacing;
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32); x += sz+spacing;
draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f); x += sz+spacing;
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotRight); x += sz+spacing;
draw_list->AddTriangleFilled(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32); x += sz+spacing;
draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x+sz, y+sz), ImColor(0,0,0), ImColor(255,0,0), ImColor(255,255,0), ImColor(0,255,0));
ImGui::Dummy(ImVec2((sz+spacing)*8, (sz+spacing)*3));
@@ -2077,7 +2377,7 @@ static void ShowExampleAppCustomRendering(bool* p_open)
points.pop_back();
}
}
- draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y)); // clip lines within the canvas (if we resize it, etc.)
+ draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.)
for (int i = 0; i < points.Size - 1; i += 2)
draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i+1].x, canvas_pos.y + points[i+1].y), IM_COL32(255,255,0,255), 2.0f);
draw_list->PopClipRect();
@@ -2129,8 +2429,9 @@ struct ExampleAppConsole
ScrollToBottom = true;
}
- void AddLog(const char* fmt, ...) IM_PRINTFARGS(2)
+ void AddLog(const char* fmt, ...) IM_FMTARGS(2)
{
+ // FIXME-OPT
char buf[1024];
va_list args;
va_start(args, fmt);
@@ -2143,13 +2444,22 @@ struct ExampleAppConsole
void Draw(const char* title, bool* p_open)
{
- ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiSetCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver);
if (!ImGui::Begin(title, p_open))
{
ImGui::End();
return;
}
+ // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar.
+ // Here we create a context menu only available from the title bar.
+ if (ImGui::BeginPopupContextItem())
+ {
+ if (ImGui::MenuItem("Close"))
+ *p_open = false;
+ ImGui::EndPopup();
+ }
+
ImGui::TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc.");
ImGui::TextWrapped("Enter 'HELP' for help, press TAB to use text completion.");
@@ -2158,6 +2468,7 @@ struct ExampleAppConsole
if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine();
if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine();
+ bool copy_to_clipboard = ImGui::SmallButton("Copy"); ImGui::SameLine();
if (ImGui::SmallButton("Scroll to bottom")) ScrollToBottom = true;
//static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); }
@@ -2169,7 +2480,7 @@ struct ExampleAppConsole
ImGui::PopStyleVar();
ImGui::Separator();
- ImGui::BeginChild("ScrollingRegion", ImVec2(0,-ImGui::GetItemsLineHeightWithSpacing()), false, ImGuiWindowFlags_HorizontalScrollbar);
+ ImGui::BeginChild("ScrollingRegion", ImVec2(0, -ImGui::GetStyle().ItemSpacing.y - ImGui::GetItemsLineHeightWithSpacing()), false, ImGuiWindowFlags_HorizontalScrollbar); // Leave room for 1 separator + 1 InputText
if (ImGui::BeginPopupContextWindow())
{
if (ImGui::Selectable("Clear")) ClearLog();
@@ -2188,6 +2499,8 @@ struct ExampleAppConsole
// and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code!
// If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list.
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4,1)); // Tighten spacing
+ if (copy_to_clipboard)
+ ImGui::LogToClipboard();
for (int i = 0; i < Items.Size; i++)
{
const char* item = Items[i];
@@ -2200,6 +2513,8 @@ struct ExampleAppConsole
ImGui::TextUnformatted(item);
ImGui::PopStyleColor();
}
+ if (copy_to_clipboard)
+ ImGui::LogFinish();
if (ScrollToBottom)
ImGui::SetScrollHere();
ScrollToBottom = false;
@@ -2387,12 +2702,12 @@ struct ExampleAppLog
void Clear() { Buf.clear(); LineOffsets.clear(); }
- void AddLog(const char* fmt, ...) IM_PRINTFARGS(2)
+ void AddLog(const char* fmt, ...) IM_FMTARGS(2)
{
int old_size = Buf.size();
va_list args;
va_start(args, fmt);
- Buf.appendv(fmt, args);
+ Buf.appendfv(fmt, args);
va_end(args);
for (int new_size = Buf.size(); old_size < new_size; old_size++)
if (Buf[old_size] == '\n')
@@ -2402,7 +2717,7 @@ struct ExampleAppLog
void Draw(const char* title, bool* p_open = NULL)
{
- ImGui::SetNextWindowSize(ImVec2(500,400), ImGuiSetCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(500,400), ImGuiCond_FirstUseEver);
ImGui::Begin(title, p_open);
if (ImGui::Button("Clear")) Clear();
ImGui::SameLine();
@@ -2443,10 +2758,10 @@ static void ShowExampleAppLog(bool* p_open)
{
static ExampleAppLog log;
- // Demo fill
+ // Demo: add random items (unless Ctrl is held)
static float last_time = -1.0f;
float time = ImGui::GetTime();
- if (time - last_time >= 0.3f)
+ if (time - last_time >= 0.20f && !ImGui::GetIO().KeyCtrl)
{
const char* random_words[] = { "system", "info", "warning", "error", "fatal", "notice", "log" };
log.AddLog("[%s] Hello, time is %.1f, rand() %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, (int)rand());
@@ -2459,7 +2774,7 @@ static void ShowExampleAppLog(bool* p_open)
// Demonstrate create a window with multiple child windows.
static void ShowExampleAppLayout(bool* p_open)
{
- ImGui::SetNextWindowSize(ImVec2(500, 440), ImGuiSetCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(500, 440), ImGuiCond_FirstUseEver);
if (ImGui::Begin("Example: Layout", p_open, ImGuiWindowFlags_MenuBar))
{
if (ImGui::BeginMenuBar())
@@ -2492,11 +2807,9 @@ static void ShowExampleAppLayout(bool* p_open)
ImGui::Separator();
ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ");
ImGui::EndChild();
- ImGui::BeginChild("buttons");
- if (ImGui::Button("Revert")) {}
- ImGui::SameLine();
- if (ImGui::Button("Save")) {}
- ImGui::EndChild();
+ if (ImGui::Button("Revert")) {}
+ ImGui::SameLine();
+ if (ImGui::Button("Save")) {}
ImGui::EndGroup();
}
ImGui::End();
@@ -2505,7 +2818,7 @@ static void ShowExampleAppLayout(bool* p_open)
// Demonstrate create a simple property editor.
static void ShowExampleAppPropertyEditor(bool* p_open)
{
- ImGui::SetNextWindowSize(ImVec2(430,450), ImGuiSetCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(430,450), ImGuiCond_FirstUseEver);
if (!ImGui::Begin("Example: Property editor", p_open))
{
ImGui::End();
@@ -2523,10 +2836,10 @@ static void ShowExampleAppPropertyEditor(bool* p_open)
static void ShowDummyObject(const char* prefix, int uid)
{
ImGui::PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID.
- ImGui::AlignFirstTextHeightToWidgets(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high.
+ ImGui::AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high.
bool node_open = ImGui::TreeNode("Object", "%s_%u", prefix, uid);
ImGui::NextColumn();
- ImGui::AlignFirstTextHeightToWidgets();
+ ImGui::AlignTextToFramePadding();
ImGui::Text("my sailor is rich");
ImGui::NextColumn();
if (node_open)
@@ -2541,7 +2854,7 @@ static void ShowExampleAppPropertyEditor(bool* p_open)
}
else
{
- ImGui::AlignFirstTextHeightToWidgets();
+ ImGui::AlignTextToFramePadding();
// Here we use a Selectable (instead of Text) to highlight on hover
//ImGui::Text("Field_%d", i);
char label[32];
@@ -2578,7 +2891,7 @@ static void ShowExampleAppPropertyEditor(bool* p_open)
// Demonstrate/test rendering huge amount of text, and the incidence of clipping.
static void ShowExampleAppLongText(bool* p_open)
{
- ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiSetCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver);
if (!ImGui::Begin("Example: Long text display", p_open))
{
ImGui::End();
@@ -2589,14 +2902,14 @@ static void ShowExampleAppLongText(bool* p_open)
static ImGuiTextBuffer log;
static int lines = 0;
ImGui::Text("Printing unusually long amount of text.");
- ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped\0");
+ ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0");
ImGui::Text("Buffer contents: %d lines, %d bytes", lines, log.size());
if (ImGui::Button("Clear")) { log.clear(); lines = 0; }
ImGui::SameLine();
if (ImGui::Button("Add 1000 lines"))
{
for (int i = 0; i < 1000; i++)
- log.append("%i The quick brown fox jumps over the lazy dog\n", lines+i);
+ log.appendf("%i The quick brown fox jumps over the lazy dog\n", lines+i);
lines += 1000;
}
ImGui::BeginChild("Log");
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp
index 8b3b2ec1489..a413d4543ae 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp
@@ -1,7 +1,8 @@
-// dear imgui, v1.50 WIP
+// dear imgui, v1.53 WIP
// (drawing and font code)
// Contains implementation for
+// - Default styles
// - ImDrawList
// - ImDrawData
// - ImFontAtlas
@@ -21,10 +22,10 @@
#if !defined(alloca)
#ifdef _WIN32
#include <malloc.h> // alloca
-#elif (defined(__FreeBSD__) || defined(FreeBSD_kernel) || defined(__DragonFly__)) && !defined(__GLIBC__)
-#include <stdlib.h> // alloca. FreeBSD uses stdlib.h unless GLIBC
-#else
+#elif defined(__GLIBC__) || defined(__sun)
#include <alloca.h> // alloca
+#else
+#include <stdlib.h> // alloca
#endif
#endif
@@ -42,6 +43,9 @@
#if __has_warning("-Wreserved-id-macro")
#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier //
#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function
+#endif
#elif defined(__GNUC__)
#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used
#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function
@@ -69,7 +73,6 @@ namespace IMGUI_STB_NAMESPACE
#ifdef __clang__
#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse.
#pragma clang diagnostic ignored "-Wunused-function"
#pragma clang diagnostic ignored "-Wmissing-prototypes"
#endif
@@ -115,6 +118,160 @@ using namespace IMGUI_STB_NAMESPACE;
#endif
//-----------------------------------------------------------------------------
+// Style functions
+//-----------------------------------------------------------------------------
+
+void ImGui::StyleColorsClassic(ImGuiStyle* dst)
+{
+ ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
+ ImVec4* colors = style->Colors;
+
+ colors[ImGuiCol_Text] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);
+ colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
+ colors[ImGuiCol_WindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.70f);
+ colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_PopupBg] = ImVec4(0.11f, 0.11f, 0.14f, 0.92f);
+ colors[ImGuiCol_Border] = ImVec4(0.50f, 0.50f, 0.50f, 0.50f);
+ colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_FrameBg] = ImVec4(0.43f, 0.43f, 0.43f, 0.39f);
+ colors[ImGuiCol_FrameBgHovered] = ImVec4(0.47f, 0.47f, 0.69f, 0.40f);
+ colors[ImGuiCol_FrameBgActive] = ImVec4(0.42f, 0.41f, 0.64f, 0.69f);
+ colors[ImGuiCol_TitleBg] = ImVec4(0.27f, 0.27f, 0.54f, 0.83f);
+ colors[ImGuiCol_TitleBgActive] = ImVec4(0.32f, 0.32f, 0.63f, 0.87f);
+ colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.40f, 0.40f, 0.80f, 0.20f);
+ colors[ImGuiCol_MenuBarBg] = ImVec4(0.40f, 0.40f, 0.55f, 0.80f);
+ colors[ImGuiCol_ScrollbarBg] = ImVec4(0.20f, 0.25f, 0.30f, 0.60f);
+ colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.40f, 0.40f, 0.80f, 0.30f);
+ colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.80f, 0.40f);
+ colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.41f, 0.39f, 0.80f, 0.60f);
+ colors[ImGuiCol_CheckMark] = ImVec4(0.90f, 0.90f, 0.90f, 0.50f);
+ colors[ImGuiCol_SliderGrab] = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
+ colors[ImGuiCol_SliderGrabActive] = ImVec4(0.41f, 0.39f, 0.80f, 0.60f);
+ colors[ImGuiCol_Button] = ImVec4(0.35f, 0.40f, 0.61f, 0.62f);
+ colors[ImGuiCol_ButtonHovered] = ImVec4(0.40f, 0.48f, 0.71f, 0.79f);
+ colors[ImGuiCol_ButtonActive] = ImVec4(0.46f, 0.54f, 0.80f, 1.00f);
+ colors[ImGuiCol_Header] = ImVec4(0.40f, 0.40f, 0.90f, 0.45f);
+ colors[ImGuiCol_HeaderHovered] = ImVec4(0.45f, 0.45f, 0.90f, 0.80f);
+ colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.53f, 0.87f, 0.80f);
+ colors[ImGuiCol_Separator] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
+ colors[ImGuiCol_SeparatorHovered] = ImVec4(0.60f, 0.60f, 0.70f, 1.00f);
+ colors[ImGuiCol_SeparatorActive] = ImVec4(0.70f, 0.70f, 0.90f, 1.00f);
+ colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.16f);
+ colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.78f, 0.82f, 1.00f, 0.60f);
+ colors[ImGuiCol_ResizeGripActive] = ImVec4(0.78f, 0.82f, 1.00f, 0.90f);
+ colors[ImGuiCol_CloseButton] = ImVec4(0.50f, 0.50f, 0.90f, 0.50f);
+ colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.70f, 0.70f, 0.90f, 0.60f);
+ colors[ImGuiCol_CloseButtonActive] = ImVec4(0.70f, 0.70f, 0.70f, 1.00f);
+ colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+ colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+ colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+ colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
+ colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
+ colors[ImGuiCol_ModalWindowDarkening] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
+}
+
+void ImGui::StyleColorsDark(ImGuiStyle* dst)
+{
+ ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
+ ImVec4* colors = style->Colors;
+
+ colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+ colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
+ colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.06f, 0.06f, 0.94f);
+ colors[ImGuiCol_ChildBg] = ImVec4(1.00f, 1.00f, 1.00f, 0.00f);
+ colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
+ colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
+ colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_FrameBg] = ImVec4(0.16f, 0.29f, 0.48f, 0.54f);
+ colors[ImGuiCol_FrameBgHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+ colors[ImGuiCol_FrameBgActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+ colors[ImGuiCol_TitleBg] = ImVec4(0.04f, 0.04f, 0.04f, 1.00f);
+ colors[ImGuiCol_TitleBgActive] = ImVec4(0.16f, 0.29f, 0.48f, 1.00f);
+ colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f);
+ colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f);
+ colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f);
+ colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f);
+ colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f);
+ colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f);
+ colors[ImGuiCol_CheckMark] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_SliderGrab] = ImVec4(0.24f, 0.52f, 0.88f, 1.00f);
+ colors[ImGuiCol_SliderGrabActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_Button] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+ colors[ImGuiCol_ButtonHovered] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
+ colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
+ colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
+ colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_Separator] = colors[ImGuiCol_Border];//ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
+ colors[ImGuiCol_SeparatorHovered] = ImVec4(0.10f, 0.40f, 0.75f, 0.78f);
+ colors[ImGuiCol_SeparatorActive] = ImVec4(0.10f, 0.40f, 0.75f, 1.00f);
+ colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.25f);
+ colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+ colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+ colors[ImGuiCol_CloseButton] = ImVec4(0.41f, 0.41f, 0.41f, 0.50f);
+ colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.98f, 0.39f, 0.36f, 1.00f);
+ colors[ImGuiCol_CloseButtonActive] = ImVec4(0.98f, 0.39f, 0.36f, 1.00f);
+ colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
+ colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
+ colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+ colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
+ colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
+ colors[ImGuiCol_ModalWindowDarkening] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
+}
+
+void ImGui::StyleColorsLight(ImGuiStyle* dst)
+{
+ ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
+ ImVec4* colors = style->Colors;
+
+ colors[ImGuiCol_Text] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f);
+ colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
+ //colors[ImGuiCol_TextHovered] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+ //colors[ImGuiCol_TextActive] = ImVec4(1.00f, 1.00f, 0.00f, 1.00f);
+ colors[ImGuiCol_WindowBg] = ImVec4(0.94f, 0.94f, 0.94f, 1.00f);
+ colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_PopupBg] = ImVec4(1.00f, 1.00f, 1.00f, 0.98f);
+ colors[ImGuiCol_Border] = ImVec4(0.00f, 0.00f, 0.00f, 0.30f);
+ colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_FrameBg] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+ colors[ImGuiCol_FrameBgHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+ colors[ImGuiCol_FrameBgActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+ colors[ImGuiCol_TitleBg] = ImVec4(0.96f, 0.96f, 0.96f, 1.00f);
+ colors[ImGuiCol_TitleBgActive] = ImVec4(0.82f, 0.82f, 0.82f, 1.00f);
+ colors[ImGuiCol_TitleBgCollapsed] = ImVec4(1.00f, 1.00f, 1.00f, 0.51f);
+ colors[ImGuiCol_MenuBarBg] = ImVec4(0.86f, 0.86f, 0.86f, 1.00f);
+ colors[ImGuiCol_ScrollbarBg] = ImVec4(0.98f, 0.98f, 0.98f, 0.53f);
+ colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.69f, 0.69f, 0.69f, 0.80f);
+ colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.49f, 0.49f, 0.49f, 0.80f);
+ colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.49f, 0.49f, 0.49f, 1.00f);
+ colors[ImGuiCol_CheckMark] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_SliderGrab] = ImVec4(0.26f, 0.59f, 0.98f, 0.78f);
+ colors[ImGuiCol_SliderGrabActive] = ImVec4(0.46f, 0.54f, 0.80f, 0.60f);
+ colors[ImGuiCol_Button] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+ colors[ImGuiCol_ButtonHovered] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
+ colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
+ colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
+ colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_Separator] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f);
+ colors[ImGuiCol_SeparatorHovered] = ImVec4(0.14f, 0.44f, 0.80f, 0.78f);
+ colors[ImGuiCol_SeparatorActive] = ImVec4(0.14f, 0.44f, 0.80f, 1.00f);
+ colors[ImGuiCol_ResizeGrip] = ImVec4(0.80f, 0.80f, 0.80f, 0.56f);
+ colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+ colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+ colors[ImGuiCol_CloseButton] = ImVec4(0.59f, 0.59f, 0.59f, 0.50f);
+ colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.98f, 0.39f, 0.36f, 1.00f);
+ colors[ImGuiCol_CloseButtonActive] = ImVec4(0.98f, 0.39f, 0.36f, 1.00f);
+ colors[ImGuiCol_PlotLines] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f);
+ colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
+ colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+ colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.45f, 0.00f, 1.00f);
+ colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
+ colors[ImGuiCol_ModalWindowDarkening] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
+}
+
+
+//-----------------------------------------------------------------------------
// ImDrawList
//-----------------------------------------------------------------------------
@@ -158,7 +315,7 @@ void ImDrawList::ClearFreeMemory()
_Channels.clear();
}
-// Use macros because C++ is a terrible language, we want guaranteed inline, no code in header, and no overhead in Debug mode
+// Using macros because C++ is a terrible language, we want guaranteed inline, no code in header, and no overhead in Debug builds
#define GetCurrentClipRect() (_ClipRectStack.Size ? _ClipRectStack.Data[_ClipRectStack.Size-1] : GNullClipRect)
#define GetCurrentTextureId() (_TextureIdStack.Size ? _TextureIdStack.Data[_TextureIdStack.Size-1] : NULL)
@@ -221,7 +378,7 @@ void ImDrawList::UpdateTextureID()
// Try to merge with previous command if it matches, else use current command
ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 : NULL;
- if (prev_cmd && prev_cmd->TextureId == curr_texture_id && memcmp(&prev_cmd->ClipRect, &GetCurrentClipRect(), sizeof(ImVec4)) == 0 && prev_cmd->UserCallback == NULL)
+ if (curr_cmd->ElemCount == 0 && prev_cmd && prev_cmd->TextureId == curr_texture_id && memcmp(&prev_cmd->ClipRect, &GetCurrentClipRect(), sizeof(ImVec4)) == 0 && prev_cmd->UserCallback == NULL)
CmdBuffer.pop_back();
else
curr_cmd->TextureId = curr_texture_id;
@@ -283,7 +440,7 @@ void ImDrawList::ChannelsSplit(int channels_count)
_Channels.resize(channels_count);
_ChannelsCount = channels_count;
- // _Channels[] (24 bytes each) hold storage that we'll swap with this->_CmdBuffer/_IdxBuffer
+ // _Channels[] (24/32 bytes each) hold storage that we'll swap with this->_CmdBuffer/_IdxBuffer
// The content of _Channels[0] at this point doesn't matter. We clear it to make state tidy in a debugger but we don't strictly need to.
// When we switch to the next channel, we'll copy _CmdBuffer/_IdxBuffer into _Channels[0] and then _Channels[1] into _CmdBuffer/_IdxBuffer
memset(&_Channels[0], 0, sizeof(ImDrawChannel));
@@ -339,7 +496,7 @@ void ImDrawList::ChannelsMerge()
if (int sz = ch.CmdBuffer.Size) { memcpy(cmd_write, ch.CmdBuffer.Data, sz * sizeof(ImDrawCmd)); cmd_write += sz; }
if (int sz = ch.IdxBuffer.Size) { memcpy(_IdxWritePtr, ch.IdxBuffer.Data, sz * sizeof(ImDrawIdx)); _IdxWritePtr += sz; }
}
- AddDrawCmd();
+ UpdateClipRect(); // We call this instead of AddDrawCmd(), so that empty channels won't produce an extra draw call.
_ChannelsCount = 1;
}
@@ -361,13 +518,13 @@ void ImDrawList::PrimReserve(int idx_count, int vtx_count)
ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size-1];
draw_cmd.ElemCount += idx_count;
- int vtx_buffer_size = VtxBuffer.Size;
- VtxBuffer.resize(vtx_buffer_size + vtx_count);
- _VtxWritePtr = VtxBuffer.Data + vtx_buffer_size;
+ int vtx_buffer_old_size = VtxBuffer.Size;
+ VtxBuffer.resize(vtx_buffer_old_size + vtx_count);
+ _VtxWritePtr = VtxBuffer.Data + vtx_buffer_old_size;
- int idx_buffer_size = IdxBuffer.Size;
- IdxBuffer.resize(idx_buffer_size + idx_count);
- _IdxWritePtr = IdxBuffer.Data + idx_buffer_size;
+ int idx_buffer_old_size = IdxBuffer.Size;
+ IdxBuffer.resize(idx_buffer_old_size + idx_count);
+ _IdxWritePtr = IdxBuffer.Data + idx_buffer_old_size;
}
// Fully unrolled with inline call to keep our debug builds decently fast.
@@ -434,7 +591,7 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32
{
// Anti-aliased stroke
const float AA_SIZE = 1.0f;
- const ImU32 col_trans = col & IM_COL32(255,255,255,0);
+ const ImU32 col_trans = col & ~IM_COL32_A_MASK;
const int idx_count = thick_line ? count*18 : count*12;
const int vtx_count = thick_line ? points_count*4 : points_count*3;
@@ -607,7 +764,7 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun
{
// Anti-aliased Fill
const float AA_SIZE = 1.0f;
- const ImU32 col_trans = col & IM_COL32(255,255,255,0);
+ const ImU32 col_trans = col & ~IM_COL32_A_MASK;
const int idx_count = (points_count-2)*3 + points_count*6;
const int vtx_count = (points_count*2);
PrimReserve(idx_count, vtx_count);
@@ -680,7 +837,7 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun
}
}
-void ImDrawList::PathArcToFast(const ImVec2& centre, float radius, int amin, int amax)
+void ImDrawList::PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12)
{
static ImVec2 circle_vtx[12];
static bool circle_vtx_builds = false;
@@ -696,30 +853,30 @@ void ImDrawList::PathArcToFast(const ImVec2& centre, float radius, int amin, int
circle_vtx_builds = true;
}
- if (amin > amax) return;
- if (radius == 0.0f)
+ if (radius == 0.0f || a_min_of_12 > a_max_of_12)
{
_Path.push_back(centre);
+ return;
}
- else
+ _Path.reserve(_Path.Size + (a_max_of_12 - a_min_of_12 + 1));
+ for (int a = a_min_of_12; a <= a_max_of_12; a++)
{
- _Path.reserve(_Path.Size + (amax - amin + 1));
- for (int a = amin; a <= amax; a++)
- {
- const ImVec2& c = circle_vtx[a % circle_vtx_count];
- _Path.push_back(ImVec2(centre.x + c.x * radius, centre.y + c.y * radius));
- }
+ const ImVec2& c = circle_vtx[a % circle_vtx_count];
+ _Path.push_back(ImVec2(centre.x + c.x * radius, centre.y + c.y * radius));
}
}
-void ImDrawList::PathArcTo(const ImVec2& centre, float radius, float amin, float amax, int num_segments)
+void ImDrawList::PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments)
{
if (radius == 0.0f)
+ {
_Path.push_back(centre);
+ return;
+ }
_Path.reserve(_Path.Size + (num_segments + 1));
for (int i = 0; i <= num_segments; i++)
{
- const float a = amin + ((float)i / (float)num_segments) * (amax - amin);
+ const float a = a_min + ((float)i / (float)num_segments) * (a_max - a_min);
_Path.push_back(ImVec2(centre.x + cosf(a) * radius, centre.y + sinf(a) * radius));
}
}
@@ -776,27 +933,26 @@ void ImDrawList::PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImV
void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, int rounding_corners)
{
- float r = rounding;
- r = ImMin(r, fabsf(b.x-a.x) * ( ((rounding_corners&(1|2))==(1|2)) || ((rounding_corners&(4|8))==(4|8)) ? 0.5f : 1.0f ) - 1.0f);
- r = ImMin(r, fabsf(b.y-a.y) * ( ((rounding_corners&(1|8))==(1|8)) || ((rounding_corners&(2|4))==(2|4)) ? 0.5f : 1.0f ) - 1.0f);
+ rounding = ImMin(rounding, fabsf(b.x - a.x) * ( ((rounding_corners & ImDrawCornerFlags_Top) == ImDrawCornerFlags_Top) || ((rounding_corners & ImDrawCornerFlags_Bot) == ImDrawCornerFlags_Bot) ? 0.5f : 1.0f ) - 1.0f);
+ rounding = ImMin(rounding, fabsf(b.y - a.y) * ( ((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f ) - 1.0f);
- if (r <= 0.0f || rounding_corners == 0)
+ if (rounding <= 0.0f || rounding_corners == 0)
{
PathLineTo(a);
- PathLineTo(ImVec2(b.x,a.y));
+ PathLineTo(ImVec2(b.x, a.y));
PathLineTo(b);
- PathLineTo(ImVec2(a.x,b.y));
+ PathLineTo(ImVec2(a.x, b.y));
}
else
{
- const float r0 = (rounding_corners & 1) ? r : 0.0f;
- const float r1 = (rounding_corners & 2) ? r : 0.0f;
- const float r2 = (rounding_corners & 4) ? r : 0.0f;
- const float r3 = (rounding_corners & 8) ? r : 0.0f;
- PathArcToFast(ImVec2(a.x+r0,a.y+r0), r0, 6, 9);
- PathArcToFast(ImVec2(b.x-r1,a.y+r1), r1, 9, 12);
- PathArcToFast(ImVec2(b.x-r2,b.y-r2), r2, 0, 3);
- PathArcToFast(ImVec2(a.x+r3,b.y-r3), r3, 3, 6);
+ const float rounding_tl = (rounding_corners & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f;
+ const float rounding_tr = (rounding_corners & ImDrawCornerFlags_TopRight) ? rounding : 0.0f;
+ const float rounding_br = (rounding_corners & ImDrawCornerFlags_BotRight) ? rounding : 0.0f;
+ const float rounding_bl = (rounding_corners & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f;
+ PathArcToFast(ImVec2(a.x + rounding_tl, a.y + rounding_tl), rounding_tl, 6, 9);
+ PathArcToFast(ImVec2(b.x - rounding_tr, a.y + rounding_tr), rounding_tr, 9, 12);
+ PathArcToFast(ImVec2(b.x - rounding_br, b.y - rounding_br), rounding_br, 0, 3);
+ PathArcToFast(ImVec2(a.x + rounding_bl, b.y - rounding_bl), rounding_bl, 3, 6);
}
}
@@ -825,7 +981,7 @@ void ImDrawList::AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, floa
if (rounding > 0.0f)
{
PathRect(a, b, rounding, rounding_corners_flags);
- PathFill(col);
+ PathFillConvex(col);
}
else
{
@@ -870,7 +1026,7 @@ void ImDrawList::AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c
PathLineTo(b);
PathLineTo(c);
PathLineTo(d);
- PathFill(col);
+ PathFillConvex(col);
}
void ImDrawList::AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness)
@@ -892,7 +1048,7 @@ void ImDrawList::AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec
PathLineTo(a);
PathLineTo(b);
PathLineTo(c);
- PathFill(col);
+ PathFillConvex(col);
}
void ImDrawList::AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments, float thickness)
@@ -912,7 +1068,7 @@ void ImDrawList::AddCircleFilled(const ImVec2& centre, float radius, ImU32 col,
const float a_max = IM_PI*2.0f * ((float)num_segments - 1.0f) / (float)num_segments;
PathArcTo(centre, radius, 0.0f, a_max, num_segments);
- PathFill(col);
+ PathFillConvex(col);
}
void ImDrawList::AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments)
@@ -935,7 +1091,7 @@ void ImDrawList::AddText(const ImFont* font, float font_size, const ImVec2& pos,
if (text_begin == text_end)
return;
- // Note: This is one of the few instance of breaking the encapsulation of ImDrawList, as we pull this from ImGui state, but it is just SO useful.
+ // IMPORTANT: This is one of the few instance of breaking the encapsulation of ImDrawList, as we pull this from ImGui state, but it is just SO useful.
// Might just move Font/FontSize to ImDrawList?
if (font == NULL)
font = GImGui->Font;
@@ -957,21 +1113,61 @@ void ImDrawList::AddText(const ImFont* font, float font_size, const ImVec2& pos,
void ImDrawList::AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end)
{
- AddText(GImGui->Font, GImGui->FontSize, pos, col, text_begin, text_end);
+ AddText(NULL, 0.0f, pos, col, text_begin, text_end);
}
-void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv0, const ImVec2& uv1, ImU32 col)
+void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
- // FIXME-OPT: This is wasting draw calls.
const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
if (push_texture_id)
PushTextureID(user_texture_id);
PrimReserve(6, 4);
- PrimRectUV(a, b, uv0, uv1, col);
+ PrimRectUV(a, b, uv_a, uv_b, col);
+
+ if (push_texture_id)
+ PopTextureID();
+}
+
+void ImDrawList::AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
+ if (push_texture_id)
+ PushTextureID(user_texture_id);
+
+ PrimReserve(6, 4);
+ PrimQuadUV(a, b, c, d, uv_a, uv_b, uv_c, uv_d, col);
+
+ if (push_texture_id)
+ PopTextureID();
+}
+
+void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ if (rounding <= 0.0f || (rounding_corners & ImDrawCornerFlags_All) == 0)
+ {
+ AddImage(user_texture_id, a, b, uv_a, uv_b, col);
+ return;
+ }
+
+ const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
+ if (push_texture_id)
+ PushTextureID(user_texture_id);
+
+ int vert_start_idx = VtxBuffer.Size;
+ PathRect(a, b, rounding, rounding_corners);
+ PathFillConvex(col);
+ int vert_end_idx = VtxBuffer.Size;
+ ImGui::ShadeVertsLinearUV(VtxBuffer.Data + vert_start_idx, VtxBuffer.Data + vert_end_idx, a, b, uv_a, uv_b, true);
if (push_texture_id)
PopTextureID();
@@ -1015,7 +1211,68 @@ void ImDrawData::ScaleClipRects(const ImVec2& scale)
}
//-----------------------------------------------------------------------------
-// ImFontAtlas
+// Shade functions
+//-----------------------------------------------------------------------------
+
+// Generic linear color gradient, write to RGB fields, leave A untouched.
+void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawVert* vert_start, ImDrawVert* vert_end, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1)
+{
+ ImVec2 gradient_extent = gradient_p1 - gradient_p0;
+ float gradient_inv_length2 = 1.0f / ImLengthSqr(gradient_extent);
+ for (ImDrawVert* vert = vert_start; vert < vert_end; vert++)
+ {
+ float d = ImDot(vert->pos - gradient_p0, gradient_extent);
+ float t = ImClamp(d * gradient_inv_length2, 0.0f, 1.0f);
+ int r = ImLerp((int)(col0 >> IM_COL32_R_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_R_SHIFT) & 0xFF, t);
+ int g = ImLerp((int)(col0 >> IM_COL32_G_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_G_SHIFT) & 0xFF, t);
+ int b = ImLerp((int)(col0 >> IM_COL32_B_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_B_SHIFT) & 0xFF, t);
+ vert->col = (r << IM_COL32_R_SHIFT) | (g << IM_COL32_G_SHIFT) | (b << IM_COL32_B_SHIFT) | (vert->col & IM_COL32_A_MASK);
+ }
+}
+
+// Scan and shade backward from the end of given vertices. Assume vertices are text only (= vert_start..vert_end going left to right) so we can break as soon as we are out the gradient bounds.
+void ImGui::ShadeVertsLinearAlphaGradientForLeftToRightText(ImDrawVert* vert_start, ImDrawVert* vert_end, float gradient_p0_x, float gradient_p1_x)
+{
+ float gradient_extent_x = gradient_p1_x - gradient_p0_x;
+ float gradient_inv_length2 = 1.0f / (gradient_extent_x * gradient_extent_x);
+ int full_alpha_count = 0;
+ for (ImDrawVert* vert = vert_end - 1; vert >= vert_start; vert--)
+ {
+ float d = (vert->pos.x - gradient_p0_x) * (gradient_extent_x);
+ float alpha_mul = 1.0f - ImClamp(d * gradient_inv_length2, 0.0f, 1.0f);
+ if (alpha_mul >= 1.0f && ++full_alpha_count > 2)
+ return; // Early out
+ int a = (int)(((vert->col >> IM_COL32_A_SHIFT) & 0xFF) * alpha_mul);
+ vert->col = (vert->col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT);
+ }
+}
+
+// Distribute UV over (a, b) rectangle
+void ImGui::ShadeVertsLinearUV(ImDrawVert* vert_start, ImDrawVert* vert_end, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp)
+{
+ const ImVec2 size = b - a;
+ const ImVec2 uv_size = uv_b - uv_a;
+ const ImVec2 scale = ImVec2(
+ size.x ? (uv_size.x / size.x) : 0.0f,
+ size.y ? (uv_size.y / size.y) : 0.0f);
+
+ if (clamp)
+ {
+ const ImVec2 min = ImMin(uv_a, uv_b);
+ const ImVec2 max = ImMax(uv_a, uv_b);
+
+ for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
+ vertex->uv = ImClamp(uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale), min, max);
+ }
+ else
+ {
+ for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
+ vertex->uv = uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// ImFontConfig
//-----------------------------------------------------------------------------
ImFontConfig::ImFontConfig()
@@ -1029,20 +1286,79 @@ ImFontConfig::ImFontConfig()
OversampleV = 1;
PixelSnapH = false;
GlyphExtraSpacing = ImVec2(0.0f, 0.0f);
+ GlyphOffset = ImVec2(0.0f, 0.0f);
GlyphRanges = NULL;
MergeMode = false;
- MergeGlyphCenterV = false;
- DstFont = NULL;
+ RasterizerFlags = 0x00;
+ RasterizerMultiply = 1.0f;
memset(Name, 0, sizeof(Name));
+ DstFont = NULL;
}
+//-----------------------------------------------------------------------------
+// ImFontAtlas
+//-----------------------------------------------------------------------------
+
+// A work of art lies ahead! (. = white layer, X = black layer, others are blank)
+// The white texels on the top left are the ones we'll use everywhere in ImGui to render filled shapes.
+const int FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF = 90;
+const int FONT_ATLAS_DEFAULT_TEX_DATA_H = 27;
+const unsigned int FONT_ATLAS_DEFAULT_TEX_DATA_ID = 0x80000000;
+static const char FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF * FONT_ATLAS_DEFAULT_TEX_DATA_H + 1] =
+{
+ "..- -XXXXXXX- X - X -XXXXXXX - XXXXXXX"
+ "..- -X.....X- X.X - X.X -X.....X - X.....X"
+ "--- -XXX.XXX- X...X - X...X -X....X - X....X"
+ "X - X.X - X.....X - X.....X -X...X - X...X"
+ "XX - X.X -X.......X- X.......X -X..X.X - X.X..X"
+ "X.X - X.X -XXXX.XXXX- XXXX.XXXX -X.X X.X - X.X X.X"
+ "X..X - X.X - X.X - X.X -XX X.X - X.X XX"
+ "X...X - X.X - X.X - XX X.X XX - X.X - X.X "
+ "X....X - X.X - X.X - X.X X.X X.X - X.X - X.X "
+ "X.....X - X.X - X.X - X..X X.X X..X - X.X - X.X "
+ "X......X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X XX-XX X.X "
+ "X.......X - X.X - X.X -X.....................X- X.X X.X-X.X X.X "
+ "X........X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X..X-X..X.X "
+ "X.........X -XXX.XXX- X.X - X..X X.X X..X - X...X-X...X "
+ "X..........X-X.....X- X.X - X.X X.X X.X - X....X-X....X "
+ "X......XXXXX-XXXXXXX- X.X - XX X.X XX - X.....X-X.....X "
+ "X...X..X --------- X.X - X.X - XXXXXXX-XXXXXXX "
+ "X..X X..X - -XXXX.XXXX- XXXX.XXXX ------------------------------------"
+ "X.X X..X - -X.......X- X.......X - XX XX - "
+ "XX X..X - - X.....X - X.....X - X.X X.X - "
+ " X..X - X...X - X...X - X..X X..X - "
+ " XX - X.X - X.X - X...XXXXXXXXXXXXX...X - "
+ "------------ - X - X -X.....................X- "
+ " ----------------------------------- X...XXXXXXXXXXXXX...X - "
+ " - X..X X..X - "
+ " - X.X X.X - "
+ " - XX XX - "
+};
+
+static const ImVec2 FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[ImGuiMouseCursor_Count_][3] =
+{
+ // Pos ........ Size ......... Offset ......
+ { ImVec2(0,3), ImVec2(12,19), ImVec2( 0, 0) }, // ImGuiMouseCursor_Arrow
+ { ImVec2(13,0), ImVec2(7,16), ImVec2( 4, 8) }, // ImGuiMouseCursor_TextInput
+ { ImVec2(31,0), ImVec2(23,23), ImVec2(11,11) }, // ImGuiMouseCursor_Move
+ { ImVec2(21,0), ImVec2( 9,23), ImVec2( 5,11) }, // ImGuiMouseCursor_ResizeNS
+ { ImVec2(55,18),ImVec2(23, 9), ImVec2(11, 5) }, // ImGuiMouseCursor_ResizeEW
+ { ImVec2(73,0), ImVec2(17,17), ImVec2( 9, 9) }, // ImGuiMouseCursor_ResizeNESW
+ { ImVec2(55,0), ImVec2(17,17), ImVec2( 9, 9) }, // ImGuiMouseCursor_ResizeNWSE
+};
+
+
ImFontAtlas::ImFontAtlas()
{
TexID = NULL;
+ TexDesiredWidth = 0;
+ TexGlyphPadding = 1;
TexPixelsAlpha8 = NULL;
TexPixelsRGBA32 = NULL;
- TexWidth = TexHeight = TexDesiredWidth = 0;
+ TexWidth = TexHeight = 0;
TexUvWhitePixel = ImVec2(0, 0);
+ for (int n = 0; n < IM_ARRAYSIZE(CustomRectIds); n++)
+ CustomRectIds[n] = -1;
}
ImFontAtlas::~ImFontAtlas()
@@ -1059,7 +1375,7 @@ void ImFontAtlas::ClearInputData()
ConfigData[i].FontData = NULL;
}
- // When clearing this we lose access to the font name and other information used to build the font.
+ // When clearing this we lose access to the font name and other information used to build the font.
for (int i = 0; i < Fonts.Size; i++)
if (Fonts[i]->ConfigData >= ConfigData.Data && Fonts[i]->ConfigData < ConfigData.Data + ConfigData.Size)
{
@@ -1067,6 +1383,9 @@ void ImFontAtlas::ClearInputData()
Fonts[i]->ConfigDataCount = 0;
}
ConfigData.clear();
+ CustomRects.clear();
+ for (int n = 0; n < IM_ARRAYSIZE(CustomRectIds); n++)
+ CustomRectIds[n] = -1;
}
void ImFontAtlas::ClearTexData()
@@ -1145,11 +1464,15 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
IM_PLACEMENT_NEW(font) ImFont();
Fonts.push_back(font);
}
+ else
+ {
+ IM_ASSERT(!Fonts.empty()); // When using MergeMode make sure that a font has already been added before. You can use ImGui::GetIO().Fonts->AddFontDefault() to add the default imgui font.
+ }
ConfigData.push_back(*font_cfg);
ImFontConfig& new_font_cfg = ConfigData.back();
- if (!new_font_cfg.DstFont)
- new_font_cfg.DstFont = Fonts.back();
+ if (!new_font_cfg.DstFont)
+ new_font_cfg.DstFont = Fonts.back();
if (!new_font_cfg.FontDataOwnedByAtlas)
{
new_font_cfg.FontData = ImGui::MemAlloc(new_font_cfg.FontDataSize);
@@ -1188,9 +1511,10 @@ ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
font_cfg.PixelSnapH = true;
}
if (font_cfg.Name[0] == '\0') strcpy(font_cfg.Name, "ProggyClean.ttf, 13px");
+ if (font_cfg.SizePixels <= 0.0f) font_cfg.SizePixels = 13.0f;
const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85();
- ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, 13.0f, &font_cfg, GetGlyphRangesDefault());
+ ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_cfg.SizePixels, &font_cfg, GetGlyphRangesDefault());
return font;
}
@@ -1214,7 +1538,7 @@ ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size_pixels,
return AddFontFromMemoryTTF(data, data_size, size_pixels, &font_cfg, glyph_ranges);
}
-// NBM Transfer ownership of 'ttf_data' to ImFontAtlas, unless font_cfg_template->FontDataOwnedByAtlas == false. Owned TTF buffer will be deleted after Build().
+// NB: Transfer ownership of 'ttf_data' to ImFontAtlas, unless font_cfg_template->FontDataOwnedByAtlas == false. Owned TTF buffer will be deleted after Build().
ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
{
ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
@@ -1249,92 +1573,151 @@ ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* compressed
return font;
}
+int ImFontAtlas::AddCustomRectRegular(unsigned int id, int width, int height)
+{
+ IM_ASSERT(id >= 0x10000);
+ IM_ASSERT(width > 0 && width <= 0xFFFF);
+ IM_ASSERT(height > 0 && height <= 0xFFFF);
+ CustomRect r;
+ r.ID = id;
+ r.Width = (unsigned short)width;
+ r.Height = (unsigned short)height;
+ CustomRects.push_back(r);
+ return CustomRects.Size - 1; // Return index
+}
+
+int ImFontAtlas::AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset)
+{
+ IM_ASSERT(font != NULL);
+ IM_ASSERT(width > 0 && width <= 0xFFFF);
+ IM_ASSERT(height > 0 && height <= 0xFFFF);
+ CustomRect r;
+ r.ID = id;
+ r.Width = (unsigned short)width;
+ r.Height = (unsigned short)height;
+ r.GlyphAdvanceX = advance_x;
+ r.GlyphOffset = offset;
+ r.Font = font;
+ CustomRects.push_back(r);
+ return CustomRects.Size - 1; // Return index
+}
+
+void ImFontAtlas::CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max)
+{
+ IM_ASSERT(TexWidth > 0 && TexHeight > 0); // Font atlas needs to be built before we can calculate UV coordinates
+ IM_ASSERT(rect->IsPacked()); // Make sure the rectangle has been packed
+ *out_uv_min = ImVec2((float)rect->X / TexWidth, (float)rect->Y / TexHeight);
+ *out_uv_max = ImVec2((float)(rect->X + rect->Width) / TexWidth, (float)(rect->Y + rect->Height) / TexHeight);
+}
+
bool ImFontAtlas::Build()
{
- IM_ASSERT(ConfigData.Size > 0);
+ return ImFontAtlasBuildWithStbTruetype(this);
+}
- TexID = NULL;
- TexWidth = TexHeight = 0;
- TexUvWhitePixel = ImVec2(0, 0);
- ClearTexData();
+void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_brighten_factor)
+{
+ for (unsigned int i = 0; i < 256; i++)
+ {
+ unsigned int value = (unsigned int)(i * in_brighten_factor);
+ out_table[i] = value > 255 ? 255 : (value & 0xFF);
+ }
+}
+
+void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride)
+{
+ unsigned char* data = pixels + x + y * stride;
+ for (int j = h; j > 0; j--, data += stride)
+ for (int i = 0; i < w; i++)
+ data[i] = table[data[i]];
+}
+
+bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
+{
+ IM_ASSERT(atlas->ConfigData.Size > 0);
+
+ ImFontAtlasBuildRegisterDefaultCustomRects(atlas);
+
+ atlas->TexID = NULL;
+ atlas->TexWidth = atlas->TexHeight = 0;
+ atlas->TexUvWhitePixel = ImVec2(0, 0);
+ atlas->ClearTexData();
+
+ // Count glyphs/ranges
+ int total_glyphs_count = 0;
+ int total_ranges_count = 0;
+ for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
+ {
+ ImFontConfig& cfg = atlas->ConfigData[input_i];
+ if (!cfg.GlyphRanges)
+ cfg.GlyphRanges = atlas->GetGlyphRangesDefault();
+ for (const ImWchar* in_range = cfg.GlyphRanges; in_range[0] && in_range[1]; in_range += 2, total_ranges_count++)
+ total_glyphs_count += (in_range[1] - in_range[0]) + 1;
+ }
+
+ // We need a width for the skyline algorithm. Using a dumb heuristic here to decide of width. User can override TexDesiredWidth and TexGlyphPadding if they wish.
+ // Width doesn't really matter much, but some API/GPU have texture size limitations and increasing width can decrease height.
+ atlas->TexWidth = (atlas->TexDesiredWidth > 0) ? atlas->TexDesiredWidth : (total_glyphs_count > 4000) ? 4096 : (total_glyphs_count > 2000) ? 2048 : (total_glyphs_count > 1000) ? 1024 : 512;
+ atlas->TexHeight = 0;
+
+ // Start packing
+ const int max_tex_height = 1024*32;
+ stbtt_pack_context spc = {};
+ stbtt_PackBegin(&spc, NULL, atlas->TexWidth, max_tex_height, 0, atlas->TexGlyphPadding, NULL);
+ stbtt_PackSetOversampling(&spc, 1, 1);
+ // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values).
+ ImFontAtlasBuildPackCustomRects(atlas, spc.pack_info);
+
+ // Initialize font information (so we can error without any cleanup)
struct ImFontTempBuildData
{
stbtt_fontinfo FontInfo;
stbrp_rect* Rects;
+ int RectsCount;
stbtt_pack_range* Ranges;
int RangesCount;
};
- ImFontTempBuildData* tmp_array = (ImFontTempBuildData*)ImGui::MemAlloc((size_t)ConfigData.Size * sizeof(ImFontTempBuildData));
-
- // Initialize font information early (so we can error without any cleanup) + count glyphs
- int total_glyph_count = 0;
- int total_glyph_range_count = 0;
- for (int input_i = 0; input_i < ConfigData.Size; input_i++)
+ ImFontTempBuildData* tmp_array = (ImFontTempBuildData*)ImGui::MemAlloc((size_t)atlas->ConfigData.Size * sizeof(ImFontTempBuildData));
+ for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
{
- ImFontConfig& cfg = ConfigData[input_i];
+ ImFontConfig& cfg = atlas->ConfigData[input_i];
ImFontTempBuildData& tmp = tmp_array[input_i];
+ IM_ASSERT(cfg.DstFont && (!cfg.DstFont->IsLoaded() || cfg.DstFont->ContainerAtlas == atlas));
- IM_ASSERT(cfg.DstFont && (!cfg.DstFont->IsLoaded() || cfg.DstFont->ContainerAtlas == this));
const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)cfg.FontData, cfg.FontNo);
IM_ASSERT(font_offset >= 0);
if (!stbtt_InitFont(&tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset))
- return false;
-
- // Count glyphs
- if (!cfg.GlyphRanges)
- cfg.GlyphRanges = GetGlyphRangesDefault();
- for (const ImWchar* in_range = cfg.GlyphRanges; in_range[0] && in_range[1]; in_range += 2)
{
- total_glyph_count += (in_range[1] - in_range[0]) + 1;
- total_glyph_range_count++;
+ ImGui::MemFree(tmp_array);
+ return false;
}
}
- // Start packing. We need a known width for the skyline algorithm. Using a cheap heuristic here to decide of width. User can override TexDesiredWidth if they wish.
- // After packing is done, width shouldn't matter much, but some API/GPU have texture size limitations and increasing width can decrease height.
- TexWidth = (TexDesiredWidth > 0) ? TexDesiredWidth : (total_glyph_count > 4000) ? 4096 : (total_glyph_count > 2000) ? 2048 : (total_glyph_count > 1000) ? 1024 : 512;
- TexHeight = 0;
- const int max_tex_height = 1024*32;
- stbtt_pack_context spc;
- stbtt_PackBegin(&spc, NULL, TexWidth, max_tex_height, 0, 1, NULL);
-
- // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values).
- ImVector<stbrp_rect> extra_rects;
- RenderCustomTexData(0, &extra_rects);
- stbtt_PackSetOversampling(&spc, 1, 1);
- stbrp_pack_rects((stbrp_context*)spc.pack_info, &extra_rects[0], extra_rects.Size);
- for (int i = 0; i < extra_rects.Size; i++)
- if (extra_rects[i].was_packed)
- TexHeight = ImMax(TexHeight, extra_rects[i].y + extra_rects[i].h);
-
// Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0)
int buf_packedchars_n = 0, buf_rects_n = 0, buf_ranges_n = 0;
- stbtt_packedchar* buf_packedchars = (stbtt_packedchar*)ImGui::MemAlloc(total_glyph_count * sizeof(stbtt_packedchar));
- stbrp_rect* buf_rects = (stbrp_rect*)ImGui::MemAlloc(total_glyph_count * sizeof(stbrp_rect));
- stbtt_pack_range* buf_ranges = (stbtt_pack_range*)ImGui::MemAlloc(total_glyph_range_count * sizeof(stbtt_pack_range));
- memset(buf_packedchars, 0, total_glyph_count * sizeof(stbtt_packedchar));
- memset(buf_rects, 0, total_glyph_count * sizeof(stbrp_rect)); // Unnecessary but let's clear this for the sake of sanity.
- memset(buf_ranges, 0, total_glyph_range_count * sizeof(stbtt_pack_range));
+ stbtt_packedchar* buf_packedchars = (stbtt_packedchar*)ImGui::MemAlloc(total_glyphs_count * sizeof(stbtt_packedchar));
+ stbrp_rect* buf_rects = (stbrp_rect*)ImGui::MemAlloc(total_glyphs_count * sizeof(stbrp_rect));
+ stbtt_pack_range* buf_ranges = (stbtt_pack_range*)ImGui::MemAlloc(total_ranges_count * sizeof(stbtt_pack_range));
+ memset(buf_packedchars, 0, total_glyphs_count * sizeof(stbtt_packedchar));
+ memset(buf_rects, 0, total_glyphs_count * sizeof(stbrp_rect)); // Unnecessary but let's clear this for the sake of sanity.
+ memset(buf_ranges, 0, total_ranges_count * sizeof(stbtt_pack_range));
// First font pass: pack all glyphs (no rendering at this point, we are working with rectangles in an infinitely tall texture at this point)
- for (int input_i = 0; input_i < ConfigData.Size; input_i++)
+ for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
{
- ImFontConfig& cfg = ConfigData[input_i];
+ ImFontConfig& cfg = atlas->ConfigData[input_i];
ImFontTempBuildData& tmp = tmp_array[input_i];
// Setup ranges
- int glyph_count = 0;
- int glyph_ranges_count = 0;
- for (const ImWchar* in_range = cfg.GlyphRanges; in_range[0] && in_range[1]; in_range += 2)
- {
- glyph_count += (in_range[1] - in_range[0]) + 1;
- glyph_ranges_count++;
- }
+ int font_glyphs_count = 0;
+ int font_ranges_count = 0;
+ for (const ImWchar* in_range = cfg.GlyphRanges; in_range[0] && in_range[1]; in_range += 2, font_ranges_count++)
+ font_glyphs_count += (in_range[1] - in_range[0]) + 1;
tmp.Ranges = buf_ranges + buf_ranges_n;
- tmp.RangesCount = glyph_ranges_count;
- buf_ranges_n += glyph_ranges_count;
- for (int i = 0; i < glyph_ranges_count; i++)
+ tmp.RangesCount = font_ranges_count;
+ buf_ranges_n += font_ranges_count;
+ for (int i = 0; i < font_ranges_count; i++)
{
const ImWchar* in_range = &cfg.GlyphRanges[i * 2];
stbtt_pack_range& range = tmp.Ranges[i];
@@ -1347,34 +1730,44 @@ bool ImFontAtlas::Build()
// Pack
tmp.Rects = buf_rects + buf_rects_n;
- buf_rects_n += glyph_count;
+ tmp.RectsCount = font_glyphs_count;
+ buf_rects_n += font_glyphs_count;
stbtt_PackSetOversampling(&spc, cfg.OversampleH, cfg.OversampleV);
int n = stbtt_PackFontRangesGatherRects(&spc, &tmp.FontInfo, tmp.Ranges, tmp.RangesCount, tmp.Rects);
+ IM_ASSERT(n == font_glyphs_count);
stbrp_pack_rects((stbrp_context*)spc.pack_info, tmp.Rects, n);
// Extend texture height
for (int i = 0; i < n; i++)
if (tmp.Rects[i].was_packed)
- TexHeight = ImMax(TexHeight, tmp.Rects[i].y + tmp.Rects[i].h);
+ atlas->TexHeight = ImMax(atlas->TexHeight, tmp.Rects[i].y + tmp.Rects[i].h);
}
- IM_ASSERT(buf_rects_n == total_glyph_count);
- IM_ASSERT(buf_packedchars_n == total_glyph_count);
- IM_ASSERT(buf_ranges_n == total_glyph_range_count);
+ IM_ASSERT(buf_rects_n == total_glyphs_count);
+ IM_ASSERT(buf_packedchars_n == total_glyphs_count);
+ IM_ASSERT(buf_ranges_n == total_ranges_count);
// Create texture
- TexHeight = ImUpperPowerOfTwo(TexHeight);
- TexPixelsAlpha8 = (unsigned char*)ImGui::MemAlloc(TexWidth * TexHeight);
- memset(TexPixelsAlpha8, 0, TexWidth * TexHeight);
- spc.pixels = TexPixelsAlpha8;
- spc.height = TexHeight;
-
- // Second pass: render characters
- for (int input_i = 0; input_i < ConfigData.Size; input_i++)
+ atlas->TexHeight = ImUpperPowerOfTwo(atlas->TexHeight);
+ atlas->TexPixelsAlpha8 = (unsigned char*)ImGui::MemAlloc(atlas->TexWidth * atlas->TexHeight);
+ memset(atlas->TexPixelsAlpha8, 0, atlas->TexWidth * atlas->TexHeight);
+ spc.pixels = atlas->TexPixelsAlpha8;
+ spc.height = atlas->TexHeight;
+
+ // Second pass: render font characters
+ for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
{
- ImFontConfig& cfg = ConfigData[input_i];
+ ImFontConfig& cfg = atlas->ConfigData[input_i];
ImFontTempBuildData& tmp = tmp_array[input_i];
stbtt_PackSetOversampling(&spc, cfg.OversampleH, cfg.OversampleV);
stbtt_PackFontRangesRenderIntoRects(&spc, &tmp.FontInfo, tmp.Ranges, tmp.RangesCount, tmp.Rects);
+ if (cfg.RasterizerMultiply != 1.0f)
+ {
+ unsigned char multiply_table[256];
+ ImFontAtlasBuildMultiplyCalcLookupTable(multiply_table, cfg.RasterizerMultiply);
+ for (const stbrp_rect* r = tmp.Rects; r != tmp.Rects + tmp.RectsCount; r++)
+ if (r->was_packed)
+ ImFontAtlasBuildMultiplyRectAlpha8(multiply_table, spc.pixels, r->x, r->y, r->w, r->h, spc.stride_in_bytes);
+ }
tmp.Rects = NULL;
}
@@ -1384,32 +1777,22 @@ bool ImFontAtlas::Build()
buf_rects = NULL;
// Third pass: setup ImFont and glyphs for runtime
- for (int input_i = 0; input_i < ConfigData.Size; input_i++)
+ for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
{
- ImFontConfig& cfg = ConfigData[input_i];
+ ImFontConfig& cfg = atlas->ConfigData[input_i];
ImFontTempBuildData& tmp = tmp_array[input_i];
- ImFont* dst_font = cfg.DstFont;
+ ImFont* dst_font = cfg.DstFont; // We can have multiple input fonts writing into a same destination font (when using MergeMode=true)
- float font_scale = stbtt_ScaleForPixelHeight(&tmp.FontInfo, cfg.SizePixels);
+ const float font_scale = stbtt_ScaleForPixelHeight(&tmp.FontInfo, cfg.SizePixels);
int unscaled_ascent, unscaled_descent, unscaled_line_gap;
stbtt_GetFontVMetrics(&tmp.FontInfo, &unscaled_ascent, &unscaled_descent, &unscaled_line_gap);
- float ascent = unscaled_ascent * font_scale;
- float descent = unscaled_descent * font_scale;
- if (!cfg.MergeMode)
- {
- dst_font->ContainerAtlas = this;
- dst_font->ConfigData = &cfg;
- dst_font->ConfigDataCount = 0;
- dst_font->FontSize = cfg.SizePixels;
- dst_font->Ascent = ascent;
- dst_font->Descent = descent;
- dst_font->Glyphs.resize(0);
- }
- dst_font->ConfigDataCount++;
- float off_y = (cfg.MergeMode && cfg.MergeGlyphCenterV) ? (ascent - dst_font->Ascent) * 0.5f : 0.0f;
+ const float ascent = unscaled_ascent * font_scale;
+ const float descent = unscaled_descent * font_scale;
+ ImFontAtlasBuildSetupFont(atlas, dst_font, &cfg, ascent, descent);
+ const float off_x = cfg.GlyphOffset.x;
+ const float off_y = cfg.GlyphOffset.y + (float)(int)(dst_font->Ascent + 0.5f);
- dst_font->FallbackGlyph = NULL; // Always clear fallback so FindGlyph can return NULL. It will be set again in BuildLookupTable()
for (int i = 0; i < tmp.RangesCount; i++)
{
stbtt_pack_range& range = tmp.Ranges[i];
@@ -1425,21 +1808,10 @@ bool ImFontAtlas::Build()
stbtt_aligned_quad q;
float dummy_x = 0.0f, dummy_y = 0.0f;
- stbtt_GetPackedQuad(range.chardata_for_range, TexWidth, TexHeight, char_idx, &dummy_x, &dummy_y, &q, 0);
-
- dst_font->Glyphs.resize(dst_font->Glyphs.Size + 1);
- ImFont::Glyph& glyph = dst_font->Glyphs.back();
- glyph.Codepoint = (ImWchar)codepoint;
- glyph.X0 = q.x0; glyph.Y0 = q.y0; glyph.X1 = q.x1; glyph.Y1 = q.y1;
- glyph.U0 = q.s0; glyph.V0 = q.t0; glyph.U1 = q.s1; glyph.V1 = q.t1;
- glyph.Y0 += (float)(int)(dst_font->Ascent + off_y + 0.5f);
- glyph.Y1 += (float)(int)(dst_font->Ascent + off_y + 0.5f);
- glyph.XAdvance = (pc.xadvance + cfg.GlyphExtraSpacing.x); // Bake spacing into XAdvance
- if (cfg.PixelSnapH)
- glyph.XAdvance = (float)(int)(glyph.XAdvance + 0.5f);
+ stbtt_GetPackedQuad(range.chardata_for_range, atlas->TexWidth, atlas->TexHeight, char_idx, &dummy_x, &dummy_y, &q, 0);
+ dst_font->AddGlyph((ImWchar)codepoint, q.x0 + off_x, q.y0 + off_y, q.x1 + off_x, q.y1 + off_y, q.s0, q.t0, q.s1, q.t1, pc.xadvance);
}
}
- cfg.DstFont->BuildLookupTable();
}
// Cleanup temporaries
@@ -1447,104 +1819,119 @@ bool ImFontAtlas::Build()
ImGui::MemFree(buf_ranges);
ImGui::MemFree(tmp_array);
- // Render into our custom data block
- RenderCustomTexData(1, &extra_rects);
+ ImFontAtlasBuildFinish(atlas);
return true;
}
-void ImFontAtlas::RenderCustomTexData(int pass, void* p_rects)
-{
- // A work of art lies ahead! (. = white layer, X = black layer, others are blank)
- // The white texels on the top left are the ones we'll use everywhere in ImGui to render filled shapes.
- const int TEX_DATA_W = 90;
- const int TEX_DATA_H = 27;
- const char texture_data[TEX_DATA_W*TEX_DATA_H+1] =
- {
- "..- -XXXXXXX- X - X -XXXXXXX - XXXXXXX"
- "..- -X.....X- X.X - X.X -X.....X - X.....X"
- "--- -XXX.XXX- X...X - X...X -X....X - X....X"
- "X - X.X - X.....X - X.....X -X...X - X...X"
- "XX - X.X -X.......X- X.......X -X..X.X - X.X..X"
- "X.X - X.X -XXXX.XXXX- XXXX.XXXX -X.X X.X - X.X X.X"
- "X..X - X.X - X.X - X.X -XX X.X - X.X XX"
- "X...X - X.X - X.X - XX X.X XX - X.X - X.X "
- "X....X - X.X - X.X - X.X X.X X.X - X.X - X.X "
- "X.....X - X.X - X.X - X..X X.X X..X - X.X - X.X "
- "X......X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X XX-XX X.X "
- "X.......X - X.X - X.X -X.....................X- X.X X.X-X.X X.X "
- "X........X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X..X-X..X.X "
- "X.........X -XXX.XXX- X.X - X..X X.X X..X - X...X-X...X "
- "X..........X-X.....X- X.X - X.X X.X X.X - X....X-X....X "
- "X......XXXXX-XXXXXXX- X.X - XX X.X XX - X.....X-X.....X "
- "X...X..X --------- X.X - X.X - XXXXXXX-XXXXXXX "
- "X..X X..X - -XXXX.XXXX- XXXX.XXXX ------------------------------------"
- "X.X X..X - -X.......X- X.......X - XX XX - "
- "XX X..X - - X.....X - X.....X - X.X X.X - "
- " X..X - X...X - X...X - X..X X..X - "
- " XX - X.X - X.X - X...XXXXXXXXXXXXX...X - "
- "------------ - X - X -X.....................X- "
- " ----------------------------------- X...XXXXXXXXXXXXX...X - "
- " - X..X X..X - "
- " - X.X X.X - "
- " - XX XX - "
- };
+void ImFontAtlasBuildRegisterDefaultCustomRects(ImFontAtlas* atlas)
+{
+ if (atlas->CustomRectIds[0] < 0)
+ atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_ID, FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF*2+1, FONT_ATLAS_DEFAULT_TEX_DATA_H);
+}
- ImVector<stbrp_rect>& rects = *(ImVector<stbrp_rect>*)p_rects;
- if (pass == 0)
+void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent)
+{
+ if (!font_config->MergeMode)
{
- // Request rectangles
- stbrp_rect r;
- memset(&r, 0, sizeof(r));
- r.w = (TEX_DATA_W*2)+1;
- r.h = TEX_DATA_H+1;
- rects.push_back(r);
+ font->ClearOutputData();
+ font->FontSize = font_config->SizePixels;
+ font->ConfigData = font_config;
+ font->ContainerAtlas = atlas;
+ font->Ascent = ascent;
+ font->Descent = descent;
}
- else if (pass == 1)
- {
- // Render/copy pixels
- const stbrp_rect& r = rects[0];
- for (int y = 0, n = 0; y < TEX_DATA_H; y++)
- for (int x = 0; x < TEX_DATA_W; x++, n++)
- {
- const int offset0 = (int)(r.x + x) + (int)(r.y + y) * TexWidth;
- const int offset1 = offset0 + 1 + TEX_DATA_W;
- TexPixelsAlpha8[offset0] = texture_data[n] == '.' ? 0xFF : 0x00;
- TexPixelsAlpha8[offset1] = texture_data[n] == 'X' ? 0xFF : 0x00;
- }
- const ImVec2 tex_uv_scale(1.0f / TexWidth, 1.0f / TexHeight);
- TexUvWhitePixel = ImVec2((r.x + 0.5f) * tex_uv_scale.x, (r.y + 0.5f) * tex_uv_scale.y);
+ font->ConfigDataCount++;
+}
+
+void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* pack_context_opaque)
+{
+ stbrp_context* pack_context = (stbrp_context*)pack_context_opaque;
- // Setup mouse cursors
- const ImVec2 cursor_datas[ImGuiMouseCursor_Count_][3] =
+ ImVector<ImFontAtlas::CustomRect>& user_rects = atlas->CustomRects;
+ IM_ASSERT(user_rects.Size >= 1); // We expect at least the default custom rects to be registered, else something went wrong.
+
+ ImVector<stbrp_rect> pack_rects;
+ pack_rects.resize(user_rects.Size);
+ memset(pack_rects.Data, 0, sizeof(stbrp_rect) * user_rects.Size);
+ for (int i = 0; i < user_rects.Size; i++)
+ {
+ pack_rects[i].w = user_rects[i].Width;
+ pack_rects[i].h = user_rects[i].Height;
+ }
+ stbrp_pack_rects(pack_context, &pack_rects[0], pack_rects.Size);
+ for (int i = 0; i < pack_rects.Size; i++)
+ if (pack_rects[i].was_packed)
{
- // Pos ........ Size ......... Offset ......
- { ImVec2(0,3), ImVec2(12,19), ImVec2( 0, 0) }, // ImGuiMouseCursor_Arrow
- { ImVec2(13,0), ImVec2(7,16), ImVec2( 4, 8) }, // ImGuiMouseCursor_TextInput
- { ImVec2(31,0), ImVec2(23,23), ImVec2(11,11) }, // ImGuiMouseCursor_Move
- { ImVec2(21,0), ImVec2( 9,23), ImVec2( 5,11) }, // ImGuiMouseCursor_ResizeNS
- { ImVec2(55,18),ImVec2(23, 9), ImVec2(11, 5) }, // ImGuiMouseCursor_ResizeEW
- { ImVec2(73,0), ImVec2(17,17), ImVec2( 9, 9) }, // ImGuiMouseCursor_ResizeNESW
- { ImVec2(55,0), ImVec2(17,17), ImVec2( 9, 9) }, // ImGuiMouseCursor_ResizeNWSE
- };
-
- for (int type = 0; type < ImGuiMouseCursor_Count_; type++)
+ user_rects[i].X = pack_rects[i].x;
+ user_rects[i].Y = pack_rects[i].y;
+ IM_ASSERT(pack_rects[i].w == user_rects[i].Width && pack_rects[i].h == user_rects[i].Height);
+ atlas->TexHeight = ImMax(atlas->TexHeight, pack_rects[i].y + pack_rects[i].h);
+ }
+}
+
+static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
+{
+ IM_ASSERT(atlas->CustomRectIds[0] >= 0);
+ ImFontAtlas::CustomRect& r = atlas->CustomRects[atlas->CustomRectIds[0]];
+ IM_ASSERT(r.ID == FONT_ATLAS_DEFAULT_TEX_DATA_ID);
+ IM_ASSERT(r.Width == FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF*2+1);
+ IM_ASSERT(r.Height == FONT_ATLAS_DEFAULT_TEX_DATA_H);
+ IM_ASSERT(r.IsPacked());
+ IM_ASSERT(atlas->TexPixelsAlpha8 != NULL);
+
+ // Render/copy pixels
+ for (int y = 0, n = 0; y < FONT_ATLAS_DEFAULT_TEX_DATA_H; y++)
+ for (int x = 0; x < FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF; x++, n++)
{
- ImGuiMouseCursorData& cursor_data = GImGui->MouseCursorData[type];
- ImVec2 pos = cursor_datas[type][0] + ImVec2((float)r.x, (float)r.y);
- const ImVec2 size = cursor_datas[type][1];
- cursor_data.Type = type;
- cursor_data.Size = size;
- cursor_data.HotOffset = cursor_datas[type][2];
- cursor_data.TexUvMin[0] = (pos) * tex_uv_scale;
- cursor_data.TexUvMax[0] = (pos + size) * tex_uv_scale;
- pos.x += TEX_DATA_W+1;
- cursor_data.TexUvMin[1] = (pos) * tex_uv_scale;
- cursor_data.TexUvMax[1] = (pos + size) * tex_uv_scale;
+ const int offset0 = (int)(r.X + x) + (int)(r.Y + y) * atlas->TexWidth;
+ const int offset1 = offset0 + FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF + 1;
+ atlas->TexPixelsAlpha8[offset0] = FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[n] == '.' ? 0xFF : 0x00;
+ atlas->TexPixelsAlpha8[offset1] = FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[n] == 'X' ? 0xFF : 0x00;
}
+ const ImVec2 tex_uv_scale(1.0f / atlas->TexWidth, 1.0f / atlas->TexHeight);
+ atlas->TexUvWhitePixel = ImVec2((r.X + 0.5f) * tex_uv_scale.x, (r.Y + 0.5f) * tex_uv_scale.y);
+
+ // Setup mouse cursors
+ for (int type = 0; type < ImGuiMouseCursor_Count_; type++)
+ {
+ ImGuiMouseCursorData& cursor_data = GImGui->MouseCursorData[type];
+ ImVec2 pos = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[type][0] + ImVec2((float)r.X, (float)r.Y);
+ const ImVec2 size = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[type][1];
+ cursor_data.Type = type;
+ cursor_data.Size = size;
+ cursor_data.HotOffset = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[type][2];
+ cursor_data.TexUvMin[0] = (pos) * tex_uv_scale;
+ cursor_data.TexUvMax[0] = (pos + size) * tex_uv_scale;
+ pos.x += FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF + 1;
+ cursor_data.TexUvMin[1] = (pos) * tex_uv_scale;
+ cursor_data.TexUvMax[1] = (pos + size) * tex_uv_scale;
}
}
+void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
+{
+ // Render into our custom data block
+ ImFontAtlasBuildRenderDefaultTexData(atlas);
+
+ // Register custom rectangle glyphs
+ for (int i = 0; i < atlas->CustomRects.Size; i++)
+ {
+ const ImFontAtlas::CustomRect& r = atlas->CustomRects[i];
+ if (r.Font == NULL || r.ID > 0x10000)
+ continue;
+
+ IM_ASSERT(r.Font->ContainerAtlas == atlas);
+ ImVec2 uv0, uv1;
+ atlas->CalcCustomRectUV(&r, &uv0, &uv1);
+ r.Font->AddGlyph((ImWchar)r.ID, r.GlyphOffset.x, r.GlyphOffset.y, r.GlyphOffset.x + r.Width, r.GlyphOffset.y + r.Height, uv0.x, uv0.y, uv1.x, uv1.y, r.GlyphAdvanceX);
+ }
+
+ // Build all fonts lookup tables
+ for (int i = 0; i < atlas->Fonts.Size; i++)
+ atlas->Fonts[i]->BuildLookupTable();
+}
+
// Retrieve list of range (2 int per range, values are inclusive)
const ImWchar* ImFontAtlas::GetGlyphRangesDefault()
{
@@ -1585,7 +1972,10 @@ const ImWchar* ImFontAtlas::GetGlyphRangesChinese()
const ImWchar* ImFontAtlas::GetGlyphRangesJapanese()
{
// Store the 1946 ideograms code points as successive offsets from the initial unicode codepoint 0x4E00. Each offset has an implicit +1.
- // This encoding helps us reduce the source code size.
+ // This encoding is designed to helps us reduce the source code size.
+ // FIXME: Source a list of the revised 2136 joyo kanji list from 2010 and rebuild this.
+ // The current list was sourced from http://theinstructionlimit.com/author/renaudbedardrenaudbedard/page/3
+ // Note that you may use ImFontAtlas::GlyphRangesBuilder to create your own ranges, by merging existing ranges or adding new characters.
static const short offsets_from_0x4E00[] =
{
-1,0,1,3,0,0,0,0,1,0,5,1,1,0,7,4,6,10,0,1,9,9,7,1,3,19,1,10,7,1,0,1,0,5,1,0,6,4,2,6,0,0,12,6,8,0,3,5,0,1,0,9,0,0,8,1,1,3,4,5,13,0,0,8,2,17,
@@ -1662,6 +2052,7 @@ const ImWchar* ImFontAtlas::GetGlyphRangesThai()
static const ImWchar ranges[] =
{
0x0020, 0x00FF, // Basic Latin
+ 0x2010, 0x205E, // Punctuations
0x0E00, 0x0E7F, // Thai
0,
};
@@ -1669,6 +2060,44 @@ const ImWchar* ImFontAtlas::GetGlyphRangesThai()
}
//-----------------------------------------------------------------------------
+// ImFontAtlas::GlyphRangesBuilder
+//-----------------------------------------------------------------------------
+
+void ImFontAtlas::GlyphRangesBuilder::AddText(const char* text, const char* text_end)
+{
+ while (text_end ? (text < text_end) : *text)
+ {
+ unsigned int c = 0;
+ int c_len = ImTextCharFromUtf8(&c, text, text_end);
+ text += c_len;
+ if (c_len == 0)
+ break;
+ if (c < 0x10000)
+ AddChar((ImWchar)c);
+ }
+}
+
+void ImFontAtlas::GlyphRangesBuilder::AddRanges(const ImWchar* ranges)
+{
+ for (; ranges[0]; ranges += 2)
+ for (ImWchar c = ranges[0]; c <= ranges[1]; c++)
+ AddChar(c);
+}
+
+void ImFontAtlas::GlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges)
+{
+ for (int n = 0; n < 0x10000; n++)
+ if (GetBit(n))
+ {
+ out_ranges->push_back((ImWchar)n);
+ while (n < 0x10000 && GetBit(n + 1))
+ n++;
+ out_ranges->push_back((ImWchar)n);
+ }
+ out_ranges->push_back(0);
+}
+
+//-----------------------------------------------------------------------------
// ImFont
//-----------------------------------------------------------------------------
@@ -1676,7 +2105,8 @@ ImFont::ImFont()
{
Scale = 1.0f;
FallbackChar = (ImWchar)'?';
- Clear();
+ DisplayOffset = ImVec2(0.0f, 1.0f);
+ ClearOutputData();
}
ImFont::~ImFont()
@@ -1689,22 +2119,22 @@ ImFont::~ImFont()
if (g.Font == this)
g.Font = NULL;
*/
- Clear();
+ ClearOutputData();
}
-void ImFont::Clear()
+void ImFont::ClearOutputData()
{
FontSize = 0.0f;
- DisplayOffset = ImVec2(0.0f, 1.0f);
- ConfigData = NULL;
- ConfigDataCount = 0;
- Ascent = Descent = 0.0f;
- ContainerAtlas = NULL;
Glyphs.clear();
- FallbackGlyph = NULL;
- FallbackXAdvance = 0.0f;
- IndexXAdvance.clear();
+ IndexAdvanceX.clear();
IndexLookup.clear();
+ FallbackGlyph = NULL;
+ FallbackAdvanceX = 0.0f;
+ ConfigDataCount = 0;
+ ConfigData = NULL;
+ ContainerAtlas = NULL;
+ Ascent = Descent = 0.0f;
+ MetricsTotalSurface = 0;
}
void ImFont::BuildLookupTable()
@@ -1714,13 +2144,13 @@ void ImFont::BuildLookupTable()
max_codepoint = ImMax(max_codepoint, (int)Glyphs[i].Codepoint);
IM_ASSERT(Glyphs.Size < 0xFFFF); // -1 is reserved
- IndexXAdvance.clear();
+ IndexAdvanceX.clear();
IndexLookup.clear();
GrowIndex(max_codepoint + 1);
for (int i = 0; i < Glyphs.Size; i++)
{
int codepoint = (int)Glyphs[i].Codepoint;
- IndexXAdvance[codepoint] = Glyphs[i].XAdvance;
+ IndexAdvanceX[codepoint] = Glyphs[i].AdvanceX;
IndexLookup[codepoint] = (unsigned short)i;
}
@@ -1730,20 +2160,20 @@ void ImFont::BuildLookupTable()
{
if (Glyphs.back().Codepoint != '\t') // So we can call this function multiple times
Glyphs.resize(Glyphs.Size + 1);
- ImFont::Glyph& tab_glyph = Glyphs.back();
+ ImFontGlyph& tab_glyph = Glyphs.back();
tab_glyph = *FindGlyph((unsigned short)' ');
tab_glyph.Codepoint = '\t';
- tab_glyph.XAdvance *= 4;
- IndexXAdvance[(int)tab_glyph.Codepoint] = (float)tab_glyph.XAdvance;
+ tab_glyph.AdvanceX *= 4;
+ IndexAdvanceX[(int)tab_glyph.Codepoint] = (float)tab_glyph.AdvanceX;
IndexLookup[(int)tab_glyph.Codepoint] = (unsigned short)(Glyphs.Size-1);
}
FallbackGlyph = NULL;
FallbackGlyph = FindGlyph(FallbackChar);
- FallbackXAdvance = FallbackGlyph ? FallbackGlyph->XAdvance : 0.0f;
+ FallbackAdvanceX = FallbackGlyph ? FallbackGlyph->AdvanceX : 0.0f;
for (int i = 0; i < max_codepoint + 1; i++)
- if (IndexXAdvance[i] < 0.0f)
- IndexXAdvance[i] = FallbackXAdvance;
+ if (IndexAdvanceX[i] < 0.0f)
+ IndexAdvanceX[i] = FallbackAdvanceX;
}
void ImFont::SetFallbackChar(ImWchar c)
@@ -1754,17 +2184,33 @@ void ImFont::SetFallbackChar(ImWchar c)
void ImFont::GrowIndex(int new_size)
{
- IM_ASSERT(IndexXAdvance.Size == IndexLookup.Size);
- int old_size = IndexLookup.Size;
- if (new_size <= old_size)
+ IM_ASSERT(IndexAdvanceX.Size == IndexLookup.Size);
+ if (new_size <= IndexLookup.Size)
return;
- IndexXAdvance.resize(new_size);
- IndexLookup.resize(new_size);
- for (int i = old_size; i < new_size; i++)
- {
- IndexXAdvance[i] = -1.0f;
- IndexLookup[i] = (unsigned short)-1;
- }
+ IndexAdvanceX.resize(new_size, -1.0f);
+ IndexLookup.resize(new_size, (unsigned short)-1);
+}
+
+void ImFont::AddGlyph(ImWchar codepoint, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x)
+{
+ Glyphs.resize(Glyphs.Size + 1);
+ ImFontGlyph& glyph = Glyphs.back();
+ glyph.Codepoint = (ImWchar)codepoint;
+ glyph.X0 = x0;
+ glyph.Y0 = y0;
+ glyph.X1 = x1;
+ glyph.Y1 = y1;
+ glyph.U0 = u0;
+ glyph.V0 = v0;
+ glyph.U1 = u1;
+ glyph.V1 = v1;
+ glyph.AdvanceX = advance_x + ConfigData->GlyphExtraSpacing.x; // Bake spacing into AdvanceX
+
+ if (ConfigData->PixelSnapH)
+ glyph.AdvanceX = (float)(int)(glyph.AdvanceX + 0.5f);
+
+ // Compute rough surface usage metrics (+1 to account for average padding, +0.99 to round)
+ MetricsTotalSurface += (int)((glyph.U1 - glyph.U0) * ContainerAtlas->TexWidth + 1.99f) * (int)((glyph.V1 - glyph.V0) * ContainerAtlas->TexHeight + 1.99f);
}
void ImFont::AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst)
@@ -1779,10 +2225,10 @@ void ImFont::AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst)
GrowIndex(dst + 1);
IndexLookup[dst] = (src < index_size) ? IndexLookup.Data[src] : (unsigned short)-1;
- IndexXAdvance[dst] = (src < index_size) ? IndexXAdvance.Data[src] : 1.0f;
+ IndexAdvanceX[dst] = (src < index_size) ? IndexAdvanceX.Data[src] : 1.0f;
}
-const ImFont::Glyph* ImFont::FindGlyph(unsigned short c) const
+const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const
{
if (c < IndexLookup.Size)
{
@@ -1813,6 +2259,7 @@ const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const c
float line_width = 0.0f;
float word_width = 0.0f;
float blank_width = 0.0f;
+ wrap_width /= scale; // We work with unscaled widths to avoid scaling every characters
const char* word_end = text;
const char* prev_word_end = NULL;
@@ -1846,7 +2293,7 @@ const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const c
}
}
- const float char_width = ((int)c < IndexXAdvance.Size ? IndexXAdvance[(int)c] : FallbackXAdvance) * scale;
+ const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX[(int)c] : FallbackAdvanceX);
if (ImCharIsSpace(c))
{
if (inside_word)
@@ -1963,7 +2410,7 @@ ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_width, cons
continue;
}
- const float char_width = ((int)c < IndexXAdvance.Size ? IndexXAdvance[(int)c] : FallbackXAdvance) * scale;
+ const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX[(int)c] : FallbackAdvanceX) * scale;
if (line_width + char_width >= max_width)
{
s = prev_s;
@@ -1989,15 +2436,13 @@ void ImFont::RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
{
if (c == ' ' || c == '\t' || c == '\n' || c == '\r') // Match behavior of RenderText(), those 4 codepoints are hard-coded.
return;
- if (const Glyph* glyph = FindGlyph(c))
+ if (const ImFontGlyph* glyph = FindGlyph(c))
{
float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f;
pos.x = (float)(int)pos.x + DisplayOffset.x;
pos.y = (float)(int)pos.y + DisplayOffset.y;
- ImVec2 pos_tl(pos.x + glyph->X0 * scale, pos.y + glyph->Y0 * scale);
- ImVec2 pos_br(pos.x + glyph->X1 * scale, pos.y + glyph->Y1 * scale);
draw_list->PrimReserve(6, 4);
- draw_list->PrimRectUV(pos_tl, pos_br, ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col);
+ draw_list->PrimRectUV(ImVec2(pos.x + glyph->X0 * scale, pos.y + glyph->Y0 * scale), ImVec2(pos.x + glyph->X1 * scale, pos.y + glyph->Y1 * scale), ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col);
}
}
@@ -2095,9 +2540,9 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
}
float char_width = 0.0f;
- if (const Glyph* glyph = FindGlyph((unsigned short)c))
+ if (const ImFontGlyph* glyph = FindGlyph((unsigned short)c))
{
- char_width = glyph->XAdvance * scale;
+ char_width = glyph->AdvanceX * scale;
// Arbitrarily assume that both space and tabs are empty glyphs as an optimization
if (c != ' ' && c != '\t')
@@ -2145,8 +2590,7 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
}
}
- // We are NOT calling PrimRectUV() here because non-inlined causes too much overhead in a debug build.
- // Inlined here:
+ // We are NOT calling PrimRectUV() here because non-inlined causes too much overhead in a debug builds. Inlined here:
{
idx_write[0] = (ImDrawIdx)(vtx_current_idx); idx_write[1] = (ImDrawIdx)(vtx_current_idx+1); idx_write[2] = (ImDrawIdx)(vtx_current_idx+2);
idx_write[3] = (ImDrawIdx)(vtx_current_idx); idx_write[4] = (ImDrawIdx)(vtx_current_idx+2); idx_write[5] = (ImDrawIdx)(vtx_current_idx+3);
@@ -2175,6 +2619,78 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
}
//-----------------------------------------------------------------------------
+// Internals Drawing Helpers
+//-----------------------------------------------------------------------------
+
+static inline float ImAcos01(float x)
+{
+ if (x <= 0.0f) return IM_PI * 0.5f;
+ if (x >= 1.0f) return 0.0f;
+ return acosf(x);
+ //return (-0.69813170079773212f * x * x - 0.87266462599716477f) * x + 1.5707963267948966f; // Cheap approximation, may be enough for what we do.
+}
+
+// FIXME: Cleanup and move code to ImDrawList.
+void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding)
+{
+ if (x_end_norm == x_start_norm)
+ return;
+ if (x_start_norm > x_end_norm)
+ ImSwap(x_start_norm, x_end_norm);
+
+ ImVec2 p0 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_start_norm), rect.Min.y);
+ ImVec2 p1 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_end_norm), rect.Max.y);
+ if (rounding == 0.0f)
+ {
+ draw_list->AddRectFilled(p0, p1, col, 0.0f);
+ return;
+ }
+
+ rounding = ImClamp(ImMin((rect.Max.x - rect.Min.x) * 0.5f, (rect.Max.y - rect.Min.y) * 0.5f) - 1.0f, 0.0f, rounding);
+ const float inv_rounding = 1.0f / rounding;
+ const float arc0_b = ImAcos01(1.0f - (p0.x - rect.Min.x) * inv_rounding);
+ const float arc0_e = ImAcos01(1.0f - (p1.x - rect.Min.x) * inv_rounding);
+ const float x0 = ImMax(p0.x, rect.Min.x + rounding);
+ if (arc0_b == arc0_e)
+ {
+ draw_list->PathLineTo(ImVec2(x0, p1.y));
+ draw_list->PathLineTo(ImVec2(x0, p0.y));
+ }
+ else if (arc0_b == 0.0f && arc0_e == IM_PI*0.5f)
+ {
+ draw_list->PathArcToFast(ImVec2(x0, p1.y - rounding), rounding, 3, 6); // BL
+ draw_list->PathArcToFast(ImVec2(x0, p0.y + rounding), rounding, 6, 9); // TR
+ }
+ else
+ {
+ draw_list->PathArcTo(ImVec2(x0, p1.y - rounding), rounding, IM_PI - arc0_e, IM_PI - arc0_b, 3); // BL
+ draw_list->PathArcTo(ImVec2(x0, p0.y + rounding), rounding, IM_PI + arc0_b, IM_PI + arc0_e, 3); // TR
+ }
+ if (p1.x > rect.Min.x + rounding)
+ {
+ const float arc1_b = ImAcos01(1.0f - (rect.Max.x - p1.x) * inv_rounding);
+ const float arc1_e = ImAcos01(1.0f - (rect.Max.x - p0.x) * inv_rounding);
+ const float x1 = ImMin(p1.x, rect.Max.x - rounding);
+ if (arc1_b == arc1_e)
+ {
+ draw_list->PathLineTo(ImVec2(x1, p0.y));
+ draw_list->PathLineTo(ImVec2(x1, p1.y));
+ }
+ else if (arc1_b == 0.0f && arc1_e == IM_PI*0.5f)
+ {
+ draw_list->PathArcToFast(ImVec2(x1, p0.y + rounding), rounding, 9, 12); // TR
+ draw_list->PathArcToFast(ImVec2(x1, p1.y - rounding), rounding, 0, 3); // BR
+ }
+ else
+ {
+ draw_list->PathArcTo(ImVec2(x1, p0.y + rounding), rounding, -arc1_e, -arc1_b, 3); // TR
+ draw_list->PathArcTo(ImVec2(x1, p1.y - rounding), rounding, +arc1_b, +arc1_e, 3); // BR
+ }
+ }
+ draw_list->PathFillConvex(col);
+}
+
+//-----------------------------------------------------------------------------
// DEFAULT FONT DATA
//-----------------------------------------------------------------------------
// Compressed with stb_compress() then converted to a C array.
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h
index effc5ce7fb2..80d18ac5fe2 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h
@@ -1,9 +1,10 @@
-// dear imgui, v1.50 WIP
+// dear imgui, v1.53 WIP
// (internals)
// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
-// Implement maths operators for ImVec2 (disabled by default to not collide with using IM_VEC2_CLASS_EXTRA along with your own math types+operators)
+// Set:
// #define IMGUI_DEFINE_MATH_OPERATORS
+// To implement maths operators for ImVec2 (disabled by default to not collide with using IM_VEC2_CLASS_EXTRA along with your own math types+operators)
#pragma once
@@ -37,15 +38,16 @@ struct ImGuiGroupData;
struct ImGuiSimpleColumns;
struct ImGuiDrawContext;
struct ImGuiTextEditState;
-struct ImGuiIniData;
struct ImGuiMouseCursorData;
struct ImGuiPopupRef;
struct ImGuiWindow;
+struct ImGuiWindowSettings;
-typedef int ImGuiLayoutType; // enum ImGuiLayoutType_
-typedef int ImGuiButtonFlags; // enum ImGuiButtonFlags_
-typedef int ImGuiTreeNodeFlags; // enum ImGuiTreeNodeFlags_
-typedef int ImGuiSliderFlags; // enum ImGuiSliderFlags_
+typedef int ImGuiLayoutType; // enum: horizontal or vertical // enum ImGuiLayoutType_
+typedef int ImGuiButtonFlags; // flags: for ButtonEx(), ButtonBehavior() // enum ImGuiButtonFlags_
+typedef int ImGuiItemFlags; // flags: for PushItemFlag() // enum ImGuiItemFlags_
+typedef int ImGuiSeparatorFlags; // flags: for Separator() - internal // enum ImGuiSeparatorFlags_
+typedef int ImGuiSliderFlags; // flags: for SliderBehavior() // enum ImGuiSliderFlags_
//-------------------------------------------------------------------------
// STB libraries
@@ -75,9 +77,8 @@ extern IMGUI_API ImGuiContext* GImGui; // Current implicit ImGui context pointe
// Helpers
//-----------------------------------------------------------------------------
-#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR)/sizeof(*_ARR)))
-#define IM_PI 3.14159265358979323846f
-#define IM_OFFSETOF(_TYPE,_ELM) ((size_t)&(((_TYPE*)0)->_ELM))
+#define IM_PI 3.14159265358979323846f
+#define IM_OFFSETOF(_TYPE,_ELM) ((size_t)&(((_TYPE*)0)->_ELM))
// Helpers: UTF-8 <> wchar
IMGUI_API int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end); // return output UTF-8 bytes count
@@ -89,20 +90,28 @@ IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, cons
// Helpers: Misc
IMGUI_API ImU32 ImHash(const void* data, int data_size, ImU32 seed = 0); // Pass data_size==0 for zero-terminated strings
IMGUI_API void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, int* out_file_size = NULL, int padding_bytes = 0);
-IMGUI_API FILE* ImFileOpen(const char* filename, const char* file_open_mode);
-IMGUI_API bool ImIsPointInTriangle(const ImVec2& p, const ImVec2& a, const ImVec2& b, const ImVec2& c);
+IMGUI_API FILE* ImFileOpen(const char* filename, const char* file_open_mode);
static inline bool ImCharIsSpace(int c) { return c == ' ' || c == '\t' || c == 0x3000; }
+static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & (v - 1)) == 0; }
static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
+// Helpers: Geometry
+IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p);
+IMGUI_API bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
+IMGUI_API ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
+IMGUI_API void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w);
+
// Helpers: String
IMGUI_API int ImStricmp(const char* str1, const char* str2);
IMGUI_API int ImStrnicmp(const char* str1, const char* str2, int count);
+IMGUI_API void ImStrncpy(char* dst, const char* src, int count);
IMGUI_API char* ImStrdup(const char* str);
+IMGUI_API char* ImStrchrRange(const char* str_begin, const char* str_end, char c);
IMGUI_API int ImStrlenW(const ImWchar* str);
IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin); // Find beginning-of-line
IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end);
-IMGUI_API int ImFormatString(char* buf, int buf_size, const char* fmt, ...) IM_PRINTFARGS(3);
-IMGUI_API int ImFormatStringV(char* buf, int buf_size, const char* fmt, va_list args);
+IMGUI_API int ImFormatString(char* buf, int buf_size, const char* fmt, ...) IM_FMTARGS(3);
+IMGUI_API int ImFormatStringV(char* buf, int buf_size, const char* fmt, va_list args) IM_FMTLIST(3);
// Helpers: Math
// We are keeping those not leaking to the user by default, in the case the user has implicit cast operators between ImVec2 and its own types (when IM_VEC2_CLASS_EXTRA is defined)
@@ -117,7 +126,9 @@ static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs)
static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs) { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; }
static inline ImVec2& operator*=(ImVec2& lhs, const float rhs) { lhs.x *= rhs; lhs.y *= rhs; return lhs; }
static inline ImVec2& operator/=(ImVec2& lhs, const float rhs) { lhs.x /= rhs; lhs.y /= rhs; return lhs; }
+static inline ImVec4 operator+(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x+rhs.x, lhs.y+rhs.y, lhs.z+rhs.z, lhs.w+rhs.w); }
static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x-rhs.x, lhs.y-rhs.y, lhs.z-rhs.z, lhs.w-rhs.w); }
+static inline ImVec4 operator*(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x*rhs.x, lhs.y*rhs.y, lhs.z*rhs.z, lhs.w*rhs.w); }
#endif
static inline int ImMin(int lhs, int rhs) { return lhs < rhs ? lhs : rhs; }
@@ -130,22 +141,29 @@ static inline int ImClamp(int v, int mn, int mx)
static inline float ImClamp(float v, float mn, float mx) { return (v < mn) ? mn : (v > mx) ? mx : v; }
static inline ImVec2 ImClamp(const ImVec2& f, const ImVec2& mn, ImVec2 mx) { return ImVec2(ImClamp(f.x,mn.x,mx.x), ImClamp(f.y,mn.y,mx.y)); }
static inline float ImSaturate(float f) { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; }
+static inline void ImSwap(int& a, int& b) { int tmp = a; a = b; b = tmp; }
+static inline void ImSwap(float& a, float& b) { float tmp = a; a = b; b = tmp; }
+static inline int ImLerp(int a, int b, float t) { return (int)(a + (b - a) * t); }
static inline float ImLerp(float a, float b, float t) { return a + (b - a) * t; }
+static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t) { return ImVec2(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t); }
static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t) { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); }
+static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t) { return ImVec4(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t, a.w + (b.w - a.w) * t); }
static inline float ImLengthSqr(const ImVec2& lhs) { return lhs.x*lhs.x + lhs.y*lhs.y; }
static inline float ImLengthSqr(const ImVec4& lhs) { return lhs.x*lhs.x + lhs.y*lhs.y + lhs.z*lhs.z + lhs.w*lhs.w; }
static inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = lhs.x*lhs.x + lhs.y*lhs.y; if (d > 0.0f) return 1.0f / sqrtf(d); return fail_value; }
static inline float ImFloor(float f) { return (float)(int)f; }
-static inline ImVec2 ImFloor(ImVec2 v) { return ImVec2((float)(int)v.x, (float)(int)v.y); }
+static inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2((float)(int)v.x, (float)(int)v.y); }
+static inline float ImDot(const ImVec2& a, const ImVec2& b) { return a.x * b.x + a.y * b.y; }
+static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a) { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); }
+static inline float ImLinearSweep(float current, float target, float speed) { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; }
+static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); }
// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax.
// Defining a custom placement new() with a dummy parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions.
-#ifdef IMGUI_DEFINE_PLACEMENT_NEW
struct ImPlacementNewDummy {};
inline void* operator new(size_t, ImPlacementNewDummy, void* ptr) { return ptr; }
inline void operator delete(void*, ImPlacementNewDummy, void*) {}
#define IM_PLACEMENT_NEW(_PTR) new(ImPlacementNewDummy(), _PTR)
-#endif
//-----------------------------------------------------------------------------
// Types
@@ -154,16 +172,17 @@ inline void operator delete(void*, ImPlacementNewDummy, void*) {}
enum ImGuiButtonFlags_
{
ImGuiButtonFlags_Repeat = 1 << 0, // hold to repeat
- ImGuiButtonFlags_PressedOnClickRelease = 1 << 1, // (default) return pressed on click+release on same item (default if no PressedOn** flag is set)
- ImGuiButtonFlags_PressedOnClick = 1 << 2, // return pressed on click (default requires click+release)
- ImGuiButtonFlags_PressedOnRelease = 1 << 3, // return pressed on release (default requires click+release)
- ImGuiButtonFlags_PressedOnDoubleClick = 1 << 4, // return pressed on double-click (default requires click+release)
- ImGuiButtonFlags_FlattenChilds = 1 << 5, // allow interaction even if a child window is overlapping
- ImGuiButtonFlags_DontClosePopups = 1 << 6, // disable automatically closing parent popup on press
- ImGuiButtonFlags_Disabled = 1 << 7, // disable interaction
- ImGuiButtonFlags_AlignTextBaseLine = 1 << 8, // vertically align button to match text baseline - ButtonEx() only
+ ImGuiButtonFlags_PressedOnClickRelease = 1 << 1, // return true on click + release on same item [DEFAULT if no PressedOn* flag is set]
+ ImGuiButtonFlags_PressedOnClick = 1 << 2, // return true on click (default requires click+release)
+ ImGuiButtonFlags_PressedOnRelease = 1 << 3, // return true on release (default requires click+release)
+ ImGuiButtonFlags_PressedOnDoubleClick = 1 << 4, // return true on double-click (default requires click+release)
+ ImGuiButtonFlags_FlattenChilds = 1 << 5, // allow interactions even if a child window is overlapping
+ ImGuiButtonFlags_DontClosePopups = 1 << 6, // disable automatically closing parent popup on press // [UNUSED]
+ ImGuiButtonFlags_Disabled = 1 << 7, // disable interactions
+ ImGuiButtonFlags_AlignTextBaseLine = 1 << 8, // vertically align button to match text baseline (ButtonEx() only)
ImGuiButtonFlags_NoKeyModifiers = 1 << 9, // disable interaction if a key modifier is held
- ImGuiButtonFlags_AllowOverlapMode = 1 << 10 // require previous frame HoveredId to either match id or be null before being usable
+ ImGuiButtonFlags_AllowOverlapMode = 1 << 10, // require previous frame HoveredId to either match id or be null before being usable
+ ImGuiButtonFlags_NoHoldingActiveID = 1 << 11 // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
};
enum ImGuiSliderFlags_
@@ -171,6 +190,16 @@ enum ImGuiSliderFlags_
ImGuiSliderFlags_Vertical = 1 << 0
};
+enum ImGuiColumnsFlags_
+{
+ // Default: 0
+ ImGuiColumnsFlags_NoBorder = 1 << 0, // Disable column dividers
+ ImGuiColumnsFlags_NoResize = 1 << 1, // Disable resizing columns when clicking on the dividers
+ ImGuiColumnsFlags_NoPreserveWidths = 1 << 2, // Disable column width preservation when adjusting columns
+ ImGuiColumnsFlags_NoForceWithinWindow = 1 << 3, // Disable forcing columns to fit within window
+ ImGuiColumnsFlags_GrowParentContentsSize= 1 << 4, // (WIP) Restore pre-1.51 behavior of extending the parent window contents size but _without affecting the columns width at all_. Will eventually remove.
+};
+
enum ImGuiSelectableFlagsPrivate_
{
// NB: need to be in sync with last value of ImGuiSelectableFlags_
@@ -180,6 +209,12 @@ enum ImGuiSelectableFlagsPrivate_
ImGuiSelectableFlags_DrawFillAvailWidth = 1 << 6
};
+enum ImGuiSeparatorFlags_
+{
+ ImGuiSeparatorFlags_Horizontal = 1 << 0, // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar
+ ImGuiSeparatorFlags_Vertical = 1 << 1
+};
+
// FIXME: this is in development, not exposed/functional as a generic feature yet.
enum ImGuiLayoutType_
{
@@ -187,6 +222,13 @@ enum ImGuiLayoutType_
ImGuiLayoutType_Horizontal
};
+enum ImGuiAxis
+{
+ ImGuiAxis_None = -1,
+ ImGuiAxis_X = 0,
+ ImGuiAxis_Y = 1,
+};
+
enum ImGuiPlotType
{
ImGuiPlotType_Lines,
@@ -197,16 +239,16 @@ enum ImGuiDataType
{
ImGuiDataType_Int,
ImGuiDataType_Float,
- ImGuiDataType_Float2,
+ ImGuiDataType_Float2
};
-enum ImGuiCorner
+enum ImGuiDir
{
- ImGuiCorner_TopLeft = 1 << 0, // 1
- ImGuiCorner_TopRight = 1 << 1, // 2
- ImGuiCorner_BottomRight = 1 << 2, // 4
- ImGuiCorner_BottomLeft = 1 << 3, // 8
- ImGuiCorner_All = 0x0F
+ ImGuiDir_None = -1,
+ ImGuiDir_Left = 0,
+ ImGuiDir_Right = 1,
+ ImGuiDir_Up = 2,
+ ImGuiDir_Down = 3
};
// 2D axis aligned bounding-box
@@ -236,8 +278,8 @@ struct IMGUI_API ImRect
void Add(const ImRect& rhs) { if (Min.x > rhs.Min.x) Min.x = rhs.Min.x; if (Min.y > rhs.Min.y) Min.y = rhs.Min.y; if (Max.x < rhs.Max.x) Max.x = rhs.Max.x; if (Max.y < rhs.Max.y) Max.y = rhs.Max.y; }
void Expand(const float amount) { Min.x -= amount; Min.y -= amount; Max.x += amount; Max.y += amount; }
void Expand(const ImVec2& amount) { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; }
- void Reduce(const ImVec2& amount) { Min.x += amount.x; Min.y += amount.y; Max.x -= amount.x; Max.y -= amount.y; }
- void Clip(const ImRect& clip) { if (Min.x < clip.Min.x) Min.x = clip.Min.x; if (Min.y < clip.Min.y) Min.y = clip.Min.y; if (Max.x > clip.Max.x) Max.x = clip.Max.x; if (Max.y > clip.Max.y) Max.y = clip.Max.y; }
+ void Translate(const ImVec2& v) { Min.x += v.x; Min.y += v.y; Max.x += v.x; Max.y += v.y; }
+ void ClipWith(const ImRect& clip) { if (Min.x < clip.Min.x) Min.x = clip.Min.x; if (Min.y < clip.Min.y) Min.y = clip.Min.y; if (Max.x > clip.Max.x) Max.x = clip.Max.x; if (Max.y > clip.Max.y) Max.y = clip.Max.y; }
void Floor() { Min.x = (float)(int)Min.x; Min.y = (float)(int)Min.y; Max.x = (float)(int)Max.x; Max.y = (float)(int)Max.y; }
ImVec2 GetClosestPoint(ImVec2 p, bool on_edge) const
{
@@ -285,7 +327,8 @@ struct ImGuiGroupData
// Per column data for Columns()
struct ImGuiColumnData
{
- float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right)
+ float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right)
+ ImRect ClipRect;
//float IndentX;
};
@@ -328,13 +371,24 @@ struct IMGUI_API ImGuiTextEditState
};
// Data saved in imgui.ini file
-struct ImGuiIniData
+struct ImGuiWindowSettings
{
char* Name;
ImGuiID Id;
ImVec2 Pos;
ImVec2 Size;
bool Collapsed;
+
+ ImGuiWindowSettings() { Name = NULL; Id = 0; Pos = Size = ImVec2(0,0); Collapsed = false; }
+};
+
+struct ImGuiSettingsHandler
+{
+ const char* TypeName; // Short description stored in .ini file. Disallowed characters: '[' ']'
+ ImGuiID TypeHash; // == ImHash(TypeName, 0, 0)
+ void* (*ReadOpenFn)(ImGuiContext& ctx, const char* name);
+ void (*ReadLineFn)(ImGuiContext& ctx, void* entry, const char* line);
+ void (*WriteAllFn)(ImGuiContext& ctx, ImGuiTextBuffer* out_buf);
};
// Mouse cursor data (used when io.MouseDrawCursor is set)
@@ -366,8 +420,8 @@ struct ImGuiContext
ImGuiIO IO;
ImGuiStyle Style;
ImFont* Font; // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back()
- float FontSize; // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize()
- float FontBaseSize; // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Size of characters.
+ float FontSize; // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window.
+ float FontBaseSize; // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Base text height.
ImVec2 FontTexUvWhitePixel; // (Shortcut) == Font->TexUvWhitePixel
float Time;
@@ -376,25 +430,26 @@ struct ImGuiContext
int FrameCountRendered;
ImVector<ImGuiWindow*> Windows;
ImVector<ImGuiWindow*> WindowsSortBuffer;
- ImGuiWindow* CurrentWindow; // Being drawn into
ImVector<ImGuiWindow*> CurrentWindowStack;
- ImGuiWindow* FocusedWindow; // Will catch keyboard inputs
+ ImGuiStorage WindowsById;
+ ImGuiWindow* CurrentWindow; // Being drawn into
+ ImGuiWindow* NavWindow; // Nav/focused window for navigation
ImGuiWindow* HoveredWindow; // Will catch mouse inputs
ImGuiWindow* HoveredRootWindow; // Will catch mouse inputs (for focus/move only)
ImGuiID HoveredId; // Hovered widget
bool HoveredIdAllowOverlap;
ImGuiID HoveredIdPreviousFrame;
+ float HoveredIdTimer;
ImGuiID ActiveId; // Active widget
ImGuiID ActiveIdPreviousFrame;
- bool ActiveIdIsAlive;
+ float ActiveIdTimer;
+ bool ActiveIdIsAlive; // Active widget has been seen this frame
bool ActiveIdIsJustActivated; // Set at the time of activation for one frame
- bool ActiveIdAllowOverlap; // Set only by active widget
+ bool ActiveIdAllowOverlap; // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always)
ImVec2 ActiveIdClickOffset; // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior)
ImGuiWindow* ActiveIdWindow;
- ImGuiWindow* MovedWindow; // Track the child window we clicked on to move a window.
- ImGuiID MovedWindowMoveId; // == MovedWindow->RootWindow->MoveId
- ImVector<ImGuiIniData> Settings; // .ini Settings
- float SettingsDirtyTimer; // Save .ini Settings on disk when time reaches zero
+ ImGuiWindow* MovingWindow; // Track the child window we clicked on to move a window.
+ ImGuiID MovingWindowMoveId; // == MovingWindow->MoveId
ImVector<ImGuiColMod> ColorModifiers; // Stack for PushStyleColor()/PopStyleColor()
ImVector<ImGuiStyleMod> StyleModifiers; // Stack for PushStyleVar()/PopStyleVar()
ImVector<ImFont*> FontStack; // Stack for PushFont()/PopFont()
@@ -403,20 +458,21 @@ struct ImGuiContext
// Storage for SetNexWindow** and SetNextTreeNode*** functions
ImVec2 SetNextWindowPosVal;
+ ImVec2 SetNextWindowPosPivot;
ImVec2 SetNextWindowSizeVal;
ImVec2 SetNextWindowContentSizeVal;
bool SetNextWindowCollapsedVal;
- ImGuiSetCond SetNextWindowPosCond;
- ImGuiSetCond SetNextWindowSizeCond;
- ImGuiSetCond SetNextWindowContentSizeCond;
- ImGuiSetCond SetNextWindowCollapsedCond;
+ ImGuiCond SetNextWindowPosCond;
+ ImGuiCond SetNextWindowSizeCond;
+ ImGuiCond SetNextWindowContentSizeCond;
+ ImGuiCond SetNextWindowCollapsedCond;
ImRect SetNextWindowSizeConstraintRect; // Valid if 'SetNextWindowSizeConstraint' is true
ImGuiSizeConstraintCallback SetNextWindowSizeConstraintCallback;
- void* SetNextWindowSizeConstraintCallbackUserData;
+ void* SetNextWindowSizeConstraintCallbackUserData;
bool SetNextWindowSizeConstraint;
bool SetNextWindowFocus;
bool SetNextTreeNodeOpenVal;
- ImGuiSetCond SetNextTreeNodeOpenCond;
+ ImGuiCond SetNextTreeNodeOpenCond;
// Render
ImDrawData RenderDrawData; // Main ImDrawData instance to pass render information to the user
@@ -430,17 +486,23 @@ struct ImGuiContext
ImGuiTextEditState InputTextState;
ImFont InputTextPasswordFont;
ImGuiID ScalarAsInputTextId; // Temporary text input when CTRL+clicking on a slider, etc.
- ImGuiStorage ColorEditModeStorage; // Store user selection of color edit mode
+ ImGuiColorEditFlags ColorEditOptions; // Store user options for color edit widgets
+ ImVec4 ColorPickerRef;
float DragCurrentValue; // Currently dragged value, always float, not rounded by end-user precision settings
ImVec2 DragLastMouseDelta;
float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio
float DragSpeedScaleSlow;
float DragSpeedScaleFast;
ImVec2 ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage?
- char Tooltip[1024];
- char* PrivateClipboard; // If no custom clipboard handler is defined
+ int TooltipOverrideCount;
+ ImVector<char> PrivateClipboard; // If no custom clipboard handler is defined
ImVec2 OsImePosRequest, OsImePosSet; // Cursor position request & last passed to the OS Input Method Editor
+ // Settings
+ float SettingsDirtyTimer; // Save .ini Settings on disk when time reaches zero
+ ImVector<ImGuiWindowSettings> SettingsWindows; // .ini settings for ImGuiWindow
+ ImVector<ImGuiSettingsHandler> SettingsHandlers; // List of .ini settings handlers
+
// Logging
bool LogEnabled;
FILE* LogFile; // If != NULL log to stdout/ file
@@ -452,8 +514,9 @@ struct ImGuiContext
float FramerateSecPerFrame[120]; // calculate estimate of framerate for user
int FramerateSecPerFrameIdx;
float FramerateSecPerFrameAccum;
- int CaptureMouseNextFrame; // explicit capture via CaptureInputs() sets those flags
- int CaptureKeyboardNextFrame;
+ int WantCaptureMouseNextFrame; // explicit capture via CaptureInputs() sets those flags
+ int WantCaptureKeyboardNextFrame;
+ int WantTextInputNextFrame;
char TempBuffer[1024*3+1]; // temporary text buffer
ImGuiContext()
@@ -467,22 +530,23 @@ struct ImGuiContext
FrameCount = 0;
FrameCountEnded = FrameCountRendered = -1;
CurrentWindow = NULL;
- FocusedWindow = NULL;
+ NavWindow = NULL;
HoveredWindow = NULL;
HoveredRootWindow = NULL;
HoveredId = 0;
HoveredIdAllowOverlap = false;
HoveredIdPreviousFrame = 0;
+ HoveredIdTimer = 0.0f;
ActiveId = 0;
ActiveIdPreviousFrame = 0;
+ ActiveIdTimer = 0.0f;
ActiveIdIsAlive = false;
ActiveIdIsJustActivated = false;
ActiveIdAllowOverlap = false;
ActiveIdClickOffset = ImVec2(-1,-1);
ActiveIdWindow = NULL;
- MovedWindow = NULL;
- MovedWindowMoveId = 0;
- SettingsDirtyTimer = 0.0f;
+ MovingWindow = NULL;
+ MovingWindowMoveId = 0;
SetNextWindowPosVal = ImVec2(0.0f, 0.0f);
SetNextWindowSizeVal = ImVec2(0.0f, 0.0f);
@@ -500,14 +564,14 @@ struct ImGuiContext
SetNextTreeNodeOpenCond = 0;
ScalarAsInputTextId = 0;
+ ColorEditOptions = ImGuiColorEditFlags__OptionsDefault;
DragCurrentValue = 0.0f;
DragLastMouseDelta = ImVec2(0.0f, 0.0f);
DragSpeedDefaultRatio = 1.0f / 100.0f;
- DragSpeedScaleSlow = 0.01f;
+ DragSpeedScaleSlow = 1.0f / 100.0f;
DragSpeedScaleFast = 10.0f;
ScrollbarClickDeltaToGrabCenter = ImVec2(0.0f, 0.0f);
- memset(Tooltip, 0, sizeof(Tooltip));
- PrivateClipboard = NULL;
+ TooltipOverrideCount = 0;
OsImePosRequest = OsImePosSet = ImVec2(-1.0f, -1.0f);
ModalWindowDarkeningRatio = 0.0f;
@@ -515,6 +579,8 @@ struct ImGuiContext
MouseCursor = ImGuiMouseCursor_Arrow;
memset(MouseCursorData, 0, sizeof(MouseCursorData));
+ SettingsDirtyTimer = 0.0f;
+
LogEnabled = false;
LogFile = NULL;
LogClipboard = NULL;
@@ -524,11 +590,23 @@ struct ImGuiContext
memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame));
FramerateSecPerFrameIdx = 0;
FramerateSecPerFrameAccum = 0.0f;
- CaptureMouseNextFrame = CaptureKeyboardNextFrame = -1;
+ WantCaptureMouseNextFrame = WantCaptureKeyboardNextFrame = WantTextInputNextFrame = -1;
memset(TempBuffer, 0, sizeof(TempBuffer));
}
};
+// Transient per-window flags, reset at the beginning of the frame. For child window, inherited from parent on first Begin().
+enum ImGuiItemFlags_
+{
+ ImGuiItemFlags_AllowKeyboardFocus = 1 << 0, // true
+ ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
+ ImGuiItemFlags_Disabled = 1 << 2, // false // FIXME-WIP: Disable interactions but doesn't affect visuals. Should be: grey out and disable interactions with widgets that affect data + view widgets (WIP)
+ //ImGuiItemFlags_NoNav = 1 << 3, // false
+ //ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false
+ ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // MenuItem/Selectable() automatically closes current Popup window
+ ImGuiItemFlags_Default_ = ImGuiItemFlags_AllowKeyboardFocus
+};
+
// Transient per-window data, reset at the beginning of the frame
// FIXME: That's theory, in practice the delimitation between ImGuiWindow and ImGuiDrawContext is quite tenuous and could be reconsidered.
struct IMGUI_API ImGuiDrawContext
@@ -545,8 +623,7 @@ struct IMGUI_API ImGuiDrawContext
int TreeDepth;
ImGuiID LastItemId;
ImRect LastItemRect;
- bool LastItemHoveredAndUsable; // Item rectangle is hovered, and its window is currently interactable with (not blocked by a popup preventing access to the window)
- bool LastItemHoveredRect; // Item rectangle is hovered, but its window may or not be currently interactable with (might be blocked by a popup preventing access to the window)
+ bool LastItemRectHoveredRect;
bool MenuBarAppending;
float MenuBarOffsetX;
ImVector<ImGuiWindow*> ChildWindows;
@@ -554,16 +631,13 @@ struct IMGUI_API ImGuiDrawContext
ImGuiLayoutType LayoutType;
// We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings.
+ ImGuiItemFlags ItemFlags; // == ItemFlagsStack.back() [empty == ImGuiItemFlags_Default]
float ItemWidth; // == ItemWidthStack.back(). 0.0: default, >0.0: width in pixels, <0.0: align xx pixels to the right of window
float TextWrapPos; // == TextWrapPosStack.back() [empty == -1.0f]
- bool AllowKeyboardFocus; // == AllowKeyboardFocusStack.back() [empty == true]
- bool ButtonRepeat; // == ButtonRepeatStack.back() [empty == false]
+ ImVector<ImGuiItemFlags>ItemFlagsStack;
ImVector<float> ItemWidthStack;
ImVector<float> TextWrapPosStack;
- ImVector<bool> AllowKeyboardFocusStack;
- ImVector<bool> ButtonRepeatStack;
ImVector<ImGuiGroupData>GroupStack;
- ImGuiColorEditMode ColorEditMode;
int StackSizesBackup[6]; // Store size of various stacks for asserting
float IndentX; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.)
@@ -574,9 +648,10 @@ struct IMGUI_API ImGuiDrawContext
float ColumnsMinX;
float ColumnsMaxX;
float ColumnsStartPosY;
+ float ColumnsStartMaxPosX; // Backup of CursorMaxPos
float ColumnsCellMinY;
float ColumnsCellMaxY;
- bool ColumnsShowBorders;
+ ImGuiColumnsFlags ColumnsFlags;
ImGuiID ColumnsSetId;
ImVector<ImGuiColumnData> ColumnsData;
@@ -588,17 +663,15 @@ struct IMGUI_API ImGuiDrawContext
LogLinePosY = -1.0f;
TreeDepth = 0;
LastItemId = 0;
- LastItemRect = ImRect(0.0f,0.0f,0.0f,0.0f);
- LastItemHoveredAndUsable = LastItemHoveredRect = false;
+ LastItemRect = ImRect();
+ LastItemRectHoveredRect = false;
MenuBarAppending = false;
MenuBarOffsetX = 0.0f;
StateStorage = NULL;
LayoutType = ImGuiLayoutType_Vertical;
ItemWidth = 0.0f;
- ButtonRepeat = false;
- AllowKeyboardFocus = true;
+ ItemFlags = ImGuiItemFlags_Default_;
TextWrapPos = -1.0f;
- ColorEditMode = ImGuiColorEditMode_RGB;
memset(StackSizesBackup, 0, sizeof(StackSizesBackup));
IndentX = 0.0f;
@@ -608,8 +681,9 @@ struct IMGUI_API ImGuiDrawContext
ColumnsCount = 1;
ColumnsMinX = ColumnsMaxX = 0.0f;
ColumnsStartPosY = 0.0f;
+ ColumnsStartMaxPosX = 0.0f;
ColumnsCellMinY = ColumnsCellMaxY = 0.0f;
- ColumnsShowBorders = true;
+ ColumnsFlags = 0;
ColumnsSetId = 0;
}
};
@@ -620,7 +694,7 @@ struct IMGUI_API ImGuiWindow
char* Name;
ImGuiID ID; // == ImHash(Name)
ImGuiWindowFlags Flags; // See enum ImGuiWindowFlags_
- int IndexWithinParent; // Order within immediate parent window, if we are a child window. Otherwise 0.
+ int OrderWithinParent; // Order within immediate parent window, if we are a child window. Otherwise 0.
ImVec2 PosFloat;
ImVec2 Pos; // Position rounded-up to nearest pixel
ImVec2 Size; // Current size (==SizeFull or collapsed title bar size)
@@ -628,43 +702,49 @@ struct IMGUI_API ImGuiWindow
ImVec2 SizeContents; // Size of contents (== extents reach of the drawing cursor) from previous frame
ImVec2 SizeContentsExplicit; // Size of contents explicitly set by the user via SetNextWindowContentSize()
ImRect ContentsRegionRect; // Maximum visible content position in window coordinates. ~~ (SizeContentsExplicit ? SizeContentsExplicit : Size - ScrollbarSizes) - CursorStartPos, per axis
- ImVec2 WindowPadding; // Window padding at the time of begin. We need to lock it, in particular manipulation of the ShowBorder would have an effect
+ ImVec2 WindowPadding; // Window padding at the time of begin.
+ float WindowRounding; // Window rounding at the time of begin.
+ float WindowBorderSize; // Window border size at the time of begin.
ImGuiID MoveId; // == window->GetID("#MOVE")
ImVec2 Scroll;
ImVec2 ScrollTarget; // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change)
ImVec2 ScrollTargetCenterRatio; // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered
bool ScrollbarX, ScrollbarY;
ImVec2 ScrollbarSizes;
- float BorderSize;
bool Active; // Set to true on Begin()
bool WasActive;
- bool Accessed; // Set to true when any widget access the current window
+ bool WriteAccessed; // Set to true when any widget access the current window
bool Collapsed; // Set when collapsing window to become only title-bar
- bool SkipItems; // == Visible && !Collapsed
+ bool SkipItems; // Set when items can safely be all clipped (e.g. window not visible or collapsed)
+ bool Appearing; // Set during the frame where the window is appearing (or re-appearing)
+ bool CloseButton; // Set when the window has a close button (p_open != NULL)
int BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
int AutoFitFramesX, AutoFitFramesY;
bool AutoFitOnlyGrows;
+ int AutoFitChildAxises;
int AutoPosLastDirection;
int HiddenFrames;
- int SetWindowPosAllowFlags; // bit ImGuiSetCond_*** specify if SetWindowPos() call will succeed with this particular flag.
- int SetWindowSizeAllowFlags; // bit ImGuiSetCond_*** specify if SetWindowSize() call will succeed with this particular flag.
- int SetWindowCollapsedAllowFlags; // bit ImGuiSetCond_*** specify if SetWindowCollapsed() call will succeed with this particular flag.
- bool SetWindowPosCenterWanted;
+ ImGuiCond SetWindowPosAllowFlags; // store condition flags for next SetWindowPos() call.
+ ImGuiCond SetWindowSizeAllowFlags; // store condition flags for next SetWindowSize() call.
+ ImGuiCond SetWindowCollapsedAllowFlags; // store condition flags for next SetWindowCollapsed() call.
+ ImVec2 SetWindowPosVal; // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
+ ImVec2 SetWindowPosPivot; // store window pivot for positioning. ImVec2(0,0) when positioning from top-left corner; ImVec2(0.5f,0.5f) for centering; ImVec2(1,1) for bottom right.
ImGuiDrawContext DC; // Temporary per-window data, reset at the beginning of the frame
ImVector<ImGuiID> IDStack; // ID stack. ID are hashes seeded with the value at the top of the stack
ImRect ClipRect; // = DrawList->clip_rect_stack.back(). Scissoring / clipping rectangle. x1, y1, x2, y2.
ImRect WindowRectClipped; // = WindowRect just after setup in Begin(). == window->Rect() for root window.
+ ImRect InnerRect;
int LastFrameActive;
float ItemWidthDefault;
ImGuiSimpleColumns MenuColumns; // Simplified columns storage for menu items
ImGuiStorage StateStorage;
float FontWindowScale; // Scale multiplier per-window
ImDrawList* DrawList;
- ImGuiWindow* RootWindow; // If we are a child window, this is pointing to the first non-child parent window. Else point to ourself.
- ImGuiWindow* RootNonPopupWindow; // If we are a child window, this is pointing to the first non-child non-popup parent window. Else point to ourself.
- ImGuiWindow* ParentWindow; // If we are a child window, this is pointing to our parent window. Else point to NULL.
+ ImGuiWindow* ParentWindow; // Immediate parent in the window stack *regardless* of whether this window is a child window or not)
+ ImGuiWindow* RootWindow; // Generally point to ourself. If we are a child window, this is pointing to the first non-child parent window.
+ ImGuiWindow* RootNonPopupWindow; // Generally point to ourself. Used to display TitleBgActive color and for selecting which window to use for NavWindowing
// Navigation / Focus
int FocusIdxAllCounter; // Start at -1 and increase as assigned via FocusItemRegister()
@@ -682,6 +762,7 @@ public:
ImGuiID GetID(const void* ptr);
ImGuiID GetIDNoKeepAlive(const char* str, const char* str_end = NULL);
+ // We don't use g.FontSize because the window may be != g.CurrentWidow.
ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x+Size.x, Pos.y+Size.y); }
float CalcFontSize() const { return GImGui->FontBaseSize * FontWindowScale; }
float TitleBarHeight() const { return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + GImGui->Style.FramePadding.y * 2.0f; }
@@ -690,6 +771,17 @@ public:
ImRect MenuBarRect() const { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); }
};
+// Backup and restore just enough data to be able to use IsItemHovered() on item A after another B in the same window has overwritten the data.
+struct ImGuiItemHoveredDataBackup
+{
+ ImGuiID LastItemId;
+ ImRect LastItemRect;
+ bool LastItemRectHoveredRect;
+
+ void Backup() { ImGuiWindow* window = GImGui->CurrentWindow; LastItemId = window->DC.LastItemId; LastItemRect = window->DC.LastItemRect; LastItemRectHoveredRect = window->DC.LastItemRectHoveredRect; }
+ void Restore() { ImGuiWindow* window = GImGui->CurrentWindow; window->DC.LastItemId = LastItemId; window->DC.LastItemRect = LastItemRect; window->DC.LastItemRectHoveredRect = LastItemRectHoveredRect; }
+};
+
//-----------------------------------------------------------------------------
// Internal API
// No guarantee of forward compatibility here.
@@ -702,45 +794,76 @@ namespace ImGui
// - ImGui::NewFrame() has never been called, which is illegal.
// - You are calling ImGui functions after ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal.
inline ImGuiWindow* GetCurrentWindowRead() { ImGuiContext& g = *GImGui; return g.CurrentWindow; }
- inline ImGuiWindow* GetCurrentWindow() { ImGuiContext& g = *GImGui; g.CurrentWindow->Accessed = true; return g.CurrentWindow; }
+ inline ImGuiWindow* GetCurrentWindow() { ImGuiContext& g = *GImGui; g.CurrentWindow->WriteAccessed = true; return g.CurrentWindow; }
IMGUI_API ImGuiWindow* GetParentWindow();
IMGUI_API ImGuiWindow* FindWindowByName(const char* name);
IMGUI_API void FocusWindow(ImGuiWindow* window);
+ IMGUI_API void BringWindowToFront(ImGuiWindow* window);
+ IMGUI_API void BringWindowToBack(ImGuiWindow* window);
+
+ IMGUI_API void Initialize();
- IMGUI_API void EndFrame(); // Ends the ImGui frame. Automatically called by Render()! you most likely don't need to ever call that yourself directly. If you don't need to render you can call EndFrame() but you'll have wasted CPU already. If you don't need to render, don't create any windows instead!
+ IMGUI_API void MarkIniSettingsDirty();
+ IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(ImGuiID type_id);
+ IMGUI_API ImGuiWindowSettings* FindWindowSettings(ImGuiID id);
IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window);
- IMGUI_API void ClearActiveID();
+ IMGUI_API void ClearActiveID();
IMGUI_API void SetHoveredID(ImGuiID id);
IMGUI_API void KeepAliveID(ImGuiID id);
IMGUI_API void ItemSize(const ImVec2& size, float text_offset_y = 0.0f);
IMGUI_API void ItemSize(const ImRect& bb, float text_offset_y = 0.0f);
- IMGUI_API bool ItemAdd(const ImRect& bb, const ImGuiID* id);
- IMGUI_API bool IsClippedEx(const ImRect& bb, const ImGuiID* id, bool clip_even_when_logged);
- IMGUI_API bool IsHovered(const ImRect& bb, ImGuiID id, bool flatten_childs = false);
- IMGUI_API bool FocusableItemRegister(ImGuiWindow* window, bool is_active, bool tab_stop = true); // Return true if focus is requested
+ IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id);
+ IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id);
+ IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged);
+ IMGUI_API bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id, bool tab_stop = true); // Return true if focus is requested
IMGUI_API void FocusableItemUnregister(ImGuiWindow* window);
IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_x, float default_y);
IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x);
+ IMGUI_API void PushMultiItemsWidths(int components, float width_full = 0.0f);
+ IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
+ IMGUI_API void PopItemFlag();
+
+ IMGUI_API void OpenPopupEx(ImGuiID id, bool reopen_existing);
+ IMGUI_API void ClosePopup(ImGuiID id);
+ IMGUI_API bool IsPopupOpen(ImGuiID id);
+ IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
+ IMGUI_API void BeginTooltipEx(ImGuiWindowFlags extra_flags, bool override_previous_tooltip = true);
+
+ IMGUI_API int CalcTypematicPressedRepeatAmount(float t, float t_prev, float repeat_delay, float repeat_rate);
+
+ IMGUI_API void Scrollbar(ImGuiLayoutType direction);
+ IMGUI_API void VerticalSeparator(); // Vertical separator, for menu bars (use current line height). not exposed because it is misleading what it doesn't have an effect on regular layout.
+ IMGUI_API bool SplitterBehavior(ImGuiID id, const ImRect& bb, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f);
- IMGUI_API void OpenPopupEx(const char* str_id, bool reopen_existing);
+ // FIXME-WIP: New Columns API
+ IMGUI_API void BeginColumns(const char* id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
+ IMGUI_API void EndColumns(); // close columns
+ IMGUI_API void PushColumnClipRect(int column_index = -1);
- // NB: All position are in absolute pixels coordinates (not window coordinates)
- // FIXME: All those functions are a mess and needs to be refactored into something decent. AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION.
- // We need: a sort of symbol library, preferably baked into font atlas when possible + decent text rendering helpers.
+ // FIXME-WIP: New Combo API
+ IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImVec2 popup_size = ImVec2(0.0f,0.0f));
+ IMGUI_API void EndCombo();
+
+ // NB: All position are in absolute pixels coordinates (never using window coordinates internally)
+ // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT.
IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0,0), const ImRect* clip_rect = NULL);
IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
- IMGUI_API void RenderCollapseTriangle(ImVec2 pos, bool is_open, float scale = 1.0f);
+ IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f);
+ IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, int rounding_corners_flags = ~0);
+ IMGUI_API void RenderTriangle(ImVec2 pos, ImGuiDir dir, float scale = 1.0f);
IMGUI_API void RenderBullet(ImVec2 pos);
- IMGUI_API void RenderCheckMark(ImVec2 pos, ImU32 col);
+ IMGUI_API void RenderCheckMark(ImVec2 pos, ImU32 col, float sz);
+ IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
IMGUI_API bool ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0);
IMGUI_API bool ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0,0), ImGuiButtonFlags flags = 0);
IMGUI_API bool CloseButton(ImGuiID id, const ImVec2& pos, float radius);
+ IMGUI_API bool ArrowButton(ImGuiID id, ImGuiDir dir, ImVec2 padding, ImGuiButtonFlags flags = 0);
IMGUI_API bool SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_min, float v_max, float power, int decimal_precision, ImGuiSliderFlags flags = 0);
IMGUI_API bool SliderFloatN(const char* label, float* v, int components, float v_min, float v_max, const char* display_format, float power);
@@ -756,6 +879,9 @@ namespace ImGui
IMGUI_API bool InputScalarEx(const char* label, ImGuiDataType data_type, void* data_ptr, void* step_ptr, void* step_fast_ptr, const char* scalar_format, ImGuiInputTextFlags extra_flags);
IMGUI_API bool InputScalarAsWidgetReplacement(const ImRect& aabb, const char* label, ImGuiDataType data_type, void* data_ptr, ImGuiID id, int decimal_precision);
+ IMGUI_API void ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags);
+ IMGUI_API void ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags);
+
IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL);
IMGUI_API bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0); // Consume previous SetNextTreeNodeOpened() data, if any. May return true when logging
IMGUI_API void TreePushRawID(ImGuiID id);
@@ -765,8 +891,22 @@ namespace ImGui
IMGUI_API int ParseFormatPrecision(const char* fmt, int default_value);
IMGUI_API float RoundScalar(float value, int decimal_precision);
+ // Shade functions
+ IMGUI_API void ShadeVertsLinearColorGradientKeepAlpha(ImDrawVert* vert_start, ImDrawVert* vert_end, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1);
+ IMGUI_API void ShadeVertsLinearAlphaGradientForLeftToRightText(ImDrawVert* vert_start, ImDrawVert* vert_end, float gradient_p0_x, float gradient_p1_x);
+ IMGUI_API void ShadeVertsLinearUV(ImDrawVert* vert_start, ImDrawVert* vert_end, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp);
+
} // namespace ImGui
+// ImFontAtlas internals
+IMGUI_API bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas);
+IMGUI_API void ImFontAtlasBuildRegisterDefaultCustomRects(ImFontAtlas* atlas);
+IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent);
+IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* spc);
+IMGUI_API void ImFontAtlasBuildFinish(ImFontAtlas* atlas);
+IMGUI_API void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor);
+IMGUI_API void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride);
+
#ifdef __clang__
#pragma clang diagnostic pop
#endif
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_node_graph_test.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_node_graph_test.cpp
index 669137c27f3..2dac9e12b00 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_node_graph_test.cpp
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_node_graph_test.cpp
@@ -91,7 +91,7 @@ void ShowExampleAppCustomNodeGraph(bool* opened)
ImGui::Text("Hold middle mouse button to scroll (%.2f,%.2f)", scrolling.x, scrolling.y);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(1,1));
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0,0));
- ImGui::PushStyleColor(ImGuiCol_ChildWindowBg, ImColor(40,40,40,200));
+ ImGui::PushStyleColor(ImGuiCol_ChildWindowBg, (ImVec4)ImColor(40,40,40,200));
ImGui::BeginChild("scrolling_region", ImVec2(0,0), true, ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoMove);
ImGui::PushItemWidth(120.0f);
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h
index 0a2602a3df2..10cfceebf8a 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h
@@ -43,6 +43,7 @@ namespace ImGui
} // namespace ImGui
#include "widgets/color_picker.h"
+#include "widgets/color_wheel.h"
#include "widgets/dock.h"
#include "widgets/file_list.h"
#include "widgets/gizmo.h"
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl
index ef20f29cb18..e438a8205a2 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl
@@ -72,8 +72,10 @@ namespace ImGui
} // namespace
#include "widgets/color_picker.inl"
+#include "widgets/color_wheel.inl"
#include "widgets/dock.inl"
#include "widgets/file_list.inl"
#include "widgets/gizmo.inl"
#include "widgets/memory_editor.inl"
#include "widgets/range_slider.inl"
+
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_wheel.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_wheel.h
new file mode 100644
index 00000000000..7d75b9ef5db
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_wheel.h
@@ -0,0 +1,7 @@
+namespace ImGui
+{
+ void ColorWheel(const char* _text, float* _rgba, float _size);
+
+ void ColorWheel(const char* _text, uint32_t* _rgba, float _size);
+
+} // namespace ImGui
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_wheel.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_wheel.inl
new file mode 100644
index 00000000000..976571448b6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/color_wheel.inl
@@ -0,0 +1,39 @@
+namespace ImGui
+{
+ void ColorWheel(const char* _text, float* _rgba, float _size)
+ {
+ (void)_size;
+ ColorEdit4(_text
+ , _rgba, 0
+ | ImGuiColorEditFlags_PickerHueWheel
+ | ImGuiColorEditFlags_Float
+ );
+ }
+
+ inline void decodeRgba(float* _dst, const uint32_t* _src)
+ {
+ uint8_t* src = (uint8_t*)_src;
+ _dst[0] = float(src[0] / 255.0f);
+ _dst[1] = float(src[1] / 255.0f);
+ _dst[2] = float(src[2] / 255.0f);
+ _dst[3] = float(src[3] / 255.0f);
+ }
+
+ inline void encodeRgba(uint32_t* _dst, const float* _src)
+ {
+ uint8_t* dst = (uint8_t*)_dst;
+ dst[0] = uint8_t(_src[0] * 255.0);
+ dst[1] = uint8_t(_src[1] * 255.0);
+ dst[2] = uint8_t(_src[2] * 255.0);
+ dst[3] = uint8_t(_src[3] * 255.0);
+ }
+
+ void ColorWheel(const char* _text, uint32_t* _rgba, float _size)
+ {
+ float rgba[4];
+ decodeRgba(rgba, _rgba);
+ ColorWheel(_text, rgba, _size);
+ encodeRgba(_rgba, rgba);
+ }
+
+} // namespace ImGui
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/dock.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/dock.inl
index 206a4bee023..e9466ca8679 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/dock.inl
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/dock.inl
@@ -71,6 +71,7 @@ namespace ImGui
, active(true)
, status(Status_Float)
, opened(false)
+ , first(true)
{
location[0] = 0;
children[0] = children[1] = NULL;
@@ -233,7 +234,10 @@ namespace ImGui
ImU32 id = ImHash(label, 0);
for (int i = 0; i < m_docks.size(); ++i)
{
- if (m_docks[i]->id == id) return *m_docks[i];
+ if (m_docks[i]->id == id)
+ {
+ return *m_docks[i];
+ }
}
Dock* new_dock = (Dock*)MemAlloc(sizeof(Dock));
@@ -365,18 +369,22 @@ namespace ImGui
ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize |
ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse |
ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoScrollbar |
- ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_ShowBorders |
+ ImGuiWindowFlags_NoScrollWithMouse |
ImGuiWindowFlags_NoBringToFrontOnFocus;
Dock* root = getRootDock();
+ const ImVec2& displaySize = GetIO().DisplaySize;
if (root)
{
- SetNextWindowPos(root->pos);
- SetNextWindowSize(root->size);
+ const ImVec2 percentage(displaySize.x / root->size.x, displaySize.y / root->size.y );
+ const ImVec2 rescaledPos = root->pos * percentage;
+ const ImVec2 rescaledSize = root->size * percentage;
+ SetNextWindowPos(rescaledPos);
+ SetNextWindowSize(rescaledSize);
}
else
{
SetNextWindowPos(ImVec2(0, 0));
- SetNextWindowSize(GetIO().DisplaySize);
+ SetNextWindowSize(displaySize);
}
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0);
Begin("###DockPanel", NULL, flags);
@@ -962,7 +970,7 @@ namespace ImGui
opened,
dock.size,
-1.0f,
- ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_ShowBorders | extra_flags);
+ ImGuiWindowFlags_NoCollapse | extra_flags);
m_end_action = EndAction_End;
dock.pos = GetWindowPos();
dock.size = GetWindowSize();
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.inl
index 41b07edbf76..75f1fc59c10 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.inl
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.inl
@@ -16,7 +16,7 @@ namespace ImGui
void ImFileList::ChDir(const char* path)
{
-#if BX_PLATFORM_NACL || BX_PLATFORM_PS4
+#if BX_PLATFORM_PS4
BX_UNUSED(path);
#else
DIR* dir = opendir(path);
@@ -47,7 +47,7 @@ namespace ImGui
closedir(dir);
}
-#endif // BX_PLATFORM_NACL || BX_PLATFORM_PS4
+#endif // BX_PLATFORM_PS4
}
void ImFileList::Draw()
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h
index caac98694bc..b929150b712 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h
@@ -96,7 +96,8 @@ void EditTransform(const Camera& camera, matrix_t& matrix)
ImGui::InputFloat("Scale Snap", &snap.x);
break;
}
-
+ ImGuiIO& io = ImGui::GetIO();
+ ImGuizmo::SetRect(0, 0, io.DisplaySize.x, io.DisplaySize.y);
ImGuizmo::Manipulate(camera.mView.m16, camera.mProjection.m16, mCurrentGizmoOperation, mCurrentGizmoMode, matrix.m16, NULL, useSnap ? &snap.x : NULL);
}
#endif
@@ -132,6 +133,8 @@ namespace ImGuizmo
void DecomposeMatrixToComponents(const float *matrix, float *translation, float *rotation, float *scale);
void RecomposeMatrixFromComponents(const float *translation, const float *rotation, const float *scale, float *matrix);
+ void SetRect(float x, float y, float width, float height);
+
// Render a cube with face color corresponding to face normal. Usefull for debug/tests
void DrawCube(const float *view, const float *projection, float *matrix);
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl
index 4843e86006a..1f2427ae88e 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl
@@ -20,12 +20,19 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
+#define IMGUI_DEFINE_MATH_OPERATORS
+
+// includes patches for multiview from
+// https://github.com/CedricGuillemet/ImGuizmo/issues/15
+
namespace ImGuizmo
{
static const float ZPI = 3.14159265358979323846f;
static const float RAD2DEG = (180.f / ZPI);
static const float DEG2RAD = (ZPI / 180.f);
+ const float screenRotateSize = 0.06f;
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// utility and math
@@ -488,6 +495,10 @@ namespace ImGuizmo
{
Context() : mbUsing(false), mbEnable(true), mbUsingBounds(false)
{
+ mX=0.f;
+ mY=0.f;
+ mWidth=0.f;
+ mHeight=0.f;
}
ImDrawList* mDrawList;
@@ -551,9 +562,16 @@ namespace ImGuizmo
bool mbUsingBounds;
matrix_t mBoundsMatrix;
-
//
int mCurrentOperation;
+
+ float mX,mY,mWidth,mHeight;
+ /*
+ float mX = 0.f;
+ float mY = 0.f;
+ float mWidth = 0.f;
+ float mHeight = 0.f;
+ */
};
static Context gContext;
@@ -584,16 +602,16 @@ namespace ImGuizmo
static ImVec2 worldToPos(const vec_t& worldPos, const matrix_t& mat)
{
- ImGuiIO& io = ImGui::GetIO();
-
vec_t trans;
trans.TransformPoint(worldPos, mat);
trans *= 0.5f / trans.w;
trans += makeVect(0.5f, 0.5f);
trans.y = 1.f - trans.y;
- trans.x *= io.DisplaySize.x;
- trans.y *= io.DisplaySize.y;
- return ImVec2(trans.x, trans.y);
+ trans.x *= gContext.mWidth;
+ trans.y *= gContext.mHeight;
+ trans.x += gContext.mX;
+ trans.y += gContext.mY;
+ return ImVec2(trans.x, trans.y);
}
static void ComputeCameraRay(vec_t &rayOrigin, vec_t &rayDir)
@@ -603,9 +621,9 @@ namespace ImGuizmo
matrix_t mViewProjInverse;
mViewProjInverse.Inverse(gContext.mViewMat * gContext.mProjectionMat);
- float mox = (io.MousePos.x / io.DisplaySize.x) * 2.f - 1.f;
- float moy = (1.f - (io.MousePos.y / io.DisplaySize.y)) * 2.f - 1.f;
-
+ float mox = ((io.MousePos.x - gContext.mX) / gContext.mWidth) * 2.f - 1.f;
+ float moy = (1.f - ((io.MousePos.y - gContext.mY) / gContext.mHeight)) * 2.f - 1.f;
+
rayOrigin.Transform(makeVect(mox, moy, 0.f, 1.f), mViewProjInverse);
rayOrigin *= 1.f / rayOrigin.w;
vec_t rayEnd;
@@ -625,12 +643,21 @@ namespace ImGuizmo
return -(numer / denom);
}
+ void SetRect(float x, float y, float width, float height)
+ {
+ gContext.mX = x;
+ gContext.mY = y;
+ gContext.mWidth = width;
+ gContext.mHeight = height;
+ }
+
void BeginFrame()
{
ImGuiIO& io = ImGui::GetIO();
ImGui::Begin("gizmo", NULL, io.DisplaySize, 0, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoBringToFrontOnFocus);
- gContext.mDrawList = ImGui::GetWindowDrawList();
+
+ gContext.mDrawList = ImGui::GetWindowDrawList();
ImGui::End();
}
@@ -726,6 +753,8 @@ namespace ImGuizmo
for (int i = 0; i < 3; i++)
colors[i + 1] = (type == (int)(SCALE_X + i)) ? selectionColor : directionColor[i];
break;
+ default:
+ break;
}
}
else
@@ -821,7 +850,6 @@ namespace ImGuizmo
static void DrawRotationGizmo(int type)
{
ImDrawList* drawList = gContext.mDrawList;
- ImGuiIO& io = ImGui::GetIO();
// colors
ImU32 colors[7];
@@ -845,7 +873,7 @@ namespace ImGuizmo
}
drawList->AddPolyline(circlePos, halfCircleSegmentCount, colors[3 - axis], false, 2, true);
}
- drawList->AddCircle(worldToPos(gContext.mModel.v.position, gContext.mViewProjection), 0.06f * io.DisplaySize.x, colors[0], 64);
+ drawList->AddCircle(worldToPos(gContext.mModel.v.position, gContext.mViewProjection), screenRotateSize * gContext.mHeight, colors[0], 64);
if (gContext.mbUsing)
{
@@ -951,6 +979,8 @@ namespace ImGuizmo
static void DrawTranslationGizmo(int type)
{
ImDrawList* drawList = gContext.mDrawList;
+ if (!drawList)
+ return;
// colors
ImU32 colors[7];
@@ -1226,7 +1256,7 @@ namespace ImGuizmo
vec_t deltaScreen = { io.MousePos.x - gContext.mScreenSquareCenter.x, io.MousePos.y - gContext.mScreenSquareCenter.y, 0.f, 0.f };
float dist = deltaScreen.Length();
- if (dist >= 0.058f * io.DisplaySize.x && dist < 0.062f * io.DisplaySize.x)
+ if (dist >= (screenRotateSize - 0.002f) * gContext.mHeight && dist < (screenRotateSize + 0.002f) * gContext.mHeight)
type = ROTATE_SCREEN;
const vec_t planNormals[] = { gContext.mModel.v.right, gContext.mModel.v.up, gContext.mModel.v.dir};
@@ -1688,3 +1718,4 @@ namespace ImGuizmo
}
}
};
+
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.inl
index e4851a05a4f..5b3fc602fab 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.inl
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/range_slider.inl
@@ -160,13 +160,13 @@ bool RangeSliderFloat(const char* label, float* v1, float* v2, float v_min, floa
const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
// NB- we don't call ItemSize() yet because we may turn into a text edit box below
- if (!ItemAdd(total_bb, &id))
+ if (!ItemAdd(total_bb, id))
{
ItemSize(total_bb, style.FramePadding.y);
return false;
}
- const bool hovered = IsHovered(frame_bb, id);
+ const bool hovered = ItemHoverable(frame_bb, id);
if (hovered)
SetHoveredID(id);
diff --git a/3rdparty/bgfx/3rdparty/remotery/LICENSE b/3rdparty/bgfx/3rdparty/remotery/LICENSE
deleted file mode 100644
index 67db8588217..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/LICENSE
+++ /dev/null
@@ -1,175 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
diff --git a/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.c b/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.c
deleted file mode 100644
index 74b351f4073..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.c
+++ /dev/null
@@ -1,6697 +0,0 @@
-//
-// Copyright 2014-2017 Celtoys Ltd
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-/*
-@Contents:
-
- @DEPS: External Dependencies
- @TIMERS: Platform-specific timers
- @TLS: Thread-Local Storage
- @ATOMIC: Atomic Operations
- @VMBUFFER: Mirror Buffer using Virtual Memory for auto-wrap
- @NEW: New/Delete operators with error values for simplifying object create/destroy
- @THREADS: Threads
- @SAFEC: Safe C Library excerpts
- @OBJALLOC: Reusable Object Allocator
- @DYNBUF: Dynamic Buffer
- @HASHTABLE: Integer pair hash map for inserts/finds. No removes for added simplicity.
- @STRINGTABLE: Map from string hash to string offset in local buffer
- @SOCKETS: Sockets TCP/IP Wrapper
- @SHA1: SHA-1 Cryptographic Hash Function
- @BASE64: Base-64 encoder
- @MURMURHASH: Murmur-Hash 3
- @WEBSOCKETS: WebSockets
- @MESSAGEQ: Multiple producer, single consumer message queue
- @NETWORK: Network Server
- @SAMPLE: Base Sample Description (CPU by default)
- @SAMPLETREE: A tree of samples with their allocator
- @TSAMPLER: Per-Thread Sampler
- @REMOTERY: Remotery
- @CUDA: CUDA event sampling
- @D3D11: Direct3D 11 event sampling
- @OPENGL: OpenGL event sampling
- @METAL: Metal event sampling
-*/
-
-#define RMT_IMPL
-#include "Remotery.h"
-
-
-#ifdef RMT_PLATFORM_WINDOWS
- #pragma comment(lib, "ws2_32.lib")
-#endif
-
-
-#if RMT_ENABLED
-
-
-// Global settings
-static rmtSettings g_Settings;
-static rmtBool g_SettingsInitialized = RMT_FALSE;
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @DEPS: External Dependencies
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-//
-// Required CRT dependencies
-//
-#if RMT_USE_TINYCRT
-
- #include <TinyCRT/TinyCRT.h>
- #include <TinyCRT/TinyWinsock.h>
- #include <Memory/Memory.h>
-
- #define CreateFileMapping CreateFileMappingA
-
-#else
-
- #ifdef RMT_PLATFORM_MACOS
- #include <mach/mach_time.h>
- #include <mach/vm_map.h>
- #include <mach/mach.h>
- #include <sys/time.h>
- #else
- #include <malloc.h>
- #endif
-
- #include <assert.h>
-
- #ifdef RMT_PLATFORM_WINDOWS
- #include <winsock2.h>
- #ifndef __MINGW32__
- #include <intrin.h>
- #endif
- #undef min
- #undef max
- #endif
-
- #ifdef RMT_PLATFORM_LINUX
- #include <time.h>
- #include <sys/prctl.h>
- #endif
-
- #if defined(RMT_PLATFORM_POSIX)
- #include <stdlib.h>
- #include <pthread.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <sys/mman.h>
- #include <netinet/in.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <dlfcn.h>
- #endif
-
- #ifdef __MINGW32__
- #include <pthread.h>
- #endif
-
-#endif
-
-#if 0 //def _MSC_VER
- #define RMT_UNREFERENCED_PARAMETER(i) assert(i == 0 || i != 0); // To fool warning C4100 on warning level 4
-#else
- #define RMT_UNREFERENCED_PARAMETER(i) (void)(1 ? (void)0 : ((void)i))
-#endif
-
-
-#if RMT_USE_CUDA
- #include <cuda.h>
-#endif
-
-
-
-rmtU8 minU8(rmtU8 a, rmtU8 b)
-{
- return a < b ? a : b;
-}
-rmtS64 minS64(rmtS64 a, rmtS64 b)
-{
- return a < b ? a : b;
-}
-
-
-rmtU8 maxU8(rmtU8 a, rmtU8 b)
-{
- return a > b ? a : b;
-}
-rmtS64 maxS64(rmtS64 a, rmtS64 b)
-{
- return a > b ? a : b;
-}
-
-
-// Memory management functions
-static void* rmtMalloc( rmtU32 size )
-{
- return g_Settings.malloc( g_Settings.mm_context, size );
-}
-
-static void* rmtRealloc( void* ptr, rmtU32 size)
-{
- return g_Settings.realloc( g_Settings.mm_context, ptr, size );
-}
-
-static void rmtFree( void* ptr )
-{
- g_Settings.free( g_Settings.mm_context, ptr );
-}
-
-#if RMT_USE_OPENGL
-// DLL/Shared Library functions
-static void* rmtLoadLibrary(const char* path)
-{
- #if defined(RMT_PLATFORM_WINDOWS)
- return (void*)LoadLibraryA(path);
- #elif defined(RMT_PLATFORM_POSIX)
- return dlopen(path, RTLD_LOCAL | RTLD_LAZY);
- #else
- return NULL;
- #endif
-}
-
-static void rmtFreeLibrary(void* handle)
-{
- #if defined(RMT_PLATFORM_WINDOWS)
- FreeLibrary((HMODULE)handle);
- #elif defined(RMT_PLATFORM_POSIX)
- dlclose(handle);
- #endif
-}
-
-static void* rmtGetProcAddress(void* handle, const char* symbol)
-{
- #if defined(RMT_PLATFORM_WINDOWS)
- #ifdef _MSC_VER
- #pragma warning(push)
- #pragma warning(disable:4152) // C4152: nonstandard extension, function/data pointer conversion in expression
- #endif
- return GetProcAddress((HMODULE)handle, (LPCSTR)symbol);
- #ifdef _MSC_VER
- #pragma warning(pop)
- #endif
- #elif defined(RMT_PLATFORM_POSIX)
- return dlsym(handle, symbol);
- #else
- return NULL;
- #endif
-}
-#endif
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @TIMERS: Platform-specific timers
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-//
-// Get millisecond timer value that has only one guarantee: multiple calls are consistently comparable.
-// On some platforms, even though this returns milliseconds, the timer may be far less accurate.
-//
-static rmtU32 msTimer_Get()
-{
- #ifdef RMT_PLATFORM_WINDOWS
- return (rmtU32)GetTickCount();
- #else
- clock_t time = clock();
- rmtU32 msTime = (rmtU32) (time / (CLOCKS_PER_SEC / 1000));
- return msTime;
- #endif
-}
-
-
-//
-// Micro-second accuracy high performance counter
-//
-#ifndef RMT_PLATFORM_WINDOWS
- typedef rmtU64 LARGE_INTEGER;
-#endif
-typedef struct
-{
- LARGE_INTEGER counter_start;
- double counter_scale;
-} usTimer;
-
-
-static void usTimer_Init(usTimer* timer)
-{
- #if defined(RMT_PLATFORM_WINDOWS)
- LARGE_INTEGER performance_frequency;
-
- assert(timer != NULL);
-
- // Calculate the scale from performance counter to microseconds
- QueryPerformanceFrequency(&performance_frequency);
- timer->counter_scale = 1000000.0 / performance_frequency.QuadPart;
-
- // Record the offset for each read of the counter
- QueryPerformanceCounter(&timer->counter_start);
-
- #elif defined(RMT_PLATFORM_MACOS)
-
- mach_timebase_info_data_t nsScale;
- mach_timebase_info( &nsScale );
- const double ns_per_us = 1.0e3;
- timer->counter_scale = (double)(nsScale.numer) / ((double)nsScale.denom * ns_per_us);
-
- timer->counter_start = mach_absolute_time();
-
- #elif defined(RMT_PLATFORM_LINUX)
-
- struct timespec tv;
- clock_gettime(CLOCK_REALTIME, &tv);
- timer->counter_start = (rmtU64)(tv.tv_sec * (rmtU64)1000000) + (rmtU64)(tv.tv_nsec * 0.001);
-
- #endif
-}
-
-
-static rmtU64 usTimer_Get(usTimer* timer)
-{
- #if defined(RMT_PLATFORM_WINDOWS)
- LARGE_INTEGER performance_count;
-
- assert(timer != NULL);
-
- // Read counter and convert to microseconds
- QueryPerformanceCounter(&performance_count);
- return (rmtU64)((performance_count.QuadPart - timer->counter_start.QuadPart) * timer->counter_scale);
-
- #elif defined(RMT_PLATFORM_MACOS)
-
- rmtU64 curr_time = mach_absolute_time();
- return (rmtU64)((curr_time - timer->counter_start) * timer->counter_scale);
-
- #elif defined(RMT_PLATFORM_LINUX)
-
- struct timespec tv;
- clock_gettime(CLOCK_REALTIME, &tv);
- return ((rmtU64)(tv.tv_sec * (rmtU64)1000000) + (rmtU64)(tv.tv_nsec * 0.001)) - timer->counter_start;
-
- #endif
-}
-
-
-static void msSleep(rmtU32 time_ms)
-{
- #ifdef RMT_PLATFORM_WINDOWS
- Sleep(time_ms);
- #elif defined(RMT_PLATFORM_POSIX)
- usleep(time_ms * 1000);
- #endif
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @TLS: Thread-Local Storage
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#define TLS_INVALID_HANDLE 0xFFFFFFFF
-
-#if defined(RMT_PLATFORM_WINDOWS)
- typedef rmtU32 rmtTLS;
-#else
- typedef pthread_key_t rmtTLS;
-#endif
-
-static rmtError tlsAlloc(rmtTLS* handle)
-{
- assert(handle != NULL);
-
-#if defined(RMT_PLATFORM_WINDOWS)
-
- *handle = (rmtTLS)TlsAlloc();
- if (*handle == TLS_OUT_OF_INDEXES)
- {
- *handle = TLS_INVALID_HANDLE;
- return RMT_ERROR_TLS_ALLOC_FAIL;
- }
-
-#elif defined(RMT_PLATFORM_POSIX)
-
- if (pthread_key_create(handle, NULL) != 0)
- {
- *handle = TLS_INVALID_HANDLE;
- return RMT_ERROR_TLS_ALLOC_FAIL;
- }
-
-#endif
-
- return RMT_ERROR_NONE;
-}
-
-
-static void tlsFree(rmtTLS handle)
-{
- assert(handle != TLS_INVALID_HANDLE);
-
-#if defined(RMT_PLATFORM_WINDOWS)
-
- TlsFree(handle);
-
-#elif defined(RMT_PLATFORM_POSIX)
-
- pthread_key_delete((pthread_key_t)handle);
-
-#endif
-}
-
-
-static void tlsSet(rmtTLS handle, void* value)
-{
- assert(handle != TLS_INVALID_HANDLE);
-
-#if defined(RMT_PLATFORM_WINDOWS)
-
- TlsSetValue(handle, value);
-
-#elif defined(RMT_PLATFORM_POSIX)
-
- pthread_setspecific((pthread_key_t)handle, value);
-
-#endif
-}
-
-
-static void* tlsGet(rmtTLS handle)
-{
- assert(handle != TLS_INVALID_HANDLE);
-
-#if defined(RMT_PLATFORM_WINDOWS)
-
- return TlsGetValue(handle);
-
-#elif defined(RMT_PLATFORM_POSIX)
-
- return pthread_getspecific((pthread_key_t)handle);
-
-#endif
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @ATOMIC: Atomic Operations
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-static rmtBool AtomicCompareAndSwap(rmtU32 volatile* val, long old_val, long new_val)
-{
- #if defined(RMT_PLATFORM_WINDOWS) && !defined(__MINGW32__)
- return _InterlockedCompareExchange((long volatile*)val, new_val, old_val) == old_val ? RMT_TRUE : RMT_FALSE;
- #elif defined(RMT_PLATFORM_POSIX) || defined(__MINGW32__)
- return __sync_bool_compare_and_swap(val, old_val, new_val) ? RMT_TRUE : RMT_FALSE;
- #endif
-}
-
-
-static rmtBool AtomicCompareAndSwapPointer(long* volatile* ptr, long* old_ptr, long* new_ptr)
-{
- #if defined(RMT_PLATFORM_WINDOWS) && !defined(__MINGW32__)
- #ifdef _WIN64
- return _InterlockedCompareExchange64((__int64 volatile*)ptr, (__int64)new_ptr, (__int64)old_ptr) == (__int64)old_ptr ? RMT_TRUE : RMT_FALSE;
- #else
- return _InterlockedCompareExchange((long volatile*)ptr, (long)new_ptr, (long)old_ptr) == (long)old_ptr ? RMT_TRUE : RMT_FALSE;
- #endif
- #elif defined(RMT_PLATFORM_POSIX) || defined(__MINGW32__)
- return __sync_bool_compare_and_swap(ptr, old_ptr, new_ptr) ? RMT_TRUE : RMT_FALSE;
- #endif
-}
-
-
-//
-// NOTE: Does not guarantee a memory barrier
-// TODO: Make sure all platforms don't insert a memory barrier as this is only for stats
-// Alternatively, add strong/weak memory order equivalents
-//
-static rmtS32 AtomicAdd(rmtS32 volatile* value, rmtS32 add)
-{
- #if defined(RMT_PLATFORM_WINDOWS) && !defined(__MINGW32__)
- return _InterlockedExchangeAdd((long volatile*)value, (long)add);
- #elif defined(RMT_PLATFORM_POSIX) || defined(__MINGW32__)
- return __sync_fetch_and_add(value, add);
- #endif
-}
-
-
-static void AtomicSub(rmtS32 volatile* value, rmtS32 sub)
-{
- // Not all platforms have an implementation so just negate and add
- AtomicAdd(value, -sub);
-}
-
-
-// Compiler write fences (windows implementation)
-static void WriteFence()
-{
-#if defined(RMT_PLATFORM_WINDOWS) && !defined(__MINGW32__)
- _WriteBarrier();
-#elif defined (__clang__)
- __asm__ volatile("" : : : "memory");
-#else
- asm volatile ("" : : : "memory");
-#endif
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @NEW: New/Delete operators with error values for simplifying object create/destroy
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-// Ensures the pointer is non-NULL, calls the destructor, frees memory and sets the pointer to NULL
-#define Delete(type, obj) \
- if (obj != NULL) \
- { \
- type##_Destructor(obj); \
- rmtFree(obj); \
- obj = NULL; \
- }
-
-
-// New is implemented in terms of two begin/end macros
-// New will allocate enough space for the object and call the constructor
-// If allocation fails the constructor won't be called
-// If the constructor fails, the destructor is called and memory is released
-// NOTE: Use of sizeof() requires that the type be defined at the point of call
-// This is a disadvantage over requiring only a custom Create function
-#define BeginNew(type, obj) \
- { \
- obj = (type*)rmtMalloc(sizeof(type)); \
- if (obj == NULL) \
- { \
- error = RMT_ERROR_MALLOC_FAIL; \
- } \
- else \
- { \
-
-
-#define EndNew(type, obj) \
- if (error != RMT_ERROR_NONE) \
- Delete(type, obj); \
- } \
- }
-
-
-// Specialisations for New with varying constructor parameter counts
-#define New_0(type, obj) \
- BeginNew(type, obj); error = type##_Constructor(obj); EndNew(type, obj)
-#define New_1(type, obj, a0) \
- BeginNew(type, obj); error = type##_Constructor(obj, a0); EndNew(type, obj)
-#define New_2(type, obj, a0, a1) \
- BeginNew(type, obj); error = type##_Constructor(obj, a0, a1); EndNew(type, obj)
-#define New_3(type, obj, a0, a1, a2) \
- BeginNew(type, obj); error = type##_Constructor(obj, a0, a1, a2); EndNew(type, obj)
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @VMBUFFER: Mirror Buffer using Virtual Memory for auto-wrap
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-typedef struct VirtualMirrorBuffer
-{
- // Page-rounded size of the buffer without mirroring
- rmtU32 size;
-
- // Pointer to the first part of the mirror
- // The second part comes directly after at ptr+size bytes
- rmtU8* ptr;
-
-#ifdef RMT_PLATFORM_WINDOWS
- HANDLE file_map_handle;
-#endif
-
-} VirtualMirrorBuffer;
-
-
-#ifdef __ANDROID__
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <linux/ashmem.h>
-#include <fcntl.h>
-#include <string.h>
-#define ASHMEM_DEVICE "/dev/ashmem"
-
-/*
- * ashmem_create_region - creates a new ashmem region and returns the file
- * descriptor, or <0 on error
- *
- * `name' is an optional label to give the region (visible in /proc/pid/maps)
- * `size' is the size of the region, in page-aligned bytes
- */
-int ashmem_create_region(const char *name, size_t size)
-{
- int fd, ret;
-
- fd = open(ASHMEM_DEVICE, O_RDWR);
- if (fd < 0)
- return fd;
-
- if (name) {
- char buf[ASHMEM_NAME_LEN] = {0};
-
- strncpy(buf, name, sizeof(buf));
- buf[sizeof(buf)-1] = 0;
- ret = ioctl(fd, ASHMEM_SET_NAME, buf);
- if (ret < 0)
- goto error;
- }
-
- ret = ioctl(fd, ASHMEM_SET_SIZE, size);
- if (ret < 0)
- goto error;
-
- return fd;
-
-error:
- close(fd);
- return ret;
-}
-#endif // __ANDROID__
-
-
-static rmtError VirtualMirrorBuffer_Constructor(VirtualMirrorBuffer* buffer, rmtU32 size, int nb_attempts)
-{
- static const rmtU32 k_64 = 64 * 1024;
- RMT_UNREFERENCED_PARAMETER(nb_attempts);
-
-#ifdef RMT_PLATFORM_LINUX
- char path[] = "/dev/shm/ring-buffer-XXXXXX";
- int file_descriptor;
-#endif
-
- // Round up to page-granulation; the nearest 64k boundary for now
- size = (size + k_64 - 1) / k_64 * k_64;
-
- // Set defaults
- buffer->size = size;
- buffer->ptr = NULL;
-#ifdef RMT_PLATFORM_WINDOWS
- buffer->file_map_handle = INVALID_HANDLE_VALUE;
-#endif
-
-#ifdef RMT_PLATFORM_WINDOWS
-
- // Windows version based on https://gist.github.com/rygorous/3158316
-
- while (nb_attempts-- > 0)
- {
- rmtU8* desired_addr;
-
- // Create a file mapping for pointing to its physical address with multiple virtual pages
- buffer->file_map_handle = CreateFileMapping(
- INVALID_HANDLE_VALUE,
- 0,
- PAGE_READWRITE,
- 0,
- size,
- 0);
- if (buffer->file_map_handle == NULL)
- break;
-
- // Reserve two contiguous pages of virtual memory
- desired_addr = (rmtU8*)VirtualAlloc(0, size * 2, MEM_RESERVE, PAGE_NOACCESS);
- if (desired_addr == NULL)
- break;
-
- // Release the range immediately but retain the address for the next sequence of code to
- // try and map to it. In the mean-time some other OS thread may come along and allocate this
- // address range from underneath us so multiple attempts need to be made.
- VirtualFree(desired_addr, 0, MEM_RELEASE);
-
- // Immediately try to point both pages at the file mapping
- if (MapViewOfFileEx(buffer->file_map_handle, FILE_MAP_ALL_ACCESS, 0, 0, size, desired_addr) == desired_addr &&
- MapViewOfFileEx(buffer->file_map_handle, FILE_MAP_ALL_ACCESS, 0, 0, size, desired_addr + size) == desired_addr + size)
- {
- buffer->ptr = desired_addr;
- break;
- }
-
- // Failed to map the virtual pages; cleanup and try again
- CloseHandle(buffer->file_map_handle);
- buffer->file_map_handle = NULL;
- }
-
-#endif
-
-#ifdef RMT_PLATFORM_MACOS
-
- //
- // Mac version based on https://github.com/mikeash/MAMirroredQueue
- //
- // Copyright (c) 2010, Michael Ash
- // All rights reserved.
- //
- // Redistribution and use in source and binary forms, with or without modification, are permitted provided that
- // the following conditions are met:
- //
- // Redistributions of source code must retain the above copyright notice, this list of conditions and the following
- // disclaimer.
- //
- // Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
- // following disclaimer in the documentation and/or other materials provided with the distribution.
- // Neither the name of Michael Ash nor the names of its contributors may be used to endorse or promote products
- // derived from this software without specific prior written permission.
- //
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- //
-
- while (nb_attempts-- > 0)
- {
- vm_prot_t cur_prot, max_prot;
- kern_return_t mach_error;
- rmtU8* ptr = NULL;
- rmtU8* target = NULL;
-
- // Allocate 2 contiguous pages of virtual memory
- if (vm_allocate(mach_task_self(), (vm_address_t*)&ptr, size * 2, VM_FLAGS_ANYWHERE) != KERN_SUCCESS)
- break;
-
- // Try to deallocate the last page, leaving its virtual memory address free
- target = ptr + size;
- if (vm_deallocate(mach_task_self(), (vm_address_t)target, size) != KERN_SUCCESS)
- {
- vm_deallocate(mach_task_self(), (vm_address_t)ptr, size * 2);
- break;
- }
-
- // Attempt to remap the page just deallocated to the buffer again
- mach_error = vm_remap(
- mach_task_self(),
- (vm_address_t*)&target,
- size,
- 0, // mask
- 0, // anywhere
- mach_task_self(),
- (vm_address_t)ptr,
- 0, //copy
- &cur_prot,
- &max_prot,
- VM_INHERIT_COPY);
-
- if (mach_error == KERN_NO_SPACE)
- {
- // Failed on this pass, cleanup and make another attempt
- if (vm_deallocate(mach_task_self(), (vm_address_t)ptr, size) != KERN_SUCCESS)
- break;
- }
-
- else if (mach_error == KERN_SUCCESS)
- {
- // Leave the loop on success
- buffer->ptr = ptr;
- break;
- }
-
- else
- {
- // Unknown error, can't recover
- vm_deallocate(mach_task_self(), (vm_address_t)ptr, size);
- break;
- }
- }
-
-#endif
-
-#ifdef RMT_PLATFORM_LINUX
-
- // Linux version based on now-defunct Wikipedia section http://en.wikipedia.org/w/index.php?title=Circular_buffer&oldid=600431497
-
-
-#ifdef __ANDROID__
- file_descriptor = ashmem_create_region("remotery_shm", size * 2);
- if (file_descriptor < 0) {
- return RMT_ERROR_VIRTUAL_MEMORY_BUFFER_FAIL;
- }
-#else
- // Create a unique temporary filename in the shared memory folder
- file_descriptor = mkstemp(path);
- if (file_descriptor < 0)
- return RMT_ERROR_VIRTUAL_MEMORY_BUFFER_FAIL;
-
- // Delete the name
- if (unlink(path))
- return RMT_ERROR_VIRTUAL_MEMORY_BUFFER_FAIL;
-
- // Set the file size to twice the buffer size
- // TODO: this 2x behaviour can be avoided with similar solution to Win/Mac
- if (ftruncate (file_descriptor, size * 2))
- return RMT_ERROR_VIRTUAL_MEMORY_BUFFER_FAIL;
-
-#endif
- // Map 2 contiguous pages
- buffer->ptr = (rmtU8*)mmap(NULL, size * 2, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
- if (buffer->ptr == MAP_FAILED)
- {
- buffer->ptr = NULL;
- return RMT_ERROR_VIRTUAL_MEMORY_BUFFER_FAIL;
- }
-
- // Point both pages to the same memory file
- if (mmap(buffer->ptr, size, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED, file_descriptor, 0) != buffer->ptr ||
- mmap(buffer->ptr + size, size, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED, file_descriptor, 0) != buffer->ptr + size)
- return RMT_ERROR_VIRTUAL_MEMORY_BUFFER_FAIL;
-
-#endif
-
- // Cleanup if exceeded number of attempts or failed
- if (buffer->ptr == NULL)
- return RMT_ERROR_VIRTUAL_MEMORY_BUFFER_FAIL;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void VirtualMirrorBuffer_Destructor(VirtualMirrorBuffer* buffer)
-{
- assert(buffer != 0);
-
-#ifdef RMT_PLATFORM_WINDOWS
- if (buffer->file_map_handle != NULL)
- {
- CloseHandle(buffer->file_map_handle);
- buffer->file_map_handle = NULL;
- }
-#endif
-
-#ifdef RMT_PLATFORM_MACOS
- if (buffer->ptr != NULL)
- vm_deallocate(mach_task_self(), (vm_address_t)buffer->ptr, buffer->size * 2);
-#endif
-
-#ifdef RMT_PLATFORM_LINUX
- if (buffer->ptr != NULL)
- munmap(buffer->ptr, buffer->size * 2);
-#endif
-
- buffer->ptr = NULL;
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @THREADS: Threads
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-typedef struct Thread_t rmtThread;
-typedef rmtError(*ThreadProc)(rmtThread* thread);
-
-
-struct Thread_t
-{
- // OS-specific data
- #if defined(RMT_PLATFORM_WINDOWS)
- HANDLE handle;
- #else
- pthread_t handle;
- #endif
-
- // Callback executed when the thread is created
- ThreadProc callback;
-
- // Caller-specified parameter passed to Thread_Create
- void* param;
-
- // Error state returned from callback
- rmtError error;
-
- // External threads can set this to request an exit
- volatile rmtBool request_exit;
-
-};
-
-
-#if defined(RMT_PLATFORM_WINDOWS)
-
- static DWORD WINAPI ThreadProcWindows(LPVOID lpParameter)
- {
- rmtThread* thread = (rmtThread*)lpParameter;
- assert(thread != NULL);
- thread->error = thread->callback(thread);
- return thread->error == RMT_ERROR_NONE ? 1 : 0;
- }
-
-#else
- static void* StartFunc( void* pArgs )
- {
- rmtThread* thread = (rmtThread*)pArgs;
- assert(thread != NULL);
- thread->error = thread->callback(thread);
- return NULL; // returned error not use, check thread->error.
- }
-#endif
-
-
-static int rmtThread_Valid(rmtThread* thread)
-{
- assert(thread != NULL);
-
- #if defined(RMT_PLATFORM_WINDOWS)
- return thread->handle != NULL;
- #else
- return !pthread_equal(thread->handle, pthread_self());
- #endif
-}
-
-
-static rmtError rmtThread_Constructor(rmtThread* thread, ThreadProc callback, void* param)
-{
- assert(thread != NULL);
-
- thread->callback = callback;
- thread->param = param;
- thread->error = RMT_ERROR_NONE;
- thread->request_exit = RMT_FALSE;
-
- // OS-specific thread creation
-
- #if defined (RMT_PLATFORM_WINDOWS)
-
- thread->handle = CreateThread(
- NULL, // lpThreadAttributes
- 0, // dwStackSize
- ThreadProcWindows, // lpStartAddress
- thread, // lpParameter
- 0, // dwCreationFlags
- NULL); // lpThreadId
-
- if (thread->handle == NULL)
- return RMT_ERROR_CREATE_THREAD_FAIL;
-
- #else
-
- int32_t error = pthread_create( &thread->handle, NULL, StartFunc, thread );
- if (error)
- {
- // Contents of 'thread' parameter to pthread_create() are undefined after
- // failure call so can't pre-set to invalid value before hand.
- thread->handle = pthread_self();
- return RMT_ERROR_CREATE_THREAD_FAIL;
- }
-
- #endif
-
- return RMT_ERROR_NONE;
-}
-
-
-static void rmtThread_RequestExit(rmtThread* thread)
-{
- // Not really worried about memory barriers or delayed visibility to the target thread
- assert(thread != NULL);
- thread->request_exit = RMT_TRUE;
-}
-
-
-static void rmtThread_Join(rmtThread* thread)
-{
- assert(rmtThread_Valid(thread));
-
- #if defined(RMT_PLATFORM_WINDOWS)
- WaitForSingleObject(thread->handle, INFINITE);
- #else
- pthread_join(thread->handle, NULL);
- #endif
-}
-
-
-static void rmtThread_Destructor(rmtThread* thread)
-{
- assert(thread != NULL);
-
- if (rmtThread_Valid(thread))
- {
- // Shutdown the thread
- rmtThread_RequestExit(thread);
- rmtThread_Join(thread);
-
- // OS-specific release of thread resources
-
- #if defined(RMT_PLATFORM_WINDOWS)
- CloseHandle(thread->handle);
- thread->handle = NULL;
- #endif
- }
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @SAFEC: Safe C Library excerpts
- http://sourceforge.net/projects/safeclib/
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-/*------------------------------------------------------------------
- *
- * November 2008, Bo Berry
- *
- * Copyright (c) 2008-2011 by Cisco Systems, Inc
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *------------------------------------------------------------------
- */
-
-
-// NOTE: Microsoft also has its own version of these functions so I'm do some hacky PP to remove them
-#define strnlen_s strnlen_s_safe_c
-#define strncat_s strncat_s_safe_c
-#define strcpy_s strcpy_s_safe_c
-
-
-#define RSIZE_MAX_STR (4UL << 10) /* 4KB */
-#define RCNEGATE(x) x
-
-
-#define EOK ( 0 )
-#define ESNULLP ( 400 ) /* null ptr */
-#define ESZEROL ( 401 ) /* length is zero */
-#define ESLEMAX ( 403 ) /* length exceeds max */
-#define ESOVRLP ( 404 ) /* overlap undefined */
-#define ESNOSPC ( 406 ) /* not enough space for s2 */
-#define ESUNTERM ( 407 ) /* unterminated string */
-#define ESNOTFND ( 409 ) /* not found */
-
-#ifndef _ERRNO_T_DEFINED
-#define _ERRNO_T_DEFINED
-typedef int errno_t;
-#endif
-
-#if (!defined(_WIN64) && !defined(__APPLE__)) || (defined(__MINGW32__) && !defined(RSIZE_T_DEFINED))
-typedef unsigned int rsize_t;
-#endif
-
-#if defined(RMT_PLATFORM_MACOS) && !defined(_RSIZE_T)
-typedef __darwin_size_t rsize_t;
-#endif
-
-static rsize_t
-strnlen_s (const char *dest, rsize_t dmax)
-{
- rsize_t count;
-
- if (dest == NULL) {
- return RCNEGATE(0);
- }
-
- if (dmax == 0) {
- return RCNEGATE(0);
- }
-
- if (dmax > RSIZE_MAX_STR) {
- return RCNEGATE(0);
- }
-
- count = 0;
- while (*dest && dmax) {
- count++;
- dmax--;
- dest++;
- }
-
- return RCNEGATE(count);
-}
-
-
-static errno_t
-strstr_s (char *dest, rsize_t dmax,
- const char *src, rsize_t slen, char **substring)
-{
- rsize_t len;
- rsize_t dlen;
- int i;
-
- if (substring == NULL) {
- return RCNEGATE(ESNULLP);
- }
- *substring = NULL;
-
- if (dest == NULL) {
- return RCNEGATE(ESNULLP);
- }
-
- if (dmax == 0) {
- return RCNEGATE(ESZEROL);
- }
-
- if (dmax > RSIZE_MAX_STR) {
- return RCNEGATE(ESLEMAX);
- }
-
- if (src == NULL) {
- return RCNEGATE(ESNULLP);
- }
-
- if (slen == 0) {
- return RCNEGATE(ESZEROL);
- }
-
- if (slen > RSIZE_MAX_STR) {
- return RCNEGATE(ESLEMAX);
- }
-
- /*
- * src points to a string with zero length, or
- * src equals dest, return dest
- */
- if (*src == '\0' || dest == src) {
- *substring = dest;
- return RCNEGATE(EOK);
- }
-
- while (*dest && dmax) {
- i = 0;
- len = slen;
- dlen = dmax;
-
- while (src[i] && dlen) {
-
- /* not a match, not a substring */
- if (dest[i] != src[i]) {
- break;
- }
-
- /* move to the next char */
- i++;
- len--;
- dlen--;
-
- if (src[i] == '\0' || !len) {
- *substring = dest;
- return RCNEGATE(EOK);
- }
- }
- dest++;
- dmax--;
- }
-
- /*
- * substring was not found, return NULL
- */
- *substring = NULL;
- return RCNEGATE(ESNOTFND);
-}
-
-
-static errno_t
-strncat_s (char *dest, rsize_t dmax, const char *src, rsize_t slen)
-{
- const char *overlap_bumper;
-
- if (dest == NULL) {
- return RCNEGATE(ESNULLP);
- }
-
- if (src == NULL) {
- return RCNEGATE(ESNULLP);
- }
-
- if (slen > RSIZE_MAX_STR) {
- return RCNEGATE(ESLEMAX);
- }
-
- if (dmax == 0) {
- return RCNEGATE(ESZEROL);
- }
-
- if (dmax > RSIZE_MAX_STR) {
- return RCNEGATE(ESLEMAX);
- }
-
- /* hold base of dest in case src was not copied */
-
- if (dest < src) {
- overlap_bumper = src;
-
- /* Find the end of dest */
- while (*dest != '\0') {
-
- if (dest == overlap_bumper) {
- return RCNEGATE(ESOVRLP);
- }
-
- dest++;
- dmax--;
- if (dmax == 0) {
- return RCNEGATE(ESUNTERM);
- }
- }
-
- while (dmax > 0) {
- if (dest == overlap_bumper) {
- return RCNEGATE(ESOVRLP);
- }
-
- /*
- * Copying truncated before the source null is encountered
- */
- if (slen == 0) {
- *dest = '\0';
- return RCNEGATE(EOK);
- }
-
- *dest = *src;
- if (*dest == '\0') {
- return RCNEGATE(EOK);
- }
-
- dmax--;
- slen--;
- dest++;
- src++;
- }
-
- } else {
- overlap_bumper = dest;
-
- /* Find the end of dest */
- while (*dest != '\0') {
-
- /*
- * NOTE: no need to check for overlap here since src comes first
- * in memory and we're not incrementing src here.
- */
- dest++;
- dmax--;
- if (dmax == 0) {
- return RCNEGATE(ESUNTERM);
- }
- }
-
- while (dmax > 0) {
- if (src == overlap_bumper) {
- return RCNEGATE(ESOVRLP);
- }
-
- /*
- * Copying truncated
- */
- if (slen == 0) {
- *dest = '\0';
- return RCNEGATE(EOK);
- }
-
- *dest = *src;
- if (*dest == '\0') {
- return RCNEGATE(EOK);
- }
-
- dmax--;
- slen--;
- dest++;
- src++;
- }
- }
-
- /*
- * the entire src was not copied, so the string will be nulled.
- */
- return RCNEGATE(ESNOSPC);
-}
-
-
-errno_t
-strcpy_s(char *dest, rsize_t dmax, const char *src)
-{
- const char *overlap_bumper;
-
- if (dest == NULL) {
- return RCNEGATE(ESNULLP);
- }
-
- if (dmax == 0) {
- return RCNEGATE(ESZEROL);
- }
-
- if (dmax > RSIZE_MAX_STR) {
- return RCNEGATE(ESLEMAX);
- }
-
- if (src == NULL) {
- *dest = '\0';
- return RCNEGATE(ESNULLP);
- }
-
- if (dest == src) {
- return RCNEGATE(EOK);
- }
-
- if (dest < src) {
- overlap_bumper = src;
-
- while (dmax > 0) {
- if (dest == overlap_bumper) {
- return RCNEGATE(ESOVRLP);
- }
-
- *dest = *src;
- if (*dest == '\0') {
- return RCNEGATE(EOK);
- }
-
- dmax--;
- dest++;
- src++;
- }
-
- }
- else {
- overlap_bumper = dest;
-
- while (dmax > 0) {
- if (src == overlap_bumper) {
- return RCNEGATE(ESOVRLP);
- }
-
- *dest = *src;
- if (*dest == '\0') {
- return RCNEGATE(EOK);
- }
-
- dmax--;
- dest++;
- src++;
- }
- }
-
- /*
- * the entire src must have been copied, if not reset dest
- * to null the string.
- */
- return RCNEGATE(ESNOSPC);
-}
-
-#if !(defined(RMT_PLATFORM_LINUX) && RMT_USE_POSIX_THREADNAMES)
-
-/* very simple integer to hex */
-static const char* hex_encoding_table = "0123456789ABCDEF";
-
-static void itoahex_s( char *dest, rsize_t dmax, rmtS32 value )
-{
- rsize_t len;
- rmtS32 halfbytepos;
-
- halfbytepos = 8;
-
- /* strip leading 0's */
- while (halfbytepos > 1)
- {
- --halfbytepos;
- if (value >> (4 * halfbytepos) & 0xF)
- {
- ++halfbytepos;
- break;
- }
- }
-
- len = 0;
- while(len + 1 < dmax && halfbytepos > 0)
- {
- --halfbytepos;
- dest[len] = hex_encoding_table[value >> (4 * halfbytepos) & 0xF];
- ++len;
- }
-
- if (len < dmax)
- {
- dest[len] = 0;
- }
-}
-
-#endif
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @OBJALLOC: Reusable Object Allocator
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-//
-// All objects that require free-list-backed allocation need to inherit from this type.
-//
-typedef struct ObjectLink_s
-{
- struct ObjectLink_s* volatile next;
-} ObjectLink;
-
-
-static void ObjectLink_Constructor(ObjectLink* link)
-{
- assert(link != NULL);
- link->next = NULL;
-}
-
-
-typedef rmtError (*ObjConstructor)(void*);
-typedef void (*ObjDestructor)(void*);
-
-
-typedef struct
-{
- // Object create/destroy parameters
- rmtU32 object_size;
- ObjConstructor constructor;
- ObjDestructor destructor;
-
- // Number of objects in the free list
- volatile rmtS32 nb_free;
-
- // Number of objects used by callers
- volatile rmtS32 nb_inuse;
-
- // Total allocation count
- volatile rmtS32 nb_allocated;
-
- ObjectLink* first_free;
-} ObjectAllocator;
-
-
-static rmtError ObjectAllocator_Constructor(ObjectAllocator* allocator, rmtU32 object_size, ObjConstructor constructor, ObjDestructor destructor)
-{
- allocator->object_size = object_size;
- allocator->constructor = constructor;
- allocator->destructor = destructor;
- allocator->nb_free = 0;
- allocator->nb_inuse = 0;
- allocator->nb_allocated = 0;
- allocator->first_free = NULL;
- return RMT_ERROR_NONE;
-}
-
-
-static void ObjectAllocator_Destructor(ObjectAllocator* allocator)
-{
- // Ensure everything has been released to the allocator
- assert(allocator != NULL);
- assert(allocator->nb_inuse == 0);
-
- // Destroy all objects released to the allocator
- while (allocator->first_free != NULL)
- {
- ObjectLink* next = allocator->first_free->next;
- assert(allocator->destructor != NULL);
- allocator->destructor(allocator->first_free);
- rmtFree(allocator->first_free);
- allocator->first_free = next;
- }
-}
-
-
-static void ObjectAllocator_Push(ObjectAllocator* allocator, ObjectLink* start, ObjectLink* end)
-{
- assert(allocator != NULL);
- assert(start != NULL);
- assert(end != NULL);
-
- // CAS pop add range to the front of the list
- for (;;)
- {
- ObjectLink* old_link = (ObjectLink*)allocator->first_free;
- end->next = old_link;
- if (AtomicCompareAndSwapPointer((long* volatile*)&allocator->first_free, (long*)old_link, (long*)start) == RMT_TRUE)
- break;
- }
-}
-
-
-static ObjectLink* ObjectAllocator_Pop(ObjectAllocator* allocator)
-{
- ObjectLink* link;
-
- assert(allocator != NULL);
- assert(allocator->first_free != NULL);
-
- // CAS pop from the front of the list
- for (;;)
- {
- ObjectLink* old_link = (ObjectLink*)allocator->first_free;
- ObjectLink* next_link = old_link->next;
- if (AtomicCompareAndSwapPointer((long* volatile*)&allocator->first_free, (long*)old_link, (long*)next_link) == RMT_TRUE)
- {
- link = old_link;
- break;
- }
- }
-
- link->next = NULL;
-
- return link;
-}
-
-
-static rmtError ObjectAllocator_Alloc(ObjectAllocator* allocator, void** object)
-{
- // This function only calls the object constructor on initial malloc of an object
-
- assert(allocator != NULL);
- assert(object != NULL);
-
- // Has the free list run out?
- if (allocator->first_free == NULL)
- {
- rmtError error;
-
- // Allocate/construct a new object
- void* free_object = rmtMalloc( allocator->object_size );
- if (free_object == NULL)
- return RMT_ERROR_MALLOC_FAIL;
- assert(allocator->constructor != NULL);
- error = allocator->constructor(free_object);
- if (error != RMT_ERROR_NONE)
- {
- // Auto-teardown on failure
- assert(allocator->destructor != NULL);
- allocator->destructor(free_object);
- rmtFree(free_object);
- return error;
- }
-
- // Add to the free list
- ObjectAllocator_Push(allocator, (ObjectLink*)free_object, (ObjectLink*)free_object);
- AtomicAdd(&allocator->nb_allocated, 1);
- AtomicAdd(&allocator->nb_free, 1);
- }
-
- // Pull available objects from the free list
- *object = ObjectAllocator_Pop(allocator);
- AtomicSub(&allocator->nb_free, 1);
- AtomicAdd(&allocator->nb_inuse, 1);
-
- return RMT_ERROR_NONE;
-}
-
-
-static void ObjectAllocator_Free(ObjectAllocator* allocator, void* object)
-{
- // Add back to the free-list
- assert(allocator != NULL);
- ObjectAllocator_Push(allocator, (ObjectLink*)object, (ObjectLink*)object);
- AtomicSub(&allocator->nb_inuse, 1);
- AtomicAdd(&allocator->nb_free, 1);
-}
-
-
-static void ObjectAllocator_FreeRange(ObjectAllocator* allocator, void* start, void* end, rmtU32 count)
-{
- assert(allocator != NULL);
- ObjectAllocator_Push(allocator, (ObjectLink*)start, (ObjectLink*)end);
- AtomicSub(&allocator->nb_inuse, count);
- AtomicAdd(&allocator->nb_free, count);
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @DYNBUF: Dynamic Buffer
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-typedef struct
-{
- rmtU32 alloc_granularity;
-
- rmtU32 bytes_allocated;
- rmtU32 bytes_used;
-
- rmtU8* data;
-} Buffer;
-
-
-static rmtError Buffer_Constructor(Buffer* buffer, rmtU32 alloc_granularity)
-{
- assert(buffer != NULL);
- buffer->alloc_granularity = alloc_granularity;
- buffer->bytes_allocated = 0;
- buffer->bytes_used = 0;
- buffer->data = NULL;
- return RMT_ERROR_NONE;
-}
-
-
-static void Buffer_Destructor(Buffer* buffer)
-{
- assert(buffer != NULL);
-
- if (buffer->data != NULL)
- {
- rmtFree(buffer->data);
- buffer->data = NULL;
- }
-}
-
-
-static rmtError Buffer_Write(Buffer* buffer, void* data, rmtU32 length)
-{
- assert(buffer != NULL);
-
- // Reallocate the buffer on overflow
- if (buffer->bytes_used + length > buffer->bytes_allocated)
- {
- // Calculate size increase rounded up to the requested allocation granularity
- rmtU32 g = buffer->alloc_granularity;
- rmtU32 a = buffer->bytes_allocated + length;
- a = a + ((g - 1) - ((a - 1) % g));
- buffer->bytes_allocated = a;
- buffer->data = (rmtU8*)rmtRealloc(buffer->data, buffer->bytes_allocated);
- if (buffer->data == NULL)
- return RMT_ERROR_MALLOC_FAIL;
- }
-
- // Copy all bytes
- memcpy(buffer->data + buffer->bytes_used, data, length);
- buffer->bytes_used += length;
-
- // NULL terminate (if possible) for viewing in debug
- if (buffer->bytes_used < buffer->bytes_allocated)
- buffer->data[buffer->bytes_used] = 0;
-
- return RMT_ERROR_NONE;
-}
-
-
-static rmtError Buffer_WriteStringZ(Buffer* buffer, rmtPStr string)
-{
- assert(string != NULL);
- return Buffer_Write(buffer, (void*)string, (rmtU32)strnlen_s(string, 2048) + 1);
-}
-
-
-static void U32ToByteArray(rmtU8* dest, rmtU32 value)
-{
- // Commit as little-endian
- dest[0] = value & 255;
- dest[1] = (value >> 8) & 255;
- dest[2] = (value >> 16) & 255;
- dest[3] = value >> 24;
-}
-
-
-static rmtError Buffer_WriteU32(Buffer* buffer, rmtU32 value)
-{
- rmtU8 temp[4];
- U32ToByteArray(temp, value);
- return Buffer_Write(buffer, temp, sizeof(temp));
-}
-
-
-static rmtBool IsLittleEndian()
-{
- // Not storing this in a global variable allows the compiler to more easily optimise
- // this away altogether.
- union
- {
- unsigned int i;
- unsigned char c[sizeof(unsigned int)];
- } u;
- u.i = 1;
- return u.c[0] == 1 ? RMT_TRUE : RMT_FALSE;
-}
-
-
-static rmtError Buffer_WriteU64(Buffer* buffer, rmtU64 value)
-{
- // Write as a double as Javascript DataView doesn't have a 64-bit integer read
- union
- {
- double d;
- unsigned char c[sizeof(double)];
- } u;
- char temp[8];
- u.d = (double)value;
- if (IsLittleEndian())
- {
- temp[0] = u.c[0];
- temp[1] = u.c[1];
- temp[2] = u.c[2];
- temp[3] = u.c[3];
- temp[4] = u.c[4];
- temp[5] = u.c[5];
- temp[6] = u.c[6];
- temp[7] = u.c[7];
- }
- else
- {
- temp[0] = u.c[7];
- temp[1] = u.c[6];
- temp[2] = u.c[5];
- temp[3] = u.c[4];
- temp[4] = u.c[3];
- temp[5] = u.c[2];
- temp[6] = u.c[1];
- temp[7] = u.c[0];
- }
- return Buffer_Write(buffer, u.c, sizeof(u.c));
-}
-
-
-static rmtError Buffer_WriteStringWithLength(Buffer* buffer, rmtPStr string)
-{
- rmtU32 length = (rmtU32)strnlen_s(string, 2048);
- rmtError error;
-
- error = Buffer_WriteU32(buffer, length);
- if (error != RMT_ERROR_NONE)
- return error;
-
- return Buffer_Write(buffer, (void*)string, length);
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @HASHTABLE: Integer pair hash map for inserts/finds. No removes for added simplicity.
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#define RMT_NOT_FOUND 0xFFFFFFFF
-
-
-typedef struct
-{
- // Non-zero, pre-hashed key
- rmtU32 key;
-
- // Value that's not equal to RMT_NOT_FOUND
- rmtU32 value;
-} HashSlot;
-
-
-typedef struct
-{
- // Stats
- rmtU32 max_nb_slots;
- rmtU32 nb_slots;
-
- // Data
- HashSlot* slots;
-} rmtHashTable;
-
-
-static rmtError rmtHashTable_Constructor(rmtHashTable* table, rmtU32 max_nb_slots)
-{
- // Default initialise
- assert(table != NULL);
- table->max_nb_slots = max_nb_slots;
- table->nb_slots = 0;
-
- // Allocate and clear the hash slots
- table->slots = (HashSlot*)rmtMalloc(table->max_nb_slots * sizeof(HashSlot));
- if (table->slots == NULL)
- return RMT_ERROR_MALLOC_FAIL;
- memset(table->slots, 0, table->max_nb_slots * sizeof(HashSlot));
-
- return RMT_ERROR_NONE;
-}
-
-
-static void rmtHashTable_Destructor(rmtHashTable* table)
-{
- assert(table != NULL);
-
- if (table->slots != NULL)
- {
- rmtFree(table->slots);
- table->slots = NULL;
- }
-}
-
-
-static rmtError rmtHashTable_Resize(rmtHashTable* table);
-
-
-static rmtError rmtHashTable_Insert(rmtHashTable* table, rmtU32 key, rmtU32 value)
-{
- HashSlot* slot = NULL;
- rmtError error = RMT_ERROR_NONE;
-
- // Calculate initial slot location for this key
- rmtU32 index_mask = table->max_nb_slots - 1;
- rmtU32 index = key & index_mask;
-
- assert(key != 0);
- assert(value != RMT_NOT_FOUND);
-
- // Linear probe for free slot, reusing any existing key matches
- // There will always be at least one free slot due to load factor management
- while (table->slots[index].key)
- {
- if (table->slots[index].key == key)
- {
- // Counter occupied slot increments below
- table->nb_slots--;
- break;
- }
-
- index = (index + 1) & index_mask;
- }
-
- // Just verify that I've got no errors in the code above
- assert(index < table->max_nb_slots);
-
- // Add to the table
- slot = table->slots + index;
- slot->key = key;
- slot->value = value;
- table->nb_slots++;
-
- // Resize when load factor is greater than 2/3
- if (table->nb_slots > (table->max_nb_slots * 2) / 3)
- error = rmtHashTable_Resize(table);
-
- return error;
-}
-
-
-static rmtError rmtHashTable_Resize(rmtHashTable* table)
-{
- rmtU32 old_max_nb_slots = table->max_nb_slots;
- HashSlot* new_slots = NULL;
- HashSlot* old_slots = table->slots;
-
- // Increase the table size
- rmtU32 new_max_nb_slots = table->max_nb_slots;
- if (new_max_nb_slots < 8192 * 4)
- new_max_nb_slots *= 4;
- else
- new_max_nb_slots *= 2;
-
- // Allocate and clear a new table
- new_slots = (HashSlot*)rmtMalloc(new_max_nb_slots * sizeof(HashSlot));
- if (new_slots == NULL)
- return RMT_ERROR_MALLOC_FAIL;
- memset(new_slots, 0, new_max_nb_slots * sizeof(HashSlot));
-
- // Update fields of the table after successful allocation only
- table->slots = new_slots;
- table->max_nb_slots = new_max_nb_slots;
- table->nb_slots = 0;
-
- // Reinsert all objects into the new table
- for (rmtU32 i = 0; i < old_max_nb_slots; i++)
- {
- HashSlot* slot = old_slots + i;
- if (slot->key != 0)
- rmtHashTable_Insert(table, slot->key, slot->key);
- }
-
- free(old_slots);
-
- return RMT_ERROR_NONE;
-}
-
-
-static rmtU32 rmtHashTable_Find(rmtHashTable* table, rmtU32 key)
-{
- // Calculate initial slot location for this key
- rmtU32 index_mask = table->max_nb_slots - 1;
- rmtU32 index = key & index_mask;
-
- // Linear probe for matching hash
- while (table->slots[index].key)
- {
- HashSlot* slot = table->slots + index;
-
- if (slot->key == key)
- return slot->value;
-
- index = (index + 1) & index_mask;
- }
-
- return RMT_NOT_FOUND;
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @STRINGTABLE: Map from string hash to string offset in local buffer
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-typedef struct
-{
- // Growable dynamic array of strings added so far
- Buffer* text;
-
- // Map from text hash to text location in the buffer
- rmtHashTable* text_map;
-} StringTable;
-
-
-static rmtError StringTable_Constructor(StringTable* table)
-{
- rmtError error;
-
- // Default initialise
- assert(table != NULL);
- table->text = NULL;
- table->text_map = NULL;
-
- // Allocate reasonably storage for initial sample names
-
- New_1(Buffer, table->text, 8 * 1024);
- if (error != RMT_ERROR_NONE)
- return error;
-
- New_1(rmtHashTable, table->text_map, 1 * 1024);
- if (error != RMT_ERROR_NONE)
- return error;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void StringTable_Destructor(StringTable* table)
-{
- assert(table != NULL);
-
- Delete(rmtHashTable, table->text_map);
- Delete(Buffer, table->text);
-}
-
-
-static rmtPStr StringTable_Find(StringTable* table, rmtU32 name_hash)
-{
- rmtU32 text_offset = rmtHashTable_Find(table->text_map, name_hash);
- if (text_offset != RMT_NOT_FOUND)
- return (rmtPStr)(table->text->data + text_offset);
- return NULL;
-}
-
-
-static void StringTable_Insert(StringTable* table, rmtU32 name_hash, rmtPStr name)
-{
- // Only add to the buffer if the string isn't already there
- rmtU32 text_offset = rmtHashTable_Find(table->text_map, name_hash);
- if (text_offset == RMT_NOT_FOUND)
- {
- // TODO: Allocation errors aren't being passed on to the caller
- text_offset = table->text->bytes_used;
- Buffer_WriteStringZ(table->text, name);
- rmtHashTable_Insert(table->text_map, name_hash, text_offset);
- }
-}
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @SOCKETS: Sockets TCP/IP Wrapper
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#ifndef RMT_PLATFORM_WINDOWS
- typedef int SOCKET;
- #define INVALID_SOCKET -1
- #define SOCKET_ERROR -1
- #define SD_SEND SHUT_WR
- #define closesocket close
-#endif
-
-
-typedef struct
-{
- SOCKET socket;
-} TCPSocket;
-
-
-typedef struct
-{
- rmtBool can_read;
- rmtBool can_write;
- rmtError error_state;
-} SocketStatus;
-
-
-//
-// Function prototypes
-//
-static void TCPSocket_Close(TCPSocket* tcp_socket);
-
-
-static rmtError InitialiseNetwork()
-{
- #ifdef RMT_PLATFORM_WINDOWS
-
- WSADATA wsa_data;
- if (WSAStartup(MAKEWORD(2, 2), &wsa_data))
- return RMT_ERROR_SOCKET_INIT_NETWORK_FAIL;
- if (LOBYTE(wsa_data.wVersion) != 2 || HIBYTE(wsa_data.wVersion) != 2)
- return RMT_ERROR_SOCKET_INIT_NETWORK_FAIL;
-
- return RMT_ERROR_NONE;
-
- #else
-
- return RMT_ERROR_NONE;
-
- #endif
-}
-
-
-static void ShutdownNetwork()
-{
- #ifdef RMT_PLATFORM_WINDOWS
- WSACleanup();
- #endif
-}
-
-
-static rmtError TCPSocket_Constructor(TCPSocket* tcp_socket)
-{
- assert(tcp_socket != NULL);
- tcp_socket->socket = INVALID_SOCKET;
- return InitialiseNetwork();
-}
-
-
-static void TCPSocket_Destructor(TCPSocket* tcp_socket)
-{
- assert(tcp_socket != NULL);
- TCPSocket_Close(tcp_socket);
- ShutdownNetwork();
-}
-
-
-static rmtError TCPSocket_RunServer(TCPSocket* tcp_socket, rmtU16 port, rmtBool limit_connections_to_localhost)
-{
- SOCKET s = INVALID_SOCKET;
- struct sockaddr_in sin;
- int enable = 1;
- #ifdef RMT_PLATFORM_WINDOWS
- u_long nonblock = 1;
- #endif
-
- memset(&sin, 0, sizeof(sin) );
- assert(tcp_socket != NULL);
-
- // Try to create the socket
- s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (s == SOCKET_ERROR)
- return RMT_ERROR_SOCKET_CREATE_FAIL;
-
- // set SO_REUSEADDR so binding doesn't fail when restarting the application
- // (otherwise the same port can't be reused within TIME_WAIT)
- // I'm not checking for errors because if this fails (unlikely) we might still
- // be able to bind to the socket anyway
- #ifdef RMT_PLATFORM_POSIX
- setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable));
- #elif defined(RMT_PLATFORM_WINDOWS)
- // windows also needs SO_EXCLUSEIVEADDRUSE,
- // see http://www.andy-pearce.com/blog/posts/2013/Feb/so_reuseaddr-on-windows/
- setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&enable, sizeof(enable));
- enable = 1;
- setsockopt(s, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char *)&enable, sizeof(enable));
- #endif
-
- // Bind the socket to the incoming port
- sin.sin_family = AF_INET;
- sin.sin_addr.s_addr = htonl(limit_connections_to_localhost ? INADDR_LOOPBACK : INADDR_ANY);
- sin.sin_port = htons(port);
- if (bind(s, (struct sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)
- return RMT_ERROR_SOCKET_BIND_FAIL;
-
- // Connection is valid, remaining code is socket state modification
- tcp_socket->socket = s;
-
- // Enter a listening state with a backlog of 1 connection
- if (listen(s, 1) == SOCKET_ERROR)
- return RMT_ERROR_SOCKET_LISTEN_FAIL;
-
- // Set as non-blocking
- #ifdef RMT_PLATFORM_WINDOWS
- if (ioctlsocket(tcp_socket->socket, FIONBIO, &nonblock) == SOCKET_ERROR)
- return RMT_ERROR_SOCKET_SET_NON_BLOCKING_FAIL;
- #else
- if (fcntl(tcp_socket->socket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR)
- return RMT_ERROR_SOCKET_SET_NON_BLOCKING_FAIL;
- #endif
-
- return RMT_ERROR_NONE;
-}
-
-
-static void TCPSocket_Close(TCPSocket* tcp_socket)
-{
- assert(tcp_socket != NULL);
-
- if (tcp_socket->socket != INVALID_SOCKET)
- {
- // Shutdown the connection, stopping all sends
- int result = shutdown(tcp_socket->socket, SD_SEND);
- if (result != SOCKET_ERROR)
- {
- // Keep receiving until the peer closes the connection
- int total = 0;
- char temp_buf[128];
- while (result > 0)
- {
- result = (int)recv(tcp_socket->socket, temp_buf, sizeof(temp_buf), 0);
- total += result;
- }
- }
-
- // Close the socket and issue a network shutdown request
- closesocket(tcp_socket->socket);
- tcp_socket->socket = INVALID_SOCKET;
- }
-}
-
-
-static SocketStatus TCPSocket_PollStatus(TCPSocket* tcp_socket)
-{
- SocketStatus status;
- fd_set fd_read, fd_write, fd_errors;
- struct timeval tv;
-
- status.can_read = RMT_FALSE;
- status.can_write = RMT_FALSE;
- status.error_state = RMT_ERROR_NONE;
-
- assert(tcp_socket != NULL);
- if (tcp_socket->socket == INVALID_SOCKET)
- {
- status.error_state = RMT_ERROR_SOCKET_INVALID_POLL;
- return status;
- }
-
- // Set read/write/error markers for the socket
- FD_ZERO(&fd_read);
- FD_ZERO(&fd_write);
- FD_ZERO(&fd_errors);
-#ifdef _MSC_VER
-# pragma warning(push)
-# pragma warning(disable:4127) // warning C4127: conditional expression is constant
-#endif // _MSC_VER
- FD_SET(tcp_socket->socket, &fd_read);
- FD_SET(tcp_socket->socket, &fd_write);
- FD_SET(tcp_socket->socket, &fd_errors);
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif // _MSC_VER
-
- // Poll socket status without blocking
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- if (select(((int)tcp_socket->socket)+1, &fd_read, &fd_write, &fd_errors, &tv) == SOCKET_ERROR)
- {
- status.error_state = RMT_ERROR_SOCKET_SELECT_FAIL;
- return status;
- }
-
- status.can_read = FD_ISSET(tcp_socket->socket, &fd_read) != 0 ? RMT_TRUE : RMT_FALSE;
- status.can_write = FD_ISSET(tcp_socket->socket, &fd_write) != 0 ? RMT_TRUE : RMT_FALSE;
- status.error_state = FD_ISSET(tcp_socket->socket, &fd_errors) != 0 ? RMT_ERROR_SOCKET_POLL_ERRORS : RMT_ERROR_NONE;
- return status;
-}
-
-
-static rmtError TCPSocket_AcceptConnection(TCPSocket* tcp_socket, TCPSocket** client_socket)
-{
- SocketStatus status;
- SOCKET s;
- rmtError error;
-
- // Ensure there is an incoming connection
- assert(tcp_socket != NULL);
- status = TCPSocket_PollStatus(tcp_socket);
- if (status.error_state != RMT_ERROR_NONE || !status.can_read)
- return status.error_state;
-
- // Accept the connection
- s = accept(tcp_socket->socket, 0, 0);
- if (s == SOCKET_ERROR)
- return RMT_ERROR_SOCKET_ACCEPT_FAIL;
-
-#ifdef SO_NOSIGPIPE
- // On POSIX systems, send() may send a SIGPIPE signal when writing to an
- // already closed connection. By setting this option, we prevent the
- // signal from being emitted and send will instead return an error and set
- // errno to EPIPE.
- //
- // This is supported on BSD platforms and not on Linux.
- {
- int flag = 1;
- setsockopt(s, SOL_SOCKET, SO_NOSIGPIPE, &flag, sizeof(flag));
- }
-#endif
- // Create a client socket for the new connection
- assert(client_socket != NULL);
- New_0(TCPSocket, *client_socket);
- if (error != RMT_ERROR_NONE)
- return error;
- (*client_socket)->socket = s;
-
- return RMT_ERROR_NONE;
-}
-
-
-static int TCPSocketWouldBlock()
-{
-#ifdef RMT_PLATFORM_WINDOWS
- DWORD error = WSAGetLastError();
- return (error == WSAEWOULDBLOCK);
- #else
- int error = errno;
- return (error == EAGAIN || error == EWOULDBLOCK);
-#endif
-
-}
-
-
-static rmtError TCPSocket_Send(TCPSocket* tcp_socket, const void* data, rmtU32 length, rmtU32 timeout_ms)
-{
- SocketStatus status;
- char* cur_data = NULL;
- char* end_data = NULL;
- rmtU32 start_ms = 0;
- rmtU32 cur_ms = 0;
-
- assert(tcp_socket != NULL);
-
- start_ms = msTimer_Get();
-
- // Loop until timeout checking whether data can be written
- status.can_write = RMT_FALSE;
- while (!status.can_write)
- {
- status = TCPSocket_PollStatus(tcp_socket);
- if (status.error_state != RMT_ERROR_NONE)
- return status.error_state;
-
- cur_ms = msTimer_Get();
- if (cur_ms - start_ms > timeout_ms)
- return RMT_ERROR_SOCKET_SEND_TIMEOUT;
- }
-
- cur_data = (char*)data;
- end_data = cur_data + length;
-
- while (cur_data < end_data)
- {
- // Attempt to send the remaining chunk of data
- int bytes_sent;
- int send_flags = 0;
-#ifdef MSG_NOSIGNAL
- // On Linux this prevents send from emitting a SIGPIPE signal
- // Equivalent on BSD to the SO_NOSIGPIPE option.
- send_flags = MSG_NOSIGNAL;
-#endif
- bytes_sent = (int)send(tcp_socket->socket, cur_data, (int)(end_data - cur_data), send_flags);
-
- if (bytes_sent == SOCKET_ERROR || bytes_sent == 0)
- {
- // Close the connection if sending fails for any other reason other than blocking
- if (bytes_sent != 0 && !TCPSocketWouldBlock())
- return RMT_ERROR_SOCKET_SEND_FAIL;
-
- // First check for tick-count overflow and reset, giving a slight hitch every 49.7 days
- cur_ms = msTimer_Get();
- if (cur_ms < start_ms)
- {
- start_ms = cur_ms;
- continue;
- }
-
- //
- // Timeout can happen when:
- //
- // 1) endpoint is no longer there
- // 2) endpoint can't consume quick enough
- // 3) local buffers overflow
- //
- // As none of these are actually errors, we have to pass this timeout back to the caller.
- //
- // TODO: This strategy breaks down if a send partially completes and then times out!
- //
- if (cur_ms - start_ms > timeout_ms)
- {
- return RMT_ERROR_SOCKET_SEND_TIMEOUT;
- }
- }
- else
- {
- // Jump over the data sent
- cur_data += bytes_sent;
- }
- }
-
- return RMT_ERROR_NONE;
-}
-
-
-static rmtError TCPSocket_Receive(TCPSocket* tcp_socket, void* data, rmtU32 length, rmtU32 timeout_ms)
-{
- SocketStatus status;
- char* cur_data = NULL;
- char* end_data = NULL;
- rmtU32 start_ms = 0;
- rmtU32 cur_ms = 0;
-
- assert(tcp_socket != NULL);
-
- // Ensure there is data to receive
- status = TCPSocket_PollStatus(tcp_socket);
- if (status.error_state != RMT_ERROR_NONE)
- return status.error_state;
- if (!status.can_read)
- return RMT_ERROR_SOCKET_RECV_NO_DATA;
-
- cur_data = (char*)data;
- end_data = cur_data + length;
-
- // Loop until all data has been received
- start_ms = msTimer_Get();
- while (cur_data < end_data)
- {
- int bytes_received = (int)recv(tcp_socket->socket, cur_data, (int)(end_data - cur_data), 0);
-
- if (bytes_received == SOCKET_ERROR || bytes_received == 0)
- {
- // Close the connection if receiving fails for any other reason other than blocking
- if (bytes_received != 0 && !TCPSocketWouldBlock())
- return RMT_ERROR_SOCKET_RECV_FAILED;
-
- // First check for tick-count overflow and reset, giving a slight hitch every 49.7 days
- cur_ms = msTimer_Get();
- if (cur_ms < start_ms)
- {
- start_ms = cur_ms;
- continue;
- }
-
- //
- // Timeout can happen when:
- //
- // 1) data is delayed by sender
- // 2) sender fails to send a complete set of packets
- //
- // As not all of these scenarios are errors, we need to pass this information back to the caller.
- //
- // TODO: This strategy breaks down if a receive partially completes and then times out!
- //
- if (cur_ms - start_ms > timeout_ms)
- {
- return RMT_ERROR_SOCKET_RECV_TIMEOUT;
- }
- }
- else
- {
- // Jump over the data received
- cur_data += bytes_received;
- }
- }
-
- return RMT_ERROR_NONE;
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @SHA1: SHA-1 Cryptographic Hash Function
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-//
-// Typed to allow enforced data size specification
-//
-typedef struct
-{
- rmtU8 data[20];
-} SHA1;
-
-
-/*
- Copyright (c) 2011, Micael Hildenborg
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Micael Hildenborg nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY Micael Hildenborg ''AS IS'' AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL Micael Hildenborg BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- Contributors:
- Gustav
- Several members in the gamedev.se forum.
- Gregory Petrosyan
- */
-
-
-// Rotate an integer value to left.
-static unsigned int rol(const unsigned int value, const unsigned int steps)
-{
- return ((value << steps) | (value >> (32 - steps)));
-}
-
-
-// Sets the first 16 integers in the buffert to zero.
-// Used for clearing the W buffert.
-static void clearWBuffert(unsigned int* buffert)
-{
- int pos;
- for (pos = 16; --pos >= 0;)
- {
- buffert[pos] = 0;
- }
-}
-
-static void innerHash(unsigned int* result, unsigned int* w)
-{
- unsigned int a = result[0];
- unsigned int b = result[1];
- unsigned int c = result[2];
- unsigned int d = result[3];
- unsigned int e = result[4];
-
- int round = 0;
-
- #define sha1macro(func,val) \
- { \
- const unsigned int t = rol(a, 5) + (func) + e + val + w[round]; \
- e = d; \
- d = c; \
- c = rol(b, 30); \
- b = a; \
- a = t; \
- }
-
- while (round < 16)
- {
- sha1macro((b & c) | (~b & d), 0x5a827999)
- ++round;
- }
- while (round < 20)
- {
- w[round] = rol((w[round - 3] ^ w[round - 8] ^ w[round - 14] ^ w[round - 16]), 1);
- sha1macro((b & c) | (~b & d), 0x5a827999)
- ++round;
- }
- while (round < 40)
- {
- w[round] = rol((w[round - 3] ^ w[round - 8] ^ w[round - 14] ^ w[round - 16]), 1);
- sha1macro(b ^ c ^ d, 0x6ed9eba1)
- ++round;
- }
- while (round < 60)
- {
- w[round] = rol((w[round - 3] ^ w[round - 8] ^ w[round - 14] ^ w[round - 16]), 1);
- sha1macro((b & c) | (b & d) | (c & d), 0x8f1bbcdc)
- ++round;
- }
- while (round < 80)
- {
- w[round] = rol((w[round - 3] ^ w[round - 8] ^ w[round - 14] ^ w[round - 16]), 1);
- sha1macro(b ^ c ^ d, 0xca62c1d6)
- ++round;
- }
-
- #undef sha1macro
-
- result[0] += a;
- result[1] += b;
- result[2] += c;
- result[3] += d;
- result[4] += e;
-}
-
-
-static void calc(const void* src, const int bytelength, unsigned char* hash)
-{
- int roundPos;
- int lastBlockBytes;
- int hashByte;
-
- // Init the result array.
- unsigned int result[5] = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 };
-
- // Cast the void src pointer to be the byte array we can work with.
- const unsigned char* sarray = (const unsigned char*) src;
-
- // The reusable round buffer
- unsigned int w[80];
-
- // Loop through all complete 64byte blocks.
- const int endOfFullBlocks = bytelength - 64;
- int endCurrentBlock;
- int currentBlock = 0;
-
- while (currentBlock <= endOfFullBlocks)
- {
- endCurrentBlock = currentBlock + 64;
-
- // Init the round buffer with the 64 byte block data.
- for (roundPos = 0; currentBlock < endCurrentBlock; currentBlock += 4)
- {
- // This line will swap endian on big endian and keep endian on little endian.
- w[roundPos++] = (unsigned int) sarray[currentBlock + 3]
- | (((unsigned int) sarray[currentBlock + 2]) << 8)
- | (((unsigned int) sarray[currentBlock + 1]) << 16)
- | (((unsigned int) sarray[currentBlock]) << 24);
- }
- innerHash(result, w);
- }
-
- // Handle the last and not full 64 byte block if existing.
- endCurrentBlock = bytelength - currentBlock;
- clearWBuffert(w);
- lastBlockBytes = 0;
- for (;lastBlockBytes < endCurrentBlock; ++lastBlockBytes)
- {
- w[lastBlockBytes >> 2] |= (unsigned int) sarray[lastBlockBytes + currentBlock] << ((3 - (lastBlockBytes & 3)) << 3);
- }
- w[lastBlockBytes >> 2] |= 0x80U << ((3 - (lastBlockBytes & 3)) << 3);
- if (endCurrentBlock >= 56)
- {
- innerHash(result, w);
- clearWBuffert(w);
- }
- w[15] = bytelength << 3;
- innerHash(result, w);
-
- // Store hash in result pointer, and make sure we get in in the correct order on both endian models.
- for (hashByte = 20; --hashByte >= 0;)
- {
- hash[hashByte] = (result[hashByte >> 2] >> (((3 - hashByte) & 0x3) << 3)) & 0xff;
- }
-}
-
-
-static SHA1 SHA1_Calculate(const void* src, unsigned int length)
-{
- SHA1 hash;
- assert((int)length >= 0);
- calc(src, length, hash.data);
- return hash;
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @BASE64: Base-64 encoder
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-static const char* b64_encoding_table =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789+/";
-
-
-static rmtU32 Base64_CalculateEncodedLength(rmtU32 length)
-{
- // ceil(l * 4/3)
- return 4 * ((length + 2) / 3);
-}
-
-
-static void Base64_Encode(const rmtU8* in_bytes, rmtU32 length, rmtU8* out_bytes)
-{
- rmtU32 i;
- rmtU32 encoded_length;
- rmtU32 remaining_bytes;
-
- rmtU8* optr = out_bytes;
-
- for (i = 0; i < length; )
- {
- // Read input 3 values at a time, null terminating
- rmtU32 c0 = i < length ? in_bytes[i++] : 0;
- rmtU32 c1 = i < length ? in_bytes[i++] : 0;
- rmtU32 c2 = i < length ? in_bytes[i++] : 0;
-
- // Encode 4 bytes for ever 3 input bytes
- rmtU32 triple = (c0 << 0x10) + (c1 << 0x08) + c2;
- *optr++ = b64_encoding_table[(triple >> 3 * 6) & 0x3F];
- *optr++ = b64_encoding_table[(triple >> 2 * 6) & 0x3F];
- *optr++ = b64_encoding_table[(triple >> 1 * 6) & 0x3F];
- *optr++ = b64_encoding_table[(triple >> 0 * 6) & 0x3F];
- }
-
- // Pad output to multiple of 3 bytes with terminating '='
- encoded_length = Base64_CalculateEncodedLength(length);
- remaining_bytes = (3 - ((length + 2) % 3)) - 1;
- for (i = 0; i < remaining_bytes; i++)
- out_bytes[encoded_length - 1 - i] = '=';
-
- // Null terminate
- out_bytes[encoded_length] = 0;
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @MURMURHASH: MurmurHash3
- https://code.google.com/p/smhasher
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-//-----------------------------------------------------------------------------
-// MurmurHash3 was written by Austin Appleby, and is placed in the public
-// domain. The author hereby disclaims copyright to this source code.
-//-----------------------------------------------------------------------------
-
-
-static rmtU32 rotl32(rmtU32 x, rmtS8 r)
-{
- return (x << r) | (x >> (32 - r));
-}
-
-
-// Block read - if your platform needs to do endian-swapping or can only
-// handle aligned reads, do the conversion here
-static rmtU32 getblock32(const rmtU32* p, int i)
-{
- return p[i];
-}
-
-
-// Finalization mix - force all bits of a hash block to avalanche
-static rmtU32 fmix32(rmtU32 h)
-{
- h ^= h >> 16;
- h *= 0x85ebca6b;
- h ^= h >> 13;
- h *= 0xc2b2ae35;
- h ^= h >> 16;
- return h;
-}
-
-
-static rmtU32 MurmurHash3_x86_32(const void* key, int len, rmtU32 seed)
-{
- const rmtU8* data = (const rmtU8*)key;
- const int nblocks = len / 4;
-
- rmtU32 h1 = seed;
-
- const rmtU32 c1 = 0xcc9e2d51;
- const rmtU32 c2 = 0x1b873593;
-
- int i;
-
- const rmtU32 * blocks = (const rmtU32 *)(data + nblocks*4);
- const rmtU8 * tail = (const rmtU8*)(data + nblocks*4);
-
- rmtU32 k1 = 0;
-
- //----------
- // body
-
- for (i = -nblocks; i; i++)
- {
- rmtU32 k2 = getblock32(blocks,i);
-
- k2 *= c1;
- k2 = rotl32(k2,15);
- k2 *= c2;
-
- h1 ^= k2;
- h1 = rotl32(h1,13);
- h1 = h1*5+0xe6546b64;
- }
-
- //----------
- // tail
-
- switch(len & 3)
- {
- case 3: k1 ^= tail[2] << 16;
- case 2: k1 ^= tail[1] << 8;
- case 1: k1 ^= tail[0];
- k1 *= c1;
- k1 = rotl32(k1,15);
- k1 *= c2;
- h1 ^= k1;
- };
-
- //----------
- // finalization
-
- h1 ^= len;
-
- h1 = fmix32(h1);
-
- return h1;
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @WEBSOCKETS: WebSockets
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-enum WebSocketMode
-{
- WEBSOCKET_NONE = 0,
- WEBSOCKET_TEXT = 1,
- WEBSOCKET_BINARY = 2,
-};
-
-
-typedef struct
-{
- TCPSocket* tcp_socket;
-
- enum WebSocketMode mode;
-
- rmtU32 frame_bytes_remaining;
- rmtU32 mask_offset;
-
- union
- {
- rmtU8 mask[4];
- rmtU32 mask_u32;
- } data;
-
-} WebSocket;
-
-
-static void WebSocket_Close(WebSocket* web_socket);
-
-
-static char* GetField(char* buffer, rsize_t buffer_length, rmtPStr field_name)
-{
- char* field = NULL;
- char* buffer_end = buffer + buffer_length - 1;
-
- rsize_t field_length = strnlen_s(field_name, buffer_length);
- if (field_length == 0)
- return NULL;
-
- // Search for the start of the field
- if (strstr_s(buffer, buffer_length, field_name, field_length, &field) != EOK)
- return NULL;
-
- // Field name is now guaranteed to be in the buffer so its safe to jump over it without hitting the bounds
- field += strlen(field_name);
-
- // Skip any trailing whitespace
- while (*field == ' ')
- {
- if (field >= buffer_end)
- return NULL;
- field++;
- }
-
- return field;
-}
-
-
-static const char websocket_guid[] = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
-static const char websocket_response[] =
- "HTTP/1.1 101 Switching Protocols\r\n"
- "Upgrade: websocket\r\n"
- "Connection: Upgrade\r\n"
- "Sec-WebSocket-Accept: ";
-
-
-static rmtError WebSocketHandshake(TCPSocket* tcp_socket, rmtPStr limit_host)
-{
- rmtU32 start_ms, now_ms;
-
- // Parsing scratchpad
- char buffer[1024];
- char* buffer_ptr = buffer;
- int buffer_len = sizeof(buffer) - 1;
- char* buffer_end = buffer + buffer_len;
-
- char response_buffer[256];
- int response_buffer_len = sizeof(response_buffer) - 1;
-
- char* version;
- char* host;
- char* key;
- char* key_end;
- SHA1 hash;
-
- assert(tcp_socket != NULL);
-
- start_ms = msTimer_Get();
-
- // Really inefficient way of receiving the handshake data from the browser
- // Not really sure how to do this any better, as the termination requirement is \r\n\r\n
- while (buffer_ptr - buffer < buffer_len)
- {
- rmtError error = TCPSocket_Receive(tcp_socket, buffer_ptr, 1, 20);
- if (error == RMT_ERROR_SOCKET_RECV_FAILED)
- return error;
-
- // If there's a stall receiving the data, check for a handshake timeout
- if (error == RMT_ERROR_SOCKET_RECV_NO_DATA || error == RMT_ERROR_SOCKET_RECV_TIMEOUT)
- {
- now_ms = msTimer_Get();
- if (now_ms - start_ms > 1000)
- return RMT_ERROR_SOCKET_RECV_TIMEOUT;
-
- continue;
- }
-
- // Just in case new enums are added...
- assert(error == RMT_ERROR_NONE);
-
- if (buffer_ptr - buffer >= 4)
- {
- if (*(buffer_ptr - 3) == '\r' &&
- *(buffer_ptr - 2) == '\n' &&
- *(buffer_ptr - 1) == '\r' &&
- *(buffer_ptr - 0) == '\n')
- break;
- }
-
- buffer_ptr++;
- }
- *buffer_ptr = 0;
-
- // HTTP GET instruction
- if (memcmp(buffer, "GET", 3) != 0)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_NOT_GET;
-
- // Look for the version number and verify that it's supported
- version = GetField(buffer, buffer_len, "Sec-WebSocket-Version:");
- if (version == NULL)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_NO_VERSION;
- if (buffer_end - version < 2 || (version[0] != '8' && (version[0] != '1' || version[1] != '3')))
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_BAD_VERSION;
-
- // Make sure this connection comes from a known host
- host = GetField(buffer, buffer_len, "Host:");
- if (host == NULL)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_NO_HOST;
- if (limit_host != NULL)
- {
- rsize_t limit_host_len = strnlen_s(limit_host, 128);
- char* found = NULL;
- if (strstr_s(host, buffer_end - host, limit_host, limit_host_len, &found) != EOK)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_BAD_HOST;
- }
-
- // Look for the key start and null-terminate it within the receive buffer
- key = GetField(buffer, buffer_len, "Sec-WebSocket-Key:");
- if (key == NULL)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_NO_KEY;
- if (strstr_s(key, buffer_end - key, "\r\n", 2, &key_end) != EOK)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_BAD_KEY;
- *key_end = 0;
-
- // Concatenate the browser's key with the WebSocket Protocol GUID and base64 encode
- // the hash, to prove to the browser that this is a bonafide WebSocket server
- buffer[0] = 0;
- if (strncat_s(buffer, buffer_len, key, key_end - key) != EOK)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_STRING_FAIL;
- if (strncat_s(buffer, buffer_len, websocket_guid, sizeof(websocket_guid)) != EOK)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_STRING_FAIL;
- hash = SHA1_Calculate(buffer, (rmtU32)strnlen_s(buffer, buffer_len));
- Base64_Encode(hash.data, sizeof(hash.data), (rmtU8*)buffer);
-
- // Send the response back to the server with a longer timeout than usual
- response_buffer[0] = 0;
- if (strncat_s(response_buffer, response_buffer_len, websocket_response, sizeof(websocket_response)) != EOK)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_STRING_FAIL;
- if (strncat_s(response_buffer, response_buffer_len, buffer, buffer_len) != EOK)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_STRING_FAIL;
- if (strncat_s(response_buffer, response_buffer_len, "\r\n\r\n", 4) != EOK)
- return RMT_ERROR_WEBSOCKET_HANDSHAKE_STRING_FAIL;
-
- return TCPSocket_Send(tcp_socket, response_buffer, (rmtU32)strnlen_s(response_buffer, response_buffer_len), 1000);
-}
-
-
-static rmtError WebSocket_Constructor(WebSocket* web_socket, TCPSocket* tcp_socket)
-{
- rmtError error = RMT_ERROR_NONE;
-
- assert(web_socket != NULL);
- web_socket->tcp_socket = tcp_socket;
- web_socket->mode = WEBSOCKET_NONE;
- web_socket->frame_bytes_remaining = 0;
- web_socket->mask_offset = 0;
- web_socket->data.mask[0] = 0;
- web_socket->data.mask[1] = 0;
- web_socket->data.mask[2] = 0;
- web_socket->data.mask[3] = 0;
-
- // Caller can optionally specify which TCP socket to use
- if (web_socket->tcp_socket == NULL)
- New_0(TCPSocket, web_socket->tcp_socket);
-
- return error;
-}
-
-
-static void WebSocket_Destructor(WebSocket* web_socket)
-{
- WebSocket_Close(web_socket);
-}
-
-
-static rmtError WebSocket_RunServer(WebSocket* web_socket, rmtU16 port, rmtBool limit_connections_to_localhost, enum WebSocketMode mode)
-{
- // Create the server's listening socket
- assert(web_socket != NULL);
- web_socket->mode = mode;
- return TCPSocket_RunServer(web_socket->tcp_socket, port, limit_connections_to_localhost);
-}
-
-
-static void WebSocket_Close(WebSocket* web_socket)
-{
- assert(web_socket != NULL);
- Delete(TCPSocket, web_socket->tcp_socket);
-}
-
-
-static SocketStatus WebSocket_PollStatus(WebSocket* web_socket)
-{
- assert(web_socket != NULL);
- return TCPSocket_PollStatus(web_socket->tcp_socket);
-}
-
-
-static rmtError WebSocket_AcceptConnection(WebSocket* web_socket, WebSocket** client_socket)
-{
- TCPSocket* tcp_socket = NULL;
- rmtError error;
-
- // Is there a waiting connection?
- assert(web_socket != NULL);
- error = TCPSocket_AcceptConnection(web_socket->tcp_socket, &tcp_socket);
- if (error != RMT_ERROR_NONE || tcp_socket == NULL)
- return error;
-
- // Need a successful handshake between client/server before allowing the connection
- // TODO: Specify limit_host
- error = WebSocketHandshake(tcp_socket, NULL);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // Allocate and return a new client socket
- assert(client_socket != NULL);
- New_1(WebSocket, *client_socket, tcp_socket);
- if (error != RMT_ERROR_NONE)
- return error;
-
- (*client_socket)->mode = web_socket->mode;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void WriteSize(rmtU32 size, rmtU8* dest, rmtU32 dest_size, rmtU32 dest_offset)
-{
- int size_size = dest_size - dest_offset;
- rmtU32 i;
- for (i = 0; i < dest_size; i++)
- {
- int j = i - dest_offset;
- dest[i] = (j < 0) ? 0 : (size >> ((size_size - j - 1) * 8)) & 0xFF;
- }
-}
-
-
-static rmtError WebSocket_Send(WebSocket* web_socket, const void* data, rmtU32 length, rmtU32 timeout_ms)
-{
- rmtError error;
- SocketStatus status;
- rmtU8 final_fragment, frame_type, frame_header[10];
- rmtU32 frame_header_size;
-
- assert(web_socket != NULL);
-
- // Can't send if there are socket errors
- status = WebSocket_PollStatus(web_socket);
- if (status.error_state != RMT_ERROR_NONE)
- return status.error_state;
-
- final_fragment = 0x1 << 7;
- frame_type = (rmtU8)web_socket->mode;
- frame_header[0] = final_fragment | frame_type;
-
- // Construct the frame header, correctly applying the narrowest size
- frame_header_size = 0;
- if (length <= 125)
- {
- frame_header_size = 2;
- frame_header[1] = (rmtU8)length;
- }
- else if (length <= 65535)
- {
- frame_header_size = 2 + 2;
- frame_header[1] = 126;
- WriteSize(length, frame_header + 2, 2, 0);
- }
- else
- {
- frame_header_size = 2 + 8;
- frame_header[1] = 127;
- WriteSize(length, frame_header + 2, 8, 4);
- }
-
- // Send frame header
- assert(data != NULL);
- error = TCPSocket_Send(web_socket->tcp_socket, frame_header, frame_header_size, timeout_ms);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // Send frame data separately so that we don't have to allocate memory or memcpy it into
- // the same buffer as the header.
- // If this step times out then the frame data will be discarded and the browser will receive
- // an invalid frame without its data, forcing a disconnect error.
- // Before things get that far, flag this as a send fail and let the server schedule a graceful
- // disconnect.
- error = TCPSocket_Send(web_socket->tcp_socket, data, length, timeout_ms);
- if (error == RMT_ERROR_SOCKET_SEND_TIMEOUT)
- error = RMT_ERROR_SOCKET_SEND_FAIL;
-
- return error;
-}
-
-
-static rmtError ReceiveFrameHeader(WebSocket* web_socket)
-{
- // TODO: Specify infinite timeout?
-
- rmtError error;
- rmtU8 msg_header[2] = { 0, 0 };
- int msg_length, size_bytes_remaining, i;
- rmtBool mask_present;
-
- assert(web_socket != NULL);
-
- // Get message header
- error = TCPSocket_Receive(web_socket->tcp_socket, msg_header, 2, 20);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // Check for WebSocket Protocol disconnect
- if (msg_header[0] == 0x88)
- return RMT_ERROR_WEBSOCKET_DISCONNECTED;
-
- // Check that the client isn't sending messages we don't understand
- if (msg_header[0] != 0x81 && msg_header[0] != 0x82)
- return RMT_ERROR_WEBSOCKET_BAD_FRAME_HEADER;
-
- // Get message length and check to see if it's a marker for a wider length
- msg_length = msg_header[1] & 0x7F;
- size_bytes_remaining = 0;
- switch (msg_length)
- {
- case 126: size_bytes_remaining = 2; break;
- case 127: size_bytes_remaining = 8; break;
- }
-
- if (size_bytes_remaining > 0)
- {
- // Receive the wider bytes of the length
- rmtU8 size_bytes[4];
- error = TCPSocket_Receive(web_socket->tcp_socket, size_bytes, size_bytes_remaining, 20);
- if (error != RMT_ERROR_NONE)
- return RMT_ERROR_WEBSOCKET_BAD_FRAME_HEADER_SIZE;
-
- // Calculate new length, MSB first
- msg_length = 0;
- for (i = 0; i < size_bytes_remaining; i++)
- msg_length |= size_bytes[i] << ((size_bytes_remaining - 1 - i) * 8);
- }
-
- // Receive any message data masks
- mask_present = (msg_header[1] & 0x80) != 0 ? RMT_TRUE : RMT_FALSE;
- if (mask_present)
- {
- error = TCPSocket_Receive(web_socket->tcp_socket, web_socket->data.mask, 4, 20);
- if (error != RMT_ERROR_NONE)
- return error;
- }
-
- web_socket->frame_bytes_remaining = msg_length;
- web_socket->mask_offset = 0;
-
- return RMT_ERROR_NONE;
-}
-
-
-static rmtError WebSocket_Receive(WebSocket* web_socket, void* data, rmtU32* msg_len, rmtU32 length, rmtU32 timeout_ms)
-{
- SocketStatus status;
- char* cur_data;
- char* end_data;
- rmtU32 start_ms, now_ms;
- rmtU32 bytes_to_read;
- rmtError error;
-
- assert(web_socket != NULL);
-
- // Can't read with any socket errors
- status = WebSocket_PollStatus(web_socket);
- if (status.error_state != RMT_ERROR_NONE)
- return status.error_state;
-
- cur_data = (char*)data;
- end_data = cur_data + length;
-
- start_ms = msTimer_Get();
- while (cur_data < end_data)
- {
- // Get next WebSocket frame if we've run out of data to read from the socket
- if (web_socket->frame_bytes_remaining == 0)
- {
- error = ReceiveFrameHeader(web_socket);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // Set output message length only on initial receive
- if (msg_len != NULL)
- *msg_len = web_socket->frame_bytes_remaining;
- }
-
- // Read as much required data as possible
- bytes_to_read = web_socket->frame_bytes_remaining < length ? web_socket->frame_bytes_remaining : length;
- error = TCPSocket_Receive(web_socket->tcp_socket, cur_data, bytes_to_read, 20);
- if (error == RMT_ERROR_SOCKET_RECV_FAILED)
- return error;
-
- // If there's a stall receiving the data, check for timeout
- if (error == RMT_ERROR_SOCKET_RECV_NO_DATA || error == RMT_ERROR_SOCKET_RECV_TIMEOUT)
- {
- now_ms = msTimer_Get();
- if (now_ms - start_ms > timeout_ms)
- return RMT_ERROR_SOCKET_RECV_TIMEOUT;
- continue;
- }
-
- // Apply data mask
- if (web_socket->data.mask_u32 != 0)
- {
- rmtU32 i;
- for (i = 0; i < bytes_to_read; i++)
- {
- *((rmtU8*)cur_data + i) ^= web_socket->data.mask[web_socket->mask_offset & 3];
- web_socket->mask_offset++;
- }
- }
-
- cur_data += bytes_to_read;
- web_socket->frame_bytes_remaining -= bytes_to_read;
- }
-
- return RMT_ERROR_NONE;
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @MESSAGEQ: Multiple producer, single consumer message queue
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-typedef enum MessageID
-{
- MsgID_NotReady,
- MsgID_LogText,
- MsgID_SampleTree,
-} MessageID;
-
-
-typedef struct Message
-{
- MessageID id;
-
- rmtU32 payload_size;
-
- // For telling which thread the message came from in the debugger
- struct ThreadSampler* thread_sampler;
-
- rmtU8 payload[1];
-} Message;
-
-
-// Multiple producer, single consumer message queue that uses its own data buffer
-// to store the message data.
-typedef struct rmtMessageQueue
-{
- rmtU32 size;
-
- // The physical address of this data buffer is pointed to by two sequential
- // virtual memory pages, allowing automatic wrap-around of any reads or writes
- // that exceed the limits of the buffer.
- VirtualMirrorBuffer* data;
-
- // Read/write position never wrap allowing trivial overflow checks
- // with easier debugging
- rmtU32 read_pos;
- rmtU32 write_pos;
-
-} rmtMessageQueue;
-
-
-static rmtError rmtMessageQueue_Constructor(rmtMessageQueue* queue, rmtU32 size)
-{
- rmtError error;
-
- assert(queue != NULL);
-
- // Set defaults
- queue->size = 0;
- queue->data = NULL;
- queue->read_pos = 0;
- queue->write_pos = 0;
-
- New_2(VirtualMirrorBuffer, queue->data, size, 10);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // The mirror buffer needs to be page-aligned and will change the requested
- // size to match that.
- queue->size = queue->data->size;
-
- // Set the entire buffer to not ready message
- memset(queue->data->ptr, MsgID_NotReady, queue->size);
-
- return RMT_ERROR_NONE;
-}
-
-
-static void rmtMessageQueue_Destructor(rmtMessageQueue* queue)
-{
- assert(queue != NULL);
- Delete(VirtualMirrorBuffer, queue->data);
-}
-
-
-static rmtU32 rmtMessageQueue_SizeForPayload(rmtU32 payload_size)
-{
- // Add message header and align for ARM platforms
- rmtU32 size = sizeof(Message) + payload_size;
- size = (size + 3) & ~3U;
- return size;
-}
-
-
-static Message* rmtMessageQueue_AllocMessage(rmtMessageQueue* queue, rmtU32 payload_size, struct ThreadSampler* thread_sampler)
-{
- Message* msg;
-
- rmtU32 write_size = rmtMessageQueue_SizeForPayload(payload_size);
-
- assert(queue != NULL);
-
- for (;;)
- {
- // Check for potential overflow
- rmtU32 s = queue->size;
- rmtU32 r = queue->read_pos;
- rmtU32 w = queue->write_pos;
- if ((int)(w - r) > ((int)(s - write_size)))
- return NULL;
-
- // Point to the newly allocated space
- msg = (Message*)(queue->data->ptr + (w & (s - 1)));
-
- // Increment the write position, leaving the loop if this is the thread that succeeded
- if (AtomicCompareAndSwap(&queue->write_pos, w, w + write_size) == RMT_TRUE)
- {
- // Safe to set payload size after thread claims ownership of this allocated range
- msg->payload_size = payload_size;
- msg->thread_sampler = thread_sampler;
- break;
- }
- }
-
- return msg;
-}
-
-
-static void rmtMessageQueue_CommitMessage(Message* message, MessageID id)
-{
- assert(message != NULL);
-
- // Ensure message writes complete before commit
- WriteFence();
-
- // Setting the message ID signals to the consumer that the message is ready
- assert(message->id == MsgID_NotReady);
- message->id = id;
-}
-
-
-Message* rmtMessageQueue_PeekNextMessage(rmtMessageQueue* queue)
-{
- Message* ptr;
- rmtU32 r;
-
- assert(queue != NULL);
-
- // First check that there are bytes queued
- if (queue->write_pos - queue->read_pos == 0)
- return NULL;
-
- // Messages are in the queue but may not have been commit yet
- // Messages behind this one may have been commit but it's not reachable until
- // the next one in the queue is ready.
- r = queue->read_pos & (queue->size - 1);
- ptr = (Message*)(queue->data->ptr + r);
- if (ptr->id != MsgID_NotReady)
- return ptr;
-
- return NULL;
-}
-
-
-static void rmtMessageQueue_ConsumeNextMessage(rmtMessageQueue* queue, Message* message)
-{
- rmtU32 message_size;
-
- assert(queue != NULL);
- assert(message != NULL);
-
- // Setting the message ID to "not ready" serves as a marker to the consumer that even though
- // space has been allocated for a message, the message isn't ready to be consumed
- // yet.
- //
- // We can't do that when allocating the message because multiple threads will be fighting for
- // the same location. Instead, clear out any messages just read by the consumer before advancing
- // the read position so that a winning thread's allocation will inherit the "not ready" state.
- //
- // This costs some write bandwidth and has the potential to flush cache to other cores.
- message_size = rmtMessageQueue_SizeForPayload(message->payload_size);
- memset(message, MsgID_NotReady, message_size);
-
- // Ensure clear completes before advancing the read position
- WriteFence();
- queue->read_pos += message_size;
-}
-
-
-static rmtBool rmtMessageQueue_IsEmpty(rmtMessageQueue* queue)
-{
- assert(queue != NULL);
- return queue->write_pos - queue->read_pos == 0;
-}
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @NETWORK: Network Server
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-typedef rmtError (*Server_ReceiveHandler)(void*, char*, rmtU32);
-
-
-typedef struct
-{
- WebSocket* listen_socket;
-
- WebSocket* client_socket;
-
- rmtU32 last_ping_time;
-
- rmtU16 port;
- rmtBool limit_connections_to_localhost;
-
- // Handler for receiving messages from the client
- Server_ReceiveHandler receive_handler;
- void* receive_handler_context;
-} Server;
-
-
-static rmtError Server_CreateListenSocket(Server* server, rmtU16 port, rmtBool limit_connections_to_localhost)
-{
- rmtError error = RMT_ERROR_NONE;
-
- New_1(WebSocket, server->listen_socket, NULL);
- if (error == RMT_ERROR_NONE)
- error = WebSocket_RunServer(server->listen_socket, port, limit_connections_to_localhost, WEBSOCKET_BINARY);
-
- return error;
-}
-
-
-static rmtError Server_Constructor(Server* server, rmtU16 port, rmtBool limit_connections_to_localhost)
-{
- assert(server != NULL);
- server->listen_socket = NULL;
- server->client_socket = NULL;
- server->last_ping_time = 0;
- server->port = port;
- server->limit_connections_to_localhost = limit_connections_to_localhost;
- server->receive_handler = NULL;
- server->receive_handler_context = NULL;
-
- // Create the listening WebSocket
- return Server_CreateListenSocket(server, port, limit_connections_to_localhost);
-}
-
-
-static void Server_Destructor(Server* server)
-{
- assert(server != NULL);
- Delete(WebSocket, server->client_socket);
- Delete(WebSocket, server->listen_socket);
-}
-
-
-static rmtBool Server_IsClientConnected(Server* server)
-{
- assert(server != NULL);
- return server->client_socket != NULL ? RMT_TRUE : RMT_FALSE;
-}
-
-
-static void Server_DisconnectClient(Server* server)
-{
- WebSocket* client_socket;
-
- assert(server != NULL);
-
- // NULL the variable before destroying the socket
- client_socket = server->client_socket;
- server->client_socket = NULL;
- WriteFence();
- Delete(WebSocket, client_socket);
-}
-
-
-static rmtError Server_Send(Server* server, const void* data, rmtU32 length, rmtU32 timeout)
-{
- assert(server != NULL);
- if (Server_IsClientConnected(server))
- {
- rmtError error = WebSocket_Send(server->client_socket, data, length, timeout);
- if (error == RMT_ERROR_SOCKET_SEND_FAIL)
- Server_DisconnectClient(server);
-
- return error;
- }
-
- return RMT_ERROR_NONE;
-}
-
-
-static rmtError Server_ReceiveMessage(Server* server, char message_first_byte, rmtU32 message_length)
-{
- char message_data[1024];
- rmtError error;
-
- // Check for potential message data overflow
- if (message_length >= sizeof(message_data) - 1)
- {
- rmt_LogText("Ignoring console input bigger than internal receive buffer (1024 bytes)");
- return RMT_ERROR_NONE;
- }
-
- // Receive the rest of the message
- message_data[0] = message_first_byte;
- error = WebSocket_Receive(server->client_socket, message_data + 1, NULL, message_length - 1, 100);
- if (error != RMT_ERROR_NONE)
- return error;
- message_data[message_length] = 0;
-
- // Each message must have a descriptive 4 byte header
- if (message_length < 4)
- return RMT_ERROR_NONE;
-
- // Dispatch to handler
- if (server->receive_handler)
- error = server->receive_handler(server->receive_handler_context, message_data, message_length);
-
- return error;
-}
-
-
-static void Server_Update(Server* server)
-{
- rmtU32 cur_time;
-
- assert(server != NULL);
-
- // Recreate the listening socket if it's been destroyed earlier
- if (server->listen_socket == NULL)
- Server_CreateListenSocket(server, server->port, server->limit_connections_to_localhost);
-
- if (server->listen_socket != NULL && server->client_socket == NULL)
- {
- // Accept connections as long as there is no client connected
- WebSocket* client_socket = NULL;
- rmtError error = WebSocket_AcceptConnection(server->listen_socket, &client_socket);
- if (error == RMT_ERROR_NONE)
- {
- server->client_socket = client_socket;
- }
- else
- {
- // Destroy the listen socket on failure to accept
- // It will get recreated in another update
- Delete(WebSocket, server->listen_socket);
- }
- }
-
- else
- {
- // Loop checking for incoming messages
- for (;;)
- {
- // Inspect first byte to see if a message is there
- char message_first_byte;
- rmtU32 message_length;
- rmtError error = WebSocket_Receive(server->client_socket, &message_first_byte, &message_length, 1, 0);
- if (error == RMT_ERROR_NONE)
- {
- // Parse remaining message
- error = Server_ReceiveMessage(server, message_first_byte, message_length);
- if (error != RMT_ERROR_NONE)
- {
- Server_DisconnectClient(server);
- break;
- }
-
- // Check for more...
- continue;
- }
-
- // Passable errors...
- if (error == RMT_ERROR_SOCKET_RECV_NO_DATA)
- {
- // No data available
- break;
- }
-
- if (error == RMT_ERROR_SOCKET_RECV_TIMEOUT)
- {
- // Data not available yet, can afford to ignore as we're only reading the first byte
- break;
- }
-
- // Anything else is an error that may have closed the connection
- Server_DisconnectClient(server);
- break;
- }
- }
-
- // Send pings to the client every second
- cur_time = msTimer_Get();
- if (cur_time - server->last_ping_time > 1000)
- {
- rmtPStr ping_message = "PING";
- Server_Send(server, ping_message, (rmtU32)strlen(ping_message), 4);
- server->last_ping_time = cur_time;
- }
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @SAMPLE: Base Sample Description for CPU by default
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#define SAMPLE_NAME_LEN 128
-
-
-enum SampleType
-{
- SampleType_CPU,
- SampleType_CUDA,
- SampleType_D3D11,
- SampleType_OpenGL,
- SampleType_Metal,
- SampleType_Count,
-};
-
-
-typedef struct Sample
-{
- // Inherit so that samples can be quickly allocated
- ObjectLink Link;
-
- enum SampleType type;
-
- // Used to anonymously copy sample data without knowning its type
- rmtU32 size_bytes;
-
- // Hash generated from sample name
- rmtU32 name_hash;
-
- // Unique, persistent ID among all samples
- rmtU32 unique_id;
-
- // Null-terminated string storing the hash-prefixed 6-digit colour
- rmtU8 unique_id_html_colour[8];
-
- // Links to related samples in the tree
- struct Sample* parent;
- struct Sample* first_child;
- struct Sample* last_child;
- struct Sample* next_sibling;
-
- // Keep track of child count to distinguish from repeated calls to the same function at the same stack level
- // This is also mixed with the callstack hash to allow consistent addressing of any point in the tree
- rmtU32 nb_children;
-
- // Sample end points and length in microseconds
- rmtU64 us_start;
- rmtU64 us_end;
- rmtU64 us_length;
-
-} Sample;
-
-
-static rmtError Sample_Constructor(Sample* sample)
-{
- assert(sample != NULL);
-
- ObjectLink_Constructor((ObjectLink*)sample);
-
- sample->type = SampleType_CPU;
- sample->size_bytes = sizeof(Sample);
- sample->name_hash = 0;
- sample->unique_id = 0;
- sample->unique_id_html_colour[0] = '#';
- sample->unique_id_html_colour[1] = 0;
- sample->unique_id_html_colour[7] = 0;
- sample->parent = NULL;
- sample->first_child = NULL;
- sample->last_child = NULL;
- sample->next_sibling = NULL;
- sample->nb_children = 0;
- sample->us_start = 0;
- sample->us_end = 0;
- sample->us_length = 0;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void Sample_Destructor(Sample* sample)
-{
- RMT_UNREFERENCED_PARAMETER(sample);
-}
-
-
-static void Sample_Prepare(Sample* sample, rmtU32 name_hash, Sample* parent)
-{
- sample->name_hash = name_hash;
- sample->unique_id = 0;
- sample->parent = parent;
- sample->first_child = NULL;
- sample->last_child = NULL;
- sample->next_sibling = NULL;
- sample->nb_children = 0;
- sample->us_start = 0;
- sample->us_end = 0;
- sample->us_length = 0;
-}
-
-
-#define BIN_ERROR_CHECK(stmt) { error = stmt; if (error != RMT_ERROR_NONE) return error; }
-
-
-static rmtError bin_SampleArray(Buffer* buffer, Sample* first_sample);
-
-
-static rmtError bin_Sample(Buffer* buffer, Sample* sample)
-{
- rmtError error;
-
- assert(sample != NULL);
-
- BIN_ERROR_CHECK(Buffer_WriteU32(buffer, sample->name_hash));
- BIN_ERROR_CHECK(Buffer_WriteU32(buffer, sample->unique_id));
- BIN_ERROR_CHECK(Buffer_Write(buffer, sample->unique_id_html_colour, 7));
- BIN_ERROR_CHECK(Buffer_WriteU64(buffer, sample->us_start));
- BIN_ERROR_CHECK(Buffer_WriteU64(buffer, maxS64(sample->us_length, 0)));
- BIN_ERROR_CHECK(bin_SampleArray(buffer, sample));
-
- return RMT_ERROR_NONE;
-}
-
-
-static rmtError bin_SampleArray(Buffer* buffer, Sample* parent_sample)
-{
- rmtError error;
- Sample* sample;
-
- BIN_ERROR_CHECK(Buffer_WriteU32(buffer, parent_sample->nb_children));
- for (sample = parent_sample->first_child; sample != NULL; sample = sample->next_sibling)
- BIN_ERROR_CHECK(bin_Sample(buffer, sample));
-
- return RMT_ERROR_NONE;
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @SAMPLETREE: A tree of samples with their allocator
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-typedef struct SampleTree
-{
- // Allocator for all samples
- ObjectAllocator* allocator;
-
- // Root sample for all samples created by this thread
- Sample* root;
-
- // Most recently pushed sample
- Sample* current_parent;
-
-} SampleTree;
-
-
-static rmtError SampleTree_Constructor(SampleTree* tree, rmtU32 sample_size, ObjConstructor constructor, ObjDestructor destructor)
-{
- rmtError error;
-
- assert(tree != NULL);
-
- tree->allocator = NULL;
- tree->root = NULL;
- tree->current_parent = NULL;
-
- // Create the sample allocator
- New_3(ObjectAllocator, tree->allocator, sample_size, constructor, destructor);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // Create a root sample that's around for the lifetime of the thread
- error = ObjectAllocator_Alloc(tree->allocator, (void**)&tree->root);
- if (error != RMT_ERROR_NONE)
- return error;
- Sample_Prepare(tree->root, 0, NULL);
- tree->current_parent = tree->root;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void SampleTree_Destructor(SampleTree* tree)
-{
- assert(tree != NULL);
-
- if (tree->root != NULL)
- {
- ObjectAllocator_Free(tree->allocator, tree->root);
- tree->root = NULL;
- }
-
- Delete(ObjectAllocator, tree->allocator);
-}
-
-
-static rmtU32 HashCombine(rmtU32 hash_a, rmtU32 hash_b)
-{
- // A sequence of 32 uniformly random bits so that each bit of the combined hash is changed on application
- // Derived from the golden ratio: UINT_MAX / ((1 + sqrt(5)) / 2)
- // In reality it's just an arbitrary value which happens to work well, avoiding mapping all zeros to zeros.
- // http://burtleburtle.net/bob/hash/doobs.html
- static rmtU32 random_bits = 0x9E3779B9;
- hash_a ^= hash_b + random_bits + (hash_a << 6) + (hash_a >> 2);
- return hash_a;
-}
-
-
-static rmtError SampleTree_Push(SampleTree* tree, rmtU32 name_hash, rmtU32 flags, Sample** sample)
-{
- Sample* parent;
- rmtError error;
- rmtU32 unique_id;
-
- // As each tree has a root sample node allocated, a parent must always be present
- assert(tree != NULL);
- assert(tree->current_parent != NULL);
- parent = tree->current_parent;
-
- if ((flags & RMTSF_Aggregate) != 0)
- {
- // Linear search for previous instance of this sample name
- Sample* sibling;
- for (sibling = parent->first_child; sibling != NULL; sibling = sibling->next_sibling)
- {
- if (sibling->name_hash == name_hash)
- {
- tree->current_parent = sibling;
- *sample = sibling;
- return RMT_ERROR_NONE;
- }
- }
- }
-
- if (parent->name_hash == name_hash)
- {
- // TODO: Collapse recursion on flag?
- }
-
- // Allocate a new sample
- error = ObjectAllocator_Alloc(tree->allocator, (void**)sample);
- if (error != RMT_ERROR_NONE)
- return error;
- Sample_Prepare(*sample, name_hash, parent);
-
- // Generate a unique ID for this sample in the tree
- unique_id = parent->unique_id;
- unique_id = HashCombine(unique_id, (*sample)->name_hash);
- unique_id = HashCombine(unique_id, parent->nb_children);
- (*sample)->unique_id = unique_id;
-
- // Add sample to its parent
- parent->nb_children++;
- if (parent->first_child == NULL)
- {
- parent->first_child = *sample;
- parent->last_child = *sample;
- }
- else
- {
- assert(parent->last_child != NULL);
- parent->last_child->next_sibling = *sample;
- parent->last_child = *sample;
- }
-
- // Make this sample the new parent of any newly created samples
- tree->current_parent = *sample;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void SampleTree_Pop(SampleTree* tree, Sample* sample)
-{
- assert(tree != NULL);
- assert(sample != NULL);
- assert(sample != tree->root);
- tree->current_parent = sample->parent;
-}
-
-
-static ObjectLink* FlattenSampleTree(Sample* sample, rmtU32* nb_samples)
-{
- Sample* child;
- ObjectLink* cur_link = &sample->Link;
-
- assert(sample != NULL);
- assert(nb_samples != NULL);
-
- *nb_samples += 1;
- sample->Link.next = (ObjectLink*)sample->first_child;
-
- // Link all children together
- for (child = sample->first_child; child != NULL; child = child->next_sibling)
- {
- ObjectLink* last_link = FlattenSampleTree(child, nb_samples);
- last_link->next = (ObjectLink*)child->next_sibling;
- cur_link = last_link;
- }
-
- // Clear child info
- sample->first_child = NULL;
- sample->last_child = NULL;
- sample->nb_children = 0;
-
- return cur_link;
-}
-
-
-static void FreeSampleTree(Sample* sample, ObjectAllocator* allocator)
-{
- // Chain all samples together in a flat list
- rmtU32 nb_cleared_samples = 0;
- ObjectLink* last_link = FlattenSampleTree(sample, &nb_cleared_samples);
-
- // Release the complete sample memory range
- if (sample->Link.next != NULL)
- ObjectAllocator_FreeRange(allocator, sample, last_link, nb_cleared_samples);
- else
- ObjectAllocator_Free(allocator, sample);
-}
-
-
-typedef struct Msg_SampleTree
-{
- Sample* root_sample;
-
- ObjectAllocator* allocator;
-
- rmtPStr thread_name;
-} Msg_SampleTree;
-
-
-static void AddSampleTreeMessage(rmtMessageQueue* queue, Sample* sample, ObjectAllocator* allocator, rmtPStr thread_name, struct ThreadSampler* thread_sampler)
-{
- Msg_SampleTree* payload;
-
- // Attempt to allocate a message for sending the tree to the viewer
- Message* message = rmtMessageQueue_AllocMessage(queue, sizeof(Msg_SampleTree), thread_sampler);
- if (message == NULL)
- {
- // Discard the tree on failure
- FreeSampleTree(sample, allocator);
- return;
- }
-
- // Populate and commit
- payload = (Msg_SampleTree*)message->payload;
- payload->root_sample = sample;
- payload->allocator = allocator;
- payload->thread_name = thread_name;
- rmtMessageQueue_CommitMessage(message, MsgID_SampleTree);
-}
-
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @TSAMPLER: Per-Thread Sampler
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-typedef struct ThreadSampler
-{
- // Name to assign to the thread in the viewer
- rmtS8 name[64];
-
- // Store a unique sample tree for each type
- SampleTree* sample_trees[SampleType_Count];
-
- // Table of all sample names encountered on this thread
- StringTable* names;
-
- // Next in the global list of active thread samplers
- struct ThreadSampler* volatile next;
-
-} ThreadSampler;
-
-static rmtError ThreadSampler_Constructor(ThreadSampler* thread_sampler)
-{
- rmtError error;
- int i;
-
- assert(thread_sampler != NULL);
-
- // Set defaults
- for (i = 0; i < SampleType_Count; i++)
- thread_sampler->sample_trees[i] = NULL;
- thread_sampler->names = NULL;
- thread_sampler->next = NULL;
-
- // Set the initial name to Thread0 etc. or use the existing Linux name.
- thread_sampler->name[0] = 0;
- #if defined(RMT_PLATFORM_LINUX) && RMT_USE_POSIX_THREADNAMES
- prctl(PR_GET_NAME,thread_sampler->name,0,0,0);
- #else
- {
- static rmtS32 countThreads = 0;
- strncat_s(thread_sampler->name, sizeof(thread_sampler->name), "Thread", 6);
- itoahex_s(thread_sampler->name + 6, sizeof(thread_sampler->name) - 6, AtomicAdd(&countThreads, 1));
- }
- #endif
-
- // Create the CPU sample tree only - the rest are created on-demand as they need
- // extra context information to function correctly.
- New_3(SampleTree, thread_sampler->sample_trees[SampleType_CPU], sizeof(Sample), (ObjConstructor)Sample_Constructor, (ObjDestructor)Sample_Destructor);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // Create sample name string table
- New_0(StringTable, thread_sampler->names);
- if (error != RMT_ERROR_NONE)
- return error;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void ThreadSampler_Destructor(ThreadSampler* ts)
-{
- int i;
-
- assert(ts != NULL);
-
- Delete(StringTable, ts->names);
-
- for (i = 0; i < SampleType_Count; i++)
- Delete(SampleTree, ts->sample_trees[i]);
-}
-
-
-static rmtError ThreadSampler_Push(SampleTree* tree, rmtU32 name_hash, rmtU32 flags, Sample** sample)
-{
- return SampleTree_Push(tree, name_hash, flags, sample);
-}
-
-
-static rmtBool ThreadSampler_Pop(ThreadSampler* ts, rmtMessageQueue* queue, Sample* sample)
-{
- SampleTree* tree = ts->sample_trees[sample->type];
- SampleTree_Pop(tree, sample);
-
- // Are we back at the root?
- if (tree->current_parent == tree->root)
- {
- // Disconnect all samples from the root and pack in the chosen message queue
- Sample* root = tree->root;
- root->first_child = NULL;
- root->last_child = NULL;
- root->nb_children = 0;
- AddSampleTreeMessage(queue, sample, tree->allocator, ts->name, ts);
-
- return RMT_TRUE;
- }
-
- return RMT_FALSE;
-}
-
-
-static rmtU32 ThreadSampler_GetNameHash(ThreadSampler* ts, rmtPStr name, rmtU32* hash_cache)
-{
- rmtU32 name_hash = 0;
-
- // Hash cache provided?
- if (hash_cache != NULL)
- {
- // Calculate the hash first time round only
- if (*hash_cache == 0)
- {
- assert(name != NULL);
- *hash_cache = MurmurHash3_x86_32(name, (int)strnlen_s(name, 256), 0);
-
- // Also add to the string table on its first encounter
- StringTable_Insert(ts->names, *hash_cache, name);
- }
-
- return *hash_cache;
- }
-
- // Have to recalculate and speculatively insert the name every time when no cache storage exists
- name_hash = MurmurHash3_x86_32(name, (int)strnlen_s(name, 256), 0);
- StringTable_Insert(ts->names, name_hash, name);
- return name_hash;
-}
-
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @REMOTERY: Remotery
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#if RMT_USE_D3D11
-typedef struct D3D11 D3D11;
-static rmtError D3D11_Create(D3D11** d3d11);
-static void D3D11_Destructor(D3D11* d3d11);
-#endif
-
-
-#if RMT_USE_OPENGL
-typedef struct OpenGL_t OpenGL;
-static rmtError OpenGL_Create(OpenGL** opengl);
-static void OpenGL_Destructor(OpenGL* opengl);
-#endif
-
-
-#if RMT_USE_METAL
-typedef struct Metal_t Metal;
-static rmtError Metal_Create(Metal** metal);
-static void Metal_Destructor(Metal* metal);
-#endif
-
-
-struct Remotery
-{
- Server* server;
-
- // Microsecond accuracy timer for CPU timestamps
- usTimer timer;
-
- rmtTLS thread_sampler_tls_handle;
-
- // Linked list of all known threads being sampled
- ThreadSampler* volatile first_thread_sampler;
-
- // Queue between clients and main remotery thread
- rmtMessageQueue* mq_to_rmt_thread;
-
- // A dynamically-sized buffer used for binary-encoding the sample tree and sending to the client
- Buffer* bin_buf;
-
- // The main server thread
- rmtThread* thread;
-
-#if RMT_USE_CUDA
- rmtCUDABind cuda;
-#endif
-
-#if RMT_USE_D3D11
- D3D11* d3d11;
-#endif
-
-#if RMT_USE_OPENGL
- OpenGL* opengl;
-#endif
-
-#if RMT_USE_METAL
- Metal* metal;
-#endif
-};
-
-
-//
-// Global remotery context
-//
-static Remotery* g_Remotery = NULL;
-
-
-//
-// This flag marks the EXE/DLL that created the global remotery instance. We want to allow
-// only the creating EXE/DLL to destroy the remotery instance.
-//
-static rmtBool g_RemoteryCreated = RMT_FALSE;
-
-
-static void Remotery_DestroyThreadSamplers(Remotery* rmt);
-
-
-static const rmtU8 g_DecimalToHex[17] = "0123456789abcdef";
-
-
-static void GetSampleDigest(Sample* sample, rmtU32* digest_hash, rmtU32* nb_samples)
-{
- Sample* child;
-
- assert(sample != NULL);
- assert(digest_hash != NULL);
- assert(nb_samples != NULL);
-
- // Concatenate this sample
- (*nb_samples)++;
- *digest_hash = MurmurHash3_x86_32(&sample->unique_id, sizeof(sample->unique_id), *digest_hash);
-
- {
- rmtU8 shift = 4;
-
- // Get 6 nibbles for lower 3 bytes of the unique sample ID
- rmtU8* sample_id = (rmtU8*)&sample->unique_id;
- rmtU8 hex_sample_id[6];
- hex_sample_id[0] = sample_id[0] & 15;
- hex_sample_id[1] = sample_id[0] >> 4;
- hex_sample_id[2] = sample_id[1] & 15;
- hex_sample_id[3] = sample_id[1] >> 4;
- hex_sample_id[4] = sample_id[2] & 15;
- hex_sample_id[5] = sample_id[2] >> 4;
-
- // As the nibbles will be used as hex colour digits, shift them up to make pastel colours
- hex_sample_id[0] = minU8(hex_sample_id[0] + shift, 15);
- hex_sample_id[1] = minU8(hex_sample_id[1] + shift, 15);
- hex_sample_id[2] = minU8(hex_sample_id[2] + shift, 15);
- hex_sample_id[3] = minU8(hex_sample_id[3] + shift, 15);
- hex_sample_id[4] = minU8(hex_sample_id[4] + shift, 15);
- hex_sample_id[5] = minU8(hex_sample_id[5] + shift, 15);
-
- // Convert the nibbles to hex for the final colour
- sample->unique_id_html_colour[1] = g_DecimalToHex[hex_sample_id[0]];
- sample->unique_id_html_colour[2] = g_DecimalToHex[hex_sample_id[1]];
- sample->unique_id_html_colour[3] = g_DecimalToHex[hex_sample_id[2]];
- sample->unique_id_html_colour[4] = g_DecimalToHex[hex_sample_id[3]];
- sample->unique_id_html_colour[5] = g_DecimalToHex[hex_sample_id[4]];
- sample->unique_id_html_colour[6] = g_DecimalToHex[hex_sample_id[5]];
- }
-
- // Concatenate children
- for (child = sample->first_child; child != NULL; child = child->next_sibling)
- GetSampleDigest(child, digest_hash, nb_samples);
-}
-
-
-static rmtError Remotery_SendLogTextMessage(Remotery* rmt, Message* message)
-{
- assert(rmt != NULL);
- assert(message != NULL);
- return Server_Send(rmt->server, message->payload, message->payload_size, 20);
-}
-
-
-static rmtError bin_SampleTree(Buffer* buffer, Msg_SampleTree* msg)
-{
- Sample* root_sample;
- char thread_name[64];
- rmtU32 digest_hash = 0, nb_samples = 0;
- rmtError error;
-
- assert(buffer != NULL);
- assert(msg != NULL);
-
- // Get the message root sample
- root_sample = msg->root_sample;
- assert(root_sample != NULL);
-
- // Reset the buffer position to the start
- buffer->bytes_used = 0;
-
- // Add any sample types as a thread name post-fix to ensure they get their own viewer
- thread_name[0] = 0;
- strncat_s(thread_name, sizeof(thread_name), msg->thread_name, strnlen_s(msg->thread_name, 64));
- if (root_sample->type == SampleType_CUDA)
- strncat_s(thread_name, sizeof(thread_name), " (CUDA)", 7);
- if (root_sample->type == SampleType_D3D11)
- strncat_s(thread_name, sizeof(thread_name), " (D3D11)", 8);
- if (root_sample->type == SampleType_OpenGL)
- strncat_s(thread_name, sizeof(thread_name), " (OpenGL)", 9);
- if (root_sample->type == SampleType_Metal)
- strncat_s(thread_name, sizeof(thread_name), " (Metal)", 8);
-
- // Get digest hash of samples so that viewer can efficiently rebuild its tables
- rmt_BeginCPUSample(GetSampleDigest, RMTSF_Aggregate);
- GetSampleDigest(root_sample, &digest_hash, &nb_samples);
- rmt_EndCPUSample();
-
- // Write global message header
- BIN_ERROR_CHECK(Buffer_Write(buffer, (void*)"SMPL ", 8));
-
- // Write sample message header
- BIN_ERROR_CHECK(Buffer_WriteStringWithLength(buffer, thread_name));
- BIN_ERROR_CHECK(Buffer_WriteU32(buffer, nb_samples));
- BIN_ERROR_CHECK(Buffer_WriteU32(buffer, digest_hash));
-
- // Write entire sample tree
- BIN_ERROR_CHECK(bin_Sample(buffer, root_sample));
-
- // Patch message size
- U32ToByteArray(buffer->data + 4, buffer->bytes_used);
-
- return RMT_ERROR_NONE;
-}
-
-
-
-#if RMT_USE_CUDA
-static rmtBool AreCUDASamplesReady(Sample* sample);
-static rmtBool GetCUDASampleTimes(Sample* root_sample, Sample* sample);
-#endif
-
-
-static rmtError Remotery_SendSampleTreeMessage(Remotery* rmt, Message* message)
-{
- Msg_SampleTree* sample_tree;
- rmtError error = RMT_ERROR_NONE;
- Sample* sample;
-
- assert(rmt != NULL);
- assert(message != NULL);
-
- // Get the message root sample
- sample_tree = (Msg_SampleTree*)message->payload;
- sample = sample_tree->root_sample;
- assert(sample != NULL);
-
- #if RMT_USE_CUDA
- if (sample->type == SampleType_CUDA)
- {
- // If these CUDA samples aren't ready yet, stick them to the back of the queue and continue
- rmtBool are_samples_ready;
- rmt_BeginCPUSample(AreCUDASamplesReady, 0);
- are_samples_ready = AreCUDASamplesReady(sample);
- rmt_EndCPUSample();
- if (!are_samples_ready)
- {
- AddSampleTreeMessage(rmt->mq_to_rmt_thread, sample, sample_tree->allocator, sample_tree->thread_name, message->thread_sampler);
- return RMT_ERROR_NONE;
- }
-
- // Retrieve timing of all CUDA samples
- rmt_BeginCPUSample(GetCUDASampleTimes, 0);
- GetCUDASampleTimes(sample->parent, sample);
- rmt_EndCPUSample();
- }
- #endif
-
- // Serialise the sample tree and send to the viewer with a reasonably long timeout as the size
- // of the sample data may be large
- rmt_BeginCPUSample(bin_SampleTree, RMTSF_Aggregate);
- error = bin_SampleTree(rmt->bin_buf, sample_tree);
- rmt_EndCPUSample();
- if (error == RMT_ERROR_NONE)
- {
- rmt_BeginCPUSample(Server_Send, RMTSF_Aggregate);
- error = Server_Send(rmt->server, rmt->bin_buf->data, rmt->bin_buf->bytes_used, 50000);
- rmt_EndCPUSample();
- }
-
- // Release the sample tree back to its allocator
- FreeSampleTree(sample, sample_tree->allocator);
-
- return error;
-}
-
-
-static rmtError Remotery_ConsumeMessageQueue(Remotery* rmt)
-{
- rmtU32 nb_messages_sent = 0;
- const rmtU32 maxNbMessagesPerUpdate = g_Settings.maxNbMessagesPerUpdate;
-
- assert(rmt != NULL);
-
- // Absorb as many messages in the queue while disconnected
- if (Server_IsClientConnected(rmt->server) == RMT_FALSE)
- return RMT_ERROR_NONE;
-
- // Loop reading the max number of messages for this update
- while( nb_messages_sent++ < maxNbMessagesPerUpdate )
- {
- rmtError error = RMT_ERROR_NONE;
- Message* message = rmtMessageQueue_PeekNextMessage(rmt->mq_to_rmt_thread);
- if (message == NULL)
- break;
-
- switch (message->id)
- {
- // This shouldn't be possible
- case MsgID_NotReady:
- assert(RMT_FALSE);
- break;
-
- // Dispatch to message handler
- case MsgID_LogText:
- error = Remotery_SendLogTextMessage(rmt, message);
- break;
- case MsgID_SampleTree:
- rmt_BeginCPUSample(SendSampleTreeMessage, RMTSF_Aggregate);
- error = Remotery_SendSampleTreeMessage(rmt, message);
- rmt_EndCPUSample();
- break;
- }
-
- // Consume the message before reacting to any errors
- rmtMessageQueue_ConsumeNextMessage(rmt->mq_to_rmt_thread, message);
- if (error != RMT_ERROR_NONE)
- return error;
- }
-
- return RMT_ERROR_NONE;
-}
-
-
-static void Remotery_FlushMessageQueue(Remotery* rmt)
-{
- assert(rmt != NULL);
-
- // Loop reading all remaining messages
- for (;;)
- {
- Message* message = rmtMessageQueue_PeekNextMessage(rmt->mq_to_rmt_thread);
- if (message == NULL)
- break;
-
- switch (message->id)
- {
- // These can be safely ignored
- case MsgID_NotReady:
- case MsgID_LogText:
- break;
-
- // Release all samples back to their allocators
- case MsgID_SampleTree:
- {
- Msg_SampleTree* sample_tree = (Msg_SampleTree*)message->payload;
- FreeSampleTree(sample_tree->root_sample, sample_tree->allocator);
- break;
- }
- }
-
- rmtMessageQueue_ConsumeNextMessage(rmt->mq_to_rmt_thread, message);
- }
-}
-
-
-static rmtError Remotery_ThreadMain(rmtThread* thread)
-{
- Remotery* rmt = (Remotery*)thread->param;
- assert(rmt != NULL);
-
- rmt_SetCurrentThreadName("Remotery");
-
- while (thread->request_exit == RMT_FALSE)
- {
- rmt_BeginCPUSample(Wakeup, 0);
-
- rmt_BeginCPUSample(ServerUpdate, 0);
- Server_Update(rmt->server);
- rmt_EndCPUSample();
-
- rmt_BeginCPUSample(ConsumeMessageQueue, 0);
- Remotery_ConsumeMessageQueue(rmt);
- rmt_EndCPUSample();
-
- rmt_EndCPUSample();
-
- //
- // [NOTE-A]
- //
- // Possible sequence of user events at this point:
- //
- // 1. Add samples to the queue.
- // 2. Shutdown remotery.
- //
- // This loop will exit with unrelease samples.
- //
-
- msSleep(g_Settings.msSleepBetweenServerUpdates);
- }
-
- // Release all samples to their allocators as a consequence of [NOTE-A]
- Remotery_FlushMessageQueue(rmt);
-
- return RMT_ERROR_NONE;
-}
-
-
-static rmtError Remotery_ReceiveMessage(void* context, char* message_data, rmtU32 message_length)
-{
- Remotery* rmt = (Remotery*)context;
-
- // Manual dispatch on 4-byte message headers (message ID is little-endian encoded)
- #define FOURCC(a, b, c, d) (rmtU32)( ((d) << 24) | ((c) << 16) | ((b) << 8) | (a) )
- rmtU32 message_id = *(rmtU32*)message_data;
-
- switch (message_id)
- {
- case FOURCC('C', 'O', 'N', 'I'):
- {
- // Pass on to any registered handler
- if (g_Settings.input_handler != NULL)
- g_Settings.input_handler(message_data + 4, g_Settings.input_handler_context);
-
- rmt_LogText("Console message received...");
- rmt_LogText(message_data + 4);
- break;
- }
-
- case FOURCC('G', 'S', 'M', 'P'):
- {
- // Convert name hash to integer
- rmtU32 name_hash = 0;
- const char* cur = message_data + 4;
- const char* end = cur + message_length - 4;
- while (cur < end)
- name_hash = name_hash * 10 + *cur++ - '0';
-
- // Search all threads for a matching string hash
- ThreadSampler* ts;
- for (ts = rmt->first_thread_sampler; ts != NULL; ts = ts->next)
- {
- rmtPStr name = StringTable_Find(ts->names, name_hash);
- if (name != NULL)
- {
- // Construct a response message containing the matching name
- rmtU8 response[256];
- rmtU32 name_length = (rmtU32)strnlen_s(name, 256 - 12);
- response[0] = 'S';
- response[1] = 'S';
- response[2] = 'M';
- response[3] = 'P';
- U32ToByteArray(response + 4, name_hash);
- U32ToByteArray(response + 8, name_length);
- memcpy(response + 12, name, name_length);
-
- // Send back immediately as we're on the server thread
- return Server_Send(rmt->server, response, 12 + name_length, 10);
- }
- }
-
- break;
- }
- }
-
- #undef FOURCC
-
- return RMT_ERROR_NONE;
-}
-
-
-static rmtError Remotery_Constructor(Remotery* rmt)
-{
- rmtError error;
-
- assert(rmt != NULL);
-
- // Set default state
- rmt->server = NULL;
- rmt->thread_sampler_tls_handle = TLS_INVALID_HANDLE;
- rmt->first_thread_sampler = NULL;
- rmt->mq_to_rmt_thread = NULL;
- rmt->bin_buf = NULL;
- rmt->thread = NULL;
-
- #if RMT_USE_CUDA
- rmt->cuda.CtxSetCurrent = NULL;
- rmt->cuda.EventCreate = NULL;
- rmt->cuda.EventDestroy = NULL;
- rmt->cuda.EventElapsedTime = NULL;
- rmt->cuda.EventQuery = NULL;
- rmt->cuda.EventRecord = NULL;
- #endif
-
- #if RMT_USE_D3D11
- rmt->d3d11 = NULL;
- #endif
-
- #if RMT_USE_OPENGL
- rmt->opengl = NULL;
- #endif
-
- #if RMT_USE_METAL
- rmt->metal = NULL;
- #endif
-
- // Kick-off the timer
- usTimer_Init(&rmt->timer);
-
- // Allocate a TLS handle for the thread sampler
- error = tlsAlloc(&rmt->thread_sampler_tls_handle);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // Create the server
- New_2(Server, rmt->server, g_Settings.port, g_Settings.limit_connections_to_localhost);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // Setup incoming message handler
- rmt->server->receive_handler = Remotery_ReceiveMessage;
- rmt->server->receive_handler_context = rmt;
-
- // Create the main message thread with only one page
- New_1(rmtMessageQueue, rmt->mq_to_rmt_thread, g_Settings.messageQueueSizeInBytes);
- if (error != RMT_ERROR_NONE)
- return error;
-
- // Create the binary serialisation buffer
- New_1(Buffer, rmt->bin_buf, 4096);
- if (error != RMT_ERROR_NONE)
- return error;
-
- #if RMT_USE_D3D11
- error = D3D11_Create(&rmt->d3d11);
- if (error != RMT_ERROR_NONE)
- return error;
- #endif
-
- #if RMT_USE_OPENGL
- error = OpenGL_Create(&rmt->opengl);
- if (error != RMT_ERROR_NONE)
- return error;
- #endif
-
- #if RMT_USE_METAL
- error = Metal_Create(&rmt->metal);
- if (error != RMT_ERROR_NONE)
- return error;
- #endif
-
-
- // Set as the global instance before creating any threads that uses it for sampling itself
- assert(g_Remotery == NULL);
- g_Remotery = rmt;
- g_RemoteryCreated = RMT_TRUE;
-
- // Ensure global instance writes complete before other threads get a chance to use it
- WriteFence();
-
- // Create the main update thread once everything has been defined for the global remotery object
- New_2(rmtThread, rmt->thread, Remotery_ThreadMain, rmt);
- return error;
-}
-
-
-static void Remotery_Destructor(Remotery* rmt)
-{
- assert(rmt != NULL);
-
- // Join the remotery thread before clearing the global object as the thread is profiling itself
- Delete(rmtThread, rmt->thread);
-
- if (g_RemoteryCreated)
- {
- g_Remotery = NULL;
- g_RemoteryCreated = RMT_FALSE;
- }
-
- #if RMT_USE_D3D11
- Delete(D3D11, rmt->d3d11);
- #endif
-
- #if RMT_USE_OPENGL
- Delete(OpenGL, rmt->opengl);
- #endif
-
- #if RMT_USE_METAL
- Delete(Metal, rmt->metal);
- #endif
-
- Delete(Buffer, rmt->bin_buf);
- Delete(rmtMessageQueue, rmt->mq_to_rmt_thread);
-
- Remotery_DestroyThreadSamplers(rmt);
-
- Delete(Server, rmt->server);
-
- if (rmt->thread_sampler_tls_handle != TLS_INVALID_HANDLE)
- {
- tlsFree(rmt->thread_sampler_tls_handle);
- rmt->thread_sampler_tls_handle = 0;
- }
-}
-
-
-static rmtError Remotery_GetThreadSampler(Remotery* rmt, ThreadSampler** thread_sampler)
-{
- ThreadSampler* ts;
-
- // Is there a thread sampler associated with this thread yet?
- assert(rmt != NULL);
- ts = (ThreadSampler*)tlsGet(rmt->thread_sampler_tls_handle);
- if (ts == NULL)
- {
- // Allocate on-demand
- rmtError error;
- New_0(ThreadSampler, *thread_sampler);
- if (error != RMT_ERROR_NONE)
- return error;
- ts = *thread_sampler;
-
- // Add to the beginning of the global linked list of thread samplers
- for (;;)
- {
- ThreadSampler* old_ts = rmt->first_thread_sampler;
- ts->next = old_ts;
-
- // If the old value is what we expect it to be then no other thread has
- // changed it since this thread sampler was used as a candidate first list item
- if (AtomicCompareAndSwapPointer((long* volatile*)&rmt->first_thread_sampler, (long*)old_ts, (long*)ts) == RMT_TRUE)
- break;
- }
-
- tlsSet(rmt->thread_sampler_tls_handle, ts);
- }
-
- assert(thread_sampler != NULL);
- *thread_sampler = ts;
- return RMT_ERROR_NONE;
-}
-
-
-static void Remotery_BlockingDeleteSampleTree(Remotery* rmt, enum SampleType sample_type)
-{
- ThreadSampler* ts;
-
- // Get the attached thread sampler
- assert(rmt != NULL);
- if (Remotery_GetThreadSampler(rmt, &ts) == RMT_ERROR_NONE)
- {
- SampleTree* sample_tree = ts->sample_trees[sample_type];
- if (sample_tree != NULL)
- {
- // Wait around until the Remotery server thread has sent all sample trees
- // of this type to the client
- while (sample_tree->allocator->nb_inuse > 1)
- msSleep(1);
-
- // Now free to delete
- Delete(SampleTree, sample_tree);
- ts->sample_trees[sample_type] = NULL;
- }
- }
-}
-
-
-
-static void Remotery_DestroyThreadSamplers(Remotery* rmt)
-{
- // If the handle failed to create in the first place then it shouldn't be possible to create thread samplers
- assert(rmt != NULL);
- if (rmt->thread_sampler_tls_handle == TLS_INVALID_HANDLE)
- {
- assert(rmt->first_thread_sampler == NULL);
- return;
- }
-
- // Keep popping thread samplers off the linked list until they're all gone
- // This does not make any assumptions, making it possible for thread samplers to be created while they're all
- // deleted. While this is erroneous calling code, this will prevent a confusing crash.
- while (rmt->first_thread_sampler != NULL)
- {
- ThreadSampler* ts;
-
- for (;;)
- {
- ThreadSampler* old_ts = rmt->first_thread_sampler;
- ThreadSampler* next_ts = old_ts->next;
-
- if (AtomicCompareAndSwapPointer((long* volatile*)&rmt->first_thread_sampler, (long*)old_ts, (long*)next_ts) == RMT_TRUE)
- {
- ts = old_ts;
- break;
- }
- }
-
- Delete(ThreadSampler, ts);
- }
-}
-
-
-static void* CRTMalloc(void* mm_context, rmtU32 size)
-{
- RMT_UNREFERENCED_PARAMETER(mm_context);
- return malloc((size_t)size);
-}
-
-
-static void CRTFree(void* mm_context, void* ptr)
-{
- RMT_UNREFERENCED_PARAMETER(mm_context);
- free(ptr);
-}
-
-static void* CRTRealloc(void* mm_context, void* ptr, rmtU32 size)
-{
- RMT_UNREFERENCED_PARAMETER(mm_context);
- return realloc(ptr, size);
-}
-
-
-RMT_API rmtSettings* _rmt_Settings(void)
-{
- // Default-initialize on first call
- if( g_SettingsInitialized == RMT_FALSE )
- {
- g_Settings.port = 0x4597;
- g_Settings.limit_connections_to_localhost = RMT_FALSE;
- g_Settings.msSleepBetweenServerUpdates = 10;
- g_Settings.messageQueueSizeInBytes = 128 * 1024;
- g_Settings.maxNbMessagesPerUpdate = 10;
- g_Settings.malloc = CRTMalloc;
- g_Settings.free = CRTFree;
- g_Settings.realloc = CRTRealloc;
- g_Settings.input_handler = NULL;
- g_Settings.input_handler_context = NULL;
- g_Settings.logFilename = "rmtLog.txt";
-
- g_SettingsInitialized = RMT_TRUE;
- }
-
- return &g_Settings;
-}
-
-
-RMT_API rmtError _rmt_CreateGlobalInstance(Remotery** remotery)
-{
- rmtError error;
-
- // Default-initialise if user has not set values
- rmt_Settings();
-
- // Creating the Remotery instance also records it as the global instance
- assert(remotery != NULL);
- New_0(Remotery, *remotery);
- return error;
-}
-
-
-RMT_API void _rmt_DestroyGlobalInstance(Remotery* remotery)
-{
- // Ensure this is the module that created it
- assert(g_RemoteryCreated == RMT_TRUE);
- assert(g_Remotery == remotery);
- Delete(Remotery, remotery);
-}
-
-
-RMT_API void _rmt_SetGlobalInstance(Remotery* remotery)
-{
- // Default-initialise if user has not set values
- rmt_Settings();
-
- g_Remotery = remotery;
-}
-
-
-RMT_API Remotery* _rmt_GetGlobalInstance(void)
-{
- return g_Remotery;
-}
-
-
-#ifdef RMT_PLATFORM_WINDOWS
- #pragma pack(push,8)
- typedef struct tagTHREADNAME_INFO
- {
- DWORD dwType; // Must be 0x1000.
- LPCSTR szName; // Pointer to name (in user addr space).
- DWORD dwThreadID; // Thread ID (-1=caller thread).
- DWORD dwFlags; // Reserved for future use, must be zero.
- } THREADNAME_INFO;
- #pragma pack(pop)
-#endif
-
-static void SetDebuggerThreadName(const char* name)
-{
- #ifdef RMT_PLATFORM_WINDOWS
- THREADNAME_INFO info;
- info.dwType = 0x1000;
- info.szName = name;
- info.dwThreadID = (DWORD)-1;
- info.dwFlags = 0;
-
- #ifndef __MINGW32__
- __try
- {
- RaiseException(0x406D1388, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info);
- }
- __except(1 /* EXCEPTION_EXECUTE_HANDLER */)
- {
- }
- #endif
- #else
- RMT_UNREFERENCED_PARAMETER(name);
- #endif
-
- #ifdef RMT_PLATFORM_LINUX
- // pthread_setname_np is a non-standard GNU extension.
- char name_clamp[16];
- name_clamp[0] = 0;
- strncat_s(name_clamp, sizeof(name_clamp), name, 15);
- prctl(PR_SET_NAME,name_clamp,0,0,0);
- #endif
-}
-
-
-RMT_API void _rmt_SetCurrentThreadName(rmtPStr thread_name)
-{
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- // Get data for this thread
- if (Remotery_GetThreadSampler(g_Remotery, &ts) != RMT_ERROR_NONE)
- return;
-
- // Copy name and apply to the debugger
- strcpy_s(ts->name, sizeof(ts->name), thread_name);
- SetDebuggerThreadName(thread_name);
-}
-
-
-static rmtBool QueueLine(rmtMessageQueue* queue, unsigned char* text, rmtU32 size, struct ThreadSampler* thread_sampler)
-{
- Message* message;
-
- assert(queue != NULL);
-
- // Prefix with text size
- rmtU32 text_size = size - 8;
- U32ToByteArray(text + 4, text_size);
-
- // Allocate some space for the line
- message = rmtMessageQueue_AllocMessage(queue, size, thread_sampler);
- if (message == NULL)
- return RMT_FALSE;
-
- // Copy the text and commit the message
- memcpy(message->payload, text, size);
- rmtMessageQueue_CommitMessage(message, MsgID_LogText);
-
- return RMT_TRUE;
-}
-
-
-RMT_API void _rmt_LogText(rmtPStr text)
-{
- int start_offset, prev_offset, i;
- unsigned char line_buffer[1024] = { 0 };
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- Remotery_GetThreadSampler(g_Remotery, &ts);
-
- // Start the line with the message header
- line_buffer[0] = 'L';
- line_buffer[1] = 'O';
- line_buffer[2] = 'G';
- line_buffer[3] = 'M';
- start_offset = 8;
-
- // There might be newlines in the buffer, so split them into multiple network calls
- prev_offset = start_offset;
- for (i = 0; text[i] != 0; i++)
- {
- char c = text[i];
-
- // Line wrap when too long or newline encountered
- if (prev_offset == sizeof(line_buffer) - 3 || c == '\n')
- {
- if (QueueLine(g_Remotery->mq_to_rmt_thread, line_buffer, prev_offset, ts) == RMT_FALSE)
- return;
-
- // Restart line
- prev_offset = start_offset;
- }
-
- // Safe to insert 2 characters here as previous check would split lines if not enough space left
- switch (c)
- {
- // Skip newline, dealt with above
- case '\n':
- break;
-
- // Escape these
- case '\\':
- line_buffer[prev_offset++] = '\\';
- line_buffer[prev_offset++] = '\\';
- break;
-
- case '\"':
- line_buffer[prev_offset++] = '\\';
- line_buffer[prev_offset++] = '\"';
- break;
-
- // Add the rest
- default:
- line_buffer[prev_offset++] = c;
- break;
- }
- }
-
- // Send the last line
- if (prev_offset > start_offset)
- {
- assert(prev_offset < ((int)sizeof(line_buffer) - 3));
- QueueLine(g_Remotery->mq_to_rmt_thread, line_buffer, prev_offset, ts);
- }
-}
-
-
-RMT_API void _rmt_BeginCPUSample(rmtPStr name, rmtU32 flags, rmtU32* hash_cache)
-{
- // 'hash_cache' stores a pointer to a sample name's hash value. Internally this is used to identify unique callstacks and it
- // would be ideal that it's not recalculated each time the sample is used. This can be statically cached at the point
- // of call or stored elsewhere when dynamic names are required.
- //
- // If 'hash_cache' is NULL then this call becomes more expensive, as it has to recalculate the hash of the name.
-
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- // TODO: Time how long the bits outside here cost and subtract them from the parent
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- Sample* sample;
- rmtU32 name_hash = ThreadSampler_GetNameHash(ts, name, hash_cache);
- if (ThreadSampler_Push(ts->sample_trees[SampleType_CPU], name_hash, flags, &sample) == RMT_ERROR_NONE)
- {
- // If this is an aggregate sample, store the time in 'end' as we want to preserve 'start'
- if (sample->us_length != 0)
- sample->us_end = usTimer_Get(&g_Remotery->timer);
- else
- sample->us_start = usTimer_Get(&g_Remotery->timer);
- }
- }
-}
-
-
-RMT_API void _rmt_EndCPUSample(void)
-{
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- Sample* sample = ts->sample_trees[SampleType_CPU]->current_parent;
-
- rmtU64 us_end = usTimer_Get(&g_Remotery->timer);
-
- // Is this an aggregate sample?
- if (sample->us_length != 0)
- {
- sample->us_length += (us_end - sample->us_end);
- sample->us_end = us_end;
- }
- else
- {
- sample->us_end = us_end;
- sample->us_length = (us_end - sample->us_start);
- }
-
- sample->us_end = usTimer_Get(&g_Remotery->timer);
- ThreadSampler_Pop(ts, g_Remotery->mq_to_rmt_thread, sample);
- }
-}
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @CUDA: CUDA event sampling
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#if RMT_USE_CUDA
-
-
-typedef struct CUDASample
-{
- // IS-A inheritance relationship
- Sample Sample;
-
- // Pair of events that wrap the sample
- CUevent event_start;
- CUevent event_end;
-
-} CUDASample;
-
-
-static rmtError MapCUDAResult(CUresult result)
-{
- switch (result)
- {
- case CUDA_SUCCESS: return RMT_ERROR_NONE;
- case CUDA_ERROR_DEINITIALIZED: return RMT_ERROR_CUDA_DEINITIALIZED;
- case CUDA_ERROR_NOT_INITIALIZED: return RMT_ERROR_CUDA_NOT_INITIALIZED;
- case CUDA_ERROR_INVALID_CONTEXT: return RMT_ERROR_CUDA_INVALID_CONTEXT;
- case CUDA_ERROR_INVALID_VALUE: return RMT_ERROR_CUDA_INVALID_VALUE;
- case CUDA_ERROR_INVALID_HANDLE: return RMT_ERROR_CUDA_INVALID_HANDLE;
- case CUDA_ERROR_OUT_OF_MEMORY: return RMT_ERROR_CUDA_OUT_OF_MEMORY;
- case CUDA_ERROR_NOT_READY: return RMT_ERROR_ERROR_NOT_READY;
- default: return RMT_ERROR_CUDA_UNKNOWN;
- }
-}
-
-
-#define CUDA_MAKE_FUNCTION(name, params) \
- typedef CUresult (CUDAAPI *name##Ptr) params; \
- name##Ptr name = (name##Ptr)g_Remotery->cuda.name;
-
-
-#define CUDA_GUARD(call) \
- { \
- rmtError error = call; \
- if (error != RMT_ERROR_NONE) \
- return error; \
- }
-
-
-// Wrappers around CUDA driver functions that manage the active context.
-static rmtError CUDASetContext(void* context)
-{
- CUDA_MAKE_FUNCTION(CtxSetCurrent, (CUcontext ctx));
- assert(CtxSetCurrent != NULL);
- return MapCUDAResult(CtxSetCurrent((CUcontext)context));
-}
-static rmtError CUDAGetContext(void** context)
-{
- CUDA_MAKE_FUNCTION(CtxGetCurrent, (CUcontext* ctx));
- assert(CtxGetCurrent != NULL);
- return MapCUDAResult(CtxGetCurrent((CUcontext*)context));
-}
-static rmtError CUDAEnsureContext()
-{
- void* current_context;
- CUDA_GUARD(CUDAGetContext(&current_context));
-
- assert(g_Remotery != NULL);
- if (current_context != g_Remotery->cuda.context)
- CUDA_GUARD(CUDASetContext(g_Remotery->cuda.context));
-
- return RMT_ERROR_NONE;
-}
-
-
-// Wrappers around CUDA driver functions that manage events
-static rmtError CUDAEventCreate(CUevent* phEvent, unsigned int Flags)
-{
- CUDA_MAKE_FUNCTION(EventCreate, (CUevent *phEvent, unsigned int Flags));
- CUDA_GUARD(CUDAEnsureContext());
- return MapCUDAResult(EventCreate(phEvent, Flags));
-}
-static rmtError CUDAEventDestroy(CUevent hEvent)
-{
- CUDA_MAKE_FUNCTION(EventDestroy, (CUevent hEvent));
- CUDA_GUARD(CUDAEnsureContext());
- return MapCUDAResult(EventDestroy(hEvent));
-}
-static rmtError CUDAEventRecord(CUevent hEvent, void* hStream)
-{
- CUDA_MAKE_FUNCTION(EventRecord, (CUevent hEvent, CUstream hStream));
- CUDA_GUARD(CUDAEnsureContext());
- return MapCUDAResult(EventRecord(hEvent, (CUstream)hStream));
-}
-static rmtError CUDAEventQuery(CUevent hEvent)
-{
- CUDA_MAKE_FUNCTION(EventQuery, (CUevent hEvent));
- CUDA_GUARD(CUDAEnsureContext());
- return MapCUDAResult(EventQuery(hEvent));
-}
-static rmtError CUDAEventElapsedTime(float* pMilliseconds, CUevent hStart, CUevent hEnd)
-{
- CUDA_MAKE_FUNCTION(EventElapsedTime, (float *pMilliseconds, CUevent hStart, CUevent hEnd));
- CUDA_GUARD(CUDAEnsureContext());
- return MapCUDAResult(EventElapsedTime(pMilliseconds, hStart, hEnd));
-}
-
-
-static rmtError CUDASample_Constructor(CUDASample* sample)
-{
- rmtError error;
-
- assert(sample != NULL);
-
- // Chain to sample constructor
- Sample_Constructor((Sample*)sample);
- sample->Sample.type = SampleType_CUDA;
- sample->Sample.size_bytes = sizeof(CUDASample);
- sample->event_start = NULL;
- sample->event_end = NULL;
-
- // Create non-blocking events with timing
- assert(g_Remotery != NULL);
- error = CUDAEventCreate(&sample->event_start, CU_EVENT_DEFAULT);
- if (error == RMT_ERROR_NONE)
- error = CUDAEventCreate(&sample->event_end, CU_EVENT_DEFAULT);
- return error;
-}
-
-
-static void CUDASample_Destructor(CUDASample* sample)
-{
- assert(sample != NULL);
-
- // Destroy events
- if (sample->event_start != NULL)
- CUDAEventDestroy(sample->event_start);
- if (sample->event_end != NULL)
- CUDAEventDestroy(sample->event_end);
-
- Sample_Destructor((Sample*)sample);
-}
-
-
-static rmtBool AreCUDASamplesReady(Sample* sample)
-{
- rmtError error;
- Sample* child;
-
- CUDASample* cuda_sample = (CUDASample*)sample;
- assert(sample->type == SampleType_CUDA);
-
- // Check to see if both of the CUDA events have been processed
- error = CUDAEventQuery(cuda_sample->event_start);
- if (error != RMT_ERROR_NONE)
- return RMT_FALSE;
- error = CUDAEventQuery(cuda_sample->event_end);
- if (error != RMT_ERROR_NONE)
- return RMT_FALSE;
-
- // Check child sample events
- for (child = sample->first_child; child != NULL; child = child->next_sibling)
- {
- if (!AreCUDASamplesReady(child))
- return RMT_FALSE;
- }
-
- return RMT_TRUE;
-}
-
-
-static rmtBool GetCUDASampleTimes(Sample* root_sample, Sample* sample)
-{
- Sample* child;
-
- CUDASample* cuda_root_sample = (CUDASample*)root_sample;
- CUDASample* cuda_sample = (CUDASample*)sample;
-
- float ms_start, ms_end;
-
- assert(root_sample != NULL);
- assert(sample != NULL);
-
- // Get millisecond timing of each sample event, relative to initial root sample
- if (CUDAEventElapsedTime(&ms_start, cuda_root_sample->event_start, cuda_sample->event_start) != RMT_ERROR_NONE)
- return RMT_FALSE;
- if (CUDAEventElapsedTime(&ms_end, cuda_root_sample->event_start, cuda_sample->event_end) != RMT_ERROR_NONE)
- return RMT_FALSE;
-
- // Convert to microseconds and add to the sample
- sample->us_start = (rmtU64)(ms_start * 1000);
- sample->us_end = (rmtU64)(ms_end * 1000);
- sample->us_length = sample->us_end - sample->us_start;
-
- // Get child sample times
- for (child = sample->first_child; child != NULL; child = child->next_sibling)
- {
- if (!GetCUDASampleTimes(root_sample, child))
- return RMT_FALSE;
- }
-
- return RMT_TRUE;
-}
-
-
-RMT_API void _rmt_BindCUDA(const rmtCUDABind* bind)
-{
- assert(bind != NULL);
- if (g_Remotery != NULL)
- g_Remotery->cuda = *bind;
-}
-
-
-RMT_API void _rmt_BeginCUDASample(rmtPStr name, rmtU32* hash_cache, void* stream)
-{
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- rmtError error;
- Sample* sample;
- rmtU32 name_hash = ThreadSampler_GetNameHash(ts, name, hash_cache);
-
- // Create the CUDA tree on-demand as the tree needs an up-front-created root.
- // This is not possible to create on initialisation as a CUDA binding is not yet available.
- SampleTree** cuda_tree = &ts->sample_trees[SampleType_CUDA];
- if (*cuda_tree == NULL)
- {
- CUDASample* root_sample;
-
- New_3(SampleTree, *cuda_tree, sizeof(CUDASample), (ObjConstructor)CUDASample_Constructor, (ObjDestructor)CUDASample_Destructor);
- if (error != RMT_ERROR_NONE)
- return;
-
- // Record an event once on the root sample, used to measure absolute sample
- // times since this point
- root_sample = (CUDASample*)(*cuda_tree)->root;
- error = CUDAEventRecord(root_sample->event_start, stream);
- if (error != RMT_ERROR_NONE)
- return;
- }
-
- // Push the same and record its event
- if (ThreadSampler_Push(*cuda_tree, name_hash, 0, &sample) == RMT_ERROR_NONE)
- {
- CUDASample* cuda_sample = (CUDASample*)sample;
- CUDAEventRecord(cuda_sample->event_start, stream);
- }
- }
-}
-
-
-RMT_API void _rmt_EndCUDASample(void* stream)
-{
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- CUDASample* sample = (CUDASample*)ts->sample_trees[SampleType_CUDA]->current_parent;
- CUDAEventRecord(sample->event_end, stream);
- ThreadSampler_Pop(ts, g_Remotery->mq_to_rmt_thread, (Sample*)sample);
- }
-}
-
-
-#endif // RMT_USE_CUDA
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- @D3D11: Direct3D 11 event sampling
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#if RMT_USE_D3D11
-
-
-// As clReflect has no way of disabling C++ compile mode, this forces C interfaces everywhere...
-#define CINTERFACE
-
-// ...unfortunately these C++ helpers aren't wrapped by the same macro but they can be disabled individually
-#define D3D11_NO_HELPERS
-
-// Allow use of the D3D11 helper macros for accessing the C-style vtable
-#define COBJMACROS
-
-#include <d3d11.h>
-
-
-typedef struct D3D11
-{
- // Context set by user
- ID3D11Device* device;
- ID3D11DeviceContext* context;
-
- HRESULT last_error;
-
- // Queue to the D3D 11 main update thread
- // Given that BeginSample/EndSample need to be called from the same thread that does the update, there
- // is really no need for this to be a thread-safe queue. I'm using it for its convenience.
- rmtMessageQueue* mq_to_d3d11_main;
-
- // Mark the first time so that remaining timestamps are offset from this
- rmtU64 first_timestamp;
-} D3D11;
-
-
-static rmtError D3D11_Create(D3D11** d3d11)
-{
- rmtError error;
-
- assert(d3d11 != NULL);
-
- // Allocate space for the D3D11 data
- *d3d11 = (D3D11*)rmtMalloc(sizeof(D3D11));
- if (*d3d11 == NULL)
- return RMT_ERROR_MALLOC_FAIL;
-
- // Set defaults
- (*d3d11)->device = NULL;
- (*d3d11)->context = NULL;
- (*d3d11)->last_error = S_OK;
- (*d3d11)->mq_to_d3d11_main = NULL;
- (*d3d11)->first_timestamp = 0;
-
- New_1(rmtMessageQueue, (*d3d11)->mq_to_d3d11_main, g_Settings.messageQueueSizeInBytes);
- if (error != RMT_ERROR_NONE)
- {
- Delete(D3D11, *d3d11);
- return error;
- }
-
- return RMT_ERROR_NONE;
-}
-
-
-static void D3D11_Destructor(D3D11* d3d11)
-{
- assert(d3d11 != NULL);
- Delete(rmtMessageQueue, d3d11->mq_to_d3d11_main);
-}
-
-
-typedef struct D3D11Timestamp
-{
- // Inherit so that timestamps can be quickly allocated
- ObjectLink Link;
-
- // Pair of timestamp queries that wrap the sample
- ID3D11Query* query_start;
- ID3D11Query* query_end;
-
- // A disjoint to measure frequency/stability
- // TODO: Does *each* sample need one of these?
- ID3D11Query* query_disjoint;
-} D3D11Timestamp;
-
-
-static rmtError D3D11Timestamp_Constructor(D3D11Timestamp* stamp)
-{
- D3D11_QUERY_DESC timestamp_desc;
- D3D11_QUERY_DESC disjoint_desc;
- ID3D11Device* device;
- HRESULT* last_error;
-
- assert(stamp != NULL);
-
- ObjectLink_Constructor((ObjectLink*)stamp);
-
- // Set defaults
- stamp->query_start = NULL;
- stamp->query_end = NULL;
- stamp->query_disjoint = NULL;
-
- assert(g_Remotery != NULL);
- assert(g_Remotery->d3d11 != NULL);
- device = g_Remotery->d3d11->device;
- last_error = &g_Remotery->d3d11->last_error;
-
- // Create start/end timestamp queries
- timestamp_desc.Query = D3D11_QUERY_TIMESTAMP;
- timestamp_desc.MiscFlags = 0;
- *last_error = ID3D11Device_CreateQuery(device, &timestamp_desc, &stamp->query_start);
- if (*last_error != S_OK)
- return RMT_ERROR_D3D11_FAILED_TO_CREATE_QUERY;
- *last_error = ID3D11Device_CreateQuery(device, &timestamp_desc, &stamp->query_end);
- if (*last_error != S_OK)
- return RMT_ERROR_D3D11_FAILED_TO_CREATE_QUERY;
-
- // Create disjoint query
- disjoint_desc.Query = D3D11_QUERY_TIMESTAMP_DISJOINT;
- disjoint_desc.MiscFlags = 0;
- *last_error = ID3D11Device_CreateQuery(device, &disjoint_desc, &stamp->query_disjoint);
- if (*last_error != S_OK)
- return RMT_ERROR_D3D11_FAILED_TO_CREATE_QUERY;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void D3D11Timestamp_Destructor(D3D11Timestamp* stamp)
-{
- assert(stamp != NULL);
-
- // Destroy queries
- if (stamp->query_disjoint != NULL)
- ID3D11Query_Release(stamp->query_disjoint);
- if (stamp->query_end != NULL)
- ID3D11Query_Release(stamp->query_end);
- if (stamp->query_start != NULL)
- ID3D11Query_Release(stamp->query_start);
-}
-
-
-static void D3D11Timestamp_Begin(D3D11Timestamp* stamp, ID3D11DeviceContext* context)
-{
- assert(stamp != NULL);
-
- // Start of disjoint and first query
- ID3D11DeviceContext_Begin(context, (ID3D11Asynchronous*)stamp->query_disjoint);
- ID3D11DeviceContext_End(context, (ID3D11Asynchronous*)stamp->query_start);
-}
-
-
-static void D3D11Timestamp_End(D3D11Timestamp* stamp, ID3D11DeviceContext* context)
-{
- assert(stamp != NULL);
-
- // End of disjoint and second query
- ID3D11DeviceContext_End(context, (ID3D11Asynchronous*)stamp->query_end);
- ID3D11DeviceContext_End(context, (ID3D11Asynchronous*)stamp->query_disjoint);
-}
-
-
-static HRESULT D3D11Timestamp_GetData(D3D11Timestamp* stamp, ID3D11DeviceContext* context, rmtU64* out_start, rmtU64* out_end, rmtU64* out_first_timestamp)
-{
- ID3D11Asynchronous* query_start;
- ID3D11Asynchronous* query_end;
- ID3D11Asynchronous* query_disjoint;
- HRESULT result;
-
- UINT64 start;
- UINT64 end;
- D3D11_QUERY_DATA_TIMESTAMP_DISJOINT disjoint;
-
- assert(stamp != NULL);
- query_start = (ID3D11Asynchronous*)stamp->query_start;
- query_end = (ID3D11Asynchronous*)stamp->query_end;
- query_disjoint = (ID3D11Asynchronous*)stamp->query_disjoint;
-
- // Check to see if all queries are ready
- // If any fail to arrive, wait until later
- result = ID3D11DeviceContext_GetData(context, query_start, &start, sizeof(start), D3D11_ASYNC_GETDATA_DONOTFLUSH);
- if (result != S_OK)
- return result;
- result = ID3D11DeviceContext_GetData(context, query_end, &end, sizeof(end), D3D11_ASYNC_GETDATA_DONOTFLUSH);
- if (result != S_OK)
- return result;
- result = ID3D11DeviceContext_GetData(context, query_disjoint, &disjoint, sizeof(disjoint), D3D11_ASYNC_GETDATA_DONOTFLUSH);
- if (result != S_OK)
- return result;
-
- if (disjoint.Disjoint == FALSE)
- {
- double frequency = disjoint.Frequency / 1000000.0;
-
- // Mark the first timestamp
- assert(out_first_timestamp != NULL);
- if (*out_first_timestamp == 0)
- *out_first_timestamp = start;
-
- // Calculate start and end timestamps from the disjoint info
- *out_start = (rmtU64)((start - *out_first_timestamp) / frequency);
- *out_end = (rmtU64)((end - *out_first_timestamp) / frequency);
- }
-
- return S_OK;
-}
-
-
-typedef struct D3D11Sample
-{
- // IS-A inheritance relationship
- Sample Sample;
-
- D3D11Timestamp* timestamp;
-
-} D3D11Sample;
-
-
-static rmtError D3D11Sample_Constructor(D3D11Sample* sample)
-{
- rmtError error;
-
- assert(sample != NULL);
-
- // Chain to sample constructor
- Sample_Constructor((Sample*)sample);
- sample->Sample.type = SampleType_D3D11;
- sample->Sample.size_bytes = sizeof(D3D11Sample);
- New_0(D3D11Timestamp, sample->timestamp);
-
- return RMT_ERROR_NONE;
-}
-
-
-static void D3D11Sample_Destructor(D3D11Sample* sample)
-{
- Delete(D3D11Timestamp, sample->timestamp);
- Sample_Destructor((Sample*)sample);
-}
-
-
-RMT_API void _rmt_BindD3D11(void* device, void* context)
-{
- if (g_Remotery != NULL)
- {
- assert(g_Remotery->d3d11 != NULL);
-
- assert(device != NULL);
- g_Remotery->d3d11->device = (ID3D11Device*)device;
- assert(context != NULL);
- g_Remotery->d3d11->context = (ID3D11DeviceContext*)context;
- }
-}
-
-
-static void UpdateD3D11Frame(void);
-
-
-RMT_API void _rmt_UnbindD3D11(void)
-{
- if (g_Remotery != NULL)
- {
- D3D11* d3d11 = g_Remotery->d3d11;
- assert(d3d11 != NULL);
-
- // Stall waiting for the D3D queue to empty into the Remotery queue
- while (!rmtMessageQueue_IsEmpty(d3d11->mq_to_d3d11_main))
- UpdateD3D11Frame();
-
- // Inform sampler to not add any more samples
- d3d11->device = NULL;
- d3d11->context = NULL;
-
- // Forcefully delete sample tree on this thread to release time stamps from
- // the same thread that created them
- Remotery_BlockingDeleteSampleTree(g_Remotery, SampleType_D3D11);
- }
-}
-
-
-RMT_API void _rmt_BeginD3D11Sample(rmtPStr name, rmtU32* hash_cache)
-{
- ThreadSampler* ts;
- D3D11* d3d11;
-
- if (g_Remotery == NULL)
- return;
-
- // Has D3D11 been unbound?
- d3d11 = g_Remotery->d3d11;
- assert(d3d11 != NULL);
- if (d3d11->device == NULL || d3d11->context == NULL)
- return;
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- Sample* sample;
- rmtU32 name_hash = ThreadSampler_GetNameHash(ts, name, hash_cache);
-
- // Create the D3D11 tree on-demand as the tree needs an up-front-created root.
- // This is not possible to create on initialisation as a D3D11 binding is not yet available.
- SampleTree** d3d_tree = &ts->sample_trees[SampleType_D3D11];
- if (*d3d_tree == NULL)
- {
- rmtError error;
- New_3(SampleTree, *d3d_tree, sizeof(D3D11Sample), (ObjConstructor)D3D11Sample_Constructor, (ObjDestructor)D3D11Sample_Destructor);
- if (error != RMT_ERROR_NONE)
- return;
- }
-
- // Push the sample and activate the timestamp
- if (ThreadSampler_Push(*d3d_tree, name_hash, 0, &sample) == RMT_ERROR_NONE)
- {
- D3D11Sample* d3d_sample = (D3D11Sample*)sample;
- D3D11Timestamp_Begin(d3d_sample->timestamp, d3d11->context);
- }
- }
-}
-
-
-static rmtBool GetD3D11SampleTimes(Sample* sample, rmtU64* out_first_timestamp)
-{
- Sample* child;
-
- D3D11Sample* d3d_sample = (D3D11Sample*)sample;
-
- assert(sample != NULL);
- if (d3d_sample->timestamp != NULL)
- {
- HRESULT result;
-
- D3D11* d3d11 = g_Remotery->d3d11;
- assert(d3d11 != NULL);
-
- result = D3D11Timestamp_GetData(
- d3d_sample->timestamp,
- d3d11->context,
- &sample->us_start,
- &sample->us_end,
- out_first_timestamp);
-
- if (result != S_OK)
- {
- d3d11->last_error = result;
- return RMT_FALSE;
- }
-
- sample->us_length = sample->us_end - sample->us_start;
- }
-
- // Get child sample times
- for (child = sample->first_child; child != NULL; child = child->next_sibling)
- {
- if (!GetD3D11SampleTimes(child, out_first_timestamp))
- return RMT_FALSE;
- }
-
- return RMT_TRUE;
-}
-
-
-static void UpdateD3D11Frame(void)
-{
- D3D11* d3d11;
-
- if (g_Remotery == NULL)
- return;
-
- d3d11 = g_Remotery->d3d11;
- assert(d3d11 != NULL);
-
- rmt_BeginCPUSample(rmt_UpdateD3D11Frame, 0);
-
- // Process all messages in the D3D queue
- for (;;)
- {
- Msg_SampleTree* sample_tree;
- Sample* sample;
-
- Message* message = rmtMessageQueue_PeekNextMessage(d3d11->mq_to_d3d11_main);
- if (message == NULL)
- break;
-
- // There's only one valid message type in this queue
- assert(message->id == MsgID_SampleTree);
- sample_tree = (Msg_SampleTree*)message->payload;
- sample = sample_tree->root_sample;
- assert(sample->type == SampleType_D3D11);
-
- // Retrieve timing of all D3D11 samples
- // If they aren't ready leave the message unconsumed, holding up later frames and maintaining order
- if (!GetD3D11SampleTimes(sample, &d3d11->first_timestamp))
- break;
-
- // Pass samples onto the remotery thread for sending to the viewer
- AddSampleTreeMessage(g_Remotery->mq_to_rmt_thread, sample, sample_tree->allocator, sample_tree->thread_name, message->thread_sampler);
- rmtMessageQueue_ConsumeNextMessage(d3d11->mq_to_d3d11_main, message);
- }
-
- rmt_EndCPUSample();
-}
-
-
-RMT_API void _rmt_EndD3D11Sample(void)
-{
- ThreadSampler* ts;
- D3D11* d3d11;
-
- if (g_Remotery == NULL)
- return;
-
- // Has D3D11 been unbound?
- d3d11 = g_Remotery->d3d11;
- assert(d3d11 != NULL);
- if (d3d11->device == NULL || d3d11->context == NULL)
- return;
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- // Close the timestamp
- D3D11Sample* d3d_sample = (D3D11Sample*)ts->sample_trees[SampleType_D3D11]->current_parent;
- if (d3d_sample->timestamp != NULL)
- D3D11Timestamp_End(d3d_sample->timestamp, d3d11->context);
-
- // Send to the update loop for ready-polling
- if (ThreadSampler_Pop(ts, d3d11->mq_to_d3d11_main, (Sample*)d3d_sample))
- // Perform ready-polling on popping of the root sample
- UpdateD3D11Frame();
- }
-}
-
-
-#endif // RMT_USE_D3D11
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-@OpenGL: OpenGL event sampling
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#if RMT_USE_OPENGL
-
-
-#ifndef APIENTRY
-# if defined(__MINGW32__) || defined(__CYGWIN__)
-# define APIENTRY __stdcall
-# elif (defined(_MSC_VER) && (_MSC_VER >= 800)) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__)
-# define APIENTRY __stdcall
-# else
-# define APIENTRY
-# endif
-#endif
-
-#ifndef GLAPI
-# if defined(__MINGW32__) || defined(__CYGWIN__)
-# define GLAPI extern
-# elif defined (_WIN32)
-# define GLAPI WINGDIAPI
-# else
-# define GLAPI extern
-# endif
-#endif
-
-#ifndef GLAPIENTRY
-#define GLAPIENTRY APIENTRY
-#endif
-
-typedef rmtU32 GLenum;
-typedef rmtU32 GLuint;
-typedef rmtS32 GLint;
-typedef rmtS32 GLsizei;
-typedef rmtU64 GLuint64;
-typedef rmtS64 GLint64;
-typedef unsigned char GLubyte;
-
-typedef GLenum (GLAPIENTRY * PFNGLGETERRORPROC) (void);
-typedef void (GLAPIENTRY * PFNGLGENQUERIESPROC) (GLsizei n, GLuint* ids);
-typedef void (GLAPIENTRY * PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint* ids);
-typedef void (GLAPIENTRY * PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
-typedef void (GLAPIENTRY * PFNGLENDQUERYPROC) (GLenum target);
-typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint* params);
-typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint* params);
-typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64* params);
-typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64* params);
-typedef void (GLAPIENTRY * PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target);
-
-#define GL_NO_ERROR 0
-#define GL_QUERY_RESULT 0x8866
-#define GL_QUERY_RESULT_AVAILABLE 0x8867
-#define GL_TIME_ELAPSED 0x88BF
-#define GL_TIMESTAMP 0x8E28
-
-#define RMT_GL_GET_FUN(x) assert(g_Remotery->opengl->x != NULL); g_Remotery->opengl->x
-
-#define rmtglGenQueries RMT_GL_GET_FUN(__glGenQueries)
-#define rmtglDeleteQueries RMT_GL_GET_FUN(__glDeleteQueries)
-#define rmtglBeginQuery RMT_GL_GET_FUN(__glBeginQuery)
-#define rmtglEndQuery RMT_GL_GET_FUN(__glEndQuery)
-#define rmtglGetQueryObjectiv RMT_GL_GET_FUN(__glGetQueryObjectiv)
-#define rmtglGetQueryObjectuiv RMT_GL_GET_FUN(__glGetQueryObjectuiv)
-#define rmtglGetQueryObjecti64v RMT_GL_GET_FUN(__glGetQueryObjecti64v)
-#define rmtglGetQueryObjectui64v RMT_GL_GET_FUN(__glGetQueryObjectui64v)
-#define rmtglQueryCounter RMT_GL_GET_FUN(__glQueryCounter)
-
-
-struct OpenGL_t
-{
- // Handle to the OS OpenGL DLL
- void* dll_handle;
-
- PFNGLGETERRORPROC __glGetError;
- PFNGLGENQUERIESPROC __glGenQueries;
- PFNGLDELETEQUERIESPROC __glDeleteQueries;
- PFNGLBEGINQUERYPROC __glBeginQuery;
- PFNGLENDQUERYPROC __glEndQuery;
- PFNGLGETQUERYOBJECTIVPROC __glGetQueryObjectiv;
- PFNGLGETQUERYOBJECTUIVPROC __glGetQueryObjectuiv;
- PFNGLGETQUERYOBJECTI64VPROC __glGetQueryObjecti64v;
- PFNGLGETQUERYOBJECTUI64VPROC __glGetQueryObjectui64v;
- PFNGLQUERYCOUNTERPROC __glQueryCounter;
-
- // Queue to the OpenGL main update thread
- // Given that BeginSample/EndSample need to be called from the same thread that does the update, there
- // is really no need for this to be a thread-safe queue. I'm using it for its convenience.
- rmtMessageQueue* mq_to_opengl_main;
-
- // Mark the first time so that remaining timestamps are offset from this
- rmtU64 first_timestamp;
-};
-
-
-static GLenum rmtglGetError(void)
-{
- if (g_Remotery != NULL)
- {
- assert(g_Remotery->opengl != NULL);
- if (g_Remotery->opengl->__glGetError != NULL)
- return g_Remotery->opengl->__glGetError();
- }
-
- return (GLenum)0;
-}
-
-
-#ifdef RMT_PLATFORM_LINUX
- #ifdef __cplusplus
- extern "C" void* glXGetProcAddressARB(const GLubyte*);
- #else
- extern void* glXGetProcAddressARB(const GLubyte*);
- #endif
-#endif
-
-
-static void* rmtglGetProcAddress(OpenGL* opengl, const char* symbol)
-{
- #if defined(RMT_PLATFORM_WINDOWS)
- {
- // Get OpenGL extension-loading function for each call
- typedef void* (*wglGetProcAddressFn)(LPCSTR);
- {
- assert(opengl != NULL);
- wglGetProcAddressFn wglGetProcAddress = (wglGetProcAddressFn)rmtGetProcAddress(opengl->dll_handle, "wglGetProcAddress");
- if (wglGetProcAddress != NULL)
- return wglGetProcAddress(symbol);
- }
- }
-
- #elif defined(RMT_PLATFORM_MACOS) && !defined(GLEW_APPLE_GLX)
-
- return rmtGetProcAddress(opengl->dll_handle, symbol);
-
- #elif defined(RMT_PLATFORM_LINUX)
-
- return glXGetProcAddressARB((const GLubyte*)symbol);
-
- #endif
-
- return NULL;
-}
-
-
-static rmtError OpenGL_Create(OpenGL** opengl)
-{
- rmtError error;
-
- assert(opengl != NULL);
-
- *opengl = (OpenGL*)rmtMalloc(sizeof(OpenGL));
- if (*opengl == NULL)
- return RMT_ERROR_MALLOC_FAIL;
-
- (*opengl)->dll_handle = NULL;
-
- (*opengl)->__glGetError = NULL;
- (*opengl)->__glGenQueries = NULL;
- (*opengl)->__glDeleteQueries = NULL;
- (*opengl)->__glBeginQuery = NULL;
- (*opengl)->__glEndQuery = NULL;
- (*opengl)->__glGetQueryObjectiv = NULL;
- (*opengl)->__glGetQueryObjectuiv = NULL;
- (*opengl)->__glGetQueryObjecti64v = NULL;
- (*opengl)->__glGetQueryObjectui64v = NULL;
- (*opengl)->__glQueryCounter = NULL;
-
- (*opengl)->mq_to_opengl_main = NULL;
- (*opengl)->first_timestamp = 0;
-
- New_1(rmtMessageQueue, (*opengl)->mq_to_opengl_main, g_Settings.messageQueueSizeInBytes);
- return error;
-}
-
-
-static void OpenGL_Destructor(OpenGL* opengl)
-{
- assert(opengl != NULL);
- Delete(rmtMessageQueue, opengl->mq_to_opengl_main);
-}
-
-
-typedef struct OpenGLTimestamp
-{
- // Inherit so that timestamps can be quickly allocated
- ObjectLink Link;
-
- // Pair of timestamp queries that wrap the sample
- GLuint queries[2];
-} OpenGLTimestamp;
-
-
-static rmtError OpenGLTimestamp_Constructor(OpenGLTimestamp* stamp)
-{
- int error;
-
- assert(stamp != NULL);
-
- ObjectLink_Constructor((ObjectLink*)stamp);
-
- // Set defaults
- stamp->queries[0] = stamp->queries[1] = 0;
-
- // Create start/end timestamp queries
- assert(g_Remotery != NULL);
- rmtglGenQueries(2, stamp->queries);
- error = rmtglGetError();
- if (error != GL_NO_ERROR)
- return RMT_ERROR_OPENGL_ERROR;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void OpenGLTimestamp_Destructor(OpenGLTimestamp* stamp)
-{
- assert(stamp != NULL);
-
- // Destroy queries
- if (stamp->queries[0] != 0)
- {
- int error;
- rmtglDeleteQueries(2, stamp->queries);
- error = rmtglGetError();
- assert(error == GL_NO_ERROR);
- }
-}
-
-
-static void OpenGLTimestamp_Begin(OpenGLTimestamp* stamp)
-{
- assert(stamp != NULL);
-
- // First query
- assert(g_Remotery != NULL);
- rmtglQueryCounter(stamp->queries[0], GL_TIMESTAMP);
-}
-
-
-static void OpenGLTimestamp_End(OpenGLTimestamp* stamp)
-{
- assert(stamp != NULL);
-
- // Second query
- assert(g_Remotery != NULL);
- rmtglQueryCounter(stamp->queries[1], GL_TIMESTAMP);
-}
-
-
-static rmtBool OpenGLTimestamp_GetData(OpenGLTimestamp* stamp, rmtU64* out_start, rmtU64* out_end, rmtU64* out_first_timestamp)
-{
- GLuint64 start = 0, end = 0;
- GLint startAvailable = 0, endAvailable = 0;
- int error;
-
- assert(g_Remotery != NULL);
-
- assert(stamp != NULL);
- assert(stamp->queries[0] != 0 && stamp->queries[1] != 0);
-
- // Check to see if all queries are ready
- // If any fail to arrive, wait until later
- rmtglGetQueryObjectiv(stamp->queries[0], GL_QUERY_RESULT_AVAILABLE, &startAvailable);
- error = rmtglGetError();
- assert(error == GL_NO_ERROR);
- if (!startAvailable)
- return RMT_FALSE;
- rmtglGetQueryObjectiv(stamp->queries[1], GL_QUERY_RESULT_AVAILABLE, &endAvailable);
- error = rmtglGetError();
- assert(error == GL_NO_ERROR);
- if (!endAvailable)
- return RMT_FALSE;
-
- rmtglGetQueryObjectui64v(stamp->queries[0], GL_QUERY_RESULT, &start);
- error = rmtglGetError();
- assert(error == GL_NO_ERROR);
- rmtglGetQueryObjectui64v(stamp->queries[1], GL_QUERY_RESULT, &end);
- error = rmtglGetError();
- assert(error == GL_NO_ERROR);
-
- // Mark the first timestamp
- assert(out_first_timestamp != NULL);
- if (*out_first_timestamp == 0)
- *out_first_timestamp = start;
-
- // Calculate start and end timestamps (we want us, the queries give us ns)
- *out_start = (rmtU64)(start - *out_first_timestamp) / 1000ULL;
- *out_end = (rmtU64)(end - *out_first_timestamp) / 1000ULL;
-
- return RMT_TRUE;
-}
-
-
-typedef struct OpenGLSample
-{
- // IS-A inheritance relationship
- Sample m_sample;
-
- OpenGLTimestamp* timestamp;
-
-} OpenGLSample;
-
-
-static rmtError OpenGLSample_Constructor(OpenGLSample* sample)
-{
- rmtError error;
-
- assert(sample != NULL);
-
- // Chain to sample constructor
- Sample_Constructor((Sample*)sample);
- sample->m_sample.type = SampleType_OpenGL;
- sample->m_sample.size_bytes = sizeof(OpenGLSample);
- New_0(OpenGLTimestamp, sample->timestamp);
-
- return RMT_ERROR_NONE;
-}
-
-
-static void OpenGLSample_Destructor(OpenGLSample* sample)
-{
- Delete(OpenGLTimestamp, sample->timestamp);
- Sample_Destructor((Sample*)sample);
-}
-
-
-RMT_API void _rmt_BindOpenGL()
-{
- if (g_Remotery != NULL)
- {
- OpenGL* opengl = g_Remotery->opengl;
- assert(opengl != NULL);
-
- #if defined (RMT_PLATFORM_WINDOWS)
- opengl->dll_handle = rmtLoadLibrary("opengl32.dll");
- #elif defined (RMT_PLATFORM_MACOS)
- opengl->dll_handle = rmtLoadLibrary("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL");
- #endif
-
- opengl->__glGetError = (PFNGLGETERRORPROC)rmtGetProcAddress(opengl->dll_handle, "glGetError");
- opengl->__glGenQueries = (PFNGLGENQUERIESPROC)rmtglGetProcAddress(opengl, "glGenQueries");
- opengl->__glDeleteQueries = (PFNGLDELETEQUERIESPROC)rmtglGetProcAddress(opengl, "glDeleteQueries");
- opengl->__glBeginQuery = (PFNGLBEGINQUERYPROC)rmtglGetProcAddress(opengl, "glBeginQuery");
- opengl->__glEndQuery = (PFNGLENDQUERYPROC)rmtglGetProcAddress(opengl, "glEndQuery");
- opengl->__glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)rmtglGetProcAddress(opengl, "glGetQueryObjectiv");
- opengl->__glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)rmtglGetProcAddress(opengl, "glGetQueryObjectuiv");
- opengl->__glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)rmtglGetProcAddress(opengl, "glGetQueryObjecti64v");
- opengl->__glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)rmtglGetProcAddress(opengl, "glGetQueryObjectui64v");
- opengl->__glQueryCounter = (PFNGLQUERYCOUNTERPROC)rmtglGetProcAddress(opengl, "glQueryCounter");
- }
-}
-
-
-static void UpdateOpenGLFrame(void);
-
-
-RMT_API void _rmt_UnbindOpenGL(void)
-{
- if (g_Remotery != NULL)
- {
- OpenGL* opengl = g_Remotery->opengl;
- assert(opengl != NULL);
-
- // Stall waiting for the OpenGL queue to empty into the Remotery queue
- while (!rmtMessageQueue_IsEmpty(opengl->mq_to_opengl_main))
- UpdateOpenGLFrame();
-
- // Forcefully delete sample tree on this thread to release time stamps from
- // the same thread that created them
- Remotery_BlockingDeleteSampleTree(g_Remotery, SampleType_OpenGL);
-
- // Release reference to the OpenGL DLL
- if (opengl->dll_handle != NULL)
- {
- rmtFreeLibrary(opengl->dll_handle);
- opengl->dll_handle = NULL;
- }
- }
-}
-
-
-RMT_API void _rmt_BeginOpenGLSample(rmtPStr name, rmtU32* hash_cache)
-{
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- Sample* sample;
- rmtU32 name_hash = ThreadSampler_GetNameHash(ts, name, hash_cache);
-
- // Create the OpenGL tree on-demand as the tree needs an up-front-created root.
- // This is not possible to create on initialisation as a OpenGL binding is not yet available.
- SampleTree** ogl_tree = &ts->sample_trees[SampleType_OpenGL];
- if (*ogl_tree == NULL)
- {
- rmtError error;
- New_3(SampleTree, *ogl_tree, sizeof(OpenGLSample), (ObjConstructor)OpenGLSample_Constructor, (ObjDestructor)OpenGLSample_Destructor);
- if (error != RMT_ERROR_NONE)
- return;
- }
-
- // Push the sample and activate the timestamp
- if (ThreadSampler_Push(*ogl_tree, name_hash, 0, &sample) == RMT_ERROR_NONE)
- {
- OpenGLSample* ogl_sample = (OpenGLSample*)sample;
- OpenGLTimestamp_Begin(ogl_sample->timestamp);
- }
- }
-}
-
-
-static rmtBool GetOpenGLSampleTimes(Sample* sample, rmtU64* out_first_timestamp)
-{
- Sample* child;
-
- OpenGLSample* ogl_sample = (OpenGLSample*)sample;
-
- assert(sample != NULL);
- if (ogl_sample->timestamp != NULL)
- {
- if (!OpenGLTimestamp_GetData(ogl_sample->timestamp, &sample->us_start, &sample->us_end, out_first_timestamp))
- return RMT_FALSE;
-
- sample->us_length = sample->us_end - sample->us_start;
- }
-
- // Get child sample times
- for (child = sample->first_child; child != NULL; child = child->next_sibling)
- {
- if (!GetOpenGLSampleTimes(child, out_first_timestamp))
- return RMT_FALSE;
- }
-
- return RMT_TRUE;
-}
-
-
-static void UpdateOpenGLFrame(void)
-{
- OpenGL* opengl;
-
- if (g_Remotery == NULL)
- return;
-
- opengl = g_Remotery->opengl;
- assert(opengl != NULL);
-
- rmt_BeginCPUSample(rmt_UpdateOpenGLFrame, 0);
-
- // Process all messages in the OpenGL queue
- while (1)
- {
- Msg_SampleTree* sample_tree;
- Sample* sample;
-
- Message* message = rmtMessageQueue_PeekNextMessage(opengl->mq_to_opengl_main);
- if (message == NULL)
- break;
-
- // There's only one valid message type in this queue
- assert(message->id == MsgID_SampleTree);
- sample_tree = (Msg_SampleTree*)message->payload;
- sample = sample_tree->root_sample;
- assert(sample->type == SampleType_OpenGL);
-
- // Retrieve timing of all OpenGL samples
- // If they aren't ready leave the message unconsumed, holding up later frames and maintaining order
- if (!GetOpenGLSampleTimes(sample, &opengl->first_timestamp))
- break;
-
- // Pass samples onto the remotery thread for sending to the viewer
- AddSampleTreeMessage(g_Remotery->mq_to_rmt_thread, sample, sample_tree->allocator, sample_tree->thread_name, message->thread_sampler);
- rmtMessageQueue_ConsumeNextMessage(opengl->mq_to_opengl_main, message);
- }
-
- rmt_EndCPUSample();
-}
-
-
-RMT_API void _rmt_EndOpenGLSample(void)
-{
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- // Close the timestamp
- OpenGLSample* ogl_sample = (OpenGLSample*)ts->sample_trees[SampleType_OpenGL]->current_parent;
- if (ogl_sample->timestamp != NULL)
- OpenGLTimestamp_End(ogl_sample->timestamp);
-
- // Send to the update loop for ready-polling
- if (ThreadSampler_Pop(ts, g_Remotery->opengl->mq_to_opengl_main, (Sample*)ogl_sample))
- // Perform ready-polling on popping of the root sample
- UpdateOpenGLFrame();
- }
-}
-
-
-
-#endif // RMT_USE_OPENGL
-
-
-
-/*
- ------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------
- @Metal: Metal event sampling
- ------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------
- */
-
-
-
-#if RMT_USE_METAL
-
-
-
-struct Metal_t
-{
- // Queue to the Metal main update thread
- // Given that BeginSample/EndSample need to be called from the same thread that does the update, there
- // is really no need for this to be a thread-safe queue. I'm using it for its convenience.
- rmtMessageQueue* mq_to_metal_main;
-};
-
-
-static rmtError Metal_Create(Metal** metal)
-{
- rmtError error;
-
- assert(metal != NULL);
-
- *metal = (Metal*)rmtMalloc(sizeof(Metal));
- if (*metal == NULL)
- return RMT_ERROR_MALLOC_FAIL;
-
- (*metal)->mq_to_metal_main = NULL;
-
- New_1(rmtMessageQueue, (*metal)->mq_to_metal_main, g_Settings.messageQueueSizeInBytes);
- return error;
-}
-
-
-static void Metal_Destructor(Metal* metal)
-{
- assert(metal != NULL);
- Delete(rmtMessageQueue, metal->mq_to_metal_main);
-}
-
-
-typedef struct MetalTimestamp
-{
- // Inherit so that timestamps can be quickly allocated
- ObjectLink Link;
-
- // Output from GPU callbacks
- rmtU64 start;
- rmtU64 end;
- rmtBool ready;
-} MetalTimestamp;
-
-
-static rmtError MetalTimestamp_Constructor(MetalTimestamp* stamp)
-{
- assert(stamp != NULL);
-
- ObjectLink_Constructor((ObjectLink*)stamp);
-
- // Set defaults
- stamp->start = 0;
- stamp->end = 0;
- stamp->ready = RMT_FALSE;
-
- return RMT_ERROR_NONE;
-}
-
-
-static void MetalTimestamp_Destructor(MetalTimestamp* stamp)
-{
- assert(stamp != NULL);
-}
-
-
-rmtU64 rmtMetal_usGetTime()
-{
- // Share the CPU timer for auto-sync
- assert(g_Remotery != NULL);
- return usTimer_Get(&g_Remotery->timer);
-}
-
-
-void rmtMetal_MeasureCommandBuffer(unsigned long long* out_start, unsigned long long* out_end, unsigned int* out_ready);
-
-
-static void MetalTimestamp_Begin(MetalTimestamp* stamp)
-{
- assert(stamp != NULL);
- stamp->ready = RMT_FALSE;
-
- // Metal can currently only issue callbacks at the command buffer level
- // So for now measure execution of the entire command buffer
- rmtMetal_MeasureCommandBuffer(&stamp->start, &stamp->end, &stamp->ready);
-}
-
-
-static void MetalTimestamp_End(MetalTimestamp* stamp)
-{
- assert(stamp != NULL);
-
- // As Metal can currently only measure entire command buffers, this function is a no-op
- // as the completed handler was already issued in Begin
-}
-
-
-static rmtBool MetalTimestamp_GetData(MetalTimestamp* stamp, rmtU64* out_start, rmtU64* out_end)
-{
- assert(g_Remotery != NULL);
- assert(stamp != NULL);
-
- // GPU writes ready flag when complete handler is called
- if (stamp->ready == RMT_FALSE)
- return RMT_FALSE;
-
- *out_start = stamp->start;
- *out_end = stamp->end;
-
- return RMT_TRUE;
-}
-
-
-typedef struct MetalSample
-{
- // IS-A inheritance relationship
- Sample m_sample;
-
- MetalTimestamp* timestamp;
-
-} MetalSample;
-
-
-static rmtError MetalSample_Constructor(MetalSample* sample)
-{
- rmtError error;
-
- assert(sample != NULL);
-
- // Chain to sample constructor
- Sample_Constructor((Sample*)sample);
- sample->m_sample.type = SampleType_Metal;
- sample->m_sample.size_bytes = sizeof(MetalSample);
- New_0(MetalTimestamp, sample->timestamp);
-
- return RMT_ERROR_NONE;
-}
-
-
-static void MetalSample_Destructor(MetalSample* sample)
-{
- Delete(MetalTimestamp, sample->timestamp);
- Sample_Destructor((Sample*)sample);
-}
-
-
-static void UpdateOpenGLFrame(void);
-
-
-/*RMT_API void _rmt_UnbindMetal(void)
-{
- if (g_Remotery != NULL)
- {
- Metal* metal = g_Remotery->metal;
- assert(metal != NULL);
-
- // Stall waiting for the Metal queue to empty into the Remotery queue
- while (!rmtMessageQueue_IsEmpty(metal->mq_to_metal_main))
- UpdateMetalFrame();
-
- // Forcefully delete sample tree on this thread to release time stamps from
- // the same thread that created them
- Remotery_BlockingDeleteSampleTree(g_Remotery, SampleType_Metal);
- }
-}*/
-
-
-RMT_API void _rmt_BeginMetalSample(rmtPStr name, rmtU32* hash_cache)
-{
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- Sample* sample;
- rmtU32 name_hash = ThreadSampler_GetNameHash(ts, name, hash_cache);
-
- // Create the Metal tree on-demand as the tree needs an up-front-created root.
- // This is not possible to create on initialisation as a Metal binding is not yet available.
- SampleTree** metal_tree = &ts->sample_trees[SampleType_Metal];
- if (*metal_tree == NULL)
- {
- rmtError error;
- New_3(SampleTree, *metal_tree, sizeof(MetalSample), (ObjConstructor)MetalSample_Constructor, (ObjDestructor)MetalSample_Destructor);
- if (error != RMT_ERROR_NONE)
- return;
- }
-
- // Push the sample and activate the timestamp
- if (ThreadSampler_Push(*metal_tree, name_hash, 0, &sample) == RMT_ERROR_NONE)
- {
- MetalSample* metal_sample = (MetalSample*)sample;
- MetalTimestamp_Begin(metal_sample->timestamp);
- }
- }
-}
-
-
-static rmtBool GetMetalSampleTimes(Sample* sample)
-{
- Sample* child;
-
- MetalSample* metal_sample = (MetalSample*)sample;
-
- assert(sample != NULL);
- if (metal_sample->timestamp != NULL)
- {
- if (!MetalTimestamp_GetData(metal_sample->timestamp, &sample->us_start, &sample->us_end))
- return RMT_FALSE;
-
- sample->us_length = sample->us_end - sample->us_start;
- }
-
- // Get child sample times
- for (child = sample->first_child; child != NULL; child = child->next_sibling)
- {
- if (!GetMetalSampleTimes(child))
- return RMT_FALSE;
- }
-
- return RMT_TRUE;
-}
-
-
-static void UpdateMetalFrame(void)
-{
- Metal* metal;
-
- if (g_Remotery == NULL)
- return;
-
- metal = g_Remotery->metal;
- assert(metal != NULL);
-
- rmt_BeginCPUSample(rmt_UpdateMetalFrame, 0);
-
- // Process all messages in the Metal queue
- while (1)
- {
- Msg_SampleTree* sample_tree;
- Sample* sample;
-
- Message* message = rmtMessageQueue_PeekNextMessage(metal->mq_to_metal_main);
- if (message == NULL)
- break;
-
- // There's only one valid message type in this queue
- assert(message->id == MsgID_SampleTree);
- sample_tree = (Msg_SampleTree*)message->payload;
- sample = sample_tree->root_sample;
- assert(sample->type == SampleType_Metal);
-
- // Retrieve timing of all Metal samples
- // If they aren't ready leave the message unconsumed, holding up later frames and maintaining order
- if (!GetMetalSampleTimes(sample))
- break;
-
- // Pass samples onto the remotery thread for sending to the viewer
- AddSampleTreeMessage(g_Remotery->mq_to_rmt_thread, sample, sample_tree->allocator, sample_tree->thread_name, message->thread_sampler);
- rmtMessageQueue_ConsumeNextMessage(metal->mq_to_metal_main, message);
- }
-
- rmt_EndCPUSample();
-}
-
-
-RMT_API void _rmt_EndMetalSample(void)
-{
- ThreadSampler* ts;
-
- if (g_Remotery == NULL)
- return;
-
- if (Remotery_GetThreadSampler(g_Remotery, &ts) == RMT_ERROR_NONE)
- {
- // Close the timestamp
- MetalSample* metal_sample = (MetalSample*)ts->sample_trees[SampleType_Metal]->current_parent;
- if (metal_sample->timestamp != NULL)
- MetalTimestamp_End(metal_sample->timestamp);
-
- // Send to the update loop for ready-polling
- if (ThreadSampler_Pop(ts, g_Remotery->metal->mq_to_metal_main, (Sample*)metal_sample))
- // Perform ready-polling on popping of the root sample
- UpdateMetalFrame();
- }
-}
-
-
-
-#endif // RMT_USE_METAL
-
-
-#endif // RMT_ENABLED
-
diff --git a/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.h b/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.h
deleted file mode 100644
index 9b25a0c40e1..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/lib/Remotery.h
+++ /dev/null
@@ -1,620 +0,0 @@
-
-
-/*
-Copyright 2014 Celtoys Ltd
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-
-/*
-
-Compiling
----------
-
-* Windows (MSVC) - add lib/Remotery.c and lib/Remotery.h to your program. Set include
- directories to add Remotery/lib path. The required library ws2_32.lib should be picked
- up through the use of the #pragma comment(lib, "ws2_32.lib") directive in Remotery.c.
-
-* Mac OS X (XCode) - simply add lib/Remotery.c and lib/Remotery.h to your program.
-
-* Linux (GCC) - add the source in lib folder. Compilation of the code requires -pthreads for
- library linkage. For example to compile the same run: cc lib/Remotery.c sample/sample.c
- -I lib -pthread -lm
-
-You can define some extra macros to modify what features are compiled into Remotery. These are
-documented just below this comment.
-
-*/
-
-
-#ifndef RMT_INCLUDED_H
-#define RMT_INCLUDED_H
-
-
-// Set to 0 to not include any bits of Remotery in your build
-#ifndef RMT_ENABLED
-#define RMT_ENABLED 1
-#endif
-
-// Used by the Celtoys TinyCRT library (not released yet)
-#ifndef RMT_USE_TINYCRT
-#define RMT_USE_TINYCRT 0
-#endif
-
-// Assuming CUDA headers/libs are setup, allow CUDA profiling
-#ifndef RMT_USE_CUDA
-#define RMT_USE_CUDA 0
-#endif
-
-// Assuming Direct3D 11 headers/libs are setup, allow D3D11 profiling
-#ifndef RMT_USE_D3D11
-#define RMT_USE_D3D11 0
-#endif
-
-// Allow OpenGL profiling
-#ifndef RMT_USE_OPENGL
-#define RMT_USE_OPENGL 0
-#endif
-
-// Allow Metal profiling
-#ifndef RMT_USE_METAL
-#define RMT_USE_METAL 0
-#endif
-
-// Initially use POSIX thread names to name threads instead of Thread0, 1, ...
-#ifndef RMT_USE_POSIX_THREADNAMES
-#define RMT_USE_POSIX_THREADNAMES 0
-#endif
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- Compiler/Platform Detection and Preprocessor Utilities
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-// Platform identification
-#if defined(_WINDOWS) || defined(_WIN32)
- #define RMT_PLATFORM_WINDOWS
-#elif defined(__linux__)
- #define RMT_PLATFORM_LINUX
- #define RMT_PLATFORM_POSIX
-#elif defined(__APPLE__)
- #define RMT_PLATFORM_MACOS
- #define RMT_PLATFORM_POSIX
-#endif
-
-#ifdef RMT_DLL
- #if defined (RMT_PLATFORM_WINDOWS)
- #if defined (RMT_IMPL)
- #define RMT_API __declspec(dllexport)
- #else
- #define RMT_API __declspec(dllimport)
- #endif
- #elif defined (RMT_PLATFORM_POSIX)
- #if defined (RMT_IMPL)
- #define RMT_API __attribute__((visibility("default")))
- #else
- #define RMT_API
- #endif
- #endif
-#else
- #define RMT_API
-#endif
-
-// Allows macros to be written that can work around the inability to do: #define(x) #ifdef x
-// with the C preprocessor.
-#if RMT_ENABLED
- #define IFDEF_RMT_ENABLED(t, f) t
-#else
- #define IFDEF_RMT_ENABLED(t, f) f
-#endif
-#if RMT_ENABLED && RMT_USE_CUDA
- #define IFDEF_RMT_USE_CUDA(t, f) t
-#else
- #define IFDEF_RMT_USE_CUDA(t, f) f
-#endif
-#if RMT_ENABLED && RMT_USE_D3D11
- #define IFDEF_RMT_USE_D3D11(t, f) t
-#else
- #define IFDEF_RMT_USE_D3D11(t, f) f
-#endif
-#if RMT_ENABLED && RMT_USE_OPENGL
- #define IFDEF_RMT_USE_OPENGL(t, f) t
-#else
- #define IFDEF_RMT_USE_OPENGL(t, f) f
-#endif
-#if RMT_ENABLED && RMT_USE_METAL
- #define IFDEF_RMT_USE_METAL(t, f) t
-#else
- #define IFDEF_RMT_USE_METAL(t, f) f
-#endif
-
-
-// Public interface is written in terms of these macros to easily enable/disable itself
-#define RMT_OPTIONAL(macro, x) IFDEF_ ## macro(x, )
-#define RMT_OPTIONAL_RET(macro, x, y) IFDEF_ ## macro(x, (y))
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- Types
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-// Boolean
-typedef unsigned int rmtBool;
-#define RMT_TRUE ((rmtBool)1)
-#define RMT_FALSE ((rmtBool)0)
-
-
-// Unsigned integer types
-typedef unsigned char rmtU8;
-typedef unsigned short rmtU16;
-typedef unsigned int rmtU32;
-typedef unsigned long long rmtU64;
-
-
-// Signed integer types
-typedef char rmtS8;
-typedef short rmtS16;
-typedef int rmtS32;
-typedef long long rmtS64;
-
-
-// Const, null-terminated string pointer
-typedef const char* rmtPStr;
-
-
-// Handle to the main remotery instance
-typedef struct Remotery Remotery;
-
-
-// All possible error codes
-typedef enum rmtError
-{
- RMT_ERROR_NONE,
-
- // System errors
- RMT_ERROR_MALLOC_FAIL, // Malloc call within remotery failed
- RMT_ERROR_TLS_ALLOC_FAIL, // Attempt to allocate thread local storage failed
- RMT_ERROR_VIRTUAL_MEMORY_BUFFER_FAIL, // Failed to create a virtual memory mirror buffer
- RMT_ERROR_CREATE_THREAD_FAIL, // Failed to create a thread for the server
-
- // Network TCP/IP socket errors
- RMT_ERROR_SOCKET_INIT_NETWORK_FAIL, // Network initialisation failure (e.g. on Win32, WSAStartup fails)
- RMT_ERROR_SOCKET_CREATE_FAIL, // Can't create a socket for connection to the remote viewer
- RMT_ERROR_SOCKET_BIND_FAIL, // Can't bind a socket for the server
- RMT_ERROR_SOCKET_LISTEN_FAIL, // Created server socket failed to enter a listen state
- RMT_ERROR_SOCKET_SET_NON_BLOCKING_FAIL, // Created server socket failed to switch to a non-blocking state
- RMT_ERROR_SOCKET_INVALID_POLL, // Poll attempt on an invalid socket
- RMT_ERROR_SOCKET_SELECT_FAIL, // Server failed to call select on socket
- RMT_ERROR_SOCKET_POLL_ERRORS, // Poll notified that the socket has errors
- RMT_ERROR_SOCKET_ACCEPT_FAIL, // Server failed to accept connection from client
- RMT_ERROR_SOCKET_SEND_TIMEOUT, // Timed out trying to send data
- RMT_ERROR_SOCKET_SEND_FAIL, // Unrecoverable error occured while client/server tried to send data
- RMT_ERROR_SOCKET_RECV_NO_DATA, // No data available when attempting a receive
- RMT_ERROR_SOCKET_RECV_TIMEOUT, // Timed out trying to receive data
- RMT_ERROR_SOCKET_RECV_FAILED, // Unrecoverable error occured while client/server tried to receive data
-
- // WebSocket errors
- RMT_ERROR_WEBSOCKET_HANDSHAKE_NOT_GET, // WebSocket server handshake failed, not HTTP GET
- RMT_ERROR_WEBSOCKET_HANDSHAKE_NO_VERSION, // WebSocket server handshake failed, can't locate WebSocket version
- RMT_ERROR_WEBSOCKET_HANDSHAKE_BAD_VERSION, // WebSocket server handshake failed, unsupported WebSocket version
- RMT_ERROR_WEBSOCKET_HANDSHAKE_NO_HOST, // WebSocket server handshake failed, can't locate host
- RMT_ERROR_WEBSOCKET_HANDSHAKE_BAD_HOST, // WebSocket server handshake failed, host is not allowed to connect
- RMT_ERROR_WEBSOCKET_HANDSHAKE_NO_KEY, // WebSocket server handshake failed, can't locate WebSocket key
- RMT_ERROR_WEBSOCKET_HANDSHAKE_BAD_KEY, // WebSocket server handshake failed, WebSocket key is ill-formed
- RMT_ERROR_WEBSOCKET_HANDSHAKE_STRING_FAIL, // WebSocket server handshake failed, internal error, bad string code
- RMT_ERROR_WEBSOCKET_DISCONNECTED, // WebSocket server received a disconnect request and closed the socket
- RMT_ERROR_WEBSOCKET_BAD_FRAME_HEADER, // Couldn't parse WebSocket frame header
- RMT_ERROR_WEBSOCKET_BAD_FRAME_HEADER_SIZE, // Partially received wide frame header size
- RMT_ERROR_WEBSOCKET_BAD_FRAME_HEADER_MASK, // Partially received frame header data mask
- RMT_ERROR_WEBSOCKET_RECEIVE_TIMEOUT, // Timeout receiving frame header
-
- RMT_ERROR_REMOTERY_NOT_CREATED, // Remotery object has not been created
- RMT_ERROR_SEND_ON_INCOMPLETE_PROFILE, // An attempt was made to send an incomplete profile tree to the client
-
- // CUDA error messages
- RMT_ERROR_CUDA_DEINITIALIZED, // This indicates that the CUDA driver is in the process of shutting down
- RMT_ERROR_CUDA_NOT_INITIALIZED, // This indicates that the CUDA driver has not been initialized with cuInit() or that initialization has failed
- RMT_ERROR_CUDA_INVALID_CONTEXT, // This most frequently indicates that there is no context bound to the current thread
- RMT_ERROR_CUDA_INVALID_VALUE, // This indicates that one or more of the parameters passed to the API call is not within an acceptable range of values
- RMT_ERROR_CUDA_INVALID_HANDLE, // This indicates that a resource handle passed to the API call was not valid
- RMT_ERROR_CUDA_OUT_OF_MEMORY, // The API call failed because it was unable to allocate enough memory to perform the requested operation
- RMT_ERROR_ERROR_NOT_READY, // This indicates that a resource handle passed to the API call was not valid
-
- // Direct3D 11 error messages
- RMT_ERROR_D3D11_FAILED_TO_CREATE_QUERY, // Failed to create query for sample
-
- // OpenGL error messages
- RMT_ERROR_OPENGL_ERROR, // Generic OpenGL error, no need to expose detail since app will need an OpenGL error callback registered
-
- RMT_ERROR_CUDA_UNKNOWN,
-} rmtError;
-
-
-typedef enum rmtSampleFlags
-{
- // Default behaviour
- RMTSF_None = 0,
-
- // Search parent for same-named samples and merge timing instead of adding a new sample
- RMTSF_Aggregate = 1,
-} rmtSampleFlags;
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- Public Interface
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-// Can call remotery functions on a null pointer
-// TODO: Can embed extern "C" in these macros?
-
-#define rmt_Settings() \
- RMT_OPTIONAL_RET(RMT_ENABLED, _rmt_Settings(), NULL )
-
-#define rmt_CreateGlobalInstance(rmt) \
- RMT_OPTIONAL_RET(RMT_ENABLED, _rmt_CreateGlobalInstance(rmt), RMT_ERROR_NONE)
-
-#define rmt_DestroyGlobalInstance(rmt) \
- RMT_OPTIONAL(RMT_ENABLED, _rmt_DestroyGlobalInstance(rmt))
-
-#define rmt_SetGlobalInstance(rmt) \
- RMT_OPTIONAL(RMT_ENABLED, _rmt_SetGlobalInstance(rmt))
-
-#define rmt_GetGlobalInstance() \
- RMT_OPTIONAL_RET(RMT_ENABLED, _rmt_GetGlobalInstance(), NULL)
-
-#define rmt_SetCurrentThreadName(rmt) \
- RMT_OPTIONAL(RMT_ENABLED, _rmt_SetCurrentThreadName(rmt))
-
-#define rmt_LogText(text) \
- RMT_OPTIONAL(RMT_ENABLED, _rmt_LogText(text))
-
-#define rmt_BeginCPUSample(name, flags) \
- RMT_OPTIONAL(RMT_ENABLED, { \
- static rmtU32 rmt_sample_hash_##name = 0; \
- _rmt_BeginCPUSample(#name, flags, &rmt_sample_hash_##name); \
- })
-
-#define rmt_BeginCPUSampleDynamic(namestr, flags) \
- RMT_OPTIONAL(RMT_ENABLED, _rmt_BeginCPUSample(namestr, flags, NULL))
-
-#define rmt_EndCPUSample() \
- RMT_OPTIONAL(RMT_ENABLED, _rmt_EndCPUSample())
-
-
-// Callback function pointer types
-typedef void* (*rmtMallocPtr)(void* mm_context, rmtU32 size);
-typedef void* (*rmtReallocPtr)(void* mm_context, void* ptr, rmtU32 size);
-typedef void (*rmtFreePtr)(void* mm_context, void* ptr);
-typedef void (*rmtInputHandlerPtr)(const char* text, void* context);
-
-
-// Struture to fill in to modify Remotery default settings
-typedef struct rmtSettings
-{
- // Which port to listen for incoming connections on
- rmtU16 port;
-
- // Only allow connections on localhost?
- // For dev builds you may want to access your game from other devices but if
- // you distribute a game to your players with Remotery active, probably best
- // to limit connections to localhost.
- rmtBool limit_connections_to_localhost;
-
- // How long to sleep between server updates, hopefully trying to give
- // a little CPU back to other threads.
- rmtU32 msSleepBetweenServerUpdates;
-
- // Size of the internal message queues Remotery uses
- // Will be rounded to page granularity of 64k
- rmtU32 messageQueueSizeInBytes;
-
- // If the user continuously pushes to the message queue, the server network
- // code won't get a chance to update unless there's an upper-limit on how
- // many messages can be consumed per loop.
- rmtU32 maxNbMessagesPerUpdate;
-
- // Callback pointers for memory allocation
- rmtMallocPtr malloc;
- rmtReallocPtr realloc;
- rmtFreePtr free;
- void* mm_context;
-
- // Callback pointer for receiving input from the Remotery console
- rmtInputHandlerPtr input_handler;
-
- // Context pointer that gets sent to Remotery console callback function
- void* input_handler_context;
-
- rmtPStr logFilename;
-} rmtSettings;
-
-
-// Structure to fill in when binding CUDA to Remotery
-typedef struct rmtCUDABind
-{
- // The main context that all driver functions apply before each call
- void* context;
-
- // Driver API function pointers that need to be pointed to
- // Untyped so that the CUDA headers are not required in this file
- // NOTE: These are named differently to the CUDA functions because the CUDA API has a habit of using
- // macros to point function calls to different versions, e.g. cuEventDestroy is a macro for
- // cuEventDestroy_v2.
- void* CtxSetCurrent;
- void* CtxGetCurrent;
- void* EventCreate;
- void* EventDestroy;
- void* EventRecord;
- void* EventQuery;
- void* EventElapsedTime;
-
-} rmtCUDABind;
-
-
-// Call once after you've initialised CUDA to bind it to Remotery
-#define rmt_BindCUDA(bind) \
- RMT_OPTIONAL(RMT_USE_CUDA, _rmt_BindCUDA(bind))
-
-// Mark the beginning of a CUDA sample on the specified asynchronous stream
-#define rmt_BeginCUDASample(name, stream) \
- RMT_OPTIONAL(RMT_USE_CUDA, { \
- static rmtU32 rmt_sample_hash_##name = 0; \
- _rmt_BeginCUDASample(#name, &rmt_sample_hash_##name, stream); \
- })
-
-// Mark the end of a CUDA sample on the specified asynchronous stream
-#define rmt_EndCUDASample(stream) \
- RMT_OPTIONAL(RMT_USE_CUDA, _rmt_EndCUDASample(stream))
-
-
-#define rmt_BindD3D11(device, context) \
- RMT_OPTIONAL(RMT_USE_D3D11, _rmt_BindD3D11(device, context))
-
-#define rmt_UnbindD3D11() \
- RMT_OPTIONAL(RMT_USE_D3D11, _rmt_UnbindD3D11())
-
-#define rmt_BeginD3D11Sample(name) \
- RMT_OPTIONAL(RMT_USE_D3D11, { \
- static rmtU32 rmt_sample_hash_##name = 0; \
- _rmt_BeginD3D11Sample(#name, &rmt_sample_hash_##name); \
- })
-
-#define rmt_BeginD3D11SampleDynamic(namestr) \
- RMT_OPTIONAL(RMT_USE_D3D11, _rmt_BeginD3D11Sample(namestr, NULL))
-
-#define rmt_EndD3D11Sample() \
- RMT_OPTIONAL(RMT_USE_D3D11, _rmt_EndD3D11Sample())
-
-
-#define rmt_BindOpenGL() \
- RMT_OPTIONAL(RMT_USE_OPENGL, _rmt_BindOpenGL())
-
-#define rmt_UnbindOpenGL() \
- RMT_OPTIONAL(RMT_USE_OPENGL, _rmt_UnbindOpenGL())
-
-#define rmt_BeginOpenGLSample(name) \
- RMT_OPTIONAL(RMT_USE_OPENGL, { \
- static rmtU32 rmt_sample_hash_##name = 0; \
- _rmt_BeginOpenGLSample(#name, &rmt_sample_hash_##name); \
- })
-
-#define rmt_BeginOpenGLSampleDynamic(namestr) \
- RMT_OPTIONAL(RMT_USE_OPENGL, _rmt_BeginOpenGLSample(namestr, NULL))
-
-#define rmt_EndOpenGLSample() \
- RMT_OPTIONAL(RMT_USE_OPENGL, _rmt_EndOpenGLSample())
-
-
-#define rmt_BindMetal(command_buffer) \
- RMT_OPTIONAL(RMT_USE_METAL, _rmt_BindMetal(command_buffer));
-
-#define rmt_UnbindMetal() \
- RMT_OPTIONAL(RMT_USE_METAL, _rmt_UnbindMetal());
-
-#define rmt_BeginMetalSample(name) \
- RMT_OPTIONAL(RMT_USE_METAL, { \
- static rmtU32 rmt_sample_hash_##name = 0; \
- _rmt_BeginMetalSample(#name, &rmt_sample_hash_##name); \
- })
-
-#define rmt_BeginMetalSampleDynamic(namestr) \
- RMT_OPTIONAL(RMT_USE_METAL, _rmt_BeginMetalSample(namestr, NULL))
-
-#define rmt_EndMetalSample() \
- RMT_OPTIONAL(RMT_USE_METAL, _rmt_EndMetalSample())
-
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- C++ Public Interface Extensions
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#ifdef __cplusplus
-
-
-#if RMT_ENABLED
-
-// Types that end samples in their destructors
-extern "C" RMT_API void _rmt_EndCPUSample(void);
-struct rmt_EndCPUSampleOnScopeExit
-{
- ~rmt_EndCPUSampleOnScopeExit()
- {
- _rmt_EndCPUSample();
- }
-};
-#if RMT_USE_CUDA
-extern "C" RMT_API void _rmt_EndCUDASample(void* stream);
-struct rmt_EndCUDASampleOnScopeExit
-{
- rmt_EndCUDASampleOnScopeExit(void* stream) : stream(stream)
- {
- }
- ~rmt_EndCUDASampleOnScopeExit()
- {
- _rmt_EndCUDASample(stream);
- }
- void* stream;
-};
-#endif
-#if RMT_USE_D3D11
-extern "C" RMT_API void _rmt_EndD3D11Sample(void);
-struct rmt_EndD3D11SampleOnScopeExit
-{
- ~rmt_EndD3D11SampleOnScopeExit()
- {
- _rmt_EndD3D11Sample();
- }
-};
-#endif
-
-#if RMT_USE_OPENGL
-extern "C" RMT_API void _rmt_EndOpenGLSample(void);
-struct rmt_EndOpenGLSampleOnScopeExit
-{
- ~rmt_EndOpenGLSampleOnScopeExit()
- {
- _rmt_EndOpenGLSample();
- }
-};
-#endif
-
-#if RMT_USE_METAL
-extern "C" RMT_API void _rmt_EndMetalSample(void);
-struct rmt_EndMetalSampleOnScopeExit
-{
- ~rmt_EndMetalSampleOnScopeExit()
- {
- _rmt_EndMetalSample();
- }
-};
-#endif
-
-#endif
-
-
-
-// Pairs a call to rmt_Begin<TYPE>Sample with its call to rmt_End<TYPE>Sample when leaving scope
-#define rmt_ScopedCPUSample(name, flags) \
- RMT_OPTIONAL(RMT_ENABLED, rmt_BeginCPUSample(name, flags)); \
- RMT_OPTIONAL(RMT_ENABLED, rmt_EndCPUSampleOnScopeExit rmt_ScopedCPUSample##name);
-#define rmt_ScopedCUDASample(name, stream) \
- RMT_OPTIONAL(RMT_USE_CUDA, rmt_BeginCUDASample(name, stream)); \
- RMT_OPTIONAL(RMT_USE_CUDA, rmt_EndCUDASampleOnScopeExit rmt_ScopedCUDASample##name(stream));
-#define rmt_ScopedD3D11Sample(name) \
- RMT_OPTIONAL(RMT_USE_D3D11, rmt_BeginD3D11Sample(name)); \
- RMT_OPTIONAL(RMT_USE_D3D11, rmt_EndD3D11SampleOnScopeExit rmt_ScopedD3D11Sample##name);
-#define rmt_ScopedOpenGLSample(name) \
- RMT_OPTIONAL(RMT_USE_OPENGL, rmt_BeginOpenGLSample(name)); \
- RMT_OPTIONAL(RMT_USE_OPENGL, rmt_EndOpenGLSampleOnScopeExit rmt_ScopedOpenGLSample##name);
-#define rmt_ScopedMetalSample(name) \
- RMT_OPTIONAL(RMT_USE_METAL, rmt_BeginMetalSample(name)); \
- RMT_OPTIONAL(RMT_USE_METAL, rmt_EndMetalSampleOnScopeExit rmt_ScopedMetalSample##name);
-
-#endif
-
-
-
-/*
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
- Private Interface - don't directly call these
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-*/
-
-
-
-#if RMT_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-RMT_API rmtSettings* _rmt_Settings( void );
-RMT_API enum rmtError _rmt_CreateGlobalInstance(Remotery** remotery);
-RMT_API void _rmt_DestroyGlobalInstance(Remotery* remotery);
-RMT_API void _rmt_SetGlobalInstance(Remotery* remotery);
-RMT_API Remotery* _rmt_GetGlobalInstance(void);
-RMT_API void _rmt_SetCurrentThreadName(rmtPStr thread_name);
-RMT_API void _rmt_LogText(rmtPStr text);
-RMT_API void _rmt_BeginCPUSample(rmtPStr name, rmtU32 flags, rmtU32* hash_cache);
-RMT_API void _rmt_EndCPUSample(void);
-
-#if RMT_USE_CUDA
-RMT_API void _rmt_BindCUDA(const rmtCUDABind* bind);
-RMT_API void _rmt_BeginCUDASample(rmtPStr name, rmtU32* hash_cache, void* stream);
-RMT_API void _rmt_EndCUDASample(void* stream);
-#endif
-
-#if RMT_USE_D3D11
-RMT_API void _rmt_BindD3D11(void* device, void* context);
-RMT_API void _rmt_UnbindD3D11(void);
-RMT_API void _rmt_BeginD3D11Sample(rmtPStr name, rmtU32* hash_cache);
-RMT_API void _rmt_EndD3D11Sample(void);
-#endif
-
-#if RMT_USE_OPENGL
-RMT_API void _rmt_BindOpenGL();
-RMT_API void _rmt_UnbindOpenGL(void);
-RMT_API void _rmt_BeginOpenGLSample(rmtPStr name, rmtU32* hash_cache);
-RMT_API void _rmt_EndOpenGLSample(void);
-#endif
-
-#if RMT_USE_METAL
-RMT_API void _rmt_BeginMetalSample(rmtPStr name, rmtU32* hash_cache);
-RMT_API void _rmt_EndMetalSample(void);
-#endif
-
-#ifdef __cplusplus
-
-}
-#endif
-
-#if RMT_USE_METAL
-#ifdef __OBJC__
-RMT_API void _rmt_BindMetal(id command_buffer);
-RMT_API void _rmt_UnbindMetal();
-#endif
-#endif
-
-#endif // RMT_ENABLED
-
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/remotery/lib/RemoteryMetal.mm b/3rdparty/bgfx/3rdparty/remotery/lib/RemoteryMetal.mm
deleted file mode 100644
index b2538eda87a..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/lib/RemoteryMetal.mm
+++ /dev/null
@@ -1,49 +0,0 @@
-
-#include <Foundation/NSThread.h>
-#include <Foundation/NSDictionary.h>
-#include <Foundation/NSString.h>
-
-#import <Metal/Metal.h>
-
-
-// Store command buffer in thread-local so that each thread can point to its own
-void SetCommandBuffer(id command_buffer)
-{
- NSMutableDictionary* thread_data = [[NSThread currentThread] threadDictionary];
- thread_data[@"rmtMTLCommandBuffer"] = command_buffer;
-}
-id GetCommandBuffer()
-{
- NSMutableDictionary* thread_data = [[NSThread currentThread] threadDictionary];
- return thread_data[@"rmtMTLCommandBuffer"];
-}
-
-
-void _rmt_BindMetal(id command_buffer)
-{
- SetCommandBuffer(command_buffer);
-}
-
-
-void _rmt_UnbindMetal()
-{
- SetCommandBuffer(0);
-}
-
-
-// Needs to be in the same lib for this to work
-unsigned long long rmtMetal_usGetTime();
-
-
-static void SetTimestamp(void* data)
-{
- *((unsigned long long*)data) = rmtMetal_usGetTime();
-}
-
-
-void rmtMetal_MeasureCommandBuffer(unsigned long long* out_start, unsigned long long* out_end, unsigned int* out_ready)
-{
- id command_buffer = GetCommandBuffer();
- [command_buffer addScheduledHandler:^(id <MTLCommandBuffer>){ SetTimestamp(out_start); }];
- [command_buffer addCompletedHandler:^(id <MTLCommandBuffer>){ SetTimestamp(out_end); *out_ready = 1; }];
-}
diff --git a/3rdparty/bgfx/3rdparty/remotery/readme.md b/3rdparty/bgfx/3rdparty/remotery/readme.md
deleted file mode 100644
index 3dc26f04e6c..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/readme.md
+++ /dev/null
@@ -1,216 +0,0 @@
-Remotery
---------
-
-A realtime CPU/GPU profiler hosted in a single C file with a viewer that runs in a web browser.
-
-![screenshot](screenshot.png?raw=true)
-
-Supported features:
-
-* Lightweight instrumentation of multiple threads running on the CPU.
-* Web viewer that runs in Chrome, Firefox and Safari. Custom WebSockets server
- transmits sample data to the browser on a latent thread.
-* Profiles itself and shows how it's performing in the viewer.
-* Can optionally sample CUDA/D3D11/OpenGL GPU activity.
-* Console output for logging text.
-* Console input for sending commands to your game.
-
-
-Compiling
----------
-
-* Windows (MSVC) - add lib/Remotery.c and lib/Remotery.h to your program. Set include
- directories to add Remotery/lib path. The required library ws2_32.lib should be picked
- up through the use of the #pragma comment(lib, "ws2_32.lib") directive in Remotery.c.
-
-* Mac OS X (XCode) - simply add lib/Remotery.c, lib/Remotery.h and lib/Remotery.mm to your program.
-
-* Linux (GCC) - add the source in lib folder. Compilation of the code requires -pthreads for
- library linkage. For example to compile the same run: cc lib/Remotery.c sample/sample.c
- -I lib -pthread -lm
-
-You can define some extra macros to modify what features are compiled into Remotery:
-
- Macro Default Description
-
- RMT_ENABLED 1 Disable this to not include any bits of Remotery in your build
- RMT_USE_TINYCRT 0 Used by the Celtoys TinyCRT library (not released yet)
- RMT_USE_CUDA 0 Assuming CUDA headers/libs are setup, allow CUDA profiling
- RMT_USE_D3D11 0 Assuming Direct3D 11 headers/libs are setup, allow D3D11 GPU profiling
- RMT_USE_OPENGL 0 Allow OpenGL GPU profiling (dynamically links OpenGL libraries on available platforms)
- RMT_USE_METAL 0 Allow Metal profiling of command buffers
-
-
-Basic Use
----------
-
-See the sample directory for further examples. A quick example:
-
- int main()
- {
- // Create the main instance of Remotery.
- // You need only do this once per program.
- Remotery* rmt;
- rmt_CreateGlobalInstance(&rmt);
-
- // Explicit begin/end for C
- {
- rmt_BeginCPUSample(LogText, 0);
- rmt_LogText("Time me, please!");
- rmt_EndCPUSample();
- }
-
- // Scoped begin/end for C++
- {
- rmt_ScopedCPUSample(LogText, 0);
- rmt_LogText("Time me, too!");
- }
-
- // Destroy the main instance of Remotery.
- rmt_DestroyGlobalInstance(rmt);
- }
-
-
-Running the Viewer
-------------------
-
-Double-click or launch `vis/index.html` from the browser.
-
-
-Sampling CUDA GPU activity
---------------------------
-
-Remotery allows for profiling multiple threads of CUDA execution using different asynchronous streams
-that must all share the same context. After initialising both Remotery and CUDA you need to bind the
-two together using the call:
-
- rmtCUDABind bind;
- bind.context = m_Context;
- bind.CtxSetCurrent = &cuCtxSetCurrent;
- bind.CtxGetCurrent = &cuCtxGetCurrent;
- bind.EventCreate = &cuEventCreate;
- bind.EventDestroy = &cuEventDestroy;
- bind.EventRecord = &cuEventRecord;
- bind.EventQuery = &cuEventQuery;
- bind.EventElapsedTime = &cuEventElapsedTime;
- rmt_BindCUDA(&bind);
-
-Explicitly pointing to the CUDA interface allows Remotery to be included anywhere in your project without
-need for you to link with the required CUDA libraries. After the bind completes you can safely sample any
-CUDA activity:
-
- CUstream stream;
-
- // Explicit begin/end for C
- {
- rmt_BeginCUDASample(UnscopedSample, stream);
- // ... CUDA code ...
- rmt_EndCUDASample(stream);
- }
-
- // Scoped begin/end for C++
- {
- rmt_ScopedCUDASample(ScopedSample, stream);
- // ... CUDA code ...
- }
-
-Remotery supports only one context for all threads and will use cuCtxGetCurrent and cuCtxSetCurrent to
-ensure the current thread has the context you specify in rmtCUDABind.context.
-
-
-Sampling Direct3D 11 GPU activity
----------------------------------
-
-Remotery allows sampling of GPU activity on your main D3D11 context. After initialising Remotery, you need
-to bind it to D3D11 with a single call from the thread that owns the device context:
-
- // Parameters are ID3D11Device* and ID3D11DeviceContext*
- rmt_BindD3D11(d3d11_device, d3d11_context);
-
-Sampling is then a simple case of:
-
- // Explicit begin/end for C
- {
- rmt_BeginD3D11Sample(UnscopedSample);
- // ... D3D code ...
- rmt_EndD3D11Sample();
- }
-
- // Scoped begin/end for C++
- {
- rmt_ScopedD3D11Sample(ScopedSample);
- // ... D3D code ...
- }
-
-Support for multiple contexts can be added pretty easily if there is demand for the feature. When you shutdown
-your D3D11 device and context, ensure you notify Remotery before shutting down Remotery itself:
-
- rmt_UnbindD3D11();
-
-
-Sampling OpenGL GPU activity
-----------------------------
-
-Remotery allows sampling of GPU activity on your main OpenGL context. After initialising Remotery, you need
-to bind it to OpenGL with the single call:
-
- rmt_BindOpenGL();
-
-Sampling is then a simple case of:
-
- // Explicit begin/end for C
- {
- rmt_BeginOpenGLSample(UnscopedSample);
- // ... OpenGL code ...
- rmt_EndOpenGLSample();
- }
-
- // Scoped begin/end for C++
- {
- rmt_ScopedOpenGLSample(ScopedSample);
- // ... OpenGL code ...
- }
-
-Support for multiple contexts can be added pretty easily if there is demand for the feature. When you shutdown
-your OpenGL device and context, ensure you notify Remotery before shutting down Remotery itself:
-
- rmt_UnbindOpenGL();
-
-
-Sampling Metal GPU activity
----------------------------
-
-Remotery can sample Metal command buffers issued to the GPU from multiple threads. As the Metal API does not
-support finer grained profiling, samples will return only the timing of the bound command buffer, irrespective
-of how many you issue. As such, make sure you bind and sample the command buffer for each call site:
-
- rmt_BindMetal(mtl_command_buffer);
- rmt_ScopedMetalSample(command_buffer_name);
-
-The C API supports begin/end also:
-
- rmt_BindMetal(mtl_command_buffer);
- rmt_BeginMetalSample(command_buffer_name);
- ...
- rmt_EndMetalSample();
-
-
-Applying Configuration Settings
--------------------------------
-
-Before creating your Remotery instance, you can configure its behaviour by retrieving its settings object:
-
- rmtSettings* settings = rmt_Settings();
-
-Some important settings are:
-
- // Redirect any Remotery allocations to your own malloc/free, with an additional context pointer
- // that gets passed to your callbacks.
- settings->malloc;
- settings->free;
- settings->mm_context;
-
- // Specify an input handler that receives text input from the Remotery console, with an additional
- // context pointer that gets passed to your callback.
- settings->input_handler;
- settings->input_handler_context;
diff --git a/3rdparty/bgfx/3rdparty/remotery/sample/sample.c b/3rdparty/bgfx/3rdparty/remotery/sample/sample.c
deleted file mode 100644
index f579e1c1f99..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/sample/sample.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <stdlib.h>
-#include <math.h>
-#include <signal.h>
-#include <stdio.h>
-#include "Remotery.h"
-
-double delay() {
- int i, end;
- double j = 0;
-
- rmt_BeginCPUSample(delay, 0);
- for( i = 0, end = rand()/100; i < end; ++i ) {
- j += sin(i);
- }
- rmt_EndCPUSample();
- return j;
-}
-
-int sig = 0;
-
-/// Allow to close cleanly with ctrl + c
-void sigintHandler(int sig_num) {
- sig = sig_num;
- printf("Interrupted\n");
-}
-
-int main( ) {
- signal(SIGINT, sigintHandler);
-
- Remotery *rmt;
-
- if( RMT_ERROR_NONE != rmt_CreateGlobalInstance(&rmt) ) {
- return -1;
- }
-
- while (sig == 0) {
- rmt_LogText("start profiling");
- delay();
- rmt_LogText("end profiling");
- }
-
- rmt_DestroyGlobalInstance(rmt);
- printf("Cleaned up and quit\n");
- return 0;
-}
diff --git a/3rdparty/bgfx/3rdparty/remotery/screenshot.png b/3rdparty/bgfx/3rdparty/remotery/screenshot.png
deleted file mode 100644
index 62e044e158f..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/screenshot.png
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/Console.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/Console.js
deleted file mode 100644
index cd25dc7f708..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/Console.js
+++ /dev/null
@@ -1,194 +0,0 @@
-
-Console = (function()
-{
- var BORDER = 10;
- var HEIGHT = 200;
-
-
- function Console(wm, server)
- {
- // Create the window and its controls
- this.Window = wm.AddWindow("Console", 10, 10, 100, 100);
- this.PageContainer = this.Window.AddControlNew(new WM.Container(10, 10, 400, 160));
- DOM.Node.AddClass(this.PageContainer.Node, "ConsoleText");
- this.AppContainer = this.Window.AddControlNew(new WM.Container(10, 10, 400, 160));
- DOM.Node.AddClass(this.AppContainer.Node, "ConsoleText");
- this.UserInput = this.Window.AddControlNew(new WM.EditBox(10, 5, 400, 30, "Input", ""));
- this.UserInput.SetChangeHandler(Bind(ProcessInput, this));
- this.Window.ShowNoAnim();
-
- // This accumulates log text as fast as is required
- this.PageTextBuffer = "";
- this.LastPageTextBufferLen = 0;
- this.AppTextBuffer = "";
- this.LastAppTextBufferLen = 0;
-
- // Setup command history control
- this.CommandHistory = LocalStore.Get("App", "Global", "CommandHistory", [ ]);
- this.CommandIndex = 0;
- this.MaxNbCommands = 200;
- DOM.Event.AddHandler(this.UserInput.EditNode, "keydown", Bind(OnKeyPress, this));
- DOM.Event.AddHandler(this.UserInput.EditNode, "focus", Bind(OnFocus, this));
-
- // At a much lower frequency this will update the console window
- window.setInterval(Bind(UpdateHTML, this), 500);
-
- // Setup log requests from the server
- this.Server = server;
- server.SetConsole(this);
- server.AddMessageHandler("LOGM", Bind(OnLog, this));
- }
-
-
- Console.prototype.Log = function(text)
- {
- this.PageTextBuffer = LogText(this.PageTextBuffer, text);
- }
-
-
- Console.prototype.WindowResized = function(width, height)
- {
- // Place window
- this.Window.SetPosition(BORDER, height - BORDER - 200);
- this.Window.SetSize(width - 2 * BORDER, HEIGHT);
-
- // Place controls
- var parent_size = this.Window.Size;
- var mid_w = parent_size[0] / 3;
- this.UserInput.SetPosition(BORDER, parent_size[1] - 2 * BORDER - 30);
- this.UserInput.SetSize(parent_size[0] - 100, 18);
- var output_height = this.UserInput.Position[1] - 2 * BORDER;
- this.PageContainer.SetPosition(BORDER, BORDER);
- this.PageContainer.SetSize(mid_w - 2 * BORDER, output_height);
- this.AppContainer.SetPosition(mid_w, BORDER);
- this.AppContainer.SetSize(parent_size[0] - mid_w - BORDER, output_height);
- }
-
-
- function OnLog(self, socket, data_view)
- {
- var data_view_reader = new DataViewReader(data_view, 4);
- var text = data_view_reader.GetString();
- self.AppTextBuffer = LogText(self.AppTextBuffer, text);
- }
-
-
- function LogText(existing_text, new_text)
- {
- // Filter the text a little to make it safer
- if (new_text == null)
- new_text = "NULL";
-
- // Find and convert any HTML entities, ensuring the browser doesn't parse any embedded HTML code
- // This also allows the log to contain arbitrary C++ code (e.g. assert comparison operators)
- new_text = Convert.string_to_html_entities(new_text);
-
- // Prefix date and end with new line
- var d = new Date();
- new_text = "[" + d.toLocaleTimeString() + "] " + new_text + "<br>";
-
- // Append to local text buffer and ensure clip the oldest text to ensure a max size
- existing_text = existing_text + new_text;
- var max_len = 10 * 1024;
- var len = existing_text.length;
- if (len > max_len)
- existing_text = existing_text.substr(len - max_len, max_len);
-
- return existing_text;
- }
-
-
- function UpdateHTML(self)
- {
- // Reset the current text buffer as html
-
- if (self.LastPageTextBufferLen != self.PageTextBuffer.length)
- {
- var page_node = self.PageContainer.Node;
- page_node.innerHTML = self.PageTextBuffer;
- page_node.scrollTop = page_node.scrollHeight;
- self.LastPageTextBufferLen = self.PageTextBuffer.length;
- }
-
- if (self.LastAppTextBufferLen != self.AppTextBuffer.length)
- {
- var app_node = self.AppContainer.Node;
- app_node.innerHTML = self.AppTextBuffer;
- app_node.scrollTop = app_node.scrollHeight;
- self.LastAppTextBufferLen = self.AppTextBuffer.length;
- }
- }
-
-
- function ProcessInput(self, node)
- {
- // Send the message exactly
- var msg = node.value;
- self.Server.Send("CONI" + msg);
-
- // Emit to console and clear
- self.Log("> " + msg);
- self.UserInput.SetValue("");
-
- // Keep track of recently issued commands, with an upper bound
- self.CommandHistory.push(msg);
- var extra_commands = self.CommandHistory.length - self.MaxNbCommands;
- if (extra_commands > 0)
- self.CommandHistory.splice(0, extra_commands);
-
- // Set command history index to the most recent command
- self.CommandIndex = self.CommandHistory.length;
-
- // Backup to local store
- LocalStore.Set("App", "Global", "CommandHistory", self.CommandHistory);
-
- // Keep focus with the edit box
- return true;
- }
-
-
- function OnKeyPress(self, evt)
- {
- evt = DOM.Event.Get(evt);
-
- if (evt.keyCode == Keyboard.Codes.UP)
- {
- if (self.CommandHistory.length > 0)
- {
- // Cycle backwards through the command history
- self.CommandIndex--;
- if (self.CommandIndex < 0)
- self.CommandIndex = self.CommandHistory.length - 1;
- var command = self.CommandHistory[self.CommandIndex];
- self.UserInput.SetValue(command);
- }
-
- // Stops default behaviour of moving cursor to the beginning
- DOM.Event.StopDefaultAction(evt);
- }
-
- else if (evt.keyCode == Keyboard.Codes.DOWN)
- {
- if (self.CommandHistory.length > 0)
- {
- // Cycle fowards through the command history
- self.CommandIndex = (self.CommandIndex + 1) % self.CommandHistory.length;
- var command = self.CommandHistory[self.CommandIndex];
- self.UserInput.SetValue(command);
- }
-
- // Stops default behaviour of moving cursor to the end
- DOM.Event.StopDefaultAction(evt);
- }
- }
-
-
- function OnFocus(self)
- {
- // Reset command index on focus
- self.CommandIndex = self.CommandHistory.length;
- }
-
-
- return Console;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/DataViewReader.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/DataViewReader.js
deleted file mode 100644
index ba3fc8e0da0..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/DataViewReader.js
+++ /dev/null
@@ -1,47 +0,0 @@
-
-//
-// Simple wrapper around DataView that auto-advances the read offset and provides
-// a few common data type conversions specific to this app
-//
-DataViewReader = (function ()
-{
- function DataViewReader(data_view, offset)
- {
- this.DataView = data_view;
- this.Offset = offset;
- }
-
- DataViewReader.prototype.GetUInt32 = function ()
- {
- var v = this.DataView.getUint32(this.Offset, true);
- this.Offset += 4;
- return v;
- }
-
- DataViewReader.prototype.GetUInt64 = function ()
- {
- var v = this.DataView.getFloat64(this.Offset, true);
- this.Offset += 8;
- return v;
- }
-
- DataViewReader.prototype.GetStringOfLength = function (string_length)
- {
- var string = "";
- for (var i = 0; i < string_length; i++)
- {
- string += String.fromCharCode(this.DataView.getInt8(this.Offset));
- this.Offset++;
- }
-
- return string;
- }
-
- DataViewReader.prototype.GetString = function ()
- {
- var string_length = this.GetUInt32();
- return this.GetStringOfLength(string_length);
- }
-
- return DataViewReader;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/PixelTimeRange.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/PixelTimeRange.js
deleted file mode 100644
index 14a06683b3b..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/PixelTimeRange.js
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-PixelTimeRange = (function()
-{
- function PixelTimeRange(start_us, span_us, span_px)
- {
- this.Span_px = span_px;
- this.Set(start_us, span_us);
- }
-
-
- PixelTimeRange.prototype.Set = function(start_us, span_us)
- {
- this.Start_us = start_us;
- this.Span_us = span_us;
- this.End_us = this.Start_us + span_us;
- this.usPerPixel = this.Span_px / this.Span_us;
- }
-
-
- PixelTimeRange.prototype.SetStart = function(start_us)
- {
- this.Start_us = start_us;
- this.End_us = start_us + this.Span_us;
- }
-
-
- PixelTimeRange.prototype.SetEnd = function(end_us)
- {
- this.End_us = end_us;
- this.Start_us = end_us - this.Span_us;
- }
-
-
- PixelTimeRange.prototype.SetPixelSpan = function(span_px)
- {
- this.Span_px = span_px;
- this.usPerPixel = this.Span_px / this.Span_us;
- }
-
-
- PixelTimeRange.prototype.PixelOffset = function(time_us)
- {
- return Math.floor((time_us - this.Start_us) * this.usPerPixel);
- }
-
-
- PixelTimeRange.prototype.PixelSize = function(time_us)
- {
- return Math.floor(time_us * this.usPerPixel);
- }
-
-
- PixelTimeRange.prototype.Clone = function()
- {
- return new PixelTimeRange(this.Start_us, this.Span_us, this.Span_px);
- }
-
-
- return PixelTimeRange;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/Remotery.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/Remotery.js
deleted file mode 100644
index ca1d4f7984c..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/Remotery.js
+++ /dev/null
@@ -1,330 +0,0 @@
-
-//
-// TODO: Window resizing needs finer-grain control
-// TODO: Take into account where user has moved the windows
-// TODO: Controls need automatic resizing within their parent windows
-//
-
-
-Settings = (function()
-{
- function Settings()
- {
- this.IsPaused = false;
- }
-
- return Settings;
-
-})();
-
-
-Remotery = (function()
-{
- // crack the url and get the parameter we want
- var getUrlParameter = function getUrlParameter( search_param)
- {
- var page_url = decodeURIComponent( window.location.search.substring(1) ),
- url_vars = page_url.split('&'),
- param_name,
- i;
-
- for (i = 0; i < url_vars.length; i++)
- {
- param_name = url_vars[i].split('=');
-
- if (param_name[0] === search_param)
- {
- return param_name[1] === undefined ? true : param_name[1];
- }
- }
- };
-
- function Remotery()
- {
- this.WindowManager = new WM.WindowManager();
- this.Settings = new Settings();
-
- // "addr" param is ip:port and will override the local store version if passed in the URL
- var addr = getUrlParameter( "addr" );
- if ( addr != null )
- this.ConnectionAddress = "ws://" + addr + "/rmt";
- else
- this.ConnectionAddress = LocalStore.Get("App", "Global", "ConnectionAddress", "ws://127.0.0.1:17815/rmt");
-
- this.Server = new WebSocketConnection();
- this.Server.AddConnectHandler(Bind(OnConnect, this));
-
- // Create the console up front as everything reports to it
- this.Console = new Console(this.WindowManager, this.Server);
-
- // Create required windows
- this.TitleWindow = new TitleWindow(this.WindowManager, this.Settings, this.Server, this.ConnectionAddress);
- this.TitleWindow.SetConnectionAddressChanged(Bind(OnAddressChanged, this));
- this.TimelineWindow = new TimelineWindow(this.WindowManager, this.Settings, this.Server, Bind(OnTimelineCheck, this));
- this.TimelineWindow.SetOnHover(Bind(OnSampleHover, this));
- this.TimelineWindow.SetOnSelected(Bind(OnSampleSelected, this));
-
- this.NbSampleWindows = 0;
- this.SampleWindows = { };
- this.FrameHistory = { };
- this.SelectedFrames = { };
- this.NameMap = { };
-
- this.Server.AddMessageHandler("SMPL", Bind(OnSamples, this));
- this.Server.AddMessageHandler("SSMP", Bind(OnSampleName, this));
-
- // Kick-off the auto-connect loop
- AutoConnect(this);
-
- // Hook up resize event handler
- DOM.Event.AddHandler(window, "resize", Bind(OnResizeWindow, this));
- OnResizeWindow(this);
-
- // Hook up browser-native canvas refresh
- this.DisplayFrame = 0;
- this.LastKnownPause = this.Settings.IsPaused;
- var self = this;
- (function display_loop()
- {
- window.requestAnimationFrame(display_loop);
- DrawTimeline(self);
- })();
- }
-
-
- function AutoConnect(self)
- {
- // Only attempt to connect if there isn't already a connection or an attempt to connect
- if (!self.Server.Connected())
- self.Server.Connect(self.ConnectionAddress);
-
- // Always schedule another check
- window.setTimeout(Bind(AutoConnect, self), 2000);
- }
-
-
- function OnConnect(self)
- {
- // Connection address has been validated
- LocalStore.Set("App", "Global", "ConnectionAddress", self.ConnectionAddress);
- }
-
-
- function OnAddressChanged(self, node)
- {
- // Update and disconnect, relying on auto-connect to reconnect
- self.ConnectionAddress = node.value;
- self.Server.Disconnect();
-
- // Give input focus away
- return false;
- }
-
-
- function DrawTimeline(self)
- {
- // Has pause state changed?
- if (self.Settings.IsPaused != self.LastKnownPaused)
- {
- // When switching TO paused, draw one last frame to ensure the sample text gets drawn
- self.LastKnownPaused = self.Settings.IsPaused;
- self.TimelineWindow.DrawAllRows();
- return;
- }
-
- // Don't waste time drawing the timeline when paused
- if (self.Settings.IsPaused)
- return;
-
- // requestAnimationFrame can run up to 60hz which is way too much for drawing the timeline
- // Assume it's running at 60hz and skip frames to achieve 10hz instead
- // Doing this instead of using setTimeout because it's better for browser rendering (or; will be once WebGL is in use)
- // TODO: Expose as config variable because high refresh rate is great when using a separate viewiing machine
- if ((self.DisplayFrame % 10) == 0)
- self.TimelineWindow.DrawAllRows();
-
- self.DisplayFrame++;
- }
-
-
- function DecodeSample(self, data_view_reader)
- {
- var sample = {};
-
- // Get name hash and lookup name it map
- sample.name_hash = data_view_reader.GetUInt32();
- sample.name = self.NameMap[sample.name_hash];
-
- // If the name doesn't exist in the map yet, request it from the server
- if (sample.name == undefined)
- {
- // Meanwhile, store the hash as the name
- sample.name = sample.name_hash;
- self.Server.Send("GSMP" + sample.name);
- }
-
- // Get the rest of the sample data
- sample.id = data_view_reader.GetUInt32();
- sample.colour = data_view_reader.GetStringOfLength(7);
- sample.us_start = data_view_reader.GetUInt64();
- sample.us_length = data_view_reader.GetUInt64();
-
- // Recurse into children
- sample.children = [];
- DecodeSampleArray(self, data_view_reader, sample.children);
-
- return sample;
- }
-
-
- function DecodeSampleArray(self, data_view_reader, samples)
- {
- var nb_samples = data_view_reader.GetUInt32();
- for (var i = 0; i < nb_samples; i++)
- {
- var sample = DecodeSample(self, data_view_reader);
- samples.push(sample)
- }
- }
-
-
- function DecodeSamples(self, data_view_reader)
- {
- // Message-specific header
- var message = { };
- message.thread_name = data_view_reader.GetString();
- message.nb_samples = data_view_reader.GetUInt32();
- message.sample_digest = data_view_reader.GetUInt32();
-
- // Read samples
- message.samples = [];
- message.samples.push(DecodeSample(self, data_view_reader));
-
- return message;
- }
-
-
- function OnSamples(self, socket, data_view)
- {
- // Discard any new samples while paused
- if (self.Settings.IsPaused)
- return;
-
- // Binary decode incoming sample data
- var message = DecodeSamples(self, new DataViewReader(data_view, 8));
- var name = message.thread_name;
-
- // Add to frame history for this thread
- var thread_frame = new ThreadFrame(message);
- if (!(name in self.FrameHistory))
- self.FrameHistory[name] = [ ];
- var frame_history = self.FrameHistory[name];
- frame_history.push(thread_frame);
-
- // Discard old frames to keep memory-use constant
- var max_nb_frames = 10000;
- var extra_frames = frame_history.length - max_nb_frames;
- if (extra_frames > 0)
- frame_history.splice(0, extra_frames);
-
- // Create sample windows on-demand
- if (!(name in self.SampleWindows))
- {
- self.SampleWindows[name] = new SampleWindow(self.WindowManager, name, self.NbSampleWindows);
- self.SampleWindows[name].WindowResized(self.TimelineWindow.Window, self.Console.Window);
- self.NbSampleWindows++;
- MoveSampleWindows(this);
- }
-
- // Set on the window and timeline
- self.SampleWindows[name].OnSamples(message.nb_samples, message.sample_digest, message.samples);
- self.TimelineWindow.OnSamples(name, frame_history);
- }
-
-
- function OnSampleName(self, socket, data_view)
- {
- // Add any names sent by the server to the local map
- var data_view_reader = new DataViewReader(data_view, 4);
- var name_hash = data_view_reader.GetUInt32();
- var name = data_view_reader.GetString();
- self.NameMap[name_hash] = name;
- }
-
-
- function OnTimelineCheck(self, name, evt)
- {
- // Show/hide the equivalent sample window and move all the others to occupy any left-over space
- var target = DOM.Event.GetNode(evt);
- self.SampleWindows[name].SetVisible(target.checked);
- MoveSampleWindows(self);
- }
-
-
- function MoveSampleWindows(self)
- {
- // Stack all windows next to each other
- var xpos = 0;
- for (var i in self.SampleWindows)
- {
- var sample_window = self.SampleWindows[i];
- if (sample_window.Visible)
- sample_window.SetXPos(xpos++, self.TimelineWindow.Window, self.Console.Window);
- }
- }
-
-
- function OnSampleHover(self, thread_name, hover)
- {
- // Hover only changes sample window contents when paused
- var sample_window = self.SampleWindows[thread_name];
- if (sample_window && self.Settings.IsPaused)
- {
- if (hover == null)
- {
- // When there's no hover, go back to the selected frame
- if (self.SelectedFrames[thread_name])
- {
- var frame = self.SelectedFrames[thread_name];
- sample_window.OnSamples(frame.NbSamples, frame.SampleDigest, frame.Samples);
- }
- }
-
- else
- {
- // Populate with sample under hover
- var frame = hover[0];
- sample_window.OnSamples(frame.NbSamples, frame.SampleDigest, frame.Samples);
- }
- }
- }
-
-
- function OnSampleSelected(self, thread_name, select)
- {
- // Lookup sample window set the frame samples on it
- if (select && thread_name in self.SampleWindows)
- {
- var sample_window = self.SampleWindows[thread_name];
- var frame = select[0];
- self.SelectedFrames[thread_name] = frame;
- sample_window.OnSamples(frame.NbSamples, frame.SampleDigest, frame.Samples);
- }
- }
-
-
- function OnResizeWindow(self)
- {
- // Resize windows
- var w = window.innerWidth;
- var h = window.innerHeight;
- self.Console.WindowResized(w, h);
- self.TitleWindow.WindowResized(w, h);
- self.TimelineWindow.WindowResized(w, h, self.TitleWindow.Window);
- for (var i in self.SampleWindows)
- self.SampleWindows[i].WindowResized(self.TimelineWindow.Window, self.Console.Window);
- }
-
-
- return Remotery;
-})(); \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/SampleWindow.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/SampleWindow.js
deleted file mode 100644
index 74f769eff8a..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/SampleWindow.js
+++ /dev/null
@@ -1,178 +0,0 @@
-
-SampleWindow = (function()
-{
- function SampleWindow(wm, name, offset)
- {
- // Sample digest for checking if grid needs to be repopulated
- this.NbSamples = 0;
- this.SampleDigest = null;
-
- this.XPos = 10 + offset * 410;
- this.Window = wm.AddWindow(name, 100, 100, 100, 100);
- this.Window.Show();
- this.Visible = true;
-
- // Create a grid that's indexed by the unique sample ID
- this.Grid = this.Window.AddControlNew(new WM.Grid(0, 0, 380, 400));
- this.RootRow = this.Grid.Rows.Add({ "Name": "Samples" }, "GridGroup", { "Name": "GridGroup" });
- this.RootRow.Rows.AddIndex("_ID");
- }
-
-
- SampleWindow.prototype.SetXPos = function(xpos, top_window, bottom_window)
- {
- Anim.Animate(
- Bind(AnimatedMove, this, top_window, bottom_window),
- this.XPos, 10 + xpos * 410, 0.25);
- }
-
-
- function AnimatedMove(self, top_window, bottom_window, val)
- {
- self.XPos = val;
- self.WindowResized(top_window, bottom_window);
- }
-
-
- SampleWindow.prototype.SetVisible = function(visible)
- {
- if (visible != this.Visible)
- {
- if (visible == true)
- this.Window.Show();
- else
- this.Window.Hide();
-
- this.Visible = visible;
- }
- }
-
-
- SampleWindow.prototype.WindowResized = function(top_window, bottom_window)
- {
- var top = top_window.Position[1] + top_window.Size[1] + 10;
- this.Window.SetPosition(this.XPos, top_window.Position[1] + top_window.Size[1] + 10);
- this.Window.SetSize(400, bottom_window.Position[1] - 10 - top);
- }
-
-
- SampleWindow.prototype.OnSamples = function(nb_samples, sample_digest, samples)
- {
- if (!this.Visible)
- return;
-
- // Recreate all the HTML if the number of samples gets bigger
- if (nb_samples > this.NbSamples)
- {
- GrowGrid(this.RootRow, nb_samples);
- this.NbSamples = nb_samples;
- }
-
- // If the content of the samples changes from previous update, update them all
- if (this.SampleDigest != sample_digest)
- {
- this.RootRow.Rows.ClearIndex("_ID");
- var index = UpdateAllSampleFields(this.RootRow, samples, 0, "");
- this.SampleDigest = sample_digest;
-
- // Clear out any left-over rows
- for (var i = index; i < this.RootRow.Rows.Rows.length; i++)
- {
- var row = this.RootRow.Rows.Rows[i];
- DOM.Node.Hide(row.Node);
- }
- }
-
- else if (this.Visible)
- {
- // Otherwise just update the existing sample fields
- UpdateChangedSampleFields(this.RootRow, samples, "");
- }
- }
-
-
- function GrowGrid(parent_row, nb_samples)
- {
- parent_row.Rows.Clear();
-
- for (var i = 0; i < nb_samples; i++)
- {
- var cell_data =
- {
- _ID: i,
- Name: "",
- Control: new WM.Label()
- };
-
- var cell_classes =
- {
- Name: "SampleNameCell",
- };
-
- parent_row.Rows.Add(cell_data, null, cell_classes);
- }
- }
-
-
- function UpdateAllSampleFields(parent_row, samples, index, indent)
- {
- for (var i in samples)
- {
- var sample = samples[i];
-
- // Match row allocation in GrowGrid
- var row = parent_row.Rows.Rows[index++];
-
- // Sample row may have been hidden previously
- DOM.Node.Show(row.Node);
-
- // Assign unique ID so that the common fast path of updating sample times only
- // can lookup target samples in the grid
- row.CellData._ID = sample.id;
- parent_row.Rows.AddRowToIndex("_ID", sample.id, row);
-
- // Record sample name for later comparison
- row.CellData.Name = sample.name;
-
- // Set sample name and colour
- var name_node = row.CellNodes["Name"];
- name_node.innerHTML = indent + sample.name;
- DOM.Node.SetColour(name_node, sample.colour);
-
- row.CellData.Control.SetText(sample.us_length);
-
- index = UpdateAllSampleFields(parent_row, sample.children, index, indent + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
- }
-
- return index;
- }
-
-
- function UpdateChangedSampleFields(parent_row, samples, indent)
- {
- for (var i in samples)
- {
- var sample = samples[i];
-
- var row = parent_row.Rows.GetBy("_ID", sample.id);
- if (row)
- {
- row.CellData.Control.SetText(sample.us_length);
-
- // Sample name will change when it switches from hash ID to network-retrieved
- // name. Quickly check that before re-applying the HTML for the name.
- if (row.CellData.Name != sample.name)
- {
- var name_node = row.CellNodes["Name"];
- row.CellData.Name = sample.name;
- name_node.innerHTML = indent + sample.name;
- }
- }
-
- UpdateChangedSampleFields(parent_row, sample.children, indent + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
- }
- }
-
-
- return SampleWindow;
-})(); \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/ThreadFrame.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/ThreadFrame.js
deleted file mode 100644
index a631590c666..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/ThreadFrame.js
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-ThreadFrame = (function()
-{
- function ThreadFrame(message)
- {
- // Persist the required message data
- this.NbSamples = message.nb_samples;
- this.SampleDigest = message.sample_digest;
- this.Samples = message.samples;
-
- // Calculate the frame start/end times
- this.StartTime_us = 0;
- this.EndTime_us = 0;
- var nb_root_samples = this.Samples.length;
- if (nb_root_samples > 0)
- {
- var last_sample = this.Samples[nb_root_samples - 1];
- this.StartTime_us = this.Samples[0].us_start;
- this.EndTime_us = last_sample.us_start + last_sample.us_length;
- }
-
- this.Length_us = this.EndTime_us - this.StartTime_us;
- }
-
-
- return ThreadFrame;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineRow.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineRow.js
deleted file mode 100644
index 9645f25a6b5..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineRow.js
+++ /dev/null
@@ -1,376 +0,0 @@
-
-
-TimelineRow = (function()
-{
- var row_template = function(){/*
- <div class='TimelineRow'>
- <div class='TimelineRowCheck TimelineBox'>
- <input class='TimelineRowCheckbox' type='checkbox' />
- </div>
- <div class='TimelineRowExpand TimelineBox NoSelect'>
- <div class='TimelineRowExpandButton'>+</div>
- </div>
- <div class='TimelineRowExpand TimelineBox NoSelect'>
- <div class='TimelineRowExpandButton'>-</div>
- </div>
- <div class='TimelineRowLabel TimelineBox'></div>
- <canvas class='TimelineRowCanvas'></canvas>
- <div style="clear:left"></div>
- </div>
-*/}.toString().split(/\n/).slice(1, -1).join("\n");
-
-
- var CANVAS_Y_OFFSET = 0;
- var CANVAS_BORDER = 1;
- var SAMPLE_HEIGHT = 16;
- var SAMPLE_BORDER = 1;
- var SAMPLE_Y_SPACING = SAMPLE_HEIGHT + SAMPLE_BORDER * 2;
- var SAMPLE_Y_OFFSET = CANVAS_Y_OFFSET + CANVAS_BORDER + 1;
-
-
- function TimelineRow(name, width, parent_node, frame_history, check_handler)
- {
- this.Name = name;
-
- // Create the row HTML and add to the parent
- this.ContainerNode = DOM.Node.CreateHTML(row_template);
- this.Node = DOM.Node.FindWithClass(this.ContainerNode, "TimelineRowData");
- this.LabelNode = DOM.Node.FindWithClass(this.ContainerNode, "TimelineRowLabel");
- this.LabelNode.innerHTML = name;
- this.CheckboxNode = DOM.Node.FindWithClass(this.ContainerNode, "TimelineRowCheckbox");
- var expand_node_0 = DOM.Node.FindWithClass(this.ContainerNode, "TimelineRowExpand", 0);
- var expand_node_1 = DOM.Node.FindWithClass(this.ContainerNode, "TimelineRowExpand", 1);
- this.IncNode = DOM.Node.FindWithClass(expand_node_0, "TimelineRowExpandButton");
- this.DecNode = DOM.Node.FindWithClass(expand_node_1, "TimelineRowExpandButton");
- this.CanvasNode = DOM.Node.FindWithClass(this.ContainerNode, "TimelineRowCanvas");
- parent_node.appendChild(this.ContainerNode);
-
- // All sample view windows visible by default
- this.CheckboxNode.checked = true;
- DOM.Event.AddHandler(this.CheckboxNode, "change", function(evt) { check_handler(name, evt); });
-
- // Manually hook-up events to simulate div:active
- // I can't get the equivalent CSS to work in Firefox, so...
- DOM.Event.AddHandler(this.IncNode, "mousedown", ExpandButtonDown);
- DOM.Event.AddHandler(this.IncNode, "mouseup", ExpandButtonUp);
- DOM.Event.AddHandler(this.IncNode, "mouseleave", ExpandButtonUp);
- DOM.Event.AddHandler(this.DecNode, "mousedown", ExpandButtonDown);
- DOM.Event.AddHandler(this.DecNode, "mouseup", ExpandButtonUp);
- DOM.Event.AddHandler(this.DecNode, "mouseleave", ExpandButtonUp);
-
- // Pressing +/i increases/decreases depth
- DOM.Event.AddHandler(this.IncNode, "click", Bind(IncDepth, this));
- DOM.Event.AddHandler(this.DecNode, "click", Bind(DecDepth, this));
-
- // Setup the canvas
- this.Depth = 1;
- this.Ctx = this.CanvasNode.getContext("2d");
- this.SetSize(width);
- this.Clear();
-
- // Frame index to start at when looking for first visible sample
- this.StartFrameIndex = 0;
-
- this.FrameHistory = frame_history;
- this.VisibleFrames = [ ];
- this.VisibleTimeRange = null;
-
- // Sample the mouse is currently hovering over
- this.HoverSample = null;
- this.HoverSampleDepth = 0;
-
- // Currently selected sample
- this.SelectedSample = null;
- this.SelectedSampleDepth = 0;
- }
-
-
- TimelineRow.prototype.SetSize = function(width)
- {
- // Must ALWAYS set the width/height properties together. Setting one on its own has weird side-effects.
- this.CanvasNode.width = width;
- this.CanvasNode.height = CANVAS_BORDER + SAMPLE_BORDER + SAMPLE_Y_SPACING * this.Depth;
- this.Draw(true);
- }
-
-
- TimelineRow.prototype.Clear = function()
- {
- // Fill box that shows the boundary between thread rows
- this.Ctx.fillStyle = "#666"
- var b = CANVAS_BORDER;
- this.Ctx.fillRect(b, b, this.CanvasNode.width - b * 2, this.CanvasNode.height - b * 2);
- }
-
-
- TimelineRow.prototype.SetVisibleFrames = function(time_range)
- {
- // Clear previous visible list
- this.VisibleFrames = [ ];
- if (this.FrameHistory.length == 0)
- return;
-
- // Store a copy of the visible time range rather than referencing it
- // This prevents external modifications to the time range from affecting rendering/selection
- time_range = time_range.Clone();
- this.VisibleTimeRange = time_range;
-
- // The frame history can be reset outside this class
- // This also catches the overflow to the end of the frame list below when a thread stops sending samples
- var max_frame = Math.max(this.FrameHistory.length - 1, 0);
- var start_frame_index = Math.min(this.StartFrameIndex, max_frame);
-
- // First do a back-track in case the time range moves negatively
- while (start_frame_index > 0)
- {
- var frame = this.FrameHistory[start_frame_index];
- if (time_range.Start_us > frame.StartTime_us)
- break;
- start_frame_index--;
- }
-
- // Then search from this point for the first visible frame
- while (start_frame_index < this.FrameHistory.length)
- {
- var frame = this.FrameHistory[start_frame_index];
- if (frame.EndTime_us > time_range.Start_us)
- break;
- start_frame_index++;
- }
-
- // Gather all frames up to the end point
- this.StartFrameIndex = start_frame_index;
- for (var i = start_frame_index; i < this.FrameHistory.length; i++)
- {
- var frame = this.FrameHistory[i];
- if (frame.StartTime_us > time_range.End_us)
- break;
- this.VisibleFrames.push(frame);
- }
- }
-
-
- TimelineRow.prototype.Draw = function(draw_text)
- {
- this.Clear();
-
- // Draw all root samples in the visible frame set
- for (var i in this.VisibleFrames)
- {
- var frame = this.VisibleFrames[i];
- DrawSamples(this, frame.Samples, 1, draw_text);
- }
- }
-
-
- function DrawSamples(self, samples, depth, draw_text)
- {
- for (var i in samples)
- {
- var sample = samples[i];
- DrawSample(self, sample, depth, draw_text);
-
- if (depth < self.Depth && sample.children != null)
- DrawSamples(self, sample.children, depth + 1, draw_text);
- }
- }
-
-
- TimelineRow.prototype.UpdateHoverSample = function(mouse_state, x_offset)
- {
- var hover = GetSampleAtPosition(this, mouse_state, x_offset);
- if (hover)
- this.SetHoverSample(hover[1], hover[2]);
- return hover;
- }
-
-
- TimelineRow.prototype.UpdateSelectedSample = function(mouse_state, x_offset)
- {
- var select = GetSampleAtPosition(this, mouse_state, x_offset);
- if (select)
- this.SetSelectedSample(select[1], select[2]);
- return select;
- }
-
-
- TimelineRow.prototype.SetHoverSample = function(sample, sample_depth)
- {
- if (sample != this.HoverSample)
- {
- // Discard old highlight
- // TODO: When zoomed right out, tiny samples are anti-aliased and this becomes inaccurate
- var old_sample = this.HoverSample;
- var old_sample_depth = this.HoverSampleDepth;
- this.HoverSample = null;
- this.HoverSampleDepth = 0;
- DrawSample(this, old_sample, old_sample_depth, true);
-
- // Add new highlight
- this.HoverSample = sample;
- this.HoverSampleDepth = sample_depth;
- DrawSample(this, sample, sample_depth, true);
- }
- }
-
-
- TimelineRow.prototype.SetSelectedSample = function(sample, sample_depth)
- {
- if (sample != this.SelectedSample)
- {
- // Discard old highlight
- // TODO: When zoomed right out, tiny samples are anti-aliased and this becomes inaccurate
- var old_sample = this.SelectedSample;
- var old_sample_depth = this.SelectedSampleDepth;
- this.SelectedSample = null;
- this.SelectedSampleDepth = 0;
- DrawSample(this, old_sample, old_sample_depth, true);
-
- // Add new highlight
- this.SelectedSample = sample;
- this.SelectedSampleDepth = sample_depth;
- DrawSample(this, sample, sample_depth, true);
- }
- }
-
-
- function ExpandButtonDown(evt)
- {
- var node = DOM.Event.GetNode(evt);
- DOM.Node.AddClass(node, "TimelineRowExpandButtonActive");
- }
-
-
- function ExpandButtonUp(evt)
- {
- var node = DOM.Event.GetNode(evt);
- DOM.Node.RemoveClass(node, "TimelineRowExpandButtonActive");
- }
-
-
- function IncDepth(self)
- {
- self.Depth++;
- self.SetSize(self.CanvasNode.width);
- }
-
-
- function DecDepth(self)
- {
- if (self.Depth > 1)
- {
- self.Depth--;
- self.SetSize(self.CanvasNode.width);
- }
- }
-
-
- function GetSampleAtPosition(self, mouse_state, x_offset)
- {
- // Mouse movement can occur before any data is sent to a timeline row
- var time_range = self.VisibleTimeRange;
- if (time_range == null)
- return;
-
- // Get the time the mouse is over
- var x = mouse_state.Position[0] - x_offset;
- var time_us = time_range.Start_us + x / time_range.usPerPixel;
-
- var canvas_y_offset = DOM.Node.GetPosition(self.CanvasNode)[1];
- var mouse_y_offset = mouse_state.Position[1] - canvas_y_offset;
- mouse_y_offset = Math.min(Math.max(mouse_y_offset, 0), self.CanvasNode.height);
- var depth = Math.floor(mouse_y_offset / SAMPLE_Y_SPACING) + 1;
-
- // Search for the first frame to intersect this time
- for (var i in self.VisibleFrames)
- {
- var frame = self.VisibleFrames[i];
- if (time_us >= frame.StartTime_us && time_us < frame.EndTime_us)
- {
- var found_sample = FindSample(self, frame.Samples, time_us, depth, 1);
- if (found_sample != null)
- return [ frame, found_sample[0], found_sample[1] ];
- }
- }
-
- return null;
- }
-
-
- function FindSample(self, samples, time_us, target_depth, depth)
- {
- for (var i in samples)
- {
- var sample = samples[i];
- if (depth == target_depth)
- {
- if (time_us >= sample.us_start && time_us < sample.us_start + sample.us_length)
- return [ sample, depth ];
- }
-
- else if (depth < target_depth && sample.children != null)
- {
- var found_sample = FindSample(self, sample.children, time_us, target_depth, depth + 1);
- if (found_sample != null)
- return found_sample;
- }
- }
-
- return null;
- }
-
-
- function DrawSample(self, sample, depth, draw_text)
- {
- if (sample == null)
- return;
-
- // Determine pixel range of the sample
- var time_range = self.VisibleTimeRange;
- var x0 = time_range.PixelOffset(sample.us_start);
- var x1 = x0 + time_range.PixelSize(sample.us_length);
-
- // Clip to padded timeline row
- var min_x = 3;
- var max_x = self.CanvasNode.width - 5;
- x0 = Math.min(Math.max(x0, min_x), max_x);
- x1 = Math.min(Math.max(x1, min_x), max_x);
-
- var offset_x = x0;
- var offset_y = SAMPLE_Y_OFFSET + (depth - 1) * SAMPLE_Y_SPACING;
- var size_x = x1 - x0;
- var size_y = SAMPLE_HEIGHT;
-
- // Normal rendering
- var ctx = self.Ctx;
- ctx.fillStyle = sample.colour;
- ctx.fillRect(offset_x, offset_y, size_x, size_y);
-
- // Highlight rendering
- var b = (sample == self.HoverSample) ? 255 : 0;
- var r = (sample == self.SelectedSample) ? 255 : 0;
- if (b + r > 0)
- {
- ctx.lineWidth = 1;
- ctx.strokeStyle = "rgb(" + r + ", 0, " + b + ")";
- ctx.strokeRect(offset_x + 0.5, offset_y + 0.5, size_x - 1, size_y - 1);
- }
-
- // Draw sample names clipped to the bounds of the sample
- // Also reject tiny samples with no space to render text
- if (draw_text && size_x > 8)
- {
- ctx.save();
- ctx.beginPath();
- ctx.rect(offset_x + 2.5, offset_y + 1.5, size_x - 5, size_y - 3);
- ctx.clip();
- ctx.font = "9px verdana";
- ctx.fillStyle = "black";
- ctx.fillText(sample.name, offset_x + 5.5, offset_y + 1.5 + 9);
- ctx.restore();
- }
- }
-
-
- return TimelineRow;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineWindow.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineWindow.js
deleted file mode 100644
index 06479b7d40b..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/TimelineWindow.js
+++ /dev/null
@@ -1,270 +0,0 @@
-
-//
-// TODO: Use WebGL and instancing for quicker renders
-//
-
-
-TimelineWindow = (function()
-{
- var BORDER = 10;
-
- var ROW_START_SIZE = 210;
-
- var ROW_END_SIZE = 20; // make room for scrollbar
-
- var box_template = "<div class='TimelineBox'></div>";
-
-
- function TimelineWindow(wm, settings, server, check_handler)
- {
- this.Settings = settings;
-
- // Ordered list of thread rows on the timeline
- this.ThreadRows = [ ];
-
- // Create window and containers
- this.Window = wm.AddWindow("Timeline", 10, 20, 100, 100);
- this.Window.ShowNoAnim();
- this.TimelineContainer = this.Window.AddControlNew(new WM.Container(10, 10, 800, 160));
- DOM.Node.AddClass(this.TimelineContainer.Node, "TimelineContainer");
-
- var mouse_wheel_event = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel";
- DOM.Event.AddHandler(this.TimelineContainer.Node, mouse_wheel_event, Bind(OnMouseScroll, this));
-
- // Setup timeline manipulation
- this.MouseDown = false;
- this.TimelineMoved = false;
- this.OnHoverHandler = null;
- this.OnSelectedHandler = null;
- DOM.Event.AddHandler(this.TimelineContainer.Node, "mousedown", Bind(OnMouseDown, this));
- DOM.Event.AddHandler(this.TimelineContainer.Node, "mouseup", Bind(OnMouseUp, this));
- DOM.Event.AddHandler(this.TimelineContainer.Node, "mousemove", Bind(OnMouseMove, this));
-
- // Set time range AFTER the window has been created, as it uses the window to determine pixel coverage
- this.TimeRange = new PixelTimeRange(0, 200 * 1000, RowWidth(this));
-
- this.CheckHandler = check_handler;
- }
-
-
- TimelineWindow.prototype.SetOnHover = function(handler)
- {
- this.OnHoverHandler = handler;
- }
-
-
- TimelineWindow.prototype.SetOnSelected = function(handler)
- {
- this.OnSelectedHandler = handler;
- }
-
-
- TimelineWindow.prototype.WindowResized = function(width, height, top_window)
- {
- // Resize window
- var top = top_window.Position[1] + top_window.Size[1] + 10;
- this.Window.SetPosition(10, top);
- this.Window.SetSize(width - 2 * 10, 200);
-
- // Resize controls
- var parent_size = this.Window.Size;
- this.TimelineContainer.SetPosition(BORDER, 10);
- this.TimelineContainer.SetSize(parent_size[0] - 2 * BORDER, 160);
-
- // Resize rows
- var row_width = RowWidth(this);
- for (var i in this.ThreadRows)
- {
- var row = this.ThreadRows[i];
- row.SetSize(row_width);
- }
-
- // Adjust time range to new width
- this.TimeRange.SetPixelSpan(row_width);
- this.DrawAllRows();
- }
-
-
- TimelineWindow.prototype.ResetTimeRange = function()
- {
- this.TimeRange.SetStart(0);
- }
-
-
- TimelineWindow.prototype.OnSamples = function(thread_name, frame_history)
- {
- // Shift the timeline to the last entry on this thread
- // As multiple threads come through here with different end frames, only do this for the latest
- var last_frame = frame_history[frame_history.length - 1];
- if (last_frame.EndTime_us > this.TimeRange.End_us)
- this.TimeRange.SetEnd(last_frame.EndTime_us);
-
- // Search for the index of this thread
- var thread_index = -1;
- for (var i in this.ThreadRows)
- {
- if (this.ThreadRows[i].Name == thread_name)
- {
- thread_index = i;
- break;
- }
- }
-
- // If this thread has not been seen before, add a new row to the list and re-sort
- if (thread_index == -1)
- {
- var row = new TimelineRow(thread_name, RowWidth(this), this.TimelineContainer.Node, frame_history, this.CheckHandler);
- this.ThreadRows.push(row);
- this.ThreadRows.sort(function(a, b) { return b.Name.localeCompare(a.Name); });
- }
- }
-
-
- TimelineWindow.prototype.DrawAllRows = function()
- {
- var time_range = this.TimeRange;
- var draw_text = this.Settings.IsPaused;
- for (var i in this.ThreadRows)
- {
- var thread_row = this.ThreadRows[i];
- thread_row.SetVisibleFrames(time_range);
- thread_row.Draw(draw_text);
- }
- }
-
-
- function RowXOffset(self)
- {
- // Add sizing of the label
- // TODO: Use computed size
- return DOM.Node.GetPosition(self.TimelineContainer.Node)[0] + ROW_START_SIZE;
- }
-
-
- function RowWidth(self)
- {
- // Subtract sizing of the label
- // TODO: Use computed size
- return self.TimelineContainer.Size[0] - (ROW_START_SIZE + ROW_END_SIZE);
- }
-
-
- function OnMouseScroll(self, evt)
- {
- var mouse_state = new Mouse.State(evt);
- var scale = 1.11;
- if (mouse_state.WheelDelta > 0)
- scale = 1 / scale;
-
- // What time is the mouse hovering over?
- var x = mouse_state.Position[0] - RowXOffset(self);
- var time_us = self.TimeRange.Start_us + x / self.TimeRange.usPerPixel;
-
- // Calculate start time relative to the mouse hover position
- var time_start_us = self.TimeRange.Start_us - time_us;
-
- // Scale and offset back to the hover time
- self.TimeRange.Set(time_start_us * scale + time_us, self.TimeRange.Span_us * scale);
- self.DrawAllRows();
-
- // Prevent vertical scrolling on mouse-wheel
- DOM.Event.StopDefaultAction(evt);
- }
-
-
- function OnMouseDown(self, evt)
- {
- // Only manipulate the timelime when paused
- if (!self.Settings.IsPaused)
- return;
-
- self.MouseDown = true;
- self.TimelineMoved = false;
- DOM.Event.StopDefaultAction(evt);
- }
-
-
- function OnMouseUp(self, evt)
- {
- // Only manipulate the timelime when paused
- if (!self.Settings.IsPaused)
- return;
-
- var mouse_state = new Mouse.State(evt);
-
- self.MouseDown = false;
-
- if (!self.TimelineMoved)
- {
- // Search for the row being clicked and update its selection
- var row_node = DOM.Event.GetNode(evt);
- for (var i in self.ThreadRows)
- {
- var thread_row = self.ThreadRows[i];
- if (thread_row.CanvasNode == row_node)
- {
- var select = thread_row.UpdateSelectedSample(mouse_state, RowXOffset(self));
-
- // Call any selection handlers
- if (self.OnSelectedHandler)
- self.OnSelectedHandler(thread_row.Name, select);
-
- break;
- }
- }
- }
- }
-
-
- function OnMouseMove(self, evt)
- {
- // Only manipulate the timelime when paused
- if (!self.Settings.IsPaused)
- return;
-
- var mouse_state = new Mouse.State(evt);
-
- if (self.MouseDown)
- {
- // Get the time the mouse is over
- var x = mouse_state.Position[0] - RowXOffset(self);
- var time_us = self.TimeRange.Start_us + x / self.TimeRange.usPerPixel;
-
- // Shift the visible time range with mouse movement
- var time_offset_us = mouse_state.PositionDelta[0] / self.TimeRange.usPerPixel;
- if (time_offset_us)
- {
- self.TimeRange.SetStart(self.TimeRange.Start_us - time_offset_us);
- self.DrawAllRows();
- self.TimelineMoved = true;
- }
- }
-
- else
- {
- // Highlight any samples the mouse moves over
- var row_node = DOM.Event.GetNode(evt);
- for (var i in self.ThreadRows)
- {
- var thread_row = self.ThreadRows[i];
- if (thread_row.CanvasNode == row_node)
- {
- var hover = thread_row.UpdateHoverSample(mouse_state, RowXOffset(self));
-
- if (self.OnHoverHandler)
- self.OnHoverHandler(thread_row.Name, hover);
- }
- else
- {
- thread_row.SetHoverSample(null, 0);
- if (self.OnHoverHandler)
- self.OnHoverHandler(thread_row.Name, null);
- }
- }
- }
- }
-
-
- return TimelineWindow;
-})();
-
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/TitleWindow.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/TitleWindow.js
deleted file mode 100644
index 6e197597563..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/TitleWindow.js
+++ /dev/null
@@ -1,59 +0,0 @@
-
-TitleWindow = (function()
-{
- function TitleWindow(wm, settings, server, connection_address)
- {
- this.Settings = settings;
-
- this.Window = wm.AddWindow("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remotery", 10, 10, 100, 100);
- this.Window.ShowNoAnim();
-
- this.PingContainer = this.Window.AddControlNew(new WM.Container(4, -13, 10, 10));
- DOM.Node.AddClass(this.PingContainer.Node, "PingContainer");
-
- this.EditBox = this.Window.AddControlNew(new WM.EditBox(10, 5, 300, 18, "Connection Address", connection_address));
-
- // Setup pause button
- this.PauseButton = this.Window.AddControlNew(new WM.Button("Pause", 5, 5, { toggle: true }));
- this.PauseButton.SetOnClick(Bind(OnPausePressed, this));
-
- server.AddMessageHandler("PING", Bind(OnPing, this));
- }
-
-
- TitleWindow.prototype.SetConnectionAddressChanged = function(handler)
- {
- this.EditBox.SetChangeHandler(handler);
- }
-
-
- TitleWindow.prototype.WindowResized = function(width, height)
- {
- this.Window.SetSize(width - 2 * 10, 50);
- this.PauseButton.SetPosition(width - 80, 5);
- }
-
-
- function OnPausePressed(self)
- {
- self.Settings.IsPaused = self.PauseButton.IsPressed();
- if (self.Settings.IsPaused)
- self.PauseButton.SetText("Paused");
- else
- self.PauseButton.SetText("Pause");
- }
-
-
- function OnPing(self, server)
- {
- // Set the ping container as active and take it off half a second later
- DOM.Node.AddClass(self.PingContainer.Node, "PingContainerActive");
- window.setTimeout(Bind(function(self)
- {
- DOM.Node.RemoveClass(self.PingContainer.Node, "PingContainerActive");
- }, self), 500);
- }
-
-
- return TitleWindow;
-})(); \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Code/WebSocketConnection.js b/3rdparty/bgfx/3rdparty/remotery/vis/Code/WebSocketConnection.js
deleted file mode 100644
index 95b1208be03..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Code/WebSocketConnection.js
+++ /dev/null
@@ -1,137 +0,0 @@
-
-WebSocketConnection = (function()
-{
- function WebSocketConnection()
- {
- this.MessageHandlers = { };
- this.Socket = null;
- this.Console = null;
- }
-
-
- WebSocketConnection.prototype.SetConsole = function(console)
- {
- this.Console = console;
- }
-
-
- WebSocketConnection.prototype.Connected = function()
- {
- // Will return true if the socket is also in the process of connecting
- return this.Socket != null;
- }
-
-
- WebSocketConnection.prototype.AddConnectHandler = function(handler)
- {
- this.AddMessageHandler("__OnConnect__", handler);
- }
-
-
- WebSocketConnection.prototype.AddDisconnectHandler = function(handler)
- {
- this.AddMessageHandler("__OnDisconnect__", handler);
- }
-
-
- WebSocketConnection.prototype.AddMessageHandler = function(message_name, handler)
- {
- // Create the message handler array on-demand
- if (!(message_name in this.MessageHandlers))
- this.MessageHandlers[message_name] = [ ];
- this.MessageHandlers[message_name].push(handler);
- }
-
-
- WebSocketConnection.prototype.Connect = function(address)
- {
- // Disconnect if already connected
- if (this.Connected())
- this.Disconnect();
-
- Log(this, "Connecting to " + address);
-
- this.Socket = new WebSocket(address);
- this.Socket.binaryType = "arraybuffer";
- this.Socket.onopen = Bind(OnOpen, this);
- this.Socket.onmessage = Bind(OnMessage, this);
- this.Socket.onclose = Bind(OnClose, this);
- this.Socket.onerror = Bind(OnError, this);
- }
-
-
- WebSocketConnection.prototype.Disconnect = function()
- {
- Log(this, "Disconnecting");
- if (this.Connected())
- this.Socket.close();
- }
-
-
- WebSocketConnection.prototype.Send = function(msg)
- {
- if (this.Connected())
- this.Socket.send(msg);
- }
-
-
- function Log(self, message)
- {
- self.Console.Log(message);
- }
-
-
- function CallMessageHandlers(self, message_name, data_view)
- {
- if (message_name in self.MessageHandlers)
- {
- var handlers = self.MessageHandlers[message_name];
- for (var i in handlers)
- handlers[i](self, data_view);
- }
- }
-
-
- function OnOpen(self, event)
- {
- Log(self, "Connected");
- CallMessageHandlers(self, "__OnConnect__");
- }
-
-
- function OnClose(self, event)
- {
- // Clear all references
- self.Socket.onopen = null;
- self.Socket.onmessage = null;
- self.Socket.onclose = null;
- self.Socket.onerror = null;
- self.Socket = null;
-
- Log(self, "Disconnected");
- CallMessageHandlers(self, "__OnDisconnect__");
- }
-
-
- function OnError(self, event)
- {
- Log(self, "Connection Error ");
- }
-
-
- function OnMessage(self, event)
- {
- var data_view = new DataView(event.data);
-
- var id = String.fromCharCode(
- data_view.getInt8(0),
- data_view.getInt8(1),
- data_view.getInt8(2),
- data_view.getInt8(3));
-
- CallMessageHandlers(self, id, data_view);
- }
-
-
- return WebSocketConnection;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/Styles/Remotery.css b/3rdparty/bgfx/3rdparty/remotery/vis/Styles/Remotery.css
deleted file mode 100644
index 995095f417e..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/Styles/Remotery.css
+++ /dev/null
@@ -1,212 +0,0 @@
-
-body
-{
- /* Take up the full page */
- width: 100%;
- height: 100%;
- margin: 0px;
-
- background-color: #AAA;
-}
-
-
-.NoSelect
-{
- /* Disable text selection so that it doesn't interfere with faux-button clicking */
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-
- /* Stops the text cursor over the label */
- cursor:default;
-}
-
-
-/* Override default window styles to remove 3D effect */
-.Window
-{
- background: #555;
- box-shadow: none;
- border-radius: 3px;
-}
-/*.WindowTitleBar
-{
- border-bottom: none;
- border-radius: 0px;
-}
-.WindowBody
-{
- border-top: none;
-}*/
-
-
-/* Override default container style to remove 3D effect */
-.Container
-{
- border: none;
- box-shadow: none;
-}
-
-
-/* Override default edit box style to remove 3D effect */
-.EditBox
-{
- border: none;
- box-shadow: none;
- width:200;
-}
-
-
-
-.ConsoleText
-{
- overflow:auto;
- color: #BBB;
- font: 9px Verdana;
- margin: 2px;
- white-space: pre;
-}
-
-
-.PingContainer
-{
- background-color: #F55;
- border-radius: 2px;
-
- /* Transition from green is gradual */
- transition: background-color 0.25s ease-in;
-}
-
-
-.PingContainerActive
-{
- background-color: #5F5;
-
- /* Transition to green is instant */
- transition: none;
-}
-
-
-.SampleNameCell
-{
- width:300px;
-}
-
-
-.TimelineBox
-{
- /* Following style generally copies GridRowCell.GridGroup from BrowserLib */
-
- padding: 1px 1px 1px 2px;
- margin: 1px;
-
- border: 1px solid;
- border-radius: 2px;
- border-top-color:#555;
- border-left-color:#555;
- border-bottom-color:#111;
- border-right-color:#111;
-
- background: #222;
-
- font: 9px Verdana;
- color: #BBB;
-}
-.TimelineRow
-{
- width: 100%;
-}
-.TimelineRowCheckbox
-{
- width: 12px;
- height: 12px;
- margin: 0px;
-}
-.TimelineRowCheck
-{
- /* Pull .TimelineRowExpand to the right of the checkbox */
- float:left;
-
- width: 14px;
- height: 14px;
-}
-.TimelineRowExpand
-{
- /* Pull .TimelineRowLabel to the right of +/- buttons */
- float:left;
-
- width: 14px;
- height: 14px;
-}
-.TimelineRowExpandButton
-{
- width: 11px;
- height: 12px;
-
- color: #333;
-
- border: 1px solid;
-
- border-top-color:#F4F4F4;
- border-left-color:#F4F4F4;
- border-bottom-color:#8E8F8F;
- border-right-color:#8E8F8F;
-
- /* Top-right to bottom-left grey background gradient */
- background: #f6f6f6; /* Old browsers */
- background: -moz-linear-gradient(-45deg, #f6f6f6 0%, #abaeb2 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#f6f6f6), color-stop(100%,#abaeb2)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(-45deg, #f6f6f6 0%,#abaeb2 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(-45deg, #f6f6f6 0%,#abaeb2 100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(-45deg, #f6f6f6 0%,#abaeb2 100%); /* IE10+ */
- background: linear-gradient(135deg, #f6f6f6 0%,#abaeb2 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f6f6f6', endColorstr='#abaeb2',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
-
- text-align: center;
- vertical-align: center;
-}
-.TimelineRowExpandButton:hover
-{
- border-top-color:#79C6F9;
- border-left-color:#79C6F9;
- border-bottom-color:#385D72;
- border-right-color:#385D72;
-
- /* Top-right to bottom-left blue background gradient, matching border */
- background: #f3f3f3; /* Old browsers */
- background: -moz-linear-gradient(-45deg, #f3f3f3 0%, #79c6f9 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#f3f3f3), color-stop(100%,#79c6f9)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(-45deg, #f3f3f3 0%,#79c6f9 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(-45deg, #f3f3f3 0%,#79c6f9 100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(-45deg, #f3f3f3 0%,#79c6f9 100%); /* IE10+ */
- background: linear-gradient(135deg, #f3f3f3 0%,#79c6f9 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#79c6f9',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
-}
-.TimelineRowExpandButtonActive
-{
- /* Simple means of shifting text within a div to the bottom-right */
- padding-left:1px;
- padding-top:1px;
- width:10px;
- height:11px;
-}
-.TimelineRowLabel
-{
- /* Pull .TimelineRowCanvas to the right of the label */
- float:left;
-
- width: 140px;
- height: 14px;
-}
-.TimelineRowCanvas
-{
-}
-
-/* enable vertical scrollbar in TimelineContainer (useful for many threads) */
-.TimelineContainer
-{
- overflow-y: scroll;
-}
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Animation.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Animation.js
deleted file mode 100644
index 516aa9cf80c..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Animation.js
+++ /dev/null
@@ -1,65 +0,0 @@
-
-//
-// Very basic linear value animation system, for now.
-//
-
-
-namespace("Anim");
-
-
-Anim.Animation = (function()
-{
- var anim_hz = 60;
-
-
- function Animation(anim_func, start_value, end_value, time, end_callback)
- {
- // Setup initial parameters
- this.StartValue = start_value;
- this.EndValue = end_value;
- this.ValueInc = (end_value - start_value) / (time * anim_hz);
- this.Value = start_value;
- this.Complete = false;
- this.EndCallback = end_callback;
-
- // Cache the update function to prevent recreating the closure
- var self = this;
- this.AnimFunc = anim_func;
- this.AnimUpdate = function() { Update(self); }
-
- // Call for the start value
- this.AnimUpdate();
- }
-
-
- function Update(self)
- {
- // Queue up the next frame immediately
- var id = window.setTimeout(self.AnimUpdate, 1000 / anim_hz);
-
- // Linear step the value and check for completion
- self.Value += self.ValueInc;
- if (Math.abs(self.Value - self.EndValue) < 0.01)
- {
- self.Value = self.EndValue;
- self.Complete = true;
-
- if (self.EndCallback)
- self.EndCallback();
-
- window.clearTimeout(id);
- }
-
- // Pass to the animation function
- self.AnimFunc(self.Value);
- }
-
-
- return Animation;
-})();
-
-
-Anim.Animate = function(anim_func, start_value, end_value, time, end_callback)
-{
- return new Anim.Animation(anim_func, start_value, end_value, time, end_callback);
-}
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Bind.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Bind.js
deleted file mode 100644
index 102ee26f60d..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Bind.js
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// This will generate a closure for the given function and optionally bind an arbitrary number of
-// its initial arguments to specific values.
-//
-// Parameters:
-//
-// 0: Either the function scope or the function.
-// 1: If 0 is the function scope, this is the function.
-// Otherwise it's the start of the optional bound argument list.
-// 2: Start of the optional bound argument list if 1 is the function.
-//
-// Examples:
-//
-// function GlobalFunction(p0, p1, p2) { }
-// function ThisFunction(p0, p1, p2) { }
-//
-// var a = Bind("GlobalFunction");
-// var b = Bind(this, "ThisFunction");
-// var c = Bind("GlobalFunction", BoundParam0, BoundParam1);
-// var d = Bind(this, "ThisFunction", BoundParam0, BoundParam1);
-// var e = Bind(GlobalFunction);
-// var f = Bind(this, ThisFunction);
-// var g = Bind(GlobalFunction, BoundParam0, BoundParam1);
-// var h = Bind(this, ThisFunction, BoundParam0, BoundParam1);
-//
-// a(0, 1, 2);
-// b(0, 1, 2);
-// c(2);
-// d(2);
-// e(0, 1, 2);
-// f(0, 1, 2);
-// g(2);
-// h(2);
-//
-function Bind()
-{
- // No closure to define?
- if (arguments.length == 0)
- return null;
-
- // Figure out which of the 4 call types is being used to bind
- // Locate scope, function and bound parameter start index
-
- if (typeof(arguments[0]) == "string")
- {
- var scope = window;
- var func = window[arguments[0]];
- var start = 1;
- }
-
- else if (typeof(arguments[0]) == "function")
- {
- var scope = window;
- var func = arguments[0];
- var start = 1;
- }
-
- else if (typeof(arguments[1]) == "string")
- {
- var scope = arguments[0];
- var func = scope[arguments[1]];
- var start = 2;
- }
-
- else if (typeof(arguments[1]) == "function")
- {
- var scope = arguments[0];
- var func = arguments[1];
- var start = 2;
- }
-
- else
- {
- // unknown
- console.log("Bind() ERROR: Unknown bind parameter configuration");
- return;
- }
-
- // Convert the arguments list to an array
- var arg_array = Array.prototype.slice.call(arguments, start);
- start = arg_array.length;
-
- return function()
- {
- // Concatenate incoming arguments
- for (var i = 0; i < arguments.length; i++)
- arg_array[start + i] = arguments[i];
-
- // Call the function in the given scope with the new arguments
- return func.apply(scope, arg_array);
- }
-}
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Convert.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Convert.js
deleted file mode 100644
index b1f54613174..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Convert.js
+++ /dev/null
@@ -1,218 +0,0 @@
-
-namespace("Convert");
-
-
-//
-// Convert between utf8 and b64 without raising character out of range exceptions with unicode strings
-// Technique described here: http://monsur.hossa.in/2012/07/20/utf-8-in-javascript.html
-//
-Convert.utf8string_to_b64string = function(str)
-{
- return btoa(unescape(encodeURIComponent(str)));
-}
-Convert.b64string_to_utf8string = function(str)
-{
- return decodeURIComponent(escape(atob(str)));
-}
-
-
-//
-// More general approach, converting between byte arrays and b64
-// Info here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding
-//
-Convert.b64string_to_Uint8Array = function(sBase64, nBlocksSize)
-{
- function b64ToUint6 (nChr)
- {
- return nChr > 64 && nChr < 91 ?
- nChr - 65
- : nChr > 96 && nChr < 123 ?
- nChr - 71
- : nChr > 47 && nChr < 58 ?
- nChr + 4
- : nChr === 43 ?
- 62
- : nChr === 47 ?
- 63
- :
- 0;
- }
-
- var
- sB64Enc = sBase64.replace(/[^A-Za-z0-9\+\/]/g, ""),
- nInLen = sB64Enc.length,
- nOutLen = nBlocksSize ? Math.ceil((nInLen * 3 + 1 >> 2) / nBlocksSize) * nBlocksSize : nInLen * 3 + 1 >> 2,
- taBytes = new Uint8Array(nOutLen);
-
- for (var nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++)
- {
- nMod4 = nInIdx & 3;
- nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << 18 - 6 * nMod4;
- if (nMod4 === 3 || nInLen - nInIdx === 1)
- {
- for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++)
- taBytes[nOutIdx] = nUint24 >>> (16 >>> nMod3 & 24) & 255;
- nUint24 = 0;
- }
- }
-
- return taBytes;
-}
-Convert.Uint8Array_to_b64string = function(aBytes)
-{
- function uint6ToB64 (nUint6)
- {
- return nUint6 < 26 ?
- nUint6 + 65
- : nUint6 < 52 ?
- nUint6 + 71
- : nUint6 < 62 ?
- nUint6 - 4
- : nUint6 === 62 ?
- 43
- : nUint6 === 63 ?
- 47
- :
- 65;
- }
-
- var nMod3, sB64Enc = "";
-
- for (var nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++)
- {
- nMod3 = nIdx % 3;
- if (nIdx > 0 && (nIdx * 4 / 3) % 76 === 0)
- sB64Enc += "\r\n";
- nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);
- if (nMod3 === 2 || aBytes.length - nIdx === 1)
- {
- sB64Enc += String.fromCharCode(uint6ToB64(nUint24 >>> 18 & 63), uint6ToB64(nUint24 >>> 12 & 63), uint6ToB64(nUint24 >>> 6 & 63), uint6ToB64(nUint24 & 63));
- nUint24 = 0;
- }
- }
-
- return sB64Enc.replace(/A(?=A$|$)/g, "=");
-}
-
-
-//
-// Unicode and arbitrary value safe conversion between strings and Uint8Arrays
-//
-Convert.Uint8Array_to_string = function(aBytes)
-{
- var sView = "";
-
- for (var nPart, nLen = aBytes.length, nIdx = 0; nIdx < nLen; nIdx++)
- {
- nPart = aBytes[nIdx];
- sView += String.fromCharCode(
- nPart > 251 && nPart < 254 && nIdx + 5 < nLen ? /* six bytes */
- /* (nPart - 252 << 32) is not possible in ECMAScript! So...: */
- (nPart - 252) * 1073741824 + (aBytes[++nIdx] - 128 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128
- : nPart > 247 && nPart < 252 && nIdx + 4 < nLen ? /* five bytes */
- (nPart - 248 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128
- : nPart > 239 && nPart < 248 && nIdx + 3 < nLen ? /* four bytes */
- (nPart - 240 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128
- : nPart > 223 && nPart < 240 && nIdx + 2 < nLen ? /* three bytes */
- (nPart - 224 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128
- : nPart > 191 && nPart < 224 && nIdx + 1 < nLen ? /* two bytes */
- (nPart - 192 << 6) + aBytes[++nIdx] - 128
- : /* nPart < 127 ? */ /* one byte */
- nPart
- );
- }
-
- return sView;
-}
-Convert.string_to_Uint8Array = function(sDOMStr)
-{
- var aBytes, nChr, nStrLen = sDOMStr.length, nArrLen = 0;
-
- /* mapping... */
-
- for (var nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++)
- {
- nChr = sDOMStr.charCodeAt(nMapIdx);
- nArrLen += nChr < 0x80 ? 1 : nChr < 0x800 ? 2 : nChr < 0x10000 ? 3 : nChr < 0x200000 ? 4 : nChr < 0x4000000 ? 5 : 6;
- }
-
- aBytes = new Uint8Array(nArrLen);
-
- /* transcription... */
-
- for (var nIdx = 0, nChrIdx = 0; nIdx < nArrLen; nChrIdx++)
- {
- nChr = sDOMStr.charCodeAt(nChrIdx);
- if (nChr < 128)
- {
- /* one byte */
- aBytes[nIdx++] = nChr;
- }
- else if (nChr < 0x800)
- {
- /* two bytes */
- aBytes[nIdx++] = 192 + (nChr >>> 6);
- aBytes[nIdx++] = 128 + (nChr & 63);
- }
- else if (nChr < 0x10000)
- {
- /* three bytes */
- aBytes[nIdx++] = 224 + (nChr >>> 12);
- aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);
- aBytes[nIdx++] = 128 + (nChr & 63);
- }
- else if (nChr < 0x200000)
- {
- /* four bytes */
- aBytes[nIdx++] = 240 + (nChr >>> 18);
- aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);
- aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);
- aBytes[nIdx++] = 128 + (nChr & 63);
- }
- else if (nChr < 0x4000000)
- {
- /* five bytes */
- aBytes[nIdx++] = 248 + (nChr >>> 24);
- aBytes[nIdx++] = 128 + (nChr >>> 18 & 63);
- aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);
- aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);
- aBytes[nIdx++] = 128 + (nChr & 63);
- }
- else /* if (nChr <= 0x7fffffff) */
- {
- /* six bytes */
- aBytes[nIdx++] = 252 + /* (nChr >>> 32) is not possible in ECMAScript! So...: */ (nChr / 1073741824);
- aBytes[nIdx++] = 128 + (nChr >>> 24 & 63);
- aBytes[nIdx++] = 128 + (nChr >>> 18 & 63);
- aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);
- aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);
- aBytes[nIdx++] = 128 + (nChr & 63);
- }
- }
-
- return aBytes;
-}
-
-
-//
-// Converts all characters in a string that have equivalent entities to their ampersand/entity names.
-// Based on https://gist.github.com/jonathantneal/6093551
-//
-Convert.string_to_html_entities = (function()
-{
- 'use strict';
-
- var data = '34quot38amp39apos60lt62gt160nbsp161iexcl162cent163pound164curren165yen166brvbar167sect168uml169copy170ordf171laquo172not173shy174reg175macr176deg177plusmn178sup2179sup3180acute181micro182para183middot184cedil185sup1186ordm187raquo188frac14189frac12190frac34191iquest192Agrave193Aacute194Acirc195Atilde196Auml197Aring198AElig199Ccedil200Egrave201Eacute202Ecirc203Euml204Igrave205Iacute206Icirc207Iuml208ETH209Ntilde210Ograve211Oacute212Ocirc213Otilde214Ouml215times216Oslash217Ugrave218Uacute219Ucirc220Uuml221Yacute222THORN223szlig224agrave225aacute226acirc227atilde228auml229aring230aelig231ccedil232egrave233eacute234ecirc235euml236igrave237iacute238icirc239iuml240eth241ntilde242ograve243oacute244ocirc245otilde246ouml247divide248oslash249ugrave250uacute251ucirc252uuml253yacute254thorn255yuml402fnof913Alpha914Beta915Gamma916Delta917Epsilon918Zeta919Eta920Theta921Iota922Kappa923Lambda924Mu925Nu926Xi927Omicron928Pi929Rho931Sigma932Tau933Upsilon934Phi935Chi936Psi937Omega945alpha946beta947gamma948delta949epsilon950zeta951eta952theta953iota954kappa955lambda956mu957nu958xi959omicron960pi961rho962sigmaf963sigma964tau965upsilon966phi967chi968psi969omega977thetasym978upsih982piv8226bull8230hellip8242prime8243Prime8254oline8260frasl8472weierp8465image8476real8482trade8501alefsym8592larr8593uarr8594rarr8595darr8596harr8629crarr8656lArr8657uArr8658rArr8659dArr8660hArr8704forall8706part8707exist8709empty8711nabla8712isin8713notin8715ni8719prod8721sum8722minus8727lowast8730radic8733prop8734infin8736ang8743and8744or8745cap8746cup8747int8756there48764sim8773cong8776asymp8800ne8801equiv8804le8805ge8834sub8835sup8836nsub8838sube8839supe8853oplus8855otimes8869perp8901sdot8968lceil8969rceil8970lfloor8971rfloor9001lang9002rang9674loz9824spades9827clubs9829hearts9830diams338OElig339oelig352Scaron353scaron376Yuml710circ732tilde8194ensp8195emsp8201thinsp8204zwnj8205zwj8206lrm8207rlm8211ndash8212mdash8216lsquo8217rsquo8218sbquo8220ldquo8221rdquo8222bdquo8224dagger8225Dagger8240permil8249lsaquo8250rsaquo8364euro';
- var charCodes = data.split(/[A-z]+/);
- var entities = data.split(/\d+/).slice(1);
-
- return function encodeHTMLEntities(text)
- {
- return text.replace(/[\u00A0-\u2666<>"'&]/g, function (match)
- {
- var charCode = String(match.charCodeAt(0));
- var index = charCodes.indexOf(charCode);
- return '&' + (entities[index] ? entities[index] : '#' + charCode) + ';';
- });
- };
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Core.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Core.js
deleted file mode 100644
index aab35c9207d..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Core.js
+++ /dev/null
@@ -1,20 +0,0 @@
-
-// TODO: requires function for checking existence of dependencies
-
-
-function namespace(name)
-{
- // Ensure all nested namespaces are created only once
-
- var ns_list = name.split(".");
- var parent_ns = window;
-
- for (var i in ns_list)
- {
- var ns_name = ns_list[i];
- if (!(ns_name in parent_ns))
- parent_ns[ns_name] = { };
-
- parent_ns = parent_ns[ns_name];
- }
-} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/DOM.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/DOM.js
deleted file mode 100644
index f11fb192bcd..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/DOM.js
+++ /dev/null
@@ -1,499 +0,0 @@
-
-namespace("DOM.Node");
-namespace("DOM.Event");
-namespace("DOM.Applet");
-
-
-
-//
-// =====================================================================================================================
-// ----- DOCUMENT NODE/ELEMENT EXTENSIONS ------------------------------------------------------------------------------
-// =====================================================================================================================
-//
-
-
-
-DOM.Node.Get = function(id)
-{
- return document.getElementById(id);
-}
-
-
-//
-// Set node position
-//
-DOM.Node.SetPosition = function(node, position)
-{
- node.style.left = position[0];
- node.style.top = position[1];
-}
-DOM.Node.SetX = function(node, x)
-{
- node.style.left = x;
-}
-DOM.Node.SetY = function(node, y)
-{
- node.style.top = y;
-}
-
-
-//
-// Get the absolute position of a HTML element on the page
-//
-DOM.Node.GetPosition = function(element, account_for_scroll)
-{
- // Recurse up through parents, summing offsets from their parent
- var x = 0, y = 0;
- for (var node = element; node != null; node = node.offsetParent)
- {
- x += node.offsetLeft;
- y += node.offsetTop;
- }
-
- if (account_for_scroll)
- {
- // Walk up the hierarchy subtracting away any scrolling
- for (var node = element; node != document.body; node = node.parentNode)
- {
- x -= node.scrollLeft;
- y -= node.scrollTop;
- }
- }
-
- return [x, y];
-}
-
-
-//
-// Set node size
-//
-DOM.Node.SetSize = function(node, size)
-{
- node.style.width = size[0];
- node.style.height = size[1];
-}
-DOM.Node.SetWidth = function(node, width)
-{
- node.style.width = width;
-}
-DOM.Node.SetHeight = function(node, height)
-{
- node.style.height = height;
-}
-
-
-//
-// Get node OFFSET size:
-// clientX includes padding
-// offsetX includes padding and borders
-// scrollX includes padding, borders and size of contained node
-//
-DOM.Node.GetSize = function(node)
-{
- return [ node.offsetWidth, node.offsetHeight ];
-}
-DOM.Node.GetWidth = function(node)
-{
- return node.offsetWidth;
-}
-DOM.Node.GetHeight = function(node)
-{
- return node.offsetHeight;
-}
-
-
-//
-// Set node opacity
-//
-DOM.Node.SetOpacity = function(node, value)
-{
- node.style.opacity = value;
-}
-
-
-DOM.Node.SetColour = function(node, colour)
-{
- node.style.color = colour;
-}
-
-
-//
-// Hide a node by completely disabling its rendering (it no longer contributes to document layout)
-//
-DOM.Node.Hide = function(node)
-{
- node.style.display = "none";
-}
-
-
-//
-// Show a node by restoring its influcen in document layout
-//
-DOM.Node.Show = function(node)
-{
- node.style.display = "block";
-}
-
-
-//
-// Add a CSS class to a HTML element, specified last
-//
-DOM.Node.AddClass = function(node, class_name)
-{
- // Ensure the class hasn't already been added
- DOM.Node.RemoveClass(node, class_name);
- node.className += " " + class_name;
-}
-
-
-//
-// Remove a CSS class from a HTML element
-//
-DOM.Node.RemoveClass = function(node, class_name)
-{
- // Remove all variations of where the class name can be in the string list
- var regexp = new RegExp("\\b" + class_name + "\\b");
- node.className = node.className.replace(regexp, "");
-}
-
-
-
-//
-// Check to see if a HTML element contains a class
-//
-DOM.Node.HasClass = function(node, class_name)
-{
- var regexp = new RegExp("\\b" + class_name + "\\b");
- return regexp.test(node.className);
-}
-
-
-//
-// Recursively search for a node with the given class name
-//
-DOM.Node.FindWithClass = function(parent_node, class_name, index)
-{
- // Search the children looking for a node with the given class name
- for (var i in parent_node.childNodes)
- {
- var node = parent_node.childNodes[i];
- if (DOM.Node.HasClass(node, class_name))
- {
- if (index === undefined || index-- == 0)
- return node;
- }
-
- // Recurse into children
- node = DOM.Node.FindWithClass(node, class_name);
- if (node != null)
- return node;
- }
-
- return null;
-}
-
-
-//
-// Check to see if one node logically contains another
-//
-DOM.Node.Contains = function(node, container_node)
-{
- while (node != null && node != container_node)
- node = node.parentNode;
- return node != null;
-}
-
-
-//
-// Create the HTML nodes specified in the text passed in
-// Assumes there is only one root node in the text
-//
-DOM.Node.CreateHTML = function(html)
-{
- var div = document.createElement("div");
- div.innerHTML = html;
-
- // First child may be a text node, followed by the created HTML
- var child = div.firstChild;
- if (child != null && child.nodeType == 3)
- child = child.nextSibling;
- return child;
-}
-
-
-//
-// Make a copy of a HTML element, making it visible and clearing its ID to ensure it's not a duplicate
-//
-DOM.Node.Clone = function(name)
-{
- // Get the template element and clone it, making sure it's renderable
- var node = DOM.Node.Get(name);
- node = node.cloneNode(true);
- node.id = null;
- node.style.display = "block";
- return node;
-}
-
-
-//
-// Append an arbitrary block of HTML to an existing node
-//
-DOM.Node.AppendHTML = function(node, html)
-{
- var child = DOM.Node.CreateHTML(html);
- node.appendChild(child);
- return child;
-}
-
-
-//
-// Append a div that clears the float style
-//
-DOM.Node.AppendClearFloat = function(node)
-{
- var div = document.createElement("div");
- div.style.clear = "both";
- node.appendChild(div);
-}
-
-
-//
-// Check to see that the object passed in is an instance of a DOM node
-//
-DOM.Node.IsNode = function(object)
-{
- return object instanceof Element;
-}
-
-
-//
-// Create an "iframe shim" so that elements within it render over a Java Applet
-// http://web.archive.org/web/20110707212850/http://www.oratransplant.nl/2007/10/26/using-iframe-shim-to-partly-cover-a-java-applet/
-//
-DOM.Node.CreateShim = function(parent)
-{
- var shimmer = document.createElement("iframe");
-
- // Position the shimmer so that it's the same location/size as its parent
- shimmer.style.position = "fixed";
- shimmer.style.left = parent.style.left;
- shimmer.style.top = parent.style.top;
- shimmer.style.width = parent.offsetWidth;
- shimmer.style.height = parent.offsetHeight;
-
- // We want the shimmer to be one level below its contents
- shimmer.style.zIndex = parent.style.zIndex - 1;
-
- // Ensure its empty
- shimmer.setAttribute("frameborder", "0");
- shimmer.setAttribute("src", "");
-
- // Add to the document and the parent
- document.body.appendChild(shimmer);
- parent.Shimmer = shimmer;
- return shimmer;
-}
-
-
-
-//
-// =====================================================================================================================
-// ----- EVENT HANDLING EXTENSIONS -------------------------------------------------------------------------------------
-// =====================================================================================================================
-//
-
-
-
-//
-// Retrieves the event from the first parameter passed into an HTML event
-//
-DOM.Event.Get = function(evt)
-{
- // Internet explorer doesn't pass the event
- return window.event || evt;
-}
-
-
-//
-// Retrieves the element that triggered an event from the event object
-//
-DOM.Event.GetNode = function(evt)
-{
- evt = DOM.Event.Get(evt);
-
- // Get the target element
- var element;
- if (evt.target)
- element = evt.target;
- else if (e.srcElement)
- element = evt.srcElement;
-
- // Default Safari bug
- if (element.nodeType == 3)
- element = element.parentNode;
-
- return element;
-}
-
-
-//
-// Stop default action for an event
-//
-DOM.Event.StopDefaultAction = function(evt)
-{
- if (evt && evt.preventDefault)
- evt.preventDefault();
- else if (window.event && window.event.returnValue)
- window.event.returnValue = false;
-}
-
-
-//
-// Stops events bubbling up to parent event handlers
-//
-DOM.Event.StopPropagation = function(evt)
-{
- evt = DOM.Event.Get(evt);
- if (evt)
- {
- evt.cancelBubble = true;
- if (evt.stopPropagation)
- evt.stopPropagation();
- }
-}
-
-
-//
-// Stop both event default action and propagation
-//
-DOM.Event.StopAll = function(evt)
-{
- DOM.Event.StopDefaultAction(evt);
- DOM.Event.StopPropagation(evt);
-}
-
-
-//
-// Adds an event handler to an event
-//
-DOM.Event.AddHandler = function(obj, evt, func)
-{
- if (obj)
- {
- if (obj.addEventListener)
- obj.addEventListener(evt, func, false);
- else if (obj.attachEvent)
- obj.attachEvent("on" + evt, func);
- }
-}
-
-
-//
-// Removes an event handler from an event
-//
-DOM.Event.RemoveHandler = function(obj, evt, func)
-{
- if (obj)
- {
- if (obj.removeEventListener)
- obj.removeEventListener(evt, func, false);
- else if (obj.detachEvent)
- obj.detachEvent("on" + evt, func);
- }
-}
-
-
-//
-// Get the position of the mouse cursor, page relative
-//
-DOM.Event.GetMousePosition = function(evt)
-{
- evt = DOM.Event.Get(evt);
-
- var px = 0;
- var py = 0;
- if (evt.pageX || evt.pageY)
- {
- px = evt.pageX;
- py = evt.pageY;
- }
- else if (evt.clientX || evt.clientY)
- {
- px = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
- py = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
- }
-
- return [px, py];
-}
-
-
-
-//
-// =====================================================================================================================
-// ----- JAVA APPLET EXTENSIONS ----------------------------------------------------------------------------------------
-// =====================================================================================================================
-//
-
-
-
-//
-// Create an applet element for loading a Java applet, attaching it to the specified node
-//
-DOM.Applet.Load = function(dest_id, id, code, archive)
-{
- // Lookup the applet destination
- var dest = DOM.Node.Get(dest_id);
- if (!dest)
- return;
-
- // Construct the applet element and add it to the destination
- Debug.Log("Injecting applet DOM code");
- var applet = "<applet id='" + id + "' code='" + code + "' archive='" + archive + "'";
- applet += " width='" + dest.offsetWidth + "' height='" + dest.offsetHeight + "'>";
- applet += "</applet>";
- dest.innerHTML = applet;
-}
-
-
-//
-// Moves and resizes a named applet so that it fits in the destination div element.
-// The applet must be contained by a div element itself. This container div is moved along
-// with the applet.
-//
-DOM.Applet.Move = function(dest_div, applet, z_index, hide)
-{
- if (!applet || !dest_div)
- return;
-
- // Before modifying any location information, hide the applet so that it doesn't render over
- // any newly visible elements that appear while the location information is being modified.
- if (hide)
- applet.style.visibility = "hidden";
-
- // Get its view rect
- var pos = DOM.Node.GetPosition(dest_div);
- var w = dest_div.offsetWidth;
- var h = dest_div.offsetHeight;
-
- // It needs to be embedded in a <div> for correct scale/position adjustment
- var container = applet.parentNode;
- if (!container || container.localName != "div")
- {
- Debug.Log("ERROR: Couldn't find source applet's div container");
- return;
- }
-
- // Reposition and resize the containing div element
- container.style.left = pos[0];
- container.style.top = pos[1];
- container.style.width = w;
- container.style.height = h;
- container.style.zIndex = z_index;
-
- // Resize the applet itself
- applet.style.width = w;
- applet.style.height = h;
-
- // Everything modified, safe to show
- applet.style.visibility = "visible";
-}
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Keyboard.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Keyboard.js
deleted file mode 100644
index f70f4ea0355..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Keyboard.js
+++ /dev/null
@@ -1,149 +0,0 @@
-
-namespace("Keyboard")
-
-
-// =====================================================================================================================
-// Key codes copied from closure-library
-// https://code.google.com/p/closure-library/source/browse/closure/goog/events/keycodes.js
-// ---------------------------------------------------------------------------------------------------------------------
-// Copyright 2006 The Closure Library Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS-IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-Keyboard.Codes = {
- WIN_KEY_FF_LINUX : 0,
- MAC_ENTER : 3,
- BACKSPACE : 8,
- TAB : 9,
- NUM_CENTER : 12, // NUMLOCK on FF/Safari Mac
- ENTER : 13,
- SHIFT : 16,
- CTRL : 17,
- ALT : 18,
- PAUSE : 19,
- CAPS_LOCK : 20,
- ESC : 27,
- SPACE : 32,
- PAGE_UP : 33, // also NUM_NORTH_EAST
- PAGE_DOWN : 34, // also NUM_SOUTH_EAST
- END : 35, // also NUM_SOUTH_WEST
- HOME : 36, // also NUM_NORTH_WEST
- LEFT : 37, // also NUM_WEST
- UP : 38, // also NUM_NORTH
- RIGHT : 39, // also NUM_EAST
- DOWN : 40, // also NUM_SOUTH
- PRINT_SCREEN : 44,
- INSERT : 45, // also NUM_INSERT
- DELETE : 46, // also NUM_DELETE
- ZERO : 48,
- ONE : 49,
- TWO : 50,
- THREE : 51,
- FOUR : 52,
- FIVE : 53,
- SIX : 54,
- SEVEN : 55,
- EIGHT : 56,
- NINE : 57,
- FF_SEMICOLON : 59, // Firefox (Gecko) fires this for semicolon instead of 186
- FF_EQUALS : 61, // Firefox (Gecko) fires this for equals instead of 187
- FF_DASH : 173, // Firefox (Gecko) fires this for dash instead of 189
- QUESTION_MARK : 63, // needs localization
- A : 65,
- B : 66,
- C : 67,
- D : 68,
- E : 69,
- F : 70,
- G : 71,
- H : 72,
- I : 73,
- J : 74,
- K : 75,
- L : 76,
- M : 77,
- N : 78,
- O : 79,
- P : 80,
- Q : 81,
- R : 82,
- S : 83,
- T : 84,
- U : 85,
- V : 86,
- W : 87,
- X : 88,
- Y : 89,
- Z : 90,
- META : 91, // WIN_KEY_LEFT
- WIN_KEY_RIGHT : 92,
- CONTEXT_MENU : 93,
- NUM_ZERO : 96,
- NUM_ONE : 97,
- NUM_TWO : 98,
- NUM_THREE : 99,
- NUM_FOUR : 100,
- NUM_FIVE : 101,
- NUM_SIX : 102,
- NUM_SEVEN : 103,
- NUM_EIGHT : 104,
- NUM_NINE : 105,
- NUM_MULTIPLY : 106,
- NUM_PLUS : 107,
- NUM_MINUS : 109,
- NUM_PERIOD : 110,
- NUM_DIVISION : 111,
- F1 : 112,
- F2 : 113,
- F3 : 114,
- F4 : 115,
- F5 : 116,
- F6 : 117,
- F7 : 118,
- F8 : 119,
- F9 : 120,
- F10 : 121,
- F11 : 122,
- F12 : 123,
- NUMLOCK : 144,
- SCROLL_LOCK : 145,
-
- // OS-specific media keys like volume controls and browser controls.
- FIRST_MEDIA_KEY : 166,
- LAST_MEDIA_KEY : 183,
-
- SEMICOLON : 186, // needs localization
- DASH : 189, // needs localization
- EQUALS : 187, // needs localization
- COMMA : 188, // needs localization
- PERIOD : 190, // needs localization
- SLASH : 191, // needs localization
- APOSTROPHE : 192, // needs localization
- TILDE : 192, // needs localization
- SINGLE_QUOTE : 222, // needs localization
- OPEN_SQUARE_BRACKET : 219, // needs localization
- BACKSLASH : 220, // needs localization
- CLOSE_SQUARE_BRACKET: 221, // needs localization
- WIN_KEY : 224,
- MAC_FF_META : 224, // Firefox (Gecko) fires this for the meta key instead of 91
- MAC_WK_CMD_LEFT : 91, // WebKit Left Command key fired, same as META
- MAC_WK_CMD_RIGHT : 93, // WebKit Right Command key fired, different from META
- WIN_IME : 229,
-
- // We've seen users whose machines fire this keycode at regular one
- // second intervals. The common thread among these users is that
- // they're all using Dell Inspiron laptops, so we suspect that this
- // indicates a hardware/bios problem.
- // http://en.community.dell.com/support-forums/laptop/f/3518/p/19285957/19523128.aspx
- PHANTOM : 255
-};
-// =====================================================================================================================
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/LocalStore.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/LocalStore.js
deleted file mode 100644
index 5e34206bcf7..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/LocalStore.js
+++ /dev/null
@@ -1,26 +0,0 @@
-
-namespace("LocalStore");
-
-
-LocalStore.Set = function(class_name, class_id, variable_id, data)
-{
- if (typeof(Storage) != "undefined")
- {
- var name = class_name + "_" + class_id + "_" + variable_id;
- localStorage[name] = JSON.stringify(data);
- }
-}
-
-
-LocalStore.Get = function(class_name, class_id, variable_id, default_data)
-{
- if (typeof(Storage) != "undefined")
- {
- var name = class_name + "_" + class_id + "_" + variable_id;
- var data = localStorage[name]
- if (data)
- return JSON.parse(data);
- }
-
- return default_data;
-} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Mouse.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Mouse.js
deleted file mode 100644
index a694b806983..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/Mouse.js
+++ /dev/null
@@ -1,83 +0,0 @@
-
-namespace("Mouse");
-
-
-Mouse.State =(function()
-{
- function State(event)
- {
- // Get button press states
- if (typeof event.buttons != "undefined")
- {
- // Firefox
- this.Left = (event.buttons & 1) != 0;
- this.Right = (event.buttons & 2) != 0;
- this.Middle = (event.buttons & 4) != 0;
- }
- else
- {
- // Chrome
- this.Left = (event.button == 0);
- this.Middle = (event.button == 1);
- this.Right = (event.button == 2);
- }
-
- // Get page-relative mouse position
- this.Position = DOM.Event.GetMousePosition(event);
-
- // Get wheel delta
- var delta = 0;
- if (event.wheelDelta)
- delta = event.wheelDelta / 120; // IE/Opera
- else if (event.detail)
- delta = -event.detail / 3; // Mozilla
- this.WheelDelta = delta;
-
- // Get the mouse position delta
- // Requires Pointer Lock API support
- this.PositionDelta = [
- event.movementX || event.mozMovementX || event.webkitMovementX || 0,
- event.movementY || event.mozMovementY || event.webkitMovementY || 0
- ];
- }
-
- return State;
-})();
-
-
-//
-// Basic Pointer Lock API support
-// https://developer.mozilla.org/en-US/docs/WebAPI/Pointer_Lock
-// http://www.chromium.org/developers/design-documents/mouse-lock
-//
-// Note that API has not been standardised yet so browsers can implement functions with prefixes
-//
-
-
-Mouse.PointerLockSupported = function()
-{
- return 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document;
-}
-
-
-Mouse.RequestPointerLock = function(element)
-{
- element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock;
- if (element.requestPointerLock)
- element.requestPointerLock();
-}
-
-
-Mouse.ExitPointerLock = function()
-{
- document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock;
- if (document.exitPointerLock)
- document.exitPointerLock();
-}
-
-
-// Can use this element to detect whether pointer lock is enabled (returns non-null)
-Mouse.PointerLockElement = function()
-{
- return document.pointerLockElement || document.mozPointerLockElement || document.webkitPointerLockElement;
-}
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/MurmurHash3.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/MurmurHash3.js
deleted file mode 100644
index c423d49debf..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/Core/Code/MurmurHash3.js
+++ /dev/null
@@ -1,68 +0,0 @@
-
-namespace("Hash");
-
-/**
- * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
- *
- * @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
- * @see http://github.com/garycourt/murmurhash-js
- * @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
- * @see http://sites.google.com/site/murmurhash/
- *
- * @param {string} key ASCII only
- * @param {number} seed Positive integer only
- * @return {number} 32-bit positive integer hash
- */
-
-Hash.Murmur3 = function(key, seed)
-{
- var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;
-
- remainder = key.length & 3; // key.length % 4
- bytes = key.length - remainder;
- h1 = seed;
- c1 = 0xcc9e2d51;
- c2 = 0x1b873593;
- i = 0;
-
- while (i < bytes) {
- k1 =
- ((key.charCodeAt(i) & 0xff)) |
- ((key.charCodeAt(++i) & 0xff) << 8) |
- ((key.charCodeAt(++i) & 0xff) << 16) |
- ((key.charCodeAt(++i) & 0xff) << 24);
- ++i;
-
- k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
- k1 = (k1 << 15) | (k1 >>> 17);
- k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
-
- h1 ^= k1;
- h1 = (h1 << 13) | (h1 >>> 19);
- h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
- h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
- }
-
- k1 = 0;
-
- switch (remainder) {
- case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
- case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
- case 1: k1 ^= (key.charCodeAt(i) & 0xff);
-
- k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
- k1 = (k1 << 15) | (k1 >>> 17);
- k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
- h1 ^= k1;
- }
-
- h1 ^= key.length;
-
- h1 ^= h1 >>> 16;
- h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
- h1 ^= h1 >>> 13;
- h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
- h1 ^= h1 >>> 16;
-
- return h1 >>> 0;
-} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Button.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Button.js
deleted file mode 100644
index 12e09815b08..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Button.js
+++ /dev/null
@@ -1,131 +0,0 @@
-
-namespace("WM");
-
-
-WM.Button = (function()
-{
- var template_html = "<div class='Button notextsel'></div>";
-
-
- function Button(text, x, y, opts)
- {
- this.OnClick = null;
- this.Toggle = opts && opts.toggle;
-
- this.Node = DOM.Node.CreateHTML(template_html);
-
- // Set node dimensions
- this.SetPosition(x, y);
- if (opts && opts.w && opts.h)
- this.SetSize(opts.w, opts.h);
-
- // Override the default class name
- if (opts && opts.class)
- this.Node.className = opts.class;
-
- this.SetText(text);
-
- // Create the mouse press event handlers
- DOM.Event.AddHandler(this.Node, "mousedown", Bind(OnMouseDown, this));
- this.OnMouseOutDelegate = Bind(OnMouseUp, this, false);
- this.OnMouseUpDelegate = Bind(OnMouseUp, this, true);
- }
-
-
- Button.prototype.SetPosition = function(x, y)
- {
- this.Position = [ x, y ];
- DOM.Node.SetPosition(this.Node, this.Position);
- }
-
-
- Button.prototype.SetSize = function(w, h)
- {
- this.Size = [ w, h ];
- DOM.Node.SetSize(this.Node, this.Size);
- }
-
-
- Button.prototype.SetText = function(text)
- {
- this.Node.innerHTML = text;
- }
-
-
- Button.prototype.SetOnClick = function(on_click)
- {
- this.OnClick = on_click;
- }
-
-
- Button.prototype.SetState = function(pressed)
- {
- if (pressed)
- DOM.Node.AddClass(this.Node, "ButtonHeld");
- else
- DOM.Node.RemoveClass(this.Node, "ButtonHeld");
- }
-
-
- Button.prototype.ToggleState = function()
- {
- if (DOM.Node.HasClass(this.Node, "ButtonHeld"))
- this.SetState(false);
- else
- this.SetState(true);
- }
-
-
- Button.prototype.IsPressed = function()
- {
- return DOM.Node.HasClass(this.Node, "ButtonHeld");
- }
-
-
- function OnMouseDown(self, evt)
- {
- // Decide how to set the button state
- if (self.Toggle)
- self.ToggleState();
- else
- self.SetState(true);
-
- // Activate release handlers
- DOM.Event.AddHandler(self.Node, "mouseout", self.OnMouseOutDelegate);
- DOM.Event.AddHandler(self.Node, "mouseup", self.OnMouseUpDelegate);
-
- DOM.Event.StopAll(evt);
- }
-
-
- function OnMouseUp(self, confirm, evt)
- {
- if (confirm)
- {
- // Only release for non-toggles
- if (!self.Toggle)
- self.SetState(false);
- }
- else
- {
- // Decide how to set the button state
- if (self.Toggle)
- self.ToggleState();
- else
- self.SetState(false);
- }
-
- // Remove release handlers
- DOM.Event.RemoveHandler(self.Node, "mouseout", self.OnMouseOutDelegate);
- DOM.Event.RemoveHandler(self.Node, "mouseup", self.OnMouseUpDelegate);
-
- // Call the click handler if this is a button press
- if (confirm && self.OnClick)
- self.OnClick(self);
-
- DOM.Event.StopAll(evt);
- }
-
-
- return Button;
-})(); \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/ComboBox.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/ComboBox.js
deleted file mode 100644
index d199b3abda1..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/ComboBox.js
+++ /dev/null
@@ -1,237 +0,0 @@
-
-namespace("WM");
-
-
-WM.ComboBoxPopup = (function()
-{
- var body_template_html = "<div class='ComboBoxPopup'></div>";
-
- var item_template_html = " \
- <div class='ComboBoxPopupItem notextsel'> \
- <div class='ComboBoxPopupItemText'></div> \
- <div class='ComboBoxPopupItemIcon'><img src='BrowserLibImages/tick.gif'></div> \
- <div style='clear:both'></div> \
- </div>";
-
-
- function ComboBoxPopup(combo_box)
- {
- this.ComboBox = combo_box;
- this.ParentNode = combo_box.Node;
- this.ValueNodes = [ ];
-
- // Create the template node
- this.Node = DOM.Node.CreateHTML(body_template_html);
-
- DOM.Event.AddHandler(this.Node, "mousedown", Bind(SelectItem, this));
- this.CancelDelegate = Bind(this, "Cancel");
- }
-
-
- ComboBoxPopup.prototype.SetValues = function(values)
- {
- // Clear existing values
- this.Node.innerHTML = "";
-
- // Generate HTML nodes for each value
- this.ValueNodes = [ ];
- for (var i in values)
- {
- var item_node = DOM.Node.CreateHTML(item_template_html);
- var text_node = DOM.Node.FindWithClass(item_node, "ComboBoxPopupItemText");
-
- item_node.Value = values[i];
- text_node.innerHTML = values[i];
-
- this.Node.appendChild(item_node);
- this.ValueNodes.push(item_node);
- }
- }
-
-
- ComboBoxPopup.prototype.Show = function(selection_index)
- {
- // Initially match the position of the parent node
- var pos = DOM.Node.GetPosition(this.ParentNode);
- DOM.Node.SetPosition(this.Node, pos);
-
- // Take the width/z-index from the parent node
- this.Node.style.width = this.ParentNode.offsetWidth;
- this.Node.style.zIndex = this.ParentNode.style.zIndex + 1;
-
- // Setup event handlers
- DOM.Event.AddHandler(document.body, "mousedown", this.CancelDelegate);
-
- // Show the popup so that the HTML layout engine kicks in before
- // the layout info is used below
- this.ParentNode.appendChild(this.Node);
-
- // Show/hide the tick image based on which node is selected
- for (var i in this.ValueNodes)
- {
- var node = this.ValueNodes[i];
- var icon_node = DOM.Node.FindWithClass(node, "ComboBoxPopupItemIcon");
-
- if (i == selection_index)
- {
- icon_node.style.display = "block";
-
- // Also, shift the popup up so that the mouse is over the selected item and is highlighted
- var item_pos = DOM.Node.GetPosition(this.ValueNodes[selection_index]);
- var diff_pos = [ item_pos[0] - pos[0], item_pos[1] - pos[1] ];
- pos = [ pos[0] - diff_pos[0], pos[1] - diff_pos[1] ];
- }
- else
- {
- icon_node.style.display = "none";
- }
- }
-
- DOM.Node.SetPosition(this.Node, pos);
- }
-
-
- ComboBoxPopup.prototype.Hide = function()
- {
- DOM.Event.RemoveHandler(document.body, "mousedown", this.CancelDelegate);
- this.ParentNode.removeChild(this.Node);
- }
-
-
- function SelectItem(self, evt)
- {
- // Search for which item node is being clicked on
- var node = DOM.Event.GetNode(evt);
- for (var i in self.ValueNodes)
- {
- var value_node = self.ValueNodes[i];
- if (DOM.Node.Contains(node, value_node))
- {
- // Set the value on the combo box
- self.ComboBox.SetValue(value_node.Value);
- self.Hide();
- break;
- }
- }
- }
-
-
- function Cancel(self, evt)
- {
- // Don't cancel if the mouse up is anywhere on the popup or combo box
- var node = DOM.Event.GetNode(evt);
- if (!DOM.Node.Contains(node, self.Node) &&
- !DOM.Node.Contains(node, self.ParentNode))
- {
- self.Hide();
- }
-
-
- DOM.Event.StopAll(evt);
- }
-
-
- return ComboBoxPopup;
-})();
-
-
-WM.ComboBox = (function()
-{
- var template_html = " \
- <div class='ComboBox'> \
- <div class='ComboBoxText notextsel'></div> \
- <div class='ComboBoxIcon'><img src='BrowserLibImages/up_down.gif'></div> \
- <div style='clear:both'></div> \
- </div>";
-
-
- function ComboBox()
- {
- this.OnChange = null;
-
- // Create the template node and locate key nodes
- this.Node = DOM.Node.CreateHTML(template_html);
- this.TextNode = DOM.Node.FindWithClass(this.Node, "ComboBoxText");
-
- // Create a reusable popup
- this.Popup = new WM.ComboBoxPopup(this);
-
- // Set an empty set of values
- this.SetValues([]);
- this.SetValue("&lt;empty&gt;");
-
- // Create the mouse press event handlers
- DOM.Event.AddHandler(this.Node, "mousedown", Bind(OnMouseDown, this));
- this.OnMouseOutDelegate = Bind(OnMouseUp, this, false);
- this.OnMouseUpDelegate = Bind(OnMouseUp, this, true);
- }
-
-
- ComboBox.prototype.SetOnChange = function(on_change)
- {
- this.OnChange = on_change;
- }
-
-
- ComboBox.prototype.SetValues = function(values)
- {
- this.Values = values;
- this.Popup.SetValues(values);
- }
-
-
- ComboBox.prototype.SetValue = function(value)
- {
- // Set the value and its HTML rep
- var old_value = this.Value;
- this.Value = value;
- this.TextNode.innerHTML = value;
-
- // Call change handler
- if (this.OnChange)
- this.OnChange(value, old_value);
- }
-
-
- ComboBox.prototype.GetValue = function()
- {
- return this.Value;
- }
-
-
- function OnMouseDown(self, evt)
- {
- // If this check isn't made, the click will trigger from the popup, too
- var node = DOM.Event.GetNode(evt);
- if (DOM.Node.Contains(node, self.Node))
- {
- // Add the depression class and activate release handlers
- DOM.Node.AddClass(self.Node, "ComboBoxPressed");
- DOM.Event.AddHandler(self.Node, "mouseout", self.OnMouseOutDelegate);
- DOM.Event.AddHandler(self.Node, "mouseup", self.OnMouseUpDelegate);
-
- DOM.Event.StopAll(evt);
- }
- }
-
-
- function OnMouseUp(self, confirm, evt)
- {
- // Remove depression class and remove release handlers
- DOM.Node.RemoveClass(self.Node, "ComboBoxPressed");
- DOM.Event.RemoveHandler(self.Node, "mouseout", self.OnMouseOutDelegate);
- DOM.Event.RemoveHandler(self.Node, "mouseup", self.OnMouseUpDelegate);
-
- // If this is a confirmed press and there are some values in the list, show the popup
- if (confirm && self.Values.length > 0)
- {
- var selection_index = self.Values.indexOf(self.Value);
- self.Popup.Show(selection_index);
- }
-
- DOM.Event.StopAll(evt);
- }
-
-
- return ComboBox;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Container.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Container.js
deleted file mode 100644
index 2ba1388d146..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Container.js
+++ /dev/null
@@ -1,34 +0,0 @@
-
-namespace("WM");
-
-
-WM.Container = (function()
-{
- var template_html = "<div class='Container'></div>";
-
-
- function Container(x, y, w, h)
- {
- // Create a simple container node
- this.Node = DOM.Node.CreateHTML(template_html);
- this.SetPosition(x, y);
- this.SetSize(w, h);
- }
-
-
- Container.prototype.SetPosition = function(x, y)
- {
- this.Position = [ x, y ];
- DOM.Node.SetPosition(this.Node, this.Position);
- }
-
-
- Container.prototype.SetSize = function(w, h)
- {
- this.Size = [ w, h ];
- DOM.Node.SetSize(this.Node, this.Size);
- }
-
-
- return Container;
-})(); \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/EditBox.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/EditBox.js
deleted file mode 100644
index fd0a039450c..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/EditBox.js
+++ /dev/null
@@ -1,119 +0,0 @@
-
-namespace("WM");
-
-
-WM.EditBox = (function()
-{
- var template_html = " \
- <div class='EditBoxContainer'> \
- <div class='EditBoxLabel'>Label</div> \
- <input class='EditBox'> \
- </div>";
-
-
- function EditBox(x, y, w, h, label, text)
- {
- this.ChangeHandler = null;
-
- // Create node and locate its internal nodes
- this.Node = DOM.Node.CreateHTML(template_html);
- this.LabelNode = DOM.Node.FindWithClass(this.Node, "EditBoxLabel");
- this.EditNode = DOM.Node.FindWithClass(this.Node, "EditBox");
-
- // Set label and value
- this.LabelNode.innerHTML = label;
- this.SetValue(text);
-
- this.SetPosition(x, y);
- this.SetSize(w, h);
-
- this.PreviousValue = "";
-
- // Hook up the event handlers
- DOM.Event.AddHandler(this.EditNode, "focus", Bind(OnFocus, this));
- DOM.Event.AddHandler(this.EditNode, "keypress", Bind(OnKeyPress, this));
- DOM.Event.AddHandler(this.EditNode, "keydown", Bind(OnKeyDown, this));
- }
-
-
- EditBox.prototype.SetPosition = function(x, y)
- {
- this.Position = [ x, y ];
- DOM.Node.SetPosition(this.Node, this.Position);
- }
-
-
- EditBox.prototype.SetSize = function(w, h)
- {
- this.Size = [ w, h ];
- DOM.Node.SetSize(this.EditNode, this.Size);
- }
-
-
- EditBox.prototype.SetChangeHandler = function(handler)
- {
- this.ChangeHandler = handler;
- }
-
-
- EditBox.prototype.SetValue = function(value)
- {
- if (this.EditNode)
- this.EditNode.value = value;
- }
-
-
- EditBox.prototype.GetValue = function()
- {
- if (this.EditNode)
- return this.EditNode.value;
-
- return null;
- }
-
-
- EditBox.prototype.LoseFocus = function()
- {
- if (this.EditNode)
- this.EditNode.blur();
- }
-
-
- function OnFocus(self, evt)
- {
- // Backup on focus
- self.PreviousValue = self.EditNode.value;
- }
-
-
- function OnKeyPress(self, evt)
- {
- // Allow enter to confirm the text only when there's data
- if (evt.keyCode == 13 && self.EditNode.value != "" && self.ChangeHandler)
- {
- var focus = self.ChangeHandler(self.EditNode);
- if (!focus)
- self.EditNode.blur();
- self.PreviousValue = "";
- }
- }
-
-
- function OnKeyDown(self, evt)
- {
- // Allow escape to cancel any text changes
- if (evt.keyCode == 27)
- {
- // On initial edit of the input, escape should NOT replace with the empty string
- if (self.PreviousValue != "")
- {
- self.EditNode.value = self.PreviousValue;
- }
-
- self.EditNode.blur();
- }
- }
-
-
- return EditBox;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Grid.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Grid.js
deleted file mode 100644
index 4c35cef91e2..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Grid.js
+++ /dev/null
@@ -1,252 +0,0 @@
-
-namespace("WM");
-
-
-WM.GridRows = (function()
-{
- function GridRows(parent_object)
- {
- this.ParentObject = parent_object;
-
- // Array of rows in the order they were added
- this.Rows = [ ];
-
- // Collection of custom row indexes for fast lookup
- this.Indexes = { };
- }
-
-
- GridRows.prototype.AddIndex = function(cell_field_name)
- {
- var index = { };
-
- // Go through existing rows and add to the index
- for (var i in this.Rows)
- {
- var row = this.Rows[i];
- if (cell_field_name in row.CellData)
- {
- var cell_field = row.CellData[cell_field_name];
- index[cell_field] = row;
- }
- }
-
- this.Indexes[cell_field_name] = index;
- }
-
-
- GridRows.prototype.ClearIndex = function(index_name)
- {
- this.Indexes[index_name] = { };
- }
-
- GridRows.prototype.AddRowToIndex = function(index_name, cell_data, row)
- {
- this.Indexes[index_name][cell_data] = row;
- }
-
-
- GridRows.prototype.Add = function(cell_data, row_classes, cell_classes)
- {
- var row = new WM.GridRow(this.ParentObject, cell_data, row_classes, cell_classes);
- this.Rows.push(row);
- return row;
- }
-
-
- GridRows.prototype.GetBy = function(cell_field_name, cell_data)
- {
- var index = this.Indexes[cell_field_name];
- return index[cell_data];
- }
-
-
- GridRows.prototype.Clear = function()
- {
- // Remove all node references from the parent
- for (var i in this.Rows)
- {
- var row = this.Rows[i];
- row.Parent.BodyNode.removeChild(row.Node);
- }
-
- // Clear all indexes
- for (var i in this.Indexes)
- this.Indexes[i] = { };
-
- this.Rows = [ ];
- }
-
-
- return GridRows;
-})();
-
-
-WM.GridRow = (function()
-{
- var template_html = "<div class='GridRow'></div>";
-
-
- //
- // 'cell_data' is an object with a variable number of fields.
- // Any fields prefixed with an underscore are hidden.
- //
- function GridRow(parent, cell_data, row_classes, cell_classes)
- {
- // Setup data
- this.Parent = parent;
- this.IsOpen = true;
- this.AnimHandle = null;
- this.Rows = new WM.GridRows(this);
- this.CellData = cell_data;
- this.CellNodes = { }
-
- // Create the main row node
- this.Node = DOM.Node.CreateHTML(template_html);
- if (row_classes)
- DOM.Node.AddClass(this.Node, row_classes);
-
- // Embed a pointer to the row in the root node so that it can be clicked
- this.Node.GridRow = this;
-
- // Create nodes for each required cell
- for (var attr in this.CellData)
- {
- if (this.CellData.hasOwnProperty(attr))
- {
- var data = this.CellData[attr];
-
- // Update any grid row index references
- if (attr in parent.Rows.Indexes)
- parent.Rows.AddRowToIndex(attr, data, this);
-
- // Hide any cells with underscore prefixes
- if (attr[0] == "_")
- continue;
-
- // Create a node for the cell and add any custom classes
- var node = DOM.Node.AppendHTML(this.Node, "<div class='GridRowCell'></div>");
- if (cell_classes && attr in cell_classes)
- DOM.Node.AddClass(node, cell_classes[attr]);
- this.CellNodes[attr] = node;
-
- // If this is a Window Control, add its node to the cell
- if (data instanceof Object && "Node" in data && DOM.Node.IsNode(data.Node))
- {
- data.ParentNode = node;
- node.appendChild(data.Node);
- }
-
- else
- {
- // Otherwise just assign the data as text
- node.innerHTML = data;
- }
- }
- }
-
- // Add the body node for any children
- DOM.Node.AppendClearFloat(this.Node);
- this.BodyNode = DOM.Node.AppendHTML(this.Node, "<div class='GridRowBody'></div>");
-
- // Add the row to the parent
- this.Parent.BodyNode.appendChild(this.Node);
- }
-
-
- GridRow.prototype.Open = function()
- {
- // Don't allow open while animating
- if (this.AnimHandle == null || this.AnimHandle.Complete)
- {
- this.IsOpen = true;
-
- // Kick off open animation
- var node = this.BodyNode;
- this.AnimHandle = Anim.Animate(
- function (val) { DOM.Node.SetHeight(node, val) },
- 0, this.Height, 0.2);
- }
- }
-
-
- GridRow.prototype.Close = function()
- {
- // Don't allow close while animating
- if (this.AnimHandle == null || this.AnimHandle.Complete)
- {
- this.IsOpen = false;
-
- // Record height for the next open request
- this.Height = this.BodyNode.offsetHeight;
-
- // Kick off close animation
- var node = this.BodyNode;
- this.AnimHandle = Anim.Animate(
- function (val) { DOM.Node.SetHeight(node, val) },
- this.Height, 0, 0.2);
- }
- }
-
-
- GridRow.prototype.Toggle = function()
- {
- if (this.IsOpen)
- this.Close();
- else
- this.Open();
- }
-
-
- return GridRow;
-})();
-
-
-WM.Grid = (function()
-{
- var template_html = " \
- <div class='Grid'> \
- <div class='GridBody'></div> \
- </div>";
-
-
- function Grid(x, y, width, height)
- {
- this.Rows = new WM.GridRows(this);
-
- this.Node = DOM.Node.CreateHTML(template_html);
- this.BodyNode = DOM.Node.FindWithClass(this.Node, "GridBody");
-
- DOM.Node.SetPosition(this.Node, [ x, y ]);
- DOM.Node.SetSize(this.Node, [ width, height ]);
-
- DOM.Event.AddHandler(this.Node, "dblclick", OnDblClick);
-
- var mouse_wheel_event = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel";
- DOM.Event.AddHandler(this.Node, mouse_wheel_event, Bind(OnMouseScroll, this));
- }
-
-
- function OnDblClick(evt)
- {
- // Clicked on a header?
- var node = DOM.Event.GetNode(evt);
- if (DOM.Node.HasClass(node, "GridRowName"))
- {
- // Toggle rows open/close
- var row = node.parentNode.GridRow;
- if (row)
- row.Toggle();
- }
- }
-
-
- function OnMouseScroll(self, evt)
- {
- var mouse_state = new Mouse.State(evt);
- self.Node.scrollTop -= mouse_state.WheelDelta * 20;
- }
-
-
- return Grid;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Label.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Label.js
deleted file mode 100644
index 9b1d8525117..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Label.js
+++ /dev/null
@@ -1,31 +0,0 @@
-
-namespace("WM");
-
-
-WM.Label = (function()
-{
- var template_html = "<div class='Label'></div>";
-
-
- function Label(x, y, text)
- {
- // Create the node
- this.Node = DOM.Node.CreateHTML(template_html);
-
- // Allow position to be optional
- if (x != null && y != null)
- DOM.Node.SetPosition(this.Node, [x, y]);
-
- this.SetText(text);
- }
-
-
- Label.prototype.SetText = function(text)
- {
- if (text != null)
- this.Node.innerHTML = text;
- }
-
-
- return Label;
-})(); \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Treeview.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Treeview.js
deleted file mode 100644
index 66ef80ed1fe..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Treeview.js
+++ /dev/null
@@ -1,352 +0,0 @@
-
-namespace("WM");
-
-
-WM.Treeview = (function()
-{
- var Margin = 10;
-
-
- var tree_template_html = " \
- <div class='Treeview'> \
- <div class='TreeviewItemChildren' style='width:90%;float:left'></div> \
- <div class='TreeviewScrollbarInset'> \
- <div class='TreeviewScrollbar'></div> \
- </div> \
- <div style='clear:both'></div> \
- </div>";
-
-
- var item_template_html = " \
- <div class='TreeViewItem basicfont notextsel'> \
- <img src='' class='TreeviewItemImage'> \
- <div class='TreeviewItemText'></div> \
- <div style='clear:both'></div> \
- <div class='TreeviewItemChildren'></div> \
- <div style='clear:both'></div> \
- </div>";
-
-
- // TODO: Remove parent_node (required for stuff that doesn't use the WM yet)
- function Treeview(x, y, width, height, parent_node)
- {
- // Cache initialisation options
- this.ParentNode = parent_node;
- this.Position = [ x, y ];
- this.Size = [ width, height ];
-
- this.Node = null;
- this.ScrollbarNode = null;
- this.SelectedItem = null;
- this.ContentsNode = null;
-
- // Setup options
- this.HighlightOnHover = false;
- this.EnableScrollbar = true;
- this.HorizontalLayoutDepth = 1;
-
- // Generate an empty tree
- this.Clear();
- }
-
-
- Treeview.prototype.SetHighlightOnHover = function(highlight)
- {
- this.HighlightOnHover = highlight;
- }
-
-
- Treeview.prototype.SetEnableScrollbar = function(enable)
- {
- this.EnableScrollbar = enable;
- }
-
-
- Treeview.prototype.SetHorizontalLayoutDepth = function(depth)
- {
- this.HorizontalLayoutDepth = depth;
- }
-
-
- Treeview.prototype.SetNodeSelectedHandler = function(handler)
- {
- this.NodeSelectedHandler = handler;
- }
-
-
- Treeview.prototype.Clear = function()
- {
- this.RootItem = new WM.TreeviewItem(this, null, null, null, null);
- this.GenerateHTML();
- }
-
-
- Treeview.prototype.Root = function()
- {
- return this.RootItem;
- }
-
-
- Treeview.prototype.ClearSelection = function()
- {
- if (this.SelectedItem != null)
- {
- DOM.Node.RemoveClass(this.SelectedItem.Node, "TreeviewItemSelected");
- this.SelectedItem = null;
- }
- }
-
-
- Treeview.prototype.SelectItem = function(item, mouse_pos)
- {
- // Notify the select handler
- if (this.NodeSelectedHandler)
- this.NodeSelectedHandler(item.Node, this.SelectedItem, item, mouse_pos);
-
- // Remove highlight from the old selection
- this.ClearSelection();
-
- // Swap in new selection and apply highlight
- this.SelectedItem = item;
- DOM.Node.AddClass(this.SelectedItem.Node, "TreeviewItemSelected");
- }
-
-
- Treeview.prototype.GenerateHTML = function()
- {
- // Clone the template and locate important nodes
- var old_node = this.Node;
- this.Node = DOM.Node.CreateHTML(tree_template_html);
- this.ChildrenNode = DOM.Node.FindWithClass(this.Node, "TreeviewItemChildren");
- this.ScrollbarNode = DOM.Node.FindWithClass(this.Node, "TreeviewScrollbar");
-
- DOM.Node.SetPosition(this.Node, this.Position);
- DOM.Node.SetSize(this.Node, this.Size);
-
- // Generate the contents of the treeview
- GenerateTree(this, this.ChildrenNode, this.RootItem.Children, 0);
-
- // Cross-browser (?) means of adding a mouse wheel handler
- var mouse_wheel_event = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel";
- DOM.Event.AddHandler(this.Node, mouse_wheel_event, Bind(OnMouseScroll, this));
-
- DOM.Event.AddHandler(this.Node, "dblclick", Bind(OnMouseDoubleClick, this));
- DOM.Event.AddHandler(this.Node, "mousedown", Bind(OnMouseDown, this));
- DOM.Event.AddHandler(this.Node, "mouseup", OnMouseUp);
-
- // Swap in the newly generated control node if it's already been attached to a parent
- if (old_node && old_node.parentNode)
- {
- old_node.parentNode.removeChild(old_node);
- this.ParentNode.appendChild(this.Node);
- }
-
- if (this.EnableScrollbar)
- {
- this.UpdateScrollbar();
- DOM.Event.AddHandler(this.ScrollbarNode, "mousedown", Bind(OnMouseDown_Scrollbar, this));
- DOM.Event.AddHandler(this.ScrollbarNode, "mouseup", Bind(OnMouseUp_Scrollbar, this));
- DOM.Event.AddHandler(this.ScrollbarNode, "mouseout", Bind(OnMouseUp_Scrollbar, this));
- DOM.Event.AddHandler(this.ScrollbarNode, "mousemove", Bind(OnMouseMove_Scrollbar, this));
- }
-
- else
- {
- DOM.Node.Hide(DOM.Node.FindWithClass(this.Node, "TreeviewScrollbarInset"));
- }
- }
-
-
- Treeview.prototype.UpdateScrollbar = function()
- {
- if (!this.EnableScrollbar)
- return;
-
- var scrollbar_scale = Math.min((this.Node.offsetHeight - Margin * 2) / this.ChildrenNode.offsetHeight, 1);
- this.ScrollbarNode.style.height = parseInt(scrollbar_scale * 100) + "%";
-
- // Shift the scrollbar container along with the parent window
- this.ScrollbarNode.parentNode.style.top = this.Node.scrollTop;
-
- var scroll_fraction = this.Node.scrollTop / (this.Node.scrollHeight - this.Node.offsetHeight);
- var max_height = this.Node.offsetHeight - Margin;
- var max_scrollbar_offset = max_height - this.ScrollbarNode.offsetHeight;
- var scrollbar_offset = scroll_fraction * max_scrollbar_offset;
- this.ScrollbarNode.style.top = scrollbar_offset;
- }
-
-
- function GenerateTree(self, parent_node, items, depth)
- {
- if (items.length == 0)
- return null;
-
- for (var i in items)
- {
- var item = items[i];
-
- // Create the node for this item and locate important nodes
- var node = DOM.Node.CreateHTML(item_template_html);
- var img = DOM.Node.FindWithClass(node, "TreeviewItemImage");
- var text = DOM.Node.FindWithClass(node, "TreeviewItemText");
- var children = DOM.Node.FindWithClass(node, "TreeviewItemChildren");
-
- // Attach the item to the node
- node.TreeviewItem = item;
- item.Node = node;
-
- // Add the class which highlights selection on hover
- if (self.HighlightOnHover)
- DOM.Node.AddClass(node, "TreeviewItemHover");
-
- // Instruct the children to wrap around
- if (depth >= self.HorizontalLayoutDepth)
- node.style.cssFloat = "left";
-
- if (item.OpenImage == null || item.CloseImage == null)
- {
- // If there no images, remove the image node
- node.removeChild(img);
- }
- else
- {
- // Set the image source to open
- img.src = item.OpenImage.src;
- img.style.width = item.OpenImage.width;
- img.style.height = item.OpenImage.height;
- item.ImageNode = img;
- }
-
- // Setup the text to display
- text.innerHTML = item.Label;
-
- // Add the div to the parent and recurse into children
- parent_node.appendChild(node);
- GenerateTree(self, children, item.Children, depth + 1);
- item.ChildrenNode = children;
- }
-
- // Clear the wrap-around
- if (depth >= self.HorizontalLayoutDepth)
- DOM.Node.AppendClearFloat(parent_node.parentNode);
- }
-
-
- function OnMouseScroll(self, evt)
- {
- // Get mouse wheel movement
- var delta = evt.detail ? evt.detail * -1 : evt.wheelDelta;
- delta *= 8;
-
- // Scroll the main window with wheel movement and clamp
- self.Node.scrollTop -= delta;
- self.Node.scrollTop = Math.min(self.Node.scrollTop, (self.ChildrenNode.offsetHeight - self.Node.offsetHeight) + Margin * 2);
-
- self.UpdateScrollbar();
- }
-
-
- function OnMouseDoubleClick(self, evt)
- {
- DOM.Event.StopDefaultAction(evt);
-
- // Get the tree view item being clicked, if any
- var node = DOM.Event.GetNode(evt);
- var tvitem = GetTreeviewItemFromNode(self, node);
- if (tvitem == null)
- return;
-
- if (tvitem.Children.length)
- tvitem.Toggle();
- }
-
-
- function OnMouseDown(self, evt)
- {
- DOM.Event.StopDefaultAction(evt);
-
- // Get the tree view item being clicked, if any
- var node = DOM.Event.GetNode(evt);
- var tvitem = GetTreeviewItemFromNode(self, node);
- if (tvitem == null)
- return;
-
- // If clicking on the image, expand any children
- if (node.tagName == "IMG" && tvitem.Children.length)
- {
- tvitem.Toggle();
- }
-
- else
- {
- var mouse_pos = DOM.Event.GetMousePosition(evt);
- self.SelectItem(tvitem, mouse_pos);
- }
- }
-
-
- function OnMouseUp(evt)
- {
- // Event handler used merely to stop events bubbling up to containers
- DOM.Event.StopPropagation(evt);
- }
-
-
- function OnMouseDown_Scrollbar(self, evt)
- {
- self.ScrollbarHeld = true;
-
- // Cache the mouse height relative to the scrollbar
- self.LastY = evt.clientY;
- self.ScrollY = self.Node.scrollTop;
-
- DOM.Node.AddClass(self.ScrollbarNode, "TreeviewScrollbarHeld");
- DOM.Event.StopDefaultAction(evt);
- }
-
-
- function OnMouseUp_Scrollbar(self, evt)
- {
- self.ScrollbarHeld = false;
- DOM.Node.RemoveClass(self.ScrollbarNode, "TreeviewScrollbarHeld");
- }
-
-
- function OnMouseMove_Scrollbar(self, evt)
- {
- if (self.ScrollbarHeld)
- {
- var delta_y = evt.clientY - self.LastY;
- self.LastY = evt.clientY;
-
- var max_height = self.Node.offsetHeight - Margin;
- var max_scrollbar_offset = max_height - self.ScrollbarNode.offsetHeight;
- var max_contents_scroll = self.Node.scrollHeight - self.Node.offsetHeight;
- var scale = max_contents_scroll / max_scrollbar_offset;
-
- // Increment the local float variable and assign, as scrollTop is of type int
- self.ScrollY += delta_y * scale;
- self.Node.scrollTop = self.ScrollY;
- self.Node.scrollTop = Math.min(self.Node.scrollTop, (self.ChildrenNode.offsetHeight - self.Node.offsetHeight) + Margin * 2);
-
- self.UpdateScrollbar();
- }
- }
-
-
- function GetTreeviewItemFromNode(self, node)
- {
- // Walk up toward the tree view node looking for this first item
- while (node && node != self.Node)
- {
- if ("TreeviewItem" in node)
- return node.TreeviewItem;
-
- node = node.parentNode;
- }
-
- return null;
- }
-
- return Treeview;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/TreeviewItem.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/TreeviewItem.js
deleted file mode 100644
index ac6133e820a..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/TreeviewItem.js
+++ /dev/null
@@ -1,109 +0,0 @@
-
-namespace("WM");
-
-
-WM.TreeviewItem = (function()
-{
- function TreeviewItem(treeview, name, data, open_image, close_image)
- {
- // Assign members
- this.Treeview = treeview;
- this.Label = name;
- this.Data = data;
- this.OpenImage = open_image;
- this.CloseImage = close_image;
-
- this.Children = [ ];
-
- // The HTML node wrapping the item and its children
- this.Node = null;
-
- // The HTML node storing the image for the open/close state feedback
- this.ImageNode = null;
-
- // The HTML node storing just the children
- this.ChildrenNode = null;
-
- // Animation handle for opening and closing the child nodes, only used
- // if the tree view item as children
- this.AnimHandle = null;
-
- // Open state of the item
- this.IsOpen = true;
- }
-
-
- TreeviewItem.prototype.AddItem = function(name, data, open_image, close_image)
- {
- var item = new WM.TreeviewItem(this.Treeview, name, data, open_image, close_image);
- this.Children.push(item);
- return item;
- }
-
-
- TreeviewItem.prototype.Open = function()
- {
- if (this.AnimHandle == null || this.AnimHandle.Complete)
- {
- // Swap to the open state
- this.IsOpen = true;
- if (this.ImageNode != null && this.OpenImage != null)
- this.ImageNode.src = this.OpenImage.src;
-
- // Cache for closure binding
- var child_node = this.ChildrenNode;
- var end_height = this.StartHeight;
- var treeview = this.Treeview;
-
- // Reveal the children and animate their height to max
- this.ChildrenNode.style.display = "block";
- this.AnimHandle = Anim.Animate(
- function (val) { DOM.Node.SetHeight(child_node, val) },
- 0, end_height, 0.2,
- function() { treeview.UpdateScrollbar(); });
-
- // Fade the children in
- Anim.Animate(function(val) { DOM.Node.SetOpacity(child_node, val) }, 0, 1, 0.2);
- }
- }
-
-
- TreeviewItem.prototype.Close = function()
- {
- if (this.AnimHandle == null || this.AnimHandle.Complete)
- {
- // Swap to the close state
- this.IsOpen = false;
- if (this.ImageNode != null && this.CloseImage != null)
- this.ImageNode.src = this.CloseImage.src;
-
- // Cache for closure binding
- var child_node = this.ChildrenNode;
- var treeview = this.Treeview;
-
- // Mark the height of the item for reload later
- this.StartHeight = child_node.offsetHeight;
-
- // Shrink the height of the children and hide them upon completion
- this.AnimHandle = Anim.Animate(
- function (val) { DOM.Node.SetHeight(child_node, val) },
- this.ChildrenNode.offsetHeight, 0, 0.2,
- function() { child_node.style.display = "none"; treeview.UpdateScrollbar(); });
-
- // Fade the children out
- Anim.Animate(function(val) { DOM.Node.SetOpacity(child_node, val) }, 1, 0, 0.2);
- }
- }
-
-
- TreeviewItem.prototype.Toggle = function()
- {
- if (this.IsOpen)
- this.Close();
- else
- this.Open();
- }
-
-
- return TreeviewItem;
-})();
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Window.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Window.js
deleted file mode 100644
index e5e986f7d04..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/Window.js
+++ /dev/null
@@ -1,243 +0,0 @@
-
-namespace("WM");
-
-
-WM.Window = (function()
-{
- var template_html = " \
- <div class='Window'> \
- <div class='WindowTitleBar'> \
- <div class='WindowTitleBarText notextsel' style='float:left'>Window Title Bar</div> \
- <div class='WindowTitleBarClose notextsel' style='float:right'>O</div> \
- </div> \
- <div class='WindowBody'> \
- </div> \
- </div>";
-
-
- function Window(manager, title, x, y, width, height, parent_node)
- {
- this.Manager = manager;
- this.ParentNode = parent_node || document.body;
- this.OnMove = null;
- this.Visible = false;
- this.AnimatedShow = false;
-
- // Clone the window template and locate key nodes within it
- this.Node = DOM.Node.CreateHTML(template_html);
- this.TitleBarNode = DOM.Node.FindWithClass(this.Node, "WindowTitleBar");
- this.TitleBarTextNode = DOM.Node.FindWithClass(this.Node, "WindowTitleBarText");
- this.TitleBarCloseNode = DOM.Node.FindWithClass(this.Node, "WindowTitleBarClose");
- this.BodyNode = DOM.Node.FindWithClass(this.Node, "WindowBody");
-
- // Setup the position and dimensions of the window
- this.SetPosition(x, y);
- this.SetSize(width, height);
-
- // Set the title text
- this.TitleBarTextNode.innerHTML = title;
-
- // Hook up event handlers
- DOM.Event.AddHandler(this.Node, "mousedown", Bind(this, "SetTop"));
- DOM.Event.AddHandler(this.TitleBarNode, "mousedown", Bind(this, "BeginMove"));
- DOM.Event.AddHandler(this.TitleBarCloseNode, "mousedown", Bind(this, "Hide"));
-
- // Create delegates for removable handlers
- this.MoveDelegate = Bind(this, "Move");
- this.EndMoveDelegate = Bind(this, "EndMove");
- }
-
-
- Window.prototype.SetOnMove = function(on_move)
- {
- this.OnMove = on_move;
- }
-
-
- Window.prototype.Show = function()
- {
- if (this.Node.parentNode != this.ParentNode)
- {
- this.ShowNoAnim();
- Anim.Animate(Bind(this, "OpenAnimation"), 0, 1, 1);
- }
- }
-
-
- Window.prototype.ShowNoAnim = function()
- {
- // Add to the document
- this.ParentNode.appendChild(this.Node);
- this.AnimatedShow = false;
- this.Visible = true;
- }
-
-
- Window.prototype.Hide = function()
- {
- if (this.Node.parentNode == this.ParentNode)
- {
- if (this.AnimatedShow)
- {
- // Trigger animation that ends with removing the window from the document
- Anim.Animate(
- Bind(this, "CloseAnimation"),
- 0, 1, 0.25,
- Bind(this, "HideNoAnim"));
- }
- else
- {
- this.HideNoAnim();
- }
- }
- }
-
-
- Window.prototype.HideNoAnim = function()
- {
- // Remove node
- this.ParentNode.removeChild(this.Node);
- this.Visible = false;
- }
-
-
- Window.prototype.SetTop = function()
- {
- this.Manager.SetTopWindow(this);
- }
-
-
-
- Window.prototype.SetTitle = function(title)
- {
- this.TitleBarTextNode.innerHTML = title;
- }
-
-
- // TODO: Update this
- Window.prototype.AddControl = function(control)
- {
- // Get all arguments to this function and replace the first with this window node
- var args = [].slice.call(arguments);
- args[0] = this.BodyNode;
-
- // Create the control and call its Init method with the modified arguments
- var instance = new control();
- instance.Init.apply(instance, args);
-
- return instance;
- }
-
-
- Window.prototype.AddControlNew = function(control)
- {
- control.ParentNode = this.BodyNode;
- this.BodyNode.appendChild(control.Node);
- return control;
- }
-
-
- Window.prototype.Scale = function(t)
- {
- // Calculate window bounds centre/extents
- var ext_x = this.Size[0] / 2;
- var ext_y = this.Size[1] / 2;
- var mid_x = this.Position[0] + ext_x;
- var mid_y = this.Position[1] + ext_y;
-
- // Scale from the mid-point
- DOM.Node.SetPosition(this.Node, [ mid_x - ext_x * t, mid_y - ext_y * t ]);
- DOM.Node.SetSize(this.Node, [ this.Size[0] * t, this.Size[1] * t ]);
- }
-
-
- Window.prototype.OpenAnimation = function(val)
- {
- // Power ease in
- var t = 1 - Math.pow(1 - val, 8);
- this.Scale(t);
- DOM.Node.SetOpacity(this.Node, 1 - Math.pow(1 - val, 8));
- this.AnimatedShow = true;
- }
-
-
- Window.prototype.CloseAnimation = function(val)
- {
- // Power ease out
- var t = 1 - Math.pow(val, 4);
- this.Scale(t);
- DOM.Node.SetOpacity(this.Node, t);
- }
-
-
- Window.prototype.NotifyChange = function()
- {
- if (this.OnMove)
- {
- var pos = DOM.Node.GetPosition(this.Node);
- this.OnMove(this, pos);
- }
- }
-
-
- Window.prototype.BeginMove = function(evt)
- {
- // Calculate offset of the window from the mouse down position
- var mouse_pos = DOM.Event.GetMousePosition(evt);
- this.Offset = [ mouse_pos[0] - this.Position[0], mouse_pos[1] - this.Position[1] ];
-
- // Dynamically add handlers for movement and release
- DOM.Event.AddHandler(document, "mousemove", this.MoveDelegate);
- DOM.Event.AddHandler(document, "mouseup", this.EndMoveDelegate);
-
- DOM.Event.StopDefaultAction(evt);
- }
-
-
- Window.prototype.Move = function(evt)
- {
- // Use the offset at the beginning of movement to drag the window around
- var mouse_pos = DOM.Event.GetMousePosition(evt);
- var offset = this.Offset;
- var pos = [ mouse_pos[0] - offset[0], mouse_pos[1] - offset[1] ];
- this.SetPosition(pos[0], pos[1]);
-
- if (this.OnMove)
- this.OnMove(this, pos);
-
- DOM.Event.StopDefaultAction(evt);
- }
-
-
- Window.prototype.EndMove = function(evt)
- {
- // Remove handlers added during mouse down
- DOM.Event.RemoveHandler(document, "mousemove", this.MoveDelegate);
- DOM.Event.RemoveHandler(document, "mouseup", this.EndMoveDelegate);
-
- DOM.Event.StopDefaultAction(evt);
- }
-
-
- Window.prototype.SetPosition = function(x, y)
- {
- this.Position = [ x, y ];
- DOM.Node.SetPosition(this.Node, this.Position);
- }
-
-
- Window.prototype.SetSize = function(w, h)
- {
- this.Size = [ w, h ];
- DOM.Node.SetSize(this.Node, this.Size);
- }
-
-
- Window.prototype.GetZIndex = function()
- {
- return parseInt(this.Node.style.zIndex);
- }
-
-
- return Window;
-})(); \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/WindowManager.js b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/WindowManager.js
deleted file mode 100644
index bef33c2f1f0..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Code/WindowManager.js
+++ /dev/null
@@ -1,54 +0,0 @@
-
-namespace("WM");
-
-
-WM.WindowManager = (function()
-{
- function WindowManager()
- {
- // An empty list of windows under window manager control
- this.Windows = [ ];
- }
-
-
- WindowManager.prototype.AddWindow = function(title, x, y, width, height, parent_node)
- {
- // Create the window and add it to the list of windows
- var wnd = new WM.Window(this, title, x, y, width, height, parent_node);
- this.Windows.push(wnd);
-
- // Always bring to the top on creation
- wnd.SetTop();
-
- return wnd;
- }
-
-
- WindowManager.prototype.SetTopWindow = function(top_wnd)
- {
- // Bring the window to the top of the window list
- var top_wnd_index = this.Windows.indexOf(top_wnd);
- if (top_wnd_index != -1)
- this.Windows.splice(top_wnd_index, 1);
- this.Windows.push(top_wnd);
-
- // Set a CSS z-index for each visible window from the bottom up
- for (var i in this.Windows)
- {
- var wnd = this.Windows[i];
- if (!wnd.Visible)
- continue;
-
- // Ensure there's space between each window for the elements inside to be sorted
- var z = (parseInt(i) + 1) * 10;
- wnd.Node.style.zIndex = z;
-
- // Notify window that its z-order has changed
- wnd.NotifyChange();
- }
- }
-
-
- return WindowManager;
-
-})(); \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Styles/WindowManager.css b/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Styles/WindowManager.css
deleted file mode 100644
index 169a57ded9d..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/extern/BrowserLib/WindowManager/Styles/WindowManager.css
+++ /dev/null
@@ -1,546 +0,0 @@
-
-
-.notextsel
-{
- /* Disable text selection so that it doesn't interfere with button-clicking */
- user-select:none;
-
- /* Stops the text cursor over the label */
- cursor:default;
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------------------------ */
-/* Window Styles */
-/* ------------------------------------------------------------------------------------------------------------------ */
-
-
-
-.Window
-{
- /* Allows movement of the window to exceed browser region without triggering scroll bars */
- position:fixed;
-
- /* Clip all contents to the window border */
- overflow: hidden;
-
- background: #404040;
-
- border-radius: 5px;
- -moz-border-radius: 5px;
-
- -webkit-box-shadow: 3px 3px 3px #111, 1px 1px 1px #606060 inset;
- box-shadow: 3px 3px 3px #111, 1px 1px 1px #606060 inset;
-}
-
-.Window_Transparent
-{
- /* Set transparency changes to fade in/out */
- opacity: 0.5;
- transition: opacity 0.5s ease-out;
- -moz-transition: opacity 0.5s ease-out;
- -webkit-transition: opacity 0.5s ease-out;
-}
-
-.Window_Transparent:hover
-{
- opacity: 1;
-}
-
-.WindowTitleBar
-{
- height: 17px;
- cursor: move;
-
- border-bottom: 1px solid #303030;
- border-radius: 5px;
-}
-
-.WindowTitleBarText
-{
- color: #BBB;
- font: 9px Verdana;
-
- padding: 3px;
- cursor: move;
-}
-
-.WindowTitleBarClose
-{
- color: #999999;
- font: 9px Verdana;
-
- padding: 3px;
- cursor: default;
-}
-
-.WindowBody
-{
- /* Turns this node into a "positioned node" so that its children can be placed relative to it */
- position: absolute;
-
- /* Fill the parent window node */
- width: 100%;
- height: 100%;
-
- padding:10px;
- border-top: 1px solid #606060;
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------------------------ */
-/* Container Styles */
-/* ------------------------------------------------------------------------------------------------------------------ */
-
-
-
-.Container
-{
- /* Position relative to the parent window */
- position: absolute;
-
- background:#2C2C2C;
-
- border: 1px black solid;
-
- /* Two inset box shadows to simulate depressing */
- -webkit-box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
- box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------------------------ */
-/* Treeview Styles */
-/* ------------------------------------------------------------------------------------------------------------------ */
-
-
-
-.Treeview
-{
- position: absolute;
-
- background:#2C2C2C;
- border: 1px solid black;
- overflow:hidden;
-
- /* Two inset box shadows to simulate depressing */
- -webkit-box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
- box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
-}
-
-.TreeviewItem
-{
- margin:1px;
- padding:2px;
- border:solid 1px #2C2C2C;
- background-color:#2C2C2C;
-}
-
-.TreeviewItemImage
-{
- float: left;
-}
-
-.TreeviewItemText
-{
- float: left;
- margin-left:4px;
-}
-
-.TreeviewItemChildren
-{
- overflow: hidden;
-}
-
-.TreeviewItemSelected
-{
- background-color:#444;
- border-color:#FFF;
-
- -webkit-transition: background-color 0.2s ease-in-out;
- -moz-transition: background-color 0.2s ease-in-out;
- -webkit-transition: border-color 0.2s ease-in-out;
- -moz-transition: border-color 0.2s ease-in-out;
-}
-
-/* Used to populate treeviews that want highlight on hover behaviour */
-.TreeviewItemHover
-{
-}
-
-.TreeviewItemHover:hover
-{
- background-color:#111;
- border-color:#444;
-
- -webkit-transition: background-color 0.2s ease-in-out;
- -moz-transition: background-color 0.2s ease-in-out;
- -webkit-transition: border-color 0.2s ease-in-out;
- -moz-transition: border-color 0.2s ease-in-out;
-}
-
-.TreeviewScrollbarInset
-{
- float: right;
-
- position:relative;
-
- height: 100%;
-
- /* CRAZINESS PART A: Trying to get the inset and scrollbar to have 100% height match its container */
- margin: -8px -8px 0 0;
- padding: 0 1px 14px 1px;
-
- width:20px;
- background:#2C2C2C;
- border: 1px solid black;
-
- /* Two inset box shadows to simulate depressing */
- -webkit-box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
- box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
-}
-
-.TreeviewScrollbar
-{
- position:relative;
-
- background:#2C2C2C;
- border: 1px solid black;
-
- /* CRAZINESS PART B: Trying to get the inset and scrollbar to have 100% height match its container */
- padding: 0 0 10px 0;
- margin: 1px 0 0 0;
-
- width: 18px;
- height: 100%;
-
- border-radius:6px;
- border-color:#000;
- border-width:1px;
- border-style:solid;
-
- /* The gradient for the button background */
- background-color:#666;
- background: -webkit-gradient(linear, left top, left bottom, from(#666), to(#383838));
- background: -moz-linear-gradient(top, #666, #383838);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#383838');
-
- /* A box shadow and inset box highlight */
- -webkit-box-shadow: 1px 1px 1px #222, 1px 1px 1px #777 inset;
- box-shadow: 1px 1px 1px #222, 1px 1px 1px #777 inset;
-}
-
-.TreeviewScrollbarHeld
-{
- /* Reset the gradient to a full-colour background */
- background:#383838;
-
- /* Two inset box shadows to simulate depressing */
- -webkit-box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
- box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------------------------ */
-/* Treeview Styles */
-/* ------------------------------------------------------------------------------------------------------------------ */
-
-
-
-.EditBoxContainer
-{
- position: absolute;
- padding:2px 10px 2px 10px;
-}
-
-.EditBoxLabel
-{
- float:left;
- padding: 3px 4px 4px 4px;
- font: 9px Verdana;
-}
-
-.EditBox
-{
- float:left;
-
- background:#666;
- border: 1px solid;
- border-radius: 6px;
- padding: 3px 4px 3px 4px;
- height: 20px;
-
- box-shadow: 1px 1px 1px #222 inset;
-
- transition: all 0.3s ease-in-out;
-}
-
-.EditBox:focus
-{
- background:#FFF;
- outline:0;
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------------------------ */
-/* Label Styles */
-/* ------------------------------------------------------------------------------------------------------------------ */
-
-
-
-.Label
-{
- /* Position relative to the parent window */
- position:absolute;
-
- color: #BBB;
- font: 9px Verdana;
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------------------------ */
-/* Combo Box Styles */
-/* ------------------------------------------------------------------------------------------------------------------ */
-
-
-
-.ComboBox
-{
- position:absolute;
-
- /* TEMP! */
- width:90px;
-
- /* Height is fixed to match the font */
- height:14px;
-
- /* Align the text within the combo box */
- padding: 1px 0 0 5px;
-
- /* Solid, rounded border */
- border: 1px solid #111;
- border-radius: 5px;
-
- /* http://www.colorzilla.com/gradient-editor/#e3e3e3+0,c6c6c6+22,b7b7b7+33,afafaf+50,a7a7a7+67,797979+82,414141+100;Custom */
- background: #e3e3e3;
- background: -moz-linear-gradient(top, #e3e3e3 0%, #c6c6c6 22%, #b7b7b7 33%, #afafaf 50%, #a7a7a7 67%, #797979 82%, #414141 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e3e3e3), color-stop(22%,#c6c6c6), color-stop(33%,#b7b7b7), color-stop(50%,#afafaf), color-stop(67%,#a7a7a7), color-stop(82%,#797979), color-stop(100%,#414141));
- background: -webkit-linear-gradient(top, #e3e3e3 0%,#c6c6c6 22%,#b7b7b7 33%,#afafaf 50%,#a7a7a7 67%,#797979 82%,#414141 100%);
- background: -o-linear-gradient(top, #e3e3e3 0%,#c6c6c6 22%,#b7b7b7 33%,#afafaf 50%,#a7a7a7 67%,#797979 82%,#414141 100%);
- background: -ms-linear-gradient(top, #e3e3e3 0%,#c6c6c6 22%,#b7b7b7 33%,#afafaf 50%,#a7a7a7 67%,#797979 82%,#414141 100%);
- background: linear-gradient(top, #e3e3e3 0%,#c6c6c6 22%,#b7b7b7 33%,#afafaf 50%,#a7a7a7 67%,#797979 82%,#414141 100%);
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e3e3e3', endColorstr='#414141',GradientType=0 );
-}
-
-.ComboBoxPressed
-{
- /* The reverse of the default background, simulating depression */
- background: #414141;
- background: -moz-linear-gradient(top, #414141 0%, #797979 18%, #a7a7a7 33%, #afafaf 50%, #b7b7b7 67%, #c6c6c6 78%, #e3e3e3 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#414141), color-stop(18%,#797979), color-stop(33%,#a7a7a7), color-stop(50%,#afafaf), color-stop(67%,#b7b7b7), color-stop(78%,#c6c6c6), color-stop(100%,#e3e3e3));
- background: -webkit-linear-gradient(top, #414141 0%,#797979 18%,#a7a7a7 33%,#afafaf 50%,#b7b7b7 67%,#c6c6c6 78%,#e3e3e3 100%);
- background: -o-linear-gradient(top, #414141 0%,#797979 18%,#a7a7a7 33%,#afafaf 50%,#b7b7b7 67%,#c6c6c6 78%,#e3e3e3 100%);
- background: -ms-linear-gradient(top, #414141 0%,#797979 18%,#a7a7a7 33%,#afafaf 50%,#b7b7b7 67%,#c6c6c6 78%,#e3e3e3 100%);
- background: linear-gradient(top, #414141 0%,#797979 18%,#a7a7a7 33%,#afafaf 50%,#b7b7b7 67%,#c6c6c6 78%,#e3e3e3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#414141', endColorstr='#e3e3e3',GradientType=0 );
-}
-
-.ComboBoxText
-{
- /* Text info */
- color: #000;
- font: 9px Verdana;
-
- float:left;
-}
-
-.ComboBoxIcon
-{
- /* Push the image to the far right */
- float:right;
-
- /* Align the image with the combo box */
- padding: 2px 5px 0 0;
-}
-
-.ComboBoxPopup
-{
- position: fixed;
-
- background: #CCC;
-
- border-radius: 5px;
-
- padding: 1px 0 1px 0;
-}
-
-.ComboBoxPopupItem
-{
- /* Text info */
- color: #000;
- font: 9px Verdana;
-
- padding: 1px 1px 1px 5px;
-
- border-bottom: 1px solid #AAA;
- border-top: 1px solid #FFF;
-}
-
-.ComboBoxPopupItemText
-{
- float:left;
-}
-
-.ComboBoxPopupItemIcon
-{
- /* Push the image to the far right */
- float:right;
-
- /* Align the image with the combo box */
- padding: 2px 5px 0 0;
-}
-
-.ComboBoxPopupItem:first-child
-{
- border-top: 0px;
-}
-
-.ComboBoxPopupItem:last-child
-{
- border-bottom: 0px;
-}
-
-.ComboBoxPopupItem:hover
-{
- color:#FFF;
- background: #2036E1;
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------------------------ */
-/* Grid Styles */
-/* ------------------------------------------------------------------------------------------------------------------ */
-
-
-
-.Grid
-{
- /* Clip contents */
- overflow: hidden;
-
- position: relative;
-
- background: #333;
-
- border-radius: 2px;
-}
-
-.GridBody
-{
-}
-
-.GridRow
-{
- background:#303030;
-
- color: #BBB;
- font: 9px Verdana;
-
- padding: 2px;
-}
-
-.GridRow.GridGroup
-{
- padding: 0px;
-}
-
-.GridRow:nth-child(odd)
-{
- background:#333;
-}
-
-.GridRowCell
-{
- float:left;
-}
-.GridRowCell.GridGroup
-{
- color: #BBB;
-
- /* Override default from name */
- width: 100%;
-
- padding: 1px 1px 1px 2px;
- border: 1px solid;
- border-radius: 2px;
-
- border-top-color:#555;
- border-left-color:#555;
- border-bottom-color:#111;
- border-right-color:#111;
-
- background: #222;
-}
-
-.GridRowBody
-{
- /* Clip all contents for show/hide group*/
- overflow: hidden;
-
- /* Crazy CSS rules: controls for properties don't clip if this isn't set on this parent */
- position: relative;
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------------------------ */
-/* Button Styles */
-/* ------------------------------------------------------------------------------------------------------------------ */
-
-
-
-.Button
-{
- /* Position relative to the parent window */
- position:absolute;
-
- border-radius:6px;
- border-color:#000;
- border-width:1px;
- border-style:solid;
-
- /* Padding at the top includes 2px for the text drop-shadow */
- padding: 2px 5px 3px 5px;
-
- color: #BBB;
- font: 9px Verdana;
- text-shadow: 1px 1px 1px black;
- text-align: center;
-
- /* The gradient for the button background */
- background-color:#666;
- background: -webkit-gradient(linear, left top, left bottom, from(#666), to(#383838));
- background: -moz-linear-gradient(top, #666, #383838);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#383838');
-
- /* A box shadow and inset box highlight */
- -webkit-box-shadow: 1px 1px 1px #222, 1px 1px 1px #777 inset;
- box-shadow: 1px 1px 1px #222, 1px 1px 1px #777 inset;
-}
-
-.ButtonHeld
-{
- /* Reset the gradient to a full-colour background */
- background:#383838;
-
- /* Two inset box shadows to simulate depressing */
- -webkit-box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
- box-shadow: -1px -1px 1px #222 inset, 1px 1px 1px #222 inset;
-}
diff --git a/3rdparty/bgfx/3rdparty/remotery/vis/index.html b/3rdparty/bgfx/3rdparty/remotery/vis/index.html
deleted file mode 100644
index 3e572568256..00000000000
--- a/3rdparty/bgfx/3rdparty/remotery/vis/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-
- <head>
-
- <title>Remotery Viewer</title>
-
- <!-- Style Sheets -->
- <link rel="stylesheet" type="text/css" href="extern/BrowserLib/WindowManager/Styles/WindowManager.css" />
- <link rel="stylesheet" type="text/css" href="Styles/Remotery.css" />
-
- <!-- Utilities -->
- <script type="text/javascript" src="extern/BrowserLib/Core/Code/Core.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/Core/Code/DOM.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/Core/Code/Bind.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/Core/Code/Animation.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/Core/Code/Convert.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/Core/Code/LocalStore.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/Core/Code/Mouse.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/Core/Code/Keyboard.js"></script>
-
- <!-- User Interface Window Manager -->
- <script type="text/javascript" src="extern/BrowserLib/WindowManager/Code/WindowManager.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/WindowManager/Code/Window.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/WindowManager/Code/Container.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/WindowManager/Code/EditBox.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/WindowManager/Code/Grid.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/WindowManager/Code/Label.js"></script>
- <script type="text/javascript" src="extern/BrowserLib/WindowManager/Code/Button.js"></script>
-
- <!-- Main Application -->
- <script type="text/javascript" src="Code/DataViewReader.js"></script>
- <script type="text/javascript" src="Code/Console.js"></script>
- <script type="text/javascript" src="Code/WebSocketConnection.js"></script>
- <script type="text/javascript" src="Code/TitleWindow.js"></script>
- <script type="text/javascript" src="Code/SampleWindow.js"></script>
- <script type="text/javascript" src="Code/PixelTimeRange.js"></script>
- <script type="text/javascript" src="Code/TimelineRow.js"></script>
- <script type="text/javascript" src="Code/TimelineWindow.js"></script>
- <script type="text/javascript" src="Code/ThreadFrame.js"></script>
- <script type="text/javascript" src="Code/Remotery.js"></script>
-
- </head>
-
- <body>
-
- <script type="text/javascript">
-
- var remotery = new Remotery();
-
- </script>
-
- </body>
-
-</html> \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/stb/stb_rect_pack.h b/3rdparty/bgfx/3rdparty/stb/stb_rect_pack.h
index b09786bd520..836e563cd08 100644
--- a/3rdparty/bgfx/3rdparty/stb/stb_rect_pack.h
+++ b/3rdparty/bgfx/3rdparty/stb/stb_rect_pack.h
@@ -1,7 +1,11 @@
#if defined(__GNUC__) || defined(__clang__)
+# if defined(__clang__)
+# pragma clang diagnostic ignored "-Wunknown-pragmas"
+# endif // defined(__clang__)
# pragma GCC diagnostic ignored "-Wtype-limits"
# pragma GCC diagnostic ignored "-Wunused-function"
# pragma GCC diagnostic ignored "-Wunused-parameter"
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#else
# pragma warning(disable:4100) // C4100: 'c': unreferenced formal parameter
#endif
diff --git a/3rdparty/bgfx/3rdparty/stb/stb_truetype.h b/3rdparty/bgfx/3rdparty/stb/stb_truetype.h
index c99f5d63e01..fc5b9782181 100644
--- a/3rdparty/bgfx/3rdparty/stb/stb_truetype.h
+++ b/3rdparty/bgfx/3rdparty/stb/stb_truetype.h
@@ -1,11 +1,5 @@
-#ifdef __GNUC__
-# pragma GCC diagnostic ignored "-Wshadow"
-#elif defined(_MSC_VER)
-# pragma warning(disable:4456) // warning C4456: declaration of 'k' hides previous local declaration
-#endif
-
-// stb_truetype.h - v1.07 - public domain
-// authored from 2009-2015 by Sean Barrett / RAD Game Tools
+// stb_truetype.h - v1.15 - public domain
+// authored from 2009-2016 by Sean Barrett / RAD Game Tools
//
// This library processes TrueType files:
// parse files
@@ -26,10 +20,12 @@
//
// Mikko Mononen: compound shape support, more cmap formats
// Tor Andersson: kerning, subpixel rendering
+// Dougall Johnson: OpenType / Type 2 font handling
//
// Misc other:
// Ryan Gordon
// Simon Glass
+// github:IntellectualKitty
//
// Bug/warning reports/fixes:
// "Zer" on mollyrocket (with fix)
@@ -54,9 +50,14 @@
// Higor Euripedes
// Thomas Fields
// Derek Vinyard
+// Cort Stratton
//
// VERSION HISTORY
//
+// 1.15 (2017-03-03) make more arguments const
+// 1.14 (2017-01-16) num-fonts-in-TTC function
+// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts
+// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual
// 1.11 (2016-04-02) fix unused-variable warning
// 1.10 (2016-04-02) user-defined fabs(); rare memory leak; remove duplicate typedef
// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use allocation userdata properly
@@ -66,20 +67,12 @@
// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?);
// fixed an assert() bug in the new rasterizer
// replace assert() with STBTT_assert() in new rasterizer
-// 1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine)
-// also more precise AA rasterizer, except if shapes overlap
-// remove need for STBTT_sort
-// 1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC
-// 1.04 (2015-04-15) typo in example
-// 1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes
//
// Full history can be found at the end of this file.
//
// LICENSE
//
-// This software is dual-licensed to the public domain and under the following
-// license: you are granted a perpetual, irrevocable license to copy, modify,
-// publish, and distribute this file as you see fit.
+// See end of file for license information.
//
// USAGE
//
@@ -106,7 +99,8 @@
//
// "Load" a font file from a memory buffer (you have to keep the buffer loaded)
// stbtt_InitFont()
-// stbtt_GetFontOffsetForIndex() -- use for TTC font collections
+// stbtt_GetFontOffsetForIndex() -- indexing for TTC font collections
+// stbtt_GetNumberOfFonts() -- number of fonts for TTC font collections
//
// Render a unicode codepoint to a bitmap
// stbtt_GetCodepointBitmap() -- allocates and returns a bitmap
@@ -464,6 +458,14 @@ int main(int arg, char **argv)
extern "C" {
#endif
+// private structure
+typedef struct
+{
+ unsigned char *data;
+ int cursor;
+ int size;
+} stbtt__buf;
+
//////////////////////////////////////////////////////////////////////////////
//
// TEXTURE BAKING API
@@ -493,7 +495,7 @@ typedef struct
float x1,y1,s1,t1; // bottom-right
} stbtt_aligned_quad;
-STBTT_DEF void stbtt_GetBakedQuad(stbtt_bakedchar *chardata, int pw, int ph, // same data as above
+STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, // same data as above
int char_index, // character to display
float *xpos, float *ypos, // pointers to current position in screen pixel space
stbtt_aligned_quad *q, // output: quad to draw
@@ -533,7 +535,7 @@ typedef struct stbrp_rect stbrp_rect;
STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context);
// Initializes a packing context stored in the passed-in stbtt_pack_context.
// Future calls using this context will pack characters into the bitmap passed
-// in here: a 1-channel bitmap that is weight x height. stride_in_bytes is
+// in here: a 1-channel bitmap that is width * height. stride_in_bytes is
// the distance from one row to the next (or 0 to mean they are packed tightly
// together). "padding" is the amount of padding to leave between each
// character (normally you want '1' for bitmaps you'll use as textures with
@@ -593,15 +595,15 @@ STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h
// To use with PackFontRangesGather etc., you must set it before calls
// call to PackFontRangesGatherRects.
-STBTT_DEF void stbtt_GetPackedQuad(stbtt_packedchar *chardata, int pw, int ph, // same data as above
+STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, // same data as above
int char_index, // character to display
float *xpos, float *ypos, // pointers to current position in screen pixel space
stbtt_aligned_quad *q, // output: quad to draw
int align_to_integer);
-STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
+STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects);
-STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
+STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
// Calling these functions in sequence is roughly equivalent to calling
// stbtt_PackFontRanges(). If you more control over the packing of multiple
// fonts, or if you want to pack custom data into a font texture, take a look
@@ -632,14 +634,19 @@ struct stbtt_pack_context {
//
//
+STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data);
+// This function will determine the number of fonts in a font file. TrueType
+// collection (.ttc) files may contain multiple fonts, while TrueType font
+// (.ttf) files only contain one font. The number of fonts can be used for
+// indexing with the previous function where the index is between zero and one
+// less than the total fonts. If an error occurs, -1 is returned.
+
STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index);
// Each .ttf/.ttc file may have more than one font. Each font has a sequential
// index number starting from 0. Call this function to get the font offset for
// a given index; it returns -1 if the index is out of range. A regular .ttf
// file will only define one font and it always be at offset 0, so it will
-// return '0' for index 0, and -1 for all other indices. You can just skip
-// this step if you know it's that kind of font.
-
+// return '0' for index 0, and -1 for all other indices.
// The following structure is defined publically so you can declare one on
// the stack or as a global or etc, but you should treat it as opaque.
@@ -654,6 +661,13 @@ struct stbtt_fontinfo
int loca,head,glyf,hhea,hmtx,kern; // table locations as offset from start of .ttf
int index_map; // a cmap mapping for our chosen character encoding
int indexToLocFormat; // format needed to map from glyph index to glyph
+
+ stbtt__buf cff; // cff font data
+ stbtt__buf charstrings; // the charstring index
+ stbtt__buf gsubrs; // global charstring subroutines index
+ stbtt__buf subrs; // private charstring subroutines index
+ stbtt__buf fontdicts; // array of font dicts
+ stbtt__buf fdselect; // map from glyph to fontdict
};
STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset);
@@ -731,7 +745,8 @@ STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, in
enum {
STBTT_vmove=1,
STBTT_vline,
- STBTT_vcurve
+ STBTT_vcurve,
+ STBTT_vcubic
};
#endif
@@ -740,7 +755,7 @@ STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, in
#define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file
typedef struct
{
- stbtt_vertex_type x,y,cx,cy;
+ stbtt_vertex_type x,y,cx,cy,cx1,cy1;
unsigned char type,padding;
} stbtt_vertex;
#endif
@@ -964,6 +979,152 @@ typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERS
//////////////////////////////////////////////////////////////////////////
//
+// stbtt__buf helpers to parse data from file
+//
+
+static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
+{
+ if (b->cursor >= b->size)
+ return 0;
+ return b->data[b->cursor++];
+}
+
+static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
+{
+ if (b->cursor >= b->size)
+ return 0;
+ return b->data[b->cursor];
+}
+
+static void stbtt__buf_seek(stbtt__buf *b, int o)
+{
+ STBTT_assert(!(o > b->size || o < 0));
+ b->cursor = (o > b->size || o < 0) ? b->size : o;
+}
+
+static void stbtt__buf_skip(stbtt__buf *b, int o)
+{
+ stbtt__buf_seek(b, b->cursor + o);
+}
+
+static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
+{
+ stbtt_uint32 v = 0;
+ int i;
+ STBTT_assert(n >= 1 && n <= 4);
+ for (i = 0; i < n; i++)
+ v = (v << 8) | stbtt__buf_get8(b);
+ return v;
+}
+
+static stbtt__buf stbtt__new_buf(const void *p, size_t size)
+{
+ stbtt__buf r;
+ STBTT_assert(size < 0x40000000);
+ r.data = (stbtt_uint8*) p;
+ r.size = (int) size;
+ r.cursor = 0;
+ return r;
+}
+
+#define stbtt__buf_get16(b) stbtt__buf_get((b), 2)
+#define stbtt__buf_get32(b) stbtt__buf_get((b), 4)
+
+static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
+{
+ stbtt__buf r = stbtt__new_buf(NULL, 0);
+ if (o < 0 || s < 0 || o > b->size || s > b->size - o) return r;
+ r.data = b->data + o;
+ r.size = s;
+ return r;
+}
+
+static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
+{
+ int count, start, offsize;
+ start = b->cursor;
+ count = stbtt__buf_get16(b);
+ if (count) {
+ offsize = stbtt__buf_get8(b);
+ STBTT_assert(offsize >= 1 && offsize <= 4);
+ stbtt__buf_skip(b, offsize * count);
+ stbtt__buf_skip(b, stbtt__buf_get(b, offsize) - 1);
+ }
+ return stbtt__buf_range(b, start, b->cursor - start);
+}
+
+static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
+{
+ int b0 = stbtt__buf_get8(b);
+ if (b0 >= 32 && b0 <= 246) return b0 - 139;
+ else if (b0 >= 247 && b0 <= 250) return (b0 - 247)*256 + stbtt__buf_get8(b) + 108;
+ else if (b0 >= 251 && b0 <= 254) return -(b0 - 251)*256 - stbtt__buf_get8(b) - 108;
+ else if (b0 == 28) return stbtt__buf_get16(b);
+ else if (b0 == 29) return stbtt__buf_get32(b);
+ STBTT_assert(0);
+ return 0;
+}
+
+static void stbtt__cff_skip_operand(stbtt__buf *b) {
+ int v, b0 = stbtt__buf_peek8(b);
+ STBTT_assert(b0 >= 28);
+ if (b0 == 30) {
+ stbtt__buf_skip(b, 1);
+ while (b->cursor < b->size) {
+ v = stbtt__buf_get8(b);
+ if ((v & 0xF) == 0xF || (v >> 4) == 0xF)
+ break;
+ }
+ } else {
+ stbtt__cff_int(b);
+ }
+}
+
+static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
+{
+ stbtt__buf_seek(b, 0);
+ while (b->cursor < b->size) {
+ int start = b->cursor, end, op;
+ while (stbtt__buf_peek8(b) >= 28)
+ stbtt__cff_skip_operand(b);
+ end = b->cursor;
+ op = stbtt__buf_get8(b);
+ if (op == 12) op = stbtt__buf_get8(b) | 0x100;
+ if (op == key) return stbtt__buf_range(b, start, end-start);
+ }
+ return stbtt__buf_range(b, 0, 0);
+}
+
+static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, stbtt_uint32 *out)
+{
+ int i;
+ stbtt__buf operands = stbtt__dict_get(b, key);
+ for (i = 0; i < outcount && operands.cursor < operands.size; i++)
+ out[i] = stbtt__cff_int(&operands);
+}
+
+static int stbtt__cff_index_count(stbtt__buf *b)
+{
+ stbtt__buf_seek(b, 0);
+ return stbtt__buf_get16(b);
+}
+
+static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
+{
+ int count, offsize, start, end;
+ stbtt__buf_seek(&b, 0);
+ count = stbtt__buf_get16(&b);
+ offsize = stbtt__buf_get8(&b);
+ STBTT_assert(i >= 0 && i < count);
+ STBTT_assert(offsize >= 1 && offsize <= 4);
+ stbtt__buf_skip(&b, i*offsize);
+ start = stbtt__buf_get(&b, offsize);
+ end = stbtt__buf_get(&b, offsize);
+ return stbtt__buf_range(&b, 2+(count+1)*offsize+start, end - start);
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
// accessors to parse data from file
//
@@ -974,32 +1135,22 @@ typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERS
#define ttCHAR(p) (* (stbtt_int8 *) (p))
#define ttFixed(p) ttLONG(p)
-#if defined(STB_TRUETYPE_BIGENDIAN) && !defined(ALLOW_UNALIGNED_TRUETYPE)
-
- #define ttUSHORT(p) (* (stbtt_uint16 *) (p))
- #define ttSHORT(p) (* (stbtt_int16 *) (p))
- #define ttULONG(p) (* (stbtt_uint32 *) (p))
- #define ttLONG(p) (* (stbtt_int32 *) (p))
-
-#else
-
- static stbtt_uint16 ttUSHORT(const stbtt_uint8 *p) { return p[0]*256 + p[1]; }
- static stbtt_int16 ttSHORT(const stbtt_uint8 *p) { return p[0]*256 + p[1]; }
- static stbtt_uint32 ttULONG(const stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
- static stbtt_int32 ttLONG(const stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
-
-#endif
+static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
+static stbtt_int16 ttSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
+static stbtt_uint32 ttULONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
+static stbtt_int32 ttLONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3))
#define stbtt_tag(p,str) stbtt_tag4(p,str[0],str[1],str[2],str[3])
-static int stbtt__isfont(const stbtt_uint8 *font)
+static int stbtt__isfont(stbtt_uint8 *font)
{
// check the version number
if (stbtt_tag4(font, '1',0,0,0)) return 1; // TrueType 1
if (stbtt_tag(font, "typ1")) return 1; // TrueType with type 1 font -- we don't support this!
if (stbtt_tag(font, "OTTO")) return 1; // OpenType with CFF
if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0
+ if (stbtt_tag(font, "true")) return 1; // Apple specification for TrueType fonts
return 0;
}
@@ -1017,7 +1168,7 @@ static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart,
return 0;
}
-STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *font_collection, int index)
+static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_collection, int index)
{
// if it's just a font, there's only one valid index
if (stbtt__isfont(font_collection))
@@ -1036,14 +1187,43 @@ STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *font_collection,
return -1;
}
-STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data2, int fontstart)
+static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
+{
+ // if it's just a font, there's only one valid font
+ if (stbtt__isfont(font_collection))
+ return 1;
+
+ // check if it's a TTC
+ if (stbtt_tag(font_collection, "ttcf")) {
+ // version 1?
+ if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) {
+ return ttLONG(font_collection+8);
+ }
+ }
+ return 0;
+}
+
+static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
+{
+ stbtt_uint32 subrsoff = 0, private_loc[2] = { 0, 0 };
+ stbtt__buf pdict;
+ stbtt__dict_get_ints(&fontdict, 18, 2, private_loc);
+ if (!private_loc[1] || !private_loc[0]) return stbtt__new_buf(NULL, 0);
+ pdict = stbtt__buf_range(&cff, private_loc[1], private_loc[0]);
+ stbtt__dict_get_ints(&pdict, 19, 1, &subrsoff);
+ if (!subrsoff) return stbtt__new_buf(NULL, 0);
+ stbtt__buf_seek(&cff, private_loc[1]+subrsoff);
+ return stbtt__cff_get_index(&cff);
+}
+
+static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart)
{
- stbtt_uint8 *data = (stbtt_uint8 *) data2;
stbtt_uint32 cmap, t;
stbtt_int32 i,numTables;
info->data = data;
info->fontstart = fontstart;
+ info->cff = stbtt__new_buf(NULL, 0);
cmap = stbtt__find_table(data, fontstart, "cmap"); // required
info->loca = stbtt__find_table(data, fontstart, "loca"); // required
@@ -1052,8 +1232,61 @@ STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data2, i
info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required
info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required
info->kern = stbtt__find_table(data, fontstart, "kern"); // not required
- if (!cmap || !info->loca || !info->head || !info->glyf || !info->hhea || !info->hmtx)
+
+ if (!cmap || !info->head || !info->hhea || !info->hmtx)
return 0;
+ if (info->glyf) {
+ // required for truetype
+ if (!info->loca) return 0;
+ } else {
+ // initialization for CFF / Type2 fonts (OTF)
+ stbtt__buf b, topdict, topdictidx;
+ stbtt_uint32 cstype = 2, charstrings = 0, fdarrayoff = 0, fdselectoff = 0;
+ stbtt_uint32 cff;
+
+ cff = stbtt__find_table(data, fontstart, "CFF ");
+ if (!cff) return 0;
+
+ info->fontdicts = stbtt__new_buf(NULL, 0);
+ info->fdselect = stbtt__new_buf(NULL, 0);
+
+ // @TODO this should use size from table (not 512MB)
+ info->cff = stbtt__new_buf(data+cff, 512*1024*1024);
+ b = info->cff;
+
+ // read the header
+ stbtt__buf_skip(&b, 2);
+ stbtt__buf_seek(&b, stbtt__buf_get8(&b)); // hdrsize
+
+ // @TODO the name INDEX could list multiple fonts,
+ // but we just use the first one.
+ stbtt__cff_get_index(&b); // name INDEX
+ topdictidx = stbtt__cff_get_index(&b);
+ topdict = stbtt__cff_index_get(topdictidx, 0);
+ stbtt__cff_get_index(&b); // string INDEX
+ info->gsubrs = stbtt__cff_get_index(&b);
+
+ stbtt__dict_get_ints(&topdict, 17, 1, &charstrings);
+ stbtt__dict_get_ints(&topdict, 0x100 | 6, 1, &cstype);
+ stbtt__dict_get_ints(&topdict, 0x100 | 36, 1, &fdarrayoff);
+ stbtt__dict_get_ints(&topdict, 0x100 | 37, 1, &fdselectoff);
+ info->subrs = stbtt__get_subrs(b, topdict);
+
+ // we only support Type 2 charstrings
+ if (cstype != 2) return 0;
+ if (charstrings == 0) return 0;
+
+ if (fdarrayoff) {
+ // looks like a CID font
+ if (!fdselectoff) return 0;
+ stbtt__buf_seek(&b, fdarrayoff);
+ info->fontdicts = stbtt__cff_get_index(&b);
+ info->fdselect = stbtt__buf_range(&b, fdselectoff, b.size-fdselectoff);
+ }
+
+ stbtt__buf_seek(&b, charstrings);
+ info->charstrings = stbtt__cff_get_index(&b);
+ }
t = stbtt__find_table(data, fontstart, "maxp");
if (t)
@@ -1204,6 +1437,8 @@ static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index)
{
int g1,g2;
+ STBTT_assert(!info->cff.size);
+
if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range
if (info->indexToLocFormat >= 2) return -1; // unknown index->glyph map format
@@ -1218,15 +1453,21 @@ static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index)
return g1==g2 ? -1 : g1; // if length is 0, return -1
}
+static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1);
+
STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1)
{
- int g = stbtt__GetGlyfOffset(info, glyph_index);
- if (g < 0) return 0;
+ if (info->cff.size) {
+ stbtt__GetGlyphInfoT2(info, glyph_index, x0, y0, x1, y1);
+ } else {
+ int g = stbtt__GetGlyfOffset(info, glyph_index);
+ if (g < 0) return 0;
- if (x0) *x0 = ttSHORT(info->data + g + 2);
- if (y0) *y0 = ttSHORT(info->data + g + 4);
- if (x1) *x1 = ttSHORT(info->data + g + 6);
- if (y1) *y1 = ttSHORT(info->data + g + 8);
+ if (x0) *x0 = ttSHORT(info->data + g + 2);
+ if (y0) *y0 = ttSHORT(info->data + g + 4);
+ if (x1) *x1 = ttSHORT(info->data + g + 6);
+ if (y1) *y1 = ttSHORT(info->data + g + 8);
+ }
return 1;
}
@@ -1238,7 +1479,10 @@ STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, i
STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index)
{
stbtt_int16 numberOfContours;
- int g = stbtt__GetGlyfOffset(info, glyph_index);
+ int g;
+ if (info->cff.size)
+ return stbtt__GetGlyphInfoT2(info, glyph_index, NULL, NULL, NULL, NULL) == 0;
+ g = stbtt__GetGlyfOffset(info, glyph_index);
if (g < 0) return 1;
numberOfContours = ttSHORT(info->data + g);
return numberOfContours == 0;
@@ -1260,7 +1504,7 @@ static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_
return num_vertices;
}
-STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
+static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
{
stbtt_int16 numberOfContours;
stbtt_uint8 *endPtsOfContours;
@@ -1486,6 +1730,416 @@ STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, s
return num_vertices;
}
+typedef struct
+{
+ int bounds;
+ int started;
+ float first_x, first_y;
+ float x, y;
+ stbtt_int32 min_x, max_x, min_y, max_y;
+
+ stbtt_vertex *pvertices;
+ int num_vertices;
+} stbtt__csctx;
+
+#define STBTT__CSCTX_INIT(bounds) {bounds,0, 0,0, 0,0, 0,0,0,0, NULL, 0}
+
+static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_int32 y)
+{
+ if (x > c->max_x || !c->started) c->max_x = x;
+ if (y > c->max_y || !c->started) c->max_y = y;
+ if (x < c->min_x || !c->started) c->min_x = x;
+ if (y < c->min_y || !c->started) c->min_y = y;
+ c->started = 1;
+}
+
+static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy, stbtt_int32 cx1, stbtt_int32 cy1)
+{
+ if (c->bounds) {
+ stbtt__track_vertex(c, x, y);
+ if (type == STBTT_vcubic) {
+ stbtt__track_vertex(c, cx, cy);
+ stbtt__track_vertex(c, cx1, cy1);
+ }
+ } else {
+ stbtt_setvertex(&c->pvertices[c->num_vertices], type, x, y, cx, cy);
+ c->pvertices[c->num_vertices].cx1 = (stbtt_int16) cx1;
+ c->pvertices[c->num_vertices].cy1 = (stbtt_int16) cy1;
+ }
+ c->num_vertices++;
+}
+
+static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
+{
+ if (ctx->first_x != ctx->x || ctx->first_y != ctx->y)
+ stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->first_x, (int)ctx->first_y, 0, 0, 0, 0);
+}
+
+static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
+{
+ stbtt__csctx_close_shape(ctx);
+ ctx->first_x = ctx->x = ctx->x + dx;
+ ctx->first_y = ctx->y = ctx->y + dy;
+ stbtt__csctx_v(ctx, STBTT_vmove, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0);
+}
+
+static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
+{
+ ctx->x += dx;
+ ctx->y += dy;
+ stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0);
+}
+
+static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float dy1, float dx2, float dy2, float dx3, float dy3)
+{
+ float cx1 = ctx->x + dx1;
+ float cy1 = ctx->y + dy1;
+ float cx2 = cx1 + dx2;
+ float cy2 = cy1 + dy2;
+ ctx->x = cx2 + dx3;
+ ctx->y = cy2 + dy3;
+ stbtt__csctx_v(ctx, STBTT_vcubic, (int)ctx->x, (int)ctx->y, (int)cx1, (int)cy1, (int)cx2, (int)cy2);
+}
+
+static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
+{
+ int count = stbtt__cff_index_count(&idx);
+ int bias = 107;
+ if (count >= 33900)
+ bias = 32768;
+ else if (count >= 1240)
+ bias = 1131;
+ n += bias;
+ if (n < 0 || n >= count)
+ return stbtt__new_buf(NULL, 0);
+ return stbtt__cff_index_get(idx, n);
+}
+
+static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info, int glyph_index)
+{
+ stbtt__buf fdselect = info->fdselect;
+ int nranges, start, end, v, fmt, fdselector = -1, i;
+
+ stbtt__buf_seek(&fdselect, 0);
+ fmt = stbtt__buf_get8(&fdselect);
+ if (fmt == 0) {
+ // untested
+ stbtt__buf_skip(&fdselect, glyph_index);
+ fdselector = stbtt__buf_get8(&fdselect);
+ } else if (fmt == 3) {
+ nranges = stbtt__buf_get16(&fdselect);
+ start = stbtt__buf_get16(&fdselect);
+ for (i = 0; i < nranges; i++) {
+ v = stbtt__buf_get8(&fdselect);
+ end = stbtt__buf_get16(&fdselect);
+ if (glyph_index >= start && glyph_index < end) {
+ fdselector = v;
+ break;
+ }
+ start = end;
+ }
+ }
+ if (fdselector == -1) stbtt__new_buf(NULL, 0);
+ return stbtt__get_subrs(info->cff, stbtt__cff_index_get(info->fontdicts, fdselector));
+}
+
+static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c)
+{
+ int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0;
+ int has_subrs = 0, clear_stack;
+ float s[48];
+ stbtt__buf subr_stack[10], subrs = info->subrs, b;
+ float f;
+
+#define STBTT__CSERR(s) (0)
+
+ // this currently ignores the initial width value, which isn't needed if we have hmtx
+ b = stbtt__cff_index_get(info->charstrings, glyph_index);
+ while (b.cursor < b.size) {
+ i = 0;
+ clear_stack = 1;
+ b0 = stbtt__buf_get8(&b);
+ switch (b0) {
+ // @TODO implement hinting
+ case 0x13: // hintmask
+ case 0x14: // cntrmask
+ if (in_header)
+ maskbits += (sp / 2); // implicit "vstem"
+ in_header = 0;
+ stbtt__buf_skip(&b, (maskbits + 7) / 8);
+ break;
+
+ case 0x01: // hstem
+ case 0x03: // vstem
+ case 0x12: // hstemhm
+ case 0x17: // vstemhm
+ maskbits += (sp / 2);
+ break;
+
+ case 0x15: // rmoveto
+ in_header = 0;
+ if (sp < 2) return STBTT__CSERR("rmoveto stack");
+ stbtt__csctx_rmove_to(c, s[sp-2], s[sp-1]);
+ break;
+ case 0x04: // vmoveto
+ in_header = 0;
+ if (sp < 1) return STBTT__CSERR("vmoveto stack");
+ stbtt__csctx_rmove_to(c, 0, s[sp-1]);
+ break;
+ case 0x16: // hmoveto
+ in_header = 0;
+ if (sp < 1) return STBTT__CSERR("hmoveto stack");
+ stbtt__csctx_rmove_to(c, s[sp-1], 0);
+ break;
+
+ case 0x05: // rlineto
+ if (sp < 2) return STBTT__CSERR("rlineto stack");
+ for (; i + 1 < sp; i += 2)
+ stbtt__csctx_rline_to(c, s[i], s[i+1]);
+ break;
+
+ // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical
+ // starting from a different place.
+
+ case 0x07: // vlineto
+ if (sp < 1) return STBTT__CSERR("vlineto stack");
+ goto vlineto;
+ case 0x06: // hlineto
+ if (sp < 1) return STBTT__CSERR("hlineto stack");
+ for (;;) {
+ if (i >= sp) break;
+ stbtt__csctx_rline_to(c, s[i], 0);
+ i++;
+ vlineto:
+ if (i >= sp) break;
+ stbtt__csctx_rline_to(c, 0, s[i]);
+ i++;
+ }
+ break;
+
+ case 0x1F: // hvcurveto
+ if (sp < 4) return STBTT__CSERR("hvcurveto stack");
+ goto hvcurveto;
+ case 0x1E: // vhcurveto
+ if (sp < 4) return STBTT__CSERR("vhcurveto stack");
+ for (;;) {
+ if (i + 3 >= sp) break;
+ stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f);
+ i += 4;
+ hvcurveto:
+ if (i + 3 >= sp) break;
+ stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]);
+ i += 4;
+ }
+ break;
+
+ case 0x08: // rrcurveto
+ if (sp < 6) return STBTT__CSERR("rcurveline stack");
+ for (; i + 5 < sp; i += 6)
+ stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
+ break;
+
+ case 0x18: // rcurveline
+ if (sp < 8) return STBTT__CSERR("rcurveline stack");
+ for (; i + 5 < sp - 2; i += 6)
+ stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
+ if (i + 1 >= sp) return STBTT__CSERR("rcurveline stack");
+ stbtt__csctx_rline_to(c, s[i], s[i+1]);
+ break;
+
+ case 0x19: // rlinecurve
+ if (sp < 8) return STBTT__CSERR("rlinecurve stack");
+ for (; i + 1 < sp - 6; i += 2)
+ stbtt__csctx_rline_to(c, s[i], s[i+1]);
+ if (i + 5 >= sp) return STBTT__CSERR("rlinecurve stack");
+ stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
+ break;
+
+ case 0x1A: // vvcurveto
+ case 0x1B: // hhcurveto
+ if (sp < 4) return STBTT__CSERR("(vv|hh)curveto stack");
+ f = 0.0;
+ if (sp & 1) { f = s[i]; i++; }
+ for (; i + 3 < sp; i += 4) {
+ if (b0 == 0x1B)
+ stbtt__csctx_rccurve_to(c, s[i], f, s[i+1], s[i+2], s[i+3], 0.0);
+ else
+ stbtt__csctx_rccurve_to(c, f, s[i], s[i+1], s[i+2], 0.0, s[i+3]);
+ f = 0.0;
+ }
+ break;
+
+ case 0x0A: // callsubr
+ if (!has_subrs) {
+ if (info->fdselect.size)
+ subrs = stbtt__cid_get_glyph_subrs(info, glyph_index);
+ has_subrs = 1;
+ }
+ // fallthrough
+ case 0x1D: // callgsubr
+ if (sp < 1) return STBTT__CSERR("call(g|)subr stack");
+ v = (int) s[--sp];
+ if (subr_stack_height >= 10) return STBTT__CSERR("recursion limit");
+ subr_stack[subr_stack_height++] = b;
+ b = stbtt__get_subr(b0 == 0x0A ? subrs : info->gsubrs, v);
+ if (b.size == 0) return STBTT__CSERR("subr not found");
+ b.cursor = 0;
+ clear_stack = 0;
+ break;
+
+ case 0x0B: // return
+ if (subr_stack_height <= 0) return STBTT__CSERR("return outside subr");
+ b = subr_stack[--subr_stack_height];
+ clear_stack = 0;
+ break;
+
+ case 0x0E: // endchar
+ stbtt__csctx_close_shape(c);
+ return 1;
+
+ case 0x0C: { // two-byte escape
+ float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6;
+ float dx, dy;
+ int b1 = stbtt__buf_get8(&b);
+ switch (b1) {
+ // @TODO These "flex" implementations ignore the flex-depth and resolution,
+ // and always draw beziers.
+ case 0x22: // hflex
+ if (sp < 7) return STBTT__CSERR("hflex stack");
+ dx1 = s[0];
+ dx2 = s[1];
+ dy2 = s[2];
+ dx3 = s[3];
+ dx4 = s[4];
+ dx5 = s[5];
+ dx6 = s[6];
+ stbtt__csctx_rccurve_to(c, dx1, 0, dx2, dy2, dx3, 0);
+ stbtt__csctx_rccurve_to(c, dx4, 0, dx5, -dy2, dx6, 0);
+ break;
+
+ case 0x23: // flex
+ if (sp < 13) return STBTT__CSERR("flex stack");
+ dx1 = s[0];
+ dy1 = s[1];
+ dx2 = s[2];
+ dy2 = s[3];
+ dx3 = s[4];
+ dy3 = s[5];
+ dx4 = s[6];
+ dy4 = s[7];
+ dx5 = s[8];
+ dy5 = s[9];
+ dx6 = s[10];
+ dy6 = s[11];
+ //fd is s[12]
+ stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
+ stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
+ break;
+
+ case 0x24: // hflex1
+ if (sp < 9) return STBTT__CSERR("hflex1 stack");
+ dx1 = s[0];
+ dy1 = s[1];
+ dx2 = s[2];
+ dy2 = s[3];
+ dx3 = s[4];
+ dx4 = s[5];
+ dx5 = s[6];
+ dy5 = s[7];
+ dx6 = s[8];
+ stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, 0);
+ stbtt__csctx_rccurve_to(c, dx4, 0, dx5, dy5, dx6, -(dy1+dy2+dy5));
+ break;
+
+ case 0x25: // flex1
+ if (sp < 11) return STBTT__CSERR("flex1 stack");
+ dx1 = s[0];
+ dy1 = s[1];
+ dx2 = s[2];
+ dy2 = s[3];
+ dx3 = s[4];
+ dy3 = s[5];
+ dx4 = s[6];
+ dy4 = s[7];
+ dx5 = s[8];
+ dy5 = s[9];
+ dx6 = dy6 = s[10];
+ dx = dx1+dx2+dx3+dx4+dx5;
+ dy = dy1+dy2+dy3+dy4+dy5;
+ if (STBTT_fabs(dx) > STBTT_fabs(dy))
+ dy6 = -dy;
+ else
+ dx6 = -dx;
+ stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
+ stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
+ break;
+
+ default:
+ return STBTT__CSERR("unimplemented");
+ }
+ } break;
+
+ default:
+ if (b0 != 255 && b0 != 28 && (b0 < 32 || b0 > 254))
+ return STBTT__CSERR("reserved operator");
+
+ // push immediate
+ if (b0 == 255) {
+ f = (float)stbtt__buf_get32(&b) / 0x10000;
+ } else {
+ stbtt__buf_skip(&b, -1);
+ f = (float)(stbtt_int16)stbtt__cff_int(&b);
+ }
+ if (sp >= 48) return STBTT__CSERR("push stack overflow");
+ s[sp++] = f;
+ clear_stack = 0;
+ break;
+ }
+ if (clear_stack) sp = 0;
+ }
+ return STBTT__CSERR("no endchar");
+
+#undef STBTT__CSERR
+}
+
+static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
+{
+ // runs the charstring twice, once to count and once to output (to avoid realloc)
+ stbtt__csctx count_ctx = STBTT__CSCTX_INIT(1);
+ stbtt__csctx output_ctx = STBTT__CSCTX_INIT(0);
+ if (stbtt__run_charstring(info, glyph_index, &count_ctx)) {
+ *pvertices = (stbtt_vertex*)STBTT_malloc(count_ctx.num_vertices*sizeof(stbtt_vertex), info->userdata);
+ output_ctx.pvertices = *pvertices;
+ if (stbtt__run_charstring(info, glyph_index, &output_ctx)) {
+ STBTT_assert(output_ctx.num_vertices == count_ctx.num_vertices);
+ return output_ctx.num_vertices;
+ }
+ }
+ *pvertices = NULL;
+ return 0;
+}
+
+static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1)
+{
+ stbtt__csctx c = STBTT__CSCTX_INIT(1);
+ int r = stbtt__run_charstring(info, glyph_index, &c);
+ if (x0) {
+ *x0 = r ? c.min_x : 0;
+ *y0 = r ? c.min_y : 0;
+ *x1 = r ? c.max_x : 0;
+ *y1 = r ? c.max_y : 0;
+ }
+ return r ? c.num_vertices : 0;
+}
+
+STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
+{
+ if (!info->cff.size)
+ return stbtt__GetGlyphShapeTT(info, glyph_index, pvertices);
+ else
+ return stbtt__GetGlyphShapeT2(info, glyph_index, pvertices);
+}
+
STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing)
{
stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34);
@@ -2356,6 +3010,48 @@ static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x
return 1;
}
+static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float objspace_flatness_squared, int n)
+{
+ // @TODO this "flatness" calculation is just made-up nonsense that seems to work well enough
+ float dx0 = x1-x0;
+ float dy0 = y1-y0;
+ float dx1 = x2-x1;
+ float dy1 = y2-y1;
+ float dx2 = x3-x2;
+ float dy2 = y3-y2;
+ float dx = x3-x0;
+ float dy = y3-y0;
+ float longlen = (float) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2));
+ float shortlen = (float) STBTT_sqrt(dx*dx+dy*dy);
+ float flatness_squared = longlen*longlen-shortlen*shortlen;
+
+ if (n > 16) // 65536 segments on one curve better be enough!
+ return;
+
+ if (flatness_squared > objspace_flatness_squared) {
+ float x01 = (x0+x1)/2;
+ float y01 = (y0+y1)/2;
+ float x12 = (x1+x2)/2;
+ float y12 = (y1+y2)/2;
+ float x23 = (x2+x3)/2;
+ float y23 = (y2+y3)/2;
+
+ float xa = (x01+x12)/2;
+ float ya = (y01+y12)/2;
+ float xb = (x12+x23)/2;
+ float yb = (y12+y23)/2;
+
+ float mx = (xa+xb)/2;
+ float my = (ya+yb)/2;
+
+ stbtt__tesselate_cubic(points, num_points, x0,y0, x01,y01, xa,ya, mx,my, objspace_flatness_squared,n+1);
+ stbtt__tesselate_cubic(points, num_points, mx,my, xb,yb, x23,y23, x3,y3, objspace_flatness_squared,n+1);
+ } else {
+ stbtt__add_point(points, *num_points,x3,y3);
+ *num_points = *num_points+1;
+ }
+}
+
// returns number of contours
static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata)
{
@@ -2412,6 +3108,14 @@ static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts,
objspace_flatness_squared, 0);
x = vertices[i].x, y = vertices[i].y;
break;
+ case STBTT_vcubic:
+ stbtt__tesselate_cubic(points, &num_points, x,y,
+ vertices[i].cx, vertices[i].cy,
+ vertices[i].cx1, vertices[i].cy1,
+ vertices[i].x, vertices[i].y,
+ objspace_flatness_squared, 0);
+ x = vertices[i].x, y = vertices[i].y;
+ break;
}
}
(*contour_lengths)[n] = num_points - start;
@@ -2538,7 +3242,7 @@ STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned ch
//
// This is SUPER-CRAPPY packing to keep source code small
-STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // font location (use offset=0 for plain .ttf)
+static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, // font location (use offset=0 for plain .ttf)
float pixel_height, // height of font in pixels
unsigned char *pixels, int pw, int ph, // bitmap to be filled in
int first_char, int num_chars, // characters to bake
@@ -2584,11 +3288,11 @@ STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // fo
return bottom_y;
}
-STBTT_DEF void stbtt_GetBakedQuad(stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule)
+STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule)
{
float d3d_bias = opengl_fillrule ? 0 : -0.5f;
float ipw = 1.0f / pw, iph = 1.0f / ph;
- stbtt_bakedchar *b = chardata + char_index;
+ const stbtt_bakedchar *b = chardata + char_index;
int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f);
int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f);
@@ -2868,7 +3572,7 @@ static float stbtt__oversample_shift(int oversample)
}
// rects array must be big enough to accommodate all characters in the given ranges
-STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
+STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
{
int i,j,k;
@@ -2897,7 +3601,7 @@ STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, stbtt_fon
}
// rects array must be big enough to accommodate all characters in the given ranges
-STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
+STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
{
int i,j,k, return_value = 1;
@@ -3032,10 +3736,10 @@ STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, unsigned char *fontda
return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1);
}
-STBTT_DEF void stbtt_GetPackedQuad(stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer)
+STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer)
{
float ipw = 1.0f / pw, iph = 1.0f / ph;
- stbtt_packedchar *b = chardata + char_index;
+ const stbtt_packedchar *b = chardata + char_index;
if (align_to_integer) {
float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f);
@@ -3066,7 +3770,7 @@ STBTT_DEF void stbtt_GetPackedQuad(stbtt_packedchar *chardata, int pw, int ph, i
//
// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string
-static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(const stbtt_uint8 *s1, stbtt_int32 len1, const stbtt_uint8 *s2, stbtt_int32 len2)
+static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2)
{
stbtt_int32 i=0;
@@ -3105,9 +3809,9 @@ static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(const stbtt_uint8
return i;
}
-STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2)
+static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2)
{
- return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((const stbtt_uint8*) s1, len1, (const stbtt_uint8*) s2, len2);
+ return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2);
}
// returns results in whatever encoding you request... but note that 2-byte encodings
@@ -3163,7 +3867,7 @@ static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name,
return 1;
} else if (matchlen < nlen && name[matchlen] == ' ') {
++matchlen;
- if (stbtt_CompareUTF8toUTF16_bigendian((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen))
+ if (stbtt_CompareUTF8toUTF16_bigendian_internal((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen))
return 1;
}
} else {
@@ -3209,7 +3913,7 @@ static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *nam
return 0;
}
-STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *font_collection, const char *name_utf8, stbtt_int32 flags)
+static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char *name_utf8, stbtt_int32 flags)
{
stbtt_int32 i;
for (i=0;;++i) {
@@ -3220,11 +3924,53 @@ STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *font_collection, const
}
}
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
+
+STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
+ float pixel_height, unsigned char *pixels, int pw, int ph,
+ int first_char, int num_chars, stbtt_bakedchar *chardata)
+{
+ return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata);
+}
+
+STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index)
+{
+ return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index);
+}
+
+STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
+{
+ return stbtt_GetNumberOfFonts_internal((unsigned char *) data);
+}
+
+STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset)
+{
+ return stbtt_InitFont_internal(info, (unsigned char *) data, offset);
+}
+
+STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags)
+{
+ return stbtt_FindMatchingFont_internal((unsigned char *) fontdata, (char *) name, flags);
+}
+
+STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2)
+{
+ return stbtt_CompareUTF8toUTF16_bigendian_internal((char *) s1, len1, (char *) s2, len2);
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+
#endif // STB_TRUETYPE_IMPLEMENTATION
// FULL VERSION HISTORY
//
+// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual
// 1.11 (2016-04-02) fix unused-variable warning
// 1.10 (2016-04-02) allow user-defined fabs() replacement
// fix memory leak if fontsize=0.0
@@ -3271,3 +4017,45 @@ STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *font_collection, const
// 0.2 (2009-03-11) Fix unsigned/signed char warnings
// 0.1 (2009-03-09) First public release
//
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
+software, either in source code form or as a compiled binary, for any purpose,
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
diff --git a/3rdparty/bgfx/README.md b/3rdparty/bgfx/README.md
index bd56e140da4..d1d79870a7f 100644
--- a/3rdparty/bgfx/README.md
+++ b/3rdparty/bgfx/README.md
@@ -37,7 +37,6 @@ Supported platforms:
* iOS (iPhone, iPad, AppleTV)
* Linux
* MIPS Creator CI20
- * Native Client (PPAPI 37+, ARM, x86, x64, PNaCl)
* OSX (10.9+)
* RaspberryPi
* SteamLink
@@ -48,7 +47,7 @@ Supported compilers:
* Clang 3.3 and above
* GCC 4.6 and above
- * VS2012 and above
+ * VS2015 and above
Languages:
@@ -58,7 +57,8 @@ Languages:
* [Go language API bindings](https://github.com/james4k/go-bgfx)
* [Haskell language API bindings](https://github.com/haskell-game/bgfx)
* [Lightweight Java Game Library 3 bindings](https://github.com/LWJGL/lwjgl3)
- * [Lua language API bindings](https://github.com/excessive/lua-bgfx)
+ * [Lua language API bindings 1](https://github.com/excessive/lua-bgfx)
+ * [Lua language API bindings 2](https://github.com/cloudwu/lua-bgfx)
* [Nim language API bindings](https://github.com/Halsys/nim-bgfx)
* [Python language API bindings](https://github.com/jnadro/pybgfx#pybgf)
* [Rust language API bindings](https://github.com/rhoot/bgfx-rs)
@@ -95,10 +95,10 @@ https://github.com/dariomanesku/cmftStudio cmftStudio - cubemap filtering tool.
## Crown
-https://github.com/taylor001/crown Crown is a general purpose data-driven game
+https://github.com/dbartolini/crown Crown is a general purpose data-driven game
engine, written from scratch with a minimalistic and data-oriented design
philosophy in mind.
-![Crown screenshot](https://raw.githubusercontent.com/taylor001/crown/master/docs/shots/level-editor.png)
+![Crown screenshot](https://raw.githubusercontent.com/dbartolini/crown/master/docs/shots/level-editor.png)
## Offroad Legends 2
@@ -111,8 +111,8 @@ focusing on racing games.
https://github.com/andr3wmac/Torque6 Torque 6 is an MIT licensed 3D engine
loosely based on Torque2D. Being neither Torque2D or Torque3D it is the 6th
derivative of the original Torque Engine.
-<a href="http://www.youtube.com/watch?feature=player_embedded&v=p4LTM_QGK34
-" target="_blank"><img src="http://img.youtube.com/vi/p4LTM_QGK34/0.jpg"
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=p4LTM_QGK34"
+target="_blank"><img src="http://img.youtube.com/vi/p4LTM_QGK34/0.jpg"
alt="Torque 6 Material Editor" width="640" height="480" border="0" /></a>
## twinkle
@@ -147,7 +147,13 @@ C++ and using bgfx to support multiple rendering APIs.
## DLS
http://makingartstudios.itch.io/dls - DLS the digital logic simulator game.
-![dls-screenshot](https://img.itch.io/aW1hZ2UvMzk3MTgvMTc5MjQ4LnBuZw==/original/kA%2FQPb.png)
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=6o1-sQRNqcA
+" target="_blank"><img src="http://img.youtube.com/vi/6o1-sQRNqcA/0.jpg"
+alt="DLS - Creating a 4-bit Register "
+width="640" height="480" border="0" /></a>
+
+http://dls.makingartstudios.com/sandbox/ - DLS: The Sandbox
+![dls-sandbox-screenshot](https://pbs.twimg.com/media/DBaFwOKWAAEq0mp.jpg:large)
## MAME
@@ -159,9 +165,10 @@ https://github.com/mamedev/mame MAME - Multiple Arcade Machine Emulator
https://blackshift.itch.io/blackshift - Blackshift is a grid-based, space-themed
action puzzle game which isn't afraid of complexity — think Chip's Challenge on
-crack.
-<a href="http://www.youtube.com/watch?feature=player_embedded&v=PUl8612Y-ds
-" target="_blank"><img src="http://img.youtube.com/vi/PUl8612Y-ds/0.jpg"
+crack.
+
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=PUl8612Y-ds"
+target="_blank"><img src="http://img.youtube.com/vi/PUl8612Y-ds/0.jpg"
alt="Blackshift Trailer, May 2016"
width="640" height="480" border="0" /></a>
@@ -170,8 +177,9 @@ width="640" height="480" border="0" /></a>
https://eheitzresearch.wordpress.com/415-2/ - Real-Time Polygonal-Light Shading
with Linearly Transformed Cosines, Eric Heitz, Jonathan Dupuy, Stephen Hill and
David Neubelt, ACM SIGGRAPH 2016
-<a href="http://www.youtube.com/watch?feature=player_embedded&v=ZLRgEN7AQgM
-" target="_blank"><img src="http://img.youtube.com/vi/ZLRgEN7AQgM/0.jpg"
+
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=ZLRgEN7AQgM"
+target="_blank"><img src="http://img.youtube.com/vi/ZLRgEN7AQgM/0.jpg"
alt="Real-Time Polygonal-Light Shading with Linearly Transformed Cosines"
width="640" height="480" border="0" /></a>
@@ -180,8 +188,9 @@ width="640" height="480" border="0" /></a>
http://www.dogbytegames.com/dead_venture.html - Dead Venture is a new Drive 'N
Gun game where you help a handful of survivals reach the safe haven: a military
base on a far island.
-<a href="http://www.youtube.com/watch?feature=player_embedded&v=CgMr1g12yXw
-" target="_blank"><img src="http://img.youtube.com/vi/CgMr1g12yXw/0.jpg"
+
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=CgMr1g12yXw"
+target="_blank"><img src="http://img.youtube.com/vi/CgMr1g12yXw/0.jpg"
alt="Dead Venture - Gameplay Teaser (iOS / Android)"
width="640" height="480" border="0" /></a>
@@ -208,8 +217,8 @@ WYSIWYG Editor
http://gorallygame.com/ - Go Rally is top-down rally game with a career mode,
multiplayer time challenges, and a track creator.
-<a href="http://www.youtube.com/watch?feature=player_embedded&v=ckbkQsB6RVY
-" target="_blank"><img src="http://img.youtube.com/vi/ckbkQsB6RVY/0.jpg"
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=ckbkQsB6RVY"
+target="_blank"><img src="http://img.youtube.com/vi/ckbkQsB6RVY/0.jpg"
alt="Go Rally"
width="640" height="480" border="0" /></a>
@@ -230,12 +239,50 @@ game in development. It's a combination of FPS and stealth.
https://github.com/VladSerhiienko/FbxPipeline - Yet another FBX exporter with
flatbuffers serialization.
-## FRAG
+## FRAG - Framework for Rather Awesome Games
+
+http://fragworks.io/ - FRAG is a cross-platform 2D game creation framework for
+the Nim programming language.
+
+## vg-renderer
+
+https://github.com/jdryg/vg-renderer#vg-renderer - A vector graphics renderer
+for bgfx, based on ideas from both NanoVG and ImDrawList (Dear ImGUI)
+
+## Zombie Safari
+
+http://www.dogbytegames.com/zombie_safari.html - Do what you please in this
+Open-World Offroad Driving game: explore massive landscapes, complete challenges,
+smash zombies, find secret locations, unlock and upgrade cars and weapons, it's
+up to you!
-https://github.com/fragworks/frag - FRAG is a game creation framework being
-developed using the Nim programming language, and is currently in pre-alpha
-status. The immediate development focus for FRAG is supporting the creation of
-2D desktop games.
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=LSiH0lRkw8g"
+target="_blank"><img src="http://img.youtube.com/vi/LSiH0lRkw8g/0.jpg"
+alt="Zombie Safari - Official Gameplay Trailer (Android)"
+width="640" height="480" border="0" /></a>
+
+## Smith and Winston
+
+http://www.smithandwinston.com/ - Smith and Winston is an exploration twin stick
+shooter for PC, PS4 & XBoxOne arriving in late 2018. Smith and Winston features
+a massively destructable voxel world, rapid twin stick combat, physics puzzles
+and Metroid style discovery.
+
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=Mr_L7KuiByU"
+target="_blank"><img src="http://img.youtube.com/vi/Mr_L7KuiByU/0.jpg"
+alt="Smith and Winston: Gameplay Video"
+width="640" height="480" border="0" /></a>
+
+## Football Manager 2018
+
+http://www.footballmanager.com/ - Football Manager 2018 is a 2017 football
+management simulation video game developed by Sports Interactive and published
+by Sega.
+
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=1Woak1Bl_KI"
+target="_blank"><img src="http://img.youtube.com/vi/1Woak1Bl_KI/0.jpg"
+alt="Match Engine | Football Manager 2018"
+width="640" height="480" border="0" /></a>
[License (BSD 2-clause)](https://bkaradzic.github.io/bgfx/license.html)
-----------------------------------------------------------------------
diff --git a/3rdparty/bgfx/examples/00-helloworld/helloworld.cpp b/3rdparty/bgfx/examples/00-helloworld/helloworld.cpp
index bfd2a1c67c6..a66acd13fba 100644
--- a/3rdparty/bgfx/examples/00-helloworld/helloworld.cpp
+++ b/3rdparty/bgfx/examples/00-helloworld/helloworld.cpp
@@ -7,15 +7,25 @@
#include "common.h"
#include "bgfx_utils.h"
#include "logo.h"
+#include "imgui/imgui.h"
+
+namespace
+{
class ExampleHelloWorld : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleHelloWorld(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
+ m_width = _width;
+ m_height = _height;
m_debug = BGFX_DEBUG_TEXT;
m_reset = BGFX_RESET_VSYNC;
@@ -27,25 +37,43 @@ class ExampleHelloWorld : public entry::AppI
// Set view 0 clear state.
bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
+
+ imguiCreate();
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
+ imguiDestroy();
+
// Shutdown bgfx.
bgfx::shutdown();
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
- if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
// Set view 0 default viewport.
bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
@@ -55,25 +83,23 @@ class ExampleHelloWorld : public entry::AppI
// Use debug font to print information about this example.
bgfx::dbgTextClear();
- bgfx::dbgTextImage(bx::uint16_max(uint16_t(m_width /2/8 ), 20)-20
- , bx::uint16_max(uint16_t(m_height/2/16), 6)-6
- , 40
- , 12
- , s_logo
- , 160
- );
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/00-helloworld");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Initialization and debug text.");
-
- bgfx::dbgTextPrintf(0, 4, 0x0f, "Color can be changed with ANSI \x1b[9;me\x1b[10;ms\x1b[11;mc\x1b[12;ma\x1b[13;mp\x1b[14;me\x1b[0m code too.");
+ bgfx::dbgTextImage(
+ bx::uint16_max(uint16_t(m_width /2/8 ), 20)-20
+ , bx::uint16_max(uint16_t(m_height/2/16), 6)-6
+ , 40
+ , 12
+ , s_logo
+ , 160
+ );
+ bgfx::dbgTextPrintf(0, 1, 0x0f, "Color can be changed with ANSI \x1b[9;me\x1b[10;ms\x1b[11;mc\x1b[12;ma\x1b[13;mp\x1b[14;me\x1b[0m code too.");
const bgfx::Stats* stats = bgfx::getStats();
- bgfx::dbgTextPrintf(0, 6, 0x0f, "Backbuffer %dW x %dH in pixels, debug text %dW x %dH in characters."
- , stats->width
- , stats->height
- , stats->textWidth
- , stats->textHeight
- );
+ bgfx::dbgTextPrintf(0, 2, 0x0f, "Backbuffer %dW x %dH in pixels, debug text %dW x %dH in characters."
+ , stats->width
+ , stats->height
+ , stats->textWidth
+ , stats->textHeight
+ );
// Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives.
@@ -85,10 +111,14 @@ class ExampleHelloWorld : public entry::AppI
return false;
}
+ entry::MouseState m_mouseState;
+
uint32_t m_width;
uint32_t m_height;
uint32_t m_debug;
uint32_t m_reset;
};
-ENTRY_IMPLEMENT_MAIN(ExampleHelloWorld);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleHelloWorld, "00-helloworld", "Initialization and debug text.");
diff --git a/3rdparty/bgfx/examples/01-cubes/cubes.cpp b/3rdparty/bgfx/examples/01-cubes/cubes.cpp
index 3b679eae164..a162b05d60b 100644
--- a/3rdparty/bgfx/examples/01-cubes/cubes.cpp
+++ b/3rdparty/bgfx/examples/01-cubes/cubes.cpp
@@ -5,6 +5,10 @@
#include "common.h"
#include "bgfx_utils.h"
+#include "imgui/imgui.h"
+
+namespace
+{
struct PosColorVertex
{
@@ -73,15 +77,21 @@ static const uint16_t s_cubeTriStrip[] =
class ExampleCubes : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleCubes(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
BX_UNUSED(s_cubeTriList, s_cubeTriStrip);
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -118,14 +128,18 @@ class ExampleCubes : public entry::AppI
m_program = loadProgram("vs_cubes", "fs_cubes");
m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
+ imguiDestroy();
+
// Cleanup.
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
- bgfx::destroyProgram(m_program);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_program);
// Shutdown bgfx.
bgfx::shutdown();
@@ -133,24 +147,25 @@ class ExampleCubes : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
- if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
- float time = (float)( (now-m_timeOffset)/double(bx::getHPFrequency() ) );
+ imguiEndFrame();
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/01-cube");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Rendering simple static mesh.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
+ float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ) );
float at[3] = { 0.0f, 0.0f, 0.0f };
float eye[3] = { 0.0f, 0.0f, -35.0f };
@@ -201,7 +216,7 @@ class ExampleCubes : public entry::AppI
bgfx::setTransform(mtx);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
// Set render states.
@@ -225,6 +240,8 @@ class ExampleCubes : public entry::AppI
return false;
}
+ entry::MouseState m_mouseState;
+
uint32_t m_width;
uint32_t m_height;
uint32_t m_debug;
@@ -235,4 +252,6 @@ class ExampleCubes : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(ExampleCubes);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleCubes, "01-cubes", "Rendering simple static mesh.");
diff --git a/3rdparty/bgfx/examples/02-metaballs/fs_metaballs.bin.h b/3rdparty/bgfx/examples/02-metaballs/fs_metaballs.bin.h
index 060622e6120..a9288af756e 100644
--- a/3rdparty/bgfx/examples/02-metaballs/fs_metaballs.bin.h
+++ b/3rdparty/bgfx/examples/02-metaballs/fs_metaballs.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_metaballs_glsl[398] =
{
- 0x46, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0x7f, 0x01, 0x00, 0x00, 0x76, 0x61, // FSH..,.?......va
+ 0x46, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0x7f, 0x01, 0x00, 0x00, 0x76, 0x61, // FSH..,.?......va
0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, // v_color0;.varyi
0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x5f, // ng highp vec3 v_
@@ -26,280 +26,281 @@ static const uint8_t fs_metaballs_glsl[398] =
0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, // gl_FragColor =
0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tmpvar_2;.}...
};
-static const uint8_t fs_metaballs_spv[3081] =
+static const uint8_t fs_metaballs_spv[3095] =
{
- 0x46, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0xfc, 0x0b, 0x03, 0x02, 0x23, 0x07, // FSH..,.?......#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x97, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........a......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, // w...4...........
- 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x01, 0x14, 0x00, 0x00, // main............
- 0x76, 0x65, 0x63, 0x33, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, // vec3_splat(f1;..
- 0x05, 0x00, 0x03, 0x00, 0x39, 0x1b, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....9..._x......
- 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, // 5...vec4_splat(f
- 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, // 1;.........._x..
- 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, // ........@main(vf
- 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // 4;vf3;vf4;......
- 0xa8, 0x48, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // .H..v_color0....
- 0x05, 0x00, 0x05, 0x00, 0x82, 0x5a, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, // .....Z..v_normal
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x4e, 0x48, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // ........NH..gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ragData_0_......
- 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, // ....bgfx_VoidFra
- 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x5f, 0x5b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // g......._[..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x29, 0x05, 0x00, 0x00, 0x6c, 0x69, 0x67, 0x68, // m.......)...ligh
- 0x74, 0x44, 0x69, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x67, 0x15, 0x00, 0x00, // tDir........g...
- 0x6e, 0x64, 0x6f, 0x74, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3f, 0x0d, 0x00, 0x00, // ndotl.......?...
- 0x73, 0x70, 0x65, 0x63, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xcf, 0x54, 0x00, 0x00, // spec.........T..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x53, 0x35, 0x00, 0x00, // param.......S5..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, // param........A..
- 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // v_color0........
- 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // w...v_color0....
- 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, // ....,?..v_normal
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, // ........4...v_no
- 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, // rmal............
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....G..param...
- 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....U..param...
- 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // ........param...
- 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // ........gl_FragD
- 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, // ata_0_..........
- 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, // $Global.........
- 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, // ....u_viewRect..
- 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, // ewTexel.........
- 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_view......
- 0xfe, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
- 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // w...............
- 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, // u_proj..........
- 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // ....u_invProj...
- 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xfe, 0x07, 0x00, 0x00, // ewProj..........
- 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ....u_invViewPro
- 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // j...............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, // u_model.........
- 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, // ....u_modelView.
- 0x06, 0x00, 0x07, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
- 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, // delViewProj.....
- 0xfe, 0x07, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ........u_alphaR
- 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ef4.G...w.......
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...4.......
- 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x94, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....G...........
- 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...H...........
- 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, // #.......H.......
- 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ....#.......H...
- 0xfe, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xfe, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ........#... ...
- 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, // #...`...H.......
- 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0xfe, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xfe, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, // #.......H.......
- 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0xfe, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xfe, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, // ........#... ...
- 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, // #...`...H.......
- 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0xfe, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xfe, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, // #.......H.......
- 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0xfe, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xfe, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xfe, 0x07, 0x00, 0x00, // #... ...G.......
- 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, // ............!...
- 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ... ...........
- 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ....!...........
- 0x8a, 0x02, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....!...........
- 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....!...}.......
- 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x2c, 0x00, 0x06, 0x00, // ....A.......,...
- 0x18, 0x00, 0x00, 0x00, 0x29, 0x05, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....)...........
- 0x41, 0x03, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4f, 0x01, 0x00, 0x00, // A...+.......O...
- 0x00, 0x00, 0xf0, 0x41, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x76, 0x09, 0x00, 0x00, // ...A+.......v...
- 0xcd, 0xcc, 0x0c, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x59, 0x05, 0x00, 0x00, // ...@+.......Y...
- 0x2f, 0xba, 0xe8, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // /..>+...........
- 0x00, 0x00, 0x80, 0x3f, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ...? ...........
- 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, // ....;.......w...
- 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
- 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, // ....;.......4...
- 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
- 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ....;...........
- 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........e.......
- 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....+.......j...
- 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x94, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ...........e...
- 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // j...............
- 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ....e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, // e...e...e.......
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, // e...e.......6...
- 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....Sa..;.......
- 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // .G......;.......
- 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // .U......;.......
- 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........=.......
- 0xcb, 0x41, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // .A..w...=.......
- 0x2c, 0x3f, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, // ,?..4...>....G..
- 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, // .A..>....U..,?..
- 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, // 9........&......
- 0xc9, 0x47, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .G...U......=...
- 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
- 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // ............8...
- 0x36, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0xe5, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x39, 0x1b, 0x00, 0x00, // ....7.......9...
- 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
- 0x64, 0x57, 0x00, 0x00, 0x39, 0x1b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // dW..9...=.......
- 0x12, 0x50, 0x00, 0x00, 0x39, 0x1b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .P..9...=.......
- 0x5c, 0x39, 0x00, 0x00, 0x39, 0x1b, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, // .9..9...P.......
- 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0x12, 0x50, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, // .*..dW...P...9..
- 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // .....*..8...6...
- 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, // ....5...........
- 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
- 0xc4, 0x25, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x94, 0x1f, 0x00, 0x00, // .%..=...........
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1f, 0x48, 0x00, 0x00, // ....=........H..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbf, 0x32, 0x00, 0x00, // ....=........2..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd2, 0x32, 0x00, 0x00, // ....=........2..
- 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xec, 0x21, 0x00, 0x00, // ....P........!..
- 0x94, 0x1f, 0x00, 0x00, 0x1f, 0x48, 0x00, 0x00, 0xbf, 0x32, 0x00, 0x00, 0xd2, 0x32, 0x00, 0x00, // .....H...2...2..
- 0xfe, 0x00, 0x02, 0x00, 0xec, 0x21, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // .....!..8...6...
- 0x08, 0x00, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, // ............}...
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa8, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7........H..7...
- 0x95, 0x02, 0x00, 0x00, 0x82, 0x5a, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // .....Z..7.......
- 0x4e, 0x48, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x82, 0x51, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // NH.......Q..;...
- 0x8a, 0x02, 0x00, 0x00, 0x5f, 0x5b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ...._[......;...
- 0x8a, 0x02, 0x00, 0x00, 0xcf, 0x54, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....T......;...
- 0x8a, 0x02, 0x00, 0x00, 0x53, 0x35, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....S5......>...
- 0x5f, 0x5b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // _[......9.......
- 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x5f, 0x5b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....5..._[..=...
- 0x18, 0x00, 0x00, 0x00, 0xc4, 0x60, 0x00, 0x00, 0x82, 0x5a, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, // .....`...Z......
- 0x18, 0x00, 0x00, 0x00, 0xef, 0x3d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, // .....=......E...
- 0xc4, 0x60, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x15, 0x00, 0x00, // .`..........g...
- 0xef, 0x3d, 0x00, 0x00, 0x29, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, // .=..)...........
- 0x3f, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x67, 0x15, 0x00, 0x00, // ?...........g...
- 0x4f, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x96, 0x61, 0x00, 0x00, // O...=........a..
- 0xa8, 0x48, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5f, 0x3c, 0x00, 0x00, // .H..O......._<..
- 0x96, 0x61, 0x00, 0x00, 0x96, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .a...a..........
- 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xcf, 0x54, 0x00, 0x00, 0x76, 0x09, 0x00, 0x00, // ....>....T..v...
- 0x39, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5a, 0x46, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, // 9.......ZF......
- 0xcf, 0x54, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08, 0x58, 0x00, 0x00, // .T...........X..
- 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x5f, 0x3c, 0x00, 0x00, 0x5a, 0x46, 0x00, 0x00, // ........_<..ZF..
- 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa3, 0x2c, 0x00, 0x00, 0x08, 0x58, 0x00, 0x00, // .........,...X..
- 0x67, 0x15, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa3, 0x2e, 0x00, 0x00, // g...P...........
- 0x3f, 0x0d, 0x00, 0x00, 0x3f, 0x0d, 0x00, 0x00, 0x3f, 0x0d, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, // ?...?...?.......
- 0x18, 0x00, 0x00, 0x00, 0x7a, 0x61, 0x00, 0x00, 0xa3, 0x2c, 0x00, 0x00, 0xa3, 0x2e, 0x00, 0x00, // ....za...,......
- 0x3e, 0x00, 0x03, 0x00, 0x53, 0x35, 0x00, 0x00, 0x59, 0x05, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, // >...S5..Y...9...
- 0x18, 0x00, 0x00, 0x00, 0x3b, 0x61, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x53, 0x35, 0x00, 0x00, // ....;a......S5..
- 0x0c, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd5, 0x36, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .........6......
- 0x1a, 0x00, 0x00, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x3b, 0x61, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ....za..;a..Q...
- 0x0d, 0x00, 0x00, 0x00, 0xbd, 0x37, 0x00, 0x00, 0xd5, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....7...6......
- 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x60, 0x58, 0x00, 0x00, 0xd5, 0x36, 0x00, 0x00, // Q.......`X...6..
- 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x41, 0x1c, 0x00, 0x00, // ....Q.......A...
- 0xd5, 0x36, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // .6......P.......
- 0x99, 0x56, 0x00, 0x00, 0xbd, 0x37, 0x00, 0x00, 0x60, 0x58, 0x00, 0x00, 0x41, 0x1c, 0x00, 0x00, // .V...7..`X..A...
- 0x8a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4e, 0x48, 0x00, 0x00, 0x99, 0x56, 0x00, 0x00, // ....>...NH...V..
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....8....
+ 0x46, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0x08, 0x0c, 0x00, 0x00, 0x03, 0x02, // FSH..,.?........
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x97, 0x61, 0x00, 0x00, 0x00, 0x00, // #..........a....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ..w...4.........
+ 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, // ................
+ 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x01, 0x14, 0x00, 0x00, 0x76, 0x65, // in............ve
+ 0x63, 0x33, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, // c3_splat(f1;....
+ 0x03, 0x00, 0x39, 0x1b, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, // ..9..._x......5.
+ 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, // ..vec4_splat(f1;
+ 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, // .........._x....
+ 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, // ......@main(vf4;
+ 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa8, 0x48, // vf3;vf4;.......H
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x82, 0x5a, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, // ...Z..v_normal..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x4e, 0x48, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // ......NH..gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, // gData_0_........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, // ..bgfx_VoidFrag.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x5f, 0x5b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......_[..param.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x29, 0x05, 0x00, 0x00, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, // ......)...lightD
+ 0x69, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x67, 0x15, 0x00, 0x00, 0x6e, 0x64, // ir........g...nd
+ 0x6f, 0x74, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3f, 0x0d, 0x00, 0x00, 0x73, 0x70, // otl.......?...sp
+ 0x65, 0x63, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xcf, 0x54, 0x00, 0x00, 0x70, 0x61, // ec.........T..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x53, 0x35, 0x00, 0x00, 0x70, 0x61, // ram.......S5..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x76, 0x5f, // ram........A..v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, // color0........w.
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, // ..,?..v_normal..
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, // ......4...v_norm
+ 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, // al............gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, // _FragData_0_....
+ 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...G..param.....
+ 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...U..param.....
+ 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ......param.....
+ 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ......gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x24, 0x47, // a_0_..........$G
+ 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, // lobal...........
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, // ..u_viewRect....
+ 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x02, 0x00, // Texel...........
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, // ..u_view........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, // ......u_invView.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x05, 0x00, // proj............
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invProj.....
+ 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x07, 0x00, // Proj............
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ..u_invViewProj.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x09, 0x00, // model...........
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, // ..u_modelView...
+ 0x07, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfe, 0x07, // lViewProj.......
+ 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, // ......u_alphaRef
+ 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // 4.G...w.........
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G...4.........
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x94, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, // ..G...........@.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x01, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, // ..#.......H.....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, // ..........H.....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x03, 0x00, // ..`...H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, // ..........H.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, // ..........H.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, // ..........H.....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, // ..........H.....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x07, 0x00, // ..`...H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, // ..........H.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, // ..........H.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfe, 0x07, // ..........H.....
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, // ..........H.....
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x02, 0x00, // .. ...G.........
+ 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, // ..........!.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8a, 0x02, // ..!.............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, // ..!.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, // ..!...}.........
+ 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
+ 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x2c, 0x00, 0x06, 0x00, 0x18, 0x00, // ..A.......,.....
+ 0x00, 0x00, 0x29, 0x05, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x41, 0x03, // ..)...........A.
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4f, 0x01, 0x00, 0x00, 0x00, 0x00, // ..+.......O.....
+ 0xf0, 0x41, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x76, 0x09, 0x00, 0x00, 0xcd, 0xcc, // .A+.......v.....
+ 0x0c, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x59, 0x05, 0x00, 0x00, 0x2f, 0xba, // .@+.......Y.../.
+ 0xe8, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, // .>+.............
+ 0x80, 0x3f, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, // .? .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, // ..;.......w.....
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x01, 0x00, // ..;.......4.....
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, // ..;.............
+ 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, // ......e.........
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, // ..+.......j... .
+ 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x94, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ..........e...j.
+ 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x65, 0x00, // ..e...e.......e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, // ..e.......6.....
+ 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, // ................
+ 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, // ..Sa..;........G
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xab, 0x55, // ......;........U
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, // ......;.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, // ......=........A
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, // ..w...=.......,?
+ 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xcb, 0x41, // ..4...>....G...A
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, // ..>....U..,?..9.
+ 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0xc9, 0x47, // .......&.......G
+ 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ...U......=.....
+ 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, // ..........>.....
+ 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // ..........8...6.
+ 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x00, // ................
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x39, 0x1b, 0x00, 0x00, 0xf8, 0x00, // ..7.......9.....
+ 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, // ......=.......dW
+ 0x00, 0x00, 0x39, 0x1b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x12, 0x50, // ..9...=........P
+ 0x00, 0x00, 0x39, 0x1b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, // ..9...=........9
+ 0x00, 0x00, 0x39, 0x1b, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0xb0, 0x2a, // ..9...P........*
+ 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0x12, 0x50, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, // ..dW...P...9....
+ 0x02, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...*..8...6.....
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, // ..5...........7.
+ 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc4, 0x25, // ...............%
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x94, 0x1f, 0x00, 0x00, 0xdd, 0x0e, // ..=.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1f, 0x48, 0x00, 0x00, 0xdd, 0x0e, // ..=........H....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbf, 0x32, 0x00, 0x00, 0xdd, 0x0e, // ..=........2....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd2, 0x32, 0x00, 0x00, 0xdd, 0x0e, // ..=........2....
+ 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xec, 0x21, 0x00, 0x00, 0x94, 0x1f, // ..P........!....
+ 0x00, 0x00, 0x1f, 0x48, 0x00, 0x00, 0xbf, 0x32, 0x00, 0x00, 0xd2, 0x32, 0x00, 0x00, 0xfe, 0x00, // ...H...2...2....
+ 0x02, 0x00, 0xec, 0x21, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, // ...!..8...6.....
+ 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x37, 0x00, // ..........}...7.
+ 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa8, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, // .......H..7.....
+ 0x00, 0x00, 0x82, 0x5a, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4e, 0x48, // ...Z..7.......NH
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x82, 0x51, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // .......Q..;.....
+ 0x00, 0x00, 0x5f, 0x5b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // .._[......;.....
+ 0x00, 0x00, 0xcf, 0x54, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // ...T......;.....
+ 0x00, 0x00, 0x53, 0x35, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x5b, // ..S5......>..._[
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, // ......9.........
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x5f, 0x5b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // ..5..._[..=.....
+ 0x00, 0x00, 0xc4, 0x60, 0x00, 0x00, 0x82, 0x5a, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x18, 0x00, // ...`...Z........
+ 0x00, 0x00, 0xef, 0x3d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0xc4, 0x60, // ...=......E....`
+ 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x15, 0x00, 0x00, 0xef, 0x3d, // ..........g....=
+ 0x00, 0x00, 0x29, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3f, 0x0d, // ..)...........?.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x67, 0x15, 0x00, 0x00, 0x4f, 0x01, // ..........g...O.
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x96, 0x61, 0x00, 0x00, 0xa8, 0x48, // ..=........a...H
+ 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5f, 0x3c, 0x00, 0x00, 0x96, 0x61, // ..O......._<...a
+ 0x00, 0x00, 0x96, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, // ...a............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xcf, 0x54, 0x00, 0x00, 0x76, 0x09, 0x00, 0x00, 0x39, 0x00, // ..>....T..v...9.
+ 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5a, 0x46, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0xcf, 0x54, // ......ZF.......T
+ 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08, 0x58, 0x00, 0x00, 0x01, 0x00, // ...........X....
+ 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x5f, 0x3c, 0x00, 0x00, 0x5a, 0x46, 0x00, 0x00, 0x8e, 0x00, // ......_<..ZF....
+ 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa3, 0x2c, 0x00, 0x00, 0x08, 0x58, 0x00, 0x00, 0x67, 0x15, // .......,...X..g.
+ 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa3, 0x2e, 0x00, 0x00, 0x3f, 0x0d, // ..P...........?.
+ 0x00, 0x00, 0x3f, 0x0d, 0x00, 0x00, 0x3f, 0x0d, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x18, 0x00, // ..?...?.........
+ 0x00, 0x00, 0x7a, 0x61, 0x00, 0x00, 0xa3, 0x2c, 0x00, 0x00, 0xa3, 0x2e, 0x00, 0x00, 0x3e, 0x00, // ..za...,......>.
+ 0x03, 0x00, 0x53, 0x35, 0x00, 0x00, 0x59, 0x05, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x18, 0x00, // ..S5..Y...9.....
+ 0x00, 0x00, 0x3b, 0x61, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x53, 0x35, 0x00, 0x00, 0x0c, 0x00, // ..;a......S5....
+ 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd5, 0x36, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, // .......6........
+ 0x00, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x3b, 0x61, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..za..;a..Q.....
+ 0x00, 0x00, 0xbd, 0x37, 0x00, 0x00, 0xd5, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ...7...6......Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x60, 0x58, 0x00, 0x00, 0xd5, 0x36, 0x00, 0x00, 0x01, 0x00, // ......`X...6....
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x41, 0x1c, 0x00, 0x00, 0xd5, 0x36, // ..Q.......A....6
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x99, 0x56, // ......P........V
+ 0x00, 0x00, 0xbd, 0x37, 0x00, 0x00, 0x60, 0x58, 0x00, 0x00, 0x41, 0x1c, 0x00, 0x00, 0x8a, 0x00, // ...7..`X..A.....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4e, 0x48, 0x00, 0x00, 0x99, 0x56, 0x00, 0x00, 0xfd, 0x00, // ..>...NH...V....
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..8....
};
-static const uint8_t fs_metaballs_dx9[421] =
+static const uint8_t fs_metaballs_dx9[423] =
{
- 0x46, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0x98, 0x01, 0x00, 0x03, 0xff, 0xff, // FSH..,.?........
- 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#...
- 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
- 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....ps_3_0.Micro
- 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
- 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, // ader Compiler 10
- 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0xf0, 0x41, // .1..Q..........A
- 0xcd, 0xcc, 0x0c, 0x40, 0x2f, 0xba, 0xe8, 0x3e, 0x00, 0x00, 0x80, 0x3f, 0x1f, 0x00, 0x00, 0x02, // ...@/..>...?....
- 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x07, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, // ................
- 0x01, 0x00, 0x07, 0x90, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0xe4, 0x90, // ................
- 0x01, 0x00, 0xe4, 0x90, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, // ................
- 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xaa, 0x90, // ................
- 0x20, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0xa0, // ...............
- 0x0f, 0x00, 0x00, 0x02, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x90, 0x0f, 0x00, 0x00, 0x02, // ................
- 0x02, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x90, 0x0f, 0x00, 0x00, 0x02, 0x02, 0x00, 0x04, 0x80, // ......U.........
- 0x00, 0x00, 0xaa, 0x90, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0e, 0x80, 0x02, 0x00, 0x90, 0x80, // ................
- 0x00, 0x00, 0x55, 0xa0, 0x0e, 0x00, 0x00, 0x02, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, 0x80, // ..U...........U.
- 0x0e, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x80, 0x00, 0x00, 0xaa, 0x80, 0x0e, 0x00, 0x00, 0x02, // ................
- 0x02, 0x00, 0x04, 0x80, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, // ................
- 0x02, 0x00, 0xe4, 0x80, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x02, // ................
- 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x80, // ................
- 0x00, 0x00, 0x55, 0x80, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x04, 0x80, 0x00, 0x00, 0xaa, 0x80, // ..U.............
- 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xaa, 0xa0, // ................
- 0x0e, 0x00, 0x00, 0x02, 0x00, 0x08, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0x00, 0x02, // ................
- 0x00, 0x08, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x0e, 0x00, 0x00, 0x02, 0x00, 0x08, 0x04, 0x80, // ......U.........
- 0x00, 0x00, 0xaa, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0xff, 0xa0, // ................
- 0xff, 0xff, 0x00, 0x00, 0x00, // .....
+ 0x46, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x00, 0x03, // FSH..,.?........
+ 0xff, 0xff, 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, // ......CTAB....#.
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, // 10.1..Q.........
+ 0xf0, 0x41, 0xcd, 0xcc, 0x0c, 0x40, 0x2f, 0xba, 0xe8, 0x3e, 0x00, 0x00, 0x80, 0x3f, 0x1f, 0x00, // .A...@/..>...?..
+ 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x07, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x01, 0x80, 0x01, 0x00, 0x07, 0x90, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, // ................
+ 0xe4, 0x90, 0x01, 0x00, 0xe4, 0x90, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, // ................
+ 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
+ 0xaa, 0x90, 0x20, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, // .. .............
+ 0x00, 0xa0, 0x0f, 0x00, 0x00, 0x02, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x90, 0x0f, 0x00, // ................
+ 0x00, 0x02, 0x02, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x90, 0x0f, 0x00, 0x00, 0x02, 0x02, 0x00, // ........U.......
+ 0x04, 0x80, 0x00, 0x00, 0xaa, 0x90, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0e, 0x80, 0x02, 0x00, // ................
+ 0x90, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x0e, 0x00, 0x00, 0x02, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, // ....U...........
+ 0x55, 0x80, 0x0e, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x80, 0x00, 0x00, 0xaa, 0x80, 0x0e, 0x00, // U...............
+ 0x00, 0x02, 0x02, 0x00, 0x04, 0x80, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
+ 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x0f, 0x00, // ................
+ 0x00, 0x02, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, // ................
+ 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x04, 0x80, 0x00, 0x00, // ....U...........
+ 0xaa, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x00, 0x00, // ................
+ 0xaa, 0xa0, 0x0e, 0x00, 0x00, 0x02, 0x00, 0x08, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x08, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x0e, 0x00, 0x00, 0x02, 0x00, 0x08, // ........U.......
+ 0x04, 0x80, 0x00, 0x00, 0xaa, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, // ................
+ 0xff, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
};
-static const uint8_t fs_metaballs_dx11[660] =
+static const uint8_t fs_metaballs_dx11[662] =
{
- 0x46, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0x84, 0x02, 0x44, 0x58, 0x42, 0x43, // FSH..,.?....DXBC
- 0x71, 0x00, 0x85, 0x0b, 0x80, 0xfd, 0x1e, 0xdf, 0x09, 0x21, 0xdf, 0xe6, 0x3a, 0xef, 0x53, 0xf8, // q........!..:.S.
- 0x01, 0x00, 0x00, 0x00, 0x84, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
- 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, // ........ISGNl...
- 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........P.......
- 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........b.......
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, // ................
- 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
- 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, // R.TEXCOORD..OSGN
- 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
- 0x53, 0x48, 0x44, 0x52, 0xa8, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, // SHDR....@...j...
- 0x62, 0x10, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, // b...r.......b...
- 0x72, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // r.......e.... ..
- 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x05, // ....h......./...
- 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // r.......F.......
- 0x38, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, // 8...r.......F...
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x0c, 0x40, 0xcd, 0xcc, 0x0c, 0x40, // .....@.....@...@
- 0xcd, 0xcc, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, // ...@........r...
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x07, // ....F...........
- 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ........F.......
- 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, 0x82, 0x00, 0x10, 0x00, // F.......D.......
- 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, // ....:.......8...
- 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........:.......
- 0x2a, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, // *......./.......
- 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....:...A.......
- 0x38, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, // 8...............
- 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x41, 0x19, 0x00, 0x00, 0x05, // .....@.....A....
- 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, // 2...r.......F...
- 0x00, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........A.......
- 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, // ......../...r...
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, // ....F.......8...
- 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // r.......F.......
- 0x02, 0x40, 0x00, 0x00, 0x2f, 0xba, 0xe8, 0x3e, 0x2f, 0xba, 0xe8, 0x3e, 0x2f, 0xba, 0xe8, 0x3e, // .@../..>/..>/..>
- 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........r ......
- 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x82, 0x20, 0x10, 0x00, // F.......6.... ..
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x3e, 0x00, 0x00, 0x01, // .....@.....?>...
- 0x00, 0x00, 0x00, 0x00, // ....
+ 0x46, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0x84, 0x02, 0x00, 0x00, 0x44, 0x58, // FSH..,.?......DX
+ 0x42, 0x43, 0x71, 0x00, 0x85, 0x0b, 0x80, 0xfd, 0x1e, 0xdf, 0x09, 0x21, 0xdf, 0xe6, 0x3a, 0xef, // BCq........!..:.
+ 0x53, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x84, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // S.............,.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, // ..........ISGNl.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, // ..........b.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x07, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, // LOR.TEXCOORD..OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xa8, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x6a, 0x00, // ..SHDR....@...j.
+ 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, // ..b...r.......b.
+ 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, // ..r.......e....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x2f, 0x00, // ......h......./.
+ 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x01, 0x00, // ..r.......F.....
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, // ..8...r.......F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x0c, 0x40, 0xcd, 0xcc, // .......@.....@..
+ 0x0c, 0x40, 0xcd, 0xcc, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x05, 0x72, 0x00, // .@...@........r.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, // ......F.........
+ 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, // ..........F.....
+ 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, 0x82, 0x00, // ..F.......D.....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, // ......:.......8.
+ 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, // ..........:.....
+ 0x00, 0x00, 0x2a, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x06, 0x12, 0x00, // ..*......./.....
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, // ......:...A.....
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, // ..8.............
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x41, 0x19, 0x00, // .......@.....A..
+ 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, // ..2...r.......F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........A.....
+ 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x05, 0x72, 0x00, // ........../...r.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, // ......F.......8.
+ 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, // ..r.......F.....
+ 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x2f, 0xba, 0xe8, 0x3e, 0x2f, 0xba, 0xe8, 0x3e, 0x2f, 0xba, // ...@../..>/..>/.
+ 0xe8, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, // .>........r ....
+ 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x82, 0x20, // ..F.......6....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x3e, 0x00, // .......@.....?>.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ......
};
static const uint8_t fs_metaballs_mtl[712] =
{
- 0x46, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0xb9, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH..,.?......us
+ 0x46, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0xb9, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH..,.?......us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/02-metaballs/metaballs.cpp b/3rdparty/bgfx/examples/02-metaballs/metaballs.cpp
index 60728cc672a..c14c3df0fda 100644
--- a/3rdparty/bgfx/examples/02-metaballs/metaballs.cpp
+++ b/3rdparty/bgfx/examples/02-metaballs/metaballs.cpp
@@ -5,6 +5,7 @@
#include "common.h"
#include "bgfx_utils.h"
+#include "imgui/imgui.h"
#include <bgfx/embedded_shader.h>
@@ -12,6 +13,9 @@
#include "vs_metaballs.bin.h"
#include "fs_metaballs.bin.h"
+namespace
+{
+
static const bgfx::EmbeddedShader s_embeddedShaders[] =
{
BGFX_EMBEDDED_SHADER(vs_metaballs),
@@ -371,7 +375,7 @@ float vertLerp(float* __restrict _result, float _iso, uint32_t _idx0, float _v0,
const float* __restrict edge0 = s_cube[_idx0];
const float* __restrict edge1 = s_cube[_idx1];
- if (bx::fabsolute(_iso-_v1) < 0.00001f)
+ if (bx::fabs(_iso-_v1) < 0.00001f)
{
_result[0] = edge1[0];
_result[1] = edge1[1];
@@ -379,8 +383,8 @@ float vertLerp(float* __restrict _result, float _iso, uint32_t _idx0, float _v0,
return 1.0f;
}
- if (bx::fabsolute(_iso-_v0) < 0.00001f
- || bx::fabsolute(_v0-_v1) < 0.00001f)
+ if (bx::fabs(_iso-_v0) < 0.00001f
+ || bx::fabs(_v0-_v1) < 0.00001f)
{
_result[0] = edge0[0];
_result[1] = edge0[1];
@@ -474,13 +478,19 @@ uint32_t triangulate(uint8_t* _result, uint32_t _stride, const float* __restrict
class ExampleMetaballs : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleMetaballs(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -510,14 +520,18 @@ class ExampleMetaballs : public entry::AppI
m_grid = new Grid[DIMS*DIMS*DIMS];
m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
}
- int shutdown() BX_OVERRIDE
+ int shutdown() override
{
+ imguiDestroy();
+
delete [] m_grid;
// Cleanup.
- bgfx::destroyProgram(m_program);
+ bgfx::destroy(m_program);
// Shutdown bgfx.
bgfx::shutdown();
@@ -525,14 +539,28 @@ class ExampleMetaballs : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
const uint32_t ypitch = DIMS;
const uint32_t zpitch = DIMS*DIMS;
const float invdim = 1.0f/float(DIMS-1);
- if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
// Set view 0 default viewport.
bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
@@ -548,11 +576,6 @@ class ExampleMetaballs : public entry::AppI
const double toMs = 1000.0/freq;
float time = (float)( (now - m_timeOffset)/double(bx::getHPFrequency() ) );
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/02-metaball");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Rendering with transient buffers and embedding shaders.");
-
float at[3] = { 0.0f, 0.0f, 0.0f };
float eye[3] = { 0.0f, 0.0f, -50.0f };
@@ -726,7 +749,7 @@ class ExampleMetaballs : public entry::AppI
bgfx::setTransform(mtx);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(&tvb, 0, numVertices);
+ bgfx::setVertexBuffer(0, &tvb, 0, numVertices);
// Set render states.
bgfx::setState(BGFX_STATE_DEFAULT);
@@ -751,6 +774,8 @@ class ExampleMetaballs : public entry::AppI
return false;
}
+ entry::MouseState m_mouseState;
+
uint32_t m_width;
uint32_t m_height;
uint32_t m_debug;
@@ -761,4 +786,6 @@ class ExampleMetaballs : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(ExampleMetaballs);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleMetaballs, "02-metaball", "Rendering with transient buffers and embedding shaders.");
diff --git a/3rdparty/bgfx/examples/02-metaballs/vs_metaballs.bin.h b/3rdparty/bgfx/examples/02-metaballs/vs_metaballs.bin.h
index bc7a8999eb5..07b08f1bfe2 100644
--- a/3rdparty/bgfx/examples/02-metaballs/vs_metaballs.bin.h
+++ b/3rdparty/bgfx/examples/02-metaballs/vs_metaballs.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_metaballs_glsl[537] =
{
- 0x56, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x20, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // el. .. ..u_model
0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0xe6, 0x01, // ViewProj........
0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, // ..attribute high
@@ -35,307 +35,304 @@ static const uint8_t vs_metaballs_glsl[537] =
0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, // v_color0 = a_col
0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // or0;.}...
};
-static const uint8_t vs_metaballs_spv[3413] =
+static const uint8_t vs_metaballs_spv[3371] =
{
- 0x56, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x24, 0x0d, // .u_model......$.
- 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x37, 0x62, 0x00, 0x00, // ..#.........7b..
- 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, // ....GLSL.std.450
- 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
- 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........F.......
- 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x78, 0x04, 0x00, 0x00, // main........x...
- 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x78, 0x04, 0x00, 0x00, // Output......x...
- 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, // ....gl_Position.
- 0x06, 0x00, 0x06, 0x00, 0x78, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // ....x.......v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x78, 0x04, 0x00, 0x00, // lor0........x...
- 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, // ....v_normal....
- 0x05, 0x00, 0x07, 0x00, 0x9e, 0x15, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, // ........@main(vf
- 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // 4;vf3;vf3;......
- 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // O...a_color0....
- 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, // ....:...a_normal
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // .........M..a_po
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, // sition..........
- 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // _varying_.......
- 0x5e, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ^...$Global.....
- 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, // ^.......u_viewRe
- 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ct......^.......
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, // u_viewTexel.....
- 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, // ^.......u_view..
- 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ....^.......u_in
- 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // vView.......^...
- 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_proj......
- 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, // ^.......u_invPro
- 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // j.......^.......
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, // u_viewProj......
- 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ^.......u_invVie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // wProj.......^...
- 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_model.....
- 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // ^.......u_modelV
- 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // iew.....^.......
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
- 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, // ....^.......u_al
- 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, // phaRef4.....B...
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, // .........A..a_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, // lor0............
- 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
- 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, // .?..a_normal....
- 0x05, 0x00, 0x05, 0x00, 0x46, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, // ....F...a_normal
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ........@,..a_po
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, // sition..........
- 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_position......
- 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, // ....flattenTemp.
- 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....U..param...
- 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....8..param...
- 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // ........param...
- 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, // ........@entryPo
- 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, // intOutput_gl_Pos
- 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x29, 0x04, 0x00, 0x00, // ition.......)...
- 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x29, 0x04, 0x00, 0x00, // Output......)...
- 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....v_color0....
- 0x06, 0x00, 0x06, 0x00, 0x29, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, // ....).......v_no
- 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, // rmal............
- 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, // @entryPointOutpu
- 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // t...G...........
- 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...H...^.......
- 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // #.......H...^...
- 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ....#.......H...
- 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ^...........H...
- 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ^.......#... ...
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...^...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...^.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...^.......
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // #...`...H...^...
- 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ^...........H...
- 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // ^.......#.......
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...^...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...^.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...^.......
- 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // #.......H...^...
- 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ^...........H...
- 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, // ^.......#... ...
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...^...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...^.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...^.......
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // #...`...H...^...
- 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ^...........H...
- 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, // ^.......#.......
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...^...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...^.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...^.......
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // #.......H...^...
- 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ^...........H...
- 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, // ^.......#.......
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...^...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....H...^.......
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x5e, 0x05, 0x00, 0x00, // #... ...G...^...
- 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // ....G...B..."...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x46, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...F.......
- 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
- 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....G...........
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
- 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, // ............!...
- 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
- 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x78, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........x.......
- 0x1d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x44, 0x09, 0x00, 0x00, // ........!...D...
- 0x78, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, // x...............
- 0x20, 0x00, 0x04, 0x00, 0xf5, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x78, 0x04, 0x00, 0x00, // ...........x...
- 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........ .......
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // +...............
- 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, // +..............?
- 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ,...............
- 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, // ............,...
- 0x18, 0x00, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....r...........
- 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........e.......
- 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....+.......j...
- 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ...........e...
- 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // j.......^.......
- 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ....e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xab, 0x03, 0x00, 0x00, // e...e...e.......
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // e...e....... ...
- 0xdb, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ........^...;...
- 0xdb, 0x07, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ....B.......+...
- 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....)....... ...
- 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ........e...+...
- 0x0c, 0x00, 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....#....... ...
- 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x96, 0x02, 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ....F.......;...
- 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, // ................
- 0x29, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // )........... ...
- 0xa6, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x29, 0x04, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ........)...;...
- 0xa6, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x97, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, // ............6...
- 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xf5, 0x06, 0x00, 0x00, // ....Sa..;.......
- 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........;.......
- 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // .U......;.......
- 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // .8......;.......
- 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........=.......
- 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // .A......=.......
- 0xd9, 0x3f, 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // .?..F...=.......
- 0x40, 0x2c, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, // @,......>....U..
- 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, // .A..>....8...?..
- 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, // >.......@,..9...
- 0x78, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x9e, 0x15, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, // x...I&.......U..
- 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, // .8......>.......
- 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // I&..A.......T4..
- 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........=.......
- 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, // ....T4..>.......
- 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, // ....A.......'A..
- 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........=.......
- 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, // ....'A..A.......
- 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .N..........>...
- 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, // .N......A.......
- 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .M..........=...
- 0x18, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .........M..A...
- 0x97, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ................
- 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >...............
- 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x78, 0x04, 0x00, 0x00, 0x9e, 0x15, 0x00, 0x00, // 8...6...x.......
- 0x00, 0x00, 0x00, 0x00, 0x44, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....D...7.......
- 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, // O...7.......:...
- 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........M......
- 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xf5, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // _W..;...........
- 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, // ....A.......d-..
- 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, // ........>...d-..
- 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, // ....A........8..
- 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, // ........>....8..
- 0x72, 0x02, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, // r...=.......5b..
- 0xb9, 0x4d, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, // .M..Q.......;:..
- 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // 5b......Q.......
- 0x0b, 0x47, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // .G..5b......Q...
- 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....+S..5b......
- 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, // P........2..;:..
- 0x0b, 0x47, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .G..+S......A...
- 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // ....),..B...)...
- 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, // =...e....<..),..
- 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, // .........;...2..
- 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, 0x00, 0x00, // .<..A......._8..
- 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, 0x00, 0x00, // ........>..._8..
- 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, // .;..=.......6b..
- 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3c, 0x3a, 0x00, 0x00, // :...Q.......<:..
- 0x36, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // 6b......Q.......
- 0x0c, 0x47, 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // .G..6b......Q...
- 0x0d, 0x00, 0x00, 0x00, 0x2c, 0x53, 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....,S..6b......
- 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x85, 0x32, 0x00, 0x00, 0x3c, 0x3a, 0x00, 0x00, // P........2..<:..
- 0x0c, 0x47, 0x00, 0x00, 0x2c, 0x53, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, // .G..,S......A...
- 0xe2, 0x02, 0x00, 0x00, 0x2a, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, // ....*,..B...#...
- 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xfd, 0x3d, 0x00, 0x00, // ....=...e....=..
- 0x2a, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x62, 0x32, 0x00, 0x00, // *,..........b2..
- 0x85, 0x32, 0x00, 0x00, 0xfd, 0x3d, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, // .2...=..O.......
- 0x57, 0x35, 0x00, 0x00, 0x62, 0x32, 0x00, 0x00, 0x62, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // W5..b2..b2......
- 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, // ........A.......
- 0xd3, 0x48, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .H..........>...
- 0xd3, 0x48, 0x00, 0x00, 0x57, 0x35, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .H..W5..=.......
- 0x1d, 0x21, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // .!..O...A.......
- 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // -<..........>...
- 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x78, 0x04, 0x00, 0x00, // -<...!..=...x...
- 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, // G:..........G:..
- 0x38, 0x00, 0x01, 0x00, 0x00, // 8....
+ 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0xf8, 0x0c, // .u_model........
+ 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x37, 0x62, // ....#.........7b
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
+ 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
+ 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
+ 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, 0xa6, 0x14, // in........F.....
+ 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x33, 0x13, 0x00, 0x00, 0x03, 0x00, // ......v...3.....
+ 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x78, 0x04, // ..main........x.
+ 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x78, 0x04, // ..Output......x.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // ......gl_Positio
+ 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x78, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // n.....x.......v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x78, 0x04, // color0........x.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, // ......v_normal..
+ 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x9e, 0x15, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, // ..........@main(
+ 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, // vf4;vf3;vf3;....
+ 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..O...a_color0..
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, // ......:...a_norm
+ 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x61, 0x5f, // al.........M..a_
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, // position........
+ 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, // .._varying_.....
+ 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ..^...$Global...
+ 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..^.......u_view
+ 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x01, 0x00, // Rect......^.....
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..^.......u_view
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......^.......u_
+ 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, // invView.......^.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
+ 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..^.......u_invP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, // roj.......^.....
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
+ 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..^.......u_invV
+ 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, // iewProj.......^.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
+ 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..^.......u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, // lView.....^.....
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
+ 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.....^.......u_
+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, // alphaRef4.....B.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, // ...........A..a_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, // color0..........
+ 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..a_color0......
+ 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, // ...?..a_normal..
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x46, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, // ......F...a_norm
+ 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, // al........@,..a_
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, // position........
+ 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, // ..a_position....
+ 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
+ 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // p......U..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......8..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
+ 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, // ..........@entry
+ 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, // PointOutput.gl_P
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, 0x76, 0x13, // osition.......v.
+ 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
+ 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x05, 0x00, // put.v_color0....
+ 0x09, 0x00, 0x33, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, // ..3...@entryPoin
+ 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, // tOutput.v_normal
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, // ..G...........@.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...^.......#.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x01, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, // ..#.......H...^.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..........H...^.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..^.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...^.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...^.......#.
+ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, // ..`...H...^.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, // ..........H...^.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..........H...^.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..^.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...^.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...^.......#.
+ 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, // ..........H...^.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..........H...^.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..^.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...^.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...^.......#.
+ 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, // ..`...H...^.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, // ..........H...^.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..........H...^.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..^.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...^.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...^.......#.
+ 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, // ..........H...^.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..........H...^.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..^.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...^.......#.
+ 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, // .. ...G...^.....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...B...".....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x46, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G...F.........
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, // ..G.............
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...v.........
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x33, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G...3.........
+ 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, // ..........!.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
+ 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x78, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......x.........
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x44, 0x09, 0x00, 0x00, 0x78, 0x04, // ......!...D...x.
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0xf5, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x78, 0x04, 0x00, 0x00, 0x15, 0x00, // ..........x.....
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, // ...... .......+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, // .............?+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, // ..............,.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, // ................
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
+ 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, 0x18, 0x00, // ..........,.....
+ 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, // ..r.............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, // ......e.........
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, // ..+.......j... .
+ 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ..........e...j.
+ 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......^.........
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, // ..e...e.......e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xdb, 0x07, // ..e....... .....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xdb, 0x07, // ......^...;.....
+ 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..B.......+.....
+ 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, // ..)....... .....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ......e...+.....
+ 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..#....... .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
+ 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, // .......... .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, // ..........;.....
+ 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, // ..F.......;.....
+ 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // .......... .....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
+ 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
+ 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x02, // ..v....... .....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x02, // ..........;.....
+ 0x00, 0x00, 0x33, 0x13, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, // ..3.......6.....
+ 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, // ................
+ 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xf5, 0x06, 0x00, 0x00, 0x08, 0x10, // ..Sa..;.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, // ......;........U
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, // ......;........8
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, // ......;.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, // ......=........A
+ 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, // ......=........?
+ 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x40, 0x2c, // ..F...=.......@,
+ 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, // ......>....U...A
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, // ..>....8...?..>.
+ 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x78, 0x04, // ......@,..9...x.
+ 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x9e, 0x15, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, // ..I&.......U...8
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, // ......>.......I&
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, // ..A.......T4....
+ 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, // ......=.........
+ 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, // ..T4..>.........
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, // ..A........@....
+ 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, // ......=....... .
+ 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, // ...@..>...v... .
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, // ..A........@....
+ 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x2d, // ......=........-
+ 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x33, 0x13, 0x00, 0x00, 0x13, 0x2d, // ...@..>...3....-
+ 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x78, 0x04, // ......8...6...x.
+ 0x00, 0x00, 0x9e, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x09, 0x00, 0x00, 0x37, 0x00, // ..........D...7.
+ 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, // ......O...7.....
+ 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xb9, 0x4d, // ..:...7........M
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xf5, 0x06, // ......_W..;.....
+ 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
+ 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..d-..........>.
+ 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, // ..d-......A.....
+ 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...8..........>.
+ 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // ...8..r...=.....
+ 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..5b...M..Q.....
+ 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ..;:..5b......Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, // .......G..5b....
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x35, 0x62, // ..Q.......+S..5b
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, // ......P........2
+ 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x8a, 0x00, // ..;:...G..+S....
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, // ..A.......),..B.
+ 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, // ..)...=...e....<
+ 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, // ..),...........;
+ 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ...2...<..A.....
+ 0x00, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, // .._8..........>.
+ 0x03, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // .._8...;..=.....
+ 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..6b..:...Q.....
+ 0x00, 0x00, 0x3c, 0x3a, 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ..<:..6b......Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x47, 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, 0x01, 0x00, // .......G..6b....
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2c, 0x53, 0x00, 0x00, 0x36, 0x62, // ..Q.......,S..6b
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x85, 0x32, // ......P........2
+ 0x00, 0x00, 0x3c, 0x3a, 0x00, 0x00, 0x0c, 0x47, 0x00, 0x00, 0x2c, 0x53, 0x00, 0x00, 0x0c, 0x0a, // ..<:...G..,S....
+ 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x2a, 0x2c, 0x00, 0x00, 0x42, 0x13, // ..A.......*,..B.
+ 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, // ..#.......=...e.
+ 0x00, 0x00, 0xfd, 0x3d, 0x00, 0x00, 0x2a, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...=..*,........
+ 0x00, 0x00, 0x62, 0x32, 0x00, 0x00, 0x85, 0x32, 0x00, 0x00, 0xfd, 0x3d, 0x00, 0x00, 0x4f, 0x00, // ..b2...2...=..O.
+ 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x57, 0x35, 0x00, 0x00, 0x62, 0x32, 0x00, 0x00, 0x62, 0x32, // ......W5..b2..b2
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, // ..............A.
+ 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0xd3, 0x48, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, // .......H........
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd3, 0x48, 0x00, 0x00, 0x57, 0x35, 0x00, 0x00, 0x3d, 0x00, // ..>....H..W5..=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x41, 0x00, // .......!..O...A.
+ 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, // ......-<........
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, // ..>...-<...!..=.
+ 0x04, 0x00, 0x78, 0x04, 0x00, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, // ..x...G:........
+ 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..G:..8....
};
-static const uint8_t vs_metaballs_dx9[449] =
+static const uint8_t vs_metaballs_dx9[451] =
{
- 0x56, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
0x65, 0x6c, 0x04, 0x20, 0x04, 0x00, 0x03, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // el. .....u_model
0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, 0x90, 0x01, // ViewProj........
- 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x2c, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, // ......,.CTAB....
- 0x83, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, // ................
- 0x00, 0x91, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, // ....|...D.......
- 0x03, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, // ....L...........
- 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........l.......
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, // u_model.........
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // .......u_modelV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, // iewProj.........
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, // ........vs_3_0.M
- 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, // icrosoft (R) HLS
- 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, // L Shader Compile
- 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, // r 10.1..........
- 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, // ................
- 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
- 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, // ................
- 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x02, 0x00, 0x07, 0xe0, // ................
- 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x55, 0x90, // ..............U.
- 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x90, // ................
- 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, // ................
- 0x02, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, // ................
- 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, // ................
- 0x05, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, // ......U.........
- 0x04, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, // ................
- 0x02, 0x00, 0x07, 0xe0, 0x06, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, // ................
- 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, // ................
- 0x00, // .
+ 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x2c, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // ........,.CTAB..
+ 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, // ......|...D.....
+ 0x04, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, // ......L.........
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........l.....
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, // ..u_model.......
+ 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // .. .......u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, // lViewProj.......
+ 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, // ..........vs_3_0
+ 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, // .Microsoft (R) H
+ 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, // LSL Shader Compi
+ 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // ler 10.1........
+ 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
+ 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // ................
+ 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x02, 0x00, // ................
+ 0x07, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x02, 0x00, // ................
+ 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x02, 0x00, // U...............
+ 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, // ................
+ 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x07, 0x80, 0x05, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ........U.......
+ 0x07, 0x80, 0x04, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, // ................
+ 0x00, 0x04, 0x02, 0x00, 0x07, 0xe0, 0x06, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, // ................
+ 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, // ................
+ 0x00, 0x00, 0x00, // ...
};
-static const uint8_t vs_metaballs_dx11[726] =
+static const uint8_t vs_metaballs_dx11[728] =
{
- 0x56, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x80, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // el. .....u_model
0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x08, 0x04, 0x00, 0x9c, 0x02, // ViewProj........
- 0x44, 0x58, 0x42, 0x43, 0xc6, 0x4d, 0x04, 0x38, 0x93, 0x20, 0x89, 0x1c, 0xbe, 0x68, 0xbc, 0xd4, // DXBC.M.8. ...h..
- 0xee, 0x2f, 0x8a, 0xe9, 0x01, 0x00, 0x00, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ./..............
- 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, // ,...........ISGN
- 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, // h...........P...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....V...........
- 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, // ............]...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
- 0x07, 0x07, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, // ....COLOR.NORMAL
- 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, // .POSITION...OSGN
- 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, // l...........P...
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, // ............b...
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
- 0x07, 0x08, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, // ....SV_POSITION.
- 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, // COLOR.TEXCOORD..
- 0x53, 0x48, 0x44, 0x52, 0x84, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x61, 0x00, 0x00, 0x00, // SHDR....@...a...
- 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, // Y...F. .........
- 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _..........._...
- 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, // r......._...r...
- 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....g.... ......
- 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....e.... ......
- 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, // e...r ......h...
- 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....8...........
- 0x56, 0x15, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // V.......F. .....
- 0x81, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....2...........
- 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, // F. .............
- 0x02, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, // ....F.......2...
- 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F. .....
- 0x82, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ............F...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
- 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // F.......F. .....
- 0x83, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....6.... ......
- 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0x72, 0x00, 0x10, 0x00, // F.......8...r...
- 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, // ....V.......F. .
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, // ........2...r...
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
- 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
- 0x32, 0x00, 0x00, 0x0a, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, // 2...r ......F. .
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, // F.......>.......
- 0x02, 0x00, 0x01, 0x00, 0x40, 0x08, // ....@.
+ 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0xc6, 0x4d, 0x04, 0x38, 0x93, 0x20, 0x89, 0x1c, 0xbe, 0x68, // ..DXBC.M.8. ...h
+ 0xbc, 0xd4, 0xee, 0x2f, 0x8a, 0xe9, 0x01, 0x00, 0x00, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, // .../............
+ 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
+ 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......V.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x5d, 0x00, // ..............].
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x4e, 0x4f, 0x52, 0x4d, // ......COLOR.NORM
+ 0x41, 0x4c, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0xab, 0x4f, 0x53, // AL.POSITION...OS
+ 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNl...........P.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, // ..............b.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
+ 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
+ 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x84, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x61, 0x00, // ..SHDR....@...a.
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
+ 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, // ..r......._...r.
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e.... ....
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e...r ......h.
+ 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
+ 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
+ 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
+ 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, // ......F.......2.
+ 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
+ 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ........... ....
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..F.......F. ...
+ 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......6.... ....
+ 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0x72, 0x00, // ..F.......8...r.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x82, // ......V.......F.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, // .........2...r.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F. .......
+ 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, // ..........F.....
+ 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x82, // ..2...r ......F.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, // ...............
+ 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, // ..F.......>.....
+ 0x05, 0x00, 0x02, 0x00, 0x01, 0x00, 0x40, 0x08, // ......@.
};
static const uint8_t vs_metaballs_mtl[899] =
{
- 0x56, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x03, 0x2c, 0xf5, 0x3f, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..,.?...u_mod
0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x20, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // el. .. ..u_model
0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x50, 0x03, // ViewProj......P.
0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, // ..using namespac
diff --git a/3rdparty/bgfx/examples/03-raymarch/raymarch.cpp b/3rdparty/bgfx/examples/03-raymarch/raymarch.cpp
index 7cf65d45099..8826937423c 100644
--- a/3rdparty/bgfx/examples/03-raymarch/raymarch.cpp
+++ b/3rdparty/bgfx/examples/03-raymarch/raymarch.cpp
@@ -5,6 +5,10 @@
#include "common.h"
#include "bgfx_utils.h"
+#include "imgui/imgui.h"
+
+namespace
+{
struct PosColorTexCoord0Vertex
{
@@ -30,13 +34,6 @@ struct PosColorTexCoord0Vertex
bgfx::VertexDecl PosColorTexCoord0Vertex::ms_decl;
-static bool s_oglNdc = false;
-
-inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far)
-{
- bx::mtxProj(_result, _fovy, _aspect, _near, _far, s_oglNdc);
-}
-
void renderScreenSpaceQuad(uint8_t _view, bgfx::ProgramHandle _program, float _x, float _y, float _width, float _height)
{
bgfx::TransientVertexBuffer tvb;
@@ -97,20 +94,26 @@ void renderScreenSpaceQuad(uint8_t _view, bgfx::ProgramHandle _program, float _x
bgfx::setState(BGFX_STATE_DEFAULT);
bgfx::setIndexBuffer(&tib);
- bgfx::setVertexBuffer(&tvb);
+ bgfx::setVertexBuffer(0, &tvb);
bgfx::submit(_view, _program);
}
}
class ExampleRaymarch : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleRaymarch(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -127,9 +130,6 @@ class ExampleRaymarch : public entry::AppI
, 0
);
- const bgfx::Caps* caps = bgfx::getCaps();
- s_oglNdc = caps->homogeneousDepth;
-
// Create vertex stream declaration.
PosColorTexCoord0Vertex::init();
@@ -140,15 +140,19 @@ class ExampleRaymarch : public entry::AppI
m_program = loadProgram("vs_raymarching", "fs_raymarching");
m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
}
- int shutdown() BX_OVERRIDE
+ int shutdown() override
{
+ imguiDestroy();
+
// Cleanup.
- bgfx::destroyProgram(m_program);
+ bgfx::destroy(m_program);
- bgfx::destroyUniform(u_mtx);
- bgfx::destroyUniform(u_lightDirTime);
+ bgfx::destroy(u_mtx);
+ bgfx::destroy(u_lightDirTime);
// Shutdown bgfx.
bgfx::shutdown();
@@ -156,10 +160,23 @@ class ExampleRaymarch : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
- if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
// Set view 0 default viewport.
bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
@@ -170,32 +187,21 @@ class ExampleRaymarch : public entry::AppI
// if no other draw calls are submitted to viewZ 0.
bgfx::touch(0);
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/03-raymarch");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Updating shader uniforms.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
float at[3] = { 0.0f, 0.0f, 0.0f };
float eye[3] = { 0.0f, 0.0f, -15.0f };
float view[16];
float proj[16];
bx::mtxLookAt(view, eye, at);
- mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
+
+ const bgfx::Caps* caps = bgfx::getCaps();
+ bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f, caps->homogeneousDepth);
// Set view and projection matrix for view 1.
bgfx::setViewTransform(0, view, proj);
float ortho[16];
- bx::mtxOrtho(ortho, 0.0f, 1280.0f, 720.0f, 0.0f, 0.0f, 100.0f);
+ bx::mtxOrtho(ortho, 0.0f, 1280.0f, 720.0f, 0.0f, 0.0f, 100.0f, 0.0, caps->homogeneousDepth);
// Set view and projection matrix for view 0.
bgfx::setViewTransform(1, NULL, ortho);
@@ -240,6 +246,8 @@ class ExampleRaymarch : public entry::AppI
return false;
}
+ entry::MouseState m_mouseState;
+
uint32_t m_width;
uint32_t m_height;
uint32_t m_debug;
@@ -251,4 +259,6 @@ class ExampleRaymarch : public entry::AppI
bgfx::ProgramHandle m_program;
};
-ENTRY_IMPLEMENT_MAIN(ExampleRaymarch);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleRaymarch, "03-raymarch", "Updating shader uniforms.");
diff --git a/3rdparty/bgfx/examples/04-mesh/mesh.cpp b/3rdparty/bgfx/examples/04-mesh/mesh.cpp
index e23438c677e..2b2e2f2cea7 100644
--- a/3rdparty/bgfx/examples/04-mesh/mesh.cpp
+++ b/3rdparty/bgfx/examples/04-mesh/mesh.cpp
@@ -5,16 +5,26 @@
#include "common.h"
#include "bgfx_utils.h"
+#include "imgui/imgui.h"
+
+namespace
+{
class ExampleMesh : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleMesh(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -39,16 +49,20 @@ class ExampleMesh : public entry::AppI
m_mesh = meshLoad("meshes/bunny.bin");
m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
}
- int shutdown() BX_OVERRIDE
+ int shutdown() override
{
+ imguiDestroy();
+
meshUnload(m_mesh);
// Cleanup.
- bgfx::destroyProgram(m_program);
+ bgfx::destroy(m_program);
- bgfx::destroyUniform(u_time);
+ bgfx::destroy(u_time);
// Shutdown bgfx.
bgfx::shutdown();
@@ -56,10 +70,24 @@ class ExampleMesh : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
- if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
// Set view 0 default viewport.
bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
@@ -67,21 +95,9 @@ class ExampleMesh : public entry::AppI
// if no other draw calls are submitted to view 0.
bgfx::touch(0);
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ) );
bgfx::setUniform(u_time, &time);
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/04-mesh");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Loading meshes.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
float at[3] = { 0.0f, 1.0f, 0.0f };
float eye[3] = { 0.0f, 1.0f, -2.5f };
@@ -130,6 +146,8 @@ class ExampleMesh : public entry::AppI
return false;
}
+ entry::MouseState m_mouseState;
+
uint32_t m_width;
uint32_t m_height;
uint32_t m_debug;
@@ -141,4 +159,6 @@ class ExampleMesh : public entry::AppI
bgfx::UniformHandle u_time;
};
-ENTRY_IMPLEMENT_MAIN(ExampleMesh);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleMesh, "04-mesh", "Loading meshes.");
diff --git a/3rdparty/bgfx/examples/05-instancing/instancing.cpp b/3rdparty/bgfx/examples/05-instancing/instancing.cpp
index 834969ea02e..c295a9813c5 100644
--- a/3rdparty/bgfx/examples/05-instancing/instancing.cpp
+++ b/3rdparty/bgfx/examples/05-instancing/instancing.cpp
@@ -5,6 +5,10 @@
#include "common.h"
#include "bgfx_utils.h"
+#include "imgui/imgui.h"
+
+namespace
+{
struct PosColorVertex
{
@@ -57,13 +61,19 @@ static const uint16_t s_cubeIndices[36] =
class ExampleInstancing : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleInstancing(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -98,14 +108,18 @@ class ExampleInstancing : public entry::AppI
m_program = loadProgram("vs_instancing", "fs_instancing");
m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
}
- int shutdown() BX_OVERRIDE
+ int shutdown() override
{
+ imguiDestroy();
+
// Cleanup.
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
- bgfx::destroyProgram(m_program);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_program);
// Shutdown bgfx.
bgfx::shutdown();
@@ -113,10 +127,24 @@ class ExampleInstancing : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
- if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
// Set view 0 default viewport.
bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
@@ -124,19 +152,7 @@ class ExampleInstancing : public entry::AppI
// if no other draw calls are submitted to view 0.
bgfx::touch(0);
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
- float time = (float)( (now - m_timeOffset)/double(bx::getHPFrequency() ) );
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/05-instancing");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Geometry instancing.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
+ float time = (float)( (bx::getHPCounter() - m_timeOffset)/double(bx::getHPFrequency() ) );
// Get renderer capabilities info.
const bgfx::Caps* caps = bgfx::getCaps();
@@ -147,7 +163,7 @@ class ExampleInstancing : public entry::AppI
// When instancing is not supported by GPU, implement alternative
// code path that doesn't use instancing.
bool blink = uint32_t(time*3.0f)&1;
- bgfx::dbgTextPrintf(0, 5, blink ? 0x1f : 0x01, " Instancing is not supported by GPU. ");
+ bgfx::dbgTextPrintf(0, 0, blink ? 0x1f : 0x01, " Instancing is not supported by GPU. ");
}
else
{
@@ -181,16 +197,22 @@ class ExampleInstancing : public entry::AppI
bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
}
+ // 80 bytes stride = 64 bytes for 4x4 matrix + 16 bytes for RGBA color.
const uint16_t instanceStride = 80;
- const bgfx::InstanceDataBuffer* idb = bgfx::allocInstanceDataBuffer(121, instanceStride);
- if (NULL != idb)
+ // 11x11 cubes
+ const uint32_t numInstances = 121;
+
+ if (numInstances == bgfx::getAvailInstanceDataBuffer(numInstances, instanceStride) )
{
- uint8_t* data = idb->data;
+ bgfx::InstanceDataBuffer idb;
+ bgfx::allocInstanceDataBuffer(&idb, numInstances, instanceStride);
+
+ uint8_t* data = idb.data;
// Write instance data for 11x11 cubes.
- for (uint32_t yy = 0, numInstances = 0; yy < 11 && numInstances < idb->num; ++yy)
+ for (uint32_t yy = 0; yy < 11; ++yy)
{
- for (uint32_t xx = 0; xx < 11 && numInstances < idb->num; ++xx, ++numInstances)
+ for (uint32_t xx = 0; xx < 11; ++xx)
{
float* mtx = (float*)data;
bx::mtxRotateXY(mtx, time + xx*0.21f, time + yy*0.37f);
@@ -209,11 +231,11 @@ class ExampleInstancing : public entry::AppI
}
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
// Set instance data buffer.
- bgfx::setInstanceDataBuffer(idb);
+ bgfx::setInstanceDataBuffer(&idb);
// Set render states.
bgfx::setState(BGFX_STATE_DEFAULT);
@@ -226,12 +248,15 @@ class ExampleInstancing : public entry::AppI
// Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives.
bgfx::frame();
+
return true;
}
return false;
}
+ entry::MouseState m_mouseState;
+
uint32_t m_width;
uint32_t m_height;
uint32_t m_debug;
@@ -243,4 +268,6 @@ class ExampleInstancing : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(ExampleInstancing);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleInstancing, "05-instancing", "Geometry instancing.");
diff --git a/3rdparty/bgfx/examples/06-bump/bump.cpp b/3rdparty/bgfx/examples/06-bump/bump.cpp
index 101bf8fc96d..e60fb042fba 100644
--- a/3rdparty/bgfx/examples/06-bump/bump.cpp
+++ b/3rdparty/bgfx/examples/06-bump/bump.cpp
@@ -5,6 +5,10 @@
#include "common.h"
#include "bgfx_utils.h"
+#include "imgui/imgui.h"
+
+namespace
+{
struct PosNormalTangentTexcoordVertex
{
@@ -32,57 +36,32 @@ struct PosNormalTangentTexcoordVertex
bgfx::VertexDecl PosNormalTangentTexcoordVertex::ms_decl;
-uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w)
-{
- union
- {
- uint32_t ui32;
- uint8_t arr[4];
- } un;
-
- un.arr[0] = _x;
- un.arr[1] = _y;
- un.arr[2] = _z;
- un.arr[3] = _w;
-
- return un.ui32;
-}
-
-uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f)
-{
- const uint8_t xx = uint8_t(_x*127.0f + 128.0f);
- const uint8_t yy = uint8_t(_y*127.0f + 128.0f);
- const uint8_t zz = uint8_t(_z*127.0f + 128.0f);
- const uint8_t ww = uint8_t(_w*127.0f + 128.0f);
- return packUint32(xx, yy, zz, ww);
-}
-
static PosNormalTangentTexcoordVertex s_cubeVertices[24] =
{
- {-1.0f, 1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0, 0, 0 },
- { 1.0f, 1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0, 0x7fff, 0 },
- {-1.0f, -1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0, 0, 0x7fff },
- { 1.0f, -1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0, 0x7fff, 0x7fff },
- {-1.0f, 1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0, 0, 0 },
- { 1.0f, 1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0, 0x7fff, 0 },
- {-1.0f, -1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0, 0, 0x7fff },
- { 1.0f, -1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0, 0x7fff, 0x7fff },
- {-1.0f, 1.0f, 1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0, 0, 0 },
- { 1.0f, 1.0f, 1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0, 0x7fff, 0 },
- {-1.0f, 1.0f, -1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0, 0, 0x7fff },
- { 1.0f, 1.0f, -1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0, 0x7fff, 0x7fff },
- {-1.0f, -1.0f, 1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0, 0, 0 },
- { 1.0f, -1.0f, 1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0, 0x7fff, 0 },
- {-1.0f, -1.0f, -1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0, 0, 0x7fff },
- { 1.0f, -1.0f, -1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0, 0x7fff, 0x7fff },
- { 1.0f, -1.0f, 1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0, 0, 0 },
- { 1.0f, 1.0f, 1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0, 0x7fff, 0 },
- { 1.0f, -1.0f, -1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0, 0, 0x7fff },
- { 1.0f, 1.0f, -1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0, 0x7fff, 0x7fff },
- {-1.0f, -1.0f, 1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0, 0, 0 },
- {-1.0f, 1.0f, 1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0, 0x7fff, 0 },
- {-1.0f, -1.0f, -1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0, 0, 0x7fff },
- {-1.0f, 1.0f, -1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0, 0, 0 },
+ { 1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0, 0x7fff, 0 },
+ {-1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0, 0, 0x7fff },
+ { 1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0, 0, 0 },
+ { 1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0, 0x7fff, 0 },
+ {-1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0, 0, 0x7fff },
+ { 1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0, 0, 0 },
+ { 1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0, 0x7fff, 0 },
+ {-1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0, 0, 0x7fff },
+ { 1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0, 0, 0 },
+ { 1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0, 0x7fff, 0 },
+ {-1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0, 0, 0x7fff },
+ { 1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0, 0x7fff, 0x7fff },
+ { 1.0f, -1.0f, 1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0, 0, 0 },
+ { 1.0f, 1.0f, 1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0, 0x7fff, 0 },
+ { 1.0f, -1.0f, -1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0, 0, 0x7fff },
+ { 1.0f, 1.0f, -1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, -1.0f, 1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0, 0, 0 },
+ {-1.0f, 1.0f, 1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0, 0x7fff, 0 },
+ {-1.0f, -1.0f, -1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0, 0, 0x7fff },
+ {-1.0f, 1.0f, -1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0, 0x7fff, 0x7fff },
};
static const uint16_t s_cubeIndices[36] =
@@ -105,13 +84,19 @@ static const uint16_t s_cubeIndices[36] =
class ExampleBump : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleBump(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -169,20 +154,24 @@ class ExampleBump : public entry::AppI
m_textureNormal = loadTexture("textures/fieldstone-n.dds");
m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
+ imguiDestroy();
+
// Cleanup.
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
- bgfx::destroyProgram(m_program);
- bgfx::destroyTexture(m_textureColor);
- bgfx::destroyTexture(m_textureNormal);
- bgfx::destroyUniform(s_texColor);
- bgfx::destroyUniform(s_texNormal);
- bgfx::destroyUniform(u_lightPosRadius);
- bgfx::destroyUniform(u_lightRgbInnerR);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_program);
+ bgfx::destroy(m_textureColor);
+ bgfx::destroy(m_textureNormal);
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(s_texNormal);
+ bgfx::destroy(u_lightPosRadius);
+ bgfx::destroy(u_lightRgbInnerR);
// Shutdown bgfx.
bgfx::shutdown();
@@ -190,10 +179,24 @@ class ExampleBump : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
- if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
// Set view 0 default viewport.
bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
@@ -201,20 +204,7 @@ class ExampleBump : public entry::AppI
// if no other draw calls are submitted to view 0.
bgfx::touch(0);
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
-
- float time = (float)( (now-m_timeOffset)/freq);
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/06-bump");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Loading textures.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
+ float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ));
float at[3] = { 0.0f, 0.0f, 0.0f };
float eye[3] = { 0.0f, 0.0f, -7.0f };
@@ -249,8 +239,8 @@ class ExampleBump : public entry::AppI
float lightPosRadius[4][4];
for (uint32_t ii = 0; ii < m_numLights; ++ii)
{
- lightPosRadius[ii][0] = bx::fsin( (time*(0.1f + ii*0.17f) + ii*bx::piHalf*1.37f ) )*3.0f;
- lightPosRadius[ii][1] = bx::fcos( (time*(0.2f + ii*0.29f) + ii*bx::piHalf*1.49f ) )*3.0f;
+ lightPosRadius[ii][0] = bx::fsin( (time*(0.1f + ii*0.17f) + ii*bx::kPiHalf*1.37f ) )*3.0f;
+ lightPosRadius[ii][1] = bx::fcos( (time*(0.2f + ii*0.29f) + ii*bx::kPiHalf*1.49f ) )*3.0f;
lightPosRadius[ii][2] = -2.5f;
lightPosRadius[ii][3] = 3.0f;
}
@@ -268,17 +258,19 @@ class ExampleBump : public entry::AppI
bgfx::setUniform(u_lightRgbInnerR, lightRgbInnerR, m_numLights);
const uint16_t instanceStride = 64;
- const uint16_t numInstances = 3;
+ const uint16_t numInstances = 3;
if (m_instancingSupported)
{
// Write instance data for 3x3 cubes.
for (uint32_t yy = 0; yy < 3; ++yy)
{
- const bgfx::InstanceDataBuffer* idb = bgfx::allocInstanceDataBuffer(numInstances, instanceStride);
- if (NULL != idb)
+ if (numInstances == bgfx::getAvailInstanceDataBuffer(numInstances, instanceStride) )
{
- uint8_t* data = idb->data;
+ bgfx::InstanceDataBuffer idb;
+ bgfx::allocInstanceDataBuffer(&idb, numInstances, instanceStride);
+
+ uint8_t* data = idb.data;
for (uint32_t xx = 0; xx < 3; ++xx)
{
@@ -292,10 +284,10 @@ class ExampleBump : public entry::AppI
}
// Set instance data buffer.
- bgfx::setInstanceDataBuffer(idb, numInstances);
+ bgfx::setInstanceDataBuffer(&idb, numInstances);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
// Bind textures.
@@ -332,7 +324,7 @@ class ExampleBump : public entry::AppI
bgfx::setTransform(mtx);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
// Bind textures.
@@ -364,6 +356,8 @@ class ExampleBump : public entry::AppI
return false;
}
+ entry::MouseState m_mouseState;
+
bgfx::VertexBufferHandle m_vbh;
bgfx::IndexBufferHandle m_ibh;
bgfx::UniformHandle s_texColor;
@@ -383,4 +377,6 @@ class ExampleBump : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(ExampleBump);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleBump, "06-bump", "Loading textures.");
diff --git a/3rdparty/bgfx/examples/07-callback/callback.cpp b/3rdparty/bgfx/examples/07-callback/callback.cpp
index 464e2e55e7d..6c92e297782 100644
--- a/3rdparty/bgfx/examples/07-callback/callback.cpp
+++ b/3rdparty/bgfx/examples/07-callback/callback.cpp
@@ -5,15 +5,21 @@
#include "common.h"
#include "bgfx_utils.h"
+#include "imgui/imgui.h"
#include <bx/allocator.h>
+#include <bx/file.h>
#include <bx/string.h>
-#include <bx/crtimpl.h>
#include "aviwriter.h"
#include <inttypes.h>
+#include <bimg/bimg.h>
+
+namespace
+{
+
struct PosColorVertex
{
float m_x;
@@ -63,56 +69,24 @@ static const uint16_t s_cubeIndices[36] =
6, 3, 7,
};
-void imageWriteTga(bx::WriterI* _writer, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, bool _grayscale, bool _yflip, bx::Error* _err)
+void savePng(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src, bool _grayscale, bool _yflip)
{
- BX_ERROR_SCOPE(_err);
-
- uint8_t type = _grayscale ? 3 : 2;
- uint8_t bpp = _grayscale ? 8 : 32;
-
- uint8_t header[18] = {};
- header[ 2] = type;
- header[12] = _width &0xff;
- header[13] = (_width >>8)&0xff;
- header[14] = _height &0xff;
- header[15] = (_height>>8)&0xff;
- header[16] = bpp;
- header[17] = 32;
-
- bx::write(_writer, header, sizeof(header), _err);
-
- uint32_t dstPitch = _width*bpp/8;
- if (_yflip)
- {
- uint8_t* data = (uint8_t*)_src + _pitch*_height - _pitch;
- for (uint32_t yy = 0; yy < _height; ++yy)
- {
- bx::write(_writer, data, dstPitch, _err);
- data -= _pitch;
- }
- }
- else if (_pitch == dstPitch)
- {
- bx::write(_writer, _src, _height*_pitch, _err);
- }
- else
+ bx::FileWriter writer;
+ bx::Error err;
+ if (bx::open(&writer, _filePath, false, &err) )
{
- uint8_t* data = (uint8_t*)_src;
- for (uint32_t yy = 0; yy < _height; ++yy)
- {
- bx::write(_writer, data, dstPitch, _err);
- data += _pitch;
- }
+ bimg::imageWritePng(&writer, _width, _height, _srcPitch, _src, _grayscale, _yflip, &err);
+ bx::close(&writer);
}
}
void saveTga(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src, bool _grayscale, bool _yflip)
{
- bx::CrtFileWriter writer;
+ bx::FileWriter writer;
bx::Error err;
if (bx::open(&writer, _filePath, false, &err) )
{
- imageWriteTga(&writer, _width, _height, _srcPitch, _src, _grayscale, _yflip, &err);
+ bimg::imageWriteTga(&writer, _width, _height, _srcPitch, _src, _grayscale, _yflip, &err);
bx::close(&writer);
}
}
@@ -123,7 +97,7 @@ struct BgfxCallback : public bgfx::CallbackI
{
}
- virtual void fatal(bgfx::Fatal::Enum _code, const char* _str) BX_OVERRIDE
+ virtual void fatal(bgfx::Fatal::Enum _code, const char* _str) override
{
// Something unexpected happened, inform user and bail out.
bx::debugPrintf("Fatal error: 0x%08x: %s", _code, _str);
@@ -132,13 +106,25 @@ struct BgfxCallback : public bgfx::CallbackI
abort();
}
- virtual void traceVargs(const char* _filePath, uint16_t _line, const char* _format, va_list _argList) BX_OVERRIDE
+ virtual void traceVargs(const char* _filePath, uint16_t _line, const char* _format, va_list _argList) override
{
bx::debugPrintf("%s (%d): ", _filePath, _line);
bx::debugPrintfVargs(_format, _argList);
}
- virtual uint32_t cacheReadSize(uint64_t _id) BX_OVERRIDE
+ virtual void profilerBegin(const char* /*_name*/, uint32_t /*_abgr*/, const char* /*_filePath*/, uint16_t /*_line*/) override
+ {
+ }
+
+ virtual void profilerBeginLiteral(const char* /*_name*/, uint32_t /*_abgr*/, const char* /*_filePath*/, uint16_t /*_line*/) override
+ {
+ }
+
+ virtual void profilerEnd() override
+ {
+ }
+
+ virtual uint32_t cacheReadSize(uint64_t _id) override
{
char filePath[256];
bx::snprintf(filePath, sizeof(filePath), "temp/%016" PRIx64, _id);
@@ -158,7 +144,7 @@ struct BgfxCallback : public bgfx::CallbackI
return 0;
}
- virtual bool cacheRead(uint64_t _id, void* _data, uint32_t _size) BX_OVERRIDE
+ virtual bool cacheRead(uint64_t _id, void* _data, uint32_t _size) override
{
char filePath[256];
bx::snprintf(filePath, sizeof(filePath), "temp/%016" PRIx64, _id);
@@ -180,7 +166,7 @@ struct BgfxCallback : public bgfx::CallbackI
return false;
}
- virtual void cacheWrite(uint64_t _id, const void* _data, uint32_t _size) BX_OVERRIDE
+ virtual void cacheWrite(uint64_t _id, const void* _data, uint32_t _size) override
{
char filePath[256];
bx::snprintf(filePath, sizeof(filePath), "temp/%016" PRIx64, _id);
@@ -196,16 +182,20 @@ struct BgfxCallback : public bgfx::CallbackI
}
}
- virtual void screenShot(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _data, uint32_t /*_size*/, bool _yflip) BX_OVERRIDE
+ virtual void screenShot(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _data, uint32_t /*_size*/, bool _yflip) override
{
char temp[1024];
+ // Save screen shot as PNG.
+ bx::snprintf(temp, BX_COUNTOF(temp), "%s.png", _filePath);
+ savePng(temp, _width, _height, _pitch, _data, false, _yflip);
+
// Save screen shot as TGA.
bx::snprintf(temp, BX_COUNTOF(temp), "%s.tga", _filePath);
saveTga(temp, _width, _height, _pitch, _data, false, _yflip);
}
- virtual void captureBegin(uint32_t _width, uint32_t _height, uint32_t /*_pitch*/, bgfx::TextureFormat::Enum /*_format*/, bool _yflip) BX_OVERRIDE
+ virtual void captureBegin(uint32_t _width, uint32_t _height, uint32_t /*_pitch*/, bgfx::TextureFormat::Enum /*_format*/, bool _yflip) override
{
m_writer = BX_NEW(entry::getAllocator(), AviWriter)(entry::getFileWriter() );
if (!m_writer->open("temp/capture.avi", _width, _height, 60, _yflip) )
@@ -215,7 +205,7 @@ struct BgfxCallback : public bgfx::CallbackI
}
}
- virtual void captureEnd() BX_OVERRIDE
+ virtual void captureEnd() override
{
if (NULL != m_writer)
{
@@ -225,7 +215,7 @@ struct BgfxCallback : public bgfx::CallbackI
}
}
- virtual void captureFrame(const void* _data, uint32_t /*_size*/) BX_OVERRIDE
+ virtual void captureFrame(const void* _data, uint32_t /*_size*/) override
{
if (NULL != m_writer)
{
@@ -236,6 +226,8 @@ struct BgfxCallback : public bgfx::CallbackI
AviWriter* m_writer;
};
+const size_t kNaturalAlignment = 8;
+
class BgfxAllocator : public bx::AllocatorI
{
public:
@@ -249,13 +241,13 @@ public:
{
}
- virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) BX_OVERRIDE
+ virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) override
{
if (0 == _size)
{
if (NULL != _ptr)
{
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ if (kNaturalAlignment >= _align)
{
bx::debugPrintf("%s(%d): FREE %p\n", _file, _line, _ptr);
::free(_ptr);
@@ -271,7 +263,7 @@ public:
}
else if (NULL == _ptr)
{
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ if (kNaturalAlignment >= _align)
{
void* ptr = ::malloc(_size);
bx::debugPrintf("%s(%d): ALLOC %p of %d byte(s)\n", _file, _line, ptr, _size);
@@ -283,7 +275,7 @@ public:
return bx::alignedAlloc(this, _size, _align, _file, _line);
}
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ if (kNaturalAlignment >= _align)
{
void* ptr = ::realloc(_ptr, _size);
bx::debugPrintf("%s(%d): REALLOC %p (old %p) of %d byte(s)\n", _file, _line, ptr, _ptr, _size);
@@ -310,153 +302,197 @@ private:
uint32_t m_maxBlocks;
};
-int _main_(int _argc, char** _argv)
+class ExampleCallback : public entry::AppI
{
- Args args(_argc, _argv);
-
- BgfxCallback callback;
- BgfxAllocator allocator;
-
- uint32_t width = 1280;
- uint32_t height = 720;
-
- // Enumerate supported backend renderers.
- bgfx::RendererType::Enum renderers[bgfx::RendererType::Count];
- uint8_t numRenderers = bgfx::getSupportedRenderers(BX_COUNTOF(renderers), renderers);
+public:
+ ExampleCallback(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
- bgfx::init(bgfx::RendererType::Count == args.m_type
- ? renderers[bx::getHPCounter() % numRenderers] /* randomize renderer */
- : args.m_type
- , args.m_pciId
- , 0
- , &callback // custom callback handler
- , &allocator // custom allocator
- );
- bgfx::reset(width, height, BGFX_RESET_CAPTURE|BGFX_RESET_MSAA_X16);
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
+
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = 0
+ | BGFX_RESET_VSYNC
+ | BGFX_RESET_CAPTURE
+ | BGFX_RESET_MSAA_X16
+ ;
+
+ bgfx::init(
+ args.m_type
+ , args.m_pciId
+ , 0
+ , &m_callback // custom callback handler
+ , &m_allocator // custom allocator
+ );
+ bgfx::reset(m_width, m_height, m_reset);
+
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
+
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
+
+ // Create vertex stream declaration.
+ PosColorVertex::init();
+
+ // Create static vertex buffer.
+ m_vbh = bgfx::createVertexBuffer(
+ bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) )
+ , PosColorVertex::ms_decl
+ );
+
+ // Create static index buffer.
+ m_ibh = bgfx::createIndexBuffer(bgfx::makeRef(s_cubeIndices, sizeof(s_cubeIndices) ) );
+
+ // Create program from shaders.
+ m_program = loadProgram("vs_callback", "fs_callback");
+
+ m_time = 0.0f;
+ m_frame = 0;
+
+ imguiCreate();
+ }
- // Enable debug text.
- bgfx::setDebug(BGFX_DEBUG_TEXT);
+ virtual int shutdown() override
+ {
+ imguiDestroy();
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, 1280, 720);
+ // Cleanup.
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_program);
- // Set view 0 clear state.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ // Shutdown bgfx.
+ bgfx::shutdown();
- // Create vertex stream declaration.
- PosColorVertex::init();
+ m_allocator.dumpStats();
- // Create static vertex buffer.
- bgfx::VertexBufferHandle vbh = bgfx::createVertexBuffer(
- bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) )
- , PosColorVertex::ms_decl
- );
+ return 0;
+ }
- // Create static index buffer.
- bgfx::IndexBufferHandle ibh = bgfx::createIndexBuffer(bgfx::makeRef(s_cubeIndices, sizeof(s_cubeIndices) ) );
+ bool update() override
+ {
+ bool exit = false;
- // Create program from shaders.
- bgfx::ProgramHandle program = loadProgram("vs_callback", "fs_callback");
+ // 5 second 60Hz video
+ if (m_frame < 300)
+ {
+ ++m_frame;
+ }
+ else
+ {
+ m_reset &= ~BGFX_RESET_CAPTURE;
+
+ exit = entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState);
+
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
- float time = 0.0f;
+ showExampleDialog(this);
- const bgfx::RendererType::Enum rendererType = bgfx::getRendererType();
+ imguiEndFrame();
+ }
- // 5 second 60Hz video
- for (uint32_t frame = 0; frame < 300; ++frame)
- {
- // This dummy draw call is here to make sure that view 0 is cleared
- // if no other draw calls are submitted to view 0.
- bgfx::touch(0);
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf( 0, 1, 0x4f, "bgfx/examples/07-callback");
- bgfx::dbgTextPrintf( 0, 2, 0x6f, "Description: Implementing application specific callbacks for taking screen shots,");
- bgfx::dbgTextPrintf(13, 3, 0x6f, "caching OpenGL binary shaders, and video capture.");
- bgfx::dbgTextPrintf( 0, 4, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- bgfx::dbgTextPrintf( 2, 6, 0x0e, "Supported renderers:");
- for (uint8_t ii = 0; ii < numRenderers; ++ii)
+ if (!exit)
{
- bgfx::dbgTextPrintf( 2, 7+ii, 0x0c, "[%c] %s"
- , renderers[ii] == rendererType ? '\xfe' : ' '
- , bgfx::getRendererName(renderers[ii])
- );
- }
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, bgfx::BackbufferRatio::Equal);
- float at[3] = { 0.0f, 0.0f, 0.0f };
- float eye[3] = { 0.0f, 0.0f, -35.0f };
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
- float view[16];
- float proj[16];
- bx::mtxLookAt(view, eye, at);
- bx::mtxProj(proj, 60.0f, float(width)/float(height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ float eye[3] = { 0.0f, 0.0f, -35.0f };
- // Set view and projection matrix for view 0.
- bgfx::setViewTransform(0, view, proj);
+ float view[16];
+ float proj[16];
+ bx::mtxLookAt(view, eye, at);
+ bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
- time += 1.0f/60.0f;
+ // Set view and projection matrix for view 0.
+ bgfx::setViewTransform(0, view, proj);
- // Submit 11x11 cubes.
- for (uint32_t yy = 0; yy < 11; ++yy)
- {
- for (uint32_t xx = 0; xx < 11-yy; ++xx)
+ m_time += 1.0f/60.0f;
+
+ // Submit 11x11 cubes.
+ for (uint32_t yy = 0; yy < 11; ++yy)
{
- float mtx[16];
- bx::mtxRotateXY(mtx, time + xx*0.21f, time + yy*0.37f);
- mtx[12] = -15.0f + float(xx)*3.0f;
- mtx[13] = -15.0f + float(yy)*3.0f;
- mtx[14] = 0.0f;
+ for (uint32_t xx = 0; xx < 11-yy; ++xx)
+ {
+ float mtx[16];
+ bx::mtxRotateXY(mtx, m_time + xx*0.21f, m_time + yy*0.37f);
+ mtx[12] = -15.0f + float(xx)*3.0f;
+ mtx[13] = -15.0f + float(yy)*3.0f;
+ mtx[14] = 0.0f;
- // Set model matrix for rendering.
- bgfx::setTransform(mtx);
+ // Set model matrix for rendering.
+ bgfx::setTransform(mtx);
- // Set vertex and index buffer.
- bgfx::setVertexBuffer(vbh);
- bgfx::setIndexBuffer(ibh);
+ // Set vertex and index buffer.
+ bgfx::setVertexBuffer(0, m_vbh);
+ bgfx::setIndexBuffer(m_ibh);
- // Set render states.
- bgfx::setState(BGFX_STATE_DEFAULT);
+ // Set render states.
+ bgfx::setState(BGFX_STATE_DEFAULT);
- // Submit primitive for rendering to view 0.
- bgfx::submit(0, program);
+ // Submit primitive for rendering to view 0.
+ bgfx::submit(0, m_program);
+ }
}
- }
- // Take screen shot at frame 150.
- if (150 == frame)
- {
- bgfx::FrameBufferHandle fbh = BGFX_INVALID_HANDLE;
- bgfx::requestScreenShot(fbh, "temp/frame150");
+ // Take screen shot at frame 150.
+ if (150 == m_frame)
+ {
+ bgfx::FrameBufferHandle fbh = BGFX_INVALID_HANDLE;
+ bgfx::requestScreenShot(fbh, "temp/frame150");
+ }
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
}
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ return false;
}
- // Cleanup.
- bgfx::destroyIndexBuffer(ibh);
- bgfx::destroyVertexBuffer(vbh);
- bgfx::destroyProgram(program);
+ BgfxCallback m_callback;
+ BgfxAllocator m_allocator;
- // Shutdown bgfx.
- bgfx::shutdown();
+ entry::MouseState m_mouseState;
- allocator.dumpStats();
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
- return 0;
-}
+ bgfx::VertexBufferHandle m_vbh;
+ bgfx::IndexBufferHandle m_ibh;
+ bgfx::ProgramHandle m_program;
+ float m_time;
+ uint32_t m_frame;
+};
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleCallback, "07-callback", "Implementing application specific callbacks for taking screen shots, caching OpenGL binary shaders, and video capture.");
diff --git a/3rdparty/bgfx/examples/08-update/cs_update.sc b/3rdparty/bgfx/examples/08-update/cs_update.sc
index 2599a92c509..4b1d5fcc725 100644
--- a/3rdparty/bgfx/examples/08-update/cs_update.sc
+++ b/3rdparty/bgfx/examples/08-update/cs_update.sc
@@ -5,28 +5,26 @@
#include "bgfx_compute.sh"
-IMAGE2D_ARRAY_WR(s_texColor,rgba32f,0);
+IMAGE2D_ARRAY_WR(s_texColor, rgba8, 0);
uniform vec4 u_time;
NUM_THREADS(16, 16, 1)
void main()
{
- vec3 colors[] = {
- vec3(1,0,0),
- vec3(1,1,0),
- vec3(1,0,1),
- vec3(0,1,0),
- vec3(0,1,1),
- vec3(0,0,1),
+ vec3 colors[] =
+ {
+ vec3(1.0, 0.0, 0.0),
+ vec3(1.0, 1.0, 0.0),
+ vec3(1.0, 0.0, 1.0),
+ vec3(0.0, 1.0, 0.0),
+ vec3(0.0, 1.0, 1.0),
+ vec3(0.0, 0.0, 1.0),
};
- for (int face=0;face<6;face++)
+ for (int face = 0; face < 6; face++)
{
- vec3 color = colors[face]*0.75 + sin( u_time.x*4.0 )*0.25;
- ivec3 dest = ivec3( gl_GlobalInvocationID.xy, face );
- imageStore( s_texColor, dest, vec4(color,1) );
+ vec3 color = colors[face]*0.75 + sin(u_time.x*4.0)*0.25;
+ ivec3 dest = ivec3(gl_GlobalInvocationID.xy, face);
+ imageStore(s_texColor, dest, vec4(color,1) );
}
}
-
-
-
diff --git a/3rdparty/bgfx/examples/08-update/update.cpp b/3rdparty/bgfx/examples/08-update/update.cpp
index 9bb3af0e465..789b2a038ea 100644
--- a/3rdparty/bgfx/examples/08-update/update.cpp
+++ b/3rdparty/bgfx/examples/08-update/update.cpp
@@ -5,12 +5,15 @@
#include "common.h"
#include "bgfx_utils.h"
-
-#include <bx/uint32_t.h>
#include "packrect.h"
+#include "imgui/imgui.h"
+#include <bx/uint32_t.h>
#include <list>
+namespace
+{
+
struct PosTexcoordVertex
{
float m_x;
@@ -118,18 +121,19 @@ static const uint32_t texture2dSize = 256;
class ExampleUpdate : public entry::AppI
{
public:
- ExampleUpdate()
- : m_cube(textureside)
+ ExampleUpdate(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ , m_cube(textureside)
{
}
- void init(int _argc, char** _argv) BX_OVERRIDE
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -210,13 +214,13 @@ public:
// Create programs.
m_program = loadProgram("vs_update", "fs_update");
m_programCmp = loadProgram("vs_update", "fs_update_cmp");
- m_program3d.idx = bgfx::invalidHandle;
+ m_program3d.idx = bgfx::kInvalidHandle;
if (m_texture3DSupported)
{
m_program3d = loadProgram("vs_update", "fs_update_3d");
}
- m_programCompute.idx = bgfx::invalidHandle;
+ m_programCompute.idx = bgfx::kInvalidHandle;
if (m_computeSupported)
{
m_programCompute = bgfx::createProgram( loadShader( "cs_update" ), true );
@@ -231,7 +235,7 @@ public:
for(uint32_t ii = 0; ii<BX_COUNTOF( m_textureCube ); ++ii)
{
- m_textureCube[ii].idx = bgfx::invalidHandle;
+ m_textureCube[ii].idx = bgfx::kInvalidHandle;
}
m_textureCube[0] = bgfx::createTextureCube(
@@ -256,7 +260,7 @@ public:
if (m_computeSupported)
{
m_textureCube[2] = bgfx::createTextureCube(
- textureside
+ textureside
, false
, 1
, bgfx::TextureFormat::RGBA8
@@ -284,10 +288,14 @@ public:
m_updateTime = 0;
m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
+ imguiDestroy();
+
// m_texture2dData is managed from main thread, and it's passed to renderer
// just as MemoryRef. At this point render might be using it. We must wait
// previous frame to finish before we can free it.
@@ -298,39 +306,39 @@ public:
for (uint32_t ii = 0; ii < BX_COUNTOF(m_textures); ++ii)
{
- bgfx::destroyTexture(m_textures[ii]);
+ bgfx::destroy(m_textures[ii]);
}
for (uint32_t ii = 0; ii < m_numTextures3d; ++ii)
{
- bgfx::destroyTexture(m_textures3d[ii]);
+ bgfx::destroy(m_textures3d[ii]);
}
- bgfx::destroyTexture(m_texture2d);
+ bgfx::destroy(m_texture2d);
for (uint32_t ii = 0; ii<BX_COUNTOF(m_textureCube); ++ii)
{
if (bgfx::isValid(m_textureCube[ii]))
{
- bgfx::destroyTexture(m_textureCube[ii]);
+ bgfx::destroy(m_textureCube[ii]);
}
}
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
if (bgfx::isValid(m_program3d) )
{
- bgfx::destroyProgram(m_program3d);
+ bgfx::destroy(m_program3d);
}
- bgfx::destroyProgram(m_programCmp);
+ bgfx::destroy(m_programCmp);
if (bgfx::isValid(m_programCompute) )
{
- bgfx::destroyProgram(m_programCompute);
+ bgfx::destroy(m_programCompute);
}
- bgfx::destroyProgram(m_program);
- bgfx::destroyUniform(u_time);
- bgfx::destroyUniform(s_texColor);
- bgfx::destroyUniform(s_texCube);
+ bgfx::destroy(m_program);
+ bgfx::destroy(u_time);
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(s_texCube);
// Shutdown bgfx.
bgfx::shutdown();
@@ -338,10 +346,24 @@ public:
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
- if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
float borderColor[4] = { float(rand()%255)/255.0f, float(rand()%255)/255.0f, float(rand()%255)/255.0f, float(rand()%255)/255.0f };
bgfx::setPaletteColor(1, borderColor);
@@ -354,20 +376,9 @@ public:
bgfx::touch(0);
int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const int64_t freq = bx::getHPFrequency();
- const double toMs = 1000.0/double(freq);
float time = (float)( (now - m_timeOffset)/double(bx::getHPFrequency() ) );
bgfx::setUniform(u_time, &time);
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/08-update");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Updating m_textures.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
if (now > m_updateTime)
{
PackCube face;
@@ -444,8 +455,6 @@ public:
}
}
- bgfx::dbgTextPrintf(0, 4, 0x0f, "m_hit: %d, m_miss %d", m_hit, m_miss);
-
float at[3] = { 0.0f, 0.0f, 0.0f };
float eye[3] = { 0.0f, 0.0f, -5.0f };
@@ -475,7 +484,7 @@ public:
bgfx::setTransform( mtx );
// Set vertex and index buffer.
- bgfx::setVertexBuffer( m_vbh );
+ bgfx::setVertexBuffer(0, m_vbh );
bgfx::setIndexBuffer( m_ibh );
// Bind texture.
@@ -492,7 +501,8 @@ public:
// Set view and projection matrix for view 1.
const float aspectRatio = float(m_height)/float(m_width);
const float size = 11.0f;
- bx::mtxOrtho(proj, -size, size, size*aspectRatio, -size*aspectRatio, 0.0f, 1000.0f);
+ const bgfx::Caps* caps = bgfx::getCaps();
+ bx::mtxOrtho(proj, -size, size, size*aspectRatio, -size*aspectRatio, 0.0f, 1000.0f, 0.0f, caps->homogeneousDepth);
bgfx::setViewTransform(1, NULL, proj);
float mtx[16];
@@ -502,7 +512,7 @@ public:
bgfx::setTransform(mtx);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
// Bind texture.
@@ -524,7 +534,7 @@ public:
bgfx::setTransform(mtx);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh, 0, 6);
// Bind texture.
@@ -545,7 +555,7 @@ public:
bgfx::setTransform(mtx);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh, 0, 6);
// Bind texture.
@@ -566,7 +576,7 @@ public:
bgfx::setTransform(mtx);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh, 24, 4);
+ bgfx::setVertexBuffer(0, m_vbh, 24, 4);
bgfx::setIndexBuffer(m_ibh, 0, 6);
// Bind texture.
@@ -582,19 +592,21 @@ public:
// Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives.
bgfx::frame();
+
return true;
}
return false;
}
- uint8_t* m_texture2dData;
+ entry::MouseState m_mouseState;
uint32_t m_width;
uint32_t m_height;
uint32_t m_debug;
uint32_t m_reset;
+ uint8_t* m_texture2dData;
uint32_t m_numTextures3d;
bool m_texture3DSupported;
bool m_blitSupported;
@@ -628,4 +640,6 @@ public:
};
-ENTRY_IMPLEMENT_MAIN(ExampleUpdate);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleUpdate, "08-update", "Updating textures.");
diff --git a/3rdparty/bgfx/examples/09-hdr/hdr.cpp b/3rdparty/bgfx/examples/09-hdr/hdr.cpp
index ff9c8df6477..500acf0560a 100644
--- a/3rdparty/bgfx/examples/09-hdr/hdr.cpp
+++ b/3rdparty/bgfx/examples/09-hdr/hdr.cpp
@@ -8,6 +8,9 @@
#include "imgui/imgui.h"
#include <bx/rng.h>
+namespace
+{
+
static float s_texelHalf = 0.0f;
struct PosColorTexCoord0Vertex
@@ -88,7 +91,7 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBott
vertex[2].m_u = maxu;
vertex[2].m_v = maxv;
- bgfx::setVertexBuffer(&vb);
+ bgfx::setVertexBuffer(0, &vb);
}
}
@@ -134,20 +137,21 @@ void setOffsets4x4Lum(bgfx::UniformHandle _handle, uint32_t _width, uint32_t _he
bgfx::setUniform(_handle, offsets, num);
}
-inline float square(float _x)
-{
- return _x*_x;
-}
-
class ExampleHDR : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleHDR(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -184,9 +188,7 @@ class ExampleHDR : public entry::AppI
m_mesh = meshLoad("meshes/bunny.bin");
- m_fbtextures[0] = bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT | BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP);
- m_fbtextures[1] = bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY);
- m_fbh = bgfx::createFrameBuffer(BX_COUNTOF(m_fbtextures), m_fbtextures, true);
+ m_fbh.idx = bgfx::kInvalidHandle;
m_lum[0] = bgfx::createFrameBuffer(128, 128, bgfx::TextureFormat::BGRA8);
m_lum[1] = bgfx::createFrameBuffer( 64, 64, bgfx::TextureFormat::BGRA8);
@@ -204,7 +206,7 @@ class ExampleHDR : public entry::AppI
}
else
{
- m_rb.idx = bgfx::invalidHandle;
+ m_rb.idx = bgfx::kInvalidHandle;
}
// Imgui.
@@ -227,7 +229,7 @@ class ExampleHDR : public entry::AppI
m_time = 0.0f;
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
// Cleanup.
imguiDestroy();
@@ -236,32 +238,36 @@ class ExampleHDR : public entry::AppI
for (uint32_t ii = 0; ii < BX_COUNTOF(m_lum); ++ii)
{
- bgfx::destroyFrameBuffer(m_lum[ii]);
+ bgfx::destroy(m_lum[ii]);
+ }
+ bgfx::destroy(m_bright);
+ bgfx::destroy(m_blur);
+
+ if (bgfx::isValid(m_fbh) )
+ {
+ bgfx::destroy(m_fbh);
}
- bgfx::destroyFrameBuffer(m_bright);
- bgfx::destroyFrameBuffer(m_blur);
- bgfx::destroyFrameBuffer(m_fbh);
-
- bgfx::destroyProgram(m_meshProgram);
- bgfx::destroyProgram(m_skyProgram);
- bgfx::destroyProgram(m_tonemapProgram);
- bgfx::destroyProgram(m_lumProgram);
- bgfx::destroyProgram(m_lumAvgProgram);
- bgfx::destroyProgram(m_blurProgram);
- bgfx::destroyProgram(m_brightProgram);
- bgfx::destroyTexture(m_uffizi);
+
+ bgfx::destroy(m_meshProgram);
+ bgfx::destroy(m_skyProgram);
+ bgfx::destroy(m_tonemapProgram);
+ bgfx::destroy(m_lumProgram);
+ bgfx::destroy(m_lumAvgProgram);
+ bgfx::destroy(m_blurProgram);
+ bgfx::destroy(m_brightProgram);
+ bgfx::destroy(m_uffizi);
if (bgfx::isValid(m_rb) )
{
- bgfx::destroyTexture(m_rb);
+ bgfx::destroy(m_rb);
}
- bgfx::destroyUniform(s_texCube);
- bgfx::destroyUniform(s_texColor);
- bgfx::destroyUniform(s_texLum);
- bgfx::destroyUniform(s_texBlur);
- bgfx::destroyUniform(u_mtx);
- bgfx::destroyUniform(u_tonemap);
- bgfx::destroyUniform(u_offset);
+ bgfx::destroy(s_texCube);
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(s_texLum);
+ bgfx::destroy(s_texBlur);
+ bgfx::destroy(u_mtx);
+ bgfx::destroy(u_tonemap);
+ bgfx::destroy(u_offset);
// Shutdown bgfx.
bgfx::shutdown();
@@ -269,11 +275,12 @@ class ExampleHDR : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- if (m_oldWidth != m_width
+ if (!bgfx::isValid(m_fbh)
+ || m_oldWidth != m_width
|| m_oldHeight != m_height
|| m_oldReset != m_reset)
{
@@ -284,10 +291,37 @@ class ExampleHDR : public entry::AppI
uint32_t msaa = (m_reset&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT;
- bgfx::destroyFrameBuffer(m_fbh);
+ if (bgfx::isValid(m_fbh) )
+ {
+ bgfx::destroy(m_fbh);
+ }
+
+ m_fbtextures[0] = bgfx::createTexture2D(
+ uint16_t(m_width)
+ , uint16_t(m_height)
+ , false
+ , 1
+ , bgfx::TextureFormat::BGRA8
+ , ((msaa + 1) << BGFX_TEXTURE_RT_MSAA_SHIFT) | BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP
+ );
+
+ const uint32_t textureFlags = BGFX_TEXTURE_RT_WRITE_ONLY|( (msaa+1)<<BGFX_TEXTURE_RT_MSAA_SHIFT);
+
+ bgfx::TextureFormat::Enum depthFormat =
+ bgfx::isTextureValid(0, false, 1, bgfx::TextureFormat::D16, textureFlags) ? bgfx::TextureFormat::D16
+ : bgfx::isTextureValid(0, false, 1, bgfx::TextureFormat::D24S8, textureFlags) ? bgfx::TextureFormat::D24S8
+ : bgfx::TextureFormat::D32
+ ;
+
+ m_fbtextures[1] = bgfx::createTexture2D(
+ uint16_t(m_width)
+ , uint16_t(m_height)
+ , false
+ , 1
+ , depthFormat
+ , textureFlags
+ );
- m_fbtextures[0] = bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::BGRA8, ((msaa + 1) << BGFX_TEXTURE_RT_MSAA_SHIFT) | BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP);
- m_fbtextures[1] = bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY|( (msaa+1)<<BGFX_TEXTURE_RT_MSAA_SHIFT) );
m_fbh = bgfx::createFrameBuffer(BX_COUNTOF(m_fbtextures), m_fbtextures, true);
}
@@ -301,25 +335,35 @@ class ExampleHDR : public entry::AppI
, uint16_t(m_height)
);
- imguiBeginScrollArea("Settings", m_width - m_width / 5 - 10, 10, m_width / 5, m_height / 2, &m_scrollArea);
- imguiSeparatorLine();
+ showExampleDialog(this);
- imguiSlider("Speed", m_speed, 0.0f, 1.0f, 0.01f);
- imguiSeparator();
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 2.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+
+ ImGui::SliderFloat("Speed", &m_speed, 0.0f, 1.0f);
+ ImGui::Separator();
- imguiSlider("Middle gray", m_middleGray, 0.1f, 1.0f, 0.01f);
- imguiSlider("White point", m_white, 0.1f, 2.0f, 0.01f);
- imguiSlider("Threshold", m_threshold, 0.1f, 2.0f, 0.01f);
+ ImGui::SliderFloat("Middle gray", &m_middleGray, 0.1f, 1.0f);
+ ImGui::SliderFloat("White point", &m_white, 0.1f, 2.0f);
+ ImGui::SliderFloat("Threshold", &m_threshold, 0.1f, 2.0f);
if (bgfx::isValid(m_rb) )
{
union { uint32_t color; uint8_t bgra[4]; } cast = { m_lumBgra8 };
float exponent = cast.bgra[3]/255.0f * 255.0f - 128.0f;
float lumAvg = cast.bgra[2]/255.0f * bx::fexp2(exponent);
- imguiSlider("Lum Avg", lumAvg, 0.0f, 1.0f, 0.01f, false);
+ ImGui::SliderFloat("Lum Avg", &lumAvg, 0.0f, 1.0f);
}
- imguiEndScrollArea();
+ ImGui::End();
+
imguiEndFrame();
// This dummy draw call is here to make sure that view 0 is cleared
@@ -331,29 +375,22 @@ class ExampleHDR : public entry::AppI
const int64_t frameTime = now - last;
last = now;
const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
m_time += (float)(frameTime*m_speed/freq);
- // Use m_debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/09-hdr");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Using multiple views with frame buffers, and view order remapping.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- uint8_t shuffle[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+ bgfx::ViewId shuffle[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
bx::shuffle(&m_rng, shuffle, BX_COUNTOF(shuffle) );
- uint8_t hdrSkybox = shuffle[0];
- uint8_t hdrMesh = shuffle[1];
- uint8_t hdrLuminance = shuffle[2];
- uint8_t hdrLumScale0 = shuffle[3];
- uint8_t hdrLumScale1 = shuffle[4];
- uint8_t hdrLumScale2 = shuffle[5];
- uint8_t hdrLumScale3 = shuffle[6];
- uint8_t hdrBrightness = shuffle[7];
- uint8_t hdrVBlur = shuffle[8];
- uint8_t hdrHBlurTonemap = shuffle[9];
+ bgfx::ViewId hdrSkybox = shuffle[0];
+ bgfx::ViewId hdrMesh = shuffle[1];
+ bgfx::ViewId hdrLuminance = shuffle[2];
+ bgfx::ViewId hdrLumScale0 = shuffle[3];
+ bgfx::ViewId hdrLumScale1 = shuffle[4];
+ bgfx::ViewId hdrLumScale2 = shuffle[5];
+ bgfx::ViewId hdrLumScale3 = shuffle[6];
+ bgfx::ViewId hdrBrightness = shuffle[7];
+ bgfx::ViewId hdrVBlur = shuffle[8];
+ bgfx::ViewId hdrHBlurTonemap = shuffle[9];
// Set views.
bgfx::setViewName(hdrSkybox, "Skybox");
@@ -399,10 +436,11 @@ class ExampleHDR : public entry::AppI
bgfx::FrameBufferHandle invalid = BGFX_INVALID_HANDLE;
bgfx::setViewFrameBuffer(hdrHBlurTonemap, invalid);
+ const bgfx::Caps* caps = bgfx::getCaps();
float proj[16];
- bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
+ bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth);
- uint8_t order[] =
+ bgfx::ViewId order[] =
{
hdrSkybox,
hdrMesh,
@@ -437,12 +475,12 @@ class ExampleHDR : public entry::AppI
float view[16];
bx::mtxLookAt(view, temp, at);
- bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
+ bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f, caps->homogeneousDepth);
// Set view and projection matrix for view hdrMesh.
bgfx::setViewTransform(hdrMesh, view, proj);
- float tonemap[4] = { m_middleGray, square(m_white), m_threshold, m_time };
+ float tonemap[4] = { m_middleGray, bx::fsq(m_white), m_threshold, m_time };
// Render skybox into view hdrSkybox.
bgfx::setTexture(0, s_texCube, m_uffizi);
@@ -582,4 +620,6 @@ class ExampleHDR : public entry::AppI
float m_time;
};
-ENTRY_IMPLEMENT_MAIN(ExampleHDR);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleHDR, "09-hdr", "Using multiple views with frame buffers, and view order remapping.");
diff --git a/3rdparty/bgfx/examples/10-font/font.cpp b/3rdparty/bgfx/examples/10-font/font.cpp
index c7baf00782c..a3f1bacca30 100644
--- a/3rdparty/bgfx/examples/10-font/font.cpp
+++ b/3rdparty/bgfx/examples/10-font/font.cpp
@@ -8,7 +8,7 @@
#include <bx/timer.h>
#include <bx/string.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include "font/font_manager.h"
#include "font/text_buffer_manager.h"
@@ -19,6 +19,11 @@
#include <wchar.h>
+#include "imgui/imgui.h"
+
+namespace
+{
+
TrueTypeHandle loadTtf(FontManager* _fm, const char* _filePath)
{
uint32_t size;
@@ -35,123 +40,127 @@ TrueTypeHandle loadTtf(FontManager* _fm, const char* _filePath)
return invalid;
}
-int _main_(int _argc, char** _argv)
+static const char* s_fontFilePath[] =
{
- Args args(_argc, _argv);
+ "font/droidsans.ttf",
+ "font/chp-fire.ttf",
+ "font/bleeding_cowboys.ttf",
+ "font/mias_scribblings.ttf",
+ "font/ruritania.ttf",
+ "font/signika-regular.ttf",
+ "font/five_minutes.otf",
+};
+
+class ExampleFont : public entry::AppI
+{
+public:
+ ExampleFont(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
- // Enable debug text.
- bgfx::setDebug(debug);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- // Set view 0 clear state.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- // Init the text rendering system.
- FontManager* fontManager = new FontManager(512);
- TextBufferManager* textBufferManager = new TextBufferManager(fontManager);
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
- // Load some TTF files.
- const char* fontFilePath[7] =
- {
- "font/droidsans.ttf",
- "font/chp-fire.ttf",
- "font/bleeding_cowboys.ttf",
- "font/mias_scribblings.ttf",
- "font/ruritania.ttf",
- "font/signika-regular.ttf",
- "font/five_minutes.otf",
- };
-
- const uint32_t numFonts = BX_COUNTOF(fontFilePath);
-
- TrueTypeHandle fontFiles[numFonts];
- FontHandle fonts[numFonts];
- for (uint32_t ii = 0; ii < numFonts; ++ii)
- {
- // Instantiate a usable font.
- fontFiles[ii] = loadTtf(fontManager, fontFilePath[ii]);
- fonts[ii] = fontManager->createFontByPixelSize(fontFiles[ii], 0, 32);
+ // Init the text rendering system.
+ m_fontManager = new FontManager(512);
+ m_textBufferManager = new TextBufferManager(m_fontManager);
- // Preload glyphs and blit them to atlas.
- fontManager->preloadGlyph(fonts[ii], L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. \n");
+ // Load some TTF files.
+ for (uint32_t ii = 0; ii < numFonts; ++ii)
+ {
+ // Instantiate a usable font.
+ m_fontFiles[ii] = loadTtf(m_fontManager, s_fontFilePath[ii]);
+ m_fonts[ii] = m_fontManager->createFontByPixelSize(m_fontFiles[ii], 0, 32);
- // You can unload the truetype files at this stage, but in that
- // case, the set of glyph's will be limited to the set of preloaded
- // glyph.
- fontManager->destroyTtf(fontFiles[ii]);
- }
+ // Preload glyphs and blit them to atlas.
+ m_fontManager->preloadGlyph(m_fonts[ii], L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. \n");
- TrueTypeHandle fontAwesomeTtf = loadTtf(fontManager, "font/fontawesome-webfont.ttf");
- TrueTypeHandle fontKenneyTtf = loadTtf(fontManager, "font/kenney-icon-font.ttf");
+ // You can unload the truetype files at this stage, but in that
+ // case, the set of glyph's will be limited to the set of preloaded
+ // glyph.
+ m_fontManager->destroyTtf(m_fontFiles[ii]);
+ }
- // This font doesn't have any preloaded glyph's but the truetype file
- // is loaded so glyph will be generated as needed.
- FontHandle fontAwesome72 = fontManager->createFontByPixelSize(fontAwesomeTtf, 0, 72);
- FontHandle fontKenney64 = fontManager->createFontByPixelSize(fontKenneyTtf, 0, 64);
+ m_fontAwesomeTtf = loadTtf(m_fontManager, "font/fontawesome-webfont.ttf");
+ m_fontKenneyTtf = loadTtf(m_fontManager, "font/kenney-icon-font.ttf");
- TrueTypeHandle visitorTtf = loadTtf(fontManager, "font/visitor1.ttf");
+ // This font doesn't have any preloaded glyph's but the truetype file
+ // is loaded so glyph will be generated as needed.
+ m_fontAwesome72 = m_fontManager->createFontByPixelSize(m_fontAwesomeTtf, 0, 72);
+ m_fontKenney64 = m_fontManager->createFontByPixelSize(m_fontKenneyTtf, 0, 64);
- // This font doesn't have any preloaded glyph's but the truetype file
- // is loaded so glyph will be generated as needed.
- FontHandle visitor10 = fontManager->createFontByPixelSize(visitorTtf, 0, 10);
+ m_visitorTtf = loadTtf(m_fontManager, "font/visitor1.ttf");
- //create a static text buffer compatible with alpha font
- //a static text buffer content cannot be modified after its first submit.
- TextBufferHandle staticText = textBufferManager->createTextBuffer(FONT_TYPE_ALPHA, BufferType::Static);
+ // This font doesn't have any preloaded glyph's but the truetype file
+ // is loaded so glyph will be generated as needed.
+ m_visitor10 = m_fontManager->createFontByPixelSize(m_visitorTtf, 0, 10);
- // The pen position represent the top left of the box of the first line
- // of text.
- textBufferManager->setPenPosition(staticText, 24.0f, 100.0f);
+ //create a static text buffer compatible with alpha font
+ //a static text buffer content cannot be modified after its first submit.
+ m_staticText = m_textBufferManager->createTextBuffer(FONT_TYPE_ALPHA, BufferType::Static);
- for (uint32_t ii = 0; ii < numFonts; ++ii)
- {
- // Add some text to the buffer.
- // The position of the pen is adjusted when there is an endline.
- textBufferManager->appendText(staticText, fonts[ii], L"The quick brown fox jumps over the lazy dog\n");
- }
+ // The pen position represent the top left of the box of the first line
+ // of text.
+ m_textBufferManager->setPenPosition(m_staticText, 24.0f, 100.0f);
+
+ for (uint32_t ii = 0; ii < numFonts; ++ii)
+ {
+ // Add some text to the buffer.
+ // The position of the pen is adjusted when there is an endline.
+ m_textBufferManager->appendText(m_staticText, m_fonts[ii], L"The quick brown fox jumps over the lazy dog\n");
+ }
- // Now write some styled text.
+ // Now write some styled text.
- // Setup style colors.
- textBufferManager->setBackgroundColor(staticText, 0x551111ff);
- textBufferManager->setUnderlineColor(staticText, 0xff2222ff);
- textBufferManager->setOverlineColor(staticText, 0x2222ffff);
- textBufferManager->setStrikeThroughColor(staticText, 0x22ff22ff);
+ // Setup style colors.
+ m_textBufferManager->setBackgroundColor(m_staticText, 0x551111ff);
+ m_textBufferManager->setUnderlineColor(m_staticText, 0xff2222ff);
+ m_textBufferManager->setOverlineColor(m_staticText, 0x2222ffff);
+ m_textBufferManager->setStrikeThroughColor(m_staticText, 0x22ff22ff);
- // Background.
- textBufferManager->setStyle(staticText, STYLE_BACKGROUND);
- textBufferManager->appendText(staticText, fonts[0], L"The quick ");
+ // Background.
+ m_textBufferManager->setStyle(m_staticText, STYLE_BACKGROUND);
+ m_textBufferManager->appendText(m_staticText, m_fonts[0], L"The quick ");
- // Strike-through.
- textBufferManager->setStyle(staticText, STYLE_STRIKE_THROUGH);
- textBufferManager->appendText(staticText, fonts[0], L"brown fox ");
+ // Strike-through.
+ m_textBufferManager->setStyle(m_staticText, STYLE_STRIKE_THROUGH);
+ m_textBufferManager->appendText(m_staticText, m_fonts[0], L"brown fox ");
- // Overline.
- textBufferManager->setStyle(staticText, STYLE_OVERLINE);
- textBufferManager->appendText(staticText, fonts[0], L"jumps over ");
+ // Overline.
+ m_textBufferManager->setStyle(m_staticText, STYLE_OVERLINE);
+ m_textBufferManager->appendText(m_staticText, m_fonts[0], L"jumps over ");
- // Underline.
- textBufferManager->setStyle(staticText, STYLE_UNDERLINE);
- textBufferManager->appendText(staticText, fonts[0], L"the lazy ");
+ // Underline.
+ m_textBufferManager->setStyle(m_staticText, STYLE_UNDERLINE);
+ m_textBufferManager->appendText(m_staticText, m_fonts[0], L"the lazy ");
- // Background + strike-through.
- textBufferManager->setStyle(staticText, STYLE_BACKGROUND | STYLE_STRIKE_THROUGH);
- textBufferManager->appendText(staticText, fonts[0], L"dog\n");
+ // Background + strike-through.
+ m_textBufferManager->setStyle(m_staticText, STYLE_BACKGROUND | STYLE_STRIKE_THROUGH);
+ m_textBufferManager->appendText(m_staticText, m_fonts[0], L"dog\n");
- textBufferManager->setStyle(staticText, STYLE_NORMAL);
- textBufferManager->appendText(staticText, fontAwesome72,
+ m_textBufferManager->setStyle(m_staticText, STYLE_NORMAL);
+ m_textBufferManager->appendText(m_staticText, m_fontAwesome72,
" " ICON_FA_POWER_OFF
" " ICON_FA_TWITTER_SQUARE
" " ICON_FA_CERTIFICATE
@@ -160,7 +169,7 @@ int _main_(int _argc, char** _argv)
" " ICON_FA_GITHUB_ALT
"\n"
);
- textBufferManager->appendText(staticText, fontKenney64,
+ m_textBufferManager->appendText(m_staticText, m_fontKenney64,
" " ICON_KI_COMPUTER
" " ICON_KI_JOYSTICK
" " ICON_KI_EXLAMATION
@@ -170,107 +179,191 @@ int _main_(int _argc, char** _argv)
"\n"
);
- // Create a transient buffer for real-time data.
- TextBufferHandle transientText = textBufferManager->createTextBuffer(FONT_TYPE_ALPHA, BufferType::Transient);
+ // Create a transient buffer for real-time data.
+ m_transientText = m_textBufferManager->createTextBuffer(FONT_TYPE_ALPHA, BufferType::Transient);
- while (!entry::processEvents(width, height, debug, reset) )
+ imguiCreate();
+ }
+
+ virtual int shutdown() override
{
- // This dummy draw call is here to make sure that view 0 is cleared
- // if no other draw calls are submitted to view 0.
- bgfx::touch(0);
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0 / freq;
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/10-font");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Use the font system to display text and styled text.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- // Use transient text to display debug information.
- wchar_t fpsText[64];
- bx::swnprintf(fpsText, BX_COUNTOF(fpsText), L"Frame: % 7.3f[ms]", double(frameTime) * toMs);
-
- textBufferManager->clearTextBuffer(transientText);
- textBufferManager->setPenPosition(transientText, width - 150.0f, 10.0f);
- textBufferManager->appendText(transientText, visitor10, L"Transient\n");
- textBufferManager->appendText(transientText, visitor10, L"text buffer\n");
- textBufferManager->appendText(transientText, visitor10, fpsText);
-
- float at[3] = { 0, 0, 0.0f };
- float eye[3] = { 0, 0, -1.0f };
-
- float view[16];
- bx::mtxLookAt(view, eye, at);
-
- const float centering = 0.5f;
-
- // Setup a top-left ortho matrix for screen space drawing.
- const bgfx::HMD* hmd = bgfx::getHMD();
- if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
- {
- float proj[16];
- bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
-
- static float time = 0.0f;
- time += 0.05f;
-
- const float dist = 10.0f;
- const float offset0 = -proj[8] + (hmd->eye[0].viewOffset[0] / dist * proj[0]);
- const float offset1 = -proj[8] + (hmd->eye[1].viewOffset[0] / dist * proj[0]);
-
- float ortho[2][16];
- const float offsetx = width/2.0f;
- bx::mtxOrtho(ortho[0], centering, offsetx + centering, height + centering, centering, -1.0f, 1.0f, offset0);
- bx::mtxOrtho(ortho[1], centering, offsetx + centering, height + centering, centering, -1.0f, 1.0f, offset1);
- bgfx::setViewTransform(0, view, ortho[0], BGFX_VIEW_STEREO, ortho[1]);
- bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
- }
- else
+ imguiDestroy();
+
+ m_fontManager->destroyTtf(m_fontKenneyTtf);
+ m_fontManager->destroyTtf(m_fontAwesomeTtf);
+ m_fontManager->destroyTtf(m_visitorTtf);
+
+ // Destroy the fonts.
+ m_fontManager->destroyFont(m_fontKenney64);
+ m_fontManager->destroyFont(m_fontAwesome72);
+ m_fontManager->destroyFont(m_visitor10);
+ for (uint32_t ii = 0; ii < numFonts; ++ii)
{
- float ortho[16];
- bx::mtxOrtho(ortho, centering, width + centering, height + centering, centering, -1.0f, 1.0f, bgfx::getCaps()->homogeneousDepth);
- bgfx::setViewTransform(0, view, ortho);
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
+ m_fontManager->destroyFont(m_fonts[ii]);
}
- // Submit the debug text.
- textBufferManager->submitTextBuffer(transientText, 0);
+ m_textBufferManager->destroyTextBuffer(m_staticText);
+ m_textBufferManager->destroyTextBuffer(m_transientText);
- // Submit the static text.
- textBufferManager->submitTextBuffer(staticText, 0);
+ delete m_textBufferManager;
+ delete m_fontManager;
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
- }
+ // Shutdown bgfx.
+ bgfx::shutdown();
- fontManager->destroyTtf(fontKenneyTtf);
- fontManager->destroyTtf(fontAwesomeTtf);
- fontManager->destroyTtf(visitorTtf);
+ return 0;
+ }
- // Destroy the fonts.
- fontManager->destroyFont(fontKenney64);
- fontManager->destroyFont(fontAwesome72);
- fontManager->destroyFont(visitor10);
- for (uint32_t ii = 0; ii < numFonts; ++ii)
+ bool update() override
{
- fontManager->destroyFont(fonts[ii]);
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
+ {
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const double toMs = 1000.0 / freq;
+
+ // Use transient text to display debug information.
+ wchar_t fpsText[64];
+ bx::swnprintf(fpsText, BX_COUNTOF(fpsText), L"Frame: % 7.3f[ms]", double(frameTime) * toMs);
+
+ m_textBufferManager->clearTextBuffer(m_transientText);
+ m_textBufferManager->setPenPosition(m_transientText, m_width - 150.0f, 10.0f);
+ m_textBufferManager->appendText(m_transientText, m_visitor10, L"Transient\n");
+ m_textBufferManager->appendText(m_transientText, m_visitor10, L"text buffer\n");
+ m_textBufferManager->appendText(m_transientText, m_visitor10, fpsText);
+
+ float at[3] = { 0, 0, 0.0f };
+ float eye[3] = { 0, 0, -1.0f };
+
+ float view[16];
+ bx::mtxLookAt(view, eye, at);
+
+ const float centering = 0.5f;
+
+ // Setup a top-left ortho matrix for screen space drawing.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ const bgfx::Caps* caps = bgfx::getCaps();
+ if (NULL != hmd
+ && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float proj[16];
+ bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f, caps->homogeneousDepth);
+
+ static float time = 0.0f;
+ time += 0.05f;
+
+ const float dist = 10.0f;
+ const float offset0 = -proj[8] + (hmd->eye[0].viewOffset[0] / dist * proj[0]);
+ const float offset1 = -proj[8] + (hmd->eye[1].viewOffset[0] / dist * proj[0]);
+
+ float ortho[2][16];
+ const float offsetx = m_width/2.0f;
+ bx::mtxOrtho(
+ ortho[0]
+ , centering
+ , offsetx + centering
+ , m_height + centering
+ , centering
+ , -1.0f
+ , 1.0f
+ , offset0
+ , caps->homogeneousDepth
+ );
+ bx::mtxOrtho(
+ ortho[1]
+ , centering
+ , offsetx + centering
+ , m_height + centering
+ , centering
+ , -1.0f
+ , 1.0f
+ , offset1
+ , caps->homogeneousDepth
+ );
+ bgfx::setViewTransform(0, view, ortho[0], BGFX_VIEW_STEREO, ortho[1]);
+ bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ }
+ else
+ {
+ float ortho[16];
+ bx::mtxOrtho(
+ ortho
+ , centering
+ , m_width + centering
+ , m_height + centering
+ , centering
+ , 0.0f
+ , 100.0f
+ , 0.0f
+ , caps->homogeneousDepth
+ );
+ bgfx::setViewTransform(0, view, ortho);
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ }
+
+ // Submit the debug text.
+ m_textBufferManager->submitTextBuffer(m_transientText, 0);
+
+ // Submit the static text.
+ m_textBufferManager->submitTextBuffer(m_staticText, 0);
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
+ }
+
+ return false;
}
- textBufferManager->destroyTextBuffer(staticText);
- textBufferManager->destroyTextBuffer(transientText);
+ entry::MouseState m_mouseState;
- delete textBufferManager;
- delete fontManager;
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
- // Shutdown bgfx.
- bgfx::shutdown();
+ FontManager* m_fontManager;
+ TextBufferManager* m_textBufferManager;
- return 0;
-}
+ FontHandle m_visitor10;
+ TrueTypeHandle m_fontAwesomeTtf;
+ TrueTypeHandle m_fontKenneyTtf;
+ FontHandle m_fontAwesome72;
+ FontHandle m_fontKenney64;
+ TrueTypeHandle m_visitorTtf;
+
+ TextBufferHandle m_transientText;
+ TextBufferHandle m_staticText;
+
+ static const uint32_t numFonts = BX_COUNTOF(s_fontFilePath);
+
+ TrueTypeHandle m_fontFiles[numFonts];
+ FontHandle m_fonts[numFonts];
+};
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleFont, "10-font", "Use the font system to display text and styled text.");
diff --git a/3rdparty/bgfx/examples/11-fontsdf/fontsdf.cpp b/3rdparty/bgfx/examples/11-fontsdf/fontsdf.cpp
index 01c6bd08bda..aa653c80285 100644
--- a/3rdparty/bgfx/examples/11-fontsdf/fontsdf.cpp
+++ b/3rdparty/bgfx/examples/11-fontsdf/fontsdf.cpp
@@ -8,13 +8,16 @@
#include <bgfx/bgfx.h>
#include <bx/timer.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include "font/font_manager.h"
#include "font/text_metrics.h"
#include "font/text_buffer_manager.h"
#include "imgui/imgui.h"
+namespace
+{
+
TrueTypeHandle loadTtf(FontManager* _fm, const char* _filePath)
{
uint32_t size;
@@ -31,223 +34,264 @@ TrueTypeHandle loadTtf(FontManager* _fm, const char* _filePath)
return invalid;
}
-int _main_(int _argc, char** _argv)
+class ExampleFontSDF : public entry::AppI
{
- Args args(_argc, _argv);
-
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
-
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
-
- // Enable debug text.
- bgfx::setDebug(debug);
-
- // Set view 0 clear state.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
-
- // Imgui.
- imguiCreate();
+public:
+ ExampleFontSDF(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
- char* bigText = (char*)load("text/sherlock_holmes_a_scandal_in_bohemia_arthur_conan_doyle.txt");
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
- // Init the text rendering system.
- FontManager* fontManager = new FontManager(512);
- TextBufferManager* textBufferManager = new TextBufferManager(fontManager);
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
- TrueTypeHandle font = loadTtf(fontManager, "font/special_elite.ttf");
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- // Create a distance field font.
- FontHandle fontSdf = fontManager->createFontByPixelSize(font, 0, 48, FONT_TYPE_DISTANCE);
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- // Create a scaled down version of the same font (without adding anything to the atlas).
- FontHandle fontScaled = fontManager->createScaledFontToPixelSize(fontSdf, 14);
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
- TextLineMetrics metrics(fontManager->getFontInfo(fontScaled) );
- uint32_t lineCount = metrics.getLineCount(bigText);
+ // Imgui.
+ imguiCreate();
- float visibleLineCount = 20.0f;
+ m_bigText = (char*)load("text/sherlock_holmes_a_scandal_in_bohemia_arthur_conan_doyle.txt");
- const char* textBegin = 0;
- const char* textEnd = 0;
- metrics.getSubText(bigText, 0, (uint32_t)visibleLineCount, textBegin, textEnd);
+ // Init the text rendering system.
+ m_fontManager = new FontManager(512);
+ m_textBufferManager = new TextBufferManager(m_fontManager);
- TextBufferHandle scrollableBuffer = textBufferManager->createTextBuffer(FONT_TYPE_DISTANCE, BufferType::Transient);
- textBufferManager->setTextColor(scrollableBuffer, 0xFFFFFFFF);
+ m_font = loadTtf(m_fontManager, "font/special_elite.ttf");
- textBufferManager->appendText(scrollableBuffer, fontScaled, textBegin, textEnd);
+ // Create a distance field font.
+ m_fontSdf = m_fontManager->createFontByPixelSize(m_font, 0, 48, FONT_TYPE_DISTANCE);
- entry::MouseState mouseState;
- int32_t scrollArea = 0;
- const int32_t guiPanelWidth = 250;
- const int32_t guiPanelHeight = 200;
- float textScroll = 0.0f;
- float textRotation = 0.0f;
- float textScale = 1.0f;
- float textSize = 14.0f;
+ // Create a scaled down version of the same font (without adding anything to the atlas).
+ m_fontScaled = m_fontManager->createScaledFontToPixelSize(m_fontSdf, 14);
- while (!entry::processEvents(width, height, debug, reset, &mouseState) )
- {
- imguiBeginFrame(mouseState.m_mx
- , mouseState.m_my
- , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , mouseState.m_mz
- , uint16_t(width)
- , uint16_t(height)
- );
-
- imguiBeginScrollArea("Text Area"
- , width - guiPanelWidth - 10
- , 10
- , guiPanelWidth
- , guiPanelHeight
- , &scrollArea
- );
- imguiSeparatorLine();
+ m_metrics = TextLineMetrics(m_fontManager->getFontInfo(m_fontScaled) );
+ m_lineCount = m_metrics.getLineCount(m_bigText);
- bool recomputeVisibleText = false;
- recomputeVisibleText |= imguiSlider("Number of lines", visibleLineCount, 1.0f, 177.0f , 1.0f);
- if (imguiSlider("Font size", textSize, 6.0f, 64.0f , 1.0f) )
- {
- fontManager->destroyFont(fontScaled);
- fontScaled = fontManager->createScaledFontToPixelSize(fontSdf, (uint32_t) textSize);
- metrics = TextLineMetrics(fontManager->getFontInfo(fontScaled) );
- recomputeVisibleText = true;
- }
+ m_visibleLineCount = 20.0f;
- recomputeVisibleText |= imguiSlider("Scroll", textScroll, 0.0f, (lineCount-visibleLineCount) , 1.0f);
- imguiSlider("Rotate", textRotation, 0.0f, bx::pi*2.0f , 0.1f);
- recomputeVisibleText |= imguiSlider("Scale", textScale, 0.1f, 10.0f , 0.1f);
+ m_textBegin = 0;
+ m_textEnd = 0;
+ m_metrics.getSubText(m_bigText, 0, (uint32_t)m_visibleLineCount, m_textBegin, m_textEnd);
- if (recomputeVisibleText)
- {
- textBufferManager->clearTextBuffer(scrollableBuffer);
- metrics.getSubText(bigText,(uint32_t)textScroll, (uint32_t)(textScroll+visibleLineCount), textBegin, textEnd);
- textBufferManager->appendText(scrollableBuffer, fontScaled, textBegin, textEnd);
- }
+ m_scrollableBuffer = m_textBufferManager->createTextBuffer(FONT_TYPE_DISTANCE, BufferType::Transient);
+ m_textBufferManager->setTextColor(m_scrollableBuffer, 0xFFFFFFFF);
- imguiEndScrollArea();
+ m_textBufferManager->appendText(m_scrollableBuffer, m_fontScaled, m_textBegin, m_textEnd);
- imguiEndFrame();
+ m_textScroll = 0.0f;
+ m_textRotation = 0.0f;
+ m_textScale = 1.0f;
+ m_textSize = 14.0f;
+ }
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
+ virtual int shutdown() override
+ {
+ imguiDestroy();
- // This dummy draw call is here to make sure that view 0 is cleared
- // if no other draw calls are submitted to view 0.
- bgfx::touch(0);
+ BX_FREE(entry::getAllocator(), m_bigText);
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0 / freq;
+ m_fontManager->destroyTtf(m_font);
+ // Destroy the fonts.
+ m_fontManager->destroyFont(m_fontSdf);
+ m_fontManager->destroyFont(m_fontScaled);
- // Use debug font to print32_t information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/11-fontsdf");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Use a single distance field font to render text of various size.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime) * toMs);
+ m_textBufferManager->destroyTextBuffer(m_scrollableBuffer);
- float at[3] = { 0, 0, 0.0f };
- float eye[3] = {0, 0, -1.0f };
+ delete m_textBufferManager;
+ delete m_fontManager;
- float view[16];
- bx::mtxLookAt(view, eye, at);
+ // Shutdown bgfx.
+ bgfx::shutdown();
- const float centering = 0.5f;
+ return 0;
+ }
- // Setup a top-left ortho matrix for screen space drawing.
- const bgfx::HMD* hmd = bgfx::getHMD();
- if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
- {
- float proj[16];
- bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
-
- static float time = 0.0f;
- time += 0.05f;
-
- const float dist = 10.0f;
- const float offset0 = -proj[8] + (hmd->eye[0].viewOffset[0] / dist * proj[0]);
- const float offset1 = -proj[8] + (hmd->eye[1].viewOffset[0] / dist * proj[0]);
-
- float ortho[2][16];
- const float viewOffset = width/4.0f;
- const float viewWidth = width/2.0f;
- bx::mtxOrtho(ortho[0], centering + viewOffset, centering + viewOffset + viewWidth, height + centering, centering, -1.0f, 1.0f, offset0);
- bx::mtxOrtho(ortho[1], centering + viewOffset, centering + viewOffset + viewWidth, height + centering, centering, -1.0f, 1.0f, offset1);
- bgfx::setViewTransform(0, view, ortho[0], BGFX_VIEW_STEREO, ortho[1]);
- bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
- }
- else
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- float ortho[16];
- bx::mtxOrtho(ortho, centering, width + centering, height + centering, centering, -1.0f, 1.0f);
- bgfx::setViewTransform(0, view, ortho);
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 2.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+
+ bool recomputeVisibleText = false;
+ recomputeVisibleText |= ImGui::SliderFloat("# of lines", &m_visibleLineCount, 1.0f, 177.0f);
+
+ if (ImGui::SliderFloat("Font size", &m_textSize, 6.0f, 64.0f) )
+ {
+ m_fontManager->destroyFont(m_fontScaled);
+ m_fontScaled = m_fontManager->createScaledFontToPixelSize(m_fontSdf, (uint32_t) m_textSize);
+ m_metrics = TextLineMetrics(m_fontManager->getFontInfo(m_fontScaled) );
+ recomputeVisibleText = true;
+ }
+
+ recomputeVisibleText |= ImGui::SliderFloat("Scroll", &m_textScroll, 0.0f, (m_lineCount-m_visibleLineCount));
+ ImGui::SliderFloat("Rotate", &m_textRotation, 0.0f, bx::kPi*2.0f);
+ recomputeVisibleText |= ImGui::SliderFloat("Scale", &m_textScale, 0.1f, 10.0f);
+
+ if (recomputeVisibleText)
+ {
+ m_textBufferManager->clearTextBuffer(m_scrollableBuffer);
+ m_metrics.getSubText(m_bigText,(uint32_t)m_textScroll, (uint32_t)(m_textScroll+m_visibleLineCount), m_textBegin, m_textEnd);
+ m_textBufferManager->appendText(m_scrollableBuffer, m_fontScaled, m_textBegin, m_textEnd);
+ }
+
+ ImGui::End();
+
+ imguiEndFrame();
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ float eye[3] = { 0.0f, 0.0f, -1.0f };
+
+ float view[16];
+ bx::mtxLookAt(view, eye, at);
+
+ const float centering = 0.5f;
+
+ // Setup a top-left ortho matrix for screen space drawing.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ const bgfx::Caps* caps = bgfx::getCaps();
+ if (NULL != hmd
+ && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float proj[16];
+ bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f, caps->homogeneousDepth);
+
+ static float time = 0.0f;
+ time += 0.05f;
+
+ const float dist = 10.0f;
+ const float offset0 = -proj[8] + (hmd->eye[0].viewOffset[0] / dist * proj[0]);
+ const float offset1 = -proj[8] + (hmd->eye[1].viewOffset[0] / dist * proj[0]);
+
+ float ortho[2][16];
+ const float viewOffset = m_width/4.0f;
+ const float viewWidth = m_width/2.0f;
+ bx::mtxOrtho(ortho[0], centering + viewOffset, centering + viewOffset + viewWidth, m_height + centering, centering, -1.0f, 1.0f, offset0, caps->homogeneousDepth);
+ bx::mtxOrtho(ortho[1], centering + viewOffset, centering + viewOffset + viewWidth, m_height + centering, centering, -1.0f, 1.0f, offset1, caps->homogeneousDepth);
+ bgfx::setViewTransform(0, view, ortho[0], BGFX_VIEW_STEREO, ortho[1]);
+ bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ }
+ else
+ {
+ float ortho[16];
+ bx::mtxOrtho(ortho, centering, m_width + centering, m_height + centering, centering, -1.0f, 1.0f, 0.0f, caps->homogeneousDepth);
+ bgfx::setViewTransform(0, view, ortho);
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ }
+
+ //very crude approximation :(
+ float textAreaWidth = 0.5f * 66.0f * m_fontManager->getFontInfo(m_fontScaled).maxAdvanceWidth;
+
+ float textRotMat[16];
+ float textCenterMat[16];
+ float textScaleMat[16];
+ float screenCenterMat[16];
+
+ bx::mtxRotateZ(textRotMat, m_textRotation);
+ bx::mtxTranslate(textCenterMat, -(textAreaWidth * 0.5f), (-m_visibleLineCount)*m_metrics.getLineHeight()*0.5f, 0);
+ bx::mtxScale(textScaleMat, m_textScale, m_textScale, 1.0f);
+ bx::mtxTranslate(screenCenterMat, ( (m_width) * 0.5f), ( (m_height) * 0.5f), 0);
+
+ //first translate to text center, then scale, then rotate
+ float tmpMat[16];
+ bx::mtxMul(tmpMat, textCenterMat, textRotMat);
+
+ float tmpMat2[16];
+ bx::mtxMul(tmpMat2, tmpMat, textScaleMat);
+
+ float tmpMat3[16];
+ bx::mtxMul(tmpMat3, tmpMat2, screenCenterMat);
+
+ // Set model matrix for rendering.
+ bgfx::setTransform(tmpMat3);
+
+ // Draw your text.
+ m_textBufferManager->submitTextBuffer(m_scrollableBuffer, 0);
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
}
- //very crude approximation :(
- float textAreaWidth = 0.5f * 66.0f * fontManager->getFontInfo(fontScaled).maxAdvanceWidth;
-
- float textRotMat[16];
- float textCenterMat[16];
- float textScaleMat[16];
- float screenCenterMat[16];
-
- bx::mtxRotateZ(textRotMat, textRotation);
- bx::mtxTranslate(textCenterMat, -(textAreaWidth * 0.5f), (-visibleLineCount)*metrics.getLineHeight()*0.5f, 0);
- bx::mtxScale(textScaleMat, textScale, textScale, 1.0f);
- bx::mtxTranslate(screenCenterMat, ( (width) * 0.5f), ( (height) * 0.5f), 0);
-
- //first translate to text center, then scale, then rotate
- float tmpMat[16];
- bx::mtxMul(tmpMat, textCenterMat, textRotMat);
-
- float tmpMat2[16];
- bx::mtxMul(tmpMat2, tmpMat, textScaleMat);
-
- float tmpMat3[16];
- bx::mtxMul(tmpMat3, tmpMat2, screenCenterMat);
-
- // Set model matrix for rendering.
- bgfx::setTransform(tmpMat3);
+ return false;
+ }
- // Draw your text.
- textBufferManager->submitTextBuffer(scrollableBuffer, 0);
+ entry::MouseState m_mouseState;
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
- }
+ char* m_bigText;
- imguiDestroy();
+ // Init the text rendering system.
+ FontManager* m_fontManager;
+ TextBufferManager* m_textBufferManager;
- BX_FREE(entry::getAllocator(), bigText);
+ TrueTypeHandle m_font;
+ FontHandle m_fontSdf;
+ FontHandle m_fontScaled;
- fontManager->destroyTtf(font);
- // Destroy the fonts.
- fontManager->destroyFont(fontSdf);
- fontManager->destroyFont(fontScaled);
+ TextBufferHandle m_scrollableBuffer;
- textBufferManager->destroyTextBuffer(scrollableBuffer);
+ TextLineMetrics m_metrics = TextLineMetrics(FontInfo());
+ uint32_t m_lineCount;
+ float m_visibleLineCount;
+ const char* m_textBegin;
+ const char* m_textEnd;
- delete textBufferManager;
- delete fontManager;
+ float m_textScroll;
+ float m_textRotation;
+ float m_textScale;
+ float m_textSize;
+};
- // Shutdown bgfx.
- bgfx::shutdown();
+} // namespace
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleFontSDF, "11-fontsdf", "Use a single distance field font to render text of various size.");
diff --git a/3rdparty/bgfx/examples/12-lod/lod.cpp b/3rdparty/bgfx/examples/12-lod/lod.cpp
index 510565d0e2f..19ac984817e 100644
--- a/3rdparty/bgfx/examples/12-lod/lod.cpp
+++ b/3rdparty/bgfx/examples/12-lod/lod.cpp
@@ -9,6 +9,9 @@
#include <bx/readerwriter.h>
+namespace
+{
+
struct KnightPos
{
int32_t m_x;
@@ -25,13 +28,19 @@ static const KnightPos knightTour[8*4] =
class ExampleLod : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleLod(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -90,7 +99,7 @@ class ExampleLod : public entry::AppI
m_targetLod = 0;
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
imguiDestroy();
@@ -101,15 +110,15 @@ class ExampleLod : public entry::AppI
}
// Cleanup.
- bgfx::destroyProgram(m_program);
+ bgfx::destroy(m_program);
- bgfx::destroyUniform(s_texColor);
- bgfx::destroyUniform(s_texStipple);
- bgfx::destroyUniform(u_stipple);
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(s_texStipple);
+ bgfx::destroy(u_stipple);
- bgfx::destroyTexture(m_textureStipple);
- bgfx::destroyTexture(m_textureLeafs);
- bgfx::destroyTexture(m_textureBark);
+ bgfx::destroy(m_textureStipple);
+ bgfx::destroy(m_textureLeafs);
+ bgfx::destroy(m_textureBark);
// Shutdown bgfx.
bgfx::shutdown();
@@ -117,7 +126,7 @@ class ExampleLod : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
@@ -131,18 +140,25 @@ class ExampleLod : public entry::AppI
, uint16_t(m_height)
);
- imguiBeginScrollArea("Toggle transitions", m_width - m_width / 5 - 10, 10, m_width / 5, m_height / 6, &m_scrollArea);
- imguiSeparatorLine();
+ showExampleDialog(this);
- if (imguiButton(m_transitions ? "ON" : "OFF") )
- {
- m_transitions = !m_transitions;
- }
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 6.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+
+ ImGui::Checkbox("Transition", &m_transitions);
static float distance = 2.0f;
- imguiSlider("Distance", distance, 2.0f, 6.0f, 0.01f);
+ ImGui::SliderFloat("Distance", &distance, 2.0f, 6.0f);
+
+ ImGui::End();
- imguiEndScrollArea();
imguiEndFrame();
// Set view 0 default viewport.
@@ -152,19 +168,6 @@ class ExampleLod : public entry::AppI
// if no other draw calls are submitted to view 0.
bgfx::touch(0);
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/12-lod");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Mesh LOD transitions.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
float at[3] = { 0.0f, 1.0f, 0.0f };
float eye[3] = { 0.0f, 2.0f, -distance };
@@ -312,4 +315,6 @@ class ExampleLod : public entry::AppI
bool m_transitions;
};
-ENTRY_IMPLEMENT_MAIN(ExampleLod);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleLod, "12-lod", "Mesh LOD transitions.");
diff --git a/3rdparty/bgfx/examples/13-stencil/stencil.cpp b/3rdparty/bgfx/examples/13-stencil/stencil.cpp
index b66aaa48e4b..a1af5aceb02 100644
--- a/3rdparty/bgfx/examples/13-stencil/stencil.cpp
+++ b/3rdparty/bgfx/examples/13-stencil/stencil.cpp
@@ -8,46 +8,29 @@
#include "common.h"
#include "bgfx_utils.h"
+#include <bx/file.h>
-#include <bx/crtimpl.h>
#include "camera.h"
#include "imgui/imgui.h"
-#define RENDER_VIEWID_RANGE1_PASS_0 1
-#define RENDER_VIEWID_RANGE1_PASS_1 2
-#define RENDER_VIEWID_RANGE1_PASS_2 3
-#define RENDER_VIEWID_RANGE1_PASS_3 4
-#define RENDER_VIEWID_RANGE1_PASS_4 5
-#define RENDER_VIEWID_RANGE1_PASS_5 6
-#define RENDER_VIEWID_RANGE5_PASS_6 7
-#define RENDER_VIEWID_RANGE1_PASS_7 13
-
-#define MAX_NUM_LIGHTS 5
-
-uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w)
+namespace bgfx
{
- union
- {
- uint32_t ui32;
- uint8_t arr[4];
- } un;
-
- un.arr[0] = _x;
- un.arr[1] = _y;
- un.arr[2] = _z;
- un.arr[3] = _w;
-
- return un.ui32;
+ int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
}
-uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f)
+namespace
{
- const uint8_t xx = uint8_t(_x*127.0f + 128.0f);
- const uint8_t yy = uint8_t(_y*127.0f + 128.0f);
- const uint8_t zz = uint8_t(_z*127.0f + 128.0f);
- const uint8_t ww = uint8_t(_w*127.0f + 128.0f);
- return packUint32(xx, yy, zz, ww);
-}
+
+#define RENDER_VIEWID_RANGE1_PASS_0 1
+#define RENDER_VIEWID_RANGE1_PASS_1 2
+#define RENDER_VIEWID_RANGE1_PASS_2 3
+#define RENDER_VIEWID_RANGE1_PASS_3 4
+#define RENDER_VIEWID_RANGE1_PASS_4 5
+#define RENDER_VIEWID_RANGE1_PASS_5 6
+#define RENDER_VIEWID_RANGE5_PASS_6 7
+#define RENDER_VIEWID_RANGE1_PASS_7 13
+
+#define MAX_NUM_LIGHTS 5
struct PosNormalTexcoordVertex
{
@@ -76,46 +59,46 @@ bgfx::VertexDecl PosNormalTexcoordVertex::ms_decl;
static const float s_texcoord = 5.0f;
static PosNormalTexcoordVertex s_hplaneVertices[] =
{
- { -1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, s_texcoord },
- { 1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, 0.0f },
- { -1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, s_texcoord },
- { 1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, 0.0f },
+ { -1.0f, 0.0f, 1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), s_texcoord, s_texcoord },
+ { 1.0f, 0.0f, 1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), s_texcoord, 0.0f },
+ { -1.0f, 0.0f, -1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), 0.0f, s_texcoord },
+ { 1.0f, 0.0f, -1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), 0.0f, 0.0f },
};
static PosNormalTexcoordVertex s_vplaneVertices[] =
{
- { -1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 1.0f },
- { 1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 0.0f },
- { -1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 1.0f },
- { 1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 0.0f },
+ { -1.0f, 1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 1.0f, 1.0f },
+ { 1.0f, 1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 1.0f, 0.0f },
+ { -1.0f, -1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 0.0f, 1.0f },
+ { 1.0f, -1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 0.0f, 0.0f },
};
static const PosNormalTexcoordVertex s_cubeVertices[] =
{
- { -1.0f, 1.0f, 1.0f, packF4u( 0.0f, 1.0f, 0.0f), 1.0f, 1.0f },
- { 1.0f, 1.0f, 1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0.0f, 1.0f },
- { -1.0f, 1.0f, -1.0f, packF4u( 0.0f, 1.0f, 0.0f), 1.0f, 0.0f },
- { 1.0f, 1.0f, -1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0.0f, 0.0f },
- { -1.0f, -1.0f, 1.0f, packF4u( 0.0f, -1.0f, 0.0f), 1.0f, 1.0f },
- { 1.0f, -1.0f, 1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0.0f, 1.0f },
- { -1.0f, -1.0f, -1.0f, packF4u( 0.0f, -1.0f, 0.0f), 1.0f, 0.0f },
- { 1.0f, -1.0f, -1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0.0f, 0.0f },
- { 1.0f, -1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0.0f, 0.0f },
- { 1.0f, 1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0.0f, 1.0f },
- { -1.0f, -1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 1.0f, 0.0f },
- { -1.0f, 1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 1.0f, 1.0f },
- { 1.0f, -1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0.0f, 0.0f },
- { 1.0f, 1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0.0f, 1.0f },
- { -1.0f, -1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 1.0f, 0.0f },
- { -1.0f, 1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 1.0f, 1.0f },
- { 1.0f, 1.0f, -1.0f, packF4u( 1.0f, 0.0f, 0.0f), 1.0f, 1.0f },
- { 1.0f, 1.0f, 1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0.0f, 1.0f },
- { 1.0f, -1.0f, -1.0f, packF4u( 1.0f, 0.0f, 0.0f), 1.0f, 0.0f },
- { 1.0f, -1.0f, 1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0.0f, 0.0f },
- { -1.0f, 1.0f, -1.0f, packF4u(-1.0f, 0.0f, 0.0f), 1.0f, 1.0f },
- { -1.0f, 1.0f, 1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0.0f, 1.0f },
- { -1.0f, -1.0f, -1.0f, packF4u(-1.0f, 0.0f, 0.0f), 1.0f, 0.0f },
- { -1.0f, -1.0f, 1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0.0f, 0.0f },
+ { -1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 1.0f, 1.0f },
+ { 1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0.0f, 1.0f },
+ { -1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 1.0f, 0.0f },
+ { 1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0.0f, 0.0f },
+ { -1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 1.0f, 1.0f },
+ { 1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0.0f, 1.0f },
+ { -1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 1.0f, 0.0f },
+ { 1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0.0f, 0.0f },
+ { 1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0.0f, 0.0f },
+ { 1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0.0f, 1.0f },
+ { -1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 1.0f, 0.0f },
+ { -1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 1.0f, 1.0f },
+ { 1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0.0f, 0.0f },
+ { 1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0.0f, 1.0f },
+ { -1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 1.0f, 0.0f },
+ { -1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 1.0f, 1.0f },
+ { 1.0f, 1.0f, -1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 1.0f, 1.0f },
+ { 1.0f, 1.0f, 1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0.0f, 1.0f },
+ { 1.0f, -1.0f, -1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 1.0f, 0.0f },
+ { 1.0f, -1.0f, 1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0.0f, 0.0f },
+ { -1.0f, 1.0f, -1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 1.0f, 1.0f },
+ { -1.0f, 1.0f, 1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0.0f, 1.0f },
+ { -1.0f, -1.0f, -1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 1.0f, 0.0f },
+ { -1.0f, -1.0f, 1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0.0f, 0.0f },
};
static const uint16_t s_cubeIndices[] =
@@ -142,16 +125,10 @@ static const uint16_t s_planeIndices[] =
1, 3, 2,
};
-static bool s_flipV = false;
static uint32_t s_viewMask = 0;
static uint32_t s_clearMask = 0;
static bgfx::UniformHandle s_texColor;
-inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far)
-{
- bx::mtxProj(_result, _fovy, _aspect, _near, _far, s_flipV);
-}
-
void setViewClearMask(uint32_t _viewMask, uint8_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
{
for (uint32_t view = 0, viewMask = _viewMask, ntz = bx::uint32_cnttz(_viewMask); 0 != viewMask; viewMask >>= 1, view += 1, ntz = bx::uint32_cnttz(viewMask) )
@@ -340,13 +317,13 @@ struct Uniforms
void destroy()
{
- bgfx::destroyUniform(u_params);
- bgfx::destroyUniform(u_ambient);
- bgfx::destroyUniform(u_diffuse);
- bgfx::destroyUniform(u_specular_shininess);
- bgfx::destroyUniform(u_color);
- bgfx::destroyUniform(u_lightPosRadius);
- bgfx::destroyUniform(u_lightRgbInnerR);
+ bgfx::destroy(u_params);
+ bgfx::destroy(u_ambient);
+ bgfx::destroy(u_diffuse);
+ bgfx::destroy(u_specular_shininess);
+ bgfx::destroy(u_color);
+ bgfx::destroy(u_lightPosRadius);
+ bgfx::destroy(u_lightRgbInnerR);
}
struct Params
@@ -536,7 +513,7 @@ static RenderState s_renderStates[RenderState::Count] =
struct ViewState
{
- ViewState(uint32_t _width = 1280, uint32_t _height = 720)
+ ViewState(uint32_t _width = 0, uint32_t _height = 0)
: m_width(_width)
, m_height(_height)
{
@@ -565,7 +542,7 @@ struct ClearValues
uint8_t m_clearStencil;
};
-void clearView(uint8_t _id, uint8_t _flags, const ClearValues& _clearValues)
+void clearView(bgfx::ViewId _id, uint8_t _flags, const ClearValues& _clearValues)
{
bgfx::setViewClear(_id
, _flags
@@ -631,8 +608,8 @@ struct Group
void reset()
{
- m_vbh.idx = bgfx::invalidHandle;
- m_ibh.idx = bgfx::invalidHandle;
+ m_vbh.idx = bgfx::kInvalidHandle;
+ m_ibh.idx = bgfx::kInvalidHandle;
m_prims.clear();
}
@@ -644,11 +621,6 @@ struct Group
PrimitiveArray m_prims;
};
-namespace bgfx
-{
- int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
-}
-
struct Mesh
{
void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices)
@@ -764,23 +736,23 @@ struct Mesh
for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it)
{
const Group& group = *it;
- bgfx::destroyVertexBuffer(group.m_vbh);
+ bgfx::destroy(group.m_vbh);
- if (bgfx::invalidHandle != group.m_ibh.idx)
+ if (bgfx::isValid(group.m_ibh) )
{
- bgfx::destroyIndexBuffer(group.m_ibh);
+ bgfx::destroy(group.m_ibh);
}
}
m_groups.clear();
}
- void submit(uint8_t _viewId, float* _mtx, bgfx::ProgramHandle _program, const RenderState& _renderState)
+ void submit(bgfx::ViewId _id, float* _mtx, bgfx::ProgramHandle _program, const RenderState& _renderState)
{
bgfx::TextureHandle texture = BGFX_INVALID_HANDLE;
- submit(_viewId, _mtx, _program, _renderState, texture);
+ submit(_id, _mtx, _program, _renderState, texture);
}
- void submit(uint8_t _viewId, float* _mtx, bgfx::ProgramHandle _program, const RenderState& _renderState, bgfx::TextureHandle _texture)
+ void submit(bgfx::ViewId _id, float* _mtx, bgfx::ProgramHandle _program, const RenderState& _renderState, bgfx::TextureHandle _texture)
{
for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it)
{
@@ -792,23 +764,20 @@ struct Mesh
// Set model matrix for rendering.
bgfx::setTransform(_mtx);
bgfx::setIndexBuffer(group.m_ibh);
- bgfx::setVertexBuffer(group.m_vbh);
+ bgfx::setVertexBuffer(0, group.m_vbh);
// Set texture
- if (bgfx::invalidHandle != _texture.idx)
- {
- bgfx::setTexture(0, s_texColor, _texture);
- }
+ bgfx::setTexture(0, s_texColor, _texture);
// Apply render state
bgfx::setStencil(_renderState.m_fstencil, _renderState.m_bstencil);
bgfx::setState(_renderState.m_state, _renderState.m_blendFactorRgba);
// Submit
- bgfx::submit(_viewId, _program);
+ bgfx::submit(_id, _program);
// Keep track of submited view ids
- s_viewMask |= 1 << _viewId;
+ s_viewMask |= 1 << _id;
}
}
@@ -817,586 +786,621 @@ struct Mesh
GroupArray m_groups;
};
-int _main_(int _argc, char** _argv)
+
+class ExampleStencil : public entry::AppI
{
- Args args(_argc, _argv);
+public:
+ ExampleStencil(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
- ViewState viewState(1280, 720);
- ClearValues clearValues(0x30303000, 1.0f, 0);
+ virtual void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ m_viewState = ViewState(_width, _height);
+ m_clearValues = ClearValues(0x30303000, 1.0f, 0);
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(viewState.m_width, viewState.m_height, reset);
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
- // Enable debug text.
- bgfx::setDebug(debug);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_viewState.m_width, m_viewState.m_height, m_reset);
- // Setup root path for binary shaders. Shader binaries are different
- // for each renderer.
- switch (bgfx::getRendererType() )
- {
- case bgfx::RendererType::OpenGL:
- case bgfx::RendererType::OpenGLES:
- s_flipV = true;
- break;
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- default:
- break;
- }
+ // Imgui.
+ imguiCreate();
- // Imgui.
- imguiCreate();
+ PosNormalTexcoordVertex::init();
- PosNormalTexcoordVertex::init();
+ s_uniforms.init();
- s_uniforms.init();
- s_uniforms.submitConstUniforms();
+ s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
- s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
+ m_programTextureLighting = loadProgram("vs_stencil_texture_lighting", "fs_stencil_texture_lighting");
+ m_programColorLighting = loadProgram("vs_stencil_color_lighting", "fs_stencil_color_lighting" );
+ m_programColorTexture = loadProgram("vs_stencil_color_texture", "fs_stencil_color_texture" );
+ m_programColorBlack = loadProgram("vs_stencil_color", "fs_stencil_color_black" );
+ m_programTexture = loadProgram("vs_stencil_texture", "fs_stencil_texture" );
- bgfx::ProgramHandle programTextureLighting = loadProgram("vs_stencil_texture_lighting", "fs_stencil_texture_lighting");
- bgfx::ProgramHandle programColorLighting = loadProgram("vs_stencil_color_lighting", "fs_stencil_color_lighting" );
- bgfx::ProgramHandle programColorTexture = loadProgram("vs_stencil_color_texture", "fs_stencil_color_texture" );
- bgfx::ProgramHandle programColorBlack = loadProgram("vs_stencil_color", "fs_stencil_color_black" );
- bgfx::ProgramHandle programTexture = loadProgram("vs_stencil_texture", "fs_stencil_texture" );
+ m_bunnyMesh.load("meshes/bunny.bin");
+ m_columnMesh.load("meshes/column.bin");
+ m_cubeMesh.load(s_cubeVertices, BX_COUNTOF(s_cubeVertices), PosNormalTexcoordVertex::ms_decl, s_cubeIndices, BX_COUNTOF(s_cubeIndices) );
+ m_hplaneMesh.load(s_hplaneVertices, BX_COUNTOF(s_hplaneVertices), PosNormalTexcoordVertex::ms_decl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
+ m_vplaneMesh.load(s_vplaneVertices, BX_COUNTOF(s_vplaneVertices), PosNormalTexcoordVertex::ms_decl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
- Mesh bunnyMesh;
- Mesh columnMesh;
- Mesh cubeMesh;
- Mesh hplaneMesh;
- Mesh vplaneMesh;
- bunnyMesh.load("meshes/bunny.bin");
- columnMesh.load("meshes/column.bin");
- cubeMesh.load(s_cubeVertices, BX_COUNTOF(s_cubeVertices), PosNormalTexcoordVertex::ms_decl, s_cubeIndices, BX_COUNTOF(s_cubeIndices) );
- hplaneMesh.load(s_hplaneVertices, BX_COUNTOF(s_hplaneVertices), PosNormalTexcoordVertex::ms_decl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
- vplaneMesh.load(s_vplaneVertices, BX_COUNTOF(s_vplaneVertices), PosNormalTexcoordVertex::ms_decl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
+ m_figureTex = loadTexture("textures/figure-rgba.dds");
+ m_flareTex = loadTexture("textures/flare.dds");
+ m_fieldstoneTex = loadTexture("textures/fieldstone-rgba.dds");
- bgfx::TextureHandle figureTex = loadTexture("textures/figure-rgba.dds");
- bgfx::TextureHandle flareTex = loadTexture("textures/flare.dds");
- bgfx::TextureHandle fieldstoneTex = loadTexture("textures/fieldstone-rgba.dds");
+ // Setup lights.
+ const float rgbInnerR[][4] =
+ {
+ { 1.0f, 0.7f, 0.2f, 0.0f }, //yellow
+ { 0.7f, 0.2f, 1.0f, 0.0f }, //purple
+ { 0.2f, 1.0f, 0.7f, 0.0f }, //cyan
+ { 1.0f, 0.4f, 0.2f, 0.0f }, //orange
+ { 0.7f, 0.7f, 0.7f, 0.0f }, //white
+ };
- // Setup lights.
- const float rgbInnerR[][4] =
- {
- { 1.0f, 0.7f, 0.2f, 0.0f }, //yellow
- { 0.7f, 0.2f, 1.0f, 0.0f }, //purple
- { 0.2f, 1.0f, 0.7f, 0.0f }, //cyan
- { 1.0f, 0.4f, 0.2f, 0.0f }, //orange
- { 0.7f, 0.7f, 0.7f, 0.0f }, //white
- };
+ for (uint8_t ii = 0, jj = 0; ii < MAX_NUM_LIGHTS; ++ii, ++jj)
+ {
+ const uint8_t index = jj%BX_COUNTOF(rgbInnerR);
+ m_lightRgbInnerR[ii][0] = rgbInnerR[index][0];
+ m_lightRgbInnerR[ii][1] = rgbInnerR[index][1];
+ m_lightRgbInnerR[ii][2] = rgbInnerR[index][2];
+ m_lightRgbInnerR[ii][3] = rgbInnerR[index][3];
+ }
+ bx::memCopy(s_uniforms.m_lightRgbInnerR, m_lightRgbInnerR, MAX_NUM_LIGHTS * 4*sizeof(float) );
+
+ // Set view and projection matrices.
+ const float aspect = float(m_viewState.m_width)/float(m_viewState.m_height);
+ const bgfx::Caps* caps = bgfx::getCaps();
+ bx::mtxProj(m_viewState.m_proj, 60.0f, aspect, 0.1f, 100.0f, caps->homogeneousDepth);
+
+ float initialPos[3] = { 0.0f, 18.0f, -40.0f };
+ cameraCreate();
+ cameraSetPosition(initialPos);
+ cameraSetVerticalAngle(-0.35f);
+ cameraGetViewMtx(m_viewState.m_view);
+
+ m_timeOffset = bx::getHPCounter();
+
+ m_scene = StencilReflectionScene;
+ m_numLights = 4;
+ m_reflectionValue = 0.8f;
+ m_updateLights = true;
+ m_updateScene = true;
+ }
- float lightRgbInnerR[MAX_NUM_LIGHTS][4];
- for (uint8_t ii = 0, jj = 0; ii < MAX_NUM_LIGHTS; ++ii, ++jj)
+ virtual int shutdown() override
{
- const uint8_t index = jj%BX_COUNTOF(rgbInnerR);
- lightRgbInnerR[ii][0] = rgbInnerR[index][0];
- lightRgbInnerR[ii][1] = rgbInnerR[index][1];
- lightRgbInnerR[ii][2] = rgbInnerR[index][2];
- lightRgbInnerR[ii][3] = rgbInnerR[index][3];
- }
- bx::memCopy(s_uniforms.m_lightRgbInnerR, lightRgbInnerR, MAX_NUM_LIGHTS * 4*sizeof(float) );
+ // Cleanup.
+ m_bunnyMesh.unload();
+ m_columnMesh.unload();
+ m_cubeMesh.unload();
+ m_hplaneMesh.unload();
+ m_vplaneMesh.unload();
- // Set view and projection matrices.
- const float aspect = float(viewState.m_width)/float(viewState.m_height);
- mtxProj(viewState.m_proj, 60.0f, aspect, 0.1f, 100.0f);
+ bgfx::destroy(m_figureTex);
+ bgfx::destroy(m_fieldstoneTex);
+ bgfx::destroy(m_flareTex);
- float initialPos[3] = { 0.0f, 18.0f, -40.0f };
- cameraCreate();
- cameraSetPosition(initialPos);
- cameraSetVerticalAngle(-0.35f);
- cameraGetViewMtx(viewState.m_view);
+ bgfx::destroy(m_programTextureLighting);
+ bgfx::destroy(m_programColorLighting);
+ bgfx::destroy(m_programColorTexture);
+ bgfx::destroy(m_programColorBlack);
+ bgfx::destroy(m_programTexture);
- int64_t timeOffset = bx::getHPCounter();
+ bgfx::destroy(s_texColor);
- enum Scene
- {
- StencilReflectionScene = 0,
- ProjectionShadowsScene,
- };
+ s_uniforms.destroy();
- Scene scene = StencilReflectionScene;
- float settings_numLights = 4.0f;
- float settings_reflectionValue = 0.8f;
- bool settings_updateLights = true;
- bool settings_updateScene = true;
+ cameraDestroy();
+ imguiDestroy();
- static const char* titles[3] =
- {
- "Stencil Reflection Scene",
- "Projection Shadows Scene",
- };
+ // Shutdown bgfx.
+ bgfx::shutdown();
- entry::MouseState mouseState;
- while (!entry::processEvents(viewState.m_width, viewState.m_height, debug, reset, &mouseState) )
+ return 0;
+ }
+
+ virtual bool update() override
{
- imguiBeginFrame(mouseState.m_mx
- , mouseState.m_my
- , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , mouseState.m_mz
- , uint16_t(viewState.m_width)
- , uint16_t(viewState.m_height)
- );
-
- static int32_t scrollArea = 0;
- imguiBeginScrollArea("Settings", viewState.m_width - 256 - 10, 10, 256, 215, &scrollArea);
-
- if (imguiCheck(titles[StencilReflectionScene], StencilReflectionScene == scene) )
+ if (!entry::processEvents(m_viewState.m_width, m_viewState.m_height, m_debug, m_reset, &m_mouseState) )
{
- scene = StencilReflectionScene;
- settings_numLights = 4.0f;
- }
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_viewState.m_width)
+ , uint16_t(m_viewState.m_height)
+ );
- if (imguiCheck(titles[ProjectionShadowsScene], ProjectionShadowsScene == scene) )
- {
- scene = ProjectionShadowsScene;
- settings_numLights = 1.0f;
- }
+ showExampleDialog(this);
- imguiSeparatorLine();
- imguiSlider("Lights", settings_numLights, 1.0f, float(MAX_NUM_LIGHTS), 1.0f);
- if (scene == StencilReflectionScene)
- {
- imguiSlider("Reflection value", settings_reflectionValue, 0.0f, 1.0f, 0.01f);
- }
+ ImGui::SetNextWindowPos(
+ ImVec2(m_viewState.m_width - m_viewState.m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_viewState.m_width / 5.0f, m_viewState.m_height / 2.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
- if (imguiCheck("Update lights", settings_updateLights) )
- {
- settings_updateLights = !settings_updateLights;
- }
+ {
+ bool check = StencilReflectionScene == m_scene;
+ if (ImGui::Checkbox("Stencil Reflection Scene", &check) )
+ {
+ m_scene = StencilReflectionScene;
+ m_numLights = 4;
+ }
+ }
- if (imguiCheck("Update scene", settings_updateScene) )
- {
- settings_updateScene = !settings_updateScene;
- }
+ {
+ bool check = ProjectionShadowsScene == m_scene;
+ if (ImGui::Checkbox("Projection Shadows Scene", &check) )
+ {
+ m_scene = ProjectionShadowsScene;
+ m_numLights = 1;
+ }
+ }
- imguiEndScrollArea();
- imguiEndFrame();
-
- // Update settings.
- uint8_t numLights = (uint8_t)settings_numLights;
- s_uniforms.m_params.m_ambientPass = 1.0f;
- s_uniforms.m_params.m_lightingPass = 1.0f;
- s_uniforms.m_params.m_lightCount = settings_numLights;
- s_uniforms.m_params.m_lightIndex = 0.0f;
- s_uniforms.m_color[3] = settings_reflectionValue;
-
- // Time.
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
- const float time = (float)( (now - timeOffset)/double(bx::getHPFrequency() ) );
- const float deltaTime = float(frameTime/freq);
- s_uniforms.m_time = time;
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/13-stencil");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Stencil reflections and shadows.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- // Update camera.
- cameraUpdate(deltaTime, mouseState);
- cameraGetViewMtx(viewState.m_view);
-
- static float lightTimeAccumulator = 0.0f;
- if (settings_updateLights)
- {
- lightTimeAccumulator += deltaTime;
- }
+ ImGui::SliderInt("Lights", &m_numLights, 1, MAX_NUM_LIGHTS);
+ if (m_scene == StencilReflectionScene)
+ {
+ ImGui::SliderFloat("Reflection value", &m_reflectionValue, 0.0f, 1.0f);
+ }
- static float sceneTimeAccumulator = 0.0f;
- if (settings_updateScene)
- {
- sceneTimeAccumulator += deltaTime;
- }
+ ImGui::Checkbox("Update lights", &m_updateLights);
+ ImGui::Checkbox("Update scene", &m_updateScene);
- float lightPosRadius[MAX_NUM_LIGHTS][4];
- const float radius = (scene == StencilReflectionScene) ? 15.0f : 25.0f;
- for (uint8_t ii = 0; ii < numLights; ++ii)
- {
- lightPosRadius[ii][0] = bx::fsin( (lightTimeAccumulator*1.1f + ii*0.03f + ii*bx::piHalf*1.07f ) )*20.0f;
- lightPosRadius[ii][1] = 8.0f + (1.0f - bx::fcos( (lightTimeAccumulator*1.5f + ii*0.29f + bx::piHalf*1.49f ) ) )*4.0f;
- lightPosRadius[ii][2] = bx::fcos( (lightTimeAccumulator*1.3f + ii*0.13f + ii*bx::piHalf*1.79f ) )*20.0f;
- lightPosRadius[ii][3] = radius;
- }
- bx::memCopy(s_uniforms.m_lightPosRadius, lightPosRadius, numLights * 4*sizeof(float) );
-
- // Floor position.
- float floorMtx[16];
- bx::mtxSRT(floorMtx
- , 20.0f //scaleX
- , 20.0f //scaleY
- , 20.0f //scaleZ
- , 0.0f //rotX
- , 0.0f //rotY
- , 0.0f //rotZ
- , 0.0f //translateX
- , 0.0f //translateY
- , 0.0f //translateZ
- );
-
- // Bunny position.
- float bunnyMtx[16];
- bx::mtxSRT(bunnyMtx
- , 5.0f
- , 5.0f
- , 5.0f
- , 0.0f
- , 1.56f - sceneTimeAccumulator
- , 0.0f
- , 0.0f
- , 2.0f
- , 0.0f
- );
-
- // Columns position.
- const float dist = 14.0f;
- const float columnPositions[4][3] =
- {
- { dist, 0.0f, dist },
- { -dist, 0.0f, dist },
- { dist, 0.0f, -dist },
- { -dist, 0.0f, -dist },
- };
+ ImGui::End();
- float columnMtx[4][16];
- for (uint8_t ii = 0; ii < 4; ++ii)
- {
- bx::mtxSRT(columnMtx[ii]
- , 1.0f
- , 1.0f
- , 1.0f
- , 0.0f
- , 0.0f
- , 0.0f
- , columnPositions[ii][0]
- , columnPositions[ii][1]
- , columnPositions[ii][2]
+ imguiEndFrame();
+
+ s_uniforms.submitConstUniforms();
+
+ // Update settings.
+ uint8_t numLights = (uint8_t)m_numLights;
+ s_uniforms.m_params.m_ambientPass = 1.0f;
+ s_uniforms.m_params.m_lightingPass = 1.0f;
+ s_uniforms.m_params.m_lightCount = float(m_numLights);
+ s_uniforms.m_params.m_lightIndex = 0.0f;
+ s_uniforms.m_color[3] = m_reflectionValue;
+
+ // Time.
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const float time = (float)( (now - m_timeOffset)/double(bx::getHPFrequency() ) );
+ const float deltaTime = float(frameTime/freq);
+ s_uniforms.m_time = time;
+
+ // Update camera.
+ cameraUpdate(deltaTime, m_mouseState);
+ cameraGetViewMtx(m_viewState.m_view);
+
+ static float lightTimeAccumulator = 0.0f;
+ if (m_updateLights)
+ {
+ lightTimeAccumulator += deltaTime;
+ }
+
+ static float sceneTimeAccumulator = 0.0f;
+ if (m_updateScene)
+ {
+ sceneTimeAccumulator += deltaTime;
+ }
+
+ float lightPosRadius[MAX_NUM_LIGHTS][4];
+ const float radius = (m_scene == StencilReflectionScene) ? 15.0f : 25.0f;
+ for (uint8_t ii = 0; ii < numLights; ++ii)
+ {
+ lightPosRadius[ii][0] = bx::fsin( (lightTimeAccumulator*1.1f + ii*0.03f + ii*bx::kPiHalf*1.07f ) )*20.0f;
+ lightPosRadius[ii][1] = 8.0f + (1.0f - bx::fcos( (lightTimeAccumulator*1.5f + ii*0.29f + bx::kPiHalf*1.49f ) ) )*4.0f;
+ lightPosRadius[ii][2] = bx::fcos( (lightTimeAccumulator*1.3f + ii*0.13f + ii*bx::kPiHalf*1.79f ) )*20.0f;
+ lightPosRadius[ii][3] = radius;
+ }
+ bx::memCopy(s_uniforms.m_lightPosRadius, lightPosRadius, numLights * 4*sizeof(float) );
+
+ // Floor position.
+ float floorMtx[16];
+ bx::mtxSRT(floorMtx
+ , 20.0f //scaleX
+ , 20.0f //scaleY
+ , 20.0f //scaleZ
+ , 0.0f //rotX
+ , 0.0f //rotY
+ , 0.0f //rotZ
+ , 0.0f //translateX
+ , 0.0f //translateY
+ , 0.0f //translateZ
);
- }
- const uint8_t numCubes = 9;
- float cubeMtx[numCubes][16];
- for (uint16_t ii = 0; ii < numCubes; ++ii)
- {
- bx::mtxSRT(cubeMtx[ii]
- , 1.0f
- , 1.0f
- , 1.0f
+ // Bunny position.
+ float bunnyMtx[16];
+ bx::mtxSRT(bunnyMtx
+ , 5.0f
+ , 5.0f
+ , 5.0f
, 0.0f
+ , 1.56f - sceneTimeAccumulator
, 0.0f
, 0.0f
- , bx::fsin(ii * 2.0f + 13.0f - sceneTimeAccumulator) * 13.0f
- , 4.0f
- , bx::fcos(ii * 2.0f + 13.0f - sceneTimeAccumulator) * 13.0f
+ , 2.0f
+ , 0.0f
);
- }
-
- // Make sure at the beginning everything gets cleared.
- clearView(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL, clearValues);
- bgfx::touch(0);
- s_viewMask |= 1;
- // Bunny and columns color.
- s_uniforms.m_color[0] = 0.70f;
- s_uniforms.m_color[1] = 0.65f;
- s_uniforms.m_color[2] = 0.60f;
-
- switch (scene)
- {
- case StencilReflectionScene:
+ // Columns position.
+ const float dist = 14.0f;
+ const float columnPositions[4][3] =
{
- // First pass - Draw plane.
-
- // Setup params for this scene.
- s_uniforms.m_params.m_ambientPass = 1.0f;
- s_uniforms.m_params.m_lightingPass = 1.0f;
-
- // Floor.
- hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_0
- , floorMtx
- , programColorBlack
- , s_renderStates[RenderState::StencilReflection_CraftStencil]
+ { dist, 0.0f, dist },
+ { -dist, 0.0f, dist },
+ { dist, 0.0f, -dist },
+ { -dist, 0.0f, -dist },
+ };
+
+ float columnMtx[4][16];
+ for (uint8_t ii = 0; ii < 4; ++ii)
+ {
+ bx::mtxSRT(columnMtx[ii]
+ , 1.0f
+ , 1.0f
+ , 1.0f
+ , 0.0f
+ , 0.0f
+ , 0.0f
+ , columnPositions[ii][0]
+ , columnPositions[ii][1]
+ , columnPositions[ii][2]
);
+ }
- // Second pass - Draw reflected objects.
+ const uint8_t numCubes = 9;
+ float cubeMtx[numCubes][16];
+ for (uint16_t ii = 0; ii < numCubes; ++ii)
+ {
+ bx::mtxSRT(cubeMtx[ii]
+ , 1.0f
+ , 1.0f
+ , 1.0f
+ , 0.0f
+ , 0.0f
+ , 0.0f
+ , bx::fsin(ii * 2.0f + 13.0f - sceneTimeAccumulator) * 13.0f
+ , 4.0f
+ , bx::fcos(ii * 2.0f + 13.0f - sceneTimeAccumulator) * 13.0f
+ );
+ }
- // Clear depth from previous pass.
- clearView(RENDER_VIEWID_RANGE1_PASS_1, BGFX_CLEAR_DEPTH, clearValues);
+ // Make sure at the beginning everything gets cleared.
+ clearView(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL, m_clearValues);
+ bgfx::touch(0);
+ s_viewMask |= 1;
- // Compute reflected matrix.
- float reflectMtx[16];
- float plane_pos[3] = { 0.0f, 0.01f, 0.0f };
- float normal[3] = { 0.0f, 1.0f, 0.0f };
- mtxReflected(reflectMtx, plane_pos, normal);
+ // Bunny and columns color.
+ s_uniforms.m_color[0] = 0.70f;
+ s_uniforms.m_color[1] = 0.65f;
+ s_uniforms.m_color[2] = 0.60f;
- // Reflect lights.
- float reflectedLights[MAX_NUM_LIGHTS][4];
- for (uint8_t ii = 0; ii < numLights; ++ii)
+ switch (m_scene)
+ {
+ case StencilReflectionScene:
{
- bx::vec3MulMtx(reflectedLights[ii], lightPosRadius[ii], reflectMtx);
- reflectedLights[ii][3] = lightPosRadius[ii][3];
- }
- bx::memCopy(s_uniforms.m_lightPosRadius, reflectedLights, numLights * 4*sizeof(float) );
-
- // Reflect and submit bunny.
- float mtxReflectedBunny[16];
- bx::mtxMul(mtxReflectedBunny, bunnyMtx, reflectMtx);
- bunnyMesh.submit(RENDER_VIEWID_RANGE1_PASS_1
- , mtxReflectedBunny
- , programColorLighting
- , s_renderStates[RenderState::StencilReflection_DrawReflected]
- );
+ // First pass - Draw plane.
- // Reflect and submit columns.
- float mtxReflectedColumn[16];
- for (uint8_t ii = 0; ii < 4; ++ii)
- {
- bx::mtxMul(mtxReflectedColumn, columnMtx[ii], reflectMtx);
- columnMesh.submit(RENDER_VIEWID_RANGE1_PASS_1
- , mtxReflectedColumn
- , programColorLighting
- , s_renderStates[RenderState::StencilReflection_DrawReflected]
- );
- }
+ // Setup params for this scene.
+ s_uniforms.m_params.m_ambientPass = 1.0f;
+ s_uniforms.m_params.m_lightingPass = 1.0f;
- // Set lights back.
- bx::memCopy(s_uniforms.m_lightPosRadius, lightPosRadius, numLights * 4*sizeof(float) );
- // Third pass - Blend plane.
+ // Floor.
+ m_hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_0
+ , floorMtx
+ , m_programColorBlack
+ , s_renderStates[RenderState::StencilReflection_CraftStencil]
+ );
- // Floor.
- hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_2
- , floorMtx
- , programTextureLighting
- , s_renderStates[RenderState::StencilReflection_BlendPlane]
- , fieldstoneTex
- );
+ // Second pass - Draw reflected objects.
- // Fourth pass - Draw everything else but the plane.
+ // Clear depth from previous pass.
+ clearView(RENDER_VIEWID_RANGE1_PASS_1, BGFX_CLEAR_DEPTH, m_clearValues);
- // Bunny.
- bunnyMesh.submit(RENDER_VIEWID_RANGE1_PASS_3
- , bunnyMtx
- , programColorLighting
- , s_renderStates[RenderState::StencilReflection_DrawScene]
- );
+ // Compute reflected matrix.
+ float reflectMtx[16];
+ float plane_pos[3] = { 0.0f, 0.01f, 0.0f };
+ float normal[3] = { 0.0f, 1.0f, 0.0f };
+ mtxReflected(reflectMtx, plane_pos, normal);
- // Columns.
- for (uint8_t ii = 0; ii < 4; ++ii)
- {
- columnMesh.submit(RENDER_VIEWID_RANGE1_PASS_3
- , columnMtx[ii]
- , programColorLighting
- , s_renderStates[RenderState::StencilReflection_DrawScene]
+ // Reflect lights.
+ float reflectedLights[MAX_NUM_LIGHTS][4];
+ for (uint8_t ii = 0; ii < numLights; ++ii)
+ {
+ bx::vec3MulMtx(reflectedLights[ii], lightPosRadius[ii], reflectMtx);
+ reflectedLights[ii][3] = lightPosRadius[ii][3];
+ }
+ bx::memCopy(s_uniforms.m_lightPosRadius, reflectedLights, numLights * 4*sizeof(float) );
+
+ // Reflect and submit bunny.
+ float mtxReflectedBunny[16];
+ bx::mtxMul(mtxReflectedBunny, bunnyMtx, reflectMtx);
+ m_bunnyMesh.submit(RENDER_VIEWID_RANGE1_PASS_1
+ , mtxReflectedBunny
+ , m_programColorLighting
+ , s_renderStates[RenderState::StencilReflection_DrawReflected]
);
- }
-
- }
- break;
- case ProjectionShadowsScene:
- {
- // First pass - Draw entire scene. (ambient only).
- s_uniforms.m_params.m_ambientPass = 1.0f;
- s_uniforms.m_params.m_lightingPass = 0.0f;
-
- // Bunny.
- bunnyMesh.submit(RENDER_VIEWID_RANGE1_PASS_0
- , bunnyMtx
- , programColorLighting
- , s_renderStates[RenderState::ProjectionShadows_DrawAmbient]
- );
+ // Reflect and submit columns.
+ float mtxReflectedColumn[16];
+ for (uint8_t ii = 0; ii < 4; ++ii)
+ {
+ bx::mtxMul(mtxReflectedColumn, columnMtx[ii], reflectMtx);
+ m_columnMesh.submit(RENDER_VIEWID_RANGE1_PASS_1
+ , mtxReflectedColumn
+ , m_programColorLighting
+ , s_renderStates[RenderState::StencilReflection_DrawReflected]
+ );
+ }
- // Floor.
- hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_0
- , floorMtx
- , programTextureLighting
- , s_renderStates[RenderState::ProjectionShadows_DrawAmbient]
- , fieldstoneTex
- );
+ // Set lights back.
+ bx::memCopy(s_uniforms.m_lightPosRadius, lightPosRadius, numLights * 4*sizeof(float) );
+ // Third pass - Blend plane.
- // Cubes.
- for (uint8_t ii = 0; ii < numCubes; ++ii)
- {
- cubeMesh.submit(RENDER_VIEWID_RANGE1_PASS_0
- , cubeMtx[ii]
- , programTextureLighting
- , s_renderStates[RenderState::ProjectionShadows_DrawAmbient]
- , figureTex
+ // Floor.
+ m_hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_2
+ , floorMtx
+ , m_programTextureLighting
+ , s_renderStates[RenderState::StencilReflection_BlendPlane]
+ , m_fieldstoneTex
);
- }
- // Ground plane.
- float ground[4];
- float plane_pos[3] = { 0.0f, 0.0f, 0.0f };
- float normal[3] = { 0.0f, 1.0f, 0.0f };
- bx::memCopy(ground, normal, sizeof(float) * 3);
- ground[3] = -bx::vec3Dot(plane_pos, normal) - 0.01f; // - 0.01 against z-fighting
+ // Fourth pass - Draw everything else but the plane.
- for (uint8_t ii = 0, viewId = RENDER_VIEWID_RANGE5_PASS_6; ii < numLights; ++ii, ++viewId)
- {
- // Clear stencil for this light source.
- clearView(viewId, BGFX_CLEAR_STENCIL, clearValues);
-
- // Draw shadow projection of scene objects.
-
- // Get homogeneous light pos.
- float* lightPos = lightPosRadius[ii];
- float pos[4];
- bx::memCopy(pos, lightPos, sizeof(float) * 3);
- pos[3] = 1.0f;
-
- // Calculate shadow mtx for current light.
- float shadowMtx[16];
- mtxShadow(shadowMtx, ground, pos);
-
- // Submit bunny's shadow.
- float mtxShadowedBunny[16];
- bx::mtxMul(mtxShadowedBunny, bunnyMtx, shadowMtx);
- bunnyMesh.submit(viewId
- , mtxShadowedBunny
- , programColorBlack
- , s_renderStates[RenderState::ProjectionShadows_CraftStencil]
- );
+ // Bunny.
+ m_bunnyMesh.submit(RENDER_VIEWID_RANGE1_PASS_3
+ , bunnyMtx
+ , m_programColorLighting
+ , s_renderStates[RenderState::StencilReflection_DrawScene]
+ );
- // Submit cube shadows.
- float mtxShadowedCube[16];
- for (uint8_t jj = 0; jj < numCubes; ++jj)
+ // Columns.
+ for (uint8_t ii = 0; ii < 4; ++ii)
{
- bx::mtxMul(mtxShadowedCube, cubeMtx[jj], shadowMtx);
- cubeMesh.submit(viewId
- , mtxShadowedCube
- , programColorBlack
- , s_renderStates[RenderState::ProjectionShadows_CraftStencil]
- );
+ m_columnMesh.submit(RENDER_VIEWID_RANGE1_PASS_3
+ , columnMtx[ii]
+ , m_programColorLighting
+ , s_renderStates[RenderState::StencilReflection_DrawScene]
+ );
}
- // Draw entire scene. (lighting pass only. blending is on)
- s_uniforms.m_params.m_ambientPass = 0.0f;
- s_uniforms.m_params.m_lightingPass = 1.0f;
- s_uniforms.m_params.m_lightCount = 1.0f;
- s_uniforms.m_params.m_lightIndex = float(ii);
+ }
+ break;
+
+ case ProjectionShadowsScene:
+ {
+ // First pass - Draw entire scene. (ambient only).
+ s_uniforms.m_params.m_ambientPass = 1.0f;
+ s_uniforms.m_params.m_lightingPass = 0.0f;
// Bunny.
- bunnyMesh.submit(viewId
+ m_bunnyMesh.submit(RENDER_VIEWID_RANGE1_PASS_0
, bunnyMtx
- , programColorLighting
- , s_renderStates[RenderState::ProjectionShadows_DrawDiffuse]
- );
+ , m_programColorLighting
+ , s_renderStates[RenderState::ProjectionShadows_DrawAmbient]
+ );
// Floor.
- hplaneMesh.submit(viewId
+ m_hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_0
, floorMtx
- , programTextureLighting
- , s_renderStates[RenderState::ProjectionShadows_DrawDiffuse]
- , fieldstoneTex
+ , m_programTextureLighting
+ , s_renderStates[RenderState::ProjectionShadows_DrawAmbient]
+ , m_fieldstoneTex
);
// Cubes.
- for (uint8_t jj = 0; jj < numCubes; ++jj)
+ for (uint8_t ii = 0; ii < numCubes; ++ii)
+ {
+ m_cubeMesh.submit(RENDER_VIEWID_RANGE1_PASS_0
+ , cubeMtx[ii]
+ , m_programTextureLighting
+ , s_renderStates[RenderState::ProjectionShadows_DrawAmbient]
+ , m_figureTex
+ );
+ }
+
+ // Ground plane.
+ float ground[4];
+ float plane_pos[3] = { 0.0f, 0.0f, 0.0f };
+ float normal[3] = { 0.0f, 1.0f, 0.0f };
+ bx::memCopy(ground, normal, sizeof(float) * 3);
+ ground[3] = -bx::vec3Dot(plane_pos, normal) - 0.01f; // - 0.01 against z-fighting
+
+ for (uint8_t ii = 0, viewId = RENDER_VIEWID_RANGE5_PASS_6; ii < numLights; ++ii, ++viewId)
{
- cubeMesh.submit(viewId
- , cubeMtx[jj]
- , programTextureLighting
+ // Clear stencil for this light source.
+ clearView(viewId, BGFX_CLEAR_STENCIL, m_clearValues);
+
+ // Draw shadow projection of scene objects.
+
+ // Get homogeneous light pos.
+ float* lightPos = lightPosRadius[ii];
+ float pos[4];
+ bx::memCopy(pos, lightPos, sizeof(float) * 3);
+ pos[3] = 1.0f;
+
+ // Calculate shadow mtx for current light.
+ float shadowMtx[16];
+ mtxShadow(shadowMtx, ground, pos);
+
+ // Submit bunny's shadow.
+ float mtxShadowedBunny[16];
+ bx::mtxMul(mtxShadowedBunny, bunnyMtx, shadowMtx);
+ m_bunnyMesh.submit(viewId
+ , mtxShadowedBunny
+ , m_programColorBlack
+ , s_renderStates[RenderState::ProjectionShadows_CraftStencil]
+ );
+
+ // Submit cube shadows.
+ float mtxShadowedCube[16];
+ for (uint8_t jj = 0; jj < numCubes; ++jj)
+ {
+ bx::mtxMul(mtxShadowedCube, cubeMtx[jj], shadowMtx);
+ m_cubeMesh.submit(viewId
+ , mtxShadowedCube
+ , m_programColorBlack
+ , s_renderStates[RenderState::ProjectionShadows_CraftStencil]
+ );
+ }
+
+ // Draw entire scene. (lighting pass only. blending is on)
+ s_uniforms.m_params.m_ambientPass = 0.0f;
+ s_uniforms.m_params.m_lightingPass = 1.0f;
+ s_uniforms.m_params.m_lightCount = 1.0f;
+ s_uniforms.m_params.m_lightIndex = float(ii);
+
+ // Bunny.
+ m_bunnyMesh.submit(viewId
+ , bunnyMtx
+ , m_programColorLighting
+ , s_renderStates[RenderState::ProjectionShadows_DrawDiffuse]
+ );
+
+ // Floor.
+ m_hplaneMesh.submit(viewId
+ , floorMtx
+ , m_programTextureLighting
, s_renderStates[RenderState::ProjectionShadows_DrawDiffuse]
- , figureTex
+ , m_fieldstoneTex
);
+
+ // Cubes.
+ for (uint8_t jj = 0; jj < numCubes; ++jj)
+ {
+ m_cubeMesh.submit(viewId
+ , cubeMtx[jj]
+ , m_programTextureLighting
+ , s_renderStates[RenderState::ProjectionShadows_DrawDiffuse]
+ , m_figureTex
+ );
+ }
}
+
+ // Reset these to default..
+ s_uniforms.m_params.m_ambientPass = 1.0f;
+ s_uniforms.m_params.m_lightingPass = 1.0f;
}
+ break;
+ };
- // Reset these to default..
- s_uniforms.m_params.m_ambientPass = 1.0f;
- s_uniforms.m_params.m_lightingPass = 1.0f;
+ //lights
+ const float lightScale[3] = { 1.5f, 1.5f, 1.5f };
+ float lightMtx[16];
+ for (uint8_t ii = 0; ii < numLights; ++ii)
+ {
+ s_uniforms.m_color[0] = m_lightRgbInnerR[ii][0];
+ s_uniforms.m_color[1] = m_lightRgbInnerR[ii][1];
+ s_uniforms.m_color[2] = m_lightRgbInnerR[ii][2];
+
+ mtxBillboard(lightMtx, m_viewState.m_view, lightPosRadius[ii], lightScale);
+ m_vplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_7
+ , lightMtx
+ , m_programColorTexture
+ , s_renderStates[RenderState::Custom_BlendLightTexture]
+ , m_flareTex
+ );
}
- break;
- };
- //lights
- const float lightScale[3] = { 1.5f, 1.5f, 1.5f };
- float lightMtx[16];
- for (uint8_t ii = 0; ii < numLights; ++ii)
- {
- s_uniforms.m_color[0] = lightRgbInnerR[ii][0];
- s_uniforms.m_color[1] = lightRgbInnerR[ii][1];
- s_uniforms.m_color[2] = lightRgbInnerR[ii][2];
-
- mtxBillboard(lightMtx, viewState.m_view, lightPosRadius[ii], lightScale);
- vplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_7
- , lightMtx
- , programColorTexture
- , s_renderStates[RenderState::Custom_BlendLightTexture]
- , flareTex
+ // Draw floor bottom.
+ float floorBottomMtx[16];
+ bx::mtxSRT(floorBottomMtx
+ , 20.0f //scaleX
+ , 20.0f //scaleY
+ , 20.0f //scaleZ
+ , 0.0f //rotX
+ , 0.0f //rotY
+ , 0.0f //rotZ
+ , 0.0f //translateX
+ , -0.1f //translateY
+ , 0.0f //translateZ
);
+
+ m_hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_7
+ , floorBottomMtx
+ , m_programTexture
+ , s_renderStates[RenderState::Custom_DrawPlaneBottom]
+ , m_figureTex
+ );
+
+ // Setup view rect and transform for all used views.
+ setViewRectMask(s_viewMask, 0, 0, uint16_t(m_viewState.m_width), uint16_t(m_viewState.m_height) );
+ setViewTransformMask(s_viewMask, m_viewState.m_view, m_viewState.m_proj);
+ s_viewMask = 0;
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ //reset clear values on used views
+ clearViewMask(s_clearMask, BGFX_CLEAR_NONE, m_clearValues);
+ s_clearMask = 0;
+
+ return true;
}
- // Draw floor bottom.
- float floorBottomMtx[16];
- bx::mtxSRT(floorBottomMtx
- , 20.0f //scaleX
- , 20.0f //scaleY
- , 20.0f //scaleZ
- , 0.0f //rotX
- , 0.0f //rotY
- , 0.0f //rotZ
- , 0.0f //translateX
- , -0.1f //translateY
- , 0.0f //translateZ
- );
-
- hplaneMesh.submit(RENDER_VIEWID_RANGE1_PASS_7
- , floorBottomMtx
- , programTexture
- , s_renderStates[RenderState::Custom_DrawPlaneBottom]
- , figureTex
- );
-
- // Setup view rect and transform for all used views.
- setViewRectMask(s_viewMask, 0, 0, uint16_t(viewState.m_width), uint16_t(viewState.m_height) );
- setViewTransformMask(s_viewMask, viewState.m_view, viewState.m_proj);
- s_viewMask = 0;
-
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
-
- //reset clear values on used views
- clearViewMask(s_clearMask, BGFX_CLEAR_NONE, clearValues);
- s_clearMask = 0;
+ return false;
}
- // Cleanup.
- bunnyMesh.unload();
- columnMesh.unload();
- cubeMesh.unload();
- hplaneMesh.unload();
- vplaneMesh.unload();
+ ViewState m_viewState;
+ entry::MouseState m_mouseState;
+ ClearValues m_clearValues;
- bgfx::destroyTexture(figureTex);
- bgfx::destroyTexture(fieldstoneTex);
- bgfx::destroyTexture(flareTex);
+ uint32_t m_debug;
+ uint32_t m_reset;
- bgfx::destroyProgram(programTextureLighting);
- bgfx::destroyProgram(programColorLighting);
- bgfx::destroyProgram(programColorTexture);
- bgfx::destroyProgram(programColorBlack);
- bgfx::destroyProgram(programTexture);
+ bgfx::ProgramHandle m_programTextureLighting;
+ bgfx::ProgramHandle m_programColorLighting;
+ bgfx::ProgramHandle m_programColorTexture;
+ bgfx::ProgramHandle m_programColorBlack;
+ bgfx::ProgramHandle m_programTexture;
- bgfx::destroyUniform(s_texColor);
+ Mesh m_bunnyMesh;
+ Mesh m_columnMesh;
+ Mesh m_cubeMesh;
+ Mesh m_hplaneMesh;
+ Mesh m_vplaneMesh;
- s_uniforms.destroy();
+ bgfx::TextureHandle m_figureTex;
+ bgfx::TextureHandle m_flareTex;
+ bgfx::TextureHandle m_fieldstoneTex;
- cameraDestroy();
- imguiDestroy();
+ float m_lightRgbInnerR[MAX_NUM_LIGHTS][4];
- // Shutdown bgfx.
- bgfx::shutdown();
+ int64_t m_timeOffset;
- return 0;
-}
+ enum Scene
+ {
+ StencilReflectionScene = 0,
+ ProjectionShadowsScene,
+ };
+
+ Scene m_scene;
+ int32_t m_numLights;
+ float m_reflectionValue;
+ bool m_updateLights;
+ bool m_updateScene;
+
+};
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleStencil, "13-stencil", "Stencil reflections and shadows.");
diff --git a/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp b/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp
index 5149e79e33b..d6195526d12 100644
--- a/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp
+++ b/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp
@@ -18,12 +18,20 @@ namespace stl = tinystl;
#include <bx/allocator.h>
#include <bx/hash.h>
#include <bx/simd_t.h>
-#include <bx/fpumath.h>
-#include <bx/crtimpl.h>
+#include <bx/math.h>
+#include <bx/file.h>
#include "entry/entry.h"
#include "camera.h"
#include "imgui/imgui.h"
+namespace bgfx
+{
+ int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
+}
+
+namespace
+{
+
#define SV_USE_SIMD 1
#define MAX_INSTANCE_COUNT 25
#define MAX_LIGHTS_COUNT 5
@@ -33,31 +41,6 @@ namespace stl = tinystl;
#define VIEWID_RANGE15_PASS2 3
#define VIEWID_RANGE1_PASS3 20
-uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w)
-{
- union
- {
- uint32_t ui32;
- uint8_t arr[4];
- } un;
-
- un.arr[0] = _x;
- un.arr[1] = _y;
- un.arr[2] = _z;
- un.arr[3] = _w;
-
- return un.ui32;
-}
-
-uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f)
-{
- const uint8_t xx = uint8_t(_x*127.0f + 128.0f);
- const uint8_t yy = uint8_t(_y*127.0f + 128.0f);
- const uint8_t zz = uint8_t(_z*127.0f + 128.0f);
- const uint8_t ww = uint8_t(_w*127.0f + 128.0f);
- return packUint32(xx, yy, zz, ww);
-}
-
struct PosNormalTexcoordVertex
{
float m_x;
@@ -85,18 +68,18 @@ bgfx::VertexDecl PosNormalTexcoordVertex::ms_decl;
static const float s_texcoord = 50.0f;
static PosNormalTexcoordVertex s_hplaneVertices[] =
{
- { -1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, s_texcoord },
- { 1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, 0.0f },
- { -1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, s_texcoord },
- { 1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, 0.0f },
+ { -1.0f, 0.0f, 1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), s_texcoord, s_texcoord },
+ { 1.0f, 0.0f, 1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), s_texcoord, 0.0f },
+ { -1.0f, 0.0f, -1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), 0.0f, s_texcoord },
+ { 1.0f, 0.0f, -1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), 0.0f, 0.0f },
};
static PosNormalTexcoordVertex s_vplaneVertices[] =
{
- { -1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 1.0f },
- { 1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 0.0f },
- { -1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 1.0f },
- { 1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 0.0f },
+ { -1.0f, 1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 1.0f, 1.0f },
+ { 1.0f, 1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 1.0f, 0.0f },
+ { -1.0f, -1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 0.0f, 1.0f },
+ { 1.0f, -1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 0.0f, 0.0f },
};
static const uint16_t s_planeIndices[] =
@@ -278,16 +261,16 @@ struct Uniforms
void destroy()
{
- bgfx::destroyUniform(u_params);
- bgfx::destroyUniform(u_svparams);
- bgfx::destroyUniform(u_ambient);
- bgfx::destroyUniform(u_diffuse);
- bgfx::destroyUniform(u_specular_shininess);
- bgfx::destroyUniform(u_fog);
- bgfx::destroyUniform(u_color);
- bgfx::destroyUniform(u_lightPosRadius);
- bgfx::destroyUniform(u_lightRgbInnerR);
- bgfx::destroyUniform(u_virtualLightPos_extrusionDist);
+ bgfx::destroy(u_params);
+ bgfx::destroy(u_svparams);
+ bgfx::destroy(u_ambient);
+ bgfx::destroy(u_diffuse);
+ bgfx::destroy(u_specular_shininess);
+ bgfx::destroy(u_fog);
+ bgfx::destroy(u_color);
+ bgfx::destroy(u_lightPosRadius);
+ bgfx::destroy(u_lightRgbInnerR);
+ bgfx::destroy(u_virtualLightPos_extrusionDist);
}
struct Params
@@ -541,7 +524,7 @@ static RenderState s_renderStates[RenderState::Count] =
struct ViewState
{
- ViewState(uint32_t _width = 1280, uint32_t _height = 720)
+ ViewState(uint32_t _width = 0, uint32_t _height = 0)
: m_width(_width)
, m_height(_height)
{
@@ -561,7 +544,7 @@ struct ClearValues
uint8_t m_clearStencil;
};
-void submit(uint8_t _id, bgfx::ProgramHandle _handle, int32_t _depth = 0)
+void submit(bgfx::ViewId _id, bgfx::ProgramHandle _handle, int32_t _depth = 0)
{
bgfx::submit(_id, _handle, _depth);
@@ -569,7 +552,7 @@ void submit(uint8_t _id, bgfx::ProgramHandle _handle, int32_t _depth = 0)
s_viewMask |= 1 << _id;
}
-void touch(uint8_t _id)
+void touch(bgfx::ViewId _id)
{
bgfx::ProgramHandle handle = BGFX_INVALID_HANDLE;
::submit(_id, handle);
@@ -765,7 +748,7 @@ uint16_t weldVertices(WeldedVertex* _output, const bgfx::VertexDecl& _decl, cons
{
float pos[4];
vertexUnpack(pos, bgfx::Attrib::Position, _decl, _data, ii);
- uint32_t hashValue = bx::hashMurmur2A(pos, 3*sizeof(float) ) & hashMask;
+ uint32_t hashValue = bx::hash<bx::HashMurmur2A>(pos, 3*sizeof(float) ) & hashMask;
uint16_t offset = hashTable[hashValue];
for (; UINT16_MAX != offset; offset = next[offset])
@@ -803,8 +786,8 @@ struct Group
void reset()
{
- m_vbh.idx = bgfx::invalidHandle;
- m_ibh.idx = bgfx::invalidHandle;
+ m_vbh.idx = bgfx::kInvalidHandle;
+ m_ibh.idx = bgfx::kInvalidHandle;
m_numVertices = 0;
m_vertices = NULL;
m_numIndices = 0;
@@ -945,10 +928,10 @@ struct Group
void unload()
{
- bgfx::destroyVertexBuffer(m_vbh);
- if (bgfx::invalidHandle != m_ibh.idx)
+ bgfx::destroy(m_vbh);
+ if (bgfx::kInvalidHandle != m_ibh.idx)
{
- bgfx::destroyIndexBuffer(m_ibh);
+ bgfx::destroy(m_ibh);
}
free(m_vertices);
m_vertices = NULL;
@@ -981,11 +964,6 @@ struct Group
typedef std::vector<Group> GroupArray;
-namespace bgfx
-{
- int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
-}
-
struct Mesh
{
void load(const void* _vertices, uint16_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices)
@@ -1133,8 +1111,8 @@ struct Model
{
Model()
{
- m_program.idx = bgfx::invalidHandle;
- m_texture.idx = bgfx::invalidHandle;
+ m_program.idx = bgfx::kInvalidHandle;
+ m_texture.idx = bgfx::kInvalidHandle;
}
void load(const void* _vertices, uint16_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices)
@@ -1166,10 +1144,10 @@ struct Model
// Set buffers
bgfx::setIndexBuffer(group.m_ibh);
- bgfx::setVertexBuffer(group.m_vbh);
+ bgfx::setVertexBuffer(0, group.m_vbh);
// Set textures
- if (bgfx::invalidHandle != m_texture.idx)
+ if (bgfx::kInvalidHandle != m_texture.idx)
{
bgfx::setTexture(0, s_texColor, m_texture);
}
@@ -1179,7 +1157,7 @@ struct Model
::setRenderState(_renderState);
// Submit
- BX_CHECK(bgfx::invalidHandle != m_program, "Error, program is not set.");
+ BX_CHECK(bgfx::kInvalidHandle != m_program, "Error, program is not set.");
::submit(_viewId, m_program);
}
}
@@ -1683,8 +1661,8 @@ void shadowVolumeCreate(ShadowVolume& _shadowVolume
// bgfx::destroy*Buffer doesn't actually destroy buffers now.
// Instead, these bgfx::destroy*Buffer commands get queued to be executed after the end of the next frame.
- bgfx::destroyVertexBuffer(_shadowVolume.m_vbSides);
- bgfx::destroyIndexBuffer(_shadowVolume.m_ibSides);
+ bgfx::destroy(_shadowVolume.m_vbSides);
+ bgfx::destroy(_shadowVolume.m_ibSides);
if (cap)
{
@@ -1694,7 +1672,7 @@ void shadowVolumeCreate(ShadowVolume& _shadowVolume
_shadowVolume.m_ibFrontCap = bgfx::createIndexBuffer(mem);
//gets destroyed after the end of the next frame
- bgfx::destroyIndexBuffer(_shadowVolume.m_ibFrontCap);
+ bgfx::destroy(_shadowVolume.m_ibFrontCap);
//back cap
isize = backCapI * sizeof(uint16_t);
@@ -1702,7 +1680,7 @@ void shadowVolumeCreate(ShadowVolume& _shadowVolume
_shadowVolume.m_ibBackCap = bgfx::createIndexBuffer(mem);
//gets destroyed after the end of the next frame
- bgfx::destroyIndexBuffer(_shadowVolume.m_ibBackCap);
+ bgfx::destroy(_shadowVolume.m_ibBackCap);
}
}
@@ -1844,804 +1822,875 @@ bool clipTest(const float* _planes, uint8_t _planeNum, const Mesh& _mesh, const
return false;
}
-int _main_(int _argc, char** _argv)
+struct ShadowVolumeProgramType
{
- Args args(_argc, _argv);
-
- ViewState viewState(1280, 720);
- ClearValues clearValues = {0x00000000, 1.0f, 0};
+ enum Enum
+ {
+ Blank = 0,
+ Color,
+ Tex1,
+ Tex2,
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ Count
+ };
+};
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(viewState.m_width, viewState.m_height, reset);
+struct ShadowVolumePart
+{
+ enum Enum
+ {
+ Back = 0,
+ Side,
+ Front,
- // Enable debug text.
- bgfx::setDebug(debug);
+ Count
+ };
+};
- const bgfx::Caps* caps = bgfx::getCaps();
- s_oglNdc = caps->homogeneousDepth;
- s_texelHalf = bgfx::RendererType::Direct3D9 == caps->rendererType ? 0.5f : 0.0f;
+enum LightPattern
+{
+ LightPattern0 = 0,
+ LightPattern1
+};
- // Imgui
- imguiCreate();
+enum MeshChoice
+{
+ BunnyHighPoly = 0,
+ BunnyLowPoly
+};
- PosNormalTexcoordVertex::init();
+enum Scene
+{
+ Scene0 = 0,
+ Scene1,
- s_uniforms.init();
- s_uniforms.submitConstUniforms();
+ SceneCount
+};
- bgfx::TextureHandle figureTex = loadTexture("textures/figure-rgba.dds");
- bgfx::TextureHandle flareTex = loadTexture("textures/flare.dds");
- bgfx::TextureHandle fieldstoneTex = loadTexture("textures/fieldstone-rgba.dds");
+class ExampleShadowVolumes : public entry::AppI
+{
+public:
+ ExampleShadowVolumes(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
- bgfx::TextureHandle fbtextures[] =
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
- bgfx::createTexture2D(uint16_t(viewState.m_width), uint16_t(viewState.m_height), false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP | BGFX_TEXTURE_RT),
- bgfx::createTexture2D(uint16_t(viewState.m_width), uint16_t(viewState.m_height), false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY),
- };
- s_stencilFb = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
+ Args args(_argc, _argv);
- s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
- s_texStencil = bgfx::createUniform("s_texStencil", bgfx::UniformType::Int1);
+ m_viewState = ViewState(_width, _height);
+ m_clearValues = { 0x00000000, 1.0f, 0 };
- bgfx::ProgramHandle programTextureLighting = loadProgram("vs_shadowvolume_texture_lighting", "fs_shadowvolume_texture_lighting");
- bgfx::ProgramHandle programColorLighting = loadProgram("vs_shadowvolume_color_lighting", "fs_shadowvolume_color_lighting" );
- bgfx::ProgramHandle programColorTexture = loadProgram("vs_shadowvolume_color_texture", "fs_shadowvolume_color_texture" );
- bgfx::ProgramHandle programTexture = loadProgram("vs_shadowvolume_texture", "fs_shadowvolume_texture" );
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
- bgfx::ProgramHandle programBackBlank = loadProgram("vs_shadowvolume_svback", "fs_shadowvolume_svbackblank" );
- bgfx::ProgramHandle programSideBlank = loadProgram("vs_shadowvolume_svside", "fs_shadowvolume_svsideblank" );
- bgfx::ProgramHandle programFrontBlank = loadProgram("vs_shadowvolume_svfront", "fs_shadowvolume_svfrontblank");
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_viewState.m_width, m_viewState.m_height, m_reset);
- bgfx::ProgramHandle programBackColor = loadProgram("vs_shadowvolume_svback", "fs_shadowvolume_svbackcolor" );
- bgfx::ProgramHandle programSideColor = loadProgram("vs_shadowvolume_svside", "fs_shadowvolume_svsidecolor" );
- bgfx::ProgramHandle programFrontColor = loadProgram("vs_shadowvolume_svfront", "fs_shadowvolume_svfrontcolor");
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- bgfx::ProgramHandle programSideTex = loadProgram("vs_shadowvolume_svside", "fs_shadowvolume_svsidetex" );
- bgfx::ProgramHandle programBackTex1 = loadProgram("vs_shadowvolume_svback", "fs_shadowvolume_svbacktex1" );
- bgfx::ProgramHandle programBackTex2 = loadProgram("vs_shadowvolume_svback", "fs_shadowvolume_svbacktex2" );
- bgfx::ProgramHandle programFrontTex1 = loadProgram("vs_shadowvolume_svfront", "fs_shadowvolume_svfronttex1" );
- bgfx::ProgramHandle programFrontTex2 = loadProgram("vs_shadowvolume_svfront", "fs_shadowvolume_svfronttex2" );
+ const bgfx::Caps* caps = bgfx::getCaps();
+ s_oglNdc = caps->homogeneousDepth;
+ s_texelHalf = bgfx::RendererType::Direct3D9 == caps->rendererType ? 0.5f : 0.0f;
- struct ShadowVolumeProgramType
- {
- enum Enum
- {
- Blank = 0,
- Color,
- Tex1,
- Tex2,
+ // Imgui
+ imguiCreate();
- Count
- };
- };
+ PosNormalTexcoordVertex::init();
- struct ShadowVolumePart
- {
- enum Enum
- {
- Back = 0,
- Side,
- Front,
+ s_uniforms.init();
+
+ m_figureTex = loadTexture("textures/figure-rgba.dds");
+ m_flareTex = loadTexture("textures/flare.dds");
+ m_fieldstoneTex = loadTexture("textures/fieldstone-rgba.dds");
- Count
+ bgfx::TextureHandle fbtextures[] =
+ {
+ bgfx::createTexture2D(uint16_t(m_viewState.m_width), uint16_t(m_viewState.m_height), false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP | BGFX_TEXTURE_RT),
+ bgfx::createTexture2D(uint16_t(m_viewState.m_width), uint16_t(m_viewState.m_height), false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY),
};
- };
- bgfx::ProgramHandle svProgs[ShadowVolumeProgramType::Count][ShadowVolumePart::Count] =
- {
- { programBackBlank, programSideBlank, programFrontBlank }, // Blank
- { programBackColor, programSideColor, programFrontColor }, // Color
- { programBackTex1, programSideTex, programFrontTex1 }, // Tex1
- { programBackTex2, programSideTex, programFrontTex2 }, // Tex2
- };
+ s_stencilFb = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
- Model bunnyLowPolyModel;
- Model bunnyHighPolyModel;
- Model columnModel;
- Model platformModel;
- Model cubeModel;
- Model hplaneFieldModel;
- Model hplaneFigureModel;
- Model vplaneModel;
+ s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
+ s_texStencil = bgfx::createUniform("s_texStencil", bgfx::UniformType::Int1);
- bunnyHighPolyModel.load("meshes/bunny_patched.bin");
- bunnyHighPolyModel.m_program = programColorLighting;
+ m_programTextureLighting = loadProgram("vs_shadowvolume_texture_lighting", "fs_shadowvolume_texture_lighting");
+ m_programColorLighting = loadProgram("vs_shadowvolume_color_lighting", "fs_shadowvolume_color_lighting" );
+ m_programColorTexture = loadProgram("vs_shadowvolume_color_texture", "fs_shadowvolume_color_texture" );
+ m_programTexture = loadProgram("vs_shadowvolume_texture", "fs_shadowvolume_texture" );
- bunnyLowPolyModel.load("meshes/bunny_decimated.bin");
- bunnyLowPolyModel.m_program = programColorLighting;
+ m_programBackBlank = loadProgram("vs_shadowvolume_svback", "fs_shadowvolume_svbackblank" );
+ m_programSideBlank = loadProgram("vs_shadowvolume_svside", "fs_shadowvolume_svsideblank" );
+ m_programFrontBlank = loadProgram("vs_shadowvolume_svfront", "fs_shadowvolume_svfrontblank");
- columnModel.load("meshes/column.bin");
- columnModel.m_program = programColorLighting;
+ m_programBackColor = loadProgram("vs_shadowvolume_svback", "fs_shadowvolume_svbackcolor" );
+ m_programSideColor = loadProgram("vs_shadowvolume_svside", "fs_shadowvolume_svsidecolor" );
+ m_programFrontColor = loadProgram("vs_shadowvolume_svfront", "fs_shadowvolume_svfrontcolor");
- platformModel.load("meshes/platform.bin");
- platformModel.m_program = programTextureLighting;
- platformModel.m_texture = figureTex;
+ m_programSideTex = loadProgram("vs_shadowvolume_svside", "fs_shadowvolume_svsidetex" );
+ m_programBackTex1 = loadProgram("vs_shadowvolume_svback", "fs_shadowvolume_svbacktex1" );
+ m_programBackTex2 = loadProgram("vs_shadowvolume_svback", "fs_shadowvolume_svbacktex2" );
+ m_programFrontTex1 = loadProgram("vs_shadowvolume_svfront", "fs_shadowvolume_svfronttex1" );
+ m_programFrontTex2 = loadProgram("vs_shadowvolume_svfront", "fs_shadowvolume_svfronttex2" );
- cubeModel.load("meshes/cube.bin");
- cubeModel.m_program = programTextureLighting;
- cubeModel.m_texture = figureTex;
+ bgfx::ProgramHandle svProgs[ShadowVolumeProgramType::Count][ShadowVolumePart::Count] =
+ {
+ { m_programBackBlank, m_programSideBlank, m_programFrontBlank }, // Blank
+ { m_programBackColor, m_programSideColor, m_programFrontColor }, // Color
+ { m_programBackTex1, m_programSideTex, m_programFrontTex1 }, // Tex1
+ { m_programBackTex2, m_programSideTex, m_programFrontTex2 }, // Tex2
+ };
+ bx::memCopy(m_svProgs, svProgs, sizeof(svProgs));
- hplaneFieldModel.load(s_hplaneVertices, BX_COUNTOF(s_hplaneVertices), PosNormalTexcoordVertex::ms_decl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
- hplaneFieldModel.m_program = programTextureLighting;
- hplaneFieldModel.m_texture = fieldstoneTex;
+ m_bunnyHighPolyModel.load("meshes/bunny_patched.bin");
+ m_bunnyHighPolyModel.m_program = m_programColorLighting;
- hplaneFigureModel.load(s_hplaneVertices, BX_COUNTOF(s_hplaneVertices), PosNormalTexcoordVertex::ms_decl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
- hplaneFigureModel.m_program = programTextureLighting;
- hplaneFigureModel.m_texture = figureTex;
+ m_bunnyLowPolyModel.load("meshes/bunny_decimated.bin");
+ m_bunnyLowPolyModel.m_program = m_programColorLighting;
- vplaneModel.load(s_vplaneVertices, BX_COUNTOF(s_vplaneVertices), PosNormalTexcoordVertex::ms_decl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
- vplaneModel.m_program = programColorTexture;
- vplaneModel.m_texture = flareTex;
+ m_columnModel.load("meshes/column.bin");
+ m_columnModel.m_program = m_programColorLighting;
- // Setup lights.
- const float rgbInnerR[MAX_LIGHTS_COUNT][4] =
- {
- { 1.0f, 0.7f, 0.2f, 0.0f }, //yellow
- { 0.7f, 0.2f, 1.0f, 0.0f }, //purple
- { 0.2f, 1.0f, 0.7f, 0.0f }, //cyan
- { 1.0f, 0.4f, 0.2f, 0.0f }, //orange
- { 0.7f, 0.7f, 0.7f, 0.0f }, //white
- };
+ m_platformModel.load("meshes/platform.bin");
+ m_platformModel.m_program = m_programTextureLighting;
+ m_platformModel.m_texture = m_figureTex;
- float lightRgbInnerR[MAX_LIGHTS_COUNT][4];
- for (uint8_t ii = 0, jj = 0; ii < MAX_LIGHTS_COUNT; ++ii, ++jj)
- {
- const uint8_t index = jj%MAX_LIGHTS_COUNT;
- lightRgbInnerR[ii][0] = rgbInnerR[index][0];
- lightRgbInnerR[ii][1] = rgbInnerR[index][1];
- lightRgbInnerR[ii][2] = rgbInnerR[index][2];
- lightRgbInnerR[ii][3] = rgbInnerR[index][3];
- }
+ m_cubeModel.load("meshes/cube.bin");
+ m_cubeModel.m_program = m_programTextureLighting;
+ m_cubeModel.m_texture = m_figureTex;
- int64_t profTime = 0;
- int64_t timeOffset = bx::getHPCounter();
-
- uint32_t numShadowVolumeVertices = 0;
- uint32_t numShadowVolumeIndices = 0;
-
- uint32_t oldWidth = 0;
- uint32_t oldHeight = 0;
-
- // Imgui.
- bool settings_showHelp = false;
- bool settings_updateLights = true;
- bool settings_updateScene = true;
- bool settings_mixedSvImpl = true;
- bool settings_useStencilTexture = false;
- bool settings_drawShadowVolumes = false;
- float settings_numLights = 1.0f;
- float settings_instanceCount = 9.0f;
- ShadowVolumeImpl::Enum settings_shadowVolumeImpl = ShadowVolumeImpl::DepthFail;
- ShadowVolumeAlgorithm::Enum settings_shadowVolumeAlgorithm = ShadowVolumeAlgorithm::EdgeBased;
- int32_t scrollAreaRight = 0;
-
- const char* titles[2] =
- {
- "Scene 0",
- "Scene 1",
- };
+ m_hplaneFieldModel.load(s_hplaneVertices
+ , BX_COUNTOF(s_hplaneVertices)
+ , PosNormalTexcoordVertex::ms_decl
+ , s_planeIndices
+ , BX_COUNTOF(s_planeIndices)
+ );
+ m_hplaneFieldModel.m_program = m_programTextureLighting;
+ m_hplaneFieldModel.m_texture = m_fieldstoneTex;
+
+ m_hplaneFigureModel.load(s_hplaneVertices
+ , BX_COUNTOF(s_hplaneVertices)
+ , PosNormalTexcoordVertex::ms_decl
+ , s_planeIndices
+ , BX_COUNTOF(s_planeIndices)
+ );
+ m_hplaneFigureModel.m_program = m_programTextureLighting;
+ m_hplaneFigureModel.m_texture = m_figureTex;
+
+ m_vplaneModel.load(s_vplaneVertices
+ , BX_COUNTOF(s_vplaneVertices)
+ , PosNormalTexcoordVertex::ms_decl
+ , s_planeIndices
+ , BX_COUNTOF(s_planeIndices)
+ );
+ m_vplaneModel.m_program = m_programColorTexture;
+ m_vplaneModel.m_texture = m_flareTex;
- enum LightPattern
- {
- LightPattern0 = 0,
- LightPattern1
- };
+ // Setup lights.
+ const float rgbInnerR[MAX_LIGHTS_COUNT][4] =
+ {
+ { 1.0f, 0.7f, 0.2f, 0.0f }, //yellow
+ { 0.7f, 0.2f, 1.0f, 0.0f }, //purple
+ { 0.2f, 1.0f, 0.7f, 0.0f }, //cyan
+ { 1.0f, 0.4f, 0.2f, 0.0f }, //orange
+ { 0.7f, 0.7f, 0.7f, 0.0f }, //white
+ };
- enum MeshChoice
- {
- BunnyHighPoly = 0,
- BunnyLowPoly
- };
+ for (uint8_t ii = 0, jj = 0; ii < MAX_LIGHTS_COUNT; ++ii, ++jj)
+ {
+ const uint8_t index = jj%MAX_LIGHTS_COUNT;
+ m_lightRgbInnerR[ii][0] = rgbInnerR[index][0];
+ m_lightRgbInnerR[ii][1] = rgbInnerR[index][1];
+ m_lightRgbInnerR[ii][2] = rgbInnerR[index][2];
+ m_lightRgbInnerR[ii][3] = rgbInnerR[index][3];
+ }
+
+ m_profTime = 0;
+ m_timeOffset = bx::getHPCounter();
+
+ m_numShadowVolumeVertices = 0;
+ m_numShadowVolumeIndices = 0;
+
+ m_oldWidth = 0;
+ m_oldHeight = 0;
+
+ // Imgui.
+ m_showHelp = false;
+ m_updateLights = true;
+ m_updateScene = true;
+ m_mixedSvImpl = true;
+ m_useStencilTexture = false;
+ m_drawShadowVolumes = false;
+ m_numLights = 1;
+ m_instanceCount = 9;
+ m_shadowVolumeImpl = ShadowVolumeImpl::DepthFail;
+ m_shadowVolumeAlgorithm = ShadowVolumeAlgorithm::EdgeBased;
+
+ m_lightPattern = LightPattern0;
+ m_currentMesh = BunnyLowPoly;
+ m_currentScene = Scene0;
+
+ // Set view matrix
+ cameraCreate();
+ float initialPos[3] = { 3.0f, 20.0f, -58.0f };
+ cameraSetPosition(initialPos);
+ cameraSetVerticalAngle(-0.25f);
+ cameraGetViewMtx(m_viewState.m_view);
+ }
- enum Scene
+ virtual int shutdown() override
{
- Scene0 = 0,
- Scene1,
+ // Cleanup
+ m_bunnyLowPolyModel.unload();
+ m_bunnyHighPolyModel.unload();
+ m_columnModel.unload();
+ m_cubeModel.unload();
+ m_platformModel.unload();
+ m_hplaneFieldModel.unload();
+ m_hplaneFigureModel.unload();
+ m_vplaneModel.unload();
+
+ s_uniforms.destroy();
+
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(s_texStencil);
+ bgfx::destroy(s_stencilFb);
+
+ bgfx::destroy(m_figureTex);
+ bgfx::destroy(m_fieldstoneTex);
+ bgfx::destroy(m_flareTex);
+
+ bgfx::destroy(m_programTextureLighting);
+ bgfx::destroy(m_programColorLighting);
+ bgfx::destroy(m_programColorTexture);
+ bgfx::destroy(m_programTexture);
+
+ bgfx::destroy(m_programBackBlank);
+ bgfx::destroy(m_programSideBlank);
+ bgfx::destroy(m_programFrontBlank);
+ bgfx::destroy(m_programBackColor);
+ bgfx::destroy(m_programSideColor);
+ bgfx::destroy(m_programFrontColor);
+ bgfx::destroy(m_programSideTex);
+ bgfx::destroy(m_programBackTex1);
+ bgfx::destroy(m_programBackTex2);
+ bgfx::destroy(m_programFrontTex1);
+ bgfx::destroy(m_programFrontTex2);
+
+ cameraDestroy();
+ imguiDestroy();
+
+ // Shutdown bgfx.
+ bgfx::shutdown();
+
+ return 0;
+ }
- SceneCount
- };
+ bool update() override
+ {
+ if (!entry::processEvents(m_viewState.m_width, m_viewState.m_height, m_debug, m_reset, &m_mouseState) )
+ {
+ s_uniforms.submitConstUniforms();
- LightPattern lightPattern = LightPattern0;
- MeshChoice currentMesh = BunnyLowPoly;
- Scene currentScene = Scene0;
+ // Set projection matrices.
+ const float fov = 60.0f;
+ const float aspect = float(m_viewState.m_width)/float(m_viewState.m_height);
+ const float nearPlane = 1.0f;
+ const float farPlane = 1000.0f;
- // Set view and projection matrices.
- const float fov = 60.0f;
- const float aspect = float(viewState.m_width)/float(viewState.m_height);
- const float nearPlane = 1.0f;
- const float farPlane = 1000.0f;
+ // Respond properly on resize.
+ if (m_oldWidth != m_viewState.m_width
+ || m_oldHeight != m_viewState.m_height)
+ {
+ m_oldWidth = m_viewState.m_width;
+ m_oldHeight = m_viewState.m_height;
- float initialPos[3] = { 3.0f, 20.0f, -58.0f };
- cameraCreate();
- cameraSetPosition(initialPos);
- cameraSetVerticalAngle(-0.25f);
- cameraGetViewMtx(viewState.m_view);
+ bgfx::destroy(s_stencilFb);
- entry::MouseState mouseState;
- while (!entry::processEvents(viewState.m_width, viewState.m_height, debug, reset, &mouseState) )
- {
- // Respond properly on resize.
- if (oldWidth != viewState.m_width
- || oldHeight != viewState.m_height)
- {
- oldWidth = viewState.m_width;
- oldHeight = viewState.m_height;
+ bgfx::TextureHandle fbtextures[] =
+ {
+ bgfx::createTexture2D(uint16_t(m_viewState.m_width), uint16_t(m_viewState.m_height), false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_RT),
+ bgfx::createTexture2D(uint16_t(m_viewState.m_width), uint16_t(m_viewState.m_height), false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY)
+ };
+ s_stencilFb = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
+ }
- bgfx::destroyFrameBuffer(s_stencilFb);
+ // Time.
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const double toMs = 1000.0/freq;
+ float time = (float)( (now - m_timeOffset)/double(bx::getHPFrequency() ) );
+ const float deltaTime = float(frameTime/freq);
+ s_uniforms.m_time = time;
+
+ // Update camera.
+ cameraUpdate(deltaTime, m_mouseState);
+
+ // Set view and projection matrix for view 0.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float eye[3];
+ cameraGetPosition(eye);
- fbtextures[0] = bgfx::createTexture2D(uint16_t(viewState.m_width), uint16_t(viewState.m_height), false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_RT);
- fbtextures[1] = bgfx::createTexture2D(uint16_t(viewState.m_width), uint16_t(viewState.m_height), false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY);
- s_stencilFb = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
- }
+ bx::mtxQuatTranslationHMD(m_viewState.m_view, hmd->eye[0].rotation, eye);
+ bx::mtxProj(m_viewState.m_proj, hmd->eye[0].fov, nearPlane, farPlane, s_oglNdc);
- // Time.
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
- float time = (float)( (now - timeOffset)/double(bx::getHPFrequency() ) );
- const float deltaTime = float(frameTime/freq);
- s_uniforms.m_time = time;
-
- // Update camera.
- cameraUpdate(deltaTime, mouseState);
-
- // Set view and projection matrix for view 0.
- const bgfx::HMD* hmd = bgfx::getHMD();
- if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
- {
- float eye[3];
- cameraGetPosition(eye);
+ m_viewState.m_width = hmd->width;
+ m_viewState.m_height = hmd->height;
+ }
+ else
+ {
+ cameraGetViewMtx(m_viewState.m_view);
+ bx::mtxProj(m_viewState.m_proj, fov, aspect, nearPlane, farPlane, s_oglNdc);
+ }
- bx::mtxQuatTranslationHMD(viewState.m_view, hmd->eye[0].rotation, eye);
- bx::mtxProj(viewState.m_proj, hmd->eye[0].fov, nearPlane, farPlane, s_oglNdc);
+ imguiBeginFrame(
+ m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_viewState.m_width)
+ , uint16_t(m_viewState.m_height)
+ );
- viewState.m_width = hmd->width;
- viewState.m_height = hmd->height;
- }
- else
- {
- cameraGetViewMtx(viewState.m_view);
- bx::mtxProj(viewState.m_proj, fov, aspect, nearPlane, farPlane, s_oglNdc);
- }
+ showExampleDialog(this);
- imguiBeginFrame(mouseState.m_mx
- , mouseState.m_my
- , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , mouseState.m_mz
- , uint16_t(viewState.m_width)
- , uint16_t(viewState.m_height)
- );
+ ImGui::SetNextWindowPos(ImVec2(m_viewState.m_width - 256.0f, 10.0f) );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(256.0f, 700.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
- imguiBeginScrollArea("Settings", viewState.m_width - 256 - 10, 10, 256, 700, &scrollAreaRight);
+ const char* titles[2] =
+ {
+ "Scene 0",
+ "Scene 1",
+ };
- if (imguiCheck(titles[Scene0], Scene0 == currentScene) )
- {
- currentScene = Scene0;
- }
+ if (ImGui::RadioButton(titles[Scene0], Scene0 == m_currentScene) )
+ {
+ m_currentScene = Scene0;
+ }
- if (imguiCheck(titles[Scene1], Scene1 == currentScene) )
- {
- currentScene = Scene1;
- }
+ if (ImGui::RadioButton(titles[Scene1], Scene1 == m_currentScene) )
+ {
+ m_currentScene = Scene1;
+ }
- imguiSlider("Lights", settings_numLights, 1.0f, float(MAX_LIGHTS_COUNT), 1.0f);
+ ImGui::SliderInt("Lights", &m_numLights, 1, MAX_LIGHTS_COUNT);
+ ImGui::Checkbox("Update lights", &m_updateLights);
+ ImGui::Indent();
- if (imguiCheck("Update lights", settings_updateLights) )
- {
- settings_updateLights = !settings_updateLights;
- }
+ if (ImGui::RadioButton("Light pattern 0", LightPattern0 == m_lightPattern) )
+ {
+ m_lightPattern = LightPattern0;
+ }
- imguiIndent();
+ if (ImGui::RadioButton("Light pattern 1", LightPattern1 == m_lightPattern) )
+ {
+ m_lightPattern = LightPattern1;
+ }
- if (imguiCheck("Light pattern 0", LightPattern0 == lightPattern, settings_updateLights) )
- {
- lightPattern = LightPattern0;
- }
+ ImGui::Unindent();
- if (imguiCheck("Light pattern 1", LightPattern1 == lightPattern, settings_updateLights) )
- {
- lightPattern = LightPattern1;
- }
+ if ( Scene0 == m_currentScene )
+ {
+ ImGui::Checkbox("Update scene", &m_updateScene);
+ }
- imguiUnindent();
+ ImGui::Separator();
- if (imguiCheck("Update scene", settings_updateScene, Scene0 == currentScene) )
- {
- settings_updateScene = !settings_updateScene;
- }
+ ImGui::Text("Stencil buffer implementation:");
+ ImGui::Checkbox("Mixed", &m_mixedSvImpl);
+ if (!m_mixedSvImpl)
+ {
+ m_shadowVolumeImpl = (ImGui::RadioButton("Depth fail", ShadowVolumeImpl::DepthFail == m_shadowVolumeImpl) ? ShadowVolumeImpl::DepthFail : m_shadowVolumeImpl);
+ m_shadowVolumeImpl = (ImGui::RadioButton("Depth pass", ShadowVolumeImpl::DepthPass == m_shadowVolumeImpl) ? ShadowVolumeImpl::DepthPass : m_shadowVolumeImpl);
+ }
- imguiSeparatorLine();
- imguiLabel("Stencil buffer implementation:");
- settings_shadowVolumeImpl = (imguiCheck("Depth fail", ShadowVolumeImpl::DepthFail == settings_shadowVolumeImpl, !settings_mixedSvImpl) ? ShadowVolumeImpl::DepthFail : settings_shadowVolumeImpl);
- settings_shadowVolumeImpl = (imguiCheck("Depth pass", ShadowVolumeImpl::DepthPass == settings_shadowVolumeImpl, !settings_mixedSvImpl) ? ShadowVolumeImpl::DepthPass : settings_shadowVolumeImpl);
- settings_mixedSvImpl = (imguiCheck("Mixed", settings_mixedSvImpl) ? !settings_mixedSvImpl : settings_mixedSvImpl);
+ ImGui::Text("Shadow volume implementation:");
+ m_shadowVolumeAlgorithm = (ImGui::RadioButton("Face based impl.", ShadowVolumeAlgorithm::FaceBased == m_shadowVolumeAlgorithm) ? ShadowVolumeAlgorithm::FaceBased : m_shadowVolumeAlgorithm);
+ m_shadowVolumeAlgorithm = (ImGui::RadioButton("Edge based impl.", ShadowVolumeAlgorithm::EdgeBased == m_shadowVolumeAlgorithm) ? ShadowVolumeAlgorithm::EdgeBased : m_shadowVolumeAlgorithm);
- imguiLabel("Shadow volume implementation:");
- settings_shadowVolumeAlgorithm = (imguiCheck("Face based impl.", ShadowVolumeAlgorithm::FaceBased == settings_shadowVolumeAlgorithm) ? ShadowVolumeAlgorithm::FaceBased : settings_shadowVolumeAlgorithm);
- settings_shadowVolumeAlgorithm = (imguiCheck("Edge based impl.", ShadowVolumeAlgorithm::EdgeBased == settings_shadowVolumeAlgorithm) ? ShadowVolumeAlgorithm::EdgeBased : settings_shadowVolumeAlgorithm);
+ ImGui::Text("Stencil:");
+ if (ImGui::RadioButton("Use stencil buffer", !m_useStencilTexture) )
+ {
+ if (m_useStencilTexture)
+ {
+ m_useStencilTexture = false;
+ }
+ }
+ if (ImGui::RadioButton("Use texture as stencil", m_useStencilTexture) )
+ {
+ if (!m_useStencilTexture)
+ {
+ m_useStencilTexture = true;
+ }
+ }
- imguiLabel("Stencil:");
- if (imguiCheck("Use stencil buffer", !settings_useStencilTexture) )
- {
- if (settings_useStencilTexture)
+ ImGui::Separator();
+ ImGui::Text("Mesh:");
+ if (ImGui::RadioButton("Bunny - high poly", BunnyHighPoly == m_currentMesh) )
{
- settings_useStencilTexture = false;
+ m_currentMesh = BunnyHighPoly;
}
- }
- if (imguiCheck("Use texture as stencil", settings_useStencilTexture) )
- {
- if (!settings_useStencilTexture)
+
+ if (ImGui::RadioButton("Bunny - low poly", BunnyLowPoly == m_currentMesh) )
{
- settings_useStencilTexture = true;
+ m_currentMesh = BunnyLowPoly;
}
- }
- imguiSeparatorLine();
- imguiLabel("Mesh:");
- if (imguiCheck("Bunny - high poly", BunnyHighPoly == currentMesh) )
- {
- currentMesh = BunnyHighPoly;
- }
+ if (Scene1 == m_currentScene)
+ {
+ ImGui::SliderInt("Instance count", &m_instanceCount, 1, MAX_INSTANCE_COUNT);
+ }
- if (imguiCheck("Bunny - low poly", BunnyLowPoly == currentMesh) )
- {
- currentMesh = BunnyLowPoly;
- }
+ ImGui::Text("CPU Time: %7.1f [ms]", double(m_profTime)*toMs);
+ ImGui::Text("Volume Vertices: %5.uk", m_numShadowVolumeVertices/1000);
+ ImGui::Text("Volume Indices: %6.uk", m_numShadowVolumeIndices/1000);
+ m_numShadowVolumeVertices = 0;
+ m_numShadowVolumeIndices = 0;
- if (Scene1 == currentScene)
- {
- imguiSlider("Instance count", settings_instanceCount, 1.0f, float(MAX_INSTANCE_COUNT), 1.0f);
- }
+ ImGui::Separator();
+ ImGui::Checkbox("Draw Shadow Volumes", &m_drawShadowVolumes);
- imguiLabel("CPU Time: %7.1f [ms]", double(profTime)*toMs);
- imguiLabel("Volume Vertices: %5.uk", numShadowVolumeVertices/1000);
- imguiLabel("Volume Indices: %6.uk", numShadowVolumeIndices/1000);
- numShadowVolumeVertices = 0;
- numShadowVolumeIndices = 0;
-
- imguiSeparatorLine();
- settings_drawShadowVolumes = imguiCheck("Draw Shadow Volumes", settings_drawShadowVolumes)
- ? !settings_drawShadowVolumes
- : settings_drawShadowVolumes
- ;
- imguiIndent();
- imguiUnindent();
-
- imguiEndScrollArea();
-
- static int32_t scrollAreaLeft = 0;
- imguiBeginScrollArea("Show help:", 10, viewState.m_height - 77 - 10, 120, 77, &scrollAreaLeft);
- settings_showHelp = imguiButton(settings_showHelp ? "ON" : "OFF")
- ? !settings_showHelp
- : settings_showHelp
- ;
-
- imguiEndScrollArea();
-
- imguiEndFrame();
-
- //update settings
- s_uniforms.m_params.m_ambientPass = 1.0f;
- s_uniforms.m_params.m_lightingPass = 1.0f;
- s_uniforms.m_params.m_texelHalf = s_texelHalf;
- s_uniforms.m_svparams.m_useStencilTex = float(settings_useStencilTexture);
-
- //set picked bunny model
- Model* bunnyModel = BunnyLowPoly == currentMesh ? &bunnyLowPolyModel : &bunnyHighPolyModel;
-
- //update time accumulators
- static float sceneTimeAccumulator = 0.0f;
- if (settings_updateScene)
- {
- sceneTimeAccumulator += deltaTime;
- }
+ ImGui::End();
- static float lightTimeAccumulator = 0.0f;
- if (settings_updateLights)
- {
- lightTimeAccumulator += deltaTime;
- }
+ ImGui::SetNextWindowPos(ImVec2(10, float(m_viewState.m_height) - 77.0f - 10.0f) );
+ ImGui::Begin("Show help:"
+ , NULL
+ , ImVec2(120.0f, 77.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
- //setup light positions
- float lightPosRadius[MAX_LIGHTS_COUNT][4];
- if (LightPattern0 == lightPattern)
- {
- for (uint8_t ii = 0; ii < settings_numLights; ++ii)
- {
- lightPosRadius[ii][0] = bx::fcos(2.0f*bx::pi/settings_numLights * float(ii) + lightTimeAccumulator * 1.1f + 3.0f) * 20.0f;
- lightPosRadius[ii][1] = 20.0f;
- lightPosRadius[ii][2] = bx::fsin(2.0f*bx::pi/settings_numLights * float(ii) + lightTimeAccumulator * 1.1f + 3.0f) * 20.0f;
- lightPosRadius[ii][3] = 20.0f;
- }
- }
- else
- {
- for (uint8_t ii = 0; ii < settings_numLights; ++ii)
+ if (ImGui::Button(m_showHelp ? "ON" : "OFF") )
{
- lightPosRadius[ii][0] = bx::fcos(float(ii) * 2.0f/settings_numLights + lightTimeAccumulator * 1.3f + bx::pi) * 40.0f;
- lightPosRadius[ii][1] = 20.0f;
- lightPosRadius[ii][2] = bx::fsin(float(ii) * 2.0f/settings_numLights + lightTimeAccumulator * 1.3f + bx::pi) * 40.0f;
- lightPosRadius[ii][3] = 20.0f;
+ m_showHelp = !m_showHelp;
}
- }
- //use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/14-shadowvolumes");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Shadow volumes.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
+ ImGui::End();
- if (settings_showHelp)
- {
- uint8_t row = 5;
- bgfx::dbgTextPrintf(3, row++, 0x0f, "Stencil buffer implementation:");
- bgfx::dbgTextPrintf(8, row++, 0x0f, "Depth fail - Robust, but slower than 'Depth pass'. Requires computing and drawing of shadow volume caps.");
- bgfx::dbgTextPrintf(8, row++, 0x0f, "Depth pass - Faster, but not stable. Shadows are wrong when camera is in the shadow.");
- bgfx::dbgTextPrintf(8, row++, 0x0f, "Mixed - 'Depth pass' where possible, 'Depth fail' where necessary. Best of both words.");
-
- row++;
- bgfx::dbgTextPrintf(3, row++, 0x0f, "Shadow volume implementation:");
- bgfx::dbgTextPrintf(8, row++, 0x0f, "Face Based - Slower. Works fine with either stencil buffer or texture as stencil.");
- bgfx::dbgTextPrintf(8, row++, 0x0f, "Edge Based - Faster, but requires +2 incr/decr on stencil buffer. To avoid massive redraw, use RGBA texture as stencil.");
-
- row++;
- bgfx::dbgTextPrintf(3, row++, 0x0f, "Stencil:");
- bgfx::dbgTextPrintf(8, row++, 0x0f, "Stencil buffer - Faster, but capable only of +1 incr.");
- bgfx::dbgTextPrintf(8, row++, 0x0f, "Texture as stencil - Slower, but capable of +2 incr.");
- }
+ imguiEndFrame();
- // Setup instances
- Instance shadowCasters[SceneCount][60];
- uint16_t shadowCastersCount[SceneCount];
- for (uint8_t ii = 0; ii < SceneCount; ++ii)
- {
- shadowCastersCount[ii] = 0;
- }
+ //update settings
+ s_uniforms.m_params.m_ambientPass = 1.0f;
+ s_uniforms.m_params.m_lightingPass = 1.0f;
+ s_uniforms.m_params.m_texelHalf = s_texelHalf;
+ s_uniforms.m_svparams.m_useStencilTex = float(m_useStencilTexture);
- Instance shadowReceivers[SceneCount][10];
- uint16_t shadowReceiversCount[SceneCount];
- for (uint8_t ii = 0; ii < SceneCount; ++ii)
- {
- shadowReceiversCount[ii] = 0;
- }
+ //set picked bunny model
+ Model* bunnyModel = BunnyLowPoly == m_currentMesh ? &m_bunnyLowPolyModel : &m_bunnyHighPolyModel;
- // Scene 0 - shadow casters - Bunny
- {
- Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
- inst.m_scale[0] = 5.0f;
- inst.m_scale[1] = 5.0f;
- inst.m_scale[2] = 5.0f;
- inst.m_rotation[0] = 0.0f;
- inst.m_rotation[1] = float(4.0f - sceneTimeAccumulator * 0.7f);
- inst.m_rotation[2] = 0.0f;
- inst.m_pos[0] = 0.0f;
- inst.m_pos[1] = 10.0f;
- inst.m_pos[2] = 0.0f;
- inst.m_color[0] = 0.68f;
- inst.m_color[1] = 0.65f;
- inst.m_color[2] = 0.60f;
- inst.m_model = bunnyModel;
- }
+ //update time accumulators
+ static float sceneTimeAccumulator = 0.0f;
+ if (m_updateScene)
+ {
+ sceneTimeAccumulator += deltaTime;
+ }
- // Scene 0 - shadow casters - Cubes top.
- const uint8_t numCubesTop = 9;
- for (uint16_t ii = 0; ii < numCubesTop; ++ii)
- {
- Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
- inst.m_scale[0] = 1.0f;
- inst.m_scale[1] = 1.0f;
- inst.m_scale[2] = 1.0f;
- inst.m_rotation[0] = 0.0f;
- inst.m_rotation[1] = 0.0f;
- inst.m_rotation[2] = 0.0f;
- inst.m_pos[0] = bx::fsin(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f;
- inst.m_pos[1] = 6.0f;
- inst.m_pos[2] = bx::fcos(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f;
- inst.m_model = &cubeModel;
- }
+ static float lightTimeAccumulator = 0.0f;
+ if (m_updateLights)
+ {
+ lightTimeAccumulator += deltaTime;
+ }
- // Scene 0 - shadow casters - Cubes bottom.
- const uint8_t numCubesBottom = 9;
- for (uint16_t ii = 0; ii < numCubesBottom; ++ii)
- {
- Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
- inst.m_scale[0] = 1.0f;
- inst.m_scale[1] = 1.0f;
- inst.m_scale[2] = 1.0f;
- inst.m_rotation[0] = 0.0f;
- inst.m_rotation[1] = 0.0f;
- inst.m_rotation[2] = 0.0f;
- inst.m_pos[0] = bx::fsin(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f;
- inst.m_pos[1] = 22.0f;
- inst.m_pos[2] = bx::fcos(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f;
- inst.m_model = &cubeModel;
- }
+ //setup light positions
+ float lightPosRadius[MAX_LIGHTS_COUNT][4];
+ if (LightPattern0 == m_lightPattern)
+ {
+ for (uint8_t ii = 0; ii < m_numLights; ++ii)
+ {
+ lightPosRadius[ii][0] = bx::fcos(2.0f*bx::kPi/float(m_numLights) * float(ii) + lightTimeAccumulator * 1.1f + 3.0f) * 20.0f;
+ lightPosRadius[ii][1] = 20.0f;
+ lightPosRadius[ii][2] = bx::fsin(2.0f*bx::kPi/float(m_numLights) * float(ii) + lightTimeAccumulator * 1.1f + 3.0f) * 20.0f;
+ lightPosRadius[ii][3] = 20.0f;
+ }
+ }
+ else
+ {
+ for (uint8_t ii = 0; ii < m_numLights; ++ii)
+ {
+ lightPosRadius[ii][0] = bx::fcos(float(ii) * 2.0f/float(m_numLights) + lightTimeAccumulator * 1.3f + bx::kPi) * 40.0f;
+ lightPosRadius[ii][1] = 20.0f;
+ lightPosRadius[ii][2] = bx::fsin(float(ii) * 2.0f/float(m_numLights) + lightTimeAccumulator * 1.3f + bx::kPi) * 40.0f;
+ lightPosRadius[ii][3] = 20.0f;
+ }
+ }
- // Scene 0 - shadow casters - Columns.
- const float dist = 16.0f;
- const float columnPositions[][3] =
- {
- { dist, 3.3f, dist },
- { -dist, 3.3f, dist },
- { dist, 3.3f, -dist },
- { -dist, 3.3f, -dist },
- };
+ if (m_showHelp)
+ {
+ uint8_t row = 5;
+ bgfx::dbgTextPrintf(3, row++, 0x0f, "Stencil buffer implementation:");
+ bgfx::dbgTextPrintf(8, row++, 0x0f, "Depth fail - Robust, but slower than 'Depth pass'. Requires computing and drawing of shadow volume caps.");
+ bgfx::dbgTextPrintf(8, row++, 0x0f, "Depth pass - Faster, but not stable. Shadows are wrong when camera is in the shadow.");
+ bgfx::dbgTextPrintf(8, row++, 0x0f, "Mixed - 'Depth pass' where possible, 'Depth fail' where necessary. Best of both words.");
+
+ row++;
+ bgfx::dbgTextPrintf(3, row++, 0x0f, "Shadow volume implementation:");
+ bgfx::dbgTextPrintf(8, row++, 0x0f, "Face Based - Slower. Works fine with either stencil buffer or texture as stencil.");
+ bgfx::dbgTextPrintf(8, row++, 0x0f, "Edge Based - Faster, but requires +2 incr/decr on stencil buffer. To avoid massive redraw, use RGBA texture as stencil.");
+
+ row++;
+ bgfx::dbgTextPrintf(3, row++, 0x0f, "Stencil:");
+ bgfx::dbgTextPrintf(8, row++, 0x0f, "Stencil buffer - Faster, but capable only of +1 incr.");
+ bgfx::dbgTextPrintf(8, row++, 0x0f, "Texture as stencil - Slower, but capable of +2 incr.");
+ }
- for (uint8_t ii = 0; ii < 4; ++ii)
- {
- Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
- inst.m_scale[0] = 1.5f;
- inst.m_scale[1] = 1.5f;
- inst.m_scale[2] = 1.5f;
- inst.m_rotation[0] = 0.0f;
- inst.m_rotation[1] = 1.57f;
- inst.m_rotation[2] = 0.0f;
- inst.m_pos[0] = columnPositions[ii][0];
- inst.m_pos[1] = columnPositions[ii][1];
- inst.m_pos[2] = columnPositions[ii][2];
- inst.m_color[0] = 0.25f;
- inst.m_color[1] = 0.25f;
- inst.m_color[2] = 0.25f;
- inst.m_model = &columnModel;
- }
+ // Setup instances
+ Instance shadowCasters[SceneCount][60];
+ uint16_t shadowCastersCount[SceneCount];
+ for (uint8_t ii = 0; ii < SceneCount; ++ii)
+ {
+ shadowCastersCount[ii] = 0;
+ }
- // Scene 0 - shadow casters - Ceiling.
- {
- Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
- inst.m_scale[0] = 21.0f;
- inst.m_scale[1] = 21.0f;
- inst.m_scale[2] = 21.0f;
- inst.m_rotation[0] = bx::pi;
- inst.m_rotation[1] = 0.0f;
- inst.m_rotation[2] = 0.0f;
- inst.m_pos[0] = 0.0f;
- inst.m_pos[1] = 28.2f;
- inst.m_pos[2] = 0.0f;
- inst.m_model = &platformModel;
- inst.m_svExtrusionDistance = 2.0f; //prevent culling on tight view frustum
- }
+ Instance shadowReceivers[SceneCount][10];
+ uint16_t shadowReceiversCount[SceneCount];
+ for (uint8_t ii = 0; ii < SceneCount; ++ii)
+ {
+ shadowReceiversCount[ii] = 0;
+ }
- // Scene 0 - shadow casters - Platform.
- {
- Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
- inst.m_scale[0] = 24.0f;
- inst.m_scale[1] = 24.0f;
- inst.m_scale[2] = 24.0f;
- inst.m_rotation[0] = 0.0f;
- inst.m_rotation[1] = 0.0f;
- inst.m_rotation[2] = 0.0f;
- inst.m_pos[0] = 0.0f;
- inst.m_pos[1] = 0.0f;
- inst.m_pos[2] = 0.0f;
- inst.m_model = &platformModel;
- inst.m_svExtrusionDistance = 2.0f; //prevent culling on tight view frustum
- }
+ // Scene 0 - shadow casters - Bunny
+ {
+ Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
+ inst.m_scale[0] = 5.0f;
+ inst.m_scale[1] = 5.0f;
+ inst.m_scale[2] = 5.0f;
+ inst.m_rotation[0] = 0.0f;
+ inst.m_rotation[1] = float(4.0f - sceneTimeAccumulator * 0.7f);
+ inst.m_rotation[2] = 0.0f;
+ inst.m_pos[0] = 0.0f;
+ inst.m_pos[1] = 10.0f;
+ inst.m_pos[2] = 0.0f;
+ inst.m_color[0] = 0.68f;
+ inst.m_color[1] = 0.65f;
+ inst.m_color[2] = 0.60f;
+ inst.m_model = bunnyModel;
+ }
- // Scene 0 - shadow receivers - Floor.
- {
- Instance& inst = shadowReceivers[Scene0][shadowReceiversCount[Scene0]++];
- inst.m_scale[0] = 500.0f;
- inst.m_scale[1] = 500.0f;
- inst.m_scale[2] = 500.0f;
- inst.m_rotation[0] = 0.0f;
- inst.m_rotation[1] = 0.0f;
- inst.m_rotation[2] = 0.0f;
- inst.m_pos[0] = 0.0f;
- inst.m_pos[1] = 0.0f;
- inst.m_pos[2] = 0.0f;
- inst.m_model = &hplaneFieldModel;
- }
+ // Scene 0 - shadow casters - Cubes top.
+ const uint8_t numCubesTop = 9;
+ for (uint16_t ii = 0; ii < numCubesTop; ++ii)
+ {
+ Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
+ inst.m_scale[0] = 1.0f;
+ inst.m_scale[1] = 1.0f;
+ inst.m_scale[2] = 1.0f;
+ inst.m_rotation[0] = 0.0f;
+ inst.m_rotation[1] = 0.0f;
+ inst.m_rotation[2] = 0.0f;
+ inst.m_pos[0] = bx::fsin(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f;
+ inst.m_pos[1] = 6.0f;
+ inst.m_pos[2] = bx::fcos(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f;
+ inst.m_model = &m_cubeModel;
+ }
- // Scene 1 - shadow casters - Bunny instances
- {
- enum Direction
+ // Scene 0 - shadow casters - Cubes bottom.
+ const uint8_t numCubesBottom = 9;
+ for (uint16_t ii = 0; ii < numCubesBottom; ++ii)
+ {
+ Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
+ inst.m_scale[0] = 1.0f;
+ inst.m_scale[1] = 1.0f;
+ inst.m_scale[2] = 1.0f;
+ inst.m_rotation[0] = 0.0f;
+ inst.m_rotation[1] = 0.0f;
+ inst.m_rotation[2] = 0.0f;
+ inst.m_pos[0] = bx::fsin(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f;
+ inst.m_pos[1] = 22.0f;
+ inst.m_pos[2] = bx::fcos(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f;
+ inst.m_model = &m_cubeModel;
+ }
+
+ // Scene 0 - shadow casters - Columns.
+ const float dist = 16.0f;
+ const float columnPositions[][3] =
{
- Left = 0x0,
- Down = 0x1,
- Right = 0x2,
- Up = 0x3,
+ { dist, 3.3f, dist },
+ { -dist, 3.3f, dist },
+ { dist, 3.3f, -dist },
+ { -dist, 3.3f, -dist },
};
- const uint8_t directionMask = 0x3;
- uint8_t currentDirection = Left;
- float currX = 0.0f;
- float currY = 0.0f;
- const float stepX = 20.0f;
- const float stepY = 20.0f;
- uint8_t stateStep = 0;
- uint8_t stateChange = 1;
+ for (uint8_t ii = 0; ii < 4; ++ii)
+ {
+ Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
+ inst.m_scale[0] = 1.5f;
+ inst.m_scale[1] = 1.5f;
+ inst.m_scale[2] = 1.5f;
+ inst.m_rotation[0] = 0.0f;
+ inst.m_rotation[1] = 1.57f;
+ inst.m_rotation[2] = 0.0f;
+ inst.m_pos[0] = columnPositions[ii][0];
+ inst.m_pos[1] = columnPositions[ii][1];
+ inst.m_pos[2] = columnPositions[ii][2];
+ inst.m_color[0] = 0.25f;
+ inst.m_color[1] = 0.25f;
+ inst.m_color[2] = 0.25f;
+ inst.m_model = &m_columnModel;
+ }
- for (uint8_t ii = 0; ii < settings_instanceCount; ++ii)
+ // Scene 0 - shadow casters - Ceiling.
{
- Instance& inst = shadowCasters[Scene1][shadowCastersCount[Scene1]++];
- inst.m_scale[0] = 5.0f;
- inst.m_scale[1] = 5.0f;
- inst.m_scale[2] = 5.0f;
+ Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
+ inst.m_scale[0] = 21.0f;
+ inst.m_scale[1] = 21.0f;
+ inst.m_scale[2] = 21.0f;
+ inst.m_rotation[0] = bx::kPi;
+ inst.m_rotation[1] = 0.0f;
+ inst.m_rotation[2] = 0.0f;
+ inst.m_pos[0] = 0.0f;
+ inst.m_pos[1] = 28.2f;
+ inst.m_pos[2] = 0.0f;
+ inst.m_model = &m_platformModel;
+ inst.m_svExtrusionDistance = 2.0f; //prevent culling on tight view frustum
+ }
+
+ // Scene 0 - shadow casters - Platform.
+ {
+ Instance& inst = shadowCasters[Scene0][shadowCastersCount[Scene0]++];
+ inst.m_scale[0] = 24.0f;
+ inst.m_scale[1] = 24.0f;
+ inst.m_scale[2] = 24.0f;
inst.m_rotation[0] = 0.0f;
- inst.m_rotation[1] = bx::pi;
+ inst.m_rotation[1] = 0.0f;
inst.m_rotation[2] = 0.0f;
- inst.m_pos[0] = currX;
+ inst.m_pos[0] = 0.0f;
inst.m_pos[1] = 0.0f;
- inst.m_pos[2] = currY;
- inst.m_model = bunnyModel;
+ inst.m_pos[2] = 0.0f;
+ inst.m_model = &m_platformModel;
+ inst.m_svExtrusionDistance = 2.0f; //prevent culling on tight view frustum
+ }
+
+ // Scene 0 - shadow receivers - Floor.
+ {
+ Instance& inst = shadowReceivers[Scene0][shadowReceiversCount[Scene0]++];
+ inst.m_scale[0] = 500.0f;
+ inst.m_scale[1] = 500.0f;
+ inst.m_scale[2] = 500.0f;
+ inst.m_rotation[0] = 0.0f;
+ inst.m_rotation[1] = 0.0f;
+ inst.m_rotation[2] = 0.0f;
+ inst.m_pos[0] = 0.0f;
+ inst.m_pos[1] = 0.0f;
+ inst.m_pos[2] = 0.0f;
+ inst.m_model = &m_hplaneFieldModel;
+ }
- ++stateStep;
- if (stateStep >= ( (stateChange & ~0x1) >> 1) )
+ // Scene 1 - shadow casters - Bunny instances
+ {
+ enum Direction
{
- currentDirection = (currentDirection + 1) & directionMask;
- stateStep = 0;
- ++stateChange;
- }
+ Left = 0x0,
+ Down = 0x1,
+ Right = 0x2,
+ Up = 0x3,
+ };
+ const uint8_t directionMask = 0x3;
- switch (currentDirection)
+ uint8_t currentDirection = Left;
+ float currX = 0.0f;
+ float currY = 0.0f;
+ const float stepX = 20.0f;
+ const float stepY = 20.0f;
+ uint8_t stateStep = 0;
+ uint8_t stateChange = 1;
+
+ for (uint8_t ii = 0; ii < m_instanceCount; ++ii)
{
- case Left: currX -= stepX; break;
- case Down: currY -= stepY; break;
- case Right: currX += stepX; break;
- case Up: currY += stepY; break;
+ Instance& inst = shadowCasters[Scene1][shadowCastersCount[Scene1]++];
+ inst.m_scale[0] = 5.0f;
+ inst.m_scale[1] = 5.0f;
+ inst.m_scale[2] = 5.0f;
+ inst.m_rotation[0] = 0.0f;
+ inst.m_rotation[1] = bx::kPi;
+ inst.m_rotation[2] = 0.0f;
+ inst.m_pos[0] = currX;
+ inst.m_pos[1] = 0.0f;
+ inst.m_pos[2] = currY;
+ inst.m_model = bunnyModel;
+
+ ++stateStep;
+ if (stateStep >= ( (stateChange & ~0x1) >> 1) )
+ {
+ currentDirection = (currentDirection + 1) & directionMask;
+ stateStep = 0;
+ ++stateChange;
+ }
+
+ switch (currentDirection)
+ {
+ case Left: currX -= stepX; break;
+ case Down: currY -= stepY; break;
+ case Right: currX += stepX; break;
+ case Up: currY += stepY; break;
+ }
}
}
- }
- // Scene 1 - shadow receivers - Floor.
- {
- Instance& inst = shadowReceivers[Scene1][shadowReceiversCount[Scene1]++];
- inst.m_scale[0] = 500.0f;
- inst.m_scale[1] = 500.0f;
- inst.m_scale[2] = 500.0f;
- inst.m_rotation[0] = 0.0f;
- inst.m_rotation[1] = 0.0f;
- inst.m_rotation[2] = 0.0f;
- inst.m_pos[0] = 0.0f;
- inst.m_pos[1] = 0.0f;
- inst.m_pos[2] = 0.0f;
- inst.m_model = &hplaneFigureModel;
- }
+ // Scene 1 - shadow receivers - Floor.
+ {
+ Instance& inst = shadowReceivers[Scene1][shadowReceiversCount[Scene1]++];
+ inst.m_scale[0] = 500.0f;
+ inst.m_scale[1] = 500.0f;
+ inst.m_scale[2] = 500.0f;
+ inst.m_rotation[0] = 0.0f;
+ inst.m_rotation[1] = 0.0f;
+ inst.m_rotation[2] = 0.0f;
+ inst.m_pos[0] = 0.0f;
+ inst.m_pos[1] = 0.0f;
+ inst.m_pos[2] = 0.0f;
+ inst.m_model = &m_hplaneFigureModel;
+ }
- // Make sure at the beginning everything gets cleared.
- bgfx::setViewClear(0
+ // Make sure at the beginning everything gets cleared.
+ bgfx::setViewClear(0
, BGFX_CLEAR_COLOR
| BGFX_CLEAR_DEPTH
| BGFX_CLEAR_STENCIL
- , clearValues.m_clearRgba
- , clearValues.m_clearDepth
- , clearValues.m_clearStencil
+ , m_clearValues.m_clearRgba
+ , m_clearValues.m_clearDepth
+ , m_clearValues.m_clearStencil
);
- ::touch(0);
-
- // Draw ambient only.
- s_uniforms.m_params.m_ambientPass = 1.0f;
- s_uniforms.m_params.m_lightingPass = 0.0f;
-
- s_uniforms.m_color[0] = 1.0f;
- s_uniforms.m_color[1] = 1.0f;
- s_uniforms.m_color[2] = 1.0f;
+ ::touch(0);
- const RenderState& drawAmbient = (settings_useStencilTexture ?
- s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_DrawAmbient]:
- s_renderStates[RenderState::ShadowVolume_UsingStencilBuffer_DrawAmbient]);
+ // Draw ambient only.
+ s_uniforms.m_params.m_ambientPass = 1.0f;
+ s_uniforms.m_params.m_lightingPass = 0.0f;
- // Draw shadow casters.
- for (uint8_t ii = 0; ii < shadowCastersCount[currentScene]; ++ii)
- {
- shadowCasters[currentScene][ii].submit(VIEWID_RANGE1_PASS0, drawAmbient);
- }
-
- // Draw shadow receivers.
- for (uint8_t ii = 0; ii < shadowReceiversCount[currentScene]; ++ii)
- {
- shadowReceivers[currentScene][ii].submit(VIEWID_RANGE1_PASS0, drawAmbient);
- }
+ s_uniforms.m_color[0] = 1.0f;
+ s_uniforms.m_color[1] = 1.0f;
+ s_uniforms.m_color[2] = 1.0f;
- // Using stencil texture requires rendering to separate render target. first pass is building depth buffer.
- if (settings_useStencilTexture)
- {
- bgfx::setViewClear(VIEWID_RANGE1_RT_PASS1, BGFX_CLEAR_DEPTH, 0x00000000, 1.0f, 0);
- bgfx::setViewFrameBuffer(VIEWID_RANGE1_RT_PASS1, s_stencilFb);
-
- const RenderState& renderState = s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_BuildDepth];
+ const RenderState& drawAmbient = m_useStencilTexture
+ ? s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_DrawAmbient]
+ : s_renderStates[RenderState::ShadowVolume_UsingStencilBuffer_DrawAmbient]
+ ;
- for (uint8_t ii = 0; ii < shadowCastersCount[currentScene]; ++ii)
+ // Draw shadow casters.
+ for (uint8_t ii = 0; ii < shadowCastersCount[m_currentScene]; ++ii)
{
- shadowCasters[currentScene][ii].submit(VIEWID_RANGE1_RT_PASS1, renderState);
+ shadowCasters[m_currentScene][ii].submit(VIEWID_RANGE1_PASS0, drawAmbient);
}
- for (uint8_t ii = 0; ii < shadowReceiversCount[currentScene]; ++ii)
+ // Draw shadow receivers.
+ for (uint8_t ii = 0; ii < shadowReceiversCount[m_currentScene]; ++ii)
{
- shadowReceivers[currentScene][ii].submit(VIEWID_RANGE1_RT_PASS1, renderState);
+ shadowReceivers[m_currentScene][ii].submit(VIEWID_RANGE1_PASS0, drawAmbient);
}
- }
- profTime = bx::getHPCounter();
+ // Using stencil texture requires rendering to separate render target. first pass is building depth buffer.
+ if (m_useStencilTexture)
+ {
+ bgfx::setViewClear(VIEWID_RANGE1_RT_PASS1, BGFX_CLEAR_DEPTH, 0x00000000, 1.0f, 0);
+ bgfx::setViewFrameBuffer(VIEWID_RANGE1_RT_PASS1, s_stencilFb);
- /**
- * For each light:
- * 1. Compute and draw shadow volume to stencil buffer
- * 2. Draw diffuse with stencil test
- */
- for (uint8_t ii = 0, viewId = VIEWID_RANGE15_PASS2; ii < settings_numLights; ++ii, ++viewId)
- {
- const float* lightPos = lightPosRadius[ii];
+ const RenderState& renderState = s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_BuildDepth];
- bx::memCopy(s_uniforms.m_lightPosRadius, lightPosRadius[ii], 4*sizeof(float) );
- bx::memCopy(s_uniforms.m_lightRgbInnerR, lightRgbInnerR[ii], 3*sizeof(float) );
- bx::memCopy(s_uniforms.m_color, lightRgbInnerR[ii], 3*sizeof(float) );
+ for (uint8_t ii = 0; ii < shadowCastersCount[m_currentScene]; ++ii)
+ {
+ shadowCasters[m_currentScene][ii].submit(VIEWID_RANGE1_RT_PASS1, renderState);
+ }
- if (settings_useStencilTexture)
+ for (uint8_t ii = 0; ii < shadowReceiversCount[m_currentScene]; ++ii)
+ {
+ shadowReceivers[m_currentScene][ii].submit(VIEWID_RANGE1_RT_PASS1, renderState);
+ }
+ }
+
+ m_profTime = bx::getHPCounter();
+
+ /**
+ * For each light:
+ * 1. Compute and draw shadow volume to stencil buffer
+ * 2. Draw diffuse with stencil test
+ */
+ for (uint8_t ii = 0, viewId = VIEWID_RANGE15_PASS2; ii < m_numLights; ++ii, ++viewId)
{
- bgfx::setViewFrameBuffer(viewId, s_stencilFb);
+ const float* lightPos = lightPosRadius[ii];
+
+ bx::memCopy(s_uniforms.m_lightPosRadius, lightPosRadius[ii], 4*sizeof(float) );
+ bx::memCopy(s_uniforms.m_lightRgbInnerR, m_lightRgbInnerR[ii], 3*sizeof(float) );
+ bx::memCopy(s_uniforms.m_color, m_lightRgbInnerR[ii], 3*sizeof(float) );
+
+ if (m_useStencilTexture)
+ {
+ bgfx::setViewFrameBuffer(viewId, s_stencilFb);
- bgfx::setViewClear(viewId
+ bgfx::setViewClear(viewId
, BGFX_CLEAR_COLOR
, 0x00000000
, 1.0f
, 0
);
- }
- else
- {
- const bgfx::FrameBufferHandle invalid = BGFX_INVALID_HANDLE;
- bgfx::setViewFrameBuffer(viewId, invalid);
+ }
+ else
+ {
+ const bgfx::FrameBufferHandle invalid = BGFX_INVALID_HANDLE;
+ bgfx::setViewFrameBuffer(viewId, invalid);
- bgfx::setViewClear(viewId
+ bgfx::setViewClear(viewId
, BGFX_CLEAR_STENCIL
- , clearValues.m_clearRgba
- , clearValues.m_clearDepth
- , clearValues.m_clearStencil
+ , m_clearValues.m_clearRgba
+ , m_clearValues.m_clearDepth
+ , m_clearValues.m_clearStencil
);
- }
-
- // Create near clip volume for current light.
- float nearClipVolume[6 * 4] = {};
- float pointLight[4];
- if (settings_mixedSvImpl)
- {
- pointLight[0] = lightPos[0];
- pointLight[1] = lightPos[1];
- pointLight[2] = lightPos[2];
- pointLight[3] = 1.0f;
- createNearClipVolume(nearClipVolume, pointLight, viewState.m_view, fov, aspect, nearPlane);
- }
-
- for (uint8_t jj = 0; jj < shadowCastersCount[currentScene]; ++jj)
- {
- const Instance& instance = shadowCasters[currentScene][jj];
- Model* model = instance.m_model;
+ }
- ShadowVolumeImpl::Enum shadowVolumeImpl = settings_shadowVolumeImpl;
- if (settings_mixedSvImpl)
+ // Create near clip volume for current light.
+ float nearClipVolume[6 * 4] = {};
+ float pointLight[4];
+ if (m_mixedSvImpl)
{
- // If instance is inside near clip volume, depth fail must be used, else depth pass is fine.
- bool isInsideVolume = clipTest(nearClipVolume, 6, model->m_mesh, instance.m_scale, instance.m_pos);
- shadowVolumeImpl = (isInsideVolume ? ShadowVolumeImpl::DepthFail : ShadowVolumeImpl::DepthPass);
+ pointLight[0] = lightPos[0];
+ pointLight[1] = lightPos[1];
+ pointLight[2] = lightPos[2];
+ pointLight[3] = 1.0f;
+ createNearClipVolume(nearClipVolume, pointLight, m_viewState.m_view, fov, aspect, nearPlane);
}
- s_uniforms.m_svparams.m_dfail = float(ShadowVolumeImpl::DepthFail == shadowVolumeImpl);
-
- // Compute virtual light position for shadow volume generation.
- float transformedLightPos[3];
- shadowVolumeLightTransform(transformedLightPos
- , instance.m_scale
- , instance.m_rotation
- , instance.m_pos
- , lightPos
- );
-
- // Set virtual light pos.
- bx::memCopy(s_uniforms.m_virtualLightPos_extrusionDist, transformedLightPos, 3*sizeof(float) );
- s_uniforms.m_virtualLightPos_extrusionDist[3] = instance.m_svExtrusionDistance;
-
- // Compute transform for shadow volume.
- float shadowVolumeMtx[16];
- bx::mtxSRT(shadowVolumeMtx
+
+ for (uint8_t jj = 0; jj < shadowCastersCount[m_currentScene]; ++jj)
+ {
+ const Instance& instance = shadowCasters[m_currentScene][jj];
+ Model* model = instance.m_model;
+
+ ShadowVolumeImpl::Enum shadowVolumeImpl = m_shadowVolumeImpl;
+ if (m_mixedSvImpl)
+ {
+ // If instance is inside near clip volume, depth fail must be used, else depth pass is fine.
+ bool isInsideVolume = clipTest(nearClipVolume, 6, model->m_mesh, instance.m_scale, instance.m_pos);
+ shadowVolumeImpl = (isInsideVolume ? ShadowVolumeImpl::DepthFail : ShadowVolumeImpl::DepthPass);
+ }
+ s_uniforms.m_svparams.m_dfail = float(ShadowVolumeImpl::DepthFail == shadowVolumeImpl);
+
+ // Compute virtual light position for shadow volume generation.
+ float transformedLightPos[3];
+ shadowVolumeLightTransform(transformedLightPos
+ , instance.m_scale
+ , instance.m_rotation
+ , instance.m_pos
+ , lightPos
+ );
+
+ // Set virtual light pos.
+ bx::memCopy(s_uniforms.m_virtualLightPos_extrusionDist, transformedLightPos, 3*sizeof(float) );
+ s_uniforms.m_virtualLightPos_extrusionDist[3] = instance.m_svExtrusionDistance;
+
+ // Compute transform for shadow volume.
+ float shadowVolumeMtx[16];
+ bx::mtxSRT(shadowVolumeMtx
, instance.m_scale[0]
, instance.m_scale[1]
, instance.m_scale[2]
@@ -2653,207 +2702,239 @@ int _main_(int _argc, char** _argv)
, instance.m_pos[2]
);
- GroupArray& groups = model->m_mesh.m_groups;
- const uint16_t stride = model->m_mesh.m_decl.getStride();
- for (GroupArray::iterator it = groups.begin(), itEnd = groups.end(); it != itEnd; ++it)
- {
- Group& group = *it;
-
- // Create shadow volume.
- ShadowVolume shadowVolume;
- shadowVolumeCreate(shadowVolume
- , group
- , stride
- , shadowVolumeMtx
- , transformedLightPos
- , shadowVolumeImpl
- , settings_shadowVolumeAlgorithm
- , settings_useStencilTexture
- );
-
- numShadowVolumeVertices += shadowVolume.m_numVertices;
- numShadowVolumeIndices += shadowVolume.m_numIndices;
-
- ShadowVolumeProgramType::Enum programIndex = ShadowVolumeProgramType::Blank;
- RenderState::Enum renderStateIndex;
- if (settings_useStencilTexture)
- {
- renderStateIndex = ShadowVolumeImpl::DepthFail == shadowVolumeImpl
- ? RenderState::ShadowVolume_UsingStencilTexture_CraftStencil_DepthFail
- : RenderState::ShadowVolume_UsingStencilTexture_CraftStencil_DepthPass
- ;
-
- programIndex = ShadowVolumeAlgorithm::FaceBased == settings_shadowVolumeAlgorithm
- ? ShadowVolumeProgramType::Tex1
- : ShadowVolumeProgramType::Tex2
- ;
- }
- else
- {
- renderStateIndex = ShadowVolumeImpl::DepthFail == shadowVolumeImpl
- ? RenderState::ShadowVolume_UsingStencilBuffer_CraftStencil_DepthFail
- : RenderState::ShadowVolume_UsingStencilBuffer_CraftStencil_DepthPass
- ;
- }
- const RenderState& renderStateCraftStencil = s_renderStates[renderStateIndex];
-
- s_uniforms.submitPerDrawUniforms();
- bgfx::setTransform(shadowVolumeMtx);
- bgfx::setVertexBuffer(shadowVolume.m_vbSides);
- bgfx::setIndexBuffer(shadowVolume.m_ibSides);
- setRenderState(renderStateCraftStencil);
- ::submit(viewId, svProgs[programIndex][ShadowVolumePart::Side]);
-
- if (shadowVolume.m_cap)
+ GroupArray& groups = model->m_mesh.m_groups;
+ const uint16_t stride = model->m_mesh.m_decl.getStride();
+ for (GroupArray::iterator it = groups.begin(), itEnd = groups.end(); it != itEnd; ++it)
{
- s_uniforms.submitPerDrawUniforms();
- bgfx::setTransform(shadowVolumeMtx);
- bgfx::setVertexBuffer(group.m_vbh);
- bgfx::setIndexBuffer(shadowVolume.m_ibFrontCap);
- setRenderState(renderStateCraftStencil);
- ::submit(viewId, svProgs[programIndex][ShadowVolumePart::Front]);
+ Group& group = *it;
+
+ // Create shadow volume.
+ ShadowVolume shadowVolume;
+ shadowVolumeCreate(shadowVolume
+ , group
+ , stride
+ , shadowVolumeMtx
+ , transformedLightPos
+ , shadowVolumeImpl
+ , m_shadowVolumeAlgorithm
+ , m_useStencilTexture
+ );
- s_uniforms.submitPerDrawUniforms();
- bgfx::setTransform(shadowVolumeMtx);
- bgfx::setVertexBuffer(group.m_vbh);
- bgfx::setIndexBuffer(shadowVolume.m_ibBackCap);
- ::setRenderState(renderStateCraftStencil);
- ::submit(viewId, svProgs[programIndex][ShadowVolumePart::Back]);
- }
+ m_numShadowVolumeVertices += shadowVolume.m_numVertices;
+ m_numShadowVolumeIndices += shadowVolume.m_numIndices;
- if (settings_drawShadowVolumes)
- {
- const RenderState& renderState = s_renderStates[RenderState::Custom_DrawShadowVolume_Lines];
+ ShadowVolumeProgramType::Enum programIndex = ShadowVolumeProgramType::Blank;
+ RenderState::Enum renderStateIndex;
+ if (m_useStencilTexture)
+ {
+ renderStateIndex = ShadowVolumeImpl::DepthFail == shadowVolumeImpl
+ ? RenderState::ShadowVolume_UsingStencilTexture_CraftStencil_DepthFail
+ : RenderState::ShadowVolume_UsingStencilTexture_CraftStencil_DepthPass
+ ;
+
+ programIndex = ShadowVolumeAlgorithm::FaceBased == m_shadowVolumeAlgorithm
+ ? ShadowVolumeProgramType::Tex1
+ : ShadowVolumeProgramType::Tex2
+ ;
+ }
+ else
+ {
+ renderStateIndex = ShadowVolumeImpl::DepthFail == shadowVolumeImpl
+ ? RenderState::ShadowVolume_UsingStencilBuffer_CraftStencil_DepthFail
+ : RenderState::ShadowVolume_UsingStencilBuffer_CraftStencil_DepthPass
+ ;
+ }
+ const RenderState& renderStateCraftStencil = s_renderStates[renderStateIndex];
s_uniforms.submitPerDrawUniforms();
bgfx::setTransform(shadowVolumeMtx);
- bgfx::setVertexBuffer(shadowVolume.m_vbSides);
+ bgfx::setVertexBuffer(0, shadowVolume.m_vbSides);
bgfx::setIndexBuffer(shadowVolume.m_ibSides);
- ::setRenderState(renderState);
- ::submit(VIEWID_RANGE1_PASS3, svProgs[ShadowVolumeProgramType::Color][ShadowVolumePart::Side]);
+ setRenderState(renderStateCraftStencil);
+ ::submit(viewId, m_svProgs[programIndex][ShadowVolumePart::Side]);
if (shadowVolume.m_cap)
{
s_uniforms.submitPerDrawUniforms();
bgfx::setTransform(shadowVolumeMtx);
- bgfx::setVertexBuffer(group.m_vbh);
+ bgfx::setVertexBuffer(0, group.m_vbh);
bgfx::setIndexBuffer(shadowVolume.m_ibFrontCap);
- ::setRenderState(renderState);
- ::submit(VIEWID_RANGE1_PASS3, svProgs[ShadowVolumeProgramType::Color][ShadowVolumePart::Front]);
+ setRenderState(renderStateCraftStencil);
+ ::submit(viewId, m_svProgs[programIndex][ShadowVolumePart::Front]);
s_uniforms.submitPerDrawUniforms();
bgfx::setTransform(shadowVolumeMtx);
- bgfx::setVertexBuffer(group.m_vbh);
+ bgfx::setVertexBuffer(0, group.m_vbh);
bgfx::setIndexBuffer(shadowVolume.m_ibBackCap);
+ ::setRenderState(renderStateCraftStencil);
+ ::submit(viewId, m_svProgs[programIndex][ShadowVolumePart::Back]);
+ }
+
+ if (m_drawShadowVolumes)
+ {
+ const RenderState& renderState = s_renderStates[RenderState::Custom_DrawShadowVolume_Lines];
+
+ s_uniforms.submitPerDrawUniforms();
+ bgfx::setTransform(shadowVolumeMtx);
+ bgfx::setVertexBuffer(0, shadowVolume.m_vbSides);
+ bgfx::setIndexBuffer(shadowVolume.m_ibSides);
::setRenderState(renderState);
- ::submit(VIEWID_RANGE1_PASS3, svProgs[ShadowVolumeProgramType::Color][ShadowVolumePart::Back]);
+ ::submit(VIEWID_RANGE1_PASS3, m_svProgs[ShadowVolumeProgramType::Color][ShadowVolumePart::Side]);
+
+ if (shadowVolume.m_cap)
+ {
+ s_uniforms.submitPerDrawUniforms();
+ bgfx::setTransform(shadowVolumeMtx);
+ bgfx::setVertexBuffer(0, group.m_vbh);
+ bgfx::setIndexBuffer(shadowVolume.m_ibFrontCap);
+ ::setRenderState(renderState);
+ ::submit(VIEWID_RANGE1_PASS3, m_svProgs[ShadowVolumeProgramType::Color][ShadowVolumePart::Front]);
+
+ s_uniforms.submitPerDrawUniforms();
+ bgfx::setTransform(shadowVolumeMtx);
+ bgfx::setVertexBuffer(0, group.m_vbh);
+ bgfx::setIndexBuffer(shadowVolume.m_ibBackCap);
+ ::setRenderState(renderState);
+ ::submit(VIEWID_RANGE1_PASS3, m_svProgs[ShadowVolumeProgramType::Color][ShadowVolumePart::Back]);
+ }
}
}
}
- }
- // Draw diffuse only.
- s_uniforms.m_params.m_ambientPass = 0.0f;
- s_uniforms.m_params.m_lightingPass = 1.0f;
+ // Draw diffuse only.
+ s_uniforms.m_params.m_ambientPass = 0.0f;
+ s_uniforms.m_params.m_lightingPass = 1.0f;
- RenderState& drawDiffuse = settings_useStencilTexture
- ? s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_DrawDiffuse]
- : s_renderStates[RenderState::ShadowVolume_UsingStencilBuffer_DrawDiffuse]
- ;
+ RenderState& drawDiffuse = m_useStencilTexture
+ ? s_renderStates[RenderState::ShadowVolume_UsingStencilTexture_DrawDiffuse]
+ : s_renderStates[RenderState::ShadowVolume_UsingStencilBuffer_DrawDiffuse]
+ ;
- // If using stencil texture, viewId is set to render target. Incr it to render to default back buffer.
- viewId += uint8_t(settings_useStencilTexture);
+ // If using stencil texture, viewId is set to render target. Incr it to render to default back buffer.
+ viewId += uint8_t(m_useStencilTexture);
- // Draw shadow casters.
- for (uint8_t jj = 0; jj < shadowCastersCount[currentScene]; ++jj)
- {
- shadowCasters[currentScene][jj].submit(viewId, drawDiffuse);
+ // Draw shadow casters.
+ for (uint8_t jj = 0; jj < shadowCastersCount[m_currentScene]; ++jj)
+ {
+ shadowCasters[m_currentScene][jj].submit(viewId, drawDiffuse);
+ }
+
+ // Draw shadow receivers.
+ for (uint8_t jj = 0; jj < shadowReceiversCount[m_currentScene]; ++jj)
+ {
+ shadowReceivers[m_currentScene][jj].submit(viewId, drawDiffuse);
+ }
}
- // Draw shadow receivers.
- for (uint8_t jj = 0; jj < shadowReceiversCount[currentScene]; ++jj)
+ m_profTime = bx::getHPCounter() - m_profTime;
+
+ // Lights.
+ const float lightScale[3] = { 1.5f, 1.5f, 1.5f };
+ for (uint8_t ii = 0; ii < m_numLights; ++ii)
{
- shadowReceivers[currentScene][jj].submit(viewId, drawDiffuse);
- }
- }
+ bx::memCopy(s_uniforms.m_color, m_lightRgbInnerR[ii], 3*sizeof(float) );
- profTime = bx::getHPCounter() - profTime;
+ float lightMtx[16];
+ mtxBillboard(lightMtx, m_viewState.m_view, lightPosRadius[ii], lightScale);
- // Lights.
- const float lightScale[3] = { 1.5f, 1.5f, 1.5f };
- for (uint8_t ii = 0; ii < settings_numLights; ++ii)
- {
- bx::memCopy(s_uniforms.m_color, lightRgbInnerR[ii], 3*sizeof(float) );
+ m_vplaneModel.submit(VIEWID_RANGE1_PASS3, lightMtx, s_renderStates[RenderState::Custom_BlendLightTexture]);
+ }
- float lightMtx[16];
- mtxBillboard(lightMtx, viewState.m_view, lightPosRadius[ii], lightScale);
+ // Setup view rect and transform for all used views.
+ setViewRectMask(s_viewMask, 0, 0, uint16_t(m_viewState.m_width), uint16_t(m_viewState.m_height) );
+ setViewTransformMask(s_viewMask, m_viewState.m_view, m_viewState.m_proj);
+ s_viewMask = 0;
- vplaneModel.submit(VIEWID_RANGE1_PASS3, lightMtx, s_renderStates[RenderState::Custom_BlendLightTexture]);
- }
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
- // Setup view rect and transform for all used views.
- setViewRectMask(s_viewMask, 0, 0, uint16_t(viewState.m_width), uint16_t(viewState.m_height) );
- setViewTransformMask(s_viewMask, viewState.m_view, viewState.m_proj);
- s_viewMask = 0;
+ // Swap memory pages.
+ s_svAllocator.swap();
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ // Reset clear values.
+ setViewClearMask(UINT32_MAX
+ , BGFX_CLEAR_NONE
+ , m_clearValues.m_clearRgba
+ , m_clearValues.m_clearDepth
+ , m_clearValues.m_clearStencil
+ );
- // Swap memory pages.
- s_svAllocator.swap();
+ return true;
+ }
- // Reset clear values.
- setViewClearMask(UINT32_MAX
- , BGFX_CLEAR_NONE
- , clearValues.m_clearRgba
- , clearValues.m_clearDepth
- , clearValues.m_clearStencil
- );
+ return false;
}
- // Cleanup
- bunnyLowPolyModel.unload();
- bunnyHighPolyModel.unload();
- columnModel.unload();
- cubeModel.unload();
- platformModel.unload();
- hplaneFieldModel.unload();
- hplaneFigureModel.unload();
- vplaneModel.unload();
-
- s_uniforms.destroy();
-
- bgfx::destroyUniform(s_texColor);
- bgfx::destroyUniform(s_texStencil);
- bgfx::destroyFrameBuffer(s_stencilFb);
-
- bgfx::destroyTexture(figureTex);
- bgfx::destroyTexture(fieldstoneTex);
- bgfx::destroyTexture(flareTex);
-
- bgfx::destroyProgram(programTextureLighting);
- bgfx::destroyProgram(programColorLighting);
- bgfx::destroyProgram(programColorTexture);
- bgfx::destroyProgram(programTexture);
-
- bgfx::destroyProgram(programBackBlank);
- bgfx::destroyProgram(programSideBlank);
- bgfx::destroyProgram(programFrontBlank);
- bgfx::destroyProgram(programBackColor);
- bgfx::destroyProgram(programSideColor);
- bgfx::destroyProgram(programFrontColor);
- bgfx::destroyProgram(programSideTex);
- bgfx::destroyProgram(programBackTex1);
- bgfx::destroyProgram(programBackTex2);
- bgfx::destroyProgram(programFrontTex1);
- bgfx::destroyProgram(programFrontTex2);
-
- cameraDestroy();
- imguiDestroy();
-
- // Shutdown bgfx.
- bgfx::shutdown();
-
- return 0;
-}
+ ViewState m_viewState;
+ ClearValues m_clearValues;
+
+ uint32_t m_debug;
+ uint32_t m_reset;
+
+ bgfx::TextureHandle m_figureTex;
+ bgfx::TextureHandle m_flareTex;
+ bgfx::TextureHandle m_fieldstoneTex;
+
+ bgfx::ProgramHandle m_programTextureLighting;
+ bgfx::ProgramHandle m_programColorLighting;
+ bgfx::ProgramHandle m_programColorTexture;
+ bgfx::ProgramHandle m_programTexture;
+
+ bgfx::ProgramHandle m_programBackBlank;
+ bgfx::ProgramHandle m_programSideBlank;
+ bgfx::ProgramHandle m_programFrontBlank;
+
+ bgfx::ProgramHandle m_programBackColor;
+ bgfx::ProgramHandle m_programSideColor;
+ bgfx::ProgramHandle m_programFrontColor;
+
+ bgfx::ProgramHandle m_programSideTex;
+ bgfx::ProgramHandle m_programBackTex1;
+ bgfx::ProgramHandle m_programBackTex2;
+ bgfx::ProgramHandle m_programFrontTex1;
+ bgfx::ProgramHandle m_programFrontTex2;
+
+ bgfx::ProgramHandle m_svProgs[ShadowVolumeProgramType::Count][ShadowVolumePart::Count];
+
+ Model m_bunnyLowPolyModel;
+ Model m_bunnyHighPolyModel;
+ Model m_columnModel;
+ Model m_platformModel;
+ Model m_cubeModel;
+ Model m_hplaneFieldModel;
+ Model m_hplaneFigureModel;
+ Model m_vplaneModel;
+
+ float m_lightRgbInnerR[MAX_LIGHTS_COUNT][4];
+
+ int64_t m_profTime;
+ int64_t m_timeOffset;
+
+ uint32_t m_numShadowVolumeVertices;
+ uint32_t m_numShadowVolumeIndices;
+
+ uint32_t m_oldWidth;
+ uint32_t m_oldHeight;
+
+ int32_t m_numLights;
+ int32_t m_instanceCount;
+ bool m_showHelp;
+ bool m_updateLights;
+ bool m_updateScene;
+ bool m_mixedSvImpl;
+ bool m_useStencilTexture;
+ bool m_drawShadowVolumes;
+ ShadowVolumeImpl::Enum m_shadowVolumeImpl;
+ ShadowVolumeAlgorithm::Enum m_shadowVolumeAlgorithm;
+
+ LightPattern m_lightPattern;
+ MeshChoice m_currentMesh;
+ Scene m_currentScene;
+
+ entry::MouseState m_mouseState;
+};
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleShadowVolumes, "14-shadowvolumes", "Shadow volumes.");
diff --git a/3rdparty/bgfx/examples/15-shadowmaps-simple/shadowmaps_simple.cpp b/3rdparty/bgfx/examples/15-shadowmaps-simple/shadowmaps_simple.cpp
index ae125ea98ab..0119c730d8f 100644
--- a/3rdparty/bgfx/examples/15-shadowmaps-simple/shadowmaps_simple.cpp
+++ b/3rdparty/bgfx/examples/15-shadowmaps-simple/shadowmaps_simple.cpp
@@ -12,37 +12,16 @@
#include <bgfx/bgfx.h>
#include <bx/timer.h>
#include <bx/readerwriter.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include "entry/entry.h"
#include "bgfx_utils.h"
+#include "imgui/imgui.h"
-#define RENDER_SHADOW_PASS_ID 0
-#define RENDER_SCENE_PASS_ID 1
-
-uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w)
+namespace
{
- union
- {
- uint32_t ui32;
- uint8_t arr[4];
- } un;
- un.arr[0] = _x;
- un.arr[1] = _y;
- un.arr[2] = _z;
- un.arr[3] = _w;
-
- return un.ui32;
-}
-
-uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f)
-{
- const uint8_t xx = uint8_t(_x*127.0f + 128.0f);
- const uint8_t yy = uint8_t(_y*127.0f + 128.0f);
- const uint8_t zz = uint8_t(_z*127.0f + 128.0f);
- const uint8_t ww = uint8_t(_w*127.0f + 128.0f);
- return packUint32(xx, yy, zz, ww);
-}
+#define RENDER_SHADOW_PASS_ID 0
+#define RENDER_SCENE_PASS_ID 1
struct PosNormalVertex
{
@@ -50,14 +29,27 @@ struct PosNormalVertex
float m_y;
float m_z;
uint32_t m_normal;
+
+ static void init()
+ {
+ ms_decl
+ .begin()
+ .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
+ .add(bgfx::Attrib::Normal, 4, bgfx::AttribType::Uint8, true, true)
+ .end();
+ };
+
+ static bgfx::VertexDecl ms_decl;
};
+bgfx::VertexDecl PosNormalVertex::ms_decl;
+
static PosNormalVertex s_hplaneVertices[] =
{
- { -1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f) },
- { 1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f) },
- { -1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f) },
- { 1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f) },
+ { -1.0f, 0.0f, 1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f) },
+ { 1.0f, 0.0f, 1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f) },
+ { -1.0f, 0.0f, -1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f) },
+ { 1.0f, 0.0f, -1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f) },
};
static const uint16_t s_planeIndices[] =
@@ -66,329 +58,398 @@ static const uint16_t s_planeIndices[] =
1, 3, 2,
};
-int _main_(int _argc, char** _argv)
+class ExampleShadowmapsSimple : public entry::AppI
{
- Args args(_argc, _argv);
-
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
-
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
-
- bgfx::RendererType::Enum renderer = bgfx::getRendererType();
- bool flipV = false
- || renderer == bgfx::RendererType::OpenGL
- || renderer == bgfx::RendererType::OpenGLES
- ;
-
- // Enable debug text.
- bgfx::setDebug(debug);
-
- // Uniforms.
- bgfx::UniformHandle u_shadowMap = bgfx::createUniform("u_shadowMap", bgfx::UniformType::Int1);
- bgfx::UniformHandle u_lightPos = bgfx::createUniform("u_lightPos", bgfx::UniformType::Vec4);
- bgfx::UniformHandle u_lightMtx = bgfx::createUniform("u_lightMtx", bgfx::UniformType::Mat4);
- // When using GL clip space depth range [-1, 1] and packing depth into color buffer, we need to
- // adjust the depth range to be [0, 1] for writing to the color buffer
- bgfx::UniformHandle u_depthScaleOffset = bgfx::createUniform("u_depthScaleOffset", bgfx::UniformType::Vec4);
- const float depthScale = flipV ? 0.5f : 1.0f;
- const float depthOffset = flipV ? 0.5f : 0.0f;
- float depthScaleOffset[4] = {depthScale, depthOffset, 0.0f, 0.0f};
- bgfx::setUniform(u_depthScaleOffset, depthScaleOffset);
-
- // Vertex declarations.
- bgfx::VertexDecl PosNormalDecl;
- PosNormalDecl.begin()
- .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
- .add(bgfx::Attrib::Normal, 4, bgfx::AttribType::Uint8, true, true)
- .end();
-
- // Meshes.
- Mesh* bunny = meshLoad("meshes/bunny.bin");
- Mesh* cube = meshLoad("meshes/cube.bin");
- Mesh* hollowcube = meshLoad("meshes/hollowcube.bin");
-
- bgfx::VertexBufferHandle vbh = bgfx::createVertexBuffer(
- bgfx::makeRef(s_hplaneVertices, sizeof(s_hplaneVertices) )
- , PosNormalDecl
- );
+public:
+ ExampleShadowmapsSimple(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
- bgfx::IndexBufferHandle ibh = bgfx::createIndexBuffer(
- bgfx::makeRef(s_planeIndices, sizeof(s_planeIndices) )
- );
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
- // Render targets.
- uint16_t shadowMapSize = 512;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
- // Get renderer capabilities info.
- const bgfx::Caps* caps = bgfx::getCaps();
- // Shadow samplers are supported at least partially supported if texture
- // compare less equal feature is supported.
- bool shadowSamplerSupported = 0 != (caps->supported & BGFX_CAPS_TEXTURE_COMPARE_LEQUAL);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- bgfx::ProgramHandle progShadow;
- bgfx::ProgramHandle progMesh;
- bgfx::TextureHandle shadowMapTexture;
- bgfx::FrameBufferHandle shadowMapFB;
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- if (shadowSamplerSupported)
- {
- // Depth textures and shadow samplers are supported.
- progShadow = loadProgram("vs_sms_shadow", "fs_sms_shadow");
- progMesh = loadProgram("vs_sms_mesh", "fs_sms_mesh");
+ // Uniforms.
+ s_shadowMap = bgfx::createUniform("s_shadowMap", bgfx::UniformType::Int1);
+ u_lightPos = bgfx::createUniform("u_lightPos", bgfx::UniformType::Vec4);
+ u_lightMtx = bgfx::createUniform("u_lightMtx", bgfx::UniformType::Mat4);
- shadowMapTexture = bgfx::createTexture2D(shadowMapSize, shadowMapSize, false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT | BGFX_TEXTURE_COMPARE_LEQUAL);
- bgfx::TextureHandle fbtextures[] = { shadowMapTexture };
- shadowMapFB = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
- }
- else
- {
- // Depth textures and shadow samplers are not supported. Use float
- // depth packing into color buffer instead.
- progShadow = loadProgram("vs_sms_shadow_pd", "fs_sms_shadow_pd");
- progMesh = loadProgram("vs_sms_mesh", "fs_sms_mesh_pd");
+ // When using GL clip space depth range [-1, 1] and packing depth into color buffer, we need to
+ // adjust the depth range to be [0, 1] for writing to the color buffer
+ u_depthScaleOffset = bgfx::createUniform("u_depthScaleOffset", bgfx::UniformType::Vec4);
+
+ // Get renderer capabilities info.
+ const bgfx::Caps* caps = bgfx::getCaps();
- shadowMapTexture = bgfx::createTexture2D(shadowMapSize, shadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT);
- bgfx::TextureHandle fbtextures[] =
+ float depthScaleOffset[4] = { 1.0f, 0.0f, 0.0f, 0.0f };
+ if (caps->homogeneousDepth)
{
- shadowMapTexture,
- bgfx::createTexture2D(shadowMapSize, shadowMapSize, false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY),
- };
- shadowMapFB = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
- }
+ depthScaleOffset[0] = 0.5f;
+ depthScaleOffset[1] = 0.5f;
+ }
+ bgfx::setUniform(u_depthScaleOffset, depthScaleOffset);
- MeshState* state[2];
- state[0] = meshStateCreate();
- state[0]->m_state = 0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_DEPTH_WRITE
- | BGFX_STATE_DEPTH_TEST_LESS
- | BGFX_STATE_CULL_CCW
- | BGFX_STATE_MSAA
- ;
- state[0]->m_program = progShadow;
- state[0]->m_viewId = RENDER_SHADOW_PASS_ID;
- state[0]->m_numTextures = 0;
-
- state[1] = meshStateCreate();
- state[1]->m_state = 0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_DEPTH_WRITE
- | BGFX_STATE_DEPTH_TEST_LESS
- | BGFX_STATE_CULL_CCW
- | BGFX_STATE_MSAA
- ;
- state[1]->m_program = progMesh;
- state[1]->m_viewId = RENDER_SCENE_PASS_ID;
- state[1]->m_numTextures = 1;
- state[1]->m_textures[0].m_flags = UINT32_MAX;
- state[1]->m_textures[0].m_stage = 0;
- state[1]->m_textures[0].m_sampler = u_shadowMap;
- state[1]->m_textures[0].m_texture = shadowMapTexture;
-
- // Set view and projection matrices.
- float view[16];
- float proj[16];
-
- float eye[3] = { 0.0f, 30.0f, -60.0f };
- float at[3] = { 0.0f, 5.0f, 0.0f };
- bx::mtxLookAt(view, eye, at);
-
- const float aspect = float(int32_t(width) ) / float(int32_t(height) );
- bx::mtxProj(proj, 60.0f, aspect, 0.1f, 1000.0f, bgfx::getCaps()->homogeneousDepth);
-
- // Time acumulators.
- float timeAccumulatorLight = 0.0f;
- float timeAccumulatorScene = 0.0f;
-
- entry::MouseState mouseState;
- while (!entry::processEvents(width, height, debug, reset, &mouseState) )
- {
- // Time.
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
- const float deltaTime = float(frameTime/freq);
-
- // Update time accumulators.
- timeAccumulatorLight += deltaTime;
- timeAccumulatorScene += deltaTime;
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/15-shadowmaps-simple");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Shadow maps example (technique: %s).", shadowSamplerSupported ? "depth texture and shadow samplers" : "shadow depth packed into color texture");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- // Setup lights.
- float lightPos[4];
- lightPos[0] = -bx::fcos(timeAccumulatorLight);
- lightPos[1] = -1.0f;
- lightPos[2] = -bx::fsin(timeAccumulatorLight);
- lightPos[3] = 0.0f;
-
- bgfx::setUniform(u_lightPos, lightPos);
-
- // Setup instance matrices.
- float mtxFloor[16];
- bx::mtxSRT(mtxFloor
- , 30.0f, 30.0f, 30.0f
- , 0.0f, 0.0f, 0.0f
- , 0.0f, 0.0f, 0.0f
- );
+ // Create vertex stream declaration.
+ PosNormalVertex::init();
- float mtxBunny[16];
- bx::mtxSRT(mtxBunny
- , 5.0f, 5.0f, 5.0f
- , 0.0f, bx::pi - timeAccumulatorScene, 0.0f
- , 15.0f, 5.0f, 0.0f
- );
+ // Meshes.
+ m_bunny = meshLoad("meshes/bunny.bin");
+ m_cube = meshLoad("meshes/cube.bin");
+ m_hollowcube = meshLoad("meshes/hollowcube.bin");
- float mtxHollowcube[16];
- bx::mtxSRT(mtxHollowcube
- , 2.5f, 2.5f, 2.5f
- , 0.0f, 1.56f - timeAccumulatorScene, 0.0f
- , 0.0f, 10.0f, 0.0f
+ m_vbh = bgfx::createVertexBuffer(
+ bgfx::makeRef(s_hplaneVertices, sizeof(s_hplaneVertices) )
+ , PosNormalVertex::ms_decl
);
- float mtxCube[16];
- bx::mtxSRT(mtxCube
- , 2.5f, 2.5f, 2.5f
- , 0.0f, 1.56f - timeAccumulatorScene, 0.0f
- , -15.0f, 5.0f, 0.0f
+ m_ibh = bgfx::createIndexBuffer(
+ bgfx::makeRef(s_planeIndices, sizeof(s_planeIndices) )
);
- // Define matrices.
- float lightView[16];
- float lightProj[16];
+ // Render targets.
+ m_shadowMapSize = 512;
+
+ // Shadow samplers are supported at least partially supported if texture
+ // compare less equal feature is supported.
+ m_shadowSamplerSupported = 0 != (caps->supported & BGFX_CAPS_TEXTURE_COMPARE_LEQUAL);
+
+ bgfx::TextureHandle shadowMapTexture;
+
+ if (m_shadowSamplerSupported)
+ {
+ // Depth textures and shadow samplers are supported.
+ m_progShadow = loadProgram("vs_sms_shadow", "fs_sms_shadow");
+ m_progMesh = loadProgram("vs_sms_mesh", "fs_sms_mesh");
+
+ bgfx::TextureHandle fbtextures[] =
+ {
+ bgfx::createTexture2D(
+ m_shadowMapSize
+ , m_shadowMapSize
+ , false
+ , 1
+ , bgfx::TextureFormat::D16
+ , BGFX_TEXTURE_RT | BGFX_TEXTURE_COMPARE_LEQUAL
+ ),
+ };
+ shadowMapTexture = fbtextures[0];
+ m_shadowMapFB = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
+ }
+ else
+ {
+ // Depth textures and shadow samplers are not supported. Use float
+ // depth packing into color buffer instead.
+ m_progShadow = loadProgram("vs_sms_shadow_pd", "fs_sms_shadow_pd");
+ m_progMesh = loadProgram("vs_sms_mesh", "fs_sms_mesh_pd");
+
+ bgfx::TextureHandle fbtextures[] =
+ {
+ bgfx::createTexture2D(
+ m_shadowMapSize
+ , m_shadowMapSize
+ , false
+ , 1
+ , bgfx::TextureFormat::BGRA8
+ , BGFX_TEXTURE_RT
+ ),
+ bgfx::createTexture2D(
+ m_shadowMapSize
+ , m_shadowMapSize
+ , false
+ , 1
+ , bgfx::TextureFormat::D16
+ , BGFX_TEXTURE_RT_WRITE_ONLY
+ ),
+ };
+ shadowMapTexture = fbtextures[0];
+ m_shadowMapFB = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
+ }
+
+ m_state[0] = meshStateCreate();
+ m_state[0]->m_state = 0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_WRITE
+ | BGFX_STATE_DEPTH_TEST_LESS
+ | BGFX_STATE_CULL_CCW
+ | BGFX_STATE_MSAA
+ ;
+ m_state[0]->m_program = m_progShadow;
+ m_state[0]->m_viewId = RENDER_SHADOW_PASS_ID;
+ m_state[0]->m_numTextures = 0;
+
+ m_state[1] = meshStateCreate();
+ m_state[1]->m_state = 0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_WRITE
+ | BGFX_STATE_DEPTH_TEST_LESS
+ | BGFX_STATE_CULL_CCW
+ | BGFX_STATE_MSAA
+ ;
+ m_state[1]->m_program = m_progMesh;
+ m_state[1]->m_viewId = RENDER_SCENE_PASS_ID;
+ m_state[1]->m_numTextures = 1;
+ m_state[1]->m_textures[0].m_flags = UINT32_MAX;
+ m_state[1]->m_textures[0].m_stage = 0;
+ m_state[1]->m_textures[0].m_sampler = s_shadowMap;
+ m_state[1]->m_textures[0].m_texture = shadowMapTexture;
+
+ // Set view and projection matrices.
+
+ float eye[3] = { 0.0f, 30.0f, -60.0f };
+ float at[3] = { 0.0f, 5.0f, 0.0f };
+ bx::mtxLookAt(m_view, eye, at);
+
+ const float aspect = float(int32_t(m_width) ) / float(int32_t(m_height) );
+ bx::mtxProj(m_proj, 60.0f, aspect, 0.1f, 1000.0f, bgfx::getCaps()->homogeneousDepth);
+
+ m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
+ }
- eye[0] = -lightPos[0];
- eye[1] = -lightPos[1];
- eye[2] = -lightPos[2];
+ virtual int shutdown() override
+ {
+ imguiDestroy();
- at[0] = 0.0f;
- at[1] = 0.0f;
- at[2] = 0.0f;
+ meshUnload(m_bunny);
+ meshUnload(m_cube);
+ meshUnload(m_hollowcube);
- bx::mtxLookAt(lightView, eye, at);
+ meshStateDestroy(m_state[0]);
+ meshStateDestroy(m_state[1]);
- const float area = 30.0f;
- bx::mtxOrtho(lightProj, -area, area, -area, area, -100.0f, 100.0f, 0.0f, flipV);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_ibh);
- bgfx::setViewRect(RENDER_SHADOW_PASS_ID, 0, 0, shadowMapSize, shadowMapSize);
- bgfx::setViewFrameBuffer(RENDER_SHADOW_PASS_ID, shadowMapFB);
- bgfx::setViewTransform(RENDER_SHADOW_PASS_ID, lightView, lightProj);
+ bgfx::destroy(m_progShadow);
+ bgfx::destroy(m_progMesh);
- bgfx::setViewRect(RENDER_SCENE_PASS_ID, 0, 0, uint16_t(width), uint16_t(height) );
- bgfx::setViewTransform(RENDER_SCENE_PASS_ID, view, proj);
+ bgfx::destroy(m_shadowMapFB);
- // Clear backbuffer and shadowmap framebuffer at beginning.
- bgfx::setViewClear(RENDER_SHADOW_PASS_ID
- , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
- , 0x303030ff, 1.0f, 0
- );
+ bgfx::destroy(s_shadowMap);
+ bgfx::destroy(u_lightPos);
+ bgfx::destroy(u_lightMtx);
+ bgfx::destroy(u_depthScaleOffset);
- bgfx::setViewClear(RENDER_SCENE_PASS_ID
- , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
- , 0x303030ff, 1.0f, 0
- );
+ // Shutdown bgfx.
+ bgfx::shutdown();
- // Render.
- float mtxShadow[16];
- float lightMtx[16];
+ return 0;
+ }
- const float sy = flipV ? 0.5f : -0.5f;
- const float mtxCrop[16] =
- {
- 0.5f, 0.0f, 0.0f, 0.0f,
- 0.0f, sy, 0.0f, 0.0f,
- 0.0f, 0.0f, depthScale, 0.0f,
- 0.5f, 0.5f, depthOffset, 1.0f,
- };
-
- float mtxTmp[16];
- bx::mtxMul(mtxTmp, lightProj, mtxCrop);
- bx::mtxMul(mtxShadow, lightView, mtxTmp);
-
- // Floor.
- bx::mtxMul(lightMtx, mtxFloor, mtxShadow);
- uint32_t cached = bgfx::setTransform(mtxFloor);
- for (uint32_t pass = 0; pass < 2; ++pass)
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- const MeshState& st = *state[pass];
- bgfx::setTransform(cached);
- for (uint8_t tex = 0; tex < st.m_numTextures; ++tex)
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
+ int64_t now = bx::getHPCounter();
+ const double freq = double(bx::getHPFrequency() );
+ float time = float( (now-m_timeOffset)/freq);
+
+ // Setup lights.
+ float lightPos[4];
+ lightPos[0] = -bx::fcos(time);
+ lightPos[1] = -1.0f;
+ lightPos[2] = -bx::fsin(time);
+ lightPos[3] = 0.0f;
+
+ bgfx::setUniform(u_lightPos, lightPos);
+
+ // Setup instance matrices.
+ float mtxFloor[16];
+ bx::mtxSRT(mtxFloor
+ , 30.0f, 30.0f, 30.0f
+ , 0.0f, 0.0f, 0.0f
+ , 0.0f, 0.0f, 0.0f
+ );
+
+ float mtxBunny[16];
+ bx::mtxSRT(mtxBunny
+ , 5.0f, 5.0f, 5.0f
+ , 0.0f, bx::kPi - time, 0.0f
+ , 15.0f, 5.0f, 0.0f
+ );
+
+ float mtxHollowcube[16];
+ bx::mtxSRT(mtxHollowcube
+ , 2.5f, 2.5f, 2.5f
+ , 0.0f, 1.56f - time, 0.0f
+ , 0.0f, 10.0f, 0.0f
+ );
+
+ float mtxCube[16];
+ bx::mtxSRT(mtxCube
+ , 2.5f, 2.5f, 2.5f
+ , 0.0f, 1.56f - time, 0.0f
+ , -15.0f, 5.0f, 0.0f
+ );
+
+ // Define matrices.
+ float lightView[16];
+ float lightProj[16];
+
+ float eye[3] = { -lightPos[0], -lightPos[1], -lightPos[2] };
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+
+ bx::mtxLookAt(lightView, eye, at);
+
+ const bgfx::Caps* caps = bgfx::getCaps();
+ const float area = 30.0f;
+ bx::mtxOrtho(lightProj, -area, area, -area, area, -100.0f, 100.0f, 0.0f, caps->homogeneousDepth);
+
+ bgfx::setViewRect(RENDER_SHADOW_PASS_ID, 0, 0, m_shadowMapSize, m_shadowMapSize);
+ bgfx::setViewFrameBuffer(RENDER_SHADOW_PASS_ID, m_shadowMapFB);
+ bgfx::setViewTransform(RENDER_SHADOW_PASS_ID, lightView, lightProj);
+
+ bgfx::setViewRect(RENDER_SCENE_PASS_ID, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ bgfx::setViewTransform(RENDER_SCENE_PASS_ID, m_view, m_proj);
+
+ // Clear backbuffer and shadowmap framebuffer at beginning.
+ bgfx::setViewClear(RENDER_SHADOW_PASS_ID
+ , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
+ , 0x303030ff, 1.0f, 0
+ );
+
+ bgfx::setViewClear(RENDER_SCENE_PASS_ID
+ , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
+ , 0x303030ff, 1.0f, 0
+ );
+
+ // Render.
+ float mtxShadow[16];
+ float lightMtx[16];
+
+ const float sy = caps->originBottomLeft ? 0.5f : -0.5f;
+ const float sz = caps->homogeneousDepth ? 0.5f : 1.0f;
+ const float tz = caps->homogeneousDepth ? 0.5f : 0.0f;
+ const float mtxCrop[16] =
+ {
+ 0.5f, 0.0f, 0.0f, 0.0f,
+ 0.0f, sy, 0.0f, 0.0f,
+ 0.0f, 0.0f, sz, 0.0f,
+ 0.5f, 0.5f, tz, 1.0f,
+ };
+
+ float mtxTmp[16];
+ bx::mtxMul(mtxTmp, lightProj, mtxCrop);
+ bx::mtxMul(mtxShadow, lightView, mtxTmp);
+
+ // Floor.
+ bx::mtxMul(lightMtx, mtxFloor, mtxShadow);
+ uint32_t cached = bgfx::setTransform(mtxFloor);
+ for (uint32_t pass = 0; pass < 2; ++pass)
{
- const MeshState::Texture& texture = st.m_textures[tex];
- bgfx::setTexture(texture.m_stage
+ const MeshState& st = *m_state[pass];
+ bgfx::setTransform(cached);
+ for (uint8_t tex = 0; tex < st.m_numTextures; ++tex)
+ {
+ const MeshState::Texture& texture = st.m_textures[tex];
+ bgfx::setTexture(texture.m_stage
, texture.m_sampler
, texture.m_texture
, texture.m_flags
);
+ }
+ bgfx::setUniform(u_lightMtx, lightMtx);
+ bgfx::setIndexBuffer(m_ibh);
+ bgfx::setVertexBuffer(0, m_vbh);
+ bgfx::setState(st.m_state);
+ bgfx::submit(st.m_viewId, st.m_program);
}
+
+ // Bunny.
+ bx::mtxMul(lightMtx, mtxBunny, mtxShadow);
+ bgfx::setUniform(u_lightMtx, lightMtx);
+ meshSubmit(m_bunny, &m_state[0], 1, mtxBunny);
+ bgfx::setUniform(u_lightMtx, lightMtx);
+ meshSubmit(m_bunny, &m_state[1], 1, mtxBunny);
+
+ // Hollow cube.
+ bx::mtxMul(lightMtx, mtxHollowcube, mtxShadow);
+ bgfx::setUniform(u_lightMtx, lightMtx);
+ meshSubmit(m_hollowcube, &m_state[0], 1, mtxHollowcube);
+ bgfx::setUniform(u_lightMtx, lightMtx);
+ meshSubmit(m_hollowcube, &m_state[1], 1, mtxHollowcube);
+
+ // Cube.
+ bx::mtxMul(lightMtx, mtxCube, mtxShadow);
+ bgfx::setUniform(u_lightMtx, lightMtx);
+ meshSubmit(m_cube, &m_state[0], 1, mtxCube);
bgfx::setUniform(u_lightMtx, lightMtx);
- bgfx::setIndexBuffer(ibh);
- bgfx::setVertexBuffer(vbh);
- bgfx::setState(st.m_state);
- bgfx::submit(st.m_viewId, st.m_program);
+ meshSubmit(m_cube, &m_state[1], 1, mtxCube);
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
}
- // Bunny.
- bx::mtxMul(lightMtx, mtxBunny, mtxShadow);
- bgfx::setUniform(u_lightMtx, lightMtx);
- meshSubmit(bunny, &state[0], 1, mtxBunny);
- bgfx::setUniform(u_lightMtx, lightMtx);
- meshSubmit(bunny, &state[1], 1, mtxBunny);
-
- // Hollow cube.
- bx::mtxMul(lightMtx, mtxHollowcube, mtxShadow);
- bgfx::setUniform(u_lightMtx, lightMtx);
- meshSubmit(hollowcube, &state[0], 1, mtxHollowcube);
- bgfx::setUniform(u_lightMtx, lightMtx);
- meshSubmit(hollowcube, &state[1], 1, mtxHollowcube);
-
- // Cube.
- bx::mtxMul(lightMtx, mtxCube, mtxShadow);
- bgfx::setUniform(u_lightMtx, lightMtx);
- meshSubmit(cube, &state[0], 1, mtxCube);
- bgfx::setUniform(u_lightMtx, lightMtx);
- meshSubmit(cube, &state[1], 1, mtxCube);
-
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ return false;
}
- meshUnload(bunny);
- meshUnload(cube);
- meshUnload(hollowcube);
+ entry::MouseState m_mouseState;
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+
+ bgfx::UniformHandle s_shadowMap;
+ bgfx::UniformHandle u_lightPos;
+ bgfx::UniformHandle u_lightMtx;
+
+ bgfx::UniformHandle u_depthScaleOffset;
- meshStateDestroy(state[0]);
- meshStateDestroy(state[1]);
+ Mesh* m_bunny;
+ Mesh* m_cube;
+ Mesh* m_hollowcube;
- bgfx::destroyVertexBuffer(vbh);
- bgfx::destroyIndexBuffer(ibh);
+ bgfx::VertexBufferHandle m_vbh;
+ bgfx::IndexBufferHandle m_ibh;
- bgfx::destroyProgram(progShadow);
- bgfx::destroyProgram(progMesh);
+ uint16_t m_shadowMapSize;
- bgfx::destroyFrameBuffer(shadowMapFB);
+ bgfx::ProgramHandle m_progShadow;
+ bgfx::ProgramHandle m_progMesh;
+ bgfx::FrameBufferHandle m_shadowMapFB;
- bgfx::destroyUniform(u_shadowMap);
- bgfx::destroyUniform(u_lightPos);
- bgfx::destroyUniform(u_lightMtx);
- bgfx::destroyUniform(u_depthScaleOffset);
+ bool m_shadowSamplerSupported;
+
+ MeshState* m_state[2];
+
+ float m_view[16];
+ float m_proj[16];
+
+ int64_t m_timeOffset;
+};
- // Shutdown bgfx.
- bgfx::shutdown();
+} // namespace
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleShadowmapsSimple, "15-shadowmaps-simple", "Shadow maps example");
diff --git a/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp b/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp
index 191a3426df3..9ee44d7fbbb 100644
--- a/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp
+++ b/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp
@@ -12,12 +12,20 @@
#include <bgfx/bgfx.h>
#include <bx/timer.h>
-#include <bx/fpumath.h>
-#include <bx/crtimpl.h>
+#include <bx/math.h>
+#include <bx/file.h>
#include "entry/entry.h"
#include "camera.h"
#include "imgui/imgui.h"
+namespace bgfx
+{
+ int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
+}
+
+namespace
+{
+
#define RENDERVIEW_SHADOWMAP_0_ID 1
#define RENDERVIEW_SHADOWMAP_1_ID 2
#define RENDERVIEW_SHADOWMAP_2_ID 3
@@ -38,31 +46,6 @@
#define RENDERVIEW_DRAWDEPTH_2_ID 18
#define RENDERVIEW_DRAWDEPTH_3_ID 19
-uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w)
-{
- union
- {
- uint32_t ui32;
- uint8_t arr[4];
- } un;
-
- un.arr[0] = _x;
- un.arr[1] = _y;
- un.arr[2] = _z;
- un.arr[3] = _w;
-
- return un.ui32;
-}
-
-uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f)
-{
- const uint8_t xx = uint8_t(_x*127.0f + 128.0f);
- const uint8_t yy = uint8_t(_y*127.0f + 128.0f);
- const uint8_t zz = uint8_t(_z*127.0f + 128.0f);
- const uint8_t ww = uint8_t(_w*127.0f + 128.0f);
- return packUint32(xx, yy, zz, ww);
-}
-
struct LightType
{
enum Enum
@@ -160,33 +143,6 @@ struct ShadowMapRenderTargets
};
};
-void imguiEnum(SmImpl::Enum& _enum)
-{
- _enum = (SmImpl::Enum)imguiChoose(_enum
- , "Hard"
- , "PCF"
- , "VSM"
- , "ESM"
- );
-}
-
-void imguiEnum(DepthImpl::Enum& _enum)
-{
- _enum = (DepthImpl::Enum)imguiChoose(_enum
- , "InvZ"
- , "Linear"
- );
-}
-
-void imguiEnum(LightType::Enum& _enum)
-{
- _enum = (LightType::Enum)imguiChoose(_enum
- , "Spot light"
- , "Point light"
- , "Directional light"
- );
-}
-
struct PosNormalTexcoordVertex
{
float m_x;
@@ -200,18 +156,18 @@ struct PosNormalTexcoordVertex
static const float s_texcoord = 5.0f;
static PosNormalTexcoordVertex s_hplaneVertices[] =
{
- { -1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, s_texcoord },
- { 1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, 0.0f },
- { -1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, s_texcoord },
- { 1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, 0.0f },
+ { -1.0f, 0.0f, 1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), s_texcoord, s_texcoord },
+ { 1.0f, 0.0f, 1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), s_texcoord, 0.0f },
+ { -1.0f, 0.0f, -1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), 0.0f, s_texcoord },
+ { 1.0f, 0.0f, -1.0f, encodeNormalRgba8(0.0f, 1.0f, 0.0f), 0.0f, 0.0f },
};
static PosNormalTexcoordVertex s_vplaneVertices[] =
{
- { -1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 1.0f },
- { 1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 0.0f },
- { -1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 1.0f },
- { 1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 0.0f },
+ { -1.0f, 1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 1.0f, 1.0f },
+ { 1.0f, 1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 1.0f, 0.0f },
+ { -1.0f, -1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 0.0f, 1.0f },
+ { 1.0f, -1.0f, 0.0f, encodeNormalRgba8(0.0f, 0.0f, -1.0f), 0.0f, 0.0f },
};
static const uint16_t s_planeIndices[] =
@@ -536,34 +492,34 @@ struct Uniforms
void destroy()
{
- bgfx::destroyUniform(u_params0);
- bgfx::destroyUniform(u_params1);
- bgfx::destroyUniform(u_params2);
- bgfx::destroyUniform(u_color);
- bgfx::destroyUniform(u_smSamplingParams);
- bgfx::destroyUniform(u_csmFarDistances);
-
- bgfx::destroyUniform(u_materialKa);
- bgfx::destroyUniform(u_materialKd);
- bgfx::destroyUniform(u_materialKs);
-
- bgfx::destroyUniform(u_tetraNormalGreen);
- bgfx::destroyUniform(u_tetraNormalYellow);
- bgfx::destroyUniform(u_tetraNormalBlue);
- bgfx::destroyUniform(u_tetraNormalRed);
-
- bgfx::destroyUniform(u_shadowMapMtx0);
- bgfx::destroyUniform(u_shadowMapMtx1);
- bgfx::destroyUniform(u_shadowMapMtx2);
- bgfx::destroyUniform(u_shadowMapMtx3);
-
- bgfx::destroyUniform(u_lightMtx);
- bgfx::destroyUniform(u_lightPosition);
- bgfx::destroyUniform(u_lightAmbientPower);
- bgfx::destroyUniform(u_lightDiffusePower);
- bgfx::destroyUniform(u_lightSpecularPower);
- bgfx::destroyUniform(u_lightSpotDirectionInner);
- bgfx::destroyUniform(u_lightAttenuationSpotOuter);
+ bgfx::destroy(u_params0);
+ bgfx::destroy(u_params1);
+ bgfx::destroy(u_params2);
+ bgfx::destroy(u_color);
+ bgfx::destroy(u_smSamplingParams);
+ bgfx::destroy(u_csmFarDistances);
+
+ bgfx::destroy(u_materialKa);
+ bgfx::destroy(u_materialKd);
+ bgfx::destroy(u_materialKs);
+
+ bgfx::destroy(u_tetraNormalGreen);
+ bgfx::destroy(u_tetraNormalYellow);
+ bgfx::destroy(u_tetraNormalBlue);
+ bgfx::destroy(u_tetraNormalRed);
+
+ bgfx::destroy(u_shadowMapMtx0);
+ bgfx::destroy(u_shadowMapMtx1);
+ bgfx::destroy(u_shadowMapMtx2);
+ bgfx::destroy(u_shadowMapMtx3);
+
+ bgfx::destroy(u_lightMtx);
+ bgfx::destroy(u_lightPosition);
+ bgfx::destroy(u_lightAmbientPower);
+ bgfx::destroy(u_lightDiffusePower);
+ bgfx::destroy(u_lightSpecularPower);
+ bgfx::destroy(u_lightSpotDirectionInner);
+ bgfx::destroy(u_lightAttenuationSpotOuter);
}
union
@@ -841,8 +797,8 @@ struct Group
void reset()
{
- m_vbh.idx = bgfx::invalidHandle;
- m_ibh.idx = bgfx::invalidHandle;
+ m_vbh.idx = bgfx::kInvalidHandle;
+ m_ibh.idx = bgfx::kInvalidHandle;
m_prims.clear();
}
@@ -854,11 +810,6 @@ struct Group
PrimitiveArray m_prims;
};
-namespace bgfx
-{
- int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
-}
-
struct Mesh
{
void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices)
@@ -973,11 +924,11 @@ struct Mesh
for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it)
{
const Group& group = *it;
- bgfx::destroyVertexBuffer(group.m_vbh);
+ bgfx::destroy(group.m_vbh);
- if (bgfx::invalidHandle != group.m_ibh.idx)
+ if (bgfx::kInvalidHandle != group.m_ibh.idx)
{
- bgfx::destroyIndexBuffer(group.m_ibh);
+ bgfx::destroy(group.m_ibh);
}
}
m_groups.clear();
@@ -1001,10 +952,10 @@ struct Mesh
// Set model matrix for rendering.
bgfx::setTransform(_mtx);
bgfx::setIndexBuffer(group.m_ibh);
- bgfx::setVertexBuffer(group.m_vbh);
+ bgfx::setVertexBuffer(0, group.m_vbh);
// Set textures.
- if (bgfx::invalidHandle != _texture.idx)
+ if (bgfx::kInvalidHandle != _texture.idx)
{
bgfx::setTexture(0, s_texColor, _texture);
}
@@ -1106,17 +1057,17 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBott
vertex[2].m_u = maxu;
vertex[2].m_v = maxv;
- bgfx::setVertexBuffer(&vb);
+ bgfx::setVertexBuffer(0, &vb);
}
}
void worldSpaceFrustumCorners(float* _corners24f
- , float _near
- , float _far
- , float _projWidth
- , float _projHeight
- , const float* __restrict _invViewMtx
- )
+ , float _near
+ , float _far
+ , float _projWidth
+ , float _projHeight
+ , const float* __restrict _invViewMtx
+ )
{
// Define frustum corners in view space.
const float nw = _near * _projWidth;
@@ -1239,7 +1190,7 @@ struct Programs
{
for (uint8_t kk = 0; kk < SmImpl::Count; ++kk)
{
- bgfx::destroyProgram(m_colorLighting[ii][jj][kk]);
+ bgfx::destroy(m_colorLighting[ii][jj][kk]);
}
}
}
@@ -1249,32 +1200,32 @@ struct Programs
{
for (uint8_t jj = 0; jj < PackDepth::Count; ++jj)
{
- bgfx::destroyProgram(m_packDepth[ii][jj]);
+ bgfx::destroy(m_packDepth[ii][jj]);
}
}
// Draw depth.
for (uint8_t ii = 0; ii < PackDepth::Count; ++ii)
{
- bgfx::destroyProgram(m_drawDepth[ii]);
+ bgfx::destroy(m_drawDepth[ii]);
}
// Hblur.
for (uint8_t ii = 0; ii < PackDepth::Count; ++ii)
{
- bgfx::destroyProgram(m_hBlur[ii]);
+ bgfx::destroy(m_hBlur[ii]);
}
// Vblur.
for (uint8_t ii = 0; ii < PackDepth::Count; ++ii)
{
- bgfx::destroyProgram(m_vBlur[ii]);
+ bgfx::destroy(m_vBlur[ii]);
}
// Misc.
- bgfx::destroyProgram(m_colorTexture);
- bgfx::destroyProgram(m_texture);
- bgfx::destroyProgram(m_black);
+ bgfx::destroy(m_colorTexture);
+ bgfx::destroy(m_texture);
+ bgfx::destroy(m_black);
}
bgfx::ProgramHandle m_black;
@@ -1310,1863 +1261,1993 @@ struct ShadowMapSettings
#undef IMGUI_FLOAT_PARAM
};
-int _main_(int _argc, char** _argv)
+struct SceneSettings
{
- Args args(_argc, _argv);
-
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
-
- ViewState viewState(1280, 720);
- ClearValues clearValues(0x00000000, 1.0f, 0);
-
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(viewState.m_width, viewState.m_height, reset);
-
- // Enable debug text.
- bgfx::setDebug(debug);
+ LightType::Enum m_lightType;
+ DepthImpl::Enum m_depthImpl;
+ SmImpl::Enum m_smImpl;
+ float m_spotOuterAngle;
+ float m_spotInnerAngle;
+ float m_fovXAdjust;
+ float m_fovYAdjust;
+ float m_coverageSpotL;
+ float m_splitDistribution;
+ int m_numSplits;
+ bool m_updateLights;
+ bool m_updateScene;
+ bool m_drawDepthBuffer;
+ bool m_showSmCoverage;
+ bool m_stencilPack;
+ bool m_stabilize;
+};
- // Setup root path for binary shaders. Shader binaries are different
- // for each renderer.
- switch (bgfx::getRendererType() )
+class ExampleShadowmaps : public entry::AppI
+{
+public:
+ ExampleShadowmaps(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
{
- case bgfx::RendererType::Direct3D9:
- s_texelHalf = 0.5f;
- break;
-
- case bgfx::RendererType::OpenGL:
- case bgfx::RendererType::OpenGLES:
- s_flipV = true;
- break;
-
- default:
- break;
}
- // Imgui.
- imguiCreate();
-
- // Uniforms.
- s_uniforms.init();
- s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
- s_shadowMap[0] = bgfx::createUniform("s_shadowMap0", bgfx::UniformType::Int1);
- s_shadowMap[1] = bgfx::createUniform("s_shadowMap1", bgfx::UniformType::Int1);
- s_shadowMap[2] = bgfx::createUniform("s_shadowMap2", bgfx::UniformType::Int1);
- s_shadowMap[3] = bgfx::createUniform("s_shadowMap3", bgfx::UniformType::Int1);
-
- // Programs.
- s_programs.init();
-
- // Vertex declarations.
- bgfx::VertexDecl PosNormalTexcoordDecl;
- PosNormalTexcoordDecl.begin()
- .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
- .add(bgfx::Attrib::Normal, 4, bgfx::AttribType::Uint8, true, true)
- .add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float)
- .end();
-
- bgfx::VertexDecl posDecl;
- posDecl.begin();
- posDecl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float);
- posDecl.end();
-
- PosColorTexCoord0Vertex::init();
-
- // Textures.
- bgfx::TextureHandle texFigure = loadTexture("textures/figure-rgba.dds");
- bgfx::TextureHandle texFlare = loadTexture("textures/flare.dds");
- bgfx::TextureHandle texFieldstone = loadTexture("textures/fieldstone-rgba.dds");
-
- // Meshes.
- Mesh bunnyMesh;
- Mesh treeMesh;
- Mesh cubeMesh;
- Mesh hollowcubeMesh;
- Mesh hplaneMesh;
- Mesh vplaneMesh;
- bunnyMesh.load("meshes/bunny.bin");
- treeMesh.load("meshes/tree.bin");
- cubeMesh.load("meshes/cube.bin");
- hollowcubeMesh.load("meshes/hollowcube.bin");
- hplaneMesh.load(s_hplaneVertices, BX_COUNTOF(s_hplaneVertices), PosNormalTexcoordDecl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
- vplaneMesh.load(s_vplaneVertices, BX_COUNTOF(s_vplaneVertices), PosNormalTexcoordDecl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
-
- // Materials.
- Material defaultMaterial =
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
- { { 1.0f, 1.0f, 1.0f, 0.0f } }, //ambient
- { { 1.0f, 1.0f, 1.0f, 0.0f } }, //diffuse
- { { 1.0f, 1.0f, 1.0f, 0.0f } }, //specular, exponent
- };
+ Args args(_argc, _argv);
- // Lights.
- Light pointLight =
- {
- { { 0.0f, 0.0f, 0.0f, 1.0f } }, //position
- { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore
- { { 1.0f, 1.0f, 1.0f, 0.0f } }, //ambient
- { { 1.0f, 1.0f, 1.0f, 850.0f } }, //diffuse
- { { 1.0f, 1.0f, 1.0f, 0.0f } }, //specular
- { { 0.0f,-0.4f,-0.6f, 0.0f } }, //spotdirection, spotexponent
- { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore
- { { 1.0f, 0.0f, 1.0f, 91.0f } }, //attenuation, spotcutoff
- };
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
- Light directionalLight =
- {
- { { 0.5f,-1.0f, 0.1f, 0.0f } }, //position
- { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore
- { { 1.0f, 1.0f, 1.0f, 0.02f } }, //ambient
- { { 1.0f, 1.0f, 1.0f, 0.4f } }, //diffuse
- { { 1.0f, 1.0f, 1.0f, 0.0f } }, //specular
- { { 0.0f, 0.0f, 0.0f, 1.0f } }, //spotdirection, spotexponent
- { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore
- { { 0.0f, 0.0f, 0.0f, 1.0f } }, //attenuation, spotcutoff
- };
+ m_width = _width;
+ m_height = _height;
+ m_viewState = ViewState(uint16_t(m_width), uint16_t(m_height));
+ m_clearValues = ClearValues(0x00000000, 1.0f, 0);
- // Setup uniforms.
- float color[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
- float lightMtx[16];
- float shadowMapMtx[ShadowMapRenderTargets::Count][16];
- s_uniforms.setPtrs(&defaultMaterial
- , &pointLight
- , color
- , lightMtx
- , &shadowMapMtx[ShadowMapRenderTargets::First][0]
- , &shadowMapMtx[ShadowMapRenderTargets::Second][0]
- , &shadowMapMtx[ShadowMapRenderTargets::Third][0]
- , &shadowMapMtx[ShadowMapRenderTargets::Fourth][0]
- );
- s_uniforms.submitConstUniforms();
-
- // Settings.
- ShadowMapSettings smSettings[LightType::Count][DepthImpl::Count][SmImpl::Count] =
- {
- { //LightType::Spot
-
- { //DepthImpl::InvZ
-
- { //SmImpl::Hard
- 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.0035f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.0012f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Single][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw
- },
- { //SmImpl::PCF
- 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 99.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.007f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Single][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw
- },
- { //SmImpl::VSM
- 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 8.0f, 1.0f, 10.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.045f, 0.0f, 0.1f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0
- , 450.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack
- , &s_programs.m_colorLighting[SmType::Single][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw
- },
- { //SmImpl::ESM
- 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 3.0f, 1.0f, 10.0f, 0.01f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.02f, 0.0f, 0.3f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 9000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Single][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw
- }
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_viewState.m_width, m_viewState.m_height, m_reset);
- },
- { //DepthImpl::Linear
-
- { //SmImpl::Hard
- 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.0025f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.0012f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Single][DepthImpl::Linear][SmImpl::Hard] //m_progDraw
- },
- { //SmImpl::PCF
- 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 99.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.0025f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 2000.0f, 1.0f, 2000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Single][DepthImpl::Linear][SmImpl::PCF] //m_progDraw
- },
- { //SmImpl::VSM
- 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.006f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.02f, 0.0f, 0.1f, 0.00001f // m_customParam0
- , 300.0f, 1.0f, 1500.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack
- , &s_programs.m_colorLighting[SmType::Single][DepthImpl::Linear][SmImpl::VSM] //m_progDraw
- },
- { //SmImpl::ESM
- 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 0.01f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.0055f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Single][DepthImpl::Linear][SmImpl::ESM] //m_progDraw
- }
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- }
+ // Setup root path for binary shaders. Shader binaries are different
+ // for each renderer.
+ switch (bgfx::getRendererType() )
+ {
+ case bgfx::RendererType::Direct3D9:
+ s_texelHalf = 0.5f;
+ break;
- },
- { //LightType::Point
-
- { //DepthImpl::InvZ
-
- { //SmImpl::Hard
- 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.006f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 50.0f, 1.0f, 300.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
- , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw
- },
- { //SmImpl::PCF
- 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 99.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 50.0f, 1.0f, 300.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.001f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.001f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw
- },
- { //SmImpl::VSM
- 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 8.0f, 1.0f, 10.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.055f, 0.0f, 0.1f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0
- , 450.0f, 1.0f, 900.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
- , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack
- , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw
- },
- { //SmImpl::ESM
- 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 3.0f, 1.0f, 10.0f, 0.01f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.035f, 0.0f, 0.1f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 9000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
- , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw
- }
+ case bgfx::RendererType::OpenGL:
+ case bgfx::RendererType::OpenGLES:
+ s_flipV = true;
+ break;
- },
- { //DepthImpl::Linear
-
- { //SmImpl::Hard
- 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.003f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 120.0f, 1.0f, 300.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
- , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::Linear][SmImpl::Hard] //m_progDraw
- },
- { //SmImpl::PCF
- 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 99.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.0035f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 120.0f, 1.0f, 300.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.001f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.001f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::Linear][SmImpl::PCF] //m_progDraw
- },
- { //SmImpl::VSM
- 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.006f, 0.0f, 0.1f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.02f, 0.0f, 0.1f, 0.00001f // m_customParam0
- , 400.0f, 1.0f, 900.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
- , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack
- , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::Linear][SmImpl::VSM] //m_progDraw
- },
- { //SmImpl::ESM
- 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 0.01f // m_near
- , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.007f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 8000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
- , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::Linear][SmImpl::ESM] //m_progDraw
+ default:
+ break;
}
- }
+ // Imgui.
+ imguiCreate();
+
+ // Uniforms.
+ s_uniforms.init();
+ s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
+ s_shadowMap[0] = bgfx::createUniform("s_shadowMap0", bgfx::UniformType::Int1);
+ s_shadowMap[1] = bgfx::createUniform("s_shadowMap1", bgfx::UniformType::Int1);
+ s_shadowMap[2] = bgfx::createUniform("s_shadowMap2", bgfx::UniformType::Int1);
+ s_shadowMap[3] = bgfx::createUniform("s_shadowMap3", bgfx::UniformType::Int1);
+
+ // Programs.
+ s_programs.init();
+
+ // Vertex declarations.
+ bgfx::VertexDecl PosNormalTexcoordDecl;
+ PosNormalTexcoordDecl.begin()
+ .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
+ .add(bgfx::Attrib::Normal, 4, bgfx::AttribType::Uint8, true, true)
+ .add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float)
+ .end();
- },
- { //LightType::Directional
-
- { //DepthImpl::InvZ
-
- { //SmImpl::Hard
- 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
- , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw
- },
- { //SmImpl::PCF
- 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 99.0f, 1.0f // m_near
- , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw
- },
- { //SmImpl::VSM
- 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
- , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0
- , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
- , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack
- , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw
- },
- { //SmImpl::ESM
- 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 0.01f // m_near
- , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 9500.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
- , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw
- }
+ m_posDecl.begin();
+ m_posDecl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float);
+ m_posDecl.end();
- },
- { //DepthImpl::Linear
-
- { //SmImpl::Hard
- 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
- , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::Linear][SmImpl::Hard] //m_progDraw
- },
- { //SmImpl::PCF
- 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 99.0f, 1.0f // m_near
- , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
- , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
- , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::Linear][SmImpl::PCF] //m_progDraw
- },
- { //SmImpl::VSM
- 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 1.0f // m_near
- , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
- , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0
- , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
- , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack
- , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::Linear][SmImpl::VSM] //m_progDraw
- },
- { //SmImpl::ESM
- 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
- , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
- , 1.0f, 1.0f, 10.0f, 0.01f // m_near
- , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
- , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
- , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
- , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
- , 9500.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
- , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
- , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
- , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
- , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
- , true // m_doBlur
- , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
- , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::Linear][SmImpl::ESM] //m_progDraw
- }
+ PosColorTexCoord0Vertex::init();
- }
- }
- };
+ // Textures.
+ m_texFigure = loadTexture("textures/figure-rgba.dds");
+ m_texFlare = loadTexture("textures/flare.dds");
+ m_texFieldstone = loadTexture("textures/fieldstone-rgba.dds");
- struct SceneSettings
- {
- LightType::Enum m_lightType;
- DepthImpl::Enum m_depthImpl;
- SmImpl::Enum m_smImpl;
- float m_spotOuterAngle;
- float m_spotInnerAngle;
- float m_fovXAdjust;
- float m_fovYAdjust;
- float m_coverageSpotL;
- float m_numSplitsf;
- float m_splitDistribution;
- uint8_t m_numSplits;
- bool m_updateLights;
- bool m_updateScene;
- bool m_drawDepthBuffer;
- bool m_showSmCoverage;
- bool m_stencilPack;
- bool m_stabilize;
- };
+ // Meshes.
+ m_bunnyMesh.load("meshes/bunny.bin");
+ m_treeMesh.load("meshes/tree.bin");
+ m_cubeMesh.load("meshes/cube.bin");
+ m_hollowcubeMesh.load("meshes/hollowcube.bin");
+ m_hplaneMesh.load(s_hplaneVertices, BX_COUNTOF(s_hplaneVertices), PosNormalTexcoordDecl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
+ m_vplaneMesh.load(s_vplaneVertices, BX_COUNTOF(s_vplaneVertices), PosNormalTexcoordDecl, s_planeIndices, BX_COUNTOF(s_planeIndices) );
- SceneSettings settings;
- settings.m_lightType = LightType::SpotLight;
- settings.m_depthImpl = DepthImpl::InvZ;
- settings.m_smImpl = SmImpl::Hard;
- settings.m_spotOuterAngle = 45.0f;
- settings.m_spotInnerAngle = 30.0f;
- settings.m_fovXAdjust = 0.0f;
- settings.m_fovYAdjust = 0.0f;
- settings.m_coverageSpotL = 90.0f;
- settings.m_numSplitsf = 4.0f;
- settings.m_splitDistribution = 0.6f;
- settings.m_numSplits = uint8_t(settings.m_numSplitsf);
- settings.m_updateLights = true;
- settings.m_updateScene = true;
- settings.m_drawDepthBuffer = false;
- settings.m_showSmCoverage = false;
- settings.m_stencilPack = true;
- settings.m_stabilize = true;
-
- ShadowMapSettings* currentSmSettings = &smSettings[settings.m_lightType][settings.m_depthImpl][settings.m_smImpl];
-
- // Render targets.
- uint16_t shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo);
- uint16_t currentShadowMapSize = shadowMapSize;
- float currentShadowMapSizef = float(int16_t(currentShadowMapSize) );
- s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef;
- for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii)
- {
- bgfx::TextureHandle fbtextures[] =
+ // Materials.
+ m_defaultMaterial =
{
- bgfx::createTexture2D(currentShadowMapSize, currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
- bgfx::createTexture2D(currentShadowMapSize, currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
+ { { 1.0f, 1.0f, 1.0f, 0.0f } }, //ambient
+ { { 1.0f, 1.0f, 1.0f, 0.0f } }, //diffuse
+ { { 1.0f, 1.0f, 1.0f, 0.0f } }, //specular, exponent
};
- s_rtShadowMap[ii] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
- }
- s_rtBlur = bgfx::createFrameBuffer(currentShadowMapSize, currentShadowMapSize, bgfx::TextureFormat::BGRA8);
-
- // Setup camera.
- float initialPos[3] = { 0.0f, 60.0f, -105.0f };
- cameraCreate();
- cameraSetPosition(initialPos);
- cameraSetVerticalAngle(-0.45f);
-
- // Set view and projection matrices.
- const float camFovy = 60.0f;
- const float camAspect = float(int32_t(viewState.m_width) ) / float(int32_t(viewState.m_height) );
- const float camNear = 0.1f;
- const float camFar = 2000.0f;
- const float projHeight = 1.0f/bx::ftan(bx::toRad(camFovy)*0.5f);
- const float projWidth = projHeight * camAspect;
- bx::mtxProj(viewState.m_proj, camFovy, camAspect, camNear, camFar, bgfx::getCaps()->homogeneousDepth);
- cameraGetViewMtx(viewState.m_view);
-
- float timeAccumulatorLight = 0.0f;
- float timeAccumulatorScene = 0.0f;
-
- entry::MouseState mouseState;
- uint32_t width;
- uint32_t height;
- while (!entry::processEvents(width, height, debug, reset, &mouseState) )
- {
- viewState.m_width = uint16_t(width);
- viewState.m_height = uint16_t(height);
- // Imgui.
- imguiBeginFrame(mouseState.m_mx
- , mouseState.m_my
- , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , mouseState.m_mz
- , viewState.m_width
- , viewState.m_height
- );
-
- static int32_t rightScrollArea = 0;
- imguiBeginScrollArea("Settings", viewState.m_width - 256 - 10, 10, 256, 660, &rightScrollArea);
-
-#define IMGUI_FLOAT_SLIDER(_name, _val) \
- imguiSlider(_name \
- , _val \
- , *( ((float*)&_val)+1) \
- , *( ((float*)&_val)+2) \
- , *( ((float*)&_val)+3) \
- )
-
- imguiBool("Update lights", settings.m_updateLights);
- imguiBool("Update scene", settings.m_updateScene);
-
- imguiSeparatorLine();
- imguiLabel("Shadow map depth:");
- imguiEnum(settings.m_depthImpl);
- currentSmSettings = &smSettings[settings.m_lightType][settings.m_depthImpl][settings.m_smImpl];
-
- imguiSeparator();
- imguiBool("Draw depth buffer.", settings.m_drawDepthBuffer);
- if (settings.m_drawDepthBuffer)
+ // Lights.
+ m_pointLight =
{
- IMGUI_FLOAT_SLIDER("Depth value pow:", currentSmSettings->m_depthValuePow);
- }
-
- imguiSeparatorLine();
- imguiLabel("Shadow Map implementation:");
- imguiEnum(settings.m_smImpl);
- currentSmSettings = &smSettings[settings.m_lightType][settings.m_depthImpl][settings.m_smImpl];
+ { { 0.0f, 0.0f, 0.0f, 1.0f } }, //position
+ { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore
+ { { 1.0f, 1.0f, 1.0f, 0.0f } }, //ambient
+ { { 1.0f, 1.0f, 1.0f, 850.0f } }, //diffuse
+ { { 1.0f, 1.0f, 1.0f, 0.0f } }, //specular
+ { { 0.0f,-0.4f,-0.6f, 0.0f } }, //spotdirection, spotexponent
+ { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore
+ { { 1.0f, 0.0f, 1.0f, 91.0f } }, //attenuation, spotcutoff
+ };
- imguiSeparator();
- IMGUI_FLOAT_SLIDER("Bias:", currentSmSettings->m_bias);
- IMGUI_FLOAT_SLIDER("Normal offset:", currentSmSettings->m_normalOffset);
- imguiSeparator();
- if (LightType::DirectionalLight != settings.m_lightType)
+ m_directionalLight =
{
- IMGUI_FLOAT_SLIDER("Near plane:", currentSmSettings->m_near);
- }
- IMGUI_FLOAT_SLIDER("Far plane:", currentSmSettings->m_far);
+ { { 0.5f,-1.0f, 0.1f, 0.0f } }, //position
+ { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore
+ { { 1.0f, 1.0f, 1.0f, 0.02f } }, //ambient
+ { { 1.0f, 1.0f, 1.0f, 0.4f } }, //diffuse
+ { { 1.0f, 1.0f, 1.0f, 0.0f } }, //specular
+ { { 0.0f, 0.0f, 0.0f, 1.0f } }, //spotdirection, spotexponent
+ { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore
+ { { 0.0f, 0.0f, 0.0f, 1.0f } }, //attenuation, spotcutoff
+ };
- imguiSeparator();
- switch(settings.m_smImpl)
+ // Setup uniforms.
+ m_color[0] = m_color[1] = m_color[2] = m_color[3] = 1.0f;
+ s_uniforms.setPtrs(&m_defaultMaterial
+ , &m_pointLight
+ , m_color
+ , m_lightMtx
+ , &m_shadowMapMtx[ShadowMapRenderTargets::First][0]
+ , &m_shadowMapMtx[ShadowMapRenderTargets::Second][0]
+ , &m_shadowMapMtx[ShadowMapRenderTargets::Third][0]
+ , &m_shadowMapMtx[ShadowMapRenderTargets::Fourth][0]
+ );
+ s_uniforms.submitConstUniforms();
+
+ // Settings.
+ ShadowMapSettings smSettings[LightType::Count][DepthImpl::Count][SmImpl::Count] =
{
- case SmImpl::Hard:
- //imguiLabel("Hard");
- break;
+ { //LightType::Spot
+
+ { //DepthImpl::InvZ
+
+ { //SmImpl::Hard
+ 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.0035f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.0012f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Single][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw
+ },
+ { //SmImpl::PCF
+ 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 99.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.007f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Single][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw
+ },
+ { //SmImpl::VSM
+ 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 8.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.045f, 0.0f, 0.1f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0
+ , 450.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Single][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw
+ },
+ { //SmImpl::ESM
+ 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 3.0f, 1.0f, 10.0f, 0.01f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.02f, 0.0f, 0.3f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 9000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Single][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw
+ }
- case SmImpl::PCF:
- imguiLabel("PCF");
- IMGUI_FLOAT_SLIDER("X Offset:", currentSmSettings->m_xOffset);
- IMGUI_FLOAT_SLIDER("Y Offset:", currentSmSettings->m_yOffset);
- break;
+ },
+ { //DepthImpl::Linear
+
+ { //SmImpl::Hard
+ 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.0025f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.0012f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Single][DepthImpl::Linear][SmImpl::Hard] //m_progDraw
+ },
+ { //SmImpl::PCF
+ 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 99.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.0025f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 2000.0f, 1.0f, 2000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Single][DepthImpl::Linear][SmImpl::PCF] //m_progDraw
+ },
+ { //SmImpl::VSM
+ 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.006f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.02f, 0.0f, 0.1f, 0.00001f // m_customParam0
+ , 300.0f, 1.0f, 1500.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Single][DepthImpl::Linear][SmImpl::VSM] //m_progDraw
+ },
+ { //SmImpl::ESM
+ 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 0.01f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.0055f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Single][DepthImpl::Linear][SmImpl::ESM] //m_progDraw
+ }
- case SmImpl::VSM:
- imguiLabel("VSM");
- IMGUI_FLOAT_SLIDER("Min variance", currentSmSettings->m_customParam0);
- IMGUI_FLOAT_SLIDER("Depth multiplier", currentSmSettings->m_customParam1);
- imguiBool("Blur shadow map", currentSmSettings->m_doBlur);
- if (currentSmSettings->m_doBlur)
- {
- IMGUI_FLOAT_SLIDER("Blur X Offset:", currentSmSettings->m_xOffset);
- IMGUI_FLOAT_SLIDER("Blur Y Offset:", currentSmSettings->m_yOffset);
}
- break;
- case SmImpl::ESM:
- imguiLabel("ESM");
- IMGUI_FLOAT_SLIDER("ESM Hardness", currentSmSettings->m_customParam0);
- IMGUI_FLOAT_SLIDER("Depth multiplier", currentSmSettings->m_customParam1);
- imguiBool("Blur shadow map", currentSmSettings->m_doBlur);
- if (currentSmSettings->m_doBlur)
- {
- IMGUI_FLOAT_SLIDER("Blur X Offset:", currentSmSettings->m_xOffset);
- IMGUI_FLOAT_SLIDER("Blur Y Offset:", currentSmSettings->m_yOffset);
+ },
+ { //LightType::Point
+
+ { //DepthImpl::InvZ
+
+ { //SmImpl::Hard
+ 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.006f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 50.0f, 1.0f, 300.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw
+ },
+ { //SmImpl::PCF
+ 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 99.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 50.0f, 1.0f, 300.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.001f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.001f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw
+ },
+ { //SmImpl::VSM
+ 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 8.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.055f, 0.0f, 0.1f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0
+ , 450.0f, 1.0f, 900.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw
+ },
+ { //SmImpl::ESM
+ 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 3.0f, 1.0f, 10.0f, 0.01f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.035f, 0.0f, 0.1f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 9000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw
+ }
+
+ },
+ { //DepthImpl::Linear
+
+ { //SmImpl::Hard
+ 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.003f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 120.0f, 1.0f, 300.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::Linear][SmImpl::Hard] //m_progDraw
+ },
+ { //SmImpl::PCF
+ 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 99.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.0035f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 120.0f, 1.0f, 300.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.001f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.001f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::Linear][SmImpl::PCF] //m_progDraw
+ },
+ { //SmImpl::VSM
+ 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.006f, 0.0f, 0.1f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.02f, 0.0f, 0.1f, 0.00001f // m_customParam0
+ , 400.0f, 1.0f, 900.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::Linear][SmImpl::VSM] //m_progDraw
+ },
+ { //SmImpl::ESM
+ 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 0.01f // m_near
+ , 250.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.007f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 8000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset
+ , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Omni][DepthImpl::Linear][SmImpl::ESM] //m_progDraw
+ }
+
}
- break;
- default:
- break;
+ },
+ { //LightType::Directional
+
+ { //DepthImpl::InvZ
+
+ { //SmImpl::Hard
+ 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw
+ },
+ { //SmImpl::PCF
+ 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 99.0f, 1.0f // m_near
+ , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw
+ },
+ { //SmImpl::VSM
+ 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
+ , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0
+ , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw
+ },
+ { //SmImpl::ESM
+ 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 0.01f // m_near
+ , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 9500.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw
+ }
+
+ },
+ { //DepthImpl::Linear
+
+ { //SmImpl::Hard
+ 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::Linear][SmImpl::Hard] //m_progDraw
+ },
+ { //SmImpl::PCF
+ 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 99.0f, 1.0f // m_near
+ , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset
+ , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::Linear][SmImpl::PCF] //m_progDraw
+ },
+ { //SmImpl::VSM
+ 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 1.0f // m_near
+ , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
+ , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0
+ , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::Linear][SmImpl::VSM] //m_progDraw
+ },
+ { //SmImpl::ESM
+ 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo
+ , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow
+ , 1.0f, 1.0f, 10.0f, 0.01f // m_near
+ , 550.0f, 100.0f, 2000.0f, 50.0f // m_far
+ , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias
+ , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset
+ , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0
+ , 9500.0f, 1.0f, 15000.0f, 1.0f // m_customParam1
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum
+ , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset
+ , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset
+ , true // m_doBlur
+ , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack
+ , &s_programs.m_colorLighting[SmType::Cascade][DepthImpl::Linear][SmImpl::ESM] //m_progDraw
+ }
+
+ }
+ }
};
+ bx::memCopy(m_smSettings, smSettings, sizeof(smSettings));
+
+ m_settings.m_lightType = LightType::SpotLight;
+ m_settings.m_depthImpl = DepthImpl::InvZ;
+ m_settings.m_smImpl = SmImpl::Hard;
+ m_settings.m_spotOuterAngle = 45.0f;
+ m_settings.m_spotInnerAngle = 30.0f;
+ m_settings.m_fovXAdjust = 0.0f;
+ m_settings.m_fovYAdjust = 0.0f;
+ m_settings.m_coverageSpotL = 90.0f;
+ m_settings.m_splitDistribution = 0.6f;
+ m_settings.m_numSplits = 4;
+ m_settings.m_updateLights = true;
+ m_settings.m_updateScene = true;
+ m_settings.m_drawDepthBuffer = false;
+ m_settings.m_showSmCoverage = false;
+ m_settings.m_stencilPack = true;
+ m_settings.m_stabilize = true;
+
+ ShadowMapSettings* currentSmSettings = &m_smSettings[m_settings.m_lightType][m_settings.m_depthImpl][m_settings.m_smImpl];
+
+ // Render targets.
+ uint16_t shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo);
+ m_currentShadowMapSize = shadowMapSize;
+ float currentShadowMapSizef = float(int16_t(m_currentShadowMapSize) );
+ s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef;
+ for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii)
+ {
+ bgfx::TextureHandle fbtextures[] =
+ {
+ bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
+ bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
+ };
+ s_rtShadowMap[ii] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
+ }
+ s_rtBlur = bgfx::createFrameBuffer(m_currentShadowMapSize, m_currentShadowMapSize, bgfx::TextureFormat::BGRA8);
- imguiEndScrollArea();
+ // Setup camera.
+ float initialPos[3] = { 0.0f, 60.0f, -105.0f };
+ cameraCreate();
+ cameraSetPosition(initialPos);
+ cameraSetVerticalAngle(-0.45f);
- static int32_t leftScrollArea = 0;
- imguiBeginScrollArea("Light", 10, 70, 256, 334, &leftScrollArea);
+ m_timeAccumulatorLight = 0.0f;
+ m_timeAccumulatorScene = 0.0f;
+ }
- const LightType::Enum ltBefore = settings.m_lightType;
- imguiEnum(settings.m_lightType);
- const LightType::Enum ltAfter = settings.m_lightType;
- const bool bLtChanged = (ltAfter != ltBefore);
+ virtual int shutdown() override
+ {
+ m_bunnyMesh.unload();
+ m_treeMesh.unload();
+ m_cubeMesh.unload();
+ m_hollowcubeMesh.unload();
+ m_hplaneMesh.unload();
+ m_vplaneMesh.unload();
+
+ bgfx::destroy(m_texFigure);
+ bgfx::destroy(m_texFieldstone);
+ bgfx::destroy(m_texFlare);
+
+ for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii)
+ {
+ bgfx::destroy(s_rtShadowMap[ii]);
+ }
+ bgfx::destroy(s_rtBlur);
- imguiSeparator();
- imguiBool("Show shadow map coverage.", settings.m_showSmCoverage);
+ s_programs.destroy();
- imguiSeparator();
- imguiLabel("Shadow map resolution: %ux%u", currentShadowMapSize, currentShadowMapSize);
- IMGUI_FLOAT_SLIDER(" ", currentSmSettings->m_sizePwrTwo);
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(s_shadowMap[3]);
+ bgfx::destroy(s_shadowMap[2]);
+ bgfx::destroy(s_shadowMap[1]);
+ bgfx::destroy(s_shadowMap[0]);
- imguiSeparatorLine();
- if (LightType::SpotLight == settings.m_lightType)
- {
- imguiLabel("Spot light");
- imguiSlider("Shadow map area:", settings.m_coverageSpotL, 45.0f, 120.0f, 1.0f);
+ s_uniforms.destroy();
- imguiSeparator();
- imguiSlider("Spot outer cone:", settings.m_spotOuterAngle, 0.0f, 91.0f, 0.1f);
- imguiSlider("Spot inner cone:", settings.m_spotInnerAngle, 0.0f, 90.0f, 0.1f);
- }
- else if (LightType::PointLight == settings.m_lightType)
- {
- imguiLabel("Point light");
- imguiBool("Stencil pack", settings.m_stencilPack);
+ cameraDestroy();
+ imguiDestroy();
- imguiSlider("Fov X adjust:", settings.m_fovXAdjust, -20.0f, 20.0f, 0.0001f);
- imguiSlider("Fov Y adjust:", settings.m_fovYAdjust, -20.0f, 20.0f, 0.0001f);
- }
- else if (LightType::DirectionalLight == settings.m_lightType)
- {
- imguiLabel("Directional light");
- imguiBool("Stabilize cascades", settings.m_stabilize);
- imguiSlider("Cascade splits:", settings.m_numSplitsf, 1.0f, 4.0f, 1.0f);
- imguiSlider("Cascade distribution:", settings.m_splitDistribution, 0.0f, 1.0f, 0.001f);
- settings.m_numSplits = uint8_t(settings.m_numSplitsf);
- }
+ // Shutdown bgfx.
+ bgfx::shutdown();
-#undef IMGUI_FLOAT_SLIDER
+ return 0;
+ }
- imguiEndScrollArea();
- imguiEndFrame();
-
- // Update uniforms.
- s_uniforms.m_shadowMapBias = currentSmSettings->m_bias;
- s_uniforms.m_shadowMapOffset = currentSmSettings->m_normalOffset;
- s_uniforms.m_shadowMapParam0 = currentSmSettings->m_customParam0;
- s_uniforms.m_shadowMapParam1 = currentSmSettings->m_customParam1;
- s_uniforms.m_depthValuePow = currentSmSettings->m_depthValuePow;
- s_uniforms.m_XNum = currentSmSettings->m_xNum;
- s_uniforms.m_YNum = currentSmSettings->m_yNum;
- s_uniforms.m_XOffset = currentSmSettings->m_xOffset;
- s_uniforms.m_YOffset = currentSmSettings->m_yOffset;
- s_uniforms.m_showSmCoverage = float(settings.m_showSmCoverage);
- s_uniforms.m_lightPtr = (LightType::DirectionalLight == settings.m_lightType) ? &directionalLight : &pointLight;
-
- if (LightType::SpotLight == settings.m_lightType)
- {
- pointLight.m_attenuationSpotOuter.m_outer = settings.m_spotOuterAngle;
- pointLight.m_spotDirectionInner.m_inner = settings.m_spotInnerAngle;
- }
- else
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- pointLight.m_attenuationSpotOuter.m_outer = 91.0f; //above 90.0f means point light
- }
+ m_viewState.m_width = uint16_t(m_width);
+ m_viewState.m_height = uint16_t(m_height);
+
+ const bgfx::Caps* caps = bgfx::getCaps();
+
+ // Set view and projection matrices.
+ const float camFovy = 60.0f;
+ const float camAspect = float(int32_t(m_viewState.m_width) ) / float(int32_t(m_viewState.m_height) );
+ const float camNear = 0.1f;
+ const float camFar = 2000.0f;
+ const float projHeight = 1.0f/bx::ftan(bx::toRad(camFovy)*0.5f);
+ const float projWidth = projHeight * camAspect;
+ bx::mtxProj(m_viewState.m_proj, camFovy, camAspect, camNear, camFar, caps->homogeneousDepth);
+ cameraGetViewMtx(m_viewState.m_view);
+
+ float currentShadowMapSizef = float(int16_t(m_currentShadowMapSize) );
+ s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef;
- s_uniforms.submitPerFrameUniforms();
-
- // Time.
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
- const float deltaTime = float(frameTime/freq);
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/16-shadowmaps");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Shadow maps example.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- // Update camera.
- cameraUpdate(deltaTime, mouseState);
-
- // Update view mtx.
- cameraGetViewMtx(viewState.m_view);
-
- // Update lights.
- pointLight.computeViewSpaceComponents(viewState.m_view);
- directionalLight.computeViewSpaceComponents(viewState.m_view);
-
- // Update time accumulators.
- if (settings.m_updateLights) { timeAccumulatorLight += deltaTime; }
- if (settings.m_updateScene) { timeAccumulatorScene += deltaTime; }
-
- // Setup lights.
- pointLight.m_position.m_x = bx::fcos(timeAccumulatorLight) * 20.0f;
- pointLight.m_position.m_y = 26.0f;
- pointLight.m_position.m_z = bx::fsin(timeAccumulatorLight) * 20.0f;
- pointLight.m_spotDirectionInner.m_x = -pointLight.m_position.m_x;
- pointLight.m_spotDirectionInner.m_y = -pointLight.m_position.m_y;
- pointLight.m_spotDirectionInner.m_z = -pointLight.m_position.m_z;
-
- directionalLight.m_position.m_x = -bx::fcos(timeAccumulatorLight);
- directionalLight.m_position.m_y = -1.0f;
- directionalLight.m_position.m_z = -bx::fsin(timeAccumulatorLight);
-
- // Setup instance matrices.
- float mtxFloor[16];
- const float floorScale = 550.0f;
- bx::mtxSRT(mtxFloor
- , floorScale //scaleX
- , floorScale //scaleY
- , floorScale //scaleZ
- , 0.0f //rotX
- , 0.0f //rotY
- , 0.0f //rotZ
- , 0.0f //translateX
- , 0.0f //translateY
- , 0.0f //translateZ
- );
-
- float mtxBunny[16];
- bx::mtxSRT(mtxBunny
- , 5.0f
- , 5.0f
- , 5.0f
- , 0.0f
- , 1.56f - timeAccumulatorScene
- , 0.0f
- , 15.0f
- , 5.0f
- , 0.0f
- );
+ s_uniforms.submitConstUniforms();
- float mtxHollowcube[16];
- bx::mtxSRT(mtxHollowcube
- , 2.5f
- , 2.5f
- , 2.5f
- , 0.0f
- , 1.56f - timeAccumulatorScene
- , 0.0f
- , 0.0f
- , 10.0f
- , 0.0f
- );
+ // s_uniforms.submitConstUniforms();
- float mtxCube[16];
- bx::mtxSRT(mtxCube
- , 2.5f
- , 2.5f
- , 2.5f
- , 0.0f
- , 1.56f - timeAccumulatorScene
- , 0.0f
- , -15.0f
- , 5.0f
- , 0.0f
- );
+ // Imgui.
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , m_viewState.m_width
+ , m_viewState.m_height
+ );
- const uint8_t numTrees = 10;
- float mtxTrees[numTrees][16];
- for (uint8_t ii = 0; ii < numTrees; ++ii)
- {
- bx::mtxSRT(mtxTrees[ii]
- , 2.0f
- , 2.0f
- , 2.0f
- , 0.0f
- , float(ii)
- , 0.0f
- , bx::fsin(float(ii)*2.0f*bx::pi/float(numTrees) ) * 60.0f
- , 0.0f
- , bx::fcos(float(ii)*2.0f*bx::pi/float(numTrees) ) * 60.0f
+ showExampleDialog(this);
+
+ ImGui::SetNextWindowPos(
+ ImVec2(m_viewState.m_width - m_viewState.m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
);
- }
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_viewState.m_width / 5.0f, m_viewState.m_height - 20.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+
+#define IMGUI_FLOAT_SLIDER(_name, _val) \
+ ImGui::SliderFloat(_name \
+ , &_val \
+ , *( ((float*)&_val)+1) \
+ , *( ((float*)&_val)+2) \
+ )
+
+#define IMGUI_RADIO_BUTTON(_name, _var, _val) \
+ if (ImGui::RadioButton(_name, _var == _val) ) \
+ { \
+ _var = _val; \
+ }
- // Compute transform matrices.
- const uint8_t shadowMapPasses = ShadowMapRenderTargets::Count;
- float lightView[shadowMapPasses][16];
- float lightProj[shadowMapPasses][16];
- float mtxYpr[TetrahedronFaces::Count][16];
+ ImGui::Checkbox("Update lights", &m_settings.m_updateLights);
+ ImGui::Checkbox("Update scene", &m_settings.m_updateScene);
- float screenProj[16];
- float screenView[16];
- bx::mtxIdentity(screenView);
- bx::mtxOrtho(screenProj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
+ ImGui::Separator();
+ ImGui::Text("Shadow map depth:");
+ IMGUI_RADIO_BUTTON("InvZ", m_settings.m_depthImpl, DepthImpl::InvZ);
+ IMGUI_RADIO_BUTTON("Linear", m_settings.m_depthImpl, DepthImpl::Linear);
- if (LightType::SpotLight == settings.m_lightType)
- {
- const float fovy = settings.m_coverageSpotL;
- const float aspect = 1.0f;
- bx::mtxProj(lightProj[ProjType::Horizontal], fovy, aspect, currentSmSettings->m_near, currentSmSettings->m_far);
+ ShadowMapSettings* currentSmSettings = &m_smSettings[m_settings.m_lightType][m_settings.m_depthImpl][m_settings.m_smImpl];
- //For linear depth, prevent depth division by variable w-component in shaders and divide here by far plane
- if (DepthImpl::Linear == settings.m_depthImpl)
+ ImGui::Separator();
+ ImGui::Checkbox("Draw depth buffer", &m_settings.m_drawDepthBuffer);
+ if (m_settings.m_drawDepthBuffer)
{
- lightProj[ProjType::Horizontal][10] /= currentSmSettings->m_far;
- lightProj[ProjType::Horizontal][14] /= currentSmSettings->m_far;
+ IMGUI_FLOAT_SLIDER("Depth value pow", currentSmSettings->m_depthValuePow);
}
- float at[3];
- bx::vec3Add(at, pointLight.m_position.m_v, pointLight.m_spotDirectionInner.m_v);
- bx::mtxLookAt(lightView[TetrahedronFaces::Green], pointLight.m_position.m_v, at);
- }
- else if (LightType::PointLight == settings.m_lightType)
- {
- float ypr[TetrahedronFaces::Count][3] =
+ ImGui::Separator();
+ ImGui::Text("Shadow Map implementation");
+ IMGUI_RADIO_BUTTON("Hard", m_settings.m_smImpl, SmImpl::Hard);
+ IMGUI_RADIO_BUTTON("PCF", m_settings.m_smImpl, SmImpl::PCF);
+ IMGUI_RADIO_BUTTON("VSM", m_settings.m_smImpl, SmImpl::VSM);
+ IMGUI_RADIO_BUTTON("ESM", m_settings.m_smImpl, SmImpl::ESM);
+ currentSmSettings = &m_smSettings[m_settings.m_lightType][m_settings.m_depthImpl][m_settings.m_smImpl];
+
+ ImGui::Separator();
+ IMGUI_FLOAT_SLIDER("Bias", currentSmSettings->m_bias);
+ IMGUI_FLOAT_SLIDER("Normal offset", currentSmSettings->m_normalOffset);
+ ImGui::Separator();
+ if (LightType::DirectionalLight != m_settings.m_lightType)
{
- { bx::toRad( 0.0f), bx::toRad( 27.36780516f), bx::toRad(0.0f) },
- { bx::toRad(180.0f), bx::toRad( 27.36780516f), bx::toRad(0.0f) },
- { bx::toRad(-90.0f), bx::toRad(-27.36780516f), bx::toRad(0.0f) },
- { bx::toRad( 90.0f), bx::toRad(-27.36780516f), bx::toRad(0.0f) },
- };
-
+ IMGUI_FLOAT_SLIDER("Near plane", currentSmSettings->m_near);
+ }
+ IMGUI_FLOAT_SLIDER("Far plane", currentSmSettings->m_far);
- if (settings.m_stencilPack)
+ ImGui::Separator();
+ switch(m_settings.m_smImpl)
{
- const float fovx = 143.98570868f + 3.51f + settings.m_fovXAdjust;
- const float fovy = 125.26438968f + 9.85f + settings.m_fovYAdjust;
- const float aspect = bx::ftan(bx::toRad(fovx*0.5f) )/bx::ftan(bx::toRad(fovy*0.5f) );
-
- bx::mtxProj(lightProj[ProjType::Vertical]
- , fovx
- , aspect
- , currentSmSettings->m_near
- , currentSmSettings->m_far
- );
-
- //For linear depth, prevent depth division by variable w-component in shaders and divide here by far plane
- if (DepthImpl::Linear == settings.m_depthImpl)
- {
- lightProj[ProjType::Vertical][10] /= currentSmSettings->m_far;
- lightProj[ProjType::Vertical][14] /= currentSmSettings->m_far;
- }
+ case SmImpl::Hard:
+ //ImGui::Text("Hard");
+ break;
+
+ case SmImpl::PCF:
+ ImGui::Text("PCF");
+ IMGUI_FLOAT_SLIDER("X Offset", currentSmSettings->m_xOffset);
+ IMGUI_FLOAT_SLIDER("Y Offset", currentSmSettings->m_yOffset);
+ break;
+
+ case SmImpl::VSM:
+ ImGui::Text("VSM");
+ IMGUI_FLOAT_SLIDER("Min variance", currentSmSettings->m_customParam0);
+ IMGUI_FLOAT_SLIDER("Depth multiplier", currentSmSettings->m_customParam1);
+ ImGui::Checkbox("Blur shadow map", &currentSmSettings->m_doBlur);
+ if (currentSmSettings->m_doBlur)
+ {
+ IMGUI_FLOAT_SLIDER("Blur X Offset", currentSmSettings->m_xOffset);
+ IMGUI_FLOAT_SLIDER("Blur Y Offset", currentSmSettings->m_yOffset);
+ }
+ break;
+
+ case SmImpl::ESM:
+ ImGui::Text("ESM");
+ IMGUI_FLOAT_SLIDER("ESM Hardness", currentSmSettings->m_customParam0);
+ IMGUI_FLOAT_SLIDER("Depth multiplier", currentSmSettings->m_customParam1);
+ ImGui::Checkbox("Blur shadow map", &currentSmSettings->m_doBlur);
+ if (currentSmSettings->m_doBlur)
+ {
+ IMGUI_FLOAT_SLIDER("Blur X Offset", currentSmSettings->m_xOffset);
+ IMGUI_FLOAT_SLIDER("Blur Y Offset", currentSmSettings->m_yOffset);
+ }
+ break;
- ypr[TetrahedronFaces::Green ][2] = bx::toRad(180.0f);
- ypr[TetrahedronFaces::Yellow][2] = bx::toRad( 0.0f);
- ypr[TetrahedronFaces::Blue ][2] = bx::toRad( 90.0f);
- ypr[TetrahedronFaces::Red ][2] = bx::toRad(-90.0f);
- }
+ default:
+ break;
+ };
- const float fovx = 143.98570868f + 7.8f + settings.m_fovXAdjust;
- const float fovy = 125.26438968f + 3.0f + settings.m_fovYAdjust;
- const float aspect = bx::ftan(bx::toRad(fovx*0.5f) )/bx::ftan(bx::toRad(fovy*0.5f) );
+ ImGui::End();
+#undef IMGUI_RADIO_BUTTON
- bx::mtxProj(lightProj[ProjType::Horizontal], fovy, aspect, currentSmSettings->m_near, currentSmSettings->m_far);
+ ImGui::SetNextWindowPos(
+ ImVec2(10.0f, 260.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Light"
+ , NULL
+ , ImVec2(m_viewState.m_width / 5.0f, 350.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+ ImGui::PushItemWidth(185.0f);
- //For linear depth, prevent depth division by variable w component in shaders and divide here by far plane
- if (DepthImpl::Linear == settings.m_depthImpl)
+ bool bLtChanged = false;
+ if ( ImGui::RadioButton("Spot light", m_settings.m_lightType == LightType::SpotLight ))
+ {
+ m_settings.m_lightType = LightType::SpotLight; bLtChanged = true;
+ }
+ if ( ImGui::RadioButton("Point light", m_settings.m_lightType == LightType::PointLight ))
{
- lightProj[ProjType::Horizontal][10] /= currentSmSettings->m_far;
- lightProj[ProjType::Horizontal][14] /= currentSmSettings->m_far;
+ m_settings.m_lightType = LightType::PointLight; bLtChanged = true;
+ }
+ if ( ImGui::RadioButton("Directional light", m_settings.m_lightType == LightType::DirectionalLight ))
+ {
+ m_settings.m_lightType = LightType::DirectionalLight; bLtChanged = true;
}
+ ImGui::Separator();
+ ImGui::Checkbox("Show shadow map coverage.", &m_settings.m_showSmCoverage);
- for (uint8_t ii = 0; ii < TetrahedronFaces::Count; ++ii)
- {
- float mtxTmp[16];
- mtxYawPitchRoll(mtxTmp, ypr[ii][0], ypr[ii][1], ypr[ii][2]);
+ ImGui::Separator();
+ ImGui::Text("Shadow map resolution: %ux%u", m_currentShadowMapSize, m_currentShadowMapSize);
+ ImGui::SliderFloat("##SizePwrTwo", &currentSmSettings->m_sizePwrTwo,
+ currentSmSettings->m_sizePwrTwoMin,
+ currentSmSettings->m_sizePwrTwoMax, "%.0f");
- float tmp[3] =
- {
- -bx::vec3Dot(pointLight.m_position.m_v, &mtxTmp[0]),
- -bx::vec3Dot(pointLight.m_position.m_v, &mtxTmp[4]),
- -bx::vec3Dot(pointLight.m_position.m_v, &mtxTmp[8]),
- };
+ ImGui::Separator();
+ if (LightType::SpotLight == m_settings.m_lightType)
+ {
+ ImGui::Text("Spot light");
+ ImGui::SliderFloat("Shadow map area", &m_settings.m_coverageSpotL, 45.0f, 120.0f);
- bx::mtxTranspose(mtxYpr[ii], mtxTmp);
+ ImGui::Separator();
+ ImGui::SliderFloat("Spot outer cone", &m_settings.m_spotOuterAngle, 0.0f, 91.0f);
+ ImGui::SliderFloat("Spot inner cone", &m_settings.m_spotInnerAngle, 0.0f, 90.0f);
+ }
+ else if (LightType::PointLight == m_settings.m_lightType)
+ {
+ ImGui::Text("Point light");
+ ImGui::Checkbox("Stencil pack", &m_settings.m_stencilPack);
- bx::memCopy(lightView[ii], mtxYpr[ii], 12*sizeof(float) );
- lightView[ii][12] = tmp[0];
- lightView[ii][13] = tmp[1];
- lightView[ii][14] = tmp[2];
- lightView[ii][15] = 1.0f;
+ ImGui::SliderFloat("Fov X adjust", &m_settings.m_fovXAdjust, -20.0f, 20.0f);
+ ImGui::SliderFloat("Fov Y adjust", &m_settings.m_fovYAdjust, -20.0f, 20.0f);
}
- }
- else // LightType::DirectionalLight == settings.m_lightType
- {
- // Setup light view mtx.
- float eye[3] =
+ else if (LightType::DirectionalLight == m_settings.m_lightType)
{
- -directionalLight.m_position.m_x
- , -directionalLight.m_position.m_y
- , -directionalLight.m_position.m_z
- };
- float at[3] = { 0.0f, 0.0f, 0.0f };
- bx::mtxLookAt(lightView[0], eye, at);
+ ImGui::Text("Directional light");
+ ImGui::Checkbox("Stabilize cascades", &m_settings.m_stabilize);
+ ImGui::SliderInt("Cascade splits", &m_settings.m_numSplits, 1, 4);
+ ImGui::SliderFloat("Cascade distribution", &m_settings.m_splitDistribution, 0.0f, 1.0f);
+ }
- // Compute camera inverse view mtx.
- float mtxViewInv[16];
- bx::mtxInverse(mtxViewInv, viewState.m_view);
+#undef IMGUI_FLOAT_SLIDER
- // Compute split distances.
- const uint8_t maxNumSplits = 4;
- BX_CHECK(maxNumSplits >= settings.m_numSplits, "Error! Max num splits.");
+ ImGui::End();
- float splitSlices[maxNumSplits*2];
- splitFrustum(splitSlices, settings.m_numSplits, currentSmSettings->m_near, currentSmSettings->m_far, settings.m_splitDistribution);
+ imguiEndFrame();
// Update uniforms.
- for (uint8_t ii = 0, ff = 1; ii < settings.m_numSplits; ++ii, ff+=2)
+ s_uniforms.m_shadowMapBias = currentSmSettings->m_bias;
+ s_uniforms.m_shadowMapOffset = currentSmSettings->m_normalOffset;
+ s_uniforms.m_shadowMapParam0 = currentSmSettings->m_customParam0;
+ s_uniforms.m_shadowMapParam1 = currentSmSettings->m_customParam1;
+ s_uniforms.m_depthValuePow = currentSmSettings->m_depthValuePow;
+ s_uniforms.m_XNum = currentSmSettings->m_xNum;
+ s_uniforms.m_YNum = currentSmSettings->m_yNum;
+ s_uniforms.m_XOffset = currentSmSettings->m_xOffset;
+ s_uniforms.m_YOffset = currentSmSettings->m_yOffset;
+ s_uniforms.m_showSmCoverage = float(m_settings.m_showSmCoverage);
+ s_uniforms.m_lightPtr = (LightType::DirectionalLight == m_settings.m_lightType) ? &m_directionalLight : &m_pointLight;
+
+ if (LightType::SpotLight == m_settings.m_lightType)
{
- // This lags for 1 frame, but it's not a problem.
- s_uniforms.m_csmFarDistances[ii] = splitSlices[ff];
+ m_pointLight.m_attenuationSpotOuter.m_outer = m_settings.m_spotOuterAngle;
+ m_pointLight.m_spotDirectionInner.m_inner = m_settings.m_spotInnerAngle;
+ }
+ else
+ {
+ m_pointLight.m_attenuationSpotOuter.m_outer = 91.0f; //above 90.0f means point light
}
- float mtxProj[16];
- bx::mtxOrtho(mtxProj, 1.0f, -1.0f, 1.0f, -1.0f, -currentSmSettings->m_far, currentSmSettings->m_far);
-
- const uint8_t numCorners = 8;
- float frustumCorners[maxNumSplits][numCorners][3];
- for (uint8_t ii = 0, nn = 0, ff = 1; ii < settings.m_numSplits; ++ii, nn+=2, ff+=2)
+ s_uniforms.submitPerFrameUniforms();
+
+ // Time.
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const float deltaTime = float(frameTime/freq);
+
+ // Update camera.
+ cameraUpdate(deltaTime, m_mouseState);
+
+ // Update view mtx.
+ cameraGetViewMtx(m_viewState.m_view);
+
+ // Update lights.
+ m_pointLight.computeViewSpaceComponents(m_viewState.m_view);
+ m_directionalLight.computeViewSpaceComponents(m_viewState.m_view);
+
+ // Update time accumulators.
+ if (m_settings.m_updateLights) { m_timeAccumulatorLight += deltaTime; }
+ if (m_settings.m_updateScene) { m_timeAccumulatorScene += deltaTime; }
+
+ // Setup lights.
+ m_pointLight.m_position.m_x = bx::fcos(m_timeAccumulatorLight) * 20.0f;
+ m_pointLight.m_position.m_y = 26.0f;
+ m_pointLight.m_position.m_z = bx::fsin(m_timeAccumulatorLight) * 20.0f;
+ m_pointLight.m_spotDirectionInner.m_x = -m_pointLight.m_position.m_x;
+ m_pointLight.m_spotDirectionInner.m_y = -m_pointLight.m_position.m_y;
+ m_pointLight.m_spotDirectionInner.m_z = -m_pointLight.m_position.m_z;
+
+ m_directionalLight.m_position.m_x = -bx::fcos(m_timeAccumulatorLight);
+ m_directionalLight.m_position.m_y = -1.0f;
+ m_directionalLight.m_position.m_z = -bx::fsin(m_timeAccumulatorLight);
+
+ // Setup instance matrices.
+ float mtxFloor[16];
+ const float floorScale = 550.0f;
+ bx::mtxSRT(mtxFloor
+ , floorScale //scaleX
+ , floorScale //scaleY
+ , floorScale //scaleZ
+ , 0.0f //rotX
+ , 0.0f //rotY
+ , 0.0f //rotZ
+ , 0.0f //translateX
+ , 0.0f //translateY
+ , 0.0f //translateZ
+ );
+
+ float mtxBunny[16];
+ bx::mtxSRT(mtxBunny
+ , 5.0f
+ , 5.0f
+ , 5.0f
+ , 0.0f
+ , 1.56f - m_timeAccumulatorScene
+ , 0.0f
+ , 15.0f
+ , 5.0f
+ , 0.0f
+ );
+
+ float mtxHollowcube[16];
+ bx::mtxSRT(mtxHollowcube
+ , 2.5f
+ , 2.5f
+ , 2.5f
+ , 0.0f
+ , 1.56f - m_timeAccumulatorScene
+ , 0.0f
+ , 0.0f
+ , 10.0f
+ , 0.0f
+ );
+
+ float mtxCube[16];
+ bx::mtxSRT(mtxCube
+ , 2.5f
+ , 2.5f
+ , 2.5f
+ , 0.0f
+ , 1.56f - m_timeAccumulatorScene
+ , 0.0f
+ , -15.0f
+ , 5.0f
+ , 0.0f
+ );
+
+ const uint8_t numTrees = 10;
+ float mtxTrees[numTrees][16];
+ for (uint8_t ii = 0; ii < numTrees; ++ii)
{
- // Compute frustum corners for one split in world space.
- worldSpaceFrustumCorners( (float*)frustumCorners[ii], splitSlices[nn], splitSlices[ff], projWidth, projHeight, mtxViewInv);
+ bx::mtxSRT(mtxTrees[ii]
+ , 2.0f
+ , 2.0f
+ , 2.0f
+ , 0.0f
+ , float(ii)
+ , 0.0f
+ , bx::fsin(float(ii)*2.0f*bx::kPi/float(numTrees) ) * 60.0f
+ , 0.0f
+ , bx::fcos(float(ii)*2.0f*bx::kPi/float(numTrees) ) * 60.0f
+ );
+ }
- float min[3] = { 9000.0f, 9000.0f, 9000.0f };
- float max[3] = { -9000.0f, -9000.0f, -9000.0f };
+ // Compute transform matrices.
+ const uint8_t shadowMapPasses = ShadowMapRenderTargets::Count;
+ float lightView[shadowMapPasses][16];
+ float lightProj[shadowMapPasses][16];
+ float mtxYpr[TetrahedronFaces::Count][16];
+
+ float screenProj[16];
+ float screenView[16];
+ bx::mtxIdentity(screenView);
+
+ bx::mtxOrtho(
+ screenProj
+ , 0.0f
+ , 1.0f
+ , 1.0f
+ , 0.0f
+ , 0.0f
+ , 100.0f
+ , 0.0f
+ , caps->homogeneousDepth
+ );
+
+ if (LightType::SpotLight == m_settings.m_lightType)
+ {
+ const float fovy = m_settings.m_coverageSpotL;
+ const float aspect = 1.0f;
+ bx::mtxProj(
+ lightProj[ProjType::Horizontal]
+ , fovy
+ , aspect
+ , currentSmSettings->m_near
+ , currentSmSettings->m_far
+ , false
+ );
- for (uint8_t jj = 0; jj < numCorners; ++jj)
+ //For linear depth, prevent depth division by variable w-component in shaders and divide here by far plane
+ if (DepthImpl::Linear == m_settings.m_depthImpl)
{
- // Transform to light space.
- float lightSpaceFrustumCorner[3];
- bx::vec3MulMtx(lightSpaceFrustumCorner, frustumCorners[ii][jj], lightView[0]);
-
- // Update bounding box.
- min[0] = bx::fmin(min[0], lightSpaceFrustumCorner[0]);
- max[0] = bx::fmax(max[0], lightSpaceFrustumCorner[0]);
- min[1] = bx::fmin(min[1], lightSpaceFrustumCorner[1]);
- max[1] = bx::fmax(max[1], lightSpaceFrustumCorner[1]);
- min[2] = bx::fmin(min[2], lightSpaceFrustumCorner[2]);
- max[2] = bx::fmax(max[2], lightSpaceFrustumCorner[2]);
+ lightProj[ProjType::Horizontal][10] /= currentSmSettings->m_far;
+ lightProj[ProjType::Horizontal][14] /= currentSmSettings->m_far;
}
- float minproj[3];
- float maxproj[3];
- bx::vec3MulMtxH(minproj, min, mtxProj);
- bx::vec3MulMtxH(maxproj, max, mtxProj);
-
- float offsetx, offsety;
- float scalex, scaley;
+ float at[3];
+ bx::vec3Add(at, m_pointLight.m_position.m_v, m_pointLight.m_spotDirectionInner.m_v);
+ bx::mtxLookAt(lightView[TetrahedronFaces::Green], m_pointLight.m_position.m_v, at);
+ }
+ else if (LightType::PointLight == m_settings.m_lightType)
+ {
+ float ypr[TetrahedronFaces::Count][3] =
+ {
+ { bx::toRad( 0.0f), bx::toRad( 27.36780516f), bx::toRad(0.0f) },
+ { bx::toRad(180.0f), bx::toRad( 27.36780516f), bx::toRad(0.0f) },
+ { bx::toRad(-90.0f), bx::toRad(-27.36780516f), bx::toRad(0.0f) },
+ { bx::toRad( 90.0f), bx::toRad(-27.36780516f), bx::toRad(0.0f) },
+ };
- scalex = 2.0f / (maxproj[0] - minproj[0]);
- scaley = 2.0f / (maxproj[1] - minproj[1]);
- if (settings.m_stabilize)
+ if (m_settings.m_stencilPack)
{
- const float quantizer = 64.0f;
- scalex = quantizer / bx::fceil(quantizer / scalex);
- scaley = quantizer / bx::fceil(quantizer / scaley);
+ const float fovx = 143.98570868f + 3.51f + m_settings.m_fovXAdjust;
+ const float fovy = 125.26438968f + 9.85f + m_settings.m_fovYAdjust;
+ const float aspect = bx::ftan(bx::toRad(fovx*0.5f) )/bx::ftan(bx::toRad(fovy*0.5f) );
+
+ bx::mtxProj(
+ lightProj[ProjType::Vertical]
+ , fovx
+ , aspect
+ , currentSmSettings->m_near
+ , currentSmSettings->m_far
+ , false
+ );
+
+ //For linear depth, prevent depth division by variable w-component in shaders and divide here by far plane
+ if (DepthImpl::Linear == m_settings.m_depthImpl)
+ {
+ lightProj[ProjType::Vertical][10] /= currentSmSettings->m_far;
+ lightProj[ProjType::Vertical][14] /= currentSmSettings->m_far;
+ }
+
+ ypr[TetrahedronFaces::Green ][2] = bx::toRad(180.0f);
+ ypr[TetrahedronFaces::Yellow][2] = bx::toRad( 0.0f);
+ ypr[TetrahedronFaces::Blue ][2] = bx::toRad( 90.0f);
+ ypr[TetrahedronFaces::Red ][2] = bx::toRad(-90.0f);
}
- offsetx = 0.5f * (maxproj[0] + minproj[0]) * scalex;
- offsety = 0.5f * (maxproj[1] + minproj[1]) * scaley;
+ const float fovx = 143.98570868f + 7.8f + m_settings.m_fovXAdjust;
+ const float fovy = 125.26438968f + 3.0f + m_settings.m_fovYAdjust;
+ const float aspect = bx::ftan(bx::toRad(fovx*0.5f) )/bx::ftan(bx::toRad(fovy*0.5f) );
- if (settings.m_stabilize)
+ bx::mtxProj(
+ lightProj[ProjType::Horizontal]
+ , fovy
+ , aspect
+ , currentSmSettings->m_near
+ , currentSmSettings->m_far
+ , caps->homogeneousDepth
+ );
+
+ //For linear depth, prevent depth division by variable w component in shaders and divide here by far plane
+ if (DepthImpl::Linear == m_settings.m_depthImpl)
{
- const float halfSize = currentShadowMapSizef * 0.5f;
- offsetx = bx::fceil(offsetx * halfSize) / halfSize;
- offsety = bx::fceil(offsety * halfSize) / halfSize;
+ lightProj[ProjType::Horizontal][10] /= currentSmSettings->m_far;
+ lightProj[ProjType::Horizontal][14] /= currentSmSettings->m_far;
}
- float mtxCrop[16];
- bx::mtxIdentity(mtxCrop);
- mtxCrop[ 0] = scalex;
- mtxCrop[ 5] = scaley;
- mtxCrop[12] = offsetx;
- mtxCrop[13] = offsety;
-
- bx::mtxMul(lightProj[ii], mtxCrop, mtxProj);
- }
- }
- // Reset render targets.
- const bgfx::FrameBufferHandle invalidRt = BGFX_INVALID_HANDLE;
- for (uint8_t ii = 0; ii < RENDERVIEW_DRAWDEPTH_3_ID+1; ++ii)
- {
- bgfx::setViewFrameBuffer(ii, invalidRt);
- }
+ for (uint8_t ii = 0; ii < TetrahedronFaces::Count; ++ii)
+ {
+ float mtxTmp[16];
+ mtxYawPitchRoll(mtxTmp, ypr[ii][0], ypr[ii][1], ypr[ii][2]);
- // Determine on-screen rectangle size where depth buffer will be drawn.
- uint16_t depthRectHeight = uint16_t(float(viewState.m_height) / 2.5f);
- uint16_t depthRectWidth = depthRectHeight;
- uint16_t depthRectX = 0;
- uint16_t depthRectY = viewState.m_height - depthRectHeight;
+ float tmp[3] =
+ {
+ -bx::vec3Dot(m_pointLight.m_position.m_v, &mtxTmp[0]),
+ -bx::vec3Dot(m_pointLight.m_position.m_v, &mtxTmp[4]),
+ -bx::vec3Dot(m_pointLight.m_position.m_v, &mtxTmp[8]),
+ };
- // Setup views and render targets.
- bgfx::setViewRect(0, 0, 0, viewState.m_width, viewState.m_height);
- bgfx::setViewTransform(0, viewState.m_view, viewState.m_proj);
+ bx::mtxTranspose(mtxYpr[ii], mtxTmp);
- if (LightType::SpotLight == settings.m_lightType)
- {
- /**
- * RENDERVIEW_SHADOWMAP_0_ID - Clear shadow map. (used as convenience, otherwise render_pass_1 could be cleared)
- * RENDERVIEW_SHADOWMAP_1_ID - Craft shadow map.
- * RENDERVIEW_VBLUR_0_ID - Vertical blur.
- * RENDERVIEW_HBLUR_0_ID - Horizontal blur.
- * RENDERVIEW_DRAWSCENE_0_ID - Draw scene.
- * RENDERVIEW_DRAWSCENE_1_ID - Draw floor bottom.
- * RENDERVIEW_DRAWDEPTH_0_ID - Draw depth buffer.
- */
-
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_0_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_DRAWSCENE_0_ID, 0, 0, viewState.m_width, viewState.m_height);
- bgfx::setViewRect(RENDERVIEW_DRAWSCENE_1_ID, 0, 0, viewState.m_width, viewState.m_height);
- bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_0_ID, depthRectX, depthRectY, depthRectWidth, depthRectHeight);
-
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_0_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[0], lightProj[ProjType::Horizontal]);
- bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_0_ID, viewState.m_view, viewState.m_proj);
- bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_1_ID, viewState.m_view, viewState.m_proj);
- bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_0_ID, screenView, screenProj);
-
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_0_ID, s_rtShadowMap[0]);
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, s_rtShadowMap[0]);
- bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, s_rtBlur);
- bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, s_rtShadowMap[0]);
- }
- else if (LightType::PointLight == settings.m_lightType)
- {
- /**
- * RENDERVIEW_SHADOWMAP_0_ID - Clear entire shadow map.
- * RENDERVIEW_SHADOWMAP_1_ID - Craft green tetrahedron shadow face.
- * RENDERVIEW_SHADOWMAP_2_ID - Craft yellow tetrahedron shadow face.
- * RENDERVIEW_SHADOWMAP_3_ID - Craft blue tetrahedron shadow face.
- * RENDERVIEW_SHADOWMAP_4_ID - Craft red tetrahedron shadow face.
- * RENDERVIEW_VBLUR_0_ID - Vertical blur.
- * RENDERVIEW_HBLUR_0_ID - Horizontal blur.
- * RENDERVIEW_DRAWSCENE_0_ID - Draw scene.
- * RENDERVIEW_DRAWSCENE_1_ID - Draw floor bottom.
- * RENDERVIEW_DRAWDEPTH_0_ID - Draw depth buffer.
- */
-
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_0_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- if (settings.m_stencilPack)
- {
- const uint16_t f = currentShadowMapSize; //full size
- const uint16_t h = currentShadowMapSize/2; //half size
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, f, h);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, 0, h, f, h);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, 0, h, f);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, h, 0, h, f);
- }
- else
- {
- const uint16_t h = currentShadowMapSize/2; //half size
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, h, h);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, h, 0, h, h);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, h, h, h);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, h, h, h, h);
- }
- bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_DRAWSCENE_0_ID, 0, 0, viewState.m_width, viewState.m_height);
- bgfx::setViewRect(RENDERVIEW_DRAWSCENE_1_ID, 0, 0, viewState.m_width, viewState.m_height);
- bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_0_ID, depthRectX, depthRectY, depthRectWidth, depthRectHeight);
-
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_0_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[TetrahedronFaces::Green], lightProj[ProjType::Horizontal]);
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_2_ID, lightView[TetrahedronFaces::Yellow], lightProj[ProjType::Horizontal]);
- if(settings.m_stencilPack)
- {
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID, lightView[TetrahedronFaces::Blue], lightProj[ProjType::Vertical]);
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID, lightView[TetrahedronFaces::Red], lightProj[ProjType::Vertical]);
+ bx::memCopy(lightView[ii], mtxYpr[ii], 12*sizeof(float) );
+ lightView[ii][12] = tmp[0];
+ lightView[ii][13] = tmp[1];
+ lightView[ii][14] = tmp[2];
+ lightView[ii][15] = 1.0f;
+ }
}
- else
+ else // LightType::DirectionalLight == settings.m_lightType
{
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID, lightView[TetrahedronFaces::Blue], lightProj[ProjType::Horizontal]);
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID, lightView[TetrahedronFaces::Red], lightProj[ProjType::Horizontal]);
- }
- bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_0_ID, viewState.m_view, viewState.m_proj);
- bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_1_ID, viewState.m_view, viewState.m_proj);
- bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_0_ID, screenView, screenProj);
-
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_0_ID, s_rtShadowMap[0]);
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, s_rtShadowMap[0]);
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_2_ID, s_rtShadowMap[0]);
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_3_ID, s_rtShadowMap[0]);
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_4_ID, s_rtShadowMap[0]);
- bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, s_rtBlur);
- bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, s_rtShadowMap[0]);
- }
- else // LightType::DirectionalLight == settings.m_lightType
- {
- /**
- * RENDERVIEW_SHADOWMAP_1_ID - Craft shadow map for first split.
- * RENDERVIEW_SHADOWMAP_2_ID - Craft shadow map for second split.
- * RENDERVIEW_SHADOWMAP_3_ID - Craft shadow map for third split.
- * RENDERVIEW_SHADOWMAP_4_ID - Craft shadow map for fourth split.
- * RENDERVIEW_VBLUR_0_ID - Vertical blur for first split.
- * RENDERVIEW_HBLUR_0_ID - Horizontal blur for first split.
- * RENDERVIEW_VBLUR_1_ID - Vertical blur for second split.
- * RENDERVIEW_HBLUR_1_ID - Horizontal blur for second split.
- * RENDERVIEW_VBLUR_2_ID - Vertical blur for third split.
- * RENDERVIEW_HBLUR_2_ID - Horizontal blur for third split.
- * RENDERVIEW_VBLUR_3_ID - Vertical blur for fourth split.
- * RENDERVIEW_HBLUR_3_ID - Horizontal blur for fourth split.
- * RENDERVIEW_DRAWSCENE_0_ID - Draw scene.
- * RENDERVIEW_DRAWSCENE_1_ID - Draw floor bottom.
- * RENDERVIEW_DRAWDEPTH_0_ID - Draw depth buffer for first split.
- * RENDERVIEW_DRAWDEPTH_1_ID - Draw depth buffer for second split.
- * RENDERVIEW_DRAWDEPTH_2_ID - Draw depth buffer for third split.
- * RENDERVIEW_DRAWDEPTH_3_ID - Draw depth buffer for fourth split.
- */
-
- depthRectHeight = viewState.m_height / 3;
- depthRectWidth = depthRectHeight;
- depthRectX = 0;
- depthRectY = viewState.m_height - depthRectHeight;
-
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_VBLUR_1_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_HBLUR_1_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_VBLUR_2_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_HBLUR_2_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_VBLUR_3_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_HBLUR_3_ID, 0, 0, currentShadowMapSize, currentShadowMapSize);
- bgfx::setViewRect(RENDERVIEW_DRAWSCENE_0_ID, 0, 0, viewState.m_width, viewState.m_height);
- bgfx::setViewRect(RENDERVIEW_DRAWSCENE_1_ID, 0, 0, viewState.m_width, viewState.m_height);
- bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_0_ID, depthRectX+(0*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight);
- bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_1_ID, depthRectX+(1*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight);
- bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_2_ID, depthRectX+(2*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight);
- bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_3_ID, depthRectX+(3*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight);
-
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[0], lightProj[0]);
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_2_ID, lightView[0], lightProj[1]);
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID, lightView[0], lightProj[2]);
- bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID, lightView[0], lightProj[3]);
- bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_VBLUR_1_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_HBLUR_1_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_VBLUR_2_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_HBLUR_2_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_VBLUR_3_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_HBLUR_3_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_0_ID, viewState.m_view, viewState.m_proj);
- bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_1_ID, viewState.m_view, viewState.m_proj);
- bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_0_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_1_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_2_ID, screenView, screenProj);
- bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_3_ID, screenView, screenProj);
-
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, s_rtShadowMap[0]);
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_2_ID, s_rtShadowMap[1]);
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_3_ID, s_rtShadowMap[2]);
- bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_4_ID, s_rtShadowMap[3]);
- bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, s_rtBlur); //vblur
- bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, s_rtShadowMap[0]); //hblur
- bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_1_ID, s_rtBlur); //vblur
- bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_1_ID, s_rtShadowMap[1]); //hblur
- bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_2_ID, s_rtBlur); //vblur
- bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_2_ID, s_rtShadowMap[2]); //hblur
- bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_3_ID, s_rtBlur); //vblur
- bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_3_ID, s_rtShadowMap[3]); //hblur
- }
+ // Setup light view mtx.
+ float eye[3] =
+ {
+ -m_directionalLight.m_position.m_x
+ , -m_directionalLight.m_position.m_y
+ , -m_directionalLight.m_position.m_z
+ };
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ bx::mtxLookAt(lightView[0], eye, at);
+
+ // Compute camera inverse view mtx.
+ float mtxViewInv[16];
+ bx::mtxInverse(mtxViewInv, m_viewState.m_view);
+
+ // Compute split distances.
+ const uint8_t maxNumSplits = 4;
+ BX_CHECK(maxNumSplits >= settings.m_numSplits, "Error! Max num splits.");
+
+ float splitSlices[maxNumSplits*2];
+ splitFrustum(splitSlices
+ , uint8_t(m_settings.m_numSplits)
+ , currentSmSettings->m_near
+ , currentSmSettings->m_far
+ , m_settings.m_splitDistribution
+ );
- // Clear backbuffer at beginning.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR
- | BGFX_CLEAR_DEPTH
- , clearValues.m_clearRgba
- , clearValues.m_clearDepth
- , clearValues.m_clearStencil
- );
- bgfx::touch(0);
-
- // Clear shadowmap rendertarget at beginning.
- const uint8_t flags0 = (LightType::DirectionalLight == settings.m_lightType)
- ? 0
- : BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL
- ;
-
- bgfx::setViewClear(RENDERVIEW_SHADOWMAP_0_ID
- , flags0
- , 0xfefefefe //blur fails on completely white regions
- , clearValues.m_clearDepth
- , clearValues.m_clearStencil
- );
- bgfx::touch(RENDERVIEW_SHADOWMAP_0_ID);
+ // Update uniforms.
+ for (uint8_t ii = 0, ff = 1; ii < m_settings.m_numSplits; ++ii, ff+=2)
+ {
+ // This lags for 1 frame, but it's not a problem.
+ s_uniforms.m_csmFarDistances[ii] = splitSlices[ff];
+ }
- const uint8_t flags1 = (LightType::DirectionalLight == settings.m_lightType)
- ? BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
- : 0
- ;
+ float mtxProj[16];
+ bx::mtxOrtho(
+ mtxProj
+ , 1.0f
+ , -1.0f
+ , 1.0f
+ , -1.0f
+ , -currentSmSettings->m_far
+ , currentSmSettings->m_far
+ , 0.0f
+ , caps->homogeneousDepth
+ );
+
+ const uint8_t numCorners = 8;
+ float frustumCorners[maxNumSplits][numCorners][3];
+ for (uint8_t ii = 0, nn = 0, ff = 1; ii < m_settings.m_numSplits; ++ii, nn+=2, ff+=2)
+ {
+ // Compute frustum corners for one split in world space.
+ worldSpaceFrustumCorners( (float*)frustumCorners[ii], splitSlices[nn], splitSlices[ff], projWidth, projHeight, mtxViewInv);
- for (uint8_t ii = 0; ii < 4; ++ii)
- {
- bgfx::setViewClear(RENDERVIEW_SHADOWMAP_1_ID+ii
- , flags1
- , 0xfefefefe //blur fails on completely white regions
- , clearValues.m_clearDepth
- , clearValues.m_clearStencil
- );
- bgfx::touch(RENDERVIEW_SHADOWMAP_1_ID+ii);
- }
+ float min[3] = { 9000.0f, 9000.0f, 9000.0f };
+ float max[3] = { -9000.0f, -9000.0f, -9000.0f };
+
+ for (uint8_t jj = 0; jj < numCorners; ++jj)
+ {
+ // Transform to light space.
+ float lightSpaceFrustumCorner[3];
+ bx::vec3MulMtx(lightSpaceFrustumCorner, frustumCorners[ii][jj], lightView[0]);
+
+ // Update bounding box.
+ min[0] = bx::fmin(min[0], lightSpaceFrustumCorner[0]);
+ max[0] = bx::fmax(max[0], lightSpaceFrustumCorner[0]);
+ min[1] = bx::fmin(min[1], lightSpaceFrustumCorner[1]);
+ max[1] = bx::fmax(max[1], lightSpaceFrustumCorner[1]);
+ min[2] = bx::fmin(min[2], lightSpaceFrustumCorner[2]);
+ max[2] = bx::fmax(max[2], lightSpaceFrustumCorner[2]);
+ }
- // Render.
+ float minproj[3];
+ float maxproj[3];
+ bx::vec3MulMtxH(minproj, min, mtxProj);
+ bx::vec3MulMtxH(maxproj, max, mtxProj);
- // Craft shadow map.
- {
- // Craft stencil mask for point light shadow map packing.
- if(LightType::PointLight == settings.m_lightType && settings.m_stencilPack)
- {
- if (6 == bgfx::getAvailTransientVertexBuffer(6, posDecl) )
- {
- struct Pos
+ float offsetx, offsety;
+ float scalex, scaley;
+
+ scalex = 2.0f / (maxproj[0] - minproj[0]);
+ scaley = 2.0f / (maxproj[1] - minproj[1]);
+
+ if (m_settings.m_stabilize)
{
- float m_x, m_y, m_z;
- };
+ const float quantizer = 64.0f;
+ scalex = quantizer / bx::fceil(quantizer / scalex);
+ scaley = quantizer / bx::fceil(quantizer / scaley);
+ }
- bgfx::TransientVertexBuffer vb;
- bgfx::allocTransientVertexBuffer(&vb, 6, posDecl);
- Pos* vertex = (Pos*)vb.data;
-
- const float min = 0.0f;
- const float max = 1.0f;
- const float center = 0.5f;
- const float zz = 0.0f;
-
- vertex[0].m_x = min;
- vertex[0].m_y = min;
- vertex[0].m_z = zz;
-
- vertex[1].m_x = max;
- vertex[1].m_y = min;
- vertex[1].m_z = zz;
-
- vertex[2].m_x = center;
- vertex[2].m_y = center;
- vertex[2].m_z = zz;
-
- vertex[3].m_x = center;
- vertex[3].m_y = center;
- vertex[3].m_z = zz;
-
- vertex[4].m_x = max;
- vertex[4].m_y = max;
- vertex[4].m_z = zz;
-
- vertex[5].m_x = min;
- vertex[5].m_y = max;
- vertex[5].m_z = zz;
-
- bgfx::setState(0);
- bgfx::setStencil(BGFX_STENCIL_TEST_ALWAYS
- | BGFX_STENCIL_FUNC_REF(1)
- | BGFX_STENCIL_FUNC_RMASK(0xff)
- | BGFX_STENCIL_OP_FAIL_S_REPLACE
- | BGFX_STENCIL_OP_FAIL_Z_REPLACE
- | BGFX_STENCIL_OP_PASS_Z_REPLACE
- );
- bgfx::setVertexBuffer(&vb);
- bgfx::submit(RENDERVIEW_SHADOWMAP_0_ID, s_programs.m_black);
+ offsetx = 0.5f * (maxproj[0] + minproj[0]) * scalex;
+ offsety = 0.5f * (maxproj[1] + minproj[1]) * scaley;
+
+ if (m_settings.m_stabilize)
+ {
+ const float halfSize = currentShadowMapSizef * 0.5f;
+ offsetx = bx::fceil(offsetx * halfSize) / halfSize;
+ offsety = bx::fceil(offsety * halfSize) / halfSize;
+ }
+
+ float mtxCrop[16];
+ bx::mtxIdentity(mtxCrop);
+ mtxCrop[ 0] = scalex;
+ mtxCrop[ 5] = scaley;
+ mtxCrop[12] = offsetx;
+ mtxCrop[13] = offsety;
+
+ bx::mtxMul(lightProj[ii], mtxCrop, mtxProj);
}
}
- // Draw scene into shadowmap.
- uint8_t drawNum;
- if (LightType::SpotLight == settings.m_lightType)
+ // Reset render targets.
+ const bgfx::FrameBufferHandle invalidRt = BGFX_INVALID_HANDLE;
+ for (uint8_t ii = 0; ii < RENDERVIEW_DRAWDEPTH_3_ID+1; ++ii)
{
- drawNum = 1;
+ bgfx::setViewFrameBuffer(ii, invalidRt);
}
- else if (LightType::PointLight == settings.m_lightType)
+
+ // Determine on-screen rectangle size where depth buffer will be drawn.
+ uint16_t depthRectHeight = uint16_t(float(m_viewState.m_height) / 2.5f);
+ uint16_t depthRectWidth = depthRectHeight;
+ uint16_t depthRectX = 0;
+ uint16_t depthRectY = m_viewState.m_height - depthRectHeight;
+
+ // Setup views and render targets.
+ bgfx::setViewRect(0, 0, 0, m_viewState.m_width, m_viewState.m_height);
+ bgfx::setViewTransform(0, m_viewState.m_view, m_viewState.m_proj);
+
+ if (LightType::SpotLight == m_settings.m_lightType)
{
- drawNum = 4;
+ /**
+ * RENDERVIEW_SHADOWMAP_0_ID - Clear shadow map. (used as convenience, otherwise render_pass_1 could be cleared)
+ * RENDERVIEW_SHADOWMAP_1_ID - Craft shadow map.
+ * RENDERVIEW_VBLUR_0_ID - Vertical blur.
+ * RENDERVIEW_HBLUR_0_ID - Horizontal blur.
+ * RENDERVIEW_DRAWSCENE_0_ID - Draw scene.
+ * RENDERVIEW_DRAWSCENE_1_ID - Draw floor bottom.
+ * RENDERVIEW_DRAWDEPTH_0_ID - Draw depth buffer.
+ */
+
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_0_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_DRAWSCENE_0_ID, 0, 0, m_viewState.m_width, m_viewState.m_height);
+ bgfx::setViewRect(RENDERVIEW_DRAWSCENE_1_ID, 0, 0, m_viewState.m_width, m_viewState.m_height);
+ bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_0_ID, depthRectX, depthRectY, depthRectWidth, depthRectHeight);
+
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_0_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[0], lightProj[ProjType::Horizontal]);
+ bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_0_ID, m_viewState.m_view, m_viewState.m_proj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_1_ID, m_viewState.m_view, m_viewState.m_proj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_0_ID, screenView, screenProj);
+
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_0_ID, s_rtShadowMap[0]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, s_rtShadowMap[0]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, s_rtBlur);
+ bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, s_rtShadowMap[0]);
+ }
+ else if (LightType::PointLight == m_settings.m_lightType)
+ {
+ /**
+ * RENDERVIEW_SHADOWMAP_0_ID - Clear entire shadow map.
+ * RENDERVIEW_SHADOWMAP_1_ID - Craft green tetrahedron shadow face.
+ * RENDERVIEW_SHADOWMAP_2_ID - Craft yellow tetrahedron shadow face.
+ * RENDERVIEW_SHADOWMAP_3_ID - Craft blue tetrahedron shadow face.
+ * RENDERVIEW_SHADOWMAP_4_ID - Craft red tetrahedron shadow face.
+ * RENDERVIEW_VBLUR_0_ID - Vertical blur.
+ * RENDERVIEW_HBLUR_0_ID - Horizontal blur.
+ * RENDERVIEW_DRAWSCENE_0_ID - Draw scene.
+ * RENDERVIEW_DRAWSCENE_1_ID - Draw floor bottom.
+ * RENDERVIEW_DRAWDEPTH_0_ID - Draw depth buffer.
+ */
+
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_0_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ if (m_settings.m_stencilPack)
+ {
+ const uint16_t f = m_currentShadowMapSize; //full size
+ const uint16_t h = m_currentShadowMapSize/2; //half size
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, f, h);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, 0, h, f, h);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, 0, h, f);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, h, 0, h, f);
+ }
+ else
+ {
+ const uint16_t h = m_currentShadowMapSize/2; //half size
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, h, h);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, h, 0, h, h);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, h, h, h);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, h, h, h, h);
+ }
+ bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_DRAWSCENE_0_ID, 0, 0, m_viewState.m_width, m_viewState.m_height);
+ bgfx::setViewRect(RENDERVIEW_DRAWSCENE_1_ID, 0, 0, m_viewState.m_width, m_viewState.m_height);
+ bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_0_ID, depthRectX, depthRectY, depthRectWidth, depthRectHeight);
+
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_0_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[TetrahedronFaces::Green], lightProj[ProjType::Horizontal]);
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_2_ID, lightView[TetrahedronFaces::Yellow], lightProj[ProjType::Horizontal]);
+ if(m_settings.m_stencilPack)
+ {
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID, lightView[TetrahedronFaces::Blue], lightProj[ProjType::Vertical]);
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID, lightView[TetrahedronFaces::Red], lightProj[ProjType::Vertical]);
+ }
+ else
+ {
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID, lightView[TetrahedronFaces::Blue], lightProj[ProjType::Horizontal]);
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID, lightView[TetrahedronFaces::Red], lightProj[ProjType::Horizontal]);
+ }
+ bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_0_ID, m_viewState.m_view, m_viewState.m_proj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_1_ID, m_viewState.m_view, m_viewState.m_proj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_0_ID, screenView, screenProj);
+
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_0_ID, s_rtShadowMap[0]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, s_rtShadowMap[0]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_2_ID, s_rtShadowMap[0]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_3_ID, s_rtShadowMap[0]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_4_ID, s_rtShadowMap[0]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, s_rtBlur);
+ bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, s_rtShadowMap[0]);
}
- else //LightType::DirectionalLight == settings.m_lightType)
+ else // LightType::DirectionalLight == settings.m_lightType
{
- drawNum = settings.m_numSplits;
+ /**
+ * RENDERVIEW_SHADOWMAP_1_ID - Craft shadow map for first split.
+ * RENDERVIEW_SHADOWMAP_2_ID - Craft shadow map for second split.
+ * RENDERVIEW_SHADOWMAP_3_ID - Craft shadow map for third split.
+ * RENDERVIEW_SHADOWMAP_4_ID - Craft shadow map for fourth split.
+ * RENDERVIEW_VBLUR_0_ID - Vertical blur for first split.
+ * RENDERVIEW_HBLUR_0_ID - Horizontal blur for first split.
+ * RENDERVIEW_VBLUR_1_ID - Vertical blur for second split.
+ * RENDERVIEW_HBLUR_1_ID - Horizontal blur for second split.
+ * RENDERVIEW_VBLUR_2_ID - Vertical blur for third split.
+ * RENDERVIEW_HBLUR_2_ID - Horizontal blur for third split.
+ * RENDERVIEW_VBLUR_3_ID - Vertical blur for fourth split.
+ * RENDERVIEW_HBLUR_3_ID - Horizontal blur for fourth split.
+ * RENDERVIEW_DRAWSCENE_0_ID - Draw scene.
+ * RENDERVIEW_DRAWSCENE_1_ID - Draw floor bottom.
+ * RENDERVIEW_DRAWDEPTH_0_ID - Draw depth buffer for first split.
+ * RENDERVIEW_DRAWDEPTH_1_ID - Draw depth buffer for second split.
+ * RENDERVIEW_DRAWDEPTH_2_ID - Draw depth buffer for third split.
+ * RENDERVIEW_DRAWDEPTH_3_ID - Draw depth buffer for fourth split.
+ */
+
+ depthRectHeight = m_viewState.m_height / 3;
+ depthRectWidth = depthRectHeight;
+ depthRectX = 0;
+ depthRectY = m_viewState.m_height - depthRectHeight;
+
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_1_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_2_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_3_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_SHADOWMAP_4_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_VBLUR_0_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_HBLUR_0_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_VBLUR_1_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_HBLUR_1_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_VBLUR_2_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_HBLUR_2_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_VBLUR_3_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_HBLUR_3_ID, 0, 0, m_currentShadowMapSize, m_currentShadowMapSize);
+ bgfx::setViewRect(RENDERVIEW_DRAWSCENE_0_ID, 0, 0, m_viewState.m_width, m_viewState.m_height);
+ bgfx::setViewRect(RENDERVIEW_DRAWSCENE_1_ID, 0, 0, m_viewState.m_width, m_viewState.m_height);
+ bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_0_ID, depthRectX+(0*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight);
+ bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_1_ID, depthRectX+(1*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight);
+ bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_2_ID, depthRectX+(2*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight);
+ bgfx::setViewRect(RENDERVIEW_DRAWDEPTH_3_ID, depthRectX+(3*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight);
+
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_1_ID, lightView[0], lightProj[0]);
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_2_ID, lightView[0], lightProj[1]);
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_3_ID, lightView[0], lightProj[2]);
+ bgfx::setViewTransform(RENDERVIEW_SHADOWMAP_4_ID, lightView[0], lightProj[3]);
+ bgfx::setViewTransform(RENDERVIEW_VBLUR_0_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_HBLUR_0_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_VBLUR_1_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_HBLUR_1_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_VBLUR_2_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_HBLUR_2_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_VBLUR_3_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_HBLUR_3_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_0_ID, m_viewState.m_view, m_viewState.m_proj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWSCENE_1_ID, m_viewState.m_view, m_viewState.m_proj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_0_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_1_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_2_ID, screenView, screenProj);
+ bgfx::setViewTransform(RENDERVIEW_DRAWDEPTH_3_ID, screenView, screenProj);
+
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_1_ID, s_rtShadowMap[0]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_2_ID, s_rtShadowMap[1]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_3_ID, s_rtShadowMap[2]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_SHADOWMAP_4_ID, s_rtShadowMap[3]);
+ bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_0_ID, s_rtBlur); //vblur
+ bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_0_ID, s_rtShadowMap[0]); //hblur
+ bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_1_ID, s_rtBlur); //vblur
+ bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_1_ID, s_rtShadowMap[1]); //hblur
+ bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_2_ID, s_rtBlur); //vblur
+ bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_2_ID, s_rtShadowMap[2]); //hblur
+ bgfx::setViewFrameBuffer(RENDERVIEW_VBLUR_3_ID, s_rtBlur); //vblur
+ bgfx::setViewFrameBuffer(RENDERVIEW_HBLUR_3_ID, s_rtShadowMap[3]); //hblur
}
- for (uint8_t ii = 0; ii < drawNum; ++ii)
+ // Clear backbuffer at beginning.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR
+ | BGFX_CLEAR_DEPTH
+ , m_clearValues.m_clearRgba
+ , m_clearValues.m_clearDepth
+ , m_clearValues.m_clearStencil
+ );
+ bgfx::touch(0);
+
+ // Clear shadowmap rendertarget at beginning.
+ const uint8_t flags0 = (LightType::DirectionalLight == m_settings.m_lightType)
+ ? 0
+ : BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL
+ ;
+
+ bgfx::setViewClear(RENDERVIEW_SHADOWMAP_0_ID
+ , flags0
+ , 0xfefefefe //blur fails on completely white regions
+ , m_clearValues.m_clearDepth
+ , m_clearValues.m_clearStencil
+ );
+ bgfx::touch(RENDERVIEW_SHADOWMAP_0_ID);
+
+ const uint8_t flags1 = (LightType::DirectionalLight == m_settings.m_lightType)
+ ? BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
+ : 0
+ ;
+
+ for (uint8_t ii = 0; ii < 4; ++ii)
{
- const uint8_t viewId = RENDERVIEW_SHADOWMAP_1_ID + ii;
+ bgfx::setViewClear(RENDERVIEW_SHADOWMAP_1_ID+ii
+ , flags1
+ , 0xfefefefe //blur fails on completely white regions
+ , m_clearValues.m_clearDepth
+ , m_clearValues.m_clearStencil
+ );
+ bgfx::touch(RENDERVIEW_SHADOWMAP_1_ID+ii);
+ }
- uint8_t renderStateIndex = RenderState::ShadowMap_PackDepth;
- if(LightType::PointLight == settings.m_lightType && settings.m_stencilPack)
+ // Render.
+
+ // Craft shadow map.
+ {
+ // Craft stencil mask for point light shadow map packing.
+ if(LightType::PointLight == m_settings.m_lightType && m_settings.m_stencilPack)
{
- renderStateIndex = uint8_t( (ii < 2) ? RenderState::ShadowMap_PackDepthHoriz : RenderState::ShadowMap_PackDepthVert);
- }
+ if (6 == bgfx::getAvailTransientVertexBuffer(6, m_posDecl) )
+ {
+ struct Pos
+ {
+ float m_x, m_y, m_z;
+ };
- // Floor.
- hplaneMesh.submit(viewId
- , mtxFloor
- , *currentSmSettings->m_progPack
- , s_renderStates[renderStateIndex]
- );
+ bgfx::TransientVertexBuffer vb;
+ bgfx::allocTransientVertexBuffer(&vb, 6, m_posDecl);
+ Pos* vertex = (Pos*)vb.data;
+
+ const float min = 0.0f;
+ const float max = 1.0f;
+ const float center = 0.5f;
+ const float zz = 0.0f;
+
+ vertex[0].m_x = min;
+ vertex[0].m_y = min;
+ vertex[0].m_z = zz;
+
+ vertex[1].m_x = max;
+ vertex[1].m_y = min;
+ vertex[1].m_z = zz;
+
+ vertex[2].m_x = center;
+ vertex[2].m_y = center;
+ vertex[2].m_z = zz;
+
+ vertex[3].m_x = center;
+ vertex[3].m_y = center;
+ vertex[3].m_z = zz;
+
+ vertex[4].m_x = max;
+ vertex[4].m_y = max;
+ vertex[4].m_z = zz;
+
+ vertex[5].m_x = min;
+ vertex[5].m_y = max;
+ vertex[5].m_z = zz;
+
+ bgfx::setState(0);
+ bgfx::setStencil(BGFX_STENCIL_TEST_ALWAYS
+ | BGFX_STENCIL_FUNC_REF(1)
+ | BGFX_STENCIL_FUNC_RMASK(0xff)
+ | BGFX_STENCIL_OP_FAIL_S_REPLACE
+ | BGFX_STENCIL_OP_FAIL_Z_REPLACE
+ | BGFX_STENCIL_OP_PASS_Z_REPLACE
+ );
+ bgfx::setVertexBuffer(0, &vb);
+ bgfx::submit(RENDERVIEW_SHADOWMAP_0_ID, s_programs.m_black);
+ }
+ }
- // Bunny.
- bunnyMesh.submit(viewId
- , mtxBunny
- , *currentSmSettings->m_progPack
- , s_renderStates[renderStateIndex]
- );
+ // Draw scene into shadowmap.
+ uint8_t drawNum;
+ if (LightType::SpotLight == m_settings.m_lightType)
+ {
+ drawNum = 1;
+ }
+ else if (LightType::PointLight == m_settings.m_lightType)
+ {
+ drawNum = 4;
+ }
+ else //LightType::DirectionalLight == settings.m_lightType)
+ {
+ drawNum = uint8_t(m_settings.m_numSplits);
+ }
- // Hollow cube.
- hollowcubeMesh.submit(viewId
- , mtxHollowcube
- , *currentSmSettings->m_progPack
- , s_renderStates[renderStateIndex]
- );
+ for (uint8_t ii = 0; ii < drawNum; ++ii)
+ {
+ const uint8_t viewId = RENDERVIEW_SHADOWMAP_1_ID + ii;
- // Cube.
- cubeMesh.submit(viewId
- , mtxCube
- , *currentSmSettings->m_progPack
- , s_renderStates[renderStateIndex]
- );
+ uint8_t renderStateIndex = RenderState::ShadowMap_PackDepth;
+ if(LightType::PointLight == m_settings.m_lightType && m_settings.m_stencilPack)
+ {
+ renderStateIndex = uint8_t( (ii < 2) ? RenderState::ShadowMap_PackDepthHoriz : RenderState::ShadowMap_PackDepthVert);
+ }
- // Trees.
- for (uint8_t jj = 0; jj < numTrees; ++jj)
- {
- treeMesh.submit(viewId
- , mtxTrees[jj]
- , *currentSmSettings->m_progPack
- , s_renderStates[renderStateIndex]
- );
+ // Floor.
+ m_hplaneMesh.submit(viewId
+ , mtxFloor
+ , *currentSmSettings->m_progPack
+ , s_renderStates[renderStateIndex]
+ );
+
+ // Bunny.
+ m_bunnyMesh.submit(viewId
+ , mtxBunny
+ , *currentSmSettings->m_progPack
+ , s_renderStates[renderStateIndex]
+ );
+
+ // Hollow cube.
+ m_hollowcubeMesh.submit(viewId
+ , mtxHollowcube
+ , *currentSmSettings->m_progPack
+ , s_renderStates[renderStateIndex]
+ );
+
+ // Cube.
+ m_cubeMesh.submit(viewId
+ , mtxCube
+ , *currentSmSettings->m_progPack
+ , s_renderStates[renderStateIndex]
+ );
+
+ // Trees.
+ for (uint8_t jj = 0; jj < numTrees; ++jj)
+ {
+ m_treeMesh.submit(viewId
+ , mtxTrees[jj]
+ , *currentSmSettings->m_progPack
+ , s_renderStates[renderStateIndex]
+ );
+ }
}
}
- }
- PackDepth::Enum depthType = (SmImpl::VSM == settings.m_smImpl) ? PackDepth::VSM : PackDepth::RGBA;
- bool bVsmOrEsm = (SmImpl::VSM == settings.m_smImpl) || (SmImpl::ESM == settings.m_smImpl);
+ PackDepth::Enum depthType = (SmImpl::VSM == m_settings.m_smImpl) ? PackDepth::VSM : PackDepth::RGBA;
+ bool bVsmOrEsm = (SmImpl::VSM == m_settings.m_smImpl) || (SmImpl::ESM == m_settings.m_smImpl);
- // Blur shadow map.
- if (bVsmOrEsm
- && currentSmSettings->m_doBlur)
- {
- bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[0]) );
- bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
- screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
- bgfx::submit(RENDERVIEW_VBLUR_0_ID, s_programs.m_vBlur[depthType]);
+ // Blur shadow map.
+ if (bVsmOrEsm
+ && currentSmSettings->m_doBlur)
+ {
+ bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[0]) );
+ bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
+ screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
+ bgfx::submit(RENDERVIEW_VBLUR_0_ID, s_programs.m_vBlur[depthType]);
- bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtBlur) );
- bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
- screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
- bgfx::submit(RENDERVIEW_HBLUR_0_ID, s_programs.m_hBlur[depthType]);
+ bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtBlur) );
+ bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
+ screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
+ bgfx::submit(RENDERVIEW_HBLUR_0_ID, s_programs.m_hBlur[depthType]);
- if (LightType::DirectionalLight == settings.m_lightType)
- {
- for (uint8_t ii = 1, jj = 2; ii < settings.m_numSplits; ++ii, jj+=2)
+ if (LightType::DirectionalLight == m_settings.m_lightType)
{
- const uint8_t viewId = RENDERVIEW_VBLUR_0_ID + jj;
+ for (uint8_t ii = 1, jj = 2; ii < m_settings.m_numSplits; ++ii, jj+=2)
+ {
+ const uint8_t viewId = RENDERVIEW_VBLUR_0_ID + jj;
- bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[ii]) );
- bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
- screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
- bgfx::submit(viewId, s_programs.m_vBlur[depthType]);
+ bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[ii]) );
+ bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
+ screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
+ bgfx::submit(viewId, s_programs.m_vBlur[depthType]);
- bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtBlur) );
- bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
- screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
- bgfx::submit(viewId+1, s_programs.m_hBlur[depthType]);
+ bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtBlur) );
+ bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
+ screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
+ bgfx::submit(viewId+1, s_programs.m_hBlur[depthType]);
+ }
}
}
- }
-
- // Draw scene.
- {
- // Setup shadow mtx.
- float mtxShadow[16];
-
- const float ymul = (s_flipV) ? 0.5f : -0.5f;
- float zadd = (DepthImpl::Linear == settings.m_depthImpl) ? 0.0f : 0.5f;
- const float mtxBias[16] =
+ // Draw scene.
{
- 0.5f, 0.0f, 0.0f, 0.0f,
- 0.0f, ymul, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.5f, 0.0f,
- 0.5f, 0.5f, zadd, 1.0f,
- };
+ // Setup shadow mtx.
+ float mtxShadow[16];
- if (LightType::SpotLight == settings.m_lightType)
- {
- float mtxTmp[16];
- bx::mtxMul(mtxTmp, lightProj[ProjType::Horizontal], mtxBias);
- bx::mtxMul(mtxShadow, lightView[0], mtxTmp); //lightViewProjBias
- }
- else if (LightType::PointLight == settings.m_lightType)
- {
- const float s = (s_flipV) ? 1.0f : -1.0f; //sign
- zadd = (DepthImpl::Linear == settings.m_depthImpl) ? 0.0f : 0.5f;
+ const float ymul = (s_flipV) ? 0.5f : -0.5f;
+ float zadd = (DepthImpl::Linear == m_settings.m_depthImpl) ? 0.0f : 0.5f;
- const float mtxCropBias[2][TetrahedronFaces::Count][16] =
+ const float mtxBias[16] =
{
- { // settings.m_stencilPack == false
+ 0.5f, 0.0f, 0.0f, 0.0f,
+ 0.0f, ymul, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.5f, 0.0f,
+ 0.5f, 0.5f, zadd, 1.0f,
+ };
- { // D3D: Green, OGL: Blue
- 0.25f, 0.0f, 0.0f, 0.0f,
+ if (LightType::SpotLight == m_settings.m_lightType)
+ {
+ float mtxTmp[16];
+ bx::mtxMul(mtxTmp, lightProj[ProjType::Horizontal], mtxBias);
+ bx::mtxMul(mtxShadow, lightView[0], mtxTmp); //lightViewProjBias
+ }
+ else if (LightType::PointLight == m_settings.m_lightType)
+ {
+ const float s = (s_flipV) ? 1.0f : -1.0f; //sign
+ zadd = (DepthImpl::Linear == m_settings.m_depthImpl) ? 0.0f : 0.5f;
+
+ const float mtxCropBias[2][TetrahedronFaces::Count][16] =
+ {
+ { // settings.m_stencilPack == false
+
+ { // D3D: Green, OGL: Blue
+ 0.25f, 0.0f, 0.0f, 0.0f,
0.0f, s*0.25f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
- 0.25f, 0.25f, zadd, 1.0f,
- },
- { // D3D: Yellow, OGL: Red
- 0.25f, 0.0f, 0.0f, 0.0f,
+ 0.25f, 0.25f, zadd, 1.0f,
+ },
+ { // D3D: Yellow, OGL: Red
+ 0.25f, 0.0f, 0.0f, 0.0f,
0.0f, s*0.25f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
- 0.75f, 0.25f, zadd, 1.0f,
- },
- { // D3D: Blue, OGL: Green
- 0.25f, 0.0f, 0.0f, 0.0f,
+ 0.75f, 0.25f, zadd, 1.0f,
+ },
+ { // D3D: Blue, OGL: Green
+ 0.25f, 0.0f, 0.0f, 0.0f,
0.0f, s*0.25f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
- 0.25f, 0.75f, zadd, 1.0f,
- },
- { // D3D: Red, OGL: Yellow
- 0.25f, 0.0f, 0.0f, 0.0f,
+ 0.25f, 0.75f, zadd, 1.0f,
+ },
+ { // D3D: Red, OGL: Yellow
+ 0.25f, 0.0f, 0.0f, 0.0f,
0.0f, s*0.25f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
- 0.75f, 0.75f, zadd, 1.0f,
+ 0.75f, 0.75f, zadd, 1.0f,
+ },
},
- },
- { // settings.m_stencilPack == true
+ { // settings.m_stencilPack == true
- { // D3D: Red, OGL: Blue
- 0.25f, 0.0f, 0.0f, 0.0f,
+ { // D3D: Red, OGL: Blue
+ 0.25f, 0.0f, 0.0f, 0.0f,
0.0f, s*0.5f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
- 0.25f, 0.5f, zadd, 1.0f,
- },
- { // D3D: Blue, OGL: Red
- 0.25f, 0.0f, 0.0f, 0.0f,
+ 0.25f, 0.5f, zadd, 1.0f,
+ },
+ { // D3D: Blue, OGL: Red
+ 0.25f, 0.0f, 0.0f, 0.0f,
0.0f, s*0.5f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
- 0.75f, 0.5f, zadd, 1.0f,
- },
- { // D3D: Green, OGL: Green
- 0.5f, 0.0f, 0.0f, 0.0f,
- 0.0f, s*0.25f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.5f, 0.0f,
- 0.5f, 0.75f, zadd, 1.0f,
+ 0.75f, 0.5f, zadd, 1.0f,
+ },
+ { // D3D: Green, OGL: Green
+ 0.5f, 0.0f, 0.0f, 0.0f,
+ 0.0f, s*0.25f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.5f, 0.0f,
+ 0.5f, 0.75f, zadd, 1.0f,
+ },
+ { // D3D: Yellow, OGL: Yellow
+ 0.5f, 0.0f, 0.0f, 0.0f,
+ 0.0f, s*0.25f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.5f, 0.0f,
+ 0.5f, 0.25f, zadd, 1.0f,
+ },
+ }
+ };
+
+ //Use as: [stencilPack][flipV][tetrahedronFace]
+ static const uint8_t cropBiasIndices[2][2][4] =
+ {
+ { // settings.m_stencilPack == false
+ { 0, 1, 2, 3 }, //flipV == false
+ { 2, 3, 0, 1 }, //flipV == true
},
- { // D3D: Yellow, OGL: Yellow
- 0.5f, 0.0f, 0.0f, 0.0f,
- 0.0f, s*0.25f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.5f, 0.0f,
- 0.5f, 0.25f, zadd, 1.0f,
+ { // settings.m_stencilPack == true
+ { 3, 2, 0, 1 }, //flipV == false
+ { 2, 3, 0, 1 }, //flipV == true
},
- }
- };
+ };
- //Use as: [stencilPack][flipV][tetrahedronFace]
- static const uint8_t cropBiasIndices[2][2][4] =
- {
- { // settings.m_stencilPack == false
- { 0, 1, 2, 3 }, //flipV == false
- { 2, 3, 0, 1 }, //flipV == true
- },
- { // settings.m_stencilPack == true
- { 3, 2, 0, 1 }, //flipV == false
- { 2, 3, 0, 1 }, //flipV == true
- },
- };
+ for (uint8_t ii = 0; ii < TetrahedronFaces::Count; ++ii)
+ {
+ ProjType::Enum projType = (m_settings.m_stencilPack) ? ProjType::Enum(ii>1) : ProjType::Horizontal;
+ uint8_t biasIndex = cropBiasIndices[m_settings.m_stencilPack][uint8_t(s_flipV)][ii];
- for (uint8_t ii = 0; ii < TetrahedronFaces::Count; ++ii)
+ float mtxTmp[16];
+ bx::mtxMul(mtxTmp, mtxYpr[ii], lightProj[projType]);
+ bx::mtxMul(m_shadowMapMtx[ii], mtxTmp, mtxCropBias[m_settings.m_stencilPack][biasIndex]); //mtxYprProjBias
+ }
+
+ bx::mtxTranslate(mtxShadow //lightInvTranslate
+ , -m_pointLight.m_position.m_v[0]
+ , -m_pointLight.m_position.m_v[1]
+ , -m_pointLight.m_position.m_v[2]
+ );
+ }
+ else //LightType::DirectionalLight == settings.m_lightType
{
- ProjType::Enum projType = (settings.m_stencilPack) ? ProjType::Enum(ii>1) : ProjType::Horizontal;
- uint8_t biasIndex = cropBiasIndices[settings.m_stencilPack][uint8_t(s_flipV)][ii];
+ for (uint8_t ii = 0; ii < m_settings.m_numSplits; ++ii)
+ {
+ float mtxTmp[16];
- float mtxTmp[16];
- bx::mtxMul(mtxTmp, mtxYpr[ii], lightProj[projType]);
- bx::mtxMul(shadowMapMtx[ii], mtxTmp, mtxCropBias[settings.m_stencilPack][biasIndex]); //mtxYprProjBias
+ bx::mtxMul(mtxTmp, lightProj[ii], mtxBias);
+ bx::mtxMul(m_shadowMapMtx[ii], lightView[0], mtxTmp); //lViewProjCropBias
+ }
}
- bx::mtxTranslate(mtxShadow //lightInvTranslate
- , -pointLight.m_position.m_v[0]
- , -pointLight.m_position.m_v[1]
- , -pointLight.m_position.m_v[2]
- );
- }
- else //LightType::DirectionalLight == settings.m_lightType
- {
- for (uint8_t ii = 0; ii < settings.m_numSplits; ++ii)
+ // Floor.
+ if (LightType::DirectionalLight != m_settings.m_lightType)
{
- float mtxTmp[16];
-
- bx::mtxMul(mtxTmp, lightProj[ii], mtxBias);
- bx::mtxMul(shadowMapMtx[ii], lightView[0], mtxTmp); //lViewProjCropBias
+ bx::mtxMul(m_lightMtx, mtxFloor, mtxShadow); //not needed for directional light
}
- }
+ m_hplaneMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
+ , mtxFloor
+ , *currentSmSettings->m_progDraw
+ , s_renderStates[RenderState::Default]
+ , true
+ );
- // Floor.
- if (LightType::DirectionalLight != settings.m_lightType)
- {
- bx::mtxMul(lightMtx, mtxFloor, mtxShadow); //not needed for directional light
- }
- hplaneMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
- , mtxFloor
- , *currentSmSettings->m_progDraw
- , s_renderStates[RenderState::Default]
- , true
- );
+ // Bunny.
+ if (LightType::DirectionalLight != m_settings.m_lightType)
+ {
+ bx::mtxMul(m_lightMtx, mtxBunny, mtxShadow);
+ }
+ m_bunnyMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
+ , mtxBunny
+ , *currentSmSettings->m_progDraw
+ , s_renderStates[RenderState::Default]
+ , true
+ );
- // Bunny.
- if (LightType::DirectionalLight != settings.m_lightType)
- {
- bx::mtxMul(lightMtx, mtxBunny, mtxShadow);
- }
- bunnyMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
- , mtxBunny
- , *currentSmSettings->m_progDraw
- , s_renderStates[RenderState::Default]
- , true
- );
+ // Hollow cube.
+ if (LightType::DirectionalLight != m_settings.m_lightType)
+ {
+ bx::mtxMul(m_lightMtx, mtxHollowcube, mtxShadow);
+ }
+ m_hollowcubeMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
+ , mtxHollowcube
+ , *currentSmSettings->m_progDraw
+ , s_renderStates[RenderState::Default]
+ , true
+ );
- // Hollow cube.
- if (LightType::DirectionalLight != settings.m_lightType)
- {
- bx::mtxMul(lightMtx, mtxHollowcube, mtxShadow);
- }
- hollowcubeMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
- , mtxHollowcube
- , *currentSmSettings->m_progDraw
- , s_renderStates[RenderState::Default]
- , true
- );
+ // Cube.
+ if (LightType::DirectionalLight != m_settings.m_lightType)
+ {
+ bx::mtxMul(m_lightMtx, mtxCube, mtxShadow);
+ }
+ m_cubeMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
+ , mtxCube
+ , *currentSmSettings->m_progDraw
+ , s_renderStates[RenderState::Default]
+ , true
+ );
- // Cube.
- if (LightType::DirectionalLight != settings.m_lightType)
- {
- bx::mtxMul(lightMtx, mtxCube, mtxShadow);
- }
- cubeMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
- , mtxCube
- , *currentSmSettings->m_progDraw
- , s_renderStates[RenderState::Default]
- , true
- );
+ // Trees.
+ for (uint8_t ii = 0; ii < numTrees; ++ii)
+ {
+ if (LightType::DirectionalLight != m_settings.m_lightType)
+ {
+ bx::mtxMul(m_lightMtx, mtxTrees[ii], mtxShadow);
+ }
+ m_treeMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
+ , mtxTrees[ii]
+ , *currentSmSettings->m_progDraw
+ , s_renderStates[RenderState::Default]
+ , true
+ );
+ }
- // Trees.
- for (uint8_t ii = 0; ii < numTrees; ++ii)
- {
- if (LightType::DirectionalLight != settings.m_lightType)
+ // Lights.
+ if (LightType::SpotLight == m_settings.m_lightType || LightType::PointLight == m_settings.m_lightType)
{
- bx::mtxMul(lightMtx, mtxTrees[ii], mtxShadow);
+ const float lightScale[3] = { 1.5f, 1.5f, 1.5f };
+ float mtx[16];
+ mtxBillboard(mtx, m_viewState.m_view, m_pointLight.m_position.m_v, lightScale);
+ m_vplaneMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
+ , mtx
+ , s_programs.m_colorTexture
+ , s_renderStates[RenderState::Custom_BlendLightTexture]
+ , m_texFlare
+ );
}
- treeMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
- , mtxTrees[ii]
- , *currentSmSettings->m_progDraw
- , s_renderStates[RenderState::Default]
- , true
- );
- }
- // Lights.
- if (LightType::SpotLight == settings.m_lightType || LightType::PointLight == settings.m_lightType)
- {
- const float lightScale[3] = { 1.5f, 1.5f, 1.5f };
- float mtx[16];
- mtxBillboard(mtx, viewState.m_view, pointLight.m_position.m_v, lightScale);
- vplaneMesh.submit(RENDERVIEW_DRAWSCENE_0_ID
- , mtx
- , s_programs.m_colorTexture
- , s_renderStates[RenderState::Custom_BlendLightTexture]
- , texFlare
- );
+ // Draw floor bottom.
+ float floorBottomMtx[16];
+ bx::mtxSRT(floorBottomMtx
+ , floorScale //scaleX
+ , floorScale //scaleY
+ , floorScale //scaleZ
+ , 0.0f //rotX
+ , 0.0f //rotY
+ , 0.0f //rotZ
+ , 0.0f //translateX
+ , -0.1f //translateY
+ , 0.0f //translateZ
+ );
+
+ m_hplaneMesh.submit(RENDERVIEW_DRAWSCENE_1_ID
+ , floorBottomMtx
+ , s_programs.m_texture
+ , s_renderStates[RenderState::Custom_DrawPlaneBottom]
+ , m_texFigure
+ );
}
- // Draw floor bottom.
- float floorBottomMtx[16];
- bx::mtxSRT(floorBottomMtx
- , floorScale //scaleX
- , floorScale //scaleY
- , floorScale //scaleZ
- , 0.0f //rotX
- , 0.0f //rotY
- , 0.0f //rotZ
- , 0.0f //translateX
- , -0.1f //translateY
- , 0.0f //translateZ
- );
-
- hplaneMesh.submit(RENDERVIEW_DRAWSCENE_1_ID
- , floorBottomMtx
- , s_programs.m_texture
- , s_renderStates[RenderState::Custom_DrawPlaneBottom]
- , texFigure
- );
- }
-
- // Draw depth rect.
- if (settings.m_drawDepthBuffer)
- {
- bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[0]) );
- bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
- screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
- bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID, s_programs.m_drawDepth[depthType]);
-
- if (LightType::DirectionalLight == settings.m_lightType)
+ // Draw depth rect.
+ if (m_settings.m_drawDepthBuffer)
{
- for (uint8_t ii = 1; ii < settings.m_numSplits; ++ii)
+ bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[0]) );
+ bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
+ screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
+ bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID, s_programs.m_drawDepth[depthType]);
+
+ if (LightType::DirectionalLight == m_settings.m_lightType)
{
- bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[ii]) );
- bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
- screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
- bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID+ii, s_programs.m_drawDepth[depthType]);
+ for (uint8_t ii = 1; ii < m_settings.m_numSplits; ++ii)
+ {
+ bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[ii]) );
+ bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
+ screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV);
+ bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID+ii, s_programs.m_drawDepth[depthType]);
+ }
}
}
- }
-
- // Update render target size.
- shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo);
- if (bLtChanged || currentShadowMapSize != shadowMapSize)
- {
- currentShadowMapSize = shadowMapSize;
- currentShadowMapSizef = float(int16_t(currentShadowMapSize) );
- s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef;
+ // Update render target size.
+ uint16_t shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo);
+ if (bLtChanged || m_currentShadowMapSize != shadowMapSize)
{
- bgfx::destroyFrameBuffer(s_rtShadowMap[0]);
+ m_currentShadowMapSize = shadowMapSize;
+ s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef;
- bgfx::TextureHandle fbtextures[] =
{
- bgfx::createTexture2D(currentShadowMapSize, currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
- bgfx::createTexture2D(currentShadowMapSize, currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
- };
- s_rtShadowMap[0] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
- }
+ bgfx::destroy(s_rtShadowMap[0]);
- if (LightType::DirectionalLight == settings.m_lightType)
- {
- for (uint8_t ii = 1; ii < ShadowMapRenderTargets::Count; ++ii)
- {
+ bgfx::TextureHandle fbtextures[] =
{
- bgfx::destroyFrameBuffer(s_rtShadowMap[ii]);
+ bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
+ bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
+ };
+ s_rtShadowMap[0] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
+ }
- bgfx::TextureHandle fbtextures[] =
+ if (LightType::DirectionalLight == m_settings.m_lightType)
+ {
+ for (uint8_t ii = 1; ii < ShadowMapRenderTargets::Count; ++ii)
+ {
{
- bgfx::createTexture2D(currentShadowMapSize, currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
- bgfx::createTexture2D(currentShadowMapSize, currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
- };
- s_rtShadowMap[ii] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
+ bgfx::destroy(s_rtShadowMap[ii]);
+
+ bgfx::TextureHandle fbtextures[] =
+ {
+ bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_RT),
+ bgfx::createTexture2D(m_currentShadowMapSize, m_currentShadowMapSize, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT),
+ };
+ s_rtShadowMap[ii] = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
+ }
}
}
+
+ bgfx::destroy(s_rtBlur);
+ s_rtBlur = bgfx::createFrameBuffer(m_currentShadowMapSize, m_currentShadowMapSize, bgfx::TextureFormat::BGRA8);
}
- bgfx::destroyFrameBuffer(s_rtBlur);
- s_rtBlur = bgfx::createFrameBuffer(currentShadowMapSize, currentShadowMapSize, bgfx::TextureFormat::BGRA8);
- }
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ return true;
+ }
+ return false;
}
- bunnyMesh.unload();
- treeMesh.unload();
- cubeMesh.unload();
- hollowcubeMesh.unload();
- hplaneMesh.unload();
- vplaneMesh.unload();
+ entry::MouseState m_mouseState;
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
- bgfx::destroyTexture(texFigure);
- bgfx::destroyTexture(texFieldstone);
- bgfx::destroyTexture(texFlare);
+ ViewState m_viewState;
+ ClearValues m_clearValues;
- for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii)
- {
- bgfx::destroyFrameBuffer(s_rtShadowMap[ii]);
- }
- bgfx::destroyFrameBuffer(s_rtBlur);
+ bgfx::VertexDecl m_posDecl;
- s_programs.destroy();
+ bgfx::TextureHandle m_texFigure;
+ bgfx::TextureHandle m_texFlare;
+ bgfx::TextureHandle m_texFieldstone;
- bgfx::destroyUniform(s_texColor);
- bgfx::destroyUniform(s_shadowMap[3]);
- bgfx::destroyUniform(s_shadowMap[2]);
- bgfx::destroyUniform(s_shadowMap[1]);
- bgfx::destroyUniform(s_shadowMap[0]);
+ Mesh m_bunnyMesh;
+ Mesh m_treeMesh;
+ Mesh m_cubeMesh;
+ Mesh m_hollowcubeMesh;
+ Mesh m_hplaneMesh;
+ Mesh m_vplaneMesh;
- s_uniforms.destroy();
+ float m_color[4];
+ Material m_defaultMaterial;
+ Light m_pointLight;
+ Light m_directionalLight;
- cameraDestroy();
- imguiDestroy();
+ float m_lightMtx[16];
+ float m_shadowMapMtx[ShadowMapRenderTargets::Count][16];
- // Shutdown bgfx.
- bgfx::shutdown();
+ ShadowMapSettings m_smSettings[LightType::Count][DepthImpl::Count][SmImpl::Count];
+ SceneSettings m_settings;
- return 0;
-}
+ uint16_t m_currentShadowMapSize;
+
+ float m_timeAccumulatorLight;
+ float m_timeAccumulatorScene;
+};
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleShadowmaps, "16-shadowmaps", "Shadow maps example.");
diff --git a/3rdparty/bgfx/examples/17-drawstress/drawstress.cpp b/3rdparty/bgfx/examples/17-drawstress/drawstress.cpp
index 18a7a8fee1a..d84b1502290 100644
--- a/3rdparty/bgfx/examples/17-drawstress/drawstress.cpp
+++ b/3rdparty/bgfx/examples/17-drawstress/drawstress.cpp
@@ -7,6 +7,8 @@
#include "bgfx_utils.h"
#include <bx/uint32_t.h>
+#include <bx/thread.h>
+#include <bx/os.h>
#include "imgui/imgui.h"
#include <bgfx/embedded_shader.h>
@@ -15,6 +17,9 @@
#include "vs_drawstress.bin.h"
#include "fs_drawstress.bin.h"
+namespace
+{
+
static const bgfx::EmbeddedShader s_embeddedShaders[] =
{
BGFX_EMBEDDED_SHADER(vs_drawstress),
@@ -72,23 +77,41 @@ static const uint16_t s_cubeIndices[36] =
6, 3, 7,
};
-#if BX_PLATFORM_EMSCRIPTEN || BX_PLATFORM_NACL
+static const float s_mod[6][3] =
+{
+ { 1.0f, 1.0f, 1.0f },
+ { 1.0f, 0.0f, 0.0f },
+ { 0.0f, 1.0f, 0.0f },
+ { 0.0f, 0.0f, 1.0f },
+ { 1.0f, 1.0f, 0.0f },
+ { 0.0f, 1.0f, 1.0f },
+};
+
+#if BX_PLATFORM_EMSCRIPTEN
static const int64_t highwm = 1000000/35;
static const int64_t lowwm = 1000000/27;
#else
static const int64_t highwm = 1000000/65;
static const int64_t lowwm = 1000000/57;
-#endif // BX_PLATFORM_EMSCRIPTEN || BX_PLATFORM_NACL
+#endif // BX_PLATFORM_EMSCRIPTEN
+
+int32_t threadFunc(bx::Thread* _thread, void* _userData);
class ExampleDrawStress : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleDrawStress(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_NONE;
m_autoAdjust = true;
@@ -114,11 +137,11 @@ class ExampleDrawStress : public entry::AppI
// Set view 0 clear state.
bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
// Create vertex stream declaration.
PosColorVertex::init();
@@ -127,31 +150,45 @@ class ExampleDrawStress : public entry::AppI
// Create program from shaders.
m_program = bgfx::createProgram(
- bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_drawstress")
- , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_drawstress")
- , true /* destroy shaders when program is destroyed */
- );
+ bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_drawstress")
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_drawstress")
+ , true /* destroy shaders when program is destroyed */
+ );
// Create static vertex buffer.
m_vbh = bgfx::createVertexBuffer(
- bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) )
- , PosColorVertex::ms_decl
- );
+ bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) )
+ , PosColorVertex::ms_decl
+ );
// Create static index buffer.
m_ibh = bgfx::createIndexBuffer(bgfx::makeRef(s_cubeIndices, sizeof(s_cubeIndices) ) );
// Imgui.
imguiCreate();
+
+ m_maxThreads = bx::min<int32_t>(caps->limits.maxEncoders, BX_COUNTOF(m_thread) );
+ m_numThreads = (m_maxThreads+1)/2;
+
+ for (int32_t ii = 0; ii < m_maxThreads; ++ii)
+ {
+ m_thread[ii].init(threadFunc, this);
+ }
}
- int shutdown() BX_OVERRIDE
+ int shutdown() override
{
+ for (int32_t ii = 0; ii < m_maxThreads; ++ii)
+ {
+ m_thread[ii].push(reinterpret_cast<void*>(UINTPTR_MAX) );
+ m_thread[ii].shutdown();
+ }
+
// Cleanup.
imguiDestroy();
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
- bgfx::destroyProgram(m_program);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_program);
// Shutdown bgfx.
bgfx::shutdown();
@@ -159,7 +196,94 @@ class ExampleDrawStress : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ int32_t thread(bx::Thread* _thread)
+ {
+ for (;;)
+ {
+ union
+ {
+ void* ptr;
+ uintptr_t id;
+
+ } cast;
+
+ cast.ptr = _thread->pop();
+ if (UINTPTR_MAX == cast.id)
+ {
+ break;
+ }
+
+ const uint32_t numThreads = uint32_t(cast.id);
+ const uint32_t idx = uint32_t(_thread - m_thread);
+ const uint32_t num = uint32_t(m_dim)/numThreads;
+ const uint32_t rem = idx == numThreads-1 ? uint32_t(m_dim)%numThreads : 0;
+ const uint32_t xx = idx*num;
+ submit(idx+1, xx, num + rem);
+ }
+
+ return bx::kExitSuccess;
+ }
+
+ void submit(uint32_t _tid, uint32_t _xstart, uint32_t _num)
+ {
+ bgfx::Encoder* encoder = bgfx::begin();
+ if (0 != _tid)
+ {
+ m_sync.post();
+ }
+
+ if (NULL != encoder)
+ {
+ const int64_t now = bx::getHPCounter();
+ const double freq = double(bx::getHPFrequency() );
+ float time = (float)( (now-m_timeOffset)/freq);
+
+ const float* mod = s_mod[_tid%BX_COUNTOF(s_mod)];
+
+ float mtxS[16];
+ const float scale = 0 == m_transform ? 0.25f : 0.0f;
+ bx::mtxScale(mtxS, scale, scale, scale);
+
+ const float step = 0.6f;
+ float pos[3];
+ pos[0] = -step*m_dim / 2.0f;
+ pos[1] = -step*m_dim / 2.0f;
+ pos[2] = -15.0;
+
+ for (uint32_t zz = 0; zz < uint32_t(m_dim); ++zz)
+ {
+ for (uint32_t yy = 0; yy < uint32_t(m_dim); ++yy)
+ {
+ for (uint32_t xx = _xstart, xend = _xstart+_num; xx < xend; ++xx)
+ {
+ float mtxR[16];
+ bx::mtxRotateXYZ(mtxR
+ , (time + xx*0.21f)*mod[0]
+ , (time + yy*0.37f)*mod[1]
+ , (time + zz*0.13f)*mod[2]
+ );
+
+ float mtx[16];
+ bx::mtxMul(mtx, mtxS, mtxR);
+
+ mtx[12] = pos[0] + float(xx)*step;
+ mtx[13] = pos[1] + float(yy)*step;
+ mtx[14] = pos[2] + float(zz)*step;
+
+ encoder->setTransform(mtx);
+ encoder->setVertexBuffer(0, m_vbh);
+ encoder->setIndexBuffer(m_ibh);
+ encoder->setState(BGFX_STATE_DEFAULT);
+ encoder->submit(0, m_program);
+ }
+ }
+ }
+
+ bgfx::end(encoder);
+ }
+ }
+
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
@@ -197,53 +321,59 @@ class ExampleDrawStress : public entry::AppI
++m_numFrames;
}
- float time = (float)( (now-m_timeOffset)/freq);
-
imguiBeginFrame(m_mouseState.m_mx
- , m_mouseState.m_my
- , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , m_mouseState.m_mz
- , uint16_t(m_width)
- , uint16_t(m_height)
- );
-
- imguiBeginScrollArea("Settings", m_width - m_width / 4 - 10, 10, m_width / 4, m_height / 2, &m_scrollArea);
- imguiSeparatorLine();
-
- m_transform = imguiChoose(m_transform
- , "Rotate"
- , "No fragments"
- );
- imguiSeparatorLine();
-
- if (imguiCheck("Auto adjust", m_autoAdjust) )
- {
- m_autoAdjust ^= true;
- }
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
- imguiSlider("Dim", m_dim, 5, m_maxDim);
- imguiLabel("Draw calls: %d", m_dim*m_dim*m_dim);
- imguiLabel("Avg Delta Time (1 second) [ms]: %0.4f", m_deltaTimeAvgNs/1000.0f);
+ ImGui::SetNextWindowPos(ImVec2((float)m_width - (float)m_width / 4.0f - 10.0f, 10.0f) );
+ ImGui::SetNextWindowSize(ImVec2((float)m_width / 4.0f, (float)m_height / 2.0f) );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2((float)m_width / 4.0f, (float)m_height / 2.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+
+ ImGui::RadioButton("Rotate",&m_transform,0);
+ ImGui::RadioButton("No fragments",&m_transform,1);
+ ImGui::Separator();
+
+ ImGui::Checkbox("Auto adjust", &m_autoAdjust);
+
+ ImGui::SliderInt("Num threads", &m_numThreads, 1, m_maxThreads);
+ const uint32_t numThreads = m_numThreads;
- imguiSeparatorLine();
+ ImGui::SliderInt("Dim", &m_dim, 5, m_maxDim);
+ ImGui::Text("Draw calls: %d", m_dim*m_dim*m_dim);
+ ImGui::Text("Avg Delta Time (1 second) [ms]: %0.4f", m_deltaTimeAvgNs/1000.0f);
+
+ ImGui::Separator();
const bgfx::Stats* stats = bgfx::getStats();
- imguiLabel("GPU %0.6f [ms]", double(stats->gpuTimeEnd - stats->gpuTimeBegin)*1000.0/stats->gpuTimerFreq);
- imguiLabel("CPU %0.6f [ms]", double(stats->cpuTimeEnd - stats->cpuTimeBegin)*1000.0/stats->cpuTimerFreq);
- imguiLabel("Waiting for render thread %0.6f [ms]", double(stats->waitRender) * toMs);
- imguiLabel("Waiting for submit thread %0.6f [ms]", double(stats->waitSubmit) * toMs);
+ ImGui::Text("GPU %0.6f [ms]", double(stats->gpuTimeEnd - stats->gpuTimeBegin)*1000.0/stats->gpuTimerFreq);
+ ImGui::Text("CPU %0.6f [ms]", double(stats->cpuTimeEnd - stats->cpuTimeBegin)*1000.0/stats->cpuTimerFreq);
+ ImGui::Text("Waiting for render thread %0.6f [ms]", double(stats->waitRender) * toMs);
+ ImGui::Text("Waiting for submit thread %0.6f [ms]", double(stats->waitSubmit) * toMs);
+
+ ImGui::End();
- imguiEndScrollArea();
imguiEndFrame();
float at[3] = { 0.0f, 0.0f, 0.0f };
float eye[3] = { 0.0f, 0.0f, -35.0f };
float view[16];
- float proj[16];
bx::mtxLookAt(view, eye, at);
- bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
+
+ const bgfx::Caps* caps = bgfx::getCaps();
+ float proj[16];
+ bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f, caps->homogeneousDepth);
// Set view and projection matrix for view 0.
bgfx::setViewTransform(0, view, proj);
@@ -255,53 +385,22 @@ class ExampleDrawStress : public entry::AppI
// if no other draw calls are submitted to view 0.
bgfx::touch(0);
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/17-drawstress");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Draw stress, maximizing number of draw calls.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: %7.3f[ms]", double(frameTime)*toMs);
-
- float mtxS[16];
- const float scale = 0 == m_transform ? 0.25f : 0.0f;
- bx::mtxScale(mtxS, scale, scale, scale);
-
- const float step = 0.6f;
- float pos[3];
- pos[0] = -step*m_dim / 2.0f;
- pos[1] = -step*m_dim / 2.0f;
- pos[2] = -15.0;
-
- for (uint32_t zz = 0; zz < uint32_t(m_dim); ++zz)
+ if (1 < numThreads)
{
- for (uint32_t yy = 0; yy < uint32_t(m_dim); ++yy)
+ for (uint32_t ii = 0; ii < numThreads; ++ii)
{
- for (uint32_t xx = 0; xx < uint32_t(m_dim); ++xx)
- {
- float mtxR[16];
- bx::mtxRotateXYZ(mtxR, time + xx*0.21f, time + yy*0.37f, time + yy*0.13f);
-
- float mtx[16];
- bx::mtxMul(mtx, mtxS, mtxR);
-
- mtx[12] = pos[0] + float(xx)*step;
- mtx[13] = pos[1] + float(yy)*step;
- mtx[14] = pos[2] + float(zz)*step;
-
- // Set model matrix for rendering.
- bgfx::setTransform(mtx);
-
- // Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
- bgfx::setIndexBuffer(m_ibh);
-
- // Set render states.
- bgfx::setState(BGFX_STATE_DEFAULT);
+ m_thread[ii].push(reinterpret_cast<void*>(uintptr_t(numThreads) ) );
+ }
- // Submit primitive for rendering to view 0.
- bgfx::submit(0, m_program);
- }
+ for (uint32_t ii = 0; ii < numThreads; ++ii)
+ {
+ m_sync.wait();
}
}
+ else
+ {
+ submit(0, 0, uint32_t(m_dim) );
+ }
// Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives.
@@ -324,7 +423,9 @@ class ExampleDrawStress : public entry::AppI
int32_t m_scrollArea;
int32_t m_dim;
int32_t m_maxDim;
- uint32_t m_transform;
+ int32_t m_transform;
+ int32_t m_numThreads;
+ int32_t m_maxThreads;
int64_t m_timeOffset;
@@ -332,9 +433,20 @@ class ExampleDrawStress : public entry::AppI
int64_t m_deltaTimeAvgNs;
int64_t m_numFrames;
+ bx::Thread m_thread[5];
+ bx::Semaphore m_sync;
+
bgfx::ProgramHandle m_program;
bgfx::VertexBufferHandle m_vbh;
bgfx::IndexBufferHandle m_ibh;
};
-ENTRY_IMPLEMENT_MAIN(ExampleDrawStress);
+int32_t threadFunc(bx::Thread* _thread, void* _userData)
+{
+ ExampleDrawStress* self = static_cast<ExampleDrawStress*>(_userData);
+ return self->thread(_thread);
+}
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleDrawStress, "17-drawstress", "Draw stress, maximizing number of draw calls.");
diff --git a/3rdparty/bgfx/examples/17-drawstress/fs_drawstress.bin.h b/3rdparty/bgfx/examples/17-drawstress/fs_drawstress.bin.h
index f3da93691fc..1c74a4393b9 100644
--- a/3rdparty/bgfx/examples/17-drawstress/fs_drawstress.bin.h
+++ b/3rdparty/bgfx/examples/17-drawstress/fs_drawstress.bin.h
@@ -1,180 +1,180 @@
static const uint8_t fs_drawstress_glsl[89] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH....I..J...va
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH....I..J...va
0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, // v_color0;.void
0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, // main ().{. gl_F
0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, // ragColor = v_col
0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // or0;.}...
};
-static const uint8_t fs_drawstress_spv[2065] =
+static const uint8_t fs_drawstress_spv[2079] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x04, 0x08, 0x03, 0x02, 0x23, 0x07, // FSH....I......#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........za......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, // w...............
- 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, // ........5...vec4
- 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // _splat(f1;......
- 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xff, 0x0f, 0x00, 0x00, // ...._x..........
- 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // @main(vf4;vf4;..
- 0x05, 0x00, 0x05, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....O0..v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // .........%..gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ragData_0_......
- 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, // ....bgfx_VoidFra
- 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // g.......,N..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // m........@..v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, // lor0........w...
- 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // v_color0........
- 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // 0_.......G..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // m...........gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0xc7, 0x02, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ....$Global.....
- 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, // ........u_viewRe
- 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ct..............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, // u_viewTexel.....
- 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, // ........u_view..
- 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
- 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // vView...........
- 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_proj......
- 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, // ........u_invPro
- 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // j...............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, // u_viewProj......
- 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // wProj...........
- 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_model.....
- 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // ........u_modelV
- 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // iew.............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
- 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, // ............u_al
- 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, // phaRef4.G...w...
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf0, 0x06, 0x00, 0x00, // ........G.......
- 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ....@...H.......
- 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xc7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
- 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
- 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
- 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, // .... ... .......
- 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, // ........!.......
- 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x3d, 0x0b, 0x00, 0x00, // ........!...=...
- 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....w....... ...
- 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
- 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
- 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
- 0xf0, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // ....e...j.......
- 0xc7, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e.......e...e...
- 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
- 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........G......
- 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, // =........@..w...
- 0x3e, 0x00, 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, // >....G...@..9...
- 0x08, 0x00, 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, // ....ya.......G..
- 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, // ....=...........
- 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, // ....>...........
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....8...6.......
- 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 5...........7...
- 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, // ................
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =.......dW......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =........N......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =.......I9......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =........9......
- 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, // P........*..dW..
- 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, // .N..I9...9......
- 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // .*..8...6.......
- 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // ........=...7...
- 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....O0..7.......
- 0xa2, 0x25, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xee, 0x5f, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .%......._..;...
- 0x8a, 0x02, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....,N......>...
- 0x2c, 0x4e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // ,N......9.......
- 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....5...,N..=...
- 0x1d, 0x00, 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....X[..O0..>...
- 0xa2, 0x25, 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // .%..X[......8...
- 0x00, // .
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x03, 0x02, // FSH....I........
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, // #.........za....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, // ..w.............
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, // ................
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, // ......5...vec4_s
+ 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, // plat(f1;........
+ 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x40, 0x6d, // .._x..........@m
+ 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, // ain(vf4;vf4;....
+ 0x05, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..O0..v_color0..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // .......%..gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, // gData_0_........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, // ..bgfx_VoidFrag.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......,N..param.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .......@..v_colo
+ 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, // r0........w...v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, // color0..........
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......G..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // ..........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc7, 0x02, // gData_0_........
+ 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, // ..$Global.......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, // viewTexel.......
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
+ 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, // iew.............
+ 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, // ..u_proj........
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc7, 0x02, // viewProj........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, // roj.............
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, // ..u_model.......
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.............u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
+ 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..........u_alph
+ 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, // aRef4.G...w.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, // ......G.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf0, 0x06, 0x00, 0x00, 0x06, 0x00, // ......G.........
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#...`...H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#...`...H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0b, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xc7, 0x02, // ..#... ...G.....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // .. ... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......!.........
+ 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x3d, 0x0b, 0x00, 0x00, 0x08, 0x00, // ......!...=.....
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // .......... .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..w....... .....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
+ 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xf0, 0x06, // ..j... .........
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xc7, 0x02, // ..e...j.........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......e...e.....
+ 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......G......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3e, 0x00, // .......@..w...>.
+ 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, // ...G...@..9.....
+ 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x9a, 0x16, // ..ya.......G....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, // ..=.............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, // ..>.............
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, // ..8...6.......5.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......dW......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......N......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......I9......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......9......P.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xa9, 0x4e, // .......*..dW...N
+ 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, // ..I9...9.......*
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0x0f, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ......=...7.....
+ 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa2, 0x25, // ..O0..7........%
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xee, 0x5f, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // ......._..;.....
+ 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2c, 0x4e, // ..,N......>...,N
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, // ......9.........
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..5...,N..=.....
+ 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x25, // ..X[..O0..>....%
+ 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..X[......8....
};
-static const uint8_t fs_drawstress_dx9[129] =
+static const uint8_t fs_drawstress_dx9[131] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x74, 0x00, 0x00, 0x03, 0xff, 0xff, // FSH....I..t.....
- 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#...
- 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
- 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....ps_3_0.Micro
- 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
- 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, // ader Compiler 10
- 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, // .1..............
- 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, // ................
- 0x00, // .
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x03, // FSH....I..t.....
+ 0xff, 0xff, 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, // ......CTAB....#.
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, // 10.1............
+ 0x0f, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, // ................
+ 0x00, 0x00, 0x00, // ...
};
-static const uint8_t fs_drawstress_dx11[260] =
+static const uint8_t fs_drawstress_dx11[262] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0xf4, 0x00, 0x44, 0x58, 0x42, 0x43, // FSH....I....DXBC
- 0xa6, 0x7f, 0x08, 0xe2, 0x95, 0xbd, 0x5f, 0xa3, 0x3f, 0x5b, 0x58, 0x8e, 0x54, 0x0f, 0x89, 0x67, // ......_.?[X.T..g
- 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
- 0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, // ........ISGNL...
- 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........8.......
- 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // D...............
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
- 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, // ION.COLOR...OSGN
- 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
- 0x53, 0x48, 0x44, 0x52, 0x38, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, // SHDR8...@.......
- 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, // b...........e...
- 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, // . ......6.... ..
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, // ....F.......>...
- 0x00, 0x00, 0x00, 0x00, // ....
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x44, 0x58, // FSH....I......DX
+ 0x42, 0x43, 0xa6, 0x7f, 0x08, 0xe2, 0x95, 0xbd, 0x5f, 0xa3, 0x3f, 0x5b, 0x58, 0x8e, 0x54, 0x0f, // BC......_.?[X.T.
+ 0x89, 0x67, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // .g............,.
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, // ..........ISGNL.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........8.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ..D.............
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, // ..........SV_POS
+ 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0xab, 0xab, 0x4f, 0x53, // ITION.COLOR...OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x38, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0e, 0x00, // ..SHDR8...@.....
+ 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, // ..b...........e.
+ 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, // ... ......6....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......F.......>.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ......
};
static const uint8_t fs_drawstress_mtl[404] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x75, 0x73, // FSH....I......us
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x75, 0x73, // FSH....I......us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/17-drawstress/vs_drawstress.bin.h b/3rdparty/bgfx/examples/17-drawstress/vs_drawstress.bin.h
index abb39beb593..3b320f7509c 100644
--- a/3rdparty/bgfx/examples/17-drawstress/vs_drawstress.bin.h
+++ b/3rdparty/bgfx/examples/17-drawstress/vs_drawstress.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_drawstress_glsl[325] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x20, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ...attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
@@ -22,243 +22,239 @@ static const uint8_t vs_drawstress_glsl[325] =
0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, // lor0 = a_color0;
0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
};
-static const uint8_t vs_drawstress_spv[2763] =
+static const uint8_t vs_drawstress_spv[2697] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0xa8, 0x0a, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, // ....#.........Ta
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0xd8, 0x0c, // in..............
- 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x4f, 0x75, // in........8...Ou
- 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, // tput......8.....
- 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, // ..gl_Position...
- 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ..8.......v_colo
- 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x40, 0x6d, // r0............@m
- 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, // ain(vf4;vf3;....
- 0x05, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ...H..a_color0..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ......,G..a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, // tion.........._v
- 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x99, 0x02, // arying_.........
- 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, // ..$Global.......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, // viewTexel.......
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
- 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
- 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, // iew.............
- 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, // ..u_proj........
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, // viewProj........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, // roj.............
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, // ..u_model.......
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
- 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.............u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
- 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..........u_alph
- 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, // aRef4.....B.....
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .......A..a_colo
- 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, // r0............a_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, // color0........,?
- 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, // ..a_position....
- 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ......a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, // ..........flatte
- 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, // nTemp......U..pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, // ram...........pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, // ram...........@e
- 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, // ntryPointOutput_
- 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, // gl_Position.....
- 0x04, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, // ......Output....
- 0x06, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ..........v_colo
- 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, // r0............@e
- 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, // ntryPointOutput.
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, // ..G...7.......@.
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..#.......H.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, // ..`...H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, // ..`...H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, // .. ...G.........
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...B...".....
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, // ..........!.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
- 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......8.........
- 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x9a, 0x02, // ..!.......8.....
- 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, // ..8........... .
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, // ......+.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, // ......+.........
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // .....?+.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, // ......,.........
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, // ................
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, // ......e.........
- 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, // ..+.......j... .
- 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ......7...e...j.
- 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x99, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ................
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, // ..e...e...7...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x05, // ..e....... .....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x05, // ..........;.....
- 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..B.......+.....
- 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, // ..)....... .....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // ......e... .....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
- 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, // .......... .....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, // ..........;.....
- 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // .......... .....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
- 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xf9, 0x03, // ................
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0x03, 0x00, // ...... ...v.....
- 0x00, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0xcd, 0x0f, // ......;...v.....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, // ......6.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, // ..............Sa
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, // ..;.............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, // ..;........U....
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, // ..;.............
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x89, 0x14, // ..=........A....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, 0x14, // ..=.......,?....
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, // ..>....U...A..>.
- 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x38, 0x04, // ......,?..9...8.
- 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, // ..I&.......U....
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, // ..>.......I&..A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, // ......T4........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, // ..=...........T4
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, // ..>...........A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, // ......'A........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, // ..=...........'A
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, // ..A.............
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xdf, 0x1c, // ......>.........
- 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x38, 0x04, // ......8...6...8.
- 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x37, 0x00, // ..............7.
- 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, // .......H..7.....
- 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x51, 0x1d, 0x00, 0x00, 0x3b, 0x00, // ..,G......Q...;.
- 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, // ..............A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x50, 0x24, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, // ......P$........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x24, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x3d, 0x00, // ..>...P$......=.
- 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x51, 0x00, // ......'(..,G..Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x00, 0x00, // .......J..'(....
- 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x27, 0x28, // ..Q.......|W..'(
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1d, 0x19, // ......Q.........
- 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, // ..'(......P.....
- 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x1d, 0x19, // ...B...J..|W....
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x61, 0x23, // ......A.......a#
- 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, // ..B...)...=...e.
- 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, // ..+4..a#........
- 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x41, 0x00, // ...2...B..+4..A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x97, 0x2f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, // ......./........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x97, 0x2f, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0x3d, 0x00, // ..>..../...2..=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x41, 0x00, // .......1...H..A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, // .......L........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0x3d, 0x00, // ..>....L...1..=.
- 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x30, 0x19, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, // ..8...0.........
- 0x02, 0x00, 0x30, 0x19, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..0...8....
+ 0x64, 0x0a, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // d.....#.........
+ 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // Ta..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, // ....v...........
+ 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, // ........8...Outp
+ 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ut......8.......
+ 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, // gl_Position.....
+ 0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // 8.......v_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // ............@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // n(vf4;vf3;......
+ 0xf5, 0x48, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // .H..a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // ....,G..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, // on.........._var
+ 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ying_...........
+ 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, // $Global.........
+ 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, // ....u_viewRect..
+ 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ewTexel.........
+ 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_view......
+ 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
+ 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // w...............
+ 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, // u_proj..........
+ 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // ....u_invProj...
+ 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, 0x00, 0x00, // ewProj..........
+ 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ....u_invViewPro
+ 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // j...............
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, // u_model.........
+ 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, // ....u_modelView.
+ 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, // delViewProj.....
+ 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ........u_alphaR
+ 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ef4.....B.......
+ 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // .....A..a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, // ............a_co
+ 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, // lor0........,?..
+ 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_position......
+ 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, // ....a_position..
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x47, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // G...7.......@...
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....H...........
+ 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // #.......H.......
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
+ 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // `...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
+ 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // `...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...G...........
+ 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...B...".......
+ 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...v...........
+ 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, // ........!.......
+ 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
+ 0x1e, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....8...........
+ 0x21, 0x00, 0x05, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // !.......8.......
+ 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x38, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // 8........... ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ...?+...........
+ 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, // ....,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
+ 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....e...........
+ 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
+ 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // +.......j... ...
+ 0x1c, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....7...e...j...
+ 0x1e, 0x00, 0x0e, 0x00, 0x99, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...7...e...
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x05, 0x00, 0x00, // e....... .......
+ 0x02, 0x00, 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x05, 0x00, 0x00, // ........;.......
+ 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // B.......+.......
+ 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, // )....... .......
+ 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // ....e... .......
+ 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // ........;.......
+ 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, // ........ .......
+ 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, // ........;.......
+ 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, // ........ .......
+ 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, // ........;.......
+ 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, // ........;.......
+ 0x76, 0x13, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // v.......6.......
+ 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // ................
+ 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, // Sa..;...........
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, // ....;........U..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // ....;...........
+ 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, // ....=........A..
+ 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, // ....=.......,?..
+ 0xa6, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, // ....>....U...A..
+ 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, // >.......,?..9...
+ 0x38, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, // 8...I&.......U..
+ 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, // ....>.......I&..
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, // A.......T4......
+ 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, // ....=...........
+ 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, // T4..>...........
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, // A........@......
+ 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, // ....=........-..
+ 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, // .@..>...v....-..
+ 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x38, 0x04, 0x00, 0x00, // ....8...6...8...
+ 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // ............7...
+ 0x9a, 0x02, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, // .....H..7.......
+ 0x2c, 0x47, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x51, 0x1d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ,G......Q...;...
+ 0xb5, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ............A...
+ 0x9a, 0x02, 0x00, 0x00, 0x50, 0x24, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....P$..........
+ 0x3e, 0x00, 0x03, 0x00, 0x50, 0x24, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...P$......=...
+ 0x18, 0x00, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ....'(..,G..Q...
+ 0x0d, 0x00, 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....J..'(......
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, // Q.......|W..'(..
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1d, 0x19, 0x00, 0x00, // ....Q...........
+ 0x27, 0x28, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // '(......P.......
+ 0xf5, 0x42, 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x1d, 0x19, 0x00, 0x00, // .B...J..|W......
+ 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, // ....A.......a#..
+ 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // B...)...=...e...
+ 0x2b, 0x34, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // +4..a#..........
+ 0xd7, 0x32, 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .2...B..+4..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x97, 0x2f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ...../..........
+ 0x3e, 0x00, 0x03, 0x00, 0x97, 0x2f, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >..../...2..=...
+ 0x1d, 0x00, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .....1...H..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....L..........
+ 0x3e, 0x00, 0x03, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >....L...1..=...
+ 0x38, 0x04, 0x00, 0x00, 0x30, 0x19, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, // 8...0...........
+ 0x30, 0x19, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // 0...8....
};
-static const uint8_t vs_drawstress_dx9[311] =
+static const uint8_t vs_drawstress_dx9[313] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x14, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // ........!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
- 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x05, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, // ............U...
- 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, // ................
- 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, // ................
- 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, // ................
- 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, // ................
- 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+ 0x14, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // ..........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, // ................
+ 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, // ..............U.
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, // ................
+ 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, // ................
+ 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
};
-static const uint8_t vs_drawstress_dx11[510] =
+static const uint8_t vs_drawstress_dx11[512] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0xd4, 0x01, 0x44, 0x58, 0x42, 0x43, 0x32, 0x9b, 0xdd, 0xb5, 0xa9, 0xb7, 0x22, 0xf0, 0xcf, 0x5e, // ..DXBC2....."..^
- 0x34, 0x2c, 0x72, 0xf0, 0x87, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x03, 0x00, // 4,r.............
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, // ..,...|.......IS
- 0x47, 0x4e, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, // GNH...........8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......>.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x43, 0x4f, // ..............CO
- 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0x4f, 0x53, // LOR.POSITION..OS
- 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, // GNL...........8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......D.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, // ..............SV
- 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, // _POSITION.COLOR.
- 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xfc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x3f, 0x00, // ..SHDR....@...?.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, // ..r.......g....
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, // ..........e....
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, // ......h.......8.
- 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, // ..........V.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F. .........2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
- 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..F. .........6.
- 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x05, 0x00, 0x01, 0x00, 0x40, 0x00, // ..>.........@.
+ 0xd4, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x32, 0x9b, 0xdd, 0xb5, 0xa9, 0xb7, 0x22, 0xf0, // ....DXBC2.....".
+ 0xcf, 0x5e, 0x34, 0x2c, 0x72, 0xf0, 0x87, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, // .^4,r...........
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, // ....,...|.......
+ 0x49, 0x53, 0x47, 0x4e, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNH...........
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // 8...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........>.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, // ................
+ 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, // COLOR.POSITION..
+ 0x4f, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNL...........
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // 8...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........D.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
+ 0x52, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xfc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // R...SHDR....@...
+ 0x3f, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // ?...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, // _...r.......g...
+ 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, // . ..........e...
+ 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, // . ......h.......
+ 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, // 8...........V...
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....F. .........
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // F.......2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....F. .........
+ 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ..... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....F. .........
+ 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // 6.... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x05, 0x00, 0x01, 0x00, 0x40, 0x00, // ....>.........@.
};
static const uint8_t vs_drawstress_mtl[673] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x7c, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // |...using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/18-ibl/ibl.cpp b/3rdparty/bgfx/examples/18-ibl/ibl.cpp
index 1608da739bd..d369fa918b3 100644
--- a/3rdparty/bgfx/examples/18-ibl/ibl.cpp
+++ b/3rdparty/bgfx/examples/18-ibl/ibl.cpp
@@ -14,6 +14,9 @@
#include <bx/readerwriter.h>
#include <bx/string.h>
+namespace
+{
+
static float s_texelHalf = 0.0f;
struct Uniforms
@@ -32,7 +35,7 @@ struct Uniforms
void destroy()
{
- bgfx::destroyUniform(u_params);
+ bgfx::destroy(u_params);
}
union
@@ -138,7 +141,7 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBott
vertex[2].m_u = maxu;
vertex[2].m_v = maxv;
- bgfx::setVertexBuffer(&vb);
+ bgfx::setVertexBuffer(0, &vb);
}
}
@@ -165,8 +168,8 @@ struct LightProbe
void destroy()
{
- bgfx::destroyTexture(m_tex);
- bgfx::destroyTexture(m_texIrr);
+ bgfx::destroy(m_tex);
+ bgfx::destroy(m_texIrr);
}
bgfx::TextureHandle m_tex;
@@ -350,8 +353,8 @@ struct Camera
static inline void vecFromLatLong(float _vec[3], float _u, float _v)
{
- const float phi = _u * 2.0f*bx::pi;
- const float theta = _v * bx::pi;
+ const float phi = _u * 2.0f*bx::kPi;
+ const float theta = _v * bx::kPi;
const float st = bx::fsin(theta);
const float sp = bx::fsin(phi);
@@ -368,8 +371,8 @@ struct Camera
const float phi = bx::fatan2(_vec[0], _vec[2]);
const float theta = bx::facos(_vec[1]);
- _u = (bx::pi + phi)*bx::invPi*0.5f;
- _v = theta*bx::invPi;
+ _u = (bx::kPi + phi)*bx::kInvPi*0.5f;
+ _v = theta*bx::kInvPi;
}
struct Interp3f
@@ -420,365 +423,449 @@ struct Mouse
int32_t m_scrollPrev;
};
-int _main_(int _argc, char** _argv)
+struct Settings
{
- Args args(_argc, _argv);
+ Settings()
+ {
+ m_envRotCurr = 0.0f;
+ m_envRotDest = 0.0f;
+ m_lightDir[0] = -0.8f;
+ m_lightDir[1] = 0.2f;
+ m_lightDir[2] = -0.5f;
+ m_lightCol[0] = 1.0f;
+ m_lightCol[1] = 1.0f;
+ m_lightCol[2] = 1.0f;
+ m_glossiness = 0.7f;
+ m_exposure = 0.0f;
+ m_bgType = 3.0f;
+ m_radianceSlider = 2.0f;
+ m_reflectivity = 0.85f;
+ m_rgbDiff[0] = 1.0f;
+ m_rgbDiff[1] = 1.0f;
+ m_rgbDiff[2] = 1.0f;
+ m_rgbSpec[0] = 1.0f;
+ m_rgbSpec[1] = 1.0f;
+ m_rgbSpec[2] = 1.0f;
+ m_lod = 0.0f;
+ m_doDiffuse = false;
+ m_doSpecular = false;
+ m_doDiffuseIbl = true;
+ m_doSpecularIbl = true;
+ m_showLightColorWheel = true;
+ m_showDiffColorWheel = true;
+ m_showSpecColorWheel = true;
+ m_metalOrSpec = 0;
+ m_meshSelection = 0;
+ }
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = 0
- | BGFX_RESET_VSYNC
- | BGFX_RESET_MSAA_X16
- ;
+ float m_envRotCurr;
+ float m_envRotDest;
+ float m_lightDir[3];
+ float m_lightCol[3];
+ float m_glossiness;
+ float m_exposure;
+ float m_radianceSlider;
+ float m_bgType;
+ float m_reflectivity;
+ float m_rgbDiff[3];
+ float m_rgbSpec[3];
+ float m_lod;
+ bool m_doDiffuse;
+ bool m_doSpecular;
+ bool m_doDiffuseIbl;
+ bool m_doSpecularIbl;
+ bool m_showLightColorWheel;
+ bool m_showDiffColorWheel;
+ bool m_showSpecColorWheel;
+ int32_t m_metalOrSpec;
+ int32_t m_meshSelection;
+};
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
+class ExampleIbl : public entry::AppI
+{
+public:
+ ExampleIbl(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
+
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = 0
+ | BGFX_RESET_VSYNC
+ | BGFX_RESET_MSAA_X16
+ ;
+
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
+
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
+
+ // Set views clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
- // Enable debug text.
- bgfx::setDebug(debug);
+ // Imgui.
+ imguiCreate();
- // Set views clear state.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ // Uniforms.
+ m_uniforms.init();
- // Imgui.
- imguiCreate();
+ // Vertex declarations.
+ PosColorTexCoord0Vertex::init();
- // Uniforms.
- Uniforms uniforms;
- uniforms.init();
+ m_lightProbes[LightProbe::Bolonga].load("bolonga");
+ m_lightProbes[LightProbe::Kyoto ].load("kyoto");
+ m_currentLightProbe = LightProbe::Bolonga;
- // Vertex declarations.
- PosColorTexCoord0Vertex::init();
+ u_mtx = bgfx::createUniform("u_mtx", bgfx::UniformType::Mat4);
+ u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4);
+ u_flags = bgfx::createUniform("u_flags", bgfx::UniformType::Vec4);
+ u_camPos = bgfx::createUniform("u_camPos", bgfx::UniformType::Vec4);
+ s_texCube = bgfx::createUniform("s_texCube", bgfx::UniformType::Int1);
+ s_texCubeIrr = bgfx::createUniform("s_texCubeIrr", bgfx::UniformType::Int1);
- LightProbe lightProbes[LightProbe::Count];
- lightProbes[LightProbe::Bolonga].load("bolonga");
- lightProbes[LightProbe::Kyoto ].load("kyoto");
- LightProbe::Enum currentLightProbe = LightProbe::Bolonga;
+ m_programMesh = loadProgram("vs_ibl_mesh", "fs_ibl_mesh");
+ m_programSky = loadProgram("vs_ibl_skybox", "fs_ibl_skybox");
- bgfx::UniformHandle u_mtx = bgfx::createUniform("u_mtx", bgfx::UniformType::Mat4);
- bgfx::UniformHandle u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4);
- bgfx::UniformHandle u_flags = bgfx::createUniform("u_flags", bgfx::UniformType::Vec4);
- bgfx::UniformHandle u_camPos = bgfx::createUniform("u_camPos", bgfx::UniformType::Vec4);
- bgfx::UniformHandle s_texCube = bgfx::createUniform("s_texCube", bgfx::UniformType::Int1);
- bgfx::UniformHandle s_texCubeIrr = bgfx::createUniform("s_texCubeIrr", bgfx::UniformType::Int1);
+ m_meshBunny = meshLoad("meshes/bunny.bin");
+ m_meshOrb = meshLoad("meshes/orb.bin");
+ }
- bgfx::ProgramHandle programMesh = loadProgram("vs_ibl_mesh", "fs_ibl_mesh");
- bgfx::ProgramHandle programSky = loadProgram("vs_ibl_skybox", "fs_ibl_skybox");
+ virtual int shutdown() override
+ {
+ meshUnload(m_meshBunny);
+ meshUnload(m_meshOrb);
- Mesh* meshBunny;
- meshBunny = meshLoad("meshes/bunny.bin");
+ // Cleanup.
+ bgfx::destroy(m_programMesh);
+ bgfx::destroy(m_programSky);
- Mesh* meshOrb;
- meshOrb = meshLoad("meshes/orb.bin");
+ bgfx::destroy(u_camPos);
+ bgfx::destroy(u_flags);
+ bgfx::destroy(u_params);
+ bgfx::destroy(u_mtx);
- Camera camera;
- Mouse mouse;
+ bgfx::destroy(s_texCube);
+ bgfx::destroy(s_texCubeIrr);
- struct Settings
- {
- Settings()
+ for (uint8_t ii = 0; ii < LightProbe::Count; ++ii)
{
- m_envRotCurr = 0.0f;
- m_envRotDest = 0.0f;
- m_lightDir[0] = -0.8f;
- m_lightDir[1] = 0.2f;
- m_lightDir[2] = -0.5f;
- m_lightCol[0] = 1.0f;
- m_lightCol[1] = 1.0f;
- m_lightCol[2] = 1.0f;
- m_glossiness = 0.7f;
- m_exposure = 0.0f;
- m_bgType = 3.0f;
- m_radianceSlider = 2.0f;
- m_reflectivity = 0.85f;
- m_rgbDiff[0] = 1.0f;
- m_rgbDiff[1] = 1.0f;
- m_rgbDiff[2] = 1.0f;
- m_rgbSpec[0] = 1.0f;
- m_rgbSpec[1] = 1.0f;
- m_rgbSpec[2] = 1.0f;
- m_lod = 0.0f;
- m_doDiffuse = false;
- m_doSpecular = false;
- m_doDiffuseIbl = true;
- m_doSpecularIbl = true;
- m_showLightColorWheel = true;
- m_showDiffColorWheel = true;
- m_showSpecColorWheel = true;
- m_metalOrSpec = 0;
- m_meshSelection = 0;
- m_crossCubemapPreview = ImguiCubemap::Latlong;
+ m_lightProbes[ii].destroy();
}
- float m_envRotCurr;
- float m_envRotDest;
- float m_lightDir[3];
- float m_lightCol[3];
- float m_glossiness;
- float m_exposure;
- float m_radianceSlider;
- float m_bgType;
- float m_reflectivity;
- float m_rgbDiff[3];
- float m_rgbSpec[3];
- float m_lod;
- bool m_doDiffuse;
- bool m_doSpecular;
- bool m_doDiffuseIbl;
- bool m_doSpecularIbl;
- bool m_showLightColorWheel;
- bool m_showDiffColorWheel;
- bool m_showSpecColorWheel;
- uint8_t m_metalOrSpec;
- uint8_t m_meshSelection;
- ImguiCubemap::Enum m_crossCubemapPreview;
- };
+ m_uniforms.destroy();
- Settings settings;
+ imguiDestroy();
- int32_t leftScrollArea = 0;
+ // Shutdown bgfx.
+ bgfx::shutdown();
- entry::MouseState mouseState;
- while (!entry::processEvents(width, height, debug, reset, &mouseState) )
- {
- imguiBeginFrame(mouseState.m_mx
- , mouseState.m_my
- , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , mouseState.m_mz
- , uint16_t(width)
- , uint16_t(height)
- );
+ return 0;
+ }
- static int32_t rightScrollArea = 0;
- imguiBeginScrollArea("", width - 256 - 10, 10, 256, 700, &rightScrollArea);
-
- imguiLabel("Environment light:");
- imguiIndent();
- imguiBool("IBL Diffuse", settings.m_doDiffuseIbl);
- imguiBool("IBL Specular", settings.m_doSpecularIbl);
- currentLightProbe = LightProbe::Enum(imguiTabs(
- uint8_t(currentLightProbe)
- , true
- , ImguiAlign::LeftIndented
- , 16
- , 2
- , 2
- , "Bolonga"
- , "Kyoto"
- ) );
- if (imguiCube(lightProbes[currentLightProbe].m_tex, settings.m_lod, settings.m_crossCubemapPreview, true) )
- {
- settings.m_crossCubemapPreview = ImguiCubemap::Enum( (settings.m_crossCubemapPreview+1) % ImguiCubemap::Count);
- }
- imguiSlider("Texture LOD", settings.m_lod, 0.0f, 10.1f, 0.1f);
- imguiUnindent();
-
- imguiSeparator(8);
- imguiLabel("Directional light:");
- imguiIndent();
- imguiBool("Diffuse", settings.m_doDiffuse);
- imguiBool("Specular", settings.m_doSpecular);
- const bool doDirectLighting = settings.m_doDiffuse || settings.m_doSpecular;
- imguiSlider("Light direction X", settings.m_lightDir[0], -1.0f, 1.0f, 0.1f, doDirectLighting);
- imguiSlider("Light direction Y", settings.m_lightDir[1], -1.0f, 1.0f, 0.1f, doDirectLighting);
- imguiSlider("Light direction Z", settings.m_lightDir[2], -1.0f, 1.0f, 0.1f, doDirectLighting);
- imguiColorWheel("Color:", settings.m_lightCol, settings.m_showLightColorWheel, 0.6f, doDirectLighting);
- imguiUnindent();
-
- imguiSeparator(8);
- imguiLabel("Background:");
- imguiIndent();
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- int32_t selection;
- if (0.0f == settings.m_bgType) { selection = UINT8_C(0); }
- else if (7.0f == settings.m_bgType) { selection = UINT8_C(2); }
- else { selection = UINT8_C(1); }
-
- selection = imguiTabs(
- uint8_t(selection)
- , true
- , ImguiAlign::LeftIndented
- , 16
- , 2
- , 3
- , "Skybox"
- , "Radiance"
- , "Irradiance"
- );
- if (0 == selection) { settings.m_bgType = 0.0f; }
- else if (2 == selection) { settings.m_bgType = 7.0f; }
- else { settings.m_bgType = settings.m_radianceSlider; }
- const bool isRadiance = (selection == 1);
- imguiSlider("Mip level", settings.m_radianceSlider, 1.0f, 6.0f, 0.1f, isRadiance);
- }
- imguiUnindent();
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height - 20.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+ ImGui::PushItemWidth(180.0f);
+
+ ImGui::Text("Environment light:");
+ ImGui::Indent();
+ ImGui::Checkbox("IBL Diffuse", &m_settings.m_doDiffuseIbl);
+ ImGui::Checkbox("IBL Specular", &m_settings.m_doSpecularIbl);
- imguiSeparator(8);
- imguiLabel("Post processing:");
- imguiIndent();
- imguiSlider("Exposure", settings.m_exposure, -4.0f, 4.0f, 0.1f);
- imguiUnindent();
+ {
+ float tabWidth = ImGui::GetContentRegionAvailWidth() / 2.0f;
+ if (ImGui::TabButton("Bolonga", tabWidth, m_currentLightProbe == LightProbe::Bolonga) )
+ {
+ m_currentLightProbe = LightProbe::Bolonga;
+ }
- imguiSeparator();
+ ImGui::SameLine(0.0f,0.0f);
- imguiEndScrollArea();
+ if (ImGui::TabButton("Kyoto", tabWidth, m_currentLightProbe == LightProbe::Kyoto) )
+ {
+ m_currentLightProbe = LightProbe::Kyoto;
+ }
+ }
- imguiBeginScrollArea("", 10, 70, 256, 636, &leftScrollArea);
+ ImGui::SliderFloat("Texture LOD", &m_settings.m_lod, 0.0f, 10.1f);
+ ImGui::Unindent();
- imguiLabel("Mesh:");
- imguiIndent();
- settings.m_meshSelection = uint8_t(imguiChoose(settings.m_meshSelection, "Bunny", "Orbs") );
- imguiUnindent();
+ ImGui::Separator();
+ ImGui::Text("Directional light:");
+ ImGui::Indent();
+ ImGui::Checkbox("Diffuse", &m_settings.m_doDiffuse);
+ ImGui::Checkbox("Specular", &m_settings.m_doSpecular);
+ const bool doDirectLighting = m_settings.m_doDiffuse || m_settings.m_doSpecular;
+ if (doDirectLighting)
+ {
+ ImGui::SliderFloat("Light direction X", &m_settings.m_lightDir[0], -1.0f, 1.0f);
+ ImGui::SliderFloat("Light direction Y", &m_settings.m_lightDir[1], -1.0f, 1.0f);
+ ImGui::SliderFloat("Light direction Z", &m_settings.m_lightDir[2], -1.0f, 1.0f);
+ ImGui::ColorWheel("Color:", m_settings.m_lightCol, 0.6f);
+ }
+ ImGui::Unindent();
- const bool isBunny = (0 == settings.m_meshSelection);
- if (!isBunny)
- {
- settings.m_metalOrSpec = 0;
- }
+ ImGui::Separator();
+ ImGui::Text("Background:");
+ ImGui::Indent();
+ {
+ int32_t selection;
+ if (0.0f == m_settings.m_bgType)
+ {
+ selection = UINT8_C(0);
+ }
+ else if (7.0f == m_settings.m_bgType)
+ {
+ selection = UINT8_C(2);
+ }
+ else
+ {
+ selection = UINT8_C(1);
+ }
- imguiSeparator(4);
- imguiLabel("Workflow:");
- imguiIndent();
- if (imguiCheck("Metalness", 0 == settings.m_metalOrSpec, isBunny) ) { settings.m_metalOrSpec = 0; }
- if (imguiCheck("Specular", 1 == settings.m_metalOrSpec, isBunny) ) { settings.m_metalOrSpec = 1; }
- imguiUnindent();
-
- imguiSeparator(4);
- imguiLabel("Material:");
- imguiIndent();
- imguiSlider("Glossiness", settings.m_glossiness, 0.0f, 1.0f, 0.01f, isBunny);
- imguiSlider(0 == settings.m_metalOrSpec ? "Metalness" : "Diffuse - Specular", settings.m_reflectivity, 0.0f, 1.0f, 0.01f, isBunny);
- imguiUnindent();
-
- imguiColorWheel("Diffuse:", &settings.m_rgbDiff[0], settings.m_showDiffColorWheel, 0.7f);
- imguiSeparator();
- imguiColorWheel("Specular:", &settings.m_rgbSpec[0], settings.m_showSpecColorWheel, 0.7f, (1 == settings.m_metalOrSpec) && isBunny);
-
- imguiEndScrollArea();
-
- imguiEndFrame();
-
- uniforms.m_glossiness = settings.m_glossiness;
- uniforms.m_reflectivity = settings.m_reflectivity;
- uniforms.m_exposure = settings.m_exposure;
- uniforms.m_bgType = settings.m_bgType;
- uniforms.m_metalOrSpec = float(settings.m_metalOrSpec);
- uniforms.m_doDiffuse = float(settings.m_doDiffuse);
- uniforms.m_doSpecular = float(settings.m_doSpecular);
- uniforms.m_doDiffuseIbl = float(settings.m_doDiffuseIbl);
- uniforms.m_doSpecularIbl = float(settings.m_doSpecularIbl);
- bx::memCopy(uniforms.m_rgbDiff, settings.m_rgbDiff, 3*sizeof(float) );
- bx::memCopy(uniforms.m_rgbSpec, settings.m_rgbSpec, 3*sizeof(float) );
- bx::memCopy(uniforms.m_lightDir, settings.m_lightDir, 3*sizeof(float) );
- bx::memCopy(uniforms.m_lightCol, settings.m_lightCol, 3*sizeof(float) );
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
- const float deltaTimeSec = float(double(frameTime)/freq);
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/18-ibl");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Image-based lighting.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- // Camera.
- const bool mouseOverGui = imguiMouseOverArea();
- mouse.update(float(mouseState.m_mx), float(mouseState.m_my), mouseState.m_mz, width, height);
- if (!mouseOverGui)
- {
- if (mouseState.m_buttons[entry::MouseButton::Left])
+ float tabWidth = ImGui::GetContentRegionAvailWidth() / 3.0f;
+ if (ImGui::TabButton("Skybox", tabWidth, selection == 0) )
+ {
+ selection = 0;
+ }
+
+ ImGui::SameLine(0.0f,0.0f);
+ if (ImGui::TabButton("Radiance", tabWidth, selection == 1) )
+ {
+ selection = 1;
+ }
+
+ ImGui::SameLine(0.0f,0.0f);
+ if (ImGui::TabButton("Irradiance", tabWidth, selection == 2) )
+ {
+ selection = 2;
+ }
+
+ if (0 == selection)
+ {
+ m_settings.m_bgType = 0.0f;
+ }
+ else if (2 == selection)
+ {
+ m_settings.m_bgType = 7.0f;
+ }
+ else
+ {
+ m_settings.m_bgType = m_settings.m_radianceSlider;
+ }
+
+ const bool isRadiance = (selection == 1);
+ if (isRadiance)
+ {
+ ImGui::SliderFloat("Mip level", &m_settings.m_radianceSlider, 1.0f, 6.0f);
+ }
+ }
+ ImGui::Unindent();
+
+ ImGui::Separator();
+ ImGui::Text("Post processing:");
+ ImGui::Indent();
+ ImGui::SliderFloat("Exposure",& m_settings.m_exposure, -4.0f, 4.0f);
+ ImGui::Unindent();
+
+ ImGui::PopItemWidth();
+ ImGui::End();
+
+ ImGui::SetNextWindowPos(
+ ImVec2(10.0f, 260.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Mesh"
+ , NULL
+ , ImVec2(m_width / 5.0f, 450.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+
+ ImGui::Text("Mesh:");
+ ImGui::Indent();
+ ImGui::RadioButton("Bunny", &m_settings.m_meshSelection, 0);
+ ImGui::RadioButton("Orbs", &m_settings.m_meshSelection, 1);
+ ImGui::Unindent();
+
+ const bool isBunny = (0 == m_settings.m_meshSelection);
+ if (!isBunny)
+ {
+ m_settings.m_metalOrSpec = 0;
+ }
+ else
{
- camera.orbit(mouse.m_dx, mouse.m_dy);
+ ImGui::Separator();
+ ImGui::Text("Workflow:");
+ ImGui::Indent();
+ ImGui::RadioButton("Metalness", &m_settings.m_metalOrSpec, 0);
+ ImGui::RadioButton("Specular", &m_settings.m_metalOrSpec, 1);
+ ImGui::Unindent();
+
+ ImGui::Separator();
+ ImGui::Text("Material:");
+ ImGui::Indent();
+ ImGui::PushItemWidth(130.0f);
+ ImGui::SliderFloat("Glossiness", &m_settings.m_glossiness, 0.0f, 1.0f);
+ ImGui::SliderFloat(0 == m_settings.m_metalOrSpec ? "Metalness" : "Diffuse - Specular", &m_settings.m_reflectivity, 0.0f, 1.0f);
+ ImGui::PopItemWidth();
+ ImGui::Unindent();
}
- else if (mouseState.m_buttons[entry::MouseButton::Right])
+
+
+ ImGui::ColorWheel("Diffuse:", &m_settings.m_rgbDiff[0], 0.7f);
+ ImGui::Separator();
+ if ( (1 == m_settings.m_metalOrSpec) && isBunny )
{
- camera.dolly(mouse.m_dx + mouse.m_dy);
+ ImGui::ColorWheel("Specular:", &m_settings.m_rgbSpec[0], 0.7f);
}
- else if (mouseState.m_buttons[entry::MouseButton::Middle])
+
+ ImGui::End();
+
+ imguiEndFrame();
+
+ m_uniforms.m_glossiness = m_settings.m_glossiness;
+ m_uniforms.m_reflectivity = m_settings.m_reflectivity;
+ m_uniforms.m_exposure = m_settings.m_exposure;
+ m_uniforms.m_bgType = m_settings.m_bgType;
+ m_uniforms.m_metalOrSpec = float(m_settings.m_metalOrSpec);
+ m_uniforms.m_doDiffuse = float(m_settings.m_doDiffuse);
+ m_uniforms.m_doSpecular = float(m_settings.m_doSpecular);
+ m_uniforms.m_doDiffuseIbl = float(m_settings.m_doDiffuseIbl);
+ m_uniforms.m_doSpecularIbl = float(m_settings.m_doSpecularIbl);
+ bx::memCopy(m_uniforms.m_rgbDiff, m_settings.m_rgbDiff, 3*sizeof(float) );
+ bx::memCopy(m_uniforms.m_rgbSpec, m_settings.m_rgbSpec, 3*sizeof(float) );
+ bx::memCopy(m_uniforms.m_lightDir, m_settings.m_lightDir, 3*sizeof(float) );
+ bx::memCopy(m_uniforms.m_lightCol, m_settings.m_lightCol, 3*sizeof(float) );
+
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const float deltaTimeSec = float(double(frameTime)/freq);
+
+ // Camera.
+ const bool mouseOverGui = ImGui::MouseOverArea();
+ m_mouse.update(float(m_mouseState.m_mx), float(m_mouseState.m_my), m_mouseState.m_mz, m_width, m_height);
+ if (!mouseOverGui)
{
- settings.m_envRotDest += mouse.m_dx*2.0f;
+ if (m_mouseState.m_buttons[entry::MouseButton::Left])
+ {
+ m_camera.orbit(m_mouse.m_dx, m_mouse.m_dy);
+ }
+ else if (m_mouseState.m_buttons[entry::MouseButton::Right])
+ {
+ m_camera.dolly(m_mouse.m_dx + m_mouse.m_dy);
+ }
+ else if (m_mouseState.m_buttons[entry::MouseButton::Middle])
+ {
+ m_settings.m_envRotDest += m_mouse.m_dx*2.0f;
+ }
+ else if (0 != m_mouse.m_scroll)
+ {
+ m_camera.dolly(float(m_mouse.m_scroll)*0.05f);
+ }
}
- else if (0 != mouse.m_scroll)
+ m_camera.update(deltaTimeSec);
+ bx::memCopy(m_uniforms.m_cameraPos, m_camera.m_pos.curr, 3*sizeof(float) );
+
+ // View Transform 0.
+ float view[16];
+ bx::mtxIdentity(view);
+
+ const bgfx::Caps* caps = bgfx::getCaps();
+
+ float proj[16];
+ bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0, caps->homogeneousDepth);
+ bgfx::setViewTransform(0, view, proj);
+
+ // View Transform 1.
+ m_camera.mtxLookAt(view);
+ bx::mtxProj(proj, 45.0f, float(m_width)/float(m_height), 0.1f, 100.0f, caps->homogeneousDepth);
+ bgfx::setViewTransform(1, view, proj);
+
+ // View rect.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ bgfx::setViewRect(1, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+
+ // Env rotation.
+ const float amount = bx::fmin(deltaTimeSec/0.12f, 1.0f);
+ m_settings.m_envRotCurr = bx::flerp(m_settings.m_envRotCurr, m_settings.m_envRotDest, amount);
+
+ // Env mtx.
+ float mtxEnvView[16];
+ m_camera.envViewMtx(mtxEnvView);
+ float mtxEnvRot[16];
+ bx::mtxRotateY(mtxEnvRot, m_settings.m_envRotCurr);
+ bx::mtxMul(m_uniforms.m_mtx, mtxEnvView, mtxEnvRot); // Used for Skybox.
+
+ // Submit view 0.
+ bgfx::setTexture(0, s_texCube, m_lightProbes[m_currentLightProbe].m_tex);
+ bgfx::setTexture(1, s_texCubeIrr, m_lightProbes[m_currentLightProbe].m_texIrr);
+ bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
+ screenSpaceQuad( (float)m_width, (float)m_height, true);
+ m_uniforms.submit();
+ bgfx::submit(0, m_programSky);
+
+ // Submit view 1.
+ bx::memCopy(m_uniforms.m_mtx, mtxEnvRot, 16*sizeof(float)); // Used for IBL.
+ if (0 == m_settings.m_meshSelection)
{
- camera.dolly(float(mouse.m_scroll)*0.05f);
+ // Submit bunny.
+ float mtx[16];
+ bx::mtxSRT(mtx, 1.0f, 1.0f, 1.0f, 0.0f, bx::kPi, 0.0f, 0.0f, -0.80f, 0.0f);
+ bgfx::setTexture(0, s_texCube, m_lightProbes[m_currentLightProbe].m_tex);
+ bgfx::setTexture(1, s_texCubeIrr, m_lightProbes[m_currentLightProbe].m_texIrr);
+ m_uniforms.submit();
+ meshSubmit(m_meshBunny, 1, m_programMesh, mtx);
}
- }
- camera.update(deltaTimeSec);
- bx::memCopy(uniforms.m_cameraPos, camera.m_pos.curr, 3*sizeof(float) );
-
- // View Transform 0.
- float view[16];
- float proj[16];
- bx::mtxIdentity(view);
- bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
- bgfx::setViewTransform(0, view, proj);
-
- // View Transform 1.
- camera.mtxLookAt(view);
- bx::mtxProj(proj, 45.0f, float(width)/float(height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
- bgfx::setViewTransform(1, view, proj);
-
- // View rect.
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
- bgfx::setViewRect(1, 0, 0, uint16_t(width), uint16_t(height) );
-
- // Env rotation.
- const float amount = bx::fmin(deltaTimeSec/0.12f, 1.0f);
- settings.m_envRotCurr = bx::flerp(settings.m_envRotCurr, settings.m_envRotDest, amount);
-
- // Env mtx.
- float mtxEnvView[16];
- camera.envViewMtx(mtxEnvView);
- float mtxEnvRot[16];
- bx::mtxRotateY(mtxEnvRot, settings.m_envRotCurr);
- bx::mtxMul(uniforms.m_mtx, mtxEnvView, mtxEnvRot); // Used for Skybox.
-
- // Submit view 0.
- bgfx::setTexture(0, s_texCube, lightProbes[currentLightProbe].m_tex);
- bgfx::setTexture(1, s_texCubeIrr, lightProbes[currentLightProbe].m_texIrr);
- bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
- screenSpaceQuad( (float)width, (float)height, true);
- uniforms.submit();
- bgfx::submit(0, programSky);
-
- // Submit view 1.
- bx::memCopy(uniforms.m_mtx, mtxEnvRot, 16*sizeof(float)); // Used for IBL.
- if (0 == settings.m_meshSelection)
- {
- // Submit bunny.
- float mtx[16];
- bx::mtxSRT(mtx, 1.0f, 1.0f, 1.0f, 0.0f, bx::pi, 0.0f, 0.0f, -0.80f, 0.0f);
- bgfx::setTexture(0, s_texCube, lightProbes[currentLightProbe].m_tex);
- bgfx::setTexture(1, s_texCubeIrr, lightProbes[currentLightProbe].m_texIrr);
- uniforms.submit();
- meshSubmit(meshBunny, 1, programMesh, mtx);
- }
- else
- {
- // Submit orbs.
- for (float yy = 0, yend = 5.0f; yy < yend; yy+=1.0f)
+ else
{
- for (float xx = 0, xend = 5.0f; xx < xend; xx+=1.0f)
+ // Submit orbs.
+ for (float yy = 0, yend = 5.0f; yy < yend; yy+=1.0f)
{
- const float scale = 1.2f;
- const float spacing = 2.2f;
- const float yAdj = -0.8f;
-
- float mtx[16];
- bx::mtxSRT(mtx
+ for (float xx = 0, xend = 5.0f; xx < xend; xx+=1.0f)
+ {
+ const float scale = 1.2f;
+ const float spacing = 2.2f;
+ const float yAdj = -0.8f;
+
+ float mtx[16];
+ bx::mtxSRT(mtx
, scale/xend
, scale/xend
, scale/xend
@@ -790,49 +877,57 @@ int _main_(int _argc, char** _argv)
, 0.0f
);
- uniforms.m_glossiness = xx*(1.0f/xend);
- uniforms.m_reflectivity = (yend-yy)*(1.0f/yend);
- uniforms.m_metalOrSpec = 0.0f;
- uniforms.submit();
+ m_uniforms.m_glossiness = xx*(1.0f/xend);
+ m_uniforms.m_reflectivity = (yend-yy)*(1.0f/yend);
+ m_uniforms.m_metalOrSpec = 0.0f;
+ m_uniforms.submit();
- bgfx::setTexture(0, s_texCube, lightProbes[currentLightProbe].m_tex);
- bgfx::setTexture(1, s_texCubeIrr, lightProbes[currentLightProbe].m_texIrr);
- meshSubmit(meshOrb, 1, programMesh, mtx);
+ bgfx::setTexture(0, s_texCube, m_lightProbes[m_currentLightProbe].m_tex);
+ bgfx::setTexture(1, s_texCubeIrr, m_lightProbes[m_currentLightProbe].m_texIrr);
+ meshSubmit(m_meshOrb, 1, m_programMesh, mtx);
+ }
}
}
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
}
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ return false;
}
- meshUnload(meshBunny);
- meshUnload(meshOrb);
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+ entry::MouseState m_mouseState;
- // Cleanup.
- bgfx::destroyProgram(programMesh);
- bgfx::destroyProgram(programSky);
+ Uniforms m_uniforms;
- bgfx::destroyUniform(u_camPos);
- bgfx::destroyUniform(u_flags);
- bgfx::destroyUniform(u_params);
- bgfx::destroyUniform(u_mtx);
+ LightProbe m_lightProbes[LightProbe::Count];
+ LightProbe::Enum m_currentLightProbe;
- bgfx::destroyUniform(s_texCube);
- bgfx::destroyUniform(s_texCubeIrr);
+ bgfx::UniformHandle u_mtx;
+ bgfx::UniformHandle u_params;
+ bgfx::UniformHandle u_flags;
+ bgfx::UniformHandle u_camPos;
+ bgfx::UniformHandle s_texCube;
+ bgfx::UniformHandle s_texCubeIrr;
- for (uint8_t ii = 0; ii < LightProbe::Count; ++ii)
- {
- lightProbes[ii].destroy();
- }
+ bgfx::ProgramHandle m_programMesh;
+ bgfx::ProgramHandle m_programSky;
- uniforms.destroy();
+ Mesh* m_meshBunny;
+ Mesh* m_meshOrb;
+ Camera m_camera;
+ Mouse m_mouse;
- imguiDestroy();
+ Settings m_settings;
+};
- // Shutdown bgfx.
- bgfx::shutdown();
+} // namespace
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleIbl, "18-ibl", "Image-based lighting.");
diff --git a/3rdparty/bgfx/examples/19-oit/oit.cpp b/3rdparty/bgfx/examples/19-oit/oit.cpp
index 90c5db05c99..63905a2b89d 100644
--- a/3rdparty/bgfx/examples/19-oit/oit.cpp
+++ b/3rdparty/bgfx/examples/19-oit/oit.cpp
@@ -7,6 +7,9 @@
#include "bgfx_utils.h"
#include "imgui/imgui.h"
+namespace
+{
+
struct PosColorVertex
{
float m_x;
@@ -142,19 +145,25 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBott
vertex[2].m_u = maxu;
vertex[2].m_v = maxv;
- bgfx::setVertexBuffer(&vb);
+ bgfx::setVertexBuffer(0, &vb);
}
}
class ExampleOIT : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleOIT(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -206,12 +215,11 @@ class ExampleOIT : public entry::AppI
m_wbPass = loadProgram("vs_oit", "fs_oit_wb" );
m_wbBlit = loadProgram("vs_oit_blit", "fs_oit_wb_blit" );
- m_fbtextures[0].idx = bgfx::invalidHandle;
- m_fbtextures[1].idx = bgfx::invalidHandle;
- m_fbh.idx = bgfx::invalidHandle;
+ m_fbtextures[0].idx = bgfx::kInvalidHandle;
+ m_fbtextures[1].idx = bgfx::kInvalidHandle;
+ m_fbh.idx = bgfx::kInvalidHandle;
m_mode = 1;
- m_scrollArea = 0;
m_frontToBack = true;
m_fadeInOut = false;
@@ -219,25 +227,35 @@ class ExampleOIT : public entry::AppI
m_oldHeight = 0;
m_oldReset = m_reset;
+ m_mrtSupported = true
+ && 2 <= caps->limits.maxFBAttachments
+ && bgfx::isTextureValid(0, false, 1, bgfx::TextureFormat::RGBA16F, BGFX_TEXTURE_RT)
+ && bgfx::isTextureValid(0, false, 1, bgfx::TextureFormat::R16F, BGFX_TEXTURE_RT)
+ ;
+
m_timeOffset = bx::getHPCounter();
}
- int shutdown() BX_OVERRIDE
+ int shutdown() override
{
// Cleanup.
imguiDestroy();
- bgfx::destroyFrameBuffer(m_fbh);
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
- bgfx::destroyProgram(m_blend);
- bgfx::destroyProgram(m_wbSeparatePass);
- bgfx::destroyProgram(m_wbSeparateBlit);
- bgfx::destroyProgram(m_wbPass);
- bgfx::destroyProgram(m_wbBlit);
- bgfx::destroyUniform(s_texColor0);
- bgfx::destroyUniform(s_texColor1);
- bgfx::destroyUniform(u_color);
+ if (bgfx::isValid(m_fbh) )
+ {
+ bgfx::destroy(m_fbh);
+ }
+
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_blend);
+ bgfx::destroy(m_wbSeparatePass);
+ bgfx::destroy(m_wbSeparateBlit);
+ bgfx::destroy(m_wbPass);
+ bgfx::destroy(m_wbBlit);
+ bgfx::destroy(s_texColor0);
+ bgfx::destroy(s_texColor1);
+ bgfx::destroy(u_color);
// Shutdown bgfx.
bgfx::shutdown();
@@ -245,30 +263,10 @@ class ExampleOIT : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- if (m_oldWidth != m_width
- || m_oldHeight != m_height
- || m_oldReset != m_reset
- || !bgfx::isValid(m_fbh) )
- {
- // Recreate variable size render targets when resolution changes.
- m_oldWidth = m_width;
- m_oldHeight = m_height;
- m_oldReset = m_reset;
-
- if (bgfx::isValid(m_fbh) )
- {
- bgfx::destroyFrameBuffer(m_fbh);
- }
-
- m_fbtextures[0] = bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::RGBA16F, BGFX_TEXTURE_RT);
- m_fbtextures[1] = bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::R16F, BGFX_TEXTURE_RT);
- m_fbh = bgfx::createFrameBuffer(BX_COUNTOF(m_fbtextures), m_fbtextures, true);
- }
-
imguiBeginFrame(m_mouseState.m_mx
, m_mouseState.m_my
, (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
@@ -279,148 +277,167 @@ class ExampleOIT : public entry::AppI
, uint16_t(m_height)
);
- imguiBeginScrollArea("Settings", m_width - m_width / 4 - 10, 10, m_width / 4, m_height / 3, &m_scrollArea);
- imguiSeparatorLine();
+ showExampleDialog(this
+ , !m_mrtSupported
+ ? "MRT or frame buffer texture format are not supported."
+ : NULL
+ );
- imguiLabel("Blend mode:");
+ if (m_mrtSupported)
+ {
+ if (m_oldWidth != m_width
+ || m_oldHeight != m_height
+ || m_oldReset != m_reset
+ || !bgfx::isValid(m_fbh) )
+ {
+ // Recreate variable size render targets when resolution changes.
+ m_oldWidth = m_width;
+ m_oldHeight = m_height;
+ m_oldReset = m_reset;
- m_mode = imguiChoose(m_mode
- , "None"
- , "Separate"
- , "MRT Independent"
- );
+ if (bgfx::isValid(m_fbh) )
+ {
+ bgfx::destroy(m_fbh);
+ }
- imguiSeparatorLine();
+ m_fbtextures[0] = bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::RGBA16F, BGFX_TEXTURE_RT);
+ m_fbtextures[1] = bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::R16F, BGFX_TEXTURE_RT);
+ m_fbh = bgfx::createFrameBuffer(BX_COUNTOF(m_fbtextures), m_fbtextures, true);
+ }
- if (imguiCheck("Front to back", m_frontToBack) )
- {
- m_frontToBack ^= true;
- }
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 3.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
- if (imguiCheck("Fade in/out", m_fadeInOut) )
- {
- m_fadeInOut ^= true;
- }
+ ImGui::Separator();
- imguiEndScrollArea();
- imguiEndFrame();
+ ImGui::Text("Blend mode:");
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
- bgfx::setViewRect(1, 0, 0, uint16_t(m_width), uint16_t(m_height) );
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
-
- float time = (float)( (now-m_timeOffset)/freq);
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- // Reference:
- // Weighted, Blended Order-Independent Transparency
- // http://jcgt.org/published/0002/02/09/
- // http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/19-oit");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Weighted, Blended Order Independent Transparency.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- float at[3] = { 0.0f, 0.0f, 0.0f };
- float eye[3] = { 0.0f, 0.0f, -7.0f };
-
- float view[16];
- float proj[16];
-
- // Set view and projection matrix for view 0.
- bx::mtxLookAt(view, eye, at);
- mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
-
- bgfx::setViewTransform(0, view, proj);
-
- // Set palette color for index 0
- bgfx::setPaletteColor(0, 0.0f, 0.0f, 0.0f, 0.0f);
-
- // Set palette color for index 1
- bgfx::setPaletteColor(1, 1.0f, 1.0f, 1.0f, 1.0f);
-
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 1.0f // Depth
- , 0 // Stencil
- , 0 // FB texture 0, color palette 0
- , 1 == m_mode ? 1 : 0 // FB texture 1, color palette 1
- );
+ ImGui::RadioButton("None", &m_mode, 0);
+ ImGui::RadioButton("Separate", &m_mode, 1);
+ ImGui::RadioButton("MRT Independent", &m_mode, 2);
- bgfx::setViewClear(1
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 1.0f // Depth
- , 0 // Stencil
- , 0 // Color palette 0
- );
+ ImGui::Separator();
- bgfx::FrameBufferHandle invalid = BGFX_INVALID_HANDLE;
- bgfx::setViewFrameBuffer(0, 0 == m_mode ? invalid : m_fbh);
+ ImGui::Checkbox("Front to back", &m_frontToBack);
+ ImGui::Checkbox("Fade in/out", &m_fadeInOut);
- // Set view and projection matrix for view 1.
- bx::mtxIdentity(view);
- bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
- bgfx::setViewTransform(1, view, proj);
+ ImGui::End();
- for (uint32_t depth = 0; depth < 3; ++depth)
- {
- uint32_t zz = m_frontToBack ? 2-depth : depth;
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ bgfx::setViewRect(1, 0, 0, uint16_t(m_width), uint16_t(m_height) );
- for (uint32_t yy = 0; yy < 3; ++yy)
- {
- for (uint32_t xx = 0; xx < 3; ++xx)
- {
- float color[4] = { xx*1.0f/3.0f, zz*1.0f/3.0f, yy*1.0f/3.0f, 0.5f };
+ int64_t now = bx::getHPCounter();
+ const double freq = double(bx::getHPFrequency() );
+ float time = (float)( (now-m_timeOffset)/freq);
- if (m_fadeInOut
- && zz == 1)
- {
- color[3] = bx::fsin(time*3.0f)*0.49f+0.5f;
- }
+ // Reference:
+ // Weighted, Blended Order-Independent Transparency
+ // http://jcgt.org/published/0002/02/09/
+ // http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html
- bgfx::setUniform(u_color, color);
-
- BX_UNUSED(time);
- float mtx[16];
- bx::mtxRotateXY(mtx, time*0.023f + xx*0.21f, time*0.03f + yy*0.37f);
- //mtxIdentity(mtx);
- mtx[12] = -2.5f + float(xx)*2.5f;
- mtx[13] = -2.5f + float(yy)*2.5f;
- mtx[14] = -2.5f + float(zz)*2.5f;
-
- // Set transform for draw call.
- bgfx::setTransform(mtx);
-
- // Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
- bgfx::setIndexBuffer(m_ibh);
-
- const uint64_t state = 0
- | BGFX_STATE_CULL_CW
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_DEPTH_TEST_LESS
- | BGFX_STATE_MSAA
- ;
-
- const uint64_t stateNoDepth = 0
- | BGFX_STATE_CULL_CW
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_DEPTH_TEST_ALWAYS
- | BGFX_STATE_MSAA
- ;
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ float eye[3] = { 0.0f, 0.0f, -7.0f };
+
+ float view[16];
+ float proj[16];
+
+ // Set view and projection matrix for view 0.
+ bx::mtxLookAt(view, eye, at);
+ mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
+
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set palette color for index 0
+ bgfx::setPaletteColor(0, 0.0f, 0.0f, 0.0f, 0.0f);
+
+ // Set palette color for index 1
+ bgfx::setPaletteColor(1, 1.0f, 1.0f, 1.0f, 1.0f);
+
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 1.0f // Depth
+ , 0 // Stencil
+ , 0 // FB texture 0, color palette 0
+ , 1 == m_mode ? 1 : 0 // FB texture 1, color palette 1
+ );
+
+ bgfx::setViewClear(1
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 1.0f // Depth
+ , 0 // Stencil
+ , 0 // Color palette 0
+ );
+
+ bgfx::FrameBufferHandle invalid = BGFX_INVALID_HANDLE;
+ bgfx::setViewFrameBuffer(0, 0 == m_mode ? invalid : m_fbh);
+
+ // Set view and projection matrix for view 1.
+ bx::mtxIdentity(view);
- bgfx::ProgramHandle program = BGFX_INVALID_HANDLE;
- switch (m_mode)
+ const bgfx::Caps* caps = bgfx::getCaps();
+ bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth);
+ bgfx::setViewTransform(1, view, proj);
+
+ for (uint32_t depth = 0; depth < 3; ++depth)
+ {
+ uint32_t zz = m_frontToBack ? 2-depth : depth;
+
+ for (uint32_t yy = 0; yy < 3; ++yy)
+ {
+ for (uint32_t xx = 0; xx < 3; ++xx)
{
+ float color[4] = { xx*1.0f/3.0f, zz*1.0f/3.0f, yy*1.0f/3.0f, 0.5f };
+
+ if (m_fadeInOut
+ && zz == 1)
+ {
+ color[3] = bx::fsin(time*3.0f)*0.49f+0.5f;
+ }
+
+ bgfx::setUniform(u_color, color);
+
+ BX_UNUSED(time);
+ float mtx[16];
+ bx::mtxRotateXY(mtx, time*0.023f + xx*0.21f, time*0.03f + yy*0.37f);
+ //mtxIdentity(mtx);
+ mtx[12] = -2.5f + float(xx)*2.5f;
+ mtx[13] = -2.5f + float(yy)*2.5f;
+ mtx[14] = -2.5f + float(zz)*2.5f;
+
+ // Set transform for draw call.
+ bgfx::setTransform(mtx);
+
+ // Set vertex and index buffer.
+ bgfx::setVertexBuffer(0, m_vbh);
+ bgfx::setIndexBuffer(m_ibh);
+
+ const uint64_t state = 0
+ | BGFX_STATE_CULL_CW
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_TEST_LESS
+ | BGFX_STATE_MSAA
+ ;
+
+ const uint64_t stateNoDepth = 0
+ | BGFX_STATE_CULL_CW
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_TEST_ALWAYS
+ | BGFX_STATE_MSAA
+ ;
+
+ bgfx::ProgramHandle program = BGFX_INVALID_HANDLE;
+ switch (m_mode)
+ {
case 0:
// Set vertex and fragment shaders.
program = m_blend;
@@ -453,28 +470,31 @@ class ExampleOIT : public entry::AppI
| BGFX_STATE_BLEND_FUNC_RT_1(BGFX_STATE_BLEND_ZERO, BGFX_STATE_BLEND_SRC_COLOR)
);
break;
- }
+ }
- // Submit primitive for rendering to view 0.
- bgfx::submit(0, program);
+ // Submit primitive for rendering to view 0.
+ bgfx::submit(0, program);
+ }
}
}
- }
- if (0 != m_mode)
- {
- bgfx::setTexture(0, s_texColor0, m_fbtextures[0]);
- bgfx::setTexture(1, s_texColor1, m_fbtextures[1]);
- bgfx::setState(0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_INV_SRC_ALPHA, BGFX_STATE_BLEND_SRC_ALPHA)
- );
- screenSpaceQuad( (float)m_width, (float)m_height, s_flipV);
- bgfx::submit(1
- , 1 == m_mode ? m_wbSeparateBlit : m_wbBlit
- );
+ if (0 != m_mode)
+ {
+ bgfx::setTexture(0, s_texColor0, m_fbtextures[0]);
+ bgfx::setTexture(1, s_texColor1, m_fbtextures[1]);
+ bgfx::setState(0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_INV_SRC_ALPHA, BGFX_STATE_BLEND_SRC_ALPHA)
+ );
+ screenSpaceQuad( (float)m_width, (float)m_height, s_flipV);
+ bgfx::submit(1
+ , 1 == m_mode ? m_wbSeparateBlit : m_wbBlit
+ );
+ }
}
+ imguiEndFrame();
+
// Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives.
bgfx::frame();
@@ -490,10 +510,10 @@ class ExampleOIT : public entry::AppI
uint32_t m_debug;
uint32_t m_reset;
- uint32_t m_mode;
- int32_t m_scrollArea;
+ int32_t m_mode;
bool m_frontToBack;
bool m_fadeInOut;
+ bool m_mrtSupported;
uint32_t m_oldWidth;
uint32_t m_oldHeight;
@@ -520,4 +540,6 @@ class ExampleOIT : public entry::AppI
bgfx::FrameBufferHandle m_fbh;
};
-ENTRY_IMPLEMENT_MAIN(ExampleOIT);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleOIT, "19-oit", "Weighted, Blended Order Independent Transparency.");
diff --git a/3rdparty/bgfx/examples/20-nanovg/blendish.h b/3rdparty/bgfx/examples/20-nanovg/blendish.h
index 1afb1f5d0ed..15c2f3f0268 100644
--- a/3rdparty/bgfx/examples/20-nanovg/blendish.h
+++ b/3rdparty/bgfx/examples/20-nanovg/blendish.h
@@ -2229,10 +2229,10 @@ int bndIconLabelTextPosition(NVGcontext *ctx, float x, float y, float w, float h
ctx, x, y, rows[row].start, rows[row].end + 1, glyphs, BND_MAX_GLYPHS);
int col, p = 0;
for (col = 0; col < nglyphs && glyphs[col].x < px; ++col)
- p = glyphs[col].str - label;
+ p = (int)(glyphs[col].str - label);
// see if we should move one character further
if (col > 0 && col < nglyphs && glyphs[col].x - px < px - glyphs[col - 1].x)
- p = glyphs[col].str - label;
+ p = (int)(glyphs[col].str - label);
return p;
}
diff --git a/3rdparty/bgfx/examples/20-nanovg/nanovg.cpp b/3rdparty/bgfx/examples/20-nanovg/nanovg.cpp
index e6f89ce7c3c..77e8d41f114 100644
--- a/3rdparty/bgfx/examples/20-nanovg/nanovg.cpp
+++ b/3rdparty/bgfx/examples/20-nanovg/nanovg.cpp
@@ -29,6 +29,8 @@
#include <bx/string.h>
#include <bx/timer.h>
+#include <bimg/decode.h>
+
#include "entry/entry.h"
#include "imgui/imgui.h"
#include "nanovg/nanovg.h"
@@ -39,6 +41,9 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-parameter");
#include "blendish.h"
BX_PRAGMA_DIAGNOSTIC_POP();
+namespace
+{
+
#define ICON_SEARCH 0x1F50D
#define ICON_CIRCLED_CROSS 0x2716
#define ICON_CHEVRON_RIGHT 0xE75E
@@ -68,17 +73,16 @@ static char* cpToUTF8(int cp, char* str)
str[n] = '\0';
switch (n)
{
- case 6: str[5] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0x4000000;
- case 5: str[4] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0x200000;
- case 4: str[3] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0x10000;
- case 3: str[2] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0x800;
- case 2: str[1] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0xc0;
- case 1: str[0] = char(cp);
+ case 6: str[5] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0x4000000; BX_FALLTHROUGH;
+ case 5: str[4] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0x200000; BX_FALLTHROUGH;
+ case 4: str[3] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0x10000; BX_FALLTHROUGH;
+ case 3: str[2] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0x800; BX_FALLTHROUGH;
+ case 2: str[1] = 0x80 | (cp & 0x3f); cp = cp >> 6; cp |= 0xc0; BX_FALLTHROUGH;
+ case 1: str[0] = char(cp); BX_FALLTHROUGH;
}
return str;
}
-
void drawWindow(struct NVGcontext* vg, const char* title, float x, float y, float w, float h)
{
float cornerRadius = 3.0f;
@@ -939,13 +943,48 @@ struct DemoData
int images[12];
};
+int createImage(struct NVGcontext* _ctx, const char* _filePath, int _imageFlags)
+{
+ uint32_t size;
+ void* data = load(_filePath, &size);
+ if (NULL == data)
+ {
+ return 0;
+ }
+
+ bimg::ImageContainer* imageContainer = bimg::imageParse(
+ entry::getAllocator()
+ , data
+ , size
+ , bimg::TextureFormat::RGBA8
+ );
+ unload(data);
+
+ if (NULL == imageContainer)
+ {
+ return 0;
+ }
+
+ int texId = nvgCreateImageRGBA(
+ _ctx
+ , imageContainer->m_width
+ , imageContainer->m_height
+ , _imageFlags
+ , (const uint8_t*)imageContainer->m_data
+ );
+
+ bimg::imageFree(imageContainer);
+
+ return texId;
+}
+
int loadDemoData(struct NVGcontext* vg, struct DemoData* data)
{
for (uint32_t ii = 0; ii < 12; ++ii)
{
char file[128];
bx::snprintf(file, 128, "images/image%d.jpg", ii+1);
- data->images[ii] = nvgCreateImage(vg, file, 0);
+ data->images[ii] = createImage(vg, file, 0);
if (data->images[ii] == 0)
{
printf("Could not load %s.\n", file);
@@ -988,13 +1027,6 @@ void freeDemoData(struct NVGcontext* vg, struct DemoData* data)
nvgDeleteImage(vg, data->images[i]);
}
-#if defined(_MSC_VER) && (_MSC_VER < 1800)
-inline float round(float _f)
-{
- return float(int(_f) );
-}
-#endif
-
void drawParagraph(struct NVGcontext* vg, float x, float y, float width, float height, float mx, float my)
{
struct NVGtextRow rows[3];
@@ -1076,10 +1108,10 @@ void drawParagraph(struct NVGcontext* vg, float x, float y, float width, float h
nvgBeginPath(vg);
nvgFillColor(vg, nvgRGBA(255,192,0,255) );
nvgRoundedRect(vg
- , bx::fround(bounds[0])-4.0f
- , bx::fround(bounds[1])-2.0f
- , bx::fround(bounds[2]-bounds[0])+8.0f
- , bx::fround(bounds[3]-bounds[1])+4.0f
+ , bx::fround(bounds[0])-4.0f
+ , bx::fround(bounds[1])-2.0f
+ , bx::fround(bounds[2]-bounds[0])+8.0f
+ , bx::fround(bounds[3]-bounds[1])+4.0f
, (bx::fround(bounds[3]-bounds[1])+4.0f)/2.0f-1.0f
);
nvgFill(vg);
@@ -1203,13 +1235,19 @@ void renderDemo(struct NVGcontext* vg, float mx, float my, float width, float he
class ExampleNanoVG : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleNanoVG(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -1229,17 +1267,17 @@ class ExampleNanoVG : public entry::AppI
imguiCreate();
m_nvg = nvgCreate(1, 0);
- bgfx::setViewSeq(0, true);
+ bgfx::setViewMode(0, bgfx::ViewMode::Sequential);
loadDemoData(m_nvg, &m_data);
bndSetFont(nvgCreateFont(m_nvg, "droidsans", "font/droidsans.ttf") );
- bndSetIconImage(nvgCreateImage(m_nvg, "images/blender_icons16.png", 0) );
+ bndSetIconImage(createImage(m_nvg, "images/blender_icons16.png", 0) );
m_timeOffset = bx::getHPCounter();
}
- int shutdown() BX_OVERRIDE
+ int shutdown() override
{
freeDemoData(m_nvg, &m_data);
@@ -1253,10 +1291,24 @@ class ExampleNanoVG : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
int64_t now = bx::getHPCounter();
const double freq = double(bx::getHPFrequency() );
float time = (float)( (now-m_timeOffset)/freq);
@@ -1268,11 +1320,6 @@ class ExampleNanoVG : public entry::AppI
// if no other draw calls are submitted to view 0.
bgfx::touch(0);
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/20-nanovg");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: NanoVG is small antialiased vector graphics rendering library.");
-
nvgBeginFrame(m_nvg, m_width, m_height, 1.0f);
renderDemo(m_nvg, float(m_mouseState.m_mx), float(m_mouseState.m_my), float(m_width), float(m_height), time, 0, &m_data);
@@ -1302,4 +1349,6 @@ class ExampleNanoVG : public entry::AppI
DemoData m_data;
};
-ENTRY_IMPLEMENT_MAIN(ExampleNanoVG);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleNanoVG, "20-nanovg", "NanoVG is small antialiased vector graphics rendering library.");
diff --git a/3rdparty/bgfx/examples/21-deferred/deferred.cpp b/3rdparty/bgfx/examples/21-deferred/deferred.cpp
index de37b19f83f..45c8aaf7faf 100644
--- a/3rdparty/bgfx/examples/21-deferred/deferred.cpp
+++ b/3rdparty/bgfx/examples/21-deferred/deferred.cpp
@@ -9,6 +9,9 @@
#include "camera.h"
#include "bounds.h"
+namespace
+{
+
#define RENDER_PASS_GEOMETRY_ID 0
#define RENDER_PASS_LIGHT_ID 1
#define RENDER_PASS_COMBINE_ID 2
@@ -86,57 +89,32 @@ struct DebugVertex
bgfx::VertexDecl DebugVertex::ms_decl;
-uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w)
-{
- union
- {
- uint32_t ui32;
- uint8_t arr[4];
- } un;
-
- un.arr[0] = _x;
- un.arr[1] = _y;
- un.arr[2] = _z;
- un.arr[3] = _w;
-
- return un.ui32;
-}
-
-uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f)
-{
- const uint8_t xx = uint8_t(_x*127.0f + 128.0f);
- const uint8_t yy = uint8_t(_y*127.0f + 128.0f);
- const uint8_t zz = uint8_t(_z*127.0f + 128.0f);
- const uint8_t ww = uint8_t(_w*127.0f + 128.0f);
- return packUint32(xx, yy, zz, ww);
-}
-
static PosNormalTangentTexcoordVertex s_cubeVertices[24] =
{
- {-1.0f, 1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0, 0, 0 },
- { 1.0f, 1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0, 0x7fff, 0 },
- {-1.0f, -1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0, 0, 0x7fff },
- { 1.0f, -1.0f, 1.0f, packF4u( 0.0f, 0.0f, 1.0f), 0, 0x7fff, 0x7fff },
- {-1.0f, 1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0, 0, 0 },
- { 1.0f, 1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0, 0x7fff, 0 },
- {-1.0f, -1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0, 0, 0x7fff },
- { 1.0f, -1.0f, -1.0f, packF4u( 0.0f, 0.0f, -1.0f), 0, 0x7fff, 0x7fff },
- {-1.0f, 1.0f, 1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0, 0, 0 },
- { 1.0f, 1.0f, 1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0, 0x7fff, 0 },
- {-1.0f, 1.0f, -1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0, 0, 0x7fff },
- { 1.0f, 1.0f, -1.0f, packF4u( 0.0f, 1.0f, 0.0f), 0, 0x7fff, 0x7fff },
- {-1.0f, -1.0f, 1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0, 0, 0 },
- { 1.0f, -1.0f, 1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0, 0x7fff, 0 },
- {-1.0f, -1.0f, -1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0, 0, 0x7fff },
- { 1.0f, -1.0f, -1.0f, packF4u( 0.0f, -1.0f, 0.0f), 0, 0x7fff, 0x7fff },
- { 1.0f, -1.0f, 1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0, 0, 0 },
- { 1.0f, 1.0f, 1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0, 0x7fff, 0 },
- { 1.0f, -1.0f, -1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0, 0, 0x7fff },
- { 1.0f, 1.0f, -1.0f, packF4u( 1.0f, 0.0f, 0.0f), 0, 0x7fff, 0x7fff },
- {-1.0f, -1.0f, 1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0, 0, 0 },
- {-1.0f, 1.0f, 1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0, 0x7fff, 0 },
- {-1.0f, -1.0f, -1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0, 0, 0x7fff },
- {-1.0f, 1.0f, -1.0f, packF4u(-1.0f, 0.0f, 0.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0, 0, 0 },
+ { 1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0, 0x7fff, 0 },
+ {-1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0, 0, 0x7fff },
+ { 1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, 0.0f, 1.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0, 0, 0 },
+ { 1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0, 0x7fff, 0 },
+ {-1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0, 0, 0x7fff },
+ { 1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, 0.0f, -1.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0, 0, 0 },
+ { 1.0f, 1.0f, 1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0, 0x7fff, 0 },
+ {-1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0, 0, 0x7fff },
+ { 1.0f, 1.0f, -1.0f, encodeNormalRgba8( 0.0f, 1.0f, 0.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0, 0, 0 },
+ { 1.0f, -1.0f, 1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0, 0x7fff, 0 },
+ {-1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0, 0, 0x7fff },
+ { 1.0f, -1.0f, -1.0f, encodeNormalRgba8( 0.0f, -1.0f, 0.0f), 0, 0x7fff, 0x7fff },
+ { 1.0f, -1.0f, 1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0, 0, 0 },
+ { 1.0f, 1.0f, 1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0, 0x7fff, 0 },
+ { 1.0f, -1.0f, -1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0, 0, 0x7fff },
+ { 1.0f, 1.0f, -1.0f, encodeNormalRgba8( 1.0f, 0.0f, 0.0f), 0, 0x7fff, 0x7fff },
+ {-1.0f, -1.0f, 1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0, 0, 0 },
+ {-1.0f, 1.0f, 1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0, 0x7fff, 0 },
+ {-1.0f, -1.0f, -1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0, 0, 0x7fff },
+ {-1.0f, 1.0f, -1.0f, encodeNormalRgba8(-1.0f, 0.0f, 0.0f), 0, 0x7fff, 0x7fff },
};
static const uint16_t s_cubeIndices[36] =
@@ -208,19 +186,25 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, float _texelHalf
vertex[2].m_u = maxu;
vertex[2].m_v = maxv;
- bgfx::setVertexBuffer(&vb);
+ bgfx::setVertexBuffer(0, &vb);
}
}
class ExampleDeferred : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleDeferred(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -298,11 +282,11 @@ class ExampleDeferred : public entry::AppI
// Load normal texture.
m_textureNormal = loadTexture("textures/fieldstone-n.dds");
- m_gbufferTex[0].idx = bgfx::invalidHandle;
- m_gbufferTex[1].idx = bgfx::invalidHandle;
- m_gbufferTex[2].idx = bgfx::invalidHandle;
- m_gbuffer.idx = bgfx::invalidHandle;
- m_lightBuffer.idx = bgfx::invalidHandle;
+ m_gbufferTex[0].idx = bgfx::kInvalidHandle;
+ m_gbufferTex[1].idx = bgfx::kInvalidHandle;
+ m_gbufferTex[2].idx = bgfx::kInvalidHandle;
+ m_gbuffer.idx = bgfx::kInvalidHandle;
+ m_lightBuffer.idx = bgfx::kInvalidHandle;
// Imgui.
imguiCreate();
@@ -332,7 +316,7 @@ class ExampleDeferred : public entry::AppI
cameraSetVerticalAngle(0.0f);
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
// Cleanup.
cameraDestroy();
@@ -340,32 +324,32 @@ class ExampleDeferred : public entry::AppI
if (bgfx::isValid(m_gbuffer) )
{
- bgfx::destroyFrameBuffer(m_gbuffer);
- bgfx::destroyFrameBuffer(m_lightBuffer);
+ bgfx::destroy(m_gbuffer);
+ bgfx::destroy(m_lightBuffer);
}
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
- bgfx::destroyProgram(m_geomProgram);
- bgfx::destroyProgram(m_lightProgram);
- bgfx::destroyProgram(m_combineProgram);
- bgfx::destroyProgram(m_debugProgram);
- bgfx::destroyProgram(m_lineProgram);
+ bgfx::destroy(m_geomProgram);
+ bgfx::destroy(m_lightProgram);
+ bgfx::destroy(m_combineProgram);
+ bgfx::destroy(m_debugProgram);
+ bgfx::destroy(m_lineProgram);
- bgfx::destroyTexture(m_textureColor);
- bgfx::destroyTexture(m_textureNormal);
- bgfx::destroyUniform(s_texColor);
- bgfx::destroyUniform(s_texNormal);
+ bgfx::destroy(m_textureColor);
+ bgfx::destroy(m_textureNormal);
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(s_texNormal);
- bgfx::destroyUniform(s_albedo);
- bgfx::destroyUniform(s_normal);
- bgfx::destroyUniform(s_depth);
- bgfx::destroyUniform(s_light);
+ bgfx::destroy(s_albedo);
+ bgfx::destroy(s_normal);
+ bgfx::destroy(s_depth);
+ bgfx::destroy(s_light);
- bgfx::destroyUniform(u_lightPosRadius);
- bgfx::destroyUniform(u_lightRgbInnerR);
- bgfx::destroyUniform(u_mtx);
+ bgfx::destroy(u_lightPosRadius);
+ bgfx::destroy(u_lightRgbInnerR);
+ bgfx::destroy(u_mtx);
// Shutdown bgfx.
bgfx::shutdown();
@@ -373,32 +357,37 @@ class ExampleDeferred : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
int64_t now = bx::getHPCounter();
static int64_t last = now;
const int64_t frameTime = now - last;
last = now;
const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
const float deltaTime = float(frameTime/freq);
float time = (float)( (now-m_timeOffset)/freq);
- // Use m_debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/21-deferred");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: MRT rendering and deferred shading.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
if (2 > m_caps->limits.maxFBAttachments)
{
// When multiple render targets (MRT) is not supported by GPU,
// implement alternative code path that doesn't use MRT.
bool blink = uint32_t(time*3.0f)&1;
- bgfx::dbgTextPrintf(0, 5, blink ? 0x1f : 0x01, " MRT not supported by GPU. ");
+ bgfx::dbgTextPrintf(0, 0, blink ? 0x1f : 0x01, " MRT not supported by GPU. ");
// Set view 0 default viewport.
bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
@@ -421,7 +410,7 @@ class ExampleDeferred : public entry::AppI
if (bgfx::isValid(m_gbuffer) )
{
- bgfx::destroyFrameBuffer(m_gbuffer);
+ bgfx::destroy(m_gbuffer);
}
const uint32_t samplerFlags = 0
@@ -439,46 +428,29 @@ class ExampleDeferred : public entry::AppI
if (bgfx::isValid(m_lightBuffer) )
{
- bgfx::destroyFrameBuffer(m_lightBuffer);
+ bgfx::destroy(m_lightBuffer);
}
m_lightBuffer = bgfx::createFrameBuffer(uint16_t(m_width), uint16_t(m_height), bgfx::TextureFormat::BGRA8, samplerFlags);
}
- imguiBeginFrame(m_mouseState.m_mx
- , m_mouseState.m_my
- , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , m_mouseState.m_mz
- , uint16_t(m_width)
- , uint16_t(m_height)
- );
-
- imguiBeginScrollArea("Settings", m_width - m_width / 5 - 10, 10, m_width / 5, m_height / 3, &m_scrollArea);
- imguiSeparatorLine();
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 3.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
- imguiSlider("Num lights", m_numLights, 1, 2048);
-
- if (imguiCheck("Show G-Buffer.", m_showGBuffer) )
- {
- m_showGBuffer = !m_showGBuffer;
- }
+ ImGui::SliderInt("Num lights", &m_numLights, 1, 2048);
+ ImGui::Checkbox("Show G-Buffer.", &m_showGBuffer);
+ ImGui::Checkbox("Show light scissor.", &m_showScissorRects);
+ ImGui::Checkbox("Animate mesh.", &m_animateMesh);
+ ImGui::SliderFloat("Anim.speed", &m_lightAnimationSpeed, 0.0f, 0.4f);
- if (imguiCheck("Show light scissor.", m_showScissorRects) )
- {
- m_showScissorRects = !m_showScissorRects;
- }
-
- if (imguiCheck("Animate mesh.", m_animateMesh) )
- {
- m_animateMesh = !m_animateMesh;
- }
-
- imguiSlider("Lights animation speed", m_lightAnimationSpeed, 0.0f, 0.4f, 0.01f);
-
- imguiEndScrollArea();
- imguiEndFrame();
+ ImGui::End();
// Update camera.
cameraUpdate(deltaTime, m_mouseState);
@@ -507,16 +479,18 @@ class ExampleDeferred : public entry::AppI
bx::mtxMul(vp, view, proj);
bx::mtxInverse(invMvp, vp);
- bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
+ const bgfx::Caps* caps = bgfx::getCaps();
+
+ bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth);
bgfx::setViewTransform(RENDER_PASS_LIGHT_ID, NULL, proj);
bgfx::setViewTransform(RENDER_PASS_COMBINE_ID, NULL, proj);
const float aspectRatio = float(m_height)/float(m_width);
const float size = 10.0f;
- bx::mtxOrtho(proj, -size, size, size*aspectRatio, -size*aspectRatio, 0.0f, 1000.0f);
+ bx::mtxOrtho(proj, -size, size, size*aspectRatio, -size*aspectRatio, 0.0f, 1000.0f, 0.0f, caps->homogeneousDepth);
bgfx::setViewTransform(RENDER_PASS_DEBUG_GBUFFER_ID, NULL, proj);
- bx::mtxOrtho(proj, 0.0f, (float)m_width, 0.0f, (float)m_height, 0.0f, 1000.0f);
+ bx::mtxOrtho(proj, 0.0f, (float)m_width, 0.0f, (float)m_height, 0.0f, 1000.0f, 0.0f, caps->homogeneousDepth);
bgfx::setViewTransform(RENDER_PASS_DEBUG_LIGHTS_ID, NULL, proj);
}
@@ -545,7 +519,7 @@ class ExampleDeferred : public entry::AppI
bgfx::setTransform(mtx);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
// Bind textures.
@@ -571,10 +545,10 @@ class ExampleDeferred : public entry::AppI
{
Sphere lightPosRadius;
- float lightTime = time * m_lightAnimationSpeed * (bx::fsin(light/float(m_numLights) * bx::piHalf ) * 0.5f + 0.5f);
- lightPosRadius.m_center[0] = bx::fsin( ( (lightTime + light*0.47f) + bx::piHalf*1.37f ) )*offset;
- lightPosRadius.m_center[1] = bx::fcos( ( (lightTime + light*0.69f) + bx::piHalf*1.49f ) )*offset;
- lightPosRadius.m_center[2] = bx::fsin( ( (lightTime + light*0.37f) + bx::piHalf*1.57f ) )*2.0f;
+ float lightTime = time * m_lightAnimationSpeed * (bx::fsin(light/float(m_numLights) * bx::kPiHalf ) * 0.5f + 0.5f);
+ lightPosRadius.m_center[0] = bx::fsin( ( (lightTime + light*0.47f) + bx::kPiHalf*1.37f ) )*offset;
+ lightPosRadius.m_center[1] = bx::fcos( ( (lightTime + light*0.69f) + bx::kPiHalf*1.49f ) )*offset;
+ lightPosRadius.m_center[2] = bx::fsin( ( (lightTime + light*0.37f) + bx::kPiHalf*1.57f ) )*2.0f;
lightPosRadius.m_radius = 2.0f;
Aabb aabb;
@@ -660,7 +634,7 @@ class ExampleDeferred : public entry::AppI
*indices++ = 3;
*indices++ = 0;
- bgfx::setVertexBuffer(&tvb);
+ bgfx::setVertexBuffer(0, &tvb);
bgfx::setIndexBuffer(&tib);
bgfx::setState(0
| BGFX_STATE_RGB_WRITE
@@ -723,7 +697,7 @@ class ExampleDeferred : public entry::AppI
);
bgfx::setTransform(mtx);
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh, 0, 6);
bgfx::setTexture(0, s_texColor, m_gbufferTex[ii]);
bgfx::setState(BGFX_STATE_RGB_WRITE);
@@ -732,6 +706,8 @@ class ExampleDeferred : public entry::AppI
}
}
+ imguiEndFrame();
+
// Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives.
bgfx::frame();
@@ -790,4 +766,6 @@ class ExampleDeferred : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(ExampleDeferred);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleDeferred, "21-deferred", "MRT rendering and deferred shading.");
diff --git a/3rdparty/bgfx/examples/22-windows/windows.cpp b/3rdparty/bgfx/examples/22-windows/windows.cpp
index 1b900d7d088..98ff0fb9c39 100644
--- a/3rdparty/bgfx/examples/22-windows/windows.cpp
+++ b/3rdparty/bgfx/examples/22-windows/windows.cpp
@@ -7,6 +7,13 @@
#include "bgfx_utils.h"
#include <entry/input.h>
#include <bx/string.h>
+#include "imgui/imgui.h"
+
+void cmdCreateWindow(const void* _userData);
+void cmdDestroyWindow(const void* _userData);
+
+namespace
+{
#define MAX_WINDOWS 8
@@ -59,19 +66,21 @@ static const uint16_t s_cubeIndices[36] =
6, 3, 7,
};
-void cmdCreateWindow(const void* _userData);
-void cmdDestroyWindow(const void* _userData);
-
class ExampleWindows : public entry::AppI
{
public:
- void init(int _argc, char** _argv) BX_OVERRIDE
+ ExampleWindows(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -127,24 +136,28 @@ public:
m_timeOffset = bx::getHPCounter();
bx::memSet(m_fbh, 0xff, sizeof(m_fbh) );
+
+ imguiCreate();
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
+ imguiDestroy();
+
for (uint32_t ii = 0; ii < MAX_WINDOWS; ++ii)
{
if (bgfx::isValid(m_fbh[ii]) )
{
- bgfx::destroyFrameBuffer(m_fbh[ii]);
+ bgfx::destroy(m_fbh[ii]);
}
}
BX_FREE(entry::getAllocator(), m_bindings);
// Cleanup.
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
- bgfx::destroyProgram(m_program);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_program);
// Shutdown bgfx.
bgfx::shutdown();
@@ -152,11 +165,27 @@ public:
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
entry::WindowState state;
if (!entry::processWindowEvents(state, m_debug, m_reset) )
{
+ m_mouseState = state.m_mouse;
+
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
if (isValid(state.m_handle) )
{
if (0 == state.m_handle.idx)
@@ -177,8 +206,8 @@ public:
// frame buffer must be recreated.
if (bgfx::isValid(m_fbh[viewId]) )
{
- bgfx::destroyFrameBuffer(m_fbh[viewId]);
- m_fbh[viewId].idx = bgfx::invalidHandle;
+ bgfx::destroy(m_fbh[viewId]);
+ m_fbh[viewId].idx = bgfx::kInvalidHandle;
}
win.m_nwh = state.m_nwh;
@@ -237,20 +266,8 @@ public:
}
int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
-
float time = (float)( (now-m_timeOffset)/double(bx::getHPFrequency() ) );
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/22-windows");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Rendering into multiple windows.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
if (NULL != m_bindings)
{
bgfx::dbgTextPrintf(0, 5, 0x2f, "Press 'c' to create or 'd' to destroy window.");
@@ -258,7 +275,7 @@ public:
else
{
bool blink = uint32_t(time*3.0f)&1;
- bgfx::dbgTextPrintf(0, 5, blink ? 0x1f : 0x01, " Multiple windows is not supported by `%s` renderer. ", bgfx::getRendererName(bgfx::getCaps()->rendererType) );
+ bgfx::dbgTextPrintf(0, 0, blink ? 0x1f : 0x01, " Multiple windows is not supported by `%s` renderer. ", bgfx::getRendererName(bgfx::getCaps()->rendererType) );
}
uint32_t count = 0;
@@ -278,7 +295,7 @@ public:
bgfx::setTransform(mtx);
// Set vertex and index buffer.
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
// Set render states.
@@ -318,8 +335,8 @@ public:
{
if (bgfx::isValid(m_fbh[ii]) )
{
- bgfx::destroyFrameBuffer(m_fbh[ii]);
- m_fbh[ii].idx = bgfx::invalidHandle;
+ bgfx::destroy(m_fbh[ii]);
+ m_fbh[ii].idx = bgfx::kInvalidHandle;
// Flush destruction of swap chain before destroying window!
bgfx::frame();
@@ -335,6 +352,8 @@ public:
}
}
+ entry::MouseState m_mouseState;
+
uint32_t m_width;
uint32_t m_height;
uint32_t m_debug;
@@ -352,7 +371,9 @@ public:
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(ExampleWindows);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleWindows, "22-windows", "Rendering into multiple windows.");
void cmdCreateWindow(const void* _userData)
{
diff --git a/3rdparty/bgfx/examples/23-vectordisplay/main.cpp b/3rdparty/bgfx/examples/23-vectordisplay/main.cpp
index 9a89d16aba6..e71943e08b3 100644
--- a/3rdparty/bgfx/examples/23-vectordisplay/main.cpp
+++ b/3rdparty/bgfx/examples/23-vectordisplay/main.cpp
@@ -8,6 +8,10 @@
#include "bgfx_utils.h"
#include "vectordisplay.h"
+#include "imgui/imgui.h"
+
+namespace
+{
struct PosColorVertex
{
@@ -30,144 +34,182 @@ struct PosColorVertex
bgfx::VertexDecl PosColorVertex::ms_decl;
-int _main_(int _argc, char** _argv)
+class ExampleVectorDisplay : public entry::AppI
{
- Args args(_argc, _argv);
+public:
+ ExampleVectorDisplay(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- const bgfx::RendererType::Enum renderer = bgfx::getRendererType();
- float texelHalf = bgfx::RendererType::Direct3D9 == renderer ? 0.5f : 0.0f;
- bool originBottomLeft = bgfx::RendererType::OpenGL == renderer
- || bgfx::RendererType::OpenGLES == renderer;
- VectorDisplay vd(originBottomLeft, texelHalf);
- vd.setup(uint16_t(width), uint16_t(height) );
+ const bgfx::RendererType::Enum renderer = bgfx::getRendererType();
+ float texelHalf = bgfx::RendererType::Direct3D9 == renderer ? 0.5f : 0.0f;
+ bool originBottomLeft = bgfx::RendererType::OpenGL == renderer
+ || bgfx::RendererType::OpenGLES == renderer;
+ m_vd.init(originBottomLeft, texelHalf);
+ m_vd.setup(uint16_t(m_width), uint16_t(m_height) );
- // Enable debug text.
- bgfx::setDebug(debug);
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- // Set view 0 clear state.
- bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0);
+ // Set view 0 clear state.
+ bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0);
- // Create vertex stream declaration.
- PosColorVertex::init();
+ // Create vertex stream declaration.
+ PosColorVertex::init();
- float at[3] = { 0.0f, 0.0f, 0.0f };
- float eye[3] = { 0.0f, 0.0f, -35.0f };
+ m_oldWidth = m_width;
+ m_oldHeight = m_height;
- uint32_t oldWidth = width;
- uint32_t oldHeight = height;
+ imguiCreate();
+ }
- while (!entry::processEvents(width, height, debug, reset) )
+ virtual int shutdown() override
{
- if (oldWidth != width
- || oldHeight != height)
- {
- oldWidth = width;
- oldHeight = height;
- vd.resize(uint16_t(width), uint16_t(height) );
- }
+ imguiDestroy();
- float view[16];
- float proj[16];
- bx::mtxLookAt(view, eye, at);
- bx::mtxProj(proj, 60.0f, float(width) / float(height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
- // Set view and projection matrix for view 0.
- bgfx::setViewTransform(0, view, proj);
-
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
-
- // This dummy draw call is here to make sure that view 0 is cleared
- // if no other draw calls are submitted to view 0.
- bgfx::touch(0);
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0 / freq;
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/23-vectordisplay");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Rendering lines as oldschool vectors.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime) * toMs);
-
- vd.beginFrame();
-
- //simplex test
- vd.setDrawColor(0.7f, 0.7f, 1.0f);
- vd.drawSimplexFont(50.0f, 80.0f, 1.5f, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- vd.drawSimplexFont(50.0f, 140.0f, 1.5f, "abcdefghijklmnopqrstuvwxyz");
- vd.drawSimplexFont(50.0f, 200.0f, 1.5f, "!@#$%^&*()-=<>/?;:'\"{}[]|\\+=-_");
-
- vd.setDrawColor(1.0f, 0.7f, 0.7f);
-
- //test pattern for lines
- for (int ii = 0; ii < 4; ii++)
+ // Cleanup.
+ m_vd.teardown();
+
+ // Shutdown bgfx.
+ bgfx::shutdown();
+
+ return 0;
+ }
+
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- for (int jj = 0; jj < ii; jj++) //draw more intensive lines
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
+ if (m_oldWidth != m_width
+ || m_oldHeight != m_height)
{
- vd.drawLine(50.0f, 350.0f + 40 * ii, 200.0f, 350.0f + 40 * ii);
+ m_oldWidth = m_width;
+ m_oldHeight = m_height;
+ m_vd.resize(uint16_t(m_width), uint16_t(m_height) );
}
- }
- for (int ii = 0; ii < 4; ii++)
- {
- for (int jj = 0; jj <= ii; jj++)
+ const float at[3] = { 0.0f, 0.0f, 0.0f };
+ const float eye[3] = { 0.0f, 0.0f, -35.0f };
+
+ float view[16];
+ float proj[16];
+ bx::mtxLookAt(view, eye, at);
+ bx::mtxProj(proj, 60.0f, float(m_width) / float(m_height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
+ // Set view and projection matrix for view 0.
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ m_vd.beginFrame();
+
+ //simplex test
+ m_vd.setDrawColor(0.7f, 0.7f, 1.0f);
+ m_vd.drawSimplexFont(50.0f, 80.0f, 1.5f, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ m_vd.drawSimplexFont(50.0f, 140.0f, 1.5f, "abcdefghijklmnopqrstuvwxyz");
+ m_vd.drawSimplexFont(50.0f, 200.0f, 1.5f, "!@#$%^&*()-=<>/?;:'\"{}[]|\\+=-_");
+
+ m_vd.setDrawColor(1.0f, 0.7f, 0.7f);
+
+ //test pattern for lines
+ for (int ii = 0; ii < 4; ii++)
{
- vd.drawLine(50.0f + 40 * ii, 600.0f, 50.0f + 40 * ii, 700.0f);
+ for (int jj = 0; jj < ii; jj++) //draw more intensive lines
+ {
+ m_vd.drawLine(50.0f, 350.0f + 40 * ii, 200.0f, 350.0f + 40 * ii);
+ }
}
+
+ for (int ii = 0; ii < 4; ii++)
+ {
+ for (int jj = 0; jj <= ii; jj++)
+ {
+ m_vd.drawLine(50.0f + 40 * ii, 600.0f, 50.0f + 40 * ii, 700.0f);
+ }
+ }
+
+ //
+ // test pattern for shapes
+ //
+ m_vd.setDrawColor(0.7f, 0.7f, 1.0f);
+ m_vd.drawCircle(250.0f, 450.0f, 10.0f, 32.0f);
+ m_vd.drawCircle(300.0f, 450.0f, 30.0f, 32.0f);
+ m_vd.drawCircle(400.0f, 450.0f, 60.0f, 32.0f);
+ m_vd.drawCircle(500.0f, 450.0f, 80.0f, 64.0f);
+
+ m_vd.setDrawColor(0.7f, 1.0f, 0.7f);
+ m_vd.drawBox(250.0f, 600.0f, 10.0f, 10.0f);
+ m_vd.drawBox(300.0f, 600.0f, 30.0f, 30.0f);
+ m_vd.drawBox(350.0f, 600.0f, 60.0f, 60.0f);
+ m_vd.drawBox(450.0f, 600.0f, 80.0f, 80.0f);
+
+ m_vd.setDrawColor(1.0f, 0.7f, 1.0f);
+ m_vd.drawWheel(bx::kPi, 800.0f, 450.0f, 80.0f);
+ m_vd.drawWheel(3.0f * bx::kPi / 4.0f, 95.0f, 450.0f, 60.0f);
+ m_vd.drawWheel(bx::kPi / 2.0f, 1150.0f, 450.0f, 30.0f);
+ m_vd.drawWheel(bx::kPi / 4.0f, 1250.0f, 450.0f, 10.0f);
+
+ // draw moving shape
+ static float counter = 0.0f;
+ counter += 0.01f;
+ float posX = m_width / 2.0f + bx::fsin(counter * 3.18378f) * (m_width / 2.0f);
+ float posY = m_height / 2.0f + bx::fcos(counter) * (m_height / 2.0f);
+ m_vd.drawCircle(posX, posY, 5.0f, 10.0f);
+
+ m_vd.endFrame();
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
}
- //
- // test pattern for shapes
- //
- vd.setDrawColor(0.7f, 0.7f, 1.0f);
- vd.drawCircle(250.0f, 450.0f, 10.0f, 32.0f);
- vd.drawCircle(300.0f, 450.0f, 30.0f, 32.0f);
- vd.drawCircle(400.0f, 450.0f, 60.0f, 32.0f);
- vd.drawCircle(500.0f, 450.0f, 80.0f, 64.0f);
-
- vd.setDrawColor(0.7f, 1.0f, 0.7f);
- vd.drawBox(250.0f, 600.0f, 10.0f, 10.0f);
- vd.drawBox(300.0f, 600.0f, 30.0f, 30.0f);
- vd.drawBox(350.0f, 600.0f, 60.0f, 60.0f);
- vd.drawBox(450.0f, 600.0f, 80.0f, 80.0f);
-
- vd.setDrawColor(1.0f, 0.7f, 1.0f);
- vd.drawWheel(bx::pi, 800.0f, 450.0f, 80.0f);
- vd.drawWheel(3.0f * bx::pi / 4.0f, 95.0f, 450.0f, 60.0f);
- vd.drawWheel(bx::pi / 2.0f, 1150.0f, 450.0f, 30.0f);
- vd.drawWheel(bx::pi / 4.0f, 1250.0f, 450.0f, 10.0f);
-
- // draw moving shape
- static float counter = 0.0f;
- counter += 0.01f;
- float posX = width / 2.0f + bx::fsin(counter * 3.18378f) * (width / 2.0f);
- float posY = height / 2.0f + bx::fcos(counter) * (height / 2.0f);
- vd.drawCircle(posX, posY, 5.0f, 10.0f);
-
- vd.endFrame();
-
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ return false;
}
- // Cleanup.
- vd.teardown();
+ entry::MouseState m_mouseState;
+
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+ VectorDisplay m_vd;
+
+ uint32_t m_oldWidth;
+ uint32_t m_oldHeight;
+};
- // Shutdown bgfx.
- bgfx::shutdown();
+} // namespace
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleVectorDisplay, "23-vectordisplay", "Rendering lines as oldschool vectors.");
diff --git a/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp b/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp
index f5b5828f20e..c9b677619c5 100644
--- a/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp
+++ b/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp
@@ -12,7 +12,7 @@
#include <float.h> // FLT_EPSILON
#include <alloca.h> // alloca
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include "vectordisplay.h"
#include "bgfx_utils.h"
@@ -47,15 +47,22 @@ bgfx::VertexDecl PosColorUvVertex::ms_decl;
inline float normalizef(float _a)
{
- return bx::fwrap(_a, 2.0f * bx::pi);
+ return bx::fwrap(_a, 2.0f * bx::kPi);
}
-VectorDisplay::VectorDisplay(bool _originBottomLeft, float _texelHalf)
- : m_originBottomLeft(_originBottomLeft)
- , m_texelHalf(_texelHalf)
+VectorDisplay::VectorDisplay()
+ : m_originBottomLeft(false)
+ , m_texelHalf(false)
{
}
+void VectorDisplay::init(bool _originBottomLeft, float _texelHalf)
+{
+ m_originBottomLeft = _originBottomLeft;
+ m_texelHalf = _texelHalf;
+}
+
+
void VectorDisplay::setup(uint16_t _width, uint16_t _height, uint8_t _view)
{
PosColorUvVertex::init();
@@ -110,19 +117,19 @@ void VectorDisplay::teardown()
{
for (size_t i = 0; i < m_vertexBuffers.size(); ++i)
{
- bgfx::destroyDynamicVertexBuffer(m_vertexBuffers[i]);
+ bgfx::destroy(m_vertexBuffers[i]);
}
teardownResDependent();
- bgfx::destroyProgram(m_drawToScreenShader);
- bgfx::destroyProgram(m_blurShader);
- bgfx::destroyProgram(m_blitShader);
+ bgfx::destroy(m_drawToScreenShader);
+ bgfx::destroy(m_blurShader);
+ bgfx::destroy(m_blitShader);
- bgfx::destroyUniform(u_params);
- bgfx::destroyUniform(s_texColor);
+ bgfx::destroy(u_params);
+ bgfx::destroy(s_texColor);
- bgfx::destroyTexture(m_lineTexId);
+ bgfx::destroy(m_lineTexId);
}
void VectorDisplay::beginFrame()
@@ -132,8 +139,20 @@ void VectorDisplay::beginFrame()
void VectorDisplay::endFrame()
{
+ const bgfx::Caps* caps = bgfx::getCaps();
+
float proj[16];
- bx::mtxOrtho(proj, 0.0f, (float)m_screenWidth, (float)m_screenHeight, 0.0f, 0.0f, 1000.0f);
+ bx::mtxOrtho(
+ proj
+ , 0.0f
+ , (float)m_screenWidth
+ , (float)m_screenHeight
+ , 0.0f
+ , 0.0f
+ , 1000.0f
+ , 0.0f
+ , caps->homogeneousDepth
+ );
bgfx::setViewRect(m_view, 0, 0, m_screenWidth, m_screenHeight);
bgfx::setViewFrameBuffer(m_view, m_sceneFrameBuffer);
@@ -176,7 +195,7 @@ void VectorDisplay::endFrame()
bgfx::setTexture(0, s_texColor, m_lineTexId);
- bgfx::setVertexBuffer(m_vertexBuffers[i], 0, m_vertexBuffersSize[i]); // explicitly feed vertex number!
+ bgfx::setVertexBuffer(0, m_vertexBuffers[i], 0, m_vertexBuffersSize[i]); // explicitly feed vertex number!
bgfx::setState(0
| BGFX_STATE_RGB_WRITE
@@ -192,7 +211,7 @@ void VectorDisplay::endFrame()
uint8_t viewCounter = m_view + 1;
- bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
+ bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth);
float glow_iter_mult = 1.05f + ( (m_brightness - 1.0f) / 5.0f);
float glow_fin_mult = 1.25f + ( (m_brightness - 1.0f) / 2.0f);
@@ -324,8 +343,8 @@ void VectorDisplay::endDraw()
Line* lines = (Line*)alloca(nlines * sizeof(Line) );
float t = effectiveThickness();
- int first_last_same = bx::fabsolute(m_pendingPoints[0].x - m_pendingPoints[m_pendingPoints.size() - 1].x) < 0.1
- && bx::fabsolute(m_pendingPoints[0].y - m_pendingPoints[m_pendingPoints.size() - 1].y) < 0.1;
+ int first_last_same = bx::fabs(m_pendingPoints[0].x - m_pendingPoints[m_pendingPoints.size() - 1].x) < 0.1
+ && bx::fabs(m_pendingPoints[0].y - m_pendingPoints[m_pendingPoints.size() - 1].y) < 0.1;
// compute basics
for (size_t i = 1; i < m_pendingPoints.size(); i++)
@@ -368,12 +387,12 @@ void VectorDisplay::endDraw()
float a2pa = normalizef(line->a - pline->a);
float maxshorten = bx::fmin(line->len, pline->len) / 2.0f;
- if (bx::fmin(a2pa, pa2a) <= (bx::pi / 2.0f + FLT_EPSILON) )
+ if (bx::fmin(a2pa, pa2a) <= (bx::kPi / 2.0f + FLT_EPSILON) )
{
if (a2pa < pa2a)
{
float shorten = t * bx::fsin(a2pa / 2.0f) / bx::fcos(a2pa / 2.0f);
- float a = (bx::pi - a2pa) / 2.0f;
+ float a = (bx::kPi - a2pa) / 2.0f;
if (shorten > maxshorten)
{
line->s0 = pline->s1 = maxshorten;
@@ -389,7 +408,7 @@ void VectorDisplay::endDraw()
else
{
float shorten = t * bx::fsin(pa2a / 2.0f) / bx::fcos(pa2a / 2.0f);
- float a = (bx::pi - pa2a) / 2.0f;
+ float a = (bx::kPi - pa2a) / 2.0f;
if (shorten > maxshorten)
{
line->s0 = pline->s1 = maxshorten;
@@ -474,11 +493,11 @@ void VectorDisplay::drawCircle(float _x, float _y, float _radius, float _steps)
float edgeangle = 0.0f;
float angadjust = 0.0f;
- float step = bx::pi * 2.0f / _steps;
+ float step = bx::kPi * 2.0f / _steps;
beginDraw(_x + _radius * bx::fsin(edgeangle + angadjust),
_y - _radius * bx::fcos(edgeangle + angadjust) );
- for (edgeangle = 0; edgeangle < 2.0f * bx::pi - 0.001; edgeangle += step)
+ for (edgeangle = 0; edgeangle < 2.0f * bx::kPi - 0.001; edgeangle += step)
{
drawTo(_x + _radius * bx::fsin(edgeangle + step - angadjust),
_y - _radius * bx::fcos(edgeangle + step - angadjust) );
@@ -495,28 +514,28 @@ void VectorDisplay::drawWheel(float _angle, float _x, float _y, float _radius)
_y - spokeradius * bx::fcos(_angle),
_x - spokeradius * bx::fsin(_angle),
_y + spokeradius * bx::fcos(_angle) );
- drawLine(_x + spokeradius * bx::fsin(_angle + bx::pi / 4.0f),
- _y - spokeradius * bx::fcos(_angle + bx::pi / 4.0f),
- _x - spokeradius * bx::fsin(_angle + bx::pi / 4.0f),
- _y + spokeradius * bx::fcos(_angle + bx::pi / 4.0f) );
- drawLine(_x + spokeradius * bx::fsin(_angle + bx::pi / 2.0f),
- _y - spokeradius * bx::fcos(_angle + bx::pi / 2.0f),
- _x - spokeradius * bx::fsin(_angle + bx::pi / 2.0f),
- _y + spokeradius * bx::fcos(_angle + bx::pi / 2.0f) );
- drawLine(_x + spokeradius * bx::fsin(_angle + 3.0f * bx::pi / 4.0f),
- _y - spokeradius * bx::fcos(_angle + 3.0f * bx::pi / 4.0f),
- _x - spokeradius * bx::fsin(_angle + 3.0f * bx::pi / 4.0f),
- _y + spokeradius * bx::fcos(_angle + 3.0f * bx::pi / 4.0f) );
+ drawLine(_x + spokeradius * bx::fsin(_angle + bx::kPi / 4.0f),
+ _y - spokeradius * bx::fcos(_angle + bx::kPi / 4.0f),
+ _x - spokeradius * bx::fsin(_angle + bx::kPi / 4.0f),
+ _y + spokeradius * bx::fcos(_angle + bx::kPi / 4.0f) );
+ drawLine(_x + spokeradius * bx::fsin(_angle + bx::kPi / 2.0f),
+ _y - spokeradius * bx::fcos(_angle + bx::kPi / 2.0f),
+ _x - spokeradius * bx::fsin(_angle + bx::kPi / 2.0f),
+ _y + spokeradius * bx::fcos(_angle + bx::kPi / 2.0f) );
+ drawLine(_x + spokeradius * bx::fsin(_angle + 3.0f * bx::kPi / 4.0f),
+ _y - spokeradius * bx::fcos(_angle + 3.0f * bx::kPi / 4.0f),
+ _x - spokeradius * bx::fsin(_angle + 3.0f * bx::kPi / 4.0f),
+ _y + spokeradius * bx::fcos(_angle + 3.0f * bx::kPi / 4.0f) );
float edgeangle = 0.0f;
float angadjust = 0.0f;
beginDraw(_x + _radius * bx::fsin(_angle + edgeangle + angadjust),
_y - _radius * bx::fcos(_angle + edgeangle + angadjust) );
- for (edgeangle = 0; edgeangle < 2.0f * bx::pi - 0.001f; edgeangle += bx::pi / 4.0f)
+ for (edgeangle = 0; edgeangle < 2.0f * bx::kPi - 0.001f; edgeangle += bx::kPi / 4.0f)
{
- drawTo(_x + _radius * bx::fsin(_angle + edgeangle + bx::pi / 4.0f - angadjust),
- _y - _radius * bx::fcos(_angle + edgeangle + bx::pi / 4.0f - angadjust) );
+ drawTo(_x + _radius * bx::fsin(_angle + edgeangle + bx::kPi / 4.0f - angadjust),
+ _y - _radius * bx::fcos(_angle + edgeangle + bx::kPi / 4.0f - angadjust) );
}
endDraw();
@@ -603,7 +622,7 @@ void VectorDisplay::drawFan(float _cx, float _cy, float _pa, float _a, float _t,
if (a2pa < pa2a)
{
_t = -_t;
- nsteps = (int)bx::fmax(1, bx::fround(a2pa / (bx::pi / 8.0f) ) );
+ nsteps = (int)bx::fmax(1, bx::fround(a2pa / (bx::kPi / 8.0f) ) );
angles = (float*)alloca(sizeof(float) * (nsteps + 1) );
for (i = 0; i <= nsteps; i++)
{
@@ -612,7 +631,7 @@ void VectorDisplay::drawFan(float _cx, float _cy, float _pa, float _a, float _t,
}
else
{
- nsteps = (int)bx::fmax(1, bx::fround(pa2a / (bx::pi / 8.0f) ) );
+ nsteps = (int)bx::fmax(1, bx::fround(pa2a / (bx::kPi / 8.0f) ) );
angles = (float*)alloca(sizeof(float) * (nsteps + 1) );
for (i = 0; i <= nsteps; i++)
{
@@ -700,7 +719,7 @@ bool VectorDisplay::setDecaySteps(int _steps)
{
for (size_t i = 0; i < m_vertexBuffers.size(); ++i)
{
- bgfx::destroyDynamicVertexBuffer(m_vertexBuffers[i]);
+ bgfx::destroy(m_vertexBuffers[i]);
}
m_vertexBuffers.clear();
@@ -793,7 +812,7 @@ void VectorDisplay::screenSpaceQuad(float _textureWidth, float _textureHeight, f
vertex[2].m_u = maxu;
vertex[2].m_v = maxv;
- bgfx::setVertexBuffer(&vb);
+ bgfx::setVertexBuffer(0, &vb);
}
}
@@ -818,9 +837,9 @@ void VectorDisplay::setupResDependent()
void VectorDisplay::teardownResDependent()
{
- bgfx::destroyFrameBuffer(m_sceneFrameBuffer);
- bgfx::destroyFrameBuffer(m_glow0FrameBuffer);
- bgfx::destroyFrameBuffer(m_glow1FrameBuffer);
+ bgfx::destroy(m_sceneFrameBuffer);
+ bgfx::destroy(m_glow0FrameBuffer);
+ bgfx::destroy(m_glow1FrameBuffer);
}
void VectorDisplay::genLinetex() // generate the texture
diff --git a/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.h b/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.h
index 3ac7a4b55d1..3dfe15732d9 100644
--- a/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.h
+++ b/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.h
@@ -34,12 +34,14 @@ struct PosColorUvVertex
class VectorDisplay
{
public:
- VectorDisplay(bool _originBottomLeft, float _texelHalf);
+ VectorDisplay();
~VectorDisplay()
{
}
+ void init(bool _originBottomLeft, float _texelHalf);
+
void setup(uint16_t _width, uint16_t _height, uint8_t _view = 2);
void resize(uint16_t _width, uint16_t _height);
void teardown();
diff --git a/3rdparty/bgfx/examples/24-nbody/nbody.cpp b/3rdparty/bgfx/examples/24-nbody/nbody.cpp
index 0350ab5bb76..4d285d81739 100644
--- a/3rdparty/bgfx/examples/24-nbody/nbody.cpp
+++ b/3rdparty/bgfx/examples/24-nbody/nbody.cpp
@@ -9,7 +9,18 @@
#include "camera.h"
#include <bgfx/bgfx.h>
-struct u_paramsDataStruct
+namespace
+{
+
+static const char* s_shapeNames[] =
+{
+ "Point",
+ "Sphere",
+ "Box",
+ "Donut"
+};
+
+struct ParamsData
{
float timeStep;
int32_t dispatchSize;
@@ -24,7 +35,7 @@ struct u_paramsDataStruct
float maxAccel;
};
-void InitializeParams(int32_t _mode, u_paramsDataStruct* _params)
+void initializeParams(int32_t _mode, ParamsData* _params)
{
switch(_mode)
{
@@ -96,308 +107,372 @@ static const float s_quadVertices[] =
static const uint16_t s_quadIndices[] = { 0, 1, 2, 2, 3, 0, };
-int _main_(int _argc, char** _argv)
+const uint32_t kThreadGroupUpdateSize = 512;
+const uint32_t kMaxParticleCount = 32 * 1024;
+
+class ExampleNbody : public entry::AppI
{
- Args args(_argc, _argv);
+public:
+ ExampleNbody(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- // Enable debug text.
- bgfx::setDebug(debug);
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- // Set view 0 clear state.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
- const bgfx::Caps* caps = bgfx::getCaps();
- const bool computeSupported = !!(caps->supported & BGFX_CAPS_COMPUTE);
- const bool indirectSupported = !!(caps->supported & BGFX_CAPS_DRAW_INDIRECT);
+ const bgfx::Caps* caps = bgfx::getCaps();
+ m_computeSupported = !!(caps->supported & BGFX_CAPS_COMPUTE);
+ m_indirectSupported = !!(caps->supported & BGFX_CAPS_DRAW_INDIRECT);
- if (computeSupported)
- {
- // Imgui.
imguiCreate();
- bgfx::VertexDecl quadVertexDecl;
- quadVertexDecl.begin()
- .add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float)
- .end();
+ if (m_computeSupported)
+ {
+ bgfx::VertexDecl quadVertexDecl;
+ quadVertexDecl.begin()
+ .add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float)
+ .end();
- // Create static vertex buffer.
- bgfx::VertexBufferHandle vbh = bgfx::createVertexBuffer(
+ // Create static vertex buffer.
+ m_vbh = bgfx::createVertexBuffer(
// Static data can be passed with bgfx::makeRef
bgfx::makeRef(s_quadVertices, sizeof(s_quadVertices) )
, quadVertexDecl
);
- // Create static index buffer.
- bgfx::IndexBufferHandle ibh = bgfx::createIndexBuffer(
+ // Create static index buffer.
+ m_ibh = bgfx::createIndexBuffer(
// Static data can be passed with bgfx::makeRef
bgfx::makeRef(s_quadIndices, sizeof(s_quadIndices) )
);
- // Create particle program from shaders.
- bgfx::ProgramHandle particleProgram = loadProgram("vs_particle", "fs_particle");
+ // Create particle program from shaders.
+ m_particleProgram = loadProgram("vs_particle", "fs_particle");
- // Setup compute buffers
- bgfx::VertexDecl computeVertexDecl;
- computeVertexDecl.begin()
- .add(bgfx::Attrib::TexCoord0, 4, bgfx::AttribType::Float)
- .end();
+ // Setup compute buffers
+ bgfx::VertexDecl computeVertexDecl;
+ computeVertexDecl.begin()
+ .add(bgfx::Attrib::TexCoord0, 4, bgfx::AttribType::Float)
+ .end();
- const uint32_t threadGroupUpdateSize = 512;
- const uint32_t maxParticleCount = 32 * 1024;
+ m_currPositionBuffer0 = bgfx::createDynamicVertexBuffer(1 << 15, computeVertexDecl, BGFX_BUFFER_COMPUTE_READ_WRITE);
+ m_currPositionBuffer1 = bgfx::createDynamicVertexBuffer(1 << 15, computeVertexDecl, BGFX_BUFFER_COMPUTE_READ_WRITE);
+ m_prevPositionBuffer0 = bgfx::createDynamicVertexBuffer(1 << 15, computeVertexDecl, BGFX_BUFFER_COMPUTE_READ_WRITE);
+ m_prevPositionBuffer1 = bgfx::createDynamicVertexBuffer(1 << 15, computeVertexDecl, BGFX_BUFFER_COMPUTE_READ_WRITE);
- bgfx::DynamicVertexBufferHandle currPositionBuffer0 = bgfx::createDynamicVertexBuffer(1 << 15, computeVertexDecl, BGFX_BUFFER_COMPUTE_READ_WRITE);
- bgfx::DynamicVertexBufferHandle currPositionBuffer1 = bgfx::createDynamicVertexBuffer(1 << 15, computeVertexDecl, BGFX_BUFFER_COMPUTE_READ_WRITE);
- bgfx::DynamicVertexBufferHandle prevPositionBuffer0 = bgfx::createDynamicVertexBuffer(1 << 15, computeVertexDecl, BGFX_BUFFER_COMPUTE_READ_WRITE);
- bgfx::DynamicVertexBufferHandle prevPositionBuffer1 = bgfx::createDynamicVertexBuffer(1 << 15, computeVertexDecl, BGFX_BUFFER_COMPUTE_READ_WRITE);
+ u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4, 3);
- bgfx::UniformHandle u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4, 3);
+ m_initInstancesProgram = bgfx::createProgram(loadShader("cs_init_instances"), true);
+ m_updateInstancesProgram = bgfx::createProgram(loadShader("cs_update_instances"), true);
- bgfx::ProgramHandle initInstancesProgram = bgfx::createProgram(loadShader("cs_init_instances"), true);
- bgfx::ProgramHandle updateInstancesProgram = bgfx::createProgram(loadShader("cs_update_instances"), true);
+ m_indirectProgram = BGFX_INVALID_HANDLE;
+ m_indirectBuffer = BGFX_INVALID_HANDLE;
- bgfx::ProgramHandle indirectProgram = BGFX_INVALID_HANDLE;
- bgfx::IndirectBufferHandle indirectBuffer = BGFX_INVALID_HANDLE;
+ if (m_indirectSupported)
+ {
+ m_indirectProgram = bgfx::createProgram(loadShader("cs_indirect"), true);
+ m_indirectBuffer = bgfx::createIndirectBuffer(2);
+ }
- if (indirectSupported)
- {
- indirectProgram = bgfx::createProgram(loadShader("cs_indirect"), true);
- indirectBuffer = bgfx::createIndirectBuffer(2);
- }
+ initializeParams(0, &m_paramsData);
- u_paramsDataStruct u_paramsData;
- InitializeParams(0, &u_paramsData);
+ bgfx::setUniform(u_params, &m_paramsData, 3);
+ bgfx::setBuffer(0, m_prevPositionBuffer0, bgfx::Access::Write);
+ bgfx::setBuffer(1, m_currPositionBuffer0, bgfx::Access::Write);
+ bgfx::dispatch(0, m_initInstancesProgram, kMaxParticleCount / kThreadGroupUpdateSize, 1, 1);
- bgfx::setUniform(u_params, &u_paramsData, 3);
- bgfx::setBuffer(0, prevPositionBuffer0, bgfx::Access::Write);
- bgfx::setBuffer(1, currPositionBuffer0, bgfx::Access::Write);
- bgfx::dispatch(0, initInstancesProgram, maxParticleCount / threadGroupUpdateSize, 1, 1);
+ float initialPos[3] = { 0.0f, 0.0f, -45.0f };
+ cameraCreate();
+ cameraSetPosition(initialPos);
+ cameraSetVerticalAngle(0.0f);
- float view[16];
- float initialPos[3] = { 0.0f, 0.0f, -45.0f };
- cameraCreate();
- cameraSetPosition(initialPos);
- cameraSetVerticalAngle(0.0f);
- cameraGetViewMtx(view);
+ m_useIndirect = false;
- int32_t scrollArea = 0;
+ m_timeOffset = bx::getHPCounter();
+ }
+ }
- bool useIndirect = false;
+ virtual int shutdown() override
+ {
+ // Cleanup.
+ cameraDestroy();
+ imguiDestroy();
- entry::MouseState mouseState;
- while (!entry::processEvents(width, height, debug, reset, &mouseState) )
+ if (m_computeSupported)
{
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const float deltaTime = float(frameTime/freq);
-
- if (deltaTime > 1000.0)
- {
- abort();
- }
-
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/24-nbody");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: N-body simulation with compute shaders using buffers.");
-
- imguiBeginFrame(mouseState.m_mx
- , mouseState.m_my
- , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , mouseState.m_mz
- , uint16_t(width)
- , uint16_t(height)
- );
- imguiBeginScrollArea("Settings", width - width / 4 - 10, 10, width / 4, 500, &scrollArea);
- imguiSlider("Random seed", u_paramsData.baseSeed, 0, 100);
- int32_t shape = imguiChoose(u_paramsData.initialShape, "Point", "Sphere", "Box", "Donut");
- imguiSlider("Initial speed", u_paramsData.initialSpeed, 0.0f, 300.0f, 0.1f);
- bool defaults = imguiButton("Reset");
- imguiSeparatorLine();
- imguiSlider("Particle count (x512)", u_paramsData.dispatchSize, 1, 64);
- imguiSlider("Gravity", u_paramsData.gravity, 0.0f, 0.3f, 0.001f);
- imguiSlider("Damping", u_paramsData.damping, 0.0f, 1.0f, 0.01f);
- imguiSlider("Max acceleration", u_paramsData.maxAccel, 0.0f, 100.0f, 0.01f);
- imguiSlider("Time step", u_paramsData.timeStep, 0.0f, 0.02f, 0.0001f);
- imguiSeparatorLine();
- imguiSlider("Particle intensity", u_paramsData.particleIntensity, 0.0f, 1.0f, 0.001f);
- imguiSlider("Particle size", u_paramsData.particleSize, 0.0f, 1.0f, 0.001f);
- imguiSlider("Particle power", u_paramsData.particlePower, 0.001f, 16.0f, 0.01f);
- imguiSeparatorLine();
- if (imguiCheck("Use draw/dispatch indirect", useIndirect, indirectSupported) )
+ if (m_indirectSupported)
{
- useIndirect = !useIndirect;
+ bgfx::destroy(m_indirectProgram);
+ bgfx::destroy(m_indirectBuffer);
}
- imguiEndScrollArea();
- imguiEndFrame();
- // Modify parameters and reset if shape is changed
- if (shape != u_paramsData.initialShape)
- {
- defaults = true;
- InitializeParams(shape, &u_paramsData);
- }
+ bgfx::destroy(u_params);
+ bgfx::destroy(m_currPositionBuffer0);
+ bgfx::destroy(m_currPositionBuffer1);
+ bgfx::destroy(m_prevPositionBuffer0);
+ bgfx::destroy(m_prevPositionBuffer1);
+ bgfx::destroy(m_updateInstancesProgram);
+ bgfx::destroy(m_initInstancesProgram);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_particleProgram);
+ }
- if (defaults)
- {
- bgfx::setBuffer(0, prevPositionBuffer0, bgfx::Access::Write);
- bgfx::setBuffer(1, currPositionBuffer0, bgfx::Access::Write);
- bgfx::setUniform(u_params, &u_paramsData, 3);
- bgfx::dispatch(0, initInstancesProgram, maxParticleCount / threadGroupUpdateSize, 1, 1);
- }
+ // Shutdown bgfx.
+ bgfx::shutdown();
- if (useIndirect)
- {
- bgfx::setUniform(u_params, &u_paramsData, 3);
- bgfx::setBuffer(0, indirectBuffer, bgfx::Access::Write);
- bgfx::dispatch(0, indirectProgram);
- }
+ return 0;
+ }
- bgfx::setBuffer(0, prevPositionBuffer0, bgfx::Access::Read);
- bgfx::setBuffer(1, currPositionBuffer0, bgfx::Access::Read);
- bgfx::setBuffer(2, prevPositionBuffer1, bgfx::Access::Write);
- bgfx::setBuffer(3, currPositionBuffer1, bgfx::Access::Write);
- bgfx::setUniform(u_params, &u_paramsData, 3);
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
+ {
+ imguiBeginFrame(
+ m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
- if (useIndirect)
- {
- bgfx::dispatch(0, updateInstancesProgram, indirectBuffer, 1);
- }
- else
- {
- bgfx::dispatch(0, updateInstancesProgram, uint16_t(u_paramsData.dispatchSize), 1, 1);
- }
+ showExampleDialog(this
+ , !m_computeSupported
+ ? "Compute is not supported."
+ : NULL
+ );
- bx::xchg(currPositionBuffer0, currPositionBuffer1);
- bx::xchg(prevPositionBuffer0, prevPositionBuffer1);
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const float deltaTime = float(frameTime/freq);
- // Update camera.
- cameraUpdate(deltaTime, mouseState);
- cameraGetViewMtx(view);
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
- // Set view and projection matrix for view 0.
- const bgfx::HMD* hmd = bgfx::getHMD();
- if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
- {
- float viewHead[16];
- float eye[3] = {};
- bx::mtxQuatTranslationHMD(viewHead, hmd->eye[0].rotation, eye);
-
- float tmp[16];
- bx::mtxMul(tmp, view, viewHead);
- bgfx::setViewTransform(0, tmp, hmd->eye[0].projection, BGFX_VIEW_STEREO, hmd->eye[1].projection);
-
- // Set view 0 default viewport.
- //
- // Use HMD's width/height since HMD's internal frame buffer size
- // might be much larger than window size.
- bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
- }
- else
+ if (m_computeSupported)
{
- float proj[16];
- bx::mtxProj(proj, 90.0f, float(width)/float(height), 0.1f, 10000.0f, bgfx::getCaps()->homogeneousDepth);
- bgfx::setViewTransform(0, view, proj);
-
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
- }
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 1.5f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
- // Set vertex and index buffer.
- bgfx::setVertexBuffer(vbh);
- bgfx::setIndexBuffer(ibh);
- bgfx::setInstanceDataBuffer(currPositionBuffer0, 0, u_paramsData.dispatchSize * threadGroupUpdateSize);
+ bool reset = false;
+ int32_t shape = m_paramsData.initialShape;
+ if (ImGui::Combo("Initial shape", &shape, s_shapeNames, BX_COUNTOF(s_shapeNames) ) )
+ {
+ // Modify parameters and reset if shape is changed
+ initializeParams(shape, &m_paramsData);
+ reset = true;
+ }
+
+ ImGui::SliderInt("Random seed", &m_paramsData.baseSeed, 0, 100);
+
+ if (ImGui::Button("Reset") )
+ {
+ reset = true;
+ }
+
+ ImGui::Separator();
+
+ ImGui::SliderInt("Particle count (x512)", &m_paramsData.dispatchSize, 1, 64);
+ ImGui::SliderFloat("Gravity", &m_paramsData.gravity, 0.0f, 0.3f);
+ ImGui::SliderFloat("Damping", &m_paramsData.damping, 0.0f, 1.0f);
+ ImGui::SliderFloat("Max acceleration", &m_paramsData.maxAccel, 0.0f, 100.0f);
+ ImGui::SliderFloat("Time step", &m_paramsData.timeStep, 0.0f, 0.02f);
+
+ ImGui::Separator();
+
+ ImGui::SliderFloat("Particle intensity", &m_paramsData.particleIntensity, 0.0f, 1.0f);
+ ImGui::SliderFloat("Particle size", &m_paramsData.particleSize, 0.0f, 1.0f);
+ ImGui::SliderFloat("Particle power", &m_paramsData.particlePower, 0.001f, 16.0f);
+
+ ImGui::Separator();
+
+ if (m_indirectSupported)
+ {
+ ImGui::Checkbox("Use draw/dispatch indirect", &m_useIndirect);
+ }
+
+ ImGui::End();
+
+ if (reset)
+ {
+ bgfx::setBuffer(0, m_prevPositionBuffer0, bgfx::Access::Write);
+ bgfx::setBuffer(1, m_currPositionBuffer0, bgfx::Access::Write);
+ bgfx::setUniform(u_params, &m_paramsData, 3);
+ bgfx::dispatch(0, m_initInstancesProgram, kMaxParticleCount / kThreadGroupUpdateSize, 1, 1);
+ }
+
+ if (m_useIndirect)
+ {
+ bgfx::setUniform(u_params, &m_paramsData, 3);
+ bgfx::setBuffer(0, m_indirectBuffer, bgfx::Access::Write);
+ bgfx::dispatch(0, m_indirectProgram);
+ }
+
+ bgfx::setBuffer(0, m_prevPositionBuffer0, bgfx::Access::Read);
+ bgfx::setBuffer(1, m_currPositionBuffer0, bgfx::Access::Read);
+ bgfx::setBuffer(2, m_prevPositionBuffer1, bgfx::Access::Write);
+ bgfx::setBuffer(3, m_currPositionBuffer1, bgfx::Access::Write);
+ bgfx::setUniform(u_params, &m_paramsData, 3);
+
+ if (m_useIndirect)
+ {
+ bgfx::dispatch(0, m_updateInstancesProgram, m_indirectBuffer, 1);
+ }
+ else
+ {
+ bgfx::dispatch(0, m_updateInstancesProgram, uint16_t(m_paramsData.dispatchSize), 1, 1);
+ }
+
+ bx::xchg(m_currPositionBuffer0, m_currPositionBuffer1);
+ bx::xchg(m_prevPositionBuffer0, m_prevPositionBuffer1);
+
+ // Update camera.
+ cameraUpdate(deltaTime, m_mouseState);
+
+ float view[16];
+ cameraGetViewMtx(view);
+
+ // Set view and projection matrix for view 0.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float viewHead[16];
+ float eye[3] = {};
+ bx::mtxQuatTranslationHMD(viewHead, hmd->eye[0].rotation, eye);
+
+ float tmp[16];
+ bx::mtxMul(tmp, view, viewHead);
+ bgfx::setViewTransform(
+ 0
+ , tmp
+ , hmd->eye[0].projection
+ , BGFX_VIEW_STEREO
+ , hmd->eye[1].projection
+ );
+
+ // Set view 0 default viewport.
+ //
+ // Use HMD's width/height since HMD's internal frame buffer size
+ // might be much larger than window size.
+ bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ }
+ else
+ {
+ float proj[16];
+ bx::mtxProj(
+ proj
+ , 90.0f
+ , float(m_width)/float(m_height)
+ , 0.1f
+ , 10000.0f
+ , bgfx::getCaps()->homogeneousDepth
+ );
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ }
+
+ // Set vertex and index buffer.
+ bgfx::setVertexBuffer(0, m_vbh);
+ bgfx::setIndexBuffer(m_ibh);
+ bgfx::setInstanceDataBuffer(m_currPositionBuffer0
+ , 0
+ , m_paramsData.dispatchSize * kThreadGroupUpdateSize
+ );
- // Set render states.
- bgfx::setState(0
+ // Set render states.
+ bgfx::setState(0
| BGFX_STATE_RGB_WRITE
| BGFX_STATE_BLEND_ADD
| BGFX_STATE_DEPTH_TEST_ALWAYS
);
- // Submit primitive for rendering to view 0.
- if (useIndirect)
- {
- bgfx::submit(0, particleProgram, indirectBuffer, 0);
- }
- else
- {
- bgfx::submit(0, particleProgram);
+ // Submit primitive for rendering to view 0.
+ if (m_useIndirect)
+ {
+ bgfx::submit(0, m_particleProgram, m_indirectBuffer, 0);
+ }
+ else
+ {
+ bgfx::submit(0, m_particleProgram);
+ }
}
+ imguiEndFrame();
+
// Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives.
bgfx::frame();
- }
- // Cleanup.
- cameraDestroy();
- imguiDestroy();
-
- if (indirectSupported)
- {
- bgfx::destroyProgram(indirectProgram);
- bgfx::destroyIndirectBuffer(indirectBuffer);
+ return true;
}
-
- bgfx::destroyUniform(u_params);
- bgfx::destroyDynamicVertexBuffer(currPositionBuffer0);
- bgfx::destroyDynamicVertexBuffer(currPositionBuffer1);
- bgfx::destroyDynamicVertexBuffer(prevPositionBuffer0);
- bgfx::destroyDynamicVertexBuffer(prevPositionBuffer1);
- bgfx::destroyProgram(updateInstancesProgram);
- bgfx::destroyProgram(initInstancesProgram);
- bgfx::destroyIndexBuffer(ibh);
- bgfx::destroyVertexBuffer(vbh);
- bgfx::destroyProgram(particleProgram);
+ return false;
}
- else
- {
- int64_t timeOffset = bx::getHPCounter();
- entry::MouseState mouseState;
- while (!entry::processEvents(width, height, debug, reset, &mouseState) )
- {
- int64_t now = bx::getHPCounter();
- float time = (float)( (now - timeOffset)/double(bx::getHPFrequency() ) );
-
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height));
-
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/24-nbody");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: N-body simulation with compute shaders using buffers.");
-
- bool blink = uint32_t(time*3.0f)&1;
- bgfx::dbgTextPrintf(0, 5, blink ? 0x1f : 0x01, " Compute is not supported by GPU. ");
-
- bgfx::touch(0);
- bgfx::frame();
- }
- }
+ entry::MouseState m_mouseState;
+
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+ bool m_useIndirect;
+ bool m_computeSupported;
+ bool m_indirectSupported;
+
+ ParamsData m_paramsData;
+
+ bgfx::VertexBufferHandle m_vbh;
+ bgfx::IndexBufferHandle m_ibh;
+ bgfx::ProgramHandle m_particleProgram;
+ bgfx::ProgramHandle m_indirectProgram;
+ bgfx::ProgramHandle m_initInstancesProgram;
+ bgfx::ProgramHandle m_updateInstancesProgram;
+ bgfx::IndirectBufferHandle m_indirectBuffer;
+ bgfx::DynamicVertexBufferHandle m_currPositionBuffer0;
+ bgfx::DynamicVertexBufferHandle m_currPositionBuffer1;
+ bgfx::DynamicVertexBufferHandle m_prevPositionBuffer0;
+ bgfx::DynamicVertexBufferHandle m_prevPositionBuffer1;
+ bgfx::UniformHandle u_params;
+
+ int64_t m_timeOffset;
+};
- // Shutdown bgfx.
- bgfx::shutdown();
+} // namespace
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleNbody, "24-nbody", "N-body simulation with compute shaders using buffers.");
diff --git a/3rdparty/bgfx/examples/25-c99/helloworld.c b/3rdparty/bgfx/examples/25-c99/helloworld.c
index 6fb38ae0dd0..d81ffdb3596 100644
--- a/3rdparty/bgfx/examples/25-c99/helloworld.c
+++ b/3rdparty/bgfx/examples/25-c99/helloworld.c
@@ -13,7 +13,7 @@ uint16_t uint16_max(uint16_t _a, uint16_t _b)
return _a < _b ? _b : _a;
}
-int _main_(int _argc, char** _argv)
+int32_t _main_(int32_t _argc, char** _argv)
{
uint32_t width = 1280;
uint32_t height = 720;
diff --git a/3rdparty/bgfx/examples/26-occlusion/occlusion.cpp b/3rdparty/bgfx/examples/26-occlusion/occlusion.cpp
index 634aaa6cc9a..d2c43c903b9 100644
--- a/3rdparty/bgfx/examples/26-occlusion/occlusion.cpp
+++ b/3rdparty/bgfx/examples/26-occlusion/occlusion.cpp
@@ -6,6 +6,10 @@
#include "common.h"
#include "bgfx_utils.h"
#include "camera.h"
+#include "imgui/imgui.h"
+
+namespace
+{
#define CUBES_DIM 10
@@ -60,17 +64,23 @@ static const uint16_t s_cubeIndices[36] =
class ExampleOcclusion : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleOcclusion(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- uint32_t width = 1280;
- uint32_t height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, m_reset);
+ bgfx::reset(m_width, m_height, m_reset);
// Enable debug text.
bgfx::setDebug(m_debug);
@@ -109,9 +119,15 @@ class ExampleOcclusion : public entry::AppI
// Create program from shaders.
m_program = loadProgram("vs_cubes", "fs_cubes");
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_occlusionQueries); ++ii)
+ const bgfx::Caps* caps = bgfx::getCaps();
+ m_occlusionQuerySupported = !!(caps->supported & BGFX_CAPS_OCCLUSION_QUERY);
+
+ if (m_occlusionQuerySupported)
{
- m_occlusionQueries[ii] = bgfx::createOcclusionQuery();
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_occlusionQueries); ++ii)
+ {
+ m_occlusionQueries[ii] = bgfx::createOcclusionQuery();
+ }
}
cameraCreate();
@@ -121,21 +137,28 @@ class ExampleOcclusion : public entry::AppI
cameraSetHorizontalAngle(bx::toRad(-45.0f) );
m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
+ imguiDestroy();
+
// Cleanup.
cameraDestroy();
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_occlusionQueries); ++ii)
+ if (m_occlusionQuerySupported)
{
- bgfx::destroyOcclusionQuery(m_occlusionQueries[ii]);
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_occlusionQueries); ++ii)
+ {
+ bgfx::destroy(m_occlusionQueries[ii]);
+ }
}
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
- bgfx::destroyProgram(m_program);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_program);
// Shutdown bgfx.
bgfx::shutdown();
@@ -143,122 +166,133 @@ class ExampleOcclusion : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
- if (!entry::processWindowEvents(m_state, m_debug, m_reset) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
- const float time = (float)( (now-m_timeOffset)/double(bx::getHPFrequency() ) );
- const float deltaTime = float(frameTime/freq);
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/26-occlusion");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Using occlusion query for conditional rendering.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- uint32_t width = m_state.m_width;
- uint32_t height = m_state.m_height;
-
- // Update camera.
- float view[16];
- cameraUpdate(deltaTime, m_state.m_mouse);
- cameraGetViewMtx(view);
-
- // Set view and projection matrix for view 0.
- const bgfx::HMD* hmd = bgfx::getHMD();
- if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
- {
- float viewHead[16];
- float eye[3] = {};
- bx::mtxQuatTranslationHMD(viewHead, hmd->eye[0].rotation, eye);
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
- float tmp[16];
- bx::mtxMul(tmp, view, viewHead);
+ showExampleDialog(this
+ , !m_occlusionQuerySupported
+ ? "Occlusion query is not supported."
+ : NULL
+ );
- bgfx::setViewTransform(0, tmp, hmd->eye[0].projection);
- bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ imguiEndFrame();
- bgfx::setViewTransform(1, tmp, hmd->eye[1].projection);
- bgfx::setViewRect(1, 0, 0, hmd->width, hmd->height);
- }
- else
+ if (m_occlusionQuerySupported)
{
- float proj[16];
- bx::mtxProj(proj, 90.0f, float(width)/float(height), 0.1f, 10000.0f, bgfx::getCaps()->homogeneousDepth);
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const float time = (float)( (now-m_timeOffset)/double(bx::getHPFrequency() ) );
+ const float deltaTime = float(frameTime/freq);
+
+ // Update camera.
+ float view[16];
+ cameraUpdate(deltaTime, m_state.m_mouse);
+ cameraGetViewMtx(view);
+
+ // Set view and projection matrix for view 0.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float viewHead[16];
+ float eye[3] = {};
+ bx::mtxQuatTranslationHMD(viewHead, hmd->eye[0].rotation, eye);
- bgfx::setViewTransform(0, view, proj);
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
+ float tmp[16];
+ bx::mtxMul(tmp, view, viewHead);
- bgfx::setViewTransform(1, view, proj);
- bgfx::setViewRect(1, 0, 0, uint16_t(width), uint16_t(height) );
+ bgfx::setViewTransform(0, tmp, hmd->eye[0].projection);
+ bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
- float at[3] = { 0.0f, 0.0f, 0.0f };
- float eye[3] = { 17.5f, 10.0f, -17.5f };
- bx::mtxLookAt(view, eye, at);
+ bgfx::setViewTransform(1, tmp, hmd->eye[1].projection);
+ bgfx::setViewRect(1, 0, 0, hmd->width, hmd->height);
+ }
+ else
+ {
+ float proj[16];
+ bx::mtxProj(proj, 90.0f, float(m_width)/float(m_height), 0.1f, 10000.0f, bgfx::getCaps()->homogeneousDepth);
- bgfx::setViewTransform(2, view, proj);
- bgfx::setViewRect(2, 10, uint16_t(height - height/4 - 10), uint16_t(width/4), uint16_t(height/4) );
- }
+ bgfx::setViewTransform(0, view, proj);
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
- bgfx::touch(0);
- bgfx::touch(2);
+ bgfx::setViewTransform(1, view, proj);
+ bgfx::setViewRect(1, 0, 0, uint16_t(m_width), uint16_t(m_height) );
- uint8_t img[CUBES_DIM*CUBES_DIM*2];
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ float eye[3] = { 17.5f, 10.0f, -17.5f };
+ bx::mtxLookAt(view, eye, at);
- for (uint32_t yy = 0; yy < CUBES_DIM; ++yy)
- {
- for (uint32_t xx = 0; xx < CUBES_DIM; ++xx)
+ bgfx::setViewTransform(2, view, proj);
+ bgfx::setViewRect(2, 10, uint16_t(m_height - m_height/4 - 10), uint16_t(m_width/4), uint16_t(m_height/4) );
+ }
+
+ bgfx::touch(0);
+ bgfx::touch(2);
+
+ uint8_t img[CUBES_DIM*CUBES_DIM*2];
+
+ for (uint32_t yy = 0; yy < CUBES_DIM; ++yy)
{
- float mtx[16];
- bx::mtxRotateXY(mtx, time + xx*0.21f, time + yy*0.37f);
- mtx[12] = -(CUBES_DIM-1) * 3.0f / 2.0f + float(xx)*3.0f;
- mtx[13] = 0.0f;
- mtx[14] = -(CUBES_DIM-1) * 3.0f / 2.0f + float(yy)*3.0f;
-
- bgfx::OcclusionQueryHandle occlusionQuery = m_occlusionQueries[yy*CUBES_DIM+xx];
-
- bgfx::setTransform(mtx);
- bgfx::setVertexBuffer(m_vbh);
- bgfx::setIndexBuffer(m_ibh);
- bgfx::setCondition(occlusionQuery, true);
- bgfx::setState(BGFX_STATE_DEFAULT);
- bgfx::submit(0, m_program);
-
- bgfx::setTransform(mtx);
- bgfx::setVertexBuffer(m_vbh);
- bgfx::setIndexBuffer(m_ibh);
- bgfx::setState(0
- | BGFX_STATE_DEPTH_TEST_LEQUAL
- | BGFX_STATE_CULL_CW
- );
- bgfx::submit(1, m_program, occlusionQuery);
-
- bgfx::setTransform(mtx);
- bgfx::setVertexBuffer(m_vbh);
- bgfx::setIndexBuffer(m_ibh);
- bgfx::setCondition(occlusionQuery, true);
- bgfx::setState(BGFX_STATE_DEFAULT);
- bgfx::submit(2, m_program);
-
- img[(yy*CUBES_DIM+xx)*2+0] = " \xfex"[bgfx::getResult(occlusionQuery)];
- img[(yy*CUBES_DIM+xx)*2+1] = 0xf;
+ for (uint32_t xx = 0; xx < CUBES_DIM; ++xx)
+ {
+ float mtx[16];
+ bx::mtxRotateXY(mtx, time + xx*0.21f, time + yy*0.37f);
+ mtx[12] = -(CUBES_DIM-1) * 3.0f / 2.0f + float(xx)*3.0f;
+ mtx[13] = 0.0f;
+ mtx[14] = -(CUBES_DIM-1) * 3.0f / 2.0f + float(yy)*3.0f;
+
+ bgfx::OcclusionQueryHandle occlusionQuery = m_occlusionQueries[yy*CUBES_DIM+xx];
+
+ bgfx::setTransform(mtx);
+ bgfx::setVertexBuffer(0, m_vbh);
+ bgfx::setIndexBuffer(m_ibh);
+ bgfx::setCondition(occlusionQuery, true);
+ bgfx::setState(BGFX_STATE_DEFAULT);
+ bgfx::submit(0, m_program);
+
+ bgfx::setTransform(mtx);
+ bgfx::setVertexBuffer(0, m_vbh);
+ bgfx::setIndexBuffer(m_ibh);
+ bgfx::setState(0
+ | BGFX_STATE_DEPTH_TEST_LEQUAL
+ | BGFX_STATE_CULL_CW
+ );
+ bgfx::submit(1, m_program, occlusionQuery);
+
+ bgfx::setTransform(mtx);
+ bgfx::setVertexBuffer(0, m_vbh);
+ bgfx::setIndexBuffer(m_ibh);
+ bgfx::setCondition(occlusionQuery, true);
+ bgfx::setState(BGFX_STATE_DEFAULT);
+ bgfx::submit(2, m_program);
+
+ img[(yy*CUBES_DIM+xx)*2+0] = " \xfex"[bgfx::getResult(occlusionQuery)];
+ img[(yy*CUBES_DIM+xx)*2+1] = 0xf;
+ }
}
- }
- for (uint16_t xx = 0; xx < CUBES_DIM; ++xx)
- {
- bgfx::dbgTextImage(5 + xx*2, 5, 1, CUBES_DIM, img + xx*2, CUBES_DIM*2);
- }
+ for (uint16_t xx = 0; xx < CUBES_DIM; ++xx)
+ {
+ bgfx::dbgTextImage(5 + xx*2, 5, 1, CUBES_DIM, img + xx*2, CUBES_DIM*2);
+ }
- int32_t numPixels = 0;
- bgfx::getResult(m_occlusionQueries[0], &numPixels);
- bgfx::dbgTextPrintf(5, 5 + CUBES_DIM + 1, 0xf, "%d", numPixels);
+ int32_t numPixels = 0;
+ bgfx::getResult(m_occlusionQueries[0], &numPixels);
+ bgfx::dbgTextPrintf(5, 5 + CUBES_DIM + 1, 0xf, "%d", numPixels);
+ }
// Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives.
@@ -270,17 +304,24 @@ class ExampleOcclusion : public entry::AppI
return false;
}
- uint32_t m_reset;
+ entry::MouseState m_mouseState;
+
+ uint32_t m_width;
+ uint32_t m_height;
uint32_t m_debug;
+ uint32_t m_reset;
bgfx::VertexBufferHandle m_vbh;
bgfx::IndexBufferHandle m_ibh;
bgfx::ProgramHandle m_program;
int64_t m_timeOffset;
+ bool m_occlusionQuerySupported;
bgfx::OcclusionQueryHandle m_occlusionQueries[CUBES_DIM*CUBES_DIM];
entry::WindowState m_state;
};
-ENTRY_IMPLEMENT_MAIN(ExampleOcclusion);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleOcclusion, "26-occlusion", "Using occlusion query for conditional rendering.");
diff --git a/3rdparty/bgfx/examples/27-terrain/terrain.cpp b/3rdparty/bgfx/examples/27-terrain/terrain.cpp
index 3bcd8491dd6..82a6012ae8a 100644
--- a/3rdparty/bgfx/examples/27-terrain/terrain.cpp
+++ b/3rdparty/bgfx/examples/27-terrain/terrain.cpp
@@ -10,7 +10,10 @@
#include "bounds.h"
#include <bx/allocator.h>
#include <bx/debug.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
+
+namespace
+{
static const uint16_t s_terrainSize = 256;
@@ -38,7 +41,7 @@ bgfx::VertexDecl PosTexCoord0Vertex::ms_decl;
struct TerrainData
{
- uint32_t m_mode;
+ int32_t m_mode;
bool m_dirty;
float m_transform[16];
uint8_t* m_heightMap;
@@ -58,13 +61,19 @@ struct BrushData
class ExampleTerrain : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleTerrain(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -75,11 +84,11 @@ class ExampleTerrain : public entry::AppI
// Set view 0 clear state.
bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
// Create vertex stream declaration.
PosTexCoord0Vertex::init();
@@ -93,19 +102,17 @@ class ExampleTerrain : public entry::AppI
m_timeOffset = bx::getHPCounter();
- m_vbh.idx = bgfx::invalidHandle;
- m_ibh.idx = bgfx::invalidHandle;
- m_dvbh.idx = bgfx::invalidHandle;
- m_dibh.idx = bgfx::invalidHandle;
- m_heightTexture.idx = bgfx::invalidHandle;
+ m_vbh.idx = bgfx::kInvalidHandle;
+ m_ibh.idx = bgfx::kInvalidHandle;
+ m_dvbh.idx = bgfx::kInvalidHandle;
+ m_dibh.idx = bgfx::kInvalidHandle;
+ m_heightTexture.idx = bgfx::kInvalidHandle;
s_heightTexture = bgfx::createUniform("s_heightTexture", bgfx::UniformType::Int1);
m_oldWidth = 0;
m_oldHeight = 0;
m_oldReset = m_reset;
- m_scrollArea = 0;
-
m_brush.m_power = 0.5f;
m_brush.m_size = 10;
m_brush.m_raise = true;
@@ -125,10 +132,10 @@ class ExampleTerrain : public entry::AppI
const float initialPos[3] = { s_terrainSize/2.0f, 100.0f, 0.0f };
cameraSetPosition(initialPos);
- cameraSetVerticalAngle(-bx::pi/4.0f);
+ cameraSetVerticalAngle(-bx::kPi/4.0f);
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
// Cleanup.
cameraDestroy();
@@ -136,33 +143,33 @@ class ExampleTerrain : public entry::AppI
if (bgfx::isValid(m_ibh) )
{
- bgfx::destroyIndexBuffer(m_ibh);
+ bgfx::destroy(m_ibh);
}
if (bgfx::isValid(m_vbh) )
{
- bgfx::destroyVertexBuffer(m_vbh);
+ bgfx::destroy(m_vbh);
}
if (bgfx::isValid(m_dibh) )
{
- bgfx::destroyDynamicIndexBuffer(m_dibh);
+ bgfx::destroy(m_dibh);
}
if (bgfx::isValid(m_dvbh) )
{
- bgfx::destroyDynamicVertexBuffer(m_dvbh);
+ bgfx::destroy(m_dvbh);
}
- bgfx::destroyUniform(s_heightTexture);
+ bgfx::destroy(s_heightTexture);
if (bgfx::isValid(m_heightTexture) )
{
- bgfx::destroyTexture(m_heightTexture);
+ bgfx::destroy(m_heightTexture);
}
- bgfx::destroyProgram(m_terrainProgram);
- bgfx::destroyProgram(m_terrainHeightTextureProgram);
+ bgfx::destroy(m_terrainProgram);
+ bgfx::destroy(m_terrainHeightTextureProgram);
/// When data is passed to bgfx via makeRef we need to make
/// sure library is done with it before freeing memory blocks.
@@ -190,8 +197,8 @@ class ExampleTerrain : public entry::AppI
vert->m_x = (float)x;
vert->m_y = m_terrain.m_heightMap[(y * s_terrainSize) + x];
vert->m_z = (float)y;
- vert->m_u = (float)x / (float)s_terrainSize;
- vert->m_v = (float)y / (float)s_terrainSize;
+ vert->m_u = (x + 0.5f) / s_terrainSize;
+ vert->m_v = (y + 0.5f) / s_terrainSize;
m_terrain.m_vertexCount++;
}
@@ -226,14 +233,14 @@ class ExampleTerrain : public entry::AppI
if (bgfx::isValid(m_vbh) )
{
- bgfx::destroyVertexBuffer(m_vbh);
+ bgfx::destroy(m_vbh);
}
mem = bgfx::makeRef(&m_terrain.m_vertices[0], sizeof(PosTexCoord0Vertex) * m_terrain.m_vertexCount);
m_vbh = bgfx::createVertexBuffer(mem, PosTexCoord0Vertex::ms_decl);
if (bgfx::isValid(m_ibh) )
{
- bgfx::destroyIndexBuffer(m_ibh);
+ bgfx::destroy(m_ibh);
}
mem = bgfx::makeRef(&m_terrain.m_indices[0], sizeof(uint16_t) * m_terrain.m_indexCount);
@@ -291,14 +298,14 @@ class ExampleTerrain : public entry::AppI
{
int32_t brush_x = _x + area_x;
if (brush_x < 0
- || brush_x > (int32_t)s_terrainSize)
+ || brush_x >= (int32_t)s_terrainSize)
{
continue;
}
int32_t brush_y = _y + area_y;
if (brush_y < 0
- || brush_y > (int32_t)s_terrainSize)
+ || brush_y >= (int32_t)s_terrainSize)
{
continue;
}
@@ -312,7 +319,7 @@ class ExampleTerrain : public entry::AppI
float brushAttn = m_brush.m_size - bx::fsqrt(a2 + b2);
// Raise/Lower and scale by brush power.
- height += (bx::fclamp(brushAttn * m_brush.m_power, 0.0, m_brush.m_power) * m_brush.m_raise)
+ height += 0.0f < bx::fclamp(brushAttn*m_brush.m_power, 0.0f, m_brush.m_power) && m_brush.m_raise
? 1.0f
: -1.0f
;
@@ -358,9 +365,9 @@ class ExampleTerrain : public entry::AppI
bx::vec3Add(pos, pos, ray_dir);
if (pos[0] < 0
- || pos[0] > s_terrainSize
+ || pos[0] >= s_terrainSize
|| pos[2] < 0
- || pos[2] > s_terrainSize)
+ || pos[2] >= s_terrainSize)
{
continue;
}
@@ -374,7 +381,7 @@ class ExampleTerrain : public entry::AppI
}
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
@@ -383,60 +390,47 @@ class ExampleTerrain : public entry::AppI
const int64_t frameTime = now - last;
last = now;
const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
const float deltaTime = float(frameTime/freq);
- // Use m_debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/27-terrain");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Terrain painting example.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
imguiBeginFrame(m_mouseState.m_mx
- , m_mouseState.m_my
- , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , m_mouseState.m_mz
- , uint16_t(m_width)
- , uint16_t(m_height)
- );
-
- imguiBeginScrollArea("Settings", m_width - m_width / 5 - 10, 10, m_width / 5, m_height / 3, &m_scrollArea);
- imguiSeparatorLine();
-
- if (imguiCheck("Vertex Buffer", (m_terrain.m_mode == 0) ) )
- {
- m_terrain.m_mode = 0;
- m_terrain.m_dirty = true;
- }
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
- if (imguiCheck("Dynamic Vertex Buffer", (m_terrain.m_mode == 1) ) )
- {
- m_terrain.m_mode = 1;
- m_terrain.m_dirty = true;
- }
+ showExampleDialog(this);
- if (imguiCheck("Height Texture", (m_terrain.m_mode == 2) ) )
- {
- m_terrain.m_mode = 2;
- m_terrain.m_dirty = true;
- }
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 3.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
- imguiSeparatorLine();
+ ImGui::Separator();
- if (imguiCheck("Raise Terrain", m_brush.m_raise) )
- {
- m_brush.m_raise = !m_brush.m_raise;
- }
+ m_terrain.m_dirty |= ImGui::RadioButton("Vertex Buffer", &m_terrain.m_mode, 0);
+ m_terrain.m_dirty |= ImGui::RadioButton("Dynamic Vertex Buffer", &m_terrain.m_mode, 1);
+ m_terrain.m_dirty |= ImGui::RadioButton("Height Texture", &m_terrain.m_mode, 2);
+
+ ImGui::Separator();
- imguiSlider("Brush Size", m_brush.m_size, 1, 50);
- imguiSlider("Brush Power", m_brush.m_power, 0.0f, 1.0f, 0.01f);
+ ImGui::Checkbox("Raise Terrain", &m_brush.m_raise);
- imguiEndScrollArea();
+ ImGui::SliderInt("Brush Size", &m_brush.m_size, 1, 50);
+ ImGui::SliderFloat("Brush Power", &m_brush.m_power, 0.0f, 1.0f);
+
+ ImGui::End();
imguiEndFrame();
- if (!imguiMouseOverArea() )
+ if (!ImGui::MouseOverArea() )
{
// Update camera.
cameraUpdate(deltaTime, m_mouseState);
@@ -466,19 +460,19 @@ class ExampleTerrain : public entry::AppI
switch (m_terrain.m_mode)
{
default:
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
bgfx::submit(0, m_terrainProgram);
break;
case 1:
- bgfx::setVertexBuffer(m_dvbh);
+ bgfx::setVertexBuffer(0, m_dvbh);
bgfx::setIndexBuffer(m_dibh);
bgfx::submit(0, m_terrainProgram);
break;
case 2:
- bgfx::setVertexBuffer(m_vbh);
+ bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
bgfx::setTexture(0, s_heightTexture, m_heightTexture);
bgfx::submit(0, m_terrainHeightTextureProgram);
@@ -516,8 +510,6 @@ class ExampleTerrain : public entry::AppI
uint32_t m_oldHeight;
uint32_t m_oldReset;
- int32_t m_scrollArea;
-
TerrainData m_terrain;
BrushData m_brush;
@@ -526,4 +518,6 @@ class ExampleTerrain : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(ExampleTerrain);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleTerrain, "27-terrain", "Terrain painting example.");
diff --git a/3rdparty/bgfx/examples/28-wireframe/wireframe.cpp b/3rdparty/bgfx/examples/28-wireframe/wireframe.cpp
index 332a4f1e605..e7454c57cad 100644
--- a/3rdparty/bgfx/examples/28-wireframe/wireframe.cpp
+++ b/3rdparty/bgfx/examples/28-wireframe/wireframe.cpp
@@ -7,6 +7,9 @@
#include "bgfx_utils.h"
#include "imgui/imgui.h"
+namespace
+{
+
struct DrawMode
{
enum
@@ -110,13 +113,13 @@ struct Camera
};
float ll[2];
- latLongFromVec(ll[0], ll[1], toPosNorm);
+ bx::vec3ToLatLong(&ll[0], &ll[1], toPosNorm);
ll[0] += consume[0];
ll[1] -= consume[1];
- ll[1] = bx::fclamp(ll[1], 0.02f, 0.98f);
+ ll[1] = bx::fclamp(ll[1], 0.02f, 0.98f);
float tmp[3];
- vecFromLatLong(tmp, ll[0], ll[1]);
+ bx::vec3FromLatLong(tmp, ll[0], ll[1]);
float diff[3];
diff[0] = (tmp[0]-toPosNorm[0])*toPosLen;
@@ -145,30 +148,6 @@ struct Camera
m_pos.curr[2] = bx::flerp(m_pos.curr[2], m_pos.dest[2], amount);
}
- static inline void vecFromLatLong(float _vec[3], float _u, float _v)
- {
- const float phi = _u * 2.0f*bx::pi;
- const float theta = _v * bx::pi;
-
- const float st = bx::fsin(theta);
- const float sp = bx::fsin(phi);
- const float ct = bx::fcos(theta);
- const float cp = bx::fcos(phi);
-
- _vec[0] = -st*sp;
- _vec[1] = ct;
- _vec[2] = -st*cp;
- }
-
- static inline void latLongFromVec(float& _u, float& _v, const float _vec[3])
- {
- const float phi = bx::fatan2(_vec[0], _vec[2]);
- const float theta = bx::facos(_vec[1]);
-
- _u = (bx::pi + phi)*bx::invPi*0.5f;
- _v = theta*bx::invPi;
- }
-
struct Interp3f
{
float curr[3];
@@ -225,27 +204,27 @@ struct MeshMtx
}
void init(const char* _path
- , float _scale = 1.0f
- , float _rotX = 0.0f
- , float _rotY = 0.0f
- , float _rotZ = 0.0f
- , float _transX = 0.0f
- , float _transY = 0.0f
- , float _transZ = 0.0f
- )
+ , float _scale = 1.0f
+ , float _rotX = 0.0f
+ , float _rotY = 0.0f
+ , float _rotZ = 0.0f
+ , float _transX = 0.0f
+ , float _transY = 0.0f
+ , float _transZ = 0.0f
+ )
{
m_mesh = meshLoad(_path);
bx::mtxSRT(m_mtx
- , _scale
- , _scale
- , _scale
- , _rotX
- , _rotY
- , _rotZ
- , _transX
- , _transY
- , _transZ
- );
+ , _scale
+ , _scale
+ , _scale
+ , _rotX
+ , _rotY
+ , _rotZ
+ , _transX
+ , _transY
+ , _transZ
+ );
}
void destroy()
@@ -272,7 +251,7 @@ struct Uniforms
m_wfColor[0] = 1.0f;
m_wfColor[1] = 0.0f;
m_wfColor[2] = 0.0f;
- m_wfOpacity = 0.7f;
+ m_wfColor[3] = 1.0f;
m_drawEdges = 0.0f;
m_wfThickness = 1.5f;
@@ -286,7 +265,7 @@ struct Uniforms
void destroy()
{
- bgfx::destroyUniform(u_params);
+ bgfx::destroy(u_params);
}
union
@@ -294,7 +273,7 @@ struct Uniforms
struct
{
/*0*/struct { float m_camPos[3], m_unused0; };
- /*1*/struct { float m_wfColor[3], m_wfOpacity; };
+ /*1*/struct { float m_wfColor[4]; };
/*2*/struct { float m_drawEdges, m_wfThickness, m_unused2[2]; };
};
@@ -306,13 +285,19 @@ struct Uniforms
class ExampleWireframe : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleWireframe(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = 0
| BGFX_RESET_VSYNC
| BGFX_RESET_MSAA_X16
@@ -326,18 +311,18 @@ class ExampleWireframe : public entry::AppI
// Set view 0 clear state.
bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
m_wfProgram = loadProgram("vs_wf_wireframe", "fs_wf_wireframe");
m_meshProgram = loadProgram("vs_wf_mesh", "fs_wf_mesh");
m_uniforms.init();
- m_meshes[0].init("meshes/bunny.bin", 1.0f, 0.0f, bx::pi, 0.0f, 0.0f, -0.8f, 0.0f);
+ m_meshes[0].init("meshes/bunny.bin", 1.0f, 0.0f, bx::kPi, 0.0f, 0.0f, -0.8f, 0.0f);
m_meshes[1].init("meshes/hollowcube.bin", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
m_meshes[2].init("meshes/orb.bin", 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, -0.65f, 0.0f);
@@ -350,11 +335,9 @@ class ExampleWireframe : public entry::AppI
m_meshSelection = 1;
m_drawMode = DrawMode::WireframeShaded;
- m_scrollArea = 0;
- m_showWfColor = true;
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
// Cleanup.
imguiDestroy();
@@ -363,8 +346,8 @@ class ExampleWireframe : public entry::AppI
m_meshes[1].destroy();
m_meshes[2].destroy();
- bgfx::destroyProgram(m_wfProgram);
- bgfx::destroyProgram(m_meshProgram);
+ bgfx::destroy(m_wfProgram);
+ bgfx::destroy(m_meshProgram);
m_uniforms.destroy();
@@ -374,7 +357,7 @@ class ExampleWireframe : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
@@ -389,67 +372,57 @@ class ExampleWireframe : public entry::AppI
}
imguiBeginFrame(m_mouseState.m_mx
- , m_mouseState.m_my
- , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , m_mouseState.m_mz
- , uint16_t(m_width)
- , uint16_t(m_height)
- );
-
- imguiBeginScrollArea("Settings"
- , m_width - m_width / 5 - 10
- , 10
- , m_width / 5
- , 492
- , &m_scrollArea
- );
-
- imguiSeparatorLine(1); imguiIndent(8); imguiLabel("Draw mode:"); imguiUnindent(8); imguiSeparatorLine(1);
- imguiSeparator(4);
- {
- imguiIndent();
- m_drawMode = imguiChoose(m_drawMode
- , "Wireframe + Shaded"
- , "Wireframe"
- , "Shaded"
- );
- imguiUnindent();
- }
- imguiSeparator(8);
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height * 0.75f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+
+ ImGui::Separator();
+ ImGui::Text("Draw mode:");
+ ImGui::RadioButton("Wireframe + Shaded", &m_drawMode, 0);
+ ImGui::RadioButton("Wireframe", &m_drawMode, 1);
+ ImGui::RadioButton("Shaded", &m_drawMode, 2);
const bool wfEnabled = (DrawMode::Shaded != m_drawMode);
- imguiSeparatorLine(1); imguiIndent(8); imguiLabel("Wireframe:", wfEnabled); imguiUnindent(8); imguiSeparatorLine(1);
- imguiSeparator(4);
+ if ( wfEnabled )
{
- imguiColorWheel("Color", m_uniforms.m_wfColor, m_showWfColor, 0.6f, wfEnabled);
- imguiIndent();
- imguiSlider("Opacity", m_uniforms.m_wfOpacity, 0.1f, 1.0f, 0.1f, wfEnabled);
- imguiSlider("Thickness", m_uniforms.m_wfThickness, 0.6f, 2.2f, 0.1f, wfEnabled);
- imguiUnindent();
+ ImGui::Separator();
+
+ ImGui::ColorWheel("Color", m_uniforms.m_wfColor, 0.6f);
+ ImGui::SliderFloat("Thickness", &m_uniforms.m_wfThickness, 0.6f, 2.2f);
}
- imguiSeparator(8);
- imguiSeparatorLine(1); imguiIndent(8); imguiLabel("Mesh:"); imguiUnindent(8); imguiSeparatorLine(1);
- imguiSeparator(4);
+ ImGui::Separator();
+ ImGui::Text("Mesh:");
{
- imguiIndent();
- const uint32_t prevMeshSel = m_meshSelection;
- m_meshSelection = imguiChoose(m_meshSelection
- , "Bunny"
- , "Hollowcubes"
- , "Orb"
- );
- if (prevMeshSel != m_meshSelection)
+ bool meshChanged = false;
+ meshChanged |= ImGui::RadioButton("Bunny", &m_meshSelection, 0);
+ meshChanged |= ImGui::RadioButton("Hollowcubes", &m_meshSelection, 1);
+ meshChanged |= ImGui::RadioButton("Orb", &m_meshSelection, 2);
+
+ if (meshChanged)
{
m_camera.reset();
}
- imguiUnindent();
}
- imguiSeparator(8);
- imguiEndScrollArea();
+ ImGui::End();
imguiEndFrame();
// This dummy draw call is here to make sure that view 0 is cleared
@@ -461,20 +434,13 @@ class ExampleWireframe : public entry::AppI
const int64_t frameTime = now - last;
last = now;
const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
const float deltaTimeSec = float(double(frameTime)/freq);
- // Use m_debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/28-wirefame");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Drawing wireframe mesh.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
// Setup view.
bgfx::setViewRect(0, 0, 0, bgfx::BackbufferRatio::Equal);
bgfx::setViewClear(0, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0);
- const bool mouseOverGui = imguiMouseOverArea();
+ const bool mouseOverGui = ImGui::MouseOverArea();
m_mouse.update(float(m_mouseState.m_mx), float(m_mouseState.m_my), m_mouseState.m_mz, m_width, m_height);
if (!mouseOverGui)
{
@@ -506,25 +472,25 @@ class ExampleWireframe : public entry::AppI
if (DrawMode::Wireframe == m_drawMode)
{
uint64_t state = 0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_DEPTH_WRITE
- | BGFX_STATE_CULL_CCW
- | BGFX_STATE_MSAA
- | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
- ;
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_WRITE
+ | BGFX_STATE_CULL_CCW
+ | BGFX_STATE_MSAA
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
+ ;
meshSubmit(m_meshes[m_meshSelection].m_mesh, 0, m_wfProgram, m_meshes[m_meshSelection].m_mtx, state);
}
else
{
uint64_t state = 0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_DEPTH_TEST_LESS
- | BGFX_STATE_DEPTH_WRITE
- | BGFX_STATE_CULL_CCW
- | BGFX_STATE_MSAA
- ;
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_TEST_LESS
+ | BGFX_STATE_DEPTH_WRITE
+ | BGFX_STATE_CULL_CCW
+ | BGFX_STATE_MSAA
+ ;
meshSubmit(m_meshes[m_meshSelection].m_mesh, 0, m_meshProgram, m_meshes[m_meshSelection].m_mtx, state);
}
@@ -556,11 +522,10 @@ class ExampleWireframe : public entry::AppI
Mouse m_mouse;
Uniforms m_uniforms;
MeshMtx m_meshes[3];
- uint32_t m_meshSelection;
- uint32_t m_drawMode; // Holds data for 'DrawMode'.
-
- bool m_showWfColor;
- int32_t m_scrollArea;
+ int32_t m_meshSelection;
+ int32_t m_drawMode; // Holds data for 'DrawMode'.
};
-ENTRY_IMPLEMENT_MAIN(ExampleWireframe);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleWireframe, "28-wirefame", "Drawing wireframe mesh.");
diff --git a/3rdparty/bgfx/examples/29-debugdraw/debugdraw.cpp b/3rdparty/bgfx/examples/29-debugdraw/debugdraw.cpp
index f3b0cf5c0bf..e089957411d 100644
--- a/3rdparty/bgfx/examples/29-debugdraw/debugdraw.cpp
+++ b/3rdparty/bgfx/examples/29-debugdraw/debugdraw.cpp
@@ -9,9 +9,13 @@
#include <entry/input.h>
#include <debugdraw/debugdraw.h>
#include "camera.h"
+#include "imgui/imgui.h"
#include <bx/uint32_t.h>
+namespace
+{
+
void imageCheckerboard(void* _dst, uint32_t _width, uint32_t _height, uint32_t _step, uint32_t _0, uint32_t _1)
{
uint32_t* dst = (uint32_t*)_dst;
@@ -25,15 +29,21 @@ void imageCheckerboard(void* _dst, uint32_t _width, uint32_t _height, uint32_t _
}
}
-class DebugDrawApp : public entry::AppI
+class ExampleDebugDraw : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleDebugDraw(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC | BGFX_RESET_MSAA_X16;
bgfx::init(args.m_type, args.m_pciId);
@@ -64,10 +74,14 @@ class DebugDrawApp : public entry::AppI
imageCheckerboard(data, 32, 32, 4, 0xff808080, 0xffc0c0c0);
m_sprite = ddCreateSprite(32, 32, data);
+
+ imguiCreate();
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
+ imguiDestroy();
+
ddDestroy(m_sprite);
ddShutdown();
@@ -80,24 +94,60 @@ class DebugDrawApp : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ template<typename Ty>
+ bool intersect(const Ray& _ray, const Ty& _shape)
+ {
+ Hit hit;
+ if (::intersect(_ray, _shape, &hit) )
+ {
+ ddPush();
+
+ ddSetWireframe(false);
+
+ ddSetColor(0xff0000ff);
+
+ float tmp[3];
+ bx::vec3Mul(tmp, hit.m_normal, 0.7f);
+
+ float end[3];
+ bx::vec3Add(end, hit.m_pos, tmp);
+
+ ddDrawCone(hit.m_pos, end, 0.1f);
+
+ ddPop();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
+ imguiBeginFrame(
+ m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
int64_t now = bx::getHPCounter() - m_timeOffset;
static int64_t last = now;
const int64_t frameTime = now - last;
last = now;
const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
const float deltaTime = float(frameTime/freq);
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/29-debugdraw");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Debug draw.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
// Update camera.
cameraUpdate(deltaTime, m_mouseState);
@@ -124,25 +174,37 @@ class DebugDrawApp : public entry::AppI
bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
}
- float zero[3] = {};
+ float mtxVp[16];
+ bx::mtxMul(mtxVp, view, proj);
- float mvp[16];
+ float mtxInvVp[16];
+ bx::mtxInverse(mtxInvVp, mtxVp);
+
+ float zero[3] = {};
float eye[] = { 5.0f, 10.0f, 5.0f };
bx::mtxLookAt(view, eye, zero);
bx::mtxProj(proj, 45.0f, float(m_width)/float(m_height), 1.0f, 15.0f, bgfx::getCaps()->homogeneousDepth);
- bx::mtxMul(mvp, view, proj);
+ bx::mtxMul(mtxVp, view, proj);
+
+ Ray ray = makeRay(
+ (float(m_mouseState.m_mx)/float(m_width) * 2.0f - 1.0f)
+ , -(float(m_mouseState.m_my)/float(m_height) * 2.0f - 1.0f)
+ , mtxInvVp
+ );
+
+ const uint32_t selected = 0xff80ffff;
ddBegin(0);
ddDrawAxis(0.0f, 0.0f, 0.0f);
ddPush();
- ddSetColor(0xff00ff00);
-
Aabb aabb =
{
{ 5.0f, 1.0f, 1.0f },
{ 10.0f, 5.0f, 5.0f },
};
+ ddSetWireframe(true);
+ ddSetColor(intersect(ray, aabb) ? selected : 0xff00ff00);
ddDraw(aabb);
ddPop();
@@ -151,39 +213,49 @@ class DebugDrawApp : public entry::AppI
Obb obb;
bx::mtxRotateX(obb.m_mtx, time);
ddSetWireframe(true);
+ ddSetColor(intersect(ray, obb) ? selected : 0xffffffff);
ddDraw(obb);
- ddSetColor(0xffffffff);
- bx::mtxSRT(obb.m_mtx, 1.0f, 1.0f, 1.0f, 0.0f, time, 0.0f, 3.0f, 0.0f, 0.0f);
+ bx::mtxSRT(obb.m_mtx, 1.0f, 1.0f, 1.0f, time*0.23f, time, 0.0f, 3.0f, 0.0f, 0.0f);
+
+ ddPush();
+ toAabb(aabb, obb);
+ ddSetWireframe(true);
+ ddSetColor(0xff0000ff);
+ ddDraw(aabb);
+ ddPop();
+
ddSetWireframe(false);
+ ddSetColor(intersect(ray, obb) ? selected : 0xffffffff);
ddDraw(obb);
+ ddSetColor(0xffffffff);
ddSetTranslate(0.0f, -2.0f, 0.0f);
ddDrawGrid(Axis::Y, zero, 20, 1.0f);
ddSetTransform(NULL);
- ddDrawFrustum(mvp);
+ ddDrawFrustum(mtxVp);
ddPush();
Sphere sphere = { { 0.0f, 5.0f, 0.0f }, 1.0f };
- ddSetColor(0xfff0c0ff);
+ ddSetColor(intersect(ray, sphere) ? selected : 0xfff0c0ff);
ddSetWireframe(true);
ddSetLod(3);
ddDraw(sphere);
ddSetWireframe(false);
- ddSetColor(0xc0ffc0ff);
sphere.m_center[0] = -2.0f;
+ ddSetColor(intersect(ray, sphere) ? selected : 0xc0ffc0ff);
ddSetLod(2);
ddDraw(sphere);
- ddSetColor(0xa0f0ffff);
sphere.m_center[0] = -4.0f;
+ ddSetColor(intersect(ray, sphere) ? selected : 0xa0f0ffff);
ddSetLod(1);
ddDraw(sphere);
- ddSetColor(0xffc0ff00);
sphere.m_center[0] = -6.0f;
+ ddSetColor(intersect(ray, sphere) ? selected : 0xffc0ff00);
ddSetLod(0);
ddDraw(sphere);
ddPop();
@@ -216,22 +288,42 @@ class DebugDrawApp : public entry::AppI
ddPush();
ddSetSpin(time*0.3f);
{
- float from[3] = { -11.0f, 4.0f, 0.0f };
- float to[3] = { -13.0f, 6.0f, 1.0f };
- ddDrawCone(from, to, 1.0f );
- }
-
- {
- float from[3] = { -9.0f, 2.0f, -1.0f };
- float to[3] = { -11.0f, 4.0f, 0.0f };
- ddDrawCylinder(from, to, 0.5f );
+ Cone cone =
+ {
+ { -11.0f, 4.0f, 0.0f },
+ { -13.0f, 6.0f, 1.0f },
+ 1.0f
+ };
+
+ Cylinder cylinder =
+ {
+ { -9.0f, 2.0f, -1.0f },
+ { -11.0f, 4.0f, 0.0f },
+ 0.5f
+ };
+
+ ddSetColor(false
+ || intersect(ray, cone)
+ || intersect(ray, cylinder)
+ ? selected
+ : 0xffffffff
+ );
+
+ ddDraw(cone);
+ ddDraw(cylinder);
}
ddPop();
{
- float from[3] = { 0.0f, 7.0f, 0.0f };
- float to[3] = { -6.0f, 7.0f, 0.0f };
- ddDrawCylinder(from, to, 0.5f, true);
+ ddSetLod(0);
+ Capsule capsule =
+ {
+ { 0.0f, 7.0f, 0.0f },
+ { -6.0f, 7.0f, 0.0f },
+ 0.5f
+ };
+ ddSetColor(intersect(ray, capsule) ? selected : 0xffffffff);
+ ddDraw(capsule);
}
ddPop();
@@ -253,11 +345,15 @@ class DebugDrawApp : public entry::AppI
float up[3] = { 0.0f, 4.0f, 0.0f };
bx::vec3MulMtx(cylinder.m_end, up, mtx);
+ ddSetColor(intersect(ray, cylinder) ? selected : 0xffffffff);
ddDraw(cylinder);
- toAabb(aabb, cylinder);
- ddSetColor(0xff0000ff);
- ddDraw(aabb);
+ ddPush();
+ toAabb(aabb, cylinder);
+ ddSetWireframe(true);
+ ddSetColor(0xff0000ff);
+ ddDraw(aabb);
+ ddPop();
ddPop();
@@ -286,4 +382,6 @@ class DebugDrawApp : public entry::AppI
uint32_t m_reset;
};
-ENTRY_IMPLEMENT_MAIN(DebugDrawApp);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleDebugDraw, "29-debugdraw", "Debug draw.");
diff --git a/3rdparty/bgfx/examples/30-picking/picking.cpp b/3rdparty/bgfx/examples/30-picking/picking.cpp
index 563e44bf684..22e4af9bb00 100644
--- a/3rdparty/bgfx/examples/30-picking/picking.cpp
+++ b/3rdparty/bgfx/examples/30-picking/picking.cpp
@@ -9,6 +9,9 @@
#include <bx/rng.h>
#include <map>
+namespace
+{
+
#define RENDER_PASS_SHADING 0 // Default forward rendered geo with simple shading
#define RENDER_PASS_ID 1 // ID buffer for picking
#define RENDER_PASS_BLIT 2 // Blit GPU render target to CPU texture
@@ -17,13 +20,19 @@
class ExamplePicking : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExamplePicking(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -144,7 +153,7 @@ class ExamplePicking : public entry::AppI
imguiCreate();
}
- int shutdown() BX_OVERRIDE
+ int shutdown() override
{
for (uint32_t ii = 0; ii < 12; ++ii)
{
@@ -152,16 +161,16 @@ class ExamplePicking : public entry::AppI
}
// Cleanup.
- bgfx::destroyProgram(m_shadingProgram);
- bgfx::destroyProgram(m_idProgram);
+ bgfx::destroy(m_shadingProgram);
+ bgfx::destroy(m_idProgram);
- bgfx::destroyUniform(u_tint);
- bgfx::destroyUniform(u_id);
+ bgfx::destroy(u_tint);
+ bgfx::destroy(u_id);
- bgfx::destroyFrameBuffer(m_pickingFB);
- bgfx::destroyTexture(m_pickingRT);
- bgfx::destroyTexture(m_pickingRTDepth);
- bgfx::destroyTexture(m_blitTex);
+ bgfx::destroy(m_pickingFB);
+ bgfx::destroy(m_pickingRT);
+ bgfx::destroy(m_pickingRTDepth);
+ bgfx::destroy(m_blitTex);
imguiDestroy();
@@ -171,212 +180,218 @@ class ExamplePicking : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- bgfx::setViewFrameBuffer(RENDER_PASS_ID, m_pickingFB);
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency());
- const double toMs = 1000.0 / freq;
- float time = (float)( (bx::getHPCounter() - m_timeOffset) / double(bx::getHPFrequency() ) );
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/30-picking");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Mouse picking via GPU texture readback.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- // Set up matrices for basic forward renderer
- const float camSpeed = 0.25;
- float cameraSpin = (float)m_cameraSpin;
- float eyeDist = 2.5f;
- float eye[3] =
- {
- -eyeDist * bx::fsin(time*cameraSpin*camSpeed),
- 0.0f,
- -eyeDist * bx::fcos(time*cameraSpin*camSpeed),
- };
- float at[3] = { 0.0f, 0.0f, 0.0f };
+ // Draw UI
+ imguiBeginFrame(
+ m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ const bgfx::Caps* caps = bgfx::getCaps();
+ bool blitSupport = 0 != (caps->supported & BGFX_CAPS_TEXTURE_BLIT);
- float view[16];
- bx::mtxLookAt(view, eye, at);
+ showExampleDialog(this
+ , !blitSupport
+ ? "BGFX_CAPS_TEXTURE_BLIT is not supported."
+ : NULL
+ );
- float proj[16];
- bx::mtxProj(proj, 60.0f, float(m_width) / float(m_height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
+ if (blitSupport)
+ {
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 2.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
- // Set up view rect and transform for the shaded pass
- bgfx::setViewRect(RENDER_PASS_SHADING, 0, 0, uint16_t(m_width), uint16_t(m_height) );
- bgfx::setViewTransform(RENDER_PASS_SHADING, view, proj);
+ ImGui::Image(m_pickingRT, ImVec2(m_width / 5.0f - 16.0f, m_width / 5.0f - 16.0f) );
+ ImGui::SliderFloat("Field of view", &m_fov, 1.0f, 60.0f);
+ ImGui::Checkbox("Spin Camera", &m_cameraSpin);
- // Set up picking pass
- float viewProj[16];
- bx::mtxMul(viewProj, view, proj);
+ ImGui::End();
- float invViewProj[16];
- bx::mtxInverse(invViewProj, viewProj);
+ bgfx::setViewFrameBuffer(RENDER_PASS_ID, m_pickingFB);
- // Mouse coord in NDC
- float mouseXNDC = ( m_mouseState.m_mx / (float)m_width ) * 2.0f - 1.0f;
- float mouseYNDC = ((m_height - m_mouseState.m_my) / (float)m_height) * 2.0f - 1.0f;
+ float time = (float)( (bx::getHPCounter() - m_timeOffset) / double(bx::getHPFrequency() ) );
- float pickEye[3];
- float mousePosNDC[3] = { mouseXNDC, mouseYNDC, 0.0f };
- bx::vec3MulMtxH(pickEye, mousePosNDC, invViewProj);
+ // Set up matrices for basic forward renderer
+ const float camSpeed = 0.25;
+ float cameraSpin = (float)m_cameraSpin;
+ float eyeDist = 2.5f;
+ float eye[3] =
+ {
+ -eyeDist * bx::fsin(time*cameraSpin*camSpeed),
+ 0.0f,
+ -eyeDist * bx::fcos(time*cameraSpin*camSpeed),
+ };
+ float at[3] = { 0.0f, 0.0f, 0.0f };
- float pickAt[3];
- float mousePosNDCEnd[3] = { mouseXNDC, mouseYNDC, 1.0f };
- bx::vec3MulMtxH(pickAt, mousePosNDCEnd, invViewProj);
+ float view[16];
+ bx::mtxLookAt(view, eye, at);
- // Look at our unprojected point
- float pickView[16];
- bx::mtxLookAt(pickView, pickEye, pickAt);
+ float proj[16];
+ bx::mtxProj(proj, 60.0f, float(m_width) / float(m_height), 0.1f, 100.0f, caps->homogeneousDepth);
- // Tight FOV is best for picking
- float pickProj[16];
- bx::mtxProj(pickProj, m_fov, 1, 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
+ // Set up view rect and transform for the shaded pass
+ bgfx::setViewRect(RENDER_PASS_SHADING, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ bgfx::setViewTransform(RENDER_PASS_SHADING, view, proj);
- // View rect and transforms for picking pass
- bgfx::setViewRect(RENDER_PASS_ID, 0, 0, ID_DIM, ID_DIM);
- bgfx::setViewTransform(RENDER_PASS_ID, pickView, pickProj);
+ // Set up picking pass
+ float viewProj[16];
+ bx::mtxMul(viewProj, view, proj);
- // Now that our passes are set up, we can finally draw each mesh
+ float invViewProj[16];
+ bx::mtxInverse(invViewProj, viewProj);
- // Picking highlights a mesh so we'll set up this tint color
- const float tintBasic[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
- const float tintHighlighted[4] = { 0.3f, 0.3f, 2.0f, 1.0f };
+ // Mouse coord in NDC
+ float mouseXNDC = ( m_mouseState.m_mx / (float)m_width ) * 2.0f - 1.0f;
+ float mouseYNDC = ((m_height - m_mouseState.m_my) / (float)m_height) * 2.0f - 1.0f;
- for (uint32_t mesh = 0; mesh < 12; ++mesh)
- {
- const float scale = m_meshScale[mesh];
-
- // Set up transform matrix for each mesh
- float mtx[16];
- bx::mtxSRT(mtx
- , scale, scale, scale
- , 0.0f
- , time*0.37f*(mesh % 2 ? 1.0f : -1.0f)
- , 0.0f
- , (mesh % 4) - 1.5f
- , (mesh / 4) - 1.25f
- , 0.0f
- );
+ float pickEye[3];
+ float mousePosNDC[3] = { mouseXNDC, mouseYNDC, 0.0f };
+ bx::vec3MulMtxH(pickEye, mousePosNDC, invViewProj);
- // Submit mesh to both of our render passes
- // Set uniform based on if this is the highlighted mesh
- bgfx::setUniform(u_tint
- , mesh == m_highlighted
- ? tintHighlighted
- : tintBasic
- );
- meshSubmit(m_meshes[mesh], RENDER_PASS_SHADING, m_shadingProgram, mtx);
+ float pickAt[3];
+ float mousePosNDCEnd[3] = { mouseXNDC, mouseYNDC, 1.0f };
+ bx::vec3MulMtxH(pickAt, mousePosNDCEnd, invViewProj);
- // Submit ID pass based on mesh ID
- bgfx::setUniform(u_id, m_idsF[mesh]);
- meshSubmit(m_meshes[mesh], RENDER_PASS_ID, m_idProgram, mtx);
- }
+ // Look at our unprojected point
+ float pickView[16];
+ bx::mtxLookAt(pickView, pickEye, pickAt);
- // If the user previously clicked, and we're done reading data from GPU, look at ID buffer on CPU
- // Whatever mesh has the most pixels in the ID buffer is the one the user clicked on.
- if (m_reading == m_currFrame)
- {
- m_reading = 0;
- std::map<uint32_t, uint32_t> ids; // This contains all the IDs found in the buffer
- uint32_t maxAmount = 0;
- for (uint8_t *x = m_blitData; x < m_blitData + ID_DIM * ID_DIM * 4;)
- {
- uint8_t rr = *x++;
- uint8_t gg = *x++;
- uint8_t bb = *x++;
- uint8_t aa = *x++;
+ // Tight FOV is best for picking
+ float pickProj[16];
+ bx::mtxProj(pickProj, m_fov, 1, 0.1f, 100.0f, caps->homogeneousDepth);
- const bgfx::Caps* caps = bgfx::getCaps();
- if (bgfx::RendererType::Direct3D9 == caps->rendererType)
- {
- // Comes back as BGRA
- uint8_t temp = rr;
- rr = bb;
- bb = temp;
- }
+ // View rect and transforms for picking pass
+ bgfx::setViewRect(RENDER_PASS_ID, 0, 0, ID_DIM, ID_DIM);
+ bgfx::setViewTransform(RENDER_PASS_ID, pickView, pickProj);
- if (0 == (rr|gg|bb) ) // Skip background
- {
- continue;
- }
+ // Now that our passes are set up, we can finally draw each mesh
- uint32_t hashKey = rr + (gg << 8) + (bb << 16) + (aa << 24);
- std::map<uint32_t, uint32_t>::iterator mapIter = ids.find(hashKey);
- uint32_t amount = 1;
- if (mapIter != ids.end() )
- {
- amount = mapIter->second + 1;
- }
+ // Picking highlights a mesh so we'll set up this tint color
+ const float tintBasic[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
+ const float tintHighlighted[4] = { 0.3f, 0.3f, 2.0f, 1.0f };
- ids[hashKey] = amount; // Amount of times this ID (color) has been clicked on in buffer
- maxAmount = maxAmount > amount
- ? maxAmount
- : amount
- ;
+ for (uint32_t mesh = 0; mesh < 12; ++mesh)
+ {
+ const float scale = m_meshScale[mesh];
+
+ // Set up transform matrix for each mesh
+ float mtx[16];
+ bx::mtxSRT(mtx
+ , scale, scale, scale
+ , 0.0f
+ , time*0.37f*(mesh % 2 ? 1.0f : -1.0f)
+ , 0.0f
+ , (mesh % 4) - 1.5f
+ , (mesh / 4) - 1.25f
+ , 0.0f
+ );
+
+ // Submit mesh to both of our render passes
+ // Set uniform based on if this is the highlighted mesh
+ bgfx::setUniform(u_tint
+ , mesh == m_highlighted
+ ? tintHighlighted
+ : tintBasic
+ );
+ meshSubmit(m_meshes[mesh], RENDER_PASS_SHADING, m_shadingProgram, mtx);
+
+ // Submit ID pass based on mesh ID
+ bgfx::setUniform(u_id, m_idsF[mesh]);
+ meshSubmit(m_meshes[mesh], RENDER_PASS_ID, m_idProgram, mtx);
}
- uint32_t idKey = 0;
- m_highlighted = UINT32_MAX;
- if (maxAmount)
+ // If the user previously clicked, and we're done reading data from GPU, look at ID buffer on CPU
+ // Whatever mesh has the most pixels in the ID buffer is the one the user clicked on.
+ if (m_reading == m_currFrame)
{
- for (std::map<uint32_t, uint32_t>::iterator mapIter = ids.begin(); mapIter != ids.end(); mapIter++)
+ m_reading = 0;
+ std::map<uint32_t, uint32_t> ids; // This contains all the IDs found in the buffer
+ uint32_t maxAmount = 0;
+ for (uint8_t *x = m_blitData; x < m_blitData + ID_DIM * ID_DIM * 4;)
{
- if (mapIter->second == maxAmount)
+ uint8_t rr = *x++;
+ uint8_t gg = *x++;
+ uint8_t bb = *x++;
+ uint8_t aa = *x++;
+
+ if (bgfx::RendererType::Direct3D9 == caps->rendererType)
+ {
+ // Comes back as BGRA
+ uint8_t temp = rr;
+ rr = bb;
+ bb = temp;
+ }
+
+ if (0 == (rr|gg|bb) ) // Skip background
{
- idKey = mapIter->first;
- break;
+ continue;
}
+
+ uint32_t hashKey = rr + (gg << 8) + (bb << 16) + (aa << 24);
+ std::map<uint32_t, uint32_t>::iterator mapIter = ids.find(hashKey);
+ uint32_t amount = 1;
+ if (mapIter != ids.end() )
+ {
+ amount = mapIter->second + 1;
+ }
+
+ ids[hashKey] = amount; // Amount of times this ID (color) has been clicked on in buffer
+ maxAmount = maxAmount > amount
+ ? maxAmount
+ : amount
+ ;
}
- for (uint32_t ii = 0; ii < 12; ++ii)
+ uint32_t idKey = 0;
+ m_highlighted = UINT32_MAX;
+ if (maxAmount)
{
- if (m_idsU[ii] == idKey)
+ for (std::map<uint32_t, uint32_t>::iterator mapIter = ids.begin(); mapIter != ids.end(); mapIter++)
{
- m_highlighted = ii;
- break;
+ if (mapIter->second == maxAmount)
+ {
+ idKey = mapIter->first;
+ break;
+ }
+ }
+
+ for (uint32_t ii = 0; ii < 12; ++ii)
+ {
+ if (m_idsU[ii] == idKey)
+ {
+ m_highlighted = ii;
+ break;
+ }
}
}
}
- }
-
- // Start a new readback?
- if (!m_reading
- && m_mouseState.m_buttons[entry::MouseButton::Left])
- {
- // Blit and read
- bgfx::blit(RENDER_PASS_BLIT, m_blitTex, 0, 0, m_pickingRT);
- m_reading = bgfx::readTexture(m_blitTex, m_blitData);
- }
-
- // Draw UI
- imguiBeginFrame(m_mouseState.m_mx
- , m_mouseState.m_my
- , (m_mouseState.m_buttons[entry::MouseButton::Left] ? IMGUI_MBUT_LEFT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Right] ? IMGUI_MBUT_RIGHT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , m_mouseState.m_mz
- , uint16_t(m_width)
- , uint16_t(m_height)
- );
-
- imguiBeginArea("Picking Render Target:", 10, 100, 300, 400);
- imguiImage(m_pickingRT, 1.0f, 1.0f, 1.0f);
- imguiSlider("FOV", m_fov, 1.0f, 60.0f, 1.0f);
- if (imguiCheck("Spin Camera", m_cameraSpin))
- {
- m_cameraSpin = !m_cameraSpin;
+ // Start a new readback?
+ if (!m_reading
+ && m_mouseState.m_buttons[entry::MouseButton::Left])
+ {
+ // Blit and read
+ bgfx::blit(RENDER_PASS_BLIT, m_blitTex, 0, 0, m_pickingRT);
+ m_reading = bgfx::readTexture(m_blitTex, m_blitData);
+ }
}
- imguiEndArea();
imguiEndFrame();
// Advance to next frame. Rendering thread will be kicked to
@@ -389,14 +404,14 @@ class ExamplePicking : public entry::AppI
return false;
}
+ entry::MouseState m_mouseState;
+
uint32_t m_width;
uint32_t m_height;
uint32_t m_debug;
uint32_t m_reset;
int64_t m_timeOffset;
- entry::MouseState m_mouseState;
-
Mesh* m_meshes[12];
float m_meshScale[12];
float m_idsF[12][4];
@@ -422,4 +437,6 @@ class ExamplePicking : public entry::AppI
bool m_cameraSpin;
};
-ENTRY_IMPLEMENT_MAIN(ExamplePicking);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExamplePicking, "30-picking", "Mouse picking via GPU texture readback.");
diff --git a/3rdparty/bgfx/examples/31-rsm/reflectiveshadowmap.cpp b/3rdparty/bgfx/examples/31-rsm/reflectiveshadowmap.cpp
index 00134c7c4c5..3d292ec4454 100644
--- a/3rdparty/bgfx/examples/31-rsm/reflectiveshadowmap.cpp
+++ b/3rdparty/bgfx/examples/31-rsm/reflectiveshadowmap.cpp
@@ -3,12 +3,15 @@
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
-#include "common.h"
-#include "camera.h"
-#include "bgfx_utils.h"
-#include "imgui/imgui.h"
+#include <common.h>
+#include <camera.h>
+#include <bgfx_utils.h>
+#include <imgui/imgui.h>
#include <bx/rng.h>
+namespace
+{
+
/*
* Intro
* =====
@@ -176,15 +179,16 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, float _texelHalf
vertex[2].m_u = maxu;
vertex[2].m_v = maxv;
- bgfx::setVertexBuffer(&vb);
+ bgfx::setVertexBuffer(0, &vb);
}
}
class ExampleRSM : public entry::AppI
{
public:
- ExampleRSM()
- : m_reading(0)
+ ExampleRSM(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ , m_reading(0)
, m_currFrame(UINT32_MAX)
, m_cameraSpin(false)
, m_lightElevation(35.0f)
@@ -195,13 +199,13 @@ public:
{
}
- void init(int _argc, char** _argv) BX_OVERRIDE
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -219,25 +223,25 @@ public:
// Set up screen clears
bgfx::setViewClear(RENDER_PASS_GBUFFER
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0
- , 1.0f
- , 0
- );
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0
+ , 1.0f
+ , 0
+ );
bgfx::setViewClear(RENDER_PASS_LIGHT_BUFFER
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0
- , 1.0f
- , 0
- );
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0
+ , 1.0f
+ , 0
+ );
bgfx::setViewClear(RENDER_PASS_SHADOW_MAP
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0
- , 1.0f
- , 0
- );
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0
+ , 1.0f
+ , 0
+ );
// Create uniforms
u_tint = bgfx::createUniform("u_tint", bgfx::UniformType::Vec4); // Tint for when you click on items
@@ -371,7 +375,7 @@ public:
imguiCreate();
}
- int shutdown() BX_OVERRIDE
+ int shutdown() override
{
for (uint32_t ii = 0; ii < BX_COUNTOF(s_meshPaths); ++ii)
{
@@ -382,39 +386,39 @@ public:
meshUnload(m_lightSphere);
// Cleanup.
- bgfx::destroyProgram(m_gbufferProgram);
- bgfx::destroyProgram(m_lightProgram);
- bgfx::destroyProgram(m_combineProgram);
- bgfx::destroyProgram(m_shadowProgram);
-
- bgfx::destroyUniform(u_tint);
- bgfx::destroyUniform(u_lightDir);
- bgfx::destroyUniform(u_sphereInfo);
- bgfx::destroyUniform(u_invMvp);
- bgfx::destroyUniform(u_invMvpShadow);
- bgfx::destroyUniform(u_lightMtx);
- bgfx::destroyUniform(u_shadowDimsInv);
- bgfx::destroyUniform(u_rsmAmount);
- bgfx::destroyUniform(s_normal);
- bgfx::destroyUniform(s_depth);
- bgfx::destroyUniform(s_light);
- bgfx::destroyUniform(s_color);
- bgfx::destroyUniform(s_shadowMap);
- bgfx::destroyUniform(s_rsm);
-
- bgfx::destroyFrameBuffer(m_gbuffer);
- bgfx::destroyFrameBuffer(m_lightBuffer);
- bgfx::destroyFrameBuffer(m_shadowBuffer);
+ bgfx::destroy(m_gbufferProgram);
+ bgfx::destroy(m_lightProgram);
+ bgfx::destroy(m_combineProgram);
+ bgfx::destroy(m_shadowProgram);
+
+ bgfx::destroy(u_tint);
+ bgfx::destroy(u_lightDir);
+ bgfx::destroy(u_sphereInfo);
+ bgfx::destroy(u_invMvp);
+ bgfx::destroy(u_invMvpShadow);
+ bgfx::destroy(u_lightMtx);
+ bgfx::destroy(u_shadowDimsInv);
+ bgfx::destroy(u_rsmAmount);
+ bgfx::destroy(s_normal);
+ bgfx::destroy(s_depth);
+ bgfx::destroy(s_light);
+ bgfx::destroy(s_color);
+ bgfx::destroy(s_shadowMap);
+ bgfx::destroy(s_rsm);
+
+ bgfx::destroy(m_gbuffer);
+ bgfx::destroy(m_lightBuffer);
+ bgfx::destroy(m_shadowBuffer);
for (uint32_t ii = 0; ii < BX_COUNTOF(m_gbufferTex); ++ii)
{
- bgfx::destroyTexture(m_gbufferTex[ii]);
+ bgfx::destroy(m_gbufferTex[ii]);
}
- bgfx::destroyTexture(m_lightBufferTex);
+ bgfx::destroy(m_lightBufferTex);
for (uint32_t ii = 0; ii < BX_COUNTOF(m_shadowBufferTex); ++ii)
{
- bgfx::destroyTexture(m_shadowBufferTex[ii]);
+ bgfx::destroy(m_shadowBufferTex[ii]);
}
cameraDestroy();
@@ -427,7 +431,7 @@ public:
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
@@ -437,15 +441,8 @@ public:
const int64_t frameTime = now - last;
last = now;
const double freq = double(bx::getHPFrequency());
- const double toMs = 1000.0 / freq;
const float deltaTime = float(frameTime/freq);
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/31-rsm");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Global Illumination with Reflective Shadow Map.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
// Update camera
cameraUpdate(deltaTime*0.15f, m_mouseState);
@@ -477,12 +474,8 @@ public:
bx::mtxLookAt(smView, lightEye, lightAt);
const float area = 10.0f;
- bgfx::RendererType::Enum renderer = bgfx::getRendererType();
- bool flipV = false
- || renderer == bgfx::RendererType::OpenGL
- || renderer == bgfx::RendererType::OpenGLES
- ;
- bx::mtxOrtho(smProj, -area, area, -area, area, -100.0f, 100.0f, 0.0f, flipV);
+ const bgfx::Caps* caps = bgfx::getCaps();
+ bx::mtxOrtho(smProj, -area, area, -area, area, -100.0f, 100.0f, 0.0f, caps->homogeneousDepth);
bgfx::setViewTransform(RENDER_PASS_SHADOW_MAP, smView, smProj);
bgfx::setViewFrameBuffer(RENDER_PASS_SHADOW_MAP, m_shadowBuffer);
bgfx::setViewRect(RENDER_PASS_SHADOW_MAP, 0, 0, SHADOW_MAP_DIM, SHADOW_MAP_DIM);
@@ -509,10 +502,10 @@ public:
bx::mtxInverse(invMvpShadow, lightMtx);
// Draw some lights (these should really be instanced but for this example they aren't...)
- const unsigned MAX_SPHERE = 32;
- for (uint32_t i = 0; i < MAX_SPHERE; i++)
+ const uint32_t kMaxSpheres = 32;
+ for (uint32_t i = 0; i < kMaxSpheres; i++)
{
- for (uint32_t j = 0; j < MAX_SPHERE; j++)
+ for (uint32_t j = 0; j < kMaxSpheres; j++)
{
// These are used in the fragment shader
bgfx::setTexture(0, s_normal, bgfx::getTexture(m_gbuffer, GBUFFER_RT_NORMAL) ); // Normal for lighting calculations
@@ -525,8 +518,8 @@ public:
bgfx::setUniform(u_invMvp, invMvp);
bgfx::setUniform(u_invMvpShadow, invMvpShadow);
float sphereInfo[4];
- sphereInfo[0] = ((float)i/(MAX_SPHERE-1));
- sphereInfo[1] = ((float)j/(MAX_SPHERE-1));
+ sphereInfo[0] = ((float)i/(kMaxSpheres-1));
+ sphereInfo[1] = ((float)j/(kMaxSpheres-1));
sphereInfo[2] = m_vplRadius;
sphereInfo[3] = 0.0; // Unused
bgfx::setUniform(u_sphereInfo, sphereInfo);
@@ -539,12 +532,12 @@ public:
;
meshSubmit(
- m_lightSphere,
- RENDER_PASS_LIGHT_BUFFER,
- m_lightProgram,
- NULL,
- lightDrawState
- );
+ m_lightSphere
+ , RENDER_PASS_LIGHT_BUFFER
+ , m_lightProgram
+ , NULL
+ , lightDrawState
+ );
}
}
@@ -572,13 +565,13 @@ public:
// Set up state for combine pass
// point of this is to avoid doing depth test, which is in the default state
bgfx::setState(0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- );
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ );
// Set up transform matrix for fullscreen quad
float orthoProj[16];
- bx::mtxOrtho(orthoProj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
+ bx::mtxOrtho(orthoProj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth);
bgfx::setViewTransform(RENDER_PASS_COMBINE, NULL, orthoProj);
bgfx::setViewRect(RENDER_PASS_COMBINE, 0, 0, uint16_t(m_width), uint16_t(m_height) );
// Bind vertex buffer and draw quad
@@ -587,23 +580,34 @@ public:
// Draw UI
imguiBeginFrame(m_mouseState.m_mx
- , m_mouseState.m_my
- , (m_mouseState.m_buttons[entry::MouseButton::Left] ? IMGUI_MBUT_LEFT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Right] ? IMGUI_MBUT_RIGHT : 0)
- | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , m_mouseState.m_mz
- , uint16_t(m_width)
- , uint16_t(m_height)
- );
-
- imguiBeginArea("RSM:", 10, 100, 300, 400);
-
- imguiSlider("rsm amount", m_rsmAmount, 0.0f, 0.7f, 0.01f);
- imguiSlider("vpl radius", m_vplRadius, 0.25f, 20.0f, 0.1f);
- imguiSlider("light azimuth", m_lightAzimuth, 0.0f, 360.0f, 0.01f);
- imguiSlider("light elevation", m_lightElevation, 35.0f, 90.0f, 0.01f);
-
- imguiEndArea();
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 3.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+
+ ImGui::SliderFloat("RSM Amount", &m_rsmAmount, 0.0f, 0.7f);
+ ImGui::SliderFloat("VPL Radius", &m_vplRadius, 0.25f, 20.0f);
+ ImGui::SliderFloat("Light Azimuth", &m_lightAzimuth, 0.0f, 360.0f);
+ ImGui::SliderFloat("Light Elevation", &m_lightElevation, 35.0f, 90.0f);
+
+ ImGui::End();
+
imguiEndFrame();
updateLightDir();
@@ -628,16 +632,16 @@ public:
float scale = s_meshScale[model.mesh];
float mtx[16];
bx::mtxSRT(mtx
- , scale
- , scale
- , scale
- , 0.0f
- , 0.0f
- , 0.0f
- , model.position[0]
- , model.position[1]
- , model.position[2]
- );
+ , scale
+ , scale
+ , scale
+ , 0.0f
+ , 0.0f
+ , 0.0f
+ , model.position[0]
+ , model.position[1]
+ , model.position[2]
+ );
// Submit mesh to gbuffer
bgfx::setUniform(u_tint, model.color);
@@ -650,16 +654,16 @@ public:
float mtxScale[16];
float scale = 10.0;
bx::mtxScale(mtxScale
- , scale
- , scale
- , scale
- );
+ , scale
+ , scale
+ , scale
+ );
float mtxTrans[16];
bx::mtxTranslate(mtxTrans
- , 0.0f
- , -10.0f
- , 0.0f
- );
+ , 0.0f
+ , -10.0f
+ , 0.0f
+ );
float mtx[16];
bx::mtxMul(mtx, mtxScale, mtxTrans);
meshSubmit(m_ground, _pass, _program, mtx);
@@ -667,8 +671,8 @@ public:
void updateLightDir()
{
- float el = m_lightElevation * (bx::pi/180.0f);
- float az = m_lightAzimuth * (bx::pi/180.0f);
+ float el = m_lightElevation * (bx::kPi/180.0f);
+ float az = m_lightAzimuth * (bx::kPi/180.0f);
m_lightDir[0] = bx::fcos(el)*bx::fcos(az);
m_lightDir[2] = bx::fcos(el)*bx::fsin(az);
m_lightDir[1] = bx::fsin(el);
@@ -746,4 +750,6 @@ public:
float m_texelHalf;
};
-ENTRY_IMPLEMENT_MAIN(ExampleRSM);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleRSM, "31-rsm", "Global Illumination with Reflective Shadow Map.");
diff --git a/3rdparty/bgfx/examples/32-particles/particles.cpp b/3rdparty/bgfx/examples/32-particles/particles.cpp
index ca38efa608b..c89e23f3259 100644
--- a/3rdparty/bgfx/examples/32-particles/particles.cpp
+++ b/3rdparty/bgfx/examples/32-particles/particles.cpp
@@ -17,6 +17,9 @@
#include <ps/particle_system.h>
+namespace
+{
+
static const char* s_shapeNames[] =
{
"Sphere",
@@ -35,6 +38,8 @@ static const char* s_directionName[] =
static const char* s_easeFuncName[] =
{
"Linear",
+ "Step",
+ "SmoothStep",
"InQuad",
"OutQuad",
"InOutQuad",
@@ -105,7 +110,7 @@ struct Emitter
psUpdateEmitter(m_handle, &m_uniforms);
}
- void imgui(const float* _view, const float* _proj)
+ void imgui()
{
// if (ImGui::CollapsingHeader("General") )
{
@@ -191,15 +196,16 @@ struct Emitter
ImGui::Text("Color:");
ImGui::Combo("RGBA Ease", (int*)&m_uniforms.m_easeRgba, s_easeFuncName, BX_COUNTOF(s_easeFuncName) );
- ImGui::ColorEdit4("RGBA0", &m_uniforms.m_rgba[0], true);
- ImGui::ColorEdit4("RGBA1", &m_uniforms.m_rgba[1], true);
- ImGui::ColorEdit4("RGBA2", &m_uniforms.m_rgba[2], true);
- ImGui::ColorEdit4("RGBA3", &m_uniforms.m_rgba[3], true);
- ImGui::ColorEdit4("RGBA4", &m_uniforms.m_rgba[4], true);
+ ImGui::ColorWheel("RGBA0", &m_uniforms.m_rgba[0], 0.3f);
+ ImGui::ColorWheel("RGBA1", &m_uniforms.m_rgba[1], 0.3f);
+ ImGui::ColorWheel("RGBA2", &m_uniforms.m_rgba[2], 0.3f);
+ ImGui::ColorWheel("RGBA3", &m_uniforms.m_rgba[3], 0.3f);
+ ImGui::ColorWheel("RGBA4", &m_uniforms.m_rgba[4], 0.3f);
}
+ }
- ImGui::End();
-
+ void gizmo(const float* _view, const float* _proj)
+ {
float mtx[16];
bx::mtxSRT(mtx
, 1.0f, 1.0f, 1.0f
@@ -207,6 +213,9 @@ struct Emitter
, m_uniforms.m_position[0], m_uniforms.m_position[1], m_uniforms.m_position[2]
);
+ ImGuiIO& io = ImGui::GetIO();
+ ImGuizmo::SetRect(0, 0, io.DisplaySize.x, io.DisplaySize.y);
+
ImGuizmo::Manipulate(
_view
, _proj
@@ -220,15 +229,21 @@ struct Emitter
}
};
-class Particles : public entry::AppI
+class ExampleParticles : public entry::AppI
{
- void init(int _argc, char** _argv) BX_OVERRIDE
+public:
+ ExampleParticles(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
Args args(_argc, _argv);
- m_width = 1280;
- m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
@@ -249,7 +264,7 @@ class Particles : public entry::AppI
psInit();
- bgfx::ImageContainer* image = imageLoad(
+ bimg::ImageContainer* image = imageLoad(
"textures/particle.ktx"
, bgfx::TextureFormat::BGRA8
);
@@ -260,12 +275,13 @@ class Particles : public entry::AppI
, image->m_data
);
- bgfx::imageFree(image);
+ bimg::imageFree(image);
for (uint32_t ii = 0; ii < BX_COUNTOF(m_emitter); ++ii)
{
m_emitter[ii].create();
m_emitter[ii].m_uniforms.m_handle = sprite;
+ m_emitter[ii].update();
}
imguiCreate();
@@ -279,7 +295,7 @@ class Particles : public entry::AppI
m_timeOffset = bx::getHPCounter();
}
- virtual int shutdown() BX_OVERRIDE
+ virtual int shutdown() override
{
for (uint32_t ii = 0; ii < BX_COUNTOF(m_emitter); ++ii)
{
@@ -300,7 +316,7 @@ class Particles : public entry::AppI
return 0;
}
- bool update() BX_OVERRIDE
+ bool update() override
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
@@ -314,16 +330,8 @@ class Particles : public entry::AppI
const int64_t frameTime = now - last;
last = now;
const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
const float deltaTime = float(frameTime/freq);
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/32-particles");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Particles.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- // Update camera.George RR Martin
cameraUpdate(deltaTime, m_mouseState);
float view[16];
@@ -360,9 +368,15 @@ class Particles : public entry::AppI
, uint16_t(m_height)
);
- ImGui::Begin("Properties"
+ showExampleDialog(this);
+
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 4.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
, NULL
- , ImVec2(400.0f, 600.0f)
+ , ImVec2(m_width / 4.0f, m_height - 20.0f)
, ImGuiWindowFlags_AlwaysAutoResize
);
@@ -388,7 +402,11 @@ class Particles : public entry::AppI
ImGui::RadioButton(name, &currentEmitter, ii);
}
- m_emitter[currentEmitter].imgui(view, proj);
+ m_emitter[currentEmitter].imgui();
+
+ ImGui::End();
+
+ m_emitter[currentEmitter].gizmo(view, proj);
imguiEndFrame();
@@ -437,4 +455,6 @@ class Particles : public entry::AppI
Emitter m_emitter[4];
};
-ENTRY_IMPLEMENT_MAIN(Particles);
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleParticles, "32-particles", "Particles.");
diff --git a/3rdparty/bgfx/examples/33-pom/fs_pom.sc b/3rdparty/bgfx/examples/33-pom/fs_pom.sc
new file mode 100644
index 00000000000..4c1cb6b05a2
--- /dev/null
+++ b/3rdparty/bgfx/examples/33-pom/fs_pom.sc
@@ -0,0 +1,97 @@
+$input v_texcoord0, v_ts_light_pos, v_ts_view_pos, v_ts_frag_pos
+
+#include "../common/common.sh"
+
+SAMPLER2D(s_texColor, 0);
+SAMPLER2D(s_texNormal, 1);
+SAMPLER2D(s_texDepth, 2);
+
+uniform vec4 u_pomParam;
+
+#define u_shading_type u_pomParam.x
+#define u_show_diffuse_texture u_pomParam.y
+#define u_parallax_scale u_pomParam.z
+#define u_num_steps u_pomParam.w
+
+vec2 parallax_uv(vec2 uv, vec3 view_dir)
+{
+ float depth_scale = float(u_parallax_scale) / 1000.0;
+ if (u_shading_type == 2.0)
+ {
+ // Parallax mapping
+ float depth = texture2D(s_texDepth, uv).r;
+ vec2 p = view_dir.xy * (depth * depth_scale) / view_dir.z;
+ return uv - p;
+ }
+ else
+ {
+ float layer_depth = 1.0 / float(u_num_steps);
+ float cur_layer_depth = 0.0;
+ vec2 delta_uv = view_dir.xy * depth_scale / (view_dir.z * u_num_steps);
+ vec2 cur_uv = uv;
+
+ float depth_from_tex = texture2D(s_texDepth, cur_uv).r;
+
+ for (int i = 0; i < 32; i++)
+ {
+ cur_layer_depth += layer_depth;
+ cur_uv -= delta_uv;
+ depth_from_tex = texture2D(s_texDepth, cur_uv).r;
+ if (depth_from_tex < cur_layer_depth)
+ {
+ break;
+ }
+ }
+
+ if (u_shading_type == 3.0)
+ {
+ // Steep parallax mapping
+ return cur_uv;
+ }
+ else
+ {
+ // Parallax occlusion mapping
+ vec2 prev_uv = cur_uv + delta_uv;
+ float next = depth_from_tex - cur_layer_depth;
+ float prev = texture2D(s_texDepth, prev_uv).r - cur_layer_depth + layer_depth;
+ float weight = next / (next - prev);
+ return mix(cur_uv, prev_uv, weight);
+ }
+ }
+}
+
+void main()
+{
+ vec3 light_dir = normalize(v_ts_light_pos - v_ts_frag_pos);
+ vec3 view_dir = normalize(v_ts_view_pos - v_ts_frag_pos);
+
+ // Only perturb the texture coordinates if a parallax technique is selected
+ vec2 uv = (u_shading_type < 2.0) ? v_texcoord0 : parallax_uv(v_texcoord0, view_dir);
+
+ vec3 albedo;
+ if (u_show_diffuse_texture == 0.0)
+ {
+ albedo = vec3(1.0, 1.0, 1.0);
+ }
+ else
+ {
+ albedo = texture2D(s_texColor, uv).rgb;
+ }
+
+ vec3 ambient = 0.3 * albedo;
+
+ vec3 normal;
+
+ if (u_shading_type == 0.0)
+ {
+ normal = vec3(0.0, 0.0, 1.0);
+ }
+ else
+ {
+ normal.xy = texture2DBc5(s_texNormal, uv) * 2.0 - 1.0;
+ normal.z = sqrt(1.0 - dot(normal.xy, normal.xy) );
+ }
+
+ float diffuse = max(dot(light_dir, normal), 0.0);
+ gl_FragColor = vec4(diffuse * albedo + ambient, 1.0);
+}
diff --git a/3rdparty/bgfx/examples/33-pom/makefile b/3rdparty/bgfx/examples/33-pom/makefile
new file mode 100644
index 00000000000..94d3aae708a
--- /dev/null
+++ b/3rdparty/bgfx/examples/33-pom/makefile
@@ -0,0 +1,10 @@
+#
+# Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+#
+
+BGFX_DIR=../..
+RUNTIME_DIR=$(BGFX_DIR)/examples/runtime
+BUILD_DIR=../../.build
+
+include $(BGFX_DIR)/scripts/shader.mk
diff --git a/3rdparty/bgfx/examples/33-pom/pom.cpp b/3rdparty/bgfx/examples/33-pom/pom.cpp
new file mode 100644
index 00000000000..363a5974534
--- /dev/null
+++ b/3rdparty/bgfx/examples/33-pom/pom.cpp
@@ -0,0 +1,394 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "common.h"
+#include "bgfx_utils.h"
+
+#include <imgui/imgui.h>
+
+namespace
+{
+
+struct PosTangentBitangentTexcoordVertex
+{
+ float m_x;
+ float m_y;
+ float m_z;
+ uint32_t m_tangent;
+ uint32_t m_bitangent;
+ float m_u;
+ float m_v;
+
+ static void init()
+ {
+ ms_decl
+ .begin()
+ .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
+ .add(bgfx::Attrib::Tangent, 4, bgfx::AttribType::Uint8, true, true)
+ .add(bgfx::Attrib::Bitangent, 4, bgfx::AttribType::Uint8, true, true)
+ .add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float, true, true)
+ .end();
+ }
+
+ static bgfx::VertexDecl ms_decl;
+};
+
+bgfx::VertexDecl PosTangentBitangentTexcoordVertex::ms_decl;
+
+uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w)
+{
+ union
+ {
+ uint32_t ui32;
+ uint8_t arr[4];
+ } un;
+
+ un.arr[0] = _x;
+ un.arr[1] = _y;
+ un.arr[2] = _z;
+ un.arr[3] = _w;
+
+ return un.ui32;
+}
+
+uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f)
+{
+ const uint8_t xx = uint8_t(_x*127.0f + 128.0f);
+ const uint8_t yy = uint8_t(_y*127.0f + 128.0f);
+ const uint8_t zz = uint8_t(_z*127.0f + 128.0f);
+ const uint8_t ww = uint8_t(_w*127.0f + 128.0f);
+ return packUint32(xx, yy, zz, ww);
+}
+
+static PosTangentBitangentTexcoordVertex s_cubeVertices[24] =
+{
+ {-1, -1, 1, packF4u(-1, 0, 0), packF4u( 0, -1, 0), 1, 1 }, // Back
+ { 1, 1, 1, packF4u(-1, 0, 0), packF4u( 0, -1, 0), 0, 0 },
+ {-1, 1, 1, packF4u(-1, 0, 0), packF4u( 0, -1, 0), 1, 0 },
+ { 1, -1, 1, packF4u(-1, 0, 0), packF4u( 0, -1, 0), 0, 1 },
+ {-1, -1, -1, packF4u( 1, 0, 0), packF4u( 0, -1, 0), 0, 1 }, // Front
+ { 1, 1, -1, packF4u( 1, 0, 0), packF4u( 0, -1, 0), 1, 0 },
+ {-1, 1, -1, packF4u( 1, 0, 0), packF4u( 0, -1, 0), 0, 0 },
+ { 1, -1, -1, packF4u( 1, 0, 0), packF4u( 0, -1, 0), 1, 1 },
+ { 1, -1, -1, packF4u( 0, 0, 1), packF4u( 0, -1, 0), 0, 1 }, // Right
+ { 1, 1, 1, packF4u( 0, 0, 1), packF4u( 0, -1, 0), 1, 0 },
+ { 1, -1, 1, packF4u( 0, 0, 1), packF4u( 0, -1, 0), 1, 1 },
+ { 1, 1, -1, packF4u( 0, 0, 1), packF4u( 0, -1, 0), 0, 0 },
+ {-1, -1, -1, packF4u( 0, 0, -1), packF4u( 0, -1, 0), 1, 1 }, // Left
+ {-1, 1, 1, packF4u( 0, 0, -1), packF4u( 0, -1, 0), 0, 0 },
+ {-1, -1, 1, packF4u( 0, 0, -1), packF4u( 0, -1, 0), 0, 1 },
+ {-1, 1, -1, packF4u( 0, 0, -1), packF4u( 0, -1, 0), 1, 0 },
+ {-1, 1, -1, packF4u( 1, 0, 0), packF4u( 0, 0, -1), 0, 1 }, // Top
+ { 1, 1, 1, packF4u( 1, 0, 0), packF4u( 0, 0, -1), 1, 0 },
+ {-1, 1, 1, packF4u( 1, 0, 0), packF4u( 0, 0, -1), 0, 0 },
+ { 1, 1, -1, packF4u( 1, 0, 0), packF4u( 0, 0, -1), 1, 1 },
+ {-1, -1, -1, packF4u( 1, 0, 0), packF4u( 0, 0, 1), 0, 0 }, // Bottom
+ { 1, -1, 1, packF4u( 1, 0, 0), packF4u( 0, 0, 1), 1, 1 },
+ {-1, -1, 1, packF4u( 1, 0, 0), packF4u( 0, 0, 1), 0, 1 },
+ { 1, -1, -1, packF4u( 1, 0, 0), packF4u( 0, 0, 1), 1, 0 },
+};
+
+static const uint16_t s_cubeIndices[36] =
+{
+ 0 , 1 , 2 ,
+ 0 , 3 , 1 ,
+ 4 , 6 , 5 ,
+ 4 , 5 , 7 ,
+
+ 8 , 9 , 10,
+ 8 , 11, 9 ,
+ 12, 14, 13,
+ 12, 13, 15,
+
+ 16, 18, 17,
+ 16, 17, 19,
+ 20, 21, 22,
+ 20, 23, 21,
+};
+
+class ExamplePom : public entry::AppI
+{
+public:
+ ExamplePom(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
+
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
+
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
+
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
+
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
+
+ // Create vertex stream declaration.
+ PosTangentBitangentTexcoordVertex::init();
+
+ // Create static vertex buffer.
+ m_vbh = bgfx::createVertexBuffer(bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) ),
+ PosTangentBitangentTexcoordVertex::ms_decl);
+
+ // Create static index buffer.
+ m_ibh = bgfx::createIndexBuffer(bgfx::makeRef(s_cubeIndices, sizeof(s_cubeIndices) ) );
+
+ // Create texture sampler uniforms.
+ s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
+ s_texNormal = bgfx::createUniform("s_texNormal", bgfx::UniformType::Int1);
+ s_texDepth = bgfx::createUniform("s_texDepth", bgfx::UniformType::Int1);
+
+
+ u_light_pos = bgfx::createUniform("u_light_pos", bgfx::UniformType::Vec4);
+ u_norm_mtx = bgfx::createUniform("u_norm_mtx", bgfx::UniformType::Mat4);
+ u_pomParam = bgfx::createUniform("u_pomParam", bgfx::UniformType::Vec4);
+
+ // Create program from shaders.
+ m_program = loadProgram("vs_pom", "fs_pom");
+
+ // Load diffuse texture.
+ m_textureColor = loadTexture("textures/parallax-d.ktx");
+
+ // Load normal texture.
+ m_textureNormal = loadTexture("textures/parallax-n.ktx");
+
+ // Load depth texture.
+ m_textureDepth = loadTexture("textures/parallax-h.ktx");
+
+ imguiCreate();
+
+ m_timeOffset = bx::getHPCounter();
+ m_shading_type = 4;
+ m_show_diffuse_texture = true;
+ m_parallax_scale = 50;
+ m_num_steps = 16;
+ }
+
+ virtual int shutdown() override
+ {
+ // Cleanup.
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_program);
+ bgfx::destroy(m_textureColor);
+ bgfx::destroy(m_textureNormal);
+ bgfx::destroy(m_textureDepth);
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(s_texNormal);
+ bgfx::destroy(s_texDepth);
+ bgfx::destroy(u_light_pos);
+ bgfx::destroy(u_norm_mtx);
+ bgfx::destroy(u_pomParam);
+
+ imguiDestroy();
+
+ // Shutdown bgfx.
+ bgfx::shutdown();
+
+ return 0;
+ }
+
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
+ {
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ int64_t now = bx::getHPCounter();
+ const double freq = double(bx::getHPFrequency() );
+
+ float time = (float)( (now-m_timeOffset)/freq);
+
+ float at[3] = { 0.0f, 0.0f, 1.0f };
+ float eye[3] = { 0.0f, 0.0f, 0.0f };
+
+ // Set view and projection matrix for view 0.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float view[16];
+ bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye);
+ bgfx::setViewTransform(0, view, hmd->eye[0].projection, BGFX_VIEW_STEREO, hmd->eye[1].projection);
+
+ // Set view 0 default viewport.
+ //
+ // Use HMD's width/height since HMD's internal frame buffer size
+ // might be much larger than window size.
+ bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ }
+ else
+ {
+ float view[16];
+ bx::mtxLookAt(view, eye, at);
+
+ float proj[16];
+ bx::mtxProj(proj, 60.0f, float(m_width) / float(m_height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ }
+
+ imguiBeginFrame(
+ m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin("Settings"
+ , NULL
+ , ImVec2(m_width / 5.0f, m_height / 2.0f)
+ , ImGuiWindowFlags_AlwaysAutoResize
+ );
+
+ ImGui::RadioButton("No bump mapping", &m_shading_type, 0);
+ ImGui::RadioButton("Normal mapping", &m_shading_type, 1);
+ ImGui::RadioButton("Parallax mapping", &m_shading_type, 2);
+ ImGui::RadioButton("Steep parallax mapping", &m_shading_type, 3);
+ ImGui::RadioButton("Parallax occlusion mapping", &m_shading_type, 4);
+
+ ImGui::Separator();
+
+ ImGui::Checkbox("Show diffuse texture", &m_show_diffuse_texture);
+
+ if (m_shading_type > 1)
+ {
+ ImGui::Separator();
+
+ float multiplier = 1000.0f;
+ float x = (float)m_parallax_scale / multiplier;
+ ImGui::SliderFloat("Parallax scale", &x, 0.0f, 0.1f);
+ m_parallax_scale = (int32_t)(x * multiplier);
+ }
+
+ if (m_shading_type > 2)
+ {
+ ImGui::Separator();
+
+ ImGui::SliderInt("Number of steps", &m_num_steps, 1, 32);
+ }
+
+ ImGui::End();
+
+ imguiEndFrame();
+
+ float lightPos[4] = { 1.0f, 2.0f, 0.0f, 0.0f };
+ bgfx::setUniform(u_light_pos, lightPos);
+
+ float a[16];
+ float b[16];
+ float c[16];
+ float d[16];
+ float mtx[16];
+ bx::mtxRotateY(a, time * 0.4f);
+ bx::mtxRotateX(b, 0.4f);
+ bx::mtxMul(c, a, b);
+ bx::mtxTranslate(d, 0.0f, 0.0f, 4.0f);
+ bx::mtxMul(mtx, c, d);
+
+ // Set transform for draw call.
+ bgfx::setTransform(mtx);
+
+ float pomParam[4] = { float(m_shading_type), float(m_show_diffuse_texture), float(m_parallax_scale), float(m_num_steps) };
+ bgfx::setUniform(u_pomParam, pomParam);
+
+ // Set normal matrix uniform
+ float inv[16];
+ float transpose[16];
+ bx::mtxInverse(inv, mtx);
+ bx::mtxTranspose(transpose, inv);
+ bgfx::setUniform(u_norm_mtx, transpose);
+
+ // Set vertex and index buffer.
+ bgfx::setVertexBuffer(0, m_vbh);
+ bgfx::setIndexBuffer(m_ibh);
+
+ // Bind textures.
+ bgfx::setTexture(0, s_texColor, m_textureColor);
+ bgfx::setTexture(1, s_texNormal, m_textureNormal);
+ bgfx::setTexture(2, s_texDepth, m_textureDepth);
+
+ // Set render states.
+ bgfx::setState(0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_WRITE
+ | BGFX_STATE_DEPTH_TEST_LESS
+ | BGFX_STATE_MSAA
+ );
+
+ // Submit primitive for rendering to view 0.
+ bgfx::submit(0, m_program);
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ bgfx::VertexBufferHandle m_vbh;
+ bgfx::IndexBufferHandle m_ibh;
+ bgfx::UniformHandle s_texColor;
+ bgfx::UniformHandle s_texNormal;
+ bgfx::UniformHandle s_texDepth;
+ bgfx::UniformHandle u_light_pos;
+ bgfx::UniformHandle u_norm_mtx;
+ bgfx::UniformHandle u_pomParam;
+ bgfx::ProgramHandle m_program;
+ bgfx::TextureHandle m_textureColor;
+ bgfx::TextureHandle m_textureNormal;
+ bgfx::TextureHandle m_textureDepth;
+
+ entry::MouseState m_mouseState;
+
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+ int64_t m_timeOffset;
+
+ int32_t m_shading_type;
+ bool m_show_diffuse_texture;
+ int32_t m_parallax_scale;
+ int32_t m_num_steps;
+};
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExamplePom, "33-pom", "Parallax mapping.");
diff --git a/3rdparty/bgfx/examples/33-pom/screenshot.png b/3rdparty/bgfx/examples/33-pom/screenshot.png
new file mode 100644
index 00000000000..89e44925af2
--- /dev/null
+++ b/3rdparty/bgfx/examples/33-pom/screenshot.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/33-pom/varying.def.sc b/3rdparty/bgfx/examples/33-pom/varying.def.sc
new file mode 100644
index 00000000000..2b42f9cc888
--- /dev/null
+++ b/3rdparty/bgfx/examples/33-pom/varying.def.sc
@@ -0,0 +1,13 @@
+vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0);
+vec3 v_ts_light_pos : TEXCOORD1 = vec3(0.0, 0.0, 0.0);
+vec3 v_ts_view_pos : TEXCOORD2 = vec3(0.0, 0.0, 0.0);
+vec3 v_ts_frag_pos : TEXCOORD3 = vec3(0.0, 0.0, 0.0);
+
+vec3 a_position : POSITION;
+vec3 a_tangent : TANGENT;
+vec3 a_bitangent : BITANGENT;
+vec2 a_texcoord0 : TEXCOORD0;
+vec4 i_data0 : TEXCOORD7;
+vec4 i_data1 : TEXCOORD6;
+vec4 i_data2 : TEXCOORD5;
+vec4 i_data3 : TEXCOORD4;
diff --git a/3rdparty/bgfx/examples/33-pom/vs_pom.sc b/3rdparty/bgfx/examples/33-pom/vs_pom.sc
new file mode 100644
index 00000000000..225c4cb0fb9
--- /dev/null
+++ b/3rdparty/bgfx/examples/33-pom/vs_pom.sc
@@ -0,0 +1,29 @@
+$input a_position, a_tangent, a_bitangent, a_texcoord0
+$output v_texcoord0, v_ts_light_pos, v_ts_view_pos, v_ts_frag_pos
+
+uniform mat4 u_norm_mtx;
+uniform vec4 u_light_pos;
+
+#include "../common/common.sh"
+
+void main()
+{
+ vec3 wpos = mul(u_model[0], vec4(a_position, 1.0) ).xyz;
+ gl_Position = mul(u_viewProj, vec4(wpos, 1.0) );
+
+ vec3 tangent = a_tangent * 2.0 - 1.0;
+ vec3 bitangent = a_bitangent * 2.0 - 1.0;
+ vec3 normal = cross(tangent, bitangent);
+
+ vec3 t = normalize(mul(u_norm_mtx, vec4(tangent, 0.0) ).xyz);
+ vec3 b = normalize(mul(u_norm_mtx, vec4(bitangent, 0.0) ).xyz);
+ vec3 n = normalize(mul(u_norm_mtx, vec4(normal, 0.0) ).xyz);
+ mat3 tbn = mat3(t, b, n);
+
+ v_ts_light_pos = instMul(u_light_pos.xyz, tbn);
+ // Our camera is always at the origin
+ v_ts_view_pos = instMul(vec3_splat(0.0), tbn);
+ v_ts_frag_pos = instMul(wpos, tbn);
+
+ v_texcoord0 = a_texcoord0;
+}
diff --git a/3rdparty/bgfx/examples/34-mvs/mvs.cpp b/3rdparty/bgfx/examples/34-mvs/mvs.cpp
new file mode 100644
index 00000000000..561923396ef
--- /dev/null
+++ b/3rdparty/bgfx/examples/34-mvs/mvs.cpp
@@ -0,0 +1,293 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "common.h"
+#include "bgfx_utils.h"
+#include "imgui/imgui.h"
+
+namespace
+{
+
+struct PosVertex
+{
+ float m_x;
+ float m_y;
+ float m_z;
+
+ static void init()
+ {
+ ms_decl
+ .begin()
+ .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
+ .end();
+ };
+
+ static bgfx::VertexDecl ms_decl;
+};
+
+bgfx::VertexDecl PosVertex::ms_decl;
+
+struct ColorVertex
+{
+ uint32_t m_abgr;
+
+ static void init()
+ {
+ ms_decl
+ .begin()
+ .add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
+ .end();
+ };
+
+ static bgfx::VertexDecl ms_decl;
+};
+
+bgfx::VertexDecl ColorVertex::ms_decl;
+
+static PosVertex s_cubePosVertices[] =
+{
+ {-1.0f, 1.0f, 1.0f },
+ { 1.0f, 1.0f, 1.0f },
+ {-1.0f, -1.0f, 1.0f },
+ { 1.0f, -1.0f, 1.0f },
+ {-1.0f, 1.0f, -1.0f },
+ { 1.0f, 1.0f, -1.0f },
+ {-1.0f, -1.0f, -1.0f },
+ { 1.0f, -1.0f, -1.0f },
+};
+
+static ColorVertex s_cubeColorVertices[] =
+{
+ { 0xff000000 },
+ { 0xff0000ff },
+ { 0xff00ff00 },
+ { 0xff00ffff },
+ { 0xffff0000 },
+ { 0xffff00ff },
+ { 0xffffff00 },
+ { 0xffffffff },
+};
+
+static const uint16_t s_cubeTriList[] =
+{
+ 0, 1, 2, // 0
+ 1, 3, 2,
+ 4, 6, 5, // 2
+ 5, 6, 7,
+ 0, 2, 4, // 4
+ 4, 2, 6,
+ 1, 5, 3, // 6
+ 5, 7, 3,
+ 0, 4, 1, // 8
+ 4, 5, 1,
+ 2, 3, 6, // 10
+ 6, 3, 7,
+};
+
+static const uint16_t s_cubeTriStrip[] =
+{
+ 0, 1, 2,
+ 3,
+ 7,
+ 1,
+ 5,
+ 0,
+ 4,
+ 2,
+ 6,
+ 7,
+ 4,
+ 5,
+};
+
+class ExampleMvs : public entry::AppI
+{
+public:
+ ExampleMvs(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ BX_UNUSED(s_cubeTriList, s_cubeTriStrip);
+
+ Args args(_argc, _argv);
+
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
+
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
+
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
+
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
+
+ // Create vertex stream declaration.
+ PosVertex::init();
+ ColorVertex::init();
+
+ // Create static vertex buffer.
+ m_vbh[0] = bgfx::createVertexBuffer(
+ // Static data can be passed with bgfx::makeRef
+ bgfx::makeRef(s_cubePosVertices, sizeof(s_cubePosVertices) )
+ , PosVertex::ms_decl
+ );
+
+ m_vbh[1] = bgfx::createVertexBuffer(
+ // Static data can be passed with bgfx::makeRef
+ bgfx::makeRef(s_cubeColorVertices, sizeof(s_cubeColorVertices) )
+ , ColorVertex::ms_decl
+ );
+
+ // Create static index buffer.
+ m_ibh = bgfx::createIndexBuffer(
+ // Static data can be passed with bgfx::makeRef
+ bgfx::makeRef(s_cubeTriStrip, sizeof(s_cubeTriStrip) )
+ );
+
+ // Create program from shaders.
+ m_program = loadProgram("vs_cubes", "fs_cubes");
+
+ m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
+ }
+
+ virtual int shutdown() override
+ {
+ imguiDestroy();
+
+ // Cleanup.
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh[0]);
+ bgfx::destroy(m_vbh[1]);
+ bgfx::destroy(m_program);
+
+ // Shutdown bgfx.
+ bgfx::shutdown();
+
+ return 0;
+ }
+
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
+ {
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
+ float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ) );
+
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ float eye[3] = { 0.0f, 0.0f, -35.0f };
+
+ // Set view and projection matrix for view 0.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float view[16];
+ bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye);
+ bgfx::setViewTransform(0, view, hmd->eye[0].projection, BGFX_VIEW_STEREO, hmd->eye[1].projection);
+
+ // Set view 0 default viewport.
+ //
+ // Use HMD's width/height since HMD's internal frame buffer size
+ // might be much larger than window size.
+ bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ }
+ else
+ {
+ float view[16];
+ bx::mtxLookAt(view, eye, at);
+
+ float proj[16];
+ bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ }
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ // Submit 11x11 cubes.
+ for (uint32_t yy = 0; yy < 11; ++yy)
+ {
+ for (uint32_t xx = 0; xx < 11; ++xx)
+ {
+ float mtx[16];
+ bx::mtxRotateXY(mtx, time + xx*0.21f, time + yy*0.37f);
+ mtx[12] = -15.0f + float(xx)*3.0f;
+ mtx[13] = -15.0f + float(yy)*3.0f;
+ mtx[14] = 0.0f;
+
+ // Set model matrix for rendering.
+ bgfx::setTransform(mtx);
+
+ // Set vertex and index buffer.
+ bgfx::setVertexBuffer(0, m_vbh[0]);
+ bgfx::setVertexBuffer(1, m_vbh[1]);
+ bgfx::setIndexBuffer(m_ibh);
+
+ // Set render states.
+ bgfx::setState(0
+ | BGFX_STATE_DEFAULT
+ | BGFX_STATE_PT_TRISTRIP
+ );
+
+ // Submit primitive for rendering to view 0.
+ bgfx::submit(0, m_program);
+ }
+ }
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ entry::MouseState m_mouseState;
+
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+ bgfx::VertexBufferHandle m_vbh[2];
+ bgfx::IndexBufferHandle m_ibh;
+ bgfx::ProgramHandle m_program;
+ int64_t m_timeOffset;
+};
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleMvs, "34-mvs", "Multiple vertex streams.");
diff --git a/3rdparty/bgfx/examples/34-mvs/screenshot.png b/3rdparty/bgfx/examples/34-mvs/screenshot.png
new file mode 100644
index 00000000000..0e80d2cb02b
--- /dev/null
+++ b/3rdparty/bgfx/examples/34-mvs/screenshot.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/35-dynamic/dynamic.cpp b/3rdparty/bgfx/examples/35-dynamic/dynamic.cpp
new file mode 100644
index 00000000000..1823721aafc
--- /dev/null
+++ b/3rdparty/bgfx/examples/35-dynamic/dynamic.cpp
@@ -0,0 +1,294 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "common.h"
+#include "bgfx_utils.h"
+#include "imgui/imgui.h"
+
+#include <bx/rng.h>
+
+namespace
+{
+
+const uint32_t kDimWidth = 11;
+const uint32_t kDimHeight = 11;
+
+struct PosColorVertex
+{
+ float m_x;
+ float m_y;
+ float m_z;
+ uint32_t m_abgr;
+
+ static void init()
+ {
+ ms_decl
+ .begin()
+ .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
+ .add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
+ .end();
+ };
+
+ static bgfx::VertexDecl ms_decl;
+};
+
+bgfx::VertexDecl PosColorVertex::ms_decl;
+
+static PosColorVertex s_cubeVertices[] =
+{
+ {-1.0f, 1.0f, 1.0f, 0xff000000 },
+ { 1.0f, 1.0f, 1.0f, 0xff0000ff },
+ {-1.0f, -1.0f, 1.0f, 0xff00ff00 },
+ { 1.0f, -1.0f, 1.0f, 0xff00ffff },
+ {-1.0f, 1.0f, -1.0f, 0xffff0000 },
+ { 1.0f, 1.0f, -1.0f, 0xffff00ff },
+ {-1.0f, -1.0f, -1.0f, 0xffffff00 },
+ { 1.0f, -1.0f, -1.0f, 0xffffffff },
+};
+
+static const uint16_t s_cubeTriList[] =
+{
+ 0, 1, 2, // 0
+ 1, 3, 2,
+ 4, 6, 5, // 2
+ 5, 6, 7,
+ 0, 2, 4, // 4
+ 4, 2, 6,
+ 1, 5, 3, // 6
+ 5, 7, 3,
+ 0, 4, 1, // 8
+ 4, 5, 1,
+ 2, 3, 6, // 10
+ 6, 3, 7,
+};
+
+static const uint16_t s_cubeTriStrip[] =
+{
+ 0, 1, 2,
+ 3,
+ 7,
+ 1,
+ 5,
+ 0,
+ 4,
+ 2,
+ 6,
+ 7,
+ 4,
+ 5,
+};
+
+class ExampleDynamic : public entry::AppI
+{
+public:
+ ExampleDynamic(const char* _name, const char* _description)
+ : entry::AppI(_name, _description)
+ {
+ }
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ BX_UNUSED(s_cubeTriList, s_cubeTriStrip);
+
+ Args args(_argc, _argv);
+
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
+
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
+
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
+
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
+
+ // Create vertex stream declaration.
+ PosColorVertex::init();
+
+ // Create static vertex buffer.
+ for (uint32_t yy = 0; yy < kDimHeight; ++yy)
+ {
+ for (uint32_t xx = 0; xx < kDimWidth; ++xx)
+ {
+ m_vbh[yy*kDimWidth+xx] = bgfx::createDynamicVertexBuffer(
+ // Static data can be passed with bgfx::makeRef
+ bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) )
+ , PosColorVertex::ms_decl
+ );
+ }
+ }
+
+ // Create static index buffer.
+ m_ibh = bgfx::createDynamicIndexBuffer(
+ // Static data can be passed with bgfx::makeRef
+ bgfx::makeRef(s_cubeTriStrip, sizeof(s_cubeTriStrip) )
+ );
+
+ // Create program from shaders.
+ m_program = loadProgram("vs_cubes", "fs_cubes");
+
+ m_timeOffset = bx::getHPCounter();
+
+ imguiCreate();
+ }
+
+ virtual int shutdown() override
+ {
+ imguiDestroy();
+
+ // Cleanup.
+ bgfx::destroy(m_ibh);
+ for (uint32_t yy = 0; yy < kDimHeight; ++yy)
+ {
+ for (uint32_t xx = 0; xx < kDimWidth; ++xx)
+ {
+ bgfx::destroy(m_vbh[yy*kDimWidth+xx]);
+ }
+ }
+
+ bgfx::destroy(m_program);
+
+ // Shutdown bgfx.
+ bgfx::shutdown();
+
+ return 0;
+ }
+
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
+ {
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ imguiEndFrame();
+
+ float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ) );
+
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ float eye[3] = { 0.0f, 0.0f, -35.0f };
+
+ // Set view and projection matrix for view 0.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float view[16];
+ bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye);
+ bgfx::setViewTransform(0, view, hmd->eye[0].projection, BGFX_VIEW_STEREO, hmd->eye[1].projection);
+
+ // Set view 0 default viewport.
+ //
+ // Use HMD's width/height since HMD's internal frame buffer size
+ // might be much larger than window size.
+ bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ }
+ else
+ {
+ float view[16];
+ bx::mtxLookAt(view, eye, at);
+
+ float proj[16];
+ bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+ }
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ {
+ float angle = bx::frnd(&m_mwc);
+ float mtx[16];
+ bx::mtxRotateZ(mtx, angle);
+
+ const bgfx::Memory* mem = bgfx::copy(s_cubeVertices, sizeof(s_cubeVertices) );
+ PosColorVertex* vertex = (PosColorVertex*)mem->data;
+ const uint32_t abgr = m_mwc.gen();
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_cubeVertices); ++ii)
+ {
+ bx::vec3MulMtx(&vertex[ii].m_x, &s_cubeVertices[ii].m_x, mtx);
+ vertex[ii].m_abgr = abgr;
+ }
+
+ uint32_t idx = m_mwc.gen() % (kDimWidth*kDimHeight);
+ bgfx::updateDynamicVertexBuffer(m_vbh[idx], 0, mem);
+ }
+
+ // Submit 11x11 cubes.
+ for (uint32_t yy = 0; yy < kDimHeight; ++yy)
+ {
+ for (uint32_t xx = 0; xx < kDimWidth; ++xx)
+ {
+ float mtx[16];
+ bx::mtxRotateXY(mtx, time + xx*0.21f, time + yy*0.37f);
+ mtx[12] = -15.0f + float(xx)*3.0f;
+ mtx[13] = -15.0f + float(yy)*3.0f;
+ mtx[14] = 0.0f;
+
+ // Set model matrix for rendering.
+ bgfx::setTransform(mtx);
+
+ // Set vertex and index buffer.
+ bgfx::setVertexBuffer(0, m_vbh[yy*kDimWidth+xx]);
+ bgfx::setIndexBuffer(m_ibh);
+
+ // Set render states.
+ bgfx::setState(0
+ | BGFX_STATE_DEFAULT
+ | BGFX_STATE_PT_TRISTRIP
+ );
+
+ // Submit primitive for rendering to view 0.
+ bgfx::submit(0, m_program);
+ }
+ }
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ entry::MouseState m_mouseState;
+
+ bx::RngMwc m_mwc;
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+ bgfx::DynamicVertexBufferHandle m_vbh[kDimWidth*kDimHeight];
+ bgfx::DynamicIndexBufferHandle m_ibh;
+ bgfx::ProgramHandle m_program;
+ int64_t m_timeOffset;
+};
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleDynamic, "35-dynamic", "Dynamic buffers update.");
diff --git a/3rdparty/bgfx/examples/35-dynamic/screenshot.png b/3rdparty/bgfx/examples/35-dynamic/screenshot.png
new file mode 100644
index 00000000000..e0f1ace1177
--- /dev/null
+++ b/3rdparty/bgfx/examples/35-dynamic/screenshot.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/36-sky/fs_sky.sc b/3rdparty/bgfx/examples/36-sky/fs_sky.sc
new file mode 100644
index 00000000000..7c53d5018c7
--- /dev/null
+++ b/3rdparty/bgfx/examples/36-sky/fs_sky.sc
@@ -0,0 +1,26 @@
+$input v_skyColor, v_screenPos, v_viewDir
+
+/*
+* Copyright 2017 Stanislav Pidhorskyi. All rights reserved.
+* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+*/
+
+uniform vec4 u_parameters; // x - sun size, y - sun bloom, z - exposition, w - time
+uniform vec4 u_sunDirection;
+uniform vec4 u_sunLuminance;
+
+#include "../common/common.sh"
+
+void main()
+{
+ float size2 = u_parameters.x * u_parameters.x;
+
+ vec3 lightDir = normalize(u_sunDirection.xyz);
+ float dist = 2.0 * (1.0 - dot(normalize(v_viewDir), lightDir));
+ float sun = exp(-dist/ u_parameters.y / size2) + step(dist, size2);
+ float sun2 = min(sun * sun, 1.0);
+ vec3 color = v_skyColor + sun2;
+ color = toGamma(color);
+
+ gl_FragColor = vec4(color, 1.0);
+}
diff --git a/3rdparty/bgfx/examples/36-sky/fs_sky_color_banding_fix.sc b/3rdparty/bgfx/examples/36-sky/fs_sky_color_banding_fix.sc
new file mode 100644
index 00000000000..6782e03e310
--- /dev/null
+++ b/3rdparty/bgfx/examples/36-sky/fs_sky_color_banding_fix.sc
@@ -0,0 +1,46 @@
+$input v_skyColor, v_screenPos, v_viewDir
+
+/*
+* Copyright 2017 Stanislav Pidhorskyi. All rights reserved.
+* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+*/
+
+
+uniform vec4 u_parameters; // x - sun size, y - sun bloom, z - exposition, w - time
+uniform vec4 u_sunDirection;
+uniform vec4 u_sunLuminance;
+
+#include "../common/common.sh"
+
+// https://www.shadertoy.com/view/4ssXRX
+// http://www.loopit.dk/banding_in_games.pdf
+// http://www.dspguide.com/ch2/6.htm
+
+//uniformly distributed, normalized rand, [0, 1)
+float nrand(in vec2 n)
+{
+ return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453);
+}
+
+float n4rand_ss(in vec2 n)
+{
+ float nrnd0 = nrand( n + 0.07*fract( u_parameters.w ) );
+ float nrnd1 = nrand( n + 0.11*fract( u_parameters.w + 0.573953 ) );
+ return 0.23*sqrt(-log(nrnd0+0.00001))*cos(2.0*3.141592*nrnd1)+0.5;
+}
+
+void main()
+{
+ float size2 = u_parameters.x * u_parameters.x;
+
+ vec3 lightDir = normalize(u_sunDirection.xyz);
+ float distance = 2.0 * (1.0 - dot(normalize(v_viewDir), lightDir));
+ float sun = exp(-distance/ u_parameters.y / size2) + step(distance, size2);
+ float sun2 = min(sun * sun, 1.0);
+ vec3 color = v_skyColor + sun2;
+ color = toGamma(color);
+ float r = n4rand_ss(v_screenPos);
+ color += vec3(r, r, r) / 40.0;
+
+ gl_FragColor = vec4(color, 1.0);
+}
diff --git a/3rdparty/bgfx/examples/36-sky/fs_sky_landscape.sc b/3rdparty/bgfx/examples/36-sky/fs_sky_landscape.sc
new file mode 100644
index 00000000000..088b03c70a5
--- /dev/null
+++ b/3rdparty/bgfx/examples/36-sky/fs_sky_landscape.sc
@@ -0,0 +1,58 @@
+$input v_normal, v_texcoord0
+
+/*
+* Copyright 2017 Stanislav Pidhorskyi. All rights reserved.
+* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+*/
+
+#include "../common/common.sh"
+
+SAMPLER2D(s_texLightmap, 0);
+uniform vec4 u_sunDirection;
+uniform vec4 u_sunLuminance;
+uniform vec4 u_skyLuminance;
+uniform vec4 u_parameters;
+
+// https://www.shadertoy.com/view/4ssXRX
+// http://www.loopit.dk/banding_in_games.pdf
+// http://www.dspguide.com/ch2/6.htm
+
+//uniformly distributed, normalized rand, [0, 1)
+float nrand(in vec2 n)
+{
+ return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453);
+}
+
+float n4rand_ss(in vec2 n)
+{
+ float nrnd0 = nrand( n + 0.07*fract( u_parameters.w ) );
+ float nrnd1 = nrand( n + 0.11*fract( u_parameters.w + 0.573953 ) );
+ return 0.23*sqrt(-log(nrnd0+0.00001))*cos(2.0*3.141592*nrnd1)+0.5;
+}
+
+float toLinear(float _rgb)
+{
+ return pow(abs(_rgb), 2.2);
+}
+
+void main()
+{
+ vec3 normal = normalize(v_normal);
+
+ float occulsion = toLinear(texture2D(s_texLightmap, v_texcoord0).r);
+
+ vec3 skyDirection = vec3(0.0, 0.0, 1.0);
+
+ float diffuseSun = max(0.0, dot(normal, normalize(u_sunDirection.xyz)));
+ float diffuseSky = 1.0 + 0.5 * dot(normal, skyDirection);
+
+ vec3 color = diffuseSun * u_sunLuminance.rgb + (diffuseSky * u_skyLuminance.rgb + 0.01) * occulsion;
+ color *= 0.5;
+
+ //color = mix(color, (u_skyLuminance + u_sunLuminance)*0.3, v_fogFactor);
+
+ gl_FragColor.xyz = color * u_parameters.z;
+ gl_FragColor.w = 1.0;
+ float r = n4rand_ss(gl_FragCoord.xy) / 40.0;
+ gl_FragColor.xyz = toGamma(gl_FragColor.xyz) + vec3(r, r, r);
+}
diff --git a/3rdparty/bgfx/examples/36-sky/makefile b/3rdparty/bgfx/examples/36-sky/makefile
new file mode 100644
index 00000000000..94d3aae708a
--- /dev/null
+++ b/3rdparty/bgfx/examples/36-sky/makefile
@@ -0,0 +1,10 @@
+#
+# Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+# License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+#
+
+BGFX_DIR=../..
+RUNTIME_DIR=$(BGFX_DIR)/examples/runtime
+BUILD_DIR=../../.build
+
+include $(BGFX_DIR)/scripts/shader.mk
diff --git a/3rdparty/bgfx/examples/36-sky/screenshot.png b/3rdparty/bgfx/examples/36-sky/screenshot.png
new file mode 100644
index 00000000000..22aa7cb300e
--- /dev/null
+++ b/3rdparty/bgfx/examples/36-sky/screenshot.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/36-sky/sky.cpp b/3rdparty/bgfx/examples/36-sky/sky.cpp
new file mode 100644
index 00000000000..f6b7983eed4
--- /dev/null
+++ b/3rdparty/bgfx/examples/36-sky/sky.cpp
@@ -0,0 +1,666 @@
+/*
+ * Copyright 2017 Stanislav Pidhorskyi. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+/*
+ * This example demonstrates:
+ * - Usage of Perez sky model [1] to render a dynamic sky.
+ * - Rendering a mesh with a lightmap, shading of which is driven by the same parameters as the sky.
+ *
+ * Typically, the sky is rendered using cubemaps or other environment maps.
+ * This approach can provide a high-quality sky, but the downside is that the
+ * image is static. To achieve daytime changes in sky appearance, there is a need
+ * in a dynamic model.
+ *
+ * Perez "An All-Weather Model for Sky Luminance Distribution" is a simple,
+ * but good enough model which is, in essence, a function that
+ * interpolates a sky color. As input, it requires several turbidity
+ * coefficients, a color at zenith and direction to the sun.
+ * Turbidity coefficients are taken from [2], which are computed using more
+ * complex physically based models. Color at zenith depends on daytime and can
+ * vary depending on many factors.
+ *
+ * In the code below, there are two tables that contain sky and sun luminance
+ * which were computed using code from [3]. Luminance in those tables
+ * represents actual scale of light energy that comes from sun compared to
+ * the sky.
+ *
+ * The sky is driven by luminance of the sky, while the material of the
+ * landscape is driven by both, the luminance of the sky and the sun. The
+ * lightening model is very simple and consists of two parts: directional
+ * light and hemisphere light. The first is used for the sun while the second
+ * is used for the sky. Additionally, the second part is modulated by a
+ * lightmap to achieve ambient occlusion effect.
+ *
+ * References
+ * ==========
+ *
+ * [1] R. Perez, R. Seals, and J. Michalsky."An All-Weather Model for Sky Luminance Distribution".
+ * Solar Energy, Volume 50, Number 3 (March 1993), pp. 235–245.
+ *
+ * [2] A. J. Preetham, Peter Shirley, and Brian Smits. "A Practical Analytic Model for Daylight",
+ * Proceedings of the 26th Annual Conference on Computer Graphics and Interactive Techniques,
+ * 1999, pp. 91–100.
+ * https://www.cs.utah.edu/~shirley/papers/sunsky/sunsky.pdf
+ *
+ * [3] E. Lengyel, Game Engine Gems, Volume One. Jones & Bartlett Learning, 2010. pp. 219 - 234
+ *
+ */
+
+#include "common.h"
+#include "bgfx_utils.h"
+#include "imgui/imgui.h"
+#include "camera.h"
+#include "bounds.h"
+
+#include <map>
+
+namespace
+{
+ // Represents color. Color-space depends on context.
+ // In the code below, used to represent color in XYZ, and RGB color-space
+ union Color
+ {
+ struct {
+ float X;
+ float Y;
+ float Z;
+ };
+ struct {
+ float r;
+ float g;
+ float b;
+ };
+
+ float data[3];
+ };
+
+
+ // HDTV rec. 709 matrix.
+ static float M_XYZ2RGB[] =
+ {
+ 3.240479f, -0.969256f, 0.055648f,
+ -1.53715f, 1.875991f, -0.204043f,
+ -0.49853f, 0.041556f, 1.057311f
+ };
+
+
+ // Converts color repesentation from CIE XYZ to RGB color-space.
+ Color XYZToRGB(const Color& xyz)
+ {
+ Color rgb;
+ rgb.r = M_XYZ2RGB[0] * xyz.X + M_XYZ2RGB[3] * xyz.Y + M_XYZ2RGB[6] * xyz.Z;
+ rgb.g = M_XYZ2RGB[1] * xyz.X + M_XYZ2RGB[4] * xyz.Y + M_XYZ2RGB[7] * xyz.Z;
+ rgb.b = M_XYZ2RGB[2] * xyz.X + M_XYZ2RGB[5] * xyz.Y + M_XYZ2RGB[8] * xyz.Z;
+ return rgb;
+ };
+
+
+ // Precomputed luminance of sunlight in XYZ colorspace.
+ // Computed using code from Game Engine Gems, Volume One, chapter 15. Implementation based on Dr. Richard Bird model.
+ // This table is used for piecewise linear interpolation. Transitions from and to 0.0 at sunset and sunrise are highly inaccurate
+ static std::map<float, Color> sunLuminanceXYZTable = {
+ { 5.0f, {{ 0.000000f, 0.000000f, 0.000000f }} },
+ { 7.0f, {{ 12.703322f, 12.989393f, 9.100411f }} },
+ { 8.0f, {{ 13.202644f, 13.597814f, 11.524929f }} },
+ { 9.0f, {{ 13.192974f, 13.597458f, 12.264488f }} },
+ { 10.0f, {{ 13.132943f, 13.535914f, 12.560032f }} },
+ { 11.0f, {{ 13.088722f, 13.489535f, 12.692996f }} },
+ { 12.0f, {{ 13.067827f, 13.467483f, 12.745179f }} },
+ { 13.0f, {{ 13.069653f, 13.469413f, 12.740822f }} },
+ { 14.0f, {{ 13.094319f, 13.495428f, 12.678066f }} },
+ { 15.0f, {{ 13.142133f, 13.545483f, 12.526785f }} },
+ { 16.0f, {{ 13.201734f, 13.606017f, 12.188001f }} },
+ { 17.0f, {{ 13.182774f, 13.572725f, 11.311157f }} },
+ { 18.0f, {{ 12.448635f, 12.672520f, 8.267771f }} },
+ { 20.0f, {{ 0.000000f, 0.000000f, 0.000000f }} }
+ };
+
+
+ // Precomputed luminance of sky in the zenith point in XYZ colorspace.
+ // Computed using code from Game Engine Gems, Volume One, chapter 15. Implementation based on Dr. Richard Bird model.
+ // This table is used for piecewise linear interpolation. Day/night transitions are highly inaccurate.
+ // The scale of luminance change in Day/night transitions is not preserved.
+ // Luminance at night was increased to eliminate need the of HDR render.
+ static std::map<float, Color> skyLuminanceXYZTable = {
+ { 0.0f, {{ 0.308f, 0.308f, 0.411f }} },
+ { 1.0f, {{ 0.308f, 0.308f, 0.410f }} },
+ { 2.0f, {{ 0.301f, 0.301f, 0.402f }} },
+ { 3.0f, {{ 0.287f, 0.287f, 0.382f }} },
+ { 4.0f, {{ 0.258f, 0.258f, 0.344f }} },
+ { 5.0f, {{ 0.258f, 0.258f, 0.344f }} },
+ { 7.0f, {{ 0.962851f, 1.000000f, 1.747835f }} },
+ { 8.0f, {{ 0.967787f, 1.000000f, 1.776762f }} },
+ { 9.0f, {{ 0.970173f, 1.000000f, 1.788413f }} },
+ { 10.0f, {{ 0.971431f, 1.000000f, 1.794102f }} },
+ { 11.0f, {{ 0.972099f, 1.000000f, 1.797096f }} },
+ { 12.0f, {{ 0.972385f, 1.000000f, 1.798389f }} },
+ { 13.0f, {{ 0.972361f, 1.000000f, 1.798278f }} },
+ { 14.0f, {{ 0.972020f, 1.000000f, 1.796740f }} },
+ { 15.0f, {{ 0.971275f, 1.000000f, 1.793407f }} },
+ { 16.0f, {{ 0.969885f, 1.000000f, 1.787078f }} },
+ { 17.0f, {{ 0.967216f, 1.000000f, 1.773758f }} },
+ { 18.0f, {{ 0.961668f, 1.000000f, 1.739891f }} },
+ { 20.0f, {{ 0.264f, 0.264f, 0.352f }} },
+ { 21.0f, {{ 0.264f, 0.264f, 0.352f }} },
+ { 22.0f, {{ 0.290f, 0.290f, 0.386f }} },
+ { 23.0f, {{ 0.303f, 0.303f, 0.404f }} }
+ };
+
+
+ // Turbidity tables. Taken from:
+ // A. J. Preetham, P. Shirley, and B. Smits. A Practical Analytic Model for Daylight. SIGGRAPH ’99
+ // Coefficients correspond to xyY colorspace.
+ static Color ABCDE[] =
+ {
+ {{ -0.2592f, -0.2608f, -1.4630f }},
+ {{ 0.0008f, 0.0092f, 0.4275f }},
+ {{ 0.2125f, 0.2102f, 5.3251f }},
+ {{ -0.8989f, -1.6537f, -2.5771f }},
+ {{ 0.0452f, 0.0529f, 0.3703f }}
+ };
+ static Color ABCDE_t[] =
+ {
+ {{ -0.0193f, -0.0167f, 0.1787f }},
+ {{ -0.0665f, -0.0950f, -0.3554f }},
+ {{ -0.0004f, -0.0079f, -0.0227f }},
+ {{ -0.0641f, -0.0441f, 0.1206f }},
+ {{ -0.0033f, -0.0109f, -0.0670f }}
+ };
+
+
+ // Performs piecewise linear interpolation of a Color parameter.
+ class DynamicValueController
+ {
+ typedef Color ValueType;
+ typedef std::map<float, ValueType> KeyMap;
+ public:
+ DynamicValueController() {};
+ ~DynamicValueController() {};
+
+ void SetMap(const KeyMap& keymap)
+ {
+ m_keyMap = keymap;
+ }
+
+ ValueType GetValue(float time) const
+ {
+ typename KeyMap::const_iterator itUpper = m_keyMap.upper_bound(time + 1e-6f);
+ typename KeyMap::const_iterator itLower = itUpper;
+ --itLower;
+ if (itLower == m_keyMap.end())
+ {
+ return itUpper->second;
+ }
+ if (itUpper == m_keyMap.end())
+ {
+ return itLower->second;
+ }
+ float lowerTime = itLower->first;
+ const ValueType& lowerVal = itLower->second;
+ float upperTime = itUpper->first;
+ const ValueType& upperVal = itUpper->second;
+ if (lowerTime == upperTime)
+ {
+ return lowerVal;
+ }
+ return interpolate(lowerTime, lowerVal, upperTime, upperVal, time);
+ };
+
+ void Clear()
+ {
+ m_keyMap.clear();
+ };
+
+ private:
+ const ValueType interpolate(float lowerTime, const ValueType& lowerVal, float upperTime, const ValueType& upperVal, float time) const
+ {
+ float x = (time - lowerTime) / (upperTime - lowerTime);
+ ValueType result;
+ bx::vec3Lerp(result.data, lowerVal.data, upperVal.data, x);
+ return result;
+ };
+
+ KeyMap m_keyMap;
+ };
+
+
+ // Controls sun position according to time, month, and observer's latitude.
+ // Sun position computation based on Earth's orbital elements: https://nssdc.gsfc.nasa.gov/planetary/factsheet/earthfact.html
+ class SunController
+ {
+ public:
+ enum Month : int
+ {
+ January = 0,
+ February,
+ March,
+ April,
+ May,
+ June,
+ July,
+ August,
+ September,
+ October,
+ November,
+ December
+ };
+
+ SunController():
+ m_latitude(50.0f),
+ m_month(June),
+ m_eclipticObliquity(bx::toRad(23.4f)),
+ m_delta(0.0f)
+ {
+ m_northDirection[0] = 1.0;
+ m_northDirection[1] = 0.0;
+ m_northDirection[2] = 0.0;
+ m_upvector[0] = 0.0f;
+ m_upvector[1] = 1.0f;
+ m_upvector[2] = 0.0f;
+ }
+
+ void Update(float time)
+ {
+ CalculateSunOrbit();
+ UpdateSunPosition(time - 12.0f);
+ }
+
+ float m_northDirection[3];
+ float m_sunDirection[4];
+ float m_upvector[3];
+ float m_latitude;
+ Month m_month;
+
+ private:
+ void CalculateSunOrbit()
+ {
+ float day = 30.0f * m_month + 15.0f;
+ float lambda = 280.46f + 0.9856474f * day;
+ lambda = bx::toRad(lambda);
+ m_delta = bx::fasin(bx::fsin(m_eclipticObliquity) * bx::fsin(lambda));
+ }
+
+ void UpdateSunPosition(float hour)
+ {
+ float latitude = bx::toRad(m_latitude);
+ float h = hour * bx::kPi / 12.0f;
+ float azimuth = bx::fatan2(
+ bx::fsin(h),
+ bx::fcos(h) * bx::fsin(latitude) - bx::ftan(m_delta) * bx::fcos(latitude)
+ );
+
+ float altitude = bx::fasin(
+ bx::fsin(latitude) * bx::fsin(m_delta) + bx::fcos(latitude) * bx::fcos(m_delta) * bx::fcos(h)
+ );
+ float rotation[4];
+ bx::quatRotateAxis(rotation, m_upvector, -azimuth);
+ float direction[3];
+ bx::vec3MulQuat(direction, m_northDirection, rotation);
+ float v[3];
+ bx::vec3Cross(v, m_upvector, direction);
+ bx::quatRotateAxis(rotation, v, altitude);
+ bx::vec3MulQuat(m_sunDirection, direction, rotation);
+ }
+
+ float m_eclipticObliquity;
+ float m_delta;
+ };
+
+ struct ScreenPosVertex
+ {
+ float m_x;
+ float m_y;
+
+ static void init()
+ {
+ ms_decl
+ .begin()
+ .add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float)
+ .end();
+ }
+
+ static bgfx::VertexDecl ms_decl;
+ };
+
+ bgfx::VertexDecl ScreenPosVertex::ms_decl;
+
+ // Renders a screen-space grid of triangles.
+ // Because of performance reasons, and because sky color is smooth, sky color is computed in vertex shader.
+ // 32x32 is a reasonable size for the grid to have smooth enough colors.
+ struct ProceduralSky
+ {
+ void init(int verticalCount, int horizontalCount)
+ {
+ // Create vertex stream declaration.
+ ScreenPosVertex::init();
+
+ m_skyProgram = loadProgram("vs_sky", "fs_sky");
+ m_skyProgram_colorBandingFix = loadProgram("vs_sky", "fs_sky_color_banding_fix");
+
+ m_preventBanding = true;
+
+ bx::AllocatorI* allocator = entry::getAllocator();
+
+ ScreenPosVertex* vertices = (ScreenPosVertex*)BX_ALLOC(allocator
+ , verticalCount * horizontalCount * sizeof(ScreenPosVertex)
+ );
+
+ for (int i = 0; i < verticalCount; i++)
+ {
+ for (int j = 0; j < horizontalCount; j++)
+ {
+ ScreenPosVertex& v = vertices[i * verticalCount + j];
+ v.m_x = float(j) / (horizontalCount - 1) * 2.0f - 1.0f;
+ v.m_y = float(i) / (verticalCount - 1) * 2.0f - 1.0f;
+ }
+ }
+
+ uint16_t* indices = (uint16_t*)BX_ALLOC(allocator
+ , (verticalCount - 1) * (horizontalCount - 1) * 6 * sizeof(uint16_t)
+ );
+
+ int k = 0;
+ for (int i = 0; i < verticalCount - 1; i++)
+ {
+ for (int j = 0; j < horizontalCount - 1; j++)
+ {
+ indices[k++] = (uint16_t)(j + 0 + horizontalCount * (i + 0));
+ indices[k++] = (uint16_t)(j + 1 + horizontalCount * (i + 0));
+ indices[k++] = (uint16_t)(j + 0 + horizontalCount * (i + 1));
+
+ indices[k++] = (uint16_t)(j + 1 + horizontalCount * (i + 0));
+ indices[k++] = (uint16_t)(j + 1 + horizontalCount * (i + 1));
+ indices[k++] = (uint16_t)(j + 0 + horizontalCount * (i + 1));
+ }
+ }
+
+ m_vbh = bgfx::createVertexBuffer(bgfx::copy(vertices, sizeof(ScreenPosVertex) * verticalCount * horizontalCount), ScreenPosVertex::ms_decl);
+ m_ibh = bgfx::createIndexBuffer(bgfx::copy(indices, sizeof(uint16_t) * k));
+
+ BX_FREE(allocator, indices);
+ BX_FREE(allocator, vertices);
+ }
+
+ void shutdown()
+ {
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
+ bgfx::destroy(m_skyProgram);
+ bgfx::destroy(m_skyProgram_colorBandingFix);
+ }
+
+ void draw()
+ {
+ bgfx::setState(BGFX_STATE_RGB_WRITE | BGFX_STATE_DEPTH_TEST_EQUAL);
+ bgfx::setIndexBuffer(m_ibh);
+ bgfx::setVertexBuffer(0, m_vbh);
+ bgfx::submit(0, m_preventBanding ? m_skyProgram_colorBandingFix : m_skyProgram);
+ }
+
+ bgfx::VertexBufferHandle m_vbh;
+ bgfx::IndexBufferHandle m_ibh;
+
+ bgfx::ProgramHandle m_skyProgram;
+ bgfx::ProgramHandle m_skyProgram_colorBandingFix;
+
+ bool m_preventBanding;
+ };
+
+ class ExampleProceduralSky : public entry::AppI
+ {
+ public:
+ ExampleProceduralSky(const char* _name, const char* _description): entry::AppI(_name, _description)
+ {}
+
+ void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
+ {
+ Args args(_argc, _argv);
+
+ m_width = _width;
+ m_height = _height;
+ m_debug = BGFX_DEBUG_NONE;
+ m_reset = BGFX_RESET_VSYNC;
+
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
+
+ // Enable m_debug text.
+ bgfx::setDebug(m_debug);
+
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
+ , 0x000000ff
+ , 1.0f
+ , 0
+ );
+
+ m_sunLuminanceXYZ.SetMap(sunLuminanceXYZTable);
+ m_skyLuminanceXYZ.SetMap(skyLuminanceXYZTable);
+
+ m_mesh = meshLoad("meshes/test_scene.bin");
+
+ m_lightmapTexture = loadTexture("textures/lightmap.ktx");
+
+ // Imgui.
+ imguiCreate();
+
+ m_timeOffset = bx::getHPCounter();
+ m_time = 0.0f;
+ m_timeScale = 1.0f;
+
+ s_texLightmap = bgfx::createUniform("s_texLightmap", bgfx::UniformType::Int1);
+ u_sunLuminance = bgfx::createUniform("u_sunLuminance", bgfx::UniformType::Vec4);
+ u_skyLuminanceXYZ = bgfx::createUniform("u_skyLuminanceXYZ", bgfx::UniformType::Vec4);
+ u_skyLuminance = bgfx::createUniform("u_skyLuminance", bgfx::UniformType::Vec4);
+ u_sunDirection = bgfx::createUniform("u_sunDirection", bgfx::UniformType::Vec4);
+ u_parameters = bgfx::createUniform("u_parameters", bgfx::UniformType::Vec4);
+ u_perezCoeff = bgfx::createUniform("u_perezCoeff", bgfx::UniformType::Vec4, 5);
+
+ m_landscapeProgram = loadProgram("vs_sky_landscape", "fs_sky_landscape");
+
+ m_sky.init(32, 32);
+
+ m_sun.Update(0);
+
+ cameraCreate();
+
+ const float initialPos[3] = { 5.0f, 3.0, 0.0f };
+ cameraSetPosition(initialPos);
+ cameraSetVerticalAngle(bx::kPi / 8.0f);
+ cameraSetHorizontalAngle(-bx::kPi / 3.0f);
+
+ m_turbidity = 2.15f;
+ }
+
+ virtual int shutdown() override
+ {
+ // Cleanup.
+ cameraDestroy();
+ imguiDestroy();
+
+ meshUnload(m_mesh);
+
+ m_sky.shutdown();
+
+ bgfx::destroy(s_texLightmap);
+ bgfx::destroy(u_sunLuminance);
+ bgfx::destroy(u_skyLuminanceXYZ);
+ bgfx::destroy(u_skyLuminance);
+ bgfx::destroy(u_sunDirection);
+ bgfx::destroy(u_parameters);
+ bgfx::destroy(u_perezCoeff);
+
+ bgfx::destroy(m_lightmapTexture);
+ bgfx::destroy(m_landscapeProgram);
+
+ bgfx::frame();
+
+ // Shutdown bgfx.
+ bgfx::shutdown();
+
+ return 0;
+ }
+
+ void imgui(float _width)
+ {
+ ImGui::Begin("ProceduralSky");
+ ImGui::SetWindowSize(ImVec2(_width, 200.0f) );
+ ImGui::SliderFloat("Time scale", &m_timeScale, 0.0f, 1.0f);
+ ImGui::SliderFloat("Time", &m_time, 0.0f, 24.0f);
+ ImGui::SliderFloat("Latitude", &m_sun.m_latitude, -90.0f, 90.0f);
+ ImGui::SliderFloat("Turbidity", &m_turbidity, 1.9f, 10.0f);
+ ImGui::Checkbox("Prevent color banding", &m_sky.m_preventBanding);
+
+ const char* items[] = {
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December"
+ };
+ ImGui::Combo("Month", (int*)&m_sun.m_month, items, 12);
+
+ ImGui::End();
+ }
+
+ bool update() override
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState))
+ {
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency());
+ const float deltaTime = float(frameTime / freq);
+ m_time += m_timeScale * deltaTime;
+ m_time = bx::fmod(m_time, 24.0f);
+ m_sun.Update(m_time);
+
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , uint16_t(m_width)
+ , uint16_t(m_height)
+ );
+
+ showExampleDialog(this);
+
+ ImGui::SetNextWindowPos(
+ ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+
+ imgui(m_width / 5.0f - 10.0f);
+
+ imguiEndFrame();
+
+ if (!ImGui::MouseOverArea())
+ {
+ // Update camera.
+ cameraUpdate(deltaTime, m_mouseState);
+ }
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, uint16_t(m_width), uint16_t(m_height));
+
+ float view[16];
+ cameraGetViewMtx(view);
+
+ float proj[16];
+ bx::mtxProj(proj, 60.0f, float(m_width) / float(m_height), 0.1f, 2000.0f, bgfx::getCaps()->homogeneousDepth);
+
+ bgfx::setViewTransform(0, view, proj);
+
+ Color sunLuminanceXYZ = m_sunLuminanceXYZ.GetValue(m_time);
+ Color sunLuminanceRGB = XYZToRGB(sunLuminanceXYZ);
+
+ Color skyLuminanceXYZ = m_skyLuminanceXYZ.GetValue(m_time);
+ Color skyLuminanceRGB = XYZToRGB(skyLuminanceXYZ);
+
+ bgfx::setUniform(u_sunLuminance, sunLuminanceRGB.data);
+ bgfx::setUniform(u_skyLuminanceXYZ, skyLuminanceXYZ.data);
+ bgfx::setUniform(u_skyLuminance, skyLuminanceRGB.data);
+
+ bgfx::setUniform(u_sunDirection, m_sun.m_sunDirection);
+
+ float exposition[4] = { 0.02f, 3.0f, 0.1f, m_time };
+ bgfx::setUniform(u_parameters, exposition);
+
+ float perezCoeff[4 * 5];
+ computePerezCoeff(m_turbidity, perezCoeff);
+ bgfx::setUniform(u_perezCoeff, perezCoeff, 5);
+
+ bgfx::setTexture(0, s_texLightmap, m_lightmapTexture);
+ meshSubmit(m_mesh, 0, m_landscapeProgram, NULL);
+
+ m_sky.draw();
+
+ bgfx::frame();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ void computePerezCoeff(float turbidity, float* perezCoeff)
+ {
+ for (int i = 0; i < 5; ++i)
+ {
+ Color tmp;
+ bx::vec3Mul(tmp.data, ABCDE_t[i].data, turbidity);
+ bx::vec3Add(perezCoeff + 4 * i, tmp.data, ABCDE[i].data);
+ perezCoeff[4 * i + 3] = 0.0f;
+ }
+ }
+
+ bgfx::ProgramHandle m_landscapeProgram;
+ bgfx::UniformHandle s_texLightmap;
+ bgfx::TextureHandle m_lightmapTexture;
+
+ bgfx::UniformHandle u_sunLuminance;
+ bgfx::UniformHandle u_skyLuminanceXYZ;
+ bgfx::UniformHandle u_skyLuminance;
+ bgfx::UniformHandle u_sunDirection;
+ bgfx::UniformHandle u_parameters;
+ bgfx::UniformHandle u_perezCoeff;
+
+ ProceduralSky m_sky;
+ SunController m_sun;
+
+ DynamicValueController m_sunLuminanceXYZ;
+ DynamicValueController m_skyLuminanceXYZ;
+
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+
+ Mesh* m_mesh;
+
+ entry::MouseState m_mouseState;
+
+ float m_time;
+ float m_timeScale;
+ int64_t m_timeOffset;
+
+ float m_turbidity;
+ };
+
+} // namespace
+
+ENTRY_IMPLEMENT_MAIN(ExampleProceduralSky, "36-sky", "Perez dynamic sky model.");
diff --git a/3rdparty/bgfx/examples/36-sky/varying.def.sc b/3rdparty/bgfx/examples/36-sky/varying.def.sc
new file mode 100644
index 00000000000..ada280b43a4
--- /dev/null
+++ b/3rdparty/bgfx/examples/36-sky/varying.def.sc
@@ -0,0 +1,9 @@
+vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0);
+vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0);
+vec2 v_screenPos : TEXCOORD0 = vec2(0.0, 0.0);
+vec3 v_skyColor : TEXCOORD1 = vec3(0.0, 0.0, 1.0);
+vec3 v_viewDir : TEXCOORD2 = vec3(0.0, 0.0, 1.0);
+
+vec3 a_position : POSITION;
+vec4 a_normal : NORMAL;
+vec2 a_texcoord0 : TEXCOORD0; \ No newline at end of file
diff --git a/3rdparty/bgfx/examples/36-sky/vs_sky.sc b/3rdparty/bgfx/examples/36-sky/vs_sky.sc
new file mode 100644
index 00000000000..10751bd1f5e
--- /dev/null
+++ b/3rdparty/bgfx/examples/36-sky/vs_sky.sc
@@ -0,0 +1,70 @@
+$input a_position
+$output v_skyColor, v_screenPos, v_viewDir
+
+/*
+* Copyright 2017 Stanislav Pidhorskyi. All rights reserved.
+* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+*/
+
+
+uniform vec4 u_sunDirection;
+uniform vec4 u_skyLuminanceXYZ;
+uniform vec4 u_parameters; // x - sun size, y - sun bloom, z - exposition
+uniform vec4 u_perezCoeff[5];
+
+#include "../common/common.sh"
+
+vec3 Perez(vec3 A,vec3 B,vec3 C,vec3 D, vec3 E,float costeta, float cosgamma)
+{
+ float _1_costeta = 1.0 / costeta;
+ float cos2gamma = cosgamma * cosgamma;
+ float gamma = acos(cosgamma);
+ vec3 f = (vec3_splat(1.0) + A * exp(B * _1_costeta))
+ * (vec3_splat(1.0) + C * exp(D * gamma) + E * cos2gamma);
+ return f;
+}
+
+void main()
+{
+ v_screenPos = a_position.xy;
+
+ vec4 rayStart = mul(u_invViewProj, vec4(vec3(a_position.xy, -1.0), 1.0));
+ vec4 rayEnd = mul(u_invViewProj, vec4(vec3(a_position.xy, 1.0), 1.0));
+
+ rayStart = rayStart / rayStart.w;
+ rayEnd = rayEnd / rayEnd.w;
+
+ v_viewDir = normalize(rayEnd.xyz - rayStart.xyz);
+ v_viewDir.y = abs(v_viewDir.y);
+
+ gl_Position = vec4(a_position.xy, 1.0, 1.0);
+
+ vec3 lightDir = normalize(u_sunDirection.xyz);
+ vec3 skyDir = vec3(0.0, 1.0, 0.0);
+
+ // Perez coefficients.
+ vec3 A = u_perezCoeff[0].xyz;
+ vec3 B = u_perezCoeff[1].xyz;
+ vec3 C = u_perezCoeff[2].xyz;
+ vec3 D = u_perezCoeff[3].xyz;
+ vec3 E = u_perezCoeff[4].xyz;
+
+ float costeta = max(dot(v_viewDir, skyDir), 0.001);
+ float cosgamma = clamp(dot(v_viewDir, lightDir), -0.9999, 0.9999);
+ float cosgammas = dot(skyDir, lightDir);
+
+ vec3 P = Perez(A,B,C,D,E, costeta, cosgamma);
+ vec3 P0 = Perez(A,B,C,D,E, 1.0, cosgammas);
+
+ vec3 skyColorxyY = vec3(
+ u_skyLuminanceXYZ.x / (u_skyLuminanceXYZ.x+u_skyLuminanceXYZ.y + u_skyLuminanceXYZ.z)
+ , u_skyLuminanceXYZ.y / (u_skyLuminanceXYZ.x+u_skyLuminanceXYZ.y + u_skyLuminanceXYZ.z)
+ , u_skyLuminanceXYZ.y
+ );
+
+ vec3 Yp = skyColorxyY * P / P0;
+
+ vec3 skyColorXYZ = vec3(Yp.x * Yp.z / Yp.y,Yp.z, (1.0 - Yp.x- Yp.y)*Yp.z/Yp.y);
+
+ v_skyColor = convertXYZ2RGB(skyColorXYZ * u_parameters.z);
+}
diff --git a/3rdparty/bgfx/examples/36-sky/vs_sky_landscape.sc b/3rdparty/bgfx/examples/36-sky/vs_sky_landscape.sc
new file mode 100644
index 00000000000..57f6c35faa2
--- /dev/null
+++ b/3rdparty/bgfx/examples/36-sky/vs_sky_landscape.sc
@@ -0,0 +1,19 @@
+$input a_position, a_normal, a_texcoord0
+$output v_normal, v_texcoord0
+
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "../common/common.sh"
+
+void main()
+{
+ gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
+
+ vec3 normal = a_normal.xyz * 2.0 - 1.0;
+ v_normal = mul(u_model[0], vec4(normal, 0.0) ).xyz;
+
+ v_texcoord0 = a_texcoord0;
+}
diff --git a/3rdparty/bgfx/examples/assets/meshes/meshes.ninja b/3rdparty/bgfx/examples/assets/meshes/meshes.ninja
index f8a95dac498..cc88f052ae6 100644
--- a/3rdparty/bgfx/examples/assets/meshes/meshes.ninja
+++ b/3rdparty/bgfx/examples/assets/meshes/meshes.ninja
@@ -15,3 +15,4 @@ build $meshes/tree1b_lod1_1.bin: geometryc_pack_normal $pwd/tree1b
build $meshes/tree1b_lod1_2.bin: geometryc_pack_normal $pwd/tree1b_lod1_2.obj
build $meshes/tree1b_lod2_1.bin: geometryc_pack_normal $pwd/tree1b_lod2_1.obj
build $meshes/tree1b_lod2_2.bin: geometryc_pack_normal $pwd/tree1b_lod2_2.obj
+build $meshes/test_scene.bin: geometryc_pack_normal $pwd/../sky/test_scene.obj
diff --git a/3rdparty/bgfx/examples/assets/sky/lightmap.png b/3rdparty/bgfx/examples/assets/sky/lightmap.png
new file mode 100644
index 00000000000..275f2304334
--- /dev/null
+++ b/3rdparty/bgfx/examples/assets/sky/lightmap.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/assets/sky/test_scene.blend b/3rdparty/bgfx/examples/assets/sky/test_scene.blend
new file mode 100644
index 00000000000..ff27d30abe5
--- /dev/null
+++ b/3rdparty/bgfx/examples/assets/sky/test_scene.blend
Binary files differ
diff --git a/3rdparty/bgfx/examples/assets/sky/test_scene.obj b/3rdparty/bgfx/examples/assets/sky/test_scene.obj
new file mode 100644
index 00000000000..553dd342f25
--- /dev/null
+++ b/3rdparty/bgfx/examples/assets/sky/test_scene.obj
@@ -0,0 +1,8878 @@
+# Blender v2.78 (sub 0) OBJ File: 'test_scene.blend'
+# www.blender.org
+mtllib test_scene.mtl
+o Sun_Sphere
+v 8.160295 45.661919 3.327949
+v 7.409923 45.434296 3.327949
+v 6.718376 45.064655 3.327949
+v 6.112229 44.567204 3.327949
+v 5.614778 43.961060 3.327949
+v 5.245139 43.269512 3.327949
+v 5.017516 42.519138 3.327949
+v 4.940657 41.738777 3.327949
+v 5.017515 40.958416 3.327949
+v 5.245138 40.208046 3.327949
+v 5.614778 39.516495 3.327949
+v 6.112229 38.910351 3.327949
+v 6.718376 38.412899 3.327949
+v 7.409924 38.043259 3.327949
+v 8.160296 37.815636 3.327949
+v 8.175290 45.661919 3.175708
+v 7.439335 45.434296 3.029318
+v 6.761076 45.064655 2.894403
+v 6.166577 44.567204 2.776150
+v 5.678684 43.961060 2.679102
+v 5.316147 43.269512 2.606989
+v 5.092898 42.519138 2.562582
+v 5.017516 41.738777 2.547588
+v 5.092897 40.958416 2.562582
+v 5.316147 40.208046 2.606989
+v 5.678684 39.516495 2.679102
+v 6.166577 38.910351 2.776150
+v 6.761076 38.412899 2.894403
+v 7.439336 38.043259 3.029318
+v 8.175291 37.815636 3.175708
+v 8.219697 45.661919 3.029317
+v 7.526443 45.434296 2.742162
+v 6.887537 45.064655 2.477519
+v 6.327531 44.567204 2.245557
+v 5.867946 43.961060 2.055190
+v 5.526443 43.269512 1.913735
+v 5.316147 42.519138 1.826628
+v 5.245139 41.738777 1.797215
+v 5.316147 40.958416 1.826628
+v 5.526443 40.208046 1.913735
+v 5.867946 39.516495 2.055190
+v 6.327531 38.910351 2.245557
+v 6.887537 38.412899 2.477519
+v 7.526443 38.043259 2.742163
+v 8.219698 37.815636 3.029318
+v 8.291810 45.661919 2.894403
+v 7.667898 45.434296 2.477519
+v 7.092898 45.064655 2.093316
+v 6.588906 44.567204 1.756559
+v 6.175290 43.961060 1.480190
+v 5.867946 43.269512 1.274829
+v 5.678685 42.519138 1.148368
+v 5.614779 41.738777 1.105668
+v 5.678685 40.958416 1.148368
+v 5.867946 40.208046 1.274829
+v 6.175290 39.516495 1.480190
+v 6.588906 38.910351 1.756559
+v 7.092898 38.412899 2.093316
+v 7.667899 38.043259 2.477519
+v 8.291811 37.815636 2.894404
+v 8.388858 45.661919 2.776150
+v 7.858265 45.434296 2.245556
+v 7.369267 45.064655 1.756559
+v 6.940657 44.567204 1.327949
+v 6.588906 43.961060 0.976197
+v 6.327531 43.269512 0.714823
+v 6.166578 42.519138 0.553869
+v 6.112230 41.738777 0.499521
+v 6.166578 40.958416 0.553869
+v 6.327531 40.208046 0.714823
+v 6.588906 39.516495 0.976197
+v 6.940657 38.910351 1.327949
+v 7.369267 38.412899 1.756559
+v 7.858265 38.043259 2.245557
+v 8.388859 37.815636 2.776150
+v 8.507112 45.661919 2.679101
+v 8.090227 45.434296 2.055190
+v 7.706024 45.064655 1.480189
+v 7.369267 44.567204 0.976197
+v 7.092898 43.961060 0.562582
+v 6.887537 43.269512 0.255238
+v 6.761077 42.519138 0.065976
+v 6.718377 41.738777 0.002070
+v 6.761077 40.958416 0.065976
+v 6.887537 40.208046 0.255238
+v 7.092898 39.516495 0.562582
+v 7.369267 38.910351 0.976197
+v 7.706024 38.412899 1.480190
+v 8.090227 38.043259 2.055190
+v 8.507113 37.815636 2.679102
+v 8.642026 45.661919 2.606988
+v 8.354871 45.434296 1.913735
+v 8.090227 45.064655 1.274828
+v 7.858265 44.567204 0.714823
+v 7.667899 43.961060 0.255237
+v 7.526444 43.269512 -0.086265
+v 7.439337 42.519138 -0.296561
+v 7.409924 41.738777 -0.367570
+v 7.439337 40.958416 -0.296561
+v 7.526443 40.208046 -0.086265
+v 7.667899 39.516495 0.255237
+v 7.858265 38.910351 0.714823
+v 8.090227 38.412899 1.274829
+v 8.354871 38.043259 1.913735
+v 8.642027 37.815636 2.606989
+v 8.788417 45.661919 2.562581
+v 8.642026 45.434296 1.826627
+v 8.507113 45.064655 1.148368
+v 8.388859 44.567204 0.553869
+v 8.291811 43.961060 0.065976
+v 8.219698 43.269512 -0.296561
+v 8.175291 42.519138 -0.519810
+v 8.160296 41.738777 -0.595193
+v 8.175291 40.958416 -0.519810
+v 8.219698 40.208046 -0.296561
+v 8.291811 39.516495 0.065976
+v 8.388859 38.910351 0.553869
+v 8.507113 38.412899 1.148368
+v 8.642027 38.043259 1.826628
+v 8.788417 37.815636 2.562582
+v 8.940658 45.661919 2.547587
+v 8.940658 45.434296 1.797215
+v 8.940658 45.064655 1.105667
+v 8.940658 44.567204 0.499521
+v 8.940658 43.961060 0.002070
+v 8.940658 43.269512 -0.367569
+v 8.940659 42.519138 -0.595192
+v 8.940659 41.738777 -0.672052
+v 8.940659 40.958416 -0.595192
+v 8.940658 40.208046 -0.367569
+v 8.940658 39.516495 0.002070
+v 8.940658 38.910351 0.499521
+v 8.940658 38.412899 1.105668
+v 8.940658 38.043259 1.797215
+v 8.940658 37.815636 2.547588
+v 9.092899 45.661919 2.562581
+v 9.239289 45.434296 1.826627
+v 9.374204 45.064655 1.148368
+v 9.492456 44.567204 0.553869
+v 9.589505 43.961060 0.065976
+v 9.661617 43.269512 -0.296561
+v 9.706025 42.519138 -0.519809
+v 9.721020 41.738777 -0.595193
+v 9.706025 40.958416 -0.519809
+v 9.661617 40.208046 -0.296561
+v 9.589505 39.516495 0.065976
+v 9.492456 38.910351 0.553869
+v 9.374204 38.412899 1.148368
+v 9.239289 38.043259 1.826628
+v 9.092899 37.815636 2.562582
+v 9.239289 45.661919 2.606988
+v 9.526444 45.434296 1.913735
+v 9.791088 45.064655 1.274829
+v 10.023050 44.567204 0.714823
+v 10.213417 43.961060 0.255238
+v 10.354872 43.269512 -0.086265
+v 10.441979 42.519138 -0.296560
+v 10.471392 41.738777 -0.367569
+v 10.441979 40.958416 -0.296560
+v 10.354872 40.208046 -0.086265
+v 10.213417 39.516495 0.255238
+v 10.023050 38.910351 0.714823
+v 9.791088 38.412899 1.274829
+v 9.526444 38.043259 1.913735
+v 9.239289 37.815636 2.606989
+v 9.374204 45.661919 2.679102
+v 9.791088 45.434296 2.055190
+v 10.175291 45.064655 1.480190
+v 10.512048 44.567204 0.976197
+v 10.788418 43.961060 0.562582
+v 10.993778 43.269512 0.255238
+v 11.120238 42.519138 0.065977
+v 11.162939 41.738777 0.002070
+v 11.120238 40.958416 0.065977
+v 10.993778 40.208046 0.255238
+v 10.788418 39.516495 0.562582
+v 10.512048 38.910351 0.976197
+v 10.175291 38.412899 1.480190
+v 9.791088 38.043259 2.055191
+v 9.374204 37.815636 2.679102
+v 9.492457 45.661919 2.776150
+v 10.023050 45.434296 2.245556
+v 10.512049 45.064655 1.756559
+v 10.940659 44.567204 1.327949
+v 11.292410 43.961060 0.976198
+v 11.553783 43.269512 0.714823
+v 11.714737 42.519138 0.553870
+v 11.769086 41.738777 0.499522
+v 11.714737 40.958416 0.553870
+v 11.553783 40.208046 0.714823
+v 11.292410 39.516495 0.976198
+v 10.940659 38.910351 1.327949
+v 10.512048 38.412899 1.756559
+v 10.023050 38.043259 2.245557
+v 9.492456 37.815636 2.776150
+v 9.589505 45.661919 2.894403
+v 10.213417 45.434296 2.477519
+v 10.788418 45.064655 2.093316
+v 11.292410 44.567204 1.756559
+v 11.706025 43.961060 1.480190
+v 12.013369 43.269512 1.274829
+v 12.202630 42.519138 1.148369
+v 12.266537 41.738777 1.105668
+v 12.202630 40.958416 1.148369
+v 12.013369 40.208046 1.274829
+v 11.706025 39.516495 1.480190
+v 11.292410 38.910351 1.756559
+v 10.788417 38.412899 2.093316
+v 10.213417 38.043259 2.477519
+v 9.589504 37.815636 2.894404
+v 9.661618 45.661919 3.029318
+v 10.354872 45.434296 2.742162
+v 10.993778 45.064655 2.477519
+v 11.553783 44.567204 2.245557
+v 12.013369 43.961060 2.055191
+v 12.354872 43.269512 1.913735
+v 12.565167 42.519138 1.826629
+v 12.636177 41.738777 1.797216
+v 12.565167 40.958416 1.826629
+v 12.354872 40.208046 1.913735
+v 12.013369 39.516495 2.055191
+v 11.553783 38.910351 2.245557
+v 10.993778 38.412899 2.477519
+v 10.354872 38.043259 2.742163
+v 9.661618 37.815636 3.029318
+v 9.706026 45.661919 3.175708
+v 10.441979 45.434296 3.029318
+v 11.120239 45.064655 2.894403
+v 11.714738 44.567204 2.776151
+v 12.202630 43.961060 2.679103
+v 12.565167 43.269512 2.606989
+v 12.788416 42.519138 2.562583
+v 12.863800 41.738777 2.547588
+v 12.788416 40.958416 2.562583
+v 12.565167 40.208046 2.606989
+v 12.202630 39.516495 2.679103
+v 11.714738 38.910351 2.776151
+v 11.120238 38.412899 2.894404
+v 10.441979 38.043259 3.029318
+v 9.706025 37.815636 3.175708
+v 9.721020 45.661919 3.327949
+v 10.471392 45.434296 3.327949
+v 11.162939 45.064655 3.327949
+v 11.769085 44.567204 3.327949
+v 12.266536 43.961060 3.327950
+v 12.636176 43.269512 3.327949
+v 12.863798 42.519138 3.327950
+v 12.940659 41.738777 3.327950
+v 12.863798 40.958416 3.327950
+v 12.636176 40.208046 3.327949
+v 12.266536 39.516495 3.327950
+v 11.769085 38.910351 3.327949
+v 11.162939 38.412899 3.327949
+v 10.471392 38.043259 3.327949
+v 9.721019 37.815636 3.327949
+v 9.706025 45.661919 3.480191
+v 10.441979 45.434296 3.626580
+v 11.120239 45.064655 3.761495
+v 11.714737 44.567204 3.879748
+v 12.202629 43.961060 3.976796
+v 12.565167 43.269512 4.048909
+v 12.788416 42.519138 4.093316
+v 12.863799 41.738777 4.108311
+v 12.788416 40.958416 4.093316
+v 12.565167 40.208046 4.048909
+v 12.202629 39.516495 3.976796
+v 11.714737 38.910351 3.879748
+v 11.120238 38.412899 3.761495
+v 10.441978 38.043259 3.626580
+v 9.706025 37.815636 3.480190
+v 9.661618 45.661919 3.626581
+v 10.354872 45.434296 3.913736
+v 10.993778 45.064655 4.178380
+v 11.553783 44.567204 4.410341
+v 12.013368 43.961060 4.600708
+v 12.354872 43.269512 4.742163
+v 12.565166 42.519138 4.829270
+v 12.636176 41.738777 4.858684
+v 12.565166 40.958416 4.829270
+v 12.354872 40.208046 4.742163
+v 12.013368 39.516495 4.600708
+v 11.553783 38.910351 4.410341
+v 10.993777 38.412899 4.178379
+v 10.354871 38.043259 3.913736
+v 9.661617 37.815636 3.626580
+v 9.589505 45.661919 3.761495
+v 10.213417 45.434296 4.178380
+v 10.788418 45.064655 4.562582
+v 11.292409 44.567204 4.899339
+v 11.706023 43.961060 5.175708
+v 12.013369 43.269512 5.381069
+v 12.202629 42.519138 5.507529
+v 12.266536 41.738777 5.550231
+v 12.202629 40.958416 5.507529
+v 12.013369 40.208046 5.381069
+v 11.706023 39.516495 5.175708
+v 11.292409 38.910351 4.899339
+v 10.788417 38.412899 4.562582
+v 10.213416 38.043259 4.178379
+v 9.589504 37.815636 3.761495
+v 9.492457 45.661919 3.879749
+v 10.023050 45.434296 4.410341
+v 10.512048 45.064655 4.899339
+v 10.940658 44.567204 5.327950
+v 11.292408 43.961060 5.679700
+v 11.553783 43.269512 5.941075
+v 11.714736 42.519138 6.102028
+v 11.769085 41.738777 6.156377
+v 11.714736 40.958416 6.102028
+v 11.553783 40.208046 5.941075
+v 11.292408 39.516495 5.679700
+v 10.940658 38.910351 5.327950
+v 10.512048 38.412899 4.899339
+v 10.023049 38.043259 4.410341
+v 9.492456 37.815636 3.879748
+v 9.374204 45.661919 3.976797
+v 9.791088 45.434296 4.600708
+v 10.175291 45.064655 5.175708
+v 10.512048 44.567204 5.679700
+v 10.788416 43.961060 6.093315
+v 10.993778 43.269512 6.400660
+v 11.120237 42.519138 6.589921
+v 11.162938 41.738777 6.653828
+v 11.120237 40.958416 6.589921
+v 10.993778 40.208046 6.400660
+v 10.788416 39.516495 6.093315
+v 10.512048 38.910351 5.679700
+v 10.175291 38.412899 5.175708
+v 9.791087 38.043259 4.600708
+v 9.374204 37.815636 3.976796
+v 8.940658 37.738777 3.327949
+v 9.239289 45.661919 4.048910
+v 9.526444 45.434296 4.742163
+v 9.791088 45.064655 5.381069
+v 10.023049 44.567204 5.941075
+v 10.213415 43.961060 6.400659
+v 10.354872 43.269512 6.742163
+v 10.441978 42.519138 6.952458
+v 10.471391 41.738777 7.023467
+v 10.441978 40.958416 6.952458
+v 10.354872 40.208046 6.742163
+v 10.213415 39.516495 6.400659
+v 10.023049 38.910351 5.941075
+v 9.791088 38.412899 5.381069
+v 9.526443 38.043259 4.742162
+v 9.239289 37.815636 4.048909
+v 9.092899 45.661919 4.093317
+v 9.239289 45.434296 4.829270
+v 9.374204 45.064655 5.507530
+v 9.492456 44.567204 6.102029
+v 9.589503 43.961060 6.589921
+v 9.661617 43.269512 6.952459
+v 9.706023 42.519138 7.175707
+v 9.721019 41.738777 7.251090
+v 9.706023 40.958416 7.175707
+v 9.661617 40.208046 6.952459
+v 9.589503 39.516495 6.589921
+v 9.492456 38.910351 6.102029
+v 9.374203 38.412899 5.507529
+v 9.239289 38.043259 4.829270
+v 9.092898 37.815636 4.093316
+v 8.940658 45.661919 4.108311
+v 8.940658 45.434296 4.858683
+v 8.940658 45.064655 5.550230
+v 8.940658 44.567204 6.156376
+v 8.940658 43.961060 6.653826
+v 8.940658 43.269512 7.023467
+v 8.940657 42.519138 7.251089
+v 8.940658 41.738777 7.327949
+v 8.940657 40.958416 7.251089
+v 8.940658 40.208046 7.023467
+v 8.940658 39.516495 6.653826
+v 8.940658 38.910351 6.156376
+v 8.940658 38.412899 5.550230
+v 8.940658 38.043259 4.858682
+v 8.940658 37.815636 4.108310
+v 8.788417 45.661919 4.093317
+v 8.642027 45.434296 4.829270
+v 8.507113 45.064655 5.507529
+v 8.388859 44.567204 6.102029
+v 8.291811 43.961060 6.589920
+v 8.219698 43.269512 6.952458
+v 8.175290 42.519138 7.175706
+v 8.160296 41.738777 7.251089
+v 8.175290 40.958416 7.175706
+v 8.219698 40.208046 6.952458
+v 8.291811 39.516495 6.589920
+v 8.388859 38.910351 6.102029
+v 8.507113 38.412899 5.507529
+v 8.642027 38.043259 4.829269
+v 8.788417 37.815636 4.093316
+v 8.642026 45.661919 4.048910
+v 8.354872 45.434296 4.742163
+v 8.090228 45.064655 5.381069
+v 7.858265 44.567204 5.941074
+v 7.667899 43.961060 6.400659
+v 7.526444 43.269512 6.742163
+v 7.439337 42.519138 6.952456
+v 7.409924 41.738777 7.023466
+v 7.439337 40.958416 6.952456
+v 7.526444 40.208046 6.742163
+v 7.667899 39.516495 6.400659
+v 7.858265 38.910351 5.941074
+v 8.090228 38.412899 5.381068
+v 8.354872 38.043259 4.742162
+v 8.642027 37.815636 4.048909
+v 8.507113 45.661919 3.976796
+v 8.090228 45.434296 4.600708
+v 7.706025 45.064655 5.175708
+v 7.369267 44.567204 5.679700
+v 7.092899 43.961060 6.093314
+v 6.887538 43.269512 6.400660
+v 6.761078 42.519138 6.589920
+v 6.718377 41.738777 6.653826
+v 6.761078 40.958416 6.589920
+v 6.887538 40.208046 6.400660
+v 7.092899 39.516495 6.093314
+v 7.369267 38.910351 5.679700
+v 7.706025 38.412899 5.175707
+v 8.090228 38.043259 4.600707
+v 8.507113 37.815636 3.976796
+v 8.388859 45.661919 3.879748
+v 7.858266 45.434296 4.410341
+v 7.369268 45.064655 4.899339
+v 6.940658 44.567204 5.327949
+v 6.588907 43.961060 5.679698
+v 6.327532 43.269512 5.941075
+v 6.166579 42.519138 6.102027
+v 6.112231 41.738777 6.156375
+v 6.166579 40.958416 6.102027
+v 6.327532 40.208046 5.941075
+v 6.588907 39.516495 5.679698
+v 6.940658 38.910351 5.327949
+v 7.369268 38.412899 4.899338
+v 7.858266 38.043259 4.410341
+v 8.388860 37.815636 3.879748
+v 8.291811 45.661919 3.761495
+v 7.667900 45.434296 4.178379
+v 7.092899 45.064655 4.562582
+v 6.588907 44.567204 4.899339
+v 6.175292 43.961060 5.175706
+v 5.867948 43.269512 5.381069
+v 5.678687 42.519138 5.507527
+v 5.614780 41.738777 5.550229
+v 5.678687 40.958416 5.507527
+v 5.867948 40.208046 5.381069
+v 6.175292 39.516495 5.175706
+v 6.588907 38.910351 4.899339
+v 7.092899 38.412899 4.562582
+v 7.667900 38.043259 4.178379
+v 8.291811 37.815636 3.761495
+v 8.940657 45.738777 3.327950
+v 8.219698 45.661919 3.626581
+v 7.526444 45.434296 3.913735
+v 6.887538 45.064655 4.178379
+v 6.327532 44.567204 4.410341
+v 5.867949 43.961060 4.600706
+v 5.526445 43.269512 4.742163
+v 5.316150 42.519138 4.829268
+v 5.245141 41.738777 4.858682
+v 5.316150 40.958416 4.829268
+v 5.526445 40.208046 4.742163
+v 5.867949 39.516495 4.600706
+v 6.327532 38.910351 4.410341
+v 6.887539 38.412899 4.178379
+v 7.526445 38.043259 3.913735
+v 8.219698 37.815636 3.626580
+v 8.175291 45.661919 3.480190
+v 7.439337 45.434296 3.626580
+v 6.761078 45.064655 3.761494
+v 6.166578 44.567204 3.879747
+v 5.678687 43.961060 3.976794
+v 5.316149 43.269512 4.048909
+v 5.092901 42.519138 4.093315
+v 5.017519 41.738777 4.108309
+v 5.092901 40.958416 4.093315
+v 5.316149 40.208046 4.048909
+v 5.678687 39.516495 3.976794
+v 6.166578 38.910351 3.879747
+v 6.761079 38.412899 3.761494
+v 7.439338 38.043259 3.626580
+v 8.175291 37.815636 3.480190
+vn -0.8786 -0.4696 -0.0865
+vn -0.6332 0.7715 -0.0624
+vn -0.7708 -0.6326 -0.0759
+vn -0.7708 0.6326 -0.0759
+vn -0.6332 -0.7715 -0.0624
+vn -0.8786 0.4696 -0.0865
+vn -0.4709 -0.8810 -0.0464
+vn -0.9527 0.2890 -0.0938
+vn -0.2902 -0.9565 -0.0286
+vn -0.9904 0.0976 -0.0976
+vn -0.9904 -0.0975 -0.0976
+vn -0.2902 0.9565 -0.0286
+vn -0.9527 -0.2890 -0.0938
+vn -0.4709 0.8810 -0.0464
+vn -0.9161 -0.2890 -0.2779
+vn -0.4528 0.8810 -0.1374
+vn -0.8448 -0.4696 -0.2563
+vn -0.6088 0.7715 -0.1847
+vn -0.7412 -0.6326 -0.2248
+vn -0.7412 0.6326 -0.2248
+vn -0.6088 -0.7715 -0.1847
+vn -0.8448 0.4696 -0.2563
+vn -0.4528 -0.8810 -0.1374
+vn -0.9161 0.2890 -0.2779
+vn -0.2790 -0.9566 -0.0846
+vn -0.9524 0.0975 -0.2889
+vn -0.9524 -0.0975 -0.2889
+vn -0.2790 0.9565 -0.0846
+vn -0.4173 -0.8810 -0.2231
+vn -0.8443 0.2890 -0.4513
+vn -0.2571 -0.9565 -0.1375
+vn -0.8777 0.0975 -0.4692
+vn -0.8777 -0.0976 -0.4691
+vn -0.2571 0.9566 -0.1374
+vn -0.8443 -0.2890 -0.4513
+vn -0.4173 0.8810 -0.2231
+vn -0.7786 -0.4696 -0.4162
+vn -0.5611 0.7715 -0.2999
+vn -0.6831 -0.6326 -0.3651
+vn -0.6831 0.6326 -0.3651
+vn -0.5611 -0.7715 -0.2999
+vn -0.7786 0.4696 -0.4162
+vn -0.3658 0.8810 -0.3002
+vn -0.6825 -0.4696 -0.5601
+vn -0.4918 0.7715 -0.4036
+vn -0.5987 -0.6326 -0.4913
+vn -0.5987 0.6326 -0.4913
+vn -0.4918 -0.7715 -0.4036
+vn -0.6825 0.4696 -0.5601
+vn -0.3658 -0.8810 -0.3002
+vn -0.7400 0.2890 -0.6073
+vn -0.2254 -0.9566 -0.1850
+vn -0.7693 0.0975 -0.6314
+vn -0.7693 -0.0976 -0.6314
+vn -0.2254 0.9565 -0.1850
+vn -0.7400 -0.2890 -0.6073
+vn -0.6073 0.2890 -0.7400
+vn -0.1850 -0.9565 -0.2254
+vn -0.6314 0.0976 -0.7693
+vn -0.6314 -0.0976 -0.7693
+vn -0.1850 0.9566 -0.2254
+vn -0.6073 -0.2890 -0.7400
+vn -0.3002 0.8810 -0.3658
+vn -0.5601 -0.4696 -0.6825
+vn -0.4036 0.7715 -0.4918
+vn -0.4913 -0.6326 -0.5987
+vn -0.4913 0.6326 -0.5987
+vn -0.4036 -0.7715 -0.4918
+vn -0.5601 0.4696 -0.6825
+vn -0.3002 -0.8810 -0.3658
+vn -0.4162 -0.4696 -0.7786
+vn -0.2999 0.7715 -0.5611
+vn -0.3651 -0.6326 -0.6831
+vn -0.3651 0.6326 -0.6831
+vn -0.2999 -0.7715 -0.5611
+vn -0.4162 0.4696 -0.7786
+vn -0.2230 -0.8810 -0.4173
+vn -0.4513 0.2890 -0.8443
+vn -0.1374 -0.9566 -0.2571
+vn -0.4691 0.0975 -0.8777
+vn -0.4692 -0.0976 -0.8777
+vn -0.1374 0.9565 -0.2571
+vn -0.4513 -0.2890 -0.8443
+vn -0.2231 0.8810 -0.4173
+vn -0.0846 -0.9565 -0.2790
+vn -0.2889 0.0975 -0.9524
+vn -0.2889 -0.0976 -0.9524
+vn -0.0846 0.9566 -0.2790
+vn -0.2779 -0.2890 -0.9161
+vn -0.1374 0.8810 -0.4528
+vn -0.2563 -0.4696 -0.8449
+vn -0.1847 0.7715 -0.6088
+vn -0.2248 -0.6326 -0.7412
+vn -0.2248 0.6326 -0.7412
+vn -0.1847 -0.7715 -0.6088
+vn -0.2563 0.4696 -0.8449
+vn -0.1374 -0.8810 -0.4528
+vn -0.2779 0.2890 -0.9161
+vn -0.0759 -0.6326 -0.7708
+vn -0.0759 0.6326 -0.7708
+vn -0.0624 -0.7715 -0.6332
+vn -0.0865 0.4696 -0.8786
+vn -0.0464 -0.8810 -0.4709
+vn -0.0938 0.2890 -0.9527
+vn -0.0286 -0.9566 -0.2902
+vn -0.0975 0.0976 -0.9904
+vn -0.0975 -0.0976 -0.9904
+vn -0.0286 0.9565 -0.2902
+vn -0.0938 -0.2890 -0.9527
+vn -0.0464 0.8810 -0.4709
+vn -0.0865 -0.4696 -0.8786
+vn -0.0624 0.7715 -0.6332
+vn 0.0976 -0.0976 -0.9904
+vn 0.0286 0.9565 -0.2902
+vn 0.0938 -0.2890 -0.9527
+vn 0.0464 0.8810 -0.4709
+vn 0.0865 -0.4696 -0.8786
+vn 0.0624 0.7715 -0.6332
+vn 0.0759 -0.6326 -0.7708
+vn 0.0759 0.6326 -0.7708
+vn 0.0624 -0.7715 -0.6332
+vn 0.0865 0.4696 -0.8786
+vn 0.0464 -0.8810 -0.4709
+vn 0.0938 0.2890 -0.9527
+vn 0.0286 -0.9566 -0.2902
+vn 0.0975 0.0976 -0.9904
+vn 0.2248 0.6326 -0.7412
+vn 0.1847 -0.7715 -0.6088
+vn 0.2563 0.4696 -0.8448
+vn 0.1374 -0.8810 -0.4528
+vn 0.2779 0.2890 -0.9161
+vn 0.0846 -0.9566 -0.2790
+vn 0.2889 0.0976 -0.9524
+vn 0.2889 -0.0976 -0.9524
+vn 0.0846 0.9565 -0.2790
+vn 0.2779 -0.2890 -0.9161
+vn 0.1374 0.8810 -0.4528
+vn 0.2563 -0.4696 -0.8448
+vn 0.1847 0.7715 -0.6088
+vn 0.2248 -0.6326 -0.7412
+vn 0.4692 -0.0976 -0.8777
+vn 0.1374 0.9565 -0.2571
+vn 0.4513 -0.2890 -0.8443
+vn 0.2231 0.8810 -0.4173
+vn 0.4162 -0.4696 -0.7786
+vn 0.2999 0.7715 -0.5611
+vn 0.3651 -0.6326 -0.6831
+vn 0.3651 0.6326 -0.6831
+vn 0.2999 -0.7715 -0.5611
+vn 0.4162 0.4696 -0.7786
+vn 0.2231 -0.8810 -0.4173
+vn 0.4513 0.2890 -0.8443
+vn 0.1374 -0.9565 -0.2571
+vn 0.4691 0.0975 -0.8777
+vn 0.4036 -0.7715 -0.4918
+vn 0.5601 0.4696 -0.6825
+vn 0.3002 -0.8810 -0.3658
+vn 0.6073 0.2890 -0.7400
+vn 0.1850 -0.9566 -0.2254
+vn 0.6314 0.0976 -0.7693
+vn 0.6314 -0.0976 -0.7693
+vn 0.1850 0.9565 -0.2254
+vn 0.6073 -0.2890 -0.7400
+vn 0.3002 0.8810 -0.3658
+vn 0.5601 -0.4696 -0.6825
+vn 0.4036 0.7715 -0.4918
+vn 0.4913 -0.6326 -0.5987
+vn 0.4913 0.6326 -0.5987
+vn 0.2254 0.9565 -0.1850
+vn 0.7400 -0.2890 -0.6073
+vn 0.3658 0.8810 -0.3002
+vn 0.6825 -0.4696 -0.5601
+vn 0.4918 0.7715 -0.4036
+vn 0.5987 -0.6326 -0.4913
+vn 0.5987 0.6326 -0.4913
+vn 0.4918 -0.7715 -0.4036
+vn 0.6825 0.4696 -0.5601
+vn 0.3658 -0.8810 -0.3002
+vn 0.7400 0.2890 -0.6073
+vn 0.2254 -0.9565 -0.1850
+vn 0.7693 0.0976 -0.6314
+vn 0.7693 -0.0976 -0.6314
+vn 0.7786 0.4696 -0.4162
+vn 0.4173 -0.8810 -0.2231
+vn 0.8443 0.2890 -0.4513
+vn 0.2571 -0.9566 -0.1374
+vn 0.8777 0.0976 -0.4692
+vn 0.8777 -0.0976 -0.4691
+vn 0.2571 0.9566 -0.1374
+vn 0.8443 -0.2890 -0.4513
+vn 0.4173 0.8810 -0.2230
+vn 0.7786 -0.4696 -0.4162
+vn 0.5611 0.7715 -0.2999
+vn 0.6831 -0.6326 -0.3651
+vn 0.6831 0.6326 -0.3651
+vn 0.5611 -0.7715 -0.2999
+vn 0.9161 -0.2890 -0.2779
+vn 0.4528 0.8810 -0.1374
+vn 0.8448 -0.4696 -0.2563
+vn 0.6088 0.7715 -0.1847
+vn 0.7412 -0.6326 -0.2248
+vn 0.7412 0.6326 -0.2248
+vn 0.6088 -0.7715 -0.1847
+vn 0.8448 0.4696 -0.2563
+vn 0.4528 -0.8810 -0.1373
+vn 0.9161 0.2890 -0.2779
+vn 0.2790 -0.9566 -0.0846
+vn 0.9524 0.0976 -0.2889
+vn 0.9524 -0.0976 -0.2889
+vn 0.2790 0.9565 -0.0846
+vn 0.4709 -0.8810 -0.0464
+vn 0.9527 0.2890 -0.0938
+vn 0.2902 -0.9565 -0.0286
+vn 0.9904 0.0976 -0.0975
+vn 0.9904 -0.0976 -0.0975
+vn 0.2902 0.9565 -0.0286
+vn 0.9527 -0.2890 -0.0938
+vn 0.4709 0.8810 -0.0464
+vn 0.8786 -0.4696 -0.0865
+vn 0.6332 0.7715 -0.0624
+vn 0.7708 -0.6326 -0.0759
+vn 0.7708 0.6326 -0.0759
+vn 0.6332 -0.7715 -0.0624
+vn 0.8786 0.4696 -0.0865
+vn 0.8786 -0.4696 0.0865
+vn 0.6332 0.7715 0.0624
+vn 0.7708 -0.6326 0.0759
+vn 0.7708 0.6326 0.0759
+vn 0.6332 -0.7715 0.0624
+vn 0.8786 0.4696 0.0865
+vn 0.4709 -0.8810 0.0464
+vn 0.9527 0.2890 0.0938
+vn 0.2902 -0.9566 0.0286
+vn 0.9904 0.0976 0.0976
+vn 0.9904 -0.0976 0.0976
+vn 0.2902 0.9565 0.0286
+vn 0.9527 -0.2890 0.0938
+vn 0.4709 0.8810 0.0464
+vn 0.2790 -0.9565 0.0846
+vn 0.9524 0.0976 0.2889
+vn 0.9524 -0.0976 0.2889
+vn 0.2790 0.9565 0.0846
+vn 0.9161 -0.2890 0.2779
+vn 0.4528 0.8810 0.1373
+vn 0.8448 -0.4696 0.2563
+vn 0.6088 0.7715 0.1847
+vn 0.7412 -0.6326 0.2248
+vn 0.7412 0.6326 0.2248
+vn 0.6088 -0.7715 0.1847
+vn 0.8448 0.4696 0.2563
+vn 0.4528 -0.8810 0.1373
+vn 0.9161 0.2890 0.2779
+vn 0.5611 0.7715 0.2999
+vn 0.6831 -0.6326 0.3651
+vn 0.6831 0.6326 0.3651
+vn 0.5611 -0.7715 0.2999
+vn 0.7786 0.4696 0.4162
+vn 0.4173 -0.8810 0.2231
+vn 0.8443 0.2890 0.4513
+vn 0.2571 -0.9566 0.1374
+vn 0.8777 0.0975 0.4692
+vn 0.8777 -0.0976 0.4691
+vn 0.2571 0.9566 0.1374
+vn 0.8443 -0.2890 0.4513
+vn 0.4173 0.8810 0.2230
+vn 0.7786 -0.4696 0.4162
+vn 0.7693 0.0976 0.6314
+vn 0.7693 -0.0975 0.6314
+vn 0.2254 0.9565 0.1850
+vn 0.7400 -0.2890 0.6073
+vn 0.3658 0.8810 0.3002
+vn 0.6825 -0.4696 0.5601
+vn 0.4918 0.7715 0.4036
+vn 0.5987 -0.6326 0.4913
+vn 0.5987 0.6326 0.4913
+vn 0.4918 -0.7715 0.4036
+vn 0.6825 0.4696 0.5601
+vn 0.3658 -0.8810 0.3002
+vn 0.7400 0.2890 0.6073
+vn 0.2254 -0.9565 0.1850
+vn 0.4913 -0.6326 0.5987
+vn 0.4913 0.6326 0.5987
+vn 0.4036 -0.7715 0.4918
+vn 0.5601 0.4696 0.6825
+vn 0.3002 -0.8810 0.3658
+vn 0.6073 0.2890 0.7400
+vn 0.1850 -0.9565 0.2254
+vn 0.6314 0.0976 0.7693
+vn 0.6314 -0.0976 0.7693
+vn 0.1850 0.9565 0.2254
+vn 0.6073 -0.2890 0.7400
+vn 0.3002 0.8810 0.3658
+vn 0.5601 -0.4696 0.6825
+vn 0.4036 0.7715 0.4918
+vn 0.4692 -0.0976 0.8777
+vn 0.1374 0.9566 0.2571
+vn 0.4513 -0.2890 0.8443
+vn 0.2231 0.8810 0.4173
+vn 0.4162 -0.4696 0.7786
+vn 0.2999 0.7715 0.5611
+vn 0.3651 -0.6326 0.6831
+vn 0.3651 0.6326 0.6831
+vn 0.2999 -0.7715 0.5611
+vn 0.4162 0.4696 0.7786
+vn 0.2230 -0.8810 0.4173
+vn 0.4513 0.2890 0.8443
+vn 0.1374 -0.9565 0.2571
+vn 0.4691 0.0975 0.8777
+vn 0.2248 0.6326 0.7412
+vn 0.1847 -0.7715 0.6088
+vn 0.2563 0.4696 0.8448
+vn 0.1374 -0.8810 0.4528
+vn 0.2779 0.2890 0.9161
+vn 0.0846 -0.9565 0.2790
+vn 0.2889 0.0976 0.9524
+vn 0.2889 -0.0976 0.9524
+vn 0.0846 0.9565 0.2790
+vn 0.2779 -0.2890 0.9161
+vn 0.1374 0.8810 0.4528
+vn 0.2563 -0.4696 0.8448
+vn 0.1847 0.7715 0.6088
+vn 0.2248 -0.6326 0.7412
+vn 0.0975 -0.0976 0.9904
+vn 0.0286 0.9565 0.2902
+vn 0.0938 -0.2890 0.9527
+vn 0.0464 0.8810 0.4709
+vn 0.0865 -0.4696 0.8786
+vn 0.0624 0.7715 0.6332
+vn 0.0759 -0.6326 0.7708
+vn 0.0759 0.6326 0.7708
+vn 0.0624 -0.7715 0.6332
+vn 0.0865 0.4696 0.8786
+vn 0.0464 -0.8810 0.4709
+vn 0.0938 0.2890 0.9527
+vn 0.0286 -0.9566 0.2902
+vn 0.0975 0.0976 0.9904
+vn -0.0624 -0.7715 0.6332
+vn -0.0865 0.4696 0.8786
+vn -0.0464 -0.8810 0.4709
+vn -0.0938 0.2890 0.9527
+vn -0.0286 -0.9566 0.2902
+vn -0.0975 0.0975 0.9904
+vn -0.0976 -0.0976 0.9904
+vn -0.0286 0.9565 0.2902
+vn -0.0938 -0.2890 0.9527
+vn -0.0464 0.8810 0.4709
+vn -0.0865 -0.4696 0.8786
+vn -0.0624 0.7715 0.6332
+vn -0.0759 -0.6326 0.7708
+vn -0.0759 0.6326 0.7708
+vn -0.2779 -0.2890 0.9161
+vn -0.1374 0.8810 0.4528
+vn -0.2563 -0.4696 0.8449
+vn -0.1847 0.7715 0.6088
+vn -0.2248 -0.6326 0.7412
+vn -0.2248 0.6326 0.7412
+vn -0.1847 -0.7715 0.6088
+vn -0.2563 0.4696 0.8448
+vn -0.1374 -0.8810 0.4528
+vn -0.2779 0.2890 0.9161
+vn -0.0846 -0.9565 0.2790
+vn -0.2889 0.0976 0.9524
+vn -0.2889 -0.0976 0.9524
+vn -0.0846 0.9565 0.2790
+vn -0.2231 -0.8810 0.4173
+vn -0.4513 0.2890 0.8443
+vn -0.1374 -0.9566 0.2571
+vn -0.4691 0.0976 0.8777
+vn -0.4691 -0.0976 0.8777
+vn -0.1374 0.9566 0.2571
+vn -0.4513 -0.2890 0.8443
+vn -0.2231 0.8810 0.4173
+vn -0.4162 -0.4696 0.7786
+vn -0.2999 0.7715 0.5611
+vn -0.3651 -0.6326 0.6831
+vn -0.3651 0.6326 0.6830
+vn -0.2999 -0.7715 0.5611
+vn -0.4162 0.4696 0.7786
+vn -0.3002 0.8810 0.3658
+vn -0.5601 -0.4696 0.6825
+vn -0.4036 0.7715 0.4918
+vn -0.4913 -0.6326 0.5987
+vn -0.4913 0.6326 0.5987
+vn -0.4036 -0.7715 0.4918
+vn -0.5601 0.4696 0.6825
+vn -0.3002 -0.8810 0.3658
+vn -0.6073 0.2890 0.7400
+vn -0.1850 -0.9565 0.2254
+vn -0.6314 0.0976 0.7693
+vn -0.6314 -0.0976 0.7693
+vn -0.1850 0.9565 0.2254
+vn -0.6073 -0.2890 0.7400
+vn -0.7400 0.2890 0.6073
+vn -0.2254 -0.9565 0.1850
+vn -0.7693 0.0976 0.6314
+vn -0.7693 -0.0976 0.6314
+vn -0.2254 0.9566 0.1850
+vn -0.7400 -0.2890 0.6073
+vn -0.3658 0.8810 0.3002
+vn -0.6825 -0.4696 0.5601
+vn -0.4918 0.7715 0.4036
+vn -0.5987 -0.6326 0.4913
+vn -0.5987 0.6326 0.4913
+vn -0.4918 -0.7715 0.4036
+vn -0.6825 0.4696 0.5601
+vn -0.3658 -0.8810 0.3002
+vn -0.7786 -0.4696 0.4162
+vn -0.5611 0.7715 0.2999
+vn -0.6831 -0.6326 0.3651
+vn -0.6831 0.6326 0.3651
+vn -0.5611 -0.7715 0.2999
+vn -0.7786 0.4696 0.4162
+vn -0.4173 -0.8810 0.2231
+vn -0.8443 0.2890 0.4513
+vn -0.2571 -0.9565 0.1375
+vn -0.8777 0.0976 0.4692
+vn -0.8777 -0.0976 0.4691
+vn -0.2571 0.9565 0.1375
+vn -0.8443 -0.2890 0.4513
+vn -0.4173 0.8810 0.2231
+vn -0.2790 -0.9566 0.0846
+vn -0.9524 0.0976 0.2889
+vn -0.9524 -0.0976 0.2889
+vn -0.2790 0.9565 0.0846
+vn -0.9161 -0.2890 0.2779
+vn -0.4528 0.8810 0.1374
+vn -0.8448 -0.4696 0.2563
+vn -0.6088 0.7715 0.1847
+vn -0.7412 -0.6326 0.2248
+vn -0.7412 0.6326 0.2248
+vn -0.6088 -0.7715 0.1847
+vn -0.8448 0.4696 0.2563
+vn -0.4528 -0.8810 0.1374
+vn -0.9161 0.2890 0.2779
+vn -0.0980 0.9951 -0.0096
+vn -0.0980 -0.9951 -0.0096
+vn -0.0942 0.9951 -0.0286
+vn -0.0942 -0.9951 -0.0286
+vn -0.0869 0.9951 -0.0464
+vn -0.0869 -0.9951 -0.0464
+vn -0.0761 0.9951 -0.0625
+vn -0.0761 -0.9951 -0.0624
+vn -0.0625 0.9951 -0.0761
+vn -0.0625 -0.9951 -0.0761
+vn -0.0464 0.9951 -0.0868
+vn -0.0464 -0.9951 -0.0869
+vn -0.0286 0.9951 -0.0942
+vn -0.0286 -0.9951 -0.0942
+vn -0.0097 0.9951 -0.0980
+vn -0.0097 -0.9951 -0.0980
+vn 0.0097 0.9951 -0.0980
+vn 0.0097 -0.9951 -0.0980
+vn 0.0286 0.9951 -0.0942
+vn 0.0286 -0.9951 -0.0942
+vn 0.0464 0.9951 -0.0868
+vn 0.0464 -0.9951 -0.0869
+vn 0.0625 0.9951 -0.0761
+vn 0.0625 -0.9951 -0.0761
+vn 0.0761 0.9951 -0.0625
+vn 0.0761 -0.9951 -0.0624
+vn 0.0869 0.9951 -0.0465
+vn 0.0869 -0.9951 -0.0464
+vn 0.0942 0.9951 -0.0286
+vn 0.0942 -0.9951 -0.0286
+vn 0.0980 0.9951 -0.0096
+vn 0.0980 -0.9951 -0.0096
+vn 0.0980 0.9951 0.0096
+vn 0.0980 -0.9951 0.0096
+vn 0.0942 0.9951 0.0286
+vn 0.0942 -0.9951 0.0286
+vn 0.0869 0.9951 0.0465
+vn 0.0869 -0.9951 0.0464
+vn 0.0761 0.9951 0.0625
+vn 0.0761 -0.9951 0.0624
+vn 0.0625 0.9951 0.0761
+vn 0.0625 -0.9951 0.0761
+vn 0.0464 0.9951 0.0869
+vn 0.0464 -0.9951 0.0869
+vn 0.0286 0.9951 0.0942
+vn 0.0286 -0.9951 0.0942
+vn 0.0097 0.9951 0.0980
+vn 0.0097 -0.9951 0.0980
+vn -0.0097 0.9951 0.0980
+vn -0.0097 -0.9951 0.0980
+vn -0.0286 0.9951 0.0942
+vn -0.0286 -0.9951 0.0942
+vn -0.0464 0.9951 0.0868
+vn -0.0464 -0.9951 0.0869
+vn -0.0625 0.9951 0.0761
+vn -0.0625 -0.9951 0.0761
+vn -0.0761 0.9951 0.0625
+vn -0.0761 -0.9951 0.0625
+vn -0.0869 0.9951 0.0464
+vn -0.0869 -0.9951 0.0464
+vn -0.0942 0.9951 0.0286
+vn -0.0942 -0.9951 0.0286
+vn -0.6332 0.7715 0.0624
+vn -0.7708 -0.6326 0.0759
+vn -0.7708 0.6326 0.0759
+vn -0.6332 -0.7715 0.0624
+vn -0.8786 0.4696 0.0865
+vn -0.4709 -0.8810 0.0464
+vn -0.9527 0.2890 0.0938
+vn -0.2902 -0.9565 0.0286
+vn -0.9904 0.0975 0.0976
+vn -0.0980 0.9951 0.0096
+vn -0.0980 -0.9951 0.0096
+vn -0.9904 -0.0975 0.0976
+vn -0.2902 0.9565 0.0286
+vn -0.9527 -0.2890 0.0938
+vn -0.4709 0.8810 0.0464
+vn -0.8786 -0.4696 0.0865
+vn -0.9904 0.0976 -0.0975
+vn -0.2790 -0.9565 -0.0846
+vn -0.9524 0.0976 -0.2889
+vn -0.4173 -0.8810 -0.2230
+vn -0.2571 -0.9566 -0.1374
+vn -0.8777 0.0976 -0.4691
+vn -0.8777 -0.0975 -0.4691
+vn -0.2571 0.9565 -0.1374
+vn -0.7693 0.0976 -0.6314
+vn -0.7693 -0.0975 -0.6314
+vn -0.1850 0.9565 -0.2254
+vn -0.2231 -0.8810 -0.4173
+vn -0.4691 0.0976 -0.8777
+vn -0.4691 -0.0976 -0.8777
+vn -0.2230 0.8810 -0.4173
+vn -0.2889 0.0976 -0.9524
+vn -0.2889 -0.0975 -0.9524
+vn -0.0846 0.9565 -0.2790
+vn -0.2563 -0.4696 -0.8448
+vn -0.2563 0.4696 -0.8448
+vn -0.0286 -0.9565 -0.2902
+vn -0.0975 -0.0975 -0.9904
+vn 0.0975 -0.0976 -0.9904
+vn 0.0286 0.9566 -0.2902
+vn 0.0286 -0.9565 -0.2902
+vn 0.0976 0.0976 -0.9904
+vn 0.0846 -0.9565 -0.2790
+vn 0.0846 0.9566 -0.2790
+vn 0.4691 -0.0975 -0.8777
+vn 0.1374 0.9566 -0.2571
+vn 0.2230 -0.8810 -0.4173
+vn 0.1374 -0.9566 -0.2571
+vn 0.4692 0.0976 -0.8777
+vn 0.1850 -0.9565 -0.2254
+vn 0.1850 0.9566 -0.2254
+vn 0.2254 -0.9566 -0.1850
+vn 0.4173 -0.8810 -0.2230
+vn 0.8777 0.0976 -0.4691
+vn 0.8777 -0.0976 -0.4692
+vn 0.2571 0.9565 -0.1374
+vn 0.4173 0.8810 -0.2231
+vn 0.4528 -0.8810 -0.1374
+vn 0.2790 -0.9565 -0.0847
+vn 0.2902 0.9566 -0.0286
+vn 0.2902 -0.9565 0.0286
+vn 0.2790 0.9566 0.0846
+vn 0.4528 0.8810 0.1374
+vn 0.4528 -0.8810 0.1374
+vn 0.4173 -0.8810 0.2230
+vn 0.2571 -0.9565 0.1375
+vn 0.8777 0.0976 0.4691
+vn 0.8777 -0.0975 0.4692
+vn 0.2571 0.9565 0.1375
+vn 0.7693 -0.0976 0.6314
+vn 0.2254 -0.9566 0.1850
+vn 0.1850 0.9566 0.2254
+vn 0.4691 -0.0976 0.8777
+vn 0.1374 0.9565 0.2571
+vn 0.2230 0.8810 0.4173
+vn 0.2231 -0.8810 0.4173
+vn 0.1374 -0.9566 0.2571
+vn 0.4692 0.0976 0.8777
+vn 0.0846 0.9566 0.2790
+vn 0.0286 0.9566 0.2902
+vn 0.0286 -0.9565 0.2902
+vn -0.0286 -0.9565 0.2902
+vn -0.0976 0.0976 0.9904
+vn -0.0975 -0.0976 0.9904
+vn -0.2563 -0.4696 0.8448
+vn -0.4692 0.0976 0.8777
+vn -0.3651 0.6326 0.6831
+vn -0.1850 0.9566 0.2254
+vn -0.2254 -0.9566 0.1850
+vn -0.2254 0.9565 0.1850
+vn -0.4173 -0.8810 0.2230
+vn -0.8777 0.0976 0.4691
+vn -0.2571 0.9565 0.1374
+vn -0.2790 -0.9565 0.0846
+vn -0.2790 0.9566 0.0846
+vn -0.4528 0.8810 0.1373
+usemtl None
+s off
+f 11//1 25//1 26//1
+f 3//2 19//2 4//2
+f 12//3 26//3 27//3
+f 4//4 20//4 5//4
+f 12//5 28//5 13//5
+f 5//6 21//6 6//6
+f 14//7 28//7 29//7
+f 6//8 22//8 7//8
+f 15//9 29//9 30//9
+f 7//10 23//10 8//10
+f 8//11 24//11 9//11
+f 1//12 17//12 2//12
+f 10//13 24//13 25//13
+f 2//14 18//14 3//14
+f 24//15 40//15 25//15
+f 17//16 33//16 18//16
+f 25//17 41//17 26//17
+f 19//18 33//18 34//18
+f 26//19 42//19 27//19
+f 20//20 34//20 35//20
+f 28//21 42//21 43//21
+f 20//22 36//22 21//22
+f 28//23 44//23 29//23
+f 22//24 36//24 37//24
+f 29//25 45//25 30//25
+f 23//26 37//26 38//26
+f 23//27 39//27 24//27
+f 16//28 32//28 17//28
+f 44//29 58//29 59//29
+f 37//30 51//30 52//30
+f 45//31 59//31 60//31
+f 37//32 53//32 38//32
+f 39//33 53//33 54//33
+f 31//34 47//34 32//34
+f 40//35 54//35 55//35
+f 33//36 47//36 48//36
+f 40//37 56//37 41//37
+f 33//38 49//38 34//38
+f 42//39 56//39 57//39
+f 34//40 50//40 35//40
+f 42//41 58//41 43//41
+f 35//42 51//42 36//42
+f 47//43 63//43 48//43
+f 56//44 70//44 71//44
+f 49//45 63//45 64//45
+f 57//46 71//46 72//46
+f 50//47 64//47 65//47
+f 58//48 72//48 73//48
+f 50//49 66//49 51//49
+f 58//50 74//50 59//50
+f 51//51 67//51 52//51
+f 59//52 75//52 60//52
+f 52//53 68//53 53//53
+f 54//54 68//54 69//54
+f 46//55 62//55 47//55
+f 54//56 70//56 55//56
+f 66//57 82//57 67//57
+f 75//58 89//58 90//58
+f 67//59 83//59 68//59
+f 69//60 83//60 84//60
+f 62//61 76//61 77//61
+f 69//62 85//62 70//62
+f 63//63 77//63 78//63
+f 71//64 85//64 86//64
+f 63//65 79//65 64//65
+f 71//66 87//66 72//66
+f 64//67 80//67 65//67
+f 72//68 88//68 73//68
+f 66//69 80//69 81//69
+f 73//70 89//70 74//70
+f 85//71 101//71 86//71
+f 78//72 94//72 79//72
+f 87//73 101//73 102//73
+f 79//74 95//74 80//74
+f 87//75 103//75 88//75
+f 81//76 95//76 96//76
+f 89//77 103//77 104//77
+f 81//78 97//78 82//78
+f 90//79 104//79 105//79
+f 82//80 98//80 83//80
+f 84//81 98//81 99//81
+f 77//82 91//82 92//82
+f 84//83 100//83 85//83
+f 77//84 93//84 78//84
+f 105//85 119//85 120//85
+f 97//86 113//86 98//86
+f 98//87 114//87 99//87
+f 92//88 106//88 107//88
+f 99//89 115//89 100//89
+f 92//90 108//90 93//90
+f 101//91 115//91 116//91
+f 93//92 109//92 94//92
+f 102//93 116//93 117//93
+f 94//94 110//94 95//94
+f 102//95 118//95 103//95
+f 95//96 111//96 96//96
+f 104//97 118//97 119//97
+f 97//98 111//98 112//98
+f 117//99 131//99 132//99
+f 110//100 124//100 125//100
+f 118//101 132//101 133//101
+f 111//102 125//102 126//102
+f 119//103 133//103 134//103
+f 112//104 126//104 127//104
+f 120//105 134//105 135//105
+f 112//106 128//106 113//106
+f 114//107 128//107 129//107
+f 106//108 122//108 107//108
+f 115//109 129//109 130//109
+f 107//110 123//110 108//110
+f 116//111 130//111 131//111
+f 109//112 123//112 124//112
+f 129//113 143//113 144//113
+f 122//114 136//114 137//114
+f 129//115 145//115 130//115
+f 122//116 138//116 123//116
+f 130//117 146//117 131//117
+f 124//118 138//118 139//118
+f 131//119 147//119 132//119
+f 125//120 139//120 140//120
+f 133//121 147//121 148//121
+f 125//122 141//122 126//122
+f 134//123 148//123 149//123
+f 127//124 141//124 142//124
+f 134//125 150//125 135//125
+f 128//126 142//126 143//126
+f 140//127 154//127 155//127
+f 147//128 163//128 148//128
+f 141//129 155//129 156//129
+f 148//130 164//130 149//130
+f 142//131 156//131 157//131
+f 150//132 164//132 165//132
+f 142//133 158//133 143//133
+f 144//134 158//134 159//134
+f 136//135 152//135 137//135
+f 145//136 159//136 160//136
+f 138//137 152//137 153//137
+f 146//138 160//138 161//138
+f 138//139 154//139 139//139
+f 146//140 162//140 147//140
+f 159//141 173//141 174//141
+f 151//142 167//142 152//142
+f 159//143 175//143 160//143
+f 152//144 168//144 153//144
+f 160//145 176//145 161//145
+f 153//146 169//146 154//146
+f 161//147 177//147 162//147
+f 155//148 169//148 170//148
+f 163//149 177//149 178//149
+f 156//150 170//150 171//150
+f 164//151 178//151 179//151
+f 157//152 171//152 172//152
+f 165//153 179//153 180//153
+f 157//154 173//154 158//154
+f 178//155 192//155 193//155
+f 170//156 186//156 171//156
+f 178//157 194//157 179//157
+f 171//158 187//158 172//158
+f 180//159 194//159 195//159
+f 173//160 187//160 188//160
+f 173//161 189//161 174//161
+f 167//162 181//162 182//162
+f 174//163 190//163 175//163
+f 167//164 183//164 168//164
+f 175//165 191//165 176//165
+f 169//166 183//166 184//166
+f 177//167 191//167 192//167
+f 170//168 184//168 185//168
+f 181//169 197//169 182//169
+f 189//170 205//170 190//170
+f 183//171 197//171 198//171
+f 191//172 205//172 206//172
+f 183//173 199//173 184//173
+f 191//174 207//174 192//174
+f 184//175 200//175 185//175
+f 192//176 208//176 193//176
+f 185//177 201//177 186//177
+f 193//178 209//178 194//178
+f 187//179 201//179 202//179
+f 195//180 209//180 210//180
+f 188//181 202//181 203//181
+f 188//182 204//182 189//182
+f 201//183 215//183 216//183
+f 209//184 223//184 224//184
+f 202//185 216//185 217//185
+f 210//186 224//186 225//186
+f 202//187 218//187 203//187
+f 204//188 218//188 219//188
+f 197//189 211//189 212//189
+f 204//190 220//190 205//190
+f 197//191 213//191 198//191
+f 206//192 220//192 221//192
+f 199//193 213//193 214//193
+f 206//194 222//194 207//194
+f 199//195 215//195 200//195
+f 207//196 223//196 208//196
+f 220//197 234//197 235//197
+f 212//198 228//198 213//198
+f 221//199 235//199 236//199
+f 214//200 228//200 229//200
+f 222//201 236//201 237//201
+f 214//202 230//202 215//202
+f 222//203 238//203 223//203
+f 215//204 231//204 216//204
+f 223//205 239//205 224//205
+f 216//206 232//206 217//206
+f 225//207 239//207 240//207
+f 217//208 233//208 218//208
+f 219//209 233//209 234//209
+f 211//210 227//210 212//210
+f 239//211 253//211 254//211
+f 231//212 247//212 232//212
+f 240//213 254//213 255//213
+f 233//214 247//214 248//214
+f 233//215 249//215 234//215
+f 226//216 242//216 227//216
+f 234//217 250//217 235//217
+f 228//218 242//218 243//218
+f 235//219 251//219 236//219
+f 228//220 244//220 229//220
+f 236//221 252//221 237//221
+f 229//222 245//222 230//222
+f 237//223 253//223 238//223
+f 230//224 246//224 231//224
+f 250//225 266//225 251//225
+f 243//226 259//226 244//226
+f 252//227 266//227 267//227
+f 245//228 259//228 260//228
+f 253//229 267//229 268//229
+f 245//230 261//230 246//230
+f 254//231 268//231 269//231
+f 246//232 262//232 247//232
+f 255//233 269//233 270//233
+f 247//234 263//234 248//234
+f 249//235 263//235 264//235
+f 241//236 257//236 242//236
+f 249//237 265//237 250//237
+f 243//238 257//238 258//238
+f 270//239 284//239 285//239
+f 263//240 277//240 278//240
+f 263//241 279//241 264//241
+f 257//242 271//242 272//242
+f 265//243 279//243 280//243
+f 257//244 273//244 258//244
+f 265//245 281//245 266//245
+f 258//246 274//246 259//246
+f 266//247 282//247 267//247
+f 260//248 274//248 275//248
+f 268//249 282//249 283//249
+f 260//250 276//250 261//250
+f 269//251 283//251 284//251
+f 262//252 276//252 277//252
+f 274//253 288//253 289//253
+f 281//254 297//254 282//254
+f 275//255 289//255 290//255
+f 283//256 297//256 298//256
+f 275//257 291//257 276//257
+f 283//258 299//258 284//258
+f 277//259 291//259 292//259
+f 284//260 300//260 285//260
+f 278//261 292//261 293//261
+f 278//262 294//262 279//262
+f 272//263 286//263 287//263
+f 280//264 294//264 295//264
+f 273//265 287//265 288//265
+f 281//266 295//266 296//266
+f 292//267 308//267 293//267
+f 293//268 309//268 294//268
+f 286//269 302//269 287//269
+f 294//270 310//270 295//270
+f 287//271 303//271 288//271
+f 296//272 310//272 311//272
+f 288//273 304//273 289//273
+f 297//274 311//274 312//274
+f 289//275 305//275 290//275
+f 297//276 313//276 298//276
+f 290//277 306//277 291//277
+f 299//278 313//278 314//278
+f 292//279 306//279 307//279
+f 300//280 314//280 315//280
+f 311//281 327//281 312//281
+f 304//282 320//282 305//282
+f 312//283 328//283 313//283
+f 305//284 321//284 306//284
+f 314//285 328//285 329//285
+f 306//286 322//286 307//286
+f 314//287 330//287 315//287
+f 307//288 323//288 308//288
+f 308//289 324//289 309//289
+f 301//290 317//290 302//290
+f 309//291 325//291 310//291
+f 302//292 318//292 303//292
+f 310//293 326//293 311//293
+f 303//294 319//294 304//294
+f 324//295 339//295 340//295
+f 316//296 333//296 317//296
+f 325//297 340//297 341//297
+f 317//298 334//298 318//298
+f 325//299 342//299 326//299
+f 319//300 334//300 335//300
+f 326//301 343//301 327//301
+f 320//302 335//302 336//302
+f 328//303 343//303 344//303
+f 320//304 337//304 321//304
+f 328//305 345//305 329//305
+f 321//306 338//306 322//306
+f 329//307 346//307 330//307
+f 322//308 339//308 323//308
+f 336//309 350//309 351//309
+f 343//310 359//310 344//310
+f 336//311 352//311 337//311
+f 344//312 360//312 345//312
+f 338//313 352//313 353//313
+f 345//314 361//314 346//314
+f 338//315 354//315 339//315
+f 340//316 354//316 355//316
+f 333//317 347//317 348//317
+f 341//318 355//318 356//318
+f 334//319 348//319 349//319
+f 341//320 357//320 342//320
+f 335//321 349//321 350//321
+f 343//322 357//322 358//322
+f 355//323 369//323 370//323
+f 347//324 363//324 348//324
+f 355//325 371//325 356//325
+f 349//326 363//326 364//326
+f 356//327 372//327 357//327
+f 349//328 365//328 350//328
+f 357//329 373//329 358//329
+f 351//330 365//330 366//330
+f 359//331 373//331 374//331
+f 351//332 367//332 352//332
+f 359//333 375//333 360//333
+f 352//334 368//334 353//334
+f 361//335 375//335 376//335
+f 354//336 368//336 369//336
+f 373//337 389//337 374//337
+f 366//338 382//338 367//338
+f 375//339 389//339 390//339
+f 367//340 383//340 368//340
+f 375//341 391//341 376//341
+f 368//342 384//342 369//342
+f 370//343 384//343 385//343
+f 363//344 377//344 378//344
+f 370//345 386//345 371//345
+f 364//346 378//346 379//346
+f 372//347 386//347 387//347
+f 365//348 379//348 380//348
+f 372//349 388//349 373//349
+f 366//350 380//350 381//350
+f 385//351 401//351 386//351
+f 379//352 393//352 394//352
+f 386//353 402//353 387//353
+f 379//354 395//354 380//354
+f 388//355 402//355 403//355
+f 381//356 395//356 396//356
+f 389//357 403//357 404//357
+f 381//358 397//358 382//358
+f 389//359 405//359 390//359
+f 383//360 397//360 398//360
+f 390//361 406//361 391//361
+f 383//362 399//362 384//362
+f 384//363 400//363 385//363
+f 377//364 393//364 378//364
+f 404//365 420//365 405//365
+f 398//366 412//366 413//366
+f 405//367 421//367 406//367
+f 398//368 414//368 399//368
+f 399//369 415//369 400//369
+f 392//370 408//370 393//370
+f 401//371 415//371 416//371
+f 394//372 408//372 409//372
+f 402//373 416//373 417//373
+f 395//374 409//374 410//374
+f 403//375 417//375 418//375
+f 395//376 411//376 396//376
+f 403//377 419//377 404//377
+f 396//378 412//378 397//378
+f 408//379 424//379 409//379
+f 417//380 431//380 432//380
+f 410//381 424//381 425//381
+f 417//382 433//382 418//382
+f 410//383 426//383 411//383
+f 418//384 434//384 419//384
+f 411//385 427//385 412//385
+f 420//386 434//386 435//386
+f 412//387 428//387 413//387
+f 420//388 436//388 421//388
+f 414//389 428//389 429//389
+f 414//390 430//390 415//390
+f 407//391 423//391 408//391
+f 415//392 431//392 416//392
+f 428//393 442//393 443//393
+f 435//394 451//394 436//394
+f 429//395 443//395 444//395
+f 429//396 445//396 430//396
+f 422//397 438//397 423//397
+f 431//398 445//398 446//398
+f 423//399 439//399 424//399
+f 432//400 446//400 447//400
+f 424//401 440//401 425//401
+f 432//402 448//402 433//402
+f 426//403 440//403 441//403
+f 434//404 448//404 449//404
+f 426//405 442//405 427//405
+f 435//406 449//406 450//406
+f 447//407 462//407 463//407
+f 439//408 456//408 440//408
+f 448//409 463//409 464//409
+f 440//410 457//410 441//410
+f 448//411 465//411 449//411
+f 441//412 458//412 442//412
+f 449//413 466//413 450//413
+f 443//414 458//414 459//414
+f 450//415 467//415 451//415
+f 444//416 459//416 460//416
+f 444//417 461//417 445//417
+f 438//418 453//418 454//418
+f 445//419 462//419 446//419
+f 438//420 455//420 439//420
+f 466//421 482//421 467//421
+f 459//422 475//422 460//422
+f 461//423 475//423 476//423
+f 453//424 469//424 454//424
+f 461//425 477//425 462//425
+f 454//426 470//426 455//426
+f 463//427 477//427 478//427
+f 456//428 470//428 471//428
+f 463//429 479//429 464//429
+f 456//430 472//430 457//430
+f 464//431 480//431 465//431
+f 457//432 473//432 458//432
+f 466//433 480//433 481//433
+f 459//434 473//434 474//434
+f 1//435 452//435 16//435
+f 331//436 15//436 30//436
+f 16//437 452//437 31//437
+f 331//438 30//438 45//438
+f 31//439 452//439 46//439
+f 331//440 45//440 60//440
+f 46//441 452//441 61//441
+f 331//442 60//442 75//442
+f 61//443 452//443 76//443
+f 331//444 75//444 90//444
+f 76//445 452//445 91//445
+f 331//446 90//446 105//446
+f 91//447 452//447 106//447
+f 331//448 105//448 120//448
+f 106//449 452//449 121//449
+f 331//450 120//450 135//450
+f 121//451 452//451 136//451
+f 331//452 135//452 150//452
+f 136//453 452//453 151//453
+f 331//454 150//454 165//454
+f 151//455 452//455 166//455
+f 331//456 165//456 180//456
+f 166//457 452//457 181//457
+f 331//458 180//458 195//458
+f 181//459 452//459 196//459
+f 331//460 195//460 210//460
+f 196//461 452//461 211//461
+f 331//462 210//462 225//462
+f 211//463 452//463 226//463
+f 331//464 225//464 240//464
+f 226//465 452//465 241//465
+f 331//466 240//466 255//466
+f 241//467 452//467 256//467
+f 331//468 255//468 270//468
+f 256//469 452//469 271//469
+f 331//470 270//470 285//470
+f 271//471 452//471 286//471
+f 331//472 285//472 300//472
+f 286//473 452//473 301//473
+f 331//474 300//474 315//474
+f 301//475 452//475 316//475
+f 331//476 315//476 330//476
+f 316//477 452//477 332//477
+f 331//478 330//478 346//478
+f 332//479 452//479 347//479
+f 331//480 346//480 361//480
+f 347//481 452//481 362//481
+f 331//482 361//482 376//482
+f 362//483 452//483 377//483
+f 331//484 376//484 391//484
+f 377//485 452//485 392//485
+f 331//486 391//486 406//486
+f 392//487 452//487 407//487
+f 331//488 406//488 421//488
+f 407//489 452//489 422//489
+f 331//490 421//490 436//490
+f 422//491 452//491 437//491
+f 331//492 436//492 451//492
+f 437//493 452//493 453//493
+f 331//494 451//494 467//494
+f 453//495 452//495 468//495
+f 331//496 467//496 482//496
+f 471//497 3//497 4//497
+f 478//498 12//498 479//498
+f 472//499 4//499 5//499
+f 479//500 13//500 480//500
+f 473//501 5//501 6//501
+f 480//502 14//502 481//502
+f 474//503 6//503 7//503
+f 481//504 15//504 482//504
+f 475//505 7//505 8//505
+f 468//506 452//506 1//506
+f 331//507 482//507 15//507
+f 476//508 8//508 9//508
+f 469//509 1//509 2//509
+f 476//510 10//510 477//510
+f 470//511 2//511 3//511
+f 477//512 11//512 478//512
+f 11//1 10//1 25//1
+f 3//2 18//2 19//2
+f 12//3 11//3 26//3
+f 4//4 19//4 20//4
+f 12//5 27//5 28//5
+f 5//6 20//6 21//6
+f 14//7 13//7 28//7
+f 6//8 21//8 22//8
+f 15//9 14//9 29//9
+f 7//513 22//513 23//513
+f 8//11 23//11 24//11
+f 1//12 16//12 17//12
+f 10//13 9//13 24//13
+f 2//14 17//14 18//14
+f 24//15 39//15 40//15
+f 17//16 32//16 33//16
+f 25//17 40//17 41//17
+f 19//18 18//18 33//18
+f 26//19 41//19 42//19
+f 20//20 19//20 34//20
+f 28//21 27//21 42//21
+f 20//22 35//22 36//22
+f 28//23 43//23 44//23
+f 22//24 21//24 36//24
+f 29//514 44//514 45//514
+f 23//515 22//515 37//515
+f 23//27 38//27 39//27
+f 16//28 31//28 32//28
+f 44//516 43//516 58//516
+f 37//30 36//30 51//30
+f 45//517 44//517 59//517
+f 37//518 52//518 53//518
+f 39//519 38//519 53//519
+f 31//520 46//520 47//520
+f 40//35 39//35 54//35
+f 33//36 32//36 47//36
+f 40//37 55//37 56//37
+f 33//38 48//38 49//38
+f 42//39 41//39 56//39
+f 34//40 49//40 50//40
+f 42//41 57//41 58//41
+f 35//42 50//42 51//42
+f 47//43 62//43 63//43
+f 56//44 55//44 70//44
+f 49//45 48//45 63//45
+f 57//46 56//46 71//46
+f 50//47 49//47 64//47
+f 58//48 57//48 72//48
+f 50//49 65//49 66//49
+f 58//50 73//50 74//50
+f 51//51 66//51 67//51
+f 59//52 74//52 75//52
+f 52//521 67//521 68//521
+f 54//522 53//522 68//522
+f 46//55 61//55 62//55
+f 54//56 69//56 70//56
+f 66//57 81//57 82//57
+f 75//58 74//58 89//58
+f 67//59 82//59 83//59
+f 69//60 68//60 83//60
+f 62//523 61//523 76//523
+f 69//62 84//62 85//62
+f 63//63 62//63 77//63
+f 71//64 70//64 85//64
+f 63//65 78//65 79//65
+f 71//66 86//66 87//66
+f 64//67 79//67 80//67
+f 72//68 87//68 88//68
+f 66//69 65//69 80//69
+f 73//70 88//70 89//70
+f 85//71 100//71 101//71
+f 78//72 93//72 94//72
+f 87//73 86//73 101//73
+f 79//74 94//74 95//74
+f 87//75 102//75 103//75
+f 81//76 80//76 95//76
+f 89//524 88//524 103//524
+f 81//78 96//78 97//78
+f 90//79 89//79 104//79
+f 82//525 97//525 98//525
+f 84//526 83//526 98//526
+f 77//82 76//82 91//82
+f 84//83 99//83 100//83
+f 77//527 92//527 93//527
+f 105//85 104//85 119//85
+f 97//528 112//528 113//528
+f 98//529 113//529 114//529
+f 92//530 91//530 106//530
+f 99//89 114//89 115//89
+f 92//90 107//90 108//90
+f 101//531 100//531 115//531
+f 93//92 108//92 109//92
+f 102//93 101//93 116//93
+f 94//94 109//94 110//94
+f 102//95 117//95 118//95
+f 95//532 110//532 111//532
+f 104//97 103//97 118//97
+f 97//98 96//98 111//98
+f 117//99 116//99 131//99
+f 110//100 109//100 124//100
+f 118//101 117//101 132//101
+f 111//102 110//102 125//102
+f 119//103 118//103 133//103
+f 112//104 111//104 126//104
+f 120//533 119//533 134//533
+f 112//106 127//106 128//106
+f 114//534 113//534 128//534
+f 106//108 121//108 122//108
+f 115//109 114//109 129//109
+f 107//110 122//110 123//110
+f 116//111 115//111 130//111
+f 109//112 108//112 123//112
+f 129//535 128//535 143//535
+f 122//536 121//536 136//536
+f 129//115 144//115 145//115
+f 122//116 137//116 138//116
+f 130//117 145//117 146//117
+f 124//118 123//118 138//118
+f 131//119 146//119 147//119
+f 125//120 124//120 139//120
+f 133//121 132//121 147//121
+f 125//122 140//122 141//122
+f 134//123 133//123 148//123
+f 127//124 126//124 141//124
+f 134//537 149//537 150//537
+f 128//538 127//538 142//538
+f 140//127 139//127 154//127
+f 147//128 162//128 163//128
+f 141//129 140//129 155//129
+f 148//130 163//130 164//130
+f 142//131 141//131 156//131
+f 150//539 149//539 164//539
+f 142//133 157//133 158//133
+f 144//134 143//134 158//134
+f 136//540 151//540 152//540
+f 145//136 144//136 159//136
+f 138//137 137//137 152//137
+f 146//138 145//138 160//138
+f 138//139 153//139 154//139
+f 146//140 161//140 162//140
+f 159//541 158//541 173//541
+f 151//542 166//542 167//542
+f 159//143 174//143 175//143
+f 152//144 167//144 168//144
+f 160//145 175//145 176//145
+f 153//146 168//146 169//146
+f 161//147 176//147 177//147
+f 155//148 154//148 169//148
+f 163//149 162//149 177//149
+f 156//150 155//150 170//150
+f 164//543 163//543 178//543
+f 157//152 156//152 171//152
+f 165//544 164//544 179//544
+f 157//545 172//545 173//545
+f 178//155 177//155 192//155
+f 170//156 185//156 186//156
+f 178//157 193//157 194//157
+f 171//158 186//158 187//158
+f 180//546 179//546 194//546
+f 173//160 172//160 187//160
+f 173//161 188//161 189//161
+f 167//547 166//547 181//547
+f 174//163 189//163 190//163
+f 167//164 182//164 183//164
+f 175//165 190//165 191//165
+f 169//166 168//166 183//166
+f 177//167 176//167 191//167
+f 170//168 169//168 184//168
+f 181//169 196//169 197//169
+f 189//170 204//170 205//170
+f 183//171 182//171 197//171
+f 191//172 190//172 205//172
+f 183//173 198//173 199//173
+f 191//174 206//174 207//174
+f 184//175 199//175 200//175
+f 192//176 207//176 208//176
+f 185//177 200//177 201//177
+f 193//178 208//178 209//178
+f 187//179 186//179 201//179
+f 195//548 194//548 209//548
+f 188//181 187//181 202//181
+f 188//182 203//182 204//182
+f 201//183 200//183 215//183
+f 209//549 208//549 223//549
+f 202//185 201//185 216//185
+f 210//186 209//186 224//186
+f 202//550 217//550 218//550
+f 204//551 203//551 218//551
+f 197//552 196//552 211//552
+f 204//190 219//190 220//190
+f 197//553 212//553 213//553
+f 206//192 205//192 220//192
+f 199//193 198//193 213//193
+f 206//194 221//194 222//194
+f 199//195 214//195 215//195
+f 207//196 222//196 223//196
+f 220//197 219//197 234//197
+f 212//198 227//198 228//198
+f 221//199 220//199 235//199
+f 214//200 213//200 228//200
+f 222//201 221//201 236//201
+f 214//202 229//202 230//202
+f 222//203 237//203 238//203
+f 215//204 230//204 231//204
+f 223//554 238//554 239//554
+f 216//206 231//206 232//206
+f 225//555 224//555 239//555
+f 217//208 232//208 233//208
+f 219//209 218//209 233//209
+f 211//210 226//210 227//210
+f 239//211 238//211 253//211
+f 231//212 246//212 247//212
+f 240//213 239//213 254//213
+f 233//214 232//214 247//214
+f 233//215 248//215 249//215
+f 226//556 241//556 242//556
+f 234//217 249//217 250//217
+f 228//218 227//218 242//218
+f 235//219 250//219 251//219
+f 228//220 243//220 244//220
+f 236//221 251//221 252//221
+f 229//222 244//222 245//222
+f 237//223 252//223 253//223
+f 230//224 245//224 246//224
+f 250//225 265//225 266//225
+f 243//226 258//226 259//226
+f 252//227 251//227 266//227
+f 245//228 244//228 259//228
+f 253//229 252//229 267//229
+f 245//230 260//230 261//230
+f 254//231 253//231 268//231
+f 246//232 261//232 262//232
+f 255//557 254//557 269//557
+f 247//234 262//234 263//234
+f 249//235 248//235 263//235
+f 241//236 256//236 257//236
+f 249//237 264//237 265//237
+f 243//238 242//238 257//238
+f 270//239 269//239 284//239
+f 263//240 262//240 277//240
+f 263//241 278//241 279//241
+f 257//558 256//558 271//558
+f 265//243 264//243 279//243
+f 257//559 272//559 273//559
+f 265//245 280//245 281//245
+f 258//246 273//246 274//246
+f 266//247 281//247 282//247
+f 260//248 259//248 274//248
+f 268//249 267//249 282//249
+f 260//250 275//250 276//250
+f 269//560 268//560 283//560
+f 262//252 261//252 276//252
+f 274//253 273//253 288//253
+f 281//254 296//254 297//254
+f 275//255 274//255 289//255
+f 283//256 282//256 297//256
+f 275//257 290//257 291//257
+f 283//561 298//561 299//561
+f 277//259 276//259 291//259
+f 284//562 299//562 300//562
+f 278//563 277//563 292//563
+f 278//564 293//564 294//564
+f 272//565 271//565 286//565
+f 280//264 279//264 294//264
+f 273//265 272//265 287//265
+f 281//266 280//266 295//266
+f 292//267 307//267 308//267
+f 293//566 308//566 309//566
+f 286//269 301//269 302//269
+f 294//270 309//270 310//270
+f 287//271 302//271 303//271
+f 296//272 295//272 310//272
+f 288//273 303//273 304//273
+f 297//274 296//274 311//274
+f 289//275 304//275 305//275
+f 297//276 312//276 313//276
+f 290//277 305//277 306//277
+f 299//278 298//278 313//278
+f 292//279 291//279 306//279
+f 300//567 299//567 314//567
+f 311//281 326//281 327//281
+f 304//282 319//282 320//282
+f 312//283 327//283 328//283
+f 305//284 320//284 321//284
+f 314//285 313//285 328//285
+f 306//286 321//286 322//286
+f 314//287 329//287 330//287
+f 307//288 322//288 323//288
+f 308//289 323//289 324//289
+f 301//568 316//568 317//568
+f 309//291 324//291 325//291
+f 302//292 317//292 318//292
+f 310//293 325//293 326//293
+f 303//294 318//294 319//294
+f 324//569 323//569 339//569
+f 316//570 332//570 333//570
+f 325//297 324//297 340//297
+f 317//571 333//571 334//571
+f 325//299 341//299 342//299
+f 319//300 318//300 334//300
+f 326//301 342//301 343//301
+f 320//302 319//302 335//302
+f 328//303 327//303 343//303
+f 320//304 336//304 337//304
+f 328//572 344//572 345//572
+f 321//306 337//306 338//306
+f 329//573 345//573 346//573
+f 322//574 338//574 339//574
+f 336//309 335//309 350//309
+f 343//310 358//310 359//310
+f 336//311 351//311 352//311
+f 344//312 359//312 360//312
+f 338//313 337//313 352//313
+f 345//314 360//314 361//314
+f 338//315 353//315 354//315
+f 340//316 339//316 354//316
+f 333//575 332//575 347//575
+f 341//318 340//318 355//318
+f 334//319 333//319 348//319
+f 341//320 356//320 357//320
+f 335//321 334//321 349//321
+f 343//322 342//322 357//322
+f 355//323 354//323 369//323
+f 347//576 362//576 363//576
+f 355//325 370//325 371//325
+f 349//326 348//326 363//326
+f 356//327 371//327 372//327
+f 349//328 364//328 365//328
+f 357//329 372//329 373//329
+f 351//330 350//330 365//330
+f 359//331 358//331 373//331
+f 351//332 366//332 367//332
+f 359//333 374//333 375//333
+f 352//334 367//334 368//334
+f 361//577 360//577 375//577
+f 354//336 353//336 368//336
+f 373//337 388//337 389//337
+f 366//338 381//338 382//338
+f 375//339 374//339 389//339
+f 367//340 382//340 383//340
+f 375//578 390//578 391//578
+f 368//579 383//579 384//579
+f 370//580 369//580 384//580
+f 363//344 362//344 377//344
+f 370//345 385//345 386//345
+f 364//346 363//346 378//346
+f 372//347 371//347 386//347
+f 365//348 364//348 379//348
+f 372//349 387//349 388//349
+f 366//350 365//350 380//350
+f 385//351 400//351 401//351
+f 379//352 378//352 393//352
+f 386//581 401//581 402//581
+f 379//354 394//354 395//354
+f 388//355 387//355 402//355
+f 381//356 380//356 395//356
+f 389//357 388//357 403//357
+f 381//358 396//358 397//358
+f 389//359 404//359 405//359
+f 383//360 382//360 397//360
+f 390//361 405//361 406//361
+f 383//362 398//362 399//362
+f 384//363 399//363 400//363
+f 377//364 392//364 393//364
+f 404//365 419//365 420//365
+f 398//366 397//366 412//366
+f 405//367 420//367 421//367
+f 398//582 413//582 414//582
+f 399//369 414//369 415//369
+f 392//370 407//370 408//370
+f 401//371 400//371 415//371
+f 394//372 393//372 408//372
+f 402//373 401//373 416//373
+f 395//374 394//374 409//374
+f 403//375 402//375 417//375
+f 395//583 410//583 411//583
+f 403//377 418//377 419//377
+f 396//378 411//378 412//378
+f 408//379 423//379 424//379
+f 417//380 416//380 431//380
+f 410//381 409//381 424//381
+f 417//382 432//382 433//382
+f 410//383 425//383 426//383
+f 418//384 433//384 434//384
+f 411//385 426//385 427//385
+f 420//386 419//386 434//386
+f 412//387 427//387 428//387
+f 420//388 435//388 436//388
+f 414//389 413//389 428//389
+f 414//390 429//390 430//390
+f 407//584 422//584 423//584
+f 415//392 430//392 431//392
+f 428//393 427//393 442//393
+f 435//585 450//585 451//585
+f 429//395 428//395 443//395
+f 429//396 444//396 445//396
+f 422//586 437//586 438//586
+f 431//398 430//398 445//398
+f 423//399 438//399 439//399
+f 432//400 431//400 446//400
+f 424//401 439//401 440//401
+f 432//402 447//402 448//402
+f 426//403 425//403 440//403
+f 434//404 433//404 448//404
+f 426//405 441//405 442//405
+f 435//406 434//406 449//406
+f 447//407 446//407 462//407
+f 439//408 455//408 456//408
+f 448//409 447//409 463//409
+f 440//410 456//410 457//410
+f 448//411 464//411 465//411
+f 441//412 457//412 458//412
+f 449//587 465//587 466//587
+f 443//414 442//414 458//414
+f 450//415 466//415 467//415
+f 444//588 443//588 459//588
+f 444//417 460//417 461//417
+f 438//589 437//589 453//589
+f 445//419 461//419 462//419
+f 438//420 454//420 455//420
+f 466//590 481//590 482//590
+f 459//422 474//422 475//422
+f 461//423 460//423 475//423
+f 453//591 468//591 469//591
+f 461//425 476//425 477//425
+f 454//592 469//592 470//592
+f 463//427 462//427 477//427
+f 456//428 455//428 470//428
+f 463//429 478//429 479//429
+f 456//430 471//430 472//430
+f 464//431 479//431 480//431
+f 457//432 472//432 473//432
+f 466//433 465//433 480//433
+f 459//434 458//434 473//434
+f 471//497 470//497 3//497
+f 478//498 11//498 12//498
+f 472//499 471//499 4//499
+f 479//500 12//500 13//500
+f 473//501 472//501 5//501
+f 480//502 13//502 14//502
+f 474//503 473//503 6//503
+f 481//504 14//504 15//504
+f 475//505 474//505 7//505
+f 476//508 475//508 8//508
+f 469//509 468//509 1//509
+f 476//510 9//510 10//510
+f 470//511 469//511 2//511
+f 477//512 10//512 11//512
+o Plane
+v -142.548355 -3.788972 209.986847
+v 150.526962 8.375018 209.986847
+v -142.548355 8.375018 -189.494568
+v 150.526962 8.375018 -189.494568
+v -142.548355 8.375018 10.246132
+v 3.989307 8.375018 209.986847
+v 150.526962 8.375018 10.246132
+v 3.989307 2.855605 -189.494568
+v 3.989307 -3.983845 10.246132
+v -142.548355 -3.447104 110.116493
+v 77.258133 15.457470 209.986847
+v 150.526962 1.312631 -89.624222
+v -69.279526 2.855605 -189.494568
+v -142.548355 8.375018 -89.624222
+v -69.279526 -3.447104 209.986847
+v 150.526962 15.173862 110.116493
+v 77.258133 2.855605 -189.494568
+v 3.989307 0.087294 -89.624222
+v 3.989307 0.087294 110.116493
+v -69.279526 7.958965 10.246132
+v 77.258133 0.087294 10.246132
+v 77.258133 13.968592 110.116493
+v -69.279526 -11.734829 110.116493
+v -69.279526 7.958965 -89.624222
+v 77.258133 -6.975094 -89.624222
+v -142.548355 -3.788972 160.051666
+v 113.892548 15.457470 209.986847
+v 150.526962 8.375018 -139.559387
+v -105.913940 8.375018 -189.494568
+v -142.548355 8.375018 -39.689045
+v -32.645107 8.375018 209.986847
+v 150.526962 15.173862 60.181309
+v 40.623722 2.855605 -189.494568
+v 3.989307 2.855605 -139.559387
+v 3.989307 -3.983845 60.181309
+v -105.913940 16.246691 10.246132
+v 40.623722 -3.983845 10.246132
+v -142.548355 8.375018 60.181309
+v 40.623722 15.457470 209.986847
+v 150.526962 1.312631 -39.689045
+v -32.645107 2.855605 -189.494568
+v -142.548355 8.375018 -139.559387
+v -105.913940 -3.788972 209.986847
+v 150.526962 8.375018 160.051666
+v 113.892548 8.375018 -189.494568
+v 3.989307 -3.983845 -39.689045
+v 3.989307 8.375018 160.051666
+v -32.645107 -3.983845 10.246132
+v 113.892548 8.375018 10.246132
+v 77.258133 6.886139 60.181309
+v 77.258133 15.457470 160.051666
+v 40.623722 7.169746 110.116493
+v 113.892548 15.173862 110.116493
+v -69.279526 0.087294 60.181309
+v -69.279526 -3.447104 160.051666
+v -105.913940 -3.447104 110.116493
+v -32.645107 0.087294 110.116493
+v -69.279526 10.727278 -139.559387
+v -69.279526 7.958965 -39.689045
+v -105.913940 16.246691 -89.624222
+v -32.645107 7.958965 -89.624222
+v 77.258133 2.855605 -139.559387
+v 77.258133 -6.975094 -39.689045
+v 40.623722 -6.975094 -89.624222
+v 113.892548 1.312631 -89.624222
+v 113.892548 1.312631 -39.689045
+v 40.623722 -11.046232 -39.689045
+v 40.623722 2.855605 -139.559387
+v -32.645107 3.887827 -39.689045
+v -105.913940 16.246691 -39.689045
+v -105.913940 16.246691 -139.559387
+v -32.645107 8.375018 160.051666
+v -105.913940 -3.788972 160.051666
+v -105.913940 8.375018 60.181309
+v 113.892548 15.457470 160.051666
+v 40.623722 15.457470 160.051666
+v 40.623722 -3.983845 60.181309
+v 113.892548 15.173862 60.181309
+v -32.645107 -3.983845 60.181309
+v -32.645107 2.855605 -139.559387
+v 113.892548 8.375018 -139.559387
+v 13.104279 0.327888 18.513834
+v 23.131842 0.013458 18.771643
+v 13.485302 -0.482308 8.464904
+v 23.048595 -0.019841 9.299172
+v 13.485442 -0.175794 13.391172
+v 17.928328 -0.008040 18.281170
+v 22.790535 -0.035128 13.592512
+v 18.234987 0.006127 8.502079
+v 17.903715 0.053604 13.893975
+v 10.881054 0.078465 18.194244
+v 11.183296 0.019566 13.191155
+v 11.188541 -0.410908 7.962954
+v 13.105728 0.318087 20.159302
+v 18.183002 0.035546 20.082237
+v 23.024509 -0.050532 20.360731
+v 27.634354 -0.009061 18.317017
+v 27.542191 -0.002635 9.071259
+v 27.695053 -0.006385 13.762526
+v 27.577614 -0.066314 19.661835
+v 11.172001 0.248806 19.962875
+v 13.526335 -0.449642 4.793885
+v 22.642046 -0.053257 5.452081
+v 18.021530 0.044457 5.504973
+v 11.322108 -0.437003 4.957672
+v 27.873672 0.022745 5.692792
+v 13.385990 -0.433481 1.125905
+v 22.991844 0.037042 1.699383
+v 17.814886 0.079175 1.820996
+v 11.188444 -0.362952 1.092889
+v 27.765556 0.013055 1.590629
+v 13.219313 -0.426253 -3.202404
+v 22.610817 0.040420 -2.400288
+v 18.074854 -0.015189 -2.667536
+v 11.295557 -0.339630 -3.462877
+v 27.363327 0.016065 -2.738710
+v 13.098175 -0.396331 -6.887760
+v 22.640284 0.053441 -6.098387
+v 17.475832 0.043749 -6.103037
+v 10.845907 -0.381236 -6.609253
+v 27.215107 0.056629 -6.340580
+v 13.272488 -0.346929 -11.048321
+v 22.573311 0.080769 -10.174133
+v 17.829428 0.011065 -10.003637
+v 11.133539 -0.327173 -11.017582
+v 27.467512 0.114421 -10.195564
+v 12.865637 -0.339586 -14.892366
+v 22.038488 0.095042 -14.454016
+v 17.211685 0.147452 -14.224781
+v 10.537168 -0.300103 -14.956905
+v 27.191948 0.118744 -14.495943
+v 12.806686 -0.339501 -19.331060
+v 22.151436 0.181491 -19.056967
+v 17.504200 0.062877 -18.759321
+v 10.751410 -0.312590 -19.559328
+v 26.818520 0.103842 -19.559683
+v 12.537009 -0.286173 -22.980608
+v 22.144968 0.132207 -22.600042
+v 17.014872 0.139669 -22.737730
+v 10.371938 -0.288689 -23.293921
+v 26.660723 0.077532 -22.720400
+v 8.593560 0.134677 18.476246
+v 9.046290 0.115975 13.089104
+v 8.906672 -0.424723 8.530117
+v 8.932891 0.176631 19.744532
+v 9.069533 -0.358096 5.071105
+v 8.563065 -0.370928 0.916553
+v 8.602954 -0.351142 -3.316784
+v 8.556911 -0.344492 -6.999783
+v 8.432333 -0.284081 -10.959236
+v 8.289740 -0.298086 -15.207165
+v 8.186318 -0.307979 -19.765139
+v 7.928684 -0.329042 -23.040174
+v 6.275683 0.197633 18.658403
+v 6.232576 0.492930 13.798538
+v 6.242849 -0.310183 9.089550
+v 6.038630 0.244194 20.288914
+v 6.109439 -0.338832 5.330672
+v 6.133729 -0.262744 1.402695
+v 5.889818 -0.304561 -2.584795
+v 5.955475 -0.283029 -6.455938
+v 5.948462 -0.314031 -9.993784
+v 5.604342 -0.259993 -14.445799
+v 5.927937 -0.224831 -19.271662
+v 5.480068 -0.229377 -22.813162
+v 2.844854 0.198167 19.099615
+v 3.031071 0.071088 14.156259
+v 3.351155 -0.271048 9.476382
+v 3.108282 0.216136 20.320618
+v 3.328765 -0.319801 5.625021
+v 3.294361 -0.279912 1.685441
+v 3.091041 -0.273639 -2.427872
+v 2.958309 -0.268783 -6.331711
+v 2.795193 -0.243067 -10.168983
+v 2.380781 -0.247314 -14.242470
+v 2.427876 -0.216173 -18.998964
+v 2.340446 -0.188906 -22.441950
+v 0.563978 0.244981 19.522200
+v 0.582687 0.125775 14.323874
+v 0.784334 -0.304833 9.454615
+v 0.530384 0.321559 20.830717
+v 0.724895 -0.324828 5.837870
+v 0.647606 -0.258671 2.082006
+v 0.571375 -0.235339 -2.026767
+v 0.372417 -0.232237 -5.865255
+v 0.566166 -0.239090 -9.963467
+v -0.106661 -0.212095 -14.000984
+v -0.044548 -0.206861 -18.838579
+v -0.229397 -0.117567 -22.161112
+v -2.193041 0.288646 19.449753
+v -2.049564 0.148749 14.418177
+v -1.812956 -0.285167 9.773373
+v -2.262764 0.271880 21.068300
+v -1.709137 -0.236825 5.983881
+v -2.065636 -0.234786 2.262042
+v -2.341993 -0.278549 -1.875878
+v -2.340086 -0.192403 -5.408937
+v -2.363022 -0.224605 -9.325329
+v -2.660383 -0.180720 -13.780321
+v -2.843954 -0.168313 -18.339014
+v -3.128355 -0.133932 -21.973303
+v -5.966902 0.317759 19.276495
+v -5.862623 0.210937 14.171479
+v -5.993635 -0.231794 9.553251
+v -5.974997 0.332332 20.868876
+v -5.872087 -0.212212 5.924550
+v -5.615923 -0.120671 2.077815
+v -5.929451 -0.150038 -2.221292
+v -6.136858 -0.131875 -5.767538
+v -6.343929 -0.125590 -9.838017
+v -6.251850 -0.122042 -14.134510
+v -6.625002 -0.121988 -18.513823
+v -6.279495 -0.094474 -22.010038
+v -9.032854 0.357821 19.491625
+v -8.540281 0.182245 14.411586
+v -8.615654 -0.198251 9.848503
+v -9.062361 0.350239 21.163784
+v -8.660698 -0.180848 6.288526
+v -8.613096 -0.163177 2.342146
+v -8.822206 -0.171474 -1.924160
+v -9.070250 -0.140578 -5.411852
+v -9.413771 -0.120747 -9.322878
+v -9.411474 -0.141857 -13.706936
+v -9.329353 -0.090810 -18.290937
+v -9.492174 -0.071330 -21.944643
+v -12.021830 0.407694 19.751188
+v -12.336945 0.283119 14.601055
+v -11.938692 -0.165959 10.511793
+v -11.938360 0.420815 21.520674
+v -11.902744 -0.084300 6.671698
+v -11.823488 -0.190316 2.701370
+v -12.191818 -0.116418 -1.913227
+v -11.901482 -0.083414 -5.441702
+v -12.325912 -0.080146 -9.306499
+v -12.566347 -0.064102 -13.473614
+v -12.648439 -0.060678 -18.132116
+v -12.650232 -0.043155 -21.816076
+v -14.954050 0.459440 19.997721
+v -14.456865 0.342764 14.535879
+v -14.390448 -0.131594 10.451123
+v -14.524118 0.443039 21.405979
+v -14.516287 -0.161809 6.502274
+v -14.272486 -0.084847 2.603194
+v -14.703249 -0.083932 -1.847343
+v -15.165873 -0.096602 -5.519423
+v -15.078703 -0.132210 -9.075100
+v -14.812033 -0.058252 -13.315825
+v -15.229643 -0.018604 -17.936094
+v -15.322546 0.000192 -21.767191
+v -17.517565 0.492335 19.949137
+v -17.508924 0.381200 15.041679
+v -17.260042 -0.065159 10.739256
+v -17.619059 0.453032 21.594074
+v -17.442945 -0.092746 6.861722
+v -17.470755 -0.010155 2.752968
+v -17.676477 -0.050160 -1.364319
+v -17.997988 -0.046441 -4.878241
+v -18.042898 0.043356 -8.890846
+v -18.478371 0.040882 -13.116346
+v -18.626244 0.045909 -17.776773
+v -18.480154 0.010410 -21.095526
+v -20.312864 0.518327 20.379471
+v -20.708189 0.337279 14.948738
+v -20.228720 -0.069254 10.747066
+v -20.113485 0.504953 21.613295
+v -20.624144 -0.073958 6.776735
+v -20.235594 -0.031965 2.871523
+v -20.438013 -0.006993 -1.459950
+v -20.520597 -0.028799 -5.078485
+v -20.705980 0.011499 -9.030710
+v -20.964746 -0.003638 -12.914742
+v -20.718023 0.051719 -17.805992
+v -21.246294 0.029785 -21.380777
+v -23.881609 0.522342 20.376089
+v -23.670496 0.314140 15.424084
+v -23.687536 -0.029970 10.642940
+v -23.876001 0.543195 21.866430
+v -23.729738 -0.020449 10.654488
+v -23.954977 -0.031059 6.952433
+v -23.812929 0.060809 3.520123
+v -23.778723 0.092141 -1.263077
+v -24.274569 0.023861 -4.809729
+v -24.216333 0.032276 -8.646307
+v -24.747480 0.066652 -12.815439
+v -24.824389 0.052782 -17.631231
+v -24.558245 0.097121 -21.157610
+v -26.949457 0.599366 20.526201
+v -26.534021 0.421200 15.422380
+v -26.767237 0.004513 10.615169
+v -26.873060 0.595770 21.895983
+v -26.594584 0.025369 6.980439
+v -26.827826 0.035715 2.937074
+v -27.180326 0.027471 -1.031477
+v -27.265902 0.093028 -4.661493
+v -27.146139 0.084407 -8.836327
+v -27.429884 0.055252 -12.695322
+v -27.463373 0.112211 -17.708776
+v -27.741518 0.134741 -20.885611
+v -30.746866 0.659244 20.226072
+v -30.159464 0.406043 15.053509
+v -30.259329 0.058415 10.513619
+v -30.131002 0.661436 21.917091
+v -30.569792 0.020395 6.939335
+v -30.346636 0.070801 3.041237
+v -30.419195 0.073204 -0.816784
+v -30.418451 0.092892 -4.598701
+v -30.446234 0.087088 -8.503370
+v -30.761213 0.192017 -13.244860
+v -31.080126 0.161218 -17.637196
+v -31.501146 0.218747 -21.056986
+v -9.193329 12.831282 -9.306175
+v -8.849808 12.811450 -5.395151
+v -12.105471 12.871882 -9.289797
+v -11.681040 12.868614 -5.424999
+v 27.234844 7.395595 -14.443241
+v 22.081385 7.371892 -14.401314
+v 26.861416 7.380693 -19.506983
+v 22.194332 7.458342 -19.004267
+v -23.517752 5.385185 15.238759
+v -23.728868 5.593387 20.190763
+v -26.381281 5.492245 15.237057
+v -26.796717 5.670411 20.340878
+v 23.127361 5.585575 18.745489
+v 22.786055 5.536989 13.566360
+v 27.629875 5.563056 18.290863
+v 27.690573 5.565733 13.736372
+v 16.829655 4.097627 -14.271919
+v 12.483604 3.610589 -14.939507
+v 17.122168 4.013052 -18.806459
+v 12.424654 3.610674 -19.378199
+v -0.134611 15.711366 -21.886084
+v 0.050238 15.622071 -18.563551
+v -3.033569 15.695001 -21.698275
+v -2.749168 15.660620 -18.063984
+v -24.714979 12.128282 -17.579521
+v -24.638071 12.142152 -12.763729
+v -27.353964 12.187711 -17.657064
+v -27.320475 12.130752 -12.643612
+v -5.790018 6.817943 5.965222
+v -5.678535 6.796543 9.597301
+v -8.578629 6.849307 6.329198
+v -8.552967 6.827248 9.931889
+v 9.061446 4.476840 13.032704
+v 8.608716 4.495542 18.419846
+v 6.329820 4.444058 13.826568
+v 6.290839 4.558498 18.602005
+v -14.358084 9.356542 14.342667
+v -14.855268 9.473218 19.804508
+v -17.410143 9.394978 14.848467
+v -17.418783 9.506113 19.755924
+v -23.783236 7.124237 3.616339
+v -23.925280 7.032368 7.048649
+v -26.798128 7.099143 3.033290
+v -26.564886 7.088796 7.076654
+v 27.873672 0.022745 5.692792
+v 22.642046 -0.053257 5.452081
+v 27.765556 0.013055 1.590629
+v 22.991844 0.037042 1.699383
+v 27.861481 2.309013 5.715878
+v 22.629856 2.233011 5.475168
+v 27.753366 2.299323 1.613716
+v 22.981640 1.923218 1.773168
+v -0.780847 4.111415 -0.142096
+v -0.968440 4.054510 -0.142096
+v -1.141327 3.962100 -0.142096
+v -1.292863 3.837737 -0.142096
+v -1.417226 3.686200 -0.142096
+v -1.509636 3.513314 -0.142096
+v -1.566542 3.325720 -0.142096
+v -1.585757 3.130630 -0.142096
+v -1.566542 2.935540 -0.142096
+v -1.509636 2.747947 -0.142096
+v -1.417226 2.575060 -0.142096
+v -1.292863 2.423523 -0.142096
+v -1.141327 2.299160 -0.142096
+v -0.968440 2.206750 -0.142096
+v -0.780847 2.149845 -0.142096
+v -0.777098 4.111415 -0.180156
+v -0.961087 4.054510 -0.216754
+v -1.130652 3.962100 -0.250482
+v -1.279276 3.837737 -0.280045
+v -1.401250 3.686200 -0.304307
+v -1.491884 3.513314 -0.322336
+v -1.547696 3.325720 -0.333438
+v -1.566542 3.130630 -0.337186
+v -1.547696 2.935540 -0.333438
+v -1.491884 2.747947 -0.322336
+v -1.401250 2.575060 -0.304307
+v -1.279276 2.423523 -0.280045
+v -1.130652 2.299160 -0.250482
+v -0.961087 2.206750 -0.216754
+v -0.777098 2.149845 -0.180156
+v -0.765997 4.111415 -0.216754
+v -0.939310 4.054510 -0.288542
+v -1.099036 3.962100 -0.354703
+v -1.239038 3.837737 -0.412694
+v -1.353934 3.686200 -0.460285
+v -1.439310 3.513314 -0.495649
+v -1.491884 3.325720 -0.517426
+v -1.509636 3.130630 -0.524779
+v -1.491884 2.935540 -0.517426
+v -1.439310 2.747947 -0.495649
+v -1.353934 2.575060 -0.460285
+v -1.239038 2.423523 -0.412694
+v -1.099036 2.299160 -0.354703
+v -0.939310 2.206750 -0.288542
+v -0.765996 2.149845 -0.216754
+v -0.747968 4.111415 -0.250482
+v -0.903946 4.054510 -0.354703
+v -1.047696 3.962100 -0.450754
+v -1.173694 3.837737 -0.534943
+v -1.277098 3.686200 -0.604036
+v -1.353934 3.513314 -0.655376
+v -1.401250 3.325720 -0.686991
+v -1.417226 3.130630 -0.697666
+v -1.401250 2.935540 -0.686991
+v -1.353934 2.747947 -0.655376
+v -1.277098 2.575060 -0.604036
+v -1.173694 2.423523 -0.534943
+v -1.047696 2.299160 -0.450754
+v -0.903946 2.206750 -0.354703
+v -0.747968 2.149845 -0.250482
+v -0.723706 4.111415 -0.280046
+v -0.856355 4.054510 -0.412694
+v -0.978604 3.962100 -0.534943
+v -1.085757 3.837737 -0.642096
+v -1.173694 3.686200 -0.730034
+v -1.239038 3.513314 -0.795377
+v -1.279276 3.325720 -0.835616
+v -1.292863 3.130630 -0.849203
+v -1.279276 2.935540 -0.835616
+v -1.239038 2.747947 -0.795377
+v -1.173694 2.575060 -0.730034
+v -1.085757 2.423523 -0.642096
+v -0.978604 2.299160 -0.534943
+v -0.856354 2.206750 -0.412694
+v -0.723706 2.149845 -0.280045
+v -0.694143 4.111415 -0.304308
+v -0.798364 4.054510 -0.460286
+v -0.894415 3.962100 -0.604036
+v -0.978604 3.837737 -0.730034
+v -1.047696 3.686200 -0.833438
+v -1.099036 3.513314 -0.910274
+v -1.130651 3.325720 -0.957589
+v -1.141327 3.130630 -0.973566
+v -1.130651 2.935540 -0.957589
+v -1.099036 2.747947 -0.910274
+v -1.047696 2.575060 -0.833438
+v -0.978604 2.423523 -0.730034
+v -0.894415 2.299160 -0.604036
+v -0.798364 2.206750 -0.460286
+v -0.694143 2.149845 -0.304307
+v -0.660414 4.111415 -0.322336
+v -0.732203 4.054510 -0.495649
+v -0.798364 3.962100 -0.655376
+v -0.856354 3.837737 -0.795377
+v -0.903946 3.686200 -0.910274
+v -0.939310 3.513314 -0.995649
+v -0.961087 3.325720 -1.048223
+v -0.968440 3.130630 -1.065975
+v -0.961087 2.935540 -1.048223
+v -0.939310 2.747947 -0.995649
+v -0.903946 2.575060 -0.910274
+v -0.856354 2.423523 -0.795377
+v -0.798364 2.299160 -0.655376
+v -0.732203 2.206750 -0.495649
+v -0.660414 2.149845 -0.322336
+v -0.623817 4.111415 -0.333438
+v -0.660414 4.054510 -0.517426
+v -0.694143 3.962100 -0.686991
+v -0.723706 3.837737 -0.835616
+v -0.747968 3.686200 -0.957589
+v -0.765996 3.513314 -1.048223
+v -0.777098 3.325720 -1.104035
+v -0.780847 3.130630 -1.122881
+v -0.777098 2.935540 -1.104035
+v -0.765996 2.747947 -1.048223
+v -0.747968 2.575060 -0.957589
+v -0.723706 2.423523 -0.835616
+v -0.694143 2.299160 -0.686991
+v -0.660414 2.206750 -0.517426
+v -0.623817 2.149845 -0.333437
+v -0.585756 4.111415 -0.337186
+v -0.585756 4.054510 -0.524779
+v -0.585756 3.962100 -0.697666
+v -0.585756 3.837737 -0.849203
+v -0.585756 3.686200 -0.973565
+v -0.585756 3.513314 -1.065975
+v -0.585756 3.325720 -1.122881
+v -0.585756 3.130630 -1.142096
+v -0.585756 2.935540 -1.122881
+v -0.585756 2.747947 -1.065975
+v -0.585756 2.575060 -0.973565
+v -0.585756 2.423523 -0.849203
+v -0.585756 2.299160 -0.697666
+v -0.585756 2.206750 -0.524779
+v -0.585756 2.149845 -0.337186
+v -0.547696 4.111415 -0.333438
+v -0.511098 4.054510 -0.517426
+v -0.477370 3.962100 -0.686991
+v -0.447807 3.837737 -0.835616
+v -0.423545 3.686200 -0.957589
+v -0.405516 3.513314 -1.048223
+v -0.394414 3.325720 -1.104035
+v -0.390666 3.130630 -1.122881
+v -0.394414 2.935540 -1.104035
+v -0.405516 2.747947 -1.048223
+v -0.423545 2.575060 -0.957589
+v -0.447807 2.423523 -0.835616
+v -0.477370 2.299160 -0.686991
+v -0.511098 2.206750 -0.517426
+v -0.547696 2.149845 -0.333437
+v -0.511098 4.111415 -0.322336
+v -0.439310 4.054510 -0.495649
+v -0.373149 3.962100 -0.655376
+v -0.315158 3.837737 -0.795377
+v -0.267567 3.686200 -0.910274
+v -0.232203 3.513314 -0.995649
+v -0.210426 3.325720 -1.048223
+v -0.203073 3.130630 -1.065975
+v -0.210426 2.935540 -1.048223
+v -0.232203 2.747947 -0.995649
+v -0.267567 2.575060 -0.910274
+v -0.315158 2.423523 -0.795377
+v -0.373149 2.299160 -0.655376
+v -0.439310 2.206750 -0.495649
+v -0.511098 2.149845 -0.322336
+v -0.477370 4.111415 -0.304308
+v -0.373149 4.054510 -0.460286
+v -0.277098 3.962100 -0.604036
+v -0.192909 3.837737 -0.730034
+v -0.123816 3.686200 -0.833437
+v -0.072476 3.513314 -0.910274
+v -0.040861 3.325720 -0.957589
+v -0.030186 3.130630 -0.973565
+v -0.040861 2.935540 -0.957589
+v -0.072476 2.747947 -0.910274
+v -0.123816 2.575060 -0.833437
+v -0.192909 2.423523 -0.730034
+v -0.277098 2.299160 -0.604035
+v -0.373149 2.206750 -0.460285
+v -0.477370 2.149845 -0.304307
+v -0.447806 4.111415 -0.280046
+v -0.315158 4.054510 -0.412694
+v -0.192909 3.962100 -0.534943
+v -0.085756 3.837737 -0.642096
+v 0.002182 3.686200 -0.730034
+v 0.067525 3.513314 -0.795377
+v 0.107764 3.325720 -0.835616
+v 0.121351 3.130630 -0.849203
+v 0.107764 2.935540 -0.835616
+v 0.067525 2.747947 -0.795377
+v 0.002182 2.575060 -0.730034
+v -0.085756 2.423523 -0.642096
+v -0.192909 2.299160 -0.534943
+v -0.315158 2.206750 -0.412694
+v -0.447807 2.149845 -0.280045
+v -0.423544 4.111415 -0.250482
+v -0.267567 4.054510 -0.354703
+v -0.123816 3.962100 -0.450754
+v 0.002182 3.837737 -0.534943
+v 0.105585 3.686200 -0.604035
+v 0.182422 3.513314 -0.655376
+v 0.229737 3.325720 -0.686991
+v 0.245713 3.130630 -0.697666
+v 0.229737 2.935540 -0.686991
+v 0.182422 2.747947 -0.655376
+v 0.105585 2.575060 -0.604035
+v 0.002182 2.423523 -0.534943
+v -0.123816 2.299160 -0.450754
+v -0.267567 2.206750 -0.354703
+v -0.423545 2.149845 -0.250482
+v -0.405516 4.111415 -0.216754
+v -0.232203 4.054510 -0.288542
+v -0.072476 3.962100 -0.354703
+v 0.067525 3.837737 -0.412694
+v 0.182421 3.686200 -0.460285
+v 0.267797 3.513314 -0.495649
+v 0.320371 3.325720 -0.517426
+v 0.338123 3.130630 -0.524779
+v 0.320371 2.935540 -0.517426
+v 0.267797 2.747947 -0.495649
+v 0.182421 2.575060 -0.460285
+v 0.067525 2.423523 -0.412694
+v -0.072476 2.299160 -0.354703
+v -0.232203 2.206750 -0.288542
+v -0.405516 2.149845 -0.216754
+v -0.394414 4.111415 -0.180156
+v -0.210426 4.054510 -0.216754
+v -0.040861 3.962100 -0.250482
+v 0.107764 3.837737 -0.280045
+v 0.229737 3.686200 -0.304307
+v 0.320371 3.513314 -0.322336
+v 0.376183 3.325720 -0.333437
+v 0.395029 3.130630 -0.337186
+v 0.376183 2.935540 -0.333437
+v 0.320371 2.747947 -0.322336
+v 0.229737 2.575060 -0.304307
+v 0.107764 2.423523 -0.280045
+v -0.040861 2.299160 -0.250482
+v -0.210426 2.206750 -0.216754
+v -0.394415 2.149845 -0.180156
+v -0.390666 4.111415 -0.142096
+v -0.203073 4.054510 -0.142096
+v -0.030186 3.962100 -0.142096
+v 0.121350 3.837737 -0.142096
+v 0.245713 3.686200 -0.142096
+v 0.338123 3.513314 -0.142096
+v 0.395029 3.325720 -0.142096
+v 0.414244 3.130630 -0.142096
+v 0.395029 2.935540 -0.142096
+v 0.338123 2.747947 -0.142096
+v 0.245713 2.575060 -0.142096
+v 0.121350 2.423523 -0.142096
+v -0.030186 2.299160 -0.142096
+v -0.203073 2.206750 -0.142096
+v -0.390666 2.149845 -0.142096
+v -0.394414 4.111415 -0.104035
+v -0.210426 4.054510 -0.067438
+v -0.040861 3.962100 -0.033709
+v 0.107764 3.837737 -0.004146
+v 0.229737 3.686200 0.020116
+v 0.320371 3.513314 0.038144
+v 0.376183 3.325720 0.049246
+v 0.395029 3.130630 0.052995
+v 0.376183 2.935540 0.049246
+v 0.320371 2.747947 0.038144
+v 0.229737 2.575060 0.020116
+v 0.107764 2.423523 -0.004146
+v -0.040861 2.299160 -0.033709
+v -0.210426 2.206750 -0.067438
+v -0.394415 2.149845 -0.104035
+v -0.405516 4.111415 -0.067438
+v -0.232203 4.054510 0.004351
+v -0.072476 3.962100 0.070512
+v 0.067525 3.837737 0.128502
+v 0.182421 3.686200 0.176094
+v 0.267797 3.513314 0.211458
+v 0.320371 3.325720 0.233235
+v 0.338123 3.130630 0.240588
+v 0.320371 2.935540 0.233235
+v 0.267797 2.747947 0.211458
+v 0.182421 2.575060 0.176094
+v 0.067525 2.423523 0.128502
+v -0.072476 2.299160 0.070512
+v -0.232203 2.206750 0.004351
+v -0.405516 2.149845 -0.067438
+v -0.423544 4.111415 -0.033709
+v -0.267567 4.054510 0.070512
+v -0.123816 3.962100 0.166563
+v 0.002181 3.837737 0.250752
+v 0.105585 3.686200 0.319844
+v 0.182421 3.513314 0.371184
+v 0.229737 3.325720 0.402799
+v 0.245713 3.130630 0.413475
+v 0.229737 2.935540 0.402799
+v 0.182421 2.747947 0.371184
+v 0.105585 2.575060 0.319844
+v 0.002181 2.423523 0.250752
+v -0.123817 2.299160 0.166563
+v -0.267567 2.206750 0.070512
+v -0.423545 2.149845 -0.033709
+v -0.447806 4.111415 -0.004146
+v -0.315158 4.054510 0.128502
+v -0.192909 3.962100 0.250752
+v -0.085756 3.837737 0.357904
+v 0.002181 3.686200 0.445842
+v 0.067525 3.513314 0.511186
+v 0.107763 3.325720 0.551424
+v 0.121350 3.130630 0.565011
+v 0.107763 2.935540 0.551424
+v 0.067525 2.747947 0.511186
+v 0.002181 2.575060 0.445842
+v -0.085756 2.423523 0.357904
+v -0.192909 2.299160 0.250752
+v -0.315158 2.206750 0.128502
+v -0.447807 2.149845 -0.004146
+v -0.477370 4.111415 0.020116
+v -0.373149 4.054510 0.176094
+v -0.277098 3.962100 0.319844
+v -0.192909 3.837737 0.445842
+v -0.123817 3.686200 0.549246
+v -0.072476 3.513314 0.626082
+v -0.040862 3.325720 0.673397
+v -0.030186 3.130630 0.689374
+v -0.040862 2.935540 0.673397
+v -0.072476 2.747947 0.626082
+v -0.123817 2.575060 0.549246
+v -0.192909 2.423523 0.445842
+v -0.277098 2.299160 0.319844
+v -0.373149 2.206750 0.176094
+v -0.477370 2.149845 0.020116
+v -0.585756 2.130630 -0.142096
+v -0.511098 4.111415 0.038144
+v -0.439310 4.054510 0.211458
+v -0.373149 3.962100 0.371184
+v -0.315158 3.837737 0.511186
+v -0.267567 3.686200 0.626082
+v -0.232203 3.513314 0.711458
+v -0.210426 3.325720 0.764031
+v -0.203073 3.130630 0.781784
+v -0.210426 2.935540 0.764031
+v -0.232203 2.747947 0.711458
+v -0.267567 2.575060 0.626082
+v -0.315158 2.423523 0.511186
+v -0.373149 2.299160 0.371184
+v -0.439310 2.206750 0.211458
+v -0.511099 2.149845 0.038144
+v -0.547696 4.111415 0.049246
+v -0.511099 4.054510 0.233234
+v -0.477370 3.962100 0.402799
+v -0.447807 3.837737 0.551424
+v -0.423545 3.686200 0.673397
+v -0.405516 3.513314 0.764032
+v -0.394415 3.325720 0.819844
+v -0.390666 3.130630 0.838689
+v -0.394415 2.935540 0.819844
+v -0.405516 2.747947 0.764032
+v -0.423545 2.575060 0.673397
+v -0.447807 2.423523 0.551424
+v -0.477370 2.299160 0.402799
+v -0.511099 2.206750 0.233234
+v -0.547696 2.149845 0.049246
+v -0.585756 4.111415 0.052995
+v -0.585756 4.054510 0.240588
+v -0.585756 3.962100 0.413474
+v -0.585756 3.837737 0.565011
+v -0.585756 3.686200 0.689373
+v -0.585756 3.513314 0.781784
+v -0.585756 3.325720 0.838689
+v -0.585756 3.130630 0.857904
+v -0.585756 2.935540 0.838689
+v -0.585756 2.747947 0.781784
+v -0.585756 2.575060 0.689373
+v -0.585756 2.423523 0.565011
+v -0.585756 2.299160 0.413474
+v -0.585756 2.206750 0.240588
+v -0.585756 2.149845 0.052995
+v -0.623817 4.111415 0.049246
+v -0.660414 4.054510 0.233234
+v -0.694143 3.962100 0.402799
+v -0.723706 3.837737 0.551424
+v -0.747968 3.686200 0.673397
+v -0.765996 3.513314 0.764032
+v -0.777098 3.325720 0.819844
+v -0.780847 3.130630 0.838689
+v -0.777098 2.935540 0.819844
+v -0.765996 2.747947 0.764032
+v -0.747968 2.575060 0.673397
+v -0.723706 2.423523 0.551424
+v -0.694143 2.299160 0.402799
+v -0.660414 2.206750 0.233234
+v -0.623816 2.149845 0.049246
+v -0.660414 4.111415 0.038144
+v -0.732203 4.054510 0.211458
+v -0.798364 3.962100 0.371184
+v -0.856354 3.837737 0.511186
+v -0.903946 3.686200 0.626082
+v -0.939310 3.513314 0.711458
+v -0.961087 3.325720 0.764031
+v -0.968440 3.130630 0.781783
+v -0.961087 2.935540 0.764031
+v -0.939310 2.747947 0.711458
+v -0.903946 2.575060 0.626082
+v -0.856354 2.423523 0.511186
+v -0.798364 2.299160 0.371184
+v -0.732203 2.206750 0.211457
+v -0.660414 2.149845 0.038144
+v -0.694143 4.111415 0.020116
+v -0.798364 4.054510 0.176094
+v -0.894415 3.962100 0.319844
+v -0.978604 3.837737 0.445842
+v -1.047696 3.686200 0.549245
+v -1.099036 3.513314 0.626082
+v -1.130651 3.325720 0.673397
+v -1.141327 3.130630 0.689373
+v -1.130651 2.935540 0.673397
+v -1.099036 2.747947 0.626082
+v -1.047696 2.575060 0.549245
+v -0.978604 2.423523 0.445842
+v -0.894415 2.299160 0.319844
+v -0.798364 2.206750 0.176094
+v -0.694143 2.149845 0.020116
+v -0.723706 4.111415 -0.004146
+v -0.856354 4.054510 0.128502
+v -0.978604 3.962100 0.250752
+v -1.085756 3.837737 0.357904
+v -1.173694 3.686200 0.445842
+v -1.239038 3.513314 0.511186
+v -1.279276 3.325720 0.551424
+v -1.292863 3.130630 0.565011
+v -1.279276 2.935540 0.551424
+v -1.239038 2.747947 0.511186
+v -1.173694 2.575060 0.445842
+v -1.085756 2.423523 0.357904
+v -0.978604 2.299160 0.250752
+v -0.856354 2.206750 0.128502
+v -0.723706 2.149845 -0.004146
+v -0.747968 4.111415 -0.033709
+v -0.903946 4.054510 0.070512
+v -1.047696 3.962100 0.166562
+v -1.173694 3.837737 0.250752
+v -1.277098 3.686200 0.319844
+v -1.353934 3.513314 0.371184
+v -1.401249 3.325720 0.402799
+v -1.417226 3.130630 0.413474
+v -1.401249 2.935540 0.402799
+v -1.353934 2.747947 0.371184
+v -1.277098 2.575060 0.319844
+v -1.173694 2.423523 0.250752
+v -1.047696 2.299160 0.166562
+v -0.903946 2.206750 0.070512
+v -0.747968 2.149845 -0.033709
+v -0.585757 4.130630 -0.142096
+v -0.765996 4.111415 -0.067438
+v -0.939310 4.054510 0.004351
+v -1.099036 3.962100 0.070512
+v -1.239038 3.837737 0.128502
+v -1.353934 3.686200 0.176093
+v -1.439310 3.513314 0.211458
+v -1.491883 3.325720 0.233234
+v -1.509635 3.130630 0.240587
+v -1.491883 2.935540 0.233234
+v -1.439310 2.747947 0.211458
+v -1.353934 2.575060 0.176093
+v -1.239038 2.423523 0.128502
+v -1.099036 2.299160 0.070512
+v -0.939310 2.206750 0.004351
+v -0.765996 2.149845 -0.067438
+v -0.777098 4.111415 -0.104035
+v -0.961086 4.054510 -0.067438
+v -1.130651 3.962100 -0.033709
+v -1.279276 3.837737 -0.004146
+v -1.401249 3.686200 0.020116
+v -1.491884 3.513314 0.038144
+v -1.547695 3.325720 0.049246
+v -1.566541 3.130630 0.052994
+v -1.547695 2.935540 0.049246
+v -1.491884 2.747947 0.038144
+v -1.401249 2.575060 0.020116
+v -1.279276 2.423523 -0.004146
+v -1.130651 2.299160 -0.033710
+v -0.961086 2.206750 -0.067438
+v -0.777098 2.149845 -0.104036
+v 0.397297 0.153779 -1.116879
+v 0.397297 0.153779 0.883121
+v -1.602703 0.153779 0.883120
+v -1.602703 0.153779 -1.116880
+v 0.397297 2.153779 -1.116879
+v 0.397296 2.153779 0.883121
+v -1.602703 2.153779 0.883120
+v -1.602703 2.153779 -1.116879
+v 23.131842 0.013458 18.771643
+v 23.131842 0.013458 18.771643
+v 22.790535 -0.035128 13.592512
+v 22.790535 -0.035128 13.592512
+v 27.634354 -0.009061 18.317017
+v 27.634354 -0.009061 18.317017
+v 27.695053 -0.006385 13.762526
+v 27.695053 -0.006385 13.762526
+v 27.873672 0.022745 5.692792
+v 27.873672 0.022745 5.692792
+v 22.642046 -0.053257 5.452081
+v 22.642046 -0.053257 5.452081
+v 27.765556 0.013055 1.590629
+v 27.765556 0.013055 1.590629
+v 22.991844 0.037042 1.699383
+v 22.991844 0.037042 1.699383
+v 17.211685 0.147452 -14.224781
+v 17.211685 0.147452 -14.224781
+v 12.865637 -0.339586 -14.892366
+v 12.865637 -0.339586 -14.892366
+v 27.191948 0.118744 -14.495943
+v 27.191948 0.118744 -14.495943
+v 22.038488 0.095042 -14.454016
+v 22.038488 0.095042 -14.454016
+v 17.504200 0.062877 -18.759321
+v 17.504200 0.062877 -18.759321
+v 12.806686 -0.339501 -19.331060
+v 12.806686 -0.339501 -19.331060
+v 26.818520 0.103842 -19.559683
+v 26.818520 0.103842 -19.559683
+v 22.151436 0.181491 -19.056967
+v 22.151436 0.181491 -19.056967
+v 9.046290 0.115975 13.089104
+v 9.046290 0.115975 13.089104
+v 8.593560 0.134677 18.476246
+v 8.593560 0.134677 18.476246
+v 6.232576 0.492930 13.798538
+v 6.232576 0.492930 13.798538
+v 6.275683 0.197633 18.658403
+v 6.275683 0.197633 18.658403
+v -0.229397 -0.117567 -22.161112
+v -0.229397 -0.117567 -22.161112
+v -0.044548 -0.206861 -18.838579
+v -0.044548 -0.206861 -18.838579
+v -3.128355 -0.133932 -21.973303
+v -3.128355 -0.133932 -21.973303
+v -2.843954 -0.168313 -18.339014
+v -2.843954 -0.168313 -18.339014
+v -9.413771 -0.120747 -9.322878
+v -9.413771 -0.120747 -9.322878
+v -9.070250 -0.140578 -5.411852
+v -9.070250 -0.140578 -5.411852
+v -5.872087 -0.212212 5.924550
+v -5.872087 -0.212212 5.924550
+v -8.660698 -0.180848 6.288526
+v -8.660698 -0.180848 6.288526
+v -5.993635 -0.231794 9.553251
+v -5.993635 -0.231794 9.553251
+v -8.615654 -0.198251 9.848503
+v -8.615654 -0.198251 9.848503
+v -8.552967 6.827248 9.931889
+v -8.552967 6.827248 9.931889
+v -12.325912 -0.080146 -9.306499
+v -12.325912 -0.080146 -9.306499
+v -11.901482 -0.083414 -5.441702
+v -11.901482 -0.083414 -5.441702
+v -14.456865 0.342764 14.535879
+v -14.456865 0.342764 14.535879
+v -14.954050 0.459440 19.997721
+v -14.954050 0.459440 19.997721
+v -17.508924 0.381200 15.041679
+v -17.508924 0.381200 15.041679
+v -17.517565 0.492335 19.949137
+v -17.517565 0.492335 19.949137
+v -23.670496 0.314140 15.424084
+v -23.670496 0.314140 15.424084
+v -23.881609 0.522342 20.376089
+v -23.881609 0.522342 20.376089
+v -23.812929 0.060809 3.520123
+v -23.812929 0.060809 3.520123
+v -23.954977 -0.031059 6.952433
+v -23.954977 -0.031059 6.952433
+v -24.824389 0.052782 -17.631231
+v -24.824389 0.052782 -17.631231
+v -24.747480 0.066652 -12.815439
+v -24.747480 0.066652 -12.815439
+v -26.534021 0.421200 15.422380
+v -26.534021 0.421200 15.422380
+v -26.949457 0.599366 20.526201
+v -26.949457 0.599366 20.526201
+v -26.827826 0.035715 2.937074
+v -26.827826 0.035715 2.937074
+v -26.594584 0.025369 6.980439
+v -26.594584 0.025369 6.980439
+v -27.463373 0.112211 -17.708776
+v -27.463373 0.112211 -17.708776
+v -27.429884 0.055252 -12.695322
+v -27.429884 0.055252 -12.695322
+v -9.193329 12.831282 -9.306175
+v -9.193329 12.831282 -9.306175
+v -8.849808 12.811450 -5.395151
+v -8.849808 12.811450 -5.395151
+v -12.105471 12.871882 -9.289797
+v -12.105471 12.871882 -9.289797
+v -11.681040 12.868614 -5.424999
+v -11.681040 12.868614 -5.424999
+v 27.234844 7.395595 -14.443241
+v 27.234844 7.395595 -14.443241
+v 22.081385 7.371892 -14.401314
+v 22.081385 7.371892 -14.401314
+v 26.861416 7.380693 -19.506983
+v 26.861416 7.380693 -19.506983
+v 22.194332 7.458342 -19.004267
+v 22.194332 7.458342 -19.004267
+v -23.517752 5.385185 15.238759
+v -23.517752 5.385185 15.238759
+v -23.728868 5.593387 20.190763
+v -23.728868 5.593387 20.190763
+v -26.381281 5.492245 15.237057
+v -26.381281 5.492245 15.237057
+v -26.796717 5.670411 20.340878
+v -26.796717 5.670411 20.340878
+v 23.127361 5.585575 18.745489
+v 23.127361 5.585575 18.745489
+v 22.786055 5.536989 13.566360
+v 22.786055 5.536989 13.566360
+v 27.629875 5.563056 18.290863
+v 27.629875 5.563056 18.290863
+v 27.690573 5.565733 13.736372
+v 27.690573 5.565733 13.736372
+v 16.829655 4.097627 -14.271919
+v 16.829655 4.097627 -14.271919
+v 12.483604 3.610589 -14.939507
+v 12.483604 3.610589 -14.939507
+v 17.122168 4.013052 -18.806459
+v 17.122168 4.013052 -18.806459
+v 12.424654 3.610674 -19.378199
+v 12.424654 3.610674 -19.378199
+v -0.134611 15.711366 -21.886084
+v -0.134611 15.711366 -21.886084
+v 0.050238 15.622071 -18.563551
+v 0.050238 15.622071 -18.563551
+v -3.033569 15.695001 -21.698275
+v -3.033569 15.695001 -21.698275
+v -2.749168 15.660620 -18.063984
+v -2.749168 15.660620 -18.063984
+v -24.714979 12.128282 -17.579521
+v -24.714979 12.128282 -17.579521
+v -24.638071 12.142152 -12.763729
+v -24.638071 12.142152 -12.763729
+v -27.353964 12.187711 -17.657064
+v -27.353964 12.187711 -17.657064
+v -27.320475 12.130752 -12.643612
+v -27.320475 12.130752 -12.643612
+v -5.790018 6.817943 5.965222
+v -5.790018 6.817943 5.965222
+v -5.678535 6.796543 9.597301
+v -5.678535 6.796543 9.597301
+v -8.578629 6.849307 6.329198
+v -8.578629 6.849307 6.329198
+v 9.061446 4.476840 13.032704
+v 9.061446 4.476840 13.032704
+v 8.608716 4.495542 18.419846
+v 8.608716 4.495542 18.419846
+v 6.329820 4.444058 13.826568
+v 6.329820 4.444058 13.826568
+v 6.290839 4.558498 18.602005
+v 6.290839 4.558498 18.602005
+v -14.358084 9.356542 14.342667
+v -14.358084 9.356542 14.342667
+v -14.855268 9.473218 19.804508
+v -14.855268 9.473218 19.804508
+v -17.410143 9.394978 14.848467
+v -17.410143 9.394978 14.848467
+v -17.418783 9.506113 19.755924
+v -17.418783 9.506113 19.755924
+v -23.783236 7.124237 3.616339
+v -23.783236 7.124237 3.616339
+v -23.925280 7.032368 7.048649
+v -23.925280 7.032368 7.048649
+v -26.798128 7.099143 3.033290
+v -26.798128 7.099143 3.033290
+v -26.564886 7.088796 7.076654
+v -26.564886 7.088796 7.076654
+v 27.873672 0.022745 5.692792
+v 27.873672 0.022745 5.692792
+v 27.873672 0.022745 5.692792
+v 22.642046 -0.053257 5.452081
+v 22.642046 -0.053257 5.452081
+v 22.642046 -0.053257 5.452081
+v 27.765556 0.013055 1.590629
+v 27.765556 0.013055 1.590629
+v 27.765556 0.013055 1.590629
+v 22.991844 0.037042 1.699383
+v 22.991844 0.037042 1.699383
+v 22.991844 0.037042 1.699383
+v 27.861481 2.309013 5.715878
+v 27.861481 2.309013 5.715878
+v 22.629856 2.233011 5.475168
+v 22.629856 2.233011 5.475168
+v 27.753366 2.299323 1.613716
+v 27.753366 2.299323 1.613716
+v 22.981640 1.923218 1.773168
+v 22.981640 1.923218 1.773168
+v 0.397297 0.153779 -1.116879
+v 0.397297 0.153779 -1.116879
+v 0.397297 0.153779 0.883121
+v 0.397297 0.153779 0.883121
+v -1.602703 0.153779 -1.116880
+v -1.602703 0.153779 -1.116880
+v 0.397297 2.153779 -1.116879
+v 0.397297 2.153779 -1.116879
+v -1.602703 0.153779 0.883120
+v -1.602703 0.153779 0.883120
+v 0.397296 2.153779 0.883121
+v 0.397296 2.153779 0.883121
+v -1.602703 2.153779 0.883120
+v -1.602703 2.153779 0.883120
+v -1.602703 2.153779 -1.116879
+v -1.602703 2.153779 -1.116879
+vt 0.4258 0.3291
+vt 0.3877 0.2891
+vt 0.3877 0.3291
+vt 0.4258 0.2891
+vt 0.3877 0.2480
+vt 0.3877 0.2891
+vt 0.3857 0.3291
+vt 0.3477 0.2891
+vt 0.3477 0.3291
+vt 0.3857 0.2891
+vt 0.3477 0.2480
+vt 0.3477 0.2891
+vt 0.3877 0.2480
+vt 0.4258 0.2080
+vt 0.3877 0.2080
+vt 0.3066 0.3291
+vt 0.3447 0.2891
+vt 0.3066 0.2891
+vt 0.3066 0.2891
+vt 0.3447 0.2480
+vt 0.3066 0.2480
+vt 0.3477 0.2480
+vt 0.3857 0.2080
+vt 0.3477 0.2080
+vt 0.3447 0.2480
+vt 0.3066 0.2080
+vt 0.3066 0.2480
+vt 0.4258 0.2080
+vt 0.3877 0.1670
+vt 0.3877 0.2080
+vt 0.3066 0.3291
+vt 0.2666 0.2891
+vt 0.2666 0.3291
+vt 0.3857 0.2080
+vt 0.3477 0.1670
+vt 0.3477 0.2080
+vt 0.2666 0.2891
+vt 0.3066 0.2480
+vt 0.2666 0.2480
+vt 0.3447 0.2080
+vt 0.3066 0.1670
+vt 0.3066 0.2080
+vt 0.3066 0.2480
+vt 0.2666 0.2080
+vt 0.2666 0.2480
+vt 0.3066 0.2080
+vt 0.2666 0.1670
+vt 0.2666 0.2080
+vt 0.4258 0.1670
+vt 0.3877 0.1270
+vt 0.3877 0.1670
+vt 0.2256 0.3291
+vt 0.2666 0.2891
+vt 0.2256 0.2891
+vt 0.2666 0.2891
+vt 0.2256 0.2480
+vt 0.2256 0.2891
+vt 0.3477 0.1670
+vt 0.3857 0.1270
+vt 0.3477 0.1270
+vt 0.3447 0.1670
+vt 0.3066 0.1270
+vt 0.3066 0.1670
+vt 0.2256 0.2480
+vt 0.2666 0.2080
+vt 0.2256 0.2080
+vt 0.2666 0.2080
+vt 0.2256 0.1670
+vt 0.2256 0.2080
+vt 0.2666 0.1670
+vt 0.3066 0.1270
+vt 0.2666 0.1270
+vt 0.2666 0.1670
+vt 0.2256 0.1270
+vt 0.2256 0.1670
+vt 0.1855 0.3291
+vt 0.2256 0.2891
+vt 0.1855 0.2891
+vt 0.3877 0.1270
+vt 0.4258 0.0859
+vt 0.3877 0.0859
+vt 0.1855 0.2891
+vt 0.2256 0.2480
+vt 0.1855 0.2480
+vt 0.3857 0.1270
+vt 0.3477 0.0859
+vt 0.3477 0.1270
+vt 0.3447 0.1270
+vt 0.3066 0.0859
+vt 0.3066 0.1270
+vt 0.2256 0.2480
+vt 0.1855 0.2080
+vt 0.1855 0.2480
+vt 0.2666 0.1270
+vt 0.3066 0.0859
+vt 0.2666 0.0859
+vt 0.2256 0.2080
+vt 0.1855 0.1670
+vt 0.1855 0.2080
+vt 0.2256 0.1270
+vt 0.2666 0.0859
+vt 0.2256 0.0859
+vt 0.1855 0.1670
+vt 0.2256 0.1270
+vt 0.1855 0.1270
+vt 0.2256 0.1270
+vt 0.1855 0.0859
+vt 0.1855 0.1270
+vt 0.1855 0.3291
+vt 0.1445 0.2891
+vt 0.1445 0.3291
+vt 0.4258 0.0859
+vt 0.3877 0.0459
+vt 0.3877 0.0859
+vt 0.1855 0.2891
+vt 0.1445 0.2480
+vt 0.1445 0.2891
+vt 0.3857 0.0859
+vt 0.3477 0.0459
+vt 0.3477 0.0859
+vt 0.3447 0.0859
+vt 0.3066 0.0459
+vt 0.3066 0.0859
+vt 0.1855 0.2480
+vt 0.1445 0.2080
+vt 0.1445 0.2480
+vt 0.1445 0.2080
+vt 0.1855 0.1670
+vt 0.1445 0.1670
+vt 0.2666 0.0859
+vt 0.3066 0.0459
+vt 0.2666 0.0459
+vt 0.1855 0.1670
+vt 0.1445 0.1270
+vt 0.1445 0.1670
+vt 0.2666 0.0859
+vt 0.2256 0.0459
+vt 0.2256 0.0859
+vt 0.1445 0.1270
+vt 0.1855 0.0859
+vt 0.1445 0.0859
+vt 0.2256 0.0859
+vt 0.1855 0.0459
+vt 0.1855 0.0859
+vt 0.1855 0.0859
+vt 0.1445 0.0459
+vt 0.1445 0.0859
+vt 0.1445 0.3291
+vt 0.1045 0.2891
+vt 0.1045 0.3291
+vt 0.3877 0.0459
+vt 0.4258 0.0078
+vt 0.3877 0.0078
+vt 0.1045 0.2891
+vt 0.1445 0.2480
+vt 0.1045 0.2480
+vt 0.3477 0.0459
+vt 0.3857 0.0078
+vt 0.3477 0.0078
+vt 0.1045 0.2480
+vt 0.1445 0.2080
+vt 0.1045 0.2080
+vt 0.3447 0.0459
+vt 0.3066 0.0078
+vt 0.2666 0.0459
+vt 0.3066 0.0078
+vt 0.2666 0.0078
+vt 0.1445 0.2080
+vt 0.1045 0.1670
+vt 0.1045 0.2080
+vt 0.1445 0.1670
+vt 0.1045 0.1270
+vt 0.1045 0.1670
+vt 0.2666 0.0459
+vt 0.2256 0.0078
+vt 0.2256 0.0459
+vt 0.2256 0.0459
+vt 0.1855 0.0078
+vt 0.1855 0.0459
+vt 0.1445 0.1270
+vt 0.1045 0.0859
+vt 0.1045 0.1270
+vt 0.1855 0.0459
+vt 0.1445 0.0078
+vt 0.1445 0.0459
+vt 0.1445 0.0859
+vt 0.1045 0.0459
+vt 0.1045 0.0859
+vt 0.1445 0.0459
+vt 0.1045 0.0078
+vt 0.1045 0.0459
+vt 0.9150 0.0117
+vt 0.9453 0.0410
+vt 0.9453 0.0117
+vt 0.6289 0.0469
+vt 0.5986 0.0762
+vt 0.6289 0.0762
+vt 0.5635 0.0469
+vt 0.5938 0.0762
+vt 0.5938 0.0469
+vt 0.6289 0.0117
+vt 0.5986 0.0410
+vt 0.6289 0.0410
+vt 0.9805 0.0234
+vt 0.9502 0.0117
+vt 0.9502 0.0234
+vt 0.8262 0.8018
+vt 0.8125 0.7686
+vt 0.8125 0.8018
+vt 0.8066 0.7686
+vt 0.7930 0.8018
+vt 0.8066 0.8018
+vt 0.7080 0.7285
+vt 0.6934 0.7627
+vt 0.7080 0.7627
+vt 0.5635 0.0117
+vt 0.5938 0.0410
+vt 0.5938 0.0117
+vt 0.6992 0.0469
+vt 0.6689 0.0762
+vt 0.6992 0.0762
+vt 0.6885 0.7627
+vt 0.6738 0.7285
+vt 0.6738 0.7627
+vt 0.6885 0.9658
+vt 0.6738 0.9805
+vt 0.6885 0.9805
+vt 0.5566 0.5625
+vt 0.5293 0.5908
+vt 0.5566 0.5908
+vt 0.7471 0.7627
+vt 0.7334 0.7285
+vt 0.7334 0.7627
+vt 0.7139 0.7285
+vt 0.7275 0.7627
+vt 0.7275 0.7285
+vt 0.5176 0.5625
+vt 0.4893 0.5908
+vt 0.5176 0.5908
+vt 0.7080 0.7686
+vt 0.6934 0.8018
+vt 0.7080 0.8018
+vt 0.5566 0.5234
+vt 0.5293 0.5508
+vt 0.5566 0.5508
+vt 0.6885 0.8018
+vt 0.6738 0.7686
+vt 0.6738 0.8018
+vt 0.7471 0.7686
+vt 0.7334 0.8018
+vt 0.7471 0.8018
+vt 0.6641 0.0469
+vt 0.6338 0.0762
+vt 0.6641 0.0762
+vt 0.6992 0.0117
+vt 0.6689 0.0410
+vt 0.6992 0.0410
+vt 0.6641 0.0117
+vt 0.6338 0.0410
+vt 0.6641 0.0410
+vt 0.5176 0.5234
+vt 0.4893 0.5508
+vt 0.5176 0.5508
+vt 0.7275 0.8018
+vt 0.7139 0.7686
+vt 0.7139 0.8018
+vt 0.7871 0.6494
+vt 0.7725 0.6836
+vt 0.7871 0.6836
+vt 0.7676 0.6836
+vt 0.7529 0.6494
+vt 0.7529 0.6836
+vt 0.8125 0.6494
+vt 0.8262 0.6836
+vt 0.8262 0.6494
+vt 0.8066 0.6494
+vt 0.7930 0.6836
+vt 0.8066 0.6836
+vt 0.7871 0.6895
+vt 0.7725 0.7236
+vt 0.7871 0.7236
+vt 0.7676 0.7236
+vt 0.7529 0.6895
+vt 0.7529 0.7236
+vt 0.6357 0.5625
+vt 0.6074 0.5908
+vt 0.6357 0.5908
+vt 0.6289 0.1172
+vt 0.5986 0.1475
+vt 0.6289 0.1475
+vt 0.5938 0.1172
+vt 0.5635 0.1475
+vt 0.5938 0.1475
+vt 0.8262 0.7236
+vt 0.8125 0.6895
+vt 0.8125 0.7236
+vt 0.8066 0.6895
+vt 0.7930 0.7236
+vt 0.8066 0.7236
+vt 0.7080 0.6494
+vt 0.6934 0.6836
+vt 0.7080 0.6836
+vt 0.5986 0.0820
+vt 0.6289 0.1113
+vt 0.6289 0.0820
+vt 0.5635 0.0820
+vt 0.5938 0.1113
+vt 0.5938 0.0820
+vt 0.6885 0.6494
+vt 0.6738 0.6836
+vt 0.6885 0.6836
+vt 0.7471 0.6836
+vt 0.7334 0.6494
+vt 0.7334 0.6836
+vt 0.5967 0.5625
+vt 0.5684 0.5908
+vt 0.5967 0.5908
+vt 0.7275 0.6836
+vt 0.7139 0.6494
+vt 0.7139 0.6836
+vt 0.6074 0.5234
+vt 0.6357 0.5508
+vt 0.6357 0.5234
+vt 0.5684 0.5234
+vt 0.5967 0.5508
+vt 0.5967 0.5234
+vt 0.7080 0.7236
+vt 0.6934 0.6895
+vt 0.6934 0.7236
+vt 0.6885 0.6895
+vt 0.6738 0.7236
+vt 0.6885 0.7236
+vt 0.7471 0.7236
+vt 0.7334 0.6895
+vt 0.7334 0.7236
+vt 0.7275 0.6895
+vt 0.7139 0.7236
+vt 0.7275 0.7236
+vt 0.9453 0.7627
+vt 0.9307 0.7285
+vt 0.9307 0.7627
+vt 0.5293 0.6416
+vt 0.5566 0.6689
+vt 0.5566 0.6416
+vt 0.4893 0.6416
+vt 0.5176 0.6689
+vt 0.5176 0.6416
+vt 0.5293 0.6016
+vt 0.5566 0.6299
+vt 0.5566 0.6016
+vt 0.5176 0.6016
+vt 0.4893 0.6299
+vt 0.5176 0.6299
+vt 0.6357 0.6416
+vt 0.6074 0.6689
+vt 0.6357 0.6689
+vt 0.9248 0.7627
+vt 0.9111 0.7285
+vt 0.9111 0.7627
+vt 0.9844 0.7627
+vt 0.9707 0.7285
+vt 0.9707 0.7627
+vt 0.5967 0.6416
+vt 0.5684 0.6689
+vt 0.5967 0.6689
+vt 0.6357 0.6016
+vt 0.6074 0.6299
+vt 0.6357 0.6299
+vt 0.9648 0.7627
+vt 0.9502 0.7285
+vt 0.9502 0.7627
+vt 0.5967 0.6016
+vt 0.5684 0.6299
+vt 0.5967 0.6299
+vt 0.3994 0.5625
+vt 0.3711 0.5908
+vt 0.3994 0.5908
+vt 0.3604 0.5625
+vt 0.3320 0.5908
+vt 0.3604 0.5908
+vt 0.9307 0.7686
+vt 0.9453 0.8018
+vt 0.9453 0.7686
+vt 0.9248 0.8018
+vt 0.9111 0.7686
+vt 0.9111 0.8018
+vt 0.3711 0.5234
+vt 0.3994 0.5508
+vt 0.3994 0.5234
+vt 0.3604 0.5234
+vt 0.3320 0.5508
+vt 0.3604 0.5508
+vt 0.9844 0.8018
+vt 0.9707 0.7686
+vt 0.9707 0.8018
+vt 0.9648 0.7686
+vt 0.9502 0.8018
+vt 0.9648 0.8018
+vt 0.4785 0.5625
+vt 0.4502 0.5908
+vt 0.4785 0.5908
+vt 0.4385 0.5625
+vt 0.4111 0.5908
+vt 0.4385 0.5908
+vt 0.8662 0.7627
+vt 0.8516 0.7285
+vt 0.8516 0.7627
+vt 0.4785 0.5234
+vt 0.4502 0.5508
+vt 0.4785 0.5508
+vt 0.4385 0.5234
+vt 0.4111 0.5508
+vt 0.4385 0.5508
+vt 0.3994 0.6416
+vt 0.3711 0.6689
+vt 0.3994 0.6689
+vt 0.3604 0.6416
+vt 0.3320 0.6689
+vt 0.3604 0.6689
+vt 0.8457 0.7627
+vt 0.8320 0.7285
+vt 0.8320 0.7627
+vt 0.3994 0.6016
+vt 0.3711 0.6299
+vt 0.3994 0.6299
+vt 0.3604 0.6016
+vt 0.3320 0.6299
+vt 0.3604 0.6299
+vt 0.9053 0.7627
+vt 0.8916 0.7285
+vt 0.8916 0.7627
+vt 0.4502 0.6416
+vt 0.4785 0.6689
+vt 0.4785 0.6416
+vt 0.4385 0.6416
+vt 0.4111 0.6689
+vt 0.4385 0.6689
+vt 0.4785 0.6016
+vt 0.4502 0.6299
+vt 0.4785 0.6299
+vt 0.8857 0.7627
+vt 0.8711 0.7285
+vt 0.8711 0.7627
+vt 0.4385 0.6016
+vt 0.4111 0.6299
+vt 0.4385 0.6299
+vt 0.5566 0.4053
+vt 0.5293 0.4326
+vt 0.5566 0.4326
+vt 0.0566 0.5234
+vt 0.0840 0.6689
+vt 0.0840 0.5234
+vt 0.8662 0.8018
+vt 0.8516 0.7686
+vt 0.8516 0.8018
+vt 0.5176 0.4053
+vt 0.4893 0.4326
+vt 0.5176 0.4326
+vt 0.5566 0.3652
+vt 0.5293 0.3936
+vt 0.5566 0.3936
+vt 0.8457 0.8018
+vt 0.8320 0.7686
+vt 0.8320 0.8018
+vt 0.9053 0.8018
+vt 0.8916 0.7686
+vt 0.8916 0.8018
+vt 0.5176 0.3652
+vt 0.4893 0.3936
+vt 0.5176 0.3936
+vt 0.6357 0.4053
+vt 0.6074 0.4326
+vt 0.6357 0.4326
+vt 0.8857 0.8018
+vt 0.8711 0.7686
+vt 0.8711 0.8018
+vt 0.5967 0.4053
+vt 0.5684 0.4326
+vt 0.5967 0.4326
+vt 0.6357 0.3652
+vt 0.6074 0.3936
+vt 0.6357 0.3936
+vt 0.5684 0.3652
+vt 0.5967 0.3936
+vt 0.5967 0.3652
+vt 0.9453 0.6494
+vt 0.9307 0.6836
+vt 0.9453 0.6836
+vt 0.5293 0.4834
+vt 0.5566 0.5117
+vt 0.5566 0.4834
+vt 0.4893 0.4834
+vt 0.5176 0.5117
+vt 0.5176 0.4834
+vt 0.9248 0.6494
+vt 0.9111 0.6836
+vt 0.9248 0.6836
+vt 0.9844 0.6494
+vt 0.9707 0.6836
+vt 0.9844 0.6836
+vt 0.9648 0.6494
+vt 0.9502 0.6836
+vt 0.9648 0.6836
+vt 0.5293 0.4443
+vt 0.5566 0.4727
+vt 0.5566 0.4443
+vt 0.9453 0.6895
+vt 0.9307 0.7236
+vt 0.9453 0.7236
+vt 0.4893 0.4443
+vt 0.5176 0.4727
+vt 0.5176 0.4443
+vt 0.6357 0.4834
+vt 0.6074 0.5117
+vt 0.6357 0.5117
+vt 0.9248 0.7236
+vt 0.9111 0.6895
+vt 0.9111 0.7236
+vt 0.5967 0.4834
+vt 0.5684 0.5117
+vt 0.5967 0.5117
+vt 0.9844 0.7236
+vt 0.9707 0.6895
+vt 0.9707 0.7236
+vt 0.6357 0.4443
+vt 0.6074 0.4727
+vt 0.6357 0.4727
+vt 0.5967 0.4443
+vt 0.5684 0.4727
+vt 0.5967 0.4727
+vt 0.9648 0.7236
+vt 0.9502 0.6895
+vt 0.9502 0.7236
+vt 0.8662 0.6836
+vt 0.8516 0.6494
+vt 0.8516 0.6836
+vt 0.8457 0.6836
+vt 0.8320 0.6494
+vt 0.8320 0.6836
+vt 0.3994 0.4053
+vt 0.3711 0.4326
+vt 0.3994 0.4326
+vt 0.9053 0.6836
+vt 0.8916 0.6494
+vt 0.8916 0.6836
+vt 0.3604 0.4053
+vt 0.3320 0.4326
+vt 0.3604 0.4326
+vt 0.3994 0.3652
+vt 0.3711 0.3936
+vt 0.3994 0.3936
+vt 0.3604 0.3652
+vt 0.3320 0.3936
+vt 0.3604 0.3936
+vt 0.8857 0.6836
+vt 0.8711 0.6494
+vt 0.8711 0.6836
+vt 0.0166 0.5234
+vt 0.0449 0.6689
+vt 0.0449 0.5234
+vt 0.4785 0.4053
+vt 0.4502 0.4326
+vt 0.4785 0.4326
+vt 0.8662 0.7236
+vt 0.8516 0.6895
+vt 0.8516 0.7236
+vt 0.8457 0.7236
+vt 0.8320 0.6895
+vt 0.8320 0.7236
+vt 0.9053 0.6895
+vt 0.8916 0.7236
+vt 0.9053 0.7236
+vt 0.4385 0.4053
+vt 0.4111 0.4326
+vt 0.4385 0.4326
+vt 0.8857 0.7236
+vt 0.8711 0.6895
+vt 0.8711 0.7236
+vt 0.7871 0.9209
+vt 0.7725 0.8867
+vt 0.7725 0.9209
+vt 0.4502 0.3652
+vt 0.4785 0.3936
+vt 0.4785 0.3652
+vt 0.4111 0.3652
+vt 0.4385 0.3936
+vt 0.4385 0.3652
+vt 0.3994 0.4834
+vt 0.3711 0.5117
+vt 0.3994 0.5117
+vt 0.7676 0.9209
+vt 0.7529 0.8867
+vt 0.7529 0.9209
+vt 0.3320 0.4834
+vt 0.3604 0.5117
+vt 0.3604 0.4834
+vt 0.3711 0.4443
+vt 0.3994 0.4727
+vt 0.3994 0.4443
+vt 0.3604 0.4443
+vt 0.3320 0.4727
+vt 0.3604 0.4727
+vt 0.8262 0.9209
+vt 0.8125 0.8867
+vt 0.8125 0.9209
+vt 0.8066 0.8867
+vt 0.7930 0.9209
+vt 0.8066 0.9209
+vt 0.4502 0.4834
+vt 0.4785 0.5117
+vt 0.4785 0.4834
+vt 0.4111 0.4834
+vt 0.4385 0.5117
+vt 0.4385 0.4834
+vt 0.7871 0.9268
+vt 0.7725 0.9600
+vt 0.7871 0.9600
+vt 0.4785 0.4443
+vt 0.4502 0.4727
+vt 0.4785 0.4727
+vt 0.7676 0.9600
+vt 0.7529 0.9268
+vt 0.7529 0.9600
+vt 0.4385 0.4443
+vt 0.4111 0.4727
+vt 0.4385 0.4727
+vt 0.2529 0.5234
+vt 0.3203 0.6689
+vt 0.3203 0.5234
+vt 0.2422 0.8779
+vt 0.2139 0.9053
+vt 0.2422 0.9053
+vt 0.2021 0.8779
+vt 0.1748 0.9053
+vt 0.2021 0.9053
+vt 0.8262 0.9600
+vt 0.8125 0.9268
+vt 0.8125 0.9600
+vt 0.8066 0.9600
+vt 0.7930 0.9268
+vt 0.7930 0.9600
+vt 0.7080 0.9209
+vt 0.6934 0.8867
+vt 0.6934 0.9209
+vt 0.2422 0.8379
+vt 0.2139 0.8662
+vt 0.2422 0.8662
+vt 0.1748 0.8379
+vt 0.2021 0.8662
+vt 0.2021 0.8379
+vt 0.2930 0.8779
+vt 0.3203 0.9053
+vt 0.3203 0.8779
+vt 0.2529 0.8779
+vt 0.2812 0.9053
+vt 0.2812 0.8779
+vt 0.6885 0.9209
+vt 0.6738 0.8867
+vt 0.6738 0.9209
+vt 0.2930 0.8379
+vt 0.3203 0.8662
+vt 0.3203 0.8379
+vt 0.2812 0.8379
+vt 0.2529 0.8662
+vt 0.2812 0.8662
+vt 0.7471 0.9209
+vt 0.7334 0.8867
+vt 0.7334 0.9209
+vt 0.2139 0.9561
+vt 0.2422 0.9844
+vt 0.2422 0.9561
+vt 0.7275 0.8867
+vt 0.7139 0.9209
+vt 0.7275 0.9209
+vt 0.7080 0.9600
+vt 0.6934 0.9268
+vt 0.6934 0.9600
+vt 0.1748 0.9561
+vt 0.2021 0.9844
+vt 0.2021 0.9561
+vt 0.6885 0.9600
+vt 0.6738 0.9268
+vt 0.6738 0.9600
+vt 0.2139 0.9170
+vt 0.2422 0.9453
+vt 0.2422 0.9170
+vt 0.2021 0.9170
+vt 0.1748 0.9453
+vt 0.2021 0.9453
+vt 0.3203 0.9561
+vt 0.2930 0.9844
+vt 0.3203 0.9844
+vt 0.7471 0.9600
+vt 0.7334 0.9268
+vt 0.7334 0.9600
+vt 0.2812 0.9561
+vt 0.2529 0.9844
+vt 0.2812 0.9844
+vt 0.3203 0.9170
+vt 0.2930 0.9453
+vt 0.3203 0.9453
+vt 0.7275 0.9600
+vt 0.7139 0.9268
+vt 0.7139 0.9600
+vt 0.2529 0.9170
+vt 0.2812 0.9453
+vt 0.2812 0.9170
+vt 0.7871 0.8076
+vt 0.7725 0.8418
+vt 0.7871 0.8418
+vt 0.0566 0.8779
+vt 0.0840 0.9053
+vt 0.0840 0.8779
+vt 0.1348 0.5234
+vt 0.1631 0.6689
+vt 0.1631 0.5234
+vt 0.0166 0.8779
+vt 0.0449 0.9053
+vt 0.0449 0.8779
+vt 0.0566 0.8379
+vt 0.0840 0.8662
+vt 0.0840 0.8379
+vt 0.0449 0.8379
+vt 0.0166 0.8662
+vt 0.0449 0.8662
+vt 0.7529 0.8076
+vt 0.7676 0.8418
+vt 0.7676 0.8076
+vt 0.1631 0.8779
+vt 0.1348 0.9053
+vt 0.1631 0.9053
+vt 0.8262 0.8076
+vt 0.8125 0.8418
+vt 0.8262 0.8418
+vt 0.8066 0.8076
+vt 0.7930 0.8418
+vt 0.8066 0.8418
+vt 0.0957 0.8779
+vt 0.1240 0.9053
+vt 0.1240 0.8779
+vt 0.7871 0.8477
+vt 0.7725 0.8809
+vt 0.7871 0.8809
+vt 0.1348 0.8379
+vt 0.1631 0.8662
+vt 0.1631 0.8379
+vt 0.0957 0.8379
+vt 0.1240 0.8662
+vt 0.1240 0.8379
+vt 0.7676 0.8477
+vt 0.7529 0.8809
+vt 0.7676 0.8809
+vt 0.0840 0.9561
+vt 0.0566 0.9844
+vt 0.0840 0.9844
+vt 0.0166 0.9561
+vt 0.0449 0.9844
+vt 0.0449 0.9561
+vt 0.0566 0.9170
+vt 0.0840 0.9453
+vt 0.0840 0.9170
+vt 0.8262 0.8809
+vt 0.8125 0.8477
+vt 0.8125 0.8809
+vt 0.0449 0.9170
+vt 0.0166 0.9453
+vt 0.0449 0.9453
+vt 0.1631 0.9561
+vt 0.1348 0.9844
+vt 0.1631 0.9844
+vt 0.8066 0.8477
+vt 0.7930 0.8809
+vt 0.8066 0.8809
+vt 0.0957 0.9561
+vt 0.1240 0.9844
+vt 0.1240 0.9561
+vt 0.0957 0.5234
+vt 0.1240 0.6689
+vt 0.1240 0.5234
+vt 0.2422 0.3652
+vt 0.2139 0.5117
+vt 0.2422 0.5117
+vt 0.2021 0.3652
+vt 0.1748 0.5117
+vt 0.2021 0.5117
+vt 0.6689 0.1172
+vt 0.6992 0.1475
+vt 0.6992 0.1172
+vt 0.6641 0.1172
+vt 0.6338 0.1475
+vt 0.6641 0.1475
+vt 0.6992 0.0820
+vt 0.6689 0.1113
+vt 0.6992 0.1113
+vt 0.6338 0.0820
+vt 0.6641 0.1113
+vt 0.6641 0.0820
+vt 0.7080 0.8418
+vt 0.6934 0.8076
+vt 0.6934 0.8418
+vt 0.6738 0.8076
+vt 0.6885 0.8418
+vt 0.6885 0.8076
+vt 0.7695 0.0469
+vt 0.7393 0.0762
+vt 0.7695 0.0762
+vt 0.7344 0.0469
+vt 0.7041 0.0762
+vt 0.7344 0.0762
+vt 0.7471 0.8418
+vt 0.7334 0.8076
+vt 0.7334 0.8418
+vt 0.7695 0.0117
+vt 0.7393 0.0410
+vt 0.7695 0.0410
+vt 0.7344 0.0117
+vt 0.7041 0.0410
+vt 0.7344 0.0410
+vt 0.8398 0.0469
+vt 0.8096 0.0762
+vt 0.8398 0.0762
+vt 0.7744 0.0469
+vt 0.8047 0.0762
+vt 0.8047 0.0469
+vt 0.8398 0.0117
+vt 0.8096 0.0410
+vt 0.8398 0.0410
+vt 0.7275 0.8076
+vt 0.7139 0.8418
+vt 0.7275 0.8418
+vt 0.7080 0.8809
+vt 0.6934 0.8477
+vt 0.6934 0.8809
+vt 0.6885 0.8809
+vt 0.6738 0.8477
+vt 0.6738 0.8809
+vt 0.1631 0.9170
+vt 0.1348 0.9453
+vt 0.1631 0.9453
+vt 0.2930 0.3652
+vt 0.3203 0.5117
+vt 0.3203 0.3652
+vt 0.2812 0.3652
+vt 0.2529 0.5117
+vt 0.2812 0.5117
+vt 0.0840 0.3652
+vt 0.0566 0.5117
+vt 0.0840 0.5117
+vt 0.7471 0.8477
+vt 0.7334 0.8809
+vt 0.7471 0.8809
+vt 0.0166 0.3652
+vt 0.0449 0.5117
+vt 0.0449 0.3652
+vt 0.2422 0.5234
+vt 0.1748 0.6689
+vt 0.2422 0.6689
+vt 0.9102 0.0117
+vt 0.8799 0.0762
+vt 0.9102 0.0762
+vt 0.1240 0.9170
+vt 0.0957 0.9453
+vt 0.1240 0.9453
+vt 0.2139 0.7197
+vt 0.2422 0.7480
+vt 0.2422 0.7197
+vt 0.7139 0.8477
+vt 0.7275 0.8809
+vt 0.7275 0.8477
+vt 0.8047 0.1113
+vt 0.7920 0.0820
+vt 0.7920 0.1113
+vt 0.8047 0.0117
+vt 0.7744 0.0410
+vt 0.8047 0.0410
+vt 0.7393 0.1172
+vt 0.7695 0.1475
+vt 0.7695 0.1172
+vt 0.7871 0.0820
+vt 0.7744 0.1113
+vt 0.7871 0.1113
+vt 0.8398 0.1113
+vt 0.8271 0.0820
+vt 0.8271 0.1113
+vt 0.8447 0.0117
+vt 0.8750 0.0762
+vt 0.8750 0.0117
+vt 0.1631 0.3652
+vt 0.1348 0.5117
+vt 0.1631 0.5117
+vt 0.1240 0.3652
+vt 0.0957 0.5117
+vt 0.1240 0.5117
+vt 0.1748 0.7197
+vt 0.2021 0.7480
+vt 0.2021 0.7197
+vt 0.8096 0.0820
+vt 0.8223 0.1113
+vt 0.8223 0.0820
+vt 0.7920 0.1172
+vt 0.8047 0.1475
+vt 0.8047 0.1172
+vt 0.7871 0.1172
+vt 0.7744 0.1475
+vt 0.7871 0.1475
+vt 0.2422 0.6807
+vt 0.2139 0.7090
+vt 0.2422 0.7090
+vt 0.8398 0.1475
+vt 0.8271 0.1172
+vt 0.8271 0.1475
+vt 0.8223 0.1475
+vt 0.8096 0.1172
+vt 0.8096 0.1475
+vt 0.2021 0.6807
+vt 0.1748 0.7090
+vt 0.2021 0.7090
+vt 0.7344 0.0820
+vt 0.7217 0.1113
+vt 0.7344 0.1113
+vt 0.7168 0.1113
+vt 0.7041 0.0820
+vt 0.7041 0.1113
+vt 0.2930 0.7197
+vt 0.3203 0.7480
+vt 0.3203 0.7197
+vt 0.7695 0.0820
+vt 0.7568 0.1113
+vt 0.7695 0.1113
+vt 0.2812 0.7197
+vt 0.2529 0.7480
+vt 0.2812 0.7480
+vt 0.7393 0.0820
+vt 0.7520 0.1113
+vt 0.7520 0.0820
+vt 0.7344 0.1172
+vt 0.7217 0.1475
+vt 0.7344 0.1475
+vt 0.7041 0.1172
+vt 0.7168 0.1475
+vt 0.7168 0.1172
+vt 0.3203 0.6807
+vt 0.2930 0.7090
+vt 0.3203 0.7090
+vt 0.2812 0.6807
+vt 0.2529 0.7090
+vt 0.2812 0.7090
+vt 0.2139 0.7988
+vt 0.2422 0.8271
+vt 0.2422 0.7988
+vt 0.2021 0.7988
+vt 0.1748 0.8271
+vt 0.2021 0.8271
+vt 0.2139 0.7598
+vt 0.2422 0.7871
+vt 0.2422 0.7598
+vt 0.1748 0.7598
+vt 0.2021 0.7871
+vt 0.2021 0.7598
+vt 0.2930 0.7988
+vt 0.3203 0.8271
+vt 0.3203 0.7988
+vt 0.2812 0.7988
+vt 0.2529 0.8271
+vt 0.2812 0.8271
+vt 0.2930 0.7598
+vt 0.3203 0.7871
+vt 0.3203 0.7598
+vt 0.2529 0.7598
+vt 0.2812 0.7871
+vt 0.2812 0.7598
+vt 0.0566 0.7197
+vt 0.0840 0.7480
+vt 0.0840 0.7197
+vt 0.0449 0.7197
+vt 0.0166 0.7480
+vt 0.0449 0.7480
+vt 0.0840 0.6807
+vt 0.0566 0.7090
+vt 0.0840 0.7090
+vt 0.0449 0.6807
+vt 0.0166 0.7090
+vt 0.0449 0.7090
+vt 0.1348 0.7197
+vt 0.1631 0.7480
+vt 0.1631 0.7197
+vt 0.1240 0.7197
+vt 0.0957 0.7480
+vt 0.1240 0.7480
+vt 0.1631 0.6807
+vt 0.1348 0.7090
+vt 0.1631 0.7090
+vt 0.1240 0.6807
+vt 0.0957 0.7090
+vt 0.1240 0.7090
+vt 0.0566 0.7988
+vt 0.0840 0.8271
+vt 0.0840 0.7988
+vt 0.0166 0.7988
+vt 0.0449 0.8271
+vt 0.0449 0.7988
+vt 0.0566 0.7598
+vt 0.0840 0.7871
+vt 0.0840 0.7598
+vt 0.0449 0.7598
+vt 0.0166 0.7871
+vt 0.0449 0.7871
+vt 0.1631 0.7988
+vt 0.1348 0.8271
+vt 0.1631 0.8271
+vt 0.0957 0.7988
+vt 0.1240 0.8271
+vt 0.1240 0.7988
+vt 0.1348 0.7598
+vt 0.1631 0.7871
+vt 0.1631 0.7598
+vt 0.0957 0.7598
+vt 0.1240 0.7871
+vt 0.1240 0.7598
+vt 0.5293 0.8779
+vt 0.5566 0.9053
+vt 0.5566 0.8779
+vt 0.5176 0.8779
+vt 0.4893 0.9053
+vt 0.5176 0.9053
+vt 0.5566 0.8379
+vt 0.5293 0.8662
+vt 0.5566 0.8662
+vt 0.4893 0.8379
+vt 0.5176 0.8662
+vt 0.5176 0.8379
+vt 0.6074 0.8779
+vt 0.6357 0.9053
+vt 0.6357 0.8779
+vt 0.5967 0.8779
+vt 0.5684 0.9053
+vt 0.5967 0.9053
+vt 0.6357 0.8379
+vt 0.6074 0.8662
+vt 0.6357 0.8662
+vt 0.5967 0.8379
+vt 0.5684 0.8662
+vt 0.5967 0.8662
+vt 0.5566 0.9561
+vt 0.5293 0.9844
+vt 0.5566 0.9844
+vt 0.4893 0.9561
+vt 0.5176 0.9844
+vt 0.5176 0.9561
+vt 0.5293 0.9170
+vt 0.5566 0.9453
+vt 0.5566 0.9170
+vt 0.4893 0.9170
+vt 0.5176 0.9453
+vt 0.5176 0.9170
+vt 0.6357 0.9561
+vt 0.6074 0.9844
+vt 0.6357 0.9844
+vt 0.5684 0.9561
+vt 0.5967 0.9844
+vt 0.5967 0.9561
+vt 0.6357 0.9170
+vt 0.6074 0.9453
+vt 0.6357 0.9453
+vt 0.5684 0.9170
+vt 0.5967 0.9453
+vt 0.5967 0.9170
+vt 0.3711 0.8779
+vt 0.3994 0.9053
+vt 0.3994 0.8779
+vt 0.3604 0.8779
+vt 0.3320 0.9053
+vt 0.3604 0.9053
+vt 0.3711 0.8379
+vt 0.3994 0.8662
+vt 0.3994 0.8379
+vt 0.3320 0.8379
+vt 0.3604 0.8662
+vt 0.3604 0.8379
+vt 0.4785 0.8779
+vt 0.4502 0.9053
+vt 0.4785 0.9053
+vt 0.4385 0.8779
+vt 0.4111 0.9053
+vt 0.4385 0.9053
+vt 0.4502 0.8379
+vt 0.4785 0.8662
+vt 0.4785 0.8379
+vt 0.4385 0.8379
+vt 0.4111 0.8662
+vt 0.4385 0.8662
+vt 0.3994 0.9561
+vt 0.3711 0.9844
+vt 0.3994 0.9844
+vt 0.3320 0.9561
+vt 0.3604 0.9844
+vt 0.3604 0.9561
+vt 0.3994 0.9170
+vt 0.3711 0.9453
+vt 0.3994 0.9453
+vt 0.3320 0.9170
+vt 0.3604 0.9453
+vt 0.3604 0.9170
+vt 0.4502 0.9561
+vt 0.4785 0.9844
+vt 0.4785 0.9561
+vt 0.4385 0.9561
+vt 0.4111 0.9844
+vt 0.4385 0.9844
+vt 0.4502 0.9170
+vt 0.4785 0.9453
+vt 0.4785 0.9170
+vt 0.4385 0.9170
+vt 0.4111 0.9453
+vt 0.4385 0.9453
+vt 0.5293 0.7197
+vt 0.5566 0.7480
+vt 0.5566 0.7197
+vt 0.5176 0.7197
+vt 0.4893 0.7480
+vt 0.5176 0.7480
+vt 0.5293 0.6807
+vt 0.5566 0.7090
+vt 0.5566 0.6807
+vt 0.4893 0.6807
+vt 0.5176 0.7090
+vt 0.5176 0.6807
+vt 0.6074 0.7197
+vt 0.6357 0.7480
+vt 0.6357 0.7197
+vt 0.5967 0.7197
+vt 0.5684 0.7480
+vt 0.5967 0.7480
+vt 0.6357 0.6807
+vt 0.6074 0.7090
+vt 0.6357 0.7090
+vt 0.5684 0.6807
+vt 0.5967 0.7090
+vt 0.5967 0.6807
+vt 0.5566 0.7988
+vt 0.5293 0.8271
+vt 0.5566 0.8271
+vt 0.5176 0.7988
+vt 0.4893 0.8271
+vt 0.5176 0.8271
+vt 0.5566 0.7598
+vt 0.5293 0.7871
+vt 0.5566 0.7871
+vt 0.4893 0.7598
+vt 0.5176 0.7871
+vt 0.5176 0.7598
+vt 0.6074 0.7988
+vt 0.6357 0.8271
+vt 0.6357 0.7988
+vt 0.5684 0.7988
+vt 0.5967 0.8271
+vt 0.5967 0.7988
+vt 0.6357 0.7598
+vt 0.6074 0.7871
+vt 0.6357 0.7871
+vt 0.5967 0.7598
+vt 0.5684 0.7871
+vt 0.5967 0.7871
+vt 0.3711 0.7197
+vt 0.3994 0.7480
+vt 0.3994 0.7197
+vt 0.3604 0.7197
+vt 0.3320 0.7480
+vt 0.3604 0.7480
+vt 0.3711 0.6807
+vt 0.3994 0.7090
+vt 0.3994 0.6807
+vt 0.3320 0.6807
+vt 0.3604 0.7090
+vt 0.3604 0.6807
+vt 0.4502 0.7197
+vt 0.4785 0.7480
+vt 0.4785 0.7197
+vt 0.4385 0.7197
+vt 0.4111 0.7480
+vt 0.4385 0.7480
+vt 0.4502 0.6807
+vt 0.4785 0.7090
+vt 0.4785 0.6807
+vt 0.4111 0.6807
+vt 0.4385 0.7090
+vt 0.4385 0.6807
+vt 0.3711 0.7988
+vt 0.3994 0.8271
+vt 0.3994 0.7988
+vt 0.3320 0.7988
+vt 0.3604 0.8271
+vt 0.3604 0.7988
+vt 0.3711 0.7598
+vt 0.3994 0.7871
+vt 0.3994 0.7598
+vt 0.3320 0.7598
+vt 0.3604 0.7871
+vt 0.3604 0.7598
+vt 0.4502 0.7988
+vt 0.4785 0.8271
+vt 0.4785 0.7988
+vt 0.4385 0.7988
+vt 0.4111 0.8271
+vt 0.4385 0.8271
+vt 0.4502 0.7598
+vt 0.4785 0.7871
+vt 0.4785 0.7598
+vt 0.4385 0.7598
+vt 0.4111 0.7871
+vt 0.4385 0.7871
+vt 0.7725 0.2744
+vt 0.7871 0.2891
+vt 0.7871 0.2744
+vt 0.7529 0.2744
+vt 0.7676 0.2891
+vt 0.7676 0.2744
+vt 0.7871 0.2549
+vt 0.7725 0.2686
+vt 0.7871 0.2686
+vt 0.7529 0.2549
+vt 0.7676 0.2686
+vt 0.7676 0.2549
+vt 0.8262 0.2744
+vt 0.8125 0.2891
+vt 0.8262 0.2891
+vt 0.7930 0.2744
+vt 0.8066 0.2891
+vt 0.8066 0.2744
+vt 0.8262 0.2549
+vt 0.8125 0.2686
+vt 0.8262 0.2686
+vt 0.7930 0.2549
+vt 0.8066 0.2686
+vt 0.8066 0.2549
+vt 0.7871 0.3145
+vt 0.7725 0.3281
+vt 0.7871 0.3281
+vt 0.7676 0.3145
+vt 0.7529 0.3281
+vt 0.7676 0.3281
+vt 0.7725 0.2939
+vt 0.7871 0.3086
+vt 0.7871 0.2939
+vt 0.7529 0.2939
+vt 0.7676 0.3086
+vt 0.7676 0.2939
+vt 0.8262 0.3145
+vt 0.8125 0.3281
+vt 0.8262 0.3281
+vt 0.8066 0.3145
+vt 0.7930 0.3281
+vt 0.8066 0.3281
+vt 0.8125 0.2939
+vt 0.8262 0.3086
+vt 0.8262 0.2939
+vt 0.7930 0.2939
+vt 0.8066 0.3086
+vt 0.8066 0.2939
+vt 0.6934 0.2744
+vt 0.7080 0.2891
+vt 0.7080 0.2744
+vt 0.6738 0.2744
+vt 0.6885 0.2891
+vt 0.6885 0.2744
+vt 0.6934 0.2549
+vt 0.7080 0.2686
+vt 0.7080 0.2549
+vt 0.6885 0.2549
+vt 0.6738 0.2686
+vt 0.6885 0.2686
+vt 0.7471 0.2744
+vt 0.7334 0.2891
+vt 0.7471 0.2891
+vt 0.7139 0.2744
+vt 0.7275 0.2891
+vt 0.7275 0.2744
+vt 0.7334 0.2549
+vt 0.7471 0.2686
+vt 0.7471 0.2549
+vt 0.7275 0.2549
+vt 0.7139 0.2686
+vt 0.7275 0.2686
+vt 0.7080 0.3145
+vt 0.6934 0.3281
+vt 0.7080 0.3281
+vt 0.6738 0.3145
+vt 0.6885 0.3281
+vt 0.6885 0.3145
+vt 0.7080 0.2939
+vt 0.6934 0.3086
+vt 0.7080 0.3086
+vt 0.6885 0.2939
+vt 0.6738 0.3086
+vt 0.6885 0.3086
+vt 0.7334 0.3145
+vt 0.7471 0.3281
+vt 0.7471 0.3145
+vt 0.7275 0.3145
+vt 0.7139 0.3281
+vt 0.7275 0.3281
+vt 0.7471 0.2939
+vt 0.7334 0.3086
+vt 0.7471 0.3086
+vt 0.7275 0.2939
+vt 0.7139 0.3086
+vt 0.7275 0.3086
+vt 0.7871 0.1953
+vt 0.7725 0.2100
+vt 0.7871 0.2100
+vt 0.7676 0.1953
+vt 0.7529 0.2100
+vt 0.7676 0.2100
+vt 0.7725 0.1758
+vt 0.7871 0.1895
+vt 0.7871 0.1758
+vt 0.7529 0.1758
+vt 0.7676 0.1895
+vt 0.7676 0.1758
+vt 0.8262 0.1953
+vt 0.8125 0.2100
+vt 0.8262 0.2100
+vt 0.7930 0.1953
+vt 0.8066 0.2100
+vt 0.8066 0.1953
+vt 0.8125 0.1758
+vt 0.8262 0.1895
+vt 0.8262 0.1758
+vt 0.7930 0.1758
+vt 0.8066 0.1895
+vt 0.8066 0.1758
+vt 0.7725 0.2354
+vt 0.7871 0.2490
+vt 0.7871 0.2354
+vt 0.7529 0.2354
+vt 0.7676 0.2490
+vt 0.7676 0.2354
+vt 0.7725 0.2148
+vt 0.7871 0.2295
+vt 0.7871 0.2148
+vt 0.7529 0.2148
+vt 0.7676 0.2295
+vt 0.7676 0.2148
+vt 0.8262 0.2354
+vt 0.8125 0.2490
+vt 0.8262 0.2490
+vt 0.7930 0.2354
+vt 0.8066 0.2490
+vt 0.8066 0.2354
+vt 0.8262 0.2148
+vt 0.8125 0.2295
+vt 0.8262 0.2295
+vt 0.8066 0.2148
+vt 0.7930 0.2295
+vt 0.8066 0.2295
+vt 0.7080 0.1953
+vt 0.6934 0.2100
+vt 0.7080 0.2100
+vt 0.6885 0.1953
+vt 0.6738 0.2100
+vt 0.6885 0.2100
+vt 0.6934 0.1758
+vt 0.7080 0.1895
+vt 0.7080 0.1758
+vt 0.6738 0.1758
+vt 0.6885 0.1895
+vt 0.6885 0.1758
+vt 0.7334 0.1953
+vt 0.7471 0.2100
+vt 0.7471 0.1953
+vt 0.7275 0.1953
+vt 0.7139 0.2100
+vt 0.7275 0.2100
+vt 0.7471 0.1758
+vt 0.7334 0.1895
+vt 0.7471 0.1895
+vt 0.7139 0.1758
+vt 0.7275 0.1895
+vt 0.7275 0.1758
+vt 0.6934 0.2354
+vt 0.7080 0.2490
+vt 0.7080 0.2354
+vt 0.6885 0.2354
+vt 0.6738 0.2490
+vt 0.6885 0.2490
+vt 0.6934 0.2148
+vt 0.7080 0.2295
+vt 0.7080 0.2148
+vt 0.6885 0.2148
+vt 0.6738 0.2295
+vt 0.6885 0.2295
+vt 0.7334 0.2354
+vt 0.7471 0.2490
+vt 0.7471 0.2354
+vt 0.7139 0.2354
+vt 0.7275 0.2490
+vt 0.7275 0.2354
+vt 0.7471 0.2148
+vt 0.7334 0.2295
+vt 0.7471 0.2295
+vt 0.7275 0.2148
+vt 0.7139 0.2295
+vt 0.7275 0.2295
+vt 0.9453 0.2744
+vt 0.9307 0.2891
+vt 0.9453 0.2891
+vt 0.9111 0.2744
+vt 0.9248 0.2891
+vt 0.9248 0.2744
+vt 0.9307 0.2549
+vt 0.9453 0.2686
+vt 0.9453 0.2549
+vt 0.9111 0.2549
+vt 0.9248 0.2686
+vt 0.9248 0.2549
+vt 0.9844 0.2744
+vt 0.9707 0.2891
+vt 0.9844 0.2891
+vt 0.9648 0.2744
+vt 0.9502 0.2891
+vt 0.9648 0.2891
+vt 0.9707 0.2549
+vt 0.9844 0.2686
+vt 0.9844 0.2549
+vt 0.9502 0.2549
+vt 0.9648 0.2686
+vt 0.9648 0.2549
+vt 0.9307 0.3145
+vt 0.9453 0.3281
+vt 0.9453 0.3145
+vt 0.9248 0.3145
+vt 0.9111 0.3281
+vt 0.9248 0.3281
+vt 0.9307 0.2939
+vt 0.9453 0.3086
+vt 0.9453 0.2939
+vt 0.9248 0.2939
+vt 0.9111 0.3086
+vt 0.9248 0.3086
+vt 0.9844 0.3145
+vt 0.9707 0.3281
+vt 0.9844 0.3281
+vt 0.9502 0.3145
+vt 0.9648 0.3281
+vt 0.9648 0.3145
+vt 0.9707 0.2939
+vt 0.9844 0.3086
+vt 0.9844 0.2939
+vt 0.9648 0.2939
+vt 0.9502 0.3086
+vt 0.9648 0.3086
+vt 0.8516 0.2744
+vt 0.8662 0.2891
+vt 0.8662 0.2744
+vt 0.8320 0.2744
+vt 0.8457 0.2891
+vt 0.8457 0.2744
+vt 0.8662 0.2549
+vt 0.8516 0.2686
+vt 0.8662 0.2686
+vt 0.8457 0.2549
+vt 0.8320 0.2686
+vt 0.8457 0.2686
+vt 0.8916 0.2744
+vt 0.9053 0.2891
+vt 0.9053 0.2744
+vt 0.8711 0.2744
+vt 0.8857 0.2891
+vt 0.8857 0.2744
+vt 0.9053 0.2549
+vt 0.8916 0.2686
+vt 0.9053 0.2686
+vt 0.8711 0.2549
+vt 0.8857 0.2686
+vt 0.8857 0.2549
+vt 0.8516 0.3145
+vt 0.8662 0.3281
+vt 0.8662 0.3145
+vt 0.8320 0.3145
+vt 0.8457 0.3281
+vt 0.8457 0.3145
+vt 0.8662 0.2939
+vt 0.8516 0.3086
+vt 0.8662 0.3086
+vt 0.8457 0.2939
+vt 0.8320 0.3086
+vt 0.8457 0.3086
+vt 0.8916 0.3145
+vt 0.9053 0.3281
+vt 0.9053 0.3145
+vt 0.8711 0.3145
+vt 0.8857 0.3281
+vt 0.8857 0.3145
+vt 0.8916 0.2939
+vt 0.9053 0.3086
+vt 0.9053 0.2939
+vt 0.8711 0.2939
+vt 0.8857 0.3086
+vt 0.8857 0.2939
+vt 0.9453 0.1953
+vt 0.9307 0.2100
+vt 0.9453 0.2100
+vt 0.9111 0.1953
+vt 0.9248 0.2100
+vt 0.9248 0.1953
+vt 0.9453 0.1758
+vt 0.9307 0.1895
+vt 0.9453 0.1895
+vt 0.9248 0.1758
+vt 0.9111 0.1895
+vt 0.9248 0.1895
+vt 0.9844 0.1953
+vt 0.9707 0.2100
+vt 0.9844 0.2100
+vt 0.9502 0.1953
+vt 0.9648 0.2100
+vt 0.9648 0.1953
+vt 0.9707 0.1758
+vt 0.9844 0.1895
+vt 0.9844 0.1758
+vt 0.9648 0.1758
+vt 0.9502 0.1895
+vt 0.9648 0.1895
+vt 0.9453 0.2354
+vt 0.9307 0.2490
+vt 0.9453 0.2490
+vt 0.9248 0.2354
+vt 0.9111 0.2490
+vt 0.9248 0.2490
+vt 0.9453 0.2148
+vt 0.9307 0.2295
+vt 0.9453 0.2295
+vt 0.9111 0.2148
+vt 0.9248 0.2295
+vt 0.9248 0.2148
+vt 0.9707 0.2354
+vt 0.9844 0.2490
+vt 0.9844 0.2354
+vt 0.9502 0.2354
+vt 0.9648 0.2490
+vt 0.9648 0.2354
+vt 0.9844 0.2148
+vt 0.9707 0.2295
+vt 0.9844 0.2295
+vt 0.9502 0.2148
+vt 0.9648 0.2295
+vt 0.9648 0.2148
+vt 0.8662 0.1953
+vt 0.8516 0.2100
+vt 0.8662 0.2100
+vt 0.8320 0.1953
+vt 0.8457 0.2100
+vt 0.8457 0.1953
+vt 0.8516 0.1758
+vt 0.8662 0.1895
+vt 0.8662 0.1758
+vt 0.8320 0.1758
+vt 0.8457 0.1895
+vt 0.8457 0.1758
+vt 0.8916 0.1953
+vt 0.9053 0.2100
+vt 0.9053 0.1953
+vt 0.8857 0.1953
+vt 0.8711 0.2100
+vt 0.8857 0.2100
+vt 0.8916 0.1758
+vt 0.9053 0.1895
+vt 0.9053 0.1758
+vt 0.8857 0.1758
+vt 0.8711 0.1895
+vt 0.8857 0.1895
+vt 0.8516 0.2354
+vt 0.8662 0.2490
+vt 0.8662 0.2354
+vt 0.8320 0.2354
+vt 0.8457 0.2490
+vt 0.8457 0.2354
+vt 0.8516 0.2148
+vt 0.8662 0.2295
+vt 0.8662 0.2148
+vt 0.8457 0.2148
+vt 0.8320 0.2295
+vt 0.8457 0.2295
+vt 0.9053 0.2354
+vt 0.8916 0.2490
+vt 0.9053 0.2490
+vt 0.8711 0.2354
+vt 0.8857 0.2490
+vt 0.8857 0.2354
+vt 0.9053 0.2148
+vt 0.8916 0.2295
+vt 0.9053 0.2295
+vt 0.8857 0.2148
+vt 0.8711 0.2295
+vt 0.8857 0.2295
+vt 0.7871 0.4326
+vt 0.7725 0.4463
+vt 0.7871 0.4463
+vt 0.7676 0.4326
+vt 0.7529 0.4463
+vt 0.7676 0.4463
+vt 0.7871 0.4131
+vt 0.7725 0.4268
+vt 0.7871 0.4268
+vt 0.7676 0.4131
+vt 0.7529 0.4268
+vt 0.7676 0.4268
+vt 0.8125 0.4326
+vt 0.8262 0.4463
+vt 0.8262 0.4326
+vt 0.8066 0.4326
+vt 0.7930 0.4463
+vt 0.8066 0.4463
+vt 0.8262 0.4131
+vt 0.8125 0.4268
+vt 0.8262 0.4268
+vt 0.7930 0.4131
+vt 0.8066 0.4268
+vt 0.8066 0.4131
+vt 0.7725 0.4717
+vt 0.7871 0.4863
+vt 0.7871 0.4717
+vt 0.7676 0.4717
+vt 0.7529 0.4863
+vt 0.7676 0.4863
+vt 0.7871 0.4521
+vt 0.7725 0.4668
+vt 0.7871 0.4668
+vt 0.7529 0.4521
+vt 0.7676 0.4668
+vt 0.7676 0.4521
+vt 0.8262 0.4717
+vt 0.8125 0.4863
+vt 0.8262 0.4863
+vt 0.8066 0.4717
+vt 0.7930 0.4863
+vt 0.8066 0.4863
+vt 0.8125 0.4521
+vt 0.8262 0.4668
+vt 0.8262 0.4521
+vt 0.7930 0.4521
+vt 0.8066 0.4668
+vt 0.8066 0.4521
+vt 0.7080 0.4326
+vt 0.6934 0.4463
+vt 0.7080 0.4463
+vt 0.6885 0.4326
+vt 0.6738 0.4463
+vt 0.6885 0.4463
+vt 0.6934 0.4131
+vt 0.7080 0.4268
+vt 0.7080 0.4131
+vt 0.6885 0.4131
+vt 0.6738 0.4268
+vt 0.6885 0.4268
+vt 0.7334 0.4326
+vt 0.7471 0.4463
+vt 0.7471 0.4326
+vt 0.7139 0.4326
+vt 0.7275 0.4463
+vt 0.7275 0.4326
+vt 0.7471 0.4131
+vt 0.7334 0.4268
+vt 0.7471 0.4268
+vt 0.7139 0.4131
+vt 0.7275 0.4268
+vt 0.7275 0.4131
+vt 0.6934 0.4717
+vt 0.7080 0.4863
+vt 0.7080 0.4717
+vt 0.6738 0.4717
+vt 0.6885 0.4863
+vt 0.6885 0.4717
+vt 0.6934 0.4521
+vt 0.7080 0.4668
+vt 0.7080 0.4521
+vt 0.6738 0.4521
+vt 0.6885 0.4668
+vt 0.6885 0.4521
+vt 0.7471 0.4717
+vt 0.7334 0.4863
+vt 0.7471 0.4863
+vt 0.7275 0.4717
+vt 0.7139 0.4863
+vt 0.7275 0.4863
+vt 0.7471 0.4521
+vt 0.7334 0.4668
+vt 0.7471 0.4668
+vt 0.7275 0.4521
+vt 0.7139 0.4668
+vt 0.7275 0.4668
+vt 0.7725 0.3535
+vt 0.7871 0.3672
+vt 0.7871 0.3535
+vt 0.7529 0.3535
+vt 0.7676 0.3672
+vt 0.7676 0.3535
+vt 0.7871 0.3340
+vt 0.7725 0.3477
+vt 0.7871 0.3477
+vt 0.7676 0.3340
+vt 0.7529 0.3477
+vt 0.7676 0.3477
+vt 0.8125 0.3535
+vt 0.8262 0.3672
+vt 0.8262 0.3535
+vt 0.8066 0.3535
+vt 0.7930 0.3672
+vt 0.8066 0.3672
+vt 0.8125 0.3340
+vt 0.8262 0.3477
+vt 0.8262 0.3340
+vt 0.8066 0.3340
+vt 0.7930 0.3477
+vt 0.8066 0.3477
+vt 0.7725 0.3936
+vt 0.7871 0.4072
+vt 0.7871 0.3936
+vt 0.7676 0.3936
+vt 0.7529 0.4072
+vt 0.7676 0.4072
+vt 0.7871 0.3730
+vt 0.7725 0.3877
+vt 0.7871 0.3877
+vt 0.7676 0.3730
+vt 0.7529 0.3877
+vt 0.7676 0.3877
+vt 0.8125 0.3936
+vt 0.8262 0.4072
+vt 0.8262 0.3936
+vt 0.8066 0.3936
+vt 0.7930 0.4072
+vt 0.8066 0.4072
+vt 0.8125 0.3730
+vt 0.8262 0.3877
+vt 0.8262 0.3730
+vt 0.7930 0.3730
+vt 0.8066 0.3877
+vt 0.8066 0.3730
+vt 0.6934 0.3535
+vt 0.7080 0.3672
+vt 0.7080 0.3535
+vt 0.6885 0.3535
+vt 0.6738 0.3672
+vt 0.6885 0.3672
+vt 0.7080 0.3340
+vt 0.6934 0.3477
+vt 0.7080 0.3477
+vt 0.6738 0.3340
+vt 0.6885 0.3477
+vt 0.6885 0.3340
+vt 0.7471 0.3535
+vt 0.7334 0.3672
+vt 0.7471 0.3672
+vt 0.7139 0.3535
+vt 0.7275 0.3672
+vt 0.7275 0.3535
+vt 0.7334 0.3340
+vt 0.7471 0.3477
+vt 0.7471 0.3340
+vt 0.7139 0.3340
+vt 0.7275 0.3477
+vt 0.7275 0.3340
+vt 0.7080 0.3936
+vt 0.6934 0.4072
+vt 0.7080 0.4072
+vt 0.6738 0.3936
+vt 0.6885 0.4072
+vt 0.6885 0.3936
+vt 0.7080 0.3730
+vt 0.6934 0.3877
+vt 0.7080 0.3877
+vt 0.6738 0.3730
+vt 0.6885 0.3877
+vt 0.6885 0.3730
+vt 0.7334 0.3936
+vt 0.7471 0.4072
+vt 0.7471 0.3936
+vt 0.7139 0.3936
+vt 0.7275 0.4072
+vt 0.7275 0.3936
+vt 0.7471 0.3730
+vt 0.7334 0.3877
+vt 0.7471 0.3877
+vt 0.7139 0.3730
+vt 0.7275 0.3877
+vt 0.7275 0.3730
+vt 0.9453 0.4326
+vt 0.9307 0.4463
+vt 0.9453 0.4463
+vt 0.9111 0.4326
+vt 0.9248 0.4463
+vt 0.9248 0.4326
+vt 0.9307 0.4131
+vt 0.9453 0.4268
+vt 0.9453 0.4131
+vt 0.9111 0.4131
+vt 0.9248 0.4268
+vt 0.9248 0.4131
+vt 0.9844 0.4326
+vt 0.9707 0.4463
+vt 0.9844 0.4463
+vt 0.9648 0.4326
+vt 0.9502 0.4463
+vt 0.9648 0.4463
+vt 0.9707 0.4131
+vt 0.9844 0.4268
+vt 0.9844 0.4131
+vt 0.9502 0.4131
+vt 0.9648 0.4268
+vt 0.9648 0.4131
+vt 0.9453 0.4717
+vt 0.9307 0.4863
+vt 0.9453 0.4863
+vt 0.9248 0.4717
+vt 0.9111 0.4863
+vt 0.9248 0.4863
+vt 0.9307 0.4521
+vt 0.9453 0.4668
+vt 0.9453 0.4521
+vt 0.9248 0.4521
+vt 0.9111 0.4668
+vt 0.9248 0.4668
+vt 0.9844 0.4717
+vt 0.9707 0.4863
+vt 0.9844 0.4863
+vt 0.9502 0.4717
+vt 0.9648 0.4863
+vt 0.9648 0.4717
+vt 0.9844 0.4521
+vt 0.9707 0.4668
+vt 0.9844 0.4668
+vt 0.9648 0.4521
+vt 0.9502 0.4668
+vt 0.9648 0.4668
+vt 0.8516 0.4326
+vt 0.8662 0.4463
+vt 0.8662 0.4326
+vt 0.8457 0.4326
+vt 0.8320 0.4463
+vt 0.8457 0.4463
+vt 0.8516 0.4131
+vt 0.8662 0.4268
+vt 0.8662 0.4131
+vt 0.8457 0.4131
+vt 0.8320 0.4268
+vt 0.8457 0.4268
+vt 0.9053 0.4326
+vt 0.8916 0.4463
+vt 0.9053 0.4463
+vt 0.8857 0.4326
+vt 0.8711 0.4463
+vt 0.8857 0.4463
+vt 0.8916 0.4131
+vt 0.9053 0.4268
+vt 0.9053 0.4131
+vt 0.8711 0.4131
+vt 0.8857 0.4268
+vt 0.8857 0.4131
+vt 0.8516 0.4717
+vt 0.8662 0.4863
+vt 0.8662 0.4717
+vt 0.8320 0.4717
+vt 0.8457 0.4863
+vt 0.8457 0.4717
+vt 0.8516 0.4521
+vt 0.8662 0.4668
+vt 0.8662 0.4521
+vt 0.8320 0.4521
+vt 0.8457 0.4668
+vt 0.8457 0.4521
+vt 0.8916 0.4717
+vt 0.9053 0.4863
+vt 0.9053 0.4717
+vt 0.8857 0.4717
+vt 0.8711 0.4863
+vt 0.8857 0.4863
+vt 0.8916 0.4521
+vt 0.9053 0.4668
+vt 0.9053 0.4521
+vt 0.8857 0.4521
+vt 0.8711 0.4668
+vt 0.8857 0.4668
+vt 0.9453 0.3535
+vt 0.9307 0.3672
+vt 0.9453 0.3672
+vt 0.9248 0.3535
+vt 0.9111 0.3672
+vt 0.9248 0.3672
+vt 0.9453 0.3340
+vt 0.9307 0.3477
+vt 0.9453 0.3477
+vt 0.9248 0.3340
+vt 0.9111 0.3477
+vt 0.9248 0.3477
+vt 0.9707 0.3535
+vt 0.9844 0.3672
+vt 0.9844 0.3535
+vt 0.9502 0.3535
+vt 0.9648 0.3672
+vt 0.9648 0.3535
+vt 0.9707 0.3340
+vt 0.9844 0.3477
+vt 0.9844 0.3340
+vt 0.9648 0.3340
+vt 0.9502 0.3477
+vt 0.9648 0.3477
+vt 0.9307 0.3936
+vt 0.9453 0.4072
+vt 0.9453 0.3936
+vt 0.9111 0.3936
+vt 0.9248 0.4072
+vt 0.9248 0.3936
+vt 0.9307 0.3730
+vt 0.9453 0.3877
+vt 0.9453 0.3730
+vt 0.9248 0.3730
+vt 0.9111 0.3877
+vt 0.9248 0.3877
+vt 0.9707 0.3936
+vt 0.9844 0.4072
+vt 0.9844 0.3936
+vt 0.9648 0.3936
+vt 0.9502 0.4072
+vt 0.9648 0.4072
+vt 0.9844 0.3730
+vt 0.9707 0.3877
+vt 0.9844 0.3877
+vt 0.9648 0.3730
+vt 0.9502 0.3877
+vt 0.9648 0.3877
+vt 0.8662 0.3535
+vt 0.8516 0.3672
+vt 0.8662 0.3672
+vt 0.8457 0.3535
+vt 0.8320 0.3672
+vt 0.8457 0.3672
+vt 0.8516 0.3340
+vt 0.8662 0.3477
+vt 0.8662 0.3340
+vt 0.8320 0.3340
+vt 0.8457 0.3477
+vt 0.8457 0.3340
+vt 0.9053 0.3535
+vt 0.8916 0.3672
+vt 0.9053 0.3672
+vt 0.8857 0.3535
+vt 0.8711 0.3672
+vt 0.8857 0.3672
+vt 0.8916 0.3340
+vt 0.9053 0.3477
+vt 0.9053 0.3340
+vt 0.8711 0.3340
+vt 0.8857 0.3477
+vt 0.8857 0.3340
+vt 0.8516 0.3936
+vt 0.8662 0.4072
+vt 0.8662 0.3936
+vt 0.8320 0.3936
+vt 0.8457 0.4072
+vt 0.8457 0.3936
+vt 0.8516 0.3730
+vt 0.8662 0.3877
+vt 0.8662 0.3730
+vt 0.8457 0.3730
+vt 0.8320 0.3877
+vt 0.8457 0.3877
+vt 0.8916 0.3936
+vt 0.9053 0.4072
+vt 0.9053 0.3936
+vt 0.8857 0.3936
+vt 0.8711 0.4072
+vt 0.8857 0.4072
+vt 0.8916 0.3730
+vt 0.9053 0.3877
+vt 0.9053 0.3730
+vt 0.8711 0.3730
+vt 0.8857 0.3877
+vt 0.8857 0.3730
+vt 0.7871 0.5908
+vt 0.7725 0.6045
+vt 0.7871 0.6045
+vt 0.7529 0.5908
+vt 0.7676 0.6045
+vt 0.7676 0.5908
+vt 0.7871 0.5713
+vt 0.7725 0.5850
+vt 0.7871 0.5850
+vt 0.7529 0.5713
+vt 0.7676 0.5850
+vt 0.7676 0.5713
+vt 0.8125 0.5908
+vt 0.8262 0.6045
+vt 0.8262 0.5908
+vt 0.7930 0.5908
+vt 0.8066 0.6045
+vt 0.8066 0.5908
+vt 0.8125 0.5713
+vt 0.8262 0.5850
+vt 0.8262 0.5713
+vt 0.7930 0.5713
+vt 0.8066 0.5850
+vt 0.8066 0.5713
+vt 0.7725 0.6299
+vt 0.7871 0.6445
+vt 0.7871 0.6299
+vt 0.7676 0.6299
+vt 0.7529 0.6445
+vt 0.7676 0.6445
+vt 0.7725 0.6104
+vt 0.7871 0.6240
+vt 0.7871 0.6104
+vt 0.7529 0.6104
+vt 0.7676 0.6240
+vt 0.7676 0.6104
+vt 0.8125 0.6299
+vt 0.8262 0.6445
+vt 0.8262 0.6299
+vt 0.7930 0.6299
+vt 0.8066 0.6445
+vt 0.8066 0.6299
+vt 0.8125 0.6104
+vt 0.8262 0.6240
+vt 0.8262 0.6104
+vt 0.7930 0.6104
+vt 0.8066 0.6240
+vt 0.8066 0.6104
+vt 0.7080 0.5908
+vt 0.6934 0.6045
+vt 0.7080 0.6045
+vt 0.6738 0.5908
+vt 0.6885 0.6045
+vt 0.6885 0.5908
+vt 0.7080 0.5713
+vt 0.6934 0.5850
+vt 0.7080 0.5850
+vt 0.6885 0.5713
+vt 0.6738 0.5850
+vt 0.6885 0.5850
+vt 0.7334 0.5908
+vt 0.7471 0.6045
+vt 0.7471 0.5908
+vt 0.7139 0.5908
+vt 0.7275 0.6045
+vt 0.7275 0.5908
+vt 0.7471 0.5713
+vt 0.7334 0.5850
+vt 0.7471 0.5850
+vt 0.7275 0.5713
+vt 0.7139 0.5850
+vt 0.7275 0.5850
+vt 0.7080 0.6299
+vt 0.6934 0.6445
+vt 0.7080 0.6445
+vt 0.6738 0.6299
+vt 0.6885 0.6445
+vt 0.6885 0.6299
+vt 0.7080 0.6104
+vt 0.6934 0.6240
+vt 0.7080 0.6240
+vt 0.6738 0.6104
+vt 0.6885 0.6240
+vt 0.6885 0.6104
+vt 0.7471 0.6299
+vt 0.7334 0.6445
+vt 0.7471 0.6445
+vt 0.7275 0.6299
+vt 0.7139 0.6445
+vt 0.7275 0.6445
+vt 0.7471 0.6104
+vt 0.7334 0.6240
+vt 0.7471 0.6240
+vt 0.7139 0.6104
+vt 0.7275 0.6240
+vt 0.7275 0.6104
+vt 0.7725 0.5117
+vt 0.7871 0.5254
+vt 0.7871 0.5117
+vt 0.7529 0.5117
+vt 0.7676 0.5254
+vt 0.7676 0.5117
+vt 0.7871 0.4922
+vt 0.7725 0.5059
+vt 0.7871 0.5059
+vt 0.7676 0.4922
+vt 0.7529 0.5059
+vt 0.7676 0.5059
+vt 0.8125 0.5117
+vt 0.8262 0.5254
+vt 0.8262 0.5117
+vt 0.8066 0.5117
+vt 0.7930 0.5254
+vt 0.8066 0.5254
+vt 0.8125 0.4922
+vt 0.8262 0.5059
+vt 0.8262 0.4922
+vt 0.7930 0.4922
+vt 0.8066 0.5059
+vt 0.8066 0.4922
+vt 0.7725 0.5508
+vt 0.7871 0.5654
+vt 0.7871 0.5508
+vt 0.7529 0.5508
+vt 0.7676 0.5654
+vt 0.7676 0.5508
+vt 0.7871 0.5312
+vt 0.7725 0.5459
+vt 0.7871 0.5459
+vt 0.7676 0.5312
+vt 0.7529 0.5459
+vt 0.7676 0.5459
+vt 0.8125 0.5508
+vt 0.8262 0.5654
+vt 0.8262 0.5508
+vt 0.8066 0.5508
+vt 0.7930 0.5654
+vt 0.8066 0.5654
+vt 0.8125 0.5312
+vt 0.8262 0.5459
+vt 0.8262 0.5312
+vt 0.7930 0.5312
+vt 0.8066 0.5459
+vt 0.8066 0.5312
+vt 0.7080 0.5117
+vt 0.6934 0.5254
+vt 0.7080 0.5254
+vt 0.6885 0.5117
+vt 0.6738 0.5254
+vt 0.6885 0.5254
+vt 0.6934 0.4922
+vt 0.7080 0.5059
+vt 0.7080 0.4922
+vt 0.6885 0.4922
+vt 0.6738 0.5059
+vt 0.6885 0.5059
+vt 0.7471 0.5117
+vt 0.7334 0.5254
+vt 0.7471 0.5254
+vt 0.7139 0.5117
+vt 0.7275 0.5254
+vt 0.7275 0.5117
+vt 0.7334 0.4922
+vt 0.7471 0.5059
+vt 0.7471 0.4922
+vt 0.7139 0.4922
+vt 0.7275 0.5059
+vt 0.7275 0.4922
+vt 0.7080 0.5508
+vt 0.6934 0.5654
+vt 0.7080 0.5654
+vt 0.6738 0.5508
+vt 0.6885 0.5654
+vt 0.6885 0.5508
+vt 0.7080 0.5312
+vt 0.6934 0.5459
+vt 0.7080 0.5459
+vt 0.6738 0.5312
+vt 0.6885 0.5459
+vt 0.6885 0.5312
+vt 0.7334 0.5508
+vt 0.7471 0.5654
+vt 0.7471 0.5508
+vt 0.7275 0.5508
+vt 0.7139 0.5654
+vt 0.7275 0.5654
+vt 0.7471 0.5312
+vt 0.7334 0.5459
+vt 0.7471 0.5459
+vt 0.7139 0.5312
+vt 0.7275 0.5459
+vt 0.7275 0.5312
+vt 0.9307 0.5908
+vt 0.9453 0.6045
+vt 0.9453 0.5908
+vt 0.9248 0.5908
+vt 0.9111 0.6045
+vt 0.9248 0.6045
+vt 0.9307 0.5713
+vt 0.9453 0.5850
+vt 0.9453 0.5713
+vt 0.9111 0.5713
+vt 0.9248 0.5850
+vt 0.9248 0.5713
+vt 0.9844 0.5908
+vt 0.9707 0.6045
+vt 0.9844 0.6045
+vt 0.9648 0.5908
+vt 0.9502 0.6045
+vt 0.9648 0.6045
+vt 0.9707 0.5713
+vt 0.9844 0.5850
+vt 0.9844 0.5713
+vt 0.9502 0.5713
+vt 0.9648 0.5850
+vt 0.9648 0.5713
+vt 0.9453 0.6299
+vt 0.9307 0.6445
+vt 0.9453 0.6445
+vt 0.9111 0.6299
+vt 0.9248 0.6445
+vt 0.9248 0.6299
+vt 0.9307 0.6104
+vt 0.9453 0.6240
+vt 0.9453 0.6104
+vt 0.9111 0.6104
+vt 0.9248 0.6240
+vt 0.9248 0.6104
+vt 0.9844 0.6299
+vt 0.9707 0.6445
+vt 0.9844 0.6445
+vt 0.9502 0.6299
+vt 0.9648 0.6445
+vt 0.9648 0.6299
+vt 0.9707 0.6104
+vt 0.9844 0.6240
+vt 0.9844 0.6104
+vt 0.9648 0.6104
+vt 0.9502 0.6240
+vt 0.9648 0.6240
+vt 0.8516 0.5908
+vt 0.8662 0.6045
+vt 0.8662 0.5908
+vt 0.8320 0.5908
+vt 0.8457 0.6045
+vt 0.8457 0.5908
+vt 0.8516 0.5713
+vt 0.8662 0.5850
+vt 0.8662 0.5713
+vt 0.8457 0.5713
+vt 0.8320 0.5850
+vt 0.8457 0.5850
+vt 0.9053 0.5908
+vt 0.8916 0.6045
+vt 0.9053 0.6045
+vt 0.8857 0.5908
+vt 0.8711 0.6045
+vt 0.8857 0.6045
+vt 0.8916 0.5713
+vt 0.9053 0.5850
+vt 0.9053 0.5713
+vt 0.8857 0.5713
+vt 0.8711 0.5850
+vt 0.8857 0.5850
+vt 0.7559 0.7822
+vt 0.7676 0.7715
+vt 0.7676 0.7822
+vt 0.7871 0.7715
+vt 0.7754 0.7822
+vt 0.7871 0.7822
+vt 0.9053 0.5059
+vt 0.9053 0.4951
+vt 0.8945 0.5059
+vt 0.7676 0.7910
+vt 0.7676 0.8018
+vt 0.7559 0.8018
+vt 0.7646 0.7686
+vt 0.7529 0.7793
+vt 0.7529 0.7686
+vt 0.7725 0.7793
+vt 0.7842 0.7686
+vt 0.7725 0.7686
+vt 0.8857 0.5059
+vt 0.8857 0.4951
+vt 0.8740 0.5059
+vt 0.8066 0.7520
+vt 0.7949 0.7627
+vt 0.8066 0.7627
+vt 0.8662 0.5654
+vt 0.8662 0.5537
+vt 0.8545 0.5654
+vt 0.7871 0.7910
+vt 0.7871 0.8018
+vt 0.7754 0.8018
+vt 0.8457 0.5654
+vt 0.8457 0.5537
+vt 0.8350 0.5654
+vt 0.7529 0.7998
+vt 0.7646 0.7881
+vt 0.7529 0.7881
+vt 0.8457 0.5459
+vt 0.8457 0.5342
+vt 0.8350 0.5459
+vt 0.7676 0.7314
+vt 0.7559 0.7432
+vt 0.7676 0.7432
+vt 0.9053 0.5654
+vt 0.9053 0.5537
+vt 0.8945 0.5654
+vt 0.8262 0.7314
+vt 0.8262 0.7432
+vt 0.8154 0.7432
+vt 0.8066 0.7432
+vt 0.8066 0.7314
+vt 0.7949 0.7432
+vt 0.7725 0.7998
+vt 0.7842 0.7881
+vt 0.7725 0.7881
+vt 0.7930 0.7285
+vt 0.7930 0.7402
+vt 0.8037 0.7285
+vt 0.8125 0.7402
+vt 0.8125 0.7285
+vt 0.8232 0.7285
+vt 0.8262 0.7627
+vt 0.8262 0.7520
+vt 0.8154 0.7627
+vt 0.7930 0.7598
+vt 0.8037 0.7490
+vt 0.7930 0.7490
+vt 0.7871 0.7627
+vt 0.7871 0.7520
+vt 0.7754 0.7627
+vt 0.7871 0.7314
+vt 0.7871 0.7432
+vt 0.7754 0.7432
+vt 0.8125 0.7490
+vt 0.8125 0.7598
+vt 0.8232 0.7490
+vt 0.7529 0.7402
+vt 0.7529 0.7285
+vt 0.7646 0.7285
+vt 0.7676 0.7627
+vt 0.7676 0.7520
+vt 0.7559 0.7627
+vt 0.7725 0.7402
+vt 0.7842 0.7285
+vt 0.7725 0.7285
+vt 0.7646 0.7490
+vt 0.7529 0.7598
+vt 0.7529 0.7490
+vt 0.8857 0.5342
+vt 0.8857 0.5459
+vt 0.8740 0.5459
+vt 0.7842 0.7490
+vt 0.7725 0.7598
+vt 0.7725 0.7490
+vt 0.8711 0.5430
+vt 0.8828 0.5312
+vt 0.8711 0.5312
+vt 0.8945 0.5459
+vt 0.9053 0.5342
+vt 0.9053 0.5459
+vt 0.8857 0.5537
+vt 0.8740 0.5654
+vt 0.8857 0.5654
+vt 0.9023 0.5312
+vt 0.8916 0.5430
+vt 0.8916 0.5312
+vt 0.8711 0.5625
+vt 0.8828 0.5508
+vt 0.8711 0.5508
+vt 0.9023 0.5508
+vt 0.8916 0.5625
+vt 0.8916 0.5508
+vt 0.8662 0.5342
+vt 0.8545 0.5459
+vt 0.8662 0.5459
+vt 0.8438 0.5312
+vt 0.8320 0.5430
+vt 0.8320 0.5312
+vt 0.8516 0.5430
+vt 0.8633 0.5312
+vt 0.8516 0.5312
+vt 0.8438 0.5508
+vt 0.8320 0.5625
+vt 0.8320 0.5508
+vt 0.8857 0.5146
+vt 0.8740 0.5254
+vt 0.8857 0.5254
+vt 0.8633 0.5508
+vt 0.8516 0.5625
+vt 0.8516 0.5508
+vt 0.9053 0.5146
+vt 0.8945 0.5254
+vt 0.9053 0.5254
+vt 0.8828 0.4922
+vt 0.8711 0.5029
+vt 0.8711 0.4922
+vt 0.8662 0.4951
+vt 0.8662 0.5059
+vt 0.8545 0.5059
+vt 0.9023 0.4922
+vt 0.8916 0.5029
+vt 0.8916 0.4922
+vt 0.8457 0.4951
+vt 0.8457 0.5059
+vt 0.8350 0.5059
+vt 0.9736 0.5654
+vt 0.9844 0.5537
+vt 0.9844 0.5654
+vt 0.8711 0.5225
+vt 0.8828 0.5117
+vt 0.8711 0.5117
+vt 0.9023 0.5117
+vt 0.8916 0.5225
+vt 0.8916 0.5117
+vt 0.8320 0.5029
+vt 0.8320 0.4922
+vt 0.8438 0.4922
+vt 0.8516 0.5029
+vt 0.8633 0.4922
+vt 0.8516 0.4922
+vt 0.9531 0.5654
+vt 0.9648 0.5537
+vt 0.9648 0.5654
+vt 0.8350 0.5254
+vt 0.8457 0.5146
+vt 0.8457 0.5254
+vt 0.8662 0.5146
+vt 0.8545 0.5254
+vt 0.8662 0.5254
+vt 0.8438 0.5117
+vt 0.8320 0.5225
+vt 0.8320 0.5117
+vt 0.8516 0.5225
+vt 0.8516 0.5117
+vt 0.8633 0.5117
+vt 0.9531 0.5459
+vt 0.9648 0.5342
+vt 0.9648 0.5459
+vt 0.9844 0.5342
+vt 0.9736 0.5459
+vt 0.9844 0.5459
+vt 0.9502 0.5312
+vt 0.9502 0.5430
+vt 0.9619 0.5312
+vt 0.9707 0.5430
+vt 0.9707 0.5312
+vt 0.9814 0.5312
+vt 0.8516 0.6299
+vt 0.8662 0.6445
+vt 0.8662 0.6299
+vt 0.8457 0.6299
+vt 0.8320 0.6445
+vt 0.8457 0.6445
+vt 0.8516 0.6104
+vt 0.8662 0.6240
+vt 0.8662 0.6104
+vt 0.8457 0.6104
+vt 0.8320 0.6240
+vt 0.8457 0.6240
+vt 0.9502 0.5508
+vt 0.9502 0.5625
+vt 0.9619 0.5508
+vt 0.9707 0.5625
+vt 0.9707 0.5508
+vt 0.9814 0.5508
+vt 0.8916 0.6299
+vt 0.9053 0.6445
+vt 0.9053 0.6299
+vt 0.8857 0.6299
+vt 0.8711 0.6445
+vt 0.8857 0.6445
+vt 0.8916 0.6104
+vt 0.9053 0.6240
+vt 0.9053 0.6104
+vt 0.8857 0.6104
+vt 0.8711 0.6240
+vt 0.8857 0.6240
+vt 0.9307 0.5117
+vt 0.9453 0.5254
+vt 0.9453 0.5117
+vt 0.9248 0.5117
+vt 0.9111 0.5254
+vt 0.9248 0.5254
+vt 0.9307 0.4922
+vt 0.9453 0.5059
+vt 0.9453 0.4922
+vt 0.9248 0.4922
+vt 0.9111 0.5059
+vt 0.9248 0.5059
+vt 0.9707 0.5117
+vt 0.9844 0.5254
+vt 0.9844 0.5117
+vt 0.9648 0.5117
+vt 0.9502 0.5254
+vt 0.9648 0.5254
+vt 0.9707 0.4922
+vt 0.9844 0.5059
+vt 0.9844 0.4922
+vt 0.9502 0.4922
+vt 0.9648 0.5059
+vt 0.9648 0.4922
+vt 0.9307 0.5508
+vt 0.9453 0.5654
+vt 0.9453 0.5508
+vt 0.9111 0.5508
+vt 0.9248 0.5654
+vt 0.9248 0.5508
+vt 0.9453 0.5312
+vt 0.9307 0.5459
+vt 0.9453 0.5459
+vt 0.9111 0.5312
+vt 0.9248 0.5459
+vt 0.9248 0.5312
+vt 0.4258 0.2891
+vt 0.4258 0.2480
+vt 0.3857 0.2891
+vt 0.3857 0.2480
+vt 0.4258 0.2480
+vt 0.3447 0.3291
+vt 0.3447 0.2891
+vt 0.3857 0.2480
+vt 0.3447 0.2080
+vt 0.4258 0.1670
+vt 0.3066 0.2891
+vt 0.3857 0.1670
+vt 0.3066 0.2891
+vt 0.3447 0.1670
+vt 0.3066 0.2080
+vt 0.3066 0.1670
+vt 0.4258 0.1270
+vt 0.2666 0.3291
+vt 0.2666 0.2480
+vt 0.3857 0.1670
+vt 0.3447 0.1270
+vt 0.2666 0.2480
+vt 0.2666 0.1670
+vt 0.3066 0.1670
+vt 0.2666 0.1270
+vt 0.2256 0.3291
+vt 0.4258 0.1270
+vt 0.2256 0.2891
+vt 0.3857 0.0859
+vt 0.3447 0.0859
+vt 0.2256 0.2080
+vt 0.3066 0.1270
+vt 0.2256 0.1670
+vt 0.2666 0.1270
+vt 0.2256 0.1670
+vt 0.2256 0.0859
+vt 0.1855 0.2891
+vt 0.4258 0.0459
+vt 0.1855 0.2480
+vt 0.3857 0.0459
+vt 0.3447 0.0459
+vt 0.1855 0.2080
+vt 0.1855 0.2080
+vt 0.3066 0.0859
+vt 0.1855 0.1270
+vt 0.2666 0.0459
+vt 0.1855 0.1270
+vt 0.2256 0.0459
+vt 0.1855 0.0459
+vt 0.1445 0.2891
+vt 0.4258 0.0459
+vt 0.1445 0.2891
+vt 0.3857 0.0459
+vt 0.1445 0.2480
+vt 0.3447 0.0078
+vt 0.3066 0.0459
+vt 0.1445 0.1670
+vt 0.1445 0.1270
+vt 0.2666 0.0078
+vt 0.2256 0.0078
+vt 0.1445 0.0859
+vt 0.1855 0.0078
+vt 0.1445 0.0459
+vt 0.1445 0.0078
+vt 0.9150 0.0410
+vt 0.5986 0.0469
+vt 0.5635 0.0762
+vt 0.5986 0.0117
+vt 0.9805 0.0117
+vt 0.8262 0.7686
+vt 0.7930 0.7686
+vt 0.6934 0.7285
+vt 0.5635 0.0410
+vt 0.6689 0.0469
+vt 0.6885 0.7285
+vt 0.6738 0.9658
+vt 0.5293 0.5625
+vt 0.7471 0.7285
+vt 0.7139 0.7627
+vt 0.4893 0.5625
+vt 0.6934 0.7686
+vt 0.5293 0.5234
+vt 0.6885 0.7686
+vt 0.7334 0.7686
+vt 0.6338 0.0469
+vt 0.6689 0.0117
+vt 0.6338 0.0117
+vt 0.4893 0.5234
+vt 0.7275 0.7686
+vt 0.7725 0.6494
+vt 0.7676 0.6494
+vt 0.8125 0.6836
+vt 0.7930 0.6494
+vt 0.7725 0.6895
+vt 0.7676 0.6895
+vt 0.6074 0.5625
+vt 0.5986 0.1172
+vt 0.5635 0.1172
+vt 0.8262 0.6895
+vt 0.7930 0.6895
+vt 0.6934 0.6494
+vt 0.5986 0.1113
+vt 0.5635 0.1113
+vt 0.6738 0.6494
+vt 0.7471 0.6494
+vt 0.5684 0.5625
+vt 0.7275 0.6494
+vt 0.6074 0.5508
+vt 0.5684 0.5508
+vt 0.7080 0.6895
+vt 0.6738 0.6895
+vt 0.7471 0.6895
+vt 0.7139 0.6895
+vt 0.9453 0.7285
+vt 0.5293 0.6689
+vt 0.4893 0.6689
+vt 0.5293 0.6299
+vt 0.4893 0.6016
+vt 0.6074 0.6416
+vt 0.9248 0.7285
+vt 0.9844 0.7285
+vt 0.5684 0.6416
+vt 0.6074 0.6016
+vt 0.9648 0.7285
+vt 0.5684 0.6016
+vt 0.3711 0.5625
+vt 0.3320 0.5625
+vt 0.9307 0.8018
+vt 0.9248 0.7686
+vt 0.3711 0.5508
+vt 0.3320 0.5234
+vt 0.9844 0.7686
+vt 0.9502 0.7686
+vt 0.4502 0.5625
+vt 0.4111 0.5625
+vt 0.8662 0.7285
+vt 0.4502 0.5234
+vt 0.4111 0.5234
+vt 0.3711 0.6416
+vt 0.3320 0.6416
+vt 0.8457 0.7285
+vt 0.3711 0.6016
+vt 0.3320 0.6016
+vt 0.9053 0.7285
+vt 0.4502 0.6689
+vt 0.4111 0.6416
+vt 0.4502 0.6016
+vt 0.8857 0.7285
+vt 0.4111 0.6016
+vt 0.5293 0.4053
+vt 0.0566 0.6689
+vt 0.8662 0.7686
+vt 0.4893 0.4053
+vt 0.5293 0.3652
+vt 0.8457 0.7686
+vt 0.9053 0.7686
+vt 0.4893 0.3652
+vt 0.6074 0.4053
+vt 0.8857 0.7686
+vt 0.5684 0.4053
+vt 0.6074 0.3652
+vt 0.5684 0.3936
+vt 0.9307 0.6494
+vt 0.5293 0.5117
+vt 0.4893 0.5117
+vt 0.9111 0.6494
+vt 0.9707 0.6494
+vt 0.9502 0.6494
+vt 0.5293 0.4727
+vt 0.9307 0.6895
+vt 0.4893 0.4727
+vt 0.6074 0.4834
+vt 0.9248 0.6895
+vt 0.5684 0.4834
+vt 0.9844 0.6895
+vt 0.6074 0.4443
+vt 0.5684 0.4443
+vt 0.9648 0.6895
+vt 0.8662 0.6494
+vt 0.8457 0.6494
+vt 0.3711 0.4053
+vt 0.9053 0.6494
+vt 0.3320 0.4053
+vt 0.3711 0.3652
+vt 0.3320 0.3652
+vt 0.8857 0.6494
+vt 0.0166 0.6689
+vt 0.4502 0.4053
+vt 0.8662 0.6895
+vt 0.8457 0.6895
+vt 0.8916 0.6895
+vt 0.4111 0.4053
+vt 0.8857 0.6895
+vt 0.7871 0.8867
+vt 0.4502 0.3936
+vt 0.4111 0.3936
+vt 0.3711 0.4834
+vt 0.7676 0.8867
+vt 0.3320 0.5117
+vt 0.3711 0.4727
+vt 0.3320 0.4443
+vt 0.8262 0.8867
+vt 0.7930 0.8867
+vt 0.4502 0.5117
+vt 0.4111 0.5117
+vt 0.7725 0.9268
+vt 0.4502 0.4443
+vt 0.7676 0.9268
+vt 0.4111 0.4443
+vt 0.2529 0.6689
+vt 0.2139 0.8779
+vt 0.1748 0.8779
+vt 0.8262 0.9268
+vt 0.8066 0.9268
+vt 0.7080 0.8867
+vt 0.2139 0.8379
+vt 0.1748 0.8662
+vt 0.2930 0.9053
+vt 0.2529 0.9053
+vt 0.6885 0.8867
+vt 0.2930 0.8662
+vt 0.2529 0.8379
+vt 0.7471 0.8867
+vt 0.2139 0.9844
+vt 0.7139 0.8867
+vt 0.7080 0.9268
+vt 0.1748 0.9844
+vt 0.6885 0.9268
+vt 0.2139 0.9453
+vt 0.1748 0.9170
+vt 0.2930 0.9561
+vt 0.7471 0.9268
+vt 0.2529 0.9561
+vt 0.2930 0.9170
+vt 0.7275 0.9268
+vt 0.2529 0.9453
+vt 0.7725 0.8076
+vt 0.0566 0.9053
+vt 0.1348 0.6689
+vt 0.0166 0.9053
+vt 0.0566 0.8662
+vt 0.0166 0.8379
+vt 0.7529 0.8418
+vt 0.1348 0.8779
+vt 0.8125 0.8076
+vt 0.7930 0.8076
+vt 0.0957 0.9053
+vt 0.7725 0.8477
+vt 0.1348 0.8662
+vt 0.0957 0.8662
+vt 0.7529 0.8477
+vt 0.0566 0.9561
+vt 0.0166 0.9844
+vt 0.0566 0.9453
+vt 0.8262 0.8477
+vt 0.0166 0.9170
+vt 0.1348 0.9561
+vt 0.7930 0.8477
+vt 0.0957 0.9844
+vt 0.0957 0.6689
+vt 0.2139 0.3652
+vt 0.1748 0.3652
+vt 0.6689 0.1475
+vt 0.6338 0.1172
+vt 0.6689 0.0820
+vt 0.6338 0.1113
+vt 0.7080 0.8076
+vt 0.6738 0.8418
+vt 0.7393 0.0469
+vt 0.7041 0.0469
+vt 0.7471 0.8076
+vt 0.7393 0.0117
+vt 0.7041 0.0117
+vt 0.8096 0.0469
+vt 0.7744 0.0762
+vt 0.8096 0.0117
+vt 0.7139 0.8076
+vt 0.7080 0.8477
+vt 0.6885 0.8477
+vt 0.1348 0.9170
+vt 0.2930 0.5117
+vt 0.2529 0.3652
+vt 0.0566 0.3652
+vt 0.7334 0.8477
+vt 0.0166 0.5117
+vt 0.1748 0.5234
+vt 0.8799 0.0117
+vt 0.0957 0.9170
+vt 0.2139 0.7480
+vt 0.7139 0.8809
+vt 0.8047 0.0820
+vt 0.7744 0.0117
+vt 0.7393 0.1475
+vt 0.7744 0.0820
+vt 0.8398 0.0820
+vt 0.8447 0.0762
+vt 0.1348 0.3652
+vt 0.0957 0.3652
+vt 0.1748 0.7480
+vt 0.8096 0.1113
+vt 0.7920 0.1475
+vt 0.7744 0.1172
+vt 0.2139 0.6807
+vt 0.8398 0.1172
+vt 0.8223 0.1172
+vt 0.1748 0.6807
+vt 0.7217 0.0820
+vt 0.7168 0.0820
+vt 0.2930 0.7480
+vt 0.7568 0.0820
+vt 0.2529 0.7197
+vt 0.7393 0.1113
+vt 0.7217 0.1172
+vt 0.7041 0.1475
+vt 0.2930 0.6807
+vt 0.2529 0.6807
+vt 0.2139 0.8271
+vt 0.1748 0.7988
+vt 0.2139 0.7871
+vt 0.1748 0.7871
+vt 0.2930 0.8271
+vt 0.2529 0.7988
+vt 0.2930 0.7871
+vt 0.2529 0.7871
+vt 0.0566 0.7480
+vt 0.0166 0.7197
+vt 0.0566 0.6807
+vt 0.0166 0.6807
+vt 0.1348 0.7480
+vt 0.0957 0.7197
+vt 0.1348 0.6807
+vt 0.0957 0.6807
+vt 0.0566 0.8271
+vt 0.0166 0.8271
+vt 0.0566 0.7871
+vt 0.0166 0.7598
+vt 0.1348 0.7988
+vt 0.0957 0.8271
+vt 0.1348 0.7871
+vt 0.0957 0.7871
+vt 0.5293 0.9053
+vt 0.4893 0.8779
+vt 0.5293 0.8379
+vt 0.4893 0.8662
+vt 0.6074 0.9053
+vt 0.5684 0.8779
+vt 0.6074 0.8379
+vt 0.5684 0.8379
+vt 0.5293 0.9561
+vt 0.4893 0.9844
+vt 0.5293 0.9453
+vt 0.4893 0.9453
+vt 0.6074 0.9561
+vt 0.5684 0.9844
+vt 0.6074 0.9170
+vt 0.5684 0.9453
+vt 0.3711 0.9053
+vt 0.3320 0.8779
+vt 0.3711 0.8662
+vt 0.3320 0.8662
+vt 0.4502 0.8779
+vt 0.4111 0.8779
+vt 0.4502 0.8662
+vt 0.4111 0.8379
+vt 0.3711 0.9561
+vt 0.3320 0.9844
+vt 0.3711 0.9170
+vt 0.3320 0.9453
+vt 0.4502 0.9844
+vt 0.4111 0.9561
+vt 0.4502 0.9453
+vt 0.4111 0.9170
+vt 0.5293 0.7480
+vt 0.4893 0.7197
+vt 0.5293 0.7090
+vt 0.4893 0.7090
+vt 0.6074 0.7480
+vt 0.5684 0.7197
+vt 0.6074 0.6807
+vt 0.5684 0.7090
+vt 0.5293 0.7988
+vt 0.4893 0.7988
+vt 0.5293 0.7598
+vt 0.4893 0.7871
+vt 0.6074 0.8271
+vt 0.5684 0.8271
+vt 0.6074 0.7598
+vt 0.5684 0.7598
+vt 0.3711 0.7480
+vt 0.3320 0.7197
+vt 0.3711 0.7090
+vt 0.3320 0.7090
+vt 0.4502 0.7480
+vt 0.4111 0.7197
+vt 0.4502 0.7090
+vt 0.4111 0.7090
+vt 0.3711 0.8271
+vt 0.3320 0.8271
+vt 0.3711 0.7871
+vt 0.3320 0.7871
+vt 0.4502 0.8271
+vt 0.4111 0.7988
+vt 0.4502 0.7871
+vt 0.4111 0.7598
+vt 0.7725 0.2891
+vt 0.7529 0.2891
+vt 0.7725 0.2549
+vt 0.7529 0.2686
+vt 0.8125 0.2744
+vt 0.7930 0.2891
+vt 0.8125 0.2549
+vt 0.7930 0.2686
+vt 0.7725 0.3145
+vt 0.7529 0.3145
+vt 0.7725 0.3086
+vt 0.7529 0.3086
+vt 0.8125 0.3145
+vt 0.7930 0.3145
+vt 0.8125 0.3086
+vt 0.7930 0.3086
+vt 0.6934 0.2891
+vt 0.6738 0.2891
+vt 0.6934 0.2686
+vt 0.6738 0.2549
+vt 0.7334 0.2744
+vt 0.7139 0.2891
+vt 0.7334 0.2686
+vt 0.7139 0.2549
+vt 0.6934 0.3145
+vt 0.6738 0.3281
+vt 0.6934 0.2939
+vt 0.6738 0.2939
+vt 0.7334 0.3281
+vt 0.7139 0.3145
+vt 0.7334 0.2939
+vt 0.7139 0.2939
+vt 0.7725 0.1953
+vt 0.7529 0.1953
+vt 0.7725 0.1895
+vt 0.7529 0.1895
+vt 0.8125 0.1953
+vt 0.7930 0.2100
+vt 0.8125 0.1895
+vt 0.7930 0.1895
+vt 0.7725 0.2490
+vt 0.7529 0.2490
+vt 0.7725 0.2295
+vt 0.7529 0.2295
+vt 0.8125 0.2354
+vt 0.7930 0.2490
+vt 0.8125 0.2148
+vt 0.7930 0.2148
+vt 0.6934 0.1953
+vt 0.6738 0.1953
+vt 0.6934 0.1895
+vt 0.6738 0.1895
+vt 0.7334 0.2100
+vt 0.7139 0.1953
+vt 0.7334 0.1758
+vt 0.7139 0.1895
+vt 0.6934 0.2490
+vt 0.6738 0.2354
+vt 0.6934 0.2295
+vt 0.6738 0.2148
+vt 0.7334 0.2490
+vt 0.7139 0.2490
+vt 0.7334 0.2148
+vt 0.7139 0.2148
+vt 0.9307 0.2744
+vt 0.9111 0.2891
+vt 0.9307 0.2686
+vt 0.9111 0.2686
+vt 0.9707 0.2744
+vt 0.9502 0.2744
+vt 0.9707 0.2686
+vt 0.9502 0.2686
+vt 0.9307 0.3281
+vt 0.9111 0.3145
+vt 0.9307 0.3086
+vt 0.9111 0.2939
+vt 0.9707 0.3145
+vt 0.9502 0.3281
+vt 0.9707 0.3086
+vt 0.9502 0.2939
+vt 0.8516 0.2891
+vt 0.8320 0.2891
+vt 0.8516 0.2549
+vt 0.8320 0.2549
+vt 0.8916 0.2891
+vt 0.8711 0.2891
+vt 0.8916 0.2549
+vt 0.8711 0.2686
+vt 0.8516 0.3281
+vt 0.8320 0.3281
+vt 0.8516 0.2939
+vt 0.8320 0.2939
+vt 0.8916 0.3281
+vt 0.8711 0.3281
+vt 0.8916 0.3086
+vt 0.8711 0.3086
+vt 0.9307 0.1953
+vt 0.9111 0.2100
+vt 0.9307 0.1758
+vt 0.9111 0.1758
+vt 0.9707 0.1953
+vt 0.9502 0.2100
+vt 0.9707 0.1895
+vt 0.9502 0.1758
+vt 0.9307 0.2354
+vt 0.9111 0.2354
+vt 0.9307 0.2148
+vt 0.9111 0.2295
+vt 0.9707 0.2490
+vt 0.9502 0.2490
+vt 0.9707 0.2148
+vt 0.9502 0.2295
+vt 0.8516 0.1953
+vt 0.8320 0.2100
+vt 0.8516 0.1895
+vt 0.8320 0.1895
+vt 0.8916 0.2100
+vt 0.8711 0.1953
+vt 0.8916 0.1895
+vt 0.8711 0.1758
+vt 0.8516 0.2490
+vt 0.8320 0.2490
+vt 0.8516 0.2295
+vt 0.8320 0.2148
+vt 0.8916 0.2354
+vt 0.8711 0.2490
+vt 0.8916 0.2148
+vt 0.8711 0.2148
+vt 0.7725 0.4326
+vt 0.7529 0.4326
+vt 0.7725 0.4131
+vt 0.7529 0.4131
+vt 0.8125 0.4463
+vt 0.7930 0.4326
+vt 0.8125 0.4131
+vt 0.7930 0.4268
+vt 0.7725 0.4863
+vt 0.7529 0.4717
+vt 0.7725 0.4521
+vt 0.7529 0.4668
+vt 0.8125 0.4717
+vt 0.7930 0.4717
+vt 0.8125 0.4668
+vt 0.7930 0.4668
+vt 0.6934 0.4326
+vt 0.6738 0.4326
+vt 0.6934 0.4268
+vt 0.6738 0.4131
+vt 0.7334 0.4463
+vt 0.7139 0.4463
+vt 0.7334 0.4131
+vt 0.7139 0.4268
+vt 0.6934 0.4863
+vt 0.6738 0.4863
+vt 0.6934 0.4668
+vt 0.6738 0.4668
+vt 0.7334 0.4717
+vt 0.7139 0.4717
+vt 0.7334 0.4521
+vt 0.7139 0.4521
+vt 0.7725 0.3672
+vt 0.7529 0.3672
+vt 0.7725 0.3340
+vt 0.7529 0.3340
+vt 0.8125 0.3672
+vt 0.7930 0.3535
+vt 0.8125 0.3477
+vt 0.7930 0.3340
+vt 0.7725 0.4072
+vt 0.7529 0.3936
+vt 0.7725 0.3730
+vt 0.7529 0.3730
+vt 0.8125 0.4072
+vt 0.7930 0.3936
+vt 0.8125 0.3877
+vt 0.7930 0.3877
+vt 0.6934 0.3672
+vt 0.6738 0.3535
+vt 0.6934 0.3340
+vt 0.6738 0.3477
+vt 0.7334 0.3535
+vt 0.7139 0.3672
+vt 0.7334 0.3477
+vt 0.7139 0.3477
+vt 0.6934 0.3936
+vt 0.6738 0.4072
+vt 0.6934 0.3730
+vt 0.6738 0.3877
+vt 0.7334 0.4072
+vt 0.7139 0.4072
+vt 0.7334 0.3730
+vt 0.7139 0.3877
+vt 0.9307 0.4326
+vt 0.9111 0.4463
+vt 0.9307 0.4268
+vt 0.9111 0.4268
+vt 0.9707 0.4326
+vt 0.9502 0.4326
+vt 0.9707 0.4268
+vt 0.9502 0.4268
+vt 0.9307 0.4717
+vt 0.9111 0.4717
+vt 0.9307 0.4668
+vt 0.9111 0.4521
+vt 0.9707 0.4717
+vt 0.9502 0.4863
+vt 0.9707 0.4521
+vt 0.9502 0.4521
+vt 0.8516 0.4463
+vt 0.8320 0.4326
+vt 0.8516 0.4268
+vt 0.8320 0.4131
+vt 0.8916 0.4326
+vt 0.8711 0.4326
+vt 0.8916 0.4268
+vt 0.8711 0.4268
+vt 0.8516 0.4863
+vt 0.8320 0.4863
+vt 0.8516 0.4668
+vt 0.8320 0.4668
+vt 0.8916 0.4863
+vt 0.8711 0.4717
+vt 0.8916 0.4668
+vt 0.8711 0.4521
+vt 0.9307 0.3535
+vt 0.9111 0.3535
+vt 0.9307 0.3340
+vt 0.9111 0.3340
+vt 0.9707 0.3672
+vt 0.9502 0.3672
+vt 0.9707 0.3477
+vt 0.9502 0.3340
+vt 0.9307 0.4072
+vt 0.9111 0.4072
+vt 0.9307 0.3877
+vt 0.9111 0.3730
+vt 0.9707 0.4072
+vt 0.9502 0.3936
+vt 0.9707 0.3730
+vt 0.9502 0.3730
+vt 0.8516 0.3535
+vt 0.8320 0.3535
+vt 0.8516 0.3477
+vt 0.8320 0.3477
+vt 0.8916 0.3535
+vt 0.8711 0.3535
+vt 0.8916 0.3477
+vt 0.8711 0.3477
+vt 0.8516 0.4072
+vt 0.8320 0.4072
+vt 0.8516 0.3877
+vt 0.8320 0.3730
+vt 0.8916 0.4072
+vt 0.8711 0.3936
+vt 0.8916 0.3877
+vt 0.8711 0.3877
+vt 0.7725 0.5908
+vt 0.7529 0.6045
+vt 0.7725 0.5713
+vt 0.7529 0.5850
+vt 0.8125 0.6045
+vt 0.7930 0.6045
+vt 0.8125 0.5850
+vt 0.7930 0.5850
+vt 0.7725 0.6445
+vt 0.7529 0.6299
+vt 0.7725 0.6240
+vt 0.7529 0.6240
+vt 0.8125 0.6445
+vt 0.7930 0.6445
+vt 0.8125 0.6240
+vt 0.7930 0.6240
+vt 0.6934 0.5908
+vt 0.6738 0.6045
+vt 0.6934 0.5713
+vt 0.6738 0.5713
+vt 0.7334 0.6045
+vt 0.7139 0.6045
+vt 0.7334 0.5713
+vt 0.7139 0.5713
+vt 0.6934 0.6299
+vt 0.6738 0.6445
+vt 0.6934 0.6104
+vt 0.6738 0.6240
+vt 0.7334 0.6299
+vt 0.7139 0.6299
+vt 0.7334 0.6104
+vt 0.7139 0.6240
+vt 0.7725 0.5254
+vt 0.7529 0.5254
+vt 0.7725 0.4922
+vt 0.7529 0.4922
+vt 0.8125 0.5254
+vt 0.7930 0.5117
+vt 0.8125 0.5059
+vt 0.7930 0.5059
+vt 0.7725 0.5654
+vt 0.7529 0.5654
+vt 0.7725 0.5312
+vt 0.7529 0.5312
+vt 0.8125 0.5654
+vt 0.7930 0.5508
+vt 0.8125 0.5459
+vt 0.7930 0.5459
+vt 0.6934 0.5117
+vt 0.6738 0.5117
+vt 0.6934 0.5059
+vt 0.6738 0.4922
+vt 0.7334 0.5117
+vt 0.7139 0.5254
+vt 0.7334 0.5059
+vt 0.7139 0.5059
+vt 0.6934 0.5508
+vt 0.6738 0.5654
+vt 0.6934 0.5312
+vt 0.6738 0.5459
+vt 0.7334 0.5654
+vt 0.7139 0.5508
+vt 0.7334 0.5312
+vt 0.7139 0.5459
+vt 0.9307 0.6045
+vt 0.9111 0.5908
+vt 0.9307 0.5850
+vt 0.9111 0.5850
+vt 0.9707 0.5908
+vt 0.9502 0.5908
+vt 0.9707 0.5850
+vt 0.9502 0.5850
+vt 0.9307 0.6299
+vt 0.9111 0.6445
+vt 0.9307 0.6240
+vt 0.9111 0.6240
+vt 0.9707 0.6299
+vt 0.9502 0.6445
+vt 0.9707 0.6240
+vt 0.9502 0.6104
+vt 0.8516 0.6045
+vt 0.8320 0.6045
+vt 0.8516 0.5850
+vt 0.8320 0.5713
+vt 0.8916 0.5908
+vt 0.8711 0.5908
+vt 0.8916 0.5850
+vt 0.8711 0.5713
+vt 0.8516 0.6445
+vt 0.8320 0.6299
+vt 0.8516 0.6240
+vt 0.8320 0.6104
+vt 0.8916 0.6445
+vt 0.8711 0.6299
+vt 0.8916 0.6240
+vt 0.8711 0.6104
+vt 0.9307 0.5254
+vt 0.9111 0.5117
+vt 0.9307 0.5059
+vt 0.9111 0.4922
+vt 0.9707 0.5254
+vt 0.9502 0.5117
+vt 0.9707 0.5059
+vt 0.9502 0.5059
+vt 0.9307 0.5654
+vt 0.9111 0.5654
+vt 0.9307 0.5312
+vt 0.9111 0.5459
+vn 0.0000 0.9975 0.0702
+vn -0.0747 0.9972 0.0000
+vn -0.0743 0.9948 0.0698
+vn 0.0000 0.9996 0.0277
+vn 0.0000 1.0000 0.0000
+vn 0.1053 0.9932 -0.0500
+vn 0.0000 0.9991 -0.0407
+vn 0.1556 0.9849 0.0752
+vn 0.0552 0.9977 -0.0405
+vn 0.0000 0.9977 -0.0676
+vn -0.1100 0.9845 -0.1366
+vn -0.0909 0.9920 -0.0876
+vn -0.1420 0.9842 -0.1058
+vn -0.1828 0.9763 -0.1154
+vn -0.0360 0.9981 -0.0494
+vn -0.1130 0.9917 -0.0610
+vn -0.1080 0.9906 -0.0834
+vn -0.1938 0.9651 -0.1757
+vn 0.0762 0.9969 0.0181
+vn 0.0387 0.9989 0.0255
+vn -0.0131 0.9999 -0.0064
+vn 0.0874 0.9817 0.1688
+vn 0.2437 0.9649 0.0976
+vn 0.0053 0.9970 0.0773
+vn -0.1375 0.9889 -0.0563
+vn 0.0882 0.9916 0.0943
+vn -0.0046 1.0000 0.0034
+vn -0.0955 0.9920 -0.0822
+vn -0.1144 0.9905 -0.0763
+vn -0.1537 0.9848 -0.0805
+vn 0.1652 0.9829 -0.0805
+vn 0.0317 0.9935 -0.1096
+vn -0.0307 0.9965 -0.0774
+vn 0.1548 0.9879 0.0121
+vn -0.0020 0.9999 0.0082
+vn 0.0054 1.0000 0.0000
+vn 0.1805 0.9791 0.0934
+vn 0.1598 0.9850 0.0652
+vn 0.1375 0.9905 0.0013
+vn -0.0822 0.9926 0.0890
+vn 0.0191 0.9969 0.0763
+vn -0.1541 0.9864 -0.0570
+vn 0.0828 0.9888 0.1244
+vn 0.0394 0.9988 -0.0292
+vn 0.0000 0.9975 -0.0702
+vn -0.1038 0.9915 0.0783
+vn -0.1113 0.9913 -0.0701
+vn -0.1098 0.9893 0.0958
+vn 0.0000 0.9905 -0.1375
+vn 0.1598 0.9862 0.0422
+vn 0.1108 0.9934 0.0274
+vn -0.2101 0.9777 0.0000
+vn -0.1682 0.9846 0.0463
+vn -0.1682 0.9846 -0.0463
+vn -0.0434 0.9985 0.0329
+vn -0.1554 0.9878 0.0000
+vn -0.1600 0.9871 0.0000
+vn -0.0953 0.9954 0.0000
+vn 0.0000 0.9928 0.1194
+vn 0.0000 1.0000 0.0034
+vn -0.0046 1.0000 0.0000
+vn 0.0000 0.9932 0.1160
+vn 0.1433 0.9820 0.1230
+vn -0.0033 0.9999 -0.0113
+vn 0.0953 0.9954 0.0000
+vn 0.1898 0.9818 0.0000
+vn -0.0749 0.9869 -0.1426
+vn -0.2396 0.9599 -0.1452
+vn 0.1163 0.9873 -0.1082
+vn 0.0044 1.0000 0.0006
+vn -0.0361 0.9993 -0.0044
+vn -0.0176 0.9998 0.0028
+vn 0.0128 0.9990 -0.0428
+vn -0.0290 0.9991 -0.0322
+vn 0.0198 0.9995 -0.0225
+vn -0.0079 0.9985 -0.0540
+vn -0.0268 0.9980 -0.0566
+vn 0.0165 0.9998 0.0015
+vn 0.0255 0.9995 -0.0211
+vn 0.0596 0.9970 -0.0479
+vn 0.0064 0.9997 0.0214
+vn 0.0094 0.9990 0.0425
+vn 0.0093 0.9990 0.0429
+vn -0.9978 -0.0005 0.0657
+vn -0.0013 1.0000 -0.0009
+vn -0.0048 1.0000 0.0020
+vn -0.0036 1.0000 0.0042
+vn 0.0128 0.9991 0.0411
+vn -0.0530 0.9965 -0.0645
+vn 0.0143 0.9994 -0.0313
+vn -0.0521 0.9986 0.0059
+vn 0.0222 0.9997 0.0027
+vn 0.0048 1.0000 0.0036
+vn -0.0439 0.9989 0.0125
+vn -0.9999 0.0107 0.0110
+vn -0.9999 0.0096 0.0088
+vn -0.9998 0.0116 0.0127
+vn -0.0391 0.9992 0.0026
+vn 0.0181 0.9998 0.0070
+vn -0.0549 0.9985 -0.0017
+vn 0.0000 0.0000 1.0000
+vn -0.0243 0.9996 0.0093
+vn 0.0172 0.9998 -0.0004
+vn -0.0006 1.0000 -0.0009
+vn -0.0479 0.9988 0.0016
+vn 0.0072 0.9999 0.0080
+vn 0.0037 1.0000 0.0041
+vn -0.0392 0.9992 0.0036
+vn 0.0085 0.9999 0.0013
+vn -0.0035 1.0000 0.0057
+vn -0.0524 0.9986 0.0051
+vn 0.0129 0.9999 0.0082
+vn -0.0431 0.9990 0.0117
+vn -0.0021 0.9999 0.0112
+vn -0.0093 0.9999 0.0062
+vn -0.0441 0.9989 0.0137
+vn -0.0217 0.9997 0.0052
+vn 0.0098 0.9999 -0.0000
+vn -0.0047 0.9999 0.0072
+vn -0.0319 0.9994 0.0161
+vn -0.0058 1.0000 0.0026
+vn -0.1515 -0.0028 0.9884
+vn -0.0254 0.9996 0.0127
+vn 0.0059 1.0000 0.0035
+vn -0.0312 0.9995 0.0107
+vn -0.1069 0.0078 -0.9942
+vn 0.0132 0.9998 -0.0110
+vn -0.0001 1.0000 -0.0055
+vn -0.0125 0.9999 -0.0035
+vn -0.0502 0.9984 0.0233
+vn -0.0417 0.9990 0.0146
+vn -0.0060 1.0000 0.0028
+vn 0.0110 0.9987 -0.0487
+vn 0.0056 0.9999 0.0093
+vn 0.0096 0.9999 0.0018
+vn 0.0181 0.9998 -0.0032
+vn 0.0098 0.9999 -0.0007
+vn 0.0529 0.9940 -0.0952
+vn 0.0228 0.9993 -0.0277
+vn 0.0159 0.9998 0.0047
+vn 0.0093 0.9988 -0.0473
+vn 0.0179 0.9998 0.0104
+vn 0.0170 0.9998 -0.0025
+vn 0.0087 0.9999 0.0069
+vn 0.0133 0.9999 -0.0019
+vn 0.0170 0.9998 0.0014
+vn 0.0099 0.9999 0.0083
+vn 0.0217 0.9964 -0.0819
+vn -0.0501 0.9962 -0.0718
+vn 0.0089 0.9999 0.0049
+vn 0.0161 0.9998 -0.0011
+vn -0.0103 0.9998 -0.0168
+vn 0.0049 0.9996 -0.0257
+vn 0.0197 0.9998 0.0012
+vn 0.0251 0.9997 -0.0054
+vn -0.2581 -0.0024 -0.9661
+vn -0.2658 0.0034 -0.9640
+vn -0.2459 -0.0117 -0.9692
+vn -0.0454 0.9982 -0.0392
+vn 0.0068 0.9997 -0.0214
+vn 0.0110 0.9999 0.0010
+vn 0.0038 0.9999 0.0079
+vn 0.0043 1.0000 0.0005
+vn -0.0187 0.9979 -0.0614
+vn 0.0103 0.9999 0.0042
+vn 0.0113 0.9999 -0.0010
+vn 0.0047 0.9998 -0.0212
+vn 0.0065 0.9999 0.0101
+vn 0.0076 0.9999 0.0026
+vn 0.0176 0.9998 0.0047
+vn 0.0194 0.9997 0.0149
+vn 0.0087 0.9999 0.0112
+vn 0.0115 0.9983 -0.0562
+vn 0.0187 0.9991 -0.0392
+vn 0.0067 1.0000 0.0029
+vn 0.0131 0.9999 -0.0016
+vn 0.0058 0.9999 0.0078
+vn 0.0134 0.9999 0.0015
+vn 0.0000 0.9992 -0.0394
+vn 0.0031 1.0000 0.0056
+vn 0.0164 0.9988 -0.0455
+vn 0.0136 0.9999 0.0030
+vn -0.9969 0.0046 0.0780
+vn 0.0131 0.9983 -0.0570
+vn 0.0079 0.9998 -0.0145
+vn 0.0147 0.9999 0.0017
+vn 0.0143 0.9999 0.0028
+vn 0.0192 0.9998 0.0001
+vn 0.0195 0.9998 0.0020
+vn 0.0098 0.9991 -0.0423
+vn 0.0148 0.9999 0.0039
+vn 0.0127 0.9999 0.0085
+vn 0.0000 0.9999 0.0103
+vn 0.0132 0.9999 0.0032
+vn 0.0121 0.9999 0.0088
+vn 0.0114 0.9999 0.0034
+vn 0.0091 0.9998 -0.0185
+vn 0.0085 0.9999 0.0021
+vn 0.0082 0.9999 0.0101
+vn 0.0037 0.9983 -0.0573
+vn 0.0108 0.9999 0.0010
+vn 0.0113 0.9999 0.0078
+vn 0.0103 0.9999 -0.0044
+vn 0.0067 1.0000 0.0024
+vn 0.0116 0.9999 0.0020
+vn 0.0048 0.9999 0.0066
+vn 0.0017 1.0000 0.0056
+vn 0.0092 0.9999 0.0060
+vn 0.0089 0.9999 0.0061
+vn 0.0022 0.9983 -0.0588
+vn 0.0137 0.9998 -0.0140
+vn 0.0065 1.0000 -0.0005
+vn -0.0082 0.9999 0.0045
+vn 0.0177 0.9998 -0.0019
+vn 0.0042 0.9987 -0.0506
+vn 0.0087 0.9999 0.0022
+vn 0.0132 0.9999 0.0023
+vn 0.0061 1.0000 0.0043
+vn 0.0170 0.9998 0.0096
+vn 0.0017 0.9999 -0.0083
+vn 0.0119 0.9990 -0.0435
+vn 0.0127 0.9999 0.0048
+vn 0.0144 0.9999 0.0042
+vn 0.0246 0.9974 -0.0678
+vn 0.0168 0.9998 -0.0134
+vn -0.9939 0.0168 0.1091
+vn 0.0163 0.9998 0.0027
+vn 0.0137 0.9999 0.0020
+vn -0.0031 1.0000 0.0035
+vn 0.0162 0.9998 -0.0082
+vn 0.0158 0.9998 0.0018
+vn 0.0128 0.9998 0.0103
+vn 0.0106 0.9999 0.0000
+vn 0.0131 0.9985 -0.0534
+vn 0.0107 0.9999 0.0047
+vn 0.0186 0.9964 -0.0826
+vn 0.0127 0.9999 0.0017
+vn 0.0111 0.9999 0.0000
+vn 0.0047 1.0000 -0.0003
+vn 0.0167 0.9998 0.0002
+vn 0.0298 0.9995 0.0112
+vn 0.0105 0.9999 0.0052
+vn 0.0125 0.9997 0.0201
+vn 0.0085 0.9999 0.0048
+vn 0.0130 0.9999 0.0081
+vn 0.0124 0.9999 -0.0014
+vn -0.0083 0.9999 0.0006
+vn 0.0086 0.9999 -0.0050
+vn 0.0106 0.9999 -0.0046
+vn -0.9999 0.0109 -0.0020
+vn 0.0219 0.9997 0.0035
+vn 0.0083 0.9999 0.0052
+vn 0.0128 0.9999 0.0050
+vn 0.0060 0.9982 -0.0590
+vn -0.0085 0.9972 -0.0738
+vn 0.0069 0.9999 -0.0127
+vn 0.0162 0.9998 0.0082
+vn 0.0218 0.9998 -0.0001
+vn 0.0056 0.9987 -0.0514
+vn 0.0030 1.0000 0.0016
+vn 0.0074 0.9999 0.0046
+vn -0.0092 0.9981 -0.0605
+vn 0.0091 0.9999 0.0015
+vn 0.0132 0.9999 0.0079
+vn 0.0120 0.9999 0.0070
+vn -0.0036 1.0000 0.0037
+vn 0.0045 1.0000 -0.0056
+vn 0.0139 0.9998 0.0118
+vn 0.0105 0.9999 -0.0116
+vn -0.0024 1.0000 0.0029
+vn 0.0092 0.9999 0.0089
+vn 0.0136 0.9999 0.0001
+vn 0.0110 0.9999 0.0076
+vn 0.0036 0.9983 -0.0584
+vn 0.0072 0.9997 -0.0219
+vn 0.0142 0.9999 0.0038
+vn 0.0125 0.9999 -0.0041
+vn 0.0142 0.9998 0.0082
+vn 0.0110 0.9964 -0.0837
+vn 0.0013 1.0000 0.0012
+vn 0.0216 0.9998 -0.0009
+vn 0.0295 0.0040 -0.9995
+vn 0.0004 1.0000 0.0020
+vn 0.0110 0.9999 -0.0032
+vn 0.0172 0.9998 0.0099
+vn 0.0201 0.9998 0.0036
+vn 0.0497 0.0350 0.9981
+vn 0.0076 1.0000 -0.0018
+vn 0.0117 0.9999 0.0082
+vn 0.0103 -0.0136 0.9998
+vn 0.0110 0.9978 -0.0656
+vn 0.0189 0.9998 0.0044
+vn 0.0083 0.9999 0.0013
+vn 0.0079 0.9999 0.0030
+vn 0.0186 0.9997 -0.0136
+vn 0.0171 0.9998 -0.0054
+vn 0.0328 0.9994 0.0104
+vn 0.0034 1.0000 0.0054
+vn 0.0143 0.9999 0.0027
+vn 0.0110 0.9999 0.0041
+vn 0.0118 0.9992 -0.0377
+vn 0.0132 0.9991 -0.0404
+vn 0.0158 0.9998 0.0016
+vn 0.0087 0.9980 -0.0619
+vn 0.0181 0.9994 -0.0298
+vn -0.0013 1.0000 0.0013
+vn 0.0164 0.9998 0.0009
+vn 0.0176 0.9998 0.0017
+vn 0.0201 0.9998 0.0033
+vn 0.9960 -0.0168 -0.0876
+vn -0.0106 -0.0011 0.9999
+vn -0.0056 0.0014 -1.0000
+vn 0.0060 0.9999 0.0071
+vn 0.0058 0.9999 0.0074
+vn -0.0044 0.9998 0.0186
+vn 0.9973 -0.0053 -0.0735
+vn -0.9997 0.0060 -0.0244
+vn 0.0081 -0.0073 0.9999
+vn 0.0279 0.9990 -0.0353
+vn 0.0325 0.9987 -0.0378
+vn 0.0235 0.9992 -0.0330
+vn -0.0008 -0.0365 -0.9993
+vn -0.9962 0.0270 -0.0820
+vn 0.9986 -0.0285 0.0438
+vn -0.0009 1.0000 -0.0045
+vn -0.0007 1.0000 -0.0047
+vn -0.0059 1.0000 0.0005
+vn 0.0347 -0.0046 -0.9994
+vn 0.1005 0.0047 0.9949
+vn 0.9999 0.0009 0.0133
+vn -0.0962 0.9953 -0.0118
+vn -0.0965 0.9952 -0.0121
+vn -0.0855 0.9963 0.0011
+vn 0.1208 -0.0002 -0.9926
+vn -0.9953 -0.0961 0.0132
+vn 0.9933 0.0968 0.0623
+vn 0.0071 0.9998 0.0163
+vn 0.0047 0.9998 0.0186
+vn 0.0152 0.9998 0.0082
+vn 0.9984 -0.0050 -0.0557
+vn 0.1754 -0.0181 0.9843
+vn -0.0647 0.0177 -0.9977
+vn 0.0139 0.9999 0.0068
+vn 0.0042 1.0000 0.0017
+vn -0.0044 1.0000 -0.0028
+vn 0.0447 -0.0047 0.9990
+vn -0.9999 0.0090 0.0068
+vn 0.9998 -0.0090 -0.0159
+vn 0.0116 0.9999 0.0058
+vn 0.0117 0.9999 0.0057
+vn 0.0114 0.9999 0.0060
+vn -0.1293 0.0072 -0.9915
+vn 0.0132 0.9998 -0.0177
+vn -0.0036 0.9999 -0.0094
+vn 0.0253 0.9994 -0.0237
+vn -0.9999 0.0147 -0.0004
+vn -0.9999 0.0128 0.0013
+vn -0.9996 0.0247 -0.0087
+vn 0.9965 -0.0023 0.0837
+vn 0.0787 0.0126 0.9968
+vn 0.0118 0.9997 -0.0219
+vn 0.0103 0.9997 -0.0211
+vn 0.0132 0.9996 -0.0226
+vn 0.9958 -0.0089 0.0908
+vn -0.1637 -0.0193 -0.9863
+vn -0.0186 0.0216 0.9996
+vn 0.0024 0.9999 0.0121
+vn 0.0078 0.9998 0.0165
+vn 0.0216 0.9994 0.0276
+vn -0.9983 0.0034 0.0576
+vn 0.9991 -0.0048 0.0412
+vn 0.1897 0.0126 -0.9817
+vn 0.9996 0.0056 -0.0263
+vn -0.0499 0.9981 -0.0359
+vn -0.0392 0.9980 -0.0491
+vn -0.0106 0.9964 -0.0844
+vn -0.0314 0.0169 -0.9994
+vn -0.0258 0.0309 -0.9992
+vn -0.0342 0.0099 -0.9994
+vn -0.9956 -0.0036 -0.0938
+vn -0.9956 -0.0026 -0.0933
+vn -0.9957 -0.0017 -0.0928
+vn -0.0458 -0.0103 0.9989
+vn 0.0095 0.9982 -0.0593
+vn 0.9997 -0.0218 0.0139
+vn 0.9993 -0.0347 -0.0114
+vn 0.9985 -0.0446 -0.0309
+vn 0.1126 -0.0124 0.9935
+vn 0.1146 -0.0117 0.9933
+vn 0.1117 -0.0128 0.9937
+vn -0.9247 0.3805 0.0000
+vn -0.8173 0.5528 -0.1626
+vn -0.9070 0.3805 -0.1804
+vn -0.3879 -0.9217 0.0000
+vn -0.5490 -0.8286 -0.1092
+vn -0.3804 -0.9217 -0.0757
+vn -0.9622 0.1939 -0.1914
+vn -0.9810 0.1939 0.0000
+vn -0.2010 -0.9796 0.0000
+vn -0.1971 -0.9796 -0.0392
+vn -0.9808 0.0000 -0.1951
+vn -1.0000 0.0000 0.0000
+vn -0.9622 -0.1939 -0.1914
+vn -0.9810 -0.1939 0.0000
+vn -0.2010 0.9796 0.0000
+vn -0.3804 0.9217 -0.0757
+vn -0.3879 0.9217 0.0000
+vn -0.9247 -0.3805 0.0000
+vn -0.9070 -0.3805 -0.1804
+vn -0.5490 0.8286 -0.1092
+vn -0.5598 0.8286 0.0000
+vn -0.8173 -0.5528 -0.1626
+vn -0.8333 -0.5528 0.0000
+vn -0.6965 0.7040 -0.1385
+vn -0.7101 0.7040 0.0000
+vn -0.7101 -0.7040 0.0000
+vn -0.6965 -0.7040 -0.1385
+vn -0.8333 0.5528 0.0000
+vn -0.5598 -0.8286 0.0000
+vn -0.7699 0.5528 -0.3189
+vn -0.6561 -0.7040 -0.2717
+vn -0.5171 -0.8286 -0.2142
+vn -0.8544 0.3805 -0.3539
+vn -0.3583 -0.9217 -0.1484
+vn -0.9063 0.1939 -0.3754
+vn -0.1856 -0.9796 -0.0769
+vn -0.9239 0.0000 -0.3827
+vn -0.9063 -0.1939 -0.3754
+vn -0.1856 0.9796 -0.0769
+vn -0.3583 0.9217 -0.1484
+vn -0.8544 -0.3805 -0.3539
+vn -0.5171 0.8286 -0.2142
+vn -0.7699 -0.5528 -0.3189
+vn -0.6561 0.7040 -0.2717
+vn -0.8314 0.0000 -0.5556
+vn -0.8157 -0.1939 -0.5450
+vn -0.3225 0.9217 -0.2155
+vn -0.7689 -0.3805 -0.5137
+vn -0.4654 0.8286 -0.3110
+vn -0.6929 -0.5528 -0.4630
+vn -0.5904 0.7040 -0.3945
+vn -0.5904 -0.7040 -0.3945
+vn -0.6929 0.5528 -0.4630
+vn -0.4654 -0.8286 -0.3110
+vn -0.7689 0.3805 -0.5137
+vn -0.3225 -0.9217 -0.2155
+vn -0.8157 0.1939 -0.5450
+vn -0.1671 -0.9796 -0.1116
+vn -0.3958 -0.8286 -0.3958
+vn -0.5893 0.5528 -0.5893
+vn -0.6539 0.3805 -0.6539
+vn -0.2743 -0.9217 -0.2743
+vn -0.6937 0.1939 -0.6937
+vn -0.1421 -0.9796 -0.1421
+vn -0.7071 0.0000 -0.7071
+vn -0.6937 -0.1939 -0.6937
+vn -0.1421 0.9796 -0.1421
+vn -0.2743 0.9217 -0.2743
+vn -0.6539 -0.3805 -0.6539
+vn -0.3958 0.8286 -0.3958
+vn -0.5893 -0.5528 -0.5893
+vn -0.5021 0.7040 -0.5021
+vn -0.5021 -0.7040 -0.5021
+vn -0.2155 0.9217 -0.3225
+vn -0.5450 -0.1939 -0.8157
+vn -0.5137 -0.3805 -0.7689
+vn -0.3110 0.8286 -0.4654
+vn -0.4630 -0.5528 -0.6929
+vn -0.3945 0.7040 -0.5904
+vn -0.3945 -0.7040 -0.5904
+vn -0.4630 0.5528 -0.6929
+vn -0.3110 -0.8286 -0.4654
+vn -0.5137 0.3805 -0.7689
+vn -0.2155 -0.9217 -0.3225
+vn -0.5450 0.1939 -0.8157
+vn -0.1116 -0.9796 -0.1671
+vn -0.5556 0.0000 -0.8314
+vn -0.3539 0.3805 -0.8544
+vn -0.1484 -0.9217 -0.3583
+vn -0.3754 0.1939 -0.9063
+vn -0.0769 -0.9796 -0.1856
+vn -0.3827 0.0000 -0.9239
+vn -0.3754 -0.1939 -0.9063
+vn -0.1116 0.9796 -0.1671
+vn -0.1484 0.9217 -0.3583
+vn -0.3539 -0.3805 -0.8544
+vn -0.2142 0.8286 -0.5171
+vn -0.3189 -0.5528 -0.7699
+vn -0.2717 0.7040 -0.6561
+vn -0.2717 -0.7040 -0.6561
+vn -0.3189 0.5528 -0.7699
+vn -0.2142 -0.8286 -0.5171
+vn -0.1804 -0.3805 -0.9070
+vn -0.1092 0.8286 -0.5490
+vn -0.1626 -0.5528 -0.8173
+vn -0.1385 0.7040 -0.6965
+vn -0.1385 -0.7040 -0.6965
+vn -0.1626 0.5528 -0.8173
+vn -0.1092 -0.8286 -0.5490
+vn -0.1804 0.3805 -0.9070
+vn -0.0757 -0.9217 -0.3804
+vn -0.1914 0.1939 -0.9622
+vn -0.0392 -0.9796 -0.1971
+vn -0.1951 0.0000 -0.9808
+vn -0.1914 -0.1939 -0.9622
+vn -0.0769 0.9796 -0.1856
+vn -0.0757 0.9217 -0.3804
+vn 0.0000 -0.8286 -0.5598
+vn 0.0000 -0.9217 -0.3879
+vn 0.0000 0.3805 -0.9247
+vn 0.0000 0.1939 -0.9810
+vn 0.0000 -0.9796 -0.2010
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 -0.1939 -0.9810
+vn 0.0000 0.9796 -0.2010
+vn 0.0000 0.9217 -0.3879
+vn 0.0000 -0.3805 -0.9247
+vn 0.0000 0.8286 -0.5598
+vn 0.0000 -0.5528 -0.8333
+vn 0.0000 0.7040 -0.7101
+vn 0.0000 -0.7040 -0.7101
+vn 0.0000 0.5528 -0.8333
+vn 0.1626 -0.5528 -0.8173
+vn 0.1092 0.8286 -0.5490
+vn 0.1385 0.7040 -0.6965
+vn 0.1385 -0.7040 -0.6965
+vn 0.1626 0.5528 -0.8173
+vn 0.1092 -0.8286 -0.5490
+vn 0.1804 0.3805 -0.9070
+vn 0.0757 -0.9217 -0.3804
+vn 0.1914 0.1939 -0.9622
+vn 0.0392 -0.9796 -0.1971
+vn 0.1951 0.0000 -0.9808
+vn 0.1914 -0.1939 -0.9622
+vn 0.0392 0.9796 -0.1971
+vn 0.0757 0.9217 -0.3804
+vn 0.1804 -0.3805 -0.9070
+vn 0.1484 -0.9217 -0.3583
+vn 0.0769 -0.9796 -0.1856
+vn 0.3827 0.0000 -0.9239
+vn 0.3754 -0.1939 -0.9063
+vn 0.1484 0.9217 -0.3583
+vn 0.3539 -0.3805 -0.8544
+vn 0.2142 0.8286 -0.5171
+vn 0.3189 -0.5528 -0.7699
+vn 0.2717 0.7040 -0.6561
+vn 0.2717 -0.7040 -0.6561
+vn 0.3189 0.5528 -0.7699
+vn 0.2142 -0.8286 -0.5171
+vn 0.3539 0.3805 -0.8544
+vn 0.3754 0.1939 -0.9063
+vn 0.3945 0.7040 -0.5904
+vn 0.3945 -0.7040 -0.5904
+vn 0.4630 0.5528 -0.6929
+vn 0.3110 -0.8286 -0.4654
+vn 0.5137 0.3805 -0.7689
+vn 0.2155 -0.9217 -0.3225
+vn 0.5450 0.1939 -0.8157
+vn 0.1116 -0.9796 -0.1671
+vn 0.5556 0.0000 -0.8314
+vn 0.5450 -0.1939 -0.8157
+vn 0.0769 0.9796 -0.1856
+vn 0.2155 0.9217 -0.3225
+vn 0.5137 -0.3805 -0.7689
+vn 0.3110 0.8286 -0.4654
+vn 0.4630 -0.5528 -0.6929
+vn 0.6937 0.1939 -0.6937
+vn 0.7071 0.0000 -0.7071
+vn 0.6937 -0.1939 -0.6937
+vn 0.1116 0.9796 -0.1671
+vn 0.2743 0.9217 -0.2743
+vn 0.6539 -0.3805 -0.6539
+vn 0.3958 0.8286 -0.3958
+vn 0.5893 -0.5528 -0.5893
+vn 0.5021 0.7040 -0.5021
+vn 0.5021 -0.7040 -0.5021
+vn 0.5893 0.5528 -0.5893
+vn 0.3958 -0.8286 -0.3958
+vn 0.6539 0.3805 -0.6539
+vn 0.2743 -0.9217 -0.2743
+vn 0.1421 -0.9796 -0.1421
+vn 0.5904 -0.7040 -0.3945
+vn 0.5904 0.7040 -0.3945
+vn 0.6929 0.5528 -0.4630
+vn 0.4654 -0.8286 -0.3110
+vn 0.7689 0.3805 -0.5137
+vn 0.3225 -0.9217 -0.2155
+vn 0.8157 0.1939 -0.5450
+vn 0.1671 -0.9796 -0.1116
+vn 0.8314 0.0000 -0.5556
+vn 0.8157 -0.1939 -0.5450
+vn 0.1421 0.9796 -0.1421
+vn 0.3225 0.9217 -0.2155
+vn 0.7689 -0.3805 -0.5137
+vn 0.4654 0.8286 -0.3110
+vn 0.6929 -0.5528 -0.4630
+vn 0.9063 -0.1939 -0.3754
+vn 0.1671 0.9796 -0.1116
+vn 0.3583 0.9217 -0.1484
+vn 0.8544 -0.3805 -0.3539
+vn 0.5171 0.8286 -0.2142
+vn 0.7699 -0.5528 -0.3189
+vn 0.6561 0.7040 -0.2717
+vn 0.6561 -0.7040 -0.2717
+vn 0.7699 0.5528 -0.3189
+vn 0.5171 -0.8286 -0.2142
+vn 0.8544 0.3805 -0.3539
+vn 0.3583 -0.9217 -0.1484
+vn 0.9063 0.1939 -0.3754
+vn 0.1856 -0.9796 -0.0769
+vn 0.9239 0.0000 -0.3827
+vn 0.6965 0.7040 -0.1385
+vn 0.8173 0.5528 -0.1626
+vn 0.5490 -0.8286 -0.1092
+vn 0.9070 0.3805 -0.1804
+vn 0.3804 -0.9217 -0.0757
+vn 0.9622 0.1939 -0.1914
+vn 0.1971 -0.9796 -0.0392
+vn 0.9808 0.0000 -0.1951
+vn 0.9622 -0.1939 -0.1914
+vn 0.1856 0.9796 -0.0769
+vn 0.3804 0.9217 -0.0757
+vn 0.9070 -0.3805 -0.1804
+vn 0.5490 0.8286 -0.1092
+vn 0.8173 -0.5528 -0.1626
+vn 0.6965 -0.7040 -0.1385
+vn 0.9810 -0.1939 0.0000
+vn 0.1971 0.9796 -0.0392
+vn 0.3879 0.9217 0.0000
+vn 0.9247 -0.3805 0.0000
+vn 0.5598 0.8286 0.0000
+vn 0.8333 -0.5528 0.0000
+vn 0.7101 0.7040 0.0000
+vn 0.7101 -0.7040 0.0000
+vn 0.8333 0.5528 0.0000
+vn 0.5598 -0.8286 0.0000
+vn 0.9247 0.3805 0.0000
+vn 0.3879 -0.9217 0.0000
+vn 0.9810 0.1939 0.0000
+vn 0.2010 -0.9796 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.6965 -0.7040 0.1385
+vn 0.5490 -0.8286 0.1092
+vn 0.9070 0.3805 0.1804
+vn 0.3804 -0.9217 0.0757
+vn 0.9622 0.1939 0.1914
+vn 0.1971 -0.9796 0.0392
+vn 0.9808 0.0000 0.1951
+vn 0.9622 -0.1939 0.1914
+vn 0.1971 0.9796 0.0392
+vn 0.3804 0.9217 0.0757
+vn 0.9070 -0.3805 0.1804
+vn 0.5490 0.8286 0.1092
+vn 0.8173 -0.5528 0.1626
+vn 0.6965 0.7040 0.1385
+vn 0.8173 0.5528 0.1626
+vn 0.8544 -0.3805 0.3539
+vn 0.5171 0.8286 0.2142
+vn 0.7699 -0.5528 0.3189
+vn 0.6561 0.7040 0.2717
+vn 0.6561 -0.7040 0.2717
+vn 0.7699 0.5528 0.3189
+vn 0.5171 -0.8286 0.2142
+vn 0.8544 0.3805 0.3539
+vn 0.3583 -0.9217 0.1484
+vn 0.9063 0.1939 0.3754
+vn 0.1856 -0.9796 0.0769
+vn 0.9239 0.0000 0.3827
+vn 0.9063 -0.1939 0.3754
+vn 0.3583 0.9217 0.1484
+vn 0.4654 -0.8286 0.3110
+vn 0.3225 -0.9217 0.2155
+vn 0.7689 0.3805 0.5137
+vn 0.8157 0.1939 0.5450
+vn 0.1671 -0.9796 0.1116
+vn 0.8314 0.0000 0.5556
+vn 0.8157 -0.1939 0.5450
+vn 0.1671 0.9796 0.1116
+vn 0.3225 0.9217 0.2155
+vn 0.7689 -0.3805 0.5137
+vn 0.4654 0.8286 0.3110
+vn 0.6929 -0.5528 0.4630
+vn 0.5904 0.7040 0.3945
+vn 0.5904 -0.7040 0.3945
+vn 0.6929 0.5528 0.4630
+vn 0.3958 0.8286 0.3958
+vn 0.6539 -0.3805 0.6539
+vn 0.5893 -0.5528 0.5893
+vn 0.5021 0.7040 0.5021
+vn 0.5021 -0.7040 0.5021
+vn 0.5893 0.5528 0.5893
+vn 0.3958 -0.8286 0.3958
+vn 0.6539 0.3805 0.6539
+vn 0.2743 -0.9217 0.2743
+vn 0.6937 0.1939 0.6937
+vn 0.1421 -0.9796 0.1421
+vn 0.7071 0.0000 0.7071
+vn 0.6937 -0.1939 0.6937
+vn 0.2743 0.9217 0.2743
+vn 0.5137 0.3805 0.7689
+vn 0.5450 0.1939 0.8157
+vn 0.1116 -0.9796 0.1671
+vn 0.5556 0.0000 0.8314
+vn 0.5450 -0.1939 0.8157
+vn 0.1421 0.9796 0.1421
+vn 0.2155 0.9217 0.3225
+vn 0.5137 -0.3805 0.7689
+vn 0.3110 0.8286 0.4654
+vn 0.4630 -0.5528 0.6929
+vn 0.3945 0.7040 0.5904
+vn 0.3945 -0.7040 0.5904
+vn 0.4630 0.5528 0.6929
+vn 0.3110 -0.8286 0.4654
+vn 0.2155 -0.9217 0.3225
+vn 0.3539 -0.3805 0.8544
+vn 0.3189 -0.5528 0.7699
+vn 0.2717 0.7040 0.6561
+vn 0.2717 -0.7040 0.6561
+vn 0.3189 0.5528 0.7699
+vn 0.2142 -0.8286 0.5171
+vn 0.3539 0.3805 0.8544
+vn 0.1484 -0.9217 0.3583
+vn 0.3754 0.1939 0.9063
+vn 0.0769 -0.9796 0.1856
+vn 0.3827 0.0000 0.9239
+vn 0.3754 -0.1939 0.9063
+vn 0.1116 0.9796 0.1671
+vn 0.1484 0.9217 0.3583
+vn 0.2142 0.8286 0.5171
+vn 0.0392 -0.9796 0.1971
+vn 0.1951 0.0000 0.9808
+vn 0.1914 -0.1939 0.9622
+vn 0.0392 0.9796 0.1971
+vn 0.0757 0.9217 0.3804
+vn 0.1804 -0.3805 0.9070
+vn 0.1092 0.8286 0.5490
+vn 0.1626 -0.5528 0.8173
+vn 0.1385 0.7040 0.6965
+vn 0.1385 -0.7040 0.6965
+vn 0.1626 0.5528 0.8173
+vn 0.1092 -0.8286 0.5490
+vn 0.1804 0.3805 0.9070
+vn 0.0757 -0.9217 0.3804
+vn 0.1914 0.1939 0.9622
+vn 0.0000 0.7040 0.7101
+vn 0.0000 -0.7040 0.7101
+vn 0.0000 0.5528 0.8333
+vn 0.0000 -0.8286 0.5598
+vn 0.0000 0.3805 0.9247
+vn 0.0000 -0.9217 0.3879
+vn 0.0000 0.1939 0.9810
+vn 0.0000 -0.9796 0.2010
+vn 0.0000 -0.1939 0.9810
+vn 0.0000 0.9217 0.3879
+vn 0.0000 -0.3805 0.9247
+vn 0.0000 0.8286 0.5598
+vn 0.0000 -0.5528 0.8333
+vn -0.1951 0.0000 0.9808
+vn -0.1914 -0.1939 0.9622
+vn 0.0000 0.9796 0.2010
+vn -0.0757 0.9217 0.3804
+vn -0.1804 -0.3805 0.9070
+vn -0.1092 0.8286 0.5490
+vn -0.1626 -0.5528 0.8173
+vn -0.1385 0.7040 0.6965
+vn -0.1385 -0.7040 0.6965
+vn -0.1626 0.5528 0.8173
+vn -0.1092 -0.8286 0.5490
+vn -0.1804 0.3805 0.9070
+vn -0.0757 -0.9217 0.3804
+vn -0.1914 0.1939 0.9622
+vn -0.0392 -0.9796 0.1971
+vn -0.2717 -0.7040 0.6561
+vn -0.3189 0.5528 0.7699
+vn -0.2142 -0.8286 0.5171
+vn -0.3539 0.3805 0.8544
+vn -0.1484 -0.9217 0.3583
+vn -0.3754 0.1939 0.9063
+vn -0.0769 -0.9796 0.1856
+vn -0.3827 0.0000 0.9239
+vn -0.3754 -0.1939 0.9063
+vn -0.0392 0.9796 0.1971
+vn -0.1484 0.9217 0.3583
+vn -0.3539 -0.3805 0.8544
+vn -0.2142 0.8286 0.5171
+vn -0.3189 -0.5528 0.7699
+vn -0.2717 0.7040 0.6561
+vn -0.5556 0.0000 0.8314
+vn -0.5450 -0.1939 0.8157
+vn -0.1116 0.9796 0.1671
+vn -0.2155 0.9217 0.3225
+vn -0.5137 -0.3805 0.7689
+vn -0.3110 0.8286 0.4654
+vn -0.4630 -0.5528 0.6929
+vn -0.3945 0.7040 0.5904
+vn -0.3945 -0.7040 0.5904
+vn -0.4630 0.5528 0.6929
+vn -0.3110 -0.8286 0.4654
+vn -0.5137 0.3805 0.7689
+vn -0.2155 -0.9217 0.3225
+vn -0.5450 0.1939 0.8157
+vn -0.1116 -0.9796 0.1671
+vn -0.3958 -0.8286 0.3958
+vn -0.6539 0.3805 0.6539
+vn -0.2743 -0.9217 0.2743
+vn -0.6937 0.1939 0.6937
+vn -0.1421 -0.9796 0.1421
+vn -0.7071 0.0000 0.7071
+vn -0.6937 -0.1939 0.6937
+vn -0.2743 0.9217 0.2743
+vn -0.6539 -0.3805 0.6539
+vn -0.3958 0.8286 0.3958
+vn -0.5893 -0.5528 0.5893
+vn -0.5021 0.7040 0.5021
+vn -0.5021 -0.7040 0.5021
+vn -0.5893 0.5528 0.5893
+vn -0.1421 0.9796 0.1421
+vn -0.3225 0.9217 0.2155
+vn -0.7689 -0.3805 0.5137
+vn -0.4654 0.8286 0.3110
+vn -0.6929 -0.5528 0.4630
+vn -0.5904 0.7040 0.3945
+vn -0.5904 -0.7040 0.3945
+vn -0.6929 0.5528 0.4630
+vn -0.4654 -0.8286 0.3110
+vn -0.7689 0.3805 0.5137
+vn -0.3225 -0.9217 0.2155
+vn -0.8157 0.1939 0.5450
+vn -0.1671 -0.9796 0.1116
+vn -0.8314 0.0000 0.5556
+vn -0.8157 -0.1939 0.5450
+vn -0.8544 0.3805 0.3539
+vn -0.5171 -0.8286 0.2142
+vn -0.3583 -0.9217 0.1484
+vn -0.9063 0.1939 0.3754
+vn -0.1856 -0.9796 0.0769
+vn -0.9239 0.0000 0.3827
+vn -0.9063 -0.1939 0.3754
+vn -0.1671 0.9796 0.1116
+vn -0.3583 0.9217 0.1484
+vn -0.8544 -0.3805 0.3539
+vn -0.5171 0.8286 0.2142
+vn -0.7699 -0.5528 0.3189
+vn -0.6561 0.7040 0.2717
+vn -0.6561 -0.7040 0.2717
+vn -0.7699 0.5528 0.3189
+vn -0.9070 -0.3805 0.1804
+vn -0.5490 0.8286 0.1092
+vn -0.8173 -0.5528 0.1626
+vn -0.6965 0.7040 0.1385
+vn -0.6965 -0.7040 0.1385
+vn -0.8173 0.5528 0.1626
+vn -0.5490 -0.8286 0.1092
+vn -0.9070 0.3805 0.1804
+vn -0.3804 -0.9217 0.0757
+vn -0.9622 0.1939 0.1914
+vn -0.1971 -0.9796 0.0392
+vn -0.9808 0.0000 0.1951
+vn -0.9622 -0.1939 0.1914
+vn -0.1971 0.9796 0.0392
+vn -0.3804 0.9217 0.0757
+vn -0.1971 0.9796 -0.0392
+vn 0.0000 -1.0000 0.0000
+vn -0.1671 0.9796 -0.1116
+vn -0.0392 0.9796 -0.1971
+vn 0.2010 0.9796 0.0000
+vn 0.1856 0.9796 0.0769
+vn 0.0769 0.9796 0.1856
+vn -0.0769 0.9796 0.1856
+vn -0.1856 0.9796 0.0769
+vn 0.1894 0.9797 0.0658
+vn -0.9999 0.0088 0.0072
+vn 0.0050 1.0000 0.0002
+vn -0.0068 0.9999 0.0080
+vn 0.0118 0.9999 -0.0089
+vn 0.0110 0.9999 -0.0073
+vn -0.2792 0.0137 -0.9601
+vn 0.0100 0.9999 0.0089
+vn 0.0144 0.9998 -0.0082
+vn 0.0217 0.9997 0.0141
+vn 0.0139 0.9999 -0.0007
+vn 0.0162 0.9998 -0.0041
+vn 0.0374 0.9985 -0.0404
+vn 0.0040 0.9999 -0.0096
+vn -0.1075 0.9939 -0.0255
+vn -0.0039 0.9996 0.0271
+vn 0.0222 0.9997 0.0112
+vn 0.0120 0.9999 0.0055
+vn -0.0133 0.9999 -0.0046
+vn -0.9999 0.0036 0.0091
+vn 0.0092 0.9997 -0.0205
+vn -0.0089 0.9999 0.0031
+vn -0.0786 0.9969 -0.0003
+vn -0.0226 0.0389 -0.9990
+vn -0.9955 -0.0043 -0.0942
+vn 0.9994 -0.0118 0.0334
+vn 0.1155 -0.0114 0.9932
+usemtl Material.001
+s 1
+f 510/1/593 527/2/594 563/3/595
+f 516/4/596 523/5/597 562/6/598
+f 517/7/599 530/8/600 561/9/601
+f 514/10/602 531/11/603 560/12/604
+f 559/13/605 503/14/606 519/15/607
+f 558/16/608 504/17/609 534/18/610
+f 557/19/611 498/20/612 535/21/613
+f 556/22/614 502/23/615 518/24/616
+f 537/25/617 538/26/618 555/27/619
+f 529/28/620 539/29/621 554/30/622
+f 540/31/623 511/32/624 553/33/625
+f 541/34/626 542/35/627 552/36/628
+f 551/37/629 500/38/630 543/39/631
+f 544/40/632 515/41/597 550/42/633
+f 545/43/634 546/44/635 549/45/636
+f 522/46/637 547/47/638 548/48/639
+f 548/49/639 507/50/640 545/51/634
+f 503/52/606 548/53/639 545/54/634
+f 489/55/641 548/56/639 531/57/603
+f 528/58/642 546/59/635 500/60/630
+f 519/61/607 528/62/642 491/63/597
+f 519/64/607 545/65/634 549/66/636
+f 550/67/633 490/68/597 516/69/596
+f 500/70/630 550/71/633 516/72/596
+f 507/73/640 550/74/633 546/75/635
+f 541/76/626 543/77/631 506/78/643
+f 502/79/615 551/80/629 541/81/626
+f 530/82/600 528/83/642 551/84/629
+f 552/85/628 496/86/644 512/87/644
+f 518/88/616 512/89/644 487/90/645
+f 502/91/615 552/92/628 518/93/616
+f 524/94/646 511/95/624 485/96/597
+f 542/97/627 524/98/646 496/99/644
+f 542/100/627 540/101/623 553/102/625
+f 537/103/617 539/104/621 505/105/647
+f 513/106/648 537/107/617 497/108/649
+f 488/109/650 554/110/622 513/111/648
+f 555/112/619 492/113/651 508/114/652
+f 525/115/653 508/116/652 483/117/597
+f 497/118/649 555/119/619 525/120/653
+f 556/121/614 487/122/645 520/123/654
+f 538/124/618 520/125/654 492/126/651
+f 538/127/618 536/128/655 556/129/614
+f 533/130/656 535/131/613 504/132/609
+f 509/133/657 533/134/656 493/135/597
+f 484/136/658 557/137/611 509/138/657
+f 529/139/620 534/140/610 501/141/659
+f 521/142/650 529/143/620 488/144/650
+f 493/145/597 558/146/608 521/147/650
+f 559/148/605 491/149/597 517/150/599
+f 501/151/659 559/152/605 517/153/599
+f 534/154/610 532/155/660 559/156/605
+f 532/157/660 531/158/603 503/159/606
+f 504/160/609 560/161/604 532/162/660
+f 498/163/612 560/164/604 535/131/613
+f 536/165/655 530/166/600 502/167/615
+f 539/168/621 536/169/655 505/170/647
+f 501/171/659 561/172/601 539/173/621
+f 562/174/598 495/175/661 540/176/623
+f 543/177/631 540/178/623 506/179/643
+f 500/180/630 562/181/598 543/182/631
+f 563/183/595 499/184/594 544/185/632
+f 547/186/638 544/187/632 507/188/640
+f 494/189/593 563/190/595 547/191/638
+f 1337/192/662 571/193/663 572/194/664
+f 568/195/665 571/196/663 566/197/666
+f 569/198/667 568/199/665 564/200/668
+f 569/201/667 1337/202/662 572/203/664
+f 568/204/665 573/205/669 564/206/668
+f 569/207/667 576/208/670 577/209/671
+f 566/210/666 574/211/672 568/212/665
+f 1335/213/673 582/214/674 1340/215/675
+f 1336/216/676 1459/217/676 1338/218/676
+f 567/219/677 1341/220/678 580/221/679
+f 1335/222/673 577/223/671 578/224/680
+f 564/225/668 583/226/681 576/227/670
+f 575/228/682 584/229/683 587/230/684
+f 571/231/663 1345/232/685 586/233/686
+f 1394/234/687 1493/235/688 1390/236/689
+f 587/237/684 589/238/690 592/239/691
+f 1345/240/685 591/241/692 586/242/686
+f 1350/243/693 1523/244/693 1529/245/693
+f 584/246/683 591/247/692 589/248/690
+f 592/249/691 594/250/694 597/251/695
+f 591/252/692 595/253/696 596/254/697
+f 1349/255/698 598/256/699 595/257/696
+f 589/258/690 596/259/697 594/260/694
+f 597/261/695 599/262/700 602/263/701
+f 596/264/697 600/265/702 601/266/703
+f 598/267/699 600/268/702 595/269/696
+f 594/270/694 601/271/703 599/272/700
+f 599/273/700 607/274/704 602/275/701
+f 600/276/702 606/277/705 601/278/703
+f 603/279/706 605/280/707 600/281/702
+f 599/282/700 606/283/705 604/284/708
+f 607/285/704 1353/286/709 612/287/710
+f 606/288/705 1357/289/711 1351/290/712
+f 605/291/707 1355/292/713 1357/293/711
+f 604/294/708 1351/295/712 1353/296/709
+f 1352/297/714 1467/298/714 1354/299/714
+f 612/300/710 1361/301/715 617/302/716
+f 1357/303/711 1359/304/717 1351/305/712
+f 1366/306/718 1445/307/718 1363/308/718
+f 618/309/719 620/310/720 1365/311/721
+f 1361/312/715 621/313/722 619/314/723
+f 617/315/716 619/316/723 622/317/724
+f 1359/318/717 620/319/720 621/320/722
+f 573/321/669 627/322/725 583/323/681
+f 612/324/710 632/325/726 607/326/704
+f 592/327/691 630/328/727 629/329/728
+f 617/330/716 633/331/729 612/332/710
+f 573/333/669 1367/334/730 1369/335/731
+f 607/336/704 631/337/732 602/338/701
+f 574/339/672 626/340/733 1367/341/730
+f 592/342/691 628/343/734 587/344/684
+f 622/345/724 634/346/735 617/347/716
+f 602/348/701 630/349/727 597/350/695
+f 631/351/732 644/352/736 643/353/737
+f 628/354/734 641/355/738 640/356/739
+f 1367/357/730 638/358/740 1371/359/741
+f 632/360/726 645/361/742 644/362/736
+f 629/363/728 642/364/743 641/365/738
+f 627/366/725 1373/367/744 639/368/745
+f 633/369/729 646/370/746 645/371/742
+f 630/372/727 643/373/737 642/374/743
+f 626/375/733 640/376/739 638/377/740
+f 634/378/735 647/379/747 646/380/746
+f 1372/381/748 1496/382/749 1368/383/750
+f 1373/384/744 649/385/751 648/386/752
+f 644/387/736 655/388/753 643/389/737
+f 640/390/739 653/391/754 652/392/755
+f 1371/393/741 650/394/756 649/395/751
+f 645/396/742 656/397/757 644/398/736
+f 641/399/738 654/400/758 653/401/754
+f 639/402/745 648/403/752 651/404/759
+f 645/405/742 658/406/760 657/407/761
+f 642/408/743 655/409/753 654/410/758
+f 638/411/740 652/412/755 650/413/756
+f 646/414/746 659/415/762 658/416/760
+f 658/417/760 1375/418/763 1377/419/764
+f 648/420/752 661/421/765 660/422/766
+f 655/423/753 668/424/767 667/425/768
+f 652/426/755 665/427/769 664/428/770
+f 649/429/751 662/430/771 661/431/765
+f 657/432/761 668/433/767 656/434/757
+f 653/435/754 666/436/772 665/437/769
+f 651/438/759 660/439/766 663/440/773
+f 657/441/761 1377/442/764 669/443/774
+f 654/444/758 667/445/768 666/446/772
+f 650/447/756 664/448/770 662/449/771
+f 1382/450/775 1477/451/775 1379/452/775
+f 660/453/766 673/454/776 672/455/777
+f 667/456/768 680/457/778 679/458/779
+f 664/459/770 677/460/780 676/461/781
+f 661/462/765 674/463/782 673/464/776
+f 668/465/767 681/466/783 680/467/778
+f 665/468/769 678/469/784 677/470/780
+f 663/471/773 672/472/777 675/473/785
+f 669/474/774 1381/475/786 681/476/783
+f 666/477/772 679/478/779 678/479/784
+f 662/480/771 676/481/781 674/482/782
+f 683/483/787 694/484/788 1381/485/786
+f 673/486/776 684/487/789 672/488/777
+f 680/489/778 691/490/790 679/491/779
+f 677/492/780 1387/493/791 676/494/781
+f 674/495/782 685/496/792 673/497/776
+f 681/498/783 692/499/793 680/500/778
+f 678/501/784 689/502/794 677/503/780
+f 672/504/777 687/505/795 675/506/785
+f 1381/507/786 693/508/796 681/509/783
+f 679/510/779 690/511/797 678/512/784
+f 690/513/797 1385/514/798 702/515/799
+f 566/516/666 586/517/686 584/518/683
+f 694/519/788 707/520/800 706/521/801
+f 684/522/789 697/523/802 696/524/803
+f 691/525/790 1383/526/804 1385/527/798
+f 1387/528/791 701/529/805 1389/530/806
+f 685/531/792 1393/532/807 697/533/802
+f 692/534/793 705/535/808 1383/536/804
+f 689/537/794 702/538/799 701/539/805
+f 687/540/795 696/541/803 699/542/809
+f 693/543/796 706/544/801 705/545/808
+f 702/546/799 1399/547/810 714/548/811
+f 1393/549/807 712/550/812 710/551/813
+f 706/552/801 719/553/814 718/554/815
+f 696/555/803 709/556/816 708/557/817
+f 1400/558/818 1437/559/818 1397/560/818
+f 1389/561/806 713/562/819 712/563/812
+f 697/564/802 710/565/813 709/566/816
+f 1383/567/804 717/568/820 1398/569/821
+f 702/570/799 713/571/819 701/572/805
+f 699/573/809 708/574/817 711/575/822
+f 705/576/808 718/577/815 717/578/820
+f 717/579/820 730/580/823 729/581/824
+f 1399/582/810 726/583/825 714/584/811
+f 712/585/812 722/586/826 710/587/813
+f 718/588/815 731/589/827 730/590/823
+f 708/591/817 1401/592/828 1403/593/829
+f 1398/594/821 727/595/830 1399/596/810
+f 713/597/819 724/598/831 712/599/812
+f 709/600/816 722/601/826 1401/602/828
+f 1398/603/821 729/604/824 728/605/832
+f 714/606/811 725/607/833 713/608/819
+f 708/609/817 723/610/834 711/611/822
+f 1403/612/829 735/613/835 723/614/834
+f 730/615/823 741/616/836 729/617/824
+f 726/618/825 739/619/837 738/620/838
+f 567/621/677 1343/622/839 1345/623/685
+f 730/624/823 743/625/840 742/626/841
+f 1407/627/842 1507/628/842 1405/629/842
+f 727/630/830 740/631/843 739/632/837
+f 724/633/831 737/634/844 736/635/845
+f 1401/636/828 734/637/846 1406/638/847
+f 728/639/832 741/640/836 740/641/843
+f 725/642/833 738/643/838 737/644/844
+f 735/645/835 744/646/848 747/647/849
+f 739/648/837 750/649/850 738/650/838
+f 736/651/845 746/652/851 734/653/846
+f 743/654/840 754/655/852 742/656/841
+f 1408/657/853 745/658/854 744/659/848
+f 740/660/843 751/661/855 739/662/837
+f 736/663/845 749/664/856 748/665/857
+f 1406/666/847 746/667/851 745/668/854
+f 741/669/836 752/670/858 740/671/843
+f 738/672/838 749/673/856 737/674/844
+f 749/675/856 763/676/859 1413/677/860
+f 744/678/848 759/679/861 747/680/849
+f 753/681/862 1417/682/863 1419/683/864
+f 751/684/855 763/685/859 750/686/850
+f 722/687/826 736/688/845 734/689/846
+f 754/690/852 768/691/865 1417/692/863
+f 744/693/848 1409/694/866 1411/695/867
+f 751/696/855 765/697/868 764/698/869
+f 748/699/857 1413/700/860 1415/701/870
+f 745/702/854 758/703/871 1409/704/866
+f 753/705/862 765/706/868 752/707/858
+f 763/708/859 1425/709/872 1413/710/860
+f 1411/711/867 772/712/873 759/713/861
+f 1430/714/874 1482/715/874 1418/716/874
+f 764/717/869 775/718/875 763/719/859
+f 748/720/857 760/721/876 746/722/851
+f 1417/723/863 780/724/877 1429/725/878
+f 1412/726/879 1456/727/879 1424/728/879
+f 764/729/869 777/730/880 776/731/881
+f 1428/732/882 1514/733/882 1518/734/882
+f 758/735/871 1421/736/883 1409/737/866
+f 1419/738/864 777/739/880 765/740/868
+f 1431/741/884 789/742/885 777/743/880
+f 775/744/875 786/745/886 1425/746/872
+f 1423/747/887 784/748/888 772/749/873
+f 1429/750/878 790/751/889 1431/752/884
+f 775/753/875 788/754/890 787/755/891
+f 1427/756/892 783/757/893 771/758/894
+f 780/759/877 791/760/895 1429/761/878
+f 1423/762/887 782/763/896 781/764/897
+f 776/765/881 789/766/885 788/767/890
+f 1427/768/892 786/769/886 785/770/898
+f 771/771/894 782/772/896 1421/773/883
+f 1433/774/899 1440/775/900 1435/776/901
+f 1384/777/902 1436/778/902 1386/779/902
+f 715/780/903 794/781/903 796/782/903
+f 704/783/904 795/784/904 793/785/904
+f 1441/786/905 1448/787/906 1443/788/907
+f 1356/789/908 799/790/908 1442/791/908
+f 615/792/909 1444/793/909 800/794/909
+f 613/795/910 798/796/910 610/797/910
+f 1451/798/911 1453/799/912 1455/800/913
+f 1422/801/914 1450/802/914 1410/803/914
+f 770/804/915 804/805/915 803/806/915
+f 756/807/916 801/808/916 802/809/916
+f 741/810/836 754/811/852 753/812/862
+f 1460/813/917 1461/814/918 1463/815/919
+f 581/816/920 806/817/920 1464/818/920
+f 565/819/921 1462/820/921 805/821/921
+f 1342/822/922 807/823/922 1339/824/922
+f 1468/825/923 1469/826/924 1471/827/925
+f 1362/828/926 1470/829/926 1360/830/926
+f 614/831/927 810/832/927 812/833/927
+f 611/834/928 811/835/928 809/836/928
+f 1475/837/929 1478/838/930 1480/839/931
+f 671/840/932 1476/841/932 1378/842/932
+f 682/843/933 814/844/933 816/845/933
+f 1376/846/934 815/847/934 813/848/934
+f 1481/849/935 1487/850/936 1483/851/937
+f 1420/852/938 1488/853/938 1432/854/938
+f 779/855/939 820/856/939 819/857/939
+f 766/858/940 817/859/940 818/860/940
+f 1491/861/941 1494/862/942 1396/863/943
+f 1415/864/870 771/865/894 760/866/876
+f 700/867/944 1490/868/944 1388/869/944
+f 1497/870/945 1499/871/946 1501/872/947
+f 637/873/948 1502/874/949 827/875/950
+f 625/876/951 1498/877/951 1370/878/951
+f 636/879/952 826/880/952 828/881/952
+f 1505/882/953 1508/883/954 1510/884/955
+f 1402/885/956 1506/886/956 1404/887/956
+f 721/888/957 831/889/957 829/890/957
+f 732/891/958 830/892/958 832/893/958
+f 1511/894/959 1517/895/960 1513/896/961
+f 773/897/962 1516/898/962 1426/899/962
+f 1414/900/963 834/901/963 761/902/963
+f 762/903/964 835/904/964 833/905/964
+f 1520/906/965 1536/907/965 1532/908/965
+f 585/909/693 1519/910/693 1522/911/693
+f 593/912/693 1528/913/693 1525/914/693
+f 1344/915/693 1527/916/693 1521/917/693
+f 1531/918/966 1537/919/967 1533/920/968
+f 839/921/969 1538/922/970 843/923/971
+f 1524/924/972 844/925/973 840/926/974
+f 837/927/975 842/928/975 838/929/975
+f 575/930/682 628/931/734 626/932/733
+f 676/933/781 1391/934/976 674/935/782
+f 1392/936/977 821/937/978 1492/938/979
+f 686/939/980 824/940/981 698/941/982
+f 850/942/983 864/943/984 865/944/985
+f 858/945/986 872/946/987 873/947/988
+f 850/948/983 866/949/989 851/950/990
+f 859/951/991 873/952/988 874/953/992
+f 851/954/990 867/955/993 852/956/994
+f 852/957/994 868/958/995 853/959/996
+f 845/960/997 861/961/998 846/962/999
+f 854/963/1000 868/964/995 869/965/1001
+f 846/966/999 862/967/1002 847/968/1003
+f 854/969/1000 870/970/1004 855/971/1005
+f 847/972/1003 863/973/1006 848/974/1007
+f 856/975/1008 870/976/1004 871/977/1009
+f 849/978/1010 863/979/1006 864/980/984
+f 857/981/1011 871/982/1009 872/983/987
+f 863/984/1006 879/985/1012 864/986/984
+f 872/987/987 886/988/1013 887/989/1014
+f 865/990/985 879/991/1012 880/992/1015
+f 873/993/988 887/994/1014 888/995/1016
+f 865/996/985 881/997/1017 866/998/989
+f 873/999/988 889/1000/1018 874/1001/992
+f 866/1002/989 882/1003/1019 867/1004/993
+f 868/1005/995 882/1006/1019 883/1007/1020
+f 861/1008/998 875/1009/1021 876/1010/1022
+f 868/1011/995 884/1012/1023 869/1013/1001
+f 861/1014/998 877/1015/1024 862/1016/1002
+f 869/1017/1001 885/1018/1025 870/1019/1004
+f 862/1020/1002 878/1021/1026 863/1022/1006
+f 871/1023/1009 885/1024/1025 886/1025/1013
+f 883/1026/1020 897/1027/1027 898/1028/1028
+f 875/1029/1021 891/1030/1029 876/1031/1022
+f 883/1032/1020 899/1033/1030 884/1034/1023
+f 877/1035/1024 891/1036/1029 892/1037/1031
+f 885/1038/1025 899/1039/1030 900/1040/1032
+f 878/1041/1026 892/1042/1031 893/1043/1033
+f 886/1044/1013 900/1045/1032 901/1046/1034
+f 878/1047/1026 894/1048/1035 879/1049/1012
+f 886/1050/1013 902/1051/1036 887/1052/1014
+f 879/1053/1012 895/1054/1037 880/1055/1015
+f 888/1056/1016 902/1057/1036 903/1058/1038
+f 880/1059/1015 896/1060/1039 881/1061/1017
+f 889/1062/1018 903/1063/1038 904/1064/1040
+f 881/1065/1017 897/1066/1027 882/1067/1019
+f 901/1068/1034 917/1069/1041 902/1070/1036
+f 895/1071/1037 909/1072/1042 910/1073/1043
+f 902/1074/1036 918/1075/1044 903/1076/1038
+f 895/1077/1037 911/1078/1045 896/1079/1039
+f 904/1080/1040 918/1081/1044 919/1082/1046
+f 897/1083/1027 911/1084/1045 912/1085/1047
+f 897/1086/1027 913/1087/1048 898/1088/1028
+f 891/1089/1029 905/1090/1049 906/1091/1050
+f 899/1092/1030 913/1093/1048 914/1094/1051
+f 891/1095/1029 907/1096/1052 892/1097/1031
+f 900/1098/1032 914/1099/1051 915/1100/1053
+f 892/1101/1031 908/1102/1054 893/1103/1033
+f 900/1104/1032 916/1105/1055 901/1106/1034
+f 894/1107/1035 908/1108/1054 909/1109/1042
+f 905/1110/1049 921/1111/1056 906/1112/1050
+f 914/1113/1051 928/1114/1057 929/1115/1058
+f 906/1116/1050 922/1117/1059 907/1118/1052
+f 915/1119/1053 929/1120/1058 930/1121/1060
+f 907/1122/1052 923/1123/1061 908/1124/1054
+f 915/1125/1053 931/1126/1062 916/1127/1055
+f 908/1128/1054 924/1129/1063 909/1130/1042
+f 917/1131/1041 931/1132/1062 932/1133/1064
+f 910/1134/1043 924/1135/1063 925/1136/1065
+f 917/1137/1041 933/1138/1066 918/1139/1044
+f 911/1140/1045 925/1141/1065 926/1142/1067
+f 919/1143/1046 933/1144/1066 934/1145/1068
+f 912/1146/1047 926/1147/1067 927/1148/1069
+f 912/1149/1047 928/1150/1057 913/1151/1048
+f 924/1152/1063 940/1153/1070 925/1154/1065
+f 932/1155/1064 948/1156/1071 933/1157/1066
+f 926/1158/1067 940/1159/1070 941/1160/1072
+f 934/1161/1068 948/1162/1071 949/1163/1073
+f 926/1164/1067 942/1165/1074 927/1166/1069
+f 928/1167/1057 942/1168/1074 943/1169/1075
+f 920/1170/1076 936/1171/1077 921/1172/1056
+f 928/1173/1057 944/1174/1078 929/1175/1058
+f 921/1176/1056 937/1177/1079 922/1178/1059
+f 930/1179/1060 944/1180/1078 945/1181/1080
+f 922/1182/1059 938/1183/1081 923/1184/1061
+f 930/1185/1060 946/1186/1082 931/1187/1062
+f 923/1188/1061 939/1189/1083 924/1190/1063
+f 931/1191/1062 947/1192/1084 932/1193/1064
+f 943/1194/1075 959/1195/1085 944/1196/1078
+f 936/1197/1077 952/1198/1086 937/1199/1079
+f 944/1200/1078 960/1201/1087 945/1202/1080
+f 938/1203/1081 952/1204/1086 953/1205/1088
+f 945/1206/1080 961/1207/1089 946/1208/1082
+f 939/1209/1083 953/1210/1088 954/1211/1090
+f 946/1212/1082 962/1213/1091 947/1214/1084
+f 939/1215/1083 955/1216/1092 940/1217/1070
+f 948/1218/1071 962/1219/1091 963/1220/1093
+f 940/1221/1070 956/1222/1094 941/1223/1072
+f 949/1224/1073 963/1225/1093 964/1226/1095
+f 941/1227/1072 957/1228/1096 942/1229/1074
+f 943/1230/1075 957/1231/1096 958/1232/1097
+f 935/1233/1098 951/1234/1099 936/1235/1077
+f 963/1236/1093 977/1237/1100 978/1238/1101
+f 956/1239/1094 970/1240/1102 971/1241/1103
+f 963/1242/1093 979/1243/1104 964/1244/1095
+f 956/1245/1094 972/1246/1105 957/1247/1096
+f 958/1248/1097 972/1249/1105 973/1250/1106
+f 951/1251/1099 965/1252/1107 966/1253/1108
+f 958/1254/1097 974/1255/1109 959/1256/1085
+f 951/1257/1099 967/1258/1110 952/1259/1086
+f 959/1260/1085 975/1261/1111 960/1262/1087
+f 952/1263/1086 968/1264/1112 953/1265/1088
+f 960/1266/1087 976/1267/1113 961/1268/1089
+f 954/1269/1090 968/1270/1112 969/1271/1114
+f 962/1272/1091 976/1273/1113 977/1274/1100
+f 954/1275/1090 970/1276/1102 955/1277/1092
+f 974/1278/1109 990/1279/1115 975/1280/1111
+f 968/1281/1112 982/1282/1116 983/1283/1117
+f 976/1284/1113 990/1285/1115 991/1286/1118
+f 968/1287/1112 984/1288/1119 969/1289/1114
+f 977/1290/1100 991/1291/1118 992/1292/1120
+f 970/1293/1102 984/1294/1119 985/1295/1121
+f 977/1296/1100 993/1297/1122 978/1298/1101
+f 971/1299/1103 985/1300/1121 986/1301/1123
+f 979/1302/1104 993/1303/1122 994/1304/1124
+f 972/1305/1105 986/1306/1123 987/1307/1125
+f 973/1308/1106 987/1309/1125 988/1310/1126
+f 966/1311/1108 980/1312/1127 981/1313/1128
+f 973/1314/1106 989/1315/1129 974/1316/1109
+f 966/1317/1108 982/1318/1116 967/1319/1110
+f 994/1320/1124 1008/1321/1130 1009/1322/1131
+f 986/1323/1123 1002/1324/1132 987/1325/1125
+f 987/1326/1125 1003/1327/1133 988/1328/1126
+f 980/1329/1127 996/1330/1134 981/1331/1128
+f 988/1332/1126 1004/1333/1135 989/1334/1129
+f 981/1335/1128 997/1336/1136 982/1337/1116
+f 989/1338/1129 1005/1339/1137 990/1340/1115
+f 982/1341/1116 998/1342/1138 983/1343/1117
+f 991/1344/1118 1005/1345/1137 1006/1346/1139
+f 983/1347/1117 999/1348/1140 984/1349/1119
+f 992/1350/1120 1006/1351/1139 1007/1352/1141
+f 985/1353/1121 999/1354/1140 1000/1355/1142
+f 993/1356/1122 1007/1357/1141 1008/1358/1130
+f 986/1359/1123 1000/1360/1142 1001/1361/1143
+f 997/1362/1136 1013/1363/1144 998/1364/1138
+f 1005/1365/1137 1021/1366/1145 1006/1367/1139
+f 998/1368/1138 1014/1369/1146 999/1370/1140
+f 1007/1371/1141 1021/1372/1145 1022/1373/1147
+f 1000/1374/1142 1014/1375/1146 1015/1376/1148
+f 1007/1377/1141 1023/1378/1149 1008/1379/1130
+f 1000/1380/1142 1016/1381/1150 1001/1382/1143
+f 1009/1383/1131 1023/1384/1149 1024/1385/1151
+f 1001/1386/1143 1017/1387/1152 1002/1388/1132
+f 1003/1389/1133 1017/1390/1152 1018/1391/1153
+f 995/1392/1154 1011/1393/1155 996/1394/1134
+f 1003/1395/1133 1019/1396/1156 1004/1397/1135
+f 997/1398/1136 1011/1399/1155 1012/1400/1157
+f 1005/1401/1137 1019/1402/1156 1020/1403/1158
+f 1017/1404/1152 1031/1405/1159 1032/1406/1160
+f 1017/1407/1152 1033/1408/1161 1018/1409/1153
+f 1010/1410/1162 1026/1411/1163 1011/1412/1155
+f 1018/1413/1153 1034/1414/1164 1019/1415/1156
+f 1012/1416/1157 1026/1417/1163 1027/1418/1165
+f 1020/1419/1158 1034/1420/1164 1035/1421/1166
+f 1012/1422/1157 1028/1423/1167 1013/1424/1144
+f 1020/1425/1158 1036/1426/1168 1021/1427/1145
+f 1013/1428/1144 1029/1429/1169 1014/1430/1146
+f 1022/1431/1147 1036/1432/1168 1037/1433/1170
+f 1014/1434/1146 1030/1435/1171 1015/1436/1148
+f 1023/1437/1149 1037/1438/1170 1038/1439/1172
+f 1016/1440/1150 1030/1441/1171 1031/1442/1159
+f 1023/1443/1149 1039/1444/1173 1024/1445/1151
+f 1035/1446/1166 1051/1447/1174 1036/1448/1168
+f 1029/1449/1169 1043/1450/1175 1044/1451/1176
+f 1036/1452/1168 1052/1453/1177 1037/1454/1170
+f 1029/1455/1169 1045/1456/1178 1030/1457/1171
+f 1038/1458/1172 1052/1459/1177 1053/1460/1179
+f 1031/1461/1159 1045/1462/1178 1046/1463/1180
+f 1038/1464/1172 1054/1465/1181 1039/1466/1173
+f 1031/1467/1159 1047/1468/1182 1032/1469/1160
+f 1033/1470/1161 1047/1471/1182 1048/1472/1183
+f 1025/1473/1184 1041/1474/1185 1026/1475/1163
+f 1033/1476/1161 1049/1477/1186 1034/1478/1164
+f 1026/1479/1163 1042/1480/1187 1027/1481/1165
+f 1035/1482/1166 1049/1483/1186 1050/1484/1188
+f 1028/1485/1167 1042/1486/1187 1043/1487/1175
+f 1047/1488/1182 1063/1489/1189 1048/1490/1183
+f 1040/1491/1190 1056/1492/1191 1041/1493/1185
+f 1048/1494/1183 1064/1495/1192 1049/1496/1186
+f 1041/1497/1185 1057/1498/1193 1042/1499/1187
+f 1050/1500/1188 1064/1501/1192 1065/1502/1194
+f 1042/1503/1187 1058/1504/1195 1043/1505/1175
+f 1051/1506/1174 1065/1507/1194 1066/1508/1196
+f 1044/1509/1176 1058/1510/1195 1059/1511/1197
+f 1052/1512/1177 1066/1513/1196 1067/1514/1198
+f 1044/1515/1176 1060/1516/1199 1045/1517/1178
+f 1052/1518/1177 1068/1519/1200 1053/1520/1179
+f 1046/1521/1180 1060/1522/1199 1061/1523/1201
+f 1054/1524/1181 1068/1525/1200 1069/1526/1202
+f 1047/1527/1182 1061/1528/1201 1062/1529/1203
+f 1059/1530/1197 1073/1531/1204 1074/1532/1205
+f 1066/1533/1196 1082/1534/1206 1067/1535/1198
+f 1059/1536/1197 1075/1537/1207 1060/1538/1199
+f 1067/1539/1198 1083/1540/1208 1068/1541/1200
+f 1061/1542/1201 1075/1543/1207 1076/1544/1209
+f 1068/1545/1200 1084/1546/1210 1069/1547/1202
+f 1062/1548/1203 1076/1549/1209 1077/1550/1211
+f 1062/1551/1203 1078/1552/1212 1063/1553/1189
+f 1055/1554/1213 1071/1555/1214 1056/1556/1191
+f 1063/1557/1189 1079/1558/1215 1064/1559/1192
+f 1056/1560/1191 1072/1561/1216 1057/1562/1193
+f 1065/1563/1194 1079/1564/1215 1080/1565/1217
+f 1057/1566/1193 1073/1567/1204 1058/1568/1195
+f 1066/1569/1196 1080/1570/1217 1081/1571/1218
+f 1077/1572/1211 1093/1573/1219 1078/1574/1212
+f 1070/1575/1220 1086/1576/1221 1071/1577/1214
+f 1078/1578/1212 1094/1579/1222 1079/1580/1215
+f 1072/1581/1216 1086/1582/1221 1087/1583/1223
+f 1080/1584/1217 1094/1585/1222 1095/1586/1224
+f 1072/1587/1216 1088/1588/1225 1073/1589/1204
+f 1081/1590/1218 1095/1591/1224 1096/1592/1226
+f 1074/1593/1205 1088/1594/1225 1089/1595/1227
+f 1082/1596/1206 1096/1597/1226 1097/1598/1228
+f 1075/1599/1207 1089/1600/1227 1090/1601/1229
+f 1083/1602/1208 1097/1603/1228 1098/1604/1230
+f 1076/1605/1209 1090/1606/1229 1091/1607/1231
+f 1083/1608/1208 1099/1609/1232 1084/1610/1210
+f 1077/1611/1211 1091/1612/1231 1092/1613/1233
+f 1097/1614/1228 1111/1615/1234 1112/1616/1235
+f 1089/1617/1227 1105/1618/1236 1090/1619/1229
+f 1097/1620/1228 1113/1621/1237 1098/1622/1230
+f 1091/1623/1231 1105/1624/1236 1106/1625/1238
+f 1099/1626/1232 1113/1627/1237 1114/1628/1239
+f 1091/1629/1231 1107/1630/1240 1092/1631/1233
+f 1093/1632/1219 1107/1633/1240 1108/1634/1241
+f 1086/1635/1221 1100/1636/1242 1101/1637/1243
+f 1093/1638/1219 1109/1639/1244 1094/1640/1222
+f 1086/1641/1221 1102/1642/1245 1087/1643/1223
+f 1095/1644/1224 1109/1645/1244 1110/1646/1246
+f 1088/1647/1225 1102/1648/1245 1103/1649/1247
+f 1095/1650/1224 1111/1651/1234 1096/1652/1226
+f 1089/1653/1227 1103/1654/1247 1104/1655/1248
+f 1108/1656/1241 1124/1657/1249 1109/1658/1244
+f 1101/1659/1243 1117/1660/1250 1102/1661/1245
+f 1110/1662/1246 1124/1663/1249 1125/1664/1251
+f 1102/1665/1245 1118/1666/1252 1103/1667/1247
+f 1110/1668/1246 1126/1669/1253 1111/1670/1234
+f 1103/1671/1247 1119/1672/1254 1104/1673/1248
+f 1111/1674/1234 1127/1675/1255 1112/1676/1235
+f 1104/1677/1248 1120/1678/1256 1105/1679/1236
+f 1113/1680/1237 1127/1681/1255 1128/1682/1257
+f 1106/1683/1238 1120/1684/1256 1121/1685/1258
+f 1114/1686/1239 1128/1687/1257 1129/1688/1259
+f 1107/1689/1240 1121/1690/1258 1122/1691/1260
+f 1107/1692/1240 1123/1693/1261 1108/1694/1241
+f 1100/1695/1242 1116/1696/1262 1101/1697/1243
+f 1128/1698/1257 1142/1699/1263 1143/1700/1264
+f 1121/1701/1258 1135/1702/1265 1136/1703/1266
+f 1128/1704/1257 1144/1705/1267 1129/1706/1259
+f 1122/1707/1260 1136/1708/1266 1137/1709/1268
+f 1122/1710/1260 1138/1711/1269 1123/1712/1261
+f 1116/1713/1262 1130/1714/1270 1131/1715/1271
+f 1123/1716/1261 1139/1717/1272 1124/1718/1249
+f 1117/1719/1250 1131/1720/1271 1132/1721/1273
+f 1125/1722/1251 1139/1723/1272 1140/1724/1274
+f 1118/1725/1252 1132/1726/1273 1133/1727/1275
+f 1125/1728/1251 1141/1729/1276 1126/1730/1253
+f 1119/1731/1254 1133/1732/1275 1134/1733/1277
+f 1126/1734/1253 1142/1735/1263 1127/1736/1255
+f 1119/1737/1254 1135/1738/1265 1120/1739/1256
+f 1131/1740/1271 1147/1741/1278 1132/1742/1273
+f 1140/1743/1274 1154/1744/1279 1155/1745/1280
+f 1133/1746/1275 1147/1747/1278 1148/1748/1281
+f 1140/1749/1274 1156/1750/1282 1141/1751/1276
+f 1134/1752/1277 1148/1753/1281 1149/1754/1283
+f 1141/1755/1276 1157/1756/1284 1142/1757/1263
+f 1134/1758/1277 1150/1759/1285 1135/1760/1265
+f 1142/1761/1263 1158/1762/1286 1143/1763/1264
+f 1136/1764/1266 1150/1765/1285 1151/1766/1287
+f 1143/1767/1264 1159/1768/1288 1144/1769/1267
+f 1137/1770/1268 1151/1771/1287 1152/1772/1289
+f 1137/1773/1268 1153/1774/1290 1138/1775/1269
+f 1130/1776/1270 1146/1777/1291 1131/1778/1271
+f 1138/1779/1269 1154/1780/1279 1139/1781/1272
+f 1151/1782/1287 1165/1783/1292 1166/1784/1293
+f 1158/1785/1286 1174/1786/1294 1159/1787/1288
+f 1152/1788/1289 1166/1789/1293 1167/1790/1295
+f 1152/1791/1289 1168/1792/1296 1153/1793/1290
+f 1145/1794/1297 1161/1795/1298 1146/1796/1291
+f 1153/1797/1290 1169/1798/1299 1154/1799/1279
+f 1147/1800/1278 1161/1801/1298 1162/1802/1300
+f 1155/1803/1280 1169/1804/1299 1170/1805/1301
+f 1147/1806/1278 1163/1807/1302 1148/1808/1281
+f 1155/1809/1280 1171/1810/1303 1156/1811/1282
+f 1149/1812/1283 1163/1813/1302 1164/1814/1304
+f 1157/1815/1284 1171/1816/1303 1172/1817/1305
+f 1149/1818/1283 1165/1819/1292 1150/1820/1285
+f 1158/1821/1286 1172/1822/1305 1173/1823/1306
+f 1170/1824/1301 1185/1825/1307 1186/1826/1308
+f 1162/1827/1300 1179/1828/1309 1163/1829/1302
+f 1171/1830/1303 1186/1831/1308 1187/1832/1310
+f 1164/1833/1304 1179/1834/1309 1180/1835/1311
+f 1171/1836/1303 1188/1837/1312 1172/1838/1305
+f 1165/1839/1292 1180/1840/1311 1181/1841/1313
+f 1172/1842/1305 1189/1843/1314 1173/1844/1306
+f 1166/1845/1293 1181/1846/1313 1182/1847/1315
+f 1174/1848/1294 1189/1849/1314 1190/1850/1316
+f 1167/1851/1295 1182/1852/1315 1183/1853/1317
+f 1167/1854/1295 1184/1855/1318 1168/1856/1296
+f 1160/1857/1319 1177/1858/1320 1161/1859/1298
+f 1168/1860/1296 1185/1861/1307 1169/1862/1299
+f 1161/1863/1298 1178/1864/1321 1162/1865/1300
+f 1189/1866/1314 1205/1867/1322 1190/1868/1316
+f 1182/1869/1315 1198/1870/1323 1183/1871/1317
+f 1183/1872/1317 1199/1873/1324 1184/1874/1318
+f 1177/1875/1320 1191/1876/1325 1192/1877/1326
+f 1184/1878/1318 1200/1879/1327 1185/1880/1307
+f 1178/1881/1321 1192/1882/1326 1193/1883/1328
+f 1186/1884/1308 1200/1885/1327 1201/1886/1329
+f 1179/1887/1309 1193/1888/1328 1194/1889/1330
+f 1187/1890/1310 1201/1891/1329 1202/1892/1331
+f 1180/1893/1311 1194/1894/1330 1195/1895/1332
+f 1187/1896/1310 1203/1897/1333 1188/1898/1312
+f 1180/1899/1311 1196/1900/1334 1181/1901/1313
+f 1188/1902/1312 1204/1903/1335 1189/1904/1314
+f 1182/1905/1315 1196/1906/1334 1197/1907/1336
+f 1193/1908/1328 1209/1909/1337 1194/1910/1330
+f 1201/1911/1329 1217/1912/1338 1202/1913/1331
+f 1194/1914/1330 1210/1915/1339 1195/1916/1332
+f 1203/1917/1333 1217/1918/1338 1218/1919/1340
+f 1195/1920/1332 1211/1921/1341 1196/1922/1334
+f 1204/1923/1335 1218/1924/1340 1219/1925/1342
+f 1197/1926/1336 1211/1927/1341 1212/1928/1343
+f 1205/1929/1322 1219/1930/1342 1220/1931/1344
+f 1198/1932/1323 1212/1933/1343 1213/1934/693
+f 1199/1935/1324 1213/1936/693 1214/1937/1345
+f 1191/1938/1325 1207/1939/1346 1192/1940/1326
+f 1199/1941/1324 1215/1942/1347 1200/1943/1327
+f 1193/1944/1328 1207/1945/1346 1208/1946/1348
+f 1201/1947/1329 1215/1948/1347 1216/1949/1349
+f 1212/1950/1343 1228/1951/1350 1213/1952/693
+f 1213/1953/693 1229/1954/1351 1214/1955/1345
+f 1206/1956/1352 1222/1957/1353 1207/1958/1346
+f 1214/1959/1345 1230/1960/1354 1215/1961/1347
+f 1207/1962/1346 1223/1963/1355 1208/1964/1348
+f 1216/1965/1349 1230/1966/1354 1231/1967/1356
+f 1208/1968/1348 1224/1969/1357 1209/1970/1337
+f 1217/1971/1338 1231/1972/1356 1232/1973/1358
+f 1209/1974/1337 1225/1975/1359 1210/1976/1339
+f 1217/1977/1338 1233/1978/1360 1218/1979/1340
+f 1211/1980/1341 1225/1981/1359 1226/1982/1361
+f 1218/1983/1340 1234/1984/1362 1219/1985/1342
+f 1212/1986/1343 1226/1987/1361 1227/1988/1363
+f 1219/1989/1342 1235/1990/1364 1220/1991/1344
+f 1231/1992/1356 1247/1993/1365 1232/1994/1358
+f 1224/1995/1357 1240/1996/1366 1225/1997/1359
+f 1232/1998/1358 1248/1999/1367 1233/2000/1360
+f 1225/2001/1359 1241/2002/1368 1226/2003/1361
+f 1233/2004/1360 1249/2005/1369 1234/2006/1362
+f 1227/2007/1363 1241/2008/1368 1242/2009/1370
+f 1234/2010/1362 1250/2011/1371 1235/2012/1364
+f 1227/2013/1363 1243/2014/1372 1228/2015/1350
+f 1228/2016/1350 1244/2017/1373 1229/2018/1351
+f 1221/2019/1374 1237/2020/1375 1222/2021/1353
+f 1229/2022/1351 1245/2023/1376 1230/2024/1354
+f 1222/2025/1353 1238/2026/1377 1223/2027/1355
+f 1231/2028/1356 1245/2029/1376 1246/2030/1378
+f 1223/2031/1355 1239/2032/1379 1224/2033/1357
+f 1244/2034/1373 1258/2035/1380 1259/2036/1381
+f 1237/2037/1375 1251/2038/1382 1252/2039/1383
+f 1244/2040/1373 1260/2041/1384 1245/2042/1376
+f 1237/2043/1375 1253/2044/1385 1238/2045/1377
+f 1246/2046/1378 1260/2047/1384 1261/2048/1386
+f 1239/2049/1379 1253/2050/1385 1254/2051/1387
+f 1247/2052/1365 1261/2053/1386 1262/2054/1388
+f 1239/2055/1379 1255/2056/1389 1240/2057/1366
+f 1248/2058/1367 1262/2059/1388 1263/2060/1390
+f 1240/2061/1366 1256/2062/1391 1241/2063/1368
+f 1249/2064/1369 1263/2065/1390 1264/2066/1392
+f 1242/2067/1370 1256/2068/1391 1257/2069/1393
+f 1250/2070/1371 1264/2071/1392 1265/2072/1394
+f 1242/2073/1370 1258/2074/1380 1243/2075/1372
+f 1262/2076/1388 1278/2077/1395 1263/2078/1390
+f 1255/2079/1389 1271/2080/1396 1256/2081/1391
+f 1264/2082/1392 1278/2083/1395 1279/2084/1397
+f 1257/2085/1393 1271/2086/1396 1272/2087/1398
+f 1264/2088/1392 1280/2089/1399 1265/2090/1394
+f 1258/2091/1380 1272/2092/1398 1273/2093/1400
+f 1258/2094/1380 1274/2095/1401 1259/2096/1381
+f 1251/2097/1382 1267/2098/1402 1252/2099/1383
+f 1259/2100/1381 1275/2101/1403 1260/2102/1384
+f 1252/2103/1383 1268/2104/1404 1253/2105/1385
+f 1261/2106/1386 1275/2107/1403 1276/2108/1405
+f 1254/2109/1387 1268/2110/1404 1269/2111/1406
+f 1261/2112/1386 1277/2113/1407 1262/2114/1388
+f 1255/2115/1389 1269/2116/1406 1270/2117/1408
+f 1266/2118/1409 1282/2119/1410 1267/2120/1402
+f 1274/2121/1401 1290/2122/1411 1275/2123/1403
+f 1268/2124/1404 1282/2125/1410 1283/2126/1412
+f 1276/2127/1405 1290/2128/1411 1291/2129/1413
+f 1268/2130/1404 1284/2131/1414 1269/2132/1406
+f 1277/2133/1407 1291/2134/1413 1292/2135/1415
+f 1270/2136/1408 1284/2137/1414 1285/2138/1416
+f 1277/2139/1407 1293/2140/1417 1278/2141/1395
+f 1270/2142/1408 1286/2143/1418 1271/2144/1396
+f 1278/2145/1395 1294/2146/1419 1279/2147/1397
+f 1272/2148/1398 1286/2149/1418 1287/2150/1420
+f 1279/2151/1397 1295/2152/1421 1280/2153/1399
+f 1273/2154/1400 1287/2155/1420 1288/2156/1422
+f 1273/2157/1400 1289/2158/1423 1274/2159/1401
+f 1285/2160/1416 1302/2161/1424 1286/2162/1418
+f 1294/2163/1419 1309/2164/1425 1310/2165/1426
+f 1287/2166/1420 1302/2167/1424 1303/2168/1427
+f 1294/2169/1419 1311/2170/1428 1295/2171/1421
+f 1287/2172/1420 1304/2173/1429 1288/2174/1422
+f 1289/2175/1423 1304/2176/1429 1305/2177/1430
+f 1281/2178/1431 1298/2179/1432 1282/2180/1410
+f 1289/2181/1423 1306/2182/1433 1290/2183/1411
+f 1283/2184/1412 1298/2185/1432 1299/2186/1434
+f 1291/2187/1413 1306/2188/1433 1307/2189/1435
+f 1283/2190/1412 1300/2191/1436 1284/2192/1414
+f 1291/2193/1413 1308/2194/1437 1292/2195/1415
+f 1285/2196/1416 1300/2197/1436 1301/2198/1438
+f 1292/2199/1415 1309/2200/1425 1293/2201/1417
+f 1305/2202/1430 1321/2203/1439 1306/2204/1433
+f 1298/2205/1432 1314/2206/1440 1299/2207/1434
+f 1307/2208/1435 1321/2209/1439 1322/2210/1441
+f 1299/2211/1434 1315/2212/1442 1300/2213/1436
+f 1307/2214/1435 1323/2215/1443 1308/2216/1437
+f 1301/2217/1438 1315/2218/1442 1316/2219/1444
+f 1308/2220/1437 1324/2221/1445 1309/2222/1425
+f 1301/2223/1438 1317/2224/1446 1302/2225/1424
+f 1309/2226/1425 1325/2227/1447 1310/2228/1426
+f 1303/2229/1427 1317/2230/1446 1318/2231/1448
+f 1311/2232/1428 1325/2233/1447 1326/2234/1449
+f 1304/2235/1429 1318/2236/1448 1319/2237/1450
+f 1304/2238/1429 1320/2239/1451 1305/2240/1430
+f 1298/2241/1432 1312/2242/1452 1313/2243/1453
+f 845/2244/997 1296/2245/597 860/2246/1454
+f 1175/2247/1455 859/2248/991 874/2249/992
+f 860/2250/1454 1296/2251/597 875/2252/1021
+f 1175/2253/1455 874/2254/992 889/2255/1018
+f 875/2256/1021 1296/2257/597 890/2258/1456
+f 1175/2259/1455 889/2260/1018 904/2261/1040
+f 890/2262/1456 1296/2263/597 905/2264/1049
+f 1175/2265/1455 904/2266/1040 919/2267/1046
+f 905/2268/1049 1296/2269/597 920/2270/1076
+f 1175/2271/1455 919/2272/1046 934/2273/1068
+f 920/2274/1076 1296/2275/597 935/2276/1098
+f 1175/2277/1455 934/2278/1068 949/2279/1073
+f 935/2280/1098 1296/2281/597 950/2282/1457
+f 1175/2283/1455 949/2284/1073 964/2285/1095
+f 950/2286/1457 1296/2287/597 965/2288/1107
+f 1175/2289/1455 964/2290/1095 979/2291/1104
+f 965/2292/1107 1296/2293/597 980/2294/1127
+f 1175/2295/1455 979/2296/1104 994/2297/1124
+f 980/2298/1127 1296/2299/597 995/2300/1154
+f 1175/2301/1455 994/2302/1124 1009/2303/1131
+f 995/2304/1154 1296/2305/597 1010/2306/1162
+f 1175/2307/1455 1009/2308/1131 1024/2309/1151
+f 1010/2310/1162 1296/2311/597 1025/2312/1184
+f 1175/2313/1455 1024/2314/1151 1039/2315/1173
+f 1025/2316/1184 1296/2317/597 1040/2318/1190
+f 1175/2319/1455 1039/2320/1173 1054/2321/1181
+f 1040/2322/1190 1296/2323/597 1055/2324/1213
+f 1175/2325/1455 1054/2326/1181 1069/2327/1202
+f 1055/2328/1213 1296/2329/597 1070/2330/1220
+f 1175/2331/1455 1069/2332/1202 1084/2333/1210
+f 1070/2334/1220 1296/2335/597 1085/2336/1458
+f 1175/2337/1455 1084/2338/1210 1099/2339/1232
+f 1085/2340/1458 1296/2341/597 1100/2342/1242
+f 1175/2343/1455 1099/2344/1232 1114/2345/1239
+f 1100/2346/1242 1296/2347/597 1115/2348/1459
+f 1175/2349/1455 1114/2350/1239 1129/2351/1259
+f 1115/2352/1459 1296/2353/597 1130/2354/1270
+f 1175/2355/1455 1129/2356/1259 1144/2357/1267
+f 1130/2358/1270 1296/2359/597 1145/2360/1297
+f 1175/2361/1455 1144/2362/1267 1159/2363/1288
+f 1145/2364/1297 1296/2365/597 1160/2366/1319
+f 1175/2367/1455 1159/2368/1288 1174/2369/1294
+f 1160/2370/1319 1296/2371/597 1176/2372/1460
+f 1175/2373/1455 1174/2374/1294 1190/2375/1316
+f 1176/2376/1460 1296/2377/597 1191/2378/1325
+f 1175/2379/1455 1190/2380/1316 1205/2381/1322
+f 1191/2382/1325 1296/2383/597 1206/2384/1352
+f 1175/2385/1455 1205/2386/1322 1220/2387/1344
+f 1206/2388/1352 1296/2389/597 1221/2390/1374
+f 1175/2391/1455 1220/2392/1344 1235/2393/1364
+f 1221/2394/1374 1296/2395/597 1236/2396/1461
+f 1175/2397/1455 1235/2398/1364 1250/2399/1371
+f 1175/2400/1455 1250/2401/1371 1265/2402/1394
+f 1236/2403/1461 1296/2404/597 1251/2405/1382
+f 1251/2406/1382 1296/2407/597 1266/2408/1409
+f 1175/2409/1455 1265/2410/1394 1280/2411/1399
+f 1266/2412/1409 1296/2413/597 1281/2414/1431
+f 1175/2415/1455 1280/2416/1399 1295/2417/1421
+f 1281/2418/1431 1296/2419/597 1297/2420/1462
+f 1175/2421/1455 1295/2422/1421 1311/2423/1428
+f 1297/2424/1462 1296/2425/597 1312/2426/1452
+f 1175/2427/1455 1311/2428/1428 1326/2429/1449
+f 1324/2430/1445 858/2431/986 1325/2432/1447
+f 1318/2433/1448 850/2434/983 851/2435/990
+f 1325/2436/1447 859/2437/991 1326/2438/1449
+f 1319/2439/1450 851/2440/990 852/2441/994
+f 1312/2442/1452 1296/2443/597 845/2444/997
+f 1175/2445/1455 1326/2446/1449 859/2447/991
+f 1319/2448/1450 853/2449/996 1320/2450/1451
+f 1313/2451/1453 845/2452/997 846/2453/999
+f 1320/2454/1451 854/2455/1000 1321/2456/1439
+f 1314/2457/1440 846/2458/999 847/2459/1003
+f 1321/2460/1439 855/2461/1005 1322/2462/1441
+f 1315/2463/1442 847/2464/1003 848/2465/1007
+f 1322/2466/1441 856/2467/1008 1323/2468/1443
+f 1316/2469/1444 848/2470/1007 849/2471/1010
+f 1323/2472/1443 857/2473/1011 1324/2474/1445
+f 1317/2475/1446 849/2476/1010 850/2477/983
+s off
+f 1541/2478/1455 1543/2479/1455 1539/2480/1455
+f 1554/2481/597 1550/2482/597 1546/2483/597
+f 1545/2484/1233 1542/2485/1233 1540/2486/1233
+f 1332/2487/693 1548/2488/693 1328/2489/693
+f 1329/2490/994 1553/2491/994 1544/2492/994
+f 1327/2493/1105 1334/2494/1105 1331/2495/1105
+s 1
+f 510/1/593 486/2496/597 527/2/594
+f 516/4/596 490/2497/597 523/5/597
+f 517/7/599 491/2498/597 530/8/600
+f 514/10/602 489/2499/641 531/11/603
+f 559/13/605 532/2500/660 503/14/606
+f 558/16/608 533/2501/656 504/17/609
+f 557/19/611 526/2502/1463 498/20/612
+f 556/22/614 536/2503/655 502/23/615
+f 537/25/617 505/2504/647 538/26/618
+f 529/28/620 501/2505/659 539/29/621
+f 540/31/623 495/2506/661 511/32/624
+f 541/34/626 506/2507/643 542/35/627
+f 551/37/629 528/2508/642 500/38/630
+f 544/40/632 499/2509/594 515/41/597
+f 545/43/634 507/2510/640 546/44/635
+f 522/46/637 494/2511/593 547/47/638
+f 548/49/639 547/2512/638 507/50/640
+f 503/52/606 531/2513/603 548/53/639
+f 489/55/641 522/2514/637 548/56/639
+f 528/58/642 549/2515/636 546/59/635
+f 519/61/607 549/2516/636 528/62/642
+f 519/64/607 503/2517/606 545/65/634
+f 550/67/633 515/2518/597 490/68/597
+f 500/70/630 546/2519/635 550/71/633
+f 507/73/640 544/2520/632 550/74/633
+f 541/76/626 551/2521/629 543/77/631
+f 502/79/615 530/2522/600 551/80/629
+f 530/82/600 491/2523/597 528/83/642
+f 552/85/628 542/2524/627 496/86/644
+f 518/88/616 552/2525/628 512/89/644
+f 502/91/615 541/2526/626 552/92/628
+f 524/94/646 553/2527/625 511/95/624
+f 542/97/627 553/2528/625 524/98/646
+f 542/100/627 506/2529/643 540/101/623
+f 537/103/617 554/2530/622 539/104/621
+f 513/106/648 554/2531/622 537/107/617
+f 488/109/650 529/2532/620 554/110/622
+f 555/112/619 538/2533/618 492/113/651
+f 525/115/653 555/2534/619 508/116/652
+f 497/118/649 537/2535/617 555/119/619
+f 556/121/614 518/2536/616 487/122/645
+f 538/124/618 556/2537/614 520/125/654
+f 538/127/618 505/2538/647 536/128/655
+f 533/130/656 557/2539/611 535/131/613
+f 509/133/657 557/2540/611 533/134/656
+f 484/136/658 526/2541/1463 557/137/611
+f 529/139/620 558/2542/608 534/140/610
+f 521/142/650 558/2543/608 529/143/620
+f 493/145/597 533/2544/656 558/146/608
+f 559/148/605 519/2545/607 491/149/597
+f 501/151/659 534/2546/610 559/152/605
+f 534/154/610 504/2547/609 532/155/660
+f 532/157/660 560/2548/604 531/158/603
+f 504/160/609 535/2549/613 560/161/604
+f 498/163/612 514/2550/602 560/164/604
+f 536/165/655 561/2551/601 530/166/600
+f 539/168/621 561/2552/601 536/169/655
+f 501/171/659 517/2553/599 561/172/601
+f 562/174/598 523/2554/597 495/175/661
+f 543/177/631 562/2555/598 540/178/623
+f 500/180/630 516/2556/596 562/181/598
+f 563/183/595 527/2557/594 499/184/594
+f 547/186/638 563/2558/595 544/187/632
+f 494/189/593 510/2559/593 563/190/595
+f 1337/192/662 567/2560/677 571/193/663
+f 568/195/665 572/2561/664 571/196/663
+f 569/198/667 572/2562/664 568/199/665
+f 569/201/667 1335/2563/673 1337/202/662
+f 568/204/665 574/2564/672 573/205/669
+f 569/207/667 564/2565/668 576/208/670
+f 566/210/666 575/2566/682 574/211/672
+f 1335/213/673 578/2567/680 582/214/674
+f 1336/216/676 1457/2568/676 1459/217/676
+f 567/219/677 1337/2569/662 1341/220/678
+f 1335/222/673 569/2570/667 577/223/671
+f 564/225/668 573/2571/669 583/226/681
+f 575/228/682 566/2572/666 584/229/683
+f 571/231/663 567/2573/677 1345/232/685
+f 1394/234/687 1395/2574/1464 1493/235/688
+f 587/237/684 584/2575/683 589/238/690
+f 1345/240/685 1349/2576/698 591/241/692
+f 1350/243/693 1346/2577/693 1523/244/693
+f 584/246/683 586/2578/686 591/247/692
+f 592/249/691 589/2579/690 594/250/694
+f 591/252/692 1349/2580/698 595/253/696
+f 1349/255/698 1347/2581/1465 598/256/699
+f 589/258/690 591/2582/692 596/259/697
+f 597/261/695 594/2583/694 599/262/700
+f 596/264/697 595/2584/696 600/265/702
+f 598/267/699 603/2585/706 600/268/702
+f 594/270/694 596/2586/697 601/271/703
+f 599/273/700 604/2587/708 607/274/704
+f 600/276/702 605/2588/707 606/277/705
+f 603/279/706 608/2589/1466 605/280/707
+f 599/282/700 601/2590/703 606/283/705
+f 607/285/704 604/2591/708 1353/286/709
+f 606/288/705 605/2592/707 1357/289/711
+f 605/291/707 608/2593/1466 1355/292/713
+f 604/294/708 606/2594/705 1351/295/712
+f 1352/297/714 1465/2595/714 1467/298/714
+f 612/300/710 1353/2596/709 1361/301/715
+f 1357/303/711 1365/2597/721 1359/304/717
+f 1366/306/718 1447/2598/718 1445/307/718
+f 618/309/719 623/2599/1467 620/310/720
+f 1361/312/715 1359/2600/717 621/313/722
+f 617/315/716 1361/2601/715 619/316/723
+f 1359/318/717 1365/2602/721 620/319/720
+f 573/321/669 1369/2603/731 627/322/725
+f 612/324/710 633/2604/729 632/325/726
+f 592/327/691 597/2605/695 630/328/727
+f 617/330/716 634/2606/735 633/331/729
+f 573/333/669 574/2607/672 1367/334/730
+f 607/336/704 632/2608/726 631/337/732
+f 574/339/672 575/2609/682 626/340/733
+f 592/342/691 629/2610/728 628/343/734
+f 622/345/724 635/2611/1468 634/346/735
+f 602/348/701 631/2612/732 630/349/727
+f 631/351/732 632/2613/726 644/352/736
+f 628/354/734 629/2614/728 641/355/738
+f 1367/357/730 626/2615/733 638/358/740
+f 632/360/726 633/2616/729 645/361/742
+f 629/363/728 630/2617/727 642/364/743
+f 627/366/725 1369/2618/731 1373/367/744
+f 633/369/729 634/2619/735 646/370/746
+f 630/372/727 631/2620/732 643/373/737
+f 626/375/733 628/2621/734 640/376/739
+f 634/378/735 635/2622/1468 647/379/747
+f 1372/381/748 1500/2623/1469 1496/382/749
+f 1373/384/744 1371/2624/741 649/385/751
+f 644/387/736 656/2625/757 655/388/753
+f 640/390/739 641/2626/738 653/391/754
+f 1371/393/741 638/2627/740 650/394/756
+f 645/396/742 657/2628/761 656/397/757
+f 641/399/738 642/2629/743 654/400/758
+f 639/402/745 1373/2630/744 648/403/752
+f 645/405/742 646/2631/746 658/406/760
+f 642/408/743 643/2632/737 655/409/753
+f 638/411/740 640/2633/739 652/412/755
+f 646/414/746 647/2634/747 659/415/762
+f 658/417/760 659/2635/762 1375/418/763
+f 648/420/752 649/2636/751 661/421/765
+f 655/423/753 656/2637/757 668/424/767
+f 652/426/755 653/2638/754 665/427/769
+f 649/429/751 650/2639/756 662/430/771
+f 657/432/761 669/2640/774 668/433/767
+f 653/435/754 654/2641/758 666/436/772
+f 651/438/759 648/2642/752 660/439/766
+f 657/441/761 658/2643/760 1377/442/764
+f 654/444/758 655/2644/753 667/445/768
+f 650/447/756 652/2645/755 664/448/770
+f 1382/450/775 1479/2646/775 1477/451/775
+f 660/453/766 661/2647/765 673/454/776
+f 667/456/768 668/2648/767 680/457/778
+f 664/459/770 665/2649/769 677/460/780
+f 661/462/765 662/2650/771 674/463/782
+f 668/465/767 669/2651/774 681/466/783
+f 665/468/769 666/2652/772 678/469/784
+f 663/471/773 660/2653/766 672/472/777
+f 669/474/774 1377/2654/764 1381/475/786
+f 666/477/772 667/2655/768 679/478/779
+f 662/480/771 664/2656/770 676/481/781
+f 683/483/787 695/2657/1470 694/484/788
+f 673/486/776 685/2658/792 684/487/789
+f 680/489/778 692/2659/793 691/490/790
+f 677/492/780 689/2660/794 1387/493/791
+f 674/495/782 1391/2661/976 685/496/792
+f 681/498/783 693/2662/796 692/499/793
+f 678/501/784 690/2663/797 689/502/794
+f 672/504/777 684/2664/789 687/505/795
+f 1381/507/786 694/2665/788 693/508/796
+f 679/510/779 691/2666/790 690/511/797
+f 690/513/797 691/2667/790 1385/514/798
+f 566/516/666 571/2668/663 586/517/686
+f 694/519/788 695/2669/1470 707/520/800
+f 684/522/789 685/2670/792 697/523/802
+f 691/525/790 692/2671/793 1383/526/804
+f 1387/528/791 689/2672/794 701/529/805
+f 685/531/792 1391/2673/976 1393/532/807
+f 692/534/793 693/2674/796 705/535/808
+f 689/537/794 690/2675/797 702/538/799
+f 687/540/795 684/2676/789 696/541/803
+f 693/543/796 694/2677/788 706/544/801
+f 702/546/799 1385/2678/798 1399/547/810
+f 1393/549/807 1389/2679/806 712/550/812
+f 706/552/801 707/2680/800 719/553/814
+f 696/555/803 697/2681/802 709/556/816
+f 1400/558/818 1439/2682/818 1437/559/818
+f 1389/561/806 701/2683/805 713/562/819
+f 697/564/802 1393/2684/807 710/565/813
+f 1383/567/804 705/2685/808 717/568/820
+f 702/570/799 714/2686/811 713/571/819
+f 699/573/809 696/2687/803 708/574/817
+f 705/576/808 706/2688/801 718/577/815
+f 717/579/820 718/2689/815 730/580/823
+f 1399/582/810 727/2690/830 726/583/825
+f 712/585/812 724/2691/831 722/586/826
+f 718/588/815 719/2692/814 731/589/827
+f 708/591/817 709/2693/816 1401/592/828
+f 1398/594/821 728/2694/832 727/595/830
+f 713/597/819 725/2695/833 724/598/831
+f 709/600/816 710/2696/813 722/601/826
+f 1398/603/821 717/2697/820 729/604/824
+f 714/606/811 726/2698/825 725/607/833
+f 708/609/817 1403/2699/829 723/610/834
+f 1403/612/829 1408/2700/853 735/613/835
+f 730/615/823 742/2701/841 741/616/836
+f 726/618/825 727/2702/830 739/619/837
+f 567/621/677 580/2703/679 1343/622/839
+f 730/624/823 731/2704/827 743/625/840
+f 1407/627/842 1509/2705/842 1507/628/842
+f 727/630/830 728/2706/832 740/631/843
+f 724/633/831 725/2707/833 737/634/844
+f 1401/636/828 722/2708/826 734/637/846
+f 728/639/832 729/2709/824 741/640/836
+f 725/642/833 726/2710/825 738/643/838
+f 735/645/835 1408/2711/853 744/646/848
+f 739/648/837 751/2712/855 750/649/850
+f 736/651/845 748/2713/857 746/652/851
+f 743/654/840 755/2714/1471 754/655/852
+f 1408/657/853 1406/2715/847 745/658/854
+f 740/660/843 752/2716/858 751/661/855
+f 736/663/845 737/2717/844 749/664/856
+f 1406/666/847 734/2718/846 746/667/851
+f 741/669/836 753/2719/862 752/670/858
+f 738/672/838 750/2720/850 749/673/856
+f 749/675/856 750/2721/850 763/676/859
+f 744/678/848 1411/2722/867 759/679/861
+f 753/681/862 754/2723/852 1417/682/863
+f 751/684/855 764/2724/869 763/685/859
+f 722/687/826 724/2725/831 736/688/845
+f 754/690/852 755/2726/1471 768/691/865
+f 744/693/848 745/2727/854 1409/694/866
+f 751/696/855 752/2728/858 765/697/868
+f 748/699/857 749/2729/856 1413/700/860
+f 745/702/854 746/2730/851 758/703/871
+f 753/705/862 1419/2731/864 765/706/868
+f 763/708/859 775/2732/875 1425/709/872
+f 1411/711/867 1423/2733/887 772/712/873
+f 1430/714/874 1486/2734/874 1482/715/874
+f 764/717/869 776/2735/881 775/718/875
+f 748/720/857 1415/2736/870 760/721/876
+f 1417/723/863 768/2737/865 780/724/877
+f 1412/726/879 1452/2738/879 1456/727/879
+f 764/729/869 765/2739/868 777/730/880
+f 1428/732/882 1416/2740/882 1514/733/882
+f 758/735/871 771/2741/894 1421/736/883
+f 1419/738/864 1431/2742/884 777/739/880
+f 1431/741/884 790/2743/889 789/742/885
+f 775/744/875 787/2744/891 786/745/886
+f 1423/747/887 781/2745/897 784/748/888
+f 1429/750/878 791/2746/895 790/751/889
+f 775/753/875 776/2747/881 788/754/890
+f 1427/756/892 785/2748/898 783/757/893
+f 780/759/877 792/2749/1472 791/760/895
+f 1423/762/887 1421/2750/883 782/763/896
+f 776/765/881 777/2751/880 789/766/885
+f 1427/768/892 1425/2752/872 786/769/886
+f 771/771/894 783/2753/893 782/772/896
+f 1433/774/899 1438/2754/1473 1440/775/900
+f 1384/777/902 1434/2755/902 1436/778/902
+f 715/780/903 703/2756/903 794/781/903
+f 704/783/904 716/2757/904 795/784/904
+f 1441/786/905 1446/2758/1474 1448/787/906
+f 1356/789/908 1364/2759/908 799/790/908
+f 615/792/909 1358/2760/909 1444/793/909
+f 613/795/910 797/2761/910 798/796/910
+f 1451/798/911 1449/2762/1475 1453/799/912
+f 1422/801/914 1454/2763/914 1450/802/914
+f 770/804/915 769/2764/915 804/805/915
+f 756/807/916 757/2765/916 801/808/916
+f 741/810/836 742/2766/841 754/811/852
+f 1460/813/917 1458/2767/1476 1461/814/918
+f 581/816/920 570/2768/920 806/817/920
+f 565/819/921 579/2769/921 1462/820/921
+f 1342/822/922 808/2770/922 807/823/922
+f 1468/825/923 1466/2771/1477 1469/826/924
+f 1362/828/926 1472/2772/926 1470/829/926
+f 614/831/927 609/2773/927 810/832/927
+f 611/834/928 616/2774/928 811/835/928
+f 1475/837/929 1473/2775/1478 1478/838/930
+f 671/840/932 1474/2776/932 1476/841/932
+f 682/843/933 670/2777/933 814/844/933
+f 1376/846/934 1380/2778/934 815/847/934
+f 1481/849/935 1485/2779/1479 1487/850/936
+f 1420/852/938 1484/2780/938 1488/853/938
+f 779/855/939 778/2781/939 820/856/939
+f 766/858/940 767/2782/940 817/859/940
+f 1491/861/941 1489/2783/1480 1494/862/942
+f 1415/864/870 1427/2784/892 771/865/894
+f 700/867/944 823/2785/944 1490/868/944
+f 1497/870/945 1495/2786/1481 1499/871/946
+f 637/873/948 1374/2787/1482 1502/874/949
+f 625/876/951 825/2788/951 1498/877/951
+f 636/879/952 624/2789/952 826/880/952
+f 1505/882/953 1503/2790/1483 1508/883/954
+f 1402/885/956 1504/2791/956 1506/886/956
+f 721/888/957 733/2792/957 831/889/957
+f 732/891/958 720/2793/958 830/892/958
+f 1511/894/959 1515/2794/1484 1517/895/960
+f 773/897/962 836/2795/962 1516/898/962
+f 1414/900/963 1512/2796/963 834/901/963
+f 762/903/964 774/2797/964 835/904/964
+f 1520/906/965 1526/2798/965 1536/907/965
+f 585/909/693 588/2799/693 1519/910/693
+f 593/912/693 590/2800/693 1528/913/693
+f 1344/915/693 1348/2801/693 1527/916/693
+f 1531/918/966 1535/2802/1485 1537/919/967
+f 839/921/969 1530/2803/1486 1538/922/970
+f 1524/924/972 1534/2804/1487 844/925/973
+f 837/927/975 841/2805/975 842/928/975
+f 575/930/682 587/2806/684 628/931/734
+f 676/933/781 1387/2807/791 1391/934/976
+f 1392/936/977 688/2808/1488 821/937/978
+f 686/939/980 822/2809/1489 824/940/981
+f 850/942/983 849/2810/1010 864/943/984
+f 858/945/986 857/2811/1011 872/946/987
+f 850/948/983 865/2812/985 866/949/989
+f 859/951/991 858/2813/986 873/952/988
+f 851/954/990 866/2814/989 867/955/993
+f 852/957/994 867/2815/993 868/958/995
+f 845/960/997 860/2816/1454 861/961/998
+f 854/963/1000 853/2817/996 868/964/995
+f 846/966/999 861/2818/998 862/967/1002
+f 854/969/1000 869/2819/1001 870/970/1004
+f 847/972/1003 862/2820/1002 863/973/1006
+f 856/975/1008 855/2821/1005 870/976/1004
+f 849/978/1010 848/2822/1007 863/979/1006
+f 857/981/1011 856/2823/1008 871/982/1009
+f 863/984/1006 878/2824/1026 879/985/1012
+f 872/987/987 871/2825/1009 886/988/1013
+f 865/990/985 864/2826/984 879/991/1012
+f 873/993/988 872/2827/987 887/994/1014
+f 865/996/985 880/2828/1015 881/997/1017
+f 873/999/988 888/2829/1016 889/1000/1018
+f 866/1002/989 881/2830/1017 882/1003/1019
+f 868/1005/995 867/2831/993 882/1006/1019
+f 861/1008/998 860/2832/1454 875/1009/1021
+f 868/1011/995 883/2833/1020 884/1012/1023
+f 861/1014/998 876/2834/1022 877/1015/1024
+f 869/1017/1001 884/2835/1023 885/1018/1025
+f 862/1020/1002 877/2836/1024 878/1021/1026
+f 871/1023/1009 870/2837/1004 885/1024/1025
+f 883/1026/1020 882/2838/1019 897/1027/1027
+f 875/1029/1021 890/2839/1456 891/1030/1029
+f 883/1032/1020 898/2840/1028 899/1033/1030
+f 877/1035/1024 876/2841/1022 891/1036/1029
+f 885/1038/1025 884/2842/1023 899/1039/1030
+f 878/1041/1026 877/2843/1024 892/1042/1031
+f 886/1044/1013 885/2844/1025 900/1045/1032
+f 878/1047/1026 893/2845/1033 894/1048/1035
+f 886/1050/1013 901/2846/1034 902/1051/1036
+f 879/1053/1012 894/2847/1035 895/1054/1037
+f 888/1056/1016 887/2848/1014 902/1057/1036
+f 880/1059/1015 895/2849/1037 896/1060/1039
+f 889/1062/1018 888/2850/1016 903/1063/1038
+f 881/1065/1017 896/2851/1039 897/1066/1027
+f 901/1068/1034 916/2852/1055 917/1069/1041
+f 895/1071/1037 894/2853/1035 909/1072/1042
+f 902/1074/1036 917/2854/1041 918/1075/1044
+f 895/1077/1037 910/2855/1043 911/1078/1045
+f 904/1080/1040 903/2856/1038 918/1081/1044
+f 897/1083/1027 896/2857/1039 911/1084/1045
+f 897/1086/1027 912/2858/1047 913/1087/1048
+f 891/1089/1029 890/2859/1456 905/1090/1049
+f 899/1092/1030 898/2860/1028 913/1093/1048
+f 891/1095/1029 906/2861/1050 907/1096/1052
+f 900/1098/1032 899/2862/1030 914/1099/1051
+f 892/1101/1031 907/2863/1052 908/1102/1054
+f 900/1104/1032 915/2864/1053 916/1105/1055
+f 894/1107/1035 893/2865/1033 908/1108/1054
+f 905/1110/1049 920/2866/1076 921/1111/1056
+f 914/1113/1051 913/2867/1048 928/1114/1057
+f 906/1116/1050 921/2868/1056 922/1117/1059
+f 915/1119/1053 914/2869/1051 929/1120/1058
+f 907/1122/1052 922/2870/1059 923/1123/1061
+f 915/1125/1053 930/2871/1060 931/1126/1062
+f 908/1128/1054 923/2872/1061 924/1129/1063
+f 917/1131/1041 916/2873/1055 931/1132/1062
+f 910/1134/1043 909/2874/1042 924/1135/1063
+f 917/1137/1041 932/2875/1064 933/1138/1066
+f 911/1140/1045 910/2876/1043 925/1141/1065
+f 919/1143/1046 918/2877/1044 933/1144/1066
+f 912/1146/1047 911/2878/1045 926/1147/1067
+f 912/1149/1047 927/2879/1069 928/1150/1057
+f 924/1152/1063 939/2880/1083 940/1153/1070
+f 932/1155/1064 947/2881/1084 948/1156/1071
+f 926/1158/1067 925/2882/1065 940/1159/1070
+f 934/1161/1068 933/2883/1066 948/1162/1071
+f 926/1164/1067 941/2884/1072 942/1165/1074
+f 928/1167/1057 927/2885/1069 942/1168/1074
+f 920/1170/1076 935/2886/1098 936/1171/1077
+f 928/1173/1057 943/2887/1075 944/1174/1078
+f 921/1176/1056 936/2888/1077 937/1177/1079
+f 930/1179/1060 929/2889/1058 944/1180/1078
+f 922/1182/1059 937/2890/1079 938/1183/1081
+f 930/1185/1060 945/2891/1080 946/1186/1082
+f 923/1188/1061 938/2892/1081 939/1189/1083
+f 931/1191/1062 946/2893/1082 947/1192/1084
+f 943/1194/1075 958/2894/1097 959/1195/1085
+f 936/1197/1077 951/2895/1099 952/1198/1086
+f 944/1200/1078 959/2896/1085 960/1201/1087
+f 938/1203/1081 937/2897/1079 952/1204/1086
+f 945/1206/1080 960/2898/1087 961/1207/1089
+f 939/1209/1083 938/2899/1081 953/1210/1088
+f 946/1212/1082 961/2900/1089 962/1213/1091
+f 939/1215/1083 954/2901/1090 955/1216/1092
+f 948/1218/1071 947/2902/1084 962/1219/1091
+f 940/1221/1070 955/2903/1092 956/1222/1094
+f 949/1224/1073 948/2904/1071 963/1225/1093
+f 941/1227/1072 956/2905/1094 957/1228/1096
+f 943/1230/1075 942/2906/1074 957/1231/1096
+f 935/1233/1098 950/2907/1457 951/1234/1099
+f 963/1236/1093 962/2908/1091 977/1237/1100
+f 956/1239/1094 955/2909/1092 970/1240/1102
+f 963/1242/1093 978/2910/1101 979/1243/1104
+f 956/1245/1094 971/2911/1103 972/1246/1105
+f 958/1248/1097 957/2912/1096 972/1249/1105
+f 951/1251/1099 950/2913/1457 965/1252/1107
+f 958/1254/1097 973/2914/1106 974/1255/1109
+f 951/1257/1099 966/2915/1108 967/1258/1110
+f 959/1260/1085 974/2916/1109 975/1261/1111
+f 952/1263/1086 967/2917/1110 968/1264/1112
+f 960/1266/1087 975/2918/1111 976/1267/1113
+f 954/1269/1090 953/2919/1088 968/1270/1112
+f 962/1272/1091 961/2920/1089 976/1273/1113
+f 954/1275/1090 969/2921/1114 970/1276/1102
+f 974/1278/1109 989/2922/1129 990/1279/1115
+f 968/1281/1112 967/2923/1110 982/1282/1116
+f 976/1284/1113 975/2924/1111 990/1285/1115
+f 968/1287/1112 983/2925/1117 984/1288/1119
+f 977/1290/1100 976/2926/1113 991/1291/1118
+f 970/1293/1102 969/2927/1114 984/1294/1119
+f 977/1296/1100 992/2928/1120 993/1297/1122
+f 971/1299/1103 970/2929/1102 985/1300/1121
+f 979/1302/1104 978/2930/1101 993/1303/1122
+f 972/1305/1105 971/2931/1103 986/1306/1123
+f 973/1308/1106 972/2932/1105 987/1309/1125
+f 966/1311/1108 965/2933/1107 980/1312/1127
+f 973/1314/1106 988/2934/1126 989/1315/1129
+f 966/1317/1108 981/2935/1128 982/1318/1116
+f 994/1320/1124 993/2936/1122 1008/1321/1130
+f 986/1323/1123 1001/2937/1143 1002/1324/1132
+f 987/1326/1125 1002/2938/1132 1003/1327/1133
+f 980/1329/1127 995/2939/1154 996/1330/1134
+f 988/1332/1126 1003/2940/1133 1004/1333/1135
+f 981/1335/1128 996/2941/1134 997/1336/1136
+f 989/1338/1129 1004/2942/1135 1005/1339/1137
+f 982/1341/1116 997/2943/1136 998/1342/1138
+f 991/1344/1118 990/2944/1115 1005/1345/1137
+f 983/1347/1117 998/2945/1138 999/1348/1140
+f 992/1350/1120 991/2946/1118 1006/1351/1139
+f 985/1353/1121 984/2947/1119 999/1354/1140
+f 993/1356/1122 992/2948/1120 1007/1357/1141
+f 986/1359/1123 985/2949/1121 1000/1360/1142
+f 997/1362/1136 1012/2950/1157 1013/1363/1144
+f 1005/1365/1137 1020/2951/1158 1021/1366/1145
+f 998/1368/1138 1013/2952/1144 1014/1369/1146
+f 1007/1371/1141 1006/2953/1139 1021/1372/1145
+f 1000/1374/1142 999/2954/1140 1014/1375/1146
+f 1007/1377/1141 1022/2955/1147 1023/1378/1149
+f 1000/1380/1142 1015/2956/1148 1016/1381/1150
+f 1009/1383/1131 1008/2957/1130 1023/1384/1149
+f 1001/1386/1143 1016/2958/1150 1017/1387/1152
+f 1003/1389/1133 1002/2959/1132 1017/1390/1152
+f 995/1392/1154 1010/2960/1162 1011/1393/1155
+f 1003/1395/1133 1018/2961/1153 1019/1396/1156
+f 997/1398/1136 996/2962/1134 1011/1399/1155
+f 1005/1401/1137 1004/2963/1135 1019/1402/1156
+f 1017/1404/1152 1016/2964/1150 1031/1405/1159
+f 1017/1407/1152 1032/2965/1160 1033/1408/1161
+f 1010/1410/1162 1025/2966/1184 1026/1411/1163
+f 1018/1413/1153 1033/2967/1161 1034/1414/1164
+f 1012/1416/1157 1011/2968/1155 1026/1417/1163
+f 1020/1419/1158 1019/2969/1156 1034/1420/1164
+f 1012/1422/1157 1027/2970/1165 1028/1423/1167
+f 1020/1425/1158 1035/2971/1166 1036/1426/1168
+f 1013/1428/1144 1028/2972/1167 1029/1429/1169
+f 1022/1431/1147 1021/2973/1145 1036/1432/1168
+f 1014/1434/1146 1029/2974/1169 1030/1435/1171
+f 1023/1437/1149 1022/2975/1147 1037/1438/1170
+f 1016/1440/1150 1015/2976/1148 1030/1441/1171
+f 1023/1443/1149 1038/2977/1172 1039/1444/1173
+f 1035/1446/1166 1050/2978/1188 1051/1447/1174
+f 1029/1449/1169 1028/2979/1167 1043/1450/1175
+f 1036/1452/1168 1051/2980/1174 1052/1453/1177
+f 1029/1455/1169 1044/2981/1176 1045/1456/1178
+f 1038/1458/1172 1037/2982/1170 1052/1459/1177
+f 1031/1461/1159 1030/2983/1171 1045/1462/1178
+f 1038/1464/1172 1053/2984/1179 1054/1465/1181
+f 1031/1467/1159 1046/2985/1180 1047/1468/1182
+f 1033/1470/1161 1032/2986/1160 1047/1471/1182
+f 1025/1473/1184 1040/2987/1190 1041/1474/1185
+f 1033/1476/1161 1048/2988/1183 1049/1477/1186
+f 1026/1479/1163 1041/2989/1185 1042/1480/1187
+f 1035/1482/1166 1034/2990/1164 1049/1483/1186
+f 1028/1485/1167 1027/2991/1165 1042/1486/1187
+f 1047/1488/1182 1062/2992/1203 1063/1489/1189
+f 1040/1491/1190 1055/2993/1213 1056/1492/1191
+f 1048/1494/1183 1063/2994/1189 1064/1495/1192
+f 1041/1497/1185 1056/2995/1191 1057/1498/1193
+f 1050/1500/1188 1049/2996/1186 1064/1501/1192
+f 1042/1503/1187 1057/2997/1193 1058/1504/1195
+f 1051/1506/1174 1050/2998/1188 1065/1507/1194
+f 1044/1509/1176 1043/2999/1175 1058/1510/1195
+f 1052/1512/1177 1051/3000/1174 1066/1513/1196
+f 1044/1515/1176 1059/3001/1197 1060/1516/1199
+f 1052/1518/1177 1067/3002/1198 1068/1519/1200
+f 1046/1521/1180 1045/3003/1178 1060/1522/1199
+f 1054/1524/1181 1053/3004/1179 1068/1525/1200
+f 1047/1527/1182 1046/3005/1180 1061/1528/1201
+f 1059/1530/1197 1058/3006/1195 1073/1531/1204
+f 1066/1533/1196 1081/3007/1218 1082/1534/1206
+f 1059/1536/1197 1074/3008/1205 1075/1537/1207
+f 1067/1539/1198 1082/3009/1206 1083/1540/1208
+f 1061/1542/1201 1060/3010/1199 1075/1543/1207
+f 1068/1545/1200 1083/3011/1208 1084/1546/1210
+f 1062/1548/1203 1061/3012/1201 1076/1549/1209
+f 1062/1551/1203 1077/3013/1211 1078/1552/1212
+f 1055/1554/1213 1070/3014/1220 1071/1555/1214
+f 1063/1557/1189 1078/3015/1212 1079/1558/1215
+f 1056/1560/1191 1071/3016/1214 1072/1561/1216
+f 1065/1563/1194 1064/3017/1192 1079/1564/1215
+f 1057/1566/1193 1072/3018/1216 1073/1567/1204
+f 1066/1569/1196 1065/3019/1194 1080/1570/1217
+f 1077/1572/1211 1092/3020/1233 1093/1573/1219
+f 1070/1575/1220 1085/3021/1458 1086/1576/1221
+f 1078/1578/1212 1093/3022/1219 1094/1579/1222
+f 1072/1581/1216 1071/3023/1214 1086/1582/1221
+f 1080/1584/1217 1079/3024/1215 1094/1585/1222
+f 1072/1587/1216 1087/3025/1223 1088/1588/1225
+f 1081/1590/1218 1080/3026/1217 1095/1591/1224
+f 1074/1593/1205 1073/3027/1204 1088/1594/1225
+f 1082/1596/1206 1081/3028/1218 1096/1597/1226
+f 1075/1599/1207 1074/3029/1205 1089/1600/1227
+f 1083/1602/1208 1082/3030/1206 1097/1603/1228
+f 1076/1605/1209 1075/3031/1207 1090/1606/1229
+f 1083/1608/1208 1098/3032/1230 1099/1609/1232
+f 1077/1611/1211 1076/3033/1209 1091/1612/1231
+f 1097/1614/1228 1096/3034/1226 1111/1615/1234
+f 1089/1617/1227 1104/3035/1248 1105/1618/1236
+f 1097/1620/1228 1112/3036/1235 1113/1621/1237
+f 1091/1623/1231 1090/3037/1229 1105/1624/1236
+f 1099/1626/1232 1098/3038/1230 1113/1627/1237
+f 1091/1629/1231 1106/3039/1238 1107/1630/1240
+f 1093/1632/1219 1092/3040/1233 1107/1633/1240
+f 1086/1635/1221 1085/3041/1458 1100/1636/1242
+f 1093/1638/1219 1108/3042/1241 1109/1639/1244
+f 1086/1641/1221 1101/3043/1243 1102/1642/1245
+f 1095/1644/1224 1094/3044/1222 1109/1645/1244
+f 1088/1647/1225 1087/3045/1223 1102/1648/1245
+f 1095/1650/1224 1110/3046/1246 1111/1651/1234
+f 1089/1653/1227 1088/3047/1225 1103/1654/1247
+f 1108/1656/1241 1123/3048/1261 1124/1657/1249
+f 1101/1659/1243 1116/3049/1262 1117/1660/1250
+f 1110/1662/1246 1109/3050/1244 1124/1663/1249
+f 1102/1665/1245 1117/3051/1250 1118/1666/1252
+f 1110/1668/1246 1125/3052/1251 1126/1669/1253
+f 1103/1671/1247 1118/3053/1252 1119/1672/1254
+f 1111/1674/1234 1126/3054/1253 1127/1675/1255
+f 1104/1677/1248 1119/3055/1254 1120/1678/1256
+f 1113/1680/1237 1112/3056/1235 1127/1681/1255
+f 1106/1683/1238 1105/3057/1236 1120/1684/1256
+f 1114/1686/1239 1113/3058/1237 1128/1687/1257
+f 1107/1689/1240 1106/3059/1238 1121/1690/1258
+f 1107/1692/1240 1122/3060/1260 1123/1693/1261
+f 1100/1695/1242 1115/3061/1459 1116/1696/1262
+f 1128/1698/1257 1127/3062/1255 1142/1699/1263
+f 1121/1701/1258 1120/3063/1256 1135/1702/1265
+f 1128/1704/1257 1143/3064/1264 1144/1705/1267
+f 1122/1707/1260 1121/3065/1258 1136/1708/1266
+f 1122/1710/1260 1137/3066/1268 1138/1711/1269
+f 1116/1713/1262 1115/3067/1459 1130/1714/1270
+f 1123/1716/1261 1138/3068/1269 1139/1717/1272
+f 1117/1719/1250 1116/3069/1262 1131/1720/1271
+f 1125/1722/1251 1124/3070/1249 1139/1723/1272
+f 1118/1725/1252 1117/3071/1250 1132/1726/1273
+f 1125/1728/1251 1140/3072/1274 1141/1729/1276
+f 1119/1731/1254 1118/3073/1252 1133/1732/1275
+f 1126/1734/1253 1141/3074/1276 1142/1735/1263
+f 1119/1737/1254 1134/3075/1277 1135/1738/1265
+f 1131/1740/1271 1146/3076/1291 1147/1741/1278
+f 1140/1743/1274 1139/3077/1272 1154/1744/1279
+f 1133/1746/1275 1132/3078/1273 1147/1747/1278
+f 1140/1749/1274 1155/3079/1280 1156/1750/1282
+f 1134/1752/1277 1133/3080/1275 1148/1753/1281
+f 1141/1755/1276 1156/3081/1282 1157/1756/1284
+f 1134/1758/1277 1149/3082/1283 1150/1759/1285
+f 1142/1761/1263 1157/3083/1284 1158/1762/1286
+f 1136/1764/1266 1135/3084/1265 1150/1765/1285
+f 1143/1767/1264 1158/3085/1286 1159/1768/1288
+f 1137/1770/1268 1136/3086/1266 1151/1771/1287
+f 1137/1773/1268 1152/3087/1289 1153/1774/1290
+f 1130/1776/1270 1145/3088/1297 1146/1777/1291
+f 1138/1779/1269 1153/3089/1290 1154/1780/1279
+f 1151/1782/1287 1150/3090/1285 1165/1783/1292
+f 1158/1785/1286 1173/3091/1306 1174/1786/1294
+f 1152/1788/1289 1151/3092/1287 1166/1789/1293
+f 1152/1791/1289 1167/3093/1295 1168/1792/1296
+f 1145/1794/1297 1160/3094/1319 1161/1795/1298
+f 1153/1797/1290 1168/3095/1296 1169/1798/1299
+f 1147/1800/1278 1146/3096/1291 1161/1801/1298
+f 1155/1803/1280 1154/3097/1279 1169/1804/1299
+f 1147/1806/1278 1162/3098/1300 1163/1807/1302
+f 1155/1809/1280 1170/3099/1301 1171/1810/1303
+f 1149/1812/1283 1148/3100/1281 1163/1813/1302
+f 1157/1815/1284 1156/3101/1282 1171/1816/1303
+f 1149/1818/1283 1164/3102/1304 1165/1819/1292
+f 1158/1821/1286 1157/3103/1284 1172/1822/1305
+f 1170/1824/1301 1169/3104/1299 1185/1825/1307
+f 1162/1827/1300 1178/3105/1321 1179/1828/1309
+f 1171/1830/1303 1170/3106/1301 1186/1831/1308
+f 1164/1833/1304 1163/3107/1302 1179/1834/1309
+f 1171/1836/1303 1187/3108/1310 1188/1837/1312
+f 1165/1839/1292 1164/3109/1304 1180/1840/1311
+f 1172/1842/1305 1188/3110/1312 1189/1843/1314
+f 1166/1845/1293 1165/3111/1292 1181/1846/1313
+f 1174/1848/1294 1173/3112/1306 1189/1849/1314
+f 1167/1851/1295 1166/3113/1293 1182/1852/1315
+f 1167/1854/1295 1183/3114/1317 1184/1855/1318
+f 1160/1857/1319 1176/3115/1460 1177/1858/1320
+f 1168/1860/1296 1184/3116/1318 1185/1861/1307
+f 1161/1863/1298 1177/3117/1320 1178/1864/1321
+f 1189/1866/1314 1204/3118/1335 1205/1867/1322
+f 1182/1869/1315 1197/3119/1336 1198/1870/1323
+f 1183/1872/1317 1198/3120/1323 1199/1873/1324
+f 1177/1875/1320 1176/3121/1460 1191/1876/1325
+f 1184/1878/1318 1199/3122/1324 1200/1879/1327
+f 1178/1881/1321 1177/3123/1320 1192/1882/1326
+f 1186/1884/1308 1185/3124/1307 1200/1885/1327
+f 1179/1887/1309 1178/3125/1321 1193/1888/1328
+f 1187/1890/1310 1186/3126/1308 1201/1891/1329
+f 1180/1893/1311 1179/3127/1309 1194/1894/1330
+f 1187/1896/1310 1202/3128/1331 1203/1897/1333
+f 1180/1899/1311 1195/3129/1332 1196/1900/1334
+f 1188/1902/1312 1203/3130/1333 1204/1903/1335
+f 1182/1905/1315 1181/3131/1313 1196/1906/1334
+f 1193/1908/1328 1208/3132/1348 1209/1909/1337
+f 1201/1911/1329 1216/3133/1349 1217/1912/1338
+f 1194/1914/1330 1209/3134/1337 1210/1915/1339
+f 1203/1917/1333 1202/3135/1331 1217/1918/1338
+f 1195/1920/1332 1210/3136/1339 1211/1921/1341
+f 1204/1923/1335 1203/3137/1333 1218/1924/1340
+f 1197/1926/1336 1196/3138/1334 1211/1927/1341
+f 1205/1929/1322 1204/3139/1335 1219/1930/1342
+f 1198/1932/1323 1197/3140/1336 1212/1933/1343
+f 1199/1935/1324 1198/3141/1323 1213/1936/693
+f 1191/1938/1325 1206/3142/1352 1207/1939/1346
+f 1199/1941/1324 1214/3143/1345 1215/1942/1347
+f 1193/1944/1328 1192/3144/1326 1207/1945/1346
+f 1201/1947/1329 1200/3145/1327 1215/1948/1347
+f 1212/1950/1343 1227/3146/1363 1228/1951/1350
+f 1213/1953/693 1228/3147/1350 1229/1954/1351
+f 1206/1956/1352 1221/3148/1374 1222/1957/1353
+f 1214/1959/1345 1229/3149/1351 1230/1960/1354
+f 1207/1962/1346 1222/3150/1353 1223/1963/1355
+f 1216/1965/1349 1215/3151/1347 1230/1966/1354
+f 1208/1968/1348 1223/3152/1355 1224/1969/1357
+f 1217/1971/1338 1216/3153/1349 1231/1972/1356
+f 1209/1974/1337 1224/3154/1357 1225/1975/1359
+f 1217/1977/1338 1232/3155/1358 1233/1978/1360
+f 1211/1980/1341 1210/3156/1339 1225/1981/1359
+f 1218/1983/1340 1233/3157/1360 1234/1984/1362
+f 1212/1986/1343 1211/3158/1341 1226/1987/1361
+f 1219/1989/1342 1234/3159/1362 1235/1990/1364
+f 1231/1992/1356 1246/3160/1378 1247/1993/1365
+f 1224/1995/1357 1239/3161/1379 1240/1996/1366
+f 1232/1998/1358 1247/3162/1365 1248/1999/1367
+f 1225/2001/1359 1240/3163/1366 1241/2002/1368
+f 1233/2004/1360 1248/3164/1367 1249/2005/1369
+f 1227/2007/1363 1226/3165/1361 1241/2008/1368
+f 1234/2010/1362 1249/3166/1369 1250/2011/1371
+f 1227/2013/1363 1242/3167/1370 1243/2014/1372
+f 1228/2016/1350 1243/3168/1372 1244/2017/1373
+f 1221/2019/1374 1236/3169/1461 1237/2020/1375
+f 1229/2022/1351 1244/3170/1373 1245/2023/1376
+f 1222/2025/1353 1237/3171/1375 1238/2026/1377
+f 1231/2028/1356 1230/3172/1354 1245/2029/1376
+f 1223/2031/1355 1238/3173/1377 1239/2032/1379
+f 1244/2034/1373 1243/3174/1372 1258/2035/1380
+f 1237/2037/1375 1236/3175/1461 1251/2038/1382
+f 1244/2040/1373 1259/3176/1381 1260/2041/1384
+f 1237/2043/1375 1252/3177/1383 1253/2044/1385
+f 1246/2046/1378 1245/3178/1376 1260/2047/1384
+f 1239/2049/1379 1238/3179/1377 1253/2050/1385
+f 1247/2052/1365 1246/3180/1378 1261/2053/1386
+f 1239/2055/1379 1254/3181/1387 1255/2056/1389
+f 1248/2058/1367 1247/3182/1365 1262/2059/1388
+f 1240/2061/1366 1255/3183/1389 1256/2062/1391
+f 1249/2064/1369 1248/3184/1367 1263/2065/1390
+f 1242/2067/1370 1241/3185/1368 1256/2068/1391
+f 1250/2070/1371 1249/3186/1369 1264/2071/1392
+f 1242/2073/1370 1257/3187/1393 1258/2074/1380
+f 1262/2076/1388 1277/3188/1407 1278/2077/1395
+f 1255/2079/1389 1270/3189/1408 1271/2080/1396
+f 1264/2082/1392 1263/3190/1390 1278/2083/1395
+f 1257/2085/1393 1256/3191/1391 1271/2086/1396
+f 1264/2088/1392 1279/3192/1397 1280/2089/1399
+f 1258/2091/1380 1257/3193/1393 1272/2092/1398
+f 1258/2094/1380 1273/3194/1400 1274/2095/1401
+f 1251/2097/1382 1266/3195/1409 1267/2098/1402
+f 1259/2100/1381 1274/3196/1401 1275/2101/1403
+f 1252/2103/1383 1267/3197/1402 1268/2104/1404
+f 1261/2106/1386 1260/3198/1384 1275/2107/1403
+f 1254/2109/1387 1253/3199/1385 1268/2110/1404
+f 1261/2112/1386 1276/3200/1405 1277/2113/1407
+f 1255/2115/1389 1254/3201/1387 1269/2116/1406
+f 1266/2118/1409 1281/3202/1431 1282/2119/1410
+f 1274/2121/1401 1289/3203/1423 1290/2122/1411
+f 1268/2124/1404 1267/3204/1402 1282/2125/1410
+f 1276/2127/1405 1275/3205/1403 1290/2128/1411
+f 1268/2130/1404 1283/3206/1412 1284/2131/1414
+f 1277/2133/1407 1276/3207/1405 1291/2134/1413
+f 1270/2136/1408 1269/3208/1406 1284/2137/1414
+f 1277/2139/1407 1292/3209/1415 1293/2140/1417
+f 1270/2142/1408 1285/3210/1416 1286/2143/1418
+f 1278/2145/1395 1293/3211/1417 1294/2146/1419
+f 1272/2148/1398 1271/3212/1396 1286/2149/1418
+f 1279/2151/1397 1294/3213/1419 1295/2152/1421
+f 1273/2154/1400 1272/3214/1398 1287/2155/1420
+f 1273/2157/1400 1288/3215/1422 1289/2158/1423
+f 1285/2160/1416 1301/3216/1438 1302/2161/1424
+f 1294/2163/1419 1293/3217/1417 1309/2164/1425
+f 1287/2166/1420 1286/3218/1418 1302/2167/1424
+f 1294/2169/1419 1310/3219/1426 1311/2170/1428
+f 1287/2172/1420 1303/3220/1427 1304/2173/1429
+f 1289/2175/1423 1288/3221/1422 1304/2176/1429
+f 1281/2178/1431 1297/3222/1462 1298/2179/1432
+f 1289/2181/1423 1305/3223/1430 1306/2182/1433
+f 1283/2184/1412 1282/3224/1410 1298/2185/1432
+f 1291/2187/1413 1290/3225/1411 1306/2188/1433
+f 1283/2190/1412 1299/3226/1434 1300/2191/1436
+f 1291/2193/1413 1307/3227/1435 1308/2194/1437
+f 1285/2196/1416 1284/3228/1414 1300/2197/1436
+f 1292/2199/1415 1308/3229/1437 1309/2200/1425
+f 1305/2202/1430 1320/3230/1451 1321/2203/1439
+f 1298/2205/1432 1313/3231/1453 1314/2206/1440
+f 1307/2208/1435 1306/3232/1433 1321/2209/1439
+f 1299/2211/1434 1314/3233/1440 1315/2212/1442
+f 1307/2214/1435 1322/3234/1441 1323/2215/1443
+f 1301/2217/1438 1300/3235/1436 1315/2218/1442
+f 1308/2220/1437 1323/3236/1443 1324/2221/1445
+f 1301/2223/1438 1316/3237/1444 1317/2224/1446
+f 1309/2226/1425 1324/3238/1445 1325/2227/1447
+f 1303/2229/1427 1302/3239/1424 1317/2230/1446
+f 1311/2232/1428 1310/3240/1426 1325/2233/1447
+f 1304/2235/1429 1303/3241/1427 1318/2236/1448
+f 1304/2238/1429 1319/3242/1450 1320/2239/1451
+f 1298/2241/1432 1297/3243/1462 1312/2242/1452
+f 1324/2430/1445 857/3244/1011 858/2431/986
+f 1318/2433/1448 1317/3245/1446 850/2434/983
+f 1325/2436/1447 858/3246/986 859/2437/991
+f 1319/2439/1450 1318/3247/1448 851/2440/990
+f 1319/2448/1450 852/3248/994 853/2449/996
+f 1313/2451/1453 1312/3249/1452 845/2452/997
+f 1320/2454/1451 853/3250/996 854/2455/1000
+f 1314/2457/1440 1313/3251/1453 846/2458/999
+f 1321/2460/1439 854/3252/1000 855/2461/1005
+f 1315/2463/1442 1314/3253/1440 847/2464/1003
+f 1322/2466/1441 855/3254/1005 856/2467/1008
+f 1316/2469/1444 1315/3255/1442 848/2470/1007
+f 1323/2472/1443 856/3256/1008 857/2473/1011
+f 1317/2475/1446 1316/3257/1444 849/2476/1010
+s off
+f 1541/2478/1455 1547/3258/1455 1543/2479/1455
+f 1554/2481/597 1552/3259/597 1550/2482/597
+f 1545/2484/1233 1549/3260/1233 1542/2485/1233
+f 1332/2487/693 1551/3261/693 1548/2488/693
+f 1329/2490/994 1333/3262/994 1553/2491/994
+f 1327/2493/1105 1330/3263/1105 1334/2494/1105
diff --git a/3rdparty/bgfx/examples/assets/textures/parallax-d.png b/3rdparty/bgfx/examples/assets/textures/parallax-d.png
new file mode 100644
index 00000000000..19404b15711
--- /dev/null
+++ b/3rdparty/bgfx/examples/assets/textures/parallax-d.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/assets/textures/parallax-h.png b/3rdparty/bgfx/examples/assets/textures/parallax-h.png
new file mode 100644
index 00000000000..dc6caf0480f
--- /dev/null
+++ b/3rdparty/bgfx/examples/assets/textures/parallax-h.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/assets/textures/parallax-n.png b/3rdparty/bgfx/examples/assets/textures/parallax-n.png
new file mode 100644
index 00000000000..8b5537a487b
--- /dev/null
+++ b/3rdparty/bgfx/examples/assets/textures/parallax-n.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/assets/textures/textures.ninja b/3rdparty/bgfx/examples/assets/textures/textures.ninja
index fffb9c51d34..bc7f67c510f 100644
--- a/3rdparty/bgfx/examples/assets/textures/textures.ninja
+++ b/3rdparty/bgfx/examples/assets/textures/textures.ninja
@@ -5,3 +5,8 @@ build $textures/texture_compression_bc2.ktx: texturec_bc2 $pwd/texture_compres
build $textures/texture_compression_bc3.ktx: texturec_bc3 $pwd/texture_compression.png
build $textures/texture_compression_etc1.ktx: texturec_etc1 $pwd/texture_compression.png
build $textures/texture_compression_etc2.ktx: texturec_etc2 $pwd/texture_compression.png
+
+build $textures/parallax-d.ktx: texturec_diffuse $pwd/parallax-d.png
+build $textures/parallax-n.ktx: texturec_normal $pwd/parallax-n.png
+build $textures/parallax-h.ktx: texturec_height $pwd/parallax-h.png
+build $textures/lightmap.ktx: texturec_height $pwd/../sky/lightmap.png
diff --git a/3rdparty/bgfx/examples/common/bgfx_utils.cpp b/3rdparty/bgfx/examples/common/bgfx_utils.cpp
index edea94caf27..befcd32505b 100644
--- a/3rdparty/bgfx/examples/common/bgfx_utils.cpp
+++ b/3rdparty/bgfx/examples/common/bgfx_utils.cpp
@@ -13,7 +13,7 @@ namespace stl = tinystl;
#include <bgfx/bgfx.h>
#include <bx/commandline.h>
#include <bx/endian.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include <bx/readerwriter.h>
#include <bx/string.h>
#include "entry/entry.h"
@@ -21,6 +21,8 @@ namespace stl = tinystl;
#include "bgfx_utils.h"
+#include <bimg/decode.h>
+
void* load(bx::FileReaderI* _reader, bx::AllocatorI* _allocator, const char* _filePath, uint32_t* _size)
{
if (bx::open(_reader, _filePath) )
@@ -117,11 +119,14 @@ static bgfx::ShaderHandle loadShader(bx::FileReaderI* _reader, const char* _name
break;
}
- bx::strlncpy(filePath, BX_COUNTOF(filePath), shaderPath);
- bx::strlncat(filePath, BX_COUNTOF(filePath), _name);
- bx::strlncat(filePath, BX_COUNTOF(filePath), ".bin");
+ bx::strCopy(filePath, BX_COUNTOF(filePath), shaderPath);
+ bx::strCat(filePath, BX_COUNTOF(filePath), _name);
+ bx::strCat(filePath, BX_COUNTOF(filePath), ".bin");
+
+ bgfx::ShaderHandle handle = bgfx::createShader(loadMem(_reader, filePath) );
+ bgfx::setName(handle, filePath);
- return bgfx::createShader(loadMem(_reader, filePath) );
+ return handle;
}
bgfx::ShaderHandle loadShader(const char* _name)
@@ -149,11 +154,11 @@ bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName)
static void imageReleaseCb(void* _ptr, void* _userData)
{
BX_UNUSED(_ptr);
- bgfx::ImageContainer* imageContainer = (bgfx::ImageContainer*)_userData;
- bgfx::imageFree(imageContainer);
+ bimg::ImageContainer* imageContainer = (bimg::ImageContainer*)_userData;
+ bimg::imageFree(imageContainer);
}
-bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath, uint32_t _flags, uint8_t _skip, bgfx::TextureInfo* _info)
+bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath, uint32_t _flags, uint8_t _skip, bgfx::TextureInfo* _info, bimg::Orientation::Enum* _orientation)
{
BX_UNUSED(_skip);
bgfx::TextureHandle handle = BGFX_INVALID_HANDLE;
@@ -162,10 +167,15 @@ bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath,
void* data = load(_reader, entry::getAllocator(), _filePath, &size);
if (NULL != data)
{
- bgfx::ImageContainer* imageContainer = bgfx::imageParse(entry::getAllocator(), data, size);
+ bimg::ImageContainer* imageContainer = bimg::imageParse(entry::getAllocator(), data, size);
if (NULL != imageContainer)
{
+ if (NULL != _orientation)
+ {
+ *_orientation = imageContainer->m_orientation;
+ }
+
const bgfx::Memory* mem = bgfx::makeRef(
imageContainer->m_data
, imageContainer->m_size
@@ -180,7 +190,19 @@ bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath,
uint16_t(imageContainer->m_width)
, 1 < imageContainer->m_numMips
, imageContainer->m_numLayers
- , imageContainer->m_format
+ , bgfx::TextureFormat::Enum(imageContainer->m_format)
+ , _flags
+ , mem
+ );
+ }
+ else if (1 < imageContainer->m_depth)
+ {
+ handle = bgfx::createTexture3D(
+ uint16_t(imageContainer->m_width)
+ , uint16_t(imageContainer->m_height)
+ , uint16_t(imageContainer->m_depth)
+ , 1 < imageContainer->m_numMips
+ , bgfx::TextureFormat::Enum(imageContainer->m_format)
, _flags
, mem
);
@@ -192,23 +214,25 @@ bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath,
, uint16_t(imageContainer->m_height)
, 1 < imageContainer->m_numMips
, imageContainer->m_numLayers
- , imageContainer->m_format
+ , bgfx::TextureFormat::Enum(imageContainer->m_format)
, _flags
, mem
);
}
+ bgfx::setName(handle, _filePath);
+
if (NULL != _info)
{
bgfx::calcTextureSize(
*_info
, uint16_t(imageContainer->m_width)
, uint16_t(imageContainer->m_height)
- , 0
- , false
- , false
- , 1
- , imageContainer->m_format
+ , uint16_t(imageContainer->m_depth)
+ , imageContainer->m_cubeMap
+ , 1 < imageContainer->m_numMips
+ , imageContainer->m_numLayers
+ , bgfx::TextureFormat::Enum(imageContainer->m_format)
);
}
}
@@ -217,17 +241,17 @@ bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath,
return handle;
}
-bgfx::TextureHandle loadTexture(const char* _name, uint32_t _flags, uint8_t _skip, bgfx::TextureInfo* _info)
+bgfx::TextureHandle loadTexture(const char* _name, uint32_t _flags, uint8_t _skip, bgfx::TextureInfo* _info, bimg::Orientation::Enum* _orientation)
{
- return loadTexture(entry::getFileReader(), _name, _flags, _skip, _info);
+ return loadTexture(entry::getFileReader(), _name, _flags, _skip, _info, _orientation);
}
-bgfx::ImageContainer* imageLoad(const char* _filePath, bgfx::TextureFormat::Enum _dstFormat)
+bimg::ImageContainer* imageLoad(const char* _filePath, bgfx::TextureFormat::Enum _dstFormat)
{
uint32_t size = 0;
void* data = loadMem(entry::getFileReader(), entry::getAllocator(), _filePath, &size);
- return bgfx::imageParse(entry::getAllocator(), data, size, _dstFormat);
+ return bimg::imageParse(entry::getAllocator(), data, size, bimg::TextureFormat::Enum(_dstFormat) );
}
void calcTangents(void* _vertices, uint16_t _numVertices, bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices)
@@ -371,8 +395,8 @@ struct Group
void reset()
{
- m_vbh.idx = bgfx::invalidHandle;
- m_ibh.idx = bgfx::invalidHandle;
+ m_vbh.idx = bgfx::kInvalidHandle;
+ m_ibh.idx = bgfx::kInvalidHandle;
m_prims.clear();
}
@@ -513,17 +537,17 @@ struct Mesh
for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it)
{
const Group& group = *it;
- bgfx::destroyVertexBuffer(group.m_vbh);
+ bgfx::destroy(group.m_vbh);
if (bgfx::isValid(group.m_ibh) )
{
- bgfx::destroyIndexBuffer(group.m_ibh);
+ bgfx::destroy(group.m_ibh);
}
}
m_groups.clear();
}
- void submit(uint8_t _id, bgfx::ProgramHandle _program, const float* _mtx, uint64_t _state) const
+ void submit(bgfx::ViewId _id, bgfx::ProgramHandle _program, const float* _mtx, uint64_t _state) const
{
if (BGFX_STATE_MASK == _state)
{
@@ -545,7 +569,7 @@ struct Mesh
const Group& group = *it;
bgfx::setIndexBuffer(group.m_ibh);
- bgfx::setVertexBuffer(group.m_vbh);
+ bgfx::setVertexBuffer(0, group.m_vbh);
bgfx::submit(_id, _program, 0, it != itEnd-1);
}
}
@@ -576,7 +600,7 @@ struct Mesh
const Group& group = *it;
bgfx::setIndexBuffer(group.m_ibh);
- bgfx::setVertexBuffer(group.m_vbh);
+ bgfx::setVertexBuffer(0, group.m_vbh);
bgfx::submit(state.m_viewId, state.m_program, 0, it != itEnd-1);
}
}
@@ -624,7 +648,7 @@ void meshStateDestroy(MeshState* _meshState)
BX_FREE(entry::getAllocator(), _meshState);
}
-void meshSubmit(const Mesh* _mesh, uint8_t _id, bgfx::ProgramHandle _program, const float* _mtx, uint64_t _state)
+void meshSubmit(const Mesh* _mesh, bgfx::ViewId _id, bgfx::ProgramHandle _program, const float* _mtx, uint64_t _state)
{
_mesh->submit(_id, _program, _mtx, _state);
}
@@ -634,7 +658,7 @@ void meshSubmit(const Mesh* _mesh, const MeshState*const* _state, uint8_t _numPa
_mesh->submit(_state, _numPasses, _mtx, _numMatrices);
}
-Args::Args(int _argc, char** _argv)
+Args::Args(int _argc, const char* const* _argv)
: m_type(bgfx::RendererType::Count)
, m_pciId(BGFX_PCI_ID_NONE)
{
diff --git a/3rdparty/bgfx/examples/common/bgfx_utils.h b/3rdparty/bgfx/examples/common/bgfx_utils.h
index f948d1bfac2..5fba167bc85 100644
--- a/3rdparty/bgfx/examples/common/bgfx_utils.h
+++ b/3rdparty/bgfx/examples/common/bgfx_utils.h
@@ -6,8 +6,9 @@
#ifndef BGFX_UTILS_H_HEADER_GUARD
#define BGFX_UTILS_H_HEADER_GUARD
+#include <bx/pixelformat.h>
#include <bgfx/bgfx.h>
-#include "image.h"
+#include <bimg/bimg.h>
///
void* load(const char* _filePath, uint32_t* _size = NULL);
@@ -22,10 +23,10 @@ bgfx::ShaderHandle loadShader(const char* _name);
bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName);
///
-bgfx::TextureHandle loadTexture(const char* _name, uint32_t _flags = BGFX_TEXTURE_NONE, uint8_t _skip = 0, bgfx::TextureInfo* _info = NULL);
+bgfx::TextureHandle loadTexture(const char* _name, uint32_t _flags = BGFX_TEXTURE_NONE, uint8_t _skip = 0, bgfx::TextureInfo* _info = NULL, bimg::Orientation::Enum* _orientation = NULL);
///
-bgfx::ImageContainer* imageLoad(const char* _filePath, bgfx::TextureFormat::Enum _dstFormat);
+bimg::ImageContainer* imageLoad(const char* _filePath, bgfx::TextureFormat::Enum _dstFormat);
///
void calcTangents(void* _vertices, uint16_t _numVertices, bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices);
@@ -45,6 +46,21 @@ inline bool checkAvailTransientBuffers(uint32_t _numVertices, const bgfx::Vertex
}
///
+inline uint32_t encodeNormalRgba8(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f)
+{
+ const float src[] =
+ {
+ _x * 0.5f + 0.5f,
+ _y * 0.5f + 0.5f,
+ _z * 0.5f + 0.5f,
+ _w * 0.5f + 0.5f,
+ };
+ uint32_t dst;
+ bx::packRgba8(&dst, src);
+ return dst;
+}
+
+///
struct MeshState
{
struct Texture
@@ -59,7 +75,7 @@ struct MeshState
uint64_t m_state;
bgfx::ProgramHandle m_program;
uint8_t m_numTextures;
- uint8_t m_viewId;
+ bgfx::ViewId m_viewId;
};
struct Mesh;
@@ -77,7 +93,7 @@ MeshState* meshStateCreate();
void meshStateDestroy(MeshState* _meshState);
///
-void meshSubmit(const Mesh* _mesh, uint8_t _id, bgfx::ProgramHandle _program, const float* _mtx, uint64_t _state = BGFX_STATE_MASK);
+void meshSubmit(const Mesh* _mesh, bgfx::ViewId _id, bgfx::ProgramHandle _program, const float* _mtx, uint64_t _state = BGFX_STATE_MASK);
///
void meshSubmit(const Mesh* _mesh, const MeshState*const* _state, uint8_t _numPasses, const float* _mtx, uint16_t _numMatrices = 1);
@@ -85,7 +101,7 @@ void meshSubmit(const Mesh* _mesh, const MeshState*const* _state, uint8_t _numPa
///
struct Args
{
- Args(int _argc, char** _argv);
+ Args(int _argc, const char* const* _argv);
bgfx::RendererType::Enum m_type;
uint16_t m_pciId;
diff --git a/3rdparty/bgfx/examples/common/bounds.cpp b/3rdparty/bgfx/examples/common/bounds.cpp
index 0240da2861e..b8cfc54168e 100644
--- a/3rdparty/bgfx/examples/common/bounds.cpp
+++ b/3rdparty/bgfx/examples/common/bounds.cpp
@@ -4,7 +4,7 @@
*/
#include <bx/rng.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include "bounds.h"
void aabbToObb(Obb& _obb, const Aabb& _aabb)
@@ -19,6 +19,28 @@ void aabbToObb(Obb& _obb, const Aabb& _aabb)
_obb.m_mtx[15] = 1.0f;
}
+void toAabb(Aabb& _aabb, const Obb& _obb)
+{
+ float xyz[3] = { 1.0f, 1.0f, 1.0f };
+
+ float tmp[3];
+ bx::vec3MulMtx(tmp, xyz, _obb.m_mtx);
+
+ bx::vec3Move(_aabb.m_min, tmp);
+ bx::vec3Move(_aabb.m_max, tmp);
+
+ for (uint32_t ii = 1; ii < 8; ++ii)
+ {
+ xyz[0] = ii & 1 ? -1.0f : 1.0f;
+ xyz[1] = ii & 2 ? -1.0f : 1.0f;
+ xyz[2] = ii & 4 ? -1.0f : 1.0f;
+ bx::vec3MulMtx(tmp, xyz, _obb.m_mtx);
+
+ bx::vec3Min(_aabb.m_min, _aabb.m_min, tmp);
+ bx::vec3Max(_aabb.m_max, _aabb.m_max, tmp);
+ }
+}
+
void toAabb(Aabb& _aabb, const Sphere& _sphere)
{
float radius = _sphere.m_radius;
@@ -216,7 +238,7 @@ void calcObb(Obb& _obb, const void* _vertices, uint32_t _numVertices, uint32_t _
Obb best;
aabbToObb(best, aabb);
- float angleStep = float(bx::piHalf/_steps);
+ float angleStep = float(bx::kPiHalf/_steps);
float ax = 0.0f;
float mtx[16];
@@ -469,7 +491,7 @@ inline void getPointAt(float* _result, const Ray& _ray, float _t)
bx::vec3Add(_result, _ray.m_pos, tmp);
}
-bool intersect(const Ray& _ray, const Aabb& _aabb, Intersection* _intersection)
+bool intersect(const Ray& _ray, const Aabb& _aabb, Hit* _hit)
{
float invDir[3];
bx::vec3Rcp(invDir, _ray.m_dir);
@@ -499,39 +521,80 @@ bool intersect(const Ray& _ray, const Aabb& _aabb, Intersection* _intersection)
return false;
}
- if (NULL != _intersection)
+ if (NULL != _hit)
{
- _intersection->m_normal[0] = float( (min[0] == tmin) - (max[0] == tmin) );
- _intersection->m_normal[1] = float( (min[1] == tmin) - (max[1] == tmin) );
- _intersection->m_normal[2] = float( (min[2] == tmin) - (max[2] == tmin) );
+ _hit->m_normal[0] = float( (t1[0] == tmin) - (t0[0] == tmin) );
+ _hit->m_normal[1] = float( (t1[1] == tmin) - (t0[1] == tmin) );
+ _hit->m_normal[2] = float( (t1[2] == tmin) - (t0[2] == tmin) );
- _intersection->m_dist = tmin;
- getPointAt(_intersection->m_pos, _ray, tmin);
+ _hit->m_dist = tmin;
+ getPointAt(_hit->m_pos, _ray, tmin);
}
return true;
}
-bool intersect(const Ray& _ray, const Disk& _disk, Intersection* _intersection)
+static const Aabb s_kUnitAabb =
+{
+ { -1.0f, -1.0f, -1.0f },
+ { 1.0f, 1.0f, 1.0f },
+};
+
+bool intersect(const Ray& _ray, const Obb& _obb, Hit* _hit)
+{
+ Aabb aabb;
+ toAabb(aabb, _obb);
+
+ if (!intersect(_ray, aabb) )
+ {
+ return false;
+ }
+
+ float mtxInv[16];
+ bx::mtxInverse(mtxInv, _obb.m_mtx);
+
+ Ray obbRay;
+ bx::vec3MulMtx(obbRay.m_pos, _ray.m_pos, mtxInv);
+ bx::vec3MulMtxXyz0(obbRay.m_dir, _ray.m_dir, mtxInv);
+
+ if (intersect(obbRay, s_kUnitAabb, _hit) )
+ {
+ if (NULL != _hit)
+ {
+ float tmp[3];
+ bx::vec3MulMtx(tmp, _hit->m_pos, _obb.m_mtx);
+ bx::vec3Move(_hit->m_pos, tmp);
+
+ bx::vec3MulMtxXyz0(tmp, _hit->m_normal, _obb.m_mtx);
+ bx::vec3Norm(_hit->m_normal, tmp);
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+bool intersect(const Ray& _ray, const Disk& _disk, Hit* _hit)
{
Plane plane;
bx::vec3Move(plane.m_normal, _disk.m_normal);
plane.m_dist = -bx::vec3Dot(_disk.m_center, _disk.m_normal);
- Intersection tmpIntersection;
- _intersection = NULL != _intersection ? _intersection : &tmpIntersection;
+ Hit tmpHit;
+ _hit = NULL != _hit ? _hit : &tmpHit;
- if (intersect(_ray, plane, _intersection) )
+ if (intersect(_ray, plane, _hit) )
{
float tmp[3];
- bx::vec3Sub(tmp, _disk.m_center, _intersection->m_pos);
+ bx::vec3Sub(tmp, _disk.m_center, _hit->m_pos);
return bx::vec3Dot(tmp, tmp) <= bx::fsq(_disk.m_radius);
}
return false;
}
-bool intersect(const Ray& _ray, const Cylinder& _cylinder, bool _capsule, Intersection* _intersection)
+static bool intersect(const Ray& _ray, const Cylinder& _cylinder, bool _capsule, Hit* _hit)
{
float axis[3];
bx::vec3Sub(axis, _cylinder.m_end, _cylinder.m_pos);
@@ -543,7 +606,7 @@ bool intersect(const Ray& _ray, const Cylinder& _cylinder, bool _capsule, Inters
bx::vec3Cross(normal, _ray.m_dir, axis);
const float len = bx::vec3Norm(normal, normal);
- const float dist = bx::fabsolute(bx::vec3Dot(rc, normal) );
+ const float dist = bx::fabs(bx::vec3Dot(rc, normal) );
if (dist > _cylinder.m_radius)
{
@@ -559,7 +622,12 @@ bool intersect(const Ray& _ray, const Cylinder& _cylinder, bool _capsule, Inters
const float rsq = bx::fsq(_cylinder.m_radius);
const float ddoto = bx::vec3Dot(_ray.m_dir, vo);
- const float ss = t0 - bx::fabsolute(bx::fsqrt(rsq - bx::fsq(dist) ) / ddoto);
+ const float ss = t0 - bx::fabs(bx::fsqrt(rsq - bx::fsq(dist) ) / ddoto);
+
+ if (0.0f > ss)
+ {
+ return false;
+ }
float point[3];
getPointAt(point, _ray, ss);
@@ -571,19 +639,19 @@ bool intersect(const Ray& _ray, const Cylinder& _cylinder, bool _capsule, Inters
if (height > 0.0f
&& height < axisLen)
{
- if (NULL != _intersection)
+ if (NULL != _hit)
{
const float t1 = height / axisLen;
float pointOnAxis[3];
bx::vec3Lerp(pointOnAxis, _cylinder.m_pos, _cylinder.m_end, t1);
- bx::vec3Move(_intersection->m_pos, point);
+ bx::vec3Move(_hit->m_pos, point);
float tmp[3];
bx::vec3Sub(tmp, point, pointOnAxis);
- bx::vec3Norm(_intersection->m_normal, tmp);
+ bx::vec3Norm(_hit->m_normal, tmp);
- _intersection->m_dist = ss;
+ _hit->m_dist = ss;
}
return true;
@@ -615,7 +683,7 @@ bool intersect(const Ray& _ray, const Cylinder& _cylinder, bool _capsule, Inters
: _cylinder.m_end
);
- return intersect(_ray, sphere, _intersection);
+ return intersect(_ray, sphere, _hit);
}
Plane plane;
@@ -634,20 +702,120 @@ bool intersect(const Ray& _ray, const Cylinder& _cylinder, bool _capsule, Inters
plane.m_dist = -bx::vec3Dot(pos, plane.m_normal);
- Intersection tmpIntersection;
- _intersection = NULL != _intersection ? _intersection : &tmpIntersection;
+ Hit tmpHit;
+ _hit = NULL != _hit ? _hit : &tmpHit;
- if (intersect(_ray, plane, _intersection) )
+ if (intersect(_ray, plane, _hit) )
{
float tmp[3];
- bx::vec3Sub(tmp, pos, _intersection->m_pos);
+ bx::vec3Sub(tmp, pos, _hit->m_pos);
return bx::vec3Dot(tmp, tmp) <= rsq;
}
return false;
}
-bool intersect(const Ray& _ray, const Plane& _plane, Intersection* _intersection)
+bool intersect(const Ray& _ray, const Cylinder& _cylinder, Hit* _hit)
+{
+ return intersect(_ray, _cylinder, false, _hit);
+}
+
+bool intersect(const Ray& _ray, const Capsule& _capsule, Hit* _hit)
+{
+ BX_STATIC_ASSERT(sizeof(Capsule) == sizeof(Cylinder) );
+ return intersect(_ray, *( (const Cylinder*)&_capsule), true, _hit);
+}
+
+bool intersect(const Ray& _ray, const Cone& _cone, Hit* _hit)
+{
+ float axis[3];
+ bx::vec3Sub(axis, _cone.m_pos, _cone.m_end);
+
+ float normal[3];
+ const float len = bx::vec3Norm(normal, axis);
+
+ Disk disk;
+ bx::vec3Move(disk.m_center, _cone.m_pos);
+ bx::vec3Move(disk.m_normal, normal);
+ disk.m_radius = _cone.m_radius;
+
+ Hit tmpInt;
+ Hit* out = NULL != _hit ? _hit : &tmpInt;
+ bool hit = intersect(_ray, disk, out);
+
+ float ro[3];
+ bx::vec3Sub(ro, _ray.m_pos, _cone.m_end);
+
+ const float hyp = bx::fsqrt(bx::fsq(_cone.m_radius) + bx::fsq(len) );
+ const float cosaSq = bx::fsq(len/hyp);
+ const float ndoto = bx::vec3Dot(normal, ro);
+ const float ndotd = bx::vec3Dot(normal, _ray.m_dir);
+
+ const float aa = bx::fsq(ndotd) - cosaSq;
+ const float bb = 2.0f * (ndotd*ndoto - bx::vec3Dot(_ray.m_dir, ro)*cosaSq);
+ const float cc = bx::fsq(ndoto) - bx::vec3Dot(ro, ro)*cosaSq;
+
+ float det = bb*bb - 4.0f*aa*cc;
+
+ if (0.0f > det)
+ {
+ return hit;
+ }
+
+ det = bx::fsqrt(det);
+ const float invA2 = 1.0f / (2.0f*aa);
+ const float t1 = (-bb - det) * invA2;
+ const float t2 = (-bb + det) * invA2;
+
+ float tt = t1;
+ if (0.0f > t1
+ || (0.0f < t2 && t2 < t1) )
+ {
+ tt = t2;
+ }
+
+ if (0.0f > tt)
+ {
+ return hit;
+ }
+
+ float hitPos[3];
+ getPointAt(hitPos, _ray, tt);
+
+ float point[3];
+ bx::vec3Sub(point, hitPos, _cone.m_end);
+
+ const float hh = bx::vec3Dot(normal, point);
+
+ if (0.0f > hh
+ || len < hh)
+ {
+ return hit;
+ }
+
+ if (NULL != _hit)
+ {
+ if (!hit
+ || tt < _hit->m_dist)
+ {
+ _hit->m_dist = tt;
+
+ bx::vec3Move(_hit->m_pos, hitPos);
+
+ const float scale = hh / bx::vec3Dot(point, point);
+ float pointScaled[3];
+ bx::vec3Mul(pointScaled, point, scale);
+
+ float tmp[3];
+ bx::vec3Sub(tmp, pointScaled, normal);
+ bx::vec3Norm(_hit->m_normal, tmp);
+ }
+ }
+
+ return true;
+}
+
+bool intersect(const Ray& _ray, const Plane& _plane, Hit* _hit)
{
float equation = bx::vec3Dot(_ray.m_pos, _plane.m_normal) + _plane.m_dist;
if (0.0f > equation)
@@ -661,20 +829,20 @@ bool intersect(const Ray& _ray, const Plane& _plane, Intersection* _intersection
return false;
}
- if (NULL != _intersection)
+ if (NULL != _hit)
{
- bx::vec3Move(_intersection->m_normal, _plane.m_normal);
+ bx::vec3Move(_hit->m_normal, _plane.m_normal);
float tt = -equation/ndotd;
- _intersection->m_dist = tt;
+ _hit->m_dist = tt;
- getPointAt(_intersection->m_pos, _ray, tt);
+ getPointAt(_hit->m_pos, _ray, tt);
}
return true;
}
-bool intersect(const Ray& _ray, const Sphere& _sphere, Intersection* _intersection)
+bool intersect(const Ray& _ray, const Sphere& _sphere, Hit* _hit)
{
float rs[3];
bx::vec3Sub(rs, _ray.m_pos, _sphere.m_center);
@@ -704,23 +872,23 @@ bool intersect(const Ray& _ray, const Sphere& _sphere, Intersection* _intersecti
return false;
}
- if (NULL != _intersection)
+ if (NULL != _hit)
{
- _intersection->m_dist = tt;
+ _hit->m_dist = tt;
float point[3];
getPointAt(point, _ray, tt);
- bx::vec3Move(_intersection->m_pos, point);
+ bx::vec3Move(_hit->m_pos, point);
float tmp[3];
bx::vec3Sub(tmp, point, _sphere.m_center);
- bx::vec3Norm(_intersection->m_normal, tmp);
+ bx::vec3Norm(_hit->m_normal, tmp);
}
return true;
}
-bool intersect(const Ray& _ray, const Tris& _triangle, Intersection* _intersection)
+bool intersect(const Ray& _ray, const Tris& _triangle, Hit* _hit)
{
float edge10[3];
bx::vec3Sub(edge10, _triangle.m_v1, _triangle.m_v0);
@@ -754,14 +922,14 @@ bool intersect(const Ray& _ray, const Tris& _triangle, Intersection* _intersecti
return false;
}
- if (NULL != _intersection)
+ if (NULL != _hit)
{
- bx::vec3Norm(_intersection->m_normal, normal);
+ bx::vec3Norm(_hit->m_normal, normal);
const float tt = bx::vec3Dot(normal, vo) * invDet;
- _intersection->m_dist = tt;
+ _hit->m_dist = tt;
- getPointAt(_intersection->m_pos, _ray, tt);
+ getPointAt(_hit->m_pos, _ray, tt);
}
return true;
diff --git a/3rdparty/bgfx/examples/common/bounds.h b/3rdparty/bgfx/examples/common/bounds.h
index 604892c3fef..ef6cd94b41f 100644
--- a/3rdparty/bgfx/examples/common/bounds.h
+++ b/3rdparty/bgfx/examples/common/bounds.h
@@ -19,6 +19,20 @@ struct Cylinder
float m_radius;
};
+struct Capsule
+{
+ float m_pos[3];
+ float m_end[3];
+ float m_radius;
+};
+
+struct Cone
+{
+ float m_pos[3];
+ float m_end[3];
+ float m_radius;
+};
+
struct Disk
{
float m_center[3];
@@ -56,7 +70,7 @@ struct Tris
float m_v2[3];
};
-struct Intersection
+struct Hit
{
float m_pos[3];
float m_normal[3];
@@ -66,6 +80,9 @@ struct Intersection
/// Convert axis aligned bounding box to oriented bounding box.
void aabbToObb(Obb& _obb, const Aabb& _aabb);
+/// Convert oriented bounding box to axis aligned bounding box.
+void toAabb(Aabb& _aabb, const Obb& _obb);
+
/// Convert sphere to axis aligned bounding box.
void toAabb(Aabb& _aabb, const Sphere& _sphere);
@@ -112,22 +129,31 @@ void intersectPlanes(float _result[3], const Plane& _pa, const Plane& _pb, const
/// Make screen space ray from x, y coordinate and inverse view-projection matrix.
Ray makeRay(float _x, float _y, const float* _invVp);
-/// Intersect ray / aabb.
-bool intersect(const Ray& _ray, const Aabb& _aabb, Intersection* _intersection = NULL);
+/// Intersect ray / AABB.
+bool intersect(const Ray& _ray, const Aabb& _aabb, Hit* _hit = NULL);
+
+/// Intersect ray / OBB.
+bool intersect(const Ray& _ray, const Obb& _obb, Hit* _hit = NULL);
/// Intersect ray / cylinder.
-bool intersect(const Ray& _ray, const Cylinder& _cylinder, bool _capsule, Intersection* _intersection = NULL);
+bool intersect(const Ray& _ray, const Cylinder& _cylinder, Hit* _hit = NULL);
+
+/// Intersect ray / capsule.
+bool intersect(const Ray& _ray, const Capsule& _capsule, Hit* _hit = NULL);
+
+/// Intersect ray / cone.
+bool intersect(const Ray& _ray, const Cone& _cone, Hit* _hit = NULL);
/// Intersect ray / disk.
-bool intersect(const Ray& _ray, const Disk& _disk, Intersection* _intersection = NULL);
+bool intersect(const Ray& _ray, const Disk& _disk, Hit* _hit = NULL);
/// Intersect ray / plane.
-bool intersect(const Ray& _ray, const Plane& _plane, Intersection* _intersection = NULL);
+bool intersect(const Ray& _ray, const Plane& _plane, Hit* _hit = NULL);
/// Intersect ray / sphere.
-bool intersect(const Ray& _ray, const Sphere& _sphere, Intersection* _intersection = NULL);
+bool intersect(const Ray& _ray, const Sphere& _sphere, Hit* _hit = NULL);
/// Intersect ray / triangle.
-bool intersect(const Ray& _ray, const Tris& _triangle, Intersection* _intersection = NULL);
+bool intersect(const Ray& _ray, const Tris& _triangle, Hit* _hit = NULL);
#endif // BOUNDS_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/examples/common/camera.cpp b/3rdparty/bgfx/examples/common/camera.cpp
index a2a1c31dc78..14f93d52cde 100644
--- a/3rdparty/bgfx/examples/common/camera.cpp
+++ b/3rdparty/bgfx/examples/common/camera.cpp
@@ -4,7 +4,7 @@
*/
#include <bx/timer.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include "camera.h"
#include "entry/entry.h"
#include "entry/cmd.h"
@@ -15,32 +15,32 @@ int cmdMove(CmdContext* /*_context*/, void* /*_userData*/, int _argc, char const
{
if (_argc > 1)
{
- if (0 == bx::strncmp(_argv[1], "forward") )
+ if (0 == bx::strCmp(_argv[1], "forward") )
{
cameraSetKeyState(CAMERA_KEY_FORWARD, true);
return 0;
}
- else if (0 == bx::strncmp(_argv[1], "left") )
+ else if (0 == bx::strCmp(_argv[1], "left") )
{
cameraSetKeyState(CAMERA_KEY_LEFT, true);
return 0;
}
- else if (0 == bx::strncmp(_argv[1], "right") )
+ else if (0 == bx::strCmp(_argv[1], "right") )
{
cameraSetKeyState(CAMERA_KEY_RIGHT, true);
return 0;
}
- else if (0 == bx::strncmp(_argv[1], "backward") )
+ else if (0 == bx::strCmp(_argv[1], "backward") )
{
cameraSetKeyState(CAMERA_KEY_BACKWARD, true);
return 0;
}
- else if (0 == bx::strncmp(_argv[1], "up") )
+ else if (0 == bx::strCmp(_argv[1], "up") )
{
cameraSetKeyState(CAMERA_KEY_UP, true);
return 0;
}
- else if (0 == bx::strncmp(_argv[1], "down") )
+ else if (0 == bx::strCmp(_argv[1], "down") )
{
cameraSetKeyState(CAMERA_KEY_DOWN, true);
return 0;
@@ -173,9 +173,9 @@ struct Camera
float right[3] =
{
- bx::fsin(m_horizontalAngle - bx::piHalf),
+ bx::fsin(m_horizontalAngle - bx::kPiHalf),
0,
- bx::fcos(m_horizontalAngle - bx::piHalf),
+ bx::fcos(m_horizontalAngle - bx::kPiHalf),
};
float up[3];
diff --git a/3rdparty/bgfx/examples/common/common.h b/3rdparty/bgfx/examples/common/common.h
index b53aba26908..19c71c2a2a5 100644
--- a/3rdparty/bgfx/examples/common/common.h
+++ b/3rdparty/bgfx/examples/common/common.h
@@ -7,7 +7,7 @@
#define COMMON_H_HEADER_GUARD
#include <bx/timer.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include "entry/entry.h"
diff --git a/3rdparty/bgfx/examples/common/cube_atlas.cpp b/3rdparty/bgfx/examples/common/cube_atlas.cpp
index 481e9781688..c112969843f 100644
--- a/3rdparty/bgfx/examples/common/cube_atlas.cpp
+++ b/3rdparty/bgfx/examples/common/cube_atlas.cpp
@@ -306,7 +306,7 @@ Atlas::Atlas(uint16_t _textureSize, const uint8_t* _textureBuffer, uint16_t _reg
Atlas::~Atlas()
{
- bgfx::destroyTexture(m_textureHandle);
+ bgfx::destroy(m_textureHandle);
delete [] m_layers;
delete [] m_regions;
diff --git a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp
index 7565966ece4..3418dd96fec 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp
+++ b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp
@@ -9,10 +9,9 @@
#include "../bgfx_utils.h"
#include "../packrect.h"
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include <bx/sort.h>
#include <bx/uint32_t.h>
-#include <bx/crtimpl.h>
#include <bx/handlealloc.h>
struct DebugVertex
@@ -138,8 +137,8 @@ static void squircle(float* _out, float _angle)
{
float sa = bx::fsin(_angle);
float ca = bx::fcos(_angle);
- _out[0] = bx::fsqrt(bx::fabsolute(sa) ) * bx::fsign(sa);
- _out[1] = bx::fsqrt(bx::fabsolute(ca) ) * bx::fsign(ca);
+ _out[0] = bx::fsqrt(bx::fabs(sa) ) * bx::fsign(sa);
+ _out[1] = bx::fsqrt(bx::fabs(ca) ) * bx::fsign(ca);
}
uint32_t genSphere(uint8_t _subdiv0, void* _pos0 = NULL, uint16_t _posStride0 = 0, void* _normals0 = NULL, uint16_t _normalStride0 = 0)
@@ -295,7 +294,6 @@ void getPoint(float* _result, Axis::Enum _axis, float _x, float _y)
}
}
-
#include "vs_debugdraw_lines.bin.h"
#include "fs_debugdraw_lines.bin.h"
#include "vs_debugdraw_lines_stipple.bin.h"
@@ -335,7 +333,7 @@ struct SpriteT
SpriteHandle create(uint16_t _width, uint16_t _height)
{
- SpriteHandle handle = { bx::HandleAlloc::invalid };
+ SpriteHandle handle = { bx::kInvalidHandle };
if (m_handleAlloc.getNumHandles() < m_handleAlloc.getMaxHandles() )
{
@@ -380,13 +378,11 @@ struct DebugDraw
m_allocator = _allocator;
m_depthTestLess = _depthTestLess;
-#if BX_CONFIG_ALLOCATOR_CRT
if (NULL == _allocator)
{
- static bx::CrtAllocator allocator;
+ static bx::DefaultAllocator allocator;
m_allocator = &allocator;
}
-#endif // BX_CONFIG_ALLOCATOR_CRT
DebugVertex::init();
DebugUvVertex::init();
@@ -394,40 +390,35 @@ struct DebugDraw
bgfx::RendererType::Enum type = bgfx::getRendererType();
- m_program[Program::Lines] =
- bgfx::createProgram(
- bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_lines")
- , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_lines")
- , true
- );
+ m_program[Program::Lines] = bgfx::createProgram(
+ bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_lines")
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_lines")
+ , true
+ );
- m_program[Program::LinesStipple] =
- bgfx::createProgram(
- bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_lines_stipple")
- , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_lines_stipple")
- , true
- );
+ m_program[Program::LinesStipple] = bgfx::createProgram(
+ bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_lines_stipple")
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_lines_stipple")
+ , true
+ );
- m_program[Program::Fill] =
- bgfx::createProgram(
- bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_fill")
- , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_fill")
- , true
- );
+ m_program[Program::Fill] = bgfx::createProgram(
+ bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_fill")
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_fill")
+ , true
+ );
- m_program[Program::FillLit] =
- bgfx::createProgram(
- bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_fill_lit")
- , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_fill_lit")
- , true
- );
+ m_program[Program::FillLit] = bgfx::createProgram(
+ bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_fill_lit")
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_fill_lit")
+ , true
+ );
- m_program[Program::FillTexture] =
- bgfx::createProgram(
- bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_fill_texture")
- , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_fill_texture")
- , true
- );
+ m_program[Program::FillTexture] = bgfx::createProgram(
+ bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_debugdraw_fill_texture")
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_debugdraw_fill_texture")
+ , true
+ );
u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4, 4);
s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
@@ -458,24 +449,26 @@ struct DebugDraw
trilist[ii] = uint16_t(ii);
}
- uint32_t numLineListIndices = bgfx::topologyConvert(bgfx::TopologyConvert::TriListToLineList
- , NULL
- , 0
- , trilist
- , numIndices
- , false
- );
+ uint32_t numLineListIndices = bgfx::topologyConvert(
+ bgfx::TopologyConvert::TriListToLineList
+ , NULL
+ , 0
+ , trilist
+ , numIndices
+ , false
+ );
indices[id] = (uint16_t*)BX_ALLOC(m_allocator, (numIndices + numLineListIndices)*sizeof(uint16_t) );
uint16_t* indicesOut = indices[id];
bx::memCopy(indicesOut, trilist, numIndices*sizeof(uint16_t) );
- bgfx::topologyConvert(bgfx::TopologyConvert::TriListToLineList
- , &indicesOut[numIndices]
- , numLineListIndices*sizeof(uint16_t)
- , trilist
- , numIndices
- , false
- );
+ bgfx::topologyConvert(
+ bgfx::TopologyConvert::TriListToLineList
+ , &indicesOut[numIndices]
+ , numLineListIndices*sizeof(uint16_t)
+ , trilist
+ , numIndices
+ , false
+ );
m_mesh[id].m_startVertex = startVertex;
m_mesh[id].m_numVertices = numVertices;
@@ -495,7 +488,7 @@ struct DebugDraw
Mesh::Enum id = Mesh::Enum(Mesh::Cone0+mesh);
const uint32_t num = getCircleLod(uint8_t(mesh) );
- const float step = bx::pi * 2.0f / num;
+ const float step = bx::kPi * 2.0f / num;
const uint32_t numVertices = num+1;
const uint32_t numIndices = num*6;
@@ -556,7 +549,7 @@ struct DebugDraw
Mesh::Enum id = Mesh::Enum(Mesh::Cylinder0+mesh);
const uint32_t num = getCircleLod(uint8_t(mesh) );
- const float step = bx::pi * 2.0f / num;
+ const float step = bx::kPi * 2.0f / num;
const uint32_t numVertices = num*2;
const uint32_t numIndices = num*12;
@@ -626,7 +619,7 @@ struct DebugDraw
Mesh::Enum id = Mesh::Enum(Mesh::Capsule0+mesh);
const uint32_t num = getCircleLod(uint8_t(mesh) );
- const float step = bx::pi * 2.0f / num;
+ const float step = bx::kPi * 2.0f / num;
const uint32_t numVertices = num*2;
const uint32_t numIndices = num*6;
@@ -733,7 +726,6 @@ struct DebugDraw
m_vbh = bgfx::createVertexBuffer(vb, DebugShapeVertex::ms_decl);
m_ibh = bgfx::createIndexBuffer(ib);
- m_mtx = 0;
m_viewId = 0;
m_pos = 0;
m_indexPos = 0;
@@ -743,15 +735,15 @@ struct DebugDraw
void shutdown()
{
- bgfx::destroyIndexBuffer(m_ibh);
- bgfx::destroyVertexBuffer(m_vbh);
+ bgfx::destroy(m_ibh);
+ bgfx::destroy(m_vbh);
for (uint32_t ii = 0; ii < Program::Count; ++ii)
{
- bgfx::destroyProgram(m_program[ii]);
+ bgfx::destroy(m_program[ii]);
}
- bgfx::destroyUniform(u_params);
- bgfx::destroyUniform(s_texColor);
- bgfx::destroyTexture(m_texture);
+ bgfx::destroy(u_params);
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(m_texture);
}
SpriteHandle createSprite(uint16_t _width, uint16_t _height, const void* _data)
@@ -786,7 +778,6 @@ struct DebugDraw
BX_CHECK(State::Count == m_state);
m_viewId = _viewId;
- m_mtx = 0;
m_state = State::None;
m_stack = 0;
@@ -804,6 +795,9 @@ struct DebugDraw
attrib.m_stipple = false;
attrib.m_wireframe = false;
attrib.m_lod = 0;
+
+ m_mtxStackCurrent = 0;
+ m_mtxStack[m_mtxStackCurrent].reset();
}
void end()
@@ -813,7 +807,7 @@ struct DebugDraw
flushQuad();
flush();
- m_state = State::Count;
+ m_state = State::Count;
}
void push()
@@ -836,20 +830,24 @@ struct DebugDraw
--m_stack;
}
- void setTransform(const void* _mtx)
+ void setTransform(const void* _mtx, uint16_t _num = 1)
{
BX_CHECK(State::Count != m_state);
flush();
+ MatrixStack& stack = m_mtxStack[m_mtxStackCurrent];
+
if (NULL == _mtx)
{
- m_mtx = 0;
+ stack.reset();
return;
}
bgfx::Transform transform;
- m_mtx = bgfx::allocTransform(&transform, 1);
- bx::memCopy(transform.data, _mtx, 64);
+ stack.mtx = bgfx::allocTransform(&transform, _num);
+ stack.num = _num;
+ stack.data = transform.data;
+ bx::memCopy(transform.data, _mtx, _num*64);
}
void setTranslate(float _x, float _y, float _z)
@@ -864,6 +862,54 @@ struct DebugDraw
setTranslate(_pos[0], _pos[1], _pos[2]);
}
+ void pushTransform(const void* _mtx, uint16_t _num)
+ {
+ BX_CHECK(m_mtxStackCurrent < BX_COUNTOF(m_mtxStack), "Out of matrix stack!");
+ BX_CHECK(State::Count != m_state);
+ flush();
+
+ float* mtx = NULL;
+
+ const MatrixStack& stack = m_mtxStack[m_mtxStackCurrent];
+
+ if (NULL == stack.data)
+ {
+ mtx = (float*)_mtx;
+ }
+ else
+ {
+ mtx = (float*)alloca(_num*64);
+ for (uint16_t ii = 0; ii < _num; ++ii)
+ {
+ const float* mtxTransform = (const float*)_mtx;
+ bx::mtxMul(&mtx[ii*16], &mtxTransform[ii*16], stack.data);
+ }
+ }
+
+ m_mtxStackCurrent++;
+ setTransform(mtx, _num);
+ }
+
+ void popTransform()
+ {
+ BX_CHECK(State::Count != m_state);
+ flush();
+
+ m_mtxStackCurrent--;
+ }
+
+ void pushTranslate(float _x, float _y, float _z)
+ {
+ float mtx[16];
+ bx::mtxTranslate(mtx, _x, _y, _z);
+ pushTransform(mtx, 1);
+ }
+
+ void pushTranslate(const float* _pos)
+ {
+ pushTranslate(_pos[0], _pos[1], _pos[2]);
+ }
+
void setState(bool _depthTest, bool _depthWrite, bool _clockwise)
{
const uint64_t depthTest = m_depthTestLess
@@ -1057,29 +1103,39 @@ struct DebugDraw
void draw(const Aabb& _aabb)
{
- moveTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_min[2]);
- lineTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_min[2]);
- lineTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_min[2]);
- lineTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_min[2]);
- close();
+ const Attrib& attrib = m_attrib[m_stack];
+ if (attrib.m_wireframe)
+ {
+ moveTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_min[2]);
+ close();
- moveTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_max[2]);
- lineTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_max[2]);
- lineTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_max[2]);
- lineTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_max[2]);
- close();
+ moveTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_max[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_max[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_max[2]);
+ lineTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_max[2]);
+ close();
- moveTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_min[2]);
- lineTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_max[2]);
+ moveTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_max[2]);
- moveTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_min[2]);
- lineTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_max[2]);
+ moveTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_max[2]);
- moveTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_min[2]);
- lineTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_max[2]);
+ moveTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_max[2]);
- moveTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_min[2]);
- lineTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_max[2]);
+ moveTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_max[2]);
+ }
+ else
+ {
+ Obb obb;
+ aabbToObb(obb, _aabb);
+ draw(Mesh::Cube, obb.m_mtx, 1, false);
+ }
}
void draw(const Cylinder& _cylinder, bool _capsule)
@@ -1097,7 +1153,7 @@ struct DebugDraw
const Attrib& attrib = m_attrib[m_stack];
if (attrib.m_wireframe)
{
- setTransform(_obb.m_mtx);
+ pushTransform(_obb.m_mtx, 1);
moveTo(-1.0f, -1.0f, -1.0f);
lineTo( 1.0f, -1.0f, -1.0f);
@@ -1123,7 +1179,7 @@ struct DebugDraw
moveTo(-1.0f, -1.0f, -1.0f);
lineTo(-1.0f, -1.0f, 1.0f);
- setTransform(NULL);
+ popTransform();
}
else
{
@@ -1136,16 +1192,16 @@ struct DebugDraw
const Attrib& attrib = m_attrib[m_stack];
float mtx[16];
bx::mtxSRT(mtx
- , _sphere.m_radius
- , _sphere.m_radius
- , _sphere.m_radius
- , 0.0f
- , 0.0f
- , 0.0f
- , _sphere.m_center[0]
- , _sphere.m_center[1]
- , _sphere.m_center[2]
- );
+ , _sphere.m_radius
+ , _sphere.m_radius
+ , _sphere.m_radius
+ , 0.0f
+ , 0.0f
+ , 0.0f
+ , _sphere.m_center[0]
+ , _sphere.m_center[1]
+ , _sphere.m_center[2]
+ );
uint8_t lod = attrib.m_lod > Mesh::SphereMaxLod
? uint8_t(Mesh::SphereMaxLod)
: attrib.m_lod
@@ -1202,7 +1258,7 @@ struct DebugDraw
{
const Attrib& attrib = m_attrib[m_stack];
const uint32_t num = getCircleLod(attrib.m_lod);
- const float step = bx::pi * 2.0f / num;
+ const float step = bx::kPi * 2.0f / num;
_degrees = bx::fwrap(_degrees, 360.0f);
@@ -1219,23 +1275,23 @@ struct DebugDraw
for (uint32_t ii = 1; ii < n+1; ++ii)
{
getPoint(pos, _axis
- , bx::fsin(step * ii)*_radius
- , bx::fcos(step * ii)*_radius
- );
+ , bx::fsin(step * ii)*_radius
+ , bx::fcos(step * ii)*_radius
+ );
lineTo(pos[0] + _x, pos[1] + _y, pos[2] + _z);
}
moveTo(_x, _y, _z);
getPoint(pos, _axis
- , bx::fsin(step * 0)*_radius
- , bx::fcos(step * 0)*_radius
- );
+ , bx::fsin(step * 0)*_radius
+ , bx::fcos(step * 0)*_radius
+ );
lineTo(pos[0] + _x, pos[1] + _y, pos[2] + _z);
getPoint(pos, _axis
- , bx::fsin(step * n)*_radius
- , bx::fcos(step * n)*_radius
- );
+ , bx::fsin(step * n)*_radius
+ , bx::fcos(step * n)*_radius
+ );
moveTo(pos[0] + _x, pos[1] + _y, pos[2] + _z);
lineTo(_x, _y, _z);
}
@@ -1244,7 +1300,7 @@ struct DebugDraw
{
const Attrib& attrib = m_attrib[m_stack];
const uint32_t num = getCircleLod(attrib.m_lod);
- const float step = bx::pi * 2.0f / num;
+ const float step = bx::kPi * 2.0f / num;
_weight = bx::fclamp(_weight, 0.0f, 2.0f);
float udir[3];
@@ -1291,7 +1347,7 @@ struct DebugDraw
{
const Attrib& attrib = m_attrib[m_stack];
const uint32_t num = getCircleLod(attrib.m_lod);
- const float step = bx::pi * 2.0f / num;
+ const float step = bx::kPi * 2.0f / num;
_weight = bx::fclamp(_weight, 0.0f, 2.0f);
float xy0[2];
@@ -1546,9 +1602,9 @@ struct DebugDraw
mid[0] = _x + _len - _thickness;
mid[1] = _y;
mid[2] = _z;
- to[0] = _x + _len;
- to[1] = _y;
- to[2] = _z;
+ to[0] = _x + _len;
+ to[1] = _y;
+ to[2] = _z;
drawCylinder(from, mid, _thickness, false);
drawCone(mid, to, _thickness);
@@ -1556,9 +1612,9 @@ struct DebugDraw
mid[0] = _x;
mid[1] = _y + _len - _thickness;
mid[2] = _z;
- to[0] = _x;
- to[1] = _y + _len;
- to[2] = _z;
+ to[0] = _x;
+ to[1] = _y + _len;
+ to[2] = _z;
drawCylinder(from, mid, _thickness, false);
drawCone(mid, to, _thickness);
@@ -1566,9 +1622,9 @@ struct DebugDraw
mid[0] = _x;
mid[1] = _y;
mid[2] = _z + _len - _thickness;
- to[0] = _x;
- to[1] = _y;
- to[2] = _z + _len;
+ to[0] = _x;
+ to[1] = _y;
+ to[2] = _z + _len;
drawCylinder(from, mid, _thickness, false);
drawCone(mid, to, _thickness);
}
@@ -1658,7 +1714,7 @@ struct DebugDraw
void drawGrid(Axis::Enum _axis, const float* _center, uint32_t _size, float _step)
{
push();
- setTranslate(_center);
+ pushTranslate(_center);
const uint32_t num = (_size/2)*2-1;
const float halfExtent = float(_size/2) * _step;
@@ -1768,8 +1824,10 @@ private:
};
};
- void draw(Mesh::Enum _mesh, const float* _mtx, uint16_t _num, bool _wireframe) const
+ void draw(Mesh::Enum _mesh, const float* _mtx, uint16_t _num, bool _wireframe)
{
+ pushTransform(_mtx, _num);
+
const Mesh& mesh = m_mesh[_mesh];
const Attrib& attrib = m_attrib[m_stack];
@@ -1817,14 +1875,18 @@ private:
bgfx::setUniform(u_params, params, 4);
- bgfx::setTransform(_mtx, _num);
- bgfx::setVertexBuffer(m_vbh, mesh.m_startVertex, mesh.m_numVertices);
+ MatrixStack& stack = m_mtxStack[m_mtxStackCurrent];
+ bgfx::setTransform(stack.mtx, stack.num);
+
+ bgfx::setVertexBuffer(0, m_vbh, mesh.m_startVertex, mesh.m_numVertices);
bgfx::setState(0
- | attrib.m_state
- | (_wireframe ? BGFX_STATE_PT_LINES|BGFX_STATE_LINEAA|BGFX_STATE_BLEND_ALPHA
- : (alpha < 0xff) ? BGFX_STATE_BLEND_ALPHA : 0)
- );
+ | attrib.m_state
+ | (_wireframe ? BGFX_STATE_PT_LINES|BGFX_STATE_LINEAA|BGFX_STATE_BLEND_ALPHA
+ : (alpha < 0xff) ? BGFX_STATE_BLEND_ALPHA : 0)
+ );
bgfx::submit(m_viewId, m_program[_wireframe ? Program::Fill : Program::FillLit]);
+
+ popTransform();
}
void softFlush()
@@ -1851,16 +1913,16 @@ private:
const Attrib& attrib = m_attrib[m_stack];
- bgfx::setVertexBuffer(&tvb);
+ bgfx::setVertexBuffer(0, &tvb);
bgfx::setIndexBuffer(&tib);
bgfx::setState(0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_PT_LINES
- | attrib.m_state
- | BGFX_STATE_LINEAA
- | BGFX_STATE_BLEND_ALPHA
- );
- bgfx::setTransform(m_mtx);
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_PT_LINES
+ | attrib.m_state
+ | BGFX_STATE_LINEAA
+ | BGFX_STATE_BLEND_ALPHA
+ );
+ bgfx::setTransform(m_mtxStack[m_mtxStackCurrent].mtx);
bgfx::ProgramHandle program = m_program[attrib.m_stipple ? 1 : 0];
bgfx::submit(m_viewId, program);
}
@@ -1900,12 +1962,12 @@ private:
const Attrib& attrib = m_attrib[m_stack];
- bgfx::setVertexBuffer(&tvb);
+ bgfx::setVertexBuffer(0, &tvb);
bgfx::setIndexBuffer(&tib);
bgfx::setState(0
- | (attrib.m_state & ~BGFX_STATE_CULL_MASK)
- );
- bgfx::setTransform(m_mtx);
+ | (attrib.m_state & ~BGFX_STATE_CULL_MASK)
+ );
+ bgfx::setTransform(m_mtxStack[m_mtxStackCurrent].mtx);
bgfx::setTexture(0, s_texColor, m_texture);
bgfx::submit(m_viewId, m_program[Program::FillTexture]);
}
@@ -1939,7 +2001,24 @@ private:
DebugUvVertex m_cacheQuad[cacheQuadSize];
uint16_t m_posQuad;
- uint32_t m_mtx;
+ uint32_t m_mtxStackCurrent;
+
+ struct MatrixStack
+ {
+ void reset()
+ {
+ mtx = 0;
+ num = 1;
+ data = NULL;
+ }
+
+ uint32_t mtx;
+ uint16_t num;
+ float* data;
+ };
+
+ MatrixStack m_mtxStack[32];
+
uint8_t m_viewId;
uint8_t m_stack;
bool m_depthTestLess;
@@ -2088,9 +2167,14 @@ void ddDraw(const Aabb& _aabb)
s_dd.draw(_aabb);
}
-void ddDraw(const Cylinder& _cylinder, bool _capsule)
+void ddDraw(const Cylinder& _cylinder)
+{
+ s_dd.draw(_cylinder, false);
+}
+
+void ddDraw(const Capsule& _capsule)
{
- s_dd.draw(_cylinder, _capsule);
+ s_dd.draw( *( (const Cylinder*)&_capsule), true);
}
void ddDraw(const Disk& _disk)
@@ -2108,6 +2192,11 @@ void ddDraw(const Sphere& _sphere)
s_dd.draw(_sphere);
}
+void ddDraw(const Cone& _cone)
+{
+ ddDrawCone(_cone.m_pos, _cone.m_end, _cone.m_radius);
+}
+
void ddDrawFrustum(const void* _viewProj)
{
s_dd.drawFrustum(_viewProj);
@@ -2148,19 +2237,9 @@ void ddDrawCone(const void* _from, const void* _to, float _radius)
s_dd.drawCone(_from, _to, _radius);
}
-void ddDrawCylinder(const void* _from, const void* _to, float _radius, bool _capsule)
+void ddDrawCylinder(const void* _from, const void* _to, float _radius)
{
- if (_capsule)
- {
- s_dd.push();
- s_dd.setLod(0);
- s_dd.drawCylinder(_from, _to, _radius, true);
- s_dd.pop();
- }
- else
- {
- s_dd.drawCylinder(_from, _to, _radius, false);
- }
+ s_dd.drawCylinder(_from, _to, _radius, false);
}
void ddDrawCapsule(const void* _from, const void* _to, float _radius)
diff --git a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h
index 222c05fd64d..a52da4fbd85 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h
@@ -92,7 +92,10 @@ void ddClose();
void ddDraw(const Aabb& _aabb);
///
-void ddDraw(const Cylinder& _cylinder, bool _capsule = false);
+void ddDraw(const Cylinder& _cylinder);
+
+///
+void ddDraw(const Capsule& _capsule);
///
void ddDraw(const Disk& _disk);
@@ -104,6 +107,9 @@ void ddDraw(const Obb& _obb);
void ddDraw(const Sphere& _sphere);
///
+void ddDraw(const Cone& _cone);
+
+///
void ddDrawFrustum(const void* _viewProj);
///
@@ -128,7 +134,7 @@ void ddDrawQuad(bgfx::TextureHandle _handle, const float* _normal, const float*
void ddDrawCone(const void* _from, const void* _to, float _radius);
///
-void ddDrawCylinder(const void* _from, const void* _to, float _radius, bool _capsule = false);
+void ddDrawCylinder(const void* _from, const void* _to, float _radius);
///
void ddDrawCapsule(const void* _from, const void* _to, float _radius);
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h
index 59db5b668de..db13e1a87c1 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_debugdraw_fill_glsl[104] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
0x61, 0x6d, 0x73, 0x02, 0x04, 0x00, 0x00, 0x04, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x75, 0x6e, 0x69, // ams......J...uni
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // form vec4 u_para
0x6d, 0x73, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, // ms[4];.void main
@@ -8,179 +8,180 @@ static const uint8_t fs_debugdraw_fill_glsl[104] =
0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, // olor = u_params[
0x33, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // 3];.}...
};
-static const uint8_t fs_debugdraw_fill_spv[2128] =
+static const uint8_t fs_debugdraw_fill_spv[2142] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
- 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0x34, 0x08, 0x03, 0x02, 0x23, 0x07, 0x00, // ams......4...#..
- 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x2e, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, // ........a.......
- 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, // ...............G
- 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, // LSL.std.450.....
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x06, 0x00, 0x04, // ................
- 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd1, // .......main.....
- 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, // ................
- 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, // .......main.....
- 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, // ...5...vec4_spla
- 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, // t(f1;.........._
- 0x78, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x4d, 0x0f, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, // x......M...@main
- 0x28, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x2c, 0x41, 0x00, 0x00, 0x67, // (vf4;......,A..g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, // l_FragData_0_...
- 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, // .......bgfx_Void
- 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5e, 0x00, 0x00, 0x70, // Frag........^..p
- 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x24, // aram...........$
- 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x00, // Global..........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, // ...u_viewRect...
- 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...........u_vie
- 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, // wTexel..........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, // ...u_view.......
- 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, // .......u_invView
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, // ...............u
- 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x05, // _proj...........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, // ...u_invProj....
- 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...........u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x07, // wProj...........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // ...u_invViewProj
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, // ...............u
- 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x09, // _model..........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, // ...u_modelView..
- 0x00, 0x07, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // ...........u_mod
- 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, // elViewProj......
- 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, // .......u_alphaRe
- 0x66, 0x34, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, // f4.............u
- 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, // _params........B
- 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x3d, 0x51, 0x00, 0x00, 0x67, // ...........=Q..g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, // l_FragData_0_...
- 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, // .......param....
- 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, // .......gl_FragDa
- 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x7d, 0x01, 0x00, 0x00, 0x06, // ta_0_..G...}....
- 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x04, 0x00, 0x00, 0x06, // ...@...G........
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x00, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, // ...#.......H....
- 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // .......#.......H
- 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, // ...........#...
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x03, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x03, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, // ...#...`...H....
- 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, // ...........#....
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x05, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x05, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, // ...#.......H....
- 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, // ...........#...
- 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x07, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x07, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, // ...#...`...H....
- 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, // ...........#....
- 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x09, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x09, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, // ...#.......H....
- 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, // ...........#....
- 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0b, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, // ...#... ...H....
- 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, // .......#...0...G
- 0x00, 0x03, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, // ...........G...B
- 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, // ...".......G....
- 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, // ................
- 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, // ...!............
- 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, // ....... ... ....
- 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, // ................
- 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, // ...........!....
- 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, // ........... ....
- 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xf5, // ...........!....
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, // ...........+....
- 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, // ...............e
- 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, // ................
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, // ... .......+....
- 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x7d, // ...j... .......}
- 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, // ...e...j...+....
- 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xb2, // ................
- 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0xd2, // ................
- 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // ...........e...e
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // ...e...e...e...e
- 0x00, 0x00, 0x00, 0x7d, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, // ...}...e...e....
- 0x00, 0x00, 0x00, 0xb2, 0x04, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x4f, 0x04, 0x00, 0x00, 0x02, // ....... ...O....
- 0x00, 0x00, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4f, 0x04, 0x00, 0x00, 0x42, // .......;...O...B
- 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, // ...............
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, // .......+......./
- 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, // .......+........
- 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, // ....... ........
- 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, // ....... ........
- 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, // .......;........
- 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, // .......6........
- 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2d, // ...............-
- 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, // a..;............
- 0x00, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe7, 0x49, 0x00, 0x00, 0x4d, // ...9........I..M
- 0x0f, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3d, // .......=.......=
- 0x51, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x3d, // Q......>.......=
- 0x51, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, // Q......8...6....
- 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, // ...5...........7
- 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, // ................
- 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, // ...=.......dW...
- 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, // ...=........N...
- 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, // ...=.......I9...
- 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, // ...=........9...
- 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, // ...P........*..d
- 0x57, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, // W...N..I9...9...
- 0x00, 0x02, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, // ....*..8...6....
- 0x00, 0x00, 0x00, 0x4d, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0x37, // ...M...........7
- 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2c, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x31, // .......,A......1
- 0x27, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5e, 0x00, 0x00, 0x07, // '..;........^...
- 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, // ...>....^......9
- 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x9d, // ...........5....
- 0x5e, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x0a, 0x5a, 0x00, 0x00, 0x42, // ^..A........Z..B
- 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, // .../.......=....
- 0x00, 0x00, 0x00, 0x6b, 0x2e, 0x00, 0x00, 0x0a, 0x5a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2c, // ...k....Z..>...,
- 0x41, 0x00, 0x00, 0x6b, 0x2e, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // A..k.......8....
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0x40, 0x08, 0x00, 0x00, 0x03, 0x02, 0x23, // ams......@.....#
+ 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x2e, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........a.....
+ 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
+ 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x06, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, // ................
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, // .....main.......
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, // .5...vec4_splat(
+ 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, // f1;.........._x.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x4d, 0x0f, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, // .....M...@main(v
+ 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x2c, 0x41, 0x00, 0x00, 0x67, 0x6c, 0x5f, // f4;......,A..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, // .....bgfx_VoidFr
+ 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5e, 0x00, 0x00, 0x70, 0x61, 0x72, // ag........^..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, // am...........$Gl
+ 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // obal............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_viewRect.....
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, // .........u_viewT
+ 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, // exel............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, // .u_view.........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, // .....u_invView..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .............u_p
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, // roj.............
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_invProj......
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .........u_viewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, // roj.............
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .u_invViewProj..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .............u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, // odel............
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, // .u_modelView....
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .........u_model
+ 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, // ViewProj........
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, // .....u_alphaRef4
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .............u_p
+ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // arams........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x3d, 0x51, 0x00, 0x00, 0x67, 0x6c, 0x5f, // .........=Q..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, // FragData_0_.....
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, // .....param......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x7d, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, // _0_..G...}......
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // .@...G..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#.......H......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#...`...H......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#.......H......
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#...`...H......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#.......H......
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#... ...H......
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, // .....#...0...G..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // .........G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .".......G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, // .!..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..... ... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xf5, 0x00, 0x00, // .........!......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, // .............e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // . .......+......
+ 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x7d, 0x01, 0x00, // .j... .......}..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .e...j...+......
+ 0x00, 0x16, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xb2, 0x04, 0x00, // ................
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0xd2, 0x01, 0x00, // ................
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .........e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x7d, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .}...e...e......
+ 0x00, 0xb2, 0x04, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x4f, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ...O......
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4f, 0x04, 0x00, 0x00, 0x42, 0x13, 0x00, // .....;...O...B..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....+......./..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x0a, 0x00, // .....+..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, // .....;..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // .....6..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2d, 0x61, 0x00, // .............-a.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, // .;..............
+ 0x00, 0x39, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe7, 0x49, 0x00, 0x00, 0x4d, 0x0f, 0x00, // .9........I..M..
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3d, 0x51, 0x00, // .....=.......=Q.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x3d, 0x51, 0x00, // .....>.......=Q.
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // .....8...6......
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, // .5...........7..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, // ................
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=.......dW.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=........N.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=.......I9.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=........9.....
+ 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, // .P........*..dW.
+ 0x00, 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, // ..N..I9...9.....
+ 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // ..*..8...6......
+ 0x00, 0x4d, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, // .M...........7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2c, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x31, 0x27, 0x00, // .....,A......1'.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5e, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........^.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>....^......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x9d, 0x5e, 0x00, // .........5....^.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x0a, 0x5a, 0x00, 0x00, 0x42, 0x13, 0x00, // .A........Z..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0x6b, 0x2e, 0x00, 0x00, 0x0a, 0x5a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2c, 0x41, 0x00, // .k....Z..>...,A.
+ 0x00, 0x6b, 0x2e, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .k.......8....
};
-static const uint8_t fs_debugdraw_fill_dx9[180] =
+static const uint8_t fs_debugdraw_fill_dx9[182] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
- 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, // ams.............
- 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, // . .CTAB....S....
- 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4c, // ...............L
- 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, // ...0...........<
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, // .......u_params.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, // 1...............
- 0xff, 0x00, 0x00, 0x00, // ....
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, // ams.............
+ 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
+ 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
+ 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .L...0..........
+ 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // .<.......u_param
+ 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, // s...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, // 0.1.............
+ 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ......
};
-static const uint8_t fs_debugdraw_fill_dx11[251] =
+static const uint8_t fs_debugdraw_fill_dx11[253] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
- 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0xdc, 0x00, 0x44, 0x58, 0x42, 0x43, 0xda, // ams........DXBC.
- 0xfb, 0x8d, 0xd4, 0xad, 0x58, 0xef, 0x92, 0x13, 0x90, 0x07, 0xb7, 0x79, 0x4c, 0x38, 0x95, 0x01, // ....X......yL8..
- 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, // ...........,...`
- 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, // .......ISGN,....
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ....... ........
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, // ...............S
- 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x2c, // V_POSITION.OSGN,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // ........... ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, // ...SV_TARGET...S
- 0x48, 0x44, 0x52, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x59, // HDR@...@.......Y
- 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, // ...F. .........e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // .... ......6....
- 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ......F. ......
- 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, // ...>.....@.
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x44, 0x58, 0x42, // ams..........DXB
+ 0x43, 0xda, 0xfb, 0x8d, 0xd4, 0xad, 0x58, 0xef, 0x92, 0x13, 0x90, 0x07, 0xb7, 0x79, 0x4c, 0x38, // C.....X......yL8
+ 0x95, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // .............,..
+ 0x00, 0x60, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, // .`.......ISGN,..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
+ 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, // .SV_POSITION.OSG
+ 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // N,........... ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
+ 0xab, 0x53, 0x48, 0x44, 0x52, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .SHDR@...@......
+ 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .Y...F. ........
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .e.... ......6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, // .....>.....@.
};
static const uint8_t fs_debugdraw_fill_mtl[425] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
0x61, 0x6d, 0x73, 0x02, 0x04, 0x00, 0x00, 0x04, 0x00, 0x8b, 0x01, 0x00, 0x00, 0x75, 0x73, 0x69, // ams..........usi
0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, // ng namespace met
0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // al;.struct xlatM
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h
index 83c8f5612f2..3586d73caeb 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_debugdraw_fill_lit_glsl[510] =
{
- 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
+ 0x46, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
0x61, 0x6d, 0x73, 0x02, 0x04, 0x00, 0x00, 0x04, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x76, 0x61, 0x72, // ams..........var
0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, // ying highp vec3
0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, // v_world;.uniform
@@ -33,340 +33,343 @@ static const uint8_t fs_debugdraw_fill_lit_glsl[510] =
0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, // gl_FragColor =
0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tmpvar_3;.}...
};
-static const uint8_t fs_debugdraw_fill_lit_spv[4024] =
+static const uint8_t fs_debugdraw_fill_lit_spv[4038] =
{
- 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
- 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0x9c, 0x0f, 0x03, 0x02, 0x23, 0x07, 0x00, // ams..........#..
- 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x6f, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, // .......ob.......
- 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, // ...............G
- 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, // LSL.std.450.....
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x04, // ................
- 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd4, // .......main.....
- 0x0f, 0x00, 0x00, 0x6f, 0x12, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, // ...o............
- 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, // ...............m
- 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x6d, // ain........0...m
- 0x69, 0x78, 0x28, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, // ix(vf3;vf3;vf3;.
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x5f, 0x61, 0x00, 0x00, 0x05, // ..........._a...
- 0x00, 0x03, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x5f, 0x62, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xd9, // ......._b.......
- 0x0e, 0x00, 0x00, 0x5f, 0x74, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x01, 0x14, 0x00, 0x00, 0x76, // ..._t..........v
- 0x65, 0x63, 0x33, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, // ec3_splat(f1;...
- 0x00, 0x03, 0x00, 0xe5, 0x41, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, // ....A.._x......5
- 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, // ...vec4_splat(f1
- 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, // ;.........._x...
- 0x00, 0x07, 0x00, 0xd1, 0x10, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x33, // .......@main(vf3
- 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x6e, // ;vf3;vf4;......n
- 0x62, 0x00, 0x00, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8f, // b..v_view.......
- 0x41, 0x00, 0x00, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x05, 0x00, 0x06, 0x00, 0x8c, // A..v_world......
- 0x4a, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, // J..gl_FragData_0
- 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, // _..........bgfx_
- 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, // VoidFrag........
- 0x5d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x83, // ]..param........
- 0x0f, 0x00, 0x00, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x58, // ...normal......X
- 0x0d, 0x00, 0x00, 0x76, 0x69, 0x65, 0x77, 0x44, 0x69, 0x72, 0x00, 0x05, 0x00, 0x04, 0x00, 0x67, // ...viewDir.....g
- 0x15, 0x00, 0x00, 0x6e, 0x64, 0x6f, 0x74, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe2, // ...ndotl........
- 0x04, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, // ...$Global......
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, // .......u_viewRec
- 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, // t..............u
- 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xe2, // _viewTexel......
- 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, // .......u_view...
- 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, // ...........u_inv
- 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x04, // View............
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, // ...u_proj.......
- 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, // .......u_invProj
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, // ...............u
- 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xe2, // _viewProj.......
- 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, // .......u_invView
- 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x08, // Proj............
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, // ...u_model......
- 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, // .......u_modelVi
- 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, // ew.............u
- 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, // _modelViewProj..
- 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, // ...........u_alp
- 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0c, // haRef4..........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, // ...u_params.....
- 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x96, // ...B............
- 0x0e, 0x00, 0x00, 0x64, 0x69, 0x66, 0x66, 0x75, 0x73, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd4, // ...diffuse......
- 0x56, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbe, // V..param........
- 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf7, // 9..param........
- 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0c, // 9..param........
- 0x0a, 0x00, 0x00, 0x73, 0x70, 0x65, 0x63, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x91, // ...spec.........
- 0x37, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xcb, // 7..param........
- 0x41, 0x00, 0x00, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd4, // A..v_view.......
- 0x0f, 0x00, 0x00, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2c, // ...v_view......,
- 0x3f, 0x00, 0x00, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x05, 0x00, 0x04, 0x00, 0x6f, // ?..v_world.....o
- 0x12, 0x00, 0x00, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, // ...v_world......
- 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, // ...gl_FragData_0
- 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, // _.......G..param
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, // ........U..param
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, // ...........param
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ...........gl_Fr
- 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, // agData_0_..G...B
- 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xfa, // .......@...G....
- 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, // .......#.......H
- 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, // ...........#....
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, // ...H............
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, // ...H...........#
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x02, // ... ...H........
- 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, // .......#...`...H
- 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ................
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, // ...H............
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, // ...H...........#
- 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x04, // .......H........
- 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, // .......#.......H
- 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ................
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, // ...H............
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, // ...H...........#
- 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x06, // ... ...H........
- 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, // .......#...`...H
- 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ................
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, // ...H............
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, // ...H...........#
- 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x08, // .......H........
- 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, // .......#.......H
- 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ................
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, // ...H............
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, // ...H...........#
- 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0a, // .......H........
- 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, // ...........H....
- 0x04, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, // .......#... ...H
- 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, // ...........#...0
- 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, // ...G...........G
- 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, // ...B...".......G
- 0x00, 0x04, 0x00, 0xd4, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, // ...............G
- 0x00, 0x04, 0x00, 0x6f, 0x12, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, // ...o...........G
- 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, // ................
- 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, // .......!........
- 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, // ........... ....
- 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, // ...............
- 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, // ...............!
- 0x00, 0x06, 0x00, 0x75, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, // ...u............
- 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, // ....... ........
- 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x18, // .......!........
- 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, // ................
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, // .......!........
- 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, // ....... ........
- 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x08, // .......!...n....
- 0x00, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, // ...............+
- 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, // ................
- 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, // ...e............
- 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, // ....... .......+
- 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, // .......j... ....
- 0x00, 0x04, 0x00, 0x42, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, // ...B...e...j...+
- 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, // ................
- 0x00, 0x04, 0x00, 0xfa, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x1e, // ................
- 0x00, 0x0f, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, // ...............e
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // ...e...e...e...e
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x42, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // ...e...B...e...e
- 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfa, 0x07, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5f, // ........... ..._
- 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5f, // ...........;..._
- 0x07, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, // ...B............
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, // ... .......+....
- 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, // .../.......+....
- 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, // ........... ....
- 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, // ...........+....
- 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, // ...........+....
- 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, // ...........+....
- 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0c, // ..........?+....
- 0x00, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, // ...........+....
- 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, // ........... ....
- 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, // ........... ....
- 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, // ...........;....
- 0x02, 0x00, 0x00, 0xd4, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, // ...........;....
- 0x02, 0x00, 0x00, 0x6f, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, // ...o....... ....
- 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, // ...........;....
- 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, // ...........6....
- 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, // ................
- 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xc9, // ...Sa..;........
- 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xab, // G......;........
- 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, // U......;........
- 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xcb, // .......=........
- 0x41, 0x00, 0x00, 0xd4, 0x0f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, // A......=.......,
- 0x3f, 0x00, 0x00, 0x6f, 0x12, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xcb, // ?..o...>....G...
- 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, // A..>....U..,?..9
- 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xd1, 0x10, 0x00, 0x00, 0xc9, // ........&.......
- 0x47, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, // G...U......=....
- 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, // ...........>....
- 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, // ...........8...6
- 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, // .......0.......u
- 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x37, // ...7...........7
- 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, // ...........7....
- 0x02, 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9a, 0x54, 0x00, 0x00, 0x3d, // ............T..=
- 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x75, 0x1e, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, // .......u.......=
- 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8b, 0x43, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x3d, // ........C......=
- 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x92, 0x42, 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x0c, // ........B.......
- 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x05, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, // ................
- 0x00, 0x00, 0x00, 0x75, 0x1e, 0x00, 0x00, 0x8b, 0x43, 0x00, 0x00, 0x92, 0x42, 0x00, 0x00, 0xfe, // ...u....C...B...
- 0x00, 0x02, 0x00, 0x05, 0x1a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x18, // .......8...6....
- 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x37, // ...............7
- 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xe5, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x73, // ........A......s
- 0x1d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6a, 0x62, 0x00, 0x00, 0xe5, // ...=.......jb...
- 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x5b, 0x00, 0x00, 0xe5, // A..=........[...
- 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x2b, 0x00, 0x00, 0xe5, // A..=.......)+...
- 0x41, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x9b, 0x19, 0x00, 0x00, 0x6a, // A..P...........j
- 0x62, 0x00, 0x00, 0x18, 0x5b, 0x00, 0x00, 0x29, 0x2b, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x9b, // b...[..)+.......
- 0x19, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, // ...8...6.......5
- 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, // ...........7....
- 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, // ............_..=
- 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, // ........[......=
- 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, // .......%S......=
- 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, // ........=......=
- 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, // ........=......P
- 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, // .......V[...[..%
- 0x53, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, // S...=...=......V
- 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xd1, // [..8...6........
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, // .......n...7....
- 0x02, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x8f, // ...nb..7........
- 0x41, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0xf8, // A..7........J...
- 0x00, 0x02, 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, // ....S..;........
- 0x5d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xd4, // ]......;........
- 0x56, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xbe, // V......;........
- 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xf7, // 9......;........
- 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x91, // 9......;........
- 0x37, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x0c, // 7......>....]...
- 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, // ...9...........5
- 0x13, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa5, // ....]..=........
- 0x29, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xeb, // )...A...........
- 0x21, 0x00, 0x00, 0xa5, 0x29, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xc9, // !...)..=........
- 0x1f, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xf9, // ....A...........
- 0x2f, 0x00, 0x00, 0xc9, 0x1f, 0x00, 0x00, 0xd0, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd5, // /...............
- 0x44, 0x00, 0x00, 0xf9, 0x2f, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0x62, // D.../..........b
- 0x5a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xeb, 0x21, 0x00, 0x00, 0xd5, // Z......D....!...
- 0x44, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x83, 0x0f, 0x00, 0x00, 0x01, // D...............
- 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x62, 0x5a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, // ...E...bZ..=....
- 0x00, 0x00, 0x00, 0xf4, 0x1e, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x18, // .......nb.......
- 0x00, 0x00, 0x00, 0xe7, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0xf4, // ....+......E....
- 0x1e, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x58, 0x0d, 0x00, 0x00, 0xe7, // ...........X....
- 0x2b, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x83, 0x60, 0x00, 0x00, 0x42, // +..A........`..B
- 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, // .../.......=....
- 0x00, 0x00, 0x00, 0xb5, 0x2a, 0x00, 0x00, 0x83, 0x60, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, // ....*...`..O....
- 0x00, 0x00, 0x00, 0x7c, 0x4a, 0x00, 0x00, 0xb5, 0x2a, 0x00, 0x00, 0xb5, 0x2a, 0x00, 0x00, 0x00, // ...|J...*...*...
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x0d, // ................
- 0x00, 0x00, 0x00, 0x67, 0x15, 0x00, 0x00, 0x83, 0x0f, 0x00, 0x00, 0x7c, 0x4a, 0x00, 0x00, 0x85, // ...g.......|J...
- 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5e, 0x5e, 0x00, 0x00, 0x67, 0x15, 0x00, 0x00, 0xfc, // .......^^..g....
- 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x97, 0x19, 0x00, 0x00, 0x5e, // ...............^
- 0x5e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1e, // ^......P........
- 0x54, 0x00, 0x00, 0x97, 0x19, 0x00, 0x00, 0x97, 0x19, 0x00, 0x00, 0x97, 0x19, 0x00, 0x00, 0x41, // T..............A
- 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x44, 0x3d, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, // .......D=..B.../
- 0x0a, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfb, // .......=........
- 0x1a, 0x00, 0x00, 0x44, 0x3d, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0f, // ...D=..O........
- 0x35, 0x00, 0x00, 0xfb, 0x1a, 0x00, 0x00, 0xfb, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // 5...............
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x0f, // .......>....V...
- 0x35, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xc3, 0x49, 0x00, 0x00, 0x42, // 5..A........I..B
- 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, // .../.......=....
- 0x00, 0x00, 0x00, 0x37, 0x5f, 0x00, 0x00, 0xc3, 0x49, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, // ...7_...I..O....
- 0x00, 0x00, 0x00, 0xd6, 0x34, 0x00, 0x00, 0x37, 0x5f, 0x00, 0x00, 0x37, 0x5f, 0x00, 0x00, 0x00, // ....4..7_..7_...
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, // ...........>....
- 0x39, 0x00, 0x00, 0xd6, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x1e, // 9...4..>....9...
- 0x54, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8b, 0x56, 0x00, 0x00, 0x30, // T..9........V..0
- 0x0c, 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x41, // ....V...9...9..A
- 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x20, 0x58, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, // ....... X..B.../
- 0x0a, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x58, // .......=.......X
- 0x61, 0x00, 0x00, 0x20, 0x58, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5a, // a.. X..O.......Z
- 0x4f, 0x00, 0x00, 0x58, 0x61, 0x00, 0x00, 0x58, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // O..Xa..Xa.......
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x96, // ................
- 0x0e, 0x00, 0x00, 0x8b, 0x56, 0x00, 0x00, 0x5a, 0x4f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x91, // ....V..ZO..>....
- 0x37, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, // 7......9........
- 0x4e, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x18, // N.......7.......
- 0x00, 0x00, 0x00, 0x3b, 0x2f, 0x00, 0x00, 0x96, 0x0e, 0x00, 0x00, 0x19, 0x4e, 0x00, 0x00, 0x41, // ...;/.......N..A
- 0x00, 0x07, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x84, 0x3a, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, // ........:..B.../
- 0x0a, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, // ...........=....
- 0x00, 0x00, 0x00, 0xaf, 0x2a, 0x00, 0x00, 0x84, 0x3a, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, // ....*...:..Q....
- 0x00, 0x00, 0x00, 0xe5, 0x33, 0x00, 0x00, 0x3b, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, // ....3..;/......Q
- 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xde, 0x43, 0x00, 0x00, 0x3b, 0x2f, 0x00, 0x00, 0x01, // ........C..;/...
- 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0x3b, // ...Q........O..;
- 0x2f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9e, // /......P........
- 0x3f, 0x00, 0x00, 0xe5, 0x33, 0x00, 0x00, 0xde, 0x43, 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0xaf, // ?...3...C...O...
- 0x2a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xfd, // *..>....J...?...
- 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ...8....
+ 0x46, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0xa8, 0x0f, 0x00, 0x00, 0x03, 0x02, 0x23, // ams............#
+ 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x6f, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // .........ob.....
+ 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
+ 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0xd4, 0x0f, 0x00, 0x00, 0x6f, 0x12, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, // .....o..........
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x6d, 0x69, 0x78, // n........0...mix
+ 0x28, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x00, // (vf3;vf3;vf3;...
+ 0x00, 0x05, 0x00, 0x03, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x5f, 0x61, 0x00, 0x00, 0x05, 0x00, 0x03, // ........._a.....
+ 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x5f, 0x62, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xd9, 0x0e, 0x00, // ....._b.........
+ 0x00, 0x5f, 0x74, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x01, 0x14, 0x00, 0x00, 0x76, 0x65, 0x63, // ._t..........vec
+ 0x33, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, // 3_splat(f1;.....
+ 0x00, 0xe5, 0x41, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, // ..A.._x......5..
+ 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, // .vec4_splat(f1;.
+ 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, // ........._x.....
+ 0x00, 0xd1, 0x10, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x33, 0x3b, 0x76, // .....@main(vf3;v
+ 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x6e, 0x62, 0x00, // f3;vf4;......nb.
+ 0x00, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8f, 0x41, 0x00, // .v_view.......A.
+ 0x00, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x05, 0x00, 0x06, 0x00, 0x8c, 0x4a, 0x00, // .v_world......J.
+ 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, // .gl_FragData_0_.
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, // .........bgfx_Vo
+ 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, 0x00, // idFrag........].
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x83, 0x0f, 0x00, // .param..........
+ 0x00, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x58, 0x0d, 0x00, // .normal......X..
+ 0x00, 0x76, 0x69, 0x65, 0x77, 0x44, 0x69, 0x72, 0x00, 0x05, 0x00, 0x04, 0x00, 0x67, 0x15, 0x00, // .viewDir.....g..
+ 0x00, 0x6e, 0x64, 0x6f, 0x74, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, // .ndotl..........
+ 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, // .$Global........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, // .....u_viewRect.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .............u_v
+ 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, // iewTexel........
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_view.....
+ 0x00, 0xe2, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .........u_invVi
+ 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ew..............
+ 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, // .u_proj.........
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .....u_invProj..
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .............u_v
+ 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xe2, 0x04, 0x00, // iewProj.........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, // .....u_invViewPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, // oj..............
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, // .u_model........
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, // .....u_modelView
+ 0x00, 0x06, 0x00, 0x07, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .............u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, // odelViewProj....
+ 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, // .........u_alpha
+ 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, // Ref4............
+ 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, // .u_params.......
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x96, 0x0e, 0x00, // .B..............
+ 0x00, 0x64, 0x69, 0x66, 0x66, 0x75, 0x73, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd4, 0x56, 0x00, // .diffuse......V.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbe, 0x39, 0x00, // .param........9.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf7, 0x39, 0x00, // .param........9.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0c, 0x0a, 0x00, // .param..........
+ 0x00, 0x73, 0x70, 0x65, 0x63, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x91, 0x37, 0x00, // .spec.........7.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xcb, 0x41, 0x00, // .param........A.
+ 0x00, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd4, 0x0f, 0x00, // .v_view.........
+ 0x00, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2c, 0x3f, 0x00, // .v_view......,?.
+ 0x00, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x05, 0x00, 0x04, 0x00, 0x6f, 0x12, 0x00, // .v_world.....o..
+ 0x00, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, // .v_world........
+ 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, // .gl_FragData_0_.
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // ......G..param..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // ......U..param..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // .........param..
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // .........gl_Frag
+ 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x04, 0x00, // Data_0_..G...B..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xfa, 0x07, 0x00, // .....@...G......
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
+ 0x00, 0xe2, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H..............
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, // . ...H..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#...`...H..
+ 0x00, 0xe2, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H..............
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
+ 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
+ 0x00, 0xe2, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H..............
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
+ 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // . ...H..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#...`...H..
+ 0x00, 0xe2, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H..............
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
+ 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
+ 0x00, 0xe2, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H..............
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
+ 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe2, 0x04, 0x00, // .........H......
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#... ...H..
+ 0x00, 0xe2, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, // .........#...0..
+ 0x00, 0x47, 0x00, 0x03, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .G...........G..
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .B...".......G..
+ 0x00, 0xd4, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
+ 0x00, 0x6f, 0x12, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .o...........G..
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, // ................
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, // .....!..........
+ 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ......... ......
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, // .............!..
+ 0x00, 0x75, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, // .u..............
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, // .....!..........
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .....!..........
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .....!...n......
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, // ................
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .e..............
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // .....j... ......
+ 0x00, 0x42, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, // .B...e...j...+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // ................
+ 0x00, 0xfa, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, // ................
+ 0x00, 0xe2, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .............e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x42, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...B...e...e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfa, 0x07, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5f, 0x07, 0x00, // ......... ..._..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5f, 0x07, 0x00, // .........;..._..
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .B..............
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // . .......+......
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // ./.......+......
+ 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // ........?+......
+ 0x00, 0x14, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .........+......
+ 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .........;......
+ 0x00, 0xd4, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .........;......
+ 0x00, 0x6f, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .o....... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
+ 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, // .Sa..;........G.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, // .....;........U.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, // .....=........A.
+ 0x00, 0xd4, 0x0f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, // .....=.......,?.
+ 0x00, 0x6f, 0x12, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xcb, 0x41, 0x00, // .o...>....G...A.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x07, // .>....U..,?..9..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xd1, 0x10, 0x00, 0x00, 0xc9, 0x47, 0x00, // ......&.......G.
+ 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ..U......=......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, // .........>......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .........8...6..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, // .....0.......u..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, // .7...........7..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, // .........7......
+ 0x00, 0xd9, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9a, 0x54, 0x00, 0x00, 0x3d, 0x00, 0x04, // ..........T..=..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x75, 0x1e, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....u.......=..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x8b, 0x43, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......C......=..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x92, 0x42, 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x08, // ......B.........
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x05, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, // ................
+ 0x00, 0x75, 0x1e, 0x00, 0x00, 0x8b, 0x43, 0x00, 0x00, 0x92, 0x42, 0x00, 0x00, 0xfe, 0x00, 0x02, // .u....C...B.....
+ 0x00, 0x05, 0x1a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, // .....8...6......
+ 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, // .............7..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0xe5, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x73, 0x1d, 0x00, // ......A......s..
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6a, 0x62, 0x00, 0x00, 0xe5, 0x41, 0x00, // .=.......jb...A.
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x5b, 0x00, 0x00, 0xe5, 0x41, 0x00, // .=........[...A.
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x2b, 0x00, 0x00, 0xe5, 0x41, 0x00, // .=.......)+...A.
+ 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x9b, 0x19, 0x00, 0x00, 0x6a, 0x62, 0x00, // .P...........jb.
+ 0x00, 0x18, 0x5b, 0x00, 0x00, 0x29, 0x2b, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x9b, 0x19, 0x00, // ..[..)+.........
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, // .8...6.......5..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, // .........7......
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, // .........._..=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......[......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....%S......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......=......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, // ......=......P..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, 0x53, 0x00, // .....V[...[..%S.
+ 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, 0x5b, 0x00, // ..=...=......V[.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, // .8...6..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, // .....n...7......
+ 0x00, 0x6e, 0x62, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x8f, 0x41, 0x00, // .nb..7........A.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0xf8, 0x00, 0x02, // .7........J.....
+ 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5d, 0x00, // ..S..;........].
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xd4, 0x56, 0x00, // .....;........V.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xbe, 0x39, 0x00, // .....;........9.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xf7, 0x39, 0x00, // .....;........9.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x91, 0x37, 0x00, // .....;........7.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x0c, 0x0a, 0x00, // .....>....].....
+ 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, // .9...........5..
+ 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa5, 0x29, 0x00, // ..]..=........).
+ 0x00, 0x8f, 0x41, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xeb, 0x21, 0x00, // ..A...........!.
+ 0x00, 0xa5, 0x29, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xc9, 0x1f, 0x00, // ..)..=..........
+ 0x00, 0x8f, 0x41, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xf9, 0x2f, 0x00, // ..A.........../.
+ 0x00, 0xc9, 0x1f, 0x00, 0x00, 0xd0, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd5, 0x44, 0x00, // ..............D.
+ 0x00, 0xf9, 0x2f, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0x62, 0x5a, 0x00, // ../..........bZ.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xeb, 0x21, 0x00, 0x00, 0xd5, 0x44, 0x00, // .....D....!...D.
+ 0x00, 0x0c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x83, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x45, 0x00, 0x00, 0x00, 0x62, 0x5a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, // .E...bZ..=......
+ 0x00, 0xf4, 0x1e, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, // .....nb.........
+ 0x00, 0xe7, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0xf4, 0x1e, 0x00, // ..+......E......
+ 0x00, 0x7f, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x58, 0x0d, 0x00, 0x00, 0xe7, 0x2b, 0x00, // .........X....+.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x83, 0x60, 0x00, 0x00, 0x42, 0x13, 0x00, // .A........`..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0xb5, 0x2a, 0x00, 0x00, 0x83, 0x60, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, // ..*...`..O......
+ 0x00, 0x7c, 0x4a, 0x00, 0x00, 0xb5, 0x2a, 0x00, 0x00, 0xb5, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, // .|J...*...*.....
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // ................
+ 0x00, 0x67, 0x15, 0x00, 0x00, 0x83, 0x0f, 0x00, 0x00, 0x7c, 0x4a, 0x00, 0x00, 0x85, 0x00, 0x05, // .g.......|J.....
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5e, 0x5e, 0x00, 0x00, 0x67, 0x15, 0x00, 0x00, 0xfc, 0x00, 0x00, // .....^^..g......
+ 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x97, 0x19, 0x00, 0x00, 0x5e, 0x5e, 0x00, // .............^^.
+ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1e, 0x54, 0x00, // .....P........T.
+ 0x00, 0x97, 0x19, 0x00, 0x00, 0x97, 0x19, 0x00, 0x00, 0x97, 0x19, 0x00, 0x00, 0x41, 0x00, 0x06, // .............A..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x44, 0x3d, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....D=..B.../..
+ 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfb, 0x1a, 0x00, // .....=..........
+ 0x00, 0x44, 0x3d, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0f, 0x35, 0x00, // .D=..O........5.
+ 0x00, 0xfb, 0x1a, 0x00, 0x00, 0xfb, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x0f, 0x35, 0x00, // .....>....V...5.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xc3, 0x49, 0x00, 0x00, 0x42, 0x13, 0x00, // .A........I..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0x37, 0x5f, 0x00, 0x00, 0xc3, 0x49, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, // .7_...I..O......
+ 0x00, 0xd6, 0x34, 0x00, 0x00, 0x37, 0x5f, 0x00, 0x00, 0x37, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, // ..4..7_..7_.....
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x39, 0x00, // .........>....9.
+ 0x00, 0xd6, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x1e, 0x54, 0x00, // ..4..>....9...T.
+ 0x00, 0x39, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8b, 0x56, 0x00, 0x00, 0x30, 0x0c, 0x00, // .9........V..0..
+ 0x00, 0xd4, 0x56, 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x41, 0x00, 0x06, // ..V...9...9..A..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x20, 0x58, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // ..... X..B.../..
+ 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x58, 0x61, 0x00, // .....=.......Xa.
+ 0x00, 0x20, 0x58, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5a, 0x4f, 0x00, // . X..O.......ZO.
+ 0x00, 0x58, 0x61, 0x00, 0x00, 0x58, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .Xa..Xa.........
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x96, 0x0e, 0x00, // ................
+ 0x00, 0x8b, 0x56, 0x00, 0x00, 0x5a, 0x4f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x91, 0x37, 0x00, // ..V..ZO..>....7.
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x4e, 0x00, // .....9........N.
+ 0x00, 0x01, 0x14, 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, // ......7.........
+ 0x00, 0x3b, 0x2f, 0x00, 0x00, 0x96, 0x0e, 0x00, 0x00, 0x19, 0x4e, 0x00, 0x00, 0x41, 0x00, 0x07, // .;/.......N..A..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0x84, 0x3a, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // ......:..B.../..
+ 0x00, 0x14, 0x0a, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........=......
+ 0x00, 0xaf, 0x2a, 0x00, 0x00, 0x84, 0x3a, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // ..*...:..Q......
+ 0x00, 0xe5, 0x33, 0x00, 0x00, 0x3b, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // ..3..;/......Q..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xde, 0x43, 0x00, 0x00, 0x3b, 0x2f, 0x00, 0x00, 0x01, 0x00, 0x00, // ......C..;/.....
+ 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0x3b, 0x2f, 0x00, // .Q........O..;/.
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9e, 0x3f, 0x00, // .....P........?.
+ 0x00, 0xe5, 0x33, 0x00, 0x00, 0xde, 0x43, 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0xaf, 0x2a, 0x00, // ..3...C...O...*.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xfd, 0x00, 0x01, // .>....J...?.....
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .8....
};
-static const uint8_t fs_debugdraw_fill_lit_dx9[400] =
+static const uint8_t fs_debugdraw_fill_lit_dx9[402] =
{
- 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
- 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0x74, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, // ams......t......
- 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, // . .CTAB....S....
- 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4c, // ...............L
- 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, // ...0...........<
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, // .......u_params.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x04, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x3f, 0x00, // 1..Q..........?.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x05, // ................
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x07, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, // ................
- 0x00, 0xc9, 0x91, 0x5c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x5b, // ...............[
- 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xd2, 0x90, 0x05, 0x00, 0x00, 0x03, 0x02, // ................
- 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
- 0x00, 0x07, 0x80, 0x01, 0x00, 0xd2, 0x80, 0x00, 0x00, 0xc9, 0x80, 0x02, 0x00, 0xe4, 0x81, 0x24, // ...............$
- 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x03, 0x00, // ................
- 0x00, 0x01, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0xa0, 0x04, 0x00, 0x00, 0xa0, 0x01, // ................
- 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, // ................
- 0x00, 0x0e, 0x80, 0x01, 0x00, 0x90, 0x81, 0x01, 0x00, 0x90, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
- 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xf9, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x05, // ................
- 0x00, 0x00, 0x03, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, // ................
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x08, 0x80, 0x03, 0x00, 0xff, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0x74, 0x01, 0x00, 0x00, 0x00, 0x03, 0xff, // ams......t......
+ 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
+ 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
+ 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .L...0..........
+ 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // .<.......u_param
+ 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, // s...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x04, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, // 0.1..Q..........
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, // ?...............
+ 0x02, 0x05, 0x00, 0x01, 0x80, 0x00, 0x00, 0x07, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, // ................
+ 0x80, 0x00, 0x00, 0xc9, 0x91, 0x5c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, // ................
+ 0x80, 0x5b, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xd2, 0x90, 0x05, 0x00, 0x00, // .[..............
+ 0x03, 0x02, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, // ................
+ 0x04, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xd2, 0x80, 0x00, 0x00, 0xc9, 0x80, 0x02, 0x00, 0xe4, // ................
+ 0x81, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, // .$..............
+ 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, // ................
+ 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0xa0, 0x04, 0x00, 0x00, // ................
+ 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, // ................
+ 0x03, 0x00, 0x00, 0x0e, 0x80, 0x01, 0x00, 0x90, 0x81, 0x01, 0x00, 0x90, 0xa0, 0x04, 0x00, 0x00, // ................
+ 0x04, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xf9, 0x80, 0x02, 0x00, 0xe4, // ................
+ 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, // ................
+ 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x08, 0x80, 0x03, 0x00, 0xff, 0xa0, 0xff, 0xff, 0x00, // ................
+ 0x00, 0x00, // ..
};
-static const uint8_t fs_debugdraw_fill_lit_dx11[719] =
+static const uint8_t fs_debugdraw_fill_lit_dx11[721] =
{
- 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
- 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0xb0, 0x02, 0x44, 0x58, 0x42, 0x43, 0x59, // ams........DXBCY
- 0x1c, 0xf9, 0xc6, 0x41, 0xb7, 0xae, 0xfd, 0xa5, 0xa5, 0x0c, 0x28, 0x25, 0x0d, 0x24, 0x29, 0x01, // ...A......(%.$).
- 0x00, 0x00, 0x00, 0xb0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, // ...........,....
- 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, // .......ISGNh....
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // .......P........
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ................
- 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x53, // ...............S
- 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, // V_POSITION.TEXCO
- 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, // ORD....OSGN,....
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....... ........
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, // ...............S
- 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xd8, // V_TARGET...SHDR.
- 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, // ...@...v...Y...F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x72, // . .........b...r
- 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
- 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x72, // ...h.......6...r
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x14, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, // ...........A....
- 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......r.......F
- 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x01, // ...........r....
- 0x00, 0x00, 0x00, 0x26, 0x19, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, // ...&.......8...r
- 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......F.......F
- 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, // .......2...r....
- 0x00, 0x00, 0x00, 0x26, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x96, 0x04, 0x10, 0x00, 0x00, // ...&............
- 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, // ...F...A........
- 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, // ...........F....
- 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, 0x82, // ...F.......D....
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, // .......:.......8
- 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, // ...r............
- 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x12, // ...F............
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......F.......F
- 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x12, // . .........2....
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ................
- 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, // @.....?.@.....?.
- 0x00, 0x00, 0x0a, 0xe2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x89, 0x20, 0x00, 0x00, // ............. ..
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x89, 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, // ......... .A....
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, // .......2...r....
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x38, // ...F. .........8
- 0x00, 0x00, 0x08, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, // ...r ......F....
- 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, // ...F. .........6
- 0x00, 0x00, 0x06, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, // .... ......:. ..
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, // .......>.....@.
+ 0x46, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0xb0, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, // ams..........DXB
+ 0x43, 0x59, 0x1c, 0xf9, 0xc6, 0x41, 0xb7, 0xae, 0xfd, 0xa5, 0xa5, 0x0c, 0x28, 0x25, 0x0d, 0x24, // CY...A......(%.$
+ 0x29, 0x01, 0x00, 0x00, 0x00, 0xb0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // )............,..
+ 0x00, 0x9c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, // .........ISGNh..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
+ 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, // ................
+ 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, // .SV_POSITION.TEX
+ 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, // COORD....OSGN,..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
+ 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, // .SV_TARGET...SHD
+ 0x52, 0xd8, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, // R....@...v...Y..
+ 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, // .F. .........b..
+ 0x03, 0x72, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .r.......e.... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .....h.......6..
+ 0x06, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x14, 0x10, 0x80, 0x41, 0x00, 0x00, // .r...........A..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .........r......
+ 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, // .F...........r..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x19, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, // .....&.......8..
+ 0x07, 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, // .r.......F......
+ 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, // .F.......2...r..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x96, 0x04, 0x10, // .....&..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .....F...A......
+ 0x00, 0x10, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, // .............F..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, // .....F.......D..
+ 0x05, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .........:......
+ 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, // .8...r..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .....F..........
+ 0x08, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, // .........F......
+ 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, // .F. .........2..
+ 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // ..@.....?.@.....
+ 0x3f, 0x00, 0x00, 0x00, 0x0a, 0xe2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x89, 0x20, // ?..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x89, 0x20, 0x80, 0x41, 0x00, 0x00, // ........... .A..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, // .........2...r..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .....F. ........
+ 0x00, 0x38, 0x00, 0x00, 0x08, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, // .8...r ......F..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .....F. ........
+ 0x00, 0x36, 0x00, 0x00, 0x06, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, // .6.... ......:.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, // .........>.....@
+ 0x00, // .
};
static const uint8_t fs_debugdraw_fill_lit_mtl[862] =
{
- 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
+ 0x46, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
0x61, 0x6d, 0x73, 0x02, 0x04, 0x00, 0x00, 0x04, 0x00, 0x40, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, // ams......@...usi
0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, // ng namespace met
0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // al;.struct xlatM
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_texture.bin.h b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_texture.bin.h
index edbde9a3989..c92ca603216 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_texture.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_texture.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_debugdraw_fill_texture_glsl[253] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x76, // Color..........v
0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // arying highp vec
0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, // 4 v_color0;.vary
@@ -17,259 +17,284 @@ static const uint8_t fs_debugdraw_fill_texture_glsl[253] =
0x3d, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x2a, 0x20, 0x76, 0x5f, // = (tmpvar_1 * v_
0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // color0);.}...
};
-static const uint8_t fs_debugdraw_fill_texture_spv[3193] =
+static const uint8_t fs_debugdraw_fill_texture_spv[3599] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x6c, 0x0c, 0x03, 0x02, 0x23, 0x07, // FSH.......l...#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........Ta......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, // w...t...........
- 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, // main........a...
- 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, // BgfxSampler2D...
- 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, // ....a.......m_sa
- 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, // mpler.......a...
- 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // ....m_texture...
- 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, // ........bgfxText
- 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, // ure2D(struct-Bgf
- 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, // xSampler2D-p1-t2
- 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x0e, 0x00, 0x00, // 11;vf2;.....'...
- 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // _sampler........
- 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ...._coord......
- 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, // 5...vec4_splat(f
- 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, // 1;.........._x..
- 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, // ........@main(vf
- 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // 4;vf2;vf4;......
- 0x42, 0x24, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // B$..v_color0....
- 0x05, 0x00, 0x05, 0x00, 0x78, 0x20, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....x ..v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc4, 0x41, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0......A..gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // ragData_0_......
- 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, // C...s_texColor..
- 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ........s_texCol
- 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, // orSampler.......
- 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, // ....s_texColorTe
- 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, // xture...........
- 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, // bgfx_VoidFrag...
- 0x05, 0x00, 0x04, 0x00, 0x0e, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....U..param...
- 0x05, 0x00, 0x04, 0x00, 0xdf, 0x4b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....K..param...
- 0x05, 0x00, 0x05, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // .....A..v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // ........w...v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, // lor0.........<..
- 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // v_texcoord0.....
- 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // t...v_texcoord0.
- 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // ........gl_FragD
- 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, // ata_0_.......G..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, // param........U..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, // param...........
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, // param...........
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x04, 0x00, 0x16, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ........$Global.
- 0x06, 0x00, 0x06, 0x00, 0x16, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x16, 0x06, 0x00, 0x00, // ewRect..........
- 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
- 0x06, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x16, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew..............
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
- 0x16, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ........u_proj..
- 0x06, 0x00, 0x06, 0x00, 0x16, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
- 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x16, 0x06, 0x00, 0x00, // vProj...........
- 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
- 0x06, 0x00, 0x07, 0x00, 0x16, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
- 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
- 0x16, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ........u_model.
- 0x06, 0x00, 0x06, 0x00, 0x16, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
- 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x16, 0x06, 0x00, 0x00, // delView.........
- 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
- 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x16, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.............
- 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, // u_alphaRef4.G...
- 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....".......G...
- 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....!.......G...
- 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....".......G...
- 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....!.......G...
- 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // w...........G...
- 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // t...........G...
- 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ............G...
- 0xcc, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ........@...H...
- 0x16, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x16, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, // #... ...H.......
- 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x16, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x16, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, // ........#...`...
- 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x16, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, // #.......H.......
- 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x16, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x16, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x16, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, // #... ...H.......
- 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x16, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x16, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, // ........#...`...
- 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x16, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, // #.......H.......
- 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x16, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x16, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x16, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x06, 0x00, 0x00, // #.......H.......
- 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x16, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, // ........#... ...
- 0x47, 0x00, 0x03, 0x00, 0x16, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, // G...............
- 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....!...........
- 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, // ............a...
- 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, // ........ .......
- 0x00, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ....a...........
- 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xc2, 0x03, 0x00, 0x00, // ........!.......
- 0x1d, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // ............!...
- 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
- 0x69, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, // i...............
- 0x9a, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, // ....;.......C...
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...y.......
- 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, // ....;...y.......
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...........
- 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, // ....;...........
- 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
- 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, // ................
- 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;.......w.......
- 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;.......t.......
- 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
- 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....e...........
- 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
- 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // +.......j... ...
- 0x1c, 0x00, 0x04, 0x00, 0xcc, 0x0a, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ........e...j...
- 0x1e, 0x00, 0x0e, 0x00, 0x16, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xcc, 0x0a, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e.......e...
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // e.......6.......
- 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // ................
- 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, // Sa..;........G..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, // ....;........U..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // ....;...........
- 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, // ....=.......!C..
- 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, // ....=........3..
- 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, // ....P...a.... ..
- 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x43, 0x12, 0x00, 0x00, // !C...3..>...C...
- 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, // . ..=........A..
- 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, // w...=........<..
- 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, // t...>....G...A..
- 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, // >....U...<..9...
- 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, // .....&.......G..
- 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .U......=.......
- 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........>.......
- 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // ........8...6...
- 0x1d, 0x00, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x03, 0x00, 0x00, // ................
- 0x37, 0x00, 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......'...7...
- 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xcd, 0x5b, 0x00, 0x00, // .............[..
- 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // A.......i$..'...
- 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, // ....=........1..
- 0x69, 0x24, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, // i$..A...y...TD..
- 0x27, 0x0e, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // '.......=.......
- 0x9b, 0x56, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, // .V..TD..V.......
- 0xc9, 0x42, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .B...1...V..=...
- 0x13, 0x00, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, // ....6.......W...
- 0x1d, 0x00, 0x00, 0x00, 0xa4, 0x51, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, // .....Q...B..6...
- 0xfe, 0x00, 0x02, 0x00, 0xa4, 0x51, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // .....Q..8...6...
- 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, // ....5...........
- 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
- 0x17, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x53, 0x00, 0x00, // .>..=........S..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, // ....=.......]J..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, // ....=........4..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x10, 0x35, 0x00, 0x00, // ....=........5..
- 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3f, 0x3a, 0x00, 0x00, // ....P.......?:..
- 0x18, 0x53, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, 0x10, 0x35, 0x00, 0x00, // .S..]J...4...5..
- 0xfe, 0x00, 0x02, 0x00, 0x3f, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // ....?:..8...6...
- 0x08, 0x00, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, // ............i...
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......B$..7...
- 0x90, 0x02, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....x ..7.......
- 0xc4, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x19, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .A..........;...
- 0x8a, 0x02, 0x00, 0x00, 0x0e, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....U......;...
- 0x90, 0x02, 0x00, 0x00, 0xdf, 0x4b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....K......>...
- 0x0e, 0x55, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .U......9.......
- 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x0e, 0x55, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....5....U..=...
- 0x13, 0x00, 0x00, 0x00, 0x48, 0x51, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....HQ..x ..>...
- 0xdf, 0x4b, 0x00, 0x00, 0x48, 0x51, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x1d, 0x00, 0x00, 0x00, // .K..HQ..9.......
- 0x45, 0x5f, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0xdf, 0x4b, 0x00, 0x00, // E_......C....K..
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xac, 0x21, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, // =........!..B$..
- 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x73, 0x2b, 0x00, 0x00, 0x45, 0x5f, 0x00, 0x00, // ........s+..E_..
- 0xac, 0x21, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc4, 0x41, 0x00, 0x00, 0x73, 0x2b, 0x00, 0x00, // .!..>....A..s+..
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....8....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x03, 0x02, // FSH.............
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x6f, 0x62, 0x00, 0x00, 0x00, 0x00, // #.........ob....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ..w...t.........
+ 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, // ................
+ 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x62, 0x67, // in............bg
+ 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, 0x72, 0x75, // fxTexture2D(stru
+ 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, // ct-BgfxSampler2D
+ 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, // -p1-t211;vf2;...
+ 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, // ..~..._sampler.m
+ 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, // _sampler........
+ 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, // .._sampler.m_tex
+ 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, // ture.........._c
+ 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, // oord......5...ve
+ 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, // c4_splat(f1;....
+ 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, // ......_x........
+ 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, // ..@main(vf4;vf2;
+ 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x76, 0x5f, // vf4;......nb..v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x8f, 0x41, // color0.........A
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x06, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ...J..gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, // a_0_......a...Bg
+ 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, // fxSampler2D.....
+ 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, // ..a.......m_samp
+ 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, // ler.......a.....
+ 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // ..m_texture.....
+ 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
+ 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // p.........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, // olorSampler.....
+ 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, // Texture.........
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, // ..s_texColor.m_s
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, // ampler........P.
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, // ..s_texColor.m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, // exture..........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, // ..bgfx_VoidFrag.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......]..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......V..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......9..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x91, 0x37, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......7..param.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .......+..v_colo
+ 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, // r0........w...v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, // color0.........<
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ..t...v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // 0.........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, // gData_0_.......U
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, // ..param........8
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, // ..param.........
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, // ..param.........
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, // ......D...$Globa
+ 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....D.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, // viewRect......D.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, // ......u_viewTexe
+ 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....D.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x03, 0x00, // view......D.....
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invView.....
+ 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, // ..D.......u_proj
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......D.......u_
+ 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, // invProj.......D.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // ......u_viewProj
+ 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x44, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......D.......u_
+ 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // invViewProj.....
+ 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..D.......u_mode
+ 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....D.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x44, 0x06, // modelView.....D.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x0b, 0x00, // wProj.....D.....
+ 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, // ..u_alphaRef4.G.
+ 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......".......G.
+ 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......!.......G.
+ 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......".......G.
+ 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......!.......G.
+ 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..w...........G.
+ 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, // ..t...........G.
+ 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
+ 0x04, 0x00, 0xc2, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, // ..........@...H.
+ 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, // ..D.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...D.......#.
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x02, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x02, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, // ..#... ...H...D.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..D...........H.
+ 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, // ..D.......#...`.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...D.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x04, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x04, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, // ..#.......H...D.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..D...........H.
+ 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, // ..D.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...D.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x06, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x06, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, // ..#... ...H...D.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..D...........H.
+ 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, // ..D.......#...`.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...D.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x08, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x08, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, // ..#.......H...D.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..D...........H.
+ 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, // ..D.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...D.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x0a, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x0a, 0x00, // ......H...D.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, // ..#.......H...D.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, // ..D.......#... .
+ 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x44, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, // ..G...D.........
+ 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, // ......!.........
+ 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, // .......... ...y.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x0a, 0x08, // ..........!.....
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, 0x00, 0x90, 0x02, // ......y.........
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, // ..!.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x69, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, // ..!...i.........
+ 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, // ..............a.
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, // ......a... ...z.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, // ..........;...z.
+ 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, // .......... .....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, // ..........;.....
+ 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, // .......... ...{.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, // ..........;...{.
+ 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, // .......... .....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, // ..........;.....
+ 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..P.......+.....
+ 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, // ................
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, // ......;.......w.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
+ 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, // ......;.......t.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, // ......;.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..........e.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ......+.......j.
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xc2, 0x03, 0x00, 0x00, 0x65, 0x00, // .. ...........e.
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x44, 0x06, 0x00, 0x00, 0x1d, 0x00, // ..j.......D.....
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ......e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xc2, 0x03, // ..e...e...e.....
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, // ..e...e.......6.
+ 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, // ................
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, // ......Sa..;.....
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ..........;.....
+ 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, // ...U......;.....
+ 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ...8......;.....
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ..........=.....
+ 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, // ..!C......=.....
+ 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, // ...3......P...a.
+ 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, // ..^ ..!C...3..>.
+ 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, // ......^ ..A...y.
+ 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...V..........=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, // ...........V..>.
+ 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, // ..........A.....
+ 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...@..........=.
+ 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, // ...........@..>.
+ 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..P.......=.....
+ 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ...+..w...=.....
+ 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, // ...<..t...>....U
+ 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, // ...+..>....8...<
+ 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x16, 0x0e, // ..9........&....
+ 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, // ...U...8......=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ..............>.
+ 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ..............8.
+ 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x0a, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, // ......7...y...~.
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, // ..7...........7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xca, 0x1c, // ................
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0xf7, 0x0d, // ..=.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x7e, 0x17, // ..=........H..~.
+ 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xc6, 0x19, // ..V........>....
+ 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xfe, 0x24, // ...H..=........$
+ 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x82, 0x59, // ......W........Y
+ 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x82, 0x59, // ...>...$.......Y
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, // ..8...6.......5.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, 0x00, // ..........._..=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......[......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......%S......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......=......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......=......P.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, 0x53, // ......V[...[..%S
+ 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, 0x5b, // ...=...=......V[
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x0e, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ......i...7.....
+ 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8f, 0x41, // ..nb..7........A
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0xf8, 0x00, // ..7........J....
+ 0x02, 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5d, // ...S..;........]
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xd4, 0x56, // ......;...y....V
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x39, // ......;........9
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x91, 0x37, // ......;........7
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x0c, 0x0a, // ......>....]....
+ 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, // ..9...........5.
+ 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x23, 0x41, // ...]..=.......#A
+ 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x23, 0x41, // ......>....V..#A
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x50, 0x13, // ..=........,..P.
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x3d, 0x00, // ..>....9...,..=.
+ 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x37, 0x2c, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x3e, 0x00, // ......7,...A..>.
+ 0x03, 0x00, 0x91, 0x37, 0x00, 0x00, 0x37, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, // ...7..7,..9.....
+ 0x00, 0x00, 0x8e, 0x1d, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0xf7, 0x39, // ...........V...9
+ 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xba, 0x5b, // ...7..=........[
+ 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x34, // ..nb..........;4
+ 0x00, 0x00, 0x8e, 0x1d, 0x00, 0x00, 0xba, 0x5b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8c, 0x4a, // .......[..>....J
+ 0x00, 0x00, 0x3b, 0x34, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..;4......8....
};
-static const uint8_t fs_debugdraw_fill_texture_dx9[238] =
+static const uint8_t fs_debugdraw_fill_texture_dx9[240] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xd0, 0x00, 0x00, 0x03, 0xff, // Color0..........
- 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
- 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .<.......s_texCo
- 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // lor.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, // 0.1.............
- 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, // .........B......
- 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x0f, // ................
- 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ..............
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, // Color0..........
+ 0x03, 0xff, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ...L...0........
+ 0x00, 0x02, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, // ...<.......s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, // Color...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, // 10.1...........
+ 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, // ...........B....
+ 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ................
};
-static const uint8_t fs_debugdraw_fill_texture_dx11[401] =
+static const uint8_t fs_debugdraw_fill_texture_dx11[403] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x70, 0x01, 0x44, 0x58, 0x42, // Color0.....p.DXB
- 0x43, 0xbe, 0x78, 0xe7, 0xa5, 0x19, 0x0c, 0x70, 0xeb, 0x4c, 0xb1, 0xac, 0x1f, 0x16, 0x84, 0xe9, // C.x....p.L......
- 0x97, 0x01, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // .....p.......,..
- 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, // .........ISGNl..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........b......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, // .SV_POSITION.COL
- 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, // OR.TEXCOORD..OSG
- 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // N,........... ..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
- 0xab, 0x53, 0x48, 0x44, 0x52, 0x94, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, // .SHDR....@...%..
- 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, // .Z....`......X..
- 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, // ..p......UU..b..
- 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, // .........b...2..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....e.... .....
- 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, // .h.......E......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, // .....F.......F~.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, // ......`......8..
- 0x07, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, // .. ......F......
- 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .F.......>......
- 0x00, // .
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x70, 0x01, 0x00, 0x00, 0x44, // Color0.....p...D
+ 0x58, 0x42, 0x43, 0xbe, 0x78, 0xe7, 0xa5, 0x19, 0x0c, 0x70, 0xeb, 0x4c, 0xb1, 0xac, 0x1f, 0x16, // XBC.x....p.L....
+ 0x84, 0xe9, 0x97, 0x01, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // .......p.......,
+ 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, // ...........ISGNl
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, // ...........b....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, // ...SV_POSITION.C
+ 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, // OLOR.TEXCOORD..O
+ 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, // .......SV_TARGET
+ 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x94, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x25, // ...SHDR....@...%
+ 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, // ...Z....`......X
+ 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, // ....p......UU..b
+ 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, // ...........b...2
+ 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, // ...h.......E....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, // ~.......`......8
+ 0x00, 0x00, 0x07, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, // .... ......F....
+ 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, // ...F.......>....
+ 0x00, 0x00, 0x00, // ...
};
static const uint8_t fs_debugdraw_fill_texture_mtl[590] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x3f, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH.......?...us
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x3f, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH.......?...us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h
index 75233cfde3b..f8c37fc71f7 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h
@@ -1,180 +1,180 @@
static const uint8_t fs_debugdraw_lines_glsl[89] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH....I..J...va
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH....I..J...va
0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, // v_color0;.void
0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, // main ().{. gl_F
0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, // ragColor = v_col
0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // or0;.}...
};
-static const uint8_t fs_debugdraw_lines_spv[2065] =
+static const uint8_t fs_debugdraw_lines_spv[2079] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x04, 0x08, 0x03, 0x02, 0x23, 0x07, // FSH....I......#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........za......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, // w...............
- 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, // ........5...vec4
- 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // _splat(f1;......
- 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xff, 0x0f, 0x00, 0x00, // ...._x..........
- 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // @main(vf4;vf4;..
- 0x05, 0x00, 0x05, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....O0..v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // .........%..gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ragData_0_......
- 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, // ....bgfx_VoidFra
- 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // g.......,N..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // m........@..v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, // lor0........w...
- 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // v_color0........
- 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // 0_.......G..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // m...........gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0xc7, 0x02, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ....$Global.....
- 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, // ........u_viewRe
- 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ct..............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, // u_viewTexel.....
- 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, // ........u_view..
- 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
- 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // vView...........
- 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_proj......
- 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, // ........u_invPro
- 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // j...............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, // u_viewProj......
- 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // wProj...........
- 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_model.....
- 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // ........u_modelV
- 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // iew.............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
- 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, // ............u_al
- 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, // phaRef4.G...w...
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf0, 0x06, 0x00, 0x00, // ........G.......
- 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ....@...H.......
- 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xc7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
- 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
- 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
- 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, // .... ... .......
- 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, // ........!.......
- 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x3d, 0x0b, 0x00, 0x00, // ........!...=...
- 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....w....... ...
- 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
- 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
- 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
- 0xf0, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // ....e...j.......
- 0xc7, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e.......e...e...
- 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
- 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........G......
- 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, // =........@..w...
- 0x3e, 0x00, 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, // >....G...@..9...
- 0x08, 0x00, 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, // ....ya.......G..
- 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, // ....=...........
- 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, // ....>...........
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....8...6.......
- 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 5...........7...
- 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, // ................
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =.......dW......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =........N......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =.......I9......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =........9......
- 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, // P........*..dW..
- 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, // .N..I9...9......
- 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // .*..8...6.......
- 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // ........=...7...
- 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....O0..7.......
- 0xa2, 0x25, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xee, 0x5f, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .%......._..;...
- 0x8a, 0x02, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....,N......>...
- 0x2c, 0x4e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // ,N......9.......
- 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....5...,N..=...
- 0x1d, 0x00, 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....X[..O0..>...
- 0xa2, 0x25, 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // .%..X[......8...
- 0x00, // .
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x03, 0x02, // FSH....I........
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, // #.........za....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, // ..w.............
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, // ................
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, // ......5...vec4_s
+ 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, // plat(f1;........
+ 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x40, 0x6d, // .._x..........@m
+ 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, // ain(vf4;vf4;....
+ 0x05, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..O0..v_color0..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // .......%..gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, // gData_0_........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, // ..bgfx_VoidFrag.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......,N..param.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .......@..v_colo
+ 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, // r0........w...v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, // color0..........
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......G..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // ..........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc7, 0x02, // gData_0_........
+ 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, // ..$Global.......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, // viewTexel.......
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
+ 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, // iew.............
+ 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, // ..u_proj........
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc7, 0x02, // viewProj........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, // roj.............
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, // ..u_model.......
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.............u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
+ 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..........u_alph
+ 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, // aRef4.G...w.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, // ......G.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf0, 0x06, 0x00, 0x00, 0x06, 0x00, // ......G.........
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#...`...H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#...`...H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0b, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xc7, 0x02, // ..#... ...G.....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // .. ... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......!.........
+ 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x3d, 0x0b, 0x00, 0x00, 0x08, 0x00, // ......!...=.....
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // .......... .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..w....... .....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
+ 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xf0, 0x06, // ..j... .........
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xc7, 0x02, // ..e...j.........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......e...e.....
+ 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......G......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3e, 0x00, // .......@..w...>.
+ 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, // ...G...@..9.....
+ 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x9a, 0x16, // ..ya.......G....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, // ..=.............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, // ..>.............
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, // ..8...6.......5.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......dW......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......N......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......I9......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......9......P.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xa9, 0x4e, // .......*..dW...N
+ 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, // ..I9...9.......*
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0x0f, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ......=...7.....
+ 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa2, 0x25, // ..O0..7........%
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xee, 0x5f, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // ......._..;.....
+ 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2c, 0x4e, // ..,N......>...,N
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, // ......9.........
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..5...,N..=.....
+ 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x25, // ..X[..O0..>....%
+ 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..X[......8....
};
-static const uint8_t fs_debugdraw_lines_dx9[129] =
+static const uint8_t fs_debugdraw_lines_dx9[131] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x74, 0x00, 0x00, 0x03, 0xff, 0xff, // FSH....I..t.....
- 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#...
- 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
- 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....ps_3_0.Micro
- 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
- 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, // ader Compiler 10
- 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, // .1..............
- 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, // ................
- 0x00, // .
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x03, // FSH....I..t.....
+ 0xff, 0xff, 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, // ......CTAB....#.
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, // 10.1............
+ 0x0f, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, // ................
+ 0x00, 0x00, 0x00, // ...
};
-static const uint8_t fs_debugdraw_lines_dx11[260] =
+static const uint8_t fs_debugdraw_lines_dx11[262] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0xf4, 0x00, 0x44, 0x58, 0x42, 0x43, // FSH....I....DXBC
- 0xa6, 0x7f, 0x08, 0xe2, 0x95, 0xbd, 0x5f, 0xa3, 0x3f, 0x5b, 0x58, 0x8e, 0x54, 0x0f, 0x89, 0x67, // ......_.?[X.T..g
- 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
- 0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, // ........ISGNL...
- 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........8.......
- 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // D...............
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
- 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, // ION.COLOR...OSGN
- 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
- 0x53, 0x48, 0x44, 0x52, 0x38, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, // SHDR8...@.......
- 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, // b...........e...
- 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, // . ......6.... ..
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, // ....F.......>...
- 0x00, 0x00, 0x00, 0x00, // ....
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x44, 0x58, // FSH....I......DX
+ 0x42, 0x43, 0xa6, 0x7f, 0x08, 0xe2, 0x95, 0xbd, 0x5f, 0xa3, 0x3f, 0x5b, 0x58, 0x8e, 0x54, 0x0f, // BC......_.?[X.T.
+ 0x89, 0x67, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // .g............,.
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, // ..........ISGNL.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........8.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ..D.............
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, // ..........SV_POS
+ 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0xab, 0xab, 0x4f, 0x53, // ITION.COLOR...OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x38, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0e, 0x00, // ..SHDR8...@.....
+ 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, // ..b...........e.
+ 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, // ... ......6....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......F.......>.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ......
};
static const uint8_t fs_debugdraw_lines_mtl[404] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x75, 0x73, // FSH....I......us
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x75, 0x73, // FSH....I......us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h
index 9d8ff47c6bf..3f2c6870752 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_debugdraw_lines_stipple_glsl[235] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH...Z.......va
+ 0x46, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH...Z.......va
0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, // v_color0;.varyi
0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, // ng highp float v
@@ -16,239 +16,240 @@ static const uint8_t fs_debugdraw_lines_stipple_glsl[235] =
0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x5f, 0x63, // _FragColor = v_c
0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // olor0;.}...
};
-static const uint8_t fs_debugdraw_lines_stipple_spv[2773] =
+static const uint8_t fs_debugdraw_lines_stipple_spv[2787] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xc8, 0x0a, 0x03, 0x02, 0x23, 0x07, // FSH...Z.......#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0xf4, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........a......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0xf9, 0x15, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, // w...............
- 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x13, 0x00, 0x00, // main........,...
- 0x6d, 0x6f, 0x64, 0x28, 0x66, 0x31, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // mod(f1;f1;......
- 0xc6, 0x0e, 0x00, 0x00, 0x5f, 0x61, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc7, 0x0e, 0x00, 0x00, // ...._a..........
- 0x5f, 0x62, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, // _b......5...vec4
- 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // _splat(f1;......
- 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xa6, 0x14, 0x00, 0x00, // ...._x..........
- 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x66, 0x31, 0x3b, 0x76, 0x66, 0x34, // @main(vf4;f1;vf4
- 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xfb, 0x54, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // ;........T..v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa4, 0x52, 0x00, 0x00, // lor0.........R..
- 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // v_stipple.......
- 0xbf, 0x58, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // .X..gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, // 0_..........bgfx
- 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // _VoidFrag.......
- 0x97, 0x52, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .R..param.......
- 0x07, 0x4c, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .L..param.......
- 0x8b, 0x2c, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // .,..param.......
- 0xcb, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // .A..v_color0....
- 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....w...v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x76, 0x5f, 0x73, 0x74, // ........,?..v_st
- 0x69, 0x70, 0x70, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf9, 0x15, 0x00, 0x00, // ipple...........
- 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // v_stipple.......
- 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // 0_.......G..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........U..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // m...........gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0x0b, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ....$Global.....
- 0x0b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, // ........u_viewRe
- 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ct..............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, // u_viewTexel.....
- 0x0b, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, // ........u_view..
- 0x06, 0x00, 0x06, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
- 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, // vView...........
- 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_proj......
- 0x0b, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, // ........u_invPro
- 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // j...............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, // u_viewProj......
- 0x0b, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, // wProj...........
- 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_model.....
- 0x0b, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // ........u_modelV
- 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // iew.............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
- 0x06, 0x00, 0x06, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, // ............u_al
- 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, // phaRef4.G...w...
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf9, 0x15, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x2a, 0x07, 0x00, 0x00, // ........G...*...
- 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, // ....@...H.......
- 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x0b, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0x0b, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x0b, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0x0b, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x0b, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, // ........H.......
- 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
- 0x0b, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
- 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
- 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, // .... ... .......
- 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xd7, 0x0a, 0x00, 0x00, // ........!.......
- 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // ................
- 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // ............!...
- 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
- 0x51, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, // Q...............
- 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x00, // ...>+.......n...
- 0x00, 0x00, 0x80, 0x3e, 0x14, 0x00, 0x02, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ...>........ ...
- 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....w....... ...
- 0x8b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x8b, 0x02, 0x00, 0x00, 0xf9, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
- 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
- 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
- 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // *...e...j.......
- 0x0b, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...*...e...e...
- 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
- 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........G......
- 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
- 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, // =........A..w...
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xf9, 0x15, 0x00, 0x00, // =.......,?......
- 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....G...A..>...
- 0xab, 0x55, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, // .U..,?..9.......
- 0xbd, 0x26, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, // .&.......G...U..
- 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, // ....=...........
- 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, // ....>...........
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // ....8...6.......
- 0x2c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x0a, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // ,...........7...
- 0x8a, 0x02, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........7.......
- 0xc7, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x43, 0x5c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ........C...=...
- 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....dW......=...
- 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....N......=...
- 0x0d, 0x00, 0x00, 0x00, 0x71, 0x3d, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....q=......=...
- 0x0d, 0x00, 0x00, 0x00, 0x15, 0x4c, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, // .....L..........
- 0x0d, 0x00, 0x00, 0x00, 0xf6, 0x18, 0x00, 0x00, 0x71, 0x3d, 0x00, 0x00, 0x15, 0x4c, 0x00, 0x00, // ........q=...L..
- 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa1, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .........+......
- 0x08, 0x00, 0x00, 0x00, 0xf6, 0x18, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x86, 0x40, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xa1, 0x2b, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, // .@...N...+......
- 0x0d, 0x00, 0x00, 0x00, 0xbf, 0x2c, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0x86, 0x40, 0x00, 0x00, // .....,..dW...@..
- 0xfe, 0x00, 0x02, 0x00, 0xbf, 0x2c, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // .....,..8...6...
- 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, // ....5...........
- 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
- 0xc4, 0x25, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x94, 0x1f, 0x00, 0x00, // .%..=...........
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1f, 0x48, 0x00, 0x00, // ....=........H..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbf, 0x32, 0x00, 0x00, // ....=........2..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd2, 0x32, 0x00, 0x00, // ....=........2..
- 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xec, 0x21, 0x00, 0x00, // ....P........!..
- 0x94, 0x1f, 0x00, 0x00, 0x1f, 0x48, 0x00, 0x00, 0xbf, 0x32, 0x00, 0x00, 0xd2, 0x32, 0x00, 0x00, // .....H...2...2..
- 0xfe, 0x00, 0x02, 0x00, 0xec, 0x21, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // .....!..8...6...
- 0x08, 0x00, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, // ............Q...
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xfb, 0x54, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7........T..7...
- 0x8a, 0x02, 0x00, 0x00, 0xa4, 0x52, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // .....R..7.......
- 0xbf, 0x58, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf3, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .X.......a..;...
- 0x8a, 0x02, 0x00, 0x00, 0x97, 0x52, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....R......;...
- 0x8a, 0x02, 0x00, 0x00, 0x07, 0x4c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....L......;...
- 0x8a, 0x02, 0x00, 0x00, 0x8b, 0x2c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....,......>...
- 0x97, 0x52, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .R......9.......
- 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x97, 0x52, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....5....R..=...
- 0x0d, 0x00, 0x00, 0x00, 0x69, 0x4f, 0x00, 0x00, 0xa4, 0x52, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....iO...R..>...
- 0x07, 0x4c, 0x00, 0x00, 0x69, 0x4f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x2c, 0x00, 0x00, // .L..iO..>....,..
- 0x6e, 0x01, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00, // n...9.......!"..
- 0x2c, 0x13, 0x00, 0x00, 0x07, 0x4c, 0x00, 0x00, 0x8b, 0x2c, 0x00, 0x00, 0xb8, 0x00, 0x05, 0x00, // ,....L...,......
- 0x09, 0x00, 0x00, 0x00, 0x6e, 0x1d, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00, // ....n.......!"..
- 0xf7, 0x00, 0x03, 0x00, 0x09, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, // ................
- 0x6e, 0x1d, 0x00, 0x00, 0x2a, 0x4a, 0x00, 0x00, 0x09, 0x1d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // n...*J..........
- 0x2a, 0x4a, 0x00, 0x00, 0xfc, 0x00, 0x01, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x09, 0x1d, 0x00, 0x00, // *J..............
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x05, 0x3c, 0x00, 0x00, 0xfb, 0x54, 0x00, 0x00, // =........<...T..
- 0x3e, 0x00, 0x03, 0x00, 0xbf, 0x58, 0x00, 0x00, 0x05, 0x3c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >....X...<......
- 0x38, 0x00, 0x01, 0x00, 0x00, // 8....
+ 0x46, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xd4, 0x0a, 0x00, 0x00, 0x03, 0x02, // FSH...Z.........
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0xf4, 0x61, 0x00, 0x00, 0x00, 0x00, // #..........a....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0xf9, 0x15, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ..w.............
+ 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, // ................
+ 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x13, 0x00, 0x00, 0x6d, 0x6f, // in........,...mo
+ 0x64, 0x28, 0x66, 0x31, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc6, 0x0e, // d(f1;f1;........
+ 0x00, 0x00, 0x5f, 0x61, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x5f, 0x62, // .._a.........._b
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, // ......5...vec4_s
+ 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, // plat(f1;........
+ 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x40, 0x6d, // .._x..........@m
+ 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x66, 0x31, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, // ain(vf4;f1;vf4;.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xfb, 0x54, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .......T..v_colo
+ 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa4, 0x52, 0x00, 0x00, 0x76, 0x5f, // r0.........R..v_
+ 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xbf, 0x58, // stipple........X
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, // ..........bgfx_V
+ 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x97, 0x52, // oidFrag........R
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x07, 0x4c, // ..param........L
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8b, 0x2c, // ..param........,
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, // ..param........A
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..w...v_color0..
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, // ......,?..v_stip
+ 0x70, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf9, 0x15, 0x00, 0x00, 0x76, 0x5f, // ple...........v_
+ 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, // stipple.........
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......G..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......U..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // ..........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0b, 0x05, // gData_0_........
+ 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0b, 0x05, // ..$Global.......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0b, 0x05, // viewTexel.......
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
+ 0x06, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x04, 0x00, // iew.............
+ 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0b, 0x05, // ..u_proj........
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0b, 0x05, // viewProj........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x08, 0x00, // roj.............
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0b, 0x05, // ..u_model.......
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.............u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
+ 0x06, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..........u_alph
+ 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, // aRef4.G...w.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf9, 0x15, 0x00, 0x00, 0x1e, 0x00, // ......G.........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, // ......G.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x06, 0x00, // ......G...*.....
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, // ..#.......H.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, // ..#...`...H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, // ..#.......H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, // ..#...`...H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, // ..#.......H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0b, 0x05, 0x00, 0x00, 0x0b, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0b, 0x05, // ..#... ...G.....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // .. ... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xd7, 0x0a, 0x00, 0x00, 0x0d, 0x00, // ......!.........
+ 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, // ..........!.....
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x51, 0x00, // ..........!...Q.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9a, 0x02, // ................
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, // .>+.......n.....
+ 0x80, 0x3e, 0x14, 0x00, 0x02, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // .>........ .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, // ..w....... .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8b, 0x02, // ..........;.....
+ 0x00, 0x00, 0xf9, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // .......... .....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
+ 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x2a, 0x07, // ..j... .......*.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0b, 0x05, // ..e...j.........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..*...e...e.....
+ 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......G......;.
+ 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......A..w...=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xf9, 0x15, 0x00, 0x00, 0x3e, 0x00, // ......,?......>.
+ 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, // ...G...A..>....U
+ 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, // ..,?..9........&
+ 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, // .......G...U....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, // ..=.............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, // ..>.............
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2c, 0x13, // ..8...6.......,.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x0a, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
+ 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xc7, 0x0e, // ......7.........
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x43, 0x5c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ......C...=.....
+ 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..dW......=.....
+ 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ...N......=.....
+ 0x00, 0x00, 0x71, 0x3d, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..q=......=.....
+ 0x00, 0x00, 0x15, 0x4c, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x0d, 0x00, // ...L............
+ 0x00, 0x00, 0xf6, 0x18, 0x00, 0x00, 0x71, 0x3d, 0x00, 0x00, 0x15, 0x4c, 0x00, 0x00, 0x0c, 0x00, // ......q=...L....
+ 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa1, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, // .......+........
+ 0x00, 0x00, 0xf6, 0x18, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x86, 0x40, // ...............@
+ 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xa1, 0x2b, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, // ...N...+........
+ 0x00, 0x00, 0xbf, 0x2c, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0x86, 0x40, 0x00, 0x00, 0xfe, 0x00, // ...,..dW...@....
+ 0x02, 0x00, 0xbf, 0x2c, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...,..8...6.....
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, // ..5...........7.
+ 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc4, 0x25, // ...............%
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x94, 0x1f, 0x00, 0x00, 0xdd, 0x0e, // ..=.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1f, 0x48, 0x00, 0x00, 0xdd, 0x0e, // ..=........H....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbf, 0x32, 0x00, 0x00, 0xdd, 0x0e, // ..=........2....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd2, 0x32, 0x00, 0x00, 0xdd, 0x0e, // ..=........2....
+ 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xec, 0x21, 0x00, 0x00, 0x94, 0x1f, // ..P........!....
+ 0x00, 0x00, 0x1f, 0x48, 0x00, 0x00, 0xbf, 0x32, 0x00, 0x00, 0xd2, 0x32, 0x00, 0x00, 0xfe, 0x00, // ...H...2...2....
+ 0x02, 0x00, 0xec, 0x21, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, // ...!..8...6.....
+ 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x37, 0x00, // ..........Q...7.
+ 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xfb, 0x54, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // .......T..7.....
+ 0x00, 0x00, 0xa4, 0x52, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbf, 0x58, // ...R..7........X
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf3, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // .......a..;.....
+ 0x00, 0x00, 0x97, 0x52, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // ...R......;.....
+ 0x00, 0x00, 0x07, 0x4c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // ...L......;.....
+ 0x00, 0x00, 0x8b, 0x2c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x97, 0x52, // ...,......>....R
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, // ......9.........
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x97, 0x52, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..5....R..=.....
+ 0x00, 0x00, 0x69, 0x4f, 0x00, 0x00, 0xa4, 0x52, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x07, 0x4c, // ..iO...R..>....L
+ 0x00, 0x00, 0x69, 0x4f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x2c, 0x00, 0x00, 0x6e, 0x01, // ..iO..>....,..n.
+ 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00, 0x2c, 0x13, // ..9.......!"..,.
+ 0x00, 0x00, 0x07, 0x4c, 0x00, 0x00, 0x8b, 0x2c, 0x00, 0x00, 0xb8, 0x00, 0x05, 0x00, 0x09, 0x00, // ...L...,........
+ 0x00, 0x00, 0x6e, 0x1d, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00, 0xf7, 0x00, // ..n.......!"....
+ 0x03, 0x00, 0x09, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x6e, 0x1d, // ..............n.
+ 0x00, 0x00, 0x2a, 0x4a, 0x00, 0x00, 0x09, 0x1d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2a, 0x4a, // ..*J..........*J
+ 0x00, 0x00, 0xfc, 0x00, 0x01, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x09, 0x1d, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x05, 0x3c, 0x00, 0x00, 0xfb, 0x54, 0x00, 0x00, 0x3e, 0x00, // .......<...T..>.
+ 0x03, 0x00, 0xbf, 0x58, 0x00, 0x00, 0x05, 0x3c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ...X...<......8.
+ 0x01, 0x00, 0x00, // ...
};
-static const uint8_t fs_debugdraw_lines_stipple_dx9[297] =
+static const uint8_t fs_debugdraw_lines_stipple_dx9[299] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x03, 0xff, 0xff, // FSH...Z.........
- 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#...
- 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
- 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....ps_3_0.Micro
- 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
- 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, // ader Compiler 10
- 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x40, // .1..Q..........@
- 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x05, // ...>...>....Q...
- 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, // ................
- 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x01, 0x90, 0x05, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x13, 0x00, 0x00, 0x02, // ................
- 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, // ................
- 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, // ..U.............
- 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0xa1, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x03, // ......U.........
- 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xaa, 0xa0, 0x58, 0x00, 0x00, 0x04, // ............X...
- 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x55, 0xa0, // ..............U.
- 0x41, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, // A...............
- 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
+ 0x46, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x03, // FSH...Z.........
+ 0xff, 0xff, 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, // ......CTAB....#.
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, // 10.1..Q.........
+ 0x80, 0x40, 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // .@...>...>....Q.
+ 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
+ 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x01, 0x90, 0x05, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x13, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x01, 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ....U...........
+ 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0xa1, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, // ........U.......
+ 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xaa, 0xa0, 0x58, 0x00, // ..............X.
+ 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, // ................
+ 0x55, 0xa0, 0x41, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, // U.A.............
+ 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ...........
};
-static const uint8_t fs_debugdraw_lines_stipple_dx11[440] =
+static const uint8_t fs_debugdraw_lines_stipple_dx11[442] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xa8, 0x01, 0x44, 0x58, 0x42, 0x43, // FSH...Z.....DXBC
- 0x6f, 0x8f, 0x64, 0x39, 0xd9, 0xef, 0xc7, 0x09, 0x59, 0xdc, 0x77, 0x5a, 0xe8, 0x91, 0x4c, 0x16, // o.d9....Y.wZ..L.
- 0x01, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
- 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, // ........ISGNl...
- 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........P.......
- 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........b.......
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, // ................
- 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
- 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, // R.TEXCOORD..OSGN
- 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
- 0x53, 0x48, 0x44, 0x52, 0xcc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, // SHDR....@...3...
- 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, // b...........b...
- 0x12, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
- 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, // ....h.......8...
- 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
- 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x41, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, // .@.....@A.......
- 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, // ............2...
- 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, // ............A...
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3e, 0x0a, 0x10, 0x10, 0x00, // .....@.....>....
- 0x02, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....1...........
- 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // .@.....>........
- 0x0d, 0x00, 0x04, 0x03, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, // ............6...
- 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // . ......F.......
- 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // >.......
+ 0x46, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0x44, 0x58, // FSH...Z.......DX
+ 0x42, 0x43, 0x6f, 0x8f, 0x64, 0x39, 0xd9, 0xef, 0xc7, 0x09, 0x59, 0xdc, 0x77, 0x5a, 0xe8, 0x91, // BCo.d9....Y.wZ..
+ 0x4c, 0x16, 0x01, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // L.............,.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, // ..........ISGNl.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........b.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, // LOR.TEXCOORD..OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xcc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x33, 0x00, // ..SHDR....@...3.
+ 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, // ..b...........b.
+ 0x00, 0x03, 0x12, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, // ..........e....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, // ......h.......8.
+ 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x10, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x41, 0x00, 0x00, 0x05, 0x12, 0x00, // ...@.....@A.....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, // ..............2.
+ 0x00, 0x0a, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x80, 0x41, 0x00, // ..............A.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3e, 0x0a, 0x10, // .......@.....>..
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, // ......1.........
+ 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, // ...@.....>......
+ 0x00, 0x00, 0x0d, 0x00, 0x04, 0x03, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, // ..............6.
+ 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, // ... ......F.....
+ 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ..>.......
};
static const uint8_t fs_debugdraw_lines_stipple_mtl[555] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...Z.......us
+ 0x46, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...Z.......us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h
index d816a1ca02a..d2dc7d7363b 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_debugdraw_fill_glsl[329] =
{
- 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, // wProj.......u_mo
0x64, 0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x20, 0x00, 0x1b, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, // del. .. .....att
0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // ribute highp vec
@@ -22,256 +22,252 @@ static const uint8_t vs_debugdraw_fill_glsl[329] =
0x65, 0x73, 0x2e, 0x78, 0x29, 0x5d, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // es.x)] * tmpvar_
0x31, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // 1));.}...
};
-static const uint8_t vs_debugdraw_fill_spv[2636] =
+static const uint8_t vs_debugdraw_fill_spv[2546] =
{
- 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x20, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // el. .. ..u_viewP
- 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x20, 0x0a, 0x03, 0x02, 0x23, 0x07, 0x00, // roj...... ...#..
- 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x9a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, // ........a.......
- 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, // ...............G
- 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, // LSL.std.450.....
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x48, // .......main....H
- 0x0c, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, // ................
- 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, // .......main.....
- 0x00, 0x04, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, // .......Output...
- 0x00, 0x06, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, // ...........gl_Po
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x05, 0x00, 0x06, 0x00, 0xbd, 0x10, 0x00, 0x00, 0x40, // sition.........@
- 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x69, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, // main(vi4;vf3;...
- 0x00, 0x05, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, // ...O0..a_indices
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, // ........%..a_pos
- 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xff, 0x10, 0x00, 0x00, 0x6d, // ition..........m
- 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x24, // odel...........$
- 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x00, // Global..........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, // ...u_viewRect...
- 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...........u_vie
- 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x02, // wTexel..........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, // ...u_view.......
- 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, // .......u_invView
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, // ...............u
- 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x05, // _proj...........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, // ...u_invProj....
- 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...........u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x07, // wProj...........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // ...u_invViewProj
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, // ...............u
- 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x09, // _model..........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, // ...u_modelView..
- 0x00, 0x07, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // ...........u_mod
- 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, // elViewProj......
- 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, // .......u_alphaRe
- 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, // f4.....B........
- 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, // ......._varying_
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x69, 0x6e, 0x64, // ........A..a_ind
- 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x61, // ices.......H...a
- 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, // _indices.......,
- 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, // ?..a_position...
- 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // .......a_positio
- 0x6e, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, // n..........@entr
- 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, // yPointOutput_gl_
- 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xef, // Position........
- 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, // G..param........
- 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xcf, // ...param........
- 0x03, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, // ...Output.......
- 0x0f, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, // ...@entryPointOu
- 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x06, // tput...G........
- 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x00, // ...@...H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, // ...#.......H....
- 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // .......#.......H
- 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, // ...........#...
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x03, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x03, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, // ...#...`...H....
- 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, // ...........#....
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x05, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x05, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, // ...#.......H....
- 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, // ...........#...
- 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x07, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x07, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, // ...#...`...H....
- 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, // ...........#....
- 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x09, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x09, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, // ...#.......H....
- 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, // ...........#....
- 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0b, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x97, // ...#... ...G....
- 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, // .......G...B..."
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x1e, // .......G...H....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, // .......G........
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, // .......G........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, // .......G........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, // ...............!
- 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, // ................
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1a, // ... ............
- 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, // ........... ....
- 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, // ................
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, // ... ............
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, // ....... ........
- 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, // ................
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x1d, // ................
- 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x3f, 0x07, 0x00, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x97, // ...!...?........
- 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, // ....... ........
- 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, // .......+........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, // ......?....e....
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, // ...............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, // .......+.......j
- 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x65, // ... ...........e
- 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x1d, // ...j............
- 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // .......e...e...e
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xc3, // ...e...e...e....
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, // ...e...e.......
- 0x00, 0x04, 0x00, 0x51, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x3b, // ...Q...........;
- 0x00, 0x04, 0x00, 0x51, 0x02, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, // ...Q...B.......+
- 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2b, // .......#.......+
- 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, // ...............
- 0x00, 0x04, 0x00, 0x89, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, // ...............
- 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, // ...........e...
- 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x2b, // ...v...........+
- 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, // ...............+
- 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, // ...............
- 0x00, 0x04, 0x00, 0x98, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3b, // ...............;
- 0x00, 0x04, 0x00, 0x98, 0x02, 0x00, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, // .......H.......
- 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, // ...............;
- 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, // ...............
- 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, // ...............;
- 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, // ................
- 0x00, 0x02, 0x00, 0xcf, 0x03, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x4c, 0x06, 0x00, 0x00, 0x03, // ....... ...L....
- 0x00, 0x00, 0x00, 0xcf, 0x03, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4c, 0x06, 0x00, 0x00, 0xcd, // .......;...L....
- 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, // .......6........
- 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, // ...............S
- 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x07, // a..;........G...
- 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, // ...;............
- 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x48, // ...=........A..H
- 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, // ...=.......,?...
- 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, // ...>....G...A..>
- 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0xf9, // .......,?..9....
- 0x03, 0x00, 0x00, 0x39, 0x19, 0x00, 0x00, 0xbd, 0x10, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x9a, // ...9........G...
- 0x16, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf8, 0x21, 0x00, 0x00, 0x39, // ...Q........!..9
- 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xf8, // .......>........
- 0x21, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0xf9, // !......8...6....
- 0x03, 0x00, 0x00, 0xbd, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x07, 0x00, 0x00, 0x37, // ...........?...7
- 0x00, 0x03, 0x00, 0x97, 0x02, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, // .......O0..7....
- 0x02, 0x00, 0x00, 0xa2, 0x25, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xdb, 0x5f, 0x00, 0x00, 0x3b, // ....%......._..;
- 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, // ...v...........=
- 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd1, 0x46, 0x00, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x51, // ........F...%..Q
- 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2c, 0x46, 0x00, 0x00, 0xd1, 0x46, 0x00, 0x00, 0x00, // .......,F...F...
- 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd3, 0x4f, 0x00, 0x00, 0xd1, // ...Q........O...
- 0x46, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, // F......Q........
- 0x5b, 0x00, 0x00, 0xd1, 0x46, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, // [...F......P....
- 0x00, 0x00, 0x00, 0x4c, 0x3b, 0x00, 0x00, 0x2c, 0x46, 0x00, 0x00, 0xd3, 0x4f, 0x00, 0x00, 0xf3, // ...L;..,F...O...
- 0x5b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x89, 0x02, 0x00, 0x00, 0x5a, // [......A.......Z
- 0x60, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, // `..O0......=....
- 0x00, 0x00, 0x00, 0x99, 0x61, 0x00, 0x00, 0x5a, 0x60, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xe2, // ....a..Z`..A....
- 0x02, 0x00, 0x00, 0xa2, 0x48, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, 0x99, // ....H..B...#....
- 0x61, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xb5, 0x2f, 0x00, 0x00, 0xa2, // a..=...e..../...
- 0x48, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0x4c, // H..............L
- 0x3b, 0x00, 0x00, 0xb5, 0x2f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0xc4, // ;.../..A........
- 0x2e, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, // ...B.......=...e
- 0x00, 0x00, 0x00, 0xcc, 0x5e, 0x00, 0x00, 0xc4, 0x2e, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, // ....^...........
- 0x00, 0x00, 0x00, 0x67, 0x44, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xcc, 0x5e, 0x00, 0x00, 0x41, // ...gD.......^..A
- 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xee, 0x27, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, // ........'.......
- 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xee, 0x27, 0x00, 0x00, 0x67, 0x44, 0x00, 0x00, 0x3d, // ...>....'..gD..=
- 0x00, 0x04, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x5e, 0x5b, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, // .......^[.......
- 0x00, 0x02, 0x00, 0x5e, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ...^[..8....
+ 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0xc4, 0x09, 0x00, 0x00, 0x03, 0x02, 0x23, // roj............#
+ 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x9a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........a.....
+ 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
+ 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x48, 0x0c, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x03, // .H..............
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf9, 0x03, 0x00, // .main...........
+ 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xf9, 0x03, 0x00, // .Output.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // .....gl_Position
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0xbd, 0x10, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, // .........@main(v
+ 0x69, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x4f, 0x30, 0x00, // i4;vf3;......O0.
+ 0x00, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // .a_indices......
+ 0x00, 0xa2, 0x25, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, // ..%..a_position.
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0xff, 0x10, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x00, // .........model..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, // .........$Global
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .............u_v
+ 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, // iewRect.........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, // .....u_viewTexel
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .............u_v
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, // iew.............
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, // .u_invView......
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, // .........u_proj.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .............u_i
+ 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, // nvProj..........
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // .....u_viewProj.
+ 0x00, 0x06, 0x00, 0x07, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .............u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, // nvViewProj......
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .........u_model
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .............u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x97, 0x0b, 0x00, // odelView........
+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, // .....u_modelView
+ 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, // Proj............
+ 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, // .u_alphaRef4....
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, // .B..............
+ 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // ._varying_......
+ 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, // ..A..a_indices..
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, // .....H...a_indic
+ 0x65, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, // es.......,?..a_p
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, // osition.........
+ 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x0a, // .a_position.....
+ 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, // .....@entryPoint
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, // Output.gl_Positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, // on........G..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, // am...G..........
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // .@...H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, // .#.......H......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, // .#...`...H......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, // .#.......H......
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, // .#...`...H......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, // .#.......H......
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x97, 0x0b, 0x00, // .#... ...G......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, // .....G...B..."..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, // .....G...H......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, // .....G..........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....G..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, // .............!..
+ 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, // . ..............
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, // . ..............
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x05, 0x00, 0x3f, 0x07, 0x00, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x97, 0x02, 0x00, // .!...?..........
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x80, 0x3f, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // ....?....e......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, // .....+.......j..
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // . ...........e..
+ 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, // .j..............
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .....e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, // .e...e...e......
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // .e...e....... ..
+ 0x00, 0x51, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x97, 0x0b, 0x00, 0x00, 0x3b, 0x00, 0x04, // .Q...........;..
+ 0x00, 0x51, 0x02, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .Q...B.......+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .....#.......+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x89, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // .........e... ..
+ 0x00, 0x76, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x2b, 0x00, 0x04, // .v...........+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x98, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x98, 0x02, 0x00, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // .....H....... ..
+ 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, // .............6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, // .....Sa..;......
+ 0x00, 0xef, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, // ..G......;......
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, // .........=......
+ 0x00, 0xcb, 0x41, 0x00, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, // ..A..H...=......
+ 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xef, 0x47, 0x00, // .,?......>....G.
+ 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, // ..A..>.......,?.
+ 0x00, 0x39, 0x00, 0x06, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x39, 0x19, 0x00, 0x00, 0xbd, 0x10, 0x00, // .9.......9......
+ 0x00, 0xef, 0x47, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..G......Q......
+ 0x00, 0xf8, 0x21, 0x00, 0x00, 0x39, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, // ..!..9.......>..
+ 0x00, 0x95, 0x15, 0x00, 0x00, 0xf8, 0x21, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, // ......!......8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0xf9, 0x03, 0x00, 0x00, 0xbd, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
+ 0x00, 0x3f, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x97, 0x02, 0x00, 0x00, 0x4f, 0x30, 0x00, // .?...7.......O0.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xa2, 0x25, 0x00, 0x00, 0xf8, 0x00, 0x02, // .7........%.....
+ 0x00, 0xdb, 0x5f, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, // .._..;...v......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd1, 0x46, 0x00, // .....=........F.
+ 0x00, 0xa2, 0x25, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2c, 0x46, 0x00, // ..%..Q.......,F.
+ 0x00, 0xd1, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // ..F......Q......
+ 0x00, 0xd3, 0x4f, 0x00, 0x00, 0xd1, 0x46, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // ..O...F......Q..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x5b, 0x00, 0x00, 0xd1, 0x46, 0x00, 0x00, 0x02, 0x00, 0x00, // ......[...F.....
+ 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x4c, 0x3b, 0x00, 0x00, 0x2c, 0x46, 0x00, // .P.......L;..,F.
+ 0x00, 0xd3, 0x4f, 0x00, 0x00, 0xf3, 0x5b, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, // ..O...[......A..
+ 0x00, 0x89, 0x02, 0x00, 0x00, 0x5a, 0x60, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x0a, 0x0a, 0x00, // .....Z`..O0.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x99, 0x61, 0x00, 0x00, 0x5a, 0x60, 0x00, // .=........a..Z`.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0xe2, 0x02, 0x00, 0x00, 0xa2, 0x48, 0x00, 0x00, 0x42, 0x13, 0x00, // .A........H..B..
+ 0x00, 0x23, 0x0a, 0x00, 0x00, 0x99, 0x61, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, // .#....a..=...e..
+ 0x00, 0xb5, 0x2f, 0x00, 0x00, 0xa2, 0x48, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ../...H.........
+ 0x00, 0xff, 0x10, 0x00, 0x00, 0x4c, 0x3b, 0x00, 0x00, 0xb5, 0x2f, 0x00, 0x00, 0x41, 0x00, 0x05, // .....L;.../..A..
+ 0x00, 0xe2, 0x02, 0x00, 0x00, 0xc4, 0x2e, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x1d, 0x0a, 0x00, // .........B......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xcc, 0x5e, 0x00, 0x00, 0xc4, 0x2e, 0x00, // .=...e....^.....
+ 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x67, 0x44, 0x00, 0x00, 0xff, 0x10, 0x00, // .........gD.....
+ 0x00, 0xcc, 0x5e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xee, 0x27, 0x00, // ..^..A........'.
+ 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xee, 0x27, 0x00, // .........>....'.
+ 0x00, 0x67, 0x44, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x5e, 0x5b, 0x00, // .gD..=.......^[.
+ 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x5e, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, // .........^[..8..
+ 0x00, 0x00, // ..
};
-static const uint8_t vs_debugdraw_fill_dx9[480] =
+static const uint8_t vs_debugdraw_fill_dx9[482] =
{
- 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x80, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // el. .....u_viewP
- 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x80, 0x00, 0x04, 0x00, 0xb4, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, // roj.............
- 0xff, 0x2b, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, // .+.CTAB.........
- 0x03, 0xfe, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x78, // ...............x
- 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x4c, // ...D...........L
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, 0x00, 0x04, // ................
- 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // ...h.......u_mod
- 0x65, 0x6c, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // el......... ....
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0xab, 0x03, // ...u_viewProj...
- 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, // ...............v
- 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, // s_3_0.Microsoft
- 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, // (R) HLSL Shader
- 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, // Compiler 10.1..Q
- 0x00, 0x00, 0x05, 0x84, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........@.....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x80, 0x00, // ................
- 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, // ................
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, // ................
- 0x00, 0x01, 0x80, 0x84, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x2e, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x01, // ................
- 0x00, 0x55, 0x90, 0x01, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x05, 0x00, // .U.. ...........
- 0x00, 0x0f, 0x80, 0x00, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x90, 0x00, // .... ...........
- 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x20, 0xe4, 0xa0, 0x00, // ............ ...
- 0x00, 0x00, 0xb0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x04, 0x00, // ................
- 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x05, // ........ .......
- 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x80, 0x81, 0x00, 0xe4, 0xa0, 0x04, // .........U......
- 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x80, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x01, // ................
- 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x82, 0x00, 0xe4, 0xa0, 0x00, // ................
- 0x00, 0xaa, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0xe0, 0x83, // ................
- 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ................
+ 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x80, 0x00, 0x04, 0x00, 0xb4, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, // roj.............
+ 0xff, 0xfe, 0xff, 0x2b, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, // ...+.CTAB.......
+ 0x00, 0x00, 0x03, 0xfe, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
+ 0x00, 0x78, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // .x...D..........
+ 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, // .L..............
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .....h.......u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, // odel......... ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // .....u_viewProj.
+ 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, // .vs_3_0.Microsof
+ 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, // t (R) HLSL Shade
+ 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, // r Compiler 10.1.
+ 0xab, 0x51, 0x00, 0x00, 0x05, 0x84, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, // .Q..........@...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, // ................
+ 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, // ................
+ 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, // ................
+ 0x03, 0x00, 0x00, 0x01, 0x80, 0x84, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x2e, 0x00, 0x00, // ................
+ 0x02, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, // ................
+ 0x80, 0x01, 0x00, 0x55, 0x90, 0x01, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, // ...U.. .........
+ 0x05, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, // ...... .........
+ 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x20, 0xe4, // .............. .
+ 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, // ................
+ 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, // .......... .....
+ 0xb0, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x80, 0x81, 0x00, 0xe4, // ...........U....
+ 0xa0, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x80, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, // ................
+ 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x82, 0x00, 0xe4, // ................
+ 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, // ................
+ 0xe0, 0x83, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, // ................
+ 0x00, 0x00, // ..
};
-static const uint8_t vs_debugdraw_fill_dx11[675] =
+static const uint8_t vs_debugdraw_fill_dx11[677] =
{
- 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, // wProj.......u_mo
- 0x64, 0x65, 0x6c, 0x04, 0x20, 0x40, 0x00, 0x80, 0x00, 0x70, 0x02, 0x44, 0x58, 0x42, 0x43, 0x21, // del. @...p.DXBC!
- 0x99, 0xbc, 0x62, 0x67, 0xb7, 0x95, 0xd6, 0x90, 0x9d, 0x96, 0xc0, 0x0e, 0x98, 0x00, 0xf9, 0x01, // ..bg............
- 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, // ...p.......,....
- 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, // .......ISGNP....
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......8........
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x45, // ...............E
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ................
- 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x42, 0x4c, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x44, 0x49, // .......BLENDINDI
- 0x43, 0x45, 0x53, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0xab, 0x4f, // CES.POSITION...O
- 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, // .......SV_POSITI
- 0x4f, 0x4e, 0x00, 0x53, 0x48, 0x44, 0x52, 0xb0, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x6c, // ON.SHDR....@...l
- 0x00, 0x00, 0x00, 0x59, 0x08, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, // ...Y...F. ......
- 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x12, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, // ..._..........._
- 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, // ...r.......g....
- 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, // ..........h....
- 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, // ...)............
- 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x38, // ........@......8
- 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, // ...........V....
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, // ...F. ..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x01, // .......2........
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0a, // ...F. ..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // ...............F
- 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x01, // .......2........
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0a, // ...F. ..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // ...............F
- 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, // ...F.......F. ..
- 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, // ...............8
- 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, // ...........V....
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, // ...F. .........2
- 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, // ...........F. ..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ...............F
- 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, // .......2........
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, // ...F. ..........
- 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, // .......F.......2
- 0x00, 0x00, 0x0a, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, // .... ......F. ..
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ...............F
- 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x0e, 0x00, 0x01, // .......>........
- 0x00, 0x40, 0x08, // .@.
+ 0x64, 0x65, 0x6c, 0x04, 0x20, 0x40, 0x00, 0x80, 0x00, 0x70, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, // del. @...p...DXB
+ 0x43, 0x21, 0x99, 0xbc, 0x62, 0x67, 0xb7, 0x95, 0xd6, 0x90, 0x9d, 0x96, 0xc0, 0x0e, 0x98, 0x00, // C!..bg..........
+ 0xf9, 0x01, 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // .....p.......,..
+ 0x00, 0x84, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, // .........ISGNP..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........8......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, // ................
+ 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .E..............
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x42, 0x4c, 0x45, 0x4e, 0x44, 0x49, 0x4e, // .........BLENDIN
+ 0x44, 0x49, 0x43, 0x45, 0x53, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, // DICES.POSITION..
+ 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .OSGN,..........
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // . ..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, // .........SV_POSI
+ 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x53, 0x48, 0x44, 0x52, 0xb0, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, // TION.SHDR....@..
+ 0x00, 0x6c, 0x00, 0x00, 0x00, 0x59, 0x08, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .l...Y...F. ....
+ 0x00, 0x84, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x12, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, // ....._..........
+ 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, // ._...r.......g..
+ 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, // .. ..........h..
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .....)..........
+ 0x00, 0x0a, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, // ..........@.....
+ 0x00, 0x38, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, // .8...........V..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // .....F. ........
+ 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, // .........2......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .....F. ........
+ 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, // .F.......2......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, // .....F. ........
+ 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, // .F..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .....F.......F.
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, // .8...........V..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .....F. ........
+ 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .2...........F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, // .F.......2......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .....F. ........
+ 0x00, 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, // .........F......
+ 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .2.... ......F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x0e, // .F.......>......
+ 0x00, 0x01, 0x00, 0x40, 0x08, // ...@.
};
static const uint8_t vs_debugdraw_fill_mtl[685] =
{
- 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, // wProj.......u_mo
0x64, 0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x20, 0x00, 0x7f, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, // del. .. .....usi
0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, // ng namespace met
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h
index c9256522a10..f0aa257f3ce 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_debugdraw_fill_lit_glsl[532] =
{
- 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x06, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH...V_...u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x06, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH...V_...u_vie
0x77, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // w.......u_viewPr
0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // oj.......u_model
0x04, 0x20, 0x00, 0x00, 0x20, 0x00, 0xd9, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, // . .. .....attrib
@@ -35,323 +35,321 @@ static const uint8_t vs_debugdraw_fill_lit_glsl[532] =
0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, // = tmpvar_2.xyz;.
0x7d, 0x0a, 0x0a, 0x00, // }...
};
-static const uint8_t vs_debugdraw_fill_lit_spv[3281] =
+static const uint8_t vs_debugdraw_fill_lit_spv[3247] =
{
- 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...V_...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...V_...u_mod
0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x20, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // el. .. ..u_viewP
0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x06, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // roj.......u_view
- 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x98, 0x0c, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, // ..........#.....
- 0x01, 0x00, 0x08, 0x00, 0x9a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, // .....a..........
- 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, // ............GLSL
- 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, // .std.450........
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0c, 0x00, 0x00, // ....main....H...
- 0xa6, 0x14, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
- 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
- 0x69, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // i...Output......
- 0x69, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // i.......gl_Posit
- 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x05, 0x00, 0x69, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.....i.......
- 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x69, 0x04, 0x00, 0x00, // v_view......i...
- 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x05, 0x00, 0x06, 0x00, // ....v_world.....
- 0xbd, 0x10, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x69, 0x34, 0x3b, 0x76, 0x66, // ....@main(vi4;vf
- 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x61, 0x5f, 0x69, 0x6e, // 3;......O0..a_in
- 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa2, 0x25, 0x00, 0x00, // dices........%..
- 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_position......
- 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
- 0x05, 0x00, 0x04, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x00, 0x00, // ....<...world...
- 0x05, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ....^...$Global.
- 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....^.......u_vi
- 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, // ewRect......^...
- 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
- 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....^.......u_vi
- 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew......^.......
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
- 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ^.......u_proj..
- 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ....^.......u_in
- 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, // vProj.......^...
- 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
- 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ....^.......u_in
- 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
- 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ^.......u_model.
- 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....^.......u_mo
- 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, // delView.....^...
- 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
- 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.....^.......
- 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
- 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, // B............A..
- 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_indices.......
- 0x48, 0x0c, 0x00, 0x00, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, // H...a_indices...
- 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // ....,?..a_positi
- 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, // sition..........
- 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, // flattenTemp.....
- 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .U..param.......
- 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, // ....param.......
- 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // ....@entryPointO
- 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // utput_gl_Positio
- 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, // n...........Outp
- 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x1f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ut..............
- 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x1f, 0x04, 0x00, 0x00, // v_view..........
- 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x05, 0x00, 0x07, 0x00, // ....v_world.....
- 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // ....@entryPointO
- 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, // utput...G.......
- 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ....@...H...^...
- 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x5e, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^.......#.......
- 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
- 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...^.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
- 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
- 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
- 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
- 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...^.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
- 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
- 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
- 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
- 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...^.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
- 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
- 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
- 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
- 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...^.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
- 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
- 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
- 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
- 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
- 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...^.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
- 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
- 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ^.......G...B...
- 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x48, 0x0c, 0x00, 0x00, // ".......G...H...
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, // ........G.......
- 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
- 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // !...............
- 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // .... ...........
- 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x97, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // .... ...........
- 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x69, 0x04, 0x00, 0x00, // ............i...
- 0x1d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, // ............!...
- 0x1f, 0x08, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x97, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, // ....i...........
- 0x20, 0x00, 0x04, 0x00, 0xe6, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, // ...........i...
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // +...............
- 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x2c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ,.......,.......
- 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
- 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........+.......
- 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // .......?....e...
- 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // .......+.......
- 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, // j... ...........
- 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x5e, 0x05, 0x00, 0x00, // e...j.......^...
- 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ........e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....e...e.......
- 0x20, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x05, 0x00, 0x00, // ...........^...
- 0x3b, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ;.......B.......
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // +.......#.......
- 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x20, 0x00, 0x04, 0x00, 0x89, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, // ...............
- 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ...........e...
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // +...............
- 0x20, 0x00, 0x04, 0x00, 0x98, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x98, 0x02, 0x00, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;.......H.......
- 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
- 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
- 0x1e, 0x00, 0x04, 0x00, 0x1f, 0x04, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x04, 0x00, 0x9c, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x04, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
- 0x20, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
- 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ........Sa..;...
- 0xe6, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x97, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....U......;...
- 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ............=...
- 0x1a, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....A..H...=...
- 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....,?......>...
- 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, // .U...A..>.......
- 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x69, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, // ,?..9...i...I&..
- 0xbd, 0x10, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....U......>...
- 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....I&..A.......
- 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // T4..........=...
- 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ........T4..>...
- 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, // ........A.......
- 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // 'A..........=...
- 0x18, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ........'A..A...
- 0x99, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // .....N..........
- 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >....N......A...
- 0x95, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....M..........
- 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, // =............M..
- 0x41, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, // A...............
- 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, // ....>...........
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x69, 0x04, 0x00, 0x00, // ....8...6...i...
- 0xbd, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // ............7...
- 0x97, 0x02, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, // ....O0..7.......
- 0xa2, 0x25, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x27, 0x60, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .%......'`..;...
- 0xe6, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ............A...
- 0x95, 0x02, 0x00, 0x00, 0xf3, 0x1c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ................
- 0x3e, 0x00, 0x03, 0x00, 0xf3, 0x1c, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......,...A...
- 0x95, 0x02, 0x00, 0x00, 0xd3, 0x40, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....@..........
- 0x3e, 0x00, 0x03, 0x00, 0xd3, 0x40, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >....@..,...=...
- 0x18, 0x00, 0x00, 0x00, 0x7e, 0x20, 0x00, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ....~ ...%..Q...
- 0x0d, 0x00, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x7e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....C..~ ......
- 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd3, 0x4f, 0x00, 0x00, 0x7e, 0x20, 0x00, 0x00, // Q........O..~ ..
- 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x5b, 0x00, 0x00, // ....Q........[..
- 0x7e, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // ~ ......P.......
- 0x4c, 0x3b, 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0xd3, 0x4f, 0x00, 0x00, 0xf3, 0x5b, 0x00, 0x00, // L;...C...O...[..
- 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x89, 0x02, 0x00, 0x00, 0x5a, 0x60, 0x00, 0x00, // ....A.......Z`..
- 0x4f, 0x30, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // O0......=.......
- 0x99, 0x61, 0x00, 0x00, 0x5a, 0x60, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xe2, 0x02, 0x00, 0x00, // .a..Z`..A.......
- 0xa2, 0x48, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, 0x99, 0x61, 0x00, 0x00, // .H..B...#....a..
- 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xb5, 0x2f, 0x00, 0x00, 0xa2, 0x48, 0x00, 0x00, // =...e..../...H..
- 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x4c, 0x3b, 0x00, 0x00, // ........<...L;..
- 0xb5, 0x2f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0xc4, 0x2e, 0x00, 0x00, // ./..A...........
- 0x42, 0x13, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // B.......=...e...
- 0xcc, 0x5e, 0x00, 0x00, 0xc4, 0x2e, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .^..............
- 0x67, 0x44, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0xcc, 0x5e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // gD..<....^..A...
- 0x9a, 0x02, 0x00, 0x00, 0x3a, 0x28, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....:(..........
- 0x3e, 0x00, 0x03, 0x00, 0x3a, 0x28, 0x00, 0x00, 0x67, 0x44, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...:(..gD..A...
- 0xe2, 0x02, 0x00, 0x00, 0xa9, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....G..B.......
- 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x27, 0x00, 0x00, 0xa9, 0x47, 0x00, 0x00, // =...e...I'...G..
- 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2a, 0x3b, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, // ........*;..<...
- 0x49, 0x27, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xe6, 0x24, 0x00, 0x00, // I'..O........$..
- 0x2a, 0x3b, 0x00, 0x00, 0x2a, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // *;..*;..........
- 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0xf1, 0x52, 0x00, 0x00, // ....A........R..
- 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf1, 0x52, 0x00, 0x00, // ........>....R..
- 0xe6, 0x24, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xcb, 0x3d, 0x00, 0x00, // .$..O........=..
- 0x3c, 0x0c, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // <...<...........
- 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0x0e, 0x19, 0x00, 0x00, // ....A...........
- 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0e, 0x19, 0x00, 0x00, // ........>.......
- 0xcb, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x69, 0x04, 0x00, 0x00, 0x5e, 0x5b, 0x00, 0x00, // .=..=...i...^[..
- 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x5e, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // ........^[..8...
- 0x00, // .
+ 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x74, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, // ......t.....#...
+ 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x9a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, // .......a........
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, // ..............GL
+ 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, // SL.std.450......
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0c, // ......main....H.
+ 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0xc9, 0x0f, 0x00, 0x00, 0xc1, 0x11, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, // ................
+ 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ......main......
+ 0x04, 0x00, 0x69, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, // ..i...Output....
+ 0x06, 0x00, 0x69, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, // ..i.......gl_Pos
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x05, 0x00, 0x69, 0x04, 0x00, 0x00, 0x01, 0x00, // ition.....i.....
+ 0x00, 0x00, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x69, 0x04, // ..v_view......i.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x05, 0x00, // ......v_world...
+ 0x06, 0x00, 0xbd, 0x10, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x69, 0x34, 0x3b, // ......@main(vi4;
+ 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x61, 0x5f, // vf3;......O0..a_
+ 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa2, 0x25, // indices........%
+ 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, // ..a_position....
+ 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, // ......_varying_.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, // ......<...world.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, // ......^...$Globa
+ 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....^.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, // viewRect......^.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, // ......u_viewTexe
+ 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....^.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, // view......^.....
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invView.....
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, // ..^.......u_proj
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......^.......u_
+ 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, // invProj.......^.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // ......u_viewProj
+ 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......^.......u_
+ 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // invViewProj.....
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..^.......u_mode
+ 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....^.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, // modelView.....^.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, // wProj.....^.....
+ 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, // ..u_alphaRef4...
+ 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, // ..B............A
+ 0x00, 0x00, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, // ..a_indices.....
+ 0x05, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, // ..H...a_indices.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ......,?..a_posi
+ 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, // tion..........a_
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, // position........
+ 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, // ..flattenTemp...
+ 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...U..param.....
+ 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ......param.....
+ 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, // ......@entryPoin
+ 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // tOutput.gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, 0xc9, 0x0f, 0x00, 0x00, 0x40, 0x65, // ion...........@e
+ 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, // ntryPointOutput.
+ 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, 0xc1, 0x11, // v_view..........
+ 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
+ 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x00, 0x00, 0x47, 0x00, // put.v_world...G.
+ 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, // ..........@...H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, // ..^.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...^.......#.
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#... ...H...^.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..^...........H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, // ..^.......#...`.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...^.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#.......H...^.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..^...........H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, // ..^.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...^.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#... ...H...^.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..^...........H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, // ..^.......#...`.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...^.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#.......H...^.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..^...........H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, // ..^.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...^.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, // ......H...^.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#.......H...^.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, // ..^.......#... .
+ 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, // ..G...^.......G.
+ 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..B...".......G.
+ 0x04, 0x00, 0x48, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..H...........G.
+ 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
+ 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
+ 0x04, 0x00, 0xc9, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
+ 0x04, 0x00, 0xc1, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, // ................
+ 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, // ......!.........
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1a, 0x00, // .. .............
+ 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, // .......... .....
+ 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, // ................
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, // ................
+ 0x05, 0x00, 0x69, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, // ..i.............
+ 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x1f, 0x08, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x97, 0x02, // ..!.......i.....
+ 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe6, 0x06, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, // ..i...+.........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x0a, // ......,.......,.
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x18, 0x00, // .............?..
+ 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, // ..e.............
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, // ...... .......+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, // ......j... .....
+ 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, // ......e...j.....
+ 0x0e, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, // ..^...........e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e.......e...e.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x02, 0x00, // ...... .........
+ 0x00, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x42, 0x13, // ..^...;.......B.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x0a, // ......+.......#.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x89, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, // ...... .........
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, // ..e...+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, // ......+.........
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x98, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
+ 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x98, 0x02, 0x00, 0x00, 0x48, 0x0c, // ......;.......H.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, // ......;.........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x15, // ......;.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0xc9, 0x0f, // ......;.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0xc1, 0x11, // ......;.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, // ......6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, // ..............Sa
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe6, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, // ..;.............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, // ..;........U....
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, // ..;.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x48, 0x0c, // ..=........A..H.
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, 0x14, // ..=.......,?....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, // ..>....U...A..>.
+ 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x69, 0x04, // ......,?..9...i.
+ 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0xbd, 0x10, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, // ..I&.......U....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, // ..>.......I&..A.
+ 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, // ......T4........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, // ..=...........T4
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, // ..>...........A.
+ 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, // .......@........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, // ..=....... ....@
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x0f, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, // ..>....... ...A.
+ 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, // .......@........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, // ..=........-...@
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc1, 0x11, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, // ..>........-....
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x69, 0x04, 0x00, 0x00, 0xbd, 0x10, // ..8...6...i.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x97, 0x02, // ..........7.....
+ 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xa2, 0x25, // ..O0..7........%
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x27, 0x60, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe6, 0x06, // ......'`..;.....
+ 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, // ..........A.....
+ 0x00, 0x00, 0xf3, 0x1c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..............>.
+ 0x03, 0x00, 0xf3, 0x1c, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, // ......,...A.....
+ 0x00, 0x00, 0xd3, 0x40, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...@..........>.
+ 0x03, 0x00, 0xd3, 0x40, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // ...@..,...=.....
+ 0x00, 0x00, 0x7e, 0x20, 0x00, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..~ ...%..Q.....
+ 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0x7e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ...C..~ ......Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd3, 0x4f, 0x00, 0x00, 0x7e, 0x20, 0x00, 0x00, 0x01, 0x00, // .......O..~ ....
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x5b, 0x00, 0x00, 0x7e, 0x20, // ..Q........[..~
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x4c, 0x3b, // ......P.......L;
+ 0x00, 0x00, 0x03, 0x43, 0x00, 0x00, 0xd3, 0x4f, 0x00, 0x00, 0xf3, 0x5b, 0x00, 0x00, 0x8a, 0x00, // ...C...O...[....
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x89, 0x02, 0x00, 0x00, 0x5a, 0x60, 0x00, 0x00, 0x4f, 0x30, // ..A.......Z`..O0
+ 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x99, 0x61, // ......=........a
+ 0x00, 0x00, 0x5a, 0x60, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xe2, 0x02, 0x00, 0x00, 0xa2, 0x48, // ..Z`..A........H
+ 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x23, 0x0a, 0x00, 0x00, 0x99, 0x61, 0x00, 0x00, 0x3d, 0x00, // ..B...#....a..=.
+ 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xb5, 0x2f, 0x00, 0x00, 0xa2, 0x48, 0x00, 0x00, 0x90, 0x00, // ..e..../...H....
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x4c, 0x3b, 0x00, 0x00, 0xb5, 0x2f, // ......<...L;.../
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0xc4, 0x2e, 0x00, 0x00, 0x42, 0x13, // ..A...........B.
+ 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xcc, 0x5e, // ......=...e....^
+ 0x00, 0x00, 0xc4, 0x2e, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x67, 0x44, // ..............gD
+ 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0xcc, 0x5e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..<....^..A.....
+ 0x00, 0x00, 0x3a, 0x28, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..:(..........>.
+ 0x03, 0x00, 0x3a, 0x28, 0x00, 0x00, 0x67, 0x44, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, // ..:(..gD..A.....
+ 0x00, 0x00, 0xa9, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...G..B.......=.
+ 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x27, 0x00, 0x00, 0xa9, 0x47, 0x00, 0x00, 0x90, 0x00, // ..e...I'...G....
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2a, 0x3b, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x49, 0x27, // ......*;..<...I'
+ 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xe6, 0x24, 0x00, 0x00, 0x2a, 0x3b, // ..O........$..*;
+ 0x00, 0x00, 0x2a, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, // ..*;............
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0xf1, 0x52, 0x00, 0x00, 0x0f, 0x12, // ..A........R....
+ 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf1, 0x52, 0x00, 0x00, 0xe6, 0x24, // ......>....R...$
+ 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xcb, 0x3d, 0x00, 0x00, 0x3c, 0x0c, // ..O........=..<.
+ 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, // ..<.............
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0x0e, 0x19, 0x00, 0x00, 0x0f, 0x12, // ..A.............
+ 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0e, 0x19, 0x00, 0x00, 0xcb, 0x3d, // ......>........=
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x69, 0x04, 0x00, 0x00, 0x5e, 0x5b, 0x00, 0x00, 0x0f, 0x12, // ..=...i...^[....
+ 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x5e, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ......^[..8....
};
-static const uint8_t vs_debugdraw_fill_lit_dx9[633] =
+static const uint8_t vs_debugdraw_fill_lit_dx9[635] =
{
- 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...V_...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...V_...u_mod
0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x80, 0x00, 0x06, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x04, // el. .....u_view.
0x01, 0x80, 0x00, 0x04, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // ......u_viewProj
- 0x04, 0x01, 0x84, 0x00, 0x04, 0x00, 0x40, 0x02, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x32, 0x00, // ......@.......2.
- 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, // CTAB............
- 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, // ................
- 0x58, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, // X...........`...
- 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, // ....p...........
- 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x84, 0x00, // x...............
- 0x04, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....x.......u_mo
- 0x64, 0x65, 0x6c, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, // del......... ...
- 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, // ....u_view......
- 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // ewProj.vs_3_0.Mi
- 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
- 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
- 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x88, 0x00, 0x0f, 0xa0, // 10.1...Q.......
- 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...@............
- 0x1f, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
- 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, // ................
- 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x07, 0xe0, // ................
- 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x02, 0x00, 0x07, 0xe0, 0x05, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x01, 0x80, 0x88, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x2e, 0x00, 0x00, 0x02, // ................
- 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ................
- 0x01, 0x00, 0x55, 0x90, 0x01, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x05, // ..U.. ..........
- 0x00, 0x00, 0x0f, 0x80, 0x00, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x90, // ..... ..........
- 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x20, 0xe4, 0xa0, // ............. ..
- 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x04, // ................
- 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, // ......... ......
- 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x80, 0x85, 0x00, 0xe4, 0xa0, // ..........U.....
- 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x84, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x80, // ................
- 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x86, 0x00, 0xe4, 0xa0, // ................
- 0x00, 0x00, 0xaa, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0xe0, // ................
- 0x87, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, // ................
- 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0x55, 0x80, 0x81, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, // ......U.........
- 0x01, 0x00, 0x07, 0x80, 0x80, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, 0x80, // ................
- 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x82, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x80, // ................
- 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0xe0, 0x83, 0x00, 0xe4, 0xa0, // ................
- 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x07, 0xe0, // ................
- 0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
+ 0x04, 0x01, 0x84, 0x00, 0x04, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, // ......@.........
+ 0x32, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x03, // 2.CTAB..........
+ 0xfe, 0xff, 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x93, 0x00, // ................
+ 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x60, 0x00, // ..X...........`.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, 0x00, 0x04, 0x00, // ......p.........
+ 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, // ..x.............
+ 0x84, 0x00, 0x04, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......x.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x00, // model......... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0xab, 0x03, 0x00, // ......u_view....
+ 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, // viewProj.vs_3_0.
+ 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, // Microsoft (R) HL
+ 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, // SL Shader Compil
+ 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x88, 0x00, // er 10.1...Q.....
+ 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....@..........
+ 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
+ 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
+ 0x07, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x02, 0x00, 0x07, 0xe0, 0x05, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x88, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x2e, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
+ 0x0f, 0x80, 0x01, 0x00, 0x55, 0x90, 0x01, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, // ....U.. ........
+ 0x00, 0x05, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, // ....... ........
+ 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x20, // ...............
+ 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x20, 0xe4, 0xa0, 0x00, 0x00, // ........... ....
+ 0x00, 0xb0, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x80, 0x85, 0x00, // ............U...
+ 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x84, 0x00, 0xe4, 0xa0, 0x00, 0x00, // ................
+ 0x00, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x86, 0x00, // ................
+ 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
+ 0x0f, 0xe0, 0x87, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x05, 0x00, // ................
+ 0x00, 0x03, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0x55, 0x80, 0x81, 0x00, 0xe4, 0xa0, 0x04, 0x00, // ........U.......
+ 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x80, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
+ 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x82, 0x00, 0xe4, 0xa0, 0x00, 0x00, // ................
+ 0xaa, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0xe0, 0x83, 0x00, // ................
+ 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, // ................
+ 0x07, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ...........
};
-static const uint8_t vs_debugdraw_fill_lit_dx11[944] =
+static const uint8_t vs_debugdraw_fill_lit_dx11[946] =
{
- 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x06, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH...V_...u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x06, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH...V_...u_vie
0x77, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // w.......u_viewPr
0x6f, 0x6a, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // oj..@....u_model
- 0x04, 0x20, 0x80, 0x00, 0x80, 0x00, 0x70, 0x03, 0x44, 0x58, 0x42, 0x43, 0x4a, 0x63, 0x00, 0x1f, // . ....p.DXBCJc..
- 0x8c, 0xf0, 0x42, 0x23, 0xf7, 0x2c, 0xd7, 0x55, 0x64, 0x23, 0x64, 0x92, 0x01, 0x00, 0x00, 0x00, // ..B#.,.Ud#d.....
- 0x70, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, // p.......,.......
- 0xf4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....ISGNP.......
- 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....8...........
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, // ............E...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x07, 0x07, 0x00, 0x00, 0x42, 0x4c, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x44, 0x49, 0x43, 0x45, 0x53, // ....BLENDINDICES
- 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, // .POSITION...OSGN
- 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, // h...........P...
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
- 0x07, 0x08, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, // ....SV_POSITION.
- 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, // TEXCOORD....SHDR
- 0x74, 0x02, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x00, 0x04, // t...@.......Y...
- 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // F. ........._...
- 0x12, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, // ........_...r...
- 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....g.... ......
- 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....e...r ......
- 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, // e...r ......h...
- 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....)...........
- 0x0a, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .........@......
- 0x38, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, // 8...........V...
- 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....F. .........
- 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, // ........2.......
- 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....F. .........
- 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, // F.......2.......
- 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....F. .........
- 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // F...............
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, // ....F.......F. .
- 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, // 8...........V...
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....F. .........
- 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
- 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // F.......2.......
- 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....F. .........
- 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ........F.......
- 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2.... ......F. .
- 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0x72, 0x00, 0x10, 0x00, // F.......8...r...
- 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, // ....V.......F. .
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, // ........2...r...
- 0x01, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
- 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ........F.......
- 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, // 2...r.......F. .
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x20, 0x10, 0x00, // F.......2...r ..
- 0x01, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....F. .........
- 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ........F.......
- 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, // 6...r ......F...
- 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x0e, 0x00, 0x01, 0x00, 0x80, 0x08, // ....>...........
+ 0x04, 0x20, 0x80, 0x00, 0x80, 0x00, 0x70, 0x03, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x4a, 0x63, // . ....p...DXBCJc
+ 0x00, 0x1f, 0x8c, 0xf0, 0x42, 0x23, 0xf7, 0x2c, 0xd7, 0x55, 0x64, 0x23, 0x64, 0x92, 0x01, 0x00, // ....B#.,.Ud#d...
+ 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, 0x00, // ..p.......,.....
+ 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, // ......ISGNP.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......8.........
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x45, 0x00, // ..............E.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x42, 0x4c, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x44, 0x49, 0x43, // ......BLENDINDIC
+ 0x45, 0x53, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0xab, 0x4f, 0x53, // ES.POSITION...OS
+ 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x5c, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
+ 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x53, 0x48, // N.TEXCOORD....SH
+ 0x44, 0x52, 0x74, 0x02, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x59, 0x08, // DRt...@.......Y.
+ 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x5f, 0x00, // ..F. ........._.
+ 0x00, 0x03, 0x12, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, // .........._...r.
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e...r ....
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e...r ......h.
+ 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, // ......).........
+ 0x00, 0x00, 0x0a, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, // ...........@....
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x15, // ..8...........V.
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, // ......F. .......
+ 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0xf2, 0x00, // ..........2.....
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, // ......F. .......
+ 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0xf2, 0x00, // ..F.......2.....
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, // ......F. .......
+ 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf2, 0x00, // ..F.............
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, // ......F.......F.
+ 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, // ...............
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, // ..8...........V.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ......F. .......
+ 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, // ..2...........F.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, // ...............
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, // ..F.......2.....
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // ......F. .......
+ 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, // ..........F.....
+ 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, // ..2.... ......F.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, // ...............
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0x72, 0x00, // ..F.......8...r.
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, // ......V.......F.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, // .........2...r.
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F. .......
+ 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, // ..........F.....
+ 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x82, // ..2...r.......F.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, // ...............
+ 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x20, // ..F.......2...r
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ......F. .......
+ 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, // ..........F.....
+ 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, // ..6...r ......F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x0e, 0x00, 0x01, 0x00, // ......>.........
+ 0x80, 0x08, // ..
};
static const uint8_t vs_debugdraw_fill_lit_mtl[881] =
{
- 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x06, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH...V_...u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x06, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH...V_...u_vie
0x77, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // w.......u_viewPr
0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // oj.......u_model
0x04, 0x20, 0x00, 0x00, 0x20, 0x00, 0x36, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, // . .. .6...using
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_texture.bin.h b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_texture.bin.h
index e756d50edbd..c9f8aa6ece2 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_texture.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_texture.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_debugdraw_fill_texture_glsl[420] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x7f, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ....attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
@@ -28,282 +28,280 @@ static const uint8_t vs_debugdraw_fill_texture_glsl[420] =
0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, // or0 = a_color0;.
0x7d, 0x0a, 0x0a, 0x00, // }...
};
-static const uint8_t vs_debugdraw_fill_texture_spv[3247] =
+static const uint8_t vs_debugdraw_fill_texture_spv[3209] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0x8c, 0x0c, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, // ....#.........Ta
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, // in..............
- 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
- 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x64, 0x04, // ..main........d.
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, // ..Output......d.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // ......gl_Positio
- 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // n.....d.......v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, // color0........d.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ......v_texcoord
- 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xad, 0x11, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, // 0.........@main(
- 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, // vf4;vf3;vf2;....
- 0x05, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ......a_color0..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ....../B..a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x10, 0x46, 0x00, 0x00, 0x61, 0x5f, // tion.......F..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, // texcoord0.......
- 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, // .._varying_.....
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ......$Global...
- 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x01, 0x00, // Rect............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, // invView.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
- 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..........u_invP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, // roj.............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
- 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, // iewProj.........
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
- 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
- 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, // lView...........
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
- 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.............u_
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, // alphaRef4.....B.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, // ...........A..a_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, // color0..........
- 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..a_color0......
- 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ...?..a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ..........a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, // tion......@,..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, // texcoord0.......
- 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..a_texcoord0...
- 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
- 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // p......U..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......8..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
- 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, // ..........@entry
- 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, // PointOutput_gl_P
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1a, 0x04, // osition.........
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, // ..Output........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ......v_color0..
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // ..............v_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, // texcoord0.......
- 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
- 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, 0x06, 0x00, // put...G...e.....
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#.......H.....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#...`...H.....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#.......H.....
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#...`...H.....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#.......H.....
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xdf, 0x00, // ..#... ...G.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, // ......G...B...".
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
- 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, 0x1d, 0x00, // ..........d.....
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x03, 0x09, // ..........!.....
- 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, // ..d.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x64, 0x04, // .. ...........d.
- 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // .?+.............
- 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, // ..,.............
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, // ..............,.
- 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, // ................
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, // ......e.........
- 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, // ..+.......j... .
- 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ......e...e...j.
- 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ................
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5c, 0x03, // ..e....... .....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5c, 0x03, // ..........;.....
- 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..B.......+.....
- 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, // ..)....... .....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // ......e... .....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
- 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, // .......... .....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, // ..........;.....
- 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, // .......... .....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, // ..........;.....
- 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // .......... .....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
- 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x1a, 0x04, // ................
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x06, // .......... .....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, // ..........;.....
- 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, // .......... .....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, // ..........6.....
- 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, // ................
- 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x08, 0x10, // ..Sa..;.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, // ......;........U
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, // ......;........8
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, // ......;.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, // ......=........A
- 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, // ......=........?
- 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x40, 0x2c, // ......=.......@,
- 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, // ......>....U...A
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, // ..>....8...?..>.
- 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x64, 0x04, // ......@,..9...d.
- 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, // ..I&.......U...8
- 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, // ......>.......I&
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, // ..A.......T4....
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, // ......=.........
- 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, // ..T4..>.........
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, // ..A.......'A....
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, // ......=.........
- 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x0d, 0x4e, // ..'A..A........N
- 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, // ..........>....N
- 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc1, 0x4d, // ......A........M
- 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ..........=.....
- 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x92, 0x02, // .......M..A.....
- 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..............>.
- 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ..............8.
- 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, 0x00, 0x00, // ..6...d.........
- 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe2, 0x2e, // ......7.........
- 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x37, 0x00, // ..7......./B..7.
- 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x70, 0x1e, // .......F......p.
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, // ..;.............
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbb, 0x25, 0x00, 0x00, 0x0f, 0x12, // ..A........%....
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbb, 0x25, 0x00, 0x00, 0x88, 0x05, // ......>....%....
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x0f, 0x12, // ..A........I....
- 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x1f, 0x07, // ......>....I....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x2f, 0x42, // ..=.......F)../B
- 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xcb, 0x4b, 0x00, 0x00, 0x46, 0x29, // ..Q........K..F)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9b, 0x58, // ......Q........X
- 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..F)......Q.....
- 0x00, 0x00, 0x3c, 0x1a, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, // ..<...F)......P.
- 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, 0xcb, 0x4b, 0x00, 0x00, 0x9b, 0x58, // .......D...K...X
- 0x00, 0x00, 0x3c, 0x1a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, // ..<.......A.....
- 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...$..B...)...=.
- 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4a, 0x35, 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, 0x90, 0x00, // ..e...J5...$....
- 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf6, 0x33, 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, 0x4a, 0x35, // .......3...D..J5
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb6, 0x30, 0x00, 0x00, 0x0f, 0x12, // ..A........0....
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb6, 0x30, 0x00, 0x00, 0xf6, 0x33, // ......>....0...3
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, 0x10, 0x46, // ..=........2...F
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xbd, 0x4d, 0x00, 0x00, 0x0f, 0x12, // ..A........M....
- 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbd, 0x4d, 0x00, 0x00, 0xad, 0x32, // ......>....M...2
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xae, 0x32, 0x00, 0x00, 0xe2, 0x2e, // ..=........2....
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbe, 0x4d, 0x00, 0x00, 0x0f, 0x12, // ..A........M....
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x4d, 0x00, 0x00, 0xae, 0x32, // ......>....M...2
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x0f, 0x12, // ..=...d....1....
- 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .......1..8....
+ 0x64, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // d.....#.........
+ 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // Ta..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........v.......
+ 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
+ 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
+ 0x64, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // d...Output......
+ 0x64, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // d.......gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.....d.......
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0x64, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // d.......v_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xad, 0x11, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // rd0.........@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, // n(vf4;vf3;vf2;..
+ 0x05, 0x00, 0x05, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ........a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ......../B..a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x10, 0x46, 0x00, 0x00, // sition.......F..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
+ 0x05, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ........$Global.
+ 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, // ewRect..........
+ 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
+ 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew..............
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
+ 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ........u_proj..
+ 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, // vProj...........
+ 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
+ 0x06, 0x00, 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
+ 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ........u_model.
+ 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, // delView.........
+ 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.............
+ 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
+ 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, // B............A..
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
+ 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....?..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, // sition......@,..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....a_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........8..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x05, 0x00, 0x0a, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, // ........@entryPo
+ 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // intOutput.v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, // oord0...G...e...
+ 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // ....@...H.......
+ 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xdf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
+ 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // ........H.......
+ 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
+ 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ........G...B...
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, // ".......G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, // ........G.......
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, // ........G...v...
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
+ 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, // ............d...
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
+ 0x03, 0x09, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, // ....d...........
+ 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x64, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // d........... ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ...?+...........
+ 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, // ....,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // +...............
+ 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ,...............
+ 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........e.......
+ 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....+.......j...
+ 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // .......e...e...
+ 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // j...............
+ 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ....e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // e...e....... ...
+ 0x5c, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x5c, 0x03, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ....B.......+...
+ 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....)....... ...
+ 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ........e... ...
+ 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
+ 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
+ 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
+ 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x9c, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....v....... ...
+ 0x92, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x92, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, // ............6...
+ 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
+ 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, // ....Sa..;.......
+ 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........;.......
+ 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // .U......;.......
+ 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // .8......;.......
+ 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........=.......
+ 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // .A......=.......
+ 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // .?......=.......
+ 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, // @,......>....U..
+ 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, // .A..>....8...?..
+ 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, // >.......@,..9...
+ 0x64, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, // d...I&.......U..
+ 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, // .8......>.......
+ 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // I&..A.......T4..
+ 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........=.......
+ 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, // ....T4..>.......
+ 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // ....A........@..
+ 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........=.......
+ 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, // ....@..>...v...
+ 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, // ...A........@..
+ 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ........=.......
+ 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x17, 0x00, 0x00, // .-...@..>.......
+ 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // .-......8...6...
+ 0x64, 0x04, 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, // d...............
+ 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7...........7...
+ 0x95, 0x02, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, // ..../B..7.......
+ 0x10, 0x46, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x70, 0x1e, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .F......p...;...
+ 0xe1, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ............A...
+ 0x9a, 0x02, 0x00, 0x00, 0xbb, 0x25, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....%..........
+ 0x3e, 0x00, 0x03, 0x00, 0xbb, 0x25, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >....%......A...
+ 0x90, 0x02, 0x00, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....I..........
+ 0x3e, 0x00, 0x03, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >....I......=...
+ 0x18, 0x00, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ....F)../B..Q...
+ 0x0d, 0x00, 0x00, 0x00, 0xcb, 0x4b, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....K..F)......
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9b, 0x58, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, // Q........X..F)..
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3c, 0x1a, 0x00, 0x00, // ....Q.......<...
+ 0x46, 0x29, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // F)......P.......
+ 0x14, 0x44, 0x00, 0x00, 0xcb, 0x4b, 0x00, 0x00, 0x9b, 0x58, 0x00, 0x00, 0x3c, 0x1a, 0x00, 0x00, // .D...K...X..<...
+ 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, // ....A........$..
+ 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // B...)...=...e...
+ 0x4a, 0x35, 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // J5...$..........
+ 0xf6, 0x33, 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, 0x4a, 0x35, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .3...D..J5..A...
+ 0x9a, 0x02, 0x00, 0x00, 0xb6, 0x30, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // .....0..........
+ 0x3e, 0x00, 0x03, 0x00, 0xb6, 0x30, 0x00, 0x00, 0xf6, 0x33, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >....0...3..=...
+ 0x13, 0x00, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .....2...F..A...
+ 0x90, 0x02, 0x00, 0x00, 0xbd, 0x4d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....M..........
+ 0x3e, 0x00, 0x03, 0x00, 0xbd, 0x4d, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >....M...2..=...
+ 0x1d, 0x00, 0x00, 0x00, 0xae, 0x32, 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .....2......A...
+ 0x9a, 0x02, 0x00, 0x00, 0xbe, 0x4d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....M..........
+ 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x4d, 0x00, 0x00, 0xae, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >....M...2..=...
+ 0x64, 0x04, 0x00, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, // d....1..........
+ 0xf6, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .1..8....
};
-static const uint8_t vs_debugdraw_fill_texture_dx9[347] =
+static const uint8_t vs_debugdraw_fill_texture_dx9[349] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x38, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // 8.......!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
- 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
- 0x00, 0x80, 0x02, 0x00, 0x03, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, // ................
- 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, // ....U...........
- 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
- 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, // ................
- 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, // ................
- 0x03, 0xe0, 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ...........
+ 0x38, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // 8.........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x03, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ................
+ 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ......U.........
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, // ................
+ 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, // ................
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, // ................
+ 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x02, 0x00, 0x03, 0xe0, 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .............
};
-static const uint8_t vs_debugdraw_fill_texture_dx11[620] =
+static const uint8_t vs_debugdraw_fill_texture_dx11[622] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x40, 0x02, 0x44, 0x58, 0x42, 0x43, 0x25, 0x0b, 0xbc, 0xf2, 0xf1, 0x2f, 0x13, 0x1a, 0x84, 0x83, // @.DXBC%..../....
- 0x08, 0xf9, 0x08, 0xa1, 0x2c, 0x84, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x03, 0x00, // ....,.....@.....
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
- 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......V.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x5f, 0x00, // .............._.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, // ......COLOR.POSI
- 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, // TION.TEXCOORD.OS
- 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNl...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, // ..............b.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
- 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
- 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x28, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x4a, 0x00, // ..SHDR(...@...J.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, // ..r......._...2.
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e.... ....
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e...2 ......h.
- 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
- 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, // ......F.......2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ........... ....
- 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..F.......F. ...
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......6.... ....
- 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, // ..F.......6...2
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......F.......>.
- 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ..........@.
+ 0x40, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x25, 0x0b, 0xbc, 0xf2, 0xf1, 0x2f, 0x13, 0x1a, // @...DXBC%..../..
+ 0x84, 0x83, 0x08, 0xf9, 0x08, 0xa1, 0x2c, 0x84, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, // ......,.....@...
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, // ....,...........
+ 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNh...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........V.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, // ................
+ 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // _...............
+ 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, // ........COLOR.PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // SITION.TEXCOORD.
+ 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNl...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // b...............
+ 0x02, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // ION.COLOR.TEXCOO
+ 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x28, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // RD..SHDR(...@...
+ 0x4a, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // J...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _...r......._...
+ 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, // 2.......g.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....e...2 ......
+ 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, // h.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....V.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ........2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
+ 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, // F............ ..
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....F.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, // ........6.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, // ....F.......6...
+ 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // 2 ......F.......
+ 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // >...........@.
};
static const uint8_t vs_debugdraw_fill_texture_mtl[777] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0xe4, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h
index bd669a201b2..32ae50d8cc9 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_debugdraw_lines_glsl[325] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x20, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ...attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
@@ -22,243 +22,239 @@ static const uint8_t vs_debugdraw_lines_glsl[325] =
0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, // lor0 = a_color0;
0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
};
-static const uint8_t vs_debugdraw_lines_spv[2763] =
+static const uint8_t vs_debugdraw_lines_spv[2697] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0xa8, 0x0a, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, // ....#.........Ta
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0xd8, 0x0c, // in..............
- 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x4f, 0x75, // in........8...Ou
- 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, // tput......8.....
- 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, // ..gl_Position...
- 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ..8.......v_colo
- 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x40, 0x6d, // r0............@m
- 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, // ain(vf4;vf3;....
- 0x05, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ...H..a_color0..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ......,G..a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, // tion.........._v
- 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x99, 0x02, // arying_.........
- 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, // ..$Global.......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, // viewTexel.......
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
- 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
- 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, // iew.............
- 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, // ..u_proj........
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, // viewProj........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, // roj.............
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, // ..u_model.......
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
- 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.............u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
- 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..........u_alph
- 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, // aRef4.....B.....
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .......A..a_colo
- 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, // r0............a_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, // color0........,?
- 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, // ..a_position....
- 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ......a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, // ..........flatte
- 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, // nTemp......U..pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, // ram...........pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, // ram...........@e
- 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, // ntryPointOutput_
- 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, // gl_Position.....
- 0x04, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, // ......Output....
- 0x06, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ..........v_colo
- 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, // r0............@e
- 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, // ntryPointOutput.
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, // ..G...7.......@.
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..#.......H.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, // ..`...H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, // ..`...H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, // .. ...G.........
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...B...".....
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, // ..........!.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
- 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......8.........
- 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x9a, 0x02, // ..!.......8.....
- 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, // ..8........... .
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, // ......+.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, // ......+.........
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // .....?+.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, // ......,.........
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, // ................
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, // ......e.........
- 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, // ..+.......j... .
- 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ......7...e...j.
- 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x99, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ................
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, // ..e...e...7...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x05, // ..e....... .....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x05, // ..........;.....
- 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..B.......+.....
- 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, // ..)....... .....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // ......e... .....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
- 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, // .......... .....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, // ..........;.....
- 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // .......... .....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
- 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xf9, 0x03, // ................
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0x03, 0x00, // ...... ...v.....
- 0x00, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0xcd, 0x0f, // ......;...v.....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, // ......6.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, // ..............Sa
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, // ..;.............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, // ..;........U....
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, // ..;.............
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x89, 0x14, // ..=........A....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, 0x14, // ..=.......,?....
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, // ..>....U...A..>.
- 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x38, 0x04, // ......,?..9...8.
- 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, // ..I&.......U....
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, // ..>.......I&..A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, // ......T4........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, // ..=...........T4
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, // ..>...........A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, // ......'A........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, // ..=...........'A
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, // ..A.............
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xdf, 0x1c, // ......>.........
- 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x38, 0x04, // ......8...6...8.
- 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x37, 0x00, // ..............7.
- 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, // .......H..7.....
- 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x51, 0x1d, 0x00, 0x00, 0x3b, 0x00, // ..,G......Q...;.
- 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, // ..............A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x50, 0x24, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, // ......P$........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x24, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x3d, 0x00, // ..>...P$......=.
- 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x51, 0x00, // ......'(..,G..Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x00, 0x00, // .......J..'(....
- 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x27, 0x28, // ..Q.......|W..'(
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1d, 0x19, // ......Q.........
- 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, // ..'(......P.....
- 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x1d, 0x19, // ...B...J..|W....
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x61, 0x23, // ......A.......a#
- 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, // ..B...)...=...e.
- 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, // ..+4..a#........
- 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x41, 0x00, // ...2...B..+4..A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x97, 0x2f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, // ......./........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x97, 0x2f, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0x3d, 0x00, // ..>..../...2..=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x41, 0x00, // .......1...H..A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, // .......L........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0x3d, 0x00, // ..>....L...1..=.
- 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x30, 0x19, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, // ..8...0.........
- 0x02, 0x00, 0x30, 0x19, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..0...8....
+ 0x64, 0x0a, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // d.....#.........
+ 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // Ta..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, // ....v...........
+ 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, // ........8...Outp
+ 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ut......8.......
+ 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, // gl_Position.....
+ 0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // 8.......v_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // ............@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // n(vf4;vf3;......
+ 0xf5, 0x48, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // .H..a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // ....,G..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, // on.........._var
+ 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ying_...........
+ 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, // $Global.........
+ 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, // ....u_viewRect..
+ 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ewTexel.........
+ 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_view......
+ 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
+ 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // w...............
+ 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, // u_proj..........
+ 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // ....u_invProj...
+ 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, 0x00, 0x00, // ewProj..........
+ 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ....u_invViewPro
+ 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // j...............
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, // u_model.........
+ 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, // ....u_modelView.
+ 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, // delViewProj.....
+ 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ........u_alphaR
+ 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ef4.....B.......
+ 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // .....A..a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, // ............a_co
+ 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, // lor0........,?..
+ 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_position......
+ 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, // ....a_position..
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x47, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // G...7.......@...
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....H...........
+ 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // #.......H.......
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
+ 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // `...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
+ 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // `...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...G...........
+ 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...B...".......
+ 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...v...........
+ 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, // ........!.......
+ 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
+ 0x1e, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....8...........
+ 0x21, 0x00, 0x05, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // !.......8.......
+ 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x38, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // 8........... ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ...?+...........
+ 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, // ....,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
+ 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....e...........
+ 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
+ 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // +.......j... ...
+ 0x1c, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....7...e...j...
+ 0x1e, 0x00, 0x0e, 0x00, 0x99, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...7...e...
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x05, 0x00, 0x00, // e....... .......
+ 0x02, 0x00, 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x05, 0x00, 0x00, // ........;.......
+ 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // B.......+.......
+ 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, // )....... .......
+ 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // ....e... .......
+ 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // ........;.......
+ 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, // ........ .......
+ 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, // ........;.......
+ 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, // ........ .......
+ 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, // ........;.......
+ 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, // ........;.......
+ 0x76, 0x13, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // v.......6.......
+ 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // ................
+ 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, // Sa..;...........
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, // ....;........U..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // ....;...........
+ 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, // ....=........A..
+ 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, // ....=.......,?..
+ 0xa6, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, // ....>....U...A..
+ 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, // >.......,?..9...
+ 0x38, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, // 8...I&.......U..
+ 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, // ....>.......I&..
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, // A.......T4......
+ 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, // ....=...........
+ 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, // T4..>...........
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, // A........@......
+ 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, // ....=........-..
+ 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, // .@..>...v....-..
+ 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x38, 0x04, 0x00, 0x00, // ....8...6...8...
+ 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // ............7...
+ 0x9a, 0x02, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, // .....H..7.......
+ 0x2c, 0x47, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x51, 0x1d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ,G......Q...;...
+ 0xb5, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ............A...
+ 0x9a, 0x02, 0x00, 0x00, 0x50, 0x24, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....P$..........
+ 0x3e, 0x00, 0x03, 0x00, 0x50, 0x24, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...P$......=...
+ 0x18, 0x00, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ....'(..,G..Q...
+ 0x0d, 0x00, 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....J..'(......
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, // Q.......|W..'(..
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1d, 0x19, 0x00, 0x00, // ....Q...........
+ 0x27, 0x28, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // '(......P.......
+ 0xf5, 0x42, 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x1d, 0x19, 0x00, 0x00, // .B...J..|W......
+ 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, // ....A.......a#..
+ 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // B...)...=...e...
+ 0x2b, 0x34, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // +4..a#..........
+ 0xd7, 0x32, 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .2...B..+4..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x97, 0x2f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ...../..........
+ 0x3e, 0x00, 0x03, 0x00, 0x97, 0x2f, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >..../...2..=...
+ 0x1d, 0x00, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .....1...H..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....L..........
+ 0x3e, 0x00, 0x03, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >....L...1..=...
+ 0x38, 0x04, 0x00, 0x00, 0x30, 0x19, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, // 8...0...........
+ 0x30, 0x19, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // 0...8....
};
-static const uint8_t vs_debugdraw_lines_dx9[311] =
+static const uint8_t vs_debugdraw_lines_dx9[313] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x14, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // ........!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
- 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x05, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, // ............U...
- 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, // ................
- 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, // ................
- 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, // ................
- 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, // ................
- 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+ 0x14, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // ..........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, // ................
+ 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, // ..............U.
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, // ................
+ 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, // ................
+ 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
};
-static const uint8_t vs_debugdraw_lines_dx11[510] =
+static const uint8_t vs_debugdraw_lines_dx11[512] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0xd4, 0x01, 0x44, 0x58, 0x42, 0x43, 0x32, 0x9b, 0xdd, 0xb5, 0xa9, 0xb7, 0x22, 0xf0, 0xcf, 0x5e, // ..DXBC2....."..^
- 0x34, 0x2c, 0x72, 0xf0, 0x87, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x03, 0x00, // 4,r.............
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, // ..,...|.......IS
- 0x47, 0x4e, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, // GNH...........8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......>.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x43, 0x4f, // ..............CO
- 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0x4f, 0x53, // LOR.POSITION..OS
- 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, // GNL...........8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......D.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, // ..............SV
- 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, // _POSITION.COLOR.
- 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xfc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x3f, 0x00, // ..SHDR....@...?.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, // ..r.......g....
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, // ..........e....
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, // ......h.......8.
- 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, // ..........V.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F. .........2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
- 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..F. .........6.
- 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x05, 0x00, 0x01, 0x00, 0x40, 0x00, // ..>.........@.
+ 0xd4, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x32, 0x9b, 0xdd, 0xb5, 0xa9, 0xb7, 0x22, 0xf0, // ....DXBC2.....".
+ 0xcf, 0x5e, 0x34, 0x2c, 0x72, 0xf0, 0x87, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, // .^4,r...........
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, // ....,...|.......
+ 0x49, 0x53, 0x47, 0x4e, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNH...........
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // 8...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........>.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, // ................
+ 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, // COLOR.POSITION..
+ 0x4f, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNL...........
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // 8...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........D.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
+ 0x52, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xfc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // R...SHDR....@...
+ 0x3f, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // ?...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, // _...r.......g...
+ 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, // . ..........e...
+ 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, // . ......h.......
+ 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, // 8...........V...
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....F. .........
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // F.......2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....F. .........
+ 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ..... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....F. .........
+ 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // 6.... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x05, 0x00, 0x01, 0x00, 0x40, 0x00, // ....>.........@.
};
static const uint8_t vs_debugdraw_lines_mtl[673] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x7c, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // |...using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h
index 65a08adac8f..f98d559feb2 100644
--- a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_debugdraw_lines_stipple_glsl[419] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x7e, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ~...attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
@@ -28,284 +28,282 @@ static const uint8_t vs_debugdraw_lines_stipple_glsl[419] =
0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x3b, 0x0a, 0x7d, // a_texcoord0.x;.}
0x0a, 0x0a, 0x00, // ...
};
-static const uint8_t vs_debugdraw_lines_stipple_spv[3279] =
+static const uint8_t vs_debugdraw_lines_stipple_spv[3237] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0xac, 0x0c, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, // ....#.........Ta
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, // in..............
- 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
- 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4c, 0x04, // ..main........L.
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4c, 0x04, // ..Output......L.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // ......gl_Positio
- 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // n.....L.......v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4c, 0x04, // color0........L.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x00, // ......v_stipple.
- 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xad, 0x11, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, // ..........@main(
- 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, // vf4;vf3;vf2;....
- 0x05, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ......a_color0..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ....../B..a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x10, 0x46, 0x00, 0x00, 0x61, 0x5f, // tion.......F..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, // texcoord0.......
- 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, // .._varying_.....
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ......$Global...
- 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x01, 0x00, // Rect............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, // invView.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
- 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..........u_invP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, // roj.............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
- 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, // iewProj.........
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
- 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
- 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, // lView...........
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
- 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.............u_
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, // alphaRef4.....B.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, // ...........A..a_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, // color0..........
- 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..a_color0......
- 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ...?..a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ..........a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, // tion......@,..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, // texcoord0.......
- 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..a_texcoord0...
- 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
- 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // p......U..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......8..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
- 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, // ..........@entry
- 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, // PointOutput_gl_P
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x08, 0x04, // osition.........
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x08, 0x04, // ..Output........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ......v_color0..
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // ..............v_
- 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, // stipple.........
- 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
- 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, 0x06, 0x00, // put...G...e.....
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#.......H.....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#...`...H.....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#.......H.....
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#...`...H.....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, // ..#.......H.....
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xdf, 0x00, // ..#... ...G.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, // ......G...B...".
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
- 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x1d, 0x00, // ..........L.....
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0xd3, 0x08, // ..........!.....
- 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, // ..L.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xc9, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x4c, 0x04, // .. ...........L.
- 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // .?+.............
- 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, // ..,.............
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, // ................
- 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, // ..e.............
- 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, // ...... .......+.
- 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, // ......j... .....
- 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, // ..e...e...j.....
- 0x0e, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, // ..............e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5c, 0x03, 0x00, 0x00, 0x02, 0x00, // ...... .........
- 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5c, 0x03, 0x00, 0x00, 0x42, 0x13, // ......;.......B.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, // ......+.......).
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, // ...... .........
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, // ..e...+.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, // ......;.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
- 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, // ......;.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
- 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, // ......;.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, // ......;.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x1d, 0x00, // ................
- 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x85, 0x06, 0x00, 0x00, 0x03, 0x00, // ...... .........
- 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x85, 0x06, 0x00, 0x00, 0xcd, 0x0f, // ......;.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
- 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, // ......6.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, // ..............Sa
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xc9, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, // ..;.............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, // ..;........U....
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, // ..;........8....
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, // ..;.............
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, // ..=........A....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, // ..=........?....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, // ..=.......@,....
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, // ..>....U...A..>.
- 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, // ...8...?..>.....
- 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x49, 0x26, // ..@,..9...L...I&
- 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, // .......U...8....
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, // ..>.......I&..A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, // ......T4........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, // ..=...........T4
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, // ..>...........A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, // ......'A........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, // ..=...........'A
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, // ..A........N....
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, // ......>....N....
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, // ..A........M....
- 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x1c, // ......=.........
- 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x01, 0x5c, // ...M..A.........
- 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, // ..........>.....
- 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // ..........8...6.
- 0x05, 0x00, 0x4c, 0x04, 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x08, // ..L.............
- 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x37, 0x00, // ..7...........7.
- 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, // ....../B..7.....
- 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x70, 0x1e, 0x00, 0x00, 0x3b, 0x00, // ...F......p...;.
- 0x04, 0x00, 0xc9, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, // ..............A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbb, 0x25, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, // .......%........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbb, 0x25, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, // ..>....%......A.
- 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, // .......I........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..>....I......=.
- 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x51, 0x00, // ......F)../B..Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xcb, 0x4b, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x00, 0x00, // .......K..F)....
- 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9b, 0x58, 0x00, 0x00, 0x46, 0x29, // ..Q........X..F)
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3c, 0x1a, // ......Q.......<.
- 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, // ..F)......P.....
- 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, 0xcb, 0x4b, 0x00, 0x00, 0x9b, 0x58, 0x00, 0x00, 0x3c, 0x1a, // ...D...K...X..<.
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x80, 0x24, // ......A........$
- 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, // ..B...)...=...e.
- 0x00, 0x00, 0x4a, 0x35, 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, // ..J5...$........
- 0x00, 0x00, 0xf6, 0x33, 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, 0x4a, 0x35, 0x00, 0x00, 0x41, 0x00, // ...3...D..J5..A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb6, 0x30, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, // .......0........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb6, 0x30, 0x00, 0x00, 0xf6, 0x33, 0x00, 0x00, 0x3d, 0x00, // ..>....0...3..=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x41, 0x00, // .......2......A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x09, 0x4e, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, // .......N........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x4e, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, 0x41, 0x00, // ..>....N...2..A.
- 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x94, 0x4a, 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0x0a, 0x0a, // .......J...F....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb2, 0x19, 0x00, 0x00, 0x94, 0x4a, // ..=............J
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x95, 0x4a, 0x00, 0x00, 0x0f, 0x12, // ..A........J....
- 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x4a, 0x00, 0x00, 0xb2, 0x19, // ......>....J....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x4c, 0x04, 0x00, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x0f, 0x12, // ..=...L....1....
- 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .......1..8....
+ 0x80, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ......#.........
+ 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // Ta..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0xfb, 0x0b, 0x00, 0x00, // ........v.......
+ 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
+ 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
+ 0x4c, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // L...Output......
+ 0x4c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // L.......gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.....L.......
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0x4c, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, // L.......v_stippl
+ 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xad, 0x11, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // e...........@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, // n(vf4;vf3;vf2;..
+ 0x05, 0x00, 0x05, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ........a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ......../B..a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x10, 0x46, 0x00, 0x00, // sition.......F..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
+ 0x05, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ........$Global.
+ 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, // ewRect..........
+ 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
+ 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew..............
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
+ 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ........u_proj..
+ 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, // vProj...........
+ 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
+ 0x06, 0x00, 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
+ 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ........u_model.
+ 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, // delView.........
+ 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.............
+ 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
+ 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, // B............A..
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
+ 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....?..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, // sition......@,..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....a_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........8..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x05, 0x00, 0x09, 0x00, 0xfb, 0x0b, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, // ........@entryPo
+ 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, // intOutput.v_stip
+ 0x70, 0x6c, 0x65, 0x00, 0x47, 0x00, 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ple.G...e.......
+ 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...H...........
+ 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // #.......H.......
+ 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ....#.......H...
+ 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
+ 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ........#... ...
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...........
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...........
+ 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // #...`...H.......
+ 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
+ 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // ........#.......
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
+ 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // #.......H.......
+ 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
+ 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, // ........#... ...
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...........
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...........
+ 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // #...`...H.......
+ 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
+ 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, // ........#.......
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
+ 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, // #.......H.......
+ 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
+ 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, // ........#.......
+ 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....H...........
+ 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xdf, 0x00, 0x00, 0x00, // #... ...G.......
+ 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // ....G...B..."...
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
+ 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
+ 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....G...........
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...v.......
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xfb, 0x0b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
+ 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, // ............!...
+ 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
+ 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
+ 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
+ 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........L.......
+ 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0xd3, 0x08, 0x00, 0x00, // ........!.......
+ 0x4c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, // L...............
+ 0x20, 0x00, 0x04, 0x00, 0xc9, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, // ...........L...
+ 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........ .......
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // +...............
+ 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, // +..............?
+ 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
+ 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ,...............
+ 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
+ 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
+ 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
+ 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // e...e...j.......
+ 0xdf, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5c, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0xdf, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5c, 0x03, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // ....;.......B...
+ 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // ....+.......)...
+ 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, // e...+...........
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, // ....;.......v...
+ 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xfb, 0x0b, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
+ 0x3b, 0x00, 0x04, 0x00, 0xc9, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
+ 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........8......
+ 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // =........A......
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // =........?......
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // =.......@,......
+ 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....U...A..>...
+ 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, // .8...?..>.......
+ 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, // @,..9...L...I&..
+ 0xad, 0x11, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // .....U...8......
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......I&..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....T4..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // =...........T4..
+ 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // =....... ....@..
+ 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...v... ...A...
+ 0x8a, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, // =........-...@..
+ 0x3e, 0x00, 0x03, 0x00, 0xfb, 0x0b, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >........-......
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x4c, 0x04, 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, // 8...6...L.......
+ 0x00, 0x00, 0x00, 0x00, 0xd3, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........7.......
+ 0xe2, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, // ....7......./B..
+ 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........F......
+ 0x70, 0x1e, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xc9, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // p...;...........
+ 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbb, 0x25, 0x00, 0x00, // ....A........%..
+ 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbb, 0x25, 0x00, 0x00, // ........>....%..
+ 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9b, 0x49, 0x00, 0x00, // ....A........I..
+ 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9b, 0x49, 0x00, 0x00, // ........>....I..
+ 0x0c, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, // ....=.......F)..
+ 0x2f, 0x42, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xcb, 0x4b, 0x00, 0x00, // /B..Q........K..
+ 0x46, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // F)......Q.......
+ 0x9b, 0x58, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // .X..F)......Q...
+ 0x0d, 0x00, 0x00, 0x00, 0x3c, 0x1a, 0x00, 0x00, 0x46, 0x29, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....<...F)......
+ 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, 0xcb, 0x4b, 0x00, 0x00, // P........D...K..
+ 0x9b, 0x58, 0x00, 0x00, 0x3c, 0x1a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .X..<.......A...
+ 0xe2, 0x02, 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // .....$..B...)...
+ 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4a, 0x35, 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, // =...e...J5...$..
+ 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf6, 0x33, 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, // .........3...D..
+ 0x4a, 0x35, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb6, 0x30, 0x00, 0x00, // J5..A........0..
+ 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb6, 0x30, 0x00, 0x00, // ........>....0..
+ 0xf6, 0x33, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, // .3..=........2..
+ 0xe2, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x09, 0x4e, 0x00, 0x00, // ....A........N..
+ 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x4e, 0x00, 0x00, // ........>....N..
+ 0xad, 0x32, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x94, 0x4a, 0x00, 0x00, // .2..A........J..
+ 0x10, 0x46, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .F......=.......
+ 0xb2, 0x19, 0x00, 0x00, 0x94, 0x4a, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // .....J..A.......
+ 0x95, 0x4a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .J..........>...
+ 0x95, 0x4a, 0x00, 0x00, 0xb2, 0x19, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x4c, 0x04, 0x00, 0x00, // .J......=...L...
+ 0xf6, 0x31, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xf6, 0x31, 0x00, 0x00, // .1...........1..
+ 0x38, 0x00, 0x01, 0x00, 0x00, // 8....
};
-static const uint8_t vs_debugdraw_lines_stipple_dx9[347] =
+static const uint8_t vs_debugdraw_lines_stipple_dx9[349] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x38, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // 8.......!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
- 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
- 0x00, 0x80, 0x02, 0x00, 0x01, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, // ................
- 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, // ....U...........
- 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
- 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, // ................
- 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, // ................
- 0x01, 0xe0, 0x02, 0x00, 0x00, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ...........
+ 0x38, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // 8.........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x01, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ................
+ 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ......U.........
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, // ................
+ 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, // ................
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, // ................
+ 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x02, 0x00, 0x01, 0xe0, 0x02, 0x00, 0x00, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .............
};
-static const uint8_t vs_debugdraw_lines_stipple_dx11[620] =
+static const uint8_t vs_debugdraw_lines_stipple_dx11[622] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x40, 0x02, 0x44, 0x58, 0x42, 0x43, 0xdc, 0x27, 0x18, 0xb1, 0x2d, 0xea, 0xb1, 0x79, 0x0a, 0x20, // @.DXBC.'..-..y.
- 0xf3, 0x0f, 0x0b, 0xfd, 0x09, 0x50, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x03, 0x00, // .....P....@.....
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
- 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......V.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x5f, 0x00, // .............._.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, // ......COLOR.POSI
- 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, // TION.TEXCOORD.OS
- 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNl...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, // ..............b.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
- 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
- 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x28, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x4a, 0x00, // ..SHDR(...@...J.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x12, 0x10, // ..r......._.....
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e.... ....
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x12, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e.... ......h.
- 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
- 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, // ......F.......2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ........... ....
- 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..F.......F. ...
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......6.... ....
- 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x12, 0x20, // ..F.......6....
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, // ..............>.
- 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ..........@.
+ 0x40, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0xdc, 0x27, 0x18, 0xb1, 0x2d, 0xea, 0xb1, 0x79, // @...DXBC.'..-..y
+ 0x0a, 0x20, 0xf3, 0x0f, 0x0b, 0xfd, 0x09, 0x50, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, // . .....P....@...
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, // ....,...........
+ 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNh...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........V.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, // ................
+ 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // _...............
+ 0x02, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, // ........COLOR.PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // SITION.TEXCOORD.
+ 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNl...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // b...............
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // ION.COLOR.TEXCOO
+ 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x28, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // RD..SHDR(...@...
+ 0x4a, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // J...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _...r......._...
+ 0x12, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, // ........g.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x12, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....e.... ......
+ 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, // h.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....V.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ........2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
+ 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, // F............ ..
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....F.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, // ........6.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, // ....F.......6...
+ 0x12, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // . ..............
+ 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // >...........@.
};
static const uint8_t vs_debugdraw_lines_stipple_mtl[774] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0xe1, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/common/entry/cmd.cpp b/3rdparty/bgfx/examples/common/entry/cmd.cpp
index ae3d14d3400..08fe6b27501 100644
--- a/3rdparty/bgfx/examples/common/entry/cmd.cpp
+++ b/3rdparty/bgfx/examples/common/entry/cmd.cpp
@@ -4,8 +4,9 @@
*/
#include <bx/allocator.h>
-#include <bx/hash.h>
#include <bx/commandline.h>
+#include <bx/hash.h>
+#include <bx/string.h>
#include "dbg.h"
#include "cmd.h"
@@ -28,7 +29,7 @@ struct CmdContext
void add(const char* _name, ConsoleFn _fn, void* _userData)
{
- uint32_t cmd = bx::hashMurmur2A(_name, (uint32_t)bx::strnlen(_name) );
+ uint32_t cmd = bx::hash<bx::HashMurmur2A>(_name, (uint32_t)bx::strLen(_name) );
BX_CHECK(m_lookup.end() == m_lookup.find(cmd), "Command \"%s\" already exist.", _name);
Func fn = { _fn, _userData };
m_lookup.insert(stl::make_pair(cmd, fn) );
@@ -46,7 +47,7 @@ struct CmdContext
if (argc > 0)
{
int err = -1;
- uint32_t cmd = bx::hashMurmur2A(argv[0], (uint32_t)bx::strnlen(argv[0]) );
+ uint32_t cmd = bx::hash<bx::HashMurmur2A>(argv[0], (uint32_t)bx::strLen(argv[0]) );
CmdLookup::iterator it = m_lookup.find(cmd);
if (it != m_lookup.end() )
{
@@ -104,7 +105,14 @@ void cmdAdd(const char* _name, ConsoleFn _fn, void* _userData)
s_cmdContext->add(_name, _fn, _userData);
}
-void cmdExec(const char* _cmd)
+void cmdExec(const char* _format, ...)
{
- s_cmdContext->exec(_cmd);
+ char tmp[2048];
+
+ va_list argList;
+ va_start(argList, _format);
+ bx::vsnprintf(tmp, BX_COUNTOF(tmp), _format, argList);
+ va_end(argList);
+
+ s_cmdContext->exec(tmp);
}
diff --git a/3rdparty/bgfx/examples/common/entry/cmd.h b/3rdparty/bgfx/examples/common/entry/cmd.h
index 2fa1ad41623..b11f1af7a9f 100644
--- a/3rdparty/bgfx/examples/common/entry/cmd.h
+++ b/3rdparty/bgfx/examples/common/entry/cmd.h
@@ -19,6 +19,6 @@ void cmdShutdown();
void cmdAdd(const char* _name, ConsoleFn _fn, void* _userData = NULL);
///
-void cmdExec(const char* _cmd);
+void cmdExec(const char* _format, ...);
#endif // CMD_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/examples/common/entry/entry.cpp b/3rdparty/bgfx/examples/common/entry/entry.cpp
index 97701343dba..f476bb5e459 100644
--- a/3rdparty/bgfx/examples/common/entry/entry.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry.cpp
@@ -4,9 +4,9 @@
*/
#include <bx/bx.h>
+#include <bx/file.h>
+#include <bx/sort.h>
#include <bgfx/bgfx.h>
-#include <bx/string.h>
-#include <bx/crtimpl.h>
#include <time.h>
@@ -18,19 +18,16 @@
#include "cmd.h"
#include "input.h"
-#define RMT_ENABLED ENTRY_CONFIG_PROFILER
-#include <remotery/lib/Remotery.h>
-
-extern "C" int _main_(int _argc, char** _argv);
+extern "C" int32_t _main_(int32_t _argc, char** _argv);
namespace entry
{
static uint32_t s_debug = BGFX_DEBUG_NONE;
static uint32_t s_reset = BGFX_RESET_NONE;
+ static uint32_t s_width = ENTRY_DEFAULT_WIDTH;
+ static uint32_t s_height = ENTRY_DEFAULT_HEIGHT;
static bool s_exit = false;
- static Remotery* s_rmt = NULL;
-
static bx::FileReaderI* s_fileReader = NULL;
static bx::FileWriterI* s_fileWriter = NULL;
@@ -39,50 +36,33 @@ namespace entry
typedef bx::StringT<&g_allocator> String;
- void* rmtMalloc(void* /*_context*/, rmtU32 _size)
- {
- return BX_ALLOC(g_allocator, _size);
- }
-
- void* rmtRealloc(void* /*_context*/, void* _ptr, rmtU32 _size)
- {
- return BX_REALLOC(g_allocator, _ptr, _size);
- }
-
- void rmtFree(void* /*_context*/, void* _ptr)
- {
- BX_FREE(g_allocator, _ptr);
- }
-
static String s_currentDir;
-#if BX_CONFIG_CRT_FILE_READER_WRITER
- class FileReader : public bx::CrtFileReader
+ class FileReader : public bx::FileReader
{
- typedef bx::CrtFileReader super;
+ typedef bx::FileReader super;
public:
- virtual bool open(const char* _filePath, bx::Error* _err) BX_OVERRIDE
+ virtual bool open(const bx::FilePath& _filePath, bx::Error* _err) override
{
String filePath(s_currentDir);
- filePath.append(_filePath);
+ filePath.append(_filePath.get() );
return super::open(filePath.getPtr(), _err);
}
};
- class FileWriter : public bx::CrtFileWriter
+ class FileWriter : public bx::FileWriter
{
- typedef bx::CrtFileWriter super;
+ typedef bx::FileWriter super;
public:
- virtual bool open(const char* _filePath, bool _append, bx::Error* _err) BX_OVERRIDE
+ virtual bool open(const bx::FilePath& _filePath, bool _append, bx::Error* _err) override
{
String filePath(s_currentDir);
- filePath.append(_filePath);
+ filePath.append(_filePath.get() );
return super::open(filePath.getPtr(), _append, _err);
}
};
-#endif // BX_CONFIG_CRT_FILE_READER_WRITER
void setCurrentDir(const char* _dir)
{
@@ -95,7 +75,7 @@ namespace entry
BX_PRAGMA_DIAGNOSTIC_PUSH();
BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4459); // warning C4459: declaration of 's_allocator' hides global declaration
BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow");
- static bx::CrtAllocator s_allocator;
+ static bx::DefaultAllocator s_allocator;
return &s_allocator;
BX_PRAGMA_DIAGNOSTIC_POP();
}
@@ -254,13 +234,17 @@ BX_PRAGMA_DIAGNOSTIC_POP();
bool setOrToggle(uint32_t& _flags, const char* _name, uint32_t _bit, int _first, int _argc, char const* const* _argv)
{
- if (0 == bx::strncmp(_argv[_first], _name) )
+ if (0 == bx::strCmp(_argv[_first], _name) )
{
int arg = _first+1;
if (_argc > arg)
{
_flags &= ~_bit;
- _flags |= bx::toBool(_argv[arg]) ? _bit : 0;
+
+ bool set = false;
+ bx::fromString(&set, _argv[arg]);
+
+ _flags |= set ? _bit : 0;
}
else
{
@@ -275,13 +259,23 @@ BX_PRAGMA_DIAGNOSTIC_POP();
int cmdMouseLock(CmdContext* /*_context*/, void* /*_userData*/, int _argc, char const* const* _argv)
{
- if (_argc > 1)
+ if (1 < _argc)
{
- inputSetMouseLock(_argc > 1 ? bx::toBool(_argv[1]) : !inputIsMouseLocked() );
- return 0;
+ bool set = false;
+ if (2 < _argc)
+ {
+ bx::fromString(&set, _argv[1]);
+ inputSetMouseLock(set);
+ }
+ else
+ {
+ inputSetMouseLock(!inputIsMouseLocked() );
+ }
+
+ return bx::kExitSuccess;
}
- return 1;
+ return bx::kExitFailure;
}
int cmdGraphics(CmdContext* /*_context*/, void* /*_userData*/, int _argc, char const* const* _argv)
@@ -300,17 +294,19 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|| setOrToggle(s_reset, "depthclamp", BGFX_RESET_DEPTH_CLAMP, 1, _argc, _argv)
)
{
- return 0;
+ return bx::kExitSuccess;
}
else if (setOrToggle(s_debug, "stats", BGFX_DEBUG_STATS, 1, _argc, _argv)
|| setOrToggle(s_debug, "ifh", BGFX_DEBUG_IFH, 1, _argc, _argv)
|| setOrToggle(s_debug, "text", BGFX_DEBUG_TEXT, 1, _argc, _argv)
- || setOrToggle(s_debug, "wireframe", BGFX_DEBUG_WIREFRAME, 1, _argc, _argv) )
+ || setOrToggle(s_debug, "wireframe", BGFX_DEBUG_WIREFRAME, 1, _argc, _argv)
+ || setOrToggle(s_debug, "profiler", BGFX_DEBUG_PROFILER, 1, _argc, _argv)
+ )
{
bgfx::setDebug(s_debug);
- return 0;
+ return bx::kExitSuccess;
}
- else if (0 == bx::strncmp(_argv[1], "screenshot") )
+ else if (0 == bx::strCmp(_argv[1], "screenshot") )
{
bgfx::FrameBufferHandle fbh = BGFX_INVALID_HANDLE;
@@ -328,23 +324,23 @@ BX_PRAGMA_DIAGNOSTIC_POP();
bgfx::requestScreenShot(fbh, filePath);
}
- return 0;
+ return bx::kExitSuccess;
}
- else if (0 == bx::strncmp(_argv[1], "fullscreen") )
+ else if (0 == bx::strCmp(_argv[1], "fullscreen") )
{
WindowHandle window = { 0 };
toggleFullscreen(window);
- return 0;
+ return bx::kExitSuccess;
}
}
- return 1;
+ return bx::kExitFailure;
}
int cmdExit(CmdContext* /*_context*/, void* /*_userData*/, int /*_argc*/, char const* const* /*_argv*/)
{
s_exit = true;
- return 0;
+ return bx::kExitSuccess;
}
static const InputBinding s_bindings[] =
@@ -362,6 +358,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{ entry::Key::F4, entry::Modifier::None, 1, NULL, "graphics hmd" },
{ entry::Key::F4, entry::Modifier::LeftShift, 1, NULL, "graphics hmdrecenter" },
{ entry::Key::F4, entry::Modifier::LeftCtrl, 1, NULL, "graphics hmddbg" },
+ { entry::Key::F6, entry::Modifier::None, 1, NULL, "graphics profiler" },
{ entry::Key::F7, entry::Modifier::None, 1, NULL, "graphics vsync" },
{ entry::Key::F8, entry::Modifier::None, 1, NULL, "graphics msaa" },
{ entry::Key::F9, entry::Modifier::None, 1, NULL, "graphics flush" },
@@ -380,87 +377,265 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
#endif // BX_PLATFORM_EMSCRIPTEN
- static App* s_apps = NULL;
+ static AppI* s_currentApp = NULL;
+ static AppI* s_apps = NULL;
+ static uint32_t s_numApps = 0;
- App::App(const char* _name)
+ static char s_restartArgs[1024] = { '\0' };
+
+ static AppI* getCurrentApp(AppI* _set = NULL)
{
- m_name = _name;
- m_next = s_apps;
+ if (NULL != _set)
+ {
+ s_currentApp = _set;
+ }
+ else if (NULL == s_currentApp)
+ {
+ s_currentApp = getFirstApp();
+ }
+
+ return s_currentApp;
+ }
+
+ static AppI* getNextWrap(AppI* _app)
+ {
+ AppI* next = _app->getNext();
+ if (NULL != next)
+ {
+ return next;
+ }
+
+ return getFirstApp();
+ }
+
+ int cmdApp(CmdContext* /*_context*/, void* /*_userData*/, int _argc, char const* const* _argv)
+ {
+ if (0 == bx::strCmp(_argv[1], "restart") )
+ {
+ if (2 == _argc)
+ {
+ bx::strCopy(s_restartArgs, BX_COUNTOF(s_restartArgs), getCurrentApp()->getName() );
+ return bx::kExitSuccess;
+ }
+
+ if (0 == bx::strCmp(_argv[2], "next") )
+ {
+ AppI* next = getNextWrap(getCurrentApp() );
+ bx::strCopy(s_restartArgs, BX_COUNTOF(s_restartArgs), next->getName() );
+ return bx::kExitSuccess;
+ }
+ else if (0 == bx::strCmp(_argv[2], "prev") )
+ {
+ AppI* prev = getCurrentApp();
+ for (AppI* app = getNextWrap(prev); app != getCurrentApp(); app = getNextWrap(app) )
+ {
+ prev = app;
+ }
+
+ bx::strCopy(s_restartArgs, BX_COUNTOF(s_restartArgs), prev->getName() );
+ return bx::kExitSuccess;
+ }
+
+ for (AppI* app = getFirstApp(); NULL != app; app = app->getNext() )
+ {
+ if (0 == bx::strCmp(_argv[2], app->getName() ) )
+ {
+ bx::strCopy(s_restartArgs, BX_COUNTOF(s_restartArgs), app->getName() );
+ return bx::kExitSuccess;
+ }
+ }
+ }
+
+ return bx::kExitFailure;
+ }
+
+ AppI::AppI(const char* _name, const char* _description)
+ {
+ m_name = _name;
+ m_description = _description;
+ m_next = s_apps;
+
s_apps = this;
+ s_numApps++;
+ }
+
+ AppI::~AppI()
+ {
+ for (AppI* prev = NULL, *app = s_apps, *next = app->getNext()
+ ; NULL != app
+ ; prev = app, app = next, next = app->getNext() )
+ {
+ if (app == this)
+ {
+ if (NULL != prev)
+ {
+ prev->m_next = next;
+ }
+ else
+ {
+ s_apps = next;
+ }
+
+ --s_numApps;
+
+ break;
+ }
+ }
}
- App::~App()
+ const char* AppI::getName() const
{
+ return m_name;
}
- App* getFirstApp()
+ const char* AppI::getDescription() const
+ {
+ return m_description;
+ }
+
+ AppI* AppI::getNext()
+ {
+ return m_next;
+ }
+
+ AppI* getFirstApp()
{
return s_apps;
}
- int runApp(AppI* _app, int _argc, char** _argv)
+ uint32_t getNumApps()
+ {
+ return s_numApps;
+ }
+
+ int runApp(AppI* _app, int _argc, const char* const* _argv)
{
- _app->init(_argc, _argv);
+ _app->init(_argc, _argv, s_width, s_height);
bgfx::frame();
WindowHandle defaultWindow = { 0 };
- setWindowSize(defaultWindow, ENTRY_DEFAULT_WIDTH, ENTRY_DEFAULT_HEIGHT);
+ setWindowSize(defaultWindow, s_width, s_height);
#if BX_PLATFORM_EMSCRIPTEN
s_app = _app;
emscripten_set_main_loop(&updateApp, -1, 1);
#else
- while (_app->update() );
+ while (_app->update() )
+ {
+ if (0 != bx::strLen(s_restartArgs) )
+ {
+ break;
+ }
+ }
#endif // BX_PLATFORM_EMSCRIPTEN
return _app->shutdown();
}
- int main(int _argc, char** _argv)
+ static int32_t sortApp(const void* _lhs, const void* _rhs)
{
- //DBG(BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME);
+ const AppI* lhs = *(const AppI**)_lhs;
+ const AppI* rhs = *(const AppI**)_rhs;
- if (BX_ENABLED(ENTRY_CONFIG_PROFILER) )
+ return bx::strCmpI(lhs->getName(), rhs->getName() );
+ }
+
+ static void sortApps()
+ {
+ if (2 > s_numApps)
{
- rmtSettings* settings = rmt_Settings();
- BX_WARN(NULL != settings, "Remotery is not enabled.");
- if (NULL != settings)
- {
- settings->malloc = rmtMalloc;
- settings->realloc = rmtRealloc;
- settings->free = rmtFree;
+ return;
+ }
- rmtError err = rmt_CreateGlobalInstance(&s_rmt);
- BX_WARN(RMT_ERROR_NONE != err, "Remotery failed to create global instance.");
- if (RMT_ERROR_NONE == err)
- {
- rmt_SetCurrentThreadName("Main");
- }
- else
- {
- s_rmt = NULL;
- }
- }
+ AppI** apps = (AppI**)BX_ALLOC(g_allocator, s_numApps*sizeof(AppI*) );
+
+ uint32_t ii = 0;
+ for (AppI* app = getFirstApp(); NULL != app; app = app->getNext() )
+ {
+ apps[ii++] = app;
}
+ bx::quickSort(apps, s_numApps, sizeof(AppI*), sortApp);
+
+ s_apps = apps[0];
+ for (ii = 1; ii < s_numApps; ++ii)
+ {
+ AppI* app = apps[ii-1];
+ app->m_next = apps[ii];
+ }
+ apps[s_numApps-1]->m_next = NULL;
+
+ BX_FREE(g_allocator, apps);
+ }
+
+ int main(int _argc, const char* const* _argv)
+ {
+ //DBG(BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME);
-#if BX_CONFIG_CRT_FILE_READER_WRITER
s_fileReader = BX_NEW(g_allocator, FileReader);
s_fileWriter = BX_NEW(g_allocator, FileWriter);
-#endif // BX_CONFIG_CRT_FILE_READER_WRITER
cmdInit();
cmdAdd("mouselock", cmdMouseLock);
cmdAdd("graphics", cmdGraphics );
cmdAdd("exit", cmdExit );
+ cmdAdd("app", cmdApp );
inputInit();
inputAddBindings("bindings", s_bindings);
entry::WindowHandle defaultWindow = { 0 };
- entry::setWindowTitle(defaultWindow, bx::baseName(_argv[0]) );
+
+ bx::FilePath fp(_argv[0]);
+ char title[bx::kMaxFilePath];
+ bx::strCopy(title, BX_COUNTOF(title), fp.getBaseName() );
+
+ entry::setWindowTitle(defaultWindow, title);
setWindowSize(defaultWindow, ENTRY_DEFAULT_WIDTH, ENTRY_DEFAULT_HEIGHT);
- int32_t result = ::_main_(_argc, _argv);
+ sortApps();
+
+ const char* find = "";
+ if (1 < _argc)
+ {
+ find = _argv[_argc-1];
+ }
+
+restart:
+ AppI* selected = NULL;
+
+ for (AppI* app = getFirstApp(); NULL != app; app = app->getNext() )
+ {
+ if (NULL == selected
+ && bx::strFindI(app->getName(), find) )
+ {
+ selected = app;
+ }
+#if 0
+ DBG("%c %s, %s"
+ , app == selected ? '>' : ' '
+ , app->getName()
+ , app->getDescription()
+ );
+#endif // 0
+ }
+
+ int32_t result = bx::kExitSuccess;
+ s_restartArgs[0] = '\0';
+ if (0 == s_numApps)
+ {
+ result = ::_main_(_argc, (char**)_argv);
+ }
+ else
+ {
+ result = runApp(getCurrentApp(selected), _argc, _argv);
+ }
+
+ if (0 != bx::strLen(s_restartArgs) )
+ {
+ find = s_restartArgs;
+ goto restart;
+ }
+
setCurrentDir("");
inputRemoveBindings("bindings");
@@ -468,19 +643,11 @@ BX_PRAGMA_DIAGNOSTIC_POP();
cmdShutdown();
-#if BX_CONFIG_CRT_FILE_READER_WRITER
BX_DELETE(g_allocator, s_fileReader);
s_fileReader = NULL;
BX_DELETE(g_allocator, s_fileWriter);
s_fileWriter = NULL;
-#endif // BX_CONFIG_CRT_FILE_READER_WRITER
-
- if (BX_ENABLED(ENTRY_CONFIG_PROFILER)
- && NULL != s_rmt)
- {
- rmt_DestroyGlobalInstance(s_rmt);
- }
return result;
}
@@ -597,6 +764,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
_debug = s_debug;
+ s_width = _width;
+ s_height = _height;
+
return s_exit;
}
@@ -774,6 +944,11 @@ BX_PRAGMA_DIAGNOSTIC_POP();
bx::AllocatorI* getAllocator()
{
+ if (NULL == g_allocator)
+ {
+ g_allocator = getDefaultAllocator();
+ }
+
return g_allocator;
}
diff --git a/3rdparty/bgfx/examples/common/entry/entry.h b/3rdparty/bgfx/examples/common/entry/entry.h
index cfdfd25dd81..9efe7c672aa 100644
--- a/3rdparty/bgfx/examples/common/entry/entry.h
+++ b/3rdparty/bgfx/examples/common/entry/entry.h
@@ -18,12 +18,21 @@ extern "C" int _main_(int _argc, char** _argv);
#define ENTRY_WINDOW_FLAG_ASPECT_RATIO UINT32_C(0x00000001)
#define ENTRY_WINDOW_FLAG_FRAME UINT32_C(0x00000002)
-#define ENTRY_IMPLEMENT_MAIN(_app) \
- int _main_(int _argc, char** _argv) \
- { \
- _app app; \
- return entry::runApp(&app, _argc, _argv); \
- }
+#ifndef ENTRY_CONFIG_IMPLEMENT_MAIN
+# define ENTRY_CONFIG_IMPLEMENT_MAIN 0
+#endif // ENTRY_CONFIG_IMPLEMENT_MAIN
+
+#if ENTRY_CONFIG_IMPLEMENT_MAIN
+#define ENTRY_IMPLEMENT_MAIN(_app, _name, _description) \
+ int _main_(int _argc, char** _argv) \
+ { \
+ _app app(_name, _description); \
+ return entry::runApp(&app, _argc, _argv); \
+ }
+#else
+#define ENTRY_IMPLEMENT_MAIN(_app, _name, _description) \
+ _app s_ ## _app ## App(_name, _description)
+#endif // ENTRY_CONFIG_IMPLEMENT_MAIN
namespace entry
{
@@ -267,45 +276,48 @@ namespace entry
bool processWindowEvents(WindowState& _state, uint32_t& _debug, uint32_t& _reset);
- struct BX_NO_VTABLE AppI
+ class BX_NO_VTABLE AppI
{
+ public:
+ ///
+ AppI(const char* _name, const char* _description);
+
+ ///
virtual ~AppI() = 0;
- virtual void init(int _argc, char** _argv) = 0;
+
+ ///
+ virtual void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) = 0;
+
+ ///
virtual int shutdown() = 0;
- virtual bool update() = 0;
- };
- inline AppI::~AppI()
- {
- }
+ ///
+ virtual bool update() = 0;
- class App : public AppI
- {
- public:
- App(const char* _name);
+ ///
+ const char* getName() const;
- virtual ~App();
+ ///
+ const char* getDescription() const;
- const char* getName() const
- {
- return m_name;
- }
+ ///
+ AppI* getNext();
- AppI* getNext()
- {
- return m_next;
- }
+ AppI* m_next;
private:
const char* m_name;
- App* m_next;
+ const char* m_description;
};
///
- App* getFirstApp();
+ AppI* getFirstApp();
+
+ ///
+ uint32_t getNumApps();
///
- int runApp(AppI* _app, int _argc, char** _argv);
+ int runApp(AppI* _app, int _argc, const char* const* _argv);
} // namespace entry
diff --git a/3rdparty/bgfx/examples/common/entry/entry_android.cpp b/3rdparty/bgfx/examples/common/entry/entry_android.cpp
index 78ed2f7a507..3c39f6085f0 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_android.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_android.cpp
@@ -9,8 +9,8 @@
#include <bgfx/platform.h>
-#include <stdio.h>
#include <bx/thread.h>
+#include <bx/file.h>
#include <android/input.h>
#include <android/log.h>
@@ -86,9 +86,87 @@ namespace entry
struct MainThreadEntry
{
int m_argc;
- char** m_argv;
+ const char* const* m_argv;
- static int32_t threadFunc(void* _userData);
+ static int32_t threadFunc(bx::Thread* _thread, void* _userData);
+ };
+
+ class FileReaderAndroid : public bx::FileReaderI
+ {
+ public:
+ FileReaderAndroid(AAssetManager* _assetManager, AAsset* _file)
+ : m_assetManager(_assetManager)
+ , m_file(_file)
+ , m_open(false)
+ {
+ }
+
+ virtual ~FileReaderAndroid()
+ {
+ close();
+ }
+
+ virtual bool open(const bx::FilePath& _filePath, bx::Error* _err) override
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ if (NULL != m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_ALREADY_OPEN, "FileReader: File is already open.");
+ return false;
+ }
+
+ m_file = AAssetManager_open(m_assetManager, _filePath.get(), AASSET_MODE_RANDOM);
+ if (NULL == m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "FileReader: Failed to open file.");
+ return false;
+ }
+
+ m_open = true;
+ return true;
+ }
+
+ virtual void close() override
+ {
+ if (m_open
+ && NULL != m_file)
+ {
+ AAsset_close(m_file);
+ m_file = NULL;
+ }
+ }
+
+ virtual int64_t seek(int64_t _offset, bx::Whence::Enum _whence) override
+ {
+ BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
+ return AAsset_seek64(m_file, _offset, _whence);
+
+ }
+
+ virtual int32_t read(void* _data, int32_t _size, bx::Error* _err) override
+ {
+ BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ int32_t size = (int32_t)AAsset_read(m_file, _data, _size);
+ if (size != _size)
+ {
+ if (0 == AAsset_getRemainingLength(m_file) )
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_EOF, "FileReader: EOF.");
+ }
+
+ return size >= 0 ? size : 0;
+ }
+
+ return size;
+ }
+
+ private:
+ AAssetManager* m_assetManager;
+ AAsset* m_file;
+ bool m_open;
};
struct Context
@@ -119,9 +197,9 @@ namespace entry
, 0
);
- const char* argv[1] = { "android.so" };
+ const char* const argv[1] = { "android.so" };
m_mte.m_argc = 1;
- m_mte.m_argv = const_cast<char**>(argv);
+ m_mte.m_argv = argv;
while (0 == m_app->destroyRequested)
{
@@ -472,8 +550,10 @@ namespace entry
BX_UNUSED(_handle, _lock);
}
- int32_t MainThreadEntry::threadFunc(void* _userData)
+ int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData)
{
+ BX_UNUSED(_thread);
+
int32_t result = chdir("/sdcard/bgfx/examples/runtime");
BX_CHECK(0 == result, "Failed to chdir to dir. android.permission.WRITE_EXTERNAL_STORAGE?", errno);
diff --git a/3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp b/3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp
index 9cabff5e838..87857612ee5 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp
@@ -86,7 +86,7 @@ namespace entry
}
}
- int32_t run(int _argc, char** _argv)
+ int32_t run(int _argc, const char* const* _argv)
{
emscripten_set_mousedown_callback("#canvas", this, true, mouseCb);
emscripten_set_mouseup_callback("#canvas", this, true, mouseCb);
@@ -397,7 +397,7 @@ namespace entry
}
}
-int main(int _argc, char** _argv)
+int main(int _argc, const char* const* _argv)
{
using namespace entry;
return s_ctx.run(_argc, _argv);
diff --git a/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp b/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp
index 0ff8fd31c64..9c3ad35894e 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp
@@ -28,8 +28,9 @@
#include <bgfx/platform.h>
-#include <bx/thread.h>
#include <bx/handlealloc.h>
+#include <bx/thread.h>
+#include <bx/mutex.h>
#include <tinystl/string.h>
#include "dbg.h"
@@ -227,9 +228,9 @@ namespace entry
struct MainThreadEntry
{
int m_argc;
- char** m_argv;
+ const char* const* m_argv;
- static int32_t threadFunc(void* _userData);
+ static int32_t threadFunc(bx::Thread* _thread, void* _userData);
};
enum MsgType
@@ -308,86 +309,92 @@ namespace entry
struct Context
{
Context()
- : m_scrollPos(0.0)
+ : m_msgs(getAllocator() )
+ , m_scrollPos(0.0f)
{
bx::memSet(s_translateKey, 0, sizeof(s_translateKey));
- s_translateKey[GLFW_KEY_ESCAPE] = Key::Esc;
- s_translateKey[GLFW_KEY_ENTER] = Key::Return;
- s_translateKey[GLFW_KEY_TAB] = Key::Tab;
- s_translateKey[GLFW_KEY_BACKSPACE] = Key::Backspace;
- s_translateKey[GLFW_KEY_SPACE] = Key::Space;
- s_translateKey[GLFW_KEY_UP] = Key::Up;
- s_translateKey[GLFW_KEY_DOWN] = Key::Down;
- s_translateKey[GLFW_KEY_LEFT] = Key::Left;
- s_translateKey[GLFW_KEY_RIGHT] = Key::Right;
- s_translateKey[GLFW_KEY_PAGE_UP] = Key::PageUp;
- s_translateKey[GLFW_KEY_PAGE_DOWN] = Key::PageDown;
- s_translateKey[GLFW_KEY_HOME] = Key::Home;
- s_translateKey[GLFW_KEY_END] = Key::End;
+ s_translateKey[GLFW_KEY_ESCAPE] = Key::Esc;
+ s_translateKey[GLFW_KEY_ENTER] = Key::Return;
+ s_translateKey[GLFW_KEY_TAB] = Key::Tab;
+ s_translateKey[GLFW_KEY_BACKSPACE] = Key::Backspace;
+ s_translateKey[GLFW_KEY_SPACE] = Key::Space;
+ s_translateKey[GLFW_KEY_UP] = Key::Up;
+ s_translateKey[GLFW_KEY_DOWN] = Key::Down;
+ s_translateKey[GLFW_KEY_LEFT] = Key::Left;
+ s_translateKey[GLFW_KEY_RIGHT] = Key::Right;
+ s_translateKey[GLFW_KEY_PAGE_UP] = Key::PageUp;
+ s_translateKey[GLFW_KEY_PAGE_DOWN] = Key::PageDown;
+ s_translateKey[GLFW_KEY_HOME] = Key::Home;
+ s_translateKey[GLFW_KEY_END] = Key::End;
s_translateKey[GLFW_KEY_PRINT_SCREEN] = Key::Print;
- s_translateKey[GLFW_KEY_KP_ADD] = Key::Plus;
+ s_translateKey[GLFW_KEY_KP_ADD] = Key::Plus;
+ s_translateKey[GLFW_KEY_EQUAL] = Key::Plus;
s_translateKey[GLFW_KEY_KP_SUBTRACT] = Key::Minus;
- s_translateKey[GLFW_KEY_F1] = Key::F1;
- s_translateKey[GLFW_KEY_F2] = Key::F2;
- s_translateKey[GLFW_KEY_F3] = Key::F3;
- s_translateKey[GLFW_KEY_F4] = Key::F4;
- s_translateKey[GLFW_KEY_F5] = Key::F5;
- s_translateKey[GLFW_KEY_F6] = Key::F6;
- s_translateKey[GLFW_KEY_F7] = Key::F7;
- s_translateKey[GLFW_KEY_F8] = Key::F8;
- s_translateKey[GLFW_KEY_F9] = Key::F9;
- s_translateKey[GLFW_KEY_F10] = Key::F10;
- s_translateKey[GLFW_KEY_F11] = Key::F11;
- s_translateKey[GLFW_KEY_F12] = Key::F12;
- s_translateKey[GLFW_KEY_KP_0] = Key::NumPad0;
- s_translateKey[GLFW_KEY_KP_1] = Key::NumPad1;
- s_translateKey[GLFW_KEY_KP_2] = Key::NumPad2;
- s_translateKey[GLFW_KEY_KP_3] = Key::NumPad3;
- s_translateKey[GLFW_KEY_KP_4] = Key::NumPad4;
- s_translateKey[GLFW_KEY_KP_5] = Key::NumPad5;
- s_translateKey[GLFW_KEY_KP_6] = Key::NumPad6;
- s_translateKey[GLFW_KEY_KP_7] = Key::NumPad7;
- s_translateKey[GLFW_KEY_KP_8] = Key::NumPad8;
- s_translateKey[GLFW_KEY_KP_9] = Key::NumPad9;
- s_translateKey[GLFW_KEY_0] = Key::Key0;
- s_translateKey[GLFW_KEY_1] = Key::Key1;
- s_translateKey[GLFW_KEY_2] = Key::Key2;
- s_translateKey[GLFW_KEY_3] = Key::Key3;
- s_translateKey[GLFW_KEY_4] = Key::Key4;
- s_translateKey[GLFW_KEY_5] = Key::Key5;
- s_translateKey[GLFW_KEY_6] = Key::Key6;
- s_translateKey[GLFW_KEY_7] = Key::Key7;
- s_translateKey[GLFW_KEY_8] = Key::Key8;
- s_translateKey[GLFW_KEY_9] = Key::Key9;
- s_translateKey[GLFW_KEY_A] = Key::KeyA;
- s_translateKey[GLFW_KEY_B] = Key::KeyB;
- s_translateKey[GLFW_KEY_C] = Key::KeyC;
- s_translateKey[GLFW_KEY_D] = Key::KeyD;
- s_translateKey[GLFW_KEY_E] = Key::KeyE;
- s_translateKey[GLFW_KEY_F] = Key::KeyF;
- s_translateKey[GLFW_KEY_G] = Key::KeyG;
- s_translateKey[GLFW_KEY_H] = Key::KeyH;
- s_translateKey[GLFW_KEY_I] = Key::KeyI;
- s_translateKey[GLFW_KEY_J] = Key::KeyJ;
- s_translateKey[GLFW_KEY_K] = Key::KeyK;
- s_translateKey[GLFW_KEY_L] = Key::KeyL;
- s_translateKey[GLFW_KEY_M] = Key::KeyM;
- s_translateKey[GLFW_KEY_N] = Key::KeyN;
- s_translateKey[GLFW_KEY_O] = Key::KeyO;
- s_translateKey[GLFW_KEY_P] = Key::KeyP;
- s_translateKey[GLFW_KEY_Q] = Key::KeyQ;
- s_translateKey[GLFW_KEY_R] = Key::KeyR;
- s_translateKey[GLFW_KEY_S] = Key::KeyS;
- s_translateKey[GLFW_KEY_T] = Key::KeyT;
- s_translateKey[GLFW_KEY_U] = Key::KeyU;
- s_translateKey[GLFW_KEY_V] = Key::KeyV;
- s_translateKey[GLFW_KEY_W] = Key::KeyW;
- s_translateKey[GLFW_KEY_X] = Key::KeyX;
- s_translateKey[GLFW_KEY_Y] = Key::KeyY;
- s_translateKey[GLFW_KEY_Z] = Key::KeyZ;
+ s_translateKey[GLFW_KEY_MINUS] = Key::Minus;
+ s_translateKey[GLFW_KEY_COMMA] = Key::Comma;
+ s_translateKey[GLFW_KEY_PERIOD] = Key::Period;
+ s_translateKey[GLFW_KEY_SLASH] = Key::Slash;
+ s_translateKey[GLFW_KEY_F1] = Key::F1;
+ s_translateKey[GLFW_KEY_F2] = Key::F2;
+ s_translateKey[GLFW_KEY_F3] = Key::F3;
+ s_translateKey[GLFW_KEY_F4] = Key::F4;
+ s_translateKey[GLFW_KEY_F5] = Key::F5;
+ s_translateKey[GLFW_KEY_F6] = Key::F6;
+ s_translateKey[GLFW_KEY_F7] = Key::F7;
+ s_translateKey[GLFW_KEY_F8] = Key::F8;
+ s_translateKey[GLFW_KEY_F9] = Key::F9;
+ s_translateKey[GLFW_KEY_F10] = Key::F10;
+ s_translateKey[GLFW_KEY_F11] = Key::F11;
+ s_translateKey[GLFW_KEY_F12] = Key::F12;
+ s_translateKey[GLFW_KEY_KP_0] = Key::NumPad0;
+ s_translateKey[GLFW_KEY_KP_1] = Key::NumPad1;
+ s_translateKey[GLFW_KEY_KP_2] = Key::NumPad2;
+ s_translateKey[GLFW_KEY_KP_3] = Key::NumPad3;
+ s_translateKey[GLFW_KEY_KP_4] = Key::NumPad4;
+ s_translateKey[GLFW_KEY_KP_5] = Key::NumPad5;
+ s_translateKey[GLFW_KEY_KP_6] = Key::NumPad6;
+ s_translateKey[GLFW_KEY_KP_7] = Key::NumPad7;
+ s_translateKey[GLFW_KEY_KP_8] = Key::NumPad8;
+ s_translateKey[GLFW_KEY_KP_9] = Key::NumPad9;
+ s_translateKey[GLFW_KEY_0] = Key::Key0;
+ s_translateKey[GLFW_KEY_1] = Key::Key1;
+ s_translateKey[GLFW_KEY_2] = Key::Key2;
+ s_translateKey[GLFW_KEY_3] = Key::Key3;
+ s_translateKey[GLFW_KEY_4] = Key::Key4;
+ s_translateKey[GLFW_KEY_5] = Key::Key5;
+ s_translateKey[GLFW_KEY_6] = Key::Key6;
+ s_translateKey[GLFW_KEY_7] = Key::Key7;
+ s_translateKey[GLFW_KEY_8] = Key::Key8;
+ s_translateKey[GLFW_KEY_9] = Key::Key9;
+ s_translateKey[GLFW_KEY_A] = Key::KeyA;
+ s_translateKey[GLFW_KEY_B] = Key::KeyB;
+ s_translateKey[GLFW_KEY_C] = Key::KeyC;
+ s_translateKey[GLFW_KEY_D] = Key::KeyD;
+ s_translateKey[GLFW_KEY_E] = Key::KeyE;
+ s_translateKey[GLFW_KEY_F] = Key::KeyF;
+ s_translateKey[GLFW_KEY_G] = Key::KeyG;
+ s_translateKey[GLFW_KEY_H] = Key::KeyH;
+ s_translateKey[GLFW_KEY_I] = Key::KeyI;
+ s_translateKey[GLFW_KEY_J] = Key::KeyJ;
+ s_translateKey[GLFW_KEY_K] = Key::KeyK;
+ s_translateKey[GLFW_KEY_L] = Key::KeyL;
+ s_translateKey[GLFW_KEY_M] = Key::KeyM;
+ s_translateKey[GLFW_KEY_N] = Key::KeyN;
+ s_translateKey[GLFW_KEY_O] = Key::KeyO;
+ s_translateKey[GLFW_KEY_P] = Key::KeyP;
+ s_translateKey[GLFW_KEY_Q] = Key::KeyQ;
+ s_translateKey[GLFW_KEY_R] = Key::KeyR;
+ s_translateKey[GLFW_KEY_S] = Key::KeyS;
+ s_translateKey[GLFW_KEY_T] = Key::KeyT;
+ s_translateKey[GLFW_KEY_U] = Key::KeyU;
+ s_translateKey[GLFW_KEY_V] = Key::KeyV;
+ s_translateKey[GLFW_KEY_W] = Key::KeyW;
+ s_translateKey[GLFW_KEY_X] = Key::KeyX;
+ s_translateKey[GLFW_KEY_Y] = Key::KeyY;
+ s_translateKey[GLFW_KEY_Z] = Key::KeyZ;
}
- int run(int _argc, char** _argv)
+ int run(int _argc, const char* const* _argv)
{
m_mte.m_argc = _argc;
m_mte.m_argv = _argv;
@@ -397,7 +404,7 @@ namespace entry
if (!glfwInit() )
{
DBG("glfwInit failed!");
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
glfwSetJoystickCallback(joystickCb);
@@ -416,7 +423,7 @@ namespace entry
{
DBG("glfwCreateWindow failed!");
glfwTerminate();
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
glfwSetKeyCallback(m_windows[0], keyCb);
@@ -533,17 +540,25 @@ namespace entry
case GLFW_WINDOW_TOGGLE_FULL_SCREEN:
{
GLFWwindow* window = m_windows[msg->m_handle.idx];
- if (glfwGetWindowMonitor(window))
+ if (glfwGetWindowMonitor(window) )
{
- int width, height;
- glfwGetWindowSize(window, &width, &height);
- glfwSetWindowMonitor(window, NULL, 0, 0, width, height, 0);
+ glfwSetWindowMonitor(window
+ , NULL
+ , m_oldX
+ , m_oldY
+ , m_oldWidth
+ , m_oldHeight
+ , 0
+ );
}
else
{
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
if (NULL != monitor)
{
+ glfwGetWindowPos(window, &m_oldX, &m_oldY);
+ glfwGetWindowSize(window, &m_oldWidth, &m_oldHeight);
+
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
glfwSetWindowMonitor(window
, monitor
@@ -624,6 +639,11 @@ namespace entry
bx::SpScUnboundedQueueT<Msg> m_msgs;
+ int32_t m_oldX;
+ int32_t m_oldY;
+ int32_t m_oldWidth;
+ int32_t m_oldHeight;
+
double m_scrollPos;
};
@@ -818,8 +838,10 @@ namespace entry
glfwPostEmptyEvent();
}
- int32_t MainThreadEntry::threadFunc(void* _userData)
+ int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData)
{
+ BX_UNUSED(_thread);
+
MainThreadEntry* self = (MainThreadEntry*)_userData;
int32_t result = main(self->m_argc, self->m_argv);
@@ -833,7 +855,7 @@ namespace entry
}
}
-int main(int _argc, char** _argv)
+int main(int _argc, const char* const* _argv)
{
using namespace entry;
return s_ctx.run(_argc, _argv);
diff --git a/3rdparty/bgfx/examples/common/entry/entry_ios.mm b/3rdparty/bgfx/examples/common/entry/entry_ios.mm
index c2dbdce65e1..d781089fb63 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_ios.mm
+++ b/3rdparty/bgfx/examples/common/entry/entry_ios.mm
@@ -27,9 +27,9 @@ namespace entry
struct MainThreadEntry
{
int m_argc;
- char** m_argv;
+ const char* const* m_argv;
- static int32_t threadFunc(void* _userData);
+ static int32_t threadFunc(bx::Thread* _thread, void* _userData);
};
static WindowHandle s_defaultWindow = { 0 };
@@ -38,9 +38,9 @@ namespace entry
{
Context(uint32_t _width, uint32_t _height)
{
- static const char* argv[1] = { "ios" };
+ const char* const argv[1] = { "ios" };
m_mte.m_argc = 1;
- m_mte.m_argv = const_cast<char**>(argv);
+ m_mte.m_argv = argv;
m_eventQueue.postSizeEvent(s_defaultWindow, _width, _height);
@@ -63,19 +63,22 @@ namespace entry
static Context* s_ctx;
- int32_t MainThreadEntry::threadFunc(void* _userData)
+ int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData)
{
+ BX_UNUSED(_thread);
+
CFBundleRef mainBundle = CFBundleGetMainBundle();
- if ( mainBundle != nil )
+ if (mainBundle != nil)
{
CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
- if ( resourcesURL != nil )
+ if (resourcesURL != nil)
{
char path[PATH_MAX];
- if (CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX) )
+ if (CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8*)path, PATH_MAX) )
{
chdir(path);
}
+
CFRelease(resourcesURL);
}
}
@@ -247,6 +250,8 @@ static void* m_device = NULL;
BX_UNUSED(touches);
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
+ touchLocation.x *= self.contentScaleFactor;
+ touchLocation.y *= self.contentScaleFactor;
s_ctx->m_eventQueue.postMouseEvent(s_defaultWindow, touchLocation.x, touchLocation.y, 0);
s_ctx->m_eventQueue.postMouseEvent(s_defaultWindow, touchLocation.x, touchLocation.y, 0, MouseButton::Left, true);
@@ -257,6 +262,9 @@ static void* m_device = NULL;
BX_UNUSED(touches);
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
+ touchLocation.x *= self.contentScaleFactor;
+ touchLocation.y *= self.contentScaleFactor;
+
s_ctx->m_eventQueue.postMouseEvent(s_defaultWindow, touchLocation.x, touchLocation.y, 0, MouseButton::Left, false);
}
@@ -265,6 +273,9 @@ static void* m_device = NULL;
BX_UNUSED(touches);
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
+ touchLocation.x *= self.contentScaleFactor;
+ touchLocation.y *= self.contentScaleFactor;
+
s_ctx->m_eventQueue.postMouseEvent(s_defaultWindow, touchLocation.x, touchLocation.y, 0);
}
@@ -273,6 +284,9 @@ static void* m_device = NULL;
BX_UNUSED(touches);
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
+ touchLocation.x *= self.contentScaleFactor;
+ touchLocation.y *= self.contentScaleFactor;
+
s_ctx->m_eventQueue.postMouseEvent(s_defaultWindow, touchLocation.x, touchLocation.y, 0, MouseButton::Left, false);
}
@@ -312,8 +326,7 @@ static void* m_device = NULL;
[m_window makeKeyAndVisible];
- //float scaleFactor = [[UIScreen mainScreen] scale]; // should use this, but needs to further pass the value to the `nvgBeginFrame()` call's `devicePixelRatio` parameter in `ExampleNanoVG` class' `update()` method so it can actually work properly.
- float scaleFactor = 1.0f;
+ float scaleFactor = [[UIScreen mainScreen] scale];
[m_view setContentScaleFactor: scaleFactor ];
s_ctx = new Context((uint32_t)(scaleFactor*rect.size.width), (uint32_t)(scaleFactor*rect.size.height));
@@ -361,10 +374,10 @@ static void* m_device = NULL;
@end
-int main(int _argc, char* _argv[])
+int main(int _argc, const char* const* _argv)
{
NSAutoreleasePool* pool = [ [NSAutoreleasePool alloc] init];
- int exitCode = UIApplicationMain(_argc, _argv, @"UIApplication", NSStringFromClass([AppDelegate class]) );
+ int exitCode = UIApplicationMain(_argc, (char**)_argv, @"UIApplication", NSStringFromClass([AppDelegate class]) );
[pool release];
return exitCode;
}
diff --git a/3rdparty/bgfx/examples/common/entry/entry_nacl.cpp b/3rdparty/bgfx/examples/common/entry/entry_nacl.cpp
deleted file mode 100644
index b51a96e3446..00000000000
--- a/3rdparty/bgfx/examples/common/entry/entry_nacl.cpp
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#include "entry_p.h"
-
-#if ENTRY_CONFIG_USE_NATIVE && BX_PLATFORM_NACL
-
-#include <bgfx/platform.h>
-
-#include <pthread.h>
-#include <string>
-
-#include <ppapi/c/pp_errors.h>
-#include <ppapi/c/pp_module.h>
-#include <ppapi/c/ppb.h>
-#include <ppapi/c/ppb_core.h>
-#include <ppapi/c/ppb_graphics_3d.h>
-#include <ppapi/c/ppb_instance.h>
-#include <ppapi/c/ppb_message_loop.h>
-#include <ppapi/c/ppb_url_loader.h>
-#include <ppapi/c/ppb_url_request_info.h>
-#include <ppapi/c/ppb_url_response_info.h>
-#include <ppapi/c/ppb_var.h>
-#include <ppapi/c/ppp.h>
-#include <ppapi/c/ppp_instance.h>
-#include <ppapi/gles2/gl2ext_ppapi.h>
-
-#include <bx/thread.h>
-
-#include "entry.h"
-
-namespace entry
-{
- const PPB_Core* g_coreInterface;
- const PPB_Instance* g_instInterface;
- const PPB_Graphics3D* g_graphicsInterface;
- const PPB_MessageLoop* g_messageLoopInterface;
- const PPB_URLLoader* g_urlLoaderInterface;
- const PPB_URLRequestInfo* g_urlRequestInterface;
- const PPB_URLResponseInfo* g_urlResponseInterface;
- const PPB_Var* g_varInterface;
- PP_Instance g_instance;
-
- const Event* poll()
- {
- return NULL;
- }
-
- const Event* poll(WindowHandle _handle)
- {
- BX_UNUSED(_handle);
- return NULL;
- }
-
- void release(const Event* _event)
- {
- BX_UNUSED(_event);
- }
-
- WindowHandle createWindow(int32_t _x, int32_t _y, uint32_t _width, uint32_t _height, uint32_t _flags, const char* _title)
- {
- BX_UNUSED(_x, _y, _width, _height, _flags, _title);
- WindowHandle handle = { UINT16_MAX };
- return handle;
- }
-
- void destroyWindow(WindowHandle _handle)
- {
- BX_UNUSED(_handle);
- }
-
- void setWindowPos(WindowHandle _handle, int32_t _x, int32_t _y)
- {
- BX_UNUSED(_handle, _x, _y);
- }
-
- void setWindowSize(WindowHandle _handle, uint32_t _width, uint32_t _height)
- {
- BX_UNUSED(_handle, _width, _height);
- }
-
- void setWindowTitle(WindowHandle _handle, const char* _title)
- {
- BX_UNUSED(_handle, _title);
- }
-
- void toggleWindowFrame(WindowHandle _handle)
- {
- BX_UNUSED(_handle);
- }
-
- void toggleFullscreen(WindowHandle _handle)
- {
- BX_UNUSED(_handle);
- }
-
- void setMouseLock(WindowHandle _handle, bool _lock)
- {
- BX_UNUSED(_handle, _lock);
- }
-
- template<typename Type>
- bool initializeInterface(PPB_GetInterface _interface, const char* _name, const Type*& _result)
- {
- _result = reinterpret_cast<const Type*>(_interface(_name) );
-// DBG("%p %s", _result, _name);
- return NULL != _result;
- }
-
- struct MainThreadEntry
- {
- int m_argc;
- char** m_argv;
-
- static int32_t threadFunc(void* _userData);
- };
-
- struct NaclContext
- {
- NaclContext()
- {
- static const char* argv[1] = { "nacl.nexe" };
- m_mte.m_argc = 1;
- m_mte.m_argv = const_cast<char**>(argv);
-
- m_thread.init(MainThreadEntry::threadFunc, &m_mte);
- }
-
- ~NaclContext()
- {
- m_thread.shutdown();
- }
-
- MainThreadEntry m_mte;
- bx::Thread m_thread;
- };
-
- static NaclContext* s_ctx;
-
- int32_t MainThreadEntry::threadFunc(void* _userData)
- {
- MainThreadEntry* self = (MainThreadEntry*)_userData;
-
- PP_Resource resource = g_messageLoopInterface->Create(g_instance);
- g_messageLoopInterface->AttachToCurrentThread(resource);
-
- int32_t result = main(self->m_argc, self->m_argv);
- return result;
- }
-
- static PP_Bool naclInstanceDidCreate(PP_Instance _instance, uint32_t /*_argc*/, const char* /*_argn*/[], const char* /*_argv*/[])
- {
- g_instance = _instance; // one instance only!
-
- if (bgfx::naclSetInterfaces(g_instance, g_instInterface, g_graphicsInterface, NULL) )
- {
- s_ctx = new NaclContext;
- return PP_TRUE;
- }
-
- return PP_FALSE;
- }
-
- static void naclInstanceDidDestroy(PP_Instance _instance)
- {
- BX_UNUSED(_instance);
- delete s_ctx;
- }
-
- static void naclInstanceDidChangeView(PP_Instance /*_instance*/, PP_Resource /*_view*/)
- {
- }
-
- static void naclInstanceDidChangeFocus(PP_Instance /*_instance*/, PP_Bool /*_focus*/)
- {
- }
-
- static PP_Bool naclInstanceHandleDocumentLoad(PP_Instance /*_instance*/, PP_Resource /*_urlLoader*/)
- {
- return PP_FALSE;
- }
-
-} // namespace entry
-
-using namespace entry;
-
-PP_EXPORT const void* PPP_GetInterface(const char* _name)
-{
- if (0 == bx::strncmp(_name, PPP_INSTANCE_INTERFACE) )
- {
- static PPP_Instance instanceInterface =
- {
- &naclInstanceDidCreate,
- &naclInstanceDidDestroy,
- &naclInstanceDidChangeView,
- &naclInstanceDidChangeFocus,
- &naclInstanceHandleDocumentLoad,
- };
-
- return &instanceInterface;
- }
-
- return NULL;
-}
-
-PP_EXPORT int32_t PPP_InitializeModule(PP_Module _module, PPB_GetInterface _interface)
-{
- DBG("PPAPI version: %d", PPAPI_RELEASE);
-
- BX_UNUSED(_module);
- bool result = true;
- result &= initializeInterface(_interface, PPB_CORE_INTERFACE, g_coreInterface);
- result &= initializeInterface(_interface, PPB_GRAPHICS_3D_INTERFACE, g_graphicsInterface);
- result &= initializeInterface(_interface, PPB_INSTANCE_INTERFACE, g_instInterface);
- result &= initializeInterface(_interface, PPB_MESSAGELOOP_INTERFACE, g_messageLoopInterface);
- result &= initializeInterface(_interface, PPB_URLLOADER_INTERFACE, g_urlLoaderInterface);
- result &= initializeInterface(_interface, PPB_URLREQUESTINFO_INTERFACE, g_urlRequestInterface);
- result &= initializeInterface(_interface, PPB_URLRESPONSEINFO_INTERFACE, g_urlResponseInterface);
- result &= initializeInterface(_interface, PPB_VAR_INTERFACE, g_varInterface);
- result &= glInitializePPAPI(_interface);
-
- return result ? PP_OK : PP_ERROR_NOINTERFACE;
-}
-
-PP_EXPORT void PPP_ShutdownModule()
-{
-}
-
-#endif // ENTRY_CONFIG_USE_NATIVE && BX_PLATFROM_NACL
diff --git a/3rdparty/bgfx/examples/common/entry/entry_noop.cpp b/3rdparty/bgfx/examples/common/entry/entry_noop.cpp
index 1e85e2df28b..a0007bc5c98 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_noop.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_noop.cpp
@@ -7,8 +7,6 @@
#if ENTRY_CONFIG_USE_NOOP
-#include <stdio.h>
-
namespace entry
{
const Event* poll()
@@ -71,7 +69,7 @@ namespace entry
} // namespace entry
-int main(int _argc, char** _argv)
+int main(int _argc, const char* const* _argv)
{
entry::main(_argc, _argv);
}
diff --git a/3rdparty/bgfx/examples/common/entry/entry_osx.mm b/3rdparty/bgfx/examples/common/entry/entry_osx.mm
index 49a8f9bbfff..e99d59bab27 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_osx.mm
+++ b/3rdparty/bgfx/examples/common/entry/entry_osx.mm
@@ -64,21 +64,24 @@ namespace entry
struct MainThreadEntry
{
int m_argc;
- char** m_argv;
+ const char* const* m_argv;
- static int32_t threadFunc(void* _userData)
+ static int32_t threadFunc(bx::Thread* _thread, void* _userData)
{
+ BX_UNUSED(_thread);
+
CFBundleRef mainBundle = CFBundleGetMainBundle();
- if ( mainBundle != nil )
+ if (mainBundle != nil)
{
CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
- if ( resourcesURL != nil )
+ if (resourcesURL != nil)
{
char path[PATH_MAX];
- if (CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX) )
+ if (CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8*)path, PATH_MAX) )
{
chdir(path);
}
+
CFRelease(resourcesURL);
}
}
@@ -100,7 +103,7 @@ namespace entry
, m_fullscreen(false)
{
s_translateKey[27] = Key::Esc;
- s_translateKey[uint8_t('\n')] = Key::Return;
+ s_translateKey[uint8_t('\r')] = Key::Return;
s_translateKey[uint8_t('\t')] = Key::Tab;
s_translateKey[127] = Key::Backspace;
s_translateKey[uint8_t(' ')] = Key::Space;
@@ -271,66 +274,52 @@ namespace entry
switch (eventType)
{
- case NSMouseMoved:
- case NSLeftMouseDragged:
- case NSRightMouseDragged:
- case NSOtherMouseDragged:
- {
- getMousePos(&m_mx, &m_my);
- m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll);
- break;
- }
-
- case NSLeftMouseDown:
+ case NSMouseMoved:
+ case NSLeftMouseDragged:
+ case NSRightMouseDragged:
+ case NSOtherMouseDragged:
+ getMousePos(&m_mx, &m_my);
+ m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll);
+ break;
+
+ case NSLeftMouseDown:
{
// Command + Left Mouse Button acts as middle! This just a temporary solution!
// This is because the average OSX user doesn't have middle mouse click.
MouseButton::Enum mb = ([event modifierFlags] & NSCommandKeyMask) ? MouseButton::Middle : MouseButton::Left;
m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, mb, true);
- break;
}
+ break;
- case NSLeftMouseUp:
- {
- m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Left, false);
- m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Middle, false); // TODO: remove!
- break;
- }
+ case NSLeftMouseUp:
+ m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Left, false);
+ m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Middle, false);
+ break;
- case NSRightMouseDown:
- {
- m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Right, true);
- break;
- }
+ case NSRightMouseDown:
+ m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Right, true);
+ break;
- case NSRightMouseUp:
- {
- m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Right, false);
- break;
- }
+ case NSRightMouseUp:
+ m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Right, false);
+ break;
- case NSOtherMouseDown:
- {
- m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Middle, true);
- break;
- }
+ case NSOtherMouseDown:
+ m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Middle, true);
+ break;
- case NSOtherMouseUp:
- {
- m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Middle, false);
- break;
- }
+ case NSOtherMouseUp:
+ m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll, MouseButton::Middle, false);
+ break;
- case NSScrollWheel:
- {
- m_scrollf += [event deltaY];
+ case NSScrollWheel:
+ m_scrollf += [event deltaY];
- m_scroll = (int32_t)m_scrollf;
- m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll);
- break;
- }
+ m_scroll = (int32_t)m_scrollf;
+ m_eventQueue.postMouseEvent(s_defaultWindow, m_mx, m_my, m_scroll);
+ break;
- case NSKeyDown:
+ case NSKeyDown:
{
uint8_t modifiers = 0;
uint8_t pressedChar[4];
@@ -351,11 +340,10 @@ namespace entry
return false;
}
}
-
- break;
}
+ break;
- case NSKeyUp:
+ case NSKeyUp:
{
uint8_t modifiers = 0;
uint8_t pressedChar[4];
@@ -369,8 +357,11 @@ namespace entry
return false;
}
- break;
}
+ break;
+
+ default:
+ break;
}
[NSApp sendEvent:event];
@@ -409,7 +400,7 @@ namespace entry
m_eventQueue.postSuspendEvent(s_defaultWindow, Suspend::DidSuspend);
}
- int32_t run(int _argc, char** _argv)
+ int32_t run(int _argc, const char* const* _argv)
{
[NSApplication sharedApplication];
@@ -487,10 +478,7 @@ namespace entry
{
@autoreleasepool
{
- if (bgfx::RenderFrame::Exiting == bgfx::renderFrame() )
- {
- break;
- }
+ bgfx::renderFrame();
}
while (dispatchEvent(peekEvent() ) )
@@ -770,7 +758,7 @@ namespace entry
@end
-int main(int _argc, char** _argv)
+int main(int _argc, const char* const* _argv)
{
using namespace entry;
return s_ctx.run(_argc, _argv);
diff --git a/3rdparty/bgfx/examples/common/entry/entry_p.h b/3rdparty/bgfx/examples/common/entry/entry_p.h
index ab45cfef5b5..fa4792a5cb5 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_p.h
+++ b/3rdparty/bgfx/examples/common/entry/entry_p.h
@@ -67,7 +67,7 @@ namespace entry
static void static_deallocate(void* _ptr, size_t /*_bytes*/);
};
- int main(int _argc, char** _argv);
+ int main(int _argc, const char* const* _argv);
char keyToAscii(Key::Enum _key, uint8_t _modifiers);
@@ -177,6 +177,11 @@ namespace entry
class EventQueue
{
public:
+ EventQueue()
+ : m_queue(getAllocator() )
+ {
+ }
+
~EventQueue()
{
for (const Event* ev = poll(); NULL != ev; ev = poll() )
@@ -187,7 +192,7 @@ namespace entry
void postAxisEvent(WindowHandle _handle, GamepadHandle _gamepad, GamepadAxis::Enum _axis, int32_t _value)
{
- AxisEvent* ev = new AxisEvent(_handle);
+ AxisEvent* ev = BX_NEW(getAllocator(), AxisEvent)(_handle);
ev->m_gamepad = _gamepad;
ev->m_axis = _axis;
ev->m_value = _value;
@@ -196,7 +201,7 @@ namespace entry
void postCharEvent(WindowHandle _handle, uint8_t _len, const uint8_t _char[4])
{
- CharEvent* ev = new CharEvent(_handle);
+ CharEvent* ev = BX_NEW(getAllocator(), CharEvent)(_handle);
ev->m_len = _len;
bx::memCopy(ev->m_char, _char, 4);
m_queue.push(ev);
@@ -204,13 +209,13 @@ namespace entry
void postExitEvent()
{
- Event* ev = new Event(Event::Exit);
+ Event* ev = BX_NEW(getAllocator(), Event)(Event::Exit);
m_queue.push(ev);
}
void postGamepadEvent(WindowHandle _handle, GamepadHandle _gamepad, bool _connected)
{
- GamepadEvent* ev = new GamepadEvent(_handle);
+ GamepadEvent* ev = BX_NEW(getAllocator(), GamepadEvent)(_handle);
ev->m_gamepad = _gamepad;
ev->m_connected = _connected;
m_queue.push(ev);
@@ -218,7 +223,7 @@ namespace entry
void postKeyEvent(WindowHandle _handle, Key::Enum _key, uint8_t _modifiers, bool _down)
{
- KeyEvent* ev = new KeyEvent(_handle);
+ KeyEvent* ev = BX_NEW(getAllocator(), KeyEvent)(_handle);
ev->m_key = _key;
ev->m_modifiers = _modifiers;
ev->m_down = _down;
@@ -227,7 +232,7 @@ namespace entry
void postMouseEvent(WindowHandle _handle, int32_t _mx, int32_t _my, int32_t _mz)
{
- MouseEvent* ev = new MouseEvent(_handle);
+ MouseEvent* ev = BX_NEW(getAllocator(), MouseEvent)(_handle);
ev->m_mx = _mx;
ev->m_my = _my;
ev->m_mz = _mz;
@@ -239,7 +244,7 @@ namespace entry
void postMouseEvent(WindowHandle _handle, int32_t _mx, int32_t _my, int32_t _mz, MouseButton::Enum _button, bool _down)
{
- MouseEvent* ev = new MouseEvent(_handle);
+ MouseEvent* ev = BX_NEW(getAllocator(), MouseEvent)(_handle);
ev->m_mx = _mx;
ev->m_my = _my;
ev->m_mz = _mz;
@@ -251,7 +256,7 @@ namespace entry
void postSizeEvent(WindowHandle _handle, uint32_t _width, uint32_t _height)
{
- SizeEvent* ev = new SizeEvent(_handle);
+ SizeEvent* ev = BX_NEW(getAllocator(), SizeEvent)(_handle);
ev->m_width = _width;
ev->m_height = _height;
m_queue.push(ev);
@@ -259,14 +264,14 @@ namespace entry
void postWindowEvent(WindowHandle _handle, void* _nwh = NULL)
{
- WindowEvent* ev = new WindowEvent(_handle);
+ WindowEvent* ev = BX_NEW(getAllocator(), WindowEvent)(_handle);
ev->m_nwh = _nwh;
m_queue.push(ev);
}
void postSuspendEvent(WindowHandle _handle, Suspend::Enum _state)
{
- SuspendEvent* ev = new SuspendEvent(_handle);
+ SuspendEvent* ev = BX_NEW(getAllocator(), SuspendEvent)(_handle);
ev->m_state = _state;
m_queue.push(ev);
}
@@ -293,7 +298,7 @@ namespace entry
void release(const Event* _event) const
{
- delete _event;
+ BX_DELETE(getAllocator(), const_cast<Event*>(_event) );
}
private:
diff --git a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
index b8476f77bff..62a59b5bc04 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
@@ -11,7 +11,7 @@
# define SDL_MAIN_HANDLED
#endif // BX_PLATFORM_WINDOWS
-#include <bx/bx.h>
+#include <bx/os.h>
#include <SDL2/SDL.h>
@@ -25,12 +25,10 @@ BX_PRAGMA_DIAGNOSTIC_POP()
# undef None
#endif // defined(None)
-#include <stdio.h>
#include <bx/mutex.h>
#include <bx/thread.h>
#include <bx/handlealloc.h>
#include <bx/readerwriter.h>
-#include <bx/crtimpl.h>
#include <tinystl/allocator.h>
#include <tinystl/string.h>
@@ -251,7 +249,7 @@ namespace entry
int m_argc;
char** m_argv;
- static int32_t threadFunc(void* _userData);
+ static int32_t threadFunc(bx::Thread* _thread, void* _userData);
};
///
@@ -487,16 +485,25 @@ namespace entry
WindowHandle defaultWindow = { 0 };
setWindowSize(defaultWindow, m_width, m_height, true);
- bx::FileReaderI* reader = getFileReader();
+ bx::FileReaderI* reader = NULL;
+ while (NULL == reader)
+ {
+ reader = getFileReader();
+ bx::sleep(100);
+ }
+
if (bx::open(reader, "gamecontrollerdb.txt") )
{
bx::AllocatorI* allocator = getAllocator();
uint32_t size = (uint32_t)bx::getSize(reader);
- void* data = BX_ALLOC(allocator, size);
+ void* data = BX_ALLOC(allocator, size + 1);
bx::read(reader, data, size);
bx::close(reader);
+ ((char*)data)[size] = '\0';
- SDL_GameControllerAddMapping( (char*)data);
+ if (SDL_GameControllerAddMapping( (char*)data) < 0) {
+ DBG("SDL game controller add mapping failed: %s", SDL_GetError());
+ }
BX_FREE(allocator, data);
}
@@ -1083,8 +1090,10 @@ namespace entry
sdlPostEvent(SDL_USER_WINDOW_MOUSE_LOCK, _handle, NULL, _lock);
}
- int32_t MainThreadEntry::threadFunc(void* _userData)
+ int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData)
{
+ BX_UNUSED(_thread);
+
MainThreadEntry* self = (MainThreadEntry*)_userData;
int32_t result = main(self->m_argc, self->m_argv);
diff --git a/3rdparty/bgfx/examples/common/entry/entry_windows.cpp b/3rdparty/bgfx/examples/common/entry/entry_windows.cpp
index 055c85788a2..68045859eb0 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_windows.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_windows.cpp
@@ -311,9 +311,9 @@ namespace entry
struct MainThreadEntry
{
int m_argc;
- char** m_argv;
+ const char* const* m_argv;
- static int32_t threadFunc(void* _userData);
+ static int32_t threadFunc(bx::Thread* _thread, void* _userData);
};
struct Msg
@@ -381,7 +381,7 @@ namespace entry
s_translateKey[VK_OEM_7] = Key::Quote;
s_translateKey[VK_OEM_COMMA] = Key::Comma;
s_translateKey[VK_OEM_PERIOD] = Key::Period;
- s_translateKey[VK_DECIMAL] = Key::Period;
+ s_translateKey[VK_DECIMAL] = Key::Period;
s_translateKey[VK_OEM_2] = Key::Slash;
s_translateKey[VK_OEM_5] = Key::Backslash;
s_translateKey[VK_OEM_3] = Key::Tilde;
@@ -445,7 +445,7 @@ namespace entry
s_translateKey[uint8_t('Z')] = Key::KeyZ;
}
- int32_t run(int _argc, char** _argv)
+ int32_t run(int _argc, const char* const* _argv)
{
SetDllDirectoryA(".");
@@ -498,6 +498,8 @@ namespace entry
mte.m_argc = _argc;
mte.m_argv = _argv;
+ bgfx::renderFrame();
+
bx::Thread thread;
thread.init(mte.threadFunc, &mte);
m_init = true;
@@ -509,6 +511,8 @@ namespace entry
while (!m_exit)
{
+ bgfx::renderFrame();
+
s_xinput.update(m_eventQueue);
WaitForInputIdle(GetCurrentProcess(), 16);
@@ -519,6 +523,8 @@ namespace entry
}
}
+ while (bgfx::RenderFrame::NoContext != bgfx::renderFrame() ) {};
+
thread.shutdown();
DestroyWindow(m_hwnd[0]);
@@ -661,13 +667,23 @@ namespace entry
}
// Recalculate position using different anchor points
- switch(_wparam)
+ switch (_wparam)
{
- case WMSZ_LEFT:
case WMSZ_TOPLEFT:
+ rect.left = rect.right - width - m_frameWidth;
+ rect.top = rect.bottom - height - m_frameHeight;
+ break;
+
+ case WMSZ_TOP:
+ case WMSZ_TOPRIGHT:
+ rect.right = rect.left + width + m_frameWidth;
+ rect.top = rect.bottom - height - m_frameHeight;
+ break;
+
+ case WMSZ_LEFT:
case WMSZ_BOTTOMLEFT:
- rect.left = rect.right - width - m_frameWidth;
- rect.bottom = rect.top + height + m_frameHeight;
+ rect.left = rect.right - width - m_frameWidth;
+ rect.bottom = rect.top + height + m_frameHeight;
break;
default:
@@ -881,10 +897,6 @@ namespace entry
}
else
{
-#if defined(__MINGW32__)
- rect = m_rect;
- style = m_style;
-#else
HMONITOR monitor = MonitorFromWindow(_hwnd, MONITOR_DEFAULTTONEAREST);
MONITORINFO mi;
mi.cbSize = sizeof(mi);
@@ -892,7 +904,6 @@ namespace entry
newrect = mi.rcMonitor;
rect = mi.rcMonitor;
m_aspectRatio = float(newrect.right - newrect.left)/float(newrect.bottom - newrect.top);
-#endif // !defined(__MINGW__)
}
SetWindowLong(_hwnd, GWL_STYLE, style);
@@ -1085,7 +1096,7 @@ namespace entry
PostMessage(s_ctx.m_hwnd[0], WM_USER_WINDOW_MOUSE_LOCK, _handle.idx, _lock);
}
- int32_t MainThreadEntry::threadFunc(void* _userData)
+ int32_t MainThreadEntry::threadFunc(bx::Thread* /*_thread*/, void* _userData)
{
MainThreadEntry* self = (MainThreadEntry*)_userData;
int32_t result = main(self->m_argc, self->m_argv);
@@ -1095,7 +1106,7 @@ namespace entry
} // namespace entry
-int main(int _argc, char** _argv)
+int main(int _argc, const char* const* _argv)
{
using namespace entry;
return s_ctx.run(_argc, _argv);
diff --git a/3rdparty/bgfx/examples/common/entry/entry_winrt.cx b/3rdparty/bgfx/examples/common/entry/entry_winrt.cx
index 39e3d1d249d..c59aab100ed 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_winrt.cx
+++ b/3rdparty/bgfx/examples/common/entry/entry_winrt.cx
@@ -24,7 +24,7 @@ using namespace Windows::Graphics::Display;
#endif // BX_PLATFORM_WINRT
using namespace Platform;
-static char* g_emptyArgs[] = { "" };
+static const char* const g_emptyArgs[] = { "" };
static entry::WindowHandle g_defaultWindow = { 0 };
static entry::EventQueue g_eventQueue;
diff --git a/3rdparty/bgfx/examples/common/entry/entry_x11.cpp b/3rdparty/bgfx/examples/common/entry/entry_x11.cpp
index 78e4306eb2d..d65520f4f08 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_x11.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_x11.cpp
@@ -220,10 +220,10 @@ namespace entry
struct MainThreadEntry
{
- int m_argc;
- char** m_argv;
+ int32_t m_argc;
+ const char* const* m_argv;
- static int32_t threadFunc(void* _userData);
+ static int32_t threadFunc(bx::Thread* _thread, void* _userData);
};
struct Msg
@@ -343,7 +343,7 @@ namespace entry
m_mz = 0;
}
- int32_t run(int _argc, char** _argv)
+ int32_t run(int _argc, const char* const* _argv)
{
XInitThreads();
m_display = XOpenDisplay(0);
@@ -679,8 +679,10 @@ namespace entry
static Context s_ctx;
- int32_t MainThreadEntry::threadFunc(void* _userData)
+ int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData)
{
+ BX_UNUSED(_thread);
+
MainThreadEntry* self = (MainThreadEntry*)_userData;
int32_t result = main(self->m_argc, self->m_argv);
s_ctx.m_exit = true;
@@ -773,7 +775,7 @@ namespace entry
} // namespace entry
-int main(int _argc, char** _argv)
+int main(int _argc, const char* const* _argv)
{
using namespace entry;
return s_ctx.run(_argc, _argv);
diff --git a/3rdparty/bgfx/examples/common/example-glue.cpp b/3rdparty/bgfx/examples/common/example-glue.cpp
new file mode 100644
index 00000000000..61eba601b80
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/example-glue.cpp
@@ -0,0 +1,318 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "imgui/imgui.h"
+#include "entry/entry.h"
+#include "entry/cmd.h"
+#include <bx/string.h>
+#include <bx/timer.h>
+#include <bx/math.h>
+
+static bool bar(float _width, float _maxWidth, float _height, const ImVec4& _color)
+{
+ const ImGuiStyle& style = ImGui::GetStyle();
+
+ ImVec4 hoveredColor(
+ _color.x + _color.x*0.1f
+ , _color.y + _color.y*0.1f
+ , _color.z + _color.z*0.1f
+ , _color.w + _color.w*0.1f
+ );
+
+ ImGui::PushStyleColor(ImGuiCol_Button, _color);
+ ImGui::PushStyleColor(ImGuiCol_ButtonHovered, hoveredColor);
+ ImGui::PushStyleColor(ImGuiCol_ButtonActive, _color);
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 0.0f);
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, style.ItemSpacing.y) );
+
+ bool itemHovered = false;
+
+ ImGui::Button("", ImVec2(_width, _height) );
+ itemHovered |= ImGui::IsItemHovered();
+
+ ImGui::SameLine();
+ ImGui::InvisibleButton("", ImVec2(_maxWidth-_width, _height) );
+ itemHovered |= ImGui::IsItemHovered();
+
+ ImGui::PopStyleVar(2);
+ ImGui::PopStyleColor(3);
+
+ return itemHovered;
+}
+
+void showExampleDialog(entry::AppI* _app, const char* _errorText)
+{
+ char temp[1024];
+ bx::snprintf(temp, BX_COUNTOF(temp), "Example: %s", _app->getName() );
+
+ ImGui::SetNextWindowPos(
+ ImVec2(10.0f, 50.0f)
+ , ImGuiSetCond_FirstUseEver
+ );
+ ImGui::Begin(temp
+ , NULL
+ , ImVec2(256.0f, 200.0f)
+ );
+
+ ImGui::TextWrapped("%s", _app->getDescription() );
+ ImGui::Separator();
+
+ if (NULL != _errorText)
+ {
+ const int64_t now = bx::getHPCounter();
+ const int64_t freq = bx::getHPFrequency();
+ const float time = float(now%freq)/float(freq);
+
+ bool blink = time > 0.5f;
+
+ ImGui::PushStyleColor(ImGuiCol_Text
+ , blink
+ ? ImVec4(1.0, 0.0, 0.0, 1.0)
+ : ImVec4(1.0, 1.0, 1.0, 1.0)
+ );
+ ImGui::TextWrapped("%s", _errorText);
+ ImGui::Separator();
+ ImGui::PopStyleColor();
+ }
+
+ {
+ uint32_t num = entry::getNumApps();
+ const char** items = (const char**)alloca(num*sizeof(void*) );
+
+ uint32_t ii = 0;
+ int32_t current = 0;
+ for (entry::AppI* app = entry::getFirstApp(); NULL != app; app = app->getNext() )
+ {
+ if (app == _app)
+ {
+ current = ii;
+ }
+
+ items[ii++] = app->getName();
+ }
+
+ if (1 < num
+ && ImGui::Combo("Example", &current, items, num) )
+ {
+ char command[1024];
+ bx::snprintf(command, BX_COUNTOF(command), "app restart %s", items[current]);
+ cmdExec(command);
+ }
+
+ const bgfx::Caps* caps = bgfx::getCaps();
+ if (0 != (caps->supported & BGFX_CAPS_GRAPHICS_DEBUGGER) )
+ {
+ ImGui::SameLine();
+ ImGui::Text(ICON_FA_SNOWFLAKE_O);
+ }
+
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(3.0f, 3.0f) );
+
+ if (ImGui::Button(ICON_FA_REPEAT " Restart" ) )
+ {
+ cmdExec("app restart");
+ }
+
+ if (1 < entry::getNumApps() )
+ {
+ ImGui::SameLine();
+ if (ImGui::Button(ICON_KI_PREVIOUS " Prev") )
+ {
+ cmdExec("app restart prev");
+ }
+
+ ImGui::SameLine();
+ if (ImGui::Button(ICON_KI_NEXT " Next") )
+ {
+ cmdExec("app restart next");
+ }
+ }
+
+ ImGui::SameLine();
+ if (ImGui::Button(ICON_KI_EXIT " Exit") )
+ {
+ cmdExec("exit");
+ }
+
+ ImGui::PopStyleVar();
+ }
+
+#if 0
+ {
+ bgfx::RendererType::Enum supportedRenderers[bgfx::RendererType::Count];
+ uint8_t num = bgfx::getSupportedRenderers(BX_COUNTOF(supportedRenderers), supportedRenderers);
+
+ const bgfx::Caps* caps = bgfx::getCaps();
+
+ const char* items[bgfx::RendererType::Count];
+
+ int32_t current = 0;
+ for (uint8_t ii = 0; ii < num; ++ii)
+ {
+ items[ii] = bgfx::getRendererName(supportedRenderers[ii]);
+ if (supportedRenderers[ii] == caps->rendererType)
+ {
+ current = ii;
+ }
+ }
+
+ if (ImGui::Combo("Renderer", &current, items, num) )
+ {
+ cmdExec("app restart");
+ }
+
+ num = caps->numGPUs;
+ if (0 != num)
+ {
+ current = 0;
+ for (uint8_t ii = 0; ii < num; ++ii)
+ {
+ const bgfx::Caps::GPU& gpu = caps->gpu[ii];
+
+ items[ii] = gpu.vendorId == BGFX_PCI_ID_AMD ? "AMD"
+ : gpu.vendorId == BGFX_PCI_ID_INTEL ? "Intel"
+ : gpu.vendorId == BGFX_PCI_ID_NVIDIA ? "nVidia"
+ : "Unknown?"
+ ;
+
+ if (caps->vendorId == gpu.vendorId
+ && caps->deviceId == gpu.deviceId)
+ {
+ current = ii;
+ }
+ }
+
+ if (ImGui::Combo("GPU", &current, items, num) )
+ {
+ cmdExec("app restart");
+ }
+ }
+ }
+#endif // 0
+
+ const bgfx::Stats* stats = bgfx::getStats();
+ const double toMsCpu = 1000.0/stats->cpuTimerFreq;
+ const double toMsGpu = 1000.0/stats->gpuTimerFreq;
+ ImGui::Text("Frame %0.3f"
+ , double(stats->cpuTimeFrame)*toMsCpu
+ );
+
+ ImGui::Text("Submit CPU %0.3f, GPU %0.3f (L: %d)"
+ , double(stats->cpuTimeEnd - stats->cpuTimeBegin)*toMsCpu
+ , double(stats->gpuTimeEnd - stats->gpuTimeBegin)*toMsGpu
+ , stats->maxGpuLatency
+ );
+
+ if (-INT64_MAX != stats->gpuMemoryUsed)
+ {
+ char tmp0[64];
+ bx::prettify(tmp0, BX_COUNTOF(tmp0), stats->gpuMemoryUsed);
+
+ char tmp1[64];
+ bx::prettify(tmp1, BX_COUNTOF(tmp1), stats->gpuMemoryMax);
+
+ ImGui::Text("GPU mem: %s / %s", tmp0, tmp1);
+ }
+
+ if (0 != stats->numViews)
+ {
+ if (ImGui::CollapsingHeader(ICON_FA_CLOCK_O " Profiler") )
+ {
+ if (ImGui::BeginChild("##view_profiler", ImVec2(0.0f, 0.0f) ) )
+ {
+ ImGui::PushFont(ImGui::Font::Mono);
+
+ ImVec4 cpuColor(0.5f, 1.0f, 0.5f, 1.0f);
+ ImVec4 gpuColor(0.5f, 0.5f, 1.0f, 1.0f);
+
+ const float itemHeight = ImGui::GetTextLineHeightWithSpacing();
+ const float itemHeightWithSpacing = ImGui::GetItemsLineHeightWithSpacing();
+ const double toCpuMs = 1000.0/double(stats->cpuTimerFreq);
+ const double toGpuMs = 1000.0/double(stats->gpuTimerFreq);
+ const float scale = 3.0f;
+
+ if (ImGui::ListBoxHeader("Encoders", ImVec2(ImGui::GetWindowWidth(), stats->numEncoders*itemHeightWithSpacing) ) )
+ {
+ ImGuiListClipper clipper(stats->numEncoders, itemHeight);
+
+ while (clipper.Step() )
+ {
+ for (int32_t pos = clipper.DisplayStart; pos < clipper.DisplayEnd; ++pos)
+ {
+ const bgfx::EncoderStats& encoderStats = stats->encoderStats[pos];
+
+ ImGui::Text("%3d", pos);
+ ImGui::SameLine(64.0f);
+
+ const float maxWidth = 30.0f*scale;
+ const float cpuMs = float( (encoderStats.cpuTimeEnd-encoderStats.cpuTimeBegin)*toCpuMs);
+ const float cpuWidth = bx::fclamp(cpuMs*scale, 1.0f, maxWidth);
+
+ if (bar(cpuWidth, maxWidth, itemHeight, cpuColor) )
+ {
+ ImGui::SetTooltip("Encoder %d, CPU: %f [ms]"
+ , pos
+ , cpuMs
+ );
+ }
+ }
+ }
+
+ ImGui::ListBoxFooter();
+ }
+
+ ImGui::Separator();
+
+ if (ImGui::ListBoxHeader("Views", ImVec2(ImGui::GetWindowWidth(), stats->numViews*itemHeightWithSpacing) ) )
+ {
+ ImGuiListClipper clipper(stats->numViews, itemHeight);
+
+ while (clipper.Step() )
+ {
+ for (int32_t pos = clipper.DisplayStart; pos < clipper.DisplayEnd; ++pos)
+ {
+ const bgfx::ViewStats& viewStats = stats->viewStats[pos];
+
+ ImGui::Text("%3d %3d %s", pos, viewStats.view, viewStats.name);
+
+ const float maxWidth = 30.0f*scale;
+ const float cpuWidth = bx::fclamp(float(viewStats.cpuTimeElapsed*toCpuMs)*scale, 1.0f, maxWidth);
+ const float gpuWidth = bx::fclamp(float(viewStats.gpuTimeElapsed*toGpuMs)*scale, 1.0f, maxWidth);
+
+ ImGui::SameLine(64.0f);
+
+ if (bar(cpuWidth, maxWidth, itemHeight, cpuColor) )
+ {
+ ImGui::SetTooltip("View %d \"%s\", CPU: %f [ms]"
+ , pos
+ , viewStats.name
+ , viewStats.cpuTimeElapsed*toCpuMs
+ );
+ }
+
+ ImGui::SameLine();
+ if (bar(gpuWidth, maxWidth, itemHeight, gpuColor) )
+ {
+ ImGui::SetTooltip("View: %d \"%s\", GPU: %f [ms]"
+ , pos
+ , viewStats.name
+ , viewStats.gpuTimeElapsed*toGpuMs
+ );
+ }
+ }
+ }
+
+ ImGui::ListBoxFooter();
+ }
+
+ ImGui::PopFont();
+ }
+
+ ImGui::EndChild();
+ }
+ }
+
+ ImGui::End();
+}
diff --git a/3rdparty/bgfx/examples/common/font/font_manager.cpp b/3rdparty/bgfx/examples/common/font/font_manager.cpp
index fb44cad7593..4b3062ab884 100644
--- a/3rdparty/bgfx/examples/common/font/font_manager.cpp
+++ b/3rdparty/bgfx/examples/common/font/font_manager.cpp
@@ -446,7 +446,7 @@ struct FontManager::CachedFont
CachedFont()
: trueTypeFont(NULL)
{
- masterFontHandle.idx = bx::HandleAlloc::invalid;
+ masterFontHandle.idx = bx::kInvalidHandle;
}
FontInfo fontInfo;
@@ -510,7 +510,7 @@ FontManager::~FontManager()
TrueTypeHandle FontManager::createTtf(const uint8_t* _buffer, uint32_t _size)
{
uint16_t id = m_filesHandles.alloc();
- BX_CHECK(id != bx::HandleAlloc::invalid, "Invalid handle used");
+ BX_CHECK(id != bx::kInvalidHandle, "Invalid handle used");
m_cachedFiles[id].buffer = new uint8_t[_size];
m_cachedFiles[id].bufferSize = _size;
bx::memCopy(m_cachedFiles[id].buffer, _buffer, _size);
@@ -536,12 +536,12 @@ FontHandle FontManager::createFontByPixelSize(TrueTypeHandle _ttfHandle, uint32_
if (!ttf->init(m_cachedFiles[_ttfHandle.idx].buffer, m_cachedFiles[_ttfHandle.idx].bufferSize, _typefaceIndex, _pixelSize) )
{
delete ttf;
- FontHandle invalid = { bx::HandleAlloc::invalid };
+ FontHandle invalid = { bx::kInvalidHandle };
return invalid;
}
uint16_t fontIdx = m_fontHandles.alloc();
- BX_CHECK(fontIdx != bx::HandleAlloc::invalid, "Invalid handle used");
+ BX_CHECK(fontIdx != bx::kInvalidHandle, "Invalid handle used");
CachedFont& font = m_cachedFonts[fontIdx];
font.trueTypeFont = ttf;
@@ -549,7 +549,7 @@ FontHandle FontManager::createFontByPixelSize(TrueTypeHandle _ttfHandle, uint32_
font.fontInfo.fontType = int16_t(_fontType);
font.fontInfo.pixelSize = uint16_t(_pixelSize);
font.cachedGlyphs.clear();
- font.masterFontHandle.idx = bx::HandleAlloc::invalid;
+ font.masterFontHandle.idx = bx::kInvalidHandle;
FontHandle handle = { fontIdx };
return handle;
@@ -572,7 +572,7 @@ FontHandle FontManager::createScaledFontToPixelSize(FontHandle _baseFontHandle,
newFontInfo.underlinePosition = (newFontInfo.underlinePosition * newFontInfo.scale);
uint16_t fontIdx = m_fontHandles.alloc();
- BX_CHECK(fontIdx != bx::HandleAlloc::invalid, "Invalid handle used");
+ BX_CHECK(fontIdx != bx::kInvalidHandle, "Invalid handle used");
CachedFont& font = m_cachedFonts[fontIdx];
font.cachedGlyphs.clear();
diff --git a/3rdparty/bgfx/examples/common/font/fs_font_basic.bin.h b/3rdparty/bgfx/examples/common/font/fs_font_basic.bin.h
index 709bec24561..c2897caab43 100644
--- a/3rdparty/bgfx/examples/common/font/fs_font_basic.bin.h
+++ b/3rdparty/bgfx/examples/common/font/fs_font_basic.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_font_basic_glsl[553] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x09, 0x02, 0x00, 0x00, 0x76, // Color..........v
0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // arying highp vec
0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, // 4 v_color0;.vary
@@ -36,340 +36,365 @@ static const uint8_t fs_font_basic_glsl[553] =
0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ragColor = tmpva
0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r_4;.}...
};
-static const uint8_t fs_font_basic_spv[4053] =
+static const uint8_t fs_font_basic_spv[4459] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xc8, 0x0f, 0x03, 0x02, 0x23, 0x07, // FSH...........#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........Ta......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, // w...t...........
- 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, // main........g...
- 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x00, // BgfxSamplerCube.
- 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, // ....g.......m_sa
- 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, // mpler.......g...
- 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // ....m_texture...
- 0x05, 0x00, 0x0f, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, // ........bgfxText
- 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, // ureCube(struct-B
- 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, // gfxSamplerCube-p
- 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, // 1-tC11;vf3;.....
- 0x27, 0x0e, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, // '..._sampler....
- 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, // ........_coord..
- 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, // ....5...vec4_spl
- 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, // at(f1;..........
- 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // _x..........@mai
- 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // n(vf4;vf4;vf4;..
- 0x05, 0x00, 0x05, 0x00, 0x42, 0x24, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....B$..v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x78, 0x20, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, // ........x ..v_te
- 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc4, 0x41, 0x00, 0x00, // xcoord0......A..
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x05, 0x00, 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ....C...s_texCol
- 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // or..........s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, // xColorSampler...
- 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ........s_texCol
- 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // orTexture.......
- 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, // ....bgfx_VoidFra
- 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // g........T..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, // m...........colo
- 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2f, 0x31, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // r......./1..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x69, 0x6e, 0x64, 0x65, // m.......M...inde
- 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x60, 0x10, 0x00, 0x00, 0x72, 0x67, 0x62, 0x61, // x.......`...rgba
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, // ............alph
- 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // a........A..v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, // lor0........w...
- 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // v_color0........
- 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // .<..v_texcoord0.
- 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....t...v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0.........gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .G..param.......
- 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .U..param.......
- 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....param.......
- 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, // 0_......D...$Glo
- 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // bal.....D.......
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_viewRect......
- 0x44, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, // D.......u_viewTe
- 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // xel.....D.......
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x01, 0x00, 0x00, // u_view......D...
- 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, // ....u_invView...
- 0x06, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, // ....D.......u_pr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // oj......D.......
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_invProj.......
- 0x44, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // D.......u_viewPr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x44, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // oj......D.......
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // u_invViewProj...
- 0x06, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....D.......u_mo
- 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // del.....D.......
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, // u_modelView.....
- 0x44, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // D.......u_modelV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x01, 0x00, 0x00, // iewProj.....D...
- 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, // ....u_alphaRef4.
- 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......".......
- 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......!.......
- 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......".......
- 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......!.......
- 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...w...........
- 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // G...t...........
- 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
- 0x47, 0x00, 0x04, 0x00, 0x42, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // G...B.......@...
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...D.......#...
- 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....H...D.......
- 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, // #.......H...D...
- 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, // ........H...D...
- 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
- 0x44, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // D...............
- 0x48, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...D...........
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...D.......#...
- 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // `...H...D.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, // ........H...D...
- 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, // ........H...D...
- 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x44, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // D...............
- 0x48, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...D...........
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...D.......#...
- 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...D.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, // ........H...D...
- 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, // ........H...D...
- 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
- 0x44, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // D...............
- 0x48, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...D...........
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...D.......#...
- 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // `...H...D.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, // ........H...D...
- 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, // ........H...D...
- 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x44, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // D...............
- 0x48, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...D...........
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...D.......#...
- 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...D.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x01, 0x00, 0x00, // ........H...D...
- 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, // ........H...D...
- 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x44, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // D...............
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...D.......#...
- 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x44, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...G...D.......
- 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, // ........!.......
- 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x98, 0x00, 0x00, 0x00, // .... ...........
- 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, // ................
- 0x67, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // g........... ...
- 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // !.......g.......
- 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // ................
- 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, // ............!...
- 0xe8, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, // ........!.......
- 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
- 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, // !...............
- 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x21, 0x00, 0x06, 0x00, 0x91, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // !...............
- 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, // ........;...!...
- 0x43, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, // C....... ...y...
- 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, // ........;...y...
- 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, // ........ .......
- 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, // ........;.......
- 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // .......+.......
- 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
- 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, // ................
- 0x98, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, // ....+...........
- 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x69, 0x0b, 0x00, 0x00, // ....+.......i...
- 0x00, 0x00, 0x80, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, // ...@+...........
- 0x00, 0x00, 0x00, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, // ...?+...........
- 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x88, 0x03, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x16, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x05, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x88, 0x03, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, // ....+...........
- 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, // ....+...........
- 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // ....+...........
- 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, // ....+...........
- 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
- 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, // ....;.......w...
- 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, // ....;.......t...
- 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
- 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ....;...........
- 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........e.......
- 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....+.......j...
- 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x42, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // .......B...e...
- 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x44, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // j.......D.......
- 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ....e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x42, 0x03, 0x00, 0x00, // e...e...e...B...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, // e...e.......6...
- 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....Sa..;.......
- 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // .G......;.......
- 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // .U......;.......
- 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // ........=.......
- 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, // !C......=.......
- 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x67, 0x09, 0x00, 0x00, // .3......P...g...
- 0x12, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // . ..!C...3..>...
- 0x43, 0x12, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // C.... ..=.......
- 0xfa, 0x41, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .A..w...=.......
- 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, // .<..t...>....G..
- 0xfa, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, // .A..>....U...<..
- 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, // 9........&......
- 0xc9, 0x47, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .G...U......=...
- 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
- 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // ............8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0xe8, 0x03, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x21, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // ....7...!...'...
- 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
- 0xcd, 0x5b, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x03, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, // .[..A.......i$..
- 0x27, 0x0e, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, // '.......=.......
- 0x16, 0x31, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, // .1..i$..A...y...
- 0x54, 0x44, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // TD..'.......=...
- 0xfc, 0x01, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, // .....V..TD..V...
- 0xfe, 0x01, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, // .....B...1...V..
- 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, // =.......6.......
- 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa4, 0x51, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, // W........Q...B..
- 0x36, 0x1c, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xa4, 0x51, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // 6........Q..8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6.......5.......
- 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // ....7...........
- 0xf8, 0x00, 0x02, 0x00, 0x17, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .....>..=.......
- 0x18, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .S......=.......
- 0x5d, 0x4a, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ]J......=.......
- 0xfd, 0x34, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .4......=.......
- 0x10, 0x35, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // .5......P.......
- 0x3f, 0x3a, 0x00, 0x00, 0x18, 0x53, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, // ?:...S..]J...4..
- 0x10, 0x35, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x3f, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // .5......?:..8...
- 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0x91, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, // ....7.......B$..
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......x ..7...
- 0x9a, 0x02, 0x00, 0x00, 0xc4, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x19, 0x00, 0x00, // .....A..........
- 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........T......
- 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
- 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2f, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;......./1......
- 0x3b, 0x00, 0x04, 0x00, 0x05, 0x06, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;.......`.......
- 0x3e, 0x00, 0x03, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, // >....T......9...
- 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0xd5, 0x54, 0x00, 0x00, // ........5....T..
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2a, 0x46, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, // =.......*F..x ..
- 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xed, 0x44, 0x00, 0x00, 0x2a, 0x46, 0x00, 0x00, // O........D..*F..
- 0x2a, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // *F..............
- 0x3e, 0x00, 0x03, 0x00, 0x2f, 0x31, 0x00, 0x00, 0xed, 0x44, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, // >.../1...D..9...
- 0x1d, 0x00, 0x00, 0x00, 0xcf, 0x5f, 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, // ....._......C...
- 0x2f, 0x31, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, 0xcf, 0x5f, 0x00, 0x00, // /1..>........_..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x59, 0x4b, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, // A.......YK..x ..
- 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xea, 0x36, 0x00, 0x00, // ....=........6..
- 0x59, 0x4b, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x09, 0x3e, 0x00, 0x00, // YK...........>..
- 0xea, 0x36, 0x00, 0x00, 0x69, 0x0b, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .6..i...........
- 0x90, 0x24, 0x00, 0x00, 0x09, 0x3e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x04, 0x00, // .$...>......n...
- 0x0c, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x90, 0x24, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ....M....$..A...
- 0x8a, 0x02, 0x00, 0x00, 0x6b, 0x5e, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, // ....k^..........
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x2e, 0x00, 0x00, 0x6b, 0x5e, 0x00, 0x00, // =...........k^..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x94, 0x46, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, // A........F..`...
- 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x94, 0x46, 0x00, 0x00, 0x81, 0x2e, 0x00, 0x00, // ....>....F......
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x48, 0x46, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, // A.......HF......
- 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe5, 0x5f, 0x00, 0x00, // ....=........_..
- 0x48, 0x46, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x95, 0x46, 0x00, 0x00, // HF..A........F..
- 0x60, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x46, 0x00, 0x00, // `.......>....F..
- 0xe5, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x49, 0x46, 0x00, 0x00, // ._..A.......IF..
- 0x18, 0x0e, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
- 0xe6, 0x5f, 0x00, 0x00, 0x49, 0x46, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // ._..IF..A.......
- 0x96, 0x46, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .F..`.......>...
- 0x96, 0x46, 0x00, 0x00, 0xe6, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // .F..._..A.......
- 0x4a, 0x46, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // JF..........=...
- 0x0d, 0x00, 0x00, 0x00, 0xe7, 0x5f, 0x00, 0x00, 0x4a, 0x46, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ....._..JF..A...
- 0x8a, 0x02, 0x00, 0x00, 0x97, 0x46, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, // .....F..`.......
- 0x3e, 0x00, 0x03, 0x00, 0x97, 0x46, 0x00, 0x00, 0xe7, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >....F..._..A...
- 0x8a, 0x02, 0x00, 0x00, 0xfc, 0x45, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x4d, 0x15, 0x00, 0x00, // .....E..`...M...
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0xfc, 0x45, 0x00, 0x00, // =............E..
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x26, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, // =........&..B$..
- 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x93, 0x36, 0x00, 0x00, 0x1d, 0x26, 0x00, 0x00, // O........6...&..
- 0x1d, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .&..............
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4b, 0x5e, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, // A.......K^..B$..
- 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, // ....=........C..
- 0x4b, 0x5e, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x52, 0x5c, 0x00, 0x00, // K^..........R...
- 0x13, 0x43, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .C......Q.......
- 0x1e, 0x1d, 0x00, 0x00, 0x93, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // .....6......Q...
- 0x0d, 0x00, 0x00, 0x00, 0xdc, 0x22, 0x00, 0x00, 0x93, 0x36, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....."...6......
- 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x36, 0x60, 0x00, 0x00, 0x93, 0x36, 0x00, 0x00, // Q.......6`...6..
- 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0f, 0x50, 0x00, 0x00, // ....P........P..
- 0x1e, 0x1d, 0x00, 0x00, 0xdc, 0x22, 0x00, 0x00, 0x36, 0x60, 0x00, 0x00, 0x52, 0x5c, 0x00, 0x00, // ....."..6`..R...
- 0x3e, 0x00, 0x03, 0x00, 0xc4, 0x41, 0x00, 0x00, 0x0f, 0x50, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >....A...P......
- 0x38, 0x00, 0x01, 0x00, 0x00, // 8....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x5c, 0x11, 0x00, 0x00, 0x03, 0x02, // FSH.............
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x6f, 0x62, 0x00, 0x00, 0x00, 0x00, // #.........ob....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ..w...t.........
+ 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, // ................
+ 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x62, 0x67, // in............bg
+ 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x28, 0x73, 0x74, // fxTextureCube(st
+ 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ruct-BgfxSampler
+ 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, // Cube-p1-tC11;vf3
+ 0x3b, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, // ;.....~..._sampl
+ 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, // er.m_sampler....
+ 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, // ......_sampler.m
+ 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, // _texture........
+ 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, // .._coord......5.
+ 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, // ..vec4_splat(f1;
+ 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, // .........._x....
+ 0x07, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, // ......@main(vf4;
+ 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x6e, 0x62, // vf4;vf4;......nb
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ...A..v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // 0......J..gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x67, 0x09, // gData_0_......g.
+ 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, // ..BgfxSamplerCub
+ 0x65, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, // e.....g.......m_
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, // sampler.......g.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, // ......m_texture.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, // ..........flatte
+ 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, // nTemp.........s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // texColorSampler.
+ 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ..........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // olorTexture.....
+ 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // .m_sampler......
+ 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ..P...s_texColor
+ 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // .m_texture......
+ 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, // ......bgfx_VoidF
+ 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x70, 0x61, // rag........]..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, // ram...........co
+ 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x70, 0x61, // lor........9..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbf, 0x39, 0x00, 0x00, 0x70, 0x61, // ram........9..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x70, 0x61, // ram........9..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x69, 0x6e, // ram.......M...in
+ 0x64, 0x65, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x60, 0x10, 0x00, 0x00, 0x72, 0x67, // dex.......`...rg
+ 0x62, 0x61, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, // ba............al
+ 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, // pha........+..v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, // color0........w.
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ...<..v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // 0.....t...v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, // oord0.........gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, // _FragData_0_....
+ 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...U..param.....
+ 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...8..param.....
+ 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ......param.....
+ 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ......gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x72, 0x01, 0x00, 0x00, 0x24, 0x47, // a_0_......r...$G
+ 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, // lobal.....r.....
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, // ..u_viewRect....
+ 0x06, 0x00, 0x72, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..r.......u_view
+ 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x02, 0x00, // Texel.....r.....
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x01, // ..u_view......r.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, // ......u_invView.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......r.......u_
+ 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x01, 0x00, 0x00, 0x05, 0x00, // proj......r.....
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invProj.....
+ 0x06, 0x00, 0x72, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..r.......u_view
+ 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x72, 0x01, 0x00, 0x00, 0x07, 0x00, // Proj......r.....
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ..u_invViewProj.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......r.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x01, 0x00, 0x00, 0x09, 0x00, // model.....r.....
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, // ..u_modelView...
+ 0x07, 0x00, 0x72, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..r.......u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x01, // lViewProj.....r.
+ 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, // ......u_alphaRef
+ 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // 4.G.......".....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......!.....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......".....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......!.....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...w.........
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G...t.........
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xfb, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, // ..G...........@.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...r.......#.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x01, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x01, // ..#.......H...r.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, // ..........H...r.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..r.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...r.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...r.......#.
+ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x03, 0x00, // ..`...H...r.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x01, // ..........H...r.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, // ..........H...r.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..r.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...r.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...r.......#.
+ 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x01, // ..........H...r.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, // ..........H...r.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..r.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...r.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...r.......#.
+ 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x07, 0x00, // ..`...H...r.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x01, // ..........H...r.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, // ..........H...r.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..r.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...r.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...r.......#.
+ 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x01, // ..........H...r.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, // ..........H...r.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..r.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...r.......#.
+ 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x72, 0x01, 0x00, 0x00, 0x02, 0x00, // .. ...G...r.....
+ 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, // ..........!.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, // ..y.............
+ 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x98, 0x00, // ...... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x17, 0x00, // ................
+ 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, // ................
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x06, 0x00, 0x2b, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x15, 0x03, // ..+.......y.....
+ 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......!.........
+ 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x91, 0x00, 0x00, 0x00, 0x08, 0x00, // ......!.........
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, // ................
+ 0x04, 0x00, 0x67, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, // ..g........... .
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x20, 0x00, // ..!.......g... .
+ 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, // ..z...........;.
+ 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // ..z........... .
+ 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, // ..{...........;.
+ 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, // ..{.............
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, // ...... .......+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, // ......P.......+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, // ................
+ 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
+ 0x00, 0x00, 0x69, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..i......@+.....
+ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .........?+.....
+ 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xc9, 0x03, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x46, 0x06, // .......... ...F.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xc9, 0x03, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // ..........+.....
+ 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // ..........+.....
+ 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
+ 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // ..........+.....
+ 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
+ 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // .......... .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..w.......;.....
+ 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..t....... .....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
+ 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // ..........+.....
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xfb, 0x07, // ..j... .........
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x72, 0x01, // ..e...j.......r.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0xfb, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......e...e.....
+ 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..!...........;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......8......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, // ......!C......=.
+ 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......3......P.
+ 0x05, 0x00, 0x67, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, // ..g...^ ..!C...3
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, // ..>.......^ ..A.
+ 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, // ..y....V........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, // ..=............V
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, // ..>...........A.
+ 0x05, 0x00, 0x15, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, // .......@........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, // ..=............@
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, // ..>...P.......=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......+..w...=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, // .......<..t...>.
+ 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, // ...U...+..>....8
+ 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, // ...<..9........&
+ 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, // .......U...8....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, // ..=.............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, // ..>.............
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd5, 0x11, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, // ......+...7...y.
+ 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x15, 0x03, 0x00, 0x00, 0xf7, 0x0d, // ..~...7.........
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, // ..7.............
+ 0x02, 0x00, 0xca, 0x1c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0xc6, 0x19, // ......=.........
+ 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xca, 0x48, // ......=........H
+ 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xf7, 0x3e, // ..~...V........>
+ 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // .......H..=.....
+ 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...$......W.....
+ 0x00, 0x00, 0x82, 0x59, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xfe, 0x00, // ...Y...>...$....
+ 0x02, 0x00, 0x82, 0x59, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...Y..8...6.....
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, // ..5...........7.
+ 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, // ..............._
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, // ..=........[....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, // ..=.......%S....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, // ..=........=....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, // ..=........=....
+ 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, // ..P.......V[...[
+ 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, // ..%S...=...=....
+ 0x02, 0x00, 0x56, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, // ..V[..8...6.....
+ 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x37, 0x00, // ..............7.
+ 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ......nb..7.....
+ 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8c, 0x4a, // ...A..7........J
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // .......S..;.....
+ 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ...]......;.....
+ 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, // ..........;...y.
+ 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, // ...9......;.....
+ 0x00, 0x00, 0xbf, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, // ...9......;.....
+ 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x46, 0x06, // ...9......;...F.
+ 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5d, // ..`.......>....]
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, // ......9.........
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ..5....]..=.....
+ 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x39, // ..#A......>....9
+ 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x83, 0x2c, // ..#A..=........,
+ 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbf, 0x39, 0x00, 0x00, 0x83, 0x2c, // ..P...>....9...,
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x19, 0x21, 0x00, 0x00, 0x8f, 0x41, // ..=........!...A
+ 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa0, 0x37, 0x00, 0x00, 0x19, 0x21, // ..O........7...!
+ 0x00, 0x00, 0x19, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, // ...!............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, 0x00, 0x00, 0xa0, 0x37, 0x00, 0x00, 0x39, 0x00, // ..>....9...7..9.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x1e, 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, 0xbe, 0x39, // ...............9
+ 0x00, 0x00, 0xbf, 0x39, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, // ...9...9..>.....
+ 0x00, 0x00, 0x18, 0x1e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xe8, 0x3a, // ......A........:
+ 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ...A......=.....
+ 0x00, 0x00, 0xb2, 0x3f, 0x00, 0x00, 0xe8, 0x3a, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, // ...?...:........
+ 0x00, 0x00, 0xd1, 0x46, 0x00, 0x00, 0xb2, 0x3f, 0x00, 0x00, 0x69, 0x0b, 0x00, 0x00, 0x81, 0x00, // ...F...?..i.....
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x58, 0x2d, 0x00, 0x00, 0xd1, 0x46, 0x00, 0x00, 0xfc, 0x00, // ......X-...F....
+ 0x00, 0x00, 0x6e, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x58, 0x2d, // ..n.......M...X-
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xfa, 0x4d, 0x00, 0x00, 0x18, 0x0e, // ..A........M....
+ 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x37, // ......=.......I7
+ 0x00, 0x00, 0xfa, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x5c, 0x4f, // ...M..A........O
+ 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5c, 0x4f, // ..`.......>....O
+ 0x00, 0x00, 0x49, 0x37, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd7, 0x35, // ..I7..A........5
+ 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........=.....
+ 0x00, 0x00, 0x2e, 0x1e, 0x00, 0x00, 0xd7, 0x35, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // .......5..A.....
+ 0x00, 0x00, 0x5d, 0x4f, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..]O..`.......>.
+ 0x03, 0x00, 0x5d, 0x4f, 0x00, 0x00, 0x2e, 0x1e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ..]O......A.....
+ 0x00, 0x00, 0xd8, 0x35, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...5..........=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2f, 0x1e, 0x00, 0x00, 0xd8, 0x35, 0x00, 0x00, 0x41, 0x00, // ....../....5..A.
+ 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x5e, 0x4f, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x11, 0x0a, // ......^O..`.....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5e, 0x4f, 0x00, 0x00, 0x2f, 0x1e, 0x00, 0x00, 0x41, 0x00, // ..>...^O../...A.
+ 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd9, 0x35, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x13, 0x0a, // .......5........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x30, 0x1e, 0x00, 0x00, 0xd9, 0x35, // ..=.......0....5
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x5f, 0x4f, 0x00, 0x00, 0x60, 0x10, // ..A......._O..`.
+ 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x4f, 0x00, 0x00, 0x30, 0x1e, // ......>..._O..0.
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x8b, 0x35, 0x00, 0x00, 0x60, 0x10, // ..A........5..`.
+ 0x00, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, // ..M...=.........
+ 0x00, 0x00, 0x8b, 0x35, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe5, 0x2e, // ...5..=.........
+ 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5b, 0x3f, // ..nb..O.......[?
+ 0x00, 0x00, 0xe5, 0x2e, 0x00, 0x00, 0xe5, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x94, 0x1c, // ......A.........
+ 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..nb......=.....
+ 0x00, 0x00, 0xa2, 0x32, 0x00, 0x00, 0x94, 0x1c, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, // ...2............
+ 0x00, 0x00, 0x9b, 0x1a, 0x00, 0x00, 0xa2, 0x32, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x51, 0x00, // .......2......Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe6, 0x25, 0x00, 0x00, 0x5b, 0x3f, 0x00, 0x00, 0x00, 0x00, // .......%..[?....
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa4, 0x2b, 0x00, 0x00, 0x5b, 0x3f, // ..Q........+..[?
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x4f, // ......Q........O
+ 0x00, 0x00, 0x5b, 0x3f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, // ..[?......P.....
+ 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xe6, 0x25, 0x00, 0x00, 0xa4, 0x2b, 0x00, 0x00, 0xc5, 0x4f, // ...?...%...+...O
+ 0x00, 0x00, 0x9b, 0x1a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x9e, 0x3f, // ......>....J...?
+ 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ......8....
};
-static const uint8_t fs_font_basic_dx9[454] =
+static const uint8_t fs_font_basic_dx9[456] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xa8, 0x01, 0x00, 0x03, 0xff, // Color0..........
- 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
- 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .<.......s_texCo
- 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // lor.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, // 0.1..Q..........
- 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x51, 0x00, 0x00, // @...?.......?Q..
- 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, // ................
- 0xc0, 0x00, 0x00, 0x40, 0xc0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, // ...@............
- 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, // ................
- 0x80, 0x01, 0x00, 0xff, 0x90, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x55, 0xa0, 0x13, 0x00, 0x00, // ...........U....
- 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, // .........X......
- 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xff, 0xa0, 0x02, 0x00, 0x00, // ...U............
- 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x81, 0x58, 0x00, 0x00, // ...........U.X..
- 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xaa, // ................
- 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, // ...............U
- 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, // ................
- 0xa0, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x8c, 0x00, 0x00, 0xff, // .X..............
- 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, // .....B..........
- 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0xc6, // ................
- 0x80, 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0x00, // ................
- 0x80, 0x00, 0x00, 0xff, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, // ................
- 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ......
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xa8, 0x01, 0x00, 0x00, 0x00, // Color0..........
+ 0x03, 0xff, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ...L...0........
+ 0x00, 0x02, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, // ...<.......s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, // Color...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, // 10.1..Q........
+ 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x51, // ..@...?.......?Q
+ 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, // ................
+ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x40, 0xc0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, // .....@..........
+ 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x01, 0x00, 0xff, 0x90, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x55, 0xa0, 0x13, // .............U..
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, // ...........X....
+ 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xff, 0xa0, 0x02, // .....U..........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x81, 0x58, // .............U.X
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xaa, 0xa0, 0x00, // ................
+ 0x00, 0xaa, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, // ................
+ 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, // .U..............
+ 0x00, 0xe4, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x8c, 0x00, // ...X............
+ 0x00, 0xff, 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x01, // .......B........
+ 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, // ................
+ 0x00, 0xc6, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x08, 0x80, 0x00, // ................
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0xff, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, 0x80, 0x00, // ................
+ 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ........
};
-static const uint8_t fs_font_basic_dx11[617] =
+static const uint8_t fs_font_basic_dx11[619] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x48, 0x02, 0x44, 0x58, 0x42, // Color0.....H.DXB
- 0x43, 0xdb, 0x69, 0x11, 0xe0, 0xc0, 0xf9, 0x23, 0x5b, 0x4d, 0x65, 0x8f, 0xa1, 0x99, 0x34, 0xff, // C.i....#[Me...4.
- 0x76, 0x01, 0x00, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // v....H.......,..
- 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, // .........ISGNl..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........b......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, // .SV_POSITION.COL
- 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, // OR.TEXCOORD..OSG
- 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // N,........... ..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
- 0xab, 0x53, 0x48, 0x44, 0x52, 0x6c, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, // .SHDRl...@...[..
- 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, // .Z....`......X0.
- 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, // ..p......UU..b..
- 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, // .........b......
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....e.... .....
- 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // .h.......i......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, // .........E......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, // .....F.......F~.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // ......`......6..
- 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, // ..0 .........*..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, // .....6....0 ....
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .............6..
- 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, // ..0 ............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, // .....6....0 ....
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, // .....:.......2..
- 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, // .........:......
- 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // ..@.....@.@.....
- 0x3f, 0x1b, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, // ?...............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .....6..........
- 0x00, 0x0a, 0x30, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ..0 ............
- 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, // .8.... .........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .....:.......6..
- 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x01, 0x00, 0x00, // .r ......F......
- 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // .>.......
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x48, 0x02, 0x00, 0x00, 0x44, // Color0.....H...D
+ 0x58, 0x42, 0x43, 0xdb, 0x69, 0x11, 0xe0, 0xc0, 0xf9, 0x23, 0x5b, 0x4d, 0x65, 0x8f, 0xa1, 0x99, // XBC.i....#[Me...
+ 0x34, 0xff, 0x76, 0x01, 0x00, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // 4.v....H.......,
+ 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, // ...........ISGNl
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, // ...........b....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, // ...SV_POSITION.C
+ 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, // OLOR.TEXCOORD..O
+ 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, // .......SV_TARGET
+ 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x6c, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x5b, // ...SHDRl...@...[
+ 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, // ...Z....`......X
+ 0x30, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, // 0...p......UU..b
+ 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, // ...........b....
+ 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x04, 0x00, // ...h.......i....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, // ...........E....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, // ~.......`......6
+ 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, // ....0 .........*
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, // .......6....0 ..
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, // ...............6
+ 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, // ....0 ..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, // .......6....0 ..
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, // .......:.......2
+ 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x02, // ...........:....
+ 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x01, 0x40, 0x00, 0x00, 0x00, // ....@.....@.@...
+ 0x00, 0x00, 0x3f, 0x1b, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, // ..?.............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, // .......6........
+ 0x00, 0x00, 0x00, 0x0a, 0x30, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, // ....0 ..........
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, // ...8.... .......
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, // .......:.......6
+ 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x01, // ...r ......F....
+ 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ...>.......
};
static const uint8_t fs_font_basic_mtl[937] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x9a, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x9a, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/font/fs_font_distance_field.bin.h b/3rdparty/bgfx/examples/common/font/fs_font_distance_field.bin.h
index 91090bc5977..5374f93ca71 100644
--- a/3rdparty/bgfx/examples/common/font/fs_font_distance_field.bin.h
+++ b/3rdparty/bgfx/examples/common/font/fs_font_distance_field.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_font_distance_field_glsl[1019] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xdb, 0x03, 0x00, 0x00, 0x76, // Color..........v
0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // arying highp vec
0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, // 4 v_color0;.vary
@@ -65,408 +65,433 @@ static const uint8_t fs_font_distance_field_glsl[1019] =
0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, // _FragColor = tmp
0x76, 0x61, 0x72, 0x5f, 0x39, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // var_9;.}...
};
-static const uint8_t fs_font_distance_field_spv[4425] =
+static const uint8_t fs_font_distance_field_spv[4831] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x3c, 0x11, 0x03, 0x02, 0x23, 0x07, // FSH.......<...#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........Ta......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, // w...t...........
- 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, // main........g...
- 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x00, // BgfxSamplerCube.
- 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, // ....g.......m_sa
- 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, // mpler.......g...
- 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // ....m_texture...
- 0x05, 0x00, 0x0f, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, // ........bgfxText
- 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, // ureCube(struct-B
- 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, // gfxSamplerCube-p
- 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, // 1-tC11;vf3;.....
- 0x27, 0x0e, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, // '..._sampler....
- 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, // ........_coord..
- 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, // ....5...vec4_spl
- 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, // at(f1;..........
- 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // _x..........@mai
- 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // n(vf4;vf4;vf4;..
- 0x05, 0x00, 0x05, 0x00, 0x42, 0x24, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....B$..v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x78, 0x20, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, // ........x ..v_te
- 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc4, 0x41, 0x00, 0x00, // xcoord0......A..
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x05, 0x00, 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ....C...s_texCol
- 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // or..........s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, // xColorSampler...
- 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ........s_texCol
- 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // orTexture.......
- 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, // ....bgfx_VoidFra
- 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // g........T..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, // m...........colo
- 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2f, 0x31, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // r......./1..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x69, 0x6e, 0x64, 0x65, // m.......M...inde
- 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x60, 0x10, 0x00, 0x00, 0x72, 0x67, 0x62, 0x61, // x.......`...rgba
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x81, 0x11, 0x00, 0x00, 0x64, 0x69, 0x73, 0x74, // ............dist
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xcf, 0x16, 0x00, 0x00, 0x64, 0x78, 0x00, 0x00, // ............dx..
- 0x05, 0x00, 0x03, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x64, 0x79, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // ........dy......
- 0xc9, 0x10, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, // ....w...........
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xfa, 0x41, 0x00, 0x00, // alpha........A..
- 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // v_color0........
- 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // w...v_color0....
- 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // .....<..v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, // rd0.....t...v_te
- 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, // xcoord0.........
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....G..param...
- 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....U..param...
- 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // ........param...
- 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // ........gl_FragD
- 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x06, 0x00, 0x00, // ata_0_..........
- 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1f, 0x06, 0x00, 0x00, // $Global.........
- 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, // ....u_viewRect..
- 0x06, 0x00, 0x06, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, // ewTexel.........
- 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_view......
- 0x1f, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
- 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // w...............
- 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1f, 0x06, 0x00, 0x00, // u_proj..........
- 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // ....u_invProj...
- 0x06, 0x00, 0x06, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x1f, 0x06, 0x00, 0x00, // ewProj..........
- 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ....u_invViewPro
- 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // j...............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1f, 0x06, 0x00, 0x00, // u_model.........
- 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, // ....u_modelView.
- 0x06, 0x00, 0x07, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
- 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, // delViewProj.....
- 0x1f, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ........u_alphaR
- 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // ef4.G......."...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // ....G.......!...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // ....G......."...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // ....G.......!...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...w.......
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...t.......
- 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x37, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....G...7.......
- 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...H...........
- 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, // #.......H.......
- 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ....#.......H...
- 0x1f, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x1f, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ........#... ...
- 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, // #...`...H.......
- 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x1f, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x1f, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, // #.......H.......
- 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x1f, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x1f, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, // ........#... ...
- 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, // #...`...H.......
- 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x1f, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x1f, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, // #.......H.......
- 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x1f, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x1f, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x1f, 0x06, 0x00, 0x00, // #... ...G.......
- 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, // ............!...
- 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, // ................
- 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, // ........ .......
- 0x98, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x1e, 0x00, 0x04, 0x00, 0x67, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, // ....g...........
- 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, // ...!.......g...
- 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
- 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................
- 0x21, 0x00, 0x05, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // !...........!...
- 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....!...........
- 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x91, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....!...........
- 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x21, 0x00, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // !...C....... ...
- 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // y...........;...
- 0x79, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // y........... ...
- 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x15, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // ................
- 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
- 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, // ................
- 0xfe, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........+.......
- 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // .......+.......
- 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........+.......
- 0x69, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // i......@+.......
- 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // .......?+.......
- 0x16, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x88, 0x03, 0x00, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x05, 0x06, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x88, 0x03, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // ........+.......
- 0x10, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // ........+.......
- 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
- 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // ........+.......
- 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
- 0x14, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........+.......
- 0xf7, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // .......A .......
- 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // ........;.......
- 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // w.......;.......
- 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, // t....... .......
- 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, // ........;.......
- 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
- 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // ........+.......
- 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x37, 0x00, 0x00, 0x00, // j... .......7...
- 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x1f, 0x06, 0x00, 0x00, // e...j...........
- 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ........e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x37, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // 7...e...e.......
- 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ........Sa..;...
- 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....G......;...
- 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....U......;...
- 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ............=...
- 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....!C......=...
- 0x98, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, // .....3......P...
- 0x67, 0x09, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, // g.... ..!C...3..
- 0x3e, 0x00, 0x03, 0x00, 0x43, 0x12, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...C.... ..=...
- 0x1d, 0x00, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....A..w...=...
- 0x1d, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....<..t...>...
- 0xc9, 0x47, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, // .G...A..>....U..
- 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, // .<..9........&..
- 0x82, 0x0d, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // .....G...U......
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // =...............
- 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >...............
- 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, // 8...6...........
- 0x00, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x21, 0x00, 0x00, 0x00, // ........7...!...
- 0x27, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, // '...7...........
- 0xf8, 0x00, 0x02, 0x00, 0xcd, 0x5b, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x03, 0x00, 0x00, // .....[..A.......
- 0x69, 0x24, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // i$..'.......=...
- 0x98, 0x00, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .....1..i$..A...
- 0x79, 0x04, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // y...TD..'.......
- 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, // =........V..TD..
- 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, // V........B...1..
- 0x9b, 0x56, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, // .V..=.......6...
- 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa4, 0x51, 0x00, 0x00, // ....W........Q..
- 0xc9, 0x42, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xa4, 0x51, 0x00, 0x00, // .B..6........Q..
- 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, // 8...6.......5...
- 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........7.......
- 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x17, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .........>..=...
- 0x0d, 0x00, 0x00, 0x00, 0x18, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....S......=...
- 0x0d, 0x00, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....]J......=...
- 0x0d, 0x00, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....4......=...
- 0x0d, 0x00, 0x00, 0x00, 0x10, 0x35, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, // .....5......P...
- 0x1d, 0x00, 0x00, 0x00, 0x3f, 0x3a, 0x00, 0x00, 0x18, 0x53, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, // ....?:...S..]J..
- 0xfd, 0x34, 0x00, 0x00, 0x10, 0x35, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x3f, 0x3a, 0x00, 0x00, // .4...5......?:..
- 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, // 8...6...........
- 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........7.......
- 0x42, 0x24, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, // B$..7.......x ..
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc4, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........A......
- 0xb2, 0x19, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd5, 0x54, 0x00, 0x00, // ....;........T..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, // ....;...........
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2f, 0x31, 0x00, 0x00, // ....;......./1..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x05, 0x06, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, // ....;.......`...
- 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....>....T......
- 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, // 9...........5...
- 0xd5, 0x54, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2a, 0x46, 0x00, 0x00, // .T..=.......*F..
- 0x78, 0x20, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xed, 0x44, 0x00, 0x00, // x ..O........D..
- 0x2a, 0x46, 0x00, 0x00, 0x2a, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // *F..*F..........
- 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2f, 0x31, 0x00, 0x00, 0xed, 0x44, 0x00, 0x00, // ....>.../1...D..
- 0x39, 0x00, 0x06, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcf, 0x5f, 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, // 9........_......
- 0x43, 0x12, 0x00, 0x00, 0x2f, 0x31, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, // C.../1..>.......
- 0xcf, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x59, 0x4b, 0x00, 0x00, // ._..A.......YK..
- 0x78, 0x20, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // x ......=.......
- 0xea, 0x36, 0x00, 0x00, 0x59, 0x4b, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .6..YK..........
- 0x09, 0x3e, 0x00, 0x00, 0xea, 0x36, 0x00, 0x00, 0x69, 0x0b, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, // .>...6..i.......
- 0x0d, 0x00, 0x00, 0x00, 0x90, 0x24, 0x00, 0x00, 0x09, 0x3e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, // .....$...>......
- 0x6e, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x90, 0x24, 0x00, 0x00, // n.......M....$..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6b, 0x5e, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, // A.......k^......
- 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x2e, 0x00, 0x00, // ....=...........
- 0x6b, 0x5e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x94, 0x46, 0x00, 0x00, // k^..A........F..
- 0x60, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x94, 0x46, 0x00, 0x00, // `.......>....F..
- 0x81, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x48, 0x46, 0x00, 0x00, // ....A.......HF..
- 0x18, 0x0e, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
- 0xe5, 0x5f, 0x00, 0x00, 0x48, 0x46, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // ._..HF..A.......
- 0x95, 0x46, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .F..`.......>...
- 0x95, 0x46, 0x00, 0x00, 0xe5, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // .F..._..A.......
- 0x49, 0x46, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // IF..........=...
- 0x0d, 0x00, 0x00, 0x00, 0xe6, 0x5f, 0x00, 0x00, 0x49, 0x46, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ....._..IF..A...
- 0x8a, 0x02, 0x00, 0x00, 0x96, 0x46, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....F..`.......
- 0x3e, 0x00, 0x03, 0x00, 0x96, 0x46, 0x00, 0x00, 0xe6, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >....F..._..A...
- 0x8a, 0x02, 0x00, 0x00, 0x4a, 0x46, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, // ....JF..........
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe7, 0x5f, 0x00, 0x00, 0x4a, 0x46, 0x00, 0x00, // =........_..JF..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x97, 0x46, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, // A........F..`...
- 0x14, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x97, 0x46, 0x00, 0x00, 0xe7, 0x5f, 0x00, 0x00, // ....>....F..._..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xfc, 0x45, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, // A........E..`...
- 0x4d, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x11, 0x00, 0x00, // M...=...........
- 0xfc, 0x45, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa7, 0x30, 0x00, 0x00, // .E..=........0..
- 0x78, 0x20, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xbb, 0x1d, 0x00, 0x00, // x ..O...........
- 0xa7, 0x30, 0x00, 0x00, 0xa7, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .0...0..........
- 0x02, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x63, 0x23, 0x00, 0x00, // ............c#..
- 0xbb, 0x1d, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xcf, 0x16, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x63, 0x23, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....B...c#..=...
- 0x1d, 0x00, 0x00, 0x00, 0xca, 0x51, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, // .....Q..x ..O...
- 0x18, 0x00, 0x00, 0x00, 0x47, 0x1e, 0x00, 0x00, 0xca, 0x51, 0x00, 0x00, 0xca, 0x51, 0x00, 0x00, // ....G....Q...Q..
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, // ................
- 0x18, 0x00, 0x00, 0x00, 0xe1, 0x57, 0x00, 0x00, 0x47, 0x1e, 0x00, 0x00, 0xd0, 0x00, 0x04, 0x00, // .....W..G.......
- 0x18, 0x00, 0x00, 0x00, 0x42, 0x58, 0x00, 0x00, 0xe1, 0x57, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, // ....BX...W......
- 0x0d, 0x00, 0x00, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, // ............B...
- 0x42, 0x58, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x87, 0x45, 0x00, 0x00, // BX...........E..
- 0xcf, 0x16, 0x00, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0xc9, 0x10, 0x00, 0x00, 0xf7, 0x0a, 0x00, 0x00, 0x87, 0x45, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, // .........E......
- 0x0d, 0x00, 0x00, 0x00, 0x23, 0x44, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xc9, 0x10, 0x00, 0x00, // ....#D..........
- 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6b, 0x1f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, // ........k.......
- 0xc9, 0x10, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x23, 0x44, 0x00, 0x00, 0x6b, 0x1f, 0x00, 0x00, // ....1...#D..k...
- 0x81, 0x11, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa5, 0x4a, 0x00, 0x00, // ....=........J..
- 0x42, 0x24, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x97, 0x49, 0x00, 0x00, // B$..O........I..
- 0xa5, 0x4a, 0x00, 0x00, 0xa5, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .J...J..........
- 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4b, 0x5e, 0x00, 0x00, // ....A.......K^..
- 0x42, 0x24, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // B$......=.......
- 0x13, 0x43, 0x00, 0x00, 0x4b, 0x5e, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .C..K^..........
- 0x52, 0x5c, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // R....C......Q...
- 0x0d, 0x00, 0x00, 0x00, 0x1e, 0x1d, 0x00, 0x00, 0x97, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........I......
- 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xdc, 0x22, 0x00, 0x00, 0x97, 0x49, 0x00, 0x00, // Q........"...I..
- 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x36, 0x60, 0x00, 0x00, // ....Q.......6`..
- 0x97, 0x49, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // .I......P.......
- 0x0f, 0x50, 0x00, 0x00, 0x1e, 0x1d, 0x00, 0x00, 0xdc, 0x22, 0x00, 0x00, 0x36, 0x60, 0x00, 0x00, // .P......."..6`..
- 0x52, 0x5c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc4, 0x41, 0x00, 0x00, 0x0f, 0x50, 0x00, 0x00, // R...>....A...P..
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....8....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xd0, 0x12, 0x00, 0x00, 0x03, 0x02, // FSH.............
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x6f, 0x62, 0x00, 0x00, 0x00, 0x00, // #.........ob....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ..w...t.........
+ 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, // ................
+ 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x62, 0x67, // in............bg
+ 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x28, 0x73, 0x74, // fxTextureCube(st
+ 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ruct-BgfxSampler
+ 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, // Cube-p1-tC11;vf3
+ 0x3b, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, // ;.....~..._sampl
+ 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, // er.m_sampler....
+ 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, // ......_sampler.m
+ 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, // _texture........
+ 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, // .._coord......5.
+ 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, // ..vec4_splat(f1;
+ 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, // .........._x....
+ 0x07, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, // ......@main(vf4;
+ 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x6e, 0x62, // vf4;vf4;......nb
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ...A..v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // 0......J..gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x67, 0x09, // gData_0_......g.
+ 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, // ..BgfxSamplerCub
+ 0x65, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, // e.....g.......m_
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, // sampler.......g.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, // ......m_texture.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, // ..........flatte
+ 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, // nTemp.........s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // texColorSampler.
+ 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ..........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // olorTexture.....
+ 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // .m_sampler......
+ 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ..P...s_texColor
+ 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // .m_texture......
+ 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, // ......bgfx_VoidF
+ 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x70, 0x61, // rag........]..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, // ram...........co
+ 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x70, 0x61, // lor........9..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbf, 0x39, 0x00, 0x00, 0x70, 0x61, // ram........9..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x70, 0x61, // ram........9..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x69, 0x6e, // ram.......M...in
+ 0x64, 0x65, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x60, 0x10, 0x00, 0x00, 0x72, 0x67, // dex.......`...rg
+ 0x62, 0x61, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x81, 0x11, 0x00, 0x00, 0x64, 0x69, // ba............di
+ 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xcf, 0x16, 0x00, 0x00, 0x64, 0x78, // st............dx
+ 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x64, 0x79, 0x00, 0x00, 0x05, 0x00, // ..........dy....
+ 0x03, 0x00, 0xc9, 0x10, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, // ......w.........
+ 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, // ..alpha........+
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..w...v_color0..
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // .......<..v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, // oord0.....t...v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, // texcoord0.......
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......U..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......8..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // ..........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4d, 0x06, // gData_0_......M.
+ 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, // ..$Global.....M.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......M.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x4d, 0x06, // viewTexel.....M.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
+ 0x06, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..M.......u_invV
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x04, 0x00, // iew.......M.....
+ 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, // ..u_proj......M.
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......M.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x4d, 0x06, // viewProj......M.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x08, 0x00, // roj.......M.....
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, // ..u_model.....M.
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.....M.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
+ 0x06, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..M.......u_alph
+ 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, // aRef4.G.......".
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, // ......G.......!.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, // ......G.......".
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, // ......G.......!.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, // ......G...w.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G...t.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, // ......G.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf0, 0x04, 0x00, 0x00, 0x06, 0x00, // ......G.........
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x00, 0x00, // ..@...H...M.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, // ..#.......H...M.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..M...........H.
+ 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..M.......#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...M.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x03, 0x00, // ......H...M.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x03, 0x00, // ......H...M.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, // ..#...`...H...M.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..M...........H.
+ 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..M.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...M.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x05, 0x00, // ......H...M.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x05, 0x00, // ......H...M.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, // ..#.......H...M.
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..M...........H.
+ 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..M.......#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...M.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x07, 0x00, // ......H...M.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x07, 0x00, // ......H...M.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, // ..#...`...H...M.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..M...........H.
+ 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..M.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...M.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x09, 0x00, // ......H...M.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x09, 0x00, // ......H...M.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, // ..#.......H...M.
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..M...........H.
+ 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..M.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...M.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x0b, 0x00, // ......H...M.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x4d, 0x06, // ..#... ...G...M.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, // .. ...y.........
+ 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, // .......... .....
+ 0x09, 0x00, 0x98, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x98, 0x00, // .. .............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x2b, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, // ..!...+.......y.
+ 0x00, 0x00, 0x15, 0x03, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, // ..........!.....
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x91, 0x00, // ..........!.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, // ................
+ 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x67, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x98, 0x00, // ......g.........
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x67, 0x09, // .. ...!.......g.
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, // .. ...z.........
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, // ..;...z.........
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, // ..;.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, // .. ...{.........
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, // ..;...{.........
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x98, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, // ..;.......P.....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
+ 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, // ................
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, // ...... .......+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x69, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x2b, 0x00, // ......i......@+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2b, 0x00, // .............?+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, // ................
+ 0x04, 0x00, 0xc9, 0x03, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x46, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xc9, 0x03, 0x00, 0x00, 0x2b, 0x00, // ..F...........+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf7, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, // .............A .
+ 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, // ......w.......;.
+ 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, // ......t....... .
+ 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, // ................
+ 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..e...........+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, // ......j... .....
+ 0x04, 0x00, 0xf0, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, // ......e...j.....
+ 0x0e, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, // ..M...........e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf0, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e.......e...e.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, // ......6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, // ..............Sa
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, // ..;...!.........
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, // ..;........U....
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, // ..;........8....
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, // ..;.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, // ..=.......!C....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, // ..=........3....
+ 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x67, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, // ..P...g...^ ..!C
+ 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, // ...3..>.......^
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, // ..A...y....V....
+ 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, // ......=.........
+ 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, // ...V..>.........
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, // ..A........@....
+ 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0xd3, 0x1e, // ......=.........
+ 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, // ...@..>...P.....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x77, 0x0e, // ..=........+..w.
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, // ..=........<..t.
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, // ..>....U...+..>.
+ 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, // ...8...<..9.....
+ 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, // ...&.......U...8
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, // ......=.........
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, // ......>.........
+ 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ......8...6.....
+ 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x08, 0x00, 0x00, 0x37, 0x00, // ..........+...7.
+ 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x15, 0x03, // ..y...~...7.....
+ 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, // ......7.........
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xca, 0x1c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, // ..........=.....
+ 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ..........=.....
+ 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, // ...H..~...V.....
+ 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x3d, 0x00, // ...>.......H..=.
+ 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, // .......$......W.
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x82, 0x59, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xfe, 0x24, // .......Y...>...$
+ 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x82, 0x59, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // .......Y..8...6.
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, // ......5.........
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, // ..7.............
+ 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, // ..._..=........[
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, // ......=.......%S
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, // ......=........=
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, // ......=........=
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, // ......P.......V[
+ 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, // ...[..%S...=...=
+ 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // ......V[..8...6.
+ 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x37, 0x00, // ..7.......nb..7.
+ 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // .......A..7.....
+ 0x00, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, // ...J.......S..;.
+ 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......]......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..y....9......;.
+ 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0xbf, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......9......;.
+ 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......9......;.
+ 0x04, 0x00, 0x46, 0x06, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, // ..F...`.......>.
+ 0x03, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...]......9.....
+ 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x3d, 0x00, // ......5....]..=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, // ......#A......>.
+ 0x03, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, // ...9..#A..=.....
+ 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbf, 0x39, // ...,..P...>....9
+ 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x19, 0x21, // ...,..=........!
+ 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa0, 0x37, // ...A..O........7
+ 0x00, 0x00, 0x19, 0x21, 0x00, 0x00, 0x19, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ...!...!........
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, 0x00, 0x00, 0xa0, 0x37, // ......>....9...7
+ 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x1e, 0x00, 0x00, 0xd5, 0x11, // ..9.............
+ 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0xbf, 0x39, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x3e, 0x00, // ...9...9...9..>.
+ 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x18, 0x1e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ..........A.....
+ 0x00, 0x00, 0xe8, 0x3a, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...:...A......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb2, 0x3f, 0x00, 0x00, 0xe8, 0x3a, 0x00, 0x00, 0x85, 0x00, // .......?...:....
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd1, 0x46, 0x00, 0x00, 0xb2, 0x3f, 0x00, 0x00, 0x69, 0x0b, // .......F...?..i.
+ 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x58, 0x2d, 0x00, 0x00, 0xd1, 0x46, // ..........X-...F
+ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x4d, 0x15, // ......n.......M.
+ 0x00, 0x00, 0x58, 0x2d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xfa, 0x4d, // ..X-..A........M
+ 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........=.....
+ 0x00, 0x00, 0x49, 0x37, 0x00, 0x00, 0xfa, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ..I7...M..A.....
+ 0x00, 0x00, 0x5c, 0x4f, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...O..`.......>.
+ 0x03, 0x00, 0x5c, 0x4f, 0x00, 0x00, 0x49, 0x37, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ...O..I7..A.....
+ 0x00, 0x00, 0xd7, 0x35, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...5..........=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2e, 0x1e, 0x00, 0x00, 0xd7, 0x35, 0x00, 0x00, 0x41, 0x00, // ...........5..A.
+ 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x5d, 0x4f, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x0e, 0x0a, // ......]O..`.....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5d, 0x4f, 0x00, 0x00, 0x2e, 0x1e, 0x00, 0x00, 0x41, 0x00, // ..>...]O......A.
+ 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd8, 0x35, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x0a, 0x0a, // .......5........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2f, 0x1e, 0x00, 0x00, 0xd8, 0x35, // ..=......./....5
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x5e, 0x4f, 0x00, 0x00, 0x60, 0x10, // ..A.......^O..`.
+ 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5e, 0x4f, 0x00, 0x00, 0x2f, 0x1e, // ......>...^O../.
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd9, 0x35, 0x00, 0x00, 0x18, 0x0e, // ..A........5....
+ 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x30, 0x1e, // ......=.......0.
+ 0x00, 0x00, 0xd9, 0x35, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x5f, 0x4f, // ...5..A......._O
+ 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x4f, // ..`.......>..._O
+ 0x00, 0x00, 0x30, 0x1e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x8b, 0x35, // ..0...A........5
+ 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..`...M...=.....
+ 0x00, 0x00, 0x81, 0x11, 0x00, 0x00, 0x8b, 0x35, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // .......5..=.....
+ 0x00, 0x00, 0x6f, 0x39, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, // ..o9...A..O.....
+ 0x00, 0x00, 0x83, 0x26, 0x00, 0x00, 0x6f, 0x39, 0x00, 0x00, 0x6f, 0x39, 0x00, 0x00, 0x00, 0x00, // ...&..o9..o9....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00, 0x18, 0x00, // ................
+ 0x00, 0x00, 0x2b, 0x2c, 0x00, 0x00, 0x83, 0x26, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, // ..+,...&........
+ 0x00, 0x00, 0xcf, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x2b, 0x2c, // ..........B...+,
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x41, 0x00, 0x00, 0x8f, 0x41, // ..=.......YA...A
+ 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0f, 0x27, 0x00, 0x00, 0x59, 0x41, // ..O........'..YA
+ 0x00, 0x00, 0x59, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, // ..YA............
+ 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x0f, 0x27, // ..........pG...'
+ 0x00, 0x00, 0xd0, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd1, 0x47, 0x00, 0x00, 0x70, 0x47, // ...........G..pG
+ 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0xd1, 0x47, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..B....G........
+ 0x00, 0x00, 0x4f, 0x4e, 0x00, 0x00, 0xcf, 0x16, 0x00, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x85, 0x00, // ..ON............
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc9, 0x10, 0x00, 0x00, 0xf7, 0x0a, 0x00, 0x00, 0x4f, 0x4e, // ..............ON
+ 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xeb, 0x4c, 0x00, 0x00, 0xfc, 0x00, // ...........L....
+ 0x00, 0x00, 0xc9, 0x10, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x33, 0x28, // ..............3(
+ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xc9, 0x10, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0xeb, 0x4c, // ..........1....L
+ 0x00, 0x00, 0x33, 0x28, 0x00, 0x00, 0x81, 0x11, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..3(......=.....
+ 0x00, 0x00, 0x34, 0x3a, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, // ..4:..nb..O.....
+ 0x00, 0x00, 0x5f, 0x52, 0x00, 0x00, 0x34, 0x3a, 0x00, 0x00, 0x34, 0x3a, 0x00, 0x00, 0x00, 0x00, // .._R..4:..4:....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ..........A.....
+ 0x00, 0x00, 0x94, 0x1c, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ......nb......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa2, 0x32, 0x00, 0x00, 0x94, 0x1c, 0x00, 0x00, 0x85, 0x00, // .......2........
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9b, 0x1a, 0x00, 0x00, 0xa2, 0x32, 0x00, 0x00, 0xf3, 0x10, // ...........2....
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe6, 0x25, 0x00, 0x00, 0x5f, 0x52, // ..Q........%.._R
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa4, 0x2b, // ......Q........+
+ 0x00, 0x00, 0x5f, 0x52, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // .._R......Q.....
+ 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0x5f, 0x52, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, // ...O.._R......P.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xe6, 0x25, 0x00, 0x00, 0xa4, 0x2b, // .......?...%...+
+ 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0x9b, 0x1a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8c, 0x4a, // ...O......>....J
+ 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ...?......8....
};
-static const uint8_t fs_font_distance_field_dx9[746] =
+static const uint8_t fs_font_distance_field_dx9[748] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x02, 0x00, 0x03, 0xff, // Color0..........
- 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
- 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .<.......s_texCo
- 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // lor.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, // 0.1..Q..........
- 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x51, 0x00, 0x00, // @...?.......?Q..
- 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, // ................
- 0xc0, 0x00, 0x00, 0x40, 0xc0, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, // ...@.Q..........
- 0x41, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x40, 0x1f, 0x00, 0x00, // A...?......@@...
- 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, // ................
- 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0xff, 0x90, 0x00, 0x00, 0x00, // ................
- 0xa0, 0x00, 0x00, 0x55, 0xa0, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, // ...U............
- 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0xaa, // .X.........U....
- 0xa0, 0x00, 0x00, 0xff, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, // ................
- 0x80, 0x00, 0x00, 0x55, 0x81, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, // ...U.X..........
- 0x80, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, // ................
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, // .......U........
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, // .........X......
- 0x80, 0x00, 0x00, 0xe4, 0x8c, 0x00, 0x00, 0xff, 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x42, 0x00, 0x00, // .............B..
- 0x03, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x09, 0x00, 0x00, // ................
- 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0xc6, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x0e, 0x80, 0x01, 0x00, 0x90, 0x91, 0x5c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0e, // ................
- 0x80, 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0xf9, // ................
- 0x80, 0x00, 0x00, 0xf9, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, // ...............U
- 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x5b, 0x00, 0x00, // ...........U.[..
- 0x02, 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, // ................
- 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, // ................
- 0x80, 0x00, 0x00, 0xaa, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0xaa, // ................
- 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x00, 0x00, 0xaa, // ...........U....
- 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, // ...........U....
- 0xa1, 0x02, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, // ...U...........U
- 0x80, 0x02, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x55, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, // .......U........
- 0x80, 0x00, 0x00, 0xaa, 0x81, 0x00, 0x00, 0xe4, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, // ................
- 0x80, 0x00, 0x00, 0x55, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x80, 0x00, 0x00, 0x55, // ...U...........U
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, // ................
- 0x80, 0x02, 0x00, 0xaa, 0xa0, 0x02, 0x00, 0xff, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, // ................
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, // ................
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x08, // .......U........
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xff, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, // ................
- 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x02, 0x00, 0x00, 0x00, // Color0..........
+ 0x03, 0xff, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ...L...0........
+ 0x00, 0x02, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, // ...<.......s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, // Color...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, // 10.1..Q........
+ 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x51, // ..@...?.......?Q
+ 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, // ................
+ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x40, 0xc0, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0, 0x00, // .....@.Q........
+ 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x40, 0x1f, // ..A...?......@@.
+ 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, // ................
+ 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, // ................
+ 0x08, 0x0f, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0xff, 0x90, 0x00, // ................
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x55, 0xa0, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, // .....U..........
+ 0x00, 0x00, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, // ...X.........U..
+ 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xff, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, // ................
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x81, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, // .....U.X........
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, // .........U......
+ 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x00, // ...........X....
+ 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x8c, 0x00, 0x00, 0xff, 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x42, // ...............B
+ 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x09, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0xc6, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x80, 0x01, 0x00, 0x90, 0x91, 0x5c, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x0e, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, // ................
+ 0x00, 0xf9, 0x80, 0x00, 0x00, 0xf9, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, // ................
+ 0x00, 0x55, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x5b, // .U...........U.[
+ 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x04, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x04, 0x80, 0x00, 0x00, 0xaa, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x80, 0x00, // ................
+ 0x00, 0xaa, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x00, // .............U..
+ 0x00, 0xaa, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, // .............U..
+ 0x00, 0x00, 0xa1, 0x02, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x00, // .....U..........
+ 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x55, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, // .U.......U......
+ 0x00, 0x03, 0x80, 0x00, 0x00, 0xaa, 0x81, 0x00, 0x00, 0xe4, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x80, 0x00, // .....U..........
+ 0x00, 0x55, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x00, // .U..............
+ 0x00, 0x00, 0x80, 0x02, 0x00, 0xaa, 0xa0, 0x02, 0x00, 0xff, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, // .........U......
+ 0x08, 0x08, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xff, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ............
};
-static const uint8_t fs_font_distance_field_dx11[1053] =
+static const uint8_t fs_font_distance_field_dx11[1055] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xfc, 0x03, 0x44, 0x58, 0x42, // Color0.......DXB
- 0x43, 0x9a, 0xd6, 0x47, 0xb1, 0x98, 0xc8, 0x0f, 0x79, 0xab, 0x0a, 0x57, 0x47, 0xee, 0xac, 0xc0, // C..G....y..WG...
- 0xfe, 0x01, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // .............,..
- 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, // .........ISGNl..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........b......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, // .SV_POSITION.COL
- 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, // OR.TEXCOORD..OSG
- 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // N,........... ..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
- 0xab, 0x53, 0x48, 0x44, 0x52, 0x20, 0x03, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, // .SHDR ...@......
- 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, // .Z....`......X0.
- 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, // ..p......UU..b..
- 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, // .........b......
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....e.... .....
- 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // .h.......i......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, // .........E......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, // .....F.......F~.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // ......`......6..
- 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, // ..0 .........*..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, // .....6....0 ....
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .............6..
- 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, // ..0 ............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, // .....6....0 ....
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, // .....:.......2..
- 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, // .........:......
- 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // ..@.....@.@.....
- 0x3f, 0x1b, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, // ?...............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .....6..........
- 0x00, 0x0a, 0x30, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ..0 ............
- 0x00, 0x36, 0x00, 0x00, 0x06, 0xe2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x19, 0x10, // .6..............
- 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x05, 0xe2, 0x00, 0x10, // .A..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .....V..........
- 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, // ."..............
- 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, // .............r..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .....F..........
- 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, // .B.......F......
- 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x05, 0x62, 0x00, 0x10, // .F.......K...b..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....V..........
- 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ."..............
- 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x42, 0x00, 0x10, // .*.......2...B..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........A......
- 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // ..@.....A.@.....
- 0x3f, 0x32, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, // ?2..."..........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0x40, 0x00, // ......@.....A.@.
- 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ....?....2......
- 0x00, 0xa6, 0x0a, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, // .....A.......F..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0a, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ........."......
- 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, // ..@.....?...?...
- 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x00, // ?...?........8 .
- 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, // .........2..."..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, // ..............@.
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x38, 0x00, 0x00, // ......@....@@8..
- 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, // .........8......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....8.... .....
- 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, // .........:......
- 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, // .6...r ......F..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // .....>.......
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x44, // Color0.........D
+ 0x58, 0x42, 0x43, 0x9a, 0xd6, 0x47, 0xb1, 0x98, 0xc8, 0x0f, 0x79, 0xab, 0x0a, 0x57, 0x47, 0xee, // XBC..G....y..WG.
+ 0xac, 0xc0, 0xfe, 0x01, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // ...............,
+ 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, // ...........ISGNl
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, // ...........b....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, // ...SV_POSITION.C
+ 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, // OLOR.TEXCOORD..O
+ 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, // .......SV_TARGET
+ 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x20, 0x03, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xc8, // ...SHDR ...@....
+ 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, // ...Z....`......X
+ 0x30, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, // 0...p......UU..b
+ 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, // ...........b....
+ 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x04, 0x00, // ...h.......i....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, // ...........E....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, // ~.......`......6
+ 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, // ....0 .........*
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, // .......6....0 ..
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, // ...............6
+ 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, // ....0 ..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x12, 0x30, 0x20, 0x00, 0x00, // .......6....0 ..
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, // .......:.......2
+ 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x02, // ...........:....
+ 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x01, 0x40, 0x00, 0x00, 0x00, // ....@.....@.@...
+ 0x00, 0x00, 0x3f, 0x1b, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, // ..?.............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, // .......6........
+ 0x00, 0x00, 0x00, 0x0a, 0x30, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, // ....0 ..........
+ 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xe2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, // ...6............
+ 0x19, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x05, 0xe2, // ...A............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, // .......V........
+ 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, // ..."............
+ 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x05, 0x72, // ...............r
+ 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, // .......F........
+ 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, // ...B.......F....
+ 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x05, 0x62, // ...F.......K...b
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......V........
+ 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, // ..."............
+ 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x42, // ...*.......2...B
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, // ...........A....
+ 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0x40, 0x00, 0x00, 0x00, // ....@.....A.@...
+ 0x00, 0x00, 0x3f, 0x32, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, // ..?2..."........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, // ........@.....A.
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x00, // @.....?....2....
+ 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......A.......F
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0a, 0x22, 0x00, 0x10, 0x00, 0x00, // ..........."....
+ 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, // ....@.....?...?.
+ 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, // ..?...?........8
+ 0x20, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, // ...............
+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x22, // ...........2..."
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ................
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x38, // @.......@....@@8
+ 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x12, // ...........8....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, // ................
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, // .......8.... ...
+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, // ...........:....
+ 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ...6...r ......F
+ 0x12, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // .......>.......
};
static const uint8_t fs_font_distance_field_mtl[1413] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x76, 0x05, 0x00, 0x00, 0x75, 0x73, // FSH.......v...us
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x76, 0x05, 0x00, 0x00, 0x75, 0x73, // FSH.......v...us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/font/fs_font_distance_field_subpixel.bin.h b/3rdparty/bgfx/examples/common/font/fs_font_distance_field_subpixel.bin.h
index 5764cc17eeb..71498dd52ee 100644
--- a/3rdparty/bgfx/examples/common/font/fs_font_distance_field_subpixel.bin.h
+++ b/3rdparty/bgfx/examples/common/font/fs_font_distance_field_subpixel.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_font_distance_field_subpixel_glsl[1268] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xd4, 0x04, 0x00, 0x00, 0x76, // Color..........v
0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // arying highp vec
0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, // 4 v_color0;.vary
@@ -81,435 +81,468 @@ static const uint8_t fs_font_distance_field_subpixel_glsl[1268] =
0x20, 0x2a, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x77, 0x29, 0x3b, 0x0a, // * v_color0.w);.
0x7d, 0x0a, 0x0a, 0x00, // }...
};
-static const uint8_t fs_font_distance_field_subpixel_spv[4457] =
+static const uint8_t fs_font_distance_field_subpixel_spv[4987] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x5c, 0x11, 0x03, 0x02, 0x23, 0x07, // FSH...........#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0xb1, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........a......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, // w...t...........
- 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, // main........g...
- 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x00, // BgfxSamplerCube.
- 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, // ....g.......m_sa
- 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, // mpler.......g...
- 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // ....m_texture...
- 0x05, 0x00, 0x0f, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, // ........bgfxText
- 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, // ureCube(struct-B
- 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, // gfxSamplerCube-p
- 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, // 1-tC11;vf3;.....
- 0x27, 0x0e, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, // '..._sampler....
- 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, // ........_coord..
- 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, // ....5...vec4_spl
- 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, // at(f1;..........
- 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // _x..........@mai
- 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // n(vf4;vf4;vf4;..
- 0x05, 0x00, 0x05, 0x00, 0x42, 0x24, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....B$..v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x78, 0x20, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, // ........x ..v_te
- 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc4, 0x41, 0x00, 0x00, // xcoord0......A..
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x05, 0x00, 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ....C...s_texCol
- 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // or..........s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, // xColorSampler...
- 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ........s_texCol
- 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // orTexture.......
- 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, // ....bgfx_VoidFra
- 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // g........T..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x69, 0x6e, 0x64, 0x65, // m.......M...inde
- 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x57, 0x17, 0x00, 0x00, 0x64, 0x78, 0x33, 0x00, // x.......W...dx3.
- 0x05, 0x00, 0x03, 0x00, 0x85, 0x0f, 0x00, 0x00, 0x64, 0x79, 0x33, 0x00, 0x05, 0x00, 0x04, 0x00, // ........dy3.....
- 0xc2, 0x0c, 0x00, 0x00, 0x64, 0x65, 0x63, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // ....decal.......
- 0xd7, 0x12, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x65, 0x66, 0x74, 0x00, 0x00, // ....sampleLeft..
- 0x05, 0x00, 0x05, 0x00, 0x07, 0x0f, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x69, // ........sampleRi
- 0x67, 0x68, 0x74, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1f, 0x14, 0x00, 0x00, 0x6c, 0x65, 0x66, 0x74, // ght.........left
- 0x5f, 0x64, 0x69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x45, 0x4e, 0x00, 0x00, // _dist.......EN..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2a, 0x0f, 0x00, 0x00, // param.......*...
- 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // right_dist......
- 0xc9, 0x2e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....param.......
- 0x81, 0x11, 0x00, 0x00, 0x64, 0x69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // ....dist........
- 0xcf, 0x16, 0x00, 0x00, 0x64, 0x78, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xd0, 0x16, 0x00, 0x00, // ....dx..........
- 0x64, 0x79, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc9, 0x10, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, // dy..........w...
- 0x05, 0x00, 0x05, 0x00, 0x4a, 0x0d, 0x00, 0x00, 0x73, 0x75, 0x62, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ....J...sub_colo
- 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // r........A..v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, // lor0........w...
- 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // v_color0........
- 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // .<..v_texcoord0.
- 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....t...v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0.........gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .G..param.......
- 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .U..param.......
- 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....param.......
- 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, // 0_......M...$Glo
- 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // bal.....M.......
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_viewRect......
- 0x4d, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, // M.......u_viewTe
- 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // xel.....M.......
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, 0x00, 0x00, // u_view......M...
- 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, // ....u_invView...
- 0x06, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, // ....M.......u_pr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // oj......M.......
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_invProj.......
- 0x4d, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // M.......u_viewPr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // oj......M.......
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // u_invViewProj...
- 0x06, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....M.......u_mo
- 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // del.....M.......
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, // u_modelView.....
- 0x4d, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // M.......u_modelV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x06, 0x00, 0x00, // iewProj.....M...
- 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, // ....u_alphaRef4.
- 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......".......
- 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......!.......
- 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......".......
- 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......!.......
- 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...w...........
- 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // G...t...........
- 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
- 0x47, 0x00, 0x04, 0x00, 0xf0, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // G...........@...
- 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...M.......#...
- 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....H...M.......
- 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, // #.......H...M...
- 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, // ........H...M...
- 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
- 0x4d, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // M...............
- 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...M...........
- 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...M.......#...
- 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // `...H...M.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, // ........H...M...
- 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, // ........H...M...
- 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x4d, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // M...............
- 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...M...........
- 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...M.......#...
- 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...M.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, // ........H...M...
- 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, // ........H...M...
- 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
- 0x4d, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // M...............
- 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...M...........
- 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...M.......#...
- 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // `...H...M.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, // ........H...M...
- 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, // ........H...M...
- 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x4d, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // M...............
- 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...M...........
- 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...M.......#...
- 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...M.......
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x4d, 0x06, 0x00, 0x00, // ........H...M...
- 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, // ........H...M...
- 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x4d, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // M...............
- 0x48, 0x00, 0x05, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...M.......#...
- 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...G...M.......
- 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, // ........!.......
- 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x98, 0x00, 0x00, 0x00, // .... ...........
- 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, // ................
- 0x67, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // g........... ...
- 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // !.......g.......
- 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // ................
- 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, // ............!...
- 0xe8, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, // ........!.......
- 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
- 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, // !...............
- 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x21, 0x00, 0x06, 0x00, 0x91, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // !...............
- 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, // ........;...!...
- 0x43, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, // C....... ...y...
- 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, // ........;...y...
- 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, // ........ .......
- 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, // ........;.......
- 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // .......+.......
- 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
- 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, // ................
- 0x98, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, // ....+...........
- 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x69, 0x0b, 0x00, 0x00, // ....+.......i...
- 0x00, 0x00, 0x80, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, // ...@+...........
- 0x00, 0x00, 0x00, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, // ...?+...........
- 0xc1, 0xaa, 0x2a, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf7, 0x0a, 0x00, 0x00, // ..*>+...........
- 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ...A ...........
- 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, // ....;.......w...
- 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, // ....;.......t...
- 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
- 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ....;...........
- 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........e.......
- 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....+.......j...
- 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xf0, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ...........e...
- 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x4d, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // j.......M.......
- 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ....e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf0, 0x04, 0x00, 0x00, // e...e...e.......
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, // e...e.......6...
- 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....Sa..;.......
- 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // .G......;.......
- 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // .U......;.......
- 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // ........=.......
- 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, // !C......=.......
- 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x67, 0x09, 0x00, 0x00, // .3......P...g...
- 0x12, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // . ..!C...3..>...
- 0x43, 0x12, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // C.... ..=.......
- 0xfa, 0x41, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .A..w...=.......
- 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, // .<..t...>....G..
- 0xfa, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, // .A..>....U...<..
- 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, // 9........&......
- 0xc9, 0x47, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .G...U......=...
- 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
- 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // ............8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0xe8, 0x03, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x21, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // ....7...!...'...
- 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
- 0xcd, 0x5b, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x03, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, // .[..A.......i$..
- 0x27, 0x0e, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, // '.......=.......
- 0x16, 0x31, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, // .1..i$..A...y...
- 0x54, 0x44, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // TD..'.......=...
- 0xfc, 0x01, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, // .....V..TD..V...
- 0xfe, 0x01, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, // .....B...1...V..
- 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, // =.......6.......
- 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa4, 0x51, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, // W........Q...B..
- 0x36, 0x1c, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xa4, 0x51, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // 6........Q..8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6.......5.......
- 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // ....7...........
- 0xf8, 0x00, 0x02, 0x00, 0x17, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .....>..=.......
- 0x18, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .S......=.......
- 0x5d, 0x4a, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ]J......=.......
- 0xfd, 0x34, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .4......=.......
- 0x10, 0x35, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // .5......P.......
- 0x3f, 0x3a, 0x00, 0x00, 0x18, 0x53, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, // ?:...S..]J...4..
- 0x10, 0x35, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x3f, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // .5......?:..8...
- 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0x91, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, // ....7.......B$..
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......x ..7...
- 0x9a, 0x02, 0x00, 0x00, 0xc4, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x19, 0x00, 0x00, // .....A..........
- 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........T......
- 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x45, 0x4e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;.......EN......
- 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xc9, 0x2e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
- 0x3e, 0x00, 0x03, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, // >....T......9...
- 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0xd5, 0x54, 0x00, 0x00, // ........5....T..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x14, 0x22, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, // A........"..x ..
- 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc6, 0x33, 0x00, 0x00, // ....=........3..
- 0x14, 0x22, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x09, 0x3e, 0x00, 0x00, // ."...........>..
- 0xc6, 0x33, 0x00, 0x00, 0x69, 0x0b, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .3..i...........
- 0x44, 0x24, 0x00, 0x00, 0x09, 0x3e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x04, 0x00, // D$...>......n...
- 0x0c, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x44, 0x24, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....M...D$..=...
- 0x1d, 0x00, 0x00, 0x00, 0xd1, 0x47, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, // .....G..x ..O...
- 0x18, 0x00, 0x00, 0x00, 0xfa, 0x49, 0x00, 0x00, 0xd1, 0x47, 0x00, 0x00, 0xd1, 0x47, 0x00, 0x00, // .....I...G...G..
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00, // ................
- 0x18, 0x00, 0x00, 0x00, 0x57, 0x17, 0x00, 0x00, 0xfa, 0x49, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....W....I..=...
- 0x1d, 0x00, 0x00, 0x00, 0xb1, 0x37, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, // .....7..x ..O...
- 0x18, 0x00, 0x00, 0x00, 0xb5, 0x1e, 0x00, 0x00, 0xb1, 0x37, 0x00, 0x00, 0xb1, 0x37, 0x00, 0x00, // .........7...7..
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, // ................
- 0x18, 0x00, 0x00, 0x00, 0x45, 0x61, 0x00, 0x00, 0xb5, 0x1e, 0x00, 0x00, 0xd0, 0x00, 0x04, 0x00, // ....Ea..........
- 0x18, 0x00, 0x00, 0x00, 0x85, 0x0f, 0x00, 0x00, 0x45, 0x61, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, // ........Ea......
- 0x18, 0x00, 0x00, 0x00, 0xc2, 0x0c, 0x00, 0x00, 0x57, 0x17, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, // ........W.......
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf9, 0x29, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, // =........)..x ..
- 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xc3, 0x32, 0x00, 0x00, 0xf9, 0x29, 0x00, 0x00, // O........2...)..
- 0xf9, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .)..............
- 0x83, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd7, 0x12, 0x00, 0x00, 0xc3, 0x32, 0x00, 0x00, // .............2..
- 0xc2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x25, 0x00, 0x00, // ....=........%..
- 0x78, 0x20, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5e, 0x37, 0x00, 0x00, // x ..O.......^7..
- 0x13, 0x25, 0x00, 0x00, 0x13, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .%...%..........
- 0x02, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x00, 0x00, // ................
- 0x5e, 0x37, 0x00, 0x00, 0xc2, 0x0c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x45, 0x4e, 0x00, 0x00, // ^7......>...EN..
- 0xd7, 0x12, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x2a, 0x00, 0x00, // ....9........*..
- 0xd5, 0x11, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0x45, 0x4e, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, // ....C...EN..O...
- 0x1d, 0x00, 0x00, 0x00, 0x6a, 0x5b, 0x00, 0x00, 0x1f, 0x2a, 0x00, 0x00, 0x1f, 0x2a, 0x00, 0x00, // ....j[...*...*..
- 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x4d, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1f, 0x14, 0x00, 0x00, 0x6a, 0x5b, 0x00, 0x00, // M...........j[..
- 0x4d, 0x15, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x2e, 0x00, 0x00, 0x07, 0x0f, 0x00, 0x00, // M...>...........
- 0x39, 0x00, 0x06, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa3, 0x1d, 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, // 9...............
- 0x43, 0x12, 0x00, 0x00, 0xc9, 0x2e, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, // C.......O.......
- 0x63, 0x60, 0x00, 0x00, 0xa3, 0x1d, 0x00, 0x00, 0xa3, 0x1d, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // c`..............
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x05, 0x00, // ............M...
- 0x0d, 0x00, 0x00, 0x00, 0x2a, 0x0f, 0x00, 0x00, 0x63, 0x60, 0x00, 0x00, 0x4d, 0x15, 0x00, 0x00, // ....*...c`..M...
- 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc3, 0x52, 0x00, 0x00, 0x1f, 0x14, 0x00, 0x00, // .........R......
- 0x2a, 0x0f, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x11, 0x00, 0x00, // *...............
- 0xfc, 0x00, 0x00, 0x00, 0xc3, 0x52, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, // .....R..........
- 0xcf, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x57, 0x17, 0x00, 0x00, // ........B...W...
- 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x42, 0x00, 0x00, 0x00, 0x85, 0x0f, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // B...............
- 0x8f, 0x4e, 0x00, 0x00, 0xcf, 0x16, 0x00, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, // .N..............
- 0x0d, 0x00, 0x00, 0x00, 0xc9, 0x10, 0x00, 0x00, 0xf7, 0x0a, 0x00, 0x00, 0x8f, 0x4e, 0x00, 0x00, // .............N..
- 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3f, 0x23, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, // ........?#......
- 0xc9, 0x10, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd3, 0x50, 0x00, 0x00, // ....P........P..
- 0x3f, 0x23, 0x00, 0x00, 0x3f, 0x23, 0x00, 0x00, 0x3f, 0x23, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, // ?#..?#..?#......
- 0x0d, 0x00, 0x00, 0x00, 0x70, 0x3a, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xc9, 0x10, 0x00, 0x00, // ....p:..........
- 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x82, 0x21, 0x00, 0x00, 0x70, 0x3a, 0x00, 0x00, // P........!..p:..
- 0x70, 0x3a, 0x00, 0x00, 0x70, 0x3a, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, // p:..p:..P.......
- 0x2e, 0x4d, 0x00, 0x00, 0x1f, 0x14, 0x00, 0x00, 0x81, 0x11, 0x00, 0x00, 0x2a, 0x0f, 0x00, 0x00, // .M..........*...
- 0x0c, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........J.......
- 0x31, 0x00, 0x00, 0x00, 0xd3, 0x50, 0x00, 0x00, 0x82, 0x21, 0x00, 0x00, 0x2e, 0x4d, 0x00, 0x00, // 1....P...!...M..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xa2, 0x48, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, // A........H..B$..
- 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0a, 0x2f, 0x00, 0x00, // ....=......../..
- 0xa2, 0x48, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x24, 0x29, 0x00, 0x00, // .H..........$)..
- 0x4a, 0x0d, 0x00, 0x00, 0x0a, 0x2f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // J..../..=.......
- 0x31, 0x27, 0x00, 0x00, 0xc4, 0x41, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, // 1'...A..O.......
- 0xb0, 0x61, 0x00, 0x00, 0x31, 0x27, 0x00, 0x00, 0x24, 0x29, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // .a..1'..$)......
- 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
- 0xc4, 0x41, 0x00, 0x00, 0xb0, 0x61, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // .A...a..A.......
- 0xfd, 0x44, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .D..B$......=...
- 0x0d, 0x00, 0x00, 0x00, 0x2a, 0x32, 0x00, 0x00, 0xfd, 0x44, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, // ....*2...D......
- 0x0d, 0x00, 0x00, 0x00, 0x3a, 0x1b, 0x00, 0x00, 0x81, 0x11, 0x00, 0x00, 0x2a, 0x32, 0x00, 0x00, // ....:.......*2..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x89, 0x46, 0x00, 0x00, 0xc4, 0x41, 0x00, 0x00, // A........F...A..
- 0x13, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x89, 0x46, 0x00, 0x00, 0x3a, 0x1b, 0x00, 0x00, // ....>....F..:...
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....8....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x6c, 0x13, 0x00, 0x00, 0x03, 0x02, // FSH.......l.....
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x6f, 0x62, 0x00, 0x00, 0x00, 0x00, // #.........ob....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ..w...t.........
+ 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, // ................
+ 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00, 0xd5, 0x11, 0x00, 0x00, 0x62, 0x67, // in............bg
+ 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x28, 0x73, 0x74, // fxTextureCube(st
+ 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ruct-BgfxSampler
+ 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, // Cube-p1-tC11;vf3
+ 0x3b, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, // ;.....~..._sampl
+ 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, // er.m_sampler....
+ 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, // ......_sampler.m
+ 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, // _texture........
+ 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, // .._coord......5.
+ 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, // ..vec4_splat(f1;
+ 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, // .........._x....
+ 0x07, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, // ......@main(vf4;
+ 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x6e, 0x62, // vf4;vf4;......nb
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ...A..v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // 0......J..gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x67, 0x09, // gData_0_......g.
+ 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, // ..BgfxSamplerCub
+ 0x65, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, // e.....g.......m_
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, // sampler.......g.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, // ......m_texture.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, // ..........flatte
+ 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, // nTemp.........s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // texColorSampler.
+ 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ..........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // olorTexture.....
+ 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // .m_sampler......
+ 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ..P...s_texColor
+ 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // .m_texture......
+ 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, // ......bgfx_VoidF
+ 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x70, 0x61, // rag........]..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x69, 0x6e, // ram.......M...in
+ 0x64, 0x65, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x57, 0x17, 0x00, 0x00, 0x64, 0x78, // dex.......W...dx
+ 0x33, 0x00, 0x05, 0x00, 0x03, 0x00, 0x85, 0x0f, 0x00, 0x00, 0x64, 0x79, 0x33, 0x00, 0x05, 0x00, // 3.........dy3...
+ 0x04, 0x00, 0xc2, 0x0c, 0x00, 0x00, 0x64, 0x65, 0x63, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, // ......decal.....
+ 0x05, 0x00, 0xd7, 0x12, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x65, 0x66, 0x74, // ......sampleLeft
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x07, 0x0f, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // ..........sample
+ 0x52, 0x69, 0x67, 0x68, 0x74, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1f, 0x14, 0x00, 0x00, 0x6c, 0x65, // Right.........le
+ 0x66, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd4, 0x56, // ft_dist........V
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbe, 0x39, // ..param........9
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbf, 0x39, // ..param........9
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2a, 0x0f, // ..param.......*.
+ 0x00, 0x00, 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x00, 0x00, 0x05, 0x00, // ..right_dist....
+ 0x04, 0x00, 0xc0, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...9..param.....
+ 0x04, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...9..param.....
+ 0x04, 0x00, 0x91, 0x37, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...7..param.....
+ 0x04, 0x00, 0x81, 0x11, 0x00, 0x00, 0x64, 0x69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ......dist......
+ 0x03, 0x00, 0xcf, 0x16, 0x00, 0x00, 0x64, 0x78, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xd0, 0x16, // ......dx........
+ 0x00, 0x00, 0x64, 0x79, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc9, 0x10, 0x00, 0x00, 0x77, 0x00, // ..dy..........w.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x4a, 0x0d, 0x00, 0x00, 0x73, 0x75, 0x62, 0x5f, 0x63, 0x6f, // ......J...sub_co
+ 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, // lor........+..v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, // color0........w.
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ...<..v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // 0.....t...v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, // oord0.........gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, // _FragData_0_....
+ 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...U..param.....
+ 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...8..param.....
+ 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ......param.....
+ 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ......gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x40, 0x09, 0x00, 0x00, 0x24, 0x47, // a_0_......@...$G
+ 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x40, 0x09, 0x00, 0x00, 0x00, 0x00, // lobal.....@.....
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, // ..u_viewRect....
+ 0x06, 0x00, 0x40, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..@.......u_view
+ 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x02, 0x00, // Texel.....@.....
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x40, 0x09, // ..u_view......@.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, // ......u_invView.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
+ 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x40, 0x09, 0x00, 0x00, 0x05, 0x00, // proj......@.....
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invProj.....
+ 0x06, 0x00, 0x40, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..@.......u_view
+ 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x40, 0x09, 0x00, 0x00, 0x07, 0x00, // Proj......@.....
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ..u_invViewProj.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x40, 0x09, 0x00, 0x00, 0x09, 0x00, // model.....@.....
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, // ..u_modelView...
+ 0x07, 0x00, 0x40, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..@.......u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x40, 0x09, // lViewProj.....@.
+ 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, // ......u_alphaRef
+ 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // 4.G.......".....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......!.....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......".....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......!.....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...w.........
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G...t.........
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1d, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, // ..G...........@.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...@.......#.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x01, 0x00, // ......H...@.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x40, 0x09, // ..#.......H...@.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, // ..........H...@.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..@.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x40, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...@.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...@.......#.
+ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x03, 0x00, // ..`...H...@.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x40, 0x09, // ..........H...@.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, // ..........H...@.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..@.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x40, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...@.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...@.......#.
+ 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x05, 0x00, // ......H...@.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x40, 0x09, // ..........H...@.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, // ..........H...@.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..@.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x40, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...@.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...@.......#.
+ 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x07, 0x00, // ..`...H...@.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x40, 0x09, // ..........H...@.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, // ..........H...@.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..@.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x40, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...@.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...@.......#.
+ 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x09, 0x00, // ......H...@.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x40, 0x09, // ..........H...@.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, // ..........H...@.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..@.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x40, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...@.......#.
+ 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x40, 0x09, 0x00, 0x00, 0x02, 0x00, // .. ...G...@.....
+ 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, // ..........!.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, // ..y.............
+ 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x98, 0x00, // ...... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x17, 0x00, // ................
+ 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, // ................
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x06, 0x00, 0x2b, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x15, 0x03, // ..+.......y.....
+ 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......!.........
+ 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x91, 0x00, 0x00, 0x00, 0x08, 0x00, // ......!.........
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, // ................
+ 0x04, 0x00, 0x67, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, // ..g........... .
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x20, 0x00, // ..!.......g... .
+ 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, // ..z...........;.
+ 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // ..z........... .
+ 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, // ..{...........;.
+ 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, // ..{.............
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, // ...... .......+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, // ......P.......+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, // ................
+ 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
+ 0x00, 0x00, 0x69, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..i......@+.....
+ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // .........?+.....
+ 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0xc1, 0xaa, 0x2a, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ........*>+.....
+ 0x00, 0x00, 0xf7, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // .........A .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..w.......;.....
+ 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..t....... .....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
+ 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // ..........+.....
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x1d, 0x0b, // ..j... .........
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x40, 0x09, // ..e...j.......@.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x1d, 0x0b, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......e...e.....
+ 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..!...........;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......8......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, // ......!C......=.
+ 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......3......P.
+ 0x05, 0x00, 0x67, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, // ..g...^ ..!C...3
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, // ..>.......^ ..A.
+ 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, // ..y....V........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, // ..=............V
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, // ..>...........A.
+ 0x05, 0x00, 0x15, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, // .......@........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, // ..=............@
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, // ..>...P.......=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......+..w...=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, // .......<..t...>.
+ 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, // ...U...+..>....8
+ 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, // ...<..9........&
+ 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, // .......U...8....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, // ..=.............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, // ..>.............
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd5, 0x11, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, // ......+...7...y.
+ 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x15, 0x03, 0x00, 0x00, 0xf7, 0x0d, // ..~...7.........
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, // ..7.............
+ 0x02, 0x00, 0xca, 0x1c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0xc6, 0x19, // ......=.........
+ 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xca, 0x48, // ......=........H
+ 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xf7, 0x3e, // ..~...V........>
+ 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // .......H..=.....
+ 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...$......W.....
+ 0x00, 0x00, 0x82, 0x59, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xfe, 0x00, // ...Y...>...$....
+ 0x02, 0x00, 0x82, 0x59, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...Y..8...6.....
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, // ..5...........7.
+ 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, // ..............._
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, // ..=........[....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, // ..=.......%S....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, // ..=........=....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, // ..=........=....
+ 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, // ..P.......V[...[
+ 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, // ..%S...=...=....
+ 0x02, 0x00, 0x56, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, // ..V[..8...6.....
+ 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x37, 0x00, // ..............7.
+ 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ......nb..7.....
+ 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8c, 0x4a, // ...A..7........J
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // .......S..;.....
+ 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, // ...]......;...y.
+ 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, // ...V......;.....
+ 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, // ...9......;.....
+ 0x00, 0x00, 0xbf, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, // ...9......;...y.
+ 0x00, 0x00, 0xc0, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, // ...9......;.....
+ 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, // ...9......;.....
+ 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5d, // ...7......>....]
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, // ......9.........
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ..5....]..A.....
+ 0x00, 0x00, 0x22, 0x5c, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, // .."....A......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8e, 0x3c, 0x00, 0x00, 0x22, 0x5c, 0x00, 0x00, 0x85, 0x00, // .......<..".....
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd1, 0x46, 0x00, 0x00, 0x8e, 0x3c, 0x00, 0x00, 0x69, 0x0b, // .......F...<..i.
+ 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x2d, 0x00, 0x00, 0xd1, 0x46, // ...........-...F
+ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x4d, 0x15, // ......n.......M.
+ 0x00, 0x00, 0x0c, 0x2d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x60, 0x37, // ...-..=.......`7
+ 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x89, 0x39, // ...A..O........9
+ 0x00, 0x00, 0x60, 0x37, 0x00, 0x00, 0x60, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..`7..`7........
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x57, 0x17, // ..............W.
+ 0x00, 0x00, 0x89, 0x39, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x40, // ...9..=.......y@
+ 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x7d, 0x27, // ...A..O.......}'
+ 0x00, 0x00, 0x79, 0x40, 0x00, 0x00, 0x79, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..y@..y@........
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd4, 0x50, // ...............P
+ 0x00, 0x00, 0x7d, 0x27, 0x00, 0x00, 0xd0, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x85, 0x0f, // ..}'............
+ 0x00, 0x00, 0xd4, 0x50, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0xc2, 0x0c, // ...P............
+ 0x00, 0x00, 0x57, 0x17, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..W.......=.....
+ 0x00, 0x00, 0xc1, 0x32, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, // ...2...A..O.....
+ 0x00, 0x00, 0x8b, 0x3b, 0x00, 0x00, 0xc1, 0x32, 0x00, 0x00, 0xc1, 0x32, 0x00, 0x00, 0x00, 0x00, // ...;...2...2....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x18, 0x00, // ................
+ 0x00, 0x00, 0xd7, 0x12, 0x00, 0x00, 0x8b, 0x3b, 0x00, 0x00, 0xc2, 0x0c, 0x00, 0x00, 0x3d, 0x00, // .......;......=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdb, 0x2d, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x4f, 0x00, // .......-...A..O.
+ 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x40, 0x00, 0x00, 0xdb, 0x2d, 0x00, 0x00, 0xdb, 0x2d, // .......@...-...-
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x81, 0x00, // ................
+ 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x00, 0x00, 0x13, 0x40, 0x00, 0x00, 0xc2, 0x0c, // ...........@....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3e, 0x36, 0x00, 0x00, 0x14, 0x11, // ..=.......>6....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x3e, 0x36, 0x00, 0x00, 0x3d, 0x00, // ..>....V..>6..=.
+ 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x96, 0x2c, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, // .......,..P...>.
+ 0x03, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x96, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbf, 0x39, // ...9...,..>....9
+ 0x00, 0x00, 0xd7, 0x12, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x45, 0x4e, // ......9.......EN
+ 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0xbf, 0x39, // .......V...9...9
+ 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe6, 0x4a, 0x00, 0x00, 0x45, 0x4e, // ..O........J..EN
+ 0x00, 0x00, 0x45, 0x4e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // ..EN............
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1f, 0x14, // ......M.........
+ 0x00, 0x00, 0xe6, 0x4a, 0x00, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ...J..M...=.....
+ 0x00, 0x00, 0x03, 0x23, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc0, 0x39, // ...#......>....9
+ 0x00, 0x00, 0x03, 0x23, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x97, 0x2c, // ...#..=........,
+ 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x97, 0x2c, // ..P...>....9...,
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x91, 0x37, 0x00, 0x00, 0x07, 0x0f, 0x00, 0x00, 0x39, 0x00, // ..>....7......9.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x46, 0x4e, 0x00, 0x00, 0xd5, 0x11, 0x00, 0x00, 0xc0, 0x39, // ......FN.......9
+ 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, // ...9...7..O.....
+ 0x00, 0x00, 0xf2, 0x4f, 0x00, 0x00, 0x46, 0x4e, 0x00, 0x00, 0x46, 0x4e, 0x00, 0x00, 0x02, 0x00, // ...O..FN..FN....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4d, 0x00, // ..............M.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2a, 0x0f, 0x00, 0x00, 0xf2, 0x4f, 0x00, 0x00, 0x4d, 0x15, // ......*....O..M.
+ 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8b, 0x5b, 0x00, 0x00, 0x1f, 0x14, // ...........[....
+ 0x00, 0x00, 0x2a, 0x0f, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x11, // ..*.............
+ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x8b, 0x5b, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, // .......[........
+ 0x00, 0x00, 0xcf, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x57, 0x17, // ..........B...W.
+ 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x85, 0x0f, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..B.............
+ 0x00, 0x00, 0x57, 0x57, 0x00, 0x00, 0xcf, 0x16, 0x00, 0x00, 0xd0, 0x16, 0x00, 0x00, 0x85, 0x00, // ..WW............
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc9, 0x10, 0x00, 0x00, 0xf7, 0x0a, 0x00, 0x00, 0x57, 0x57, // ..............WW
+ 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x07, 0x2c, 0x00, 0x00, 0xfc, 0x00, // ...........,....
+ 0x00, 0x00, 0xc9, 0x10, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x9b, 0x59, // ......P........Y
+ 0x00, 0x00, 0x07, 0x2c, 0x00, 0x00, 0x07, 0x2c, 0x00, 0x00, 0x07, 0x2c, 0x00, 0x00, 0x81, 0x00, // ...,...,...,....
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x38, 0x43, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xc9, 0x10, // ......8C........
+ 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x90, 0x5b, 0x00, 0x00, 0x38, 0x43, // ..P........[..8C
+ 0x00, 0x00, 0x38, 0x43, 0x00, 0x00, 0x38, 0x43, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, // ..8C..8C..P.....
+ 0x00, 0x00, 0xf6, 0x55, 0x00, 0x00, 0x1f, 0x14, 0x00, 0x00, 0x81, 0x11, 0x00, 0x00, 0x2a, 0x0f, // ...U..........*.
+ 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0x00, 0x00, 0x01, 0x00, // ..........J.....
+ 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x9b, 0x59, 0x00, 0x00, 0x90, 0x5b, 0x00, 0x00, 0xf6, 0x55, // ..1....Y...[...U
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6a, 0x51, 0x00, 0x00, 0x6e, 0x62, // ..A.......jQ..nb
+ 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd2, 0x37, // ......=........7
+ 0x00, 0x00, 0x6a, 0x51, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0xec, 0x31, // ..jQ...........1
+ 0x00, 0x00, 0x4a, 0x0d, 0x00, 0x00, 0xd2, 0x37, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..J....7..=.....
+ 0x00, 0x00, 0x3f, 0x61, 0x00, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, // ..?a...J..O.....
+ 0x00, 0x00, 0xf9, 0x1f, 0x00, 0x00, 0x3f, 0x61, 0x00, 0x00, 0xec, 0x31, 0x00, 0x00, 0x04, 0x00, // ......?a...1....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, // ..............>.
+ 0x03, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0xf9, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ...J......A.....
+ 0x00, 0x00, 0xc5, 0x4d, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...M..nb......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf2, 0x3a, 0x00, 0x00, 0xc5, 0x4d, 0x00, 0x00, 0x85, 0x00, // .......:...M....
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x81, 0x11, 0x00, 0x00, 0xf2, 0x3a, // .......$.......:
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x18, 0x36, 0x00, 0x00, 0x8c, 0x4a, // ..A........6...J
+ 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x36, 0x00, 0x00, 0x02, 0x24, // ......>....6...$
+ 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ......8....
};
-static const uint8_t fs_font_distance_field_subpixel_dx9[894] =
+static const uint8_t fs_font_distance_field_subpixel_dx9[896] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x60, 0x03, 0x00, 0x03, 0xff, // Color0.....`....
- 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
- 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .<.......s_texCo
- 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // lor.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, // 0.1..Q..........
- 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x51, 0x00, 0x00, // @...?.......?Q..
- 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, // ................
- 0xc0, 0x00, 0x00, 0x40, 0xc0, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, // ...@.Q..........
- 0xc0, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, // ...@@........Q..
- 0x05, 0x03, 0x00, 0x0f, 0xa0, 0xc1, 0xaa, 0x2a, 0x3e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, // .......*>...A...
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, // ?...............
- 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, // ................
- 0x80, 0x01, 0x00, 0xff, 0x90, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x55, 0xa0, 0x13, 0x00, 0x00, // ...........U....
- 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, // .........X......
- 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xff, 0xa0, 0x02, 0x00, 0x00, // ...U............
- 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x81, 0x58, 0x00, 0x00, // ...........U.X..
- 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xaa, // ................
- 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, // ...............U
- 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, // ................
- 0xa0, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x8c, 0x00, 0x00, 0xff, // .X..............
- 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x5b, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, // .....[..........
- 0x90, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x03, 0x00, 0x00, // ................
- 0xa1, 0x01, 0x00, 0xe4, 0x90, 0x42, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, // .....B..........
- 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x09, 0x00, 0x00, 0x03, 0x02, 0x00, 0x01, 0x80, 0x02, 0x00, 0xc6, // ................
- 0x80, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, // ................
- 0x80, 0x03, 0x00, 0x00, 0xa0, 0x01, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, // ................
- 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, // ................
- 0x80, 0x01, 0x00, 0x00, 0x80, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, // ................
- 0x80, 0x42, 0x00, 0x00, 0x03, 0x03, 0x00, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, // .B..............
- 0xa0, 0x09, 0x00, 0x00, 0x03, 0x02, 0x00, 0x04, 0x80, 0x03, 0x00, 0xc6, 0x80, 0x00, 0x00, 0xe4, // ................
- 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x02, 0x00, 0xaa, 0x80, 0x02, 0x00, 0x00, // ................
- 0x80, 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, // ...............U
- 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x91, 0x5c, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, // ................
- 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, // ................
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, // ................
- 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, // ................
- 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x55, // ...............U
- 0xa1, 0x03, 0x00, 0xaa, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, // ................
- 0x80, 0x03, 0x00, 0x55, 0xa0, 0x03, 0x00, 0xaa, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, // ...U............
- 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0e, // ...U............
- 0x80, 0x00, 0x00, 0x55, 0x81, 0x02, 0x00, 0x90, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x08, // ...U............
- 0x80, 0x02, 0x00, 0x55, 0x80, 0x00, 0x00, 0xff, 0x90, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, // ...U............
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x17, 0x80, 0x00, 0x00, 0x00, // ................
- 0x80, 0x00, 0x00, 0xf9, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, // ................
- 0x80, 0x02, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x55, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, // .......U........
- 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, // ................
- 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x07, // ................
- 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xff, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ..............
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x60, 0x03, 0x00, 0x00, 0x00, // Color0.....`....
+ 0x03, 0xff, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ...L...0........
+ 0x00, 0x02, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, // ...<.......s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, // Color...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, // 10.1..Q........
+ 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x51, // ..@...?.......?Q
+ 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, // ................
+ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x40, 0xc0, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0, 0x00, // .....@.Q........
+ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, // .....@@........Q
+ 0x00, 0x00, 0x05, 0x03, 0x00, 0x0f, 0xa0, 0xc1, 0xaa, 0x2a, 0x3e, 0x00, 0x00, 0x00, 0x41, 0x00, // .........*>...A.
+ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, // ..?.............
+ 0x00, 0x08, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x01, 0x00, 0xff, 0x90, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x55, 0xa0, 0x13, // .............U..
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, // ...........X....
+ 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0xff, 0xa0, 0x02, // .....U..........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x81, 0x58, // .............U.X
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xaa, 0xa0, 0x00, // ................
+ 0x00, 0xaa, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, // ................
+ 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, // .U..............
+ 0x00, 0xe4, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x8c, 0x00, // ...X............
+ 0x00, 0xff, 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x5b, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x01, // .......[........
+ 0x00, 0xe4, 0x90, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x03, // ................
+ 0x00, 0x00, 0xa1, 0x01, 0x00, 0xe4, 0x90, 0x42, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x02, // .......B........
+ 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x09, 0x00, 0x00, 0x03, 0x02, 0x00, 0x01, 0x80, 0x02, // ................
+ 0x00, 0xc6, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x80, 0x01, // ................
+ 0x00, 0xe4, 0x80, 0x03, 0x00, 0x00, 0xa0, 0x01, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x03, 0x01, // ................
+ 0x00, 0x01, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x07, 0x00, 0x00, 0x02, 0x01, // ................
+ 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x80, 0x01, // ................
+ 0x00, 0x00, 0x80, 0x42, 0x00, 0x00, 0x03, 0x03, 0x00, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x00, // ...B............
+ 0x08, 0xe4, 0xa0, 0x09, 0x00, 0x00, 0x03, 0x02, 0x00, 0x04, 0x80, 0x03, 0x00, 0xc6, 0x80, 0x00, // ................
+ 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x02, 0x00, 0xaa, 0x80, 0x02, // ................
+ 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, // ................
+ 0x00, 0x55, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x91, 0x5c, // .U..............
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, // ................
+ 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, // ................
+ 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x03, // ................
+ 0x00, 0x55, 0xa1, 0x03, 0x00, 0xaa, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, // .U..............
+ 0x00, 0x00, 0x80, 0x03, 0x00, 0x55, 0xa0, 0x03, 0x00, 0xaa, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, // .....U..........
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, // .....U..........
+ 0x00, 0x0e, 0x80, 0x00, 0x00, 0x55, 0x81, 0x02, 0x00, 0x90, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, // .....U..........
+ 0x08, 0x08, 0x80, 0x02, 0x00, 0x55, 0x80, 0x00, 0x00, 0xff, 0x90, 0x06, 0x00, 0x00, 0x02, 0x00, // .....U..........
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x17, 0x80, 0x00, // ................
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0xf9, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x00, // ................
+ 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x55, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, // .........U......
+ 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xff, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ................
};
-static const uint8_t fs_font_distance_field_subpixel_dx11[1305] =
+static const uint8_t fs_font_distance_field_subpixel_dx11[1307] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xf8, 0x04, 0x44, 0x58, 0x42, // Color0.......DXB
- 0x43, 0x72, 0x17, 0x00, 0xad, 0x3a, 0xed, 0x4a, 0x16, 0x14, 0x58, 0xdb, 0x06, 0xdf, 0x01, 0x0f, // Cr...:.J..X.....
- 0x39, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // 9............,..
- 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, // .........ISGNl..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........b......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, // .SV_POSITION.COL
- 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, // OR.TEXCOORD..OSG
- 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // N,........... ..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
- 0xab, 0x53, 0x48, 0x44, 0x52, 0x1c, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, // .SHDR....@......
- 0x00, 0x35, 0x18, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, // .5..........?...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // ................
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ?...............
- 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....?...........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, // ........?Z....`.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, // .....X0...p.....
- 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x82, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, // .UU..b..........
- 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .b...........e..
- 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, // .. ......h......
- 0x00, 0x32, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, // .2...........:..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x01, 0x40, 0x00, // ......@.....@.@.
- 0x00, 0x00, 0x00, 0x00, 0x3f, 0x1b, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ....?...........
- 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x05, 0xe2, 0x00, 0x10, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x19, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, // .............2..
- 0x0d, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x80, 0x41, 0x00, 0x00, // .r...........A..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xc1, 0xaa, 0x2a, 0x3e, 0xc1, 0xaa, 0x2a, // ......@....*>..*
- 0x3e, 0xc1, 0xaa, 0x2a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, // >..*>....F......
- 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, // .E...........F..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, // .....F~.......`.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, // ................
- 0x00, 0x66, 0x0c, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x9e, 0x90, 0x00, 0x0a, 0x00, 0x10, // .f.......F......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, // .....2...r......
- 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xc1, 0xaa, 0x2a, // ..........@....*
- 0x3e, 0xc1, 0xaa, 0x2a, 0x3e, 0xc1, 0xaa, 0x2a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, // >..*>..*>....F..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ........."......
- 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, // .E...........F..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, // .....F~.......`.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, // .........B......
- 0x00, 0x66, 0x0c, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x9e, 0x90, 0x00, 0x0a, 0x00, 0x10, // .f.......F......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x2a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, // .*..............
- 0x00, 0x38, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, // .8..."..........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x00, 0x00, // ......@.....?6..
- 0x06, 0xd2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x19, 0x10, 0x80, 0x41, 0x00, 0x00, // .............A..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x05, 0xd2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x06, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .....K...2......
- 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, // .F..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .....2..."......
- 0x00, 0x0a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, // .....A........@.
- 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x32, 0x00, 0x00, // ....A.@.....?2..
- 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // ..@.....A.@.....
- 0x3f, 0x00, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, // ?...............
- 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .A..............
- 0x00, 0x00, 0x00, 0x00, 0x08, 0xe2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, // .............V..
- 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, // .A..............
- 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, // .8.... .........
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, // .....:..........
- 0x0a, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, // ..........@.....
- 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x0a, 0x00, 0x10, // ?...?...?...?...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .....8 ..r......
- 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x32, 0x00, 0x00, 0x0f, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, // .2...r.......F..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, // ......@.........
- 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, // ..........@....@
- 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, // @..@@..@@....8..
- 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, // .r.......F......
- 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, // .F.......8...r..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, // .....F.......F..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....8...r .....
- 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x1f, 0x10, 0x00, 0x01, 0x00, 0x00, // .F..............
- 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // .>.......
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x44, // Color0.........D
+ 0x58, 0x42, 0x43, 0x72, 0x17, 0x00, 0xad, 0x3a, 0xed, 0x4a, 0x16, 0x14, 0x58, 0xdb, 0x06, 0xdf, // XBCr...:.J..X...
+ 0x01, 0x0f, 0x39, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // ..9............,
+ 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, // ...........ISGNl
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, // ...........b....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, // ...SV_POSITION.C
+ 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, // OLOR.TEXCOORD..O
+ 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, // .......SV_TARGET
+ 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x1c, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x07, // ...SHDR....@....
+ 0x01, 0x00, 0x00, 0x35, 0x18, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, // ...5..........?.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ..?.............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......?.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x5a, 0x00, 0x00, 0x03, 0x00, // ..........?Z....
+ 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, // `......X0...p...
+ 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x82, 0x10, 0x10, 0x00, 0x01, // ...UU..b........
+ 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, // ...b...........e
+ 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x03, // .... ......h....
+ 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, // ...2...........:
+ 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x01, // ........@.....@.
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x1b, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x00, // @.....?.........
+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x05, 0xe2, // ................
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x19, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, // ...............2
+ 0x00, 0x00, 0x0d, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x80, 0x41, // ...r...........A
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xc1, 0xaa, 0x2a, 0x3e, 0xc1, // ........@....*>.
+ 0xaa, 0x2a, 0x3e, 0xc1, 0xaa, 0x2a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, // .*>..*>....F....
+ 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // ...E...........F
+ 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......F~.......
+ 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, 0x00, 0x01, // `...............
+ 0x00, 0x00, 0x00, 0x66, 0x0c, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x9e, 0x90, 0x00, 0x0a, // ...f.......F....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0c, 0x72, 0x00, 0x10, 0x00, 0x02, // .......2...r....
+ 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xc1, // ............@...
+ 0xaa, 0x2a, 0x3e, 0xc1, 0xaa, 0x2a, 0x3e, 0xc1, 0xaa, 0x2a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x46, // .*>..*>..*>....F
+ 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, // ..........."....
+ 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, // ...E...........F
+ 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......F~.......
+ 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x01, // `..........B....
+ 0x00, 0x00, 0x00, 0x66, 0x0c, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x9e, 0x90, 0x00, 0x0a, // ...f.......F....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, // ...*............
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, // ...8..."........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, // ........@.....?6
+ 0x00, 0x00, 0x06, 0xd2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x19, 0x10, 0x80, 0x41, // ...............A
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x05, 0xd2, 0x00, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x06, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x07, 0x12, // ................
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, // ................
+ 0x03, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, 0x00, // .......K...2....
+ 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, // ...F............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, // ................
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x22, 0x00, 0x10, 0x00, 0x00, // .......2..."....
+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // .......A........
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x32, // @.....A.@.....?2
+ 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0x40, 0x00, 0x00, 0x00, // ....@.....A.@...
+ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, // ..?.............
+ 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, // ...A............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xe2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, // ...............V
+ 0x05, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x01, // ...A............
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, // ...8.... .......
+ 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, // .......:........
+ 0x00, 0x00, 0x0a, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, // ............@...
+ 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x0a, // ..?...?...?...?.
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, // .......8 ..r....
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0f, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // ...2...r.......F
+ 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, // ........@.......
+ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, // ............@...
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x38, // .@@..@@..@@....8
+ 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, // ...r.......F....
+ 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, // ...F.......8...r
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x20, 0x10, 0x00, 0x00, // .......8...r ...
+ 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x1f, 0x10, 0x00, 0x01, // ...F............
+ 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ...>.......
};
static const uint8_t fs_font_distance_field_subpixel_mtl[1654] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x67, 0x06, 0x00, 0x00, 0x75, 0x73, // FSH.......g...us
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x67, 0x06, 0x00, 0x00, 0x75, 0x73, // FSH.......g...us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp b/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp
index 0ae7877e133..b442a811b67 100644
--- a/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp
+++ b/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp
@@ -251,7 +251,7 @@ void TextBuffer::appendText(FontHandle _fontHandle, const char* _string, const c
if (_end == NULL)
{
- _end = _string + bx::strnlen(_string);
+ _end = _string + bx::strLen(_string);
}
BX_CHECK(_end >= _string);
@@ -613,11 +613,11 @@ TextBufferManager::~TextBufferManager()
BX_CHECK(m_textBufferHandles.getNumHandles() == 0, "All the text buffers must be destroyed before destroying the manager");
delete [] m_textBuffers;
- bgfx::destroyUniform(s_texColor);
+ bgfx::destroy(s_texColor);
- bgfx::destroyProgram(m_basicProgram);
- bgfx::destroyProgram(m_distanceProgram);
- bgfx::destroyProgram(m_distanceSubpixelProgram);
+ bgfx::destroy(m_basicProgram);
+ bgfx::destroy(m_distanceProgram);
+ bgfx::destroy(m_distanceSubpixelProgram);
}
TextBufferHandle TextBufferManager::createTextBuffer(uint32_t _type, BufferType::Enum _bufferType)
@@ -628,8 +628,8 @@ TextBufferHandle TextBufferManager::createTextBuffer(uint32_t _type, BufferType:
bc.textBuffer = new TextBuffer(m_fontManager);
bc.fontType = _type;
bc.bufferType = _bufferType;
- bc.indexBufferHandleIdx = bgfx::invalidHandle;
- bc.vertexBufferHandleIdx = bgfx::invalidHandle;
+ bc.indexBufferHandleIdx = bgfx::kInvalidHandle;
+ bc.vertexBufferHandleIdx = bgfx::kInvalidHandle;
TextBufferHandle ret = {textIdx};
return ret;
@@ -644,7 +644,7 @@ void TextBufferManager::destroyTextBuffer(TextBufferHandle _handle)
delete bc.textBuffer;
bc.textBuffer = NULL;
- if (bc.vertexBufferHandleIdx == bgfx::invalidHandle)
+ if (bc.vertexBufferHandleIdx == bgfx::kInvalidHandle)
{
return;
}
@@ -657,8 +657,8 @@ void TextBufferManager::destroyTextBuffer(TextBufferHandle _handle)
bgfx::VertexBufferHandle vbh;
ibh.idx = bc.indexBufferHandleIdx;
vbh.idx = bc.vertexBufferHandleIdx;
- bgfx::destroyIndexBuffer(ibh);
- bgfx::destroyVertexBuffer(vbh);
+ bgfx::destroy(ibh);
+ bgfx::destroy(vbh);
}
break;
@@ -668,8 +668,8 @@ void TextBufferManager::destroyTextBuffer(TextBufferHandle _handle)
bgfx::DynamicVertexBufferHandle vbh;
ibh.idx = bc.indexBufferHandleIdx;
vbh.idx = bc.vertexBufferHandleIdx;
- bgfx::destroyDynamicIndexBuffer(ibh);
- bgfx::destroyDynamicVertexBuffer(vbh);
+ bgfx::destroy(ibh);
+ bgfx::destroy(vbh);
break;
@@ -678,7 +678,7 @@ void TextBufferManager::destroyTextBuffer(TextBufferHandle _handle)
}
}
-void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id, int32_t _depth)
+void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, bgfx::ViewId _id, int32_t _depth)
{
BX_CHECK(bgfx::isValid(_handle), "Invalid handle used");
@@ -730,7 +730,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id,
bgfx::IndexBufferHandle ibh;
bgfx::VertexBufferHandle vbh;
- if (bgfx::invalidHandle == bc.vertexBufferHandleIdx)
+ if (bgfx::kInvalidHandle == bc.vertexBufferHandleIdx)
{
ibh = bgfx::createIndexBuffer(
bgfx::copy(bc.textBuffer->getIndexBuffer(), indexSize)
@@ -750,7 +750,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id,
ibh.idx = bc.indexBufferHandleIdx;
}
- bgfx::setVertexBuffer(vbh, 0, bc.textBuffer->getVertexCount() );
+ bgfx::setVertexBuffer(0, vbh, 0, bc.textBuffer->getVertexCount() );
bgfx::setIndexBuffer(ibh, 0, bc.textBuffer->getIndexCount() );
}
break;
@@ -760,7 +760,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id,
bgfx::DynamicIndexBufferHandle ibh;
bgfx::DynamicVertexBufferHandle vbh;
- if (bgfx::invalidHandle == bc.vertexBufferHandleIdx )
+ if (bgfx::kInvalidHandle == bc.vertexBufferHandleIdx )
{
ibh = bgfx::createDynamicIndexBuffer(
bgfx::copy(bc.textBuffer->getIndexBuffer(), indexSize)
@@ -790,7 +790,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id,
);
}
- bgfx::setVertexBuffer(vbh, 0, bc.textBuffer->getVertexCount() );
+ bgfx::setVertexBuffer(0, vbh, 0, bc.textBuffer->getVertexCount() );
bgfx::setIndexBuffer(ibh, 0, bc.textBuffer->getIndexCount() );
}
break;
@@ -803,7 +803,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id,
bgfx::allocTransientVertexBuffer(&tvb, bc.textBuffer->getVertexCount(), m_vertexDecl);
bx::memCopy(tib.data, bc.textBuffer->getIndexBuffer(), indexSize);
bx::memCopy(tvb.data, bc.textBuffer->getVertexBuffer(), vertexSize);
- bgfx::setVertexBuffer(&tvb, 0, bc.textBuffer->getVertexCount() );
+ bgfx::setVertexBuffer(0, &tvb, 0, bc.textBuffer->getVertexCount() );
bgfx::setIndexBuffer(&tib, 0, bc.textBuffer->getIndexCount() );
}
break;
diff --git a/3rdparty/bgfx/examples/common/font/text_buffer_manager.h b/3rdparty/bgfx/examples/common/font/text_buffer_manager.h
index 0183b39ee07..788fba800ca 100644
--- a/3rdparty/bgfx/examples/common/font/text_buffer_manager.h
+++ b/3rdparty/bgfx/examples/common/font/text_buffer_manager.h
@@ -47,7 +47,7 @@ public:
TextBufferHandle createTextBuffer(uint32_t _type, BufferType::Enum _bufferType);
void destroyTextBuffer(TextBufferHandle _handle);
- void submitTextBuffer(TextBufferHandle _handle, uint8_t _id, int32_t _depth = 0);
+ void submitTextBuffer(TextBufferHandle _handle, bgfx::ViewId _id, int32_t _depth = 0);
void setStyle(TextBufferHandle _handle, uint32_t _flags = STYLE_NORMAL);
void setTextColor(TextBufferHandle _handle, uint32_t _rgba = 0x000000FF);
@@ -64,16 +64,16 @@ public:
/// Append a wide char unicode string to the buffer using current pen position and color.
void appendText(TextBufferHandle _handle, FontHandle _fontHandle, const wchar_t* _string, const wchar_t* _end = NULL);
-
+
/// Append a whole face of the atlas cube, mostly used for debugging and visualizing atlas.
void appendAtlasFace(TextBufferHandle _handle, uint16_t _faceIndex);
/// Clear the text buffer and reset its state (pen/color).
void clearTextBuffer(TextBufferHandle _handle);
-
+
/// Return the rectangular size of the current text buffer (including all its content).
- TextRectangle getRectangle(TextBufferHandle _handle) const;
-
+ TextRectangle getRectangle(TextBufferHandle _handle) const;
+
private:
struct BufferCache
{
diff --git a/3rdparty/bgfx/examples/common/font/vs_font_basic.bin.h b/3rdparty/bgfx/examples/common/font/vs_font_basic.bin.h
index 49d22ecac34..8ed838e51d1 100644
--- a/3rdparty/bgfx/examples/common/font/vs_font_basic.bin.h
+++ b/3rdparty/bgfx/examples/common/font/vs_font_basic.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_font_basic_glsl[431] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x8a, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ....attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
@@ -28,275 +28,272 @@ static const uint8_t vs_font_basic_glsl[431] =
0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, // d0;. v_color0 =
0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // a_color0;.}...
};
-static const uint8_t vs_font_basic_spv[3171] =
+static const uint8_t vs_font_basic_spv[3133] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0x40, 0x0c, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x36, 0x62, // @...#.........6b
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, // in..............
- 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
- 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8c, 0x04, // ..main..........
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, // ..Output........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // ......gl_Positio
- 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // n.............v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, // color0..........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ......v_texcoord
- 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, // 0.........@main(
- 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, // vf4;vf2;vf4;....
- 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..O...a_color0..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ......:...a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x61, 0x5f, // tion.......M..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, // texcoord0.......
- 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, // .._varying_.....
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ......$Global...
- 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x01, 0x00, // Rect............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xbc, 0x01, // invView.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
- 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..........u_invP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, // roj.............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
- 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xbc, 0x01, // iewProj.........
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
- 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
- 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, // lView...........
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
- 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.............u_
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, // alphaRef4.....B.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, // ...........A..a_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, // color0..........
- 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..a_color0......
- 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ...?..a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ..........a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, // tion......@,..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, // texcoord0.......
- 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..a_texcoord0...
- 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
- 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // p......U..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......8..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
- 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, // ..........@entry
- 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, // PointOutput_gl_P
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x38, 0x04, // osition.......8.
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, // ..Output......8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ......v_color0..
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // ......8.......v_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, // texcoord0.......
- 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
- 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x06, 0x00, // put...G...N.....
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#.......H.....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#...`...H.....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#.......H.....
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#...`...H.....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#.......H.....
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0b, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xbc, 0x01, // ..#... ...G.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, // ......G...B...".
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
- 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x1d, 0x00, // ................
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x71, 0x09, // ..........!...q.
- 0x00, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8c, 0x04, // .. .............
- 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // .?+.............
- 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, // ..,.............
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, // ..............,.
- 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, // ......z.........
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
- 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x4e, 0x03, // ..j... .......N.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xbc, 0x01, // ..e...j.........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..N...e...e.....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xbc, 0x01, // .. ...9.........
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, // ..;...9...B.....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, // ..+.......).....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, // .. ...........e.
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......8.........
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x04, // .. ...........8.
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
- 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
- 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
- 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......8......;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......A......=.
- 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......?......=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, // ......@,......>.
- 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, // ...U...A..>....8
- 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, // ...?..>.......@,
- 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x16, 0x0e, // ..9.......I&....
- 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ...U...8......>.
- 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ......I&..A.....
- 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..T4..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, // ..........T4..>.
- 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..'A..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, // ..........'A..A.
- 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, // .......N........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x41, 0x00, // ..>....N......A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, // .......M........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xc1, 0x4d, // ..=............M
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, // ..A.............
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xe0, 0x1c, // ......>.........
- 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x8c, 0x04, // ......8...6.....
- 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x09, 0x00, 0x00, 0x37, 0x00, // ..........q...7.
- 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, // ......O...7.....
- 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb9, 0x4d, // ..:...7........M
- 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, // ......_W..;.....
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..d-..........>.
- 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..d-......A.....
- 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...8..........>.
- 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ...8..z...=.....
- 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..5b..:...Q.....
- 0x00, 0x00, 0x28, 0x3a, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ..(:..5b......Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9b, 0x46, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, // .......F..5b....
- 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x28, 0x3a, // ..P........2..(:
- 0x00, 0x00, 0x9b, 0x46, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, // ...F..........A.
- 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, // ......),..B...).
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, // ..=...e....<..),
- 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, // ...........;...2
- 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, // ...<..A......._8
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, // ..........>..._8
- 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x21, // ...;..=........!
- 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2d, 0x3c, // ...M..A.......-<
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, // ..........>...-<
- 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x21, // ...!..=........!
- 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2e, 0x3c, // ..O...A........<
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x3c, // ..........>....<
- 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x47, 0x3a, // ...!..=.......G:
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, // ..........G:..8.
- 0x01, 0x00, 0x00, // ...
+ 0x18, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ......#.........
+ 0x36, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // 6b..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........v.......
+ 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
+ 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
+ 0x8c, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....Output......
+ 0x8c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // ........gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.............
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0x8c, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ........v_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // rd0.........@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // n(vf4;vf2;vf4;..
+ 0x05, 0x00, 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....O...a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ........:...a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, // sition.......M..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
+ 0x05, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ........$Global.
+ 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, // ewRect..........
+ 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
+ 0x06, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew..............
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
+ 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ........u_proj..
+ 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, // vProj...........
+ 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
+ 0x06, 0x00, 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
+ 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ........u_model.
+ 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, // delView.........
+ 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.............
+ 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
+ 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, // B............A..
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
+ 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....?..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, // sition......@,..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....a_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........8..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x05, 0x00, 0x0a, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, // ........@entryPo
+ 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // intOutput.v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4e, 0x03, 0x00, 0x00, // oord0...G...N...
+ 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ....@...H.......
+ 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xbc, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
+ 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ........G...B...
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, // ".......G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, // ........G.......
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, // ........G...v...
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
+ 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, // ................
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
+ 0x71, 0x09, 0x00, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, // q...............
+ 0x9a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x8c, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ...?+...........
+ 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, // ....,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // +...............
+ 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ,.......z.......
+ 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
+ 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
+ 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // N...e...j.......
+ 0xbc, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...N...e...e...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...9.......
+ 0xbc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // ....;...9...B...
+ 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // ....+.......)...
+ 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // e... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, // ....;.......v...
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
+ 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
+ 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........8......
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // =........A......
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // =........?......
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // =.......@,......
+ 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....U...A..>...
+ 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, // .8...?..>.......
+ 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, // @,..9.......I&..
+ 0x16, 0x0e, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // .....U...8......
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......I&..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....T4..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // =...........T4..
+ 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // =....... ....@..
+ 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...v... ...A...
+ 0x9a, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, // =........-...@..
+ 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >........-......
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, // 8...6...........
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....q...7.......
+ 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, // O...7.......:...
+ 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........M......
+ 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // _W..;...........
+ 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, // ....A.......d-..
+ 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, // ........>...d-..
+ 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, // ....A........8..
+ 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, // ........>....8..
+ 0x7a, 0x0b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, // z...=.......5b..
+ 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x28, 0x3a, 0x00, 0x00, // :...Q.......(:..
+ 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // 5b......Q.......
+ 0x9b, 0x46, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, // .F..5b......P...
+ 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x28, 0x3a, 0x00, 0x00, 0x9b, 0x46, 0x00, 0x00, // .....2..(:...F..
+ 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, // ........A.......
+ 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ),..B...)...=...
+ 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, // e....<..),......
+ 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, // .....;...2...<..
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A......._8......
+ 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, // ....>..._8...;..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, // =........!...M..
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A.......-<......
+ 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, // ....>...-<...!..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, // =........!..O...
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A........<......
+ 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, // ....>....<...!..
+ 0x3d, 0x00, 0x04, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // =.......G:......
+ 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....G:..8....
};
-static const uint8_t vs_font_basic_dx9[327] =
+static const uint8_t vs_font_basic_dx9[329] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x24, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // $.......!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
- 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
- 0x00, 0x80, 0x02, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, // ................
- 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, // ....U...........
- 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x0f, 0xe0, 0x02, 0x00, // ................
- 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+ 0x24, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // $.........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ................
+ 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ......U.........
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x0f, 0xe0, // ................
+ 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
};
-static const uint8_t vs_font_basic_dx11[580] =
+static const uint8_t vs_font_basic_dx11[582] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x18, 0x02, 0x44, 0x58, 0x42, 0x43, 0xe3, 0x5d, 0xf0, 0xa8, 0xb3, 0x95, 0xec, 0x3a, 0x48, 0x51, // ..DXBC.].....:HQ
- 0xb3, 0xab, 0xaf, 0x69, 0xf9, 0x66, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x00, // ...i.f..........
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
- 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......V.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x5f, 0x00, // .............._.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, // ......COLOR.POSI
- 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, // TION.TEXCOORD.OS
- 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNl...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, // ..............b.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
- 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
- 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x40, 0x00, // ..SHDR....@...@.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, // ..2......._.....
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e.... ....
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e.... ......h.
- 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
- 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
- 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..F. .........6.
- 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x1e, // ..6.... ......F.
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, // ......>.........
- 0x10, 0x00, 0x40, 0x00, // ..@.
+ 0x18, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0xe3, 0x5d, 0xf0, 0xa8, 0xb3, 0x95, 0xec, 0x3a, // ....DXBC.].....:
+ 0x48, 0x51, 0xb3, 0xab, 0xaf, 0x69, 0xf9, 0x66, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, // HQ...i.f........
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, // ....,...........
+ 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNh...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........V.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // ................
+ 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // _...............
+ 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, // ........COLOR.PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // SITION.TEXCOORD.
+ 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNl...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // b...............
+ 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // ION.COLOR.TEXCOO
+ 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // RD..SHDR....@...
+ 0x40, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // @...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _...2......._...
+ 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, // ........g.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....e.... ......
+ 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, // h.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....V.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ........2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
+ 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ..... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....F. .........
+ 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // 6.... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....6.... ......
+ 0x46, 0x1e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, // F.......>.......
+ 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ....@.
};
static const uint8_t vs_font_basic_mtl[790] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0xf1, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/common/font/vs_font_distance_field.bin.h b/3rdparty/bgfx/examples/common/font/vs_font_distance_field.bin.h
index 273d399657c..3bb4f2222f3 100644
--- a/3rdparty/bgfx/examples/common/font/vs_font_distance_field.bin.h
+++ b/3rdparty/bgfx/examples/common/font/vs_font_distance_field.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_font_distance_field_glsl[431] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x8a, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ....attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
@@ -28,275 +28,272 @@ static const uint8_t vs_font_distance_field_glsl[431] =
0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, // d0;. v_color0 =
0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // a_color0;.}...
};
-static const uint8_t vs_font_distance_field_spv[3171] =
+static const uint8_t vs_font_distance_field_spv[3133] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0x40, 0x0c, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x36, 0x62, // @...#.........6b
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, // in..............
- 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
- 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8c, 0x04, // ..main..........
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, // ..Output........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // ......gl_Positio
- 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // n.............v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, // color0..........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ......v_texcoord
- 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, // 0.........@main(
- 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, // vf4;vf2;vf4;....
- 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..O...a_color0..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ......:...a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x61, 0x5f, // tion.......M..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, // texcoord0.......
- 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, // .._varying_.....
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ......$Global...
- 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x01, 0x00, // Rect............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xbc, 0x01, // invView.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
- 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..........u_invP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, // roj.............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
- 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xbc, 0x01, // iewProj.........
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
- 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
- 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, // lView...........
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
- 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.............u_
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, // alphaRef4.....B.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, // ...........A..a_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, // color0..........
- 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..a_color0......
- 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ...?..a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ..........a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, // tion......@,..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, // texcoord0.......
- 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..a_texcoord0...
- 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
- 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // p......U..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......8..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
- 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, // ..........@entry
- 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, // PointOutput_gl_P
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x38, 0x04, // osition.......8.
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, // ..Output......8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ......v_color0..
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // ......8.......v_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, // texcoord0.......
- 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
- 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x06, 0x00, // put...G...N.....
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#.......H.....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#...`...H.....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#.......H.....
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#...`...H.....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#.......H.....
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0b, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xbc, 0x01, // ..#... ...G.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, // ......G...B...".
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
- 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x1d, 0x00, // ................
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x71, 0x09, // ..........!...q.
- 0x00, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8c, 0x04, // .. .............
- 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // .?+.............
- 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, // ..,.............
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, // ..............,.
- 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, // ......z.........
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
- 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x4e, 0x03, // ..j... .......N.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xbc, 0x01, // ..e...j.........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..N...e...e.....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xbc, 0x01, // .. ...9.........
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, // ..;...9...B.....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, // ..+.......).....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, // .. ...........e.
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......8.........
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x04, // .. ...........8.
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
- 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
- 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
- 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......8......;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......A......=.
- 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......?......=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, // ......@,......>.
- 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, // ...U...A..>....8
- 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, // ...?..>.......@,
- 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x16, 0x0e, // ..9.......I&....
- 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ...U...8......>.
- 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ......I&..A.....
- 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..T4..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, // ..........T4..>.
- 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..'A..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, // ..........'A..A.
- 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, // .......N........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x41, 0x00, // ..>....N......A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, // .......M........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xc1, 0x4d, // ..=............M
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, // ..A.............
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xe0, 0x1c, // ......>.........
- 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x8c, 0x04, // ......8...6.....
- 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x09, 0x00, 0x00, 0x37, 0x00, // ..........q...7.
- 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, // ......O...7.....
- 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb9, 0x4d, // ..:...7........M
- 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, // ......_W..;.....
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..d-..........>.
- 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..d-......A.....
- 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...8..........>.
- 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ...8..z...=.....
- 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..5b..:...Q.....
- 0x00, 0x00, 0x28, 0x3a, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ..(:..5b......Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9b, 0x46, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, // .......F..5b....
- 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x28, 0x3a, // ..P........2..(:
- 0x00, 0x00, 0x9b, 0x46, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, // ...F..........A.
- 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, // ......),..B...).
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, // ..=...e....<..),
- 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, // ...........;...2
- 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, // ...<..A......._8
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, // ..........>..._8
- 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x21, // ...;..=........!
- 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2d, 0x3c, // ...M..A.......-<
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, // ..........>...-<
- 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x21, // ...!..=........!
- 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2e, 0x3c, // ..O...A........<
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x3c, // ..........>....<
- 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x47, 0x3a, // ...!..=.......G:
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, // ..........G:..8.
- 0x01, 0x00, 0x00, // ...
+ 0x18, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ......#.........
+ 0x36, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // 6b..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........v.......
+ 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
+ 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
+ 0x8c, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....Output......
+ 0x8c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // ........gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.............
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0x8c, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ........v_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // rd0.........@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // n(vf4;vf2;vf4;..
+ 0x05, 0x00, 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....O...a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ........:...a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, // sition.......M..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
+ 0x05, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ........$Global.
+ 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, // ewRect..........
+ 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
+ 0x06, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew..............
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
+ 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ........u_proj..
+ 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, // vProj...........
+ 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
+ 0x06, 0x00, 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
+ 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ........u_model.
+ 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, // delView.........
+ 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.............
+ 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
+ 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, // B............A..
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
+ 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....?..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, // sition......@,..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....a_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........8..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x05, 0x00, 0x0a, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, // ........@entryPo
+ 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // intOutput.v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4e, 0x03, 0x00, 0x00, // oord0...G...N...
+ 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ....@...H.......
+ 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xbc, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
+ 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ........G...B...
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, // ".......G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, // ........G.......
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, // ........G...v...
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
+ 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, // ................
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
+ 0x71, 0x09, 0x00, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, // q...............
+ 0x9a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x8c, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ...?+...........
+ 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, // ....,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // +...............
+ 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ,.......z.......
+ 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
+ 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
+ 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // N...e...j.......
+ 0xbc, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...N...e...e...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...9.......
+ 0xbc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // ....;...9...B...
+ 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // ....+.......)...
+ 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // e... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, // ....;.......v...
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
+ 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
+ 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........8......
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // =........A......
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // =........?......
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // =.......@,......
+ 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....U...A..>...
+ 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, // .8...?..>.......
+ 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, // @,..9.......I&..
+ 0x16, 0x0e, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // .....U...8......
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......I&..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....T4..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // =...........T4..
+ 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // =....... ....@..
+ 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...v... ...A...
+ 0x9a, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, // =........-...@..
+ 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >........-......
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, // 8...6...........
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....q...7.......
+ 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, // O...7.......:...
+ 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........M......
+ 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // _W..;...........
+ 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, // ....A.......d-..
+ 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, // ........>...d-..
+ 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, // ....A........8..
+ 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, // ........>....8..
+ 0x7a, 0x0b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, // z...=.......5b..
+ 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x28, 0x3a, 0x00, 0x00, // :...Q.......(:..
+ 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // 5b......Q.......
+ 0x9b, 0x46, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, // .F..5b......P...
+ 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x28, 0x3a, 0x00, 0x00, 0x9b, 0x46, 0x00, 0x00, // .....2..(:...F..
+ 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, // ........A.......
+ 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ),..B...)...=...
+ 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, // e....<..),......
+ 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, // .....;...2...<..
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A......._8......
+ 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, // ....>..._8...;..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, // =........!...M..
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A.......-<......
+ 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, // ....>...-<...!..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, // =........!..O...
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A........<......
+ 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, // ....>....<...!..
+ 0x3d, 0x00, 0x04, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // =.......G:......
+ 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....G:..8....
};
-static const uint8_t vs_font_distance_field_dx9[327] =
+static const uint8_t vs_font_distance_field_dx9[329] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x24, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // $.......!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
- 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
- 0x00, 0x80, 0x02, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, // ................
- 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, // ....U...........
- 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x0f, 0xe0, 0x02, 0x00, // ................
- 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+ 0x24, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // $.........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ................
+ 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ......U.........
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x0f, 0xe0, // ................
+ 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
};
-static const uint8_t vs_font_distance_field_dx11[580] =
+static const uint8_t vs_font_distance_field_dx11[582] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x18, 0x02, 0x44, 0x58, 0x42, 0x43, 0xe3, 0x5d, 0xf0, 0xa8, 0xb3, 0x95, 0xec, 0x3a, 0x48, 0x51, // ..DXBC.].....:HQ
- 0xb3, 0xab, 0xaf, 0x69, 0xf9, 0x66, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x00, // ...i.f..........
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
- 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......V.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x5f, 0x00, // .............._.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, // ......COLOR.POSI
- 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, // TION.TEXCOORD.OS
- 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNl...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, // ..............b.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
- 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
- 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x40, 0x00, // ..SHDR....@...@.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, // ..2......._.....
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e.... ....
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e.... ......h.
- 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
- 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
- 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..F. .........6.
- 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x1e, // ..6.... ......F.
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, // ......>.........
- 0x10, 0x00, 0x40, 0x00, // ..@.
+ 0x18, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0xe3, 0x5d, 0xf0, 0xa8, 0xb3, 0x95, 0xec, 0x3a, // ....DXBC.].....:
+ 0x48, 0x51, 0xb3, 0xab, 0xaf, 0x69, 0xf9, 0x66, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, // HQ...i.f........
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, // ....,...........
+ 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNh...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........V.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // ................
+ 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // _...............
+ 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, // ........COLOR.PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // SITION.TEXCOORD.
+ 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNl...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // b...............
+ 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // ION.COLOR.TEXCOO
+ 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // RD..SHDR....@...
+ 0x40, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // @...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _...2......._...
+ 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, // ........g.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....e.... ......
+ 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, // h.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....V.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ........2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
+ 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ..... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....F. .........
+ 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // 6.... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....6.... ......
+ 0x46, 0x1e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, // F.......>.......
+ 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ....@.
};
static const uint8_t vs_font_distance_field_mtl[790] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0xf1, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/common/font/vs_font_distance_field_subpixel.bin.h b/3rdparty/bgfx/examples/common/font/vs_font_distance_field_subpixel.bin.h
index fecf29022a0..c70632b4501 100644
--- a/3rdparty/bgfx/examples/common/font/vs_font_distance_field_subpixel.bin.h
+++ b/3rdparty/bgfx/examples/common/font/vs_font_distance_field_subpixel.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_font_distance_field_subpixel_glsl[431] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x8a, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ....attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
@@ -28,275 +28,272 @@ static const uint8_t vs_font_distance_field_subpixel_glsl[431] =
0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, // d0;. v_color0 =
0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // a_color0;.}...
};
-static const uint8_t vs_font_distance_field_subpixel_spv[3171] =
+static const uint8_t vs_font_distance_field_subpixel_spv[3133] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0x40, 0x0c, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x36, 0x62, // @...#.........6b
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, // in..............
- 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
- 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8c, 0x04, // ..main..........
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, // ..Output........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // ......gl_Positio
- 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // n.............v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, // color0..........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ......v_texcoord
- 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, // 0.........@main(
- 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, // vf4;vf2;vf4;....
- 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..O...a_color0..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ......:...a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x61, 0x5f, // tion.......M..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, // texcoord0.......
- 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, // .._varying_.....
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ......$Global...
- 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x01, 0x00, // Rect............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xbc, 0x01, // invView.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
- 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..........u_invP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, // roj.............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
- 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xbc, 0x01, // iewProj.........
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
- 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
- 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, // lView...........
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
- 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.............u_
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, // alphaRef4.....B.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, // ...........A..a_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, // color0..........
- 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..a_color0......
- 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ...?..a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ..........a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, // tion......@,..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, // texcoord0.......
- 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..a_texcoord0...
- 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
- 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // p......U..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......8..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
- 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, // ..........@entry
- 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, // PointOutput_gl_P
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x38, 0x04, // osition.......8.
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, // ..Output......8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ......v_color0..
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // ......8.......v_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, // texcoord0.......
- 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
- 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x06, 0x00, // put...G...N.....
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#.......H.....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#...`...H.....
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#.......H.....
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#...`...H.....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, // ..#.......H.....
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0b, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xbc, 0x01, // ..#... ...G.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, // ......G...B...".
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
- 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x1d, 0x00, // ................
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x71, 0x09, // ..........!...q.
- 0x00, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8c, 0x04, // .. .............
- 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // .?+.............
- 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, // ..,.............
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, // ..............,.
- 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, // ......z.........
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
- 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x4e, 0x03, // ..j... .......N.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xbc, 0x01, // ..e...j.........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..N...e...e.....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xbc, 0x01, // .. ...9.........
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, // ..;...9...B.....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, // ..+.......).....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, // .. ...........e.
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......8.........
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x04, // .. ...........8.
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
- 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
- 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
- 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......8......;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......A......=.
- 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......?......=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, // ......@,......>.
- 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, // ...U...A..>....8
- 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, // ...?..>.......@,
- 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x16, 0x0e, // ..9.......I&....
- 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ...U...8......>.
- 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ......I&..A.....
- 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..T4..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, // ..........T4..>.
- 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..'A..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, // ..........'A..A.
- 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, // .......N........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x41, 0x00, // ..>....N......A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, // .......M........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xc1, 0x4d, // ..=............M
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, // ..A.............
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xe0, 0x1c, // ......>.........
- 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x8c, 0x04, // ......8...6.....
- 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x09, 0x00, 0x00, 0x37, 0x00, // ..........q...7.
- 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, // ......O...7.....
- 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb9, 0x4d, // ..:...7........M
- 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, // ......_W..;.....
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..d-..........>.
- 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..d-......A.....
- 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...8..........>.
- 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ...8..z...=.....
- 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..5b..:...Q.....
- 0x00, 0x00, 0x28, 0x3a, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ..(:..5b......Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9b, 0x46, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, // .......F..5b....
- 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x28, 0x3a, // ..P........2..(:
- 0x00, 0x00, 0x9b, 0x46, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, // ...F..........A.
- 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, // ......),..B...).
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, // ..=...e....<..),
- 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, // ...........;...2
- 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, // ...<..A......._8
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, // ..........>..._8
- 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x21, // ...;..=........!
- 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2d, 0x3c, // ...M..A.......-<
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, // ..........>...-<
- 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x21, // ...!..=........!
- 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2e, 0x3c, // ..O...A........<
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x3c, // ..........>....<
- 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x47, 0x3a, // ...!..=.......G:
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, // ..........G:..8.
- 0x01, 0x00, 0x00, // ...
+ 0x18, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ......#.........
+ 0x36, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // 6b..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........v.......
+ 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
+ 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
+ 0x8c, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....Output......
+ 0x8c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // ........gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.............
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0x8c, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ........v_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // rd0.........@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // n(vf4;vf2;vf4;..
+ 0x05, 0x00, 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....O...a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ........:...a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, // sition.......M..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
+ 0x05, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ........$Global.
+ 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, // ewRect..........
+ 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
+ 0x06, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew..............
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
+ 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ........u_proj..
+ 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, // vProj...........
+ 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
+ 0x06, 0x00, 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
+ 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ........u_model.
+ 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xbc, 0x01, 0x00, 0x00, // delView.........
+ 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.............
+ 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
+ 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, // B............A..
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
+ 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....?..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, // sition......@,..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....a_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........8..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x05, 0x00, 0x0a, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, // ........@entryPo
+ 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // intOutput.v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4e, 0x03, 0x00, 0x00, // oord0...G...N...
+ 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ....@...H.......
+ 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xbc, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xbc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xbc, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xbc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xbc, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xbc, 0x01, 0x00, 0x00, // ........H.......
+ 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
+ 0xbc, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ........G...B...
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, // ".......G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, // ........G.......
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, // ........G...v...
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
+ 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, // ................
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
+ 0x71, 0x09, 0x00, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, // q...............
+ 0x9a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x8c, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ...?+...........
+ 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, // ....,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // +...............
+ 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ,.......z.......
+ 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
+ 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
+ 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // N...e...j.......
+ 0xbc, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...N...e...e...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...9.......
+ 0xbc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x39, 0x04, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // ....;...9...B...
+ 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // ....+.......)...
+ 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // e... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, // ....;.......v...
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
+ 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
+ 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........8......
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // =........A......
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // =........?......
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // =.......@,......
+ 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....U...A..>...
+ 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, // .8...?..>.......
+ 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, // @,..9.......I&..
+ 0x16, 0x0e, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // .....U...8......
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......I&..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....T4..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // =...........T4..
+ 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // =....... ....@..
+ 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...v... ...A...
+ 0x9a, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, // =........-...@..
+ 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >........-......
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, // 8...6...........
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....q...7.......
+ 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, // O...7.......:...
+ 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........M......
+ 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // _W..;...........
+ 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, // ....A.......d-..
+ 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, // ........>...d-..
+ 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, // ....A........8..
+ 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, // ........>....8..
+ 0x7a, 0x0b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, // z...=.......5b..
+ 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x28, 0x3a, 0x00, 0x00, // :...Q.......(:..
+ 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // 5b......Q.......
+ 0x9b, 0x46, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, // .F..5b......P...
+ 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x28, 0x3a, 0x00, 0x00, 0x9b, 0x46, 0x00, 0x00, // .....2..(:...F..
+ 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, // ........A.......
+ 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ),..B...)...=...
+ 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, // e....<..),......
+ 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, // .....;...2...<..
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A......._8......
+ 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, // ....>..._8...;..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, // =........!...M..
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A.......-<......
+ 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, // ....>...-<...!..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, // =........!..O...
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A........<......
+ 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, // ....>....<...!..
+ 0x3d, 0x00, 0x04, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // =.......G:......
+ 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....G:..8....
};
-static const uint8_t vs_font_distance_field_subpixel_dx9[327] =
+static const uint8_t vs_font_distance_field_subpixel_dx9[329] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x24, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // $.......!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
- 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
- 0x00, 0x80, 0x02, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, // ................
- 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, // ....U...........
- 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x0f, 0xe0, 0x02, 0x00, // ................
- 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+ 0x24, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // $.........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ................
+ 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ......U.........
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x0f, 0xe0, // ................
+ 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
};
-static const uint8_t vs_font_distance_field_subpixel_dx11[580] =
+static const uint8_t vs_font_distance_field_subpixel_dx11[582] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x18, 0x02, 0x44, 0x58, 0x42, 0x43, 0xe3, 0x5d, 0xf0, 0xa8, 0xb3, 0x95, 0xec, 0x3a, 0x48, 0x51, // ..DXBC.].....:HQ
- 0xb3, 0xab, 0xaf, 0x69, 0xf9, 0x66, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x00, // ...i.f..........
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
- 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......V.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x5f, 0x00, // .............._.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, // ......COLOR.POSI
- 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, // TION.TEXCOORD.OS
- 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNl...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, // ..............b.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
- 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
- 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x40, 0x00, // ..SHDR....@...@.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, // ..2......._.....
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e.... ....
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e.... ......h.
- 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
- 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
- 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..F. .........6.
- 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x1e, // ..6.... ......F.
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, // ......>.........
- 0x10, 0x00, 0x40, 0x00, // ..@.
+ 0x18, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0xe3, 0x5d, 0xf0, 0xa8, 0xb3, 0x95, 0xec, 0x3a, // ....DXBC.].....:
+ 0x48, 0x51, 0xb3, 0xab, 0xaf, 0x69, 0xf9, 0x66, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, // HQ...i.f........
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, // ....,...........
+ 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNh...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........V.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // ................
+ 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // _...............
+ 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, // ........COLOR.PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // SITION.TEXCOORD.
+ 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNl...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // b...............
+ 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // ION.COLOR.TEXCOO
+ 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // RD..SHDR....@...
+ 0x40, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // @...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _...2......._...
+ 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, // ........g.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....e.... ......
+ 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, // h.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....V.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ........2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
+ 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ..... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....F. .........
+ 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // 6.... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....6.... ......
+ 0x46, 0x1e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, // F.......>.......
+ 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ....@.
};
static const uint8_t vs_font_distance_field_subpixel_mtl[790] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0xf1, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/common/image.cpp b/3rdparty/bgfx/examples/common/image.cpp
deleted file mode 100644
index 11163f768d7..00000000000
--- a/3rdparty/bgfx/examples/common/image.cpp
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#include "entry/dbg.h"
-
-#include <bgfx/bgfx.h>
-#include <bx/allocator.h>
-#include <bx/endian.h>
-#include <bx/readerwriter.h>
-#include "bgfx_utils.h"
-
-BX_PRAGMA_DIAGNOSTIC_PUSH()
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wtype-limits")
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-parameter")
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-value")
-BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4100) // error C4100: '' : unreferenced formal parameter
-#if BX_PLATFORM_EMSCRIPTEN
-# include <compat/ctype.h>
-#endif // BX_PLATFORM_EMSCRIPTEN
-#define MINIZ_NO_STDIO
-#define TINYEXR_IMPLEMENTATION
-#include <tinyexr/tinyexr.h>
-BX_PRAGMA_DIAGNOSTIC_POP()
-
-#define LODEPNG_NO_COMPILE_ENCODER
-#define LODEPNG_NO_COMPILE_DISK
-#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
-#define LODEPNG_NO_COMPILE_ERROR_TEXT
-#define LODEPNG_NO_COMPILE_ALLOCATORS
-#define LODEPNG_NO_COMPILE_CPP
-#include <lodepng/lodepng.h>
-
-typedef unsigned char stbi_uc;
-extern "C" int stbi_is_hdr_from_memory(stbi_uc const* _buffer, int _len);
-extern "C" stbi_uc* stbi_load_from_memory(stbi_uc const* _buffer, int _len, int* _x, int* _y, int* _comp, int _req_comp);
-extern "C" float* stbi_loadf_from_memory(stbi_uc const* _buffer, int _len, int* _x, int* _y, int* _comp, int _req_comp);
-extern "C" void stbi_image_free(void* _ptr);
-extern void lodepng_free(void* _ptr);
-
-namespace bgfx
-{
- struct ImageMip
- {
- TextureFormat::Enum m_format;
- uint32_t m_width;
- uint32_t m_height;
- uint32_t m_blockSize;
- uint32_t m_size;
- uint8_t m_bpp;
- bool m_hasAlpha;
- const uint8_t* m_data;
- };
-
- uint32_t imageGetSize(
- TextureInfo* _info
- , uint16_t _width
- , uint16_t _height
- , uint16_t _depth
- , bool _cubeMap
- , bool _hasMips
- , uint16_t _numLayers
- , TextureFormat::Enum _format
- );
-
- ///
- ImageContainer* imageParseBgfx(bx::AllocatorI* _allocator, const void* _src, uint32_t _size);
-
- ///
- bool imageConvert(
- void* _dst
- , TextureFormat::Enum _dstFormat
- , const void* _src
- , TextureFormat::Enum _srcFormat
- , uint32_t _width
- , uint32_t _height
- );
-
- ///
- ImageContainer* imageConvert(
- bx::AllocatorI* _allocator
- , TextureFormat::Enum _dstFormat
- , const ImageContainer& _input
- );
-
-} // namespace bgfx
-
-namespace bgfx
-{
- static ImageContainer* imageParseLodePng(bx::AllocatorI* _allocator, const void* _data, uint32_t _size)
- {
- static uint8_t pngMagic[] = { 0x89, 0x50, 0x4E, 0x47, 0x0d, 0x0a };
-
- if (0 != bx::memCmp(_data, pngMagic, sizeof(pngMagic) ) )
- {
- return NULL;
- }
-
- ImageContainer* output = NULL;
- bgfx::TextureFormat::Enum format = bgfx::TextureFormat::RGBA8;
- uint32_t width = 0;
- uint32_t height = 0;
-
- unsigned error;
- LodePNGState state;
- lodepng_state_init(&state);
- state.decoder.color_convert = 0;
-
- uint8_t* data = NULL;
- error = lodepng_decode(&data, &width, &height, &state, (uint8_t*)_data, _size);
-
- if (0 == error)
- {
- switch (state.info_raw.bitdepth)
- {
- case 8:
- switch (state.info_raw.colortype)
- {
- case LCT_GREY:
- format = bgfx::TextureFormat::R8;
- break;
-
- case LCT_GREY_ALPHA:
- format = bgfx::TextureFormat::RG8;
- break;
-
- case LCT_RGB:
- format = bgfx::TextureFormat::RGB8;
- break;
-
- case LCT_RGBA:
- format = bgfx::TextureFormat::RGBA8;
- break;
-
- case LCT_PALETTE:
- break;
- }
- break;
-
- case 16:
- switch (state.info_raw.colortype)
- {
- case LCT_GREY:
- for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
- {
- uint16_t* rgba = (uint16_t*)data + ii;
- rgba[0] = bx::toHostEndian(rgba[0], false);
- }
- format = bgfx::TextureFormat::R16;
- break;
-
- case LCT_GREY_ALPHA:
- for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
- {
- uint16_t* rgba = (uint16_t*)data + ii*2;
- rgba[0] = bx::toHostEndian(rgba[0], false);
- rgba[1] = bx::toHostEndian(rgba[1], false);
- }
- format = bgfx::TextureFormat::RG16;
- break;
-
- case LCT_RGBA:
- for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
- {
- uint16_t* rgba = (uint16_t*)data + ii*4;
- rgba[0] = bx::toHostEndian(rgba[0], false);
- rgba[1] = bx::toHostEndian(rgba[1], false);
- rgba[2] = bx::toHostEndian(rgba[2], false);
- rgba[3] = bx::toHostEndian(rgba[3], false);
- }
- format = bgfx::TextureFormat::RGBA16;
- break;
-
- case LCT_RGB:
- case LCT_PALETTE:
- break;
- }
- break;
-
- default:
- break;
- }
-
- output = imageAlloc(_allocator
- , format
- , uint16_t(width)
- , uint16_t(height)
- , 0
- , 1
- , false
- , false
- , data
- );
- }
-
- lodepng_state_cleanup(&state);
- lodepng_free(data);
-
- return output;
- }
-
- static ImageContainer* imageParseTinyExr(bx::AllocatorI* _allocator, const void* _data, uint32_t _size)
- {
- EXRVersion exrVersion;
- int result = ParseEXRVersionFromMemory(&exrVersion, (uint8_t*)_data, _size);
- if (TINYEXR_SUCCESS != result)
- {
- return NULL;
- }
-
- bgfx::TextureFormat::Enum format = bgfx::TextureFormat::RGBA8;
- uint32_t width = 0;
- uint32_t height = 0;
-
- uint8_t* data = NULL;
- const char* err = NULL;
- EXRHeader exrHeader;
- result = ParseEXRHeaderFromMemory(&exrHeader, &exrVersion, (uint8_t*)_data, _size, &err);
- if (TINYEXR_SUCCESS == result)
- {
- EXRImage exrImage;
- InitEXRImage(&exrImage);
-
- result = LoadEXRImageFromMemory(&exrImage, &exrHeader, (uint8_t*)_data, _size, &err);
- if (TINYEXR_SUCCESS == result)
- {
- uint8_t idxR = UINT8_MAX;
- uint8_t idxG = UINT8_MAX;
- uint8_t idxB = UINT8_MAX;
- uint8_t idxA = UINT8_MAX;
- for (uint8_t ii = 0, num = uint8_t(exrHeader.num_channels); ii < num; ++ii)
- {
- const EXRChannelInfo& channel = exrHeader.channels[ii];
- if (UINT8_MAX == idxR
- && 0 == bx::strncmp(channel.name, "R") )
- {
- idxR = ii;
- }
- else if (UINT8_MAX == idxG
- && 0 == bx::strncmp(channel.name, "G") )
- {
- idxG = ii;
- }
- else if (UINT8_MAX == idxB
- && 0 == bx::strncmp(channel.name, "B") )
- {
- idxB = ii;
- }
- else if (UINT8_MAX == idxA
- && 0 == bx::strncmp(channel.name, "A") )
- {
- idxA = ii;
- }
- }
-
- if (UINT8_MAX != idxR)
- {
- const bool asFloat = exrHeader.pixel_types[idxR] == TINYEXR_PIXELTYPE_FLOAT;
- uint32_t srcBpp = 32;
- uint32_t dstBpp = asFloat ? 32 : 16;
- format = asFloat ? TextureFormat::R32F : TextureFormat::R16F;
- uint32_t stepR = 1;
- uint32_t stepG = 0;
- uint32_t stepB = 0;
- uint32_t stepA = 0;
-
- if (UINT8_MAX != idxG)
- {
- srcBpp += 32;
- dstBpp = asFloat ? 64 : 32;
- format = asFloat ? TextureFormat::RG32F : TextureFormat::RG16F;
- stepG = 1;
- }
-
- if (UINT8_MAX != idxB)
- {
- srcBpp += 32;
- dstBpp = asFloat ? 128 : 64;
- format = asFloat ? TextureFormat::RGBA32F : TextureFormat::RGBA16F;
- stepB = 1;
- }
-
- if (UINT8_MAX != idxA)
- {
- srcBpp += 32;
- dstBpp = asFloat ? 128 : 64;
- format = asFloat ? TextureFormat::RGBA32F : TextureFormat::RGBA16F;
- stepA = 1;
- }
-
- data = (uint8_t*)BX_ALLOC(_allocator, exrImage.width * exrImage.height * dstBpp/8);
-
- const float zero = 0.0f;
- const float* srcR = UINT8_MAX == idxR ? &zero : (const float*)(exrImage.images)[idxR];
- const float* srcG = UINT8_MAX == idxG ? &zero : (const float*)(exrImage.images)[idxG];
- const float* srcB = UINT8_MAX == idxB ? &zero : (const float*)(exrImage.images)[idxB];
- const float* srcA = UINT8_MAX == idxA ? &zero : (const float*)(exrImage.images)[idxA];
-
- const uint32_t bytesPerPixel = dstBpp/8;
- for (uint32_t ii = 0, num = exrImage.width * exrImage.height; ii < num; ++ii)
- {
- float rgba[4] =
- {
- *srcR,
- *srcG,
- *srcB,
- *srcA,
- };
- bx::memCopy(&data[ii * bytesPerPixel], rgba, bytesPerPixel);
-
- srcR += stepR;
- srcG += stepG;
- srcB += stepB;
- srcA += stepA;
- }
- }
-
- FreeEXRImage(&exrImage);
- }
-
- FreeEXRHeader(&exrHeader);
- }
-
- ImageContainer* output = imageAlloc(_allocator
- , format
- , uint16_t(width)
- , uint16_t(height)
- , 0
- , 1
- , false
- , false
- , data
- );
- BX_FREE(_allocator, data);
-
- return output;
- }
-
- static ImageContainer* imageParseStbImage(bx::AllocatorI* _allocator, const void* _data, uint32_t _size)
- {
- const int isHdr = stbi_is_hdr_from_memory((const uint8_t*)_data, (int)_size);
-
- void* data;
- uint32_t width = 0;
- uint32_t height = 0;
- int comp = 0;
- if (isHdr) { data = stbi_loadf_from_memory((const uint8_t*)_data, (int)_size, (int*)&width, (int*)&height, &comp, 4); }
- else { data = stbi_load_from_memory ((const uint8_t*)_data, (int)_size, (int*)&width, (int*)&height, &comp, 0); }
-
- if (NULL == data)
- {
- return NULL;
- }
-
- bgfx::TextureFormat::Enum format;
- if (isHdr)
- {
- format = bgfx::TextureFormat::RGBA32F;
- }
- else
- {
- if (1 == comp) { format = bgfx::TextureFormat::R8; }
- else if (2 == comp) { format = bgfx::TextureFormat::RG8; }
- else if (3 == comp) { format = bgfx::TextureFormat::RGB8; }
- else/*if (4 == comp)*/ { format = bgfx::TextureFormat::RGBA8; }
- }
-
- ImageContainer* output = imageAlloc(_allocator
- , format
- , uint16_t(width)
- , uint16_t(height)
- , 0
- , 1
- , false
- , false
- , data
- );
- stbi_image_free(data);
-
- return output;
- }
-
- ImageContainer* imageParse(bx::AllocatorI* _allocator, const void* _data, uint32_t _size, TextureFormat::Enum _dstFormat)
- {
- ImageContainer* input = imageParseBgfx (_allocator, _data, _size) ;
- input = NULL == input ? imageParseLodePng (_allocator, _data, _size) : input;
- input = NULL == input ? imageParseTinyExr (_allocator, _data, _size) : input;
- input = NULL == input ? imageParseStbImage(_allocator, _data, _size) : input;
-
- if (NULL == input)
- {
- return NULL;
- }
-
- _dstFormat = TextureFormat::Count == _dstFormat
- ? input->m_format
- : _dstFormat
- ;
-
- if (_dstFormat == input->m_format)
- {
- return input;
- }
-
- ImageContainer* output = imageConvert(_allocator, _dstFormat, *input);
- imageFree(input);
-
- return output;
- }
-
-} // namespace bgfx
diff --git a/3rdparty/bgfx/examples/common/image.h b/3rdparty/bgfx/examples/common/image.h
deleted file mode 100644
index 5c8ac14685f..00000000000
--- a/3rdparty/bgfx/examples/common/image.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#ifndef IMAGE_H_HEADER_GUARD
-#define IMAGE_H_HEADER_GUARD
-
-namespace bgfx
-{
- ///
- struct ImageContainer
- {
- bx::AllocatorI* m_allocator;
- void* m_data;
-
- TextureFormat::Enum m_format;
-
- uint32_t m_size;
- uint32_t m_offset;
- uint32_t m_width;
- uint32_t m_height;
- uint32_t m_depth;
- uint16_t m_numLayers;
- uint8_t m_numMips;
- bool m_hasAlpha;
- bool m_cubeMap;
- bool m_ktx;
- bool m_ktxLE;
- bool m_srgb;
- };
-
- ///
- ImageContainer* imageParse(
- bx::AllocatorI* _allocator
- , const void* _data
- , uint32_t _size
- , TextureFormat::Enum _dstFormat = TextureFormat::Count
- );
-
- ///
- ImageContainer* imageAlloc(
- bx::AllocatorI* _allocator
- , TextureFormat::Enum _format
- , uint16_t _width
- , uint16_t _height
- , uint16_t _depth
- , uint16_t _numLayers
- , bool _cubeMap
- , bool _hasMips
- , const void* _data = NULL
- );
-
- ///
- void imageFree(ImageContainer* _imageContainer);
-
- /// Converts format to string.
- const char* getName(TextureFormat::Enum _format);
-
-} // namespace bgfx
-
-#endif // IMAGE_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.bin.h b/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.bin.h
index 9cad96b4d4d..a8d71299d5d 100644
--- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_color.bin.h
@@ -1,180 +1,180 @@
static const uint8_t fs_imgui_color_glsl[89] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH....I..J...va
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH....I..J...va
0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, // v_color0;.void
0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, // main ().{. gl_F
0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, // ragColor = v_col
0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // or0;.}...
};
-static const uint8_t fs_imgui_color_spv[2065] =
+static const uint8_t fs_imgui_color_spv[2079] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x04, 0x08, 0x03, 0x02, 0x23, 0x07, // FSH....I......#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........za......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, // w...............
- 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, // ........5...vec4
- 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // _splat(f1;......
- 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xff, 0x0f, 0x00, 0x00, // ...._x..........
- 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // @main(vf4;vf4;..
- 0x05, 0x00, 0x05, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....O0..v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // .........%..gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ragData_0_......
- 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, // ....bgfx_VoidFra
- 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // g.......,N..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // m........@..v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, // lor0........w...
- 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // v_color0........
- 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // 0_.......G..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // m...........gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0xc7, 0x02, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ....$Global.....
- 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, // ........u_viewRe
- 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ct..............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, // u_viewTexel.....
- 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, // ........u_view..
- 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
- 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // vView...........
- 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_proj......
- 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, // ........u_invPro
- 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // j...............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, // u_viewProj......
- 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // wProj...........
- 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_model.....
- 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // ........u_modelV
- 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // iew.............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
- 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, // ............u_al
- 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, // phaRef4.G...w...
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf0, 0x06, 0x00, 0x00, // ........G.......
- 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ....@...H.......
- 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xc7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, // ........H.......
- 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
- 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
- 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
- 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, // .... ... .......
- 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, // ........!.......
- 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x3d, 0x0b, 0x00, 0x00, // ........!...=...
- 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....w....... ...
- 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
- 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
- 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
- 0xf0, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // ....e...j.......
- 0xc7, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e.......e...e...
- 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
- 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........G......
- 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, // =........@..w...
- 0x3e, 0x00, 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, // >....G...@..9...
- 0x08, 0x00, 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, // ....ya.......G..
- 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, // ....=...........
- 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, // ....>...........
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....8...6.......
- 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 5...........7...
- 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, // ................
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =.......dW......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =........N......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =.......I9......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // =........9......
- 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, // P........*..dW..
- 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, // .N..I9...9......
- 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // .*..8...6.......
- 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // ........=...7...
- 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....O0..7.......
- 0xa2, 0x25, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xee, 0x5f, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .%......._..;...
- 0x8a, 0x02, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....,N......>...
- 0x2c, 0x4e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // ,N......9.......
- 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....5...,N..=...
- 0x1d, 0x00, 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....X[..O0..>...
- 0xa2, 0x25, 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // .%..X[......8...
- 0x00, // .
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x03, 0x02, // FSH....I........
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, // #.........za....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, // ..w.............
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, // ................
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, // ......5...vec4_s
+ 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, // plat(f1;........
+ 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x40, 0x6d, // .._x..........@m
+ 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, // ain(vf4;vf4;....
+ 0x05, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..O0..v_color0..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa2, 0x25, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // .......%..gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, // gData_0_........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, // ..bgfx_VoidFrag.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......,N..param.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .......@..v_colo
+ 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, // r0........w...v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, // color0..........
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......G..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // ..........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc7, 0x02, // gData_0_........
+ 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, // ..$Global.......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, // viewTexel.......
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
+ 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, // iew.............
+ 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, // ..u_proj........
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc7, 0x02, // viewProj........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, // roj.............
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc7, 0x02, // ..u_model.......
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.............u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
+ 0x06, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..........u_alph
+ 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, // aRef4.G...w.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, // ......G.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf0, 0x06, 0x00, 0x00, 0x06, 0x00, // ......G.........
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#...`...H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#...`...H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc7, 0x02, 0x00, 0x00, 0x0b, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xc7, 0x02, // ..#... ...G.....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // .. ... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......!.........
+ 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x3d, 0x0b, 0x00, 0x00, 0x08, 0x00, // ......!...=.....
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, // .......... .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, // ..........;.....
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..w....... .....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, // ..........;.....
+ 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xf0, 0x06, // ..j... .........
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xc7, 0x02, // ..e...j.........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0xf0, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......e...e.....
+ 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......G......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3e, 0x00, // .......@..w...>.
+ 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, // ...G...@..9.....
+ 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x9a, 0x16, // ..ya.......G....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, // ..=.............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, // ..>.............
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, // ..8...6.......5.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......dW......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......N......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......I9......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......9......P.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xa9, 0x4e, // .......*..dW...N
+ 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, // ..I9...9.......*
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0x0f, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ......=...7.....
+ 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa2, 0x25, // ..O0..7........%
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xee, 0x5f, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, // ......._..;.....
+ 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2c, 0x4e, // ..,N......>...,N
+ 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, // ......9.........
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..5...,N..=.....
+ 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x25, // ..X[..O0..>....%
+ 0x00, 0x00, 0x58, 0x5b, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..X[......8....
};
-static const uint8_t fs_imgui_color_dx9[129] =
+static const uint8_t fs_imgui_color_dx9[131] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x74, 0x00, 0x00, 0x03, 0xff, 0xff, // FSH....I..t.....
- 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#...
- 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
- 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....ps_3_0.Micro
- 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
- 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, // ader Compiler 10
- 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, // .1..............
- 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, // ................
- 0x00, // .
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x03, // FSH....I..t.....
+ 0xff, 0xff, 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, // ......CTAB....#.
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, // 10.1............
+ 0x0f, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, // ................
+ 0x00, 0x00, 0x00, // ...
};
-static const uint8_t fs_imgui_color_dx11[260] =
+static const uint8_t fs_imgui_color_dx11[262] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0xf4, 0x00, 0x44, 0x58, 0x42, 0x43, // FSH....I....DXBC
- 0xa6, 0x7f, 0x08, 0xe2, 0x95, 0xbd, 0x5f, 0xa3, 0x3f, 0x5b, 0x58, 0x8e, 0x54, 0x0f, 0x89, 0x67, // ......_.?[X.T..g
- 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
- 0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, // ........ISGNL...
- 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........8.......
- 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // D...............
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
- 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, // ION.COLOR...OSGN
- 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
- 0x53, 0x48, 0x44, 0x52, 0x38, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, // SHDR8...@.......
- 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, // b...........e...
- 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, // . ......6.... ..
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, // ....F.......>...
- 0x00, 0x00, 0x00, 0x00, // ....
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x44, 0x58, // FSH....I......DX
+ 0x42, 0x43, 0xa6, 0x7f, 0x08, 0xe2, 0x95, 0xbd, 0x5f, 0xa3, 0x3f, 0x5b, 0x58, 0x8e, 0x54, 0x0f, // BC......_.?[X.T.
+ 0x89, 0x67, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // .g............,.
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, // ..........ISGNL.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........8.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ..D.............
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, // ..........SV_POS
+ 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0xab, 0xab, 0x4f, 0x53, // ITION.COLOR...OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x38, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0e, 0x00, // ..SHDR8...@.....
+ 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, // ..b...........e.
+ 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, // ... ......6....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......F.......>.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ......
};
static const uint8_t fs_imgui_color_mtl[404] =
{
- 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x75, 0x73, // FSH....I......us
+ 0x46, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x75, 0x73, // FSH....I......us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.bin.h b/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.bin.h
index d0d5acf6424..0b69b9f5be4 100644
--- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_imgui_cubemap_glsl[363] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH....e...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH....e...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, // ...s_texColor...
0x00, 0x01, 0x00, 0x33, 0x01, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // ...3...varying h
@@ -24,295 +24,320 @@ static const uint8_t fs_imgui_cubemap_glsl[363] =
0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, // _FragColor = tmp
0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // var_1;.}...
};
-static const uint8_t fs_imgui_cubemap_spv[3585] =
+static const uint8_t fs_imgui_cubemap_spv[3991] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH....e...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH....e...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x01, 0x00, 0x00, // geLodEnabled....
- 0x01, 0x00, 0xdc, 0x0d, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ......#.........
- 0x8e, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // .a..............
- 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
- 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, // main....4.......
- 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
- 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....main........
- 0x67, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, // g...BgfxSamplerC
- 0x75, 0x62, 0x65, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ube.....g.......
- 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // m_sampler.......
- 0x67, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // g.......m_textur
- 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x11, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, // e...........bgfx
- 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x4c, 0x6f, 0x64, 0x28, 0x73, // TextureCubeLod(s
- 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, // truct-BgfxSample
- 0x72, 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, // rCube-p1-tC11;vf
- 0x33, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x0e, 0x00, 0x00, // 3;f1;.......'...
- 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // _sampler........
- 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ...._coord......
- 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ...._level......
- 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, // 5...vec4_splat(f
- 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, // 1;.........._x..
- 0x05, 0x00, 0x06, 0x00, 0x9e, 0x16, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, // ........@main(vf
- 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x32, 0x00, 0x00, // 3;vf4;.......2..
- 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // v_normal........
- 0x02, 0x25, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // .%..gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // 0_......C...s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, // xColor..........
- 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, // s_texColorSample
- 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // r...........s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // xColorTexture...
- 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, // ........bgfx_Voi
- 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd5, 0x54, 0x00, 0x00, // dFrag........T..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, // param...........
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, // color...........
- 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa5, 0x09, 0x00, 0x00, // $Global.........
- 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, // ....u_viewRect..
- 0x06, 0x00, 0x06, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, // ewTexel.........
- 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_view......
- 0xa5, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
- 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // w...............
- 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa5, 0x09, 0x00, 0x00, // u_proj..........
- 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // ....u_invProj...
- 0x06, 0x00, 0x06, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xa5, 0x09, 0x00, 0x00, // ewProj..........
- 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ....u_invViewPro
- 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // j...............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa5, 0x09, 0x00, 0x00, // u_model.........
- 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, // ....u_modelView.
- 0x06, 0x00, 0x07, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
- 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, // delViewProj.....
- 0xa5, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ........u_alphaR
- 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, // ef4.............
- 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, // u_imageLodEnable
- 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // d.......B.......
- 0x05, 0x00, 0x04, 0x00, 0x45, 0x4e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // ....EN..param...
- 0x05, 0x00, 0x04, 0x00, 0xc9, 0x2e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // ........param...
- 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, // ........alpha...
- 0x05, 0x00, 0x05, 0x00, 0xee, 0x40, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, // .....@..v_normal
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, // ........4...v_no
- 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, // rmal............
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x04, 0x00, 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....G..param...
- 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // ........param...
- 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // ........gl_FragD
- 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, // ata_0_..G.......
- 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, // ".......G.......
- 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, // !.......G.......
- 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, // ".......G.......
- 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xce, 0x02, 0x00, 0x00, // !.......G.......
- 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, // ....@...H.......
- 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xa5, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, // ........H.......
- 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0xa5, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, // ........H.......
- 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xa5, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, // ........H.......
- 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
- 0xa5, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, // ........H.......
- 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xa5, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa5, 0x09, 0x00, 0x00, // ........H.......
- 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
- 0xa5, 0x09, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, // ........#...0...
- 0x47, 0x00, 0x03, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // G...........G...
- 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // B...".......G...
- 0x34, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // 4...........G...
- 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, // ................
- 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....!...........
- 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x98, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x67, 0x09, 0x00, 0x00, // ............g...
- 0xfc, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, // ........ ...!...
- 0x00, 0x00, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // ....g...........
- 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0xaf, 0x04, 0x00, 0x00, // ........!.......
- 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, // ....!...........
- 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, // !...............
- 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x21, 0x00, 0x05, 0x00, 0x2e, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, // !...............
- 0x9a, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, // ....;...!...C...
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...y.......
- 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, // ....;...y.......
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...........
- 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, // ....;...........
- 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
- 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, // ................
- 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....e...........
- 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
- 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // +.......j... ...
- 0x1c, 0x00, 0x04, 0x00, 0xce, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ........e...j...
- 0x1e, 0x00, 0x0f, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xce, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e.......e...
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // e........... ...
- 0x5f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa5, 0x09, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // _...........;...
- 0x5f, 0x00, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // _...B.......+...
- 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ..../.......+...
- 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3e, 0x2b, 0x00, 0x04, 0x00, // ..........L>+...
- 0x0d, 0x00, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x2b, 0x00, 0x04, 0x00, // ....!.....L?+...
- 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x96, 0x02, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....4....... ...
- 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9b, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, // ............6...
- 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // ....Sa..;.......
- 0xef, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // .G......;.......
- 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // ........=.......
- 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, // !C......=.......
- 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x67, 0x09, 0x00, 0x00, // .3......P...g...
- 0x12, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // . ..!C...3..>...
- 0x43, 0x12, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // C.... ..=.......
- 0xee, 0x40, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, // .@..4...>....G..
- 0xee, 0x40, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, // .@..9.......ya..
- 0x9e, 0x16, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....G......=...
- 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
- 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // ............8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0xaf, 0x04, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x21, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // ....7...!...'...
- 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7...........7...
- 0x8a, 0x02, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x24, 0x54, 0x00, 0x00, // ............$T..
- 0x41, 0x00, 0x05, 0x00, 0x15, 0x03, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // A...........'...
- 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x6d, 0x29, 0x00, 0x00, // ....=.......m)..
- 0xc0, 0x1c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xe4, 0x55, 0x00, 0x00, // ....A...y....U..
- 0x27, 0x0e, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // '.......=.......
- 0xf2, 0x4e, 0x00, 0x00, 0xe4, 0x55, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, // .N...U..V.......
- 0x32, 0x39, 0x00, 0x00, 0x6d, 0x29, 0x00, 0x00, 0xf2, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // 29..m)...N..=...
- 0x18, 0x00, 0x00, 0x00, 0xcd, 0x19, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ............=...
- 0x0d, 0x00, 0x00, 0x00, 0x3d, 0x3e, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, // ....=>......X...
- 0x1d, 0x00, 0x00, 0x00, 0x11, 0x1c, 0x00, 0x00, 0x32, 0x39, 0x00, 0x00, 0xcd, 0x19, 0x00, 0x00, // ........29......
- 0x02, 0x00, 0x00, 0x00, 0x3d, 0x3e, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x11, 0x1c, 0x00, 0x00, // ....=>..........
- 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, // 8...6.......5...
- 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........7.......
- 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ........._..=...
- 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....[......=...
- 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....%S......=...
- 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....=......=...
- 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, // .....=......P...
- 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, // ....V[...[..%S..
- 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, 0x5b, 0x00, 0x00, // .=...=......V[..
- 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9e, 0x16, 0x00, 0x00, // 8...6...........
- 0x00, 0x00, 0x00, 0x00, 0x2e, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, // ........7.......
- 0x95, 0x32, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, // .2..7........%..
- 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x19, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........;.......
- 0xd5, 0x54, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // .T......;.......
- 0x45, 0x4e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, // EN......;.......
- 0xc9, 0x2e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd5, 0x54, 0x00, 0x00, // ........>....T..
- 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, // ....9...........
- 0x35, 0x13, 0x00, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // 5....T..=.......
- 0xe0, 0x51, 0x00, 0x00, 0x95, 0x32, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x45, 0x4e, 0x00, 0x00, // .Q...2..>...EN..
- 0xe0, 0x51, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x75, 0x39, 0x00, 0x00, // .Q..A.......u9..
- 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // B.../.......=...
- 0x0d, 0x00, 0x00, 0x00, 0x8d, 0x61, 0x00, 0x00, 0x75, 0x39, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....a..u9..>...
- 0xc9, 0x2e, 0x00, 0x00, 0x8d, 0x61, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // .....a..9.......
- 0x0f, 0x4e, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0x45, 0x4e, 0x00, 0x00, // .N......C...EN..
- 0xc9, 0x2e, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, // ....O...........
- 0x0f, 0x4e, 0x00, 0x00, 0x0f, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .N...N..........
- 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x6b, 0x20, 0x00, 0x00, // ....A.......k ..
- 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // B.../.......=...
- 0x0d, 0x00, 0x00, 0x00, 0xa3, 0x46, 0x00, 0x00, 0x6b, 0x20, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, // .....F..k ......
- 0x0d, 0x00, 0x00, 0x00, 0xe2, 0x3b, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0xa3, 0x46, 0x00, 0x00, // .....;..!....F..
- 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, // ................
- 0xe2, 0x3b, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, // .;..Q........"..
- 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........Q.......
- 0x7b, 0x2f, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // {/..........Q...
- 0x0d, 0x00, 0x00, 0x00, 0x36, 0x60, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....6`..........
- 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0f, 0x50, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, // P........P..."..
- 0x7b, 0x2f, 0x00, 0x00, 0x36, 0x60, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // {/..6`......>...
- 0x02, 0x25, 0x00, 0x00, 0x0f, 0x50, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // .%...P......8...
- 0x00, // .
+ 0x01, 0x00, 0x70, 0x0f, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, // ..p.....#.......
+ 0x08, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, // ..za............
+ 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, // ..........GLSL.s
+ 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, // td.450..........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0xd1, 0x0d, // ..main....4.....
+ 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x11, 0x00, 0xf4, 0x10, // ..main..........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, // ..bgfxTextureCub
+ 0x65, 0x4c, 0x6f, 0x64, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, // eLod(struct-Bgfx
+ 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, 0x31, 0x2d, 0x74, // SamplerCube-p1-t
+ 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, // C11;vf3;f1;.....
+ 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, // ..~..._sampler.m
+ 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, // _sampler........
+ 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, // .._sampler.m_tex
+ 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, // ture.........._c
+ 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, // oord.........._l
+ 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, // evel......5...ve
+ 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, // c4_splat(f1;....
+ 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x9e, 0x16, // ......_x........
+ 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, // ..@main(vf3;vf4;
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x42, 0x26, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, // ......B&..v_norm
+ 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x19, 0x46, 0x00, 0x00, 0x67, 0x6c, // al.........F..gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, // _FragData_0_....
+ 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, // ..g...BgfxSample
+ 0x72, 0x43, 0x75, 0x62, 0x65, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, // rCube.....g.....
+ 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, // ..m_sampler.....
+ 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, // ..g.......m_text
+ 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, // ure...........fl
+ 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, // attenTemp.......
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, // ..s_texColorSamp
+ 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, // ler...........s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, // texColorTexture.
+ 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ..........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, // olor.m_sampler..
+ 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ......P...s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, // olor.m_texture..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, // ..........bgfx_V
+ 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, // oidFrag........]
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, // ..param.........
+ 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0e, 0x07, // ..color.........
+ 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0e, 0x07, // ..$Global.......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0e, 0x07, // viewTexel.......
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
+ 0x06, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x04, 0x00, // iew.............
+ 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0e, 0x07, // ..u_proj........
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0e, 0x07, // viewProj........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x08, 0x00, // roj.............
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0e, 0x07, // ..u_model.......
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.............u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
+ 0x06, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..........u_alph
+ 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x0c, 0x00, // aRef4...........
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, // ..u_imageLodEnab
+ 0x6c, 0x65, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, // led.......B.....
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......V..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......9..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......9..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x91, 0x37, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......7..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, // ..........alpha.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, // .......*..v_norm
+ 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x76, 0x5f, // al........4...v_
+ 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, // normal..........
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......U..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // ..........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, // gData_0_..G.....
+ 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, // ..".......G.....
+ 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, // ..!.......G.....
+ 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, // ..".......G.....
+ 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x13, 0x06, // ..!.......G.....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, // ......@...H.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x02, 0x00, // .. ...H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0e, 0x07, // ..........H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, // ..........H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#...`...H.
+ 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x04, 0x00, // ......H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0e, 0x07, // ..........H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, // ..........H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x06, 0x00, // .. ...H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0e, 0x07, // ..........H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, // ..........H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#...`...H.
+ 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x08, 0x00, // ......H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0e, 0x07, // ..........H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, // ..........H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x0a, 0x00, // ......H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0e, 0x07, // ..........H.....
+ 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, // ..........#...0.
+ 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, // ..G...........G.
+ 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..B...".......G.
+ 0x04, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..4...........G.
+ 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, // ................
+ 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, // ......!.........
+ 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, // .......... ...y.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x98, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x74, 0x0b, // ..........!...t.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x15, 0x03, 0x00, 0x00, 0x95, 0x02, // ......y.........
+ 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......!.........
+ 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x2e, 0x0b, 0x00, 0x00, 0x08, 0x00, // ......!.........
+ 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x67, 0x09, // ..............g.
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, // .......... ...!.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, // ......g... ...z.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, // ..........;...z.
+ 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x03, // .......... .....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x03, // ..........;.....
+ 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, // .......... ...{.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, // ..........;...{.
+ 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x03, // .......... .....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x03, // ..........;.....
+ 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..P.......+.....
+ 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, // ................
+ 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..........e.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ......+.......j.
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x13, 0x06, 0x00, 0x00, 0x65, 0x00, // .. ...........e.
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1d, 0x00, // ..j.............
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ......e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x13, 0x06, // ..e...e...e.....
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..e...e.........
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0e, 0x07, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8b, 0x09, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, // ..;.......B.....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, // ..+......./.....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xcd, 0xcc, // ..+.............
+ 0x4c, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0xcd, 0xcc, // L>+.......!.....
+ 0x4c, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, // L?+.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x01, 0x00, // ..;.......4.....
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, // ..;.............
+ 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
+ 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..!...........;.
+ 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, // ......!C......=.
+ 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......3......P.
+ 0x05, 0x00, 0x67, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, // ..g...^ ..!C...3
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, // ..>.......^ ..A.
+ 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, // ..y....V........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, // ..=............V
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, // ..>...........A.
+ 0x05, 0x00, 0x15, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, // .......@........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, // ..=............@
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, // ..>...P.......=.
+ 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x34, 0x0e, 0x00, 0x00, 0x3e, 0x00, // .......*..4...>.
+ 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, // ...U...*..9.....
+ 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0x9e, 0x16, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, // ..ya.......U....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, // ..=.............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, // ..>.............
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x10, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, // ......t...7...y.
+ 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x15, 0x03, 0x00, 0x00, 0xf7, 0x0d, // ..~...7.........
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, // ..7...........7.
+ 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, // ..............._
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, // ..=.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, // ..=.......!A..~.
+ 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, // ..V.......`5....
+ 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x95, 0x22, // ..!A..=........"
+ 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, // ......=........G
+ 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, // ......X.......(=
+ 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, // ..`5...".......G
+ 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // ......(=..8...6.
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, // ......5.........
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, // ..7.............
+ 0x02, 0x00, 0xc6, 0x35, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x1a, // ...5..=.......).
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb4, 0x42, // ......=........B
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x2d, // ......=.......T-
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x2d, // ......=.......g-
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x31, // ......P........1
+ 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0x67, 0x2d, // ..)....B..T-..g-
+ 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xee, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // .......1..8...6.
+ 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9e, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x0b, // ................
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x42, 0x26, 0x00, 0x00, 0x37, 0x00, // ..7.......B&..7.
+ 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x19, 0x46, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x53, // .......F.......S
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x07, 0x00, // ..;........]....
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x07, 0x00, // ..;...y....V....
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x07, 0x00, // ..;........9....
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x07, 0x00, // ..;........9....
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x07, 0x00, // ..;........7....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, // ..>....]......9.
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x9d, 0x5d, // ..........5....]
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x14, 0x11, // ..=.......#A....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x3d, 0x00, // ..>....V..#A..=.
+ 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, // .......,..P...>.
+ 0x03, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // ...9...,..=.....
+ 0x00, 0x00, 0xcf, 0x2c, 0x00, 0x00, 0x42, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, // ...,..B&..>....9
+ 0x00, 0x00, 0xcf, 0x2c, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x3d, 0x42, // ...,..A.......=B
+ 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..B.../.......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd6, 0x1f, 0x00, 0x00, 0x3d, 0x42, 0x00, 0x00, 0x3e, 0x00, // ..........=B..>.
+ 0x03, 0x00, 0x91, 0x37, 0x00, 0x00, 0xd6, 0x1f, 0x00, 0x00, 0x39, 0x00, 0x08, 0x00, 0x1d, 0x00, // ...7......9.....
+ 0x00, 0x00, 0xd7, 0x56, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0xbe, 0x39, // ...V.......V...9
+ 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, // ...9...7..O.....
+ 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0xd7, 0x56, 0x00, 0x00, 0xd7, 0x56, 0x00, 0x00, 0x00, 0x00, // .......V...V....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, // ..........A.....
+ 0x00, 0x00, 0x79, 0x5a, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0d, 0x0a, // ..yZ..B.../.....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x32, 0x36, 0x00, 0x00, 0x79, 0x5a, // ..=.......26..yZ
+ 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xaa, 0x44, 0x00, 0x00, 0x21, 0x0a, // ...........D..!.
+ 0x00, 0x00, 0x32, 0x36, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, // ..26............
+ 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xaa, 0x44, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // .......D..Q.....
+ 0x00, 0x00, 0xc9, 0x2a, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ...*..........Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0a, 0x1f, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0x18, 0x0e, // ..Q........O....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9e, 0x3f, // ......P........?
+ 0x00, 0x00, 0xc9, 0x2a, 0x00, 0x00, 0x0a, 0x1f, 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0xf3, 0x10, // ...*.......O....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x19, 0x46, 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xfd, 0x00, // ..>....F...?....
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..8....
};
-static const uint8_t fs_imgui_cubemap_dx9[382] =
+static const uint8_t fs_imgui_cubemap_dx9[384] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH....e...s_tex
+ 0x46, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH....e...s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, // Color0......u_im
0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x01, 0x00, // ageLodEnabled...
- 0x00, 0x01, 0x00, 0x48, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x00, 0x43, 0x54, 0x41, // ...H.........CTA
- 0x42, 0x1c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, // B...............
- 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, // .............D..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, // .`...........t..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // .....s_texColor.
- 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, // .u_imageLodEnabl
- 0x65, 0x64, 0x00, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, // ed..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0xcd, 0xcc, 0x4c, // 0.1..Q.........L
- 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, // ?..L>...........
- 0x02, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x07, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
- 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, // ................
- 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x5f, 0x00, 0x00, // ............._..
- 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
- 0x02, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, // ................
- 0x80, 0x00, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0x55, // ...U...........U
- 0x80, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x55, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // .......U......
+ 0x00, 0x01, 0x00, 0x48, 0x01, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x00, 0x43, // ...H...........C
+ 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, // TAB.............
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x44, // ...............D
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x74, // ...`...........t
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, // .......s_texColo
+ 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, // ...u_imageLodEna
+ 0x62, 0x6c, 0x65, 0x64, 0x00, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, // bled............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0xcd, // 10.1..Q........
+ 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, // .L?..L>.........
+ 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x07, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, // ................
+ 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x5f, // ..............._
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x01, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x08, 0x08, 0x80, 0x00, // .....U..........
+ 0x00, 0x55, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x55, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // .U.......U......
};
-static const uint8_t fs_imgui_cubemap_dx11[441] =
+static const uint8_t fs_imgui_cubemap_dx11[443] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH....e...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH....e...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x00, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, // ...s_texColor0..
- 0x00, 0x01, 0x00, 0x80, 0x01, 0x44, 0x58, 0x42, 0x43, 0x3a, 0x0c, 0x3f, 0xee, 0x22, 0x31, 0x60, // .....DXBC:.?."1`
- 0x3f, 0x80, 0x4a, 0x2e, 0x3f, 0xcb, 0x18, 0x1c, 0x94, 0x01, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, // ?.J.?...........
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, // .....,..........
- 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .ISGNL..........
- 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .8..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4e, 0x4f, 0x52, // .SV_POSITION.NOR
- 0x4d, 0x41, 0x4c, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // MAL..OSGN,......
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ..... ..........
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, // .............SV_
- 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xc4, 0x00, 0x00, // TARGET...SHDR...
- 0x00, 0x40, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, // .@...1...Y...F.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, // .........Z....`.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, // .....X0...p.....
- 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, // .UU..b...r......
- 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, // .e.... ......h..
- 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .....H..........
- 0x00, 0x46, 0x12, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, // .F.......F~.....
- 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, // ..`........ ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....6...r .....
- 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x82, 0x20, 0x10, // .F.......2.... .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....... ........
- 0x00, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, // ..@....L?.@....L
- 0x3e, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // >>.......
+ 0x00, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x3a, 0x0c, 0x3f, 0xee, 0x22, // .......DXBC:.?."
+ 0x31, 0x60, 0x3f, 0x80, 0x4a, 0x2e, 0x3f, 0xcb, 0x18, 0x1c, 0x94, 0x01, 0x00, 0x00, 0x00, 0x80, // 1`?.J.?.........
+ 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb4, // .......,........
+ 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, // ...ISGNL........
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, // ...8............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, // ...........D....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, // ................
+ 0x07, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4e, // ...SV_POSITION.N
+ 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, // ORMAL..OSGN,....
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....... ........
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, // ...............S
+ 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xc4, // V_TARGET...SHDR.
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, // ...@...1...Y...F
+ 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, // . .........Z....
+ 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, // `......X0...p...
+ 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, // ...UU..b...r....
+ 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, // ...e.... ......h
+ 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, // .......H........
+ 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, // ...F.......F~...
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, // ....`........ ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, // .......6...r ...
+ 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x82, // ...F.......2....
+ 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ ......
+ 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x40, 0x00, 0x00, 0xcd, // ....@....L?.@...
+ 0xcc, 0x4c, 0x3e, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // .L>>.......
};
static const uint8_t fs_imgui_cubemap_mtl[747] =
{
- 0x46, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH....e...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH....e...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0xc4, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ......using name
0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, // space metal;.str
diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_image.bin.h b/3rdparty/bgfx/examples/common/imgui/fs_imgui_image.bin.h
index 54fe9d1a528..3943125e11a 100644
--- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_image.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_image.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_imgui_image_glsl[360] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, // ...s_texColor...
0x00, 0x01, 0x00, 0x30, 0x01, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // ...0...varying h
@@ -24,296 +24,322 @@ static const uint8_t fs_imgui_image_glsl[360] =
0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // agColor = tmpvar
0x5f, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _1;.}...
};
-static const uint8_t fs_imgui_image_spv[3597] =
+static const uint8_t fs_imgui_image_spv[4003] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x01, 0x00, 0x00, // geLodEnabled....
- 0x01, 0x00, 0xe8, 0x0d, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ......#.........
- 0x8e, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // .a..............
- 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
- 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, // main....t.......
- 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
- 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....main........
- 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, // a...BgfxSampler2
- 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // D.......a.......
- 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // m_sampler.......
- 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // a.......m_textur
- 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0xce, 0x14, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, // e...........bgfx
- 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x28, 0x73, 0x74, 0x72, // Texture2DLod(str
- 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, // uct-BgfxSampler2
- 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x66, 0x31, // D-p1-t211;vf2;f1
- 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, // ;.......'..._sam
- 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, // pler............
- 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2e, 0x12, 0x00, 0x00, // _coord..........
- 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, // _level......5...
- 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, // vec4_splat(f1;..
- 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ........_x......
- 0xe8, 0x16, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, // ....@main(vf2;vf
- 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x32, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, // 4;.......2..v_te
- 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x02, 0x25, 0x00, 0x00, // xcoord0......%..
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x05, 0x00, 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ....C...s_texCol
- 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // or..........s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, // xColorSampler...
- 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ........s_texCol
- 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // orTexture.......
- 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, // ....bgfx_VoidFra
- 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // g........T..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, // m...........colo
- 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x26, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, // r.......&...$Glo
- 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x26, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // bal.....&.......
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_viewRect......
- 0x26, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, // &.......u_viewTe
- 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // xel.....&.......
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x26, 0x05, 0x00, 0x00, // u_view......&...
- 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, // ....u_invView...
- 0x06, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, // ....&.......u_pr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x26, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // oj......&.......
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_invProj.......
- 0x26, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // &.......u_viewPr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x26, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // oj......&.......
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // u_invViewProj...
- 0x06, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....&.......u_mo
- 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x26, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // del.....&.......
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, // u_modelView.....
- 0x26, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // &.......u_modelV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x26, 0x05, 0x00, 0x00, // iewProj.....&...
- 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, // ....u_alphaRef4.
- 0x06, 0x00, 0x08, 0x00, 0x26, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6d, // ....&.......u_im
- 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x00, 0x00, 0x00, // ageLodEnabled...
- 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....B...........
- 0x45, 0x4e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // EN..param.......
- 0xc9, 0x2e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....param.......
- 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // ....alpha.......
- 0xee, 0x40, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // .@..v_texcoord0.
- 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....t...v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0.........gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .G..param.......
- 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....param.......
- 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // 0_..G......."...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // ....G.......!...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // ....G......."...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // ....G.......!...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x88, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....G...........
- 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...H...&.......
- 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, // #.......H...&...
- 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ....#.......H...
- 0x26, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // &...........H...
- 0x26, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // &.......#... ...
- 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...&...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x26, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...&.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...&.......
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, // #...`...H...&...
- 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x26, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // &...........H...
- 0x26, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // &.......#.......
- 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...&...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x26, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...&.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...&.......
- 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, // #.......H...&...
- 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x26, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // &...........H...
- 0x26, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, // &.......#... ...
- 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...&...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x26, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...&.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...&.......
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, // #...`...H...&...
- 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x26, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // &...........H...
- 0x26, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, // &.......#.......
- 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...&...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x26, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...&.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...&.......
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, // #.......H...&...
- 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x26, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // &...........H...
- 0x26, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, // &.......#.......
- 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...&...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....H...&.......
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x26, 0x05, 0x00, 0x00, // #... ...H...&...
- 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#...0...G...
- 0x26, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // &.......G...B...
- 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, // ".......G...t...
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
- 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, // !...............
- 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, // ........a.......
- 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...........
- 0x61, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // a...............
- 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x89, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....!...........
- 0x1b, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // ............!...
- 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, // ............!...
- 0x1f, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // ................
- 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ;.......C.......
- 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, // ...y...........
- 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ;...y...........
- 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ;...............
- 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........ .......
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // +...............
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // ................
- 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
- 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
- 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
- 0x88, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, // ....e...j.......
- 0x26, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // &...........e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x88, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e.......e...e...
- 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xa3, 0x07, 0x00, 0x00, // ........ .......
- 0x02, 0x00, 0x00, 0x00, 0x26, 0x05, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xa3, 0x07, 0x00, 0x00, // ....&...;.......
- 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // B.......+.......
- 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // /.......+.......
- 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, // ........ .......
- 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........+.......
- 0x05, 0x0b, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ......L>+.......
- 0x21, 0x0a, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // !.....L?+.......
- 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, // ........ .......
- 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, // ........;.......
- 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // t....... .......
- 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // ........;.......
- 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // ........6.......
- 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // ................
- 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, // Sa..;........G..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // ....;...........
- 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, // ....=.......!C..
- 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, // ....=........3..
- 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, // ....P...a.... ..
- 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x43, 0x12, 0x00, 0x00, // !C...3..>...C...
- 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // . ..=........@..
- 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // t...>....G...@..
- 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, // 9.......ya......
- 0xef, 0x47, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .G......=.......
- 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........>.......
- 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // ........8...6...
- 0x1d, 0x00, 0x00, 0x00, 0xce, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x04, 0x00, 0x00, // ................
- 0x37, 0x00, 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......'...7...
- 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........7.......
- 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x24, 0x54, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ........$T..A...
- 0x13, 0x03, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ........'.......
- 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x6d, 0x29, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, // =.......m)......
- 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xe4, 0x55, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // A...y....U..'...
- 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf2, 0x4e, 0x00, 0x00, // ....=........N..
- 0xe4, 0x55, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x32, 0x39, 0x00, 0x00, // .U..V.......29..
- 0x6d, 0x29, 0x00, 0x00, 0xf2, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // m)...N..=.......
- 0xcd, 0x19, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
- 0x3d, 0x3e, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // =>......X.......
- 0x11, 0x1c, 0x00, 0x00, 0x32, 0x39, 0x00, 0x00, 0xcd, 0x19, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....29..........
- 0x3d, 0x3e, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x11, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // =>..........8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6.......5.......
- 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // ....7...........
- 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ....._..=.......
- 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .[......=.......
- 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // %S......=.......
- 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .=......=.......
- 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // .=......P.......
- 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, // V[...[..%S...=..
- 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // .=......V[..8...
- 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0x1f, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x95, 0x32, 0x00, 0x00, // ....7........2..
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x02, 0x25, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........%......
- 0xb2, 0x19, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd5, 0x54, 0x00, 0x00, // ....;........T..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x45, 0x4e, 0x00, 0x00, // ....;.......EN..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xc9, 0x2e, 0x00, 0x00, // ....;...........
- 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....>....T......
- 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, // 9...........5...
- 0xd5, 0x54, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xe0, 0x51, 0x00, 0x00, // .T..=........Q..
- 0x95, 0x32, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x45, 0x4e, 0x00, 0x00, 0xe0, 0x51, 0x00, 0x00, // .2..>...EN...Q..
- 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x75, 0x39, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A.......u9..B...
- 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // /.......=.......
- 0x8d, 0x61, 0x00, 0x00, 0x75, 0x39, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x2e, 0x00, 0x00, // .a..u9..>.......
- 0x8d, 0x61, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0f, 0x4e, 0x00, 0x00, // .a..9........N..
- 0xce, 0x14, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0x45, 0x4e, 0x00, 0x00, 0xc9, 0x2e, 0x00, 0x00, // ....C...EN......
- 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x0f, 0x4e, 0x00, 0x00, // O............N..
- 0x0f, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .N..............
- 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x6b, 0x20, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A.......k ..B...
- 0x2f, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // /.......=.......
- 0xa3, 0x46, 0x00, 0x00, 0x6b, 0x20, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .F..k ..........
- 0xe2, 0x3b, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0xa3, 0x46, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, // .;..!....F......
- 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xe2, 0x3b, 0x00, 0x00, // .............;..
- 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, // Q........"......
- 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7b, 0x2f, 0x00, 0x00, // ....Q.......{/..
- 0x18, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........Q.......
- 0x36, 0x60, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, // 6`..........P...
- 0x1d, 0x00, 0x00, 0x00, 0x0f, 0x50, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x7b, 0x2f, 0x00, 0x00, // .....P..."..{/..
- 0x36, 0x60, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x02, 0x25, 0x00, 0x00, // 6`......>....%..
- 0x0f, 0x50, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .P......8....
+ 0x01, 0x00, 0x7c, 0x0f, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, // ..|.....#.......
+ 0x08, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, // ..za............
+ 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, // ..........GLSL.s
+ 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, // td.450..........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, // ..main....t.....
+ 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0xce, 0x14, // ..main..........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x4c, // ..bgfxTexture2DL
+ 0x6f, 0x64, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, // od(struct-BgfxSa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, // mpler2D-p1-t211;
+ 0x76, 0x66, 0x32, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, // vf2;f1;.......~.
+ 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, // .._sampler.m_sam
+ 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, // pler.........._s
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, // ampler.m_texture
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, // .........._coord
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, // .........._level
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, // ......5...vec4_s
+ 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, // plat(f1;........
+ 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe8, 0x16, 0x00, 0x00, 0x40, 0x6d, // .._x..........@m
+ 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, // ain(vf2;vf4;....
+ 0x05, 0x00, 0x42, 0x26, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ..B&..v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x19, 0x46, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // 0......F..gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, // gData_0_......a.
+ 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, // ..BgfxSampler2D.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, // ......a.......m_
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, // sampler.......a.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, // ......m_texture.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, // ..........flatte
+ 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, // nTemp.........s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // texColorSampler.
+ 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ..........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // olorTexture.....
+ 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // .m_sampler......
+ 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ..P...s_texColor
+ 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // .m_texture......
+ 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, // ......bgfx_VoidF
+ 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x70, 0x61, // rag........]..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, // ram...........co
+ 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x24, 0x47, // lor...........$G
+ 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x00, 0x00, // lobal...........
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, // ..u_viewRect....
+ 0x06, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x02, 0x00, // Texel...........
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8f, 0x02, // ..u_view........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, // ......u_invView.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x05, 0x00, // proj............
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invProj.....
+ 0x06, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x07, 0x00, // Proj............
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ..u_invViewProj.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x09, 0x00, // model...........
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, // ..u_modelView...
+ 0x07, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8f, 0x02, // lViewProj.......
+ 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, // ......u_alphaRef
+ 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, // 4.............u_
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x00, // imageLodEnabled.
+ 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ......B.........
+ 0x04, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...V..param.....
+ 0x04, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...9..param.....
+ 0x04, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...9..param.....
+ 0x04, 0x00, 0x91, 0x37, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...7..param.....
+ 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, // ......alpha.....
+ 0x05, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ...*..v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // 0.....t...v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, // oord0.........gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, // _FragData_0_....
+ 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...U..param.....
+ 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ......param.....
+ 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ......gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, // a_0_..G.......".
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, // ......G.......!.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, // ......G.......".
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, // ......G.......!.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x06, 0x00, 0x00, 0x06, 0x00, // ......G.........
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, // ..#...`...H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, // ..#...`...H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, // ..#.......H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x0b, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x8f, 0x02, // ..#... ...H.....
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, // ......#...0...G.
+ 0x03, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, // ..........G...B.
+ 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, // ..".......G...t.
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, // ..........G.....
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, // ..!.............
+ 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, // ...... ...y.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x53, 0x0b, 0x00, 0x00, 0x1d, 0x00, // ......!...S.....
+ 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8a, 0x02, // ..y.............
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, // ..!.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x1f, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x90, 0x02, // ..!.............
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, // ..........a.....
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, // ..a... ...z.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, // ......;...z.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, // ...... .........
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0xee, 0x0e, // ......;.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, // ...... ...{.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, // ......;...{.....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x06, 0x00, // ...... .........
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x50, 0x13, // ......;.......P.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, // ......+.........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, // ................
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, // ......e.........
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, // ..+.......j... .
+ 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xcd, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ..........e...j.
+ 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xcd, 0x06, 0x00, 0x00, 0x65, 0x00, // ..e...e.......e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, // ..e........... .
+ 0x04, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x0c, 0x05, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, // ......B.......+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, // ....../.......+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3e, 0x2b, 0x00, // ............L>+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x2b, 0x00, // ......!.....L?+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, // ......t....... .
+ 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..............6.
+ 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, // ................
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, // ......Sa..;.....
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, // ..........;.....
+ 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ...U......;.....
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ..........=.....
+ 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, // ..!C......=.....
+ 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, // ...3......P...a.
+ 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, // ..^ ..!C...3..>.
+ 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, // ......^ ..A...y.
+ 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...V..........=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, // ...........V..>.
+ 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, // ..........A.....
+ 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...@..........=.
+ 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, // ...........@..>.
+ 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ..P.......=.....
+ 0x00, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, // ...*..t...>....U
+ 0x00, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x79, 0x61, // ...*..9.......ya
+ 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, // .......U......=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ..............>.
+ 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ..............8.
+ 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x14, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x53, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, // ..S...7...y...~.
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, // ..7...........7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
+ 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x3d, 0x00, // ..........._..=.
+ 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, // ......!A..~...V.
+ 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x21, 0x41, // ......`5......!A
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0xe7, 0x15, // ..=........"....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0x2e, 0x12, // ..=........G....
+ 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x60, 0x35, // ..X.......(=..`5
+ 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0xfe, 0x00, // ...".......G....
+ 0x02, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ..(=..8...6.....
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, // ..5...........7.
+ 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x35, // ...............5
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xdd, 0x0e, // ..=.......).....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0xdd, 0x0e, // ..=........B....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0xdd, 0x0e, // ..=.......T-....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xdd, 0x0e, // ..=.......g-....
+ 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x31, 0x00, 0x00, 0x29, 0x1a, // ..P........1..).
+ 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xfe, 0x00, // ...B..T-..g-....
+ 0x02, 0x00, 0xee, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, // ...1..8...6.....
+ 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0b, 0x00, 0x00, 0x37, 0x00, // ..............7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x42, 0x26, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ......B&..7.....
+ 0x00, 0x00, 0x19, 0x46, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, // ...F.......S..;.
+ 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......]......;.
+ 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..y....V......;.
+ 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......9......;.
+ 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......9......;.
+ 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, // .......7......>.
+ 0x03, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...]......9.....
+ 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x3d, 0x00, // ......5....]..=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, // ......#A......>.
+ 0x03, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, // ...V..#A..=.....
+ 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x39, // ...,..P...>....9
+ 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xcf, 0x2c, // ...,..=........,
+ 0x00, 0x00, 0x42, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, 0x00, 0x00, 0xcf, 0x2c, // ..B&..>....9...,
+ 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x3d, 0x42, 0x00, 0x00, 0x42, 0x13, // ..A.......=B..B.
+ 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ../.......=.....
+ 0x00, 0x00, 0xd6, 0x1f, 0x00, 0x00, 0x3d, 0x42, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x91, 0x37, // ......=B..>....7
+ 0x00, 0x00, 0xd6, 0x1f, 0x00, 0x00, 0x39, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd7, 0x56, // ......9........V
+ 0x00, 0x00, 0xce, 0x14, 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0xf7, 0x39, // .......V...9...9
+ 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x0e, // ...7..O.........
+ 0x00, 0x00, 0xd7, 0x56, 0x00, 0x00, 0xd7, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ...V...V........
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x79, 0x5a, // ......A.......yZ
+ 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..B.../.......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x32, 0x36, 0x00, 0x00, 0x79, 0x5a, 0x00, 0x00, 0x85, 0x00, // ......26..yZ....
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xaa, 0x44, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x32, 0x36, // .......D..!...26
+ 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x05, 0x0b, // ................
+ 0x00, 0x00, 0xaa, 0x44, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc9, 0x2a, // ...D..Q........*
+ 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..........Q.....
+ 0x00, 0x00, 0x0a, 0x1f, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, // ..............Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x02, 0x00, // .......O........
+ 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xc9, 0x2a, // ..P........?...*
+ 0x00, 0x00, 0x0a, 0x1f, 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x3e, 0x00, // .......O......>.
+ 0x03, 0x00, 0x19, 0x46, 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ...F...?......8.
+ 0x01, 0x00, 0x00, // ...
};
-static const uint8_t fs_imgui_image_dx9[386] =
+static const uint8_t fs_imgui_image_dx9[388] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH.o.><...s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH.o.><...s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, // Color0......u_im
0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x01, 0x00, // ageLodEnabled...
- 0x00, 0x01, 0x00, 0x4c, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x00, 0x43, 0x54, 0x41, // ...L.........CTA
- 0x42, 0x1c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, // B...............
- 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, // .............D..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, // .`...........t..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // .....s_texColor.
- 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, // .u_imageLodEnabl
- 0x65, 0x64, 0x00, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, // ed..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, // 0.1..Q..........
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x1f, 0x00, 0x00, // ?......L?..L>...
- 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
- 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xd0, // ................
- 0xa0, 0x00, 0x00, 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, // ................
- 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, // ._..............
- 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x0c, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x08, 0x08, // ................
- 0x80, 0x00, 0x00, 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x00, 0x00, 0xff, 0x80, 0xff, 0xff, 0x00, // ...U............
- 0x00, 0x00, // ..
+ 0x00, 0x01, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x00, 0x43, // ...L...........C
+ 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, // TAB.............
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x44, // ...............D
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x74, // ...`...........t
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, // .......s_texColo
+ 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, // ...u_imageLodEna
+ 0x62, 0x6c, 0x65, 0x64, 0x00, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, // bled............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, // 10.1..Q........
+ 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x1f, // ..?......L?..L>.
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, // ................
+ 0x00, 0xd0, 0xa0, 0x00, 0x00, 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, // ................
+ 0x00, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, // ..._............
+ 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x0c, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x08, 0x08, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x00, 0x00, 0xff, 0x80, 0xff, // .....U..........
+ 0xff, 0x00, 0x00, 0x00, // ....
};
-static const uint8_t fs_imgui_image_dx11[445] =
+static const uint8_t fs_imgui_image_dx11[447] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x00, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, // ...s_texColor0..
- 0x00, 0x01, 0x00, 0x84, 0x01, 0x44, 0x58, 0x42, 0x43, 0x60, 0x83, 0xa2, 0x5c, 0x77, 0x3d, 0xcc, // .....DXBC`...w=.
- 0x9b, 0xb9, 0x73, 0xdf, 0x41, 0x6b, 0x18, 0x8f, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, // ..s.Ak..........
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, // .....,..........
- 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .ISGNP..........
- 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .8..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, // .SV_POSITION.TEX
- 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, // COORD....OSGN,..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, // .SV_TARGET...SHD
- 0x52, 0xc4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, // R....@...1...Y..
- 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, // .F. .........Z..
- 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, // ..`......X....p.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, // .....UU..b...2..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....e.... .....
- 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, // .h.......H......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, // .....F.......F~.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, // ......`........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, // .........6...r .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, // .....F.......2..
- 0x0a, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ........ ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x40, 0x00, // ......@....L?.@.
- 0x00, 0xcd, 0xcc, 0x4c, 0x3e, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // ...L>>.......
+ 0x00, 0x01, 0x00, 0x84, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x60, 0x83, 0xa2, 0x5c, 0x77, // .......DXBC`...w
+ 0x3d, 0xcc, 0x9b, 0xb9, 0x73, 0xdf, 0x41, 0x6b, 0x18, 0x8f, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x84, // =...s.Ak........
+ 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xb8, // .......,........
+ 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, // ...ISGNP........
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, // ...8............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, // ...........D....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, // ...SV_POSITION.T
+ 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, // EXCOORD....OSGN,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // ........... ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, // ...SV_TARGET...S
+ 0x48, 0x44, 0x52, 0xc4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x59, // HDR....@...1...Y
+ 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5a, // ...F. .........Z
+ 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, // ....`......X....
+ 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, // p......UU..b...2
+ 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, // ...h.......H....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, // ~.......`.......
+ 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, // . .........6...r
+ 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, // ......F.......2
+ 0x00, 0x00, 0x0a, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, // .... ........ ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, // ........@....L?.
+ 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3e, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // @....L>>.......
};
static const uint8_t fs_imgui_image_mtl[751] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0xc8, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ......using name
0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, // space metal;.str
diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h b/3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h
index e4904398ecd..f8ca1c815c0 100644
--- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_imgui_image_swizz_glsl[565] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x03, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x03, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x09, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x02, 0x01, 0x00, 0x00, // ...u_swizzle....
0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, // ...s_texColor...
@@ -37,326 +37,351 @@ static const uint8_t fs_imgui_image_swizz_glsl[565] =
0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, // olor = tmpvar_3;
0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
};
-static const uint8_t fs_imgui_image_swizz_spv[3957] =
+static const uint8_t fs_imgui_image_swizz_spv[4363] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x09, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x12, 0x01, 0x00, 0x00, // ...u_swizzle....
- 0x01, 0x00, 0x40, 0x0f, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ..@...#.........
- 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // za..............
- 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
- 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, // main....t.......
- 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
- 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....main........
- 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, // a...BgfxSampler2
- 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // D.......a.......
- 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // m_sampler.......
- 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // a.......m_textur
- 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0xce, 0x14, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, // e...........bgfx
- 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x28, 0x73, 0x74, 0x72, // Texture2DLod(str
- 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, // uct-BgfxSampler2
- 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x66, 0x31, // D-p1-t211;vf2;f1
- 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, // ;.......'..._sam
- 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, // pler............
- 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2e, 0x12, 0x00, 0x00, // _coord..........
- 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x01, 0x14, 0x00, 0x00, // _level..........
- 0x76, 0x65, 0x63, 0x33, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, // vec3_splat(f1;..
- 0x05, 0x00, 0x03, 0x00, 0xab, 0x5b, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // .....[.._x......
- 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, // 5...vec4_splat(f
- 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, // 1;.........._x..
- 0x05, 0x00, 0x06, 0x00, 0xe8, 0x16, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, // ........@main(vf
- 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xae, 0x58, 0x00, 0x00, // 2;vf4;.......X..
- 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, // v_texcoord0.....
- 0x3e, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // >...gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // 0_......C...s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, // xColor..........
- 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, // s_texColorSample
- 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // r...........s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // xColorTexture...
- 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, // ........bgfx_Voi
- 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4b, 0x4e, 0x00, 0x00, // dFrag.......KN..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, // param...........
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, // color...........
- 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xca, 0x03, 0x00, 0x00, // $Global.........
- 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, // ....u_viewRect..
- 0x06, 0x00, 0x06, 0x00, 0xca, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, // ewTexel.........
- 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_view......
- 0xca, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
- 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // w...............
- 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xca, 0x03, 0x00, 0x00, // u_proj..........
- 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // ....u_invProj...
- 0x06, 0x00, 0x06, 0x00, 0xca, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xca, 0x03, 0x00, 0x00, // ewProj..........
- 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ....u_invViewPro
- 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // j...............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xca, 0x03, 0x00, 0x00, // u_model.........
- 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, // ....u_modelView.
- 0x06, 0x00, 0x07, 0x00, 0xca, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
- 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, // delViewProj.....
- 0xca, 0x03, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ........u_alphaR
- 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0xca, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, // ef4.............
- 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, // u_imageLodEnable
- 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xca, 0x03, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // d...............
- 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // u_swizzle.......
- 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x82, 0x47, 0x00, 0x00, // B............G..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa5, 0x2a, 0x00, 0x00, // param........*..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, // param...........
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3f, 0x28, 0x00, 0x00, // alpha.......?(..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xee, 0x40, 0x00, 0x00, // param........@..
- 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // v_texcoord0.....
- 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // t...v_texcoord0.
- 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // ........gl_FragD
- 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xef, 0x47, 0x00, 0x00, // ata_0_.......G..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, // param...........
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, // param...........
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......".......
- 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......!.......
- 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......".......
- 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......!.......
- 0x47, 0x00, 0x04, 0x00, 0xcd, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // G...........@...
- 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, // #.......H.......
- 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, // ........H.......
- 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
- 0xca, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // `...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, // ........H.......
- 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, // ........H.......
- 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xca, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, // ........H.......
- 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, // ........H.......
- 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
- 0xca, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // `...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, // ........H.......
- 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, // ........H.......
- 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xca, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xca, 0x03, 0x00, 0x00, // ........H.......
- 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, // ........H.......
- 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0xca, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, // ...H...........
- 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xca, 0x03, 0x00, 0x00, // #...0...H.......
- 0x0d, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x40, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#...@...G...
- 0xca, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ........G...B...
- 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, // ".......G...t...
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
- 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, // !...............
- 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, // ........a.......
- 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...........
- 0x61, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // a...............
- 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x89, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....!...........
- 0x1b, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // ................
- 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // ............!...
- 0xe5, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // ............!...
- 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, // ............!...
- 0x1f, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // ................
- 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ;.......C.......
- 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, // ...y...........
- 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ;...y...........
- 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ;...............
- 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........ .......
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // +...............
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
- 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
- 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
- 0xcd, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x10, 0x00, // ....e...j.......
- 0xca, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0xcd, 0x06, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e.......e...e...
- 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x47, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xca, 0x03, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // G...........;...
- 0x47, 0x06, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // G...B.......+...
- 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ..../.......+...
- 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0c, 0x00, 0x00, 0x00, 0x32, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....2....... ...
- 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3e, 0x2b, 0x00, 0x04, 0x00, // ..........L>+...
- 0x0d, 0x00, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x2b, 0x00, 0x04, 0x00, // ....!.....L?+...
- 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....t....... ...
- 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
- 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, // ............6...
- 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // ....Sa..;.......
- 0xef, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // .G......;.......
- 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // ........=.......
- 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, // !C......=.......
- 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, // .3......P...a...
- 0x12, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // . ..!C...3..>...
- 0x43, 0x12, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // C.... ..=.......
- 0xee, 0x40, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, // .@..t...>....G..
- 0xee, 0x40, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, // .@..9.......ya..
- 0xe8, 0x16, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....G......=...
- 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
- 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // ............8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0x89, 0x04, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // ....7.......'...
- 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7...........7...
- 0x8a, 0x02, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x24, 0x54, 0x00, 0x00, // ............$T..
- 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // A...........'...
- 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x6d, 0x29, 0x00, 0x00, // ....=.......m)..
- 0xc0, 0x1c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xe4, 0x55, 0x00, 0x00, // ....A...y....U..
- 0x27, 0x0e, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // '.......=.......
- 0xf2, 0x4e, 0x00, 0x00, 0xe4, 0x55, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, // .N...U..V.......
- 0x32, 0x39, 0x00, 0x00, 0x6d, 0x29, 0x00, 0x00, 0xf2, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // 29..m)...N..=...
- 0x13, 0x00, 0x00, 0x00, 0xcd, 0x19, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ............=...
- 0x0d, 0x00, 0x00, 0x00, 0x3d, 0x3e, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, // ....=>......X...
- 0x1d, 0x00, 0x00, 0x00, 0x11, 0x1c, 0x00, 0x00, 0x32, 0x39, 0x00, 0x00, 0xcd, 0x19, 0x00, 0x00, // ........29......
- 0x02, 0x00, 0x00, 0x00, 0x3d, 0x3e, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x11, 0x1c, 0x00, 0x00, // ....=>..........
- 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, // 8...6...........
- 0x00, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........7.......
- 0xab, 0x5b, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x35, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .[.......5..=...
- 0x0d, 0x00, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xab, 0x5b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....)....[..=...
- 0x0d, 0x00, 0x00, 0x00, 0x1d, 0x44, 0x00, 0x00, 0xab, 0x5b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....D...[..=...
- 0x0d, 0x00, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xab, 0x5b, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, // ....g-...[..P...
- 0x18, 0x00, 0x00, 0x00, 0xee, 0x31, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0x1d, 0x44, 0x00, 0x00, // .....1..)....D..
- 0x67, 0x2d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xee, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // g-.......1..8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6.......5.......
- 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // ....7...........
- 0xf8, 0x00, 0x02, 0x00, 0x6a, 0x56, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ....jV..=.......
- 0x56, 0x55, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // VU......=.......
- 0x9b, 0x4c, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .L......=.......
- 0x3b, 0x37, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ;7......=.......
- 0x4e, 0x37, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // N7......P.......
- 0x92, 0x52, 0x00, 0x00, 0x56, 0x55, 0x00, 0x00, 0x9b, 0x4c, 0x00, 0x00, 0x3b, 0x37, 0x00, 0x00, // .R..VU...L..;7..
- 0x4e, 0x37, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x92, 0x52, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // N7.......R..8...
- 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0x1f, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xae, 0x58, 0x00, 0x00, // ....7........X..
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x3e, 0x1c, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7.......>.......
- 0xa7, 0x5d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4b, 0x4e, 0x00, 0x00, // .]..;.......KN..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x82, 0x47, 0x00, 0x00, // ....;........G..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xa5, 0x2a, 0x00, 0x00, // ....;........*..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x3f, 0x28, 0x00, 0x00, // ....;.......?(..
- 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4b, 0x4e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....>...KN......
- 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, // 9...........5...
- 0x4b, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x56, 0x4b, 0x00, 0x00, // KN..=.......VK..
- 0xae, 0x58, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x82, 0x47, 0x00, 0x00, 0x56, 0x4b, 0x00, 0x00, // .X..>....G..VK..
- 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xeb, 0x32, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A........2..B...
- 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // /.......=.......
- 0x03, 0x5b, 0x00, 0x00, 0xeb, 0x32, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa5, 0x2a, 0x00, 0x00, // .[...2..>....*..
- 0x03, 0x5b, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xaf, 0x50, 0x00, 0x00, // .[..9........P..
- 0xce, 0x14, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0x82, 0x47, 0x00, 0x00, 0xa5, 0x2a, 0x00, 0x00, // ....C....G...*..
- 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xa7, 0x1c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A...........B...
- 0x32, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x1e, 0x00, 0x00, // 2...=.......Y...
- 0xa7, 0x1c, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, // ................
- 0xaf, 0x50, 0x00, 0x00, 0x59, 0x1e, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, // .P..Y...A.......
- 0x47, 0x59, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, // GY..B.../.......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4e, 0x5c, 0x00, 0x00, 0x47, 0x59, 0x00, 0x00, // =.......N...GY..
- 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x28, 0x4d, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, // ........(M..!...
- 0x4e, 0x5c, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, // N...............
- 0x05, 0x0b, 0x00, 0x00, 0x28, 0x4d, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x3f, 0x28, 0x00, 0x00, // ....(M..>...?(..
- 0x18, 0x0e, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x87, 0x22, 0x00, 0x00, // ....9........"..
- 0x01, 0x14, 0x00, 0x00, 0x3f, 0x28, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // ....?(..Q.......
- 0x12, 0x5e, 0x00, 0x00, 0x87, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // .^..."......Q...
- 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x41, 0x00, 0x00, 0x87, 0x22, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....+A..."......
- 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xac, 0x59, 0x00, 0x00, 0x87, 0x22, 0x00, 0x00, // Q........Y..."..
- 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x85, 0x49, 0x00, 0x00, // ....P........I..
- 0x12, 0x5e, 0x00, 0x00, 0x2b, 0x41, 0x00, 0x00, 0xac, 0x59, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, // .^..+A...Y......
- 0x3e, 0x00, 0x03, 0x00, 0x3e, 0x1c, 0x00, 0x00, 0x85, 0x49, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >...>....I......
- 0x38, 0x00, 0x01, 0x00, 0x00, // 8....
+ 0x01, 0x00, 0xd4, 0x10, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, // ........#.......
+ 0x08, 0x00, 0x75, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, // ..ub............
+ 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, // ..........GLSL.s
+ 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, // td.450..........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, // ..main....t.....
+ 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0xce, 0x14, // ..main..........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x4c, // ..bgfxTexture2DL
+ 0x6f, 0x64, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, // od(struct-BgfxSa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, // mpler2D-p1-t211;
+ 0x76, 0x66, 0x32, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, // vf2;f1;.......~.
+ 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, // .._sampler.m_sam
+ 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, // pler.........._s
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, // ampler.m_texture
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, // .........._coord
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, // .........._level
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x01, 0x14, 0x00, 0x00, 0x76, 0x65, 0x63, 0x33, 0x5f, 0x73, // ..........vec3_s
+ 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x58, 0x4f, // plat(f1;......XO
+ 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, // .._x......5...ve
+ 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, // c4_splat(f1;....
+ 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe8, 0x16, // ......_x........
+ 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, // ..@main(vf2;vf4;
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x5b, 0x4c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // ......[L..v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x55, 0x3d, 0x00, 0x00, 0x67, 0x6c, // oord0.....U=..gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, // _FragData_0_....
+ 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, // ..a...BgfxSample
+ 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, // r2D.......a.....
+ 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, // ..m_sampler.....
+ 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, // ..a.......m_text
+ 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, // ure...........fl
+ 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, // attenTemp.......
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, // ..s_texColorSamp
+ 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, // ler...........s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, // texColorTexture.
+ 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ..........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, // olor.m_sampler..
+ 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ......P...s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, // olor.m_texture..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, // ..........bgfx_V
+ 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x13, 0x57, // oidFrag........W
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, // ..param.........
+ 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x33, 0x01, // ..color.......3.
+ 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x33, 0x01, // ..$Global.....3.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x33, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......3.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x33, 0x01, // viewTexel.....3.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
+ 0x06, 0x00, 0x33, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..3.......u_invV
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x04, 0x00, // iew.......3.....
+ 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x33, 0x01, // ..u_proj......3.
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x33, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......3.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x33, 0x01, // viewProj......3.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x08, 0x00, // roj.......3.....
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x33, 0x01, // ..u_model.....3.
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x33, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.....3.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
+ 0x06, 0x00, 0x33, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..3.......u_alph
+ 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0x33, 0x01, 0x00, 0x00, 0x0c, 0x00, // aRef4.....3.....
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, // ..u_imageLodEnab
+ 0x6c, 0x65, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x33, 0x01, 0x00, 0x00, 0x0d, 0x00, // led.......3.....
+ 0x00, 0x00, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // ..u_swizzle.....
+ 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4a, 0x50, // ..B...........JP
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x34, 0x33, // ..param.......43
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x35, 0x33, // ..param.......53
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x6d, 0x33, // ..param.......m3
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, // ..param.........
+ 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x07, 0x31, // ..alpha........1
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xe8, 0x2a, // ..param........*
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ..t...v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // 0.........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, // gData_0_.......U
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, // ..param.........
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, // ..param.........
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......".....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......!.....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......".....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.......!.....
+ 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x12, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, // ..G...........@.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...3.......#.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x01, 0x00, // ......H...3.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x33, 0x01, // ..#.......H...3.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, // ..........H...3.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..3.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x33, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...3.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...3.......#.
+ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x03, 0x00, // ..`...H...3.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x33, 0x01, // ..........H...3.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, // ..........H...3.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..3.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x33, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...3.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...3.......#.
+ 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H...3.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x33, 0x01, // ..........H...3.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, // ..........H...3.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
+ 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..3.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x33, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...3.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...3.......#.
+ 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x07, 0x00, // ..`...H...3.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x33, 0x01, // ..........H...3.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, // ..........H...3.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..3.............
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x33, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...3.........
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...3.......#.
+ 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H...3.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x33, 0x01, // ..........H...3.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, // ..........H...3.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..3.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...3.......#.
+ 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, 0x00, 0x00, 0x0c, 0x00, // .. ...H...3.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x33, 0x01, // ..#...0...H...3.
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x40, 0x0a, 0x00, 0x00, 0x47, 0x00, // ......#...@...G.
+ 0x03, 0x00, 0x33, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, // ..3.......G...B.
+ 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, // ..".......G...t.
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, // ..........G.....
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, // ..!.............
+ 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, // ...... ...y.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x53, 0x0b, 0x00, 0x00, 0x1d, 0x00, // ......!...S.....
+ 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8a, 0x02, // ..y.............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8a, 0x02, // ..!.............
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, // ..!.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x1f, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x90, 0x02, // ..!.............
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, // ..........a.....
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, // ..a... ...z.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, // ......;...z.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, // ...... .........
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0xee, 0x0e, // ......;.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, // ...... ...{.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, // ......;...{.....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x06, 0x00, // ...... .........
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x50, 0x13, // ......;.......P.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, // ......+.........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, // ................
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, // ......e.........
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, // ..+.......j... .
+ 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x12, 0x0a, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ..........e...j.
+ 0x00, 0x00, 0x1e, 0x00, 0x10, 0x00, 0x33, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......3.........
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x12, 0x0a, 0x00, 0x00, 0x65, 0x00, // ..e...e.......e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..e.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb0, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x33, 0x01, // .. ...........3.
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb0, 0x03, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, // ..;.......B.....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, // ..+......./.....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x32, 0x0a, 0x00, 0x00, 0x0d, 0x00, // ..+.......2.....
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xcd, 0xcc, // ..+.............
+ 0x4c, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0xcd, 0xcc, // L>+.......!.....
+ 0x4c, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, // L?+.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.......t.....
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, // ..;.............
+ 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
+ 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, // ......!C......=.
+ 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......3......P.
+ 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, // ..a...^ ..!C...3
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, // ..>.......^ ..A.
+ 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, // ..y....V........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, // ..=............V
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, // ..>...........A.
+ 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, // .......@........
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, // ..=............@
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, // ..>...P.......=.
+ 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, // .......*..t...>.
+ 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, // ...U...*..9.....
+ 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, // ..ya.......U....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, // ..=.............
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, // ..>.............
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x14, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, // ......S...7...y.
+ 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x0d, // ..~...7.........
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, // ..7...........7.
+ 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, // ..............._
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, // ..=.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, // ..=.......!A..~.
+ 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, // ..V.......`5....
+ 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x95, 0x22, // ..!A..=........"
+ 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, // ......=........G
+ 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, // ......X.......(=
+ 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, // ..`5...".......G
+ 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // ......(=..8...6.
+ 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x00, // ................
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x58, 0x4f, 0x00, 0x00, 0xf8, 0x00, // ..7.......XO....
+ 0x02, 0x00, 0xdd, 0x56, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x37, 0x54, // ...V..=.......7T
+ 0x00, 0x00, 0x58, 0x4f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe5, 0x4c, // ..XO..=........L
+ 0x00, 0x00, 0x58, 0x4f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2f, 0x36, // ..XO..=......./6
+ 0x00, 0x00, 0x58, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x05, 0x53, // ..XO..P........S
+ 0x00, 0x00, 0x37, 0x54, 0x00, 0x00, 0xe5, 0x4c, 0x00, 0x00, 0x2f, 0x36, 0x00, 0x00, 0xfe, 0x00, // ..7T...L../6....
+ 0x02, 0x00, 0x05, 0x53, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...S..8...6.....
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, // ..5...........7.
+ 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x02, 0x2d, // ...............-
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1e, 0x5e, 0x00, 0x00, 0xdd, 0x0e, // ..=........^....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x55, 0x00, 0x00, 0xdd, 0x0e, // ..=.......cU....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xca, 0x26, 0x00, 0x00, 0xdd, 0x0e, // ..=........&....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xdd, 0x26, 0x00, 0x00, 0xdd, 0x0e, // ..=........&....
+ 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2a, 0x29, 0x00, 0x00, 0x1e, 0x5e, // ..P.......*)...^
+ 0x00, 0x00, 0x63, 0x55, 0x00, 0x00, 0xca, 0x26, 0x00, 0x00, 0xdd, 0x26, 0x00, 0x00, 0xfe, 0x00, // ..cU...&...&....
+ 0x02, 0x00, 0x2a, 0x29, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, // ..*)..8...6.....
+ 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0b, 0x00, 0x00, 0x37, 0x00, // ..............7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x5b, 0x4c, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ......[L..7.....
+ 0x00, 0x00, 0x55, 0x3d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf0, 0x1b, 0x00, 0x00, 0x3b, 0x00, // ..U=..........;.
+ 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......W......;.
+ 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..y...JP......;.
+ 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x34, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ......43......;.
+ 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x35, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ......53......;.
+ 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ......m3......;.
+ 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, // .......1......>.
+ 0x03, 0x00, 0x13, 0x57, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...W......9.....
+ 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x3d, 0x00, // ......5....W..=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xd2, 0x53, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, // .......S......>.
+ 0x03, 0x00, 0x4a, 0x50, 0x00, 0x00, 0xd2, 0x53, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, // ..JP...S..=.....
+ 0x00, 0x00, 0xf9, 0x25, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x34, 0x33, // ...%..P...>...43
+ 0x00, 0x00, 0xf9, 0x25, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x45, 0x26, // ...%..=.......E&
+ 0x00, 0x00, 0x5b, 0x4c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x35, 0x33, 0x00, 0x00, 0x45, 0x26, // ..[L..>...53..E&
+ 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xb3, 0x3b, 0x00, 0x00, 0x42, 0x13, // ..A........;..B.
+ 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ../.......=.....
+ 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0xb3, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x6d, 0x33, // ..L....;..>...m3
+ 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0x39, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x77, 0x59, // ..L...9.......wY
+ 0x00, 0x00, 0xce, 0x14, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x34, 0x33, 0x00, 0x00, 0x35, 0x33, // ......JP..43..53
+ 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x6f, 0x25, // ..m3..A.......o%
+ 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x32, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..B...2...=.....
+ 0x00, 0x00, 0x21, 0x27, 0x00, 0x00, 0x6f, 0x25, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..!'..o%........
+ 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x77, 0x59, 0x00, 0x00, 0x21, 0x27, 0x00, 0x00, 0x41, 0x00, // ......wY..!'..A.
+ 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x0f, 0x62, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, // .......b..B.../.
+ 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x97, 0x1a, // ......=.........
+ 0x00, 0x00, 0x0f, 0x62, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb7, 0x3c, // ...b...........<
+ 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x97, 0x1a, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..!.............
+ 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xb7, 0x3c, 0x00, 0x00, 0x3e, 0x00, // ...........<..>.
+ 0x03, 0x00, 0x07, 0x31, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x18, 0x00, // ...1......9.....
+ 0x00, 0x00, 0x4f, 0x2b, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x51, 0x00, // ..O+.......1..Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa1, 0x4d, 0x00, 0x00, 0x4f, 0x2b, 0x00, 0x00, 0x00, 0x00, // .......M..O+....
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x49, 0x00, 0x00, 0x4f, 0x2b, // ..Q........I..O+
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x74, 0x62, // ......Q.......tb
+ 0x00, 0x00, 0x4f, 0x2b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, // ..O+......P.....
+ 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0xa1, 0x4d, 0x00, 0x00, 0xf3, 0x49, 0x00, 0x00, 0x74, 0x62, // ..MR...M...I..tb
+ 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x55, 0x3d, 0x00, 0x00, 0x4d, 0x52, // ......>...U=..MR
+ 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ......8....
};
-static const uint8_t fs_imgui_image_swizz_dx9[450] =
+static const uint8_t fs_imgui_image_swizz_dx9[452] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x03, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH.o.><...s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x03, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH.o.><...s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, // Color0......u_im
0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x01, 0x00, // ageLodEnabled...
0x00, 0x01, 0x00, 0x09, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x12, 0x01, 0x01, // ....u_swizzle...
- 0x00, 0x01, 0x00, 0x7c, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x36, 0x00, 0x43, 0x54, 0x41, // ...|.......6.CTA
- 0x42, 0x1c, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x03, 0x00, 0x00, // B...............
- 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, // .............X..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........d......
- 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, // .t..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // ................
- 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .........s_texCo
- 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // lor.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, // .....u_imageLodE
- 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x00, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, // nabled..........
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, // .........u_swizz
- 0x6c, 0x65, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // le.ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x31, 0x00, 0xab, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, // 1....Q..........
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x1f, 0x00, 0x00, // ?......L?..L>...
- 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
- 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x02, 0x00, 0xd0, // ................
- 0xa0, 0x00, 0x00, 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, // ................
- 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, // ._..............
- 0xa0, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, // ................
- 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0c, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, // ................
- 0x04, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x00, 0x00, 0xff, // .......U........
- 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0x40, 0x80, 0xff, 0xff, 0x00, // ...........@....
- 0x00, 0x00, // ..
+ 0x00, 0x01, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x36, 0x00, 0x43, // ...|.........6.C
+ 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x03, // TAB.............
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x58, // ...............X
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, // ...........d....
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x88, // ...t............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, // ................
+ 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, // ...........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, // Color...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, // .......u_imageLo
+ 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x00, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, // dEnabled........
+ 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x73, 0x77, 0x69, // ...........u_swi
+ 0x7a, 0x7a, 0x6c, 0x65, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // zzle.ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0, 0x00, // 0.1....Q........
+ 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x1f, // ..?......L?..L>.
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x02, // ................
+ 0x00, 0xd0, 0xa0, 0x00, 0x00, 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, // ................
+ 0x00, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, // ..._............
+ 0x08, 0xe4, 0xa0, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, // ................
+ 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0c, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x04, // ................
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x80, 0x00, // .........U......
+ 0x00, 0xff, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0x40, 0x80, 0xff, // .............@..
+ 0xff, 0x00, 0x00, 0x00, // ....
};
-static const uint8_t fs_imgui_image_swizz_dx11[493] =
+static const uint8_t fs_imgui_image_swizz_dx11[495] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x03, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x03, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x00, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x09, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x12, 0x00, 0x10, 0x00, // ...u_swizzle....
0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, // ...s_texColor0..
- 0x00, 0x01, 0x00, 0xa4, 0x01, 0x44, 0x58, 0x42, 0x43, 0x82, 0x53, 0x75, 0xc2, 0x4f, 0x7e, 0x06, // .....DXBC.Su.O~.
- 0x0a, 0x49, 0x27, 0x42, 0x29, 0x01, 0x0a, 0x6a, 0x92, 0x01, 0x00, 0x00, 0x00, 0xa4, 0x01, 0x00, // .I'B)..j........
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, // .....,..........
- 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .ISGNP..........
- 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .8..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, // .SV_POSITION.TEX
- 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, // COORD....OSGN,..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, // .SV_TARGET...SHD
- 0x52, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, // R....@...9...Y..
- 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, // .F. .........Z..
- 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, // ..`......X....p.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, // .....UU..b...2..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....e.... .....
- 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, // .h.......H......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, // .....F.......F~.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, // ......`........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .....F.......F.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x22, 0x00, 0x10, // .........2..."..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....... ........
- 0x00, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, // ..@....L?.@....L
- 0x3e, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, // >6.... .........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, // .....>..... .
+ 0x00, 0x01, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x82, 0x53, 0x75, 0xc2, 0x4f, // .......DXBC.Su.O
+ 0x7e, 0x06, 0x0a, 0x49, 0x27, 0x42, 0x29, 0x01, 0x0a, 0x6a, 0x92, 0x01, 0x00, 0x00, 0x00, 0xa4, // ~..I'B)..j......
+ 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xb8, // .......,........
+ 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, // ...ISGNP........
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, // ...8............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, // ...........D....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, // ...SV_POSITION.T
+ 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, // EXCOORD....OSGN,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // ........... ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, // ...SV_TARGET...S
+ 0x48, 0x44, 0x52, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x59, // HDR....@...9...Y
+ 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5a, // ...F. .........Z
+ 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, // ....`......X....
+ 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, // p......UU..b...2
+ 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, // ...h.......H....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, // ~.......`.......
+ 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x08, 0x12, // . ..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x22, // . .........2..."
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x40, 0x00, 0x00, 0xcd, // ....@....L?.@...
+ 0xcc, 0x4c, 0x3e, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, // .L>6.... .......
+ 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, // .......>..... .
};
static const uint8_t fs_imgui_image_swizz_mtl[950] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x09, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x02, 0x01, 0x00, 0x00, // ...u_swizzle....
0x01, 0x00, 0x7f, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ......using name
diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_latlong.bin.h b/3rdparty/bgfx/examples/common/imgui/fs_imgui_latlong.bin.h
index b663f8ede85..0f768c9247b 100644
--- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_latlong.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_latlong.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_imgui_latlong_glsl[651] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, // ...s_texColor...
0x00, 0x01, 0x00, 0x53, 0x02, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // ...S...varying h
@@ -42,366 +42,391 @@ static const uint8_t fs_imgui_latlong_glsl[651] =
0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, // _FragColor = tmp
0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // var_4;.}...
};
-static const uint8_t fs_imgui_latlong_spv[4373] =
+static const uint8_t fs_imgui_latlong_spv[4779] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x01, 0x00, 0x00, // geLodEnabled....
- 0x01, 0x00, 0xf0, 0x10, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ......#.........
- 0x75, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // ub..............
- 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
- 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, // main....t.......
- 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
- 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....main........
- 0x67, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, // g...BgfxSamplerC
- 0x75, 0x62, 0x65, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ube.....g.......
- 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // m_sampler.......
- 0x67, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // g.......m_textur
- 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x11, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, // e...........bgfx
- 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x4c, 0x6f, 0x64, 0x28, 0x73, // TextureCubeLod(s
- 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, // truct-BgfxSample
- 0x72, 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, // rCube-p1-tC11;vf
- 0x33, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x0e, 0x00, 0x00, // 3;f1;.......'...
- 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // _sampler........
- 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ...._coord......
- 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ...._level......
- 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, // 5...vec4_splat(f
- 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, // 1;.........._x..
- 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0c, 0x00, 0x00, 0x76, 0x65, 0x63, 0x46, 0x72, 0x6f, 0x6d, 0x4c, // ........vecFromL
- 0x61, 0x74, 0x4c, 0x6f, 0x6e, 0x67, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, 0x03, 0x00, // atLong(vf2;.....
- 0x73, 0x10, 0x00, 0x00, 0x5f, 0x75, 0x76, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe8, 0x16, 0x00, 0x00, // s..._uv.........
- 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // @main(vf2;vf4;..
- 0x05, 0x00, 0x05, 0x00, 0x5b, 0x4c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....[L..v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x55, 0x3d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0.....U=..gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // ragData_0_......
- 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, // C...s_texColor..
- 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ........s_texCol
- 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, // orSampler.......
- 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, // ....s_texColorTe
- 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x43, 0x08, 0x00, 0x00, // xture.......C...
- 0x70, 0x69, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbf, 0x15, 0x00, 0x00, 0x74, 0x77, 0x6f, 0x50, // pi..........twoP
- 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xca, 0x0c, 0x00, 0x00, 0x70, 0x68, 0x69, 0x00, // i...........phi.
- 0x05, 0x00, 0x04, 0x00, 0xb3, 0x13, 0x00, 0x00, 0x74, 0x68, 0x65, 0x74, 0x61, 0x00, 0x00, 0x00, // ........theta...
- 0x05, 0x00, 0x04, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x00, 0x00, // ........result..
- 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, // ........bgfx_Voi
- 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x13, 0x57, 0x00, 0x00, // dFrag........W..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x46, 0x17, 0x00, 0x00, // param.......F...
- 0x64, 0x69, 0x72, 0x00, 0x05, 0x00, 0x04, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // dir.....JP..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, // m...........colo
- 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x19, 0x03, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, // r...........$Glo
- 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // bal.............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_viewRect......
- 0x19, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, // ........u_viewTe
- 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // xel.............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x19, 0x03, 0x00, 0x00, // u_view..........
- 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, // ....u_invView...
- 0x06, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, // ............u_pr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x19, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // oj..............
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_invProj.......
- 0x19, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // ........u_viewPr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x19, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // oj..............
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // u_invViewProj...
- 0x06, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
- 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x19, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // del.............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, // u_modelView.....
- 0x19, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // ........u_modelV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x19, 0x03, 0x00, 0x00, // iewProj.........
- 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, // ....u_alphaRef4.
- 0x06, 0x00, 0x08, 0x00, 0x19, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6d, // ............u_im
- 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x00, 0x00, 0x00, // ageLodEnabled...
- 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....B...........
- 0x6d, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // m3..param.......
- 0x07, 0x31, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .1..param.......
- 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // ....alpha.......
- 0xee, 0x40, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // .@..v_texcoord0.
- 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....t...v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0.........gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0xef, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .G..param.......
- 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....param.......
- 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // 0_..G......."...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // ....G.......!...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // ....G......."...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // ....G.......!...
- 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x35, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....G...5.......
- 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...H...........
- 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, // #.......H.......
- 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ....#.......H...
- 0x19, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x19, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ........#... ...
- 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x19, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, // #...`...H.......
- 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x19, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x19, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x19, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, // #.......H.......
- 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x19, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x19, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, // ........#... ...
- 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x19, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, // #...`...H.......
- 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x19, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x19, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x19, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, // #.......H.......
- 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x19, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x19, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x19, 0x03, 0x00, 0x00, // #... ...H.......
- 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#...0...G...
- 0x19, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ........G...B...
- 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, // ".......G...t...
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........G.......
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
- 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, // !...............
- 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x19, 0x00, 0x09, 0x00, 0x98, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x67, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, // ........g.......
- 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...!.......
- 0x67, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // g...............
- 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
- 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0xaf, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....!...........
- 0x21, 0x00, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // !...........!...
- 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // ................
- 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // ............!...
- 0xf7, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, // ............!...
- 0x1f, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // ................
- 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ;...!...C.......
- 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, // ...y...........
- 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ;...y...........
- 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ;...............
- 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........ .......
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // +...............
- 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x43, 0x08, 0x00, 0x00, 0xdb, 0x0f, 0x49, 0x40, 0x2b, 0x00, 0x04, 0x00, // ....C.....I@+...
- 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x15, 0x00, 0x04, 0x00, // ...........@....
- 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
- 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0b, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
- 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // e...........+...
- 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
- 0x35, 0x09, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, // 5...e...j.......
- 0x19, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x35, 0x09, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...5...e...e...
- 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x05, 0x00, 0x00, // ........ .......
- 0x02, 0x00, 0x00, 0x00, 0x19, 0x03, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x05, 0x00, 0x00, // ........;.......
- 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // B.......+.......
- 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, // /....... .......
- 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........+.......
- 0x05, 0x0b, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ......L>+.......
- 0x21, 0x0a, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, // !.....L? .......
- 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, // ........;.......
- 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // t....... .......
- 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // ........;.......
- 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // ........6.......
- 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // ................
- 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xef, 0x47, 0x00, 0x00, // Sa..;........G..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // ....;...........
- 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, // ....=.......!C..
- 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, // ....=........3..
- 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x67, 0x09, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, // ....P...g.... ..
- 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x43, 0x12, 0x00, 0x00, // !C...3..>...C...
- 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // . ..=........@..
- 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xef, 0x47, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // t...>....G...@..
- 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x79, 0x61, 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, // 9.......ya......
- 0xef, 0x47, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .G......=.......
- 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........>.......
- 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // ........8...6...
- 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x04, 0x00, 0x00, // ................
- 0x37, 0x00, 0x03, 0x00, 0x21, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7...!...'...7...
- 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........7.......
- 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x24, 0x54, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ........$T..A...
- 0x15, 0x03, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ........'.......
- 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x6d, 0x29, 0x00, 0x00, 0xc0, 0x1c, 0x00, 0x00, // =.......m)......
- 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xe4, 0x55, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // A...y....U..'...
- 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf2, 0x4e, 0x00, 0x00, // ....=........N..
- 0xe4, 0x55, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x32, 0x39, 0x00, 0x00, // .U..V.......29..
- 0x6d, 0x29, 0x00, 0x00, 0xf2, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // m)...N..=.......
- 0xcd, 0x19, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
- 0x3d, 0x3e, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // =>......X.......
- 0x11, 0x1c, 0x00, 0x00, 0x32, 0x39, 0x00, 0x00, 0xcd, 0x19, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....29..........
- 0x3d, 0x3e, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x11, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // =>..........8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6.......5.......
- 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // ....7...........
- 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ....._..=.......
- 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .[......=.......
- 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // %S......=.......
- 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .=......=.......
- 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // .=......P.......
- 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, // V[...[..%S...=..
- 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // .=......V[..8...
- 0x36, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0xcd, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0xf7, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x73, 0x10, 0x00, 0x00, // ....7.......s...
- 0xf8, 0x00, 0x02, 0x00, 0xb4, 0x33, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // .....3..;.......
- 0xa2, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0xbf, 0x15, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x43, 0x08, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ........C...A...
- 0x8a, 0x02, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x73, 0x10, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, // .....8..s.......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xac, 0x54, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, // =........T...8..
- 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xca, 0x0c, 0x00, 0x00, 0xac, 0x54, 0x00, 0x00, // .............T..
- 0xbf, 0x15, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4e, 0x3e, 0x00, 0x00, // ....A.......N>..
- 0x73, 0x10, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // s.......=.......
- 0xca, 0x50, 0x00, 0x00, 0x4e, 0x3e, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .P..N>..........
- 0xb3, 0x13, 0x00, 0x00, 0xca, 0x50, 0x00, 0x00, 0x43, 0x08, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, // .....P..C.......
- 0x0d, 0x00, 0x00, 0x00, 0x37, 0x35, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ....75..........
- 0xb3, 0x13, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, // ................
- 0x37, 0x35, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x68, 0x32, 0x00, 0x00, // 75..........h2..
- 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xca, 0x0c, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x90, 0x32, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x68, 0x32, 0x00, 0x00, // .....2......h2..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x48, 0x44, 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, // A.......HD......
- 0x0a, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x48, 0x44, 0x00, 0x00, 0x90, 0x32, 0x00, 0x00, // ....>...HD...2..
- 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfa, 0x57, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .........W......
- 0x0e, 0x00, 0x00, 0x00, 0xb3, 0x13, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........A.......
- 0xcf, 0x38, 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .8..........>...
- 0xcf, 0x38, 0x00, 0x00, 0xfa, 0x57, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, // .8...W..........
- 0x3e, 0x42, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb3, 0x13, 0x00, 0x00, // >B..............
- 0x7f, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb3, 0x1a, 0x00, 0x00, 0x3e, 0x42, 0x00, 0x00, // ............>B..
- 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x96, 0x1a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x0e, 0x00, 0x00, 0x00, 0xca, 0x0c, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x2b, 0x3a, 0x00, 0x00, 0xb3, 0x1a, 0x00, 0x00, 0x96, 0x1a, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // +:..........A...
- 0x8a, 0x02, 0x00, 0x00, 0xaf, 0x3c, 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, // .....<..........
- 0x3e, 0x00, 0x03, 0x00, 0xaf, 0x3c, 0x00, 0x00, 0x2b, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >....<..+:..=...
- 0x18, 0x00, 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, // .....A..........
- 0x85, 0x41, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // .A..8...6.......
- 0xe8, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // ............7...
- 0x90, 0x02, 0x00, 0x00, 0x5b, 0x4c, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....[L..7.......
- 0x55, 0x3d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf0, 0x1b, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // U=..........;...
- 0x8a, 0x02, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....W......;...
- 0x90, 0x02, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ....JP......;...
- 0x95, 0x02, 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ....m3......;...
- 0x8a, 0x02, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....1......>...
- 0x13, 0x57, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .W......9.......
- 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....5....W..=...
- 0x13, 0x00, 0x00, 0x00, 0x86, 0x53, 0x00, 0x00, 0x5b, 0x4c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....S..[L..>...
- 0x4a, 0x50, 0x00, 0x00, 0x86, 0x53, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, // JP...S..9.......
- 0x46, 0x17, 0x00, 0x00, 0xcd, 0x0c, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // F.......JP..>...
- 0x6d, 0x33, 0x00, 0x00, 0x46, 0x17, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, // m3..F...A.......
- 0x19, 0x2f, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, // ./..B.../.......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0x19, 0x2f, 0x00, 0x00, // =.......L..../..
- 0x3e, 0x00, 0x03, 0x00, 0x07, 0x31, 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, // >....1..L...9...
- 0x1d, 0x00, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, // ....MP......C...
- 0x6d, 0x33, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, // m3...1..O.......
- 0x18, 0x0e, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....MP..MP......
- 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, // ........A.......
- 0xa9, 0x22, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, // ."..B.../.......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe1, 0x48, 0x00, 0x00, 0xa9, 0x22, 0x00, 0x00, // =........H..."..
- 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, // ........ >..!...
- 0xe1, 0x48, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, // .H..............
- 0x05, 0x0b, 0x00, 0x00, 0x20, 0x3e, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .... >..Q.......
- 0x3f, 0x24, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ?$..........Q...
- 0x0d, 0x00, 0x00, 0x00, 0xb9, 0x31, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .....1..........
- 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x74, 0x62, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, // Q.......tb......
- 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, // ....P.......MR..
- 0x3f, 0x24, 0x00, 0x00, 0xb9, 0x31, 0x00, 0x00, 0x74, 0x62, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, // ?$...1..tb......
- 0x3e, 0x00, 0x03, 0x00, 0x55, 0x3d, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >...U=..MR......
- 0x38, 0x00, 0x01, 0x00, 0x00, // 8....
+ 0x01, 0x00, 0x84, 0x12, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, // ........#.......
+ 0x08, 0x00, 0x9d, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, // ...b............
+ 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, // ..........GLSL.s
+ 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, // td.450..........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, // ..main....t.....
+ 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x11, 0x00, 0xf4, 0x10, // ..main..........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, // ..bgfxTextureCub
+ 0x65, 0x4c, 0x6f, 0x64, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, // eLod(struct-Bgfx
+ 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, 0x31, 0x2d, 0x74, // SamplerCube-p1-t
+ 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, // C11;vf3;f1;.....
+ 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, // ..~..._sampler.m
+ 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, // _sampler........
+ 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, // .._sampler.m_tex
+ 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, // ture.........._c
+ 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, // oord.........._l
+ 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, // evel......5...ve
+ 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, // c4_splat(f1;....
+ 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0c, // ......_x........
+ 0x00, 0x00, 0x76, 0x65, 0x63, 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x61, 0x74, 0x4c, 0x6f, 0x6e, 0x67, // ..vecFromLatLong
+ 0x28, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, 0x03, 0x00, 0x73, 0x10, 0x00, 0x00, 0x5f, 0x75, // (vf2;.....s..._u
+ 0x76, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe8, 0x16, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, // v.........@main(
+ 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x40, // vf2;vf4;.......@
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x06, 0x00, 0x6c, 0x5e, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ..l^..gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x42, 0x67, // a_0_......g...Bg
+ 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x00, 0x06, 0x00, // fxSamplerCube...
+ 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, // ..g.......m_samp
+ 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x01, 0x00, // ler.......g.....
+ 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // ..m_texture.....
+ 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
+ 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // p.........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, // olorSampler.....
+ 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, // Texture.........
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, // ..s_texColor.m_s
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, // ampler........P.
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, // ..s_texColor.m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x43, 0x08, // exture........C.
+ 0x00, 0x00, 0x70, 0x69, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbf, 0x15, 0x00, 0x00, 0x74, 0x77, // ..pi..........tw
+ 0x6f, 0x50, 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xca, 0x0c, 0x00, 0x00, 0x70, 0x68, // oPi...........ph
+ 0x69, 0x00, 0x05, 0x00, 0x04, 0x00, 0xb3, 0x13, 0x00, 0x00, 0x74, 0x68, 0x65, 0x74, 0x61, 0x00, // i.........theta.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, // ..........result
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, // ..........bgfx_V
+ 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa2, 0x46, // oidFrag........F
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x46, 0x17, // ..param.......F.
+ 0x00, 0x00, 0x64, 0x69, 0x72, 0x00, 0x05, 0x00, 0x04, 0x00, 0x12, 0x59, 0x00, 0x00, 0x70, 0x61, // ..dir......Y..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, // ram...........co
+ 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x24, 0x47, // lor...........$G
+ 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, // lobal...........
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, // ..u_viewRect....
+ 0x06, 0x00, 0x82, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x02, 0x00, // Texel...........
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x82, 0x00, // ..u_view........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, // ......u_invView.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x82, 0x00, 0x00, 0x00, 0x05, 0x00, // proj............
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invProj.....
+ 0x06, 0x00, 0x82, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x82, 0x00, 0x00, 0x00, 0x07, 0x00, // Proj............
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ..u_invViewProj.
+ 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x00, // model...........
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, // ..u_modelView...
+ 0x07, 0x00, 0x82, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x82, 0x00, // lViewProj.......
+ 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, // ......u_alphaRef
+ 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0x82, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, // 4.............u_
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x00, // imageLodEnabled.
+ 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ......B.........
+ 0x04, 0x00, 0xfc, 0x3b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...;..param.....
+ 0x04, 0x00, 0xfd, 0x3b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...;..param.....
+ 0x04, 0x00, 0x35, 0x3c, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ..5<..param.....
+ 0x04, 0x00, 0xcf, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...9..param.....
+ 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, // ......alpha.....
+ 0x05, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ...*..v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // 0.....t...v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, // oord0.........gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, // _FragData_0_....
+ 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...U..param.....
+ 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ......param.....
+ 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ......gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, // a_0_..G.......".
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, // ......G.......!.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, // ......G.......".
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, // ......G.......!.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x06, 0x00, // ......G.........
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, // ..#.......H.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, // ..#...`...H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, // ..#.......H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, // ..#...`...H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, // ..#.......H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x82, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, 0x00, 0x00, 0x0b, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x82, 0x00, // ..#... ...H.....
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, // ......#...0...G.
+ 0x03, 0x00, 0x82, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, // ..........G...B.
+ 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, // ..".......G...t.
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, // ..........G.....
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, // ..!.............
+ 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, // ...... ...y.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x98, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x74, 0x0b, 0x00, 0x00, 0x1d, 0x00, // ......!...t.....
+ 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x15, 0x03, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x8a, 0x02, // ..y.............
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, // ..!.............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x90, 0x02, // ..!.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x1f, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x90, 0x02, // ..!.............
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x67, 0x09, 0x00, 0x00, 0xfc, 0x01, // ..........g.....
+ 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, // ...... ...!.....
+ 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, // ..g... ...z.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, // ......;...z.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, // ...... .........
+ 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0xee, 0x0e, // ......;.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, // ...... ...{.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, // ......;...{.....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x06, 0x00, // ...... .........
+ 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x50, 0x13, // ......;.......P.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, // ......+.........
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x98, 0x00, // ................
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x43, 0x08, 0x00, 0x00, 0xdb, 0x0f, // ..+.......C.....
+ 0x49, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, // I@+.............
+ 0x00, 0x40, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .@........ .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x02, 0x00, // ..+.............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, // ......e.........
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, // ..+.......j... .
+ 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ..........e...j.
+ 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x82, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e.......e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, // ..e........... .
+ 0x04, 0x00, 0xff, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0xff, 0x02, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, // ......B.......+.
+ 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, // ....../....... .
+ 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3e, 0x2b, 0x00, // ............L>+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x20, 0x00, // ......!.....L? .
+ 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, // ......t....... .
+ 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..............6.
+ 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, // ................
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, // ......Sa..;...!.
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, // ..........;.....
+ 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ...U......;.....
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ..........=.....
+ 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, // ..!C......=.....
+ 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x67, 0x09, // ...3......P...g.
+ 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, // ..^ ..!C...3..>.
+ 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, // ......^ ..A...y.
+ 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...V..........=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, // ...........V..>.
+ 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x03, // ..........A.....
+ 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...@..........=.
+ 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, // ...........@..>.
+ 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ..P.......=.....
+ 0x00, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, // ...*..t...>....U
+ 0x00, 0x00, 0xe8, 0x2a, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x79, 0x61, // ...*..9.......ya
+ 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, // .......U......=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ..............>.
+ 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ..............8.
+ 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x74, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, // ..t...7...y...~.
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x15, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, // ..7...........7.
+ 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
+ 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x3d, 0x00, // ..........._..=.
+ 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, // ......!A..~...V.
+ 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x21, 0x41, // ......`5......!A
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0xe7, 0x15, // ..=........"....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0x2e, 0x12, // ..=........G....
+ 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x60, 0x35, // ..X.......(=..`5
+ 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0xfe, 0x00, // ...".......G....
+ 0x02, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ..(=..8...6.....
+ 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, // ..5...........7.
+ 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x35, // ...............5
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xdd, 0x0e, // ..=.......).....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0xdd, 0x0e, // ..=........B....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0xdd, 0x0e, // ..=.......T-....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xdd, 0x0e, // ..=.......g-....
+ 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x31, 0x00, 0x00, 0x29, 0x1a, // ..P........1..).
+ 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xfe, 0x00, // ...B..T-..g-....
+ 0x02, 0x00, 0xee, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x18, 0x00, // ...1..8...6.....
+ 0x00, 0x00, 0xcd, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x37, 0x00, // ..............7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x73, 0x10, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xcb, 0x54, // ......s........T
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x07, 0x00, // ..;.............
+ 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbf, 0x15, 0x00, 0x00, 0x19, 0x00, // ................
+ 0x00, 0x00, 0x43, 0x08, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x90, 0x27, // ..C...A........'
+ 0x00, 0x00, 0x73, 0x10, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..s.......=.....
+ 0x00, 0x00, 0x74, 0x5d, 0x00, 0x00, 0x90, 0x27, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..t]...'........
+ 0x00, 0x00, 0xca, 0x0c, 0x00, 0x00, 0x74, 0x5d, 0x00, 0x00, 0xbf, 0x15, 0x00, 0x00, 0x41, 0x00, // ......t]......A.
+ 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x2d, 0x00, 0x00, 0x73, 0x10, 0x00, 0x00, 0x0d, 0x0a, // .......-..s.....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x92, 0x59, 0x00, 0x00, 0xdd, 0x2d, // ..=........Y...-
+ 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb3, 0x13, 0x00, 0x00, 0x92, 0x59, // ...............Y
+ 0x00, 0x00, 0x43, 0x08, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0x3d, // ..C............=
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb3, 0x13, 0x00, 0x00, 0x7f, 0x00, // ................
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe5, 0x1a, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0x0c, 0x00, // ...........=....
+ 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x30, 0x3b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, // ......0;........
+ 0x00, 0x00, 0xca, 0x0c, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1f, 0x22, // ..............."
+ 0x00, 0x00, 0xe5, 0x1a, 0x00, 0x00, 0x30, 0x3b, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ......0;..A.....
+ 0x00, 0x00, 0xd7, 0x33, 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...3..........>.
+ 0x03, 0x00, 0xd7, 0x33, 0x00, 0x00, 0x1f, 0x22, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, // ...3..."........
+ 0x00, 0x00, 0xc2, 0x60, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xb3, 0x13, // ...`............
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x97, 0x41, 0x00, 0x00, 0xa2, 0x10, // ..A........A....
+ 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x97, 0x41, 0x00, 0x00, 0xc2, 0x60, // ......>....A...`
+ 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x06, 0x4b, 0x00, 0x00, 0x01, 0x00, // ...........K....
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb3, 0x13, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x7b, 0x23, 0x00, 0x00, 0x06, 0x4b, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, // ..{#...K........
+ 0x00, 0x00, 0xa4, 0x54, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xca, 0x0c, // ...T............
+ 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x42, 0x00, 0x00, 0x7b, 0x23, // ...........B..{#
+ 0x00, 0x00, 0xa4, 0x54, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x77, 0x45, // ...T..A.......wE
+ 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x77, 0x45, // ..........>...wE
+ 0x00, 0x00, 0xf3, 0x42, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x9c, 0x62, // ...B..=........b
+ 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x9c, 0x62, 0x00, 0x00, 0x38, 0x00, // ...........b..8.
+ 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x1f, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x08, 0x40, // ......7........@
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6c, 0x5e, 0x00, 0x00, 0xf8, 0x00, // ..7.......l^....
+ 0x02, 0x00, 0xfe, 0x55, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xa2, 0x46, // ...U..;........F
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x12, 0x59, // ......;........Y
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xfc, 0x3b, // ......;...y....;
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0xfd, 0x3b, // ......;........;
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x35, 0x3c, // ......;.......5<
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xcf, 0x39, // ......;........9
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x46, 0x00, 0x00, 0x0c, 0x0a, // ......>....F....
+ 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, // ..9...........5.
+ 0x00, 0x00, 0xa2, 0x46, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x15, 0x43, // ...F..=........C
+ 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x12, 0x59, 0x00, 0x00, 0x15, 0x43, // ...@..>....Y...C
+ 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x46, 0x17, 0x00, 0x00, 0xcd, 0x0c, // ..9.......F.....
+ 0x00, 0x00, 0x12, 0x59, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x61, 0x43, // ...Y..=.......aC
+ 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xfc, 0x3b, 0x00, 0x00, 0x61, 0x43, // ......>....;..aC
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0xd4, 0x2e, 0x00, 0x00, 0x50, 0x13, // ..=...........P.
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xfd, 0x3b, 0x00, 0x00, 0xd4, 0x2e, 0x00, 0x00, 0x3e, 0x00, // ..>....;......>.
+ 0x03, 0x00, 0x35, 0x3c, 0x00, 0x00, 0x46, 0x17, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, // ..5<..F...A.....
+ 0x00, 0x00, 0x05, 0x3b, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, // ...;..B.../.....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5a, 0x53, 0x00, 0x00, 0x05, 0x3b, // ..=.......ZS...;
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xcf, 0x39, 0x00, 0x00, 0x5a, 0x53, 0x00, 0x00, 0x39, 0x00, // ..>....9..ZS..9.
+ 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x15, 0x59, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0xfc, 0x3b, // .......Y.......;
+ 0x00, 0x00, 0xfd, 0x3b, 0x00, 0x00, 0x35, 0x3c, 0x00, 0x00, 0xcf, 0x39, 0x00, 0x00, 0x4f, 0x00, // ...;..5<...9..O.
+ 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x15, 0x59, 0x00, 0x00, 0x15, 0x59, // ...........Y...Y
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, // ..............A.
+ 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xb7, 0x5c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, // ..........B.../.
+ 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x70, 0x38, // ......=.......p8
+ 0x00, 0x00, 0xb7, 0x5c, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe8, 0x46, // ...............F
+ 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..!...p8........
+ 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0xe8, 0x46, 0x00, 0x00, 0x51, 0x00, // ...........F..Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, // ......M^........
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x48, 0x21, 0x00, 0x00, 0x18, 0x0e, // ..Q.......H!....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x52, // ......Q........R
+ 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, // ..........P.....
+ 0x00, 0x00, 0xdc, 0x41, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x48, 0x21, 0x00, 0x00, 0x03, 0x52, // ...A..M^..H!...R
+ 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x6c, 0x5e, 0x00, 0x00, 0xdc, 0x41, // ......>...l^...A
+ 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ......8....
};
-static const uint8_t fs_imgui_latlong_dx9[546] =
+static const uint8_t fs_imgui_latlong_dx9[548] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH.o.><...s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH.o.><...s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, // Color0......u_im
0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x01, 0x00, // ageLodEnabled...
- 0x00, 0x01, 0x00, 0xec, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x00, 0x43, 0x54, 0x41, // .............CTA
- 0x42, 0x1c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, // B...............
- 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, // .............D..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, // .`...........t..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // .....s_texColor.
- 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, // .u_imageLodEnabl
- 0x65, 0x64, 0x00, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, // ed..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, // 0.1..Q..........
- 0x3f, 0xdb, 0x0f, 0xc9, 0x40, 0xdb, 0x0f, 0x49, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, // ?...@..I.....Q..
- 0x05, 0x02, 0x00, 0x0f, 0xa0, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x00, 0x00, 0x00, // .......L?..L>...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, // ................
- 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x02, 0x00, 0x00, // ................
- 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x13, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, // ................
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x55, 0xa0, 0x01, 0x00, 0xaa, 0xa0, 0x25, 0x00, 0x00, // .......U.....%..
- 0x02, 0x01, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, // ................
- 0x80, 0x00, 0x00, 0x55, 0x90, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0xa0, 0x13, 0x00, 0x00, // ...U............
- 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, // ................
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x55, 0xa0, 0x01, 0x00, 0xaa, 0xa0, 0x25, 0x00, 0x00, // .......U.....%..
- 0x02, 0x02, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, // ................
- 0x80, 0x01, 0x00, 0xc5, 0x80, 0x02, 0x00, 0x55, 0x81, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, // .......U........
- 0x80, 0x02, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, // ................
- 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, // ._..............
- 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x08, 0x08, // .......U........
- 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x55, 0xa0, 0xff, 0xff, 0x00, // ...U.......U....
- 0x00, 0x00, // ..
+ 0x00, 0x01, 0x00, 0xec, 0x01, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x00, 0x43, // ...............C
+ 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, // TAB.............
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x44, // ...............D
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x74, // ...`...........t
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, // .......s_texColo
+ 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, // ...u_imageLodEna
+ 0x62, 0x6c, 0x65, 0x64, 0x00, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, // bled............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, // 10.1..Q........
+ 0x00, 0x00, 0x3f, 0xdb, 0x0f, 0xc9, 0x40, 0xdb, 0x0f, 0x49, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x51, // ..?...@..I.....Q
+ 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x00, // .........L?..L>.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, // ................
+ 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x02, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x13, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x55, 0xa0, 0x01, 0x00, 0xaa, 0xa0, 0x25, // .........U.....%
+ 0x00, 0x00, 0x02, 0x01, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, 0x90, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0xa0, 0x13, // .....U..........
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x55, 0xa0, 0x01, 0x00, 0xaa, 0xa0, 0x25, // .........U.....%
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x05, 0x80, 0x01, 0x00, 0xc5, 0x80, 0x02, 0x00, 0x55, 0x81, 0x01, 0x00, 0x00, 0x02, 0x00, // .........U......
+ 0x00, 0x02, 0x80, 0x02, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, // ................
+ 0x00, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, // ..._............
+ 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, // .........U......
+ 0x08, 0x08, 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x55, 0xa0, 0xff, // .....U.......U..
+ 0xff, 0x00, 0x00, 0x00, // ....
};
-static const uint8_t fs_imgui_latlong_dx11[617] =
+static const uint8_t fs_imgui_latlong_dx11[619] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x00, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, // ...s_texColor0..
- 0x00, 0x01, 0x00, 0x30, 0x02, 0x44, 0x58, 0x42, 0x43, 0x8e, 0x4b, 0x65, 0x9b, 0x2e, 0xce, 0x92, // ...0.DXBC.Ke....
- 0x33, 0xf0, 0xfb, 0x9d, 0x50, 0x09, 0x30, 0x0b, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, // 3...P.0......0..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, // .....,..........
- 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .ISGNP..........
- 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .8..............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, // .SV_POSITION.TEX
- 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, // COORD....OSGN,..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, // .SV_TARGET...SHD
- 0x52, 0x70, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, // Rp...@.......Y..
- 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, // .F. .........Z..
- 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, 0x04, 0x00, 0x70, 0x10, // ..`......X0...p.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, // .....UU..b...2..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....e.... .....
- 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, // .h.......8...2..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, // ..............@.
- 0x00, 0xdb, 0x0f, 0x49, 0x40, 0xdb, 0x0f, 0xc9, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...I@...@.......
- 0x00, 0x4d, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, // .M...B..........
- 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, // .........M......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, // .............A..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x06, 0x00, 0xd0, 0x00, 0x00, 0x62, 0x00, 0x10, // .....M.......b..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, // .............8..
- 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .........*......
- 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, // .:.......8......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, // .....:.......*..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .....H..........
- 0x00, 0x46, 0x03, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, // .F.......F~.....
- 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, // ..`........ ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....6...r .....
- 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x82, 0x20, 0x10, // .F.......2.... .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....... ........
- 0x00, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, // ..@....L?.@....L
- 0x3e, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // >>.......
+ 0x00, 0x01, 0x00, 0x30, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x8e, 0x4b, 0x65, 0x9b, 0x2e, // ...0...DXBC.Ke..
+ 0xce, 0x92, 0x33, 0xf0, 0xfb, 0x9d, 0x50, 0x09, 0x30, 0x0b, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x30, // ..3...P.0......0
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xb8, // .......,........
+ 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, // ...ISGNP........
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, // ...8............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, // ...........D....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, // ...SV_POSITION.T
+ 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, // EXCOORD....OSGN,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // ........... ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, // ...SV_TARGET...S
+ 0x48, 0x44, 0x52, 0x70, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x59, // HDRp...@.......Y
+ 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5a, // ...F. .........Z
+ 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, 0x04, 0x00, // ....`......X0...
+ 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, // p......UU..b...2
+ 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, 0x32, // ...h.......8...2
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, // ................
+ 0x40, 0x00, 0x00, 0xdb, 0x0f, 0x49, 0x40, 0xdb, 0x0f, 0xc9, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // @....I@...@.....
+ 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...M...B........
+ 0xd0, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x07, 0x82, // ...........M....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x80, 0x41, // ...............A
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x06, 0x00, 0xd0, 0x00, 0x00, 0x62, // .......M.......b
+ 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, // ...............8
+ 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, // ...........*....
+ 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, // ...:.......8....
+ 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, // .......:.......*
+ 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, // .......H........
+ 0x00, 0x00, 0x00, 0x46, 0x03, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, // ...F.......F~...
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, // ....`........ ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, // .......6...r ...
+ 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x82, // ...F.......2....
+ 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ ......
+ 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x40, 0x00, 0x00, 0xcd, // ....@....L?.@...
+ 0xcc, 0x4c, 0x3e, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // .L>>.......
};
static const uint8_t fs_imgui_latlong_mtl[1038] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
+ 0x46, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0xe7, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ......using name
0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, // space metal;.str
diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.bin.h b/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.bin.h
index 044744249fa..5d6cfebbf10 100644
--- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_imgui_texture_glsl[290] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x76, // Color..........v
0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // arying highp vec
0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, // 4 v_color0;.vary
@@ -20,275 +20,300 @@ static const uint8_t fs_imgui_texture_glsl[290] =
0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, // r = tmpvar_1;.}.
0x0a, 0x00, // ..
};
-static const uint8_t fs_imgui_texture_spv[3417] =
+static const uint8_t fs_imgui_texture_spv[3823] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x4c, 0x0d, 0x03, 0x02, 0x23, 0x07, // FSH.......L...#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........Ta......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, // w...t...........
- 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, // main........a...
- 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, // BgfxSampler2D...
- 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, // ....a.......m_sa
- 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, // mpler.......a...
- 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // ....m_texture...
- 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, // ........bgfxText
- 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, // ure2D(struct-Bgf
- 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, // xSampler2D-p1-t2
- 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x0e, 0x00, 0x00, // 11;vf2;.....'...
- 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // _sampler........
- 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ...._coord......
- 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, // 5...vec4_splat(f
- 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, // 1;.........._x..
- 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, // ........@main(vf
- 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // 4;vf2;vf4;......
- 0x42, 0x24, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // B$..v_color0....
- 0x05, 0x00, 0x05, 0x00, 0x78, 0x20, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....x ..v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc4, 0x41, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0......A..gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // ragData_0_......
- 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, // C...s_texColor..
- 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ........s_texCol
- 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, // orSampler.......
- 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, // ....s_texColorTe
- 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, // xture...........
- 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, // bgfx_VoidFrag...
- 0x05, 0x00, 0x04, 0x00, 0x0e, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....U..param...
- 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, // ........alpha...
- 0x05, 0x00, 0x04, 0x00, 0xdf, 0x4b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....K..param...
- 0x05, 0x00, 0x05, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // .....A..v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // ........w...v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, // lor0.........<..
- 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // v_texcoord0.....
- 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // t...v_texcoord0.
- 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // ........gl_FragD
- 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, // ata_0_.......G..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, // param........U..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, // param...........
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, // param...........
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ....D...$Global.
- 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....D.......u_vi
- 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, // ewRect......D...
- 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
- 0x06, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....D.......u_vi
- 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew......D.......
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
- 0x44, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // D.......u_proj..
- 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ....D.......u_in
- 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, // vProj.......D...
- 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
- 0x06, 0x00, 0x07, 0x00, 0x44, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ....D.......u_in
- 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
- 0x44, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // D.......u_model.
- 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....D.......u_mo
- 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x44, 0x06, 0x00, 0x00, // delView.....D...
- 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
- 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x44, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.....D.......
- 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, // u_alphaRef4.G...
- 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....".......G...
- 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....!.......G...
- 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....".......G...
- 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....!.......G...
- 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // w...........G...
- 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // t...........G...
- 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ............G...
- 0xc3, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ........@...H...
- 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // D.......#.......
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...D.......#...
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....H...D.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....H...D.......
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, // #... ...H...D...
- 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x44, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // D...........H...
- 0x44, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, // D.......#...`...
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...D...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...D.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...D.......
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, // #.......H...D...
- 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x44, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // D...........H...
- 0x44, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, // D.......#.......
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...D...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....H...D.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....H...D.......
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, // #... ...H...D...
- 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x44, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // D...........H...
- 0x44, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, // D.......#...`...
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...D...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...D.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...D.......
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, // #.......H...D...
- 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0x44, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // D...........H...
- 0x44, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, // D.......#.......
- 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...D...........
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x44, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...D.......
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...D.......
- 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x44, 0x06, 0x00, 0x00, // #.......H...D...
- 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0x44, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, // D.......#... ...
- 0x47, 0x00, 0x03, 0x00, 0x44, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, // G...D...........
- 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....!...........
- 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, // ............a...
- 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, // ........ .......
- 0x00, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ....a...........
- 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xc2, 0x03, 0x00, 0x00, // ........!.......
- 0x1d, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // ............!...
- 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
- 0x69, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, // i...............
- 0x9a, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, // ....;.......C...
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...y.......
- 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, // ....;...y.......
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...........
- 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, // ....;...........
- 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
- 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, // ................
- 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
- 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // +...............
- 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;.......w.......
- 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;.......t.......
- 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
- 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....e...........
- 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // +.......j... ...
- 0x1c, 0x00, 0x04, 0x00, 0xc3, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ........e...j...
- 0x1e, 0x00, 0x0e, 0x00, 0x44, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....D...........
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xc3, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e.......e...
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // e.......6.......
- 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // ................
- 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, // Sa..;........G..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, // ....;........U..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // ....;...........
- 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, // ....=.......!C..
- 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, // ....=........3..
- 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, // ....P...a.... ..
- 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x43, 0x12, 0x00, 0x00, // !C...3..>...C...
- 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, // . ..=........A..
- 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, // w...=........<..
- 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, // t...>....G...A..
- 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, // >....U...<..9...
- 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, // .....&.......G..
- 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .U......=.......
- 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........>.......
- 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // ........8...6...
- 0x1d, 0x00, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x03, 0x00, 0x00, // ................
- 0x37, 0x00, 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......'...7...
- 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xcd, 0x5b, 0x00, 0x00, // .............[..
- 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // A.......i$..'...
- 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, // ....=........1..
- 0x69, 0x24, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, // i$..A...y...TD..
- 0x27, 0x0e, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // '.......=.......
- 0x9b, 0x56, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, // .V..TD..V.......
- 0xc9, 0x42, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .B...1...V..=...
- 0x13, 0x00, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, // ....6.......W...
- 0x1d, 0x00, 0x00, 0x00, 0xa4, 0x51, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, // .....Q...B..6...
- 0xfe, 0x00, 0x02, 0x00, 0xa4, 0x51, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // .....Q..8...6...
- 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, // ....5...........
- 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
- 0x17, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x53, 0x00, 0x00, // .>..=........S..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, // ....=.......]J..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, // ....=........4..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x10, 0x35, 0x00, 0x00, // ....=........5..
- 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3f, 0x3a, 0x00, 0x00, // ....P.......?:..
- 0x18, 0x53, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, 0x10, 0x35, 0x00, 0x00, // .S..]J...4...5..
- 0xfe, 0x00, 0x02, 0x00, 0x3f, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // ....?:..8...6...
- 0x08, 0x00, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, // ............i...
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......B$..7...
- 0x90, 0x02, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....x ..7.......
- 0xc4, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x19, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .A..........;...
- 0x8a, 0x02, 0x00, 0x00, 0x0e, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....U......;...
- 0x90, 0x02, 0x00, 0x00, 0xdf, 0x4b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....K......>...
- 0x0e, 0x55, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .U......9.......
- 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x0e, 0x55, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....5....U..=...
- 0x13, 0x00, 0x00, 0x00, 0x48, 0x51, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....HQ..x ..>...
- 0xdf, 0x4b, 0x00, 0x00, 0x48, 0x51, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x1d, 0x00, 0x00, 0x00, // .K..HQ..9.......
- 0x69, 0x4c, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0xdf, 0x4b, 0x00, 0x00, // iL......C....K..
- 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x69, 0x4c, 0x00, 0x00, // Q...........iL..
- 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8f, 0x29, 0x00, 0x00, // ....=........)..
- 0x42, 0x24, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x23, 0x43, 0x00, 0x00, // B$..O.......#C..
- 0x8f, 0x29, 0x00, 0x00, 0x8f, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .)...)..........
- 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4b, 0x5e, 0x00, 0x00, // ....A.......K^..
- 0x42, 0x24, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // B$......=.......
- 0x13, 0x43, 0x00, 0x00, 0x4b, 0x5e, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .C..K^..........
- 0x52, 0x5c, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // R....C......Q...
- 0x0d, 0x00, 0x00, 0x00, 0x1e, 0x1d, 0x00, 0x00, 0x23, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........#C......
- 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xdc, 0x22, 0x00, 0x00, 0x23, 0x43, 0x00, 0x00, // Q........"..#C..
- 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x36, 0x60, 0x00, 0x00, // ....Q.......6`..
- 0x23, 0x43, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // #C......P.......
- 0x0f, 0x50, 0x00, 0x00, 0x1e, 0x1d, 0x00, 0x00, 0xdc, 0x22, 0x00, 0x00, 0x36, 0x60, 0x00, 0x00, // .P......."..6`..
- 0x52, 0x5c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc4, 0x41, 0x00, 0x00, 0x0f, 0x50, 0x00, 0x00, // R...>....A...P..
- 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....8....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xe0, 0x0e, 0x00, 0x00, 0x03, 0x02, // FSH.............
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x6f, 0x62, 0x00, 0x00, 0x00, 0x00, // #.........ob....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ..w...t.........
+ 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, // ................
+ 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x62, 0x67, // in............bg
+ 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, 0x72, 0x75, // fxTexture2D(stru
+ 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, // ct-BgfxSampler2D
+ 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, // -p1-t211;vf2;...
+ 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, // ..~..._sampler.m
+ 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, // _sampler........
+ 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, // .._sampler.m_tex
+ 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, // ture.........._c
+ 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, // oord......5...ve
+ 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, // c4_splat(f1;....
+ 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, // ......_x........
+ 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, // ..@main(vf4;vf2;
+ 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x76, 0x5f, // vf4;......nb..v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x8f, 0x41, // color0.........A
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x06, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ...J..gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, // a_0_......a...Bg
+ 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, // fxSampler2D.....
+ 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, // ..a.......m_samp
+ 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, // ler.......a.....
+ 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // ..m_texture.....
+ 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
+ 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // p.........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, // olorSampler.....
+ 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, // Texture.........
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, // ..s_texColor.m_s
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, // ampler........P.
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, // ..s_texColor.m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, // exture..........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, // ..bgfx_VoidFrag.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......]..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf3, 0x10, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, // ..........alpha.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......V..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......9..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x91, 0x37, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......7..param.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .......+..v_colo
+ 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, // r0........w...v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, // color0.........<
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ..t...v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // 0.........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, // gData_0_.......U
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, // ..param........8
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, // ..param.........
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, // ..param.........
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, // ......r...$Globa
+ 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....r.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x06, // viewRect......r.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, // ......u_viewTexe
+ 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....r.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x06, 0x00, 0x00, 0x03, 0x00, // view......r.....
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invView.....
+ 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, // ..r.......u_proj
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......r.......u_
+ 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x06, // invProj.......r.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // ......u_viewProj
+ 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x72, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......r.......u_
+ 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // invViewProj.....
+ 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..r.......u_mode
+ 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....r.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x72, 0x06, // modelView.....r.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x72, 0x06, 0x00, 0x00, 0x0b, 0x00, // wProj.....r.....
+ 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, // ..u_alphaRef4.G.
+ 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......".......G.
+ 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......!.......G.
+ 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......".......G.
+ 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......!.......G.
+ 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..w...........G.
+ 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, // ..t...........G.
+ 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
+ 0x04, 0x00, 0x7b, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, // ..{.......@...H.
+ 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, // ..r.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...r.......#.
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x02, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x02, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, // ..#... ...H...r.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..r...........H.
+ 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, // ..r.......#...`.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...r.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x04, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x04, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, // ..#.......H...r.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..r...........H.
+ 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, // ..r.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...r.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x06, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x06, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, // ..#... ...H...r.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..r...........H.
+ 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, // ..r.......#...`.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...r.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x08, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x08, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, // ..#.......H...r.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..r...........H.
+ 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, // ..r.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...r.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x72, 0x06, 0x00, 0x00, 0x0a, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x0a, 0x00, // ......H...r.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x72, 0x06, // ..#.......H...r.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x72, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, // ..r.......#... .
+ 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x72, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, // ..G...r.........
+ 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, // ......!.........
+ 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, // .......... ...y.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x0a, 0x08, // ..........!.....
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, 0x00, 0x90, 0x02, // ......y.........
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, // ..!.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x69, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, // ..!...i.........
+ 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, // ..............a.
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, // ......a... ...z.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, // ..........;...z.
+ 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, // .......... .....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, // ..........;.....
+ 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, // .......... ...{.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, // ..........;...{.
+ 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, // .......... .....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, // ..........;.....
+ 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..P.......+.....
+ 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, // ................
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, // ......+.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, // ......;.......w.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
+ 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, // ......;.......t.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, // ......;.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..........e.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ......+.......j.
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x7b, 0x08, 0x00, 0x00, 0x65, 0x00, // .. .......{...e.
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x72, 0x06, 0x00, 0x00, 0x1d, 0x00, // ..j.......r.....
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ......e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x7b, 0x08, // ..e...e...e...{.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, // ..e...e.......6.
+ 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, // ................
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, // ......Sa..;.....
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ..........;.....
+ 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, // ...U......;.....
+ 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ...8......;.....
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ..........=.....
+ 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, // ..!C......=.....
+ 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, // ...3......P...a.
+ 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, // ..^ ..!C...3..>.
+ 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, // ......^ ..A...y.
+ 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...V..........=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, // ...........V..>.
+ 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, // ..........A.....
+ 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...@..........=.
+ 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, // ...........@..>.
+ 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..P.......=.....
+ 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ...+..w...=.....
+ 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, // ...<..t...>....U
+ 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, // ...+..>....8...<
+ 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x16, 0x0e, // ..9........&....
+ 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, // ...U...8......=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ..............>.
+ 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ..............8.
+ 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x0a, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, // ......7...y...~.
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, // ..7...........7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xca, 0x1c, // ................
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0xf7, 0x0d, // ..=.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x7e, 0x17, // ..=........H..~.
+ 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xc6, 0x19, // ..V........>....
+ 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xfe, 0x24, // ...H..=........$
+ 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x82, 0x59, // ......W........Y
+ 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x82, 0x59, // ...>...$.......Y
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, // ..8...6.......5.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, 0x00, // ..........._..=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......[......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......%S......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......=......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......=......P.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, 0x53, // ......V[...[..%S
+ 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, 0x5b, // ...=...=......V[
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x0e, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ......i...7.....
+ 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8f, 0x41, // ..nb..7........A
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0xf8, 0x00, // ..7........J....
+ 0x02, 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5d, // ...S..;........]
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xd4, 0x56, // ......;...y....V
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x39, // ......;........9
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x91, 0x37, // ......;........7
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x0c, 0x0a, // ......>....]....
+ 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, // ..9...........5.
+ 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x23, 0x41, // ...]..=.......#A
+ 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x23, 0x41, // ......>....V..#A
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x50, 0x13, // ..=........,..P.
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x3d, 0x00, // ..>....9...,..=.
+ 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x37, 0x2c, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x3e, 0x00, // ......7,...A..>.
+ 0x03, 0x00, 0x91, 0x37, 0x00, 0x00, 0x37, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, // ...7..7,..9.....
+ 0x00, 0x00, 0x31, 0x55, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0xf7, 0x39, // ..1U.......V...9
+ 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf3, 0x10, // ...7..Q.........
+ 0x00, 0x00, 0x31, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..1U......=.....
+ 0x00, 0x00, 0x57, 0x32, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, // ..W2..nb..O.....
+ 0x00, 0x00, 0xeb, 0x4b, 0x00, 0x00, 0x57, 0x32, 0x00, 0x00, 0x57, 0x32, 0x00, 0x00, 0x00, 0x00, // ...K..W2..W2....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ..........A.....
+ 0x00, 0x00, 0x94, 0x1c, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ......nb......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa2, 0x32, 0x00, 0x00, 0x94, 0x1c, 0x00, 0x00, 0x85, 0x00, // .......2........
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9b, 0x1a, 0x00, 0x00, 0xa2, 0x32, 0x00, 0x00, 0xf3, 0x10, // ...........2....
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe6, 0x25, 0x00, 0x00, 0xeb, 0x4b, // ..Q........%...K
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa4, 0x2b, // ......Q........+
+ 0x00, 0x00, 0xeb, 0x4b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ...K......Q.....
+ 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0xeb, 0x4b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, // ...O...K......P.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xe6, 0x25, 0x00, 0x00, 0xa4, 0x2b, // .......?...%...+
+ 0x00, 0x00, 0xc5, 0x4f, 0x00, 0x00, 0x9b, 0x1a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8c, 0x4a, // ...O......>....J
+ 0x00, 0x00, 0x9e, 0x3f, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ...?......8....
};
-static const uint8_t fs_imgui_texture_dx9[250] =
+static const uint8_t fs_imgui_texture_dx9[252] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xdc, 0x00, 0x00, 0x03, 0xff, // Color0..........
- 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
- 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .<.......s_texCo
- 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // lor.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, // 0.1.............
- 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, // .........B......
- 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x08, // ................
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xff, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, // ................
- 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x00, // Color0..........
+ 0x03, 0xff, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ...L...0........
+ 0x00, 0x02, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, // ...<.......s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, // Color...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, // 10.1...........
+ 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, // ...........B....
+ 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x08, 0x08, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xff, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ............
};
-static const uint8_t fs_imgui_texture_dx11[421] =
+static const uint8_t fs_imgui_texture_dx11[423] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x84, 0x01, 0x44, 0x58, 0x42, // Color0.......DXB
- 0x43, 0x57, 0x7b, 0x79, 0x39, 0xfb, 0xd2, 0x84, 0x36, 0x53, 0xeb, 0x9a, 0xf9, 0x9e, 0xa5, 0xf8, // CW{y9...6S......
- 0xb1, 0x01, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // .............,..
- 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, // .........ISGNl..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........b......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, // .SV_POSITION.COL
- 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, // OR.TEXCOORD..OSG
- 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // N,........... ..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
- 0xab, 0x53, 0x48, 0x44, 0x52, 0xa8, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, // .SHDR....@...*..
- 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, // .Z....`......X..
- 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, // ..p......UU..b..
- 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, // .........b...2..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....e.... .....
- 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, // .h.......E......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, // .....F.......F~.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, // ......`......8..
- 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .. .............
- 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, // .:.......6...r .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, // .....F.......>..
- 0x01, 0x00, 0x00, 0x00, 0x00, // .....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x84, 0x01, 0x00, 0x00, 0x44, // Color0.........D
+ 0x58, 0x42, 0x43, 0x57, 0x7b, 0x79, 0x39, 0xfb, 0xd2, 0x84, 0x36, 0x53, 0xeb, 0x9a, 0xf9, 0x9e, // XBCW{y9...6S....
+ 0xa5, 0xf8, 0xb1, 0x01, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // ...............,
+ 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, // ...........ISGNl
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, // ...........b....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, // ...SV_POSITION.C
+ 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, // OLOR.TEXCOORD..O
+ 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, // .......SV_TARGET
+ 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xa8, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2a, // ...SHDR....@...*
+ 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, // ...Z....`......X
+ 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, // ....p......UU..b
+ 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, // ...........b...2
+ 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, // ...h.......E....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, // ~.......`......8
+ 0x00, 0x00, 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, // .... ...........
+ 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, // ...:.......6...r
+ 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, // ......F.......>
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // .......
};
static const uint8_t fs_imgui_texture_mtl[680] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...........us
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...........us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/imgui/fs_ocornut_imgui.bin.h b/3rdparty/bgfx/examples/common/imgui/fs_ocornut_imgui.bin.h
index c1585aafe94..952be213e8f 100644
--- a/3rdparty/bgfx/examples/common/imgui/fs_ocornut_imgui.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/fs_ocornut_imgui.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_ocornut_imgui_glsl[238] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x05, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x05, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, // ..........varyin
0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x76, 0x5f, 0x63, // g highp vec4 v_c
0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // olor0;.varying h
@@ -16,258 +16,283 @@ static const uint8_t fs_ocornut_imgui_glsl[238] =
0x20, 0x3d, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x2a, 0x20, 0x76, // = (tmpvar_1 * v
0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _color0);.}...
};
-static const uint8_t fs_ocornut_imgui_spv[3197] =
+static const uint8_t fs_ocornut_imgui_spv[3591] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x70, 0x0c, 0x03, 0x02, 0x23, 0x07, // FSH.......p...#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........Ta......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, // w...t...........
- 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, // main........a...
- 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, // BgfxSampler2D...
- 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, // ....a.......m_sa
- 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, // mpler.......a...
- 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // ....m_texture...
- 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, // ........bgfxText
- 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, // ure2D(struct-Bgf
- 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, // xSampler2D-p1-t2
- 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x0e, 0x00, 0x00, // 11;vf2;.....'...
- 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // _sampler........
- 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ...._coord......
- 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, // 5...vec4_splat(f
- 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, // 1;.........._x..
- 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, // ........@main(vf
- 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // 4;vf2;vf4;......
- 0x42, 0x24, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // B$..v_color0....
- 0x05, 0x00, 0x05, 0x00, 0x78, 0x20, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....x ..v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc4, 0x41, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0......A..gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0xfe, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....s_tex.......
- 0x0f, 0x0d, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ....s_texSampler
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // ........K...s_te
- 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // xTexture........
- 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, // ....bgfx_VoidFra
- 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0e, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // g........U..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x41, 0x12, 0x00, 0x00, 0x74, 0x65, 0x78, 0x65, // m.......A...texe
- 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xdf, 0x4b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // l........K..para
- 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // m........A..v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, // lor0........w...
- 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // v_color0........
- 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // .<..v_texcoord0.
- 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....t...v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0.........gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
- 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .G..param.......
- 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .U..param.......
- 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....param.......
- 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
- 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, // 0_..........$Glo
- 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // bal.............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_viewRect......
- 0x97, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, // ........u_viewTe
- 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // xel.............
- 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x01, 0x00, 0x00, // u_view..........
- 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, // ....u_invView...
- 0x06, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, // ............u_pr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // oj..............
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_invProj.......
- 0x97, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // ........u_viewPr
- 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x97, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // oj..............
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // u_invViewProj...
- 0x06, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
- 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // del.............
- 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, // u_modelView.....
- 0x97, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // ........u_modelV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x97, 0x01, 0x00, 0x00, // iewProj.........
- 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, // ....u_alphaRef4.
- 0x47, 0x00, 0x04, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......".......
- 0x47, 0x00, 0x04, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G.......!.......
- 0x47, 0x00, 0x04, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...K...".......
- 0x47, 0x00, 0x04, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...K...!.......
- 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...w...........
- 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // G...t...........
- 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
- 0x47, 0x00, 0x04, 0x00, 0x86, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // G...........@...
- 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, // #.......H.......
- 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, // ........H.......
- 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
- 0x97, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // `...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, // ........H.......
- 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, // ........H.......
- 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x97, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, // ........H.......
- 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, // ........H.......
- 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
- 0x97, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // `...H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, // ........H.......
- 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, // ........H.......
- 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x97, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
- 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
- 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x97, 0x01, 0x00, 0x00, // ........H.......
- 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, // ........H.......
- 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
- 0x97, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x48, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x97, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...G...........
- 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, // ........!.......
- 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, // .... ...........
- 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, // ................
- 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // a........... ...
- 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // ........a.......
- 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, // ................
- 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, // ............!...
- 0xc2, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, // ................
- 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
- 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, // !...............
- 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x21, 0x00, 0x06, 0x00, 0x69, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // !...i...........
- 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, // ........;.......
- 0xfe, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, // ........ ...y...
- 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, // ........;...y...
- 0x0f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, // ........ .......
- 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, // ........;.......
- 0x4b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // K...............
- 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // .......+.......
- 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
- 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, // ................
- 0x96, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
- 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, // ....;.......w...
- 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
- 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, // ....;.......t...
- 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
- 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ....;...........
- 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........e.......
- 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....+.......j...
- 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x86, 0x0b, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ...........e...
- 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x97, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // j...............
- 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ....e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x86, 0x0b, 0x00, 0x00, // e...e...e.......
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, // e...e.......6...
- 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....Sa..;.......
- 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // .G......;.......
- 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // .U......;.......
- 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // ........=.......
- 0x21, 0x43, 0x00, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, // !C......=.......
- 0x02, 0x33, 0x00, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, // .3..K...P...a...
- 0x12, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // . ..!C...3..>...
- 0xfe, 0x0e, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ..... ..=.......
- 0xfa, 0x41, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // .A..w...=.......
- 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, // .<..t...>....G..
- 0xfa, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, // .A..>....U...<..
- 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, // 9........&......
- 0xc9, 0x47, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .G...U......=...
- 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
- 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // ............8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0xc2, 0x03, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // ....7.......'...
- 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
- 0xcd, 0x5b, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, // .[..A.......i$..
- 0x27, 0x0e, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, // '.......=.......
- 0x16, 0x31, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, // .1..i$..A...y...
- 0x54, 0x44, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // TD..'.......=...
- 0xfc, 0x01, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, // .....V..TD..V...
- 0xfe, 0x01, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, // .....B...1...V..
- 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, // =.......6.......
- 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa4, 0x51, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, // W........Q...B..
- 0x36, 0x1c, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xa4, 0x51, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // 6........Q..8...
- 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6.......5.......
- 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, // ....7...........
- 0xf8, 0x00, 0x02, 0x00, 0x17, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .....>..=.......
- 0x18, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .S......=.......
- 0x5d, 0x4a, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ]J......=.......
- 0xfd, 0x34, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // .4......=.......
- 0x10, 0x35, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // .5......P.......
- 0x3f, 0x3a, 0x00, 0x00, 0x18, 0x53, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, // ?:...S..]J...4..
- 0x10, 0x35, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x3f, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // .5......?:..8...
- 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
- 0x69, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, // i...7.......B$..
- 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......x ..7...
- 0x9a, 0x02, 0x00, 0x00, 0xc4, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x19, 0x00, 0x00, // .....A..........
- 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x0e, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
- 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xdf, 0x4b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........K......
- 0x3e, 0x00, 0x03, 0x00, 0x0e, 0x55, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, // >....U......9...
- 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x0e, 0x55, 0x00, 0x00, // ........5....U..
- 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x48, 0x51, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, // =.......HQ..x ..
- 0x3e, 0x00, 0x03, 0x00, 0xdf, 0x4b, 0x00, 0x00, 0x48, 0x51, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, // >....K..HQ..9...
- 0x1d, 0x00, 0x00, 0x00, 0x41, 0x12, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0xfe, 0x0e, 0x00, 0x00, // ....A...........
- 0xdf, 0x4b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xac, 0x21, 0x00, 0x00, // .K..=........!..
- 0x42, 0x24, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x73, 0x2b, 0x00, 0x00, // B$..........s+..
- 0x41, 0x12, 0x00, 0x00, 0xac, 0x21, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc4, 0x41, 0x00, 0x00, // A....!..>....A..
- 0x73, 0x2b, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // s+......8....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xf8, 0x0d, 0x00, 0x00, 0x03, 0x02, // FSH.............
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x6f, 0x62, 0x00, 0x00, 0x00, 0x00, // #.........ob....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ..w...t.........
+ 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, // ................
+ 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x62, 0x67, // in............bg
+ 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, 0x72, 0x75, // fxTexture2D(stru
+ 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, // ct-BgfxSampler2D
+ 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, // -p1-t211;vf2;...
+ 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, // ..~..._sampler.m
+ 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, // _sampler........
+ 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, // .._sampler.m_tex
+ 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, // ture.........._c
+ 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, // oord......5...ve
+ 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, // c4_splat(f1;....
+ 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x16, 0x0e, // ......_x........
+ 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, // ..@main(vf4;vf2;
+ 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x76, 0x5f, // vf4;......nb..v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x8f, 0x41, // color0.........A
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x06, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ...J..gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, // a_0_......a...Bg
+ 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, // fxSampler2D.....
+ 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, // ..a.......m_samp
+ 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, // ler.......a.....
+ 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // ..m_texture.....
+ 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
+ 0x70, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x53, // p.........s_texS
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x4b, 0x0f, // ampler........K.
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, // ..s_texTexture..
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x4f, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2e, // ......O...s_tex.
+ 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x05, 0x00, 0x06, 0x00, 0x36, 0x0e, // m_sampler.....6.
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // ..s_tex.m_textur
+ 0x65, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, // e.........bgfx_V
+ 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, // oidFrag........]
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x41, 0x12, // ..param.......A.
+ 0x00, 0x00, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd4, 0x56, // ..texel........V
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf7, 0x39, // ..param........9
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x91, 0x37, // ..param........7
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, // ..param........+
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..w...v_color0..
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // .......<..v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, // oord0.....t...v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, // texcoord0.......
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......U..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......8..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // ..........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc5, 0x01, // gData_0_........
+ 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc5, 0x01, // ..$Global.......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc5, 0x01, // viewTexel.......
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
+ 0x06, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x04, 0x00, // iew.............
+ 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc5, 0x01, // ..u_proj........
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc5, 0x01, // viewProj........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x08, 0x00, // roj.............
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc5, 0x01, // ..u_model.......
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.............u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
+ 0x06, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..........u_alph
+ 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x22, 0x00, // aRef4.G.......".
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x21, 0x00, // ......G.......!.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x22, 0x00, // ......G...K...".
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x21, 0x00, // ......G...K...!.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, // ......G...w.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G...t.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, // ......G.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x7c, 0x04, 0x00, 0x00, 0x06, 0x00, // ......G...|.....
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, // ..#.......H.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x04, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, // ..#...`...H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, // ..#.......H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, // ..#...`...H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, // ..#.......H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x0b, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xc5, 0x01, // ..#... ...G.....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, // .. ...y.........
+ 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, // .......... .....
+ 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x96, 0x00, // .. .............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
+ 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x0a, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, // ..!...........y.
+ 0x00, 0x00, 0x13, 0x03, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, // ..........!.....
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x69, 0x00, // ..........!...i.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, // ................
+ 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, // ......a.........
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x09, // .. ...........a.
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, // .. ...z.........
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x00, 0x00, // ..;...z.........
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x00, 0x00, // ..;.......K.....
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, // .. ...{.........
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x4f, 0x12, 0x00, 0x00, 0x06, 0x00, // ..;...{...O.....
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x96, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x06, 0x00, // ..;.......6.....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
+ 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, // ......w....... .
+ 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, // ......t....... .
+ 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, // ................
+ 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, // ..e.............
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, // ...... .......+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, // ......j... .....
+ 0x04, 0x00, 0x7c, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, // ..|...e...j.....
+ 0x0e, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, // ..............e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x7c, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...|...e...e.
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, // ......6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, // ..............Sa
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, // ..;.............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, // ..;........U....
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, // ..;........8....
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, // ..;.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x0f, 0x0d, // ..=.......!C....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x4b, 0x0f, // ..=........3..K.
+ 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, // ..P...a...^ ..!C
+ 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, // ...3..>.......^
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, // ..A...y....V....
+ 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, // ......=.........
+ 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4f, 0x12, 0x00, 0x00, 0x1f, 0x1f, // ...V..>...O.....
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, // ..A........@....
+ 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xd3, 0x1e, // ......=.........
+ 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x36, 0x0e, 0x00, 0x00, 0xd3, 0x1e, // ...@..>...6.....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x77, 0x0e, // ..=........+..w.
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, // ..=........<..t.
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, // ..>....U...+..>.
+ 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, // ...8...<..9.....
+ 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, // ...&.......U...8
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, // ......=.........
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, // ......>.........
+ 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ......8...6.....
+ 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x08, 0x00, 0x00, 0x37, 0x00, // ..............7.
+ 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x13, 0x03, // ..y...~...7.....
+ 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, // ......7.........
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xca, 0x1c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, // ..........=.....
+ 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ..........=.....
+ 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, // ...H..~...V.....
+ 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x3d, 0x00, // ...>.......H..=.
+ 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, // .......$......W.
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x82, 0x59, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xfe, 0x24, // .......Y...>...$
+ 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x82, 0x59, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // .......Y..8...6.
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, // ......5.........
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, // ..7.............
+ 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, // ..._..=........[
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, // ......=.......%S
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, // ......=........=
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, // ......=........=
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, // ......P.......V[
+ 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, // ...[..%S...=...=
+ 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // ......V[..8...6.
+ 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, // ..............i.
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x37, 0x00, // ..7.......nb..7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // .......A..7.....
+ 0x00, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, // ...J.......S..;.
+ 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......]......;.
+ 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..y....V......;.
+ 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......9......;.
+ 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, // .......7......>.
+ 0x03, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...]......9.....
+ 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x3d, 0x00, // ......5....]..=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x4f, 0x12, 0x00, 0x00, 0x3e, 0x00, // ......#A..O...>.
+ 0x03, 0x00, 0xd4, 0x56, 0x00, 0x00, 0x23, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, // ...V..#A..=.....
+ 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, // ...,..6...>....9
+ 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x37, 0x2c, // ...,..=.......7,
+ 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x91, 0x37, 0x00, 0x00, 0x37, 0x2c, // ...A..>....7..7,
+ 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x41, 0x12, 0x00, 0x00, 0x99, 0x0f, // ..9.......A.....
+ 0x00, 0x00, 0xd4, 0x56, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x91, 0x37, 0x00, 0x00, 0x3d, 0x00, // ...V...9...7..=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xba, 0x5b, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x85, 0x00, // .......[..nb....
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x34, 0x00, 0x00, 0x41, 0x12, 0x00, 0x00, 0xba, 0x5b, // ......;4..A....[
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x3b, 0x34, 0x00, 0x00, 0xfd, 0x00, // ..>....J..;4....
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..8....
};
-static const uint8_t fs_ocornut_imgui_dx9[229] =
+static const uint8_t fs_ocornut_imgui_dx9[231] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x05, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x1f, 0x00, // 0...............
- 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, // CTAB....O.......
- 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, // ............H...
- 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x38, 0x00, 0x00, 0x00, // 0...........8...
- 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x00, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00, // ....s_tex.......
- 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, // ............ps_3
- 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, // _0.Microsoft (R)
- 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, // HLSL Shader Com
- 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, // piler 10.1......
- 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
- 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, // ................
- 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, // B...............
- 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, // ................
- 0xff, 0xff, 0x00, 0x00, 0x00, // .....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x05, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, // 0...............
+ 0x1f, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x03, // ..CTAB....O.....
+ 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x38, 0x00, // ..0...........8.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x00, 0xab, 0xab, 0x04, 0x00, // ......s_tex.....
+ 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, // ..............ps
+ 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
+ 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
+ 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
+ 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, // ................
+ 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, // ..B.............
+ 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, // ................
+ 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
};
-static const uint8_t fs_ocornut_imgui_dx11[396] =
+static const uint8_t fs_ocornut_imgui_dx11[398] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x05, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x70, 0x01, 0x44, 0x58, 0x42, 0x43, 0xbe, 0x78, 0xe7, 0xa5, // 0.....p.DXBC.x..
- 0x19, 0x0c, 0x70, 0xeb, 0x4c, 0xb1, 0xac, 0x1f, 0x16, 0x84, 0xe9, 0x97, 0x01, 0x00, 0x00, 0x00, // ..p.L...........
- 0x70, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // p.......,.......
- 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....ISGNl.......
- 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....P...........
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....b...........
- 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, // ............SV_P
- 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, // OSITION.COLOR.TE
- 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, // XCOORD..OSGN,...
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, // SV_TARGET...SHDR
- 0x94, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, // ....@...%...Z...
- 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, // .`......X....p..
- 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, // ....UU..b.......
- 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....b...2.......
- 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, // e.... ......h...
- 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....E...........
- 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // F.......F~......
- 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x20, 0x10, 0x00, // .`......8.... ..
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // ....F.......F...
- 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ....>.......
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x05, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x70, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0xbe, 0x78, // 0.....p...DXBC.x
+ 0xe7, 0xa5, 0x19, 0x0c, 0x70, 0xeb, 0x4c, 0xb1, 0xac, 0x1f, 0x16, 0x84, 0xe9, 0x97, 0x01, 0x00, // ....p.L.........
+ 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..p.......,.....
+ 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, // ......ISGNl.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ......P.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......b.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x53, 0x56, // ..............SV
+ 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, // _POSITION.COLOR.
+ 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, // TEXCOORD..OSGN,.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, // ..SV_TARGET...SH
+ 0x44, 0x52, 0x94, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x5a, 0x00, // DR....@...%...Z.
+ 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, // ...`......X....p
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, // ......UU..b.....
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, // ......b...2.....
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e.... ......h.
+ 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......E.........
+ 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, // ..F.......F~....
+ 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x20, // ...`......8....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, // ......F.......F.
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ......>.......
};
static const uint8_t fs_ocornut_imgui_mtl[570] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH.......+...us
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH.......+...us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/imgui/imgui.cpp b/3rdparty/bgfx/examples/common/imgui/imgui.cpp
index 235a9148990..3a29d57efc9 100644
--- a/3rdparty/bgfx/examples/common/imgui/imgui.cpp
+++ b/3rdparty/bgfx/examples/common/imgui/imgui.cpp
@@ -1,816 +1,88 @@
/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * Copyright 2014-2015 Daniel Collin. All rights reserved.
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
-// This code is based on:
-//
-// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
-//
-// This software is provided 'as-is', without any express or implied
-// warranty. In no event will the authors be held liable for any damages
-// arising from the use of this software.
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-// 1. The origin of this software must not be misrepresented; you must not
-// claim that you wrote the original software. If you use this software
-// in a product, an acknowledgment in the product documentation would be
-// appreciated but is not required.
-// 2. Altered source versions must be plainly marked as such, and must not be
-// misrepresented as being the original software.
-// 3. This notice may not be removed or altered from any source distribution.
-//
-// Source altered and distributed from https://github.com/AdrienHerubel/imgui
-
-#include <stdio.h>
-#include <bx/string.h>
-#include <bx/uint32_t.h>
-#include <bx/fpumath.h>
-#include <bx/handlealloc.h>
-#include <bx/crtimpl.h>
+#include <bgfx/bgfx.h>
+#include <bgfx/embedded_shader.h>
+#include <bx/allocator.h>
+#include <bx/math.h>
+#include <bx/timer.h>
+#include <ocornut-imgui/imgui.h>
#include "imgui.h"
-#include "ocornut_imgui.h"
#include "../bgfx_utils.h"
-#include "../nanovg/nanovg.h"
-
-#include <bgfx/embedded_shader.h>
-// embedded shaders
-#include "vs_imgui_color.bin.h"
-#include "fs_imgui_color.bin.h"
-#include "vs_imgui_texture.bin.h"
-#include "fs_imgui_texture.bin.h"
-#include "vs_imgui_cubemap.bin.h"
-#include "fs_imgui_cubemap.bin.h"
-#include "vs_imgui_latlong.bin.h"
-#include "fs_imgui_latlong.bin.h"
+#ifndef USE_ENTRY
+# if defined(SCI_NAMESPACE)
+# define USE_ENTRY 1
+# else
+# define USE_ENTRY 0
+# endif // defined(SCI_NAMESPACE)
+#endif // USE_ENTRY
+
+#if USE_ENTRY
+# include "../entry/entry.h"
+#endif // USE_ENTRY
+
+#if defined(SCI_NAMESPACE)
+# include "../entry/input.h"
+# include "scintilla.h"
+#endif // defined(SCI_NAMESPACE)
+
+#include "vs_ocornut_imgui.bin.h"
+#include "fs_ocornut_imgui.bin.h"
#include "vs_imgui_image.bin.h"
#include "fs_imgui_image.bin.h"
-#include "fs_imgui_image_swizz.bin.h"
+
+#include "roboto_regular.ttf.h"
+#include "robotomono_regular.ttf.h"
+#include "icons_kenney.ttf.h"
+#include "icons_font_awesome.ttf.h"
static const bgfx::EmbeddedShader s_embeddedShaders[] =
{
- BGFX_EMBEDDED_SHADER(vs_imgui_color),
- BGFX_EMBEDDED_SHADER(fs_imgui_color),
- BGFX_EMBEDDED_SHADER(vs_imgui_texture),
- BGFX_EMBEDDED_SHADER(fs_imgui_texture),
- BGFX_EMBEDDED_SHADER(vs_imgui_cubemap),
- BGFX_EMBEDDED_SHADER(fs_imgui_cubemap),
- BGFX_EMBEDDED_SHADER(vs_imgui_latlong),
- BGFX_EMBEDDED_SHADER(fs_imgui_latlong),
+ BGFX_EMBEDDED_SHADER(vs_ocornut_imgui),
+ BGFX_EMBEDDED_SHADER(fs_ocornut_imgui),
BGFX_EMBEDDED_SHADER(vs_imgui_image),
BGFX_EMBEDDED_SHADER(fs_imgui_image),
- BGFX_EMBEDDED_SHADER(fs_imgui_image_swizz),
BGFX_EMBEDDED_SHADER_END()
};
-// embedded font
-#include "roboto_regular.ttf.h"
-
-BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4244); // warning C4244: '=' : conversion from '' to '', possible loss of data
-
-#define USE_NANOVG_FONT 0
-
-#define IMGUI_CONFIG_MAX_FONTS 20
-
-#define MAX_TEMP_COORDS 100
-#define NUM_CIRCLE_VERTS (8 * 4)
-
-static const int32_t BUTTON_HEIGHT = 20;
-static const int32_t SLIDER_HEIGHT = 20;
-static const int32_t SLIDER_MARKER_WIDTH = 10;
-static const int32_t CHECK_SIZE = 8;
-static const int32_t DEFAULT_SPACING = 4;
-static const int32_t TEXT_HEIGHT = 8;
-static const int32_t SCROLL_AREA_PADDING = 6;
-static const int32_t AREA_HEADER = 20;
-static const float s_tabStops[4] = {150, 210, 270, 330};
-
-void* imguiMalloc(size_t _size, void*);
-void imguiFree(void* _ptr, void*);
-
-#define IMGUI_MIN(_a, _b) (_a)<(_b)?(_a):(_b)
-#define IMGUI_MAX(_a, _b) (_a)>(_b)?(_a):(_b)
-#define IMGUI_CLAMP(_a, _min, _max) IMGUI_MIN(IMGUI_MAX(_a, _min), _max)
-
-BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4505); // error C4505: '' : unreferenced local function has been removed
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-function"); // warning: ‘int rect_width_compare(const void*, const void*)’ defined but not used
-BX_PRAGMA_DIAGNOSTIC_PUSH();
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wtype-limits"); // warning: comparison is always true due to limited range of data type
-#define STBTT_malloc(_size, _userData) imguiMalloc(_size, _userData)
-#define STBTT_free(_ptr, _userData) imguiFree(_ptr, _userData)
-#define STB_RECT_PACK_IMPLEMENTATION
-#include <stb/stb_rect_pack.h>
-#define STB_TRUETYPE_IMPLEMENTATION
-#include <stb/stb_truetype.h>
-BX_PRAGMA_DIAGNOSTIC_POP();
-
-namespace
+struct FontRangeMerge
{
- static uint32_t addQuad(uint16_t* _indices, uint16_t _idx0, uint16_t _idx1, uint16_t _idx2, uint16_t _idx3)
- {
- _indices[0] = _idx0;
- _indices[1] = _idx3;
- _indices[2] = _idx1;
-
- _indices[3] = _idx1;
- _indices[4] = _idx3;
- _indices[5] = _idx2;
-
- return 6;
- }
-
- float sign(float px, float py, float ax, float ay, float bx, float by)
- {
- return (px - bx) * (ay - by) - (ax - bx) * (py - by);
- }
-
- bool pointInTriangle(float px, float py, float ax, float ay, float bx, float by, float cx, float cy)
- {
- const bool b1 = sign(px, py, ax, ay, bx, by) < 0.0f;
- const bool b2 = sign(px, py, bx, by, cx, cy) < 0.0f;
- const bool b3 = sign(px, py, cx, cy, ax, ay) < 0.0f;
-
- return ( (b1 == b2) && (b2 == b3) );
- }
-
- void closestPointOnLine(float& ox, float &oy, float px, float py, float ax, float ay, float bx, float by)
- {
- float dx = px - ax;
- float dy = py - ay;
-
- float lx = bx - ax;
- float ly = by - ay;
-
- float len = sqrtf(lx*lx+ly*ly);
-
- // Normalize.
- float invLen = 1.0f/len;
- lx*=invLen;
- ly*=invLen;
-
- float dot = (dx*lx + dy*ly);
-
- if (dot < 0.0f)
- {
- ox = ax;
- oy = ay;
- }
- else if (dot > len)
- {
- ox = bx;
- oy = by;
- }
- else
- {
- ox = ax + lx*dot;
- oy = ay + ly*dot;
- }
- }
-
- void closestPointOnTriangle(float& ox, float &oy, float px, float py, float ax, float ay, float bx, float by, float cx, float cy)
- {
- float abx, aby;
- float bcx, bcy;
- float cax, cay;
- closestPointOnLine(abx, aby, px, py, ax, ay, bx, by);
- closestPointOnLine(bcx, bcy, px, py, bx, by, cx, cy);
- closestPointOnLine(cax, cay, px, py, cx, cy, ax, ay);
-
- const float pabx = px - abx;
- const float paby = py - aby;
- const float pbcx = px - bcx;
- const float pbcy = py - bcy;
- const float pcax = px - cax;
- const float pcay = py - cay;
-
- const float lab = sqrtf(pabx*pabx+paby*paby);
- const float lbc = sqrtf(pbcx*pbcx+pbcy*pbcy);
- const float lca = sqrtf(pcax*pcax+pcay*pcay);
-
- const float m = bx::fmin3(lab, lbc, lca);
- if (m == lab)
- {
- ox = abx;
- oy = aby;
- }
- else if (m == lbc)
- {
- ox = bcx;
- oy = bcy;
- }
- else// if (m == lca).
- {
- ox = cax;
- oy = cay;
- }
- }
-
- inline float vec2Dot(const float* __restrict _a, const float* __restrict _b)
- {
- return _a[0]*_b[0] + _a[1]*_b[1];
- }
-
- void barycentric(float& _u, float& _v, float& _w
- , float _ax, float _ay
- , float _bx, float _by
- , float _cx, float _cy
- , float _px, float _py
- )
- {
- const float v0[2] = { _bx - _ax, _by - _ay };
- const float v1[2] = { _cx - _ax, _cy - _ay };
- const float v2[2] = { _px - _ax, _py - _ay };
- const float d00 = vec2Dot(v0, v0);
- const float d01 = vec2Dot(v0, v1);
- const float d11 = vec2Dot(v1, v1);
- const float d20 = vec2Dot(v2, v0);
- const float d21 = vec2Dot(v2, v1);
- const float denom = d00 * d11 - d01 * d01;
- _v = (d11 * d20 - d01 * d21) / denom;
- _w = (d00 * d21 - d01 * d20) / denom;
- _u = 1.0f - _v - _w;
- }
-
- struct PosColorVertex
- {
- float m_x;
- float m_y;
- uint32_t m_abgr;
-
- static void init()
- {
- ms_decl
- .begin()
- .add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float)
- .add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
- .end();
- }
-
- static bgfx::VertexDecl ms_decl;
- };
-
- bgfx::VertexDecl PosColorVertex::ms_decl;
-
- struct PosColorUvVertex
- {
- float m_x;
- float m_y;
- float m_u;
- float m_v;
- uint32_t m_abgr;
-
- static void init()
- {
- ms_decl
- .begin()
- .add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float)
- .add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float)
- .add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
- .end();
- }
-
- static bgfx::VertexDecl ms_decl;
- };
-
- bgfx::VertexDecl PosColorUvVertex::ms_decl;
-
- struct PosUvVertex
- {
- float m_x;
- float m_y;
- float m_u;
- float m_v;
-
- static void init()
- {
- ms_decl
- .begin()
- .add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float)
- .add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float)
- .end();
- }
-
- static bgfx::VertexDecl ms_decl;
- };
-
- bgfx::VertexDecl PosUvVertex::ms_decl;
-
- struct PosNormalVertex
- {
- float m_x;
- float m_y;
- float m_z;
- float m_nx;
- float m_ny;
- float m_nz;
-
- static void init()
- {
- ms_decl.begin()
- .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
- .add(bgfx::Attrib::Normal, 3, bgfx::AttribType::Float)
- .end();
- }
-
- void set(float _x, float _y, float _z, float _nx, float _ny, float _nz)
- {
- m_x = _x;
- m_y = _y;
- m_z = _z;
- m_nx = _nx;
- m_ny = _ny;
- m_nz = _nz;
- }
-
- static bgfx::VertexDecl ms_decl;
- };
-
- bgfx::VertexDecl PosNormalVertex::ms_decl;
-
-} // namespace
+ const void* data;
+ size_t size;
+ ImWchar ranges[3];
+};
-#if !USE_NANOVG_FONT
-static float getTextLength(stbtt_bakedchar* _chardata, const char* _text, uint32_t& _numVertices)
+static FontRangeMerge s_fontRangeMerge[] =
{
- float xpos = 0;
- float len = 0;
- uint32_t numVertices = 0;
-
- while (*_text)
- {
- int32_t ch = (uint8_t)*_text;
- if (ch == '\t')
- {
- for (int32_t ii = 0; ii < 4; ++ii)
- {
- if (xpos < s_tabStops[ii])
- {
- xpos = s_tabStops[ii];
- break;
- }
- }
- }
- else if (ch >= ' '
- && ch < 128)
- {
- stbtt_bakedchar* b = _chardata + ch - ' ';
- int32_t round_x = STBTT_ifloor( (xpos + b->xoff) + 0.5);
- len = round_x + b->x1 - b->x0 + 0.5f;
- xpos += b->xadvance;
- numVertices += 6;
- }
-
- ++_text;
- }
-
- _numVertices = numVertices;
+ { s_iconsKenneyTtf, sizeof(s_iconsKenneyTtf), { ICON_MIN_KI, ICON_MAX_KI, 0 } },
+ { s_iconsFontAwesomeTtf, sizeof(s_iconsFontAwesomeTtf), { ICON_MIN_FA, ICON_MAX_FA, 0 } },
+};
- return len;
-}
-#endif // !USE_NANOVG_FONT
+static void* memAlloc(size_t _size);
+static void memFree(void* _ptr);
-struct Imgui
+struct OcornutImguiContext
{
- Imgui()
- : m_mx(-1)
- , m_my(-1)
- , m_scroll(0)
- , m_active(0)
- , m_hot(0)
- , m_hotToBe(0)
- , m_dragX(0)
- , m_dragY(0)
- , m_dragOrig(0)
- , m_left(false)
- , m_leftPressed(false)
- , m_leftReleased(false)
- , m_isHot(false)
- , m_wentActive(false)
- , m_insideArea(false)
- , m_isActivePresent(false)
- , m_checkActivePresence(false)
- , m_widgetId(0)
- , m_enabledAreaIds(0)
- , m_textureWidth(512)
- , m_textureHeight(512)
- , m_halfTexel(0.0f)
- , m_nvg(NULL)
- , m_view(255)
- , m_surfaceWidth(0)
- , m_surfaceHeight(0)
- , m_viewWidth(0)
- , m_viewHeight(0)
- , m_currentFontIdx(0)
- {
- m_areaId.reset();
-
- m_invTextureWidth = 1.0f/m_textureWidth;
- m_invTextureHeight = 1.0f/m_textureHeight;
-
- u_imageLodEnabled.idx = bgfx::invalidHandle;
- u_imageSwizzle.idx = bgfx::invalidHandle;
- s_texColor.idx = bgfx::invalidHandle;
- m_missingTexture.idx = bgfx::invalidHandle;
-
- m_colorProgram.idx = bgfx::invalidHandle;
- m_textureProgram.idx = bgfx::invalidHandle;
- m_cubeMapProgram.idx = bgfx::invalidHandle;
- m_latlongProgram.idx = bgfx::invalidHandle;
- m_imageProgram.idx = bgfx::invalidHandle;
- m_imageSwizzProgram.idx = bgfx::invalidHandle;
- }
-
- ImguiFontHandle createFont(const void* _data, float _fontSize)
- {
-#if !USE_NANOVG_FONT
- const ImguiFontHandle handle = { m_fontHandle.alloc() };
- const bgfx::Memory* mem = bgfx::alloc(m_textureWidth * m_textureHeight);
- stbtt_BakeFontBitmap( (uint8_t*)_data, 0, _fontSize, mem->data, m_textureWidth, m_textureHeight, 32, 96, m_fonts[handle.idx].m_cdata);
- m_fonts[handle.idx].m_texture = bgfx::createTexture2D(
- m_textureWidth
- , m_textureHeight
- , false
- , 1
- , bgfx::TextureFormat::R8
- , BGFX_TEXTURE_NONE
- , mem
- );
- m_fonts[handle.idx].m_size = _fontSize;
-#else
- const ImguiFontHandle handle = { bgfx::invalidHandle };
-#endif // !USE_NANOVG_FONT
- return handle;
- }
+ static void renderDrawLists(ImDrawData* _drawData);
- void setFont(ImguiFontHandle _handle)
+ void render(ImDrawData* _drawData)
{
- if (isValid(_handle) )
- {
- m_currentFontIdx = _handle.idx;
- }
- }
+ const ImGuiIO& io = ImGui::GetIO();
+ const float width = io.DisplaySize.x;
+ const float height = io.DisplaySize.y;
- bgfx::TextureHandle genMissingTexture(uint32_t _width, uint32_t _height, float _lineWidth = 0.02f)
- {
- const bgfx::Memory* mem = bgfx::alloc(_width*_height*4);
- uint32_t* bgra8 = (uint32_t*)mem->data;
-
- const float sx = 0.70710677f;
- const float cx = 0.70710677f;
+ bgfx::setViewName(m_viewId, "ImGui");
+ bgfx::setViewMode(m_viewId, bgfx::ViewMode::Sequential);
- for (uint32_t yy = 0; yy < _height; ++yy)
- {
- for (uint32_t xx = 0; xx < _width; ++xx)
- {
- float px = xx / float(_width) * 2.0f - 1.0f;
- float py = yy / float(_height) * 2.0f - 1.0f;
-
- float sum = bx::fpulse(px * cx - py * sx, _lineWidth, -_lineWidth)
- + bx::fpulse(px * sx + py * cx, _lineWidth, -_lineWidth)
- ;
- *bgra8++ = sum >= 1.0f ? 0xffff0000 : 0xffffffff;
- }
- }
-
- return bgfx::createTexture2D(
- uint16_t(_width)
- , uint16_t(_height)
- , false
- , 1
- , bgfx::TextureFormat::BGRA8
- , 0
- , mem
- );
- }
-
- ImguiFontHandle create(float _fontSize, bx::AllocatorI* _allocator)
- {
- m_allocator = _allocator;
-
-#if BX_CONFIG_ALLOCATOR_CRT
- if (NULL == _allocator)
- {
- static bx::CrtAllocator allocator;
- m_allocator = &allocator;
- }
-#endif // BX_CONFIG_ALLOCATOR_CRT
-
- IMGUI_create(_fontSize, m_allocator);
-
- m_nvg = nvgCreate(1, m_view, m_allocator);
- nvgCreateFontMem(m_nvg, "default", (unsigned char*)s_robotoRegularTtf, INT32_MAX, 0);
- nvgFontSize(m_nvg, _fontSize);
- nvgFontFace(m_nvg, "default");
-
- for (int32_t ii = 0; ii < NUM_CIRCLE_VERTS; ++ii)
- {
- float a = (float)ii / (float)NUM_CIRCLE_VERTS * (float)(bx::pi * 2.0);
- m_circleVerts[ii * 2 + 0] = cosf(a);
- m_circleVerts[ii * 2 + 1] = sinf(a);
- }
-
- PosColorVertex::init();
- PosColorUvVertex::init();
- PosUvVertex::init();
- PosNormalVertex::init();
-
- u_imageLodEnabled = bgfx::createUniform("u_imageLodEnabled", bgfx::UniformType::Vec4);
- u_imageSwizzle = bgfx::createUniform("u_swizzle", bgfx::UniformType::Vec4);
- s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
-
- bgfx::ShaderHandle vsh;
- bgfx::ShaderHandle fsh;
-
- bgfx::RendererType::Enum type = bgfx::getRendererType();
- vsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_imgui_color");
- fsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_imgui_color");
- m_colorProgram = bgfx::createProgram(vsh, fsh);
- bgfx::destroyShader(vsh);
- bgfx::destroyShader(fsh);
-
- vsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_imgui_texture");
- fsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_imgui_texture");
- m_textureProgram = bgfx::createProgram(vsh, fsh);
- bgfx::destroyShader(vsh);
- bgfx::destroyShader(fsh);
-
- vsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_imgui_cubemap");
- fsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_imgui_cubemap");
- m_cubeMapProgram = bgfx::createProgram(vsh, fsh);
- bgfx::destroyShader(vsh);
- bgfx::destroyShader(fsh);
-
- vsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_imgui_latlong");
- fsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_imgui_latlong");
- m_latlongProgram = bgfx::createProgram(vsh, fsh);
- bgfx::destroyShader(vsh);
- bgfx::destroyShader(fsh);
-
- vsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_imgui_image");
- fsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_imgui_image");
- m_imageProgram = bgfx::createProgram(vsh, fsh);
- bgfx::destroyShader(fsh);
-
- // Notice: using the same vsh.
- fsh = bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_imgui_image_swizz");
- m_imageSwizzProgram = bgfx::createProgram(vsh, fsh);
- bgfx::destroyShader(fsh);
- bgfx::destroyShader(vsh);
-
- m_missingTexture = genMissingTexture(256, 256, 0.04f);
-
-#if !USE_NANOVG_FONT
- const ImguiFontHandle handle = createFont(s_robotoRegularTtf, _fontSize);
- m_currentFontIdx = handle.idx;
-#else
- const ImguiFontHandle handle = { bgfx::invalidHandle };
-#endif // !USE_NANOVG_FONT
- return handle;
- }
-
- void destroy()
- {
- bgfx::destroyUniform(u_imageLodEnabled);
- bgfx::destroyUniform(u_imageSwizzle);
- bgfx::destroyUniform(s_texColor);
-#if !USE_NANOVG_FONT
- for (uint16_t ii = 0, num = m_fontHandle.getNumHandles(); ii < num; ++ii)
- {
- uint16_t idx = m_fontHandle.getHandleAt(0);
- bgfx::destroyTexture(m_fonts[idx].m_texture);
- m_fontHandle.free(idx);
- }
-#endif // !USE_NANOVG_FONT
- bgfx::destroyTexture(m_missingTexture);
- bgfx::destroyProgram(m_colorProgram);
- bgfx::destroyProgram(m_textureProgram);
- bgfx::destroyProgram(m_cubeMapProgram);
- bgfx::destroyProgram(m_latlongProgram);
- bgfx::destroyProgram(m_imageProgram);
- bgfx::destroyProgram(m_imageSwizzProgram);
- nvgDelete(m_nvg);
-
- IMGUI_destroy();
- }
-
- bool anyActive() const
- {
- return m_active != 0;
- }
-
- inline void updatePresence(uint32_t _id)
- {
- if (m_checkActivePresence && m_active == _id)
- {
- m_isActivePresent = true;
- }
- }
-
- uint32_t getId()
- {
- const uint32_t id = (m_areaId << 16) | m_widgetId++;
- updatePresence(id);
- return id;
- }
-
- bool isActive(uint32_t _id) const
- {
- return m_active == _id;
- }
-
- bool isActiveInputField(uint32_t _id) const
- {
- return m_inputField == _id;
- }
-
- bool isHot(uint32_t _id) const
- {
- return m_hot == _id;
- }
-
- bool inRect(int32_t _x, int32_t _y, int32_t _width, int32_t _height, bool _checkScroll = true) const
- {
- return (!_checkScroll || m_areas[m_areaId].m_inside)
- && m_mx >= _x
- && m_mx <= _x + _width
- && m_my >= _y
- && m_my <= _y + _height;
- }
-
- bool isEnabled(uint16_t _areaId)
- {
- return (m_enabledAreaIds>>_areaId)&0x1;
- }
-
- void setEnabled(uint16_t _areaId)
- {
- m_enabledAreaIds |= (UINT64_C(1)<<_areaId);
- }
-
- void clearInput()
- {
- m_leftPressed = false;
- m_leftReleased = false;
- m_scroll = 0;
- }
-
- void clearActive()
- {
- m_active = 0;
- // mark all UI for this frame as processed
- clearInput();
- }
-
- void clearActiveInputField()
- {
- m_inputField = 0;
- }
-
- void setActive(uint32_t _id)
- {
- m_active = _id;
- m_wentActive = true;
- m_inputField = 0;
- }
-
- void setActiveInputField(uint32_t _id)
- {
- m_inputField = _id;
- }
-
- void setHot(uint32_t _id)
- {
- m_hotToBe = _id;
- }
-
- bool buttonLogic(uint32_t _id, bool _over)
- {
- bool res = false;
- // process down
- if (!anyActive() )
- {
- if (_over)
- {
- setHot(_id);
- }
-
- if (isHot(_id)
- && m_leftPressed)
- {
- setActive(_id);
- }
- }
-
- // if button is active, then react on left up
- if (isActive(_id) )
- {
- if (_over)
- {
- setHot(_id);
- }
-
- if (m_leftReleased)
- {
- if (isHot(_id) )
- {
- res = true;
- }
-
- clearActive();
- }
- }
-
- if (isHot(_id) )
- {
- m_isHot = true;
- }
-
- return res;
- }
-
- void inputLogic(uint32_t _id, bool _over)
- {
- if (!anyActive() )
- {
- if (_over)
- {
- setHot(_id);
- }
-
- if (isHot(_id)
- && m_leftPressed)
- {
- // Toggle active input.
- if (isActiveInputField(_id) )
- {
- clearActiveInputField();
- }
- else
- {
- setActiveInputField(_id);
- }
- }
- }
-
- if (isHot(_id) )
- {
- m_isHot = true;
- }
-
- if (m_leftPressed
- && !m_isHot
- && m_inputField != 0)
- {
- clearActiveInputField();
- }
- }
-
- void updateInput(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, char _inputChar)
- {
- bool left = (_button & IMGUI_MBUT_LEFT) != 0;
-
- m_mx = _mx;
- m_my = _my;
- m_leftPressed = !m_left && left;
- m_leftReleased = m_left && !left;
- m_left = left;
- m_scroll = _scroll;
-
- _inputChar = _inputChar & 0x7f; // ASCII or GTFO! :)
- m_lastChar = m_char;
- m_char = _inputChar;
- }
-
- void beginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, uint16_t _surfaceWidth, uint16_t _surfaceHeight, char _inputChar, uint8_t _view)
- {
- m_view = _view;
- m_viewWidth = _width;
- m_viewHeight = _height;
- m_surfaceWidth = _surfaceWidth;
- m_surfaceHeight = _surfaceHeight;
-
- const float xscale = float(m_surfaceWidth) /float(m_viewWidth);
- const float yscale = float(m_surfaceHeight)/float(m_viewHeight);
- const int32_t mx = int32_t(float(_mx)*xscale);
- const int32_t my = int32_t(float(_my)*yscale);
-
- IMGUI_beginFrame(mx, my, _button, _scroll, _width, _height, _inputChar, _view);
- nvgBeginFrame(m_nvg, m_viewWidth, m_viewHeight, 1.0f);
- nvgViewId(m_nvg, _view);
-
- bgfx::setViewName(_view, "IMGUI");
- bgfx::setViewSeq(_view, true);
-
- const bgfx::HMD* hmd = bgfx::getHMD();
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ const bgfx::Caps* caps = bgfx::getCaps();
if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
{
- m_viewWidth = _width / 2;
- m_surfaceWidth = _surfaceWidth / 2;
-
float proj[16];
bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f, bgfx::getCaps()->homogeneousDepth);
@@ -822,2727 +94,372 @@ struct Imgui
const float offset1 = -proj[8] + (hmd->eye[1].viewOffset[0] / dist * proj[0]);
float ortho[2][16];
- const float viewOffset = _surfaceWidth/4.0f;
- const float viewWidth = _surfaceWidth/2.0f;
- bx::mtxOrtho(ortho[0], viewOffset, viewOffset + viewWidth, (float)m_surfaceHeight, 0.0f, 0.0f, 1000.0f, offset0);
- bx::mtxOrtho(ortho[1], viewOffset, viewOffset + viewWidth, (float)m_surfaceHeight, 0.0f, 0.0f, 1000.0f, offset1);
- bgfx::setViewTransform(_view, NULL, ortho[0], BGFX_VIEW_STEREO, ortho[1]);
- bgfx::setViewRect(_view, 0, 0, hmd->width, hmd->height);
+ const float viewOffset = width/4.0f;
+ const float viewWidth = width/2.0f;
+ bx::mtxOrtho(ortho[0], viewOffset, viewOffset + viewWidth, height, 0.0f, 0.0f, 1000.0f, offset0, caps->homogeneousDepth);
+ bx::mtxOrtho(ortho[1], viewOffset, viewOffset + viewWidth, height, 0.0f, 0.0f, 1000.0f, offset1, caps->homogeneousDepth);
+ bgfx::setViewTransform(m_viewId, NULL, ortho[0], BGFX_VIEW_STEREO, ortho[1]);
+ bgfx::setViewRect(m_viewId, 0, 0, hmd->width, hmd->height);
}
else
{
float ortho[16];
- bx::mtxOrtho(ortho, 0.0f, (float)m_surfaceWidth, (float)m_surfaceHeight, 0.0f, 0.0f, 1000.0f);
- bgfx::setViewTransform(_view, NULL, ortho);
- bgfx::setViewRect(_view, 0, 0, _width, _height);
+ bx::mtxOrtho(ortho, 0.0f, width, height, 0.0f, 0.0f, 1000.0f, 0.0f, caps->homogeneousDepth);
+ bgfx::setViewTransform(m_viewId, NULL, ortho);
+ bgfx::setViewRect(m_viewId, 0, 0, uint16_t(width), uint16_t(height) );
}
- if (!ImGui::IsMouseHoveringAnyWindow() )
+ // Render command lists
+ for (int32_t ii = 0, num = _drawData->CmdListsCount; ii < num; ++ii)
{
- updateInput(mx, my, _button, _scroll, _inputChar);
- }
-
- m_hot = m_hotToBe;
- m_hotToBe = 0;
-
- m_wentActive = false;
- m_isHot = false;
-
- Area& area = getCurrentArea();
- area.m_widgetX = 0;
- area.m_widgetY = 0;
- area.m_widgetW = 0;
-
- m_areaId.reset();
- m_widgetId = 0;
- m_enabledAreaIds = 0;
- m_insideArea = false;
-
- m_isActivePresent = false;
- }
-
- void endFrame()
- {
- if (m_checkActivePresence && !m_isActivePresent)
- {
- // The ui element is not present any more, reset active field.
- m_active = 0;
- }
- m_checkActivePresence = (0 != m_active);
-
- clearInput();
-
- nvgEndFrame(m_nvg);
- IMGUI_endFrame();
- }
-
- bool beginScroll(int32_t _height, int32_t* _scroll, bool _enabled)
- {
- Area& parentArea = getCurrentArea();
-
- m_areaId.next();
- const uint32_t scrollId = getId();
-
- Area& area = getCurrentArea();
-
- const uint16_t parentBottom = parentArea.m_scissorY + parentArea.m_scissorHeight;
- const uint16_t childBottom = parentArea.m_widgetY + _height;
- const uint16_t bottom = IMGUI_MIN(childBottom, parentBottom);
-
- const uint16_t top = IMGUI_MAX(parentArea.m_widgetY, parentArea.m_scissorY);
-
- area.m_contentX = parentArea.m_contentX;
- area.m_contentY = parentArea.m_widgetY;
- area.m_contentWidth = parentArea.m_contentWidth - (SCROLL_AREA_PADDING*3);
- area.m_contentHeight = _height;
- area.m_widgetX = parentArea.m_widgetX;
- area.m_widgetY = parentArea.m_widgetY + (*_scroll);
- area.m_widgetW = parentArea.m_widgetW - (SCROLL_AREA_PADDING*3);
-
- area.m_scissorX = area.m_contentX;
- area.m_scissorWidth = area.m_contentWidth;
-
- area.m_scissorY = top - 1;
- area.m_scissorHeight = bottom - top;
- area.m_scissorEnabled = true;
-
- area.m_height = _height;
-
- area.m_scrollVal = _scroll;
- area.m_scrollId = scrollId;
-
- area.m_inside = inRect(parentArea.m_scissorX
- , area.m_scissorY
- , parentArea.m_scissorWidth
- , area.m_scissorHeight
- , false
- );
- area.m_didScroll = false;
-
- parentArea.m_widgetY += (_height + DEFAULT_SPACING);
-
- if (_enabled)
- {
- setEnabled(m_areaId);
- }
-
- nvgScissor(m_nvg, area);
-
- m_insideArea |= area.m_inside;
+ bgfx::TransientVertexBuffer tvb;
+ bgfx::TransientIndexBuffer tib;
- return area.m_inside;
- }
+ const ImDrawList* drawList = _drawData->CmdLists[ii];
+ uint32_t numVertices = (uint32_t)drawList->VtxBuffer.size();
+ uint32_t numIndices = (uint32_t)drawList->IdxBuffer.size();
- void endScroll(int32_t _r)
- {
- Area& area = getCurrentArea();
- area.m_scissorEnabled = false;
-
- const int32_t xx = area.m_contentX + area.m_contentWidth - 1;
- const int32_t yy = area.m_contentY;
- const int32_t width = SCROLL_AREA_PADDING * 2;
- const int32_t height = area.m_height;
-
- const int32_t aa = area.m_contentY+area.m_height;
- const int32_t bb = area.m_widgetY-DEFAULT_SPACING;
- const int32_t sbot = IMGUI_MAX(aa, bb);
- const int32_t stop = area.m_contentY + (*area.m_scrollVal);
- const int32_t sh = IMGUI_MAX(1, sbot - stop); // The scrollable area height.
-
- const uint32_t hid = area.m_scrollId;
- const float barHeight = (float)height / (float)sh;
- const bool hasScrollBar = (barHeight < 1.0f);
-
- // Handle mouse scrolling.
- if (area.m_inside && !area.m_didScroll && !anyActive() )
- {
- if (m_scroll)
+ if (!checkAvailTransientBuffers(numVertices, m_decl, numIndices) )
{
- const int32_t diff = height - sh;
-
- const int32_t val = *area.m_scrollVal + 20*m_scroll;
- const int32_t min = (diff < 0) ? diff : *area.m_scrollVal;
- const int32_t max = 0;
- const int32_t newVal = IMGUI_CLAMP(val, min, max);
- *area.m_scrollVal = newVal;
-
- if (hasScrollBar)
- {
- area.m_didScroll = true;
- }
+ // not enough space in transient buffer just quit drawing the rest...
+ break;
}
- }
-
- area.m_inside = false;
- int32_t* scroll = area.m_scrollVal;
+ bgfx::allocTransientVertexBuffer(&tvb, numVertices, m_decl);
+ bgfx::allocTransientIndexBuffer(&tib, numIndices);
- // This must be called here before drawing scroll bars
- // so that scissor of parrent area applies.
- m_areaId.pop();
+ ImDrawVert* verts = (ImDrawVert*)tvb.data;
+ bx::memCopy(verts, drawList->VtxBuffer.begin(), numVertices * sizeof(ImDrawVert) );
- // Propagate 'didScroll' to parrent area to avoid scrolling multiple areas at once.
- Area& parentArea = getCurrentArea();
- parentArea.m_didScroll = (parentArea.m_didScroll || area.m_didScroll);
+ ImDrawIdx* indices = (ImDrawIdx*)tib.data;
+ bx::memCopy(indices, drawList->IdxBuffer.begin(), numIndices * sizeof(ImDrawIdx) );
- // Draw and handle scroll click.
- if (hasScrollBar)
- {
- const float barY = bx::fsaturate( (float)(-(*scroll) ) / (float)sh);
-
- // Handle scroll bar logic.
- const int32_t hx = xx;
- const int32_t hy = yy + (int)(barY * height);
- const int32_t hw = width;
- const int32_t hh = (int)(barHeight * height);
-
- const int32_t range = height - (hh - 1);
- const bool over = inRect(hx, hy, hw, hh);
- buttonLogic(hid, over);
- if (isActive(hid) )
+ uint32_t offset = 0;
+ for (const ImDrawCmd* cmd = drawList->CmdBuffer.begin(), *cmdEnd = drawList->CmdBuffer.end(); cmd != cmdEnd; ++cmd)
{
- float uu = (float)(hy - yy) / (float)range;
- if (m_wentActive)
+ if (cmd->UserCallback)
{
- m_dragY = m_my;
- m_dragOrig = uu;
+ cmd->UserCallback(drawList, cmd);
}
-
- if (m_dragY != m_my)
+ else if (0 != cmd->ElemCount)
{
- const int32_t diff = height - sh;
+ uint64_t state = 0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_MSAA
+ ;
- const int32_t drag = m_my - m_dragY;
- const float dragFactor = float(sh)/float(height);
+ bgfx::TextureHandle th = m_texture;
+ bgfx::ProgramHandle program = m_program;
- const int32_t val = *scroll - int32_t(drag*dragFactor);
- const int32_t min = (diff < 0) ? diff : *scroll;
- const int32_t max = 0;
- *scroll = IMGUI_CLAMP(val, min, max);
+ if (NULL != cmd->TextureId)
+ {
+ union { ImTextureID ptr; struct { bgfx::TextureHandle handle; uint8_t flags; uint8_t mip; } s; } texture = { cmd->TextureId };
+ state |= 0 != (IMGUI_FLAGS_ALPHA_BLEND & texture.s.flags)
+ ? BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
+ : BGFX_STATE_NONE
+ ;
+ th = texture.s.handle;
+ if (0 != texture.s.mip)
+ {
+ const float lodEnabled[4] = { float(texture.s.mip), 1.0f, 0.0f, 0.0f };
+ bgfx::setUniform(u_imageLodEnabled, lodEnabled);
+ program = m_imageProgram;
+ }
+ }
+ else
+ {
+ state |= BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA);
+ }
- m_dragY = m_my;
+ const uint16_t xx = uint16_t(bx::fmax(cmd->ClipRect.x, 0.0f) );
+ const uint16_t yy = uint16_t(bx::fmax(cmd->ClipRect.y, 0.0f) );
+ bgfx::setScissor(xx, yy
+ , uint16_t(bx::fmin(cmd->ClipRect.z, 65535.0f)-xx)
+ , uint16_t(bx::fmin(cmd->ClipRect.w, 65535.0f)-yy)
+ );
+
+ bgfx::setState(state);
+ bgfx::setTexture(0, s_tex, th);
+ bgfx::setVertexBuffer(0, &tvb, 0, numVertices);
+ bgfx::setIndexBuffer(&tib, offset, cmd->ElemCount);
+ bgfx::submit(cmd->ViewId, program);
}
- }
-
- // BG
- drawRoundedRect( (float)xx
- , (float)yy
- , (float)width
- , (float)height
- , (float)_r
- , imguiRGBA(0, 0, 0, 196)
- );
-
- // Bar
- if (isActive(hid) )
- {
- drawRoundedRect( (float)hx
- , (float)hy
- , (float)hw
- , (float)hh
- , (float)_r
- , imguiRGBA(255, 196, 0, 196)
- );
- }
- else
- {
- drawRoundedRect( (float)hx
- , (float)hy
- , (float)hw
- , (float)hh
- , (float)_r
- , isHot(hid) ? imguiRGBA(255, 196, 0, 96) : imguiRGBA(255, 255, 255, 64)
- );
- }
- }
- else
- {
- // Clear active if scroll is selected but not visible any more.
- if (isActive(hid) )
- {
- clearActive();
- }
- }
-
- nvgScissor(m_nvg, parentArea);
- }
-
- bool beginArea(const char* _name, int32_t _x, int32_t _y, int32_t _width, int32_t _height, bool _enabled, int32_t _r)
- {
- m_areaId.next();
- const uint32_t scrollId = getId();
-
- const bool hasTitle = (NULL != _name && '\0' != _name[0]);
- const int32_t header = hasTitle ? AREA_HEADER : 0;
-
- Area& area = getCurrentArea();
- area.m_x = _x;
- area.m_y = _y;
- area.m_width = _width;
- area.m_height = _height;
-
- area.m_contentX = area.m_x + SCROLL_AREA_PADDING;
- area.m_contentY = area.m_y + SCROLL_AREA_PADDING + header;
- area.m_contentWidth = area.m_width - SCROLL_AREA_PADDING;
- area.m_contentHeight = area.m_height - SCROLL_AREA_PADDING*2 - header;
-
- area.m_scissorX = area.m_contentX;
- area.m_scissorY = area.m_y + SCROLL_AREA_PADDING + header;
- area.m_scissorHeight = area.m_height - SCROLL_AREA_PADDING*2 - header;
- area.m_scissorWidth = area.m_contentWidth;
- area.m_scissorEnabled = false;
-
- area.m_widgetX = area.m_contentX;
- area.m_widgetY = area.m_contentY;
- area.m_widgetW = area.m_width - SCROLL_AREA_PADDING*2;
-
- static int32_t s_zeroScroll = 0;
- area.m_scrollVal = &s_zeroScroll;
- area.m_scrollId = scrollId;
- area.m_inside = inRect(area.m_scissorX, area.m_scissorY, area.m_scissorWidth, area.m_scissorHeight, false);
- area.m_didScroll = false;
-
- if (_enabled)
- {
- setEnabled(m_areaId);
- }
-
- if (0 == _r)
- {
- drawRect( (float)_x
- , (float)_y
- , (float)_width + 0.3f /*border fix for seamlessly joining two scroll areas*/
- , (float)_height + 0.3f /*border fix for seamlessly joining two scroll areas*/
- , imguiRGBA(0, 0, 0, 192)
- );
- }
- else
- {
- drawRoundedRect( (float)_x
- , (float)_y
- , (float)_width
- , (float)_height
- , (float)_r
- , imguiRGBA(0, 0, 0, 192)
- );
- }
-
- if (hasTitle)
- {
- drawText(_x + 10
- , _y + 18
- , ImguiTextAlign::Left
- , _name
- , imguiRGBA(255, 255, 255, 128)
- );
- }
- area.m_scissorEnabled = true;
-
- nvgScissor(m_nvg, area);
-
- m_insideArea |= area.m_inside;
- return area.m_inside;
- }
-
- void endArea()
- {
- m_areaId.pop();
- nvgResetScissor(m_nvg);
- }
-
- bool button(const char* _text, bool _enabled, ImguiAlign::Enum _align, uint32_t _rgb0, int32_t _r)
- {
- const uint32_t id = getId();
-
- Area& area = getCurrentArea();
- const int32_t yy = area.m_widgetY;
- const int32_t height = BUTTON_HEIGHT;
- area.m_widgetY += BUTTON_HEIGHT + DEFAULT_SPACING;
-
- int32_t xx;
- int32_t width;
- if (ImguiAlign::Left == _align)
- {
- xx = area.m_contentX + SCROLL_AREA_PADDING;
- width = area.m_widgetW;
- }
- else if (ImguiAlign::LeftIndented == _align
- || ImguiAlign::Right == _align)
- {
- xx = area.m_widgetX;
- width = area.m_widgetW-1; //TODO: -1 !
- }
- else //if (ImguiAlign::Center == _align
- //|| ImguiAlign::CenterIndented == _align).
- {
- xx = area.m_widgetX;
- width = area.m_widgetW - (area.m_widgetX-area.m_contentX);
- }
-
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx, yy, width, height);
- const bool res = buttonLogic(id, over);
-
- const uint32_t rgb0 = _rgb0&0x00ffffff;
-
- if (!visible(yy, height, area.m_scissorY, area.m_scissorHeight))
- {
- return false;
- }
-
- drawRoundedRect( (float)xx
- , (float)yy
- , (float)width
- , (float)height
- , (float)_r
- , rgb0 | imguiRGBA(0, 0, 0, isActive(id) ? 196 : 96)
- );
-
- if (enabled)
- {
- drawText(xx + BUTTON_HEIGHT / 2
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _text
- , isHot(id) ? imguiRGBA(255, 196, 0, 255) : imguiRGBA(255, 255, 255, 200)
- );
- }
- else
- {
- drawText(xx + BUTTON_HEIGHT / 2
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _text
- , imguiRGBA(128, 128, 128, 200)
- );
- }
-
- return res;
- }
-
- bool item(const char* _text, bool _enabled)
- {
- const uint32_t id = getId();
-
- Area& area = getCurrentArea();
- const int32_t xx = area.m_widgetX;
- const int32_t yy = area.m_widgetY;
- const int32_t width = area.m_widgetW;
- const int32_t height = BUTTON_HEIGHT;
- area.m_widgetY += BUTTON_HEIGHT + DEFAULT_SPACING;
-
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx, yy, width, height);
- const bool res = buttonLogic(id, over);
-
- if (!visible(yy, height, area.m_scissorY, area.m_scissorHeight))
- {
- return false;
- }
-
- if (isHot(id) )
- {
- drawRoundedRect( (float)xx
- , (float)yy
- , (float)width
- , (float)height
- , 2.0f
- , imguiRGBA(255, 196, 0, isActive(id) ? 196 : 96)
- );
- }
-
- if (enabled)
- {
- drawText(xx + BUTTON_HEIGHT / 2
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _text
- , imguiRGBA(255, 255, 255, 200)
- );
- }
- else
- {
- drawText(xx + BUTTON_HEIGHT / 2
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _text
- , imguiRGBA(128, 128, 128, 200)
- );
- }
-
- return res;
- }
-
- bool check(const char* _text, bool _checked, bool _enabled)
- {
- const uint32_t id = getId();
-
- Area& area = getCurrentArea();
- const int32_t xx = area.m_widgetX;
- const int32_t yy = area.m_widgetY;
- const int32_t width = area.m_widgetW;
- const int32_t height = BUTTON_HEIGHT;
- area.m_widgetY += BUTTON_HEIGHT + DEFAULT_SPACING;
-
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx, yy, width, height);
- const bool res = buttonLogic(id, over);
-
- const int32_t cx = xx + BUTTON_HEIGHT / 2 - CHECK_SIZE / 2;
- const int32_t cy = yy + BUTTON_HEIGHT / 2 - CHECK_SIZE / 2;
-
- if (!visible(cy, CHECK_SIZE+6, area.m_scissorY, area.m_scissorHeight))
- {
- return false;
- }
-
- drawRoundedRect( (float)cx - 3
- , (float)cy - 3
- , (float)CHECK_SIZE + 6
- , (float)CHECK_SIZE + 6
- , 4
- , imguiRGBA(128, 128, 128, isActive(id) ? 196 : 96)
- );
-
- if (_checked)
- {
- if (enabled)
- {
- drawRoundedRect( (float)cx
- , (float)cy
- , (float)CHECK_SIZE
- , (float)CHECK_SIZE
- , (float)CHECK_SIZE / 2 - 1
- , imguiRGBA(255, 255, 255, isActive(id) ? 255 : 200)
- );
- }
- else
- {
- drawRoundedRect( (float)cx
- , (float)cy
- , (float)CHECK_SIZE
- , (float)CHECK_SIZE
- , (float)CHECK_SIZE / 2 - 1
- , imguiRGBA(128, 128, 128, 200)
- );
- }
- }
-
- if (enabled)
- {
- drawText(xx + BUTTON_HEIGHT
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _text
- , isHot(id) ? imguiRGBA(255, 196, 0, 255) : imguiRGBA(255, 255, 255, 200)
- );
- }
- else
- {
- drawText(xx + BUTTON_HEIGHT
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _text
- , imguiRGBA(128, 128, 128, 200)
- );
- }
-
- return res;
- }
-
- void input(const char* _label, char* _str, uint32_t _len, bool _enabled, ImguiAlign::Enum _align, int32_t _r)
- {
- const uint32_t id = getId();
-
- Area& area = getCurrentArea();
- const int32_t yy = area.m_widgetY;
- area.m_widgetY += BUTTON_HEIGHT + DEFAULT_SPACING;
-
- int32_t xx;
- int32_t width;
- if (ImguiAlign::Left == _align)
- {
- xx = area.m_contentX + SCROLL_AREA_PADDING;
- width = area.m_widgetW;
- }
- else if (ImguiAlign::LeftIndented == _align
- || ImguiAlign::Right == _align)
- {
- xx = area.m_widgetX;
- width = area.m_widgetW-1; //TODO: -1 !
- }
- else //if (ImguiAlign::Center == _align
- //|| ImguiAlign::CenterIndented == _align).
- {
- xx = area.m_widgetX;
- width = area.m_widgetW - (area.m_widgetX-area.m_contentX);
- }
-
- const bool drawLabel = (NULL != _label && _label[0] != '\0');
-
- if (drawLabel)
- {
- drawText(xx
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _label
- , imguiRGBA(255, 255, 255, 200)
- );
- }
-
- // Handle input.
- if (isActiveInputField(id) )
- {
- const size_t cursor = size_t(strlen(_str) );
- if (m_char == 0x08 || m_char == 0x7f) //backspace or delete
- {
- _str[cursor-1] = '\0';
- }
- else if (m_char == 0x0d || m_char == 0x1b) //enter or escape
- {
- clearActiveInputField();
- }
- else if (cursor < _len-1
- && 0 != m_char)
- {
- _str[cursor] = m_char;
- _str[cursor+1] = '\0';
+ offset += cmd->ElemCount;
}
}
-
- // Draw input area.
- const int32_t height = BUTTON_HEIGHT;
- if (drawLabel)
- {
- uint32_t numVertices = 0; //unused
- const int32_t labelWidth = int32_t(getTextLength(m_fonts[m_currentFontIdx].m_cdata, _label, numVertices) );
- xx += (labelWidth + 6);
- width -= (labelWidth + 6);
- }
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx, yy, width, height);
- inputLogic(id, over);
-
- drawRoundedRect( (float)xx
- , (float)yy
- , (float)width
- , (float)height
- , (float)_r
- , isActiveInputField(id)?imguiRGBA(255,196,0,255):imguiRGBA(128,128,128,96)
- );
-
- if (isActiveInputField(id) )
- {
- drawText(xx + 6
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _str
- , imguiRGBA(0, 0, 0, 255)
- );
- }
- else
- {
- drawText(xx + 6
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _str
- , isHot(id) ? imguiRGBA(255,196,0,255) : imguiRGBA(255,255,255,255)
- );
- }
}
- uint8_t tabs(uint8_t _selected, bool _enabled, ImguiAlign::Enum _align, int32_t _height, int32_t _r, uint32_t _nTabs, uint32_t _nEnabled, va_list _argList)
+ void create(float _fontSize, bx::AllocatorI* _allocator)
{
- const char* titles[16];
- bool tabEnabled[16];
- const uint8_t tabCount = IMGUI_MIN(_nTabs, 16);
- const uint8_t enabledCount = IMGUI_MIN(_nEnabled, 16);
-
- // Read titles.
- {
- uint8_t ii = 0;
- for (; ii < tabCount; ++ii)
- {
- const char* str = va_arg(_argList, const char*);
- titles[ii] = str;
- }
- for (; ii < _nTabs; ++ii)
- {
- const char* str = va_arg(_argList, const char*);
- BX_UNUSED(str);
- }
- }
-
- // Read enabled tabs.
- {
- uint8_t ii = 0;
- for (; ii < enabledCount; ++ii)
- {
- const bool enabled = (0 != va_arg(_argList, int) );
- tabEnabled[ii] = enabled;
- }
- for (; ii < _nEnabled; ++ii)
- {
- const int enabled = va_arg(_argList, int);
- BX_UNUSED(enabled);
- }
- for (; ii < _nTabs; ++ii)
- {
- tabEnabled[ii] = true;
- }
- }
-
- Area& area = getCurrentArea();
- const int32_t yy = area.m_widgetY;
- area.m_widgetY += _height + DEFAULT_SPACING;
-
- int32_t xx;
- int32_t width;
- if (ImguiAlign::Left == _align)
- {
- xx = area.m_contentX + SCROLL_AREA_PADDING;
- width = area.m_widgetW;
- }
- else if (ImguiAlign::LeftIndented == _align
- || ImguiAlign::Right == _align)
- {
- xx = area.m_widgetX;
- width = area.m_widgetW-1; //TODO: -1 !
- }
- else //if (ImguiAlign::Center == _align
- //|| ImguiAlign::CenterIndented == _align).
- {
- xx = area.m_widgetX;
- width = area.m_widgetW - (area.m_widgetX-area.m_contentX);
- }
-
- uint8_t selected = _selected;
- const int32_t tabWidth = width / tabCount;
- const int32_t tabWidthHalf = width / (tabCount*2);
- const int32_t textY = yy + _height/2 + int32_t(m_fonts[m_currentFontIdx].m_size)/2 - 2;
-
- drawRoundedRect( (float)xx
- , (float)yy
- , (float)width
- , (float)_height
- , (float)_r
- , _enabled?imguiRGBA(128,128,128,96):imguiRGBA(128,128,128,64)
- );
-
- for (uint8_t ii = 0; ii < tabCount; ++ii)
- {
- const uint32_t id = getId();
-
- int32_t buttonX = xx + ii*width/tabCount;
- int32_t textX = buttonX + tabWidthHalf;
-
- const bool enabled = _enabled && tabEnabled[ii] && isEnabled(m_areaId);
- const bool over = enabled && inRect(buttonX, yy, tabWidth, _height);
- const bool res = buttonLogic(id, over);
-
- const uint32_t textColor = (ii == selected)
- ? (enabled ? imguiRGBA(0,0,0,255) : imguiRGBA(255,255,255,100) )
- : (isHot(id) ? imguiRGBA(255,196,0,enabled?255:100) : imguiRGBA(255,255,255,enabled?200:100) )
- ;
-
- if (ii == selected)
- {
- drawRoundedRect( (float)buttonX
- , (float)yy
- , (float)tabWidth
- , (float)_height
- , (float)_r
- , enabled?imguiRGBA(255,196,0,200):imguiRGBA(128,128,128,32)
- );
- }
- else if (isActive(id) )
- {
- drawRoundedRect( (float)buttonX
- , (float)yy
- , (float)tabWidth
- , (float)_height
- , (float)_r
- , imguiRGBA(128,128,128,196)
- );
- }
-
- drawText(textX
- , textY
- , ImguiTextAlign::Center
- , titles[ii]
- , textColor
- );
-
- if (res)
- {
- selected = ii;
- }
- }
-
- return selected;
- }
-
- bool image(bgfx::TextureHandle _image, float _lod, int32_t _width, int32_t _height, ImguiAlign::Enum _align, bool _enabled, bool _originBottomLeft)
- {
- const uint32_t id = getId();
- Area& area = getCurrentArea();
-
- int32_t xx;
- if (ImguiAlign::Left == _align)
- {
- xx = area.m_contentX + SCROLL_AREA_PADDING;
- }
- else if (ImguiAlign::LeftIndented == _align)
- {
- xx = area.m_widgetX;
- }
- else if (ImguiAlign::Center == _align)
- {
- xx = area.m_contentX + (area.m_widgetW-_width)/2;
- }
- else if (ImguiAlign::CenterIndented == _align)
- {
- xx = (area.m_widgetX + area.m_widgetW + area.m_contentX - _width)/2;
- }
- else //if (ImguiAlign::Right == _align).
- {
- xx = area.m_contentX + area.m_widgetW - _width;
- }
-
- const int32_t yy = area.m_widgetY;
- area.m_widgetY += _height + DEFAULT_SPACING;
-
- if (screenQuad(xx, yy, _width, _height, _originBottomLeft) )
- {
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx, yy, _width, _height);
- const bool res = buttonLogic(id, over);
-
- const float lodEnabled[4] = { _lod, float(enabled), 0.0f, 0.0f };
- bgfx::setUniform(u_imageLodEnabled, lodEnabled);
- bgfx::setTexture(0, s_texColor, bgfx::isValid(_image) ? _image : m_missingTexture);
- bgfx::setState(BGFX_STATE_RGB_WRITE
- |BGFX_STATE_ALPHA_WRITE
- |BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
- );
- setCurrentScissor();
- bgfx::submit(m_view, m_imageProgram);
-
- return res;
- }
-
- return false;
- }
-
- bool image(bgfx::TextureHandle _image, float _lod, float _width, float _aspect, ImguiAlign::Enum _align, bool _enabled, bool _originBottomLeft)
- {
- const float width = _width*float(getCurrentArea().m_widgetW);
- const float height = width/_aspect;
-
- return image(_image, _lod, int32_t(width), int32_t(height), _align, _enabled, _originBottomLeft);
- }
-
- bool imageChannel(bgfx::TextureHandle _image, uint8_t _channel, float _lod, int32_t _width, int32_t _height, ImguiAlign::Enum _align, bool _enabled)
- {
- BX_CHECK(_channel < 4, "Channel param must be from 0 to 3!");
-
- const uint32_t id = getId();
- Area& area = getCurrentArea();
-
- int32_t xx;
- if (ImguiAlign::Left == _align)
- {
- xx = area.m_contentX + SCROLL_AREA_PADDING;
- }
- else if (ImguiAlign::LeftIndented == _align)
- {
- xx = area.m_widgetX;
- }
- else if (ImguiAlign::Center == _align)
- {
- xx = area.m_contentX + (area.m_widgetW-_width)/2;
- }
- else if (ImguiAlign::CenterIndented == _align)
- {
- xx = (area.m_widgetX + area.m_widgetW + area.m_contentX - _width)/2;
- }
- else //if (ImguiAlign::Right == _align).
- {
- xx = area.m_contentX + area.m_widgetW - _width;
- }
-
- const int32_t yy = area.m_widgetY;
- area.m_widgetY += _height + DEFAULT_SPACING;
-
- if (screenQuad(xx, yy, _width, _height) )
- {
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx, yy, _width, _height);
- const bool res = buttonLogic(id, over);
-
- const float lodEnabled[4] = { _lod, float(enabled), 0.0f, 0.0f };
- bgfx::setUniform(u_imageLodEnabled, lodEnabled);
-
- float swizz[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
- swizz[_channel] = 1.0f;
- bgfx::setUniform(u_imageSwizzle, swizz);
-
- bgfx::setTexture(0, s_texColor, bgfx::isValid(_image) ? _image : m_missingTexture);
- bgfx::setState(BGFX_STATE_RGB_WRITE
- |BGFX_STATE_ALPHA_WRITE
- |BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
- );
- setCurrentScissor();
- bgfx::submit(m_view, m_imageSwizzProgram);
-
- return res;
- }
-
- return false;
- }
-
- bool imageChannel(bgfx::TextureHandle _image, uint8_t _channel, float _lod, float _width, float _aspect, ImguiAlign::Enum _align, bool _enabled)
- {
- const float width = _width*float(getCurrentArea().m_widgetW);
- const float height = width/_aspect;
-
- return imageChannel(_image, _channel, _lod, int32_t(width), int32_t(height), _align, _enabled);
- }
-
- bool latlong(bgfx::TextureHandle _cubemap, float _lod, ImguiAlign::Enum _align, bool _enabled)
- {
- const uint32_t id = getId();
-
- Area& area = getCurrentArea();
- int32_t xx;
- int32_t width;
- if (ImguiAlign::Left == _align)
- {
- xx = area.m_contentX + SCROLL_AREA_PADDING;
- width = area.m_widgetW;
- }
- else if (ImguiAlign::LeftIndented == _align
- || ImguiAlign::Right == _align)
- {
- xx = area.m_widgetX;
- width = area.m_widgetW;
- }
- else //if (ImguiAlign::Center == _align
- //|| ImguiAlign::CenterIndented == _align).
- {
- xx = area.m_widgetX;
- width = area.m_widgetW - (area.m_widgetX-area.m_contentX);
- }
-
- const int32_t height = width/2;
- const int32_t yy = area.m_widgetY;
- area.m_widgetY += height + DEFAULT_SPACING;
-
- if (screenQuad(xx, yy, width, height, false) )
- {
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx, yy, width, height);
- const bool res = buttonLogic(id, over);
-
- const float lodEnabled[4] = { _lod, float(enabled), 0.0f, 0.0f };
- bgfx::setUniform(u_imageLodEnabled, lodEnabled);
-
- bgfx::setTexture(0, s_texColor, _cubemap);
- bgfx::setState(BGFX_STATE_RGB_WRITE
- |BGFX_STATE_ALPHA_WRITE
- |BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
- );
- setCurrentScissor();
- bgfx::submit(m_view, m_latlongProgram);
-
- return res;
- }
-
- return false;
- }
-
- bool cubeMap(bgfx::TextureHandle _cubemap, float _lod, bool _cross, bool _sameHeight, ImguiAlign::Enum _align, bool _enabled)
- {
- const uint32_t id = getId();
-
- Area& area = getCurrentArea();
- int32_t xx;
- int32_t width;
- if (ImguiAlign::Left == _align)
- {
- xx = area.m_contentX + SCROLL_AREA_PADDING;
- width = area.m_widgetW;
- }
- else if (ImguiAlign::LeftIndented == _align
- || ImguiAlign::Right == _align)
- {
- xx = area.m_widgetX;
- width = area.m_widgetW;
- }
- else //if (ImguiAlign::Center == _align
- //|| ImguiAlign::CenterIndented == _align).
- {
- xx = area.m_widgetX;
- width = area.m_widgetW - (area.m_widgetX-area.m_contentX);
- }
-
- const bool adjustHeight = (_cross && _sameHeight);
- const bool fullHeight = (_cross && !_sameHeight);
-
- if (adjustHeight)
- {
- xx += width/6;
- }
-
- const int32_t height = fullHeight ? (width*3)/4 : (width/2);
- const int32_t yy = area.m_widgetY;
- area.m_widgetY += height + DEFAULT_SPACING;
-
- const uint32_t numVertices = 14;
- const uint32_t numIndices = 36;
- if (checkAvailTransientBuffers(numVertices, PosNormalVertex::ms_decl, numIndices) )
- {
- bgfx::TransientVertexBuffer tvb;
- bgfx::allocTransientVertexBuffer(&tvb, numVertices, PosNormalVertex::ms_decl);
-
- bgfx::TransientIndexBuffer tib;
- bgfx::allocTransientIndexBuffer(&tib, numIndices);
-
- PosNormalVertex* vertex = (PosNormalVertex*)tvb.data;
- uint16_t* indices = (uint16_t*)tib.data;
-
- if (_cross)
- {
- vertex->set(0.0f, 0.5f, 0.0f, -1.0f, 1.0f, -1.0f); ++vertex;
- vertex->set(0.0f, 1.0f, 0.0f, -1.0f, -1.0f, -1.0f); ++vertex;
-
- vertex->set(0.5f, 0.0f, 0.0f, -1.0f, 1.0f, -1.0f); ++vertex;
- vertex->set(0.5f, 0.5f, 0.0f, -1.0f, 1.0f, 1.0f); ++vertex;
- vertex->set(0.5f, 1.0f, 0.0f, -1.0f, -1.0f, 1.0f); ++vertex;
- vertex->set(0.5f, 1.5f, 0.0f, -1.0f, -1.0f, -1.0f); ++vertex;
-
- vertex->set(1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f); ++vertex;
- vertex->set(1.0f, 0.5f, 0.0f, 1.0f, 1.0f, 1.0f); ++vertex;
- vertex->set(1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f); ++vertex;
- vertex->set(1.0f, 1.5f, 0.0f, 1.0f, -1.0f, -1.0f); ++vertex;
-
- vertex->set(1.5f, 0.5f, 0.0f, 1.0f, 1.0f, -1.0f); ++vertex;
- vertex->set(1.5f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f); ++vertex;
-
- vertex->set(2.0f, 0.5f, 0.0f, -1.0f, 1.0f, -1.0f); ++vertex;
- vertex->set(2.0f, 1.0f, 0.0f, -1.0f, -1.0f, -1.0f); ++vertex;
-
- indices += addQuad(indices, 0, 3, 4, 1);
- indices += addQuad(indices, 2, 6, 7, 3);
- indices += addQuad(indices, 3, 7, 8, 4);
- indices += addQuad(indices, 4, 8, 9, 5);
- indices += addQuad(indices, 7, 10, 11, 8);
- indices += addQuad(indices, 10, 12, 13, 11);
- }
- else
- {
- vertex->set(0.0f, 0.25f, 0.0f, -1.0f, 1.0f, -1.0f); ++vertex;
- vertex->set(0.0f, 0.75f, 0.0f, -1.0f, -1.0f, -1.0f); ++vertex;
-
- vertex->set(0.5f, 0.00f, 0.0f, -1.0f, 1.0f, 1.0f); ++vertex;
- vertex->set(0.5f, 0.50f, 0.0f, -1.0f, -1.0f, 1.0f); ++vertex;
- vertex->set(0.5f, 1.00f, 0.0f, 1.0f, -1.0f, -1.0f); ++vertex;
-
- vertex->set(1.0f, 0.25f, 0.0f, 1.0f, 1.0f, 1.0f); ++vertex;
- vertex->set(1.0f, 0.75f, 0.0f, 1.0f, -1.0f, 1.0f); ++vertex;
-
- vertex->set(1.0f, 0.25f, 0.0f, 1.0f, 1.0f, 1.0f); ++vertex;
- vertex->set(1.0f, 0.75f, 0.0f, 1.0f, -1.0f, 1.0f); ++vertex;
-
- vertex->set(1.5f, 0.00f, 0.0f, -1.0f, 1.0f, 1.0f); ++vertex;
- vertex->set(1.5f, 0.50f, 0.0f, 1.0f, 1.0f, -1.0f); ++vertex;
- vertex->set(1.5f, 1.00f, 0.0f, 1.0f, -1.0f, -1.0f); ++vertex;
-
- vertex->set(2.0f, 0.25f, 0.0f, -1.0f, 1.0f, -1.0f); ++vertex;
- vertex->set(2.0f, 0.75f, 0.0f, -1.0f, -1.0f, -1.0f); ++vertex;
-
- indices += addQuad(indices, 0, 2, 3, 1);
- indices += addQuad(indices, 1, 3, 6, 4);
- indices += addQuad(indices, 2, 5, 6, 3);
- indices += addQuad(indices, 7, 9, 12, 10);
- indices += addQuad(indices, 7, 10, 11, 8);
- indices += addQuad(indices, 10, 12, 13, 11);
- }
-
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx, yy, width, height);
- const bool res = buttonLogic(id, over);
-
- const float widthf = float(width);
- const float scale = adjustHeight ? (widthf+0.5f)/3.0f : (widthf*0.5f + 0.25f);
-
- float mtx[16];
- bx::mtxSRT(mtx, scale, scale, 1.0f, 0.0f, 0.0f, 0.0f, float(xx), float(yy), 0.0f);
-
- const float lodEnabled[4] = { _lod, float(enabled), 0.0f, 0.0f };
- bgfx::setUniform(u_imageLodEnabled, lodEnabled);
-
- bgfx::setTransform(mtx);
- bgfx::setTexture(0, s_texColor, _cubemap);
- bgfx::setVertexBuffer(&tvb);
- bgfx::setIndexBuffer(&tib);
- bgfx::setState(BGFX_STATE_RGB_WRITE
- |BGFX_STATE_ALPHA_WRITE
- |BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
- );
- setCurrentScissor();
- bgfx::submit(m_view, m_cubeMapProgram);
-
- return res;
- }
-
- return false;
- }
-
- bool cubeMap(bgfx::TextureHandle _cubemap, float _lod, ImguiCubemap::Enum _display, bool _sameHeight, ImguiAlign::Enum _align, bool _enabled)
- {
- if (ImguiCubemap::Cross == _display
- || ImguiCubemap::Hex == _display)
- {
- return cubeMap(_cubemap, _lod, (ImguiCubemap::Cross == _display), _sameHeight, _align, _enabled);
- }
- else //(ImguiCubemap::Latlong == _display).
- {
- return latlong(_cubemap, _lod, _align, _enabled);
- }
- }
-
- bool collapse(const char* _text, const char* _subtext, bool _checked, bool _enabled)
- {
- const uint32_t id = getId();
-
- Area& area = getCurrentArea();
- const int32_t xx = area.m_widgetX;
- const int32_t yy = area.m_widgetY;
- const int32_t width = area.m_widgetW;
- const int32_t height = BUTTON_HEIGHT;
- area.m_widgetY += BUTTON_HEIGHT + DEFAULT_SPACING;
-
- const int32_t cx = xx + BUTTON_HEIGHT/2 - CHECK_SIZE/2;
- const int32_t cy = yy + BUTTON_HEIGHT/2 - CHECK_SIZE/2 + DEFAULT_SPACING/2;
-
- const int32_t textY = yy + BUTTON_HEIGHT/2 + TEXT_HEIGHT/2 + DEFAULT_SPACING/2;
-
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx, yy, width, height);
- const bool res = buttonLogic(id, over);
-
- if (_checked)
- {
- drawTriangle(cx
- , cy
- , CHECK_SIZE
- , CHECK_SIZE
- , TriangleOrientation::Up
- , imguiRGBA(255, 255, 255, isActive(id) ? 255 : 200)
- );
- }
- else
- {
- drawTriangle(cx-1 // With -1 is more aesthetically pleasing.
- , cy
- , CHECK_SIZE
- , CHECK_SIZE
- , TriangleOrientation::Right
- , imguiRGBA(255, 255, 255, isActive(id) ? 255 : 200)
- );
- }
-
- if (enabled)
- {
- drawText(xx + BUTTON_HEIGHT
- , textY
- , ImguiTextAlign::Left
- , _text
- , isHot(id) ? imguiRGBA(255, 196, 0, 255) : imguiRGBA(255, 255, 255, 200)
- );
- }
- else
- {
- drawText(xx + BUTTON_HEIGHT
- , textY
- , ImguiTextAlign::Left
- , _text
- , imguiRGBA(128, 128, 128, 200)
- );
- }
-
- if (_subtext)
- {
- drawText(xx + width - BUTTON_HEIGHT / 2
- , textY
- , ImguiTextAlign::Right
- , _subtext
- , imguiRGBA(255, 255, 255, 128)
- );
- }
-
- return res;
- }
-
- bool borderButton(ImguiBorder::Enum _border, bool _checked, bool _enabled)
- {
- // Since border button isn't part of any area, just use this custom/unique areaId.
- const uint16_t areaId = UINT16_MAX-1;
- const uint32_t id = (areaId << 16) | m_widgetId++;
- updatePresence(id);
-
- const int32_t triSize = 12;
- const int32_t borderSize = 15;
-
- int32_t xx;
- int32_t yy;
- int32_t width;
- int32_t height;
- int32_t triX;
- int32_t triY;
- TriangleOrientation::Enum orientation;
+ m_allocator = _allocator;
- if (ImguiBorder::Left == _border)
- {
- xx = -borderSize;
- yy = -1;
- width = 2*borderSize+1;
- height = m_surfaceHeight+1;
- triX = 0;
- triY = (m_surfaceHeight-triSize)/2;
- orientation = _checked ? TriangleOrientation::Left : TriangleOrientation::Right;
- }
- else if (ImguiBorder::Right == _border)
- {
- xx = m_surfaceWidth - borderSize;
- yy = -1;
- width = 2*borderSize+1;
- height = m_surfaceHeight+1;
- triX = m_surfaceWidth - triSize - 2;
- triY = (m_surfaceHeight-width)/2;
- orientation = _checked ? TriangleOrientation::Right : TriangleOrientation::Left;
- }
- else if (ImguiBorder::Top == _border)
- {
- xx = 0;
- yy = -borderSize;
- width = m_surfaceWidth;
- height = 2*borderSize;
- triX = (m_surfaceWidth-triSize)/2;
- triY = 0;
- orientation = _checked ? TriangleOrientation::Up : TriangleOrientation::Down;
- }
- else //if (ImguiBorder::Bottom == _border).
+ if (NULL == _allocator)
{
- xx = 0;
- yy = m_surfaceHeight - borderSize;
- width = m_surfaceWidth;
- height = 2*borderSize;
- triX = (m_surfaceWidth-triSize)/2;
- triY = m_surfaceHeight-triSize;
- orientation = _checked ? TriangleOrientation::Down : TriangleOrientation::Up;
+ static bx::DefaultAllocator allocator;
+ m_allocator = &allocator;
}
- const bool over = _enabled && inRect(xx, yy, width, height, false);
- const bool res = buttonLogic(id, over);
-
- drawRect( (float)xx
- , (float)yy
- , (float)width
- , (float)height
- , isActive(id) ? imguiRGBA(23, 23, 23, 192) : imguiRGBA(0, 0, 0, 222)
- );
-
- drawTriangle( triX
- , triY
- , triSize
- , triSize
- , orientation
- , isHot(id) ? imguiRGBA(255, 196, 0, 222) : imguiRGBA(255, 255, 255, 192)
- );
-
- return res;
- }
+ m_viewId = 255;
+ m_lastScroll = 0;
+ m_last = bx::getHPCounter();
+
+ ImGuiIO& io = ImGui::GetIO();
+ io.RenderDrawListsFn = renderDrawLists;
+ io.MemAllocFn = memAlloc;
+ io.MemFreeFn = memFree;
+
+ io.DisplaySize = ImVec2(1280.0f, 720.0f);
+ io.DeltaTime = 1.0f / 60.0f;
+ io.IniFilename = NULL;
+
+ setupStyle(true);
+
+#if defined(SCI_NAMESPACE)
+ io.KeyMap[ImGuiKey_Tab] = (int)entry::Key::Tab;
+ io.KeyMap[ImGuiKey_LeftArrow] = (int)entry::Key::Left;
+ io.KeyMap[ImGuiKey_RightArrow] = (int)entry::Key::Right;
+ io.KeyMap[ImGuiKey_UpArrow] = (int)entry::Key::Up;
+ io.KeyMap[ImGuiKey_DownArrow] = (int)entry::Key::Down;
+ io.KeyMap[ImGuiKey_Home] = (int)entry::Key::Home;
+ io.KeyMap[ImGuiKey_End] = (int)entry::Key::End;
+ io.KeyMap[ImGuiKey_Delete] = (int)entry::Key::Delete;
+ io.KeyMap[ImGuiKey_Backspace] = (int)entry::Key::Backspace;
+ io.KeyMap[ImGuiKey_Enter] = (int)entry::Key::Return;
+ io.KeyMap[ImGuiKey_Escape] = (int)entry::Key::Esc;
+ io.KeyMap[ImGuiKey_A] = (int)entry::Key::KeyA;
+ io.KeyMap[ImGuiKey_C] = (int)entry::Key::KeyC;
+ io.KeyMap[ImGuiKey_V] = (int)entry::Key::KeyV;
+ io.KeyMap[ImGuiKey_X] = (int)entry::Key::KeyX;
+ io.KeyMap[ImGuiKey_Y] = (int)entry::Key::KeyY;
+ io.KeyMap[ImGuiKey_Z] = (int)entry::Key::KeyZ;
+#endif // defined(SCI_NAMESPACE)
- void labelVargs(const char* _format, va_list _argList, uint32_t _rgba)
- {
- char temp[8192];
- char* out = temp;
- int32_t len = bx::vsnprintf(out, sizeof(temp), _format, _argList);
- if ( (int32_t)sizeof(temp) < len)
- {
- out = (char*)alloca(len+1);
- len = bx::vsnprintf(out, len, _format, _argList);
- }
- out[len] = '\0';
-
- Area& area = getCurrentArea();
- const int32_t xx = area.m_widgetX;
- const int32_t yy = area.m_widgetY;
- area.m_widgetY += BUTTON_HEIGHT;
- drawText(xx
- , yy + BUTTON_HEIGHT/2 + TEXT_HEIGHT/2
- , ImguiTextAlign::Left
- , out
- , _rgba
+ bgfx::RendererType::Enum type = bgfx::getRendererType();
+ m_program = bgfx::createProgram(
+ bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_ocornut_imgui")
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_ocornut_imgui")
+ , true
);
- }
- void value(const char* _text)
- {
- Area& area = getCurrentArea();
- const int32_t xx = area.m_widgetX;
- const int32_t yy = area.m_widgetY;
- const int32_t ww = area.m_widgetW;
- area.m_widgetY += BUTTON_HEIGHT;
-
- drawText(xx + ww - BUTTON_HEIGHT / 2
- , yy + BUTTON_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Right
- , _text
- , imguiRGBA(255, 255, 255, 200)
+ u_imageLodEnabled = bgfx::createUniform("u_imageLodEnabled", bgfx::UniformType::Vec4);
+ m_imageProgram = bgfx::createProgram(
+ bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_imgui_image")
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_imgui_image")
+ , true
);
- }
-
- bool slider(const char* _text, float& _val, float _vmin, float _vmax, float _vinc, bool _enabled, ImguiAlign::Enum _align)
- {
- const uint32_t id = getId();
-
- Area& area = getCurrentArea();
- const int32_t yy = area.m_widgetY;
- const int32_t height = SLIDER_HEIGHT;
- area.m_widgetY += SLIDER_HEIGHT + DEFAULT_SPACING;
-
- int32_t xx;
- int32_t width;
- if (ImguiAlign::Left == _align)
- {
- xx = area.m_contentX + SCROLL_AREA_PADDING;
- width = area.m_widgetW;
- }
- else if (ImguiAlign::LeftIndented == _align
- || ImguiAlign::Right == _align)
- {
- xx = area.m_widgetX;
- width = area.m_widgetW;
- }
- else //if (ImguiAlign::Center == _align
- //|| ImguiAlign::CenterIndented == _align).
- {
- xx = area.m_widgetX;
- width = area.m_widgetW - (area.m_widgetX-area.m_contentX);
- }
-
- drawRoundedRect( (float)xx, (float)yy, (float)width, (float)height, 4.0f, imguiRGBA(0, 0, 0, 128) );
-
- const int32_t range = width - SLIDER_MARKER_WIDTH;
-
- float uu = bx::fsaturate( (_val - _vmin) / (_vmax - _vmin) );
- int32_t m = (int)(uu * range);
- bool valChanged = false;
-
- const bool enabled = _enabled && isEnabled(m_areaId);
- const bool over = enabled && inRect(xx + m, yy, SLIDER_MARKER_WIDTH, SLIDER_HEIGHT);
- const bool res = buttonLogic(id, over);
-
- if (isActive(id) )
- {
- if (m_wentActive)
- {
- m_dragX = m_mx;
- m_dragOrig = uu;
- }
-
- if (m_dragX != m_mx)
- {
- uu = bx::fsaturate(m_dragOrig + (float)(m_mx - m_dragX) / (float)range);
-
- _val = _vmin + uu * (_vmax - _vmin);
- _val = floorf(_val / _vinc + 0.5f) * _vinc; // Snap to vinc
- m = (int)(uu * range);
- valChanged = true;
- }
- }
-
- if (isActive(id) )
- {
- drawRoundedRect( (float)(xx + m)
- , (float)yy
- , (float)SLIDER_MARKER_WIDTH
- , (float)SLIDER_HEIGHT
- , 4.0f
- , imguiRGBA(255, 255, 255, 255)
- );
- }
- else
- {
- drawRoundedRect( (float)(xx + m)
- , (float)yy
- , (float)SLIDER_MARKER_WIDTH
- , (float)SLIDER_HEIGHT
- , 4.0f
- , isHot(id) ? imguiRGBA(255, 196, 0, 128) : imguiRGBA(255, 255, 255, 64)
- );
- }
-
- // TODO: fix this, take a look at 'nicenum'.
- int32_t digits = (int)(ceilf(log10f(_vinc) ) );
- char fmt[16];
- bx::snprintf(fmt, 16, "%%.%df", digits >= 0 ? 0 : -digits);
- char msg[128];
- bx::snprintf(msg, 128, fmt, _val);
-
- if (enabled)
- {
- drawText(xx + SLIDER_HEIGHT / 2
- , yy + SLIDER_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _text
- , isHot(id) ? imguiRGBA(255, 196, 0, 255) : imguiRGBA(255, 255, 255, 200)
- );
-
- drawText(xx + width - SLIDER_HEIGHT / 2
- , yy + SLIDER_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Right
- , msg
- , isHot(id) ? imguiRGBA(255, 196, 0, 255) : imguiRGBA(255, 255, 255, 200)
- );
- }
- else
- {
- drawText(xx + SLIDER_HEIGHT / 2
- , yy + SLIDER_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Left
- , _text
- , imguiRGBA(128, 128, 128, 200)
- );
-
- drawText(xx + width - SLIDER_HEIGHT / 2
- , yy + SLIDER_HEIGHT / 2 + TEXT_HEIGHT / 2
- , ImguiTextAlign::Right
- , msg
- , imguiRGBA(128, 128, 128, 200)
- );
- }
-
- return res || valChanged;
- }
-
- void indent(uint16_t _width)
- {
- Area& area = getCurrentArea();
- area.m_widgetX += _width;
- area.m_widgetW -= _width;
- }
-
- void unindent(uint16_t _width)
- {
- Area& area = getCurrentArea();
- area.m_widgetX -= _width;
- area.m_widgetW += _width;
- }
- void separator(uint16_t _height)
- {
- Area& area = getCurrentArea();
- area.m_widgetY += _height;
- }
+ m_decl
+ .begin()
+ .add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float)
+ .add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float)
+ .add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
+ .end();
- void separatorLine(uint16_t _height, ImguiAlign::Enum _align)
- {
- Area& area = getCurrentArea();
- //const int32_t width = area.m_widgetW;
- const int32_t height = 1;
- //const int32_t xx = area.m_widgetX;
- const int32_t yy = area.m_widgetY + _height/2 - height;
+ s_tex = bgfx::createUniform("s_tex", bgfx::UniformType::Int1);
- int32_t xx;
+ uint8_t* data;
int32_t width;
- if (ImguiAlign::Left == _align)
- {
- xx = area.m_contentX + SCROLL_AREA_PADDING;
- width = area.m_widgetW;
- }
- else if (ImguiAlign::LeftIndented == _align
- || ImguiAlign::Right == _align)
- {
- xx = area.m_widgetX;
- width = area.m_widgetW;
- }
- else //if (ImguiAlign::Center == _align
- //|| ImguiAlign::CenterIndented == _align).
- {
- xx = area.m_widgetX;
- width = area.m_widgetW - (area.m_widgetX-area.m_contentX) + 1;
- }
-
- area.m_widgetY += _height;
-
- drawRect( (float)xx
- , (float)yy
- , (float)width
- , (float)height
- , imguiRGBA(255, 255, 255, 32)
- );
- }
-
- void drawPolygon(const float* _coords, uint32_t _numCoords, float _r, uint32_t _abgr)
- {
- _numCoords = bx::uint32_min(_numCoords, MAX_TEMP_COORDS);
-
- for (uint32_t ii = 0, jj = _numCoords - 1; ii < _numCoords; jj = ii++)
- {
- const float* v0 = &_coords[jj * 2];
- const float* v1 = &_coords[ii * 2];
- float dx = v1[0] - v0[0];
- float dy = v1[1] - v0[1];
- float d = sqrtf(dx * dx + dy * dy);
- if (d > 0)
- {
- d = 1.0f / d;
- dx *= d;
- dy *= d;
- }
-
- m_tempNormals[jj * 2 + 0] = dy;
- m_tempNormals[jj * 2 + 1] = -dx;
- }
-
- for (uint32_t ii = 0, jj = _numCoords - 1; ii < _numCoords; jj = ii++)
+ int32_t height;
{
- float dlx0 = m_tempNormals[jj * 2 + 0];
- float dly0 = m_tempNormals[jj * 2 + 1];
- float dlx1 = m_tempNormals[ii * 2 + 0];
- float dly1 = m_tempNormals[ii * 2 + 1];
- float dmx = (dlx0 + dlx1) * 0.5f;
- float dmy = (dly0 + dly1) * 0.5f;
- float dmr2 = dmx * dmx + dmy * dmy;
- if (dmr2 > 0.000001f)
- {
- float scale = 1.0f / dmr2;
- if (scale > 10.0f)
- {
- scale = 10.0f;
- }
+ ImFontConfig config;
+ config.FontDataOwnedByAtlas = false;
+ config.MergeMode = false;
+// config.MergeGlyphCenterV = true;
- dmx *= scale;
- dmy *= scale;
- }
+ const ImWchar* ranges = io.Fonts->GetGlyphRangesCyrillic();
+ m_font[ImGui::Font::Regular] = io.Fonts->AddFontFromMemoryTTF( (void*)s_robotoRegularTtf, sizeof(s_robotoRegularTtf), _fontSize, &config, ranges);
+ m_font[ImGui::Font::Mono ] = io.Fonts->AddFontFromMemoryTTF( (void*)s_robotoMonoRegularTtf, sizeof(s_robotoMonoRegularTtf), _fontSize-3.0f, &config, ranges);
- m_tempCoords[ii * 2 + 0] = _coords[ii * 2 + 0] + dmx * _r;
- m_tempCoords[ii * 2 + 1] = _coords[ii * 2 + 1] + dmy * _r;
- }
-
- uint32_t numVertices = _numCoords*6 + (_numCoords-2)*3;
- if (numVertices == bgfx::getAvailTransientVertexBuffer(numVertices, PosColorVertex::ms_decl) )
- {
- bgfx::TransientVertexBuffer tvb;
- bgfx::allocTransientVertexBuffer(&tvb, numVertices, PosColorVertex::ms_decl);
- uint32_t trans = _abgr&0xffffff;
+ config.MergeMode = true;
+ config.DstFont = m_font[ImGui::Font::Regular];
- PosColorVertex* vertex = (PosColorVertex*)tvb.data;
- for (uint32_t ii = 0, jj = _numCoords-1; ii < _numCoords; jj = ii++)
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_fontRangeMerge); ++ii)
{
- vertex->m_x = _coords[ii*2+0];
- vertex->m_y = _coords[ii*2+1];
- vertex->m_abgr = _abgr;
- ++vertex;
-
- vertex->m_x = _coords[jj*2+0];
- vertex->m_y = _coords[jj*2+1];
- vertex->m_abgr = _abgr;
- ++vertex;
-
- vertex->m_x = m_tempCoords[jj*2+0];
- vertex->m_y = m_tempCoords[jj*2+1];
- vertex->m_abgr = trans;
- ++vertex;
-
- vertex->m_x = m_tempCoords[jj*2+0];
- vertex->m_y = m_tempCoords[jj*2+1];
- vertex->m_abgr = trans;
- ++vertex;
-
- vertex->m_x = m_tempCoords[ii*2+0];
- vertex->m_y = m_tempCoords[ii*2+1];
- vertex->m_abgr = trans;
- ++vertex;
-
- vertex->m_x = _coords[ii*2+0];
- vertex->m_y = _coords[ii*2+1];
- vertex->m_abgr = _abgr;
- ++vertex;
- }
+ const FontRangeMerge& frm = s_fontRangeMerge[ii];
- for (uint32_t ii = 2; ii < _numCoords; ++ii)
- {
- vertex->m_x = _coords[0];
- vertex->m_y = _coords[1];
- vertex->m_abgr = _abgr;
- ++vertex;
-
- vertex->m_x = _coords[(ii-1)*2+0];
- vertex->m_y = _coords[(ii-1)*2+1];
- vertex->m_abgr = _abgr;
- ++vertex;
-
- vertex->m_x = _coords[ii*2+0];
- vertex->m_y = _coords[ii*2+1];
- vertex->m_abgr = _abgr;
- ++vertex;
+ io.Fonts->AddFontFromMemoryTTF( (void*)frm.data
+ , (int)frm.size
+ , _fontSize-3.0f
+ , &config
+ , frm.ranges
+ );
}
-
- bgfx::setVertexBuffer(&tvb);
- bgfx::setState(0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
- );
- setCurrentScissor();
- bgfx::submit(m_view, m_colorProgram);
}
- }
- void drawRect(float _x, float _y, float _w, float _h, uint32_t _argb, float _fth = 1.0f)
- {
- float verts[4 * 2] =
- {
- _x + 0.5f, _y + 0.5f,
- _x + _w - 0.5f, _y + 0.5f,
- _x + _w - 0.5f, _y + _h - 0.5f,
- _x + 0.5f, _y + _h - 0.5f,
- };
-
- drawPolygon(verts, 4, _fth, _argb);
- }
-
- void drawRoundedRect(float _x, float _y, float _w, float _h, float _r, uint32_t _argb, float _fth = 1.0f)
- {
- if (0.0f == _r)
- {
- return drawRect(_x, _y, _w, _h, _argb, _fth);
- }
+ io.Fonts->GetTexDataAsRGBA32(&data, &width, &height);
- const uint32_t num = NUM_CIRCLE_VERTS / 4;
- const float* cverts = m_circleVerts;
- float verts[(num + 1) * 4 * 2];
- float* vv = verts;
-
- for (uint32_t ii = 0; ii <= num; ++ii)
- {
- *vv++ = _x + _w - _r + cverts[ii * 2] * _r;
- *vv++ = _y + _h - _r + cverts[ii * 2 + 1] * _r;
- }
-
- for (uint32_t ii = num; ii <= num * 2; ++ii)
- {
- *vv++ = _x + _r + cverts[ii * 2] * _r;
- *vv++ = _y + _h - _r + cverts[ii * 2 + 1] * _r;
- }
-
- for (uint32_t ii = num * 2; ii <= num * 3; ++ii)
- {
- *vv++ = _x + _r + cverts[ii * 2] * _r;
- *vv++ = _y + _r + cverts[ii * 2 + 1] * _r;
- }
-
- for (uint32_t ii = num * 3; ii < num * 4; ++ii)
- {
- *vv++ = _x + _w - _r + cverts[ii * 2] * _r;
- *vv++ = _y + _r + cverts[ii * 2 + 1] * _r;
- }
-
- *vv++ = _x + _w - _r + cverts[0] * _r;
- *vv++ = _y + _r + cverts[1] * _r;
-
- drawPolygon(verts, (num + 1) * 4, _fth, _argb);
- }
-
- void drawLine(float _x0, float _y0, float _x1, float _y1, float _r, uint32_t _abgr, float _fth = 1.0f)
- {
- float dx = _x1 - _x0;
- float dy = _y1 - _y0;
- float d = sqrtf(dx * dx + dy * dy);
- if (d > 0.0001f)
- {
- d = 1.0f / d;
- dx *= d;
- dy *= d;
- }
-
- float nx = dy;
- float ny = -dx;
- float verts[4 * 2];
- _r -= _fth;
- _r *= 0.5f;
- if (_r < 0.01f)
- {
- _r = 0.01f;
- }
-
- dx *= _r;
- dy *= _r;
- nx *= _r;
- ny *= _r;
-
- verts[0] = _x0 - dx - nx;
- verts[1] = _y0 - dy - ny;
-
- verts[2] = _x0 - dx + nx;
- verts[3] = _y0 - dy + ny;
-
- verts[4] = _x1 + dx + nx;
- verts[5] = _y1 + dy + ny;
-
- verts[6] = _x1 + dx - nx;
- verts[7] = _y1 + dy - ny;
-
- drawPolygon(verts, 4, _fth, _abgr);
- }
-
- struct TriangleOrientation
- {
- enum Enum
- {
- Left,
- Right,
- Up,
- Down,
- };
- };
-
- void drawTriangle(int32_t _x, int32_t _y, int32_t _width, int32_t _height, TriangleOrientation::Enum _orientation, uint32_t _abgr)
- {
- if (TriangleOrientation::Left == _orientation)
- {
- const float verts[3 * 2] =
- {
- (float)_x + 0.5f + (float)_width * 1.0f, (float)_y + 0.5f,
- (float)_x + 0.5f, (float)_y + 0.5f + (float)_height / 2.0f - 0.5f,
- (float)_x + 0.5f + (float)_width * 1.0f, (float)_y + 0.5f + (float)_height - 1.0f,
- };
-
- drawPolygon(verts, 3, 1.0f, _abgr);
- }
- else if (TriangleOrientation::Right == _orientation)
- {
- const float verts[3 * 2] =
- {
- (float)_x + 0.5f, (float)_y + 0.5f,
- (float)_x + 0.5f + (float)_width * 1.0f, (float)_y + 0.5f + (float)_height / 2.0f - 0.5f,
- (float)_x + 0.5f, (float)_y + 0.5f + (float)_height - 1.0f,
- };
-
- drawPolygon(verts, 3, 1.0f, _abgr);
- }
- else if (TriangleOrientation::Up == _orientation)
- {
- const float verts[3 * 2] =
- {
- (float)_x + 0.5f, (float)_y + 0.5f + (float)_height - 1.0f,
- (float)_x + 0.5f + (float)_width / 2.0f - 0.5f, (float)_y + 0.5f,
- (float)_x + 0.5f + (float)_width - 1.0f, (float)_y + 0.5f + (float)_height - 1.0f,
- };
-
- drawPolygon(verts, 3, 1.0f, _abgr);
- }
- else //if (TriangleOrientation::Down == _orientation).
- {
- const float verts[3 * 2] =
- {
- (float)_x + 0.5f, (float)_y + 0.5f,
- (float)_x + 0.5f + (float)_width / 2.0f - 0.5f, (float)_y + 0.5f + (float)_height - 1.0f,
- (float)_x + 0.5f + (float)_width - 1.0f, (float)_y + 0.5f,
- };
+ m_texture = bgfx::createTexture2D(
+ (uint16_t)width
+ , (uint16_t)height
+ , false
+ , 1
+ , bgfx::TextureFormat::BGRA8
+ , 0
+ , bgfx::copy(data, width*height*4)
+ );
- drawPolygon(verts, 3, 1.0f, _abgr);
- }
+ ImGui::InitDockContext();
}
-#if !USE_NANOVG_FONT
- void getBakedQuad(stbtt_bakedchar* _chardata, int32_t char_index, float* _xpos, float* _ypos, stbtt_aligned_quad* _quad)
+ void destroy()
{
- stbtt_bakedchar* b = _chardata + char_index;
- int32_t round_x = STBTT_ifloor(*_xpos + b->xoff);
- int32_t round_y = STBTT_ifloor(*_ypos + b->yoff);
-
- _quad->x0 = (float)round_x;
- _quad->y0 = (float)round_y;
- _quad->x1 = (float)round_x + b->x1 - b->x0;
- _quad->y1 = (float)round_y + b->y1 - b->y0;
+ ImGui::ShutdownDockContext();
+ ImGui::Shutdown();
- _quad->s0 = (b->x0 + m_halfTexel) * m_invTextureWidth;
- _quad->t0 = (b->y0 + m_halfTexel) * m_invTextureWidth;
- _quad->s1 = (b->x1 + m_halfTexel) * m_invTextureHeight;
- _quad->t1 = (b->y1 + m_halfTexel) * m_invTextureHeight;
+ bgfx::destroy(s_tex);
+ bgfx::destroy(m_texture);
- *_xpos += b->xadvance;
- }
-#endif // !USE_NANOVG_FONT
+ bgfx::destroy(u_imageLodEnabled);
+ bgfx::destroy(m_imageProgram);
+ bgfx::destroy(m_program);
- void drawText(int32_t _x, int32_t _y, ImguiTextAlign::Enum _align, const char* _text, uint32_t _abgr)
- {
- drawText( (float)_x, (float)_y, _text, _align, _abgr);
+ m_allocator = NULL;
}
- void drawText(float _x, float _y, const char* _text, ImguiTextAlign::Enum _align, uint32_t _abgr)
+ void setupStyle(bool _dark)
{
- if (NULL == _text
- || '\0' == _text[0])
- {
- return;
- }
-
-#if USE_NANOVG_FONT
- static uint32_t textAlign[ImguiTextAlign::Count] =
- {
- NVG_ALIGN_LEFT,
- NVG_ALIGN_CENTER,
- NVG_ALIGN_RIGHT,
- };
-
- nvgTextAlign(m_nvg, textAlign[_align]);
-
- nvgFontBlur(m_nvg, 0.0f);
- nvgFillColor(m_nvg, nvgRGBAu(_abgr) );
- nvgText(m_nvg, _x, _y, _text, NULL);
-#else
- uint32_t numVertices = 0;
- if (_align == ImguiTextAlign::Center)
+ // Doug Binks' darl color scheme
+ // https://gist.github.com/dougbinks/8089b4bbaccaaf6fa204236978d165a9
+ ImGuiStyle& style = ImGui::GetStyle();
+ if (_dark)
{
- _x -= getTextLength(m_fonts[m_currentFontIdx].m_cdata, _text, numVertices) / 2;
- }
- else if (_align == ImguiTextAlign::Right)
- {
- _x -= getTextLength(m_fonts[m_currentFontIdx].m_cdata, _text, numVertices);
- }
- else // just count vertices
- {
- getTextLength(m_fonts[m_currentFontIdx].m_cdata, _text, numVertices);
- }
-
- if (numVertices == bgfx::getAvailTransientVertexBuffer(numVertices, PosColorUvVertex::ms_decl) )
- {
- bgfx::TransientVertexBuffer tvb;
- bgfx::allocTransientVertexBuffer(&tvb, numVertices, PosColorUvVertex::ms_decl);
-
- PosColorUvVertex* vertex = (PosColorUvVertex*)tvb.data;
-
- const float ox = _x;
-
- while (*_text)
- {
- int32_t ch = (uint8_t)*_text;
- if (ch == '\t')
- {
- for (int32_t i = 0; i < 4; ++i)
- {
- if (_x < s_tabStops[i] + ox)
- {
- _x = s_tabStops[i] + ox;
- break;
- }
- }
- }
- else if (ch >= ' '
- && ch < 128)
- {
- stbtt_aligned_quad quad;
- getBakedQuad(m_fonts[m_currentFontIdx].m_cdata, ch - 32, &_x, &_y, &quad);
-
- vertex->m_x = quad.x0;
- vertex->m_y = quad.y0;
- vertex->m_u = quad.s0;
- vertex->m_v = quad.t0;
- vertex->m_abgr = _abgr;
- ++vertex;
-
- vertex->m_x = quad.x1;
- vertex->m_y = quad.y1;
- vertex->m_u = quad.s1;
- vertex->m_v = quad.t1;
- vertex->m_abgr = _abgr;
- ++vertex;
-
- vertex->m_x = quad.x1;
- vertex->m_y = quad.y0;
- vertex->m_u = quad.s1;
- vertex->m_v = quad.t0;
- vertex->m_abgr = _abgr;
- ++vertex;
-
- vertex->m_x = quad.x0;
- vertex->m_y = quad.y0;
- vertex->m_u = quad.s0;
- vertex->m_v = quad.t0;
- vertex->m_abgr = _abgr;
- ++vertex;
-
- vertex->m_x = quad.x0;
- vertex->m_y = quad.y1;
- vertex->m_u = quad.s0;
- vertex->m_v = quad.t1;
- vertex->m_abgr = _abgr;
- ++vertex;
-
- vertex->m_x = quad.x1;
- vertex->m_y = quad.y1;
- vertex->m_u = quad.s1;
- vertex->m_v = quad.t1;
- vertex->m_abgr = _abgr;
- ++vertex;
- }
-
- ++_text;
- }
-
- bgfx::setTexture(0, s_texColor, m_fonts[m_currentFontIdx].m_texture);
- bgfx::setVertexBuffer(&tvb);
- bgfx::setState(0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
- );
- setCurrentScissor();
- bgfx::submit(m_view, m_textureProgram);
+ ImGui::StyleColorsDark(&style);
}
-#endif // USE_NANOVG_FONT
- }
-
- bool screenQuad(int32_t _x, int32_t _y, int32_t _width, uint32_t _height, bool _originBottomLeft = false)
- {
- if (6 == bgfx::getAvailTransientVertexBuffer(6, PosUvVertex::ms_decl) )
+ else
{
- bgfx::TransientVertexBuffer vb;
- bgfx::allocTransientVertexBuffer(&vb, 6, PosUvVertex::ms_decl);
- PosUvVertex* vertex = (PosUvVertex*)vb.data;
-
- const float widthf = float(_width);
- const float heightf = float(_height);
-
- const float minx = float(_x);
- const float miny = float(_y);
- const float maxx = minx+widthf;
- const float maxy = miny+heightf;
-
- const float texelHalfW = m_halfTexel/widthf;
- const float texelHalfH = m_halfTexel/heightf;
- const float minu = texelHalfW;
- const float maxu = 1.0f - texelHalfW;
- const float minv = _originBottomLeft ? texelHalfH+1.0f : texelHalfH ;
- const float maxv = _originBottomLeft ? texelHalfH : texelHalfH+1.0f;
-
- vertex[0].m_x = minx;
- vertex[0].m_y = miny;
- vertex[0].m_u = minu;
- vertex[0].m_v = minv;
-
- vertex[1].m_x = maxx;
- vertex[1].m_y = miny;
- vertex[1].m_u = maxu;
- vertex[1].m_v = minv;
-
- vertex[2].m_x = maxx;
- vertex[2].m_y = maxy;
- vertex[2].m_u = maxu;
- vertex[2].m_v = maxv;
-
- vertex[3].m_x = maxx;
- vertex[3].m_y = maxy;
- vertex[3].m_u = maxu;
- vertex[3].m_v = maxv;
-
- vertex[4].m_x = minx;
- vertex[4].m_y = maxy;
- vertex[4].m_u = minu;
- vertex[4].m_v = maxv;
-
- vertex[5].m_x = minx;
- vertex[5].m_y = miny;
- vertex[5].m_u = minu;
- vertex[5].m_v = minv;
-
- bgfx::setVertexBuffer(&vb);
-
- return true;
+ ImGui::StyleColorsLight(&style);
}
- return false;
+ style.FrameRounding = 4.0f;
}
- void colorWheelWidget(float _rgb[3], bool _respectIndentation, float _size, bool _enabled)
+ void beginFrame(
+ int32_t _mx
+ , int32_t _my
+ , uint8_t _button
+ , int32_t _scroll
+ , int _width
+ , int _height
+ , char _inputChar
+ , bgfx::ViewId _viewId
+ )
{
- const uint32_t wheelId = getId();
- const uint32_t triangleId = getId();
-
- Area& area = getCurrentArea();
-
- const float areaX = float(_respectIndentation ? area.m_widgetX : area.m_contentX);
- const float areaW = float(_respectIndentation ? area.m_widgetW : area.m_contentWidth);
-
- const float width = areaW*_size;
- const float xx = areaX + areaW*0.5f;
- const float yy = float(area.m_widgetY) + width*0.5f;
- const float center[2] = { xx, yy };
-
- area.m_widgetY += int32_t(width) + DEFAULT_SPACING;
-
- const float ro = width*0.5f - 5.0f; // radiusOuter.
- const float rd = _size*25.0f; // radiusDelta.
- const float ri = ro - rd; // radiusInner.
- const float aeps = 0.5f / ro; // Half a pixel arc length in radians (2pi cancels out).
- const float cmx = float(m_mx) - center[0];
- const float cmy = float(m_my) - center[1];
-
- const float aa[2] = { ri - 6.0f, 0.0f }; // Hue point.
- const float bb[2] = { cosf(-120.0f/180.0f*NVG_PI) * aa[0], sinf(-120.0f/180.0f*NVG_PI) * aa[0] }; // Black point.
- const float cc[2] = { cosf( 120.0f/180.0f*NVG_PI) * aa[0], sinf( 120.0f/180.0f*NVG_PI) * aa[0] }; // White point.
-
- const float ca[2] = { aa[0] - cc[0], aa[1] - cc[1] };
- const float lenCa = sqrtf(ca[0]*ca[0]+ca[1]*ca[1]);
- const float invLenCa = 1.0f/lenCa;
- const float dirCa[2] = { ca[0]*invLenCa, ca[1]*invLenCa };
-
- float sel[2];
-
- float hsv[3];
- bx::rgbToHsv(hsv, _rgb);
-
- const bool enabled = _enabled && isEnabled(m_areaId);
- if (enabled)
- {
- if (m_leftPressed)
- {
- const float len = sqrtf(cmx*cmx + cmy*cmy);
- if (len > ri)
- {
- if (len < ro)
- {
- setActive(wheelId);
- }
- }
- else
- {
- setActive(triangleId);
- }
- }
-
- if (m_leftReleased
- && (isActive(wheelId) || isActive(triangleId) ) )
- {
- clearActive();
- }
+ m_viewId = _viewId;
- // Set hue.
- if (m_left
- && isActive(wheelId) )
- {
- hsv[0] = atan2f(cmy, cmx)/NVG_PI*0.5f;
- if (hsv[0] < 0.0f)
- {
- hsv[0]+=1.0f;
- }
- }
-
- }
-
- if (enabled
- && m_left
- && isActive(triangleId) )
+ ImGuiIO& io = ImGui::GetIO();
+ if (_inputChar < 0x7f)
{
- float an = -hsv[0]*NVG_PI*2.0f;
- float tmx = (cmx*cosf(an)-cmy*sinf(an) );
- float tmy = (cmx*sinf(an)+cmy*cosf(an) );
-
- if (pointInTriangle(tmx, tmy, aa[0], aa[1], bb[0], bb[1], cc[0], cc[1]) )
- {
- sel[0] = tmx;
- sel[1] = tmy;
- }
- else
- {
- closestPointOnTriangle(sel[0], sel[1], tmx, tmy, aa[0], aa[1], bb[0], bb[1], cc[0], cc[1]);
- }
- }
- else
- {
- /*
- * bb (black)
- * /\
- * / \
- * / \
- * / \
- * / \
- * / .sel \
- * / \
- * cc(white)/____.ss_______\aa (hue)
- */
- const float ss[2] =
- {
- cc[0] + dirCa[0]*lenCa*hsv[1],
- cc[1] + dirCa[1]*lenCa*hsv[1],
- };
-
- const float sb[2] = { bb[0]-ss[0], bb[1]-ss[1] };
- const float lenSb = sqrtf(sb[0]*sb[0]+sb[1]*sb[1]);
- const float invLenSb = 1.0f/lenSb;
- const float dirSb[2] = { sb[0]*invLenSb, sb[1]*invLenSb };
-
- sel[0] = cc[0] + dirCa[0]*lenCa*hsv[1] + dirSb[0]*lenSb*(1.0f - hsv[2]);
- sel[1] = cc[1] + dirCa[1]*lenCa*hsv[1] + dirSb[1]*lenSb*(1.0f - hsv[2]);
+ io.AddInputCharacter(_inputChar); // ASCII or GTFO! :(
}
- float uu, vv, ww;
- barycentric(uu, vv, ww
- , aa[0], aa[1]
- , bb[0], bb[1]
- , cc[0], cc[1]
- , sel[0], sel[1]
- );
+ io.DisplaySize = ImVec2( (float)_width, (float)_height);
- const float val = bx::fclamp(1.0f-vv, 0.0001f, 1.0f);
- const float sat = bx::fclamp(uu/val, 0.0001f, 1.0f);
+ const int64_t now = bx::getHPCounter();
+ const int64_t frameTime = now - m_last;
+ m_last = now;
+ const double freq = double(bx::getHPFrequency() );
+ io.DeltaTime = float(frameTime/freq);
- const float out[3] = { hsv[0], sat, val };
- bx::hsvToRgb(_rgb, out);
+ io.MousePos = ImVec2( (float)_mx, (float)_my);
+ io.MouseDown[0] = 0 != (_button & IMGUI_MBUT_LEFT);
+ io.MouseDown[1] = 0 != (_button & IMGUI_MBUT_RIGHT);
+ io.MouseDown[2] = 0 != (_button & IMGUI_MBUT_MIDDLE);
+ io.MouseWheel = (float)(_scroll - m_lastScroll);
+ m_lastScroll = _scroll;
- // Draw widget.
- nvgSave(m_nvg);
+#if defined(SCI_NAMESPACE)
+ uint8_t modifiers = inputGetModifiersState();
+ io.KeyShift = 0 != (modifiers & (entry::Modifier::LeftShift | entry::Modifier::RightShift) );
+ io.KeyCtrl = 0 != (modifiers & (entry::Modifier::LeftCtrl | entry::Modifier::RightCtrl ) );
+ io.KeyAlt = 0 != (modifiers & (entry::Modifier::LeftAlt | entry::Modifier::RightAlt ) );
+ for (int32_t ii = 0; ii < (int32_t)entry::Key::Count; ++ii)
{
- float saturation;
- uint8_t alpha0;
- uint8_t alpha1;
- if (enabled)
- {
- saturation = 1.0f;
- alpha0 = 255;
- alpha1 = 192;
- }
- else
- {
- saturation = 0.0f;
- alpha0 = 10;
- alpha1 = 10;
- }
-
- // Circle.
- for (uint8_t ii = 0; ii < 6; ii++)
- {
- const float a0 = float(ii)/6.0f * 2.0f*NVG_PI - aeps;
- const float a1 = float(ii+1.0f)/6.0f * 2.0f*NVG_PI + aeps;
- nvgBeginPath(m_nvg);
- nvgArc(m_nvg, center[0], center[1], ri, a0, a1, NVG_CW);
- nvgArc(m_nvg, center[0], center[1], ro, a1, a0, NVG_CCW);
- nvgClosePath(m_nvg);
-
- const float ax = center[0] + cosf(a0) * (ri+ro)*0.5f;
- const float ay = center[1] + sinf(a0) * (ri+ro)*0.5f;
- const float bx = center[0] + cosf(a1) * (ri+ro)*0.5f;
- const float by = center[1] + sinf(a1) * (ri+ro)*0.5f;
- NVGpaint paint = nvgLinearGradient(m_nvg
- , ax, ay
- , bx, by
- , nvgHSLA(a0/NVG_PI*0.5f,saturation,0.55f,alpha0)
- , nvgHSLA(a1/NVG_PI*0.5f,saturation,0.55f,alpha0)
- );
-
- nvgFillPaint(m_nvg, paint);
- nvgFill(m_nvg);
- }
-
- // Circle stroke.
- nvgBeginPath(m_nvg);
- nvgCircle(m_nvg, center[0], center[1], ri-0.5f);
- nvgCircle(m_nvg, center[0], center[1], ro+0.5f);
- nvgStrokeColor(m_nvg, nvgRGBA(0,0,0,64) );
- nvgStrokeWidth(m_nvg, 1.0f);
- nvgStroke(m_nvg);
-
- nvgSave(m_nvg);
- {
- // Hue selector.
- nvgTranslate(m_nvg, center[0], center[1]);
- nvgRotate(m_nvg, hsv[0]*NVG_PI*2.0f);
- nvgStrokeWidth(m_nvg, 2.0f);
- nvgBeginPath(m_nvg);
- nvgRect(m_nvg, ri-1.0f,-3.0f,rd+2.0f,6.0f);
- nvgStrokeColor(m_nvg, nvgRGBA(255,255,255,alpha1) );
- nvgStroke(m_nvg);
-
- // Hue selector drop shadow.
- NVGpaint paint = nvgBoxGradient(m_nvg, ri-3.0f,-5.0f,ro-ri+6.0f,10.0f, 2.0f,4.0f, nvgRGBA(0,0,0,128), nvgRGBA(0,0,0,0) );
- nvgBeginPath(m_nvg);
- nvgRect(m_nvg, ri-2.0f-10.0f,-4.0f-10.0f,ro-ri+4.0f+20.0f,8.0f+20.0f);
- nvgRect(m_nvg, ri-2.0f,-4.0f,ro-ri+4.0f,8.0f);
- nvgPathWinding(m_nvg, NVG_HOLE);
- nvgFillPaint(m_nvg, paint);
- nvgFill(m_nvg);
-
- // Center triangle stroke.
- nvgBeginPath(m_nvg);
- nvgMoveTo(m_nvg, aa[0], aa[1]);
- nvgLineTo(m_nvg, bb[0], bb[1]);
- nvgLineTo(m_nvg, cc[0], cc[1]);
- nvgClosePath(m_nvg);
- nvgStrokeColor(m_nvg, nvgRGBA(0,0,0,64) );
- nvgStroke(m_nvg);
-
- // Center triangle fill.
- paint = nvgLinearGradient(m_nvg, aa[0], aa[1], bb[0], bb[1], nvgHSL(hsv[0],saturation,0.5f), nvgRGBA(0,0,0,alpha0) );
- nvgFillPaint(m_nvg, paint);
- nvgFill(m_nvg);
- paint = nvgLinearGradient(m_nvg, (aa[0]+bb[0])*0.5f, (aa[1]+bb[1])*0.5f, cc[0], cc[1], nvgRGBA(0,0,0,0), nvgRGBA(255,255,255,alpha0) );
- nvgFillPaint(m_nvg, paint);
- nvgFill(m_nvg);
-
- // Color selector.
- nvgStrokeWidth(m_nvg, 2.0f);
- nvgBeginPath(m_nvg);
- nvgCircle(m_nvg, sel[0], sel[1], 5);
- nvgStrokeColor(m_nvg, nvgRGBA(255,255,255,alpha1) );
- nvgStroke(m_nvg);
-
- // Color selector stroke.
- paint = nvgRadialGradient(m_nvg, sel[0], sel[1], 7.0f, 9.0f, nvgRGBA(0,0,0,64), nvgRGBA(0,0,0,0) );
- nvgBeginPath(m_nvg);
- nvgRect(m_nvg, sel[0]-20.0f, sel[1]-20.0f, 40.0f, 40.0f);
- nvgCircle(m_nvg, sel[0], sel[1], 7.0f);
- nvgPathWinding(m_nvg, NVG_HOLE);
- nvgFillPaint(m_nvg, paint);
- nvgFill(m_nvg);
- }
- nvgRestore(m_nvg);
+ io.KeysDown[ii] = inputGetKeyState(entry::Key::Enum(ii) );
}
- nvgRestore(m_nvg);
- }
+#endif // defined(SCI_NAMESPACE)
- struct Area
- {
- int32_t m_x;
- int32_t m_y;
- int32_t m_width;
- int32_t m_height;
- int16_t m_contentX;
- int16_t m_contentY;
- int16_t m_contentWidth;
- int16_t m_contentHeight;
- int16_t m_scissorX;
- int16_t m_scissorY;
- int16_t m_scissorHeight;
- int16_t m_scissorWidth;
- int32_t m_widgetX;
- int32_t m_widgetY;
- int32_t m_widgetW;
- int32_t* m_scrollVal;
- uint32_t m_scrollId;
- bool m_inside;
- bool m_didScroll;
- bool m_scissorEnabled;
- };
-
- bool visible(int32_t _elemY, int32_t _elemHeight, int32_t _scissorY, int32_t _scissorHeight)
- {
- return (_elemY+_elemHeight) > _scissorY
- && (_elemY) < (_scissorY+_scissorHeight);
- }
+ ImGui::NewFrame();
+ ImGui::PushStyleVar(ImGuiStyleVar_ViewId, (float)_viewId);
- inline Area& getCurrentArea()
- {
- return m_areas[m_areaId];
+ ImGuizmo::BeginFrame();
}
- inline void setCurrentScissor()
+ void endFrame()
{
- const Area& area = getCurrentArea();
- if (area.m_scissorEnabled)
- {
- const float xscale = float(m_viewWidth) /float(m_surfaceWidth);
- const float yscale = float(m_viewHeight)/float(m_surfaceHeight);
- const int16_t scissorX = int16_t(float(area.m_scissorX)*xscale);
- const int16_t scissorY = int16_t(float(area.m_scissorY)*yscale);
- const int16_t scissorWidth = int16_t(float(area.m_scissorWidth)*xscale);
- const int16_t scissorHeight = int16_t(float(area.m_scissorHeight)*yscale);
- bgfx::setScissor(uint16_t(IMGUI_MAX(0, scissorX) )
- , uint16_t(IMGUI_MAX(0, scissorY-1) )
- , scissorWidth
- , scissorHeight+1
- );
- }
- else
- {
- bgfx::setScissor(UINT16_MAX);
- }
+ ImGui::PopStyleVar(1);
+ ImGui::Render();
}
- inline void nvgScissor(NVGcontext* _ctx, const Area& _area)
- {
- if (_area.m_scissorEnabled)
- {
- ::nvgScissor(_ctx
- , float(IMGUI_MAX(0, _area.m_scissorX) )
- , float(IMGUI_MAX(0, _area.m_scissorY-1) )
- , float(_area.m_scissorWidth)
- , float(_area.m_scissorHeight+1)
- );
- }
- else
- {
- nvgResetScissor(_ctx);
- }
- }
-
- template <typename Ty, uint16_t Max=64>
- struct IdStack
- {
- IdStack()
- {
- reset();
- }
-
- void reset()
- {
- m_current = 0;
- m_idGen = 0;
- m_ids[0] = 0;
- }
-
- void next()
- {
- BX_CHECK(Max > (m_current+1), "Param out of bounds!");
-
- m_ids[++m_current] = ++m_idGen;
- }
-
- void pop()
- {
- m_current = m_current > 0 ? m_current-1 : 0;
- }
-
- Ty current() const
- {
- BX_CHECK(Max > (m_current), "Param out of bounds!");
-
- return m_ids[m_current];
- }
-
- operator Ty() const
- {
- BX_CHECK(Max > (m_current), "Param out of bounds!");
-
- return m_ids[m_current];
- }
-
- private:
- uint16_t m_current;
- Ty m_idGen;
- Ty m_ids[Max];
- };
-
- bx::AllocatorI* m_allocator;
- int32_t m_mx;
- int32_t m_my;
- int32_t m_scroll;
- uint32_t m_active;
- uint32_t m_hot;
- uint32_t m_hotToBe;
- char m_char;
- char m_lastChar;
- uint32_t m_inputField;
- int32_t m_dragX;
- int32_t m_dragY;
- float m_dragOrig;
- bool m_left;
- bool m_leftPressed;
- bool m_leftReleased;
- bool m_isHot;
- bool m_wentActive;
- bool m_insideArea;
- bool m_isActivePresent;
- bool m_checkActivePresence;
-
- IdStack<uint16_t> m_areaId;
- uint16_t m_widgetId;
- uint64_t m_enabledAreaIds;
- Area m_areas[64];
-
- float m_tempCoords[MAX_TEMP_COORDS * 2];
- float m_tempNormals[MAX_TEMP_COORDS * 2];
-
- float m_circleVerts[NUM_CIRCLE_VERTS * 2];
-
- uint16_t m_textureWidth;
- uint16_t m_textureHeight;
- float m_invTextureWidth;
- float m_invTextureHeight;
- float m_halfTexel;
-
- NVGcontext* m_nvg;
-
- uint8_t m_view;
- uint16_t m_surfaceWidth;
- uint16_t m_surfaceHeight;
- uint16_t m_viewWidth;
- uint16_t m_viewHeight;
-
-#if !USE_NANOVG_FONT
- struct Font
- {
- stbtt_bakedchar m_cdata[96]; // ASCII 32..126 is 95 glyphs
- bgfx::TextureHandle m_texture;
- float m_size;
- };
-
- uint16_t m_currentFontIdx;
- bx::HandleAllocT<IMGUI_CONFIG_MAX_FONTS> m_fontHandle;
- Font m_fonts[IMGUI_CONFIG_MAX_FONTS];
-#endif // !USE_NANOVG_FONT
-
- bgfx::UniformHandle u_imageLodEnabled;
- bgfx::UniformHandle u_imageSwizzle;
- bgfx::UniformHandle s_texColor;
- bgfx::ProgramHandle m_colorProgram;
- bgfx::ProgramHandle m_textureProgram;
- bgfx::ProgramHandle m_cubeMapProgram;
- bgfx::ProgramHandle m_latlongProgram;
+ bx::AllocatorI* m_allocator;
+ bgfx::VertexDecl m_decl;
+ bgfx::ProgramHandle m_program;
bgfx::ProgramHandle m_imageProgram;
- bgfx::ProgramHandle m_imageSwizzProgram;
- bgfx::TextureHandle m_missingTexture;
+ bgfx::TextureHandle m_texture;
+ bgfx::UniformHandle s_tex;
+ bgfx::UniformHandle u_imageLodEnabled;
+ ImFont* m_font[ImGui::Font::Count];
+ int64_t m_last;
+ int32_t m_lastScroll;
+ bgfx::ViewId m_viewId;
};
-static Imgui s_imgui;
+static OcornutImguiContext s_ctx;
-void* imguiMalloc(size_t _size, void*)
+static void* memAlloc(size_t _size)
{
- return BX_ALLOC(s_imgui.m_allocator, _size);
+ return BX_ALLOC(s_ctx.m_allocator, _size);
}
-void imguiFree(void* _ptr, void*)
+static void memFree(void* _ptr)
{
- BX_FREE(s_imgui.m_allocator, _ptr);
+ BX_FREE(s_ctx.m_allocator, _ptr);
}
-ImguiFontHandle imguiCreate(const void*, uint32_t, float _fontSize, bx::AllocatorI* _allocator)
+void OcornutImguiContext::renderDrawLists(ImDrawData* _drawData)
{
- return s_imgui.create(_fontSize, _allocator);
+ s_ctx.render(_drawData);
}
-void imguiDestroy()
+void imguiCreate(float _fontSize, bx::AllocatorI* _allocator)
{
- s_imgui.destroy();
+ s_ctx.create(_fontSize, _allocator);
}
-ImguiFontHandle imguiCreateFont(const void* _data, float _fontSize)
-{
- return s_imgui.createFont(_data, _fontSize);
-}
-
-void imguiSetFont(ImguiFontHandle _handle)
-{
- s_imgui.setFont(_handle);
-}
-
-ImguiFontHandle imguiGetCurrentFont()
-{
- const ImguiFontHandle handle = { s_imgui.m_currentFontIdx };
- return handle;
-}
-
-void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, uint16_t _surfaceWidth, uint16_t _surfaceHeight, char _inputChar, uint8_t _view)
+void imguiDestroy()
{
- s_imgui.beginFrame(_mx, _my, _button, _scroll, _width, _height, _surfaceWidth, _surfaceHeight, _inputChar, _view);
+ s_ctx.destroy();
}
-void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, char _inputChar, uint8_t _view)
+void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, char _inputChar, bgfx::ViewId _viewId)
{
- s_imgui.beginFrame(_mx, _my, _button, _scroll, _width, _height, _width, _height, _inputChar, _view);
+ s_ctx.beginFrame(_mx, _my, _button, _scroll, _width, _height, _inputChar, _viewId);
}
void imguiEndFrame()
{
- s_imgui.endFrame();
-}
-
-void imguiDrawText(int32_t _x, int32_t _y, ImguiTextAlign::Enum _align, const char* _text, uint32_t _argb)
-{
- s_imgui.drawText(_x, _y, _align, _text, _argb);
-}
-
-void imguiDrawLine(float _x0, float _y0, float _x1, float _y1, float _r, uint32_t _argb)
-{
- s_imgui.drawLine(_x0, _y0, _x1, _y1, _r, _argb);
-}
-
-void imguiDrawRoundedRect(float _x, float _y, float _width, float _height, float _r, uint32_t _argb)
-{
- s_imgui.drawRoundedRect(_x, _y, _width, _height, _r, _argb);
-}
-
-void imguiDrawRect(float _x, float _y, float _width, float _height, uint32_t _argb)
-{
- s_imgui.drawRect(_x, _y, _width, _height, _argb);
-}
-
-bool imguiBorderButton(ImguiBorder::Enum _border, bool _checked, bool _enabled)
-{
- return s_imgui.borderButton(_border, _checked, _enabled);
-}
-
-bool imguiBeginArea(const char* _name, int _x, int _y, int _width, int _height, bool _enabled, int32_t _r)
-{
- return s_imgui.beginArea(_name, _x, _y, _width, _height, _enabled, _r);
-}
-
-void imguiEndArea()
-{
- return s_imgui.endArea();
-}
-
-bool imguiBeginScroll(int32_t _height, int32_t* _scroll, bool _enabled)
-{
- return s_imgui.beginScroll(_height, _scroll, _enabled);
-}
-
-void imguiEndScroll(int32_t _r)
-{
- s_imgui.endScroll(_r);
-}
-
-bool imguiBeginScrollArea(const char* _name, int32_t _x, int32_t _y, int32_t _width, int32_t _height, int32_t* _scroll, bool _enabled, int32_t _r)
-{
- const bool result = s_imgui.beginArea(_name, _x, _y, _width, _height, _enabled, _r);
- const bool hasTitle = (NULL != _name && '\0' != _name[0]);
- const int32_t margins = int32_t(hasTitle)*(AREA_HEADER+2*SCROLL_AREA_PADDING-1);
- s_imgui.beginScroll(_height - margins, _scroll, _enabled);
- return result;
-}
-
-void imguiEndScrollArea(int32_t _r)
-{
- s_imgui.endScroll(_r);
- s_imgui.endArea();
-}
-
-void imguiIndent(uint16_t _width)
-{
- s_imgui.indent(_width);
-}
-
-void imguiUnindent(uint16_t _width)
-{
- s_imgui.unindent(_width);
-}
-
-void imguiSeparator(uint16_t _height)
-{
- s_imgui.separator(_height);
-}
-
-void imguiSeparatorLine(uint16_t _height, ImguiAlign::Enum _align)
-{
- s_imgui.separatorLine(_height, _align);
-}
-
-int32_t imguiGetWidgetX()
-{
- return s_imgui.getCurrentArea().m_widgetX;
+ s_ctx.endFrame();
}
-int32_t imguiGetWidgetY()
+namespace ImGui
{
- return s_imgui.getCurrentArea().m_widgetY;
-}
-
-int32_t imguiGetWidgetW()
-{
- return s_imgui.getCurrentArea().m_widgetW;
-}
-
-void imguiSetCurrentScissor()
-{
- return s_imgui.setCurrentScissor();
-}
-
-bool imguiButton(const char* _text, bool _enabled, ImguiAlign::Enum _align, uint32_t _rgb0, int32_t _r)
-{
- return s_imgui.button(_text, _enabled, _align, _rgb0, _r);
-}
-
-bool imguiItem(const char* _text, bool _enabled)
-{
- return s_imgui.item(_text, _enabled);
-}
-
-bool imguiCheck(const char* _text, bool _checked, bool _enabled)
-{
- return s_imgui.check(_text, _checked, _enabled);
-}
-
-bool imguiBool(const char* _text, bool& _flag, bool _enabled)
-{
- bool result = imguiCheck(_text, _flag, _enabled);
- if (result)
+ void PushFont(Font::Enum _font)
{
- _flag = !_flag;
+ PushFont(s_ctx.m_font[_font]);
}
- return result;
-}
-
-bool imguiCollapse(const char* _text, const char* _subtext, bool _checked, bool _enabled)
-{
- return s_imgui.collapse(_text, _subtext, _checked, _enabled);
-}
-
-void imguiLabel(const char* _format, ...)
-{
- va_list argList;
- va_start(argList, _format);
- s_imgui.labelVargs(_format, argList, imguiRGBA(255, 255, 255, 255) );
- va_end(argList);
-}
-
-void imguiLabel(uint32_t _rgba, const char* _format, ...)
-{
- va_list argList;
- va_start(argList, _format);
- s_imgui.labelVargs(_format, argList, _rgba);
- va_end(argList);
-}
-
-void imguiValue(const char* _text)
-{
- s_imgui.value(_text);
-}
-
-bool imguiSlider(const char* _text, float& _val, float _vmin, float _vmax, float _vinc, bool _enabled, ImguiAlign::Enum _align)
-{
- return s_imgui.slider(_text, _val, _vmin, _vmax, _vinc, _enabled, _align);
-}
+} // namespace ImGui
-bool imguiSlider(const char* _text, int32_t& _val, int32_t _vmin, int32_t _vmax, bool _enabled, ImguiAlign::Enum _align)
-{
- float val = (float)_val;
- bool result = s_imgui.slider(_text, val, (float)_vmin, (float)_vmax, 1.0f, _enabled, _align);
- _val = (int32_t)val;
- return result;
-}
-
-void imguiInput(const char* _label, char* _str, uint32_t _len, bool _enabled, ImguiAlign::Enum _align, int32_t _r)
-{
- s_imgui.input(_label, _str, _len, _enabled, _align, _r);
-}
-
-uint8_t imguiTabs(uint8_t _selected, bool _enabled, ImguiAlign::Enum _align, int32_t _height, int32_t _r, uint32_t _nTabs, uint32_t _nEnabled, ...)
-{
- va_list argList;
- va_start(argList, _nEnabled);
- const uint8_t result = s_imgui.tabs(_selected, _enabled, _align, _height, _r, _nTabs, _nEnabled, argList);
- va_end(argList);
-
- return result;
-}
-
-uint8_t imguiTabs(uint8_t _selected, bool _enabled, ImguiAlign::Enum _align, int32_t _height, int32_t _r, uint32_t _nTabs, ...)
-{
- va_list argList;
- va_start(argList, _nTabs);
- const uint8_t result = s_imgui.tabs(_selected, _enabled, _align, _height, _r, _nTabs, 0, argList);
- va_end(argList);
-
- return result;
-}
-
-uint32_t imguiChooseUseMacroInstead(uint32_t _selected, ...)
-{
- va_list argList;
- va_start(argList, _selected);
-
- const char* str = va_arg(argList, const char*);
- for (uint32_t ii = 0; str != NULL; ++ii, str = va_arg(argList, const char*) )
- {
- if (imguiCheck(str, ii == _selected) )
- {
- _selected = ii;
- }
- }
-
- va_end(argList);
-
- return _selected;
-}
-
-void imguiColorWheel(float _rgb[3], bool _respectIndentation, float _size, bool _enabled)
-{
- s_imgui.colorWheelWidget(_rgb, _respectIndentation, _size, _enabled);
-}
-
-void imguiColorWheel(const char* _text, float _rgb[3], bool& _activated, float _size, bool _enabled)
-{
- char buf[128];
- bx::snprintf(buf, sizeof(buf), "[RGB %-2.2f %-2.2f %-2.2f]"
- , _rgb[0]
- , _rgb[1]
- , _rgb[2]
- );
-
- if (imguiCollapse(_text, buf, _activated) )
- {
- _activated = !_activated;
- }
-
- if (_activated)
- {
- imguiColorWheel(_rgb, false, _size, _enabled);
- }
-}
-
-bool imguiImage(bgfx::TextureHandle _image, float _lod, int32_t _width, int32_t _height, ImguiAlign::Enum _align, bool _enabled, bool _originBottomLeft)
-{
- return s_imgui.image(_image, _lod, _width, _height, _align, _enabled, _originBottomLeft);
-}
-
-bool imguiImage(bgfx::TextureHandle _image, float _lod, float _width, float _aspect, ImguiAlign::Enum _align, bool _enabled, bool _originBottomLeft)
-{
- return s_imgui.image(_image, _lod, _width, _aspect, _align, _enabled, _originBottomLeft);
-}
-
-bool imguiImageChannel(bgfx::TextureHandle _image, uint8_t _channel, float _lod, int32_t _width, int32_t _height, ImguiAlign::Enum _align, bool _enabled)
-{
- return s_imgui.imageChannel(_image, _channel, _lod, _width, _height, _align, _enabled);
-}
-
-bool imguiImageChannel(bgfx::TextureHandle _image, uint8_t _channel, float _lod, float _width, float _aspect, ImguiAlign::Enum _align, bool _enabled)
-{
- return s_imgui.imageChannel(_image, _channel, _lod, _width, _aspect, _align, _enabled);
-}
-
-bool imguiCube(bgfx::TextureHandle _cubemap, float _lod, ImguiCubemap::Enum _display, bool _sameHeight, ImguiAlign::Enum _align, bool _enabled)
-{
- return s_imgui.cubeMap(_cubemap, _lod, _display, _sameHeight, _align, _enabled);
-}
-
-float imguiGetTextLength(const char* _text, ImguiFontHandle _handle)
-{
-#if !USE_NANOVG_FONT
- uint32_t numVertices = 0; //unused
- return getTextLength(s_imgui.m_fonts[_handle.idx].m_cdata, _text, numVertices);
-#else
- return 0.0f;
-#endif
-}
-
-bool imguiMouseOverArea()
-{
- return s_imgui.m_insideArea
- || ImGui::IsAnyItemHovered()
- || ImGui::IsMouseHoveringAnyWindow()
- ;
-}
-
-bgfx::ProgramHandle imguiGetImageProgram(uint8_t _mip)
-{
- const float lodEnabled[4] = { float(_mip), 1.0f, 0.0f, 0.0f };
- bgfx::setUniform(s_imgui.u_imageLodEnabled, lodEnabled);
- return s_imgui.m_imageProgram;
-}
+BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4505); // error C4505: '' : unreferenced local function has been removed
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-function"); // warning: ‘int rect_width_compare(const void*, const void*)’ defined but not used
+BX_PRAGMA_DIAGNOSTIC_PUSH();
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG("-Wunknown-pragmas")
+//BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-but-set-variable"); // warning: variable ‘L1’ set but not used
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wtype-limits"); // warning: comparison is always true due to limited range of data type
+#define STBTT_malloc(_size, _userData) memAlloc(_size)
+#define STBTT_free(_ptr, _userData) memFree(_ptr)
+#define STB_RECT_PACK_IMPLEMENTATION
+#include <stb/stb_rect_pack.h>
+#define STB_TRUETYPE_IMPLEMENTATION
+#include <stb/stb_truetype.h>
+BX_PRAGMA_DIAGNOSTIC_POP();
diff --git a/3rdparty/bgfx/examples/common/imgui/imgui.h b/3rdparty/bgfx/examples/common/imgui/imgui.h
index 8176b4031c6..b3deb59ebe7 100644
--- a/3rdparty/bgfx/examples/common/imgui/imgui.h
+++ b/3rdparty/bgfx/examples/common/imgui/imgui.h
@@ -3,26 +3,6 @@
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
-// This code is based on:
-//
-// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
-//
-// This software is provided 'as-is', without any express or implied
-// warranty. In no event will the authors be held liable for any damages
-// arising from the use of this software.
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-// 1. The origin of this software must not be misrepresented; you must not
-// claim that you wrote the original software. If you use this software
-// in a product, an acknowledgment in the product documentation would be
-// appreciated but is not required.
-// 2. Altered source versions must be plainly marked as such, and must not be
-// misrepresented as being the original software.
-// 3. This notice may not be removed or altered from any source distribution.
-//
-// Source altered and distributed from https://github.com/AdrienHerubel/imgui
-
#ifndef IMGUI_H_HEADER_GUARD
#define IMGUI_H_HEADER_GUARD
@@ -35,91 +15,6 @@
#define IMGUI_MBUT_RIGHT 0x02
#define IMGUI_MBUT_MIDDLE 0x04
-/// For custom values, define these macros before including imgui.h
-
-#ifndef IMGUI_SCROLL_AREA_R
-# define IMGUI_SCROLL_AREA_R 6
-#endif //IMGUI_SCROLL_AREA_R
-
-#ifndef IMGUI_SCROLL_BAR_R
-# define IMGUI_SCROLL_BAR_R 5
-#endif //IMGUI_SCROLL_BAR_R
-
-#ifndef IMGUI_BUTTON_R
-# define IMGUI_BUTTON_R 9
-#endif //IMGUI_BUTTON_R
-
-#ifndef IMGUI_BUTTON_RGB0
-# define IMGUI_BUTTON_RGB0 imguiRGBA(128, 128, 128, 0)
-#endif //IMGUI_BUTTON_RGB0
-
-#ifndef IMGUI_INPUT_R
-# define IMGUI_INPUT_R 4
-#endif //IMGUI_INPUT_R
-
-#ifndef IMGUI_TABS_HEIGHT
-# define IMGUI_TABS_HEIGHT 20
-#endif //IMGUI_TABS_HEIGHT
-
-#ifndef IMGUI_TABS_R
-# define IMGUI_TABS_R 9
-#endif //IMGUI_TABS_R
-
-#ifndef IMGUI_INDENT_VALUE
-# define IMGUI_INDENT_VALUE 16
-#endif //IMGUI_INDENT_VALUE
-
-#ifndef IMGUI_SEPARATOR_VALUE
-# define IMGUI_SEPARATOR_VALUE 12
-#endif //IMGUI_SEPARATOR_VALUE
-
-struct ImguiTextAlign
-{
- enum Enum
- {
- Left,
- Center,
- Right,
-
- Count
- };
-};
-
-struct ImguiAlign
-{
- enum Enum
- {
- Left,
- LeftIndented,
- Center,
- CenterIndented,
- Right,
- };
-};
-
-struct ImguiCubemap
-{
- enum Enum
- {
- Cross,
- Latlong,
- Hex,
-
- Count,
- };
-};
-
-struct ImguiBorder
-{
- enum Enum
- {
- Left,
- Right,
- Top,
- Bottom
- };
-};
-
inline uint32_t imguiRGBA(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a = 255)
{
return 0
@@ -130,82 +25,16 @@ inline uint32_t imguiRGBA(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a = 255)
;
}
-BGFX_HANDLE(ImguiFontHandle);
-
-ImguiFontHandle imguiCreateFont(const void* _data, float _fontSize = 18.0f);
-void imguiSetFont(ImguiFontHandle _handle);
-ImguiFontHandle imguiGetCurrentFont();
-
namespace bx { struct AllocatorI; }
-ImguiFontHandle imguiCreate(const void* _data = NULL, uint32_t _size = 0, float _fontSize = 18.0f, bx::AllocatorI* _allocator = NULL);
+void imguiCreate(float _fontSize = 18.0f, bx::AllocatorI* _allocator = NULL);
void imguiDestroy();
-void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, char _inputChar = 0, uint8_t _view = 255);
-void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, uint16_t _surfaceWidth, uint16_t _surfaceHeight, char _inputChar = 0, uint8_t _view = 255);
+void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, char _inputChar = 0, bgfx::ViewId _view = 255);
void imguiEndFrame();
-void imguiDrawText(int _x, int _y, ImguiTextAlign::Enum _align, const char* _text, uint32_t _argb);
-void imguiDrawLine(float _x0, float _y0, float _x1, float _y1, float _r, uint32_t _argb);
-void imguiDrawRoundedRect(float _x, float _y, float _w, float _h, float _r, uint32_t _argb);
-void imguiDrawRect(float _x, float _y, float _w, float _h, uint32_t _argb);
-
-/// Notice: this function is not to be called between imguiBeginArea() and imguiEndArea().
-bool imguiBorderButton(ImguiBorder::Enum _border, bool _checked, bool _enabled = true);
-
-bool imguiBeginArea(const char* _name, int _x, int _y, int _width, int _height, bool _enabled = true, int32_t _r = IMGUI_SCROLL_AREA_R);
-void imguiEndArea();
-bool imguiBeginScroll(int32_t _height, int32_t* _scroll, bool _enabled = true);
-void imguiEndScroll(int32_t _r = IMGUI_SCROLL_BAR_R);
-
-bool imguiBeginScrollArea(const char* _name, int _x, int _y, int _width, int _height, int* _scroll, bool _enabled = true, int32_t _r = IMGUI_SCROLL_AREA_R);
-void imguiEndScrollArea(int32_t _r = IMGUI_SCROLL_BAR_R);
-
-void imguiIndent(uint16_t _width = IMGUI_INDENT_VALUE);
-void imguiUnindent(uint16_t _width = IMGUI_INDENT_VALUE);
-void imguiSeparator(uint16_t _height = IMGUI_SEPARATOR_VALUE);
-void imguiSeparatorLine(uint16_t _height = IMGUI_SEPARATOR_VALUE, ImguiAlign::Enum = ImguiAlign::LeftIndented);
-
-int32_t imguiGetWidgetX();
-int32_t imguiGetWidgetY();
-int32_t imguiGetWidgetW();
-void imguiSetCurrentScissor(); // Call before drawing custom widgets over imgui area.
-
-bool imguiButton(const char* _text, bool _enabled = true, ImguiAlign::Enum _align = ImguiAlign::LeftIndented, uint32_t _rgb0 = IMGUI_BUTTON_RGB0, int32_t _r = IMGUI_BUTTON_R);
-bool imguiItem(const char* _text, bool _enabled = true);
-bool imguiCheck(const char* _text, bool _checked, bool _enabled = true);
-bool imguiBool(const char* _text, bool& _flag, bool _enabled = true);
-bool imguiCollapse(const char* _text, const char* _subtext, bool _checked, bool _enabled = true);
-void imguiLabel(const char* _format, ...);
-void imguiLabel(uint32_t _rgba, const char* _format, ...);
-void imguiValue(const char* _text);
-bool imguiSlider(const char* _text, float& _val, float _vmin, float _vmax, float _vinc, bool _enabled = true, ImguiAlign::Enum _align = ImguiAlign::LeftIndented);
-bool imguiSlider(const char* _text, int32_t& _val, int32_t _vmin, int32_t _vmax, bool _enabled = true, ImguiAlign::Enum _align = ImguiAlign::LeftIndented);
-void imguiInput(const char* _label, char* _str, uint32_t _len, bool _enabled = true, ImguiAlign::Enum _align = ImguiAlign::LeftIndented, int32_t _r = IMGUI_INPUT_R);
-
-/// Usage example:
-/// imguiTabs(0, true, ImguiAlign::CenterIndented, 20, 0, 3, 2, "Tab0", "Tab1", "Tab2", true, false);
-/// _nTabs - Number of tabs (in the above example, 3, and their labes are 'Tab0', 'Tab1' and 'Tab2'.
-/// _nEnabled - Number of specified 'enabled' flags. All other unspecified tabs are considered enabled by default.
-/// In the above example, there are 2 enabled flags: 'Tab0' is specified as enabled and 'Tab1' is specified as disabled.
-/// Tab2 is unspecified and therefore is treated as enabled.
-uint8_t imguiTabs(uint8_t _selected, bool _enabled, ImguiAlign::Enum _align, int32_t _height, int32_t _r, uint32_t _nTabs, uint32_t _nEnabled, ...);
-uint8_t imguiTabs(uint8_t _selected, bool _enabled, ImguiAlign::Enum _align, int32_t _height, int32_t _r, uint32_t _nTabs, ...);
-
-uint32_t imguiChooseUseMacroInstead(uint32_t _selected, ...);
-#define imguiChoose(...) imguiChooseUseMacroInstead(__VA_ARGS__, NULL)
-
-void imguiColorWheel(float _rgb[3], bool _respectIndentation = false, float _size = 0.8f, bool _enabled = true);
-void imguiColorWheel(const char* _str, float _rgb[3], bool& _activated, float _size = 0.8f, bool _enabled = true);
-
-bool imguiImage(bgfx::TextureHandle _image, float _lod, int32_t _width, int32_t _height, ImguiAlign::Enum _align = ImguiAlign::LeftIndented, bool _enabled = true, bool _originBottomLeft = false);
-bool imguiImage(bgfx::TextureHandle _image, float _lod, float _scale, float _aspect, ImguiAlign::Enum _align = ImguiAlign::LeftIndented, bool _enabled = true, bool _originBottomLeft = false);
-bool imguiImageChannel(bgfx::TextureHandle _image, uint8_t _channel, float _lod, int32_t _width, int32_t _height, ImguiAlign::Enum _align = ImguiAlign::LeftIndented, bool _enabled = true);
-bool imguiImageChannel(bgfx::TextureHandle _image, uint8_t _channel, float _lod, float _scale, float _aspect, ImguiAlign::Enum _align = ImguiAlign::LeftIndented, bool _enabled = true);
-bool imguiCube(bgfx::TextureHandle _cubemap, float _lod = 0.0f, ImguiCubemap::Enum _display = ImguiCubemap::Cross, bool _sameHeight = false, ImguiAlign::Enum _align = ImguiAlign::LeftIndented, bool _enabled = true);
-
-float imguiGetTextLength(const char* _text, ImguiFontHandle _handle);
-bool imguiMouseOverArea();
+namespace entry { class AppI; }
+void showExampleDialog(entry::AppI* _app, const char* _errorText = NULL);
namespace ImGui
{
@@ -279,6 +108,35 @@ namespace ImGui
SetCursorPosY(GetCursorPosY() + GetTextLineHeightWithSpacing() );
}
+ inline bool TabButton(const char* _text, float _width, bool _active)
+ {
+ int32_t count = 1;
+
+ if (_active)
+ {
+ ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.0f, 0.75f, 0.0f, 0.78f) );
+ ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.0f, 0.0f, 0.0f, 1.0f ) );
+ count = 2;
+ }
+ else
+ {
+ ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.5f, 0.5f, 0.5f, 0.7f) );
+ }
+
+ bool retval = ImGui::Button(_text, ImVec2(_width, 20.0f) );
+ ImGui::PopStyleColor(count);
+
+ return retval;
+ }
+
+ inline bool MouseOverArea()
+ {
+ return false
+ || ImGui::IsAnyItemHovered()
+ || ImGui::IsAnyWindowHovered()
+ ;
+ }
+
} // namespace ImGui
#endif // IMGUI_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp
deleted file mode 100644
index f518b656bd3..00000000000
--- a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Copyright 2014-2015 Daniel Collin. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#include <bgfx/bgfx.h>
-#include <bgfx/embedded_shader.h>
-#include <bx/allocator.h>
-#include <bx/fpumath.h>
-#include <bx/timer.h>
-#include <ocornut-imgui/imgui.h>
-#include "imgui.h"
-#include "ocornut_imgui.h"
-#include "../bgfx_utils.h"
-
-#ifndef USE_ENTRY
-# if defined(SCI_NAMESPACE)
-# define USE_ENTRY 1
-# else
-# define USE_ENTRY 0
-# endif // defined(SCI_NAMESPACE)
-#endif // USE_ENTRY
-
-#if USE_ENTRY
-# include "../entry/entry.h"
-#endif // USE_ENTRY
-
-#if defined(SCI_NAMESPACE)
-# include "../entry/input.h"
-# include "scintilla.h"
-#endif // defined(SCI_NAMESPACE)
-
-#include "vs_ocornut_imgui.bin.h"
-#include "fs_ocornut_imgui.bin.h"
-
-#include "roboto_regular.ttf.h"
-#include "robotomono_regular.ttf.h"
-#include "icons_kenney.ttf.h"
-#include "icons_font_awesome.ttf.h"
-
-static const bgfx::EmbeddedShader s_embeddedShaders[] =
-{
- BGFX_EMBEDDED_SHADER(vs_ocornut_imgui),
- BGFX_EMBEDDED_SHADER(fs_ocornut_imgui),
-
- BGFX_EMBEDDED_SHADER_END()
-};
-
-struct FontRangeMerge
-{
- const void* data;
- size_t size;
- ImWchar ranges[3];
-};
-
-static FontRangeMerge s_fontRangeMerge[] =
-{
- { s_iconsKenneyTtf, sizeof(s_iconsKenneyTtf), { ICON_MIN_KI, ICON_MAX_KI, 0 } },
- { s_iconsFontAwesomeTtf, sizeof(s_iconsFontAwesomeTtf), { ICON_MIN_FA, ICON_MAX_FA, 0 } },
-};
-
-struct OcornutImguiContext
-{
- static void* memAlloc(size_t _size);
- static void memFree(void* _ptr);
- static void renderDrawLists(ImDrawData* _drawData);
-
- void render(ImDrawData* _drawData)
- {
- const ImGuiIO& io = ImGui::GetIO();
- const float width = io.DisplaySize.x;
- const float height = io.DisplaySize.y;
-
- {
- float ortho[16];
- bx::mtxOrtho(ortho, 0.0f, width, height, 0.0f, -1.0f, 1.0f);
- bgfx::setViewTransform(m_viewId, NULL, ortho);
- }
-
- // Render command lists
- for (int32_t ii = 0, num = _drawData->CmdListsCount; ii < num; ++ii)
- {
- bgfx::TransientVertexBuffer tvb;
- bgfx::TransientIndexBuffer tib;
-
- const ImDrawList* drawList = _drawData->CmdLists[ii];
- uint32_t numVertices = (uint32_t)drawList->VtxBuffer.size();
- uint32_t numIndices = (uint32_t)drawList->IdxBuffer.size();
-
- if (!checkAvailTransientBuffers(numVertices, m_decl, numIndices) )
- {
- // not enough space in transient buffer just quit drawing the rest...
- break;
- }
-
- bgfx::allocTransientVertexBuffer(&tvb, numVertices, m_decl);
- bgfx::allocTransientIndexBuffer(&tib, numIndices);
-
- ImDrawVert* verts = (ImDrawVert*)tvb.data;
- bx::memCopy(verts, drawList->VtxBuffer.begin(), numVertices * sizeof(ImDrawVert) );
-
- ImDrawIdx* indices = (ImDrawIdx*)tib.data;
- bx::memCopy(indices, drawList->IdxBuffer.begin(), numIndices * sizeof(ImDrawIdx) );
-
- uint32_t offset = 0;
- for (const ImDrawCmd* cmd = drawList->CmdBuffer.begin(), *cmdEnd = drawList->CmdBuffer.end(); cmd != cmdEnd; ++cmd)
- {
- if (cmd->UserCallback)
- {
- cmd->UserCallback(drawList, cmd);
- }
- else if (0 != cmd->ElemCount)
- {
- uint64_t state = 0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_MSAA
- ;
-
- bgfx::TextureHandle th = m_texture;
- bgfx::ProgramHandle program = m_program;
-
- if (NULL != cmd->TextureId)
- {
- union { ImTextureID ptr; struct { bgfx::TextureHandle handle; uint8_t flags; uint8_t mip; } s; } texture = { cmd->TextureId };
- state |= 0 != (IMGUI_FLAGS_ALPHA_BLEND & texture.s.flags)
- ? BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
- : BGFX_STATE_NONE
- ;
- th = texture.s.handle;
- if (0 != texture.s.mip)
- {
- extern bgfx::ProgramHandle imguiGetImageProgram(uint8_t _mip);
- program = imguiGetImageProgram(texture.s.mip);
- }
- }
- else
- {
- state |= BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA);
- }
-
- const uint16_t xx = uint16_t(bx::fmax(cmd->ClipRect.x, 0.0f) );
- const uint16_t yy = uint16_t(bx::fmax(cmd->ClipRect.y, 0.0f) );
- bgfx::setScissor(xx, yy
- , uint16_t(bx::fmin(cmd->ClipRect.z, 65535.0f)-xx)
- , uint16_t(bx::fmin(cmd->ClipRect.w, 65535.0f)-yy)
- );
-
- bgfx::setState(state);
- bgfx::setTexture(0, s_tex, th);
- bgfx::setVertexBuffer(&tvb, 0, numVertices);
- bgfx::setIndexBuffer(&tib, offset, cmd->ElemCount);
- bgfx::submit(cmd->ViewId, program);
- }
-
- offset += cmd->ElemCount;
- }
- }
- }
-
- void create(float _fontSize, bx::AllocatorI* _allocator)
- {
- m_viewId = 255;
- m_allocator = _allocator;
- m_lastScroll = 0;
- m_last = bx::getHPCounter();
-
- ImGuiIO& io = ImGui::GetIO();
- io.RenderDrawListsFn = renderDrawLists;
- if (NULL != m_allocator)
- {
- io.MemAllocFn = memAlloc;
- io.MemFreeFn = memFree;
- }
-
- io.DisplaySize = ImVec2(1280.0f, 720.0f);
- io.DeltaTime = 1.0f / 60.0f;
- io.IniFilename = NULL;
-
- setupStyle(true);
-
-#if defined(SCI_NAMESPACE)
- io.KeyMap[ImGuiKey_Tab] = (int)entry::Key::Tab;
- io.KeyMap[ImGuiKey_LeftArrow] = (int)entry::Key::Left;
- io.KeyMap[ImGuiKey_RightArrow] = (int)entry::Key::Right;
- io.KeyMap[ImGuiKey_UpArrow] = (int)entry::Key::Up;
- io.KeyMap[ImGuiKey_DownArrow] = (int)entry::Key::Down;
- io.KeyMap[ImGuiKey_Home] = (int)entry::Key::Home;
- io.KeyMap[ImGuiKey_End] = (int)entry::Key::End;
- io.KeyMap[ImGuiKey_Delete] = (int)entry::Key::Delete;
- io.KeyMap[ImGuiKey_Backspace] = (int)entry::Key::Backspace;
- io.KeyMap[ImGuiKey_Enter] = (int)entry::Key::Return;
- io.KeyMap[ImGuiKey_Escape] = (int)entry::Key::Esc;
- io.KeyMap[ImGuiKey_A] = (int)entry::Key::KeyA;
- io.KeyMap[ImGuiKey_C] = (int)entry::Key::KeyC;
- io.KeyMap[ImGuiKey_V] = (int)entry::Key::KeyV;
- io.KeyMap[ImGuiKey_X] = (int)entry::Key::KeyX;
- io.KeyMap[ImGuiKey_Y] = (int)entry::Key::KeyY;
- io.KeyMap[ImGuiKey_Z] = (int)entry::Key::KeyZ;
-#endif // defined(SCI_NAMESPACE)
-
- bgfx::RendererType::Enum type = bgfx::getRendererType();
- m_program = bgfx::createProgram(
- bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_ocornut_imgui")
- , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_ocornut_imgui")
- , true
- );
-
- m_decl
- .begin()
- .add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float)
- .add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float)
- .add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
- .end();
-
- s_tex = bgfx::createUniform("s_tex", bgfx::UniformType::Int1);
-
- uint8_t* data;
- int32_t width;
- int32_t height;
- {
- ImFontConfig config;
- config.FontDataOwnedByAtlas = false;
- config.MergeMode = false;
-// config.MergeGlyphCenterV = true;
-
- m_font[ImGui::Font::Regular] = io.Fonts->AddFontFromMemoryTTF( (void*)s_robotoRegularTtf, sizeof(s_robotoRegularTtf), _fontSize, &config);
- m_font[ImGui::Font::Mono ] = io.Fonts->AddFontFromMemoryTTF( (void*)s_robotoMonoRegularTtf, sizeof(s_robotoMonoRegularTtf), _fontSize-3.0f, &config);
-
- config.MergeMode = true;
- config.DstFont = m_font[ImGui::Font::Regular];
-
- for (uint32_t ii = 0; ii < BX_COUNTOF(s_fontRangeMerge); ++ii)
- {
- const FontRangeMerge& frm = s_fontRangeMerge[ii];
-
- io.Fonts->AddFontFromMemoryTTF( (void*)frm.data
- , (int)frm.size
- , _fontSize-3.0f
- , &config
- , frm.ranges
- );
- }
- }
-
- io.Fonts->GetTexDataAsRGBA32(&data, &width, &height);
-
- m_texture = bgfx::createTexture2D(
- (uint16_t)width
- , (uint16_t)height
- , false
- , 1
- , bgfx::TextureFormat::BGRA8
- , 0
- , bgfx::copy(data, width*height*4)
- );
-
- ImGui::InitDockContext();
- }
-
- void destroy()
- {
- ImGui::ShutdownDockContext();
- ImGui::Shutdown();
-
- bgfx::destroyUniform(s_tex);
- bgfx::destroyTexture(m_texture);
- bgfx::destroyProgram(m_program);
-
- m_allocator = NULL;
- }
-
- void setupStyle(bool _dark)
- {
- // Doug Binks' darl color scheme
- // https://gist.github.com/dougbinks/8089b4bbaccaaf6fa204236978d165a9
- ImGuiStyle& style = ImGui::GetStyle();
-
- style.FrameRounding = 4.0f;
-
- // light style from Pacome Danhiez (user itamago)
- // https://github.com/ocornut/imgui/pull/511#issuecomment-175719267
- style.Colors[ImGuiCol_Text] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f);
- style.Colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
- style.Colors[ImGuiCol_WindowBg] = ImVec4(0.94f, 0.94f, 0.94f, 1.00f);
- style.Colors[ImGuiCol_ChildWindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
- style.Colors[ImGuiCol_Border] = ImVec4(0.00f, 0.00f, 0.00f, 0.39f);
- style.Colors[ImGuiCol_BorderShadow] = ImVec4(1.00f, 1.00f, 1.00f, 0.10f);
- style.Colors[ImGuiCol_FrameBg] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
- style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
- style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
- style.Colors[ImGuiCol_TitleBg] = ImVec4(0.96f, 0.96f, 0.96f, 1.00f);
- style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(1.00f, 1.00f, 1.00f, 0.51f);
- style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.82f, 0.82f, 0.82f, 1.00f);
- style.Colors[ImGuiCol_MenuBarBg] = ImVec4(0.86f, 0.86f, 0.86f, 1.00f);
- style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.98f, 0.98f, 0.98f, 0.53f);
- style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.69f, 0.69f, 0.69f, 0.80f);
- style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.49f, 0.49f, 0.49f, 0.80f);
- style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.49f, 0.49f, 0.49f, 1.00f);
- style.Colors[ImGuiCol_ComboBg] = ImVec4(0.86f, 0.86f, 0.86f, 0.99f);
- style.Colors[ImGuiCol_CheckMark] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
- style.Colors[ImGuiCol_SliderGrab] = ImVec4(0.26f, 0.59f, 0.98f, 0.78f);
- style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
- style.Colors[ImGuiCol_Button] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
- style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
- style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
- style.Colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
- style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
- style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
- style.Colors[ImGuiCol_Column] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f);
- style.Colors[ImGuiCol_ColumnHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.78f);
- style.Colors[ImGuiCol_ColumnActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
- style.Colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.50f);
- style.Colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
- style.Colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
- style.Colors[ImGuiCol_CloseButton] = ImVec4(0.59f, 0.59f, 0.59f, 0.50f);
- style.Colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.98f, 0.39f, 0.36f, 1.00f);
- style.Colors[ImGuiCol_CloseButtonActive] = ImVec4(0.98f, 0.39f, 0.36f, 1.00f);
- style.Colors[ImGuiCol_PlotLines] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f);
- style.Colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
- style.Colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
- style.Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
- style.Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
- style.Colors[ImGuiCol_PopupBg] = ImVec4(1.00f, 1.00f, 1.00f, 0.94f);
- style.Colors[ImGuiCol_ModalWindowDarkening] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
-
- if (_dark)
- {
- for (int i = 0; i <= ImGuiCol_COUNT; i++)
- {
- ImVec4& col = style.Colors[i];
- float H, S, V;
- ImGui::ColorConvertRGBtoHSV( col.x, col.y, col.z, H, S, V );
-
- if( S < 0.1f )
- {
- V = 1.0f - V;
- }
- ImGui::ColorConvertHSVtoRGB( H, S, V, col.x, col.y, col.z );
- }
- }
- }
-
- void beginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, int _width, int _height, char _inputChar, uint8_t _viewId)
- {
- m_viewId = _viewId;
-
- ImGuiIO& io = ImGui::GetIO();
- if (_inputChar < 0x7f)
- {
- io.AddInputCharacter(_inputChar); // ASCII or GTFO! :(
- }
-
- io.DisplaySize = ImVec2( (float)_width, (float)_height);
-
- const int64_t now = bx::getHPCounter();
- const int64_t frameTime = now - m_last;
- m_last = now;
- const double freq = double(bx::getHPFrequency() );
- io.DeltaTime = float(frameTime/freq);
-
- io.MousePos = ImVec2( (float)_mx, (float)_my);
- io.MouseDown[0] = 0 != (_button & IMGUI_MBUT_LEFT);
- io.MouseDown[1] = 0 != (_button & IMGUI_MBUT_RIGHT);
- io.MouseDown[2] = 0 != (_button & IMGUI_MBUT_MIDDLE);
- io.MouseWheel = (float)(_scroll - m_lastScroll);
- m_lastScroll = _scroll;
-
-#if defined(SCI_NAMESPACE)
- uint8_t modifiers = inputGetModifiersState();
- io.KeyShift = 0 != (modifiers & (entry::Modifier::LeftShift | entry::Modifier::RightShift) );
- io.KeyCtrl = 0 != (modifiers & (entry::Modifier::LeftCtrl | entry::Modifier::RightCtrl ) );
- io.KeyAlt = 0 != (modifiers & (entry::Modifier::LeftAlt | entry::Modifier::RightAlt ) );
- for (int32_t ii = 0; ii < (int32_t)entry::Key::Count; ++ii)
- {
- io.KeysDown[ii] = inputGetKeyState(entry::Key::Enum(ii) );
- }
-#endif // defined(SCI_NAMESPACE)
-
- ImGui::NewFrame();
- ImGui::PushStyleVar(ImGuiStyleVar_ViewId, (float)_viewId);
-
- ImGuizmo::BeginFrame();
- }
-
- void endFrame()
- {
- ImGui::PopStyleVar(1);
- ImGui::Render();
- }
-
- bx::AllocatorI* m_allocator;
- bgfx::VertexDecl m_decl;
- bgfx::ProgramHandle m_program;
- bgfx::TextureHandle m_texture;
- bgfx::UniformHandle s_tex;
- ImFont* m_font[ImGui::Font::Count];
- int64_t m_last;
- int32_t m_lastScroll;
- uint8_t m_viewId;
-};
-
-static OcornutImguiContext s_ctx;
-
-void* OcornutImguiContext::memAlloc(size_t _size)
-{
- return BX_ALLOC(s_ctx.m_allocator, _size);
-}
-
-void OcornutImguiContext::memFree(void* _ptr)
-{
- BX_FREE(s_ctx.m_allocator, _ptr);
-}
-
-void OcornutImguiContext::renderDrawLists(ImDrawData* _drawData)
-{
- s_ctx.render(_drawData);
-}
-
-void IMGUI_create(float _fontSize, bx::AllocatorI* _allocator)
-{
- s_ctx.create(_fontSize, _allocator);
-}
-
-void IMGUI_destroy()
-{
- s_ctx.destroy();
-}
-
-void IMGUI_beginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, int _width, int _height, char _inputChar, uint8_t _viewId)
-{
- s_ctx.beginFrame(_mx, _my, _button, _scroll, _width, _height, _inputChar, _viewId);
-}
-
-void IMGUI_endFrame()
-{
- s_ctx.endFrame();
-}
-
-namespace ImGui
-{
- void PushFont(Font::Enum _font)
- {
- PushFont(s_ctx.m_font[_font]);
- }
-} // namespace ImGui
diff --git a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.h b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.h
deleted file mode 100644
index f66372c5d6e..00000000000
--- a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright 2014-2015 Daniel Collin. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#ifndef OCORNUT_IMGUI_H_HEADER_GUARD
-#define OCORNUT_IMGUI_H_HEADER_GUARD
-
-#include <ocornut-imgui/imgui.h>
-
-namespace bx { struct AllocatorI; }
-
-void IMGUI_create(float _fontSize, bx::AllocatorI* _allocator);
-void IMGUI_destroy();
-void IMGUI_beginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, int _width, int _height, char _inputChar, uint8_t _viewId);
-void IMGUI_endFrame();
-
-#endif // OCORNUT_IMGUI_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/examples/common/imgui/scintilla.cpp b/3rdparty/bgfx/examples/common/imgui/scintilla.cpp
index b11befea857..0b881c091cb 100644
--- a/3rdparty/bgfx/examples/common/imgui/scintilla.cpp
+++ b/3rdparty/bgfx/examples/common/imgui/scintilla.cpp
@@ -104,79 +104,79 @@ public:
{
}
- virtual void Init(Scintilla::WindowID /*_wid*/) BX_OVERRIDE
+ virtual void Init(Scintilla::WindowID /*_wid*/) override
{
}
- virtual void Init(Scintilla::SurfaceID /*_sid*/, Scintilla::WindowID /*_wid*/) BX_OVERRIDE
+ virtual void Init(Scintilla::SurfaceID /*_sid*/, Scintilla::WindowID /*_wid*/) override
{
}
- virtual void InitPixMap(int /*_width*/, int /*_height*/, Scintilla::Surface* /*_surface*/, Scintilla::WindowID /*_wid*/) BX_OVERRIDE
+ virtual void InitPixMap(int /*_width*/, int /*_height*/, Scintilla::Surface* /*_surface*/, Scintilla::WindowID /*_wid*/) override
{
}
- virtual void Release() BX_OVERRIDE
+ virtual void Release() override
{
}
- virtual bool Initialised() BX_OVERRIDE
+ virtual bool Initialised() override
{
return true;
}
- virtual void PenColour(Scintilla::ColourDesired /*_fore*/) BX_OVERRIDE
+ virtual void PenColour(Scintilla::ColourDesired /*_fore*/) override
{
}
- virtual int LogPixelsY() BX_OVERRIDE
+ virtual int LogPixelsY() override
{
return 72;
}
- virtual int DeviceHeightFont(int /*points*/) BX_OVERRIDE
+ virtual int DeviceHeightFont(int /*points*/) override
{
return 1500;
}
- virtual void MoveTo(int _x, int _y) BX_OVERRIDE
+ virtual void MoveTo(int _x, int _y) override
{
BX_UNUSED(_x, _y);
}
- virtual void LineTo(int _x, int _y) BX_OVERRIDE
+ virtual void LineTo(int _x, int _y) override
{
BX_UNUSED(_x, _y);
}
- virtual void Polygon(Scintilla::Point *pts, int npts, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) BX_OVERRIDE
+ virtual void Polygon(Scintilla::Point *pts, int npts, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) override
{
BX_UNUSED(pts, npts, fore, back);
}
- virtual void RectangleDraw(Scintilla::PRectangle rc, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) BX_OVERRIDE
+ virtual void RectangleDraw(Scintilla::PRectangle rc, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) override
{
BX_UNUSED(fore);
FillRectangle(rc, back);
}
- virtual void FillRectangle(Scintilla::PRectangle rc, Scintilla::ColourDesired back) BX_OVERRIDE
+ virtual void FillRectangle(Scintilla::PRectangle rc, Scintilla::ColourDesired back) override
{
fillRectangle(rc, back);
}
- virtual void FillRectangle(Scintilla::PRectangle rc, Scintilla::Surface& surfacePattern) BX_OVERRIDE
+ virtual void FillRectangle(Scintilla::PRectangle rc, Scintilla::Surface& surfacePattern) override
{
BX_UNUSED(rc, surfacePattern);
}
- virtual void RoundedRectangle(Scintilla::PRectangle rc, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) BX_OVERRIDE
+ virtual void RoundedRectangle(Scintilla::PRectangle rc, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) override
{
BX_UNUSED(rc, fore, back);
}
- virtual void AlphaRectangle(Scintilla::PRectangle _rc, int /*_cornerSize*/, Scintilla::ColourDesired _fill, int _alphaFill, Scintilla::ColourDesired /*_outline*/, int /*_alphaOutline*/, int /*_flags*/) BX_OVERRIDE
+ virtual void AlphaRectangle(Scintilla::PRectangle _rc, int /*_cornerSize*/, Scintilla::ColourDesired _fill, int _alphaFill, Scintilla::ColourDesired /*_outline*/, int /*_alphaOutline*/, int /*_flags*/) override
{
unsigned int back = 0
| (uint32_t)( (_fill.AsLong() & 0xffffff)
@@ -187,37 +187,37 @@ public:
}
- virtual void DrawRGBAImage(Scintilla::PRectangle /*_rc*/, int /*_width*/, int /*_height*/, const unsigned char* /*_pixelsImage*/) BX_OVERRIDE
+ virtual void DrawRGBAImage(Scintilla::PRectangle /*_rc*/, int /*_width*/, int /*_height*/, const unsigned char* /*_pixelsImage*/) override
{
}
- virtual void Ellipse(Scintilla::PRectangle rc, Scintilla::ColourDesired fore, Scintilla::ColourDesired /*back*/) BX_OVERRIDE
+ virtual void Ellipse(Scintilla::PRectangle rc, Scintilla::ColourDesired fore, Scintilla::ColourDesired /*back*/) override
{
FillRectangle(rc, fore);
}
- virtual void Copy(Scintilla::PRectangle /*_rc*/, Scintilla::Point /*_from*/, Scintilla::Surface& /*_surfaceSource*/) BX_OVERRIDE
+ virtual void Copy(Scintilla::PRectangle /*_rc*/, Scintilla::Point /*_from*/, Scintilla::Surface& /*_surfaceSource*/) override
{
}
- virtual void DrawTextNoClip(Scintilla::PRectangle rc, Scintilla::Font& _font, Scintilla::XYPOSITION ybase, const char *s, int len, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) BX_OVERRIDE
+ virtual void DrawTextNoClip(Scintilla::PRectangle rc, Scintilla::Font& _font, Scintilla::XYPOSITION ybase, const char *s, int len, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) override
{
BX_UNUSED(back);
DrawTextBase(rc, _font, ybase, s, len, fore);
}
- virtual void DrawTextClipped(Scintilla::PRectangle rc, Scintilla::Font& _font, Scintilla::XYPOSITION ybase, const char *s, int len, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) BX_OVERRIDE
+ virtual void DrawTextClipped(Scintilla::PRectangle rc, Scintilla::Font& _font, Scintilla::XYPOSITION ybase, const char *s, int len, Scintilla::ColourDesired fore, Scintilla::ColourDesired back) override
{
BX_UNUSED(back);
DrawTextBase(rc, _font, ybase, s, len, fore);
}
- virtual void DrawTextTransparent(Scintilla::PRectangle rc, Scintilla::Font& _font, Scintilla::XYPOSITION ybase, const char *s, int len, Scintilla::ColourDesired fore) BX_OVERRIDE
+ virtual void DrawTextTransparent(Scintilla::PRectangle rc, Scintilla::Font& _font, Scintilla::XYPOSITION ybase, const char *s, int len, Scintilla::ColourDesired fore) override
{
DrawTextBase(rc, _font, ybase, s, len, fore);
}
- virtual void MeasureWidths(Scintilla::Font& /*_font*/, const char* _str, int _len, Scintilla::XYPOSITION* _positions) BX_OVERRIDE
+ virtual void MeasureWidths(Scintilla::Font& /*_font*/, const char* _str, int _len, Scintilla::XYPOSITION* _positions) override
{
float position = 0;
@@ -230,63 +230,63 @@ public:
}
}
- virtual Scintilla::XYPOSITION WidthText(Scintilla::Font& /*_font*/, const char* _str, int _len) BX_OVERRIDE
+ virtual Scintilla::XYPOSITION WidthText(Scintilla::Font& /*_font*/, const char* _str, int _len) override
{
ImVec2 t = ImGui::CalcTextSize(_str, _str + _len);
return t.x;
}
- virtual Scintilla::XYPOSITION WidthChar(Scintilla::Font& _font, char ch) BX_OVERRIDE
+ virtual Scintilla::XYPOSITION WidthChar(Scintilla::Font& _font, char ch) override
{
FontInt* fi = (FontInt*)_font.GetID();
return fi->m_font->GetCharAdvance( (unsigned int)ch) * fi->m_scale;
}
- virtual Scintilla::XYPOSITION Ascent(Scintilla::Font& _font) BX_OVERRIDE
+ virtual Scintilla::XYPOSITION Ascent(Scintilla::Font& _font) override
{
FontInt* fi = (FontInt*)_font.GetID();
return fi->m_font->Ascent * fi->m_scale;
}
- virtual Scintilla::XYPOSITION Descent(Scintilla::Font& _font) BX_OVERRIDE
+ virtual Scintilla::XYPOSITION Descent(Scintilla::Font& _font) override
{
FontInt* fi = (FontInt*)_font.GetID();
return -fi->m_font->Descent * fi->m_scale;
}
- virtual Scintilla::XYPOSITION InternalLeading(Scintilla::Font& /*_font*/) BX_OVERRIDE
+ virtual Scintilla::XYPOSITION InternalLeading(Scintilla::Font& /*_font*/) override
{
return 0;
}
- virtual Scintilla::XYPOSITION ExternalLeading(Scintilla::Font& /*_font*/) BX_OVERRIDE
+ virtual Scintilla::XYPOSITION ExternalLeading(Scintilla::Font& /*_font*/) override
{
return 0;
}
- virtual Scintilla::XYPOSITION Height(Scintilla::Font& _font) BX_OVERRIDE
+ virtual Scintilla::XYPOSITION Height(Scintilla::Font& _font) override
{
return Ascent(_font) + Descent(_font);
}
- virtual Scintilla::XYPOSITION AverageCharWidth(Scintilla::Font& _font) BX_OVERRIDE
+ virtual Scintilla::XYPOSITION AverageCharWidth(Scintilla::Font& _font) override
{
return WidthChar(_font, 'n');
}
- virtual void SetClip(Scintilla::PRectangle /*_rc*/) BX_OVERRIDE
+ virtual void SetClip(Scintilla::PRectangle /*_rc*/) override
{
}
- virtual void FlushCachedState() BX_OVERRIDE
+ virtual void FlushCachedState() override
{
}
- virtual void SetUnicodeMode(bool /*_unicodeMode*/) BX_OVERRIDE
+ virtual void SetUnicodeMode(bool /*_unicodeMode*/) override
{
}
- virtual void SetDBCSMode(int /*_codePage*/) BX_OVERRIDE
+ virtual void SetDBCSMode(int /*_codePage*/) override
{
}
@@ -350,11 +350,11 @@ public:
{
}
- virtual void SetFont(Scintilla::Font& /*_font*/) BX_OVERRIDE
+ virtual void SetFont(Scintilla::Font& /*_font*/) override
{
}
- virtual void Create(Scintilla::Window& /*_parent*/, int /*_ctrlID*/, Scintilla::Point _location, int _lineHeight, bool _unicodeMode, int /*_technology*/) BX_OVERRIDE
+ virtual void Create(Scintilla::Window& /*_parent*/, int /*_ctrlID*/, Scintilla::Point _location, int _lineHeight, bool _unicodeMode, int /*_technology*/) override
{
m_location = _location;
m_lineHeight = _lineHeight;
@@ -363,22 +363,22 @@ public:
wid = Scintilla::WindowID(4);
}
- virtual void SetAverageCharWidth(int width) BX_OVERRIDE
+ virtual void SetAverageCharWidth(int width) override
{
m_aveCharWidth = width;
}
- virtual void SetVisibleRows(int rows) BX_OVERRIDE
+ virtual void SetVisibleRows(int rows) override
{
m_desiredVisibleRows = rows;
}
- virtual int GetVisibleRows() const BX_OVERRIDE
+ virtual int GetVisibleRows() const override
{
return m_desiredVisibleRows;
}
- virtual Scintilla::PRectangle GetDesiredRect() BX_OVERRIDE
+ virtual Scintilla::PRectangle GetDesiredRect() override
{
Scintilla::PRectangle rc;
rc.top = 0;
@@ -388,60 +388,60 @@ public:
return rc;
}
- virtual int CaretFromEdge() BX_OVERRIDE
+ virtual int CaretFromEdge() override
{
return 4 + 16;
}
- virtual void Clear() BX_OVERRIDE
+ virtual void Clear() override
{
}
- virtual void Append(char* /*s*/, int /*type = -1*/) BX_OVERRIDE
+ virtual void Append(char* /*s*/, int /*type = -1*/) override
{
}
- virtual int Length() BX_OVERRIDE
+ virtual int Length() override
{
return 0;
}
- virtual void Select(int /*n*/) BX_OVERRIDE
+ virtual void Select(int /*n*/) override
{
}
- virtual int GetSelection() BX_OVERRIDE
+ virtual int GetSelection() override
{
return 0;
}
- virtual int Find(const char* /*prefix*/) BX_OVERRIDE
+ virtual int Find(const char* /*prefix*/) override
{
return 0;
}
- virtual void GetValue(int /*n*/, char* value, int /*len*/) BX_OVERRIDE
+ virtual void GetValue(int /*n*/, char* value, int /*len*/) override
{
value[0] = '\0';
}
- virtual void RegisterImage(int /*type*/, const char* /*xpm_data*/) BX_OVERRIDE
+ virtual void RegisterImage(int /*type*/, const char* /*xpm_data*/) override
{
}
- virtual void RegisterRGBAImage(int /*type*/, int /*width*/, int /*height*/, const unsigned char* /*pixelsImage*/) BX_OVERRIDE
+ virtual void RegisterRGBAImage(int /*type*/, int /*width*/, int /*height*/, const unsigned char* /*pixelsImage*/) override
{
}
- virtual void ClearRegisteredImages() BX_OVERRIDE
+ virtual void ClearRegisteredImages() override
{
}
- virtual void SetDoubleClickAction(Scintilla::CallBackAction, void*) BX_OVERRIDE
+ virtual void SetDoubleClickAction(Scintilla::CallBackAction, void*) override
{
}
- virtual void SetList(const char* /*list*/, char /*separator*/, char /*typesep*/) BX_OVERRIDE
+ virtual void SetList(const char* /*list*/, char /*separator*/, char /*typesep*/) override
{
}
@@ -499,7 +499,7 @@ public:
{
}
- virtual void Initialise() BX_OVERRIDE
+ virtual void Initialise() override
{
wMain = AllocateWindowInt();
@@ -560,7 +560,7 @@ public:
CaretSetPeriod(0);
}
- virtual void CreateCallTipWindow(Scintilla::PRectangle /*_rc*/) BX_OVERRIDE
+ virtual void CreateCallTipWindow(Scintilla::PRectangle /*_rc*/) override
{
if (!ct.wCallTip.Created() )
{
@@ -569,7 +569,7 @@ public:
}
}
- virtual void AddToPopUp(const char* /*_label*/, int /*_cmd*/, bool /*_enabled*/) BX_OVERRIDE
+ virtual void AddToPopUp(const char* /*_label*/, int /*_cmd*/, bool /*_enabled*/) override
{
}
@@ -581,16 +581,16 @@ public:
wMain.SetPosition(Scintilla::PRectangle::FromInts(0, 0, m_width, m_height) );
}
- virtual void SetVerticalScrollPos() BX_OVERRIDE
+ virtual void SetVerticalScrollPos() override
{
}
- virtual void SetHorizontalScrollPos() BX_OVERRIDE
+ virtual void SetHorizontalScrollPos() override
{
xOffset = 0;
}
- virtual bool ModifyScrollBars(int /*nMax*/, int /*nPage*/) BX_OVERRIDE
+ virtual bool ModifyScrollBars(int /*nMax*/, int /*nPage*/) override
{
return false;
}
@@ -599,37 +599,37 @@ public:
{
}
- virtual void Copy() BX_OVERRIDE
+ virtual void Copy() override
{
}
- virtual void Paste() BX_OVERRIDE
+ virtual void Paste() override
{
}
- virtual void NotifyChange() BX_OVERRIDE
+ virtual void NotifyChange() override
{
}
- virtual void NotifyParent(Scintilla::SCNotification /*scn*/) BX_OVERRIDE
+ virtual void NotifyParent(Scintilla::SCNotification /*scn*/) override
{
}
- virtual void CopyToClipboard(const Scintilla::SelectionText& /*selectedText*/) BX_OVERRIDE
+ virtual void CopyToClipboard(const Scintilla::SelectionText& /*selectedText*/) override
{
}
- virtual void SetMouseCapture(bool /*on*/) BX_OVERRIDE
+ virtual void SetMouseCapture(bool /*on*/) override
{
}
- virtual bool HaveMouseCapture() BX_OVERRIDE
+ virtual bool HaveMouseCapture() override
{
return false;
}
- virtual sptr_t DefWndProc(unsigned int /*iMessage*/, uptr_t /*wParam*/, sptr_t /*lParam*/) BX_OVERRIDE
+ virtual sptr_t DefWndProc(unsigned int /*iMessage*/, uptr_t /*wParam*/, sptr_t /*lParam*/) override
{
return 0;
}
diff --git a/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.bin.h b/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.bin.h
index 511d8423d2d..9383f6b3dae 100644
--- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_color.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_imgui_color_glsl[324] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x24, 0x01, 0x00, 0x00, 0x61, // wProj......$...a
0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, // ttribute highp v
0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x61, 0x74, // ec4 a_color0;.at
@@ -22,240 +22,236 @@ static const uint8_t vs_imgui_color_glsl[324] =
0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, // or0 = a_color0;.
0x7d, 0x0a, 0x0a, 0x00, // }...
};
-static const uint8_t vs_imgui_color_spv[2782] =
+static const uint8_t vs_imgui_color_spv[2716] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0xc0, 0x0a, 0x03, 0x02, 0x23, // wProj..........#
- 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, // .........Ta.....
- 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
- 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
- 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
- 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, // ................
- 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
- 0x00, 0x05, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, // .....8...Output.
- 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, // .....8.......gl_
- 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, // Position.....8..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // .....v_color0...
- 0x00, 0x05, 0x00, 0x06, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, // .........@main(v
- 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf5, 0x48, 0x00, // f4;vf3;.......H.
- 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // .a_color0.......
- 0x00, 0x2c, 0x47, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, // .,G..a_position.
- 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, // ........._varyin
- 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, // g_.......;...$Gl
- 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // obal.....;......
- 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_viewRect.....
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, // .;.......u_viewT
- 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // exel.....;......
- 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, // .u_view......;..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, // .....u_invView..
- 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .....;.......u_p
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, // roj......;......
- 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_invProj......
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .;.......u_viewP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // roj......;......
- 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .u_invViewProj..
- 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .....;.......u_m
- 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // odel.....;......
- 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, // .u_modelView....
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .;.......u_model
- 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, // ViewProj.....;..
- 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, // .....u_alphaRef4
- 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // .....B..........
- 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // ..A..a_color0...
- 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // .........a_color
- 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, // 0........,?..a_p
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, // osition.........
- 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, // .a_position.....
- 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, // .....flattenTemp
- 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // ......U..param..
- 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // .........param..
- 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, // .........@entryP
- 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, 0x6f, // ointOutput_gl_Po
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf9, 0x03, 0x00, // sition..........
- 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xf9, 0x03, 0x00, // .Output.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // .....v_color0...
- 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, // .........@entryP
- 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // ointOutput...G..
- 0x00, 0x94, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .........@...H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .;.......#......
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...;.......#..
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#... ...H...;..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .;...........H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, // .;.......#...`..
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...;..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#.......H...;..
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .;...........H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, // .;.......#......
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...;..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#... ...H...;..
- 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .;...........H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, // .;.......#...`..
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...;..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#.......H...;..
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .;...........H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, // .;.......#......
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...;..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#.......H...;..
- 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, // .;.......#... ..
- 0x00, 0x47, 0x00, 0x03, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .G...;.......G..
- 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .B...".......G..
- 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
- 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
- 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
- 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, // ................
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, // .....!..........
- 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ......... ......
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
- 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
- 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
- 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, // ................
- 0x00, 0x38, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, // .8...........!..
- 0x00, 0xc6, 0x07, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, // .....8..........
- 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38, 0x04, 0x00, // . ...........8..
- 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ......... ......
- 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, // .+..............
- 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // .+..............
- 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // ?+..............
- 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, // .,..............
- 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
- 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
- 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, // ................
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .e..............
- 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
- 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // .....j... ......
- 0x00, 0x94, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, // .....e...j......
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .;...........e..
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.......e...e..
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x42, 0x13, 0x00, // .;...;.......B..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, // .....+..........
- 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, // .e... ..........
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, // .....;..........
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, // ..... ..........
- 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, // .....;..........
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ..... ..........
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, // .....;..........
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, // ................
- 0x00, 0x20, 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x03, 0x00, // . ...v..........
- 0x00, 0x3b, 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, // .;...v..........
- 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
- 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, // .........Sa..;..
- 0x00, 0xb5, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
- 0x00, 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......U......;..
- 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, // .............=..
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......A......=..
- 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....,?......>..
- 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, // ..U...A..>......
- 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, // .,?..9...8...I&.
- 0x00, 0x0e, 0x0c, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......U......>..
- 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, // .....I&..A......
- 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .T4..........=..
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, // .........T4..>..
- 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, // .........A......
- 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .'A..........=..
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, 0x05, // .........'A..A..
- 0x00, 0x9c, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, 0x00, // ................
- 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, // .>..............
- 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x38, 0x04, 0x00, 0x00, 0x0e, 0x0c, 0x00, // .8...6...8......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .........7......
- 0x00, 0xf5, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2c, 0x47, 0x00, // ..H..7.......,G.
- 0x00, 0xf8, 0x00, 0x02, 0x00, 0x51, 0x1d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, // .....Q...;......
- 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, // .........A......
- 0x00, 0x50, 0x24, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, // .P$..........>..
- 0x00, 0x50, 0x24, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, // .P$......=......
- 0x00, 0x81, 0x29, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, // ..)..,G..O......
- 0x00, 0x2f, 0x40, 0x00, 0x00, 0x81, 0x29, 0x00, 0x00, 0x81, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, // ./@...)...).....
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6e, 0x59, 0x00, // .....Q.......nY.
- 0x00, 0x2f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // ./@......Q......
- 0x00, 0x4f, 0x5d, 0x00, 0x00, 0x2f, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, // .O]../@......P..
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0x6e, 0x59, 0x00, 0x00, 0x4f, 0x5d, 0x00, // ......B..nY..O].
- 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, // .........A......
- 0x00, 0x61, 0x23, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .a#..B.......=..
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, 0x90, 0x00, 0x05, // .e...+4..a#.....
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0x2b, 0x34, 0x00, // ......2...B..+4.
- 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x97, 0x2f, 0x00, 0x00, 0x0f, 0x12, 0x00, // .A......../.....
- 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x97, 0x2f, 0x00, 0x00, 0xd7, 0x32, 0x00, // .....>..../...2.
- 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0xf5, 0x48, 0x00, // .=........1...H.
- 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x0f, 0x12, 0x00, // .A........L.....
- 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x8e, 0x31, 0x00, // .....>....L...1.
- 0x00, 0x3d, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x30, 0x19, 0x00, 0x00, 0x0f, 0x12, 0x00, // .=...8...0......
- 0x00, 0xfe, 0x00, 0x02, 0x00, 0x30, 0x19, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .....0...8....
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x7c, 0x0a, 0x00, 0x00, 0x03, // wProj......|....
+ 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, // .#.........Ta...
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, // ................
+ 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, // ...GLSL.std.450.
+ 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, // ...........main.
+ 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, // ...............v
+ 0x13, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, // ................
+ 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, // .......main.....
+ 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, // ...8...Output...
+ 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, // ...8.......gl_Po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x01, // sition.....8....
+ 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, // ...v_color0.....
+ 0x00, 0x06, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, // .......@main(vf4
+ 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x61, // ;vf3;.......H..a
+ 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, // _color0........,
+ 0x47, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, // G..a_position...
+ 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, // ......._varying_
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, // .......;...$Glob
+ 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, // al.....;.......u
+ 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, // _viewRect......;
+ 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, // .......u_viewTex
+ 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, // el.....;.......u
+ 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, // _view......;....
+ 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, // ...u_invView....
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, // ...;.......u_pro
+ 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, // j......;.......u
+ 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, // _invProj.......;
+ 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // .......u_viewPro
+ 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, // j......;.......u
+ 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, // _invViewProj....
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // ...;.......u_mod
+ 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, // el.....;.......u
+ 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x3b, // _modelView.....;
+ 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, // .......u_modelVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0b, // ewProj.....;....
+ 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, // ...u_alphaRef4..
+ 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, // ...B............
+ 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, // A..a_color0.....
+ 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, // .......a_color0.
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, // .......,?..a_pos
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, // ition..........a
+ 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, // _position.......
+ 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, // ...flattenTemp..
+ 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, // ....U..param....
+ 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, // .......param....
+ 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, // .......@entryPoi
+ 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, // ntOutput.gl_Posi
+ 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, 0x76, 0x13, 0x00, 0x00, 0x40, // tion.......v...@
+ 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // entryPointOutput
+ 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x94, // .v_color0..G....
+ 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // .......@...H...;
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, // .......#.......H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, // ...;.......#....
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, // ...H...;........
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, // ...H...;.......#
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, // ... ...H...;....
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, // ...........H...;
+ 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...........H...;
+ 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, // .......#...`...H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ...;............
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, // ...H...;........
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, // ...H...;.......#
+ 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, // .......H...;....
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, // ...........H...;
+ 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...........H...;
+ 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, // .......#.......H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ...;............
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, // ...H...;........
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, // ...H...;.......#
+ 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, // ... ...H...;....
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, // ...........H...;
+ 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...........H...;
+ 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, // .......#...`...H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ...;............
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, // ...H...;........
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, // ...H...;.......#
+ 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, // .......H...;....
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, // ...........H...;
+ 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...........H...;
+ 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, // .......#.......H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ...;............
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, // ...H...;........
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, // ...H...;.......#
+ 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, // .......H...;....
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...........H...;
+ 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, // .......#... ...G
+ 0x00, 0x03, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, // ...;.......G...B
+ 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, // ...".......G....
+ 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, // ...........G....
+ 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, // ...........G....
+ 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, // ...........G...v
+ 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, // ................
+ 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, // ...!............
+ 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, // ....... ........
+ 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, // ........... ....
+ 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, // ................
+ 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, // ........... ....
+ 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x38, // ...............8
+ 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xc6, // ...........!....
+ 0x07, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, // ...8...........
+ 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x15, // ...........8....
+ 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, // ....... .......+
+ 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, // ...............+
+ 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, // ..............?+
+ 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, // ...............,
+ 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, // ................
+ 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, // ...........+....
+ 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, // ................
+ 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, // ...............e
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, // ................
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, // ... .......+....
+ 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x94, // ...j... ........
+ 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x3b, // ...e...j.......;
+ 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // ...........e...e
+ 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // ...e...e...e...e
+ 0x00, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, // .......e...e....
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3b, // ... ...........;
+ 0x06, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, // ...;.......B....
+ 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x06, // ...+............
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, // ... ...........e
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, // ... ............
+ 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, // ...;............
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, // ... ............
+ 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, // ...;............
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, // ... ............
+ 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x03, // ...;............
+ 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x03, // ...;.......v....
+ 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, // ...6............
+ 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, // ...........Sa..;
+ 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, // ...............;
+ 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, // ........U......;
+ 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, // ...............=
+ 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, // ........A......=
+ 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3e, // .......,?......>
+ 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, // ....U...A..>....
+ 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x49, // ...,?..9...8...I
+ 0x26, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, // &.......U......>
+ 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, // .......I&..A....
+ 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, // ...T4..........=
+ 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, // ...........T4..>
+ 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, // ...........A....
+ 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, // ....@..........=
+ 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, // ........-...@..>
+ 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, // ...v....-......8
+ 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x38, 0x04, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x00, // ...6...8........
+ 0x00, 0x00, 0x00, 0xc6, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xf5, // .......7........
+ 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0xf8, // H..7.......,G...
+ 0x00, 0x02, 0x00, 0x51, 0x1d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x0f, // ...Q...;........
+ 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x50, // .......A.......P
+ 0x24, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, // $..........>...P
+ 0x24, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x81, // $......=........
+ 0x29, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x2f, // )..,G..O......./
+ 0x40, 0x00, 0x00, 0x81, 0x29, 0x00, 0x00, 0x81, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // @...)...).......
+ 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6e, 0x59, 0x00, 0x00, 0x2f, // ...Q.......nY../
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4f, // @......Q.......O
+ 0x5d, 0x00, 0x00, 0x2f, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, // ]../@......P....
+ 0x00, 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0x6e, 0x59, 0x00, 0x00, 0x4f, 0x5d, 0x00, 0x00, 0x0c, // ....B..nY..O]...
+ 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x61, // .......A.......a
+ 0x23, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, // #..B.......=...e
+ 0x00, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, // ...+4..a#.......
+ 0x00, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x41, // ....2...B..+4..A
+ 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x97, 0x2f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, // ......../.......
+ 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x97, 0x2f, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0x3d, // ...>..../...2..=
+ 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x41, // ........1...H..A
+ 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, // ........L.......
+ 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0x8e, 0x31, 0x00, 0x00, 0x3d, // ...>....L...1..=
+ 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x30, 0x19, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, // ...8...0........
+ 0x00, 0x02, 0x00, 0x30, 0x19, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ...0...8....
};
-static const uint8_t vs_imgui_color_dx9[282] =
+static const uint8_t vs_imgui_color_dx9[284] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, 0xfc, 0x00, 0x00, 0x03, 0xfe, // wProj...........
- 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
- 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .<.......u_viewP
- 0x72, 0x6f, 0x6a, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, // roj.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....vs_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, // 0.1.............
- 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, // ................
- 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, // ................
- 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, // ...U............
- 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, // ................
- 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, // ................
- 0xe0, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, // wProj...........
+ 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, // ...L...0........
+ 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...<.......u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, // wProj...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......vs_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, // 10.1...........
+ 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, // ................
+ 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, // ................
+ 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, // .....U..........
+ 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
+ 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ............
};
-static const uint8_t vs_imgui_color_dx11[465] =
+static const uint8_t vs_imgui_color_dx11[467] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0xac, 0x01, 0x44, 0x58, 0x42, // wProj........DXB
- 0x43, 0xbc, 0xb2, 0x28, 0xa7, 0xd2, 0xab, 0xc3, 0x2f, 0xa4, 0xe4, 0xbc, 0x67, 0xff, 0xa4, 0xcf, // C..(..../...g...
- 0x66, 0x01, 0x00, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // f............,..
- 0x00, 0x7c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x48, 0x00, 0x00, // .|.......ISGNH..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........8......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, // ................
- 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .>..............
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, // .........COLOR.P
- 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, // OSITION..OSGNL..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........8......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .D..............
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, // .........SV_POSI
- 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, // TION.COLOR...SHD
- 0x52, 0xd4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x35, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, // R....@...5...Y..
- 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, // .F. ........._..
- 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, // ........._...2..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....g.... .....
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, // .....e.... .....
- 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, // .h.......8......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .....V.......F.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, // .........2......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....F. ........
- 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, // .........F......
- 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, // ...... ......F..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .....F. ........
- 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, // .6.... ......F..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x05, 0x00, 0x01, 0x00, 0x40, // .....>.........@
- 0x00, // .
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0xac, 0x01, 0x00, 0x00, 0x44, // wProj..........D
+ 0x58, 0x42, 0x43, 0xbc, 0xb2, 0x28, 0xa7, 0xd2, 0xab, 0xc3, 0x2f, 0xa4, 0xe4, 0xbc, 0x67, 0xff, // XBC..(..../...g.
+ 0xa4, 0xcf, 0x66, 0x01, 0x00, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // ..f............,
+ 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x48, // ...|.......ISGNH
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, // ...........8....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x0f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...>............
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, // ...........COLOR
+ 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x4c, // .POSITION..OSGNL
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, // ...........8....
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...D............
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, // ...........SV_PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0xab, 0xab, 0x53, // SITION.COLOR...S
+ 0x48, 0x44, 0x52, 0xd4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x35, 0x00, 0x00, 0x00, 0x59, // HDR....@...5...Y
+ 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, // ...F. ........._
+ 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, // ..........._...2
+ 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......g.... ...
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, // ...h.......8....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // .......V.......F
+ 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, // . .........2....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......F. ......
+ 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, // ...........F....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ........ ......F
+ 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // .......F. ......
+ 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
+ 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x05, 0x00, 0x01, // .......>........
+ 0x00, 0x40, 0x00, // .@.
};
static const uint8_t vs_imgui_color_mtl[674] =
{
- 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
+ 0x56, 0x53, 0x48, 0x05, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH....I...u_vie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x82, 0x02, 0x00, 0x00, 0x75, // wProj..........u
0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, // sing namespace m
0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, // etal;.struct xla
diff --git a/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.bin.h b/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.bin.h
index c381c7babca..fda39d3e965 100644
--- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_imgui_cubemap_glsl[329] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x24, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // $...attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, // ghp vec4 a_norma
@@ -22,246 +22,242 @@ static const uint8_t vs_imgui_cubemap_glsl[329] =
0x72, 0x6d, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2e, // rmal = a_normal.
0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // xyz;.}...
};
-static const uint8_t vs_imgui_cubemap_spv[2807] =
+static const uint8_t vs_imgui_cubemap_spv[2741] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0xd4, 0x0a, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, // ....#.........Ta
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0xd8, 0x0c, // in....F.........
- 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x29, 0x04, 0x00, 0x00, 0x4f, 0x75, // in........)...Ou
- 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x29, 0x04, 0x00, 0x00, 0x00, 0x00, // tput......).....
- 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, // ..gl_Position...
- 0x06, 0x00, 0x29, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, // ..).......v_norm
- 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x40, 0x6d, // al............@m
- 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, // ain(vf4;vf3;....
- 0x05, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, // ...H..a_normal..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ......,G..a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, // tion.........._v
- 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x99, 0x02, // arying_.........
- 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, // ..$Global.......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, // viewTexel.......
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
- 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
- 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, // iew.............
- 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, // ..u_proj........
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, // viewProj........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, // roj.............
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, // ..u_model.......
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
- 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.............u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
- 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..........u_alph
- 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, // aRef4.....B.....
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, // .......A..a_norm
- 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x46, 0x14, 0x00, 0x00, 0x61, 0x5f, // al........F...a_
- 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, // normal........,?
- 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, // ..a_position....
- 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ......a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, // ..........flatte
- 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, // nTemp......U..pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, // ram...........pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, // ram...........@e
- 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, // ntryPointOutput_
- 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, // gl_Position.....
- 0x04, 0x00, 0xef, 0x03, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, // ......Output....
- 0x06, 0x00, 0xef, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, // ..........v_norm
- 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, // al............@e
- 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, // ntryPointOutput.
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, // ..G...7.......@.
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..#.......H.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, // ..`...H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, // ......H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, // ..`...H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, // ......H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, // ..........H.....
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, // .. ...G.........
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...B...".....
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x46, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...F.........
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, // ..........!.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
- 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x29, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x00, // ......).........
- 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xa8, 0x07, 0x00, 0x00, 0x29, 0x04, 0x00, 0x00, 0x9a, 0x02, // ..!.......).....
- 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xa6, 0x06, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x29, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, // ..)........... .
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, // ......+.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // ......+.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, // ......+.........
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x72, 0x02, // .....?,.......r.
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, // ................
- 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, // ..e.............
- 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, // ...... .......+.
- 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, // ......j... .....
- 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, // ..7...e...j.....
- 0x0e, 0x00, 0x99, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, // ..............e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...7...e...e.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x05, 0x00, 0x00, 0x02, 0x00, // ...... .........
- 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x05, 0x00, 0x00, 0x42, 0x13, // ......;.......B.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, // ......+.......).
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, // ...... .........
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, // ..e... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x46, 0x14, // ......;.......F.
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
- 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, // ......;.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, // ......;.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xef, 0x03, 0x00, 0x00, 0x18, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x6c, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xef, 0x03, // .. ...l.........
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x6c, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, // ..;...l.........
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
- 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
- 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
- 0x04, 0x00, 0xa6, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
- 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......A..F...=.
- 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3e, 0x00, // ......,?......>.
- 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, // ...U...A..>.....
- 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x29, 0x04, 0x00, 0x00, 0x49, 0x26, // ..,?..9...)...I&
- 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // .......U......>.
- 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ......I&..A.....
- 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..T4..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, // ..........T4..>.
- 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, // ..........A.....
- 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..'A..........=.
- 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, // ..........'A..A.
- 0x05, 0x00, 0x97, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, // ................
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0xfd, 0x00, // ..>.............
- 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x29, 0x04, 0x00, 0x00, 0x0e, 0x0c, // ..8...6...).....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ..........7.....
- 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2c, 0x47, // ...H..7.......,G
- 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x51, 0x1d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xa6, 0x06, // ......Q...;.....
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, // ..........A.....
- 0x00, 0x00, 0x50, 0x24, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..P$..........>.
- 0x03, 0x00, 0x50, 0x24, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // ..P$..r...=.....
- 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..'(..,G..Q.....
- 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ...J..'(......Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x01, 0x00, // ......|W..'(....
- 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1d, 0x19, 0x00, 0x00, 0x27, 0x28, // ..Q...........'(
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf5, 0x42, // ......P........B
- 0x00, 0x00, 0xac, 0x4a, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x1d, 0x19, 0x00, 0x00, 0x8a, 0x00, // ...J..|W........
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, 0x42, 0x13, // ..A.......a#..B.
- 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2b, 0x34, // ..)...=...e...+4
- 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd7, 0x32, // ..a#...........2
- 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ...B..+4..A.....
- 0x00, 0x00, 0x97, 0x2f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, // .../..........>.
- 0x03, 0x00, 0x97, 0x2f, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // .../...2..=.....
- 0x00, 0x00, 0x51, 0x28, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, // ..Q(...H..O.....
- 0x00, 0x00, 0x96, 0x49, 0x00, 0x00, 0x51, 0x28, 0x00, 0x00, 0x51, 0x28, 0x00, 0x00, 0x00, 0x00, // ...I..Q(..Q(....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, // ..........A.....
- 0x00, 0x00, 0x73, 0x5b, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..s[..........>.
- 0x03, 0x00, 0x73, 0x5b, 0x00, 0x00, 0x96, 0x49, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x29, 0x04, // ..s[...I..=...).
- 0x00, 0x00, 0x30, 0x19, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x30, 0x19, // ..0...........0.
- 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..8....
+ 0x90, 0x0a, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ......#.........
+ 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // Ta..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main....F.......
+ 0x95, 0x15, 0x00, 0x00, 0x33, 0x13, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, // ....3...........
+ 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x29, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, // ........)...Outp
+ 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x29, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ut......).......
+ 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, // gl_Position.....
+ 0x29, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, // ).......v_normal
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // ............@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // n(vf4;vf3;......
+ 0xf5, 0x48, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, // .H..a_normal....
+ 0x05, 0x00, 0x05, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // ....,G..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, // on.........._var
+ 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ying_...........
+ 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, // $Global.........
+ 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, // ....u_viewRect..
+ 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ewTexel.........
+ 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_view......
+ 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
+ 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // w...............
+ 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, // u_proj..........
+ 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // ....u_invProj...
+ 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, 0x00, 0x00, // ewProj..........
+ 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ....u_invViewPro
+ 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // j...............
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x99, 0x02, 0x00, 0x00, // u_model.........
+ 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, // ....u_modelView.
+ 0x06, 0x00, 0x07, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, // delViewProj.....
+ 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ........u_alphaR
+ 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ef4.....B.......
+ 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, // .....A..a_normal
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x46, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x6e, 0x6f, // ........F...a_no
+ 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, // rmal........,?..
+ 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_position......
+ 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, // ....a_position..
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x33, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // 3...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, // utput.v_normal..
+ 0x47, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // G...7.......@...
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....H...........
+ 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // #.......H.......
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
+ 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // `...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x99, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
+ 0x99, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // `...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x99, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, // ........H.......
+ 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x99, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x05, 0x00, 0x99, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x99, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...G...........
+ 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...B...".......
+ 0x47, 0x00, 0x04, 0x00, 0x46, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...F...........
+ 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0x33, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...3...........
+ 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, // ........!.......
+ 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
+ 0x1e, 0x00, 0x04, 0x00, 0x29, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ....)...........
+ 0x21, 0x00, 0x05, 0x00, 0xa8, 0x07, 0x00, 0x00, 0x29, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // !.......).......
+ 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xa6, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x29, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // )........... ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, // ...?,.......r...
+ 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
+ 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
+ 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // 7...e...j.......
+ 0x99, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...7...e...e...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x99, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x05, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // ....;.......B...
+ 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // ....+.......)...
+ 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // e... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, // ....;.......F...
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0x33, 0x13, 0x00, 0x00, // ....;.......3...
+ 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
+ 0x3b, 0x00, 0x04, 0x00, 0xa6, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
+ 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x46, 0x14, 0x00, 0x00, // =........A..F...
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // =.......,?......
+ 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....U...A..>...
+ 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x29, 0x04, 0x00, 0x00, // ....,?..9...)...
+ 0x49, 0x26, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // I&.......U......
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......I&..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....T4..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // =...........T4..
+ 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x95, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // =........-...@..
+ 0x3e, 0x00, 0x03, 0x00, 0x33, 0x13, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >...3....-......
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x29, 0x04, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, // 8...6...).......
+ 0x00, 0x00, 0x00, 0x00, 0xa8, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........7.......
+ 0xf5, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, // .H..7.......,G..
+ 0xf8, 0x00, 0x02, 0x00, 0x51, 0x1d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xa6, 0x06, 0x00, 0x00, // ....Q...;.......
+ 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, // ........A.......
+ 0x50, 0x24, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // P$..........>...
+ 0x50, 0x24, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // P$..r...=.......
+ 0x27, 0x28, 0x00, 0x00, 0x2c, 0x47, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // '(..,G..Q.......
+ 0xac, 0x4a, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // .J..'(......Q...
+ 0x0d, 0x00, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....|W..'(......
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1d, 0x19, 0x00, 0x00, 0x27, 0x28, 0x00, 0x00, // Q...........'(..
+ 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf5, 0x42, 0x00, 0x00, // ....P........B..
+ 0xac, 0x4a, 0x00, 0x00, 0x7c, 0x57, 0x00, 0x00, 0x1d, 0x19, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // .J..|W..........
+ 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x61, 0x23, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A.......a#..B...
+ 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, // )...=...e...+4..
+ 0x61, 0x23, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, // a#...........2..
+ 0xf5, 0x42, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // .B..+4..A.......
+ 0x97, 0x2f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ./..........>...
+ 0x97, 0x2f, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ./...2..=.......
+ 0x51, 0x28, 0x00, 0x00, 0xf5, 0x48, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, // Q(...H..O.......
+ 0x96, 0x49, 0x00, 0x00, 0x51, 0x28, 0x00, 0x00, 0x51, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .I..Q(..Q(......
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, // ........A.......
+ 0x73, 0x5b, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // s[..........>...
+ 0x73, 0x5b, 0x00, 0x00, 0x96, 0x49, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x29, 0x04, 0x00, 0x00, // s[...I..=...)...
+ 0x30, 0x19, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x30, 0x19, 0x00, 0x00, // 0...........0...
+ 0x38, 0x00, 0x01, 0x00, 0x00, // 8....
};
-static const uint8_t vs_imgui_cubemap_dx9[311] =
+static const uint8_t vs_imgui_cubemap_dx9[313] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x14, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // ........!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
- 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x07, 0xe0, 0x05, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, // ............U...
- 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, // ................
- 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, // ................
- 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, // ................
- 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0xe0, 0x00, 0x00, // ................
- 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+ 0x14, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // ..........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, // ................
+ 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x07, 0xe0, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, // ..............U.
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, // ................
+ 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0xe0, // ................
+ 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
};
-static const uint8_t vs_imgui_cubemap_dx11[510] =
+static const uint8_t vs_imgui_cubemap_dx11[512] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0xd4, 0x01, 0x44, 0x58, 0x42, 0x43, 0x6e, 0xf2, 0xe5, 0x72, 0xab, 0xb8, 0x0f, 0x91, 0xad, 0x8f, // ..DXBCn..r......
- 0x4c, 0xdf, 0x0e, 0x04, 0x3e, 0x81, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x03, 0x00, // L...>...........
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, // ..,...|.......IS
- 0x47, 0x4e, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, // GNH...........8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......?.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x4e, 0x4f, // ..............NO
- 0x52, 0x4d, 0x41, 0x4c, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, // RMAL.POSITION.OS
- 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, // GNL...........8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......D.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x53, 0x56, // ..............SV
- 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, // _POSITION.NORMAL
- 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0xfc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x3f, 0x00, // ..SHDR....@...?.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._...r......._.
- 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, // ..r.......g....
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, // ..........e...r
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, // ......h.......8.
- 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, // ..........V.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F. .........2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
- 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..F. .........6.
- 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x00, 0x00, // ..r ......F.....
- 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x02, 0x00, 0x01, 0x00, 0x40, 0x00, // ..>.........@.
+ 0xd4, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x6e, 0xf2, 0xe5, 0x72, 0xab, 0xb8, 0x0f, 0x91, // ....DXBCn..r....
+ 0xad, 0x8f, 0x4c, 0xdf, 0x0e, 0x04, 0x3e, 0x81, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, // ..L...>.........
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, // ....,...|.......
+ 0x49, 0x53, 0x47, 0x4e, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNH...........
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // 8...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........?.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, // ................
+ 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, // NORMAL.POSITION.
+ 0x4f, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNL...........
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // 8...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........D.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, // ................
+ 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4e, 0x4f, 0x52, 0x4d, // SV_POSITION.NORM
+ 0x41, 0x4c, 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0xfc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // AL..SHDR....@...
+ 0x3f, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // ?...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...r.......
+ 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, // _...r.......g...
+ 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, // . ..........e...
+ 0x72, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, // r ......h.......
+ 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, // 8...........V...
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....F. .........
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // F.......2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....F. .........
+ 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ..... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....F. .........
+ 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, // 6...r ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x02, 0x00, 0x01, 0x00, 0x40, 0x00, // ....>.........@.
};
static const uint8_t vs_imgui_cubemap_mtl[677] =
{
- 0x56, 0x53, 0x48, 0x04, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xe3, 0xc2, 0x5c, 0x65, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....e...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x80, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/common/imgui/vs_imgui_image.bin.h b/3rdparty/bgfx/examples/common/imgui/vs_imgui_image.bin.h
index 67418cd0775..05a195cac28 100644
--- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_image.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_image.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_imgui_image_glsl[336] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x30, 0x01, 0x00, 0x00, 0x61, // wProj......0...a
0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, // ttribute highp v
0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, // ec3 a_position;.
@@ -22,242 +22,238 @@ static const uint8_t vs_imgui_image_glsl[336] =
0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x3d, 0x20, 0x61, // v_texcoord0 = a
0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _texcoord0;.}...
};
-static const uint8_t vs_imgui_image_spv[2806] =
+static const uint8_t vs_imgui_image_spv[2744] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0xd8, 0x0a, 0x03, 0x02, 0x23, // wProj..........#
- 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x37, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // .........7b.....
- 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
- 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
- 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
- 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, // ................
- 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
- 0x00, 0x05, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, // .........Output.
- 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, // .............gl_
- 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, // Position........
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, // .....v_texcoord0
- 0x00, 0x05, 0x00, 0x06, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, // .........@main(v
- 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa2, 0x3c, 0x00, // f3;vf2;.......<.
- 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, // .a_position.....
- 0x00, 0xc4, 0x1d, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, // .....a_texcoord0
- 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, // ........._varyin
- 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, // g_.......;...$Gl
- 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // obal.....;......
- 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_viewRect.....
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, // .;.......u_viewT
- 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // exel.....;......
- 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, // .u_view......;..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, // .....u_invView..
- 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .....;.......u_p
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, // roj......;......
- 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_invProj......
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .;.......u_viewP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // roj......;......
- 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .u_invViewProj..
- 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .....;.......u_m
- 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // odel.....;......
- 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, // .u_modelView....
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .;.......u_model
- 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, // ViewProj.....;..
- 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, // .....u_alphaRef4
- 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // .....B..........
- 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, // ..A..a_position.
- 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, // .........a_posit
- 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x74, // ion......,?..a_t
- 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, 0x00, // excoord0........
- 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, // .a_texcoord0....
- 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, // .....flattenTemp
- 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // ......U..param..
- 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // .........param..
- 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, // .........@entryP
- 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, 0x6f, // ointOutput_gl_Po
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe5, 0x03, 0x00, // sition..........
- 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xe5, 0x03, 0x00, // .Output.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, // .....v_texcoord0
- 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, // .........@entryP
- 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // ointOutput...G..
- 0x00, 0x94, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .........@...H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .;.......#......
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...;.......#..
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#... ...H...;..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .;...........H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, // .;.......#...`..
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...;..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#.......H...;..
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .;...........H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, // .;.......#......
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...;..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#... ...H...;..
- 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .;...........H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, // .;.......#...`..
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...;..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#.......H...;..
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .;...........H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, // .;.......#......
- 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...;..........
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...;......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...;......
- 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, // .#.......H...;..
- 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
- 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, // .;.......#... ..
- 0x00, 0x47, 0x00, 0x03, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .G...;.......G..
- 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .B...".......G..
- 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
- 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
- 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
- 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, // ................
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, // .....!..........
- 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ......... ......
- 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
- 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
- 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
- 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, // ................
- 0x00, 0x1a, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, // .............!..
- 0x00, 0x67, 0x07, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, // .g..............
- 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1a, 0x04, 0x00, // . ..............
- 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ......... ......
- 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, // .+..............
- 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
- 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x0c, 0x0a, 0x00, // .,..............
- 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, // .....+..........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, // .....+..........
- 0x00, 0x00, 0x00, 0x80, 0x3f, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // ....?....e......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, // .....+.......j..
- 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x94, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, // . ...........e..
- 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, // .j.......;......
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .....e...e...e..
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x94, 0x02, 0x00, // .e...e...e......
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // .e...e....... ..
- 0x00, 0xb8, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x3b, 0x00, 0x04, // .........;...;..
- 0x00, 0xb8, 0x08, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .....B.......+..
- 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
- 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // .........e... ..
- 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
- 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
- 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
- 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
- 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
- 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
- 0x00, 0x9b, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, // ................
- 0x00, 0xe5, 0x03, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x62, 0x06, 0x00, // ......... ...b..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0xe5, 0x03, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x62, 0x06, 0x00, // .........;...b..
- 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, // ......... ......
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
- 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
- 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, // .Sa..;..........
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, // .....;........U.
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, // .....=........A.
- 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, // .....=.......,?.
- 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, // .....>....U...A.
- 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, // .>.......,?..9..
- 0x00, 0x1a, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0xab, 0x55, 0x00, // .....I&.......U.
- 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, // .....>.......I&.
- 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, // .A.......T4.....
- 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, // .....=..........
- 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, // .T4..>..........
- 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, // .A.......'A.....
- 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, // .....=..........
- 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x92, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, // .'A..A..........
- 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, // .........>......
- 0x00, 0xdf, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .........8...6..
- 0x00, 0x1a, 0x04, 0x00, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x07, 0x00, // .............g..
- 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xa2, 0x3c, 0x00, 0x00, 0x37, 0x00, 0x03, // .7........<..7..
- 0x00, 0x90, 0x02, 0x00, 0x00, 0xc4, 0x1d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5f, 0x57, 0x00, // ............._W.
- 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, // .;..............
- 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x18, 0x2d, 0x00, 0x00, 0x0f, 0x12, 0x00, // .A........-.....
- 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x2d, 0x00, 0x00, 0x1f, 0x07, 0x00, // .....>....-.....
- 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x19, 0x00, 0x00, 0xa2, 0x3c, 0x00, // .=............<.
- 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xbe, 0x2f, 0x00, 0x00, 0x10, 0x19, 0x00, // .O......../.....
- 0x00, 0x10, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // .............Q..
- 0x00, 0x0d, 0x00, 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, 0xbe, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, // .....6b.../.....
- 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x98, 0x1b, 0x00, 0x00, 0xbe, 0x2f, 0x00, // .Q............/.
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, // .....P........2.
- 0x00, 0x36, 0x62, 0x00, 0x00, 0x98, 0x1b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, // .6b.............
- 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, // .A.......),..B..
- 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, // .....=...e....<.
- 0x00, 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, // .),...........;.
- 0x00, 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, // ..2...<..A......
- 0x00, 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, // ._8..........>..
- 0x00, 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, // ._8...;..=......
- 0x00, 0x1d, 0x21, 0x00, 0x00, 0xc4, 0x1d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, // ..!......A......
- 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, // .-<..........>..
- 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, // .-<...!..=......
- 0x00, 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, // .G:..........G:.
- 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .8....
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x98, 0x0a, 0x00, 0x00, 0x03, // wProj...........
+ 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x37, 0x62, 0x00, 0x00, 0x00, // .#.........7b...
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, // ................
+ 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, // ...GLSL.std.450.
+ 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, // ...........main.
+ 0x00, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x8b, // ................
+ 0x17, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, // ................
+ 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, // .......main.....
+ 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, // .......Output...
+ 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, // ...........gl_Po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x01, // sition..........
+ 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, // ...v_texcoord0..
+ 0x00, 0x06, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x33, // .......@main(vf3
+ 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa2, 0x3c, 0x00, 0x00, 0x61, // ;vf2;.......<..a
+ 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xc4, // _position.......
+ 0x1d, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, // ...a_texcoord0..
+ 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, // ......._varying_
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, // .......;...$Glob
+ 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, // al.....;.......u
+ 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, // _viewRect......;
+ 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, // .......u_viewTex
+ 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, // el.....;.......u
+ 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, // _view......;....
+ 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, // ...u_invView....
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, // ...;.......u_pro
+ 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, // j......;.......u
+ 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, // _invProj.......;
+ 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // .......u_viewPro
+ 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, // j......;.......u
+ 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, // _invViewProj....
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // ...;.......u_mod
+ 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, // el.....;.......u
+ 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x3b, // _modelView.....;
+ 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, // .......u_modelVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0b, // ewProj.....;....
+ 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, // ...u_alphaRef4..
+ 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, // ...B............
+ 0x41, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, // A..a_position...
+ 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // .......a_positio
+ 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, // n......,?..a_tex
+ 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x61, // coord0.........a
+ 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, // _texcoord0......
+ 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, // ...flattenTemp..
+ 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, // ....U..param....
+ 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, // .......param....
+ 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, // .......@entryPoi
+ 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, // ntOutput.gl_Posi
+ 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x40, // tion...........@
+ 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // entryPointOutput
+ 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x00, 0x00, 0x47, // .v_texcoord0...G
+ 0x00, 0x04, 0x00, 0x94, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, // ...........@...H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, // ...;.......#....
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, // ...H...;.......#
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, // .......H...;....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, // .......H...;....
+ 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...#... ...H...;
+ 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
+ 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...;...........H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, // ...;.......#...`
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, // ...H...;........
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, // .......H...;....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, // .......H...;....
+ 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...#.......H...;
+ 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
+ 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...;...........H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, // ...;.......#....
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, // ...H...;........
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, // .......H...;....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, // .......H...;....
+ 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...#... ...H...;
+ 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
+ 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...;...........H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, // ...;.......#...`
+ 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, // ...H...;........
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, // .......H...;....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, // .......H...;....
+ 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...#.......H...;
+ 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
+ 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...;...........H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, // ...;.......#....
+ 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, // ...H...;........
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, // .......H...;....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, // .......H...;....
+ 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, // ...#.......H...;
+ 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
+ 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, // ...;.......#...
+ 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, // ...G...;.......G
+ 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, // ...B...".......G
+ 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, // ...............G
+ 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, // ...............G
+ 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, // ...............G
+ 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, // ................
+ 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, // .......!........
+ 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, // ........... ....
+ 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, // ................
+ 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, // ................
+ 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, // ................
+ 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x21, // ...............!
+ 0x00, 0x05, 0x00, 0x67, 0x07, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, // ...g............
+ 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1a, // ... ............
+ 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, // ........... ....
+ 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, // ...+............
+ 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, // ...+............
+ 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x0c, // ...,............
+ 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, // .......+........
+ 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, // .......+........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, // ......?....e....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, // .......+.......j
+ 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x94, 0x02, 0x00, 0x00, 0x65, // ... ...........e
+ 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x1d, // ...j.......;....
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // .......e...e...e
+ 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x94, // ...e...e...e....
+ 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, // ...e...e.......
+ 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x3b, // ...........;...;
+ 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, // .......B.......+
+ 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, // ...........e...
+ 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, // ...............;
+ 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, // ...............;
+ 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, // ...............;
+ 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, // ...............;
+ 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, // ...............6
+ 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, // .......Sa..;....
+ 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, // ...........;....
+ 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, // ....U......;....
+ 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, // ...........=....
+ 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, // ....A......=....
+ 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, // ...,?......>....
+ 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, // U...A..>.......,
+ 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0xbc, // ?..9.......I&...
+ 0x0e, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, // ....U......>....
+ 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, // ...I&..A.......T
+ 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, // 4..........=....
+ 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, // .......T4..>....
+ 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xee, // .......A........
+ 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, // @..........=....
+ 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8b, // ....-...@..>....
+ 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, // ....-......8...6
+ 0x00, 0x05, 0x00, 0x1a, 0x04, 0x00, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, // ...............g
+ 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xa2, 0x3c, 0x00, 0x00, 0x37, // ...7........<..7
+ 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc4, 0x1d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5f, // ..............._
+ 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, // W..;............
+ 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x18, 0x2d, 0x00, 0x00, 0x0f, // ...A........-...
+ 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x2d, 0x00, 0x00, 0x1f, // .......>....-...
+ 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x19, 0x00, 0x00, 0xa2, // ...=............
+ 0x3c, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xbe, 0x2f, 0x00, 0x00, 0x10, // <..O......../...
+ 0x19, 0x00, 0x00, 0x10, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, // ...............Q
+ 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, 0xbe, 0x2f, 0x00, 0x00, 0x00, // .......6b.../...
+ 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x98, 0x1b, 0x00, 0x00, 0xbe, // ...Q............
+ 0x2f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, // /......P........
+ 0x32, 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, 0x98, 0x1b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, // 2..6b...........
+ 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, // ...A.......),..B
+ 0x13, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, // .......=...e....
+ 0x3c, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, // <..),...........
+ 0x3b, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, // ;...2...<..A....
+ 0x02, 0x00, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, // ..._8..........>
+ 0x00, 0x03, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, // ..._8...;..=....
+ 0x00, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0xc4, 0x1d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, // ....!......A....
+ 0x02, 0x00, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, // ...-<..........>
+ 0x00, 0x03, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1a, // ...-<...!..=....
+ 0x04, 0x00, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, // ...G:..........G
+ 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // :..8....
};
-static const uint8_t vs_imgui_image_dx9[282] =
+static const uint8_t vs_imgui_image_dx9[284] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, 0xfc, 0x00, 0x00, 0x03, 0xfe, // wProj...........
- 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
- 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .<.......u_viewP
- 0x72, 0x6f, 0x6a, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, // roj.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....vs_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, // 0.1.............
- 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0x80, 0x01, 0x00, 0x03, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, // ................
- 0xa0, 0x00, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, // ...U............
- 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, // ................
- 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x03, // ................
- 0xe0, 0x01, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, // wProj...........
+ 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, // ...L...0........
+ 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...<.......u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, // wProj...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......vs_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, // 10.1...........
+ 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, // ................
+ 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, // ................
+ 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, // .....U..........
+ 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
+ 0x00, 0x03, 0xe0, 0x01, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ............
};
-static const uint8_t vs_imgui_image_dx11[473] =
+static const uint8_t vs_imgui_image_dx11[475] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0xb4, 0x01, 0x44, 0x58, 0x42, // wProj........DXB
- 0x43, 0x62, 0x0c, 0x7d, 0x32, 0x98, 0x4b, 0xbb, 0x29, 0xce, 0xaa, 0xb2, 0xca, 0x5d, 0xc9, 0x55, // Cb.}2.K.)....].U
- 0xf0, 0x01, 0x00, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // .............,..
- 0x00, 0x80, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, // .........ISGNL..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........8......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, // ................
- 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .A..............
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // .........POSITIO
- 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0x4f, 0x53, 0x47, // N.TEXCOORD...OSG
- 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, // NP...........8..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....D..........
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, // .............SV_
- 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, // POSITION.TEXCOOR
- 0x44, 0x00, 0xab, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xd4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, // D....SHDR....@..
- 0x00, 0x35, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .5...Y...F. ....
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, // ....._...2......
- 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, // ._...2.......g..
- 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .. ..........e..
- 0x03, 0x32, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, // .2 ......h......
- 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, // .8...........V..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .....F. ........
- 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .2...........F.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, // .F............ .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .....F.......F.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, // .........6...2 .
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, // .....F.......>..
- 0x01, 0x00, 0x02, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // .......@.
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0xb4, 0x01, 0x00, 0x00, 0x44, // wProj..........D
+ 0x58, 0x42, 0x43, 0x62, 0x0c, 0x7d, 0x32, 0x98, 0x4b, 0xbb, 0x29, 0xce, 0xaa, 0xb2, 0xca, 0x5d, // XBCb.}2.K.)....]
+ 0xc9, 0x55, 0xf0, 0x01, 0x00, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // .U.............,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, // ...........ISGNL
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, // ...........8....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, // ................
+ 0x03, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...A............
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, // ...........POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0x4f, // ION.TEXCOORD...O
+ 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, // SGNP...........8
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......D........
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x53, // ...............S
+ 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, // V_POSITION.TEXCO
+ 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xd4, 0x00, 0x00, 0x00, 0x40, // ORD....SHDR....@
+ 0x00, 0x01, 0x00, 0x35, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, // ...5...Y...F. ..
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x00, // ......._...2....
+ 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, // ..._...2.......g
+ 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, // .... ..........e
+ 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, // ...2 ......h....
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, // ...8...........V
+ 0x15, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // .......F. ......
+ 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ...2...........F
+ 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x00, // . ..............
+ 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, // ...F............
+ 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ......F.......F
+ 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, // . .........6...2
+ 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, // ......F.......>
+ 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // .........@.
};
static const uint8_t vs_imgui_image_mtl[686] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH.o.><...u_vie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x8e, 0x02, 0x00, 0x00, 0x75, // wProj..........u
0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, // sing namespace m
0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, // etal;.struct xla
diff --git a/3rdparty/bgfx/examples/common/imgui/vs_imgui_latlong.bin.h b/3rdparty/bgfx/examples/common/imgui/vs_imgui_latlong.bin.h
index 36d9fd7b978..6e70cf9e57f 100644
--- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_latlong.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_latlong.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_imgui_latlong_glsl[337] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x2c, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ,...attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, // ghp vec3 a_posit
@@ -23,247 +23,243 @@ static const uint8_t vs_imgui_latlong_glsl[337] =
0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, // a_texcoord0;.}..
0x00, // .
};
-static const uint8_t vs_imgui_latlong_spv[2803] =
+static const uint8_t vs_imgui_latlong_spv[2741] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0xd0, 0x0a, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x36, 0x62, // ....#.........6b
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0xd8, 0x0c, // in..............
- 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x4f, 0x75, // in............Ou
- 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x00, 0x00, // tput............
- 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, // ..gl_Position...
- 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // ..........v_texc
- 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x40, 0x6d, // oord0.........@m
- 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, // ain(vf3;vf2;....
- 0x05, 0x00, 0xa2, 0x3c, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ...<..a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xc4, 0x1d, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, // ..........a_texc
- 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, // oord0........._v
- 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3b, 0x06, // arying_.......;.
- 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, // ..$Global.....;.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, // ......u_viewRect
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......;.......u_
- 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, // viewTexel.....;.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, // ......u_view....
- 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..;.......u_invV
- 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, // iew.......;.....
- 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, // ..u_proj......;.
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ......u_invProj.
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......;.......u_
- 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x3b, 0x06, // viewProj......;.
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, // ......u_invViewP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, // roj.......;.....
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, // ..u_model.....;.
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
- 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, // w.....;.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, // modelViewProj...
- 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, // ..;.......u_alph
- 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, // aRef4.....B.....
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // .......A..a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, // tion..........a_
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, // position......,?
- 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..a_texcoord0...
- 0x05, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ......a_texcoord
- 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, // 0.........flatte
- 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, // nTemp......U..pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, // ram...........pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, // ram...........@e
- 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, // ntryPointOutput_
- 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, // gl_Position.....
- 0x04, 0x00, 0xe5, 0x03, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, // ......Output....
- 0x06, 0x00, 0xe5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // ..........v_texc
- 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, // oord0.........@e
- 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, // ntryPointOutput.
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x94, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, // ..G...........@.
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...;.......#.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x01, 0x00, // ......H...;.....
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, // ..#.......H...;.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, // ..........H...;.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
- 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..;.............
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...;.........
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...;.......#.
- 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, // ..`...H...;.....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, // ..........H...;.
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, // ..........H...;.
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..;.............
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...;.........
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...;.......#.
- 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, // ......H...;.....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, // ..........H...;.
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, // ..........H...;.
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#... ...H.
- 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..;.............
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...;.........
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...;.......#.
- 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, // ..`...H...;.....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, // ..........H...;.
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, // ..........H...;.
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..;.............
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H...;.........
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...;.......#.
- 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, // ......H...;.....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, // ..........H...;.
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, // ..........H...;.
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ..;.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...;.......#.
- 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, // .. ...G...;.....
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...B...".....
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, // ..........!.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
- 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
- 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, // ................
- 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, // ................
- 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x67, 0x07, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x95, 0x02, // ..!...g.........
- 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, // ......+.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // ......+.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, // ......,.........
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // .........?....e.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
- 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x94, 0x02, // ..j... .........
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x3b, 0x06, // ..e...j.......;.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x94, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......e...e.....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3b, 0x06, // .. ...........;.
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, // ..;.......B.....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, // ..+.......).....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, // .. ...........e.
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xe5, 0x03, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x04, 0x00, 0x62, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xe5, 0x03, 0x00, 0x00, 0x3b, 0x00, // ..b...........;.
- 0x04, 0x00, 0x62, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, // ..b........... .
- 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x36, 0x00, // ..............6.
- 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, // ................
- 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, // ......Sa..;.....
- 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, // ..........;.....
- 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, // ...U......;.....
- 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // ..........=.....
- 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ...A......=.....
- 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, // ..,?......>....U
- 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, // ...A..>.......,?
- 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0xbc, 0x0e, // ..9.......I&....
- 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, // ...U......>.....
- 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, // ..I&..A.......T4
- 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..........=.....
- 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, // ......T4..>.....
- 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x27, 0x41, // ......A.......'A
- 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ..........=.....
- 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x92, 0x02, // ......'A..A.....
- 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..............>.
- 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ..............8.
- 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1a, 0x04, 0x00, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x00, 0x00, // ..6.............
- 0x00, 0x00, 0x67, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xa2, 0x3c, // ..g...7........<
- 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc4, 0x1d, 0x00, 0x00, 0xf8, 0x00, // ..7.............
- 0x02, 0x00, 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x0f, 0x12, // .._W..;.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x18, 0x2d, // ......A........-
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x2d, // ..........>....-
- 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x35, 0x62, // ......=.......5b
- 0x00, 0x00, 0xa2, 0x3c, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x3a, // ...<..Q.......;:
- 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..5b......Q.....
- 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, // ...G..5b......Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x02, 0x00, // ......+S..5b....
- 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x3b, 0x3a, // ..P........2..;:
- 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, // ...G..+S......A.
- 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, // ......),..B...).
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, // ..=...e....<..),
- 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, // ...........;...2
- 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, // ...<..A......._8
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, // ..........>..._8
- 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1d, 0x21, // ...;..=........!
- 0x00, 0x00, 0xc4, 0x1d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x2d, 0x3c, // ......A.......-<
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, // ..........>...-<
- 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x47, 0x3a, // ...!..=.......G:
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, // ..........G:..8.
- 0x01, 0x00, 0x00, // ...
+ 0x90, 0x0a, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ......#.........
+ 0x36, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // 6b..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // main............
+ 0x95, 0x15, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, // ................
+ 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, // ............Outp
+ 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ut..............
+ 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, // gl_Position.....
+ 0x1a, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ........v_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // rd0.........@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // n(vf3;vf2;......
+ 0xa2, 0x3c, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, // .<..a_position..
+ 0x05, 0x00, 0x05, 0x00, 0xc4, 0x1d, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ........a_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, // rd0........._var
+ 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, // ying_.......;...
+ 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, // $Global.....;...
+ 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, // ....u_viewRect..
+ 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....;.......u_vi
+ 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, // ewTexel.....;...
+ 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_view......
+ 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ;.......u_invVie
+ 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // w.......;.......
+ 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, // u_proj......;...
+ 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // ....u_invProj...
+ 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....;.......u_vi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x3b, 0x06, 0x00, 0x00, // ewProj......;...
+ 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ....u_invViewPro
+ 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // j.......;.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x3b, 0x06, 0x00, 0x00, // u_model.....;...
+ 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, // ....u_modelView.
+ 0x06, 0x00, 0x07, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....;.......u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, // delViewProj.....
+ 0x3b, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ;.......u_alphaR
+ 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ef4.....B.......
+ 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....A..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, // sition......,?..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....a_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, // _Position.......
+ 0x8b, 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // ....@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // utput.v_texcoord
+ 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x94, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // 0...G...........
+ 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...H...;.......
+ 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, // #.......H...;...
+ 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ....#.......H...
+ 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ;...........H...
+ 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ;.......#... ...
+ 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...;...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...;.......
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...;.......
+ 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, // #...`...H...;...
+ 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ;...........H...
+ 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // ;.......#.......
+ 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...;...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...;.......
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...;.......
+ 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, // #.......H...;...
+ 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ;...........H...
+ 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, // ;.......#... ...
+ 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...;...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...;.......
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...;.......
+ 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, // #...`...H...;...
+ 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ;...........H...
+ 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, // ;.......#.......
+ 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...;...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...;.......
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...;.......
+ 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, // #.......H...;...
+ 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ;...........H...
+ 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, // ;.......#.......
+ 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...;...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x3b, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....H...;.......
+ 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x3b, 0x06, 0x00, 0x00, // #... ...G...;...
+ 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // ....G...B..."...
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
+ 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....G...........
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, // ....G...........
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, // ............!...
+ 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
+ 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
+ 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
+ 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
+ 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x67, 0x07, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00, // ....!...g.......
+ 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // .......+.......
+ 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........+.......
+ 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, // ........,.......
+ 0x1f, 0x07, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x18, 0x00, 0x04, 0x00, // ...........?....
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
+ 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
+ 0x94, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // ....e...j.......
+ 0x3b, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ;...........e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e.......e...e...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x3b, 0x06, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // ;...;.......B...
+ 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // ....+.......)...
+ 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // e... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
+ 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
+ 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // =........A......
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // =.......,?......
+ 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....U...A..>...
+ 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, // ....,?..9.......
+ 0x49, 0x26, 0x00, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // I&.......U......
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......I&..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....T4..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // =...........T4..
+ 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x90, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // =........-...@..
+ 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >........-......
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1a, 0x04, 0x00, 0x00, 0xbc, 0x0e, 0x00, 0x00, // 8...6...........
+ 0x00, 0x00, 0x00, 0x00, 0x67, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, // ....g...7.......
+ 0xa2, 0x3c, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc4, 0x1d, 0x00, 0x00, // .<..7...........
+ 0xf8, 0x00, 0x02, 0x00, 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, // ...._W..;.......
+ 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, // ........A.......
+ 0x18, 0x2d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .-..........>...
+ 0x18, 0x2d, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // .-......=.......
+ 0x35, 0x62, 0x00, 0x00, 0xa2, 0x3c, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // 5b...<..Q.......
+ 0x3b, 0x3a, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ;:..5b......Q...
+ 0x0d, 0x00, 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .....G..5b......
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, // Q.......+S..5b..
+ 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, // ....P........2..
+ 0x3b, 0x3a, 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ;:...G..+S......
+ 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A.......),..B...
+ 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, // )...=...e....<..
+ 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, // ),...........;..
+ 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // .2...<..A.......
+ 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // _8..........>...
+ 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // _8...;..=.......
+ 0x1d, 0x21, 0x00, 0x00, 0xc4, 0x1d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, // .!......A.......
+ 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // -<..........>...
+ 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, // -<...!..=.......
+ 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, // G:..........G:..
+ 0x38, 0x00, 0x01, 0x00, 0x00, // 8....
};
-static const uint8_t vs_imgui_latlong_dx9[311] =
+static const uint8_t vs_imgui_latlong_dx9[313] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x14, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // ........!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
- 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0xe0, 0x05, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, 0x04, 0x00, // ............U...
- 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, // ................
- 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x00, 0x00, // ................
- 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, // ................
- 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x03, 0xe0, 0x01, 0x00, // ................
- 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+ 0x14, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // ..........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, // ................
+ 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0xe0, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, // ..............U.
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, // ................
+ 0x00, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x03, 0xe0, // ................
+ 0x01, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
};
-static const uint8_t vs_imgui_latlong_dx11[518] =
+static const uint8_t vs_imgui_latlong_dx11[520] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0xdc, 0x01, 0x44, 0x58, 0x42, 0x43, 0x0b, 0x6a, 0x72, 0xae, 0x8a, 0xf0, 0xc5, 0xba, 0x55, 0x23, // ..DXBC.jr.....U#
- 0xc7, 0x67, 0xc5, 0xc7, 0xe9, 0x83, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x03, 0x00, // .g..............
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
- 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, // GNL...........8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......A.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x50, 0x4f, // ..............PO
- 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // SITION.TEXCOORD.
- 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, // ..OSGNP.........
- 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, // ..8.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........D.....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0c, // ................
- 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, // ..SV_POSITION.TE
- 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xfc, 0x00, // XCOORD....SHDR..
- 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, // ..@...?...Y...F.
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, // ........._...r.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, // ......_...2.....
- 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..g.... ........
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e...2 ......h.
- 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
- 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, // ......F.......2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ........... ....
- 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..F.......F. ...
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, 0x01, 0x00, // ......6...2 ....
- 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, // ..F.......>.....
- 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ....@.
+ 0xdc, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x0b, 0x6a, 0x72, 0xae, 0x8a, 0xf0, 0xc5, 0xba, // ....DXBC.jr.....
+ 0x55, 0x23, 0xc7, 0x67, 0xc5, 0xc7, 0xe9, 0x83, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, // U#.g............
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, // ....,...........
+ 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNL...........
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // 8...............
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........A.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // ................
+ 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, // POSITION.TEXCOOR
+ 0x44, 0x00, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // D...OSGNP.......
+ 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....8...........
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, // ............D...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x03, 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, // ....SV_POSITION.
+ 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, // TEXCOORD....SHDR
+ 0xfc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, // ....@...?...Y...
+ 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // F. ........._...
+ 0x72, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, // r......._...2...
+ 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....g.... ......
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....e...2 ......
+ 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, // h.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....V.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ........2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
+ 0x06, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, // F............ ..
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....F.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, // ........6...2 ..
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, // ....F.......>...
+ 0x00, 0x02, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ......@.
};
static const uint8_t vs_imgui_latlong_mtl[685] =
{
- 0x56, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH.o.><...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x88, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.bin.h b/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.bin.h
index d3e18290318..d2a8f3748a5 100644
--- a/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_imgui_texture_glsl[419] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x83, 0x01, 0x00, 0x00, 0x61, // wProj..........a
0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, // ttribute highp v
0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x61, 0x74, // ec4 a_color0;.at
@@ -28,278 +28,276 @@ static const uint8_t vs_imgui_texture_glsl[419] =
0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, // r0 = a_color0;.}
0x0a, 0x0a, 0x00, // ...
};
-static const uint8_t vs_imgui_texture_spv[3250] =
+static const uint8_t vs_imgui_texture_spv[3212] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x94, 0x0c, 0x03, 0x02, 0x23, // wProj..........#
- 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, // .........Ta.....
- 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
- 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
- 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0a, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
- 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0xd8, 0x0c, 0x00, // ................
- 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
- 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, // n........d...Out
- 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // put......d......
- 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, // .gl_Position....
- 0x00, 0x64, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // .d.......v_color
- 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, // 0........d......
- 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, // .v_texcoord0....
- 0x00, 0xad, 0x11, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, // .....@main(vf4;v
- 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xe2, 0x2e, 0x00, // f3;vf2;.........
- 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // .a_color0.......
- 0x00, 0x2f, 0x42, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, // ./B..a_position.
- 0x00, 0x05, 0x00, 0x05, 0x00, 0x10, 0x46, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // ......F..a_texco
- 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, // ord0........._va
- 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, // rying_..........
- 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, // .$Global........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, // .....u_viewRect.
- 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .............u_v
- 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, // iewTexel........
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_view.....
- 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .........u_invVi
- 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // ew..............
- 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, // .u_proj.........
- 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .....u_invProj..
- 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .............u_v
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xdf, 0x00, 0x00, // iewProj.........
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, // .....u_invViewPr
- 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // oj..............
- 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, // .u_model........
- 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, // .....u_modelView
- 0x00, 0x06, 0x00, 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .............u_m
- 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, // odelViewProj....
- 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, // .........u_alpha
- 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, // Ref4.....B......
- 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ......A..a_color
- 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, // 0............a_c
- 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, // olor0.........?.
- 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, // .a_position.....
- 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, // .....a_position.
- 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // .....@,..a_texco
- 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, // ord0.........a_t
- 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, // excoord0........
- 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, // .flattenTemp....
- 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..U..param......
- 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..8..param......
- 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, // .....param......
- 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, // .....@entryPoint
- 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, // Output_gl_Positi
- 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, // on...........Out
- 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // put.............
- 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // .v_color0.......
- 0x00, 0x1a, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // .........v_texco
- 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, 0x6e, // ord0.........@en
- 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, // tryPointOutput..
- 0x00, 0x47, 0x00, 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, // .G...e.......@..
- 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .....H..........
- 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, // .#.......H......
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, // .........H......
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#... ...H..
- 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // ................
- 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H..............
- 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
- 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .`...H..........
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, // .........H......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, // .........H......
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
- 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // ................
- 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H..............
- 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
- 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, // .........H......
- 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, // .........H......
- 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#... ...H..
- 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // ................
- 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H..............
- 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
- 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .`...H..........
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, // .........H......
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, // .........H......
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
- 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // ................
- 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H..............
- 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
- 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, // .........H......
- 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, // .........H......
- 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
- 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // ................
- 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
- 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // . ...G..........
- 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G...B..."......
- 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G..............
- 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .G..............
- 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .G..............
- 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G..............
- 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G..............
- 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, // .........!......
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
- 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
- 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // . ..............
- 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, // . ..............
- 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, // . ..............
- 0x00, 0x1e, 0x00, 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .....d..........
- 0x00, 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x03, 0x09, 0x00, 0x00, 0x64, 0x04, 0x00, // .....!.......d..
- 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
- 0x00, 0xe1, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, // .........d......
- 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
- 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
- 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, // ............?+..
- 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, // .............,..
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, // ................
- 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
- 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, // .........,......
- 0x00, 0x1f, 0x07, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
- 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, // ................
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .e..............
- 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
- 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // .....j... ......
- 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, // .e...e...j......
- 0x00, 0xdf, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .............e..
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5c, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
- 0x00, 0xdf, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5c, 0x03, 0x00, 0x00, 0x42, 0x13, 0x00, // .....;.......B..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, // .....+..........
- 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
- 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, // .e... ..........
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, // .....;..........
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, // ..... ..........
- 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, // .....;..........
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, // ..... ..........
- 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, // .....;..........
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ..... ..........
- 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, // .....;..........
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, // ................
- 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, // ..... ..........
- 0x00, 0x1a, 0x04, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, // .....;..........
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ..... ..........
- 0x00, 0x13, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // .....6..........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, // .............Sa.
- 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, // .;..............
- 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........U.....
- 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........8.....
- 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, // .;..............
- 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, // .=........A.....
- 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, // .=........?.....
- 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, // .=.......@,.....
- 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, // .>....U...A..>..
- 0x00, 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, // ..8...?..>......
- 0x00, 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x64, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, // .@,..9...d...I&.
- 0x00, 0xad, 0x11, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, // ......U...8.....
- 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, // .>.......I&..A..
- 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, // .....T4.........
- 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, // .=...........T4.
- 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, // .>...........A..
- 0x00, 0x9a, 0x02, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, // .....'A.........
- 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, // .=...........'A.
- 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, // .A........N.....
- 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, // .....>....N.....
- 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, // .A........M.....
- 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, // .....=..........
- 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x92, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, // ..M..A..........
- 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, // .........>......
- 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .........8...6..
- 0x00, 0x64, 0x04, 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, // .d..............
- 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, // .7...........7..
- 0x00, 0x95, 0x02, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, // ...../B..7......
- 0x00, 0x10, 0x46, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x70, 0x1e, 0x00, 0x00, 0x3b, 0x00, 0x04, // ..F......p...;..
- 0x00, 0xe1, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, // .............A..
- 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbb, 0x25, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, // ......%.........
- 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbb, 0x25, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, // .>....%......A..
- 0x00, 0x90, 0x02, 0x00, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, // ......I.........
- 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, // .>....I......=..
- 0x00, 0x18, 0x00, 0x00, 0x00, 0xa0, 0x2a, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x4f, 0x00, 0x07, // ......*../B..O..
- 0x00, 0x13, 0x00, 0x00, 0x00, 0x4e, 0x41, 0x00, 0x00, 0xa0, 0x2a, 0x00, 0x00, 0xa0, 0x2a, 0x00, // .....NA...*...*.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // .........Q......
- 0x00, 0x8d, 0x5a, 0x00, 0x00, 0x4e, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // ..Z..NA......Q..
- 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6e, 0x5e, 0x00, 0x00, 0x4e, 0x41, 0x00, 0x00, 0x01, 0x00, 0x00, // .....n^..NA.....
- 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, 0x8d, 0x5a, 0x00, // .P........D...Z.
- 0x00, 0x6e, 0x5e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, // .n^..........A..
- 0x00, 0xe2, 0x02, 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x1d, 0x0a, 0x00, // ......$..B......
- 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4a, 0x35, 0x00, 0x00, 0x80, 0x24, 0x00, // .=...e...J5...$.
- 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf6, 0x33, 0x00, 0x00, 0x14, 0x44, 0x00, // ..........3...D.
- 0x00, 0x4a, 0x35, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb6, 0x30, 0x00, // .J5..A........0.
- 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb6, 0x30, 0x00, // .........>....0.
- 0x00, 0xf6, 0x33, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xad, 0x32, 0x00, // ..3..=........2.
- 0x00, 0x10, 0x46, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xbd, 0x4d, 0x00, // ..F..A........M.
- 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbd, 0x4d, 0x00, // .........>....M.
- 0x00, 0xad, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xae, 0x32, 0x00, // ..2..=........2.
- 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbe, 0x4d, 0x00, // .....A........M.
- 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x4d, 0x00, // .........>....M.
- 0x00, 0xae, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, 0xf6, 0x31, 0x00, // ..2..=...d....1.
- 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, // ..........1..8..
- 0x00, 0x00, // ..
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x6c, 0x0c, 0x00, 0x00, 0x03, // wProj......l....
+ 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, // .#.........Ta...
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, // ................
+ 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, // ...GLSL.std.450.
+ 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, // ...........main.
+ 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x95, // ................
+ 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, // ...v............
+ 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, // ...............m
+ 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, 0x4f, // ain........d...O
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x00, // utput......d....
+ 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, // ...gl_Position..
+ 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, // ...d.......v_col
+ 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x02, // or0........d....
+ 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, // ...v_texcoord0..
+ 0x00, 0x07, 0x00, 0xad, 0x11, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, // .......@main(vf4
+ 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xe2, // ;vf3;vf2;.......
+ 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, // ...a_color0.....
+ 0x00, 0x05, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // .../B..a_positio
+ 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x10, 0x46, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, // n.......F..a_tex
+ 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, // coord0........._
+ 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xdf, // varying_........
+ 0x00, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, // ...$Global......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, // .......u_viewRec
+ 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, // t..............u
+ 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, // _viewTexel......
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, // .......u_view...
+ 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, // ...........u_inv
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, // View............
+ 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, // ...u_proj.......
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, // .......u_invProj
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, // ...............u
+ 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xdf, // _viewProj.......
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, // .......u_invView
+ 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, // Proj............
+ 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xdf, // ...u_model......
+ 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, // .......u_modelVi
+ 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, // ew.............u
+ 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, // _modelViewProj..
+ 0x00, 0x06, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, // ...........u_alp
+ 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, // haRef4.....B....
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, // ........A..a_col
+ 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, // or0............a
+ 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xd9, // _color0.........
+ 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, // ?..a_position...
+ 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // .......a_positio
+ 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, // n......@,..a_tex
+ 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x61, // coord0.........a
+ 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, // _texcoord0......
+ 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, // ...flattenTemp..
+ 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, // ....U..param....
+ 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, // ....8..param....
+ 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, // .......param....
+ 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, // .......@entryPoi
+ 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, // ntOutput.gl_Posi
+ 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, 0x76, 0x13, 0x00, 0x00, 0x40, // tion.......v...@
+ 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // entryPointOutput
+ 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x8b, // .v_color0.......
+ 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, // ...@entryPointOu
+ 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, // tput.v_texcoord0
+ 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, // ...G...e.......@
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, // ...H...........#
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x01, // .......H........
+ 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, // ...#.......H....
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, // ...........H....
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, // .......#... ...H
+ 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ................
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, // ...H............
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, // ...H...........#
+ 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x03, // ...`...H........
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, // ...........H....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, // ...........H....
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, // .......#.......H
+ 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ................
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, // ...H............
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, // ...H...........#
+ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x05, // .......H........
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, // ...........H....
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, // ...........H....
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, // .......#... ...H
+ 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ................
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, // ...H............
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, // ...H...........#
+ 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x07, // ...`...H........
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, // ...........H....
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, // ...........H....
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, // .......#.......H
+ 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ................
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, // ...H............
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, // ...H...........#
+ 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x09, // .......H........
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xdf, // ...........H....
+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, // ...........H....
+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, // .......#.......H
+ 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, // ................
+ 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, // ...H...........#
+ 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x02, // ... ...G........
+ 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, // ...G...B..."....
+ 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, // ...G............
+ 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, // ...G............
+ 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, // ...G............
+ 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, // ...G............
+ 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, // ...G...v........
+ 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, // ...G............
+ 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, // ...........!....
+ 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, // ................
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, // ... ............
+ 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, // ... ............
+ 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, // ... ............
+ 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, // .......d........
+ 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x03, 0x09, 0x00, 0x00, 0x64, // .......!.......d
+ 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, // ...............
+ 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x15, // ...........d....
+ 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, // ....... .......+
+ 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, // ...............+
+ 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, // ..............?+
+ 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, // ...............,
+ 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, // ................
+ 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, // ...........+....
+ 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, // ...........,....
+ 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, // ...............+
+ 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, // ................
+ 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, // ...e............
+ 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, // ....... .......+
+ 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, // .......j... ....
+ 0x00, 0x04, 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, // ...e...e...j....
+ 0x00, 0x0e, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, // ...............e
+ 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // ...e...e...e...e
+ 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // ...e...e...e...e
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5c, 0x03, 0x00, 0x00, 0x02, // ....... ........
+ 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5c, 0x03, 0x00, 0x00, 0x42, // .......;.......B
+ 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, // .......+........
+ 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, // ....... ........
+ 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, // ...e... ........
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, // .......;........
+ 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, // ....... ........
+ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, // .......;........
+ 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, // ....... ........
+ 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, // .......;........
+ 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, // ....... ........
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, // .......;........
+ 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x76, // .......;.......v
+ 0x13, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x03, // ....... ........
+ 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x8b, // .......;........
+ 0x17, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, // .......6........
+ 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, // ...............S
+ 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, // a..;............
+ 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, // ...;........U...
+ 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, // ...;........8...
+ 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, // ...;............
+ 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, // ...=........A...
+ 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, // ...=........?...
+ 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, // ...=.......@,...
+ 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, // ...>....U...A..>
+ 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, // ....8...?..>....
+ 0x16, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x64, 0x04, 0x00, 0x00, 0x49, // ...@,..9...d...I
+ 0x26, 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, // &.......U...8...
+ 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, // ...>.......I&..A
+ 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, // .......T4.......
+ 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, // ...=...........T
+ 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, // 4..>...........A
+ 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, // ........@.......
+ 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, // ...=....... ....
+ 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, // @..>...v... ...A
+ 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, // ........@.......
+ 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, // ...=........-...
+ 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, // @..>........-...
+ 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, 0xad, // ...8...6...d....
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, // ...........7....
+ 0x02, 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2f, // .......7......./
+ 0x42, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0xf8, // B..7........F...
+ 0x00, 0x02, 0x00, 0x70, 0x1e, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x0f, // ...p...;........
+ 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbb, // .......A........
+ 0x25, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbb, // %..........>....
+ 0x25, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9b, // %......A........
+ 0x49, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9b, // I..........>....
+ 0x49, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa0, // I......=........
+ 0x2a, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x4e, // *../B..O.......N
+ 0x41, 0x00, 0x00, 0xa0, 0x2a, 0x00, 0x00, 0xa0, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // A...*...*.......
+ 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8d, 0x5a, 0x00, 0x00, 0x4e, // ...Q........Z..N
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6e, // A......Q.......n
+ 0x5e, 0x00, 0x00, 0x4e, 0x41, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, // ^..NA......P....
+ 0x00, 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, 0x8d, 0x5a, 0x00, 0x00, 0x6e, 0x5e, 0x00, 0x00, 0x0c, // ....D...Z..n^...
+ 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x80, // .......A........
+ 0x24, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, // $..B.......=...e
+ 0x00, 0x00, 0x00, 0x4a, 0x35, 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, // ...J5...$.......
+ 0x00, 0x00, 0x00, 0xf6, 0x33, 0x00, 0x00, 0x14, 0x44, 0x00, 0x00, 0x4a, 0x35, 0x00, 0x00, 0x41, // ....3...D..J5..A
+ 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb6, 0x30, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, // ........0.......
+ 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb6, 0x30, 0x00, 0x00, 0xf6, 0x33, 0x00, 0x00, 0x3d, // ...>....0...3..=
+ 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0x41, // ........2...F..A
+ 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xbd, 0x4d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, // ........M.......
+ 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbd, 0x4d, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, 0x3d, // ...>....M...2..=
+ 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xae, 0x32, 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x41, // ........2......A
+ 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbe, 0x4d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, // ........M.......
+ 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x4d, 0x00, 0x00, 0xae, 0x32, 0x00, 0x00, 0x3d, // ...>....M...2..=
+ 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, // ...d....1.......
+ 0x00, 0x02, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....1..8....
};
-static const uint8_t vs_imgui_texture_dx9[318] =
+static const uint8_t vs_imgui_texture_dx9[320] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, 0x20, 0x01, 0x00, 0x03, 0xfe, // wProj...... ....
- 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
- 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .<.......u_viewP
- 0x72, 0x6f, 0x6a, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, // roj.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....vs_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, // 0.1.............
- 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
- 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, // ................
- 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x03, 0xe0, 0x05, 0x00, 0x00, // ................
- 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, // ...........U....
- 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, // ................
- 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, // ................
- 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, // ................
- 0x02, 0x02, 0x00, 0x03, 0xe0, 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ..............
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, // wProj...... ....
+ 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, // ...L...0........
+ 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...<.......u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, // wProj...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......vs_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, // 10.1...........
+ 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, // ................
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, // ................
+ 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x03, 0xe0, 0x05, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, // .............U..
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, // ................
+ 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, // ................
+ 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, // ................
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0xe0, 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ................
};
-static const uint8_t vs_imgui_texture_dx11[575] =
+static const uint8_t vs_imgui_texture_dx11[577] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x18, 0x02, 0x44, 0x58, 0x42, // wProj........DXB
- 0x43, 0x02, 0x1b, 0xea, 0x24, 0x10, 0xd8, 0x6f, 0x23, 0xf5, 0xf6, 0x01, 0x38, 0x5b, 0x08, 0x13, // C...$..o#...8[..
- 0x4d, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // M............,..
- 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, // .........ISGNh..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, // ................
- 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .V..............
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........._......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, // ................
- 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, // .COLOR.POSITION.
- 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, // TEXCOORD.OSGNl..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........b......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, // .SV_POSITION.COL
- 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, // OR.TEXCOORD..SHD
- 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, // R....@...@...Y..
- 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, // .F. ........._..
- 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, // ........._...2..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, // ....._...2......
- 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .g.... .........
- 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.... ......e..
- 0x03, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, // .2 ......h......
- 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, // .8...........V..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .....F. ........
- 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .2...........F.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, // ................
- 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, // .F............ .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .....F.......F.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, // .........6.... .
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .....F.......6..
- 0x05, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, // .2 ......F......
- 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // .>...........@.
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x18, 0x02, 0x00, 0x00, 0x44, // wProj..........D
+ 0x58, 0x42, 0x43, 0x02, 0x1b, 0xea, 0x24, 0x10, 0xd8, 0x6f, 0x23, 0xf5, 0xf6, 0x01, 0x38, 0x5b, // XBC...$..o#...8[
+ 0x08, 0x13, 0x4d, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // ..M............,
+ 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x68, // ...........ISGNh
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...V............
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, // ..........._....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x03, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ...COLOR.POSITIO
+ 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x6c, // N.TEXCOORD.OSGNl
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, // ...........b....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, // ...SV_POSITION.C
+ 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x53, // OLOR.TEXCOORD..S
+ 0x48, 0x44, 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x59, // HDR....@...@...Y
+ 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, // ...F. ........._
+ 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, // ..........._...2
+ 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, // ......._...2....
+ 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ...g.... .......
+ 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, // ...e.... ......e
+ 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, // ...2 ......h....
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, // ...8...........V
+ 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // .......F. ......
+ 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ...2...........F
+ 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, // . ..............
+ 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, // ...F............
+ 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ......F.......F
+ 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, // . .........6....
+ 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, // ......F.......6
+ 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, // ...2 ......F....
+ 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, // ...>...........@
+ 0x00, // .
};
static const uint8_t vs_imgui_texture_mtl[778] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0xea, 0x02, 0x00, 0x00, 0x75, // wProj..........u
0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, // sing namespace m
0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, // etal;.struct xla
diff --git a/3rdparty/bgfx/examples/common/imgui/vs_ocornut_imgui.bin.h b/3rdparty/bgfx/examples/common/imgui/vs_ocornut_imgui.bin.h
index e61852a4ee4..aca91da5667 100644
--- a/3rdparty/bgfx/examples/common/imgui/vs_ocornut_imgui.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/vs_ocornut_imgui.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_ocornut_imgui_glsl[523] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0xea, 0x01, 0x00, 0x00, // wTexel..........
0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, // attribute highp
0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x61, // vec4 a_color0;.a
@@ -34,297 +34,294 @@ static const uint8_t vs_ocornut_imgui_glsl[523] =
0x20, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, // v_color0 = a_c
0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // olor0;.}...
};
-static const uint8_t vs_ocornut_imgui_spv[3459] =
+static const uint8_t vs_ocornut_imgui_spv[3421] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x64, 0x0d, 0x03, 0x02, // wTexel......d...
- 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x65, 0x61, 0x00, 0x00, 0x00, 0x00, // #.........ea....
- 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
- 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
- 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
- 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
- 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0xd8, 0x0c, // ................
- 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, 0x4f, 0x75, // in........d...Ou
- 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x00, 0x00, // tput......d.....
- 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, // ..gl_Position...
- 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ..d.......v_colo
- 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x02, 0x00, // r0........d.....
- 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
- 0x07, 0x00, 0xad, 0x11, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, // ......@main(vf4;
- 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xe2, 0x2e, // vf3;vf2;........
- 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..a_color0......
- 0x05, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ../B..a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x10, 0x46, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, // .......F..a_texc
- 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, // oord0........._v
- 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xe5, 0x10, // arying_.........
- 0x00, 0x00, 0x70, 0x6f, 0x73, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x24, 0x47, // ..pos.........$G
- 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, // lobal...........
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, // ..u_viewRect....
- 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, // Texel...........
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, // ..u_view........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, // ......u_invView.
- 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x05, 0x00, // proj............
- 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invProj.....
- 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, // Proj............
- 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // ..u_invViewProj.
- 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, // model...........
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, // ..u_modelView...
- 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
- 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, // lViewProj.......
- 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, // ......u_alphaRef
- 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // 4.....B.........
- 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ...A..a_color0..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ..........a_colo
- 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, // r0.........?..a_
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, // position........
- 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, // ..a_position....
- 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ..@,..a_texcoord
- 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, // 0.........a_texc
- 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, // oord0.........fl
- 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, // attenTemp......U
- 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, // ..param........8
- 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, // ..param.........
- 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, // ..param.........
- 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
- 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, // put_gl_Position.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // ..........Output
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, // ..............v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1a, 0x04, // color0..........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ......v_texcoord
- 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, // 0.........@entry
- 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, // PointOutput...G.
- 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, // ..........@...H.
- 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, // ..#... ...H.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, // ..........#...`.
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x04, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x04, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, // ..#.......H.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, // ..#... ...H.....
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, // ..........#...`.
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, // ..#.......H.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, // ..#.......H.....
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, // ..........#... .
- 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, // ..G...........G.
- 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..B...".......G.
- 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
- 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
- 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
- 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
- 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, // ................
- 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, // ......!.........
- 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, // .......... .....
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, // ................
- 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, // ................
- 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, // ................
- 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, // ..d.............
- 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x03, 0x09, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x9a, 0x02, // ..!.......d.....
- 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe1, 0x06, // .......... .....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, // ......d.........
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // .. .......+.....
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // .........?+.....
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, // ..........,.....
- 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, // ................
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, // ......+.........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, // ......,.........
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
- 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // .........@....e.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
- 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x08, 0x04, // ..j... .........
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x00, 0x09, // ..e...j.........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......e...e.....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7d, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x09, // .. ...}.........
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7d, 0x0b, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, // ..;...}...B.....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9d, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9d, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x1a, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x04, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x97, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, // .. .............
- 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
- 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
- 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
- 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......8......;.
- 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......A......=.
- 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......?......=.
- 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, // ......@,......>.
- 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, // ...U...A..>....8
- 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, // ...?..>.......@,
- 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x64, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0xad, 0x11, // ..9...d...I&....
- 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ...U...8......>.
- 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ......I&..A.....
- 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..T4..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, // ..........T4..>.
- 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..'A..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, // ..........'A..A.
- 0x05, 0x00, 0x9d, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, // .......N........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x41, 0x00, // ..>....N......A.
- 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, // .......M........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xc1, 0x4d, // ..=............M
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x92, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, // ..A.............
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xe0, 0x1c, // ......>.........
- 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x64, 0x04, // ......8...6...d.
- 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x37, 0x00, // ..............7.
- 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, // ..........7.....
- 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x10, 0x46, // ../B..7........F
- 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xfe, 0x1d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, // ..........;.....
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, // ..........;.....
- 0x00, 0x00, 0xe5, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x24, 0x53, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..$S..........>.
- 0x03, 0x00, 0x24, 0x53, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, // ..$S......A.....
- 0x00, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...I..........>.
- 0x03, 0x00, 0x9b, 0x49, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // ...I......=.....
- 0x00, 0x00, 0x27, 0x2f, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, // ..'/../B..O.....
- 0x00, 0x00, 0x64, 0x61, 0x00, 0x00, 0x27, 0x2f, 0x00, 0x00, 0x27, 0x2f, 0x00, 0x00, 0x00, 0x00, // ..da..'/..'/....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x9d, 0x54, // ...............T
- 0x00, 0x00, 0x64, 0x61, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, // ..da......A.....
- 0x00, 0x00, 0x27, 0x54, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..'T..B.......=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc1, 0x47, 0x00, 0x00, 0x27, 0x54, 0x00, 0x00, 0x4f, 0x00, // .......G..'T..O.
- 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x98, 0x19, 0x00, 0x00, 0xc1, 0x47, 0x00, 0x00, 0xc1, 0x47, // ...........G...G
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x13, 0x00, // ................
- 0x00, 0x00, 0xfd, 0x4c, 0x00, 0x00, 0x9d, 0x54, 0x00, 0x00, 0x98, 0x19, 0x00, 0x00, 0x3e, 0x00, // ...L...T......>.
- 0x03, 0x00, 0xe5, 0x10, 0x00, 0x00, 0xfd, 0x4c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // .......L..A.....
- 0x00, 0x00, 0xa6, 0x2a, 0x00, 0x00, 0xe5, 0x10, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...*..........=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd0, 0x37, 0x00, 0x00, 0xa6, 0x2a, 0x00, 0x00, 0x83, 0x00, // .......7...*....
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x00, 0x00, 0xd0, 0x37, 0x00, 0x00, 0x8a, 0x00, // ......u_...7....
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x66, 0x44, 0x00, 0x00, 0xe5, 0x10, // ..A.......fD....
- 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x22, 0x55, // ......=......."U
- 0x00, 0x00, 0x66, 0x44, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9e, 0x55, // ..fD...........U
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x22, 0x55, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, // ......"U..P.....
- 0x00, 0x00, 0x7e, 0x1b, 0x00, 0x00, 0x75, 0x5f, 0x00, 0x00, 0x9e, 0x55, 0x00, 0x00, 0x0c, 0x0a, // ..~...u_...U....
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x12, 0x3d, // ......A........=
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x12, 0x3d, // ..........>....=
- 0x00, 0x00, 0x7e, 0x1b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xad, 0x32, // ..~...=........2
- 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xbd, 0x4d, // ...F..A........M
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbd, 0x4d, // ..........>....M
- 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xae, 0x32, // ...2..=........2
- 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbe, 0x4d, // ......A........M
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x4d, // ..........>....M
- 0x00, 0x00, 0xae, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, 0xf6, 0x31, // ...2..=...d....1
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x38, 0x00, // ...........1..8.
- 0x01, 0x00, 0x00, // ...
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x3c, 0x0d, 0x00, 0x00, // wTexel......<...
+ 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x65, 0x61, 0x00, 0x00, // ..#.........ea..
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, // ................
+ 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, // ....GLSL.std.450
+ 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
+ 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // ................
+ 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, // ....v...........
+ 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, // main........d...
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, // Output......d...
+ 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, // ....gl_Position.
+ 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // ....d.......v_co
+ 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, // lor0........d...
+ 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....v_texcoord0.
+ 0x05, 0x00, 0x07, 0x00, 0xad, 0x11, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, // ........@main(vf
+ 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // 4;vf3;vf2;......
+ 0xe2, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // ..../B..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x10, 0x46, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, // on.......F..a_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, 0x00, 0x00, // xcoord0.........
+ 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // _varying_.......
+ 0xe5, 0x10, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // ....pos.........
+ 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // $Global.........
+ 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, // ....u_viewRect..
+ 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ewTexel.........
+ 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....u_view......
+ 0x00, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, // ........u_invVie
+ 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // w...............
+ 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // u_proj..........
+ 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // ....u_invProj...
+ 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, // ewProj..........
+ 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ....u_invViewPro
+ 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // j...............
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // u_model.........
+ 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, // ....u_modelView.
+ 0x06, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, // delViewProj.....
+ 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, // ........u_alphaR
+ 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ef4.....B.......
+ 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // .....A..a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, // ............a_co
+ 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, // lor0.........?..
+ 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_position......
+ 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, // ....a_position..
+ 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....@,..a_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, // rd0.........a_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, // xcoord0.........
+ 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, // flattenTemp.....
+ 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .U..param.......
+ 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .8..param.......
+ 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, // ....param.......
+ 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // ....@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // utput.gl_Positio
+ 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // n.......v...@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, // ryPointOutput.v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x8b, 0x17, 0x00, 0x00, // color0..........
+ 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, // @entryPointOutpu
+ 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x00, 0x00, // t.v_texcoord0...
+ 0x47, 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // G...........@...
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....H...........
+ 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // #.......H.......
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
+ 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // `...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x00, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#... ...H...
+ 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // `...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...G...........
+ 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...B...".......
+ 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...............
+ 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G...v...........
+ 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // G...............
+ 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, // ........!.......
+ 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
+ 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, // ...............
+ 0x1e, 0x00, 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....d...........
+ 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x03, 0x09, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, // ....!.......d...
+ 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
+ 0xe1, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // ........d.......
+ 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, // ...........?+...
+ 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, // ............,...
+ 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ................
+ 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
+ 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, // ........,.......
+ 0x1f, 0x07, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0x04, 0x00, // ...........@....
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
+ 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
+ 0x08, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // ....e...j.......
+ 0x00, 0x09, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e.......e...e...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7d, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...}.......
+ 0x00, 0x09, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7d, 0x0b, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // ....;...}...B...
+ 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9d, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9d, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9d, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, // ....;.......v...
+ 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
+ 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
+ 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........8......
+ 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // =........A......
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // =........?......
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // =.......@,......
+ 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....U...A..>...
+ 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, // .8...?..>.......
+ 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x64, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, // @,..9...d...I&..
+ 0xad, 0x11, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // .....U...8......
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......I&..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....T4..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // =...........T4..
+ 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // =....... ....@..
+ 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...v... ...A...
+ 0x90, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, // =........-...@..
+ 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >........-......
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, 0xad, 0x11, 0x00, 0x00, // 8...6...d.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........7.......
+ 0xe2, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, // ....7......./B..
+ 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........F......
+ 0xfe, 0x1d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // ....;...........
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe5, 0x10, 0x00, 0x00, // ....;...........
+ 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x24, 0x53, 0x00, 0x00, // ....A.......$S..
+ 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x24, 0x53, 0x00, 0x00, // ........>...$S..
+ 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9b, 0x49, 0x00, 0x00, // ....A........I..
+ 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9b, 0x49, 0x00, 0x00, // ........>....I..
+ 0x1f, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x27, 0x2f, 0x00, 0x00, // ....=.......'/..
+ 0x2f, 0x42, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x64, 0x61, 0x00, 0x00, // /B..O.......da..
+ 0x27, 0x2f, 0x00, 0x00, 0x27, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // '/..'/..........
+ 0x8e, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x9d, 0x54, 0x00, 0x00, 0x64, 0x61, 0x00, 0x00, // .........T..da..
+ 0x19, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x27, 0x54, 0x00, 0x00, // ....A.......'T..
+ 0x42, 0x13, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // B.......=.......
+ 0xc1, 0x47, 0x00, 0x00, 0x27, 0x54, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, // .G..'T..O.......
+ 0x98, 0x19, 0x00, 0x00, 0xc1, 0x47, 0x00, 0x00, 0xc1, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....G...G......
+ 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0xfd, 0x4c, 0x00, 0x00, // .............L..
+ 0x9d, 0x54, 0x00, 0x00, 0x98, 0x19, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe5, 0x10, 0x00, 0x00, // .T......>.......
+ 0xfd, 0x4c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xa6, 0x2a, 0x00, 0x00, // .L..A........*..
+ 0xe5, 0x10, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
+ 0xd0, 0x37, 0x00, 0x00, 0xa6, 0x2a, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .7...*..........
+ 0x75, 0x5f, 0x00, 0x00, 0xd0, 0x37, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // u_...7......A...
+ 0x8a, 0x02, 0x00, 0x00, 0x66, 0x44, 0x00, 0x00, 0xe5, 0x10, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, // ....fD..........
+ 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x22, 0x55, 0x00, 0x00, 0x66, 0x44, 0x00, 0x00, // =......."U..fD..
+ 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9e, 0x55, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // .........U......
+ 0x22, 0x55, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7e, 0x1b, 0x00, 0x00, // "U..P.......~...
+ 0x75, 0x5f, 0x00, 0x00, 0x9e, 0x55, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // u_...U..........
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x12, 0x3d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A........=......
+ 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x12, 0x3d, 0x00, 0x00, 0x7e, 0x1b, 0x00, 0x00, // ....>....=..~...
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, // =........2...F..
+ 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xbd, 0x4d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A........M......
+ 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbd, 0x4d, 0x00, 0x00, 0xad, 0x32, 0x00, 0x00, // ....>....M...2..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xae, 0x32, 0x00, 0x00, 0xe2, 0x2e, 0x00, 0x00, // =........2......
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbe, 0x4d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A........M......
+ 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x4d, 0x00, 0x00, 0xae, 0x32, 0x00, 0x00, // ....>....M...2..
+ 0x3d, 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // =...d....1......
+ 0xfe, 0x00, 0x02, 0x00, 0xf6, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .....1..8....
};
-static const uint8_t vs_ocornut_imgui_dx9[359] =
+static const uint8_t vs_ocornut_imgui_dx9[361] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x48, 0x01, 0x00, 0x03, // wTexel......H...
- 0xfe, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, // .... .CTAB....S.
- 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
- 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, // ..L...0.........
- 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..<.......u_view
- 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, // Texel...........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......vs_3_0.Mic
- 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
- 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
- 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, // 10.1..Q.........
- 0x00, 0x40, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, // .@.......?......
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
- 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
- 0x00, 0x80, 0x02, 0x00, 0x03, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, // ................
- 0xe4, 0xa0, 0x01, 0x00, 0xe4, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ........U.......
- 0x02, 0xe0, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0x00, 0xa1, 0x01, 0x00, 0xaa, 0xa0, 0x01, 0x00, // ....U...........
- 0x00, 0x02, 0x00, 0x00, 0x0c, 0xe0, 0x01, 0x00, 0xb4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0xe0, 0x02, 0x00, // ................
- 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x48, 0x01, 0x00, 0x00, // wTexel......H...
+ 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, // ...... .CTAB....
+ 0x53, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, // S...............
+ 0x00, 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....L...0.......
+ 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....<.......u_vi
+ 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, // ewTexel.........
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, // ........vs_3_0.M
+ 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, // icrosoft (R) HLS
+ 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, // L Shader Compile
+ 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, // r 10.1..Q.......
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, // ...@.......?....
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x03, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, // ................
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xe4, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0xe0, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, // ..........U.....
+ 0x00, 0x00, 0x02, 0xe0, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0x00, 0xa1, 0x01, 0x00, 0xaa, 0xa0, // ......U.........
+ 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0c, 0xe0, 0x01, 0x00, 0xb4, 0xa0, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0xe0, // ................
+ 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
};
-static const uint8_t vs_ocornut_imgui_dx11[612] =
+static const uint8_t vs_ocornut_imgui_dx11[614] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3c, 0x02, 0x44, 0x58, // wTexel......<.DX
- 0x42, 0x43, 0x22, 0x5c, 0xcc, 0x36, 0x58, 0xb2, 0x23, 0x45, 0x8a, 0x2b, 0xbd, 0x13, 0xac, 0xf2, // BC"..6X.#E.+....
- 0xa4, 0x09, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // ......<.......,.
- 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, // ..........ISGNh.
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, // ................
- 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ..V.............
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, // .........._.....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, // ................
- 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, // ..COLOR.POSITION
- 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, // .TEXCOORD.OSGNl.
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
- 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........b.....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x0c, // ................
- 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
- 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, // LOR.TEXCOORD..SH
- 0x44, 0x52, 0x24, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x49, 0x00, 0x00, 0x00, 0x59, 0x00, // DR$...@...I...Y.
- 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, // ..F. ........._.
- 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, // .........._...2.
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, // ......_...2.....
- 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..g.... ........
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e.... ......e.
- 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, // ..2 ......h.....
- 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, 0xc2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, // ..6.... .......@
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x80, 0x3f, 0x38, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, // .?8...2.......F.
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F. .......
- 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x12, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, // ..2.... ........
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x40, // .......@.....@.@
- 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x32, 0x00, 0x00, 0x0a, 0x22, 0x20, 0x10, 0x00, 0x00, 0x00, // ......2..." ....
- 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, // ......A........@
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x36, 0x00, // .....@.@.....?6.
- 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x10, // ..6...2 ......F.
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, // ......>.........
- 0x10, 0x00, 0x10, 0x00, // ....
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3c, 0x02, 0x00, 0x00, // wTexel......<...
+ 0x44, 0x58, 0x42, 0x43, 0x22, 0x5c, 0xcc, 0x36, 0x58, 0xb2, 0x23, 0x45, 0x8a, 0x2b, 0xbd, 0x13, // DXBC"..6X.#E.+..
+ 0xac, 0xf2, 0xa4, 0x09, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ........<.......
+ 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, // ,...........ISGN
+ 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, // h...........P...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....V...........
+ 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, // ............_...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
+ 0x03, 0x03, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, // ....COLOR.POSITI
+ 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x4e, // ON.TEXCOORD.OSGN
+ 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, // l...........P...
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, // ............b...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
+ 0x03, 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, // ....SV_POSITION.
+ 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, // COLOR.TEXCOORD..
+ 0x53, 0x48, 0x44, 0x52, 0x24, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x49, 0x00, 0x00, 0x00, // SHDR$...@...I...
+ 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // Y...F. .........
+ 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _..........._...
+ 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, // 2......._...2...
+ 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....g.... ......
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....e.... ......
+ 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, // e...2 ......h...
+ 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, 0xc2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....6.... ......
+ 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .@..............
+ 0x00, 0x00, 0x80, 0x3f, 0x38, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...?8...2.......
+ 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // F.......F. .....
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x12, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....2.... ......
+ 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, // .........@.....@
+ 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x32, 0x00, 0x00, 0x0a, 0x22, 0x20, 0x10, 0x00, // .@......2..." ..
+ 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........A.......
+ 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, // .@.....@.@.....?
+ 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // 6.... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....6...2 ......
+ 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, // F.......>.......
+ 0x01, 0x00, 0x10, 0x00, 0x10, 0x00, // ......
};
static const uint8_t vs_ocornut_imgui_mtl[880] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x4f, 0x03, 0x00, 0x00, // wTexel......O...
0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, // using namespace
0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, // metal;.struct xl
diff --git a/3rdparty/bgfx/examples/common/nanovg/fs_nanovg_fill.bin.h b/3rdparty/bgfx/examples/common/nanovg/fs_nanovg_fill.bin.h
index 1a0540fa4b7..cba255fac8f 100644
--- a/3rdparty/bgfx/examples/common/nanovg/fs_nanovg_fill.bin.h
+++ b/3rdparty/bgfx/examples/common/nanovg/fs_nanovg_fill.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_nanovg_fill_glsl[2928] =
{
- 0x46, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x08, 0x00, 0x0c, 0x75, 0x5f, 0x73, 0x63, 0x69, // FSH........u_sci
+ 0x46, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x08, 0x00, 0x0c, 0x75, 0x5f, 0x73, 0x63, 0x69, // FSH........u_sci
0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x03, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, // ssorMat.......u_
0x70, 0x61, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x03, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x75, // paintMat.......u
0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, // _innerCol.......
@@ -184,9 +184,9 @@ static const uint8_t fs_nanovg_fill_glsl[2928] =
0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, // . gl_FragColor
0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // = result_1;.}...
};
-static const uint8_t fs_nanovg_fill_spv[9799] =
+static const uint8_t fs_nanovg_fill_spv[10317] =
{
- 0x46, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x07, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x46, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x07, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x70, 0x61, 0x69, 0x6e, // ams.......u_pain
0x74, 0x4d, 0x61, 0x74, 0x13, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0e, 0x75, 0x5f, 0x65, 0x78, 0x74, // tMat.......u_ext
0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, // entRadius.......
@@ -194,615 +194,647 @@ static const uint8_t fs_nanovg_fill_spv[9799] =
0x0a, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x12, 0x01, 0x00, 0x00, 0x01, // .u_outerCol.....
0x00, 0x0c, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x13, 0x01, // ..u_scissorMat..
0x00, 0x00, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x45, 0x78, // .....u_scissorEx
- 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x25, 0x03, 0x02, // tScale.......%..
- 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0xab, 0x62, 0x00, 0x00, 0x00, 0x00, // #..........b....
- 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
- 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
- 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
- 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
- 0x00, 0x00, 0xc1, 0x12, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ......t.........
- 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
- 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, // ..main........a.
- 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, // ..BgfxSampler2D.
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, // ......a.......m_
- 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, // sampler.......a.
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, // ......m_texture.
- 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, // ..........bgfxTe
- 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, // xture2D(struct-B
- 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, // gfxSampler2D-p1-
- 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x0e, // t211;vf2;.....'.
- 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // .._sampler......
- 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, // ......_coord....
- 0x07, 0x00, 0xd2, 0x0c, 0x00, 0x00, 0x6d, 0x69, 0x78, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, // ......mix(vf4;vf
- 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc6, 0x0e, // 4;vf4;..........
- 0x00, 0x00, 0x5f, 0x61, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x5f, 0x62, // .._a.........._b
- 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x5f, 0x74, 0x00, 0x00, 0x05, 0x00, // .........._t....
- 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, // ..5...vec4_splat
- 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, // (f1;.........._x
- 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x91, 0x0e, 0x00, 0x00, 0x73, 0x64, 0x72, 0x6f, 0x75, 0x6e, // ..........sdroun
- 0x64, 0x72, 0x65, 0x63, 0x74, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x66, 0x31, // drect(vf2;vf2;f1
- 0x3b, 0x00, 0x05, 0x00, 0x03, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x70, 0x74, 0x00, 0x00, 0x05, 0x00, // ;......>..pt....
- 0x03, 0x00, 0x40, 0x0d, 0x00, 0x00, 0x65, 0x78, 0x74, 0x00, 0x05, 0x00, 0x03, 0x00, 0x4d, 0x17, // ..@...ext.....M.
- 0x00, 0x00, 0x72, 0x61, 0x64, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x73, 0x63, // ..rad.........sc
- 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x73, 0x6b, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, // issorMask(vf2;..
- 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc2, 0x10, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, // ..........p.....
- 0x06, 0x00, 0xe2, 0x0b, 0x00, 0x00, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x4d, 0x61, 0x73, 0x6b, // ......strokeMask
- 0x28, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1c, 0x12, 0x00, 0x00, 0x5f, 0x74, // (vf2;........._t
- 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x20, 0x14, // excoord....... .
- 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x32, 0x3b, // ..@main(vf2;vf2;
- 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xc2, 0x1a, 0x00, 0x00, 0x76, 0x5f, // vf4;..........v_
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x09, 0x40, // position.......@
- 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
- 0x06, 0x00, 0x46, 0x51, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ..FQ..gl_FragDat
- 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xfe, 0x0e, 0x00, 0x00, 0x73, 0x5f, // a_0_..........s_
- 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x73, 0x5f, // tex...........s_
- 0x74, 0x65, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // texSampler......
- 0x06, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, // ..K...s_texTextu
- 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x65, 0x78, // re............ex
- 0x74, 0x32, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdf, 0x55, 0x00, 0x00, 0x64, 0x00, // t2.........U..d.
- 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x0a, 0x17, 0x00, 0x00, 0x73, 0x63, 0x00, 0x00, 0x05, 0x00, // ..........sc....
- 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ......$Global...
- 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x01, 0x00, // Rect............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
- 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xff, 0x0a, // invView.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
- 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..........u_invP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x06, 0x00, // roj.............
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
- 0x07, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xff, 0x0a, // iewProj.........
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
- 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
- 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0a, 0x00, // lView...........
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
- 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.............u_
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x07, 0x00, 0xff, 0x0a, // alphaRef4.......
- 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, // ......u_scissorM
- 0x61, 0x74, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0d, 0x00, // at..............
- 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x00, 0x00, 0x06, 0x00, // ..u_paintMat....
- 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, // ..........u_inne
- 0x72, 0x43, 0x6f, 0x6c, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0f, 0x00, // rCol............
- 0x00, 0x00, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x00, 0x00, 0x06, 0x00, // ..u_outerCol....
- 0x08, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, // ..........u_scis
- 0x73, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x06, 0x00, // sorExtScale.....
- 0x07, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, // ..........u_exte
- 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xff, 0x0a, // ntRadius........
- 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, // ......u_params..
- 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ......B.........
- 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, // ......bgfx_VoidF
- 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1e, 0x4b, 0x00, 0x00, 0x70, 0x61, // rag........K..pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x60, 0x0d, 0x00, 0x00, 0x73, 0x63, // ram.......`...sc
- 0x69, 0x73, 0x73, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x04, 0x00, 0x3f, 0x27, 0x00, 0x00, 0x70, 0x61, // issor.....?'..pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x38, 0x17, 0x00, 0x00, 0x73, 0x74, // ram.......8...st
- 0x72, 0x6f, 0x6b, 0x65, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x05, 0x00, 0x04, 0x00, 0x40, 0x27, // rokeAlpha.....@'
- 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xeb, 0x21, // ..param........!
- 0x00, 0x00, 0x70, 0x74, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xb6, 0x10, 0x00, 0x00, 0x64, 0x00, // ..pt..........d.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x41, 0x27, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......A'..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x42, 0x27, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......B'..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x43, 0x27, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......C'..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x44, 0x27, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // ......D'..color.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x45, 0x27, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......E'..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x46, 0x27, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......F'..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x47, 0x27, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ......G'..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, // ..........result
- 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x0b, 0x17, 0x00, 0x00, 0x70, 0x74, 0x00, 0x00, 0x05, 0x00, // ..........pt....
- 0x04, 0x00, 0x48, 0x27, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, // ..H'..color.....
- 0x04, 0x00, 0x49, 0x27, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ..I'..param.....
- 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, // ......color.....
- 0x04, 0x00, 0x12, 0x25, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ...%..param.....
- 0x05, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ...A..v_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xc1, 0x12, 0x00, 0x00, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ..........v_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, // tion.......<..v_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, // texcoord0.....t.
- 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
- 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ......gl_FragDat
- 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, // a_0_.......G..pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, // ram........U..pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, // ram...........pa
- 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, // ram...........gl
- 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, // _FragData_0_..G.
- 0x04, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......".......G.
- 0x04, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......!.......G.
- 0x04, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..K...".......G.
- 0x04, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..K...!.......G.
- 0x04, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, // ..........@...H.
- 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x02, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x02, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, // ..#... ...H.....
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, // ..........#...`.
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x04, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x04, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, // ..#.......H.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x06, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x06, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, // ..#... ...H.....
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, // ..........#...`.
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x08, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x08, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, // ..#.......H.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0a, 0x00, // ......H.........
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0a, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, // ..#.......H.....
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, // ..........#... .
- 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0c, 0x00, // ..0...H.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xff, 0x0a, // ..........H.....
- 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, // ..........H.....
- 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x0a, 0x00, 0x00, 0x48, 0x00, // ......#...`...H.
- 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x0f, 0x00, // ......H.........
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, // ..#.......H.....
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xb0, 0x0a, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xc0, 0x0a, // ..........#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
- 0x00, 0x00, 0xd0, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x02, 0x00, // ......G.........
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G...B...".....
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc1, 0x12, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, // ..G...t.........
- 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // ..G.............
- 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, // ..........!.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, // ................
- 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, // ...... .........
- 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, // ................
- 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, // ..a........... .
- 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x17, 0x00, // ..........a.....
- 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, // ................
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
- 0x05, 0x00, 0xc2, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x90, 0x02, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9a, 0x02, // ..!.............
- 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, // .......... .....
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, // ..........!.....
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0xc8, 0x0b, // ..........!.....
- 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8a, 0x02, // ................
- 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x02, // ..!.............
- 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x90, 0x02, // ..!...K.........
- 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, // ..........;.....
- 0x00, 0x00, 0xfe, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, // .......... ...y.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, // ..........;...y.
- 0x00, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, // .......... .....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, // ..........;.....
- 0x00, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..K.............
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // .. .......+.....
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, // ................
- 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, // ......+.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, // ......+.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // ......+.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, // ......,.........
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........+.....
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, // .........?......
- 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // ..........+.....
- 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x06, 0x0b, // ..j... .........
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x46, 0x00, // ..e...j.......F.
- 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x15, 0x00, 0xff, 0x0a, // ................
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......e...e.....
- 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..F...F.........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
- 0x04, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x3b, 0x00, // ..............;.
- 0x04, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, // ......B.......+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, // ....../....... .
- 0x04, 0x00, 0xc3, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..........F...+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x0a, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, // ......;....... .
- 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2c, 0x00, // .............?,.
- 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x00, // ................
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x00, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x12, 0x00, // .@+.......A.....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, // ..+.............
- 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
- 0x00, 0x00, 0x32, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..2.......+.....
- 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // ..>.......+.....
- 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
- 0x00, 0x00, 0x35, 0x0a, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..5.......+.....
- 0x00, 0x00, 0x38, 0x0a, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, // ..8.......,.....
- 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, // ................
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa2, 0x0b, // ......+.........
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, // ....@@ .........
- 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0xc1, 0x12, // ......;.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, // ......;.......t.
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, // ......;.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, // ......6.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, // ..............Sa
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, // ..;........G....
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, // ..;........U....
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, // ..;.............
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x0f, 0x0d, // ..=.......!C....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x4b, 0x0f, // ..=........3..K.
- 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, 0x21, 0x43, // ..P...a.... ..!C
- 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xfe, 0x0e, 0x00, 0x00, 0x12, 0x20, // ...3..>........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, 0xc1, 0x12, // ..=........A....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, // ..=........<..t.
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x3e, 0x00, // ..>....G...A..>.
- 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, // ...U...<..9.....
- 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x20, 0x14, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xab, 0x55, // ...&.. ....G...U
- 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, // ......=.........
- 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, // ......>.........
- 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ......8...6.....
- 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x03, 0x00, 0x00, 0x37, 0x00, // ..............7.
- 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, // ......'...7.....
- 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xcd, 0x5b, 0x00, 0x00, 0x41, 0x00, // ...........[..A.
- 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x0e, 0x0a, // ......i$..'.....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, 0x69, 0x24, // ..=........1..i$
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, 0x27, 0x0e, // ..A...y...TD..'.
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x9b, 0x56, // ......=........V
- 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xc9, 0x42, // ..TD..V........B
- 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ...1...V..=.....
- 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, // ..6.......W.....
- 0x00, 0x00, 0xa4, 0x51, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0xfe, 0x00, // ...Q...B..6.....
- 0x02, 0x00, 0xa4, 0x51, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, // ...Q..8...6.....
- 0x00, 0x00, 0xd2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x37, 0x00, // ..............7.
- 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ..........7.....
- 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xd9, 0x0e, // ......7.........
- 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x4e, 0x50, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ......NP..=.....
- 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..).......=.....
- 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..??......=.....
- 0x00, 0x00, 0x46, 0x3e, 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x1d, 0x00, // ..F>............
- 0x00, 0x00, 0xcd, 0x42, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x29, 0x1a, // ...B..........).
- 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00, 0x46, 0x3e, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xcd, 0x42, // ..??..F>.......B
- 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, // ..8...6.......5.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
- 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x02, 0x2d, 0x00, 0x00, 0x3d, 0x00, // ...........-..=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1e, 0x5e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......^......=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x55, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......cU......=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xca, 0x26, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......&......=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xdd, 0x26, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......&......P.
- 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2a, 0x29, 0x00, 0x00, 0x1e, 0x5e, 0x00, 0x00, 0x63, 0x55, // ......*)...^..cU
- 0x00, 0x00, 0xca, 0x26, 0x00, 0x00, 0xdd, 0x26, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x2a, 0x29, // ...&...&......*)
- 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x91, 0x0e, // ..8...6.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, // ..........7.....
- 0x00, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x40, 0x0d, // ...>..7.......@.
- 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x17, 0x00, 0x00, 0xf8, 0x00, // ..7.......M.....
- 0x02, 0x00, 0x16, 0x1c, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xdf, 0x55, // ......;........U
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x93, 0x59, // ......=........Y
- 0x00, 0x00, 0x40, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbb, 0x22, // ..@...=........"
- 0x00, 0x00, 0x4d, 0x17, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfa, 0x1f, // ..M...=.........
- 0x00, 0x00, 0x4d, 0x17, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0xb5, 0x36, // ..M...P........6
- 0x00, 0x00, 0xbb, 0x22, 0x00, 0x00, 0xfa, 0x1f, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x13, 0x00, // ..."............
- 0x00, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x93, 0x59, 0x00, 0x00, 0xb5, 0x36, 0x00, 0x00, 0x3d, 0x00, // .......Y...6..=.
- 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xaa, 0x62, 0x00, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x0c, 0x00, // .......b...>....
- 0x06, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd8, 0x5d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, // .......]........
- 0x00, 0x00, 0xaa, 0x62, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x2a, // ...b.......... *
- 0x00, 0x00, 0xd8, 0x5d, 0x00, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xdf, 0x55, // ...]......>....U
- 0x00, 0x00, 0x20, 0x2a, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x65, 0x1d, // .. *..A.......e.
- 0x00, 0x00, 0xdf, 0x55, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ...U......=.....
- 0x00, 0x00, 0x10, 0x62, 0x00, 0x00, 0x65, 0x1d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ...b..e...A.....
- 0x00, 0x00, 0xb8, 0x45, 0x00, 0x00, 0xdf, 0x55, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...E...U......=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x78, 0x32, 0x00, 0x00, 0xb8, 0x45, 0x00, 0x00, 0x0c, 0x00, // ......x2...E....
- 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x52, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, // .......R......(.
- 0x00, 0x00, 0x10, 0x62, 0x00, 0x00, 0x78, 0x32, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, // ...b..x2........
- 0x00, 0x00, 0x57, 0x41, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x52, // ..WA......%....R
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x91, 0x41, // ......=........A
- 0x00, 0x00, 0xdf, 0x55, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x5a, 0x22, // ...U..........Z"
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x91, 0x41, 0x00, 0x00, 0x1f, 0x07, // ......(....A....
- 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb2, 0x4a, 0x00, 0x00, 0x01, 0x00, // ...........J....
- 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x5a, 0x22, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..B...Z"........
- 0x00, 0x00, 0x10, 0x5b, 0x00, 0x00, 0x57, 0x41, 0x00, 0x00, 0xb2, 0x4a, 0x00, 0x00, 0x3d, 0x00, // ...[..WA...J..=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x53, 0x5a, 0x00, 0x00, 0x4d, 0x17, 0x00, 0x00, 0x83, 0x00, // ......SZ..M.....
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa4, 0x59, 0x00, 0x00, 0x10, 0x5b, 0x00, 0x00, 0x53, 0x5a, // .......Y...[..SZ
- 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xa4, 0x59, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // .......Y..8...6.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, // ................
- 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc2, 0x10, 0x00, 0x00, 0xf8, 0x00, // ..7.............
- 0x02, 0x00, 0x0d, 0x36, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0a, 0x17, // ...6..;.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x72, 0x57, // ......=.......rW
- 0x00, 0x00, 0xc2, 0x10, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x3d, // ......Q........=
- 0x00, 0x00, 0x72, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..rW......Q.....
- 0x00, 0x00, 0xcb, 0x46, 0x00, 0x00, 0x72, 0x57, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, // ...F..rW......P.
- 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0xb4, 0x32, 0x00, 0x00, 0x81, 0x3d, 0x00, 0x00, 0xcb, 0x46, // .......2...=...F
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xc3, 0x02, 0x00, 0x00, 0x59, 0x2c, // ......A.......Y,
- 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x46, 0x00, // ..B.../...=...F.
- 0x00, 0x00, 0xf4, 0x24, 0x00, 0x00, 0x59, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x18, 0x00, // ...$..Y,........
- 0x00, 0x00, 0xa7, 0x2e, 0x00, 0x00, 0xb4, 0x32, 0x00, 0x00, 0xf4, 0x24, 0x00, 0x00, 0x4f, 0x00, // .......2...$..O.
- 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xba, 0x57, 0x00, 0x00, 0xa7, 0x2e, 0x00, 0x00, 0xa7, 0x2e, // .......W........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x13, 0x00, // ................
- 0x00, 0x00, 0x45, 0x52, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xba, 0x57, // ..ER...........W
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x19, 0x25, 0x00, 0x00, 0x42, 0x13, // ..A........%..B.
- 0x00, 0x00, 0x3b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x05, 0x4e, // ..;...=........N
- 0x00, 0x00, 0x19, 0x25, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x11, 0x54, // ...%..O........T
- 0x00, 0x00, 0x05, 0x4e, 0x00, 0x00, 0x05, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ...N...N........
- 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd4, 0x30, 0x00, 0x00, 0x45, 0x52, // ...........0..ER
- 0x00, 0x00, 0x11, 0x54, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0a, 0x17, 0x00, 0x00, 0xd4, 0x30, // ...T..>........0
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x98, 0x40, 0x00, 0x00, 0x0a, 0x17, // ..=........@....
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x60, 0x3e, 0x00, 0x00, 0x42, 0x13, // ..A.......`>..B.
- 0x00, 0x00, 0x3b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x16, 0x58, // ..;...=........X
- 0x00, 0x00, 0x60, 0x3e, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd6, 0x57, // ..`>..O........W
- 0x00, 0x00, 0x16, 0x58, 0x00, 0x00, 0x16, 0x58, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, // ...X...X........
- 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x42, 0x57, 0x00, 0x00, 0x98, 0x40, // ..........BW...@
- 0x00, 0x00, 0xd6, 0x57, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0xe5, 0x61, // ...W...........a
- 0x00, 0x00, 0x1e, 0x06, 0x00, 0x00, 0x42, 0x57, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0a, 0x17, // ......BW..>.....
- 0x00, 0x00, 0xe5, 0x61, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xce, 0x54, // ...a..A........T
- 0x00, 0x00, 0x0a, 0x17, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........=.....
- 0x00, 0x00, 0xfd, 0x22, 0x00, 0x00, 0xce, 0x54, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x0d, 0x00, // ..."...T........
- 0x00, 0x00, 0x5a, 0x4e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xfd, 0x22, // ..ZN......+...."
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // ..........A.....
- 0x00, 0x00, 0xf7, 0x50, 0x00, 0x00, 0x0a, 0x17, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...P..........=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb3, 0x22, 0x00, 0x00, 0xf7, 0x50, 0x00, 0x00, 0x0c, 0x00, // ......."...P....
- 0x08, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb9, 0x2e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x00, 0x00, 0xb3, 0x22, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x85, 0x00, // ..."............
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbd, 0x48, 0x00, 0x00, 0x5a, 0x4e, 0x00, 0x00, 0xb9, 0x2e, // .......H..ZN....
- 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xbd, 0x48, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, // .......H..8...6.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe2, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, // ................
- 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x1c, 0x12, 0x00, 0x00, 0xf8, 0x00, // ..7.............
- 0x02, 0x00, 0x8c, 0x31, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xfc, 0x21, // ...1..A........!
- 0x00, 0x00, 0x1c, 0x12, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........=.....
- 0x00, 0x00, 0x5a, 0x4b, 0x00, 0x00, 0xfc, 0x21, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..ZK...!........
- 0x00, 0x00, 0xb1, 0x42, 0x00, 0x00, 0x5a, 0x4b, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x83, 0x00, // ...B..ZK........
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1b, 0x37, 0x00, 0x00, 0xb1, 0x42, 0x00, 0x00, 0x8a, 0x00, // .......7...B....
- 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb8, 0x56, 0x00, 0x00, 0x01, 0x00, // ...........V....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1b, 0x37, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, // .......7........
- 0x00, 0x00, 0xcb, 0x5e, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0xb8, 0x56, 0x00, 0x00, 0x41, 0x00, // ...^.......V..A.
- 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x60, 0x2a, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, // ......`*..B...A.
- 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd9, 0x57, // ......=........W
- 0x00, 0x00, 0x60, 0x2a, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0x20, // ..`*...........
- 0x00, 0x00, 0xcb, 0x5e, 0x00, 0x00, 0xd9, 0x57, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, // ...^...W........
- 0x00, 0x00, 0xa1, 0x54, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x8a, 0x00, // ...T......%.....
- 0x00, 0x00, 0x16, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x87, 0x55, // ... ..A........U
- 0x00, 0x00, 0x1c, 0x12, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........=.....
- 0x00, 0x00, 0xa7, 0x42, 0x00, 0x00, 0x87, 0x55, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, // ...B...U........
- 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x8a, 0x00, // ...B......%.....
- 0x00, 0x00, 0xa7, 0x42, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb3, 0x3f, // ...B...........?
- 0x00, 0x00, 0xa1, 0x54, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb3, 0x3f, // ...T...B.......?
- 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x14, // ..8...6....... .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, // ......K...7.....
- 0x00, 0x00, 0xc2, 0x1a, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x40, // ......7........@
- 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x46, 0x51, 0x00, 0x00, 0xf8, 0x00, // ..7.......FQ....
- 0x02, 0x00, 0x7a, 0x5a, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x1e, 0x4b, // ..zZ..;........K
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x60, 0x0d, // ......;.......`.
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x3f, 0x27, // ......;.......?'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x38, 0x17, // ......;.......8.
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x40, 0x27, // ......;.......@'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x41, 0x27, // ......;.......A'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x42, 0x27, // ......;.......B'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x43, 0x27, // ......;.......C'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x44, 0x27, // ......;.......D'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x45, 0x27, // ......;.......E'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x46, 0x27, // ......;.......F'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x47, 0x27, // ......;.......G'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa2, 0x10, // ......;.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x48, 0x27, // ......;.......H'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x49, 0x27, // ......;.......I'
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x18, 0x0e, // ......;.........
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x12, 0x25, // ......;........%
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1e, 0x4b, 0x00, 0x00, 0x0c, 0x0a, // ......>....K....
- 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, // ..9...........5.
- 0x00, 0x00, 0x1e, 0x4b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x91, 0x47, // ...K..=........G
- 0x00, 0x00, 0xc2, 0x1a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x3f, 0x27, 0x00, 0x00, 0x91, 0x47, // ......>...?'...G
- 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x89, 0x4f, 0x00, 0x00, 0x00, 0x0f, // ..9........O....
- 0x00, 0x00, 0x3f, 0x27, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x60, 0x0d, 0x00, 0x00, 0x89, 0x4f, // ..?'..>...`....O
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x57, 0x26, 0x00, 0x00, 0x09, 0x40, // ..=.......W&...@
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x40, 0x27, 0x00, 0x00, 0x57, 0x26, 0x00, 0x00, 0x39, 0x00, // ..>...@'..W&..9.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd5, 0x4f, 0x00, 0x00, 0xe2, 0x0b, 0x00, 0x00, 0x40, 0x27, // .......O......@'
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x38, 0x17, 0x00, 0x00, 0xd5, 0x4f, 0x00, 0x00, 0x41, 0x00, // ..>...8....O..A.
- 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x1f, 0x45, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, // .......E..B...A.
- 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb1, 0x60, // ......=........`
- 0x00, 0x00, 0x1f, 0x45, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x34, 0x2b, // ...E..........4+
- 0x00, 0x00, 0xb1, 0x60, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xb4, 0x31, // ...`...........1
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x34, 0x2b, 0x00, 0x00, 0x61, 0x22, // ..........4+..a"
- 0x00, 0x00, 0x2d, 0x59, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x61, 0x22, 0x00, 0x00, 0x3d, 0x00, // ..-Y......a"..=.
- 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdd, 0x2d, 0x00, 0x00, 0xc2, 0x1a, 0x00, 0x00, 0x51, 0x00, // .......-......Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf4, 0x5d, 0x00, 0x00, 0xdd, 0x2d, 0x00, 0x00, 0x00, 0x00, // .......]...-....
- 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x28, 0x4a, 0x00, 0x00, 0xdd, 0x2d, // ..Q.......(J...-
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x11, 0x36, // ......P........6
- 0x00, 0x00, 0xf4, 0x5d, 0x00, 0x00, 0x28, 0x4a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, // ...]..(J......A.
- 0x05, 0x00, 0xc3, 0x02, 0x00, 0x00, 0xfc, 0x60, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x32, 0x0a, // .......`..B...2.
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, 0x51, 0x28, 0x00, 0x00, 0xfc, 0x60, // ..=...F...Q(...`
- 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x7d, 0x1c, 0x00, 0x00, 0x11, 0x36, // ..........}....6
- 0x00, 0x00, 0x51, 0x28, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xeb, 0x21, // ..Q(..O........!
- 0x00, 0x00, 0x7d, 0x1c, 0x00, 0x00, 0x7d, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..}...}.........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x41, 0x27, 0x00, 0x00, 0xeb, 0x21, 0x00, 0x00, 0x41, 0x00, // ..>...A'...!..A.
- 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x7d, 0x50, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x3e, 0x0a, // ......}P..B...>.
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x4c, 0x00, 0x00, 0x7d, 0x50, // ..=........L..}P
- 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xc9, 0x3b, 0x00, 0x00, 0xb8, 0x4c, // ..O........;...L
- 0x00, 0x00, 0xb8, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, // ...L..........>.
- 0x03, 0x00, 0x42, 0x27, 0x00, 0x00, 0xc9, 0x3b, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, // ..B'...;..A.....
- 0x00, 0x00, 0x3a, 0x4f, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x00, 0x10, 0x0a, // ..:O..B...>.....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd7, 0x57, 0x00, 0x00, 0x3a, 0x4f, // ..=........W..:O
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x43, 0x27, 0x00, 0x00, 0xd7, 0x57, 0x00, 0x00, 0x39, 0x00, // ..>...C'...W..9.
- 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x82, 0x4d, 0x00, 0x00, 0x91, 0x0e, 0x00, 0x00, 0x41, 0x27, // .......M......A'
- 0x00, 0x00, 0x42, 0x27, 0x00, 0x00, 0x43, 0x27, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, // ..B'..C'..A.....
- 0x00, 0x00, 0x5d, 0x18, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x0a, 0x0a, // ..]...B...A.....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0f, 0x2a, 0x00, 0x00, 0x5d, 0x18, // ..=........*..].
- 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x34, 0x4a, 0x00, 0x00, 0x0f, 0x2a, // ..........4J...*
- 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf6, 0x38, // ...............8
- 0x00, 0x00, 0x82, 0x4d, 0x00, 0x00, 0x34, 0x4a, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, // ...M..4J..A.....
- 0x00, 0x00, 0x7a, 0x20, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x0a, 0x0a, // ..z ..B...A.....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc9, 0x51, 0x00, 0x00, 0x7a, 0x20, // ..=........Q..z
- 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0xf6, 0x38, // ...........1...8
- 0x00, 0x00, 0xc9, 0x51, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb6, 0x10, // ...Q............
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x0c, 0x0a, // ......+....1....
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x18, // ......P.........
- 0x00, 0x00, 0xb6, 0x10, 0x00, 0x00, 0xb6, 0x10, 0x00, 0x00, 0xb6, 0x10, 0x00, 0x00, 0xb6, 0x10, // ................
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xc3, 0x58, 0x00, 0x00, 0x42, 0x13, // ..A........X..B.
- 0x00, 0x00, 0x35, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb1, 0x5e, // ..5...=........^
- 0x00, 0x00, 0xc3, 0x58, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x45, 0x27, 0x00, 0x00, 0xb1, 0x5e, // ...X..>...E'...^
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xbe, 0x2f, 0x00, 0x00, 0x42, 0x13, // ..A......../..B.
- 0x00, 0x00, 0x38, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x58, // ..8...=.......5X
- 0x00, 0x00, 0xbe, 0x2f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x46, 0x27, 0x00, 0x00, 0x35, 0x58, // .../..>...F'..5X
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x47, 0x27, 0x00, 0x00, 0xa0, 0x18, 0x00, 0x00, 0x39, 0x00, // ..>...G'......9.
- 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x4c, 0x5f, 0x00, 0x00, 0xd2, 0x0c, 0x00, 0x00, 0x45, 0x27, // ......L_......E'
- 0x00, 0x00, 0x46, 0x27, 0x00, 0x00, 0x47, 0x27, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x44, 0x27, // ..F'..G'..>...D'
- 0x00, 0x00, 0x4c, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa8, 0x2c, // ..L_..=........,
- 0x00, 0x00, 0x38, 0x17, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x44, 0x45, // ..8...=.......DE
- 0x00, 0x00, 0x60, 0x0d, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc6, 0x26, // ..`............&
- 0x00, 0x00, 0xa8, 0x2c, 0x00, 0x00, 0x44, 0x45, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ...,..DE..=.....
- 0x00, 0x00, 0x1a, 0x2e, 0x00, 0x00, 0x44, 0x27, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x1d, 0x00, // ......D'........
- 0x00, 0x00, 0x4e, 0x5c, 0x00, 0x00, 0x1a, 0x2e, 0x00, 0x00, 0xc6, 0x26, 0x00, 0x00, 0x3e, 0x00, // ..N........&..>.
- 0x03, 0x00, 0x44, 0x27, 0x00, 0x00, 0x4e, 0x5c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..D'..N...=.....
- 0x00, 0x00, 0x7c, 0x1f, 0x00, 0x00, 0x44, 0x27, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x10, // ..|...D'..>.....
- 0x00, 0x00, 0x7c, 0x1f, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xb4, 0x31, 0x00, 0x00, 0xf8, 0x00, // ..|........1....
- 0x02, 0x00, 0x2d, 0x59, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xf1, 0x47, // ..-Y..A........G
- 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..B...A.......=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x71, 0x36, 0x00, 0x00, 0xf1, 0x47, 0x00, 0x00, 0xb4, 0x00, // ......q6...G....
- 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x35, 0x2b, 0x00, 0x00, 0x71, 0x36, 0x00, 0x00, 0x8a, 0x00, // ......5+..q6....
- 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x75, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, // ......uU........
- 0x04, 0x00, 0x35, 0x2b, 0x00, 0x00, 0x62, 0x22, 0x00, 0x00, 0x30, 0x59, 0x00, 0x00, 0xf8, 0x00, // ..5+..b"..0Y....
- 0x02, 0x00, 0x62, 0x22, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xde, 0x2d, // ..b"..=........-
- 0x00, 0x00, 0xc2, 0x1a, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf5, 0x5d, // ......Q........]
- 0x00, 0x00, 0xde, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ...-......Q.....
- 0x00, 0x00, 0x29, 0x4a, 0x00, 0x00, 0xde, 0x2d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, // ..)J...-......P.
- 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x12, 0x36, 0x00, 0x00, 0xf5, 0x5d, 0x00, 0x00, 0x29, 0x4a, // .......6...]..)J
- 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xc3, 0x02, 0x00, 0x00, 0xfd, 0x60, // ......A........`
- 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x32, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x46, 0x00, // ..B...2...=...F.
- 0x00, 0x00, 0x52, 0x28, 0x00, 0x00, 0xfd, 0x60, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x18, 0x00, // ..R(...`........
- 0x00, 0x00, 0xb6, 0x1c, 0x00, 0x00, 0x12, 0x36, 0x00, 0x00, 0x52, 0x28, 0x00, 0x00, 0x4f, 0x00, // .......6..R(..O.
- 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x98, 0x1f, 0x00, 0x00, 0xb6, 0x1c, 0x00, 0x00, 0xb6, 0x1c, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, // ..........A.....
- 0x00, 0x00, 0x63, 0x4e, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..cN..B...>...=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xef, 0x61, 0x00, 0x00, 0x63, 0x4e, 0x00, 0x00, 0x4f, 0x00, // .......a..cN..O.
- 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x54, 0x00, 0x00, 0xef, 0x61, 0x00, 0x00, 0xef, 0x61, // .......T...a...a
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x13, 0x00, // ................
- 0x00, 0x00, 0x0b, 0x17, 0x00, 0x00, 0x98, 0x1f, 0x00, 0x00, 0x0d, 0x54, 0x00, 0x00, 0x3e, 0x00, // ...........T..>.
- 0x03, 0x00, 0x49, 0x27, 0x00, 0x00, 0x0b, 0x17, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x1d, 0x00, // ..I'......9.....
- 0x00, 0x00, 0x72, 0x34, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0xfe, 0x0e, 0x00, 0x00, 0x49, 0x27, // ..r4..........I'
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x48, 0x27, 0x00, 0x00, 0x72, 0x34, 0x00, 0x00, 0x41, 0x00, // ..>...H'..r4..A.
- 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x20, 0x45, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, // ...... E..B...A.
- 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb2, 0x60, // ......=........`
- 0x00, 0x00, 0x20, 0x45, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x36, 0x2b, // .. E..........6+
- 0x00, 0x00, 0xb2, 0x60, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x2e, 0x59, // ...`...........Y
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x36, 0x2b, 0x00, 0x00, 0x3b, 0x22, // ..........6+..;"
- 0x00, 0x00, 0x2e, 0x59, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x3b, 0x22, 0x00, 0x00, 0x3d, 0x00, // ...Y......;"..=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x07, 0x2e, 0x00, 0x00, 0x48, 0x27, 0x00, 0x00, 0x4f, 0x00, // ..........H'..O.
- 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xde, 0x5c, 0x00, 0x00, 0x07, 0x2e, 0x00, 0x00, 0x07, 0x2e, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, // ..............A.
- 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xf9, 0x23, 0x00, 0x00, 0x48, 0x27, 0x00, 0x00, 0x13, 0x0a, // .......#..H'....
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x32, 0x00, 0x00, 0xf9, 0x23, // ..=........2...#
- 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x63, 0x1b, 0x00, 0x00, 0xde, 0x5c, // ..........c.....
- 0x00, 0x00, 0x17, 0x32, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x40, // ...2..A........@
- 0x00, 0x00, 0x48, 0x27, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..H'......=.....
- 0x00, 0x00, 0x88, 0x34, 0x00, 0x00, 0x07, 0x40, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ...4...@..Q.....
- 0x00, 0x00, 0x9f, 0x3a, 0x00, 0x00, 0x63, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ...:..c.......Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x98, 0x4a, 0x00, 0x00, 0x63, 0x1b, 0x00, 0x00, 0x01, 0x00, // .......J..c.....
- 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7f, 0x56, 0x00, 0x00, 0x63, 0x1b, // ..Q........V..c.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0c, 0x46, // ......P........F
- 0x00, 0x00, 0x9f, 0x3a, 0x00, 0x00, 0x98, 0x4a, 0x00, 0x00, 0x7f, 0x56, 0x00, 0x00, 0x88, 0x34, // ...:...J...V...4
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x48, 0x27, 0x00, 0x00, 0x0c, 0x46, 0x00, 0x00, 0xf9, 0x00, // ..>...H'...F....
- 0x02, 0x00, 0x2e, 0x59, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x59, 0x00, 0x00, 0x41, 0x00, // ...Y.......Y..A.
- 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xf2, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, // .......G..B...A.
- 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x72, 0x36, // ......=.......r6
- 0x00, 0x00, 0xf2, 0x47, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x37, 0x2b, // ...G..........7+
- 0x00, 0x00, 0x72, 0x36, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x2f, 0x59, // ..r6........../Y
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x37, 0x2b, 0x00, 0x00, 0x3c, 0x22, // ..........7+..<"
- 0x00, 0x00, 0x2f, 0x59, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x3c, 0x22, 0x00, 0x00, 0x3d, 0x00, // ../Y......<"..=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x2d, 0x00, 0x00, 0x48, 0x27, 0x00, 0x00, 0x4f, 0x00, // .......-..H'..O.
- 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x5b, 0x22, 0x00, 0x00, 0xce, 0x2d, 0x00, 0x00, 0xce, 0x2d, // ......["...-...-
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x48, 0x27, 0x00, 0x00, 0x5b, 0x22, 0x00, 0x00, 0xf9, 0x00, // ..>...H'..["....
- 0x02, 0x00, 0x2f, 0x59, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2f, 0x59, 0x00, 0x00, 0x41, 0x00, // ../Y....../Y..A.
- 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x1c, 0x3f, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x35, 0x0a, // .......?..B...5.
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe7, 0x33, 0x00, 0x00, 0x1c, 0x3f, // ..=........3...?
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2e, 0x42, 0x00, 0x00, 0x48, 0x27, // ..=........B..H'
- 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x20, 0x00, 0x00, 0x2e, 0x42, // ........... ...B
- 0x00, 0x00, 0xe7, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x48, 0x27, 0x00, 0x00, 0x17, 0x20, // ...3..>...H'...
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4e, 0x52, 0x00, 0x00, 0x38, 0x17, // ..=.......NR..8.
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x45, 0x45, 0x00, 0x00, 0x60, 0x0d, // ..=.......EE..`.
- 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc7, 0x26, 0x00, 0x00, 0x4e, 0x52, // ...........&..NR
- 0x00, 0x00, 0x45, 0x45, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1b, 0x2e, // ..EE..=.........
- 0x00, 0x00, 0x48, 0x27, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x4f, 0x5c, // ..H'..........O.
- 0x00, 0x00, 0x1b, 0x2e, 0x00, 0x00, 0xc7, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x48, 0x27, // .......&..>...H'
- 0x00, 0x00, 0x4f, 0x5c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7d, 0x1f, // ..O...=.......}.
- 0x00, 0x00, 0x48, 0x27, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x7d, 0x1f, // ..H'..>.......}.
- 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x75, 0x55, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x30, 0x59, // ......uU......0Y
- 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xf3, 0x47, 0x00, 0x00, 0x42, 0x13, // ..A........G..B.
- 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..A.......=.....
- 0x00, 0x00, 0x73, 0x36, 0x00, 0x00, 0xf3, 0x47, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, // ..s6...G........
- 0x00, 0x00, 0x38, 0x2b, 0x00, 0x00, 0x73, 0x36, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xf7, 0x00, // ..8+..s6........
- 0x03, 0x00, 0x74, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x38, 0x2b, // ..tU..........8+
- 0x00, 0x00, 0x2c, 0x2e, 0x00, 0x00, 0x31, 0x59, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2c, 0x2e, // ..,...1Y......,.
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0xf9, 0x00, // ..>.............
- 0x02, 0x00, 0x74, 0x55, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x31, 0x59, 0x00, 0x00, 0x41, 0x00, // ..tU......1Y..A.
- 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xf4, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, // .......G..B...A.
- 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x74, 0x36, // ......=.......t6
- 0x00, 0x00, 0xf4, 0x47, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x39, 0x2b, // ...G..........9+
- 0x00, 0x00, 0x74, 0x36, 0x00, 0x00, 0xa2, 0x0b, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x35, 0x35, // ..t6..........55
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x39, 0x2b, 0x00, 0x00, 0xf8, 0x20, // ..........9+...
- 0x00, 0x00, 0x35, 0x35, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf8, 0x20, 0x00, 0x00, 0x3d, 0x00, // ..55....... ..=.
- 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xec, 0x38, 0x00, 0x00, 0x09, 0x40, 0x00, 0x00, 0x3e, 0x00, // .......8...@..>.
- 0x03, 0x00, 0x12, 0x25, 0x00, 0x00, 0xec, 0x38, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x1d, 0x00, // ...%...8..9.....
- 0x00, 0x00, 0xd6, 0x4f, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0xfe, 0x0e, 0x00, 0x00, 0x12, 0x25, // ...O...........%
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, 0xd6, 0x4f, 0x00, 0x00, 0x41, 0x00, // ..>........O..A.
- 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x21, 0x45, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, // ......!E..B...A.
- 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb3, 0x60, // ......=........`
- 0x00, 0x00, 0x21, 0x45, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3a, 0x2b, // ..!E..........:+
- 0x00, 0x00, 0xb3, 0x60, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x32, 0x59, // ...`..........2Y
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x3a, 0x2b, 0x00, 0x00, 0x3d, 0x22, // ..........:+..="
- 0x00, 0x00, 0x32, 0x59, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x3d, 0x22, 0x00, 0x00, 0x3d, 0x00, // ..2Y......="..=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x08, 0x2e, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x4f, 0x00, // ..............O.
- 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xdf, 0x5c, 0x00, 0x00, 0x08, 0x2e, 0x00, 0x00, 0x08, 0x2e, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, // ..............A.
- 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xfa, 0x23, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x13, 0x0a, // .......#........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x32, 0x00, 0x00, 0xfa, 0x23, // ..=........2...#
- 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x64, 0x1b, 0x00, 0x00, 0xdf, 0x5c, // ..........d.....
- 0x00, 0x00, 0x18, 0x32, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x08, 0x40, // ...2..A........@
- 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........=.....
- 0x00, 0x00, 0x89, 0x34, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ...4...@..Q.....
- 0x00, 0x00, 0xa0, 0x3a, 0x00, 0x00, 0x64, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ...:..d.......Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x99, 0x4a, 0x00, 0x00, 0x64, 0x1b, 0x00, 0x00, 0x01, 0x00, // .......J..d.....
- 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x80, 0x56, 0x00, 0x00, 0x64, 0x1b, // ..Q........V..d.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x46, // ......P........F
- 0x00, 0x00, 0xa0, 0x3a, 0x00, 0x00, 0x99, 0x4a, 0x00, 0x00, 0x80, 0x56, 0x00, 0x00, 0x89, 0x34, // ...:...J...V...4
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x0d, 0x46, 0x00, 0x00, 0xf9, 0x00, // ..>........F....
- 0x02, 0x00, 0x32, 0x59, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x32, 0x59, 0x00, 0x00, 0x41, 0x00, // ..2Y......2Y..A.
- 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xf5, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, // .......G..B...A.
- 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x75, 0x36, // ......=.......u6
- 0x00, 0x00, 0xf5, 0x47, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3b, 0x2b, // ...G..........;+
- 0x00, 0x00, 0x75, 0x36, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xe1, 0x5b, // ..u6...........[
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x3b, 0x2b, 0x00, 0x00, 0x3e, 0x22, // ..........;+..>"
- 0x00, 0x00, 0xe1, 0x5b, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x3e, 0x22, 0x00, 0x00, 0x3d, 0x00, // ...[......>"..=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcf, 0x2d, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x4f, 0x00, // .......-......O.
- 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x5c, 0x22, 0x00, 0x00, 0xcf, 0x2d, 0x00, 0x00, 0xcf, 0x2d, // ......."...-...-
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x5c, 0x22, 0x00, 0x00, 0xf9, 0x00, // ..>........"....
- 0x02, 0x00, 0xe1, 0x5b, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xe1, 0x5b, 0x00, 0x00, 0x3d, 0x00, // ...[.......[..=.
- 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x30, 0x00, 0x00, 0x60, 0x0d, 0x00, 0x00, 0x3d, 0x00, // ......%0..`...=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x81, 0x5f, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x8e, 0x00, // ......._........
- 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x09, 0x2a, 0x00, 0x00, 0x81, 0x5f, 0x00, 0x00, 0x25, 0x30, // .......*..._..%0
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x09, 0x2a, 0x00, 0x00, 0x3d, 0x00, // ..>........*..=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x41, 0x00, // .......Z......A.
- 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xbf, 0x45, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x35, 0x0a, // .......E..B...5.
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x31, 0x00, 0x00, 0xbf, 0x45, // ..=........1...E
- 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa4, 0x3a, 0x00, 0x00, 0x00, 0x5a, // ...........:...Z
- 0x00, 0x00, 0xb0, 0x31, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x10, 0x00, 0x00, 0xa4, 0x3a, // ...1..>........:
- 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x35, 0x35, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x35, 0x35, // ......55......55
- 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x74, 0x55, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x74, 0x55, // ......tU......tU
- 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x75, 0x55, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x75, 0x55, // ......uU......uU
- 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xb4, 0x31, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb4, 0x31, // .......1.......1
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb5, 0x37, 0x00, 0x00, 0xa2, 0x10, // ..=........7....
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x46, 0x51, 0x00, 0x00, 0xb5, 0x37, 0x00, 0x00, 0xfd, 0x00, // ..>...FQ...7....
- 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..8....
+ 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0xbc, 0x27, 0x00, 0x00, // tScale.......'..
+ 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x5c, 0x62, 0x00, 0x00, // ..#..........b..
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, // ................
+ 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, // ....GLSL.std.450
+ 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x0f, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, // ............main
+ 0x00, 0x00, 0x00, 0x00, 0xc1, 0x12, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........t.......
+ 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, // ................
+ 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, // main............
+ 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, // bgfxTexture2D(st
+ 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ruct-BgfxSampler
+ 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, // 2D-p1-t211;vf2;.
+ 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ....~..._sampler
+ 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, // .m_sampler......
+ 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, // ...._sampler.m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, // exture..........
+ 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xd2, 0x0c, 0x00, 0x00, // _coord..........
+ 0x6d, 0x69, 0x78, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, // mix(vf4;vf4;vf4;
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x5f, 0x61, 0x00, 0x00, // ............_a..
+ 0x05, 0x00, 0x03, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x5f, 0x62, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // ........_b......
+ 0xd9, 0x0e, 0x00, 0x00, 0x5f, 0x74, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, // ...._t......5...
+ 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, // vec4_splat(f1;..
+ 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, // ........_x......
+ 0x91, 0x0e, 0x00, 0x00, 0x73, 0x64, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x63, 0x74, 0x28, // ....sdroundrect(
+ 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x05, 0x00, 0x03, 0x00, // vf2;vf2;f1;.....
+ 0xb5, 0x31, 0x00, 0x00, 0x70, 0x74, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x40, 0x0d, 0x00, 0x00, // .1..pt......@...
+ 0x65, 0x78, 0x74, 0x00, 0x05, 0x00, 0x03, 0x00, 0x4d, 0x17, 0x00, 0x00, 0x72, 0x61, 0x64, 0x00, // ext.....M...rad.
+ 0x05, 0x00, 0x07, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, // ........scissorM
+ 0x61, 0x73, 0x6b, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // ask(vf2;........
+ 0xc2, 0x10, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe2, 0x0b, 0x00, 0x00, // ....p...........
+ 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x00, // strokeMask(vf2;.
+ 0x05, 0x00, 0x05, 0x00, 0x1c, 0x12, 0x00, 0x00, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // ........_texcoor
+ 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x20, 0x14, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // d....... ...@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // n(vf2;vf2;vf4;..
+ 0x05, 0x00, 0x05, 0x00, 0xa8, 0x27, 0x00, 0x00, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....'..v_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x20, 0x61, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, // on...... a..v_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd5, 0x40, 0x00, 0x00, // xcoord0......@..
+ 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
+ 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, // ....a...BgfxSamp
+ 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, // ler2D.......a...
+ 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, // ....m_sampler...
+ 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, // ....a.......m_te
+ 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, // xture...........
+ 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x06, 0x00, // flattenTemp.....
+ 0x0f, 0x0d, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ....s_texSampler
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // ........K...s_te
+ 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // xTexture........
+ 0x4f, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, // O...s_tex.m_samp
+ 0x6c, 0x65, 0x72, 0x00, 0x05, 0x00, 0x06, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // ler.....6...s_te
+ 0x78, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00, // x.m_texture.....
+ 0xbc, 0x0e, 0x00, 0x00, 0x65, 0x78, 0x74, 0x32, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // ....ext2........
+ 0x6e, 0x45, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x0a, 0x17, 0x00, 0x00, // nE..d...........
+ 0x73, 0x63, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x68, 0x08, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, // sc......h...$Glo
+ 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x68, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // bal.....h.......
+ 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_viewRect......
+ 0x68, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, // h.......u_viewTe
+ 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // xel.....h.......
+ 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x68, 0x08, 0x00, 0x00, // u_view......h...
+ 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, // ....u_invView...
+ 0x06, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, // ....h.......u_pr
+ 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x68, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // oj......h.......
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_invProj.......
+ 0x68, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // h.......u_viewPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x68, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // oj......h.......
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, // u_invViewProj...
+ 0x06, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....h.......u_mo
+ 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x68, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // del.....h.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, // u_modelView.....
+ 0x68, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // h.......u_modelV
+ 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x68, 0x08, 0x00, 0x00, // iewProj.....h...
+ 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, // ....u_alphaRef4.
+ 0x06, 0x00, 0x07, 0x00, 0x68, 0x08, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x73, 0x63, // ....h.......u_sc
+ 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // issorMat........
+ 0x68, 0x08, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x4d, // h.......u_paintM
+ 0x61, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x68, 0x08, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, // at......h.......
+ 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // u_innerCol......
+ 0x68, 0x08, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, // h.......u_outerC
+ 0x6f, 0x6c, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x68, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ol......h.......
+ 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, // u_scissorExtScal
+ 0x65, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x68, 0x08, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, // e.......h.......
+ 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x00, 0x00, // u_extentRadius..
+ 0x06, 0x00, 0x06, 0x00, 0x68, 0x08, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, // ....h.......u_pa
+ 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, // rams........B...
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, // ............bgfx
+ 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // _VoidFrag.......
+ 0xe6, 0x53, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .S..param.......
+ 0x60, 0x0d, 0x00, 0x00, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x04, 0x00, // `...scissor.....
+ 0x07, 0x30, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // .0..param.......
+ 0x38, 0x17, 0x00, 0x00, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x00, // 8...strokeAlpha.
+ 0x05, 0x00, 0x04, 0x00, 0x08, 0x30, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....0..param...
+ 0x05, 0x00, 0x03, 0x00, 0xb3, 0x2a, 0x00, 0x00, 0x70, 0x74, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, // .....*..pt......
+ 0xb6, 0x10, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x09, 0x30, 0x00, 0x00, // ....d........0..
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0a, 0x30, 0x00, 0x00, // param........0..
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0b, 0x30, 0x00, 0x00, // param........0..
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0c, 0x30, 0x00, 0x00, // param........0..
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0d, 0x30, 0x00, 0x00, // color........0..
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0e, 0x30, 0x00, 0x00, // param........0..
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0f, 0x30, 0x00, 0x00, // param........0..
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa2, 0x10, 0x00, 0x00, // param...........
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x0b, 0x17, 0x00, 0x00, // result..........
+ 0x70, 0x74, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x10, 0x30, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, // pt.......0..colo
+ 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x11, 0x30, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // r........0..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x12, 0x30, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........0..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x13, 0x30, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........0..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, // m...........colo
+ 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x14, 0x30, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // r........0..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x40, 0x30, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m.......@0..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xda, 0x2d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........-..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x70, 0x6f, // m........+..v_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xc1, 0x12, 0x00, 0x00, // sition..........
+ 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // v_position......
+ 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // .<..v_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....t...v_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0.........gl_F
+ 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ragData_0_......
+ 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .U..param.......
+ 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .8..param.......
+ 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ....param.......
+ 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // ....gl_FragData_
+ 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // 0_..G......."...
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // ....G.......!...
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, // ....G...K..."...
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // ....G...K...!...
+ 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x88, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....G...........
+ 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @...H...h.......
+ 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, // #.......H...h...
+ 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ....#.......H...
+ 0x68, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // h...........H...
+ 0x68, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // h.......#... ...
+ 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...h...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x68, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, // #...`...H...h...
+ 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0x68, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // h...........H...
+ 0x68, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // h.......#.......
+ 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...h...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x68, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, // #.......H...h...
+ 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0x68, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // h...........H...
+ 0x68, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, // h.......#... ...
+ 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...h...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x68, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, // #...`...H...h...
+ 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0x68, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // h...........H...
+ 0x68, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, // h.......#.......
+ 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...h...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x68, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, // #.......H...h...
+ 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
+ 0x68, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // h...........H...
+ 0x68, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, // h.......#.......
+ 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...h...........
+ 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x68, 0x08, 0x00, 0x00, // #... ...H...h...
+ 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, // ........H...h...
+ 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...0...H...
+ 0x68, 0x08, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // h...............
+ 0x48, 0x00, 0x04, 0x00, 0x68, 0x08, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...h...........
+ 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...h.......#...
+ 0x60, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // `...H...h.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, // ........H...h...
+ 0x0e, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x68, 0x08, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, // h.......#.......
+ 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...h.......#...
+ 0xb0, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, // ....H...h.......
+ 0x23, 0x00, 0x00, 0x00, 0xc0, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x68, 0x08, 0x00, 0x00, // #.......H...h...
+ 0x12, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xd0, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#.......G...
+ 0x68, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // h.......G...B...
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc1, 0x12, 0x00, 0x00, // ".......G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, // ........G...t...
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, // !...............
+ 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...y.......
+ 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
+ 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
+ 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x0a, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....!...........
+ 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // y........... ...
+ 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
+ 0xbb, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // ................
+ 0x9a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....!...........
+ 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0xc8, 0x0b, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ....!...........
+ 0x90, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // ............!...
+ 0xe1, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
+ 0x4b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, // K...............
+ 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, // ........a.......
+ 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x61, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // a... ...z.......
+ 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x0f, 0x0d, 0x00, 0x00, // ....;...z.......
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...........
+ 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0x4b, 0x0f, 0x00, 0x00, // ....;.......K...
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .... ...{.......
+ 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x4f, 0x12, 0x00, 0x00, // ....;...{...O...
+ 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .... ...........
+ 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, // ....;.......6...
+ 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, // ................
+ 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
+ 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
+ 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // +...............
+ 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
+ 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ,...............
+ 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...?............
+ 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........e.......
+ 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....+.......j...
+ 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x88, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ...........e...
+ 0x6a, 0x0a, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // j.......F.......
+ 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x15, 0x00, 0x68, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........h.......
+ 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ....e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, // e...e...e.......
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, // e...e.......F...
+ 0x46, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // F...............
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe5, 0x0a, 0x00, 0x00, // ........ .......
+ 0x02, 0x00, 0x00, 0x00, 0x68, 0x08, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe5, 0x0a, 0x00, 0x00, // ....h...;.......
+ 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // B.......+.......
+ 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xc3, 0x02, 0x00, 0x00, // /....... .......
+ 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ....F...+.......
+ 0x3b, 0x0a, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, // ;....... .......
+ 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........+.......
+ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, // .......?,.......
+ 0x1e, 0x06, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2b, 0x00, 0x04, 0x00, // ...........@+...
+ 0x0c, 0x00, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ....A....... ...
+ 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, // ................
+ 0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x32, 0x0a, 0x00, 0x00, // ....+.......2...
+ 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x00, // ....+.......>...
+ 0x11, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, // ....+...........
+ 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x35, 0x0a, 0x00, 0x00, // ....+.......5...
+ 0x0e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x38, 0x0a, 0x00, 0x00, // ....+.......8...
+ 0x0f, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, // ....,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa2, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, // +.............@@
+ 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0xc1, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;.......t.......
+ 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
+ 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
+ 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ........Sa..;...
+ 0x1b, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x90, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....U......;...
+ 0x90, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....8......;...
+ 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ............=...
+ 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x0f, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....!C......=...
+ 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x4b, 0x0f, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, // .....3..K...P...
+ 0x61, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, // a...^ ..!C...3..
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......^ ..A...
+ 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // y....V..........
+ 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, // =............V..
+ 0x3e, 0x00, 0x03, 0x00, 0x4f, 0x12, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...O.......A...
+ 0x13, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // =............@..
+ 0x3e, 0x00, 0x03, 0x00, 0x36, 0x0e, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...6.......=...
+ 0x13, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0xc1, 0x12, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....+......=...
+ 0x13, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....<..t...>...
+ 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, // .U...+..>....8..
+ 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, // .<..9........&..
+ 0x20, 0x14, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // ....U...8......
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // =...............
+ 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >...............
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, // 8...6...........
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, // ........7...y...
+ 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, // ~...7...........
+ 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
+ 0xca, 0x1c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, // ....=...........
+ 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, // ....=........H..
+ 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, // ~...V........>..
+ 0xc6, 0x19, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // .....H..=.......
+ 0xfe, 0x24, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .$......W.......
+ 0x82, 0x59, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, // .Y...>...$......
+ 0x82, 0x59, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .Y..8...6.......
+ 0xd2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // ............7...
+ 0x9a, 0x02, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........7.......
+ 0xc7, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, // ....7...........
+ 0xf8, 0x00, 0x02, 0x00, 0x16, 0x59, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .....Y..=.......
+ 0x37, 0x54, 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // 7T......=.......
+ 0x07, 0x48, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .H......=.......
+ 0x0e, 0x47, 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, // .G..............
+ 0x65, 0x19, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x37, 0x54, 0x00, 0x00, // e...........7T..
+ 0x07, 0x48, 0x00, 0x00, 0x0e, 0x47, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x65, 0x19, 0x00, 0x00, // .H...G......e...
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, // 8...6.......5...
+ 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........7.......
+ 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x19, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .........N..=...
+ 0x0d, 0x00, 0x00, 0x00, 0x67, 0x1c, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....g.......=...
+ 0x0d, 0x00, 0x00, 0x00, 0xf2, 0x44, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....D......=...
+ 0x0d, 0x00, 0x00, 0x00, 0x92, 0x2f, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ...../......=...
+ 0x0d, 0x00, 0x00, 0x00, 0xa5, 0x2f, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, // ...../......P...
+ 0x1d, 0x00, 0x00, 0x00, 0x41, 0x4a, 0x00, 0x00, 0x67, 0x1c, 0x00, 0x00, 0xf2, 0x44, 0x00, 0x00, // ....AJ..g....D..
+ 0x92, 0x2f, 0x00, 0x00, 0xa5, 0x2f, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x41, 0x4a, 0x00, 0x00, // ./.../......AJ..
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x91, 0x0e, 0x00, 0x00, // 8...6...........
+ 0x00, 0x00, 0x00, 0x00, 0xc8, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, // ........7.......
+ 0xb5, 0x31, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x40, 0x0d, 0x00, 0x00, // .1..7.......@...
+ 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x17, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7.......M.......
+ 0x24, 0x56, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x6e, 0x45, 0x00, 0x00, // $V..;.......nE..
+ 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x5b, 0x62, 0x00, 0x00, // ....=.......[b..
+ 0x40, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x83, 0x2b, 0x00, 0x00, // @...=........+..
+ 0x4d, 0x17, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc2, 0x28, 0x00, 0x00, // M...=........(..
+ 0x4d, 0x17, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x7d, 0x3f, 0x00, 0x00, // M...P.......}?..
+ 0x83, 0x2b, 0x00, 0x00, 0xc2, 0x28, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, // .+...(..........
+ 0xbc, 0x0e, 0x00, 0x00, 0x5b, 0x62, 0x00, 0x00, 0x7d, 0x3f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....[b..}?..=...
+ 0x13, 0x00, 0x00, 0x00, 0xf3, 0x20, 0x00, 0x00, 0xb5, 0x31, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, // ..... ...1......
+ 0x13, 0x00, 0x00, 0x00, 0x67, 0x4d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....gM..........
+ 0xf3, 0x20, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0xe8, 0x32, 0x00, 0x00, // . ...........2..
+ 0x67, 0x4d, 0x00, 0x00, 0xbc, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x6e, 0x45, 0x00, 0x00, // gM......>...nE..
+ 0xe8, 0x32, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x73, 0x57, 0x00, 0x00, // .2..A.......sW..
+ 0x6e, 0x45, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // nE......=.......
+ 0x9f, 0x51, 0x00, 0x00, 0x73, 0x57, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // .Q..sW..A.......
+ 0x47, 0x35, 0x00, 0x00, 0x6e, 0x45, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // G5..nE......=...
+ 0x0d, 0x00, 0x00, 0x00, 0x40, 0x3b, 0x00, 0x00, 0x47, 0x35, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, // ....@;..G5......
+ 0x0d, 0x00, 0x00, 0x00, 0x91, 0x41, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, // .....A......(...
+ 0x9f, 0x51, 0x00, 0x00, 0x40, 0x3b, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, // .Q..@;..........
+ 0x1f, 0x4a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x91, 0x41, 0x00, 0x00, // .J......%....A..
+ 0x0c, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x31, 0x00, 0x00, // ....=....... 1..
+ 0x6e, 0x45, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x22, 0x2b, 0x00, 0x00, // nE.........."+..
+ 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x31, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, // ....(... 1......
+ 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7a, 0x53, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........zS......
+ 0x42, 0x00, 0x00, 0x00, 0x22, 0x2b, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // B..."+..........
+ 0x59, 0x19, 0x00, 0x00, 0x1f, 0x4a, 0x00, 0x00, 0x7a, 0x53, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // Y....J..zS..=...
+ 0x0d, 0x00, 0x00, 0x00, 0x9c, 0x18, 0x00, 0x00, 0x4d, 0x17, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, // ........M.......
+ 0x0d, 0x00, 0x00, 0x00, 0x82, 0x61, 0x00, 0x00, 0x59, 0x19, 0x00, 0x00, 0x9c, 0x18, 0x00, 0x00, // .....a..Y.......
+ 0xfe, 0x00, 0x02, 0x00, 0x82, 0x61, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // .....a..8...6...
+ 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, // ................
+ 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc2, 0x10, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
+ 0xeb, 0x3d, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0a, 0x17, 0x00, 0x00, // .=..;...........
+ 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, // ....=........G..
+ 0xc2, 0x10, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x10, 0x2d, 0x00, 0x00, // ....Q........-..
+ 0x01, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .G......Q.......
+ 0x93, 0x4f, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, // .O...G......P...
+ 0x18, 0x00, 0x00, 0x00, 0x7c, 0x3b, 0x00, 0x00, 0x10, 0x2d, 0x00, 0x00, 0x93, 0x4f, 0x00, 0x00, // ....|;...-...O..
+ 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xc3, 0x02, 0x00, 0x00, 0xe8, 0x1b, 0x00, 0x00, // ....A...........
+ 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, // B.../...=...F...
+ 0xbc, 0x2d, 0x00, 0x00, 0xe8, 0x1b, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, // .-..............
+ 0x36, 0x1e, 0x00, 0x00, 0x7c, 0x3b, 0x00, 0x00, 0xbc, 0x2d, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, // 6...|;...-..O...
+ 0x13, 0x00, 0x00, 0x00, 0x82, 0x60, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, // .....`..6...6...
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x13, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x5b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x82, 0x60, 0x00, 0x00, // .[...........`..
+ 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x27, 0x5f, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A.......'_..B...
+ 0x3b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcd, 0x56, 0x00, 0x00, // ;...=........V..
+ 0x27, 0x5f, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xd9, 0x5c, 0x00, 0x00, // '_..O...........
+ 0xcd, 0x56, 0x00, 0x00, 0xcd, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .V...V..........
+ 0x83, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x9c, 0x39, 0x00, 0x00, 0x0d, 0x5b, 0x00, 0x00, // .........9...[..
+ 0xd9, 0x5c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0a, 0x17, 0x00, 0x00, 0x9c, 0x39, 0x00, 0x00, // ....>........9..
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x60, 0x49, 0x00, 0x00, 0x0a, 0x17, 0x00, 0x00, // =.......`I......
+ 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x28, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A.......(G..B...
+ 0x3b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xde, 0x60, 0x00, 0x00, // ;...=........`..
+ 0x28, 0x47, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x9e, 0x60, 0x00, 0x00, // (G..O........`..
+ 0xde, 0x60, 0x00, 0x00, 0xde, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .`...`..........
+ 0x85, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0a, 0x60, 0x00, 0x00, 0x60, 0x49, 0x00, 0x00, // .........`..`I..
+ 0x9e, 0x60, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x74, 0x51, 0x00, 0x00, // .`..........tQ..
+ 0x1e, 0x06, 0x00, 0x00, 0x0a, 0x60, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0a, 0x17, 0x00, 0x00, // .....`..>.......
+ 0x74, 0x51, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x96, 0x5d, 0x00, 0x00, // tQ..A........]..
+ 0x0a, 0x17, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
+ 0xc5, 0x2b, 0x00, 0x00, 0x96, 0x5d, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x00, 0x00, // .+...]..........
+ 0xe9, 0x3d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xc5, 0x2b, 0x00, 0x00, // .=......+....+..
+ 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........A.......
+ 0xbf, 0x59, 0x00, 0x00, 0x0a, 0x17, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .Y..........=...
+ 0x0d, 0x00, 0x00, 0x00, 0x7b, 0x2b, 0x00, 0x00, 0xbf, 0x59, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, // ....{+...Y......
+ 0x0d, 0x00, 0x00, 0x00, 0x48, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, // ....H.......+...
+ 0x7b, 0x2b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, // {+..............
+ 0x0d, 0x00, 0x00, 0x00, 0x55, 0x1f, 0x00, 0x00, 0xe9, 0x3d, 0x00, 0x00, 0x48, 0x1e, 0x00, 0x00, // ....U....=..H...
+ 0xfe, 0x00, 0x02, 0x00, 0x55, 0x1f, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // ....U...8...6...
+ 0x0d, 0x00, 0x00, 0x00, 0xe2, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, // ................
+ 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x1c, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
+ 0xa3, 0x52, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xc4, 0x2a, 0x00, 0x00, // .R..A........*..
+ 0x1c, 0x12, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
+ 0x22, 0x54, 0x00, 0x00, 0xc4, 0x2a, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // "T...*..........
+ 0x40, 0x32, 0x00, 0x00, 0x22, 0x54, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, // @2.."T..........
+ 0x0d, 0x00, 0x00, 0x00, 0xe3, 0x3f, 0x00, 0x00, 0x40, 0x32, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // .....?..@2......
+ 0x0c, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x47, 0x46, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........GF......
+ 0x04, 0x00, 0x00, 0x00, 0xe3, 0x3f, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .....?..........
+ 0x5a, 0x4e, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x47, 0x46, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, // ZN......GF..A...
+ 0x8b, 0x02, 0x00, 0x00, 0x28, 0x33, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, // ....(3..B...A...
+ 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x68, 0x47, 0x00, 0x00, // ....=.......hG..
+ 0x28, 0x33, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x24, 0x5a, 0x00, 0x00, // (3..........$Z..
+ 0x5a, 0x4e, 0x00, 0x00, 0x68, 0x47, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, // ZN..hG..........
+ 0x30, 0x44, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // 0D......%.......
+ 0x24, 0x5a, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4f, 0x5e, 0x00, 0x00, // $Z..A.......O^..
+ 0x1c, 0x12, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
+ 0x36, 0x32, 0x00, 0x00, 0x4f, 0x5e, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, // 62..O^..........
+ 0xc7, 0x4b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // .K......%.......
+ 0x36, 0x32, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xca, 0x60, 0x00, 0x00, // 62...........`..
+ 0x30, 0x44, 0x00, 0x00, 0xc7, 0x4b, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xca, 0x60, 0x00, 0x00, // 0D...K.......`..
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x14, 0x00, 0x00, // 8...6....... ...
+ 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, // ....K...7.......
+ 0xa8, 0x27, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x61, 0x00, 0x00, // .'..7....... a..
+ 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xd5, 0x40, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........@......
+ 0xc3, 0x18, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xe6, 0x53, 0x00, 0x00, // ....;........S..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x60, 0x0d, 0x00, 0x00, // ....;.......`...
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x38, 0x17, 0x00, 0x00, // ....;.......8...
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x09, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x0a, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x0b, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x0d, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x0e, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, // ....;...........
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x10, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x11, 0x30, 0x00, 0x00, // ....;...y....0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x12, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x13, 0x30, 0x00, 0x00, // ....;........0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, // ....;...........
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x14, 0x30, 0x00, 0x00, // ....;...y....0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x40, 0x30, 0x00, 0x00, // ....;.......@0..
+ 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xda, 0x2d, 0x00, 0x00, // ....;........-..
+ 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe6, 0x53, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....>....S......
+ 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, // 9...........5...
+ 0xe6, 0x53, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x59, 0x50, 0x00, 0x00, // .S..=.......YP..
+ 0xa8, 0x27, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x07, 0x30, 0x00, 0x00, 0x59, 0x50, 0x00, 0x00, // .'..>....0..YP..
+ 0x39, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x51, 0x58, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // 9.......QX......
+ 0x07, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x60, 0x0d, 0x00, 0x00, 0x51, 0x58, 0x00, 0x00, // .0..>...`...QX..
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x65, 0x60, 0x00, 0x00, 0x20, 0x61, 0x00, 0x00, // =.......e`.. a..
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x30, 0x00, 0x00, 0x65, 0x60, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, // >....0..e`..9...
+ 0x0d, 0x00, 0x00, 0x00, 0x9d, 0x58, 0x00, 0x00, 0xe2, 0x0b, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, // .....X.......0..
+ 0x3e, 0x00, 0x03, 0x00, 0x38, 0x17, 0x00, 0x00, 0x9d, 0x58, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, // >...8....X..A...
+ 0x8b, 0x02, 0x00, 0x00, 0xae, 0x34, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, // .....4..B...A...
+ 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfa, 0x1e, 0x00, 0x00, // ....=...........
+ 0xae, 0x34, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xfc, 0x33, 0x00, 0x00, // .4...........3..
+ 0xfa, 0x1e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x7c, 0x3a, 0x00, 0x00, // ............|:..
+ 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xfc, 0x33, 0x00, 0x00, 0x29, 0x2b, 0x00, 0x00, // .........3..)+..
+ 0xf5, 0x61, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x29, 0x2b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .a......)+..=...
+ 0x13, 0x00, 0x00, 0x00, 0x6c, 0x1d, 0x00, 0x00, 0xa8, 0x27, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ....l....'..Q...
+ 0x0d, 0x00, 0x00, 0x00, 0x83, 0x4d, 0x00, 0x00, 0x6c, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....M..l.......
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf0, 0x52, 0x00, 0x00, 0x6c, 0x1d, 0x00, 0x00, // Q........R..l...
+ 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3e, 0x00, 0x00, // ....P........>..
+ 0x83, 0x4d, 0x00, 0x00, 0xf0, 0x52, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .M...R......A...
+ 0xc3, 0x02, 0x00, 0x00, 0x45, 0x1f, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x32, 0x0a, 0x00, 0x00, // ....E...B...2...
+ 0x3d, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, 0x19, 0x31, 0x00, 0x00, 0x45, 0x1f, 0x00, 0x00, // =...F....1..E...
+ 0x90, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x45, 0x25, 0x00, 0x00, 0xd9, 0x3e, 0x00, 0x00, // ........E%...>..
+ 0x19, 0x31, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xb3, 0x2a, 0x00, 0x00, // .1..O........*..
+ 0x45, 0x25, 0x00, 0x00, 0x45, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // E%..E%..........
+ 0x3e, 0x00, 0x03, 0x00, 0x09, 0x30, 0x00, 0x00, 0xb3, 0x2a, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >....0...*..A...
+ 0x9b, 0x02, 0x00, 0x00, 0x0c, 0x40, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x00, // .....@..B...>...
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x80, 0x55, 0x00, 0x00, 0x0c, 0x40, 0x00, 0x00, // =........U...@..
+ 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x91, 0x44, 0x00, 0x00, 0x80, 0x55, 0x00, 0x00, // O........D...U..
+ 0x80, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .U..........>...
+ 0x0a, 0x30, 0x00, 0x00, 0x91, 0x44, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, // .0...D..A.......
+ 0xc9, 0x3e, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, // .>..B...>.......
+ 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9f, 0x60, 0x00, 0x00, 0xc9, 0x3e, 0x00, 0x00, // =........`...>..
+ 0x3e, 0x00, 0x03, 0x00, 0x0b, 0x30, 0x00, 0x00, 0x9f, 0x60, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, // >....0...`..9...
+ 0x0d, 0x00, 0x00, 0x00, 0x4a, 0x56, 0x00, 0x00, 0x91, 0x0e, 0x00, 0x00, 0x09, 0x30, 0x00, 0x00, // ....JV.......0..
+ 0x0a, 0x30, 0x00, 0x00, 0x0b, 0x30, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, // .0...0..A.......
+ 0x6b, 0x52, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, // kR..B...A.......
+ 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, 0x6b, 0x52, 0x00, 0x00, // =........2..kR..
+ 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc3, 0x39, 0x00, 0x00, 0xd7, 0x32, 0x00, 0x00, // .........9...2..
+ 0xfc, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbe, 0x41, 0x00, 0x00, // .............A..
+ 0x4a, 0x56, 0x00, 0x00, 0xc3, 0x39, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, // JV...9..A.......
+ 0x42, 0x29, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, // B)..B...A.......
+ 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x58, 0x41, 0x00, 0x00, 0x42, 0x29, 0x00, 0x00, // =.......XA..B)..
+ 0x88, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8f, 0x20, 0x00, 0x00, 0xbe, 0x41, 0x00, 0x00, // ......... ...A..
+ 0x58, 0x41, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb6, 0x10, 0x00, 0x00, // XA..............
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x8f, 0x20, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ....+.... ......
+ 0x8a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x68, 0x21, 0x00, 0x00, // ....P.......h!..
+ 0xb6, 0x10, 0x00, 0x00, 0xb6, 0x10, 0x00, 0x00, 0xb6, 0x10, 0x00, 0x00, 0xb6, 0x10, 0x00, 0x00, // ................
+ 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x52, 0x48, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A.......RH..B...
+ 0x35, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfa, 0x1c, 0x00, 0x00, // 5...=...........
+ 0x52, 0x48, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x30, 0x00, 0x00, 0xfa, 0x1c, 0x00, 0x00, // RH..>....0......
+ 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x86, 0x38, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A........8..B...
+ 0x38, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfd, 0x60, 0x00, 0x00, // 8...=........`..
+ 0x86, 0x38, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0e, 0x30, 0x00, 0x00, 0xfd, 0x60, 0x00, 0x00, // .8..>....0...`..
+ 0x3e, 0x00, 0x03, 0x00, 0x0f, 0x30, 0x00, 0x00, 0x68, 0x21, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, // >....0..h!..9...
+ 0x1d, 0x00, 0x00, 0x00, 0xdb, 0x4e, 0x00, 0x00, 0xd2, 0x0c, 0x00, 0x00, 0x0d, 0x30, 0x00, 0x00, // .....N.......0..
+ 0x0e, 0x30, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0c, 0x30, 0x00, 0x00, // .0...0..>....0..
+ 0xdb, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x37, 0x1c, 0x00, 0x00, // .N..=.......7...
+ 0x38, 0x17, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x4e, 0x00, 0x00, // 8...=........N..
+ 0x60, 0x0d, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8e, 0x2f, 0x00, 0x00, // `............/..
+ 0x37, 0x1c, 0x00, 0x00, 0x0c, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // 7....N..=.......
+ 0xa9, 0x1d, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .....0..........
+ 0xdd, 0x4b, 0x00, 0x00, 0xa9, 0x1d, 0x00, 0x00, 0x8e, 0x2f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .K......./..>...
+ 0x0c, 0x30, 0x00, 0x00, 0xdd, 0x4b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .0...K..=.......
+ 0x8a, 0x59, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x10, 0x00, 0x00, // .Y...0..>.......
+ 0x8a, 0x59, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x7c, 0x3a, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // .Y......|:......
+ 0xf5, 0x61, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xb9, 0x50, 0x00, 0x00, // .a..A........P..
+ 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // B...A.......=...
+ 0x0d, 0x00, 0x00, 0x00, 0x39, 0x3f, 0x00, 0x00, 0xb9, 0x50, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, // ....9?...P......
+ 0x09, 0x00, 0x00, 0x00, 0xfd, 0x33, 0x00, 0x00, 0x39, 0x3f, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // .....3..9?......
+ 0xf7, 0x00, 0x03, 0x00, 0x3d, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, // ....=^..........
+ 0xfd, 0x33, 0x00, 0x00, 0x2a, 0x2b, 0x00, 0x00, 0xf8, 0x61, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // .3..*+...a......
+ 0x2a, 0x2b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x6d, 0x1d, 0x00, 0x00, // *+..=.......m...
+ 0xa8, 0x27, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x84, 0x4d, 0x00, 0x00, // .'..Q........M..
+ 0x6d, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // m.......Q.......
+ 0xf1, 0x52, 0x00, 0x00, 0x6d, 0x1d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, // .R..m.......P...
+ 0x18, 0x00, 0x00, 0x00, 0xda, 0x3e, 0x00, 0x00, 0x84, 0x4d, 0x00, 0x00, 0xf1, 0x52, 0x00, 0x00, // .....>...M...R..
+ 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xc3, 0x02, 0x00, 0x00, 0x46, 0x1f, 0x00, 0x00, // ....A.......F...
+ 0x42, 0x13, 0x00, 0x00, 0x32, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, // B...2...=...F...
+ 0x1a, 0x31, 0x00, 0x00, 0x46, 0x1f, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, // .1..F...........
+ 0x7e, 0x25, 0x00, 0x00, 0xda, 0x3e, 0x00, 0x00, 0x1a, 0x31, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, // ~%...>...1..O...
+ 0x13, 0x00, 0x00, 0x00, 0x60, 0x28, 0x00, 0x00, 0x7e, 0x25, 0x00, 0x00, 0x7e, 0x25, 0x00, 0x00, // ....`(..~%..~%..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, // ........A.......
+ 0xf2, 0x3d, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .=..B...>...=...
+ 0x1d, 0x00, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00, 0xf2, 0x3d, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, // ....8 ...=..O...
+ 0x13, 0x00, 0x00, 0x00, 0xc2, 0x5c, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00, // ........8 ..8 ..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, // ................
+ 0x0b, 0x17, 0x00, 0x00, 0x60, 0x28, 0x00, 0x00, 0xc2, 0x5c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....`(......=...
+ 0xfc, 0x01, 0x00, 0x00, 0xfe, 0x56, 0x00, 0x00, 0x4f, 0x12, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....V..O...>...
+ 0x11, 0x30, 0x00, 0x00, 0xfe, 0x56, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, // .0...V..=.......
+ 0xdf, 0x22, 0x00, 0x00, 0x36, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x12, 0x30, 0x00, 0x00, // ."..6...>....0..
+ 0xdf, 0x22, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x13, 0x30, 0x00, 0x00, 0x0b, 0x17, 0x00, 0x00, // ."..>....0......
+ 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x27, 0x4f, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, // 9.......'O......
+ 0x11, 0x30, 0x00, 0x00, 0x12, 0x30, 0x00, 0x00, 0x13, 0x30, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .0...0...0..>...
+ 0x10, 0x30, 0x00, 0x00, 0x27, 0x4f, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, // .0..'O..A.......
+ 0xaf, 0x34, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, // .4..B...A.......
+ 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfb, 0x1e, 0x00, 0x00, 0xaf, 0x34, 0x00, 0x00, // =............4..
+ 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xfe, 0x33, 0x00, 0x00, 0xfb, 0x1e, 0x00, 0x00, // .........3......
+ 0x8a, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xf6, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........a......
+ 0xfa, 0x00, 0x04, 0x00, 0xfe, 0x33, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0xf6, 0x61, 0x00, 0x00, // .....3...+...a..
+ 0xf8, 0x00, 0x02, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .....+..=.......
+ 0x96, 0x1d, 0x00, 0x00, 0x10, 0x30, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, // .....0..O.......
+ 0x6d, 0x4c, 0x00, 0x00, 0x96, 0x1d, 0x00, 0x00, 0x96, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // mL..............
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // ........A.......
+ 0x07, 0x5e, 0x00, 0x00, 0x10, 0x30, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .^...0......=...
+ 0x0d, 0x00, 0x00, 0x00, 0xdf, 0x3a, 0x00, 0x00, 0x07, 0x5e, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, // .....:...^......
+ 0x18, 0x00, 0x00, 0x00, 0x2b, 0x24, 0x00, 0x00, 0x6d, 0x4c, 0x00, 0x00, 0xdf, 0x3a, 0x00, 0x00, // ....+$..mL...:..
+ 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x96, 0x2f, 0x00, 0x00, 0x10, 0x30, 0x00, 0x00, // A......../...0..
+ 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x50, 0x3d, 0x00, 0x00, // ....=.......P=..
+ 0x96, 0x2f, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x43, 0x00, 0x00, // ./..Q.......gC..
+ 0x2b, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // +$......Q.......
+ 0x60, 0x53, 0x00, 0x00, 0x2b, 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // `S..+$......Q...
+ 0x0d, 0x00, 0x00, 0x00, 0x47, 0x5f, 0x00, 0x00, 0x2b, 0x24, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....G_..+$......
+ 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd4, 0x4e, 0x00, 0x00, 0x67, 0x43, 0x00, 0x00, // P........N..gC..
+ 0x60, 0x53, 0x00, 0x00, 0x47, 0x5f, 0x00, 0x00, 0x50, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // `S..G_..P=..>...
+ 0x10, 0x30, 0x00, 0x00, 0xd4, 0x4e, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xf6, 0x61, 0x00, 0x00, // .0...N.......a..
+ 0xf8, 0x00, 0x02, 0x00, 0xf6, 0x61, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, // .....a..A.......
+ 0xba, 0x50, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, // .P..B...A.......
+ 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3a, 0x3f, 0x00, 0x00, 0xba, 0x50, 0x00, 0x00, // =.......:?...P..
+ 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0x3a, 0x3f, 0x00, 0x00, // .........3..:?..
+ 0x19, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xf7, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........a......
+ 0xfa, 0x00, 0x04, 0x00, 0xff, 0x33, 0x00, 0x00, 0x04, 0x2b, 0x00, 0x00, 0xf7, 0x61, 0x00, 0x00, // .....3...+...a..
+ 0xf8, 0x00, 0x02, 0x00, 0x04, 0x2b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .....+..=.......
+ 0x5d, 0x1d, 0x00, 0x00, 0x10, 0x30, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, // ]....0..O.......
+ 0x68, 0x5c, 0x00, 0x00, 0x5d, 0x1d, 0x00, 0x00, 0x5d, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // h...]...].......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
+ 0x10, 0x30, 0x00, 0x00, 0x68, 0x5c, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xf7, 0x61, 0x00, 0x00, // .0..h........a..
+ 0xf8, 0x00, 0x02, 0x00, 0xf7, 0x61, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, // .....a..A.......
+ 0xe4, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x35, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .G..B...5...=...
+ 0x1d, 0x00, 0x00, 0x00, 0xaf, 0x3c, 0x00, 0x00, 0xe4, 0x47, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....<...G..=...
+ 0x1d, 0x00, 0x00, 0x00, 0xf6, 0x4a, 0x00, 0x00, 0x10, 0x30, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, // .....J...0......
+ 0x1d, 0x00, 0x00, 0x00, 0xde, 0x28, 0x00, 0x00, 0xf6, 0x4a, 0x00, 0x00, 0xaf, 0x3c, 0x00, 0x00, // .....(...J...<..
+ 0x3e, 0x00, 0x03, 0x00, 0x10, 0x30, 0x00, 0x00, 0xde, 0x28, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >....0...(..=...
+ 0x0d, 0x00, 0x00, 0x00, 0x16, 0x5b, 0x00, 0x00, 0x38, 0x17, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....[..8...=...
+ 0x0d, 0x00, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0x60, 0x0d, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, // .....N..`.......
+ 0x0d, 0x00, 0x00, 0x00, 0x8f, 0x2f, 0x00, 0x00, 0x16, 0x5b, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, // ...../...[...N..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xaa, 0x1d, 0x00, 0x00, 0x10, 0x30, 0x00, 0x00, // =............0..
+ 0x8e, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xde, 0x4b, 0x00, 0x00, 0xaa, 0x1d, 0x00, 0x00, // .........K......
+ 0x8f, 0x2f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x10, 0x30, 0x00, 0x00, 0xde, 0x4b, 0x00, 0x00, // ./..>....0...K..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8b, 0x59, 0x00, 0x00, 0x10, 0x30, 0x00, 0x00, // =........Y...0..
+ 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x8b, 0x59, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, // >........Y......
+ 0x3d, 0x5e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf8, 0x61, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, // =^.......a..A...
+ 0x8b, 0x02, 0x00, 0x00, 0xbb, 0x50, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, // .....P..B...A...
+ 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x3f, 0x00, 0x00, // ....=.......;?..
+ 0xbb, 0x50, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, // .P...........4..
+ 0x3b, 0x3f, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x3c, 0x5e, 0x00, 0x00, // ;?..........<^..
+ 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x00, 0xf4, 0x36, 0x00, 0x00, // .........4...6..
+ 0xf9, 0x61, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf4, 0x36, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .a.......6..>...
+ 0xa2, 0x10, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x3c, 0x5e, 0x00, 0x00, // ............<^..
+ 0xf8, 0x00, 0x02, 0x00, 0xf9, 0x61, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, // .....a..A.......
+ 0xbc, 0x50, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, // .P..B...A.......
+ 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3c, 0x3f, 0x00, 0x00, 0xbc, 0x50, 0x00, 0x00, // =.......<?...P..
+ 0xb4, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x3c, 0x3f, 0x00, 0x00, // .........4..<?..
+ 0xa2, 0x0b, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xfd, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........=......
+ 0xfa, 0x00, 0x04, 0x00, 0x01, 0x34, 0x00, 0x00, 0xc0, 0x29, 0x00, 0x00, 0xfd, 0x3d, 0x00, 0x00, // .....4...)...=..
+ 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x29, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // .....)..=.......
+ 0xc7, 0x28, 0x00, 0x00, 0x4f, 0x12, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x30, 0x00, 0x00, // .(..O...>....0..
+ 0xc7, 0x28, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xcc, 0x22, 0x00, 0x00, // .(..=........"..
+ 0x36, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x40, 0x30, 0x00, 0x00, 0xcc, 0x22, 0x00, 0x00, // 6...>...@0..."..
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x80, 0x22, 0x00, 0x00, 0x20, 0x61, 0x00, 0x00, // =........".. a..
+ 0x3e, 0x00, 0x03, 0x00, 0xda, 0x2d, 0x00, 0x00, 0x80, 0x22, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, // >....-..."..9...
+ 0x1d, 0x00, 0x00, 0x00, 0x9e, 0x58, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x14, 0x30, 0x00, 0x00, // .....X.......0..
+ 0x40, 0x30, 0x00, 0x00, 0xda, 0x2d, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, // @0...-..>.......
+ 0x9e, 0x58, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xb0, 0x34, 0x00, 0x00, // .X..A........4..
+ 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // B...A.......=...
+ 0x0d, 0x00, 0x00, 0x00, 0xfc, 0x1e, 0x00, 0x00, 0xb0, 0x34, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, // .........4......
+ 0x09, 0x00, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0xfc, 0x1e, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // .....4..........
+ 0xf7, 0x00, 0x03, 0x00, 0xfa, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, // .....a..........
+ 0x02, 0x34, 0x00, 0x00, 0x05, 0x2b, 0x00, 0x00, 0xfa, 0x61, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // .4...+...a......
+ 0x05, 0x2b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x97, 0x1d, 0x00, 0x00, // .+..=...........
+ 0x18, 0x0e, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x6e, 0x4c, 0x00, 0x00, // ....O.......nL..
+ 0x97, 0x1d, 0x00, 0x00, 0x97, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x08, 0x5e, 0x00, 0x00, // ....A........^..
+ 0x18, 0x0e, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // ........=.......
+ 0xe0, 0x3a, 0x00, 0x00, 0x08, 0x5e, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, // .:...^..........
+ 0x2c, 0x24, 0x00, 0x00, 0x6e, 0x4c, 0x00, 0x00, 0xe0, 0x3a, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ,$..nL...:..A...
+ 0x8a, 0x02, 0x00, 0x00, 0x97, 0x2f, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, // ...../..........
+ 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x51, 0x3d, 0x00, 0x00, 0x97, 0x2f, 0x00, 0x00, // =.......Q=.../..
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x68, 0x43, 0x00, 0x00, 0x2c, 0x24, 0x00, 0x00, // Q.......hC..,$..
+ 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x61, 0x53, 0x00, 0x00, // ....Q.......aS..
+ 0x2c, 0x24, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // ,$......Q.......
+ 0x48, 0x5f, 0x00, 0x00, 0x2c, 0x24, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, // H_..,$......P...
+ 0x1d, 0x00, 0x00, 0x00, 0xd5, 0x4e, 0x00, 0x00, 0x68, 0x43, 0x00, 0x00, 0x61, 0x53, 0x00, 0x00, // .....N..hC..aS..
+ 0x48, 0x5f, 0x00, 0x00, 0x51, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, // H_..Q=..>.......
+ 0xd5, 0x4e, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xfa, 0x61, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // .N.......a......
+ 0xfa, 0x61, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xbd, 0x50, 0x00, 0x00, // .a..A........P..
+ 0x42, 0x13, 0x00, 0x00, 0x41, 0x0a, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // B...A.......=...
+ 0x0d, 0x00, 0x00, 0x00, 0x3d, 0x3f, 0x00, 0x00, 0xbd, 0x50, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, // ....=?...P......
+ 0x09, 0x00, 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x3d, 0x3f, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, // .....4..=?......
+ 0xf7, 0x00, 0x03, 0x00, 0x2a, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, // ....*...........
+ 0x03, 0x34, 0x00, 0x00, 0x06, 0x2b, 0x00, 0x00, 0x2a, 0x1a, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // .4...+..*.......
+ 0x06, 0x2b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x5e, 0x1d, 0x00, 0x00, // .+..=.......^...
+ 0x18, 0x0e, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x69, 0x5c, 0x00, 0x00, // ....O.......i...
+ 0x5e, 0x1d, 0x00, 0x00, 0x5e, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ^...^...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, // ........>.......
+ 0x69, 0x5c, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x2a, 0x1a, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // i.......*.......
+ 0x2a, 0x1a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xed, 0x38, 0x00, 0x00, // *...=........8..
+ 0x60, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xca, 0x1d, 0x00, 0x00, // `...=...........
+ 0x18, 0x0e, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd1, 0x32, 0x00, 0x00, // .............2..
+ 0xca, 0x1d, 0x00, 0x00, 0xed, 0x38, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, 0x00, 0x00, // .....8..>.......
+ 0xd1, 0x32, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8f, 0x49, 0x00, 0x00, // .2..=........I..
+ 0x18, 0x0e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x87, 0x4e, 0x00, 0x00, // ....A........N..
+ 0x42, 0x13, 0x00, 0x00, 0x35, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // B...5...=.......
+ 0x3f, 0x21, 0x00, 0x00, 0x87, 0x4e, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // ?!...N..........
+ 0x33, 0x2a, 0x00, 0x00, 0x8f, 0x49, 0x00, 0x00, 0x3f, 0x21, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // 3*...I..?!..>...
+ 0xa2, 0x10, 0x00, 0x00, 0x33, 0x2a, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xfd, 0x3d, 0x00, 0x00, // ....3*.......=..
+ 0xf8, 0x00, 0x02, 0x00, 0xfd, 0x3d, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x3c, 0x5e, 0x00, 0x00, // .....=......<^..
+ 0xf8, 0x00, 0x02, 0x00, 0x3c, 0x5e, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x3d, 0x5e, 0x00, 0x00, // ....<^......=^..
+ 0xf8, 0x00, 0x02, 0x00, 0x3d, 0x5e, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x7c, 0x3a, 0x00, 0x00, // ....=^......|:..
+ 0xf8, 0x00, 0x02, 0x00, 0x7c, 0x3a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....|:..=.......
+ 0x7d, 0x40, 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd5, 0x40, 0x00, 0x00, // }@......>....@..
+ 0x7d, 0x40, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // }@......8....
};
-static const uint8_t fs_nanovg_fill_dx9[1583] =
+static const uint8_t fs_nanovg_fill_dx9[1585] =
{
- 0x46, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x08, 0x00, 0x05, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x08, 0x00, 0x05, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0e, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x52, // 0......u_extentR
0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x01, 0x09, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x69, 0x6e, // adius.......u_in
0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x12, 0x01, 0x06, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x6f, // nerCol.......u_o
@@ -811,100 +843,101 @@ static const uint8_t fs_nanovg_fill_dx9[1583] =
0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x01, 0x0a, 0x00, 0x01, 0x00, 0x11, 0x75, 0x5f, // _params.......u_
0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x12, // scissorExtScale.
0x01, 0x08, 0x00, 0x01, 0x00, 0x0c, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, 0x4d, // ......u_scissorM
- 0x61, 0x74, 0x13, 0x01, 0x00, 0x00, 0x03, 0x00, 0x94, 0x05, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, // at..............
- 0x61, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00, 0x00, 0x03, // a.CTAB....W.....
- 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x01, // ..............P.
- 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0xc4, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x00, 0x01, 0x00, // ................
- 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, // ................
- 0x00, 0x00, 0x02, 0x00, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x01, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x01, 0x00, // ......(.........
- 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x02, 0x00, // ..........1.....
- 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x01, // ..............C.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x00, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, // ..s_tex.........
- 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, // ..........u_exte
- 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x00, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, // ntRadius........
- 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x6e, 0x65, // ..........u_inne
- 0x72, 0x43, 0x6f, 0x6c, 0x00, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x00, // rCol.u_outerCol.
- 0x75, 0x5f, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x00, 0xab, 0xab, 0xab, 0x03, 0x00, // u_paintMat......
- 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, 0x6f, 0x72, // params.u_scissor
- 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x00, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, // ExtScale.u_sciss
- 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // orMat.ps_3_0.Mic
- 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
- 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
- 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x0f, 0xa0, 0x00, 0x00, // 10.1..Q.........
- 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0x3f, 0x51, 0x00, // .?...@.......?Q.
- 0x00, 0x05, 0x0c, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, // ............@@..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
- 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x03, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ........U.......
- 0x03, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x02, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xe4, 0x8b, 0x08, 0x00, 0xe4, 0xa1, 0x01, 0x00, // ................
- 0x00, 0x02, 0x01, 0x00, 0x0b, 0x80, 0x0b, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
- 0x13, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0xee, 0xa1, 0x01, 0x00, 0x00, 0x80, 0x05, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, // ........U.......
- 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x55, 0xa0, 0x0b, 0x00, // ............U...
- 0xaa, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x8c, 0x0b, 0x00, // ............U...
- 0xff, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x0a, 0x00, // ............U...
- 0x55, 0xa0, 0x0a, 0x00, 0x00, 0x03, 0x01, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x80, 0x0b, 0x00, // U...........U...
- 0xff, 0xa0, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x55, 0x90, 0x0b, 0x00, // ............U...
- 0xff, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, // ............U...
- 0xaa, 0x80, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x80, 0x0a, 0x00, 0xff, 0xa0, 0x05, 0x00, // ..#.............
- 0x00, 0x03, 0x02, 0x00, 0x03, 0x80, 0x04, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, 0x04, 0x00, // ............U...
- 0x00, 0x04, 0x02, 0x00, 0x03, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, // ................
- 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x03, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x05, 0x00, // ................
- 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0c, 0x80, 0x09, 0x00, 0xaa, 0xa1, 0x09, 0x00, // ................
- 0x44, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0c, 0x80, 0x02, 0x00, 0xe4, 0x81, 0x02, 0x00, // D...............
- 0x44, 0x8b, 0x0b, 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x80, 0x02, 0x00, 0xee, 0x80, 0x0c, 0x00, // D...............
- 0x00, 0xa0, 0x5a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x03, 0x00, // ..Z.............
- 0xe4, 0x80, 0x0c, 0x00, 0x00, 0xa0, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, // ................
- 0xff, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0x0b, 0x00, // ................
- 0x00, 0x03, 0x01, 0x00, 0x04, 0x80, 0x02, 0x00, 0xaa, 0x80, 0x02, 0x00, 0xff, 0x80, 0x0a, 0x00, // ................
- 0x00, 0x03, 0x02, 0x00, 0x04, 0x80, 0x01, 0x00, 0xaa, 0x80, 0x0c, 0x00, 0x00, 0xa0, 0x02, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0x02, 0x00, 0xaa, 0x80, 0x02, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0xaa, 0xa1, 0x04, 0x00, // ................
- 0x00, 0x04, 0x00, 0x00, 0x08, 0x80, 0x0a, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
- 0xff, 0x80, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x80, 0x0a, 0x00, 0x00, 0xa0, 0x05, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x18, 0x80, 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0x00, 0x80, 0x05, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x80, 0x06, 0x00, // ............U...
- 0x00, 0x02, 0x03, 0x00, 0x01, 0x80, 0x09, 0x00, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x02, 0x03, 0x00, // ................
- 0x02, 0x80, 0x09, 0x00, 0x55, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x05, 0x80, 0x02, 0x00, // ....U...........
- 0xd4, 0x80, 0x03, 0x00, 0xd4, 0x80, 0x42, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x01, 0x00, // ......B.........
- 0xe8, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0d, 0x80, 0x01, 0x00, // ................
- 0x77, 0x81, 0x0a, 0x00, 0xa7, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x03, 0x00, 0x07, 0x80, 0x02, 0x00, // w...............
- 0xff, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x02, 0x00, 0x07, 0x80, 0x01, 0x00, // ......X.........
- 0xaa, 0x8c, 0x03, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x02, 0x00, // ..........X.....
- 0x0e, 0x80, 0x01, 0x00, 0xff, 0x8c, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x05, 0x00, // ................
- 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x06, 0x00, 0xe4, 0xa0, 0x05, 0x00, // ................
- 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x29, 0x00, // ........U.....).
- 0x02, 0x02, 0x0a, 0x00, 0xff, 0xa0, 0x01, 0x00, 0x55, 0x80, 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, // ........U.......
- 0x0f, 0x80, 0x0b, 0x00, 0xff, 0xa0, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, // ......*.........
- 0x02, 0x80, 0x0c, 0x00, 0x55, 0xa0, 0x29, 0x00, 0x02, 0x02, 0x0a, 0x00, 0xff, 0xa0, 0x01, 0x00, // ....U.).........
- 0x55, 0x80, 0x42, 0x00, 0x00, 0x03, 0x04, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, // U.B.............
- 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x05, 0x00, 0x07, 0x80, 0x04, 0x00, 0xff, 0x80, 0x04, 0x00, // ................
- 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x04, 0x00, 0x07, 0x80, 0x01, 0x00, 0xaa, 0x8c, 0x05, 0x00, // ..X.............
- 0xe4, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x04, 0x00, 0x0e, 0x80, 0x01, 0x00, // ......X.........
- 0xff, 0x8c, 0x04, 0x00, 0x00, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x04, 0x00, // ................
- 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x03, 0x00, // ................
- 0x0f, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x06, 0x00, 0xe4, 0xa0, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, // ..........*.....
- 0x00, 0x02, 0x03, 0x00, 0x0f, 0x80, 0x0c, 0x00, 0x00, 0xa0, 0x2b, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..........+...+.
- 0x00, 0x00, 0x58, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x8c, 0x02, 0x00, // ..X.............
- 0xe4, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x0f, 0x80, 0x06, 0x00, // ................
- 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0x81, 0x07, 0x00, // ................
- 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xff, 0x80, 0x02, 0x00, // ................
- 0xe4, 0x80, 0x06, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x00, 0x00, // ................
- 0x55, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, // U.....X.........
- 0xaa, 0x81, 0x02, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ...............
+ 0x61, 0x74, 0x13, 0x01, 0x00, 0x00, 0x03, 0x00, 0x94, 0x05, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, // at..............
+ 0xfe, 0xff, 0x61, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00, // ..a.CTAB....W...
+ 0x00, 0x03, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
+ 0x50, 0x01, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, // P...............
+ 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x00, // ................
+ 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, // ................
+ 0x02, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0xff, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
+ 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, // ........(.......
+ 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, // ............1...
+ 0x02, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x43, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, // C...............
+ 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x00, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00, // ....s_tex.......
+ 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x65, 0x78, // ............u_ex
+ 0x74, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x00, 0xab, 0x01, 0x00, 0x03, 0x00, // tentRadius......
+ 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x00, 0x75, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, // nerCol.u_outerCo
+ 0x6c, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x00, 0xab, 0xab, 0xab, // l.u_paintMat....
+ 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x75, 0x5f, 0x73, 0x63, 0x69, 0x73, 0x73, // u_params.u_sciss
+ 0x6f, 0x72, 0x45, 0x78, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x00, 0x75, 0x5f, 0x73, 0x63, 0x69, // orExtScale.u_sci
+ 0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, // ssorMat.ps_3_0.M
+ 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, // icrosoft (R) HLS
+ 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, // L Shader Compile
+ 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x0f, 0xa0, // r 10.1..Q.......
+ 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0x3f, // ...?...@.......?
+ 0x51, 0x00, 0x00, 0x05, 0x0c, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, // Q.............@@
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x00, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x01, 0x00, 0x03, 0x90, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x03, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, // ..........U.....
+ 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, // ................
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0xa0, // ................
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xe4, 0x8b, 0x08, 0x00, 0xe4, 0xa1, // ................
+ 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0b, 0x80, 0x0b, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, // ................
+ 0x00, 0x00, 0x13, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0xee, 0xa1, 0x01, 0x00, 0x00, 0x80, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, 0x80, 0x00, 0x00, 0x00, 0x80, // ..........U.....
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x55, 0xa0, // ..............U.
+ 0x0b, 0x00, 0xaa, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x8c, // ..............U.
+ 0x0b, 0x00, 0xff, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, // ..............U.
+ 0x0a, 0x00, 0x55, 0xa0, 0x0a, 0x00, 0x00, 0x03, 0x01, 0x00, 0x04, 0x80, 0x00, 0x00, 0x55, 0x80, // ..U...........U.
+ 0x0b, 0x00, 0xff, 0xa0, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x55, 0x90, // ..............U.
+ 0x0b, 0x00, 0xff, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, // ..............U.
+ 0x01, 0x00, 0xaa, 0x80, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x80, 0x0a, 0x00, 0xff, 0xa0, // ....#...........
+ 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x03, 0x80, 0x04, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, // ..............U.
+ 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x03, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, // ................
+ 0x02, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x03, 0x80, 0x02, 0x00, 0xe4, 0x80, // ................
+ 0x05, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0c, 0x80, 0x09, 0x00, 0xaa, 0xa1, // ................
+ 0x09, 0x00, 0x44, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0c, 0x80, 0x02, 0x00, 0xe4, 0x81, // ..D.............
+ 0x02, 0x00, 0x44, 0x8b, 0x0b, 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x80, 0x02, 0x00, 0xee, 0x80, // ..D.............
+ 0x0c, 0x00, 0x00, 0xa0, 0x5a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x80, 0x03, 0x00, 0xe4, 0x80, // ....Z...........
+ 0x03, 0x00, 0xe4, 0x80, 0x0c, 0x00, 0x00, 0xa0, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, // ................
+ 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, // ................
+ 0x0b, 0x00, 0x00, 0x03, 0x01, 0x00, 0x04, 0x80, 0x02, 0x00, 0xaa, 0x80, 0x02, 0x00, 0xff, 0x80, // ................
+ 0x0a, 0x00, 0x00, 0x03, 0x02, 0x00, 0x04, 0x80, 0x01, 0x00, 0xaa, 0x80, 0x0c, 0x00, 0x00, 0xa0, // ................
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0x02, 0x00, 0xaa, 0x80, // ................
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0xaa, 0xa1, // ................
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x80, 0x0a, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x80, // ................
+ 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x80, 0x0a, 0x00, 0x00, 0xa0, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x18, 0x80, 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0x00, 0x80, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x80, // ..............U.
+ 0x06, 0x00, 0x00, 0x02, 0x03, 0x00, 0x01, 0x80, 0x09, 0x00, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x02, // ................
+ 0x03, 0x00, 0x02, 0x80, 0x09, 0x00, 0x55, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x05, 0x80, // ......U.........
+ 0x02, 0x00, 0xd4, 0x80, 0x03, 0x00, 0xd4, 0x80, 0x42, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, // ........B.......
+ 0x01, 0x00, 0xe8, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0d, 0x80, // ................
+ 0x01, 0x00, 0x77, 0x81, 0x0a, 0x00, 0xa7, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x03, 0x00, 0x07, 0x80, // ..w.............
+ 0x02, 0x00, 0xff, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x02, 0x00, 0x07, 0x80, // ........X.......
+ 0x01, 0x00, 0xaa, 0x8c, 0x03, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, // ............X...
+ 0x02, 0x00, 0x0e, 0x80, 0x01, 0x00, 0xff, 0x8c, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0xe4, 0x80, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x06, 0x00, 0xe4, 0xa0, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0xe4, 0x80, // ..........U.....
+ 0x29, 0x00, 0x02, 0x02, 0x0a, 0x00, 0xff, 0xa0, 0x01, 0x00, 0x55, 0x80, 0x01, 0x00, 0x00, 0x02, // ).........U.....
+ 0x03, 0x00, 0x0f, 0x80, 0x0b, 0x00, 0xff, 0xa0, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, // ........*.......
+ 0x01, 0x00, 0x02, 0x80, 0x0c, 0x00, 0x55, 0xa0, 0x29, 0x00, 0x02, 0x02, 0x0a, 0x00, 0xff, 0xa0, // ......U.).......
+ 0x01, 0x00, 0x55, 0x80, 0x42, 0x00, 0x00, 0x03, 0x04, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, // ..U.B...........
+ 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x05, 0x00, 0x07, 0x80, 0x04, 0x00, 0xff, 0x80, // ................
+ 0x04, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x04, 0x00, 0x07, 0x80, 0x01, 0x00, 0xaa, 0x8c, // ....X...........
+ 0x05, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x04, 0x00, 0x0e, 0x80, // ........X.......
+ 0x01, 0x00, 0xff, 0x8c, 0x04, 0x00, 0x00, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, // ................
+ 0x04, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, // ................
+ 0x03, 0x00, 0x0f, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x06, 0x00, 0xe4, 0xa0, 0x2a, 0x00, 0x00, 0x00, // ............*...
+ 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x0f, 0x80, 0x0c, 0x00, 0x00, 0xa0, 0x2b, 0x00, 0x00, 0x00, // ............+...
+ 0x2b, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x8c, // +...X...........
+ 0x02, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x0f, 0x80, // ................
+ 0x06, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0x81, // ................
+ 0x07, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xff, 0x80, // ................
+ 0x02, 0x00, 0xe4, 0x80, 0x06, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, // ................
+ 0x00, 0x00, 0x55, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x08, 0x0f, 0x80, // ..U.....X.......
+ 0x00, 0x00, 0xaa, 0x81, 0x02, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00, // ................
+ 0x00, // .
};
-static const uint8_t fs_nanovg_fill_dx11[2362] =
+static const uint8_t fs_nanovg_fill_dx11[2364] =
{
- 0x46, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x08, 0x00, 0x0c, 0x75, 0x5f, 0x73, 0x63, 0x69, // FSH........u_sci
+ 0x46, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x08, 0x00, 0x0c, 0x75, 0x5f, 0x73, 0x63, 0x69, // FSH........u_sci
0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x13, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0a, 0x75, 0x5f, // ssorMat.......u_
0x70, 0x61, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x13, 0x00, 0x30, 0x00, 0x03, 0x00, 0x0a, 0x75, // paintMat..0....u
0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x12, 0x00, 0x60, 0x00, 0x01, 0x00, 0x0a, // _innerCol..`....
@@ -913,149 +946,149 @@ static const uint8_t fs_nanovg_fill_dx11[2362] =
0x6c, 0x65, 0x12, 0x00, 0x80, 0x00, 0x01, 0x00, 0x0e, 0x75, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, // le.......u_exten
0x74, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x00, 0x90, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, // tRadius.......u_
0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x00, 0xa0, 0x00, 0x01, 0x00, 0x05, 0x73, 0x5f, 0x74, // params.......s_t
- 0x65, 0x78, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x9c, 0x08, 0x44, 0x58, 0x42, 0x43, 0x21, 0x36, // ex0.......DXBC!6
- 0x2a, 0x19, 0x73, 0x28, 0xce, 0xe0, 0xff, 0xcd, 0x27, 0x27, 0x8e, 0x5c, 0x18, 0x73, 0x01, 0x00, // *.s(....''...s..
- 0x00, 0x00, 0x9c, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, // ..........,.....
- 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, // ......ISGNh.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ......P.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
- 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x53, 0x56, // ..............SV
- 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // _POSITION.TEXCOO
- 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, // RD....OSGN,.....
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...... .........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, // ..............SV
- 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xc4, 0x07, // _TARGET...SHDR..
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xf1, 0x01, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, // ..@.......Y...F.
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, // .........Z....`
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, // ......X....p....
- 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, // ..UU..b...2.....
- 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xc2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, // ..b...........e.
- 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x03, 0x00, // ... ......h.....
- 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, // ..8...2.......V.
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ......F. .......
- 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x80, // ..2...2.......F.
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, // ...............
- 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x32, 0x00, // ..F...........2.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x80, // ......F.......F.
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x32, 0x00, // .............2.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
- 0x00, 0x00, 0x46, 0x80, 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, // ..F. .A.........
- 0x00, 0x00, 0x32, 0x20, 0x00, 0x0e, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, // ..2 ..2.......F.
- 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x8a, 0x20, 0x00, 0x00, 0x00, // ..A......... ...
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, // .......@.....?..
- 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x12, 0x00, // .?........8.....
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, // ................
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2...".....
- 0x00, 0x00, 0x2a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, // ..*........@....
- 0x00, 0x40, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x08, 0x22, 0x00, // .@.@..........".
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x38, 0x00, 0x00, 0x08, 0x22, 0x00, // ...@.....?8...".
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, // ................
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, 0x22, 0x00, // .........3...".
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, // ...............@
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x33, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, // .....?3...B.....
- 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, // ..:........@....
- 0x80, 0x3f, 0x38, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, // .?8...".......*.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, // ................
- 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, // ..B.......:. ...
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, // .......@........
- 0x04, 0x03, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xc2, 0x00, // ..*.......8.....
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x84, // ......V.........
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xc2, 0x00, // .........2.....
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ........ .......
- 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0e, // ................
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ........ .......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa6, 0x8a, // ......2.........
- 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x80, // .A...........F.
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xc2, 0x00, // ...............
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x06, 0x04, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, // ......A.......4.
- 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, // ..........:.....
- 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, 0x12, 0x00, // ..*.......3.....
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, // ...............@
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x0a, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......4.........
- 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, // ...........@....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
- 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x0a, 0x10, 0x00, 0x00, 0x00, // ..B.............
- 0x00, 0x00, 0xe6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x05, 0x42, 0x00, // ..........K...B.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......*.........
- 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, // ..B.......*.....
- 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x42, 0x00, // ..............B.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x80, // ......*.......*.
- 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x32, 0x00, // .A...........2.
- 0x00, 0x0a, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, // ..B......... ...
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2a, 0x00, // .......@.....?*.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x20, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, // ....... ..B.....
- 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, // ..*......... ...
- 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, // ................
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // ..F. .A.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F. .........2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..F.......F. ...
- 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8...B.....
- 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0a, // ..8.... ........
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, // ......F.........
- 0x00, 0x01, 0x18, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, // ......B.......:.
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, // ..........@....
- 0x80, 0x3f, 0x1f, 0x00, 0x04, 0x03, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, // .?....*.......8.
- 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, // ..........V.....
- 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x32, 0x00, // .... .........2.
- 0x00, 0x0a, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa6, 0x0e, // ................
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, // ......E.........
- 0x00, 0x00, 0xe6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, // ..........F~....
- 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0b, 0xc2, 0x00, // ...`............
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x8a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, // ........ .......
- 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...@............
- 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, // .?...@8...r.....
- 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, // ..........F.....
- 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa6, 0x0a, // ..7...r.........
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, // ......F.......F.
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0xe2, 0x00, 0x10, 0x00, 0x01, 0x00, // ......7.........
- 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, // ................
- 0x00, 0x00, 0x56, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, // ..V.......8.....
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, // ......F.......F.
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x22, 0x00, // .........8...".
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, // ................
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......8.... ....
- 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, // ..V.......F.....
- 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, // ..........".....
- 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x40, // ..:. ..........@
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x04, 0x03, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, // .....@..........
- 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, // ..6.... .......@
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, // .....?...?...?..
- 0x80, 0x3f, 0x12, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, // .?........".....
- 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x40, // ..:. ..........@
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x1f, 0x00, 0x04, 0x03, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, // ....@@..........
- 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe6, 0x1a, // ..E.............
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, // ......F~.......`
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0b, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, // ..........b.....
- 0x00, 0x00, 0xa6, 0x8a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x40, // .... ..........@
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, // .........?...@..
- 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf6, 0x0f, // ..8...r.........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, // ......F.......7.
- 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, // ..r.......V.....
- 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, // ..F.......F.....
- 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0xe2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa6, 0x0a, // ..7.............
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x0e, // ..............V.
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
- 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, // ..........F.....
- 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..8.... ......F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // ......F. .......
- 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, // ................
- 0x00, 0x01, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0xb0, 0x00, // ..>.......
+ 0x65, 0x78, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x9c, 0x08, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, // ex0.........DXBC
+ 0x21, 0x36, 0x2a, 0x19, 0x73, 0x28, 0xce, 0xe0, 0xff, 0xcd, 0x27, 0x27, 0x8e, 0x5c, 0x18, 0x73, // !6*.s(....''...s
+ 0x01, 0x00, 0x00, 0x00, 0x9c, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
+ 0x9c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, // ........ISGNh...
+ 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........P.......
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, // ................
+ 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, // SV_POSITION.TEXC
+ 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, // OORD....OSGN,...
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, // SV_TARGET...SHDR
+ 0xc4, 0x07, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xf1, 0x01, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, // ....@.......Y...
+ 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, // F. .........Z...
+ 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, // .`......X....p..
+ 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, // ....UU..b...2...
+ 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xc2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....b...........
+ 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, // e.... ......h...
+ 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....8...2.......
+ 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // V.......F. .....
+ 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....2...2.......
+ 0x46, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, // F. .............
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, // ....F...........
+ 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // 2.......F.......
+ 0x46, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, // F. .............
+ 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, // 2.......F.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x80, 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .A.......
+ 0x08, 0x00, 0x00, 0x00, 0x32, 0x20, 0x00, 0x0e, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....2 ..2.......
+ 0x46, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x8a, 0x20, 0x00, // F...A......... .
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, // .........@.....?
+ 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, // ...?........8...
+ 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, // ........2..."...
+ 0x00, 0x00, 0x00, 0x00, 0x2a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, // ....*........@..
+ 0x00, 0x00, 0x00, 0x40, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x08, // ...@.@..........
+ 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0xc1, 0x00, 0x00, 0x00, // "...............
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x38, 0x00, 0x00, 0x08, // .....@.....?8...
+ 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // "...............
+ 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, // .. .........3...
+ 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // "...............
+ 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x33, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, // .@.....?3...B...
+ 0x00, 0x00, 0x00, 0x00, 0x3a, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, // ....:........@..
+ 0x00, 0x00, 0x80, 0x3f, 0x38, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...?8...".......
+ 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // *...............
+ 0x18, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, // ....B.......:. .
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........@......
+ 0x1f, 0x00, 0x04, 0x03, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, // ....*.......8...
+ 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ........V.......
+ 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, // .. .........2...
+ 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x03, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ........2.......
+ 0xa6, 0x8a, 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // .. .A...........
+ 0x46, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, // F. .............
+ 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........A.......
+ 0x34, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, // 4...........:...
+ 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, // ....*.......3...
+ 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x0a, 0xc2, 0x00, 0x10, 0x00, // .@......4.......
+ 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, // .............@..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x0f, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x0a, 0x10, 0x00, // ....B...........
+ 0x00, 0x00, 0x00, 0x00, 0xe6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x05, // ............K...
+ 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // B.......*.......
+ 0x00, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, // ....B.......*...
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, // ................
+ 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // B.......*.......
+ 0x2a, 0x80, 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, // *. .A...........
+ 0x32, 0x00, 0x00, 0x0a, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, // 2...B......... .
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, // .........@.....?
+ 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x20, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, // *........ ..B...
+ 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, // ....*......... .
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ................
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .A.......
+ 0x06, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ....F. .........
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, // 2...............
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....F.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, // ........8...B...
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....8.... ......
+ 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ........F.......
+ 0x12, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........B.......
+ 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, // :. ..........@..
+ 0x00, 0x00, 0x80, 0x3f, 0x1f, 0x00, 0x04, 0x03, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...?....*.......
+ 0x38, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, // 8...........V...
+ 0x01, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ...... .........
+ 0x32, 0x00, 0x00, 0x0a, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, // 2............. .
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, // ........E.......
+ 0x01, 0x00, 0x00, 0x00, 0xe6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, // ............F~..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0b, // .....`..........
+ 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x8a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x0a, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....@..........
+ 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, // ...?...@8...r...
+ 0x02, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, // ............F...
+ 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....7...r.......
+ 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ........F.......
+ 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0xe2, 0x00, 0x10, 0x00, // F.......7.......
+ 0x01, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, // ................
+ 0x01, 0x00, 0x00, 0x00, 0x56, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, // ....V.......8...
+ 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ........F.......
+ 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, // F. .........8...
+ 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // "...............
+ 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x20, 0x10, 0x00, // ........8.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ....V.......F...
+ 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, // ............"...
+ 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....:. .........
+ 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x04, 0x03, 0x1a, 0x00, 0x10, 0x00, // .@.....@........
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....6.... ......
+ 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, // .@.....?...?...?
+ 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, // ...?........"...
+ 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....:. .........
+ 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x1f, 0x00, 0x04, 0x03, 0x1a, 0x00, 0x10, 0x00, // .@....@@........
+ 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....E...........
+ 0xe6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F~......
+ 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0b, 0x62, 0x00, 0x10, 0x00, // .`..........b...
+ 0x00, 0x00, 0x00, 0x00, 0xa6, 0x8a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ...... .........
+ 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40, // .@.........?...@
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....8...r.......
+ 0xf6, 0x0f, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ........F.......
+ 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, // 7...r.......V...
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, // ....F.......F...
+ 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0xe2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....7...........
+ 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x56, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, // V.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ............F...
+ 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....8.... ......
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // F.......F. .....
+ 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, // ................
+ 0x15, 0x00, 0x00, 0x01, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0xb0, 0x00, // ....>.......
};
static const uint8_t fs_nanovg_fill_mtl[3462] =
{
- 0x46, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x07, 0x00, 0x0c, 0x75, 0x5f, 0x73, 0x63, 0x69, // FSH........u_sci
+ 0x46, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x07, 0x00, 0x0c, 0x75, 0x5f, 0x73, 0x63, 0x69, // FSH........u_sci
0x73, 0x73, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x03, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, // ssorMat.......u_
0x70, 0x61, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x03, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x75, // paintMat.......u
0x5f, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, // _innerCol.......
diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp b/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp
index 36a87ff7f25..dcd652c8c26 100644
--- a/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp
+++ b/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp
@@ -37,47 +37,6 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Wunused-result");
#include "fontstash.h"
BX_PRAGMA_DIAGNOSTIC_POP();
-BX_PRAGMA_DIAGNOSTIC_PUSH();
-BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4127) // warning C4127: conditional expression is constant
-#define LODEPNG_NO_COMPILE_ENCODER
-#define LODEPNG_NO_COMPILE_DISK
-#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
-#define LODEPNG_NO_COMPILE_ERROR_TEXT
-#define LODEPNG_NO_COMPILE_ALLOCATORS
-#define LODEPNG_NO_COMPILE_CPP
-#include <lodepng/lodepng.cpp>
-BX_PRAGMA_DIAGNOSTIC_POP();
-
-void* lodepng_malloc(size_t _size)
-{
- return ::malloc(_size);
-}
-
-void* lodepng_realloc(void* _ptr, size_t _size)
-{
- return ::realloc(_ptr, _size);
-}
-
-void lodepng_free(void* _ptr)
-{
- ::free(_ptr);
-}
-
-BX_PRAGMA_DIAGNOSTIC_PUSH();
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wmissing-field-initializers");
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow");
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wint-to-pointer-cast")
-#if BX_COMPILER_GCC >= 60000
-BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Wmisleading-indentation");
-BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Wshift-negative-value");
-#endif // BX_COMPILER_GCC >= 60000_
-#define STBI_MALLOC(_size) lodepng_malloc(_size)
-#define STBI_REALLOC(_ptr, _size) lodepng_realloc(_ptr, _size)
-#define STBI_FREE(_ptr) lodepng_free(_ptr)
-#define STB_IMAGE_IMPLEMENTATION
-#include <stb/stb_image.c>
-BX_PRAGMA_DIAGNOSTIC_POP();
-
#ifdef _MSC_VER
#pragma warning(disable: 4100) // unreferenced formal parameter
#pragma warning(disable: 4127) // conditional expression is constant
@@ -831,35 +790,6 @@ void nvgFillPaint(NVGcontext* ctx, NVGpaint paint)
nvgTransformMultiply(state->fill.xform, state->xform);
}
-int nvgCreateImage(NVGcontext* ctx, const char* filename, int imageFlags)
-{
- int w, h, n, image;
- unsigned char* img;
- stbi_set_unpremultiply_on_load(1);
- stbi_convert_iphone_png_to_rgb(1);
- img = stbi_load(filename, &w, &h, &n, 4);
- if (img == NULL) {
-// printf("Failed to load %s - %s\n", filename, stbi_failure_reason());
- return 0;
- }
- image = nvgCreateImageRGBA(ctx, w, h, imageFlags, img);
- stbi_image_free(img);
- return image;
-}
-
-int nvgCreateImageMem(NVGcontext* ctx, int imageFlags, unsigned char* data, int ndata)
-{
- int w, h, n, image;
- unsigned char* img = stbi_load_from_memory(data, ndata, &w, &h, &n, 4);
- if (img == NULL) {
-// printf("Failed to load %s - %s\n", filename, stbi_failure_reason());
- return 0;
- }
- image = nvgCreateImageRGBA(ctx, w, h, imageFlags, img);
- stbi_image_free(img);
- return image;
-}
-
int nvgCreateImageRGBA(NVGcontext* ctx, int w, int h, int imageFlags, const unsigned char* data)
{
return ctx->params.renderCreateTexture(ctx->params.userPtr, NVG_TEXTURE_RGBA, w, h, imageFlags, data);
diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg.h b/3rdparty/bgfx/examples/common/nanovg/nanovg.h
index 7881043187b..a6a952c3cae 100644
--- a/3rdparty/bgfx/examples/common/nanovg/nanovg.h
+++ b/3rdparty/bgfx/examples/common/nanovg/nanovg.h
@@ -366,14 +366,6 @@ float nvgRadToDeg(float rad);
// In addition you can upload your own image. The image loading is provided by stb_image.
// The parameter imageFlags is combination of flags defined in NVGimageFlags.
-// Creates image by loading it from the disk from specified file name.
-// Returns handle to the image.
-int nvgCreateImage(NVGcontext* ctx, const char* filename, int imageFlags);
-
-// Creates image by loading it from the specified chunk of memory.
-// Returns handle to the image.
-int nvgCreateImageMem(NVGcontext* ctx, int imageFlags, unsigned char* data, int ndata);
-
// Creates image from specified image data.
// Returns handle to the image.
int nvgCreateImageRGBA(NVGcontext* ctx, int w, int h, int imageFlags, const unsigned char* data);
diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp
index 78d854bfac6..abf571a5965 100644
--- a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp
+++ b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp
@@ -31,7 +31,6 @@
#include <bx/bx.h>
#include <bx/allocator.h>
-#include <bx/crtimpl.h>
#include <bx/uint32_t.h>
BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4244); // warning C4244: '=' : conversion from '' to '', possible loss of data
@@ -132,7 +131,7 @@ namespace
struct GLNVGcontext
{
- bx::AllocatorI* m_allocator;
+ bx::AllocatorI* allocator;
bgfx::ProgramHandle prog;
bgfx::UniformHandle u_scissorMat;
@@ -152,7 +151,7 @@ namespace
bgfx::TextureHandle texMissing;
bgfx::TransientVertexBuffer tvb;
- uint8_t m_viewId;
+ bgfx::ViewId viewId;
struct GLNVGtexture* textures;
float view[2];
@@ -185,7 +184,7 @@ namespace
for (i = 0; i < gl->ntextures; i++)
{
- if (gl->textures[i].id.idx == bgfx::invalidHandle)
+ if (gl->textures[i].id.idx == bgfx::kInvalidHandle)
{
tex = &gl->textures[i];
break;
@@ -198,7 +197,7 @@ namespace
{
int old = gl->ctextures;
gl->ctextures = (gl->ctextures == 0) ? 2 : gl->ctextures*2;
- gl->textures = (struct GLNVGtexture*)BX_REALLOC(gl->m_allocator, gl->textures, sizeof(struct GLNVGtexture)*gl->ctextures);
+ gl->textures = (struct GLNVGtexture*)BX_REALLOC(gl->allocator, gl->textures, sizeof(struct GLNVGtexture)*gl->ctextures);
bx::memSet(&gl->textures[old], 0xff, (gl->ctextures-old)*sizeof(struct GLNVGtexture) );
if (gl->textures == NULL)
@@ -237,10 +236,10 @@ namespace
if (bgfx::isValid(gl->textures[ii].id)
&& (gl->textures[ii].flags & NVG_IMAGE_NODELETE) == 0)
{
- bgfx::destroyTexture(gl->textures[ii].id);
+ bgfx::destroy(gl->textures[ii].id);
}
bx::memSet(&gl->textures[ii], 0, sizeof(gl->textures[ii]) );
- gl->textures[ii].id.idx = bgfx::invalidHandle;
+ gl->textures[ii].id.idx = bgfx::kInvalidHandle;
return 1;
}
}
@@ -280,7 +279,7 @@ namespace
}
else
{
- gl->u_halfTexel.idx = bgfx::invalidHandle;
+ gl->u_halfTexel.idx = bgfx::kInvalidHandle;
}
s_nvgDecl
@@ -295,7 +294,14 @@ namespace
return 1;
}
- static int nvgRenderCreateTexture(void* _userPtr, int _type, int _width, int _height, int _flags, const unsigned char* _rgba)
+ static int nvgRenderCreateTexture(
+ void* _userPtr
+ , int _type
+ , int _width
+ , int _height
+ , int _flags
+ , const unsigned char* _rgba
+ )
{
struct GLNVGcontext* gl = (struct GLNVGcontext*)_userPtr;
struct GLNVGtexture* tex = glnvg__allocTexture(gl);
@@ -386,7 +392,8 @@ namespace
struct GLNVGcontext* gl = (struct GLNVGcontext*)_userPtr;
struct GLNVGtexture* tex = glnvg__findTexture(gl, image);
- if (!bgfx::isValid(tex->id) )
+ if (NULL == tex
+ || !bgfx::isValid(tex->id) )
{
return 0;
}
@@ -399,16 +406,16 @@ namespace
static void glnvg__xformToMat3x4(float* m3, float* t)
{
- m3[0] = t[0];
- m3[1] = t[1];
- m3[2] = 0.0f;
- m3[3] = 0.0f;
- m3[4] = t[2];
- m3[5] = t[3];
- m3[6] = 0.0f;
- m3[7] = 0.0f;
- m3[8] = t[4];
- m3[9] = t[5];
+ m3[ 0] = t[0];
+ m3[ 1] = t[1];
+ m3[ 2] = 0.0f;
+ m3[ 3] = 0.0f;
+ m3[ 4] = t[2];
+ m3[ 5] = t[3];
+ m3[ 6] = 0.0f;
+ m3[ 7] = 0.0f;
+ m3[ 8] = t[4];
+ m3[ 9] = t[5];
m3[10] = 1.0f;
m3[11] = 0.0f;
}
@@ -421,8 +428,14 @@ namespace
return c;
}
- static int glnvg__convertPaint(struct GLNVGcontext* gl, struct GLNVGfragUniforms* frag, struct NVGpaint* paint,
- struct NVGscissor* scissor, float width, float fringe)
+ static int glnvg__convertPaint(
+ struct GLNVGcontext* gl
+ , struct GLNVGfragUniforms* frag
+ , struct NVGpaint* paint
+ , struct NVGscissor* scissor
+ , float width
+ , float fringe
+ )
{
struct GLNVGtexture* tex = NULL;
float invxform[6] = {};
@@ -462,10 +475,15 @@ namespace
}
nvgTransformInverse(invxform, paint->xform);
frag->type = NSVG_SHADER_FILLIMG;
+
if (tex->type == NVG_TEXTURE_RGBA)
+ {
frag->texType = (tex->flags & NVG_IMAGE_PREMULTIPLIED) ? 0.0f : 1.0f;
+ }
else
+ {
frag->texType = 2.0f;
+ }
gl->th = tex->id;
}
else
@@ -483,16 +501,16 @@ namespace
static void glnvg__mat3(float* dst, float* src)
{
- dst[0] = src[0];
- dst[1] = src[1];
- dst[2] = src[2];
+ dst[0] = src[ 0];
+ dst[1] = src[ 1];
+ dst[2] = src[ 2];
- dst[3] = src[4];
- dst[4] = src[5];
- dst[5] = src[6];
+ dst[3] = src[ 4];
+ dst[4] = src[ 5];
+ dst[5] = src[ 6];
- dst[6] = src[8];
- dst[7] = src[9];
+ dst[6] = src[ 8];
+ dst[7] = src[ 9];
dst[8] = src[10];
}
@@ -541,7 +559,7 @@ namespace
struct GLNVGcontext* gl = (struct GLNVGcontext*)_userPtr;
gl->view[0] = (float)width;
gl->view[1] = (float)height;
- bgfx::setViewRect(gl->m_viewId, 0, 0, width * devicePixelRatio, height * devicePixelRatio);
+ bgfx::setViewRect(gl->viewId, 0, 0, width * devicePixelRatio, height * devicePixelRatio);
}
static void fan(uint32_t _start, uint32_t _count)
@@ -586,10 +604,10 @@ namespace
| BGFX_STENCIL_OP_FAIL_Z_KEEP
| BGFX_STENCIL_OP_PASS_Z_DECR
);
- bgfx::setVertexBuffer(&gl->tvb);
+ bgfx::setVertexBuffer(0, &gl->tvb);
bgfx::setTexture(0, gl->s_tex, gl->th);
fan(paths[i].fillOffset, paths[i].fillCount);
- bgfx::submit(gl->m_viewId, gl->prog);
+ bgfx::submit(gl->viewId, gl->prog);
}
}
@@ -611,15 +629,15 @@ namespace
| BGFX_STENCIL_OP_FAIL_Z_KEEP
| BGFX_STENCIL_OP_PASS_Z_KEEP
);
- bgfx::setVertexBuffer(&gl->tvb, paths[i].strokeOffset, paths[i].strokeCount);
+ bgfx::setVertexBuffer(0, &gl->tvb, paths[i].strokeOffset, paths[i].strokeCount);
bgfx::setTexture(0, gl->s_tex, gl->th);
- bgfx::submit(gl->m_viewId, gl->prog);
+ bgfx::submit(gl->viewId, gl->prog);
}
}
// Draw fill
bgfx::setState(gl->state);
- bgfx::setVertexBuffer(&gl->tvb, call->vertexOffset, call->vertexCount);
+ bgfx::setVertexBuffer(0, &gl->tvb, call->vertexOffset, call->vertexCount);
bgfx::setTexture(0, gl->s_tex, gl->th);
bgfx::setStencil(0
| BGFX_STENCIL_TEST_NOTEQUAL
@@ -628,7 +646,7 @@ namespace
| BGFX_STENCIL_OP_FAIL_Z_ZERO
| BGFX_STENCIL_OP_PASS_Z_ZERO
);
- bgfx::submit(gl->m_viewId, gl->prog);
+ bgfx::submit(gl->viewId, gl->prog);
}
static void glnvg__convexFill(struct GLNVGcontext* gl, struct GLNVGcall* call)
@@ -642,10 +660,10 @@ namespace
{
if (paths[i].fillCount == 0) continue;
bgfx::setState(gl->state);
- bgfx::setVertexBuffer(&gl->tvb);
+ bgfx::setVertexBuffer(0, &gl->tvb);
bgfx::setTexture(0, gl->s_tex, gl->th);
fan(paths[i].fillOffset, paths[i].fillCount);
- bgfx::submit(gl->m_viewId, gl->prog);
+ bgfx::submit(gl->viewId, gl->prog);
}
if (gl->edgeAntiAlias)
@@ -656,9 +674,9 @@ namespace
bgfx::setState(gl->state
| BGFX_STATE_PT_TRISTRIP
);
- bgfx::setVertexBuffer(&gl->tvb, paths[i].strokeOffset, paths[i].strokeCount);
+ bgfx::setVertexBuffer(0, &gl->tvb, paths[i].strokeOffset, paths[i].strokeCount);
bgfx::setTexture(0, gl->s_tex, gl->th);
- bgfx::submit(gl->m_viewId, gl->prog);
+ bgfx::submit(gl->viewId, gl->prog);
}
}
}
@@ -676,9 +694,9 @@ namespace
bgfx::setState(gl->state
| BGFX_STATE_PT_TRISTRIP
);
- bgfx::setVertexBuffer(&gl->tvb, paths[i].strokeOffset, paths[i].strokeCount);
+ bgfx::setVertexBuffer(0, &gl->tvb, paths[i].strokeOffset, paths[i].strokeCount);
bgfx::setTexture(0, gl->s_tex, gl->th);
- bgfx::submit(gl->m_viewId, gl->prog);
+ bgfx::submit(gl->viewId, gl->prog);
}
}
@@ -689,9 +707,9 @@ namespace
nvgRenderSetUniforms(gl, call->uniformOffset, call->image);
bgfx::setState(gl->state);
- bgfx::setVertexBuffer(&gl->tvb, call->vertexOffset, call->vertexCount);
+ bgfx::setVertexBuffer(0, &gl->tvb, call->vertexOffset, call->vertexCount);
bgfx::setTexture(0, gl->s_tex, gl->th);
- bgfx::submit(gl->m_viewId, gl->prog);
+ bgfx::submit(gl->viewId, gl->prog);
}
}
@@ -809,7 +827,7 @@ namespace
if (gl->ncalls+1 > gl->ccalls)
{
gl->ccalls = gl->ccalls == 0 ? 32 : gl->ccalls * 2;
- gl->calls = (struct GLNVGcall*)BX_REALLOC(gl->m_allocator, gl->calls, sizeof(struct GLNVGcall) * gl->ccalls);
+ gl->calls = (struct GLNVGcall*)BX_REALLOC(gl->allocator, gl->calls, sizeof(struct GLNVGcall) * gl->ccalls);
}
ret = &gl->calls[gl->ncalls++];
bx::memSet(ret, 0, sizeof(struct GLNVGcall) );
@@ -822,7 +840,7 @@ namespace
if (gl->npaths + n > gl->cpaths) {
GLNVGpath* paths;
int cpaths = glnvg__maxi(gl->npaths + n, 128) + gl->cpaths / 2; // 1.5x Overallocate
- paths = (GLNVGpath*)BX_REALLOC(gl->m_allocator, gl->paths, sizeof(GLNVGpath) * cpaths);
+ paths = (GLNVGpath*)BX_REALLOC(gl->allocator, gl->paths, sizeof(GLNVGpath) * cpaths);
if (paths == NULL) return -1;
gl->paths = paths;
gl->cpaths = cpaths;
@@ -839,7 +857,7 @@ namespace
{
NVGvertex* verts;
int cverts = glnvg__maxi(gl->nverts + n, 4096) + gl->cverts/2; // 1.5x Overallocate
- verts = (NVGvertex*)BX_REALLOC(gl->m_allocator, gl->verts, sizeof(NVGvertex) * cverts);
+ verts = (NVGvertex*)BX_REALLOC(gl->allocator, gl->verts, sizeof(NVGvertex) * cverts);
if (verts == NULL) return -1;
gl->verts = verts;
gl->cverts = cverts;
@@ -855,7 +873,7 @@ namespace
if (gl->nuniforms+n > gl->cuniforms)
{
gl->cuniforms = gl->cuniforms == 0 ? glnvg__maxi(n, 32) : gl->cuniforms * 2;
- gl->uniforms = (unsigned char*)BX_REALLOC(gl->m_allocator, gl->uniforms, gl->cuniforms * structSize);
+ gl->uniforms = (unsigned char*)BX_REALLOC(gl->allocator, gl->uniforms, gl->cuniforms * structSize);
}
ret = gl->nuniforms * structSize;
gl->nuniforms += n;
@@ -870,8 +888,16 @@ namespace
vtx->v = v;
}
- static void nvgRenderFill(void* _userPtr, NVGpaint* paint, NVGcompositeOperationState compositeOperation, NVGscissor* scissor,
- float fringe, const float* bounds, const NVGpath* paths, int npaths)
+ static void nvgRenderFill(
+ void* _userPtr
+ , NVGpaint* paint
+ , NVGcompositeOperationState compositeOperation
+ , NVGscissor* scissor
+ , float fringe
+ , const float* bounds
+ , const NVGpath* paths
+ , int npaths
+ )
{
struct GLNVGcontext* gl = (struct GLNVGcontext*)_userPtr;
@@ -948,8 +974,16 @@ namespace
}
}
- static void nvgRenderStroke(void* _userPtr, struct NVGpaint* paint, NVGcompositeOperationState compositeOperation, struct NVGscissor* scissor, float fringe,
- float strokeWidth, const struct NVGpath* paths, int npaths)
+ static void nvgRenderStroke(
+ void* _userPtr
+ , struct NVGpaint* paint
+ , NVGcompositeOperationState compositeOperation
+ , struct NVGscissor* scissor
+ , float fringe
+ , float strokeWidth
+ , const struct NVGpath* paths
+ , int npaths
+ )
{
struct GLNVGcontext* gl = (struct GLNVGcontext*)_userPtr;
@@ -1017,22 +1051,22 @@ namespace
return;
}
- bgfx::destroyProgram(gl->prog);
- bgfx::destroyTexture(gl->texMissing);
+ bgfx::destroy(gl->prog);
+ bgfx::destroy(gl->texMissing);
- bgfx::destroyUniform(gl->u_scissorMat);
- bgfx::destroyUniform(gl->u_paintMat);
- bgfx::destroyUniform(gl->u_innerCol);
- bgfx::destroyUniform(gl->u_outerCol);
- bgfx::destroyUniform(gl->u_viewSize);
- bgfx::destroyUniform(gl->u_scissorExtScale);
- bgfx::destroyUniform(gl->u_extentRadius);
- bgfx::destroyUniform(gl->u_params);
- bgfx::destroyUniform(gl->s_tex);
+ bgfx::destroy(gl->u_scissorMat);
+ bgfx::destroy(gl->u_paintMat);
+ bgfx::destroy(gl->u_innerCol);
+ bgfx::destroy(gl->u_outerCol);
+ bgfx::destroy(gl->u_viewSize);
+ bgfx::destroy(gl->u_scissorExtScale);
+ bgfx::destroy(gl->u_extentRadius);
+ bgfx::destroy(gl->u_params);
+ bgfx::destroy(gl->s_tex);
if (bgfx::isValid(gl->u_halfTexel) )
{
- bgfx::destroyUniform(gl->u_halfTexel);
+ bgfx::destroy(gl->u_halfTexel);
}
for (uint32_t ii = 0, num = gl->ntextures; ii < num; ++ii)
@@ -1040,37 +1074,36 @@ namespace
if (bgfx::isValid(gl->textures[ii].id)
&& (gl->textures[ii].flags & NVG_IMAGE_NODELETE) == 0)
{
- bgfx::destroyTexture(gl->textures[ii].id);
+ bgfx::destroy(gl->textures[ii].id);
}
}
- BX_FREE(gl->m_allocator, gl->uniforms);
- BX_FREE(gl->m_allocator, gl->verts);
- BX_FREE(gl->m_allocator, gl->paths);
- BX_FREE(gl->m_allocator, gl->calls);
- BX_FREE(gl->m_allocator, gl->textures);
- BX_FREE(gl->m_allocator, gl);
+ BX_FREE(gl->allocator, gl->uniforms);
+ BX_FREE(gl->allocator, gl->verts);
+ BX_FREE(gl->allocator, gl->paths);
+ BX_FREE(gl->allocator, gl->calls);
+ BX_FREE(gl->allocator, gl->textures);
+ BX_FREE(gl->allocator, gl);
}
} // namespace
-NVGcontext* nvgCreate(int edgeaa, unsigned char _viewId, bx::AllocatorI* _allocator)
+NVGcontext* nvgCreate(int32_t _edgeaa, bgfx::ViewId _viewId, bx::AllocatorI* _allocator)
{
if (NULL == _allocator)
{
-#if BX_CONFIG_ALLOCATOR_CRT
- static bx::CrtAllocator allocator;
+ static bx::DefaultAllocator allocator;
_allocator = &allocator;
-#else
- BX_CHECK(false, "No allocator has been passed to nvgCreate(). Either specify a bx::AllocatorI instance or enable BX_CONFIG_ALLOCATOR_CRT directive.");
- return NULL;
-#endif // BX_CONFIG_ALLOCATOR_CRT
}
struct NVGparams params;
struct NVGcontext* ctx = NULL;
struct GLNVGcontext* gl = (struct GLNVGcontext*)BX_ALLOC(_allocator, sizeof(struct GLNVGcontext) );
- if (gl == NULL) goto error;
+ if (gl == NULL)
+ {
+ goto error;
+ }
+
bx::memSet(gl, 0, sizeof(struct GLNVGcontext) );
bx::memSet(&params, 0, sizeof(params) );
@@ -1085,12 +1118,12 @@ NVGcontext* nvgCreate(int edgeaa, unsigned char _viewId, bx::AllocatorI* _alloca
params.renderStroke = nvgRenderStroke;
params.renderTriangles = nvgRenderTriangles;
params.renderDelete = nvgRenderDelete;
- params.userPtr = gl;
- params.edgeAntiAlias = edgeaa;
+ params.userPtr = gl;
+ params.edgeAntiAlias = _edgeaa;
- gl->m_allocator = _allocator;
- gl->edgeAntiAlias = edgeaa;
- gl->m_viewId = uint8_t(_viewId);
+ gl->allocator = _allocator;
+ gl->edgeAntiAlias = _edgeaa;
+ gl->viewId = _viewId;
ctx = nvgCreateInternal(&params);
if (ctx == NULL) goto error;
@@ -1107,98 +1140,128 @@ error:
return NULL;
}
-NVGcontext* nvgCreate(int edgeaa, unsigned char _viewId) {
- return nvgCreate(edgeaa, _viewId, NULL);
+NVGcontext* nvgCreate(int32_t _edgeaa, bgfx::ViewId _viewId) {
+ return nvgCreate(_edgeaa, _viewId, NULL);
}
-void nvgDelete(struct NVGcontext* ctx)
+void nvgDelete(struct NVGcontext* _ctx)
{
- nvgDeleteInternal(ctx);
+ nvgDeleteInternal(_ctx);
}
-uint8_t nvgViewId(struct NVGcontext* ctx)
+void nvgSetViewId(struct NVGcontext* _ctx, bgfx::ViewId _viewId)
{
- struct NVGparams* params = nvgInternalParams(ctx);
+ struct NVGparams* params = nvgInternalParams(_ctx);
struct GLNVGcontext* gl = (struct GLNVGcontext*)params->userPtr;
- return gl->m_viewId;
+ gl->viewId = _viewId;
}
-void nvgViewId(struct NVGcontext* ctx, unsigned char _viewId)
+uint16_t nvgGetViewId(struct NVGcontext* _ctx)
{
- struct NVGparams* params = nvgInternalParams(ctx);
+ struct NVGparams* params = nvgInternalParams(_ctx);
struct GLNVGcontext* gl = (struct GLNVGcontext*)params->userPtr;
- gl->m_viewId = uint8_t(_viewId);
+ return gl->viewId;
}
-bgfx::TextureHandle nvglImageHandle(NVGcontext* ctx, int image)
+bgfx::TextureHandle nvglImageHandle(NVGcontext* _ctx, int32_t _image)
{
- GLNVGcontext* gl = (GLNVGcontext*)nvgInternalParams(ctx)->userPtr;
- GLNVGtexture* tex = glnvg__findTexture(gl, image);
+ GLNVGcontext* gl = (GLNVGcontext*)nvgInternalParams(_ctx)->userPtr;
+ GLNVGtexture* tex = glnvg__findTexture(gl, _image);
return tex->id;
}
-NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int width, int height, int imageFlags, uint8_t viewId)
+NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int32_t width, int32_t height, int32_t imageFlags, bgfx::ViewId viewId)
{
- NVGLUframebuffer* framebuffer = nvgluCreateFramebuffer(ctx, width, height, imageFlags);
+ NVGLUframebuffer* framebuffer = nvgluCreateFramebuffer(ctx, width, height, imageFlags);
+
if (framebuffer != NULL)
{
nvgluSetViewFramebuffer(viewId, framebuffer);
}
+
return framebuffer;
}
-NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int width, int height, int imageFlags)
+NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* _ctx, int32_t _width, int32_t _height, int32_t _imageFlags)
{
- NVGLUframebuffer* framebuffer = new NVGLUframebuffer;
- framebuffer->ctx = ctx;
- framebuffer->image = nvgCreateImageRGBA(ctx, width, height, imageFlags | NVG_IMAGE_PREMULTIPLIED, NULL);
- bgfx::TextureHandle texture = nvglImageHandle(ctx, framebuffer->image);
- if (!bgfx::isValid(texture))
+ BX_UNUSED(_imageFlags);
+ bgfx::TextureHandle textures[] =
+ {
+ bgfx::createTexture2D(_width, _height, false, 1, bgfx::TextureFormat::RGBA8, BGFX_TEXTURE_RT),
+ bgfx::createTexture2D(_width, _height, false, 1, bgfx::TextureFormat::D24S8, BGFX_TEXTURE_RT | BGFX_TEXTURE_RT_WRITE_ONLY)
+ };
+ bgfx::FrameBufferHandle fbh = bgfx::createFrameBuffer(
+ BX_COUNTOF(textures)
+ , textures
+ , true
+ );
+
+ if (!bgfx::isValid(fbh) )
{
- nvgluDeleteFramebuffer(framebuffer);
return NULL;
}
- framebuffer->handle = bgfx::createFrameBuffer(1, &texture, false);
- if (!bgfx::isValid(framebuffer->handle))
+
+ struct NVGparams* params = nvgInternalParams(_ctx);
+ struct GLNVGcontext* gl = (struct GLNVGcontext*)params->userPtr;
+ struct GLNVGtexture* tex = glnvg__allocTexture(gl);
+
+ if (NULL == tex)
{
- nvgluDeleteFramebuffer(framebuffer);
+ bgfx::destroy(fbh);
return NULL;
}
+
+ tex->width = _width;
+ tex->height = _height;
+ tex->type = NVG_TEXTURE_RGBA;
+ tex->flags = _imageFlags | NVG_IMAGE_PREMULTIPLIED;
+ tex->id = bgfx::getTexture(fbh);
+
+ NVGLUframebuffer* framebuffer = BX_NEW(gl->allocator, NVGLUframebuffer);
+ framebuffer->ctx = _ctx;
+ framebuffer->image = tex->id.idx;
+ framebuffer->handle = fbh;
+
return framebuffer;
}
-void nvgluBindFramebuffer(NVGLUframebuffer* framebuffer)
+void nvgluBindFramebuffer(NVGLUframebuffer* _framebuffer)
{
static NVGcontext* s_prevCtx = NULL;
- static uint8_t s_prevViewId;
- if (framebuffer != NULL)
+ static bgfx::ViewId s_prevViewId;
+ if (_framebuffer != NULL)
{
- s_prevCtx = framebuffer->ctx;
- s_prevViewId = nvgViewId(framebuffer->ctx);
- nvgViewId(framebuffer->ctx, framebuffer->viewId);
- } else if (s_prevCtx != NULL) {
- nvgViewId(s_prevCtx, s_prevViewId);
+ s_prevCtx = _framebuffer->ctx;
+ s_prevViewId = nvgGetViewId(_framebuffer->ctx);
+ nvgSetViewId(_framebuffer->ctx, _framebuffer->viewId);
+ }
+ else if (s_prevCtx != NULL)
+ {
+ nvgSetViewId(s_prevCtx, s_prevViewId);
}
}
-void nvgluDeleteFramebuffer(NVGLUframebuffer* framebuffer)
+void nvgluDeleteFramebuffer(NVGLUframebuffer* _framebuffer)
{
- if (framebuffer == NULL)
- return;
- if (bgfx::isValid(framebuffer->handle))
+ if (_framebuffer == NULL)
{
- bgfx::destroyFrameBuffer(framebuffer->handle);
+ return;
}
- if (framebuffer->image > 0)
+
+ if (bgfx::isValid(_framebuffer->handle))
{
- nvgDeleteImage(framebuffer->ctx, framebuffer->image);
+ bgfx::destroy(_framebuffer->handle);
}
- delete framebuffer;
+
+ struct NVGparams* params = nvgInternalParams(_framebuffer->ctx);
+ struct GLNVGcontext* gl = (struct GLNVGcontext*)params->userPtr;
+ glnvg__deleteTexture(gl, _framebuffer->image);
+ BX_DELETE(gl->allocator, _framebuffer);
}
-void nvgluSetViewFramebuffer(uint8_t viewId, NVGLUframebuffer* framebuffer)
+void nvgluSetViewFramebuffer(bgfx::ViewId _viewId, NVGLUframebuffer* _framebuffer)
{
- framebuffer->viewId = viewId;
- bgfx::setViewFrameBuffer(viewId, framebuffer->handle);
- bgfx::setViewSeq(viewId, true);
+ _framebuffer->viewId = _viewId;
+ bgfx::setViewFrameBuffer(_viewId, _framebuffer->handle);
+ bgfx::setViewMode(_viewId, bgfx::ViewMode::Sequential);
}
diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h
index 36ba0dd73ec..9bb3a8462e0 100644
--- a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h
+++ b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h
@@ -6,25 +6,34 @@
#ifndef NANOVG_BGFX_H_HEADER_GUARD
#define NANOVG_BGFX_H_HEADER_GUARD
-#include "bgfx/bgfx.h"
+#include <bgfx/bgfx.h>
namespace bx { struct AllocatorI; }
struct NVGcontext;
-struct NVGLUframebuffer {
+struct NVGLUframebuffer
+{
NVGcontext* ctx;
bgfx::FrameBufferHandle handle;
int image;
- uint8_t viewId;
+ bgfx::ViewId viewId;
};
-typedef struct NVGLUframebuffer NVGLUframebuffer;
-NVGcontext* nvgCreate(int edgeaa, unsigned char _viewId, bx::AllocatorI* _allocator);
-NVGcontext* nvgCreate(int edgeaa, unsigned char _viewId);
-void nvgDelete(struct NVGcontext* ctx);
-uint8_t nvgViewId(struct NVGcontext* ctx);
-void nvgViewId(struct NVGcontext* ctx, unsigned char _viewId);
+///
+NVGcontext* nvgCreate(int32_t _edgeaa, bgfx::ViewId _viewId, bx::AllocatorI* _allocator);
+
+///
+NVGcontext* nvgCreate(int32_t _edgeaa, bgfx::ViewId _viewId);
+
+///
+void nvgDelete(struct NVGcontext* _ctx);
+
+///
+void nvgSetViewId(struct NVGcontext* _ctx, bgfx::ViewId _viewId);
+
+///
+uint16_t nvgGetViewId(struct NVGcontext* _ctx);
// Helper functions to create bgfx framebuffer to render to.
// Example:
@@ -45,10 +54,20 @@ void nvgViewId(struct NVGcontext* ctx, unsigned char _viewId);
// nvgFillPaint(ctx, paint);
// nvgFill(ctx);
// nvgEndFrame(ctx);
-NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int width, int height, int imageFlags, uint8_t viewId);
-NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int width, int height, int imageFlags);
-void nvgluBindFramebuffer(NVGLUframebuffer* framebuffer);
-void nvgluDeleteFramebuffer(NVGLUframebuffer* framebuffer);
-void nvgluSetViewFramebuffer(uint8_t viewId, NVGLUframebuffer* framebuffer);
+
+///
+NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* _ctx, int32_t _width, int32_t _height, int32_t _imageFlags, bgfx::ViewId _viewId);
+
+///
+NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* _ctx, int32_t _width, int32_t _height, int32_t _imageFlags);
+
+///
+void nvgluBindFramebuffer(NVGLUframebuffer* _framebuffer);
+
+///
+void nvgluDeleteFramebuffer(NVGLUframebuffer* _framebuffer);
+
+///
+void nvgluSetViewFramebuffer(bgfx::ViewId _viewId, NVGLUframebuffer* _framebuffer);
#endif // NANOVG_BGFX_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/examples/common/nanovg/vs_nanovg_fill.bin.h b/3rdparty/bgfx/examples/common/nanovg/vs_nanovg_fill.bin.h
index dcd529798e9..aecc5785cf7 100644
--- a/3rdparty/bgfx/examples/common/nanovg/vs_nanovg_fill.bin.h
+++ b/3rdparty/bgfx/examples/common/nanovg/vs_nanovg_fill.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_nanovg_fill_glsl[541] =
{
- 0x56, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x56, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
0x77, 0x53, 0x69, 0x7a, 0x65, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x68, 0x61, // wSize.......u_ha
0x6c, 0x66, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0xeb, 0x01, 0x00, // lfTexel.........
0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, // .attribute highp
@@ -35,296 +35,294 @@ static const uint8_t vs_nanovg_fill_glsl[541] =
0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x74, // gl_Position = t
0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mpvar_1;.}...
};
-static const uint8_t vs_nanovg_fill_spv[3412] =
+static const uint8_t vs_nanovg_fill_spv[3378] =
{
- 0x56, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x02, 0x00, 0x0b, 0x75, 0x5f, 0x68, 0x61, 0x6c, // VSH........u_hal
+ 0x56, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x02, 0x00, 0x0b, 0x75, 0x5f, 0x68, 0x61, 0x6c, // VSH........u_hal
0x66, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, // fTexel.......u_v
- 0x69, 0x65, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x24, 0x0d, 0x03, // iewSize......$..
- 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0xfe, 0x61, 0x00, 0x00, 0x00, // .#..........a...
- 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, // ................
- 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, // ...GLSL.std.450.
- 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, // ...........main.
- 0x00, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, // ................
- 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, // ...........main.
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x46, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, // .......F...Outpu
- 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x46, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, // t......F.......g
- 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x46, // l_Position.....F
- 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // .......v_positio
- 0x6e, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x46, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, // n......F.......v
- 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x06, // _texcoord0......
- 0x0f, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x32, // ...@main(vf2;vf2
- 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x48, 0x55, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, // ;......HU..a_pos
- 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x15, 0x26, 0x00, 0x00, 0x61, // ition.......&..a
- 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, // _texcoord0......
- 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, // ..._varying_....
- 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, // .......$Global..
- 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...........u_vie
- 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x01, // wRect...........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, // ...u_viewTexel..
- 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...........u_vie
- 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, // w..............u
- 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xd7, // _invView........
- 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, // .......u_proj...
- 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, // ...........u_inv
- 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x06, // Proj............
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, // ...u_viewProj...
- 0x00, 0x07, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, // ...........u_inv
- 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xd7, // ViewProj........
- 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, // .......u_model..
- 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // ...........u_mod
- 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0a, // elView..........
- 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, // ...u_modelViewPr
- 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, // oj.............u
- 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, // _alphaRef4......
- 0x05, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x53, 0x69, 0x7a, // .......u_viewSiz
- 0x65, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x75, // e..............u
- 0x5f, 0x68, 0x61, 0x6c, 0x66, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, // _halfTexel.....B
- 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x61, // ............A..a
- 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, // _position.......
- 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, // ...a_position...
- 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // ...,?..a_texcoor
- 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, // d0.........a_tex
- 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, // coord0.........f
- 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, // lattenTemp......
- 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, // U..param........
- 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, // ...param........
- 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, // ...@entryPointOu
- 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // tput_gl_Position
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x06, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, // ...........Outpu
- 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, // t..............v
- 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, // _position.......
- 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // .......v_texcoor
- 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, // d0.........@entr
- 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, // yPointOutput...G
- 0x00, 0x04, 0x00, 0x20, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, // ... .......@...H
- 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, // ...........#....
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, // ...H...........#
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x02, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x02, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, // ...#... ...H....
- 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, // ...........#...`
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x04, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x04, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, // ...#.......H....
- 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, // ...........#....
- 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x06, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x06, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, // ...#... ...H....
- 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, // ...........#...`
- 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x08, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x08, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, // ...#.......H....
- 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, // ...........#....
- 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, // ...H............
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0a, // .......H........
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0a, // .......H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, // ...#.......H....
- 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, // ...............H
- 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, // ...........#...
- 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, // ...H...........#
- 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0d, // ...0...H........
- 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x40, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xd7, // ...#...@...G....
- 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, // .......G...B..."
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, // .......G........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, // .......G........
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, // .......G........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, // .......G........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, // ...............!
- 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, // ................
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, // ... ............
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, // ....... ........
- 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, // ................
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x46, 0x04, 0x00, 0x00, 0x1d, // ...........F....
- 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xb0, // ...........!....
- 0x07, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, // ...F...........
- 0x00, 0x04, 0x00, 0xc3, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00, 0x15, // ...........F....
- 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, // ....... .......+
- 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, // ...............+
- 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, // ...............,
- 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, // ................
- 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, // ...+............
- 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, // .......e........
- 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // ........... ....
- 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, // ...+.......j...
- 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x20, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, // ....... ...e...j
- 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x10, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, // ................
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, // ...e...e...e...e
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x65, // ...e...e... ...e
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, // ...e............
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x54, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xd7, // ... ...T........
- 0x05, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x54, 0x08, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, // ...;...T...B....
- 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x32, 0x0a, 0x00, 0x00, 0x0d, // ...+.......2....
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, // ... ............
- 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, // ...+............
- 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, // ...+............
- 0x00, 0x00, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, // ..@+............
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, // ... ............
- 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, // ...+......./....
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, // ... ............
- 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, // ...+............
- 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, // ..?+............
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, // ... ............
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, // ... ............
- 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, // ...;............
- 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, // ...;............
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, // ... ............
- 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, // ...;............
- 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x06, 0x04, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, // ................
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x83, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, // ... ............
- 0x04, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x83, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, // ...;............
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, // ... ............
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, // ...6............
- 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, // ...........Sa..;
- 0x00, 0x04, 0x00, 0xc3, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, // ...............;
- 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, // ........U......;
- 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, // ...............=
- 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, // ........A......=
- 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, // .......,?......>
- 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, // ....U...A..>....
- 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x46, 0x04, 0x00, 0x00, 0x49, // ...,?..9...F...I
- 0x26, 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, // &.......U......>
- 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, // .......I&..A....
- 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, // ...T4..........=
- 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, // ...........T4..>
- 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, // ...........A....
- 0x02, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, // ...'A..........=
- 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, // ...........'A..A
- 0x00, 0x05, 0x00, 0x92, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, // ........N.......
- 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x41, // ...>....N......A
- 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, // ........M.......
- 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xc1, // ...=............
- 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x92, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, // M..A............
- 0x0f, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xe0, // .......>........
- 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x46, // .......8...6...F
- 0x04, 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x07, 0x00, 0x00, 0x37, // ...............7
- 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x48, 0x55, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, // .......HU..7....
- 0x02, 0x00, 0x00, 0x15, 0x26, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x08, 0x5f, 0x00, 0x00, 0x3b, // ....&......._..;
- 0x00, 0x04, 0x00, 0xc3, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, // ...............A
- 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xd4, 0x1b, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, // ................
- 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd4, 0x1b, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x41, // ...>...........A
- 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xb4, 0x3f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, // ........?.......
- 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb4, 0x3f, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x3d, // ...>....?......=
- 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xc6, 0x28, 0x00, 0x00, 0x48, 0x55, 0x00, 0x00, 0x41, // ........(..HU..A
- 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xd6, 0x43, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, // ........C.......
- 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd6, 0x43, 0x00, 0x00, 0xc6, 0x28, 0x00, 0x00, 0x3d, // ...>....C...(..=
- 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xb3, 0x28, 0x00, 0x00, 0x15, 0x26, 0x00, 0x00, 0x41, // ........(...&..A
- 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xd9, 0x45, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x32, // ........E..B...2
- 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x43, 0x5f, 0x00, 0x00, 0xd9, // ...=.......C_...
- 0x45, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1d, 0x5d, 0x00, 0x00, 0x43, // E..O........]..C
- 0x5f, 0x00, 0x00, 0x43, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, // _..C_...........
- 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdc, 0x2b, 0x00, 0x00, 0xb3, 0x28, 0x00, 0x00, 0x1d, // ........+...(...
- 0x5d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x5a, 0x56, 0x00, 0x00, 0x0f, // ]..A.......ZV...
- 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5a, 0x56, 0x00, 0x00, 0xdc, // .......>...ZV...
- 0x2b, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xb9, 0x45, 0x00, 0x00, 0x0f, // +..A........E...
- 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, // ...........=....
- 0x00, 0x00, 0x00, 0x8f, 0x2c, 0x00, 0x00, 0xb9, 0x45, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, // ....,...E.......
- 0x00, 0x00, 0x00, 0xc5, 0x2e, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8f, 0x2c, 0x00, 0x00, 0x41, // ............,..A
- 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xec, 0x38, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, // ........8..B.../
- 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf0, // .......=........
- 0x51, 0x00, 0x00, 0xec, 0x38, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x72, // Q...8..........r
- 0x37, 0x00, 0x00, 0xc5, 0x2e, 0x00, 0x00, 0xf0, 0x51, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, // 7.......Q.......
- 0x00, 0x00, 0x00, 0xa4, 0x44, 0x00, 0x00, 0x72, 0x37, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, // ....D..r7......A
- 0x00, 0x06, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x42, 0x1f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, // .......B........
- 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfd, // .......=........
- 0x61, 0x00, 0x00, 0x42, 0x1f, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc6, // a..B............
- 0x2e, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xfd, 0x61, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, // ........a..A....
- 0x02, 0x00, 0x00, 0xed, 0x38, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0d, // ....8..B.../....
- 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf1, 0x51, 0x00, 0x00, 0xed, // ...=........Q...
- 0x38, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8f, 0x38, 0x00, 0x00, 0xc6, // 8...........8...
- 0x2e, 0x00, 0x00, 0xf1, 0x51, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xcd, // ....Q...........
- 0x3a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8f, 0x38, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, // :.......8..P....
- 0x00, 0x00, 0x00, 0xb3, 0x40, 0x00, 0x00, 0xa4, 0x44, 0x00, 0x00, 0xcd, 0x3a, 0x00, 0x00, 0x0c, // ....@...D...:...
- 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x2b, // .......A.......+
- 0x33, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2b, // 3..........>...+
- 0x33, 0x00, 0x00, 0xb3, 0x40, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x46, 0x04, 0x00, 0x00, 0xd1, // 3...@..=...F....
- 0x5b, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xd1, 0x5b, 0x00, 0x00, 0x38, // [...........[..8
- 0x00, 0x01, 0x00, 0x00, // ....
+ 0x69, 0x65, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0d, 0x00, // iewSize.........
+ 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0xfe, 0x61, 0x00, // ...#..........a.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, // ................
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, // .....GLSL.std.45
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // 0...............
+ 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, // n...............
+ 0x00, 0x87, 0x0c, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x46, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, // n........F...Out
+ 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x46, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // put......F......
+ 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, // .gl_Position....
+ 0x00, 0x46, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, // .F.......v_posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x46, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, // ion......F......
+ 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, // .v_texcoord0....
+ 0x00, 0x06, 0x0f, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x32, 0x3b, 0x76, // .....@main(vf2;v
+ 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x48, 0x55, 0x00, 0x00, 0x61, 0x5f, 0x70, // f2;......HU..a_p
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x15, 0x26, 0x00, // osition.......&.
+ 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, // .a_texcoord0....
+ 0x00, 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, // ....._varying_..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, // .........$Global
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .............u_v
+ 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, // iewRect.........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, // .....u_viewTexel
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .............u_v
+ 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, // iew.............
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, // .u_invView......
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, // .........u_proj.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .............u_i
+ 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, // nvProj..........
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // .....u_viewProj.
+ 0x00, 0x06, 0x00, 0x07, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .............u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, // nvViewProj......
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .........u_model
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .............u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xd7, 0x05, 0x00, // odelView........
+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, // .....u_modelView
+ 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, // Proj............
+ 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x06, // .u_alphaRef4....
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x53, // .........u_viewS
+ 0x69, 0x7a, 0x65, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0d, 0x00, 0x00, // ize.............
+ 0x00, 0x75, 0x5f, 0x68, 0x61, 0x6c, 0x66, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x05, 0x00, 0x03, // .u_halfTexel....
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x41, 0x00, // .B............A.
+ 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, // .a_position.....
+ 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, // .....a_position.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // .....,?..a_texco
+ 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, // ord0.........a_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, // excoord0........
+ 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, // .flattenTemp....
+ 0x00, 0xab, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..U..param......
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, // .....param......
+ 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, // .....@entryPoint
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, // Output.gl_Positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x87, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, // on...........@en
+ 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, // tryPointOutput.v
+ 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, // _position.......
+ 0x00, 0x8b, 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, // .....@entryPoint
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // Output.v_texcoor
+ 0x64, 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x20, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, // d0...G... ......
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, // .@...H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, // .#.......H......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, // .#...`...H......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, // .#.......H......
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, // .#...`...H......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, // .#.......H......
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd7, 0x05, 0x00, // .#... ...H......
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#...0...H..
+ 0x00, 0xd7, 0x05, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x40, 0x0a, 0x00, // .........#...@..
+ 0x00, 0x47, 0x00, 0x03, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .G...........G..
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .B...".......G..
+ 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
+ 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
+ 0x00, 0x95, 0x15, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
+ 0x00, 0x87, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .............G..
+ 0x00, 0x8b, 0x17, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, // ................
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, // .....!..........
+ 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ......... ......
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, // ................
+ 0x00, 0x46, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, // .F..............
+ 0x00, 0x21, 0x00, 0x05, 0x00, 0xb0, 0x07, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00, 0x90, 0x02, 0x00, // .!.......F......
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xc3, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x46, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .F........... ..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, // .....+..........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, // .....,..........
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, // .............e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // . .......+......
+ 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x20, 0x01, 0x00, // .j... ....... ..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x10, 0x00, 0xd7, 0x05, 0x00, // .e...j..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .........e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x20, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // . ...e...e......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x54, 0x08, 0x00, // ......... ...T..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0xd7, 0x05, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x54, 0x08, 0x00, // .........;...T..
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .B.......+......
+ 0x00, 0x32, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // .2....... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ........@+......
+ 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, // ./....... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ........?+......
+ 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, // .........;......
+ 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, // .........;......
+ 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // ......... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, // ......... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, // .........;......
+ 0x00, 0x87, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, // .........;......
+ 0x00, 0x8b, 0x17, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
+ 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xc3, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, // .Sa..;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, // .....;........U.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xcb, 0x41, 0x00, // .....=........A.
+ 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x2c, 0x3f, 0x00, // .....=.......,?.
+ 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0xcb, 0x41, 0x00, // .....>....U...A.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x39, 0x00, 0x06, // .>.......,?..9..
+ 0x00, 0x46, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0xab, 0x55, 0x00, // .F...I&.......U.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, // .....>.......I&.
+ 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, // .A.......T4.....
+ 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, // .....=..........
+ 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, // .T4..>..........
+ 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, // .A........@.....
+ 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, // .....=....... ..
+ 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x87, 0x0c, 0x00, 0x00, 0x20, 0x1f, 0x00, // ..@..>....... ..
+ 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, // .A........@.....
+ 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, // .....=........-.
+ 0x00, 0xef, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, // ..@..>........-.
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x46, 0x04, 0x00, // .....8...6...F..
+ 0x00, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, // .............7..
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0x48, 0x55, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, // .....HU..7......
+ 0x00, 0x15, 0x26, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x08, 0x5f, 0x00, 0x00, 0x3b, 0x00, 0x04, // ..&......._..;..
+ 0x00, 0xc3, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, // .............A..
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0xd4, 0x1b, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, // ................
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd4, 0x1b, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x41, 0x00, 0x05, // .>...........A..
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0xb4, 0x3f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, // ......?.........
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb4, 0x3f, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, // .>....?......=..
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0xc6, 0x28, 0x00, 0x00, 0x48, 0x55, 0x00, 0x00, 0x41, 0x00, 0x05, // ......(..HU..A..
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0xd6, 0x43, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, // ......C.........
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd6, 0x43, 0x00, 0x00, 0xc6, 0x28, 0x00, 0x00, 0x3d, 0x00, 0x04, // .>....C...(..=..
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0xb3, 0x28, 0x00, 0x00, 0x15, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, // ......(...&..A..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xd9, 0x45, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x32, 0x0a, 0x00, // ......E..B...2..
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x43, 0x5f, 0x00, 0x00, 0xd9, 0x45, 0x00, // .=.......C_...E.
+ 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1d, 0x5d, 0x00, 0x00, 0x43, 0x5f, 0x00, // .O........]..C_.
+ 0x00, 0x43, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, // .C_.............
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0xdc, 0x2b, 0x00, 0x00, 0xb3, 0x28, 0x00, 0x00, 0x1d, 0x5d, 0x00, // ......+...(...].
+ 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0x5a, 0x56, 0x00, 0x00, 0x0f, 0x12, 0x00, // .A.......ZV.....
+ 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5a, 0x56, 0x00, 0x00, 0xdc, 0x2b, 0x00, // .....>...ZV...+.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xb9, 0x45, 0x00, 0x00, 0x0f, 0x12, 0x00, // .A........E.....
+ 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........=......
+ 0x00, 0x8f, 0x2c, 0x00, 0x00, 0xb9, 0x45, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // ..,...E.........
+ 0x00, 0xc5, 0x2e, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8f, 0x2c, 0x00, 0x00, 0x41, 0x00, 0x06, // ..........,..A..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0xec, 0x38, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // ......8..B.../..
+ 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf0, 0x51, 0x00, // .....=........Q.
+ 0x00, 0xec, 0x38, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x72, 0x37, 0x00, // ..8..........r7.
+ 0x00, 0xc5, 0x2e, 0x00, 0x00, 0xf0, 0x51, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // ......Q.........
+ 0x00, 0xa4, 0x44, 0x00, 0x00, 0x72, 0x37, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, // ..D..r7......A..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x42, 0x1f, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, // .....B..........
+ 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfd, 0x61, 0x00, // .....=........a.
+ 0x00, 0x42, 0x1f, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc6, 0x2e, 0x00, // .B..............
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0xfd, 0x61, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, // ......a..A......
+ 0x00, 0xed, 0x38, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, // ..8..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf1, 0x51, 0x00, 0x00, 0xed, 0x38, 0x00, // .=........Q...8.
+ 0x00, 0x88, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8f, 0x38, 0x00, 0x00, 0xc6, 0x2e, 0x00, // ..........8.....
+ 0x00, 0xf1, 0x51, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xcd, 0x3a, 0x00, // ..Q...........:.
+ 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8f, 0x38, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // ......8..P......
+ 0x00, 0xb3, 0x40, 0x00, 0x00, 0xa4, 0x44, 0x00, 0x00, 0xcd, 0x3a, 0x00, 0x00, 0x0c, 0x0a, 0x00, // ..@...D...:.....
+ 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x2b, 0x33, 0x00, // .....A.......+3.
+ 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2b, 0x33, 0x00, // .........>...+3.
+ 0x00, 0xb3, 0x40, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x46, 0x04, 0x00, 0x00, 0xd1, 0x5b, 0x00, // ..@..=...F....[.
+ 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xd1, 0x5b, 0x00, 0x00, 0x38, 0x00, 0x01, // ..........[..8..
+ 0x00, 0x00, // ..
};
-static const uint8_t vs_nanovg_fill_dx9[424] =
+static const uint8_t vs_nanovg_fill_dx9[426] =
{
- 0x56, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x02, 0x00, 0x0b, 0x75, 0x5f, 0x68, 0x61, 0x6c, // VSH........u_hal
+ 0x56, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x02, 0x00, 0x0b, 0x75, 0x5f, 0x68, 0x61, 0x6c, // VSH........u_hal
0x66, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x01, 0x00, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, // fTexel.......u_v
0x69, 0x65, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x78, 0x01, 0x00, // iewSize......x..
- 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x28, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x72, // .....(.CTAB....r
- 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
- 0x91, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, // ...k...D........
- 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, // ...P.......`....
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, // .......P.......u
- 0x5f, 0x68, 0x61, 0x6c, 0x66, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, // _halfTexel......
- 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, // ...........u_vie
- 0x77, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // wSize.vs_3_0.Mic
- 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
- 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
- 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0, 0x00, // 10.1...Q........
- 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, // ......?.........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, // ................
- 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, // ................
- 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0xe0, 0x1f, // ................
- 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x02, 0x00, 0x03, 0xe0, 0x02, 0x00, 0x00, 0x03, 0x02, // ................
- 0x00, 0x03, 0xe0, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xe4, 0x90, 0x06, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x80, 0x00, // ................
- 0x00, 0xd0, 0x90, 0x00, 0x00, 0xd0, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0xe0, 0x00, // ................
- 0x00, 0x55, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x02, 0x00, // .U..............
- 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0xe0, 0x00, // .....U..........
- 0x00, 0xaa, 0x80, 0x00, 0x00, 0x00, 0x81, 0x02, 0x00, 0x55, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, // .........U......
- 0x00, 0x0c, 0xe0, 0x02, 0x00, 0x64, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x03, 0xe0, 0x00, // .....d..........
- 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ........
+ 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x28, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, // .......(.CTAB...
+ 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, // .r..............
+ 0x00, 0x00, 0x91, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, // .....k...D......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, // .....P.......`..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
+ 0x00, 0x75, 0x5f, 0x68, 0x61, 0x6c, 0x66, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x01, 0x00, 0x03, // .u_halfTexel....
+ 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .............u_v
+ 0x69, 0x65, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, // iewSize.vs_3_0.M
+ 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, // icrosoft (R) HLS
+ 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, // L Shader Compile
+ 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, // r 10.1...Q......
+ 0xa0, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........?.......
+ 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, // ................
+ 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
+ 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, // ................
+ 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x02, 0x00, 0x03, 0xe0, 0x02, 0x00, 0x00, // ................
+ 0x03, 0x02, 0x00, 0x03, 0xe0, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xe4, 0x90, 0x06, 0x00, 0x00, // ................
+ 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, // ................
+ 0x80, 0x00, 0x00, 0xd0, 0x90, 0x00, 0x00, 0xd0, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, // ................
+ 0xe0, 0x00, 0x00, 0x55, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xa0, 0x06, 0x00, 0x00, // ...U............
+ 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, // .......U........
+ 0xe0, 0x00, 0x00, 0xaa, 0x80, 0x00, 0x00, 0x00, 0x81, 0x02, 0x00, 0x55, 0xa0, 0x01, 0x00, 0x00, // ...........U....
+ 0x02, 0x00, 0x00, 0x0c, 0xe0, 0x02, 0x00, 0x64, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x03, // .......d........
+ 0xe0, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
};
-static const uint8_t vs_nanovg_fill_dx11[577] =
+static const uint8_t vs_nanovg_fill_dx11[579] =
{
- 0x56, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x53, 0x69, 0x7a, 0x65, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x02, 0x44, 0x58, 0x42, // wSize........DXB
- 0x43, 0x99, 0x64, 0x1c, 0x9f, 0xec, 0x38, 0xd9, 0xd2, 0x91, 0x86, 0xde, 0x66, 0x7d, 0x52, 0x06, // C.d...8.....f}R.
- 0xfe, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // .............,..
- 0x00, 0x80, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, // .........ISGNL..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........8......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, // ................
- 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .A..............
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // .........POSITIO
- 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0x4f, 0x53, 0x47, // N.TEXCOORD...OSG
- 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, // Nh...........P..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x5c, 0x00, 0x00, // ................
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
- 0x00, 0x0c, 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, // .....SV_POSITION
- 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x53, 0x48, 0x44, // .TEXCOORD....SHD
- 0x52, 0x24, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x49, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, // R$...@...I...Y..
- 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, // .F. ........._..
- 0x03, 0x32, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, // .2......._...2..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....g.... .....
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, // .....e...2 .....
- 0x00, 0x65, 0x00, 0x00, 0x03, 0xc2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, // .e.... ......h..
- 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // .........2......
- 0x00, 0x46, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, // .F.......F......
- 0x00, 0x0e, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, // .....2.......F..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....F. ........
- 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, // ...... .........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, // ......@.........
- 0x08, 0x22, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, // ." ..........A..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x36, 0x00, 0x00, // ......@.....?6..
- 0x08, 0xc2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // .. .......@.....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x36, 0x00, 0x00, // ............?6..
- 0x05, 0x32, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, // .2 ......F......
- 0x00, 0x36, 0x00, 0x00, 0x05, 0xc2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x14, 0x10, // .6.... .........
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x00, 0x10, 0x00, 0x10, // .....>..........
- 0x00, // .
+ 0x56, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x77, 0x53, 0x69, 0x7a, 0x65, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x02, 0x00, 0x00, 0x44, // wSize..........D
+ 0x58, 0x42, 0x43, 0x99, 0x64, 0x1c, 0x9f, 0xec, 0x38, 0xd9, 0xd2, 0x91, 0x86, 0xde, 0x66, 0x7d, // XBC.d...8.....f}
+ 0x52, 0x06, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // R..............,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, // ...........ISGNL
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, // ...........8....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x03, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...A............
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, // ...........POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0x4f, // ION.TEXCOORD...O
+ 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, // SGNh...........P
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x5c, // ................
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ................
+ 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, // .......SV_POSITI
+ 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x53, // ON.TEXCOORD....S
+ 0x48, 0x44, 0x52, 0x24, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x49, 0x00, 0x00, 0x00, 0x59, // HDR$...@...I...Y
+ 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, // ...F. ........._
+ 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, // ...2......._...2
+ 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......g.... ...
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x01, // .......e...2 ...
+ 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xc2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, // ...e.... ......h
+ 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, 0x00, // ...........2....
+ 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x00, // ...F.......F....
+ 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......2.......F
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......F. ......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, // ........ .......
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x00, // ........@.......
+ 0x00, 0x00, 0x08, 0x22, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0x41, // ..." ..........A
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x36, // ........@.....?6
+ 0x00, 0x00, 0x08, 0xc2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, // .... .......@...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x36, // ..............?6
+ 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x00, // ...2 ......F....
+ 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xc2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, // ...6.... .......
+ 0x14, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x00, 0x10, // .......>........
+ 0x00, 0x10, 0x00, // ...
};
static const uint8_t vs_nanovg_fill_mtl[904] =
{
- 0x56, 0x53, 0x48, 0x04, 0xcf, 0xda, 0x1b, 0x94, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
+ 0x56, 0x53, 0x48, 0x05, 0xcf, 0xda, 0x1b, 0x94, 0x02, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
0x77, 0x53, 0x69, 0x7a, 0x65, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x75, 0x5f, 0x68, 0x61, // wSize.......u_ha
0x6c, 0x66, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x56, 0x03, 0x00, // lfTexel......V..
0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, // .using namespace
diff --git a/3rdparty/bgfx/examples/common/ps/fs_particle.bin.h b/3rdparty/bgfx/examples/common/ps/fs_particle.bin.h
index 0f34e0595af..c57c1db9e46 100644
--- a/3rdparty/bgfx/examples/common/ps/fs_particle.bin.h
+++ b/3rdparty/bgfx/examples/common/ps/fs_particle.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_particle_glsl[403] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x73, 0x01, 0x00, 0x00, 0x76, // Color......s...v
0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // arying highp vec
0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, // 4 v_color0;.vary
@@ -27,311 +27,337 @@ static const uint8_t fs_particle_glsl[403] =
0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x31, 0x3b, 0x0a, 0x7d, // olor = rgba_1;.}
0x0a, 0x0a, 0x00, // ...
};
-static const uint8_t fs_particle_spv[3821] =
+static const uint8_t fs_particle_spv[4227] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xe0, 0x0e, 0x03, 0x02, 0x23, 0x07, // FSH...........#.
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0xb1, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........a......
- 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, // GLSL.std.450....
- 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, // ................
- 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, // ........main....
- 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, // w...t...........
- 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
- 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, // main........a...
- 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, // BgfxSampler2D...
- 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, // ....a.......m_sa
- 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, // mpler.......a...
- 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // ....m_texture...
- 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, // ........bgfxText
- 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, // ure2D(struct-Bgf
- 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, // xSampler2D-p1-t2
- 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x0e, 0x00, 0x00, // 11;vf2;.....'...
- 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // _sampler........
- 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, // ...._coord......
- 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, // 5...vec4_splat(f
- 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, // 1;.........._x..
- 0x05, 0x00, 0x07, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, // ........@main(vf
- 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // 4;vf4;vf4;......
- 0x42, 0x24, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // B$..v_color0....
- 0x05, 0x00, 0x05, 0x00, 0x78, 0x20, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....x ..v_texcoo
- 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc4, 0x41, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, // rd0......A..gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // ragData_0_......
- 0x43, 0x12, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, // C...s_texColor..
- 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // ........s_texCol
- 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, // orSampler.......
- 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, // ....s_texColorTe
- 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, // xture...........
- 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, // bgfx_VoidFrag...
- 0x05, 0x00, 0x04, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // .....T..param...
- 0x05, 0x00, 0x04, 0x00, 0x60, 0x10, 0x00, 0x00, 0x72, 0x67, 0x62, 0x61, 0x00, 0x00, 0x00, 0x00, // ....`...rgba....
- 0x05, 0x00, 0x04, 0x00, 0xc9, 0x2e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, // ........param...
- 0x05, 0x00, 0x05, 0x00, 0xfa, 0x41, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // .....A..v_color0
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, // ........w...v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, // lor0.........<..
- 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // v_texcoord0.....
- 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // t...v_texcoord0.
- 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // ........gl_FragD
- 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, // ata_0_.......G..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xab, 0x55, 0x00, 0x00, // param........U..
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, // param...........
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, // param...........
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, // gl_FragData_0_..
- 0x05, 0x00, 0x04, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ........$Global.
- 0x06, 0x00, 0x06, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xf3, 0x01, 0x00, 0x00, // ewRect..........
- 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
- 0x06, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
- 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew..............
- 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
- 0xf3, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ........u_proj..
- 0x06, 0x00, 0x06, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
- 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xf3, 0x01, 0x00, 0x00, // vProj...........
- 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
- 0x06, 0x00, 0x07, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
- 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
- 0xf3, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ........u_model.
- 0x06, 0x00, 0x06, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
- 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xf3, 0x01, 0x00, 0x00, // delView.........
- 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
- 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.............
- 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, // u_alphaRef4.G...
- 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....".......G...
- 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....!.......G...
- 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....".......G...
- 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ....!.......G...
- 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // w...........G...
- 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // t...........G...
- 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, // ............G...
- 0x35, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // 5.......@...H...
- 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, // #... ...H.......
- 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0xf3, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xf3, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, // ........#...`...
- 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, // #.......H.......
- 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0xf3, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xf3, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, // #... ...H.......
- 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0xf3, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xf3, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, // ........#...`...
- 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, // #.......H.......
- 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, // ............H...
- 0xf3, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xf3, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, // ........#.......
- 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // H...............
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
- 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
- 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xf3, 0x01, 0x00, 0x00, // #.......H.......
- 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ............H...
- 0xf3, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, // ........#... ...
- 0x47, 0x00, 0x03, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, // G...............
- 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....!...........
- 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, // ................
- 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, // ...............
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, // ............a...
- 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, // ........ .......
- 0x00, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ....a...........
- 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // ........ .......
- 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0xc2, 0x03, 0x00, 0x00, // ........!.......
- 0x1d, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, // ............!...
- 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
- 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
- 0x91, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // ................
- 0x9a, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, // ....;.......C...
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...y.......
- 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, // ....;...y.......
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...........
- 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, // ....;...........
- 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
- 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
- 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....+...........
- 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, // ................
- 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
- 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
- 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // +...............
- 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, // +..............?
- 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // +...............
- 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;.......w.......
- 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;.......t.......
- 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
- 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
- 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....e...........
- 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // +.......j... ...
- 0x1c, 0x00, 0x04, 0x00, 0x35, 0x09, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, // ....5...e...j...
- 0x1e, 0x00, 0x0e, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ................
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
- 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x35, 0x09, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...5...e...
- 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, // e.......6.......
- 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // ................
- 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, // Sa..;........G..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, // ....;........U..
- 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // ....;...........
- 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, // ....=.......!C..
- 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, // ....=........3..
- 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x12, 0x20, 0x00, 0x00, // ....P...a.... ..
- 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x43, 0x12, 0x00, 0x00, // !C...3..>...C...
- 0x12, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, // . ..=........A..
- 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, // w...=........<..
- 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, 0x00, 0x00, 0xfa, 0x41, 0x00, 0x00, // t...>....G...A..
- 0x3e, 0x00, 0x03, 0x00, 0xab, 0x55, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, // >....U...<..9...
- 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, // .....&.......G..
- 0xab, 0x55, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .U......=.......
- 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, // ........>.......
- 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // ........8...6...
- 0x1d, 0x00, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x03, 0x00, 0x00, // ................
- 0x37, 0x00, 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......'...7...
- 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xcd, 0x5b, 0x00, 0x00, // .............[..
- 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0x69, 0x24, 0x00, 0x00, 0x27, 0x0e, 0x00, 0x00, // A.......i$..'...
- 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, // ....=........1..
- 0x69, 0x24, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, // i$..A...y...TD..
- 0x27, 0x0e, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, // '.......=.......
- 0x9b, 0x56, 0x00, 0x00, 0x54, 0x44, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, // .V..TD..V.......
- 0xc9, 0x42, 0x00, 0x00, 0x16, 0x31, 0x00, 0x00, 0x9b, 0x56, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .B...1...V..=...
- 0x13, 0x00, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, // ....6.......W...
- 0x1d, 0x00, 0x00, 0x00, 0xa4, 0x51, 0x00, 0x00, 0xc9, 0x42, 0x00, 0x00, 0x36, 0x1c, 0x00, 0x00, // .....Q...B..6...
- 0xfe, 0x00, 0x02, 0x00, 0xa4, 0x51, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // .....Q..8...6...
- 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, // ....5...........
- 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7...............
- 0x17, 0x3e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x53, 0x00, 0x00, // .>..=........S..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, // ....=.......]J..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, // ....=........4..
- 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x10, 0x35, 0x00, 0x00, // ....=........5..
- 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3f, 0x3a, 0x00, 0x00, // ....P.......?:..
- 0x18, 0x53, 0x00, 0x00, 0x5d, 0x4a, 0x00, 0x00, 0xfd, 0x34, 0x00, 0x00, 0x10, 0x35, 0x00, 0x00, // .S..]J...4...5..
- 0xfe, 0x00, 0x02, 0x00, 0x3f, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, // ....?:..8...6...
- 0x08, 0x00, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, // ................
- 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......B$..7...
- 0x9a, 0x02, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....x ..7.......
- 0xc4, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x19, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .A..........;...
- 0x8a, 0x02, 0x00, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....T......;...
- 0x9a, 0x02, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ....`.......;...
- 0x90, 0x02, 0x00, 0x00, 0xc9, 0x2e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
- 0xd5, 0x54, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .T......9.......
- 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0xd5, 0x54, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ....5....T..=...
- 0x1d, 0x00, 0x00, 0x00, 0x2a, 0x46, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, // ....*F..x ..O...
- 0x13, 0x00, 0x00, 0x00, 0xed, 0x44, 0x00, 0x00, 0x2a, 0x46, 0x00, 0x00, 0x2a, 0x46, 0x00, 0x00, // .....D..*F..*F..
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x2e, 0x00, 0x00, // ........>.......
- 0xed, 0x44, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x19, 0x54, 0x00, 0x00, // .D..9........T..
- 0x99, 0x0f, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0xc9, 0x2e, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, // ....C.......O...
- 0x1d, 0x00, 0x00, 0x00, 0xfb, 0x1a, 0x00, 0x00, 0x19, 0x54, 0x00, 0x00, 0x19, 0x54, 0x00, 0x00, // .........T...T..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x3e, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0xfb, 0x1a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...`.......=...
- 0x1d, 0x00, 0x00, 0x00, 0x81, 0x1e, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, // ........`...O...
- 0x18, 0x00, 0x00, 0x00, 0x60, 0x4a, 0x00, 0x00, 0x81, 0x1e, 0x00, 0x00, 0x81, 0x1e, 0x00, 0x00, // ....`J..........
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ............=...
- 0x1d, 0x00, 0x00, 0x00, 0x27, 0x3d, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, // ....'=..B$..O...
- 0x18, 0x00, 0x00, 0x00, 0xad, 0x59, 0x00, 0x00, 0x27, 0x3d, 0x00, 0x00, 0x27, 0x3d, 0x00, 0x00, // .....Y..'=..'=..
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, // ................
- 0x18, 0x00, 0x00, 0x00, 0x5e, 0x46, 0x00, 0x00, 0x60, 0x4a, 0x00, 0x00, 0xad, 0x59, 0x00, 0x00, // ....^F..`J...Y..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x3c, 0x45, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, // A.......<E..`...
- 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x97, 0x4e, 0x00, 0x00, // ....=........N..
- 0x3c, 0x45, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1a, 0x25, 0x00, 0x00, // <E...........%..
- 0x5e, 0x46, 0x00, 0x00, 0x97, 0x4e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // ^F...N..A.......
- 0x45, 0x4e, 0x00, 0x00, 0x42, 0x24, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // EN..B$......=...
- 0x0d, 0x00, 0x00, 0x00, 0x09, 0x5e, 0x00, 0x00, 0x45, 0x4e, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, // .....^..EN......
- 0x18, 0x00, 0x00, 0x00, 0x24, 0x29, 0x00, 0x00, 0x1a, 0x25, 0x00, 0x00, 0x09, 0x5e, 0x00, 0x00, // ....$)...%...^..
- 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x31, 0x27, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, // =.......1'..`...
- 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x61, 0x00, 0x00, 0x31, 0x27, 0x00, 0x00, // O........a..1'..
- 0x24, 0x29, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // $)..............
- 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0xb0, 0x61, 0x00, 0x00, // ....>...`....a..
- 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xf1, 0x3f, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, // A........?..`...
- 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd2, 0x5f, 0x00, 0x00, // ....=........_..
- 0xf1, 0x3f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, // .?..A.......ML..
- 0x42, 0x24, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, // B$......=.......
- 0xa0, 0x3b, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // .;..ML..........
- 0x27, 0x1b, 0x00, 0x00, 0xd2, 0x5f, 0x00, 0x00, 0xa0, 0x3b, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // '...._...;..A...
- 0x8a, 0x02, 0x00, 0x00, 0x28, 0x3e, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, // ....(>..x ......
- 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x12, 0x5b, 0x00, 0x00, 0x28, 0x3e, 0x00, 0x00, // =........[..(>..
- 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x2d, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // .........-......
- 0x12, 0x5b, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xac, 0x59, 0x00, 0x00, // .[...........Y..
- 0x27, 0x1b, 0x00, 0x00, 0x81, 0x2d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, // '....-..A.......
- 0x08, 0x4b, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .K..`.......>...
- 0x08, 0x4b, 0x00, 0x00, 0xac, 0x59, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .K...Y..=.......
- 0x95, 0x3e, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc4, 0x41, 0x00, 0x00, // .>..`...>....A..
- 0x95, 0x3e, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .>......8....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x74, 0x10, 0x00, 0x00, 0x03, 0x02, // FSH.......t.....
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x76, 0x62, 0x00, 0x00, 0x00, 0x00, // #.........vb....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, // ..w...t.........
+ 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, // ................
+ 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
+ 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x62, 0x67, // in............bg
+ 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x73, 0x74, 0x72, 0x75, // fxTexture2D(stru
+ 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, // ct-BgfxSampler2D
+ 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x05, 0x00, // -p1-t211;vf2;...
+ 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, // ..~..._sampler.m
+ 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, // _sampler........
+ 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, // .._sampler.m_tex
+ 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, // ture.........._c
+ 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, // oord......5...ve
+ 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, // c4_splat(f1;....
+ 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x82, 0x0d, // ......_x........
+ 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, // ..@main(vf4;vf4;
+ 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x76, 0x5f, // vf4;......nb..v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x8f, 0x41, // color0.........A
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x06, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ...J..gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, // a_0_......a...Bg
+ 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, // fxSampler2D.....
+ 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, // ..a.......m_samp
+ 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, // ler.......a.....
+ 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // ..m_texture.....
+ 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
+ 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // p.........s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, // olorSampler.....
+ 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, // Texture.........
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, // ..s_texColor.m_s
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, // ampler........P.
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, // ..s_texColor.m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, // exture..........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, // ..bgfx_VoidFrag.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......]..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x60, 0x10, 0x00, 0x00, 0x72, 0x67, 0x62, 0x61, 0x00, 0x00, // ......`...rgba..
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......9..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......9..param.
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x91, 0x37, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......7..param.
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .......+..v_colo
+ 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, // r0........w...v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, // color0.........<
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ..t...v_texcoord
+ 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // 0.........gl_Fra
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, // gData_0_.......U
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, // ..param........8
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, // ..param.........
+ 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, // ..param.........
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, // ......!...$Globa
+ 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....!.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x21, 0x02, // viewRect......!.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, // ......u_viewTexe
+ 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....!.......u_
+ 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x21, 0x02, 0x00, 0x00, 0x03, 0x00, // view......!.....
+ 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, // ..u_invView.....
+ 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, // ..!.......u_proj
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x21, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......!.......u_
+ 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x21, 0x02, // invProj.......!.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // ......u_viewProj
+ 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x21, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......!.......u_
+ 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, // invViewProj.....
+ 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..!.......u_mode
+ 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x21, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, // l.....!.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x21, 0x02, // modelView.....!.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // ......u_modelVie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x21, 0x02, 0x00, 0x00, 0x0b, 0x00, // wProj.....!.....
+ 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, // ..u_alphaRef4.G.
+ 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......".......G.
+ 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......!.......G.
+ 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......".......G.
+ 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ......!.......G.
+ 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..w...........G.
+ 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, // ..t...........G.
+ 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, // ..............G.
+ 0x04, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, // ..+.......@...H.
+ 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, // ..!.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...!.......#.
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x02, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x02, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, // ..#... ...H...!.
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..!...........H.
+ 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, // ..!.......#...`.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...!.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x04, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x04, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, // ..#.......H...!.
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..!...........H.
+ 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, // ..!.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...!.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x06, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x06, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, // ..#... ...H...!.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..!...........H.
+ 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, // ..!.......#...`.
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...!.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x08, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x08, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, // ..#.......H...!.
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..!...........H.
+ 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, // ..!.......#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...!.........
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x21, 0x02, 0x00, 0x00, 0x0a, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x0a, 0x00, // ......H...!.....
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x21, 0x02, // ..#.......H...!.
+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0x21, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, // ..!.......#... .
+ 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x21, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, // ..G...!.........
+ 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, // ......!.........
+ 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, // .......... ...y.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x0a, 0x08, // ..........!.....
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, 0x00, 0x90, 0x02, // ......y.........
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, // ..!.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x91, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, // ..!.............
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, // ..............a.
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, // .......... .....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, // ......a... ...z.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, // ..........;...z.
+ 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, // .......... .....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, // ..........;.....
+ 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, // .......... ...{.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, // ..........;...{.
+ 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // .. .......+.....
+ 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, // .......... .....
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, // ..........;.....
+ 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..P.......+.....
+ 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, // ................
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, // ......+.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, // ......+.........
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x0a, // .....?+.........
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, // ......;.......w.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x74, 0x14, // ......;.......t.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, // ......;.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..........e.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ......+.......j.
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x65, 0x00, // .. .......+...e.
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x21, 0x02, 0x00, 0x00, 0x1d, 0x00, // ..j.......!.....
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ......e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2b, 0x02, // ..e...e...e...+.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, // ..e...e.......6.
+ 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, // ................
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, // ......Sa..;.....
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ..........;.....
+ 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ...U......;.....
+ 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ...8......;.....
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ..........=.....
+ 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, // ..!C......=.....
+ 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, // ...3......P...a.
+ 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, // ..^ ..!C...3..>.
+ 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, // ......^ ..A...y.
+ 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...V..........=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, // ...........V..>.
+ 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, // ..........A.....
+ 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...@..........=.
+ 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, // ...........@..>.
+ 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..P.......=.....
+ 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ...+..w...=.....
+ 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, // ...<..t...>....U
+ 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, // ...+..>....8...<
+ 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0x82, 0x0d, // ..9........&....
+ 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, // ...U...8......=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ..............>.
+ 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ..............8.
+ 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x0a, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, // ......7...y...~.
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, // ..7...........7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xca, 0x1c, // ................
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0xf7, 0x0d, // ..=.............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x7e, 0x17, // ..=........H..~.
+ 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xc6, 0x19, // ..V........>....
+ 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xfe, 0x24, // ...H..=........$
+ 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x82, 0x59, // ......W........Y
+ 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x82, 0x59, // ...>...$.......Y
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, // ..8...6.......5.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, // ..........7.....
+ 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2e, 0x5f, 0x00, 0x00, 0x3d, 0x00, // ..........._..=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......[......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x53, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // ......%S......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, // .......=......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, // .......=......P.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x56, 0x5b, 0x00, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x25, 0x53, // ......V[...[..%S
+ 0x00, 0x00, 0xc5, 0x3d, 0x00, 0x00, 0xd8, 0x3d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x56, 0x5b, // ...=...=......V[
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x82, 0x0d, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ..........7.....
+ 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8f, 0x41, // ..nb..7........A
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0xf8, 0x00, // ..7........J....
+ 0x02, 0x00, 0xc0, 0x53, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5d, // ...S..;........]
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x60, 0x10, // ......;.......`.
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xbe, 0x39, // ......;...y....9
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x39, // ......;........9
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x91, 0x37, // ......;........7
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x0c, 0x0a, // ......>....]....
+ 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, // ..9...........5.
+ 0x00, 0x00, 0x9d, 0x5d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x23, 0x41, // ...]..=.......#A
+ 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x39, 0x00, 0x00, 0x23, 0x41, // ......>....9..#A
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x50, 0x13, // ..=........,..P.
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x83, 0x2c, 0x00, 0x00, 0x3d, 0x00, // ..>....9...,..=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x19, 0x21, 0x00, 0x00, 0x8f, 0x41, 0x00, 0x00, 0x4f, 0x00, // .......!...A..O.
+ 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xa0, 0x37, 0x00, 0x00, 0x19, 0x21, 0x00, 0x00, 0x19, 0x21, // .......7...!...!
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x91, 0x37, // ..........>....7
+ 0x00, 0x00, 0xa0, 0x37, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe1, 0x5c, // ...7..9.........
+ 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0xbe, 0x39, 0x00, 0x00, 0xf7, 0x39, 0x00, 0x00, 0x91, 0x37, // .......9...9...7
+ 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x09, 0x55, 0x00, 0x00, 0xe1, 0x5c, // ..O........U....
+ 0x00, 0x00, 0xe1, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x09, 0x55, // ......>...`....U
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x49, 0x27, 0x00, 0x00, 0x60, 0x10, // ..=.......I'..`.
+ 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0xef, 0x39, 0x00, 0x00, 0x49, 0x27, // ..O........9..I'
+ 0x00, 0x00, 0x49, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, // ..I'............
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xef, 0x45, 0x00, 0x00, 0x6e, 0x62, // ..=........E..nb
+ 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x75, 0x62, 0x00, 0x00, 0xef, 0x45, // ..O.......ub...E
+ 0x00, 0x00, 0xef, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, // ...E............
+ 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0xed, 0x35, 0x00, 0x00, 0xef, 0x39, // ...........5...9
+ 0x00, 0x00, 0x75, 0x62, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xcb, 0x34, // ..ub..A........4
+ 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..`.......=.....
+ 0x00, 0x00, 0x5f, 0x57, 0x00, 0x00, 0xcb, 0x34, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, // .._W...4........
+ 0x00, 0x00, 0xe2, 0x2d, 0x00, 0x00, 0xed, 0x35, 0x00, 0x00, 0x5f, 0x57, 0x00, 0x00, 0x41, 0x00, // ...-...5.._W..A.
+ 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd4, 0x3d, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x13, 0x0a, // .......=..nb....
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x98, 0x4d, 0x00, 0x00, 0xd4, 0x3d, // ..=........M...=
+ 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0xec, 0x31, 0x00, 0x00, 0xe2, 0x2d, // ...........1...-
+ 0x00, 0x00, 0x98, 0x4d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3f, 0x61, // ...M..=.......?a
+ 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf9, 0x1f, // ..`...O.........
+ 0x00, 0x00, 0x3f, 0x61, 0x00, 0x00, 0xec, 0x31, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, // ..?a...1........
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x60, 0x10, // ..........>...`.
+ 0x00, 0x00, 0xf9, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xb9, 0x48, // ......A........H
+ 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..`.......=.....
+ 0x00, 0x00, 0x1b, 0x1e, 0x00, 0x00, 0xb9, 0x48, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, // .......H..A.....
+ 0x00, 0x00, 0x15, 0x55, 0x00, 0x00, 0x6e, 0x62, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...U..nb......=.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2f, 0x2b, 0x00, 0x00, 0x15, 0x55, 0x00, 0x00, 0x85, 0x00, // ....../+...U....
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xef, 0x23, 0x00, 0x00, 0x1b, 0x1e, 0x00, 0x00, 0x2f, 0x2b, // .......#....../+
+ 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xb7, 0x2d, 0x00, 0x00, 0x8f, 0x41, // ..A........-...A
+ 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x19, // ......=.......[.
+ 0x00, 0x00, 0xb7, 0x2d, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x36, // ...-..........I6
+ 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x5b, 0x19, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0d, 0x00, // ......[.........
+ 0x00, 0x00, 0x74, 0x62, 0x00, 0x00, 0xef, 0x23, 0x00, 0x00, 0x49, 0x36, 0x00, 0x00, 0x41, 0x00, // ..tb...#..I6..A.
+ 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xd0, 0x53, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x13, 0x0a, // .......S..`.....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd0, 0x53, 0x00, 0x00, 0x74, 0x62, 0x00, 0x00, 0x3d, 0x00, // ..>....S..tb..=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x24, 0x2e, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x3e, 0x00, // ......$...`...>.
+ 0x03, 0x00, 0x8c, 0x4a, 0x00, 0x00, 0x24, 0x2e, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ...J..$.......8.
+ 0x01, 0x00, 0x00, // ...
};
-static const uint8_t fs_particle_dx9[326] =
+static const uint8_t fs_particle_dx9[328] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x28, 0x01, 0x00, 0x03, 0xff, // Color0.....(....
- 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ... .CTAB....S..
- 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .<.......s_texCo
- 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // lor.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, // 0.1..Q..........
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, // ?...............
- 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0x80, 0x01, 0x00, 0x07, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, // ................
- 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, // .B..............
- 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, // ................
- 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x54, 0x80, 0x00, 0x00, 0x93, // ...........T....
- 0x90, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xf9, 0x80, 0x00, 0x00, 0xff, // ................
- 0x90, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0xaa, // ................
- 0x91, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0x55, 0x80, 0x00, 0x00, 0x00, // ...........U....
- 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ......
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x28, 0x01, 0x00, 0x00, 0x00, // Color0.....(....
+ 0x03, 0xff, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ...L...0........
+ 0x00, 0x02, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, // ...<.......s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, // Color...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, // 10.1..Q........
+ 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, // ..?.............
+ 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, // ................
+ 0x00, 0x00, 0x80, 0x01, 0x00, 0x07, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, // ................
+ 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, // ...B............
+ 0x08, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, // ................
+ 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x54, 0x80, 0x00, // .............T..
+ 0x00, 0x93, 0x90, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xf9, 0x80, 0x00, // ................
+ 0x00, 0xff, 0x90, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x01, // ................
+ 0x00, 0xaa, 0x91, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0x55, 0x80, 0x00, // .............U..
+ 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ........
};
-static const uint8_t fs_particle_dx11[517] =
+static const uint8_t fs_particle_dx11[519] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xe4, 0x01, 0x44, 0x58, 0x42, // Color0.......DXB
- 0x43, 0xdd, 0x04, 0xf1, 0x4a, 0xaa, 0xb0, 0xdf, 0xe0, 0xf5, 0x18, 0x2f, 0x3b, 0x6e, 0xa9, 0x0e, // C...J....../;n..
- 0x0a, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // .............,..
- 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, // .........ISGNl..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........b......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x07, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, // .SV_POSITION.COL
- 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, // OR.TEXCOORD..OSG
- 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // N,........... ..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
- 0xab, 0x53, 0x48, 0x44, 0x52, 0x08, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, // .SHDR....@...B..
- 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, // .Z....`......X..
- 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, // ..p......UU..b..
- 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x72, 0x10, 0x10, // .........b...r..
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....e.... .....
- 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, // .h.......E......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, // .....F.......F~.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, // ......`......8..
- 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // ."..............
- 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, // .........8......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x19, 0x10, // .....F.......6..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....8...r .....
- 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x1f, 0x10, 0x00, 0x01, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x10, 0x10, // .....".......*..
- 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, // .A........@.....
- 0x3f, 0x38, 0x00, 0x00, 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, // ?8.... .........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, // .............>..
- 0x01, 0x00, 0x00, 0x00, 0x00, // .....
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xe4, 0x01, 0x00, 0x00, 0x44, // Color0.........D
+ 0x58, 0x42, 0x43, 0xdd, 0x04, 0xf1, 0x4a, 0xaa, 0xb0, 0xdf, 0xe0, 0xf5, 0x18, 0x2f, 0x3b, 0x6e, // XBC...J....../;n
+ 0xa9, 0x0e, 0x0a, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, // ...............,
+ 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, // ...........ISGNl
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, // ...........b....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x07, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, // ...SV_POSITION.C
+ 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, // OLOR.TEXCOORD..O
+ 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, // .......SV_TARGET
+ 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x08, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x42, // ...SHDR....@...B
+ 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, // ...Z....`......X
+ 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, // ....p......UU..b
+ 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x72, // ...........b...r
+ 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, // ...h.......E....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, // ~.......`......8
+ 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, // ..."............
+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, // ...........8....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, // .......F.......6
+ 0x19, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x20, 0x10, 0x00, 0x00, // .......8...r ...
+ 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x1f, 0x10, 0x00, 0x01, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, // .......".......*
+ 0x10, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, // ...A........@...
+ 0x00, 0x80, 0x3f, 0x38, 0x00, 0x00, 0x07, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, // ..?8.... .......
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, // ...............>
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // .......
};
static const uint8_t fs_particle_mtl[808] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x19, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x19, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/examples/common/ps/particle_system.cpp b/3rdparty/bgfx/examples/common/ps/particle_system.cpp
index 34ea0261969..7ad93331a37 100644
--- a/3rdparty/bgfx/examples/common/ps/particle_system.cpp
+++ b/3rdparty/bgfx/examples/common/ps/particle_system.cpp
@@ -11,7 +11,6 @@
#include "../packrect.h"
#include <bx/easing.h>
-#include <bx/crtimpl.h>
#include <bx/handlealloc.h>
#include "vs_particle.bin.h"
@@ -25,52 +24,6 @@ static const bgfx::EmbeddedShader s_embeddedShaders[] =
BGFX_EMBEDDED_SHADER_END()
};
-static const bx::EaseFn s_easeFunc[] =
-{
- bx::easeLinear,
- bx::easeInQuad,
- bx::easeOutQuad,
- bx::easeInOutQuad,
- bx::easeOutInQuad,
- bx::easeInCubic,
- bx::easeOutCubic,
- bx::easeInOutCubic,
- bx::easeOutInCubic,
- bx::easeInQuart,
- bx::easeOutQuart,
- bx::easeInOutQuart,
- bx::easeOutInQuart,
- bx::easeInQuint,
- bx::easeOutQuint,
- bx::easeInOutQuint,
- bx::easeOutInQuint,
- bx::easeInSine,
- bx::easeOutSine,
- bx::easeInOutSine,
- bx::easeOutInSine,
- bx::easeInExpo,
- bx::easeOutExpo,
- bx::easeInOutExpo,
- bx::easeOutInExpo,
- bx::easeInCirc,
- bx::easeOutCirc,
- bx::easeInOutCirc,
- bx::easeOutInCirc,
- bx::easeInElastic,
- bx::easeOutElastic,
- bx::easeInOutElastic,
- bx::easeOutInElastic,
- bx::easeInBack,
- bx::easeOutBack,
- bx::easeInOutBack,
- bx::easeOutInBack,
- bx::easeInBounce,
- bx::easeOutBounce,
- bx::easeInOutBounce,
- bx::easeOutInBounce,
-};
-BX_STATIC_ASSERT(BX_COUNTOF(s_easeFunc) == bx::Easing::Count);
-
struct PosColorTexCoord0Vertex
{
float m_x;
@@ -195,7 +148,7 @@ namespace ps
EmitterSpriteHandle create(uint16_t _width, uint16_t _height)
{
- EmitterSpriteHandle handle = { bx::HandleAlloc::invalid };
+ EmitterSpriteHandle handle = { bx::kInvalidHandle };
if (m_handleAlloc.getNumHandles() < m_handleAlloc.getMaxHandles() )
{
@@ -234,8 +187,12 @@ namespace ps
void reset()
{
+ m_dt = 0.0f;
+ m_uniforms.reset();
m_num = 0;
bx::memSet(&m_aabb, 0, sizeof(Aabb) );
+
+ m_rng.reset();
}
void update(float _dt)
@@ -368,15 +325,15 @@ namespace ps
uint32_t render(const float _uv[4], const float* _mtxView, const float* _eye, uint32_t _first, uint32_t _max, ParticleSort* _outSort, PosColorTexCoord0Vertex* _outVertices)
{
- bx::EaseFn easeRgba = s_easeFunc[m_uniforms.m_easeRgba];
- bx::EaseFn easePos = s_easeFunc[m_uniforms.m_easePos];
- bx::EaseFn easeBlend = s_easeFunc[m_uniforms.m_easeBlend];
- bx::EaseFn easeScale = s_easeFunc[m_uniforms.m_easeScale];
+ bx::EaseFn easeRgba = bx::getEaseFunc(m_uniforms.m_easeRgba);
+ bx::EaseFn easePos = bx::getEaseFunc(m_uniforms.m_easePos);
+ bx::EaseFn easeBlend = bx::getEaseFunc(m_uniforms.m_easeBlend);
+ bx::EaseFn easeScale = bx::getEaseFunc(m_uniforms.m_easeScale);
Aabb aabb =
{
- { bx::huge, bx::huge, bx::huge },
- { -bx::huge, -bx::huge, -bx::huge },
+ { bx::kHuge, bx::kHuge, bx::kHuge },
+ { -bx::kHuge, -bx::kHuge, -bx::kHuge },
};
for (uint32_t jj = 0, num = m_num, current = _first
@@ -494,13 +451,11 @@ namespace ps
{
m_allocator = _allocator;
-#if BX_CONFIG_ALLOCATOR_CRT
if (NULL == _allocator)
{
- static bx::CrtAllocator allocator;
+ static bx::DefaultAllocator allocator;
m_allocator = &allocator;
}
-#endif // BX_CONFIG_ALLOCATOR_CRT
m_emitterAlloc = bx::createHandleAlloc(m_allocator, _maxEmitters);
m_emitter = (Emitter*)BX_ALLOC(m_allocator, sizeof(Emitter)*_maxEmitters);
@@ -528,9 +483,9 @@ namespace ps
void shutdown()
{
- bgfx::destroyProgram(m_particleProgram);
- bgfx::destroyTexture(m_texture);
- bgfx::destroyUniform(s_texColor);
+ bgfx::destroy(m_particleProgram);
+ bgfx::destroy(m_texture);
+ bgfx::destroy(s_texColor);
bx::destroyHandleAlloc(m_allocator, m_emitterAlloc);
BX_FREE(m_allocator, m_emitter);
@@ -655,7 +610,7 @@ namespace ps
| BGFX_STATE_CULL_CW
| BGFX_STATE_BLEND_NORMAL
);
- bgfx::setVertexBuffer(&tvb);
+ bgfx::setVertexBuffer(0, &tvb);
bgfx::setIndexBuffer(&tib);
bgfx::setTexture(0, s_texColor, m_texture);
bgfx::submit(_view, m_particleProgram);
@@ -733,13 +688,11 @@ namespace ps
void Emitter::create(EmitterShape::Enum _shape, EmitterDirection::Enum _direction, uint32_t _maxParticles)
{
- m_dt = 0.0f;
- m_uniforms.reset();
+ reset();
+
m_shape = _shape;
m_direction = _direction;
-
- m_num = 0;
- m_max = _maxParticles;
+ m_max = _maxParticles;
m_particles = (Particle*)BX_ALLOC(s_ctx.m_allocator, m_max*sizeof(Particle) );
}
diff --git a/3rdparty/bgfx/examples/common/ps/vs_particle.bin.h b/3rdparty/bgfx/examples/common/ps/vs_particle.bin.h
index df62b8d1e2b..81bb66515b6 100644
--- a/3rdparty/bgfx/examples/common/ps/vs_particle.bin.h
+++ b/3rdparty/bgfx/examples/common/ps/vs_particle.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_particle_glsl[420] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x7f, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ....attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
@@ -28,279 +28,277 @@ static const uint8_t vs_particle_glsl[420] =
0x20, 0x3d, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, // = a_texcoord0;.
0x7d, 0x0a, 0x0a, 0x00, // }...
};
-static const uint8_t vs_particle_spv[3191] =
+static const uint8_t vs_particle_spv[3153] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
- 0x54, 0x0c, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x36, 0x62, // T...#.........6b
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, // ................
- 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, // ......GLSL.std.4
- 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // 50..............
- 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, // ..............ma
- 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, // in..............
- 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
- 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8c, 0x04, // ..main..........
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, // ..Output........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // ......gl_Positio
- 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // n.............v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, // color0..........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // ......v_texcoord
- 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, // 0.........@main(
- 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, // vf4;vf3;vf4;....
- 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..O...a_color0..
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ......:...a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x61, 0x5f, // tion.......M..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, // texcoord0.......
- 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, // .._varying_.....
- 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ..^...$Global...
- 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..^.......u_view
- 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x01, 0x00, // Rect......^.....
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
- 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..^.......u_view
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......^.......u_
- 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, // invView.......^.
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
- 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..^.......u_invP
- 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, // roj.......^.....
- 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
- 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..^.......u_invV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, // iewProj.......^.
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
- 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..^.......u_mode
- 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, // lView.....^.....
- 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
- 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.....^.......u_
- 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, // alphaRef4.....B.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x61, 0x5f, // ...........A..a_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x89, 0x14, // color0..........
- 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..a_color0......
- 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ...?..a_position
- 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ..........a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, // tion......@,..a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, // texcoord0.......
- 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..a_texcoord0...
- 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, // ......flattenTem
- 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // p......U..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // .......8..param.
- 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, // ..........param.
- 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, // ..........@entry
- 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, // PointOutput_gl_P
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x38, 0x04, // osition.......8.
- 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, // ..Output......8.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ......v_color0..
- 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, // ......8.......v_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, // texcoord0.......
- 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
- 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, 0x06, 0x00, // put...G.........
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, // ..@...H...^.....
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#.......H...^.
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
- 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..^...........H.
- 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..^.......#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...^.........
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, // ......H...^.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, // ......H...^.....
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#...`...H...^.
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..^...........H.
- 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..^.......#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...^.........
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, // ......H...^.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, // ......H...^.....
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#.......H...^.
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..^...........H.
- 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..^.......#... .
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...^.........
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, // ......H...^.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, // ......H...^.....
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#...`...H...^.
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..^...........H.
- 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..^.......#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...^.........
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, // ......H...^.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, // ......H...^.....
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, // ..#.......H...^.
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
- 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..^...........H.
- 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..^.......#.....
- 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H...^.........
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, // ......H...^.....
- 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x5e, 0x05, // ..#... ...G...^.
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, // ......G...B...".
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, // ......G.........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
- 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
- 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x1d, 0x00, // ................
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x85, 0x09, // ..........!.....
- 0x00, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, // ................
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8c, 0x04, // .. .............
- 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, // ..+.............
- 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, // .?+.............
- 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, // ..,.............
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
- 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, // ..............,.
- 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, // ......z.........
- 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, // ..........+.....
- 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, // ..............e.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, // ................
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, // .. .......+.....
- 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xab, 0x03, // ..j... .........
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x5e, 0x05, // ..e...j.......^.
- 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..........e...e.
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
- 0x00, 0x00, 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......e...e.....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x05, // .. ...........^.
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, // ..;.......B.....
- 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, // ..+.......).....
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, // .. ...........e.
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, // ..;.............
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x38, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......8.........
- 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x04, // .. ...........8.
- 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb5, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, // ..;.............
- 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
- 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........Sa..;.
- 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......U......;.
- 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......8......;.
- 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......A......=.
- 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, // .......?......=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, // ......@,......>.
- 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, // ...U...A..>....8
- 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, // ...?..>.......@,
- 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0xcc, 0x0d, // ..9.......I&....
- 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ...U...8......>.
- 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ......I&..A.....
- 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..T4..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, // ..........T4..>.
- 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ..'A..........=.
- 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x41, 0x00, // ..........'A..A.
- 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x0b, 0x0a, // .......N........
- 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x41, 0x00, // ..>....N......A.
- 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, // .......M........
- 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0xc1, 0x4d, // ..=............M
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, // ..A.............
- 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x01, 0x5c, 0x00, 0x00, 0xe0, 0x1c, // ......>.........
- 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x8c, 0x04, // ......8...6.....
- 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00, 0x37, 0x00, // ..............7.
- 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, // ......O...7.....
- 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb9, 0x4d, // ..:...7........M
- 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, // ......_W..;.....
- 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..........A.....
- 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..d-..........>.
- 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ..d-......A.....
- 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...8..........>.
- 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, // ...8..z...=.....
- 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, // ..5b..:...Q.....
- 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, // ..;:..5b......Q.
- 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, // .......G..5b....
- 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x35, 0x62, // ..Q.......+S..5b
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, // ......P........2
- 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x8a, 0x00, // ..;:...G..+S....
- 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, // ..A.......),..B.
- 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, // ..)...=...e....<
- 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, // ..),...........;
- 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ...2...<..A.....
- 0x00, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, // .._8..........>.
- 0x03, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // .._8...;..=.....
- 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ...!..O...A.....
- 0x00, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ..-<..........>.
- 0x03, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..-<...!..=.....
- 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, // ...!...M..A.....
- 0x00, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, // ...<..........>.
- 0x03, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x8c, 0x04, // ...<...!..=.....
- 0x00, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, // ..G:..........G:
- 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ..8....
+ 0x2c, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // ,.....#.........
+ 0x36, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // 6b..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........v.......
+ 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
+ 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
+ 0x8c, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....Output......
+ 0x8c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // ........gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.............
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0x8c, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ........v_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // rd0.........@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // n(vf4;vf3;vf4;..
+ 0x05, 0x00, 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....O...a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ........:...a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, // sition.......M..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
+ 0x05, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ....^...$Global.
+ 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....^.......u_vi
+ 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, // ewRect......^...
+ 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
+ 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....^.......u_vi
+ 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew......^.......
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
+ 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ^.......u_proj..
+ 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ....^.......u_in
+ 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, // vProj.......^...
+ 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
+ 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ....^.......u_in
+ 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
+ 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ^.......u_model.
+ 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....^.......u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, // delView.....^...
+ 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.....^.......
+ 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
+ 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, // B............A..
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
+ 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....?..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, // sition......@,..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....a_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........8..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x05, 0x00, 0x0a, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, // ........@entryPo
+ 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // intOutput.v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, // oord0...G.......
+ 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ....@...H...^...
+ 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x5e, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^.......#.......
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
+ 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ^.......G...B...
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, // ".......G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, // ........G.......
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, // ........G...v...
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
+ 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, // ................
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
+ 0x85, 0x09, 0x00, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, // ................
+ 0x9a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x8c, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ............ ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ...?+...........
+ 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, // ....,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // +...............
+ 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ,.......z.......
+ 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, // ................
+ 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // e...............
+ 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, // ....j... .......
+ 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, // ....e...j.......
+ 0x5e, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ^...........e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x65, 0x00, 0x00, 0x00, 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e.......e...e...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x5e, 0x05, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // ^...;.......B...
+ 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // ....+.......)...
+ 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // .... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // e... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // .... ...........
+ 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // ....;...........
+ 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, // ....;.......v...
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ....;...........
+ 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
+ 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
+ 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........8......
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // =........A......
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // =........?......
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // =.......@,......
+ 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....U...A..>...
+ 0x95, 0x38, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, // .8...?..>.......
+ 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, // @,..9.......I&..
+ 0xcc, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // .....U...8......
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......I&..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....T4..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // =...........T4..
+ 0x3e, 0x00, 0x03, 0x00, 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x9a, 0x02, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, // =....... ....@..
+ 0x3e, 0x00, 0x03, 0x00, 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...v... ...A...
+ 0x9a, 0x02, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // .....@..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, // =........-...@..
+ 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, // >........-......
+ 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, // 8...6...........
+ 0x00, 0x00, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........7.......
+ 0x4f, 0x2e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, // O...7.......:...
+ 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, // 7........M......
+ 0x5f, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // _W..;...........
+ 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, // ....A.......d-..
+ 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, // ........>...d-..
+ 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, // ....A........8..
+ 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, // ........>....8..
+ 0x7a, 0x0b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, // z...=.......5b..
+ 0x3a, 0x19, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, // :...Q.......;:..
+ 0x35, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // 5b......Q.......
+ 0x0b, 0x47, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // .G..5b......Q...
+ 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....+S..5b......
+ 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, // P........2..;:..
+ 0x0b, 0x47, 0x00, 0x00, 0x2b, 0x53, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .G..+S......A...
+ 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, // ....),..B...)...
+ 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, // =...e....<..),..
+ 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, // .........;...2..
+ 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, 0x00, 0x00, // .<..A......._8..
+ 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, 0x00, 0x00, // ........>..._8..
+ 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, // .;..=........!..
+ 0x4f, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2d, 0x3c, 0x00, 0x00, // O...A.......-<..
+ 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, 0x00, 0x00, // ........>...-<..
+ 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, // .!..=........!..
+ 0xb9, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2e, 0x3c, 0x00, 0x00, // .M..A........<..
+ 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x3c, 0x00, 0x00, // ........>....<..
+ 0x1e, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x8c, 0x04, 0x00, 0x00, 0x47, 0x3a, 0x00, 0x00, // .!..=.......G:..
+ 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, // ........G:..8...
+ 0x00, // .
};
-static const uint8_t vs_particle_dx9[347] =
+static const uint8_t vs_particle_dx9[349] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x38, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // 8.......!.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, // ompiler 10.1....
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
- 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
- 0x00, 0x80, 0x02, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, // ................
- 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, // ....U...........
- 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
- 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, // ................
- 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, // ................
- 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, // ................
- 0x0f, 0xe0, 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ...........
+ 0x38, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // 8.........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ................
+ 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ......U.........
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, // ................
+ 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, // ................
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, // ................
+ 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x02, 0x00, 0x0f, 0xe0, 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .............
};
-static const uint8_t vs_particle_dx11[620] =
+static const uint8_t vs_particle_dx11[622] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x40, 0x02, 0x44, 0x58, 0x42, 0x43, 0x94, 0x83, 0x4e, 0xd2, 0x28, 0xd5, 0xeb, 0x87, 0x3e, 0xf5, // @.DXBC..N.(...>.
- 0xa1, 0x65, 0x63, 0x87, 0x0e, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x03, 0x00, // .ec.......@.....
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
- 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......V.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x5f, 0x00, // .............._.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, // ......COLOR.POSI
- 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, // TION.TEXCOORD.OS
- 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNl...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, // ..............b.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
- 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
- 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x28, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x4a, 0x00, // ..SHDR(...@...J.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, // ..r......._.....
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e.... ....
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e.... ......h.
- 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
- 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, // ......F.......2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ........... ....
- 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..F.......F. ...
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......6.... ....
- 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, // ..F.......6....
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......F.......>.
- 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ..........@.
+ 0x40, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x94, 0x83, 0x4e, 0xd2, 0x28, 0xd5, 0xeb, 0x87, // @...DXBC..N.(...
+ 0x3e, 0xf5, 0xa1, 0x65, 0x63, 0x87, 0x0e, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, // >..ec.......@...
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, // ....,...........
+ 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNh...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........V.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, // ................
+ 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // _...............
+ 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, // ........COLOR.PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // SITION.TEXCOORD.
+ 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNl...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // b...............
+ 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // ION.COLOR.TEXCOO
+ 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x28, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // RD..SHDR(...@...
+ 0x4a, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // J...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _...r......._...
+ 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, // ........g.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....e.... ......
+ 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, // h.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....V.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ........2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
+ 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, // F............ ..
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....F.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, // ........6.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, // ....F.......6...
+ 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // . ......F.......
+ 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // >...........@.
};
static const uint8_t vs_particle_mtl[777] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0xe4, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
diff --git a/3rdparty/bgfx/examples/common/shaderlib.sh b/3rdparty/bgfx/examples/common/shaderlib.sh
index 5871aaf5cac..a890edba368 100644
--- a/3rdparty/bgfx/examples/common/shaderlib.sh
+++ b/3rdparty/bgfx/examples/common/shaderlib.sh
@@ -383,4 +383,13 @@ vec3 fixCubeLookup(vec3 _v, float _lod, float _topLevelCubeSize)
return _v;
}
+vec2 texture2DBc5(sampler2D _sampler, vec2 _uv)
+{
+#if BGFX_SHADER_LANGUAGE_HLSL && BGFX_SHADER_LANGUAGE_HLSL <= 3
+ return texture2D(_sampler, _uv).yx;
+#else
+ return texture2D(_sampler, _uv).xy;
+#endif
+}
+
#endif // __SHADERLIB_SH__
diff --git a/3rdparty/bgfx/examples/makefile b/3rdparty/bgfx/examples/makefile
index f39a5d4e988..3a5fff89c65 100644
--- a/3rdparty/bgfx/examples/makefile
+++ b/3rdparty/bgfx/examples/makefile
@@ -33,6 +33,10 @@ rebuild:
@make -s --no-print-directory rebuild -C 28-wireframe
@make -s --no-print-directory rebuild -C 30-picking
@make -s --no-print-directory rebuild -C 31-rsm
+ @make -s --no-print-directory rebuild -C 33-pom
+# @make -s --no-print-directory rebuild -C 34-mvs
+# @make -s --no-print-directory rebuild -C 35-dynamic
+ @make -s --no-print-directory rebuild -C 36-sky
@make -s --no-print-directory rebuild -C common/debugdraw
@make -s --no-print-directory rebuild -C common/font
@make -s --no-print-directory rebuild -C common/imgui
diff --git a/3rdparty/bgfx/examples/runtime/meshes/bunny.bin b/3rdparty/bgfx/examples/runtime/meshes/bunny.bin
index 794ec22c7fe..e3aaed17b0e 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/bunny.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/bunny.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/bunny_decimated.bin b/3rdparty/bgfx/examples/runtime/meshes/bunny_decimated.bin
index 74810680ee5..d2f2f07e3f6 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/bunny_decimated.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/bunny_decimated.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/bunny_patched.bin b/3rdparty/bgfx/examples/runtime/meshes/bunny_patched.bin
index 4031761a56f..217bffeb5ab 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/bunny_patched.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/bunny_patched.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/column.bin b/3rdparty/bgfx/examples/runtime/meshes/column.bin
index a58c780d121..2d1d1dc5dd3 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/column.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/column.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/cube.bin b/3rdparty/bgfx/examples/runtime/meshes/cube.bin
index 9395fc6a3f6..874c9408e58 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/cube.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/cube.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/hollowcube.bin b/3rdparty/bgfx/examples/runtime/meshes/hollowcube.bin
index 0ea300901e5..7e3e4b8423e 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/hollowcube.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/hollowcube.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/orb.bin b/3rdparty/bgfx/examples/runtime/meshes/orb.bin
index 22b9a8af452..bd454afba03 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/orb.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/orb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/platform.bin b/3rdparty/bgfx/examples/runtime/meshes/platform.bin
index de63c2457b8..27b604341e2 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/platform.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/platform.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/test_scene.bin b/3rdparty/bgfx/examples/runtime/meshes/test_scene.bin
new file mode 100644
index 00000000000..6f75d1a8c15
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/meshes/test_scene.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/tree.bin b/3rdparty/bgfx/examples/runtime/meshes/tree.bin
index 93aaea0bc92..6daa0cef736 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/tree.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_1.bin b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_1.bin
index 66b672664b1..dcce8a7aaa4 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_1.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_2.bin b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_2.bin
index 8cb6e5f9e5a..c7cdb1dd67b 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_2.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_1.bin b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_1.bin
index 8d69ed81a0c..d27ea1f0e45 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_1.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_2.bin b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_2.bin
index 2c903cb9fea..08d57375fc2 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_2.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_1.bin b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_1.bin
index 5a172df2a48..4b8d4b7d275 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_1.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_2.bin b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_2.bin
index 8b44cb32297..821151e0d9d 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_2.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_indirect.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_indirect.bin
index 1d6b836a5e6..9d76e2dca86 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_indirect.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_indirect.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_init_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_init_instances.bin
index 7d2ad935881..f6d19ff3704 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_init_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_init_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update.bin
index 1b77e9e7487..7af1c161e82 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update_instances.bin
index 5f9fc49ebe9..8079696a125 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_bump.bin
index 21650cca90f..c6f5a6f8318 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_callback.bin
index 3b8307c7bb6..4716b766f5b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_cubes.bin
index 5bd281a0889..2b9f62d1e75 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_combine.bin
index 126bf9b99c0..d1fa77c8ab6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug.bin
index 3406a9c63ce..12ee53584a9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug_line.bin
index 5bd281a0889..2b9f62d1e75 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_geom.bin
index 76b01317d43..c6e5ac9999e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_light.bin
index e4d10bd7976..e6ccaeca961 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_blur.bin
index ba98412874d..d4fee7f7c11 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_bright.bin
index d56757ab9b2..1b6867a22af 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lum.bin
index 999b85009f1..19a90fc36da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lumavg.bin
index da88dceecee..d716cbcc346 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_mesh.bin
index 40295d5052b..191f52f3c00 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_skybox.bin
index 481cbe4ff45..b4a90881c6a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_tonemap.bin
index 14b02b0779d..ac44616a915 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.bin
index 68159a75736..0c0686c30a9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.bin
index 07ca7e697d5..71b1c80dd45 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_instancing.bin
index 5bd281a0889..2b9f62d1e75 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_mesh.bin
index 3ef2924ff5a..07b5a043c92 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit.bin
index dbc13a82124..f02b7ff1a4c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb.bin
index b0e0b24c880..4fea6d1ad79 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_blit.bin
index 77b88f46d8d..b4c5a1d36aa 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate.bin
index 04457e27027..1fa73b6c6d9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate_blit.bin
index 4515d187d73..882e1c6e773 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_particle.bin
index e9ac1a71c49..e5403c6d818 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_id.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_id.bin
index 88fffd64461..fcac5047940 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_id.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_id.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_shaded.bin
index efa26898d42..bcf4af9a934 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_pom.bin
new file mode 100644
index 00000000000..e7f2edbfcf7
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_raymarching.bin
index dabd907d908..ecb5c631995 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_combine.bin
index 5c633734433..6ff24cf175e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_gbuffer.bin
index 71c20d5bfc5..08ab7cd6046 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_lbuffer.bin
index ae81827f81b..758d3710d75 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_shadow.bin
index faf21f024b8..dee777f1cc9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_black.bin
index 2477d864d9a..3c8438df3ff 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.bin
index b27f3fd3fc7..dbf81e9af09 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.bin
index 03a3f89b28f..8b003f70c2b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.bin
index f85d0ec52b1..2527026a758 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index 39d115c48e3..028de266e95 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index 13ad93358d9..c752c64e62b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.bin
index d688775bd11..bc9918fabba 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.bin
index 00300aa3a4e..87ae7ef43df 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.bin
index 3fa09702654..f92a5a7296a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.bin
index 12eaab3eb5e..2e51f9885be 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index 98f5ff1429a..3271b349e08 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index 07e12b43e1b..4df2fa79e38 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.bin
index cde6f19fc26..19b926614d3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.bin
index 2faada8a015..2b4c048da9d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.bin
index 76b37271222..988d4f35adf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.bin
index cf8a001ccb4..5f2f3780192 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 67c95d9110b..2407c8c1e17 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index 748714f916d..4f8bfc5108f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.bin
index 26fac391383..e164bfad59f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.bin
index 27d528221a8..8faed8186d1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.bin
index e2184d5b475..aa5f8f469a0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.bin
index c06948c1609..9430045991c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index 91716e56c98..cb2331a579e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index 338bd6fc819..13d958d9c97 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.bin
index 4ecfdbb92da..b71718bda3e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_texture.bin
index 91b9ec7b7a1..95a3be93c02 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur.bin
index 29c825647fb..5544d1541f2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur_vsm.bin
index 31537c44f98..0ef90508b8a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth.bin
index c8ffafa85fd..c1c1ab2cd6f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_linear.bin
index e9c292b023b..c2227363ac9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm.bin
index b9857fdf3b2..a43066927ad 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm_linear.bin
index eb459e0913a..b92459daa63 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_texture.bin
index 3406a9c63ce..12ee53584a9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth.bin
index 490815ca33b..6c6eded5970 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth_vsm.bin
index 84c229fdd9e..7bb83918872 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur.bin
index 29c825647fb..5544d1541f2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur_vsm.bin
index 31537c44f98..0ef90508b8a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_lighting.bin
index 6a27c7300f7..38943ad851d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_texture.bin
index 91b9ec7b7a1..95a3be93c02 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackblank.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackblank.bin
index 7d08d4d8815..77c63305798 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackcolor.bin
index 02b5d7d35cc..0c04a1df8f2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex1.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex1.bin
index e9063cb8be1..28749bc7bd2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex2.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex2.bin
index c71bdb9c136..e7421cf6c7d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontblank.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontblank.bin
index cc76e50f1c8..f07ee8edcbd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontcolor.bin
index 02b5d7d35cc..0c04a1df8f2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex1.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex1.bin
index e9063cb8be1..28749bc7bd2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex2.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex2.bin
index c71bdb9c136..e7421cf6c7d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svside.bin
index 4b54caf54fb..cc8056bc938 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsideblank.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsideblank.bin
index 7a7e6bfc25a..94180da7744 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsideblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsideblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidecolor.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidecolor.bin
index 49f452c9c26..19d143a848d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidecolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidecolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidetex.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidetex.bin
index 26d3ba7dc4c..62c3990780a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidetex.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidetex.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture.bin
index 3406a9c63ce..12ee53584a9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture_lighting.bin
index 2bac69eb29e..c9db7cbb01e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky.bin
new file mode 100644
index 00000000000..efa83e430a5
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_color_banding_fix.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_color_banding_fix.bin
new file mode 100644
index 00000000000..4f27bda5fd2
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_color_banding_fix.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_landscape.bin
new file mode 100644
index 00000000000..86e0973aab0
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh.bin
index bd64ce32deb..2b08d1b03c3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh_pd.bin
index 5f675f24a27..a099e576688 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow.bin
index 2477d864d9a..3c8438df3ff 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow_pd.bin
index 0f69b9b3764..b0b46163259 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_black.bin
index 2477d864d9a..3c8438df3ff 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_lighting.bin
index b7bb1b79867..77d57c6374d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_texture.bin
index 91b9ec7b7a1..95a3be93c02 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture.bin
index 3406a9c63ce..12ee53584a9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture_lighting.bin
index 05648ed06ea..ab66d955539 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_terrain.bin
index a0a7362a6f1..677e9c936de 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_tree.bin
index 9b7564ecfd5..324d8a20922 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update.bin
index 0d9517a6904..712e1fe3763 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_3d.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_3d.bin
index 0108d173eb5..7d5b72cc0db 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_3d.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_3d.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_cmp.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_cmp.bin
index 948b91cdb64..02abe8cc6b3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_cmp.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_cmp.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blit.bin
index a774280e2e4..37a29f4b46d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blur.bin
index c7144ae8468..cae0afbafc0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_fb.bin
index f16eb976640..43bc241d0e8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.bin
index 76647c0b804..ff7c01cd0c3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.bin
index 3706b830375..c093b9b3ec2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump.bin
index 596456d7cd4..8f0f9a6b858 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump_instanced.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump_instanced.bin
index 577c2f0c390..1bb7658b7e9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump_instanced.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump_instanced.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_callback.bin
index ec8b4310ea5..4e788fddbf7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_cubes.bin
index 2ab2bb4c2d8..ab87c4d38be 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_combine.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug_line.bin
index 2ab2bb4c2d8..ab87c4d38be 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_geom.bin
index 596456d7cd4..8f0f9a6b858 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_light.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_blur.bin
index 2163232b6ff..fdda8914fc8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_bright.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lum.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lumavg.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_mesh.bin
index 778bf4db1a2..b80c79d8ea7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_skybox.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_tonemap.bin
index d43e9788fbf..5d28e6ef0bd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.bin
index 90127469c67..ed84b0ea4d0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.bin
index 1b32e1c6552..25db13100f3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_instancing.bin
index 72fbf2b22b9..ffc57559d0b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_mesh.bin
index 0be1bdcaab9..37306a62f88 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit.bin
index 9b908d92d84..d40a998f05b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit_blit.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_particle.bin
index 8d5c20604fc..66f49c3b9b6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_picking_shaded.bin
index 27e8c4d29b9..4eacc67d733 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_pom.bin
new file mode 100644
index 00000000000..4ac83864f38
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_raymarching.bin
index 32a98a3bd43..95944baac28 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_combine.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_gbuffer.bin
index 40a542facc4..db036e4f2c5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_lbuffer.bin
index be1624f7796..15126ac35db 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_shadow.bin
index 1a351d8cd61..2450aa3a17c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color.bin
index ea5a1bb9eec..cdd31d5b96b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting.bin
index 9db9b5cf657..a57cbd66c0b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_csm.bin
index fa34dbe5903..773e45e5f46 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear.bin
index 33294bc60f7..d50feeb361a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_csm.bin
index 1d1a9cb4336..0697368ead0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_omni.bin
index 2f77d700594..9eb9e9366ce 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_omni.bin
index 5f1c27c88c3..9e87c8f19ec 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_texture.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_depth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_depth.bin
index ea5a1bb9eec..cdd31d5b96b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_depth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_depth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_hblur.bin
index ae4f645b805..1385028408c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth.bin
index 571197880c4..55874eef02d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth_linear.bin
index bb3c7e10045..e7ba59f36de 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture_lighting.bin
index aee7ea99961..54f6b03ed44 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_unpackdepth.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_vblur.bin
index 7f4381f77fa..b2e0af64c99 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_lighting.bin
index 22ca9af2f5f..83a8b0dcef7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_texture.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svback.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svback.bin
index f7df4d8245a..8573c9220e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svfront.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svfront.bin
index ea5a1bb9eec..cdd31d5b96b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svfront.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svfront.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svside.bin
index 02904ce8d68..3546fd1ca31 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture_lighting.bin
index 643a962a1ce..71adeae0756 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky.bin
new file mode 100644
index 00000000000..b51c22b85dd
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky_landscape.bin
new file mode 100644
index 00000000000..c7b2078a0a5
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_mesh.bin
index 29a82478915..b1f9adff11c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow.bin
index ea5a1bb9eec..cdd31d5b96b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow_pd.bin
index cfe2231a2f5..f73c5b88c7b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color.bin
index ea5a1bb9eec..cdd31d5b96b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_lighting.bin
index 74709d7dddd..ca8fd9c8e71 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_texture.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture.bin
index 2278290e567..8df2a6c91d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture_lighting.bin
index 0503e565ef7..5fe63b36058 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain.bin
index 2e6d5ee7036..b28906d67e0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain_height_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain_height_texture.bin
index 46b5c60864e..122fd81317d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain_height_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain_height_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_tree.bin
index ccbdc821768..f2775605005 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_update.bin
index d8d9558017c..653915535d9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_vectordisplay_fb.bin
index 32a98a3bd43..95944baac28 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.bin
index f65702b92e7..72aae341f3f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.bin
index 076f9d1dabe..864e91a85cf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_bump.bin
index 0bbed79b2d0..8f2bf049446 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_callback.bin
index f4029f69e3e..64c91246d2e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_cubes.bin
index 6d4ef1b4d2f..05fa80a0ff0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_combine.bin
index a9a94d824b8..da3168a051d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug.bin
index c5226754e80..52d07b144bf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug_line.bin
index 6d4ef1b4d2f..05fa80a0ff0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_geom.bin
index 69e787f9fd8..61cc60fb2b4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_light.bin
index 33b5ff2f99b..3df1338bc69 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_blur.bin
index bb1a5ddd0a4..96ed616269d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_bright.bin
index d05370a4cce..28e47b54515 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lum.bin
index 330c7dd0e62..a1708481259 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lumavg.bin
index c250d0dea26..409382a8033 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_mesh.bin
index fb420978d0a..bdb7ad9f019 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_skybox.bin
index 289470a20ef..a31f47bac6d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_tonemap.bin
index af58dba43ca..7705f51f054 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.bin
index e0de0e492eb..be9f7fdd9c8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.bin
index 9fbd81b7707..37e515f22bb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_instancing.bin
index 6d4ef1b4d2f..05fa80a0ff0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_mesh.bin
index 56531b9c011..5c5646bf62b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit.bin
index 614430ef6e4..ff6d9283e99 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb.bin
index b20c9962efc..136df585552 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_blit.bin
index 479e2eb2bc0..4044af87ac3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate.bin
index 2b6793f957d..932c9071f01 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate_blit.bin
index 74df8e13034..8e95955a6de 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_particle.bin
index 982bfeca0ca..b711b05873c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_id.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_id.bin
index 196bc9fce7b..053088baf0b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_id.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_id.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_shaded.bin
index ff62518a363..3acfb3d06b9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_pom.bin
new file mode 100644
index 00000000000..d075d1a040c
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_raymarching.bin
index f5c5d8b2d8c..ae965d8ffc3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_combine.bin
index 94bd26359e0..870d0dc725b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_gbuffer.bin
index eea80f14e3d..9b9038fab36 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_lbuffer.bin
index ac4fd25725c..3204f06cb0f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_shadow.bin
index 3d6b3bbdbe5..d2904989fc6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_black.bin
index baf268c8b4a..b5eaba34214 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.bin
index db122398ea4..0ff747224fd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.bin
index dbb6e0a1e8c..e6bb942c920 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.bin
index 8a68c453742..0d727d2cf60 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index 09a82c47df1..203e5836d7e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index bdb0ac4ad60..9cda99023e1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.bin
index f6187d878f6..96d816e89da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.bin
index 79f2d13c97a..0cbe6e8e66c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.bin
index 1b719acded8..b86427c4b34 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.bin
index 6f6c8ca3311..640543ba6dc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index f4a2cada986..6b270c17d4f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index 7fa56ec09ee..fbc0e069366 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.bin
index edf3b4903c1..c0fa688f46f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.bin
index a85f2281267..69c721325da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.bin
index cb00b9317eb..135bd86d7c6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.bin
index 5e598b53023..e42044c5847 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 165ed1f326a..0d273401499 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index 33f5b1be4bd..217bebe6163 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.bin
index 6b299d28f5d..ee592e733df 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.bin
index ae7b8e2b633..c9fcb63c37f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.bin
index d3a9956b623..6a70545dad6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.bin
index 9220fb8e2d4..d9255282626 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index 44567b43571..9cf31b3c3d5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index 1416e2be18d..4cbc40009eb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.bin
index 0294a352f5f..bc142f33b1a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_texture.bin
index caaa54e27cc..437fce12c91 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur.bin
index ee54494cfd6..3d348dd3e9e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur_vsm.bin
index a3f188e99c2..9b2764cfc59 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth.bin
index 09224a67f60..170e6132534 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_linear.bin
index 052a8e96895..e4c682c8304 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm.bin
index 3a3d6404806..7c93e3dbb9f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm_linear.bin
index d3805e6928e..be9b761e204 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_texture.bin
index c5226754e80..52d07b144bf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth.bin
index 5f353998ddf..52d0781bec2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth_vsm.bin
index cd3f3899718..33429031a2e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur.bin
index ee54494cfd6..3d348dd3e9e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur_vsm.bin
index a3f188e99c2..9b2764cfc59 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_lighting.bin
index 8681d2d02e5..15fbc983ea4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_texture.bin
index caaa54e27cc..437fce12c91 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackblank.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackblank.bin
index 5fe9ad7a740..918062eabf2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackcolor.bin
index 464bbf7f053..39940cb6d9a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex1.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex1.bin
index 88cf24388df..a1c89a10295 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex2.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex2.bin
index dfe8ea5a89b..251d0d9f135 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontblank.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontblank.bin
index 461be44d1bc..094a5250461 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontcolor.bin
index 464bbf7f053..39940cb6d9a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex1.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex1.bin
index 88cf24388df..a1c89a10295 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex2.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex2.bin
index dfe8ea5a89b..251d0d9f135 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svside.bin
index a7721ab2dae..90bd0c3c360 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsideblank.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsideblank.bin
index 0fd691c95f8..877bfb79d19 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsideblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsideblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidecolor.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidecolor.bin
index 90967be40e9..e2f2a02d09b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidecolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidecolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidetex.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidetex.bin
index 61bdfcb08a6..ef53032fde7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidetex.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidetex.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture.bin
index c5226754e80..52d07b144bf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture_lighting.bin
index bfb2ad01a8d..168320d7243 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky.bin
new file mode 100644
index 00000000000..c4dd3e08868
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_color_banding_fix.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_color_banding_fix.bin
new file mode 100644
index 00000000000..2d6725b0b8c
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_color_banding_fix.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_landscape.bin
new file mode 100644
index 00000000000..14df655f54c
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh.bin
index 9a7507e465d..259e3550c20 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh_pd.bin
index 1854dd616ce..fa13f4450ef 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow.bin
index baf268c8b4a..b5eaba34214 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow_pd.bin
index 405ddd4e856..2dcde77c974 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_black.bin
index baf268c8b4a..b5eaba34214 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_lighting.bin
index 6c2e7f8e189..0d48f9e048f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_texture.bin
index caaa54e27cc..437fce12c91 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture.bin
index c5226754e80..52d07b144bf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture_lighting.bin
index 51345849de3..f1ae1d4047f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_terrain.bin
index d08caeff540..75bcfcf1029 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_tree.bin
index 5c77ac5f2bb..0802f84f751 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update.bin
index 36011876de6..e969ebb9ce7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_3d.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_3d.bin
index 62c711a830f..103c6688f69 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_3d.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_3d.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_cmp.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_cmp.bin
index c364da7c626..3cd8dcf0b50 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_cmp.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_cmp.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blit.bin
index 321ffc9f959..052deac9419 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blur.bin
index ba21fde3f16..7ff53a66baa 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_fb.bin
index 648d3900d67..3fc3e0f2ec6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.bin
index 00e61c8a1c5..27c11168bf5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.bin
index 4de1f2a9cfb..e6867ec155c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump.bin
index 4ff78329d22..6fbc2e16ee5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump_instanced.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump_instanced.bin
index 7cf67dc6b9e..69858b9d19b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump_instanced.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump_instanced.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_callback.bin
index 1d27d8ddd2c..9442d999deb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_cubes.bin
index 93fc6d81e18..10b4e17a2bf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_combine.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug_line.bin
index 93fc6d81e18..10b4e17a2bf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_geom.bin
index 4ff78329d22..6fbc2e16ee5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_light.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_blur.bin
index 8ffbef2ab5f..108678a83f7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_bright.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lum.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lumavg.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_mesh.bin
index 06a62a0c65f..dfd2689314a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_skybox.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_tonemap.bin
index 6c266b05fbe..fb696b33dee 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.bin
index b407bed4a5f..8d56b1b9da1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.bin
index 8af9ed570c1..e6dcec6b89c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_instancing.bin
index 9416d29836c..000999e073f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_mesh.bin
index 29e55ba675f..cde801db0a2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit.bin
index 96f1a7ac393..871fab033e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit_blit.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_particle.bin
index f768947e09e..49fcb754d0b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_picking_shaded.bin
index 80dd71fbb7f..9b139c74e96 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_pom.bin
new file mode 100644
index 00000000000..d09bd04b371
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_raymarching.bin
index c7e8bd05dac..07b9f6342ce 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_combine.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_gbuffer.bin
index 3edf79f2c39..f44abc88aa7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_lbuffer.bin
index e5f1873c992..64243600af4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_shadow.bin
index 1597c2bf60c..28072c43ede 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color.bin
index 564da461f03..039dc22d8f6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting.bin
index ac3722689a3..c785cf4a390 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_csm.bin
index 5ca7da2a8ab..574f202a46c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear.bin
index 82c78616f60..2fc4395dc7f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_csm.bin
index e597f3515b4..bb82cd81684 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_omni.bin
index 0515dc01b8e..d9ca2c06923 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_omni.bin
index 65ec4f1c835..83a7a4837c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_texture.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_depth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_depth.bin
index 564da461f03..039dc22d8f6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_depth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_depth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_hblur.bin
index f4bdd188f74..af91acec42b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth.bin
index 8c8a4ac4de4..d9b2359c9f2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth_linear.bin
index 12e3a523cf2..afe517c86ac 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture_lighting.bin
index 65a1021a287..253fce22942 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_unpackdepth.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_vblur.bin
index af8fbf00987..99d73c667b8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_lighting.bin
index 68727653849..b8eb2d50107 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_texture.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svback.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svback.bin
index 1f7b6b454d5..37dafb669fa 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svfront.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svfront.bin
index 564da461f03..039dc22d8f6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svfront.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svfront.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svside.bin
index 23c1b16a590..df7adcd964b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture_lighting.bin
index a5e2e3d57b6..5f1e1eef752 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky.bin
new file mode 100644
index 00000000000..e3c224b40fa
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky_landscape.bin
new file mode 100644
index 00000000000..e73c96f9210
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_mesh.bin
index 885d9ef5bb1..c73265111a7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow.bin
index 564da461f03..039dc22d8f6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow_pd.bin
index 48c0c1af7dc..a6344da18c0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color.bin
index 564da461f03..039dc22d8f6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_lighting.bin
index 7fa53cf0270..499a5ecfb07 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_texture.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture.bin
index 068cb998d06..83bdf080955 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture_lighting.bin
index b0013458146..c0c0dfa1c4a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain.bin
index 09e2282680b..3d0df14bedd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain_height_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain_height_texture.bin
index 41877c3c81e..b0609f78960 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain_height_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain_height_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_tree.bin
index 0301ba75bd9..ac3c98b20de 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_update.bin
index 7dc12edbd2a..42f667dfa6f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_vectordisplay_fb.bin
index c7e8bd05dac..07b9f6342ce 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.bin
index e02227e32dd..f1dac3304ff 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.bin
index 03658ed0aaa..63acee334a0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/cs_indirect.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/cs_indirect.bin
index 1faf1aeb562..f95029086b5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/cs_indirect.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/cs_indirect.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/cs_init_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/cs_init_instances.bin
index d74d461cfac..a2473b11edd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/cs_init_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/cs_init_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/cs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/cs_update.bin
index 6d9efc1491c..99c38441b3b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/cs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/cs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/cs_update_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/cs_update_instances.bin
index ddd207ccf9a..b2a964470ca 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/cs_update_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/cs_update_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_bump.bin
index c0d146336e2..fa98e0537fb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_callback.bin
index 4be92138513..f9b1d495bee 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_cubes.bin
index de509a3eeb5..63df9808a99 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_combine.bin
index 9f444cd6809..10bac969d3d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug.bin
index 18195420f57..f1dc985b9da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug_line.bin
index de509a3eeb5..63df9808a99 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_geom.bin
index 16d128fe345..049d76649f9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_light.bin
index 2730664891e..f83a1ab0a5b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_blur.bin
index 91adc88bec9..cc9accec213 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_bright.bin
index f978ba318f9..bac6ec6f1d3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lum.bin
index 5c24ceba783..f6988f468a2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lumavg.bin
index c1454ba68c7..e9fba02f29b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_mesh.bin
index 57551110328..93a070598d0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_skybox.bin
index ab749d22b16..f21e872cca5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_tonemap.bin
index 48b5272d87c..62933308bfa 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_mesh.bin
index a4cd92a1904..02524f211ea 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_skybox.bin
index 76079d0ec8d..c2e537dbc2b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_instancing.bin
index de509a3eeb5..63df9808a99 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_mesh.bin
index 75aeaeeaadf..2671868ee0b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit.bin
index 8c5294afa49..9f2a41f4d6c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb.bin
index e594526cf19..8905cdc7f4a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_blit.bin
index 4de4a7d474c..20eb5cdad3e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate.bin
index 3b51e727e87..296838e0b1f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate_blit.bin
index e85ddbedf34..5f912331c4c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_particle.bin
index d56a476ee07..d191ebac17a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_id.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_id.bin
index 91acdf18ecd..14ffc773691 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_id.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_id.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_shaded.bin
index 62c604c3d4a..efa7dad0005 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_pom.bin
new file mode 100644
index 00000000000..21eaf2fd855
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_raymarching.bin
index 0fc2f3703ff..c0084eed311 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_combine.bin
index 5567c79446b..483e716d36c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_gbuffer.bin
index 911c8ff6f09..39fb810286d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_lbuffer.bin
index 207c88361b2..14563d74f85 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_shadow.bin
index 6c9adff2df9..a7e34982b88 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_black.bin
index 98147ab064a..29069e6cb91 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm.bin
index 72ed5111aee..3d331ab9276 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_csm.bin
index 7c77f0cbbfe..1bd12f6e197 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear.bin
index 789141dcccc..c89e206913d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index 3c1d07e15f6..314f000057c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index 1503d413ab3..b470f641215 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_omni.bin
index f79e214b2da..67af83c65f4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard.bin
index c6f6593ea1e..c541f4a7e01 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_csm.bin
index 74c0c1cf2a9..75c3cf48018 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear.bin
index c0e05951bdd..ddd82912229 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index 19062f01b8c..c28a33e85a1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index 6187725d9f2..f8585acf35d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_omni.bin
index 133e398538c..fd4bdd5bb23 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf.bin
index 422bf35ec8e..bc9cfdf6b75 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_csm.bin
index 9f78cbeee15..141fcb861fb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear.bin
index 5ee79f73a28..ed1a956c7c8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 4bb6fa06e51..909fb3699d8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index 456040c60a3..c1dceb67030 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_omni.bin
index fc57ca84ebc..6b1b03362c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm.bin
index ccababe2e1b..0f6f65d469b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_csm.bin
index 74ff8b8dd26..44e5d861467 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear.bin
index 754e424ea12..28f01d109b2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index 53f2ea31f22..2aed8fe71a7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index 0b0a1bbbf16..884fc080089 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_omni.bin
index ad331bd4ffd..594042d1c3b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_texture.bin
index d843710a8b0..00de9a89929 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur.bin
index c50ce9cc452..7196f7a84f7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur_vsm.bin
index cde87278282..796808b9453 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth.bin
index d6bdeb0b6c9..49f76084e3b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_linear.bin
index c1c6b516290..76519bdacc2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm.bin
index e50fed3c64d..614e1961b17 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm_linear.bin
index c2ccac516e4..716cfe3efe5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_texture.bin
index 18195420f57..f1dc985b9da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth.bin
index db9d665275d..262994bae68 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth_vsm.bin
index 5044da1a692..711ef73f96d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur.bin
index c50ce9cc452..7196f7a84f7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur_vsm.bin
index cde87278282..796808b9453 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_lighting.bin
index a96ffde0b40..7b5c73a2634 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_texture.bin
index d843710a8b0..00de9a89929 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackblank.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackblank.bin
index c2fb7eac9cc..5d310245b63 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackcolor.bin
index 037db8cc859..935e2c54598 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex1.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex1.bin
index be30cfc29dc..50b8fe5b268 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex2.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex2.bin
index add036b2560..82192a42221 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontblank.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontblank.bin
index 4b7b683d8cc..83d02971d85 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontcolor.bin
index 037db8cc859..935e2c54598 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex1.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex1.bin
index 3b160781d19..e7691a357c2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex2.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex2.bin
index 92620196e3a..6721feb5a47 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svside.bin
index 205d7185386..2055cd77a13 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsideblank.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsideblank.bin
index 24f593e21da..9fe181388cb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsideblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsideblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidecolor.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidecolor.bin
index 455d85035da..a84c6e4b29b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidecolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidecolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidetex.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidetex.bin
index 0e732199535..2add2f2af00 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidetex.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidetex.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture.bin
index 18195420f57..f1dc985b9da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture_lighting.bin
index 5e59912aba7..4a2b2d1af7e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky.bin
new file mode 100644
index 00000000000..2f5255b47c5
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_color_banding_fix.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_color_banding_fix.bin
new file mode 100644
index 00000000000..b29146fb15b
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_color_banding_fix.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_landscape.bin
new file mode 100644
index 00000000000..d0135478c7e
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh.bin
index b9f060dbd20..3ba8bc9a204 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh_pd.bin
index 227b76c4fa2..9ee7078c02a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow.bin
index 3262874eaf3..e006dc8b470 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow_pd.bin
index 3c4b91fdcca..7e22df1d2e3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_black.bin
index 98147ab064a..29069e6cb91 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_lighting.bin
index f3e5bd234a5..1b2bce57890 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_texture.bin
index d843710a8b0..00de9a89929 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture.bin
index 18195420f57..f1dc985b9da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture_lighting.bin
index f35896a59d8..ed7eac4e3c8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_terrain.bin
index 4a73d9a9985..e91285b6501 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_tree.bin
index d9398b15c40..2254212a7e0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update.bin
index f754924f104..062c1eee11b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_3d.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_3d.bin
index 1566fb77bef..0f95a3f0241 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_3d.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_3d.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_cmp.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_cmp.bin
index 57a1dc6c27b..4185316699a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_cmp.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_cmp.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blit.bin
index 14776fe31e5..2ea058ed347 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blur.bin
index 9c3bee0bf39..08429206b4a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_fb.bin
index 2d63fcfca45..910381e42db 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_mesh.bin
index a090c615b90..07a455919fb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_wireframe.bin
index f39c7916d82..e4219a676c5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump.bin
index bc648979ebf..73c4316837c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump_instanced.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump_instanced.bin
index dca3ab761cc..bfbc0fe8b97 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump_instanced.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump_instanced.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_callback.bin
index c476e63c8f1..ac81e0f8325 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_cubes.bin
index e45e21d5221..c4c13589fb2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_combine.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug_line.bin
index e45e21d5221..c4c13589fb2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_geom.bin
index bc648979ebf..73c4316837c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_light.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_blur.bin
index b01e8d247be..f76497fe659 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_bright.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lum.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lumavg.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_mesh.bin
index 54ca679f238..1322d7d2157 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_skybox.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_tonemap.bin
index 40e2f68e743..c7cc9d044fc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_mesh.bin
index bbd50acd51f..7c55ec631fa 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_skybox.bin
index d518d061f73..4a3f3cdf2ef 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_instancing.bin
index 809e2ef0fd1..bb137d355e0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_mesh.bin
index 206f16ac278..f321e526e53 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit.bin
index 0aa675e0471..35803e08fc4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit_blit.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_particle.bin
index 319468ccf2b..2f237b5f671 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_picking_shaded.bin
index d066f631d54..7ee9e0a5d94 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_pom.bin
new file mode 100644
index 00000000000..8823becb858
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_raymarching.bin
index e1ad85e5d40..ac1c19b7ee5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_combine.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_gbuffer.bin
index e86a13cbb9b..870d0bc54d9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_lbuffer.bin
index 68d4a767431..69d4d4c4f23 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_shadow.bin
index cd0a5da2676..706ae7a9135 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color.bin
index 0f88a6bbb88..b92b121610f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting.bin
index f94a6d8164a..aadcbeed675 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_csm.bin
index 2b37ce8c997..4a24059fffa 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear.bin
index 72c9d7f909f..f26d4e0e954 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_csm.bin
index 203531db55f..9b330e6121f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_omni.bin
index 9a969e29c97..e603b51097f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_omni.bin
index 7dc9beebe9e..052719364e7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_texture.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_depth.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_depth.bin
index 0f88a6bbb88..b92b121610f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_depth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_depth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_hblur.bin
index cbc198fafc3..df76dea07fe 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth.bin
index f0322e5fdd6..5dac8eab0d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth_linear.bin
index 133ae6017cb..e5b768b3a35 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture_lighting.bin
index b79e5f767a5..175dee16fee 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_unpackdepth.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_vblur.bin
index ea2ef934f60..9fa45531ab7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_lighting.bin
index 9e99653dd37..24282ddadab 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_texture.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svback.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svback.bin
index 3c54366063d..462df45cc07 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svfront.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svfront.bin
index 0f88a6bbb88..b92b121610f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svfront.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svfront.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svside.bin
index 1bc67deb511..857bfd85d34 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture_lighting.bin
index b79e5f767a5..175dee16fee 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky.bin
new file mode 100644
index 00000000000..81358a9d346
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky_landscape.bin
new file mode 100644
index 00000000000..b90c5455237
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_mesh.bin
index 0b61754c913..49f9ecc82b4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow.bin
index 0f88a6bbb88..b92b121610f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow_pd.bin
index f0322e5fdd6..5dac8eab0d2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color.bin
index 0f88a6bbb88..b92b121610f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_lighting.bin
index 9e99653dd37..24282ddadab 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_texture.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture.bin
index 3368689b86a..433ae1c6ea9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture_lighting.bin
index b79e5f767a5..175dee16fee 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain.bin
index 4376fd3aecf..98dc951a069 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain_height_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain_height_texture.bin
index 2d84f6c487b..da93f664508 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain_height_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain_height_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_tree.bin
index 4dcda77b709..5c6db350dd2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_update.bin
index 11ae4ca3876..b5d42a43d6b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_vectordisplay_fb.bin
index e1ad85e5d40..ac1c19b7ee5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_mesh.bin
index 39b2f0bbc48..a8e75a76c59 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_wireframe.bin
index f456e30f22c..91702d4a76d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.bin
index 4eb428e0ebf..e03ff08f132 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.bin
index 4c0e8a47ffc..4ee2968c976 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update.bin
index 0c75741cec7..2c4b5735604 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.bin
index 7a1ca7734ae..9af5bfddcce 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_bump.bin
index d8f1a5d7226..c914bb0e700 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_callback.bin
index ea83094fa23..a23a4a13066 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_cubes.bin
index 6f8e3df8290..9d60f87204d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_combine.bin
index 5deb207e94d..1307504d09e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug.bin
index d9bf2d2c4a0..2d87b63a218 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug_line.bin
index 6f8e3df8290..9d60f87204d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_geom.bin
index 2a833e00bfb..2036d69c95a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_light.bin
index f623de8d234..abacd365731 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_blur.bin
index c51399d333a..ecb9b984db9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_bright.bin
index 11d6506257d..c6f9fd2af86 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lum.bin
index 062005e0a8f..cb5c8e05721 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lumavg.bin
index e5f6cc585fe..040f862ef87 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_mesh.bin
index 6a3d0772e14..5e3fe0e2d0b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_skybox.bin
index a14e4323d1a..ed7caeaa154 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_tonemap.bin
index 2a877923cef..5796c2b5791 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.bin
index ea3aad7be31..6044b1350de 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.bin
index 3ac60719279..81614474b58 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_instancing.bin
index 6f8e3df8290..9d60f87204d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_mesh.bin
index e761dfca77e..491773847b0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit.bin
index cd6f420e9dd..2ad08be5814 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.bin
index 32f69e5aed2..a8cff306477 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_blit.bin
index f7552195b08..82a3bdc5046 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.bin
index 56a47cab952..caef3aa1aa9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate_blit.bin
index 5386f067f20..58199e2ba8a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_particle.bin
index 6153a0ee0b3..86e58edb301 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_id.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_id.bin
index be0e43459bf..bca1dced386 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_id.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_id.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_shaded.bin
index d53e31c1b60..d246e39f312 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_pom.bin
new file mode 100644
index 00000000000..4c00375397c
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_raymarching.bin
index 19c63becfe8..37d7cecf065 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_combine.bin
index b7809eec282..b20e165f68b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_gbuffer.bin
index 1dcf49ce0da..d343ec1fc51 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_lbuffer.bin
index b1277284441..854b305fc71 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_shadow.bin
index c8b88b15b41..c83a220218b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin
index 98147ab064a..29069e6cb91 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting.bin
deleted file mode 100644
index 59c31058dd1..00000000000
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting.bin
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.bin
index 4f66a07bb0f..ebb5c663bb9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.bin
index 7249ac3fc01..ea03266f379 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.bin
index 57a0637840f..75dd33bf678 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index daa9d7bc412..e91345d0dd3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index 5213127e2b3..1d6952e44d9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.bin
index 0728fd38ac9..c2bc7d6d346 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.bin
index 40a6fe35f34..bbc9e329089 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.bin
index 27694944113..076c88e4f20 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.bin
index 68de56248ff..b780e2b947a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index e9d07c376e4..ca29f002e39 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index eceb44fdf0f..5ae5112cbd4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.bin
index d7893ba4369..7933101aa20 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_omni.bin
deleted file mode 100644
index e7e5a789d92..00000000000
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_omni.bin
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.bin
index 3638832c180..34aec4128bb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.bin
index 957f309bc5e..ed95ff87aeb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.bin
index 03143cba754..111125d58f3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 202b3b76236..daf497797a6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index 7d6487b1514..74d3a079813 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.bin
index d8f9e902fac..0adab72ebc8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pfc.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pfc.bin
deleted file mode 100644
index e23f13ea467..00000000000
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pfc.bin
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.bin
index 46a9e14444f..35476a7d555 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.bin
index 5af575e1be6..dc3f1e2e12e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.bin
index 17290531064..93ca65a80df 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index 79058cad0d7..39e382cd307 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index 5915c930f4e..4da9fb83d14 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.bin
index 93b5a2a0bb2..c08f9f92f8c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin
index 16e982ef81c..51787654ef6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_depth.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_depth.bin
deleted file mode 100644
index 88de442d267..00000000000
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_depth.bin
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin
index f8fa7a5d8b6..325dcf47958 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.bin
index 5a506e22099..e00a2587f3e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin
index 6148b430945..47084aa5226 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin
index d59593b94a3..d39e0431d73 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin
index 1c3b380747f..a07aff40bdc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.bin
index d89b12c6a1f..3e7de52da22 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin
index d9bf2d2c4a0..2d87b63a218 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin
index 6602f5e43e0..0623b5a1799 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin
index 2c61fc1cc22..b98ee828441 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin
index f8fa7a5d8b6..325dcf47958 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.bin
index 5a506e22099..e00a2587f3e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_lighting.bin
index 1dd99786c68..bc4a60a7d83 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_texture.bin
index 16e982ef81c..51787654ef6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.bin
index 5bbd5e24023..1184af2c071 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackcolor.bin
index d7f14f0edc7..bdf84e0c416 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex1.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex1.bin
index 41599dec915..2fcfd4ff33d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex2.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex2.bin
index a8ebd7e2e24..a6fe0fe7559 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.bin
index 04a7b089fef..45ca975fde1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontcolor.bin
index d7f14f0edc7..bdf84e0c416 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex1.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex1.bin
index 63ec33854a4..11fe6a568ce 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex2.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex2.bin
index c69fe99787f..f2fa741d202 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svside.bin
index 46bb55c8e5b..5c71e457f84 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsideblank.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsideblank.bin
index 24f593e21da..9fe181388cb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsideblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsideblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidecolor.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidecolor.bin
index cfcae3f3b06..b993b530c65 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidecolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidecolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidetex.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidetex.bin
index 90ade7bdfde..d64d6efc5a0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidetex.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidetex.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture.bin
index d9bf2d2c4a0..2d87b63a218 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture_lighting.bin
index 4d517df717d..17b10b95cec 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky.bin
new file mode 100644
index 00000000000..c78ac5816fe
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_color_banding_fix.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_color_banding_fix.bin
new file mode 100644
index 00000000000..abcc25523b3
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_color_banding_fix.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_landscape.bin
new file mode 100644
index 00000000000..50aa653ff83
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh.bin
index e9b3d24ad35..bd088ef6e45 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.bin
index 8e0fb26cd2b..f70f3b90ac0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.bin
index 946d0e83e3b..a934ec994bc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.bin
index c590fd26595..8dd1025eba1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_black.bin
index 98147ab064a..29069e6cb91 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.bin
index 7977435653d..fc9d23f0938 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_texture.bin
index 16e982ef81c..51787654ef6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture.bin
index d9bf2d2c4a0..2d87b63a218 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.bin
index b53189391ea..feb48120118 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_terrain.bin
index ca6d2b57c90..a89cd44b4a8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_tree.bin
index 6da14d14952..8b4b2cf8f0d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update.bin
index 4c63286d14f..6032f09182a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.bin
index f5f2c0271dd..45be6d15c22 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_cmp.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_cmp.bin
index 8140d027b7c..6320d3d15b7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_cmp.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_cmp.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blit.bin
index ecbe0244c48..a2a612959fd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blur.bin
index de29eabbdd0..66daf296c29 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_fb.bin
index 43ef526713b..2c71104eeb4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.bin
index d297e624e2a..6b793eec524 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.bin
index c6118cce70f..6a48bed2b7c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump.bin
index 1305f0b5ae4..c0b72c63d3e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump_instanced.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump_instanced.bin
index f36aa07e97f..29f3ada84c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump_instanced.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump_instanced.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_callback.bin
index 22c9c2a85a4..8184803667e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_cubes.bin
index 14e430c2852..150f27f5264 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_combine.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug_line.bin
index 14e430c2852..150f27f5264 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_geom.bin
index 1305f0b5ae4..c0b72c63d3e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_light.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_blur.bin
index 7842c331742..3f2e6933eae 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_bright.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lum.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lumavg.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_mesh.bin
index 1673c922879..0fe83067d1c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_skybox.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_tonemap.bin
index 98cbe1fdbde..a007e298043 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.bin
index 924d39fbdcf..0c5aefb66b2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.bin
index e079c0a9c25..b37bfca960c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_instancing.bin
index a625ee1cf96..829b75fecf5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_mesh.bin
index 4402482062d..6ad523fb0d6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit.bin
index 22442f74b74..c923a458f8f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit_blit.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_particle.bin
index 79a7c5a725f..8cb4e392809 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_picking_shaded.bin
index 786b5e30d1d..886e377980a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_pom.bin
new file mode 100644
index 00000000000..e40566ff21f
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_raymarching.bin
index e2941e6b5cb..e4995e045c4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_combine.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_gbuffer.bin
index 3bf03fd859f..c0444c7d3e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_lbuffer.bin
index 8553e1738a0..bae04e47c4c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_shadow.bin
index a5d351de0f8..1f6652e4937 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color.bin
index 1e0b06b0abf..398530eeb59 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting.bin
index 22a1174e4fd..c300f8c43da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_csm.bin
index 88275faa666..79e0c628a72 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear.bin
index 9be46ed63a3..8eefb898667 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_csm.bin
index f7dd09c0b22..ac9639886c1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_omni.bin
index ab2b5f800da..1011786aada 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_omni.bin
index 791d2d8f7a8..a706d0a3ca3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin
index 1e0b06b0abf..398530eeb59 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin
index 4745bd56d42..c7d472b1150 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin
index 099732ee310..74fd30729a7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin
index 948af8f4698..d9d5a4a8458 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lighting.bin
index aa79e920ad2..5e5a2908bcc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin
index 16073d09cd3..759a54be855 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_lighting.bin
index 851bba285e4..5cf4500b4fb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_texture.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svback.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svback.bin
index 42a40d7fb47..c751e13632b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svfront.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svfront.bin
index 1e0b06b0abf..398530eeb59 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svfront.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svfront.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svside.bin
index 8a8bd58d57a..ea98c73dd5a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture_lighting.bin
index aa79e920ad2..5e5a2908bcc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky.bin
new file mode 100644
index 00000000000..2f4fd1a8bfb
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky_landscape.bin
new file mode 100644
index 00000000000..d56b6b8df51
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_mesh.bin
index f78b90342e4..52587e3324b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow.bin
index 1e0b06b0abf..398530eeb59 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow_pd.bin
index 099732ee310..74fd30729a7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color.bin
index 1e0b06b0abf..398530eeb59 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_lighting.bin
index 851bba285e4..5cf4500b4fb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_texture.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture.bin
index c75e2e66ea5..16256a7f9e6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture_lighting.bin
index aa79e920ad2..5e5a2908bcc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain.bin
index e4612f7cfc6..ec58bc7ec2c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain_height_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain_height_texture.bin
index 7b2a872eca2..a21d30a1766 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain_height_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain_height_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_tree.bin
index 06e825aaa8d..8cecadc99bb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_update.bin
index 81f5a9c4109..9abf83c62be 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_vectordisplay_fb.bin
index e2941e6b5cb..e4995e045c4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.bin
index 558881a8f49..4bbf1385360 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.bin
index 70a464fa95a..54bf815983f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_bump.bin
index 831c729affa..2e42593fa72 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_callback.bin
index 58d758e91a4..3cf849aa247 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_cubes.bin
index fb726f353c0..3ff34192801 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_combine.bin
index 5950822c89c..a5ca6ef82d6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug.bin
index b38e4e984e8..aa3ce2b958d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug_line.bin
index fb726f353c0..3ff34192801 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_geom.bin
index bd292b28605..2006efe204e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_light.bin
index 2ddbfc156ef..14bb098f10c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_blur.bin
index e329bc195be..bf46675212b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_bright.bin
index 093651d2a73..880deaa1858 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lum.bin
index 7ad754a433f..ae47a344f3f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lumavg.bin
index 51fa0080c7a..08269ef0f87 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_mesh.bin
index 7df7f02267c..ff6164f00e3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_skybox.bin
index f433db94853..ea3da4bdd86 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_tonemap.bin
index db65cb98fb0..47cdd426aee 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.bin
index f7c3ea20039..55bdde44b34 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.bin
index a905ac381a5..8c26433b29e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_instancing.bin
index fb726f353c0..3ff34192801 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_mesh.bin
index 83a3ea763a9..f7b6f828bc5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit.bin
index 4fa819fdc3b..59843e09a91 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.bin
index e44fc212e36..733759d17c4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.bin
index 097f64900ad..a447eaf52c2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.bin
index 67af5f107e2..92fc0493538 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.bin
index 53e6d85d4dc..db9c5777c39 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_particle.bin
index c93179a6a7e..c0479fff088 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_id.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_id.bin
index 560fdafa660..713c3374d0d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_id.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_id.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_shaded.bin
index 23593fa1153..2234b998952 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_pom.bin
new file mode 100644
index 00000000000..89d540e6853
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_raymarching.bin
index 25aac889cd0..50352ac8ef3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_combine.bin
index 439e1e721a4..b756180c47a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_gbuffer.bin
index 736ac3d0b86..6549b3f98cb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_lbuffer.bin
index a45a0037c78..b6a7af399b0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_shadow.bin
index 034f5c9e0db..54ae85bae7f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_black.bin
index 5281abc6100..0b9dc1ffa90 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin
index 8565a15fb5d..2ff67615d5c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin
index 4e88b953ece..eb179b9ffcf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin
index 2ac490d8540..7157b0b6d12 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index 2d48feaf2aa..8198b2df2de 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index 0f8cfc8a463..403470ec625 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin
index dee4d83b84c..593cd036204 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin
index 8ec9c2accc3..7be4bae158f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin
index 7f5de78498d..3f9ebfa96ca 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin
index 4c69e3d063e..46325b9db70 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index 93ee4f56aa0..d30a38a588a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index 5dd33e1a714..2d9586aa730 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin
index d026111daf0..1b879ce485e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin
index d56d39d2164..6f1683b2410 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin
index 571fe9bc9fb..3dda9c959a3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin
index 34b779da828..487b206ac3e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 6a0e70f4e6b..6262c494a5a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index b7ca5f1a767..8c9a8b52ac9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin
index da84002d4ea..0150fb5f31d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin
index 2e2518e36a8..56ed7b3d214 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin
index dea8f830dfc..983d0ac0e7e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin
index 2ede35a568d..db266dea6bd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index 99f12b63ebb..0a098eeba9a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index 42f6554bf1f..ccae510cca8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin
index ada6cf9f15a..acb4ca6af46 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin
index 161a8539849..0f49175dec6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin
index 9fedecfbe3b..9666abdfe9b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin
index 8f2c20066ae..5d79cc7be9b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.bin
index d1f5168ad70..ec868c565f1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.bin
index f55e6c3070a..10126128fb3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm.bin
index 07f4b8a9087..83cf33547b9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm_linear.bin
index e213e723697..8689cf2d8d0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin
index b38e4e984e8..aa3ce2b958d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin
index 91cbc854335..6897465fb64 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin
index f349f0e7926..b66be6cbc46 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin
index 9fedecfbe3b..9666abdfe9b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin
index 8f2c20066ae..5d79cc7be9b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_lighting.bin
index 71d39ce70f9..12744a9eb0f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_texture.bin
index 161a8539849..0f49175dec6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.bin
index 8c862f82423..0c544141a79 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackcolor.bin
index e48a7978e84..15a8e36e021 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex1.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex1.bin
index 03b684d3715..037a6f38f98 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex2.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex2.bin
index 9c6c3b18c4d..0412c30690d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.bin
index 02c48d50520..b1fa9c7bc3d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontcolor.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontcolor.bin
index e48a7978e84..15a8e36e021 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontcolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontcolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex1.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex1.bin
index 04dfa5f37e2..5bbc27209ad 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex1.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex1.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex2.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex2.bin
index 9bb07c416ca..06d7d37fadb 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex2.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex2.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svside.bin
index 14bbdca33b5..79e25c011ef 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsideblank.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsideblank.bin
index aaf666c25d8..4700c389428 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsideblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsideblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidecolor.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidecolor.bin
index 168195796fc..49e205087b0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidecolor.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidecolor.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidetex.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidetex.bin
index c02710ef9d9..b3080f5a87d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidetex.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidetex.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture.bin
index b38e4e984e8..aa3ce2b958d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture_lighting.bin
index e45ad93ff32..a5f8a29547a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky.bin
new file mode 100644
index 00000000000..ec4e5e83bba
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_color_banding_fix.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_color_banding_fix.bin
new file mode 100644
index 00000000000..133d6b9fceb
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_color_banding_fix.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_landscape.bin
new file mode 100644
index 00000000000..dac3a52b303
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.bin
index ec01205da92..1805ebf3bac 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.bin
index e523373c5ff..0c038195456 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.bin
index cf7e94f8984..4c3ca0d8656 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.bin
index a572d6ef993..4e7434fbb90 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_black.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_black.bin
index 5281abc6100..0b9dc1ffa90 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_black.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_black.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.bin
index 5d9dc76e1b4..3ed40ba63d0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_texture.bin
index 161a8539849..0f49175dec6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture.bin
index b38e4e984e8..aa3ce2b958d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.bin
index 27ea4ad05a8..1b0f07511e0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.bin
index 1d49aeb2b5c..c4f090cb1c4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.bin
index fd7981ee747..b55308694ff 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update.bin
index 158f0bc520e..fdf013b07f2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.bin
index b6a551acc91..0a6165da7ce 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_cmp.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_cmp.bin
index 8d277fd134b..d8ad1f1e54c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_cmp.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_cmp.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blit.bin
index d3933793997..beab7df8116 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blur.bin
index d886785e87d..c56cea09a34 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_fb.bin
index 54437faa818..84adfc2f5e4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.bin
index 0bb6880470c..e6f8deee158 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.bin
index 9096ed02a80..5eaa7b107c2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump.bin
index 2119dcc786b..dc9015d6296 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump_instanced.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump_instanced.bin
index f1fe936bb2a..d6eaa41e790 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump_instanced.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump_instanced.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_callback.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_callback.bin
index 610567d0238..31436982b1d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_callback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_callback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_cubes.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_cubes.bin
index a679a02deb7..c6826ec90b4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_cubes.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_cubes.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_combine.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug_line.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug_line.bin
index a679a02deb7..c6826ec90b4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug_line.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug_line.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_geom.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_geom.bin
index 2119dcc786b..dc9015d6296 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_geom.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_geom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_light.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_light.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_light.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_light.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_blur.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_blur.bin
index 861ec60e1c2..62023765f7e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_blur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_blur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_bright.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_bright.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_bright.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_bright.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lum.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lum.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lum.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lum.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lumavg.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lumavg.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lumavg.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lumavg.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_mesh.bin
index f2ecf1a7fec..35cb1fbd589 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_skybox.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_tonemap.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_tonemap.bin
index 9f324c99107..88f4a3d2459 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_tonemap.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_tonemap.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.bin
index e3ecfa35c6f..5ea1732c970 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.bin
index 808f221b75b..e8581859832 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_instancing.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_instancing.bin
index 2476985befb..2da0b2e7c3d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_instancing.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_instancing.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_mesh.bin
index 57d0da3b133..83299cce6fd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit.bin
index 3cd8f5d30a8..aaba13f3c50 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit_blit.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_particle.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_particle.bin
index e308828d8cd..f5d16233ab4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_particle.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_particle.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_picking_shaded.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_picking_shaded.bin
index c45be190d11..5f2a7ddc0ee 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_picking_shaded.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_picking_shaded.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_pom.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_pom.bin
new file mode 100644
index 00000000000..6d70812e971
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_pom.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_raymarching.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_raymarching.bin
index 07734cc5f42..d2c5d3574d6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_raymarching.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_raymarching.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_combine.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_combine.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_combine.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_combine.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin
index 98bf5d5d127..cdeadb1e612 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin
index c0d34ef4bb7..81cf0473356 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_shadow.bin
index d2b636cdb24..e01a613a734 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color.bin
index 234d69270ea..a7eab4ec79e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting.bin
index c193ce164a6..bd572fddd01 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.bin
index 99119b8f922..77b298dbe31 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear.bin
index a30b8987502..610535969fa 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.bin
index 524a05b38a0..50e1c7b2b5b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_omni.bin
index 843311e562a..17b07549e51 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_omni.bin
index dc1cdd71355..3bf3cf46c4d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_texture.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_depth.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_depth.bin
index 234d69270ea..a7eab4ec79e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_depth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_depth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_hblur.bin
index 0fbb040da07..1aa88bb8368 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth.bin
index 07b18a8c130..722827816c1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth_linear.bin
index a56204bb29d..3b5933b213f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture_lighting.bin
index 47c1c27ba3e..05d1f6c0a06 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_unpackdepth.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_vblur.bin
index 25e10b1440f..f307801ad06 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_lighting.bin
index 98ec2766555..960f0aaeded 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_texture.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svback.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svback.bin
index 67f7323afa3..780a29fdbe4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svback.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svback.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svfront.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svfront.bin
index 234d69270ea..a7eab4ec79e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svfront.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svfront.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svside.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svside.bin
index d04ec26a0c6..3e0b8936b7a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svside.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svside.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture_lighting.bin
index 47c1c27ba3e..05d1f6c0a06 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky.bin
new file mode 100644
index 00000000000..bec2f65e0d2
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky_landscape.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky_landscape.bin
new file mode 100644
index 00000000000..c01ad2cb6c0
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky_landscape.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_mesh.bin
index 97f6a49b7c5..e65f2dfd712 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow.bin
index 234d69270ea..a7eab4ec79e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow_pd.bin
index 07b18a8c130..722827816c1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color.bin
index 234d69270ea..a7eab4ec79e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_lighting.bin
index 98ec2766555..960f0aaeded 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_texture.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture.bin
index 3cf134249f4..6706c0b40c7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture_lighting.bin
index 47c1c27ba3e..05d1f6c0a06 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.bin
index e6ed70af26a..8ab1985418c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.bin
index 59f6f0c8d47..17cdcc658f5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_tree.bin
index e65a964584c..80f396921f1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_update.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_update.bin
index 4f6274ed260..fdfcd937207 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_update.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_update.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_vectordisplay_fb.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_vectordisplay_fb.bin
index 07734cc5f42..d2c5d3574d6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_vectordisplay_fb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_vectordisplay_fb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.bin
index 3fe8b59c069..d7c95e4d91b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.bin
index e8169c44638..35b9e5fdc82 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/lightmap.ktx b/3rdparty/bgfx/examples/runtime/textures/lightmap.ktx
new file mode 100644
index 00000000000..93daf24a202
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/textures/lightmap.ktx
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/msdf.png b/3rdparty/bgfx/examples/runtime/textures/msdf.png
new file mode 100644
index 00000000000..10c9f68c5e5
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/textures/msdf.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/parallax-d.ktx b/3rdparty/bgfx/examples/runtime/textures/parallax-d.ktx
new file mode 100644
index 00000000000..4b73fc3792e
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/textures/parallax-d.ktx
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/parallax-h.ktx b/3rdparty/bgfx/examples/runtime/textures/parallax-h.ktx
new file mode 100644
index 00000000000..01c3a125593
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/textures/parallax-h.ktx
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/parallax-n.ktx b/3rdparty/bgfx/examples/runtime/textures/parallax-n.ktx
new file mode 100644
index 00000000000..a5a2d7b21b6
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/textures/parallax-n.ktx
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc1.ktx b/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc1.ktx
index 6dfe1108cc6..21bc6840365 100644
--- a/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc1.ktx
+++ b/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc1.ktx
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc2.ktx b/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc2.ktx
index 5b191d2b2f1..1bfa7ba3479 100644
--- a/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc2.ktx
+++ b/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc2.ktx
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc3.ktx b/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc3.ktx
index ed4ae91eec2..fa27b104acf 100644
--- a/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc3.ktx
+++ b/3rdparty/bgfx/examples/runtime/textures/texture_compression_bc3.ktx
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/texture_compression_etc1.ktx b/3rdparty/bgfx/examples/runtime/textures/texture_compression_etc1.ktx
index b5006848dbc..fea5ac28f84 100644
--- a/3rdparty/bgfx/examples/runtime/textures/texture_compression_etc1.ktx
+++ b/3rdparty/bgfx/examples/runtime/textures/texture_compression_etc1.ktx
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/texture_compression_etc2.ktx b/3rdparty/bgfx/examples/runtime/textures/texture_compression_etc2.ktx
index 0d14cf29da5..61bbf0a63e2 100644
--- a/3rdparty/bgfx/examples/runtime/textures/texture_compression_etc2.ktx
+++ b/3rdparty/bgfx/examples/runtime/textures/texture_compression_etc2.ktx
Binary files differ
diff --git a/3rdparty/bgfx/include/bgfx/bgfx.h b/3rdparty/bgfx/include/bgfx/bgfx.h
index 32db9282744..7f3a4936f0f 100644
--- a/3rdparty/bgfx/include/bgfx/bgfx.h
+++ b/3rdparty/bgfx/include/bgfx/bgfx.h
@@ -10,14 +10,14 @@
#include <stdint.h> // uint32_t
#include <stdlib.h> // NULL
-#include <bgfx/defines.h>
+#include "defines.h"
///
-#define BGFX_HANDLE(_name) \
- struct _name { uint16_t idx; }; \
- inline bool isValid(_name _handle) { return bgfx::invalidHandle != _handle.idx; }
+#define BGFX_HANDLE(_name) \
+ struct _name { uint16_t idx; }; \
+ inline bool isValid(_name _handle) { return bgfx::kInvalidHandle != _handle.idx; }
-#define BGFX_INVALID_HANDLE { bgfx::invalidHandle }
+#define BGFX_INVALID_HANDLE { bgfx::kInvalidHandle }
namespace bx { struct AllocatorI; }
@@ -74,9 +74,9 @@ namespace bgfx
/// Access:
enum Enum
{
- Read,
- Write,
- ReadWrite,
+ Read, //!< Read
+ Write, //!< Write
+ ReadWrite, //!< Read and write
Count
};
@@ -97,6 +97,8 @@ namespace bgfx
Bitangent, //!< a_bitangent
Color0, //!< a_color0
Color1, //!< a_color1
+ Color2, //!< a_color2
+ Color3, //!< a_color3
Indices, //!< a_indices
Weight, //!< a_weight
TexCoord0, //!< a_texcoord0
@@ -222,7 +224,7 @@ namespace bgfx
RGBA4,
RGB5A1,
RGB10A2,
- R11G11B10F,
+ RG11B10F,
UnknownDepth, // Depth formats below.
@@ -248,12 +250,12 @@ namespace bgfx
/// Uniform types:
enum Enum
{
- Int1,
- End,
+ Int1, //!< Int, used for samplers only.
+ End, //!< Reserved, do not use.
- Vec4,
- Mat3,
- Mat4,
+ Vec4, //!< 4 floats vector.
+ Mat3, //!< 3x3 matrix.
+ Mat4, //!< 4x4 matrix.
Count
};
@@ -340,7 +342,25 @@ namespace bgfx
};
};
- static const uint16_t invalidHandle = UINT16_MAX;
+ /// View mode sets draw call sort order.
+ ///
+ /// @attention C99 equivalent is `bgfx_view_mode_t`.
+ ///
+ struct ViewMode
+ {
+ /// View modes:
+ enum Enum
+ {
+ Default, //!< Default sort order.
+ Sequential, //!< Sort in the same order in which submit calls were called.
+ DepthAscending, //!< Sort draw call depth in ascending order.
+ DepthDescending, //!< Sort draw call depth in descending order.
+
+ Count
+ };
+ };
+
+ static const uint16_t kInvalidHandle = UINT16_MAX;
BGFX_HANDLE(DynamicIndexBufferHandle);
BGFX_HANDLE(DynamicVertexBufferHandle);
@@ -403,6 +423,53 @@ namespace bgfx
, va_list _argList
) = 0;
+ /// Profiler region begin.
+ ///
+ /// @param[in] _name Region name, contains dynamic string.
+ /// @param[in] _abgr Color of profiler region.
+ /// @param[in] _filePath File path where profilerBegin was called.
+ /// @param[in] _line Line where profilerBegin was called.
+ ///
+ /// @remarks
+ /// Not thread safe and it can be called from any thread.
+ ///
+ /// @attention C99 equivalent is `bgfx_callback_vtbl.profiler_begin`.
+ ///
+ virtual void profilerBegin(
+ const char* _name
+ , uint32_t _abgr
+ , const char* _filePath
+ , uint16_t _line
+ ) = 0;
+
+ /// Profiler region begin with string literal name.
+ ///
+ /// @param[in] _name Region name, contains string literal.
+ /// @param[in] _abgr Color of profiler region.
+ /// @param[in] _filePath File path where profilerBeginLiteral was called.
+ /// @param[in] _line Line where profilerBeginLiteral was called.
+ ///
+ /// @remarks
+ /// Not thread safe and it can be called from any thread.
+ ///
+ /// @attention C99 equivalent is `bgfx_callback_vtbl.profiler_begin_literal`.
+ ///
+ virtual void profilerBeginLiteral(
+ const char* _name
+ , uint32_t _abgr
+ , const char* _filePath
+ , uint16_t _line
+ ) = 0;
+
+ /// Profiler region end.
+ ///
+ /// @remarks
+ /// Not thread safe and it can be called from any thread.
+ ///
+ /// @attention C99 equivalent is `bgfx_callback_vtbl.profiler_end`.
+ ///
+ virtual void profilerEnd() = 0;
+
/// Return size of for cached item. Return 0 if no cached item was
/// found.
///
@@ -491,6 +558,9 @@ namespace bgfx
/// Memory release callback.
///
+ /// param[in] _ptr Pointer to allocated data.
+ /// param[in] _userData User defined data if needed.
+ ///
/// @attention C99 equivalent is `bgfx_release_fn_t`.
///
typedef void (*ReleaseFn)(void* _ptr, void* _userData);
@@ -501,8 +571,8 @@ namespace bgfx
///
struct Memory
{
- uint8_t* data;
- uint32_t size;
+ uint8_t* data; //!< Pointer to data.
+ uint32_t size; //!< Data size.
};
/// Renderer capabilities.
@@ -540,12 +610,12 @@ namespace bgfx
struct Limits
{
- uint32_t maxDrawCalls; //!< Maximum draw calls.
+ uint32_t maxDrawCalls; //!< Maximum number of draw calls.
uint32_t maxBlits; //!< Maximum number of blit calls.
uint32_t maxTextureSize; //!< Maximum texture size.
- uint32_t maxViews; //!< Maximum views.
+ uint32_t maxViews; //!< Maximum number of views.
uint32_t maxFrameBuffers; //!< Maximum number of frame buffer handles.
- uint32_t maxFBAttachments; //!< Maximum frame buffer attachments.
+ uint32_t maxFBAttachments; //!< Maximum number of frame buffer attachments.
uint32_t maxPrograms; //!< Maximum number of program handles.
uint32_t maxShaders; //!< Maximum number of shader handles.
uint32_t maxTextures; //!< Maximum number of texture handles.
@@ -558,6 +628,7 @@ namespace bgfx
uint32_t maxDynamicVertexBuffers; //!< Maximum number of dynamic vertex buffer handles.
uint32_t maxUniforms; //!< Maximum number of uniform handles.
uint32_t maxOcclusionQueries; //!< Maximum number of occlusion query handles.
+ uint32_t maxEncoders; //!< Maximum number of encoder threads.
};
Limits limits;
@@ -691,16 +762,41 @@ namespace bgfx
float translation[3]; //!< Eye translation.
float fov[4]; //!< Field of view (up, down, left, right).
float viewOffset[3]; //!< Eye view matrix translation adjustment.
- float projection[16]; //!< Eye projection matrix
+ float projection[16]; //!< Eye projection matrix.
float pixelsPerTanAngle[2]; //!< Number of pixels that fit in tan(angle) = 1.
};
Eye eye[2];
- uint16_t width; //!< Framebuffer width.
- uint16_t height; //!< Framebuffer width.
- uint32_t deviceWidth; //!< Device resolution width
- uint32_t deviceHeight; //!< Device resolution height
- uint8_t flags; //!< Status flags
+ uint16_t width; //!< Frame buffer width.
+ uint16_t height; //!< Frame buffer height.
+ uint32_t deviceWidth; //!< Device resolution width.
+ uint32_t deviceHeight; //!< Device resolution height.
+ uint8_t flags; //!< Status flags.
+ };
+
+ ///
+ typedef uint16_t ViewId;
+
+ /// View stats.
+ ///
+ /// @attention C99 equivalent is `bgfx_view_stats_t`.
+ ///
+ struct ViewStats
+ {
+ char name[256]; //!< View name.
+ ViewId view; //!< View id.
+ int64_t cpuTimeElapsed; //!< CPU (submit) time elapsed.
+ int64_t gpuTimeElapsed; //!< GPU time elapsed.
+ };
+
+ /// Encoder stats.
+ ///
+ /// @attention C99 equivalent is `bgfx_encoder_stats_t`.
+ ///
+ struct EncoderStats
+ {
+ int64_t cpuTimeBegin; //!< Encoder thread CPU submit begin time.
+ int64_t cpuTimeEnd; //!< Encoder thread CPU submit end time.
};
/// Renderer statistics data.
@@ -709,26 +805,701 @@ namespace bgfx
///
struct Stats
{
- uint64_t cpuTimeBegin; //!< CPU frame begin time.
- uint64_t cpuTimeEnd; //!< CPU frame end time.
- uint64_t cpuTimerFreq; //!< CPU timer frequency.
-
- uint64_t gpuTimeBegin; //!< GPU frame begin time.
- uint64_t gpuTimeEnd; //!< GPU frame end time.
- uint64_t gpuTimerFreq; //!< GPU timer frequency.
-
- int64_t waitRender; //!< Time spent waiting for render backend thread to finish issuing
- //! draw commands to underlying graphics API.
- int64_t waitSubmit; //!< Time spent waiting for submit thread to advance to next frame.
-
- uint32_t numDraw; //!< Number of draw calls submitted.
- uint32_t numCompute; //!< Number of compute calls submitted.
- uint32_t maxGpuLatency; //!< GPU driver latency.
-
- uint16_t width; //!< Backbuffer width in pixels.
- uint16_t height; //!< Backbuffer height in pixels.
- uint16_t textWidth; //!< Debug text width in characters.
- uint16_t textHeight; //!< Debug text height in characters.
+ int64_t cpuTimeFrame; //!< CPU time between two `bgfx::frame` calls.
+ int64_t cpuTimeBegin; //!< Render thread CPU submit begin time.
+ int64_t cpuTimeEnd; //!< Render thread CPU submit end time.
+ int64_t cpuTimerFreq; //!< CPU timer frequency.
+
+ int64_t gpuTimeBegin; //!< GPU frame begin time.
+ int64_t gpuTimeEnd; //!< GPU frame end time.
+ int64_t gpuTimerFreq; //!< GPU timer frequency.
+
+ int64_t waitRender; //!< Time spent waiting for render backend thread to finish issuing
+ //! draw commands to underlying graphics API.
+ int64_t waitSubmit; //!< Time spent waiting for submit thread to advance to next frame.
+
+ uint32_t numDraw; //!< Number of draw calls submitted.
+ uint32_t numCompute; //!< Number of compute calls submitted.
+ uint32_t maxGpuLatency; //!< GPU driver latency.
+
+ int64_t gpuMemoryMax; //!< Maximum available GPU memory for application.
+ int64_t gpuMemoryUsed; //!< Amount of GPU memory used.
+
+ uint16_t width; //!< Backbuffer width in pixels.
+ uint16_t height; //!< Backbuffer height in pixels.
+ uint16_t textWidth; //!< Debug text width in characters.
+ uint16_t textHeight; //!< Debug text height in characters.
+
+ uint16_t numViews; //!< Number of view stats.
+ ViewStats* viewStats; //!< View stats.
+
+ uint8_t numEncoders; //!< Number of encoders used during frame.
+ EncoderStats* encoderStats; //!< Encoder stats.
+ };
+
+ /// Encoder for submitting draw calls from multiple threads. Use `bgfx::begin()`
+ /// to obtain encoder for thread.
+ ///
+ /// @attention C99 equivalent is `bgfx_encoder`.
+ ///
+ struct Encoder
+ {
+ /// Sets debug marker.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_marker`.
+ ///
+ void setMarker(const char* _marker);
+
+ /// Set render states for draw primitive.
+ ///
+ /// @param[in] _state State flags. Default state for primitive type is
+ /// triangles. See: `BGFX_STATE_DEFAULT`.
+ /// - `BGFX_STATE_ALPHA_WRITE` - Enable alpha write.
+ /// - `BGFX_STATE_DEPTH_WRITE` - Enable depth write.
+ /// - `BGFX_STATE_DEPTH_TEST_*` - Depth test function.
+ /// - `BGFX_STATE_BLEND_*` - See remark 1 about BGFX_STATE_BLEND_FUNC.
+ /// - `BGFX_STATE_BLEND_EQUATION_*` - See remark 2.
+ /// - `BGFX_STATE_CULL_*` - Backface culling mode.
+ /// - `BGFX_STATE_RGB_WRITE` - Enable RGB write.
+ /// - `BGFX_STATE_MSAA` - Enable MSAA.
+ /// - `BGFX_STATE_PT_[TRISTRIP/LINES/POINTS]` - Primitive type.
+ ///
+ /// @param[in] _rgba Sets blend factor used by `BGFX_STATE_BLEND_FACTOR` and
+ /// `BGFX_STATE_BLEND_INV_FACTOR` blend modes.
+ ///
+ /// @remarks
+ /// 1. To setup more complex states use:
+ /// `BGFX_STATE_ALPHA_REF(_ref)`,
+ /// `BGFX_STATE_POINT_SIZE(_size)`,
+ /// `BGFX_STATE_BLEND_FUNC(_src, _dst)`,
+ /// `BGFX_STATE_BLEND_FUNC_SEPARATE(_srcRGB, _dstRGB, _srcA, _dstA)`
+ /// `BGFX_STATE_BLEND_EQUATION(_equation)`
+ /// `BGFX_STATE_BLEND_EQUATION_SEPARATE(_equationRGB, _equationA)`
+ /// 2. `BGFX_STATE_BLEND_EQUATION_ADD` is set when no other blend
+ /// equation is specified.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_state`.
+ ///
+ void setState(
+ uint64_t _state
+ , uint32_t _rgba = 0
+ );
+
+ /// Set condition for rendering.
+ ///
+ /// @param[in] _handle Occlusion query handle.
+ /// @param[in] _visible Render if occlusion query is visible.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_condition`.
+ ///
+ void setCondition(
+ OcclusionQueryHandle _handle
+ , bool _visible
+ );
+
+ /// Set stencil test state.
+ ///
+ /// @param[in] _fstencil Front stencil state.
+ /// @param[in] _bstencil Back stencil state. If back is set to `BGFX_STENCIL_NONE`
+ /// _fstencil is applied to both front and back facing primitives.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_stencil`.
+ ///
+ void setStencil(
+ uint32_t _fstencil
+ , uint32_t _bstencil = BGFX_STENCIL_NONE
+ );
+
+ /// Set scissor for draw primitive. For scissor for all primitives in
+ /// view see `bgfx::setViewScissor`.
+ ///
+ /// @param[in] _x Position x from the left corner of the window.
+ /// @param[in] _y Position y from the top corner of the window.
+ /// @param[in] _width Width of scissor region.
+ /// @param[in] _height Height of scissor region.
+ /// @returns Scissor cache index.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_scissor`.
+ ///
+ uint16_t setScissor(
+ uint16_t _x
+ , uint16_t _y
+ , uint16_t _width
+ , uint16_t _height
+ );
+
+ /// Set scissor from cache for draw primitive.
+ ///
+ /// @param[in] _cache Index in scissor cache. Passing UINT16_MAX unset primitive
+ /// scissor and primitive will use view scissor instead.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_scissor_cached`.
+ ///
+ void setScissor(uint16_t _cache = UINT16_MAX);
+
+ /// Set model matrix for draw primitive. If it is not called model will
+ /// be rendered with identity model matrix.
+ ///
+ /// @param[in] _mtx Pointer to first matrix in array.
+ /// @param[in] _num Number of matrices in array.
+ /// @returns index into matrix cache in case the same model matrix has
+ /// to be used for other draw primitive call.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_transform`.
+ ///
+ uint32_t setTransform(
+ const void* _mtx
+ , uint16_t _num = 1
+ );
+
+ /// Reserve `_num` matrices in internal matrix cache.
+ ///
+ /// @param[in] _transform Pointer to `Transform` structure.
+ /// @param[in] _num Number of matrices.
+ /// @returns index into matrix cache.
+ ///
+ /// @attention Pointer returned can be modifed until `bgfx::frame` is called.
+ /// @attention C99 equivalent is `bgfx_alloc_transform`.
+ ///
+ uint32_t allocTransform(
+ Transform* _transform
+ , uint16_t _num
+ );
+
+ /// Set model matrix from matrix cache for draw primitive.
+ ///
+ /// @param[in] _cache Index in matrix cache.
+ /// @param[in] _num Number of matrices from cache.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_transform_cached`.
+ ///
+ void setTransform(
+ uint32_t _cache
+ , uint16_t _num = 1
+ );
+
+ /// Set shader uniform parameter for draw primitive.
+ ///
+ /// @param[in] _handle Uniform.
+ /// @param[in] _value Pointer to uniform data.
+ /// @param[in] _num Number of elements. Passing `UINT16_MAX` will
+ /// use the _num passed on uniform creation.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_uniform`.
+ ///
+ void setUniform(
+ UniformHandle _handle
+ , const void* _value
+ , uint16_t _num = 1
+ );
+
+ /// Set index buffer for draw primitive.
+ ///
+ /// @param[in] _handle Index buffer.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_index_buffer`.
+ ///
+ void setIndexBuffer(IndexBufferHandle _handle);
+
+ /// Set index buffer for draw primitive.
+ ///
+ /// @param[in] _handle Index buffer.
+ /// @param[in] _firstIndex First index to render.
+ /// @param[in] _numIndices Number of indices to render.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_index_buffer`.
+ ///
+ void setIndexBuffer(
+ IndexBufferHandle _handle
+ , uint32_t _firstIndex
+ , uint32_t _numIndices
+ );
+
+ /// Set index buffer for draw primitive.
+ ///
+ /// @param[in] _handle Dynamic index buffer.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_dynamic_index_buffer`.
+ ///
+ void setIndexBuffer(DynamicIndexBufferHandle _handle);
+
+ /// Set index buffer for draw primitive.
+ ///
+ /// @param[in] _handle Dynamic index buffer.
+ /// @param[in] _firstIndex First index to render.
+ /// @param[in] _numIndices Number of indices to render.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_dynamic_index_buffer`.
+ ///
+ void setIndexBuffer(
+ DynamicIndexBufferHandle _handle
+ , uint32_t _firstIndex
+ , uint32_t _numIndices
+ );
+
+ /// Set index buffer for draw primitive.
+ ///
+ /// @param[in] _tib Transient index buffer.
+ ///
+ /// @remarks
+ /// _tib pointer after this call is invalid.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_transient_index_buffer`.
+ ///
+ void setIndexBuffer(const TransientIndexBuffer* _tib);
+
+ /// Set index buffer for draw primitive.
+ ///
+ /// @param[in] _tib Transient index buffer.
+ /// @param[in] _firstIndex First index to render.
+ /// @param[in] _numIndices Number of indices to render.
+ ///
+ /// @remarks
+ /// _tib pointer after this call is invalid.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_transient_index_buffer`.
+ ///
+ void setIndexBuffer(
+ const TransientIndexBuffer* _tib
+ , uint32_t _firstIndex
+ , uint32_t _numIndices
+ );
+
+ /// Set vertex buffer for draw primitive.
+ ///
+ /// @param[in] _stream Vertex stream.
+ /// @param[in] _handle Vertex buffer.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_vertex_buffer`.
+ ///
+ void setVertexBuffer(
+ uint8_t _stream
+ , VertexBufferHandle _handle
+ );
+
+ /// Set vertex buffer for draw primitive.
+ ///
+ /// @param[in] _stream Vertex stream.
+ /// @param[in] _handle Vertex buffer.
+ /// @param[in] _startVertex First vertex to render.
+ /// @param[in] _numVertices Number of vertices to render.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_vertex_buffer`.
+ ///
+ void setVertexBuffer(
+ uint8_t _stream
+ , VertexBufferHandle _handle
+ , uint32_t _startVertex
+ , uint32_t _numVertices
+ );
+
+ /// Set vertex buffer for draw primitive.
+ ///
+ /// @param[in] _stream Vertex stream.
+ /// @param[in] _handle Dynamic vertex buffer.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_dynamic_vertex_buffer`.
+ ///
+ void setVertexBuffer(
+ uint8_t _stream
+ , DynamicVertexBufferHandle _handle
+ );
+
+ /// Set vertex buffer for draw primitive.
+ ///
+ /// @param[in] _stream Vertex stream.
+ /// @param[in] _handle Dynamic vertex buffer.
+ /// @param[in] _startVertex First vertex to render.
+ /// @param[in] _numVertices Number of vertices to render.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_dynamic_vertex_buffer`.
+ ///
+ void setVertexBuffer(
+ uint8_t _stream
+ , DynamicVertexBufferHandle _handle
+ , uint32_t _startVertex
+ , uint32_t _numVertices
+ );
+
+ /// Set vertex buffer for draw primitive.
+ ///
+ /// @param[in] _stream Vertex stream.
+ /// @param[in] _tvb Transient vertex buffer.
+ ///
+ /// @remarks
+ /// _tvb pointer after this call is invalid.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_transient_vertex_buffer`.
+ ///
+ void setVertexBuffer(
+ uint8_t _stream
+ , const TransientVertexBuffer* _tvb
+ );
+
+ /// Set vertex buffer for draw primitive.
+ ///
+ /// @param[in] _stream Vertex stream.
+ /// @param[in] _tvb Transient vertex buffer.
+ /// @param[in] _startVertex First vertex to render.
+ /// @param[in] _numVertices Number of vertices to render.
+ ///
+ /// @remarks
+ /// _tvb pointer after this call is invalid.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_transient_vertex_buffer`.
+ ///
+ void setVertexBuffer(
+ uint8_t _stream
+ , const TransientVertexBuffer* _tvb
+ , uint32_t _startVertex
+ , uint32_t _numVertices
+ );
+
+ /// Set instance data buffer for draw primitive.
+ ///
+ /// @param[in] _idb Transient instance data buffer.
+ /// @param[in] _num Number of data instances.
+ ///
+ /// @remarks
+ /// _idb pointer after this call is invalid.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_instance_data_buffer`.
+ ///
+ void setInstanceDataBuffer(
+ const InstanceDataBuffer* _idb
+ , uint32_t _num = UINT32_MAX
+ );
+
+ /// Set instance data buffer for draw primitive.
+ ///
+ /// @param[in] _handle Vertex buffer.
+ /// @param[in] _start First instance data.
+ /// @param[in] _num Number of data instances.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_instance_data_from_vertex_buffer`.
+ ///
+ void setInstanceDataBuffer(
+ VertexBufferHandle _handle
+ , uint32_t _start
+ , uint32_t _num
+ );
+
+ /// Set instance data buffer for draw primitive.
+ ///
+ /// @param[in] _handle Vertex buffer.
+ /// @param[in] _start First instance data.
+ /// @param[in] _num Number of data instances.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_instance_data_from_dynamic_vertex_buffer`.
+ ///
+ void setInstanceDataBuffer(
+ DynamicVertexBufferHandle _handle
+ , uint32_t _start
+ , uint32_t _num
+ );
+
+ /// Set texture stage for draw primitive.
+ ///
+ /// @param[in] _stage Texture unit.
+ /// @param[in] _sampler Program sampler.
+ /// @param[in] _handle Texture handle.
+ /// @param[in] _flags Texture sampling mode. Default value UINT32_MAX uses
+ /// texture sampling settings from the texture.
+ /// - `BGFX_TEXTURE_[U/V/W]_[MIRROR/CLAMP]` - Mirror or clamp to edge wrap
+ /// mode.
+ /// - `BGFX_TEXTURE_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic
+ /// sampling.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_texture`.
+ ///
+ void setTexture(
+ uint8_t _stage
+ , UniformHandle _sampler
+ , TextureHandle _handle
+ , uint32_t _flags = UINT32_MAX
+ );
+
+ /// Submit an empty primitive for rendering. Uniforms and draw state
+ /// will be applied but no geometry will be submitted.
+ ///
+ /// These empty draw calls will sort before ordinary draw calls.
+ ///
+ /// @param[in] _id View id.
+ ///
+ void touch(ViewId _id);
+
+ /// Submit primitive for rendering.
+ ///
+ /// @param[in] _id View id.
+ /// @param[in] _program Program.
+ /// @param[in] _depth Depth for sorting.
+ /// @param[in] _preserveState Preserve internal draw state for next draw
+ /// call submit.
+ ///
+ /// @attention C99 equivalent is `bgfx_submit`.
+ ///
+ void submit(
+ ViewId _id
+ , ProgramHandle _program
+ , int32_t _depth = 0
+ , bool _preserveState = false
+ );
+
+ /// Submit primitive with occlusion query for rendering.
+ ///
+ /// @param[in] _id View id.
+ /// @param[in] _program Program.
+ /// @param[in] _occlusionQuery Occlusion query.
+ /// @param[in] _depth Depth for sorting.
+ /// @param[in] _preserveState Preserve internal draw state for next draw
+ /// call submit.
+ ///
+ /// @attention C99 equivalent is `bgfx_submit_occlusion_query`.
+ ///
+ void submit(
+ ViewId _id
+ , ProgramHandle _program
+ , OcclusionQueryHandle _occlusionQuery
+ , int32_t _depth = 0
+ , bool _preserveState = false
+ );
+
+ /// Submit primitive for rendering with index and instance data info from
+ /// indirect buffer.
+ ///
+ /// @param[in] _id View id.
+ /// @param[in] _program Program.
+ /// @param[in] _indirectHandle Indirect buffer.
+ /// @param[in] _start First element in indirect buffer.
+ /// @param[in] _num Number of dispatches.
+ /// @param[in] _depth Depth for sorting.
+ /// @param[in] _preserveState Preserve internal draw state for next draw
+ /// call submit.
+ ///
+ /// @attention C99 equivalent is `bgfx_submit_indirect`.
+ ///
+ void submit(
+ ViewId _id
+ , ProgramHandle _program
+ , IndirectBufferHandle _indirectHandle
+ , uint16_t _start = 0
+ , uint16_t _num = 1
+ , int32_t _depth = 0
+ , bool _preserveState = false
+ );
+
+ /// Set compute index buffer.
+ ///
+ /// @param[in] _stage Compute stage.
+ /// @param[in] _handle Index buffer handle.
+ /// @param[in] _access Buffer access. See `Access::Enum`.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_compute_index_buffer`.
+ ///
+ void setBuffer(
+ uint8_t _stage
+ , IndexBufferHandle _handle
+ , Access::Enum _access
+ );
+
+ /// Set compute vertex buffer.
+ ///
+ /// @param[in] _stage Compute stage.
+ /// @param[in] _handle Vertex buffer handle.
+ /// @param[in] _access Buffer access. See `Access::Enum`.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_compute_vertex_buffer`.
+ ///
+ void setBuffer(
+ uint8_t _stage
+ , VertexBufferHandle _handle
+ , Access::Enum _access
+ );
+
+ /// Set compute dynamic index buffer.
+ ///
+ /// @param[in] _stage Compute stage.
+ /// @param[in] _handle Dynamic index buffer handle.
+ /// @param[in] _access Buffer access. See `Access::Enum`.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_compute_dynamic_index_buffer`.
+ ///
+ void setBuffer(
+ uint8_t _stage
+ , DynamicIndexBufferHandle _handle
+ , Access::Enum _access
+ );
+
+ /// Set compute dynamic vertex buffer.
+ ///
+ /// @param[in] _stage Compute stage.
+ /// @param[in] _handle Dynamic vertex buffer handle.
+ /// @param[in] _access Buffer access. See `Access::Enum`.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_compute_dynamic_vertex_buffer`.
+ ///
+ void setBuffer(
+ uint8_t _stage
+ , DynamicVertexBufferHandle _handle
+ , Access::Enum _access
+ );
+
+ /// Set compute indirect buffer.
+ ///
+ /// @param[in] _stage Compute stage.
+ /// @param[in] _handle Indirect buffer handle.
+ /// @param[in] _access Buffer access. See `Access::Enum`.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_compute_indirect_buffer`.
+ ///
+ void setBuffer(
+ uint8_t _stage
+ , IndirectBufferHandle _handle
+ , Access::Enum _access
+ );
+
+ /// Set compute image from texture.
+ ///
+ /// @param[in] _stage Texture unit.
+ /// @param[in] _sampler Program sampler.
+ /// @param[in] _handle Texture handle.
+ /// @param[in] _mip Mip level.
+ /// @param[in] _access Texture access. See `Access::Enum`.
+ /// @param[in] _format Texture format. See: `TextureFormat::Enum`.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_image`.
+ ///
+ void setImage(
+ uint8_t _stage
+ , UniformHandle _sampler
+ , TextureHandle _handle
+ , uint8_t _mip
+ , Access::Enum _access
+ , TextureFormat::Enum _format = TextureFormat::Count
+ );
+
+ /// Dispatch compute.
+ ///
+ /// @param[in] _id View id.
+ /// @param[in] _handle Compute program.
+ /// @param[in] _numX Number of groups X.
+ /// @param[in] _numY Number of groups Y.
+ /// @param[in] _numZ Number of groups Z.
+ /// @param[in] _flags View flags. Use
+ /// - `BGFX_VIEW_NONE` - View will be rendered only once if stereo mode is enabled.
+ /// - `BGFX_VIEW_STEREO` - View will be rendered for both eyes if stereo mode is enabled. When
+ /// stereo mode is disabled this flag doesn't have effect.
+ ///
+ /// @attention C99 equivalent is `bgfx_dispatch`.
+ ///
+ void dispatch(
+ ViewId _id
+ , ProgramHandle _handle
+ , uint32_t _numX = 1
+ , uint32_t _numY = 1
+ , uint32_t _numZ = 1
+ , uint8_t _flags = BGFX_SUBMIT_EYE_FIRST
+ );
+
+ /// Dispatch compute indirect.
+ ///
+ /// @param[in] _id View id.
+ /// @param[in] _handle Compute program.
+ /// @param[in] _indirectHandle Indirect buffer.
+ /// @param[in] _start First element in indirect buffer.
+ /// @param[in] _num Number of dispatches.
+ /// @param[in] _flags View flags. Use
+ /// - `BGFX_VIEW_NONE` - View will be rendered only once if stereo mode is enabled.
+ /// - `BGFX_VIEW_STEREO` - View will be rendered for both eyes if stereo mode is enabled. When
+ /// stereo mode is disabled this flag doesn't have effect.
+ ///
+ /// @attention C99 equivalent is `bgfx_dispatch_indirect`.
+ ///
+ void dispatch(
+ ViewId _id
+ , ProgramHandle _handle
+ , IndirectBufferHandle _indirectHandle
+ , uint16_t _start = 0
+ , uint16_t _num = 1
+ , uint8_t _flags = BGFX_SUBMIT_EYE_FIRST
+ );
+
+ /// Discard all previously set state for draw or compute call.
+ ///
+ /// @attention C99 equivalent is `bgfx_discard`.
+ ///
+ void discard();
+
+ /// Blit texture 2D region between two 2D textures.
+ ///
+ /// @param[in] _id View id.
+ /// @param[in] _dst Destination texture handle.
+ /// @param[in] _dstX Destination texture X position.
+ /// @param[in] _dstY Destination texture Y position.
+ /// @param[in] _src Source texture handle.
+ /// @param[in] _srcX Source texture X position.
+ /// @param[in] _srcY Source texture Y position.
+ /// @param[in] _width Width of region.
+ /// @param[in] _height Height of region.
+ ///
+ /// @attention Destination texture must be create with `BGFX_TEXTURE_BLIT_DST` flag.
+ /// @attention Availability depends on: `BGFX_CAPS_TEXTURE_BLIT`.
+ /// @attention C99 equivalent is `bgfx_blit`.
+ ///
+ void blit(
+ ViewId _id
+ , TextureHandle _dst
+ , uint16_t _dstX
+ , uint16_t _dstY
+ , TextureHandle _src
+ , uint16_t _srcX = 0
+ , uint16_t _srcY = 0
+ , uint16_t _width = UINT16_MAX
+ , uint16_t _height = UINT16_MAX
+ );
+
+ /// Blit texture region between two textures.
+ ///
+ /// @param[in] _id View id.
+ /// @param[in] _dst Destination texture handle.
+ /// @param[in] _dstMip Destination texture mip level.
+ /// @param[in] _dstX Destination texture X position.
+ /// @param[in] _dstY Destination texture Y position.
+ /// @param[in] _dstZ If texture is 2D this argument should be 0. If destination texture is cube
+ /// this argument represent destination texture cube face. For 3D texture this argument
+ /// represent destination texture Z position.
+ /// @param[in] _src Source texture handle.
+ /// @param[in] _srcMip Source texture mip level.
+ /// @param[in] _srcX Source texture X position.
+ /// @param[in] _srcY Source texture Y position.
+ /// @param[in] _srcZ If texture is 2D this argument should be 0. If source texture is cube
+ /// this argument represent source texture cube face. For 3D texture this argument
+ /// represent source texture Z position.
+ /// @param[in] _width Width of region.
+ /// @param[in] _height Height of region.
+ /// @param[in] _depth If texture is 3D this argument represent depth of region, otherwise is
+ /// unused.
+ ///
+ /// @attention Destination texture must be create with `BGFX_TEXTURE_BLIT_DST` flag.
+ /// @attention Availability depends on: `BGFX_CAPS_TEXTURE_BLIT`.
+ /// @attention C99 equivalent is `bgfx_blit`.
+ ///
+ void blit(
+ ViewId _id
+ , TextureHandle _dst
+ , uint8_t _dstMip
+ , uint16_t _dstX
+ , uint16_t _dstY
+ , uint16_t _dstZ
+ , TextureHandle _src
+ , uint8_t _srcMip = 0
+ , uint16_t _srcX = 0
+ , uint16_t _srcY = 0
+ , uint16_t _srcZ = 0
+ , uint16_t _width = UINT16_MAX
+ , uint16_t _height = UINT16_MAX
+ , uint16_t _depth = UINT16_MAX
+ );
};
/// Vertex declaration.
@@ -813,7 +1584,14 @@ namespace bgfx
uint16_t m_attributes[Attrib::Count];
};
- /// Pack vec4 into vertex stream format.
+ /// Pack vertex attribute into vertex stream format.
+ ///
+ /// @param[in] _input Value to be packed into vertex stream.
+ /// @param[in] _inputNormalized True if input value is already normalized.
+ /// @param[in] _attr Attribute to pack.
+ /// @param[in] _decl Vertex stream declaration.
+ /// @param[in] _data Destination vertex stream where data will be packed.
+ /// @param[in] _index Vertex index that will be modified.
///
/// @attention C99 equivalent is `bgfx_vertex_pack`.
///
@@ -826,7 +1604,13 @@ namespace bgfx
, uint32_t _index = 0
);
- /// Unpack vec4 from vertex stream format.
+ /// Unpack vertex attribute from vertex stream format.
+ ///
+ /// @param[out] _output Result of unpacking.
+ /// @param[in] _attr Attribute to unpack.
+ /// @param[in] _decl Vertex stream declaration.
+ /// @param[in] _data Source vertex stream from where data will be unpacked.
+ /// @param[in] _index Vertex index that will be unpacked.
///
/// @attention C99 equivalent is `bgfx_vertex_unpack`.
///
@@ -933,44 +1717,6 @@ namespace bgfx
, bool _index32
);
- /// Swizzle RGBA8 image to BGRA8.
- ///
- /// @param[in] _dst Destination image. Must be the same size as input image.
- /// _dst might be pointer to the same memory as _src.
- /// @param[in] _width Width of input image (pixels).
- /// @param[in] _height Height of input image (pixels).
- /// @param[in] _pitch Pitch of input image (bytes).
- /// @param[in] _src Source image.
- ///
- /// @attention C99 equivalent is `bgfx_image_swizzle_bgra8`.
- ///
- void imageSwizzleBgra8(
- void* _dst
- , uint32_t _width
- , uint32_t _height
- , uint32_t _pitch
- , const void* _src
- );
-
- /// Downsample RGBA8 image with 2x2 pixel average filter.
- ///
- /// @param[in] _dst Destination image. Must be at least quarter size of
- /// input image. _dst might be pointer to the same memory as _src.
- /// @param[in] _width Width of input image (pixels).
- /// @param[in] _height Height of input image (pixels).
- /// @param[in] _pitch Pitch of input image (bytes).
- /// @param[in] _src Source image.
- ///
- /// @attention C99 equivalent is `bgfx_image_rgba8_downsample_2x2`.
- ///
- void imageRgba8Downsample2x2(
- void* _dst
- , uint32_t _width
- , uint32_t _height
- , uint32_t _pitch
- , const void* _src
- );
-
/// Returns supported backend API renderers.
///
/// @param[in] _max Maximum number of elements in _enum array.
@@ -980,7 +1726,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_get_supported_renderers`.
///
- uint8_t getSupportedRenderers(uint8_t _max = 0, RendererType::Enum* _enum = NULL);
+ uint8_t getSupportedRenderers(
+ uint8_t _max = 0
+ , RendererType::Enum* _enum = NULL
+ );
/// Returns name of renderer.
///
@@ -1055,7 +1804,19 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_reset`.
///
- void reset(uint32_t _width, uint32_t _height, uint32_t _flags = BGFX_RESET_NONE);
+ void reset(
+ uint32_t _width
+ , uint32_t _height
+ , uint32_t _flags = BGFX_RESET_NONE
+ );
+
+ /// Begin submitting draw calls from thread.
+ ///
+ Encoder* begin();
+
+ /// End submitting draw calls from thread.
+ ///
+ void end(Encoder* _encoder);
/// Advance to next frame. When using multithreaded renderer, this call
/// just swaps internal buffers, kicks render thread, and returns. In
@@ -1099,6 +1860,7 @@ namespace bgfx
/// Returns performance counters.
///
+ /// @attention Pointer returned is valid until `bgfx::frame` is called.
/// @attention C99 equivalent is `bgfx_get_stats`.
///
const Stats* getStats();
@@ -1111,9 +1873,15 @@ namespace bgfx
/// Allocate buffer and copy data into it. Data will be freed inside bgfx.
///
+ /// @param[in] _data Pointer to data to be copied.
+ /// @param[in] _size Size of data to be copied.
+ ///
/// @attention C99 equivalent is `bgfx_copy`.
///
- const Memory* copy(const void* _data, uint32_t _size);
+ const Memory* copy(
+ const void* _data
+ , uint32_t _size
+ );
/// Make reference to data to pass to bgfx. Unlike `bgfx::alloc` this call
/// doesn't allocate memory for data. It just copies pointer to data. You
@@ -1122,6 +1890,7 @@ namespace bgfx
/// `bgfx::frame` calls. `ReleaseFn` function must be able to be called
/// from any thread.
///
+ /// @attention Data passed must be available for at least 2 `bgfx::frame` calls.
/// @attention C99 equivalent are `bgfx_make_ref`, `bgfx_make_ref_release`.
///
const Memory* makeRef(
@@ -1137,6 +1906,7 @@ namespace bgfx
/// - `BGFX_DEBUG_IFH` - Infinitely fast hardware. When this flag is set
/// all rendering calls will be skipped. It's useful when profiling
/// to quickly assess bottleneck between CPU and GPU.
+ /// - `BGFX_DEBUG_PROFILER` - Enabled profiler.
/// - `BGFX_DEBUG_STATS` - Display internal statistics.
/// - `BGFX_DEBUG_TEXT` - Display debug text.
/// - `BGFX_DEBUG_WIREFRAME` - Wireframe rendering. All rendering
@@ -1150,7 +1920,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_dbg_text_clear`.
///
- void dbgTextClear(uint8_t _attr = 0, bool _small = false);
+ void dbgTextClear(
+ uint8_t _attr = 0
+ , bool _small = false
+ );
/// Print into internal debug text character-buffer (VGA-compatible text mode).
///
@@ -1161,7 +1934,13 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_dbg_text_printf`.
///
- void dbgTextPrintf(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, ...);
+ void dbgTextPrintf(
+ uint16_t _x
+ , uint16_t _y
+ , uint8_t _attr
+ , const char* _format
+ , ...
+ );
/// Print into internal debug text character-buffer (VGA-compatible text mode).
///
@@ -1173,7 +1952,13 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_dbg_text_vprintf`.
///
- void dbgTextPrintfVargs(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, va_list _argList);
+ void dbgTextPrintfVargs(
+ uint16_t _x
+ , uint16_t _y
+ , uint8_t _attr
+ , const char* _format
+ , va_list _argList
+ );
/// Draw image into internal debug text buffer.
///
@@ -1211,7 +1996,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_create_index_buffer`.
///
- IndexBufferHandle createIndexBuffer(const Memory* _mem, uint16_t _flags = BGFX_BUFFER_NONE);
+ IndexBufferHandle createIndexBuffer(
+ const Memory* _mem
+ , uint16_t _flags = BGFX_BUFFER_NONE
+ );
/// Destroy static index buffer.
///
@@ -1219,7 +2007,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_destroy_index_buffer`.
///
- void destroyIndexBuffer(IndexBufferHandle _handle);
+ void destroy(IndexBufferHandle _handle);
/// Create static vertex buffer.
///
@@ -1253,7 +2041,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_destroy_vertex_buffer`.
///
- void destroyVertexBuffer(VertexBufferHandle _handle);
+ void destroy(VertexBufferHandle _handle);
/// Create empty dynamic index buffer.
///
@@ -1323,7 +2111,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_destroy_dynamic_index_buffer`.
///
- void destroyDynamicIndexBuffer(DynamicIndexBufferHandle _handle);
+ void destroy(DynamicIndexBufferHandle _handle);
/// Create empty dynamic vertex buffer.
///
@@ -1397,7 +2185,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_destroy_dynamic_vertex_buffer`.
///
- void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle);
+ void destroy(DynamicVertexBufferHandle _handle);
/// Returns number of available indices.
///
@@ -1412,18 +2200,24 @@ namespace bgfx
/// @param[in] _num Number of required vertices.
/// @param[in] _decl Vertex declaration.
///
- /// @attention C99 equivalent is `bgfx_check_avail_transient_vertex_buffer`.
+ /// @attention C99 equivalent is `bgfx_get_avail_transient_vertex_buffer`.
///
- uint32_t getAvailTransientVertexBuffer(uint32_t _num, const VertexDecl& _decl);
+ uint32_t getAvailTransientVertexBuffer(
+ uint32_t _num
+ , const VertexDecl& _decl
+ );
/// Returns number of available instance buffer slots.
///
/// @param[in] _num Number of required instances.
/// @param[in] _stride Stride per instance.
///
- /// @attention C99 equivalent is `bgfx_check_avail_instance_data_buffer`.
+ /// @attention C99 equivalent is `bgfx_get_avail_instance_data_buffer`.
///
- uint32_t getAvailInstanceDataBuffer(uint32_t _num, uint16_t _stride);
+ uint32_t getAvailInstanceDataBuffer(
+ uint32_t _num
+ , uint16_t _stride
+ );
/// Allocate transient index buffer.
///
@@ -1433,13 +2227,14 @@ namespace bgfx
/// @param[in] _num Number of indices to allocate.
///
/// @remarks
- /// 1. You must call setIndexBuffer after alloc in order to avoid memory
- /// leak.
- /// 2. Only 16-bit index buffer is supported.
+ /// Only 16-bit index buffer is supported.
///
/// @attention C99 equivalent is `bgfx_alloc_transient_index_buffer`.
///
- void allocTransientIndexBuffer(TransientIndexBuffer* _tib, uint32_t _num);
+ void allocTransientIndexBuffer(
+ TransientIndexBuffer* _tib
+ , uint32_t _num
+ );
/// Allocate transient vertex buffer.
///
@@ -1449,13 +2244,10 @@ namespace bgfx
/// @param[in] _num Number of vertices to allocate.
/// @param[in] _decl Vertex declaration.
///
- /// @remarks
- /// You must call setVertexBuffer after alloc in order to avoid memory
- /// leak.
- ///
/// @attention C99 equivalent is `bgfx_alloc_transient_vertex_buffer`.
///
- void allocTransientVertexBuffer(TransientVertexBuffer* _tvb
+ void allocTransientVertexBuffer(
+ TransientVertexBuffer* _tvb
, uint32_t _num
, const VertexDecl& _decl
);
@@ -1469,7 +2261,8 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_alloc_transient_buffers`.
///
- bool allocTransientBuffers(TransientVertexBuffer* _tvb
+ bool allocTransientBuffers(
+ TransientVertexBuffer* _tvb
, const VertexDecl& _decl
, uint32_t _numVertices
, TransientIndexBuffer* _tib
@@ -1478,13 +2271,19 @@ namespace bgfx
/// Allocate instance data buffer.
///
- /// @remarks
- /// You must call setInstanceDataBuffer after alloc in order to avoid
- /// memory leak.
+ /// @param[out] _idb InstanceDataBuffer structure is filled and is valid
+ /// for duration of frame, and it can be reused for multiple draw
+ /// calls.
+ /// @param[in] _num Number of instances.
+ /// @param[in] _stride Instance stride. Must be multiple of 16.
///
/// @attention C99 equivalent is `bgfx_alloc_instance_data_buffer`.
///
- const InstanceDataBuffer* allocInstanceDataBuffer(uint32_t _num, uint16_t _stride);
+ void allocInstanceDataBuffer(
+ InstanceDataBuffer* _idb
+ , uint32_t _num
+ , uint16_t _stride
+ );
/// Create draw indirect buffer.
///
@@ -1501,7 +2300,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_destroy_indirect_buffer`.
///
- void destroyIndirectBuffer(IndirectBufferHandle _handle);
+ void destroy(IndirectBufferHandle _handle);
/// Create shader from memory buffer.
///
@@ -1527,12 +2326,26 @@ namespace bgfx
, uint16_t _max = 0
);
+ /// Set shader debug name.
+ ///
+ /// @param[in] _handle Shader handle.
+ /// @param[in] _name Shader name.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_shader_name`.
+ ///
+ void setName(
+ ShaderHandle _handle
+ , const char* _name
+ );
+
/// Destroy shader. Once program is created with shader it is safe to
/// destroy shader.
///
+ /// @param[in] _handle Shader handle.
+ ///
/// @attention C99 equivalent is `bgfx_destroy_shader`.
///
- void destroyShader(ShaderHandle _handle);
+ void destroy(ShaderHandle _handle);
/// Create program with vertex and fragment shaders.
///
@@ -1567,9 +2380,11 @@ namespace bgfx
/// Destroy program.
///
+ /// @param[in] _handle Program handle.
+ ///
/// @attention C99 equivalent is `bgfx_destroy_program`.
///
- void destroyProgram(ProgramHandle _handle);
+ void destroy(ProgramHandle _handle);
/// Validate texture parameters.
///
@@ -1865,7 +2680,23 @@ namespace bgfx
/// @attention Availability depends on: `BGFX_CAPS_TEXTURE_READ_BACK`.
/// @attention C99 equivalent is `bgfx_read_texture`.
///
- uint32_t readTexture(TextureHandle _handle, void* _data, uint8_t _mip = 0);
+ uint32_t readTexture(
+ TextureHandle _handle
+ , void* _data
+ , uint8_t _mip = 0
+ );
+
+ /// Set texture debug name.
+ ///
+ /// @param[in] _handle Texture handle.
+ /// @param[in] _name Texture name.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_texture_name`.
+ ///
+ void setName(
+ TextureHandle _handle
+ , const char* _name
+ );
/// Destroy texture.
///
@@ -1873,7 +2704,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_destroy_texture`.
///
- void destroyTexture(TextureHandle _handle);
+ void destroy(TextureHandle _handle);
/// Create frame buffer (simple).
///
@@ -1985,13 +2816,18 @@ namespace bgfx
/// @returns Returns invalid texture handle if attachment index is not
/// correct, or frame buffer is created with native window handle.
///
- TextureHandle getTexture(FrameBufferHandle _handle, uint8_t _attachment = 0);
+ TextureHandle getTexture(
+ FrameBufferHandle _handle
+ , uint8_t _attachment = 0
+ );
/// Destroy frame buffer.
///
+ /// @param[in] _handle Frame buffer handle.
+ ///
/// @attention C99 equivalent is `bgfx_destroy_frame_buffer`.
///
- void destroyFrameBuffer(FrameBufferHandle _handle);
+ void destroy(FrameBufferHandle _handle);
/// Create shader uniform parameter.
///
@@ -2027,7 +2863,11 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_create_uniform`.
///
- UniformHandle createUniform(const char* _name, UniformType::Enum _type, uint16_t _num = 1);
+ UniformHandle createUniform(
+ const char* _name
+ , UniformType::Enum _type
+ , uint16_t _num = 1
+ );
/// Retrieve uniform info.
///
@@ -2036,7 +2876,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_get_uniform_info`.
///
- void getUniformInfo(UniformHandle _handle, UniformInfo& _info);
+ void getUniformInfo(
+ UniformHandle _handle
+ , UniformInfo& _info
+ );
/// Destroy shader uniform parameter.
///
@@ -2044,7 +2887,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_destroy_uniform`.
///
- void destroyUniform(UniformHandle _handle);
+ void destroy(UniformHandle _handle);
/// Create occlusion query.
///
@@ -2063,7 +2906,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_get_result`.
///
- OcclusionQueryResult::Enum getResult(OcclusionQueryHandle _handle, int32_t* _result = NULL);
+ OcclusionQueryResult::Enum getResult(
+ OcclusionQueryHandle _handle
+ , int32_t* _result = NULL
+ );
/// Destroy occlusion query.
///
@@ -2071,7 +2917,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_destroy_occlusion_query`.
///
- void destroyOcclusionQuery(OcclusionQueryHandle _handle);
+ void destroy(OcclusionQueryHandle _handle);
/// Set palette color value.
///
@@ -2080,7 +2926,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_palette_color`.
///
- void setPaletteColor(uint8_t _index, uint32_t _rgba);
+ void setPaletteColor(
+ uint8_t _index
+ , uint32_t _rgba
+ );
/// Set palette color value.
///
@@ -2089,7 +2938,13 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_palette_color`.
///
- void setPaletteColor(uint8_t _index, float _r, float _g, float _b, float _a);
+ void setPaletteColor(
+ uint8_t _index
+ , float _r
+ , float _g
+ , float _b
+ , float _a
+ );
/// Set palette color value.
///
@@ -2098,7 +2953,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_palette_color`.
///
- void setPaletteColor(uint8_t _index, const float _rgba[4]);
+ void setPaletteColor(
+ uint8_t _index
+ , const float _rgba[4]
+ );
/// Set view name.
///
@@ -2118,7 +2976,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_view_name`.
///
- void setViewName(uint8_t _id, const char* _name);
+ void setViewName(
+ ViewId _id
+ , const char* _name
+ );
/// Set view rectangle. Draw primitive outside view will be clipped.
///
@@ -2130,11 +2991,30 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_view_rect`.
///
- void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
+ void setViewRect(
+ ViewId _id
+ , uint16_t _x
+ , uint16_t _y
+ , uint16_t _width
+ , uint16_t _height
+ );
+ /// Set view rectangle. Draw primitive outside view will be clipped.
+ ///
+ /// @param[in] _id View id.
+ /// @param[in] _x Position x from the left corner of the window.
+ /// @param[in] _y Position y from the top corner of the window.
+ /// @param[in] _ratio Width and height will be set in respect to back-buffer size. See:
+ /// `BackbufferRatio::Enum`.
+ ///
/// @attention C99 equivalent is `bgfx_set_view_rect_auto`.
///
- void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, BackbufferRatio::Enum _ratio);
+ void setViewRect(
+ ViewId _id
+ , uint16_t _x
+ , uint16_t _y
+ , BackbufferRatio::Enum _ratio
+ );
/// Set view scissor. Draw primitive outside view will be clipped. When
/// _x, _y, _width and _height are set to 0, scissor will be disabled.
@@ -2148,7 +3028,7 @@ namespace bgfx
/// @attention C99 equivalent is `bgfx_set_view_scissor`.
///
void setViewScissor(
- uint8_t _id
+ ViewId _id
, uint16_t _x = 0
, uint16_t _y = 0
, uint16_t _width = 0
@@ -2167,7 +3047,7 @@ namespace bgfx
/// @attention C99 equivalent is `bgfx_set_view_clear`.
///
void setViewClear(
- uint8_t _id
+ ViewId _id
, uint16_t _flags
, uint32_t _rgba = 0x000000ff
, float _depth = 1.0f
@@ -2195,7 +3075,7 @@ namespace bgfx
/// @attention C99 equivalent is `bgfx_set_view_clear_mrt`.
///
void setViewClear(
- uint8_t _id
+ ViewId _id
, uint16_t _flags
, float _depth
, uint8_t _stencil
@@ -2209,12 +3089,20 @@ namespace bgfx
, uint8_t _7 = UINT8_MAX
);
- /// Set view into sequential mode. Draw calls will be sorted in the same
- /// order in which submit calls were called.
+ /// Set view sorting mode.
+ ///
+ /// @param[in] _id View id.
+ /// @param[in] _mode View sort mode. See `ViewMode::Enum`.
///
- /// @attention C99 equivalent is `bgfx_set_view_seq`.
+ /// @remarks
+ /// View mode must be set prior calling `bgfx::submit` for the view.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_view_mode`.
///
- void setViewSeq(uint8_t _id, bool _enabled);
+ void setViewMode(
+ ViewId _id
+ , ViewMode::Enum _mode = ViewMode::Default
+ );
/// Set view frame buffer.
///
@@ -2228,7 +3116,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_view_frame_buffer`.
///
- void setViewFrameBuffer(uint8_t _id, FrameBufferHandle _handle);
+ void setViewFrameBuffer(
+ ViewId _id
+ , FrameBufferHandle _handle
+ );
/// Set view view and projection matrices, all draw primitives in this
/// view will use these matrices.
@@ -2246,7 +3137,7 @@ namespace bgfx
/// @attention C99 equivalent are `bgfx_set_view_transform`, `bgfx_set_view_transform_stereo`.
///
void setViewTransform(
- uint8_t _id
+ ViewId _id
, const void* _view
, const void* _projL
, uint8_t _flags = BGFX_VIEW_STEREO
@@ -2260,9 +3151,13 @@ namespace bgfx
/// @param[in] _remap View remap id table. Passing `NULL` will reset view ids
/// to default state.
///
- /// @attention C99 equivalent is `bgfx_set_view_remap`.
+ /// @attention C99 equivalent is `bgfx_set_view_order`.
///
- void setViewOrder(uint8_t _id = 0, uint8_t _num = UINT8_MAX, const void* _remap = NULL);
+ void setViewOrder(
+ ViewId _id = 0
+ , uint16_t _num = UINT16_MAX
+ , const ViewId* _remap = NULL
+ );
/// Reset all view settings to default.
///
@@ -2270,7 +3165,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_reset_view`.
///
- void resetView(uint8_t _id);
+ void resetView(ViewId _id);
/// Sets debug marker.
///
@@ -2296,14 +3191,22 @@ namespace bgfx
/// `BGFX_STATE_BLEND_INV_FACTOR` blend modes.
///
/// @remarks
- /// 1. Use `BGFX_STATE_ALPHA_REF`, `BGFX_STATE_POINT_SIZE` and
- /// `BGFX_STATE_BLEND_FUNC` macros to setup more complex states.
+ /// 1. To setup more complex states use:
+ /// `BGFX_STATE_ALPHA_REF(_ref)`,
+ /// `BGFX_STATE_POINT_SIZE(_size)`,
+ /// `BGFX_STATE_BLEND_FUNC(_src, _dst)`,
+ /// `BGFX_STATE_BLEND_FUNC_SEPARATE(_srcRGB, _dstRGB, _srcA, _dstA)`
+ /// `BGFX_STATE_BLEND_EQUATION(_equation)`
+ /// `BGFX_STATE_BLEND_EQUATION_SEPARATE(_equationRGB, _equationA)`
/// 2. `BGFX_STATE_BLEND_EQUATION_ADD` is set when no other blend
/// equation is specified.
///
/// @attention C99 equivalent is `bgfx_set_state`.
///
- void setState(uint64_t _state, uint32_t _rgba = 0);
+ void setState(
+ uint64_t _state
+ , uint32_t _rgba = 0
+ );
/// Set condition for rendering.
///
@@ -2312,7 +3215,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_condition`.
///
- void setCondition(OcclusionQueryHandle _handle, bool _visible);
+ void setCondition(
+ OcclusionQueryHandle _handle
+ , bool _visible
+ );
/// Set stencil test state.
///
@@ -2322,7 +3228,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_stencil`.
///
- void setStencil(uint32_t _fstencil, uint32_t _bstencil = BGFX_STENCIL_NONE);
+ void setStencil(
+ uint32_t _fstencil
+ , uint32_t _bstencil = BGFX_STENCIL_NONE
+ );
/// Set scissor for draw primitive. For scissor for all primitives in
/// view see `bgfx::setViewScissor`.
@@ -2335,7 +3244,12 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_scissor`.
///
- uint16_t setScissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
+ uint16_t setScissor(
+ uint16_t _x
+ , uint16_t _y
+ , uint16_t _width
+ , uint16_t _height
+ );
/// Set scissor from cache for draw primitive.
///
@@ -2356,18 +3270,24 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_transform`.
///
- uint32_t setTransform(const void* _mtx, uint16_t _num = 1);
+ uint32_t setTransform(
+ const void* _mtx
+ , uint16_t _num = 1
+ );
- /// Reserve `_num` matrices in internal matrix cache. Pointer returned
- /// can be modifed until `bgfx::frame` is called.
+ /// Reserve `_num` matrices in internal matrix cache.
///
/// @param[in] _transform Pointer to `Transform` structure.
/// @param[in] _num Number of matrices.
/// @returns index into matrix cache.
///
+ /// @attention Pointer returned can be modifed until `bgfx::frame` is called.
/// @attention C99 equivalent is `bgfx_alloc_transform`.
///
- uint32_t allocTransform(Transform* _transform, uint16_t _num);
+ uint32_t allocTransform(
+ Transform* _transform
+ , uint16_t _num
+ );
/// Set model matrix from matrix cache for draw primitive.
///
@@ -2376,7 +3296,10 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_transform_cached`.
///
- void setTransform(uint32_t _cache, uint16_t _num = 1);
+ void setTransform(
+ uint32_t _cache
+ , uint16_t _num = 1
+ );
/// Set shader uniform parameter for draw primitive.
///
@@ -2387,7 +3310,11 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_uniform`.
///
- void setUniform(UniformHandle _handle, const void* _value, uint16_t _num = 1);
+ void setUniform(
+ UniformHandle _handle
+ , const void* _value
+ , uint16_t _num = 1
+ );
/// Set index buffer for draw primitive.
///
@@ -2405,7 +3332,11 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_index_buffer`.
///
- void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices);
+ void setIndexBuffer(
+ IndexBufferHandle _handle
+ , uint32_t _firstIndex
+ , uint32_t _numIndices
+ );
/// Set index buffer for draw primitive.
///
@@ -2433,6 +3364,9 @@ namespace bgfx
///
/// @param[in] _tib Transient index buffer.
///
+ /// @remarks
+ /// _tib pointer after this call is invalid.
+ ///
/// @attention C99 equivalent is `bgfx_set_transient_index_buffer`.
///
void setIndexBuffer(const TransientIndexBuffer* _tib);
@@ -2443,6 +3377,9 @@ namespace bgfx
/// @param[in] _firstIndex First index to render.
/// @param[in] _numIndices Number of indices to render.
///
+ /// @remarks
+ /// _tib pointer after this call is invalid.
+ ///
/// @attention C99 equivalent is `bgfx_set_transient_index_buffer`.
///
void setIndexBuffer(
@@ -2453,32 +3390,47 @@ namespace bgfx
/// Set vertex buffer for draw primitive.
///
+ /// @param[in] _stream Vertex stream.
/// @param[in] _handle Vertex buffer.
///
/// @attention C99 equivalent is `bgfx_set_vertex_buffer`.
///
- void setVertexBuffer(VertexBufferHandle _handle);
+ void setVertexBuffer(
+ uint8_t _stream
+ , VertexBufferHandle _handle
+ );
/// Set vertex buffer for draw primitive.
///
+ /// @param[in] _stream Vertex stream.
/// @param[in] _handle Vertex buffer.
/// @param[in] _startVertex First vertex to render.
/// @param[in] _numVertices Number of vertices to render.
///
/// @attention C99 equivalent is `bgfx_set_vertex_buffer`.
///
- void setVertexBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices);
+ void setVertexBuffer(
+ uint8_t _stream
+ , VertexBufferHandle _handle
+ , uint32_t _startVertex
+ , uint32_t _numVertices
+ );
/// Set vertex buffer for draw primitive.
///
+ /// @param[in] _stream Vertex stream.
/// @param[in] _handle Dynamic vertex buffer.
///
/// @attention C99 equivalent is `bgfx_set_dynamic_vertex_buffer`.
///
- void setVertexBuffer(DynamicVertexBufferHandle _handle);
+ void setVertexBuffer(
+ uint8_t _stream
+ , DynamicVertexBufferHandle _handle
+ );
/// Set vertex buffer for draw primitive.
///
+ /// @param[in] _stream Vertex stream.
/// @param[in] _handle Dynamic vertex buffer.
/// @param[in] _startVertex First vertex to render.
/// @param[in] _numVertices Number of vertices to render.
@@ -2486,52 +3438,86 @@ namespace bgfx
/// @attention C99 equivalent is `bgfx_set_dynamic_vertex_buffer`.
///
void setVertexBuffer(
- DynamicVertexBufferHandle _handle
+ uint8_t _stream
+ , DynamicVertexBufferHandle _handle
, uint32_t _startVertex
, uint32_t _numVertices
);
/// Set vertex buffer for draw primitive.
///
+ /// @param[in] _stream Vertex stream.
/// @param[in] _tvb Transient vertex buffer.
///
+ /// @remarks
+ /// _tvb pointer after this call is invalid.
+ ///
/// @attention C99 equivalent is `bgfx_set_transient_vertex_buffer`.
///
- void setVertexBuffer(const TransientVertexBuffer* _tvb);
+ void setVertexBuffer(
+ uint8_t _stream
+ , const TransientVertexBuffer* _tvb
+ );
/// Set vertex buffer for draw primitive.
///
+ /// @param[in] _stream Vertex stream.
/// @param[in] _tvb Transient vertex buffer.
/// @param[in] _startVertex First vertex to render.
/// @param[in] _numVertices Number of vertices to render.
///
+ /// @remarks
+ /// _tvb pointer after this call is invalid.
+ ///
/// @attention C99 equivalent is `bgfx_set_transient_vertex_buffer`.
///
void setVertexBuffer(
- const TransientVertexBuffer* _tvb
+ uint8_t _stream
+ , const TransientVertexBuffer* _tvb
, uint32_t _startVertex
, uint32_t _numVertices
);
/// Set instance data buffer for draw primitive.
///
+ /// @param[in] _idb Transient instance data buffer.
+ /// @param[in] _num Number of data instances.
+ ///
+ /// @remarks
+ /// _idb pointer after this call is invalid.
+ ///
/// @attention C99 equivalent is `bgfx_set_instance_data_buffer`.
///
- void setInstanceDataBuffer(const InstanceDataBuffer* _idb, uint32_t _num = UINT32_MAX);
+ void setInstanceDataBuffer(
+ const InstanceDataBuffer* _idb
+ , uint32_t _num = UINT32_MAX
+ );
/// Set instance data buffer for draw primitive.
///
+ /// @param[in] _handle Vertex buffer.
+ /// @param[in] _start First instance data.
+ /// @param[in] _num Number of data instances.
+ ///
/// @attention C99 equivalent is `bgfx_set_instance_data_from_vertex_buffer`.
///
- void setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num);
+ void setInstanceDataBuffer(
+ VertexBufferHandle _handle
+ , uint32_t _start
+ , uint32_t _num
+ );
/// Set instance data buffer for draw primitive.
///
+ /// @param[in] _handle Vertex buffer.
+ /// @param[in] _start First instance data.
+ /// @param[in] _num Number of data instances.
+ ///
/// @attention C99 equivalent is `bgfx_set_instance_data_from_dynamic_vertex_buffer`.
///
void setInstanceDataBuffer(
DynamicVertexBufferHandle _handle
- , uint32_t _startVertex
+ , uint32_t _start
, uint32_t _num
);
@@ -2547,9 +3533,6 @@ namespace bgfx
/// - `BGFX_TEXTURE_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic
/// sampling.
///
- /// @param[in] _flags Texture sampler filtering flags. UINT32_MAX use the
- /// sampler filtering mode set by texture.
- ///
/// @attention C99 equivalent is `bgfx_set_texture`.
///
void setTexture(
@@ -2565,9 +3548,8 @@ namespace bgfx
/// These empty draw calls will sort before ordinary draw calls.
///
/// @param[in] _id View id.
- /// @returns Number of draw calls.
///
- uint32_t touch(uint8_t _id);
+ void touch(ViewId _id);
/// Submit primitive for rendering.
///
@@ -2576,12 +3558,11 @@ namespace bgfx
/// @param[in] _depth Depth for sorting.
/// @param[in] _preserveState Preserve internal draw state for next draw
/// call submit.
- /// @returns Number of draw calls.
///
/// @attention C99 equivalent is `bgfx_submit`.
///
- uint32_t submit(
- uint8_t _id
+ void submit(
+ ViewId _id
, ProgramHandle _program
, int32_t _depth = 0
, bool _preserveState = false
@@ -2595,12 +3576,11 @@ namespace bgfx
/// @param[in] _depth Depth for sorting.
/// @param[in] _preserveState Preserve internal draw state for next draw
/// call submit.
- /// @returns Number of draw calls.
///
/// @attention C99 equivalent is `bgfx_submit_occlusion_query`.
///
- uint32_t submit(
- uint8_t _id
+ void submit(
+ ViewId _id
, ProgramHandle _program
, OcclusionQueryHandle _occlusionQuery
, int32_t _depth = 0
@@ -2618,12 +3598,11 @@ namespace bgfx
/// @param[in] _depth Depth for sorting.
/// @param[in] _preserveState Preserve internal draw state for next draw
/// call submit.
- /// @returns Number of draw calls.
///
/// @attention C99 equivalent is `bgfx_submit_indirect`.
///
- uint32_t submit(
- uint8_t _id
+ void submit(
+ ViewId _id
, ProgramHandle _program
, IndirectBufferHandle _indirectHandle
, uint16_t _start = 0
@@ -2640,7 +3619,11 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_compute_index_buffer`.
///
- void setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access);
+ void setBuffer(
+ uint8_t _stage
+ , IndexBufferHandle _handle
+ , Access::Enum _access
+ );
/// Set compute vertex buffer.
///
@@ -2650,7 +3633,11 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_compute_vertex_buffer`.
///
- void setBuffer(uint8_t _stage, VertexBufferHandle _handle, Access::Enum _access);
+ void setBuffer(
+ uint8_t _stage
+ , VertexBufferHandle _handle
+ , Access::Enum _access
+ );
/// Set compute dynamic index buffer.
///
@@ -2660,7 +3647,11 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_compute_dynamic_index_buffer`.
///
- void setBuffer(uint8_t _stage, DynamicIndexBufferHandle _handle, Access::Enum _access);
+ void setBuffer(
+ uint8_t _stage
+ , DynamicIndexBufferHandle _handle
+ , Access::Enum _access
+ );
/// Set compute dynamic vertex buffer.
///
@@ -2670,7 +3661,11 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_compute_dynamic_vertex_buffer`.
///
- void setBuffer(uint8_t _stage, DynamicVertexBufferHandle _handle, Access::Enum _access);
+ void setBuffer(
+ uint8_t _stage
+ , DynamicVertexBufferHandle _handle
+ , Access::Enum _access
+ );
/// Set compute indirect buffer.
///
@@ -2680,7 +3675,11 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_compute_indirect_buffer`.
///
- void setBuffer(uint8_t _stage, IndirectBufferHandle _handle, Access::Enum _access);
+ void setBuffer(
+ uint8_t _stage
+ , IndirectBufferHandle _handle
+ , Access::Enum _access
+ );
/// Set compute image from texture.
///
@@ -2716,12 +3715,12 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_dispatch`.
///
- uint32_t dispatch(
- uint8_t _id
+ void dispatch(
+ ViewId _id
, ProgramHandle _handle
- , uint16_t _numX = 1
- , uint16_t _numY = 1
- , uint16_t _numZ = 1
+ , uint32_t _numX = 1
+ , uint32_t _numY = 1
+ , uint32_t _numZ = 1
, uint8_t _flags = BGFX_SUBMIT_EYE_FIRST
);
@@ -2739,8 +3738,8 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_dispatch_indirect`.
///
- uint32_t dispatch(
- uint8_t _id
+ void dispatch(
+ ViewId _id
, ProgramHandle _handle
, IndirectBufferHandle _indirectHandle
, uint16_t _start = 0
@@ -2771,7 +3770,7 @@ namespace bgfx
/// @attention C99 equivalent is `bgfx_blit`.
///
void blit(
- uint8_t _id
+ ViewId _id
, TextureHandle _dst
, uint16_t _dstX
, uint16_t _dstY
@@ -2809,7 +3808,7 @@ namespace bgfx
/// @attention C99 equivalent is `bgfx_blit`.
///
void blit(
- uint8_t _id
+ ViewId _id
, TextureHandle _dst
, uint8_t _dstMip
, uint16_t _dstX
@@ -2837,7 +3836,10 @@ namespace bgfx
/// @attention Frame buffer handle must be created with OS' target native window handle.
/// @attention C99 equivalent is `bgfx_request_screen_shot`.
///
- void requestScreenShot(FrameBufferHandle _handle, const char* _filePath);
+ void requestScreenShot(
+ FrameBufferHandle _handle
+ , const char* _filePath
+ );
} // namespace bgfx
diff --git a/3rdparty/bgfx/include/bgfx/c99/bgfx.h b/3rdparty/bgfx/include/bgfx/c99/bgfx.h
index d329437d371..33bce5be59a 100644
--- a/3rdparty/bgfx/include/bgfx/c99/bgfx.h
+++ b/3rdparty/bgfx/include/bgfx/c99/bgfx.h
@@ -13,6 +13,8 @@
#include <stdint.h> // uint32_t
#include <stdlib.h> // size_t
+#include <bx/platform.h>
+
#ifndef BGFX_SHARED_LIB_BUILD
# define BGFX_SHARED_LIB_BUILD 0
#endif // BGFX_SHARED_LIB_BUILD
@@ -21,17 +23,21 @@
# define BGFX_SHARED_LIB_USE 0
#endif // BGFX_SHARED_LIB_USE
-#if defined(_MSC_VER)
-# if BGFX_SHARED_LIB_BUILD
-# define BGFX_SHARED_LIB_API __declspec(dllexport)
-# elif BGFX_SHARED_LIB_USE
-# define BGFX_SHARED_LIB_API __declspec(dllimport)
-# else
-# define BGFX_SHARED_LIB_API
-# endif // BGFX_SHARED_LIB_*
+#if BX_PLATFORM_WINDOWS
+# define BGFX_SYMBOL_EXPORT __declspec(dllexport)
+# define BGFX_SYMBOL_IMPORT __declspec(dllimport)
+#else
+# define BGFX_SYMBOL_EXPORT __attribute__((visibility("default")))
+# define BGFX_SYMBOL_IMPORT
+#endif // BX_PLATFORM_WINDOWS
+
+#if BGFX_SHARED_LIB_BUILD
+# define BGFX_SHARED_LIB_API BGFX_SYMBOL_EXPORT
+#elif BGFX_SHARED_LIB_USE
+# define BGFX_SHARED_LIB_API BGFX_SYMBOL_IMPORT
#else
# define BGFX_SHARED_LIB_API
-#endif // defined(_MSC_VER)
+#endif // BGFX_SHARED_LIB_*
#if defined(__cplusplus)
# define BGFX_C_API extern "C" BGFX_SHARED_LIB_API
@@ -39,7 +45,7 @@
# define BGFX_C_API BGFX_SHARED_LIB_API
#endif // defined(__cplusplus)
-#include <bgfx/defines.h>
+#include "../defines.h"
typedef enum bgfx_renderer_type
{
@@ -75,6 +81,8 @@ typedef enum bgfx_attrib
BGFX_ATTRIB_BITANGENT,
BGFX_ATTRIB_COLOR0,
BGFX_ATTRIB_COLOR1,
+ BGFX_ATTRIB_COLOR2,
+ BGFX_ATTRIB_COLOR3,
BGFX_ATTRIB_INDICES,
BGFX_ATTRIB_WEIGHT,
BGFX_ATTRIB_TEXCOORD0,
@@ -172,7 +180,7 @@ typedef enum bgfx_texture_format
BGFX_TEXTURE_FORMAT_RGBA4,
BGFX_TEXTURE_FORMAT_RGB5A1,
BGFX_TEXTURE_FORMAT_RGB10A2,
- BGFX_TEXTURE_FORMAT_R11G11B10F,
+ BGFX_TEXTURE_FORMAT_RG11B10F,
BGFX_TEXTURE_FORMAT_UNKNOWN_DEPTH,
@@ -255,6 +263,17 @@ typedef enum bgfx_topology_sort
} bgfx_topology_sort_t;
+typedef enum bgfx_view_mode
+{
+ BGFX_VIEW_MODE_DEFAULT,
+ BGFX_VIEW_MODE_SEQUENTIAL,
+ BGFX_VIEW_MODE_DEPTH_ASCENDING,
+ BGFX_VIEW_MODE_DEPTH_DESCENDING,
+
+ BGFX_VIEW_MODE_CCOUNT
+
+} bgfx_view_mode_t;
+
#define BGFX_HANDLE_T(_name) \
typedef struct _name { uint16_t idx; } _name##_t
@@ -317,15 +336,36 @@ typedef struct bgfx_hmd
} bgfx_hmd_t;
/**/
+typedef uint16_t bgfx_view_id_t;
+
+/**/
+typedef struct bgfx_view_stats
+{
+ char name[256];
+ bgfx_view_id_t view;
+ int64_t cpuTimeElapsed;
+ int64_t gpuTimeElapsed;
+
+} bgfx_view_stats_t;
+
+typedef struct bgfx_encoder_stats
+{
+ int64_t cpuTimeBegin;
+ int64_t cpuTimeEnd;
+
+} bgfx_encoder_stats_t;
+
+/**/
typedef struct bgfx_stats
{
- uint64_t cpuTimeBegin;
- uint64_t cpuTimeEnd;
- uint64_t cpuTimerFreq;
+ int64_t cpuTimeFrame;
+ int64_t cpuTimeBegin;
+ int64_t cpuTimeEnd;
+ int64_t cpuTimerFreq;
- uint64_t gpuTimeBegin;
- uint64_t gpuTimeEnd;
- uint64_t gpuTimerFreq;
+ int64_t gpuTimeBegin;
+ int64_t gpuTimeEnd;
+ int64_t gpuTimerFreq;
int64_t waitRender;
int64_t waitSubmit;
@@ -334,14 +374,26 @@ typedef struct bgfx_stats
uint32_t numCompute;
uint32_t maxGpuLatency;
+ int64_t gpuMemoryMax;
+ int64_t gpuMemoryUsed;
+
uint16_t width;
uint16_t height;
uint16_t textWidth;
uint16_t textHeight;
+ uint16_t numViews;
+ bgfx_view_stats_t* viewStats;
+
+ uint8_t numEncoders;
+ bgfx_encoder_stats_t* encoderStats;
+
} bgfx_stats_t;
/**/
+struct bgfx_encoder;
+
+/**/
typedef struct bgfx_vertex_decl
{
uint32_t hash;
@@ -446,6 +498,7 @@ typedef struct bgfx_caps_limits
uint32_t maxDynamicVertexBuffers;
uint32_t maxUniforms;
uint32_t maxOcclusionQueries;
+ uint32_t maxEncoders;
} bgfx_caps_limits_t;
@@ -494,6 +547,9 @@ typedef struct bgfx_callback_vtbl
{
void (*fatal)(bgfx_callback_interface_t* _this, bgfx_fatal_t _code, const char* _str);
void (*trace_vargs)(bgfx_callback_interface_t* _this, const char* _filePath, uint16_t _line, const char* _format, va_list _argList);
+ void (*profiler_begin)(bgfx_callback_interface_t* _this, const char* _name, uint32_t _abgr, const char* _filePath, uint16_t _line);
+ void (*profiler_begin_literal)(bgfx_callback_interface_t* _this, const char* _name, uint32_t _abgr, const char* _filePath, uint16_t _line);
+ void (*profiler_end)(bgfx_callback_interface_t* _this);
uint32_t (*cache_read_size)(bgfx_callback_interface_t* _this, uint64_t _id);
bool (*cache_read)(bgfx_callback_interface_t* _this, uint64_t _id, void* _data, uint32_t _size);
void (*cache_write)(bgfx_callback_interface_t* _this, uint64_t _id, const void* _data, uint32_t _size);
@@ -549,12 +605,6 @@ BGFX_C_API uint32_t bgfx_topology_convert(bgfx_topology_convert_t _conversion, v
BGFX_C_API void bgfx_topology_sort_tri_list(bgfx_topology_sort_t _sort, void* _dst, uint32_t _dstSize, const float _dir[3], const float _pos[3], const void* _vertices, uint32_t _stride, const void* _indices, uint32_t _numIndices, bool _index32);
/**/
-BGFX_C_API void bgfx_image_swizzle_bgra8(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
-
-/**/
-BGFX_C_API void bgfx_image_rgba8_downsample_2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
-
-/**/
BGFX_C_API uint8_t bgfx_get_supported_renderers(uint8_t _max, bgfx_renderer_type_t* _enum);
/**/
@@ -570,6 +620,12 @@ BGFX_C_API void bgfx_shutdown();
BGFX_C_API void bgfx_reset(uint32_t _width, uint32_t _height, uint32_t _flags);
/**/
+BGFX_C_API struct bgfx_encoder* bgfx_begin();
+
+/**/
+BGFX_C_API void bgfx_end(struct bgfx_encoder* _encoder);
+
+/**/
BGFX_C_API uint32_t bgfx_frame(bool _capture);
/**/
@@ -666,7 +722,7 @@ BGFX_C_API void bgfx_alloc_transient_vertex_buffer(bgfx_transient_vertex_buffer_
BGFX_C_API bool bgfx_alloc_transient_buffers(bgfx_transient_vertex_buffer_t* _tvb, const bgfx_vertex_decl_t* _decl, uint32_t _numVertices, bgfx_transient_index_buffer_t* _tib, uint32_t _numIndices);
/**/
-BGFX_C_API const bgfx_instance_data_buffer_t* bgfx_alloc_instance_data_buffer(uint32_t _num, uint16_t _stride);
+BGFX_C_API void bgfx_alloc_instance_data_buffer(bgfx_instance_data_buffer_t* _idb, uint32_t _num, uint16_t _stride);
/**/
BGFX_C_API bgfx_indirect_buffer_handle_t bgfx_create_indirect_buffer(uint32_t _num);
@@ -684,6 +740,9 @@ BGFX_C_API uint16_t bgfx_get_shader_uniforms(bgfx_shader_handle_t _handle, bgfx_
BGFX_C_API void bgfx_get_uniform_info(bgfx_uniform_handle_t _handle, bgfx_uniform_info_t* _info);
/**/
+BGFX_C_API void bgfx_set_shader_name(bgfx_shader_handle_t _handle, const char* _name);
+
+/**/
BGFX_C_API void bgfx_destroy_shader(bgfx_shader_handle_t _handle);
/**/
@@ -729,6 +788,9 @@ BGFX_C_API void bgfx_update_texture_cube(bgfx_texture_handle_t _handle, uint16_t
BGFX_C_API uint32_t bgfx_read_texture(bgfx_texture_handle_t _handle, void* _data, uint8_t _mip);
/**/
+BGFX_C_API void bgfx_set_texture_name(bgfx_texture_handle_t _handle, const char* _name);
+
+/**/
BGFX_C_API void bgfx_destroy_texture(bgfx_texture_handle_t _handle);
/**/
@@ -771,40 +833,40 @@ BGFX_C_API void bgfx_destroy_occlusion_query(bgfx_occlusion_query_handle_t _hand
BGFX_C_API void bgfx_set_palette_color(uint8_t _index, const float _rgba[4]);
/**/
-BGFX_C_API void bgfx_set_view_name(uint8_t _id, const char* _name);
+BGFX_C_API void bgfx_set_view_name(bgfx_view_id_t _id, const char* _name);
/**/
-BGFX_C_API void bgfx_set_view_rect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
+BGFX_C_API void bgfx_set_view_rect(bgfx_view_id_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
/**/
-BGFX_C_API void bgfx_set_view_rect_auto(uint8_t _id, uint16_t _x, uint16_t _y, bgfx_backbuffer_ratio_t _ratio);
+BGFX_C_API void bgfx_set_view_rect_auto(bgfx_view_id_t _id, uint16_t _x, uint16_t _y, bgfx_backbuffer_ratio_t _ratio);
/**/
-BGFX_C_API void bgfx_set_view_scissor(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
+BGFX_C_API void bgfx_set_view_scissor(bgfx_view_id_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
/**/
-BGFX_C_API void bgfx_set_view_clear(uint8_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil);
+BGFX_C_API void bgfx_set_view_clear(bgfx_view_id_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil);
/**/
-BGFX_C_API void bgfx_set_view_clear_mrt(uint8_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7);
+BGFX_C_API void bgfx_set_view_clear_mrt(bgfx_view_id_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7);
/**/
-BGFX_C_API void bgfx_set_view_seq(uint8_t _id, bool _enabled);
+BGFX_C_API void bgfx_set_view_mode(bgfx_view_id_t _id, bgfx_view_mode_t _mode);
/**/
-BGFX_C_API void bgfx_set_view_frame_buffer(uint8_t _id, bgfx_frame_buffer_handle_t _handle);
+BGFX_C_API void bgfx_set_view_frame_buffer(bgfx_view_id_t _id, bgfx_frame_buffer_handle_t _handle);
/**/
-BGFX_C_API void bgfx_set_view_transform(uint8_t _id, const void* _view, const void* _proj);
+BGFX_C_API void bgfx_set_view_transform(bgfx_view_id_t _id, const void* _view, const void* _proj);
/**/
-BGFX_C_API void bgfx_set_view_transform_stereo(uint8_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR);
+BGFX_C_API void bgfx_set_view_transform_stereo(bgfx_view_id_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR);
/**/
-BGFX_C_API void bgfx_set_view_order(uint8_t _id, uint8_t _num, const void* _order);
+BGFX_C_API void bgfx_set_view_order(bgfx_view_id_t _id, uint16_t _num, const bgfx_view_id_t* _order);
/**/
-BGFX_C_API void bgfx_reset_view(uint8_t _id);
+BGFX_C_API void bgfx_reset_view(bgfx_view_id_t _id);
/**/
BGFX_C_API void bgfx_set_marker(const char* _marker);
@@ -846,13 +908,13 @@ BGFX_C_API void bgfx_set_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t
BGFX_C_API void bgfx_set_transient_index_buffer(const bgfx_transient_index_buffer_t* _tib, uint32_t _firstIndex, uint32_t _numIndices);
/**/
-BGFX_C_API void bgfx_set_vertex_buffer(bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
+BGFX_C_API void bgfx_set_vertex_buffer(uint8_t _stream, bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
/**/
-BGFX_C_API void bgfx_set_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
+BGFX_C_API void bgfx_set_dynamic_vertex_buffer(uint8_t _stream, bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
/**/
-BGFX_C_API void bgfx_set_transient_vertex_buffer(const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices);
+BGFX_C_API void bgfx_set_transient_vertex_buffer(uint8_t _stream, const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices);
/**/
BGFX_C_API void bgfx_set_instance_data_buffer(const bgfx_instance_data_buffer_t* _idb, uint32_t _num);
@@ -867,16 +929,16 @@ BGFX_C_API void bgfx_set_instance_data_from_dynamic_vertex_buffer(bgfx_dynamic_v
BGFX_C_API void bgfx_set_texture(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint32_t _flags);
/**/
-BGFX_C_API uint32_t bgfx_touch(uint8_t _id);
+BGFX_C_API void bgfx_touch(bgfx_view_id_t _id);
/**/
-BGFX_C_API uint32_t bgfx_submit(uint8_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState);
+BGFX_C_API void bgfx_submit(bgfx_view_id_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState);
/**/
-BGFX_C_API uint32_t bgfx_submit_occlusion_query(uint8_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState);
+BGFX_C_API void bgfx_submit_occlusion_query(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState);
/**/
-BGFX_C_API uint32_t bgfx_submit_indirect(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState);
+BGFX_C_API void bgfx_submit_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState);
/**/
BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format);
@@ -897,16 +959,118 @@ BGFX_C_API void bgfx_set_compute_dynamic_vertex_buffer(uint8_t _stage, bgfx_dyna
BGFX_C_API void bgfx_set_compute_indirect_buffer(uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access);
/**/
-BGFX_C_API uint32_t bgfx_dispatch(uint8_t _id, bgfx_program_handle_t _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags);
+BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
/**/
-BGFX_C_API uint32_t bgfx_dispatch_indirect(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
+BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
/**/
BGFX_C_API void bgfx_discard();
/**/
-BGFX_C_API void bgfx_blit(uint8_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
+BGFX_C_API void bgfx_blit(bgfx_view_id_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_marker(struct bgfx_encoder* _encoder, const char* _marker);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_state(struct bgfx_encoder* _encoder, uint64_t _state, uint32_t _rgba);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_condition(struct bgfx_encoder* _encoder, bgfx_occlusion_query_handle_t _handle, bool _visible);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_stencil(struct bgfx_encoder* _encoder, uint32_t _fstencil, uint32_t _bstencil);
+
+/**/
+BGFX_C_API uint16_t bgfx_encoder_set_scissor(struct bgfx_encoder* _encoder, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_scissor_cached(struct bgfx_encoder* _encoder, uint16_t _cache);
+
+/**/
+BGFX_C_API uint32_t bgfx_encoder_set_transform(struct bgfx_encoder* _encoder, const void* _mtx, uint16_t _num);
+
+/**/
+BGFX_C_API uint32_t bgfx_encoder_alloc_transform(struct bgfx_encoder* _encoder, bgfx_transform_t* _transform, uint16_t _num);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_transform_cached(struct bgfx_encoder* _encoder, uint32_t _cache, uint16_t _num);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_uniform(struct bgfx_encoder* _encoder, bgfx_uniform_handle_t _handle, const void* _value, uint16_t _num);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_index_buffer(struct bgfx_encoder* _encoder, bgfx_index_buffer_handle_t _handle, uint32_t _firstIndex, uint32_t _numIndices);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_dynamic_index_buffer(struct bgfx_encoder* _encoder, bgfx_dynamic_index_buffer_handle_t _handle, uint32_t _firstIndex, uint32_t _numIndices);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_transient_index_buffer(struct bgfx_encoder* _encoder, const bgfx_transient_index_buffer_t* _tib, uint32_t _firstIndex, uint32_t _numIndices);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_vertex_buffer(struct bgfx_encoder* _encoder, uint8_t _stream, bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_dynamic_vertex_buffer(struct bgfx_encoder* _encoder, uint8_t _stream, bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_transient_vertex_buffer(struct bgfx_encoder* _encoder, uint8_t _stream, const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_instance_data_buffer(struct bgfx_encoder* _encoder, const bgfx_instance_data_buffer_t* _idb, uint32_t _num);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_instance_data_from_vertex_buffer(struct bgfx_encoder* _encoder, bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _num);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_instance_data_from_dynamic_vertex_buffer(struct bgfx_encoder* _encoder, bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _num);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_texture(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint32_t _flags);
+
+/**/
+BGFX_C_API void bgfx_encoder_touch(struct bgfx_encoder* _encoder, bgfx_view_id_t _id);
+
+/**/
+BGFX_C_API void bgfx_encoder_submit(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState);
+
+/**/
+BGFX_C_API void bgfx_encoder_submit_occlusion_query(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState);
+
+/**/
+BGFX_C_API void bgfx_encoder_submit_indirect(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_image(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_compute_index_buffer(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_compute_vertex_buffer(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_vertex_buffer_handle_t _handle, bgfx_access_t _access);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_compute_dynamic_index_buffer(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_dynamic_index_buffer_handle_t _handle, bgfx_access_t _access);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_compute_dynamic_vertex_buffer(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_dynamic_vertex_buffer_handle_t _handle, bgfx_access_t _access);
+
+/**/
+BGFX_C_API void bgfx_encoder_set_compute_indirect_buffer(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access);
+
+/**/
+BGFX_C_API void bgfx_encoder_dispatch(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
+
+/**/
+BGFX_C_API void bgfx_encoder_dispatch_indirect(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
+
+/**/
+BGFX_C_API void bgfx_encoder_discard(struct bgfx_encoder* _encoder);
+
+/**/
+BGFX_C_API void bgfx_encoder_blit(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
/**/
BGFX_C_API void bgfx_request_screen_shot(bgfx_frame_buffer_handle_t _handle, const char* _filePath);
diff --git a/3rdparty/bgfx/include/bgfx/c99/platform.h b/3rdparty/bgfx/include/bgfx/c99/platform.h
index 78b7791a079..e58f6b28224 100644
--- a/3rdparty/bgfx/include/bgfx/c99/platform.h
+++ b/3rdparty/bgfx/include/bgfx/c99/platform.h
@@ -13,7 +13,7 @@
// necessary to use this header in conjunction with creating windows.
#include <bx/platform.h>
-#include <bgfx/c99/bgfx.h>
+#include "bgfx.h"
typedef enum bgfx_render_frame
{
@@ -31,7 +31,7 @@ typedef enum bgfx_render_frame
* allow creating separate rendering thread. If it is called before
* to bgfx_init, render thread won't be created by bgfx_init call.
*/
-BGFX_C_API bgfx_render_frame_t bgfx_render_frame();
+BGFX_C_API bgfx_render_frame_t bgfx_render_frame(int32_t _msecs);
typedef struct bgfx_platform_data
{
@@ -47,7 +47,7 @@ typedef struct bgfx_platform_data
/**/
BGFX_C_API void bgfx_set_platform_data(const bgfx_platform_data_t* _data);
-typedef struct bgfx_internal_data
+typedef struct bgfx_internal_datauint8_t
{
const struct bgfx_caps* caps;
void* context;
@@ -66,7 +66,7 @@ BGFX_C_API uintptr_t bgfx_override_internal_texture(bgfx_texture_handle_t _handl
/**/
typedef struct bgfx_interface_vtbl
{
- bgfx_render_frame_t (*render_frame)();
+ bgfx_render_frame_t (*render_frame)(int32_t _msecs);
void (*set_platform_data)(const bgfx_platform_data_t* _data);
const bgfx_internal_data_t* (*get_internal_data)();
uintptr_t (*override_internal_texture_ptr)(bgfx_texture_handle_t _handle, uintptr_t _ptr);
@@ -81,8 +81,6 @@ typedef struct bgfx_interface_vtbl
uint16_t (*weld_vertices)(uint16_t* _output, const bgfx_vertex_decl_t* _decl, const void* _data, uint16_t _num, float _epsilon);
uint32_t (*topology_convert)(bgfx_topology_convert_t _conversion, void* _dst, uint32_t _dstSize, const void* _indices, uint32_t _numIndices, bool _index32);
void (*topology_sort_tri_list)(bgfx_topology_sort_t _sort, void* _dst, uint32_t _dstSize, const float _dir[3], const float _pos[3], const void* _vertices, uint32_t _stride, const void* _indices, uint32_t _numIndices, bool _index32);
- void (*image_swizzle_bgra8)(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
- void (*image_rgba8_downsample_2x2)(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
uint8_t (*get_supported_renderers)(uint8_t _max, bgfx_renderer_type_t* _enum);
const char* (*get_renderer_name)(bgfx_renderer_type_t _type);
bool (*init)(bgfx_renderer_type_t _type, uint16_t _vendorId, uint16_t _deviceId, bgfx_callback_interface_t* _callback, bgfx_allocator_interface_t* _allocator);
@@ -120,11 +118,12 @@ typedef struct bgfx_interface_vtbl
void (*alloc_transient_index_buffer)(bgfx_transient_index_buffer_t* _tib, uint32_t _num);
void (*alloc_transient_vertex_buffer)(bgfx_transient_vertex_buffer_t* _tvb, uint32_t _num, const bgfx_vertex_decl_t* _decl);
bool (*alloc_transient_buffers)(bgfx_transient_vertex_buffer_t* _tvb, const bgfx_vertex_decl_t* _decl, uint32_t _numVertices, bgfx_transient_index_buffer_t* _tib, uint32_t _numIndices);
- const bgfx_instance_data_buffer_t* (*alloc_instance_data_buffer)(uint32_t _num, uint16_t _stride);
+ void (*alloc_instance_data_buffer)(bgfx_instance_data_buffer_t* _idb, uint32_t _num, uint16_t _stride);
bgfx_indirect_buffer_handle_t (*create_indirect_buffer)(uint32_t _num);
void (*destroy_indirect_buffer)(bgfx_indirect_buffer_handle_t _handle);
bgfx_shader_handle_t (*create_shader)(const bgfx_memory_t* _mem);
uint16_t (*get_shader_uniforms)(bgfx_shader_handle_t _handle, bgfx_uniform_handle_t* _uniforms, uint16_t _max);
+ void (*set_shader_name)(bgfx_shader_handle_t _handle, const char* _name);
void (*destroy_shader)(bgfx_shader_handle_t _handle);
bgfx_program_handle_t (*create_program)(bgfx_shader_handle_t _vsh, bgfx_shader_handle_t _fsh, bool _destroyShaders);
bgfx_program_handle_t (*create_compute_program)(bgfx_shader_handle_t _csh, bool _destroyShaders);
@@ -140,6 +139,7 @@ typedef struct bgfx_interface_vtbl
void (*update_texture_3d)(bgfx_texture_handle_t _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const bgfx_memory_t* _mem);
void (*update_texture_cube)(bgfx_texture_handle_t _handle, uint16_t _layer, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const bgfx_memory_t* _mem, uint16_t _pitch);
uint32_t (*read_texture)(bgfx_texture_handle_t _handle, void* _data, uint8_t _mip);
+ void (*set_texture_name)(bgfx_texture_handle_t _handle, const char* _name);
void (*destroy_texture)(bgfx_texture_handle_t _handle);
bgfx_frame_buffer_handle_t (*create_frame_buffer)(uint16_t _width, uint16_t _height, bgfx_texture_format_t _format, uint32_t _textureFlags);
bgfx_frame_buffer_handle_t (*create_frame_buffer_scaled)(bgfx_backbuffer_ratio_t _ratio, bgfx_texture_format_t _format, uint32_t _textureFlags);
@@ -154,50 +154,50 @@ typedef struct bgfx_interface_vtbl
bgfx_occlusion_query_result_t (*get_result)(bgfx_occlusion_query_handle_t _handle, int32_t* _result);
void (*destroy_occlusion_query)(bgfx_occlusion_query_handle_t _handle);
void (*set_palette_color)(uint8_t _index, const float _rgba[4]);
- void (*set_view_name)(uint8_t _id, const char* _name);
- void (*set_view_rect)(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
- void (*set_view_scissor)(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
- void (*set_view_clear)(uint8_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil);
- void (*set_view_clear_mrt)(uint8_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7);
- void (*set_view_seq)(uint8_t _id, bool _enabled);
- void (*set_view_frame_buffer)(uint8_t _id, bgfx_frame_buffer_handle_t _handle);
- void (*set_view_transform)(uint8_t _id, const void* _view, const void* _proj);
- void (*set_view_transform_stereo)(uint8_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR);
- void (*set_view_order)(uint8_t _id, uint8_t _num, const void* _order);
- void (*set_marker)(const char* _marker);
- void (*set_state)(uint64_t _state, uint32_t _rgba);
- void (*set_condition)(bgfx_occlusion_query_handle_t _handle, bool _visible);
- void (*set_stencil)(uint32_t _fstencil, uint32_t _bstencil);
- uint16_t (*set_scissor)(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
- void (*set_scissor_cached)(uint16_t _cache);
- uint32_t (*set_transform)(const void* _mtx, uint16_t _num);
- uint32_t (*alloc_transform)(bgfx_transform_t* _transform, uint16_t _num);
- void (*set_transform_cached)(uint32_t _cache, uint16_t _num);
- void (*set_uniform)(bgfx_uniform_handle_t _handle, const void* _value, uint16_t _num);
- void (*set_index_buffer)(bgfx_index_buffer_handle_t _handle, uint32_t _firstIndex, uint32_t _numIndices);
- void (*set_dynamic_index_buffer)(bgfx_dynamic_index_buffer_handle_t _handle, uint32_t _firstIndex, uint32_t _numIndices);
- void (*set_transient_index_buffer)(const bgfx_transient_index_buffer_t* _tib, uint32_t _firstIndex, uint32_t _numIndices);
- void (*set_vertex_buffer)(bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
- void (*set_dynamic_vertex_buffer)(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
- void (*set_transient_vertex_buffer)(const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices);
- void (*set_instance_data_buffer)(const bgfx_instance_data_buffer_t* _idb, uint32_t _num);
- void (*set_instance_data_from_vertex_buffer)(bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _num);
- void (*set_instance_data_from_dynamic_vertex_buffer)(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _num);
- void (*set_texture)(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint32_t _flags);
- uint32_t (*touch)(uint8_t _id);
- uint32_t (*submit)(uint8_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState);
- uint32_t (*submit_occlusion_query)(uint8_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState);
- uint32_t (*submit_indirect)(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState);
- void (*set_image)(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format);
- void (*set_compute_index_buffer)(uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access);
- void (*set_compute_vertex_buffer)(uint8_t _stage, bgfx_vertex_buffer_handle_t _handle, bgfx_access_t _access);
- void (*set_compute_dynamic_index_buffer)(uint8_t _stage, bgfx_dynamic_index_buffer_handle_t _handle, bgfx_access_t _access);
- void (*set_compute_dynamic_vertex_buffer)(uint8_t _stage, bgfx_dynamic_vertex_buffer_handle_t _handle, bgfx_access_t _access);
- void (*set_compute_indirect_buffer)(uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access);
- uint32_t (*dispatch)(uint8_t _id, bgfx_program_handle_t _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags);
- uint32_t (*dispatch_indirect)(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
- void (*discard)();
- void (*blit)(uint8_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
+ void (*set_view_name)(bgfx_view_id_t _id, const char* _name);
+ void (*set_view_rect)(bgfx_view_id_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
+ void (*set_view_scissor)(bgfx_view_id_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
+ void (*set_view_clear)(bgfx_view_id_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil);
+ void (*set_view_clear_mrt)(bgfx_view_id_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7);
+ void (*set_view_mode)(bgfx_view_id_t _id, bgfx_view_mode_t _mode);
+ void (*set_view_frame_buffer)(bgfx_view_id_t _id, bgfx_frame_buffer_handle_t _handle);
+ void (*set_view_transform)(bgfx_view_id_t _id, const void* _view, const void* _proj);
+ void (*set_view_transform_stereo)(bgfx_view_id_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR);
+ void (*set_view_order)(bgfx_view_id_t _id, uint16_t _num, const bgfx_view_id_t* _order);
+ void (*encoder_set_marker)(struct bgfx_encoder* _encoder, const char* _marker);
+ void (*encoder_set_state)(struct bgfx_encoder* _encoder, uint64_t _state, uint32_t _rgba);
+ void (*encoder_set_condition)(struct bgfx_encoder* _encoder, bgfx_occlusion_query_handle_t _handle, bool _visible);
+ void (*encoder_set_stencil)(struct bgfx_encoder* _encoder, uint32_t _fstencil, uint32_t _bstencil);
+ uint16_t (*encoder_set_scissor)(struct bgfx_encoder* _encoder, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height);
+ void (*encoder_set_scissor_cached)(struct bgfx_encoder* _encoder, uint16_t _cache);
+ uint32_t (*encoder_set_transform)(struct bgfx_encoder* _encoder, const void* _mtx, uint16_t _num);
+ uint32_t (*encoder_alloc_transform)(struct bgfx_encoder* _encoder, bgfx_transform_t* _transform, uint16_t _num);
+ void (*encoder_set_transform_cached)(struct bgfx_encoder* _encoder, uint32_t _cache, uint16_t _num);
+ void (*encoder_set_uniform)(struct bgfx_encoder* _encoder, bgfx_uniform_handle_t _handle, const void* _value, uint16_t _num);
+ void (*encoder_set_index_buffer)(struct bgfx_encoder* _encoder, bgfx_index_buffer_handle_t _handle, uint32_t _firstIndex, uint32_t _numIndices);
+ void (*encoder_set_dynamic_index_buffer)(struct bgfx_encoder* _encoder, bgfx_dynamic_index_buffer_handle_t _handle, uint32_t _firstIndex, uint32_t _numIndices);
+ void (*encoder_set_transient_index_buffer)(struct bgfx_encoder* _encoder, const bgfx_transient_index_buffer_t* _tib, uint32_t _firstIndex, uint32_t _numIndices);
+ void (*encoder_set_vertex_buffer)(struct bgfx_encoder* _encoder, uint8_t _stream, bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
+ void (*encoder_set_dynamic_vertex_buffer)(struct bgfx_encoder* _encoder, uint8_t _stream, bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
+ void (*encoder_set_transient_vertex_buffer)(struct bgfx_encoder* _encoder, uint8_t _stream, const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices);
+ void (*encoder_set_instance_data_buffer)(struct bgfx_encoder* _encoder, const bgfx_instance_data_buffer_t* _idb, uint32_t _num);
+ void (*encoder_set_instance_data_from_vertex_buffer)(struct bgfx_encoder* _encoder, bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _num);
+ void (*encoder_set_instance_data_from_dynamic_vertex_buffer)(struct bgfx_encoder* _encoder, bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _num);
+ void (*encoder_set_texture)(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint32_t _flags);
+ void (*encoder_touch)(struct bgfx_encoder* _encoder, bgfx_view_id_t _id);
+ void (*encoder_submit)(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState);
+ void (*encoder_submit_occlusion_query)(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState);
+ void (*encoder_submit_indirect)(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState);
+ void (*encoder_set_image)(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format);
+ void (*encoder_set_compute_index_buffer)(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access);
+ void (*encoder_set_compute_vertex_buffer)(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_vertex_buffer_handle_t _handle, bgfx_access_t _access);
+ void (*encoder_set_compute_dynamic_index_buffer)(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_dynamic_index_buffer_handle_t _handle, bgfx_access_t _access);
+ void (*encoder_set_compute_dynamic_vertex_buffer)(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_dynamic_vertex_buffer_handle_t _handle, bgfx_access_t _access);
+ void (*encoder_set_compute_indirect_buffer)(struct bgfx_encoder* _encoder, uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access);
+ void (*encoder_dispatch)(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags);
+ void (*encoder_dispatch_indirect)(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags);
+ void (*encoder_discard)(struct bgfx_encoder* _encoder);
+ void (*encoder_blit)(struct bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
void (*request_screen_shot)(bgfx_frame_buffer_handle_t _handle, const char* _filePath);
} bgfx_interface_vtbl_t;
diff --git a/3rdparty/bgfx/include/bgfx/defines.h b/3rdparty/bgfx/include/bgfx/defines.h
index 98b9ac8fd23..8a9ddcaf256 100644
--- a/3rdparty/bgfx/include/bgfx/defines.h
+++ b/3rdparty/bgfx/include/bgfx/defines.h
@@ -6,17 +6,18 @@
#ifndef BGFX_DEFINES_H_HEADER_GUARD
#define BGFX_DEFINES_H_HEADER_GUARD
-#define BGFX_API_VERSION UINT32_C(39)
+#define BGFX_API_VERSION UINT32_C(57)
-///
+/// Color RGB/alpha/depth write. When it's not specified write will be disabled.
#define BGFX_STATE_RGB_WRITE UINT64_C(0x0000000000000001) //!< Enable RGB write.
#define BGFX_STATE_ALPHA_WRITE UINT64_C(0x0000000000000002) //!< Enable alpha write.
#define BGFX_STATE_DEPTH_WRITE UINT64_C(0x0000000000000004) //!< Enable depth write.
+/// Depth test state. When `BGFX_STATE_DEPTH_` is not specified depth test will be disabled.
#define BGFX_STATE_DEPTH_TEST_LESS UINT64_C(0x0000000000000010) //!< Enable depth test, less.
-#define BGFX_STATE_DEPTH_TEST_LEQUAL UINT64_C(0x0000000000000020) //!< Enable depth test, less equal.
+#define BGFX_STATE_DEPTH_TEST_LEQUAL UINT64_C(0x0000000000000020) //!< Enable depth test, less or equal.
#define BGFX_STATE_DEPTH_TEST_EQUAL UINT64_C(0x0000000000000030) //!< Enable depth test, equal.
-#define BGFX_STATE_DEPTH_TEST_GEQUAL UINT64_C(0x0000000000000040) //!< Enable depth test, greater equal.
+#define BGFX_STATE_DEPTH_TEST_GEQUAL UINT64_C(0x0000000000000040) //!< Enable depth test, greater or equal.
#define BGFX_STATE_DEPTH_TEST_GREATER UINT64_C(0x0000000000000050) //!< Enable depth test, greater.
#define BGFX_STATE_DEPTH_TEST_NOTEQUAL UINT64_C(0x0000000000000060) //!< Enable depth test, not equal.
#define BGFX_STATE_DEPTH_TEST_NEVER UINT64_C(0x0000000000000070) //!< Enable depth test, never.
@@ -24,33 +25,38 @@
#define BGFX_STATE_DEPTH_TEST_SHIFT 4 //!< Depth test state bit shift.
#define BGFX_STATE_DEPTH_TEST_MASK UINT64_C(0x00000000000000f0) //!< Depth test state bit mask.
-#define BGFX_STATE_BLEND_ZERO UINT64_C(0x0000000000001000) //!<
-#define BGFX_STATE_BLEND_ONE UINT64_C(0x0000000000002000) //!<
-#define BGFX_STATE_BLEND_SRC_COLOR UINT64_C(0x0000000000003000) //!<
-#define BGFX_STATE_BLEND_INV_SRC_COLOR UINT64_C(0x0000000000004000) //!<
-#define BGFX_STATE_BLEND_SRC_ALPHA UINT64_C(0x0000000000005000) //!<
-#define BGFX_STATE_BLEND_INV_SRC_ALPHA UINT64_C(0x0000000000006000) //!<
-#define BGFX_STATE_BLEND_DST_ALPHA UINT64_C(0x0000000000007000) //!<
-#define BGFX_STATE_BLEND_INV_DST_ALPHA UINT64_C(0x0000000000008000) //!<
-#define BGFX_STATE_BLEND_DST_COLOR UINT64_C(0x0000000000009000) //!<
-#define BGFX_STATE_BLEND_INV_DST_COLOR UINT64_C(0x000000000000a000) //!<
-#define BGFX_STATE_BLEND_SRC_ALPHA_SAT UINT64_C(0x000000000000b000) //!<
-#define BGFX_STATE_BLEND_FACTOR UINT64_C(0x000000000000c000) //!<
-#define BGFX_STATE_BLEND_INV_FACTOR UINT64_C(0x000000000000d000) //!<
+/// Use BGFX_STATE_BLEND_FUNC(_src, _dst) or BGFX_STATE_BLEND_FUNC_SEPARATE(_srcRGB, _dstRGB, _srcA, _dstA)
+/// helper macros.
+#define BGFX_STATE_BLEND_ZERO UINT64_C(0x0000000000001000) //!< 0, 0, 0, 0
+#define BGFX_STATE_BLEND_ONE UINT64_C(0x0000000000002000) //!< 1, 1, 1, 1
+#define BGFX_STATE_BLEND_SRC_COLOR UINT64_C(0x0000000000003000) //!< Rs, Gs, Bs, As
+#define BGFX_STATE_BLEND_INV_SRC_COLOR UINT64_C(0x0000000000004000) //!< 1-Rs, 1-Gs, 1-Bs, 1-As
+#define BGFX_STATE_BLEND_SRC_ALPHA UINT64_C(0x0000000000005000) //!< As, As, As, As
+#define BGFX_STATE_BLEND_INV_SRC_ALPHA UINT64_C(0x0000000000006000) //!< 1-As, 1-As, 1-As, 1-As
+#define BGFX_STATE_BLEND_DST_ALPHA UINT64_C(0x0000000000007000) //!< Ad, Ad, Ad, Ad
+#define BGFX_STATE_BLEND_INV_DST_ALPHA UINT64_C(0x0000000000008000) //!< 1-Ad, 1-Ad, 1-Ad ,1-Ad
+#define BGFX_STATE_BLEND_DST_COLOR UINT64_C(0x0000000000009000) //!< Rd, Gd, Bd, Ad
+#define BGFX_STATE_BLEND_INV_DST_COLOR UINT64_C(0x000000000000a000) //!< 1-Rd, 1-Gd, 1-Bd, 1-Ad
+#define BGFX_STATE_BLEND_SRC_ALPHA_SAT UINT64_C(0x000000000000b000) //!< f, f, f, 1; f = min(As, 1-Ad)
+#define BGFX_STATE_BLEND_FACTOR UINT64_C(0x000000000000c000) //!< Blend factor
+#define BGFX_STATE_BLEND_INV_FACTOR UINT64_C(0x000000000000d000) //!< 1-Blend factor
#define BGFX_STATE_BLEND_SHIFT 12 //!< Blend state bit shift.
#define BGFX_STATE_BLEND_MASK UINT64_C(0x000000000ffff000) //!< Blend state bit mask.
-#define BGFX_STATE_BLEND_EQUATION_ADD UINT64_C(0x0000000000000000) //!<
-#define BGFX_STATE_BLEND_EQUATION_SUB UINT64_C(0x0000000010000000) //!<
-#define BGFX_STATE_BLEND_EQUATION_REVSUB UINT64_C(0x0000000020000000) //!<
-#define BGFX_STATE_BLEND_EQUATION_MIN UINT64_C(0x0000000030000000) //!<
-#define BGFX_STATE_BLEND_EQUATION_MAX UINT64_C(0x0000000040000000) //!<
+/// Use BGFX_STATE_BLEND_EQUATION(_equation) or BGFX_STATE_BLEND_EQUATION_SEPARATE(_equationRGB, _equationA)
+/// helper macros.
+#define BGFX_STATE_BLEND_EQUATION_ADD UINT64_C(0x0000000000000000) //!< Blend add: src + dst.
+#define BGFX_STATE_BLEND_EQUATION_SUB UINT64_C(0x0000000010000000) //!< Blend subtract: src - dst.
+#define BGFX_STATE_BLEND_EQUATION_REVSUB UINT64_C(0x0000000020000000) //!< Blend reverse subtract: dst - src.
+#define BGFX_STATE_BLEND_EQUATION_MIN UINT64_C(0x0000000030000000) //!< Blend min: min(src, dst).
+#define BGFX_STATE_BLEND_EQUATION_MAX UINT64_C(0x0000000040000000) //!< Blend max: max(src, dst).
#define BGFX_STATE_BLEND_EQUATION_SHIFT 28 //!< Blend equation bit shift.
#define BGFX_STATE_BLEND_EQUATION_MASK UINT64_C(0x00000003f0000000) //!< Blend equation bit mask.
#define BGFX_STATE_BLEND_INDEPENDENT UINT64_C(0x0000000400000000) //!< Enable blend independent.
#define BGFX_STATE_BLEND_ALPHA_TO_COVERAGE UINT64_C(0x0000000800000000) //!< Enable alpha to coverage.
+/// Cull state. When `BGFX_STATE_CULL_*` is not specified culling will be disabled.
#define BGFX_STATE_CULL_CW UINT64_C(0x0000001000000000) //!< Cull clockwise triangles.
#define BGFX_STATE_CULL_CCW UINT64_C(0x0000002000000000) //!< Cull counter-clockwise triangles.
#define BGFX_STATE_CULL_SHIFT 36 //!< Culling mode bit shift.
@@ -67,11 +73,12 @@
#define BGFX_STATE_PT_SHIFT 48 //!< Primitive type bit shift.
#define BGFX_STATE_PT_MASK UINT64_C(0x0007000000000000) //!< Primitive type bit mask.
+/// See BGFX_STATE_POINT_SIZE(_size) helper macro.
#define BGFX_STATE_POINT_SIZE_SHIFT 52 //!< Point size bit shift.
#define BGFX_STATE_POINT_SIZE_MASK UINT64_C(0x00f0000000000000) //!< Point size bit mask.
-/// Enable MSAA write when writing into MSAA frame buffer. This flag is ignored when not writing into
-/// MSAA frame buffer.
+/// Enable MSAA write when writing into MSAA frame buffer.
+/// This flag is ignored when not writing into MSAA frame buffer.
#define BGFX_STATE_MSAA UINT64_C(0x0100000000000000) //!< Enable MSAA rasterization.
#define BGFX_STATE_LINEAA UINT64_C(0x0200000000000000) //!< Enable line AA rasterization.
#define BGFX_STATE_CONSERVATIVE_RASTER UINT64_C(0x0400000000000000) //!< Enable conservative rasterization.
@@ -80,55 +87,96 @@
#define BGFX_STATE_RESERVED_SHIFT 61 //!< Internal bits shift.
#define BGFX_STATE_RESERVED_MASK UINT64_C(0xe000000000000000) //!< Internal bits mask.
-/// See BGFX_STATE_POINT_SIZE(_size) helper macro.
#define BGFX_STATE_NONE UINT64_C(0x0000000000000000) //!< No state.
#define BGFX_STATE_MASK UINT64_C(0xffffffffffffffff) //!< State mask.
/// Default state is write to RGB, alpha, and depth with depth test less enabled, with clockwise
/// culling and MSAA (when writing into MSAA frame buffer, otherwise this flag is ignored).
-#define BGFX_STATE_DEFAULT (0 \
- | BGFX_STATE_RGB_WRITE \
- | BGFX_STATE_ALPHA_WRITE \
- | BGFX_STATE_DEPTH_TEST_LESS \
- | BGFX_STATE_DEPTH_WRITE \
- | BGFX_STATE_CULL_CW \
- | BGFX_STATE_MSAA \
- )
+#define BGFX_STATE_DEFAULT (0 \
+ | BGFX_STATE_RGB_WRITE \
+ | BGFX_STATE_ALPHA_WRITE \
+ | BGFX_STATE_DEPTH_TEST_LESS \
+ | BGFX_STATE_DEPTH_WRITE \
+ | BGFX_STATE_CULL_CW \
+ | BGFX_STATE_MSAA \
+ )
+/// Alpha reference value.
#define BGFX_STATE_ALPHA_REF(_ref) ( ( (uint64_t)(_ref )<<BGFX_STATE_ALPHA_REF_SHIFT )&BGFX_STATE_ALPHA_REF_MASK)
+
+/// Point size value.
#define BGFX_STATE_POINT_SIZE(_size) ( ( (uint64_t)(_size)<<BGFX_STATE_POINT_SIZE_SHIFT)&BGFX_STATE_POINT_SIZE_MASK)
-///
+/// Blend function separate.
#define BGFX_STATE_BLEND_FUNC_SEPARATE(_srcRGB, _dstRGB, _srcA, _dstA) (UINT64_C(0) \
- | ( ( (uint64_t)(_srcRGB)|( (uint64_t)(_dstRGB)<<4) ) ) \
- | ( ( (uint64_t)(_srcA )|( (uint64_t)(_dstA )<<4) )<<8) \
- )
+ | ( ( (uint64_t)(_srcRGB)|( (uint64_t)(_dstRGB)<<4) ) ) \
+ | ( ( (uint64_t)(_srcA )|( (uint64_t)(_dstA )<<4) )<<8) \
+ )
-#define BGFX_STATE_BLEND_EQUATION_SEPARATE(_rgb, _a) ( (uint64_t)(_rgb)|( (uint64_t)(_a)<<3) )
+/// Blend equation separate.
+#define BGFX_STATE_BLEND_EQUATION_SEPARATE(_equationRGB, _equationA) ( (uint64_t)(_equationRGB)|( (uint64_t)(_equationA)<<3) )
-///
+/// Blend function.
#define BGFX_STATE_BLEND_FUNC(_src, _dst) BGFX_STATE_BLEND_FUNC_SEPARATE(_src, _dst, _src, _dst)
+
+/// Blend equation.
#define BGFX_STATE_BLEND_EQUATION(_equation) BGFX_STATE_BLEND_EQUATION_SEPARATE(_equation, _equation)
-#define BGFX_STATE_BLEND_ADD (BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE ) )
-#define BGFX_STATE_BLEND_ALPHA (BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA) )
-#define BGFX_STATE_BLEND_DARKEN (BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE ) | BGFX_STATE_BLEND_EQUATION(BGFX_STATE_BLEND_EQUATION_MIN) )
-#define BGFX_STATE_BLEND_LIGHTEN (BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE ) | BGFX_STATE_BLEND_EQUATION(BGFX_STATE_BLEND_EQUATION_MAX) )
-#define BGFX_STATE_BLEND_MULTIPLY (BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_ZERO ) )
-#define BGFX_STATE_BLEND_NORMAL (BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_INV_SRC_ALPHA) )
-#define BGFX_STATE_BLEND_SCREEN (BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_INV_SRC_COLOR) )
-#define BGFX_STATE_BLEND_LINEAR_BURN (BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_INV_DST_COLOR) | BGFX_STATE_BLEND_EQUATION(BGFX_STATE_BLEND_EQUATION_SUB) )
+/// Utility predefined blend modes.
+
+/// Additive blending.
+#define BGFX_STATE_BLEND_ADD (0 \
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) \
+ )
+
+/// Alpha blend.
+#define BGFX_STATE_BLEND_ALPHA (0 \
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA) \
+ )
+
+/// Selects darker color of blend.
+#define BGFX_STATE_BLEND_DARKEN (0 \
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) \
+ | BGFX_STATE_BLEND_EQUATION(BGFX_STATE_BLEND_EQUATION_MIN) \
+ )
+
+/// Selects lighter color of blend.
+#define BGFX_STATE_BLEND_LIGHTEN (0 \
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) \
+ | BGFX_STATE_BLEND_EQUATION(BGFX_STATE_BLEND_EQUATION_MAX) \
+ )
+
+/// Multiplies colors.
+#define BGFX_STATE_BLEND_MULTIPLY (0 \
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_ZERO) \
+ )
+
+/// Opaque pixels will cover the pixels directly below them without any math or algorithm applied to them.
+#define BGFX_STATE_BLEND_NORMAL (0 \
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_INV_SRC_ALPHA) \
+ )
+
+/// Multiplies the inverse of the blend and base colors.
+#define BGFX_STATE_BLEND_SCREEN (0 \
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_INV_SRC_COLOR) \
+ )
+
+/// Decreases the brightness of the base color based on the value of the blend color.
+#define BGFX_STATE_BLEND_LINEAR_BURN (0 \
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_INV_DST_COLOR) \
+ | BGFX_STATE_BLEND_EQUATION(BGFX_STATE_BLEND_EQUATION_SUB) \
+ )
///
-#define BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst) (0 \
- | ( uint32_t( (_src)>>BGFX_STATE_BLEND_SHIFT) \
- | ( uint32_t( (_dst)>>BGFX_STATE_BLEND_SHIFT)<<4) ) \
- )
+#define BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst) (0 \
+ | ( (uint32_t)( (_src)>>BGFX_STATE_BLEND_SHIFT) \
+ | ( (uint32_t)( (_dst)>>BGFX_STATE_BLEND_SHIFT)<<4) ) \
+ )
-#define BGFX_STATE_BLEND_FUNC_RT_xE(_src, _dst, _equation) (0 \
- | BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst) \
- | ( uint32_t( (_equation)>>BGFX_STATE_BLEND_EQUATION_SHIFT)<<8) \
- )
+#define BGFX_STATE_BLEND_FUNC_RT_xE(_src, _dst, _equation) (0 \
+ | BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst) \
+ | ( (uint32_t)( (_equation)>>BGFX_STATE_BLEND_EQUATION_SHIFT)<<8) \
+ )
#define BGFX_STATE_BLEND_FUNC_RT_1(_src, _dst) (BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst)<< 0)
#define BGFX_STATE_BLEND_FUNC_RT_2(_src, _dst) (BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst)<<11)
@@ -193,10 +241,10 @@
#define BGFX_STENCIL_DEFAULT UINT32_C(0x00000000) //!<
/// Set stencil ref value.
-#define BGFX_STENCIL_FUNC_REF(_ref) ( (uint32_t(_ref)<<BGFX_STENCIL_FUNC_REF_SHIFT)&BGFX_STENCIL_FUNC_REF_MASK)
+#define BGFX_STENCIL_FUNC_REF(_ref) ( ((uint32_t)(_ref)<<BGFX_STENCIL_FUNC_REF_SHIFT)&BGFX_STENCIL_FUNC_REF_MASK)
/// Set stencil rmask value.
-#define BGFX_STENCIL_FUNC_RMASK(_mask) ( (uint32_t(_mask)<<BGFX_STENCIL_FUNC_RMASK_SHIFT)&BGFX_STENCIL_FUNC_RMASK_MASK)
+#define BGFX_STENCIL_FUNC_RMASK(_mask) ( ((uint32_t)(_mask)<<BGFX_STENCIL_FUNC_RMASK_SHIFT)&BGFX_STENCIL_FUNC_RMASK_MASK)
///
#define BGFX_CLEAR_NONE UINT16_C(0x0000) //!< No clear flags.
@@ -214,112 +262,114 @@
#define BGFX_CLEAR_DISCARD_DEPTH UINT16_C(0x0800) //!< Discard frame buffer depth attachment.
#define BGFX_CLEAR_DISCARD_STENCIL UINT16_C(0x1000) //!< Discard frame buffer stencil attachment.
-#define BGFX_CLEAR_DISCARD_COLOR_MASK (0 \
- | BGFX_CLEAR_DISCARD_COLOR_0 \
- | BGFX_CLEAR_DISCARD_COLOR_1 \
- | BGFX_CLEAR_DISCARD_COLOR_2 \
- | BGFX_CLEAR_DISCARD_COLOR_3 \
- | BGFX_CLEAR_DISCARD_COLOR_4 \
- | BGFX_CLEAR_DISCARD_COLOR_5 \
- | BGFX_CLEAR_DISCARD_COLOR_6 \
- | BGFX_CLEAR_DISCARD_COLOR_7 \
+#define BGFX_CLEAR_DISCARD_COLOR_MASK (0 \
+ | BGFX_CLEAR_DISCARD_COLOR_0 \
+ | BGFX_CLEAR_DISCARD_COLOR_1 \
+ | BGFX_CLEAR_DISCARD_COLOR_2 \
+ | BGFX_CLEAR_DISCARD_COLOR_3 \
+ | BGFX_CLEAR_DISCARD_COLOR_4 \
+ | BGFX_CLEAR_DISCARD_COLOR_5 \
+ | BGFX_CLEAR_DISCARD_COLOR_6 \
+ | BGFX_CLEAR_DISCARD_COLOR_7 \
)
-#define BGFX_CLEAR_DISCARD_MASK (0 \
+#define BGFX_CLEAR_DISCARD_MASK (0 \
| BGFX_CLEAR_DISCARD_COLOR_MASK \
- | BGFX_CLEAR_DISCARD_DEPTH \
- | BGFX_CLEAR_DISCARD_STENCIL \
+ | BGFX_CLEAR_DISCARD_DEPTH \
+ | BGFX_CLEAR_DISCARD_STENCIL \
)
+///
#define BGFX_DEBUG_NONE UINT32_C(0x00000000) //!< No debug.
#define BGFX_DEBUG_WIREFRAME UINT32_C(0x00000001) //!< Enable wireframe for all primitives.
#define BGFX_DEBUG_IFH UINT32_C(0x00000002) //!< Enable infinitely fast hardware test. No draw calls will be submitted to driver. It’s useful when profiling to quickly assess bottleneck between CPU and GPU.
#define BGFX_DEBUG_STATS UINT32_C(0x00000004) //!< Enable statistics display.
#define BGFX_DEBUG_TEXT UINT32_C(0x00000008) //!< Enable debug text display.
+#define BGFX_DEBUG_PROFILER UINT32_C(0x00000010) //!< Enable profiler.
///
#define BGFX_BUFFER_NONE UINT16_C(0x0000) //!<
-#define BGFX_BUFFER_COMPUTE_FORMAT_8x1 UINT16_C(0x0001) //!<
-#define BGFX_BUFFER_COMPUTE_FORMAT_8x2 UINT16_C(0x0002) //!<
-#define BGFX_BUFFER_COMPUTE_FORMAT_8x4 UINT16_C(0x0003) //!<
-#define BGFX_BUFFER_COMPUTE_FORMAT_16x1 UINT16_C(0x0004) //!<
-#define BGFX_BUFFER_COMPUTE_FORMAT_16x2 UINT16_C(0x0005) //!<
-#define BGFX_BUFFER_COMPUTE_FORMAT_16x4 UINT16_C(0x0006) //!<
-#define BGFX_BUFFER_COMPUTE_FORMAT_32x1 UINT16_C(0x0007) //!<
-#define BGFX_BUFFER_COMPUTE_FORMAT_32x2 UINT16_C(0x0008) //!<
-#define BGFX_BUFFER_COMPUTE_FORMAT_32x4 UINT16_C(0x0009) //!<
+#define BGFX_BUFFER_COMPUTE_FORMAT_8x1 UINT16_C(0x0001) //!< 1 8-bit value
+#define BGFX_BUFFER_COMPUTE_FORMAT_8x2 UINT16_C(0x0002) //!< 2 8-bit values
+#define BGFX_BUFFER_COMPUTE_FORMAT_8x4 UINT16_C(0x0003) //!< 4 8-bit values
+#define BGFX_BUFFER_COMPUTE_FORMAT_16x1 UINT16_C(0x0004) //!< 1 16-bit value
+#define BGFX_BUFFER_COMPUTE_FORMAT_16x2 UINT16_C(0x0005) //!< 2 16-bit values
+#define BGFX_BUFFER_COMPUTE_FORMAT_16x4 UINT16_C(0x0006) //!< 4 16-bit values
+#define BGFX_BUFFER_COMPUTE_FORMAT_32x1 UINT16_C(0x0007) //!< 1 32-bit value
+#define BGFX_BUFFER_COMPUTE_FORMAT_32x2 UINT16_C(0x0008) //!< 2 32-bit values
+#define BGFX_BUFFER_COMPUTE_FORMAT_32x4 UINT16_C(0x0009) //!< 4 32-bit values
#define BGFX_BUFFER_COMPUTE_FORMAT_SHIFT 0 //!<
#define BGFX_BUFFER_COMPUTE_FORMAT_MASK UINT16_C(0x000f) //!<
-#define BGFX_BUFFER_COMPUTE_TYPE_UINT UINT16_C(0x0010) //!<
-#define BGFX_BUFFER_COMPUTE_TYPE_INT UINT16_C(0x0020) //!<
-#define BGFX_BUFFER_COMPUTE_TYPE_FLOAT UINT16_C(0x0030) //!<
+#define BGFX_BUFFER_COMPUTE_TYPE_INT UINT16_C(0x0010) //!< Type `int`.
+#define BGFX_BUFFER_COMPUTE_TYPE_UINT UINT16_C(0x0020) //!< Type `uint`.
+#define BGFX_BUFFER_COMPUTE_TYPE_FLOAT UINT16_C(0x0030) //!< Type `float`.
#define BGFX_BUFFER_COMPUTE_TYPE_SHIFT 4 //!<
#define BGFX_BUFFER_COMPUTE_TYPE_MASK UINT16_C(0x0030) //!<
#define BGFX_BUFFER_COMPUTE_READ UINT16_C(0x0100) //!< Buffer will be read by shader.
#define BGFX_BUFFER_COMPUTE_WRITE UINT16_C(0x0200) //!< Buffer will be used for writing.
#define BGFX_BUFFER_DRAW_INDIRECT UINT16_C(0x0400) //!< Buffer will be used for storing draw indirect commands.
-#define BGFX_BUFFER_ALLOW_RESIZE UINT16_C(0x0800) //!<
-#define BGFX_BUFFER_INDEX32 UINT16_C(0x1000) //!<
+#define BGFX_BUFFER_ALLOW_RESIZE UINT16_C(0x0800) //!< Allow dynamic index/vertex buffer resize during update.
+#define BGFX_BUFFER_INDEX32 UINT16_C(0x1000) //!< Index buffer contains 32-bit indices.
#define BGFX_BUFFER_COMPUTE_READ_WRITE (0 \
- | BGFX_BUFFER_COMPUTE_READ \
- | BGFX_BUFFER_COMPUTE_WRITE \
+ | BGFX_BUFFER_COMPUTE_READ \
+ | BGFX_BUFFER_COMPUTE_WRITE \
)
///
#define BGFX_TEXTURE_NONE UINT32_C(0x00000000) //!<
-#define BGFX_TEXTURE_U_MIRROR UINT32_C(0x00000001) //!<
-#define BGFX_TEXTURE_U_CLAMP UINT32_C(0x00000002) //!<
-#define BGFX_TEXTURE_U_BORDER UINT32_C(0x00000003) //!<
+#define BGFX_TEXTURE_U_MIRROR UINT32_C(0x00000001) //!< Wrap U mode: Mirror
+#define BGFX_TEXTURE_U_CLAMP UINT32_C(0x00000002) //!< Wrap U mode: Clamp
+#define BGFX_TEXTURE_U_BORDER UINT32_C(0x00000003) //!< Wrap U mode: Border
#define BGFX_TEXTURE_U_SHIFT 0 //!<
#define BGFX_TEXTURE_U_MASK UINT32_C(0x00000003) //!<
-#define BGFX_TEXTURE_V_MIRROR UINT32_C(0x00000004) //!<
-#define BGFX_TEXTURE_V_CLAMP UINT32_C(0x00000008) //!<
-#define BGFX_TEXTURE_V_BORDER UINT32_C(0x0000000c) //!<
+#define BGFX_TEXTURE_V_MIRROR UINT32_C(0x00000004) //!< Wrap V mode: Mirror
+#define BGFX_TEXTURE_V_CLAMP UINT32_C(0x00000008) //!< Wrap V mode: Clamp
+#define BGFX_TEXTURE_V_BORDER UINT32_C(0x0000000c) //!< Wrap V mode: Border
#define BGFX_TEXTURE_V_SHIFT 2 //!<
#define BGFX_TEXTURE_V_MASK UINT32_C(0x0000000c) //!<
-#define BGFX_TEXTURE_W_MIRROR UINT32_C(0x00000010) //!<
-#define BGFX_TEXTURE_W_CLAMP UINT32_C(0x00000020) //!<
-#define BGFX_TEXTURE_W_BORDER UINT32_C(0x00000030) //!<
+#define BGFX_TEXTURE_W_MIRROR UINT32_C(0x00000010) //!< Wrap W mode: Mirror
+#define BGFX_TEXTURE_W_CLAMP UINT32_C(0x00000020) //!< Wrap W mode: Clamp
+#define BGFX_TEXTURE_W_BORDER UINT32_C(0x00000030) //!< Wrap W mode: Border
#define BGFX_TEXTURE_W_SHIFT 4 //!<
#define BGFX_TEXTURE_W_MASK UINT32_C(0x00000030) //!<
-#define BGFX_TEXTURE_MIN_POINT UINT32_C(0x00000040) //!<
-#define BGFX_TEXTURE_MIN_ANISOTROPIC UINT32_C(0x00000080) //!<
+#define BGFX_TEXTURE_MIN_POINT UINT32_C(0x00000040) //!< Min sampling mode: Point
+#define BGFX_TEXTURE_MIN_ANISOTROPIC UINT32_C(0x00000080) //!< Min sampling mode: Anisotropic
#define BGFX_TEXTURE_MIN_SHIFT 6 //!<
#define BGFX_TEXTURE_MIN_MASK UINT32_C(0x000000c0) //!<
-#define BGFX_TEXTURE_MAG_POINT UINT32_C(0x00000100) //!<
-#define BGFX_TEXTURE_MAG_ANISOTROPIC UINT32_C(0x00000200) //!<
+#define BGFX_TEXTURE_MAG_POINT UINT32_C(0x00000100) //!< Mag sampling mode: Point
+#define BGFX_TEXTURE_MAG_ANISOTROPIC UINT32_C(0x00000200) //!< Mag sampling mode: Anisotropic
#define BGFX_TEXTURE_MAG_SHIFT 8 //!<
#define BGFX_TEXTURE_MAG_MASK UINT32_C(0x00000300) //!<
-#define BGFX_TEXTURE_MIP_POINT UINT32_C(0x00000400) //!<
+#define BGFX_TEXTURE_MIP_POINT UINT32_C(0x00000400) //!< Mip sampling mode: Point
#define BGFX_TEXTURE_MIP_SHIFT 10 //!<
#define BGFX_TEXTURE_MIP_MASK UINT32_C(0x00000400) //!<
-#define BGFX_TEXTURE_MSAA_SAMPLE UINT32_C(0x00000800) //!<
+#define BGFX_TEXTURE_MSAA_SAMPLE UINT32_C(0x00000800) //!< Texture will be used for MSAA sampling.
#define BGFX_TEXTURE_RT UINT32_C(0x00001000) //!<
-#define BGFX_TEXTURE_RT_MSAA_X2 UINT32_C(0x00002000) //!<
-#define BGFX_TEXTURE_RT_MSAA_X4 UINT32_C(0x00003000) //!<
-#define BGFX_TEXTURE_RT_MSAA_X8 UINT32_C(0x00004000) //!<
-#define BGFX_TEXTURE_RT_MSAA_X16 UINT32_C(0x00005000) //!<
+#define BGFX_TEXTURE_RT_MSAA_X2 UINT32_C(0x00002000) //!< Render target MSAAx2 mode.
+#define BGFX_TEXTURE_RT_MSAA_X4 UINT32_C(0x00003000) //!< Render target MSAAx4 mode.
+#define BGFX_TEXTURE_RT_MSAA_X8 UINT32_C(0x00004000) //!< Render target MSAAx8 mode.
+#define BGFX_TEXTURE_RT_MSAA_X16 UINT32_C(0x00005000) //!< Render target MSAAx16 mode.
#define BGFX_TEXTURE_RT_MSAA_SHIFT 12 //!<
#define BGFX_TEXTURE_RT_MSAA_MASK UINT32_C(0x00007000) //!<
-#define BGFX_TEXTURE_RT_WRITE_ONLY UINT32_C(0x00008000) //!<
+#define BGFX_TEXTURE_RT_WRITE_ONLY UINT32_C(0x00008000) //!< Render target will be used for writing only.
#define BGFX_TEXTURE_RT_MASK UINT32_C(0x0000f000) //!<
-#define BGFX_TEXTURE_COMPARE_LESS UINT32_C(0x00010000) //!<
-#define BGFX_TEXTURE_COMPARE_LEQUAL UINT32_C(0x00020000) //!<
-#define BGFX_TEXTURE_COMPARE_EQUAL UINT32_C(0x00030000) //!<
-#define BGFX_TEXTURE_COMPARE_GEQUAL UINT32_C(0x00040000) //!<
-#define BGFX_TEXTURE_COMPARE_GREATER UINT32_C(0x00050000) //!<
-#define BGFX_TEXTURE_COMPARE_NOTEQUAL UINT32_C(0x00060000) //!<
-#define BGFX_TEXTURE_COMPARE_NEVER UINT32_C(0x00070000) //!<
-#define BGFX_TEXTURE_COMPARE_ALWAYS UINT32_C(0x00080000) //!<
+#define BGFX_TEXTURE_COMPARE_LESS UINT32_C(0x00010000) //!< Compare when sampling depth texture: less.
+#define BGFX_TEXTURE_COMPARE_LEQUAL UINT32_C(0x00020000) //!< Compare when sampling depth texture: less or equal.
+#define BGFX_TEXTURE_COMPARE_EQUAL UINT32_C(0x00030000) //!< Compare when sampling depth texture: equal.
+#define BGFX_TEXTURE_COMPARE_GEQUAL UINT32_C(0x00040000) //!< Compare when sampling depth texture: greater or equal.
+#define BGFX_TEXTURE_COMPARE_GREATER UINT32_C(0x00050000) //!< Compare when sampling depth texture: greater.
+#define BGFX_TEXTURE_COMPARE_NOTEQUAL UINT32_C(0x00060000) //!< Compare when sampling depth texture: not equal.
+#define BGFX_TEXTURE_COMPARE_NEVER UINT32_C(0x00070000) //!< Compare when sampling depth texture: never.
+#define BGFX_TEXTURE_COMPARE_ALWAYS UINT32_C(0x00080000) //!< Compare when sampling depth texture: always.
#define BGFX_TEXTURE_COMPARE_SHIFT 16 //!<
#define BGFX_TEXTURE_COMPARE_MASK UINT32_C(0x000f0000) //!<
-#define BGFX_TEXTURE_COMPUTE_WRITE UINT32_C(0x00100000) //!<
-#define BGFX_TEXTURE_SRGB UINT32_C(0x00200000) //!<
-#define BGFX_TEXTURE_BLIT_DST UINT32_C(0x00400000) //!<
-#define BGFX_TEXTURE_READ_BACK UINT32_C(0x00800000) //!<
+#define BGFX_TEXTURE_COMPUTE_WRITE UINT32_C(0x00100000) //!< Texture will be used for compute write.
+#define BGFX_TEXTURE_SRGB UINT32_C(0x00200000) //!< Sample texture as sRGB.
+#define BGFX_TEXTURE_BLIT_DST UINT32_C(0x00400000) //!< Texture will be used as blit destination.
+#define BGFX_TEXTURE_READ_BACK UINT32_C(0x00800000) //!< Texture will be used for read back from GPU.
#define BGFX_TEXTURE_BORDER_COLOR_SHIFT 24 //!<
#define BGFX_TEXTURE_BORDER_COLOR_MASK UINT32_C(0x0f000000) //!<
#define BGFX_TEXTURE_RESERVED_SHIFT 28 //!<
@@ -328,13 +378,13 @@
#define BGFX_TEXTURE_BORDER_COLOR(_index) ( (_index << BGFX_TEXTURE_BORDER_COLOR_SHIFT) & BGFX_TEXTURE_BORDER_COLOR_MASK)
#define BGFX_TEXTURE_SAMPLER_BITS_MASK (0 \
- | BGFX_TEXTURE_U_MASK \
- | BGFX_TEXTURE_V_MASK \
- | BGFX_TEXTURE_W_MASK \
- | BGFX_TEXTURE_MIN_MASK \
- | BGFX_TEXTURE_MAG_MASK \
- | BGFX_TEXTURE_MIP_MASK \
- | BGFX_TEXTURE_COMPARE_MASK \
+ | BGFX_TEXTURE_U_MASK \
+ | BGFX_TEXTURE_V_MASK \
+ | BGFX_TEXTURE_W_MASK \
+ | BGFX_TEXTURE_MIN_MASK \
+ | BGFX_TEXTURE_MAG_MASK \
+ | BGFX_TEXTURE_MIP_MASK \
+ | BGFX_TEXTURE_COMPARE_MASK \
)
///
diff --git a/3rdparty/bgfx/include/bgfx/embedded_shader.h b/3rdparty/bgfx/include/bgfx/embedded_shader.h
index 1675fde7499..6bffbf58c64 100644
--- a/3rdparty/bgfx/include/bgfx/embedded_shader.h
+++ b/3rdparty/bgfx/include/bgfx/embedded_shader.h
@@ -6,7 +6,7 @@
#ifndef BGFX_EMBEDDED_SHADER_H_HEADER_GUARD
#define BGFX_EMBEDDED_SHADER_H_HEADER_GUARD
-#include <bx/platform.h>
+#include <bx/macros.h>
#include "bgfx.h"
#define BGFX_EMBEDDED_SHADER_DXBC(...)
@@ -19,7 +19,6 @@
#define BGFX_PLATFORM_SUPPORTS_DX9BC (0 \
|| BX_PLATFORM_WINDOWS \
- || BX_PLATFORM_XBOX360 \
)
#define BGFX_PLATFORM_SUPPORTS_DXBC (0 \
|| BX_PLATFORM_WINDOWS \
@@ -34,7 +33,6 @@
|| BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_LINUX \
- || BX_PLATFORM_NACL \
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_QNX \
|| BX_PLATFORM_RPI \
@@ -75,22 +73,22 @@
#if BGFX_PLATFORM_SUPPORTS_ESSL
# undef BGFX_EMBEDDED_SHADER_ESSL
# define BGFX_EMBEDDED_SHADER_ESSL(_renderer, _name) { _renderer, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) },
-#endif // BGFX_PLATFORM_SUPPORTS_PSSL
+#endif // BGFX_PLATFORM_SUPPORTS_ESSL
#if BGFX_PLATFORM_SUPPORTS_GLSL
# undef BGFX_EMBEDDED_SHADER_GLSL
# define BGFX_EMBEDDED_SHADER_GLSL(_renderer, _name) { _renderer, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) },
-#endif // BGFX_PLATFORM_SUPPORTS_PSSL
+#endif // BGFX_PLATFORM_SUPPORTS_GLSL
-#if 0 // BGFX_PLATFORM_SUPPORTS_SPIRV
+#if BGFX_PLATFORM_SUPPORTS_SPIRV
# undef BGFX_EMBEDDED_SHADER_SPIRV
# define BGFX_EMBEDDED_SHADER_SPIRV(_renderer, _name) { _renderer, BX_CONCATENATE(_name, _spv), sizeof(BX_CONCATENATE(_name, _spv) ) },
-#endif // BGFX_PLATFORM_SUPPORTS_PSSL
+#endif // BGFX_PLATFORM_SUPPORTS_SPIRV
#if BGFX_PLATFORM_SUPPORTS_METAL
# undef BGFX_EMBEDDED_SHADER_METAL
# define BGFX_EMBEDDED_SHADER_METAL(_renderer, _name) { _renderer, BX_CONCATENATE(_name, _mtl), sizeof(BX_CONCATENATE(_name, _mtl) ) },
-#endif // BGFX_PLATFORM_SUPPORTS_PSSL
+#endif // BGFX_PLATFORM_SUPPORTS_METAL
#define BGFX_EMBEDDED_SHADER(_name) \
{ \
@@ -104,7 +102,7 @@
BGFX_EMBEDDED_SHADER_ESSL (bgfx::RendererType::OpenGLES, _name) \
BGFX_EMBEDDED_SHADER_GLSL (bgfx::RendererType::OpenGL, _name) \
BGFX_EMBEDDED_SHADER_SPIRV(bgfx::RendererType::Vulkan, _name) \
- { bgfx::RendererType::Noop, (const uint8_t*)"VSH\x4\x0\x0\x0\x0\x0\x0", 10 }, \
+ { bgfx::RendererType::Noop, (const uint8_t*)"VSH\x5\x0\x0\x0\x0\x0\x0", 10 }, \
{ bgfx::RendererType::Count, NULL, 0 } \
} \
}
diff --git a/3rdparty/bgfx/include/bgfx/platform.h b/3rdparty/bgfx/include/bgfx/platform.h
index 1c9b3c754f0..7e89f2fa78c 100644
--- a/3rdparty/bgfx/include/bgfx/platform.h
+++ b/3rdparty/bgfx/include/bgfx/platform.h
@@ -11,7 +11,7 @@
// necessary to use this header in conjunction with creating windows.
#include <bx/platform.h>
-#include <bgfx/bgfx.h>
+#include "bgfx.h"
namespace bgfx
{
@@ -34,12 +34,19 @@ namespace bgfx
/// Render frame.
///
+ /// @param _msecs Timeout in milliseconds.
+ ///
/// @returns Current renderer state. See: `bgfx::RenderFrame`.
///
+ /// @attention `bgfx::renderFrame` is blocking call. It waits for
+ /// `bgfx::frame` to be called from API thread to process frame.
+ /// If timeout value is passed call will timeout and return even
+ /// if `bgfx::frame` is not called.
+ ///
/// @warning This call should be only used on platforms that don't
/// allow creating separate rendering thread. If it is called before
/// to bgfx::init, render thread won't be created by bgfx::init call.
- RenderFrame::Enum renderFrame();
+ RenderFrame::Enum renderFrame(int32_t _msecs = -1);
/// Platform data.
///
@@ -131,19 +138,4 @@ namespace bgfx
} // namespace bgfx
-#if BX_PLATFORM_NACL
-# include <ppapi/c/ppb_graphics_3d.h>
-# include <ppapi/c/ppb_instance.h>
-
-namespace bgfx
-{
- typedef void (*PostSwapBuffersFn)(uint32_t _width, uint32_t _height);
-
- ///
- bool naclSetInterfaces(::PP_Instance, const ::PPB_Instance*, const ::PPB_Graphics3D*, PostSwapBuffersFn);
-
-} // namespace bgfx
-
-#endif // BX_PLATFORM_
-
#endif // BGFX_PLATFORM_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/makefile b/3rdparty/bgfx/makefile
index d755a10f930..64fa680e1b0 100644
--- a/3rdparty/bgfx/makefile
+++ b/3rdparty/bgfx/makefile
@@ -39,27 +39,24 @@ clean: ## Clean all intermediate files.
@mkdir .build
projgen: ## Generate project files for all configurations.
- $(GENIE) --with-tools --with-examples --with-shared-lib vs2012
- $(GENIE) --with-tools --with-examples --with-shared-lib vs2013
- $(GENIE) --with-tools --with-examples --with-shared-lib vs2015
- $(GENIE) --with-tools --with-examples --with-shared-lib vs2017
- $(GENIE) --with-tools --with-examples --with-shared-lib --gcc=mingw-gcc gmake
- $(GENIE) --with-tools --with-examples --with-shared-lib --gcc=linux-gcc gmake
- $(GENIE) --with-tools --with-examples --with-shared-lib --gcc=osx gmake
- $(GENIE) --with-tools --with-examples --with-shared-lib --xcode=osx xcode4
- $(GENIE) --with-tools --with-examples --with-shared-lib --xcode=ios xcode4
- $(GENIE) --with-examples --with-shared-lib --gcc=freebsd gmake
- $(GENIE) --with-examples --gcc=android-arm gmake
- $(GENIE) --with-examples --gcc=android-mips gmake
- $(GENIE) --with-examples --gcc=android-x86 gmake
- $(GENIE) --with-examples --gcc=asmjs gmake
- $(GENIE) --with-examples --gcc=ios-arm gmake
- $(GENIE) --with-examples --gcc=ios-arm64 gmake
- $(GENIE) --with-examples --gcc=ios-simulator gmake
- $(GENIE) --with-examples --gcc=nacl gmake
- $(GENIE) --with-examples --gcc=nacl-arm gmake
- $(GENIE) --with-examples --gcc=pnacl gmake
- $(GENIE) --with-examples --gcc=rpi gmake
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib vs2012
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib vs2013
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib vs2015
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib vs2017
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib --gcc=mingw-gcc gmake
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib --gcc=linux-gcc gmake
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib --gcc=osx gmake
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib --xcode=osx xcode4
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib --xcode=ios xcode4
+ $(GENIE) --with-combined-examples --with-shared-lib --gcc=freebsd gmake
+ $(GENIE) --with-combined-examples --gcc=android-arm gmake
+ $(GENIE) --with-combined-examples --gcc=android-mips gmake
+ $(GENIE) --with-combined-examples --gcc=android-x86 gmake
+ $(GENIE) --with-combined-examples --gcc=asmjs gmake
+ $(GENIE) --with-combined-examples --gcc=ios-arm gmake
+ $(GENIE) --with-combined-examples --gcc=ios-arm64 gmake
+ $(GENIE) --with-combined-examples --gcc=ios-simulator gmake
+ $(GENIE) --with-combined-examples --gcc=rpi gmake
.build/projects/gmake-android-arm:
$(GENIE) --gcc=android-arm gmake
@@ -94,7 +91,7 @@ asmjs-release: .build/projects/gmake-asmjs ## Build - Emscripten Release
asmjs: asmjs-debug asmjs-release ## Build - Emscripten Debug and Release
.build/projects/gmake-linux:
- $(GENIE) --with-tools --with-examples --with-shared-lib --gcc=linux-gcc gmake
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib --gcc=linux-gcc gmake
linux-debug32: .build/projects/gmake-linux ## Build - Linux x86 Debug
$(MAKE) -R -C .build/projects/gmake-linux config=debug32
linux-release32: .build/projects/gmake-linux ## Build - Linux x86 Release
@@ -106,7 +103,7 @@ linux-release64: .build/projects/gmake-linux ## Build - Linux x64 Release
linux: linux-debug32 linux-release32 linux-debug64 linux-release64 ## Build - Linux x86/x64 Debug and Release
.build/projects/gmake-freebsd:
- $(GENIE) --with-tools --with-examples --with-shared-lib --gcc=freebsd gmake
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib --gcc=freebsd gmake
freebsd-debug32: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Debug
$(MAKE) -R -C .build/projects/gmake-freebsd config=debug32
freebsd-release32: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Release
@@ -118,7 +115,7 @@ freebsd-release64: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Release
freebsd: freebsd-debug32 freebsd-release32 freebsd-debug64 freebsd-release64 ## Build - FreeBSD x86/x64 Debug and Release
.build/projects/gmake-mingw-gcc:
- $(GENIE) --with-tools --with-examples --with-shared-lib --gcc=mingw-gcc gmake
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib --gcc=mingw-gcc gmake
mingw-gcc-debug32: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x86 Debug
$(MAKE) -R -C .build/projects/gmake-mingw-gcc config=debug32
mingw-gcc-release32: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x86 Release
@@ -142,7 +139,7 @@ mingw-clang-release64: .build/projects/gmake-mingw-clang ## Build - MinGW Clang
mingw-clang: mingw-clang-debug32 mingw-clang-release32 mingw-clang-debug64 mingw-clang-release64 ## Build - MinGW Clang x86/x64 Debug and Release
.build/projects/vs2012:
- $(GENIE) --with-tools --with-examples --with-shared-lib vs2012
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib vs2012
vs2012-debug32: .build/projects/vs2012 ## Build - VS2012 x86 Debug
devenv .build/projects/vs2012/bgfx.sln /Build "Debug|Win32"
vs2012-release32: .build/projects/vs2012 ## Build - VS2012 x86 Release
@@ -154,7 +151,7 @@ vs2012-release64: .build/projects/vs2012 ## Build - VS2012 x64 Release
vs2012: vs2012-debug32 vs2012-release32 vs2012-debug64 vs2012-release64 ## Build - VS2012 x86/x64 Debug and Release
.build/projects/vs2013:
- $(GENIE) --with-tools --with-examples --with-shared-lib vs2013
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib vs2013
vs2013-debug32: .build/projects/vs2013 ## Build - VS2013 x86 Debug
devenv .build/projects/vs2013/bgfx.sln /Build "Debug|Win32"
vs2013-release32: .build/projects/vs2013 ## Build - VS2013 x86 Release
@@ -166,7 +163,7 @@ vs2013-release64: .build/projects/vs2013 ## Build - VS2013 x64 Release
vs2013: vs2013-debug32 vs2013-release32 vs2013-debug64 vs2013-release64 ## Build - VS2013 x86/x64 Debug and Release
.build/projects/vs2015:
- $(GENIE) --with-tools --with-examples --with-shared-lib vs2015
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib vs2015
vs2015-debug32: .build/projects/vs2015 ## Build - VS2015 x86 Debug
devenv .build/projects/vs2015/bgfx.sln /Build "Debug|Win32"
vs2015-release32: .build/projects/vs2015 ## Build - VS2015 x86 Release
@@ -178,7 +175,7 @@ vs2015-release64: .build/projects/vs2015 ## Build - VS2015 x64 Release
vs2015: vs2015-debug32 vs2015-release32 vs2015-debug64 vs2015-release64 ## Build - VS2015 x86/x64 Debug and Release
.build/projects/vs2017:
- $(GENIE) --with-tools --with-examples --with-shared-lib vs2017
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib vs2017
vs2017-debug32: .build/projects/vs2017 ## Build - vs2017 x86 Debug
devenv .build/projects/vs2017/bgfx.sln /Build "Debug|Win32"
vs2017-release32: .build/projects/vs2017 ## Build - vs2017 x86 Release
@@ -189,36 +186,8 @@ vs2017-release64: .build/projects/vs2017 ## Build - vs2017 x64 Release
devenv .build/projects/vs2017/bgfx.sln /Build "Release|x64"
vs2017: vs2017-debug32 vs2017-release32 vs2017-debug64 vs2017-release64 ## Build - vs2017 x86/x64 Debug and Release
-.build/projects/gmake-nacl:
- $(GENIE) --gcc=nacl gmake
-nacl-debug32: .build/projects/gmake-nacl ## Build - Native Client x86 Debug
- $(MAKE) -R -C .build/projects/gmake-nacl config=debug32
-nacl-release32: .build/projects/gmake-nacl ## Build - Native Client x86 Release
- $(MAKE) -R -C .build/projects/gmake-nacl config=release32
-nacl-debug64: .build/projects/gmake-nacl ## Build - Native Client x64 Debug
- $(MAKE) -R -C .build/projects/gmake-nacl config=debug64
-nacl-release64: .build/projects/gmake-nacl ## Build - Native Client x64 Release
- $(MAKE) -R -C .build/projects/gmake-nacl config=release64
-nacl: nacl-debug32 nacl-release32 nacl-debug64 nacl-release64 ## Build - Native Client x86/x64 Debug and Release
-
-.build/projects/gmake-nacl-arm:
- $(GENIE) --gcc=nacl-arm gmake
-nacl-arm-debug: .build/projects/gmake-nacl-arm ## Build - Native Client ARM Debug
- $(MAKE) -R -C .build/projects/gmake-nacl-arm config=debug
-nacl-arm-release: .build/projects/gmake-nacl-arm ## Build - Native Client ARM Release
- $(MAKE) -R -C .build/projects/gmake-nacl-arm config=release
-nacl-arm: nacl-arm-debug32 nacl-arm-release32 ## Build - Native Client ARM Debug and Release
-
-.build/projects/gmake-pnacl:
- $(GENIE) --gcc=pnacl gmake
-pnacl-debug: .build/projects/gmake-pnacl ## Build - Portable Native Client Debug
- $(MAKE) -R -C .build/projects/gmake-pnacl config=debug
-pnacl-release: .build/projects/gmake-pnacl ## Build - Portable Native Client Release
- $(MAKE) -R -C .build/projects/gmake-pnacl config=release
-pnacl: pnacl-debug pnacl-release ## Build - Portable Native Client Debug and Release
-
.build/projects/gmake-osx:
- $(GENIE) --with-tools --with-examples --with-shared-lib --gcc=osx gmake
+ $(GENIE) --with-tools --with-combined-examples --with-shared-lib --gcc=osx gmake
osx-debug32: .build/projects/gmake-osx ## Build - OSX x86 Debug
$(MAKE) -C .build/projects/gmake-osx config=debug32
osx-release32: .build/projects/gmake-osx ## Build - OSX x86 Release
diff --git a/3rdparty/bgfx/scripts/bgfx.lua b/3rdparty/bgfx/scripts/bgfx.lua
index f95e99f6d78..adccbf026d2 100644
--- a/3rdparty/bgfx/scripts/bgfx.lua
+++ b/3rdparty/bgfx/scripts/bgfx.lua
@@ -36,9 +36,13 @@ function overridefiles(_srcPath, _dstPath, _files)
end
function bgfxProject(_name, _kind, _defines)
-
project ("bgfx" .. _name)
uuid (os.uuid("bgfx" .. _name))
+ bgfxProjectBase(_kind, _defines)
+ copyLib()
+end
+
+function bgfxProjectBase(_kind, _defines)
kind (_kind)
if _kind == "SharedLib" then
@@ -47,6 +51,7 @@ function bgfxProject(_name, _kind, _defines)
}
links {
+ "bimg",
"bx",
}
@@ -73,6 +78,7 @@ function bgfxProject(_name, _kind, _defines)
path.join(BGFX_DIR, "3rdparty"),
path.join(BGFX_DIR, "3rdparty/dxsdk/include"),
path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
}
defines {
@@ -141,10 +147,11 @@ function bgfxProject(_name, _kind, _defines)
"-weak_framework MetalKit",
}
- configuration { "not nacl", "not linux-steamlink" }
+ configuration { "not nacl", "not linux-steamlink", "not NX32", "not NX64" }
includedirs {
--nacl has GLES2 headers modified...
--steamlink has EGL headers modified...
+ --NX has EGL headers modified...
path.join(BGFX_DIR, "3rdparty/khronos"),
}
@@ -220,6 +227,4 @@ function bgfxProject(_name, _kind, _defines)
end
configuration {}
-
- copyLib()
end
diff --git a/3rdparty/bgfx/scripts/build.ninja b/3rdparty/bgfx/scripts/build.ninja
index 54b099e0b6f..f36701ea387 100644
--- a/3rdparty/bgfx/scripts/build.ninja
+++ b/3rdparty/bgfx/scripts/build.ninja
@@ -29,6 +29,15 @@ rule texturec_etc1
rule texturec_etc2
command = texturec -f $in -o $out -t etc2 -m
+rule texturec_diffuse
+ command = texturec -f $in -o $out -t bc2 -m
+
+rule texturec_normal
+ command = texturec -f $in -o $out -t bc5 -m -n
+
+rule texturec_height
+ command = texturec -f $in -o $out -t r8
+
pwd = ../examples/assets/meshes
subninja ../examples/assets/meshes/meshes.ninja
diff --git a/3rdparty/bgfx/scripts/example-common.lua b/3rdparty/bgfx/scripts/example-common.lua
index f87849f3437..78fe16ed1c3 100644
--- a/3rdparty/bgfx/scripts/example-common.lua
+++ b/3rdparty/bgfx/scripts/example-common.lua
@@ -3,12 +3,26 @@
-- License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
--
+project ("example-glue")
+ kind "StaticLib"
+
+ includedirs {
+ path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
+ path.join(BGFX_DIR, "include"),
+ path.join(BGFX_DIR, "3rdparty"),
+ }
+
+ files {
+ path.join(BGFX_DIR, "examples/common/example-glue.cpp"),
+ }
+
project ("example-common")
- uuid ("21cc0e26-bf62-11e2-a01e-0291bd4c8125")
kind "StaticLib"
includedirs {
- path.join(BX_DIR, "include"),
+ path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
path.join(BGFX_DIR, "include"),
path.join(BGFX_DIR, "3rdparty"),
}
@@ -23,6 +37,10 @@ project ("example-common")
path.join(BGFX_DIR, "examples/common/**.h"),
}
+ removefiles {
+ path.join(BGFX_DIR, "examples/common/example-glue.cpp"),
+ }
+
if _OPTIONS["with-scintilla"] then
defines {
"SCI_NAMESPACE",
diff --git a/3rdparty/bgfx/scripts/genie.lua b/3rdparty/bgfx/scripts/genie.lua
index a01d7fe068a..cacec034e8a 100644
--- a/3rdparty/bgfx/scripts/genie.lua
+++ b/3rdparty/bgfx/scripts/genie.lua
@@ -44,6 +44,11 @@ newoption {
}
newoption {
+ trigger = "with-combined-examples",
+ description = "Enable building examples (combined as single executable).",
+}
+
+newoption {
trigger = "with-examples",
description = "Enable building examples.",
}
@@ -73,6 +78,7 @@ solution "bgfx"
MODULE_DIR = path.getabsolute("../")
BGFX_DIR = path.getabsolute("..")
BX_DIR = os.getenv("BX_DIR")
+BIMG_DIR = os.getenv("BIMG_DIR")
local BGFX_BUILD_DIR = path.join(BGFX_DIR, ".build")
local BGFX_THIRD_PARTY_DIR = path.join(BGFX_DIR, "3rdparty")
@@ -80,8 +86,20 @@ if not BX_DIR then
BX_DIR = path.getabsolute(path.join(BGFX_DIR, "../bx"))
end
-if not os.isdir(BX_DIR) then
- print("bx not found at " .. BX_DIR)
+if not BIMG_DIR then
+ BIMG_DIR = path.getabsolute(path.join(BGFX_DIR, "../bimg"))
+end
+
+if not os.isdir(BX_DIR) or not os.isdir(BIMG_DIR) then
+
+ if not os.isdir(BX_DIR) then
+ print("bx not found at " .. BX_DIR)
+ end
+
+ if not os.isdir(BIMG_DIR) then
+ print("bimg not found at " .. BIMG_DIR)
+ end
+
print("For more info see: https://bkaradzic.github.io/bgfx/build.html")
os.exit()
end
@@ -105,45 +123,32 @@ end
if _OPTIONS["with-profiler"] then
defines {
"ENTRY_CONFIG_PROFILER=1",
- "BGFX_CONFIG_PROFILER_REMOTERY=1",
- "_WINSOCKAPI_"
+ "BGFX_CONFIG_PROFILER=1",
}
end
-function exampleProject(_name)
-
- project ("example-" .. _name)
- uuid (os.uuid("example-" .. _name))
- kind "WindowedApp"
-
- configuration {}
+function exampleProjectDefaults()
debugdir (path.join(BGFX_DIR, "examples/runtime"))
includedirs {
path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
path.join(BGFX_DIR, "include"),
path.join(BGFX_DIR, "3rdparty"),
path.join(BGFX_DIR, "examples/common"),
}
- files {
- path.join(BGFX_DIR, "examples", _name, "**.c"),
- path.join(BGFX_DIR, "examples", _name, "**.cpp"),
- path.join(BGFX_DIR, "examples", _name, "**.h"),
- }
-
- removefiles {
- path.join(BGFX_DIR, "examples", _name, "**.bin.h"),
- }
-
flags {
"FatalWarnings",
}
links {
"example-common",
+ "example-glue",
"bgfx",
+ "bimg_decode",
+ "bimg",
"bx",
}
@@ -308,8 +313,8 @@ function exampleProject(_name)
configuration { "rpi" }
links {
"X11",
- "GLESv2",
- "EGL",
+ "brcmGLESv2",
+ "brcmEGL",
"bcm_host",
"vcos",
"vchiq_arm",
@@ -347,6 +352,7 @@ function exampleProject(_name)
path.join(BGFX_DIR, "examples/runtime/tvOS-Info.plist"),
}
+
configuration { "qnx*" }
targetextension ""
links {
@@ -359,56 +365,127 @@ function exampleProject(_name)
strip()
end
+function exampleProject(_combined, ...)
+
+ if _combined then
+
+ project ("examples")
+ uuid (os.uuid("examples"))
+ kind "WindowedApp"
+
+ for _, name in ipairs({...}) do
+
+ files {
+ path.join(BGFX_DIR, "examples", name, "**.c"),
+ path.join(BGFX_DIR, "examples", name, "**.cpp"),
+ path.join(BGFX_DIR, "examples", name, "**.h"),
+ }
+
+ removefiles {
+ path.join(BGFX_DIR, "examples", name, "**.bin.h"),
+ }
+
+ end
+
+ files {
+ path.join(BGFX_DIR, "examples/25-c99/helloworld.c"), -- hack for _main_
+ }
+
+ exampleProjectDefaults()
+
+ else
+
+ for _, name in ipairs({...}) do
+ project ("example-" .. name)
+ uuid (os.uuid("example-" .. name))
+ kind "WindowedApp"
+
+ files {
+ path.join(BGFX_DIR, "examples", name, "**.c"),
+ path.join(BGFX_DIR, "examples", name, "**.cpp"),
+ path.join(BGFX_DIR, "examples", name, "**.h"),
+ }
+
+ removefiles {
+ path.join(BGFX_DIR, "examples", name, "**.bin.h"),
+ }
+
+ defines {
+ "ENTRY_CONFIG_IMPLEMENT_MAIN=1",
+ }
+
+ exampleProjectDefaults()
+ end
+ end
+
+end
+
dofile "bgfx.lua"
group "libs"
bgfxProject("", "StaticLib", {})
-dofile(path.join(BX_DIR, "scripts/bx.lua"))
+dofile(path.join(BX_DIR, "scripts/bx.lua"))
+dofile(path.join(BIMG_DIR, "scripts/bimg.lua"))
+dofile(path.join(BIMG_DIR, "scripts/bimg_decode.lua"))
+
+if _OPTIONS["with-tools"] then
+ dofile(path.join(BIMG_DIR, "scripts/bimg_encode.lua"))
+end
-if _OPTIONS["with-examples"] or _OPTIONS["with-tools"] then
+if _OPTIONS["with-examples"]
+or _OPTIONS["with-combined-examples"]
+or _OPTIONS["with-tools"] then
group "examples"
dofile "example-common.lua"
end
-if _OPTIONS["with-examples"] then
+if _OPTIONS["with-examples"]
+or _OPTIONS["with-combined-examples"] then
group "examples"
- exampleProject("00-helloworld")
- exampleProject("01-cubes")
- exampleProject("02-metaballs")
- exampleProject("03-raymarch")
- exampleProject("04-mesh")
- exampleProject("05-instancing")
- exampleProject("06-bump")
- exampleProject("07-callback")
- exampleProject("08-update")
- exampleProject("09-hdr")
- exampleProject("10-font")
- exampleProject("11-fontsdf")
- exampleProject("12-lod")
- exampleProject("13-stencil")
- exampleProject("14-shadowvolumes")
- exampleProject("15-shadowmaps-simple")
- exampleProject("16-shadowmaps")
- exampleProject("17-drawstress")
- exampleProject("18-ibl")
- exampleProject("19-oit")
- exampleProject("20-nanovg")
- exampleProject("21-deferred")
- exampleProject("22-windows")
- exampleProject("23-vectordisplay")
- exampleProject("24-nbody")
- exampleProject("26-occlusion")
- exampleProject("27-terrain")
- exampleProject("28-wireframe")
- exampleProject("29-debugdraw")
- exampleProject("30-picking")
- exampleProject("31-rsm")
- exampleProject("32-particles")
+
+ exampleProject(_OPTIONS["with-combined-examples"]
+ , "00-helloworld"
+ , "01-cubes"
+ , "02-metaballs"
+ , "03-raymarch"
+ , "04-mesh"
+ , "05-instancing"
+ , "06-bump"
+ , "07-callback"
+ , "08-update"
+ , "09-hdr"
+ , "10-font"
+ , "11-fontsdf"
+ , "12-lod"
+ , "13-stencil"
+ , "14-shadowvolumes"
+ , "15-shadowmaps-simple"
+ , "16-shadowmaps"
+ , "17-drawstress"
+ , "18-ibl"
+ , "19-oit"
+ , "20-nanovg"
+ , "21-deferred"
+ , "22-windows"
+ , "23-vectordisplay"
+ , "24-nbody"
+ , "26-occlusion"
+ , "27-terrain"
+ , "28-wireframe"
+ , "29-debugdraw"
+ , "30-picking"
+ , "31-rsm"
+ , "32-particles"
+ , "33-pom"
+ , "34-mvs"
+ , "35-dynamic"
+ , "36-sky"
+ )
-- C99 source doesn't compile under WinRT settings
if not premake.vstudio.iswinrt() then
- exampleProject("25-c99")
+ exampleProject(false, "25-c99")
end
end
diff --git a/3rdparty/bgfx/scripts/geometryc.lua b/3rdparty/bgfx/scripts/geometryc.lua
index 902b310caf8..e4fbd909ee2 100644
--- a/3rdparty/bgfx/scripts/geometryc.lua
+++ b/3rdparty/bgfx/scripts/geometryc.lua
@@ -4,7 +4,7 @@
--
project "geometryc"
- uuid "8794dc3a-2d57-11e2-ba18-368d09e48fda"
+ uuid (os.uuid("geometryc"))
kind "ConsoleApp"
includedirs {
@@ -31,12 +31,20 @@ project "geometryc"
configuration { "mingw-*" }
targetextension ".exe"
+ links {
+ "psapi",
+ }
configuration { "osx" }
links {
"Cocoa.framework",
}
+ configuration { "vs20*" }
+ links {
+ "psapi",
+ }
+
configuration {}
strip()
diff --git a/3rdparty/bgfx/scripts/shader.mk b/3rdparty/bgfx/scripts/shader.mk
index 4a695d070c0..86cbf79aaa6 100644
--- a/3rdparty/bgfx/scripts/shader.mk
+++ b/3rdparty/bgfx/scripts/shader.mk
@@ -116,19 +116,9 @@ CS_BIN = $(addprefix $(BUILD_INTERMEDIATE_DIR)/, $(addsuffix .bin, $(basename $(
BIN = $(VS_BIN) $(FS_BIN)
ASM = $(VS_ASM) $(FS_ASM)
-ifeq ($(TARGET), 1)
-BIN += $(CS_BIN)
-ASM += $(CS_ASM)
-else
-ifeq ($(TARGET), 3)
+ifeq ($(TARGET), $(filter $(TARGET),1 3 4 6))
BIN += $(CS_BIN)
ASM += $(CS_ASM)
-else
-ifeq ($(TARGET), 4)
-BIN += $(CS_BIN)
-ASM += $(CS_ASM)
-endif
-endif
endif
$(BUILD_INTERMEDIATE_DIR)/vs_%.bin : $(SHADERS_DIR)vs_%.sc
diff --git a/3rdparty/bgfx/scripts/shaderc.lua b/3rdparty/bgfx/scripts/shaderc.lua
index 300c4c6a484..d61ace02c4a 100644
--- a/3rdparty/bgfx/scripts/shaderc.lua
+++ b/3rdparty/bgfx/scripts/shaderc.lua
@@ -213,13 +213,19 @@ project "fcpp"
"/wd4706", -- warning C4706: assignment within conditional expression
}
+ configuration { "not vs*" }
+ buildoptions {
+ "-Wno-implicit-fallthrough",
+ }
+
configuration {}
project "shaderc"
kind "ConsoleApp"
includedirs {
- path.join(BX_DIR, "include"),
+ path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
path.join(BGFX_DIR, "include"),
path.join(BGFX_DIR, "3rdparty/dxsdk/include"),
diff --git a/3rdparty/bgfx/scripts/texturec.lua b/3rdparty/bgfx/scripts/texturec.lua
index 07184ed7d1b..e229293e3e2 100644
--- a/3rdparty/bgfx/scripts/texturec.lua
+++ b/3rdparty/bgfx/scripts/texturec.lua
@@ -4,52 +4,39 @@
--
project "texturec"
- uuid "838801ee-7bc3-11e1-9f19-eae7d36e7d26"
+ uuid (os.uuid("texturec"))
kind "ConsoleApp"
includedirs {
- path.join(BX_DIR, "include"),
+ path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
path.join(BGFX_DIR, "include"),
- path.join(BGFX_DIR, "src"),
- path.join(BGFX_DIR, "3rdparty"),
- path.join(BGFX_DIR, "3rdparty/nvtt"),
- path.join(BGFX_DIR, "3rdparty/iqa/include"),
+ path.join(BIMG_DIR, "3rdparty/iqa/include"),
}
files {
- path.join(BGFX_DIR, "src/image.*"),
- path.join(BGFX_DIR, "3rdparty/libsquish/**.cpp"),
- path.join(BGFX_DIR, "3rdparty/libsquish/**.h"),
- path.join(BGFX_DIR, "3rdparty/edtaa3/**.cpp"),
- path.join(BGFX_DIR, "3rdparty/edtaa3/**.h"),
- path.join(BGFX_DIR, "3rdparty/etc1/**.cpp"),
- path.join(BGFX_DIR, "3rdparty/etc1/**.h"),
- path.join(BGFX_DIR, "3rdparty/etc2/**.cpp"),
- path.join(BGFX_DIR, "3rdparty/etc2/**.hpp"),
- path.join(BGFX_DIR, "3rdparty/nvtt/**.cpp"),
- path.join(BGFX_DIR, "3rdparty/nvtt/**.h"),
- path.join(BGFX_DIR, "3rdparty/pvrtc/**.cpp"),
- path.join(BGFX_DIR, "3rdparty/pvrtc/**.h"),
- path.join(BGFX_DIR, "3rdparty/tinyexr/**.h"),
- path.join(BGFX_DIR, "3rdparty/iqa/include/**.h"),
- path.join(BGFX_DIR, "3rdparty/iqa/source/**.c"),
- path.join(BGFX_DIR, "tools/texturec/**.cpp"),
- path.join(BGFX_DIR, "tools/texturec/**.h"),
+ path.join(BIMG_DIR, "tools/texturec/texturec.cpp"),
}
links {
+ "bimg_decode",
+ "bimg_encode",
+ "bimg",
"bx",
}
configuration { "mingw-*" }
targetextension ".exe"
+ links {
+ "psapi",
+ }
configuration { "osx" }
links {
"Cocoa.framework",
}
- configuration { "vs20* or mingw*" }
+ configuration { "vs20*" }
links {
"psapi",
}
diff --git a/3rdparty/bgfx/scripts/texturev.lua b/3rdparty/bgfx/scripts/texturev.lua
index fe08f59d6d4..4443391a27d 100644
--- a/3rdparty/bgfx/scripts/texturev.lua
+++ b/3rdparty/bgfx/scripts/texturev.lua
@@ -6,6 +6,7 @@ project ("texturev")
includedirs {
path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
path.join(BGFX_DIR, "include"),
path.join(BGFX_DIR, "3rdparty"),
path.join(BGFX_DIR, "examples/common"),
@@ -19,6 +20,8 @@ project ("texturev")
links {
"example-common",
+ "bimg_decode",
+ "bimg",
"bgfx",
"bx",
}
diff --git a/3rdparty/bgfx/src/amalgamated.cpp b/3rdparty/bgfx/src/amalgamated.cpp
index 860f448e87e..3a940d0b176 100644
--- a/3rdparty/bgfx/src/amalgamated.cpp
+++ b/3rdparty/bgfx/src/amalgamated.cpp
@@ -4,15 +4,14 @@
*/
#include "bgfx.cpp"
+#include "debug_renderdoc.cpp"
#include "glcontext_egl.cpp"
#include "glcontext_glx.cpp"
-#include "glcontext_ppapi.cpp"
#include "glcontext_wgl.cpp"
-#include "image.cpp"
#include "hmd.cpp"
#include "hmd_ovr.cpp"
#include "hmd_openvr.cpp"
-#include "debug_renderdoc.cpp"
+#include "nvapi.cpp"
#include "renderer_d3d9.cpp"
#include "renderer_d3d11.cpp"
#include "renderer_d3d12.cpp"
diff --git a/3rdparty/bgfx/src/bgfx.cpp b/3rdparty/bgfx/src/bgfx.cpp
index 5886e842443..64970cb7e32 100644
--- a/3rdparty/bgfx/src/bgfx.cpp
+++ b/3rdparty/bgfx/src/bgfx.cpp
@@ -4,22 +4,10 @@
*/
#include <bx/platform.h>
-#if BX_PLATFORM_WINDOWS
-// BK - Remotery needs WinSock, but on VS2015/Win10 build
-// fails if WinSock2 is included after Windows.h?!
-# include <winsock2.h>
-#endif // BX_PLATFORM_WINDOWS
#include "bgfx_p.h"
#include <bgfx/embedded_shader.h>
-
-#if BGFX_CONFIG_PROFILER_REMOTERY_BUILD_LIB
-# define RMT_USE_D3D11 BGFX_CONFIG_RENDERER_DIRECT3D11
-# define RMT_USE_OPENGL BGFX_CONFIG_RENDERER_OPENGL
-# include <remotery/lib/Remotery.c>
-#endif // BGFX_CONFIG_PROFILER_REMOTERY_BUILD_LIB
-
-#include <bx/crtimpl.h>
+#include <bx/file.h>
#include <bx/mutex.h>
#include "topology.h"
@@ -28,15 +16,15 @@ BX_ERROR_RESULT(BGFX_ERROR_TEXTURE_VALIDATION, BX_MAKEFOURCC('b', 'g', 0, 1) );
namespace bgfx
{
-#define BGFX_MAIN_THREAD_MAGIC UINT32_C(0x78666762)
+#define BGFX_API_THREAD_MAGIC UINT32_C(0x78666762)
#if BGFX_CONFIG_MULTITHREADED
-# define BGFX_CHECK_MAIN_THREAD() \
+# define BGFX_CHECK_API_THREAD() \
BX_CHECK(NULL != s_ctx, "Library is not initialized yet."); \
- BX_CHECK(BGFX_MAIN_THREAD_MAGIC == s_threadIndex, "Must be called from main thread.")
-# define BGFX_CHECK_RENDER_THREAD() BX_CHECK(BGFX_MAIN_THREAD_MAGIC != s_threadIndex, "Must be called from render thread.")
+ BX_CHECK(BGFX_API_THREAD_MAGIC == s_threadIndex, "Must be called from main thread.")
+# define BGFX_CHECK_RENDER_THREAD() BX_CHECK(BGFX_API_THREAD_MAGIC != s_threadIndex, "Must be called from render thread.")
#else
-# define BGFX_CHECK_MAIN_THREAD()
+# define BGFX_CHECK_API_THREAD()
# define BGFX_CHECK_RENDER_THREAD()
#endif // BGFX_CONFIG_MULTITHREADED
@@ -66,7 +54,21 @@ namespace bgfx
{
}
- virtual void traceVargs(const char* _filePath, uint16_t _line, const char* _format, va_list _argList) BX_OVERRIDE
+ virtual void fatal(Fatal::Enum _code, const char* _str) override
+ {
+ if (Fatal::DebugCheck == _code)
+ {
+ bx::debugBreak();
+ }
+ else
+ {
+ BX_TRACE("0x%08x: %s", _code, _str);
+ BX_UNUSED(_code, _str);
+ abort();
+ }
+ }
+
+ virtual void traceVargs(const char* _filePath, uint16_t _line, const char* _format, va_list _argList) override
{
char temp[2048];
char* out = temp;
@@ -85,63 +87,59 @@ namespace bgfx
bx::debugOutput(out);
}
- virtual void fatal(Fatal::Enum _code, const char* _str) BX_OVERRIDE
+ virtual void profilerBegin(const char* /*_name*/, uint32_t /*_abgr*/, const char* /*_filePath*/, uint16_t /*_line*/) override
+ {
+ }
+
+ virtual void profilerBeginLiteral(const char* /*_name*/, uint32_t /*_abgr*/, const char* /*_filePath*/, uint16_t /*_line*/) override
+ {
+ }
+
+ virtual void profilerEnd() override
{
- if (Fatal::DebugCheck == _code)
- {
- bx::debugBreak();
- }
- else
- {
- BX_TRACE("0x%08x: %s", _code, _str);
- BX_UNUSED(_code, _str);
- abort();
- }
}
- virtual uint32_t cacheReadSize(uint64_t /*_id*/) BX_OVERRIDE
+ virtual uint32_t cacheReadSize(uint64_t /*_id*/) override
{
return 0;
}
- virtual bool cacheRead(uint64_t /*_id*/, void* /*_data*/, uint32_t /*_size*/) BX_OVERRIDE
+ virtual bool cacheRead(uint64_t /*_id*/, void* /*_data*/, uint32_t /*_size*/) override
{
return false;
}
- virtual void cacheWrite(uint64_t /*_id*/, const void* /*_data*/, uint32_t /*_size*/) BX_OVERRIDE
+ virtual void cacheWrite(uint64_t /*_id*/, const void* /*_data*/, uint32_t /*_size*/) override
{
}
- virtual void screenShot(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _data, uint32_t _size, bool _yflip) BX_OVERRIDE
+ virtual void screenShot(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _data, uint32_t _size, bool _yflip) override
{
BX_UNUSED(_filePath, _width, _height, _pitch, _data, _size, _yflip);
-#if BX_CONFIG_CRT_FILE_READER_WRITER
- const int32_t len = bx::strnlen(_filePath)+5;
+ const int32_t len = bx::strLen(_filePath)+5;
char* filePath = (char*)alloca(len);
- bx::strlncpy(filePath, len, _filePath);
- bx::strlncat(filePath, len, ".tga");
+ bx::strCopy(filePath, len, _filePath);
+ bx::strCat(filePath, len, ".tga");
- bx::CrtFileWriter writer;
+ bx::FileWriter writer;
if (bx::open(&writer, filePath) )
{
- imageWriteTga(&writer, _width, _height, _pitch, _data, false, _yflip);
+ bimg::imageWriteTga(&writer, _width, _height, _pitch, _data, false, _yflip);
bx::close(&writer);
}
-#endif // BX_CONFIG_CRT_FILE_READER_WRITER
}
- virtual void captureBegin(uint32_t /*_width*/, uint32_t /*_height*/, uint32_t /*_pitch*/, TextureFormat::Enum /*_format*/, bool /*_yflip*/) BX_OVERRIDE
+ virtual void captureBegin(uint32_t /*_width*/, uint32_t /*_height*/, uint32_t /*_pitch*/, TextureFormat::Enum /*_format*/, bool /*_yflip*/) override
{
BX_TRACE("Warning: using capture without callback (a.k.a. pointless).");
}
- virtual void captureEnd() BX_OVERRIDE
+ virtual void captureEnd() override
{
}
- virtual void captureFrame(const void* /*_data*/, uint32_t /*_size*/) BX_OVERRIDE
+ virtual void captureFrame(const void* /*_data*/, uint32_t /*_size*/) override
{
}
};
@@ -150,6 +148,8 @@ namespace bgfx
# define BGFX_CONFIG_MEMORY_TRACKING (BGFX_CONFIG_DEBUG && BX_CONFIG_SUPPORTS_THREADING)
#endif // BGFX_CONFIG_MEMORY_TRACKING
+ const size_t kNaturalAlignment = 8;
+
class AllocatorStub : public bx::AllocatorI
{
public:
@@ -161,13 +161,13 @@ namespace bgfx
{
}
- virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) BX_OVERRIDE
+ virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) override
{
if (0 == _size)
{
if (NULL != _ptr)
{
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ if (kNaturalAlignment >= _align)
{
#if BGFX_CONFIG_MEMORY_TRACKING
{
@@ -189,7 +189,7 @@ namespace bgfx
}
else if (NULL == _ptr)
{
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ if (kNaturalAlignment >= _align)
{
#if BGFX_CONFIG_MEMORY_TRACKING
{
@@ -205,7 +205,7 @@ namespace bgfx
return bx::alignedAlloc(this, _size, _align, _file, _line);
}
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ if (kNaturalAlignment >= _align)
{
#if BGFX_CONFIG_MEMORY_TRACKING
if (NULL == _ptr)
@@ -465,14 +465,20 @@ namespace bgfx
{
for (const EmbeddedShader* es = _es; NULL != es->name; ++es)
{
- if (0 == bx::strncmp(_name, es->name) )
+ if (0 == bx::strCmp(_name, es->name) )
{
for (const EmbeddedShader::Data* esd = es->data; RendererType::Count != esd->type; ++esd)
{
if (_type == esd->type
&& 1 < esd->size)
{
- return createShader(makeRef(esd->data, esd->size) );
+ ShaderHandle handle = createShader(makeRef(esd->data, esd->size) );
+ if (isValid(handle) )
+ {
+ setName(handle, _name);
+ }
+
+ return handle;
}
}
}
@@ -504,14 +510,14 @@ namespace bgfx
static uint8_t parseAttrTo(char*& _ptr, char _to, uint8_t _default)
{
- const char* str = bx::strnchr(_ptr, _to);
+ const char* str = bx::strFind(_ptr, _to);
if (NULL != str
&& 3 > str-_ptr)
{
char tmp[4];
int32_t len = int32_t(str-_ptr);
- bx::strlncpy(tmp, sizeof(tmp), _ptr, len);
+ bx::strCopy(tmp, sizeof(tmp), _ptr, len);
uint8_t attr = uint8_t(atoi(tmp) );
_ptr += len+1;
@@ -529,7 +535,7 @@ namespace bgfx
return _default;
}
- if (0 == bx::strncmp(ptr, "0m", 2) )
+ if (0 == bx::strCmp(ptr, "0m", 2) )
{
_ptr = ptr + 2;
return _default;
@@ -582,7 +588,7 @@ namespace bgfx
void TextVideoMemBlitter::init()
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
m_decl
.begin()
.add(Attrib::Position, 3, AttribType::Float)
@@ -622,14 +628,14 @@ namespace bgfx
void TextVideoMemBlitter::shutdown()
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
if (isValid(m_program) )
{
- destroyProgram(m_program);
+ destroy(m_program);
}
- destroyTexture(m_texture);
+ destroy(m_texture);
s_ctx->destroyTransientVertexBuffer(m_vb);
s_ctx->destroyTransientIndexBuffer(m_ib);
}
@@ -742,7 +748,7 @@ namespace bgfx
void ClearQuad::init()
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
if (RendererType::Noop != g_caps.rendererType)
{
@@ -761,10 +767,10 @@ namespace bgfx
m_program[ii] = createProgram(vsh, fsh);
BX_CHECK(isValid(m_program[ii]), "Failed to create clear quad program.");
- destroyShader(fsh);
+ destroy(fsh);
}
- destroyShader(vsh);
+ destroy(vsh);
m_vb = s_ctx->createTransientVertexBuffer(4*m_decl.m_stride, &m_decl);
}
@@ -772,7 +778,7 @@ namespace bgfx
void ClearQuad::shutdown()
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
if (RendererType::Noop != g_caps.rendererType)
{
@@ -780,8 +786,8 @@ namespace bgfx
{
if (isValid(m_program[ii]) )
{
- destroyProgram(m_program[ii]);
- m_program[ii].idx = invalidHandle;
+ destroy(m_program[ii]);
+ m_program[ii].idx = kInvalidHandle;
}
}
@@ -810,7 +816,7 @@ namespace bgfx
for (uint32_t ii = 0; ii < UniformType::Count; ++ii)
{
if (NULL != s_uniformTypeName[ii]
- && 0 == bx::strncmp(_name, s_uniformTypeName[ii]) )
+ && 0 == bx::strCmp(_name, s_uniformTypeName[ii]) )
{
return UniformType::Enum(ii);
}
@@ -844,7 +850,7 @@ namespace bgfx
{
for (uint32_t ii = 0; ii < PredefinedUniform::Count; ++ii)
{
- if (0 == bx::strncmp(_name, s_predefinedName[ii]) )
+ if (0 == bx::strCmp(_name, s_predefinedName[ii]) )
{
return PredefinedUniform::Enum(ii);
}
@@ -853,41 +859,75 @@ namespace bgfx
return PredefinedUniform::Count;
}
- uint32_t Frame::submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState)
+ void EncoderImpl::submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState)
{
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM)
+ && !_preserveState)
+ {
+ m_uniformSet.clear();
+ }
+
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_OCCLUSION)
+ && isValid(_occlusionQuery) )
+ {
+ BX_CHECK(m_occlusionQuerySet.end() == m_occlusionQuerySet.find(_occlusionQuery.idx)
+ , "OcclusionQuery %d was already used for this frame."
+ , _occlusionQuery.idx
+ );
+ m_occlusionQuerySet.insert(_occlusionQuery.idx);
+ }
+
if (m_discard)
{
discard();
- return m_num;
+ return;
+ }
+
+ if (0 == m_draw.m_numVertices
+ && 0 == m_draw.m_numIndices)
+ {
+ discard();
+ ++m_numDropped;
+ return;
}
- if (BGFX_CONFIG_MAX_DRAW_CALLS-1 <= m_num
- || (0 == m_draw.m_numVertices && 0 == m_draw.m_numIndices) )
+ const uint32_t renderItemIdx = bx::atomicFetchAndAddsat<uint32_t>(&m_frame->m_numRenderItems, 1, BGFX_CONFIG_MAX_DRAW_CALLS);
+ if (BGFX_CONFIG_MAX_DRAW_CALLS-1 <= renderItemIdx)
{
+ discard();
++m_numDropped;
- return m_num;
+ return;
}
- m_uniformEnd = m_uniformBuffer->getPos();
+ ++m_numSubmitted;
+
+ UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+ m_uniformEnd = uniformBuffer->getPos();
- m_key.m_program = invalidHandle == _program.idx
+ m_key.m_program = kInvalidHandle == _program.idx
? 0
: _program.idx
;
- m_key.m_depth = (uint32_t)_depth;
- m_key.m_view = _id;
- m_key.m_seq = s_ctx->m_seq[_id] & s_ctx->m_seqMask[_id];
- s_ctx->m_seq[_id]++;
+ m_key.m_view = _id;
+
+ SortKey::Enum type = SortKey::SortProgram;
+ switch (s_ctx->m_view[_id].m_mode)
+ {
+ case ViewMode::Sequential: m_key.m_seq = s_ctx->getSeqIncr(_id); type = SortKey::SortSequence; break;
+ case ViewMode::DepthAscending: m_key.m_depth = (uint32_t)_depth; type = SortKey::SortDepth; break;
+ case ViewMode::DepthDescending: m_key.m_depth = (uint32_t)-_depth; type = SortKey::SortDepth; break;
+ default: break;
+ }
+
+ uint64_t key = m_key.encodeDraw(type);
- uint64_t key = m_key.encodeDraw();
- m_sortKeys[m_num] = key;
- m_sortValues[m_num] = m_numRenderItems;
- ++m_num;
+ m_frame->m_sortKeys[renderItemIdx] = key;
+ m_frame->m_sortValues[renderItemIdx] = RenderItemCount(renderItemIdx);
- m_draw.m_constBegin = m_uniformBegin;
- m_draw.m_constEnd = m_uniformEnd;
- m_draw.m_stateFlags |= m_stateFlags;
+ m_draw.m_uniformIdx = m_uniformIdx;
+ m_draw.m_uniformBegin = m_uniformBegin;
+ m_draw.m_uniformEnd = m_uniformEnd;
uint32_t numVertices = UINT32_MAX;
for (uint32_t idx = 0, streamMask = m_draw.m_streamMask, ntz = bx::uint32_cnttz(streamMask)
@@ -903,81 +943,85 @@ namespace bgfx
if (isValid(_occlusionQuery) )
{
- BX_CHECK(!isValid(m_draw.m_occlusionQuery), "");
-
m_draw.m_stateFlags |= BGFX_STATE_INTERNAL_OCCLUSION_QUERY;
m_draw.m_occlusionQuery = _occlusionQuery;
}
- m_renderItem[m_numRenderItems].draw = m_draw;
- ++m_numRenderItems;
+ m_frame->m_renderItem[renderItemIdx].draw = m_draw;
+ m_frame->m_renderItemBind[renderItemIdx] = m_bind;
if (!_preserveState)
{
m_draw.clear();
+ m_bind.clear();
m_uniformBegin = m_uniformEnd;
- m_stateFlags = BGFX_STATE_NONE;
}
-
- return m_num;
}
- uint32_t Frame::dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags)
+ void EncoderImpl::dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
{
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
+ {
+ m_uniformSet.clear();
+ }
+
if (m_discard)
{
discard();
- return m_num;
+ return;
}
- if (BGFX_CONFIG_MAX_DRAW_CALLS-1 <= m_num)
+ const uint32_t renderItemIdx = bx::atomicFetchAndAddsat<uint32_t>(&m_frame->m_numRenderItems, 1, BGFX_CONFIG_MAX_DRAW_CALLS);
+ if (BGFX_CONFIG_MAX_DRAW_CALLS-1 <= renderItemIdx)
{
+ discard();
++m_numDropped;
- return m_num;
+ return;
}
- m_uniformEnd = m_uniformBuffer->getPos();
+ ++m_numSubmitted;
+
+ UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+ m_uniformEnd = uniformBuffer->getPos();
- m_compute.m_matrix = m_draw.m_matrix;
- m_compute.m_num = m_draw.m_num;
- m_compute.m_numX = bx::uint16_max(_numX, 1);
- m_compute.m_numY = bx::uint16_max(_numY, 1);
- m_compute.m_numZ = bx::uint16_max(_numZ, 1);
+ m_compute.m_startMatrix = m_draw.m_startMatrix;
+ m_compute.m_numMatrices = m_draw.m_numMatrices;
+ m_compute.m_numX = bx::uint32_max(_numX, 1);
+ m_compute.m_numY = bx::uint32_max(_numY, 1);
+ m_compute.m_numZ = bx::uint32_max(_numZ, 1);
m_compute.m_submitFlags = _flags;
m_key.m_program = _handle.idx;
m_key.m_depth = 0;
m_key.m_view = _id;
- m_key.m_seq = s_ctx->m_seq[_id];
- s_ctx->m_seq[_id]++;
+ m_key.m_seq = s_ctx->getSeqIncr(_id);
uint64_t key = m_key.encodeCompute();
- m_sortKeys[m_num] = key;
- m_sortValues[m_num] = m_numRenderItems;
- ++m_num;
+ m_frame->m_sortKeys[renderItemIdx] = key;
+ m_frame->m_sortValues[renderItemIdx] = RenderItemCount(renderItemIdx);
- m_compute.m_constBegin = m_uniformBegin;
- m_compute.m_constEnd = m_uniformEnd;
- m_renderItem[m_numRenderItems].compute = m_compute;
- ++m_numRenderItems;
+ m_compute.m_uniformIdx = m_uniformIdx;
+ m_compute.m_uniformBegin = m_uniformBegin;
+ m_compute.m_uniformEnd = m_uniformEnd;
+ m_frame->m_renderItem[renderItemIdx].compute = m_compute;
+ m_frame->m_renderItemBind[renderItemIdx] = m_bind;
m_compute.clear();
+ m_bind.clear();
m_uniformBegin = m_uniformEnd;
-
- return m_num;
}
- void Frame::blit(uint8_t _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth)
+ void EncoderImpl::blit(ViewId _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth)
{
- BX_WARN(m_numBlitItems < BGFX_CONFIG_MAX_BLIT_ITEMS
+ BX_WARN(m_frame->m_numBlitItems < BGFX_CONFIG_MAX_BLIT_ITEMS
, "Exceed number of available blit items per frame. BGFX_CONFIG_MAX_BLIT_ITEMS is %d. Skipping blit."
, BGFX_CONFIG_MAX_BLIT_ITEMS
);
- if (m_numBlitItems < BGFX_CONFIG_MAX_BLIT_ITEMS)
+ if (m_frame->m_numBlitItems < BGFX_CONFIG_MAX_BLIT_ITEMS)
{
- uint16_t item = m_numBlitItems++;
+ uint16_t item = m_frame->m_numBlitItems++;
- BlitItem& bi = m_blitItem[item];
+ BlitItem& bi = m_frame->m_blitItem[item];
bi.m_srcX = _srcX;
bi.m_srcY = _srcY;
bi.m_srcZ = _srcZ;
@@ -995,23 +1039,25 @@ namespace bgfx
BlitKey key;
key.m_view = _id;
key.m_item = item;
- m_blitKeys[item] = key.encode();
+ m_frame->m_blitKeys[item] = key.encode();
}
}
void Frame::sort()
{
- uint8_t viewRemap[BGFX_CONFIG_MAX_VIEWS];
+ BGFX_PROFILER_SCOPE("bgfx/Sort", 0xff2040ff);
+
+ ViewId viewRemap[BGFX_CONFIG_MAX_VIEWS];
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
- viewRemap[m_viewRemap[ii] ] = uint8_t(ii);
+ viewRemap[m_viewRemap[ii] ] = ViewId(ii);
}
- for (uint32_t ii = 0, num = m_num; ii < num; ++ii)
+ for (uint32_t ii = 0, num = m_numRenderItems; ii < num; ++ii)
{
m_sortKeys[ii] = SortKey::remapView(m_sortKeys[ii], viewRemap);
}
- bx::radixSort(m_sortKeys, s_ctx->m_tempKeys, m_sortValues, s_ctx->m_tempValues, m_num);
+ bx::radixSort(m_sortKeys, s_ctx->m_tempKeys, m_sortValues, s_ctx->m_tempValues, m_numRenderItems);
for (uint32_t ii = 0, num = m_numBlitItems; ii < num; ++ii)
{
@@ -1020,19 +1066,23 @@ namespace bgfx
bx::radixSort(m_blitKeys, (uint32_t*)&s_ctx->m_tempKeys, m_numBlitItems);
}
- RenderFrame::Enum renderFrame()
+ RenderFrame::Enum renderFrame(int32_t _msecs)
{
if (BX_ENABLED(BGFX_CONFIG_MULTITHREADED) )
{
if (NULL == s_ctx)
{
s_renderFrameCalled = true;
- s_threadIndex = ~BGFX_MAIN_THREAD_MAGIC;
+ s_threadIndex = ~BGFX_API_THREAD_MAGIC;
return RenderFrame::NoContext;
}
BGFX_CHECK_RENDER_THREAD();
- RenderFrame::Enum result = s_ctx->renderFrame(BGFX_CONFIG_API_SEMAPHORE_TIMEOUT);
+ int32_t msecs = -1 == _msecs
+ ? BGFX_CONFIG_API_SEMAPHORE_TIMEOUT
+ : _msecs
+ ;
+ RenderFrame::Enum result = s_ctx->renderFrame(msecs);
if (RenderFrame::Exiting == result)
{
Context* ctx = s_ctx;
@@ -1074,7 +1124,7 @@ namespace bgfx
void UniformBuffer::writeMarker(const char* _marker)
{
- uint16_t num = (uint16_t)bx::strnlen(_marker)+1;
+ uint16_t num = (uint16_t)bx::strLen(_marker)+1;
uint32_t opcode = encodeOpcode(bgfx::UniformType::Count, 0, num, true);
write(opcode);
write(_marker, num);
@@ -1152,13 +1202,30 @@ namespace bgfx
BX_TRACE("");
BX_TRACE("Sort key masks:");
- BX_TRACE("\t View %016" PRIx64, SORT_KEY_VIEW_MASK);
- BX_TRACE("\t Draw bit %016" PRIx64, SORT_KEY_DRAW_BIT);
- BX_TRACE("\t Seq %016" PRIx64, SORT_KEY_SEQ_MASK);
- BX_TRACE("\tD Trans %016" PRIx64, SORT_KEY_DRAW_TRANS_MASK);
- BX_TRACE("\tD Program %016" PRIx64, SORT_KEY_DRAW_PROGRAM_MASK);
- BX_TRACE("\tC Program %016" PRIx64, SORT_KEY_COMPUTE_PROGRAM_MASK);
- BX_TRACE("\tD Depth %016" PRIx64, SORT_KEY_DRAW_DEPTH_MASK);
+ BX_TRACE("\t View %016" PRIx64, SORT_KEY_VIEW_MASK);
+ BX_TRACE("\t Draw bit %016" PRIx64, SORT_KEY_DRAW_BIT);
+
+ BX_TRACE("");
+ BX_TRACE("\tD Type %016" PRIx64, SORT_KEY_DRAW_TYPE_MASK);
+
+ BX_TRACE("");
+ BX_TRACE("\tD0 Trans %016" PRIx64, SORT_KEY_DRAW_0_TRANS_MASK);
+ BX_TRACE("\tD0 Program %016" PRIx64, SORT_KEY_DRAW_0_PROGRAM_MASK);
+ BX_TRACE("\tD0 Depth %016" PRIx64, SORT_KEY_DRAW_0_DEPTH_MASK);
+
+ BX_TRACE("");
+ BX_TRACE("\tD1 Depth %016" PRIx64, SORT_KEY_DRAW_1_DEPTH_MASK);
+ BX_TRACE("\tD1 Trans %016" PRIx64, SORT_KEY_DRAW_1_TRANS_MASK);
+ BX_TRACE("\tD1 Program %016" PRIx64, SORT_KEY_DRAW_1_PROGRAM_MASK);
+
+ BX_TRACE("");
+ BX_TRACE("\tD2 Seq %016" PRIx64, SORT_KEY_DRAW_2_SEQ_MASK);
+ BX_TRACE("\tD2 Trans %016" PRIx64, SORT_KEY_DRAW_2_TRANS_MASK);
+ BX_TRACE("\tD2 Program %016" PRIx64, SORT_KEY_DRAW_2_PROGRAM_MASK);
+
+ BX_TRACE("");
+ BX_TRACE("\t C Seq %016" PRIx64, SORT_KEY_COMPUTE_SEQ_MASK);
+ BX_TRACE("\t C Program %016" PRIx64, SORT_KEY_COMPUTE_PROGRAM_MASK);
BX_TRACE("");
BX_TRACE("Supported capabilities (renderer %s, vendor 0x%04x, device 0x%04x):"
@@ -1195,6 +1262,7 @@ namespace bgfx
LIMITS(maxDynamicVertexBuffers);
LIMITS(maxUniforms);
LIMITS(maxOcclusionQueries);
+ LIMITS(maxEncoders);
#undef LIMITS
BX_TRACE("");
@@ -1246,7 +1314,7 @@ namespace bgfx
BX_TRACE("");
}
- TextureFormat::Enum getViableTextureFormat(const ImageContainer& _imageContainer)
+ TextureFormat::Enum getViableTextureFormat(const bimg::ImageContainer& _imageContainer)
{
const uint32_t formatCaps = g_caps.formats[_imageContainer.m_format];
bool convert = 0 == formatCaps;
@@ -1275,7 +1343,17 @@ namespace bgfx
return TextureFormat::BGRA8;
}
- return _imageContainer.m_format;
+ return TextureFormat::Enum(_imageContainer.m_format);
+ }
+
+ const char* getName(TextureFormat::Enum _fmt)
+ {
+ return bimg::getName(bimg::TextureFormat::Enum(_fmt));
+ }
+
+ const char* getName(UniformHandle _handle)
+ {
+ return s_ctx->m_uniformRef[_handle.idx].m_name.getPtr();
}
static TextureFormat::Enum s_emulatedFormats[] =
@@ -1307,6 +1385,7 @@ namespace bgfx
m_flipped = true;
m_frames = 0;
m_debug = BGFX_DEBUG_NONE;
+ m_frameTimeLast = bx::getHPCounter();
m_submit->create();
@@ -1319,7 +1398,7 @@ namespace bgfx
// should not be created.
BX_TRACE("Application called bgfx::renderFrame directly, not creating render thread.");
m_singleThreaded = true
- && ~BGFX_MAIN_THREAD_MAGIC == s_threadIndex
+ && ~BGFX_API_THREAD_MAGIC == s_threadIndex
;
}
else
@@ -1335,16 +1414,16 @@ namespace bgfx
BX_TRACE("Running in %s-threaded mode", m_singleThreaded ? "single" : "multi");
- s_threadIndex = BGFX_MAIN_THREAD_MAGIC;
+ s_threadIndex = BGFX_API_THREAD_MAGIC;
for (uint32_t ii = 0; ii < BX_COUNTOF(m_viewRemap); ++ii)
{
- m_viewRemap[ii] = uint8_t(ii);
+ m_viewRemap[ii] = ViewId(ii);
}
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
- resetView(uint8_t(ii) );
+ resetView(ViewId(ii) );
}
for (uint32_t ii = 0; ii < BX_COUNTOF(m_clearColor); ++ii)
@@ -1362,6 +1441,11 @@ namespace bgfx
frameNoRenderWait();
+ uint16_t idx = m_encoderHandle.alloc();
+ BX_CHECK(0 == idx, "Internal encoder handle is not 0 (idx %d).", idx); BX_UNUSED(idx);
+ m_encoder[0].begin(m_submit, 0);
+ m_encoder0 = reinterpret_cast<Encoder*>(&m_encoder[0]);
+
// Make sure renderer init is called from render thread.
// g_caps is initialized and available after this point.
frame();
@@ -1389,7 +1473,7 @@ namespace bgfx
for (uint32_t ii = 0; ii < TextureFormat::UnknownDepth; ++ii)
{
- bool convertable = imageConvert(TextureFormat::BGRA8, TextureFormat::Enum(ii) );
+ bool convertable = bimg::imageConvert(bimg::TextureFormat::BGRA8, bimg::TextureFormat::Enum(ii) );
g_caps.formats[ii] |= 0 == (g_caps.formats[ii] & BGFX_CAPS_FORMAT_TEXTURE_2D ) && convertable ? BGFX_CAPS_FORMAT_TEXTURE_2D_EMULATED : 0;
g_caps.formats[ii] |= 0 == (g_caps.formats[ii] & BGFX_CAPS_FORMAT_TEXTURE_3D ) && convertable ? BGFX_CAPS_FORMAT_TEXTURE_3D_EMULATED : 0;
g_caps.formats[ii] |= 0 == (g_caps.formats[ii] & BGFX_CAPS_FORMAT_TEXTURE_CUBE) && convertable ? BGFX_CAPS_FORMAT_TEXTURE_CUBE_EMULATED : 0;
@@ -1447,6 +1531,8 @@ namespace bgfx
getCommandBuffer(CommandBuffer::RendererShutdownEnd);
frame();
+ m_encoder[0].end(true);
+
m_dynVertexBufferAllocator.compact();
m_dynIndexBufferAllocator.compact();
@@ -1480,27 +1566,56 @@ namespace bgfx
if (BX_ENABLED(BGFX_CONFIG_DEBUG) )
{
-#define CHECK_HANDLE_LEAK(_handleAlloc) \
- BX_MACRO_BLOCK_BEGIN \
- BX_WARN(0 == _handleAlloc.getNumHandles() \
- , "LEAK: " #_handleAlloc " %d (max: %d)" \
- , _handleAlloc.getNumHandles() \
- , _handleAlloc.getMaxHandles() \
- ); \
+#define CHECK_HANDLE_LEAK(_handleAlloc) \
+ BX_MACRO_BLOCK_BEGIN \
+ if (0 != _handleAlloc.getNumHandles() ) \
+ { \
+ BX_TRACE("LEAK: " #_handleAlloc " %d (max: %d)" \
+ , _handleAlloc.getNumHandles() \
+ , _handleAlloc.getMaxHandles() \
+ ); \
+ for (uint16_t ii = 0, num = _handleAlloc.getNumHandles(); ii < num; ++ii) \
+ { \
+ BX_TRACE("\t%3d: %4d", ii, _handleAlloc.getHandleAt(ii) ); \
+ } \
+ } \
+ BX_MACRO_BLOCK_END
+
+#define CHECK_HANDLE_LEAK_NAME(_handleAlloc, _type, _ref) \
+ BX_MACRO_BLOCK_BEGIN \
+ if (0 != _handleAlloc.getNumHandles() ) \
+ { \
+ BX_TRACE("LEAK: " #_handleAlloc " %d (max: %d)" \
+ , _handleAlloc.getNumHandles() \
+ , _handleAlloc.getMaxHandles() \
+ ); \
+ for (uint16_t ii = 0, num = _handleAlloc.getNumHandles(); ii < num; ++ii) \
+ { \
+ uint16_t idx = _handleAlloc.getHandleAt(ii); \
+ const _type& ref = _ref[idx]; BX_UNUSED(ref); \
+ BX_TRACE("\t%3d: %4d %s (count %d)" \
+ , ii \
+ , idx \
+ , ref.m_name.getPtr() \
+ , ref.m_refCount \
+ ); \
+ } \
+ } \
BX_MACRO_BLOCK_END
- CHECK_HANDLE_LEAK(m_dynamicIndexBufferHandle);
- CHECK_HANDLE_LEAK(m_dynamicVertexBufferHandle);
- CHECK_HANDLE_LEAK(m_indexBufferHandle);
- CHECK_HANDLE_LEAK(m_vertexDeclHandle);
- CHECK_HANDLE_LEAK(m_vertexBufferHandle);
- CHECK_HANDLE_LEAK(m_shaderHandle);
- CHECK_HANDLE_LEAK(m_programHandle);
- CHECK_HANDLE_LEAK(m_textureHandle);
- CHECK_HANDLE_LEAK(m_frameBufferHandle);
- CHECK_HANDLE_LEAK(m_uniformHandle);
- CHECK_HANDLE_LEAK(m_occlusionQueryHandle);
+ CHECK_HANDLE_LEAK (m_dynamicIndexBufferHandle );
+ CHECK_HANDLE_LEAK (m_dynamicVertexBufferHandle );
+ CHECK_HANDLE_LEAK (m_indexBufferHandle );
+ CHECK_HANDLE_LEAK (m_vertexDeclHandle );
+ CHECK_HANDLE_LEAK (m_vertexBufferHandle );
+ CHECK_HANDLE_LEAK_NAME(m_shaderHandle, ShaderRef, m_shaderRef );
+ CHECK_HANDLE_LEAK (m_programHandle );
+ CHECK_HANDLE_LEAK_NAME(m_textureHandle, TextureRef, m_textureRef);
+ CHECK_HANDLE_LEAK (m_frameBufferHandle );
+ CHECK_HANDLE_LEAK_NAME(m_uniformHandle, UniformRef, m_uniformRef);
+ CHECK_HANDLE_LEAK (m_occlusionQueryHandle );
#undef CHECK_HANDLE_LEAK
+#undef CHECK_HANDLE_LEAK_NAME
}
}
@@ -1568,27 +1683,66 @@ namespace bgfx
}
}
- uint32_t Context::frame(bool _capture)
+ Encoder* Context::begin()
{
- BX_CHECK(0 == m_instBufferCount, "Instance buffer allocated, but not used. This is incorrect, and causes memory leak.");
+ EncoderImpl* encoder = &m_encoder[0];
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_OCCLUSION) )
+#if BGFX_CONFIG_MULTITHREADED
+ if (BGFX_API_THREAD_MAGIC != s_threadIndex)
{
- m_occlusionQuerySet.clear();
+ bx::MutexScope scopeLock(m_encoderApiLock);
+
+ uint16_t idx = m_encoderHandle.alloc();
+ if (kInvalidHandle == idx)
+ {
+ return NULL;
+ }
+
+ encoder = &m_encoder[idx];
+ encoder->begin(m_submit, uint8_t(idx) );
}
+#endif // BGFX_CONFIG_MULTITHREADED
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
+ return reinterpret_cast<Encoder*>(encoder);
+ }
+
+ void Context::end(Encoder* _encoder)
+ {
+#if BGFX_CONFIG_MULTITHREADED
+ if (BGFX_API_THREAD_MAGIC != s_threadIndex)
{
- m_uniformSet.clear();
+ EncoderImpl* encoder = reinterpret_cast<EncoderImpl*>(_encoder);
+ encoder->end(true);
+
+ m_encoderEndSem.post();
}
+#else
+ BX_UNUSED(_encoder);
+#endif // BGFX_CONFIG_MULTITHREADED
+ }
+
+ uint32_t Context::frame(bool _capture)
+ {
+ m_encoder[0].end(true);
+
+#if BGFX_CONFIG_MULTITHREADED
+ bx::MutexScope resourceApiScope(m_resourceApiLock);
+
+ encoderApiWait();
+ bx::MutexScope encoderApiScope(m_encoderApiLock);
+#else
+ encoderApiWait();
+#endif // BGFX_CONFIG_MULTITHREADED
m_submit->m_capture = _capture;
- BGFX_PROFILER_SCOPE(bgfx, main_thread_frame, 0xff2040ff);
+ BGFX_PROFILER_SCOPE("bgfx/API thread frame", 0xff2040ff);
// wait for render thread to finish
renderSemWait();
frameNoRenderWait();
+ m_encoder[0].begin(m_submit, 0);
+
return m_frames;
}
@@ -1606,15 +1760,11 @@ namespace bgfx
m_submit->m_resolution = m_resolution;
m_resolution.m_flags &= ~BGFX_RESET_INTERNAL_FORCE;
m_submit->m_debug = m_debug;
+ m_submit->m_perfStats.numViews = 0;
bx::memCopy(m_submit->m_viewRemap, m_viewRemap, sizeof(m_viewRemap) );
- bx::memCopy(m_submit->m_fb, m_fb, sizeof(m_fb) );
- bx::memCopy(m_submit->m_clear, m_clear, sizeof(m_clear) );
- bx::memCopy(m_submit->m_rect, m_rect, sizeof(m_rect) );
- bx::memCopy(m_submit->m_scissor, m_scissor, sizeof(m_scissor) );
bx::memCopy(m_submit->m_view, m_view, sizeof(m_view) );
- bx::memCopy(m_submit->m_proj, m_proj, sizeof(m_proj) );
- bx::memCopy(m_submit->m_viewFlags, m_viewFlags, sizeof(m_viewFlags) );
+
if (m_colorPaletteDirty > 0)
{
--m_colorPaletteDirty;
@@ -1643,43 +1793,69 @@ namespace bgfx
, m_resolution.m_width
, m_resolution.m_height
);
- }
- const char* Context::getName(UniformHandle _handle) const
- {
- return m_uniformRef[_handle.idx].m_name.getPtr();
+ int64_t now = bx::getHPCounter();
+ m_submit->m_perfStats.cpuTimeFrame = now - m_frameTimeLast;
+ m_frameTimeLast = now;
}
- RenderFrame::Enum Context::renderFrame(int32_t _msecs)
- {
- BGFX_PROFILER_SCOPE(bgfx, render_frame, 0xff2040ff);
+ RendererContextI* rendererCreate(RendererType::Enum _type);
+ void rendererDestroy(RendererContextI* _renderCtx);
+ void Context::flip()
+ {
if (m_rendererInitialized
- && !m_flipAfterRender
&& !m_flipped)
{
m_renderCtx->flip(m_render->m_hmd);
m_flipped = true;
+
+ if (m_renderCtx->isDeviceRemoved() )
+ {
+ // Something horribly went wrong, fallback to noop renderer.
+ rendererDestroy(m_renderCtx);
+
+ m_renderCtx = rendererCreate(RendererType::Noop);
+ g_caps.rendererType = RendererType::Noop;
+ }
+ }
+ }
+
+ RenderFrame::Enum Context::renderFrame(int32_t _msecs)
+ {
+ BGFX_PROFILER_SCOPE("bgfx::renderFrame", 0xff2040ff);
+
+ if (!m_flipAfterRender)
+ {
+ BGFX_PROFILER_SCOPE("bgfx/flip", 0xff2040ff);
+ flip();
}
if (apiSemWait(_msecs) )
{
- rendererExecCommands(m_render->m_cmdPre);
+ {
+ BGFX_PROFILER_SCOPE("bgfx/Exec commands pre", 0xff2040ff);
+ rendererExecCommands(m_render->m_cmdPre);
+ }
+
if (m_rendererInitialized)
{
- BGFX_PROFILER_SCOPE(bgfx, render_submit, 0xff2040ff);
+ BGFX_PROFILER_SCOPE("bgfx/Render submit", 0xff2040ff);
m_renderCtx->submit(m_render, m_clearQuad, m_textVideoMemBlitter);
m_flipped = false;
}
- rendererExecCommands(m_render->m_cmdPost);
+
+ {
+ BGFX_PROFILER_SCOPE("bgfx/Exec commands post", 0xff2040ff);
+ rendererExecCommands(m_render->m_cmdPost);
+ }
renderSemPost();
- if (m_rendererInitialized
- && m_flipAfterRender)
+ if (m_flipAfterRender)
{
- m_renderCtx->flip(m_render->m_hmd);
- m_flipped = true;
+ BGFX_PROFILER_SCOPE("bgfx/flip", 0xff2040ff);
+ flip();
}
}
else
@@ -1825,7 +2001,7 @@ namespace bgfx
static RendererCreator s_rendererCreator[] =
{
- { noop::rendererCreate, noop::rendererDestroy, BGFX_RENDERER_NOOP_NAME, !!BGFX_CONFIG_RENDERER_NOOP }, // Noop
+ { noop::rendererCreate, noop::rendererDestroy, BGFX_RENDERER_NOOP_NAME, true }, // Noop
{ d3d9::rendererCreate, d3d9::rendererDestroy, BGFX_RENDERER_DIRECT3D9_NAME, !!BGFX_CONFIG_RENDERER_DIRECT3D9 }, // Direct3D9
{ d3d11::rendererCreate, d3d11::rendererDestroy, BGFX_RENDERER_DIRECT3D11_NAME, !!BGFX_CONFIG_RENDERER_DIRECT3D11 }, // Direct3D11
{ d3d12::rendererCreate, d3d12::rendererDestroy, BGFX_RENDERER_DIRECT3D12_NAME, !!BGFX_CONFIG_RENDERER_DIRECT3D12 }, // Direct3D12
@@ -1841,8 +2017,6 @@ namespace bgfx
};
BX_STATIC_ASSERT(BX_COUNTOF(s_rendererCreator) == RendererType::Count);
- static RendererDestroyFn s_rendererDestroyFn;
-
struct Condition
{
enum Enum
@@ -1934,7 +2108,6 @@ namespace bgfx
|| BX_PLATFORM_ANDROID
|| BX_PLATFORM_EMSCRIPTEN
|| BX_PLATFORM_IOS
- || BX_PLATFORM_NACL
|| BX_PLATFORM_RPI
) )
{
@@ -1965,7 +2138,6 @@ namespace bgfx
renderCtx = s_rendererCreator[renderer].createFn();
if (NULL != renderCtx)
{
- s_rendererDestroyFn = s_rendererCreator[renderer].destroyFn;
break;
}
@@ -1975,9 +2147,12 @@ namespace bgfx
return renderCtx;
}
- void rendererDestroy()
+ void rendererDestroy(RendererContextI* _renderCtx)
{
- s_rendererDestroyFn();
+ if (NULL != _renderCtx)
+ {
+ s_rendererCreator[_renderCtx->getRendererType()].destroyFn();
+ }
}
void Context::rendererExecCommands(CommandBuffer& _cmdbuf)
@@ -2012,6 +2187,7 @@ namespace bgfx
_cmdbuf.read(type);
m_renderCtx = rendererCreate(type);
+
m_rendererInitialized = NULL != m_renderCtx;
if (!m_rendererInitialized)
@@ -2044,8 +2220,10 @@ namespace bgfx
case CommandBuffer::RendererShutdownEnd:
{
BX_CHECK(!m_rendererInitialized && !m_exit, "This shouldn't happen! Bad synchronization?");
- rendererDestroy();
+
+ rendererDestroy(m_renderCtx);
m_renderCtx = NULL;
+
m_exit = true;
}
// fall through
@@ -2345,7 +2523,7 @@ namespace bgfx
uint8_t mip;
_cmdbuf.read(mip);
- m_renderCtx->readTexture(handle, data,mip);
+ m_renderCtx->readTexture(handle, data, mip);
}
break;
@@ -2467,7 +2645,7 @@ namespace bgfx
case CommandBuffer::UpdateViewName:
{
- uint8_t id;
+ ViewId id;
_cmdbuf.read(id);
uint16_t len;
@@ -2488,6 +2666,20 @@ namespace bgfx
}
break;
+ case CommandBuffer::SetName:
+ {
+ Handle handle;
+ _cmdbuf.read(handle);
+
+ uint16_t len;
+ _cmdbuf.read(len);
+
+ const char* name = (const char*)_cmdbuf.skip(len);
+
+ m_renderCtx->setName(handle, name);
+ }
+ break;
+
default:
BX_CHECK(false, "Invalid command: %d", command);
break;
@@ -2568,7 +2760,7 @@ namespace bgfx
}
else
{
- bx::CrtAllocator allocator;
+ bx::DefaultAllocator allocator;
g_allocator =
s_allocatorStub = BX_NEW(&allocator, AllocatorStub);
}
@@ -2584,7 +2776,7 @@ namespace bgfx
}
if (true
- && !BX_ENABLED(BX_PLATFORM_EMSCRIPTEN || BX_PLATFORM_NACL || BX_PLATFORM_PS4)
+ && !BX_ENABLED(BX_PLATFORM_EMSCRIPTEN || BX_PLATFORM_PS4)
&& RendererType::Noop != _type
&& NULL == g_platformData.ndt
&& NULL == g_platformData.nwh
@@ -2607,7 +2799,7 @@ namespace bgfx
g_caps.limits.maxTextures = BGFX_CONFIG_MAX_TEXTURES;
g_caps.limits.maxTextureSamplers = BGFX_CONFIG_MAX_TEXTURE_SAMPLERS;
g_caps.limits.maxVertexDecls = BGFX_CONFIG_MAX_VERTEX_DECLS;
- g_caps.limits.maxVertexStreams = BGFX_CONFIG_MAX_VERTEX_STREAMS;
+ g_caps.limits.maxVertexStreams = 1;
g_caps.limits.maxIndexBuffers = BGFX_CONFIG_MAX_INDEX_BUFFERS;
g_caps.limits.maxVertexBuffers = BGFX_CONFIG_MAX_VERTEX_BUFFERS;
g_caps.limits.maxDynamicIndexBuffers = BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS;
@@ -2615,6 +2807,7 @@ namespace bgfx
g_caps.limits.maxUniforms = BGFX_CONFIG_MAX_UNIFORMS;
g_caps.limits.maxOcclusionQueries = BGFX_CONFIG_MAX_OCCLUSION_QUERIES;
g_caps.limits.maxFBAttachments = 1;
+ g_caps.limits.maxEncoders = BGFX_CONFIG_MAX_ENCODERS;
g_caps.vendorId = _vendorId;
g_caps.deviceId = _deviceId;
@@ -2648,7 +2841,7 @@ error:
if (NULL != s_allocatorStub)
{
- bx::CrtAllocator allocator;
+ bx::DefaultAllocator allocator;
BX_DELETE(&allocator, s_allocatorStub);
s_allocatorStub = NULL;
}
@@ -2666,7 +2859,7 @@ error:
{
BX_TRACE("Shutdown...");
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
Context* ctx = s_ctx; // it's going to be NULLd inside shutdown.
ctx->shutdown();
BX_CHECK(NULL == s_ctx, "bgfx is should be uninitialized here.");
@@ -2688,7 +2881,7 @@ error:
if (NULL != s_allocatorStub)
{
- bx::CrtAllocator allocator;
+ bx::DefaultAllocator allocator;
BX_DELETE(&allocator, s_allocatorStub);
s_allocatorStub = NULL;
}
@@ -2700,14 +2893,308 @@ error:
void reset(uint32_t _width, uint32_t _height, uint32_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
BX_CHECK(0 == (_flags&BGFX_RESET_RESERVED_MASK), "Do not set reset reserved flags!");
s_ctx->reset(_width, _height, _flags);
}
+ Encoder* begin()
+ {
+ return s_ctx->begin();
+ }
+
+#define BGFX_ENCODER(_func) reinterpret_cast<EncoderImpl*>(this)->_func
+
+ void Encoder::setMarker(const char* _marker)
+ {
+ BGFX_ENCODER(setMarker(_marker) );
+ }
+
+ void Encoder::setState(uint64_t _state, uint32_t _rgba)
+ {
+ BX_CHECK(0 == (_state&BGFX_STATE_RESERVED_MASK), "Do not set state reserved flags!");
+ BGFX_ENCODER(setState(_state, _rgba) );
+ }
+
+ void Encoder::setCondition(OcclusionQueryHandle _handle, bool _visible)
+ {
+ BGFX_CHECK_CAPS(BGFX_CAPS_OCCLUSION_QUERY, "Occlusion query is not supported!");
+ BGFX_ENCODER(setCondition(_handle, _visible) );
+ }
+
+ void Encoder::setStencil(uint32_t _fstencil, uint32_t _bstencil)
+ {
+ BGFX_ENCODER(setStencil(_fstencil, _bstencil) );
+ }
+
+ uint16_t Encoder::setScissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
+ {
+ return BGFX_ENCODER(setScissor(_x, _y, _width, _height) );
+ }
+
+ void Encoder::setScissor(uint16_t _cache)
+ {
+ BGFX_ENCODER(setScissor(_cache) );
+ }
+
+ uint32_t Encoder::setTransform(const void* _mtx, uint16_t _num)
+ {
+ return BGFX_ENCODER(setTransform(_mtx, _num) );
+ }
+
+ uint32_t Encoder::allocTransform(Transform* _transform, uint16_t _num)
+ {
+ return BGFX_ENCODER(allocTransform(_transform, _num) );
+ }
+
+ void Encoder::setTransform(uint32_t _cache, uint16_t _num)
+ {
+ BGFX_ENCODER(setTransform(_cache, _num) );
+ }
+
+ void Encoder::setUniform(UniformHandle _handle, const void* _value, uint16_t _num)
+ {
+ BGFX_CHECK_HANDLE("setUniform", s_ctx->m_uniformHandle, _handle);
+ const Context::UniformRef& uniform = s_ctx->m_uniformRef[_handle.idx];
+ BX_CHECK(isValid(_handle) && 0 < uniform.m_refCount, "Setting invalid uniform (handle %3d)!", _handle.idx);
+ BX_CHECK(_num == UINT16_MAX || uniform.m_num >= _num, "Truncated uniform update. %d (max: %d)", _num, uniform.m_num);
+ BGFX_ENCODER(setUniform(uniform.m_type, _handle, _value, _num) );
+ }
+
+ void Encoder::setIndexBuffer(IndexBufferHandle _handle)
+ {
+ setIndexBuffer(_handle, 0, UINT32_MAX);
+ }
+
+ void Encoder::setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
+ {
+ BGFX_CHECK_HANDLE("setIndexBuffer", s_ctx->m_indexBufferHandle, _handle);
+ BGFX_ENCODER(setIndexBuffer(_handle, _firstIndex, _numIndices) );
+ }
+
+ void Encoder::setIndexBuffer(DynamicIndexBufferHandle _handle)
+ {
+ setIndexBuffer(_handle, 0, UINT32_MAX);
+ }
+
+ void Encoder::setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
+ {
+ BGFX_CHECK_HANDLE("setIndexBuffer", s_ctx->m_dynamicIndexBufferHandle, _handle);
+ const DynamicIndexBuffer& dib = s_ctx->m_dynamicIndexBuffers[_handle.idx];
+ BGFX_ENCODER(setIndexBuffer(dib, _firstIndex, _numIndices) );
+ }
+
+ void Encoder::setIndexBuffer(const TransientIndexBuffer* _tib)
+ {
+ setIndexBuffer(_tib, 0, UINT32_MAX);
+ }
+
+ void Encoder::setIndexBuffer(const TransientIndexBuffer* _tib, uint32_t _firstIndex, uint32_t _numIndices)
+ {
+ BX_CHECK(NULL != _tib, "_tib can't be NULL");
+ BGFX_CHECK_HANDLE("setIndexBuffer", s_ctx->m_indexBufferHandle, _tib->handle);
+ BGFX_ENCODER(setIndexBuffer(_tib, _firstIndex, _numIndices) );
+ }
+
+ void Encoder::setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices)
+ {
+ BGFX_CHECK_HANDLE("setVertexBuffer", s_ctx->m_vertexBufferHandle, _handle);
+ BGFX_ENCODER(setVertexBuffer(_stream, _handle, _startVertex, _numVertices) );
+ }
+
+ void Encoder::setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle)
+ {
+ setVertexBuffer(_stream, _handle, 0, UINT32_MAX);
+ }
+
+ void Encoder::setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices)
+ {
+ BGFX_CHECK_HANDLE("setVertexBuffer", s_ctx->m_dynamicVertexBufferHandle, _handle);
+ const DynamicVertexBuffer& dvb = s_ctx->m_dynamicVertexBuffers[_handle.idx];
+ BGFX_ENCODER(setVertexBuffer(_stream, dvb, _startVertex, _numVertices) );
+ }
+
+ void Encoder::setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle)
+ {
+ setVertexBuffer(_stream, _handle, 0, UINT32_MAX);
+ }
+
+ void Encoder::setVertexBuffer(uint8_t _stream, const TransientVertexBuffer* _tvb, uint32_t _startVertex, uint32_t _numVertices)
+ {
+ BX_CHECK(NULL != _tvb, "_tvb can't be NULL");
+ BGFX_CHECK_HANDLE("setVertexBuffer", s_ctx->m_vertexBufferHandle, _tvb->handle);
+ BGFX_ENCODER(setVertexBuffer(_stream, _tvb, _startVertex, _numVertices) );
+ }
+
+ void Encoder::setVertexBuffer(uint8_t _stream, const TransientVertexBuffer* _tvb)
+ {
+ setVertexBuffer(_stream, _tvb, 0, UINT32_MAX);
+ }
+
+ void Encoder::setInstanceDataBuffer(const InstanceDataBuffer* _idb, uint32_t _num)
+ {
+ BX_CHECK(NULL != _idb, "_idb can't be NULL");
+ BGFX_ENCODER(setInstanceDataBuffer(_idb, _num) );
+ }
+
+ void Encoder::setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num)
+ {
+ BGFX_CHECK_HANDLE("setInstanceDataBuffer", s_ctx->m_vertexBufferHandle, _handle);
+ const VertexBuffer& vb = s_ctx->m_vertexBuffers[_handle.idx];
+ BGFX_ENCODER(setInstanceDataBuffer(_handle, _startVertex, _num, vb.m_stride) );
+ }
+
+ void Encoder::setInstanceDataBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num)
+ {
+ BGFX_CHECK_HANDLE("setInstanceDataBuffer", s_ctx->m_dynamicVertexBufferHandle, _handle);
+ const DynamicVertexBuffer& dvb = s_ctx->m_dynamicVertexBuffers[_handle.idx];
+ BGFX_ENCODER(setInstanceDataBuffer(dvb.m_handle
+ , dvb.m_startVertex + _startVertex
+ , _num
+ , dvb.m_stride
+ ) );
+ }
+
+ void Encoder::setTexture(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint32_t _flags)
+ {
+ BGFX_CHECK_HANDLE_INVALID_OK("setTexture/TextureHandle", s_ctx->m_textureHandle, _handle);
+ BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
+ BGFX_ENCODER(setTexture(_stage, _sampler, _handle, _flags) );
+ }
+
+ void Encoder::touch(ViewId _id)
+ {
+ ProgramHandle handle = BGFX_INVALID_HANDLE;
+ submit(_id, handle);
+ }
+
+ void Encoder::submit(ViewId _id, ProgramHandle _program, int32_t _depth, bool _preserveState)
+ {
+ OcclusionQueryHandle handle = BGFX_INVALID_HANDLE;
+ submit(_id, _program, handle, _depth, _preserveState);
+ }
+
+ void Encoder::submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState)
+ {
+ BX_CHECK(false
+ || !isValid(_occlusionQuery)
+ || 0 != (g_caps.supported & BGFX_CAPS_OCCLUSION_QUERY)
+ , "Occlusion query is not supported! Use bgfx::getCaps to check BGFX_CAPS_OCCLUSION_QUERY backend renderer capabilities."
+ );
+ BGFX_CHECK_HANDLE_INVALID_OK("submit", s_ctx->m_programHandle, _program);
+ BGFX_CHECK_HANDLE_INVALID_OK("submit", s_ctx->m_occlusionQueryHandle, _occlusionQuery);
+ BGFX_ENCODER(submit(_id, _program, _occlusionQuery, _depth, _preserveState) );
+ }
+
+ void Encoder::submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
+ {
+ BGFX_CHECK_HANDLE_INVALID_OK("submit", s_ctx->m_programHandle, _program);
+ BGFX_CHECK_HANDLE("submit", s_ctx->m_vertexBufferHandle, _indirectHandle);
+ BGFX_CHECK_CAPS(BGFX_CAPS_DRAW_INDIRECT, "Draw indirect is not supported!");
+ BGFX_ENCODER(submit(_id, _program, _indirectHandle, _start, _num, _depth, _preserveState) );
+ }
+
+ void Encoder::setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access)
+ {
+ BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
+ BGFX_CHECK_HANDLE("setBuffer", s_ctx->m_indexBufferHandle, _handle);
+ BGFX_ENCODER(setBuffer(_stage, _handle, _access) );
+ }
+
+ void Encoder::setBuffer(uint8_t _stage, VertexBufferHandle _handle, Access::Enum _access)
+ {
+ BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
+ BGFX_CHECK_HANDLE("setBuffer", s_ctx->m_vertexBufferHandle, _handle);
+ BGFX_ENCODER(setBuffer(_stage, _handle, _access) );
+ }
+
+ void Encoder::setBuffer(uint8_t _stage, DynamicIndexBufferHandle _handle, Access::Enum _access)
+ {
+ BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
+ BGFX_CHECK_HANDLE("setBuffer", s_ctx->m_dynamicIndexBufferHandle, _handle);
+ const DynamicIndexBuffer& dib = s_ctx->m_dynamicIndexBuffers[_handle.idx];
+ BGFX_ENCODER(setBuffer(_stage, dib.m_handle, _access) );
+ }
+
+ void Encoder::setBuffer(uint8_t _stage, DynamicVertexBufferHandle _handle, Access::Enum _access)
+ {
+ BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
+ BGFX_CHECK_HANDLE("setBuffer", s_ctx->m_dynamicVertexBufferHandle, _handle);
+ const DynamicVertexBuffer& dvb = s_ctx->m_dynamicVertexBuffers[_handle.idx];
+ BGFX_ENCODER(setBuffer(_stage, dvb.m_handle, _access) );
+ }
+
+ void Encoder::setBuffer(uint8_t _stage, IndirectBufferHandle _handle, Access::Enum _access)
+ {
+ BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
+ BGFX_CHECK_HANDLE("setBuffer", s_ctx->m_vertexBufferHandle, _handle);
+ VertexBufferHandle handle = { _handle.idx };
+ BGFX_ENCODER(setBuffer(_stage, handle, _access) );
+ }
+
+ void Encoder::setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format)
+ {
+ BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
+ _format = TextureFormat::Count == _format
+ ? TextureFormat::Enum(s_ctx->m_textureRef[_handle.idx].m_format)
+ : _format
+ ;
+ BX_CHECK(_format != TextureFormat::BGRA8
+ , "Can't use TextureFormat::BGRA8 with compute, use TextureFormat::RGBA8 instead."
+ );
+ BGFX_ENCODER(setImage(_stage, _sampler, _handle, _mip, _access, _format) );
+ }
+
+ void Encoder::dispatch(ViewId _id, ProgramHandle _program, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
+ {
+ BGFX_CHECK_CAPS(BGFX_CAPS_COMPUTE, "Compute is not supported!");
+ BGFX_CHECK_HANDLE_INVALID_OK("dispatch", s_ctx->m_programHandle, _program);
+ BGFX_ENCODER(dispatch(_id, _program, _numX, _numY, _numZ, _flags) );
+ }
+
+ void Encoder::dispatch(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
+ {
+ BGFX_CHECK_CAPS(BGFX_CAPS_DRAW_INDIRECT, "Dispatch indirect is not supported!");
+ BGFX_CHECK_CAPS(BGFX_CAPS_COMPUTE, "Compute is not supported!");
+ BGFX_CHECK_HANDLE_INVALID_OK("dispatch", s_ctx->m_programHandle, _program);
+ BGFX_CHECK_HANDLE("dispatch", s_ctx->m_vertexBufferHandle, _indirectHandle);
+ BGFX_ENCODER(dispatch(_id, _program, _indirectHandle, _start, _num, _flags) );
+ }
+
+ void Encoder::discard()
+ {
+ BGFX_ENCODER(discard() );
+ }
+
+ void Encoder::blit(ViewId _id, TextureHandle _dst, uint16_t _dstX, uint16_t _dstY, TextureHandle _src, uint16_t _srcX, uint16_t _srcY, uint16_t _width, uint16_t _height)
+ {
+ blit(_id, _dst, 0, _dstX, _dstY, 0, _src, 0, _srcX, _srcY, 0, _width, _height, 0);
+ }
+
+ void Encoder::blit(ViewId _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth)
+ {
+ BGFX_CHECK_CAPS(BGFX_CAPS_TEXTURE_BLIT, "Texture blit is not supported!");
+ const Context::TextureRef& src = s_ctx->m_textureRef[_src.idx];
+ const Context::TextureRef& dst = s_ctx->m_textureRef[_dst.idx];
+ BX_CHECK(src.m_format == dst.m_format
+ , "Texture format must match (src %s, dst %s)."
+ , bimg::getName(bimg::TextureFormat::Enum(src.m_format) )
+ , bimg::getName(bimg::TextureFormat::Enum(dst.m_format) )
+ );
+ BX_UNUSED(src, dst);
+ BGFX_ENCODER(blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth) );
+ }
+
+#undef BGFX_ENCODER
+
+ void end(Encoder* _encoder)
+ {
+ s_ctx->end(_encoder);
+ }
+
uint32_t frame(bool _capture)
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
return s_ctx->frame(_capture);
}
@@ -2787,13 +3274,13 @@ error:
void setDebug(uint32_t _debug)
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
s_ctx->setDebug(_debug);
}
void dbgTextClear(uint8_t _attr, bool _small)
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
s_ctx->dbgTextClear(_attr, _small);
}
@@ -2804,7 +3291,7 @@ error:
void dbgTextPrintf(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, ...)
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
va_list argList;
va_start(argList, _format);
s_ctx->dbgTextPrintfVargs(_x, _y, _attr, _format, argList);
@@ -2813,116 +3300,100 @@ error:
void dbgTextImage(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const void* _data, uint16_t _pitch)
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
s_ctx->dbgTextImage(_x, _y, _width, _height, _data, _pitch);
}
IndexBufferHandle createIndexBuffer(const Memory* _mem, uint16_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
return s_ctx->createIndexBuffer(_mem, _flags);
}
- void destroyIndexBuffer(IndexBufferHandle _handle)
+ void destroy(IndexBufferHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyIndexBuffer(_handle);
}
VertexBufferHandle createVertexBuffer(const Memory* _mem, const VertexDecl& _decl, uint16_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
- BX_CHECK(0 != _decl.m_stride, "Invalid VertexDecl.");
+ BX_CHECK(isValid(_decl), "Invalid VertexDecl.");
return s_ctx->createVertexBuffer(_mem, _decl, _flags);
}
- void destroyVertexBuffer(VertexBufferHandle _handle)
+ void destroy(VertexBufferHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyVertexBuffer(_handle);
}
DynamicIndexBufferHandle createDynamicIndexBuffer(uint32_t _num, uint16_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
return s_ctx->createDynamicIndexBuffer(_num, _flags);
}
DynamicIndexBufferHandle createDynamicIndexBuffer(const Memory* _mem, uint16_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
return s_ctx->createDynamicIndexBuffer(_mem, _flags);
}
void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _startIndex, const Memory* _mem)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
s_ctx->updateDynamicIndexBuffer(_handle, _startIndex, _mem);
}
- void destroyDynamicIndexBuffer(DynamicIndexBufferHandle _handle)
+ void destroy(DynamicIndexBufferHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyDynamicIndexBuffer(_handle);
}
DynamicVertexBufferHandle createDynamicVertexBuffer(uint32_t _num, const VertexDecl& _decl, uint16_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(0 != _decl.m_stride, "Invalid VertexDecl.");
+ BX_CHECK(isValid(_decl), "Invalid VertexDecl.");
return s_ctx->createDynamicVertexBuffer(_num, _decl, _flags);
}
DynamicVertexBufferHandle createDynamicVertexBuffer(const Memory* _mem, const VertexDecl& _decl, uint16_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
- BX_CHECK(0 != _decl.m_stride, "Invalid VertexDecl.");
+ BX_CHECK(isValid(_decl), "Invalid VertexDecl.");
return s_ctx->createDynamicVertexBuffer(_mem, _decl, _flags);
}
void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, const Memory* _mem)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
s_ctx->updateDynamicVertexBuffer(_handle, _startVertex, _mem);
}
- void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle)
+ void destroy(DynamicVertexBufferHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyDynamicVertexBuffer(_handle);
}
uint32_t getAvailTransientIndexBuffer(uint32_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(0 < _num, "Requesting 0 indices.");
return s_ctx->getAvailTransientIndexBuffer(_num);
}
uint32_t getAvailTransientVertexBuffer(uint32_t _num, const VertexDecl& _decl)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(0 < _num, "Requesting 0 vertices.");
- BX_CHECK(0 != _decl.m_stride, "Invalid VertexDecl.");
+ BX_CHECK(isValid(_decl), "Invalid VertexDecl.");
return s_ctx->getAvailTransientVertexBuffer(_num, _decl.m_stride);
}
uint32_t getAvailInstanceDataBuffer(uint32_t _num, uint16_t _stride)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(0 < _num, "Requesting 0 instances.");
return s_ctx->getAvailTransientVertexBuffer(_num, _stride);
}
void allocTransientIndexBuffer(TransientIndexBuffer* _tib, uint32_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _tib, "_tib can't be NULL");
BX_CHECK(0 < _num, "Requesting 0 indices.");
s_ctx->allocTransientIndexBuffer(_tib, _num);
@@ -2934,11 +3405,10 @@ error:
void allocTransientVertexBuffer(TransientVertexBuffer* _tvb, uint32_t _num, const VertexDecl& _decl)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _tvb, "_tvb can't be NULL");
BX_CHECK(0 < _num, "Requesting 0 vertices.");
BX_CHECK(UINT16_MAX >= _num, "Requesting %d vertices (max: %d).", _num, UINT16_MAX);
- BX_CHECK(0 != _decl.m_stride, "Invalid VertexDecl.");
+ BX_CHECK(isValid(_decl), "Invalid VertexDecl.");
s_ctx->allocTransientVertexBuffer(_tvb, _num, _decl);
BX_CHECK(_num == _tvb->size / _decl.m_stride, "Failed to allocate transient vertex buffer (requested %d, available %d). Use bgfx::checkAvailTransient* functions to ensure availability."
, _num
@@ -2948,6 +3418,8 @@ error:
bool allocTransientBuffers(bgfx::TransientVertexBuffer* _tvb, const bgfx::VertexDecl& _decl, uint32_t _numVertices, bgfx::TransientIndexBuffer* _tib, uint32_t _numIndices)
{
+ BGFX_MUTEX_SCOPE(s_ctx->m_resourceApiLock);
+
if (_numVertices == getAvailTransientVertexBuffer(_numVertices, _decl)
&& _numIndices == getAvailTransientIndexBuffer(_numIndices) )
{
@@ -2959,53 +3431,51 @@ error:
return false;
}
- const InstanceDataBuffer* allocInstanceDataBuffer(uint32_t _num, uint16_t _stride)
+ void allocInstanceDataBuffer(InstanceDataBuffer* _idb, uint32_t _num, uint16_t _stride)
{
- BGFX_CHECK_MAIN_THREAD();
BGFX_CHECK_CAPS(BGFX_CAPS_INSTANCING, "Instancing is not supported!");
+ BX_CHECK(_stride == BX_ALIGN_16(_stride), "Stride must be multiple of 16.");
BX_CHECK(0 < _num, "Requesting 0 instanced data vertices.");
- const InstanceDataBuffer* idb = s_ctx->allocInstanceDataBuffer(_num, _stride);
- BX_CHECK(_num == idb->size / _stride, "Failed to allocate instance data buffer (requested %d, available %d). Use bgfx::checkAvailTransient* functions to ensure availability."
+ s_ctx->allocInstanceDataBuffer(_idb, _num, _stride);
+ BX_CHECK(_num == _idb->size / _stride, "Failed to allocate instance data buffer (requested %d, available %d). Use bgfx::checkAvailTransient* functions to ensure availability."
, _num
- , idb->size / _stride
+ , _idb->size / _stride
);
- return idb;
}
IndirectBufferHandle createIndirectBuffer(uint32_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
return s_ctx->createIndirectBuffer(_num);
}
- void destroyIndirectBuffer(IndirectBufferHandle _handle)
+ void destroy(IndirectBufferHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyIndirectBuffer(_handle);
}
ShaderHandle createShader(const Memory* _mem)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
return s_ctx->createShader(_mem);
}
uint16_t getShaderUniforms(ShaderHandle _handle, UniformHandle* _uniforms, uint16_t _max)
{
- BGFX_CHECK_MAIN_THREAD();
return s_ctx->getShaderUniforms(_handle, _uniforms, _max);
}
- void destroyShader(ShaderHandle _handle)
+ void setName(ShaderHandle _handle, const char* _name)
+ {
+ s_ctx->setName(_handle, _name);
+ }
+
+ void destroy(ShaderHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyShader(_handle);
}
ProgramHandle createProgram(ShaderHandle _vsh, ShaderHandle _fsh, bool _destroyShaders)
{
- BGFX_CHECK_MAIN_THREAD();
if (!isValid(_fsh) )
{
return createProgram(_vsh, _destroyShaders);
@@ -3016,13 +3486,11 @@ error:
ProgramHandle createProgram(ShaderHandle _csh, bool _destroyShader)
{
- BGFX_CHECK_MAIN_THREAD();
return s_ctx->createProgram(_csh, _destroyShader);
}
- void destroyProgram(ProgramHandle _handle)
+ void destroy(ProgramHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyProgram(_handle);
}
@@ -3095,6 +3563,14 @@ error:
srgbCaps = BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB;
}
+ if (formatSupported
+ && 0 != (_flags & BGFX_TEXTURE_RT_MASK) )
+ {
+ formatSupported = 0 != (g_caps.formats[_format] & (0
+ | BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER
+ ) );
+ }
+
if (!formatSupported)
{
_err->setError(BGFX_ERROR_TEXTURE_VALIDATION
@@ -3105,7 +3581,7 @@ error:
}
if (0 != (_flags & BGFX_TEXTURE_MSAA_SAMPLE)
- && 0 == (g_caps.supported & BGFX_CAPS_FORMAT_TEXTURE_MSAA) )
+ && 0 == (g_caps.formats[_format] & BGFX_CAPS_FORMAT_TEXTURE_MSAA) )
{
_err->setError(BGFX_ERROR_TEXTURE_VALIDATION
, "MSAA sampling for this texture format is not supported."
@@ -3136,12 +3612,11 @@ error:
void calcTextureSize(TextureInfo& _info, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format)
{
- imageGetSize(&_info, _width, _height, _depth, _cubeMap, _hasMips, _numLayers, _format);
+ bimg::imageGetSize( (bimg::TextureInfo*)&_info, _width, _height, _depth, _cubeMap, _hasMips, _numLayers, bimg::TextureFormat::Enum(_format) );
}
TextureHandle createTexture(const Memory* _mem, uint32_t _flags, uint8_t _skip, TextureInfo* _info)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
return s_ctx->createTexture(_mem, _flags, _skip, _info, BackbufferRatio::Count);
}
@@ -3166,8 +3641,6 @@ error:
static TextureHandle createTexture2D(BackbufferRatio::Enum _ratio, uint16_t _width, uint16_t _height, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format, uint32_t _flags, const Memory* _mem)
{
- BGFX_CHECK_MAIN_THREAD();
-
bx::Error err;
isTextureValid(0, false, _numLayers, _format, _flags, &err);
BX_CHECK(err.isOk(), "%s (layers %d, format %s)"
@@ -3233,8 +3706,6 @@ error:
TextureHandle createTexture3D(uint16_t _width, uint16_t _height, uint16_t _depth, bool _hasMips, TextureFormat::Enum _format, uint32_t _flags, const Memory* _mem)
{
- BGFX_CHECK_MAIN_THREAD();
-
bx::Error err;
isTextureValid(_depth, false, 1, _format, _flags, &err);
BX_CHECK(err.isOk(), "%s", err.getMessage().getPtr() );
@@ -3276,8 +3747,6 @@ error:
TextureHandle createTextureCube(uint16_t _size, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format, uint32_t _flags, const Memory* _mem)
{
- BGFX_CHECK_MAIN_THREAD();
-
bx::Error err;
isTextureValid(0, true, _numLayers, _format, _flags, &err);
BX_CHECK(err.isOk(), "%s", err.getMessage().getPtr() );
@@ -3318,15 +3787,18 @@ error:
return s_ctx->createTexture(mem, _flags, 0, NULL, BackbufferRatio::Count);
}
- void destroyTexture(TextureHandle _handle)
+ void setName(TextureHandle _handle, const char* _name)
+ {
+ s_ctx->setName(_handle, _name);
+ }
+
+ void destroy(TextureHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyTexture(_handle);
}
void updateTexture2D(TextureHandle _handle, uint16_t _layer, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem, uint16_t _pitch)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
if (_width == 0
|| _height == 0)
@@ -3341,7 +3813,6 @@ error:
void updateTexture3D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const Memory* _mem)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
BGFX_CHECK_CAPS(BGFX_CAPS_TEXTURE_3D, "Texture3D is not supported!");
@@ -3359,7 +3830,6 @@ error:
void updateTextureCube(TextureHandle _handle, uint16_t _layer, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem, uint16_t _pitch)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _mem, "_mem can't be NULL");
BX_CHECK(_side <= 5, "Invalid side %d.", _side);
if (0 == _width
@@ -3375,7 +3845,6 @@ error:
uint32_t readTexture(TextureHandle _handle, void* _data, uint8_t _mip)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(NULL != _data, "_data can't be NULL");
BGFX_CHECK_CAPS(BGFX_CAPS_TEXTURE_READ_BACK, "Texture read-back is not supported!");
return s_ctx->readTexture(_handle, _data, _mip);
@@ -3411,9 +3880,9 @@ error:
FrameBufferHandle createFrameBuffer(uint8_t _num, const Attachment* _attachment, bool _destroyTextures)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(_num != 0, "Number of frame buffer attachments can't be 0.");
- BX_CHECK(_num <= BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS, "Number of frame buffer attachments is larger than allowed %d (max: %d)."
+ BX_CHECK(_num <= BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS
+ , "Number of frame buffer attachments is larger than allowed %d (max: %d)."
, _num
, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS
);
@@ -3423,117 +3892,113 @@ error:
FrameBufferHandle createFrameBuffer(void* _nwh, uint16_t _width, uint16_t _height, TextureFormat::Enum _depthFormat)
{
- BGFX_CHECK_MAIN_THREAD();
- return s_ctx->createFrameBuffer(_nwh, _width, _height, _depthFormat);
+ BGFX_CHECK_CAPS(BGFX_CAPS_SWAP_CHAIN, "Swap chain is not supported!");
+ BX_WARN(_width > 0 && _height > 0
+ , "Invalid frame buffer dimensions (width %d, height %d)."
+ , _width
+ , _height
+ );
+ return s_ctx->createFrameBuffer(
+ _nwh
+ , bx::uint16_max(_width, 1)
+ , bx::uint16_max(_height, 1)
+ , _depthFormat
+ );
}
TextureHandle getTexture(FrameBufferHandle _handle, uint8_t _attachment)
{
- BGFX_CHECK_MAIN_THREAD();
return s_ctx->getTexture(_handle, _attachment);
}
- void destroyFrameBuffer(FrameBufferHandle _handle)
+ void destroy(FrameBufferHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyFrameBuffer(_handle);
}
UniformHandle createUniform(const char* _name, UniformType::Enum _type, uint16_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
return s_ctx->createUniform(_name, _type, _num);
}
void getUniformInfo(UniformHandle _handle, UniformInfo& _info)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->getUniformInfo(_handle, _info);
}
- void destroyUniform(UniformHandle _handle)
+ void destroy(UniformHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->destroyUniform(_handle);
}
OcclusionQueryHandle createOcclusionQuery()
{
- BGFX_CHECK_MAIN_THREAD();
BGFX_CHECK_CAPS(BGFX_CAPS_OCCLUSION_QUERY, "Occlusion query is not supported!");
return s_ctx->createOcclusionQuery();
}
OcclusionQueryResult::Enum getResult(OcclusionQueryHandle _handle, int32_t* _result)
{
- BGFX_CHECK_MAIN_THREAD();
BGFX_CHECK_CAPS(BGFX_CAPS_OCCLUSION_QUERY, "Occlusion query is not supported!");
return s_ctx->getResult(_handle, _result);
}
- void destroyOcclusionQuery(OcclusionQueryHandle _handle)
+ void destroy(OcclusionQueryHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
BGFX_CHECK_CAPS(BGFX_CAPS_OCCLUSION_QUERY, "Occlusion query is not supported!");
s_ctx->destroyOcclusionQuery(_handle);
}
void setPaletteColor(uint8_t _index, uint32_t _rgba)
{
- BGFX_CHECK_MAIN_THREAD();
-
const uint8_t rr = uint8_t(_rgba>>24);
const uint8_t gg = uint8_t(_rgba>>16);
const uint8_t bb = uint8_t(_rgba>> 8);
const uint8_t aa = uint8_t(_rgba>> 0);
- float rgba[4] =
+ const float rgba[4] =
{
rr * 1.0f/255.0f,
gg * 1.0f/255.0f,
bb * 1.0f/255.0f,
aa * 1.0f/255.0f,
};
+
s_ctx->setPaletteColor(_index, rgba);
}
void setPaletteColor(uint8_t _index, float _r, float _g, float _b, float _a)
{
- BGFX_CHECK_MAIN_THREAD();
float rgba[4] = { _r, _g, _b, _a };
s_ctx->setPaletteColor(_index, rgba);
}
void setPaletteColor(uint8_t _index, const float _rgba[4])
{
- BGFX_CHECK_MAIN_THREAD();
s_ctx->setPaletteColor(_index, _rgba);
}
- bool checkView(uint8_t _id)
+ bool checkView(ViewId _id)
{
// workaround GCC 4.9 type-limit check.
const uint32_t id = _id;
return id < BGFX_CONFIG_MAX_VIEWS;
}
- void setViewName(uint8_t _id, const char* _name)
+ void setViewName(ViewId _id, const char* _name)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->setViewName(_id, _name);
}
- void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
+ void setViewRect(ViewId _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->setViewRect(_id, _x, _y, _width, _height);
}
- void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, BackbufferRatio::Enum _ratio)
+ void setViewRect(ViewId _id, uint16_t _x, uint16_t _y, BackbufferRatio::Enum _ratio)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
uint16_t width = uint16_t(s_ctx->m_resolution.m_width);
@@ -3542,122 +4007,112 @@ error:
setViewRect(_id, _x, _y, width, height);
}
- void setViewScissor(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
+ void setViewScissor(ViewId _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->setViewScissor(_id, _x, _y, _width, _height);
}
- void setViewClear(uint8_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
+ void setViewClear(ViewId _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->setViewClear(_id, _flags, _rgba, _depth, _stencil);
}
- void setViewClear(uint8_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7)
+ void setViewClear(ViewId _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->setViewClear(_id, _flags, _depth, _stencil, _0, _1, _2, _3, _4, _5, _6, _7);
}
- void setViewSeq(uint8_t _id, bool _enabled)
+ void setViewMode(ViewId _id, ViewMode::Enum _mode)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
- s_ctx->setViewSeq(_id, _enabled);
+ s_ctx->setViewMode(_id, _mode);
}
- void setViewFrameBuffer(uint8_t _id, FrameBufferHandle _handle)
+ void setViewFrameBuffer(ViewId _id, FrameBufferHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->setViewFrameBuffer(_id, _handle);
}
- void setViewTransform(uint8_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR)
+ void setViewTransform(ViewId _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->setViewTransform(_id, _view, _projL, _flags, _projR);
}
- void setViewOrder(uint8_t _id, uint8_t _num, const void* _order)
+ void setViewOrder(ViewId _id, uint16_t _num, const ViewId* _order)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->setViewOrder(_id, _num, _order);
}
- void resetView(uint8_t _id)
+ void resetView(ViewId _id)
{
- BGFX_CHECK_MAIN_THREAD();
BX_CHECK(checkView(_id), "Invalid view id: %d", _id);
s_ctx->resetView(_id);
}
void setMarker(const char* _marker)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setMarker(_marker);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setMarker(_marker);
}
void setState(uint64_t _state, uint32_t _rgba)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(0 == (_state&BGFX_STATE_RESERVED_MASK), "Do not set state reserved flags!");
- s_ctx->setState(_state, _rgba);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setState(_state, _rgba);
}
void setCondition(OcclusionQueryHandle _handle, bool _visible)
{
- BGFX_CHECK_MAIN_THREAD();
- BGFX_CHECK_CAPS(BGFX_CAPS_OCCLUSION_QUERY, "Occlusion query is not supported!");
- s_ctx->setCondition(_handle, _visible);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setCondition(_handle, _visible);
}
void setStencil(uint32_t _fstencil, uint32_t _bstencil)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setStencil(_fstencil, _bstencil);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setStencil(_fstencil, _bstencil);
}
uint16_t setScissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
{
- BGFX_CHECK_MAIN_THREAD();
- return s_ctx->setScissor(_x, _y, _width, _height);
+ BGFX_CHECK_API_THREAD();
+ return s_ctx->m_encoder0->setScissor(_x, _y, _width, _height);
}
void setScissor(uint16_t _cache)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setScissor(_cache);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setScissor(_cache);
}
uint32_t setTransform(const void* _mtx, uint16_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
- return s_ctx->setTransform(_mtx, _num);
+ BGFX_CHECK_API_THREAD();
+ return s_ctx->m_encoder0->setTransform(_mtx, _num);
}
uint32_t allocTransform(Transform* _transform, uint16_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
- return s_ctx->allocTransform(_transform, _num);
+ BGFX_CHECK_API_THREAD();
+ return s_ctx->m_encoder0->allocTransform(_transform, _num);
}
void setTransform(uint32_t _cache, uint16_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setTransform(_cache, _num);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setTransform(_cache, _num);
}
void setUniform(UniformHandle _handle, const void* _value, uint16_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setUniform(_handle, _value, _num);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setUniform(_handle, _value, _num);
}
void setIndexBuffer(IndexBufferHandle _handle)
@@ -3667,8 +4122,8 @@ error:
void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setIndexBuffer(_handle, _firstIndex, _numIndices);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setIndexBuffer(_handle, _firstIndex, _numIndices);
}
void setIndexBuffer(DynamicIndexBufferHandle _handle)
@@ -3678,8 +4133,8 @@ error:
void setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setIndexBuffer(_handle, _firstIndex, _numIndices);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setIndexBuffer(_handle, _firstIndex, _numIndices);
}
void setIndexBuffer(const TransientIndexBuffer* _tib)
@@ -3689,184 +4144,260 @@ error:
void setIndexBuffer(const TransientIndexBuffer* _tib, uint32_t _firstIndex, uint32_t _numIndices)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(NULL != _tib, "_tib can't be NULL");
- uint32_t numIndices = bx::uint32_min(_numIndices, _tib->size/2);
- s_ctx->setIndexBuffer(_tib, _tib->startIndex + _firstIndex, numIndices);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setIndexBuffer(_tib, _firstIndex, _numIndices);
}
- void setVertexBuffer(VertexBufferHandle _handle)
+ void setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices)
{
- setVertexBuffer(_handle, 0, UINT32_MAX);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setVertexBuffer(_stream, _handle, _startVertex, _numVertices);
}
- void setVertexBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices)
+ void setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setVertexBuffer(0, _handle, _startVertex, _numVertices);
+ setVertexBuffer(_stream, _handle, 0, UINT32_MAX);
}
- void setVertexBuffer(DynamicVertexBufferHandle _handle)
+ void setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices)
{
- setVertexBuffer(_handle, 0, UINT32_MAX);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setVertexBuffer(_stream, _handle, _startVertex, _numVertices);
}
- void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices)
+ void setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setVertexBuffer(0, _handle, _startVertex, _numVertices);
+ setVertexBuffer(_stream, _handle, 0, UINT32_MAX);
}
- void setVertexBuffer(const TransientVertexBuffer* _tvb)
+ void setVertexBuffer(uint8_t _stream, const TransientVertexBuffer* _tvb, uint32_t _startVertex, uint32_t _numVertices)
{
- setVertexBuffer(_tvb, 0, UINT32_MAX);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setVertexBuffer(_stream, _tvb, _startVertex, _numVertices);
}
- void setVertexBuffer(const TransientVertexBuffer* _tvb, uint32_t _startVertex, uint32_t _numVertices)
+ void setVertexBuffer(uint8_t _stream, const TransientVertexBuffer* _tvb)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(NULL != _tvb, "_tvb can't be NULL");
- s_ctx->setVertexBuffer(0, _tvb, _startVertex, _numVertices);
+ setVertexBuffer(_stream, _tvb, 0, UINT32_MAX);
}
void setInstanceDataBuffer(const InstanceDataBuffer* _idb, uint32_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(NULL != _idb, "_idb can't be NULL");
- s_ctx->setInstanceDataBuffer(_idb, _num);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setInstanceDataBuffer(_idb, _num);
}
void setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setInstanceDataBuffer(_handle, _startVertex, _num);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setInstanceDataBuffer(_handle, _startVertex, _num);
}
void setInstanceDataBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num)
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->setInstanceDataBuffer(_handle, _startVertex, _num);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setInstanceDataBuffer(_handle, _startVertex, _num);
}
void setTexture(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint32_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
- s_ctx->setTexture(_stage, _sampler, _handle, _flags);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setTexture(_stage, _sampler, _handle, _flags);
}
- uint32_t touch(uint8_t _id)
+ void touch(ViewId _id)
{
ProgramHandle handle = BGFX_INVALID_HANDLE;
- return submit(_id, handle);
+ submit(_id, handle);
}
- uint32_t submit(uint8_t _id, ProgramHandle _program, int32_t _depth, bool _preserveState)
+ void submit(ViewId _id, ProgramHandle _program, int32_t _depth, bool _preserveState)
{
OcclusionQueryHandle handle = BGFX_INVALID_HANDLE;
- return submit(_id, _program, handle, _depth, _preserveState);
+ submit(_id, _program, handle, _depth, _preserveState);
}
- uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState)
+ void submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(false
- || !isValid(_occlusionQuery)
- || 0 != (g_caps.supported & BGFX_CAPS_OCCLUSION_QUERY)
- , "Occlusion query is not supported! Use bgfx::getCaps to check BGFX_CAPS_OCCLUSION_QUERY backend renderer capabilities."
- );
- return s_ctx->submit(_id, _program, _occlusionQuery, _depth, _preserveState);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->submit(_id, _program, _occlusionQuery, _depth, _preserveState);
}
- uint32_t submit(uint8_t _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
+ void submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
{
- BGFX_CHECK_MAIN_THREAD();
- BGFX_CHECK_CAPS(BGFX_CAPS_DRAW_INDIRECT, "Draw indirect is not supported! Use bgfx::getCaps to check BGFX_CAPS_DRAW_INDIRECT backend renderer capabilities.");
- return s_ctx->submit(_id, _program, _indirectHandle, _start, _num, _depth, _preserveState);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->submit(_id, _program, _indirectHandle, _start, _num, _depth, _preserveState);
}
void setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
- s_ctx->setBuffer(_stage, _handle, _access);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setBuffer(_stage, _handle, _access);
}
void setBuffer(uint8_t _stage, VertexBufferHandle _handle, Access::Enum _access)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
- s_ctx->setBuffer(_stage, _handle, _access);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setBuffer(_stage, _handle, _access);
}
void setBuffer(uint8_t _stage, DynamicIndexBufferHandle _handle, Access::Enum _access)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
- s_ctx->setBuffer(_stage, _handle, _access);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setBuffer(_stage, _handle, _access);
}
void setBuffer(uint8_t _stage, DynamicVertexBufferHandle _handle, Access::Enum _access)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
- s_ctx->setBuffer(_stage, _handle, _access);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setBuffer(_stage, _handle, _access);
}
void setBuffer(uint8_t _stage, IndirectBufferHandle _handle, Access::Enum _access)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
- s_ctx->setBuffer(_stage, _handle, _access);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setBuffer(_stage, _handle, _access);
}
void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format)
{
- BGFX_CHECK_MAIN_THREAD();
- BX_CHECK(_stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, "Invalid stage %d (max %d).", _stage, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS);
- s_ctx->setImage(_stage, _sampler, _handle, _mip, _access, _format);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->setImage(_stage, _sampler, _handle, _mip, _access, _format);
}
- uint32_t dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags)
+ void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
- BGFX_CHECK_CAPS(BGFX_CAPS_COMPUTE, "Compute is not supported! Use bgfx::getCaps to check BGFX_CAPS_COMPUTE backend renderer capabilities.");
- return s_ctx->dispatch(_id, _handle, _numX, _numY, _numZ, _flags);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->dispatch(_id, _handle, _numX, _numY, _numZ, _flags);
}
- uint32_t dispatch(uint8_t _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
+ void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
{
- BGFX_CHECK_MAIN_THREAD();
- BGFX_CHECK_CAPS(BGFX_CAPS_DRAW_INDIRECT, "Dispatch indirect is not supported! Use bgfx::getCaps to check BGFX_CAPS_DRAW_INDIRECT backend renderer capabilities.");
- BGFX_CHECK_CAPS(BGFX_CAPS_COMPUTE, "Compute is not supported! Use bgfx::getCaps to check BGFX_CAPS_COMPUTE backend renderer capabilities.");
- return s_ctx->dispatch(_id, _handle, _indirectHandle, _start, _num, _flags);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->dispatch(_id, _handle, _indirectHandle, _start, _num, _flags);
}
void discard()
{
- BGFX_CHECK_MAIN_THREAD();
- s_ctx->discard();
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->discard();
}
- void blit(uint8_t _id, TextureHandle _dst, uint16_t _dstX, uint16_t _dstY, TextureHandle _src, uint16_t _srcX, uint16_t _srcY, uint16_t _width, uint16_t _height)
+ void blit(ViewId _id, TextureHandle _dst, uint16_t _dstX, uint16_t _dstY, TextureHandle _src, uint16_t _srcX, uint16_t _srcY, uint16_t _width, uint16_t _height)
{
blit(_id, _dst, 0, _dstX, _dstY, 0, _src, 0, _srcX, _srcY, 0, _width, _height, 0);
}
- void blit(uint8_t _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth)
+ void blit(ViewId _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth)
{
- BGFX_CHECK_MAIN_THREAD();
- BGFX_CHECK_CAPS(BGFX_CAPS_TEXTURE_BLIT, "Texture blit is not supported!");
- s_ctx->blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth);
+ BGFX_CHECK_API_THREAD();
+ s_ctx->m_encoder0->blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth);
}
void requestScreenShot(FrameBufferHandle _handle, const char* _filePath)
{
- BGFX_CHECK_MAIN_THREAD();
+ BGFX_CHECK_API_THREAD();
s_ctx->requestScreenShot(_handle, _filePath);
}
} // namespace bgfx
+#if BX_PLATFORM_WINDOWS
+extern "C"
+{
+ // When laptop setup has integrated and discrete GPU, following driver workarounds will
+ // select discrete GPU:
+
+ // Reference: https://docs.nvidia.com/gameworks/content/technologies/desktop/optimus.htm
+ __declspec(dllexport) uint32_t NvOptimusEnablement = UINT32_C(1);
+
+ // Reference: http://gpuopen.com/amdpowerxpressrequesthighperformance/
+ __declspec(dllexport) uint32_t AmdPowerXpressRequestHighPerformance = UINT32_C(1);
+}
+#endif // BX_PLATFORM_WINDOWS
+
+#define BGFX_TEXTURE_FORMAT_BIMG(_fmt) \
+ BX_STATIC_ASSERT(uint32_t(bgfx::TextureFormat::_fmt) == uint32_t(bimg::TextureFormat::_fmt) )
+
+BGFX_TEXTURE_FORMAT_BIMG(BC1);
+BGFX_TEXTURE_FORMAT_BIMG(BC2);
+BGFX_TEXTURE_FORMAT_BIMG(BC3);
+BGFX_TEXTURE_FORMAT_BIMG(BC4);
+BGFX_TEXTURE_FORMAT_BIMG(BC5);
+BGFX_TEXTURE_FORMAT_BIMG(BC6H);
+BGFX_TEXTURE_FORMAT_BIMG(BC7);
+BGFX_TEXTURE_FORMAT_BIMG(ETC1);
+BGFX_TEXTURE_FORMAT_BIMG(ETC2);
+BGFX_TEXTURE_FORMAT_BIMG(ETC2A);
+BGFX_TEXTURE_FORMAT_BIMG(ETC2A1);
+BGFX_TEXTURE_FORMAT_BIMG(PTC12);
+BGFX_TEXTURE_FORMAT_BIMG(PTC14);
+BGFX_TEXTURE_FORMAT_BIMG(PTC12A);
+BGFX_TEXTURE_FORMAT_BIMG(PTC14A);
+BGFX_TEXTURE_FORMAT_BIMG(PTC22);
+BGFX_TEXTURE_FORMAT_BIMG(PTC24);
+BGFX_TEXTURE_FORMAT_BIMG(Unknown);
+BGFX_TEXTURE_FORMAT_BIMG(R1);
+BGFX_TEXTURE_FORMAT_BIMG(A8);
+BGFX_TEXTURE_FORMAT_BIMG(R8);
+BGFX_TEXTURE_FORMAT_BIMG(R8I);
+BGFX_TEXTURE_FORMAT_BIMG(R8U);
+BGFX_TEXTURE_FORMAT_BIMG(R8S);
+BGFX_TEXTURE_FORMAT_BIMG(R16);
+BGFX_TEXTURE_FORMAT_BIMG(R16I);
+BGFX_TEXTURE_FORMAT_BIMG(R16U);
+BGFX_TEXTURE_FORMAT_BIMG(R16F);
+BGFX_TEXTURE_FORMAT_BIMG(R16S);
+BGFX_TEXTURE_FORMAT_BIMG(R32I);
+BGFX_TEXTURE_FORMAT_BIMG(R32U);
+BGFX_TEXTURE_FORMAT_BIMG(R32F);
+BGFX_TEXTURE_FORMAT_BIMG(RG8);
+BGFX_TEXTURE_FORMAT_BIMG(RG8I);
+BGFX_TEXTURE_FORMAT_BIMG(RG8U);
+BGFX_TEXTURE_FORMAT_BIMG(RG8S);
+BGFX_TEXTURE_FORMAT_BIMG(RG16);
+BGFX_TEXTURE_FORMAT_BIMG(RG16I);
+BGFX_TEXTURE_FORMAT_BIMG(RG16U);
+BGFX_TEXTURE_FORMAT_BIMG(RG16F);
+BGFX_TEXTURE_FORMAT_BIMG(RG16S);
+BGFX_TEXTURE_FORMAT_BIMG(RG32I);
+BGFX_TEXTURE_FORMAT_BIMG(RG32U);
+BGFX_TEXTURE_FORMAT_BIMG(RG32F);
+BGFX_TEXTURE_FORMAT_BIMG(RGB8);
+BGFX_TEXTURE_FORMAT_BIMG(RGB8I);
+BGFX_TEXTURE_FORMAT_BIMG(RGB8U);
+BGFX_TEXTURE_FORMAT_BIMG(RGB8S);
+BGFX_TEXTURE_FORMAT_BIMG(RGB9E5F);
+BGFX_TEXTURE_FORMAT_BIMG(BGRA8);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA8);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA8I);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA8U);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA8S);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA16);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA16I);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA16U);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA16F);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA16S);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA32I);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA32U);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA32F);
+BGFX_TEXTURE_FORMAT_BIMG(R5G6B5);
+BGFX_TEXTURE_FORMAT_BIMG(RGBA4);
+BGFX_TEXTURE_FORMAT_BIMG(RGB5A1);
+BGFX_TEXTURE_FORMAT_BIMG(RGB10A2);
+BGFX_TEXTURE_FORMAT_BIMG(RG11B10F);
+BGFX_TEXTURE_FORMAT_BIMG(UnknownDepth);
+BGFX_TEXTURE_FORMAT_BIMG(D16);
+BGFX_TEXTURE_FORMAT_BIMG(D24);
+BGFX_TEXTURE_FORMAT_BIMG(D24S8);
+BGFX_TEXTURE_FORMAT_BIMG(D32);
+BGFX_TEXTURE_FORMAT_BIMG(D16F);
+BGFX_TEXTURE_FORMAT_BIMG(D24F);
+BGFX_TEXTURE_FORMAT_BIMG(D32F);
+BGFX_TEXTURE_FORMAT_BIMG(D0S8);
+BGFX_TEXTURE_FORMAT_BIMG(Count);
+
+#undef BGFX_TEXTURE_FORMAT_BIMG
+
#include <bgfx/c99/bgfx.h>
#include <bgfx/c99/platform.h>
@@ -3941,47 +4472,62 @@ namespace bgfx
{
}
- virtual void fatal(Fatal::Enum _code, const char* _str) BX_OVERRIDE
+ virtual void fatal(Fatal::Enum _code, const char* _str) override
{
m_interface->vtbl->fatal(m_interface, (bgfx_fatal_t)_code, _str);
}
- virtual void traceVargs(const char* _filePath, uint16_t _line, const char* _format, va_list _argList) BX_OVERRIDE
+ virtual void traceVargs(const char* _filePath, uint16_t _line, const char* _format, va_list _argList) override
{
m_interface->vtbl->trace_vargs(m_interface, _filePath, _line, _format, _argList);
}
- virtual uint32_t cacheReadSize(uint64_t _id) BX_OVERRIDE
+ virtual void profilerBegin(const char* _name, uint32_t _abgr, const char* _filePath, uint16_t _line) override
+ {
+ m_interface->vtbl->profiler_begin(m_interface, _name, _abgr, _filePath, _line);
+ }
+
+ virtual void profilerBeginLiteral(const char* _name, uint32_t _abgr, const char* _filePath, uint16_t _line) override
+ {
+ m_interface->vtbl->profiler_begin_literal(m_interface, _name, _abgr, _filePath, _line);
+ }
+
+ virtual void profilerEnd() override
+ {
+ m_interface->vtbl->profiler_end(m_interface);
+ }
+
+ virtual uint32_t cacheReadSize(uint64_t _id) override
{
return m_interface->vtbl->cache_read_size(m_interface, _id);
}
- virtual bool cacheRead(uint64_t _id, void* _data, uint32_t _size) BX_OVERRIDE
+ virtual bool cacheRead(uint64_t _id, void* _data, uint32_t _size) override
{
return m_interface->vtbl->cache_read(m_interface, _id, _data, _size);
}
- virtual void cacheWrite(uint64_t _id, const void* _data, uint32_t _size) BX_OVERRIDE
+ virtual void cacheWrite(uint64_t _id, const void* _data, uint32_t _size) override
{
m_interface->vtbl->cache_write(m_interface, _id, _data, _size);
}
- virtual void screenShot(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _data, uint32_t _size, bool _yflip) BX_OVERRIDE
+ virtual void screenShot(const char* _filePath, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _data, uint32_t _size, bool _yflip) override
{
m_interface->vtbl->screen_shot(m_interface, _filePath, _width, _height, _pitch, _data, _size, _yflip);
}
- virtual void captureBegin(uint32_t _width, uint32_t _height, uint32_t _pitch, TextureFormat::Enum _format, bool _yflip) BX_OVERRIDE
+ virtual void captureBegin(uint32_t _width, uint32_t _height, uint32_t _pitch, TextureFormat::Enum _format, bool _yflip) override
{
m_interface->vtbl->capture_begin(m_interface, _width, _height, _pitch, (bgfx_texture_format_t)_format, _yflip);
}
- virtual void captureEnd() BX_OVERRIDE
+ virtual void captureEnd() override
{
m_interface->vtbl->capture_end(m_interface);
}
- virtual void captureFrame(const void* _data, uint32_t _size) BX_OVERRIDE
+ virtual void captureFrame(const void* _data, uint32_t _size) override
{
m_interface->vtbl->capture_frame(m_interface, _data, _size);
}
@@ -3996,7 +4542,7 @@ namespace bgfx
{
}
- virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) BX_OVERRIDE
+ virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) override
{
return m_interface->vtbl->realloc(m_interface, _ptr, _size, _align, _file, _line);
}
@@ -4070,16 +4616,6 @@ void bgfx_topology_sort_tri_list(bgfx_topology_sort_t _sort, void* _dst, uint32_
bgfx::topologySortTriList(bgfx::TopologySort::Enum(_sort), _dst, _dstSize, _dir, _pos, _vertices, _stride, _indices, _numIndices, _index32);
}
-BGFX_C_API void bgfx_image_swizzle_bgra8(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
-{
- bgfx::imageSwizzleBgra8(_dst, _width, _height, _pitch, _src);
-}
-
-BGFX_C_API void bgfx_image_rgba8_downsample_2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
-{
- bgfx::imageRgba8Downsample2x2(_dst, _width, _height, _pitch, _src);
-}
-
BGFX_C_API uint8_t bgfx_get_supported_renderers(uint8_t _max, bgfx_renderer_type_t* _enum)
{
return bgfx::getSupportedRenderers(_max, (bgfx::RendererType::Enum*)_enum);
@@ -4199,7 +4735,7 @@ BGFX_C_API bgfx_index_buffer_handle_t bgfx_create_index_buffer(const bgfx_memory
BGFX_C_API void bgfx_destroy_index_buffer(bgfx_index_buffer_handle_t _handle)
{
union { bgfx_index_buffer_handle_t c; bgfx::IndexBufferHandle cpp; } handle = { _handle };
- bgfx::destroyIndexBuffer(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API bgfx_vertex_buffer_handle_t bgfx_create_vertex_buffer(const bgfx_memory_t* _mem, const bgfx_vertex_decl_t* _decl, uint16_t _flags)
@@ -4213,7 +4749,7 @@ BGFX_C_API bgfx_vertex_buffer_handle_t bgfx_create_vertex_buffer(const bgfx_memo
BGFX_C_API void bgfx_destroy_vertex_buffer(bgfx_vertex_buffer_handle_t _handle)
{
union { bgfx_vertex_buffer_handle_t c; bgfx::VertexBufferHandle cpp; } handle = { _handle };
- bgfx::destroyVertexBuffer(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API bgfx_dynamic_index_buffer_handle_t bgfx_create_dynamic_index_buffer(uint32_t _num, uint16_t _flags)
@@ -4239,7 +4775,7 @@ BGFX_C_API void bgfx_update_dynamic_index_buffer(bgfx_dynamic_index_buffer_handl
BGFX_C_API void bgfx_destroy_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t _handle)
{
union { bgfx_dynamic_index_buffer_handle_t c; bgfx::DynamicIndexBufferHandle cpp; } handle = { _handle };
- bgfx::destroyDynamicIndexBuffer(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API bgfx_dynamic_vertex_buffer_handle_t bgfx_create_dynamic_vertex_buffer(uint32_t _num, const bgfx_vertex_decl_t* _decl, uint16_t _flags)
@@ -4267,7 +4803,7 @@ BGFX_C_API void bgfx_update_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_han
BGFX_C_API void bgfx_destroy_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle)
{
union { bgfx_dynamic_vertex_buffer_handle_t c; bgfx::DynamicVertexBufferHandle cpp; } handle = { _handle };
- bgfx::destroyDynamicVertexBuffer(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API uint32_t bgfx_get_avail_transient_index_buffer(uint32_t _num)
@@ -4303,9 +4839,9 @@ BGFX_C_API bool bgfx_alloc_transient_buffers(bgfx_transient_vertex_buffer_t* _tv
return bgfx::allocTransientBuffers( (bgfx::TransientVertexBuffer*)_tvb, decl, _numVertices, (bgfx::TransientIndexBuffer*)_tib, _numIndices);
}
-BGFX_C_API const bgfx_instance_data_buffer_t* bgfx_alloc_instance_data_buffer(uint32_t _num, uint16_t _stride)
+BGFX_C_API void bgfx_alloc_instance_data_buffer(bgfx_instance_data_buffer_t* _idb, uint32_t _num, uint16_t _stride)
{
- return (bgfx_instance_data_buffer_t*)bgfx::allocInstanceDataBuffer(_num, _stride);
+ bgfx::allocInstanceDataBuffer( (bgfx::InstanceDataBuffer*)_idb, _num, _stride);
}
BGFX_C_API bgfx_indirect_buffer_handle_t bgfx_create_indirect_buffer(uint32_t _num)
@@ -4318,7 +4854,7 @@ BGFX_C_API bgfx_indirect_buffer_handle_t bgfx_create_indirect_buffer(uint32_t _n
BGFX_C_API void bgfx_destroy_indirect_buffer(bgfx_indirect_buffer_handle_t _handle)
{
union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } handle = { _handle };
- bgfx::destroyIndirectBuffer(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API bgfx_shader_handle_t bgfx_create_shader(const bgfx_memory_t* _mem)
@@ -4334,10 +4870,16 @@ BGFX_C_API uint16_t bgfx_get_shader_uniforms(bgfx_shader_handle_t _handle, bgfx_
return bgfx::getShaderUniforms(handle.cpp, (bgfx::UniformHandle*)_uniforms, _max);
}
+BGFX_C_API void bgfx_set_shader_name(bgfx_shader_handle_t _handle, const char* _name)
+{
+ union { bgfx_shader_handle_t c; bgfx::ShaderHandle cpp; } handle = { _handle };
+ bgfx::setName(handle.cpp, _name);
+}
+
BGFX_C_API void bgfx_destroy_shader(bgfx_shader_handle_t _handle)
{
union { bgfx_shader_handle_t c; bgfx::ShaderHandle cpp; } handle = { _handle };
- bgfx::destroyShader(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API bgfx_program_handle_t bgfx_create_program(bgfx_shader_handle_t _vsh, bgfx_shader_handle_t _fsh, bool _destroyShaders)
@@ -4360,7 +4902,7 @@ BGFX_C_API bgfx_program_handle_t bgfx_create_compute_program(bgfx_shader_handle_
BGFX_C_API void bgfx_destroy_program(bgfx_program_handle_t _handle)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
- bgfx::destroyProgram(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API bool bgfx_is_texture_valid(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, bgfx_texture_format_t _format, uint32_t _flags)
@@ -4434,10 +4976,16 @@ BGFX_C_API uint32_t bgfx_read_texture(bgfx_texture_handle_t _handle, void* _data
return bgfx::readTexture(handle.cpp, _data, _mip);
}
+BGFX_C_API void bgfx_set_texture_name(bgfx_texture_handle_t _handle, const char* _name)
+{
+ union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle };
+ bgfx::setName(handle.cpp, _name);
+}
+
BGFX_C_API void bgfx_destroy_texture(bgfx_texture_handle_t _handle)
{
union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle };
- bgfx::destroyTexture(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer(uint16_t _width, uint16_t _height, bgfx_texture_format_t _format, uint32_t _textureFlags)
@@ -4486,7 +5034,7 @@ BGFX_C_API bgfx_texture_handle_t bgfx_get_texture(bgfx_frame_buffer_handle_t _ha
BGFX_C_API void bgfx_destroy_frame_buffer(bgfx_frame_buffer_handle_t _handle)
{
union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle };
- bgfx::destroyFrameBuffer(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API bgfx_uniform_handle_t bgfx_create_uniform(const char* _name, bgfx_uniform_type_t _type, uint16_t _num)
@@ -4506,7 +5054,7 @@ BGFX_C_API void bgfx_get_uniform_info(bgfx_uniform_handle_t _handle, bgfx_unifor
BGFX_C_API void bgfx_destroy_uniform(bgfx_uniform_handle_t _handle)
{
union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } handle = { _handle };
- bgfx::destroyUniform(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API bgfx_occlusion_query_handle_t bgfx_create_occlusion_query()
@@ -4525,7 +5073,7 @@ BGFX_C_API bgfx_occlusion_query_result_t bgfx_get_result(bgfx_occlusion_query_ha
BGFX_C_API void bgfx_destroy_occlusion_query(bgfx_occlusion_query_handle_t _handle)
{
union { bgfx_occlusion_query_handle_t c; bgfx::OcclusionQueryHandle cpp; } handle = { _handle };
- bgfx::destroyOcclusionQuery(handle.cpp);
+ bgfx::destroy(handle.cpp);
}
BGFX_C_API void bgfx_set_palette_color(uint8_t _index, const float _rgba[4])
@@ -4533,63 +5081,63 @@ BGFX_C_API void bgfx_set_palette_color(uint8_t _index, const float _rgba[4])
bgfx::setPaletteColor(_index, _rgba);
}
-BGFX_C_API void bgfx_set_view_name(uint8_t _id, const char* _name)
+BGFX_C_API void bgfx_set_view_name(bgfx_view_id_t _id, const char* _name)
{
bgfx::setViewName(_id, _name);
}
-BGFX_C_API void bgfx_set_view_rect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
+BGFX_C_API void bgfx_set_view_rect(bgfx_view_id_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
{
bgfx::setViewRect(_id, _x, _y, _width, _height);
}
-BGFX_C_API void bgfx_set_view_rect_auto(uint8_t _id, uint16_t _x, uint16_t _y, bgfx_backbuffer_ratio_t _ratio)
+BGFX_C_API void bgfx_set_view_rect_auto(bgfx_view_id_t _id, uint16_t _x, uint16_t _y, bgfx_backbuffer_ratio_t _ratio)
{
bgfx::setViewRect(_id, _x, _y, bgfx::BackbufferRatio::Enum(_ratio));
}
-BGFX_C_API void bgfx_set_view_scissor(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
+BGFX_C_API void bgfx_set_view_scissor(bgfx_view_id_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
{
bgfx::setViewScissor(_id, _x, _y, _width, _height);
}
-BGFX_C_API void bgfx_set_view_clear(uint8_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
+BGFX_C_API void bgfx_set_view_clear(bgfx_view_id_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
{
bgfx::setViewClear(_id, _flags, _rgba, _depth, _stencil);
}
-BGFX_C_API void bgfx_set_view_clear_mrt(uint8_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7)
+BGFX_C_API void bgfx_set_view_clear_mrt(bgfx_view_id_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7)
{
bgfx::setViewClear(_id, _flags, _depth, _stencil, _0, _1, _2, _3, _4, _5, _6, _7);
}
-BGFX_C_API void bgfx_set_view_seq(uint8_t _id, bool _enabled)
+BGFX_C_API void bgfx_set_view_mode(bgfx_view_id_t _id, bgfx_view_mode_t _mode)
{
- bgfx::setViewSeq(_id, _enabled);
+ bgfx::setViewMode(_id, bgfx::ViewMode::Enum(_mode) );
}
-BGFX_C_API void bgfx_set_view_frame_buffer(uint8_t _id, bgfx_frame_buffer_handle_t _handle)
+BGFX_C_API void bgfx_set_view_frame_buffer(bgfx_view_id_t _id, bgfx_frame_buffer_handle_t _handle)
{
union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle };
bgfx::setViewFrameBuffer(_id, handle.cpp);
}
-BGFX_C_API void bgfx_set_view_transform(uint8_t _id, const void* _view, const void* _proj)
+BGFX_C_API void bgfx_set_view_transform(bgfx_view_id_t _id, const void* _view, const void* _proj)
{
bgfx::setViewTransform(_id, _view, _proj);
}
-BGFX_C_API void bgfx_set_view_transform_stereo(uint8_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR)
+BGFX_C_API void bgfx_set_view_transform_stereo(bgfx_view_id_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR)
{
bgfx::setViewTransform(_id, _view, _projL, _flags, _projR);
}
-BGFX_C_API void bgfx_set_view_order(uint8_t _id, uint8_t _num, const void* _order)
+BGFX_C_API void bgfx_set_view_order(bgfx_view_id_t _id, uint16_t _num, const bgfx_view_id_t* _order)
{
bgfx::setViewOrder(_id, _num, _order);
}
-BGFX_C_API void bgfx_reset_view(uint8_t _id)
+BGFX_C_API void bgfx_reset_view(bgfx_view_id_t _id)
{
bgfx::resetView(_id);
}
@@ -4663,21 +5211,21 @@ BGFX_C_API void bgfx_set_transient_index_buffer(const bgfx_transient_index_buffe
bgfx::setIndexBuffer( (const bgfx::TransientIndexBuffer*)_tib, _firstIndex, _numIndices);
}
-BGFX_C_API void bgfx_set_vertex_buffer(bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices)
+BGFX_C_API void bgfx_set_vertex_buffer(uint8_t _stream, bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices)
{
union { bgfx_vertex_buffer_handle_t c; bgfx::VertexBufferHandle cpp; } handle = { _handle };
- bgfx::setVertexBuffer(handle.cpp, _startVertex, _numVertices);
+ bgfx::setVertexBuffer(_stream, handle.cpp, _startVertex, _numVertices);
}
-BGFX_C_API void bgfx_set_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices)
+BGFX_C_API void bgfx_set_dynamic_vertex_buffer(uint8_t _stream, bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices)
{
union { bgfx_dynamic_vertex_buffer_handle_t c; bgfx::DynamicVertexBufferHandle cpp; } handle = { _handle };
- bgfx::setVertexBuffer(handle.cpp, _startVertex, _numVertices);
+ bgfx::setVertexBuffer(_stream, handle.cpp, _startVertex, _numVertices);
}
-BGFX_C_API void bgfx_set_transient_vertex_buffer(const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices)
+BGFX_C_API void bgfx_set_transient_vertex_buffer(uint8_t _stream, const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices)
{
- bgfx::setVertexBuffer( (const bgfx::TransientVertexBuffer*)_tvb, _startVertex, _numVertices);
+ bgfx::setVertexBuffer(_stream, (const bgfx::TransientVertexBuffer*)_tvb, _startVertex, _numVertices);
}
BGFX_C_API void bgfx_set_instance_data_buffer(const bgfx_instance_data_buffer_t* _idb, uint32_t _num)
@@ -4704,29 +5252,29 @@ BGFX_C_API void bgfx_set_texture(uint8_t _stage, bgfx_uniform_handle_t _sampler,
bgfx::setTexture(_stage, sampler.cpp, handle.cpp, _flags);
}
-BGFX_C_API uint32_t bgfx_touch(uint8_t _id)
+BGFX_C_API void bgfx_touch(bgfx_view_id_t _id)
{
return bgfx::touch(_id);
}
-BGFX_C_API uint32_t bgfx_submit(uint8_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState)
+BGFX_C_API void bgfx_submit(bgfx_view_id_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
- return bgfx::submit(_id, handle.cpp, _depth, _preserveState);
+ bgfx::submit(_id, handle.cpp, _depth, _preserveState);
}
-BGFX_C_API uint32_t bgfx_submit_occlusion_query(uint8_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState)
+BGFX_C_API void bgfx_submit_occlusion_query(bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program };
union { bgfx_occlusion_query_handle c; bgfx::OcclusionQueryHandle cpp; } occlusionQuery = { _occlusionQuery };
- return bgfx::submit(_id, program.cpp, occlusionQuery.cpp, _depth, _preserveState);
+ bgfx::submit(_id, program.cpp, occlusionQuery.cpp, _depth, _preserveState);
}
-BGFX_C_API uint32_t bgfx_submit_indirect(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
+BGFX_C_API void bgfx_submit_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle };
- return bgfx::submit(_id, handle.cpp, indirectHandle.cpp, _start, _num, _depth, _preserveState);
+ bgfx::submit(_id, handle.cpp, indirectHandle.cpp, _start, _num, _depth, _preserveState);
}
BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format)
@@ -4766,17 +5314,17 @@ BGFX_C_API void bgfx_set_compute_indirect_buffer(uint8_t _stage, bgfx_indirect_b
bgfx::setBuffer(_stage, handle.cpp, bgfx::Access::Enum(_access) );
}
-BGFX_C_API uint32_t bgfx_dispatch(uint8_t _id, bgfx_program_handle_t _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags)
+BGFX_C_API void bgfx_dispatch(bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
- return bgfx::dispatch(_id, handle.cpp, _numX, _numY, _numZ, _flags);
+ bgfx::dispatch(_id, handle.cpp, _numX, _numY, _numZ, _flags);
}
-BGFX_C_API uint32_t bgfx_dispatch_indirect(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
+BGFX_C_API void bgfx_dispatch_indirect(bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle };
- return bgfx::dispatch(_id, handle.cpp, indirectHandle.cpp, _start, _num, _flags);
+ bgfx::dispatch(_id, handle.cpp, indirectHandle.cpp, _start, _num, _flags);
}
BGFX_C_API void bgfx_discard()
@@ -4784,22 +5332,223 @@ BGFX_C_API void bgfx_discard()
bgfx::discard();
}
-BGFX_C_API void bgfx_blit(uint8_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth)
+BGFX_C_API void bgfx_blit(bgfx_view_id_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth)
{
union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } dst = { _dst };
union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } src = { _src };
bgfx::blit(_id, dst.cpp, _dstMip, _dstX, _dstY, _dstZ, src.cpp, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth);
}
+#define BGFX_ENCODER(_func) reinterpret_cast<bgfx::Encoder*>(_encoder)->_func
+
+BGFX_C_API void bgfx_encoder_set_marker(bgfx_encoder* _encoder, const char* _marker)
+{
+ BGFX_ENCODER(setMarker(_marker) );
+}
+
+BGFX_C_API void bgfx_encoder_set_state(bgfx_encoder* _encoder, uint64_t _state, uint32_t _rgba)
+{
+ BGFX_ENCODER(setState(_state, _rgba) );
+}
+
+BGFX_C_API void bgfx_encoder_set_condition(bgfx_encoder* _encoder, bgfx_occlusion_query_handle_t _handle, bool _visible)
+{
+ union { bgfx_occlusion_query_handle_t c; bgfx::OcclusionQueryHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setCondition(handle.cpp, _visible) );
+}
+
+BGFX_C_API void bgfx_encoder_set_stencil(bgfx_encoder* _encoder, uint32_t _fstencil, uint32_t _bstencil)
+{
+ BGFX_ENCODER(setStencil(_fstencil, _bstencil) );
+}
+
+BGFX_C_API uint16_t bgfx_encoder_set_scissor(bgfx_encoder* _encoder, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
+{
+ return BGFX_ENCODER(setScissor(_x, _y, _width, _height) );
+}
+
+BGFX_C_API void bgfx_encoder_set_scissor_cached(bgfx_encoder* _encoder, uint16_t _cache)
+{
+ BGFX_ENCODER(setScissor(_cache) );
+}
+
+BGFX_C_API uint32_t bgfx_encoder_set_transform(bgfx_encoder* _encoder, const void* _mtx, uint16_t _num)
+{
+ return BGFX_ENCODER(setTransform(_mtx, _num) );
+}
+
+BGFX_C_API uint32_t bgfx_encoder_alloc_transform(bgfx_encoder* _encoder, bgfx_transform_t* _transform, uint16_t _num)
+{
+ return BGFX_ENCODER(allocTransform( (bgfx::Transform*)_transform, _num) );
+}
+
+BGFX_C_API void bgfx_encoder_set_transform_cached(bgfx_encoder* _encoder, uint32_t _cache, uint16_t _num)
+{
+ BGFX_ENCODER(setTransform(_cache, _num) );
+}
+
+BGFX_C_API void bgfx_encoder_set_uniform(bgfx_encoder* _encoder, bgfx_uniform_handle_t _handle, const void* _value, uint16_t _num)
+{
+ union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setUniform(handle.cpp, _value, _num) );
+}
+
+BGFX_C_API void bgfx_encoder_set_index_buffer(bgfx_encoder* _encoder, bgfx_index_buffer_handle_t _handle, uint32_t _firstIndex, uint32_t _numIndices)
+{
+ union { bgfx_index_buffer_handle_t c; bgfx::IndexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setIndexBuffer(handle.cpp, _firstIndex, _numIndices) );
+}
+
+BGFX_C_API void bgfx_encoder_set_dynamic_index_buffer(bgfx_encoder* _encoder, bgfx_dynamic_index_buffer_handle_t _handle, uint32_t _firstIndex, uint32_t _numIndices)
+{
+ union { bgfx_dynamic_index_buffer_handle_t c; bgfx::DynamicIndexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setIndexBuffer(handle.cpp, _firstIndex, _numIndices) );
+}
+
+BGFX_C_API void bgfx_encoder_set_transient_index_buffer(bgfx_encoder* _encoder, const bgfx_transient_index_buffer_t* _tib, uint32_t _firstIndex, uint32_t _numIndices)
+{
+ BGFX_ENCODER(setIndexBuffer( (const bgfx::TransientIndexBuffer*)_tib, _firstIndex, _numIndices) );
+}
+
+BGFX_C_API void bgfx_encoder_set_vertex_buffer(bgfx_encoder* _encoder, uint8_t _stream, bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices)
+{
+ union { bgfx_vertex_buffer_handle_t c; bgfx::VertexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setVertexBuffer(_stream, handle.cpp, _startVertex, _numVertices) );
+}
+
+BGFX_C_API void bgfx_encoder_set_dynamic_vertex_buffer(bgfx_encoder* _encoder, uint8_t _stream, bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices)
+{
+ union { bgfx_dynamic_vertex_buffer_handle_t c; bgfx::DynamicVertexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setVertexBuffer(_stream, handle.cpp, _startVertex, _numVertices) );
+}
+
+BGFX_C_API void bgfx_encoder_set_transient_vertex_buffer(bgfx_encoder* _encoder, uint8_t _stream, const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices)
+{
+ BGFX_ENCODER(setVertexBuffer(_stream, (const bgfx::TransientVertexBuffer*)_tvb, _startVertex, _numVertices) );
+}
+
+BGFX_C_API void bgfx_encoder_set_instance_data_buffer(bgfx_encoder* _encoder, const bgfx_instance_data_buffer_t* _idb, uint32_t _num)
+{
+ BGFX_ENCODER(setInstanceDataBuffer( (const bgfx::InstanceDataBuffer*)_idb, _num) );
+}
+
+BGFX_C_API void bgfx_encoder_set_instance_data_from_vertex_buffer(bgfx_encoder* _encoder, bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _num)
+{
+ union { bgfx_vertex_buffer_handle_t c; bgfx::VertexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setInstanceDataBuffer(handle.cpp, _startVertex, _num) );
+}
+
+BGFX_C_API void bgfx_encoder_set_instance_data_from_dynamic_vertex_buffer(bgfx_encoder* _encoder, bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _num)
+{
+ union { bgfx_dynamic_vertex_buffer_handle_t c; bgfx::DynamicVertexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setInstanceDataBuffer(handle.cpp, _startVertex, _num) );
+}
+
+BGFX_C_API void bgfx_encoder_set_texture(bgfx_encoder* _encoder, uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint32_t _flags)
+{
+ union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler };
+ union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setTexture(_stage, sampler.cpp, handle.cpp, _flags) );
+}
+
+BGFX_C_API void bgfx_encoder_touch(bgfx_encoder* _encoder, bgfx_view_id_t _id)
+{
+ return BGFX_ENCODER(touch(_id) );
+}
+
+BGFX_C_API void bgfx_encoder_submit(bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState)
+{
+ union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(submit(_id, handle.cpp, _depth, _preserveState) );
+}
+
+BGFX_C_API void bgfx_encoder_submit_occlusion_query(bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState)
+{
+ union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program };
+ union { bgfx_occlusion_query_handle c; bgfx::OcclusionQueryHandle cpp; } occlusionQuery = { _occlusionQuery };
+ BGFX_ENCODER(submit(_id, program.cpp, occlusionQuery.cpp, _depth, _preserveState) );
+}
+
+BGFX_C_API void bgfx_encoder_submit_indirect(bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
+{
+ union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
+ union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle };
+ BGFX_ENCODER(submit(_id, handle.cpp, indirectHandle.cpp, _start, _num, _depth, _preserveState) );
+}
+
+BGFX_C_API void bgfx_encoder_set_image(bgfx_encoder* _encoder, uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format)
+{
+ union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler };
+ union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setImage(_stage, sampler.cpp, handle.cpp, _mip, bgfx::Access::Enum(_access), bgfx::TextureFormat::Enum(_format) ) );
+}
+
+BGFX_C_API void bgfx_encoder_set_compute_index_buffer(bgfx_encoder* _encoder, uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access)
+{
+ union { bgfx_index_buffer_handle_t c; bgfx::IndexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setBuffer(_stage, handle.cpp, bgfx::Access::Enum(_access) ) );
+}
+
+BGFX_C_API void bgfx_encoder_set_compute_vertex_buffer(bgfx_encoder* _encoder, uint8_t _stage, bgfx_vertex_buffer_handle_t _handle, bgfx_access_t _access)
+{
+ union { bgfx_vertex_buffer_handle_t c; bgfx::VertexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setBuffer(_stage, handle.cpp, bgfx::Access::Enum(_access) ) );
+}
+
+BGFX_C_API void bgfx_encoder_set_compute_dynamic_index_buffer(bgfx_encoder* _encoder, uint8_t _stage, bgfx_dynamic_index_buffer_handle_t _handle, bgfx_access_t _access)
+{
+ union { bgfx_dynamic_index_buffer_handle_t c; bgfx::DynamicIndexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setBuffer(_stage, handle.cpp, bgfx::Access::Enum(_access) ) );
+}
+
+BGFX_C_API void bgfx_encoder_set_compute_dynamic_vertex_buffer(bgfx_encoder* _encoder, uint8_t _stage, bgfx_dynamic_vertex_buffer_handle_t _handle, bgfx_access_t _access)
+{
+ union { bgfx_dynamic_vertex_buffer_handle_t c; bgfx::DynamicVertexBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setBuffer(_stage, handle.cpp, bgfx::Access::Enum(_access) ) );
+}
+
+BGFX_C_API void bgfx_encoder_set_compute_indirect_buffer(bgfx_encoder* _encoder, uint8_t _stage, bgfx_indirect_buffer_handle_t _handle, bgfx_access_t _access)
+{
+ union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(setBuffer(_stage, handle.cpp, bgfx::Access::Enum(_access) ) );
+}
+
+BGFX_C_API void bgfx_encoder_dispatch(bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ, uint8_t _flags)
+{
+ union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
+ BGFX_ENCODER(dispatch(_id, handle.cpp, _numX, _numY, _numZ, _flags) );
+}
+
+BGFX_C_API void bgfx_encoder_dispatch_indirect(bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
+{
+ union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
+ union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle };
+ BGFX_ENCODER(dispatch(_id, handle.cpp, indirectHandle.cpp, _start, _num, _flags) );
+}
+
+BGFX_C_API void bgfx_encoder_discard(bgfx_encoder* _encoder)
+{
+ BGFX_ENCODER(discard() );
+}
+
+BGFX_C_API void bgfx_encoder_blit(bgfx_encoder* _encoder, bgfx_view_id_t _id, bgfx_texture_handle_t _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, bgfx_texture_handle_t _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth)
+{
+ union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } dst = { _dst };
+ union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } src = { _src };
+ BGFX_ENCODER(blit(_id, dst.cpp, _dstMip, _dstX, _dstY, _dstZ, src.cpp, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth) );
+}
+
+#undef BGFX_ENCODER
+
BGFX_C_API void bgfx_request_screen_shot(bgfx_frame_buffer_handle _handle, const char* _filePath)
{
union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle };
bgfx::requestScreenShot(handle.cpp, _filePath);
}
-BGFX_C_API bgfx_render_frame_t bgfx_render_frame()
+BGFX_C_API bgfx_render_frame_t bgfx_render_frame(int32_t _msecs)
{
- return bgfx_render_frame_t(bgfx::renderFrame() );
+ return bgfx_render_frame_t(bgfx::renderFrame(_msecs) );
}
BGFX_C_API void bgfx_set_platform_data(const bgfx_platform_data_t* _data)
@@ -4828,139 +5577,139 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version)
{
if (_version == BGFX_API_VERSION)
{
-#define BGFX_IMPORT \
- BGFX_IMPORT_FUNC(render_frame) \
- BGFX_IMPORT_FUNC(set_platform_data) \
- BGFX_IMPORT_FUNC(get_internal_data) \
- BGFX_IMPORT_FUNC(override_internal_texture_ptr) \
- BGFX_IMPORT_FUNC(override_internal_texture) \
- BGFX_IMPORT_FUNC(vertex_decl_begin) \
- BGFX_IMPORT_FUNC(vertex_decl_add) \
- BGFX_IMPORT_FUNC(vertex_decl_skip) \
- BGFX_IMPORT_FUNC(vertex_decl_end) \
- BGFX_IMPORT_FUNC(vertex_pack) \
- BGFX_IMPORT_FUNC(vertex_unpack) \
- BGFX_IMPORT_FUNC(vertex_convert) \
- BGFX_IMPORT_FUNC(weld_vertices) \
- BGFX_IMPORT_FUNC(topology_convert) \
- BGFX_IMPORT_FUNC(topology_sort_tri_list) \
- BGFX_IMPORT_FUNC(image_swizzle_bgra8) \
- BGFX_IMPORT_FUNC(image_rgba8_downsample_2x2) \
- BGFX_IMPORT_FUNC(get_supported_renderers) \
- BGFX_IMPORT_FUNC(get_renderer_name) \
- BGFX_IMPORT_FUNC(init) \
- BGFX_IMPORT_FUNC(shutdown) \
- BGFX_IMPORT_FUNC(reset) \
- BGFX_IMPORT_FUNC(frame) \
- BGFX_IMPORT_FUNC(get_renderer_type) \
- BGFX_IMPORT_FUNC(get_caps) \
- BGFX_IMPORT_FUNC(get_hmd) \
- BGFX_IMPORT_FUNC(get_stats) \
- BGFX_IMPORT_FUNC(alloc) \
- BGFX_IMPORT_FUNC(copy) \
- BGFX_IMPORT_FUNC(make_ref) \
- BGFX_IMPORT_FUNC(make_ref_release) \
- BGFX_IMPORT_FUNC(set_debug) \
- BGFX_IMPORT_FUNC(dbg_text_clear) \
- BGFX_IMPORT_FUNC(dbg_text_printf) \
- BGFX_IMPORT_FUNC(dbg_text_vprintf) \
- BGFX_IMPORT_FUNC(dbg_text_image) \
- BGFX_IMPORT_FUNC(create_index_buffer) \
- BGFX_IMPORT_FUNC(destroy_index_buffer) \
- BGFX_IMPORT_FUNC(create_vertex_buffer) \
- BGFX_IMPORT_FUNC(destroy_vertex_buffer) \
- BGFX_IMPORT_FUNC(create_dynamic_index_buffer) \
- BGFX_IMPORT_FUNC(create_dynamic_index_buffer_mem) \
- BGFX_IMPORT_FUNC(update_dynamic_index_buffer) \
- BGFX_IMPORT_FUNC(destroy_dynamic_index_buffer) \
- BGFX_IMPORT_FUNC(create_dynamic_vertex_buffer) \
- BGFX_IMPORT_FUNC(create_dynamic_vertex_buffer_mem) \
- BGFX_IMPORT_FUNC(update_dynamic_vertex_buffer) \
- BGFX_IMPORT_FUNC(destroy_dynamic_vertex_buffer) \
- BGFX_IMPORT_FUNC(get_avail_transient_index_buffer) \
- BGFX_IMPORT_FUNC(get_avail_transient_vertex_buffer) \
- BGFX_IMPORT_FUNC(get_avail_instance_data_buffer) \
- BGFX_IMPORT_FUNC(alloc_transient_index_buffer) \
- BGFX_IMPORT_FUNC(alloc_transient_vertex_buffer) \
- BGFX_IMPORT_FUNC(alloc_transient_buffers) \
- BGFX_IMPORT_FUNC(alloc_instance_data_buffer) \
- BGFX_IMPORT_FUNC(create_indirect_buffer) \
- BGFX_IMPORT_FUNC(destroy_indirect_buffer) \
- BGFX_IMPORT_FUNC(create_shader) \
- BGFX_IMPORT_FUNC(get_shader_uniforms) \
- BGFX_IMPORT_FUNC(destroy_shader) \
- BGFX_IMPORT_FUNC(create_program) \
- BGFX_IMPORT_FUNC(create_compute_program) \
- BGFX_IMPORT_FUNC(destroy_program) \
- BGFX_IMPORT_FUNC(is_texture_valid) \
- BGFX_IMPORT_FUNC(calc_texture_size) \
- BGFX_IMPORT_FUNC(create_texture) \
- BGFX_IMPORT_FUNC(create_texture_2d) \
- BGFX_IMPORT_FUNC(create_texture_2d_scaled) \
- BGFX_IMPORT_FUNC(create_texture_3d) \
- BGFX_IMPORT_FUNC(create_texture_cube) \
- BGFX_IMPORT_FUNC(update_texture_2d) \
- BGFX_IMPORT_FUNC(update_texture_3d) \
- BGFX_IMPORT_FUNC(update_texture_cube) \
- BGFX_IMPORT_FUNC(read_texture) \
- BGFX_IMPORT_FUNC(destroy_texture) \
- BGFX_IMPORT_FUNC(create_frame_buffer) \
- BGFX_IMPORT_FUNC(create_frame_buffer_scaled) \
- BGFX_IMPORT_FUNC(create_frame_buffer_from_attachment) \
- BGFX_IMPORT_FUNC(create_frame_buffer_from_nwh) \
- BGFX_IMPORT_FUNC(get_texture) \
- BGFX_IMPORT_FUNC(destroy_frame_buffer) \
- BGFX_IMPORT_FUNC(create_uniform) \
- BGFX_IMPORT_FUNC(get_uniform_info) \
- BGFX_IMPORT_FUNC(destroy_uniform) \
- BGFX_IMPORT_FUNC(create_occlusion_query) \
- BGFX_IMPORT_FUNC(get_result) \
- BGFX_IMPORT_FUNC(destroy_occlusion_query) \
- BGFX_IMPORT_FUNC(set_palette_color) \
- BGFX_IMPORT_FUNC(set_view_name) \
- BGFX_IMPORT_FUNC(set_view_rect) \
- BGFX_IMPORT_FUNC(set_view_scissor) \
- BGFX_IMPORT_FUNC(set_view_clear) \
- BGFX_IMPORT_FUNC(set_view_clear_mrt) \
- BGFX_IMPORT_FUNC(set_view_seq) \
- BGFX_IMPORT_FUNC(set_view_frame_buffer) \
- BGFX_IMPORT_FUNC(set_view_transform) \
- BGFX_IMPORT_FUNC(set_view_transform_stereo) \
- BGFX_IMPORT_FUNC(set_view_order) \
- BGFX_IMPORT_FUNC(set_marker) \
- BGFX_IMPORT_FUNC(set_state) \
- BGFX_IMPORT_FUNC(set_condition) \
- BGFX_IMPORT_FUNC(set_stencil) \
- BGFX_IMPORT_FUNC(set_scissor) \
- BGFX_IMPORT_FUNC(set_scissor_cached) \
- BGFX_IMPORT_FUNC(set_transform) \
- BGFX_IMPORT_FUNC(alloc_transform) \
- BGFX_IMPORT_FUNC(set_transform_cached) \
- BGFX_IMPORT_FUNC(set_uniform) \
- BGFX_IMPORT_FUNC(set_index_buffer) \
- BGFX_IMPORT_FUNC(set_dynamic_index_buffer) \
- BGFX_IMPORT_FUNC(set_transient_index_buffer) \
- BGFX_IMPORT_FUNC(set_vertex_buffer) \
- BGFX_IMPORT_FUNC(set_dynamic_vertex_buffer) \
- BGFX_IMPORT_FUNC(set_transient_vertex_buffer) \
- BGFX_IMPORT_FUNC(set_instance_data_buffer) \
- BGFX_IMPORT_FUNC(set_instance_data_from_vertex_buffer) \
- BGFX_IMPORT_FUNC(set_instance_data_from_dynamic_vertex_buffer) \
- BGFX_IMPORT_FUNC(set_texture) \
- BGFX_IMPORT_FUNC(touch) \
- BGFX_IMPORT_FUNC(submit) \
- BGFX_IMPORT_FUNC(submit_occlusion_query) \
- BGFX_IMPORT_FUNC(submit_indirect) \
- BGFX_IMPORT_FUNC(set_image) \
- BGFX_IMPORT_FUNC(set_compute_index_buffer) \
- BGFX_IMPORT_FUNC(set_compute_vertex_buffer) \
- BGFX_IMPORT_FUNC(set_compute_dynamic_index_buffer) \
- BGFX_IMPORT_FUNC(set_compute_dynamic_vertex_buffer) \
- BGFX_IMPORT_FUNC(set_compute_indirect_buffer) \
- BGFX_IMPORT_FUNC(dispatch) \
- BGFX_IMPORT_FUNC(dispatch_indirect) \
- BGFX_IMPORT_FUNC(discard) \
- BGFX_IMPORT_FUNC(blit) \
+#define BGFX_IMPORT \
+ BGFX_IMPORT_FUNC(render_frame) \
+ BGFX_IMPORT_FUNC(set_platform_data) \
+ BGFX_IMPORT_FUNC(get_internal_data) \
+ BGFX_IMPORT_FUNC(override_internal_texture_ptr) \
+ BGFX_IMPORT_FUNC(override_internal_texture) \
+ BGFX_IMPORT_FUNC(vertex_decl_begin) \
+ BGFX_IMPORT_FUNC(vertex_decl_add) \
+ BGFX_IMPORT_FUNC(vertex_decl_skip) \
+ BGFX_IMPORT_FUNC(vertex_decl_end) \
+ BGFX_IMPORT_FUNC(vertex_pack) \
+ BGFX_IMPORT_FUNC(vertex_unpack) \
+ BGFX_IMPORT_FUNC(vertex_convert) \
+ BGFX_IMPORT_FUNC(weld_vertices) \
+ BGFX_IMPORT_FUNC(topology_convert) \
+ BGFX_IMPORT_FUNC(topology_sort_tri_list) \
+ BGFX_IMPORT_FUNC(get_supported_renderers) \
+ BGFX_IMPORT_FUNC(get_renderer_name) \
+ BGFX_IMPORT_FUNC(init) \
+ BGFX_IMPORT_FUNC(shutdown) \
+ BGFX_IMPORT_FUNC(reset) \
+ BGFX_IMPORT_FUNC(frame) \
+ BGFX_IMPORT_FUNC(get_renderer_type) \
+ BGFX_IMPORT_FUNC(get_caps) \
+ BGFX_IMPORT_FUNC(get_hmd) \
+ BGFX_IMPORT_FUNC(get_stats) \
+ BGFX_IMPORT_FUNC(alloc) \
+ BGFX_IMPORT_FUNC(copy) \
+ BGFX_IMPORT_FUNC(make_ref) \
+ BGFX_IMPORT_FUNC(make_ref_release) \
+ BGFX_IMPORT_FUNC(set_debug) \
+ BGFX_IMPORT_FUNC(dbg_text_clear) \
+ BGFX_IMPORT_FUNC(dbg_text_printf) \
+ BGFX_IMPORT_FUNC(dbg_text_vprintf) \
+ BGFX_IMPORT_FUNC(dbg_text_image) \
+ BGFX_IMPORT_FUNC(create_index_buffer) \
+ BGFX_IMPORT_FUNC(destroy_index_buffer) \
+ BGFX_IMPORT_FUNC(create_vertex_buffer) \
+ BGFX_IMPORT_FUNC(destroy_vertex_buffer) \
+ BGFX_IMPORT_FUNC(create_dynamic_index_buffer) \
+ BGFX_IMPORT_FUNC(create_dynamic_index_buffer_mem) \
+ BGFX_IMPORT_FUNC(update_dynamic_index_buffer) \
+ BGFX_IMPORT_FUNC(destroy_dynamic_index_buffer) \
+ BGFX_IMPORT_FUNC(create_dynamic_vertex_buffer) \
+ BGFX_IMPORT_FUNC(create_dynamic_vertex_buffer_mem) \
+ BGFX_IMPORT_FUNC(update_dynamic_vertex_buffer) \
+ BGFX_IMPORT_FUNC(destroy_dynamic_vertex_buffer) \
+ BGFX_IMPORT_FUNC(get_avail_transient_index_buffer) \
+ BGFX_IMPORT_FUNC(get_avail_transient_vertex_buffer) \
+ BGFX_IMPORT_FUNC(get_avail_instance_data_buffer) \
+ BGFX_IMPORT_FUNC(alloc_transient_index_buffer) \
+ BGFX_IMPORT_FUNC(alloc_transient_vertex_buffer) \
+ BGFX_IMPORT_FUNC(alloc_transient_buffers) \
+ BGFX_IMPORT_FUNC(alloc_instance_data_buffer) \
+ BGFX_IMPORT_FUNC(create_indirect_buffer) \
+ BGFX_IMPORT_FUNC(destroy_indirect_buffer) \
+ BGFX_IMPORT_FUNC(create_shader) \
+ BGFX_IMPORT_FUNC(get_shader_uniforms) \
+ BGFX_IMPORT_FUNC(set_shader_name) \
+ BGFX_IMPORT_FUNC(destroy_shader) \
+ BGFX_IMPORT_FUNC(create_program) \
+ BGFX_IMPORT_FUNC(create_compute_program) \
+ BGFX_IMPORT_FUNC(destroy_program) \
+ BGFX_IMPORT_FUNC(is_texture_valid) \
+ BGFX_IMPORT_FUNC(calc_texture_size) \
+ BGFX_IMPORT_FUNC(create_texture) \
+ BGFX_IMPORT_FUNC(create_texture_2d) \
+ BGFX_IMPORT_FUNC(create_texture_2d_scaled) \
+ BGFX_IMPORT_FUNC(create_texture_3d) \
+ BGFX_IMPORT_FUNC(create_texture_cube) \
+ BGFX_IMPORT_FUNC(update_texture_2d) \
+ BGFX_IMPORT_FUNC(update_texture_3d) \
+ BGFX_IMPORT_FUNC(update_texture_cube) \
+ BGFX_IMPORT_FUNC(read_texture) \
+ BGFX_IMPORT_FUNC(set_texture_name) \
+ BGFX_IMPORT_FUNC(destroy_texture) \
+ BGFX_IMPORT_FUNC(create_frame_buffer) \
+ BGFX_IMPORT_FUNC(create_frame_buffer_scaled) \
+ BGFX_IMPORT_FUNC(create_frame_buffer_from_attachment) \
+ BGFX_IMPORT_FUNC(create_frame_buffer_from_nwh) \
+ BGFX_IMPORT_FUNC(get_texture) \
+ BGFX_IMPORT_FUNC(destroy_frame_buffer) \
+ BGFX_IMPORT_FUNC(create_uniform) \
+ BGFX_IMPORT_FUNC(get_uniform_info) \
+ BGFX_IMPORT_FUNC(destroy_uniform) \
+ BGFX_IMPORT_FUNC(create_occlusion_query) \
+ BGFX_IMPORT_FUNC(get_result) \
+ BGFX_IMPORT_FUNC(destroy_occlusion_query) \
+ BGFX_IMPORT_FUNC(set_palette_color) \
+ BGFX_IMPORT_FUNC(set_view_name) \
+ BGFX_IMPORT_FUNC(set_view_rect) \
+ BGFX_IMPORT_FUNC(set_view_scissor) \
+ BGFX_IMPORT_FUNC(set_view_clear) \
+ BGFX_IMPORT_FUNC(set_view_clear_mrt) \
+ BGFX_IMPORT_FUNC(set_view_mode) \
+ BGFX_IMPORT_FUNC(set_view_frame_buffer) \
+ BGFX_IMPORT_FUNC(set_view_transform) \
+ BGFX_IMPORT_FUNC(set_view_transform_stereo) \
+ BGFX_IMPORT_FUNC(set_view_order) \
+ BGFX_IMPORT_FUNC(encoder_set_marker) \
+ BGFX_IMPORT_FUNC(encoder_set_state) \
+ BGFX_IMPORT_FUNC(encoder_set_condition) \
+ BGFX_IMPORT_FUNC(encoder_set_stencil) \
+ BGFX_IMPORT_FUNC(encoder_set_scissor) \
+ BGFX_IMPORT_FUNC(encoder_set_scissor_cached) \
+ BGFX_IMPORT_FUNC(encoder_set_transform) \
+ BGFX_IMPORT_FUNC(encoder_alloc_transform) \
+ BGFX_IMPORT_FUNC(encoder_set_transform_cached) \
+ BGFX_IMPORT_FUNC(encoder_set_uniform) \
+ BGFX_IMPORT_FUNC(encoder_set_index_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_dynamic_index_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_transient_index_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_vertex_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_dynamic_vertex_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_transient_vertex_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_instance_data_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_instance_data_from_vertex_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_instance_data_from_dynamic_vertex_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_texture) \
+ BGFX_IMPORT_FUNC(encoder_touch) \
+ BGFX_IMPORT_FUNC(encoder_submit) \
+ BGFX_IMPORT_FUNC(encoder_submit_occlusion_query) \
+ BGFX_IMPORT_FUNC(encoder_submit_indirect) \
+ BGFX_IMPORT_FUNC(encoder_set_image) \
+ BGFX_IMPORT_FUNC(encoder_set_compute_index_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_compute_vertex_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_compute_dynamic_index_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_compute_dynamic_vertex_buffer) \
+ BGFX_IMPORT_FUNC(encoder_set_compute_indirect_buffer) \
+ BGFX_IMPORT_FUNC(encoder_dispatch) \
+ BGFX_IMPORT_FUNC(encoder_dispatch_indirect) \
+ BGFX_IMPORT_FUNC(encoder_discard) \
+ BGFX_IMPORT_FUNC(encoder_blit) \
BGFX_IMPORT_FUNC(request_screen_shot)
static bgfx_interface_vtbl_t s_bgfx_interface =
diff --git a/3rdparty/bgfx/src/bgfx_compute.sh b/3rdparty/bgfx/src/bgfx_compute.sh
index 641dda89a31..902651e9c8c 100644
--- a/3rdparty/bgfx/src/bgfx_compute.sh
+++ b/3rdparty/bgfx/src/bgfx_compute.sh
@@ -10,105 +10,256 @@
#ifndef __cplusplus
-#if BGFX_SHADER_LANGUAGE_HLSL
+#if BGFX_SHADER_LANGUAGE_GLSL
+
+#define SHARED shared
+
+#define __IMAGE_XX(_name, _format, _reg, _image, _access) \
+ layout(_format, binding=_reg) _access uniform highp _image _name
+
+#define readwrite
+#define IMAGE2D_RO( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2D, readonly)
+#define UIMAGE2D_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, readonly)
+#define IMAGE2D_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2D, writeonly)
+#define UIMAGE2D_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, writeonly)
+#define IMAGE2D_RW( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2D, readwrite)
+#define UIMAGE2D_RW(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, readwrite)
+
+#define IMAGE2D_ARRAY_RO( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2DArray, readonly)
+#define UIMAGE2D_ARRAY_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2DArray, readonly)
+#define IMAGE2D_ARRAY_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2DArray, writeonly)
+#define UIMAGE2D_ARRAY_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2DArray, writeonly)
+#define IMAGE2D_ARRAY_RW( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2DArray, readwrite)
+#define UIMAGE2D_ARRAY_RW(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2DArray, readwrite)
+
+#define IMAGE3D_RO( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image3D, readonly)
+#define UIMAGE3D_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage3D, readonly)
+#define IMAGE3D_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image3D, writeonly)
+#define UIMAGE3D_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage3D, writeonly)
+#define IMAGE3D_RW( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image3D, readwrite)
+#define UIMAGE3D_RW(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage3D, readwrite)
+
+#define __BUFFER_XX(_name, _type, _reg, _access) \
+ layout(std430, binding=_reg) _access buffer _name ## Buffer \
+ { \
+ _type _name[]; \
+ }
+
+#define BUFFER_RO(_name, _type, _reg) __BUFFER_XX(_name, _type, _reg, readonly)
+#define BUFFER_RW(_name, _type, _reg) __BUFFER_XX(_name, _type, _reg, readwrite)
+#define BUFFER_WR(_name, _type, _reg) __BUFFER_XX(_name, _type, _reg, writeonly)
+
+#define NUM_THREADS(_x, _y, _z) layout (local_size_x = _x, local_size_y = _y, local_size_z = _z) in;
+
+#else
#define SHARED groupshared
-#define r32ui uint
-#define r32f float
-#define rg16f float2
-#define rgba16f float4
-#define rgba8 float4
-#define rgba32f float4
-
-#define IMAGE2D_RO( _name, _format, _reg) Texture2D<_format> _name : register(t[_reg])
-#define UIMAGE2D_RO(_name, _format, _reg) Texture2D<_format> _name : register(t[_reg])
-#define IMAGE2D_WR( _name, _format, _reg) RWTexture2D<_format> _name : register(u[_reg])
-#define UIMAGE2D_WR(_name, _format, _reg) RWTexture2D<_format> _name : register(u[_reg])
-#define IMAGE2D_RW( _name, _reg) RWTexture2D<float> _name : register(u[_reg])
-#define UIMAGE2D_RW(_name, _reg) RWTexture2D<uint> _name : register(u[_reg])
-
-#define IMAGE2D_ARRAY_RO( _name, _format, _reg) Texture2DArray<_format> _name : register(t[_reg])
-#define UIMAGE2D_ARRAY_RO(_name, _format, _reg) Texture2DArray<_format> _name : register(t[_reg])
-#define IMAGE2D_ARRAY_WR( _name, _format, _reg) RWTexture2DArray<_format> _name : register(u[_reg])
-#define UIMAGE2D_ARRAY_WR(_name, _format, _reg) RWTexture2DArray<_format> _name : register(u[_reg])
-#define IMAGE2D_ARRAY_RW( _name, _reg) RWTexture2DArray<float> _name : register(u[_reg])
-#define UIMAGE2D_ARRAY_RW(_name, _reg) RWTexture2DArray<uint> _name : register(u[_reg])
-
-#define IMAGE3D_RO( _name, _format, _reg) Texture3D<_format> _name : register(t[_reg])
-#define UIMAGE3D_RO(_name, _format, _reg) Texture3D<_format> _name : register(t[_reg])
-#define IMAGE3D_WR( _name, _format, _reg) RWTexture3D<_format> _name : register(u[_reg])
-#define UIMAGE3D_WR(_name, _format, _reg) RWTexture3D<_format> _name : register(u[_reg])
-#define IMAGE3D_RW( _name, _reg) RWTexture3D<float> _name : register(u[_reg])
-#define UIMAGE3D_RW(_name, _reg) RWTexture3D<uint> _name : register(u[_reg])
-
-#define BUFFER_RO(_name, _struct, _reg) Buffer<_struct> _name : register(t[_reg])
-#define BUFFER_RW(_name, _struct, _reg) RWBuffer<_struct> _name : register(u[_reg])
-#define BUFFER_WR(_name, _struct, _reg) BUFFER_RW(_name, _struct, _reg)
+#define r32ui uint
+#define rg32ui uint2
+#define rgba32ui uint4
+#define r32f float
+#define rg16f float2
+#define rgba16f float4
+#if BGFX_SHADER_LANGUAGE_HLSL
+# define rgba8 unorm float4
+#else
+# define rgba8 float4
+#endif // BGFX_SHADER_LANGUAGE_HLSL
+#define rgba32f float4
-#define NUM_THREADS(_x, _y, _z) [numthreads(_x, _y, _z)]
+#define IMAGE2D_RO( _name, _format, _reg) \
+ Texture2D<_format> _name ## Texture : REGISTER(t, _reg); \
+ static BgfxROImage2D_ ## _format _name = { _name ## Texture }
-#define __IMAGE_IMPL(_textureType, _storeComponents, _type, _loadComponents) \
- _type imageLoad( Texture2D<_textureType> _image, ivec2 _uv) { return _image[_uv ]._loadComponents; } \
- _type imageLoad(RWTexture2DArray<_textureType> _image, ivec3 _uvw) { return _image[_uvw ]._loadComponents; } \
- _type imageLoad( Texture3D<_textureType> _image, ivec3 _uvw) { return _image[_uvw]._loadComponents; } \
- _type imageLoad( RWTexture2D<_textureType> _image, ivec2 _uv) { return _image[_uv ]._loadComponents; } \
- _type imageLoad(RWTexture2DArray<_textureType> _image, ivec3 _uvw, _type _value) { return _image[_uvw]._loadComponents; } \
- _type imageLoad( RWTexture3D<_textureType> _image, ivec3 _uvw, _type _value) { return _image[_uvw]._loadComponents; } \
- void imageStore( RWTexture2D<_textureType> _image, ivec2 _uv, _type _value) { _image[_uv ] = _value._storeComponents; } \
- void imageStore(RWTexture2DArray<_textureType> _image, ivec3 _uvw, _type _value) { _image[_uvw] = _value._storeComponents; } \
- void imageStore( RWTexture3D<_textureType> _image, ivec3 _uvw, _type _value) { _image[_uvw] = _value._storeComponents; }
-
-__IMAGE_IMPL(float, x, vec4, xxxx)
-__IMAGE_IMPL(vec2, xy, vec4, xyyy)
-__IMAGE_IMPL(vec3, xyz, vec4, xyzz)
-__IMAGE_IMPL(vec4, xyzw, vec4, xyzw)
-__IMAGE_IMPL(uint, x, uvec4, xxxx)
-__IMAGE_IMPL(uvec2, xy, uvec4, xyyy)
-__IMAGE_IMPL(uvec3, xyz, uvec4, xyzz)
-__IMAGE_IMPL(uvec4, xyzw, uvec4, xyzw)
-__IMAGE_IMPL(int, x, ivec4, xxxx)
-__IMAGE_IMPL(ivec2, xy, ivec4, xyyy)
-__IMAGE_IMPL(ivec3, xyz, ivec4, xyzz)
-__IMAGE_IMPL(ivec4, xyzw, ivec4, xyzw)
-
-ivec2 imageSize(Texture2D _image)
-{
- ivec2 result;
- _image.GetDimensions(result.x, result.y);
- return result;
-}
+#define UIMAGE2D_RO(_name, _format, _reg) IMAGE2D_RO(_name, _format, _reg)
-ivec2 imageSize(Texture2D<uint> _image)
-{
- ivec2 result;
- _image.GetDimensions(result.x, result.y);
- return result;
-}
+#define IMAGE2D_RW( _name, _format, _reg) \
+ RWTexture2D<_format> _name ## Texture : REGISTER(u, _reg); \
+ static BgfxRWImage2D_ ## _format _name = { _name ## Texture }
-ivec2 imageSize(RWTexture2D<float4> _image)
-{
- ivec2 result;
- _image.GetDimensions(result.x, result.y);
- return result;
-}
+#define IMAGE2D_WR( _name, _format, _reg) IMAGE2D_RW(_name, _format, _reg)
+#define UIMAGE2D_WR(_name, _format, _reg) IMAGE2D_RW(_name, _format, _reg)
+#define UIMAGE2D_RW(_name, _format, _reg) IMAGE2D_RW(_name, _format, _reg)
-ivec2 imageSize(RWTexture2D<uint> _image)
-{
- ivec2 result;
- _image.GetDimensions(result.x, result.y);
- return result;
-}
+#define IMAGE2D_ARRAY_RO(_name, _format, _reg) \
+ Texture2DArray<_format> _name ## Texture : REGISTER(t, _reg); \
+ static BgfxROImage2DArray_ ## _format _name = { _name ## Texture }
+
+#define UIMAGE2D_ARRAY_RO(_name, _format, _reg) IMAGE2D_ARRAY_RO(_name, _format, _reg)
+
+#define IMAGE2D_ARRAY_RW(_name, _format, _reg) \
+ RWTexture2DArray<_format> _name ## Texture : REGISTER(u, _reg); \
+ static BgfxRWImage2DArray_ ## _format _name = { _name ## Texture }
+
+#define UIMAGE2D_ARRAY_RW(_name, _format, _reg) IMAGE2D_ARRAY_RW(_name, _format, _reg)
+#define IMAGE2D_ARRAY_WR( _name, _format, _reg) IMAGE2D_ARRAY_RW(_name, _format, _reg)
+#define UIMAGE2D_ARRAY_WR(_name, _format, _reg) IMAGE2D_ARRAY_RW(_name, _format, _reg)
+
+#define IMAGE3D_RO( _name, _format, _reg) \
+ Texture3D<_format> _name ## Texture : REGISTER(t, _reg); \
+ static BgfxROImage3D_ ## _format _name = { _name ## Texture }
+
+#define UIMAGE3D_RO(_name, _format, _reg) IMAGE3D_RO(_name, _format, _reg)
+
+#define IMAGE3D_RW( _name, _format, _reg) \
+ RWTexture3D<_format> _name ## Texture : REGISTER(u, _reg); \
+ static BgfxRWImage3D_ ## _format _name = { _name ## Texture }
+
+#define UIMAGE3D_RW(_name, _format, _reg) IMAGE3D_RW(_name, _format, _reg)
+#define IMAGE3D_WR( _name, _format, _reg) IMAGE3D_RW(_name, _format, _reg)
+#define UIMAGE3D_WR(_name, _format, _reg) IMAGE3D_RW(_name, _format, _reg)
+
+#define BUFFER_RO(_name, _struct, _reg) Buffer<_struct> _name : REGISTER(t, _reg)
+#define BUFFER_RW(_name, _struct, _reg) RWBuffer<_struct> _name : REGISTER(u, _reg)
+#define BUFFER_WR(_name, _struct, _reg) BUFFER_RW(_name, _struct, _reg)
+
+#define NUM_THREADS(_x, _y, _z) [numthreads(_x, _y, _z)]
-#define __ATOMIC_IMPL_TYPE(_genType, _glFunc, _dxFunc) \
- _genType _glFunc(_genType _mem, _genType _data) \
- { \
- _genType result; \
- _dxFunc(_mem, _data, result); \
- return result; \
+#define __IMAGE_IMPL_S(_format, _storeComponents, _type, _loadComponents) \
+ \
+ struct BgfxROImage2D_ ## _format \
+ { \
+ Texture2D<_format> m_texture; \
+ }; \
+ \
+ struct BgfxRWImage2D_ ## _format \
+ { \
+ RWTexture2D<_format> m_texture; \
+ }; \
+ \
+ struct BgfxROImage2DArray_ ## _format \
+ { \
+ Texture2DArray<_format> m_texture; \
+ }; \
+ \
+ struct BgfxRWImage2DArray_ ## _format \
+ { \
+ RWTexture2DArray<_format> m_texture; \
+ }; \
+ \
+ struct BgfxROImage3D_ ## _format \
+ { \
+ Texture3D<_format> m_texture; \
+ }; \
+ \
+ struct BgfxRWImage3D_ ## _format \
+ { \
+ RWTexture3D<_format> m_texture; \
+ }; \
+
+#define __IMAGE_IMPL_A(_format, _storeComponents, _type, _loadComponents) \
+ __IMAGE_IMPL_S(_format, _storeComponents, _type, _loadComponents) \
+ \
+ _type imageLoad(BgfxROImage2D_ ## _format _image, ivec2 _uv) \
+ { \
+ return _image.m_texture[_uv]._loadComponents; \
+ } \
+ \
+ ivec2 imageSize(BgfxROImage2D_ ## _format _image) \
+ { \
+ uvec2 result; \
+ _image.m_texture.GetDimensions(result.x, result.y); \
+ return ivec2(result); \
+ } \
+ \
+ _type imageLoad(BgfxRWImage2D_ ## _format _image, ivec2 _uv) \
+ { \
+ return _image.m_texture[_uv]._loadComponents; \
+ } \
+ \
+ ivec2 imageSize(BgfxRWImage2D_ ## _format _image) \
+ { \
+ uvec2 result; \
+ _image.m_texture.GetDimensions(result.x, result.y); \
+ return ivec2(result); \
+ } \
+ \
+ void imageStore(BgfxRWImage2D_ ## _format _image, ivec2 _uv, _type _value) \
+ { \
+ _image.m_texture[_uv] = _value._storeComponents; \
+ } \
+ \
+ _type imageLoad(BgfxROImage2DArray_ ## _format _image, ivec3 _uvw) \
+ { \
+ return _image.m_texture[_uvw]._loadComponents; \
+ } \
+ \
+ ivec3 imageSize(BgfxROImage2DArray_ ## _format _image) \
+ { \
+ uvec3 result; \
+ _image.m_texture.GetDimensions(result.x, result.y, result.z); \
+ return ivec3(result); \
+ } \
+ \
+ _type imageLoad(BgfxRWImage2DArray_ ## _format _image, ivec3 _uvw) \
+ { \
+ return _image.m_texture[_uvw]._loadComponents; \
+ } \
+ \
+ void imageStore(BgfxRWImage2DArray_ ## _format _image, ivec3 _uvw, _type _value) \
+ { \
+ _image.m_texture[_uvw] = _value._storeComponents; \
+ } \
+ \
+ ivec3 imageSize(BgfxRWImage2DArray_ ## _format _image) \
+ { \
+ uvec3 result; \
+ _image.m_texture.GetDimensions(result.x, result.y, result.z); \
+ return ivec3(result); \
+ } \
+ \
+ _type imageLoad(BgfxROImage3D_ ## _format _image, ivec3 _uvw) \
+ { \
+ return _image.m_texture[_uvw]._loadComponents; \
+ } \
+ \
+ ivec3 imageSize(BgfxROImage3D_ ## _format _image) \
+ { \
+ uvec3 result; \
+ _image.m_texture.GetDimensions(result.x, result.y, result.z); \
+ return ivec3(result); \
+ } \
+ \
+ _type imageLoad(BgfxRWImage3D_ ## _format _image, ivec3 _uvw) \
+ { \
+ return _image.m_texture[_uvw]._loadComponents; \
+ } \
+ \
+ ivec3 imageSize(BgfxRWImage3D_ ## _format _image) \
+ { \
+ uvec3 result; \
+ _image.m_texture.GetDimensions(result.x, result.y, result.z); \
+ return ivec3(result); \
+ } \
+ \
+ void imageStore(BgfxRWImage3D_ ## _format _image, ivec3 _uvw, _type _value) \
+ { \
+ _image.m_texture[_uvw] = _value._storeComponents; \
+ }
+
+__IMAGE_IMPL_A(rgba8, xyzw, vec4, xyzw)
+__IMAGE_IMPL_A(rg16f, xy, vec4, xyyy)
+#if BGFX_SHADER_LANGUAGE_HLSL
+__IMAGE_IMPL_S(rgba16f, xyzw, vec4, xyzw)
+#else
+__IMAGE_IMPL_A(rgba16f, xyzw, vec4, xyzw)
+#endif // BGFX_SHADER_LANGUAGE_HLSL
+__IMAGE_IMPL_A(r32f, x, vec4, xxxx)
+__IMAGE_IMPL_A(rgba32f, xyzw, vec4, xyzw)
+__IMAGE_IMPL_A(r32ui, x, uvec4, xxxx)
+__IMAGE_IMPL_A(rg32ui, xy, uvec4, xyyy)
+__IMAGE_IMPL_A(rgba32ui, xyzw, uvec4, xyzw)
+
+#define __ATOMIC_IMPL_TYPE(_genType, _glFunc, _dxFunc) \
+ _genType _glFunc(inout _genType _mem, _genType _data) \
+ { \
+ _genType result; \
+ _dxFunc(_mem, _data, result); \
+ return result; \
}
-#define __ATOMIC_IMPL(_glFunc, _dxFunc) \
+#define __ATOMIC_IMPL(_glFunc, _dxFunc) \
__ATOMIC_IMPL_TYPE(int, _glFunc, _dxFunc) \
__ATOMIC_IMPL_TYPE(uint, _glFunc, _dxFunc)
@@ -120,14 +271,14 @@ __ATOMIC_IMPL(atomicMin, InterlockedMin);
__ATOMIC_IMPL(atomicOr, InterlockedOr);
__ATOMIC_IMPL(atomicXor, InterlockedXor);
-int atomicCompSwap(int _mem, int _compare, int _data)
+int atomicCompSwap(inout int _mem, int _compare, int _data)
{
int result;
InterlockedCompareExchange(_mem, _compare, _data, result);
return result;
}
-uint atomicCompSwap(uint _mem, uint _compare, uint _data)
+uint atomicCompSwap(inout uint _mem, uint _compare, uint _data)
{
uint result;
InterlockedCompareExchange(_mem, _compare, _data, result);
@@ -144,48 +295,7 @@ uint atomicCompSwap(uint _mem, uint _compare, uint _data)
#define memoryBarrierShared() GroupMemoryBarrierWithGroupSync()
#define groupMemoryBarrier() GroupMemoryBarrierWithGroupSync()
-#else
-
-#define SHARED shared
-
-#define __IMAGE_XX(_name, _format, _reg, _image, _access) \
- layout(_format, binding=_reg) _access uniform highp _image _name
-
-#define readwrite
-#define IMAGE2D_RO( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2D, readonly)
-#define UIMAGE2D_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, readonly)
-#define IMAGE2D_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2D, writeonly)
-#define UIMAGE2D_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, writeonly)
-#define IMAGE2D_RW( _name, _reg) __IMAGE_XX(_name, r32f, _reg, image2D, readwrite)
-#define UIMAGE2D_RW(_name, _reg) __IMAGE_XX(_name, r32ui, _reg, uimage2D, readwrite)
-
-#define IMAGE2D_ARRAY_RO( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2DArray, readonly)
-#define UIMAGE2D_ARRAY_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2DArray, readonly)
-#define IMAGE2D_ARRAY_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2DArray, writeonly)
-#define UIMAGE2D_ARRAY_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2DArray, writeonly)
-#define IMAGE2D_ARRAY_RW( _name, _reg) __IMAGE_XX(_name, r32f, _reg, image2DArray, readwrite)
-#define UIMAGE2D_ARRAY_RW(_name, _reg) __IMAGE_XX(_name, r32ui, _reg, uimage2DArray, readwrite)
-
-#define IMAGE3D_RO( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image3D, readonly)
-#define UIMAGE3D_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage3D, readonly)
-#define IMAGE3D_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image3D, writeonly)
-#define UIMAGE3D_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage3D, writeonly)
-#define IMAGE3D_RW( _name, _reg) __IMAGE_XX(_name, r32f, _reg, image2D, readwrite)
-#define UIMAGE3D_RW(_name, _reg) __IMAGE_XX(_name, r32ui, _reg, uimage2D, readwrite)
-
-#define __BUFFER_XX(_name, _type, _reg, _access) \
- layout(std430, binding=_reg) _access buffer _name ## Buffer \
- { \
- _type _name[]; \
- }
-
-#define BUFFER_RO(_name, _type, _reg) __BUFFER_XX(_name, _type, _reg, readonly)
-#define BUFFER_RW(_name, _type, _reg) __BUFFER_XX(_name, _type, _reg, readwrite)
-#define BUFFER_WR(_name, _type, _reg) __BUFFER_XX(_name, _type, _reg, writeonly)
-
-#define NUM_THREADS(_x, _y, _z) layout (local_size_x = _x, local_size_y = _y, local_size_z = _z) in;
-
-#endif // BGFX_SHADER_LANGUAGE_HLSL
+#endif // BGFX_SHADER_LANGUAGE_GLSL
#define dispatchIndirect(_buffer \
, _offset \
diff --git a/3rdparty/bgfx/src/bgfx_p.h b/3rdparty/bgfx/src/bgfx_p.h
index 775cd157caa..14fce4ff2a5 100644
--- a/3rdparty/bgfx/src/bgfx_p.h
+++ b/3rdparty/bgfx/src/bgfx_p.h
@@ -24,7 +24,7 @@
#include <inttypes.h>
-// Check handle, cannot be bgfx::invalidHandle and must be valid.
+// Check handle, cannot be bgfx::kInvalidHandle and must be valid.
#define BGFX_CHECK_HANDLE(_desc, _handleAlloc, _handle) \
BX_CHECK(isValid(_handle) \
&& _handleAlloc.isValid(_handle.idx) \
@@ -34,7 +34,7 @@
, _handleAlloc.getMaxHandles() \
)
-// Check handle, it's ok to be bgfx::invalidHandle or must be valid.
+// Check handle, it's ok to be bgfx::kInvalidHandle or must be valid.
#define BGFX_CHECK_HANDLE_INVALID_OK(_desc, _handleAlloc, _handle) \
BX_CHECK(!isValid(_handle) \
|| _handleAlloc.isValid(_handle.idx) \
@@ -44,31 +44,22 @@
, _handleAlloc.getMaxHandles() \
)
-#ifndef BGFX_PROFILER_SCOPE
-# if BGFX_CONFIG_PROFILER_MICROPROFILE
-# include <microprofile.h>
-# define BGFX_PROFILER_SCOPE(_group, _name, _color) MICROPROFILE_SCOPEI(#_group, #_name, _color)
-# define BGFX_PROFILER_BEGIN(_group, _name, _color) BX_NOOP()
-# define BGFX_PROFILER_BEGIN_DYNAMIC(_namestr) BX_NOOP()
-# define BGFX_PROFILER_END() BX_NOOP()
-# define BGFX_PROFILER_SET_CURRENT_THREAD_NAME(_name) BX_NOOP()
-# elif BGFX_CONFIG_PROFILER_REMOTERY
-# define RMT_ENABLED BGFX_CONFIG_PROFILER_REMOTERY
-# define RMT_USE_D3D11 BGFX_CONFIG_RENDERER_DIRECT3D11
-# define RMT_USE_OPENGL BGFX_CONFIG_RENDERER_OPENGL
-# include <remotery/lib/Remotery.h>
-# define BGFX_PROFILER_SCOPE(_group, _name, _color) rmt_ScopedCPUSample(_group##_##_name, RMTSF_None)
-# define BGFX_PROFILER_BEGIN(_group, _name, _color) rmt_BeginCPUSample(_group##_##_name, RMTSF_None)
-# define BGFX_PROFILER_BEGIN_DYNAMIC(_namestr) rmt_BeginCPUSampleDynamic(_namestr, RMTSF_None)
-# define BGFX_PROFILER_END() rmt_EndCPUSample()
-# define BGFX_PROFILER_SET_CURRENT_THREAD_NAME(_name) rmt_SetCurrentThreadName(_name)
-# else
-# define BGFX_PROFILER_SCOPE(_group, _name, _color) BX_NOOP()
-# define BGFX_PROFILER_BEGIN(_group, _name, _color) BX_NOOP()
-# define BGFX_PROFILER_BEGIN_DYNAMIC(_namestr) BX_NOOP()
-# define BGFX_PROFILER_END() BX_NOOP()
-# define BGFX_PROFILER_SET_CURRENT_THREAD_NAME(_name) BX_NOOP()
-# endif // BGFX_CONFIG_PROFILER_*
+#if BGFX_CONFIG_MULTITHREADED
+# define BGFX_MUTEX_SCOPE(_mutex) bx::MutexScope BX_CONCATENATE(mutexScope, __LINE__)(_mutex)
+#else
+# define BGFX_MUTEX_SCOPE(_mutex) BX_NOOP()
+#endif // BGFX_CONFIG_MULTITHREADED
+
+#if BGFX_CONFIG_PROFILER
+# define BGFX_PROFILER_SCOPE(_name, _abgr) ProfilerScope BX_CONCATENATE(profilerScope, __LINE__)(_name, _abgr, __FILE__, uint16_t(__LINE__) )
+# define BGFX_PROFILER_BEGIN(_name, _abgr) g_callback->profilerBeginLiteral(_name, _abgr, __FILE__, uint16_t(__LINE__) )
+# define BGFX_PROFILER_END() g_callback->profilerEnd()
+# define BGFX_PROFILER_SET_CURRENT_THREAD_NAME(_name) BX_NOOP()
+#else
+# define BGFX_PROFILER_SCOPE(_name, _abgr) BX_NOOP()
+# define BGFX_PROFILER_BEGIN(_name, _abgr) BX_NOOP()
+# define BGFX_PROFILER_END() BX_NOOP()
+# define BGFX_PROFILER_SET_CURRENT_THREAD_NAME(_name) BX_NOOP()
#endif // BGFX_PROFILER_SCOPE
namespace bgfx
@@ -115,30 +106,36 @@ namespace bgfx
} \
BX_MACRO_BLOCK_END
+#include <bx/allocator.h>
#include <bx/bx.h>
+#include <bx/cpu.h>
#include <bx/debug.h>
-#include <bx/fpumath.h>
-#include <bx/float4x4_t.h>
#include <bx/endian.h>
+#include <bx/float4x4_t.h>
#include <bx/handlealloc.h>
#include <bx/hash.h>
-#include <bx/sort.h>
-#include <bx/ringbuffer.h>
-#include <bx/uint32_t.h>
+#include <bx/maputil.h>
+#include <bx/math.h>
+#include <bx/mutex.h>
+#include <bx/os.h>
#include <bx/readerwriter.h>
-#include <bx/allocator.h>
+#include <bx/ringbuffer.h>
+#include <bx/sort.h>
#include <bx/string.h>
-#include <bx/os.h>
-#include <bx/maputil.h>
+#include <bx/thread.h>
+#include <bx/timer.h>
+#include <bx/uint32_t.h>
#include <bgfx/platform.h>
-#include "image.h"
+#include <bimg/bimg.h>
#include "shader.h"
+#include "vertexdecl.h"
-#define BGFX_CHUNK_MAGIC_CSH BX_MAKEFOURCC('C', 'S', 'H', 0x2)
-#define BGFX_CHUNK_MAGIC_FSH BX_MAKEFOURCC('F', 'S', 'H', 0x4)
#define BGFX_CHUNK_MAGIC_TEX BX_MAKEFOURCC('T', 'E', 'X', 0x0)
-#define BGFX_CHUNK_MAGIC_VSH BX_MAKEFOURCC('V', 'S', 'H', 0x4)
+
+#define BGFX_CHUNK_MAGIC_CSH BX_MAKEFOURCC('C', 'S', 'H', 0x3)
+#define BGFX_CHUNK_MAGIC_FSH BX_MAKEFOURCC('F', 'S', 'H', 0x5)
+#define BGFX_CHUNK_MAGIC_VSH BX_MAKEFOURCC('V', 'S', 'H', 0x5)
#define BGFX_CLEAR_COLOR_USE_PALETTE UINT16_C(0x8000)
#define BGFX_CLEAR_MASK (0 \
@@ -177,17 +174,8 @@ namespace stl = std;
# include <android/native_window.h>
#elif BX_PLATFORM_WINDOWS
# include <windows.h>
-#elif BX_PLATFORM_XBOX360
-# include <malloc.h>
-# include <xtl.h>
#endif // BX_PLATFORM_*
-#include <bx/cpu.h>
-#include <bx/thread.h>
-#include <bx/timer.h>
-
-#include "vertexdecl.h"
-
#define BGFX_DEFAULT_WIDTH 1280
#define BGFX_DEFAULT_HEIGHT 720
@@ -261,8 +249,67 @@ namespace bgfx
typedef uint32_t RenderItemCount;
#endif // BGFX_CONFIG_MAX_DRAW_CALLS < (64<<10)
+ struct Handle
+ {
+ enum Enum
+ {
+ Shader,
+ Texture,
+
+ Count
+ };
+
+ uint16_t type;
+ uint16_t idx;
+ };
+
+ inline Handle convert(ShaderHandle _handle)
+ {
+ Handle handle = { Handle::Shader, _handle.idx };
+ return handle;
+ }
+
+ inline Handle convert(TextureHandle _handle)
+ {
+ Handle handle = { Handle::Texture, _handle.idx };
+ return handle;
+ }
+
+ inline bool isValid(const VertexDecl& _decl)
+ {
+ return 0 != _decl.m_stride;
+ }
+
struct Clear
{
+ void set(uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
+ {
+ m_flags = _flags;
+ m_index[0] = uint8_t(_rgba>>24);
+ m_index[1] = uint8_t(_rgba>>16);
+ m_index[2] = uint8_t(_rgba>> 8);
+ m_index[3] = uint8_t(_rgba>> 0);
+ m_depth = _depth;
+ m_stencil = _stencil;
+ }
+
+ void set(uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7)
+ {
+ m_flags = (_flags & ~BGFX_CLEAR_COLOR)
+ | (0xff != (_0&_1&_2&_3&_4&_5&_6&_7) ? BGFX_CLEAR_COLOR|BGFX_CLEAR_COLOR_USE_PALETTE : 0)
+ ;
+ m_index[0] = _0;
+ m_index[1] = _1;
+ m_index[2] = _2;
+ m_index[3] = _3;
+ m_index[4] = _4;
+ m_index[5] = _5;
+ m_index[6] = _6;
+ m_index[7] = _7;
+ m_depth = _depth;
+ m_stencil = _stencil;
+ }
+
uint8_t m_index[8];
float m_depth;
uint8_t m_stencil;
@@ -355,12 +402,27 @@ namespace bgfx
typedef bx::StringT<&g_allocator> String;
+ struct ProfilerScope
+ {
+ ProfilerScope(const char* _name, uint32_t _abgr, const char* _filePath, uint16_t _line)
+ {
+ g_callback->profilerBeginLiteral(_name, _abgr, _filePath, _line);
+ }
+
+ ~ProfilerScope()
+ {
+ g_callback->profilerEnd();
+ }
+ };
+
void setGraphicsDebuggerPresent(bool _present);
bool isGraphicsDebuggerPresent();
void release(const Memory* _mem);
const char* getAttribName(Attrib::Enum _attr);
void getTextureSizeFromRatio(BackbufferRatio::Enum _ratio, uint16_t& _width, uint16_t& _height);
- TextureFormat::Enum getViableTextureFormat(const ImageContainer& _imageContainer);
+ TextureFormat::Enum getViableTextureFormat(const bimg::ImageContainer& _imageContainer);
+ const char* getName(TextureFormat::Enum _fmt);
+ const char* getName(UniformHandle _handle);
inline uint32_t castfu(float _value)
{
@@ -557,7 +619,7 @@ namespace bgfx
{
for (uint32_t ii = 0; ii < BX_COUNTOF(m_program); ++ii)
{
- m_program[ii].idx = invalidHandle;
+ m_program[ii].idx = kInvalidHandle;
}
}
@@ -633,6 +695,7 @@ namespace bgfx
CreateUniform,
UpdateViewName,
InvalidateOcclusionQuery,
+ SetName,
End,
RendererShutdownEnd,
DestroyVertexDecl,
@@ -724,99 +787,211 @@ namespace bgfx
uint8_t m_buffer[BGFX_CONFIG_MAX_COMMAND_BUFFER_SIZE];
};
+//
+#define SORK_KEY_NUM_BITS_VIEW 10
+
+#define SORT_KEY_VIEW_SHIFT (64-SORK_KEY_NUM_BITS_VIEW)
+#define SORT_KEY_VIEW_MASK ( (uint64_t(BGFX_CONFIG_MAX_VIEWS-1) )<<SORT_KEY_VIEW_SHIFT)
+
+#define SORT_KEY_DRAW_BIT_SHIFT (SORT_KEY_VIEW_SHIFT - 1)
+#define SORT_KEY_DRAW_BIT (UINT64_C(1)<<SORT_KEY_DRAW_BIT_SHIFT)
+
+//
+#define SORT_KEY_NUM_BITS_DRAW_TYPE 2
+
+#define SORT_KEY_DRAW_TYPE_BIT_SHIFT (SORT_KEY_DRAW_BIT_SHIFT - SORT_KEY_NUM_BITS_DRAW_TYPE)
+#define SORT_KEY_DRAW_TYPE_MASK (UINT64_C(3)<<SORT_KEY_DRAW_TYPE_BIT_SHIFT)
+
+#define SORT_KEY_DRAW_TYPE_PROGRAM (UINT64_C(0)<<SORT_KEY_DRAW_TYPE_BIT_SHIFT)
+#define SORT_KEY_DRAW_TYPE_DEPTH (UINT64_C(1)<<SORT_KEY_DRAW_TYPE_BIT_SHIFT)
+#define SORT_KEY_DRAW_TYPE_SEQUENCE (UINT64_C(2)<<SORT_KEY_DRAW_TYPE_BIT_SHIFT)
+
+//
#define SORT_KEY_NUM_BITS_TRANS 2
-#define SORT_KEY_DRAW_BIT (UINT64_C(1)<<0x36)
+#define SORT_KEY_DRAW_0_TRANS_SHIFT (SORT_KEY_DRAW_TYPE_BIT_SHIFT - SORT_KEY_NUM_BITS_TRANS)
+#define SORT_KEY_DRAW_0_TRANS_MASK (UINT64_C(0x3)<<SORT_KEY_DRAW_0_TRANS_SHIFT)
-#define SORT_KEY_VIEW_SHIFT 0x37
-#define SORT_KEY_VIEW_MASK ( (uint64_t(BGFX_CONFIG_MAX_VIEWS-1) )<<SORT_KEY_VIEW_SHIFT)
+#define SORT_KEY_DRAW_0_PROGRAM_SHIFT (SORT_KEY_DRAW_0_TRANS_SHIFT - BGFX_CONFIG_SORT_KEY_NUM_BITS_PROGRAM)
+#define SORT_KEY_DRAW_0_PROGRAM_MASK ( (uint64_t(BGFX_CONFIG_MAX_PROGRAMS-1) )<<SORT_KEY_DRAW_0_PROGRAM_SHIFT)
-#define SORT_KEY_DRAW_DEPTH_SHIFT 0
-#define SORT_KEY_DRAW_DEPTH_MASK ( ( (UINT64_C(1)<<BGFX_CONFIG_SORT_KEY_NUM_BITS_DEPTH)-1)<<SORT_KEY_DRAW_DEPTH_SHIFT)
+#define SORT_KEY_DRAW_0_DEPTH_SHIFT (SORT_KEY_DRAW_0_PROGRAM_SHIFT - BGFX_CONFIG_SORT_KEY_NUM_BITS_DEPTH)
+#define SORT_KEY_DRAW_0_DEPTH_MASK ( ( (UINT64_C(1)<<BGFX_CONFIG_SORT_KEY_NUM_BITS_DEPTH)-1)<<SORT_KEY_DRAW_0_DEPTH_SHIFT)
-#define SORT_KEY_DRAW_PROGRAM_SHIFT (SORT_KEY_DRAW_DEPTH_SHIFT+BGFX_CONFIG_SORT_KEY_NUM_BITS_DEPTH)
-#define SORT_KEY_DRAW_PROGRAM_MASK ( (uint64_t(BGFX_CONFIG_MAX_PROGRAMS-1) )<<SORT_KEY_DRAW_PROGRAM_SHIFT)
+//
+#define SORT_KEY_DRAW_1_DEPTH_SHIFT (SORT_KEY_DRAW_TYPE_BIT_SHIFT - BGFX_CONFIG_SORT_KEY_NUM_BITS_DEPTH)
+#define SORT_KEY_DRAW_1_DEPTH_MASK ( ( (UINT64_C(1)<<BGFX_CONFIG_SORT_KEY_NUM_BITS_DEPTH)-1)<<SORT_KEY_DRAW_1_DEPTH_SHIFT)
-#define SORT_KEY_COMPUTE_PROGRAM_SHIFT (SORT_KEY_DRAW_DEPTH_SHIFT+BGFX_CONFIG_SORT_KEY_NUM_BITS_DEPTH+SORT_KEY_NUM_BITS_TRANS)
-#define SORT_KEY_COMPUTE_PROGRAM_MASK ( (uint64_t(BGFX_CONFIG_MAX_PROGRAMS-1) )<<SORT_KEY_COMPUTE_PROGRAM_SHIFT)
+#define SORT_KEY_DRAW_1_TRANS_SHIFT (SORT_KEY_DRAW_1_DEPTH_SHIFT - SORT_KEY_NUM_BITS_TRANS)
+#define SORT_KEY_DRAW_1_TRANS_MASK (UINT64_C(0x3)<<SORT_KEY_DRAW_1_TRANS_SHIFT)
+
+#define SORT_KEY_DRAW_1_PROGRAM_SHIFT (SORT_KEY_DRAW_1_TRANS_SHIFT - BGFX_CONFIG_SORT_KEY_NUM_BITS_PROGRAM)
+#define SORT_KEY_DRAW_1_PROGRAM_MASK ( (uint64_t(BGFX_CONFIG_MAX_PROGRAMS-1) )<<SORT_KEY_DRAW_1_PROGRAM_SHIFT)
+
+//
+#define SORT_KEY_DRAW_2_SEQ_SHIFT (SORT_KEY_DRAW_TYPE_BIT_SHIFT - BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ)
+#define SORT_KEY_DRAW_2_SEQ_MASK ( ( (UINT64_C(1)<<BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ)-1)<<SORT_KEY_DRAW_2_SEQ_SHIFT)
+
+#define SORT_KEY_DRAW_2_TRANS_SHIFT (SORT_KEY_DRAW_2_SEQ_SHIFT - SORT_KEY_NUM_BITS_TRANS)
+#define SORT_KEY_DRAW_2_TRANS_MASK (UINT64_C(0x3)<<SORT_KEY_DRAW_2_TRANS_SHIFT)
-#define SORT_KEY_DRAW_TRANS_SHIFT (SORT_KEY_DRAW_PROGRAM_SHIFT+BGFX_CONFIG_SORT_KEY_NUM_BITS_PROGRAM)
-#define SORT_KEY_DRAW_TRANS_MASK (UINT64_C(0x3)<<SORT_KEY_DRAW_TRANS_SHIFT)
+#define SORT_KEY_DRAW_2_PROGRAM_SHIFT (SORT_KEY_DRAW_2_TRANS_SHIFT - BGFX_CONFIG_SORT_KEY_NUM_BITS_PROGRAM)
+#define SORT_KEY_DRAW_2_PROGRAM_MASK ( (uint64_t(BGFX_CONFIG_MAX_PROGRAMS-1) )<<SORT_KEY_DRAW_2_PROGRAM_SHIFT)
-#define SORT_KEY_SEQ_SHIFT (SORT_KEY_DRAW_TRANS_SHIFT+SORT_KEY_NUM_BITS_TRANS)
-#define SORT_KEY_SEQ_MASK ( ( (UINT64_C(1)<<BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ)-1)<<SORT_KEY_SEQ_SHIFT)
+//
+#define SORT_KEY_COMPUTE_SEQ_SHIFT (SORT_KEY_DRAW_BIT_SHIFT - BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ)
+#define SORT_KEY_COMPUTE_SEQ_MASK ( ( (UINT64_C(1)<<BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ)-1)<<SORT_KEY_COMPUTE_SEQ_SHIFT)
- BX_STATIC_ASSERT(BGFX_CONFIG_MAX_VIEWS <= 256);
+#define SORT_KEY_COMPUTE_PROGRAM_SHIFT (SORT_KEY_COMPUTE_SEQ_SHIFT - BGFX_CONFIG_SORT_KEY_NUM_BITS_PROGRAM)
+#define SORT_KEY_COMPUTE_PROGRAM_MASK ( (uint64_t(BGFX_CONFIG_MAX_PROGRAMS-1) )<<SORT_KEY_COMPUTE_PROGRAM_SHIFT)
+
+ BX_STATIC_ASSERT(BGFX_CONFIG_MAX_VIEWS <= (1<<SORK_KEY_NUM_BITS_VIEW) );
BX_STATIC_ASSERT( (BGFX_CONFIG_MAX_PROGRAMS & (BGFX_CONFIG_MAX_PROGRAMS-1) ) == 0); // Must be power of 2.
BX_STATIC_ASSERT( (0 // Render key mask shouldn't overlap.
+ | SORT_KEY_VIEW_MASK
| SORT_KEY_DRAW_BIT
- | SORT_KEY_SEQ_MASK
+ | SORT_KEY_DRAW_TYPE_MASK
+ | SORT_KEY_DRAW_0_TRANS_MASK
+ | SORT_KEY_DRAW_0_PROGRAM_MASK
+ | SORT_KEY_DRAW_0_DEPTH_MASK
+ ) == (0
+ ^ SORT_KEY_VIEW_MASK
+ ^ SORT_KEY_DRAW_BIT
+ ^ SORT_KEY_DRAW_TYPE_MASK
+ ^ SORT_KEY_DRAW_0_TRANS_MASK
+ ^ SORT_KEY_DRAW_0_PROGRAM_MASK
+ ^ SORT_KEY_DRAW_0_DEPTH_MASK
+ ) );
+ BX_STATIC_ASSERT( (0 // Render key mask shouldn't overlap.
| SORT_KEY_VIEW_MASK
- | SORT_KEY_DRAW_TRANS_MASK
- | SORT_KEY_DRAW_PROGRAM_MASK
- | SORT_KEY_DRAW_DEPTH_MASK
+ | SORT_KEY_DRAW_BIT
+ | SORT_KEY_DRAW_TYPE_MASK
+ | SORT_KEY_DRAW_1_DEPTH_MASK
+ | SORT_KEY_DRAW_1_TRANS_MASK
+ | SORT_KEY_DRAW_1_PROGRAM_MASK
) == (0
+ ^ SORT_KEY_VIEW_MASK
^ SORT_KEY_DRAW_BIT
- ^ SORT_KEY_SEQ_MASK
+ ^ SORT_KEY_DRAW_TYPE_MASK
+ ^ SORT_KEY_DRAW_1_DEPTH_MASK
+ ^ SORT_KEY_DRAW_1_TRANS_MASK
+ ^ SORT_KEY_DRAW_1_PROGRAM_MASK
+ ) );
+ BX_STATIC_ASSERT( (0 // Render key mask shouldn't overlap.
+ | SORT_KEY_VIEW_MASK
+ | SORT_KEY_DRAW_BIT
+ | SORT_KEY_DRAW_TYPE_MASK
+ | SORT_KEY_DRAW_2_SEQ_MASK
+ | SORT_KEY_DRAW_2_TRANS_MASK
+ | SORT_KEY_DRAW_2_PROGRAM_MASK
+ ) == (0
^ SORT_KEY_VIEW_MASK
- ^ SORT_KEY_DRAW_TRANS_MASK
- ^ SORT_KEY_DRAW_PROGRAM_MASK
- ^ SORT_KEY_DRAW_DEPTH_MASK
+ ^ SORT_KEY_DRAW_BIT
+ ^ SORT_KEY_DRAW_TYPE_MASK
+ ^ SORT_KEY_DRAW_2_SEQ_MASK
+ ^ SORT_KEY_DRAW_2_TRANS_MASK
+ ^ SORT_KEY_DRAW_2_PROGRAM_MASK
) );
BX_STATIC_ASSERT( (0 // Compute key mask shouldn't overlap.
- | SORT_KEY_DRAW_BIT
- | SORT_KEY_SEQ_MASK
| SORT_KEY_VIEW_MASK
+ | SORT_KEY_DRAW_BIT
+ | SORT_KEY_COMPUTE_SEQ_SHIFT
| SORT_KEY_COMPUTE_PROGRAM_MASK
) == (0
- ^ SORT_KEY_DRAW_BIT
- ^ SORT_KEY_SEQ_MASK
^ SORT_KEY_VIEW_MASK
+ ^ SORT_KEY_DRAW_BIT
+ ^ SORT_KEY_COMPUTE_SEQ_SHIFT
^ SORT_KEY_COMPUTE_PROGRAM_MASK
) );
+ // | 3 2 1 0|
+ // |fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210| Common
+ // |vvvvvvvvd |
+ // | ^^ |
+ // | || |
+ // | view-+| |
+ // | +-draw |
+ // |----------------------------------------------------------------| Draw Key 0 - Sort by program
+ // | |kkttpppppppppdddddddddddddddddddddddddddddddd |
+ // | | ^ ^ ^ |
+ // | | | | | |
+ // | | +-trans +-program depth-+ |
+ // | | |
+ // |----------------------------------------------------------------| Draw Key 1 - Sort by depth
+ // | |kkddddddddddddddddddddddddddddddddttppppppppp |
+ // | | ^^ ^ ^ |
+ // | | || +-trans | |
+ // | | depth-+ program-+ |
+ // | | |
+ // |----------------------------------------------------------------| Draw Key 2 - Sequential
+ // | |kkssssssssssssssssssssttppppppppp |
+ // | | ^ ^ ^ |
+ // | | | | | |
+ // | | seq-+ +-trans +-program |
+ // | | |
+ // |----------------------------------------------------------------| Compute Key
+ // | |ssssssssssssssssssssppppppppp |
+ // | | ^ ^ |
+ // | | | | |
+ // | | seq-+ +-program |
+ // | | |
+ // |--------+-------------------------------------------------------|
+ //
struct SortKey
{
- uint64_t encodeDraw()
- {
- // | 3 2 1 0|
- // |fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210|
- // | vvvvvvvvdsssssssssssttpppppppppdddddddddddddddddddddddddddddddd|
- // | ^^ ^ ^ ^ ^|
- // | || | | | ||
- // | view-+| seq-+ +-trans +-program depth-+|
- // | +-draw |
-
- const uint64_t depth = (uint64_t(m_depth ) << SORT_KEY_DRAW_DEPTH_SHIFT ) & SORT_KEY_DRAW_DEPTH_MASK;
- const uint64_t program = (uint64_t(m_program) << SORT_KEY_DRAW_PROGRAM_SHIFT) & SORT_KEY_DRAW_PROGRAM_MASK;
- const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_TRANS_SHIFT ) & SORT_KEY_DRAW_TRANS_MASK;
- const uint64_t seq = (uint64_t(m_seq ) << SORT_KEY_SEQ_SHIFT ) & SORT_KEY_SEQ_MASK;
- const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
- const uint64_t key = depth|program|trans|SORT_KEY_DRAW_BIT|seq|view;
-
- BX_CHECK(seq == (uint64_t(m_seq) << SORT_KEY_SEQ_SHIFT), "SortKey error, sequence is truncated (m_seq: %d)."
- , m_seq
- );
+ enum Enum
+ {
+ SortProgram,
+ SortDepth,
+ SortSequence,
+ };
+
+ uint64_t encodeDraw(Enum _type)
+ {
+ if (SortDepth == _type)
+ {
+ const uint64_t depth = (uint64_t(m_depth ) << SORT_KEY_DRAW_1_DEPTH_SHIFT ) & SORT_KEY_DRAW_1_DEPTH_MASK;
+ const uint64_t program = (uint64_t(m_program) << SORT_KEY_DRAW_1_PROGRAM_SHIFT) & SORT_KEY_DRAW_1_PROGRAM_MASK;
+ const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_1_TRANS_SHIFT ) & SORT_KEY_DRAW_1_TRANS_MASK;
+ const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
+ const uint64_t key = view|SORT_KEY_DRAW_BIT|SORT_KEY_DRAW_TYPE_DEPTH|depth|trans|program;
+
+ return key;
+ }
+ else if (SortSequence == _type)
+ {
+ const uint64_t seq = (uint64_t(m_seq ) << SORT_KEY_DRAW_2_SEQ_SHIFT ) & SORT_KEY_DRAW_2_SEQ_MASK;
+ const uint64_t program = (uint64_t(m_program) << SORT_KEY_DRAW_2_PROGRAM_SHIFT) & SORT_KEY_DRAW_2_PROGRAM_MASK;
+ const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_2_TRANS_SHIFT ) & SORT_KEY_DRAW_2_TRANS_MASK;
+ const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
+ const uint64_t key = view|SORT_KEY_DRAW_BIT|SORT_KEY_DRAW_TYPE_SEQUENCE|seq|trans|program;
+
+ BX_CHECK(seq == (uint64_t(m_seq) << SORT_KEY_DRAW_2_SEQ_SHIFT)
+ , "SortKey error, sequence is truncated (m_seq: %d)."
+ , m_seq
+ );
+
+ return key;
+ }
+
+ const uint64_t depth = (uint64_t(m_depth ) << SORT_KEY_DRAW_0_DEPTH_SHIFT ) & SORT_KEY_DRAW_0_DEPTH_MASK;
+ const uint64_t program = (uint64_t(m_program) << SORT_KEY_DRAW_0_PROGRAM_SHIFT) & SORT_KEY_DRAW_0_PROGRAM_MASK;
+ const uint64_t trans = (uint64_t(m_trans ) << SORT_KEY_DRAW_0_TRANS_SHIFT ) & SORT_KEY_DRAW_0_TRANS_MASK;
+ const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
+ const uint64_t key = view|SORT_KEY_DRAW_BIT|SORT_KEY_DRAW_TYPE_PROGRAM|trans|program|depth;
return key;
}
uint64_t encodeCompute()
{
- // | 3 2 1 0|
- // |fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210|
- // | vvvvvvvvdsssssssssssppppppppp |
- // | ^^ ^ ^ |
- // | || | | |
- // | view-+| seq-+ +-program |
- // | +-draw |
-
const uint64_t program = (uint64_t(m_program) << SORT_KEY_COMPUTE_PROGRAM_SHIFT) & SORT_KEY_COMPUTE_PROGRAM_MASK;
- const uint64_t seq = (uint64_t(m_seq ) << SORT_KEY_SEQ_SHIFT ) & SORT_KEY_SEQ_MASK;
+ const uint64_t seq = (uint64_t(m_seq ) << SORT_KEY_COMPUTE_SEQ_SHIFT ) & SORT_KEY_COMPUTE_SEQ_MASK;
const uint64_t view = (uint64_t(m_view ) << SORT_KEY_VIEW_SHIFT ) & SORT_KEY_VIEW_MASK;
const uint64_t key = program|seq|view;
- BX_CHECK(seq == (uint64_t(m_seq) << SORT_KEY_SEQ_SHIFT), "SortKey error, sequence is truncated (m_seq: %d)."
+ BX_CHECK(seq == (uint64_t(m_seq) << SORT_KEY_COMPUTE_SEQ_SHIFT)
+ , "SortKey error, sequence is truncated (m_seq: %d)."
, m_seq
);
@@ -824,15 +999,24 @@ namespace bgfx
}
/// Returns true if item is compute command.
- bool decode(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS])
+ bool decode(uint64_t _key, ViewId _viewRemap[BGFX_CONFIG_MAX_VIEWS])
{
- m_seq = uint32_t( (_key & SORT_KEY_SEQ_MASK ) >> SORT_KEY_SEQ_SHIFT);
m_view = _viewRemap[(_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT];
if (_key & SORT_KEY_DRAW_BIT)
{
- m_depth = uint32_t( (_key & SORT_KEY_DRAW_DEPTH_MASK ) >> SORT_KEY_DRAW_DEPTH_SHIFT);
- m_program = uint16_t( (_key & SORT_KEY_DRAW_PROGRAM_MASK) >> SORT_KEY_DRAW_PROGRAM_SHIFT);
- m_trans = uint8_t( (_key & SORT_KEY_DRAW_TRANS_MASK ) >> SORT_KEY_DRAW_TRANS_SHIFT);
+ uint64_t type = _key & SORT_KEY_DRAW_TYPE_MASK;
+ if (type == SORT_KEY_DRAW_TYPE_DEPTH)
+ {
+ m_program = uint16_t( (_key & SORT_KEY_DRAW_1_PROGRAM_MASK) >> SORT_KEY_DRAW_1_PROGRAM_SHIFT);
+ return false;
+ }
+ else if (type == SORT_KEY_DRAW_TYPE_SEQUENCE)
+ {
+ m_program = uint16_t( (_key & SORT_KEY_DRAW_2_PROGRAM_MASK) >> SORT_KEY_DRAW_2_PROGRAM_SHIFT);
+ return false;
+ }
+
+ m_program = uint16_t( (_key & SORT_KEY_DRAW_0_PROGRAM_MASK) >> SORT_KEY_DRAW_0_PROGRAM_SHIFT);
return false; // draw
}
@@ -840,16 +1024,16 @@ namespace bgfx
return true; // compute
}
- static uint8_t decodeView(uint64_t _key)
+ static ViewId decodeView(uint64_t _key)
{
- return uint8_t( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT);
+ return ViewId( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT);
}
- static uint64_t remapView(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS])
+ static uint64_t remapView(uint64_t _key, ViewId _viewRemap[BGFX_CONFIG_MAX_VIEWS])
{
- const uint8_t oldView = uint8_t( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT);
- const uint64_t view = uint64_t(_viewRemap[oldView]) << SORT_KEY_VIEW_SHIFT;
- const uint64_t key = (_key & ~SORT_KEY_VIEW_MASK) | view;
+ const ViewId oldView = decodeView(_key);
+ const uint64_t view = uint64_t(_viewRemap[oldView]) << SORT_KEY_VIEW_SHIFT;
+ const uint64_t key = (_key & ~SORT_KEY_VIEW_MASK) | view;
return key;
}
@@ -865,7 +1049,7 @@ namespace bgfx
uint32_t m_depth;
uint32_t m_seq;
uint16_t m_program;
- uint8_t m_view;
+ ViewId m_view;
uint8_t m_trans;
};
#undef SORT_KEY_RENDER_DRAW
@@ -883,19 +1067,19 @@ namespace bgfx
void decode(uint32_t _key)
{
m_item = uint16_t(_key & UINT16_MAX);
- m_view = uint8_t(_key >> 24);
+ m_view = ViewId(_key >> 24);
}
- static uint32_t remapView(uint32_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS])
+ static uint32_t remapView(uint32_t _key, ViewId _viewRemap[BGFX_CONFIG_MAX_VIEWS])
{
- const uint8_t oldView = uint8_t(_key >> 24);
+ const ViewId oldView = ViewId(_key >> 24);
const uint32_t view = uint32_t(_viewRemap[oldView]) << 24;
const uint32_t key = (_key & ~UINT32_C(0xff000000) ) | view;
return key;
}
uint16_t m_item;
- uint8_t m_view;
+ ViewId m_view;
};
BX_ALIGN_DECL_16(struct) Matrix4
@@ -929,13 +1113,9 @@ namespace bgfx
uint32_t reserve(uint16_t* _num)
{
uint32_t num = *_num;
- BX_WARN(m_num+num < BGFX_CONFIG_MAX_MATRIX_CACHE, "Matrix cache overflow. %d (max: %d)", m_num+num, BGFX_CONFIG_MAX_MATRIX_CACHE);
- num = bx::uint32_min(num, BGFX_CONFIG_MAX_MATRIX_CACHE-m_num);
- uint32_t first = m_num < BGFX_CONFIG_MAX_MATRIX_CACHE
- ? m_num
- : BGFX_CONFIG_MAX_MATRIX_CACHE - 1
- ;
- m_num += num;
+ uint32_t first = bx::atomicFetchAndAddsat<uint32_t>(&m_num, num, BGFX_CONFIG_MAX_MATRIX_CACHE - 1);
+ BX_WARN(first+num < BGFX_CONFIG_MAX_MATRIX_CACHE, "Matrix cache overflow. %d (max: %d)", first+num, BGFX_CONFIG_MAX_MATRIX_CACHE);
+ num = bx::uint32_min(num, BGFX_CONFIG_MAX_MATRIX_CACHE-1-first);
*_num = (uint16_t)num;
return first;
}
@@ -984,17 +1164,16 @@ namespace bgfx
uint32_t add(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
{
- BX_CHECK(m_num+1 < BGFX_CONFIG_MAX_RECT_CACHE, "Rect cache overflow. %d (max: %d)", m_num, BGFX_CONFIG_MAX_RECT_CACHE);
+ const uint32_t first = bx::atomicFetchAndAddsat<uint32_t>(&m_num, 1, BGFX_CONFIG_MAX_RECT_CACHE-1);
+ BX_CHECK(first+1 < BGFX_CONFIG_MAX_RECT_CACHE, "Rect cache overflow. %d (max: %d)", first, BGFX_CONFIG_MAX_RECT_CACHE);
- uint32_t first = m_num;
- Rect& rect = m_cache[m_num];
+ Rect& rect = m_cache[first];
rect.m_x = _x;
rect.m_y = _y;
rect.m_width = _width;
rect.m_height = _height;
- m_num++;
return first;
}
@@ -1022,7 +1201,7 @@ namespace bgfx
{
uint32_t size = BX_ALIGN_16(bx::uint32_max(_size, sizeof(UniformBuffer) ) );
void* data = BX_ALLOC(g_allocator, size);
- return ::new(data) UniformBuffer(_size);
+ return BX_PLACEMENT_NEW(data, UniformBuffer)(_size);
}
static void destroy(UniformBuffer* _uniformBuffer)
@@ -1031,14 +1210,17 @@ namespace bgfx
BX_FREE(g_allocator, _uniformBuffer);
}
- static void update(UniformBuffer*& _uniformBuffer, uint32_t _treshold = 64<<10, uint32_t _grow = 1<<20)
+ static void update(UniformBuffer** _uniformBuffer, uint32_t _treshold = 64<<10, uint32_t _grow = 1<<20)
{
- if (_treshold >= _uniformBuffer->m_size - _uniformBuffer->m_pos)
+ UniformBuffer* uniformBuffer = *_uniformBuffer;
+ if (_treshold >= uniformBuffer->m_size - uniformBuffer->m_pos)
{
- uint32_t size = BX_ALIGN_16(bx::uint32_max(_uniformBuffer->m_size + _grow, sizeof(UniformBuffer) ) );
- void* data = BX_REALLOC(g_allocator, _uniformBuffer, size);
- _uniformBuffer = reinterpret_cast<UniformBuffer*>(data);
- _uniformBuffer->m_size = size;
+ uint32_t size = BX_ALIGN_16(bx::uint32_max(uniformBuffer->m_size + _grow, sizeof(UniformBuffer) ) );
+ void* data = BX_REALLOC(g_allocator, uniformBuffer, size);
+ uniformBuffer = reinterpret_cast<UniformBuffer*>(data);
+ uniformBuffer->m_size = size;
+
+ *_uniformBuffer = uniformBuffer;
}
}
@@ -1156,8 +1338,8 @@ namespace bgfx
const UniformRegInfo* find(const char* _name) const
{
- uint16_t handle = m_uniforms.find(bx::hashMurmur2A(_name) );
- if (UniformHashMap::invalid != handle)
+ uint16_t handle = m_uniforms.find(bx::hash<bx::HashMurmur2A>(_name) );
+ if (kInvalidHandle != handle)
{
return &m_info[handle];
}
@@ -1168,7 +1350,7 @@ namespace bgfx
const UniformRegInfo& add(UniformHandle _handle, const char* _name, const void* _data)
{
BX_CHECK(isValid(_handle), "Uniform handle is invalid (name: %s)!", _name);
- const uint32_t key = bx::hashMurmur2A(_name);
+ const uint32_t key = bx::hash<bx::HashMurmur2A>(_name);
m_uniforms.removeByKey(key);
m_uniforms.insert(key, _handle.idx);
@@ -1227,8 +1409,8 @@ namespace bgfx
void clear()
{
m_startVertex = 0;
- m_handle.idx = invalidHandle;
- m_decl.idx = invalidHandle;
+ m_handle.idx = kInvalidHandle;
+ m_decl.idx = kInvalidHandle;
}
uint32_t m_startVertex;
@@ -1236,41 +1418,50 @@ namespace bgfx
VertexDeclHandle m_decl;
};
- struct RenderDraw
+ BX_ALIGN_DECL_CACHE_LINE(struct) RenderBind
{
void clear()
{
- m_constBegin = 0;
- m_constEnd = 0;
- m_stateFlags = BGFX_STATE_DEFAULT;
- m_stencil = packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT);
- m_rgba = 0;
- m_matrix = 0;
- m_startIndex = 0;
- m_numIndices = UINT32_MAX;
- m_numVertices = UINT32_MAX;
+ for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++ii)
+ {
+ Binding& bind = m_bind[ii];
+ bind.m_idx = kInvalidHandle;
+ bind.m_type = 0;
+ bind.m_un.m_draw.m_textureFlags = 0;
+ }
+ };
+
+ Binding m_bind[BGFX_CONFIG_MAX_TEXTURE_SAMPLERS];
+ };
+
+ BX_ALIGN_DECL_CACHE_LINE(struct) RenderDraw
+ {
+ void clear()
+ {
+ m_uniformBegin = 0;
+ m_uniformEnd = 0;
+ m_stateFlags = BGFX_STATE_DEFAULT;
+ m_stencil = packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT);
+ m_rgba = 0;
+ m_startMatrix = 0;
+ m_startIndex = 0;
+ m_numIndices = UINT32_MAX;
+ m_numVertices = UINT32_MAX;
m_instanceDataOffset = 0;
m_instanceDataStride = 0;
m_numInstances = 1;
m_startIndirect = 0;
m_numIndirect = UINT16_MAX;
- m_num = 1;
+ m_numMatrices = 1;
m_submitFlags = BGFX_SUBMIT_EYE_FIRST;
m_scissor = UINT16_MAX;
m_streamMask = 0;
m_stream[0].clear();
- m_indexBuffer.idx = invalidHandle;
- m_instanceDataBuffer.idx = invalidHandle;
- m_indirectBuffer.idx = invalidHandle;
- m_occlusionQuery.idx = invalidHandle;
-
- for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++ii)
- {
- Binding& bind = m_bind[ii];
- bind.m_idx = invalidHandle;
- bind.m_type = 0;
- bind.m_un.m_draw.m_textureFlags = 0;
- }
+ m_indexBuffer.idx = kInvalidHandle;
+ m_instanceDataBuffer.idx = kInvalidHandle;
+ m_indirectBuffer.idx = kInvalidHandle;
+ m_occlusionQuery.idx = kInvalidHandle;
+ m_uniformIdx = UINT8_MAX;
}
bool setStreamBit(uint8_t _stream, VertexBufferHandle _handle)
@@ -1282,14 +1473,13 @@ namespace bgfx
return 0 != tmp;
}
- Binding m_bind[BGFX_CONFIG_MAX_TEXTURE_SAMPLERS];
Stream m_stream[BGFX_CONFIG_MAX_VERTEX_STREAMS];
uint64_t m_stateFlags;
uint64_t m_stencil;
uint32_t m_rgba;
- uint32_t m_constBegin;
- uint32_t m_constEnd;
- uint32_t m_matrix;
+ uint32_t m_uniformBegin;
+ uint32_t m_uniformEnd;
+ uint32_t m_startMatrix;
uint32_t m_startIndex;
uint32_t m_numIndices;
uint32_t m_numVertices;
@@ -1298,10 +1488,11 @@ namespace bgfx
uint16_t m_instanceDataStride;
uint16_t m_startIndirect;
uint16_t m_numIndirect;
- uint16_t m_num;
+ uint16_t m_numMatrices;
uint16_t m_scissor;
uint8_t m_submitFlags;
uint8_t m_streamMask;
+ uint8_t m_uniformIdx;
IndexBufferHandle m_indexBuffer;
VertexBufferHandle m_instanceDataBuffer;
@@ -1309,42 +1500,38 @@ namespace bgfx
OcclusionQueryHandle m_occlusionQuery;
};
- struct RenderCompute
+ BX_ALIGN_DECL_CACHE_LINE(struct) RenderCompute
{
void clear()
{
- m_constBegin = 0;
- m_constEnd = 0;
- m_matrix = 0;
- m_numX = 0;
- m_numY = 0;
- m_numZ = 0;
- m_num = 0;
- m_submitFlags = BGFX_SUBMIT_EYE_FIRST;
-
- m_indirectBuffer.idx = invalidHandle;
+ m_uniformBegin = 0;
+ m_uniformEnd = 0;
+ m_startMatrix = 0;
+ m_numX = 0;
+ m_numY = 0;
+ m_numZ = 0;
+ m_numMatrices = 0;
+ m_submitFlags = BGFX_SUBMIT_EYE_FIRST;
+ m_uniformIdx = UINT8_MAX;
+
+ m_indirectBuffer.idx = kInvalidHandle;
m_startIndirect = 0;
m_numIndirect = UINT16_MAX;
-
- for (uint32_t ii = 0; ii < BGFX_MAX_COMPUTE_BINDINGS; ++ii)
- {
- m_bind[ii].m_idx = invalidHandle;
- }
}
- Binding m_bind[BGFX_MAX_COMPUTE_BINDINGS];
- uint32_t m_constBegin;
- uint32_t m_constEnd;
- uint32_t m_matrix;
+ uint32_t m_uniformBegin;
+ uint32_t m_uniformEnd;
+ uint32_t m_startMatrix;
IndirectBufferHandle m_indirectBuffer;
- uint16_t m_numX;
- uint16_t m_numY;
- uint16_t m_numZ;
+ uint32_t m_numX;
+ uint32_t m_numY;
+ uint32_t m_numZ;
uint16_t m_startIndirect;
uint16_t m_numIndirect;
- uint16_t m_num;
+ uint16_t m_numMatrices;
uint8_t m_submitFlags;
+ uint8_t m_uniformIdx;
};
union RenderItem
@@ -1353,7 +1540,7 @@ namespace bgfx
RenderCompute compute;
};
- struct BlitItem
+ BX_ALIGN_DECL_CACHE_LINE(struct) BlitItem
{
uint16_t m_srcX;
uint16_t m_srcY;
@@ -1410,22 +1597,124 @@ namespace bgfx
uint16_t m_flags;
};
+ BX_ALIGN_DECL_CACHE_LINE(struct) View
+ {
+ void reset()
+ {
+ setRect(0, 0, 1, 1);
+ setScissor(0, 0, 0, 0);
+ setClear(BGFX_CLEAR_NONE, 0, 0.0f, 0);
+ setMode(ViewMode::Default);
+ setFrameBuffer(BGFX_INVALID_HANDLE);
+ setTransform(NULL, NULL, BGFX_VIEW_NONE, NULL);
+ }
+
+ void setRect(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
+ {
+ m_rect.m_x = (uint16_t)bx::uint32_imax(int16_t(_x), 0);
+ m_rect.m_y = (uint16_t)bx::uint32_imax(int16_t(_y), 0);
+ m_rect.m_width = bx::uint16_max(_width, 1);
+ m_rect.m_height = bx::uint16_max(_height, 1);
+ }
+
+ void setScissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
+ {
+ m_scissor.m_x = _x;
+ m_scissor.m_y = _y;
+ m_scissor.m_width = _width;
+ m_scissor.m_height = _height;
+ }
+
+ void setClear(uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
+ {
+ m_clear.set(_flags, _rgba, _depth, _stencil);
+ }
+
+ void setClear(uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7)
+ {
+ m_clear.set(_flags, _depth, _stencil, _0, _1, _2, _3, _4, _5, _6, _7);
+ }
+
+ void setMode(ViewMode::Enum _mode)
+ {
+ m_mode = uint8_t(_mode);
+ }
+
+ void setFrameBuffer(FrameBufferHandle _handle)
+ {
+ m_fbh = _handle;
+ }
+
+ void setTransform(const void* _view, const void* _proj, uint8_t _flags, const void* _proj1)
+ {
+ m_flags = _flags;
+
+ if (NULL != _view)
+ {
+ bx::memCopy(m_view.un.val, _view, sizeof(Matrix4) );
+ }
+ else
+ {
+ m_view.setIdentity();
+ }
+
+ if (NULL != _proj)
+ {
+ bx::memCopy(m_proj[0].un.val, _proj, sizeof(Matrix4) );
+ }
+ else
+ {
+ m_proj[0].setIdentity();
+ }
+
+ if (NULL != _proj1)
+ {
+ bx::memCopy(m_proj[1].un.val, _proj1, sizeof(Matrix4) );
+ }
+ else
+ {
+ bx::memCopy(m_proj[1].un.val, m_proj[0].un.val, sizeof(Matrix4) );
+ }
+ }
+
+ Clear m_clear;
+ Rect m_rect;
+ Rect m_scissor;
+ Matrix4 m_view;
+ Matrix4 m_proj[2];
+ FrameBufferHandle m_fbh;
+ uint8_t m_mode;
+ uint8_t m_flags;
+ };
+
+ struct FrameCache
+ {
+ void reset()
+ {
+ m_matrixCache.reset();
+ m_rectCache.reset();
+ }
+
+ MatrixCache m_matrixCache;
+ RectCache m_rectCache;
+ };
+
BX_ALIGN_DECL_CACHE_LINE(struct) Frame
{
Frame()
- : m_uniformMax(0)
- , m_waitSubmit(0)
+ : m_waitSubmit(0)
, m_waitRender(0)
, m_hmdInitialized(false)
, m_capture(false)
- , m_discard(false)
{
SortKey term;
term.reset();
- term.m_program = invalidHandle;
- m_sortKeys[BGFX_CONFIG_MAX_DRAW_CALLS] = term.encodeDraw();
+ term.m_program = kInvalidHandle;
+ m_sortKeys[BGFX_CONFIG_MAX_DRAW_CALLS] = term.encodeDraw(SortKey::SortProgram);
m_sortValues[BGFX_CONFIG_MAX_DRAW_CALLS] = BGFX_CONFIG_MAX_DRAW_CALLS;
bx::memSet(m_occlusion, 0xff, sizeof(m_occlusion) );
+
+ m_perfStats.viewStats = m_viewStats;
}
~Frame()
@@ -1434,7 +1723,11 @@ namespace bgfx
void create()
{
- m_uniformBuffer = UniformBuffer::create();
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_uniformBuffer); ++ii)
+ {
+ m_uniformBuffer[ii] = UniformBuffer::create();
+ }
+
reset();
start();
m_textVideoMem = BX_NEW(g_allocator, TextVideoMem);
@@ -1442,7 +1735,10 @@ namespace bgfx
void destroy()
{
- UniformBuffer::destroy(m_uniformBuffer);
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_uniformBuffer); ++ii)
+ {
+ UniformBuffer::destroy(m_uniformBuffer[ii]);
+ }
BX_DELETE(g_allocator, m_textVideoMem);
}
@@ -1455,25 +1751,14 @@ namespace bgfx
void start()
{
- m_stateFlags = BGFX_STATE_NONE;
- m_uniformBegin = 0;
- m_uniformEnd = 0;
- m_draw.clear();
- m_compute.clear();
- m_matrixCache.reset();
- m_rectCache.reset();
- m_key.reset();
- m_num = 0;
+ m_frameCache.reset();
m_numRenderItems = 0;
- m_numDropped = 0;
m_numBlitItems = 0;
m_iboffset = 0;
m_vboffset = 0;
m_cmdPre.start();
m_cmdPost.start();
- m_uniformBuffer->reset();
m_capture = false;
- m_discard = false;
}
void finish()
@@ -1481,22 +1766,284 @@ namespace bgfx
m_cmdPre.finish();
m_cmdPost.finish();
- m_uniformMax = bx::uint32_max(m_uniformMax, m_uniformBuffer->getPos() );
- m_uniformBuffer->finish();
+// if (0 < m_numDropped)
+// {
+// BX_TRACE("Too many draw calls: %d, dropped %d (max: %d)"
+// , m_numRenderItems+m_numDropped
+// , m_numDropped
+// , BGFX_CONFIG_MAX_DRAW_CALLS
+// );
+// }
+ }
+
+ void sort();
+
+ uint32_t getAvailTransientIndexBuffer(uint32_t _num)
+ {
+ uint32_t offset = bx::strideAlign(m_iboffset, sizeof(uint16_t) );
+ uint32_t iboffset = offset + _num*sizeof(uint16_t);
+ iboffset = bx::uint32_min(iboffset, BGFX_CONFIG_TRANSIENT_INDEX_BUFFER_SIZE);
+ uint32_t num = (iboffset-offset)/sizeof(uint16_t);
+ return num;
+ }
+
+ uint32_t allocTransientIndexBuffer(uint32_t& _num)
+ {
+ uint32_t offset = bx::strideAlign(m_iboffset, sizeof(uint16_t) );
+ uint32_t num = getAvailTransientIndexBuffer(_num);
+ m_iboffset = offset + num*sizeof(uint16_t);
+ _num = num;
+
+ return offset;
+ }
+
+ uint32_t getAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride)
+ {
+ uint32_t offset = bx::strideAlign(m_vboffset, _stride);
+ uint32_t vboffset = offset + _num * _stride;
+ vboffset = bx::uint32_min(vboffset, BGFX_CONFIG_TRANSIENT_VERTEX_BUFFER_SIZE);
+ uint32_t num = (vboffset-offset)/_stride;
+ return num;
+ }
- if (0 < m_numDropped)
+ uint32_t allocTransientVertexBuffer(uint32_t& _num, uint16_t _stride)
+ {
+ uint32_t offset = bx::strideAlign(m_vboffset, _stride);
+ uint32_t num = getAvailTransientVertexBuffer(_num, _stride);
+ m_vboffset = offset + num * _stride;
+ _num = num;
+
+ return offset;
+ }
+
+ bool free(IndexBufferHandle _handle)
+ {
+ return m_freeIndexBuffer.queue(_handle);
+ }
+
+ bool free(VertexDeclHandle _handle)
+ {
+ return m_freeVertexDecl.queue(_handle);
+ }
+
+ bool free(VertexBufferHandle _handle)
+ {
+ return m_freeVertexBuffer.queue(_handle);
+ }
+
+ bool free(ShaderHandle _handle)
+ {
+ return m_freeShader.queue(_handle);
+ }
+
+ bool free(ProgramHandle _handle)
+ {
+ return m_freeProgram.queue(_handle);
+ }
+
+ bool free(TextureHandle _handle)
+ {
+ return m_freeTexture.queue(_handle);
+ }
+
+ bool free(FrameBufferHandle _handle)
+ {
+ return m_freeFrameBuffer.queue(_handle);
+ }
+
+ bool free(UniformHandle _handle)
+ {
+ return m_freeUniform.queue(_handle);
+ }
+
+ void resetFreeHandles()
+ {
+ m_freeIndexBuffer.reset();
+ m_freeVertexDecl.reset();
+ m_freeVertexBuffer.reset();
+ m_freeShader.reset();
+ m_freeProgram.reset();
+ m_freeTexture.reset();
+ m_freeFrameBuffer.reset();
+ m_freeUniform.reset();
+ }
+
+ ViewId m_viewRemap[BGFX_CONFIG_MAX_VIEWS];
+ float m_colorPalette[BGFX_CONFIG_MAX_COLOR_PALETTE][4];
+
+ View m_view[BGFX_CONFIG_MAX_VIEWS];
+
+ int32_t m_occlusion[BGFX_CONFIG_MAX_OCCLUSION_QUERIES];
+
+ uint64_t m_sortKeys[BGFX_CONFIG_MAX_DRAW_CALLS+1];
+ RenderItemCount m_sortValues[BGFX_CONFIG_MAX_DRAW_CALLS+1];
+ RenderItem m_renderItem[BGFX_CONFIG_MAX_DRAW_CALLS+1];
+ RenderBind m_renderItemBind[BGFX_CONFIG_MAX_DRAW_CALLS + 1];
+
+ uint32_t m_blitKeys[BGFX_CONFIG_MAX_BLIT_ITEMS+1];
+ BlitItem m_blitItem[BGFX_CONFIG_MAX_BLIT_ITEMS+1];
+
+ FrameCache m_frameCache;
+ UniformBuffer* m_uniformBuffer[BGFX_CONFIG_MAX_ENCODERS];
+
+ uint32_t m_numRenderItems;
+ uint16_t m_numBlitItems;
+
+ uint32_t m_iboffset;
+ uint32_t m_vboffset;
+ TransientIndexBuffer* m_transientIb;
+ TransientVertexBuffer* m_transientVb;
+
+ Resolution m_resolution;
+ uint32_t m_debug;
+
+ CommandBuffer m_cmdPre;
+ CommandBuffer m_cmdPost;
+
+ template<typename Ty, uint32_t Max>
+ struct FreeHandle
+ {
+ FreeHandle()
+ : m_num(0)
{
- BX_TRACE("Too many draw calls: %d, dropped %d (max: %d)"
- , m_num+m_numDropped
- , m_numDropped
- , BGFX_CONFIG_MAX_DRAW_CALLS
- );
+ }
+
+ bool isQueued(Ty _handle)
+ {
+ for (uint32_t ii = 0, num = m_num; ii < num; ++ii)
+ {
+ if (m_queue[ii].idx == _handle.idx)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ bool queue(Ty _handle)
+ {
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG) )
+ {
+ if (isQueued(_handle) )
+ {
+ return false;
+ }
+ }
+
+ m_queue[m_num] = _handle;
+ ++m_num;
+
+ return true;
+ }
+
+ void reset()
+ {
+ m_num = 0;
+ }
+
+ Ty get(uint16_t _idx) const
+ {
+ return m_queue[_idx];
+ }
+
+ uint16_t getNumQueued() const
+ {
+ return m_num;
+ }
+
+ Ty m_queue[Max];
+ uint16_t m_num;
+ };
+
+ FreeHandle<IndexBufferHandle, BGFX_CONFIG_MAX_INDEX_BUFFERS> m_freeIndexBuffer;
+ FreeHandle<VertexDeclHandle, BGFX_CONFIG_MAX_VERTEX_DECLS> m_freeVertexDecl;
+ FreeHandle<VertexBufferHandle, BGFX_CONFIG_MAX_VERTEX_BUFFERS> m_freeVertexBuffer;
+ FreeHandle<ShaderHandle, BGFX_CONFIG_MAX_SHADERS> m_freeShader;
+ FreeHandle<ProgramHandle, BGFX_CONFIG_MAX_PROGRAMS> m_freeProgram;
+ FreeHandle<TextureHandle, BGFX_CONFIG_MAX_TEXTURES> m_freeTexture;
+ FreeHandle<FrameBufferHandle, BGFX_CONFIG_MAX_FRAME_BUFFERS> m_freeFrameBuffer;
+ FreeHandle<UniformHandle, BGFX_CONFIG_MAX_UNIFORMS> m_freeUniform;
+
+ TextVideoMem* m_textVideoMem;
+ HMD m_hmd;
+
+ Stats m_perfStats;
+ ViewStats m_viewStats[BGFX_CONFIG_MAX_VIEWS];
+
+ int64_t m_waitSubmit;
+ int64_t m_waitRender;
+
+ bool m_hmdInitialized;
+ bool m_capture;
+ };
+
+ BX_ALIGN_DECL_CACHE_LINE(struct) EncoderImpl
+ {
+ EncoderImpl()
+ {
+ discard();
+ }
+
+ void begin(Frame* _frame, uint8_t _idx)
+ {
+ m_frame = _frame;
+
+ m_cpuTimeBegin = bx::getHPCounter();
+
+ m_uniformIdx = _idx;
+ m_uniformBegin = 0;
+ m_uniformEnd = 0;
+
+ UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+ uniformBuffer->reset();
+
+ m_numSubmitted = 0;
+ m_numDropped = 0;
+ }
+
+ void end(bool _finalize)
+ {
+ if (_finalize)
+ {
+ UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+ uniformBuffer->finish();
+
+ m_cpuTimeEnd = bx::getHPCounter();
+ }
+
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_OCCLUSION) )
+ {
+ m_occlusionQuerySet.clear();
+ }
+
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
+ {
+ m_uniformSet.clear();
}
}
void setMarker(const char* _name)
{
- m_uniformBuffer->writeMarker(_name);
+ UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+ uniformBuffer->writeMarker(_name);
+ }
+
+ void setUniform(UniformType::Enum _type, UniformHandle _handle, const void* _value, uint16_t _num)
+ {
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
+ {
+ BX_CHECK(m_uniformSet.end() == m_uniformSet.find(_handle.idx)
+ , "Uniform %d (%s) was already set for this draw call."
+ , _handle.idx
+ , getName(_handle)
+ );
+ m_uniformSet.insert(_handle.idx);
+ }
+
+ UniformBuffer::update(&m_frame->m_uniformBuffer[m_uniformIdx]);
+ UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+ uniformBuffer->writeUniform(_type, _handle.idx, _value, _num);
}
void setState(uint64_t _state, uint32_t _rgba)
@@ -1522,7 +2069,7 @@ namespace bgfx
uint16_t setScissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
{
- uint16_t scissor = (uint16_t)m_rectCache.add(_x, _y, _width, _height);
+ uint16_t scissor = (uint16_t)m_frame->m_frameCache.m_rectCache.add(_x, _y, _width, _height);
m_draw.m_scissor = scissor;
return scissor;
}
@@ -1534,16 +2081,16 @@ namespace bgfx
uint32_t setTransform(const void* _mtx, uint16_t _num)
{
- m_draw.m_matrix = m_matrixCache.add(_mtx, _num);
- m_draw.m_num = _num;
+ m_draw.m_startMatrix = m_frame->m_frameCache.m_matrixCache.add(_mtx, _num);
+ m_draw.m_numMatrices = _num;
- return m_draw.m_matrix;
+ return m_draw.m_startMatrix;
}
uint32_t allocTransform(Transform* _transform, uint16_t _num)
{
- uint32_t first = m_matrixCache.reserve(&_num);
- _transform->data = m_matrixCache.toPtr(first);
+ uint32_t first = m_frame->m_frameCache.m_matrixCache.reserve(&_num);
+ _transform->data = m_frame->m_frameCache.m_matrixCache.toPtr(first);
_transform->num = _num;
return first;
@@ -1555,8 +2102,8 @@ namespace bgfx
, _cache
, BGFX_CONFIG_MAX_MATRIX_CACHE
);
- m_draw.m_matrix = _cache;
- m_draw.m_num = uint16_t(bx::uint32_min(_cache+_num, BGFX_CONFIG_MAX_MATRIX_CACHE-1) - _cache);
+ m_draw.m_startMatrix = _cache;
+ m_draw.m_numMatrices = uint16_t(bx::uint32_min(_cache+_num, BGFX_CONFIG_MAX_MATRIX_CACHE-1) - _cache);
}
void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
@@ -1576,26 +2123,29 @@ namespace bgfx
void setIndexBuffer(const TransientIndexBuffer* _tib, uint32_t _firstIndex, uint32_t _numIndices)
{
+ const uint32_t numIndices = bx::uint32_min(_numIndices, _tib->size/2);
m_draw.m_indexBuffer = _tib->handle;
- m_draw.m_startIndex = _firstIndex;
- m_draw.m_numIndices = _numIndices;
- m_discard = 0 == _numIndices;
+ m_draw.m_startIndex = _tib->startIndex + _firstIndex;
+ m_draw.m_numIndices = numIndices;
+ m_discard = 0 == numIndices;
}
void setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices)
{
+ BX_CHECK(_stream < BGFX_CONFIG_MAX_VERTEX_STREAMS, "Invalid stream %d (max %d).", _stream, BGFX_CONFIG_MAX_VERTEX_STREAMS);
if (m_draw.setStreamBit(_stream, _handle) )
{
Stream& stream = m_draw.m_stream[_stream];
stream.m_startVertex = _startVertex;
stream.m_handle = _handle;
- stream.m_decl.idx = invalidHandle;
+ stream.m_decl.idx = kInvalidHandle;
m_numVertices[_stream] = _numVertices;
}
}
void setVertexBuffer(uint8_t _stream, const DynamicVertexBuffer& _dvb, uint32_t _startVertex, uint32_t _numVertices)
{
+ BX_CHECK(_stream < BGFX_CONFIG_MAX_VERTEX_STREAMS, "Invalid stream %d (max %d).", _stream, BGFX_CONFIG_MAX_VERTEX_STREAMS);
if (m_draw.setStreamBit(_stream, _dvb.m_handle) )
{
Stream& stream = m_draw.m_stream[_stream];
@@ -1610,12 +2160,13 @@ namespace bgfx
void setVertexBuffer(uint8_t _stream, const TransientVertexBuffer* _tvb, uint32_t _startVertex, uint32_t _numVertices)
{
+ BX_CHECK(_stream < BGFX_CONFIG_MAX_VERTEX_STREAMS, "Invalid stream %d (max %d).", _stream, BGFX_CONFIG_MAX_VERTEX_STREAMS);
if (m_draw.setStreamBit(_stream, _tvb->handle) )
{
Stream& stream = m_draw.m_stream[_stream];
- stream.m_startVertex = _tvb->startVertex + _startVertex;
- stream.m_handle = _tvb->handle;
- stream.m_decl = _tvb->decl;
+ stream.m_startVertex = _tvb->startVertex + _startVertex;
+ stream.m_handle = _tvb->handle;
+ stream.m_decl = _tvb->decl;
m_numVertices[_stream] =
bx::uint32_min(bx::uint32_imax(0, _tvb->size/_tvb->stride - _startVertex), _numVertices)
;
@@ -1628,7 +2179,6 @@ namespace bgfx
m_draw.m_instanceDataStride = _idb->stride;
m_draw.m_numInstances = bx::uint32_min(_idb->num, _num);
m_draw.m_instanceDataBuffer = _idb->handle;
- BX_FREE(g_allocator, const_cast<InstanceDataBuffer*>(_idb) );
}
void setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num, uint16_t _stride)
@@ -1641,7 +2191,7 @@ namespace bgfx
void setTexture(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint32_t _flags)
{
- Binding& bind = m_draw.m_bind[_stage];
+ Binding& bind = m_bind.m_bind[_stage];
bind.m_idx = _handle.idx;
bind.m_type = uint8_t(Binding::Texture);
bind.m_un.m_draw.m_textureFlags = (_flags&BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER)
@@ -1652,13 +2202,13 @@ namespace bgfx
if (isValid(_sampler) )
{
uint32_t stage = _stage;
- setUniform(_sampler, &stage);
+ setUniform(UniformType::Int1, _sampler, &stage, 1);
}
}
void setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access)
{
- Binding& bind = m_compute.m_bind[_stage];
+ Binding& bind = m_bind.m_bind[_stage];
bind.m_idx = _handle.idx;
bind.m_type = uint8_t(Binding::IndexBuffer);
bind.m_un.m_compute.m_format = 0;
@@ -1668,7 +2218,7 @@ namespace bgfx
void setBuffer(uint8_t _stage, VertexBufferHandle _handle, Access::Enum _access)
{
- Binding& bind = m_compute.m_bind[_stage];
+ Binding& bind = m_bind.m_bind[_stage];
bind.m_idx = _handle.idx;
bind.m_type = uint8_t(Binding::VertexBuffer);
bind.m_un.m_compute.m_format = 0;
@@ -1678,7 +2228,7 @@ namespace bgfx
void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format)
{
- Binding& bind = m_compute.m_bind[_stage];
+ Binding& bind = m_bind.m_bind[_stage];
bind.m_idx = _handle.idx;
bind.m_type = uint8_t(Binding::Image);
bind.m_un.m_compute.m_format = uint8_t(_format);
@@ -1688,261 +2238,69 @@ namespace bgfx
if (isValid(_sampler) )
{
uint32_t stage = _stage;
- setUniform(_sampler, &stage);
+ setUniform(UniformType::Int1, _sampler, &stage, 1);
}
}
void discard()
{
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
+ {
+ m_uniformSet.clear();
+ }
+
m_discard = false;
m_draw.clear();
m_compute.clear();
- m_stateFlags = BGFX_STATE_NONE;
+ m_bind.clear();
}
- uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState);
+ void submit(ViewId _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState);
- uint32_t submit(uint8_t _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
+ void submit(ViewId _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
{
m_draw.m_startIndirect = _start;
m_draw.m_numIndirect = _num;
m_draw.m_indirectBuffer = _indirectHandle;
OcclusionQueryHandle handle = BGFX_INVALID_HANDLE;
- return submit(_id, _program, handle, _depth, _preserveState);
+ submit(_id, _program, handle, _depth, _preserveState);
}
- uint32_t dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _ngx, uint16_t _ngy, uint16_t _ngz, uint8_t _flags);
+ void dispatch(ViewId _id, ProgramHandle _handle, uint32_t _ngx, uint32_t _ngy, uint32_t _ngz, uint8_t _flags);
- uint32_t dispatch(uint8_t _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
+ void dispatch(ViewId _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags)
{
m_compute.m_indirectBuffer = _indirectHandle;
m_compute.m_startIndirect = _start;
m_compute.m_numIndirect = _num;
- return dispatch(_id, _handle, 0, 0, 0, _flags);
- }
-
- void blit(uint8_t _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
-
- void sort();
-
- uint32_t getAvailTransientIndexBuffer(uint32_t _num)
- {
- uint32_t offset = bx::strideAlign(m_iboffset, sizeof(uint16_t) );
- uint32_t iboffset = offset + _num*sizeof(uint16_t);
- iboffset = bx::uint32_min(iboffset, BGFX_CONFIG_TRANSIENT_INDEX_BUFFER_SIZE);
- uint32_t num = (iboffset-offset)/sizeof(uint16_t);
- return num;
- }
-
- uint32_t allocTransientIndexBuffer(uint32_t& _num)
- {
- uint32_t offset = bx::strideAlign(m_iboffset, sizeof(uint16_t) );
- uint32_t num = getAvailTransientIndexBuffer(_num);
- m_iboffset = offset + num*sizeof(uint16_t);
- _num = num;
-
- return offset;
- }
-
- uint32_t getAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride)
- {
- uint32_t offset = bx::strideAlign(m_vboffset, _stride);
- uint32_t vboffset = offset + _num * _stride;
- vboffset = bx::uint32_min(vboffset, BGFX_CONFIG_TRANSIENT_VERTEX_BUFFER_SIZE);
- uint32_t num = (vboffset-offset)/_stride;
- return num;
- }
-
- uint32_t allocTransientVertexBuffer(uint32_t& _num, uint16_t _stride)
- {
- uint32_t offset = bx::strideAlign(m_vboffset, _stride);
- uint32_t num = getAvailTransientVertexBuffer(_num, _stride);
- m_vboffset = offset + num * _stride;
- _num = num;
-
- return offset;
+ dispatch(_id, _handle, 0, 0, 0, _flags);
}
- void writeUniform(UniformType::Enum _type, UniformHandle _handle, const void* _value, uint16_t _num)
- {
- UniformBuffer::update(m_uniformBuffer);
- m_uniformBuffer->writeUniform(_type, _handle.idx, _value, _num);
- }
+ void blit(ViewId _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth);
- bool free(IndexBufferHandle _handle)
- {
- return m_freeIndexBuffer.queue(_handle);
- }
-
- bool free(VertexDeclHandle _handle)
- {
- return m_freeVertexDecl.queue(_handle);
- }
-
- bool free(VertexBufferHandle _handle)
- {
- return m_freeVertexBuffer.queue(_handle);
- }
-
- bool free(ShaderHandle _handle)
- {
- return m_freeShader.queue(_handle);
- }
-
- bool free(ProgramHandle _handle)
- {
- return m_freeProgram.queue(_handle);
- }
-
- bool free(TextureHandle _handle)
- {
- return m_freeTexture.queue(_handle);
- }
-
- bool free(FrameBufferHandle _handle)
- {
- return m_freeFrameBuffer.queue(_handle);
- }
-
- bool free(UniformHandle _handle)
- {
- return m_freeUniform.queue(_handle);
- }
-
- void resetFreeHandles()
- {
- m_freeIndexBuffer.reset();
- m_freeVertexDecl.reset();
- m_freeVertexBuffer.reset();
- m_freeShader.reset();
- m_freeProgram.reset();
- m_freeTexture.reset();
- m_freeFrameBuffer.reset();
- m_freeUniform.reset();
- }
+ Frame* m_frame;
SortKey m_key;
- uint8_t m_viewRemap[BGFX_CONFIG_MAX_VIEWS];
- FrameBufferHandle m_fb[BGFX_CONFIG_MAX_VIEWS];
- Clear m_clear[BGFX_CONFIG_MAX_VIEWS];
- float m_colorPalette[BGFX_CONFIG_MAX_COLOR_PALETTE][4];
- Rect m_rect[BGFX_CONFIG_MAX_VIEWS];
- Rect m_scissor[BGFX_CONFIG_MAX_VIEWS];
- Matrix4 m_view[BGFX_CONFIG_MAX_VIEWS];
- Matrix4 m_proj[2][BGFX_CONFIG_MAX_VIEWS];
- uint8_t m_viewFlags[BGFX_CONFIG_MAX_VIEWS];
- int32_t m_occlusion[BGFX_CONFIG_MAX_OCCLUSION_QUERIES];
-
- uint64_t m_sortKeys[BGFX_CONFIG_MAX_DRAW_CALLS+1];
- RenderItemCount m_sortValues[BGFX_CONFIG_MAX_DRAW_CALLS+1];
- RenderItem m_renderItem[BGFX_CONFIG_MAX_DRAW_CALLS+1];
- RenderDraw m_draw;
+ RenderDraw m_draw;
RenderCompute m_compute;
- uint32_t m_numVertices[BGFX_CONFIG_MAX_VERTEX_STREAMS];
- uint32_t m_blitKeys[BGFX_CONFIG_MAX_BLIT_ITEMS+1];
- BlitItem m_blitItem[BGFX_CONFIG_MAX_BLIT_ITEMS+1];
- uint64_t m_stateFlags;
- uint32_t m_uniformBegin;
- uint32_t m_uniformEnd;
- uint32_t m_uniformMax;
-
- UniformBuffer* m_uniformBuffer;
-
- RenderItemCount m_num;
- RenderItemCount m_numRenderItems;
- RenderItemCount m_numDropped;
- uint16_t m_numBlitItems;
-
- MatrixCache m_matrixCache;
- RectCache m_rectCache;
-
- uint32_t m_iboffset;
- uint32_t m_vboffset;
- TransientIndexBuffer* m_transientIb;
- TransientVertexBuffer* m_transientVb;
-
- Resolution m_resolution;
- uint32_t m_debug;
-
- CommandBuffer m_cmdPre;
- CommandBuffer m_cmdPost;
-
- template<typename Ty, uint32_t Max>
- struct FreeHandle
- {
- FreeHandle()
- : m_num(0)
- {
- }
-
- bool isQueued(Ty _handle)
- {
- for (uint32_t ii = 0, num = m_num; ii < num; ++ii)
- {
- if (m_queue[ii].idx == _handle.idx)
- {
- return true;
- }
- }
-
- return false;
- }
-
- bool queue(Ty _handle)
- {
- if (BX_ENABLED(BGFX_CONFIG_DEBUG) )
- {
- if (isQueued(_handle) )
- {
- return false;
- }
- }
-
- m_queue[m_num] = _handle;
- ++m_num;
-
- return true;
- }
-
- void reset()
- {
- m_num = 0;
- }
-
- Ty get(uint16_t _idx) const
- {
- return m_queue[_idx];
- }
-
- uint16_t getNumQueued() const
- {
- return m_num;
- }
-
- Ty m_queue[Max];
- uint16_t m_num;
- };
+ RenderBind m_bind;
- FreeHandle<IndexBufferHandle, BGFX_CONFIG_MAX_INDEX_BUFFERS> m_freeIndexBuffer;
- FreeHandle<VertexDeclHandle, BGFX_CONFIG_MAX_VERTEX_DECLS> m_freeVertexDecl;
- FreeHandle<VertexBufferHandle, BGFX_CONFIG_MAX_VERTEX_BUFFERS> m_freeVertexBuffer;
- FreeHandle<ShaderHandle, BGFX_CONFIG_MAX_SHADERS> m_freeShader;
- FreeHandle<ProgramHandle, BGFX_CONFIG_MAX_PROGRAMS> m_freeProgram;
- FreeHandle<TextureHandle, BGFX_CONFIG_MAX_TEXTURES> m_freeTexture;
- FreeHandle<FrameBufferHandle, BGFX_CONFIG_MAX_FRAME_BUFFERS> m_freeFrameBuffer;
- FreeHandle<UniformHandle, BGFX_CONFIG_MAX_UNIFORMS> m_freeUniform;
+ uint32_t m_numSubmitted;
+ uint32_t m_numDropped;
- TextVideoMem* m_textVideoMem;
- HMD m_hmd;
- Stats m_perfStats;
+ uint32_t m_uniformBegin;
+ uint32_t m_uniformEnd;
+ uint32_t m_numVertices[BGFX_CONFIG_MAX_VERTEX_STREAMS];
+ uint8_t m_uniformIdx;
+ bool m_discard;
- int64_t m_waitSubmit;
- int64_t m_waitRender;
+ typedef stl::unordered_set<uint16_t> HandleSet;
+ HandleSet m_uniformSet;
+ HandleSet m_occlusionQuerySet;
- bool m_hmdInitialized;
- bool m_capture;
- bool m_discard;
+ int64_t m_cpuTimeBegin;
+ int64_t m_cpuTimeEnd;
};
struct VertexDeclRef
@@ -1953,16 +2311,20 @@ namespace bgfx
void init()
{
- bx::memSet(m_vertexDeclRef, 0, sizeof(m_vertexDeclRef) );
- bx::memSet(m_vertexBufferRef, 0xff, sizeof(m_vertexBufferRef) );
+ bx::memSet(m_vertexDeclRef, 0, sizeof(m_vertexDeclRef) );
+ bx::memSet(m_vertexBufferRef, 0xff, sizeof(m_vertexBufferRef) );
+ bx::memSet(m_dynamicVertexBufferRef, 0xff, sizeof(m_dynamicVertexBufferRef) );
}
template <uint16_t MaxHandlesT>
void shutdown(bx::HandleAllocT<MaxHandlesT>& _handleAlloc)
{
- for (VertexDeclMap::Iterator it = m_vertexDeclMap.first(); m_vertexDeclMap.next(it); )
+ for (uint16_t ii = 0, num = _handleAlloc.getNumHandles(); ii < num; ++ii)
{
- _handleAlloc.free(it.handle);
+ VertexDeclHandle handle = { _handleAlloc.getHandleAt(ii) };
+ m_vertexDeclRef[handle.idx] = 0;
+ m_vertexDeclMap.removeByHandle(handle.idx);
+ _handleAlloc.free(handle.idx);
}
m_vertexDeclMap.reset();
@@ -1974,28 +2336,59 @@ namespace bgfx
return handle;
}
+ void add(VertexDeclHandle _declHandle, uint32_t _hash)
+ {
+ m_vertexDeclRef[_declHandle.idx]++;
+ m_vertexDeclMap.insert(_hash, _declHandle.idx);
+ }
+
void add(VertexBufferHandle _handle, VertexDeclHandle _declHandle, uint32_t _hash)
{
+ BX_CHECK(m_vertexBufferRef[_handle.idx].idx == kInvalidHandle, "");
m_vertexBufferRef[_handle.idx] = _declHandle;
m_vertexDeclRef[_declHandle.idx]++;
m_vertexDeclMap.insert(_hash, _declHandle.idx);
}
- VertexDeclHandle release(VertexBufferHandle _handle)
+ void add(DynamicVertexBufferHandle _handle, VertexDeclHandle _declHandle, uint32_t _hash)
{
- VertexDeclHandle declHandle = m_vertexBufferRef[_handle.idx];
- if (isValid(declHandle) )
+ BX_CHECK(m_dynamicVertexBufferRef[_handle.idx].idx == kInvalidHandle, "");
+ m_dynamicVertexBufferRef[_handle.idx] = _declHandle;
+ m_vertexDeclRef[_declHandle.idx]++;
+ m_vertexDeclMap.insert(_hash, _declHandle.idx);
+ }
+
+ VertexDeclHandle release(VertexDeclHandle _declHandle)
+ {
+ if (isValid(_declHandle) )
{
- m_vertexDeclRef[declHandle.idx]--;
+ m_vertexDeclRef[_declHandle.idx]--;
- if (0 != m_vertexDeclRef[declHandle.idx])
+ if (0 == m_vertexDeclRef[_declHandle.idx])
{
- VertexDeclHandle invalid = BGFX_INVALID_HANDLE;
- return invalid;
+ m_vertexDeclMap.removeByHandle(_declHandle.idx);
+ return _declHandle;
}
}
- m_vertexDeclMap.removeByHandle(declHandle.idx);
+ VertexDeclHandle invalid = BGFX_INVALID_HANDLE;
+ return invalid;
+ }
+
+ VertexDeclHandle release(VertexBufferHandle _handle)
+ {
+ VertexDeclHandle declHandle = m_vertexBufferRef[_handle.idx];
+ declHandle = release(declHandle);
+ m_vertexBufferRef[_handle.idx].idx = kInvalidHandle;
+
+ return declHandle;
+ }
+
+ VertexDeclHandle release(DynamicVertexBufferHandle _handle)
+ {
+ VertexDeclHandle declHandle = m_dynamicVertexBufferRef[_handle.idx];
+ declHandle = release(declHandle);
+ m_dynamicVertexBufferRef[_handle.idx].idx = kInvalidHandle;
return declHandle;
}
@@ -2005,13 +2398,14 @@ namespace bgfx
uint16_t m_vertexDeclRef[BGFX_CONFIG_MAX_VERTEX_DECLS];
VertexDeclHandle m_vertexBufferRef[BGFX_CONFIG_MAX_VERTEX_BUFFERS];
+ VertexDeclHandle m_dynamicVertexBufferRef[BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS];
};
// First-fit non-local allocator.
class NonLocalAllocator
{
public:
- static const uint64_t invalidBlock = UINT64_MAX;
+ static const uint64_t kInvalidBlock = UINT64_MAX;
NonLocalAllocator()
{
@@ -2071,7 +2465,7 @@ namespace bgfx
}
// there is no block large enough.
- return invalidBlock;
+ return kInvalidBlock;
}
void free(uint64_t _block)
@@ -2135,6 +2529,7 @@ namespace bgfx
virtual ~RendererContextI() = 0;
virtual RendererType::Enum getRendererType() const = 0;
virtual const char* getRendererName() const = 0;
+ virtual bool isDeviceRemoved() = 0;
virtual void flip(HMD& _hmd) = 0;
virtual void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) = 0;
virtual void destroyIndexBuffer(IndexBufferHandle _handle) = 0;
@@ -2167,10 +2562,11 @@ namespace bgfx
virtual void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) = 0;
virtual void destroyUniform(UniformHandle _handle) = 0;
virtual void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) = 0;
- virtual void updateViewName(uint8_t _id, const char* _name) = 0;
+ virtual void updateViewName(ViewId _id, const char* _name) = 0;
virtual void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) = 0;
virtual void setMarker(const char* _marker, uint32_t _size) = 0;
virtual void invalidateOcclusionQuery(OcclusionQueryHandle _handle) = 0;
+ virtual void setName(Handle _handle, const char* _name) = 0;
virtual void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) = 0;
virtual void blitSetup(TextVideoMemBlitter& _blitter) = 0;
virtual void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) = 0;
@@ -2197,10 +2593,11 @@ namespace bgfx
, m_numFreeDynamicVertexBufferHandles(0)
, m_numFreeOcclusionQueryHandles(0)
, m_colorPaletteDirty(0)
- , m_instBufferCount(0)
, m_frames(0)
, m_debug(BGFX_DEBUG_NONE)
, m_renderCtx(NULL)
+ , m_renderMain(NULL)
+ , m_renderNoop(NULL)
, m_rendererInitialized(false)
, m_exit(false)
, m_flipAfterRender(false)
@@ -2212,13 +2609,13 @@ namespace bgfx
{
}
- static int32_t renderThread(void* /*_userData*/)
+ static int32_t renderThread(bx::Thread* /*_self*/, void* /*_userData*/)
{
BX_TRACE("render thread start");
BGFX_PROFILER_SET_CURRENT_THREAD_NAME("bgfx - Render Thread");
while (RenderFrame::Exiting != bgfx::renderFrame() ) {};
BX_TRACE("render thread exit");
- return EXIT_SUCCESS;
+ return bx::kExitSuccess;
}
// game thread
@@ -2252,7 +2649,10 @@ namespace bgfx
m_flipAfterRender = !!(_flags & BGFX_RESET_FLIP_AFTER_RENDER);
- bx::memSet(m_fb, 0xff, sizeof(m_fb) );
+ for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
+ {
+ m_view[ii].setFrameBuffer(BGFX_INVALID_HANDLE);
+ }
for (uint16_t ii = 0, num = m_textureHandle.getNumHandles(); ii < num; ++ii)
{
@@ -2278,22 +2678,30 @@ namespace bgfx
BGFX_API_FUNC(void dbgTextClear(uint8_t _attr, bool _small) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
m_submit->m_textVideoMem->resize(_small, (uint16_t)m_resolution.m_width, (uint16_t)m_resolution.m_height);
m_submit->m_textVideoMem->clear(_attr);
}
BGFX_API_FUNC(void dbgTextPrintfVargs(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, va_list _argList) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
m_submit->m_textVideoMem->printfVargs(_x, _y, _attr, _format, _argList);
}
BGFX_API_FUNC(void dbgTextImage(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const void* _data, uint16_t _pitch) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
m_submit->m_textVideoMem->image(_x, _y, _width, _height, _data, _pitch);
}
BGFX_API_FUNC(const HMD* getHMD() )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
if (m_submit->m_hmdInitialized)
{
return &m_submit->m_hmd;
@@ -2304,6 +2712,8 @@ namespace bgfx
BGFX_API_FUNC(const Stats* getPerfStats() )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
Stats& stats = m_submit->m_perfStats;
const Resolution& resolution = m_submit->m_resolution;
stats.width = uint16_t(resolution.m_width);
@@ -2311,11 +2721,14 @@ namespace bgfx
const TextVideoMem* tvm = m_submit->m_textVideoMem;
stats.textWidth = tvm->m_width;
stats.textHeight = tvm->m_height;
+ stats.encoderStats = m_encoderStats;
return &stats;
}
BGFX_API_FUNC(IndexBufferHandle createIndexBuffer(const Memory* _mem, uint16_t _flags) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
IndexBufferHandle handle = { m_indexBufferHandle.alloc() };
BX_WARN(isValid(handle), "Failed to allocate index buffer handle.");
@@ -2326,12 +2739,18 @@ namespace bgfx
cmdbuf.write(_mem);
cmdbuf.write(_flags);
}
+ else
+ {
+ release(_mem);
+ }
return handle;
}
BGFX_API_FUNC(void destroyIndexBuffer(IndexBufferHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyIndexBuffer", m_indexBufferHandle, _handle);
bool ok = m_submit->free(_handle); BX_UNUSED(ok);
BX_CHECK(ok, "Index buffer handle %d is already destroyed!", _handle.idx);
@@ -2346,8 +2765,12 @@ namespace bgfx
if (!isValid(declHandle) )
{
- VertexDeclHandle temp = { m_vertexDeclHandle.alloc() };
- declHandle = temp;
+ declHandle.idx = m_vertexDeclHandle.alloc();
+ if (!isValid(declHandle) )
+ {
+ return declHandle;
+ }
+
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateVertexDecl);
cmdbuf.write(declHandle);
cmdbuf.write(_decl);
@@ -2358,12 +2781,20 @@ namespace bgfx
BGFX_API_FUNC(VertexBufferHandle createVertexBuffer(const Memory* _mem, const VertexDecl& _decl, uint16_t _flags) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
VertexBufferHandle handle = { m_vertexBufferHandle.alloc() };
- BX_WARN(isValid(handle), "Failed to allocate vertex buffer handle.");
if (isValid(handle) )
{
VertexDeclHandle declHandle = findVertexDecl(_decl);
+ if (!isValid(declHandle) )
+ {
+ BX_TRACE("WARNING: Failed to allocate vertex decl handle (BGFX_CONFIG_MAX_VERTEX_DECLS, max: %d).", BGFX_CONFIG_MAX_VERTEX_DECLS);
+ m_vertexBufferHandle.free(handle.idx);
+ return BGFX_INVALID_HANDLE;
+ }
+
m_declRef.add(handle, declHandle, _decl.m_hash);
m_vertexBuffers[handle.idx].m_stride = _decl.m_stride;
@@ -2373,13 +2804,20 @@ namespace bgfx
cmdbuf.write(_mem);
cmdbuf.write(declHandle);
cmdbuf.write(_flags);
+
+ return handle;
}
- return handle;
+ BX_TRACE("WARNING: Failed to allocate vertex buffer handle (BGFX_CONFIG_MAX_VERTEX_BUFFERS, max: %d).", BGFX_CONFIG_MAX_VERTEX_BUFFERS);
+ release(_mem);
+
+ return BGFX_INVALID_HANDLE;
}
BGFX_API_FUNC(void destroyVertexBuffer(VertexBufferHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyVertexBuffer", m_vertexBufferHandle, _handle);
bool ok = m_submit->free(_handle); BX_UNUSED(ok);
BX_CHECK(ok, "Vertex buffer handle %d is already destroyed!", _handle.idx);
@@ -2404,7 +2842,7 @@ namespace bgfx
uint64_t allocDynamicIndexBuffer(uint32_t _size, uint16_t _flags)
{
uint64_t ptr = m_dynIndexBufferAllocator.alloc(_size);
- if (ptr == NonLocalAllocator::invalidBlock)
+ if (ptr == NonLocalAllocator::kInvalidBlock)
{
IndexBufferHandle indexBufferHandle = { m_indexBufferHandle.alloc() };
BX_WARN(isValid(indexBufferHandle), "Failed to allocate index buffer handle.");
@@ -2429,6 +2867,8 @@ namespace bgfx
BGFX_API_FUNC(DynamicIndexBufferHandle createDynamicIndexBuffer(uint32_t _num, uint16_t _flags) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
DynamicIndexBufferHandle handle = BGFX_INVALID_HANDLE;
const uint32_t indexSize = 0 == (_flags & BGFX_BUFFER_INDEX32) ? 2 : 4;
uint32_t size = BX_ALIGN_16(_num*indexSize);
@@ -2452,7 +2892,7 @@ namespace bgfx
else
{
ptr = allocDynamicIndexBuffer(size, _flags);
- if (ptr == NonLocalAllocator::invalidBlock)
+ if (ptr == NonLocalAllocator::kInvalidBlock)
{
return handle;
}
@@ -2477,18 +2917,28 @@ namespace bgfx
BGFX_API_FUNC(DynamicIndexBufferHandle createDynamicIndexBuffer(const Memory* _mem, uint16_t _flags) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BX_CHECK(0 == (_flags & BGFX_BUFFER_COMPUTE_READ_WRITE), "Cannot initialize compute buffer from CPU.");
const uint32_t indexSize = 0 == (_flags & BGFX_BUFFER_INDEX32) ? 2 : 4;
DynamicIndexBufferHandle handle = createDynamicIndexBuffer(_mem->size/indexSize, _flags);
+
if (isValid(handle) )
{
updateDynamicIndexBuffer(handle, 0, _mem);
}
+ else
+ {
+ release(_mem);
+ }
+
return handle;
}
BGFX_API_FUNC(void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _startIndex, const Memory* _mem) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("updateDynamicIndexBuffer", m_dynamicIndexBufferHandle, _handle);
DynamicIndexBuffer& dib = m_dynamicIndexBuffers[_handle.idx];
@@ -2526,6 +2976,8 @@ namespace bgfx
BGFX_API_FUNC(void destroyDynamicIndexBuffer(DynamicIndexBufferHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyDynamicIndexBuffer", m_dynamicIndexBufferHandle, _handle);
m_freeDynamicIndexBufferHandle[m_numFreeDynamicIndexBufferHandles++] = _handle;
@@ -2558,14 +3010,14 @@ namespace bgfx
uint64_t allocDynamicVertexBuffer(uint32_t _size, uint16_t _flags)
{
uint64_t ptr = m_dynVertexBufferAllocator.alloc(_size);
- if (ptr == NonLocalAllocator::invalidBlock)
+ if (ptr == NonLocalAllocator::kInvalidBlock)
{
VertexBufferHandle vertexBufferHandle = { m_vertexBufferHandle.alloc() };
BX_WARN(isValid(vertexBufferHandle), "Failed to allocate dynamic vertex buffer handle.");
if (!isValid(vertexBufferHandle) )
{
- return NonLocalAllocator::invalidBlock;
+ return NonLocalAllocator::kInvalidBlock;
}
uint32_t allocSize = bx::uint32_max(BGFX_CONFIG_DYNAMIC_VERTEX_BUFFER_SIZE, _size);
@@ -2584,15 +3036,18 @@ namespace bgfx
BGFX_API_FUNC(DynamicVertexBufferHandle createDynamicVertexBuffer(uint32_t _num, const VertexDecl& _decl, uint16_t _flags) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
DynamicVertexBufferHandle handle = BGFX_INVALID_HANDLE;
uint32_t size = bx::strideAlign16(_num*_decl.m_stride, _decl.m_stride);
uint64_t ptr = 0;
- if (0 != (_flags & BGFX_BUFFER_COMPUTE_WRITE) )
+ if (0 != (_flags & BGFX_BUFFER_COMPUTE_READ_WRITE) )
{
VertexBufferHandle vertexBufferHandle = { m_vertexBufferHandle.alloc() };
if (!isValid(vertexBufferHandle) )
{
+ BX_TRACE("WARNING: Failed to allocate vertex buffer handle (BGFX_CONFIG_MAX_VERTEX_BUFFERS, max: %d).", BGFX_CONFIG_MAX_VERTEX_BUFFERS);
return handle;
}
@@ -2606,15 +3061,26 @@ namespace bgfx
else
{
ptr = allocDynamicVertexBuffer(size, _flags);
- if (ptr == NonLocalAllocator::invalidBlock)
+ if (ptr == NonLocalAllocator::kInvalidBlock)
{
return handle;
}
}
VertexDeclHandle declHandle = findVertexDecl(_decl);
+ if (!isValid(declHandle) )
+ {
+ BX_TRACE("WARNING: Failed to allocate vertex decl handle (BGFX_CONFIG_MAX_VERTEX_DECLS, max: %d).", BGFX_CONFIG_MAX_VERTEX_DECLS);
+ return handle;
+ }
handle.idx = m_dynamicVertexBufferHandle.alloc();
+ if (!isValid(handle) )
+ {
+ BX_TRACE("WARNING: Failed to allocate dynamic vertex buffer handle (BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS, max: %d).", BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS);
+ return handle;
+ }
+
DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[handle.idx];
dvb.m_handle.idx = uint16_t(ptr>>32);
dvb.m_offset = uint32_t(ptr);
@@ -2624,24 +3090,34 @@ namespace bgfx
dvb.m_stride = _decl.m_stride;
dvb.m_decl = declHandle;
dvb.m_flags = _flags;
- m_declRef.add(dvb.m_handle, declHandle, _decl.m_hash);
+ m_declRef.add(handle, declHandle, _decl.m_hash);
return handle;
}
BGFX_API_FUNC(DynamicVertexBufferHandle createDynamicVertexBuffer(const Memory* _mem, const VertexDecl& _decl, uint16_t _flags) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
uint32_t numVertices = _mem->size/_decl.m_stride;
DynamicVertexBufferHandle handle = createDynamicVertexBuffer(numVertices, _decl, _flags);
+
if (isValid(handle) )
{
updateDynamicVertexBuffer(handle, 0, _mem);
}
+ else
+ {
+ release(_mem);
+ }
+
return handle;
}
BGFX_API_FUNC(void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, const Memory* _mem) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("updateDynamicVertexBuffer", m_dynamicVertexBufferHandle, _handle);
DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[_handle.idx];
@@ -2680,6 +3156,8 @@ namespace bgfx
BGFX_API_FUNC(void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyDynamicVertexBuffer", m_dynamicVertexBufferHandle, _handle);
m_freeDynamicVertexBufferHandle[m_numFreeDynamicVertexBufferHandles++] = _handle;
@@ -2687,9 +3165,9 @@ namespace bgfx
void destroyDynamicVertexBufferInternal(DynamicVertexBufferHandle _handle)
{
- DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[_handle.idx];
+ VertexDeclHandle declHandle = m_declRef.release(_handle);
+ BGFX_CHECK_HANDLE_INVALID_OK("destroyDynamicVertexBufferInternal", m_vertexDeclHandle, declHandle);
- VertexDeclHandle declHandle = m_declRef.release(dvb.m_handle);
if (isValid(declHandle) )
{
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::DestroyVertexDecl);
@@ -2697,7 +3175,9 @@ namespace bgfx
m_render->free(declHandle);
}
- if (0 != (dvb.m_flags & BGFX_BUFFER_COMPUTE_WRITE) )
+ DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[_handle.idx];
+
+ if (0 != (dvb.m_flags & BGFX_BUFFER_COMPUTE_READ_WRITE) )
{
destroyVertexBuffer(dvb.m_handle);
}
@@ -2717,13 +3197,17 @@ namespace bgfx
m_dynamicVertexBufferHandle.free(_handle.idx);
}
- BGFX_API_FUNC(uint32_t getAvailTransientIndexBuffer(uint32_t _num) const)
+ BGFX_API_FUNC(uint32_t getAvailTransientIndexBuffer(uint32_t _num) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
return m_submit->getAvailTransientIndexBuffer(_num);
}
- BGFX_API_FUNC(uint32_t getAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) const)
+ BGFX_API_FUNC(uint32_t getAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
return m_submit->getAvailTransientVertexBuffer(_num, _stride);
}
@@ -2762,6 +3246,8 @@ namespace bgfx
BGFX_API_FUNC(void allocTransientIndexBuffer(TransientIndexBuffer* _tib, uint32_t _num) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
uint32_t offset = m_submit->allocTransientIndexBuffer(_num);
TransientIndexBuffer& tib = *m_submit->m_transientIb;
@@ -2822,6 +3308,8 @@ namespace bgfx
BGFX_API_FUNC(void allocTransientVertexBuffer(TransientVertexBuffer* _tvb, uint32_t _num, const VertexDecl& _decl) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
VertexDeclHandle declHandle = m_declRef.find(_decl.m_hash);
TransientVertexBuffer& dvb = *m_submit->m_transientVb;
@@ -2833,7 +3321,7 @@ namespace bgfx
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateVertexDecl);
cmdbuf.write(declHandle);
cmdbuf.write(_decl);
- m_declRef.add(dvb.handle, declHandle, _decl.m_hash);
+ m_declRef.add(declHandle, _decl.m_hash);
}
uint32_t offset = m_submit->allocTransientVertexBuffer(_num, _decl.m_stride);
@@ -2846,23 +3334,18 @@ namespace bgfx
_tvb->decl = declHandle;
}
- BGFX_API_FUNC(const InstanceDataBuffer* allocInstanceDataBuffer(uint32_t _num, uint16_t _stride) )
+ BGFX_API_FUNC(void allocInstanceDataBuffer(InstanceDataBuffer* _idb, uint32_t _num, uint16_t _stride) )
{
- ++m_instBufferCount;
-
uint16_t stride = BX_ALIGN_16(_stride);
uint32_t offset = m_submit->allocTransientVertexBuffer(_num, stride);
TransientVertexBuffer& dvb = *m_submit->m_transientVb;
- InstanceDataBuffer* idb = (InstanceDataBuffer*)BX_ALLOC(g_allocator, sizeof(InstanceDataBuffer) );
- idb->data = &dvb.data[offset];
- idb->size = _num * stride;
- idb->offset = offset;
- idb->num = _num;
- idb->stride = stride;
- idb->handle = dvb.handle;
-
- return idb;
+ _idb->data = &dvb.data[offset];
+ _idb->size = _num * stride;
+ _idb->offset = offset;
+ _idb->num = _num;
+ _idb->stride = stride;
+ _idb->handle = dvb.handle;
}
IndirectBufferHandle createIndirectBuffer(uint32_t _num)
@@ -2897,6 +3380,8 @@ namespace bgfx
BGFX_API_FUNC(ShaderHandle createShader(const Memory* _mem) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
bx::MemoryReader reader(_mem->data, _mem->size);
bx::Error err;
@@ -2907,6 +3392,7 @@ namespace bgfx
if (!err.isOk() )
{
ShaderHandle invalid = BGFX_INVALID_HANDLE;
+ release(_mem);
return invalid;
}
@@ -2921,14 +3407,28 @@ namespace bgfx
, ( (uint8_t*)&magic)[3]
);
ShaderHandle invalid = BGFX_INVALID_HANDLE;
+ release(_mem);
return invalid;
}
+ const uint32_t shaderHash = bx::hash<bx::HashMurmur2A>(_mem->data, _mem->size);
+ const uint16_t idx = m_shaderHashMap.find(shaderHash);
+ if (kInvalidHandle != idx)
+ {
+ ShaderHandle handle = { idx };
+ shaderIncRef(handle);
+ release(_mem);
+ return handle;
+ }
+
ShaderHandle handle = { m_shaderHandle.alloc() };
BX_WARN(isValid(handle), "Failed to allocate shader handle.");
if (isValid(handle) )
{
+ bool ok = m_shaderHashMap.insert(shaderHash, handle.idx);
+ BX_CHECK(ok, "Shader already exists!"); BX_UNUSED(ok);
+
uint32_t iohash;
bx::read(&reader, iohash);
@@ -2939,7 +3439,6 @@ namespace bgfx
sr.m_refCount = 1;
sr.m_hash = iohash;
sr.m_num = 0;
- sr.m_owned = false;
sr.m_uniforms = NULL;
UniformHandle* uniforms = (UniformHandle*)alloca(count*sizeof(UniformHandle) );
@@ -2985,12 +3484,18 @@ namespace bgfx
cmdbuf.write(handle);
cmdbuf.write(_mem);
}
+ else
+ {
+ release(_mem);
+ }
return handle;
}
BGFX_API_FUNC(uint16_t getShaderUniforms(ShaderHandle _handle, UniformHandle* _uniforms, uint16_t _max) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
if (!isValid(_handle) )
{
BX_WARN(false, "Passing invalid shader handle to bgfx::getShaderUniforms.");
@@ -3006,8 +3511,31 @@ namespace bgfx
return sr.m_num;
}
+ void setName(Handle _handle, const char* _name)
+ {
+ CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::SetName);
+ cmdbuf.write(_handle);
+ uint16_t len = (uint8_t)bx::strLen(_name)+1;
+ cmdbuf.write(len);
+ cmdbuf.write(_name, len);
+ }
+
+ BGFX_API_FUNC(void setName(ShaderHandle _handle, const char* _name) )
+ {
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
+ BGFX_CHECK_HANDLE("setName", m_shaderHandle, _handle);
+
+ ShaderRef& sr = m_shaderRef[_handle.idx];
+ sr.m_name.set(_name);
+
+ setName(convert(_handle), _name);
+ }
+
BGFX_API_FUNC(void destroyShader(ShaderHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyShader", m_shaderHandle, _handle);
if (!isValid(_handle) )
@@ -3021,12 +3549,7 @@ namespace bgfx
void shaderTakeOwnership(ShaderHandle _handle)
{
- ShaderRef& sr = m_shaderRef[_handle.idx];
- if (!sr.m_owned)
- {
- sr.m_owned = true;
- shaderDecRef(_handle);
- }
+ shaderDecRef(_handle);
}
void shaderIncRef(ShaderHandle _handle)
@@ -3058,11 +3581,15 @@ namespace bgfx
sr.m_uniforms = NULL;
sr.m_num = 0;
}
+
+ m_shaderHashMap.removeByHandle(_handle.idx);
}
}
BGFX_API_FUNC(ProgramHandle createProgram(ShaderHandle _vsh, ShaderHandle _fsh, bool _destroyShaders) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
if (!isValid(_vsh)
|| !isValid(_fsh) )
{
@@ -3071,45 +3598,46 @@ namespace bgfx
return invalid;
}
- uint16_t idx = m_programHashMap.find(uint32_t(_fsh.idx<<16)|_vsh.idx);
- if (ProgramHashMap::invalid != idx)
+ ProgramHandle handle = { m_programHashMap.find(uint32_t(_fsh.idx<<16)|_vsh.idx) };
+ if (isValid(handle) )
{
- ProgramHandle handle = { idx };
ProgramRef& pr = m_programRef[handle.idx];
++pr.m_refCount;
- return handle;
+ shaderIncRef(pr.m_vsh);
+ shaderIncRef(pr.m_fsh);
}
-
- const ShaderRef& vsr = m_shaderRef[_vsh.idx];
- const ShaderRef& fsr = m_shaderRef[_fsh.idx];
- if (vsr.m_hash != fsr.m_hash)
- {
- BX_TRACE("Vertex shader output doesn't match fragment shader input.");
- ProgramHandle invalid = BGFX_INVALID_HANDLE;
- return invalid;
- }
-
- ProgramHandle handle;
- handle.idx = m_programHandle.alloc();
-
- BX_WARN(isValid(handle), "Failed to allocate program handle.");
- if (isValid(handle) )
+ else
{
- shaderIncRef(_vsh);
- shaderIncRef(_fsh);
- ProgramRef& pr = m_programRef[handle.idx];
- pr.m_vsh = _vsh;
- pr.m_fsh = _fsh;
- pr.m_refCount = 1;
+ const ShaderRef& vsr = m_shaderRef[_vsh.idx];
+ const ShaderRef& fsr = m_shaderRef[_fsh.idx];
+ if (vsr.m_hash != fsr.m_hash)
+ {
+ BX_TRACE("Vertex shader output doesn't match fragment shader input.");
+ ProgramHandle invalid = BGFX_INVALID_HANDLE;
+ return invalid;
+ }
- const uint32_t key = uint32_t(_fsh.idx<<16)|_vsh.idx;
- bool ok = m_programHashMap.insert(key, handle.idx);
- BX_CHECK(ok, "Program already exists (key: %x, handle: %3d)!", key, handle.idx); BX_UNUSED(ok);
+ handle.idx = m_programHandle.alloc();
- CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateProgram);
- cmdbuf.write(handle);
- cmdbuf.write(_vsh);
- cmdbuf.write(_fsh);
+ BX_WARN(isValid(handle), "Failed to allocate program handle.");
+ if (isValid(handle) )
+ {
+ shaderIncRef(_vsh);
+ shaderIncRef(_fsh);
+ ProgramRef& pr = m_programRef[handle.idx];
+ pr.m_vsh = _vsh;
+ pr.m_fsh = _fsh;
+ pr.m_refCount = 1;
+
+ const uint32_t key = uint32_t(_fsh.idx<<16)|_vsh.idx;
+ bool ok = m_programHashMap.insert(key, handle.idx);
+ BX_CHECK(ok, "Program already exists (key: %x, handle: %3d)!", key, handle.idx); BX_UNUSED(ok);
+
+ CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateProgram);
+ cmdbuf.write(handle);
+ cmdbuf.write(_vsh);
+ cmdbuf.write(_fsh);
+ }
}
if (_destroyShaders)
@@ -3123,6 +3651,8 @@ namespace bgfx
BGFX_API_FUNC(ProgramHandle createProgram(ShaderHandle _vsh, bool _destroyShader) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
if (!isValid(_vsh) )
{
BX_WARN(false, "Compute shader is invalid (vsh %d).", _vsh.idx);
@@ -3130,36 +3660,37 @@ namespace bgfx
return invalid;
}
- uint16_t idx = m_programHashMap.find(_vsh.idx);
- if (ProgramHashMap::invalid != idx)
+ ProgramHandle handle = { m_programHashMap.find(_vsh.idx) };
+
+ if (isValid(handle) )
{
- ProgramHandle handle = { idx };
ProgramRef& pr = m_programRef[handle.idx];
++pr.m_refCount;
- return handle;
+ shaderIncRef(pr.m_vsh);
}
-
- ProgramHandle handle;
- handle.idx = m_programHandle.alloc();
-
- BX_WARN(isValid(handle), "Failed to allocate program handle.");
- if (isValid(handle) )
+ else
{
- shaderIncRef(_vsh);
- ProgramRef& pr = m_programRef[handle.idx];
- pr.m_vsh = _vsh;
- ShaderHandle fsh = BGFX_INVALID_HANDLE;
- pr.m_fsh = fsh;
- pr.m_refCount = 1;
+ handle.idx = m_programHandle.alloc();
- const uint32_t key = uint32_t(_vsh.idx);
- bool ok = m_programHashMap.insert(key, handle.idx);
- BX_CHECK(ok, "Program already exists (key: %x, handle: %3d)!", key, handle.idx); BX_UNUSED(ok);
-
- CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateProgram);
- cmdbuf.write(handle);
- cmdbuf.write(_vsh);
- cmdbuf.write(fsh);
+ BX_WARN(isValid(handle), "Failed to allocate program handle.");
+ if (isValid(handle) )
+ {
+ shaderIncRef(_vsh);
+ ProgramRef& pr = m_programRef[handle.idx];
+ pr.m_vsh = _vsh;
+ ShaderHandle fsh = BGFX_INVALID_HANDLE;
+ pr.m_fsh = fsh;
+ pr.m_refCount = 1;
+
+ const uint32_t key = uint32_t(_vsh.idx);
+ bool ok = m_programHashMap.insert(key, handle.idx);
+ BX_CHECK(ok, "Program already exists (key: %x, handle: %3d)!", key, handle.idx); BX_UNUSED(ok);
+
+ CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateProgram);
+ cmdbuf.write(handle);
+ cmdbuf.write(_vsh);
+ cmdbuf.write(fsh);
+ }
}
if (_destroyShader)
@@ -3172,9 +3703,18 @@ namespace bgfx
BGFX_API_FUNC(void destroyProgram(ProgramHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyProgram", m_programHandle, _handle);
ProgramRef& pr = m_programRef[_handle.idx];
+ shaderDecRef(pr.m_vsh);
+
+ if (isValid(pr.m_fsh) )
+ {
+ shaderDecRef(pr.m_fsh);
+ }
+
int32_t refs = --pr.m_refCount;
if (0 == refs)
{
@@ -3184,29 +3724,22 @@ namespace bgfx
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::DestroyProgram);
cmdbuf.write(_handle);
- shaderDecRef(pr.m_vsh);
- uint32_t hash = pr.m_vsh.idx;
-
- if (isValid(pr.m_fsh) )
- {
- shaderDecRef(pr.m_fsh);
- hash |= pr.m_fsh.idx << 16;
- }
-
m_programHashMap.removeByHandle(_handle.idx);
}
}
BGFX_API_FUNC(TextureHandle createTexture(const Memory* _mem, uint32_t _flags, uint8_t _skip, TextureInfo* _info, BackbufferRatio::Enum _ratio) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
TextureInfo ti;
if (NULL == _info)
{
_info = &ti;
}
- ImageContainer imageContainer;
- if (imageParse(imageContainer, _mem->data, _mem->size) )
+ bimg::ImageContainer imageContainer;
+ if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
{
calcTextureSize(*_info
, (uint16_t)imageContainer.m_width
@@ -3247,12 +3780,30 @@ namespace bgfx
cmdbuf.write(_flags);
cmdbuf.write(_skip);
}
+ else
+ {
+ release(_mem);
+ }
return handle;
}
+ BGFX_API_FUNC(void setName(TextureHandle _handle, const char* _name) )
+ {
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
+ BGFX_CHECK_HANDLE("setName", m_textureHandle, _handle);
+
+ TextureRef& ref = m_textureRef[_handle.idx];
+ ref.m_name.set(_name);
+
+ setName(convert(_handle), _name);
+ }
+
BGFX_API_FUNC(void destroyTexture(TextureHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyTexture", m_textureHandle, _handle);
if (!isValid(_handle) )
@@ -3266,6 +3817,8 @@ namespace bgfx
BGFX_API_FUNC(uint32_t readTexture(TextureHandle _handle, void* _data, uint8_t _mip) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("readTexture", m_textureHandle, _handle);
const TextureRef& ref = m_textureRef[_handle.idx];
@@ -3290,7 +3843,7 @@ namespace bgfx
, _handle.idx
, _width
, _height
- , bgfx::getName(TextureFormat::Enum(textureRef.m_format) )
+ , bimg::getName(bimg::TextureFormat::Enum(textureRef.m_format) )
);
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::ResizeTexture);
@@ -3322,6 +3875,8 @@ namespace bgfx
int32_t refs = --ref.m_refCount;
if (0 == refs)
{
+ ref.m_name.clear();
+
bool ok = m_submit->free(_handle); BX_UNUSED(ok);
BX_CHECK(ok, "Texture handle %d is already destroyed!", _handle.idx);
@@ -3344,6 +3899,8 @@ namespace bgfx
, const Memory* _mem
) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::UpdateTexture);
cmdbuf.write(_handle);
cmdbuf.write(_side);
@@ -3368,7 +3925,7 @@ namespace bgfx
for (uint32_t ii = 0; ii < _num; ++ii)
{
TextureHandle texHandle = _attachment[ii].handle;
- if (isDepth(TextureFormat::Enum(m_textureRef[texHandle.idx].m_format)))
+ if (bimg::isDepth(bimg::TextureFormat::Enum(m_textureRef[texHandle.idx].m_format)))
{
++depth;
}
@@ -3385,6 +3942,8 @@ namespace bgfx
BGFX_API_FUNC(FrameBufferHandle createFrameBuffer(uint8_t _num, const Attachment* _attachment, bool _destroyTextures) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BX_CHECK(checkFrameBuffer(_num, _attachment)
, "Too many frame buffer attachments (num attachments: %d, max color attachments %d)!"
, _num
@@ -3432,6 +3991,8 @@ namespace bgfx
BGFX_API_FUNC(FrameBufferHandle createFrameBuffer(void* _nwh, uint16_t _width, uint16_t _height, TextureFormat::Enum _depthFormat) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
FrameBufferHandle handle = { m_frameBufferHandle.alloc() };
BX_WARN(isValid(handle), "Failed to allocate frame buffer handle.");
@@ -3455,6 +4016,8 @@ namespace bgfx
BGFX_API_FUNC(TextureHandle getTexture(FrameBufferHandle _handle, uint8_t _attachment) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("getTexture", m_frameBufferHandle, _handle);
const FrameBufferRef& ref = m_frameBufferRef[_handle.idx];
@@ -3470,6 +4033,8 @@ namespace bgfx
BGFX_API_FUNC(void destroyFrameBuffer(FrameBufferHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyFrameBuffer", m_frameBufferHandle, _handle);
bool ok = m_submit->free(_handle); BX_UNUSED(ok);
BX_CHECK(ok, "Frame buffer handle %d is already destroyed!", _handle.idx);
@@ -3493,6 +4058,8 @@ namespace bgfx
BGFX_API_FUNC(UniformHandle createUniform(const char* _name, UniformType::Enum _type, uint16_t _num) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BX_WARN(PredefinedUniform::Count == nameToPredefinedUniformEnum(_name), "%s is predefined uniform name.", _name);
if (PredefinedUniform::Count != nameToPredefinedUniformEnum(_name) )
{
@@ -3502,8 +4069,8 @@ namespace bgfx
_num = bx::uint16_max(1, _num);
- uint16_t idx = m_uniformHashMap.find(bx::hashMurmur2A(_name) );
- if (UniformHashMap::invalid != idx)
+ uint16_t idx = m_uniformHashMap.find(bx::hash<bx::HashMurmur2A>(_name) );
+ if (kInvalidHandle != idx)
{
UniformHandle handle = { idx };
UniformRef& uniform = m_uniformRef[handle.idx];
@@ -3526,7 +4093,7 @@ namespace bgfx
cmdbuf.write(handle);
cmdbuf.write(uniform.m_type);
cmdbuf.write(uniform.m_num);
- uint8_t len = (uint8_t)bx::strnlen(_name)+1;
+ uint8_t len = (uint8_t)bx::strLen(_name)+1;
cmdbuf.write(len);
cmdbuf.write(_name, len);
}
@@ -3547,14 +4114,14 @@ namespace bgfx
uniform.m_type = _type;
uniform.m_num = _num;
- bool ok = m_uniformHashMap.insert(bx::hashMurmur2A(_name), handle.idx);
+ bool ok = m_uniformHashMap.insert(bx::hash<bx::HashMurmur2A>(_name), handle.idx);
BX_CHECK(ok, "Uniform already exists (name: %s)!", _name); BX_UNUSED(ok);
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateUniform);
cmdbuf.write(handle);
cmdbuf.write(_type);
cmdbuf.write(_num);
- uint8_t len = (uint8_t)bx::strnlen(_name)+1;
+ uint8_t len = (uint8_t)bx::strLen(_name)+1;
cmdbuf.write(len);
cmdbuf.write(_name, len);
}
@@ -3568,16 +4135,20 @@ namespace bgfx
BGFX_API_FUNC(void getUniformInfo(UniformHandle _handle, UniformInfo& _info) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("getUniformInfo", m_uniformHandle, _handle);
UniformRef& uniform = m_uniformRef[_handle.idx];
- bx::strlcpy(_info.name, uniform.m_name.getPtr(), sizeof(_info.name) );
+ bx::strCopy(_info.name, sizeof(_info.name), uniform.m_name.getPtr() );
_info.type = uniform.m_type;
_info.num = uniform.m_num;
}
BGFX_API_FUNC(void destroyUniform(UniformHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyUniform", m_uniformHandle, _handle);
UniformRef& uniform = m_uniformRef[_handle.idx];
@@ -3599,6 +4170,8 @@ namespace bgfx
BGFX_API_FUNC(OcclusionQueryHandle createOcclusionQuery() )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
OcclusionQueryHandle handle = { m_occlusionQueryHandle.alloc() };
if (isValid(handle) )
{
@@ -3613,6 +4186,8 @@ namespace bgfx
BGFX_API_FUNC(OcclusionQueryResult::Enum getResult(OcclusionQueryHandle _handle, int32_t* _result) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("getResult", m_occlusionQueryHandle, _handle);
switch (m_submit->m_occlusion[_handle.idx])
@@ -3632,6 +4207,8 @@ namespace bgfx
BGFX_API_FUNC(void destroyOcclusionQuery(OcclusionQueryHandle _handle) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE("destroyOcclusionQuery", m_occlusionQueryHandle, _handle);
m_freeOcclusionQueryHandle[m_numFreeOcclusionQueryHandles++] = _handle;
@@ -3639,6 +4216,8 @@ namespace bgfx
BGFX_API_FUNC(void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BGFX_CHECK_HANDLE_INVALID_OK("requestScreenShot", m_frameBufferHandle, _handle);
if (isValid(_handle) )
@@ -3652,7 +4231,7 @@ namespace bgfx
}
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::RequestScreenShot);
- uint16_t len = (uint16_t)bx::strnlen(_filePath)+1;
+ uint16_t len = (uint16_t)bx::strLen(_filePath)+1;
cmdbuf.write(_handle);
cmdbuf.write(len);
cmdbuf.write(_filePath, len);
@@ -3660,6 +4239,8 @@ namespace bgfx
BGFX_API_FUNC(void setPaletteColor(uint8_t _index, const float _rgba[4]) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
BX_CHECK(_index < BGFX_CONFIG_MAX_COLOR_PALETTE, "Color palette index out of bounds %d (max: %d)."
, _index
, BGFX_CONFIG_MAX_COLOR_PALETTE
@@ -3668,404 +4249,104 @@ namespace bgfx
m_colorPaletteDirty = 2;
}
- BGFX_API_FUNC(void setViewName(uint8_t _id, const char* _name) )
+ BGFX_API_FUNC(void setViewName(ViewId _id, const char* _name) )
{
+ BGFX_MUTEX_SCOPE(m_resourceApiLock);
+
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::UpdateViewName);
cmdbuf.write(_id);
- uint16_t len = (uint16_t)bx::strnlen(_name)+1;
+ uint16_t len = (uint16_t)bx::strLen(_name)+1;
cmdbuf.write(len);
cmdbuf.write(_name, len);
}
- BGFX_API_FUNC(void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) )
+ BGFX_API_FUNC(void setViewRect(ViewId _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) )
{
- Rect& rect = m_rect[_id];
- rect.m_x = (uint16_t)bx::uint32_imax(int16_t(_x), 0);
- rect.m_y = (uint16_t)bx::uint32_imax(int16_t(_y), 0);
- rect.m_width = bx::uint16_max(_width, 1);
- rect.m_height = bx::uint16_max(_height, 1);
+ m_view[_id].setRect(_x, _y, _width, _height);
}
- BGFX_API_FUNC(void setViewScissor(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) )
+ BGFX_API_FUNC(void setViewScissor(ViewId _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) )
{
- Rect& scissor = m_scissor[_id];
- scissor.m_x = _x;
- scissor.m_y = _y;
- scissor.m_width = _width;
- scissor.m_height = _height;
+ m_view[_id].setScissor(_x, _y, _width, _height);
}
- BGFX_API_FUNC(void setViewClear(uint8_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil) )
+ BGFX_API_FUNC(void setViewClear(ViewId _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil) )
{
BX_CHECK(bx::fequal(_depth, bx::fclamp(_depth, 0.0f, 1.0f), 0.0001f)
, "Clear depth value must be between 0.0 and 1.0 (_depth %f)."
, _depth
);
- Clear& clear = m_clear[_id];
- clear.m_flags = _flags;
- clear.m_index[0] = uint8_t(_rgba>>24);
- clear.m_index[1] = uint8_t(_rgba>>16);
- clear.m_index[2] = uint8_t(_rgba>> 8);
- clear.m_index[3] = uint8_t(_rgba>> 0);
- clear.m_depth = _depth;
- clear.m_stencil = _stencil;
+ m_view[_id].setClear(_flags, _rgba, _depth, _stencil);
}
- BGFX_API_FUNC(void setViewClear(uint8_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7) )
+ BGFX_API_FUNC(void setViewClear(ViewId _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7) )
{
BX_CHECK(bx::fequal(_depth, bx::fclamp(_depth, 0.0f, 1.0f), 0.0001f)
, "Clear depth value must be between 0.0 and 1.0 (_depth %f)."
, _depth
);
- Clear& clear = m_clear[_id];
- clear.m_flags = (_flags & ~BGFX_CLEAR_COLOR)
- | (0xff != (_0&_1&_2&_3&_4&_5&_6&_7) ? BGFX_CLEAR_COLOR|BGFX_CLEAR_COLOR_USE_PALETTE : 0)
- ;
- clear.m_index[0] = _0;
- clear.m_index[1] = _1;
- clear.m_index[2] = _2;
- clear.m_index[3] = _3;
- clear.m_index[4] = _4;
- clear.m_index[5] = _5;
- clear.m_index[6] = _6;
- clear.m_index[7] = _7;
- clear.m_depth = _depth;
- clear.m_stencil = _stencil;
+ m_view[_id].setClear(_flags, _depth, _stencil, _0, _1, _2, _3, _4, _5, _6, _7);
}
- BGFX_API_FUNC(void setViewSeq(uint8_t _id, bool _enabled) )
+ BGFX_API_FUNC(void setViewMode(ViewId _id, ViewMode::Enum _mode) )
{
- m_seqMask[_id] = _enabled ? 0xffff : 0x0;
+ m_view[_id].setMode(_mode);
}
- BGFX_API_FUNC(void setViewFrameBuffer(uint8_t _id, FrameBufferHandle _handle) )
+ BGFX_API_FUNC(void setViewFrameBuffer(ViewId _id, FrameBufferHandle _handle) )
{
BGFX_CHECK_HANDLE_INVALID_OK("setViewFrameBuffer", m_frameBufferHandle, _handle);
- m_fb[_id] = _handle;
+ m_view[_id].setFrameBuffer(_handle);
}
- BGFX_API_FUNC(void setViewTransform(uint8_t _id, const void* _view, const void* _proj, uint8_t _flags, const void* _proj1) )
+ BGFX_API_FUNC(void setViewTransform(ViewId _id, const void* _view, const void* _proj, uint8_t _flags, const void* _proj1) )
{
- m_viewFlags[_id] = _flags;
-
- if (NULL != _view)
- {
- bx::memCopy(m_view[_id].un.val, _view, sizeof(Matrix4) );
- }
- else
- {
- m_view[_id].setIdentity();
- }
-
- if (NULL != _proj)
- {
- bx::memCopy(m_proj[0][_id].un.val, _proj, sizeof(Matrix4) );
- }
- else
- {
- m_proj[0][_id].setIdentity();
- }
-
- if (NULL != _proj1)
- {
- bx::memCopy(m_proj[1][_id].un.val, _proj1, sizeof(Matrix4) );
- }
- else
- {
- bx::memCopy(m_proj[1][_id].un.val, m_proj[0][_id].un.val, sizeof(Matrix4) );
- }
+ m_view[_id].setTransform(_view, _proj, _flags, _proj1);
}
- BGFX_API_FUNC(void resetView(uint8_t _id) )
+ BGFX_API_FUNC(void resetView(ViewId _id) )
{
- setViewRect(_id, 0, 0, 1, 1);
- setViewScissor(_id, 0, 0, 0, 0);
- setViewClear(_id, BGFX_CLEAR_NONE, 0, 0.0f, 0);
- setViewSeq(_id, false);
- FrameBufferHandle invalid = BGFX_INVALID_HANDLE;
- setViewFrameBuffer(_id, invalid);
- setViewTransform(_id, NULL, NULL, BGFX_VIEW_NONE, NULL);
+ m_view[_id].reset();
}
- BGFX_API_FUNC(void setViewOrder(uint8_t _id, uint8_t _num, const void* _order) )
+ BGFX_API_FUNC(void setViewOrder(ViewId _id, uint16_t _num, const ViewId* _order) )
{
const uint32_t num = bx::uint32_min(_id + _num, BGFX_CONFIG_MAX_VIEWS) - _id;
if (NULL == _order)
{
for (uint32_t ii = 0; ii < num; ++ii)
{
- uint8_t id = uint8_t(ii+_id);
+ ViewId id = ViewId(ii+_id);
m_viewRemap[id] = id;
}
}
else
{
- bx::memCopy(&m_viewRemap[_id], _order, num);
- }
- }
-
- BGFX_API_FUNC(void setMarker(const char* _marker) )
- {
- m_submit->setMarker(_marker);
- }
-
- BGFX_API_FUNC(void setState(uint64_t _state, uint32_t _rgba) )
- {
- m_submit->setState(_state, _rgba);
- }
-
- BGFX_API_FUNC(void setCondition(OcclusionQueryHandle _handle, bool _visible) )
- {
- m_submit->setCondition(_handle, _visible);
- }
-
- BGFX_API_FUNC(void setStencil(uint32_t _fstencil, uint32_t _bstencil) )
- {
- m_submit->setStencil(_fstencil, _bstencil);
- }
-
- BGFX_API_FUNC(uint16_t setScissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) )
- {
- return m_submit->setScissor(_x, _y, _width, _height);
- }
-
- BGFX_API_FUNC(void setScissor(uint16_t _cache) )
- {
- m_submit->setScissor(_cache);
- }
-
- BGFX_API_FUNC(uint32_t setTransform(const void* _mtx, uint16_t _num) )
- {
- return m_submit->setTransform(_mtx, _num);
- }
-
- BGFX_API_FUNC(uint32_t allocTransform(Transform* _transform, uint16_t _num) )
- {
- return m_submit->allocTransform(_transform, _num);
- }
-
- BGFX_API_FUNC(void setTransform(uint32_t _cache, uint16_t _num) )
- {
- m_submit->setTransform(_cache, _num);
- }
-
- BGFX_API_FUNC(void setUniform(UniformHandle _handle, const void* _value, uint16_t _num) )
- {
- BGFX_CHECK_HANDLE("setUniform", m_uniformHandle, _handle);
- UniformRef& uniform = m_uniformRef[_handle.idx];
- BX_CHECK(isValid(_handle) && 0 < uniform.m_refCount, "Setting invalid uniform (handle %3d)!", _handle.idx);
- BX_CHECK(_num == UINT16_MAX || uniform.m_num >= _num, "Truncated uniform update. %d (max: %d)", _num, uniform.m_num);
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
- {
- BX_CHECK(m_uniformSet.end() == m_uniformSet.find(_handle.idx)
- , "Uniform %d (%s) was already set for this draw call."
- , _handle.idx
- , getName(_handle)
- );
- m_uniformSet.insert(_handle.idx);
+ bx::memCopy(&m_viewRemap[_id], _order, num*sizeof(ViewId) );
}
- m_submit->writeUniform(uniform.m_type, _handle, _value, bx::uint16_min(uniform.m_num, _num) );
}
- BGFX_API_FUNC(void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices) )
- {
- BGFX_CHECK_HANDLE("setIndexBuffer", m_indexBufferHandle, _handle);
- m_submit->setIndexBuffer(_handle, _firstIndex, _numIndices);
- }
+ BGFX_API_FUNC(Encoder* begin() );
- BGFX_API_FUNC(void setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices) )
- {
- BGFX_CHECK_HANDLE("setIndexBuffer", m_dynamicIndexBufferHandle, _handle);
- m_submit->setIndexBuffer(m_dynamicIndexBuffers[_handle.idx], _firstIndex, _numIndices);
- }
-
- BGFX_API_FUNC(void setIndexBuffer(const TransientIndexBuffer* _tib, uint32_t _firstIndex, uint32_t _numIndices) )
- {
- BGFX_CHECK_HANDLE("setIndexBuffer", m_indexBufferHandle, _tib->handle);
- m_submit->setIndexBuffer(_tib, _firstIndex, _numIndices);
- }
-
- BGFX_API_FUNC(void setVertexBuffer(uint8_t _stream, VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices) )
- {
- BGFX_CHECK_HANDLE("setVertexBuffer", m_vertexBufferHandle, _handle);
- BX_CHECK(_stream < BGFX_CONFIG_MAX_VERTEX_STREAMS, "Invalid stream %d (max %d).", _stream, BGFX_CONFIG_MAX_VERTEX_STREAMS);
- m_submit->setVertexBuffer(_stream, _handle, _startVertex, _numVertices);
- }
-
- BGFX_API_FUNC(void setVertexBuffer(uint8_t _stream, DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices) )
- {
- BGFX_CHECK_HANDLE("setVertexBuffer", m_dynamicVertexBufferHandle, _handle);
- BX_CHECK(_stream < BGFX_CONFIG_MAX_VERTEX_STREAMS, "Invalid stream %d (max %d).", _stream, BGFX_CONFIG_MAX_VERTEX_STREAMS);
- m_submit->setVertexBuffer(_stream, m_dynamicVertexBuffers[_handle.idx], _startVertex, _numVertices);
- }
+ BGFX_API_FUNC(void end(Encoder* _encoder) );
- BGFX_API_FUNC(void setVertexBuffer(uint8_t _stream, const TransientVertexBuffer* _tvb, uint32_t _startVertex, uint32_t _numVertices) )
- {
- BGFX_CHECK_HANDLE("setVertexBuffer", m_vertexBufferHandle, _tvb->handle);
- BX_CHECK(_stream < BGFX_CONFIG_MAX_VERTEX_STREAMS, "Invalid stream %d (max %d).", _stream, BGFX_CONFIG_MAX_VERTEX_STREAMS);
- m_submit->setVertexBuffer(_stream, _tvb, _startVertex, _numVertices);
- }
-
- BGFX_API_FUNC(void setInstanceDataBuffer(const InstanceDataBuffer* _idb, uint32_t _num) )
- {
- --m_instBufferCount;
-
- m_submit->setInstanceDataBuffer(_idb, _num);
- }
-
- BGFX_API_FUNC(void setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num) )
- {
- BGFX_CHECK_HANDLE("setInstanceDataBuffer", m_vertexBufferHandle, _handle);
- const VertexBuffer& vb = m_vertexBuffers[_handle.idx];
- m_submit->setInstanceDataBuffer(_handle, _startVertex, _num, vb.m_stride);
- }
-
- BGFX_API_FUNC(void setInstanceDataBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num) )
- {
- BGFX_CHECK_HANDLE("setInstanceDataBuffer", m_dynamicVertexBufferHandle, _handle);
- const DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[_handle.idx];
- m_submit->setInstanceDataBuffer(dvb.m_handle
- , dvb.m_startVertex + _startVertex
- , _num
- , dvb.m_stride
- );
- }
-
- BGFX_API_FUNC(void setTexture(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint32_t _flags) )
- {
- BGFX_CHECK_HANDLE_INVALID_OK("setTexture/TextureHandle", m_textureHandle, _handle);
- m_submit->setTexture(_stage, _sampler, _handle, _flags);
- }
-
- BGFX_API_FUNC(uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState) )
- {
- BGFX_CHECK_HANDLE_INVALID_OK("submit", m_programHandle, _program);
- BGFX_CHECK_HANDLE_INVALID_OK("submit", m_occlusionQueryHandle, _occlusionQuery);
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM)
- && !_preserveState)
- {
- m_uniformSet.clear();
- }
-
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_OCCLUSION)
- && isValid(_occlusionQuery) )
- {
- BX_CHECK(m_occlusionQuerySet.end() == m_occlusionQuerySet.find(_occlusionQuery.idx)
- , "OcclusionQuery %d was already used for this frame."
- , _occlusionQuery.idx
- );
- m_occlusionQuerySet.insert(_occlusionQuery.idx);
- }
-
- return m_submit->submit(_id, _program, _occlusionQuery, _depth, _preserveState);
- }
-
- BGFX_API_FUNC(uint32_t submit(uint8_t _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState) )
- {
- BGFX_CHECK_HANDLE_INVALID_OK("submit", m_programHandle, _handle);
- BGFX_CHECK_HANDLE("submit", m_vertexBufferHandle, _indirectHandle);
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM)
- && !_preserveState)
- {
- m_uniformSet.clear();
- }
- return m_submit->submit(_id, _handle, _indirectHandle, _start, _num, _depth, _preserveState);
- }
-
- BGFX_API_FUNC(void setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access) )
- {
- BGFX_CHECK_HANDLE("setBuffer", m_indexBufferHandle, _handle);
- m_submit->setBuffer(_stage, _handle, _access);
- }
-
- BGFX_API_FUNC(void setBuffer(uint8_t _stage, VertexBufferHandle _handle, Access::Enum _access) )
- {
- BGFX_CHECK_HANDLE("setBuffer", m_vertexBufferHandle, _handle);
- m_submit->setBuffer(_stage, _handle, _access);
- }
-
- BGFX_API_FUNC(void setBuffer(uint8_t _stage, DynamicIndexBufferHandle _handle, Access::Enum _access) )
- {
- BGFX_CHECK_HANDLE("setBuffer", m_dynamicIndexBufferHandle, _handle);
- const DynamicIndexBuffer& dib = m_dynamicIndexBuffers[_handle.idx];
- m_submit->setBuffer(_stage, dib.m_handle, _access);
- }
-
- BGFX_API_FUNC(void setBuffer(uint8_t _stage, DynamicVertexBufferHandle _handle, Access::Enum _access) )
- {
- BGFX_CHECK_HANDLE("setBuffer", m_dynamicVertexBufferHandle, _handle);
- const DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[_handle.idx];
- m_submit->setBuffer(_stage, dvb.m_handle, _access);
- }
-
- BGFX_API_FUNC(void setBuffer(uint8_t _stage, IndirectBufferHandle _handle, Access::Enum _access) )
- {
- BGFX_CHECK_HANDLE("setBuffer", m_vertexBufferHandle, _handle);
- VertexBufferHandle handle = { _handle.idx };
- m_submit->setBuffer(_stage, handle, _access);
- }
-
- BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format) )
- {
- _format = TextureFormat::Count == _format ? TextureFormat::Enum(m_textureRef[_handle.idx].m_format) : _format;
- BX_CHECK(_format != TextureFormat::BGRA8
- , "Can't use TextureFormat::BGRA8 with compute, use TextureFormat::RGBA8 instead."
- );
- m_submit->setImage(_stage, _sampler, _handle, _mip, _access, _format);
- }
-
- BGFX_API_FUNC(uint32_t dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags) )
- {
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
- {
- m_uniformSet.clear();
- }
- return m_submit->dispatch(_id, _handle, _numX, _numY, _numZ, _flags);
- }
-
- BGFX_API_FUNC(uint32_t dispatch(uint8_t _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, uint8_t _flags) )
- {
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
- {
- m_uniformSet.clear();
- }
- return m_submit->dispatch(_id, _handle, _indirectHandle, _start, _num, _flags);
- }
-
- BGFX_API_FUNC(void discard() )
- {
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
- {
- m_uniformSet.clear();
- }
- m_submit->discard();
- }
+ BGFX_API_FUNC(uint32_t frame(bool _capture = false) );
- BGFX_API_FUNC(void blit(uint8_t _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, TextureHandle _src, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth) )
+ uint32_t getSeqIncr(ViewId _id)
{
- const TextureRef& src = m_textureRef[_src.idx];
- const TextureRef& dst = m_textureRef[_dst.idx];
- BX_CHECK(src.m_format == dst.m_format
- , "Texture format must match (src %s, dst %s)."
- , bgfx::getName(TextureFormat::Enum(src.m_format) )
- , bgfx::getName(TextureFormat::Enum(dst.m_format) )
- );
- BX_UNUSED(src, dst);
- m_submit->blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth);
+ return bx::atomicFetchAndAdd<uint32_t>(&m_seq[_id], 1);
}
- BGFX_API_FUNC(uint32_t frame(bool _capture = false) );
-
void dumpViewStats();
void freeDynamicBuffers();
void freeAllHandles(Frame* _frame);
void frameNoRenderWait();
void swap();
- const char* getName(UniformHandle _handle) const;
// render thread
+ void flip();
RenderFrame::Enum renderFrame(int32_t _msecs = -1);
void flushTextureUpdateBatch(CommandBuffer& _cmdbuf);
void rendererExecCommands(CommandBuffer& _cmdbuf);
@@ -4086,7 +4367,7 @@ namespace bgfx
return true;
}
- BGFX_PROFILER_SCOPE(bgfx, main_thread_wait, 0xff2040ff);
+ BGFX_PROFILER_SCOPE("bgfx/API thread wait", 0xff2040ff);
int64_t start = bx::getHPCounter();
bool ok = m_apiSem.wait(_msecs);
if (ok)
@@ -4111,7 +4392,7 @@ namespace bgfx
{
if (!m_singleThreaded)
{
- BGFX_PROFILER_SCOPE(bgfx, render_thread_wait, 0xff2040ff);
+ BGFX_PROFILER_SCOPE("bgfx/Render thread wait", 0xff2040ff);
int64_t start = bx::getHPCounter();
bool ok = m_renderSem.wait();
BX_CHECK(ok, "Semaphore wait failed."); BX_UNUSED(ok);
@@ -4120,9 +4401,35 @@ namespace bgfx
}
}
+ void encoderApiWait()
+ {
+ uint16_t numEncoders = m_encoderHandle.getNumHandles();
+
+ for (uint16_t ii = 1; ii < numEncoders; ++ii)
+ {
+ m_encoderEndSem.wait();
+ }
+
+ for (uint16_t ii = 0; ii < numEncoders; ++ii)
+ {
+ uint16_t idx = m_encoderHandle.getHandleAt(ii);
+ m_encoderStats[ii].cpuTimeBegin = m_encoder[idx].m_cpuTimeBegin;
+ m_encoderStats[ii].cpuTimeEnd = m_encoder[idx].m_cpuTimeEnd;
+ }
+
+ m_submit->m_perfStats.numEncoders = uint8_t(numEncoders);
+
+ m_encoderHandle.reset();
+ uint16_t idx = m_encoderHandle.alloc();
+ BX_CHECK(0 == idx, "Internal encoder handle is not 0 (idx %d).", idx); BX_UNUSED(idx);
+ }
+
bx::Semaphore m_renderSem;
bx::Semaphore m_apiSem;
- bx::Thread m_thread;
+ bx::Semaphore m_encoderEndSem;
+ bx::Mutex m_encoderApiLock;
+ bx::Mutex m_resourceApiLock;
+ bx::Thread m_thread;
#else
void apiSemPost()
{
@@ -4141,9 +4448,22 @@ namespace bgfx
void renderSemWait()
{
}
+
+ void encoderApiWait()
+ {
+ m_encoderStats[0].cpuTimeBegin = m_encoder[0].m_cpuTimeBegin;
+ m_encoderStats[0].cpuTimeEnd = m_encoder[0].m_cpuTimeEnd;
+ m_submit->m_perfStats.numEncoders = 1;
+ }
#endif // BGFX_CONFIG_MULTITHREADED
- Frame m_frame[1+(BGFX_CONFIG_MULTITHREADED ? 1 : 0)];
+ EncoderStats m_encoderStats[BGFX_CONFIG_MAX_ENCODERS];
+ Encoder* m_encoder0;
+ EncoderImpl m_encoder[BGFX_CONFIG_MAX_ENCODERS];
+ uint32_t m_numEncoders;
+ bx::HandleAllocT<BGFX_CONFIG_MAX_ENCODERS> m_encoderHandle;
+
+ Frame m_frame[1+(BGFX_CONFIG_MULTITHREADED ? 1 : 0)];
Frame* m_render;
Frame* m_submit;
@@ -4181,10 +4501,10 @@ namespace bgfx
struct ShaderRef
{
UniformHandle* m_uniforms;
+ String m_name;
uint32_t m_hash;
int16_t m_refCount;
uint16_t m_num;
- bool m_owned;
};
struct ProgramRef
@@ -4204,6 +4524,7 @@ namespace bgfx
struct TextureRef
{
+ String m_name;
int16_t m_refCount;
uint8_t m_bbRatio;
uint8_t m_format;
@@ -4221,14 +4542,12 @@ namespace bgfx
bool m_window;
};
- typedef stl::unordered_set<uint16_t> HandleSet;
- HandleSet m_uniformSet;
- HandleSet m_occlusionQuerySet;
-
typedef bx::HandleHashMapT<BGFX_CONFIG_MAX_UNIFORMS*2> UniformHashMap;
UniformHashMap m_uniformHashMap;
UniformRef m_uniformRef[BGFX_CONFIG_MAX_UNIFORMS];
+ typedef bx::HandleHashMapT<BGFX_CONFIG_MAX_SHADERS*2> ShaderHashMap;
+ ShaderHashMap m_shaderHashMap;
ShaderRef m_shaderRef[BGFX_CONFIG_MAX_SHADERS];
typedef bx::HandleHashMapT<BGFX_CONFIG_MAX_PROGRAMS*2> ProgramHashMap;
@@ -4239,23 +4558,16 @@ namespace bgfx
FrameBufferRef m_frameBufferRef[BGFX_CONFIG_MAX_FRAME_BUFFERS];
VertexDeclRef m_declRef;
- uint8_t m_viewRemap[BGFX_CONFIG_MAX_VIEWS];
- FrameBufferHandle m_fb[BGFX_CONFIG_MAX_VIEWS];
- Clear m_clear[BGFX_CONFIG_MAX_VIEWS];
+ ViewId m_viewRemap[BGFX_CONFIG_MAX_VIEWS];
+ uint32_t m_seq[BGFX_CONFIG_MAX_VIEWS];
+ View m_view[BGFX_CONFIG_MAX_VIEWS];
float m_clearColor[BGFX_CONFIG_MAX_COLOR_PALETTE][4];
- Rect m_rect[BGFX_CONFIG_MAX_VIEWS];
- Rect m_scissor[BGFX_CONFIG_MAX_VIEWS];
- Matrix4 m_view[BGFX_CONFIG_MAX_VIEWS];
- Matrix4 m_proj[2][BGFX_CONFIG_MAX_VIEWS];
- uint8_t m_viewFlags[BGFX_CONFIG_MAX_VIEWS];
- uint16_t m_seq[BGFX_CONFIG_MAX_VIEWS];
- uint16_t m_seqMask[BGFX_CONFIG_MAX_VIEWS];
uint8_t m_colorPaletteDirty;
Resolution m_resolution;
- int32_t m_instBufferCount;
+ int64_t m_frameTimeLast;
uint32_t m_frames;
uint32_t m_debug;
@@ -4263,6 +4575,8 @@ namespace bgfx
ClearQuad m_clearQuad;
RendererContextI* m_renderCtx;
+ RendererContextI* m_renderMain;
+ RendererContextI* m_renderNoop;
bool m_rendererInitialized;
bool m_exit;
diff --git a/3rdparty/bgfx/src/bgfx_shader.sh b/3rdparty/bgfx/src/bgfx_shader.sh
index 3ee69e85e35..b8155c1d650 100644
--- a/3rdparty/bgfx/src/bgfx_shader.sh
+++ b/3rdparty/bgfx/src/bgfx_shader.sh
@@ -28,6 +28,14 @@
# define EARLY_DEPTH_STENCIL
#endif // BGFX_SHADER_LANGUAGE_HLSL > 3 && BGFX_SHADER_TYPE_FRAGMENT
+#if BGFX_SHADER_LANGUAGE_GLSL
+# define ARRAY_BEGIN(_type, _name, _count) _type _name[_count] = _type[](
+# define ARRAY_END() )
+#else
+# define ARRAY_BEGIN(_type, _name, _count) _type _name[_count] = {
+# define ARRAY_END() }
+#endif // BGFX_SHADER_LANGUAGE_GLSL
+
#if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_SPIRV
# define CONST(_x) static const _x
# define dFdx(_x) ddx(_x)
@@ -83,12 +91,12 @@ uint4 bitfieldReverse(uint4 _x) { return reversebits(_x); }
# if !BGFX_SHADER_LANGUAGE_SPIRV
uint packHalf2x16(vec2 _x)
{
- return (f32tof16(_x.x)<<16) | f32tof16(_x.y);
+ return (f32tof16(_x.y)<<16) | f32tof16(_x.x);
}
vec2 unpackHalf2x16(uint _x)
{
- return vec2(f16tof32(_x >> 16), f16tof32(_x) );
+ return vec2(f16tof32(_x & 0xffff), f16tof32(_x >> 16) );
}
# endif // !BGFX_SHADER_LANGUAGE_SPIRV
@@ -354,6 +362,10 @@ float bgfxShadow2DProj(sampler2DShadow _sampler, vec4 _coord)
# define texture2D(_sampler, _coord) tex2D(_sampler, _coord)
# define texture2DProj(_sampler, _coord) bgfxTexture2DProj(_sampler, _coord)
+# define SAMPLER2DARRAY(_name, _reg) SAMPLER2D(_name, _reg)
+# define texture2DArray(_sampler, _coord) texture2D(_sampler, (_coord).xy)
+# define texture2DArrayLod(_sampler, _coord, _lod) texture2DLod(_sampler, _coord, _lod)
+
# define SAMPLER2DSHADOW(_name, _reg) uniform sampler2DShadow _name : REGISTER(s, _reg)
# define shadow2D(_sampler, _coord) bgfxShadow2D(_sampler, _coord)
# define shadow2DProj(_sampler, _coord) bgfxShadow2DProj(_sampler, _coord)
diff --git a/3rdparty/bgfx/src/config.h b/3rdparty/bgfx/src/config.h
index 6ee68224337..7c038715845 100644
--- a/3rdparty/bgfx/src/config.h
+++ b/3rdparty/bgfx/src/config.h
@@ -19,13 +19,11 @@
&& !defined(BGFX_CONFIG_RENDERER_OPENGL) \
&& !defined(BGFX_CONFIG_RENDERER_OPENGLES) \
&& !defined(BGFX_CONFIG_RENDERER_VULKAN) \
- && !defined(BGFX_CONFIG_RENDERER_GNM) \
- && !defined(BGFX_CONFIG_RENDERER_NOOP)
+ && !defined(BGFX_CONFIG_RENDERER_GNM)
# ifndef BGFX_CONFIG_RENDERER_DIRECT3D9
# define BGFX_CONFIG_RENDERER_DIRECT3D9 (0 \
|| BX_PLATFORM_WINDOWS \
- || BX_PLATFORM_XBOX360 \
? 1 : 0)
# endif // BGFX_CONFIG_RENDERER_DIRECT3D9
@@ -65,10 +63,10 @@
|| BX_PLATFORM_ANDROID \
|| BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_IOS \
- || BX_PLATFORM_NACL \
|| BX_PLATFORM_QNX \
|| BX_PLATFORM_RPI \
|| BX_PLATFORM_STEAMLINK \
+ || BX_PLATFORM_NX \
? 1 : 0)
# endif // BGFX_CONFIG_RENDERER_OPENGLES
@@ -77,6 +75,7 @@
|| BX_PLATFORM_ANDROID \
|| BX_PLATFORM_LINUX \
|| BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_NX \
? 1 : 0)
# endif // BGFX_CONFIG_RENDERER_VULKAN
@@ -86,18 +85,6 @@
? 1 : 0)
# endif // BGFX_CONFIG_RENDERER_GNM
-# ifndef BGFX_CONFIG_RENDERER_NOOP
-# define BGFX_CONFIG_RENDERER_NOOP (!(0 \
- || BGFX_CONFIG_RENDERER_DIRECT3D9 \
- || BGFX_CONFIG_RENDERER_DIRECT3D11 \
- || BGFX_CONFIG_RENDERER_DIRECT3D12 \
- || BGFX_CONFIG_RENDERER_METAL \
- || BGFX_CONFIG_RENDERER_OPENGL \
- || BGFX_CONFIG_RENDERER_OPENGLES \
- || BGFX_CONFIG_RENDERER_VULKAN \
- || BGFX_CONFIG_RENDERER_GNM \
- ? 1 : 0) )
-# endif // BGFX_CONFIG_RENDERER_NOOP
#else
# ifndef BGFX_CONFIG_RENDERER_DIRECT3D9
# define BGFX_CONFIG_RENDERER_DIRECT3D9 0
@@ -130,10 +117,6 @@
# ifndef BGFX_CONFIG_RENDERER_GNM
# define BGFX_CONFIG_RENDERER_GNM 0
# endif // BGFX_CONFIG_RENDERER_GNM
-
-# ifndef BGFX_CONFIG_RENDERER_NOOP
-# define BGFX_CONFIG_RENDERER_NOOP 0
-# endif // BGFX_CONFIG_RENDERER_NOOP
#endif // !defined...
#if BGFX_CONFIG_RENDERER_OPENGL && BGFX_CONFIG_RENDERER_OPENGL < 21
@@ -220,7 +203,7 @@
#endif // BGFX_CONFIG_SORT_KEY_NUM_BITS_DEPTH
#ifndef BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ
-# define BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ 11
+# define BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ 20
#endif // BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ
#ifndef BGFX_CONFIG_SORT_KEY_NUM_BITS_PROGRAM
@@ -254,7 +237,7 @@
#endif // BGFX_CONFIG_MAX_VERTEX_BUFFERS
#ifndef BGFX_CONFIG_MAX_VERTEX_STREAMS
-# define BGFX_CONFIG_MAX_VERTEX_STREAMS 1
+# define BGFX_CONFIG_MAX_VERTEX_STREAMS 4
#endif // BGFX_CONFIG_MAX_VERTEX_STREAMS
#ifndef BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS
@@ -323,17 +306,9 @@
#define BGFX_CONFIG_DRAW_INDIRECT_STRIDE 32
-#ifndef BGFX_CONFIG_PROFILER_MICROPROFILE
-# define BGFX_CONFIG_PROFILER_MICROPROFILE 0
-#endif // BGFX_CONFIG_PROFILER_MICROPROFILE
-
-#ifndef BGFX_CONFIG_PROFILER_REMOTERY
-# define BGFX_CONFIG_PROFILER_REMOTERY 0
-#endif // BGFX_CONFIG_PROFILER_REMOTERY
-
-#ifndef BGFX_CONFIG_PROFILER_REMOTERY_BUILD_LIB
-# define BGFX_CONFIG_PROFILER_REMOTERY_BUILD_LIB BGFX_CONFIG_PROFILER_REMOTERY
-#endif // BGFX_CONFIG_PROFILER_REMOTERY_BUILD_LIB
+#ifndef BGFX_CONFIG_PROFILER
+# define BGFX_CONFIG_PROFILER 0
+#endif // BGFX_CONFIG_PROFILER
#ifndef BGFX_CONFIG_RENDERDOC_LOG_FILEPATH
# define BGFX_CONFIG_RENDERDOC_LOG_FILEPATH "temp/bgfx"
@@ -344,7 +319,15 @@
#endif // BGFX_CONFIG_RENDERDOC_CAPTURE_KEYS
#ifndef BGFX_CONFIG_API_SEMAPHORE_TIMEOUT
-# define BGFX_CONFIG_API_SEMAPHORE_TIMEOUT (-1)
+# define BGFX_CONFIG_API_SEMAPHORE_TIMEOUT (5000)
#endif // BGFX_CONFIG_API_SEMAPHORE_TIMEOUT
+#ifndef BGFX_CONFIG_MIP_LOD_BIAS
+# define BGFX_CONFIG_MIP_LOD_BIAS 0
+#endif // BGFX_CONFIG_MIP_LOD_BIAS
+
+#ifndef BGFX_CONFIG_MAX_ENCODERS
+# define BGFX_CONFIG_MAX_ENCODERS ( (0 != BGFX_CONFIG_MULTITHREADED) ? 8 : 1)
+#endif // BGFX_CONFIG_MAX_ENCODERS
+
#endif // BGFX_CONFIG_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/src/debug_renderdoc.cpp b/3rdparty/bgfx/src/debug_renderdoc.cpp
index a51206b8122..938af6ead14 100644
--- a/3rdparty/bgfx/src/debug_renderdoc.cpp
+++ b/3rdparty/bgfx/src/debug_renderdoc.cpp
@@ -43,7 +43,7 @@ namespace bgfx
, BX_COUNTOF(moduleName)
);
if (0 != result
- && 0 == bx::strincmp(_name, moduleName) )
+ && 0 == bx::strCmpI(_name, moduleName) )
{
return true;
}
@@ -56,21 +56,27 @@ namespace bgfx
}
pRENDERDOC_GetAPI RENDERDOC_GetAPI;
- static RENDERDOC_API_1_1_0* s_renderDoc;
+ static RENDERDOC_API_1_1_0* s_renderDoc = NULL;
+ static void* s_renderDocDll = NULL;
void* loadRenderDoc()
{
+ if (NULL != s_renderDoc)
+ {
+ return s_renderDocDll;
+ }
+
// Skip loading RenderDoc when IntelGPA is present to avoid RenderDoc crash.
if (findModule(BX_ARCH_32BIT ? "shimloader32.dll" : "shimloader64.dll") )
{
return NULL;
}
- void* renderdocdll = bx::dlopen("renderdoc.dll");
+ void* renderDocDll = bx::dlopen("renderdoc.dll");
- if (NULL != renderdocdll)
+ if (NULL != renderDocDll)
{
- RENDERDOC_GetAPI = (pRENDERDOC_GetAPI)bx::dlsym(renderdocdll, "RENDERDOC_GetAPI");
+ RENDERDOC_GetAPI = (pRENDERDOC_GetAPI)bx::dlsym(renderDocDll, "RENDERDOC_GetAPI");
if (NULL != RENDERDOC_GetAPI
&& 1 == RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_1_0, (void**)&s_renderDoc) )
{
@@ -85,23 +91,29 @@ namespace bgfx
s_renderDoc->SetCaptureOptionU32(eRENDERDOC_Option_SaveAllInitials, 1);
s_renderDoc->MaskOverlayBits(eRENDERDOC_Overlay_None, eRENDERDOC_Overlay_None);
+
+ s_renderDocDll = renderDocDll;
}
else
{
- bx::dlclose(renderdocdll);
- renderdocdll = NULL;
+ bx::dlclose(renderDocDll);
+ renderDocDll = NULL;
}
}
- return renderdocdll;
+ return renderDocDll;
}
void unloadRenderDoc(void* _renderdocdll)
{
if (NULL != _renderdocdll)
{
- s_renderDoc->Shutdown();
- bx::dlclose(_renderdocdll);
+ // BK - Once RenderDoc is loaded there shouldn't be calls
+ // to Shutdown or unload RenderDoc DLL.
+ // https://github.com/bkaradzic/bgfx/issues/1192
+ //
+ // s_renderDoc->Shutdown();
+ // bx::dlclose(_renderdocdll);
}
}
diff --git a/3rdparty/bgfx/src/fs_clear0.bin.h b/3rdparty/bgfx/src/fs_clear0.bin.h
index e9e8cc6f6c1..f4a98048d35 100644
--- a/3rdparty/bgfx/src/fs_clear0.bin.h
+++ b/3rdparty/bgfx/src/fs_clear0.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_clear0_glsl[128] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
0x00, 0x5a, 0x00, 0x00, 0x00, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, // .Z...uniform vec
0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // 4 bgfx_clear_col
@@ -9,76 +9,216 @@ static const uint8_t fs_clear0_glsl[128] =
0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, // olor = bgfx_clea
0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r_color[0];.}...
};
-static const uint8_t fs_clear0_dx9[208] =
+static const uint8_t fs_clear0_spv[2158] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x01, 0x00, 0x00, 0x01, // clear_color.....
+ 0x00, 0x48, 0x08, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, // .H.....#........
+ 0x00, 0x2e, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, // ..a.............
+ 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, // .........GLSL.st
+ 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // d.450...........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, // .main...........
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, // n........5...vec
+ 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, // 4_splat(f1;.....
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x4d, 0x0f, 0x00, // ....._x......M..
+ 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, // .@main(vf4;.....
+ 0x00, 0x2c, 0x41, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .,A..gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // _0_..........bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0x9d, 0x5e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..^..param......
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....$Global....
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, // .........u_viewR
+ 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, // ect.............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, // .u_viewTexel....
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, // .........u_view.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .............u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // nvView..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_proj.....
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, // .........u_invPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, // oj..............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, // .u_viewProj.....
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .........u_invVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // ewProj..........
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....u_model....
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .........u_model
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, // View............
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // .u_modelViewProj
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, // .............u_a
+ 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0xd2, 0x01, 0x00, // lphaRef4........
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // .....bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // color........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x3d, 0x51, 0x00, 0x00, 0x67, 0x6c, 0x5f, // .........=Q..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, // FragData_0_.....
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, // .....param......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x7d, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, // _0_..G...}......
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // .@...G..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#.......H......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#...`...H......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#.......H......
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#...`...H......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#.......H......
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xd2, 0x01, 0x00, // .#... ...H......
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, // .....#...0...G..
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // .........G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .".......G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, // .!..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..... ... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xf5, 0x00, 0x00, // .........!......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, // .............e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // . .......+......
+ 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x7d, 0x01, 0x00, // .j... .......}..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .e...j...+......
+ 0x00, 0x22, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xb2, 0x04, 0x00, // ."..............
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0xd2, 0x01, 0x00, // ....."..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .........e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x7d, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .}...e...e......
+ 0x00, 0xb2, 0x04, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x4f, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ...O......
+ 0x00, 0xd2, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4f, 0x04, 0x00, 0x00, 0x42, 0x13, 0x00, // .....;...O...B..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....+......./..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, // .....;..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // .....6..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2d, 0x61, 0x00, // .............-a.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, // .;..............
+ 0x00, 0x39, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe7, 0x49, 0x00, 0x00, 0x4d, 0x0f, 0x00, // .9........I..M..
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3d, 0x51, 0x00, // .....=.......=Q.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x3d, 0x51, 0x00, // .....>.......=Q.
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // .....8...6......
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, // .5...........7..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, // ................
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=.......dW.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=........N.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=.......I9.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=........9.....
+ 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, // .P........*..dW.
+ 0x00, 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, // ..N..I9...9.....
+ 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // ..*..8...6......
+ 0x00, 0x4d, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, // .M...........7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2c, 0x41, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x31, 0x27, 0x00, // .....,A......1'.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x9d, 0x5e, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........^.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x5e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>....^......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x9d, 0x5e, 0x00, // .........5....^.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x0a, 0x5a, 0x00, 0x00, 0x42, 0x13, 0x00, // .A........Z..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0x6b, 0x2e, 0x00, 0x00, 0x0a, 0x5a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2c, 0x41, 0x00, // .k....Z..>...,A.
+ 0x00, 0x6b, 0x2e, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .k.......8....
+};
+static const uint8_t fs_clear0_dx9[198] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x01, // clear_color.....
- 0x00, 0xac, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x25, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, // .........%.CTAB.
- 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, // ...[............
- 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, // .......T...0....
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, // .......D.......b
- 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // gfx_clear_color.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x01, // 0.10011.16384...
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ................
+ 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, 0x43, 0x54, 0x41, // ...........".CTA
+ 0x42, 0x1c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, // B....[..........
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .........T...0..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
+ 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, // 0.1.............
+ 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ......
};
-static const uint8_t fs_clear0_dx11[339] =
+static const uint8_t fs_clear0_dx11[341] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x08, // clear_color.....
- 0x00, 0x2c, 0x01, 0x44, 0x58, 0x42, 0x43, 0x01, 0xdc, 0xf8, 0x1e, 0x7d, 0x89, 0xaa, 0x45, 0x4f, // .,.DXBC....}..EO
- 0x0c, 0x79, 0x61, 0x5e, 0xe4, 0x72, 0x8d, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x04, // .ya^.r.....,....
- 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0xf8, // ...0...|........
- 0x00, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0x44, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, // ...Aon9D...D....
- 0x02, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, 0x00, 0x00, // .......0.....$..
- 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .0...0...$...0..
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x01, // ................
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x53, // ...............S
- 0x48, 0x44, 0x52, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x59, // HDR@...@.......Y
- 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, // ...F. .........e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // .... ......6....
- 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F. ......
- 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, // ...>...ISGN,....
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ....... ........
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, // ...............S
- 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x2c, // V_POSITION.OSGN,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // ........... ....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x00, // ...SV_TARGET....
- 0x00, 0x80, 0x00, // ...
+ 0x00, 0x2c, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x01, 0xdc, 0xf8, 0x1e, 0x7d, 0x89, 0xaa, // .,...DXBC....}..
+ 0x45, 0x4f, 0x0c, 0x79, 0x61, 0x5e, 0xe4, 0x72, 0x8d, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, // EO.ya^.r.....,..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, // .....0...|......
+ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0x44, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, // .....Aon9D...D..
+ 0x00, 0x00, 0x02, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, // .........0.....$
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, // ...0...0...$...0
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, // ................
+ 0xff, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, // ................
+ 0x00, 0x53, 0x48, 0x44, 0x52, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .SHDR@...@......
+ 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .Y...F. ........
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .e.... ......6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, // .....>...ISGN,..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
+ 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, // .SV_POSITION.OSG
+ 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // N,........... ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
+ 0xab, 0x00, 0x00, 0x80, 0x00, // .....
};
-static const uint8_t fs_clear0_mtl[426] =
+static const uint8_t fs_clear0_mtl[449] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x01, 0x00, 0x00, 0x75, 0x73, // FSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . float4 gl_Fra
- 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // gColor;.};.struc
- 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, // t xlatMtlShaderU
- 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // niform {. float
- 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // 4 bgfx_clear_col
- 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, // or[8];.};.fragme
- 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // nt xlatMtlShader
- 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, // Output xlatMtlMa
- 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // in (xlatMtlShade
- 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, // rInput _mtl_i [[
- 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, // stage_in]], cons
- 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // tant xlatMtlShad
- 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // erUniform& _mtl_
- 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, // u [[buffer(0)]])
- 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // .{. xlatMtlShad
- 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, // erOutput _mtl_o;
- 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . _mtl_o.gl_Fra
- 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // gColor = _mtl_u.
- 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // bgfx_clear_color
- 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, // [0];. return _m
- 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tl_o;.}...
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
+ 0x00, 0x9b, 0x01, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, // .....using names
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // pace metal;.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // Input {.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, // gl_FragColor;.}
+ 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // ;.struct xlatMtl
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, // ShaderUniform {.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, // float4 bgfx_cl
+ 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, // ear_color[8];.};
+ 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // .fragment xlatMt
+ 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, // lShaderOutput xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, // atMtlMain (xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, // tlShaderInput _m
+ 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, // tl_i [[stage_in]
+ 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // ], constant xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, // MtlShaderUniform
+ 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, // & _mtl_u [[buffe
+ 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, // r(0)]]).{. xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, // MtlShaderOutput
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // _mtl_o;. _mtl_o
+ 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, // .gl_FragColor =
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, // _mtl_u.bgfx_clea
+ 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, // r_color[0];. re
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, // turn _mtl_o;.}..
+ 0x00, // .
};
extern const uint8_t* fs_clear0_pssl;
extern const uint32_t fs_clear0_pssl_size;
diff --git a/3rdparty/bgfx/src/fs_clear1.bin.h b/3rdparty/bgfx/src/fs_clear1.bin.h
index 40bb8481160..1b7159c700b 100644
--- a/3rdparty/bgfx/src/fs_clear1.bin.h
+++ b/3rdparty/bgfx/src/fs_clear1.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_clear1_glsl[170] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
0x00, 0x84, 0x00, 0x00, 0x00, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, // .....uniform vec
0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // 4 bgfx_clear_col
@@ -12,88 +12,244 @@ static const uint8_t fs_clear1_glsl[170] =
0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // bgfx_clear_colo
0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r[1];.}...
};
-static const uint8_t fs_clear1_dx9[220] =
+static const uint8_t fs_clear1_spv[2418] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x02, 0x00, 0x00, 0x02, // clear_color.....
+ 0x00, 0x4c, 0x09, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, // .L.....#........
+ 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, // .Ta.............
+ 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, // .........GLSL.st
+ 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // d.450...........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xc2, 0x11, 0x00, // .main...........
+ 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, // ................
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, // .main........5..
+ 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, // .vec4_splat(f1;.
+ 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, // ........._x.....
+ 0x00, 0xff, 0x0f, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, // .....@main(vf4;v
+ 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x67, 0x6c, 0x5f, // f4;......O0..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0xa2, 0x25, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..%..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // _1_..........bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .,N..param......
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....$Global....
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, // .........u_viewR
+ 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, // ect.............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, // .u_viewTexel....
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, // .........u_view.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .............u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, // nvView..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_proj.....
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, // .........u_invPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // oj..............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, // .u_viewProj.....
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .........u_invVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, // ewProj..........
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....u_model....
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .........u_model
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // View............
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // .u_modelViewProj
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, // .............u_a
+ 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0x9a, 0x06, 0x00, // lphaRef4........
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // .....bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // color........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xbd, 0x43, 0x00, 0x00, 0x67, 0x6c, 0x5f, // ..........C..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0xdf, 0x38, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..8..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa3, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, // _1_.......G..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // am...........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0xc2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xda, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, // _1_..G..........
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc7, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // .@...G..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, // .#.......H......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, // .#...`...H......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, // .#.......H......
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, // .#...`...H......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, // .#.......H......
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x9a, 0x06, 0x00, // .#... ...H......
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, // .....#...0...G..
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // .........G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .".......G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, // .!..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..... ... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x00, 0x3d, 0x0b, 0x00, // .........!...=..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, // ................
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .e..............
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // .....j... ......
+ 0x00, 0xda, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, // .....e...j...+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // ....."..........
+ 0x00, 0xc7, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, // ........."......
+ 0x00, 0x9a, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .............e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0xda, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.......e...e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc7, 0x04, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x09, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x9a, 0x06, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x09, 0x00, // .........;......
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .B..............
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // . .......+......
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // ./.......+......
+ 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // ......... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xc2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
+ 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa3, 0x47, 0x00, // .Sa..;........G.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbe, 0x2c, 0x00, // .....9........,.
+ 0x00, 0xff, 0x0f, 0x00, 0x00, 0xa3, 0x47, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......G......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xbd, 0x43, 0x00, 0x00, 0xa3, 0x47, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......C...G..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......8......>..
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xbd, 0x43, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc2, 0x11, 0x00, // ......C..>......
+ 0x00, 0xdf, 0x38, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // ..8......8...6..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, // .....5..........
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, // .7..............
+ 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, // .....=.......dW.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, // .....=........N.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, // .....=.......I9.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, // .....=........9.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, // .....P........*.
+ 0x00, 0x64, 0x57, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, // .dW...N..I9...9.
+ 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // ......*..8...6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x0b, 0x00, // .............=..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, // .7.......O0..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa2, 0x25, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xee, 0x5f, 0x00, // ......%......._.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x07, 0x00, 0x00, // .;.......,N.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2c, 0x4e, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>...,N......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x2c, 0x4e, 0x00, // .........5...,N.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x53, 0x18, 0x00, 0x00, 0x42, 0x13, 0x00, // .A.......S...B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0x85, 0x5a, 0x00, 0x00, 0x53, 0x18, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4f, 0x30, 0x00, // ..Z..S...>...O0.
+ 0x00, 0x85, 0x5a, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xf9, 0x34, 0x00, // ..Z..A........4.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0xf9, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......!...4..>..
+ 0x00, 0xa2, 0x25, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, // ..%...!......8..
+ 0x00, 0x00, // ..
+};
+static const uint8_t fs_clear1_dx9[210] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x02, // clear_color.....
- 0x00, 0xb8, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x25, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, // .........%.CTAB.
- 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, // ...[............
- 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, // .......T...0....
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, // .......D.......b
- 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // gfx_clear_color.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x01, // 0.10011.16384...
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ............
+ 0x00, 0xac, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, 0x43, 0x54, 0x41, // ...........".CTA
+ 0x42, 0x1c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, // B....[..........
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .........T...0..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
+ 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, // 0.1.............
+ 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, // ................
+ 0x00, 0x00, // ..
};
-static const uint8_t fs_clear1_dx11[411] =
+static const uint8_t fs_clear1_dx11[413] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x08, // clear_color.....
- 0x00, 0x74, 0x01, 0x44, 0x58, 0x42, 0x43, 0x82, 0xff, 0x8b, 0x5f, 0x53, 0xa0, 0x1f, 0x3b, 0x53, // .t.DXBC..._S..;S
- 0xc6, 0x2a, 0x12, 0xcf, 0xc8, 0x7f, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x04, // .*.........t....
- 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x28, // ...0...........(
- 0x01, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...Aon9P...P....
- 0x02, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, 0x00, 0x00, // ... ...0.....$..
- 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .0...0...$...0..
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x01, // ................
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, 0x64, // ...........SHDRd
- 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, // ...@.......Y...F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, // . .........e....
- 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, // ......e.... ...
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // . .........6....
- 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ......F. ......
- 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, // ...>...ISGN,....
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ....... ........
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, // ...............S
- 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x44, // V_POSITION.OSGND
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, // ...........8....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...8............
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, // ...........SV_TA
- 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x00, 0x00, 0x80, 0x00, // RGET.......
+ 0x00, 0x74, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x82, 0xff, 0x8b, 0x5f, 0x53, 0xa0, 0x1f, // .t...DXBC..._S..
+ 0x3b, 0x53, 0xc6, 0x2a, 0x12, 0xcf, 0xc8, 0x7f, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, // ;S.*.........t..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, // .....0..........
+ 0x00, 0x28, 0x01, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, // .(...Aon9P...P..
+ 0x00, 0x00, 0x02, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, // ..... ...0.....$
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, // ...0...0...$...0
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, // ................
+ 0xff, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
+ 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, // .............SHD
+ 0x52, 0x64, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, // Rd...@.......Y..
+ 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .F. .........e..
+ 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .. ......e.... .
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .F. .........6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, // .....>...ISGN,..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
+ 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, // .SV_POSITION.OSG
+ 0x4e, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, // ND...........8..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....8..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, // .............SV_
+ 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x00, 0x00, 0x80, 0x00, // TARGET.......
};
-static const uint8_t fs_clear1_mtl[531] =
+static const uint8_t fs_clear1_mtl[554] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . float4 gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_0 [[color(
- 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // 0)]];. float4 g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, // l_FragData_1 [[c
- 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, // olor(1)]];.};.st
- 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ruct xlatMtlShad
- 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // erUniform {. fl
- 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // oat4 bgfx_clear_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, // color[8];.};.fra
- 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // gment xlatMtlSha
- 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // derOutput xlatMt
- 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // lMain (xlatMtlSh
- 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // aderInput _mtl_i
- 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, // [[stage_in]], c
- 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // onstant xlatMtlS
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, // haderUniform& _m
- 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, // tl_u [[buffer(0)
- 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // ]]).{. xlatMtlS
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // haderOutput _mtl
- 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, // _o;. _mtl_o.gl_
- 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, // FragData_0 = _mt
- 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, // l_u.bgfx_clear_c
- 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // olor[0];. _mtl_
- 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, // o.gl_FragData_1
- 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, // = _mtl_u.bgfx_cl
- 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, // ear_color[1];.
- 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, // return _mtl_o;.}
- 0x0a, 0x0a, 0x00, // ...
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
+ 0x00, 0x04, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, // .....using names
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // pace metal;.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // Input {.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, // gl_FragData_0 [
+ 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, // [color(0)]];. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // loat4 gl_FragDat
+ 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, // a_1 [[color(1)]]
+ 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // ;.};.struct xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, // MtlShaderUniform
+ 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, // {. float4 bgfx
+ 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, // _clear_color[8];
+ 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, // .};.fragment xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, // xlatMtlMain (xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, // atMtlShaderInput
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, // _mtl_i [[stage_
+ 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, // in]], constant x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, // latMtlShaderUnif
+ 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, // orm& _mtl_u [[bu
+ 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, // ffer(0)]]).{. x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, // latMtlShaderOutp
+ 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // ut _mtl_o;. _mt
+ 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // l_o.gl_FragData_
+ 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, // 0 = _mtl_u.bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, // clear_color[0];.
+ 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // _mtl_o.gl_Frag
+ 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // Data_1 = _mtl_u.
+ 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // bgfx_clear_color
+ 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, // [1];. return _m
+ 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tl_o;.}...
};
extern const uint8_t* fs_clear1_pssl;
extern const uint32_t fs_clear1_pssl_size;
diff --git a/3rdparty/bgfx/src/fs_clear2.bin.h b/3rdparty/bgfx/src/fs_clear2.bin.h
index 7d19bb38b53..5ad3d268131 100644
--- a/3rdparty/bgfx/src/fs_clear2.bin.h
+++ b/3rdparty/bgfx/src/fs_clear2.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_clear2_glsl[210] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
0x00, 0xac, 0x00, 0x00, 0x00, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, // .....uniform vec
0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // 4 bgfx_clear_col
@@ -15,99 +15,271 @@ static const uint8_t fs_clear2_glsl[210] =
0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, // ear_color[2];.}.
0x0a, 0x00, // ..
};
-static const uint8_t fs_clear2_dx9[232] =
+static const uint8_t fs_clear2_spv[2678] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x03, 0x00, 0x00, 0x03, // clear_color.....
+ 0x00, 0x50, 0x0a, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, // .P.....#........
+ 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, // .Ta.............
+ 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, // .........GLSL.st
+ 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // d.450...........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xc2, 0x11, 0x00, // .main...........
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, // ................
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, // .....main.......
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, // .5...vec4_splat(
+ 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, // f1;.........._x.
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, // .........@main(v
+ 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, // f4;vf4;vf4;.....
+ 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _0_....../B..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_1_.....
+ 0x00, 0x10, 0x46, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..F..gl_FragData
+ 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // _2_..........bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0xf4, 0x56, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..V..param......
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, // .b...$Global....
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, // .b.......u_viewR
+ 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, // ect......b......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, // .u_viewTexel....
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, // .b.......u_view.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .....b.......u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, // nvView.......b..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_proj.....
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, // .b.......u_invPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, // oj.......b......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, // .u_viewProj.....
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .b.......u_invVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, // ewProj.......b..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....u_model....
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .b.......u_model
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, // View.....b......
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // .u_modelViewProj
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, // .....b.......u_a
+ 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0x62, 0x0b, 0x00, // lphaRef4.....b..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // .....bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // color........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xaa, 0x43, 0x00, 0x00, 0x67, 0x6c, 0x5f, // ..........C..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0x8c, 0x39, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..9..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_......@,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, // FragData_2_.....
+ 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..G..param......
+ 0x00, 0x5f, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ._U..param......
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, // .....param......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _0_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_1_.....
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, // _2_..G...7......
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xdc, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // .@...G..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // .....H...b......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, // .#.......H...b..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .b...........H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .b.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...b..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H...b......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H...b......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, // .#...`...H...b..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .b...........H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .b.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...b..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H...b......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H...b......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, // .#.......H...b..
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .b...........H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .b.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...b..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H...b......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H...b......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, // .#...`...H...b..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .b...........H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .b.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...b..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H...b......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H...b......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, // .#.......H...b..
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .b...........H..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .b.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...b..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H...b......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x62, 0x0b, 0x00, // .#... ...H...b..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, // .....#...0...G..
+ 0x00, 0x62, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // .b.......G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .".......G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb3, 0x15, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, // .!..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..... ... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x91, 0x00, 0x00, // .........!......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
+ 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .....e..........
+ 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, // .+.......j... ..
+ 0x00, 0x1c, 0x00, 0x04, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, // .....7...e...j..
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, // .+......."......
+ 0x00, 0x1c, 0x00, 0x04, 0x00, 0xdc, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, // ............."..
+ 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .....b..........
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...7...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdc, 0x04, 0x00, 0x00, 0x20, 0x00, 0x04, // .e........... ..
+ 0x00, 0x1c, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x62, 0x0b, 0x00, 0x00, 0x3b, 0x00, 0x04, // .........b...;..
+ 0x00, 0x1c, 0x02, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .....B..........
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ...../.......+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xb3, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, // .............6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // .....Sa..;......
+ 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ..G......;......
+ 0x00, 0x5f, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ._U......;......
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, // .........9......
+ 0x00, 0xbe, 0x2c, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x5f, 0x55, 0x00, // ..,.......G.._U.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xaa, 0x43, 0x00, // .....=........C.
+ 0x00, 0xc9, 0x47, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8c, 0x39, 0x00, // ..G..=........9.
+ 0x00, 0x5f, 0x55, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, // ._U..=.......@,.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xaa, 0x43, 0x00, // .....>........C.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x8c, 0x39, 0x00, 0x00, 0x3e, 0x00, 0x03, // .>........9..>..
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, // .....@,......8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, // .6.......5......
+ 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .....7..........
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........=......
+ 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .dW......=......
+ 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // ..N......=......
+ 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .I9......=......
+ 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // ..9......P......
+ 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, // ..*..dW...N..I9.
+ 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, // ..9.......*..8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
+ 0x00, 0x91, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe2, 0x2e, 0x00, // .....7..........
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x37, 0x00, 0x03, // .7......./B..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x10, 0x46, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x37, 0x1e, 0x00, // ......F......7..
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........V.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>....V......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0xf4, 0x56, 0x00, // .........5....V.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x1b, 0x21, 0x00, 0x00, 0x42, 0x13, 0x00, // .A........!..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0xce, 0x18, 0x00, 0x00, 0x1b, 0x21, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe2, 0x2e, 0x00, // ......!..>......
+ 0x00, 0xce, 0x18, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xc1, 0x3d, 0x00, // .....A........=.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf2, 0x1b, 0x00, 0x00, 0xc1, 0x3d, 0x00, 0x00, 0x3e, 0x00, 0x03, // ..........=..>..
+ 0x00, 0x2f, 0x42, 0x00, 0x00, 0xf2, 0x1b, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, // ./B......A......
+ 0x00, 0xc2, 0x3d, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x11, 0x0a, 0x00, // ..=..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe6, 0x29, 0x00, 0x00, 0xc2, 0x3d, 0x00, // .=........)...=.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x10, 0x46, 0x00, 0x00, 0xe6, 0x29, 0x00, 0x00, 0xfd, 0x00, 0x01, // .>....F...).....
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .8....
+};
+static const uint8_t fs_clear2_dx9[222] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x03, // clear_color.....
- 0x00, 0xc4, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x25, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, // .........%.CTAB.
- 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, // ...[............
- 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, // .......T...0....
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, // .......D.......b
- 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // gfx_clear_color.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x01, // 0.10011.16384...
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, // ................
- 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ........
+ 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, 0x43, 0x54, 0x41, // ...........".CTA
+ 0x42, 0x1c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, // B....[..........
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .........T...0..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
+ 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, // 0.1.............
+ 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
+ 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ..............
};
-static const uint8_t fs_clear2_dx11[483] =
+static const uint8_t fs_clear2_dx11[485] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x08, // clear_color.....
- 0x00, 0xbc, 0x01, 0x44, 0x58, 0x42, 0x43, 0x0e, 0x9f, 0x66, 0xdd, 0x1f, 0x67, 0xd6, 0xd1, 0x64, // ...DXBC..f..g..d
- 0xb9, 0x94, 0x61, 0x3d, 0x93, 0x51, 0x1a, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x04, // ..a=.Q..........
- 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x58, // ...0.......$...X
- 0x01, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, // ...Aon9.........
- 0x02, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, 0x00, 0x00, // ...,...0.....$..
- 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .0...0...$...0..
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x01, // ................
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, // ................
- 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, 0x88, 0x00, 0x00, 0x00, 0x40, // .......SHDR....@
- 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, // ..."...Y...F. ..
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, // ...e.... ......e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // .... ......6....
- 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F. ......
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // . .........6....
- 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // ......F. ......
- 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, // ...>...ISGN,....
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ....... ........
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, // ...............S
- 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x5c, // V_POSITION.OSGN.
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, // ...........P....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...P............
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x02, // ...........P....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x00, // ...SV_TARGET....
- 0x00, 0x80, 0x00, // ...
+ 0x00, 0xbc, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x0e, 0x9f, 0x66, 0xdd, 0x1f, 0x67, 0xd6, // .....DXBC..f..g.
+ 0xd1, 0x64, 0xb9, 0x94, 0x61, 0x3d, 0x93, 0x51, 0x1a, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x01, 0x00, // .d..a=.Q........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, // .....0.......$..
+ 0x00, 0x58, 0x01, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, // .X...Aon9.......
+ 0x00, 0x00, 0x02, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, // .....,...0.....$
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, // ...0...0...$...0
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, // ................
+ 0xff, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
+ 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, // ................
+ 0x80, 0x02, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, 0x88, 0x00, 0x00, // .........SHDR...
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, // .@..."...Y...F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .........e.... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, // .....e.... .....
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .e.... ......6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .F. .........6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, // .....>...ISGN,..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
+ 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, // .SV_POSITION.OSG
+ 0x4e, 0x5c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, // N............P..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....P..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, // .............P..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
+ 0xab, 0x00, 0x00, 0x80, 0x00, // .....
};
-static const uint8_t fs_clear2_mtl[621] =
+static const uint8_t fs_clear2_mtl[644] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH.......^...us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . float4 gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_0 [[color(
- 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // 0)]];. float4 g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, // l_FragData_1 [[c
- 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // olor(1)]];. flo
- 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // at4 gl_FragData_
- 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, // 2 [[color(2)]];.
- 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // };.struct xlatMt
- 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, // lShaderUniform {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, // . float4 bgfx_c
- 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, // lear_color[8];.}
- 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // ;.fragment xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, // tlShaderOutput x
- 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, // latMtlMain (xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, // MtlShaderInput _
- 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, // mtl_i [[stage_in
- 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, // ]], constant xla
- 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, // tMtlShaderUnifor
- 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, // m& _mtl_u [[buff
- 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, // er(0)]]).{. xla
- 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
- 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // _mtl_o;. _mtl_
- 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, // o.gl_FragData_0
- 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, // = _mtl_u.bgfx_cl
- 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, // ear_color[0];.
- 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, // _mtl_o.gl_FragDa
- 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, // ta_1 = _mtl_u.bg
- 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, // fx_clear_color[1
- 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, // ];. _mtl_o.gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ragData_2 = _mtl
- 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, // _u.bgfx_clear_co
- 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, // lor[2];. return
- 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _mtl_o;.}...
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
+ 0x00, 0x5e, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, // .^...using names
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // pace metal;.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // Input {.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, // gl_FragData_0 [
+ 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, // [color(0)]];. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // loat4 gl_FragDat
+ 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, // a_1 [[color(1)]]
+ 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. float4 gl_Fr
+ 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // agData_2 [[color
+ 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, // (2)]];.};.struct
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, // xlatMtlShaderUn
+ 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // iform {. float4
+ 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // bgfx_clear_colo
+ 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, // r[8];.};.fragmen
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, // utput xlatMtlMai
+ 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // n (xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, // Input _mtl_i [[s
+ 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, // tage_in]], const
+ 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // ant xlatMtlShade
+ 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // rUniform& _mtl_u
+ 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, // [[buffer(0)]]).
+ 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // {. xlatMtlShade
+ 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, // rOutput _mtl_o;.
+ 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // _mtl_o.gl_Frag
+ 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // Data_0 = _mtl_u.
+ 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // bgfx_clear_color
+ 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, // [0];. _mtl_o.gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, // _FragData_1 = _m
+ 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // tl_u.bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // color[1];. _mtl
+ 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, // _o.gl_FragData_2
+ 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, // = _mtl_u.bgfx_c
+ 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x20, // lear_color[2];.
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, // return _mtl_o;.
+ 0x7d, 0x0a, 0x0a, 0x00, // }...
};
extern const uint8_t* fs_clear2_pssl;
extern const uint32_t fs_clear2_pssl_size;
diff --git a/3rdparty/bgfx/src/fs_clear3.bin.h b/3rdparty/bgfx/src/fs_clear3.bin.h
index 82f60bc695a..67c7bce9fb8 100644
--- a/3rdparty/bgfx/src/fs_clear3.bin.h
+++ b/3rdparty/bgfx/src/fs_clear3.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_clear3_glsl[250] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
0x00, 0xd4, 0x00, 0x00, 0x00, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, // .....uniform vec
0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // 4 bgfx_clear_col
@@ -17,110 +17,297 @@ static const uint8_t fs_clear3_glsl[250] =
0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // bgfx_clear_colo
0x72, 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r[3];.}...
};
-static const uint8_t fs_clear3_dx9[244] =
+static const uint8_t fs_clear3_spv[2938] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x04, 0x00, 0x00, 0x04, // clear_color.....
+ 0x00, 0x54, 0x0b, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, // .T.....#........
+ 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, // .Ta.............
+ 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, // .........GLSL.st
+ 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // d.450...........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xc2, 0x11, 0x00, // .main...........
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, // ................
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, // .....5...vec4_sp
+ 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, // lat(f1;.........
+ 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0xf4, 0x0c, 0x00, 0x00, 0x40, 0x6d, 0x61, // ._x..........@ma
+ 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, // in(vf4;vf4;vf4;v
+ 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x8f, 0x22, 0x00, 0x00, 0x67, 0x6c, 0x5f, // f4;......."..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0xf3, 0x54, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..T..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x4e, 0x4a, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_......NJ..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0xd8, 0x4e, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..N..gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // _3_..........bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0x83, 0x46, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..F..param......
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, // .g...$Global....
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, // .g.......u_viewR
+ 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, // ect......g......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, // .u_viewTexel....
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, // .g.......u_view.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .....g.......u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, // nvView.......g..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_proj.....
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, // .g.......u_invPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // oj.......g......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, // .u_viewProj.....
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .g.......u_invVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, // ewProj.......g..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....u_model....
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .g.......u_model
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x67, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, // View.....g......
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // .u_modelViewProj
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x04, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, // .....g.......u_a
+ 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0x67, 0x04, 0x00, // lphaRef4.....g..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // .....bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // color........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xaa, 0x43, 0x00, 0x00, 0x67, 0x6c, 0x5f, // ..........C..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0x79, 0x39, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .y9..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xed, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_.......,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0x40, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .@,..gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, // _3_.......G..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, // am........U..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x49, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am.......I8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // am...........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0xc2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xb3, 0x15, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x94, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, // _3_..G..........
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf1, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // .@...G..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // .....H...g......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, // .#.......H...g..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .g...........H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .g.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...g..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x67, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H...g......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H...g......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, // .#...`...H...g..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .g...........H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .g.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...g..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x67, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H...g......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H...g......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, // .#.......H...g..
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .g...........H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .g.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...g..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x67, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H...g......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H...g......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, // .#...`...H...g..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .g...........H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .g.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...g..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x67, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H...g......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H...g......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, // .#.......H...g..
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .g...........H..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .g.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...g..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H...g......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x67, 0x04, 0x00, // .#... ...H...g..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, // .....#...0...G..
+ 0x00, 0x67, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // .g.......G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .".......G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb3, 0x15, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xe1, 0x0d, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, // .!..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..... ... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x3a, 0x04, 0x00, // .........!...:..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .........e......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, // .....+.......j..
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x94, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, // . ...........e..
+ 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, // .j...+......."..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xf1, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x22, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x67, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, // .".......g......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .....e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x94, 0x02, 0x00, // .e...e...e......
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf1, 0x04, 0x00, // .e...e..........
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0xe4, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, // . ...........g..
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe4, 0x06, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, // .;.......B......
+ 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ......... ......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, // .+......./......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // . ..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, // .+..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, // .+..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, // .+..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // . ..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xb3, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
+ 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, // .........Sa..;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......G......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......U......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x49, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....I8......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x08, // .............9..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xbe, 0x2c, 0x00, 0x00, 0xf4, 0x0c, 0x00, 0x00, 0xc9, 0x47, 0x00, // ......,.......G.
+ 0x00, 0x85, 0x55, 0x00, 0x00, 0x49, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, // ..U..I8......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xaa, 0x43, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......C...G..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x39, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....y9...U..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xed, 0x2c, 0x00, 0x00, 0x49, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......,..I8..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....@,......>..
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xaa, 0x43, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc2, 0x11, 0x00, // ......C..>......
+ 0x00, 0x79, 0x39, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb3, 0x15, 0x00, 0x00, 0xed, 0x2c, 0x00, // .y9..>........,.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0xfd, 0x00, 0x01, // .>.......@,.....
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, // .8...6.......5..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, // .........7......
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .............=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....dW......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......N......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....I9......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, // ......9......P..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xa9, 0x4e, 0x00, // ......*..dW...N.
+ 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, 0x00, // .I9...9.......*.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xf4, 0x0c, 0x00, // .8...6..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x04, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .....:...7......
+ 0x00, 0x8f, 0x22, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xf3, 0x54, 0x00, // .."..7........T.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4e, 0x4a, 0x00, 0x00, 0x37, 0x00, 0x03, // .7.......NJ..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xd8, 0x4e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x45, 0x58, 0x00, // ......N......EX.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x83, 0x46, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........F.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x83, 0x46, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>....F......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x83, 0x46, 0x00, // .........5....F.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x29, 0x5b, 0x00, 0x00, 0x42, 0x13, 0x00, // .A.......)[..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0x96, 0x21, 0x00, 0x00, 0x29, 0x5b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8f, 0x22, 0x00, // ..!..)[..>....".
+ 0x00, 0x96, 0x21, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x46, 0x00, // ..!..A........F.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x89, 0x46, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......V...F..>..
+ 0x00, 0xf3, 0x54, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, // ..T...V..A......
+ 0x00, 0x8a, 0x46, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x11, 0x0a, 0x00, // ..F..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x8a, 0x46, 0x00, // .=........V...F.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4e, 0x4a, 0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x41, 0x00, 0x06, // .>...NJ...V..A..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x8b, 0x46, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // ......F..B.../..
+ 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x75, 0x19, 0x00, // .....=.......u..
+ 0x00, 0x8b, 0x46, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x4e, 0x00, 0x00, 0x75, 0x19, 0x00, // ..F..>....N..u..
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .....8....
+};
+static const uint8_t fs_clear3_dx9[234] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x04, // clear_color.....
- 0x00, 0xd0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x25, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, // .........%.CTAB.
- 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, // ...[............
- 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, // .......T...0....
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, // .......D.......b
- 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // gfx_clear_color.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x01, // 0.10011.16384...
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, // ................
- 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, // ................
- 0xff, 0x00, 0x00, 0x00, // ....
+ 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, 0x43, 0x54, 0x41, // ...........".CTA
+ 0x42, 0x1c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, // B....[..........
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .........T...0..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
+ 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, // 0.1.............
+ 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
+ 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, // ................
+ 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
};
-static const uint8_t fs_clear3_dx11[555] =
+static const uint8_t fs_clear3_dx11[557] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x08, // clear_color.....
- 0x00, 0x04, 0x02, 0x44, 0x58, 0x42, 0x43, 0xd5, 0x4f, 0xed, 0x6d, 0x3f, 0x90, 0xd6, 0xbb, 0x53, // ...DXBC.O.m?...S
- 0x7b, 0xdc, 0x55, 0x0b, 0xda, 0x6f, 0x86, 0x01, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x04, // {.U..o..........
- 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0x88, // ...0.......T....
- 0x01, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, // ...Aon9h...h....
- 0x02, 0xff, 0xff, 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, 0x00, 0x00, // ...8...0.....$..
- 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .0...0...$...0..
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x01, // ................
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, // ................
- 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, // ................
- 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, 0xac, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2b, // ...SHDR....@...+
- 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, // ...Y...F. ......
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, // ...e.... ......e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, // .... ......e....
- 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x03, // ......e.... ...
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // . .........6....
- 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ......F. ......
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // . .........6....
- 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ......F. ......
- 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, // ...>...ISGN,....
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ....... ........
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, // ...............S
- 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x74, // V_POSITION.OSGNt
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, // ...........h....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...h............
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x02, // ...........h....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...h............
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, // ...........SV_TA
- 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x00, 0x00, 0x80, 0x00, // RGET.......
+ 0x00, 0x04, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0xd5, 0x4f, 0xed, 0x6d, 0x3f, 0x90, 0xd6, // .....DXBC.O.m?..
+ 0xbb, 0x53, 0x7b, 0xdc, 0x55, 0x0b, 0xda, 0x6f, 0x86, 0x01, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, // .S{.U..o........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, // .....0.......T..
+ 0x00, 0x88, 0x01, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, // .....Aon9h...h..
+ 0x00, 0x00, 0x02, 0xff, 0xff, 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, // .....8...0.....$
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, // ...0...0...$...0
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, // ................
+ 0xff, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
+ 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, // ................
+ 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, // ................
+ 0xa0, 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, 0xac, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, // .....SHDR....@..
+ 0x00, 0x2b, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .+...Y...F. ....
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....e.... .....
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.... ......e..
+ 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .. ......e.... .
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .F. .........6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .F. .........6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, // .....>...ISGN,..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
+ 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, // .SV_POSITION.OSG
+ 0x4e, 0x74, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, // Nt...........h..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....h..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, // .............h..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....h..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, // .............SV_
+ 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x00, 0x00, 0x80, 0x00, // TARGET.......
};
-static const uint8_t fs_clear3_mtl[711] =
+static const uint8_t fs_clear3_mtl[734] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . float4 gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_0 [[color(
- 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // 0)]];. float4 g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, // l_FragData_1 [[c
- 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // olor(1)]];. flo
- 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // at4 gl_FragData_
- 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, // 2 [[color(2)]];.
- 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // float4 gl_Frag
- 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, // Data_3 [[color(3
- 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, // )]];.};.struct x
- 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, // latMtlShaderUnif
- 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, // orm {. float4 b
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
+ 0x00, 0xb8, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, // .....using names
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // pace metal;.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // Input {.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, // gl_FragData_0 [
+ 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, // [color(0)]];. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // loat4 gl_FragDat
+ 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, // a_1 [[color(1)]]
+ 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. float4 gl_Fr
+ 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // agData_2 [[color
+ 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // (2)]];. float4
+ 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, // gl_FragData_3 [[
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, // color(3)]];.};.s
+ 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // truct xlatMtlSha
+ 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, // derUniform {. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, // loat4 bgfx_clear
+ 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, // _color[8];.};.fr
+ 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // agment xlatMtlSh
+ 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // aderOutput xlatM
+ 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // tlMain (xlatMtlS
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // haderInput _mtl_
+ 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, // i [[stage_in]],
+ 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // constant xlatMtl
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, // ShaderUniform& _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, // mtl_u [[buffer(0
+ 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // )]]).{. xlatMtl
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, // ShaderOutput _mt
+ 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, // l_o;. _mtl_o.gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, // _FragData_0 = _m
+ 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // tl_u.bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // color[0];. _mtl
+ 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, // _o.gl_FragData_1
+ 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, // = _mtl_u.bgfx_c
+ 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, // lear_color[1];.
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // _mtl_o.gl_FragD
+ 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, // ata_2 = _mtl_u.b
0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, // gfx_clear_color[
- 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, // 8];.};.fragment
- 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
- 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, // put xlatMtlMain
- 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, // (xlatMtlShaderIn
- 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, // put _mtl_i [[sta
- 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, // ge_in]], constan
- 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, // t xlatMtlShaderU
- 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, // niform& _mtl_u [
- 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, // [buffer(0)]]).{.
- 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // xlatMtlShaderO
- 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, // utput _mtl_o;.
- 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, // _mtl_o.gl_FragDa
- 0x74, 0x61, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, // ta_0 = _mtl_u.bg
- 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, // fx_clear_color[0
- 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, // ];. _mtl_o.gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ragData_1 = _mtl
- 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, // _u.bgfx_clear_co
- 0x6c, 0x6f, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // lor[1];. _mtl_o
- 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x3d, // .gl_FragData_2 =
- 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, // _mtl_u.bgfx_cle
- 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // ar_color[2];. _
- 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // mtl_o.gl_FragDat
- 0x61, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, // a_3 = _mtl_u.bgf
- 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x33, 0x5d, // x_clear_color[3]
- 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // ;. return _mtl_
- 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // o;.}...
+ 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, // 2];. _mtl_o.gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, // FragData_3 = _mt
+ 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, // l_u.bgfx_clear_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, // olor[3];. retur
+ 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // n _mtl_o;.}...
};
extern const uint8_t* fs_clear3_pssl;
extern const uint32_t fs_clear3_pssl_size;
diff --git a/3rdparty/bgfx/src/fs_clear4.bin.h b/3rdparty/bgfx/src/fs_clear4.bin.h
index 8d91172fc31..0fb82b48509 100644
--- a/3rdparty/bgfx/src/fs_clear4.bin.h
+++ b/3rdparty/bgfx/src/fs_clear4.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_clear4_glsl[290] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
0x00, 0xfc, 0x00, 0x00, 0x00, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, // .....uniform vec
0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // 4 bgfx_clear_col
@@ -20,113 +20,316 @@ static const uint8_t fs_clear4_glsl[290] =
0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, // ear_color[4];.}.
0x0a, 0x00, // ..
};
-static const uint8_t fs_clear4_dx9[244] =
+static const uint8_t fs_clear4_spv[3198] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x05, 0x00, 0x00, 0x05, // clear_color.....
+ 0x00, 0x58, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, // .X.....#........
+ 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, // .Ta.............
+ 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, // .........GLSL.st
+ 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // d.450...........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xc2, 0x11, 0x00, // .main...........
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0xd2, 0x11, 0x00, 0x00, 0x10, 0x00, 0x03, // ................
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, // n........5...vec
+ 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, // 4_splat(f1;.....
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, 0x66, 0x11, 0x00, // ....._x......f..
+ 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, // .@main(vf4;vf4;v
+ 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, // f4;vf4;vf4;.....
+ 0x00, 0xbb, 0x60, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..`..gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x8b, 0x2b, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _0_.......+..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_1_.....
+ 0x00, 0xc3, 0x44, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..D..gl_FragData
+ 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x16, 0x53, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _2_.......S..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_3_.....
+ 0x00, 0xa0, 0x57, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..W..gl_FragData
+ 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // _4_..........bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0x4b, 0x4f, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .KO..param......
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, // ./...$Global....
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, // ./.......u_viewR
+ 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, // ect....../......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, // .u_viewTexel....
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, // ./.......u_view.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // ...../.......u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, // nvView......./..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_proj.....
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, // ./.......u_invPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, // oj......./......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, // .u_viewProj.....
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // ./.......u_invVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, // ewProj......./..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....u_model....
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // ./.......u_model
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, // View...../......
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // .u_modelViewProj
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, // ...../.......u_a
+ 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0x2f, 0x09, 0x00, // lphaRef4...../..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // .....bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // color........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xaa, 0x43, 0x00, 0x00, 0x67, 0x6c, 0x5f, // ..........C..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0x79, 0x39, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .y9..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xda, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_.......,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0xed, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..,..gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _3_......@,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, // FragData_4_.....
+ 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..G..param......
+ 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..U..param......
+ 0x00, 0x6f, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .o8..param......
+ 0x00, 0x49, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .I8..param......
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, // .....param......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _0_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_1_.....
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _2_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_3_.....
+ 0x00, 0xd2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf1, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, // _4_..G..........
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x06, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, // .@...G..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, // .....H.../......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, // .#.......H.../..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // ./...........H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ./.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H.../..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H.../......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H.../......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, // .#...`...H.../..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // ./...........H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // ./.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H.../..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H.../......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H.../......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, // .#.......H.../..
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // ./...........H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // ./.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H.../..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H.../......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H.../......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, // .#...`...H.../..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // ./...........H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // ./.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H.../..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H.../......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H.../......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, // .#.......H.../..
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // ./...........H..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // ./.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H.../..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H.../......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2f, 0x09, 0x00, // .#... ...H.../..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, // .....#...0...G..
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // ./.......G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .".......G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb3, 0x15, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xe1, 0x0d, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, // .!..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..... ... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x08, 0x00, 0x75, 0x0a, 0x00, // .........!...u..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, // .............e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // . .......+......
+ 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xf1, 0x02, 0x00, // .j... ..........
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .e...j...+......
+ 0x00, 0x22, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x06, 0x05, 0x00, // ."..............
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x2f, 0x09, 0x00, // ....."......./..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .........e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0xf1, 0x02, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .....e...e......
+ 0x00, 0x06, 0x05, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xac, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
+ 0x00, 0x2f, 0x09, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xac, 0x0b, 0x00, 0x00, 0x42, 0x13, 0x00, // ./...;.......B..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....+......./..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, // .....+..........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, // .....+..........
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x0a, 0x00, // .....+..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x17, 0x0a, 0x00, // .....+..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, // .....;..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xc2, 0x11, 0x00, // .....;..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xb3, 0x15, 0x00, // .....;..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xe1, 0x0d, 0x00, // .....;..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd2, 0x11, 0x00, // .....;..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // .....6..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, // .............Sa.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........G.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........U.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, // .;.......o8.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x49, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, // .;.......I8.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, // .;..............
+ 0x00, 0x39, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbe, 0x2c, 0x00, 0x00, 0x66, 0x11, 0x00, // .9........,..f..
+ 0x00, 0xc9, 0x47, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x49, 0x38, 0x00, // ..G...U..o8..I8.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xaa, 0x43, 0x00, // .....=........C.
+ 0x00, 0xc9, 0x47, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x39, 0x00, // ..G..=.......y9.
+ 0x00, 0x85, 0x55, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xda, 0x2c, 0x00, // ..U..=........,.
+ 0x00, 0x6f, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xed, 0x2c, 0x00, // .o8..=........,.
+ 0x00, 0x49, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, // .I8..=.......@,.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xaa, 0x43, 0x00, // .....>........C.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x79, 0x39, 0x00, 0x00, 0x3e, 0x00, 0x03, // .>.......y9..>..
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0xda, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe1, 0x0d, 0x00, // ......,..>......
+ 0x00, 0xed, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd2, 0x11, 0x00, 0x00, 0x40, 0x2c, 0x00, // ..,..>.......@,.
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // .....8...6......
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, // .5...........7..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, // ................
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=.......dW.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=........N.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=.......I9.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=........9.....
+ 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, // .P........*..dW.
+ 0x00, 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, // ..N..I9...9.....
+ 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // ..*..8...6......
+ 0x00, 0x66, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x0a, 0x00, 0x00, 0x37, 0x00, 0x03, // .f.......u...7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbb, 0x60, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // ......`..7......
+ 0x00, 0x8b, 0x2b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc3, 0x44, 0x00, // ..+..7........D.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x16, 0x53, 0x00, 0x00, 0x37, 0x00, 0x03, // .7........S..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa0, 0x57, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x0d, 0x61, 0x00, // ......W.......a.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x4b, 0x4f, 0x00, 0x00, 0x07, 0x00, 0x00, // .;.......KO.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4b, 0x4f, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>...KO......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x4b, 0x4f, 0x00, // .........5...KO.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x72, 0x19, 0x00, 0x00, 0x42, 0x13, 0x00, // .A.......r...B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0xa4, 0x5b, 0x00, 0x00, 0x72, 0x19, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbb, 0x60, 0x00, // ..[..r...>....`.
+ 0x00, 0xa4, 0x5b, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x18, 0x36, 0x00, // ..[..A........6.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc8, 0x5e, 0x00, 0x00, 0x18, 0x36, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......^...6..>..
+ 0x00, 0x8b, 0x2b, 0x00, 0x00, 0xc8, 0x5e, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, // ..+...^..A......
+ 0x00, 0x19, 0x36, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x11, 0x0a, 0x00, // ..6..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc9, 0x5e, 0x00, 0x00, 0x19, 0x36, 0x00, // .=........^...6.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc3, 0x44, 0x00, 0x00, 0xc9, 0x5e, 0x00, 0x00, 0x41, 0x00, 0x06, // .>....D...^..A..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x1a, 0x36, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // ......6..B.../..
+ 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xca, 0x5e, 0x00, // .....=........^.
+ 0x00, 0x1a, 0x36, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x16, 0x53, 0x00, 0x00, 0xca, 0x5e, 0x00, // ..6..>....S...^.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x1b, 0x36, 0x00, 0x00, 0x42, 0x13, 0x00, // .A........6..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x17, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0x3d, 0x22, 0x00, 0x00, 0x1b, 0x36, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa0, 0x57, 0x00, // .="...6..>....W.
+ 0x00, 0x3d, 0x22, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .="......8....
+};
+static const uint8_t fs_clear4_dx9[234] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x04, // clear_color.....
- 0x00, 0xd0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x25, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, // .........%.CTAB.
- 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, // ...[............
- 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, // .......T...0....
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, // .......D.......b
- 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // gfx_clear_color.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x01, // 0.10011.16384...
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, // ................
- 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, // ................
- 0xff, 0x00, 0x00, 0x00, // ....
+ 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, 0x43, 0x54, 0x41, // ...........".CTA
+ 0x42, 0x1c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, // B....[..........
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .........T...0..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
+ 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, // 0.1.............
+ 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
+ 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, // ................
+ 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
};
-static const uint8_t fs_clear4_dx11[499] =
+static const uint8_t fs_clear4_dx11[501] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x08, // clear_color.....
- 0x00, 0xcc, 0x01, 0x44, 0x58, 0x42, 0x43, 0x0e, 0x7a, 0x23, 0x41, 0x2a, 0x54, 0xbd, 0xa3, 0x8b, // ...DXBC.z#A*T...
- 0x1e, 0xbd, 0x2e, 0x91, 0x6f, 0x8b, 0x29, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x01, 0x00, 0x00, 0x03, // ....o.).........
- 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x49, // ...,...`.......I
- 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, // .......SV_POSITI
- 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x8c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, // ON.OSGN.........
- 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, // ...........SV_TA
- 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xd0, 0x00, 0x00, 0x00, 0x40, // RGET...SHDR....@
- 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, // ...4...Y...F. ..
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, // ...e.... ......e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, // .... ......e....
- 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x04, // ......e.... ...
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // . .........6....
- 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ......F. ......
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // . .........6....
- 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ......F. ......
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, // . .........>....
- 0x00, 0x80, 0x00, // ...
+ 0x00, 0xcc, 0x01, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x0e, 0x7a, 0x23, 0x41, 0x2a, 0x54, 0xbd, // .....DXBC.z#A*T.
+ 0xa3, 0x8b, 0x1e, 0xbd, 0x2e, 0x91, 0x6f, 0x8b, 0x29, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x01, 0x00, // ......o.).......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, // .....,...`......
+ 0x00, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .ISGN,..........
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // . ..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, // .........SV_POSI
+ 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x8c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // TION.OSGN.......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, // .............SV_
+ 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xd0, 0x00, 0x00, // TARGET...SHDR...
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, // .@...4...Y...F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .........e.... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, // .....e.... .....
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.... ......e..
+ 0x03, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .. ......e.... .
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .F. .........6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .F. .........6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, // .F. .........>..
+ 0x01, 0x00, 0x00, 0x80, 0x00, // .....
};
-static const uint8_t fs_clear4_mtl[801] =
+static const uint8_t fs_clear4_mtl[824] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
+ 0x00, 0x12, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, // .....using names
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // pace metal;.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // Input {.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, // gl_FragData_0 [
+ 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, // [color(0)]];. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // loat4 gl_FragDat
+ 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, // a_1 [[color(1)]]
+ 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. float4 gl_Fr
+ 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // agData_2 [[color
+ 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // (2)]];. float4
+ 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, // gl_FragData_3 [[
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // color(3)]];. fl
+ 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // oat4 gl_FragData
+ 0x5f, 0x34, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x34, 0x29, 0x5d, 0x5d, 0x3b, // _4 [[color(4)]];
0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . float4 gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_0 [[color(
- 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // 0)]];. float4 g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, // l_FragData_1 [[c
- 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // olor(1)]];. flo
- 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // at4 gl_FragData_
- 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, // 2 [[color(2)]];.
- 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // float4 gl_Frag
- 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, // Data_3 [[color(3
- 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, // )]];. float4 gl
- 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x20, 0x5b, 0x5b, 0x63, 0x6f, // _FragData_4 [[co
- 0x6c, 0x6f, 0x72, 0x28, 0x34, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, // lor(4)]];.};.str
- 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade
- 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // rUniform {. flo
- 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, // at4 bgfx_clear_c
- 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, // olor[8];.};.frag
- 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ment xlatMtlShad
- 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // erOutput xlatMtl
- 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // Main (xlatMtlSha
- 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, // derInput _mtl_i
- 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, // [[stage_in]], co
- 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // nstant xlatMtlSh
- 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, // aderUniform& _mt
- 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, // l_u [[buffer(0)]
- 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // ]).{. xlatMtlSh
- 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // aderOutput _mtl_
- 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, // o;. _mtl_o.gl_F
- 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ragData_0 = _mtl
- 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, // _u.bgfx_clear_co
- 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // lor[0];. _mtl_o
- 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, // .gl_FragData_1 =
- 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, // _mtl_u.bgfx_cle
- 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // ar_color[1];. _
- 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // mtl_o.gl_FragDat
- 0x61, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, // a_2 = _mtl_u.bgf
- 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, // x_clear_color[2]
- 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. _mtl_o.gl_Fr
- 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // agData_3 = _mtl_
- 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // u.bgfx_clear_col
- 0x6f, 0x72, 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // or[3];. _mtl_o.
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x20, 0x3d, 0x20, // gl_FragData_4 =
- 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, // _mtl_u.bgfx_clea
- 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, // r_color[4];. re
- 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, // turn _mtl_o;.}..
- 0x00, // .
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // tlShaderUniform
+ 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, // {. float4 bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, // clear_color[8];.
+ 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // };.fragment xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, // MtlShaderOutput
+ 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, // xlatMtlMain (xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, // tMtlShaderInput
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, // _mtl_i [[stage_i
+ 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, // n]], constant xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, // atMtlShaderUnifo
+ 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, // rm& _mtl_u [[buf
+ 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, // fer(0)]]).{. xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, // atMtlShaderOutpu
+ 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // t _mtl_o;. _mtl
+ 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, // _o.gl_FragData_0
+ 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, // = _mtl_u.bgfx_c
+ 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, // lear_color[0];.
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // _mtl_o.gl_FragD
+ 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, // ata_1 = _mtl_u.b
+ 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, // gfx_clear_color[
+ 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, // 1];. _mtl_o.gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, // FragData_2 = _mt
+ 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, // l_u.bgfx_clear_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // olor[2];. _mtl_
+ 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, // o.gl_FragData_3
+ 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, // = _mtl_u.bgfx_cl
+ 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, // ear_color[3];.
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, // _mtl_o.gl_FragDa
+ 0x74, 0x61, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, // ta_4 = _mtl_u.bg
+ 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x34, // fx_clear_color[4
+ 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ];. return _mtl
+ 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _o;.}...
};
extern const uint8_t* fs_clear4_pssl;
extern const uint32_t fs_clear4_pssl_size;
diff --git a/3rdparty/bgfx/src/fs_clear5.bin.h b/3rdparty/bgfx/src/fs_clear5.bin.h
index 455fa0b6f25..3765521e1ef 100644
--- a/3rdparty/bgfx/src/fs_clear5.bin.h
+++ b/3rdparty/bgfx/src/fs_clear5.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_clear5_glsl[330] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
0x00, 0x24, 0x01, 0x00, 0x00, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, // .$...uniform vec
0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // 4 bgfx_clear_col
@@ -22,121 +22,343 @@ static const uint8_t fs_clear5_glsl[330] =
0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // bgfx_clear_colo
0x72, 0x5b, 0x35, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r[5];.}...
};
-static const uint8_t fs_clear5_dx9[244] =
+static const uint8_t fs_clear5_spv[3458] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x06, 0x00, 0x00, 0x06, // clear_color.....
+ 0x00, 0x5c, 0x0d, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, // .......#........
+ 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, // .Ta.............
+ 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, // .........GLSL.st
+ 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // d.450...........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xc2, 0x11, 0x00, // .main...........
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0xd2, 0x11, 0x00, 0x00, 0xc3, 0x15, 0x00, // ................
+ 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, // ................
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, // .main........5..
+ 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, // .vec4_splat(f1;.
+ 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x0a, // ........._x.....
+ 0x00, 0x44, 0x12, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, // .D...@main(vf4;v
+ 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, // f4;vf4;vf4;vf4;v
+ 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x68, 0x54, 0x00, 0x00, 0x67, 0x6c, 0x5f, // f4;......hT..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0xa2, 0x4c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..L..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x52, 0x34, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_......R4..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0x53, 0x34, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .S4..gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa5, 0x42, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _3_.......B..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_4_.....
+ 0x00, 0x2f, 0x47, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ./G..gl_FragData
+ 0x5f, 0x35, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // _5_..........bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0x13, 0x58, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..X..param......
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, // .4...$Global....
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, // .4.......u_viewR
+ 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x34, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, // ect......4......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, // .u_viewTexel....
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, // .4.......u_view.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x34, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .....4.......u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, // nvView.......4..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_proj.....
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, // .4.......u_invPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x34, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, // oj.......4......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, // .u_viewProj.....
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .4.......u_invVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, // ewProj.......4..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....u_model....
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .4.......u_model
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x34, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, // View.....4......
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // .u_modelViewProj
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x34, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, // .....4.......u_a
+ 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0x34, 0x02, 0x00, // lphaRef4.....4..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // .....bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // color........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xaa, 0x43, 0x00, 0x00, 0x67, 0x6c, 0x5f, // ..........C..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0x79, 0x39, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .y9..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xda, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_.......,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0xdb, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..,..gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xed, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _3_.......,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_4_.....
+ 0x00, 0x40, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .@,..gl_FragData
+ 0x5f, 0x35, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, // _5_.......G..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, // am........U..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am.......o8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x70, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am.......p8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x49, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am.......I8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // am...........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0xc2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xb3, 0x15, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _3_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_4_.....
+ 0x00, 0xc3, 0x15, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x35, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, // _5_..G...N......
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1b, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, // .@...G..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // .....H...4......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, // .#.......H...4..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .4...........H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .4.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...4..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x34, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H...4......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H...4......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, // .#...`...H...4..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .4...........H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .4.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...4..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x34, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H...4......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H...4......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, // .#.......H...4..
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .4...........H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .4.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...4..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x34, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H...4......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H...4......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, // .#...`...H...4..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .4...........H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .4.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...4..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x34, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H...4......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H...4......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, // .#.......H...4..
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .4...........H..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .4.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...4..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H...4......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x02, 0x00, // .#... ...H...4..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, // .....#...0...G..
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // .4.......G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .".......G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb3, 0x15, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xe1, 0x0d, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc3, 0x15, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, // .!..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..... ... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x09, 0x00, 0x7f, 0x07, 0x00, // .........!......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, // ................
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .e..............
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // .....j... ......
+ 0x00, 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, // .N...e...j...+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // ....."..........
+ 0x00, 0x1b, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, // ........."......
+ 0x00, 0x34, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .4...........e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...N...e...e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1b, 0x05, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb1, 0x04, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xb1, 0x04, 0x00, // .....4...;......
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .B..............
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // . .......+......
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // ./.......+......
+ 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x14, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x17, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .........+......
+ 0x00, 0x1a, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // ......... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xc2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xd2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xc3, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
+ 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, // .Sa..;........G.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, // .....;........U.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6f, 0x38, 0x00, // .....;.......o8.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x70, 0x38, 0x00, // .....;.......p8.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x49, 0x38, 0x00, // .....;.......I8.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbe, 0x2c, 0x00, // .....9........,.
+ 0x00, 0x44, 0x12, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x6f, 0x38, 0x00, // .D....G...U..o8.
+ 0x00, 0x70, 0x38, 0x00, 0x00, 0x49, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, // .p8..I8......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xaa, 0x43, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......C...G..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x39, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....y9...U..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xda, 0x2c, 0x00, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......,..o8..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdb, 0x2c, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......,..p8..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xed, 0x2c, 0x00, 0x00, 0x49, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......,..I8..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....@,......>..
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xaa, 0x43, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc2, 0x11, 0x00, // ......C..>......
+ 0x00, 0x79, 0x39, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb3, 0x15, 0x00, 0x00, 0xda, 0x2c, 0x00, // .y9..>........,.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0xdb, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, // .>........,..>..
+ 0x00, 0xd2, 0x11, 0x00, 0x00, 0xed, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc3, 0x15, 0x00, // ......,..>......
+ 0x00, 0x40, 0x2c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .@,......8...6..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, // .....5..........
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, // .7..............
+ 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, // .....=.......dW.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, // .....=........N.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, // .....=.......I9.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, // .....=........9.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, // .....P........*.
+ 0x00, 0x64, 0x57, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, // .dW...N..I9...9.
+ 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // ......*..8...6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x07, 0x00, // .....D..........
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x68, 0x54, 0x00, 0x00, 0x37, 0x00, 0x03, // .7.......hT..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa2, 0x4c, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // ......L..7......
+ 0x00, 0x52, 0x34, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x53, 0x34, 0x00, // .R4..7.......S4.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa5, 0x42, 0x00, 0x00, 0x37, 0x00, 0x03, // .7........B..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2f, 0x47, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x56, 0x1f, 0x00, // ...../G......V..
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x13, 0x58, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........X.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x13, 0x58, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>....X......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x13, 0x58, 0x00, // .........5....X.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x3a, 0x22, 0x00, 0x00, 0x42, 0x13, 0x00, // .A.......:"..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0xed, 0x19, 0x00, 0x00, 0x3a, 0x22, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x68, 0x54, 0x00, // .....:"..>...hT.
+ 0x00, 0xed, 0x19, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xe0, 0x3e, 0x00, // .....A........>.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x11, 0x1d, 0x00, 0x00, 0xe0, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x03, // ..........>..>..
+ 0x00, 0xa2, 0x4c, 0x00, 0x00, 0x11, 0x1d, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, // ..L......A......
+ 0x00, 0xe1, 0x3e, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x11, 0x0a, 0x00, // ..>..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x12, 0x1d, 0x00, 0x00, 0xe1, 0x3e, 0x00, // .=............>.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x52, 0x34, 0x00, 0x00, 0x12, 0x1d, 0x00, 0x00, 0x41, 0x00, 0x06, // .>...R4......A..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0xe2, 0x3e, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // ......>..B.../..
+ 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x1d, 0x00, // .....=..........
+ 0x00, 0xe2, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x53, 0x34, 0x00, 0x00, 0x13, 0x1d, 0x00, // ..>..>...S4.....
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xe3, 0x3e, 0x00, 0x00, 0x42, 0x13, 0x00, // .A........>..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x17, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0x14, 0x1d, 0x00, 0x00, 0xe3, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa5, 0x42, 0x00, // ......>..>....B.
+ 0x00, 0x14, 0x1d, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xe4, 0x3e, 0x00, // .....A........>.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x1a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x05, 0x2b, 0x00, 0x00, 0xe4, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......+...>..>..
+ 0x00, 0x2f, 0x47, 0x00, 0x00, 0x05, 0x2b, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, // ./G...+......8..
+ 0x00, 0x00, // ..
+};
+static const uint8_t fs_clear5_dx9[234] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x04, // clear_color.....
- 0x00, 0xd0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x25, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, // .........%.CTAB.
- 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, // ...[............
- 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, // .......T...0....
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, // .......D.......b
- 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // gfx_clear_color.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x01, // 0.10011.16384...
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, // ................
- 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, // ................
- 0xff, 0x00, 0x00, 0x00, // ....
+ 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, 0x43, 0x54, 0x41, // ...........".CTA
+ 0x42, 0x1c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, // B....[..........
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .........T...0..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
+ 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, // 0.1.............
+ 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
+ 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, // ................
+ 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
};
-static const uint8_t fs_clear5_dx11[559] =
+static const uint8_t fs_clear5_dx11[561] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x08, // clear_color.....
- 0x00, 0x08, 0x02, 0x44, 0x58, 0x42, 0x43, 0x60, 0x35, 0x1a, 0x9f, 0xa4, 0xdc, 0x6a, 0x17, 0x97, // ...DXBC`5....j..
- 0x20, 0xbd, 0x81, 0xee, 0x84, 0xd9, 0xac, 0x01, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x03, // ...............
- 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x49, // ...,...`.......I
- 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, // .......SV_POSITI
- 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0xa4, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, // ON.OSGN.........
- 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x01, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x05, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, // ...SV_TARGET...S
- 0x48, 0x44, 0x52, 0xf4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x59, // HDR....@...=...Y
- 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x65, // ...F. .........e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, // .... ......e....
- 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, // ......e.... ...
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, // ...e.... ......e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, // .... ......e....
- 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, // ......6.... ...
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, // ...F. .........6
- 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, // .... ......F. ..
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x02, // .......6.... ...
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, // ...F. .........6
- 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, // .... ......F. ..
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x04, // .......6.... ...
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x36, // ...F. .........6
- 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, // .... ......F. ..
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, // .......>.......
+ 0x00, 0x08, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x60, 0x35, 0x1a, 0x9f, 0xa4, 0xdc, 0x6a, // .....DXBC`5....j
+ 0x17, 0x97, 0x20, 0xbd, 0x81, 0xee, 0x84, 0xd9, 0xac, 0x01, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, // .. .............
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, // .....,...`......
+ 0x00, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .ISGN,..........
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // . ..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, // .........SV_POSI
+ 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0xa4, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, // TION.OSGN.......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, // ................
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, // ................
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
+ 0xab, 0x53, 0x48, 0x44, 0x52, 0xf4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, // .SHDR....@...=..
+ 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, // .Y...F. ........
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.... ......e..
+ 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .. ......e.... .
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, // .....e.... .....
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.... ......e..
+ 0x03, 0xf2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, // .. ......6.... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....F. ........
+ 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .6.... ......F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, // .........6.... .
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .....F. ........
+ 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .6.... ......F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, // .........6.... .
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .....F. ........
+ 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .6.... ......F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, // .........>......
+ 0x00, // .
};
-static const uint8_t fs_clear5_mtl[891] =
+static const uint8_t fs_clear5_mtl[914] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH.......l...us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
+ 0x00, 0x6c, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, // .l...using names
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // pace metal;.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // Input {.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, // gl_FragData_0 [
+ 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, // [color(0)]];. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // loat4 gl_FragDat
+ 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, // a_1 [[color(1)]]
+ 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. float4 gl_Fr
+ 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // agData_2 [[color
+ 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // (2)]];. float4
+ 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, // gl_FragData_3 [[
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // color(3)]];. fl
+ 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // oat4 gl_FragData
+ 0x5f, 0x34, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x34, 0x29, 0x5d, 0x5d, 0x3b, // _4 [[color(4)]];
0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . float4 gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_0 [[color(
- 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // 0)]];. float4 g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, // l_FragData_1 [[c
- 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // olor(1)]];. flo
- 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // at4 gl_FragData_
- 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, // 2 [[color(2)]];.
- 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // float4 gl_Frag
- 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, // Data_3 [[color(3
- 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, // )]];. float4 gl
- 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x20, 0x5b, 0x5b, 0x63, 0x6f, // _FragData_4 [[co
- 0x6c, 0x6f, 0x72, 0x28, 0x34, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // lor(4)]];. floa
- 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, // t4 gl_FragData_5
- 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x35, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, // [[color(5)]];.}
- 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // ;.struct xlatMtl
- 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, // ShaderUniform {.
- 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, // float4 bgfx_cl
- 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, // ear_color[8];.};
- 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // .fragment xlatMt
- 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, // lShaderOutput xl
- 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, // atMtlMain (xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, // tlShaderInput _m
- 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, // tl_i [[stage_in]
- 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // ], constant xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, // MtlShaderUniform
- 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, // & _mtl_u [[buffe
- 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, // r(0)]]).{. xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, // MtlShaderOutput
- 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // _mtl_o;. _mtl_o
- 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x3d, // .gl_FragData_0 =
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_5 [[color(
+ 0x35, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, // 5)]];.};.struct
+ 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, // xlatMtlShaderUni
+ 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // form {. float4
+ 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // bgfx_clear_color
+ 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, // [8];.};.fragment
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, // xlatMtlShaderOu
+ 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, // tput xlatMtlMain
+ 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, // (xlatMtlShaderI
+ 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, // nput _mtl_i [[st
+ 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, // age_in]], consta
+ 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // nt xlatMtlShader
+ 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, // Uniform& _mtl_u
+ 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, // [[buffer(0)]]).{
+ 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // . xlatMtlShader
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, // Output _mtl_o;.
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // _mtl_o.gl_FragD
+ 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, // ata_0 = _mtl_u.b
+ 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, // gfx_clear_color[
+ 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, // 0];. _mtl_o.gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, // FragData_1 = _mt
+ 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, // l_u.bgfx_clear_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // olor[1];. _mtl_
+ 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, // o.gl_FragData_2
+ 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, // = _mtl_u.bgfx_cl
+ 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, // ear_color[2];.
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, // _mtl_o.gl_FragDa
+ 0x74, 0x61, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, // ta_3 = _mtl_u.bg
+ 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x33, // fx_clear_color[3
+ 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, // ];. _mtl_o.gl_F
+ 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ragData_4 = _mtl
+ 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, // _u.bgfx_clear_co
+ 0x6c, 0x6f, 0x72, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // lor[4];. _mtl_o
+ 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, 0x20, 0x3d, // .gl_FragData_5 =
0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, // _mtl_u.bgfx_cle
- 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // ar_color[0];. _
- 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // mtl_o.gl_FragDat
- 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, // a_1 = _mtl_u.bgf
- 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, 0x5d, // x_clear_color[1]
- 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. _mtl_o.gl_Fr
- 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // agData_2 = _mtl_
- 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // u.bgfx_clear_col
- 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // or[2];. _mtl_o.
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x3d, 0x20, // gl_FragData_3 =
- 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, // _mtl_u.bgfx_clea
- 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, // r_color[3];. _m
- 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // tl_o.gl_FragData
- 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, // _4 = _mtl_u.bgfx
- 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x34, 0x5d, 0x3b, // _clear_color[4];
- 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . _mtl_o.gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // gData_5 = _mtl_u
- 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
- 0x72, 0x5b, 0x35, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, // r[5];. return _
- 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mtl_o;.}...
+ 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x35, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, // ar_color[5];. r
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, // eturn _mtl_o;.}.
+ 0x0a, 0x00, // ..
};
extern const uint8_t* fs_clear5_pssl;
extern const uint32_t fs_clear5_pssl_size;
diff --git a/3rdparty/bgfx/src/fs_clear6.bin.h b/3rdparty/bgfx/src/fs_clear6.bin.h
index dd845365996..50f560bad57 100644
--- a/3rdparty/bgfx/src/fs_clear6.bin.h
+++ b/3rdparty/bgfx/src/fs_clear6.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_clear6_glsl[370] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
0x00, 0x4c, 0x01, 0x00, 0x00, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, // .L...uniform vec
0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // 4 bgfx_clear_col
@@ -25,131 +25,367 @@ static const uint8_t fs_clear6_glsl[370] =
0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x36, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, // ear_color[6];.}.
0x0a, 0x00, // ..
};
-static const uint8_t fs_clear6_dx9[244] =
+static const uint8_t fs_clear6_spv[3718] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x07, 0x00, 0x00, 0x07, // clear_color.....
+ 0x00, 0x60, 0x0e, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, // .`.....#........
+ 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, // .Ta.............
+ 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, // .........GLSL.st
+ 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // d.450...........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xc2, 0x11, 0x00, // .main...........
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0xd2, 0x11, 0x00, 0x00, 0xc3, 0x15, 0x00, // ................
+ 0x00, 0xf1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, // ................
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, // .....main.......
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, // .5...vec4_splat(
+ 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, // f1;.........._x.
+ 0x00, 0x05, 0x00, 0x0b, 0x00, 0x97, 0x0f, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, // .........@main(v
+ 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, // f4;vf4;vf4;vf4;v
+ 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, // f4;vf4;vf4;.....
+ 0x00, 0x15, 0x48, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..H..gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x3a, 0x23, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _0_......:#..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_1_.....
+ 0x00, 0x1a, 0x3d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..=..gl_FragData
+ 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x1b, 0x3d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _2_.......=..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_3_.....
+ 0x00, 0x1c, 0x3d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..=..gl_FragData
+ 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x6d, 0x4b, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _4_......mK..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_5_.....
+ 0x00, 0xf7, 0x4f, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..O..gl_FragData
+ 0x5f, 0x36, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // _6_..........bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0xa2, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..G..param......
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....$Global....
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, // .........u_viewR
+ 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, // ect.............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, // .u_viewTexel....
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, // .........u_view.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .............u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, // nvView..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_proj.....
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, // .........u_invPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // oj..............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, // .u_viewProj.....
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .........u_invVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, // ewProj..........
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....u_model....
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .........u_model
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // View............
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // .u_modelViewProj
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, // .............u_a
+ 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0xfc, 0x06, 0x00, // lphaRef4........
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // .....bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // color........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xaa, 0x43, 0x00, 0x00, 0x67, 0x6c, 0x5f, // ..........C..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0x79, 0x39, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .y9..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xda, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_.......,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0xdb, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..,..gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xdc, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _3_.......,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_4_.....
+ 0x00, 0xed, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..,..gl_FragData
+ 0x5f, 0x35, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _5_......@,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x36, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, // FragData_6_.....
+ 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..G..param......
+ 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..U..param......
+ 0x00, 0x6f, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .o8..param......
+ 0x00, 0x70, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .p8..param......
+ 0x00, 0x71, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .q8..param......
+ 0x00, 0x49, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .I8..param......
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, // .....param......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _0_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_1_.....
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _2_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_3_.....
+ 0x00, 0xd2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xc3, 0x15, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _4_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_5_.....
+ 0x00, 0xf1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x36, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, // _6_..G..........
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x30, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, // .@...G...0......
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, // .#.......H......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, // .#...`...H......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, // .#.......H......
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, // .#...`...H......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, // .#.......H......
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xfc, 0x06, 0x00, // .#... ...H......
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, // .....#...0...G..
+ 0x00, 0xfc, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // .........G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .".......G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb3, 0x15, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xe1, 0x0d, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc3, 0x15, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf1, 0x0d, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, // .!..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..... ... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0a, 0x00, 0x1b, 0x07, 0x00, // .........!......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
+ 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .....e..........
+ 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, // .+.......j... ..
+ 0x00, 0x1c, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, // .........e...j..
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, // .+......."......
+ 0x00, 0x1c, 0x00, 0x04, 0x00, 0x30, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, // .....0......."..
+ 0x00, 0x1e, 0x00, 0x0f, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e.......e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x30, 0x05, 0x00, 0x00, 0x20, 0x00, 0x04, // .e.......0... ..
+ 0x00, 0x79, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x3b, 0x00, 0x04, // .y...........;..
+ 0x00, 0x79, 0x09, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .y...B..........
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ...../.......+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x17, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1a, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xb3, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xc3, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xf1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, // .............6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // .....Sa..;......
+ 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ..G......;......
+ 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ..U......;......
+ 0x00, 0x6f, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // .o8......;......
+ 0x00, 0x70, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // .p8......;......
+ 0x00, 0x71, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // .q8......;......
+ 0x00, 0x49, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // .I8......;......
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x00, // .........9......
+ 0x00, 0xbe, 0x2c, 0x00, 0x00, 0x97, 0x0f, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x85, 0x55, 0x00, // ..,.......G...U.
+ 0x00, 0x6f, 0x38, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, 0x71, 0x38, 0x00, 0x00, 0x49, 0x38, 0x00, // .o8..p8..q8..I8.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xaa, 0x43, 0x00, // .....=........C.
+ 0x00, 0xc9, 0x47, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x39, 0x00, // ..G..=.......y9.
+ 0x00, 0x85, 0x55, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xda, 0x2c, 0x00, // ..U..=........,.
+ 0x00, 0x6f, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdb, 0x2c, 0x00, // .o8..=........,.
+ 0x00, 0x70, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdc, 0x2c, 0x00, // .p8..=........,.
+ 0x00, 0x71, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xed, 0x2c, 0x00, // .q8..=........,.
+ 0x00, 0x49, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, // .I8..=.......@,.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xaa, 0x43, 0x00, // .....>........C.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x79, 0x39, 0x00, 0x00, 0x3e, 0x00, 0x03, // .>.......y9..>..
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0xda, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe1, 0x0d, 0x00, // ......,..>......
+ 0x00, 0xdb, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd2, 0x11, 0x00, 0x00, 0xdc, 0x2c, 0x00, // ..,..>........,.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc3, 0x15, 0x00, 0x00, 0xed, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, // .>........,..>..
+ 0x00, 0xf1, 0x0d, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, // .....@,......8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, // .6.......5......
+ 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .....7..........
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........=......
+ 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .dW......=......
+ 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // ..N......=......
+ 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .I9......=......
+ 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // ..9......P......
+ 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0x49, 0x39, 0x00, // ..*..dW...N..I9.
+ 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x38, 0x00, 0x01, // ..9.......*..8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x97, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
+ 0x00, 0x1b, 0x07, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x15, 0x48, 0x00, // .....7........H.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x3a, 0x23, 0x00, 0x00, 0x37, 0x00, 0x03, // .7.......:#..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1a, 0x3d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // ......=..7......
+ 0x00, 0x1b, 0x3d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1c, 0x3d, 0x00, // ..=..7........=.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6d, 0x4b, 0x00, 0x00, 0x37, 0x00, 0x03, // .7.......mK..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xf7, 0x4f, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x64, 0x59, 0x00, // ......O......dY.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xa2, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........G.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa2, 0x47, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>....G......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0xa2, 0x47, 0x00, // .........5....G.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x48, 0x5c, 0x00, 0x00, 0x42, 0x13, 0x00, // .A.......H...B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0xfb, 0x53, 0x00, 0x00, 0x48, 0x5c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x15, 0x48, 0x00, // ..S..H...>....H.
+ 0x00, 0xfb, 0x53, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xa8, 0x47, 0x00, // ..S..A........G.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x57, 0x00, 0x00, 0xa8, 0x47, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......W...G..>..
+ 0x00, 0x3a, 0x23, 0x00, 0x00, 0x1f, 0x57, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, // .:#...W..A......
+ 0x00, 0xa9, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x11, 0x0a, 0x00, // ..G..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x57, 0x00, 0x00, 0xa9, 0x47, 0x00, // .=....... W...G.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1a, 0x3d, 0x00, 0x00, 0x20, 0x57, 0x00, 0x00, 0x41, 0x00, 0x06, // .>....=.. W..A..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0xaa, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // ......G..B.../..
+ 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x57, 0x00, // .....=.......!W.
+ 0x00, 0xaa, 0x47, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1b, 0x3d, 0x00, 0x00, 0x21, 0x57, 0x00, // ..G..>....=..!W.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xab, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, // .A........G..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x17, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0x22, 0x57, 0x00, 0x00, 0xab, 0x47, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1c, 0x3d, 0x00, // ."W...G..>....=.
+ 0x00, 0x22, 0x57, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xac, 0x47, 0x00, // ."W..A........G.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x1a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x23, 0x57, 0x00, 0x00, 0xac, 0x47, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....#W...G..>..
+ 0x00, 0x6d, 0x4b, 0x00, 0x00, 0x23, 0x57, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, // .mK..#W..A......
+ 0x00, 0xad, 0x47, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x1d, 0x0a, 0x00, // ..G..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x94, 0x1a, 0x00, 0x00, 0xad, 0x47, 0x00, // .=............G.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf7, 0x4f, 0x00, 0x00, 0x94, 0x1a, 0x00, 0x00, 0xfd, 0x00, 0x01, // .>....O.........
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .8....
+};
+static const uint8_t fs_clear6_dx9[234] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x04, // clear_color.....
- 0x00, 0xd0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x25, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, // .........%.CTAB.
- 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, // ...[............
- 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, // .......T...0....
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, // .......D.......b
- 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // gfx_clear_color.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x01, // 0.10011.16384...
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, // ................
- 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, // ................
- 0xff, 0x00, 0x00, 0x00, // ....
+ 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, 0x43, 0x54, 0x41, // ...........".CTA
+ 0x42, 0x1c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, // B....[..........
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .........T...0..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
+ 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, // 0.1.............
+ 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
+ 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, // ................
+ 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
};
-static const uint8_t fs_clear6_dx11[619] =
+static const uint8_t fs_clear6_dx11[621] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x08, // clear_color.....
- 0x00, 0x44, 0x02, 0x44, 0x58, 0x42, 0x43, 0x68, 0xe2, 0x88, 0x87, 0x2b, 0x8c, 0x92, 0xbc, 0x98, // .D.DXBCh...+....
- 0x11, 0xb6, 0x94, 0x5c, 0x76, 0x9a, 0x47, 0x01, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x03, // ....v.G....D....
- 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x49, // ...,...`...$...I
- 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, // .......SV_POSITI
- 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0xbc, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, // ON.OSGN.........
- 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x01, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x05, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, // ...........SV_TA
- 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x18, 0x01, 0x00, 0x00, 0x40, // RGET...SHDR....@
- 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, // ...F...Y...F. ..
- 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, // ...e.... ......e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, // .... ......e....
- 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x04, // ......e.... ...
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x65, // ...e.... ......e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // .... ......6....
- 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F. ......
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // . .........6....
- 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // ......F. ......
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // . .........6....
- 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, // ......F. ......
- 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, // ...6.... ......F
- 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // . .........6....
- 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, // ......F. ......
- 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, // ...>.......
+ 0x00, 0x44, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x68, 0xe2, 0x88, 0x87, 0x2b, 0x8c, 0x92, // .D...DXBCh...+..
+ 0xbc, 0x98, 0x11, 0xb6, 0x94, 0x5c, 0x76, 0x9a, 0x47, 0x01, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, // ......v.G....D..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, // .....,...`...$..
+ 0x00, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .ISGN,..........
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // . ..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, // .........SV_POSI
+ 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0xbc, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // TION.OSGN.......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, // ................
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, // ................
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, // .............SV_
+ 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x18, 0x01, 0x00, // TARGET...SHDR...
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, // .@...F...Y...F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .........e.... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, // .....e.... .....
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.... ......e..
+ 0x03, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .. ......e.... .
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, // .....e.... .....
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .e.... ......6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .F. .........6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .F. .........6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, // .....6.... .....
+ 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .F. .........6..
+ 0x06, 0xf2, 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, // .. ......F. ....
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, // .....>.......
};
-static const uint8_t fs_clear6_mtl[981] =
+static const uint8_t fs_clear6_mtl[1004] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
+ 0x00, 0xc6, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, // .....using names
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // pace metal;.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // Input {.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, // gl_FragData_0 [
+ 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, // [color(0)]];. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // loat4 gl_FragDat
+ 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, // a_1 [[color(1)]]
+ 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. float4 gl_Fr
+ 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // agData_2 [[color
+ 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // (2)]];. float4
+ 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, // gl_FragData_3 [[
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // color(3)]];. fl
+ 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // oat4 gl_FragData
+ 0x5f, 0x34, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x34, 0x29, 0x5d, 0x5d, 0x3b, // _4 [[color(4)]];
0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . float4 gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_0 [[color(
- 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // 0)]];. float4 g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, // l_FragData_1 [[c
- 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // olor(1)]];. flo
- 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // at4 gl_FragData_
- 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, // 2 [[color(2)]];.
- 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // float4 gl_Frag
- 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, // Data_3 [[color(3
- 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, // )]];. float4 gl
- 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x20, 0x5b, 0x5b, 0x63, 0x6f, // _FragData_4 [[co
- 0x6c, 0x6f, 0x72, 0x28, 0x34, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // lor(4)]];. floa
- 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, // t4 gl_FragData_5
- 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x35, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, // [[color(5)]];.
- 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // float4 gl_FragD
- 0x61, 0x74, 0x61, 0x5f, 0x36, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x36, 0x29, // ata_6 [[color(6)
- 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, // ]];.};.struct xl
- 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, // atMtlShaderUnifo
- 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, // rm {. float4 bg
- 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, // fx_clear_color[8
- 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, // ];.};.fragment x
- 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, // latMtlShaderOutp
- 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, // ut xlatMtlMain (
- 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, // xlatMtlShaderInp
- 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, // ut _mtl_i [[stag
- 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, // e_in]], constant
- 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, // xlatMtlShaderUn
- 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, // iform& _mtl_u [[
- 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, // buffer(0)]]).{.
- 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, // xlatMtlShaderOu
- 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // tput _mtl_o;. _
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_5 [[color(
+ 0x35, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // 5)]];. float4 g
+ 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x36, 0x20, 0x5b, 0x5b, 0x63, // l_FragData_6 [[c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x36, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, // olor(6)]];.};.st
+ 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ruct xlatMtlShad
+ 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // erUniform {. fl
+ 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // oat4 bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, // color[8];.};.fra
+ 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // gment xlatMtlSha
+ 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // derOutput xlatMt
+ 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // lMain (xlatMtlSh
+ 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // aderInput _mtl_i
+ 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, // [[stage_in]], c
+ 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // onstant xlatMtlS
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, // haderUniform& _m
+ 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, // tl_u [[buffer(0)
+ 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // ]]).{. xlatMtlS
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // haderOutput _mtl
+ 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, // _o;. _mtl_o.gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, // FragData_0 = _mt
+ 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, // l_u.bgfx_clear_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // olor[0];. _mtl_
+ 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, // o.gl_FragData_1
+ 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, // = _mtl_u.bgfx_cl
+ 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, // ear_color[1];.
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, // _mtl_o.gl_FragDa
+ 0x74, 0x61, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, // ta_2 = _mtl_u.bg
+ 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x32, // fx_clear_color[2
+ 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, // ];. _mtl_o.gl_F
+ 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ragData_3 = _mtl
+ 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, // _u.bgfx_clear_co
+ 0x6c, 0x6f, 0x72, 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // lor[3];. _mtl_o
+ 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x20, 0x3d, // .gl_FragData_4 =
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, // _mtl_u.bgfx_cle
+ 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // ar_color[4];. _
0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // mtl_o.gl_FragDat
- 0x61, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, // a_0 = _mtl_u.bgf
- 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, // x_clear_color[0]
+ 0x61, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, // a_5 = _mtl_u.bgf
+ 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x35, 0x5d, // x_clear_color[5]
0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. _mtl_o.gl_Fr
- 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // agData_1 = _mtl_
+ 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x36, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // agData_6 = _mtl_
0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // u.bgfx_clear_col
- 0x6f, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // or[1];. _mtl_o.
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x3d, 0x20, // gl_FragData_2 =
- 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, // _mtl_u.bgfx_clea
- 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, // r_color[2];. _m
- 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // tl_o.gl_FragData
- 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, // _3 = _mtl_u.bgfx
- 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x33, 0x5d, 0x3b, // _clear_color[3];
- 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . _mtl_o.gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // gData_4 = _mtl_u
- 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
- 0x72, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, // r[4];. _mtl_o.g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x5f, // l_FragData_5 = _
- 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, // mtl_u.bgfx_clear
- 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x35, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // _color[5];. _mt
- 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // l_o.gl_FragData_
- 0x36, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, // 6 = _mtl_u.bgfx_
- 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x36, 0x5d, 0x3b, 0x0a, // clear_color[6];.
- 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, // return _mtl_o;
- 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
+ 0x6f, 0x72, 0x5b, 0x36, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, // or[6];. return
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _mtl_o;.}...
};
extern const uint8_t* fs_clear6_pssl;
extern const uint32_t fs_clear6_pssl_size;
diff --git a/3rdparty/bgfx/src/fs_clear7.bin.h b/3rdparty/bgfx/src/fs_clear7.bin.h
index caf3798fea4..c43bccd472b 100644
--- a/3rdparty/bgfx/src/fs_clear7.bin.h
+++ b/3rdparty/bgfx/src/fs_clear7.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_clear7_glsl[410] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
0x00, 0x74, 0x01, 0x00, 0x00, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, // .t...uniform vec
0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // 4 bgfx_clear_col
@@ -27,140 +27,393 @@ static const uint8_t fs_clear7_glsl[410] =
0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // bgfx_clear_colo
0x72, 0x5b, 0x37, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r[7];.}...
};
-static const uint8_t fs_clear7_dx9[244] =
+static const uint8_t fs_clear7_spv[3978] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x08, // clear_color.....
+ 0x00, 0x64, 0x0f, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, // .d.....#........
+ 0x00, 0x2d, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, // .-b.............
+ 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, // .........GLSL.st
+ 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // d.450...........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xc2, 0x11, 0x00, // .main...........
+ 0x00, 0xb3, 0x15, 0x00, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0xd2, 0x11, 0x00, 0x00, 0xc3, 0x15, 0x00, // ................
+ 0x00, 0xf1, 0x0d, 0x00, 0x00, 0xe2, 0x11, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, // ................
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, // ................
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, // .....5...vec4_sp
+ 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, // lat(f1;.........
+ 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x00, 0xd9, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, // ._x..........@ma
+ 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, // in(vf4;vf4;vf4;v
+ 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, // f4;vf4;vf4;vf4;v
+ 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xfb, 0x54, 0x00, 0x00, 0x67, 0x6c, 0x5f, // f4;.......T..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0x51, 0x44, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .QD..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe2, 0x45, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_.......E..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0xe3, 0x45, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..E..gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe4, 0x45, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _3_.......E..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_4_.....
+ 0x00, 0xe5, 0x45, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..E..gl_FragData
+ 0x5f, 0x35, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x54, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _5_......5T..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x36, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_6_.....
+ 0x00, 0xbf, 0x58, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..X..gl_FragData
+ 0x5f, 0x37, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // _7_..........bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0x6a, 0x50, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .jP..param......
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....$Global....
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, // .........u_viewR
+ 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, // ect.............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, // .u_viewTexel....
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, // .........u_view.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .............u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, // nvView..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_proj.....
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, // .........u_invPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, // oj..............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, // .u_viewProj.....
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .........u_invVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, // ewProj..........
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....u_model....
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .........u_model
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, // View............
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // .u_modelViewProj
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, // .............u_a
+ 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0xc4, 0x0b, 0x00, // lphaRef4........
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // .....bgfx_clear_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // color........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xaa, 0x43, 0x00, 0x00, 0x67, 0x6c, 0x5f, // ..........C..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0x79, 0x39, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .y9..gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xda, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_.......,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0xdb, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..,..gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xdc, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _3_.......,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_4_.....
+ 0x00, 0xdd, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..,..gl_FragData
+ 0x5f, 0x35, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xed, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _5_.......,..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x36, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_6_.....
+ 0x00, 0x40, 0x2c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .@,..gl_FragData
+ 0x5f, 0x37, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, 0x72, // _7_.......G..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, // am........U..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am.......o8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x70, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am.......p8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x71, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am.......q8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x72, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am.......r8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x49, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am.......I8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // am...........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0xc2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x31, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xb3, 0x15, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _1_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_2_.....
+ 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x33, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _3_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_4_.....
+ 0x00, 0xc3, 0x15, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x35, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xf1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // _5_..........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x36, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_6_.....
+ 0x00, 0xe2, 0x11, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x37, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // _7_..G..........
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x45, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, // .@...G...E......
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, // .#.......H......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .....#.......H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, // .#...`...H......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, // .#.......H......
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, // .#...`...H......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, // .#.......H......
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc4, 0x0b, 0x00, // .#... ...H......
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, // .....#...0...G..
+ 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // .........G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .".......G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb3, 0x15, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xe1, 0x0d, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xc3, 0x15, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf1, 0x0d, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xe2, 0x11, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, // .!..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..... ... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x00, 0x49, 0x09, 0x00, // .........!...I..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .........e......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, // .....+.......j..
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, // . ...........e..
+ 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x22, 0x0a, 0x00, // .j...+......."..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x45, 0x05, 0x00, 0x00, 0x1d, 0x00, 0x00, // .........E......
+ 0x00, 0x22, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0xc4, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, // ."..............
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .....e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, // .e...e...e......
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x45, 0x05, 0x00, // .e...e.......E..
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x7e, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc4, 0x0b, 0x00, // . ...~..........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7e, 0x02, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, // .;...~...B......
+ 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ......... ......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, // .+......./......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // . ..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, // .+..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, // .+..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, // .+..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x17, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, // .+..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1a, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, // .+..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, // .+..............
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, // .+....... ......
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // . ..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xc2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xb3, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xc3, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xf1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xe2, 0x11, 0x00, 0x00, 0x03, 0x00, 0x00, // .;..............
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
+ 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, // .........Sa..;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......G......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......U......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....o8......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....p8......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x71, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....q8......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x72, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....r8......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x49, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....I8......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x0c, // .............9..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xbe, 0x2c, 0x00, 0x00, 0xd9, 0x0d, 0x00, 0x00, 0xc9, 0x47, 0x00, // ......,.......G.
+ 0x00, 0x85, 0x55, 0x00, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, 0x71, 0x38, 0x00, // ..U..o8..p8..q8.
+ 0x00, 0x72, 0x38, 0x00, 0x00, 0x49, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, // .r8..I8......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xaa, 0x43, 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......C...G..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x39, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....y9...U..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xda, 0x2c, 0x00, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......,..o8..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdb, 0x2c, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......,..p8..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdc, 0x2c, 0x00, 0x00, 0x71, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......,..q8..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdd, 0x2c, 0x00, 0x00, 0x72, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......,..r8..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xed, 0x2c, 0x00, 0x00, 0x49, 0x38, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......,..I8..=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....@,......>..
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xaa, 0x43, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc2, 0x11, 0x00, // ......C..>......
+ 0x00, 0x79, 0x39, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb3, 0x15, 0x00, 0x00, 0xda, 0x2c, 0x00, // .y9..>........,.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe1, 0x0d, 0x00, 0x00, 0xdb, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, // .>........,..>..
+ 0x00, 0xd2, 0x11, 0x00, 0x00, 0xdc, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc3, 0x15, 0x00, // ......,..>......
+ 0x00, 0xdd, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf1, 0x0d, 0x00, 0x00, 0xed, 0x2c, 0x00, // ..,..>........,.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe2, 0x11, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0xfd, 0x00, 0x01, // .>.......@,.....
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, // .8...6.......5..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, // .........7......
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .............=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....dW......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x4e, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......N......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x49, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....I9......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, // ......9......P..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x2a, 0x00, 0x00, 0x64, 0x57, 0x00, 0x00, 0xa9, 0x4e, 0x00, // ......*..dW...N.
+ 0x00, 0x49, 0x39, 0x00, 0x00, 0x5c, 0x39, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xb0, 0x2a, 0x00, // .I9...9.......*.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xd9, 0x0d, 0x00, // .8...6..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .....I...7......
+ 0x00, 0xfb, 0x54, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x51, 0x44, 0x00, // ..T..7.......QD.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe2, 0x45, 0x00, 0x00, 0x37, 0x00, 0x03, // .7........E..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe3, 0x45, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // ......E..7......
+ 0x00, 0xe4, 0x45, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe5, 0x45, 0x00, // ..E..7........E.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x35, 0x54, 0x00, 0x00, 0x37, 0x00, 0x03, // .7.......5T..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xbf, 0x58, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2c, 0x62, 0x00, // ......X......,b.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6a, 0x50, 0x00, 0x00, 0x07, 0x00, 0x00, // .;.......jP.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x6a, 0x50, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>...jP......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x6a, 0x50, 0x00, // .........5...jP.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x91, 0x1a, 0x00, 0x00, 0x42, 0x13, 0x00, // .A...........B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0xc3, 0x5c, 0x00, 0x00, 0x91, 0x1a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xfb, 0x54, 0x00, // .........>....T.
+ 0x00, 0xc3, 0x5c, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x37, 0x37, 0x00, // .....A.......77.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe7, 0x5f, 0x00, 0x00, 0x37, 0x37, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......_..77..>..
+ 0x00, 0x51, 0x44, 0x00, 0x00, 0xe7, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, // .QD..._..A......
+ 0x00, 0x38, 0x37, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x11, 0x0a, 0x00, // .87..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe8, 0x5f, 0x00, 0x00, 0x38, 0x37, 0x00, // .=........_..87.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe2, 0x45, 0x00, 0x00, 0xe8, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x06, // .>....E..._..A..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x39, 0x37, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....97..B.../..
+ 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe9, 0x5f, 0x00, // .....=........_.
+ 0x00, 0x39, 0x37, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe3, 0x45, 0x00, 0x00, 0xe9, 0x5f, 0x00, // .97..>....E..._.
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x3a, 0x37, 0x00, 0x00, 0x42, 0x13, 0x00, // .A.......:7..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x17, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ./.......=......
+ 0x00, 0xea, 0x5f, 0x00, 0x00, 0x3a, 0x37, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe4, 0x45, 0x00, // .._..:7..>....E.
+ 0x00, 0xea, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x3b, 0x37, 0x00, // .._..A.......;7.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x1a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xeb, 0x5f, 0x00, 0x00, 0x3b, 0x37, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......_..;7..>..
+ 0x00, 0xe5, 0x45, 0x00, 0x00, 0xeb, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x9b, 0x02, 0x00, // ..E..._..A......
+ 0x00, 0x3c, 0x37, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x1d, 0x0a, 0x00, // .<7..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xec, 0x5f, 0x00, 0x00, 0x3c, 0x37, 0x00, // .=........_..<7.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x35, 0x54, 0x00, 0x00, 0xec, 0x5f, 0x00, 0x00, 0x41, 0x00, 0x06, // .>...5T..._..A..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x3d, 0x37, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....=7..B.../..
+ 0x00, 0x20, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x5c, 0x23, 0x00, // . ...=........#.
+ 0x00, 0x3d, 0x37, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbf, 0x58, 0x00, 0x00, 0x5c, 0x23, 0x00, // .=7..>....X...#.
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .....8....
+};
+static const uint8_t fs_clear7_dx9[234] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x04, // clear_color.....
- 0x00, 0xd0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x25, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, // .........%.CTAB.
- 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, // ...[............
- 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, // .......T...0....
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, // .......D.......b
- 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // gfx_clear_color.
- 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
- 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
- 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
- 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x01, // 0.10011.16384...
- 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
- 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, // ................
- 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, // ................
- 0xff, 0x00, 0x00, 0x00, // ....
+ 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x22, 0x00, 0x43, 0x54, 0x41, // ...........".CTA
+ 0x42, 0x1c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, // B....[..........
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, // .........T...0..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........D......
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
+ 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // r...............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
+ 0x30, 0x2e, 0x31, 0x00, 0xab, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, // 0.1.............
+ 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x08, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
+ 0x02, 0x02, 0x08, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x03, 0x08, 0x0f, // ................
+ 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
};
-static const uint8_t fs_clear7_dx11[679] =
+static const uint8_t fs_clear7_dx11[681] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x08, 0x00, 0x00, 0x08, // clear_color.....
- 0x00, 0x80, 0x02, 0x44, 0x58, 0x42, 0x43, 0xe7, 0x1e, 0xec, 0x06, 0x0c, 0xd8, 0x43, 0x65, 0x9a, // ...DXBC......Ce.
- 0x6f, 0x6f, 0xc7, 0x6f, 0x21, 0xde, 0xa4, 0x01, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, // oo.o!...........
- 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x49, // ...,...`...<...I
- 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, // SGN,...........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, // .......SV_POSITI
- 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0xd4, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, // ON.OSGN.........
- 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x01, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x05, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x07, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0f, // ................
- 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, // ...SV_TARGET...S
- 0x48, 0x44, 0x52, 0x3c, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x59, // HDR<...@...O...Y
- 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x65, // ...F. .........e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, // .... ......e....
- 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, // ......e.... ...
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, // ...e.... ......e
- 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, // .... ......e....
- 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x06, // ......e.... ...
- 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x36, // ...e.... ......6
- 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, // .... ......F. ..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x01, // .......6.... ...
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, // ...F. .........6
- 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, // .... ......F. ..
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x03, // .......6.... ...
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, // ...F. .........6
- 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, // .... ......F. ..
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x05, // .......6.... ...
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x36, // ...F. .........6
- 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, // .... ......F. ..
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x07, // .......6.... ...
- 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, // ...F. .........>
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, // .......
+ 0x00, 0x80, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0xe7, 0x1e, 0xec, 0x06, 0x0c, 0xd8, 0x43, // .....DXBC......C
+ 0x65, 0x9a, 0x6f, 0x6f, 0xc7, 0x6f, 0x21, 0xde, 0xa4, 0x01, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, // e.oo.o!.........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, // .....,...`...<..
+ 0x00, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .ISGN,..........
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // . ..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, // .........SV_POSI
+ 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0xd4, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // TION.OSGN.......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, // ................
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, // ................
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, // ................
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // ................
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, // .....SV_TARGET..
+ 0xab, 0x53, 0x48, 0x44, 0x52, 0x3c, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, // .SHDR<...@...O..
+ 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .Y...F. ........
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.... ......e..
+ 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .. ......e.... .
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, // .....e.... .....
+ 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.... ......e..
+ 0x03, 0xf2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, // .. ......e.... .
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x07, 0x00, 0x00, // .....e.... .....
+ 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .6.... ......F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, // .........6.... .
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .....F. ........
+ 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .6.... ......F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, // .........6.... .
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .....F. ........
+ 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .6.... ......F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, // .........6.... .
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // .....F. ........
+ 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .6.... ......F.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, 0x20, 0x10, // .........6.... .
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .....F. ........
+ 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, // .>.......
};
-static const uint8_t fs_clear7_mtl[1071] =
+static const uint8_t fs_clear7_mtl[1094] =
{
- 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x75, 0x73, // FSH....... ...us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
- 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
+ 0x46, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x62, 0x67, 0x66, 0x78, 0x5f, // FSH........bgfx_
+ 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x02, 0x08, 0x00, 0x00, 0x08, // clear_color.....
+ 0x00, 0x20, 0x04, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, // . ...using names
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // pace metal;.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // Input {.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, // gl_FragData_0 [
+ 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, // [color(0)]];. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // loat4 gl_FragDat
+ 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, // a_1 [[color(1)]]
+ 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. float4 gl_Fr
+ 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // agData_2 [[color
+ 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // (2)]];. float4
+ 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, // gl_FragData_3 [[
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // color(3)]];. fl
+ 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // oat4 gl_FragData
+ 0x5f, 0x34, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x34, 0x29, 0x5d, 0x5d, 0x3b, // _4 [[color(4)]];
0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . float4 gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_0 [[color(
- 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // 0)]];. float4 g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x5b, 0x5b, 0x63, // l_FragData_1 [[c
- 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // olor(1)]];. flo
+ 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, // gData_5 [[color(
+ 0x35, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // 5)]];. float4 g
+ 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x36, 0x20, 0x5b, 0x5b, 0x63, // l_FragData_6 [[c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x36, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // olor(6)]];. flo
0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // at4 gl_FragData_
- 0x32, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, // 2 [[color(2)]];.
- 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // float4 gl_Frag
- 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x33, // Data_3 [[color(3
- 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, // )]];. float4 gl
- 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x20, 0x5b, 0x5b, 0x63, 0x6f, // _FragData_4 [[co
- 0x6c, 0x6f, 0x72, 0x28, 0x34, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // lor(4)]];. floa
- 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, // t4 gl_FragData_5
- 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x35, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, // [[color(5)]];.
- 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, // float4 gl_FragD
- 0x61, 0x74, 0x61, 0x5f, 0x36, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x36, 0x29, // ata_6 [[color(6)
- 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, // ]];. float4 gl_
- 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x37, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, // FragData_7 [[col
- 0x6f, 0x72, 0x28, 0x37, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // or(7)]];.};.stru
- 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
- 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // Uniform {. floa
- 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, // t4 bgfx_clear_co
- 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, // lor[8];.};.fragm
- 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // ent xlatMtlShade
- 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, // rOutput xlatMtlM
- 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ain (xlatMtlShad
- 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, // erInput _mtl_i [
- 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, // [stage_in]], con
- 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // stant xlatMtlSha
- 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // derUniform& _mtl
- 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, // _u [[buffer(0)]]
- 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // ).{. xlatMtlSha
- 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // derOutput _mtl_o
+ 0x37, 0x20, 0x5b, 0x5b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x37, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, // 7 [[color(7)]];.
+ 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // };.struct xlatMt
+ 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, // lShaderUniform {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, // . float4 bgfx_c
+ 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0a, 0x7d, // lear_color[8];.}
+ 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // ;.fragment xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, // tlShaderOutput x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, // latMtlMain (xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, // MtlShaderInput _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, // mtl_i [[stage_in
+ 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, // ]], constant xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, // tMtlShaderUnifor
+ 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, // m& _mtl_u [[buff
+ 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, // er(0)]]).{. xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // _mtl_o;. _mtl_
+ 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, // o.gl_FragData_0
+ 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, // = _mtl_u.bgfx_cl
+ 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, // ear_color[0];.
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, // _mtl_o.gl_FragDa
+ 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, // ta_1 = _mtl_u.bg
+ 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, // fx_clear_color[1
+ 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, // ];. _mtl_o.gl_F
+ 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ragData_2 = _mtl
+ 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, // _u.bgfx_clear_co
+ 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // lor[2];. _mtl_o
+ 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x3d, // .gl_FragData_3 =
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, // _mtl_u.bgfx_cle
+ 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // ar_color[3];. _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // mtl_o.gl_FragDat
+ 0x61, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, // a_4 = _mtl_u.bgf
+ 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x34, 0x5d, // x_clear_color[4]
0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. _mtl_o.gl_Fr
- 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // agData_0 = _mtl_
+ 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x35, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // agData_5 = _mtl_
0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, // u.bgfx_clear_col
- 0x6f, 0x72, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // or[0];. _mtl_o.
- 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x31, 0x20, 0x3d, 0x20, // gl_FragData_1 =
+ 0x6f, 0x72, 0x5b, 0x35, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, // or[5];. _mtl_o.
+ 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x36, 0x20, 0x3d, 0x20, // gl_FragData_6 =
0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, // _mtl_u.bgfx_clea
- 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, // r_color[1];. _m
+ 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x36, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, // r_color[6];. _m
0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // tl_o.gl_FragData
- 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, // _2 = _mtl_u.bgfx
- 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x32, 0x5d, 0x3b, // _clear_color[2];
- 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . _mtl_o.gl_Fra
- 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // gData_3 = _mtl_u
- 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // .bgfx_clear_colo
- 0x72, 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, // r[3];. _mtl_o.g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x5f, // l_FragData_4 = _
- 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, // mtl_u.bgfx_clear
- 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // _color[4];. _mt
- 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, // l_o.gl_FragData_
- 0x35, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, // 5 = _mtl_u.bgfx_
- 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x35, 0x5d, 0x3b, 0x0a, // clear_color[5];.
- 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // _mtl_o.gl_Frag
- 0x44, 0x61, 0x74, 0x61, 0x5f, 0x36, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // Data_6 = _mtl_u.
- 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // bgfx_clear_color
- 0x5b, 0x36, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, // [6];. _mtl_o.gl
- 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x5f, 0x6d, // _FragData_7 = _m
- 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, // tl_u.bgfx_clear_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x37, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, // color[7];. retu
- 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // rn _mtl_o;.}...
+ 0x5f, 0x37, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x62, 0x67, 0x66, 0x78, // _7 = _mtl_u.bgfx
+ 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5b, 0x37, 0x5d, 0x3b, // _clear_color[7];
+ 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // . return _mtl_o
+ 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // ;.}...
};
extern const uint8_t* fs_clear7_pssl;
extern const uint32_t fs_clear7_pssl_size;
diff --git a/3rdparty/bgfx/src/fs_debugfont.bin.h b/3rdparty/bgfx/src/fs_debugfont.bin.h
index eaca9aaa6da..553bc8fef58 100644
--- a/3rdparty/bgfx/src/fs_debugfont.bin.h
+++ b/3rdparty/bgfx/src/fs_debugfont.bin.h
@@ -1,6 +1,6 @@
static const uint8_t fs_debugfont_glsl[354] =
{
- 0x46, 0x53, 0x48, 0x04, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH..."f...s_tex
+ 0x46, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH..."f...s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x42, 0x01, 0x00, 0x00, 0x76, // Color......B...v
0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // arying highp vec
0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, // 4 v_color0;.vary
@@ -24,88 +24,353 @@ static const uint8_t fs_debugfont_glsl[354] =
0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, // r = tmpvar_1;.}.
0x0a, 0x00, // ..
};
-static const uint8_t fs_debugfont_dx9[374] =
+static const uint8_t fs_debugfont_spv[4195] =
{
- 0x46, 0x53, 0x48, 0x04, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH..."f...s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x58, 0x01, 0x00, 0x03, 0xff, // Color0.....X....
- 0xff, 0xfe, 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ...#.CTAB....S..
- 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .<.......s_texCo
- 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // lor.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....ps_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, // 0.0.10011.16384.
- 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x81, 0x80, 0x80, 0xbb, 0x00, 0x00, 0x00, // .Q..............
- 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, // ................
- 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x01, 0x80, 0x01, 0x00, 0x0f, // ................
- 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, // .........B......
- 0x80, 0x02, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, // ................
- 0x80, 0x01, 0x00, 0xe4, 0x90, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, // ................
- 0x81, 0x00, 0x00, 0xe4, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, // ................
- 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, // ................
- 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, // .........X......
- 0x80, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x41, 0x00, 0x00, // .......U.....A..
- 0x01, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, // ................
- 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ......
+ 0x46, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x00, 0x00, 0x54, 0x10, 0x00, 0x00, 0x03, 0x02, // FSH..."f..T.....
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x4a, 0x62, 0x00, 0x00, 0x00, 0x00, // #.........Jb....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, // ..w...x...t.....
+ 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x99, 0x0f, // ..main..........
+ 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, // ..bgfxTexture2D(
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, // struct-BgfxSampl
+ 0x65, 0x72, 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, // er2D-p1-t211;vf2
+ 0x3b, 0x00, 0x05, 0x00, 0x05, 0x00, 0xe2, 0x2e, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, // ;.........m_samp
+ 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x6d, 0x5f, // ler......./B..m_
+ 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, // texture.........
+ 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xd2, 0x0c, // .._coord........
+ 0x00, 0x00, 0x6d, 0x69, 0x78, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, // ..mix(vf4;vf4;vf
+ 0x34, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x5f, 0x61, // 4;............_a
+ 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x5f, 0x62, 0x00, 0x00, 0x05, 0x00, // .........._b....
+ 0x03, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x5f, 0x74, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, // ......_t......5.
+ 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, // ..vec4_splat(f1;
+ 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, // .........._x....
+ 0x08, 0x00, 0xdd, 0x13, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, // ......@main(vf4;
+ 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, // vf4;vf2;vf4;....
+ 0x05, 0x00, 0x62, 0x25, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // ..b%..v_color0..
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x27, 0x22, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ......'"..v_colo
+ 0x72, 0x31, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x51, 0x00, 0x00, 0x76, 0x5f, // r1.........Q..v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x92, 0x55, // texcoord0......U
+ 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, // ..gl_FragData_0_
+ 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, // ......a...BgfxSa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, // mpler2D.......a.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // ......m_sampler.
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, // ......a.......m_
+ 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, // texture.........
+ 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, // ..flattenTemp...
+ 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, // Sampler.........
+ 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, // ..s_texColorText
+ 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x67, 0x12, 0x00, 0x00, 0x6d, 0x5f, // ure.......g...m_
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa3, 0x14, // sampler.........
+ 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, // ..m_texture.....
+ 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, // ......bgfx_VoidF
+ 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x6a, 0x4f, 0x00, 0x00, 0x70, 0x61, // rag.......jO..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, // ram...........co
+ 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8b, 0x2b, 0x00, 0x00, 0x70, 0x61, // lor........+..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x70, 0x61, // ram........+..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc4, 0x2b, 0x00, 0x00, 0x70, 0x61, // ram........+..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x5e, 0x29, 0x00, 0x00, 0x70, 0x61, // ram.......^)..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xe1, 0x2b, 0x00, 0x00, 0x76, 0x5f, // ram........+..v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, // color0........w.
+ 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // ..v_color0......
+ 0x05, 0x00, 0xb0, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x00, 0x00, // ...<..v_color1..
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x78, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ......x...v_colo
+ 0x72, 0x31, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x76, 0x5f, // r1........@,..v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, // texcoord0.....t.
+ 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, // ..v_texcoord0...
+ 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, // ......gl_FragDat
+ 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x70, 0x61, // a_0_.......G..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, // ram........U..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, // ram........8..pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, // ram...........pa
+ 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, // ram...........gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, // _FragData_0_....
+ 0x04, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ......$Global...
+ 0x06, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x01, 0x00, // Rect............
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
+ 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xa0, 0x06, // invView.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
+ 0x06, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..........u_invP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x06, 0x00, // roj.............
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
+ 0x07, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
+ 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xa0, 0x06, // iewProj.........
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
+ 0x06, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x0a, 0x00, // lView...........
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
+ 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.............u_
+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, // alphaRef4.G.....
+ 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, // ..".......G.....
+ 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, // ..!.......G.....
+ 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, // ..".......G.....
+ 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, // ..!.......G...w.
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x78, 0x0e, // ..........G...x.
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, // ..........G...t.
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, // ..........G.....
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x71, 0x01, // ..........G...q.
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, // ......@...H.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x02, 0x00, // .. ...H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa0, 0x06, // ..........H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, // ..........H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#...`...H.
+ 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x04, 0x00, // ......H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa0, 0x06, // ..........H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, // ..........H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x06, 0x00, // .. ...H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa0, 0x06, // ..........H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, // ..........H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, // ......#...`...H.
+ 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x08, 0x00, // ......H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa0, 0x06, // ..........H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, // ..........H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, // ................
+ 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, // ..H.............
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, // ..H...........#.
+ 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x0a, 0x00, // ......H.........
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa0, 0x06, // ..........H.....
+ 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, // ......#... ...G.
+ 0x03, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, // ..!.............
+ 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0x00, // ...... ...y.....
+ 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, // .............. .
+ 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, // ...... .........
+ 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x0a, 0x08, 0x00, 0x00, 0x1d, 0x00, // ......!.........
+ 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, // ..y........... .
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x06, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, // ................
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, // ......!.........
+ 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x08, 0x04, 0x00, 0x00, 0x08, 0x00, // ......!.........
+ 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x02, // ................
+ 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, // ......a.........
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x09, // .. ...........a.
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, // ..;.............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, // ..;...y.........
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, // ..;.............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x67, 0x12, 0x00, 0x00, 0x00, 0x00, // ..;...y...g.....
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, 0x00, 0xa3, 0x14, 0x00, 0x00, 0x00, 0x00, // ..;.............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, // ..+.............
+ 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, // ................
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, // ...... .......+.
+ 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, // ..............+.
+ 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0x81, 0x80, 0x80, 0x3b, 0x14, 0x00, // ......z......;..
+ 0x02, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, // ......;.......w.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x78, 0x0e, // ......;.......x.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, // ...... .........
+ 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x74, 0x14, // ......;.......t.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, // ...... .........
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, // ......;.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, // ..........e.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ......+.......j.
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x71, 0x01, 0x00, 0x00, 0x65, 0x00, // .. .......q...e.
+ 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xa0, 0x06, 0x00, 0x00, 0x1d, 0x00, // ..j.............
+ 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ......e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x71, 0x01, // ..e...e...e...q.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x36, 0x00, // ..e...e.......6.
+ 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, // ................
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ......Sa..;.....
+ 0x00, 0x00, 0xc9, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ...G......;.....
+ 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, // ...U......;.....
+ 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, // ...8......;.....
+ 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, // ..........=.....
+ 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, // ..!C......=.....
+ 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, // ...3......P...a.
+ 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, // ..^ ..!C...3..>.
+ 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, // ......^ ..A...y.
+ 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...V..........=.
+ 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, // ...........V..>.
+ 0x03, 0x00, 0x67, 0x12, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, // ..g.......A.....
+ 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, // ...@..........=.
+ 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, // ...........@..>.
+ 0x03, 0x00, 0xa3, 0x14, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ..........=.....
+ 0x00, 0x00, 0xe1, 0x2b, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, // ...+..w...=.....
+ 0x00, 0x00, 0xb0, 0x3c, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, // ...<..x...=.....
+ 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x47, // ..@,..t...>....G
+ 0x00, 0x00, 0xe1, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb0, 0x3c, // ...+..>....U...<
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x39, 0x00, // ..>....8..@,..9.
+ 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xdd, 0x13, 0x00, 0x00, 0xc9, 0x47, // .......&.......G
+ 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, // ...U...8......=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, // ..............>.
+ 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ..............8.
+ 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x0a, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0xe2, 0x2e, // ......7...y.....
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x13, 0x03, 0x00, 0x00, 0x2f, 0x42, 0x00, 0x00, 0x37, 0x00, // ..7......./B..7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xca, 0x1c, // ................
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0x2f, 0x42, // ..=.........../B
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0xe2, 0x2e, // ..=........H....
+ 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xc6, 0x19, // ..V........>....
+ 0x00, 0x00, 0xca, 0x48, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xfe, 0x24, // ...H..=........$
+ 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x82, 0x59, // ......W........Y
+ 0x00, 0x00, 0xf7, 0x3e, 0x00, 0x00, 0xfe, 0x24, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x82, 0x59, // ...>...$.......Y
+ 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd2, 0x0c, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // ..........7.....
+ 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc7, 0x0e, // ......7.........
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0xf8, 0x00, // ..7.............
+ 0x02, 0x00, 0x16, 0x59, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x37, 0x54, // ...Y..=.......7T
+ 0x00, 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x07, 0x48, // ......=........H
+ 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0e, 0x47, // ......=........G
+ 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x19, // ..............e.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x37, 0x54, 0x00, 0x00, 0x07, 0x48, // ..........7T...H
+ 0x00, 0x00, 0x0e, 0x47, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x65, 0x19, 0x00, 0x00, 0x38, 0x00, // ...G......e...8.
+ 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, // ..6.......5.....
+ 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, // ......7.........
+ 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x19, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // .......N..=.....
+ 0x00, 0x00, 0x67, 0x1c, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..g.......=.....
+ 0x00, 0x00, 0xf2, 0x44, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ...D......=.....
+ 0x00, 0x00, 0x92, 0x2f, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // .../......=.....
+ 0x00, 0x00, 0xa5, 0x2f, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, // .../......P.....
+ 0x00, 0x00, 0x41, 0x4a, 0x00, 0x00, 0x67, 0x1c, 0x00, 0x00, 0xf2, 0x44, 0x00, 0x00, 0x92, 0x2f, // ..AJ..g....D.../
+ 0x00, 0x00, 0xa5, 0x2f, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x41, 0x4a, 0x00, 0x00, 0x38, 0x00, // .../......AJ..8.
+ 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xdd, 0x13, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x62, 0x25, // ......7.......b%
+ 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x27, 0x22, 0x00, 0x00, 0x37, 0x00, // ..7.......'"..7.
+ 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0x08, 0x51, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, // .......Q..7.....
+ 0x00, 0x00, 0x92, 0x55, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x5e, 0x00, 0x00, 0x3b, 0x00, // ...U.......^..;.
+ 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6a, 0x4f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ......jO......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // ..............;.
+ 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x8b, 0x2b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......+......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......+......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc4, 0x2b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, // .......+......;.
+ 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5e, 0x29, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......^)......>.
+ 0x03, 0x00, 0x6a, 0x4f, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, // ..jO......9.....
+ 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x6a, 0x4f, 0x00, 0x00, 0x3d, 0x00, // ......5...jO..=.
+ 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdd, 0x4b, 0x00, 0x00, 0x08, 0x51, 0x00, 0x00, 0x3e, 0x00, // .......K...Q..>.
+ 0x03, 0x00, 0x8b, 0x2b, 0x00, 0x00, 0xdd, 0x4b, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, // ...+...K..9.....
+ 0x00, 0x00, 0x95, 0x54, 0x00, 0x00, 0x99, 0x0f, 0x00, 0x00, 0x67, 0x12, 0x00, 0x00, 0xa3, 0x14, // ...T......g.....
+ 0x00, 0x00, 0x8b, 0x2b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x29, 0x4c, // ...+..=.......)L
+ 0x00, 0x00, 0x27, 0x22, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x29, 0x4c, // ..'"..>....+..)L
+ 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa6, 0x1f, 0x00, 0x00, 0x62, 0x25, // ..=...........b%
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc4, 0x2b, 0x00, 0x00, 0xa6, 0x1f, 0x00, 0x00, 0x4f, 0x00, // ..>....+......O.
+ 0x09, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xea, 0x31, 0x00, 0x00, 0x95, 0x54, 0x00, 0x00, 0x95, 0x54, // .......1...T...T
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5e, 0x29, 0x00, 0x00, 0xea, 0x31, 0x00, 0x00, 0x39, 0x00, // ..>...^)...1..9.
+ 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x29, 0x00, 0x00, 0xd2, 0x0c, 0x00, 0x00, 0x8c, 0x2b, // .......).......+
+ 0x00, 0x00, 0xc4, 0x2b, 0x00, 0x00, 0x5e, 0x29, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x18, 0x0e, // ...+..^)..>.....
+ 0x00, 0x00, 0x1e, 0x29, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xb7, 0x49, // ...)..A........I
+ 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, // ..........=.....
+ 0x00, 0x00, 0x49, 0x62, 0x00, 0x00, 0xb7, 0x49, 0x00, 0x00, 0xb8, 0x00, 0x05, 0x00, 0x09, 0x00, // ..Ib...I........
+ 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0x49, 0x62, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0xf7, 0x00, // ..zD..Ib..z.....
+ 0x03, 0x00, 0xdc, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x7a, 0x44, // ..............zD
+ 0x00, 0x00, 0xfd, 0x46, 0x00, 0x00, 0xdc, 0x19, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xfd, 0x46, // ...F...........F
+ 0x00, 0x00, 0xfc, 0x00, 0x01, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xdc, 0x19, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd8, 0x38, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x3e, 0x00, // .......8......>.
+ 0x03, 0x00, 0x92, 0x55, 0x00, 0x00, 0xd8, 0x38, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, // ...U...8......8.
+ 0x01, 0x00, 0x00, // ...
};
-static const uint8_t fs_debugfont_dx11[772] =
+static const uint8_t fs_debugfont_dx9[364] =
{
- 0x46, 0x53, 0x48, 0x04, 0xb8, 0xbe, 0x22, 0x66, 0x00, 0x00, 0xf4, 0x02, 0x44, 0x58, 0x42, 0x43, // FSH..."f....DXBC
- 0x1d, 0xbb, 0xb2, 0xa8, 0xff, 0x65, 0xcd, 0xa5, 0xf7, 0x85, 0xfd, 0xcb, 0xb6, 0xe1, 0x00, 0xc6, // .....e..........
- 0x01, 0x00, 0x00, 0x00, 0xf4, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ............0...
- 0x28, 0x01, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0xc0, 0x02, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, // (...4.......Aon9
- 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xc8, 0x00, 0x00, 0x00, // ................
- 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, // (.....(...(...(.
- 0x01, 0x00, 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, // ..$...(.........
- 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x81, 0x80, 0x80, 0xbb, 0x00, 0x00, 0x00, 0x80, // Q...............
- 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, // ................
- 0x00, 0x00, 0x0f, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xb0, // ................
- 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x03, 0xb0, 0x1f, 0x00, 0x00, 0x02, // ................
- 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ........B.......
- 0x02, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0x80, // ................
- 0x01, 0x00, 0xe4, 0xb0, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x81, // ................
- 0x00, 0x00, 0xe4, 0xb0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, // ................
- 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0xb0, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, // ................
- 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, // ........X.......
- 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x41, 0x00, 0x00, 0x01, // ......U.....A...
- 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, // ................
- 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, 0x04, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // ....SHDR....@...
- 0x41, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // A...Z....`......
- 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, // X....p......UU..
- 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, // b...........b...
- 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, // ........b...2...
- 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....e.... ......
- 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, // h.......E.......
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, // ....F.......F~..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, // .....`..........
- 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ........F.......
- 0x46, 0x1e, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, // F...A.......2...
- 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // F.......F.......
- 0x31, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, // 1...........:...
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x81, 0x80, 0x80, 0x3b, 0x0d, 0x00, 0x04, 0x03, // .....@.....;....
- 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, // ........6.... ..
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, // ....F.......>...
- 0x49, 0x53, 0x47, 0x4e, 0x84, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGN............
- 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // h...............
- 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........t.......
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, // ................
- 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // t...............
- 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........z.......
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // ................
- 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
- 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, // R.TEXCOORD..OSGN
- 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
- 0x00, 0x00, 0x00, 0x00, // ....
+ 0x46, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH..."f...s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x00, // Color0.....L....
+ 0x03, 0xff, 0xff, 0xfe, 0xff, 0x20, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, // ..... .CTAB....S
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x91, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ...L...0........
+ 0x00, 0x02, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, // ...<.......s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, // Color...........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, // .......ps_3_0.Mi
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, // crosoft (R) HLSL
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, // Shader Compiler
+ 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x81, // 10.1..Q........
+ 0x80, 0x80, 0xbb, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x1f, // ................
+ 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x0a, // ................
+ 0x00, 0x01, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, // ................
+ 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, // ...............B
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0x90, 0x00, 0x08, 0xe4, 0xa0, 0x01, // ................
+ 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x02, 0x00, 0x00, 0x03, 0x01, // ................
+ 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x81, 0x00, 0x00, 0xe4, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, // ................
+ 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x02, // ................
+ 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x58, // ...............X
+ 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x00, // .............U..
+ 0x00, 0xaa, 0xa0, 0x41, 0x00, 0x00, 0x01, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, // ...A............
+ 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ............
};
-static const uint8_t fs_debugfont_mtl[820] =
+static const uint8_t fs_debugfont_dx11[774] =
{
- 0x46, 0x53, 0x48, 0x04, 0xb8, 0xbe, 0x22, 0x66, 0x00, 0x00, 0x25, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH..."f..%...us
+ 0x46, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x00, 0x00, 0xf4, 0x02, 0x00, 0x00, 0x44, 0x58, // FSH..."f......DX
+ 0x42, 0x43, 0x1d, 0xbb, 0xb2, 0xa8, 0xff, 0x65, 0xcd, 0xa5, 0xf7, 0x85, 0xfd, 0xcb, 0xb6, 0xe1, // BC.....e........
+ 0x00, 0xc6, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, // ..............0.
+ 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0xc0, 0x02, 0x00, 0x00, 0x41, 0x6f, // ..(...4.......Ao
+ 0x6e, 0x39, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xc8, 0x00, // n9..............
+ 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, // ..(.....(...(...
+ 0x28, 0x00, 0x01, 0x00, 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // (...$...(.......
+ 0xff, 0xff, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x81, 0x80, 0x80, 0xbb, 0x00, 0x00, // ..Q.............
+ 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
+ 0x00, 0x80, 0x00, 0x00, 0x0f, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
+ 0x0f, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x03, 0xb0, 0x1f, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, // ..........B.....
+ 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, // ................
+ 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xb0, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, // ................
+ 0xe4, 0x81, 0x00, 0x00, 0xe4, 0xb0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, // ................
+ 0x00, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0xb0, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, // ................
+ 0x01, 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x01, 0x00, // ..........X.....
+ 0x0f, 0x80, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x00, 0x00, 0xaa, 0xa0, 0x41, 0x00, // ........U.....A.
+ 0x00, 0x01, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, // ................
+ 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, 0x04, 0x01, 0x00, 0x00, 0x40, 0x00, // ......SHDR....@.
+ 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, // ..A...Z....`....
+ 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, // ..X....p......UU
+ 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, // ..b...........b.
+ 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, // ..........b...2.
+ 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......e.... ....
+ 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x09, 0xf2, 0x00, // ..h.......E.....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x7e, // ......F.......F~
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......`........
+ 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, // ..........F.....
+ 0x00, 0x00, 0x46, 0x1e, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F...A.......2.
+ 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x02, 0x00, // ..F.......F.....
+ 0x00, 0x00, 0x31, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, // ..1...........:.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x81, 0x80, 0x80, 0x3b, 0x0d, 0x00, // .......@.....;..
+ 0x04, 0x03, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, // ..........6....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......F.......>.
+ 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x84, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, // ..ISGN..........
+ 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, // ..h.............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........t.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, // ................
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ..t.............
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........z.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, // LOR.TEXCOORD..OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x00, 0x00, 0x00, 0x00, // ......
+};
+static const uint8_t fs_debugfont_mtl[745] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x00, 0x00, 0xda, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH..."f......us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
@@ -114,49 +379,44 @@ static const uint8_t fs_debugfont_mtl[820] =
0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, // olor1;. float2
0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, // v_texcoord0;.};.
0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // struct xlatMtlSh
- 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x68, // aderOutput {. h
- 0x61, 0x6c, 0x66, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, // alf4 gl_FragColo
- 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, // r;.};.struct xla
- 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, // tMtlShaderUnifor
- 0x6d, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, // m {.};.fragment
- 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
- 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, // put xlatMtlMain
- 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, // (xlatMtlShaderIn
- 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, // put _mtl_i [[sta
- 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, // ge_in]], constan
- 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, // t xlatMtlShaderU
- 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, // niform& _mtl_u [
- 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x0a, 0x20, 0x20, 0x2c, // [buffer(0)]]. ,
- 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, // texture2d<flo
- 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, // at> s_texColor [
- 0x5b, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, // [texture(0)]], s
- 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, // ampler _mtlsmp_s
- 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, // _texColor [[samp
- 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, // ler(0)]]).{. xl
- 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, // atMtlShaderOutpu
- 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, // t _mtl_o;. half
- 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, // 4 tmpvar_1 = 0;.
- 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, // tmpvar_1 = hal
- 0x66, 0x34, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, // f4(s_texColor.sa
- 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, // mple(_mtlsmp_s_t
- 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, // exColor, (float2
- 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // )(_mtl_i.v_texco
- 0x6f, 0x72, 0x64, 0x30, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, // ord0)));. half4
- 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_2 = 0;.
- 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x61, // tmpvar_2 = ((ha
- 0x6c, 0x66, 0x34, 0x29, 0x6d, 0x69, 0x78, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, // lf4)mix (_mtl_i.
- 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x2c, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // v_color1, _mtl_i
- 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, // .v_color0, (floa
- 0x74, 0x34, 0x29, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x78, 0x78, 0x78, // t4)tmpvar_1.xxxx
- 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, // ));. if ((tmpva
- 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x20, 0x3c, 0x20, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x28, 0x30, // r_2.w < (half)(0
- 0x2e, 0x30, 0x30, 0x33, 0x39, 0x32, 0x31, 0x35, 0x36, 0x39, 0x29, 0x29, 0x29, 0x20, 0x7b, 0x0a, // .003921569))) {.
- 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, // discard_frag
- 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // ment();. };. _
- 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, // mtl_o.gl_FragCol
- 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, // or = tmpvar_2;.
- 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, // return _mtl_o;.
- 0x7d, 0x0a, 0x0a, 0x00, // }...
+ 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, // aderOutput {. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, // loat4 gl_FragCol
+ 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, // or;.};.struct xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, // atMtlShaderUnifo
+ 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, // rm {.};.fragment
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, // xlatMtlShaderOu
+ 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, // tput xlatMtlMain
+ 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, // (xlatMtlShaderI
+ 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, // nput _mtl_i [[st
+ 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, // age_in]], consta
+ 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // nt xlatMtlShader
+ 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, // Uniform& _mtl_u
+ 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x0a, 0x20, 0x20, // [[buffer(0)]].
+ 0x2c, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, // , texture2d<fl
+ 0x6f, 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, // oat> s_texColor
+ 0x5b, 0x5b, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, // [[texture(0)]],
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, // sampler _mtlsmp_
+ 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, // s_texColor [[sam
+ 0x70, 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, // pler(0)]]).{. x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, // latMtlShaderOutp
+ 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // ut _mtl_o;. flo
+ 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, // at4 tmpvar_1 = 0
+ 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x6d, // ;. tmpvar_1 = m
+ 0x69, 0x78, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, // ix (_mtl_i.v_col
+ 0x6f, 0x72, 0x31, 0x2c, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, // or1, _mtl_i.v_co
+ 0x6c, 0x6f, 0x72, 0x30, 0x2c, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // lor0, s_texColor
+ 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, // .sample(_mtlsmp_
+ 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, // s_texColor, (flo
+ 0x61, 0x74, 0x32, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, // at2)(_mtl_i.v_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x29, 0x29, 0x2e, 0x78, 0x78, 0x78, 0x78, 0x29, 0x3b, // xcoord0)).xxxx);
+ 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // . if ((tmpvar_1
+ 0x2e, 0x77, 0x20, 0x3c, 0x20, 0x30, 0x2e, 0x30, 0x30, 0x33, 0x39, 0x32, 0x31, 0x35, 0x36, 0x39, // .w < 0.003921569
+ 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, // )) {. discard
+ 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, // _fragment();. }
+ 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. _mtl_o.gl_Fr
+ 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // agColor = tmpvar
+ 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, // _1;. return _mt
+ 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // l_o;.}...
};
extern const uint8_t* fs_debugfont_pssl;
extern const uint32_t fs_debugfont_pssl_size;
diff --git a/3rdparty/bgfx/src/glcontext_eagl.mm b/3rdparty/bgfx/src/glcontext_eagl.mm
index ff5467450a2..541cc40b08f 100644
--- a/3rdparty/bgfx/src/glcontext_eagl.mm
+++ b/3rdparty/bgfx/src/glcontext_eagl.mm
@@ -20,21 +20,25 @@ namespace bgfx { namespace gl
struct SwapChainGL
{
SwapChainGL(EAGLContext *_context, CAEAGLLayer *_layer)
- : m_context(_context)
- , m_fbo(0)
- , m_colorRbo(0)
- , m_depthStencilRbo(0)
+ : m_context(_context)
+ , m_fbo(0)
+ , m_colorRbo(0)
+ , m_depthStencilRbo(0)
{
_layer.contentsScale = [UIScreen mainScreen].scale;
- _layer.opaque = [_layer.style valueForKey:@"opaque"] == nil ? true : [[_layer.style valueForKey:@"opaque"] boolValue];
+ _layer.opaque = [_layer.style valueForKey:@"opaque"] == nil
+ ? true
+ : [[_layer.style valueForKey:@"opaque"] boolValue]
+ ;
_layer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys
- : [NSNumber numberWithBool:false]
- , kEAGLDrawablePropertyRetainedBacking
- , kEAGLColorFormatRGBA8
- , kEAGLDrawablePropertyColorFormat
- , nil];
+ : [NSNumber numberWithBool:false]
+ , kEAGLDrawablePropertyRetainedBacking
+ , kEAGLColorFormatRGBA8
+ , kEAGLDrawablePropertyColorFormat
+ , nil
+ ];
[EAGLContext setCurrentContext:_context];
@@ -72,20 +76,20 @@ namespace bgfx { namespace gl
GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, 0) );
if (0 != m_fbo)
{
- GL_CHECK(glDeleteFramebuffers(1, &m_fbo) );
- m_fbo = 0;
+ GL_CHECK(glDeleteFramebuffers(1, &m_fbo) );
+ m_fbo = 0;
}
if (0 != m_colorRbo)
{
- GL_CHECK(glDeleteRenderbuffers(1, &m_colorRbo) );
- m_colorRbo = 0;
+ GL_CHECK(glDeleteRenderbuffers(1, &m_colorRbo) );
+ m_colorRbo = 0;
}
if (0 != m_depthStencilRbo)
{
- GL_CHECK(glDeleteRenderbuffers(1, &m_depthStencilRbo) );
- m_depthStencilRbo = 0;
+ GL_CHECK(glDeleteRenderbuffers(1, &m_depthStencilRbo) );
+ m_depthStencilRbo = 0;
}
}
@@ -93,20 +97,23 @@ namespace bgfx { namespace gl
{
GL_CHECK(glGenRenderbuffers(1, &m_depthStencilRbo) );
GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_depthStencilRbo) );
- GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, _width, _height) ); // from OES_packed_depth_stencil
+ GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, _width, _height) );
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) );
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) );
- BX_CHECK(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_FRAMEBUFFER)
- , "glCheckFramebufferStatus failed 0x%08x"
- , glCheckFramebufferStatus(GL_FRAMEBUFFER)
- );
+ GLenum err = glCheckFramebufferStatus(GL_FRAMEBUFFER);
+ BX_CHECK(GL_FRAMEBUFFER_COMPLETE == err, "glCheckFramebufferStatus failed 0x%08x", err);
+ BX_UNUSED(err);
makeCurrent();
+
GL_CHECK(glClearColor(0.0f, 0.0f, 0.0f, 0.0f) );
GL_CHECK(glClear(GL_COLOR_BUFFER_BIT) );
+
swapBuffers();
+
GL_CHECK(glClear(GL_COLOR_BUFFER_BIT) );
+
swapBuffers();
}
@@ -162,15 +169,24 @@ namespace bgfx { namespace gl
layer.opaque = [layer.style valueForKey:@"opaque"] == nil ? true : [[layer.style valueForKey:@"opaque"] boolValue];
layer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys
- : [NSNumber numberWithBool:false]
- , kEAGLDrawablePropertyRetainedBacking
- , kEAGLColorFormatRGBA8
- , kEAGLDrawablePropertyColorFormat
- , nil
- ];
-
- EAGLContext* context = [ [EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
- BX_CHECK(NULL != context, "Failed to create kEAGLRenderingAPIOpenGLES2 context.");
+ : [NSNumber numberWithBool:false]
+ , kEAGLDrawablePropertyRetainedBacking
+ , kEAGLColorFormatRGBA8
+ , kEAGLDrawablePropertyColorFormat
+ , nil
+ ];
+
+ EAGLContext* context = (EAGLContext*)g_platformData.context;
+ if (NULL == context)
+ {
+ context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
+ if (NULL == context)
+ {
+ context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
+ }
+ }
+ BX_CHECK(NULL != context, "No valid OpenGLES context.");
+
m_context = (void*)context;
[EAGLContext setCurrentContext:context];
@@ -191,7 +207,7 @@ namespace bgfx { namespace gl
GL_CHECK(glGenRenderbuffers(1, &m_depthStencilRbo) );
GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_depthStencilRbo) );
- GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, width, height) ); // from OES_packed_depth_stencil
+ GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height) );
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) );
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) );
@@ -278,7 +294,7 @@ namespace bgfx { namespace gl
GL_CHECK(glGenRenderbuffers(1, &m_depthStencilRbo) );
GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_depthStencilRbo) );
- GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, width, height) ); // from OES_packed_depth_stencil
+ GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height) );
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) );
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) );
@@ -340,18 +356,20 @@ namespace bgfx { namespace gl
void GlContext::import()
{
BX_TRACE("Import:");
-# define GL_EXTENSION(_optional, _proto, _func, _import) \
- { \
- if (_func == NULL) \
- { \
- _func = (_proto)bx::dlsym(s_opengles, #_import); \
- BX_TRACE("%p " #_func " (" #_import ")", _func); \
- } \
- BGFX_FATAL(_optional || NULL != _func, Fatal::UnableToInitialize, "Failed to create OpenGLES context. EAGLGetProcAddress(\"%s\")", #_import); \
+# define GL_EXTENSION(_optional, _proto, _func, _import) \
+ { \
+ if (_func == NULL) \
+ { \
+ _func = (_proto)bx::dlsym(s_opengles, #_import); \
+ BX_TRACE("%p " #_func " (" #_import ")", _func); \
+ } \
+ BGFX_FATAL(_optional || NULL != _func, Fatal::UnableToInitialize \
+ , "Failed to create OpenGLES context. EAGLGetProcAddress(\"%s\")" \
+ , #_import); \
}
# include "glimports.h"
}
} /* namespace gl */ } // namespace bgfx
-#endif // BX_PLATFORM_IOS && (BGFX_CONFIG_RENDERER_OPENGLES2|BGFX_CONFIG_RENDERER_OPENGLES3|BGFX_CONFIG_RENDERER_OPENGL)
+#endif // BX_PLATFORM_IOS && (BGFX_CONFIG_RENDERER_OPENGLES|BGFX_CONFIG_RENDERER_OPENGL)
diff --git a/3rdparty/bgfx/src/glcontext_ppapi.cpp b/3rdparty/bgfx/src/glcontext_ppapi.cpp
deleted file mode 100644
index b23d92bb86b..00000000000
--- a/3rdparty/bgfx/src/glcontext_ppapi.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#include "bgfx_p.h"
-
-#if BX_PLATFORM_NACL && (BGFX_CONFIG_RENDERER_OPENGLES || BGFX_CONFIG_RENDERER_OPENGL)
-# include <bgfx/platform.h>
-# include "renderer_gl.h"
-
-namespace bgfx { namespace gl
-{
-# define GL_IMPORT(_optional, _proto, _func, _import) _proto _func
-# include "glimports.h"
-
- void naclSwapCompleteCb(void* /*_data*/, int32_t /*_result*/);
-
- PP_CompletionCallback naclSwapComplete =
- {
- naclSwapCompleteCb,
- NULL,
- PP_COMPLETIONCALLBACK_FLAG_NONE
- };
-
- struct Ppapi
- {
- Ppapi()
- : m_context(0)
- , m_instance(0)
- , m_instInterface(NULL)
- , m_graphicsInterface(NULL)
- , m_instancedArrays(NULL)
- , m_query(NULL)
- , m_postSwapBuffers(NULL)
- , m_forceSwap(true)
- {
- }
-
- bool setInterfaces(PP_Instance _instance, const PPB_Instance* _instInterface, const PPB_Graphics3D* _graphicsInterface, PostSwapBuffersFn _postSwapBuffers);
-
- void resize(uint32_t _width, uint32_t _height, uint32_t /*_flags*/)
- {
- m_graphicsInterface->ResizeBuffers(m_context, _width, _height);
- }
-
- void swap()
- {
- glSetCurrentContextPPAPI(m_context);
- m_graphicsInterface->SwapBuffers(m_context, naclSwapComplete);
- }
-
- bool isValid() const
- {
- return 0 != m_context;
- }
-
- PP_Resource m_context;
- PP_Instance m_instance;
- const PPB_Instance* m_instInterface;
- const PPB_Graphics3D* m_graphicsInterface;
- const PPB_OpenGLES2InstancedArrays* m_instancedArrays;
- const PPB_OpenGLES2Query* m_query;
- PostSwapBuffersFn m_postSwapBuffers;
- bool m_forceSwap;
- };
-
- static Ppapi s_ppapi;
-
- void naclSwapCompleteCb(void* /*_data*/, int32_t /*_result*/)
- {
- // For NaCl bgfx doesn't create render thread, but rendering is always
- // multithreaded. Frame rendering is done on main thread, and context
- // is initialized when PPAPI interfaces are set. Force swap is there to
- // keep calling swap complete callback, so that initialization doesn't
- // deadlock on semaphores.
- if (s_ppapi.m_forceSwap)
- {
- s_ppapi.swap();
- }
-
- renderFrame();
- }
-
- static void GL_APIENTRY naclVertexAttribDivisor(GLuint _index, GLuint _divisor)
- {
- s_ppapi.m_instancedArrays->VertexAttribDivisorANGLE(s_ppapi.m_context, _index, _divisor);
- }
-
- static void GL_APIENTRY naclDrawArraysInstanced(GLenum _mode, GLint _first, GLsizei _count, GLsizei _primcount)
- {
- s_ppapi.m_instancedArrays->DrawArraysInstancedANGLE(s_ppapi.m_context, _mode, _first, _count, _primcount);
- }
-
- static void GL_APIENTRY naclDrawElementsInstanced(GLenum _mode, GLsizei _count, GLenum _type, const GLvoid* _indices, GLsizei _primcount)
- {
- s_ppapi.m_instancedArrays->DrawElementsInstancedANGLE(s_ppapi.m_context, _mode, _count, _type, _indices, _primcount);
- }
-
- static void GL_APIENTRY naclGenQueries(GLsizei _n, GLuint* _queries)
- {
- s_ppapi.m_query->GenQueriesEXT(s_ppapi.m_context, _n, _queries);
- }
-
- static void GL_APIENTRY naclDeleteQueries(GLsizei _n, const GLuint* _queries)
- {
- s_ppapi.m_query->DeleteQueriesEXT(s_ppapi.m_context, _n, _queries);
- }
-
- static void GL_APIENTRY naclBeginQuery(GLenum _target, GLuint _id)
- {
- BX_UNUSED(_target);
- s_ppapi.m_query->BeginQueryEXT(s_ppapi.m_context, GL_ANY_SAMPLES_PASSED_EXT, _id);
- }
-
- static void GL_APIENTRY naclEndQuery(GLenum _target)
- {
- BX_UNUSED(_target);
- s_ppapi.m_query->EndQueryEXT(s_ppapi.m_context, GL_ANY_SAMPLES_PASSED_EXT);
- }
-
- static void GL_APIENTRY naclGetQueryObjectiv(GLuint _id, GLenum _pname, GLint* _params)
- {
- BX_UNUSED(_id, _pname);
- s_ppapi.m_query->GetQueryivEXT(s_ppapi.m_context, GL_ANY_SAMPLES_PASSED_EXT, GL_CURRENT_QUERY_EXT, _params);
- }
-
- static void GL_APIENTRY naclGetQueryObjectui64v(GLuint _id, GLenum _pname, GLuint64* _params)
- {
- BX_UNUSED(_id, _pname);
- GLint params;
- s_ppapi.m_query->GetQueryivEXT(s_ppapi.m_context, GL_ANY_SAMPLES_PASSED_EXT, GL_CURRENT_QUERY_EXT, &params);
- *_params = params;
- }
-
- bool Ppapi::setInterfaces(PP_Instance _instance, const PPB_Instance* _instInterface, const PPB_Graphics3D* _graphicsInterface, PostSwapBuffersFn _postSwapBuffers)
- {
- BX_TRACE("PPAPI Interfaces");
-
- m_instance = _instance;
- m_instInterface = _instInterface;
- m_graphicsInterface = _graphicsInterface;
- m_instancedArrays = glGetInstancedArraysInterfacePPAPI();
- m_query = glGetQueryInterfacePPAPI();
- m_postSwapBuffers = _postSwapBuffers;
-
- int32_t attribs[] =
- {
- PP_GRAPHICS3DATTRIB_ALPHA_SIZE, 8,
- PP_GRAPHICS3DATTRIB_DEPTH_SIZE, 24,
- PP_GRAPHICS3DATTRIB_STENCIL_SIZE, 8,
- PP_GRAPHICS3DATTRIB_SAMPLES, 0,
- PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS, 0,
- PP_GRAPHICS3DATTRIB_WIDTH, BGFX_DEFAULT_WIDTH,
- PP_GRAPHICS3DATTRIB_HEIGHT, BGFX_DEFAULT_HEIGHT,
- PP_GRAPHICS3DATTRIB_NONE
- };
-
- m_context = m_graphicsInterface->Create(m_instance, 0, attribs);
- if (0 == m_context)
- {
- BX_TRACE("Failed to create context!");
- return false;
- }
-
- m_instInterface->BindGraphics(m_instance, m_context);
- glSetCurrentContextPPAPI(m_context);
- m_graphicsInterface->SwapBuffers(m_context, naclSwapComplete);
-
- if (NULL != m_instancedArrays)
- {
- glVertexAttribDivisor = naclVertexAttribDivisor;
- glDrawArraysInstanced = naclDrawArraysInstanced;
- glDrawElementsInstanced = naclDrawElementsInstanced;
- }
-
- if (NULL != m_query)
- {
- glGenQueries = naclGenQueries;
- glDeleteQueries = naclDeleteQueries;
- glBeginQuery = naclBeginQuery;
- glEndQuery = naclEndQuery;
- glGetQueryObjectiv = naclGetQueryObjectiv;
- glGetQueryObjectui64v = naclGetQueryObjectui64v;
- }
-
- // Prevent render thread creation.
- RenderFrame::Enum result = renderFrame();
- return RenderFrame::NoContext == result;
- }
-
- void GlContext::create(uint32_t _width, uint32_t _height)
- {
- BX_UNUSED(_width, _height);
- BX_TRACE("GlContext::create");
-
- g_internalData.context = &s_ppapi.m_context;
- }
-
- void GlContext::destroy()
- {
- }
-
- void GlContext::resize(uint32_t _width, uint32_t _height, uint32_t _flags)
- {
- s_ppapi.m_forceSwap = false;
- s_ppapi.resize(_width, _height, _flags);
- }
-
- uint64_t GlContext::getCaps() const
- {
- return 0;
- }
-
- SwapChainGL* GlContext::createSwapChain(void* /*_nwh*/)
- {
- BX_CHECK(false, "Shouldn't be called!");
- return NULL;
- }
-
- void GlContext::destroySwapChain(SwapChainGL* /*_swapChain*/)
- {
- BX_CHECK(false, "Shouldn't be called!");
- }
-
- void GlContext::swap(SwapChainGL* /*_swapChain*/)
- {
- s_ppapi.swap();
- }
-
- void GlContext::makeCurrent(SwapChainGL* /*_swapChain*/)
- {
- }
-
- void GlContext::import()
- {
- }
-
- bool GlContext::isValid() const
- {
- return s_ppapi.isValid();
- }
-
-} /* namespace gl */ } // namespace bgfx
-
-namespace bgfx
-{
- bool naclSetInterfaces(PP_Instance _instance, const PPB_Instance* _instInterface, const PPB_Graphics3D* _graphicsInterface, PostSwapBuffersFn _postSwapBuffers)
- {
- return gl::s_ppapi.setInterfaces( _instance, _instInterface, _graphicsInterface, _postSwapBuffers);
- }
-} // namespace bgfx
-
-#endif // BX_PLATFORM_NACL && (BGFX_CONFIG_RENDERER_OPENGLES || BGFX_CONFIG_RENDERER_OPENGL)
diff --git a/3rdparty/bgfx/src/glcontext_ppapi.h b/3rdparty/bgfx/src/glcontext_ppapi.h
deleted file mode 100644
index 59da4552355..00000000000
--- a/3rdparty/bgfx/src/glcontext_ppapi.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#ifndef BGFX_GLCONTEXT_PPAPI_H_HEADER_GUARD
-#define BGFX_GLCONTEXT_PPAPI_H_HEADER_GUARD
-
-#if BX_PLATFORM_NACL
-
-# include <ppapi/gles2/gl2ext_ppapi.h>
-# include <ppapi/c/pp_completion_callback.h>
-# include <ppapi/c/ppb_instance.h>
-# include <ppapi/c/ppb_graphics_3d.h>
-
-namespace bgfx { namespace gl
-{
- struct SwapChainGL;
-
- struct GlContext
- {
- GlContext()
- {
- }
-
- void create(uint32_t _width, uint32_t _height);
- void destroy();
- void resize(uint32_t _width, uint32_t _height, uint32_t _flags);
-
- uint64_t getCaps() const;
- SwapChainGL* createSwapChain(void* _nwh);
- void destroySwapChain(SwapChainGL* _swapChain);
- void swap(SwapChainGL* _swapChain = NULL);
- void makeCurrent(SwapChainGL* _swapChain = NULL);
-
- void import();
- bool isValid() const;
- };
-} /* namespace gl */ } // namespace bgfx
-
-#endif // BX_PLATFORM_NACL
-
-#endif // BGFX_GLCONTEXT_PPAPI_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/src/hmd.h b/3rdparty/bgfx/src/hmd.h
index 6a688197795..d2360ed2903 100644
--- a/3rdparty/bgfx/src/hmd.h
+++ b/3rdparty/bgfx/src/hmd.h
@@ -48,7 +48,7 @@ namespace bgfx
virtual void updateInput(HMD& _hmd) = 0;
virtual void recenter() = 0;
- virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight);
+ virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) = 0;
virtual void destroySwapChain() = 0;
virtual void destroyMirror() = 0;
virtual void makeRenderTargetActive(const VRDesc& _desc) = 0;
diff --git a/3rdparty/bgfx/src/hmd_ovr.h b/3rdparty/bgfx/src/hmd_ovr.h
index 7a0f482aa7b..f41d429df10 100644
--- a/3rdparty/bgfx/src/hmd_ovr.h
+++ b/3rdparty/bgfx/src/hmd_ovr.h
@@ -35,25 +35,25 @@ namespace bgfx
VRImplOVR();
virtual ~VRImplOVR() = 0;
- virtual bool init() BX_OVERRIDE;
- virtual void shutdown() BX_OVERRIDE;
- virtual void connect(VRDesc* _desc) BX_OVERRIDE;
- virtual void disconnect() BX_OVERRIDE;
+ virtual bool init() override;
+ virtual void shutdown() override;
+ virtual void connect(VRDesc* _desc) override;
+ virtual void disconnect() override;
- virtual bool isConnected() const BX_OVERRIDE
+ virtual bool isConnected() const override
{
return NULL != m_session;
}
- virtual bool updateTracking(HMD& _hmd) BX_OVERRIDE;
- virtual void updateInput(HMD& _hmd) BX_OVERRIDE;
- virtual void recenter() BX_OVERRIDE;
+ virtual bool updateTracking(HMD& _hmd) override;
+ virtual void updateInput(HMD& _hmd) override;
+ virtual void recenter() override;
- virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) BX_OVERRIDE = 0;
- virtual void destroySwapChain() BX_OVERRIDE = 0;
- virtual void destroyMirror() BX_OVERRIDE = 0;
- virtual void makeRenderTargetActive(const VRDesc& _desc) BX_OVERRIDE = 0;
- virtual bool submitSwapChain(const VRDesc& _desc) BX_OVERRIDE = 0;
+ virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) override = 0;
+ virtual void destroySwapChain() override = 0;
+ virtual void destroyMirror() override = 0;
+ virtual void makeRenderTargetActive(const VRDesc& _desc) override = 0;
+ virtual bool submitSwapChain(const VRDesc& _desc) override = 0;
protected:
ovrSession m_session;
diff --git a/3rdparty/bgfx/src/image.h b/3rdparty/bgfx/src/image.h
deleted file mode 100644
index ef05a1f2ba7..00000000000
--- a/3rdparty/bgfx/src/image.h
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#ifndef BGFX_IMAGE_H_HEADER_GUARD
-#define BGFX_IMAGE_H_HEADER_GUARD
-
-#include <bx/pixelformat.h>
-
-namespace bgfx
-{
- struct ImageContainer
- {
- bx::AllocatorI* m_allocator;
- void* m_data;
-
- TextureFormat::Enum m_format;
-
- uint32_t m_size;
- uint32_t m_offset;
- uint32_t m_width;
- uint32_t m_height;
- uint32_t m_depth;
- uint16_t m_numLayers;
- uint8_t m_numMips;
- bool m_hasAlpha;
- bool m_cubeMap;
- bool m_ktx;
- bool m_ktxLE;
- bool m_srgb;
- };
-
- struct ImageMip
- {
- TextureFormat::Enum m_format;
- uint32_t m_width;
- uint32_t m_height;
- uint32_t m_blockSize;
- uint32_t m_size;
- uint8_t m_bpp;
- bool m_hasAlpha;
- const uint8_t* m_data;
- };
-
- struct ImageBlockInfo
- {
- uint8_t bitsPerPixel;
- uint8_t blockWidth;
- uint8_t blockHeight;
- uint8_t blockSize;
- uint8_t minBlockX;
- uint8_t minBlockY;
- uint8_t depthBits;
- uint8_t stencilBits;
- uint8_t rBits;
- uint8_t gBits;
- uint8_t bBits;
- uint8_t aBits;
- uint8_t encoding;
- };
-
- /// Returns true if texture format is compressed.
- bool isCompressed(TextureFormat::Enum _format);
-
- /// Returns true if texture format is uncompressed.
- bool isColor(TextureFormat::Enum _format);
-
- /// Returns true if texture format is depth.
- bool isDepth(TextureFormat::Enum _format);
-
- /// Returns true if texture format is valid.
- bool isValid(TextureFormat::Enum _format);
-
- /// Returns bits per pixel.
- uint8_t getBitsPerPixel(TextureFormat::Enum _format);
-
- /// Returns texture block info.
- const ImageBlockInfo& getBlockInfo(TextureFormat::Enum _format);
-
- /// Converts format to string.
- const char* getName(TextureFormat::Enum _format);
-
- /// Converts string to format.
- TextureFormat::Enum getFormat(const char* _name);
-
- /// Returns number of mip-maps required for complete mip-map chain.
- uint8_t imageGetNumMips(
- TextureFormat::Enum _format
- , uint16_t _width
- , uint16_t _height
- , uint16_t _depth = 0
- );
-
- /// Returns image size.
- uint32_t imageGetSize(
- TextureInfo* _info
- , uint16_t _width
- , uint16_t _height
- , uint16_t _depth
- , bool _cubeMap
- , bool _hasMips
- , uint16_t _numLayers
- , TextureFormat::Enum _format
- );
-
- ///
- void imageSolid(void* _dst, uint32_t _width, uint32_t _height, uint32_t _solid);
-
- ///
- void imageCheckerboard(void* _dst, uint32_t _width, uint32_t _height, uint32_t _step, uint32_t _0, uint32_t _1);
-
- ///
- void imageRgba8Downsample2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
-
- ///
- void imageRgba32fToLinear(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
-
- ///
- void imageRgba32fToGamma(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
-
- ///
- void imageRgba32fLinearDownsample2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
-
- ///
- void imageRgba32fDownsample2x2NormalMap(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
-
- ///
- void imageSwizzleBgra8(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src);
-
- ///
- void imageCopy(void* _dst, uint32_t _height, uint32_t _srcPitch, const void* _src, uint32_t _dstPitch);
-
- ///
- void imageCopy(void* _dst, uint32_t _width, uint32_t _height, uint32_t _bpp, uint32_t _pitch, const void* _src);
-
- ///
- bool imageConvert(TextureFormat::Enum _dstFormat, TextureFormat::Enum _srcFormat);
-
- ///
- void imageConvert(
- void* _dst
- , uint32_t _bpp
- , bx::PackFn _pack
- , const void* _src
- , bx::UnpackFn _unpack
- , uint32_t _size
- );
-
- ///
- void imageConvert(
- void* _dst
- , uint32_t _dstBpp
- , bx::PackFn _pack
- , const void* _src
- , uint32_t _srcBpp
- , bx::UnpackFn _unpack
- , uint32_t _width
- , uint32_t _height
- , uint32_t _srcPitch
- );
-
- ///
- bool imageConvert(
- void* _dst
- , TextureFormat::Enum _dstFormat
- , const void* _src
- , TextureFormat::Enum _srcFormat
- , uint32_t _width
- , uint32_t _height
- );
-
- ///
- ImageContainer* imageConvert(
- bx::AllocatorI* _allocator
- , TextureFormat::Enum _dstFormat
- , const void* _src
- , uint32_t _size
- );
-
- ///
- ImageContainer* imageAlloc(
- bx::AllocatorI* _allocator
- , TextureFormat::Enum _format
- , uint16_t _width
- , uint16_t _height
- , uint16_t _depth
- , uint16_t _numLayers
- , bool _cubeMap
- , bool _hasMips
- , const void* _data = NULL
- );
-
- ///
- void imageFree(ImageContainer* _imageContainer);
-
- ///
- void imageWriteTga(
- bx::WriterI* _writer
- , uint32_t _width
- , uint32_t _height
- , uint32_t _pitch
- , const void* _src
- , bool _grayscale
- , bool _yflip
- , bx::Error* _err = NULL
- );
-
- ///
- void imageWriteKtx(
- bx::WriterI* _writer
- , TextureFormat::Enum _format
- , bool _cubeMap
- , uint32_t _width
- , uint32_t _height
- , uint32_t _depth
- , uint8_t _numMips
- , const void* _src
- , bx::Error* _err = NULL
- );
-
- ///
- void imageWriteKtx(
- bx::WriterI* _writer
- , ImageContainer& _imageContainer
- , const void* _data
- , uint32_t _size
- , bx::Error* _err = NULL
- );
-
- ///
- bool imageParse(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader);
-
- ///
- bool imageParse(ImageContainer& _imageContainer, const void* _data, uint32_t _size);
-
- ///
- void imageDecodeToBgra8(void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _pitch, TextureFormat::Enum _format);
-
- ///
- void imageDecodeToRgba8(void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _pitch, TextureFormat::Enum _format);
-
- ///
- void imageDecodeToRgba32f(bx::AllocatorI* _allocator, void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _pitch, TextureFormat::Enum _format);
-
- ///
- bool imageGetRawData(const ImageContainer& _imageContainer, uint16_t _side, uint8_t _lod, const void* _data, uint32_t _size, ImageMip& _mip);
-
-} // namespace bgfx
-
-#endif // BGFX_IMAGE_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/src/nvapi.cpp b/3rdparty/bgfx/src/nvapi.cpp
new file mode 100644
index 00000000000..e4205c112df
--- /dev/null
+++ b/3rdparty/bgfx/src/nvapi.cpp
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "bgfx_p.h"
+#include "nvapi.h"
+
+namespace bgfx
+{
+ /*
+ * NVAPI
+ *
+ * Reference:
+ * http://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/index.html
+ * https://github.com/jNizM/AHK_NVIDIA_NvAPI/blob/master/info/NvAPI_IDs.txt
+ */
+ struct NvPhysicalGpuHandle;
+
+#define NVAPI_MAX_PHYSICAL_GPUS 64
+
+#if BX_PLATFORM_WINDOWS
+# define NVAPICALL __cdecl
+#else
+# define NVAPICALL
+#endif // BX_PLATFORM_WINDOWS
+
+ enum NvApiStatus
+ {
+ NVAPI_OK = 0,
+ NVAPI_ERROR = -1,
+ };
+
+ struct NvMemoryInfoV2
+ {
+ NvMemoryInfoV2()
+ : version(sizeof(NvMemoryInfoV2) | (2 << 16) )
+ {
+ }
+
+ uint32_t version;
+ uint32_t dedicatedVideoMemory;
+ uint32_t availableDedicatedVideoMemory;
+ uint32_t systemVideoMemory;
+ uint32_t sharedSystemMemory;
+ uint32_t curAvailableDedicatedVideoMemory;
+ };
+
+ typedef void* (NVAPICALL* PFN_NVAPI_QUERYINTERFACE)(uint32_t _functionOffset);
+ typedef NvApiStatus (NVAPICALL* PFN_NVAPI_INITIALIZE)();
+ typedef NvApiStatus (NVAPICALL* PFN_NVAPI_UNLOAD)();
+ typedef NvApiStatus (NVAPICALL* PFN_NVAPI_ENUMPHYSICALGPUS)(NvPhysicalGpuHandle* _handle[NVAPI_MAX_PHYSICAL_GPUS], uint32_t* _gpuCount);
+ typedef NvApiStatus (NVAPICALL* PFN_NVAPI_GPUGETMEMORYINFO)(NvPhysicalGpuHandle* _handle, NvMemoryInfoV2* _memoryInfo);
+ typedef NvApiStatus (NVAPICALL* PFN_NVAPI_GPUGETFULLNAME)(NvPhysicalGpuHandle* _physicalGpu, char _name[64]);
+
+#define NVAPI_INITIALIZE UINT32_C(0x0150e828)
+#define NVAPI_UNLOAD UINT32_C(0xd22bdd7e)
+#define NVAPI_ENUMPHYSICALGPUS UINT32_C(0xe5ac921f)
+#define NVAPI_GPUGETMEMORYINFO UINT32_C(0x07f9b368)
+#define NVAPI_GPUGETFULLNAME UINT32_C(0xceee8e9f)
+
+ static PFN_NVAPI_QUERYINTERFACE nvApiQueryInterface;
+ static PFN_NVAPI_INITIALIZE nvApiInitialize;
+ static PFN_NVAPI_UNLOAD nvApiUnload;
+ static PFN_NVAPI_ENUMPHYSICALGPUS nvApiEnumPhysicalGPUs;
+ static PFN_NVAPI_GPUGETMEMORYINFO nvApiGpuGetMemoryInfo;
+ static PFN_NVAPI_GPUGETFULLNAME nvApiGpuGetFullName;
+
+ NvApi::NvApi()
+ : m_nvApiDll(NULL)
+ , m_nvGpu(NULL)
+ {
+ }
+
+ void NvApi::init()
+ {
+ m_nvGpu = NULL;
+ m_nvApiDll = bx::dlopen(
+#if BX_ARCH_32BIT
+ "nvapi.dll"
+#else
+ "nvapi64.dll"
+#endif // BX_ARCH_32BIT
+ );
+
+ if (NULL != m_nvApiDll)
+ {
+ nvApiQueryInterface = (PFN_NVAPI_QUERYINTERFACE)bx::dlsym(m_nvApiDll, "nvapi_QueryInterface");
+
+ bool initialized = NULL != nvApiQueryInterface;
+
+ if (initialized)
+ {
+ nvApiInitialize = (PFN_NVAPI_INITIALIZE )nvApiQueryInterface(NVAPI_INITIALIZE);
+ nvApiUnload = (PFN_NVAPI_UNLOAD )nvApiQueryInterface(NVAPI_UNLOAD);
+ nvApiEnumPhysicalGPUs = (PFN_NVAPI_ENUMPHYSICALGPUS )nvApiQueryInterface(NVAPI_ENUMPHYSICALGPUS);
+ nvApiGpuGetMemoryInfo = (PFN_NVAPI_GPUGETMEMORYINFO )nvApiQueryInterface(NVAPI_GPUGETMEMORYINFO);
+ nvApiGpuGetFullName = (PFN_NVAPI_GPUGETFULLNAME )nvApiQueryInterface(NVAPI_GPUGETFULLNAME);
+
+ initialized = true
+ && NULL != nvApiInitialize
+ && NULL != nvApiUnload
+ && NULL != nvApiEnumPhysicalGPUs
+ && NULL != nvApiGpuGetMemoryInfo
+ && NULL != nvApiGpuGetFullName
+ && NVAPI_OK == nvApiInitialize()
+ ;
+
+ if (initialized)
+ {
+ NvPhysicalGpuHandle* physicalGpus[NVAPI_MAX_PHYSICAL_GPUS];
+ uint32_t numGpus = 0;
+ nvApiEnumPhysicalGPUs(physicalGpus, &numGpus);
+
+ initialized = 0 < numGpus;
+ if (initialized)
+ {
+ m_nvGpu = physicalGpus[0];
+ }
+
+ char name[64];
+ nvApiGpuGetFullName(m_nvGpu, name);
+ BX_TRACE("%s", name);
+ }
+
+ initialized = NULL != m_nvGpu;
+
+ if (!initialized)
+ {
+ nvApiUnload();
+ }
+ }
+
+ if (!initialized)
+ {
+ bx::dlclose(m_nvApiDll);
+ m_nvApiDll = NULL;
+ }
+
+ BX_WARN(!initialized, "NVAPI supported.");
+ }
+ }
+
+ void NvApi::shutdown()
+ {
+ if (NULL != m_nvGpu)
+ {
+ nvApiUnload();
+ m_nvGpu = NULL;
+ }
+
+ if (NULL != m_nvApiDll)
+ {
+ bx::dlclose(m_nvApiDll);
+ m_nvApiDll = NULL;
+ }
+ }
+
+ void NvApi::getMemoryInfo(int64_t& _gpuMemoryUsed, int64_t& _gpuMemoryMax)
+ {
+ if (NULL != m_nvGpu)
+ {
+ NvMemoryInfoV2 memInfo;
+ NvApiStatus status = nvApiGpuGetMemoryInfo(m_nvGpu, &memInfo);
+ if (NVAPI_OK == status)
+ {
+ _gpuMemoryMax = 1024 * memInfo.availableDedicatedVideoMemory;
+ _gpuMemoryUsed = 1024 * (memInfo.availableDedicatedVideoMemory - memInfo.curAvailableDedicatedVideoMemory);
+// BX_TRACE(" dedicatedVideoMemory: %d KiB", memInfo.dedicatedVideoMemory);
+// BX_TRACE(" availableDedicatedVideoMemory: %d KiB", memInfo.availableDedicatedVideoMemory);
+// BX_TRACE(" systemVideoMemory: %d KiB", memInfo.systemVideoMemory);
+// BX_TRACE(" sharedSystemMemory: %d KiB", memInfo.sharedSystemMemory);
+// BX_TRACE("curAvailableDedicatedVideoMemory: %d KiB", memInfo.curAvailableDedicatedVideoMemory);
+ }
+ }
+ else
+ {
+ _gpuMemoryMax = -INT64_MAX;
+ _gpuMemoryUsed = -INT64_MAX;
+ }
+ }
+
+} // namespace bgfx
diff --git a/3rdparty/bgfx/src/nvapi.h b/3rdparty/bgfx/src/nvapi.h
new file mode 100644
index 00000000000..ce08052b3aa
--- /dev/null
+++ b/3rdparty/bgfx/src/nvapi.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#ifndef BGFX_NVAPI_H_HEADER_GUARD
+#define BGFX_NVAPI_H_HEADER_GUARD
+
+namespace bgfx
+{
+ struct NvPhysicalGpuHandle;
+
+ ///
+ struct NvApi
+ {
+ ///
+ NvApi();
+
+ ///
+ void init();
+
+ ///
+ void shutdown();
+
+ ///
+ void getMemoryInfo(int64_t& _gpuMemoryUsed, int64_t& _gpuMemoryMax);
+
+ void* m_nvApiDll;
+ NvPhysicalGpuHandle* m_nvGpu;
+ };
+
+} // namespace bgfx
+
+#endif // BGFX_NVAPI_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/src/renderer.h b/3rdparty/bgfx/src/renderer.h
index 1bf8fbba072..e5c1cbd4c2f 100644
--- a/3rdparty/bgfx/src/renderer.h
+++ b/3rdparty/bgfx/src/renderer.h
@@ -10,6 +10,37 @@
namespace bgfx
{
+ struct BlitState
+ {
+ BlitState(const Frame* _frame)
+ : m_frame(_frame)
+ , m_item(0)
+ {
+ m_key.decode(_frame->m_blitKeys[0]);
+ }
+
+ bool hasItem(uint16_t _view) const
+ {
+ return m_item < m_frame->m_numBlitItems
+ && m_key.m_view <= _view
+ ;
+ }
+
+ const BlitItem& advance()
+ {
+ const BlitItem& bi = m_frame->m_blitItem[m_key.m_item];
+
+ ++m_item;
+ m_key.decode(m_frame->m_blitKeys[m_item]);
+
+ return bi;
+ }
+
+ const Frame* m_frame;
+ BlitKey m_key;
+ uint16_t m_item;
+ };
+
struct ViewState
{
ViewState()
@@ -28,7 +59,7 @@ namespace bgfx
m_invProjCached = UINT16_MAX;
m_invViewProjCached = UINT16_MAX;
- m_view[0] = _frame->m_view;
+ m_view[0] = m_viewTmp[0];
m_view[1] = m_viewTmp[1];
if (_hmdEnabled)
@@ -48,20 +79,27 @@ namespace bgfx
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
- if (BGFX_VIEW_STEREO == (_frame->m_viewFlags[ii] & BGFX_VIEW_STEREO) )
+ if (BGFX_VIEW_STEREO == (_frame->m_view[ii].m_flags & BGFX_VIEW_STEREO) )
{
bx::float4x4_mul(&m_view[eye][ii].un.f4x4
- , &_frame->m_view[ii].un.f4x4
+ , &_frame->m_view[ii].m_view.un.f4x4
, &viewAdjust.un.f4x4
);
}
else
{
- bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].un.f4x4, sizeof(Matrix4) );
+ bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) );
}
}
}
}
+ else
+ {
+ for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
+ {
+ bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) );
+ }
+ }
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
@@ -69,18 +107,20 @@ namespace bgfx
{
bx::float4x4_mul(&m_viewProj[eye][ii].un.f4x4
, &m_view[eye][ii].un.f4x4
- , &_frame->m_proj[eye][ii].un.f4x4
+ , &_frame->m_view[ii].m_proj[eye].un.f4x4
);
}
}
}
template<uint16_t mtxRegs, typename RendererContext, typename Program, typename Draw>
- void setPredefined(RendererContext* _renderer, uint16_t _view, uint8_t _eye, Program& _program, Frame* _frame, const Draw& _draw)
+ void setPredefined(RendererContext* _renderer, uint16_t _view, uint8_t _eye, const Program& _program, const Frame* _frame, const Draw& _draw)
{
+ const FrameCache& frameCache = _frame->m_frameCache;
+
for (uint32_t ii = 0, num = _program.m_numPredefined; ii < num; ++ii)
{
- PredefinedUniform& predefined = _program.m_predefined[ii];
+ const PredefinedUniform& predefined = _program.m_predefined[ii];
uint8_t flags = predefined.m_type&BGFX_UNIFORM_FRAGMENTBIT;
switch (predefined.m_type&(~BGFX_UNIFORM_FRAGMENTBIT) )
{
@@ -147,7 +187,7 @@ namespace bgfx
{
_renderer->setShaderUniform4x4f(flags
, predefined.m_loc
- , _frame->m_proj[_eye][_view].un.val
+ , _frame->m_view[_view].m_proj[_eye].un.val
, bx::uint32_min(mtxRegs, predefined.m_count)
);
}
@@ -160,7 +200,7 @@ namespace bgfx
{
m_invProjCached = viewEye;
bx::float4x4_inverse(&m_invProj.un.f4x4
- , &_frame->m_proj[_eye][_view].un.f4x4
+ , &_frame->m_view[_view].m_proj[_eye].un.f4x4
);
}
@@ -203,11 +243,11 @@ namespace bgfx
case PredefinedUniform::Model:
{
- const Matrix4& model = _frame->m_matrixCache.m_cache[_draw.m_matrix];
+ const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix];
_renderer->setShaderUniform4x4f(flags
, predefined.m_loc
, model.un.val
- , bx::uint32_min(_draw.m_num*mtxRegs, predefined.m_count)
+ , bx::uint32_min(_draw.m_numMatrices*mtxRegs, predefined.m_count)
);
}
break;
@@ -215,7 +255,7 @@ namespace bgfx
case PredefinedUniform::ModelView:
{
Matrix4 modelView;
- const Matrix4& model = _frame->m_matrixCache.m_cache[_draw.m_matrix];
+ const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix];
bx::float4x4_mul(&modelView.un.f4x4
, &model.un.f4x4
, &m_view[_eye][_view].un.f4x4
@@ -231,7 +271,7 @@ namespace bgfx
case PredefinedUniform::ModelViewProj:
{
Matrix4 modelViewProj;
- const Matrix4& model = _frame->m_matrixCache.m_cache[_draw.m_matrix];
+ const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix];
bx::float4x4_mul(&modelViewProj.un.f4x4
, &model.un.f4x4
, &m_viewProj[_eye][_view].un.f4x4
@@ -436,6 +476,95 @@ namespace bgfx
HashMap m_hashMap;
};
+ inline bool hasVertexStreamChanged(const RenderDraw& _current, const RenderDraw& _new)
+ {
+ if (_current.m_streamMask != _new.m_streamMask
+ || _current.m_instanceDataBuffer.idx != _new.m_instanceDataBuffer.idx
+ || _current.m_instanceDataOffset != _new.m_instanceDataOffset
+ || _current.m_instanceDataStride != _new.m_instanceDataStride)
+ {
+ return true;
+ }
+
+ for (uint32_t idx = 0, streamMask = _new.m_streamMask, ntz = bx::uint32_cnttz(streamMask)
+ ; 0 != streamMask
+ ; streamMask >>= 1, idx += 1, ntz = bx::uint32_cnttz(streamMask)
+ )
+ {
+ streamMask >>= ntz;
+ idx += ntz;
+
+ if (_current.m_stream[idx].m_handle.idx != _new.m_stream[idx].m_handle.idx
+ || _current.m_stream[idx].m_startVertex != _new.m_stream[idx].m_startVertex)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ template<typename Ty>
+ struct Profiler
+ {
+ Profiler(Frame* _frame, Ty& _gpuTimer, const char (*_viewName)[BGFX_CONFIG_MAX_VIEW_NAME], bool _enabled = true)
+ : m_viewName(_viewName)
+ , m_frame(_frame)
+ , m_gpuTimer(_gpuTimer)
+ , m_queryIdx(UINT32_MAX)
+ , m_numViews(0)
+ , m_enabled(_enabled && 0 != (_frame->m_debug & BGFX_DEBUG_PROFILER) )
+ {
+ }
+
+ ~Profiler()
+ {
+ m_frame->m_perfStats.numViews = m_numViews;
+ }
+
+ void begin(uint16_t _view)
+ {
+ if (m_enabled)
+ {
+ ViewStats& viewStats = m_frame->m_perfStats.viewStats[m_numViews];
+ viewStats.cpuTimeElapsed = -bx::getHPCounter();
+
+ m_queryIdx = m_gpuTimer.begin(_view);
+
+ viewStats.view = ViewId(_view);
+ bx::strCopy(viewStats.name
+ , BGFX_CONFIG_MAX_VIEW_NAME
+ , &m_viewName[_view][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
+ );
+ }
+ }
+
+ void end()
+ {
+ if (m_enabled
+ && UINT32_MAX != m_queryIdx)
+ {
+ m_gpuTimer.end(m_queryIdx);
+
+ ViewStats& viewStats = m_frame->m_perfStats.viewStats[m_numViews];
+ const typename Ty::Result& result = m_gpuTimer.m_result[viewStats.view];
+
+ viewStats.cpuTimeElapsed += bx::getHPCounter();
+ viewStats.gpuTimeElapsed = result.m_end - result.m_begin;
+
+ ++m_numViews;
+ m_queryIdx = UINT32_MAX;
+ }
+ }
+
+ const char (*m_viewName)[BGFX_CONFIG_MAX_VIEW_NAME];
+ Frame* m_frame;
+ Ty& m_gpuTimer;
+ uint32_t m_queryIdx;
+ uint16_t m_numViews;
+ bool m_enabled;
+ };
+
} // namespace bgfx
#endif // BGFX_RENDERER_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/src/renderer_d3d.h b/3rdparty/bgfx/src/renderer_d3d.h
index 3b0f48a0c65..a654ab073b9 100644
--- a/3rdparty/bgfx/src/renderer_d3d.h
+++ b/3rdparty/bgfx/src/renderer_d3d.h
@@ -71,10 +71,10 @@ namespace bgfx
#define DX_RELEASE(_ptr, _expected) _DX_RELEASE(_ptr, _expected, BX_CHECK)
#define DX_RELEASE_WARNONLY(_ptr, _expected) _DX_RELEASE(_ptr, _expected, BX_WARN)
- typedef int (WINAPI* PFN_D3DPERF_BEGIN_EVENT)(DWORD _color, LPCWSTR _wszName);
+ typedef int (WINAPI* PFN_D3DPERF_BEGIN_EVENT)(DWORD _color, LPCWSTR _name);
typedef int (WINAPI* PFN_D3DPERF_END_EVENT)();
- typedef void (WINAPI* PFN_D3DPERF_SET_MARKER)(DWORD _color, LPCWSTR _wszName);
- typedef void (WINAPI* PFN_D3DPERF_SET_REGION)(DWORD _color, LPCWSTR _wszName);
+ typedef void (WINAPI* PFN_D3DPERF_SET_MARKER)(DWORD _color, LPCWSTR _name);
+ typedef void (WINAPI* PFN_D3DPERF_SET_REGION)(DWORD _color, LPCWSTR _name);
typedef BOOL (WINAPI* PFN_D3DPERF_QUERY_REPEAT_FRAME)();
typedef void (WINAPI* PFN_D3DPERF_SET_OPTIONS)(DWORD _options);
typedef DWORD (WINAPI* PFN_D3DPERF_GET_STATUS)();
diff --git a/3rdparty/bgfx/src/renderer_d3d11.cpp b/3rdparty/bgfx/src/renderer_d3d11.cpp
index 2a65c2a2c1d..0a22fa4b443 100644
--- a/3rdparty/bgfx/src/renderer_d3d11.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d11.cpp
@@ -15,20 +15,6 @@
# endif // BX_PLATFORM_WINRT
#endif // !BX_PLATFORM_WINDOWS
-#if BGFX_CONFIG_PROFILER_REMOTERY
-# define BGFX_GPU_PROFILER_BIND(_device, _context) rmt_BindD3D11(_device, _context)
-# define BGFX_GPU_PROFILER_UNBIND() rmt_UnbindD3D11()
-# define BGFX_GPU_PROFILER_BEGIN(_group, _name, _color) rmt_BeginD3D11Sample(_group##_##_name)
-# define BGFX_GPU_PROFILER_BEGIN_DYNAMIC(_namestr) rmt_BeginD3D11SampleDynamic(_namestr)
-# define BGFX_GPU_PROFILER_END() rmt_EndD3D11Sample()
-#else
-# define BGFX_GPU_PROFILER_BIND(_device, _context) BX_NOOP()
-# define BGFX_GPU_PROFILER_UNBIND() BX_NOOP()
-# define BGFX_GPU_PROFILER_BEGIN(_group, _name, _color) BX_NOOP()
-# define BGFX_GPU_PROFILER_BEGIN_DYNAMIC(_namestr) BX_NOOP()
-# define BGFX_GPU_PROFILER_END() BX_NOOP()
-#endif
-
#if BGFX_CONFIG_USE_OVR
# include "hmd_ovr.h"
#endif // BGFX_CONFIG_USE_OVR
@@ -287,7 +273,7 @@ namespace bgfx { namespace d3d11
{ DXGI_FORMAT_B4G4R4A4_UNORM, DXGI_FORMAT_B4G4R4A4_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGBA4
{ DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB5A1
{ DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB10A2
- { DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // R11G11B10F
+ { DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG11B10F
{ DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // UnknownDepth
{ DXGI_FORMAT_R16_TYPELESS, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_D16_UNORM, DXGI_FORMAT_UNKNOWN }, // D16
{ DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, DXGI_FORMAT_D24_UNORM_S8_UINT, DXGI_FORMAT_UNKNOWN }, // D24
@@ -308,6 +294,8 @@ namespace bgfx { namespace d3d11
{ "BITANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 1, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ { "COLOR", 2, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ { "COLOR", 3, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "BLENDINDICES", 0, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "BLENDWEIGHT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
@@ -356,7 +344,7 @@ namespace bgfx { namespace d3d11
};
BX_STATIC_ASSERT(AttribType::Count == BX_COUNTOF(s_attribType) );
- static D3D11_INPUT_ELEMENT_DESC* fillVertexDecl(D3D11_INPUT_ELEMENT_DESC* _out, const VertexDecl& _decl)
+ static D3D11_INPUT_ELEMENT_DESC* fillVertexDecl(uint8_t _stream, D3D11_INPUT_ELEMENT_DESC* _out, const VertexDecl& _decl)
{
D3D11_INPUT_ELEMENT_DESC* elem = _out;
@@ -366,6 +354,8 @@ namespace bgfx { namespace d3d11
{
bx::memCopy(elem, &s_attrib[attr], sizeof(D3D11_INPUT_ELEMENT_DESC) );
+ elem->InputSlot = _stream;
+
if (0 == _decl.m_attributes[attr])
{
elem->AlignedByteOffset = 0;
@@ -409,19 +399,20 @@ namespace bgfx { namespace d3d11
BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG("-Wunused-const-variable");
BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG("-Wunneeded-internal-declaration");
- static const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22, 0x9188, 0x4b0c, { 0x87, 0x42, 0xac, 0xb0, 0xbf, 0x85, 0xc2, 0x00 } };
- static const GUID IID_ID3D11Texture2D = { 0x6f15aaf2, 0xd208, 0x4e89, { 0x9a, 0xb4, 0x48, 0x95, 0x35, 0xd3, 0x4f, 0x9c } };
- static const GUID IID_IDXGIFactory = { 0x7b7166ec, 0x21c7, 0x44ae, { 0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69 } };
- static const GUID IID_IDXGIDevice0 = { 0x54ec77fa, 0x1377, 0x44e6, { 0x8c, 0x32, 0x88, 0xfd, 0x5f, 0x44, 0xc8, 0x4c } };
- static const GUID IID_IDXGIDevice1 = { 0x77db970f, 0x6276, 0x48ba, { 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c } };
- static const GUID IID_IDXGIDevice2 = { 0x05008617, 0xfbfd, 0x4051, { 0xa7, 0x90, 0x14, 0x48, 0x84, 0xb4, 0xf6, 0xa9 } };
- static const GUID IID_IDXGIDevice3 = { 0x6007896c, 0x3244, 0x4afd, { 0xbf, 0x18, 0xa6, 0xd3, 0xbe, 0xda, 0x50, 0x23 } };
- static const GUID IID_ID3D11Device1 = { 0xa04bfb29, 0x08ef, 0x43d6, { 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86 } };
- static const GUID IID_ID3D11Device2 = { 0x9d06dffa, 0xd1e5, 0x4d07, { 0x83, 0xa8, 0x1b, 0xb1, 0x23, 0xf2, 0xf8, 0x41 } };
- static const GUID IID_ID3D11Device3 = { 0xa05c8c37, 0xd2c6, 0x4732, { 0xb3, 0xa0, 0x9c, 0xe0, 0xb0, 0xdc, 0x9a, 0xe6 } };
- static const GUID IID_IDXGIAdapter = { 0x2411e7e1, 0x12ac, 0x4ccf, { 0xbd, 0x14, 0x97, 0x98, 0xe8, 0x53, 0x4d, 0xc0 } };
- static const GUID IID_ID3D11InfoQueue = { 0x6543dbb6, 0x1b48, 0x42f5, { 0xab, 0x82, 0xe9, 0x7e, 0xc7, 0x43, 0x26, 0xf6 } };
- static const GUID IID_IDXGIDeviceRenderDoc = { 0xa7aa6116, 0x9c8d, 0x4bba, { 0x90, 0x83, 0xb4, 0xd8, 0x16, 0xb7, 0x1b, 0x78 } };
+ static const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22, 0x9188, 0x4b0c, { 0x87, 0x42, 0xac, 0xb0, 0xbf, 0x85, 0xc2, 0x00 } };
+ static const GUID IID_ID3D11Texture2D = { 0x6f15aaf2, 0xd208, 0x4e89, { 0x9a, 0xb4, 0x48, 0x95, 0x35, 0xd3, 0x4f, 0x9c } };
+ static const GUID IID_IDXGIFactory = { 0x7b7166ec, 0x21c7, 0x44ae, { 0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69 } };
+ static const GUID IID_IDXGIDevice0 = { 0x54ec77fa, 0x1377, 0x44e6, { 0x8c, 0x32, 0x88, 0xfd, 0x5f, 0x44, 0xc8, 0x4c } };
+ static const GUID IID_IDXGIDevice1 = { 0x77db970f, 0x6276, 0x48ba, { 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c } };
+ static const GUID IID_IDXGIDevice2 = { 0x05008617, 0xfbfd, 0x4051, { 0xa7, 0x90, 0x14, 0x48, 0x84, 0xb4, 0xf6, 0xa9 } };
+ static const GUID IID_IDXGIDevice3 = { 0x6007896c, 0x3244, 0x4afd, { 0xbf, 0x18, 0xa6, 0xd3, 0xbe, 0xda, 0x50, 0x23 } };
+ static const GUID IID_ID3D11Device1 = { 0xa04bfb29, 0x08ef, 0x43d6, { 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86 } };
+ static const GUID IID_ID3D11Device2 = { 0x9d06dffa, 0xd1e5, 0x4d07, { 0x83, 0xa8, 0x1b, 0xb1, 0x23, 0xf2, 0xf8, 0x41 } };
+ static const GUID IID_ID3D11Device3 = { 0xa05c8c37, 0xd2c6, 0x4732, { 0xb3, 0xa0, 0x9c, 0xe0, 0xb0, 0xdc, 0x9a, 0xe6 } };
+ static const GUID IID_IDXGIAdapter = { 0x2411e7e1, 0x12ac, 0x4ccf, { 0xbd, 0x14, 0x97, 0x98, 0xe8, 0x53, 0x4d, 0xc0 } };
+ static const GUID IID_ID3D11InfoQueue = { 0x6543dbb6, 0x1b48, 0x42f5, { 0xab, 0x82, 0xe9, 0x7e, 0xc7, 0x43, 0x26, 0xf6 } };
+ static const GUID IID_IDXGIDeviceRenderDoc = { 0xa7aa6116, 0x9c8d, 0x4bba, { 0x90, 0x83, 0xb4, 0xd8, 0x16, 0xb7, 0x1b, 0x78 } };
+ static const GUID IID_ID3DUserDefinedAnnotation = { 0xb2daad8b, 0x03d4, 0x4dbf, { 0x95, 0xeb, 0x32, 0xab, 0x4b, 0x63, 0xd0, 0xab } };
enum D3D11_FORMAT_SUPPORT2
{
@@ -455,6 +446,35 @@ namespace bgfx { namespace d3d11
;
}
+ static const char* getLostReason(HRESULT _hr)
+ {
+ switch (_hr)
+ {
+ // The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.
+ case DXGI_ERROR_DEVICE_REMOVED: return "DXGI_ERROR_DEVICE_REMOVED";
+
+ // The GPU will not respond to more commands, most likely because of an invalid command passed by the calling application.
+ case DXGI_ERROR_DEVICE_HUNG: return "DXGI_ERROR_DEVICE_HUNG";
+
+ // The GPU will not respond to more commands, most likely because some other application submitted invalid commands.
+ // The calling application should re-create the device and continue.
+ case DXGI_ERROR_DEVICE_RESET: return "DXGI_ERROR_DEVICE_RESET";
+
+ // An internal issue prevented the driver from carrying out the specified operation. The driver's state is probably
+ // suspect, and the application should not continue.
+ case DXGI_ERROR_DRIVER_INTERNAL_ERROR: return "DXGI_ERROR_DRIVER_INTERNAL_ERROR";
+
+ // A resource is not available at the time of the call, but may become available later.
+ case DXGI_ERROR_NOT_CURRENTLY_AVAILABLE: return "DXGI_ERROR_NOT_CURRENTLY_AVAILABLE";
+
+ case S_OK: return "S_OK";
+
+ default: break;
+ }
+
+ return "Unknown HRESULT?";
+ }
+
template <typename Ty>
static BX_NO_INLINE void setDebugObjectName(Ty* _interface, const char* _format, ...)
{
@@ -543,8 +563,12 @@ namespace bgfx { namespace d3d11
#endif // BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT
}
- // Reference:
- // https://github.com/GPUOpen-LibrariesAndSDKs/AGS_SDK
+ /*
+ * AMD GPU Services (AGS) library
+ *
+ * Reference:
+ * https://github.com/GPUOpen-LibrariesAndSDKs/AGS_SDK
+ */
enum AGS_RETURN_CODE
{
AGS_SUCCESS,
@@ -616,17 +640,21 @@ namespace bgfx { namespace d3d11
static PFN_GET_DEBUG_INTERFACE1 DXGIGetDebugInterface1;
#endif // USE_D3D11_DYNAMIC_LIB
+ int WINAPI d3d11Annotation_BeginEvent(DWORD _color, LPCWSTR _name);
+ int WINAPI d3d11Annotation_EndEvent();
+ void WINAPI d3d11Annotation_SetMarker(DWORD _color, LPCWSTR _name);
+
#if BGFX_CONFIG_USE_OVR
class VRImplOVRD3D11 : public VRImplOVR
{
public:
VRImplOVRD3D11();
- virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) BX_OVERRIDE;
- virtual void destroySwapChain() BX_OVERRIDE;
- virtual void destroyMirror() BX_OVERRIDE;
- virtual void makeRenderTargetActive(const VRDesc& _desc) BX_OVERRIDE;
- virtual bool submitSwapChain(const VRDesc& _desc) BX_OVERRIDE;
+ virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) override;
+ virtual void destroySwapChain() override;
+ virtual void destroyMirror() override;
+ virtual void makeRenderTargetActive(const VRDesc& _desc) override;
+ virtual bool submitSwapChain(const VRDesc& _desc) override;
private:
ID3D11DepthStencilView* m_depthBuffer;
@@ -654,10 +682,11 @@ namespace bgfx { namespace d3d11
, m_adapter(NULL)
, m_factory(NULL)
, m_swapChain(NULL)
- , m_lost(0)
+ , m_lost(false)
, m_numWindows(0)
, m_device(NULL)
, m_deviceCtx(NULL)
+ , m_annotation(NULL)
, m_infoQueue(NULL)
, m_backBufferColor(NULL)
, m_backBufferDepthStencil(NULL)
@@ -674,7 +703,7 @@ namespace bgfx { namespace d3d11
, m_rtMsaa(false)
, m_timerQuerySupport(false)
{
- m_fbh.idx = invalidHandle;
+ m_fbh.idx = kInvalidHandle;
bx::memSet(&m_adapterDesc, 0, sizeof(m_adapterDesc) );
bx::memSet(&m_scd, 0, sizeof(m_scd) );
bx::memSet(&m_windows, 0xff, sizeof(m_windows) );
@@ -711,18 +740,18 @@ namespace bgfx { namespace d3d11
m_renderdocdll = loadRenderDoc();
}
- m_fbh.idx = invalidHandle;
+ m_fbh.idx = kInvalidHandle;
bx::memSet(m_uniforms, 0, sizeof(m_uniforms) );
bx::memSet(&m_resolution, 0, sizeof(m_resolution) );
m_ags = NULL;
m_agsdll = bx::dlopen(
#if BX_ARCH_32BIT
- "amd_ags_x86.dll"
+ "amd_ags_x86.dll"
#else
- "amd_ags_x64.dll"
+ "amd_ags_x64.dll"
#endif // BX_ARCH_32BIT
- );
+ );
if (NULL != m_agsdll)
{
agsInit = (PFN_AGS_INIT )bx::dlsym(m_agsdll, "agsInit");
@@ -795,12 +824,14 @@ namespace bgfx { namespace d3d11
}
}
+ m_nvapi.init();
+
#if USE_D3D11_DYNAMIC_LIB
m_d3d11dll = bx::dlopen("d3d11.dll");
if (NULL == m_d3d11dll)
{
- BX_TRACE("Failed to load d3d11.dll.");
+ BX_TRACE("Init error: Failed to load d3d11.dll.");
goto error;
}
@@ -829,14 +860,14 @@ namespace bgfx { namespace d3d11
D3D11CreateDevice = (PFN_D3D11_CREATE_DEVICE)bx::dlsym(m_d3d11dll, "D3D11CreateDevice");
if (NULL == D3D11CreateDevice)
{
- BX_TRACE("Function D3D11CreateDevice not found.");
+ BX_TRACE("Init error: Function D3D11CreateDevice not found.");
goto error;
}
m_dxgidll = bx::dlopen("dxgi.dll");
if (NULL == m_dxgidll)
{
- BX_TRACE("Failed to load dxgi.dll.");
+ BX_TRACE("Init error: Failed to load dxgi.dll.");
goto error;
}
@@ -849,7 +880,7 @@ namespace bgfx { namespace d3d11
}
if (NULL == CreateDXGIFactory)
{
- BX_TRACE("Function CreateDXGIFactory not found.");
+ BX_TRACE("Init error: Function CreateDXGIFactory not found.");
goto error;
}
@@ -884,7 +915,7 @@ namespace bgfx { namespace d3d11
#endif // BX_PLATFORM_*
if (FAILED(hr) )
{
- BX_TRACE("Unable to create DXGI factory.");
+ BX_TRACE("Init error: Unable to create DXGI factory.");
goto error;
}
@@ -945,7 +976,7 @@ namespace bgfx { namespace d3d11
}
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PERFHUD)
- && 0 != strstr(description, "PerfHUD") )
+ && 0 != bx::strFind(description, "PerfHUD") )
{
m_adapter = adapter;
m_driverType = D3D_DRIVER_TYPE_REFERENCE;
@@ -1026,7 +1057,7 @@ namespace bgfx { namespace d3d11
if (FAILED(hr) )
{
- BX_TRACE("Unable to create Direct3D11 device.");
+ BX_TRACE("Init error: Unable to create Direct3D11 device.");
goto error;
}
@@ -1041,7 +1072,7 @@ namespace bgfx { namespace d3d11
if (NULL == m_deviceCtx)
{
- BX_TRACE("Unable to retrieve Direct3D11 ImmediateContext.");
+ BX_TRACE("Init error: Unable to retrieve Direct3D11 ImmediateContext.");
goto error;
}
@@ -1102,7 +1133,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
if (FAILED(hr) )
{
- BX_TRACE("Unable to create Direct3D11 device.");
+ BX_TRACE("Init error: Unable to create Direct3D11 device.");
goto error;
}
@@ -1141,7 +1172,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
DX_RELEASE(adapter, 2);
if (FAILED(hr) )
{
- BX_TRACE("Unable to create Direct3D11 device.");
+ BX_TRACE("Init error: Unable to create Direct3D11 device.");
goto error;
}
@@ -1201,7 +1232,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
DX_RELEASE(adapter, 2);
if (FAILED(hr) )
{
- BX_TRACE("Unable to create Direct3D11 device.");
+ BX_TRACE("Init error: Unable to create Direct3D11 device.");
goto error;
}
@@ -1230,7 +1261,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
#endif // BX_PLATFORM_*
if (FAILED(hr) )
{
- BX_TRACE("Failed to create swap chain.");
+ BX_TRACE("Init error: Failed to create swap chain.");
goto error;
}
}
@@ -1247,6 +1278,20 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_numWindows = 1;
+#if USE_D3D11_DYNAMIC_LIB
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
+ {
+ hr = m_deviceCtx->QueryInterface(IID_ID3DUserDefinedAnnotation, (void**)&m_annotation);
+
+ if (SUCCEEDED(hr) )
+ {
+ D3DPERF_BeginEvent = d3d11Annotation_BeginEvent;
+ D3DPERF_EndEvent = d3d11Annotation_EndEvent;
+ D3DPERF_SetMarker = d3d11Annotation_SetMarker;
+ }
+ }
+#endif // USE_D3D11_DYNAMIC_LIB
+
if (BX_ENABLED(BGFX_CONFIG_DEBUG) )
{
hr = m_device->QueryInterface(IID_ID3D11InfoQueue, (void**)&m_infoQueue);
@@ -1264,8 +1309,19 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
D3D11_MESSAGE_CATEGORY_STATE_CREATION,
};
+
filter.DenyList.NumCategories = BX_COUNTOF(catlist);
filter.DenyList.pCategoryList = catlist;
+
+ D3D11_MESSAGE_ID idlist[] =
+ {
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET,
+ D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS,
+ };
+
+ filter.DenyList.NumIDs = BX_COUNTOF(idlist);
+ filter.DenyList.pIDList = idlist;
+
m_infoQueue->PushStorageFilter(&filter);
DX_RELEASE(m_infoQueue, 3);
@@ -1296,18 +1352,39 @@ BX_PRAGMA_DIAGNOSTIC_POP();
if (m_featureLevel <= D3D_FEATURE_LEVEL_9_2)
{
g_caps.limits.maxTextureSize = D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) );
+ g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(
+ D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT
+ , BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS
+ ) );
+ g_caps.limits.maxVertexStreams = uint8_t(bx::uint32_min(
+ 16
+ , BGFX_CONFIG_MAX_VERTEX_STREAMS
+ ) );
}
else if (m_featureLevel == D3D_FEATURE_LEVEL_9_3)
{
g_caps.limits.maxTextureSize = D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) );
+ g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(
+ D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT
+ , BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS
+ ) );
+ g_caps.limits.maxVertexStreams = uint8_t(bx::uint32_min(
+ 16
+ , BGFX_CONFIG_MAX_VERTEX_STREAMS
+ ) );
}
else
{
g_caps.supported |= BGFX_CAPS_TEXTURE_COMPARE_ALL;
g_caps.limits.maxTextureSize = D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) );
+ g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(
+ D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT
+ , BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS
+ ) );
+ g_caps.limits.maxVertexStreams = uint8_t(bx::uint32_min(
+ D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT
+ , BGFX_CONFIG_MAX_VERTEX_STREAMS
+ ) );
}
// 32-bit indices only supported on 9_2+.
@@ -1386,7 +1463,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
uint16_t support = BGFX_CAPS_FORMAT_TEXTURE_NONE;
- const DXGI_FORMAT fmt = isDepth(TextureFormat::Enum(ii) )
+ const DXGI_FORMAT fmt = bimg::isDepth(bimg::TextureFormat::Enum(ii) )
? s_textureFormat[ii].m_fmtDsv
: s_textureFormat[ii].m_fmt
;
@@ -1615,8 +1692,6 @@ BX_PRAGMA_DIAGNOSTIC_POP();
postReset();
}
- BGFX_GPU_PROFILER_BIND(m_device, m_deviceCtx);
-
g_internalData.context = m_device;
return true;
@@ -1653,12 +1728,17 @@ BX_PRAGMA_DIAGNOSTIC_POP();
case ErrorState::Default:
default:
+ m_nvapi.shutdown();
+
if (NULL != m_ags)
{
agsDeInit(m_ags);
+ m_ags = NULL;
}
+
bx::dlclose(m_agsdll);
m_agsdll = NULL;
+
unloadRenderDoc(m_renderdocdll);
m_ovr.shutdown();
break;
@@ -1669,11 +1749,11 @@ BX_PRAGMA_DIAGNOSTIC_POP();
void shutdown()
{
- BGFX_GPU_PROFILER_UNBIND();
-
preReset();
m_ovr.shutdown();
+ m_nvapi.shutdown();
+
if (NULL != m_ags)
{
agsDeInit(m_ags);
@@ -1712,6 +1792,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_textures[ii].destroy();
}
+ DX_RELEASE(m_annotation, 1);
DX_RELEASE(m_swapChain, 0);
DX_RELEASE(m_deviceCtx, 0);
DX_RELEASE(m_device, 0);
@@ -1740,117 +1821,117 @@ BX_PRAGMA_DIAGNOSTIC_POP();
#endif // USE_D3D11_DYNAMIC_LIB
}
- RendererType::Enum getRendererType() const BX_OVERRIDE
+ RendererType::Enum getRendererType() const override
{
return RendererType::Direct3D11;
}
- const char* getRendererName() const BX_OVERRIDE
+ const char* getRendererName() const override
{
return BGFX_RENDERER_DIRECT3D11_NAME;
}
- void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) BX_OVERRIDE
+ void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_mem->size, _mem->data, _flags);
}
- void destroyIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE
+ void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) override
{
VertexDecl& decl = m_vertexDecls[_handle.idx];
bx::memCopy(&decl, &_decl, sizeof(VertexDecl) );
dump(decl);
}
- void destroyVertexDecl(VertexDeclHandle /*_handle*/) BX_OVERRIDE
+ void destroyVertexDecl(VertexDeclHandle /*_handle*/) override
{
}
- void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) BX_OVERRIDE
+ void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) override
{
m_vertexBuffers[_handle.idx].create(_mem->size, _mem->data, _declHandle, _flags);
}
- void destroyVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_size, NULL, _flags);
}
- void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_indexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
VertexDeclHandle decl = BGFX_INVALID_HANDLE;
m_vertexBuffers[_handle.idx].create(_size, NULL, decl, _flags);
}
- void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_vertexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createShader(ShaderHandle _handle, Memory* _mem) BX_OVERRIDE
+ void createShader(ShaderHandle _handle, Memory* _mem) override
{
m_shaders[_handle.idx].create(_mem);
}
- void destroyShader(ShaderHandle _handle) BX_OVERRIDE
+ void destroyShader(ShaderHandle _handle) override
{
m_shaders[_handle.idx].destroy();
}
- void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) BX_OVERRIDE
+ void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) override
{
m_program[_handle.idx].create(&m_shaders[_vsh.idx], isValid(_fsh) ? &m_shaders[_fsh.idx] : NULL);
}
- void destroyProgram(ProgramHandle _handle) BX_OVERRIDE
+ void destroyProgram(ProgramHandle _handle) override
{
m_program[_handle.idx].destroy();
}
- void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) BX_OVERRIDE
+ void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) override
{
m_textures[_handle.idx].create(_mem, _flags, _skip);
}
- void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) BX_OVERRIDE
+ void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) override
{
}
- void updateTexture(TextureHandle _handle, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) BX_OVERRIDE
+ void updateTexture(TextureHandle _handle, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) override
{
m_textures[_handle.idx].update(_side, _mip, _rect, _z, _depth, _pitch, _mem);
}
- void updateTextureEnd() BX_OVERRIDE
+ void updateTextureEnd() override
{
}
- void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) BX_OVERRIDE
+ void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) override
{
const TextureD3D11& texture = m_textures[_handle.idx];
D3D11_MAPPED_SUBRESOURCE mapped;
@@ -1861,7 +1942,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
uint8_t* src = (uint8_t*)mapped.pData;
uint32_t srcPitch = mapped.RowPitch;
- const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(texture.m_textureFormat) );
+ const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(texture.m_textureFormat) );
uint8_t* dst = (uint8_t*)_data;
uint32_t dstPitch = srcWidth*bpp/8;
@@ -1878,7 +1959,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_deviceCtx->Unmap(texture.m_ptr, _mip);
}
- void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) BX_OVERRIDE
+ void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) override
{
TextureD3D11& texture = m_textures[_handle.idx];
@@ -1906,7 +1987,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
release(mem);
}
- void overrideInternal(TextureHandle _handle, uintptr_t _ptr) BX_OVERRIDE
+ void overrideInternal(TextureHandle _handle, uintptr_t _ptr) override
{
// Resource ref. counts might be messed up outside of bgfx.
// Disabling ref. count check once texture is overridden.
@@ -1914,7 +1995,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_textures[_handle.idx].overrideInternal(_ptr);
}
- uintptr_t getInternal(TextureHandle _handle) BX_OVERRIDE
+ uintptr_t getInternal(TextureHandle _handle) override
{
// Resource ref. counts might be messed up outside of bgfx.
// Disabling ref. count check once texture is overridden.
@@ -1922,24 +2003,24 @@ BX_PRAGMA_DIAGNOSTIC_POP();
return uintptr_t(m_textures[_handle.idx].m_ptr);
}
- void destroyTexture(TextureHandle _handle) BX_OVERRIDE
+ void destroyTexture(TextureHandle _handle) override
{
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) override
{
m_frameBuffers[_handle.idx].create(_num, _attachment);
}
- void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) override
{
uint16_t denseIdx = m_numWindows++;
m_windows[denseIdx] = _handle;
m_frameBuffers[_handle.idx].create(denseIdx, _nwh, _width, _height, _depthFormat);
}
- void destroyFrameBuffer(FrameBufferHandle _handle) BX_OVERRIDE
+ void destroyFrameBuffer(FrameBufferHandle _handle) override
{
uint16_t denseIdx = m_frameBuffers[_handle.idx].destroy();
if (UINT16_MAX != denseIdx)
@@ -1954,7 +2035,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
}
- void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) BX_OVERRIDE
+ void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) override
{
if (NULL != m_uniforms[_handle.idx])
{
@@ -1968,14 +2049,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_uniformReg.add(_handle, _name, data);
}
- void destroyUniform(UniformHandle _handle) BX_OVERRIDE
+ void destroyUniform(UniformHandle _handle) override
{
BX_FREE(g_allocator, m_uniforms[_handle.idx]);
m_uniforms[_handle.idx] = NULL;
m_uniformReg.remove(_handle);
}
- void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE
+ void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) override
{
IDXGISwapChain* swapChain = isValid(_handle)
? m_frameBuffers[_handle.idx].m_swapChain
@@ -2026,12 +2107,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
D3D11_MAPPED_SUBRESOURCE mapped;
DX_CHECK(m_deviceCtx->Map(texture, 0, D3D11_MAP_READ, 0, &mapped) );
- imageSwizzleBgra8(
+ bimg::imageSwizzleBgra8(
mapped.pData
+ , mapped.RowPitch
, backBufferDesc.Width
, backBufferDesc.Height
- , mapped.RowPitch
, mapped.pData
+ , mapped.RowPitch
);
g_callback->screenShot(_filePath
, backBufferDesc.Width
@@ -2049,7 +2131,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
DX_RELEASE(backBuffer, 0);
}
- void updateViewName(uint8_t _id, const char* _name) BX_OVERRIDE
+ void updateViewName(ViewId _id, const char* _name) override
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
@@ -2059,18 +2141,18 @@ BX_PRAGMA_DIAGNOSTIC_POP();
);
}
- bx::strlcpy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
- , _name
+ bx::strCopy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
, BX_COUNTOF(s_viewName[0]) - BGFX_CONFIG_MAX_VIEW_NAME_RESERVED
+ , _name
);
}
- void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE
+ void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) override
{
bx::memCopy(m_uniforms[_loc], _data, _size);
}
- void setMarker(const char* _marker, uint32_t _size) BX_OVERRIDE
+ void setMarker(const char* _marker, uint32_t _size) override
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
@@ -2081,14 +2163,34 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
}
- void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE
+ void invalidateOcclusionQuery(OcclusionQueryHandle _handle) override
{
m_occlusionQuery.invalidate(_handle);
}
- void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE;
+ virtual void setName(Handle _handle, const char* _name) override
+ {
+ switch (_handle.type)
+ {
+ case Handle::Shader:
+ setDebugObjectName(m_shaders[_handle.idx].m_ptr, _name);
+ break;
+
+ case Handle::Texture:
+ setDebugObjectName(m_textures[_handle.idx].m_ptr, _name);
+ break;
+
+ default:
+ BX_CHECK(false, "Invalid handle type?! %d", _handle.type);
+ break;
+ }
+ }
+
+ void submitBlit(BlitState& _bs, uint16_t _view);
+
+ void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) override;
- void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE
+ void blitSetup(TextVideoMemBlitter& _blitter) override
{
ID3D11DeviceContext* deviceCtx = m_deviceCtx;
@@ -2134,7 +2236,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
deviceCtx->IASetIndexBuffer(ib.m_ptr, DXGI_FORMAT_R16_UINT, 0);
float proj[16];
- bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f);
+ bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f, 0.0f, false);
PredefinedUniform& predefined = program.m_predefined[0];
uint8_t flags = predefined.m_type;
@@ -2145,7 +2247,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
commitTextureStage();
}
- void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) BX_OVERRIDE
+ void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) override
{
const uint32_t numVertices = _numIndices*4/6;
if (0 < numVertices)
@@ -2263,9 +2365,15 @@ BX_PRAGMA_DIAGNOSTIC_POP();
capturePostReset();
}
- void flip(HMD& _hmd) BX_OVERRIDE
+ bool isDeviceRemoved() override
{
- if (NULL != m_swapChain)
+ return m_lost;
+ }
+
+ void flip(HMD& _hmd) override
+ {
+ if (NULL != m_swapChain
+ && !m_lost)
{
HRESULT hr = S_OK;
uint32_t syncInterval = BX_ENABLED(!BX_PLATFORM_WINDOWS)
@@ -2298,15 +2406,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
}
- if (isLost(hr) )
- {
- ++m_lost;
- BGFX_FATAL(10 > m_lost, bgfx::Fatal::DeviceLost, "Device is lost. FAILED 0x%08x", hr);
- }
- else
- {
- m_lost = 0;
- }
+ m_lost = isLost(hr);
+ BGFX_FATAL(!m_lost
+ , bgfx::Fatal::DeviceLost
+ , "Device is lost. FAILED 0x%08x %s (%s)"
+ , hr
+ , getLostReason(hr)
+ , DXGI_ERROR_DEVICE_REMOVED == hr ? getLostReason(m_device->GetDeviceRemovedReason() ) : "no info"
+ );
}
}
@@ -2654,34 +2761,58 @@ BX_PRAGMA_DIAGNOSTIC_POP();
&& (BGFX_CLEAR_DEPTH|BGFX_CLEAR_STENCIL) & _clear.m_flags)
{
DWORD flags = 0;
- flags |= (_clear.m_flags & BGFX_CLEAR_DEPTH) ? D3D11_CLEAR_DEPTH : 0;
+ flags |= (_clear.m_flags & BGFX_CLEAR_DEPTH) ? D3D11_CLEAR_DEPTH : 0;
flags |= (_clear.m_flags & BGFX_CLEAR_STENCIL) ? D3D11_CLEAR_STENCIL : 0;
m_deviceCtx->ClearDepthStencilView(m_currentDepthStencil, flags, _clear.m_depth, _clear.m_stencil);
}
}
}
- void setInputLayout(const VertexDecl& _vertexDecl, const ProgramD3D11& _program, uint16_t _numInstanceData)
+ void setInputLayout(uint8_t _numStreams, const VertexDecl** _vertexDecls, const ProgramD3D11& _program, uint16_t _numInstanceData)
{
- uint64_t layoutHash = (uint64_t(_vertexDecl.m_hash)<<32) | _program.m_vsh->m_hash;
- layoutHash ^= _numInstanceData;
+ bx::HashMurmur2A murmur;
+ murmur.begin();
+ murmur.add(_numInstanceData);
+ for (uint8_t stream = 0; stream < _numStreams; ++stream)
+ {
+ murmur.add(_vertexDecls[stream]->m_hash);
+ }
+ uint64_t layoutHash = (uint64_t(_program.m_vsh->m_hash)<<32) | murmur.end();
+
ID3D11InputLayout* layout = m_inputLayoutCache.find(layoutHash);
if (NULL == layout)
{
D3D11_INPUT_ELEMENT_DESC vertexElements[Attrib::Count+1+BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT];
+ D3D11_INPUT_ELEMENT_DESC* elem = vertexElements;
- VertexDecl decl;
- bx::memCopy(&decl, &_vertexDecl, sizeof(VertexDecl) );
- const uint16_t* attrMask = _program.m_vsh->m_attrMask;
+ uint16_t attrMask[Attrib::Count];
+ bx::memCopy(attrMask, _program.m_vsh->m_attrMask, sizeof(attrMask) );
- for (uint32_t ii = 0; ii < Attrib::Count; ++ii)
+ for (uint8_t stream = 0; stream < _numStreams; ++stream)
{
- uint16_t mask = attrMask[ii];
- uint16_t attr = (decl.m_attributes[ii] & mask);
- decl.m_attributes[ii] = attr == 0 ? UINT16_MAX : attr == UINT16_MAX ? 0 : attr;
+ VertexDecl decl;
+ bx::memCopy(&decl, _vertexDecls[stream], sizeof(VertexDecl) );
+
+ const bool last = stream == _numStreams-1;
+
+ for (uint32_t ii = 0; ii < Attrib::Count; ++ii)
+ {
+ uint16_t mask = attrMask[ii];
+ uint16_t attr = (decl.m_attributes[ii] & mask);
+ if (0 == attr
+ || UINT16_MAX == attr)
+ {
+ decl.m_attributes[ii] = last ? ~attr : UINT16_MAX;
+ }
+ else
+ {
+ attrMask[ii] = 0;
+ }
+ }
+
+ elem = fillVertexDecl(stream, elem, decl);
}
- D3D11_INPUT_ELEMENT_DESC* elem = fillVertexDecl(vertexElements, decl);
uint32_t num = uint32_t(elem-vertexElements);
const D3D11_INPUT_ELEMENT_DESC inst = { "TEXCOORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 };
@@ -2695,7 +2826,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
for (jj = 0; jj < num; ++jj)
{
curr = &vertexElements[jj];
- if (0 == bx::strncmp(curr->SemanticName, "TEXCOORD")
+ if (0 == bx::strCmp(curr->SemanticName, "TEXCOORD")
&& curr->SemanticIndex == index)
{
break;
@@ -2709,7 +2840,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
bx::memCopy(curr, &inst, sizeof(D3D11_INPUT_ELEMENT_DESC) );
- curr->InputSlot = 1;
+ curr->InputSlot = _numStreams;
curr->SemanticIndex = index;
curr->AlignedByteOffset = ii*16;
}
@@ -2727,6 +2858,12 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_deviceCtx->IASetInputLayout(layout);
}
+ void setInputLayout(const VertexDecl& _vertexDecl, const ProgramD3D11& _program, uint16_t _numInstanceData)
+ {
+ const VertexDecl* decls[1] = { &_vertexDecl };
+ setInputLayout(BX_COUNTOF(decls), decls, _program, _numInstanceData);
+ }
+
void setBlendState(uint64_t _state, uint32_t _rgba = 0)
{
_state &= BGFX_D3D11_BLEND_STATE_MASK;
@@ -3021,7 +3158,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
sd.AddressU = s_textureAddress[(_flags&BGFX_TEXTURE_U_MASK)>>BGFX_TEXTURE_U_SHIFT];
sd.AddressV = s_textureAddress[(_flags&BGFX_TEXTURE_V_MASK)>>BGFX_TEXTURE_V_SHIFT];
sd.AddressW = s_textureAddress[(_flags&BGFX_TEXTURE_W_MASK)>>BGFX_TEXTURE_W_SHIFT];
- sd.MipLODBias = 0.0f;
+ sd.MipLODBias = float(BGFX_CONFIG_MIP_LOD_BIAS);
sd.MaxAnisotropy = m_maxAnisotropy;
sd.ComparisonFunc = 0 == cmpFunc ? D3D11_COMPARISON_NEVER : s_cmpFunc[cmpFunc];
sd.BorderColor[0] = _rgba[0];
@@ -3109,7 +3246,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
murmur.begin();
murmur.add(_handle);
murmur.add(_mip);
- murmur.add(0);
+ murmur.add(1);
uint32_t hash = murmur.end();
IUnknown** ptr = m_srvUavLru.find(hash);
@@ -3119,7 +3256,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
TextureD3D11& texture = m_textures[_handle.idx];
D3D11_UNORDERED_ACCESS_VIEW_DESC desc;
- desc.Format = s_textureFormat[texture.m_textureFormat].m_fmtSrv;
+ desc.Format = texture.getSrvFormat();
switch (texture.m_type)
{
case TextureD3D11::Texture2D:
@@ -3154,13 +3291,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
return uav;
}
- ID3D11ShaderResourceView* getCachedSrv(TextureHandle _handle, uint8_t _mip)
+ ID3D11ShaderResourceView* getCachedSrv(TextureHandle _handle, uint8_t _mip, bool _compute = false)
{
bx::HashMurmur2A murmur;
murmur.begin();
murmur.add(_handle);
murmur.add(_mip);
murmur.add(0);
+ murmur.add(_compute);
uint32_t hash = murmur.end();
IUnknown** ptr = m_srvUavLru.find(hash);
@@ -3173,7 +3311,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
const bool msaaSample = 1 < msaa.Count && 0 != (texture.m_flags&BGFX_TEXTURE_MSAA_SAMPLE);
D3D11_SHADER_RESOURCE_VIEW_DESC desc;
- desc.Format = s_textureFormat[texture.m_textureFormat].m_fmtSrv;
+ desc.Format = texture.getSrvFormat();
switch (texture.m_type)
{
case TextureD3D11::Texture2D:
@@ -3186,9 +3324,20 @@ BX_PRAGMA_DIAGNOSTIC_POP();
break;
case TextureD3D11::TextureCube:
- desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
- desc.TextureCube.MostDetailedMip = _mip;
- desc.TextureCube.MipLevels = 1;
+ if (_compute)
+ {
+ desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
+ desc.Texture2DArray.MostDetailedMip = _mip;
+ desc.Texture2DArray.MipLevels = 1;
+ desc.Texture2DArray.FirstArraySlice = 0;
+ desc.Texture2DArray.ArraySize = 6;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
+ desc.TextureCube.MostDetailedMip = _mip;
+ desc.TextureCube.MipLevels = 1;
+ }
break;
case TextureD3D11::Texture3D:
@@ -3294,12 +3443,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
D3D11_MAPPED_SUBRESOURCE mapped;
DX_CHECK(m_deviceCtx->Map(m_captureTexture, 0, D3D11_MAP_READ, 0, &mapped) );
- imageSwizzleBgra8(
+ bimg::imageSwizzleBgra8(
mapped.pData
+ , mapped.RowPitch
, getBufferWidth()
, getBufferHeight()
- , mapped.RowPitch
, mapped.pData
+ , mapped.RowPitch
);
g_callback->captureFrame(mapped.pData, getBufferHeight()*mapped.RowPitch);
@@ -3537,6 +3687,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
void* m_agsdll;
AGSContext* m_ags;
+ NvApi m_nvapi;
D3D_DRIVER_TYPE m_driverType;
D3D_FEATURE_LEVEL m_featureLevel;
@@ -3551,15 +3702,17 @@ BX_PRAGMA_DIAGNOSTIC_POP();
#endif // BX_PLATFORM_WINDOWS
bool m_needPresent;
- uint16_t m_lost;
+ bool m_lost;
uint16_t m_numWindows;
FrameBufferHandle m_windows[BGFX_CONFIG_MAX_FRAME_BUFFERS];
- ID3D11Device* m_device;
- ID3D11DeviceContext* m_deviceCtx;
- ID3D11InfoQueue* m_infoQueue;
- TimerQueryD3D11 m_gpuTimer;
- OcclusionQueryD3D11 m_occlusionQuery;
+ ID3D11Device* m_device;
+ ID3D11DeviceContext* m_deviceCtx;
+ ID3DUserDefinedAnnotation* m_annotation;
+ ID3D11InfoQueue* m_infoQueue;
+
+ TimerQueryD3D11 m_gpuTimer;
+ OcclusionQueryD3D11 m_occlusionQuery;
uint32_t m_deviceInterfaceVersion;
@@ -3673,6 +3826,23 @@ BX_PRAGMA_DIAGNOSTIC_POP();
agsDriverExtensions_MultiDrawIndexedInstancedIndirect(s_renderD3D11->m_ags, _numDrawIndirect, _ptr, _offset, _stride);
}
+ int WINAPI d3d11Annotation_BeginEvent(DWORD _color, LPCWSTR _name)
+ {
+ BX_UNUSED(_color);
+ return s_renderD3D11->m_annotation->BeginEvent(_name);
+ }
+
+ int WINAPI d3d11Annotation_EndEvent()
+ {
+ return s_renderD3D11->m_annotation->EndEvent();
+ }
+
+ void WINAPI d3d11Annotation_SetMarker(DWORD _color, LPCWSTR _name)
+ {
+ BX_UNUSED(_color);
+ s_renderD3D11->m_annotation->SetMarker(_name);
+ }
+
#if BGFX_CONFIG_USE_OVR
VRImplOVRD3D11::VRImplOVRD3D11()
@@ -3904,7 +4074,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
};
static const UavFormat s_uavFormat[] =
- { // BGFX_BUFFER_COMPUTE_TYPE_UINT, BGFX_BUFFER_COMPUTE_TYPE_INT, BGFX_BUFFER_COMPUTE_TYPE_FLOAT
+ { // BGFX_BUFFER_COMPUTE_TYPE_INT, BGFX_BUFFER_COMPUTE_TYPE_UINT, BGFX_BUFFER_COMPUTE_TYPE_FLOAT
{ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, 0 }, // ignored
{ { DXGI_FORMAT_R8_SINT, DXGI_FORMAT_R8_UINT, DXGI_FORMAT_UNKNOWN }, 1 }, // BGFX_BUFFER_COMPUTE_FORMAT_8x1
{ { DXGI_FORMAT_R8G8_SINT, DXGI_FORMAT_R8G8_UINT, DXGI_FORMAT_UNKNOWN }, 2 }, // BGFX_BUFFER_COMPUTE_FORMAT_8x2
@@ -3982,6 +4152,11 @@ BX_PRAGMA_DIAGNOSTIC_POP();
ID3D11Device* device = s_renderD3D11->m_device;
+ D3D11_SUBRESOURCE_DATA srd;
+ srd.pSysMem = _data;
+ srd.SysMemPitch = 0;
+ srd.SysMemSlicePitch = 0;
+
if (needUav)
{
desc.Usage = D3D11_USAGE_DEFAULT;
@@ -3989,7 +4164,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
desc.StructureByteStride = _stride;
DX_CHECK(device->CreateBuffer(&desc
- , NULL
+ , NULL == _data ? NULL : &srd
, &m_ptr
) );
@@ -4006,24 +4181,38 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
else if (m_dynamic)
{
- desc.Usage = D3D11_USAGE_DYNAMIC;
+#if USE_D3D11_STAGING_BUFFER
+ desc.Usage = D3D11_USAGE_DEFAULT;
+ desc.CPUAccessFlags = 0;
+
+ DX_CHECK(device->CreateBuffer(&desc
+ , NULL
+ , &m_ptr
+ ) );
+
+ desc.BindFlags = 0;
+ desc.Usage = D3D11_USAGE_STAGING;
+ desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+
+ DX_CHECK(device->CreateBuffer(&desc
+ , NULL
+ , &m_staging
+ ) );
+#else
+ desc.Usage = D3D11_USAGE_DYNAMIC;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
DX_CHECK(device->CreateBuffer(&desc
, NULL
, &m_ptr
) );
+#endif // USE_D3D11_STAGING_BUFFER
}
else
{
desc.Usage = D3D11_USAGE_IMMUTABLE;
desc.CPUAccessFlags = 0;
- D3D11_SUBRESOURCE_DATA srd;
- srd.pSysMem = _data;
- srd.SysMemPitch = 0;
- srd.SysMemSlicePitch = 0;
-
DX_CHECK(device->CreateBuffer(&desc
, &srd
, &m_ptr
@@ -4049,54 +4238,79 @@ BX_PRAGMA_DIAGNOSTIC_POP();
ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx;
BX_CHECK(m_dynamic, "Must be dynamic!");
-#if 0
+#if USE_D3D11_STAGING_BUFFER
BX_UNUSED(_discard);
- D3D11_BUFFER_DESC desc;
- desc.ByteWidth = _size;
- desc.Usage = D3D11_USAGE_STAGING;
- desc.BindFlags = 0;
- desc.MiscFlags = 0;
- desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
- desc.StructureByteStride = 0;
-
- D3D11_SUBRESOURCE_DATA srd;
- srd.pSysMem = _data;
- srd.SysMemPitch = 0;
- srd.SysMemSlicePitch = 0;
-
- D3D11_BOX srcBox;
- srcBox.left = 0;
- srcBox.top = 0;
- srcBox.front = 0;
- srcBox.right = _size;
- srcBox.bottom = 1;
- srcBox.back = 1;
- ID3D11Device* device = s_renderD3D11->m_device;
+ D3D11_MAPPED_SUBRESOURCE mapped;
+ DX_CHECK(deviceCtx->Map(m_staging, 0, D3D11_MAP_WRITE, 0, &mapped) );
+ bx::memCopy( (uint8_t*)mapped.pData + _offset, _data, _size);
+ deviceCtx->Unmap(m_staging, 0);
- ID3D11Buffer* ptr;
- DX_CHECK(device->CreateBuffer(&desc, &srd, &ptr) );
+ D3D11_BOX box;
+ box.left = _offset;
+ box.top = 0;
+ box.front = 0;
+ box.right = _offset + _size;
+ box.bottom = 1;
+ box.back = 1;
deviceCtx->CopySubresourceRegion(m_ptr
, 0
, _offset
, 0
, 0
- , ptr
+ , m_staging
, 0
- , &srcBox
+ , &box
);
-
- DX_RELEASE(ptr, 0);
#else
- D3D11_MAPPED_SUBRESOURCE mapped;
- D3D11_MAP type = _discard
- ? D3D11_MAP_WRITE_DISCARD
- : D3D11_MAP_WRITE_NO_OVERWRITE
- ;
- DX_CHECK(deviceCtx->Map(m_ptr, 0, type, 0, &mapped) );
- bx::memCopy( (uint8_t*)mapped.pData + _offset, _data, _size);
- deviceCtx->Unmap(m_ptr, 0);
+ if (_discard)
+ {
+ D3D11_MAPPED_SUBRESOURCE mapped;
+ DX_CHECK(deviceCtx->Map(m_ptr, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped) );
+ bx::memCopy( (uint8_t*)mapped.pData + _offset, _data, _size);
+ deviceCtx->Unmap(m_ptr, 0);
+ }
+ else
+ {
+ D3D11_BUFFER_DESC desc;
+ desc.ByteWidth = _size;
+ desc.Usage = D3D11_USAGE_STAGING;
+ desc.BindFlags = 0;
+ desc.MiscFlags = 0;
+ desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ desc.StructureByteStride = 0;
+
+ D3D11_SUBRESOURCE_DATA srd;
+ srd.pSysMem = _data;
+ srd.SysMemPitch = 0;
+ srd.SysMemSlicePitch = 0;
+
+ D3D11_BOX srcBox;
+ srcBox.left = 0;
+ srcBox.top = 0;
+ srcBox.front = 0;
+ srcBox.right = _size;
+ srcBox.bottom = 1;
+ srcBox.back = 1;
+
+ ID3D11Device* device = s_renderD3D11->m_device;
+
+ ID3D11Buffer* ptr;
+ DX_CHECK(device->CreateBuffer(&desc, &srd, &ptr) );
+
+ deviceCtx->CopySubresourceRegion(m_ptr
+ , 0
+ , _offset
+ , 0
+ , 0
+ , ptr
+ , 0
+ , &srcBox
+ );
+
+ DX_RELEASE(ptr, 0);
+ }
#endif // 0
}
@@ -4257,7 +4471,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
}
- uint16_t shaderSize;
+ uint32_t shaderSize;
bx::read(&reader, shaderSize);
const void* code = reader.getDataPtr();
@@ -4271,7 +4485,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
else if (BGFX_CHUNK_MAGIC_VSH == magic)
{
- m_hash = bx::hashMurmur2A(code, shaderSize);
+ m_hash = bx::hash<bx::HashMurmur2A>(code, shaderSize);
m_code = copy(code, shaderSize);
DX_CHECK(s_renderD3D11->m_device->CreateVertexShader(code, shaderSize, NULL, &m_vertexShader) );
@@ -4319,14 +4533,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
void TextureD3D11::create(const Memory* _mem, uint32_t _flags, uint8_t _skip)
{
- ImageContainer imageContainer;
+ bimg::ImageContainer imageContainer;
- if (imageParse(imageContainer, _mem->data, _mem->size) )
+ if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
{
uint8_t numMips = imageContainer.m_numMips;
const uint8_t startLod = uint8_t(bx::uint32_min(_skip, numMips-1) );
numMips -= startLod;
- const ImageBlockInfo& blockInfo = getBlockInfo(TextureFormat::Enum(imageContainer.m_format) );
+ const bimg::ImageBlockInfo& blockInfo = bimg::getBlockInfo(bimg::TextureFormat::Enum(imageContainer.m_format) );
const uint32_t textureWidth = bx::uint32_max(blockInfo.blockWidth, imageContainer.m_width >>startLod);
const uint32_t textureHeight = bx::uint32_max(blockInfo.blockHeight, imageContainer.m_height>>startLod);
const uint16_t numLayers = imageContainer.m_numLayers;
@@ -4338,7 +4552,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_requestedFormat = uint8_t(imageContainer.m_format);
m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
const bool convert = m_textureFormat != m_requestedFormat;
- const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
+ const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
if (imageContainer.m_cubeMap)
{
@@ -4361,7 +4575,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
uint32_t kk = 0;
- const bool compressed = isCompressed(TextureFormat::Enum(m_textureFormat) );
+ const bool compressed = bimg::isCompressed(bimg::TextureFormat::Enum(m_textureFormat) );
const bool swizzle = TextureFormat::BGRA8 == m_textureFormat && 0 != (m_flags&BGFX_TEXTURE_COMPUTE_WRITE);
BX_TRACE("Texture %3d: %s (requested: %s), layers %d, %dx%d%s%s%s."
@@ -4388,8 +4602,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
height = bx::uint32_max(1, height);
depth = bx::uint32_max(1, depth);
- ImageMip mip;
- if (imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
+ bimg::ImageMip mip;
+ if (bimg::imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
{
srd[kk].pSysMem = mip.m_data;
@@ -4397,7 +4611,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
uint32_t srcpitch = mip.m_width*bpp/8;
uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, mip.m_width*mip.m_height*bpp/8);
- imageDecodeToBgra8(temp, mip.m_data, mip.m_width, mip.m_height, srcpitch, mip.m_format);
+ bimg::imageDecodeToBgra8(temp, mip.m_data, mip.m_width, mip.m_height, srcpitch, mip.m_format);
srd[kk].pSysMem = temp;
srd[kk].SysMemPitch = srcpitch;
@@ -4412,11 +4626,6 @@ BX_PRAGMA_DIAGNOSTIC_POP();
srd[kk].SysMemPitch = mip.m_width*mip.m_bpp/8;
}
- if (swizzle)
- {
-// imageSwizzleBgra8(temp, width, height, mip.m_width*4, data);
- }
-
srd[kk].SysMemSlicePitch = mip.m_height*srd[kk].SysMemPitch;
++kk;
}
@@ -4430,7 +4639,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
const bool writeOnly = 0 != (m_flags&(BGFX_TEXTURE_RT_WRITE_ONLY|BGFX_TEXTURE_READ_BACK) );
const bool computeWrite = 0 != (m_flags&BGFX_TEXTURE_COMPUTE_WRITE);
const bool renderTarget = 0 != (m_flags&BGFX_TEXTURE_RT_MASK);
- const bool srgb = 0 != (m_flags&BGFX_TEXTURE_SRGB) || imageContainer.m_srgb;
+ const bool srgb = 0 != (m_flags&BGFX_TEXTURE_SRGB);
const bool blit = 0 != (m_flags&BGFX_TEXTURE_BLIT_DST);
const bool readBack = 0 != (m_flags&BGFX_TEXTURE_READ_BACK);
const uint32_t msaaQuality = bx::uint32_satsub( (m_flags&BGFX_TEXTURE_RT_MSAA_MASK)>>BGFX_TEXTURE_RT_MSAA_SHIFT, 1);
@@ -4466,7 +4675,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
// not swizzled and not sRGB, or sRGB unsupported
format = s_textureFormat[m_textureFormat].m_fmt;
- srvd.Format = s_textureFormat[m_textureFormat].m_fmtSrv;
+ srvd.Format = getSrvFormat();
}
switch (m_type)
@@ -4486,7 +4695,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
desc.CPUAccessFlags = 0;
desc.MiscFlags = 0;
- if (isDepth( (TextureFormat::Enum)m_textureFormat) )
+ if (bimg::isDepth(bimg::TextureFormat::Enum(m_textureFormat) ) )
{
desc.BindFlags |= D3D11_BIND_DEPTH_STENCIL;
desc.Usage = D3D11_USAGE_DEFAULT;
@@ -4684,7 +4893,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
const uint32_t subres = _mip + ( (layer + _side) * m_numMips);
- const uint32_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
+ const uint32_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
const uint32_t rectpitch = _rect.m_width*bpp/8;
const uint32_t srcpitch = UINT16_MAX == _pitch ? rectpitch : _pitch;
const uint32_t slicepitch = rectpitch*_rect.m_height;
@@ -4697,7 +4906,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
if (convert)
{
temp = (uint8_t*)BX_ALLOC(g_allocator, slicepitch);
- imageDecodeToBgra8(temp, data, _rect.m_width, _rect.m_height, srcpitch, TextureFormat::Enum(m_requestedFormat) );
+ bimg::imageDecodeToBgra8(temp, data, _rect.m_width, _rect.m_height, srcpitch, bimg::TextureFormat::Enum(m_requestedFormat) );
data = temp;
}
@@ -4754,6 +4963,19 @@ BX_PRAGMA_DIAGNOSTIC_POP();
return handle;
}
+ DXGI_FORMAT TextureD3D11::getSrvFormat() const
+ {
+ if (bimg::isDepth(bimg::TextureFormat::Enum(m_textureFormat) ) )
+ {
+ return s_textureFormat[m_textureFormat].m_fmtSrv;
+ }
+
+ return 0 != (m_flags&BGFX_TEXTURE_SRGB)
+ ? s_textureFormat[m_textureFormat].m_fmtSrgb
+ : s_textureFormat[m_textureFormat].m_fmt
+ ;
+ }
+
void FrameBufferD3D11::create(uint8_t _num, const Attachment* _attachment)
{
for (uint32_t ii = 0; ii < BX_COUNTOF(m_rtv); ++ii)
@@ -4793,7 +5015,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
DX_CHECK(device->CreateRenderTargetView(ptr, NULL, &m_rtv[0]) );
DX_RELEASE(ptr, 0);
- DXGI_FORMAT fmtDsv = isDepth(_depthFormat)
+ DXGI_FORMAT fmtDsv = bimg::isDepth(bimg::TextureFormat::Enum(_depthFormat) )
? s_textureFormat[_depthFormat].m_fmtDsv
: DXGI_FORMAT_D24_UNORM_S8_UINT
;
@@ -4893,7 +5115,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
const uint32_t msaaQuality = bx::uint32_satsub( (texture.m_flags&BGFX_TEXTURE_RT_MSAA_MASK)>>BGFX_TEXTURE_RT_MSAA_SHIFT, 1);
const DXGI_SAMPLE_DESC& msaa = s_msaa[msaaQuality];
- if (isDepth( (TextureFormat::Enum)texture.m_textureFormat) )
+ if (bimg::isDepth(bimg::TextureFormat::Enum(texture.m_textureFormat) ) )
{
BX_CHECK(NULL == m_dsv, "Frame buffer already has depth-stencil attached.");
@@ -4943,62 +5165,52 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
else
{
+ D3D11_RENDER_TARGET_VIEW_DESC desc;
+ desc.Format = texture.getSrvFormat();
switch (texture.m_type)
{
default:
case TextureD3D11::Texture2D:
+ if (1 < msaa.Count)
{
- D3D11_RENDER_TARGET_VIEW_DESC desc;
- desc.Format = s_textureFormat[texture.m_textureFormat].m_fmt;
- if (1 < msaa.Count)
- {
- desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DMS;
- }
- else
- {
- desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
- desc.Texture2D.MipSlice = m_attachment[ii].mip;
- }
-
- DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(
- NULL == texture.m_rt ? texture.m_ptr : texture.m_rt
- , &desc
- , &m_rtv[m_num]
- ) );
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DMS;
}
+ else
+ {
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
+ desc.Texture2D.MipSlice = m_attachment[ii].mip;
+ }
+
+ DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(
+ NULL == texture.m_rt ? texture.m_ptr : texture.m_rt
+ , &desc
+ , &m_rtv[m_num]
+ ) );
break;
case TextureD3D11::TextureCube:
+ if (1 < msaa.Count)
{
- D3D11_RENDER_TARGET_VIEW_DESC desc;
- desc.Format = s_textureFormat[texture.m_textureFormat].m_fmt;
- if (1 < msaa.Count)
- {
- desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY;
- desc.Texture2DMSArray.ArraySize = 1;
- desc.Texture2DMSArray.FirstArraySlice = m_attachment[ii].layer;
- }
- else
- {
- desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
- desc.Texture2DArray.ArraySize = 1;
- desc.Texture2DArray.FirstArraySlice = m_attachment[ii].layer;
- desc.Texture2DArray.MipSlice = m_attachment[ii].mip;
- }
- DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, &desc, &m_rtv[m_num]) );
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY;
+ desc.Texture2DMSArray.ArraySize = 1;
+ desc.Texture2DMSArray.FirstArraySlice = m_attachment[ii].layer;
}
+ else
+ {
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
+ desc.Texture2DArray.ArraySize = 1;
+ desc.Texture2DArray.FirstArraySlice = m_attachment[ii].layer;
+ desc.Texture2DArray.MipSlice = m_attachment[ii].mip;
+ }
+ DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, &desc, &m_rtv[m_num]) );
break;
case TextureD3D11::Texture3D:
- {
- D3D11_RENDER_TARGET_VIEW_DESC desc;
- desc.Format = s_textureFormat[texture.m_textureFormat].m_fmt;
- desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
- desc.Texture3D.MipSlice = m_attachment[ii].mip;
- desc.Texture3D.WSize = 1;
- desc.Texture3D.FirstWSlice = m_attachment[ii].layer;
- DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, &desc, &m_rtv[m_num]) );
- }
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
+ desc.Texture3D.MipSlice = m_attachment[ii].mip;
+ desc.Texture3D.WSize = 1;
+ desc.Texture3D.FirstWSlice = m_attachment[ii].layer;
+ DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, &desc, &m_rtv[m_num]) );
break;
}
@@ -5098,68 +5310,94 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
ID3D11Device* device = s_renderD3D11->m_device;
- D3D11_QUERY_DESC query;
- query.MiscFlags = 0;
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_frame); ++ii)
+ D3D11_QUERY_DESC qd;
+ qd.MiscFlags = 0;
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_query); ++ii)
{
- Frame& frame = m_frame[ii];
+ Query& query = m_query[ii];
+ query.m_ready = false;
- query.Query = D3D11_QUERY_TIMESTAMP_DISJOINT;
- DX_CHECK(device->CreateQuery(&query, &frame.m_disjoint) );
+ qd.Query = D3D11_QUERY_TIMESTAMP_DISJOINT;
+ DX_CHECK(device->CreateQuery(&qd, &query.m_disjoint) );
+
+ qd.Query = D3D11_QUERY_TIMESTAMP;
+ DX_CHECK(device->CreateQuery(&qd, &query.m_begin) );
+ DX_CHECK(device->CreateQuery(&qd, &query.m_end) );
+ }
- query.Query = D3D11_QUERY_TIMESTAMP;
- DX_CHECK(device->CreateQuery(&query, &frame.m_begin) );
- DX_CHECK(device->CreateQuery(&query, &frame.m_end) );
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_result); ++ii)
+ {
+ Result& result = m_result[ii];
+ result.reset();
}
- m_elapsed = 0;
- m_frequency = 1;
m_control.reset();
}
void TimerQueryD3D11::preReset()
{
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_frame); ++ii)
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_query); ++ii)
{
- Frame& frame = m_frame[ii];
- DX_RELEASE(frame.m_disjoint, 0);
- DX_RELEASE(frame.m_begin, 0);
- DX_RELEASE(frame.m_end, 0);
+ Query& query = m_query[ii];
+ DX_RELEASE(query.m_disjoint, 0);
+ DX_RELEASE(query.m_begin, 0);
+ DX_RELEASE(query.m_end, 0);
}
}
- void TimerQueryD3D11::begin()
+ uint32_t TimerQueryD3D11::begin(uint32_t _resultIdx)
{
ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx;
while (0 == m_control.reserve(1) )
{
- get();
+ update();
}
- Frame& frame = m_frame[m_control.m_current];
- deviceCtx->Begin(frame.m_disjoint);
- deviceCtx->End(frame.m_begin);
+ Result& result = m_result[_resultIdx];
+ ++result.m_pending;
+
+ const uint32_t idx = m_control.m_current;
+ Query& query = m_query[idx];
+ query.m_resultIdx = _resultIdx;
+ query.m_ready = false;
+
+ deviceCtx->Begin(query.m_disjoint);
+ deviceCtx->End(query.m_begin);
+
+ m_control.commit(1);
+
+ return idx;
}
- void TimerQueryD3D11::end()
+ void TimerQueryD3D11::end(uint32_t _idx)
{
ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx;
- Frame& frame = m_frame[m_control.m_current];
- deviceCtx->End(frame.m_end);
- deviceCtx->End(frame.m_disjoint);
- m_control.commit(1);
+ Query& query = m_query[_idx];
+ query.m_ready = true;
+
+ deviceCtx->End(query.m_end);
+ deviceCtx->End(query.m_disjoint);
+
+ while (update() )
+ {
+ }
}
- bool TimerQueryD3D11::get()
+ bool TimerQueryD3D11::update()
{
if (0 != m_control.available() )
{
- ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx;
- Frame& frame = m_frame[m_control.m_read];
+ Query& query = m_query[m_control.m_read];
+
+ if (!query.m_ready)
+ {
+ return false;
+ }
uint64_t timeEnd;
- HRESULT hr = deviceCtx->GetData(frame.m_end, &timeEnd, sizeof(timeEnd), D3D11_ASYNC_GETDATA_DONOTFLUSH);
+ ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx;
+ HRESULT hr = deviceCtx->GetData(query.m_end, &timeEnd, sizeof(timeEnd), D3D11_ASYNC_GETDATA_DONOTFLUSH);
if (S_OK == hr
|| isLost(hr) )
{
@@ -5172,15 +5410,17 @@ BX_PRAGMA_DIAGNOSTIC_POP();
};
D3D11_QUERY_DATA_TIMESTAMP_DISJOINT disjoint;
- deviceCtx->GetData(frame.m_disjoint, &disjoint, sizeof(disjoint), 0);
+ DX_CHECK(deviceCtx->GetData(query.m_disjoint, &disjoint, sizeof(disjoint), 0) );
uint64_t timeBegin;
- deviceCtx->GetData(frame.m_begin, &timeBegin, sizeof(timeBegin), 0);
+ DX_CHECK(deviceCtx->GetData(query.m_begin, &timeBegin, sizeof(timeBegin), 0) );
- m_frequency = disjoint.Frequency;
- m_begin = timeBegin;
- m_end = timeEnd;
- m_elapsed = timeEnd - timeBegin;
+ Result& result = m_result[query.m_resultIdx];
+ --result.m_pending;
+
+ result.m_frequency = disjoint.Frequency;
+ result.m_begin = timeBegin;
+ result.m_end = timeEnd;
return true;
}
@@ -5266,14 +5506,94 @@ BX_PRAGMA_DIAGNOSTIC_POP();
Query& query = m_query[(m_control.m_read + ii) % size];
if (query.m_handle.idx == _handle.idx)
{
- query.m_handle.idx = bgfx::invalidHandle;
+ query.m_handle.idx = bgfx::kInvalidHandle;
+ }
+ }
+ }
+
+ void RendererContextD3D11::submitBlit(BlitState& _bs, uint16_t _view)
+ {
+ ID3D11DeviceContext* deviceCtx = m_deviceCtx;
+
+ while (_bs.hasItem(_view) )
+ {
+ const BlitItem& blit = _bs.advance();
+
+ const TextureD3D11& src = m_textures[blit.m_src.idx];
+ const TextureD3D11& dst = m_textures[blit.m_dst.idx];
+
+ uint32_t srcWidth = bx::uint32_min(src.m_width, blit.m_srcX + blit.m_width) - blit.m_srcX;
+ uint32_t srcHeight = bx::uint32_min(src.m_height, blit.m_srcY + blit.m_height) - blit.m_srcY;
+ uint32_t srcDepth = bx::uint32_min(src.m_depth, blit.m_srcZ + blit.m_depth) - blit.m_srcZ;
+ uint32_t dstWidth = bx::uint32_min(dst.m_width, blit.m_dstX + blit.m_width) - blit.m_dstX;
+ uint32_t dstHeight = bx::uint32_min(dst.m_height, blit.m_dstY + blit.m_height) - blit.m_dstY;
+ uint32_t dstDepth = bx::uint32_min(dst.m_depth, blit.m_dstZ + blit.m_depth) - blit.m_dstZ;
+ uint32_t width = bx::uint32_min(srcWidth, dstWidth);
+ uint32_t height = bx::uint32_min(srcHeight, dstHeight);
+ uint32_t depth = bx::uint32_min(srcDepth, dstDepth);
+
+ if (TextureD3D11::Texture3D == src.m_type)
+ {
+ D3D11_BOX box;
+ box.left = blit.m_srcX;
+ box.top = blit.m_srcY;
+ box.front = blit.m_srcZ;
+ box.right = blit.m_srcX + width;
+ box.bottom = blit.m_srcY + height;;
+ box.back = blit.m_srcZ + bx::uint32_imax(1, depth);
+
+ deviceCtx->CopySubresourceRegion(dst.m_ptr
+ , blit.m_dstMip
+ , blit.m_dstX
+ , blit.m_dstY
+ , blit.m_dstZ
+ , src.m_ptr
+ , blit.m_srcMip
+ , &box
+ );
+ }
+ else
+ {
+ bool depthStencil = bimg::isDepth(bimg::TextureFormat::Enum(src.m_textureFormat) );
+ BX_CHECK(!depthStencil
+ || (width == src.m_width && height == src.m_height)
+ , "When blitting depthstencil surface, source resolution must match destination."
+ );
+
+ D3D11_BOX box;
+ box.left = blit.m_srcX;
+ box.top = blit.m_srcY;
+ box.front = 0;
+ box.right = blit.m_srcX + width;
+ box.bottom = blit.m_srcY + height;
+ box.back = 1;
+
+ const uint32_t srcZ = TextureD3D11::TextureCube == src.m_type
+ ? blit.m_srcZ
+ : 0
+ ;
+ const uint32_t dstZ = TextureD3D11::TextureCube == dst.m_type
+ ? blit.m_dstZ
+ : 0
+ ;
+
+ deviceCtx->CopySubresourceRegion(dst.m_ptr
+ , dstZ*dst.m_numMips+blit.m_dstMip
+ , blit.m_dstX
+ , blit.m_dstY
+ , 0
+ , src.m_ptr
+ , srcZ*src.m_numMips+blit.m_srcMip
+ , depthStencil ? NULL : &box
+ );
}
}
}
void RendererContextD3D11::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter)
{
- if (updateResolution(_render->m_resolution) )
+ if (m_lost
+ || updateResolution(_render->m_resolution) )
{
return;
}
@@ -5284,16 +5604,17 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
PIX_BEGINEVENT(D3DCOLOR_FRAME, L"rendererSubmit");
- BGFX_GPU_PROFILER_BEGIN_DYNAMIC("rendererSubmit");
ID3D11DeviceContext* deviceCtx = m_deviceCtx;
- int64_t elapsed = -bx::getHPCounter();
+ int64_t timeBegin = bx::getHPCounter();
int64_t captureElapsed = 0;
+ uint32_t frameQueryIdx = UINT32_MAX;
+
if (m_timerQuerySupport)
{
- m_gpuTimer.begin();
+ frameQueryIdx = m_gpuTimer.begin(BGFX_CONFIG_MAX_VIEWS);
}
if (0 < _render->m_iboffset)
@@ -5315,6 +5636,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
currentState.m_stateFlags = BGFX_STATE_NONE;
currentState.m_stencil = packStencil(BGFX_STENCIL_NONE, BGFX_STENCIL_NONE);
+ RenderBind currentBind;
+ currentBind.clear();
+
_render->m_hmdInitialized = m_ovr.isInitialized();
const bool hmdEnabled = m_ovr.isEnabled();
@@ -5325,15 +5649,12 @@ BX_PRAGMA_DIAGNOSTIC_POP();
bool scissorEnabled = false;
setDebugWireframe(wireframe);
- uint16_t programIdx = invalidHandle;
+ uint16_t programIdx = kInvalidHandle;
SortKey key;
uint16_t view = UINT16_MAX;
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
- BlitKey blitKey;
- blitKey.decode(_render->m_blitKeys[0]);
- uint16_t numBlitItems = _render->m_numBlitItems;
- uint16_t blitItem = 0;
+ BlitState bs(_render);
const uint64_t primType = _render->m_debug&BGFX_DEBUG_WIREFRAME ? BGFX_STATE_PT_LINES : 0;
uint8_t primIndex = uint8_t(primType >> BGFX_STATE_PT_SHIFT);
@@ -5352,6 +5673,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
uint32_t statsNumIndices = 0;
uint32_t statsKeyType[2] = {};
+ Profiler<TimerQueryD3D11> profiler(
+ _render
+ , m_gpuTimer
+ , s_viewName
+ , m_timerQuerySupport
+ );
+
m_occlusionQuery.resolve(_render);
if (0 == (_render->m_debug&BGFX_DEBUG_IFH) )
@@ -5364,9 +5692,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
bool viewRestart = false;
uint8_t eye = 0;
uint8_t restartState = 0;
- viewState.m_rect = _render->m_rect[0];
+ viewState.m_rect = _render->m_view[0].m_rect;
- int32_t numItems = _render->m_num;
+ int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
@@ -5378,7 +5706,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|| item == numItems
;
- const RenderItem& renderItem = _render->m_renderItem[_render->m_sortValues[item] ];
+ const uint32_t itemIdx = _render->m_sortValues[item];
+ const RenderItem& renderItem = _render->m_renderItem[itemIdx];
+ const RenderBind& renderBind = _render->m_renderItemBind[itemIdx];
++item;
if (viewChanged)
@@ -5393,15 +5723,15 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
view = key.m_view;
- programIdx = invalidHandle;
+ programIdx = kInvalidHandle;
- if (_render->m_fb[view].idx != fbh.idx)
+ if (_render->m_view[view].m_fbh.idx != fbh.idx)
{
- fbh = _render->m_fb[view];
+ fbh = _render->m_view[view].m_fbh;
setFrameBuffer(fbh);
}
- viewRestart = ( (BGFX_VIEW_STEREO == (_render->m_viewFlags[view] & BGFX_VIEW_STEREO) ) );
+ viewRestart = ( (BGFX_VIEW_STEREO == (_render->m_view[view].m_flags & BGFX_VIEW_STEREO) ) );
viewRestart &= hmdEnabled;
if (viewRestart)
{
@@ -5422,13 +5752,12 @@ BX_PRAGMA_DIAGNOSTIC_POP();
PIX_ENDEVENT();
if (item > 1)
{
- BGFX_GPU_PROFILER_END();
- BGFX_PROFILER_END();
+ profiler.end();
}
- BGFX_PROFILER_BEGIN_DYNAMIC(s_viewName[view]);
- BGFX_GPU_PROFILER_BEGIN_DYNAMIC(s_viewName[view]);
- viewState.m_rect = _render->m_rect[view];
+ profiler.begin(view);
+
+ viewState.m_rect = _render->m_view[view].m_rect;
if (viewRestart)
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
@@ -5464,7 +5793,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
}
- const Rect& scissorRect = _render->m_scissor[view];
+ const Rect& scissorRect = _render->m_view[view].m_scissor;
viewHasScissor = !scissorRect.isZero();
viewScissorRect = viewHasScissor ? scissorRect : viewState.m_rect;
@@ -5476,7 +5805,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
vp.MinDepth = 0.0f;
vp.MaxDepth = 1.0f;
deviceCtx->RSSetViewports(1, &vp);
- Clear& clr = _render->m_clear[view];
+ Clear& clr = _render->m_view[view].m_clear;
if (BGFX_CLEAR_NONE != (clr.m_flags & BGFX_CLEAR_MASK) )
{
@@ -5484,81 +5813,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
prim = s_primInfo[BX_COUNTOF(s_primName)]; // Force primitive type update after clear quad.
}
- const uint8_t blitView = SortKey::decodeView(encodedKey);
- for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
- {
- const BlitItem& blit = _render->m_blitItem[blitItem];
- blitKey.decode(_render->m_blitKeys[blitItem+1]);
-
- const TextureD3D11& src = m_textures[blit.m_src.idx];
- const TextureD3D11& dst = m_textures[blit.m_dst.idx];
-
- uint32_t srcWidth = bx::uint32_min(src.m_width, blit.m_srcX + blit.m_width) - blit.m_srcX;
- uint32_t srcHeight = bx::uint32_min(src.m_height, blit.m_srcY + blit.m_height) - blit.m_srcY;
- uint32_t srcDepth = bx::uint32_min(src.m_depth, blit.m_srcZ + blit.m_depth) - blit.m_srcZ;
- uint32_t dstWidth = bx::uint32_min(dst.m_width, blit.m_dstX + blit.m_width) - blit.m_dstX;
- uint32_t dstHeight = bx::uint32_min(dst.m_height, blit.m_dstY + blit.m_height) - blit.m_dstY;
- uint32_t dstDepth = bx::uint32_min(dst.m_depth, blit.m_dstZ + blit.m_depth) - blit.m_dstZ;
- uint32_t width = bx::uint32_min(srcWidth, dstWidth);
- uint32_t height = bx::uint32_min(srcHeight, dstHeight);
- uint32_t depth = bx::uint32_min(srcDepth, dstDepth);
-
- if (TextureD3D11::Texture3D == src.m_type)
- {
- D3D11_BOX box;
- box.left = blit.m_srcX;
- box.top = blit.m_srcY;
- box.front = blit.m_srcZ;
- box.right = blit.m_srcX + width;
- box.bottom = blit.m_srcY + height;;
- box.back = blit.m_srcZ + bx::uint32_imax(1, depth);
-
- deviceCtx->CopySubresourceRegion(dst.m_ptr
- , blit.m_dstMip
- , blit.m_dstX
- , blit.m_dstY
- , blit.m_dstZ
- , src.m_ptr
- , blit.m_srcMip
- , &box
- );
- }
- else
- {
- bool depthStencil = isDepth(TextureFormat::Enum(src.m_textureFormat) );
- BX_CHECK(!depthStencil
- || (width == src.m_width && height == src.m_height)
- , "When blitting depthstencil surface, source resolution must match destination."
- );
-
- D3D11_BOX box;
- box.left = blit.m_srcX;
- box.top = blit.m_srcY;
- box.front = 0;
- box.right = blit.m_srcX + width;
- box.bottom = blit.m_srcY + height;
- box.back = 1;
-
- const uint32_t srcZ = TextureD3D11::TextureCube == src.m_type
- ? blit.m_srcZ
- : 0
- ;
- const uint32_t dstZ = TextureD3D11::TextureCube == dst.m_type
- ? blit.m_dstZ
- : 0
- ;
-
- deviceCtx->CopySubresourceRegion(dst.m_ptr
- , dstZ*dst.m_numMips+blit.m_dstMip
- , blit.m_dstX
- , blit.m_dstY
- , 0
- , src.m_ptr
- , srcZ*src.m_numMips+blit.m_srcMip
- , depthStencil ? NULL : &box
- );
- }
- }
+ submitBlit(bs, view);
}
if (isCompute)
@@ -5594,8 +5849,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
bool programChanged = false;
- bool constantsChanged = compute.m_constBegin < compute.m_constEnd;
- rendererUpdateUniforms(this, _render->m_uniformBuffer, compute.m_constBegin, compute.m_constEnd);
+ bool constantsChanged = compute.m_uniformBegin < compute.m_uniformEnd;
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[compute.m_uniformIdx], compute.m_uniformBegin, compute.m_uniformEnd);
if (key.m_program != programIdx)
{
@@ -5611,7 +5866,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
constantsChanged = true;
}
- if (invalidHandle != programIdx)
+ if (kInvalidHandle != programIdx)
{
ProgramD3D11& program = m_program[programIdx];
@@ -5639,12 +5894,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
for (uint32_t ii = 0; ii < BGFX_MAX_COMPUTE_BINDINGS; ++ii)
{
- const Binding& bind = compute.m_bind[ii];
- if (invalidHandle != bind.m_idx)
+ const Binding& bind = renderBind.m_bind[ii];
+ if (kInvalidHandle != bind.m_idx)
{
switch (bind.m_type)
{
case Binding::Image:
+ case Binding::Texture:
{
TextureD3D11& texture = m_textures[bind.m_idx];
if (Access::Read != bind.m_un.m_compute.m_access)
@@ -5656,10 +5912,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
else
{
- srv[ii] = 0 == bind.m_un.m_compute.m_mip
- ? texture.m_srv
- : s_renderD3D11->getCachedSrv(texture.getHandle(), bind.m_un.m_compute.m_mip)
- ;
+ srv[ii] = s_renderD3D11->getCachedSrv(texture.getHandle(), bind.m_un.m_compute.m_mip, true);
sampler[ii] = s_renderD3D11->getSamplerState(texture.m_flags, NULL);
}
}
@@ -5727,7 +5980,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
PIX_BEGINEVENT(D3DCOLOR_DRAW, viewNameW);
}
- programIdx = invalidHandle;
+ programIdx = kInvalidHandle;
m_currentProgram = NULL;
invalidateCompute();
@@ -5764,6 +6017,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
currentState.m_stateFlags = newFlags;
currentState.m_stencil = newStencil;
+ currentBind.clear();
+
setBlendState(newFlags);
setDepthStencilState(newFlags, packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT) );
@@ -5798,7 +6053,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
else
{
Rect scissorRect;
- scissorRect.setIntersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]);
+ scissorRect.setIntersect(viewScissorRect, _render->m_frameCache.m_rectCache.m_cache[scissor]);
if (scissorRect.isZeroArea() )
{
continue;
@@ -5863,14 +6118,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
bool programChanged = false;
- bool constantsChanged = draw.m_constBegin < draw.m_constEnd;
- rendererUpdateUniforms(this, _render->m_uniformBuffer, draw.m_constBegin, draw.m_constEnd);
+ bool constantsChanged = draw.m_uniformBegin < draw.m_uniformEnd;
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd);
if (key.m_program != programIdx)
{
programIdx = key.m_program;
- if (invalidHandle == programIdx)
+ if (kInvalidHandle == programIdx)
{
m_currentProgram = NULL;
@@ -5903,7 +6158,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
constantsChanged = true;
}
- if (invalidHandle != programIdx)
+ if (kInvalidHandle != programIdx)
{
ProgramD3D11& program = m_program[programIdx];
@@ -5935,16 +6190,36 @@ BX_PRAGMA_DIAGNOSTIC_POP();
uint32_t changes = 0;
for (uint8_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage)
{
- const Binding& bind = draw.m_bind[stage];
- Binding& current = currentState.m_bind[stage];
+ const Binding& bind = renderBind.m_bind[stage];
+ Binding& current = currentBind.m_bind[stage];
if (current.m_idx != bind.m_idx
+ || current.m_type != bind.m_type
|| current.m_un.m_draw.m_textureFlags != bind.m_un.m_draw.m_textureFlags
|| programChanged)
{
- if (invalidHandle != bind.m_idx)
+ if (kInvalidHandle != bind.m_idx)
{
- TextureD3D11& texture = m_textures[bind.m_idx];
- texture.commit(stage, bind.m_un.m_draw.m_textureFlags, _render->m_colorPalette);
+ switch (bind.m_type)
+ {
+ case Binding::Texture:
+ {
+ TextureD3D11& texture = m_textures[bind.m_idx];
+ texture.commit(stage, bind.m_un.m_draw.m_textureFlags, _render->m_colorPalette);
+ }
+ break;
+
+ case Binding::IndexBuffer:
+ case Binding::VertexBuffer:
+ {
+ const BufferD3D11& buffer = Binding::IndexBuffer == bind.m_type
+ ? m_indexBuffers[bind.m_idx]
+ : m_vertexBuffers[bind.m_idx]
+ ;
+ m_textureStage.m_srv[stage] = buffer.m_srv;
+ m_textureStage.m_sampler[stage] = NULL;
+ }
+ break;
+ }
}
else
{
@@ -5964,43 +6239,70 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
}
+ bool vertexStreamChanged = hasVertexStreamChanged(currentState, draw);
+
if (programChanged
- || currentState.m_streamMask != draw.m_streamMask
- || currentState.m_stream[0].m_decl.idx != draw.m_stream[0].m_decl.idx
- || currentState.m_stream[0].m_handle.idx != draw.m_stream[0].m_handle.idx
- || currentState.m_instanceDataBuffer.idx != draw.m_instanceDataBuffer.idx
- || currentState.m_instanceDataOffset != draw.m_instanceDataOffset
- || currentState.m_instanceDataStride != draw.m_instanceDataStride)
+ || vertexStreamChanged)
{
currentState.m_streamMask = draw.m_streamMask;
- currentState.m_stream[0].m_decl = draw.m_stream[0].m_decl;
- currentState.m_stream[0].m_handle = draw.m_stream[0].m_handle;
currentState.m_instanceDataBuffer.idx = draw.m_instanceDataBuffer.idx;
currentState.m_instanceDataOffset = draw.m_instanceDataOffset;
currentState.m_instanceDataStride = draw.m_instanceDataStride;
- uint16_t handle = draw.m_stream[0].m_handle.idx;
- if (invalidHandle != handle)
+ ID3D11Buffer* buffers[BGFX_CONFIG_MAX_VERTEX_STREAMS];
+ uint32_t strides[BGFX_CONFIG_MAX_VERTEX_STREAMS];
+ uint32_t offsets[BGFX_CONFIG_MAX_VERTEX_STREAMS];
+ const VertexDecl* decls[BGFX_CONFIG_MAX_VERTEX_STREAMS];
+
+ uint32_t numVertices = draw.m_numVertices;
+ uint8_t numStreams = 0;
+ for (uint32_t idx = 0, streamMask = draw.m_streamMask, ntz = bx::uint32_cnttz(streamMask)
+ ; 0 != streamMask
+ ; streamMask >>= 1, idx += 1, ntz = bx::uint32_cnttz(streamMask), ++numStreams
+ )
{
- const VertexBufferD3D11& vb = m_vertexBuffers[handle];
+ streamMask >>= ntz;
+ idx += ntz;
+
+ currentState.m_stream[idx].m_decl = draw.m_stream[idx].m_decl;
+ currentState.m_stream[idx].m_handle = draw.m_stream[idx].m_handle;
+ currentState.m_stream[idx].m_startVertex = draw.m_stream[idx].m_startVertex;
- uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[0].m_decl.idx : vb.m_decl.idx;
+ uint16_t handle = draw.m_stream[idx].m_handle.idx;
+ const VertexBufferD3D11& vb = m_vertexBuffers[handle];
+ uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[idx].m_decl.idx : vb.m_decl.idx;
const VertexDecl& vertexDecl = m_vertexDecls[decl];
uint32_t stride = vertexDecl.m_stride;
- uint32_t offset = 0;
- deviceCtx->IASetVertexBuffers(0, 1, &vb.m_ptr, &stride, &offset);
+
+ buffers[numStreams] = vb.m_ptr;
+ strides[numStreams] = stride;
+ offsets[numStreams] = draw.m_stream[idx].m_startVertex * stride;
+ decls[numStreams] = &vertexDecl;
+
+ numVertices = bx::uint32_min(UINT32_MAX == draw.m_numVertices
+ ? vb.m_size/stride
+ : draw.m_numVertices
+ , numVertices
+ );
+ }
+
+ currentState.m_numVertices = numVertices;
+
+ if (0 < numStreams)
+ {
+ deviceCtx->IASetVertexBuffers(0, numStreams, buffers, strides, offsets);
if (isValid(draw.m_instanceDataBuffer) )
{
const VertexBufferD3D11& inst = m_vertexBuffers[draw.m_instanceDataBuffer.idx];
uint32_t instStride = draw.m_instanceDataStride;
- deviceCtx->IASetVertexBuffers(1, 1, &inst.m_ptr, &instStride, &draw.m_instanceDataOffset);
- setInputLayout(vertexDecl, m_program[programIdx], draw.m_instanceDataStride/16);
+ deviceCtx->IASetVertexBuffers(numStreams, 1, &inst.m_ptr, &instStride, &draw.m_instanceDataOffset);
+ setInputLayout(numStreams, decls, m_program[programIdx], draw.m_instanceDataStride/16);
}
else
{
- deviceCtx->IASetVertexBuffers(1, 1, s_zero.m_buffer, s_zero.m_zero, s_zero.m_zero);
- setInputLayout(vertexDecl, m_program[programIdx], 0);
+ deviceCtx->IASetVertexBuffers(numStreams, 1, s_zero.m_buffer, s_zero.m_zero, s_zero.m_zero);
+ setInputLayout(numStreams, decls, m_program[programIdx], 0);
}
}
else
@@ -6014,7 +6316,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
currentState.m_indexBuffer = draw.m_indexBuffer;
uint16_t handle = draw.m_indexBuffer.idx;
- if (invalidHandle != handle)
+ if (kInvalidHandle != handle)
{
const IndexBufferD3D11& ib = m_indexBuffers[handle];
deviceCtx->IASetIndexBuffer(ib.m_ptr
@@ -6030,15 +6332,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
if (0 != currentState.m_streamMask)
{
- uint32_t numVertices = draw.m_numVertices;
- if (UINT32_MAX == numVertices)
- {
- const VertexBufferD3D11& vb = m_vertexBuffers[currentState.m_stream[0].m_handle.idx];
- uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[0].m_decl.idx : vb.m_decl.idx;
- const VertexDecl& vertexDecl = m_vertexDecls[decl];
- numVertices = vb.m_size/vertexDecl.m_stride;
- }
-
+ uint32_t numVertices = currentState.m_numVertices;
uint32_t numIndices = 0;
uint32_t numPrimsSubmitted = 0;
uint32_t numInstances = 0;
@@ -6100,7 +6394,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
deviceCtx->DrawIndexedInstanced(numIndices
, draw.m_numInstances
, 0
- , draw.m_stream[0].m_startVertex
+ , 0
, 0
);
}
@@ -6108,7 +6402,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
deviceCtx->DrawIndexed(numIndices
, 0
- , draw.m_stream[0].m_startVertex
+ , 0
);
}
}
@@ -6124,7 +6418,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
deviceCtx->DrawIndexedInstanced(numIndices
, draw.m_numInstances
, draw.m_startIndex
- , draw.m_stream[0].m_startVertex
+ , 0
, 0
);
}
@@ -6132,7 +6426,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
deviceCtx->DrawIndexed(numIndices
, draw.m_startIndex
- , draw.m_stream[0].m_startVertex
+ , 0
);
}
}
@@ -6147,14 +6441,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
deviceCtx->DrawInstanced(numVertices
, draw.m_numInstances
- , draw.m_stream[0].m_startVertex
+ , 0
, 0
);
}
else
{
deviceCtx->Draw(numVertices
- , draw.m_stream[0].m_startVertex
+ , 0
);
}
}
@@ -6186,7 +6480,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
invalidateCompute();
}
- if (0 < _render->m_num)
+ submitBlit(bs, BGFX_CONFIG_MAX_VIEWS);
+
+ if (0 < _render->m_numRenderItems)
{
if (0 != (m_resolution.m_flags & BGFX_RESET_FLUSH_AFTER_RENDER) )
{
@@ -6197,24 +6493,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
capture();
captureElapsed += bx::getHPCounter();
- BGFX_GPU_PROFILER_END();
- BGFX_PROFILER_END();
+ profiler.end();
}
}
PIX_ENDEVENT();
- BGFX_GPU_PROFILER_END();
- int64_t now = bx::getHPCounter();
- elapsed += now;
-
- static int64_t last = now;
-
- Stats& perfStats = _render->m_perfStats;
- perfStats.cpuTimeBegin = last;
-
- int64_t frameTime = now - last;
- last = now;
+ int64_t timeEnd = bx::getHPCounter();
+ int64_t frameTime = timeEnd - timeBegin;
static int64_t min = frameTime;
static int64_t max = frameTime;
@@ -6225,31 +6511,32 @@ BX_PRAGMA_DIAGNOSTIC_POP();
static double maxGpuElapsed = 0.0f;
double elapsedGpuMs = 0.0;
- if (m_timerQuerySupport)
+ if (UINT32_MAX != frameQueryIdx)
{
- m_gpuTimer.end();
+ m_gpuTimer.end(frameQueryIdx);
- do
- {
- double toGpuMs = 1000.0 / double(m_gpuTimer.m_frequency);
- elapsedGpuMs = m_gpuTimer.m_elapsed * toGpuMs;
- maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
- }
- while (m_gpuTimer.get() );
+ const TimerQueryD3D11::Result& result = m_gpuTimer.m_result[BGFX_CONFIG_MAX_VIEWS];
+ double toGpuMs = 1000.0 / double(result.m_frequency);
+ elapsedGpuMs = (result.m_end - result.m_begin) * toGpuMs;
+ maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
- maxGpuLatency = bx::uint32_imax(maxGpuLatency, m_gpuTimer.m_control.available()-1);
+ maxGpuLatency = bx::uint32_imax(maxGpuLatency, result.m_pending-1);
}
const int64_t timerFreq = bx::getHPFrequency();
- perfStats.cpuTimeEnd = now;
+ Stats& perfStats = _render->m_perfStats;
+ perfStats.cpuTimeBegin = timeBegin;
+ perfStats.cpuTimeEnd = timeEnd;
perfStats.cpuTimerFreq = timerFreq;
- perfStats.gpuTimeBegin = m_gpuTimer.m_begin;
- perfStats.gpuTimeEnd = m_gpuTimer.m_end;
- perfStats.gpuTimerFreq = m_gpuTimer.m_frequency;
+ const TimerQueryD3D11::Result& result = m_gpuTimer.m_result[BGFX_CONFIG_MAX_VIEWS];
+ perfStats.gpuTimeBegin = result.m_begin;
+ perfStats.gpuTimeEnd = result.m_end;
+ perfStats.gpuTimerFreq = result.m_frequency;
perfStats.numDraw = statsKeyType[0];
perfStats.numCompute = statsKeyType[1];
perfStats.maxGpuLatency = maxGpuLatency;
+ m_nvapi.getMemoryInfo(perfStats.gpuMemoryUsed, perfStats.gpuMemoryMax);
if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) )
{
@@ -6258,12 +6545,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_needPresent = true;
TextVideoMem& tvm = m_textVideoMem;
- static int64_t next = now;
+ static int64_t next = timeEnd;
- if (now >= next)
+ if (timeEnd >= next)
{
- next = now + timerFreq;
- double freq = double(bx::getHPFrequency() );
+ next = timeEnd + timerFreq;
+
+ double freq = double(timerFreq);
double toMs = 1000.0/freq;
tvm.clear();
@@ -6320,9 +6608,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
, !!(m_resolution.m_flags&BGFX_RESET_MAXANISOTROPY) ? '\xfe' : ' '
);
- double elapsedCpuMs = double(elapsed)*toMs;
+ double elapsedCpuMs = double(frameTime)*toMs;
tvm.printf(10, pos++, 0x8e, " Submitted: %5d (draw %5d, compute %4d) / CPU %7.4f [ms] %c GPU %7.4f [ms] (latency %d) "
- , _render->m_num
+ , _render->m_numRenderItems
, statsKeyType[0]
, statsKeyType[1]
, elapsedCpuMs
@@ -6350,7 +6638,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
tvm.printf(10, pos++, 0x8e, " Indices: %7d ", statsNumIndices);
- tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
+// tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
tvm.printf(10, pos++, 0x8e, " DVB size: %7d ", _render->m_vboffset);
tvm.printf(10, pos++, 0x8e, " DIB size: %7d ", _render->m_iboffset);
@@ -6397,12 +6685,6 @@ BX_PRAGMA_DIAGNOSTIC_POP();
}
} /* namespace d3d11 */ } // namespace bgfx
-#undef BGFX_GPU_PROFILER_BIND
-#undef BGFX_GPU_PROFILER_UNBIND
-#undef BGFX_GPU_PROFILER_BEGIN
-#undef BGFX_GPU_PROFILER_BEGIN_DYNAMIC
-#undef BGFX_GPU_PROFILER_END
-
#else
namespace bgfx { namespace d3d11
diff --git a/3rdparty/bgfx/src/renderer_d3d11.h b/3rdparty/bgfx/src/renderer_d3d11.h
index 852a69e11c0..699352d98e5 100644
--- a/3rdparty/bgfx/src/renderer_d3d11.h
+++ b/3rdparty/bgfx/src/renderer_d3d11.h
@@ -6,7 +6,8 @@
#ifndef BGFX_RENDERER_D3D11_H_HEADER_GUARD
#define BGFX_RENDERER_D3D11_H_HEADER_GUARD
-#define USE_D3D11_DYNAMIC_LIB BX_PLATFORM_WINDOWS
+#define USE_D3D11_DYNAMIC_LIB BX_PLATFORM_WINDOWS
+#define USE_D3D11_STAGING_BUFFER 0
#if !USE_D3D11_DYNAMIC_LIB
# undef BGFX_CONFIG_DEBUG_PIX
@@ -35,6 +36,7 @@ BX_PRAGMA_DIAGNOSTIC_POP()
#include "hmd.h"
#include "hmd_openvr.h"
#include "debug_renderdoc.h"
+#include "nvapi.h"
#ifndef D3DCOLOR_ARGB
# define D3DCOLOR_ARGB(_a, _r, _g, _b) ( (DWORD)( ( ( (_a)&0xff)<<24)|( ( (_r)&0xff)<<16)|( ( (_g)&0xff)<<8)|( (_b)&0xff) ) )
@@ -64,6 +66,9 @@ namespace bgfx { namespace d3d11
{
BufferD3D11()
: m_ptr(NULL)
+#if USE_D3D11_STAGING_BUFFER
+ , m_staging(NULL)
+#endif // USE_D3D11_STAGING_BUFFER
, m_srv(NULL)
, m_uav(NULL)
, m_flags(BGFX_BUFFER_NONE)
@@ -82,11 +87,18 @@ namespace bgfx { namespace d3d11
m_dynamic = false;
}
+#if USE_D3D11_STAGING_BUFFER
+ DX_RELEASE(m_staging, 0);
+#endif // USE_D3D11_STAGING_BUFFER
+
DX_RELEASE(m_srv, 0);
DX_RELEASE(m_uav, 0);
}
ID3D11Buffer* m_ptr;
+#if USE_D3D11_STAGING_BUFFER
+ ID3D11Buffer* m_staging;
+#endif // USE_D3D11_STAGING_BUFFER
ID3D11ShaderResourceView* m_srv;
ID3D11UnorderedAccessView* m_uav;
uint32_t m_size;
@@ -154,7 +166,7 @@ namespace bgfx { namespace d3d11
ID3D11ComputeShader* m_computeShader;
ID3D11PixelShader* m_pixelShader;
ID3D11VertexShader* m_vertexShader;
- IUnknown* m_ptr;
+ ID3D11DeviceChild* m_ptr;
};
const Memory* m_code;
ID3D11Buffer* m_buffer;
@@ -233,6 +245,7 @@ namespace bgfx { namespace d3d11
void commit(uint8_t _stage, uint32_t _flags, const float _palette[][4]);
void resolve() const;
TextureHandle getHandle() const;
+ DXGI_FORMAT getSrvFormat() const;
union
{
@@ -300,29 +313,44 @@ namespace bgfx { namespace d3d11
struct TimerQueryD3D11
{
TimerQueryD3D11()
- : m_control(BX_COUNTOF(m_frame) )
+ : m_control(BX_COUNTOF(m_query) )
{
}
void postReset();
void preReset();
- void begin();
- void end();
- bool get();
+ uint32_t begin(uint32_t _resultIdx);
+ void end(uint32_t _idx);
+ bool update();
- struct Frame
+ struct Query
{
ID3D11Query* m_disjoint;
ID3D11Query* m_begin;
ID3D11Query* m_end;
+ uint32_t m_resultIdx;
+ bool m_ready;
+ };
+
+ struct Result
+ {
+ void reset()
+ {
+ m_begin = 0;
+ m_end = 0;
+ m_frequency = 1;
+ m_pending = 0;
+ }
+
+ uint64_t m_begin;
+ uint64_t m_end;
+ uint64_t m_frequency;
+ uint32_t m_pending;
};
- uint64_t m_begin;
- uint64_t m_end;
- uint64_t m_elapsed;
- uint64_t m_frequency;
+ Result m_result[BGFX_CONFIG_MAX_VIEWS+1];
- Frame m_frame[4];
+ Query m_query[BGFX_CONFIG_MAX_VIEWS*4];
bx::RingBufferControl m_control;
};
diff --git a/3rdparty/bgfx/src/renderer_d3d12.cpp b/3rdparty/bgfx/src/renderer_d3d12.cpp
index cf001166b4c..c38ad43a7d0 100644
--- a/3rdparty/bgfx/src/renderer_d3d12.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d12.cpp
@@ -10,7 +10,8 @@
namespace bgfx { namespace d3d12
{
- static wchar_t s_viewNameW[BGFX_CONFIG_MAX_VIEWS][256];
+ static wchar_t s_viewNameW[BGFX_CONFIG_MAX_VIEWS][BGFX_CONFIG_MAX_VIEW_NAME];
+ static char s_viewName[BGFX_CONFIG_MAX_VIEWS][BGFX_CONFIG_MAX_VIEW_NAME];
struct PrimInfo
{
@@ -239,7 +240,7 @@ namespace bgfx { namespace d3d12
{ DXGI_FORMAT_B4G4R4A4_UNORM, DXGI_FORMAT_B4G4R4A4_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGBA4
{ DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB5A1
{ DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB10A2
- { DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // R11G11B10F
+ { DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG11B10F
{ DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // UnknownDepth
{ DXGI_FORMAT_R16_TYPELESS, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_D16_UNORM, DXGI_FORMAT_UNKNOWN }, // D16
{ DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, DXGI_FORMAT_D24_UNORM_S8_UINT, DXGI_FORMAT_UNKNOWN }, // D24
@@ -260,6 +261,8 @@ namespace bgfx { namespace d3d12
{ "BITANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
{ "COLOR", 1, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
+ { "COLOR", 2, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
+ { "COLOR", 3, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
{ "BLENDINDICES", 0, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
{ "BLENDWEIGHT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
@@ -432,6 +435,46 @@ namespace bgfx { namespace d3d12
return createCommittedResource(_device, _heapProperty, &resourceDesc, NULL);
}
+ inline bool isLost(HRESULT _hr)
+ {
+ return false
+ || _hr == DXGI_ERROR_DEVICE_REMOVED
+ || _hr == DXGI_ERROR_DEVICE_HUNG
+ || _hr == DXGI_ERROR_DEVICE_RESET
+ || _hr == DXGI_ERROR_DRIVER_INTERNAL_ERROR
+ || _hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
+ ;
+ }
+
+ static const char* getLostReason(HRESULT _hr)
+ {
+ switch (_hr)
+ {
+ // The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.
+ case DXGI_ERROR_DEVICE_REMOVED: return "DXGI_ERROR_DEVICE_REMOVED";
+
+ // The GPU will not respond to more commands, most likely because of an invalid command passed by the calling application.
+ case DXGI_ERROR_DEVICE_HUNG: return "DXGI_ERROR_DEVICE_HUNG";
+
+ // The GPU will not respond to more commands, most likely because some other application submitted invalid commands.
+ // The calling application should re-create the device and continue.
+ case DXGI_ERROR_DEVICE_RESET: return "DXGI_ERROR_DEVICE_RESET";
+
+ // An internal issue prevented the driver from carrying out the specified operation. The driver's state is probably
+ // suspect, and the application should not continue.
+ case DXGI_ERROR_DRIVER_INTERNAL_ERROR: return "DXGI_ERROR_DRIVER_INTERNAL_ERROR";
+
+ // A resource is not available at the time of the call, but may become available later.
+ case DXGI_ERROR_NOT_CURRENTLY_AVAILABLE: return "DXGI_ERROR_NOT_CURRENTLY_AVAILABLE";
+
+ case S_OK: return "S_OK";
+
+ default: break;
+ }
+
+ return "Unknown HRESULT?";
+ }
+
BX_NO_INLINE void setDebugObjectName(ID3D12Object* _object, const char* _format, ...)
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_OBJECT_NAME) )
@@ -459,6 +502,42 @@ namespace bgfx { namespace d3d12
static PFN_CREATE_EVENT_EX_A CreateEventExA;
#endif // USE_D3D12_DYNAMIC_LIB
+ inline D3D12_CPU_DESCRIPTOR_HANDLE getCPUHandleHeapStart(ID3D12DescriptorHeap* _heap)
+ {
+#if BX_COMPILER_MSVC
+ return _heap->GetCPUDescriptorHandleForHeapStart();
+#else
+ D3D12_CPU_DESCRIPTOR_HANDLE handle;
+ typedef void (WINAPI ID3D12DescriptorHeap::*PFN_GET_CPU_DESCRIPTOR_HANDLE_FOR_HEAP_START)(D3D12_CPU_DESCRIPTOR_HANDLE *);
+ (_heap->*(PFN_GET_CPU_DESCRIPTOR_HANDLE_FOR_HEAP_START)(&ID3D12DescriptorHeap::GetCPUDescriptorHandleForHeapStart) )(&handle);
+ return handle;
+#endif // BX_COMPILER_MSVC
+ }
+
+ inline D3D12_GPU_DESCRIPTOR_HANDLE getGPUHandleHeapStart(ID3D12DescriptorHeap* _heap)
+ {
+#if BX_COMPILER_MSVC
+ return _heap->GetGPUDescriptorHandleForHeapStart();
+#else
+ D3D12_GPU_DESCRIPTOR_HANDLE handle;
+ typedef void (WINAPI ID3D12DescriptorHeap::*PFN_GET_GPU_DESCRIPTOR_HANDLE_FOR_HEAP_START)(D3D12_GPU_DESCRIPTOR_HANDLE *);
+ (_heap->*(PFN_GET_GPU_DESCRIPTOR_HANDLE_FOR_HEAP_START)(&ID3D12DescriptorHeap::GetGPUDescriptorHandleForHeapStart) )(&handle);
+ return handle;
+#endif // BX_COMPILER_MSVC
+ }
+
+ inline D3D12_RESOURCE_DESC getResourceDesc(ID3D12Resource* _resource)
+ {
+#if BX_COMPILER_MSVC
+ return _resource->GetDesc();
+#else
+ typedef void (STDMETHODCALLTYPE ID3D12Resource::*PFN_GET_GET_DESC)(D3D12_RESOURCE_DESC*);
+ D3D12_RESOURCE_DESC desc;
+ (_resource->*(PFN_GET_GET_DESC)(&ID3D12Resource::GetDesc))(&desc);
+ return desc;
+#endif // BX_COMPILER_MSVC
+ }
+
struct RendererContextD3D12 : public RendererContextI
{
RendererContextD3D12()
@@ -467,6 +546,7 @@ namespace bgfx { namespace d3d12
, m_renderdocdll(NULL)
, m_featureLevel(D3D_FEATURE_LEVEL(0) )
, m_wireframe(false)
+ , m_lost(false)
, m_maxAnisotropy(1)
, m_depthClamp(false)
, m_fsChanges(0)
@@ -499,32 +579,33 @@ namespace bgfx { namespace d3d12
LUID luid;
m_renderdocdll = loadRenderDoc();
+ setGraphicsDebuggerPresent(NULL != m_renderdocdll);
- m_fbh.idx = invalidHandle;
+ m_fbh.idx = kInvalidHandle;
bx::memSet(m_uniforms, 0, sizeof(m_uniforms) );
bx::memSet(&m_resolution, 0, sizeof(m_resolution) );
#if USE_D3D12_DYNAMIC_LIB
m_kernel32dll = bx::dlopen("kernel32.dll");
- BX_WARN(NULL != m_kernel32dll, "Failed to load kernel32.dll.");
if (NULL == m_kernel32dll)
{
+ BX_TRACE("Init error: Failed to load kernel32.dll.");
goto error;
}
CreateEventExA = (PFN_CREATE_EVENT_EX_A)bx::dlsym(m_kernel32dll, "CreateEventExA");
- BX_WARN(NULL != CreateEventExA, "Function CreateEventExA not found.");
if (NULL == CreateEventExA)
{
+ BX_TRACE("Init error: Function CreateEventExA not found.");
goto error;
}
errorState = ErrorState::LoadedKernel32;
m_d3d12dll = bx::dlopen("d3d12.dll");
- BX_WARN(NULL != m_d3d12dll, "Failed to load d3d12.dll.");
if (NULL == m_d3d12dll)
{
+ BX_TRACE("Init error: Failed to load d3d12.dll.");
goto error;
}
@@ -543,22 +624,23 @@ namespace bgfx { namespace d3d12
|| NULL == D3D12GetDebugInterface
|| NULL == D3D12SerializeRootSignature)
{
+ BX_TRACE("Init error: Function not found.");
goto error;
}
m_dxgidll = bx::dlopen("dxgi.dll");
- BX_WARN(NULL != m_dxgidll, "Failed to load dxgi.dll.");
if (NULL == m_dxgidll)
{
+ BX_TRACE("Init error: Failed to load dxgi.dll.");
goto error;
}
CreateDXGIFactory1 = (PFN_CREATE_DXGI_FACTORY)bx::dlsym(m_dxgidll, "CreateDXGIFactory1");
- BX_WARN(NULL != CreateDXGIFactory1, "Function CreateDXGIFactory1 not found.");
if (NULL == CreateDXGIFactory1)
{
+ BX_TRACE("Init error: Function CreateDXGIFactory1 not found.");
goto error;
}
#endif // USE_D3D12_DYNAMIC_LIB
@@ -573,10 +655,10 @@ namespace bgfx { namespace d3d12
hr = S_OK;
m_factory = NULL;
#endif // BX_PLATFORM_*
- BX_WARN(SUCCEEDED(hr), "Unable to create DXGI factory.");
if (FAILED(hr) )
{
+ BX_TRACE("Init error: Unable to create DXGI factory.");
goto error;
}
@@ -629,7 +711,7 @@ namespace bgfx { namespace d3d12
}
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PERFHUD)
- && 0 != strstr(description, "PerfHUD") )
+ && 0 != bx::strFind(description, "PerfHUD") )
{
m_adapter = adapter;
m_driverType = D3D_DRIVER_TYPE_REFERENCE;
@@ -678,14 +760,19 @@ namespace bgfx { namespace d3d12
if (FAILED(hr) )
{
- BX_TRACE("Unable to create Direct3D12 device.");
+ BX_TRACE("Init error: Unable to create Direct3D12 device.");
goto error;
}
if (NULL != m_factory)
{
bx::memSet(&m_adapterDesc, 0, sizeof(m_adapterDesc) );
- luid = m_device->GetAdapterLuid();
+// NOTICE:
+// LUID STDMETHODCALLTYPE ID3D12Device::GetAdapterLuid() has a different behaviour in gcc ,
+// because gcc64 returns small struct in RAX, but the microsoft implemention of ID3D12Device::GetAdapterLuid() in d3d12.dll
+// pass the struct LUID's address as the second parameter.
+ typedef void (STDMETHODCALLTYPE ID3D12Device::*ID3D12Device_GetAdapterLuid_f)(LUID *);
+ (m_device->*(ID3D12Device_GetAdapterLuid_f)(&ID3D12Device::GetAdapterLuid))(&luid);
#if BX_PLATFORM_WINDOWS
IDXGIAdapter3* adapter;
#else
@@ -743,7 +830,7 @@ namespace bgfx { namespace d3d12
if (FAILED(hr) )
{
- BX_TRACE("Unable to query IDXGIDevice1 interface 0x%08x.", hr);
+ BX_TRACE("Init error: Unable to query IDXGIDevice1 interface 0x%08x.", hr);
goto error;
}
@@ -751,7 +838,7 @@ namespace bgfx { namespace d3d12
if (FAILED(hr) )
{
- BX_TRACE("DXGIDevice1::GetAdapter failed 0x%08x.", hr);
+ BX_TRACE("Init error: DXGIDevice1::GetAdapter failed 0x%08x.", hr);
goto error;
}
@@ -759,7 +846,7 @@ namespace bgfx { namespace d3d12
if (FAILED(hr) )
{
- BX_TRACE("IDXGIAdapter::GetParent failed 0x%08x.", hr);
+ BX_TRACE("Init error: IDXGIAdapter::GetParent failed 0x%08x.", hr);
goto error;
}
}
@@ -784,7 +871,7 @@ namespace bgfx { namespace d3d12
DX_RELEASE(m_adapter, 1);
if (FAILED(hr) )
{
- BX_TRACE("Unable to create Direct3D11 device.");
+ BX_TRACE("Init error: Unable to create Direct3D11 device.");
goto error;
}
@@ -864,7 +951,7 @@ namespace bgfx { namespace d3d12
#endif // BX_PLATFORM_*
if (FAILED(hr) )
{
- BX_TRACE("Failed to create swap chain.");
+ BX_TRACE("Init error: Failed to create swap chain.");
goto error;
}
}
@@ -1014,7 +1101,7 @@ namespace bgfx { namespace d3d12
{
uint16_t support = BGFX_CAPS_FORMAT_TEXTURE_NONE;
- const DXGI_FORMAT fmt = isDepth(TextureFormat::Enum(ii) )
+ const DXGI_FORMAT fmt = bimg::isDepth(bimg::TextureFormat::Enum(ii) )
? s_textureFormat[ii].m_fmtDsv
: s_textureFormat[ii].m_fmt
;
@@ -1154,6 +1241,13 @@ namespace bgfx { namespace d3d12
g_caps.formats[ii] = support;
}
+ // Init reserved part of view name.
+ for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
+ {
+ bx::snprintf(s_viewName[ii], BGFX_CONFIG_MAX_VIEW_NAME_RESERVED + 1, "%3d ", ii);
+ mbstowcs(s_viewNameW[ii], s_viewName[ii], BGFX_CONFIG_MAX_VIEW_NAME_RESERVED);
+ }
+
postReset();
m_batch.create(4<<10);
@@ -1250,29 +1344,25 @@ namespace bgfx { namespace d3d12
#endif // USE_D3D12_DYNAMIC_LIB
}
- RendererType::Enum getRendererType() const BX_OVERRIDE
+ RendererType::Enum getRendererType() const override
{
return RendererType::Direct3D12;
}
- const char* getRendererName() const BX_OVERRIDE
+ const char* getRendererName() const override
{
return BGFX_RENDERER_DIRECT3D12_NAME;
}
- static bool isLost(HRESULT _hr)
+ bool isDeviceRemoved() override
{
- return DXGI_ERROR_DEVICE_REMOVED == _hr
- || DXGI_ERROR_DEVICE_HUNG == _hr
- || DXGI_ERROR_DEVICE_RESET == _hr
- || DXGI_ERROR_DRIVER_INTERNAL_ERROR == _hr
- || DXGI_ERROR_NOT_CURRENTLY_AVAILABLE == _hr
- ;
+ return m_lost;
}
- void flip(HMD& /*_hmd*/) BX_OVERRIDE
+ void flip(HMD& /*_hmd*/) override
{
- if (NULL != m_swapChain)
+ if (NULL != m_swapChain
+ && !m_lost)
{
int64_t start = bx::getHPCounter();
@@ -1293,124 +1383,122 @@ namespace bgfx { namespace d3d12
int64_t now = bx::getHPCounter();
m_presentElapsed = now - start;
- if (FAILED(hr)
- && isLost(hr) )
- {
- ++m_lost;
- BGFX_FATAL(10 > m_lost, bgfx::Fatal::DeviceLost, "Device is lost. FAILED 0x%08x", hr);
- }
- else
- {
- m_lost = 0;
- }
+ m_lost = isLost(hr);
+ BGFX_FATAL(!m_lost
+ , bgfx::Fatal::DeviceLost
+ , "Device is lost. FAILED 0x%08x %s (%s)"
+ , hr
+ , getLostReason(hr)
+ , DXGI_ERROR_DEVICE_REMOVED == hr ? getLostReason(m_device->GetDeviceRemovedReason() ) : "no info"
+ );
}
}
- void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) BX_OVERRIDE
+ void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_mem->size, _mem->data, _flags, false);
}
- void destroyIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE
+ void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) override
{
VertexDecl& decl = m_vertexDecls[_handle.idx];
bx::memCopy(&decl, &_decl, sizeof(VertexDecl) );
dump(decl);
}
- void destroyVertexDecl(VertexDeclHandle /*_handle*/) BX_OVERRIDE
+ void destroyVertexDecl(VertexDeclHandle /*_handle*/) override
{
}
- void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) BX_OVERRIDE
+ void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) override
{
m_vertexBuffers[_handle.idx].create(_mem->size, _mem->data, _declHandle, _flags);
}
- void destroyVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_size, NULL, _flags, false);
}
- void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_indexBuffers[_handle.idx].update(m_commandList, _offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
VertexDeclHandle decl = BGFX_INVALID_HANDLE;
m_vertexBuffers[_handle.idx].create(_size, NULL, decl, _flags);
}
- void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_vertexBuffers[_handle.idx].update(m_commandList, _offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createShader(ShaderHandle _handle, Memory* _mem) BX_OVERRIDE
+ void createShader(ShaderHandle _handle, Memory* _mem) override
{
m_shaders[_handle.idx].create(_mem);
}
- void destroyShader(ShaderHandle _handle) BX_OVERRIDE
+ void destroyShader(ShaderHandle _handle) override
{
m_shaders[_handle.idx].destroy();
}
- void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) BX_OVERRIDE
+ void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) override
{
m_program[_handle.idx].create(&m_shaders[_vsh.idx], isValid(_fsh) ? &m_shaders[_fsh.idx] : NULL);
}
- void destroyProgram(ProgramHandle _handle) BX_OVERRIDE
+ void destroyProgram(ProgramHandle _handle) override
{
m_program[_handle.idx].destroy();
}
- void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) BX_OVERRIDE
+ void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) override
{
m_textures[_handle.idx].create(_mem, _flags, _skip);
}
- void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) BX_OVERRIDE
+ void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) override
{
}
- void updateTexture(TextureHandle _handle, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) BX_OVERRIDE
+ void updateTexture(TextureHandle _handle, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) override
{
m_textures[_handle.idx].update(m_commandList, _side, _mip, _rect, _z, _depth, _pitch, _mem);
}
- void updateTextureEnd() BX_OVERRIDE
+ void updateTextureEnd() override
{
}
- void readTexture(TextureHandle _handle, void* _data, uint8_t _mip ) BX_OVERRIDE
+ void readTexture(TextureHandle _handle, void* _data, uint8_t _mip ) override
{
const TextureD3D12& texture = m_textures[_handle.idx];
- D3D12_RESOURCE_DESC desc = texture.m_ptr->GetDesc();
+ D3D12_RESOURCE_DESC desc = getResourceDesc(texture.m_ptr);
D3D12_PLACED_SUBRESOURCE_FOOTPRINT layout;
uint32_t numRows;
@@ -1448,7 +1536,7 @@ namespace bgfx { namespace d3d12
uint8_t* src;
readback->Map(0, NULL, (void**)&src);
- const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(texture.m_textureFormat) );
+ const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(texture.m_textureFormat) );
uint8_t* dst = (uint8_t*)_data;
uint32_t dstPitch = srcWidth*bpp/8;
@@ -1467,7 +1555,7 @@ namespace bgfx { namespace d3d12
DX_RELEASE(readback, 0);
}
- void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) BX_OVERRIDE
+ void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) override
{
TextureD3D12& texture = m_textures[_handle.idx];
@@ -1495,35 +1583,35 @@ namespace bgfx { namespace d3d12
release(mem);
}
- void overrideInternal(TextureHandle _handle, uintptr_t _ptr) BX_OVERRIDE
+ void overrideInternal(TextureHandle _handle, uintptr_t _ptr) override
{
BX_UNUSED(_handle, _ptr);
}
- uintptr_t getInternal(TextureHandle _handle) BX_OVERRIDE
+ uintptr_t getInternal(TextureHandle _handle) override
{
BX_UNUSED(_handle);
return 0;
}
- void destroyTexture(TextureHandle _handle) BX_OVERRIDE
+ void destroyTexture(TextureHandle _handle) override
{
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) override
{
m_frameBuffers[_handle.idx].create(_num, _attachment);
}
- void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) override
{
uint16_t denseIdx = m_numWindows++;
m_windows[denseIdx] = _handle;
m_frameBuffers[_handle.idx].create(denseIdx, _nwh, _width, _height, _depthFormat);
}
- void destroyFrameBuffer(FrameBufferHandle _handle) BX_OVERRIDE
+ void destroyFrameBuffer(FrameBufferHandle _handle) override
{
uint16_t denseIdx = m_frameBuffers[_handle.idx].destroy();
if (UINT16_MAX != denseIdx)
@@ -1538,7 +1626,7 @@ namespace bgfx { namespace d3d12
}
}
- void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) BX_OVERRIDE
+ void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) override
{
if (NULL != m_uniforms[_handle.idx])
{
@@ -1552,14 +1640,14 @@ namespace bgfx { namespace d3d12
m_uniformReg.add(_handle, _name, data);
}
- void destroyUniform(UniformHandle _handle) BX_OVERRIDE
+ void destroyUniform(UniformHandle _handle) override
{
BX_FREE(g_allocator, m_uniforms[_handle.idx]);
m_uniforms[_handle.idx] = NULL;
m_uniformReg.remove(_handle);
}
- void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE
+ void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) override
{
BX_UNUSED(_handle);
@@ -1567,7 +1655,7 @@ namespace bgfx { namespace d3d12
m_cmd.finish(m_backBufferColorFence[idx]);
ID3D12Resource* backBuffer = m_backBufferColor[idx];
- D3D12_RESOURCE_DESC desc = backBuffer->GetDesc();
+ D3D12_RESOURCE_DESC desc = getResourceDesc(backBuffer);
const uint32_t width = (uint32_t)desc.Width;
const uint32_t height = (uint32_t)desc.Height;
@@ -1606,17 +1694,18 @@ namespace bgfx { namespace d3d12
void* data;
readback->Map(0, NULL, (void**)&data);
- imageSwizzleBgra8(
+ bimg::imageSwizzleBgra8(
data
+ , layout.Footprint.RowPitch
, width
, height
- , (uint32_t)pitch
, data
+ , layout.Footprint.RowPitch
);
g_callback->screenShot(_filePath
, width
, height
- , (uint32_t)pitch
+ , layout.Footprint.RowPitch
, data
, (uint32_t)total
, false
@@ -1626,27 +1715,59 @@ namespace bgfx { namespace d3d12
DX_RELEASE(readback, 0);
}
- void updateViewName(uint8_t /*_id*/, const char* /*_name*/) BX_OVERRIDE
+ void updateViewName(ViewId _id, const char* _name) override
{
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
+ {
+ mbstowcs(&s_viewNameW[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
+ , _name
+ , BX_COUNTOF(s_viewNameW[0])-BGFX_CONFIG_MAX_VIEW_NAME_RESERVED
+ );
+ }
+
+ bx::strCopy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
+ , BX_COUNTOF(s_viewName[0]) - BGFX_CONFIG_MAX_VIEW_NAME_RESERVED
+ , _name
+ );
}
- void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE
+ void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) override
{
bx::memCopy(m_uniforms[_loc], _data, _size);
}
- void setMarker(const char* /*_marker*/, uint32_t /*_size*/) BX_OVERRIDE
+ void setMarker(const char* /*_marker*/, uint32_t /*_size*/) override
{
}
- void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE
+ void invalidateOcclusionQuery(OcclusionQueryHandle _handle) override
{
m_occlusionQuery.invalidate(_handle);
}
- void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE;
+ virtual void setName(Handle _handle, const char* _name) override
+ {
+ switch (_handle.type)
+ {
+ case Handle::Shader:
+// setDebugObjectName(m_shaders[_handle.idx].m_ptr, _name);
+ break;
+
+ case Handle::Texture:
+ setDebugObjectName(m_textures[_handle.idx].m_ptr, _name);
+ break;
+
+ default:
+ BX_CHECK(false, "Invalid handle type?! %d", _handle.type);
+ break;
+ }
+ }
+
+ void submitBlit(BlitState& _bs, uint16_t _view);
- void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE
+ void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) override;
+
+ void blitSetup(TextVideoMemBlitter& _blitter) override
{
const uint32_t width = getBufferWidth();
const uint32_t height = getBufferHeight();
@@ -1686,7 +1807,7 @@ namespace bgfx { namespace d3d12
m_commandList->SetGraphicsRootSignature(m_rootSignature);
float proj[16];
- bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f);
+ bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f, 0.0f, false);
PredefinedUniform& predefined = m_program[_blitter.m_program.idx].m_predefined[0];
uint8_t flags = predefined.m_type;
@@ -1730,7 +1851,7 @@ namespace bgfx { namespace d3d12
m_commandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
}
- void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) BX_OVERRIDE
+ void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) override
{
const uint32_t numVertices = _numIndices*4/6;
if (0 < numVertices)
@@ -1775,7 +1896,7 @@ namespace bgfx { namespace d3d12
for (uint32_t ii = 0, num = m_scd.BufferCount; ii < num; ++ii)
{
- D3D12_CPU_DESCRIPTOR_HANDLE handle = m_rtvDescriptorHeap->GetCPUDescriptorHandleForHeapStart();
+ D3D12_CPU_DESCRIPTOR_HANDLE handle = getCPUHandleHeapStart(m_rtvDescriptorHeap);
handle.ptr += ii * rtvDescriptorSize;
DX_CHECK(m_swapChain->GetBuffer(ii
, IID_ID3D12Resource
@@ -1815,7 +1936,7 @@ namespace bgfx { namespace d3d12
m_device->CreateDepthStencilView(m_backBufferDepthStencil
, &dsvDesc
- , m_dsvDescriptorHeap->GetCPUDescriptorHandleForHeapStart()
+ , getCPUHandleHeapStart(m_dsvDescriptorHeap)
);
for (uint32_t ii = 0; ii < BX_COUNTOF(m_frameBuffers); ++ii)
@@ -1864,7 +1985,7 @@ data.NumQualityLevels = 0;
}
}
- void updateResolution(const Resolution& _resolution)
+ bool updateResolution(const Resolution& _resolution)
{
if (!!(_resolution.m_flags & BGFX_RESET_MAXANISOTROPY) )
{
@@ -1946,6 +2067,8 @@ data.NumQualityLevels = 0;
postReset();
}
+
+ return false;
}
void setShaderUniform(uint8_t _flags, uint32_t _regIndex, const void* _val, uint32_t _numRegs)
@@ -2024,10 +2147,10 @@ data.NumQualityLevels = 0;
if (!isValid(_fbh) )
{
- m_rtvHandle = m_rtvDescriptorHeap->GetCPUDescriptorHandleForHeapStart();
+ m_rtvHandle = getCPUHandleHeapStart(m_rtvDescriptorHeap);
uint32_t rtvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
m_rtvHandle.ptr += m_backBufferColorIdx * rtvDescriptorSize;
- m_dsvHandle = m_dsvDescriptorHeap->GetCPUDescriptorHandleForHeapStart();
+ m_dsvHandle = getCPUHandleHeapStart(m_dsvDescriptorHeap);
m_currentColor = &m_rtvHandle;
m_currentDepthStencil = &m_dsvHandle;
@@ -2039,7 +2162,7 @@ data.NumQualityLevels = 0;
if (0 < frameBuffer.m_num)
{
- D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = m_rtvDescriptorHeap->GetCPUDescriptorHandleForHeapStart();
+ D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = getCPUHandleHeapStart(m_rtvDescriptorHeap);
uint32_t rtvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
m_rtvHandle.ptr = rtvDescriptor.ptr + (BX_COUNTOF(m_backBufferColor) + _fbh.idx * BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) * rtvDescriptorSize;
m_currentColor = &m_rtvHandle;
@@ -2051,7 +2174,7 @@ data.NumQualityLevels = 0;
if (isValid(frameBuffer.m_depth) )
{
- D3D12_CPU_DESCRIPTOR_HANDLE dsvDescriptor = m_dsvDescriptorHeap->GetCPUDescriptorHandleForHeapStart();
+ D3D12_CPU_DESCRIPTOR_HANDLE dsvDescriptor = getCPUHandleHeapStart(m_dsvDescriptorHeap);
uint32_t dsvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV);
m_dsvHandle.ptr = dsvDescriptor.ptr + (1 + _fbh.idx) * dsvDescriptorSize;
m_currentDepthStencil = &m_dsvHandle;
@@ -2243,7 +2366,7 @@ data.NumQualityLevels = 0;
for (jj = 0; jj < num; ++jj)
{
curr = &_vertexElements[jj];
- if (0 == bx::strncmp(curr->SemanticName, "TEXCOORD")
+ if (0 == bx::strCmp(curr->SemanticName, "TEXCOORD")
&& curr->SemanticIndex == index)
{
break;
@@ -2831,7 +2954,6 @@ data.NumQualityLevels = 0;
#endif // BX_PLATFORM_WINDOWS
int64_t m_presentElapsed;
- uint16_t m_lost;
uint16_t m_numWindows;
FrameBufferHandle m_windows[BGFX_CONFIG_MAX_FRAME_BUFFERS];
@@ -2860,6 +2982,7 @@ data.NumQualityLevels = 0;
Resolution m_resolution;
bool m_wireframe;
+ bool m_lost;
#if BX_PLATFORM_WINDOWS
DXGI_SWAP_CHAIN_DESC m_scd;
@@ -2920,7 +3043,6 @@ data.NumQualityLevels = 0;
m_size = _size;
ID3D12Device* device = s_renderD3D12->m_device;
-
m_incrementSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
D3D12_DESCRIPTOR_HEAP_DESC desc;
@@ -2951,8 +3073,8 @@ data.NumQualityLevels = 0;
void ScratchBufferD3D12::reset(D3D12_GPU_DESCRIPTOR_HANDLE& _gpuHandle)
{
m_pos = 0;
- m_cpuHandle = m_heap->GetCPUDescriptorHandleForHeapStart();
- m_gpuHandle = m_heap->GetGPUDescriptorHandleForHeapStart();
+ m_cpuHandle = getCPUHandleHeapStart(m_heap);
+ m_gpuHandle = getGPUHandleHeapStart(m_heap);
_gpuHandle = m_gpuHandle;
}
@@ -3108,8 +3230,8 @@ data.NumQualityLevels = 0;
, (void**)&m_heap
) );
- m_cpuHandle = m_heap->GetCPUDescriptorHandleForHeapStart();
- m_gpuHandle = m_heap->GetGPUDescriptorHandleForHeapStart();
+ m_cpuHandle = getCPUHandleHeapStart(m_heap);
+ m_gpuHandle = getGPUHandleHeapStart(m_heap);
}
void DescriptorAllocatorD3D12::destroy()
@@ -3156,7 +3278,7 @@ data.NumQualityLevels = 0;
sd.AddressU = s_textureAddress[(flags&BGFX_TEXTURE_U_MASK)>>BGFX_TEXTURE_U_SHIFT];
sd.AddressV = s_textureAddress[(flags&BGFX_TEXTURE_V_MASK)>>BGFX_TEXTURE_V_SHIFT];
sd.AddressW = s_textureAddress[(flags&BGFX_TEXTURE_W_MASK)>>BGFX_TEXTURE_W_SHIFT];
- sd.MipLODBias = 0.0f;
+ sd.MipLODBias = float(BGFX_CONFIG_MIP_LOD_BIAS);
sd.MaxAnisotropy = maxAnisotropy;
sd.ComparisonFunc = 0 == cmpFunc ? D3D12_COMPARISON_FUNC_NEVER : s_cmpFunc[cmpFunc];
@@ -3673,7 +3795,7 @@ data.NumQualityLevels = 0;
};
static const UavFormat s_uavFormat[] =
- { // BGFX_BUFFER_COMPUTE_TYPE_UINT, BGFX_BUFFER_COMPUTE_TYPE_INT, BGFX_BUFFER_COMPUTE_TYPE_FLOAT
+ { // BGFX_BUFFER_COMPUTE_TYPE_INT, BGFX_BUFFER_COMPUTE_TYPE_UINT, BGFX_BUFFER_COMPUTE_TYPE_FLOAT
{ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, 0 }, // ignored
{ { DXGI_FORMAT_R8_SINT, DXGI_FORMAT_R8_UINT, DXGI_FORMAT_UNKNOWN }, 1 }, // BGFX_BUFFER_COMPUTE_FORMAT_8x1
{ { DXGI_FORMAT_R8G8_SINT, DXGI_FORMAT_R8G8_UINT, DXGI_FORMAT_UNKNOWN }, 2 }, // BGFX_BUFFER_COMPUTE_FORMAT_8x2
@@ -3929,7 +4051,7 @@ data.NumQualityLevels = 0;
}
}
- uint16_t shaderSize;
+ uint32_t shaderSize;
bx::read(&reader, shaderSize);
const void* code = reader.getDataPtr();
@@ -3968,14 +4090,14 @@ data.NumQualityLevels = 0;
void TextureD3D12::create(const Memory* _mem, uint32_t _flags, uint8_t _skip)
{
- ImageContainer imageContainer;
+ bimg::ImageContainer imageContainer;
- if (imageParse(imageContainer, _mem->data, _mem->size) )
+ if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
{
uint8_t numMips = imageContainer.m_numMips;
const uint8_t startLod = uint8_t(bx::uint32_min(_skip, numMips-1) );
numMips -= startLod;
- const ImageBlockInfo& blockInfo = getBlockInfo(TextureFormat::Enum(imageContainer.m_format) );
+ const bimg::ImageBlockInfo& blockInfo = bimg::getBlockInfo(imageContainer.m_format);
const uint32_t textureWidth = bx::uint32_max(blockInfo.blockWidth, imageContainer.m_width >>startLod);
const uint32_t textureHeight = bx::uint32_max(blockInfo.blockHeight, imageContainer.m_height>>startLod);
const uint16_t numLayers = imageContainer.m_numLayers;
@@ -3987,7 +4109,7 @@ data.NumQualityLevels = 0;
m_requestedFormat = uint8_t(imageContainer.m_format);
m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
const bool convert = m_textureFormat != m_requestedFormat;
- const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
+ const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
if (imageContainer.m_cubeMap)
{
@@ -4009,7 +4131,7 @@ data.NumQualityLevels = 0;
uint32_t kk = 0;
- const bool compressed = isCompressed(TextureFormat::Enum(m_textureFormat) );
+ const bool compressed = bimg::isCompressed(bimg::TextureFormat::Enum(m_textureFormat) );
const bool swizzle = TextureFormat::BGRA8 == m_textureFormat && 0 != (m_flags&BGFX_TEXTURE_COMPUTE_WRITE);
uint32_t blockWidth = 1;
uint32_t blockHeight = 1;
@@ -4051,8 +4173,8 @@ data.NumQualityLevels = 0;
height = bx::uint32_max(blockHeight, height);
depth = bx::uint32_max(1, depth);
- ImageMip mip;
- if (imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
+ bimg::ImageMip mip;
+ if (bimg::imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
{
if (convert)
{
@@ -4060,7 +4182,7 @@ data.NumQualityLevels = 0;
const uint32_t slice = bx::strideAlign(pitch * height, D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, slice);
- imageDecodeToBgra8(temp
+ bimg::imageDecodeToBgra8(temp
, mip.m_data
, mip.m_width
, mip.m_height
@@ -4078,7 +4200,7 @@ data.NumQualityLevels = 0;
uint32_t slice = bx::strideAlign( (mip.m_height/blockInfo.blockHeight)*pitch, D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, slice);
- imageCopy(temp
+ bimg::imageCopy(temp
, mip.m_height/blockInfo.blockHeight
, (mip.m_width /blockInfo.blockWidth )*mip.m_blockSize
, mip.m_data
@@ -4096,7 +4218,7 @@ data.NumQualityLevels = 0;
const uint32_t slice = bx::strideAlign(pitch * mip.m_height, D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, slice);
- imageCopy(temp
+ bimg::imageCopy(temp
, mip.m_height
, mip.m_width*mip.m_bpp / 8
, mip.m_data
@@ -4109,11 +4231,6 @@ data.NumQualityLevels = 0;
totalSize += slice;
}
- if (swizzle)
- {
-// imageSwizzleBgra8(temp, width, height, mip.m_width*4, data);
- }
-
srd[kk].SlicePitch = mip.m_height*srd[kk].RowPitch;
++kk;
}
@@ -4160,11 +4277,10 @@ data.NumQualityLevels = 0;
resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
resourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE;
resourceDesc.DepthOrArraySize = numSides;
-
D3D12_RESOURCE_STATES state = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
D3D12_CLEAR_VALUE* clearValue = NULL;
- if (isDepth(TextureFormat::Enum(m_textureFormat) ) )
+ if (bimg::isDepth(bimg::TextureFormat::Enum(m_textureFormat) ) )
{
resourceDesc.Format = s_textureFormat[m_textureFormat].m_fmt;
resourceDesc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL;
@@ -4364,11 +4480,11 @@ data.NumQualityLevels = 0;
setState(_commandList, D3D12_RESOURCE_STATE_COPY_DEST);
const uint32_t subres = _mip + (_side * m_numMips);
- const uint32_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
+ const uint32_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
const uint32_t rectpitch = _rect.m_width*bpp/8;
const uint32_t srcpitch = UINT16_MAX == _pitch ? rectpitch : _pitch;
- D3D12_RESOURCE_DESC desc = m_ptr->GetDesc();
+ D3D12_RESOURCE_DESC desc = getResourceDesc(m_ptr);
desc.Height = _rect.m_height;
@@ -4458,14 +4574,14 @@ data.NumQualityLevels = 0;
{
ID3D12Device* device = s_renderD3D12->m_device;
- D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = s_renderD3D12->m_rtvDescriptorHeap->GetCPUDescriptorHandleForHeapStart();
+ D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = getCPUHandleHeapStart(s_renderD3D12->m_rtvDescriptorHeap);
uint32_t rtvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
uint32_t fbhIdx = (uint32_t)(this - s_renderD3D12->m_frameBuffers);
rtvDescriptor.ptr += (BX_COUNTOF(s_renderD3D12->m_backBufferColor) + fbhIdx * BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) * rtvDescriptorSize;
m_width = 0;
m_height = 0;
- m_depth.idx = bgfx::invalidHandle;
+ m_depth.idx = bgfx::kInvalidHandle;
m_num = 0;
for (uint32_t ii = 0; ii < m_numTh; ++ii)
{
@@ -4476,20 +4592,20 @@ data.NumQualityLevels = 0;
if (0 == m_width)
{
- D3D12_RESOURCE_DESC desc = texture.m_ptr->GetDesc();
+ D3D12_RESOURCE_DESC desc = getResourceDesc(texture.m_ptr);
m_width = uint32_t(desc.Width);
m_height = uint32_t(desc.Height);
}
- if (isDepth( (TextureFormat::Enum)texture.m_textureFormat) )
+ if (bimg::isDepth(bimg::TextureFormat::Enum(texture.m_textureFormat) ) )
{
BX_CHECK(!isValid(m_depth), "");
m_depth = handle;
- D3D12_CPU_DESCRIPTOR_HANDLE dsvDescriptor = s_renderD3D12->m_dsvDescriptorHeap->GetCPUDescriptorHandleForHeapStart();
+ D3D12_CPU_DESCRIPTOR_HANDLE dsvDescriptor = getCPUHandleHeapStart(s_renderD3D12->m_dsvDescriptorHeap);
uint32_t dsvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV);
dsvDescriptor.ptr += (1 + fbhIdx) * dsvDescriptorSize;
- const ImageBlockInfo& blockInfo = getBlockInfo(TextureFormat::Enum(texture.m_textureFormat) );
+ const bimg::ImageBlockInfo& blockInfo = bimg::getBlockInfo(bimg::TextureFormat::Enum(texture.m_textureFormat) );
BX_UNUSED(blockInfo);
D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc;
@@ -4525,7 +4641,7 @@ data.NumQualityLevels = 0;
{
m_numTh = 0;
- m_depth.idx = bgfx::invalidHandle;
+ m_depth.idx = bgfx::kInvalidHandle;
uint16_t denseIdx = m_denseIdx;
m_denseIdx = UINT16_MAX;
@@ -4545,7 +4661,7 @@ data.NumQualityLevels = 0;
if (BGFX_CLEAR_COLOR & _clear.m_flags
&& 0 != m_num)
{
- D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = s_renderD3D12->m_rtvDescriptorHeap->GetCPUDescriptorHandleForHeapStart();
+ D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = getCPUHandleHeapStart(s_renderD3D12->m_rtvDescriptorHeap);
uint32_t rtvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
rtvDescriptor.ptr += (BX_COUNTOF(s_renderD3D12->m_backBufferColor) + fbhIdx * BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) * rtvDescriptorSize;
@@ -4589,7 +4705,7 @@ data.NumQualityLevels = 0;
if (isValid(m_depth)
&& (BGFX_CLEAR_DEPTH|BGFX_CLEAR_STENCIL) & _clear.m_flags)
{
- D3D12_CPU_DESCRIPTOR_HANDLE dsvDescriptor = s_renderD3D12->m_dsvDescriptorHeap->GetCPUDescriptorHandleForHeapStart();
+ D3D12_CPU_DESCRIPTOR_HANDLE dsvDescriptor = getCPUHandleHeapStart(s_renderD3D12->m_dsvDescriptorHeap);
uint32_t dsvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV);
dsvDescriptor.ptr += (1 + fbhIdx) * dsvDescriptorSize;
@@ -4614,20 +4730,28 @@ data.NumQualityLevels = 0;
queryHeapDesc.NodeMask = 1;
queryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP;
DX_CHECK(s_renderD3D12->m_device->CreateQueryHeap(&queryHeapDesc
- , IID_ID3D12QueryHeap
- , (void**)&m_queryHeap
- ) );
+ , IID_ID3D12QueryHeap
+ , (void**)&m_queryHeap
+ ) );
const uint32_t size = queryHeapDesc.Count*sizeof(uint64_t);
m_readback = createCommittedResource(s_renderD3D12->m_device
- , HeapProperty::ReadBack
- , size
- );
+ , HeapProperty::ReadBack
+ , size
+ );
DX_CHECK(s_renderD3D12->m_cmd.m_commandQueue->GetTimestampFrequency(&m_frequency) );
D3D12_RANGE range = { 0, size };
- m_readback->Map(0, &range, (void**)&m_result);
+ m_readback->Map(0, &range, (void**)&m_queryResult);
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_result); ++ii)
+ {
+ Result& result = m_result[ii];
+ result.reset();
+ }
+
+ m_control.reset();
}
void TimerQueryD3D12::shutdown()
@@ -4639,50 +4763,86 @@ data.NumQualityLevels = 0;
DX_RELEASE(m_readback, 0);
}
- void TimerQueryD3D12::begin(ID3D12GraphicsCommandList* _commandList)
+ uint32_t TimerQueryD3D12::begin(uint32_t _resultIdx)
{
- BX_UNUSED(_commandList);
while (0 == m_control.reserve(1) )
{
m_control.consume(1);
}
- uint32_t offset = m_control.m_current * 2 + 0;
- _commandList->EndQuery(m_queryHeap
+ Result& result = m_result[_resultIdx];
+ ++result.m_pending;
+
+ const uint32_t idx = m_control.m_current;
+ Query& query = m_query[idx];
+ query.m_resultIdx = _resultIdx;
+ query.m_ready = false;
+
+ ID3D12GraphicsCommandList* commandList = s_renderD3D12->m_commandList;
+
+ uint32_t offset = idx * 2 + 0;
+ commandList->EndQuery(m_queryHeap
, D3D12_QUERY_TYPE_TIMESTAMP
, offset
);
+
+ m_control.commit(1);
+
+ return idx;
}
- void TimerQueryD3D12::end(ID3D12GraphicsCommandList* _commandList)
+ void TimerQueryD3D12::end(uint32_t _idx)
{
- BX_UNUSED(_commandList);
- uint32_t offset = m_control.m_current * 2;
- _commandList->EndQuery(m_queryHeap
+ Query& query = m_query[_idx];
+ query.m_ready = true;
+ query.m_fence = s_renderD3D12->m_cmd.m_currentFence - 1;
+ uint32_t offset = _idx * 2;
+
+ ID3D12GraphicsCommandList* commandList = s_renderD3D12->m_commandList;
+
+ commandList->EndQuery(m_queryHeap
, D3D12_QUERY_TYPE_TIMESTAMP
, offset + 1
);
- _commandList->ResolveQueryData(m_queryHeap
+ commandList->ResolveQueryData(m_queryHeap
, D3D12_QUERY_TYPE_TIMESTAMP
, offset
, 2
, m_readback
, offset * sizeof(uint64_t)
);
- m_control.commit(1);
+
+ while (update() )
+ {
+ }
}
- bool TimerQueryD3D12::get()
+ bool TimerQueryD3D12::update()
{
if (0 != m_control.available() )
{
- uint32_t offset = m_control.m_read * 2;
- m_begin = m_result[offset+0];
- m_end = m_result[offset+1];
- m_elapsed = m_end - m_begin;
+ uint32_t idx = m_control.m_read;
+ Query& query = m_query[idx];
+
+ if (!query.m_ready)
+ {
+ return false;
+ }
+
+ if (query.m_fence > s_renderD3D12->m_cmd.m_completedFence)
+ {
+ return false;
+ }
m_control.consume(1);
+ Result& result = m_result[query.m_resultIdx];
+ --result.m_pending;
+
+ uint32_t offset = idx * 2;
+ result.m_begin = m_queryResult[offset+0];
+ result.m_end = m_queryResult[offset+1];
+
return true;
}
@@ -4764,7 +4924,7 @@ data.NumQualityLevels = 0;
OcclusionQueryHandle& handle = m_handle[(m_control.m_read + ii) % size];
if (handle.idx == _handle.idx)
{
- handle.idx = bgfx::invalidHandle;
+ handle.idx = bgfx::kInvalidHandle;
}
}
}
@@ -4775,16 +4935,99 @@ data.NumQualityLevels = 0;
uint16_t m_samplerStateIdx;
};
+ void RendererContextD3D12::submitBlit(BlitState& _bs, uint16_t _view)
+ {
+ while (_bs.hasItem(_view) )
+ {
+ const BlitItem& blit = _bs.advance();
+
+ const TextureD3D12& src = m_textures[blit.m_src.idx];
+ const TextureD3D12& dst = m_textures[blit.m_dst.idx];
+
+ uint32_t srcWidth = bx::uint32_min(src.m_width, blit.m_srcX + blit.m_width) - blit.m_srcX;
+ uint32_t srcHeight = bx::uint32_min(src.m_height, blit.m_srcY + blit.m_height) - blit.m_srcY;
+ uint32_t srcDepth = bx::uint32_min(src.m_depth, blit.m_srcZ + blit.m_depth) - blit.m_srcZ;
+ uint32_t dstWidth = bx::uint32_min(dst.m_width, blit.m_dstX + blit.m_width) - blit.m_dstX;
+ uint32_t dstHeight = bx::uint32_min(dst.m_height, blit.m_dstY + blit.m_height) - blit.m_dstY;
+ uint32_t dstDepth = bx::uint32_min(dst.m_depth, blit.m_dstZ + blit.m_depth) - blit.m_dstZ;
+ uint32_t width = bx::uint32_min(srcWidth, dstWidth);
+ uint32_t height = bx::uint32_min(srcHeight, dstHeight);
+ uint32_t depth = bx::uint32_min(srcDepth, dstDepth);
+
+ if (TextureD3D12::Texture3D == src.m_type)
+ {
+ D3D12_BOX box;
+ box.left = blit.m_srcX;
+ box.top = blit.m_srcY;
+ box.front = blit.m_srcZ;
+ box.right = blit.m_srcX + width;
+ box.bottom = blit.m_srcY + height;;
+ box.back = blit.m_srcZ + bx::uint32_imax(1, depth);
+
+ D3D12_TEXTURE_COPY_LOCATION dstLocation = { dst.m_ptr, D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, {{}} };
+ D3D12_TEXTURE_COPY_LOCATION srcLocation = { src.m_ptr, D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, {{}} };
+ m_commandList->CopyTextureRegion(&dstLocation
+ , blit.m_dstX
+ , blit.m_dstY
+ , blit.m_dstZ
+ , &srcLocation
+ , &box
+ );
+ }
+ else
+ {
+ D3D12_BOX box;
+ box.left = blit.m_srcX;
+ box.top = blit.m_srcY;
+ box.front = 0;
+ box.right = blit.m_srcX + width;
+ box.bottom = blit.m_srcY + height;;
+ box.back = 1;
+
+ const uint32_t srcZ = TextureD3D12::TextureCube == src.m_type
+ ? blit.m_srcZ
+ : 0
+ ;
+ const uint32_t dstZ = TextureD3D12::TextureCube == dst.m_type
+ ? blit.m_dstZ
+ : 0
+ ;
+
+ D3D12_TEXTURE_COPY_LOCATION dstLocation;
+ dstLocation.pResource = dst.m_ptr;
+ dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
+ dstLocation.SubresourceIndex = dstZ*dst.m_numMips+blit.m_dstMip;
+ D3D12_TEXTURE_COPY_LOCATION srcLocation;
+ srcLocation.pResource = src.m_ptr;
+ srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
+ srcLocation.SubresourceIndex = srcZ*src.m_numMips+blit.m_srcMip;
+
+ bool depthStencil = bimg::isDepth(bimg::TextureFormat::Enum(src.m_textureFormat) );
+ m_commandList->CopyTextureRegion(&dstLocation
+ , blit.m_dstX
+ , blit.m_dstY
+ , 0
+ , &srcLocation
+ , depthStencil ? NULL : &box
+ );
+ }
+ }
+ }
+
void RendererContextD3D12::submit(Frame* _render, ClearQuad& /*_clearQuad*/, TextVideoMemBlitter& _textVideoMemBlitter)
{
// PIX_BEGINEVENT(D3DCOLOR_FRAME, L"rendererSubmit");
- updateResolution(_render->m_resolution);
+ if (m_lost
+ || updateResolution(_render->m_resolution) )
+ {
+ return;
+ }
- int64_t elapsed = -bx::getHPCounter();
+ int64_t timeBegin = bx::getHPCounter();
int64_t captureElapsed = 0;
- m_gpuTimer.begin(m_commandList);
+ uint32_t frameQueryIdx = m_gpuTimer.begin(BGFX_CONFIG_MAX_VIEWS);
if (0 < _render->m_iboffset)
{
@@ -4805,6 +5048,9 @@ data.NumQualityLevels = 0;
currentState.m_stateFlags = BGFX_STATE_NONE;
currentState.m_stencil = packStencil(BGFX_STENCIL_NONE, BGFX_STENCIL_NONE);
+ RenderBind currentBind;
+ currentBind.clear();
+
_render->m_hmdInitialized = false;
const bool hmdEnabled = false;
@@ -4814,8 +5060,8 @@ data.NumQualityLevels = 0;
// bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME);
// setDebugWireframe(wireframe);
- uint16_t currentSamplerStateIdx = invalidHandle;
- uint16_t currentProgramIdx = invalidHandle;
+ uint16_t currentSamplerStateIdx = kInvalidHandle;
+ uint16_t currentProgramIdx = kInvalidHandle;
uint32_t currentBindHash = 0;
bool hasPredefined = false;
bool commandListChanged = false;
@@ -4824,10 +5070,7 @@ data.NumQualityLevels = 0;
uint16_t view = UINT16_MAX;
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
- BlitKey blitKey;
- blitKey.decode(_render->m_blitKeys[0]);
- uint16_t numBlitItems = _render->m_numBlitItems;
- uint16_t blitItem = 0;
+ BlitState bs(_render);
uint32_t blendFactor = 0;
@@ -4847,6 +5090,12 @@ data.NumQualityLevels = 0;
uint32_t statsNumIndices = 0;
uint32_t statsKeyType[2] = {};
+ Profiler<TimerQueryD3D12> profiler(
+ _render
+ , m_gpuTimer
+ , s_viewName
+ );
+
#if BX_PLATFORM_WINDOWS
m_backBufferColorIdx = m_swapChain->GetCurrentBackBufferIndex();
#endif // BX_PLATFORM_WINDOWS
@@ -4876,9 +5125,9 @@ data.NumQualityLevels = 0;
// uint8_t eye = 0;
// uint8_t restartState = 0;
- viewState.m_rect = _render->m_rect[0];
+ viewState.m_rect = _render->m_view[0].m_rect;
- int32_t numItems = _render->m_num;
+ int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
@@ -4890,7 +5139,9 @@ data.NumQualityLevels = 0;
|| item == numItems
;
- const RenderItem& renderItem = _render->m_renderItem[_render->m_sortValues[item] ];
+ const uint32_t itemIdx = _render->m_sortValues[item];
+ const RenderItem& renderItem = _render->m_renderItem[itemIdx];
+ const RenderBind& renderBind = _render->m_renderItemBind[itemIdx];
++item;
if (viewChanged)
@@ -4900,16 +5151,23 @@ data.NumQualityLevels = 0;
view = key.m_view;
currentPso = NULL;
- currentSamplerStateIdx = invalidHandle;
- currentProgramIdx = invalidHandle;
+ currentSamplerStateIdx = kInvalidHandle;
+ currentProgramIdx = kInvalidHandle;
hasPredefined = false;
- fbh = _render->m_fb[view];
+ fbh = _render->m_view[view].m_fbh;
setFrameBuffer(fbh);
- viewState.m_rect = _render->m_rect[view];
- const Rect& rect = _render->m_rect[view];
- const Rect& scissorRect = _render->m_scissor[view];
+ if (item > 1)
+ {
+ profiler.end();
+ }
+
+ profiler.begin(view);
+
+ viewState.m_rect = _render->m_view[view].m_rect;
+ const Rect& rect = _render->m_view[view].m_rect;
+ const Rect& scissorRect = _render->m_view[view].m_scissor;
viewHasScissor = !scissorRect.isZero();
viewScissorRect = viewHasScissor ? scissorRect : rect;
@@ -4930,7 +5188,7 @@ data.NumQualityLevels = 0;
m_commandList->RSSetScissorRects(1, &rc);
restoreScissor = false;
- Clear& clr = _render->m_clear[view];
+ Clear& clr = _render->m_view[view].m_clear;
if (BGFX_CLEAR_NONE != clr.m_flags)
{
Rect clearRect = rect;
@@ -4940,83 +5198,7 @@ data.NumQualityLevels = 0;
prim = s_primInfo[BX_COUNTOF(s_primName)]; // Force primitive type update.
- const uint8_t blitView = SortKey::decodeView(encodedKey);
- for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
- {
- const BlitItem& blit = _render->m_blitItem[blitItem];
- blitKey.decode(_render->m_blitKeys[blitItem+1]);
-
- const TextureD3D12& src = m_textures[blit.m_src.idx];
- const TextureD3D12& dst = m_textures[blit.m_dst.idx];
-
- uint32_t srcWidth = bx::uint32_min(src.m_width, blit.m_srcX + blit.m_width) - blit.m_srcX;
- uint32_t srcHeight = bx::uint32_min(src.m_height, blit.m_srcY + blit.m_height) - blit.m_srcY;
- uint32_t srcDepth = bx::uint32_min(src.m_depth, blit.m_srcZ + blit.m_depth) - blit.m_srcZ;
- uint32_t dstWidth = bx::uint32_min(dst.m_width, blit.m_dstX + blit.m_width) - blit.m_dstX;
- uint32_t dstHeight = bx::uint32_min(dst.m_height, blit.m_dstY + blit.m_height) - blit.m_dstY;
- uint32_t dstDepth = bx::uint32_min(dst.m_depth, blit.m_dstZ + blit.m_depth) - blit.m_dstZ;
- uint32_t width = bx::uint32_min(srcWidth, dstWidth);
- uint32_t height = bx::uint32_min(srcHeight, dstHeight);
- uint32_t depth = bx::uint32_min(srcDepth, dstDepth);
-
- if (TextureD3D12::Texture3D == src.m_type)
- {
- D3D12_BOX box;
- box.left = blit.m_srcX;
- box.top = blit.m_srcY;
- box.front = blit.m_srcZ;
- box.right = blit.m_srcX + width;
- box.bottom = blit.m_srcY + height;;
- box.back = blit.m_srcZ + bx::uint32_imax(1, depth);
-
- D3D12_TEXTURE_COPY_LOCATION dstLocation = { dst.m_ptr, D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, {{}} };
- D3D12_TEXTURE_COPY_LOCATION srcLocation = { src.m_ptr, D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, {{}} };
- m_commandList->CopyTextureRegion(&dstLocation
- , blit.m_dstX
- , blit.m_dstY
- , blit.m_dstZ
- , &srcLocation
- , &box
- );
- }
- else
- {
- D3D12_BOX box;
- box.left = blit.m_srcX;
- box.top = blit.m_srcY;
- box.front = 0;
- box.right = blit.m_srcX + width;
- box.bottom = blit.m_srcY + height;;
- box.back = 1;
-
- const uint32_t srcZ = TextureD3D12::TextureCube == src.m_type
- ? blit.m_srcZ
- : 0
- ;
- const uint32_t dstZ = TextureD3D12::TextureCube == dst.m_type
- ? blit.m_dstZ
- : 0
- ;
-
- D3D12_TEXTURE_COPY_LOCATION dstLocation;
- dstLocation.pResource = dst.m_ptr;
- dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
- dstLocation.SubresourceIndex = dstZ*dst.m_numMips+blit.m_dstMip;
- D3D12_TEXTURE_COPY_LOCATION srcLocation;
- srcLocation.pResource = src.m_ptr;
- srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
- srcLocation.SubresourceIndex = srcZ*src.m_numMips+blit.m_srcMip;
-
- bool depthStencil = isDepth(TextureFormat::Enum(src.m_textureFormat) );
- m_commandList->CopyTextureRegion(&dstLocation
- , blit.m_dstX
- , blit.m_dstY
- , 0
- , &srcLocation
- , depthStencil ? NULL : &box
- );
- }
- }
+ submitBlit(bs, view);
}
if (isCompute)
@@ -5043,7 +5225,7 @@ data.NumQualityLevels = 0;
currentBindHash = 0;
}
- uint32_t bindHash = bx::hashMurmur2A(compute.m_bind, sizeof(compute.m_bind) );
+ uint32_t bindHash = bx::hash<bx::HashMurmur2A>(renderBind.m_bind, sizeof(renderBind.m_bind) );
if (currentBindHash != bindHash)
{
currentBindHash = bindHash;
@@ -5056,12 +5238,13 @@ data.NumQualityLevels = 0;
for (uint32_t ii = 0; ii < BGFX_MAX_COMPUTE_BINDINGS; ++ii)
{
- const Binding& bind = compute.m_bind[ii];
- if (invalidHandle != bind.m_idx)
+ const Binding& bind = renderBind.m_bind[ii];
+ if (kInvalidHandle != bind.m_idx)
{
switch (bind.m_type)
{
case Binding::Image:
+ case Binding::Texture:
{
TextureD3D12& texture = m_textures[bind.m_idx];
@@ -5132,10 +5315,10 @@ data.NumQualityLevels = 0;
}
bool constantsChanged = false;
- if (compute.m_constBegin < compute.m_constEnd
+ if (compute.m_uniformBegin < compute.m_uniformEnd
|| currentProgramIdx != key.m_program)
{
- rendererUpdateUniforms(this, _render->m_uniformBuffer, compute.m_constBegin, compute.m_constEnd);
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[compute.m_uniformIdx], compute.m_uniformBegin, compute.m_uniformEnd);
currentProgramIdx = key.m_program;
ProgramD3D12& program = m_program[currentProgramIdx];
@@ -5234,8 +5417,8 @@ data.NumQualityLevels = 0;
currentPso = NULL;
currentBindHash = 0;
- currentSamplerStateIdx = invalidHandle;
- currentProgramIdx = invalidHandle;
+ currentSamplerStateIdx = kInvalidHandle;
+ currentProgramIdx = kInvalidHandle;
currentState.clear();
currentState.m_scissor = !draw.m_scissor;
changedFlags = BGFX_STATE_MASK;
@@ -5243,11 +5426,13 @@ data.NumQualityLevels = 0;
currentState.m_stateFlags = newFlags;
currentState.m_stencil = newStencil;
+ currentBind.clear();
+
const uint64_t pt = newFlags&BGFX_STATE_PT_MASK;
primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT);
}
- rendererUpdateUniforms(this, _render->m_uniformBuffer, draw.m_constBegin, draw.m_constEnd);
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd);
if (isValid(draw.m_stream[0].m_handle) )
{
@@ -5271,7 +5456,7 @@ data.NumQualityLevels = 0;
);
uint16_t scissor = draw.m_scissor;
- uint32_t bindHash = bx::hashMurmur2A(draw.m_bind, sizeof(draw.m_bind) );
+ uint32_t bindHash = bx::hash<bx::HashMurmur2A>(renderBind.m_bind, sizeof(renderBind.m_bind) );
if (currentBindHash != bindHash
|| 0 != changedStencil
|| (hasFactor && blendFactor != draw.m_rgba)
@@ -5297,17 +5482,47 @@ data.NumQualityLevels = 0;
srvHandle[0].ptr = 0;
for (uint32_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage)
{
- const Binding& bind = draw.m_bind[stage];
- if (invalidHandle != bind.m_idx)
+ const Binding& bind = renderBind.m_bind[stage];
+ if (kInvalidHandle != bind.m_idx)
{
- TextureD3D12& texture = m_textures[bind.m_idx];
- texture.setState(m_commandList, D3D12_RESOURCE_STATE_GENERIC_READ);
- scratchBuffer.allocSrv(srvHandle[stage], texture);
- samplerFlags[stage] = (0 == (BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER & bind.m_un.m_draw.m_textureFlags)
- ? bind.m_un.m_draw.m_textureFlags
- : texture.m_flags
- ) & (BGFX_TEXTURE_SAMPLER_BITS_MASK|BGFX_TEXTURE_BORDER_COLOR_MASK)
- ;
+ switch (bind.m_type)
+ {
+ case Binding::Texture:
+ {
+ TextureD3D12& texture = m_textures[bind.m_idx];
+ texture.setState(m_commandList, D3D12_RESOURCE_STATE_GENERIC_READ);
+ scratchBuffer.allocSrv(srvHandle[stage], texture);
+ samplerFlags[stage] = (0 == (BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER & bind.m_un.m_draw.m_textureFlags)
+ ? bind.m_un.m_draw.m_textureFlags
+ : texture.m_flags
+ ) & (BGFX_TEXTURE_SAMPLER_BITS_MASK | BGFX_TEXTURE_BORDER_COLOR_MASK)
+ ;
+ }
+ break;
+
+ case Binding::IndexBuffer:
+ case Binding::VertexBuffer:
+ {
+ BufferD3D12& buffer = Binding::IndexBuffer == bind.m_type
+ ? m_indexBuffers[bind.m_idx]
+ : m_vertexBuffers[bind.m_idx]
+ ;
+
+ if (Access::Read != bind.m_un.m_compute.m_access)
+ {
+ // The api functions prevent binding with Access::Write,
+ // but might as well allow it in here for future-proofing
+ buffer.setState(m_commandList, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
+ scratchBuffer.allocUav(srvHandle[stage], buffer);
+ }
+ else
+ {
+ buffer.setState(m_commandList, D3D12_RESOURCE_STATE_GENERIC_READ);
+ scratchBuffer.allocSrv(srvHandle[stage], buffer);
+ }
+ }
+ break;
+ }
}
else
{
@@ -5397,7 +5612,7 @@ data.NumQualityLevels = 0;
{
restoreScissor = true;
Rect scissorRect;
- scissorRect.setIntersect(viewScissorRect,_render->m_rectCache.m_cache[scissor]);
+ scissorRect.setIntersect(viewScissorRect, _render->m_frameCache.m_rectCache.m_cache[scissor]);
if (scissorRect.isZeroArea() )
{
continue;
@@ -5419,7 +5634,7 @@ data.NumQualityLevels = 0;
}
bool constantsChanged = false;
- if (draw.m_constBegin < draw.m_constEnd
+ if (draw.m_uniformBegin < draw.m_uniformEnd
|| currentProgramIdx != key.m_program
|| BGFX_STATE_ALPHA_REF_MASK & changedFlags)
{
@@ -5471,18 +5686,27 @@ data.NumQualityLevels = 0;
}
m_batch.end(m_commandList);
- }
+ kick();
- int64_t now = bx::getHPCounter();
- elapsed += now;
+ submitBlit(bs, BGFX_CONFIG_MAX_VIEWS);
+
+ if (0 < _render->m_numRenderItems)
+ {
+ if (0 != (m_resolution.m_flags & BGFX_RESET_FLUSH_AFTER_RENDER) )
+ {
+// deviceCtx->Flush();
+ }
- static int64_t last = now;
+// captureElapsed = -bx::getHPCounter();
+// capture();
+// captureElapsed += bx::getHPCounter();
- Stats& perfStats = _render->m_perfStats;
- perfStats.cpuTimeBegin = last;
+ profiler.end();
+ }
+ }
- int64_t frameTime = now - last;
- last = now;
+ int64_t timeEnd = bx::getHPCounter();
+ int64_t frameTime = timeEnd - timeBegin;
static int64_t min = frameTime;
static int64_t max = frameTime;
@@ -5498,28 +5722,44 @@ data.NumQualityLevels = 0;
presentMin = bx::int64_min(presentMin, m_presentElapsed);
presentMax = bx::int64_max(presentMax, m_presentElapsed);
- m_gpuTimer.end(m_commandList);
-
- do
+ if (UINT32_MAX != frameQueryIdx)
{
+ m_gpuTimer.end(frameQueryIdx);
+
+ const TimerQueryD3D12::Result& result = m_gpuTimer.m_result[BGFX_CONFIG_MAX_VIEWS];
double toGpuMs = 1000.0 / double(m_gpuTimer.m_frequency);
- elapsedGpuMs = m_gpuTimer.m_elapsed * toGpuMs;
+ elapsedGpuMs = (result.m_end - result.m_begin) * toGpuMs;
maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
+
+ maxGpuLatency = bx::uint32_imax(maxGpuLatency, result.m_pending-1);
}
- while (m_gpuTimer.get() );
maxGpuLatency = bx::uint32_imax(maxGpuLatency, m_gpuTimer.m_control.available()-1);
const int64_t timerFreq = bx::getHPFrequency();
- perfStats.cpuTimeEnd = now;
+ Stats& perfStats = _render->m_perfStats;
+ perfStats.cpuTimeBegin = timeBegin;
+ perfStats.cpuTimeEnd = timeEnd;
perfStats.cpuTimerFreq = timerFreq;
- perfStats.gpuTimeBegin = m_gpuTimer.m_begin;
- perfStats.gpuTimeEnd = m_gpuTimer.m_end;
+ const TimerQueryD3D12::Result& result = m_gpuTimer.m_result[BGFX_CONFIG_MAX_VIEWS];
+ perfStats.gpuTimeBegin = result.m_begin;
+ perfStats.gpuTimeEnd = result.m_end;
perfStats.gpuTimerFreq = m_gpuTimer.m_frequency;
perfStats.numDraw = statsKeyType[0];
perfStats.numCompute = statsKeyType[1];
perfStats.maxGpuLatency = maxGpuLatency;
+ perfStats.gpuMemoryMax = -INT64_MAX;
+ perfStats.gpuMemoryUsed = -INT64_MAX;
+
+#if BX_PLATFORM_WINDOWS
+ DXGI_QUERY_VIDEO_MEMORY_INFO vmi[2];
+ DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &vmi[0]) );
+ DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL, &vmi[1]) );
+
+ perfStats.gpuMemoryMax = int64_t(vmi[0].Budget);
+ perfStats.gpuMemoryUsed = int64_t(vmi[0].CurrentUsage);
+#endif // BX_PLATFORM_WINDOWS
if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) )
{
@@ -5528,12 +5768,13 @@ data.NumQualityLevels = 0;
// m_needPresent = true;
TextVideoMem& tvm = m_textVideoMem;
- static int64_t next = now;
+ static int64_t next = timeEnd;
- if (now >= next)
+ if (timeEnd >= next)
{
- next = now + bx::getHPFrequency();
- double freq = double(bx::getHPFrequency() );
+ next = timeEnd + timerFreq;
+
+ double freq = double(timerFreq);
double toMs = 1000.0 / freq;
tvm.clear();
@@ -5570,10 +5811,6 @@ data.NumQualityLevels = 0;
);
#if BX_PLATFORM_WINDOWS
- DXGI_QUERY_VIDEO_MEMORY_INFO vmi[2];
- DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &vmi[0]) );
- DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL, &vmi[1]) );
-
for (uint32_t ii = 0; ii < BX_COUNTOF(vmi); ++ii)
{
const DXGI_QUERY_VIDEO_MEMORY_INFO& memInfo = vmi[ii];
@@ -5625,9 +5862,9 @@ data.NumQualityLevels = 0;
, !!(m_resolution.m_flags&BGFX_RESET_MAXANISOTROPY) ? '\xfe' : ' '
);
- double elapsedCpuMs = double(elapsed)*toMs;
+ double elapsedCpuMs = double(frameTime)*toMs;
tvm.printf(10, pos++, 0x8e, " Submitted: %5d (draw %5d, compute %4d) / CPU %7.4f [ms] "
- , _render->m_num
+ , _render->m_numRenderItems
, statsKeyType[0]
, statsKeyType[1]
, elapsedCpuMs
@@ -5661,7 +5898,7 @@ data.NumQualityLevels = 0;
}
tvm.printf(10, pos++, 0x8e, " Indices: %7d ", statsNumIndices);
- tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
+// tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
tvm.printf(10, pos++, 0x8e, " DVB size: %7d ", _render->m_vboffset);
tvm.printf(10, pos++, 0x8e, " DIB size: %7d ", _render->m_iboffset);
diff --git a/3rdparty/bgfx/src/renderer_d3d12.h b/3rdparty/bgfx/src/renderer_d3d12.h
index 25de46c80bb..c658459f446 100644
--- a/3rdparty/bgfx/src/renderer_d3d12.h
+++ b/3rdparty/bgfx/src/renderer_d3d12.h
@@ -306,7 +306,7 @@ namespace bgfx { namespace d3d12
, m_num(0)
, m_numTh(0)
{
- m_depth.idx = bgfx::invalidHandle;
+ m_depth.idx = bgfx::kInvalidHandle;
}
void create(uint8_t _num, const Attachment* _attachment);
@@ -449,24 +449,45 @@ namespace bgfx { namespace d3d12
struct TimerQueryD3D12
{
TimerQueryD3D12()
- : m_control(4)
+ : m_control(BX_COUNTOF(m_query) )
{
}
void init();
void shutdown();
- void begin(ID3D12GraphicsCommandList* _commandList);
- void end(ID3D12GraphicsCommandList* _commandList);
- bool get();
+ uint32_t begin(uint32_t _resultIdx);
+ void end(uint32_t _idx);
+ bool update();
+
+ struct Query
+ {
+ uint32_t m_resultIdx;
+ bool m_ready;
+ uint64_t m_fence;
+ };
+
+ struct Result
+ {
+ void reset()
+ {
+ m_begin = 0;
+ m_end = 0;
+ m_pending = 0;
+ }
+
+ uint64_t m_begin;
+ uint64_t m_end;
+ uint32_t m_pending;
+ };
- uint64_t m_begin;
- uint64_t m_end;
- uint64_t m_elapsed;
uint64_t m_frequency;
+ Result m_result[BGFX_CONFIG_MAX_VIEWS+1];
+ Query m_query[BGFX_CONFIG_MAX_VIEWS*4];
+
ID3D12Resource* m_readback;
ID3D12QueryHeap* m_queryHeap;
- uint64_t* m_result;
+ uint64_t* m_queryResult;
bx::RingBufferControl m_control;
};
diff --git a/3rdparty/bgfx/src/renderer_d3d9.cpp b/3rdparty/bgfx/src/renderer_d3d9.cpp
index 4f4267be9ad..7dd76c2cc46 100644
--- a/3rdparty/bgfx/src/renderer_d3d9.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d9.cpp
@@ -7,6 +7,7 @@
#if BGFX_CONFIG_RENDERER_DIRECT3D9
# include "renderer_d3d9.h"
+# include <bx/pixelformat.h>
namespace bgfx { namespace d3d9
{
@@ -237,7 +238,7 @@ namespace bgfx { namespace d3d9
{ D3DFMT_A4R4G4B4 }, // RGBA4
{ D3DFMT_A1R5G5B5 }, // RGB5A1
{ D3DFMT_A2B10G10R10 }, // RGB10A2
- { D3DFMT_UNKNOWN }, // R11G11B10F
+ { D3DFMT_UNKNOWN }, // RG11B10F
{ D3DFMT_UNKNOWN }, // UnknownDepth
{ D3DFMT_D16 }, // D16
{ D3DFMT_D24X8 }, // D24
@@ -275,6 +276,91 @@ namespace bgfx { namespace d3d9
static PFN_D3DPERF_BEGIN_EVENT D3DPERF_BeginEvent;
static PFN_D3DPERF_END_EVENT D3DPERF_EndEvent;
+ static const D3DVERTEXELEMENT9 s_attrib[] =
+ {
+ { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
+ { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
+ { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 },
+ { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BINORMAL, 0 },
+ { 0, 0, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
+ { 0, 0, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 1 },
+ { 0, 0, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 2 },
+ { 0, 0, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 3 },
+ { 0, 0, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDINDICES, 0 },
+ { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDWEIGHT, 0 },
+ { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
+ { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1 },
+ { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 2 },
+ { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 3 },
+ { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 4 },
+ { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 5 },
+ { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 6 },
+ { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 7 },
+ D3DDECL_END()
+ };
+ BX_STATIC_ASSERT(Attrib::Count == BX_COUNTOF(s_attrib)-1);
+
+ static const uint8_t s_attribType[][4][2] =
+ {
+ { // Uint8
+ { D3DDECLTYPE_UBYTE4, D3DDECLTYPE_UBYTE4N },
+ { D3DDECLTYPE_UBYTE4, D3DDECLTYPE_UBYTE4N },
+ { D3DDECLTYPE_UBYTE4, D3DDECLTYPE_UBYTE4N },
+ { D3DDECLTYPE_UBYTE4, D3DDECLTYPE_UBYTE4N },
+ },
+ { // Uint10
+ { D3DDECLTYPE_UDEC3, D3DDECLTYPE_DEC3N },
+ { D3DDECLTYPE_UDEC3, D3DDECLTYPE_DEC3N },
+ { D3DDECLTYPE_UDEC3, D3DDECLTYPE_DEC3N },
+ { D3DDECLTYPE_UDEC3, D3DDECLTYPE_DEC3N },
+ },
+ { // Int16
+ { D3DDECLTYPE_SHORT2, D3DDECLTYPE_SHORT2N },
+ { D3DDECLTYPE_SHORT2, D3DDECLTYPE_SHORT2N },
+ { D3DDECLTYPE_SHORT4, D3DDECLTYPE_SHORT4N },
+ { D3DDECLTYPE_SHORT4, D3DDECLTYPE_SHORT4N },
+ },
+ { // Half
+ { D3DDECLTYPE_FLOAT16_2, D3DDECLTYPE_FLOAT16_2 },
+ { D3DDECLTYPE_FLOAT16_2, D3DDECLTYPE_FLOAT16_2 },
+ { D3DDECLTYPE_FLOAT16_4, D3DDECLTYPE_FLOAT16_4 },
+ { D3DDECLTYPE_FLOAT16_4, D3DDECLTYPE_FLOAT16_4 },
+ },
+ { // Float
+ { D3DDECLTYPE_FLOAT1, D3DDECLTYPE_FLOAT1 },
+ { D3DDECLTYPE_FLOAT2, D3DDECLTYPE_FLOAT2 },
+ { D3DDECLTYPE_FLOAT3, D3DDECLTYPE_FLOAT3 },
+ { D3DDECLTYPE_FLOAT4, D3DDECLTYPE_FLOAT4 },
+ },
+ };
+ BX_STATIC_ASSERT(AttribType::Count == BX_COUNTOF(s_attribType) );
+
+ static D3DVERTEXELEMENT9* fillVertexDecl(uint8_t _stream, D3DVERTEXELEMENT9* _out, const VertexDecl& _decl)
+ {
+ D3DVERTEXELEMENT9* elem = _out;
+
+ for (uint32_t attr = 0; attr < Attrib::Count; ++attr)
+ {
+ if (UINT16_MAX != _decl.m_attributes[attr])
+ {
+ uint8_t num;
+ AttribType::Enum type;
+ bool normalized;
+ bool asInt;
+ _decl.decode(Attrib::Enum(attr), num, type, normalized, asInt);
+
+ bx::memCopy(elem, &s_attrib[attr], sizeof(D3DVERTEXELEMENT9) );
+
+ elem->Stream = _stream;
+ elem->Type = s_attribType[type][num-1][normalized];
+ elem->Offset = _decl.m_offset[attr];
+ ++elem;
+ }
+ }
+
+ return elem;
+ }
+
inline bool isLost(HRESULT _hr)
{
return false
@@ -328,7 +414,7 @@ namespace bgfx { namespace d3d9
ErrorState::Enum errorState = ErrorState::Default;
- m_fbh.idx = invalidHandle;
+ m_fbh.idx = kInvalidHandle;
bx::memSet(m_uniforms, 0, sizeof(m_uniforms) );
bx::memSet(&m_resolution, 0, sizeof(m_resolution) );
@@ -345,7 +431,7 @@ namespace bgfx { namespace d3d9
m_params.EnableAutoDepthStencil = TRUE;
m_params.AutoDepthStencilFormat = D3DFMT_D24S8;
m_params.Flags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;
-#if BX_PLATFORM_WINDOWS
+
m_params.FullScreen_RefreshRateInHz = 0;
m_params.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
m_params.SwapEffect = D3DSWAPEFFECT_DISCARD;
@@ -361,12 +447,14 @@ namespace bgfx { namespace d3d9
if (NULL == m_d3d9dll)
{
- BX_TRACE("Failed to load d3d9.dll.");
+ BX_TRACE("Init error: Failed to load d3d9.dll.");
goto error;
}
errorState = ErrorState::LoadedD3D9;
+ m_nvapi.init();
+
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
D3DPERF_SetMarker = (PFN_D3DPERF_SET_MARKER )bx::dlsym(m_d3d9dll, "D3DPERF_SetMarker");
@@ -409,7 +497,7 @@ namespace bgfx { namespace d3d9
if (NULL == Direct3DCreate9)
{
- BX_TRACE("Function Direct3DCreate9 not found.");
+ BX_TRACE("Init error: Function Direct3DCreate9 not found.");
goto error;
}
@@ -419,7 +507,7 @@ namespace bgfx { namespace d3d9
if (NULL == m_d3d9)
{
- BX_TRACE("Unable to create Direct3D.");
+ BX_TRACE("Init error: Unable to create Direct3D.");
goto error;
}
@@ -463,7 +551,7 @@ namespace bgfx { namespace d3d9
}
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PERFHUD)
- && 0 != strstr(desc.Description, "PerfHUD") )
+ && 0 != bx::strFind(desc.Description, "PerfHUD") )
{
m_adapter = ii;
m_deviceType = D3DDEVTYPE_REF;
@@ -518,7 +606,7 @@ namespace bgfx { namespace d3d9
if (NULL == m_device)
{
- BX_TRACE("Unable to create Direct3D9 device.");
+ BX_TRACE("Init error: Unable to create Direct3D9 device.");
goto error;
}
@@ -568,6 +656,7 @@ namespace bgfx { namespace d3d9
|| (D3DPTEXTURECAPS_ALPHA & m_caps.TextureCaps) != D3DPTEXTURECAPS_ALPHA
|| !(m_caps.VertexShaderVersion >= D3DVS_VERSION(2, 0) && m_caps.PixelShaderVersion >= D3DPS_VERSION(2, 1) ) )
{
+ BX_TRACE("Init error: Min spec not satisfied.");
goto error;
}
@@ -577,6 +666,7 @@ namespace bgfx { namespace d3d9
BX_TRACE("Max fragment shader 3.0 instr. slots: %d", m_caps.MaxPixelShader30InstructionSlots);
BX_TRACE("Num simultaneous render targets: %d", m_caps.NumSimultaneousRTs);
BX_TRACE("Max vertex index: %d", m_caps.MaxVertexIndex);
+ BX_TRACE("Max streams: %d", m_caps.MaxStreams);
g_caps.supported |= ( 0
| BGFX_CAPS_TEXTURE_3D
@@ -590,12 +680,14 @@ namespace bgfx { namespace d3d9
| BGFX_CAPS_TEXTURE_READ_BACK
| (m_occlusionQuerySupport ? BGFX_CAPS_OCCLUSION_QUERY : 0)
);
- g_caps.limits.maxTextureSize = uint16_t(bx::uint32_min(m_caps.MaxTextureWidth, m_caps.MaxTextureHeight) );
- m_caps.NumSimultaneousRTs = uint8_t(bx::uint32_min(m_caps.NumSimultaneousRTs, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) );
- g_caps.limits.maxFBAttachments = uint8_t(m_caps.NumSimultaneousRTs);
+ m_caps.NumSimultaneousRTs = bx::uint32_min(m_caps.NumSimultaneousRTs, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS);
+ m_caps.MaxStreams = bx::uint32_min(m_caps.MaxStreams, BGFX_CONFIG_MAX_VERTEX_STREAMS);
+ m_caps.MaxAnisotropy = bx::uint32_max(m_caps.MaxAnisotropy, 1);
- m_caps.MaxAnisotropy = bx::uint32_max(m_caps.MaxAnisotropy, 1);
+ g_caps.limits.maxTextureSize = uint16_t(bx::uint32_min(m_caps.MaxTextureWidth, m_caps.MaxTextureHeight) );
+ g_caps.limits.maxFBAttachments = uint8_t(m_caps.NumSimultaneousRTs);
+ g_caps.limits.maxVertexStreams = uint8_t(m_caps.MaxStreams);
if (BX_ENABLED(BGFX_CONFIG_RENDERER_USE_EXTENSIONS) )
{
@@ -700,7 +792,7 @@ namespace bgfx { namespace d3d9
support |= SUCCEEDED(m_d3d9->CheckDeviceFormat(m_adapter
, m_deviceType
, adapterFormat
- , isDepth(TextureFormat::Enum(ii) ) ? D3DUSAGE_DEPTHSTENCIL : D3DUSAGE_RENDERTARGET
+ , bimg::isDepth(bimg::TextureFormat::Enum(ii) ) ? D3DUSAGE_DEPTHSTENCIL : D3DUSAGE_RENDERTARGET
, D3DRTYPE_TEXTURE
, s_textureFormat[ii].m_fmt
) ) ? BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER : BGFX_CAPS_FORMAT_TEXTURE_NONE;
@@ -716,7 +808,7 @@ namespace bgfx { namespace d3d9
support |= SUCCEEDED(m_d3d9->CheckDeviceFormat(m_adapter
, m_deviceType
, adapterFormat
- , isDepth(TextureFormat::Enum(ii) ) ? D3DUSAGE_DEPTHSTENCIL : D3DUSAGE_RENDERTARGET
+ , bimg::isDepth(bimg::TextureFormat::Enum(ii) ) ? D3DUSAGE_DEPTHSTENCIL : D3DUSAGE_RENDERTARGET
, D3DRTYPE_TEXTURE
, s_textureFormat[ii].m_fmt
) ) ? BGFX_CAPS_FORMAT_TEXTURE_MIP_AUTOGEN : BGFX_CAPS_FORMAT_TEXTURE_NONE;
@@ -726,37 +818,6 @@ namespace bgfx { namespace d3d9
m_fmtDepth = D3DFMT_D24S8;
-#elif BX_PLATFORM_XBOX360
- m_params.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
- m_params.DisableAutoBackBuffer = FALSE;
- m_params.DisableAutoFrontBuffer = FALSE;
- m_params.FrontBufferFormat = D3DFMT_X8R8G8B8;
- m_params.FrontBufferColorSpace = D3DCOLORSPACE_RGB;
-
- m_d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
- BX_TRACE("Creating D3D9 %p", m_d3d9);
-
- XVIDEO_MODE videoMode;
- XGetVideoMode(&videoMode);
- if (!videoMode.fIsWideScreen)
- {
- m_params.Flags |= D3DPRESENTFLAG_NO_LETTERBOX;
- }
-
- BX_TRACE("Creating device");
- DX_CHECK(m_d3d9->CreateDevice(m_adapter
- , m_deviceType
- , NULL
- , D3DCREATE_HARDWARE_VERTEXPROCESSING|D3DCREATE_BUFFER_2_FRAMES
- , &m_params
- , &m_device
- ) );
-
- BX_TRACE("Device %p", m_device);
-
- m_fmtDepth = D3DFMT_D24FS8;
-#endif // BX_PLATFORM_WINDOWS
-
{
IDirect3DSwapChain9* swapChain;
DX_CHECK(m_device->GetSwapChain(0, &swapChain) );
@@ -820,10 +881,9 @@ namespace bgfx { namespace d3d9
DX_RELEASE(m_d3d9, 0);
}
-#if BX_PLATFORM_WINDOWS
case ErrorState::LoadedD3D9:
+ m_nvapi.shutdown();
bx::dlclose(m_d3d9dll);
-#endif // BX_PLATFORM_WINDOWS
case ErrorState::Default:
break;
@@ -856,11 +916,6 @@ namespace bgfx { namespace d3d9
m_textures[ii].destroy();
}
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_vertexDecls); ++ii)
- {
- m_vertexDecls[ii].destroy();
- }
-
if (NULL != m_d3d9ex)
{
DX_RELEASE(m_deviceEx, 1);
@@ -874,19 +929,18 @@ namespace bgfx { namespace d3d9
DX_RELEASE(m_d3d9, 0);
}
-#if BX_PLATFORM_WINDOWS
+ m_nvapi.shutdown();
bx::dlclose(m_d3d9dll);
-#endif // BX_PLATFORM_WINDOWS
m_initialized = false;
}
- RendererType::Enum getRendererType() const BX_OVERRIDE
+ RendererType::Enum getRendererType() const override
{
return RendererType::Direct3D9;
}
- const char* getRendererName() const BX_OVERRIDE
+ const char* getRendererName() const override
{
if (NULL != m_d3d9ex)
{
@@ -896,110 +950,111 @@ namespace bgfx { namespace d3d9
return BGFX_RENDERER_DIRECT3D9_NAME;
}
- void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) BX_OVERRIDE
+ void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_mem->size, _mem->data, _flags);
}
- void destroyIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE
+ void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) override
{
- m_vertexDecls[_handle.idx].create(_decl);
+ VertexDecl& decl = m_vertexDecls[_handle.idx];
+ bx::memCopy(&decl, &_decl, sizeof(VertexDecl) );
+ dump(decl);
}
- void destroyVertexDecl(VertexDeclHandle _handle) BX_OVERRIDE
+ void destroyVertexDecl(VertexDeclHandle /*_handle*/) override
{
- m_vertexDecls[_handle.idx].destroy();
}
- void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t /*_flags*/) BX_OVERRIDE
+ void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t /*_flags*/) override
{
m_vertexBuffers[_handle.idx].create(_mem->size, _mem->data, _declHandle);
}
- void destroyVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_size, NULL, _flags);
}
- void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_indexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t /*_flags*/) BX_OVERRIDE
+ void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t /*_flags*/) override
{
VertexDeclHandle decl = BGFX_INVALID_HANDLE;
m_vertexBuffers[_handle.idx].create(_size, NULL, decl);
}
- void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_vertexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createShader(ShaderHandle _handle, Memory* _mem) BX_OVERRIDE
+ void createShader(ShaderHandle _handle, Memory* _mem) override
{
m_shaders[_handle.idx].create(_mem);
}
- void destroyShader(ShaderHandle _handle) BX_OVERRIDE
+ void destroyShader(ShaderHandle _handle) override
{
m_shaders[_handle.idx].destroy();
}
- void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) BX_OVERRIDE
+ void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) override
{
m_program[_handle.idx].create(m_shaders[_vsh.idx], m_shaders[_fsh.idx]);
}
- void destroyProgram(ProgramHandle _handle) BX_OVERRIDE
+ void destroyProgram(ProgramHandle _handle) override
{
m_program[_handle.idx].destroy();
}
- void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) BX_OVERRIDE
+ void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) override
{
m_textures[_handle.idx].create(_mem, _flags, _skip);
}
- void updateTextureBegin(TextureHandle _handle, uint8_t _side, uint8_t _mip) BX_OVERRIDE
+ void updateTextureBegin(TextureHandle _handle, uint8_t _side, uint8_t _mip) override
{
m_updateTexture = &m_textures[_handle.idx];
m_updateTexture->updateBegin(_side, _mip);
}
- void updateTexture(TextureHandle /*_handle*/, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) BX_OVERRIDE
+ void updateTexture(TextureHandle /*_handle*/, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) override
{
m_updateTexture->update(_side, _mip, _rect, _z, _depth, _pitch, _mem);
}
- void updateTextureEnd() BX_OVERRIDE
+ void updateTextureEnd() override
{
m_updateTexture->updateEnd();
m_updateTexture = NULL;
}
- void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) BX_OVERRIDE
+ void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) override
{
TextureD3D9& texture = m_textures[_handle.idx];
@@ -1015,7 +1070,7 @@ namespace bgfx { namespace d3d9
uint32_t srcPitch = lockedRect.Pitch;
uint8_t* src = (uint8_t*)lockedRect.pBits;
- const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(texture.m_textureFormat) );
+ const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(texture.m_textureFormat) );
uint8_t* dst = (uint8_t*)_data;
uint32_t dstPitch = srcWidth*bpp/8;
@@ -1032,7 +1087,7 @@ namespace bgfx { namespace d3d9
DX_CHECK(texture.m_texture2d->UnlockRect(_mip) );
}
- void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) BX_OVERRIDE
+ void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) override
{
TextureD3D9& texture = m_textures[_handle.idx];
@@ -1060,7 +1115,7 @@ namespace bgfx { namespace d3d9
release(mem);
}
- void overrideInternal(TextureHandle _handle, uintptr_t _ptr) BX_OVERRIDE
+ void overrideInternal(TextureHandle _handle, uintptr_t _ptr) override
{
// Resource ref. counts might be messed up outside of bgfx.
// Disabling ref. count check once texture is overridden.
@@ -1068,7 +1123,7 @@ namespace bgfx { namespace d3d9
m_textures[_handle.idx].overrideInternal(_ptr);
}
- uintptr_t getInternal(TextureHandle _handle) BX_OVERRIDE
+ uintptr_t getInternal(TextureHandle _handle) override
{
// Resource ref. counts might be messed up outside of bgfx.
// Disabling ref. count check once texture is overridden.
@@ -1076,24 +1131,24 @@ namespace bgfx { namespace d3d9
return uintptr_t(m_textures[_handle.idx].m_ptr);
}
- void destroyTexture(TextureHandle _handle) BX_OVERRIDE
+ void destroyTexture(TextureHandle _handle) override
{
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) override
{
m_frameBuffers[_handle.idx].create(_num, _attachment);
}
- void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) override
{
uint16_t denseIdx = m_numWindows++;
m_windows[denseIdx] = _handle;
m_frameBuffers[_handle.idx].create(denseIdx, _nwh, _width, _height, _depthFormat);
}
- void destroyFrameBuffer(FrameBufferHandle _handle) BX_OVERRIDE
+ void destroyFrameBuffer(FrameBufferHandle _handle) override
{
uint16_t denseIdx = m_frameBuffers[_handle.idx].destroy();
if (UINT16_MAX != denseIdx)
@@ -1108,7 +1163,7 @@ namespace bgfx { namespace d3d9
}
}
- void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) BX_OVERRIDE
+ void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) override
{
if (NULL != m_uniforms[_handle.idx])
{
@@ -1122,16 +1177,15 @@ namespace bgfx { namespace d3d9
m_uniformReg.add(_handle, _name, data);
}
- void destroyUniform(UniformHandle _handle) BX_OVERRIDE
+ void destroyUniform(UniformHandle _handle) override
{
BX_FREE(g_allocator, m_uniforms[_handle.idx]);
m_uniforms[_handle.idx] = NULL;
m_uniformReg.remove(_handle);
}
- void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE
+ void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) override
{
-#if BX_PLATFORM_WINDOWS
IDirect3DSwapChain9* swapChain = isValid(_handle)
? m_frameBuffers[_handle.idx].m_swapChain
: m_swapChain
@@ -1195,12 +1249,9 @@ namespace bgfx { namespace d3d9
DX_CHECK(surface->UnlockRect() );
DX_RELEASE(surface, 0);
-#else
- BX_UNUSED(_handle, _filePath);
-#endif // BX_PLATFORM_WINDOWS
}
- void updateViewName(uint8_t _id, const char* _name) BX_OVERRIDE
+ void updateViewName(ViewId _id, const char* _name) override
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
@@ -1210,18 +1261,18 @@ namespace bgfx { namespace d3d9
);
}
- bx::strlcpy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
- , _name
+ bx::strCopy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
, BX_COUNTOF(s_viewName[0]) - BGFX_CONFIG_MAX_VIEW_NAME_RESERVED
+ , _name
);
}
- void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE
+ void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) override
{
bx::memCopy(m_uniforms[_loc], _data, _size);
}
- void setMarker(const char* _marker, uint32_t _size) BX_OVERRIDE
+ void setMarker(const char* _marker, uint32_t _size) override
{
#if BGFX_CONFIG_DEBUG_PIX
uint32_t size = _size*sizeof(wchar_t);
@@ -1232,14 +1283,21 @@ namespace bgfx { namespace d3d9
BX_UNUSED(_marker, _size);
}
- void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE
+ void invalidateOcclusionQuery(OcclusionQueryHandle _handle) override
{
m_occlusionQuery.invalidate(_handle);
}
- void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE;
+ virtual void setName(Handle _handle, const char* _name) override
+ {
+ BX_UNUSED(_handle, _name)
+ }
+
+ void submitBlit(BlitState& _bs, uint16_t _view);
- void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE
+ void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) override;
+
+ void blitSetup(TextVideoMemBlitter& _blitter) override
{
uint32_t width = m_params.BackBufferWidth;
uint32_t height = m_params.BackBufferHeight;
@@ -1271,15 +1329,15 @@ namespace bgfx { namespace d3d9
DX_CHECK(device->SetPixelShader(program.m_fsh->m_pixelShader) );
VertexBufferD3D9& vb = m_vertexBuffers[_blitter.m_vb->handle.idx];
- VertexDeclD3D9& vertexDecl = m_vertexDecls[_blitter.m_vb->decl.idx];
- DX_CHECK(device->SetStreamSource(0, vb.m_ptr, 0, vertexDecl.m_decl.m_stride) );
- DX_CHECK(device->SetVertexDeclaration(vertexDecl.m_ptr) );
+ VertexDecl& vertexDecl = m_vertexDecls[_blitter.m_vb->decl.idx];
+ DX_CHECK(device->SetStreamSource(0, vb.m_ptr, 0, vertexDecl.m_stride) );
+ setInputLayout(vertexDecl, 0);
IndexBufferD3D9& ib = m_indexBuffers[_blitter.m_ib->handle.idx];
DX_CHECK(device->SetIndices(ib.m_ptr) );
float proj[16];
- bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f);
+ bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f, 0.0f, false);
PredefinedUniform& predefined = program.m_predefined[0];
uint8_t flags = predefined.m_type;
@@ -1288,7 +1346,7 @@ namespace bgfx { namespace d3d9
m_textures[_blitter.m_texture.idx].commit(0, BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER, NULL);
}
- void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) BX_OVERRIDE
+ void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) override
{
const uint32_t numVertices = _numIndices*4/6;
if (0 < numVertices)
@@ -1359,7 +1417,6 @@ namespace bgfx { namespace d3d9
m_textVideoMem.resize(false, _resolution.m_width, _resolution.m_height);
m_textVideoMem.clear();
-#if BX_PLATFORM_WINDOWS
D3DDEVICE_CREATION_PARAMETERS dcp;
DX_CHECK(m_device->GetCreationParameters(&dcp) );
@@ -1367,7 +1424,6 @@ namespace bgfx { namespace d3d9
DX_CHECK(m_d3d9->GetAdapterDisplayMode(dcp.AdapterOrdinal, &dm) );
m_params.BackBufferFormat = dm.Format;
-#endif // BX_PLATFORM_WINDOWS
m_params.BackBufferWidth = _resolution.m_width;
m_params.BackBufferHeight = _resolution.m_height;
@@ -1458,7 +1514,12 @@ namespace bgfx { namespace d3d9
m_flushQuery->GetData(NULL, 0, D3DGETDATA_FLUSH);
}
- void flip(HMD& /*_hmd*/) BX_OVERRIDE
+ bool isDeviceRemoved() override
+ {
+ return false;
+ }
+
+ void flip(HMD& /*_hmd*/) override
{
if (NULL != m_swapChain)
{
@@ -1487,7 +1548,6 @@ namespace bgfx { namespace d3d9
hr = m_frameBuffers[m_windows[ii].idx].present();
}
-#if BX_PLATFORM_WINDOWS
if (isLost(hr) )
{
do
@@ -1509,7 +1569,6 @@ namespace bgfx { namespace d3d9
{
BX_TRACE("Present failed with err 0x%08x.", hr);
}
-#endif // BX_PLATFORM_
}
}
}
@@ -1519,6 +1578,7 @@ namespace bgfx { namespace d3d9
m_needPresent = false;
invalidateSamplerState();
+ m_inputLayoutCache.invalidate();
for (uint32_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage)
{
@@ -1985,7 +2045,7 @@ namespace bgfx { namespace d3d9
}
VertexBufferD3D9& vb = m_vertexBuffers[_clearQuad.m_vb->handle.idx];
- VertexDeclD3D9& vertexDecl = m_vertexDecls[_clearQuad.m_vb->decl.idx];
+ VertexDecl& vertexDecl = m_vertexDecls[_clearQuad.m_vb->decl.idx];
uint32_t stride = _clearQuad.m_decl.m_stride;
{
@@ -2055,7 +2115,7 @@ namespace bgfx { namespace d3d9
DX_CHECK(device->SetStreamSource(0, vb.m_ptr, 0, stride) );
DX_CHECK(device->SetStreamSourceFreq(0, 1) );
DX_CHECK(device->SetStreamSource(1, NULL, 0, 0) );
- DX_CHECK(device->SetVertexDeclaration(vertexDecl.m_ptr) );
+ setInputLayout(vertexDecl, 0);
DX_CHECK(device->SetIndices(NULL) );
DX_CHECK(device->DrawPrimitive(D3DPT_TRIANGLESTRIP
, 0
@@ -2064,9 +2124,55 @@ namespace bgfx { namespace d3d9
}
}
-#if BX_PLATFORM_WINDOWS
+ void setInputLayout(uint8_t _numStreams, const VertexDecl** _vertexDecls, uint16_t _numInstanceData)
+ {
+ bx::HashMurmur2A murmur;
+ murmur.begin();
+ murmur.add(_numInstanceData);
+ for (uint8_t stream = 0; stream < _numStreams; ++stream)
+ {
+ murmur.add(_vertexDecls[stream]->m_hash);
+ }
+ uint64_t layoutHash = murmur.end();
+
+ IDirect3DVertexDeclaration9* layout = m_inputLayoutCache.find(layoutHash);
+ if (NULL == layout)
+ {
+ D3DVERTEXELEMENT9 vertexElements[Attrib::Count+1+BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT];
+ D3DVERTEXELEMENT9* elem = vertexElements;
+
+ for (uint8_t stream = 0; stream < _numStreams; ++stream)
+ {
+ elem = fillVertexDecl(stream, elem, *_vertexDecls[stream]);
+ }
+
+ const D3DVERTEXELEMENT9 inst = { _numStreams, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 };
+
+ for (uint8_t ii = 0; ii < _numInstanceData; ++ii)
+ {
+ bx::memCopy(elem, &inst, sizeof(D3DVERTEXELEMENT9) );
+ elem->UsageIndex = uint8_t(7-ii); // TEXCOORD7 = i_data0, TEXCOORD6 = i_data1, etc.
+ elem->Offset = ii*16;
+ ++elem;
+ }
+
+ bx::memCopy(elem, &s_attrib[Attrib::Count], sizeof(D3DVERTEXELEMENT9) );
+
+ DX_CHECK(m_device->CreateVertexDeclaration(vertexElements, &layout) );
+
+ m_inputLayoutCache.add(layoutHash, layout);
+ }
+
+ DX_CHECK(m_device->SetVertexDeclaration(layout) );
+ }
+
+ void setInputLayout(const VertexDecl& _vertexDecl, uint16_t _numInstanceData)
+ {
+ const VertexDecl* decls[1] = { &_vertexDecl };
+ setInputLayout(BX_COUNTOF(decls), decls, _numInstanceData);
+ }
+
D3DCAPS9 m_caps;
-#endif // BX_PLATFORM_WINDOWS
IDirect3D9Ex* m_d3d9ex;
IDirect3DDevice9Ex* m_deviceEx;
@@ -2094,6 +2200,7 @@ namespace bgfx { namespace d3d9
IDirect3DVertexDeclaration9* m_instanceDataDecls[BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT];
void* m_d3d9dll;
+ NvApi m_nvapi;
uint32_t m_adapter;
D3DDEVTYPE m_deviceType;
D3DPRESENT_PARAMETERS m_params;
@@ -2116,7 +2223,7 @@ namespace bgfx { namespace d3d9
ShaderD3D9 m_shaders[BGFX_CONFIG_MAX_SHADERS];
ProgramD3D9 m_program[BGFX_CONFIG_MAX_PROGRAMS];
TextureD3D9 m_textures[BGFX_CONFIG_MAX_TEXTURES];
- VertexDeclD3D9 m_vertexDecls[BGFX_CONFIG_MAX_VERTEX_DECLS];
+ VertexDecl m_vertexDecls[BGFX_CONFIG_MAX_VERTEX_DECLS];
FrameBufferD3D9 m_frameBuffers[BGFX_CONFIG_MAX_FRAME_BUFFERS];
UniformRegistry m_uniformReg;
void* m_uniforms[BGFX_CONFIG_MAX_UNIFORMS];
@@ -2129,6 +2236,8 @@ namespace bgfx { namespace d3d9
uint8_t m_updateTextureSide;
uint8_t m_updateTextureMip;
+ StateCacheT<IDirect3DVertexDeclaration9> m_inputLayoutCache;
+
TextVideoMem m_textVideoMem;
FrameBufferHandle m_fbh;
@@ -2159,15 +2268,15 @@ namespace bgfx { namespace d3d9
{
m_size = _size;
m_flags = _flags;
- m_dynamic = NULL == _data;
uint32_t usage = D3DUSAGE_WRITEONLY;
D3DPOOL pool = s_renderD3D9->m_pool;
- if (m_dynamic)
+ if (NULL == _data)
{
usage |= D3DUSAGE_DYNAMIC;
pool = D3DPOOL_DEFAULT;
+ m_dynamic = (uint8_t*)BX_ALLOC(g_allocator, _size);
}
const D3DFORMAT format = 0 == (_flags & BGFX_BUFFER_INDEX32)
@@ -2191,7 +2300,7 @@ namespace bgfx { namespace d3d9
void IndexBufferD3D9::preReset()
{
- if (m_dynamic)
+ if (NULL != m_dynamic)
{
DX_RELEASE(m_ptr, 0);
}
@@ -2199,7 +2308,7 @@ namespace bgfx { namespace d3d9
void IndexBufferD3D9::postReset()
{
- if (m_dynamic)
+ if (NULL != m_dynamic)
{
const D3DFORMAT format = 0 == (m_flags & BGFX_BUFFER_INDEX32)
? D3DFMT_INDEX16
@@ -2213,6 +2322,8 @@ namespace bgfx { namespace d3d9
, &m_ptr
, NULL
) );
+
+ update(0, m_size, m_dynamic);
}
}
@@ -2220,24 +2331,24 @@ namespace bgfx { namespace d3d9
{
m_size = _size;
m_decl = _declHandle;
- m_dynamic = NULL == _data;
uint32_t usage = D3DUSAGE_WRITEONLY;
D3DPOOL pool = s_renderD3D9->m_pool;
- if (m_dynamic)
+ if (NULL == _data)
{
usage |= D3DUSAGE_DYNAMIC;
pool = D3DPOOL_DEFAULT;
+ m_dynamic = (uint8_t*)BX_ALLOC(g_allocator, _size);
}
DX_CHECK(s_renderD3D9->m_device->CreateVertexBuffer(m_size
- , usage
- , 0
- , pool
- , &m_ptr
- , NULL
- ) );
+ , usage
+ , 0
+ , pool
+ , &m_ptr
+ , NULL
+ ) );
if (NULL != _data)
{
@@ -2247,7 +2358,7 @@ namespace bgfx { namespace d3d9
void VertexBufferD3D9::preReset()
{
- if (m_dynamic)
+ if (NULL != m_dynamic)
{
DX_RELEASE(m_ptr, 0);
}
@@ -2255,127 +2366,18 @@ namespace bgfx { namespace d3d9
void VertexBufferD3D9::postReset()
{
- if (m_dynamic)
+ if (NULL != m_dynamic)
{
DX_CHECK(s_renderD3D9->m_device->CreateVertexBuffer(m_size
- , D3DUSAGE_WRITEONLY|D3DUSAGE_DYNAMIC
- , 0
- , D3DPOOL_DEFAULT
- , &m_ptr
- , NULL
- ) );
- }
- }
-
- static const D3DVERTEXELEMENT9 s_attrib[] =
- {
- { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
- { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
- { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 },
- { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BINORMAL, 0 },
- { 0, 0, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
- { 0, 0, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 1 },
- { 0, 0, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDINDICES, 0 },
- { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDWEIGHT, 0 },
- { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
- { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1 },
- { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 2 },
- { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 3 },
- { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 4 },
- { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 5 },
- { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 6 },
- { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 7 },
- D3DDECL_END()
- };
- BX_STATIC_ASSERT(Attrib::Count == BX_COUNTOF(s_attrib)-1);
-
- static const uint8_t s_attribType[][4][2] =
- {
- { // Uint8
- { D3DDECLTYPE_UBYTE4, D3DDECLTYPE_UBYTE4N },
- { D3DDECLTYPE_UBYTE4, D3DDECLTYPE_UBYTE4N },
- { D3DDECLTYPE_UBYTE4, D3DDECLTYPE_UBYTE4N },
- { D3DDECLTYPE_UBYTE4, D3DDECLTYPE_UBYTE4N },
- },
- { // Uint10
- { D3DDECLTYPE_UDEC3, D3DDECLTYPE_DEC3N },
- { D3DDECLTYPE_UDEC3, D3DDECLTYPE_DEC3N },
- { D3DDECLTYPE_UDEC3, D3DDECLTYPE_DEC3N },
- { D3DDECLTYPE_UDEC3, D3DDECLTYPE_DEC3N },
- },
- { // Int16
- { D3DDECLTYPE_SHORT2, D3DDECLTYPE_SHORT2N },
- { D3DDECLTYPE_SHORT2, D3DDECLTYPE_SHORT2N },
- { D3DDECLTYPE_SHORT4, D3DDECLTYPE_SHORT4N },
- { D3DDECLTYPE_SHORT4, D3DDECLTYPE_SHORT4N },
- },
- { // Half
- { D3DDECLTYPE_FLOAT16_2, D3DDECLTYPE_FLOAT16_2 },
- { D3DDECLTYPE_FLOAT16_2, D3DDECLTYPE_FLOAT16_2 },
- { D3DDECLTYPE_FLOAT16_4, D3DDECLTYPE_FLOAT16_4 },
- { D3DDECLTYPE_FLOAT16_4, D3DDECLTYPE_FLOAT16_4 },
- },
- { // Float
- { D3DDECLTYPE_FLOAT1, D3DDECLTYPE_FLOAT1 },
- { D3DDECLTYPE_FLOAT2, D3DDECLTYPE_FLOAT2 },
- { D3DDECLTYPE_FLOAT3, D3DDECLTYPE_FLOAT3 },
- { D3DDECLTYPE_FLOAT4, D3DDECLTYPE_FLOAT4 },
- },
- };
- BX_STATIC_ASSERT(AttribType::Count == BX_COUNTOF(s_attribType) );
-
- static D3DVERTEXELEMENT9* fillVertexDecl(D3DVERTEXELEMENT9* _out, const VertexDecl& _decl)
- {
- D3DVERTEXELEMENT9* elem = _out;
-
- for (uint32_t attr = 0; attr < Attrib::Count; ++attr)
- {
- if (UINT16_MAX != _decl.m_attributes[attr])
- {
- uint8_t num;
- AttribType::Enum type;
- bool normalized;
- bool asInt;
- _decl.decode(Attrib::Enum(attr), num, type, normalized, asInt);
-
- bx::memCopy(elem, &s_attrib[attr], sizeof(D3DVERTEXELEMENT9) );
-
- elem->Type = s_attribType[type][num-1][normalized];
- elem->Offset = _decl.m_offset[attr];
- ++elem;
- }
- }
-
- return elem;
- }
-
- static IDirect3DVertexDeclaration9* createVertexDeclaration(const VertexDecl& _decl, uint16_t _numInstanceData)
- {
- D3DVERTEXELEMENT9 vertexElements[Attrib::Count+1+BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT];
- D3DVERTEXELEMENT9* elem = fillVertexDecl(vertexElements, _decl);
-
- const D3DVERTEXELEMENT9 inst = { 1, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 };
+ , D3DUSAGE_WRITEONLY|D3DUSAGE_DYNAMIC
+ , 0
+ , D3DPOOL_DEFAULT
+ , &m_ptr
+ , NULL
+ ) );
- for (uint8_t ii = 0; ii < _numInstanceData; ++ii)
- {
- bx::memCopy(elem, &inst, sizeof(D3DVERTEXELEMENT9) );
- elem->UsageIndex = uint8_t(7-ii); // TEXCOORD7 = i_data0, TEXCOORD6 = i_data1, etc.
- elem->Offset = ii*16;
- ++elem;
+ update(0, m_size, m_dynamic);
}
-
- bx::memCopy(elem, &s_attrib[Attrib::Count], sizeof(D3DVERTEXELEMENT9) );
-
- IDirect3DVertexDeclaration9* ptr;
- DX_CHECK(s_renderD3D9->m_device->CreateVertexDeclaration(vertexElements, &ptr) );
- return ptr;
- }
-
- void VertexDeclD3D9::create(const VertexDecl& _decl)
- {
- bx::memCopy(&m_decl, &_decl, sizeof(VertexDecl) );
- dump(m_decl);
- m_ptr = createVertexDeclaration(_decl, 0);
}
void ShaderD3D9::create(const Memory* _mem)
@@ -2482,7 +2484,7 @@ namespace bgfx { namespace d3d9
}
}
- uint16_t shaderSize;
+ uint32_t shaderSize;
bx::read(&reader, shaderSize);
const DWORD* code = (const DWORD*)reader.getDataPtr();
@@ -2504,7 +2506,7 @@ namespace bgfx { namespace d3d9
void TextureD3D9::createTexture(uint32_t _width, uint32_t _height, uint8_t _numMips)
{
m_type = Texture2D;
- const TextureFormat::Enum fmt = (TextureFormat::Enum)m_textureFormat;
+ const bimg::TextureFormat::Enum fmt = (bimg::TextureFormat::Enum)m_textureFormat;
DWORD usage = 0;
D3DPOOL pool = D3DPOOL_DEFAULT;
@@ -2512,7 +2514,7 @@ namespace bgfx { namespace d3d9
const bool renderTarget = 0 != (m_flags&BGFX_TEXTURE_RT_MASK);
const bool blit = 0 != (m_flags&BGFX_TEXTURE_BLIT_DST);
const bool readBack = 0 != (m_flags&BGFX_TEXTURE_READ_BACK);
- if (isDepth(fmt) )
+ if (bimg::isDepth(fmt) )
{
usage = D3DUSAGE_DEPTHSTENCIL;
}
@@ -2543,7 +2545,7 @@ namespace bgfx { namespace d3d9
{
const Msaa& msaa = s_msaa[msaaQuality];
- if (isDepth(fmt) )
+ if (bimg::isDepth(fmt) )
{
DX_CHECK(device->CreateDepthStencilSurface(
m_width
@@ -2615,7 +2617,7 @@ namespace bgfx { namespace d3d9
, _width
, _height
, _numMips
- , getName(fmt)
+ , bimg::getName(fmt)
);
}
@@ -2667,13 +2669,13 @@ namespace bgfx { namespace d3d9
void TextureD3D9::createCubeTexture(uint32_t _width, uint8_t _numMips)
{
m_type = TextureCube;
- const TextureFormat::Enum fmt = (TextureFormat::Enum)m_textureFormat;
+ const bimg::TextureFormat::Enum fmt = (bimg::TextureFormat::Enum)m_textureFormat;
DWORD usage = 0;
const bool renderTarget = 0 != (m_flags&BGFX_TEXTURE_RT_MASK);
const bool blit = 0 != (m_flags&BGFX_TEXTURE_BLIT_DST);
- if (isDepth(fmt) )
+ if (bimg::isDepth(fmt) )
{
usage = D3DUSAGE_DEPTHSTENCIL;
}
@@ -2891,14 +2893,14 @@ namespace bgfx { namespace d3d9
void TextureD3D9::create(const Memory* _mem, uint32_t _flags, uint8_t _skip)
{
- ImageContainer imageContainer;
+ bimg::ImageContainer imageContainer;
- if (imageParse(imageContainer, _mem->data, _mem->size) )
+ if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
{
uint8_t numMips = imageContainer.m_numMips;
const uint8_t startLod = uint8_t(bx::uint32_min(_skip, numMips-1) );
numMips -= startLod;
- const ImageBlockInfo& blockInfo = getBlockInfo(TextureFormat::Enum(imageContainer.m_format) );
+ const bimg::ImageBlockInfo& blockInfo = bimg::getBlockInfo(bimg::TextureFormat::Enum(imageContainer.m_format) );
const uint32_t textureWidth = bx::uint32_max(blockInfo.blockWidth, imageContainer.m_width >>startLod);
const uint32_t textureHeight = bx::uint32_max(blockInfo.blockHeight, imageContainer.m_height>>startLod);
@@ -2911,7 +2913,7 @@ namespace bgfx { namespace d3d9
m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
const bool convert = m_textureFormat != m_requestedFormat;
- uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
+ uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
if (imageContainer.m_cubeMap)
{
@@ -2926,11 +2928,6 @@ namespace bgfx { namespace d3d9
createTexture(textureWidth, textureHeight, numMips);
}
- if (imageContainer.m_srgb)
- {
- m_flags |= BGFX_TEXTURE_SRGB;
- }
-
BX_TRACE("Texture %3d: %s (requested: %s), %dx%d%s%s."
, this - s_renderD3D9->m_textures
, getName( (TextureFormat::Enum)m_textureFormat)
@@ -2950,8 +2947,8 @@ namespace bgfx { namespace d3d9
// bytes. If actual mip size is used it causes memory corruption.
// http://www.aras-p.info/texts/D3D9GPUHacks.html#3dc
const bool useMipSize = true
- && imageContainer.m_format != TextureFormat::BC4
- && imageContainer.m_format != TextureFormat::BC5
+ && imageContainer.m_format != bimg::TextureFormat::BC4
+ && imageContainer.m_format != bimg::TextureFormat::BC5
;
for (uint8_t side = 0, numSides = imageContainer.m_cubeMap ? 6 : 1; side < numSides; ++side)
@@ -2971,8 +2968,8 @@ namespace bgfx { namespace d3d9
mipHeight = bx::uint32_max(blockInfo.blockHeight, mipHeight);
uint32_t mipSize = width*height*depth*bpp/8;
- ImageMip mip;
- if (imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
+ bimg::ImageMip mip;
+ if (bimg::imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
{
uint32_t pitch;
uint32_t slicePitch;
@@ -2986,7 +2983,7 @@ namespace bgfx { namespace d3d9
uint32_t srcpitch = mipWidth*bpp/8;
uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, srcpitch*mipHeight);
- imageDecodeToBgra8(temp
+ bimg::imageDecodeToBgra8(temp
, mip.m_data
, mip.m_width
, mip.m_height
@@ -3000,7 +2997,7 @@ namespace bgfx { namespace d3d9
}
else
{
- imageDecodeToBgra8(bits, mip.m_data, mip.m_width, mip.m_height, pitch, mip.m_format);
+ bimg::imageDecodeToBgra8(bits, mip.m_data, mip.m_width, mip.m_height, pitch, mip.m_format);
}
}
else
@@ -3009,11 +3006,11 @@ namespace bgfx { namespace d3d9
switch (m_textureFormat)
{
case TextureFormat::RGB5A1:
- imageConvert(bits, 16, bx::packBgr5a1, mip.m_data, bx::unpackRgb5a1, size);
+ bimg::imageConvert(bits, 16, bx::packBgr5a1, mip.m_data, bx::unpackRgb5a1, size);
break;
case TextureFormat::RGBA4:
- imageConvert(bits, 16, bx::packBgra4, mip.m_data, bx::unpackRgba4, size);
+ bimg::imageConvert(bits, 16, bx::packBgra4, mip.m_data, bx::unpackRgba4, size);
break;
default:
@@ -3045,7 +3042,7 @@ namespace bgfx { namespace d3d9
void TextureD3D9::update(uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem)
{
- const uint32_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
+ const uint32_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
const uint32_t rectpitch = _rect.m_width*bpp/8;
const uint32_t srcpitch = UINT16_MAX == _pitch ? rectpitch : _pitch;
const uint32_t dstpitch = s_renderD3D9->m_updateTexturePitch;
@@ -3059,7 +3056,7 @@ namespace bgfx { namespace d3d9
if (convert)
{
temp = (uint8_t*)BX_ALLOC(g_allocator, rectpitch*_rect.m_height);
- imageDecodeToBgra8(temp, data, _rect.m_width, _rect.m_height, srcpitch, TextureFormat::Enum(m_requestedFormat) );
+ bimg::imageDecodeToBgra8(temp, data, _rect.m_width, _rect.m_height, srcpitch, bimg::TextureFormat::Enum(m_requestedFormat) );
data = temp;
}
@@ -3071,11 +3068,11 @@ namespace bgfx { namespace d3d9
switch (m_textureFormat)
{
case TextureFormat::RGB5A1:
- imageConvert(dst, 16, bx::packBgr5a1, src, bx::unpackRgb5a1, rectpitch);
+ bimg::imageConvert(dst, 16, bx::packBgr5a1, src, bx::unpackRgb5a1, rectpitch);
break;
case TextureFormat::RGBA4:
- imageConvert(dst, 16, bx::packBgra4, src, bx::unpackRgba4, rectpitch);
+ bimg::imageConvert(dst, 16, bx::packBgra4, src, bx::unpackRgba4, rectpitch);
break;
default:
@@ -3211,7 +3208,7 @@ namespace bgfx { namespace d3d9
m_height = texture.m_height;
}
- if (isDepth( (TextureFormat::Enum)texture.m_textureFormat) )
+ if (bimg::isDepth(bimg::TextureFormat::Enum(texture.m_textureFormat) ) )
{
m_dsIdx = uint8_t(ii);
}
@@ -3450,25 +3447,29 @@ namespace bgfx { namespace d3d9
{
IDirect3DDevice9* device = s_renderD3D9->m_device;
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_frame); ++ii)
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_query); ++ii)
{
- Frame& frame = m_frame[ii];
+ Query& frame = m_query[ii];
DX_CHECK(device->CreateQuery(D3DQUERYTYPE_TIMESTAMPDISJOINT, &frame.m_disjoint) );
DX_CHECK(device->CreateQuery(D3DQUERYTYPE_TIMESTAMP, &frame.m_begin) );
DX_CHECK(device->CreateQuery(D3DQUERYTYPE_TIMESTAMP, &frame.m_end) );
DX_CHECK(device->CreateQuery(D3DQUERYTYPE_TIMESTAMPFREQ, &frame.m_freq) );
}
- m_elapsed = 0;
- m_frequency = 1;
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_result); ++ii)
+ {
+ Result& result = m_result[ii];
+ result.reset();
+ }
+
m_control.reset();
}
void TimerQueryD3D9::preReset()
{
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_frame); ++ii)
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_query); ++ii)
{
- Frame& frame = m_frame[ii];
+ Query& frame = m_query[ii];
DX_RELEASE(frame.m_disjoint, 0);
DX_RELEASE(frame.m_begin, 0);
DX_RELEASE(frame.m_end, 0);
@@ -3476,51 +3477,74 @@ namespace bgfx { namespace d3d9
}
}
- void TimerQueryD3D9::begin()
+ uint32_t TimerQueryD3D9::begin(uint32_t _resultIdx)
{
while (0 == m_control.reserve(1) )
{
- get();
+ update();
}
- Frame& frame = m_frame[m_control.m_current];
- frame.m_disjoint->Issue(D3DISSUE_BEGIN);
- frame.m_begin->Issue(D3DISSUE_END);
+ Result& result = m_result[_resultIdx];
+ ++result.m_pending;
+
+ const uint32_t idx = m_control.m_current;
+ Query& query = m_query[idx];
+ query.m_resultIdx = _resultIdx;
+ query.m_ready = false;
+
+ query.m_disjoint->Issue(D3DISSUE_BEGIN);
+ query.m_begin->Issue(D3DISSUE_END);
+
+ m_control.commit(1);
+
+ return idx;
}
- void TimerQueryD3D9::end()
+ void TimerQueryD3D9::end(uint32_t _idx)
{
- Frame& frame = m_frame[m_control.m_current];
- frame.m_disjoint->Issue(D3DISSUE_END);
- frame.m_freq->Issue(D3DISSUE_END);
- frame.m_end->Issue(D3DISSUE_END);
- m_control.commit(1);
+ Query& query = m_query[_idx];
+ query.m_ready = true;
+
+ query.m_disjoint->Issue(D3DISSUE_END);
+ query.m_freq->Issue(D3DISSUE_END);
+ query.m_end->Issue(D3DISSUE_END);
+
+ while (update() )
+ {
+ }
}
- bool TimerQueryD3D9::get()
+ bool TimerQueryD3D9::update()
{
if (0 != m_control.available() )
{
- Frame& frame = m_frame[m_control.m_read];
+ Query& query = m_query[m_control.m_read];
+
+ if (!query.m_ready)
+ {
+ return false;
+ }
uint64_t timeEnd;
- const bool flush = BX_COUNTOF(m_frame)-1 == m_control.available();
- HRESULT hr = frame.m_end->GetData(&timeEnd, sizeof(timeEnd), flush ? D3DGETDATA_FLUSH : 0);
+ const bool flush = BX_COUNTOF(m_query)-1 == m_control.available();
+ HRESULT hr = query.m_end->GetData(&timeEnd, sizeof(timeEnd), flush ? D3DGETDATA_FLUSH : 0);
if (S_OK == hr
|| isLost(hr) )
{
m_control.consume(1);
uint64_t timeBegin;
- DX_CHECK(frame.m_begin->GetData(&timeBegin, sizeof(timeBegin), 0) );
+ DX_CHECK(query.m_begin->GetData(&timeBegin, sizeof(timeBegin), 0) );
uint64_t freq;
- DX_CHECK(frame.m_freq->GetData(&freq, sizeof(freq), 0) );
+ DX_CHECK(query.m_freq->GetData(&freq, sizeof(freq), 0) );
- m_frequency = freq;
- m_begin = timeBegin;
- m_end = timeEnd;
- m_elapsed = timeEnd - timeBegin;
+ Result& result = m_result[query.m_resultIdx];
+ --result.m_pending;
+
+ result.m_frequency = freq;
+ result.m_begin = timeBegin;
+ result.m_end = timeEnd;
return true;
}
@@ -3599,8 +3623,62 @@ namespace bgfx { namespace d3d9
Query& query = m_query[(m_control.m_read + ii) % size];
if (query.m_handle.idx == _handle.idx)
{
- query.m_handle.idx = bgfx::invalidHandle;
+ query.m_handle.idx = bgfx::kInvalidHandle;
+ }
+ }
+ }
+
+ void RendererContextD3D9::submitBlit(BlitState& _bs, uint16_t _view)
+ {
+ while (_bs.hasItem(_view) )
+ {
+ const BlitItem& blit = _bs.advance();
+
+ const TextureD3D9& src = m_textures[blit.m_src.idx];
+ const TextureD3D9& dst = m_textures[blit.m_dst.idx];
+
+ uint32_t srcWidth = bx::uint32_min(src.m_width, blit.m_srcX + blit.m_width) - blit.m_srcX;
+ uint32_t srcHeight = bx::uint32_min(src.m_height, blit.m_srcY + blit.m_height) - blit.m_srcY;
+ uint32_t dstWidth = bx::uint32_min(dst.m_width, blit.m_dstX + blit.m_width) - blit.m_dstX;
+ uint32_t dstHeight = bx::uint32_min(dst.m_height, blit.m_dstY + blit.m_height) - blit.m_dstY;
+ uint32_t width = bx::uint32_min(srcWidth, dstWidth);
+ uint32_t height = bx::uint32_min(srcHeight, dstHeight);
+
+ RECT srcRect = { LONG(blit.m_srcX), LONG(blit.m_srcY), LONG(blit.m_srcX + width), LONG(blit.m_srcY + height) };
+ RECT dstRect = { LONG(blit.m_dstX), LONG(blit.m_dstY), LONG(blit.m_dstX + width), LONG(blit.m_dstY + height) };
+
+ IDirect3DSurface9* srcSurface = src.getSurface(uint8_t(blit.m_srcZ), blit.m_srcMip);
+ IDirect3DSurface9* dstSurface = dst.getSurface(uint8_t(blit.m_dstZ), blit.m_dstMip);
+
+ // UpdateSurface (pool src: SYSTEMMEM, dst: DEFAULT)
+ // s/d T RTT RT
+ // T y y y
+ // RTT - - -
+ // RT - - -
+ //
+ // StretchRect (pool src and dst must be DEFAULT)
+ // s/d T RTT RT
+ // T - y y
+ // RTT - y y
+ // RT - y y
+ //
+ // GetRenderTargetData (dst must be SYSTEMMEM)
+
+ bool depth = bimg::isDepth(bimg::TextureFormat::Enum(src.m_textureFormat) );
+ HRESULT hr = m_device->StretchRect(srcSurface
+ , depth ? NULL : &srcRect
+ , dstSurface
+ , depth ? NULL : &dstRect
+ , D3DTEXF_NONE
+ );
+ if (FAILED(hr) )
+ {
+ hr = m_device->GetRenderTargetData(srcSurface, dstSurface);
+ BX_WARN(SUCCEEDED(hr), "StretchRect and GetRenderTargetData failed %x.", hr);
}
+
+ srcSurface->Release();
+ dstSurface->Release();
}
}
@@ -3612,13 +3690,15 @@ namespace bgfx { namespace d3d9
updateResolution(_render->m_resolution);
- int64_t elapsed = -bx::getHPCounter();
+ int64_t timeBegin = bx::getHPCounter();
int64_t captureElapsed = 0;
+ uint32_t frameQueryIdx = UINT32_MAX;
+
device->BeginScene();
if (m_timerQuerySupport)
{
- m_gpuTimer.begin();
+ frameQueryIdx = m_gpuTimer.begin(BGFX_CONFIG_MAX_VIEWS);
}
if (0 < _render->m_iboffset)
@@ -3640,19 +3720,19 @@ namespace bgfx { namespace d3d9
currentState.m_stateFlags = BGFX_STATE_NONE;
currentState.m_stencil = packStencil(BGFX_STENCIL_NONE, BGFX_STENCIL_NONE);
+ RenderBind currentBind;
+ currentBind.clear();
+
ViewState viewState(_render, false);
DX_CHECK(device->SetRenderState(D3DRS_FILLMODE, _render->m_debug&BGFX_DEBUG_WIREFRAME ? D3DFILL_WIREFRAME : D3DFILL_SOLID) );
- uint16_t programIdx = invalidHandle;
+ uint16_t programIdx = kInvalidHandle;
SortKey key;
uint16_t view = UINT16_MAX;
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
uint32_t blendFactor = 0;
- BlitKey blitKey;
- blitKey.decode(_render->m_blitKeys[0]);
- uint16_t numBlitItems = _render->m_numBlitItems;
- uint16_t blitItem = 0;
+ BlitState bs(_render);
uint8_t primIndex;
{
@@ -3673,6 +3753,13 @@ namespace bgfx { namespace d3d9
invalidateSamplerState();
+ Profiler<TimerQueryD3D9> profiler(
+ _render
+ , m_gpuTimer
+ , s_viewName
+ , m_timerQuerySupport
+ );
+
if (m_occlusionQuerySupport)
{
m_occlusionQuery.resolve(_render);
@@ -3680,7 +3767,7 @@ namespace bgfx { namespace d3d9
if (0 == (_render->m_debug&BGFX_DEBUG_IFH) )
{
- for (uint32_t item = 0, numItems = _render->m_num; item < numItems; ++item)
+ for (uint32_t item = 0, numItems = _render->m_numRenderItems; item < numItems; ++item)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
const bool isCompute = key.decode(encodedKey, _render->m_viewRemap);
@@ -3692,7 +3779,9 @@ namespace bgfx { namespace d3d9
continue;
}
- const RenderDraw& draw = _render->m_renderItem[_render->m_sortValues[item] ].draw;
+ const uint32_t itemIdx = _render->m_sortValues[item];
+ const RenderDraw& draw = _render->m_renderItem[itemIdx].draw;
+ const RenderBind& renderBind = _render->m_renderItemBind[itemIdx];
const bool hasOcclusionQuery = 0 != (draw.m_stateFlags & BGFX_STATE_INTERNAL_OCCLUSION_QUERY);
if (isValid(draw.m_occlusionQuery)
@@ -3719,25 +3808,26 @@ namespace bgfx { namespace d3d9
currentState.m_stateFlags = newFlags;
currentState.m_stencil = newStencil;
- PIX_ENDEVENT();
- PIX_BEGINEVENT(D3DCOLOR_VIEW, s_viewNameW[key.m_view]);
- if (item > 0)
- {
- BGFX_PROFILER_END();
- }
- BGFX_PROFILER_BEGIN_DYNAMIC(s_viewName[key.m_view]);
-
view = key.m_view;
- programIdx = invalidHandle;
+ programIdx = kInvalidHandle;
- if (_render->m_fb[view].idx != fbh.idx)
+ if (_render->m_view[view].m_fbh.idx != fbh.idx)
{
- fbh = _render->m_fb[view];
+ fbh = _render->m_view[view].m_fbh;
setFrameBuffer(fbh);
}
- viewState.m_rect = _render->m_rect[view];
- const Rect& scissorRect = _render->m_scissor[view];
+ PIX_ENDEVENT();
+ if (item > 0)
+ {
+ profiler.end();
+ }
+
+ profiler.begin(view);
+ PIX_BEGINEVENT(D3DCOLOR_VIEW, s_viewNameW[view]);
+
+ viewState.m_rect = _render->m_view[view].m_rect;
+ const Rect& scissorRect = _render->m_view[view].m_scissor;
viewHasScissor = !scissorRect.isZero();
viewScissorRect = viewHasScissor ? scissorRect : viewState.m_rect;
@@ -3750,12 +3840,11 @@ namespace bgfx { namespace d3d9
vp.MaxZ = 1.0f;
DX_CHECK(device->SetViewport(&vp) );
- Clear& clear = _render->m_clear[view];
+ Clear& clear = _render->m_view[view].m_clear;
if (BGFX_CLEAR_NONE != (clear.m_flags & BGFX_CLEAR_MASK) )
{
clearQuad(_clearQuad, viewState.m_rect, clear, _render->m_colorPalette);
- prim = s_primInfo[BX_COUNTOF(s_primName)]; // Force primitive type update after clear quad.
}
DX_CHECK(device->SetRenderState(D3DRS_STENCILENABLE, FALSE) );
@@ -3765,58 +3854,7 @@ namespace bgfx { namespace d3d9
DX_CHECK(device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE) );
DX_CHECK(device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER) );
- const uint8_t blitView = SortKey::decodeView(encodedKey);
- for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
- {
- const BlitItem& blit = _render->m_blitItem[blitItem];
- blitKey.decode(_render->m_blitKeys[blitItem+1]);
-
- const TextureD3D9& src = m_textures[blit.m_src.idx];
- const TextureD3D9& dst = m_textures[blit.m_dst.idx];
-
- uint32_t srcWidth = bx::uint32_min(src.m_width, blit.m_srcX + blit.m_width) - blit.m_srcX;
- uint32_t srcHeight = bx::uint32_min(src.m_height, blit.m_srcY + blit.m_height) - blit.m_srcY;
- uint32_t dstWidth = bx::uint32_min(dst.m_width, blit.m_dstX + blit.m_width) - blit.m_dstX;
- uint32_t dstHeight = bx::uint32_min(dst.m_height, blit.m_dstY + blit.m_height) - blit.m_dstY;
- uint32_t width = bx::uint32_min(srcWidth, dstWidth);
- uint32_t height = bx::uint32_min(srcHeight, dstHeight);
-
- RECT srcRect = { LONG(blit.m_srcX), LONG(blit.m_srcY), LONG(blit.m_srcX + width), LONG(blit.m_srcY + height) };
- RECT dstRect = { LONG(blit.m_dstX), LONG(blit.m_dstY), LONG(blit.m_dstX + width), LONG(blit.m_dstY + height) };
-
- IDirect3DSurface9* srcSurface = src.getSurface(uint8_t(blit.m_srcZ), blit.m_srcMip);
- IDirect3DSurface9* dstSurface = dst.getSurface(uint8_t(blit.m_dstZ), blit.m_dstMip);
-
- // UpdateSurface (pool src: SYSTEMMEM, dst: DEFAULT)
- // s/d T RTT RT
- // T y y y
- // RTT - - -
- // RT - - -
- //
- // StretchRect (pool src and dst must be DEFAULT)
- // s/d T RTT RT
- // T - y y
- // RTT - y y
- // RT - y y
- //
- // GetRenderTargetData (dst must be SYSTEMMEM)
-
- bool depth = isDepth(TextureFormat::Enum(src.m_textureFormat) );
- HRESULT hr = m_device->StretchRect(srcSurface
- , depth ? NULL : &srcRect
- , dstSurface
- , depth ? NULL : &dstRect
- , D3DTEXF_NONE
- );
- if (FAILED(hr) )
- {
- hr = m_device->GetRenderTargetData(srcSurface, dstSurface);
- BX_WARN(SUCCEEDED(hr), "StretchRect and GetRenderTargetData failed %x.", hr);
- }
-
- srcSurface->Release();
- dstSurface->Release();
- }
+ submitBlit(bs, view);
}
uint16_t scissor = draw.m_scissor;
@@ -3840,7 +3878,7 @@ namespace bgfx { namespace d3d9
else
{
Rect scissorRect;
- scissorRect.setIntersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]);
+ scissorRect.setIntersect(viewScissorRect, _render->m_frameCache.m_rectCache.m_cache[scissor]);
if (scissorRect.isZeroArea() )
{
continue;
@@ -4044,14 +4082,14 @@ namespace bgfx { namespace d3d9
}
bool programChanged = false;
- bool constantsChanged = draw.m_constBegin < draw.m_constEnd;
- rendererUpdateUniforms(this, _render->m_uniformBuffer, draw.m_constBegin, draw.m_constEnd);
+ bool constantsChanged = draw.m_uniformBegin < draw.m_uniformEnd;
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd);
if (key.m_program != programIdx)
{
programIdx = key.m_program;
- if (invalidHandle == programIdx)
+ if (kInvalidHandle == programIdx)
{
device->SetVertexShader(NULL);
device->SetPixelShader(NULL);
@@ -4067,7 +4105,7 @@ namespace bgfx { namespace d3d9
constantsChanged = true;
}
- if (invalidHandle != programIdx)
+ if (kInvalidHandle != programIdx)
{
ProgramD3D9& program = m_program[programIdx];
@@ -4092,13 +4130,14 @@ namespace bgfx { namespace d3d9
{
for (uint8_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage)
{
- const Binding& bind = draw.m_bind[stage];
- Binding& current = currentState.m_bind[stage];
+ const Binding& bind = renderBind.m_bind[stage];
+ Binding& current = currentBind.m_bind[stage];
+
if (current.m_idx != bind.m_idx
|| current.m_un.m_draw.m_textureFlags != bind.m_un.m_draw.m_textureFlags
|| programChanged)
{
- if (invalidHandle != bind.m_idx)
+ if (kInvalidHandle != bind.m_idx)
{
m_textures[bind.m_idx].commit(stage, bind.m_un.m_draw.m_textureFlags, _render->m_colorPalette);
}
@@ -4112,45 +4151,75 @@ namespace bgfx { namespace d3d9
}
}
+ bool vertexStreamChanged = hasVertexStreamChanged(currentState, draw);
+
if (programChanged
- || currentState.m_streamMask != draw.m_streamMask
- || currentState.m_stream[0].m_handle.idx != draw.m_stream[0].m_handle.idx
- || currentState.m_instanceDataBuffer.idx != draw.m_instanceDataBuffer.idx
- || currentState.m_instanceDataOffset != draw.m_instanceDataOffset
- || currentState.m_instanceDataStride != draw.m_instanceDataStride)
+ || vertexStreamChanged)
{
- currentState.m_streamMask = draw.m_streamMask;
- currentState.m_stream[0].m_handle = draw.m_stream[0].m_handle;
+ currentState.m_streamMask = draw.m_streamMask;
currentState.m_instanceDataBuffer.idx = draw.m_instanceDataBuffer.idx;
currentState.m_instanceDataOffset = draw.m_instanceDataOffset;
currentState.m_instanceDataStride = draw.m_instanceDataStride;
- uint16_t handle = draw.m_stream[0].m_handle.idx;
- if (invalidHandle != handle)
+ const VertexDecl* decls[BGFX_CONFIG_MAX_VERTEX_STREAMS];
+
+ const bool instanced = true
+ && isValid(draw.m_instanceDataBuffer)
+ && m_instancingSupport
+ ;
+
+ const uint32_t freq = instanced
+ ? D3DSTREAMSOURCE_INDEXEDDATA|draw.m_numInstances
+ : 1
+ ;
+
+ uint32_t numVertices = draw.m_numVertices;
+ uint8_t numStreams = 0;
+ for (uint32_t idx = 0, streamMask = draw.m_streamMask, ntz = bx::uint32_cnttz(streamMask)
+ ; 0 != streamMask
+ ; streamMask >>= 1, idx += 1, ntz = bx::uint32_cnttz(streamMask), ++numStreams
+ )
{
+ streamMask >>= ntz;
+ idx += ntz;
+
+ currentState.m_stream[idx].m_decl = draw.m_stream[idx].m_decl;
+ currentState.m_stream[idx].m_handle = draw.m_stream[idx].m_handle;
+ currentState.m_stream[idx].m_startVertex = draw.m_stream[idx].m_startVertex;
+
+ const uint16_t handle = draw.m_stream[idx].m_handle.idx;
const VertexBufferD3D9& vb = m_vertexBuffers[handle];
+ const uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[idx].m_decl.idx : vb.m_decl.idx;
+ const VertexDecl& vertexDecl = m_vertexDecls[decl];
+ const uint32_t stride = vertexDecl.m_stride;
+
+ decls[numStreams] = &vertexDecl;
- uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[0].m_decl.idx : vb.m_decl.idx;
- const VertexDeclD3D9& vertexDecl = m_vertexDecls[decl];
- DX_CHECK(device->SetStreamSource(0, vb.m_ptr, 0, vertexDecl.m_decl.m_stride) );
+ numVertices = bx::uint32_min(UINT32_MAX == draw.m_numVertices
+ ? vb.m_size/stride
+ : draw.m_numVertices
+ , numVertices
+ );
+
+ DX_CHECK(device->SetStreamSourceFreq(0, freq) );
+ DX_CHECK(device->SetStreamSource(numStreams, vb.m_ptr, 0, stride) );
+ }
- if (isValid(draw.m_instanceDataBuffer)
- && m_instancingSupport)
+ currentState.m_numVertices = numVertices;
+
+ if (0 < numStreams)
+ {
+ if (instanced)
{
const VertexBufferD3D9& inst = m_vertexBuffers[draw.m_instanceDataBuffer.idx];
- DX_CHECK(device->SetStreamSourceFreq(0, D3DSTREAMSOURCE_INDEXEDDATA|draw.m_numInstances) );
- DX_CHECK(device->SetStreamSourceFreq(1, UINT(D3DSTREAMSOURCE_INSTANCEDATA|1) ) );
- DX_CHECK(device->SetStreamSource(1, inst.m_ptr, draw.m_instanceDataOffset, draw.m_instanceDataStride) );
-
- IDirect3DVertexDeclaration9* ptr = createVertexDeclaration(vertexDecl.m_decl, draw.m_instanceDataStride/16);
- DX_CHECK(device->SetVertexDeclaration(ptr) );
- DX_RELEASE(ptr, 0);
+ DX_CHECK(device->SetStreamSourceFreq(numStreams, UINT(D3DSTREAMSOURCE_INSTANCEDATA|1) ) );
+ DX_CHECK(device->SetStreamSource(numStreams, inst.m_ptr, draw.m_instanceDataOffset, draw.m_instanceDataStride) );
+ setInputLayout(numStreams, decls, draw.m_instanceDataStride/16);
}
else
{
- DX_CHECK(device->SetStreamSourceFreq(0, 1) );
- DX_CHECK(device->SetStreamSource(1, NULL, 0, 0) );
- DX_CHECK(device->SetVertexDeclaration(vertexDecl.m_ptr) );
+ DX_CHECK(device->SetStreamSource(numStreams, NULL, 0, 0) );
+ setInputLayout(numStreams, decls, 0);
}
}
else
@@ -4165,7 +4234,7 @@ namespace bgfx { namespace d3d9
currentState.m_indexBuffer = draw.m_indexBuffer;
uint16_t handle = draw.m_indexBuffer.idx;
- if (invalidHandle != handle)
+ if (kInvalidHandle != handle)
{
const IndexBufferD3D9& ib = m_indexBuffers[handle];
DX_CHECK(device->SetIndices(ib.m_ptr) );
@@ -4178,15 +4247,7 @@ namespace bgfx { namespace d3d9
if (0 != currentState.m_streamMask)
{
- uint32_t numVertices = draw.m_numVertices;
- if (UINT32_MAX == numVertices)
- {
- const VertexBufferD3D9& vb = m_vertexBuffers[currentState.m_stream[0].m_handle.idx];
- uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[0].m_decl.idx : vb.m_decl.idx;
- const VertexDeclD3D9& vertexDecl = m_vertexDecls[decl];
- numVertices = vb.m_size/vertexDecl.m_decl.m_stride;
- }
-
+ uint32_t numVertices = draw.m_numVertices;
uint32_t numIndices = 0;
uint32_t numPrimsSubmitted = 0;
uint32_t numInstances = 0;
@@ -4256,7 +4317,9 @@ namespace bgfx { namespace d3d9
}
}
- if (0 < _render->m_num)
+ submitBlit(bs, BGFX_CONFIG_MAX_VIEWS);
+
+ if (0 < _render->m_numRenderItems)
{
if (0 != (m_resolution.m_flags & BGFX_RESET_FLUSH_AFTER_RENDER) )
{
@@ -4267,22 +4330,14 @@ namespace bgfx { namespace d3d9
capture();
captureElapsed += bx::getHPCounter();
- BGFX_PROFILER_END();
+ profiler.end();
}
}
PIX_ENDEVENT();
- int64_t now = bx::getHPCounter();
- elapsed += now;
-
- static int64_t last = now;
-
- Stats& perfStats = _render->m_perfStats;
- perfStats.cpuTimeBegin = last;
-
- int64_t frameTime = now - last;
- last = now;
+ int64_t timeEnd = bx::getHPCounter();
+ int64_t frameTime = timeEnd - timeBegin;
static int64_t min = frameTime;
static int64_t max = frameTime;
@@ -4293,31 +4348,32 @@ namespace bgfx { namespace d3d9
static double maxGpuElapsed = 0.0f;
double elapsedGpuMs = 0.0;
- if (m_timerQuerySupport)
+ if (UINT32_MAX != frameQueryIdx)
{
- m_gpuTimer.end();
+ m_gpuTimer.end(frameQueryIdx);
- do
- {
- double toGpuMs = 1000.0 / double(m_gpuTimer.m_frequency);
- elapsedGpuMs = m_gpuTimer.m_elapsed * toGpuMs;
- maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
- }
- while (m_gpuTimer.get() );
+ const TimerQueryD3D9::Result& result = m_gpuTimer.m_result[BGFX_CONFIG_MAX_VIEWS];
+ double toGpuMs = 1000.0 / double(result.m_frequency);
+ elapsedGpuMs = (result.m_end - result.m_begin) * toGpuMs;
+ maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
- maxGpuLatency = bx::uint32_imax(maxGpuLatency, m_gpuTimer.m_control.available()-1);
+ maxGpuLatency = bx::uint32_imax(maxGpuLatency, result.m_pending-1);
}
const int64_t timerFreq = bx::getHPFrequency();
- perfStats.cpuTimeEnd = now;
+ Stats& perfStats = _render->m_perfStats;
+ perfStats.cpuTimeBegin = timeBegin;
+ perfStats.cpuTimeEnd = timeEnd;
perfStats.cpuTimerFreq = timerFreq;
- perfStats.gpuTimeBegin = m_gpuTimer.m_begin;
- perfStats.gpuTimeEnd = m_gpuTimer.m_end;
- perfStats.gpuTimerFreq = m_gpuTimer.m_frequency;
+ const TimerQueryD3D9::Result& result = m_gpuTimer.m_result[BGFX_CONFIG_MAX_VIEWS];
+ perfStats.gpuTimeBegin = result.m_begin;
+ perfStats.gpuTimeEnd = result.m_end;
+ perfStats.gpuTimerFreq = result.m_frequency;
perfStats.numDraw = statsKeyType[0];
perfStats.numCompute = statsKeyType[1];
perfStats.maxGpuLatency = maxGpuLatency;
+ m_nvapi.getMemoryInfo(perfStats.gpuMemoryUsed, perfStats.gpuMemoryMax);
if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) )
{
@@ -4326,11 +4382,11 @@ namespace bgfx { namespace d3d9
m_needPresent = true;
TextVideoMem& tvm = m_textVideoMem;
- static int64_t next = now;
+ static int64_t next = timeEnd;
- if (now >= next)
+ if (timeEnd >= next)
{
- next = now + timerFreq;
+ next = timeEnd + timerFreq;
double freq = double(timerFreq);
double toMs = 1000.0/freq;
@@ -4364,9 +4420,9 @@ namespace bgfx { namespace d3d9
, !!(m_resolution.m_flags&BGFX_RESET_MAXANISOTROPY) ? '\xfe' : ' '
);
- double elapsedCpuMs = double(elapsed)*toMs;
+ double elapsedCpuMs = double(frameTime)*toMs;
tvm.printf(10, pos++, 0x8e, " Submitted: %5d (draw %5d, compute %4d) / CPU %7.4f [ms] %c GPU %7.4f [ms] (latency %d)"
- , _render->m_num
+ , _render->m_numRenderItems
, statsKeyType[0]
, statsKeyType[1]
, elapsedCpuMs
@@ -4388,11 +4444,21 @@ namespace bgfx { namespace d3d9
}
tvm.printf(10, pos++, 0x8e, " Indices: %7d ", statsNumIndices);
- tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
+// tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
tvm.printf(10, pos++, 0x8e, " DVB size: %7d ", _render->m_vboffset);
tvm.printf(10, pos++, 0x8e, " DIB size: %7d ", _render->m_iboffset);
pos++;
+ tvm.printf(10, pos++, 0x8e, " Occlusion queries: %3d ", m_occlusionQuery.m_control.available() );
+
+ pos++;
+ tvm.printf(10, pos++, 0x8e, " State cache: ");
+ tvm.printf(10, pos++, 0x8e, " Input ");
+ tvm.printf(10, pos++, 0x8e, " %6d "
+ , m_inputLayoutCache.getCount()
+ );
+ pos++;
+
double captureMs = double(captureElapsed)*toMs;
tvm.printf(10, pos++, 0x8e, " Capture: %7.4f [ms]", captureMs);
diff --git a/3rdparty/bgfx/src/renderer_d3d9.h b/3rdparty/bgfx/src/renderer_d3d9.h
index 2aa9b64dcb9..46945e8014f 100644
--- a/3rdparty/bgfx/src/renderer_d3d9.h
+++ b/3rdparty/bgfx/src/renderer_d3d9.h
@@ -11,21 +11,6 @@
#if BX_PLATFORM_WINDOWS
# include <sal.h>
# include <d3d9.h>
-
-#elif BX_PLATFORM_XBOX360
-# include <xgraphics.h>
-# define D3DUSAGE_DYNAMIC 0 // not supported on X360
-# define D3DLOCK_DISCARD 0 // not supported on X360
-# define D3DERR_DEVICEHUNG D3DERR_DEVICELOST // not supported on X360
-# define D3DERR_DEVICEREMOVED D3DERR_DEVICELOST // not supported on X360
-# define D3DMULTISAMPLE_8_SAMPLES D3DMULTISAMPLE_4_SAMPLES
-# define D3DMULTISAMPLE_16_SAMPLES D3DMULTISAMPLE_4_SAMPLES
-
-# define D3DFMT_DF24 D3DFMT_D24FS8
-
-# define _PIX_SETMARKER(_col, _name) BX_NOOP()
-# define _PIX_BEGINEVENT(_col, _name) BX_NOOP()
-# define _PIX_ENDEVENT() BX_NOOP
#endif // BX_PLATFORM_
#ifndef D3DSTREAMSOURCE_INDEXEDDATA
@@ -38,6 +23,7 @@
#include "renderer.h"
#include "renderer_d3d.h"
+#include "nvapi.h"
namespace bgfx { namespace d3d9
{
@@ -128,15 +114,21 @@ namespace bgfx { namespace d3d9
{
IndexBufferD3D9()
: m_ptr(NULL)
+ , m_dynamic(NULL)
, m_size(0)
, m_flags(BGFX_BUFFER_NONE)
- , m_dynamic(false)
{
}
void create(uint32_t _size, void* _data, uint16_t _flags);
void update(uint32_t _offset, uint32_t _size, void* _data, bool _discard = false)
{
+ if (NULL != m_dynamic
+ && _data != m_dynamic)
+ {
+ bx::memCopy(&m_dynamic[_offset], _data, _size);
+ }
+
void* buffer;
DX_CHECK(m_ptr->Lock(_offset
, _size
@@ -154,7 +146,12 @@ namespace bgfx { namespace d3d9
if (NULL != m_ptr)
{
DX_RELEASE(m_ptr, 0);
- m_dynamic = false;
+
+ if (NULL != m_dynamic)
+ {
+ BX_FREE(g_allocator, m_dynamic);
+ m_dynamic = NULL;
+ }
}
}
@@ -162,22 +159,29 @@ namespace bgfx { namespace d3d9
void postReset();
IDirect3DIndexBuffer9* m_ptr;
+ uint8_t* m_dynamic;
uint32_t m_size;
uint16_t m_flags;
- bool m_dynamic;
};
struct VertexBufferD3D9
{
VertexBufferD3D9()
: m_ptr(NULL)
- , m_dynamic(false)
+ , m_dynamic(NULL)
+ , m_size(0)
{
}
void create(uint32_t _size, void* _data, VertexDeclHandle _declHandle);
void update(uint32_t _offset, uint32_t _size, void* _data, bool _discard = false)
{
+ if (NULL != m_dynamic
+ && _data != m_dynamic)
+ {
+ bx::memCopy(&m_dynamic[_offset], _data, _size);
+ }
+
void* buffer;
DX_CHECK(m_ptr->Lock(_offset
, _size
@@ -195,7 +199,12 @@ namespace bgfx { namespace d3d9
if (NULL != m_ptr)
{
DX_RELEASE(m_ptr, 0);
- m_dynamic = false;
+
+ if (NULL != m_dynamic)
+ {
+ BX_FREE(g_allocator, m_dynamic);
+ m_dynamic = NULL;
+ }
}
}
@@ -203,27 +212,9 @@ namespace bgfx { namespace d3d9
void postReset();
IDirect3DVertexBuffer9* m_ptr;
+ uint8_t* m_dynamic;
uint32_t m_size;
VertexDeclHandle m_decl;
- bool m_dynamic;
- };
-
- struct VertexDeclD3D9
- {
- VertexDeclD3D9()
- : m_ptr(NULL)
- {
- }
-
- void create(const VertexDecl& _decl);
-
- void destroy()
- {
- DX_RELEASE(m_ptr, 0);
- }
-
- IDirect3DVertexDeclaration9* m_ptr;
- VertexDecl m_decl;
};
struct ShaderD3D9
@@ -429,30 +420,45 @@ namespace bgfx { namespace d3d9
struct TimerQueryD3D9
{
TimerQueryD3D9()
- : m_control(BX_COUNTOF(m_frame) )
+ : m_control(BX_COUNTOF(m_query) )
{
}
void postReset();
void preReset();
- void begin();
- void end();
- bool get();
+ uint32_t begin(uint32_t _resultIdx);
+ void end(uint32_t _idx);
+ bool update();
- struct Frame
+ struct Query
{
IDirect3DQuery9* m_disjoint;
IDirect3DQuery9* m_begin;
IDirect3DQuery9* m_end;
IDirect3DQuery9* m_freq;
+ uint32_t m_resultIdx;
+ bool m_ready;
+ };
+
+ struct Result
+ {
+ void reset()
+ {
+ m_begin = 0;
+ m_end = 0;
+ m_frequency = 1;
+ m_pending = 0;
+ }
+
+ uint64_t m_begin;
+ uint64_t m_end;
+ uint64_t m_frequency;
+ uint32_t m_pending;
};
- uint64_t m_begin;
- uint64_t m_end;
- uint64_t m_elapsed;
- uint64_t m_frequency;
+ Result m_result[BGFX_CONFIG_MAX_VIEWS+1];
- Frame m_frame[4];
+ Query m_query[BGFX_CONFIG_MAX_VIEWS*4];
bx::RingBufferControl m_control;
};
diff --git a/3rdparty/bgfx/src/renderer_gl.cpp b/3rdparty/bgfx/src/renderer_gl.cpp
index 8f4903a2cb1..9d7e0d3d701 100644
--- a/3rdparty/bgfx/src/renderer_gl.cpp
+++ b/3rdparty/bgfx/src/renderer_gl.cpp
@@ -11,20 +11,6 @@
# include <bx/uint32_t.h>
# include "hmd_ovr.h"
-#if BGFX_CONFIG_PROFILER_REMOTERY
-# define BGFX_GPU_PROFILER_BIND() rmt_BindOpenGL()
-# define BGFX_GPU_PROFILER_UNBIND() rmt_UnbindOpenGL()
-# define BGFX_GPU_PROFILER_BEGIN(_group, _name, _color) rmt_BeginOpenGLSample(_group##_##_name)
-# define BGFX_GPU_PROFILER_BEGIN_DYNAMIC(_namestr) rmt_BeginOpenGLSampleDynamic(_namestr)
-# define BGFX_GPU_PROFILER_END() rmt_EndOpenGLSample()
-#else
-# define BGFX_GPU_PROFILER_BIND() BX_NOOP()
-# define BGFX_GPU_PROFILER_UNBIND() BX_NOOP()
-# define BGFX_GPU_PROFILER_BEGIN(_group, _name, _color) BX_NOOP()
-# define BGFX_GPU_PROFILER_BEGIN_DYNAMIC(_namestr) BX_NOOP()
-# define BGFX_GPU_PROFILER_END() BX_NOOP()
-#endif // BGFX_CONFIG_PROFILER_REMOTERY
-
namespace bgfx { namespace gl
{
static char s_viewName[BGFX_CONFIG_MAX_VIEWS][BGFX_CONFIG_MAX_VIEW_NAME];
@@ -63,6 +49,8 @@ namespace bgfx { namespace gl
"a_bitangent",
"a_color0",
"a_color1",
+ "a_color2",
+ "a_color3",
"a_indices",
"a_weight",
"a_texcoord0",
@@ -269,7 +257,7 @@ namespace bgfx { namespace gl
{ GL_RGBA4, GL_ZERO, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV, false }, // RGBA4
{ GL_RGB5_A1, GL_ZERO, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV, false }, // RGB5A1
{ GL_RGB10_A2, GL_ZERO, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, false }, // RGB10A2
- { GL_R11F_G11F_B10F, GL_ZERO, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, false }, // R11G11B10F
+ { GL_R11F_G11F_B10F, GL_ZERO, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, false }, // RG11B10F
{ GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO, false }, // UnknownDepth
{ GL_DEPTH_COMPONENT16, GL_ZERO, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, false }, // D16
{ GL_DEPTH_COMPONENT24, GL_ZERO, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false }, // D24
@@ -352,7 +340,7 @@ namespace bgfx { namespace gl
GL_RGBA4, // RGBA4
GL_RGB5_A1, // RGB5A1
GL_RGB10_A2, // RGB10A2
- GL_R11F_G11F_B10F, // R11G11B10F
+ GL_R11F_G11F_B10F, // RG11B10F
GL_ZERO, // UnknownDepth
GL_DEPTH_COMPONENT16, // D16
GL_DEPTH_COMPONENT24, // D24
@@ -433,7 +421,7 @@ namespace bgfx { namespace gl
GL_RGBA4, // RGBA4
GL_RGB5_A1, // RGB5A1
GL_RGB10_A2, // RGB10A2
- GL_R11F_G11F_B10F, // R11G11B10F
+ GL_R11F_G11F_B10F, // RG11B10F
GL_ZERO, // UnknownDepth
GL_ZERO, // D16
GL_ZERO, // D24
@@ -896,15 +884,6 @@ namespace bgfx { namespace gl
NULL
};
- static const char* s_OES_texture_3D[] =
- {
- "texture3D",
- "texture3DProj",
- "texture3DLod",
- "texture3DProjLod",
- NULL
- };
-
static const char* s_uisamplers[] =
{
"isampler2D",
@@ -918,11 +897,23 @@ namespace bgfx { namespace gl
static const char* s_texelFetch[] =
{
+ "texture",
+ "textureLod",
+ "textureGrad",
+ "textureProj",
+ "textureProjLod",
"texelFetch",
"texelFetchOffset",
NULL
};
+ static const char* s_texture3D[] =
+ {
+ "sampler3D",
+ "sampler3DArray",
+ NULL
+ };
+
static const char* s_textureArray[] =
{
"sampler2DArray",
@@ -940,6 +931,13 @@ namespace bgfx { namespace gl
NULL
};
+ static const char* s_EXT_gpu_shader4[] =
+ {
+ "gl_VertexID",
+ "gl_InstanceID",
+ NULL
+ };
+
static const char* s_ARB_gpu_shader5[] =
{
"bitfieldReverse",
@@ -986,7 +984,7 @@ namespace bgfx { namespace gl
//
// If <length> is 0 then <marker> is assumed to be null-terminated.
- uint32_t size = (0 == _length ? (uint32_t)bx::strnlen(_marker) : _length) + 1;
+ uint32_t size = (0 == _length ? (uint32_t)bx::strLen(_marker) : _length) + 1;
size *= sizeof(wchar_t);
wchar_t* name = (wchar_t*)alloca(size);
mbstowcs(name, _marker, size-2);
@@ -1045,7 +1043,7 @@ namespace bgfx { namespace gl
glGetError(); // ignore error if glGetString returns NULL.
if (NULL != str)
{
- return bx::hashMurmur2A(str, (uint32_t)bx::strnlen(str) );
+ return bx::hash<bx::HashMurmur2A>(str, (uint32_t)bx::strLen(str) );
}
return 0;
@@ -1057,21 +1055,21 @@ namespace bgfx { namespace gl
{
char name[1024];
const char* pos = _extensions;
- const char* end = _extensions + bx::strnlen(_extensions);
+ const char* end = _extensions + bx::strLen(_extensions);
while (pos < end)
{
uint32_t len;
- const char* space = bx::strnchr(pos, ' ');
+ const char* space = bx::strFind(pos, ' ');
if (NULL != space)
{
len = bx::uint32_min(sizeof(name), (uint32_t)(space - pos) );
}
else
{
- len = bx::uint32_min(sizeof(name), (uint32_t)bx::strnlen(pos) );
+ len = bx::uint32_min(sizeof(name), (uint32_t)bx::strLen(pos) );
}
- bx::strlncpy(name, BX_COUNTOF(name), pos, len);
+ bx::strCopy(name, BX_COUNTOF(name), pos, len);
name[len] = '\0';
BX_TRACE("\t%s", name);
@@ -1145,7 +1143,252 @@ namespace bgfx { namespace gl
for (GLenum err = glGetError(); err != 0; err = glGetError() );
}
- GLenum initTestTexture(TextureFormat::Enum _format, bool _srgb, bool _mipmaps)
+ static void texSubImage(
+ GLenum _target
+ , GLint _level
+ , GLint _xoffset
+ , GLint _yoffset
+ , GLint _zoffset
+ , GLsizei _width
+ , GLsizei _height
+ , GLsizei _depth
+ , GLenum _format
+ , GLenum _type
+ , const GLvoid* _data
+ )
+ {
+ if (NULL == _data)
+ {
+ return;
+ }
+
+ if (_target == GL_TEXTURE_3D
+ || _target == GL_TEXTURE_2D_ARRAY
+ || _target == GL_TEXTURE_CUBE_MAP_ARRAY)
+ {
+ glTexSubImage3D(
+ _target
+ , _level
+ , _xoffset
+ , _yoffset
+ , _zoffset
+ , _width
+ , _height
+ , _depth
+ , _format
+ , _type
+ , _data
+ );
+ }
+ else if (_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY)
+ {
+ }
+ else
+ {
+ BX_UNUSED(_zoffset, _depth);
+ glTexSubImage2D(
+ _target
+ , _level
+ , _xoffset
+ , _yoffset
+ , _width
+ , _height
+ , _format
+ , _type
+ , _data
+ );
+ }
+ }
+
+ static void texImage(
+ GLenum _target
+ , uint32_t _msaaQuality
+ , GLint _level
+ , GLint _internalFormat
+ , GLsizei _width
+ , GLsizei _height
+ , GLsizei _depth
+ , GLint _border
+ , GLenum _format
+ , GLenum _type
+ , const GLvoid* _data
+ )
+ {
+ if (_target == GL_TEXTURE_3D)
+ {
+ glTexImage3D(
+ _target
+ , _level
+ , _internalFormat
+ , _width
+ , _height
+ , _depth
+ , _border
+ , _format
+ , _type
+ , _data
+ );
+ }
+ else if (_target == GL_TEXTURE_2D_ARRAY
+ || _target == GL_TEXTURE_CUBE_MAP_ARRAY)
+ {
+ texSubImage(
+ _target
+ , _level
+ , 0
+ , 0
+ , _depth
+ , _width
+ , _height
+ , 1
+ , _format
+ , _type
+ , _data
+ );
+ }
+ else if (_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY)
+ {
+ }
+ else if (_target == GL_TEXTURE_2D_MULTISAMPLE)
+ {
+ glTexImage2DMultisample(
+ _target
+ , _msaaQuality
+ , _internalFormat
+ , _width
+ , _height
+ , false
+ );
+ }
+ else
+ {
+ glTexImage2D(
+ _target
+ , _level
+ , _internalFormat
+ , _width
+ , _height
+ , _border
+ , _format
+ , _type
+ , _data
+ );
+ }
+
+ BX_UNUSED(_msaaQuality, _depth, _border, _data);
+ }
+
+ static void compressedTexSubImage(
+ GLenum _target
+ , GLint _level
+ , GLint _xoffset
+ , GLint _yoffset
+ , GLint _zoffset
+ , GLsizei _width
+ , GLsizei _height
+ , GLsizei _depth
+ , GLenum _format
+ , GLsizei _imageSize
+ , const GLvoid* _data
+ )
+ {
+ if (_target == GL_TEXTURE_3D
+ || _target == GL_TEXTURE_2D_ARRAY)
+ {
+ glCompressedTexSubImage3D(
+ _target
+ , _level
+ , _xoffset
+ , _yoffset
+ , _zoffset
+ , _width
+ , _height
+ , _depth
+ , _format
+ , _imageSize
+ , _data
+ );
+ }
+ else
+ {
+ BX_UNUSED(_zoffset, _depth);
+ glCompressedTexSubImage2D(
+ _target
+ , _level
+ , _xoffset
+ , _yoffset
+ , _width
+ , _height
+ , _format
+ , _imageSize
+ , _data
+ );
+ }
+ }
+
+ static void compressedTexImage(
+ GLenum _target
+ , GLint _level
+ , GLenum _internalformat
+ , GLsizei _width
+ , GLsizei _height
+ , GLsizei _depth
+ , GLint _border
+ , GLsizei _imageSize
+ , const GLvoid* _data
+ )
+ {
+ if (_target == GL_TEXTURE_3D)
+ {
+ glCompressedTexImage3D(
+ _target
+ , _level
+ , _internalformat
+ , _width
+ , _height
+ , _depth
+ , _border
+ , _imageSize
+ , _data
+ );
+ }
+ else if (_target == GL_TEXTURE_2D_ARRAY
+ || _target == GL_TEXTURE_CUBE_MAP_ARRAY)
+ {
+ compressedTexSubImage(
+ _target
+ , _level
+ , 0
+ , 0
+ , _depth
+ , _width
+ , _height
+ , 1
+ , _internalformat
+ , _imageSize
+ , _data
+ );
+ }
+ else if (_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY)
+ {
+ }
+ else
+ {
+ BX_UNUSED(_depth);
+ glCompressedTexImage2D(
+ _target
+ , _level
+ , _internalformat
+ , _width
+ , _height
+ , _border
+ , _imageSize
+ , _data
+ );
+ }
+ }
+
+ GLenum initTestTexture(TextureFormat::Enum _format, bool _srgb, bool _mipmaps, bool _array, GLsizei _dim)
{
const TextureFormatInfo& tfi = s_textureFormat[_format];
GLenum internalFmt = _srgb
@@ -1153,13 +1396,15 @@ namespace bgfx { namespace gl
: tfi.m_internalFmt
;
- GLsizei size = (16*16*getBitsPerPixel(_format) )/8;
+ GLsizei bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(_format) );
+ GLsizei size = (_dim*_dim*bpp)/8;
void* data = NULL;
- if (isDepth(_format) )
+ if (bimg::isDepth(bimg::TextureFormat::Enum(_format) ) )
{
_srgb = false;
_mipmaps = false;
+ _array = false;
}
else
{
@@ -1169,35 +1414,29 @@ namespace bgfx { namespace gl
flushGlError();
GLenum err = 0;
- if (isCompressed(_format) )
+ const GLenum target = _array
+ ? GL_TEXTURE_2D_ARRAY
+ : GL_TEXTURE_2D
+ ;
+
+ if (bimg::isCompressed(bimg::TextureFormat::Enum(_format) ) )
{
- glCompressedTexImage2D(GL_TEXTURE_2D, 0, internalFmt, 16, 16, 0, size, data);
- err |= glGetError();
- if (_mipmaps)
+ for (uint32_t ii = 0, dim = _dim; ii < (_mipmaps ? 5u : 1u) && 0 == err; ++ii, dim >>= 1)
{
- glCompressedTexImage2D(GL_TEXTURE_2D, 1, internalFmt, 8, 8, 0, size, data);
- err |= glGetError();
- glCompressedTexImage2D(GL_TEXTURE_2D, 2, internalFmt, 4, 4, 0, size, data);
- err |= glGetError();
- glCompressedTexImage2D(GL_TEXTURE_2D, 3, internalFmt, 2, 2, 0, size, data);
- err |= glGetError();
- glCompressedTexImage2D(GL_TEXTURE_2D, 4, internalFmt, 1, 1, 0, size, data);
+ dim = bx::uint32_max(1, dim);
+ uint32_t block = bx::uint32_max(4, dim);
+ size = (block*block*bpp)/8;
+ compressedTexImage(target, ii, internalFmt, dim, dim, 0, 0, size, data);
err |= glGetError();
}
}
else
{
- glTexImage2D(GL_TEXTURE_2D, 0, internalFmt, 16, 16, 0, tfi.m_fmt, tfi.m_type, data);
- err |= glGetError();
- if (_mipmaps)
+ for (uint32_t ii = 0, dim = _dim; ii < (_mipmaps ? 5u : 1u) && 0 == err; ++ii, dim >>= 1)
{
- glTexImage2D(GL_TEXTURE_2D, 1, internalFmt, 8, 8, 0, tfi.m_fmt, tfi.m_type, data);
- err |= glGetError();
- glTexImage2D(GL_TEXTURE_2D, 2, internalFmt, 4, 4, 0, tfi.m_fmt, tfi.m_type, data);
- err |= glGetError();
- glTexImage2D(GL_TEXTURE_2D, 3, internalFmt, 2, 2, 0, tfi.m_fmt, tfi.m_type, data);
- err |= glGetError();
- glTexImage2D(GL_TEXTURE_2D, 4, internalFmt, 1, 1, 0, tfi.m_fmt, tfi.m_type, data);
+ dim = bx::uint32_max(1, dim);
+ size = (dim*dim*bpp)/8;
+ texImage(target, 0, ii, internalFmt, dim, dim, 0, 0, tfi.m_fmt, tfi.m_type, data);
err |= glGetError();
}
}
@@ -1205,7 +1444,7 @@ namespace bgfx { namespace gl
return err;
}
- static bool isTextureFormatValid(TextureFormat::Enum _format, bool _srgb = false, bool _mipAutogen = false)
+ static bool isTextureFormatValid(TextureFormat::Enum _format, bool _srgb = false, bool _mipAutogen = false, bool _array = false, GLsizei _dim = 16)
{
const TextureFormatInfo& tfi = s_textureFormat[_format];
GLenum internalFmt = _srgb
@@ -1217,18 +1456,46 @@ namespace bgfx { namespace gl
return false;
}
+ const GLenum target = _array
+ ? GL_TEXTURE_2D_ARRAY
+ : GL_TEXTURE_2D
+ ;
+
GLuint id;
GL_CHECK(glGenTextures(1, &id) );
- GL_CHECK(glBindTexture(GL_TEXTURE_2D, id) );
+ GL_CHECK(glBindTexture(target, id) );
- GLenum err = initTestTexture(_format, _srgb, _mipAutogen);
- BX_WARN(0 == err, "TextureFormat::%s is not supported (%x: %s).", getName(_format), err, glEnumName(err) );
+ GLenum err = 0;
+ if (_array)
+ {
+ glTexStorage3D(target
+ , 1 + GLsizei(bx::flog2(float(_dim) ) )
+ , internalFmt
+ , _dim
+ , _dim
+ , _dim
+ );
+ err = glGetError();
+ }
- if (0 == err
- && _mipAutogen)
+ if (0 == err)
{
- glGenerateMipmap(GL_TEXTURE_2D);
- err = glGetError();
+ err = initTestTexture(_format, _srgb, _mipAutogen, _array, _dim);
+ BX_WARN(0 == err, "TextureFormat::%s %s%s%sis not supported (%x: %s)."
+ , getName(_format)
+ , _srgb ? "+sRGB " : ""
+ , _mipAutogen ? "+mipAutoGen " : ""
+ , _array ? "+array " : ""
+ , err
+ , glEnumName(err)
+ );
+
+ if (0 == err
+ && _mipAutogen)
+ {
+ glGenerateMipmap(target);
+ err = glGetError();
+ }
}
GL_CHECK(glDeleteTextures(1, &id) );
@@ -1236,7 +1503,7 @@ namespace bgfx { namespace gl
return 0 == err;
}
- static bool isImageFormatValid(TextureFormat::Enum _format)
+ static bool isImageFormatValid(TextureFormat::Enum _format, GLsizei _dim = 16)
{
if (GL_ZERO == s_imageFormat[_format])
{
@@ -1250,7 +1517,7 @@ namespace bgfx { namespace gl
flushGlError();
GLenum err = 0;
- glTexStorage2D(GL_TEXTURE_2D, 1, s_imageFormat[_format], 16, 16);
+ glTexStorage2D(GL_TEXTURE_2D, 1, s_imageFormat[_format], _dim, _dim);
err |= glGetError();
if (0 == err)
{
@@ -1270,7 +1537,12 @@ namespace bgfx { namespace gl
return 0 == err;
}
- static bool isFramebufferFormatValid(TextureFormat::Enum _format, bool _srgb = false)
+ static bool isFramebufferFormatValid(
+ TextureFormat::Enum _format
+ , bool _srgb = false
+ , bool _writeOnly = false
+ , GLsizei _dim = 16
+ )
{
const TextureFormatInfo& tfi = s_textureFormat[_format];
GLenum internalFmt = _srgb
@@ -1283,6 +1555,24 @@ namespace bgfx { namespace gl
return false;
}
+ if (_writeOnly)
+ {
+ GLuint rbo;
+ glGenRenderbuffers(1, &rbo);
+ glBindRenderbuffer(GL_RENDERBUFFER, rbo);
+
+ glRenderbufferStorage(GL_RENDERBUFFER
+ , s_rboFormat[_format]
+ , _dim
+ , _dim
+ );
+ glBindRenderbuffer(GL_RENDERBUFFER, 0);
+ glDeleteRenderbuffers(1, &rbo);
+
+ GLenum err = glGetError();
+ return 0 == err;
+ }
+
GLuint fbo;
GL_CHECK(glGenFramebuffers(1, &fbo) );
GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, fbo) );
@@ -1291,12 +1581,12 @@ namespace bgfx { namespace gl
GL_CHECK(glGenTextures(1, &id) );
GL_CHECK(glBindTexture(GL_TEXTURE_2D, id) );
- GLenum err = initTestTexture(_format, _srgb, false);
+ GLenum err = initTestTexture(_format, _srgb, false, false, _dim);
GLenum attachment;
- if (isDepth(_format) )
+ if (bimg::isDepth(bimg::TextureFormat::Enum(_format) ) )
{
- const ImageBlockInfo& info = getBlockInfo(_format);
+ const bimg::ImageBlockInfo& info = bimg::getBlockInfo(bimg::TextureFormat::Enum(_format) );
if (0 == info.depthBits)
{
attachment = GL_STENCIL_ATTACHMENT;
@@ -1355,12 +1645,12 @@ namespace bgfx { namespace gl
&& extension.m_initialize)
{
const char* ext = _name;
- if (0 == bx::strncmp(ext, "GL_", 3) ) // skip GL_
+ if (0 == bx::strCmp(ext, "GL_", 3) ) // skip GL_
{
ext += 3;
}
- if (0 == bx::strncmp(ext, extension.m_name) )
+ if (0 == bx::strCmp(ext, extension.m_name) )
{
extension.m_supported = true;
supported = true;
@@ -1379,11 +1669,11 @@ namespace bgfx { namespace gl
public:
VRImplOVRGL();
- virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) BX_OVERRIDE;
- virtual void destroySwapChain() BX_OVERRIDE;
- virtual void destroyMirror() BX_OVERRIDE;
- virtual void makeRenderTargetActive(const VRDesc& _desc) BX_OVERRIDE;
- virtual bool submitSwapChain(const VRDesc& _desc) BX_OVERRIDE;
+ virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) override;
+ virtual void destroySwapChain() override;
+ virtual void destroyMirror() override;
+ virtual void makeRenderTargetActive(const VRDesc& _desc) override;
+ virtual bool submitSwapChain(const VRDesc& _desc) override;
private:
GLuint m_eyeTarget[4];
@@ -1412,6 +1702,16 @@ namespace bgfx { namespace gl
{ "Intel", BGFX_PCI_ID_INTEL },
};
+ struct Workaround
+ {
+ void reset()
+ {
+ m_detachShader = true;
+ }
+
+ bool m_detachShader;
+ };
+
struct RendererContextGL : public RendererContextI
{
RendererContextGL()
@@ -1450,11 +1750,21 @@ namespace bgfx { namespace gl
{
}
- void init()
+ bool init()
{
+ struct ErrorState
+ {
+ enum Enum
+ {
+ Default,
+ };
+ };
+
+ ErrorState::Enum errorState = ErrorState::Default;
+
m_renderdocdll = loadRenderDoc();
- m_fbh.idx = invalidHandle;
+ m_fbh.idx = kInvalidHandle;
bx::memSet(m_uniforms, 0, sizeof(m_uniforms) );
bx::memSet(&m_resolution, 0, sizeof(m_resolution) );
@@ -1475,13 +1785,15 @@ namespace bgfx { namespace gl
for (uint32_t ii = 0; ii < BX_COUNTOF(s_vendorIds); ++ii)
{
const VendorId& vendorId = s_vendorIds[ii];
- if (0 == bx::strncmp(vendorId.name, m_vendor, bx::strnlen(vendorId.name) ) )
+ if (0 == bx::strCmp(vendorId.name, m_vendor, bx::strLen(vendorId.name) ) )
{
g_caps.vendorId = vendorId.id;
break;
}
}
+ m_workaround.reset();
+
GLint numCmpFormats = 0;
GL_CHECK(glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &numCmpFormats) );
BX_TRACE("GL_NUM_COMPRESSED_TEXTURE_FORMATS %d", numCmpFormats);
@@ -1549,14 +1861,21 @@ namespace bgfx { namespace gl
;
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 31)
- && 0 == bx::strncmp(m_vendor, "Imagination Technologies")
- && NULL != bx::strnstr(m_version, "(SDK 3.5@3510720)") )
+ && 0 == bx::strCmp(m_vendor, "Imagination Technologies")
+ && NULL != bx::strFind(m_version, "(SDK 3.5@3510720)") )
{
// Skip initializing extensions that are broken in emulator.
s_extension[Extension::ARB_program_interface_query ].m_initialize =
s_extension[Extension::ARB_shader_storage_buffer_object].m_initialize = false;
}
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES)
+ && 0 == bx::strCmp(m_vendor, "Imagination Technologies")
+ && NULL != bx::strFind(m_version, "1.8@905891") )
+ {
+ m_workaround.m_detachShader = false;
+ }
+
if (BX_ENABLED(BGFX_CONFIG_RENDERER_USE_EXTENSIONS) )
{
const char* extensions = (const char*)glGetString(GL_EXTENSIONS);
@@ -1565,22 +1884,22 @@ namespace bgfx { namespace gl
{
char name[1024];
const char* pos = extensions;
- const char* end = extensions + bx::strnlen(extensions);
+ const char* end = extensions + bx::strLen(extensions);
uint32_t index = 0;
while (pos < end)
{
uint32_t len;
- const char* space = bx::strnchr(pos, ' ');
+ const char* space = bx::strFind(pos, ' ');
if (NULL != space)
{
len = bx::uint32_min(sizeof(name), (uint32_t)(space - pos) );
}
else
{
- len = bx::uint32_min(sizeof(name), (uint32_t)bx::strnlen(pos) );
+ len = bx::uint32_min(sizeof(name), (uint32_t)bx::strLen(pos) );
}
- bx::strlncpy(name, BX_COUNTOF(name), pos, len);
+ bx::strCopy(name, BX_COUNTOF(name), pos, len);
name[len] = '\0';
updateExtension(name);
@@ -1612,624 +1931,642 @@ namespace bgfx { namespace gl
}
}
- // Allow all texture filters.
- bx::memSet(s_textureFilter, true, BX_COUNTOF(s_textureFilter) );
-
- bool bc123Supported = 0
- || s_extension[Extension::EXT_texture_compression_s3tc ].m_supported
- || s_extension[Extension::MOZ_WEBGL_compressed_texture_s3tc ].m_supported
- || s_extension[Extension::WEBGL_compressed_texture_s3tc ].m_supported
- || s_extension[Extension::WEBKIT_WEBGL_compressed_texture_s3tc].m_supported
- ;
- s_textureFormat[TextureFormat::BC1].m_supported |= bc123Supported
- || s_extension[Extension::ANGLE_texture_compression_dxt1].m_supported
- || s_extension[Extension::EXT_texture_compression_dxt1 ].m_supported
- ;
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
+ && !s_extension[Extension::ARB_framebuffer_object].m_supported)
+ {
+ BX_TRACE("Init error: ARB_framebuffer_object not supported.");
+ goto error;
+ }
- if (!s_textureFormat[TextureFormat::BC1].m_supported
- && ( s_textureFormat[TextureFormat::BC2].m_supported || s_textureFormat[TextureFormat::BC3].m_supported) )
{
- // If RGBA_S3TC_DXT1 is not supported, maybe RGB_S3TC_DXT1 is?
- for (GLint ii = 0; ii < numCmpFormats; ++ii)
+ // Allow all texture filters.
+ bx::memSet(s_textureFilter, true, BX_COUNTOF(s_textureFilter) );
+
+ bool bc123Supported = 0
+ || s_extension[Extension::EXT_texture_compression_s3tc ].m_supported
+ || s_extension[Extension::MOZ_WEBGL_compressed_texture_s3tc ].m_supported
+ || s_extension[Extension::WEBGL_compressed_texture_s3tc ].m_supported
+ || s_extension[Extension::WEBKIT_WEBGL_compressed_texture_s3tc].m_supported
+ ;
+ s_textureFormat[TextureFormat::BC1].m_supported |= bc123Supported
+ || s_extension[Extension::ANGLE_texture_compression_dxt1].m_supported
+ || s_extension[Extension::EXT_texture_compression_dxt1 ].m_supported
+ ;
+
+ if (!s_textureFormat[TextureFormat::BC1].m_supported
+ && ( s_textureFormat[TextureFormat::BC2].m_supported || s_textureFormat[TextureFormat::BC3].m_supported) )
{
- if (GL_COMPRESSED_RGB_S3TC_DXT1_EXT == cmpFormat[ii])
+ // If RGBA_S3TC_DXT1 is not supported, maybe RGB_S3TC_DXT1 is?
+ for (GLint ii = 0; ii < numCmpFormats; ++ii)
{
- setTextureFormat(TextureFormat::BC1, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_COMPRESSED_RGB_S3TC_DXT1_EXT);
- s_textureFormat[TextureFormat::BC1].m_supported = true;
- break;
+ if (GL_COMPRESSED_RGB_S3TC_DXT1_EXT == cmpFormat[ii])
+ {
+ setTextureFormat(TextureFormat::BC1, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_COMPRESSED_RGB_S3TC_DXT1_EXT);
+ s_textureFormat[TextureFormat::BC1].m_supported = true;
+ break;
+ }
}
}
- }
-
- s_textureFormat[TextureFormat::BC2].m_supported |= bc123Supported
- || s_extension[Extension::ANGLE_texture_compression_dxt3 ].m_supported
- || s_extension[Extension::CHROMIUM_texture_compression_dxt3].m_supported
- ;
- s_textureFormat[TextureFormat::BC3].m_supported |= bc123Supported
- || s_extension[Extension::ANGLE_texture_compression_dxt5 ].m_supported
- || s_extension[Extension::CHROMIUM_texture_compression_dxt5].m_supported
- ;
+ s_textureFormat[TextureFormat::BC2].m_supported |= bc123Supported
+ || s_extension[Extension::ANGLE_texture_compression_dxt3 ].m_supported
+ || s_extension[Extension::CHROMIUM_texture_compression_dxt3].m_supported
+ ;
- if (s_extension[Extension::EXT_texture_compression_latc].m_supported)
- {
- setTextureFormat(TextureFormat::BC4, GL_COMPRESSED_LUMINANCE_LATC1_EXT, GL_COMPRESSED_LUMINANCE_LATC1_EXT);
- setTextureFormat(TextureFormat::BC5, GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT, GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT);
- }
+ s_textureFormat[TextureFormat::BC3].m_supported |= bc123Supported
+ || s_extension[Extension::ANGLE_texture_compression_dxt5 ].m_supported
+ || s_extension[Extension::CHROMIUM_texture_compression_dxt5].m_supported
+ ;
- if (s_extension[Extension::ARB_texture_compression_rgtc].m_supported
- || s_extension[Extension::EXT_texture_compression_rgtc].m_supported)
- {
- setTextureFormat(TextureFormat::BC4, GL_COMPRESSED_RED_RGTC1, GL_COMPRESSED_RED_RGTC1);
- setTextureFormat(TextureFormat::BC5, GL_COMPRESSED_RG_RGTC2, GL_COMPRESSED_RG_RGTC2);
- }
+ if (s_extension[Extension::EXT_texture_compression_latc].m_supported)
+ {
+ setTextureFormat(TextureFormat::BC4, GL_COMPRESSED_LUMINANCE_LATC1_EXT, GL_COMPRESSED_LUMINANCE_LATC1_EXT);
+ setTextureFormat(TextureFormat::BC5, GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT, GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT);
+ }
- bool etc1Supported = 0
- || s_extension[Extension::OES_compressed_ETC1_RGB8_texture].m_supported
- || s_extension[Extension::WEBGL_compressed_texture_etc1 ].m_supported
- ;
- s_textureFormat[TextureFormat::ETC1].m_supported |= etc1Supported;
+ if (s_extension[Extension::ARB_texture_compression_rgtc].m_supported
+ || s_extension[Extension::EXT_texture_compression_rgtc].m_supported)
+ {
+ setTextureFormat(TextureFormat::BC4, GL_COMPRESSED_RED_RGTC1, GL_COMPRESSED_RED_RGTC1);
+ setTextureFormat(TextureFormat::BC5, GL_COMPRESSED_RG_RGTC2, GL_COMPRESSED_RG_RGTC2);
+ }
- bool etc2Supported = !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::ARB_ES3_compatibility].m_supported
- ;
- s_textureFormat[TextureFormat::ETC2 ].m_supported |= etc2Supported;
- s_textureFormat[TextureFormat::ETC2A ].m_supported |= etc2Supported;
- s_textureFormat[TextureFormat::ETC2A1].m_supported |= etc2Supported;
+ bool etc1Supported = 0
+ || s_extension[Extension::OES_compressed_ETC1_RGB8_texture].m_supported
+ || s_extension[Extension::WEBGL_compressed_texture_etc1 ].m_supported
+ ;
+ s_textureFormat[TextureFormat::ETC1].m_supported |= etc1Supported;
- if (!s_textureFormat[TextureFormat::ETC1].m_supported
- && s_textureFormat[TextureFormat::ETC2].m_supported)
- {
- // When ETC2 is supported override ETC1 texture format settings.
- s_textureFormat[TextureFormat::ETC1].m_internalFmt = GL_COMPRESSED_RGB8_ETC2;
- s_textureFormat[TextureFormat::ETC1].m_fmt = GL_COMPRESSED_RGB8_ETC2;
- s_textureFormat[TextureFormat::ETC1].m_supported = true;
- }
+ bool etc2Supported = !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::ARB_ES3_compatibility].m_supported
+ ;
+ s_textureFormat[TextureFormat::ETC2 ].m_supported |= etc2Supported;
+ s_textureFormat[TextureFormat::ETC2A ].m_supported |= etc2Supported;
+ s_textureFormat[TextureFormat::ETC2A1].m_supported |= etc2Supported;
- bool ptc1Supported = 0
- || s_extension[Extension::IMG_texture_compression_pvrtc ].m_supported
- || s_extension[Extension::WEBGL_compressed_texture_pvrtc].m_supported
- ;
- s_textureFormat[TextureFormat::PTC12 ].m_supported |= ptc1Supported;
- s_textureFormat[TextureFormat::PTC14 ].m_supported |= ptc1Supported;
- s_textureFormat[TextureFormat::PTC12A].m_supported |= ptc1Supported;
- s_textureFormat[TextureFormat::PTC14A].m_supported |= ptc1Supported;
+ if (!s_textureFormat[TextureFormat::ETC1].m_supported
+ && s_textureFormat[TextureFormat::ETC2].m_supported)
+ {
+ // When ETC2 is supported override ETC1 texture format settings.
+ s_textureFormat[TextureFormat::ETC1].m_internalFmt = GL_COMPRESSED_RGB8_ETC2;
+ s_textureFormat[TextureFormat::ETC1].m_fmt = GL_COMPRESSED_RGB8_ETC2;
+ s_textureFormat[TextureFormat::ETC1].m_supported = true;
+ }
- bool ptc2Supported = s_extension[Extension::IMG_texture_compression_pvrtc2].m_supported;
- s_textureFormat[TextureFormat::PTC22].m_supported |= ptc2Supported;
- s_textureFormat[TextureFormat::PTC24].m_supported |= ptc2Supported;
+ bool ptc1Supported = 0
+ || s_extension[Extension::IMG_texture_compression_pvrtc ].m_supported
+ || s_extension[Extension::WEBGL_compressed_texture_pvrtc].m_supported
+ ;
+ s_textureFormat[TextureFormat::PTC12 ].m_supported |= ptc1Supported;
+ s_textureFormat[TextureFormat::PTC14 ].m_supported |= ptc1Supported;
+ s_textureFormat[TextureFormat::PTC12A].m_supported |= ptc1Supported;
+ s_textureFormat[TextureFormat::PTC14A].m_supported |= ptc1Supported;
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES) )
- {
- setTextureFormat(TextureFormat::D32, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
+ bool ptc2Supported = s_extension[Extension::IMG_texture_compression_pvrtc2].m_supported;
+ s_textureFormat[TextureFormat::PTC22].m_supported |= ptc2Supported;
+ s_textureFormat[TextureFormat::PTC24].m_supported |= ptc2Supported;
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES < 30) )
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES) )
{
- setTextureFormat(TextureFormat::RGBA16F, GL_RGBA, GL_RGBA, GL_HALF_FLOAT);
- setTextureFormat(TextureFormat::RGBA32F, GL_RGBA, GL_RGBA, GL_FLOAT);
- // internalFormat and format must match:
- // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml
- setTextureFormat(TextureFormat::RGBA8, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE);
- setTextureFormat(TextureFormat::R5G6B5, GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV);
- setTextureFormat(TextureFormat::RGBA4, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV);
- setTextureFormat(TextureFormat::RGB5A1, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV);
+ setTextureFormat(TextureFormat::D32, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
- if (s_extension[Extension::OES_texture_half_float].m_supported
- || s_extension[Extension::OES_texture_float ].m_supported)
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES < 30) )
{
- // https://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt
- // When half/float is available via extensions texture will be marked as
- // incomplete if it uses anything other than nearest filter.
- const bool linear16F = s_extension[Extension::OES_texture_half_float_linear].m_supported;
- const bool linear32F = s_extension[Extension::OES_texture_float_linear ].m_supported;
-
- s_textureFilter[TextureFormat::R16F] = linear16F;
- s_textureFilter[TextureFormat::RG16F] = linear16F;
- s_textureFilter[TextureFormat::RGBA16F] = linear16F;
- s_textureFilter[TextureFormat::R32F] = linear32F;
- s_textureFilter[TextureFormat::RG32F] = linear32F;
- s_textureFilter[TextureFormat::RGBA32F] = linear32F;
- }
+ setTextureFormat(TextureFormat::RGBA16F, GL_RGBA, GL_RGBA, GL_HALF_FLOAT);
+ setTextureFormat(TextureFormat::RGBA32F, GL_RGBA, GL_RGBA, GL_FLOAT);
+ // internalFormat and format must match:
+ // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml
+ setTextureFormat(TextureFormat::RGBA8, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE);
+ setTextureFormat(TextureFormat::R5G6B5, GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV);
+ setTextureFormat(TextureFormat::RGBA4, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV);
+ setTextureFormat(TextureFormat::RGB5A1, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV);
+
+ if (s_extension[Extension::OES_texture_half_float].m_supported
+ || s_extension[Extension::OES_texture_float ].m_supported)
+ {
+ // https://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt
+ // When half/float is available via extensions texture will be marked as
+ // incomplete if it uses anything other than nearest filter.
+ const bool linear16F = s_extension[Extension::OES_texture_half_float_linear].m_supported;
+ const bool linear32F = s_extension[Extension::OES_texture_float_linear ].m_supported;
+
+ s_textureFilter[TextureFormat::R16F] = linear16F;
+ s_textureFilter[TextureFormat::RG16F] = linear16F;
+ s_textureFilter[TextureFormat::RGBA16F] = linear16F;
+ s_textureFilter[TextureFormat::R32F] = linear32F;
+ s_textureFilter[TextureFormat::RG32F] = linear32F;
+ s_textureFilter[TextureFormat::RGBA32F] = linear32F;
+ }
- if (BX_ENABLED(BX_PLATFORM_IOS) || BX_ENABLED(BX_PLATFORM_EMSCRIPTEN))
- {
- setTextureFormat(TextureFormat::D16, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT);
- setTextureFormat(TextureFormat::D24S8, GL_DEPTH_STENCIL, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8);
+ if (BX_ENABLED(BX_PLATFORM_IOS) || BX_ENABLED(BX_PLATFORM_EMSCRIPTEN))
+ {
+ setTextureFormat(TextureFormat::D16, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT);
+ setTextureFormat(TextureFormat::D24S8, GL_DEPTH_STENCIL, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8);
+ }
}
}
- }
-
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
- || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) )
- {
- setTextureFormat(TextureFormat::R8I, GL_R8I, GL_RED_INTEGER, GL_BYTE);
- setTextureFormat(TextureFormat::R8U, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE);
- setTextureFormat(TextureFormat::R16I, GL_R16I, GL_RED_INTEGER, GL_SHORT);
- setTextureFormat(TextureFormat::R16U, GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT);
-// setTextureFormat(TextureFormat::RG16, GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT);
-// setTextureFormat(TextureFormat::RGBA16, GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT);
- setTextureFormat(TextureFormat::R32U, GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT);
- setTextureFormat(TextureFormat::RG32U, GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT);
- setTextureFormat(TextureFormat::RGBA32U, GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT);
- }
- if (s_extension[Extension::EXT_texture_format_BGRA8888 ].m_supported
- || s_extension[Extension::EXT_bgra ].m_supported
- || s_extension[Extension::IMG_texture_format_BGRA8888 ].m_supported
- || s_extension[Extension::APPLE_texture_format_BGRA8888].m_supported)
- {
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) )
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
+ || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) )
{
- m_readPixelsFmt = GL_BGRA;
+ setTextureFormat(TextureFormat::R8I, GL_R8I, GL_RED_INTEGER, GL_BYTE);
+ setTextureFormat(TextureFormat::R8U, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE);
+ setTextureFormat(TextureFormat::R16I, GL_R16I, GL_RED_INTEGER, GL_SHORT);
+ setTextureFormat(TextureFormat::R16U, GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT);
+ // setTextureFormat(TextureFormat::RG16, GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT);
+ // setTextureFormat(TextureFormat::RGBA16, GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT);
+ setTextureFormat(TextureFormat::R32U, GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT);
+ setTextureFormat(TextureFormat::RG32U, GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT);
+ setTextureFormat(TextureFormat::RGBA32U, GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT);
}
- // Mixing GLES and GL extensions here. OpenGL EXT_bgra and
- // APPLE_texture_format_BGRA8888 wants
- // format to be BGRA but internal format to stay RGBA, but
- // EXT_texture_format_BGRA8888 wants both format and internal
- // format to be BGRA.
- //
- // Reference:
- // https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_format_BGRA8888.txt
- // https://www.opengl.org/registry/specs/EXT/bgra.txt
- // https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_texture_format_BGRA8888.txt
- if (!s_extension[Extension::EXT_bgra ].m_supported
- && !s_extension[Extension::APPLE_texture_format_BGRA8888].m_supported)
+ if (s_extension[Extension::EXT_texture_format_BGRA8888 ].m_supported
+ || s_extension[Extension::EXT_bgra ].m_supported
+ || s_extension[Extension::IMG_texture_format_BGRA8888 ].m_supported
+ || s_extension[Extension::APPLE_texture_format_BGRA8888].m_supported)
{
- s_textureFormat[TextureFormat::BGRA8].m_internalFmt = GL_BGRA;
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) )
+ {
+ m_readPixelsFmt = GL_BGRA;
+ }
+
+ // Mixing GLES and GL extensions here. OpenGL EXT_bgra and
+ // APPLE_texture_format_BGRA8888 wants
+ // format to be BGRA but internal format to stay RGBA, but
+ // EXT_texture_format_BGRA8888 wants both format and internal
+ // format to be BGRA.
+ //
+ // Reference:
+ // https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_format_BGRA8888.txt
+ // https://www.opengl.org/registry/specs/EXT/bgra.txt
+ // https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_texture_format_BGRA8888.txt
+ if (!s_extension[Extension::EXT_bgra ].m_supported
+ && !s_extension[Extension::APPLE_texture_format_BGRA8888].m_supported)
+ {
+ s_textureFormat[TextureFormat::BGRA8].m_internalFmt = GL_BGRA;
+ }
+
+ if (!isTextureFormatValid(TextureFormat::BGRA8) )
+ {
+ // Revert back to RGBA if texture can't be created.
+ setTextureFormat(TextureFormat::BGRA8, GL_RGBA, GL_BGRA, GL_UNSIGNED_BYTE);
+ }
}
- if (!isTextureFormatValid(TextureFormat::BGRA8) )
+ if (BX_ENABLED(BX_PLATFORM_EMSCRIPTEN)
+ || !isTextureFormatValid(TextureFormat::R8) )
{
- // Revert back to RGBA if texture can't be created.
- setTextureFormat(TextureFormat::BGRA8, GL_RGBA, GL_BGRA, GL_UNSIGNED_BYTE);
+ // GL core has to use GL_R8 Issue#208, GLES2 has to use GL_LUMINANCE issue#226
+ s_textureFormat[TextureFormat::R8].m_internalFmt = GL_LUMINANCE;
+ s_textureFormat[TextureFormat::R8].m_fmt = GL_LUMINANCE;
}
- }
- if (BX_ENABLED(BX_PLATFORM_EMSCRIPTEN)
- || !isTextureFormatValid(TextureFormat::R8) )
- {
- // GL core has to use GL_R8 Issue#208, GLES2 has to use GL_LUMINANCE issue#226
- s_textureFormat[TextureFormat::R8].m_internalFmt = GL_LUMINANCE;
- s_textureFormat[TextureFormat::R8].m_fmt = GL_LUMINANCE;
- }
-
- for (uint32_t ii = BX_ENABLED(BX_PLATFORM_IOS) ? TextureFormat::Unknown : 0 // skip test on iOS!
- ; ii < TextureFormat::Count
- ; ++ii
- )
- {
- if (TextureFormat::Unknown != ii
- && TextureFormat::UnknownDepth != ii)
+ for (uint32_t ii = BX_ENABLED(BX_PLATFORM_IOS) ? TextureFormat::Unknown : 0 // skip test on iOS!
+ ; ii < TextureFormat::Count
+ ; ++ii
+ )
{
- s_textureFormat[ii].m_supported = isTextureFormatValid(TextureFormat::Enum(ii) );
+ if (TextureFormat::Unknown != ii
+ && TextureFormat::UnknownDepth != ii)
+ {
+ s_textureFormat[ii].m_supported = isTextureFormatValid(TextureFormat::Enum(ii) );
+ }
}
- }
- if (BX_ENABLED(0) )
- {
- // Disable all compressed texture formats. For testing only.
- for (uint32_t ii = 0; ii < TextureFormat::Unknown; ++ii)
+ if (BX_ENABLED(0) )
{
- s_textureFormat[ii].m_supported = false;
+ // Disable all compressed texture formats. For testing only.
+ for (uint32_t ii = 0; ii < TextureFormat::Unknown; ++ii)
+ {
+ s_textureFormat[ii].m_supported = false;
+ }
}
- }
-
- const bool computeSupport = false
- || !!(BGFX_CONFIG_RENDERER_OPENGLES >= 31)
- || s_extension[Extension::ARB_compute_shader].m_supported
- ;
- for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii)
- {
- uint16_t supported = BGFX_CAPS_FORMAT_TEXTURE_NONE;
- supported |= s_textureFormat[ii].m_supported
- ? BGFX_CAPS_FORMAT_TEXTURE_2D
- | BGFX_CAPS_FORMAT_TEXTURE_3D
- | BGFX_CAPS_FORMAT_TEXTURE_CUBE
- : BGFX_CAPS_FORMAT_TEXTURE_NONE
- ;
-
- supported |= isTextureFormatValid(TextureFormat::Enum(ii), true)
- ? BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB
- | BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB
- | BGFX_CAPS_FORMAT_TEXTURE_CUBE_SRGB
- : BGFX_CAPS_FORMAT_TEXTURE_NONE
+ const bool computeSupport = false
+ || !!(BGFX_CONFIG_RENDERER_OPENGLES >= 31)
+ || s_extension[Extension::ARB_compute_shader].m_supported
;
- supported |= isTextureFormatValid(TextureFormat::Enum(ii), false, true)
- ? BGFX_CAPS_FORMAT_TEXTURE_MIP_AUTOGEN
- : BGFX_CAPS_FORMAT_TEXTURE_NONE
- ;
+ for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii)
+ {
+ uint16_t supported = BGFX_CAPS_FORMAT_TEXTURE_NONE;
+ supported |= s_textureFormat[ii].m_supported
+ ? BGFX_CAPS_FORMAT_TEXTURE_2D
+ | BGFX_CAPS_FORMAT_TEXTURE_3D
+ | BGFX_CAPS_FORMAT_TEXTURE_CUBE
+ : BGFX_CAPS_FORMAT_TEXTURE_NONE
+ ;
- supported |= computeSupport
- && isImageFormatValid(TextureFormat::Enum(ii) )
- ? BGFX_CAPS_FORMAT_TEXTURE_IMAGE
- : BGFX_CAPS_FORMAT_TEXTURE_NONE
- ;
+ supported |= isTextureFormatValid(TextureFormat::Enum(ii), true)
+ ? BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB
+ | BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB
+ | BGFX_CAPS_FORMAT_TEXTURE_CUBE_SRGB
+ : BGFX_CAPS_FORMAT_TEXTURE_NONE
+ ;
- supported |= isFramebufferFormatValid(TextureFormat::Enum(ii) )
- ? BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER
- : BGFX_CAPS_FORMAT_TEXTURE_NONE
- ;
+ supported |= isTextureFormatValid(TextureFormat::Enum(ii), false, true)
+ ? BGFX_CAPS_FORMAT_TEXTURE_MIP_AUTOGEN
+ : BGFX_CAPS_FORMAT_TEXTURE_NONE
+ ;
- if (NULL != glGetInternalformativ)
- {
- GLint maxSamples;
- glGetInternalformativ(GL_RENDERBUFFER
- , s_textureFormat[ii].m_internalFmt
- , GL_SAMPLES
- , 1
- , &maxSamples
- );
- GLenum err = glGetError();
- supported |= 0 == err && maxSamples > 0
- ? BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA
+ supported |= computeSupport
+ && isImageFormatValid(TextureFormat::Enum(ii) )
+ ? BGFX_CAPS_FORMAT_TEXTURE_IMAGE
: BGFX_CAPS_FORMAT_TEXTURE_NONE
;
- glGetInternalformativ(GL_TEXTURE_2D_MULTISAMPLE
- , s_textureFormat[ii].m_internalFmt
- , GL_SAMPLES
- , 1
- , &maxSamples
- );
- err = glGetError();
- supported |= 0 == err && maxSamples > 0
- ? BGFX_CAPS_FORMAT_TEXTURE_MSAA
+ supported |= isFramebufferFormatValid(TextureFormat::Enum(ii) )
+ ? BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER
: BGFX_CAPS_FORMAT_TEXTURE_NONE
;
- }
- g_caps.formats[ii] = supported;
- }
+ supported |= isFramebufferFormatValid(TextureFormat::Enum(ii), false, true)
+ ? BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER
+ : BGFX_CAPS_FORMAT_TEXTURE_NONE
+ ;
- g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::OES_texture_3D].m_supported
- ? BGFX_CAPS_TEXTURE_3D
- : 0
- ;
- g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::EXT_shadow_samplers].m_supported
- ? BGFX_CAPS_TEXTURE_COMPARE_ALL
- : 0
- ;
- g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::OES_vertex_half_float].m_supported
- ? BGFX_CAPS_VERTEX_ATTRIB_HALF
- : 0
- ;
- g_caps.supported |= false
- || s_extension[Extension::ARB_vertex_type_2_10_10_10_rev].m_supported
- || s_extension[Extension::OES_vertex_type_10_10_10_2].m_supported
- ? BGFX_CAPS_VERTEX_ATTRIB_UINT10
- : 0
- ;
- g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::EXT_frag_depth].m_supported
- ? BGFX_CAPS_FRAGMENT_DEPTH
- : 0
- ;
- g_caps.supported |= s_extension[Extension::ARB_draw_buffers_blend].m_supported
- ? BGFX_CAPS_BLEND_INDEPENDENT
- : 0
- ;
- g_caps.supported |= s_extension[Extension::INTEL_fragment_shader_ordering].m_supported
- ? BGFX_CAPS_FRAGMENT_ORDERING
- : 0
- ;
- g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::OES_element_index_uint].m_supported
- ? BGFX_CAPS_INDEX32
- : 0
- ;
+ if (NULL != glGetInternalformativ)
+ {
+ GLint maxSamples;
+ glGetInternalformativ(GL_RENDERBUFFER
+ , s_textureFormat[ii].m_internalFmt
+ , GL_SAMPLES
+ , 1
+ , &maxSamples
+ );
+ GLenum err = glGetError();
+ supported |= 0 == err && maxSamples > 0
+ ? BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA
+ : BGFX_CAPS_FORMAT_TEXTURE_NONE
+ ;
- const bool drawIndirectSupported = false
- || s_extension[Extension::AMD_multi_draw_indirect].m_supported
- || s_extension[Extension::ARB_draw_indirect ].m_supported
- || s_extension[Extension::ARB_multi_draw_indirect].m_supported
- || s_extension[Extension::EXT_multi_draw_indirect].m_supported
- ;
+ glGetInternalformativ(GL_TEXTURE_2D_MULTISAMPLE
+ , s_textureFormat[ii].m_internalFmt
+ , GL_SAMPLES
+ , 1
+ , &maxSamples
+ );
+ err = glGetError();
+ supported |= 0 == err && maxSamples > 0
+ ? BGFX_CAPS_FORMAT_TEXTURE_MSAA
+ : BGFX_CAPS_FORMAT_TEXTURE_NONE
+ ;
+ }
- if (drawIndirectSupported)
- {
- if (NULL == glMultiDrawArraysIndirect
- || NULL == glMultiDrawElementsIndirect)
- {
- glMultiDrawArraysIndirect = stubMultiDrawArraysIndirect;
- glMultiDrawElementsIndirect = stubMultiDrawElementsIndirect;
+ g_caps.formats[ii] = supported;
}
- }
- g_caps.supported |= drawIndirectSupported
- ? BGFX_CAPS_DRAW_INDIRECT
- : 0
- ;
+ g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::OES_texture_3D].m_supported
+ ? BGFX_CAPS_TEXTURE_3D
+ : 0
+ ;
+ g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::EXT_shadow_samplers].m_supported
+ ? BGFX_CAPS_TEXTURE_COMPARE_ALL
+ : 0
+ ;
+ g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::OES_vertex_half_float].m_supported
+ ? BGFX_CAPS_VERTEX_ATTRIB_HALF
+ : 0
+ ;
+ g_caps.supported |= false
+ || s_extension[Extension::ARB_vertex_type_2_10_10_10_rev].m_supported
+ || s_extension[Extension::OES_vertex_type_10_10_10_2].m_supported
+ ? BGFX_CAPS_VERTEX_ATTRIB_UINT10
+ : 0
+ ;
+ g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::EXT_frag_depth].m_supported
+ ? BGFX_CAPS_FRAGMENT_DEPTH
+ : 0
+ ;
+ g_caps.supported |= s_extension[Extension::ARB_draw_buffers_blend].m_supported
+ ? BGFX_CAPS_BLEND_INDEPENDENT
+ : 0
+ ;
+ g_caps.supported |= s_extension[Extension::INTEL_fragment_shader_ordering].m_supported
+ ? BGFX_CAPS_FRAGMENT_ORDERING
+ : 0
+ ;
+ g_caps.supported |= !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::OES_element_index_uint].m_supported
+ ? BGFX_CAPS_INDEX32
+ : 0
+ ;
- if (NULL == glPolygonMode)
- {
- glPolygonMode = stubPolygonMode;
- }
+ const bool drawIndirectSupported = false
+ || s_extension[Extension::AMD_multi_draw_indirect].m_supported
+ || s_extension[Extension::ARB_draw_indirect ].m_supported
+ || s_extension[Extension::ARB_multi_draw_indirect].m_supported
+ || s_extension[Extension::EXT_multi_draw_indirect].m_supported
+ ;
- if (s_extension[Extension::ARB_copy_image].m_supported
- || s_extension[Extension::EXT_copy_image].m_supported
- || s_extension[Extension:: NV_copy_image].m_supported
- || s_extension[Extension::OES_copy_image].m_supported)
- {
- m_blitSupported = NULL != glCopyImageSubData;
- g_caps.supported |= m_blitSupported
- ? BGFX_CAPS_TEXTURE_BLIT
+ if (drawIndirectSupported)
+ {
+ if (NULL == glMultiDrawArraysIndirect
+ || NULL == glMultiDrawElementsIndirect)
+ {
+ glMultiDrawArraysIndirect = stubMultiDrawArraysIndirect;
+ glMultiDrawElementsIndirect = stubMultiDrawElementsIndirect;
+ }
+ }
+
+ g_caps.supported |= drawIndirectSupported
+ ? BGFX_CAPS_DRAW_INDIRECT
: 0
;
- }
- g_caps.supported |= m_readBackSupported
- ? BGFX_CAPS_TEXTURE_READ_BACK
- : 0
- ;
+ if (NULL == glPolygonMode)
+ {
+ glPolygonMode = stubPolygonMode;
+ }
- g_caps.supported |= false
- || s_extension[Extension::EXT_texture_array].m_supported
- || s_extension[Extension::EXT_gpu_shader4].m_supported
- || !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- ? BGFX_CAPS_TEXTURE_2D_ARRAY
- : 0
- ;
+ if (s_extension[Extension::ARB_copy_image].m_supported
+ || s_extension[Extension::EXT_copy_image].m_supported
+ || s_extension[Extension:: NV_copy_image].m_supported
+ || s_extension[Extension::OES_copy_image].m_supported)
+ {
+ m_blitSupported = NULL != glCopyImageSubData;
+ g_caps.supported |= m_blitSupported
+ ? BGFX_CAPS_TEXTURE_BLIT
+ : 0
+ ;
+ }
- g_caps.supported |= false
- || s_extension[Extension::ARB_texture_cube_map_array].m_supported
- || s_extension[Extension::EXT_texture_cube_map_array].m_supported
- ? BGFX_CAPS_TEXTURE_CUBE_ARRAY
- : 0
- ;
+ g_caps.supported |= m_readBackSupported
+ ? BGFX_CAPS_TEXTURE_READ_BACK
+ : 0
+ ;
- g_caps.limits.maxTextureSize = uint16_t(glGet(GL_MAX_TEXTURE_SIZE) );
+ g_caps.supported |= false
+ || s_extension[Extension::EXT_texture_array].m_supported
+ || s_extension[Extension::EXT_gpu_shader4].m_supported
+ || !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ ? BGFX_CAPS_TEXTURE_2D_ARRAY
+ : 0
+ ;
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
- || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::EXT_draw_buffers ].m_supported
- || s_extension[Extension::WEBGL_draw_buffers].m_supported)
- {
- g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(glGet(GL_MAX_DRAW_BUFFERS)
- , BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS)
- );
- }
+ g_caps.supported |= false
+ || s_extension[Extension::ARB_texture_cube_map_array].m_supported
+ || s_extension[Extension::EXT_texture_cube_map_array].m_supported
+ ? BGFX_CAPS_TEXTURE_CUBE_ARRAY
+ : 0
+ ;
-// if (s_extension[Extension::ARB_clip_control].m_supported)
-// {
-// GL_CHECK(glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE) );
-// g_caps.originBottomLeft = true;
-// }
-// else
- {
- g_caps.homogeneousDepth = true;
- g_caps.originBottomLeft = true;
- }
+ g_caps.limits.maxTextureSize = uint16_t(glGet(GL_MAX_TEXTURE_SIZE) );
- m_vaoSupport = !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::ARB_vertex_array_object].m_supported
- || s_extension[Extension::OES_vertex_array_object].m_supported
- ;
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
+ || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::EXT_draw_buffers ].m_supported
+ || s_extension[Extension::WEBGL_draw_buffers].m_supported)
+ {
+ g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(glGet(GL_MAX_DRAW_BUFFERS)
+ , BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS)
+ );
+ }
- if (BX_ENABLED(BX_PLATFORM_NACL) )
- {
- m_vaoSupport &= true
- && NULL != glGenVertexArrays
- && NULL != glDeleteVertexArrays
- && NULL != glBindVertexArray
+ // if (s_extension[Extension::ARB_clip_control].m_supported)
+ // {
+ // GL_CHECK(glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE) );
+ // g_caps.originBottomLeft = true;
+ // }
+ // else
+ {
+ g_caps.homogeneousDepth = true;
+ g_caps.originBottomLeft = true;
+ }
+
+ m_vaoSupport = !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::ARB_vertex_array_object].m_supported
+ || s_extension[Extension::OES_vertex_array_object].m_supported
;
- }
- if (m_vaoSupport)
- {
- GL_CHECK(glGenVertexArrays(1, &m_vao) );
- }
+ if (m_vaoSupport)
+ {
+ GL_CHECK(glGenVertexArrays(1, &m_vao) );
+ }
- m_samplerObjectSupport = !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::ARB_sampler_objects].m_supported
- ;
+ m_samplerObjectSupport = !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::ARB_sampler_objects].m_supported
+ ;
- m_shadowSamplersSupport = !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::EXT_shadow_samplers].m_supported
- ;
+ m_shadowSamplersSupport = !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::EXT_shadow_samplers].m_supported
+ ;
- m_programBinarySupport = !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::ARB_get_program_binary].m_supported
- || s_extension[Extension::OES_get_program_binary].m_supported
- || s_extension[Extension::IMG_shader_binary ].m_supported
- ;
+ m_programBinarySupport = !!(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::ARB_get_program_binary].m_supported
+ || s_extension[Extension::OES_get_program_binary].m_supported
+ || s_extension[Extension::IMG_shader_binary ].m_supported
+ ;
- m_textureSwizzleSupport = false
- || s_extension[Extension::ARB_texture_swizzle].m_supported
- || s_extension[Extension::EXT_texture_swizzle].m_supported
- ;
+ m_textureSwizzleSupport = false
+ || s_extension[Extension::ARB_texture_swizzle].m_supported
+ || s_extension[Extension::EXT_texture_swizzle].m_supported
+ ;
- m_depthTextureSupport = !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
- || s_extension[Extension::ANGLE_depth_texture ].m_supported
- || s_extension[Extension::CHROMIUM_depth_texture ].m_supported
- || s_extension[Extension::GOOGLE_depth_texture ].m_supported
- || s_extension[Extension::OES_depth_texture ].m_supported
- || s_extension[Extension::MOZ_WEBGL_depth_texture ].m_supported
- || s_extension[Extension::WEBGL_depth_texture ].m_supported
- || s_extension[Extension::WEBKIT_WEBGL_depth_texture].m_supported
- ;
+ m_depthTextureSupport = !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30)
+ || s_extension[Extension::ANGLE_depth_texture ].m_supported
+ || s_extension[Extension::CHROMIUM_depth_texture ].m_supported
+ || s_extension[Extension::GOOGLE_depth_texture ].m_supported
+ || s_extension[Extension::OES_depth_texture ].m_supported
+ || s_extension[Extension::MOZ_WEBGL_depth_texture ].m_supported
+ || s_extension[Extension::WEBGL_depth_texture ].m_supported
+ || s_extension[Extension::WEBKIT_WEBGL_depth_texture].m_supported
+ ;
- m_timerQuerySupport = false
- || s_extension[Extension::ANGLE_timer_query ].m_supported
- || s_extension[Extension::ARB_timer_query ].m_supported
- || s_extension[Extension::EXT_disjoint_timer_query].m_supported
- || s_extension[Extension::EXT_timer_query ].m_supported
- ;
+ m_timerQuerySupport = false
+ || s_extension[Extension::ANGLE_timer_query ].m_supported
+ || s_extension[Extension::ARB_timer_query ].m_supported
+ || s_extension[Extension::EXT_disjoint_timer_query].m_supported
+ || s_extension[Extension::EXT_timer_query ].m_supported
+ ;
- m_timerQuerySupport &= true
- && NULL != glQueryCounter
- && NULL != glGetQueryObjectiv
- && NULL != glGetQueryObjectui64v
- ;
+ m_timerQuerySupport &= true
+ && NULL != glQueryCounter
+ && NULL != glGetQueryObjectiv
+ && NULL != glGetQueryObjectui64v
+ ;
- m_occlusionQuerySupport = false
- || s_extension[Extension::ARB_occlusion_query ].m_supported
- || s_extension[Extension::ARB_occlusion_query2 ].m_supported
- || s_extension[Extension::EXT_occlusion_query_boolean].m_supported
- || s_extension[Extension::NV_occlusion_query ].m_supported
- ;
+ m_occlusionQuerySupport = false
+ || s_extension[Extension::ARB_occlusion_query ].m_supported
+ || s_extension[Extension::ARB_occlusion_query2 ].m_supported
+ || s_extension[Extension::EXT_occlusion_query_boolean].m_supported
+ || s_extension[Extension::NV_occlusion_query ].m_supported
+ ;
- m_occlusionQuerySupport &= true
- && NULL != glGenQueries
- && NULL != glDeleteQueries
- && NULL != glBeginQuery
- && NULL != glEndQuery
- ;
+ m_occlusionQuerySupport &= true
+ && NULL != glGenQueries
+ && NULL != glDeleteQueries
+ && NULL != glBeginQuery
+ && NULL != glEndQuery
+ ;
- m_atocSupport = s_extension[Extension::ARB_multisample].m_supported;
- m_conservativeRasterSupport = s_extension[Extension::NV_conservative_raster].m_supported;
+ m_atocSupport = s_extension[Extension::ARB_multisample].m_supported;
+ m_conservativeRasterSupport = s_extension[Extension::NV_conservative_raster].m_supported;
- g_caps.supported |= 0
- | (m_atocSupport ? BGFX_CAPS_ALPHA_TO_COVERAGE : 0)
- | (m_conservativeRasterSupport ? BGFX_CAPS_CONSERVATIVE_RASTER : 0)
- | (m_occlusionQuerySupport ? BGFX_CAPS_OCCLUSION_QUERY : 0)
- | (m_depthTextureSupport ? BGFX_CAPS_TEXTURE_COMPARE_LEQUAL : 0)
- | (computeSupport ? BGFX_CAPS_COMPUTE : 0)
- ;
+ g_caps.supported |= 0
+ | (m_atocSupport ? BGFX_CAPS_ALPHA_TO_COVERAGE : 0)
+ | (m_conservativeRasterSupport ? BGFX_CAPS_CONSERVATIVE_RASTER : 0)
+ | (m_occlusionQuerySupport ? BGFX_CAPS_OCCLUSION_QUERY : 0)
+ | (m_depthTextureSupport ? BGFX_CAPS_TEXTURE_COMPARE_LEQUAL : 0)
+ | (computeSupport ? BGFX_CAPS_COMPUTE : 0)
+ ;
- g_caps.supported |= m_glctx.getCaps();
+ g_caps.supported |= m_glctx.getCaps();
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES) )
- {
- m_srgbWriteControlSupport = s_extension[Extension::EXT_sRGB_write_control].m_supported;
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES) )
+ {
+ m_srgbWriteControlSupport = s_extension[Extension::EXT_sRGB_write_control].m_supported;
- m_borderColorSupport = s_extension[Extension::NV_texture_border_clamp].m_supported;
- s_textureAddress[BGFX_TEXTURE_U_BORDER>>BGFX_TEXTURE_U_SHIFT] = s_extension[Extension::NV_texture_border_clamp].m_supported
- ? GL_CLAMP_TO_BORDER
- : GL_CLAMP_TO_EDGE
- ;
- }
+ m_borderColorSupport = s_extension[Extension::NV_texture_border_clamp].m_supported;
+ s_textureAddress[BGFX_TEXTURE_U_BORDER>>BGFX_TEXTURE_U_SHIFT] = s_extension[Extension::NV_texture_border_clamp].m_supported
+ ? GL_CLAMP_TO_BORDER
+ : GL_CLAMP_TO_EDGE
+ ;
+ }
- if (s_extension[Extension::EXT_texture_filter_anisotropic].m_supported)
- {
- GL_CHECK(glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &m_maxAnisotropyDefault) );
- }
+ if (s_extension[Extension::EXT_texture_filter_anisotropic].m_supported)
+ {
+ GL_CHECK(glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &m_maxAnisotropyDefault) );
+ }
- if (s_extension[Extension::ARB_texture_multisample].m_supported
- || s_extension[Extension::ANGLE_framebuffer_multisample].m_supported)
- {
- GL_CHECK(glGetIntegerv(GL_MAX_SAMPLES, &m_maxMsaa) );
- }
+ if (s_extension[Extension::ARB_texture_multisample].m_supported
+ || s_extension[Extension::ANGLE_framebuffer_multisample].m_supported)
+ {
+ GL_CHECK(glGetIntegerv(GL_MAX_SAMPLES, &m_maxMsaa) );
+ }
- if (s_extension[Extension::OES_read_format].m_supported
- && (s_extension[Extension::IMG_read_format].m_supported || s_extension[Extension::EXT_read_format_bgra].m_supported) )
- {
- m_readPixelsFmt = GL_BGRA;
- }
- else
- {
- m_readPixelsFmt = GL_RGBA;
- }
+ if (s_extension[Extension::OES_read_format].m_supported
+ && (s_extension[Extension::IMG_read_format].m_supported || s_extension[Extension::EXT_read_format_bgra].m_supported) )
+ {
+ m_readPixelsFmt = GL_BGRA;
+ }
+ else
+ {
+ m_readPixelsFmt = GL_RGBA;
+ }
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) )
- {
- g_caps.supported |= BGFX_CAPS_INSTANCING;
- }
- else
- {
- if (s_extension[Extension::ANGLE_instanced_arrays].m_supported
- || s_extension[Extension::ARB_instanced_arrays].m_supported
- || s_extension[Extension::EXT_instanced_arrays].m_supported)
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) )
+ {
+ g_caps.supported |= BGFX_CAPS_INSTANCING;
+ }
+ else
{
- if (NULL != glVertexAttribDivisor
- && NULL != glDrawArraysInstanced
- && NULL != glDrawElementsInstanced)
+ if (s_extension[Extension::ANGLE_instanced_arrays].m_supported
+ || s_extension[Extension::ARB_instanced_arrays].m_supported
+ || s_extension[Extension::EXT_instanced_arrays].m_supported)
{
- g_caps.supported |= BGFX_CAPS_INSTANCING;
+ if (NULL != glVertexAttribDivisor
+ && NULL != glDrawArraysInstanced
+ && NULL != glDrawElementsInstanced)
+ {
+ g_caps.supported |= BGFX_CAPS_INSTANCING;
+ }
}
- }
- if (0 == (g_caps.supported & BGFX_CAPS_INSTANCING) )
- {
- glVertexAttribDivisor = stubVertexAttribDivisor;
- glDrawArraysInstanced = stubDrawArraysInstanced;
- glDrawElementsInstanced = stubDrawElementsInstanced;
+ if (0 == (g_caps.supported & BGFX_CAPS_INSTANCING) )
+ {
+ glVertexAttribDivisor = stubVertexAttribDivisor;
+ glDrawArraysInstanced = stubDrawArraysInstanced;
+ glDrawElementsInstanced = stubDrawElementsInstanced;
+ }
}
- }
- if (s_extension[Extension::ARB_debug_output].m_supported
- || s_extension[Extension::KHR_debug].m_supported)
- {
- if (NULL != glDebugMessageControl
- && NULL != glDebugMessageInsert
- && NULL != glDebugMessageCallback
- && NULL != glGetDebugMessageLog)
+ if (s_extension[Extension::ARB_debug_output].m_supported
+ || s_extension[Extension::KHR_debug].m_supported)
{
- GL_CHECK(glDebugMessageCallback(debugProcCb, NULL) );
- GL_CHECK(glDebugMessageControl(GL_DONT_CARE
+ if (NULL != glDebugMessageControl
+ && NULL != glDebugMessageInsert
+ && NULL != glDebugMessageCallback
+ && NULL != glGetDebugMessageLog)
+ {
+ GL_CHECK(glDebugMessageCallback(debugProcCb, NULL) );
+ GL_CHECK(glDebugMessageControl(GL_DONT_CARE
, GL_DONT_CARE
, GL_DEBUG_SEVERITY_MEDIUM
, 0
, NULL
, GL_TRUE
) );
+ }
}
- }
- if (s_extension[Extension::ARB_seamless_cube_map].m_supported)
- {
- GL_CHECK(glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS) );
- }
+ if (s_extension[Extension::ARB_seamless_cube_map].m_supported)
+ {
+ GL_CHECK(glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS) );
+ }
- if (NULL == glFrameTerminatorGREMEDY
- || !s_extension[Extension::GREMEDY_frame_terminator].m_supported)
- {
- glFrameTerminatorGREMEDY = stubFrameTerminatorGREMEDY;
- }
+ if (NULL == glFrameTerminatorGREMEDY
+ || !s_extension[Extension::GREMEDY_frame_terminator].m_supported)
+ {
+ glFrameTerminatorGREMEDY = stubFrameTerminatorGREMEDY;
+ }
- if (NULL == glInsertEventMarker
- || !s_extension[Extension::EXT_debug_marker].m_supported)
- {
- glInsertEventMarker = (NULL != glStringMarkerGREMEDY && s_extension[Extension::GREMEDY_string_marker].m_supported)
- ? stubInsertEventMarkerGREMEDY
- : stubInsertEventMarker
- ;
- }
+ if (NULL == glInsertEventMarker
+ || !s_extension[Extension::EXT_debug_marker].m_supported)
+ {
+ glInsertEventMarker = (NULL != glStringMarkerGREMEDY && s_extension[Extension::GREMEDY_string_marker].m_supported)
+ ? stubInsertEventMarkerGREMEDY
+ : stubInsertEventMarker
+ ;
+ }
- setGraphicsDebuggerPresent(s_extension[Extension::EXT_debug_tool].m_supported);
+ setGraphicsDebuggerPresent(s_extension[Extension::EXT_debug_tool].m_supported);
- if (NULL == glObjectLabel)
- {
- glObjectLabel = stubObjectLabel;
- }
+ if (NULL == glObjectLabel)
+ {
+ glObjectLabel = stubObjectLabel;
+ }
- if (NULL == glInvalidateFramebuffer)
- {
- glInvalidateFramebuffer = stubInvalidateFramebuffer;
- }
+ if (NULL == glInvalidateFramebuffer)
+ {
+ glInvalidateFramebuffer = stubInvalidateFramebuffer;
+ }
- if (m_timerQuerySupport)
- {
- m_gpuTimer.create();
- }
+ if (m_timerQuerySupport)
+ {
+ m_gpuTimer.create();
+ }
- if (m_occlusionQuerySupport)
- {
- m_occlusionQuery.create();
+ if (m_occlusionQuerySupport)
+ {
+ m_occlusionQuery.create();
+ }
+
+ // Init reserved part of view name.
+ for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
+ {
+ bx::snprintf(s_viewName[ii], BGFX_CONFIG_MAX_VIEW_NAME_RESERVED+1, "%3d ", ii);
+ }
+
+ ovrPostReset();
+
+ m_needPresent = false;
}
- // Init reserved part of view name.
- for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
+ return true;
+
+ error:
+ switch (errorState)
{
- bx::snprintf(s_viewName[ii], BGFX_CONFIG_MAX_VIEW_NAME_RESERVED+1, "%3d ", ii);
+ case ErrorState::Default:
+ break;
}
- ovrPostReset();
+ ovrPreReset();
+ m_ovr.shutdown();
- m_needPresent = false;
+ m_glctx.destroy();
- BGFX_GPU_PROFILER_BIND();
+ unloadRenderDoc(m_renderdocdll);
+ return false;
}
void shutdown()
{
- BGFX_GPU_PROFILER_UNBIND();
-
ovrPreReset();
m_ovr.shutdown();
@@ -2262,7 +2599,7 @@ namespace bgfx { namespace gl
unloadRenderDoc(m_renderdocdll);
}
- RendererType::Enum getRendererType() const BX_OVERRIDE
+ RendererType::Enum getRendererType() const override
{
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) )
{
@@ -2272,12 +2609,17 @@ namespace bgfx { namespace gl
return RendererType::OpenGLES;
}
- const char* getRendererName() const BX_OVERRIDE
+ const char* getRendererName() const override
{
return BGFX_RENDERER_OPENGL_NAME;
}
- void flip(HMD& _hmd)
+ bool isDeviceRemoved() override
+ {
+ return false;
+ }
+
+ void flip(HMD& _hmd) override
{
if (m_flip)
{
@@ -2307,113 +2649,113 @@ namespace bgfx { namespace gl
}
}
- void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) BX_OVERRIDE
+ void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_mem->size, _mem->data, _flags);
}
- void destroyIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE
+ void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) override
{
VertexDecl& decl = m_vertexDecls[_handle.idx];
bx::memCopy(&decl, &_decl, sizeof(VertexDecl) );
dump(decl);
}
- void destroyVertexDecl(VertexDeclHandle /*_handle*/) BX_OVERRIDE
+ void destroyVertexDecl(VertexDeclHandle /*_handle*/) override
{
}
- void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) BX_OVERRIDE
+ void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) override
{
m_vertexBuffers[_handle.idx].create(_mem->size, _mem->data, _declHandle, _flags);
}
- void destroyVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_size, NULL, _flags);
}
- void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_indexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
VertexDeclHandle decl = BGFX_INVALID_HANDLE;
m_vertexBuffers[_handle.idx].create(_size, NULL, decl, _flags);
}
- void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_vertexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createShader(ShaderHandle _handle, Memory* _mem) BX_OVERRIDE
+ void createShader(ShaderHandle _handle, Memory* _mem) override
{
m_shaders[_handle.idx].create(_mem);
}
- void destroyShader(ShaderHandle _handle) BX_OVERRIDE
+ void destroyShader(ShaderHandle _handle) override
{
m_shaders[_handle.idx].destroy();
}
- void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) BX_OVERRIDE
+ void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) override
{
ShaderGL dummyFragmentShader;
m_program[_handle.idx].create(m_shaders[_vsh.idx], isValid(_fsh) ? m_shaders[_fsh.idx] : dummyFragmentShader);
}
- void destroyProgram(ProgramHandle _handle) BX_OVERRIDE
+ void destroyProgram(ProgramHandle _handle) override
{
m_program[_handle.idx].destroy();
}
- void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) BX_OVERRIDE
+ void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) override
{
m_textures[_handle.idx].create(_mem, _flags, _skip);
}
- void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) BX_OVERRIDE
+ void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) override
{
}
- void updateTexture(TextureHandle _handle, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) BX_OVERRIDE
+ void updateTexture(TextureHandle _handle, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) override
{
m_textures[_handle.idx].update(_side, _mip, _rect, _z, _depth, _pitch, _mem);
}
- void updateTextureEnd() BX_OVERRIDE
+ void updateTextureEnd() override
{
}
- void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) BX_OVERRIDE
+ void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) override
{
if (m_readBackSupported)
{
const TextureGL& texture = m_textures[_handle.idx];
- const bool compressed = isCompressed(TextureFormat::Enum(texture.m_textureFormat) );
+ const bool compressed = bimg::isCompressed(bimg::TextureFormat::Enum(texture.m_textureFormat) );
GL_CHECK(glBindTexture(texture.m_target, texture.m_id) );
@@ -2436,9 +2778,54 @@ namespace bgfx { namespace gl
GL_CHECK(glBindTexture(texture.m_target, 0) );
}
+ else
+ {
+ const TextureGL& texture = m_textures[_handle.idx];
+ const bool compressed = bimg::isCompressed(bimg::TextureFormat::Enum(texture.m_textureFormat) );
+
+ if(!compressed)
+ {
+ Attachment attachment[1];
+ attachment[0].handle = _handle;
+ attachment[0].mip = 0;
+ attachment[0].layer = 0;
+
+ FrameBufferGL frameBuffer;
+ frameBuffer.create(1, attachment);
+ GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer.m_fbo[0]) );
+ GL_CHECK(glFramebufferTexture2D(
+ GL_FRAMEBUFFER
+ , GL_COLOR_ATTACHMENT0
+ , GL_TEXTURE_2D
+ , texture.m_id
+ , attachment[0].mip
+ ) );
+
+ if (!BX_ENABLED(BX_PLATFORM_EMSCRIPTEN)
+ && !BX_ENABLED(BX_PLATFORM_IOS))
+ {
+ GL_CHECK(glReadBuffer(GL_COLOR_ATTACHMENT0) );
+ }
+
+ if (GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_FRAMEBUFFER) )
+ {
+ GL_CHECK(glReadPixels(
+ 0
+ , 0
+ , texture.m_width
+ , texture.m_height
+ , m_readPixelsFmt
+ , GL_UNSIGNED_BYTE
+ , _data
+ ) );
+ }
+
+ frameBuffer.destroy();
+ }
+ }
}
- void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) BX_OVERRIDE
+ void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) override
{
TextureGL& texture = m_textures[_handle.idx];
@@ -2466,34 +2853,34 @@ namespace bgfx { namespace gl
release(mem);
}
- void overrideInternal(TextureHandle _handle, uintptr_t _ptr) BX_OVERRIDE
+ void overrideInternal(TextureHandle _handle, uintptr_t _ptr) override
{
m_textures[_handle.idx].overrideInternal(_ptr);
}
- uintptr_t getInternal(TextureHandle _handle) BX_OVERRIDE
+ uintptr_t getInternal(TextureHandle _handle) override
{
return uintptr_t(m_textures[_handle.idx].m_id);
}
- void destroyTexture(TextureHandle _handle) BX_OVERRIDE
+ void destroyTexture(TextureHandle _handle) override
{
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) override
{
m_frameBuffers[_handle.idx].create(_num, _attachment);
}
- void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) override
{
uint16_t denseIdx = m_numWindows++;
m_windows[denseIdx] = _handle;
m_frameBuffers[_handle.idx].create(denseIdx, _nwh, _width, _height, _depthFormat);
}
- void destroyFrameBuffer(FrameBufferHandle _handle) BX_OVERRIDE
+ void destroyFrameBuffer(FrameBufferHandle _handle) override
{
uint16_t denseIdx = m_frameBuffers[_handle.idx].destroy();
if (UINT16_MAX != denseIdx)
@@ -2508,7 +2895,7 @@ namespace bgfx { namespace gl
}
}
- void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) BX_OVERRIDE
+ void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) override
{
if (NULL != m_uniforms[_handle.idx])
{
@@ -2522,14 +2909,14 @@ namespace bgfx { namespace gl
m_uniformReg.add(_handle, _name, m_uniforms[_handle.idx]);
}
- void destroyUniform(UniformHandle _handle) BX_OVERRIDE
+ void destroyUniform(UniformHandle _handle) override
{
BX_FREE(g_allocator, m_uniforms[_handle.idx]);
m_uniforms[_handle.idx] = NULL;
m_uniformReg.remove(_handle);
}
- void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE
+ void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) override
{
SwapChainGL* swapChain = NULL;
uint32_t width = m_resolution.m_width;
@@ -2558,7 +2945,7 @@ namespace bgfx { namespace gl
if (GL_RGBA == m_readPixelsFmt)
{
- imageSwizzleBgra8(data, width, height, width*4, data);
+ bimg::imageSwizzleBgra8(data, width*4, width, height, data, width*4);
}
g_callback->screenShot(_filePath
@@ -2572,32 +2959,52 @@ namespace bgfx { namespace gl
BX_FREE(g_allocator, data);
}
- void updateViewName(uint8_t _id, const char* _name) BX_OVERRIDE
+ void updateViewName(ViewId _id, const char* _name) override
{
- bx::strlcpy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
- , _name
+ bx::strCopy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
, BX_COUNTOF(s_viewName[0])-BGFX_CONFIG_MAX_VIEW_NAME_RESERVED
+ , _name
);
}
- void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE
+ void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) override
{
bx::memCopy(m_uniforms[_loc], _data, _size);
}
- void setMarker(const char* _marker, uint32_t _size) BX_OVERRIDE
+ void setMarker(const char* _marker, uint32_t _size) override
{
GL_CHECK(glInsertEventMarker(_size, _marker) );
}
- void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE
+ void invalidateOcclusionQuery(OcclusionQueryHandle _handle) override
{
m_occlusionQuery.invalidate(_handle);
}
- void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE;
+ virtual void setName(Handle _handle, const char* _name) override
+ {
+ switch (_handle.type)
+ {
+ case Handle::Shader:
+ GL_CHECK(glObjectLabel(GL_SHADER, m_shaders[_handle.idx].m_id, -1, _name) );
+ break;
+
+ case Handle::Texture:
+ GL_CHECK(glObjectLabel(GL_TEXTURE, m_textures[_handle.idx].m_id, -1, _name) );
+ break;
- void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE
+ default:
+ BX_CHECK(false, "Invalid handle type?! %d", _handle.type);
+ break;
+ }
+ }
+
+ void submitBlit(BlitState& _bs, uint16_t _view);
+
+ void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) override;
+
+ void blitSetup(TextVideoMemBlitter& _blitter) override
{
if (0 != m_vao)
{
@@ -2623,7 +3030,7 @@ namespace bgfx { namespace gl
GL_CHECK(glUniform1i(program.m_sampler[0], 0) );
float proj[16];
- bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f);
+ bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f, 0.0f, true);
GL_CHECK(glUniformMatrix4fv(program.m_predefined[0].m_loc
, 1
@@ -2647,7 +3054,7 @@ namespace bgfx { namespace gl
}
}
- void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) BX_OVERRIDE
+ void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) override
{
const uint32_t numVertices = _numIndices*4/6;
if (0 < numVertices)
@@ -2955,11 +3362,6 @@ namespace bgfx { namespace gl
void invalidateCache()
{
- if (m_vaoSupport)
- {
- m_vaoStateCache.invalidate();
- }
-
if ( (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) )
&& m_samplerObjectSupport)
{
@@ -3034,13 +3436,15 @@ namespace bgfx { namespace gl
GL_CHECK(glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, magFilter) );
GL_CHECK(glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, minFilter) );
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
- || m_borderColorSupport)
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) )
{
- if (hasBorderColor)
- {
- GL_CHECK(glSamplerParameterfv(sampler, GL_TEXTURE_BORDER_COLOR, _rgba) );
- }
+ GL_CHECK(glSamplerParameterf(sampler, GL_TEXTURE_LOD_BIAS, float(BGFX_CONFIG_MIP_LOD_BIAS) ) );
+ }
+
+ if (m_borderColorSupport
+ && hasBorderColor)
+ {
+ GL_CHECK(glSamplerParameterfv(sampler, GL_TEXTURE_BORDER_COLOR, _rgba) );
}
if (0 != (_flags & (BGFX_TEXTURE_MIN_ANISOTROPIC|BGFX_TEXTURE_MAG_ANISOTROPIC) )
@@ -3127,7 +3531,14 @@ namespace bgfx { namespace gl
if (GL_RGBA == m_readPixelsFmt)
{
- imageSwizzleBgra8(m_capture, m_resolution.m_width, m_resolution.m_height, m_resolution.m_width*4, m_capture);
+ bimg::imageSwizzleBgra8(
+ m_capture
+ , m_resolution.m_width*4
+ , m_resolution.m_width
+ , m_resolution.m_height
+ , m_capture
+ , m_resolution.m_width*4
+ );
}
g_callback->captureFrame(m_capture, m_captureSize);
@@ -3474,7 +3885,6 @@ namespace bgfx { namespace gl
TimerQueryGL m_gpuTimer;
OcclusionQueryGL m_occlusionQuery;
- VaoStateCache m_vaoStateCache;
SamplerStateCache m_samplerStateCache;
TextVideoMem m_textVideoMem;
@@ -3520,6 +3930,8 @@ namespace bgfx { namespace gl
const char* m_version;
const char* m_glslVersion;
+ Workaround m_workaround;
+
GLuint m_currentFbo;
VR m_ovr;
@@ -3533,7 +3945,11 @@ namespace bgfx { namespace gl
RendererContextI* rendererCreate()
{
s_renderGL = BX_NEW(g_allocator, RendererContextGL);
- s_renderGL->init();
+ if (!s_renderGL->init() )
+ {
+ BX_DELETE(g_allocator, s_renderGL);
+ s_renderGL = NULL;
+ }
return s_renderGL;
}
@@ -4018,7 +4434,8 @@ namespace bgfx { namespace gl
init();
- if (!cached)
+ if (!cached
+ && s_renderGL->m_workaround.m_detachShader)
{
// Must be after init, otherwise init might fail to lookup shader
// info (NVIDIA Tegra 3 OpenGL ES 2.0 14.01003).
@@ -4046,8 +4463,6 @@ namespace bgfx { namespace gl
GL_CHECK(glDeleteProgram(m_id) );
m_id = 0;
}
-
- m_vcref.invalidate(s_renderGL->m_vaoStateCache);
}
void ProgramGL::init()
@@ -4172,13 +4587,13 @@ namespace bgfx { namespace gl
num = bx::uint32_max(num, 1);
int offset = 0;
- char* array = const_cast<char*>(bx::strnchr(name, '[') );
+ char* array = const_cast<char*>(bx::strFind(name, '[') );
if (NULL != array)
{
BX_TRACE("--- %s", name);
*array = '\0';
array++;
- char* end = const_cast<char*>(bx::strnchr(array, ']') );
+ char* end = const_cast<char*>(bx::strFind(array, ']') );
if (NULL != end)
{ // Some devices (Amazon Fire) might not return terminating brace.
*end = '\0';
@@ -4384,21 +4799,21 @@ namespace bgfx { namespace gl
&& !normalized)
{
GL_CHECK(glVertexAttribIPointer(loc
- , num
- , s_attribType[type]
- , _vertexDecl.m_stride
- , (void*)(uintptr_t)baseVertex)
- );
+ , num
+ , s_attribType[type]
+ , _vertexDecl.m_stride
+ , (void*)(uintptr_t)baseVertex)
+ );
}
else
{
GL_CHECK(glVertexAttribPointer(loc
- , num
- , s_attribType[type]
- , normalized
- , _vertexDecl.m_stride
- , (void*)(uintptr_t)baseVertex)
- );
+ , num
+ , s_attribType[type]
+ , normalized
+ , _vertexDecl.m_stride
+ , (void*)(uintptr_t)baseVertex)
+ );
}
m_unboundUsedAttrib[ii] = Attrib::Count;
@@ -4424,248 +4839,12 @@ namespace bgfx { namespace gl
{
GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) );
GL_CHECK(glDeleteBuffers(1, &m_id) );
-
- m_vcref.invalidate(s_renderGL->m_vaoStateCache);
}
void VertexBufferGL::destroy()
{
GL_CHECK(glBindBuffer(GL_ARRAY_BUFFER, 0) );
GL_CHECK(glDeleteBuffers(1, &m_id) );
-
- m_vcref.invalidate(s_renderGL->m_vaoStateCache);
- }
-
- static void texSubImage(
- GLenum _target
- , GLint _level
- , GLint _xoffset
- , GLint _yoffset
- , GLint _zoffset
- , GLsizei _width
- , GLsizei _height
- , GLsizei _depth
- , GLenum _format
- , GLenum _type
- , const GLvoid* _data
- )
- {
- if (NULL == _data)
- {
- return;
- }
-
- if (_target == GL_TEXTURE_3D
- || _target == GL_TEXTURE_2D_ARRAY
- || _target == GL_TEXTURE_CUBE_MAP_ARRAY)
- {
- GL_CHECK(glTexSubImage3D(
- _target
- , _level
- , _xoffset
- , _yoffset
- , _zoffset
- , _width
- , _height
- , _depth
- , _format
- , _type
- , _data
- ) );
- }
- else if (_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY)
- {
- }
- else
- {
- BX_UNUSED(_zoffset, _depth);
- GL_CHECK(glTexSubImage2D(
- _target
- , _level
- , _xoffset
- , _yoffset
- , _width
- , _height
- , _format
- , _type
- , _data
- ) );
- }
- }
-
- static void texImage(
- GLenum _target
- , uint32_t _msaaQuality
- , GLint _level
- , GLint _internalFormat
- , GLsizei _width
- , GLsizei _height
- , GLsizei _depth
- , GLint _border
- , GLenum _format
- , GLenum _type
- , const GLvoid* _data
- )
- {
- if (_target == GL_TEXTURE_3D)
- {
- GL_CHECK(glTexImage3D(
- _target
- , _level
- , _internalFormat
- , _width
- , _height
- , _depth
- , _border
- , _format
- , _type
- , _data
- ) );
- }
- else if (_target == GL_TEXTURE_2D_ARRAY
- || _target == GL_TEXTURE_CUBE_MAP_ARRAY)
- {
- texSubImage(
- _target
- , _level
- , 0
- , 0
- , _depth
- , _width
- , _height
- , 1
- , _format
- , _type
- , _data
- );
- }
- else if (_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY)
- {
- }
- else if (_target == GL_TEXTURE_2D_MULTISAMPLE)
- {
- GL_CHECK(glTexImage2DMultisample(
- _target
- , _msaaQuality
- , _internalFormat
- , _width
- , _height
- , false
- ) );
- }
- else
- {
- GL_CHECK(glTexImage2D(
- _target
- , _level
- , _internalFormat
- , _width
- , _height
- , _border
- , _format
- , _type
- , _data
- ) );
- }
-
- BX_UNUSED(_msaaQuality, _depth, _border, _data);
- }
-
- static void compressedTexSubImage(
- GLenum _target
- , GLint _level
- , GLint _xoffset
- , GLint _yoffset
- , GLint _zoffset
- , GLsizei _width
- , GLsizei _height
- , GLsizei _depth
- , GLenum _format
- , GLsizei _imageSize
- , const GLvoid* _data
- )
- {
- if (_target == GL_TEXTURE_3D)
- {
- GL_CHECK(glCompressedTexSubImage3D(
- _target
- , _level
- , _xoffset
- , _yoffset
- , _zoffset
- , _width
- , _height
- , _depth
- , _format
- , _imageSize
- , _data
- ) );
- }
- else
- {
- BX_UNUSED(_zoffset, _depth);
- GL_CHECK(glCompressedTexSubImage2D(
- _target
- , _level
- , _xoffset
- , _yoffset
- , _width
- , _height
- , _format
- , _imageSize
- , _data
- ) );
- }
- }
-
- static void compressedTexImage(
- GLenum _target
- , GLint _level
- , GLenum _internalformat
- , GLsizei _width
- , GLsizei _height
- , GLsizei _depth
- , GLint _border
- , GLsizei _imageSize
- , const GLvoid* _data
- )
- {
- if (_target == GL_TEXTURE_3D)
- {
- GL_CHECK(glCompressedTexImage3D(
- _target
- , _level
- , _internalformat
- , _width
- , _height
- , _depth
- , _border
- , _imageSize
- , _data
- ) );
- }
- else if (_target == GL_TEXTURE_2D_ARRAY
- || _target == GL_TEXTURE_CUBE_MAP_ARRAY)
- {
- compressedTexSubImage(_target, _level, 0, 0, _depth, _width, _height, 1, _internalformat, _imageSize, _data);
- }
- else if (_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY)
- {
- }
- else
- {
- BX_UNUSED(_depth);
- GL_CHECK(glCompressedTexImage2D(
- _target
- , _level
- , _internalformat
- , _width
- , _height
- , _border
- , _imageSize
- , _data
- ) );
- }
}
bool TextureGL::init(GLenum _target, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, uint32_t _flags)
@@ -4680,6 +4859,7 @@ namespace bgfx { namespace gl
const bool writeOnly = 0 != (m_flags&BGFX_TEXTURE_RT_WRITE_ONLY);
const bool computeWrite = 0 != (m_flags&BGFX_TEXTURE_COMPUTE_WRITE );
+ const bool srgb = 0 != (m_flags&BGFX_TEXTURE_SRGB);
const bool textureArray = false
|| _target == GL_TEXTURE_2D_ARRAY
|| _target == GL_TEXTURE_CUBE_MAP_ARRAY
@@ -4714,11 +4894,16 @@ namespace bgfx { namespace gl
m_type = tfiRgba8.m_type;
}
+ const GLenum internalFmt = srgb
+ ? s_textureFormat[m_textureFormat].m_internalFmtSrgb
+ : s_textureFormat[m_textureFormat].m_internalFmt
+ ;
+
if (textureArray)
{
GL_CHECK(glTexStorage3D(_target
, _numMips
- , s_textureFormat[m_textureFormat].m_internalFmt
+ , internalFmt
, m_width
, m_height
, _depth
@@ -4730,21 +4915,21 @@ namespace bgfx { namespace gl
if (_target == GL_TEXTURE_3D)
{
GL_CHECK(glTexStorage3D(_target
- , _numMips
- , s_textureFormat[m_textureFormat].m_internalFmt
- , m_width
- , m_height
- , _depth
- ) );
+ , _numMips
+ , internalFmt
+ , m_width
+ , m_height
+ , _depth
+ ) );
}
else
{
GL_CHECK(glTexStorage2D(_target
- , _numMips
- , s_textureFormat[m_textureFormat].m_internalFmt
- , m_width
- , m_height
- ) );
+ , _numMips
+ , internalFmt
+ , m_width
+ , m_height
+ ) );
}
}
@@ -4810,9 +4995,9 @@ namespace bgfx { namespace gl
void TextureGL::create(const Memory* _mem, uint32_t _flags, uint8_t _skip)
{
- ImageContainer imageContainer;
+ bimg::ImageContainer imageContainer;
- if (imageParse(imageContainer, _mem->data, _mem->size) )
+ if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
{
uint8_t numMips = imageContainer.m_numMips;
const uint8_t startLod = uint8_t(bx::uint32_min(_skip, numMips-1) );
@@ -4822,7 +5007,7 @@ namespace bgfx { namespace gl
uint32_t textureHeight;
uint32_t textureDepth;
{
- const ImageBlockInfo& ibi = getBlockInfo(TextureFormat::Enum(imageContainer.m_format) );
+ const bimg::ImageBlockInfo& ibi = bimg::getBlockInfo(bimg::TextureFormat::Enum(imageContainer.m_format) );
textureWidth = bx::uint32_max(ibi.blockWidth, imageContainer.m_width >>startLod);
textureHeight = bx::uint32_max(ibi.blockHeight, imageContainer.m_height>>startLod);
textureDepth = 1 < imageContainer.m_depth
@@ -4856,9 +5041,9 @@ namespace bgfx { namespace gl
{
switch (target)
{
- case GL_TEXTURE_CUBE_MAP: target = GL_TEXTURE_CUBE_MAP_ARRAY;
- case GL_TEXTURE_2D_MULTISAMPLE: target = GL_TEXTURE_2D_MULTISAMPLE_ARRAY;
- default: target = GL_TEXTURE_2D_ARRAY;
+ case GL_TEXTURE_CUBE_MAP: target = GL_TEXTURE_CUBE_MAP_ARRAY; break;
+ case GL_TEXTURE_2D_MULTISAMPLE: target = GL_TEXTURE_2D_MULTISAMPLE_ARRAY; break;
+ default: target = GL_TEXTURE_2D_ARRAY; break;
}
}
@@ -4888,16 +5073,17 @@ namespace bgfx { namespace gl
&& !s_textureFormat[m_requestedFormat].m_supported
&& !s_renderGL->m_textureSwizzleSupport
;
- const bool compressed = isCompressed(TextureFormat::Enum(m_requestedFormat) );
+ const bool compressed = bimg::isCompressed(bimg::TextureFormat::Enum(m_requestedFormat) );
const bool convert = false
|| m_textureFormat != m_requestedFormat
|| swizzle
;
- BX_TRACE("Texture%-4s %3d: %s (requested: %s), layers %d, %dx%dx%d%s."
+ BX_TRACE("Texture%-4s %3d: %s %s(requested: %s), layers %d, %dx%dx%d%s."
, imageContainer.m_cubeMap ? "Cube" : (1 < imageContainer.m_depth ? "3D" : "2D")
, this - s_renderGL->m_textures
, getName( (TextureFormat::Enum)m_textureFormat)
+ , srgb ? "+sRGB " : ""
, getName( (TextureFormat::Enum)m_requestedFormat)
, numLayers
, textureWidth
@@ -4907,12 +5093,12 @@ namespace bgfx { namespace gl
);
BX_WARN(!convert, "Texture %s%s%s from %s to %s."
- , swizzle ? "swizzle" : ""
- , swizzle&&convert ? " and " : ""
- , convert ? "convert" : ""
- , getName( (TextureFormat::Enum)m_requestedFormat)
- , getName( (TextureFormat::Enum)m_textureFormat)
- );
+ , swizzle ? "swizzle" : ""
+ , swizzle&&convert ? " and " : ""
+ , convert ? "convert" : ""
+ , getName( (TextureFormat::Enum)m_requestedFormat)
+ , getName( (TextureFormat::Enum)m_textureFormat)
+ );
uint8_t* temp = NULL;
if (convert)
@@ -4941,13 +5127,13 @@ namespace bgfx { namespace gl
: side
;
- ImageMip mip;
- if (imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
+ bimg::ImageMip mip;
+ if (bimg::imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
{
if (compressed
&& !convert)
{
- compressedTexImage(imageTarget
+ GL_CHECK(compressedTexImage(imageTarget
, lod
, internalFmt
, width
@@ -4956,7 +5142,7 @@ namespace bgfx { namespace gl
, 0
, mip.m_size
, mip.m_data
- );
+ ) );
}
else
{
@@ -4965,16 +5151,16 @@ namespace bgfx { namespace gl
if (convert)
{
imageDecodeToRgba8(temp
- , mip.m_data
- , mip.m_width
- , mip.m_height
- , mip.m_width*4
- , mip.m_format
- );
+ , mip.m_data
+ , mip.m_width
+ , mip.m_height
+ , mip.m_width*4
+ , mip.m_format
+ );
data = temp;
}
- texImage(imageTarget
+ GL_CHECK(texImage(imageTarget
, msaaQuality
, lod
, internalFmt
@@ -4985,7 +5171,7 @@ namespace bgfx { namespace gl
, m_fmt
, m_type
, data
- );
+ ) );
}
}
else if (!computeWrite)
@@ -4994,10 +5180,10 @@ namespace bgfx { namespace gl
{
uint32_t size = bx::uint32_max(1, (width + 3)>>2)
* bx::uint32_max(1, (height + 3)>>2)
- * 4*4*getBitsPerPixel(TextureFormat::Enum(m_textureFormat) )/8
+ * 4*4* bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) )/8
;
- compressedTexImage(imageTarget
+ GL_CHECK(compressedTexImage(imageTarget
, lod
, internalFmt
, width
@@ -5006,11 +5192,11 @@ namespace bgfx { namespace gl
, 0
, size
, NULL
- );
+ ) );
}
else
{
- texImage(imageTarget
+ GL_CHECK(texImage(imageTarget
, msaaQuality
, lod
, internalFmt
@@ -5021,7 +5207,7 @@ namespace bgfx { namespace gl
, m_fmt
, m_type
, NULL
- );
+ ) );
}
}
@@ -5066,7 +5252,7 @@ namespace bgfx { namespace gl
void TextureGL::update(uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem)
{
- const uint32_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
+ const uint32_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
const uint32_t rectpitch = _rect.m_width*bpp/8;
uint32_t srcpitch = UINT16_MAX == _pitch ? rectpitch : _pitch;
@@ -5084,7 +5270,7 @@ namespace bgfx { namespace gl
&& !s_renderGL->m_textureSwizzleSupport
;
const bool unpackRowLength = BX_IGNORE_C4127(!!BGFX_CONFIG_RENDERER_OPENGL || s_extension[Extension::EXT_unpack_subimage].m_supported);
- const bool compressed = isCompressed(TextureFormat::Enum(m_requestedFormat) );
+ const bool compressed = bimg::isCompressed(bimg::TextureFormat::Enum(m_requestedFormat) );
const bool convert = false
|| (compressed && m_textureFormat != m_requestedFormat)
|| swizzle
@@ -5110,7 +5296,7 @@ namespace bgfx { namespace gl
if (!unpackRowLength)
{
- imageCopy(temp, width, height, bpp, srcpitch, data);
+ bimg::imageCopy(temp, width, height, bpp, srcpitch, data);
data = temp;
}
@@ -5133,7 +5319,7 @@ namespace bgfx { namespace gl
if (convert)
{
- imageDecodeToRgba8(temp, data, width, height, srcpitch, TextureFormat::Enum(m_requestedFormat) );
+ bimg::imageDecodeToRgba8(temp, data, width, height, srcpitch, bimg::TextureFormat::Enum(m_requestedFormat) );
data = temp;
srcpitch = rectpitch;
}
@@ -5141,7 +5327,7 @@ namespace bgfx { namespace gl
if (!unpackRowLength
&& !convert)
{
- imageCopy(temp, width, height, bpp, srcpitch, data);
+ bimg::imageCopy(temp, width, height, bpp, srcpitch, data);
data = temp;
}
@@ -5233,13 +5419,15 @@ namespace bgfx { namespace gl
GL_CHECK(glTexParameteri(target, GL_TEXTURE_MAG_FILTER, magFilter) );
GL_CHECK(glTexParameteri(target, GL_TEXTURE_MIN_FILTER, minFilter) );
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
- || s_renderGL->m_borderColorSupport)
+ if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) )
{
- if (hasBorderColor)
- {
- GL_CHECK(glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, _rgba) );
- }
+ GL_CHECK(glTexParameterf(target, GL_TEXTURE_LOD_BIAS, float(BGFX_CONFIG_MIP_LOD_BIAS) ) );
+ }
+
+ if (s_renderGL->m_borderColorSupport
+ && hasBorderColor)
+ {
+ GL_CHECK(glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, _rgba) );
}
if (0 != (flags & (BGFX_TEXTURE_MIN_ANISOTROPIC|BGFX_TEXTURE_MAG_ANISOTROPIC) )
@@ -5318,7 +5506,7 @@ namespace bgfx { namespace gl
void writeString(bx::WriterI* _writer, const char* _str)
{
- bx::write(_writer, _str, (int32_t)bx::strnlen(_str) );
+ bx::write(_writer, _str, (int32_t)bx::strLen(_str) );
}
void writeStringf(bx::WriterI* _writer, const char* _format, ...)
@@ -5335,15 +5523,15 @@ namespace bgfx { namespace gl
void strins(char* _str, const char* _insert)
{
- size_t len = bx::strnlen(_insert);
- bx::memMove(&_str[len], _str, bx::strnlen(_str)+1);
+ size_t len = bx::strLen(_insert);
+ bx::memMove(&_str[len], _str, bx::strLen(_str)+1);
bx::memCopy(_str, _insert, len);
}
void ShaderGL::create(Memory* _mem)
{
bx::MemoryReader reader(_mem->data, _mem->size);
- m_hash = bx::hashMurmur2A(_mem->data, _mem->size);
+ m_hash = bx::hash<bx::HashMurmur2A>(_mem->data, _mem->size);
uint32_t magic;
bx::read(&reader, magic);
@@ -5404,9 +5592,10 @@ namespace bgfx { namespace gl
if (0 != m_id)
{
- if (GL_COMPUTE_SHADER != m_type)
+ if (GL_COMPUTE_SHADER != m_type
+ && 0 != bx::strCmp(code, "#version 430", 12) )
{
- int32_t codeLen = (int32_t)bx::strnlen(code);
+ int32_t codeLen = (int32_t)bx::strLen(code);
int32_t tempLen = codeLen + (4<<10);
char* temp = (char*)alloca(tempLen);
bx::StaticMemoryBlockWriter writer(temp, tempLen);
@@ -5432,7 +5621,7 @@ namespace bgfx { namespace gl
bool usesShadowSamplers = !!bx::findIdentifierMatch(code, s_EXT_shadow_samplers);
bool usesTexture3D = s_extension[Extension::OES_texture_3D].m_supported
- && bx::findIdentifierMatch(code, s_OES_texture_3D)
+ && bx::findIdentifierMatch(code, s_texture3D)
;
bool usesTextureLod = !!bx::findIdentifierMatch(code, s_EXT_shader_texture_lod);
@@ -5506,7 +5695,8 @@ namespace bgfx { namespace gl
if (usesTextureLod)
{
BX_WARN(s_extension[Extension::ARB_shader_texture_lod].m_supported
- , "ARB_shader_texture_lod is used but not supported by GLES2 driver."
+ || s_extension[Extension::EXT_shader_texture_lod].m_supported
+ , "(ARB|EXT)_shader_texture_lod is used but not supported by GLES2 driver."
);
if (s_extension[Extension::ARB_shader_texture_lod].m_supported)
@@ -5523,11 +5713,23 @@ namespace bgfx { namespace gl
}
else
{
- writeString(&writer
- , "#define texture2DLod(_sampler, _coord, _level) texture2D(_sampler, _coord)\n"
- "#define texture2DProjLod(_sampler, _coord, _level) texture2DProj(_sampler, _coord)\n"
- "#define textureCubeLod(_sampler, _coord, _level) textureCube(_sampler, _coord)\n"
+ if(s_extension[Extension::EXT_shader_texture_lod].m_supported)
+ {
+ writeString(&writer
+ , "#extension GL_EXT_shader_texture_lod : enable\n"
+ "#define texture2DLod texture2DLodEXT\n"
+ "#define texture2DProjLod texture2DProjLodEXT\n"
+ "#define textureCubeLod textureCubeLodEXT\n"
);
+ }
+ else
+ {
+ writeString(&writer
+ , "#define texture2DLod(_sampler, _coord, _level) texture2D(_sampler, _coord)\n"
+ "#define texture2DProjLod(_sampler, _coord, _level) texture2DProj(_sampler, _coord)\n"
+ "#define textureCubeLod(_sampler, _coord, _level) textureCube(_sampler, _coord)\n"
+ );
+ }
}
}
@@ -5552,10 +5754,10 @@ namespace bgfx { namespace gl
if (insertFragDepth)
{
- const char* entry = bx::strnstr(temp, "void main ()");
+ const char* entry = bx::strFind(temp, "void main ()");
if (NULL != entry)
{
- char* brace = const_cast<char*>(bx::strnstr(entry, "{") );
+ char* brace = const_cast<char*>(bx::strFind(entry, "{") );
if (NULL != brace)
{
const char* end = bx::strmb(brace, '{', '}');
@@ -5582,15 +5784,17 @@ namespace bgfx { namespace gl
&& s_extension[Extension::ARB_shader_texture_lod].m_supported
&& bx::findIdentifierMatch(code, s_ARB_shader_texture_lod)
;
+ const bool usesGpuShader4 = !!bx::findIdentifierMatch(code, s_EXT_gpu_shader4);
const bool usesGpuShader5 = !!bx::findIdentifierMatch(code, s_ARB_gpu_shader5);
const bool usesIUsamplers = !!bx::findIdentifierMatch(code, s_uisamplers);
const bool usesTexelFetch = !!bx::findIdentifierMatch(code, s_texelFetch);
const bool usesTextureArray = !!bx::findIdentifierMatch(code, s_textureArray);
+ const bool usesTexture3D = !!bx::findIdentifierMatch(code, s_texture3D);
const bool usesTextureMS = !!bx::findIdentifierMatch(code, s_ARB_texture_multisample);
const bool usesPacking = !!bx::findIdentifierMatch(code, s_ARB_shading_language_packing);
- uint32_t version =
- usesIUsamplers || usesTexelFetch || usesGpuShader5 ? 130
+ uint32_t version = BX_ENABLED(BX_PLATFORM_OSX) ? 120
+ : usesTextureArray || usesTexture3D || usesIUsamplers|| usesTexelFetch || usesGpuShader5 ? 130
: usesTextureLod ? 120
: 120
;
@@ -5613,6 +5817,11 @@ namespace bgfx { namespace gl
}
}
+ if (usesGpuShader4)
+ {
+ writeString(&writer, "#extension GL_EXT_gpu_shader4 : enable\n");
+ }
+
if (usesGpuShader5)
{
writeString(&writer, "#extension GL_ARB_gpu_shader5 : enable\n");
@@ -5631,6 +5840,29 @@ namespace bgfx { namespace gl
if (usesTextureArray)
{
writeString(&writer, "#extension GL_EXT_texture_array : enable\n");
+
+ if (BX_ENABLED(BX_PLATFORM_OSX) )
+ {
+ writeString(&writer, "#define texture2DArrayLodEXT texture2DArray\n");
+ }
+ else
+ {
+ writeString(&writer, "#define texture2DArrayLodEXT texture2DArrayLod\n");
+ }
+ }
+
+ if (usesTexture3D)
+ {
+ writeString(&writer, "#define texture3DEXT texture3D\n");
+
+ if (BX_ENABLED(BX_PLATFORM_OSX) )
+ {
+ writeString(&writer, "#define texture3DLodEXT texture3D\n");
+ }
+ else
+ {
+ writeString(&writer, "#define texture3DLodEXT texture3DLod\n");
+ }
}
if (130 <= version)
@@ -5653,7 +5885,7 @@ namespace bgfx { namespace gl
{
char tmpFragData[16];
bx::snprintf(tmpFragData, BX_COUNTOF(tmpFragData), "gl_FragData[%d]", ii);
- fragData = bx::uint32_max(fragData, NULL == bx::strnstr(code, tmpFragData) ? 0 : ii+1);
+ fragData = bx::uint32_max(fragData, NULL == bx::strFind(code, tmpFragData) ? 0 : ii+1);
}
BGFX_FATAL(0 != fragData, Fatal::InvalidShader, "Unable to find and patch gl_FragData!");
@@ -5746,7 +5978,7 @@ namespace bgfx { namespace gl
{
char tmpFragData[16];
bx::snprintf(tmpFragData, BX_COUNTOF(tmpFragData), "gl_FragData[%d]", ii);
- fragData = bx::uint32_max(fragData, NULL == bx::strnstr(code, tmpFragData) ? 0 : ii+1);
+ fragData = bx::uint32_max(fragData, NULL == bx::strFind(code, tmpFragData) ? 0 : ii+1);
}
BGFX_FATAL(0 != fragData, Fatal::InvalidShader, "Unable to find and patch gl_FragData!");
@@ -5801,6 +6033,26 @@ namespace bgfx { namespace gl
code = temp;
}
+ else if (GL_COMPUTE_SHADER == m_type)
+ {
+ int32_t codeLen = (int32_t)bx::strLen(code);
+ int32_t tempLen = codeLen + (4<<10);
+ char* temp = (char*)alloca(tempLen);
+ bx::StaticMemoryBlockWriter writer(temp, tempLen);
+
+ writeString(&writer, "#version 430\n");
+ writeString(&writer, "#define texture2DLod textureLod\n");
+ writeString(&writer, "#define texture3DLod textureLod\n");
+ writeString(&writer, "#define textureCubeLod textureLod\n");
+ writeString(&writer, "#define texture2DGrad textureGrad\n");
+ writeString(&writer, "#define texture3DGrad textureGrad\n");
+ writeString(&writer, "#define textureCubeGrad textureGrad\n");
+
+ bx::write(&writer, code+bx::strLen("#version 430"), codeLen);
+ bx::write(&writer, '\0');
+
+ code = temp;
+ }
GL_CHECK(glShaderSource(m_id, 1, (const GLchar**)&code, NULL) );
GL_CHECK(glCompileShader(m_id) );
@@ -5810,7 +6062,24 @@ namespace bgfx { namespace gl
if (0 == compiled)
{
- BX_TRACE("\n####\n%s\n####", code);
+ LineReader lineReader(code);
+ bx::Error err;
+ for (int32_t line = 1; err.isOk(); ++line)
+ {
+ char str[4096];
+ int32_t len = bx::read(&lineReader, str, BX_COUNTOF(str)-1, &err);
+
+ if (err.isOk() )
+ {
+ str[len] = '\0';
+ const char* eol = bx::streol(str);
+ if (eol != str)
+ {
+ *const_cast<char*>(eol) = '\0';
+ }
+ BX_TRACE("%3d %s", line, str);
+ }
+ }
GLsizei len;
char log[1024];
@@ -5883,10 +6152,10 @@ namespace bgfx { namespace gl
}
GLenum attachment = GL_COLOR_ATTACHMENT0 + colorIdx;
- TextureFormat::Enum format = (TextureFormat::Enum)texture.m_textureFormat;
- if (isDepth(format) )
+ bimg::TextureFormat::Enum format = bimg::TextureFormat::Enum(texture.m_textureFormat);
+ if (bimg::isDepth(format) )
{
- const ImageBlockInfo& info = getBlockInfo(format);
+ const bimg::ImageBlockInfo& info = bimg::getBlockInfo(format);
if (0 < info.stencilBits)
{
attachment = GL_DEPTH_STENCIL_ATTACHMENT;
@@ -5973,7 +6242,7 @@ namespace bgfx { namespace gl
if (0 != texture.m_id)
{
GLenum attachment = GL_COLOR_ATTACHMENT0 + colorIdx;
- if (!isDepth( (TextureFormat::Enum)texture.m_textureFormat) )
+ if (!bimg::isDepth(bimg::TextureFormat::Enum(texture.m_textureFormat) ) )
{
++colorIdx;
@@ -6181,15 +6450,54 @@ namespace bgfx { namespace gl
Query& query = m_query[(m_control.m_read + ii) % size];
if (query.m_handle.idx == _handle.idx)
{
- query.m_handle.idx = bgfx::invalidHandle;
+ query.m_handle.idx = bgfx::kInvalidHandle;
}
}
}
- void RendererContextGL::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter)
+ void RendererContextGL::submitBlit(BlitState& _bs, uint16_t _view)
{
- BGFX_GPU_PROFILER_BEGIN_DYNAMIC("rendererSubmit");
+ if (m_blitSupported)
+ {
+ while (_bs.hasItem(_view) )
+ {
+ const BlitItem& bi = _bs.advance();
+
+ const TextureGL& src = m_textures[bi.m_src.idx];
+ const TextureGL& dst = m_textures[bi.m_dst.idx];
+
+ uint32_t srcWidth = bx::uint32_min(src.m_width, bi.m_srcX + bi.m_width) - bi.m_srcX;
+ uint32_t srcHeight = bx::uint32_min(src.m_height, bi.m_srcY + bi.m_height) - bi.m_srcY;
+ uint32_t srcDepth = bx::uint32_min(src.m_depth, bi.m_srcZ + bi.m_depth) - bi.m_srcZ;
+ uint32_t dstWidth = bx::uint32_min(dst.m_width, bi.m_dstX + bi.m_width) - bi.m_dstX;
+ uint32_t dstHeight = bx::uint32_min(dst.m_height, bi.m_dstY + bi.m_height) - bi.m_dstY;
+ uint32_t dstDepth = bx::uint32_min(dst.m_depth, bi.m_dstZ + bi.m_depth) - bi.m_dstZ;
+ uint32_t width = bx::uint32_min(srcWidth, dstWidth);
+ uint32_t height = bx::uint32_min(srcHeight, dstHeight);
+ uint32_t depth = bx::uint32_min(srcDepth, dstDepth);
+
+ GL_CHECK(glCopyImageSubData(src.m_id
+ , src.m_target
+ , bi.m_srcMip
+ , bi.m_srcX
+ , bi.m_srcY
+ , bi.m_srcZ
+ , dst.m_id
+ , dst.m_target
+ , bi.m_dstMip
+ , bi.m_dstX
+ , bi.m_dstY
+ , bi.m_dstZ
+ , width
+ , height
+ , bx::uint32_imax(depth, 1)
+ ) );
+ }
+ }
+ }
+ void RendererContextGL::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter)
+ {
if (_render->m_capture)
{
renderDocTriggerCapture();
@@ -6202,7 +6510,6 @@ namespace bgfx { namespace gl
GL_CHECK(glBindVertexArray(0) );
GL_CHECK(glDeleteVertexArrays(1, &m_vao) );
m_vao = 0;
- m_vaoStateCache.invalidate();
}
m_glctx.makeCurrent(NULL);
@@ -6217,12 +6524,15 @@ namespace bgfx { namespace gl
updateResolution(_render->m_resolution);
- int64_t elapsed = -bx::getHPCounter();
+ int64_t timeBegin = bx::getHPCounter();
int64_t captureElapsed = 0;
- if (m_timerQuerySupport)
+ uint32_t frameQueryIdx = UINT32_MAX;
+
+ if (m_timerQuerySupport
+ && !BX_ENABLED(BX_PLATFORM_OSX) )
{
- m_gpuTimer.begin();
+ frameQueryIdx = m_gpuTimer.begin(BGFX_CONFIG_MAX_VIEWS);
}
if (0 < _render->m_iboffset)
@@ -6244,21 +6554,21 @@ namespace bgfx { namespace gl
currentState.m_stateFlags = BGFX_STATE_NONE;
currentState.m_stencil = packStencil(BGFX_STENCIL_NONE, BGFX_STENCIL_NONE);
+ RenderBind currentBind;
+ currentBind.clear();
+
_render->m_hmdInitialized = m_ovr.isInitialized();
const bool hmdEnabled = m_ovr.isEnabled();
static ViewState viewState;
viewState.reset(_render, hmdEnabled);
- uint16_t programIdx = invalidHandle;
+ uint16_t programIdx = kInvalidHandle;
SortKey key;
uint16_t view = UINT16_MAX;
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
- BlitKey blitKey;
- blitKey.decode(_render->m_blitKeys[0]);
- uint16_t numBlitItems = _render->m_numBlitItems;
- uint16_t blitItem = 0;
+ BlitState bs(_render);
int32_t resolutionHeight = hmdEnabled
? _render->m_hmd.height
@@ -6279,7 +6589,6 @@ namespace bgfx { namespace gl
: GL_FILL
) );
- GLuint currentVao = 0;
bool wasCompute = false;
bool viewHasScissor = false;
Rect viewScissorRect;
@@ -6287,9 +6596,10 @@ namespace bgfx { namespace gl
uint16_t discardFlags = BGFX_CLEAR_NONE;
const bool blendIndependentSupported = s_extension[Extension::ARB_draw_buffers_blend].m_supported;
- const bool computeSupported = (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) && s_extension[Extension::ARB_compute_shader].m_supported)
- || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 31)
- ;
+ const bool computeSupported = false
+ || (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) && s_extension[Extension::ARB_compute_shader].m_supported)
+ || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 31)
+ ;
uint32_t statsNumPrimsSubmitted[BX_COUNTOF(s_primInfo)] = {};
uint32_t statsNumPrimsRendered[BX_COUNTOF(s_primInfo)] = {};
@@ -6297,6 +6607,13 @@ namespace bgfx { namespace gl
uint32_t statsNumIndices = 0;
uint32_t statsKeyType[2] = {};
+ Profiler<TimerQueryGL> profiler(
+ _render
+ , m_gpuTimer
+ , s_viewName
+ , m_timerQuerySupport && !BX_ENABLED(BX_PLATFORM_OSX)
+ );
+
if (m_occlusionQuerySupport)
{
m_occlusionQuery.resolve(_render);
@@ -6310,9 +6627,9 @@ namespace bgfx { namespace gl
bool viewRestart = false;
uint8_t restartState = 0;
- viewState.m_rect = _render->m_rect[0];
+ viewState.m_rect = _render->m_view[0].m_rect;
- int32_t numItems = _render->m_num;
+ int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
@@ -6324,7 +6641,9 @@ namespace bgfx { namespace gl
|| item == numItems
;
- const RenderItem& renderItem = _render->m_renderItem[_render->m_sortValues[item] ];
+ const uint32_t itemIdx = _render->m_sortValues[item];
+ const RenderItem& renderItem = _render->m_renderItem[itemIdx];
+ const RenderBind& renderBind = _render->m_renderItemBind[itemIdx];
++item;
if (viewChanged)
@@ -6339,11 +6658,11 @@ namespace bgfx { namespace gl
}
view = key.m_view;
- programIdx = invalidHandle;
+ programIdx = kInvalidHandle;
- if (_render->m_fb[view].idx != fbh.idx)
+ if (_render->m_view[view].m_fbh.idx != fbh.idx)
{
- fbh = _render->m_fb[view];
+ fbh = _render->m_view[view].m_fbh;
resolutionHeight = hmdEnabled
? _render->m_hmd.height
: _render->m_resolution.m_height
@@ -6351,7 +6670,7 @@ namespace bgfx { namespace gl
resolutionHeight = setFrameBuffer(fbh, resolutionHeight, discardFlags);
}
- viewRestart = ( (BGFX_VIEW_STEREO == (_render->m_viewFlags[view] & BGFX_VIEW_STEREO) ) );
+ viewRestart = ( (BGFX_VIEW_STEREO == (_render->m_view[view].m_flags & BGFX_VIEW_STEREO) ) );
viewRestart &= hmdEnabled;
if (viewRestart)
{
@@ -6371,13 +6690,12 @@ namespace bgfx { namespace gl
if (item > 1)
{
- BGFX_GPU_PROFILER_END();
- BGFX_PROFILER_END();
+ profiler.end();
}
- BGFX_PROFILER_BEGIN_DYNAMIC(s_viewName[view]);
- BGFX_GPU_PROFILER_BEGIN_DYNAMIC(s_viewName[view]);
- viewState.m_rect = _render->m_rect[view];
+ profiler.begin(view);
+
+ viewState.m_rect = _render->m_view[view].m_rect;
if (viewRestart)
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
@@ -6409,7 +6727,7 @@ namespace bgfx { namespace gl
}
}
- const Rect& scissorRect = _render->m_scissor[view];
+ const Rect& scissorRect = _render->m_view[view].m_scissor;
viewHasScissor = !scissorRect.isZero();
viewScissorRect = viewHasScissor ? scissorRect : viewState.m_rect;
@@ -6419,13 +6737,12 @@ namespace bgfx { namespace gl
, viewState.m_rect.m_height
) );
- Clear& clear = _render->m_clear[view];
+ Clear& clear = _render->m_view[view].m_clear;
discardFlags = clear.m_flags & BGFX_CLEAR_DISCARD_MASK;
if (BGFX_CLEAR_NONE != (clear.m_flags & BGFX_CLEAR_MASK) )
{
clearQuad(_clearQuad, viewState.m_rect, clear, resolutionHeight, _render->m_colorPalette);
- currentVao = UINT32_MAX; // clearQuad will mess with VAO, invalidate it.
}
GL_CHECK(glDisable(GL_STENCIL_TEST) );
@@ -6434,45 +6751,7 @@ namespace bgfx { namespace gl
GL_CHECK(glEnable(GL_CULL_FACE) );
GL_CHECK(glDisable(GL_BLEND) );
- if (m_blitSupported)
- {
- const uint8_t blitView = SortKey::decodeView(encodedKey);
- for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
- {
- const BlitItem& bi = _render->m_blitItem[blitItem];
- blitKey.decode(_render->m_blitKeys[blitItem + 1]);
-
- const TextureGL& src = m_textures[bi.m_src.idx];
- const TextureGL& dst = m_textures[bi.m_dst.idx];
-
- uint32_t srcWidth = bx::uint32_min(src.m_width, bi.m_srcX + bi.m_width) - bi.m_srcX;
- uint32_t srcHeight = bx::uint32_min(src.m_height, bi.m_srcY + bi.m_height) - bi.m_srcY;
- uint32_t srcDepth = bx::uint32_min(src.m_depth, bi.m_srcZ + bi.m_depth) - bi.m_srcZ;
- uint32_t dstWidth = bx::uint32_min(dst.m_width, bi.m_dstX + bi.m_width) - bi.m_dstX;
- uint32_t dstHeight = bx::uint32_min(dst.m_height, bi.m_dstY + bi.m_height) - bi.m_dstY;
- uint32_t dstDepth = bx::uint32_min(dst.m_depth, bi.m_dstZ + bi.m_depth) - bi.m_dstZ;
- uint32_t width = bx::uint32_min(srcWidth, dstWidth);
- uint32_t height = bx::uint32_min(srcHeight, dstHeight);
- uint32_t depth = bx::uint32_min(srcDepth, dstDepth);
-
- GL_CHECK(glCopyImageSubData(src.m_id
- , src.m_target
- , bi.m_srcMip
- , bi.m_srcX
- , bi.m_srcY
- , bi.m_srcZ
- , dst.m_id
- , dst.m_target
- , bi.m_dstMip
- , bi.m_dstX
- , bi.m_dstY
- , bi.m_dstZ
- , width
- , height
- , bx::uint32_imax(depth, 1)
- ) );
- }
- }
+ submitBlit(bs, view);
}
if (isCompute)
@@ -6499,18 +6778,25 @@ namespace bgfx { namespace gl
GLbitfield barrier = 0;
for (uint32_t ii = 0; ii < BGFX_MAX_COMPUTE_BINDINGS; ++ii)
{
- const Binding& bind = compute.m_bind[ii];
- if (invalidHandle != bind.m_idx)
+ const Binding& bind = renderBind.m_bind[ii];
+ if (kInvalidHandle != bind.m_idx)
{
switch (bind.m_type)
{
+ case Binding::Texture:
+ {
+ TextureGL& texture = m_textures[bind.m_idx];
+ texture.commit(ii, bind.m_un.m_draw.m_textureFlags, _render->m_colorPalette);
+ }
+ break;
+
case Binding::Image:
{
const TextureGL& texture = m_textures[bind.m_idx];
GL_CHECK(glBindImageTexture(ii
, texture.m_id
, bind.m_un.m_compute.m_mip
- , texture.isCubeMap()?GL_TRUE:GL_FALSE
+ , texture.isCubeMap() ? GL_TRUE : GL_FALSE
, 0
, s_access[bind.m_un.m_compute.m_access]
, s_imageFormat[bind.m_un.m_compute.m_format])
@@ -6540,8 +6826,8 @@ namespace bgfx { namespace gl
if (0 != barrier)
{
- bool constantsChanged = compute.m_constBegin < compute.m_constEnd;
- rendererUpdateUniforms(this, _render->m_uniformBuffer, compute.m_constBegin, compute.m_constEnd);
+ bool constantsChanged = compute.m_uniformBegin < compute.m_uniformEnd;
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[compute.m_uniformIdx], compute.m_uniformBegin, compute.m_uniformEnd);
if (constantsChanged
&& NULL != program.m_constantBuffer)
@@ -6576,7 +6862,7 @@ namespace bgfx { namespace gl
{
if (isValid(currentState.m_indirectBuffer) )
{
- currentState.m_indirectBuffer.idx = invalidHandle;
+ currentState.m_indirectBuffer.idx = kInvalidHandle;
GL_CHECK(glBindBuffer(GL_DISPATCH_INDIRECT_BUFFER, 0) );
}
@@ -6616,11 +6902,9 @@ namespace bgfx { namespace gl
const uint64_t newFlags = draw.m_stateFlags;
uint64_t changedFlags = currentState.m_stateFlags ^ draw.m_stateFlags;
- currentState.m_stateFlags = newFlags;
const uint64_t newStencil = draw.m_stencil;
uint64_t changedStencil = currentState.m_stencil ^ draw.m_stencil;
- currentState.m_stencil = newStencil;
if (resetState)
{
@@ -6628,8 +6912,8 @@ namespace bgfx { namespace gl
currentState.m_scissor = !draw.m_scissor;
changedFlags = BGFX_STATE_MASK;
changedStencil = packStencil(BGFX_STENCIL_MASK, BGFX_STENCIL_MASK);
- currentState.m_stateFlags = newFlags;
- currentState.m_stencil = newStencil;
+
+ currentBind.clear();
}
uint16_t scissor = draw.m_scissor;
@@ -6656,7 +6940,7 @@ namespace bgfx { namespace gl
else
{
Rect scissorRect;
- scissorRect.setIntersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]);
+ scissorRect.setIntersect(viewScissorRect, _render->m_frameCache.m_rectCache.m_cache[scissor]);
if (scissorRect.isZeroArea() )
{
continue;
@@ -6671,6 +6955,9 @@ namespace bgfx { namespace gl
}
}
+ currentState.m_stateFlags = newFlags;
+ currentState.m_stencil = newStencil;
+
if (0 != changedStencil)
{
if (0 != newStencil)
@@ -6952,17 +7239,17 @@ namespace bgfx { namespace gl
}
bool programChanged = false;
- bool constantsChanged = draw.m_constBegin < draw.m_constEnd;
+ bool constantsChanged = draw.m_uniformBegin < draw.m_uniformEnd;
bool bindAttribs = false;
- rendererUpdateUniforms(this, _render->m_uniformBuffer, draw.m_constBegin, draw.m_constEnd);
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd);
if (key.m_program != programIdx)
{
programIdx = key.m_program;
- GLuint id = invalidHandle == programIdx ? 0 : m_program[programIdx].m_id;
+ GLuint id = kInvalidHandle == programIdx ? 0 : m_program[programIdx].m_id;
// Skip rendering if program index is valid, but program is invalid.
- programIdx = 0 == id ? invalidHandle : programIdx;
+ programIdx = 0 == id ? kInvalidHandle : programIdx;
GL_CHECK(glUseProgram(id) );
programChanged =
@@ -6970,7 +7257,7 @@ namespace bgfx { namespace gl
bindAttribs = true;
}
- if (invalidHandle != programIdx)
+ if (kInvalidHandle != programIdx)
{
ProgramGL& program = m_program[programIdx];
@@ -6985,16 +7272,38 @@ namespace bgfx { namespace gl
{
for (uint32_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage)
{
- const Binding& bind = draw.m_bind[stage];
- Binding& current = currentState.m_bind[stage];
+ const Binding& bind = renderBind.m_bind[stage];
+ Binding& current = currentBind.m_bind[stage];
if (current.m_idx != bind.m_idx
+ || current.m_type != bind.m_type
|| current.m_un.m_draw.m_textureFlags != bind.m_un.m_draw.m_textureFlags
|| programChanged)
{
- if (invalidHandle != bind.m_idx)
+ if (kInvalidHandle != bind.m_idx)
{
- TextureGL& texture = m_textures[bind.m_idx];
- texture.commit(stage, bind.m_un.m_draw.m_textureFlags, _render->m_colorPalette);
+ switch (bind.m_type)
+ {
+ case Binding::Texture:
+ {
+ TextureGL& texture = m_textures[bind.m_idx];
+ texture.commit(stage, bind.m_un.m_draw.m_textureFlags, _render->m_colorPalette);
+ }
+ break;
+
+ case Binding::IndexBuffer:
+ {
+ const IndexBufferGL& buffer = m_indexBuffers[bind.m_idx];
+ GL_CHECK(glBindBufferBase(GL_SHADER_STORAGE_BUFFER, stage, buffer.m_id) );
+ }
+ break;
+
+ case Binding::VertexBuffer:
+ {
+ const VertexBufferGL& buffer = m_vertexBuffers[bind.m_idx];
+ GL_CHECK(glBindBufferBase(GL_SHADER_STORAGE_BUFFER, stage, buffer.m_id) );
+ }
+ break;
+ }
}
}
@@ -7002,153 +7311,7 @@ namespace bgfx { namespace gl
}
}
- if (0 != defaultVao
- && 0 == draw.m_stream[0].m_startVertex
- && 0 == draw.m_instanceDataOffset)
- {
- bool diffStartVertex = false;
- bool diffStreamHandles = false;
- for (uint32_t idx = 0, streamMask = draw.m_streamMask, ntz = bx::uint32_cnttz(streamMask)
- ; 0 != streamMask
- ; streamMask >>= 1, idx += 1, ntz = bx::uint32_cnttz(streamMask)
- )
- {
- streamMask >>= ntz;
- idx += ntz;
-
- if (currentState.m_stream[idx].m_handle.idx != draw.m_stream[idx].m_handle.idx)
- {
- diffStreamHandles = true;
- break;
- }
-
- if (currentState.m_stream[idx].m_startVertex != draw.m_stream[idx].m_startVertex)
- {
- diffStartVertex = true;
- break;
- }
- }
-
- if (programChanged
- || currentState.m_streamMask != draw.m_streamMask
- || currentState.m_indexBuffer.idx != draw.m_indexBuffer.idx
- || currentState.m_instanceDataOffset != draw.m_instanceDataOffset
- || currentState.m_instanceDataStride != draw.m_instanceDataStride
- || currentState.m_instanceDataBuffer.idx != draw.m_instanceDataBuffer.idx
- || diffStartVertex
- || diffStreamHandles)
- {
- bx::HashMurmur2A murmur;
- murmur.begin();
-
- for (uint32_t idx = 0, streamMask = draw.m_streamMask, ntz = bx::uint32_cnttz(streamMask)
- ; 0 != streamMask
- ; streamMask >>= 1, idx += 1, ntz = bx::uint32_cnttz(streamMask)
- )
- {
- streamMask >>= ntz;
- idx += ntz;
-
- const Stream& stream = draw.m_stream[idx];
- murmur.add(stream.m_handle.idx);
-
- if (isValid(stream.m_handle) )
- {
- const VertexBufferGL& vb = m_vertexBuffers[stream.m_handle.idx];
- uint16_t decl = !isValid(vb.m_decl) ? stream.m_decl.idx : vb.m_decl.idx;
- murmur.add(decl);
- }
-
- currentState.m_stream[idx].m_handle = stream.m_handle;
- currentState.m_stream[idx].m_startVertex = stream.m_startVertex;
- }
- currentState.m_streamMask = draw.m_streamMask;
-
- murmur.add(draw.m_indexBuffer.idx);
- murmur.add(draw.m_instanceDataBuffer.idx);
- murmur.add(draw.m_instanceDataOffset);
- murmur.add(draw.m_instanceDataStride);
- murmur.add(programIdx);
- uint32_t hash = murmur.end();
-
- currentState.m_indexBuffer = draw.m_indexBuffer;
- currentState.m_instanceDataOffset = draw.m_instanceDataOffset;
- currentState.m_instanceDataStride = draw.m_instanceDataStride;
-
- GLuint id = m_vaoStateCache.find(hash);
- if (UINT32_MAX != id)
- {
- currentVao = id;
- GL_CHECK(glBindVertexArray(id) );
- }
- else
- {
- id = m_vaoStateCache.add(hash);
- currentVao = id;
- GL_CHECK(glBindVertexArray(id) );
-
- program.add(hash);
-
- program.bindAttributesBegin();
- for (uint32_t idx = 0, streamMask = draw.m_streamMask, ntz = bx::uint32_cnttz(streamMask)
- ; 0 != streamMask
- ; streamMask >>= 1, idx += 1, ntz = bx::uint32_cnttz(streamMask)
- )
- {
- streamMask >>= ntz;
- idx += ntz;
-
- const Stream& stream = draw.m_stream[idx];
-
- if (isValid(stream.m_handle) )
- {
- VertexBufferGL& vb = m_vertexBuffers[stream.m_handle.idx];
- vb.add(hash);
-
- uint16_t decl = !isValid(vb.m_decl) ? stream.m_decl.idx : vb.m_decl.idx;
- GL_CHECK(glBindBuffer(GL_ARRAY_BUFFER, vb.m_id) );
- program.bindAttributes(m_vertexDecls[decl], stream.m_startVertex);
- }
-
- if (isValid(draw.m_instanceDataBuffer) )
- {
- VertexBufferGL& instanceVb = m_vertexBuffers[draw.m_instanceDataBuffer.idx];
- instanceVb.add(hash);
- GL_CHECK(glBindBuffer(GL_ARRAY_BUFFER, instanceVb.m_id) );
- program.bindInstanceData(draw.m_instanceDataStride, draw.m_instanceDataOffset);
- }
- }
- program.bindAttributesEnd();
-
- if (isValid(draw.m_indexBuffer) )
- {
- IndexBufferGL& ib = m_indexBuffers[draw.m_indexBuffer.idx];
- ib.add(hash);
- GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib.m_id) );
- }
- else
- {
- GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) );
- }
- }
- }
- }
- else
{
- if (0 != defaultVao
- && 0 != currentVao)
- {
- GL_CHECK(glBindVertexArray(defaultVao) );
- currentState.m_streamMask = 0;
- for (size_t ii = 0; ii < BGFX_CONFIG_MAX_VERTEX_STREAMS; ++ii)
- {
- currentState.m_stream[ii].m_handle.idx = invalidHandle;
- }
- currentState.m_indexBuffer.idx = invalidHandle;
- bindAttribs = true;
- currentVao = 0;
- }
-
bool diffStreamHandles = false;
for (uint32_t idx = 0, streamMask = draw.m_streamMask, ntz = bx::uint32_cnttz(streamMask)
; 0 != streamMask
@@ -7196,7 +7359,7 @@ namespace bgfx { namespace gl
currentState.m_indexBuffer = draw.m_indexBuffer;
uint16_t handle = draw.m_indexBuffer.idx;
- if (invalidHandle != handle)
+ if (kInvalidHandle != handle)
{
IndexBufferGL& ib = m_indexBuffers[handle];
GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib.m_id) );
@@ -7335,7 +7498,7 @@ namespace bgfx { namespace gl
{
if (isValid(currentState.m_indirectBuffer) )
{
- currentState.m_indirectBuffer.idx = invalidHandle;
+ currentState.m_indirectBuffer.idx = kInvalidHandle;
GL_CHECK(glBindBuffer(GL_DRAW_INDIRECT_BUFFER, 0) );
}
@@ -7405,6 +7568,8 @@ namespace bgfx { namespace gl
}
}
+ submitBlit(bs, BGFX_CONFIG_MAX_VIEWS);
+
blitMsaaFbo();
if (m_vaoSupport)
@@ -7412,7 +7577,7 @@ namespace bgfx { namespace gl
GL_CHECK(glBindVertexArray(m_vao) );
}
- if (0 < _render->m_num)
+ if (0 < _render->m_numRenderItems)
{
if (0 != (m_resolution.m_flags & BGFX_RESET_FLUSH_AFTER_RENDER) )
{
@@ -7423,24 +7588,13 @@ namespace bgfx { namespace gl
capture();
captureElapsed += bx::getHPCounter();
- BGFX_GPU_PROFILER_END();
- BGFX_PROFILER_END();
+ profiler.end();
}
}
- BGFX_GPU_PROFILER_END();
-
m_glctx.makeCurrent(NULL);
- int64_t now = bx::getHPCounter();
- elapsed += now;
-
- static int64_t last = now;
-
- Stats& perfStats = _render->m_perfStats;
- perfStats.cpuTimeBegin = last;
-
- int64_t frameTime = now - last;
- last = now;
+ int64_t timeEnd = bx::getHPCounter();
+ int64_t frameTime = timeEnd - timeBegin;
static int64_t min = frameTime;
static int64_t max = frameTime;
@@ -7450,43 +7604,45 @@ namespace bgfx { namespace gl
static uint32_t maxGpuLatency = 0;
static double maxGpuElapsed = 0.0f;
double elapsedGpuMs = 0.0;
- uint64_t elapsedGl = 0;
- if (m_timerQuerySupport)
+ if (UINT32_MAX != frameQueryIdx)
{
- m_gpuTimer.end();
- do
- {
- elapsedGl = m_gpuTimer.m_elapsed;
- elapsedGpuMs = double(elapsedGl)/1e6;
- maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
- }
- while (m_gpuTimer.get() );
+ m_gpuTimer.end(frameQueryIdx);
- maxGpuLatency = bx::uint32_imax(maxGpuLatency, m_gpuTimer.m_control.available()-1);
+ const TimerQueryGL::Result& result = m_gpuTimer.m_result[BGFX_CONFIG_MAX_VIEWS];
+ double toGpuMs = 1000.0 / 1e9;
+ elapsedGpuMs = (result.m_end - result.m_begin) * toGpuMs;
+ maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
+
+ maxGpuLatency = bx::uint32_imax(maxGpuLatency, result.m_pending-1);
}
const int64_t timerFreq = bx::getHPFrequency();
- perfStats.cpuTimeEnd = now;
+ Stats& perfStats = _render->m_perfStats;
+ perfStats.cpuTimeBegin = timeBegin;
+ perfStats.cpuTimeEnd = timeEnd;
perfStats.cpuTimerFreq = timerFreq;
- perfStats.gpuTimeBegin = m_gpuTimer.m_begin;
- perfStats.gpuTimeEnd = m_gpuTimer.m_end;
+ const TimerQueryGL::Result& result = m_gpuTimer.m_result[BGFX_CONFIG_MAX_VIEWS];
+ perfStats.gpuTimeBegin = result.m_begin;
+ perfStats.gpuTimeEnd = result.m_end;
perfStats.gpuTimerFreq = 1000000000;
perfStats.numDraw = statsKeyType[0];
perfStats.numCompute = statsKeyType[1];
perfStats.maxGpuLatency = maxGpuLatency;
+ perfStats.gpuMemoryMax = -INT64_MAX;
+ perfStats.gpuMemoryUsed = -INT64_MAX;
if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) )
{
m_needPresent = true;
TextVideoMem& tvm = m_textVideoMem;
- static int64_t next = now;
+ static int64_t next = timeEnd;
- if (now >= next)
+ if (timeEnd >= next)
{
- next = now + timerFreq;
+ next = timeEnd + timerFreq;
double freq = double(timerFreq);
double toMs = 1000.0/freq;
@@ -7524,9 +7680,9 @@ namespace bgfx { namespace gl
, !!(m_resolution.m_flags&BGFX_RESET_MAXANISOTROPY) ? '\xfe' : ' '
);
- double elapsedCpuMs = double(elapsed)*toMs;
+ double elapsedCpuMs = double(frameTime)*toMs;
tvm.printf(10, pos++, 0x8e, " Submitted: %5d (draw %5d, compute %4d) / CPU %7.4f [ms] %c GPU %7.4f [ms] (latency %d) "
- , _render->m_num
+ , _render->m_numRenderItems
, statsKeyType[0]
, statsKeyType[1]
, elapsedCpuMs
@@ -7553,15 +7709,14 @@ namespace bgfx { namespace gl
}
tvm.printf(10, pos++, 0x8e, " Indices: %7d ", statsNumIndices);
- tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
+// tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
tvm.printf(10, pos++, 0x8e, " DVB size: %7d ", _render->m_vboffset);
tvm.printf(10, pos++, 0x8e, " DIB size: %7d ", _render->m_iboffset);
pos++;
tvm.printf(10, pos++, 0x8e, " State cache: ");
- tvm.printf(10, pos++, 0x8e, " VAO | Sampler ");
- tvm.printf(10, pos++, 0x8e, " %6d | %6d "
- , m_vaoStateCache.getCount()
+ tvm.printf(10, pos++, 0x8e, " Sampler ");
+ tvm.printf(10, pos++, 0x8e, " %6d "
, m_samplerStateCache.getCount()
);
@@ -7661,12 +7816,6 @@ namespace bgfx { namespace gl
}
} } // namespace bgfx
-#undef BGFX_GPU_PROFILER_BIND
-#undef BGFX_GPU_PROFILER_UNBIND
-#undef BGFX_GPU_PROFILER_BEGIN
-#undef BGFX_GPU_PROFILER_BEGIN_DYNAMIC
-#undef BGFX_GPU_PROFILER_END
-
#else
namespace bgfx { namespace gl
diff --git a/3rdparty/bgfx/src/renderer_gl.h b/3rdparty/bgfx/src/renderer_gl.h
index 4d9778a0c4d..0e890a245ba 100644
--- a/3rdparty/bgfx/src/renderer_gl.h
+++ b/3rdparty/bgfx/src/renderer_gl.h
@@ -7,26 +7,27 @@
#define BGFX_RENDERER_GL_H_HEADER_GUARD
#define BGFX_USE_EGL (BGFX_CONFIG_RENDERER_OPENGLES && (0 \
- || BX_PLATFORM_ANDROID \
- || BX_PLATFORM_EMSCRIPTEN \
- || BX_PLATFORM_LINUX \
- || BX_PLATFORM_BSD \
- || BX_PLATFORM_QNX \
- || BX_PLATFORM_RPI \
- || BX_PLATFORM_STEAMLINK \
- || BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_ANDROID \
+ || BX_PLATFORM_BSD \
+ || BX_PLATFORM_EMSCRIPTEN \
+ || BX_PLATFORM_LINUX \
+ || BX_PLATFORM_NX \
+ || BX_PLATFORM_QNX \
+ || BX_PLATFORM_RPI \
+ || BX_PLATFORM_STEAMLINK \
+ || BX_PLATFORM_WINDOWS \
) )
#define BGFX_USE_WGL (BGFX_CONFIG_RENDERER_OPENGL && BX_PLATFORM_WINDOWS)
#define BGFX_USE_GLX (BGFX_CONFIG_RENDERER_OPENGL && (0 \
- || BX_PLATFORM_LINUX \
- || BX_PLATFORM_BSD \
+ || BX_PLATFORM_BSD \
+ || BX_PLATFORM_LINUX \
) )
#define BGFX_USE_GL_DYNAMIC_LIB (0 \
- || BX_PLATFORM_LINUX \
- || BX_PLATFORM_BSD \
- || BX_PLATFORM_OSX \
+ || BX_PLATFORM_BSD \
+ || BX_PLATFORM_LINUX \
+ || BX_PLATFORM_OSX \
|| BX_PLATFORM_WINDOWS \
)
@@ -82,11 +83,17 @@ typedef uint64_t GLuint64;
# define GL_HALF_FLOAT GL_HALF_FLOAT_OES
# define GL_RGBA8 GL_RGBA8_OES
# define GL_UNSIGNED_INT_2_10_10_10_REV GL_UNSIGNED_INT_2_10_10_10_REV_EXT
-# define GL_TEXTURE_3D GL_TEXTURE_3D_OES
+# ifndef GL_TEXTURE_3D
+# define GL_TEXTURE_3D GL_TEXTURE_3D_OES
+# endif // GL_TEXTURE_3D
# define GL_SAMPLER_3D GL_SAMPLER_3D_OES
# define GL_TEXTURE_WRAP_R GL_TEXTURE_WRAP_R_OES
-# define GL_MIN GL_MIN_EXT
-# define GL_MAX GL_MAX_EXT
+# ifndef GL_MIN
+# define GL_MIN GL_MIN_EXT
+# endif // GL_MIN
+# ifndef GL_MAX
+# define GL_MAX GL_MAX_EXT
+# endif // GL_MAX
# define GL_DEPTH_COMPONENT24 GL_DEPTH_COMPONENT24_OES
# define GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES
# define GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT32_OES
@@ -840,6 +847,14 @@ typedef uint64_t GLuint64;
# define GL_UPPER_LEFT 0x8CA2
#endif // GL_UPPER_LEFT
+#ifndef GL_SHADER
+# define GL_SHADER 0x82E1
+#endif // GL_SHADER
+
+#ifndef GL_TEXTURE
+# define GL_TEXTURE 0x1702
+#endif // GL_TEXTURE
+
// _KHR or _ARB...
#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
@@ -935,9 +950,11 @@ typedef uint64_t GLuint64;
# define GL_LINE_SMOOTH 0x0B20
#endif // GL_LINE_SMOOTH
-#if BX_PLATFORM_NACL
-# include "glcontext_ppapi.h"
-#elif BX_PLATFORM_WINDOWS
+#ifndef GL_TEXTURE_LOD_BIAS
+# define GL_TEXTURE_LOD_BIAS 0x8501
+#endif // GL_TEXTURE_LOD_BIAS
+
+#if BX_PLATFORM_WINDOWS
# include <windows.h>
#elif BX_PLATFORM_LINUX || BX_PLATFORM_BSD
# include "glcontext_glx.h"
@@ -997,87 +1014,6 @@ namespace bgfx { namespace gl
#define GL_IMPORT(_optional, _proto, _func, _import) extern _proto _func
#include "glimports.h"
- class VaoStateCache
- {
- public:
- GLuint add(uint32_t _hash)
- {
- invalidate(_hash);
-
- GLuint arrayId;
- GL_CHECK(glGenVertexArrays(1, &arrayId) );
-
- m_hashMap.insert(stl::make_pair(_hash, arrayId) );
-
- return arrayId;
- }
-
- GLuint find(uint32_t _hash)
- {
- HashMap::iterator it = m_hashMap.find(_hash);
- if (it != m_hashMap.end() )
- {
- return it->second;
- }
-
- return UINT32_MAX;
- }
-
- void invalidate(uint32_t _hash)
- {
- GL_CHECK(glBindVertexArray(0) );
-
- HashMap::iterator it = m_hashMap.find(_hash);
- if (it != m_hashMap.end() )
- {
- GL_CHECK(glDeleteVertexArrays(1, &it->second) );
- m_hashMap.erase(it);
- }
- }
-
- void invalidate()
- {
- GL_CHECK(glBindVertexArray(0) );
-
- for (HashMap::iterator it = m_hashMap.begin(), itEnd = m_hashMap.end(); it != itEnd; ++it)
- {
- GL_CHECK(glDeleteVertexArrays(1, &it->second) );
- }
- m_hashMap.clear();
- }
-
- uint32_t getCount() const
- {
- return uint32_t(m_hashMap.size() );
- }
-
- private:
- typedef stl::unordered_map<uint32_t, GLuint> HashMap;
- HashMap m_hashMap;
- };
-
- class VaoCacheRef
- {
- public:
- void add(uint32_t _hash)
- {
- m_vaoSet.insert(_hash);
- }
-
- void invalidate(VaoStateCache& _vaoCache)
- {
- for (VaoSet::iterator it = m_vaoSet.begin(), itEnd = m_vaoSet.end(); it != itEnd; ++it)
- {
- _vaoCache.invalidate(*it);
- }
-
- m_vaoSet.clear();
- }
-
- typedef stl::unordered_set<uint32_t> VaoSet;
- VaoSet m_vaoSet;
- };
-
class SamplerStateCache
{
public:
@@ -1173,14 +1109,8 @@ namespace bgfx { namespace gl
void destroy();
- void add(uint32_t _hash)
- {
- m_vcref.add(_hash);
- }
-
GLuint m_id;
uint32_t m_size;
- VaoCacheRef m_vcref;
uint16_t m_flags;
};
@@ -1227,16 +1157,10 @@ namespace bgfx { namespace gl
void destroy();
- void add(uint32_t _hash)
- {
- m_vcref.add(_hash);
- }
-
GLuint m_id;
GLenum m_target;
uint32_t m_size;
VertexDeclHandle m_decl;
- VaoCacheRef m_vcref;
};
struct TextureGL
@@ -1365,11 +1289,6 @@ namespace bgfx { namespace gl
}
}
- void add(uint32_t _hash)
- {
- m_vcref.add(_hash);
- }
-
GLuint m_id;
uint8_t m_unboundUsedAttrib[Attrib::Count]; // For tracking unbound used attributes between begin()/end().
@@ -1384,94 +1303,114 @@ namespace bgfx { namespace gl
UniformBuffer* m_constantBuffer;
PredefinedUniform m_predefined[PredefinedUniform::Count];
uint8_t m_numPredefined;
- VaoCacheRef m_vcref;
};
struct TimerQueryGL
{
TimerQueryGL()
- : m_control(BX_COUNTOF(m_frame) )
+ : m_control(BX_COUNTOF(m_query) )
{
}
void create()
{
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_frame); ++ii)
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_query); ++ii)
+ {
+ Query& query = m_query[ii];
+ query.m_ready = false;
+ GL_CHECK(glGenQueries(1, &query.m_begin) );
+ GL_CHECK(glGenQueries(1, &query.m_end) );
+ }
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_result); ++ii)
{
- Frame& frame = m_frame[ii];
- GL_CHECK(glGenQueries(1, &frame.m_begin) );
- GL_CHECK(glGenQueries(1, &frame.m_elapsed) );
+ Result& result = m_result[ii];
+ result.reset();
}
}
void destroy()
{
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_frame); ++ii)
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_query); ++ii)
{
- Frame& frame = m_frame[ii];
- GL_CHECK(glDeleteQueries(1, &frame.m_begin) );
- GL_CHECK(glDeleteQueries(1, &frame.m_elapsed) );
+ Query& query = m_query[ii];
+ GL_CHECK(glDeleteQueries(1, &query.m_begin) );
+ GL_CHECK(glDeleteQueries(1, &query.m_end) );
}
}
- void begin()
+ uint32_t begin(uint32_t _resultIdx)
{
while (0 == m_control.reserve(1) )
{
- get();
+ update();
}
- Frame& frame = m_frame[m_control.m_current];
- if (!BX_ENABLED(BX_PLATFORM_OSX) )
- {
- GL_CHECK(glQueryCounter(frame.m_begin
- , GL_TIMESTAMP
- ) );
- }
+ Result& result = m_result[_resultIdx];
+ ++result.m_pending;
- GL_CHECK(glBeginQuery(GL_TIME_ELAPSED
- , frame.m_elapsed
- ) );
+ const uint32_t idx = m_control.m_current;
+ Query& query = m_query[idx];
+ query.m_resultIdx = _resultIdx;
+ query.m_ready = false;
+
+ GL_CHECK(glQueryCounter(query.m_begin
+ , GL_TIMESTAMP
+ ) );
+
+ m_control.commit(1);
+
+ return idx;
}
- void end()
+ void end(uint32_t _idx)
{
- GL_CHECK(glEndQuery(GL_TIME_ELAPSED) );
- m_control.commit(1);
+ Query& query = m_query[_idx];
+ query.m_ready = true;
+
+ GL_CHECK(glQueryCounter(query.m_end
+ , GL_TIMESTAMP
+ ) );
+
+ while (update() )
+ {
+ }
}
- bool get()
+ bool update()
{
if (0 != m_control.available() )
{
- Frame& frame = m_frame[m_control.m_read];
+ Query& query = m_query[m_control.m_read];
+
+ if (!query.m_ready)
+ {
+ return false;
+ }
GLint available;
- GL_CHECK(glGetQueryObjectiv(frame.m_elapsed
- , GL_QUERY_RESULT_AVAILABLE
- , &available
- ) );
+ GL_CHECK(glGetQueryObjectiv(query.m_end
+ , GL_QUERY_RESULT_AVAILABLE
+ , &available
+ ) );
if (available)
{
- if (!BX_ENABLED(BX_PLATFORM_OSX) )
- {
- GL_CHECK(glGetQueryObjectui64v(frame.m_begin
- , GL_QUERY_RESULT
- , &m_begin
- ) );
- }
- else
- {
- m_begin = 0;
- }
-
- GL_CHECK(glGetQueryObjectui64v(frame.m_elapsed
- , GL_QUERY_RESULT
- , &m_elapsed
- ) );
- m_end = m_begin + m_elapsed;
m_control.consume(1);
+
+ Result& result = m_result[query.m_resultIdx];
+ --result.m_pending;
+
+ GL_CHECK(glGetQueryObjectui64v(query.m_begin
+ , GL_QUERY_RESULT
+ , &result.m_begin
+ ) );
+
+ GL_CHECK(glGetQueryObjectui64v(query.m_end
+ , GL_QUERY_RESULT
+ , &result.m_end
+ ) );
+
return true;
}
}
@@ -1479,17 +1418,31 @@ namespace bgfx { namespace gl
return false;
}
- uint64_t m_begin;
- uint64_t m_end;
- uint64_t m_elapsed;
+ struct Result
+ {
+ void reset()
+ {
+ m_begin = 0;
+ m_end = 0;
+ m_pending = 0;
+ }
+
+ uint64_t m_begin;
+ uint64_t m_end;
+ uint32_t m_pending;
+ };
- struct Frame
+ struct Query
{
- GLuint m_begin;
- GLuint m_elapsed;
+ GLuint m_begin;
+ GLuint m_end;
+ uint32_t m_resultIdx;
+ bool m_ready;
};
- Frame m_frame[4];
+ Result m_result[BGFX_CONFIG_MAX_VIEWS+1];
+
+ Query m_query[BGFX_CONFIG_MAX_VIEWS*4];
bx::RingBufferControl m_control;
};
@@ -1517,6 +1470,45 @@ namespace bgfx { namespace gl
bx::RingBufferControl m_control;
};
+ class LineReader : public bx::ReaderI
+ {
+ public:
+ LineReader(const void* _str)
+ : m_str( (const char*)_str)
+ , m_pos(0)
+ , m_size(bx::strLen( (const char*)_str) )
+ {
+ }
+
+ virtual int32_t read(void* _data, int32_t _size, bx::Error* _err) override
+ {
+ if (m_str[m_pos] == '\0'
+ || m_pos == m_size)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_EOF, "LineReader: EOF.");
+ return 0;
+ }
+
+ uint32_t pos = m_pos;
+ const char* str = &m_str[pos];
+ const char* nl = bx::strnl(str);
+ pos += (uint32_t)(nl - str);
+
+ const char* eol = &m_str[pos];
+
+ uint32_t size = bx::uint32_min(uint32_t(eol - str), _size);
+
+ bx::memCopy(_data, str, size);
+ m_pos += size;
+
+ return size;
+ }
+
+ const char* m_str;
+ uint32_t m_pos;
+ uint32_t m_size;
+ };
+
} /* namespace gl */ } // namespace bgfx
#endif // BGFX_RENDERER_GL_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/src/renderer_mtl.h b/3rdparty/bgfx/src/renderer_mtl.h
index 86893f70e4c..805fa1eaff7 100644
--- a/3rdparty/bgfx/src/renderer_mtl.h
+++ b/3rdparty/bgfx/src/renderer_mtl.h
@@ -224,14 +224,8 @@ namespace bgfx { namespace mtl
id<MTLLibrary> newLibraryWithSource(const char* _source)
{
- MTLCompileOptions* options = [MTLCompileOptions new];
- //NOTE: turned of as 'When using the fast variants, math functions execute more quickly,
- // but operate over a **LIMITED RANGE** and their behavior when handling NaN values is not defined.'
- if (BX_ENABLED(BX_PLATFORM_IOS))
- options.fastMathEnabled = NO;
-
NSError* error;
- id<MTLLibrary> lib = [m_obj newLibraryWithSource:@(_source) options:options error:&error];
+ id<MTLLibrary> lib = [m_obj newLibraryWithSource:@(_source) options:nil error:&error];
BX_WARN(NULL == error
, "Shader compilation failed: %s"
, [error.localizedDescription cStringUsingEncoding:NSASCIIStringEncoding]
@@ -332,6 +326,14 @@ namespace bgfx { namespace mtl
MTL_CLASS(Function)
NSArray* vertexAttributes() { return m_obj.vertexAttributes; }
+
+ void setLabel(const char* _label)
+ {
+ if ([m_obj respondsToSelector:@selector(setLabel:)])
+ {
+ [m_obj setLabel:@(_label)];
+ }
+ }
MTL_CLASS_END
MTL_CLASS(Library)
@@ -504,6 +506,11 @@ namespace bgfx { namespace mtl
{
return m_obj.textureType;
}
+
+ void setLabel(const char* _label)
+ {
+ [m_obj setLabel:@(_label)];
+ }
MTL_CLASS_END
typedef id<MTLComputePipelineState> ComputePipelineState;
@@ -732,8 +739,7 @@ namespace bgfx { namespace mtl
, m_vshConstantBufferAlignmentMask(0)
, m_fshConstantBufferSize(0)
, m_fshConstantBufferAlignmentMask(0)
- , m_usedVertexSamplerStages(0)
- , m_usedFragmentSamplerStages(0)
+ , m_samplerCount(0)
, m_numPredefined(0)
, m_processedUniforms(false)
{
@@ -759,8 +765,16 @@ namespace bgfx { namespace mtl
uint32_t m_vshConstantBufferAlignmentMask;
uint32_t m_fshConstantBufferSize;
uint32_t m_fshConstantBufferAlignmentMask;
- uint32_t m_usedVertexSamplerStages;
- uint32_t m_usedFragmentSamplerStages;
+
+ struct SamplerInfo
+ {
+ uint32_t m_index;
+ bgfx::UniformHandle m_uniform;
+ bool m_fragment;
+ };
+ SamplerInfo m_samplers[BGFX_CONFIG_MAX_TEXTURE_SAMPLERS];
+ uint32_t m_samplerCount;
+
PredefinedUniform m_predefined[PredefinedUniform::Count*2];
uint8_t m_numPredefined;
bool m_processedUniforms;
@@ -818,7 +832,7 @@ namespace bgfx { namespace mtl
, m_pixelFormatHash(0)
, m_num(0)
{
- m_depthHandle.idx = invalidHandle;
+ m_depthHandle.idx = kInvalidHandle;
}
void create(uint8_t _num, const Attachment* _attachment);
diff --git a/3rdparty/bgfx/src/renderer_mtl.mm b/3rdparty/bgfx/src/renderer_mtl.mm
index fbfcdf287f7..1b1251dbad9 100644
--- a/3rdparty/bgfx/src/renderer_mtl.mm
+++ b/3rdparty/bgfx/src/renderer_mtl.mm
@@ -21,33 +21,24 @@
/*
// known metal shader generation issues:
03-raymarch: OSX10.11.3 nothing is visible ( depth/color swap in fragment output struct fixed this )
- 14-shadowvolumes: in texture as stencil mode - columns/bunny are dark. in fs_shadowvolume_color_lighting SAMPLER2D(s_texStencil, 1) is
- converted to "texture2d<float> s_texStencil [[texture(0)]], sampler _mtlsmp_s_texStencil [[sampler(0)]]". Slot is 1 -> 0.
- 15-shadowmaps-simple: shader compilation error
- 16-shadowmaps: //problem with essl -> metal: SAMPLER2D(u_shadowMap0, 4); sampler index is lost. Shadowmap is set to slot 4, but
- metal shader uses sampler/texture slot 0. this could require changes outside of renderer_mtl?
- packFloatToRGBA needs highp. currently it uses half.
24-nbody: no generated compute shaders for metal
- 27-terrain: shaderc generates invalid metal shader for vs_terrain_height_texture. vertex output: half4 gl_Position [[position]], should be float4
- 31-rsm:
- <program source>:6:23: error: type 'half4' (aka 'vector_half4') is not valid for attribute 'position'
- half4 gl_Position [[position]];
-
Known issues(driver problems??):
OSX mac mini(late 2014), OSX10.11.3 : nanovg-rendering: color writemask off causes problem...
- 03-raymarch: OSX nothing is visible ( depth/color order should be swapped in fragment output struct)
- works fine with newer OSX
+ 03-raymarch: OSX nothing is visible ( depth/color order should be swapped in fragment output struct)
+ works fine with newer OSX
iPad mini 2, iOS 8.1.1: 21-deferred: scissor not working properly
- 26-occlusion: query doesn't work with two rendercommandencoders
- Only on this device ( no problem on iPad Air 2 with iOS9.3.1)
+ 26-occlusion: query doesn't work with two rendercommandencoders
+ Only on this device ( no problem on iPad Air 2 with iOS9.3.1)
TODOs:
+ - support multiple vertex buffers: 34-mvs
+
- framebufferMtl and TextureMtl resolve
- FrameBufferMtl::postReset recreate framebuffer???
- renderpass load/resolve
+ renderpass load/resolve
- capture with msaa: 07-callback
- implement fb discard. problematic with multiple views that has same fb...
- msaa color/depth/stencil is not saved. could have problem when we switch back to msaa framebuffer
@@ -94,7 +85,7 @@ namespace bgfx { namespace mtl
"LineStrip",
"Point",
};
- BX_STATIC_ASSERT(BX_COUNTOF(s_primInfo) == BX_COUNTOF(s_primName));
+ BX_STATIC_ASSERT(BX_COUNTOF(s_primInfo) == BX_COUNTOF(s_primName) );
static const char* s_attribName[] =
{
@@ -104,6 +95,8 @@ namespace bgfx { namespace mtl
"a_bitangent",
"a_color0",
"a_color1",
+ "a_color2",
+ "a_color3",
"a_indices",
"a_weight",
"a_texcoord0",
@@ -134,7 +127,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatUChar2, MTLVertexFormatUChar2Normalized },
{ MTLVertexFormatUChar2, MTLVertexFormatUChar2Normalized },
{ MTLVertexFormatUChar3, MTLVertexFormatUChar3Normalized },
- { MTLVertexFormatUChar4, MTLVertexFormatUChar4Normalized }
+ { MTLVertexFormatUChar4, MTLVertexFormatUChar4Normalized },
},
//Uint10
@@ -143,7 +136,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized },
{ MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized },
{ MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized },
- { MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized }
+ { MTLVertexFormatUInt1010102Normalized, MTLVertexFormatUInt1010102Normalized },
},
//Int16
@@ -151,7 +144,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatShort2, MTLVertexFormatShort2Normalized },
{ MTLVertexFormatShort2, MTLVertexFormatShort2Normalized },
{ MTLVertexFormatShort3, MTLVertexFormatShort3Normalized },
- { MTLVertexFormatShort4, MTLVertexFormatShort4Normalized }
+ { MTLVertexFormatShort4, MTLVertexFormatShort4Normalized },
},
//Half
@@ -159,7 +152,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatHalf2, MTLVertexFormatHalf2 },
{ MTLVertexFormatHalf2, MTLVertexFormatHalf2 },
{ MTLVertexFormatHalf3, MTLVertexFormatHalf3 },
- { MTLVertexFormatHalf4, MTLVertexFormatHalf4 }
+ { MTLVertexFormatHalf4, MTLVertexFormatHalf4 },
},
//Float
@@ -167,7 +160,7 @@ namespace bgfx { namespace mtl
{ MTLVertexFormatFloat, MTLVertexFormatFloat },
{ MTLVertexFormatFloat2, MTLVertexFormatFloat2 },
{ MTLVertexFormatFloat3, MTLVertexFormatFloat3 },
- { MTLVertexFormatFloat4, MTLVertexFormatFloat4 }
+ { MTLVertexFormatFloat4, MTLVertexFormatFloat4 },
},
};
BX_STATIC_ASSERT(AttribType::Count == BX_COUNTOF(s_attribType) );
@@ -217,7 +210,7 @@ namespace bgfx { namespace mtl
MTLCompareFunctionGreater,
MTLCompareFunctionNotEqual,
MTLCompareFunctionNever,
- MTLCompareFunctionAlways
+ MTLCompareFunctionAlways,
};
static const MTLStencilOperation s_stencilOp[] =
@@ -229,7 +222,7 @@ namespace bgfx { namespace mtl
MTLStencilOperationIncrementClamp,
MTLStencilOperationDecrementWrap,
MTLStencilOperationDecrementClamp,
- MTLStencilOperationInvert
+ MTLStencilOperationInvert,
};
static const MTLSamplerAddressMode s_textureAddress[] =
@@ -327,7 +320,7 @@ namespace bgfx { namespace mtl
{ MTLPixelFormat(42) /*ABGR4Unorm*/, MTLPixelFormatInvalid }, // RGBA4
{ MTLPixelFormat(41) /*A1BGR5Unorm*/, MTLPixelFormatInvalid }, // RGB5A1
{ MTLPixelFormatRGB10A2Unorm, MTLPixelFormatInvalid }, // RGB10A2
- { MTLPixelFormatRG11B10Float, MTLPixelFormatInvalid }, // R11G11B10F
+ { MTLPixelFormatRG11B10Float, MTLPixelFormatInvalid }, // RG11B10F
{ MTLPixelFormatInvalid, MTLPixelFormatInvalid }, // UnknownDepth
{ MTLPixelFormatDepth32Float, MTLPixelFormatInvalid }, // D16
{ MTLPixelFormatDepth32Float, MTLPixelFormatInvalid }, // D24
@@ -342,8 +335,8 @@ namespace bgfx { namespace mtl
int s_msaa[5] = { 1,2,4,8,16 };
- #define SHADER_FUNCTION_NAME ("xlatMtlMain")
- #define SHADER_UNIFORM_NAME ("_mtl_u")
+#define SHADER_FUNCTION_NAME ("xlatMtlMain")
+#define SHADER_UNIFORM_NAME ("_mtl_u")
struct RendererContextMtl : public RendererContextI
{
@@ -369,7 +362,7 @@ namespace bgfx { namespace mtl
{
BX_TRACE("Init.");
- m_fbh.idx = invalidHandle;
+ m_fbh.idx = kInvalidHandle;
bx::memSet(m_uniforms, 0, sizeof(m_uniforms) );
bx::memSet(&m_resolution, 0, sizeof(m_resolution) );
@@ -384,7 +377,7 @@ namespace bgfx { namespace mtl
if (NULL != NSClassFromString(@"CAMetalLayer") )
{
- if (NULL == m_metalLayer)
+ if (NULL == m_metalLayer)
#if BX_PLATFORM_IOS
{
CAMetalLayer* metalLayer = (CAMetalLayer*)g_platformData.nwh;
@@ -399,10 +392,19 @@ namespace bgfx { namespace mtl
}
#elif BX_PLATFORM_OSX
{
- NSWindow* nsWindow = (NSWindow*)g_platformData.nwh;
- [nsWindow.contentView setWantsLayer:YES];
- m_metalLayer = [CAMetalLayer layer];
- [nsWindow.contentView setLayer:m_metalLayer];
+ NSObject* nvh = (NSObject*)g_platformData.nwh;
+ if ([nvh isKindOfClass:[CAMetalLayer class]])
+ {
+ CAMetalLayer* metalLayer = (CAMetalLayer*)g_platformData.nwh;
+ m_metalLayer = metalLayer;
+ }
+ else
+ {
+ NSWindow* nsWindow = (NSWindow*)g_platformData.nwh;
+ [nsWindow.contentView setWantsLayer:YES];
+ m_metalLayer = [CAMetalLayer layer];
+ [nsWindow.contentView setLayer:m_metalLayer];
+ }
}
#endif // BX_PLATFORM_*
@@ -421,6 +423,7 @@ namespace bgfx { namespace mtl
return false;
}
+ retain(m_device);
m_metalLayer.device = m_device;
m_metalLayer.pixelFormat = MTLPixelFormatBGRA8Unorm;
@@ -447,29 +450,37 @@ namespace bgfx { namespace mtl
"struct xlatMtlShaderOutput { float4 gl_Position [[position]]; float2 v_texcoord0; }; \n"
"vertex xlatMtlShaderOutput xlatMtlMain (uint v_id [[ vertex_id ]]) \n"
"{\n"
- " xlatMtlShaderOutput _mtl_o;\n"
+ " xlatMtlShaderOutput _mtl_o;\n"
" if (v_id==0) { _mtl_o.gl_Position = float4(-1.0,-1.0,0.0,1.0); _mtl_o.v_texcoord0 = float2(0.0,1.0); } \n"
" else if (v_id==1) { _mtl_o.gl_Position = float4(3.0,-1.0,0.0,1.0); _mtl_o.v_texcoord0 = float2(2.0,1.0); } \n"
" else { _mtl_o.gl_Position = float4(-1.0,3.0,0.0,1.0); _mtl_o.v_texcoord0 = float2(0.0,-1.0); }\n"
" return _mtl_o;\n"
- "}\n";
+ "}\n"
+ ;
- const char* fshSource = "using namespace metal; \n"
- " struct xlatMtlShaderInput { float2 v_texcoord0; }; \n"
- " fragment half4 xlatMtlMain (xlatMtlShaderInput _mtl_i[[stage_in]], texture2d<float> s_texColor [[texture(0)]], sampler _mtlsmp_s_texColor [[sampler(0)]] ) \n"
- " { return half4(s_texColor.sample(_mtlsmp_s_texColor, _mtl_i.v_texcoord0)); } \n";
+ const char* fshSource =
+ "using namespace metal;\n"
+ "struct xlatMtlShaderInput { float2 v_texcoord0; };\n"
+ "fragment half4 xlatMtlMain (xlatMtlShaderInput _mtl_i[[stage_in]], texture2d<float> s_texColor [[texture(0)]], sampler _mtlsmp_s_texColor [[sampler(0)]] )\n"
+ "{\n"
+ " return half4(s_texColor.sample(_mtlsmp_s_texColor, _mtl_i.v_texcoord0) );\n"
+ "}\n"
+ ;
Library lib = m_device.newLibraryWithSource(vshSource);
if (NULL != lib)
{
m_screenshotBlitProgramVsh.m_function = lib.newFunctionWithName(SHADER_FUNCTION_NAME);
}
+
lib = m_device.newLibraryWithSource(fshSource);
if (NULL != lib)
{
m_screenshotBlitProgramFsh.m_function = lib.newFunctionWithName(SHADER_FUNCTION_NAME);
}
+
m_screenshotBlitProgram.create(&m_screenshotBlitProgramVsh, &m_screenshotBlitProgramFsh);
+ release(lib);
reset(m_renderPipelineDescriptor);
m_renderPipelineDescriptor.colorAttachments[0].pixelFormat = m_metalLayer.pixelFormat;
@@ -478,7 +489,7 @@ namespace bgfx { namespace mtl
m_screenshotBlitRenderPipelineState = m_device.newRenderPipelineStateWithDescriptor(m_renderPipelineDescriptor);
g_caps.supported |= (0
- | BGFX_CAPS_TEXTURE_COMPARE_LEQUAL //NOTE: on IOS Gpu Family 1/2 have to set compare in shader
+ | BGFX_CAPS_TEXTURE_COMPARE_LEQUAL
| BGFX_CAPS_TEXTURE_COMPARE_ALL
| BGFX_CAPS_TEXTURE_3D
| BGFX_CAPS_VERTEX_ATTRIB_HALF
@@ -486,28 +497,26 @@ namespace bgfx { namespace mtl
| BGFX_CAPS_INSTANCING
| BGFX_CAPS_FRAGMENT_DEPTH
| BGFX_CAPS_BLEND_INDEPENDENT
-// | BGFX_CAPS_COMPUTE // TODO: api/hw supports it but metal compute shaders are not yet supported
| BGFX_CAPS_INDEX32
-// | BGFX_CAPS_DRAW_INDIRECT // TODO: support on iOS9+gpu family3+ and on macOS
| BGFX_CAPS_TEXTURE_BLIT
| BGFX_CAPS_TEXTURE_READ_BACK
| BGFX_CAPS_OCCLUSION_QUERY
| BGFX_CAPS_ALPHA_TO_COVERAGE
- | BGFX_CAPS_TEXTURE_2D_ARRAY // supported on all platforms
+ | BGFX_CAPS_TEXTURE_2D_ARRAY
);
if (BX_ENABLED(BX_PLATFORM_IOS) )
{
if (iOSVersionEqualOrGreater("9.0.0") )
{
- g_caps.limits.maxTextureSize = m_device.supportsFeatureSet((MTLFeatureSet)4 /* iOS_GPUFamily3_v1 */) ? 16384 : 8192;
+ g_caps.limits.maxTextureSize = m_device.supportsFeatureSet( (MTLFeatureSet)4 /* iOS_GPUFamily3_v1 */) ? 16384 : 8192;
}
else
{
g_caps.limits.maxTextureSize = 4096;
}
- g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(m_device.supportsFeatureSet((MTLFeatureSet)1 /* MTLFeatureSet_iOS_GPUFamily2_v1 */) ? 8 : 4, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS));
+ g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(m_device.supportsFeatureSet( (MTLFeatureSet)1 /* MTLFeatureSet_iOS_GPUFamily2_v1 */) ? 8 : 4, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) );
}
else if (BX_ENABLED(BX_PLATFORM_OSX) )
{
@@ -518,7 +527,7 @@ namespace bgfx { namespace mtl
//todo: vendor id, device id, gpu enum
- m_hasPixelFormatDepth32Float_Stencil8 = false
+ m_hasPixelFormatDepth32Float_Stencil8 = false
|| BX_ENABLED(BX_PLATFORM_OSX)
|| (BX_ENABLED(BX_PLATFORM_IOS) && iOSVersionEqualOrGreater("9.0.0") )
;
@@ -533,7 +542,7 @@ namespace bgfx { namespace mtl
if (BX_ENABLED(BX_PLATFORM_OSX) )
{
- s_textureFormat[TextureFormat::R8].m_fmtSrgb = MTLPixelFormatInvalid;
+ s_textureFormat[TextureFormat::R8].m_fmtSrgb = MTLPixelFormatInvalid;
s_textureFormat[TextureFormat::RG8].m_fmtSrgb = MTLPixelFormatInvalid;
}
@@ -557,46 +566,45 @@ namespace bgfx { namespace mtl
: BGFX_CAPS_FORMAT_TEXTURE_NONE
;
- if (!isCompressed((TextureFormat::Enum)(ii)))
+ if (!bimg::isCompressed(bimg::TextureFormat::Enum(ii) ) )
{
- support |= BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER
- | BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA;
+ support |= 0
+ | BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER
+ | BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA
+ ;
}
- //TODO: additional caps flags
-// support |= BGFX_CAPS_FORMAT_TEXTURE_IMAGE : BGFX_CAPS_FORMAT_TEXTURE_NONE;
-
g_caps.formats[ii] = support;
}
- g_caps.formats[TextureFormat::A8] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER | BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
- g_caps.formats[TextureFormat::RG32I] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
- g_caps.formats[TextureFormat::RG32U] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
+ g_caps.formats[TextureFormat::A8 ] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER | BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
+ g_caps.formats[TextureFormat::RG32I ] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
+ g_caps.formats[TextureFormat::RG32U ] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RGBA32I] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RGBA32U] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
-
if (BX_ENABLED(BX_PLATFORM_IOS) )
{
- s_textureFormat[TextureFormat::D24S8].m_fmt = MTLPixelFormatDepth32Float;
+ s_textureFormat[TextureFormat::D24S8].m_fmt = MTLPixelFormatDepth32Float_Stencil8;
- g_caps.formats[TextureFormat::BC1] =
- g_caps.formats[TextureFormat::BC2] =
- g_caps.formats[TextureFormat::BC3] =
- g_caps.formats[TextureFormat::BC4] =
- g_caps.formats[TextureFormat::BC5] =
+ g_caps.formats[TextureFormat::BC1 ] =
+ g_caps.formats[TextureFormat::BC2 ] =
+ g_caps.formats[TextureFormat::BC3 ] =
+ g_caps.formats[TextureFormat::BC4 ] =
+ g_caps.formats[TextureFormat::BC5 ] =
g_caps.formats[TextureFormat::BC6H] =
- g_caps.formats[TextureFormat::BC7] = BGFX_CAPS_FORMAT_TEXTURE_NONE;
+ g_caps.formats[TextureFormat::BC7 ] = BGFX_CAPS_FORMAT_TEXTURE_NONE;
- g_caps.formats[TextureFormat::RG32F] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
+ g_caps.formats[TextureFormat::RG32F ] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
g_caps.formats[TextureFormat::RGBA32F] &= ~(BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA);
}
if (BX_ENABLED(BX_PLATFORM_OSX) )
{
- s_textureFormat[TextureFormat::D24S8].m_fmt = (MTLPixelFormat)(m_device.depth24Stencil8PixelFormatSupported() ?
- 255 /* Depth24Unorm_Stencil8 */ :
- MTLPixelFormatDepth32Float_Stencil8);
+ s_textureFormat[TextureFormat::D24S8].m_fmt = (MTLPixelFormat)(m_device.depth24Stencil8PixelFormatSupported()
+ ? 255 /* Depth24Unorm_Stencil8 */
+ : MTLPixelFormatDepth32Float_Stencil8)
+ ;
g_caps.formats[TextureFormat::ETC2 ] =
g_caps.formats[TextureFormat::ETC2A ] =
@@ -621,15 +629,14 @@ namespace bgfx { namespace mtl
}
}
- for(uint32_t ii=1; ii<5; ++ii)
+ for (uint32_t ii=1; ii<5; ++ii)
{
- if (!m_device.supportsTextureSampleCount(s_msaa[ii]))
+ if (!m_device.supportsTextureSampleCount(s_msaa[ii]) )
{
s_msaa[ii] = s_msaa[ii-1];
}
}
-
// Init reserved part of view name.
for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii)
{
@@ -658,6 +665,11 @@ namespace bgfx { namespace mtl
m_textures[ii].destroy();
}
+ m_screenshotBlitProgramVsh.destroy();
+ m_screenshotBlitProgramFsh.destroy();
+ m_screenshotBlitProgram.destroy();
+ MTL_RELEASE(m_screenshotBlitRenderPipelineState);
+
captureFinish();
MTL_RELEASE(m_depthStencilDescriptor);
@@ -669,10 +681,7 @@ namespace bgfx { namespace mtl
MTL_RELEASE(m_samplerDescriptor);
MTL_RELEASE(m_backBufferDepth);
- if (BX_ENABLED(BX_PLATFORM_IOS) )
- {
- MTL_RELEASE(m_backBufferStencil);
- }
+ MTL_RELEASE(m_backBufferStencil);
for (uint8_t i=0; i < MTL_MAX_FRAMES_IN_FLIGHT; ++i)
{
@@ -682,117 +691,117 @@ namespace bgfx { namespace mtl
MTL_RELEASE(m_device);
}
- RendererType::Enum getRendererType() const BX_OVERRIDE
+ RendererType::Enum getRendererType() const override
{
return RendererType::Metal;
}
- const char* getRendererName() const BX_OVERRIDE
+ const char* getRendererName() const override
{
return BGFX_RENDERER_METAL_NAME;
}
- void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) BX_OVERRIDE
+ void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_mem->size, _mem->data, _flags);
}
- void destroyIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE
+ void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) override
{
VertexDecl& decl = m_vertexDecls[_handle.idx];
bx::memCopy(&decl, &_decl, sizeof(VertexDecl) );
dump(decl);
}
- void destroyVertexDecl(VertexDeclHandle /*_handle*/) BX_OVERRIDE
+ void destroyVertexDecl(VertexDeclHandle /*_handle*/) override
{
}
- void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) BX_OVERRIDE
+ void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) override
{
m_vertexBuffers[_handle.idx].create(_mem->size, _mem->data, _declHandle, _flags);
}
- void destroyVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_size, NULL, _flags);
}
- void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_indexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
VertexDeclHandle decl = BGFX_INVALID_HANDLE;
m_vertexBuffers[_handle.idx].create(_size, NULL, decl, _flags);
}
- void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
m_vertexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createShader(ShaderHandle _handle, Memory* _mem) BX_OVERRIDE
+ void createShader(ShaderHandle _handle, Memory* _mem) override
{
m_shaders[_handle.idx].create(_mem);
}
- void destroyShader(ShaderHandle _handle) BX_OVERRIDE
+ void destroyShader(ShaderHandle _handle) override
{
m_shaders[_handle.idx].destroy();
}
- void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) BX_OVERRIDE
+ void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) override
{
m_program[_handle.idx].create(&m_shaders[_vsh.idx], &m_shaders[_fsh.idx]);
}
- void destroyProgram(ProgramHandle _handle) BX_OVERRIDE
+ void destroyProgram(ProgramHandle _handle) override
{
m_program[_handle.idx].destroy();
}
- void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) BX_OVERRIDE
+ void createTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags, uint8_t _skip) override
{
m_textures[_handle.idx].create(_mem, _flags, _skip);
}
- void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) BX_OVERRIDE
+ void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) override
{
}
- void updateTexture(TextureHandle _handle, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) BX_OVERRIDE
+ void updateTexture(TextureHandle _handle, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem) override
{
m_textures[_handle.idx].update(_side, _mip, _rect, _z, _depth, _pitch, _mem);
}
- void updateTextureEnd() BX_OVERRIDE
+ void updateTextureEnd() override
{
}
- void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) BX_OVERRIDE
+ void readTexture(TextureHandle _handle, void* _data, uint8_t _mip) override
{
m_cmd.kick(false, true);
m_commandBuffer = m_cmd.alloc();
@@ -803,7 +812,7 @@ namespace bgfx { namespace mtl
uint32_t srcWidth = bx::uint32_max(1, texture.m_ptr.width() >> _mip);
uint32_t srcHeight = bx::uint32_max(1, texture.m_ptr.height() >> _mip);
- const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(texture.m_textureFormat) );
+ const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(texture.m_textureFormat) );
MTLRegion region = { { 0, 0, 0 }, { srcWidth, srcHeight, 1 } };
@@ -811,7 +820,7 @@ namespace bgfx { namespace mtl
}
- void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) BX_OVERRIDE
+ void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) override
{
TextureMtl& texture = m_textures[_handle.idx];
@@ -839,35 +848,35 @@ namespace bgfx { namespace mtl
release(mem);
}
- void overrideInternal(TextureHandle _handle, uintptr_t _ptr) BX_OVERRIDE
+ void overrideInternal(TextureHandle _handle, uintptr_t _ptr) override
{
BX_UNUSED(_handle, _ptr);
}
- uintptr_t getInternal(TextureHandle _handle) BX_OVERRIDE
+ uintptr_t getInternal(TextureHandle _handle) override
{
BX_UNUSED(_handle);
return 0;
}
- void destroyTexture(TextureHandle _handle) BX_OVERRIDE
+ void destroyTexture(TextureHandle _handle) override
{
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) override
{
m_frameBuffers[_handle.idx].create(_num, _attachment);
}
- void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) override
{
uint16_t denseIdx = m_numWindows++;
m_windows[denseIdx] = _handle;
m_frameBuffers[_handle.idx].create(denseIdx, _nwh, _width, _height, _depthFormat);
}
- void destroyFrameBuffer(FrameBufferHandle _handle) BX_OVERRIDE
+ void destroyFrameBuffer(FrameBufferHandle _handle) override
{
uint16_t denseIdx = m_frameBuffers[_handle.idx].destroy();
if (UINT16_MAX != denseIdx)
@@ -882,7 +891,7 @@ namespace bgfx { namespace mtl
}
}
- void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) BX_OVERRIDE
+ void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) override
{
if (NULL != m_uniforms[_handle.idx])
{
@@ -896,7 +905,7 @@ namespace bgfx { namespace mtl
m_uniformReg.add(_handle, _name, data);
}
- void destroyUniform(UniformHandle _handle) BX_OVERRIDE
+ void destroyUniform(UniformHandle _handle) override
{
BX_FREE(g_allocator, m_uniforms[_handle.idx]);
m_uniforms[_handle.idx] = NULL;
@@ -904,14 +913,14 @@ namespace bgfx { namespace mtl
}
//cmdPre
- void requestScreenShotPre(const char* _filePath) BX_OVERRIDE
+ void requestScreenShotPre(const char* _filePath)
{
BX_UNUSED(_filePath);
m_saveScreenshot = true;
}
//cmdPost
- void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) BX_OVERRIDE
+ void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) override
{
BX_UNUSED(_handle);
@@ -946,23 +955,24 @@ namespace bgfx { namespace mtl
m_commandBuffer = m_cmd.alloc();
}
- void updateViewName(uint8_t _id, const char* _name) BX_OVERRIDE
+ void updateViewName(ViewId _id, const char* _name) override
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_PIX) )
{
- bx::strlcpy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
- , _name
- , BX_COUNTOF(s_viewName[0])-BGFX_CONFIG_MAX_VIEW_NAME_RESERVED
- );
+ bx::strCopy(
+ &s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
+ , BX_COUNTOF(s_viewName[0])-BGFX_CONFIG_MAX_VIEW_NAME_RESERVED
+ , _name
+ );
}
}
- void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE
+ void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) override
{
bx::memCopy(m_uniforms[_loc], _data, _size);
}
- void setMarker(const char* _marker, uint32_t /*_size*/) BX_OVERRIDE
+ void setMarker(const char* _marker, uint32_t /*_size*/) override
{
if (BX_ENABLED(BGFX_CONFIG_DEBUG_MTL) )
{
@@ -970,14 +980,34 @@ namespace bgfx { namespace mtl
}
}
- void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE
+ void invalidateOcclusionQuery(OcclusionQueryHandle _handle) override
{
m_occlusionQuery.invalidate(_handle);
}
- void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE;
+ virtual void setName(Handle _handle, const char* _name) override
+ {
+ switch (_handle.type)
+ {
+ case Handle::Shader:
+ m_shaders[_handle.idx].m_function.setLabel(_name);
+ break;
+
+ case Handle::Texture:
+ m_textures[_handle.idx].m_ptr.setLabel(_name);
+ break;
+
+ default:
+ BX_CHECK(false, "Invalid handle type?! %d", _handle.type);
+ break;
+ }
+ }
+
+ void submitBlit(BlitState& _bs, uint16_t _view);
+
+ void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) override;
- void blitSetup(TextVideoMemBlitter& _blitter) BX_OVERRIDE
+ void blitSetup(TextVideoMemBlitter& _blitter) override
{
RenderCommandEncoder rce = m_renderCommandEncoder;
@@ -991,9 +1021,10 @@ namespace bgfx { namespace mtl
FrameBufferHandle fbh = BGFX_INVALID_HANDLE;
- if ( NULL == rce || m_renderCommandEncoderFrameBufferHandle.idx != invalidHandle )
+ if (NULL == rce
+ || m_renderCommandEncoderFrameBufferHandle.idx != kInvalidHandle)
{
- if ( m_renderCommandEncoder )
+ if (m_renderCommandEncoder )
m_renderCommandEncoder.endEncoding();
RenderPassDescriptor renderPassDescriptor = newRenderPassDescriptor();
@@ -1045,7 +1076,7 @@ namespace bgfx { namespace mtl
}
float proj[16];
- bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f);
+ bx::mtxOrtho(proj, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f, 0.0f, false);
PredefinedUniform& predefined = program.m_predefined[0];
uint8_t flags = predefined.m_type;
@@ -1054,7 +1085,7 @@ namespace bgfx { namespace mtl
m_textures[_blitter.m_texture.idx].commit(0, false, true);
}
- void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) BX_OVERRIDE
+ void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) override
{
const uint32_t numVertices = _numIndices*4/6;
if (0 < numVertices)
@@ -1069,7 +1100,12 @@ namespace bgfx { namespace mtl
}
}
- void flip(HMD& /*_hmd*/) BX_OVERRIDE
+ bool isDeviceRemoved() override
+ {
+ return false;
+ }
+
+ void flip(HMD& /*_hmd*/) override
{
if (NULL == m_commandBuffer)
{
@@ -1077,7 +1113,7 @@ namespace bgfx { namespace mtl
}
// Present and commit the command buffer
- if ( NULL != m_drawable)
+ if (NULL != m_drawable)
{
m_commandBuffer.presentDrawable(m_drawable);
MTL_RELEASE(m_drawable);
@@ -1085,22 +1121,6 @@ namespace bgfx { namespace mtl
m_cmd.kick(true);
m_commandBuffer = 0;
-
- //TODO: support multiple windows on OSX
- /*
- if (m_flip)
- {
- for (uint32_t ii = 1, num = m_numWindows; ii < num; ++ii)
- {
- m_glctx.swap(m_frameBuffers[m_windows[ii].idx].m_swapChain);
- }
-
- if (!m_ovr.swap(_hmd) )
- {
- m_glctx.swap();
- }
- }
- */
}
void updateResolution(const Resolution& _resolution)
@@ -1110,17 +1130,16 @@ namespace bgfx { namespace mtl
: 1
;
- //TODO: there should be a way to specify if backbuffer needs stencil/depth.
const uint32_t maskFlags = ~(0
- | BGFX_RESET_HMD_RECENTER
- | BGFX_RESET_MAXANISOTROPY
- | BGFX_RESET_DEPTH_CLAMP
- | BGFX_RESET_SUSPEND
- );
+ | BGFX_RESET_HMD_RECENTER
+ | BGFX_RESET_MAXANISOTROPY
+ | BGFX_RESET_DEPTH_CLAMP
+ | BGFX_RESET_SUSPEND
+ );
- if (m_resolution.m_width != _resolution.m_width
- || m_resolution.m_height != _resolution.m_height
- || (m_resolution.m_flags&maskFlags) != (_resolution.m_flags&maskFlags) )
+ if (m_resolution.m_width != _resolution.m_width
+ || m_resolution.m_height != _resolution.m_height
+ || (m_resolution.m_flags&maskFlags) != (_resolution.m_flags&maskFlags) )
{
int sampleCount = s_msaa[(_resolution.m_flags&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT];
@@ -1128,9 +1147,9 @@ namespace bgfx { namespace mtl
m_metalLayer.drawableSize = CGSizeMake(_resolution.m_width, _resolution.m_height);
m_metalLayer.pixelFormat = (m_resolution.m_flags & BGFX_RESET_SRGB_BACKBUFFER)
- ? MTLPixelFormatBGRA8Unorm_sRGB
- : MTLPixelFormatBGRA8Unorm
- ;
+ ? MTLPixelFormatBGRA8Unorm_sRGB
+ : MTLPixelFormatBGRA8Unorm
+ ;
m_resolution = _resolution;
m_resolution.m_flags &= ~BGFX_RESET_INTERNAL_FORCE;
@@ -1148,7 +1167,8 @@ namespace bgfx { namespace mtl
m_textureDescriptor.mipmapLevelCount = 1;
m_textureDescriptor.sampleCount = sampleCount;
m_textureDescriptor.arrayLength = 1;
- if ( m_iOS9Runtime || m_macOS11Runtime )
+ if (m_iOS9Runtime
+ || m_macOS11Runtime)
{
m_textureDescriptor.cpuCacheMode = MTLCPUCacheModeDefaultCache;
m_textureDescriptor.storageMode = MTLStorageModePrivate;
@@ -1159,18 +1179,26 @@ namespace bgfx { namespace mtl
{
release(m_backBufferDepth);
}
+
m_backBufferDepth = m_device.newTextureWithDescriptor(m_textureDescriptor);
+ if (NULL != m_backBufferStencil)
+ {
+ release(m_backBufferStencil);
+ }
if (m_hasPixelFormatDepth32Float_Stencil8)
+ {
m_backBufferStencil = m_backBufferDepth;
+ retain(m_backBufferStencil);
+ }
else
{
m_textureDescriptor.pixelFormat = MTLPixelFormatStencil8;
m_backBufferStencil = m_device.newTextureWithDescriptor(m_textureDescriptor);
}
- if ( sampleCount > 1 )
+ if (sampleCount > 1)
{
if (NULL != m_backBufferColorMSAA)
{
@@ -1183,10 +1211,10 @@ namespace bgfx { namespace mtl
bx::HashMurmur2A murmur;
murmur.begin();
murmur.add(1);
- murmur.add((uint32_t)m_metalLayer.pixelFormat);
- murmur.add((uint32_t)m_backBufferDepth.pixelFormat());
- murmur.add((uint32_t)m_backBufferStencil.pixelFormat());
- murmur.add((uint32_t)sampleCount);
+ murmur.add( (uint32_t)m_metalLayer.pixelFormat);
+ murmur.add( (uint32_t)m_backBufferDepth.pixelFormat() );
+ murmur.add( (uint32_t)m_backBufferStencil.pixelFormat() );
+ murmur.add( (uint32_t)sampleCount);
m_backBufferPixelFormatHash = murmur.end();
for (uint32_t ii = 0; ii < BX_COUNTOF(m_frameBuffers); ++ii)
@@ -1199,7 +1227,7 @@ namespace bgfx { namespace mtl
m_textVideoMem.resize(false, _resolution.m_width, _resolution.m_height);
m_textVideoMem.clear();
- if ( prevMetalLayerPixelFormat != m_metalLayer.pixelFormat)
+ if (prevMetalLayerPixelFormat != m_metalLayer.pixelFormat)
{
MTL_RELEASE(m_screenshotBlitRenderPipelineState)
reset(m_renderPipelineDescriptor);
@@ -1242,19 +1270,19 @@ namespace bgfx { namespace mtl
MTLRegion region = { { 0, 0, 0 }, { m_resolution.m_width, m_resolution.m_height, 1 } };
- //TODO: enable screenshot target when capturing
m_screenshotTarget.getBytes(m_capture, 4*m_resolution.m_width, 0, region, 0, 0);
m_commandBuffer = m_cmd.alloc();
if (m_screenshotTarget.pixelFormat() == MTLPixelFormatRGBA8Uint)
{
- imageSwizzleBgra8(
+ bimg::imageSwizzleBgra8(
m_capture
+ , m_resolution.m_width*4
, m_resolution.m_width
, m_resolution.m_height
- , m_resolution.m_width*4
, m_capture
+ , m_resolution.m_width*4
);
}
@@ -1449,7 +1477,7 @@ namespace bgfx { namespace mtl
}
ProgramMtl& program = m_program[_clearQuad.m_program[numMrt-1].idx];
- m_renderCommandEncoder.setRenderPipelineState(program.getRenderPipelineState(state, 0, fbh, _clearQuad.m_vb->decl, 0));
+ m_renderCommandEncoder.setRenderPipelineState(program.getRenderPipelineState(state, 0, fbh, _clearQuad.m_vb->decl, 0) );
uint32_t fragmentUniformBufferSize = program.m_fshConstantBufferSize;
@@ -1469,9 +1497,10 @@ namespace bgfx { namespace mtl
bx::memCopy(mrtClear[ii], _palette[index], 16);
}
- bx::memCopy((uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset,
- mrtClear,
- bx::uint32_min(fragmentUniformBufferSize, sizeof(mrtClear)));
+ bx::memCopy( (uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset
+ , mrtClear
+ , bx::uint32_min(fragmentUniformBufferSize, sizeof(mrtClear) )
+ );
}
else
{
@@ -1483,9 +1512,10 @@ namespace bgfx { namespace mtl
_clear.m_index[3]*1.0f/255.0f,
};
- bx::memCopy((uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset,
- rgba,
- bx::uint32_min(fragmentUniformBufferSize, sizeof(rgba)));
+ bx::memCopy( (uint8_t*)m_uniformBuffer.contents() + m_uniformBufferFragmentOffset
+ , rgba
+ , bx::uint32_min(fragmentUniformBufferSize, sizeof(rgba) )
+ );
}
m_uniformBufferFragmentOffset += fragmentUniformBufferSize;
@@ -1541,20 +1571,23 @@ namespace bgfx { namespace mtl
{
if (!isValid(_fbh) )
{
- if ( NULL != m_backBufferColorMSAA )
+ if (NULL != m_backBufferColorMSAA)
{
renderPassDescriptor.colorAttachments[0].texture = m_backBufferColorMSAA;
- renderPassDescriptor.colorAttachments[0].resolveTexture = ((NULL != m_screenshotTarget) ?
- m_screenshotTarget.m_obj :
- currentDrawable().texture);
+ renderPassDescriptor.colorAttachments[0].resolveTexture = NULL != m_screenshotTarget
+ ? m_screenshotTarget.m_obj
+ : currentDrawable().texture
+ ;
}
else
{
- renderPassDescriptor.colorAttachments[0].texture = ((NULL != m_screenshotTarget) ?
- m_screenshotTarget.m_obj :
- currentDrawable().texture);
+ renderPassDescriptor.colorAttachments[0].texture = NULL != m_screenshotTarget
+ ? m_screenshotTarget.m_obj
+ : currentDrawable().texture
+ ;
}
- renderPassDescriptor.depthAttachment.texture = m_backBufferDepth;
+
+ renderPassDescriptor.depthAttachment.texture = m_backBufferDepth;
renderPassDescriptor.stencilAttachment.texture = m_backBufferStencil;
}
else
@@ -1564,25 +1597,39 @@ namespace bgfx { namespace mtl
for (uint32_t ii = 0; ii < frameBuffer.m_num; ++ii)
{
const TextureMtl& texture = m_textures[frameBuffer.m_colorHandle[ii].idx];
- renderPassDescriptor.colorAttachments[ii].texture = texture.m_ptrMSAA ? texture.m_ptrMSAA : texture.m_ptr;
- renderPassDescriptor.colorAttachments[ii].resolveTexture = texture.m_ptrMSAA ? texture.m_ptr.m_obj : NULL;
+ renderPassDescriptor.colorAttachments[ii].texture = texture.m_ptrMSAA
+ ? texture.m_ptrMSAA
+ : texture.m_ptr
+ ;
+ renderPassDescriptor.colorAttachments[ii].resolveTexture = texture.m_ptrMSAA
+ ? texture.m_ptr.m_obj
+ : NULL
+ ;
}
if (isValid(frameBuffer.m_depthHandle) )
{
const TextureMtl& texture = m_textures[frameBuffer.m_depthHandle.idx];
- renderPassDescriptor.depthAttachment.texture = texture.m_ptrMSAA ? texture.m_ptrMSAA : texture.m_ptr;
+ renderPassDescriptor.depthAttachment.texture = texture.m_ptrMSAA
+ ? texture.m_ptrMSAA
+ : texture.m_ptr
+ ;
renderPassDescriptor.stencilAttachment.texture = texture.m_ptrStencil;
- if ( texture.m_textureFormat == TextureFormat::D24S8)//TODO: msaa and stencil iOS8 hack
+ if (texture.m_textureFormat == TextureFormat::D24S8)
{
- if ( texture.m_ptr.pixelFormat() == 255 /* Depth24Unorm_Stencil8 */||
- texture.m_ptr.pixelFormat() == 260 /* Depth32Float_Stencil8 */ )
+ if (texture.m_ptr.pixelFormat() == 255 /* Depth24Unorm_Stencil8 */
+ || texture.m_ptr.pixelFormat() == 260 /* Depth32Float_Stencil8 */)
{
renderPassDescriptor.stencilAttachment.texture = renderPassDescriptor.depthAttachment.texture;
}
else
- renderPassDescriptor.stencilAttachment.texture = texture.m_ptrMSAA ? texture.m_ptrMSAA : texture.m_ptrStencil;
+ {
+ renderPassDescriptor.stencilAttachment.texture = texture.m_ptrMSAA
+ ? texture.m_ptrMSAA
+ : texture.m_ptrStencil
+ ;
+ }
}
}
}
@@ -1677,8 +1724,8 @@ namespace bgfx { namespace mtl
m_samplerDescriptor.normalizedCoordinates = TRUE;
m_samplerDescriptor.maxAnisotropy = (0 != (_flags & (BGFX_TEXTURE_MIN_ANISOTROPIC|BGFX_TEXTURE_MAG_ANISOTROPIC) ) ) ? m_maxAnisotropy : 1;
- //NOTE: Comparison function can be specified in shader on all metal hw.
- if ( m_macOS11Runtime || [m_device supportsFeatureSet:(MTLFeatureSet)4/*MTLFeatureSet_iOS_GPUFamily3_v1*/])
+ if (m_macOS11Runtime
+ || [m_device supportsFeatureSet:(MTLFeatureSet)4 /*MTLFeatureSet_iOS_GPUFamily3_v1*/])
{
const uint32_t cmpFunc = (_flags&BGFX_TEXTURE_COMPARE_MASK)>>BGFX_TEXTURE_COMPARE_SHIFT;
m_samplerDescriptor.compareFunction = 0 == cmpFunc ? MTLCompareFunctionNever : s_cmpFunc[cmpFunc];
@@ -1699,9 +1746,9 @@ namespace bgfx { namespace mtl
BlitCommandEncoder getBlitCommandEncoder()
{
- if ( m_blitCommandEncoder == NULL)
+ if (m_blitCommandEncoder == NULL)
{
- if ( m_commandBuffer == NULL )
+ if (m_commandBuffer == NULL)
{
m_commandBuffer = m_cmd.alloc();
}
@@ -1802,7 +1849,7 @@ namespace bgfx { namespace mtl
RendererContextI* rendererCreate()
{
s_renderMtl = BX_NEW(g_allocator, RendererContextMtl);
- if (!s_renderMtl->init())
+ if (!s_renderMtl->init() )
{
BX_DELETE(g_allocator, s_renderMtl);
s_renderMtl = NULL;
@@ -1819,7 +1866,7 @@ namespace bgfx { namespace mtl
void writeString(bx::WriterI* _writer, const char* _str)
{
- bx::write(_writer, _str, (int32_t)bx::strnlen(_str) );
+ bx::write(_writer, _str, (int32_t)bx::strLen(_str) );
}
void ShaderMtl::create(const Memory* _mem)
@@ -1885,6 +1932,7 @@ namespace bgfx { namespace mtl
if (NULL != lib)
{
m_function = lib.newFunctionWithName(SHADER_FUNCTION_NAME);
+ release(lib);
}
BGFX_FATAL(NULL != m_function
@@ -1909,11 +1957,11 @@ namespace bgfx { namespace mtl
bx::memSet(m_attributes, 0xff, sizeof(m_attributes) );
uint32_t used = 0;
uint32_t instUsed = 0;
- if (NULL != _vsh->m_function.m_obj )
+ if (NULL != _vsh->m_function.m_obj)
{
for (MTLVertexAttribute* attrib in _vsh->m_function.m_obj.vertexAttributes)
{
- if (attrib.active )
+ if (attrib.active)
{
const char* name = utf8String(attrib.name);
uint32_t loc = (uint32_t)attrib.attributeIndex;
@@ -1921,7 +1969,7 @@ namespace bgfx { namespace mtl
for (uint8_t ii = 0; ii < Attrib::Count; ++ii)
{
- if (0 == bx::strncmp(s_attribName[ii],name))
+ if (0 == bx::strCmp(s_attribName[ii],name) )
{
m_attributes[ii] = loc;
m_used[used++] = ii;
@@ -1931,7 +1979,7 @@ namespace bgfx { namespace mtl
for (uint32_t ii = 0; ii < BX_COUNTOF(s_instanceDataName); ++ii)
{
- if (0 == bx::strncmp(s_instanceDataName[ii],name))
+ if (0 == bx::strCmp(s_instanceDataName[ii],name) )
{
m_instanceData[instUsed++] = loc;
}
@@ -1966,6 +2014,8 @@ namespace bgfx { namespace mtl
m_fshConstantBufferSize = 0;
m_fshConstantBufferAlignmentMask = 0;
+ m_samplerCount = 0;
+
m_processedUniforms = false;
m_numPredefined = 0;
@@ -2019,7 +2069,7 @@ namespace bgfx { namespace mtl
FrameBufferMtl& frameBuffer = s_renderMtl->m_frameBuffers[_fbHandle.idx];
murmur.add(frameBuffer.m_pixelFormatHash);
}
- murmur.add(_declHandle.idx);
+ murmur.add(s_renderMtl->m_vertexDecls[_declHandle.idx].m_hash);
murmur.add(_numInstanceData);
uint32_t hash = murmur.end();
@@ -2048,11 +2098,14 @@ namespace bgfx { namespace mtl
for (uint32_t ii = 0; ii < frameBuffer.m_num; ++ii)
{
const TextureMtl& texture = s_renderMtl->m_textures[frameBuffer.m_colorHandle[ii].idx];
- pd.sampleCount = NULL != texture.m_ptrMSAA ? texture.m_ptrMSAA.sampleCount() : 1;
+ pd.sampleCount = NULL != texture.m_ptrMSAA
+ ? texture.m_ptrMSAA.sampleCount()
+ : 1
+ ;
pd.colorAttachments[ii].pixelFormat = texture.m_ptr.m_obj.pixelFormat;
}
- if (isValid(frameBuffer.m_depthHandle))
+ if (isValid(frameBuffer.m_depthHandle) )
{
const TextureMtl& texture = s_renderMtl->m_textures[frameBuffer.m_depthHandle.idx];
pd.depthAttachmentPixelFormat = texture.m_ptr.m_obj.pixelFormat;
@@ -2062,8 +2115,10 @@ namespace bgfx { namespace mtl
}
else
{
- if ( texture.m_textureFormat == TextureFormat::D24S8)
+ if (texture.m_textureFormat == TextureFormat::D24S8)
+ {
pd.stencilAttachmentPixelFormat = texture.m_ptr.m_obj.pixelFormat;
+ }
}
}
}
@@ -2123,10 +2178,10 @@ namespace bgfx { namespace mtl
}
}
- pd.vertexFunction = m_vsh->m_function;
+ pd.vertexFunction = m_vsh->m_function;
pd.fragmentFunction = m_fsh->m_function;
- if (isValid(_declHandle))
+ if (isValid(_declHandle) )
{
VertexDescriptor vertexDesc = s_renderMtl->m_vertexDescriptor;
reset(vertexDesc);
@@ -2165,19 +2220,19 @@ namespace bgfx { namespace mtl
BX_TRACE("stride: %d", (int)vertexDesc.layouts[1].stride);
- if (_numInstanceData > 0)
+ if (0 < _numInstanceData)
{
for (uint32_t ii = 0; UINT16_MAX != m_instanceData[ii]; ++ii)
{
uint32_t loc = m_instanceData[ii];
- vertexDesc.attributes[loc].format = MTLVertexFormatFloat4;
+ vertexDesc.attributes[loc].format = MTLVertexFormatFloat4;
vertexDesc.attributes[loc].bufferIndex = 2;
- vertexDesc.attributes[loc].offset = ii*16;
+ vertexDesc.attributes[loc].offset = ii*16;
}
- vertexDesc.layouts[2].stride = _numInstanceData * 16;
+ vertexDesc.layouts[2].stride = _numInstanceData * 16;
vertexDesc.layouts[2].stepFunction = MTLVertexStepFunctionPerInstance;
- vertexDesc.layouts[2].stepRate = 1;
+ vertexDesc.layouts[2].stepRate = 1;
}
pd.vertexDescriptor = vertexDesc;
@@ -2200,13 +2255,13 @@ namespace bgfx { namespace mtl
UniformBuffer*& constantBuffer = (shaderType == 0 ? m_vshConstantBuffer : m_fshConstantBuffer);
uint8_t fragmentBit = (1 == shaderType ? BGFX_UNIFORM_FRAGMENTBIT : 0);
- for (MTLArgument* arg in (shaderType == 0 ? reflection.vertexArguments : reflection.fragmentArguments))
+ for (MTLArgument* arg in (shaderType == 0 ? reflection.vertexArguments : reflection.fragmentArguments) )
{
BX_TRACE("arg: %s type:%d", utf8String(arg.name), arg.type);
if (arg.active)
{
if (arg.type == MTLArgumentTypeBuffer
- && 0 == bx::strncmp(utf8String(arg.name), SHADER_UNIFORM_NAME) )
+ && 0 == bx::strCmp(utf8String(arg.name), SHADER_UNIFORM_NAME) )
{
BX_CHECK( arg.index == 0, "Uniform buffer must be in the buffer slot 0.");
BX_CHECK( MTLDataTypeStruct == arg.bufferDataType, "%s's type must be a struct",SHADER_UNIFORM_NAME );
@@ -2239,15 +2294,10 @@ namespace bgfx { namespace mtl
}
switch (dataType) {
- case MTLDataTypeFloat4 :
- num *= 1;
- break;
- case MTLDataTypeFloat4x4:
- num *= 4;
- break;
- case MTLDataTypeFloat3x3:
- num *= 3;
- break;
+ case MTLDataTypeFloat4: num *= 1; break;
+ case MTLDataTypeFloat4x4: num *= 4; break;
+ case MTLDataTypeFloat3x3: num *= 3; break;
+
default:
BX_WARN(0, "Unsupported uniform MTLDataType: %d", uniform.dataType);
break;
@@ -2274,8 +2324,8 @@ namespace bgfx { namespace mtl
}
UniformType::Enum type = convertMtlType(dataType);
- constantBuffer->writeUniformHandle((UniformType::Enum)(type|fragmentBit), uint32_t(uniform.offset), info->m_handle, uint16_t(num) );
- BX_TRACE("store %s %d offset:%d", name, info->m_handle, uint32_t(uniform.offset));
+ constantBuffer->writeUniformHandle( (UniformType::Enum)(type|fragmentBit), uint32_t(uniform.offset), info->m_handle, uint16_t(num) );
+ BX_TRACE("store %s %d offset:%d", name, info->m_handle, uint32_t(uniform.offset) );
}
}
@@ -2284,10 +2334,25 @@ namespace bgfx { namespace mtl
}
else if (arg.type == MTLArgumentTypeTexture)
{
- if ( shaderType == 0 ) m_usedVertexSamplerStages |= 1<<arg.index;
- else m_usedFragmentSamplerStages |= 1<<arg.index;
+ const char* name = utf8String(arg.name);
+ const UniformRegInfo* info = s_renderMtl->m_uniformReg.find(name);
+ BX_WARN(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name);
- BX_TRACE("texture: %s index:%d", utf8String(arg.name), arg.index);
+ if (NULL != info)
+ {
+ if ( m_samplerCount >= BGFX_CONFIG_MAX_TEXTURE_SAMPLERS)
+ {
+ BX_WARN(NULL != info, "Too many samplers in shader(only %d is supported). User defined uniform '%s' won't be set.", BGFX_CONFIG_MAX_TEXTURE_SAMPLERS, name);
+ }
+ else
+ {
+ m_samplers[m_samplerCount].m_index = uint32_t(arg.index);
+ m_samplers[m_samplerCount].m_uniform = info->m_handle;
+ m_samplers[m_samplerCount].m_fragment = fragmentBit ? 1 : 0;
+ ++m_samplerCount;
+ BX_TRACE("texture %s %d index:%d", name, info->m_handle, uint32_t(arg.index) );
+ }
+ }
}
else if (arg.type == MTLArgumentTypeSampler)
{
@@ -2336,18 +2401,21 @@ namespace bgfx { namespace mtl
{
BX_UNUSED(_discard);
- //TODO: cannot call this more than once per frame
- if ( m_dynamic && _discard )
+ if (m_dynamic
+ && _discard)
{
m_bufferIndex = (m_bufferIndex + 1) % MTL_MAX_FRAMES_IN_FLIGHT;
bx::memCopy( (uint8_t*)getBuffer().contents() + _offset, _data, _size);
}
- else if ( NULL != s_renderMtl->m_renderCommandEncoder )
+ else if (NULL != s_renderMtl->m_renderCommandEncoder)
{
s_renderMtl->m_cmd.release(m_buffers[m_bufferIndex]);
- if (_offset == 0 && _size == m_size)
+ if (_offset == 0
+ && _size == m_size)
+ {
m_buffers[m_bufferIndex] = s_renderMtl->m_device.newBufferWithBytes(_data, _size, 0);
+ }
else
{
const void* oldContent = m_buffers[m_bufferIndex].contents();
@@ -2380,14 +2448,14 @@ namespace bgfx { namespace mtl
{
m_sampler = s_renderMtl->getSamplerState(_flags);
- ImageContainer imageContainer;
+ bimg::ImageContainer imageContainer;
- if (imageParse(imageContainer, _mem->data, _mem->size) )
+ if (bimg::imageParse(imageContainer, _mem->data, _mem->size) )
{
uint8_t numMips = imageContainer.m_numMips;
const uint8_t startLod = uint8_t(bx::uint32_min(_skip, numMips-1) );
numMips -= startLod;
- const ImageBlockInfo& blockInfo = getBlockInfo(TextureFormat::Enum(imageContainer.m_format) );
+ const bimg::ImageBlockInfo& blockInfo = getBlockInfo(bimg::TextureFormat::Enum(imageContainer.m_format) );
const uint32_t textureWidth = bx::uint32_max(blockInfo.blockWidth, imageContainer.m_width >>startLod);
const uint32_t textureHeight = bx::uint32_max(blockInfo.blockHeight, imageContainer.m_height>>startLod);
const uint16_t numLayers = imageContainer.m_numLayers;
@@ -2399,7 +2467,7 @@ namespace bgfx { namespace mtl
m_requestedFormat = uint8_t(imageContainer.m_format);
m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
const bool convert = m_textureFormat != m_requestedFormat;
- const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
+ const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
TextureDescriptor desc = s_renderMtl->m_textureDescriptor;
@@ -2415,8 +2483,6 @@ namespace bgfx { namespace mtl
desc.textureType = MTLTextureType2DArray;
m_type = Texture2D;
}
-
- desc.arrayLength = numLayers;
}
else if (imageContainer.m_cubeMap)
{
@@ -2437,25 +2503,25 @@ namespace bgfx { namespace mtl
m_numMips = numMips;
const uint16_t numSides = numLayers * (imageContainer.m_cubeMap ? 6 : 1);
- const bool compressed = isCompressed(TextureFormat::Enum(m_textureFormat) );
+ const bool compressed = bimg::isCompressed(bimg::TextureFormat::Enum(m_textureFormat) );
const bool writeOnly = 0 != (_flags&BGFX_TEXTURE_RT_WRITE_ONLY);
const bool computeWrite = 0 != (_flags&BGFX_TEXTURE_COMPUTE_WRITE);
const bool renderTarget = 0 != (_flags&BGFX_TEXTURE_RT_MASK);
- const bool srgb = 0 != (_flags&BGFX_TEXTURE_SRGB) || imageContainer.m_srgb;
+ const bool srgb = 0 != (_flags&BGFX_TEXTURE_SRGB);
BX_TRACE("Texture %3d: %s (requested: %s), layers %d, %dx%d%s RT[%c], WO[%c], CW[%c], sRGB[%c]"
- , this - s_renderMtl->m_textures
- , getName( (TextureFormat::Enum)m_textureFormat)
- , getName( (TextureFormat::Enum)m_requestedFormat)
- , numLayers
- , textureWidth
- , textureHeight
- , imageContainer.m_cubeMap ? "x6" : ""
- , renderTarget ? 'x' : '.'
- , writeOnly ? 'x' : '.'
- , computeWrite ? 'x' : '.'
- , srgb ? 'x' : '.'
- );
+ , this - s_renderMtl->m_textures
+ , getName( (TextureFormat::Enum)m_textureFormat)
+ , getName( (TextureFormat::Enum)m_requestedFormat)
+ , numLayers
+ , textureWidth
+ , textureHeight
+ , imageContainer.m_cubeMap ? "x6" : ""
+ , renderTarget ? 'x' : '.'
+ , writeOnly ? 'x' : '.'
+ , computeWrite ? 'x' : '.'
+ , srgb ? 'x' : '.'
+ );
const uint32_t msaaQuality = bx::uint32_satsub( (_flags&BGFX_TEXTURE_RT_MSAA_MASK)>>BGFX_TEXTURE_RT_MSAA_SHIFT, 1);
int sampleCount = s_msaa[msaaQuality];
@@ -2480,33 +2546,46 @@ namespace bgfx { namespace mtl
desc.width = textureWidth;
desc.height = textureHeight;
desc.depth = bx::uint32_max(1,imageContainer.m_depth);
- desc.mipmapLevelCount = imageContainer.m_numMips;
+ desc.mipmapLevelCount = numMips;
desc.sampleCount = 1;
+ desc.arrayLength = numLayers;
if (s_renderMtl->m_iOS9Runtime || s_renderMtl->m_macOS11Runtime)
{
desc.cpuCacheMode = MTLCPUCacheModeDefaultCache;
- desc.storageMode = (MTLStorageMode)(writeOnly||isDepth(TextureFormat::Enum(m_textureFormat))
- ? 2 /*MTLStorageModePrivate*/
- : ((BX_ENABLED(BX_PLATFORM_IOS)) ? 0 /* MTLStorageModeShared */ : 1 /*MTLStorageModeManaged*/)
- );
+ desc.storageMode = (MTLStorageMode)(false
+ || writeOnly
+ || bimg::isDepth(bimg::TextureFormat::Enum(m_textureFormat) )
+ ? 2 /*MTLStorageModePrivate*/
+ : (BX_ENABLED(BX_PLATFORM_IOS)
+ ? 0 /* MTLStorageModeShared */
+ : 1 /* MTLStorageModeManaged */
+ ) );
desc.usage = MTLTextureUsageShaderRead;
if (computeWrite)
+ {
desc.usage |= MTLTextureUsageShaderWrite;
+ }
+
if (renderTarget)
+ {
desc.usage |= MTLTextureUsageRenderTarget;
+ }
}
m_ptr = s_renderMtl->m_device.newTextureWithDescriptor(desc);
- if ( sampleCount > 1)
+ if (sampleCount > 1)
{
desc.textureType = MTLTextureType2DMultisample;
desc.sampleCount = sampleCount;
- if (s_renderMtl->m_iOS9Runtime || s_renderMtl->m_macOS11Runtime)
+ if (s_renderMtl->m_iOS9Runtime
+ || s_renderMtl->m_macOS11Runtime)
+ {
desc.storageMode = (MTLStorageMode)( 2 /*MTLStorageModePrivate*/);
+ }
m_ptrMSAA = s_renderMtl->m_device.newTextureWithDescriptor(desc);
}
@@ -2535,14 +2614,14 @@ namespace bgfx { namespace mtl
height = bx::uint32_max(1, height);
depth = bx::uint32_max(1, depth);
- ImageMip mip;
- if (imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
+ bimg::ImageMip mip;
+ if (bimg::imageGetRawData(imageContainer, side, lod+startLod, _mem->data, _mem->size, mip) )
{
const uint8_t* data = mip.m_data;
if (convert)
{
- imageDecodeToBgra8(temp
+ bimg::imageDecodeToBgra8(temp
, mip.m_data
, mip.m_width
, mip.m_height
@@ -2601,10 +2680,10 @@ namespace bgfx { namespace mtl
void TextureMtl::update(uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem)
{
- const uint32_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
+ const uint32_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
const uint32_t rectpitch = _rect.m_width*bpp/8;
const uint32_t srcpitch = UINT16_MAX == _pitch ? rectpitch : _pitch;
- const uint32_t slice = ((m_type == Texture3D) ? 0 : _side + _z * (m_type == TextureCube ? 6 : 1));
+ const uint32_t slice = ( (m_type == Texture3D) ? 0 : _side + _z * (m_type == TextureCube ? 6 : 1) );
const uint16_t z = (m_type == Texture3D) ? _z : 0 ;
const bool convert = m_textureFormat != m_requestedFormat;
@@ -2615,23 +2694,23 @@ namespace bgfx { namespace mtl
if (convert)
{
temp = (uint8_t*)BX_ALLOC(g_allocator, rectpitch*_rect.m_height);
- imageDecodeToBgra8(temp
+ bimg::imageDecodeToBgra8(temp
, data
, _rect.m_width
, _rect.m_height
, srcpitch
- , TextureFormat::Enum(m_requestedFormat)
+ , bimg::TextureFormat::Enum(m_requestedFormat)
);
data = temp;
}
- if ( NULL != s_renderMtl->m_renderCommandEncoder )
+ if (NULL != s_renderMtl->m_renderCommandEncoder)
{
s_renderMtl->m_cmd.finish(true);
MTLRegion region =
{
- { _rect.m_x, _rect.m_y, z },
+ { _rect.m_x, _rect.m_y, z },
{ _rect.m_width, _rect.m_height, _depth },
};
@@ -2707,13 +2786,13 @@ namespace bgfx { namespace mtl
{
const TextureMtl& texture = s_renderMtl->m_textures[handle.idx];
- if ( 0 == m_width )
+ if (0 == m_width)
{
m_width = texture.m_width;
m_height = texture.m_height;
}
- if (isDepth( (TextureFormat::Enum)texture.m_textureFormat) )
+ if (bimg::isDepth(bimg::TextureFormat::Enum(texture.m_textureFormat) ) )
{
m_depthHandle = handle;
}
@@ -2732,18 +2811,18 @@ namespace bgfx { namespace mtl
for (uint32_t ii = 0; ii < m_num; ++ii)
{
const TextureMtl& texture = s_renderMtl->m_textures[m_colorHandle[ii].idx];
- murmur.add((uint32_t)texture.m_ptr.pixelFormat());
+ murmur.add( (uint32_t)texture.m_ptr.pixelFormat() );
}
- if (!isValid(m_depthHandle))
+ if (!isValid(m_depthHandle) )
{
- murmur.add((uint32_t)MTLPixelFormatInvalid);
- murmur.add((uint32_t)MTLPixelFormatInvalid);
+ murmur.add( (uint32_t)MTLPixelFormatInvalid);
+ murmur.add( (uint32_t)MTLPixelFormatInvalid);
}
else
{
const TextureMtl& depthTexture = s_renderMtl->m_textures[m_depthHandle.idx];
- murmur.add((uint32_t)depthTexture.m_ptr.pixelFormat());
- murmur.add((uint32_t)(NULL != depthTexture.m_ptrStencil ? depthTexture.m_ptrStencil.pixelFormat() : MTLPixelFormatInvalid));
+ murmur.add( (uint32_t)depthTexture.m_ptr.pixelFormat() );
+ murmur.add( (uint32_t)(NULL != depthTexture.m_ptrStencil ? depthTexture.m_ptrStencil.pixelFormat() : MTLPixelFormatInvalid) );
}
murmur.add(1); //SampleCount
@@ -2760,13 +2839,12 @@ namespace bgfx { namespace mtl
void FrameBufferMtl::postReset()
{
BX_WARN(false, "FrameBufferMtl::postReset not yet implemented");
- //TODO: what should we do here?
}
uint16_t FrameBufferMtl::destroy()
{
m_num = 0;
- m_depthHandle.idx = invalidHandle;
+ m_depthHandle.idx = kInvalidHandle;
uint16_t denseIdx = m_denseIdx;
m_denseIdx = UINT16_MAX;
@@ -2782,6 +2860,7 @@ namespace bgfx { namespace mtl
void CommandQueueMtl::shutdown()
{
+ finish(true);
MTL_RELEASE(m_commandQueue);
}
@@ -2795,34 +2874,42 @@ namespace bgfx { namespace mtl
static void commandBufferFinishedCallback(void* _data)
{
CommandQueueMtl* queue = (CommandQueueMtl*)_data;
- if ( queue )
+ if (queue)
+ {
queue->m_framesSemaphore.post();
+ }
}
void CommandQueueMtl::kick(bool _endFrame, bool _waitForFinish)
{
- if ( m_activeCommandBuffer )
+ if (m_activeCommandBuffer)
{
- if ( _endFrame )
+ if (_endFrame)
{
m_releaseWriteIndex = (m_releaseWriteIndex + 1) % MTL_MAX_FRAMES_IN_FLIGHT;
m_activeCommandBuffer.addCompletedHandler(commandBufferFinishedCallback, this);
}
m_activeCommandBuffer.commit();
- if ( _waitForFinish )
+ if (_waitForFinish)
+ {
m_activeCommandBuffer.waitUntilCompleted();
+ }
+
MTL_RELEASE(m_activeCommandBuffer);
}
}
void CommandQueueMtl::finish(bool _finishAll)
{
- if ( _finishAll)
+ if (_finishAll)
{
- int count = m_activeCommandBuffer != NULL ? 2 : 3;
+ uint32_t count = m_activeCommandBuffer != NULL
+ ? 2
+ : 3
+ ;
- for( int i=0; i< count; ++i)
+ for (uint32_t ii = 0; ii < count; ++ii)
{
consume();
}
@@ -2864,7 +2951,7 @@ namespace bgfx { namespace mtl
static void setTimestamp(void* _data)
{
- *((int64_t*)_data) = bx::getHPCounter();
+ *( (int64_t*)_data) = bx::getHPCounter();
}
void TimerQueryMtl::addHandlers(CommandBuffer& _commandBuffer)
@@ -2955,12 +3042,96 @@ namespace bgfx { namespace mtl
Query& query = m_query[(m_control.m_read + ii) % size];
if (query.m_handle.idx == _handle.idx)
{
- query.m_handle.idx = bgfx::invalidHandle;
+ query.m_handle.idx = bgfx::kInvalidHandle;
}
}
}
- void RendererContextMtl::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE
+ void RendererContextMtl::submitBlit(BlitState& _bs, uint16_t _view)
+ {
+ if (!_bs.hasItem(_view))
+ return;
+
+ if (0 != m_renderCommandEncoder)
+ {
+ m_renderCommandEncoder.endEncoding();
+ m_renderCommandEncoder = 0;
+ }
+
+ m_blitCommandEncoder = getBlitCommandEncoder();
+
+ while (_bs.hasItem(_view) )
+ {
+ const BlitItem& blit = _bs.advance();
+
+ const TextureMtl& src = m_textures[blit.m_src.idx];
+ const TextureMtl& dst = m_textures[blit.m_dst.idx];
+
+ uint32_t srcWidth = bx::uint32_min(src.m_width, blit.m_srcX + blit.m_width) - blit.m_srcX;
+ uint32_t srcHeight = bx::uint32_min(src.m_height, blit.m_srcY + blit.m_height) - blit.m_srcY;
+ uint32_t srcDepth = bx::uint32_min(src.m_depth, blit.m_srcZ + blit.m_depth) - blit.m_srcZ;
+ uint32_t dstWidth = bx::uint32_min(dst.m_width, blit.m_dstX + blit.m_width) - blit.m_dstX;
+ uint32_t dstHeight = bx::uint32_min(dst.m_height, blit.m_dstY + blit.m_height) - blit.m_dstY;
+ uint32_t dstDepth = bx::uint32_min(dst.m_depth, blit.m_dstZ + blit.m_depth) - blit.m_dstZ;
+ uint32_t width = bx::uint32_min(srcWidth, dstWidth);
+ uint32_t height = bx::uint32_min(srcHeight, dstHeight);
+ uint32_t depth = bx::uint32_min(srcDepth, dstDepth);
+#if BX_PLATFORM_OSX
+ bool readBack = !!(dst.m_flags & BGFX_TEXTURE_READ_BACK);
+#endif // BX_PLATFORM_OSX
+
+ if (MTLTextureType3D == src.m_ptr.textureType() )
+ {
+ m_blitCommandEncoder.copyFromTexture(
+ src.m_ptr
+ , 0
+ , 0
+ , MTLOriginMake(blit.m_srcX, blit.m_srcY, blit.m_srcZ)
+ , MTLSizeMake(width, height, bx::uint32_imax(depth, 1) )
+ , dst.m_ptr
+ , 0
+ , 0
+ , MTLOriginMake(blit.m_dstX, blit.m_dstY, blit.m_dstZ)
+ );
+#if BX_PLATFORM_OSX
+ if (m_macOS11Runtime
+ && readBack)
+ {
+ m_blitCommandEncoder.synchronizeResource(dst.m_ptr);
+ }
+#endif // BX_PLATFORM_OSX
+ }
+ else
+ {
+ m_blitCommandEncoder.copyFromTexture(
+ src.m_ptr
+ , blit.m_srcZ
+ , blit.m_srcMip
+ , MTLOriginMake(blit.m_srcX, blit.m_srcY, 0)
+ , MTLSizeMake(width, height, 1)
+ , dst.m_ptr
+ , blit.m_dstZ
+ , blit.m_dstMip
+ , MTLOriginMake(blit.m_dstX, blit.m_dstY, 0)
+ );
+#if BX_PLATFORM_OSX
+ if (m_macOS11Runtime
+ && readBack)
+ {
+ m_blitCommandEncoder.synchronizeTexture(dst.m_ptr, 0, blit.m_dstMip);
+ }
+#endif // BX_PLATFORM_OSX
+ }
+ }
+
+ if (0 != m_blitCommandEncoder)
+ {
+ m_blitCommandEncoder.endEncoding();
+ m_blitCommandEncoder = 0;
+ }
+ }
+
+ void RendererContextMtl::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter)
{
m_cmd.finish(false);
@@ -2969,7 +3140,7 @@ namespace bgfx { namespace mtl
m_commandBuffer = m_cmd.alloc();
}
- int64_t elapsed = -bx::getHPCounter();
+ int64_t timeBegin = bx::getHPCounter();
int64_t captureElapsed = 0;
m_gpuTimer.addHandlers(m_commandBuffer);
@@ -3004,14 +3175,20 @@ namespace bgfx { namespace mtl
m_textureDescriptor.mipmapLevelCount = 1;
m_textureDescriptor.sampleCount = 1;
m_textureDescriptor.arrayLength = 1;
- if ( m_iOS9Runtime || m_macOS11Runtime )
+
+ if (m_iOS9Runtime
+ || m_macOS11Runtime)
{
m_textureDescriptor.cpuCacheMode = MTLCPUCacheModeDefaultCache;
- m_textureDescriptor.storageMode = (MTLStorageMode)(BX_ENABLED(BX_PLATFORM_IOS)
- ? 0 /* MTLStorageModeShared */
- : 1 /*MTLStorageModeManaged*/
- );
- m_textureDescriptor.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead;
+ m_textureDescriptor.storageMode = BX_ENABLED(BX_PLATFORM_IOS)
+ ? (MTLStorageMode)0 // MTLStorageModeShared
+ : (MTLStorageMode)1 // MTLStorageModeManaged
+ ;
+
+ m_textureDescriptor.usage = 0
+ | MTLTextureUsageRenderTarget
+ | MTLTextureUsageShaderRead
+ ;
}
m_screenshotTarget = m_device.newTextureWithDescriptor(m_textureDescriptor);
@@ -3048,6 +3225,9 @@ namespace bgfx { namespace mtl
currentState.m_stateFlags = BGFX_STATE_NONE;
currentState.m_stencil = packStencil(BGFX_STENCIL_NONE, BGFX_STENCIL_NONE);
+ RenderBind currentBind;
+ currentBind.clear();
+
_render->m_hmdInitialized = false;
const bool hmdEnabled = false;
@@ -3057,15 +3237,12 @@ namespace bgfx { namespace mtl
bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME);
- uint16_t programIdx = invalidHandle;
+ uint16_t programIdx = kInvalidHandle;
SortKey key;
uint16_t view = UINT16_MAX;
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
- BlitKey blitKey;
- blitKey.decode(_render->m_blitKeys[0]);
- uint16_t numBlitItems = _render->m_numBlitItems;
- uint16_t blitItem = 0;
+ BlitState bs(_render);
const uint64_t primType = 0;
uint8_t primIndex = uint8_t(primType>>BGFX_STATE_PT_SHIFT);
@@ -3093,9 +3270,9 @@ namespace bgfx { namespace mtl
bool viewRestart = false;
uint8_t eye = 0;
uint8_t restartState = 0;
- viewState.m_rect = _render->m_rect[0];
+ viewState.m_rect = _render->m_view[0].m_rect;
- int32_t numItems = _render->m_num;
+ int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
@@ -3106,7 +3283,10 @@ namespace bgfx { namespace mtl
|| key.m_view != view
|| item == numItems
;
- const RenderItem& renderItem = _render->m_renderItem[_render->m_sortValues[item] ];
+
+ const uint32_t itemIdx = _render->m_sortValues[item];
+ const RenderItem& renderItem = _render->m_renderItem[itemIdx];
+ const RenderBind& renderBind = _render->m_renderItemBind[itemIdx];
++item;
if (viewChanged)
@@ -3121,9 +3301,9 @@ namespace bgfx { namespace mtl
}
view = key.m_view;
- programIdx = invalidHandle;
+ programIdx = kInvalidHandle;
- viewRestart = ( (BGFX_VIEW_STEREO == (_render->m_viewFlags[view] & BGFX_VIEW_STEREO) ) );
+ viewRestart = BGFX_VIEW_STEREO == (_render->m_view[view].m_flags & BGFX_VIEW_STEREO);
viewRestart &= hmdEnabled;
if (viewRestart)
@@ -3142,7 +3322,7 @@ namespace bgfx { namespace mtl
eye = 0;
}
- viewState.m_rect = _render->m_rect[view];
+ viewState.m_rect = _render->m_view[view].m_rect;
if (viewRestart)
{
@@ -3150,72 +3330,18 @@ namespace bgfx { namespace mtl
viewState.m_rect.m_width /= 2;
}
- const uint8_t blitView = SortKey::decodeView(encodedKey);
- for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
- {
- if (0 != m_renderCommandEncoder)
- {
- m_renderCommandEncoder.endEncoding();
- m_renderCommandEncoder = 0;
- }
- m_blitCommandEncoder = getBlitCommandEncoder();
-
- const BlitItem& blit = _render->m_blitItem[blitItem];
- blitKey.decode(_render->m_blitKeys[blitItem+1]);
-
- const TextureMtl& src = m_textures[blit.m_src.idx];
- const TextureMtl& dst = m_textures[blit.m_dst.idx];
-
- uint32_t srcWidth = bx::uint32_min(src.m_width, blit.m_srcX + blit.m_width) - blit.m_srcX;
- uint32_t srcHeight = bx::uint32_min(src.m_height, blit.m_srcY + blit.m_height) - blit.m_srcY;
- uint32_t srcDepth = bx::uint32_min(src.m_depth, blit.m_srcZ + blit.m_depth) - blit.m_srcZ;
- uint32_t dstWidth = bx::uint32_min(dst.m_width, blit.m_dstX + blit.m_width) - blit.m_dstX;
- uint32_t dstHeight = bx::uint32_min(dst.m_height, blit.m_dstY + blit.m_height) - blit.m_dstY;
- uint32_t dstDepth = bx::uint32_min(dst.m_depth, blit.m_dstZ + blit.m_depth) - blit.m_dstZ;
- uint32_t width = bx::uint32_min(srcWidth, dstWidth);
- uint32_t height = bx::uint32_min(srcHeight, dstHeight);
- uint32_t depth = bx::uint32_min(srcDepth, dstDepth);
-#if BX_PLATFORM_OSX
- bool readBack = !!(dst.m_flags & BGFX_TEXTURE_READ_BACK);
-#endif // BX_PLATFORM_OSX
-
- if ( MTLTextureType3D == src.m_ptr.textureType())
- {
- m_blitCommandEncoder.copyFromTexture(src.m_ptr, 0, 0, MTLOriginMake(blit.m_srcX, blit.m_srcY, blit.m_srcZ), MTLSizeMake(width, height, bx::uint32_imax(depth, 1)),
- dst.m_ptr, 0, 0, MTLOriginMake(blit.m_dstX, blit.m_dstY, blit.m_dstZ));
-#if BX_PLATFORM_OSX
- if (m_macOS11Runtime &&readBack) {
- m_blitCommandEncoder.synchronizeResource(dst.m_ptr);
- }
-#endif // BX_PLATFORM_OSX
- }
- else
- {
- m_blitCommandEncoder.copyFromTexture(src.m_ptr, blit.m_srcZ, blit.m_srcMip, MTLOriginMake(blit.m_srcX, blit.m_srcY, 0), MTLSizeMake(width, height, 1),
- dst.m_ptr, blit.m_dstZ, blit.m_dstMip, MTLOriginMake(blit.m_dstX, blit.m_dstY, 0));
-#if BX_PLATFORM_OSX
- if (m_macOS11Runtime && readBack) {
- m_blitCommandEncoder.synchronizeTexture(dst.m_ptr, 0, blit.m_dstMip);
- }
-#endif // BX_PLATFORM_OSX
- }
- }
+ submitBlit(bs, view);
- if (0 != m_blitCommandEncoder)
- {
- m_blitCommandEncoder.endEncoding();
- m_blitCommandEncoder = 0;
- }
-
- const Rect& scissorRect = _render->m_scissor[view];
+ const Rect& scissorRect = _render->m_view[view].m_scissor;
viewHasScissor = !scissorRect.isZero();
viewScissorRect = viewHasScissor ? scissorRect : viewState.m_rect;
- Clear& clr = _render->m_clear[view];
+ Clear& clr = _render->m_view[view].m_clear;
Rect viewRect = viewState.m_rect;
bool clearWithRenderPass = false;
- if ( NULL == m_renderCommandEncoder || fbh.idx != _render->m_fb[view].idx )
+ if (NULL == m_renderCommandEncoder
+ || fbh.idx != _render->m_view[view].m_fbh.idx)
{
if (0 != m_renderCommandEncoder)
{
@@ -3225,15 +3351,15 @@ namespace bgfx { namespace mtl
RenderPassDescriptor renderPassDescriptor = newRenderPassDescriptor();
renderPassDescriptor.visibilityResultBuffer = m_occlusionQuery.m_buffer;
- fbh = _render->m_fb[view];
+ fbh = _render->m_view[view].m_fbh;
uint32_t width = m_resolution.m_width;
uint32_t height = m_resolution.m_height;
- if ( isValid(fbh) )
+ if (isValid(fbh) )
{
FrameBufferMtl& frameBuffer = m_frameBuffers[fbh.idx];
- width = frameBuffer.m_width;
+ width = frameBuffer.m_width;
height = frameBuffer.m_height;
}
@@ -3245,14 +3371,13 @@ namespace bgfx { namespace mtl
setFrameBuffer(renderPassDescriptor, fbh);
- if ( clearWithRenderPass )
+ if (clearWithRenderPass)
{
-
- for(uint32_t ii = 0; ii < g_caps.limits.maxFBAttachments; ++ii)
+ for (uint32_t ii = 0; ii < g_caps.limits.maxFBAttachments; ++ii)
{
MTLRenderPassColorAttachmentDescriptor* desc = renderPassDescriptor.colorAttachments[ii];
- if ( desc.texture != NULL)
+ if (desc.texture != NULL)
{
if (0 != (BGFX_CLEAR_COLOR & clr.m_flags) )
{
@@ -3285,16 +3410,18 @@ namespace bgfx { namespace mtl
}
}
- //TODO: optimize store actions use discard flag
RenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.depthAttachment;
if (NULL != depthAttachment.texture)
{
depthAttachment.clearDepth = clr.m_depth;
depthAttachment.loadAction = 0 != (BGFX_CLEAR_DEPTH & clr.m_flags)
- ? MTLLoadActionClear
- : MTLLoadActionLoad
- ;
- depthAttachment.storeAction = NULL != m_backBufferColorMSAA ? MTLStoreActionDontCare : MTLStoreActionStore;
+ ? MTLLoadActionClear
+ : MTLLoadActionLoad
+ ;
+ depthAttachment.storeAction = NULL != m_backBufferColorMSAA
+ ? MTLStoreActionDontCare
+ : MTLStoreActionStore
+ ;
}
RenderPassStencilAttachmentDescriptor stencilAttachment = renderPassDescriptor.stencilAttachment;
@@ -3302,22 +3429,26 @@ namespace bgfx { namespace mtl
{
stencilAttachment.clearStencil = clr.m_stencil;
stencilAttachment.loadAction = 0 != (BGFX_CLEAR_STENCIL & clr.m_flags)
- ? MTLLoadActionClear
- : MTLLoadActionLoad
- ;
- stencilAttachment.storeAction = NULL != m_backBufferColorMSAA ? MTLStoreActionDontCare : MTLStoreActionStore;
+ ? MTLLoadActionClear
+ : MTLLoadActionLoad
+ ;
+ stencilAttachment.storeAction = NULL != m_backBufferColorMSAA
+ ? MTLStoreActionDontCare
+ : MTLStoreActionStore
+ ;
}
}
else
{
- for(uint32_t ii = 0; ii < g_caps.limits.maxFBAttachments; ++ii)
+ for (uint32_t ii = 0; ii < g_caps.limits.maxFBAttachments; ++ii)
{
MTLRenderPassColorAttachmentDescriptor* desc = renderPassDescriptor.colorAttachments[ii];
- if ( desc.texture != NULL)
+ if (desc.texture != NULL)
+ {
desc.loadAction = MTLLoadActionLoad;
+ }
}
- //TODO: optimize store actions use discard flag
RenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.depthAttachment;
if (NULL != depthAttachment.texture)
{
@@ -3373,7 +3504,7 @@ namespace bgfx { namespace mtl
{
wasCompute = false;
- programIdx = invalidHandle;
+ programIdx = kInvalidHandle;
currentProgram = NULL;
//invalidateCompute();
@@ -3406,8 +3537,10 @@ namespace bgfx { namespace mtl
currentState.m_stateFlags = newFlags;
currentState.m_stencil = newStencil;
- programIdx = invalidHandle;
- setDepthStencilState(newFlags, packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT));
+ currentBind.clear();
+
+ programIdx = kInvalidHandle;
+ setDepthStencilState(newFlags, packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT) );
const uint64_t pt = newFlags&BGFX_STATE_PT_MASK;
primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT);
@@ -3444,7 +3577,8 @@ namespace bgfx { namespace mtl
else
{
Rect scissorRect;
- scissorRect.setIntersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]);
+ scissorRect.setIntersect(viewScissorRect, _render->m_frameCache.m_rectCache.m_cache[scissor]);
+
if (scissorRect.isZeroArea() )
{
continue;
@@ -3506,8 +3640,8 @@ namespace bgfx { namespace mtl
}
bool programChanged = false;
- bool constantsChanged = draw.m_constBegin < draw.m_constEnd;
- rendererUpdateUniforms(this, _render->m_uniformBuffer, draw.m_constBegin, draw.m_constEnd);
+ bool constantsChanged = draw.m_uniformBegin < draw.m_uniformEnd;
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd);
if (key.m_program != programIdx
|| (BGFX_STATE_BLEND_MASK|BGFX_STATE_BLEND_EQUATION_MASK|BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE|BGFX_STATE_BLEND_INDEPENDENT|BGFX_STATE_MSAA|BGFX_STATE_BLEND_ALPHA_TO_COVERAGE) & changedFlags
@@ -3522,7 +3656,7 @@ namespace bgfx { namespace mtl
currentState.m_stream[0].m_decl = draw.m_stream[0].m_decl;
currentState.m_instanceDataStride = draw.m_instanceDataStride;
- if (invalidHandle == programIdx)
+ if (kInvalidHandle == programIdx)
{
currentProgram = NULL;
continue;
@@ -3547,7 +3681,7 @@ namespace bgfx { namespace mtl
if (NULL == pipelineState)
{
currentProgram = NULL;
- programIdx = invalidHandle;
+ programIdx = kInvalidHandle;
continue;
}
@@ -3558,7 +3692,7 @@ namespace bgfx { namespace mtl
constantsChanged = true;
}
- if (invalidHandle != programIdx)
+ if (kInvalidHandle != programIdx)
{
ProgramMtl& program = m_program[programIdx];
@@ -3599,35 +3733,36 @@ namespace bgfx { namespace mtl
m_uniformBufferVertexOffset = m_uniformBufferFragmentOffset;
}
+ if (kInvalidHandle != programIdx)
{
- uint32_t usedVertexSamplerStages = 0;
- uint32_t usedFragmentSamplerStages = 0;
+ ProgramMtl& program = m_program[programIdx];
- if (invalidHandle != programIdx)
+ for (uint32_t sampler = 0; sampler < program.m_samplerCount; ++sampler)
{
- ProgramMtl& program = m_program[programIdx];
- usedVertexSamplerStages = program.m_usedVertexSamplerStages;
- usedFragmentSamplerStages = program.m_usedFragmentSamplerStages;
- }
+ ProgramMtl::SamplerInfo& samplerInfo = program.m_samplers[sampler];
- for (uint8_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage)
- {
- const Binding& sampler = draw.m_bind[stage];
- Binding& current = currentState.m_bind[stage];
- if (current.m_idx != sampler.m_idx
- || current.m_un.m_draw.m_textureFlags != sampler.m_un.m_draw.m_textureFlags
+ UniformHandle handle = samplerInfo.m_uniform;
+ int stage = *((int*)m_uniforms[handle.idx]);
+
+ const Binding& bind = renderBind.m_bind[stage];
+ Binding& current = currentBind.m_bind[stage];
+
+ if (current.m_idx != bind.m_idx
+ || current.m_un.m_draw.m_textureFlags != bind.m_un.m_draw.m_textureFlags
|| programChanged)
{
- if (invalidHandle != sampler.m_idx)
+ if (kInvalidHandle != bind.m_idx)
{
- TextureMtl& texture = m_textures[sampler.m_idx];
- texture.commit(stage, (usedVertexSamplerStages&(1<<stage))!=0,
- (usedFragmentSamplerStages&(1<<stage))!=0,
- sampler.m_un.m_draw.m_textureFlags);
+ TextureMtl& texture = m_textures[bind.m_idx];
+ texture.commit(samplerInfo.m_index
+ , !samplerInfo.m_fragment
+ , samplerInfo.m_fragment
+ , bind.m_un.m_draw.m_textureFlags
+ );
}
}
- current = sampler;
+ current = bind;
}
}
@@ -3644,7 +3779,7 @@ namespace bgfx { namespace mtl
currentState.m_instanceDataOffset = draw.m_instanceDataOffset;
uint16_t handle = draw.m_stream[0].m_handle.idx;
- if (invalidHandle != handle)
+ if (kInvalidHandle != handle)
{
const VertexBufferMtl& vb = m_vertexBuffers[handle];
@@ -3743,33 +3878,27 @@ namespace bgfx { namespace mtl
//invalidateCompute();
}
- if (0 < _render->m_num)
+ submitBlit(bs, BGFX_CONFIG_MAX_VIEWS);
+
+ if (0 < _render->m_numRenderItems)
{
captureElapsed = -bx::getHPCounter();
capture();
- rce = m_renderCommandEncoder; //TODO: ugly, can create new encoder
+ rce = m_renderCommandEncoder;
captureElapsed += bx::getHPCounter();
}
}
if (BX_ENABLED(BGFX_CONFIG_DEBUG_MTL) )
{
- if (0 < _render->m_num)
+ if (0 < _render->m_numRenderItems)
{
rce.popDebugGroup();
}
}
- int64_t now = bx::getHPCounter();
- elapsed += now;
-
- static int64_t last = now;
-
- Stats& perfStats = _render->m_perfStats;
- perfStats.cpuTimeBegin = last;
-
- int64_t frameTime = now - last;
- last = now;
+ int64_t timeEnd = bx::getHPCounter();
+ int64_t frameTime = timeEnd - timeBegin;
static int64_t min = frameTime;
static int64_t max = frameTime;
@@ -3792,7 +3921,9 @@ namespace bgfx { namespace mtl
const int64_t timerFreq = bx::getHPFrequency();
- perfStats.cpuTimeEnd = now;
+ Stats& perfStats = _render->m_perfStats;
+ perfStats.cpuTimeBegin = timeBegin;
+ perfStats.cpuTimeEnd = timeEnd;
perfStats.cpuTimerFreq = timerFreq;
perfStats.gpuTimeBegin = m_gpuTimer.m_begin;
perfStats.gpuTimeEnd = m_gpuTimer.m_end;
@@ -3800,6 +3931,8 @@ namespace bgfx { namespace mtl
perfStats.numDraw = statsKeyType[0];
perfStats.numCompute = statsKeyType[1];
perfStats.maxGpuLatency = maxGpuLatency;
+ perfStats.gpuMemoryMax = -INT64_MAX;
+ perfStats.gpuMemoryUsed = -INT64_MAX;
rce.setTriangleFillMode(MTLTriangleFillModeFill);
if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) )
@@ -3808,13 +3941,13 @@ namespace bgfx { namespace mtl
TextVideoMem& tvm = m_textVideoMem;
- static int64_t next = now;
+ static int64_t next = timeEnd;
- if (now >= next)
+ if (timeEnd >= next)
{
- next = now + bx::getHPFrequency();
+ next = timeEnd + timerFreq;
- double freq = double(bx::getHPFrequency() );
+ double freq = double(timerFreq);
double toMs = 1000.0/freq;
tvm.clear();
@@ -3839,9 +3972,9 @@ namespace bgfx { namespace mtl
, !!(m_resolution.m_flags&BGFX_RESET_MAXANISOTROPY) ? '\xfe' : ' '
);
- double elapsedCpuMs = double(elapsed)*toMs;
+ double elapsedCpuMs = double(frameTime)*toMs;
tvm.printf(10, pos++, 0x8e, " Submitted: %4d (draw %4d, compute %4d) / CPU %3.4f [ms] %c GPU %3.4f [ms] (latency %d)"
- , _render->m_num
+ , _render->m_numRenderItems
, statsKeyType[0]
, statsKeyType[1]
, elapsedCpuMs
@@ -3863,7 +3996,7 @@ namespace bgfx { namespace mtl
}
tvm.printf(10, pos++, 0x8e, " Indices: %7d ", statsNumIndices);
- tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
+// tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
tvm.printf(10, pos++, 0x8e, " DVB size: %7d ", _render->m_vboffset);
tvm.printf(10, pos++, 0x8e, " DIB size: %7d ", _render->m_iboffset);
@@ -3882,7 +4015,7 @@ namespace bgfx { namespace mtl
}
blit(this, _textVideoMemBlitter, tvm);
- rce = m_renderCommandEncoder; //TODO: ugly, blit can create encoder
+ rce = m_renderCommandEncoder;
rce.popDebugGroup();
}
@@ -3891,17 +4024,16 @@ namespace bgfx { namespace mtl
rce.pushDebugGroup("debugtext");
blit(this, _textVideoMemBlitter, _render->m_textVideoMem);
- rce = m_renderCommandEncoder; //TODO: ugly, blit can create encoder
+ rce = m_renderCommandEncoder;
rce.popDebugGroup();
}
rce.endEncoding();
m_renderCommandEncoder = 0;
- m_renderCommandEncoderFrameBufferHandle.idx = invalidHandle;
+ m_renderCommandEncoderFrameBufferHandle.idx = kInvalidHandle;
-
- if ( m_screenshotTarget )
+ if (m_screenshotTarget)
{
RenderPassDescriptor renderPassDescriptor = newRenderPassDescriptor();
renderPassDescriptor.colorAttachments[0].texture = currentDrawable().texture;
@@ -3919,7 +4051,7 @@ namespace bgfx { namespace mtl
rce.drawPrimitives(MTLPrimitiveTypeTriangle, 0, 3, 1);
rce.endEncoding();
- }
+ }
}
} /* namespace mtl */ } // namespace bgfx
diff --git a/3rdparty/bgfx/src/renderer_noop.cpp b/3rdparty/bgfx/src/renderer_noop.cpp
index 24fbfb4859d..02debefedc3 100644
--- a/3rdparty/bgfx/src/renderer_noop.cpp
+++ b/3rdparty/bgfx/src/renderer_noop.cpp
@@ -5,36 +5,38 @@
#include "bgfx_p.h"
-#if BGFX_CONFIG_RENDERER_NOOP
-
namespace bgfx { namespace noop
{
struct RendererContextNOOP : public RendererContextI
{
RendererContextNOOP()
{
- // Pretend all features that are not returning results to CPU
- // are available.
+ // Pretend all features are available.
g_caps.supported = 0
- | BGFX_CAPS_TEXTURE_COMPARE_LEQUAL
- | BGFX_CAPS_TEXTURE_COMPARE_ALL
- | BGFX_CAPS_TEXTURE_3D
- | BGFX_CAPS_VERTEX_ATTRIB_HALF
- | BGFX_CAPS_VERTEX_ATTRIB_UINT10
- | BGFX_CAPS_INSTANCING
- | BGFX_CAPS_FRAGMENT_DEPTH
+ | BGFX_CAPS_ALPHA_TO_COVERAGE
| BGFX_CAPS_BLEND_INDEPENDENT
| BGFX_CAPS_COMPUTE
- | BGFX_CAPS_FRAGMENT_ORDERING
- | BGFX_CAPS_SWAP_CHAIN
- | BGFX_CAPS_INDEX32
+ | BGFX_CAPS_CONSERVATIVE_RASTER
| BGFX_CAPS_DRAW_INDIRECT
+ | BGFX_CAPS_FRAGMENT_DEPTH
+ | BGFX_CAPS_FRAGMENT_ORDERING
+ | BGFX_CAPS_GRAPHICS_DEBUGGER
| BGFX_CAPS_HIDPI
- | BGFX_CAPS_TEXTURE_BLIT
- | BGFX_CAPS_ALPHA_TO_COVERAGE
- | BGFX_CAPS_CONSERVATIVE_RASTER
+ | BGFX_CAPS_HMD
+ | BGFX_CAPS_INDEX32
+ | BGFX_CAPS_INSTANCING
+ | BGFX_CAPS_OCCLUSION_QUERY
+ | BGFX_CAPS_RENDERER_MULTITHREADED
+ | BGFX_CAPS_SWAP_CHAIN
| BGFX_CAPS_TEXTURE_2D_ARRAY
+ | BGFX_CAPS_TEXTURE_3D
+ | BGFX_CAPS_TEXTURE_BLIT
+ | BGFX_CAPS_TEXTURE_COMPARE_ALL
+ | BGFX_CAPS_TEXTURE_COMPARE_LEQUAL
| BGFX_CAPS_TEXTURE_CUBE_ARRAY
+ | BGFX_CAPS_TEXTURE_READ_BACK
+ | BGFX_CAPS_VERTEX_ATTRIB_HALF
+ | BGFX_CAPS_VERTEX_ATTRIB_UINT10
;
}
@@ -42,170 +44,179 @@ namespace bgfx { namespace noop
{
}
- RendererType::Enum getRendererType() const BX_OVERRIDE
+ RendererType::Enum getRendererType() const override
{
return RendererType::Noop;
}
- const char* getRendererName() const BX_OVERRIDE
+ const char* getRendererName() const override
{
return BGFX_RENDERER_NOOP_NAME;
}
- void flip(HMD& /*_hmd*/) BX_OVERRIDE
+ bool isDeviceRemoved() override
+ {
+ return false;
+ }
+
+ void flip(HMD& /*_hmd*/) override
{
}
- void createIndexBuffer(IndexBufferHandle /*_handle*/, Memory* /*_mem*/, uint16_t /*_flags*/) BX_OVERRIDE
+ void createIndexBuffer(IndexBufferHandle /*_handle*/, Memory* /*_mem*/, uint16_t /*_flags*/) override
{
}
- void destroyIndexBuffer(IndexBufferHandle /*_handle*/) BX_OVERRIDE
+ void destroyIndexBuffer(IndexBufferHandle /*_handle*/) override
{
}
- void createVertexDecl(VertexDeclHandle /*_handle*/, const VertexDecl& /*_decl*/) BX_OVERRIDE
+ void createVertexDecl(VertexDeclHandle /*_handle*/, const VertexDecl& /*_decl*/) override
{
}
- void destroyVertexDecl(VertexDeclHandle /*_handle*/) BX_OVERRIDE
+ void destroyVertexDecl(VertexDeclHandle /*_handle*/) override
{
}
- void createVertexBuffer(VertexBufferHandle /*_handle*/, Memory* /*_mem*/, VertexDeclHandle /*_declHandle*/, uint16_t /*_flags*/) BX_OVERRIDE
+ void createVertexBuffer(VertexBufferHandle /*_handle*/, Memory* /*_mem*/, VertexDeclHandle /*_declHandle*/, uint16_t /*_flags*/) override
{
}
- void destroyVertexBuffer(VertexBufferHandle /*_handle*/) BX_OVERRIDE
+ void destroyVertexBuffer(VertexBufferHandle /*_handle*/) override
{
}
- void createDynamicIndexBuffer(IndexBufferHandle /*_handle*/, uint32_t /*_size*/, uint16_t /*_flags*/) BX_OVERRIDE
+ void createDynamicIndexBuffer(IndexBufferHandle /*_handle*/, uint32_t /*_size*/, uint16_t /*_flags*/) override
{
}
- void updateDynamicIndexBuffer(IndexBufferHandle /*_handle*/, uint32_t /*_offset*/, uint32_t /*_size*/, Memory* /*_mem*/) BX_OVERRIDE
+ void updateDynamicIndexBuffer(IndexBufferHandle /*_handle*/, uint32_t /*_offset*/, uint32_t /*_size*/, Memory* /*_mem*/) override
{
}
- void destroyDynamicIndexBuffer(IndexBufferHandle /*_handle*/) BX_OVERRIDE
+ void destroyDynamicIndexBuffer(IndexBufferHandle /*_handle*/) override
{
}
- void createDynamicVertexBuffer(VertexBufferHandle /*_handle*/, uint32_t /*_size*/, uint16_t /*_flags*/) BX_OVERRIDE
+ void createDynamicVertexBuffer(VertexBufferHandle /*_handle*/, uint32_t /*_size*/, uint16_t /*_flags*/) override
{
}
- void updateDynamicVertexBuffer(VertexBufferHandle /*_handle*/, uint32_t /*_offset*/, uint32_t /*_size*/, Memory* /*_mem*/) BX_OVERRIDE
+ void updateDynamicVertexBuffer(VertexBufferHandle /*_handle*/, uint32_t /*_offset*/, uint32_t /*_size*/, Memory* /*_mem*/) override
{
}
- void destroyDynamicVertexBuffer(VertexBufferHandle /*_handle*/) BX_OVERRIDE
+ void destroyDynamicVertexBuffer(VertexBufferHandle /*_handle*/) override
{
}
- void createShader(ShaderHandle /*_handle*/, Memory* /*_mem*/) BX_OVERRIDE
+ void createShader(ShaderHandle /*_handle*/, Memory* /*_mem*/) override
{
}
- void destroyShader(ShaderHandle /*_handle*/) BX_OVERRIDE
+ void destroyShader(ShaderHandle /*_handle*/) override
{
}
- void createProgram(ProgramHandle /*_handle*/, ShaderHandle /*_vsh*/, ShaderHandle /*_fsh*/) BX_OVERRIDE
+ void createProgram(ProgramHandle /*_handle*/, ShaderHandle /*_vsh*/, ShaderHandle /*_fsh*/) override
{
}
- void destroyProgram(ProgramHandle /*_handle*/) BX_OVERRIDE
+ void destroyProgram(ProgramHandle /*_handle*/) override
{
}
- void createTexture(TextureHandle /*_handle*/, Memory* /*_mem*/, uint32_t /*_flags*/, uint8_t /*_skip*/) BX_OVERRIDE
+ void createTexture(TextureHandle /*_handle*/, Memory* /*_mem*/, uint32_t /*_flags*/, uint8_t /*_skip*/) override
{
}
- void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) BX_OVERRIDE
+ void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) override
{
}
- void updateTexture(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/, const Rect& /*_rect*/, uint16_t /*_z*/, uint16_t /*_depth*/, uint16_t /*_pitch*/, const Memory* /*_mem*/) BX_OVERRIDE
+ void updateTexture(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/, const Rect& /*_rect*/, uint16_t /*_z*/, uint16_t /*_depth*/, uint16_t /*_pitch*/, const Memory* /*_mem*/) override
{
}
- void updateTextureEnd() BX_OVERRIDE
+ void updateTextureEnd() override
{
}
- void readTexture(TextureHandle /*_handle*/, void* /*_data*/, uint8_t /*_mip*/) BX_OVERRIDE
+ void readTexture(TextureHandle /*_handle*/, void* /*_data*/, uint8_t /*_mip*/) override
{
}
- void resizeTexture(TextureHandle /*_handle*/, uint16_t /*_width*/, uint16_t /*_height*/, uint8_t /*_numMips*/) BX_OVERRIDE
+ void resizeTexture(TextureHandle /*_handle*/, uint16_t /*_width*/, uint16_t /*_height*/, uint8_t /*_numMips*/) override
{
}
- void overrideInternal(TextureHandle /*_handle*/, uintptr_t /*_ptr*/) BX_OVERRIDE
+ void overrideInternal(TextureHandle /*_handle*/, uintptr_t /*_ptr*/) override
{
}
- uintptr_t getInternal(TextureHandle /*_handle*/) BX_OVERRIDE
+ uintptr_t getInternal(TextureHandle /*_handle*/) override
{
return 0;
}
- void destroyTexture(TextureHandle /*_handle*/) BX_OVERRIDE
+ void destroyTexture(TextureHandle /*_handle*/) override
+ {
+ }
+
+ void createFrameBuffer(FrameBufferHandle /*_handle*/, uint8_t /*_num*/, const Attachment* /*_attachment*/) override
{
}
- void createFrameBuffer(FrameBufferHandle /*_handle*/, uint8_t /*_num*/, const Attachment* /*_attachment*/) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle /*_handle*/, void* /*_nwh*/, uint32_t /*_width*/, uint32_t /*_height*/, TextureFormat::Enum /*_depthFormat*/) override
{
}
- void createFrameBuffer(FrameBufferHandle /*_handle*/, void* /*_nwh*/, uint32_t /*_width*/, uint32_t /*_height*/, TextureFormat::Enum /*_depthFormat*/) BX_OVERRIDE
+ void destroyFrameBuffer(FrameBufferHandle /*_handle*/) override
{
}
- void destroyFrameBuffer(FrameBufferHandle /*_handle*/) BX_OVERRIDE
+ void createUniform(UniformHandle /*_handle*/, UniformType::Enum /*_type*/, uint16_t /*_num*/, const char* /*_name*/) override
{
}
- void createUniform(UniformHandle /*_handle*/, UniformType::Enum /*_type*/, uint16_t /*_num*/, const char* /*_name*/) BX_OVERRIDE
+ void destroyUniform(UniformHandle /*_handle*/) override
{
}
- void destroyUniform(UniformHandle /*_handle*/) BX_OVERRIDE
+ void requestScreenShot(FrameBufferHandle /*_handle*/, const char* /*_filePath*/) override
{
}
- void requestScreenShot(FrameBufferHandle /*_handle*/, const char* /*_filePath*/) BX_OVERRIDE
+ void updateViewName(ViewId /*_id*/, const char* /*_name*/) override
{
}
- void updateViewName(uint8_t /*_id*/, const char* /*_name*/) BX_OVERRIDE
+ void updateUniform(uint16_t /*_loc*/, const void* /*_data*/, uint32_t /*_size*/) override
{
}
- void updateUniform(uint16_t /*_loc*/, const void* /*_data*/, uint32_t /*_size*/) BX_OVERRIDE
+ void setMarker(const char* /*_marker*/, uint32_t /*_size*/) override
{
}
- void setMarker(const char* /*_marker*/, uint32_t /*_size*/) BX_OVERRIDE
+ void invalidateOcclusionQuery(OcclusionQueryHandle /*_handle*/) override
{
}
- void invalidateOcclusionQuery(OcclusionQueryHandle /*_handle*/) BX_OVERRIDE
+ virtual void setName(Handle /*_handle*/, const char* /*_name*/) override
{
}
- void submit(Frame* /*_render*/, ClearQuad& /*_clearQuad*/, TextVideoMemBlitter& /*_textVideoMemBlitter*/) BX_OVERRIDE
+ void submit(Frame* /*_render*/, ClearQuad& /*_clearQuad*/, TextVideoMemBlitter& /*_textVideoMemBlitter*/) override
{
}
- void blitSetup(TextVideoMemBlitter& /*_blitter*/) BX_OVERRIDE
+ void blitSetup(TextVideoMemBlitter& /*_blitter*/) override
{
}
- void blitRender(TextVideoMemBlitter& /*_blitter*/, uint32_t /*_numIndices*/) BX_OVERRIDE
+ void blitRender(TextVideoMemBlitter& /*_blitter*/, uint32_t /*_numIndices*/) override
{
}
};
@@ -224,19 +235,3 @@ namespace bgfx { namespace noop
s_renderNOOP = NULL;
}
} /* namespace noop */ } // namespace bgfx
-
-#else
-
-namespace bgfx { namespace noop
-{
- RendererContextI* rendererCreate()
- {
- return NULL;
- }
-
- void rendererDestroy()
- {
- }
-} /* namespace noop */ } // namespace bgfx
-
-#endif // BGFX_CONFIG_RENDERER_NOOP
diff --git a/3rdparty/bgfx/src/renderer_vk.cpp b/3rdparty/bgfx/src/renderer_vk.cpp
index 8e2f66c513f..5468aebc6a7 100644
--- a/3rdparty/bgfx/src/renderer_vk.cpp
+++ b/3rdparty/bgfx/src/renderer_vk.cpp
@@ -209,7 +209,7 @@ VK_IMPORT_DEVICE
{ VK_FORMAT_B4G4R4A4_UNORM_PACK16, VK_FORMAT_B4G4R4A4_UNORM_PACK16, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGBA4
{ VK_FORMAT_B5G5R5A1_UNORM_PACK16, VK_FORMAT_B5G5R5A1_UNORM_PACK16, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGB5A1
{ VK_FORMAT_A2R10G10B10_UNORM_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RGB10A2
- { VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // R11G11B10F
+ { VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // RG11B10F
{ VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED }, // UnknownDepth
{ VK_FORMAT_UNDEFINED, VK_FORMAT_R16_UNORM, VK_FORMAT_D16_UNORM, VK_FORMAT_UNDEFINED }, // D16
{ VK_FORMAT_UNDEFINED, VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_UNDEFINED }, // D24
@@ -332,7 +332,7 @@ VK_IMPORT_DEVICE
return;
}
- bx::alignedFree(g_allocator, _memory, BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT);
+ bx::alignedFree(g_allocator, _memory, 8);
}
static void VKAPI_PTR internalAllocationNotification(void* _userData, size_t _size, VkInternalAllocationType _allocationType, VkSystemAllocationScope _allocationScope)
@@ -725,7 +725,7 @@ VK_IMPORT_DEVICE
ErrorState::Enum errorState = ErrorState::Default;
- m_fbh.idx = invalidHandle;
+ m_fbh.idx = kInvalidHandle;
bx::memSet(m_uniforms, 0, sizeof(m_uniforms) );
bx::memSet(&m_resolution, 0, sizeof(m_resolution) );
@@ -747,7 +747,7 @@ VK_IMPORT_DEVICE
if (NULL == m_vulkan1dll)
{
- BX_TRACE("Failed to load vulkan dynamic library.");
+ BX_TRACE("Init error: Failed to load vulkan dynamic library.");
goto error;
}
@@ -763,7 +763,7 @@ VK_IMPORT
if (!imported)
{
- BX_TRACE("Failed to load shared library functions.");
+ BX_TRACE("Init error: Failed to load shared library functions.");
goto error;
}
@@ -831,7 +831,7 @@ VK_IMPORT
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateInstance failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateInstance failed %d: %s.", result, getName(result) );
goto error;
}
@@ -847,7 +847,7 @@ VK_IMPORT_INSTANCE
if (!imported)
{
- BX_TRACE("Failed to load instance functions.");
+ BX_TRACE("Init error: Failed to load instance functions.");
goto error;
}
@@ -882,7 +882,7 @@ VK_IMPORT_INSTANCE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkEnumeratePhysicalDevices failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkEnumeratePhysicalDevices failed %d: %s.", result, getName(result) );
goto error;
}
@@ -895,7 +895,7 @@ VK_IMPORT_INSTANCE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkEnumeratePhysicalDevices failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkEnumeratePhysicalDevices failed %d: %s.", result, getName(result) );
goto error;
}
@@ -961,6 +961,8 @@ VK_IMPORT_INSTANCE
g_caps.vendorId = uint16_t(m_deviceProperties.vendorID);
g_caps.deviceId = uint16_t(m_deviceProperties.deviceID);
+ g_caps.limits.maxTextureSize = m_deviceProperties.limits.maxImageDimension2D;
+ g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(m_deviceProperties.limits.maxFragmentOutputAttachments, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) );
{
// VkFormatProperties fp;
@@ -986,7 +988,7 @@ VK_IMPORT_INSTANCE
{
uint8_t support = BGFX_CAPS_FORMAT_TEXTURE_NONE;
- const bool depth = isDepth(TextureFormat::Enum(ii) );
+ const bool depth = bimg::isDepth(bimg::TextureFormat::Enum(ii) );
VkFormat fmt = depth
? s_textureFormat[ii].m_fmtDsv
: s_textureFormat[ii].m_fmt
@@ -1086,7 +1088,7 @@ VK_IMPORT_INSTANCE
if (UINT32_MAX == m_qfiGraphics)
{
- BX_TRACE("Unable to find graphics queue.");
+ BX_TRACE("Init error: Unable to find graphics queue.");
goto error;
}
}
@@ -1145,7 +1147,7 @@ VK_IMPORT_INSTANCE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateDevice failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateDevice failed %d: %s.", result, getName(result) );
goto error;
}
}
@@ -1162,7 +1164,7 @@ VK_IMPORT_DEVICE
if (!imported)
{
- BX_TRACE("Failed to load device functions.");
+ BX_TRACE("Init error: Failed to load device functions.");
goto error;
}
@@ -1171,7 +1173,7 @@ VK_IMPORT_DEVICE
m_backBufferDepthStencilFormat =
VK_FORMAT_D32_SFLOAT_S8_UINT
- // VK_FORMAT_D24_UNORM_S8_UINT
+// VK_FORMAT_D24_UNORM_S8_UINT
;
{
@@ -1236,7 +1238,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateRenderPass failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateRenderPass failed %d: %s.", result, getName(result) );
goto error;
}
}
@@ -1296,7 +1298,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateSurfaceKHR failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateSurfaceKHR failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1308,7 +1310,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkGetPhysicalDeviceSurfaceSupportKHR failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkGetPhysicalDeviceSurfaceSupportKHR failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1317,7 +1319,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkGetPhysicalDeviceSurfaceCapabilitiesKHR failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1326,7 +1328,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkGetPhysicalDeviceSurfaceFormatsKHR failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkGetPhysicalDeviceSurfaceFormatsKHR failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1341,7 +1343,7 @@ VK_IMPORT_DEVICE
result = vkGetPhysicalDeviceSurfacePresentModesKHR(m_physicalDevice, m_surface, &numPresentModes, NULL);
if (VK_SUCCESS != result)
{
- BX_TRACE("vkGetPhysicalDeviceSurfacePresentModesKHR failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkGetPhysicalDeviceSurfacePresentModesKHR failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1375,7 +1377,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateSwapchainKHR failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateSwapchainKHR failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1384,13 +1386,13 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkGetSwapchainImagesKHR failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkGetSwapchainImagesKHR failed %d: %s.", result, getName(result) );
goto error;
}
if (numSwapchainImages < m_sci.minImageCount)
{
- BX_TRACE("vkGetSwapchainImagesKHR: numSwapchainImages %d, minImageCount %d."
+ BX_TRACE("Init error: vkGetSwapchainImagesKHR: numSwapchainImages %d, minImageCount %d."
, numSwapchainImages
, m_sci.minImageCount
);
@@ -1402,7 +1404,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkGetSwapchainImagesKHR failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkGetSwapchainImagesKHR failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1437,7 +1439,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateImage failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateImage failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1459,7 +1461,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkAllocateMemory failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkAllocateMemory failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1467,7 +1469,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkBindImageMemory failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkBindImageMemory failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1494,7 +1496,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateImageView failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateImageView failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1542,7 +1544,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateImageView failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateImageView failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1551,7 +1553,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateFramebuffer failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateFramebuffer failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1559,7 +1561,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateSemaphore failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateSemaphore failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1578,7 +1580,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateFence failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateFence failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1592,7 +1594,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
vkDestroy(m_fence);
- BX_TRACE("vkCreateCommandPool failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateCommandPool failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1609,7 +1611,7 @@ VK_IMPORT_DEVICE
{
vkDestroy(m_commandPool);
vkDestroy(m_fence);
- BX_TRACE("vkAllocateCommandBuffers failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkAllocateCommandBuffers failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1695,7 +1697,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateDescriptorPool failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateDescriptorPool failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1709,7 +1711,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreateDescriptorSetLayout failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreateDescriptorSetLayout failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1725,7 +1727,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreatePipelineLayout failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreatePipelineLayout failed %d: %s.", result, getName(result) );
goto error;
}
@@ -1739,7 +1741,7 @@ VK_IMPORT_DEVICE
if (VK_SUCCESS != result)
{
- BX_TRACE("vkCreatePipelineCache failed %d: %s.", result, getName(result) );
+ BX_TRACE("Init error: vkCreatePipelineCache failed %d: %s.", result, getName(result) );
goto error;
}
}
@@ -1909,17 +1911,22 @@ VK_IMPORT_DEVICE
unloadRenderDoc(m_renderdocdll);
}
- RendererType::Enum getRendererType() const BX_OVERRIDE
+ RendererType::Enum getRendererType() const override
{
return RendererType::Vulkan;
}
- const char* getRendererName() const BX_OVERRIDE
+ const char* getRendererName() const override
{
return BGFX_RENDERER_VULKAN_NAME;
}
- void flip(HMD& /*_hmd*/) BX_OVERRIDE
+ bool isDeviceRemoved() override
+ {
+ return false;
+ }
+
+ void flip(HMD& /*_hmd*/) override
{
if (VK_NULL_HANDLE != m_swapchain)
{
@@ -1936,140 +1943,140 @@ VK_IMPORT_DEVICE
}
}
- void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) BX_OVERRIDE
+ void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_mem->size, _mem->data, _flags, false);
}
- void destroyIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) BX_OVERRIDE
+ void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) override
{
VertexDecl& decl = m_vertexDecls[_handle.idx];
bx::memCopy(&decl, &_decl, sizeof(VertexDecl) );
dump(decl);
}
- void destroyVertexDecl(VertexDeclHandle /*_handle*/) BX_OVERRIDE
+ void destroyVertexDecl(VertexDeclHandle /*_handle*/) override
{
}
- void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) BX_OVERRIDE
+ void createVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle, uint16_t _flags) override
{
m_vertexBuffers[_handle.idx].create(_mem->size, _mem->data, _declHandle, _flags);
}
- void destroyVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
m_indexBuffers[_handle.idx].create(_size, NULL, _flags, false);
}
- void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
BX_UNUSED(_handle, _offset, _size, _mem);
// m_indexBuffers[_handle.idx].update(m_commandBuffer, _offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicIndexBuffer(IndexBufferHandle _handle) override
{
m_indexBuffers[_handle.idx].destroy();
}
- void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) BX_OVERRIDE
+ void createDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size, uint16_t _flags) override
{
VertexDeclHandle decl = BGFX_INVALID_HANDLE;
m_vertexBuffers[_handle.idx].create(_size, NULL, decl, _flags);
}
- void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) BX_OVERRIDE
+ void updateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem) override
{
BX_UNUSED(_handle, _offset, _size, _mem);
// m_vertexBuffers[_handle.idx].update(m_commandBuffer, _offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
- void destroyDynamicVertexBuffer(VertexBufferHandle _handle) BX_OVERRIDE
+ void destroyDynamicVertexBuffer(VertexBufferHandle _handle) override
{
m_vertexBuffers[_handle.idx].destroy();
}
- void createShader(ShaderHandle _handle, Memory* _mem) BX_OVERRIDE
+ void createShader(ShaderHandle _handle, Memory* _mem) override
{
m_shaders[_handle.idx].create(_mem);
}
- void destroyShader(ShaderHandle _handle) BX_OVERRIDE
+ void destroyShader(ShaderHandle _handle) override
{
m_shaders[_handle.idx].destroy();
}
- void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) BX_OVERRIDE
+ void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) override
{
m_program[_handle.idx].create(&m_shaders[_vsh.idx], isValid(_fsh) ? &m_shaders[_fsh.idx] : NULL);
}
- void destroyProgram(ProgramHandle _handle) BX_OVERRIDE
+ void destroyProgram(ProgramHandle _handle) override
{
m_program[_handle.idx].destroy();
}
- void createTexture(TextureHandle /*_handle*/, Memory* /*_mem*/, uint32_t /*_flags*/, uint8_t /*_skip*/) BX_OVERRIDE
+ void createTexture(TextureHandle /*_handle*/, Memory* /*_mem*/, uint32_t /*_flags*/, uint8_t /*_skip*/) override
{
}
- void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) BX_OVERRIDE
+ void updateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/) override
{
}
- void updateTexture(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/, const Rect& /*_rect*/, uint16_t /*_z*/, uint16_t /*_depth*/, uint16_t /*_pitch*/, const Memory* /*_mem*/) BX_OVERRIDE
+ void updateTexture(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/, const Rect& /*_rect*/, uint16_t /*_z*/, uint16_t /*_depth*/, uint16_t /*_pitch*/, const Memory* /*_mem*/) override
{
}
- void updateTextureEnd() BX_OVERRIDE
+ void updateTextureEnd() override
{
}
- void readTexture(TextureHandle /*_handle*/, void* /*_data*/, uint8_t /*_mip*/) BX_OVERRIDE
+ void readTexture(TextureHandle /*_handle*/, void* /*_data*/, uint8_t /*_mip*/) override
{
}
- void resizeTexture(TextureHandle /*_handle*/, uint16_t /*_width*/, uint16_t /*_height*/, uint8_t /*_numMips*/) BX_OVERRIDE
+ void resizeTexture(TextureHandle /*_handle*/, uint16_t /*_width*/, uint16_t /*_height*/, uint8_t /*_numMips*/) override
{
}
- void overrideInternal(TextureHandle /*_handle*/, uintptr_t /*_ptr*/) BX_OVERRIDE
+ void overrideInternal(TextureHandle /*_handle*/, uintptr_t /*_ptr*/) override
{
}
- uintptr_t getInternal(TextureHandle /*_handle*/) BX_OVERRIDE
+ uintptr_t getInternal(TextureHandle /*_handle*/) override
{
return 0;
}
- void destroyTexture(TextureHandle /*_handle*/) BX_OVERRIDE
+ void destroyTexture(TextureHandle /*_handle*/) override
{
}
- void createFrameBuffer(FrameBufferHandle /*_handle*/, uint8_t /*_num*/, const Attachment* /*_attachment*/) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle /*_handle*/, uint8_t /*_num*/, const Attachment* /*_attachment*/) override
{
}
- void createFrameBuffer(FrameBufferHandle /*_handle*/, void* /*_nwh*/, uint32_t /*_width*/, uint32_t /*_height*/, TextureFormat::Enum /*_depthFormat*/) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle /*_handle*/, void* /*_nwh*/, uint32_t /*_width*/, uint32_t /*_height*/, TextureFormat::Enum /*_depthFormat*/) override
{
}
- void destroyFrameBuffer(FrameBufferHandle /*_handle*/) BX_OVERRIDE
+ void destroyFrameBuffer(FrameBufferHandle /*_handle*/) override
{
}
- void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) BX_OVERRIDE
+ void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) override
{
if (NULL != m_uniforms[_handle.idx])
{
@@ -2083,45 +2090,52 @@ VK_IMPORT_DEVICE
m_uniformReg.add(_handle, _name, data);
}
- void destroyUniform(UniformHandle _handle) BX_OVERRIDE
+ void destroyUniform(UniformHandle _handle) override
{
BX_FREE(g_allocator, m_uniforms[_handle.idx]);
m_uniforms[_handle.idx] = NULL;
}
- void requestScreenShot(FrameBufferHandle /*_handle*/, const char* /*_filePath*/) BX_OVERRIDE
+ void requestScreenShot(FrameBufferHandle /*_handle*/, const char* /*_filePath*/) override
{
}
- void updateViewName(uint8_t _id, const char* _name) BX_OVERRIDE
+ void updateViewName(ViewId _id, const char* _name) override
{
- bx::strlcpy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
- , _name
+ bx::strCopy(&s_viewName[_id][BGFX_CONFIG_MAX_VIEW_NAME_RESERVED]
, BX_COUNTOF(s_viewName[0]) - BGFX_CONFIG_MAX_VIEW_NAME_RESERVED
+ , _name
);
}
- void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) BX_OVERRIDE
+ void updateUniform(uint16_t _loc, const void* _data, uint32_t _size) override
{
bx::memCopy(m_uniforms[_loc], _data, _size);
}
- void setMarker(const char* /*_marker*/, uint32_t /*_size*/) BX_OVERRIDE
+ void setMarker(const char* /*_marker*/, uint32_t /*_size*/) override
{
}
- void invalidateOcclusionQuery(OcclusionQueryHandle _handle) BX_OVERRIDE
+ void invalidateOcclusionQuery(OcclusionQueryHandle _handle) override
{
BX_UNUSED(_handle);
}
- void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) BX_OVERRIDE;
+ virtual void setName(Handle _handle, const char* _name) override
+ {
+ BX_UNUSED(_handle, _name)
+ }
+
+ void submitBlit(BlitState& _bs, uint16_t _view);
+
+ void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) override;
- void blitSetup(TextVideoMemBlitter& /*_blitter*/) BX_OVERRIDE
+ void blitSetup(TextVideoMemBlitter& /*_blitter*/) override
{
}
- void blitRender(TextVideoMemBlitter& /*_blitter*/, uint32_t /*_numIndices*/) BX_OVERRIDE
+ void blitRender(TextVideoMemBlitter& /*_blitter*/, uint32_t /*_numIndices*/) override
{
}
@@ -3492,18 +3506,18 @@ VK_DESTROY
}
}
- uint16_t shaderSize;
+ uint32_t shaderSize;
bx::read(&reader, shaderSize);
#if 1
const void* code = reader.getDataPtr();
bx::skip(&reader, shaderSize+1);
- m_code = alloc( ( (shaderSize+3)/4)*4);
+ m_code = alloc( ( ( (shaderSize+3)/4)*4) );
bx::memSet(m_code->data, 0, m_code->size);
bx::memCopy(m_code->data
, code
- , shaderSize+1
+ , shaderSize
);
#else
#include "../examples/runtime/shaders/spv/vert.spv.h"
@@ -3528,7 +3542,12 @@ VK_DESTROY
smci.flags = 0;
smci.codeSize = m_code->size;
smci.pCode = (const uint32_t*)m_code->data;
- VK_CHECK(vkCreateShaderModule(s_renderVK->m_device, &smci, s_renderVK->m_allocatorCb, &m_module) );
+ VK_CHECK(vkCreateShaderModule(
+ s_renderVK->m_device
+ , &smci
+ , s_renderVK->m_allocatorCb
+ , &m_module
+ ) );
bx::memSet(m_attrMask, 0, sizeof(m_attrMask) );
m_attrMask[Attrib::Position] = UINT16_MAX;
@@ -3605,13 +3624,22 @@ VK_DESTROY
{
}
+ void RendererContextVK::submitBlit(BlitState& _bs, uint16_t _view)
+ {
+ while (_bs.hasItem(_view) )
+ {
+ const BlitItem& blit = _bs.advance();
+ BX_UNUSED(blit);
+ }
+ }
+
void RendererContextVK::submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter)
{
BX_UNUSED(_render, _clearQuad, _textVideoMemBlitter);
updateResolution(_render->m_resolution);
- int64_t elapsed = -bx::getHPCounter();
+ int64_t timeBegin = bx::getHPCounter();
int64_t captureElapsed = 0;
// m_gpuTimer.begin(m_commandList);
@@ -3644,8 +3672,8 @@ VK_DESTROY
// bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME);
// setDebugWireframe(wireframe);
- uint16_t currentSamplerStateIdx = invalidHandle;
- uint16_t currentProgramIdx = invalidHandle;
+ uint16_t currentSamplerStateIdx = kInvalidHandle;
+ uint16_t currentProgramIdx = kInvalidHandle;
uint32_t currentBindHash = 0;
bool hasPredefined = false;
bool commandListChanged = false;
@@ -3654,10 +3682,7 @@ VK_DESTROY
uint16_t view = UINT16_MAX;
FrameBufferHandle fbh = { BGFX_CONFIG_MAX_FRAME_BUFFERS };
- BlitKey blitKey;
- blitKey.decode(_render->m_blitKeys[0]);
- uint16_t numBlitItems = _render->m_numBlitItems;
- uint16_t blitItem = 0;
+ BlitState bs(_render);
uint32_t blendFactor = 0;
@@ -3731,9 +3756,9 @@ VK_DESTROY
// uint8_t eye = 0;
// uint8_t restartState = 0;
- viewState.m_rect = _render->m_rect[0];
+ viewState.m_rect = _render->m_view[0].m_rect;
- int32_t numItems = _render->m_num;
+ int32_t numItems = _render->m_numRenderItems;
for (int32_t item = 0, restartItem = numItems; item < numItems || restartItem < numItems;)
{
const uint64_t encodedKey = _render->m_sortKeys[item];
@@ -3745,7 +3770,9 @@ VK_DESTROY
|| item == numItems
;
- const RenderItem& renderItem = _render->m_renderItem[_render->m_sortValues[item] ];
+ const uint32_t itemIdx = _render->m_sortValues[item];
+ const RenderItem& renderItem = _render->m_renderItem[itemIdx];
+ const RenderBind& renderBind = _render->m_renderItemBind[itemIdx];
++item;
if (viewChanged)
@@ -3765,17 +3792,17 @@ finishAll();
view = key.m_view;
currentPipeline = VK_NULL_HANDLE;
- currentSamplerStateIdx = invalidHandle;
+ currentSamplerStateIdx = kInvalidHandle;
BX_UNUSED(currentSamplerStateIdx);
- currentProgramIdx = invalidHandle;
+ currentProgramIdx = kInvalidHandle;
hasPredefined = false;
- fbh = _render->m_fb[view];
+ fbh = _render->m_view[view].m_fbh;
setFrameBuffer(fbh);
- viewState.m_rect = _render->m_rect[view];
- const Rect& rect = _render->m_rect[view];
- const Rect& scissorRect = _render->m_scissor[view];
+ viewState.m_rect = _render->m_view[view].m_rect;
+ const Rect& rect = _render->m_view[view].m_rect;
+ const Rect& scissorRect = _render->m_view[view].m_scissor;
viewHasScissor = !scissorRect.isZero();
viewScissorRect = viewHasScissor ? scissorRect : rect;
@@ -3805,7 +3832,7 @@ BX_UNUSED(currentSamplerStateIdx);
restoreScissor = false;
- Clear& clr = _render->m_clear[view];
+ Clear& clr = _render->m_view[view].m_clear;
if (BGFX_CLEAR_NONE != clr.m_flags)
{
Rect clearRect = rect;
@@ -3815,77 +3842,7 @@ BX_UNUSED(currentSamplerStateIdx);
prim = s_primInfo[BX_COUNTOF(s_primName)]; // Force primitive type update.
- const uint8_t blitView = SortKey::decodeView(encodedKey);
- for (; blitItem < numBlitItems && blitKey.m_view <= blitView; blitItem++)
- {
- const BlitItem& blit = _render->m_blitItem[blitItem];
- blitKey.decode(_render->m_blitKeys[blitItem+1]);
- BX_UNUSED(blit);
-
-// const TextureD3D12& src = m_textures[blit.m_src.idx];
-// const TextureD3D12& dst = m_textures[blit.m_dst.idx];
-//
-// uint32_t srcWidth = bx::uint32_min(src.m_width, blit.m_srcX + blit.m_width) - blit.m_srcX;
-// uint32_t srcHeight = bx::uint32_min(src.m_height, blit.m_srcY + blit.m_height) - blit.m_srcY;
-// uint32_t srcDepth = bx::uint32_min(src.m_depth, blit.m_srcZ + blit.m_depth) - blit.m_srcZ;
-// uint32_t dstWidth = bx::uint32_min(dst.m_width, blit.m_dstX + blit.m_width) - blit.m_dstX;
-// uint32_t dstHeight = bx::uint32_min(dst.m_height, blit.m_dstY + blit.m_height) - blit.m_dstY;
-// uint32_t dstDepth = bx::uint32_min(dst.m_depth, blit.m_dstZ + blit.m_depth) - blit.m_dstZ;
-// uint32_t width = bx::uint32_min(srcWidth, dstWidth);
-// uint32_t height = bx::uint32_min(srcHeight, dstHeight);
-// uint32_t depth = bx::uint32_min(srcDepth, dstDepth);
-//
-// if (TextureD3D12::Texture3D == src.m_type)
-// {
-// D3D12_BOX box;
-// box.left = blit.m_srcX;
-// box.top = blit.m_srcY;
-// box.front = blit.m_srcZ;
-// box.right = blit.m_srcX + width;
-// box.bottom = blit.m_srcY + height;;
-// box.back = blit.m_srcZ + bx::uint32_imax(1, depth);
-//
-// D3D12_TEXTURE_COPY_LOCATION dstLocation = { dst.m_ptr, D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, {{ 0 }} };
-// D3D12_TEXTURE_COPY_LOCATION srcLocation = { src.m_ptr, D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, {{ 0 }} };
-// m_commandList->CopyTextureRegion(&dstLocation
-// , blit.m_dstX
-// , blit.m_dstY
-// , blit.m_dstZ
-// , &srcLocation
-// , &box
-// );
-// }
-// else
-// {
-// D3D12_BOX box;
-// box.left = blit.m_srcX;
-// box.top = blit.m_srcY;
-// box.front = 0;
-// box.right = blit.m_srcX + width;
-// box.bottom = blit.m_srcY + height;;
-// box.back = 1;
-//
-// const uint32_t srcZ = TextureD3D12::TextureCube == src.m_type
-// ? blit.m_srcZ
-// : 0
-// ;
-// const uint32_t dstZ = TextureD3D12::TextureCube == dst.m_type
-// ? blit.m_dstZ
-// : 0
-// ;
-//
-// D3D12_TEXTURE_COPY_LOCATION dstLocation = { dst.m_ptr, D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, {{ dstZ*dst.m_numMips+blit.m_dstMip }} };
-// D3D12_TEXTURE_COPY_LOCATION srcLocation = { src.m_ptr, D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, {{ srcZ*src.m_numMips+blit.m_srcMip }} };
-// bool depthStencil = isDepth(TextureFormat::Enum(src.m_textureFormat) );
-// m_commandList->CopyTextureRegion(&dstLocation
-// , blit.m_dstX
-// , blit.m_dstY
-// , 0
-// , &srcLocation
-// , depthStencil ? NULL : &box
-// );
-// }
- }
+ submitBlit(bs, view);
}
if (isCompute)
@@ -3912,7 +3869,7 @@ BX_UNUSED(currentSamplerStateIdx);
currentBindHash = 0;
}
-// uint32_t bindHash = bx::hashMurmur2A(compute.m_bind, sizeof(compute.m_bind) );
+// uint32_t bindHash = bx::hash<bx::HashMurmur2A>(renderBind.m_bind, sizeof(renderBind.m_bind) );
// if (currentBindHash != bindHash)
// {
// currentBindHash = bindHash;
@@ -3925,8 +3882,8 @@ BX_UNUSED(currentSamplerStateIdx);
//
// for (uint32_t ii = 0; ii < BGFX_MAX_COMPUTE_BINDINGS; ++ii)
// {
-// const Binding& bind = compute.m_bind[ii];
-// if (invalidHandle != bind.m_idx)
+// const Binding& bind = renderBind.m_bind[ii];
+// if (kInvalidHandle != bind.m_idx)
// {
// switch (bind.m_type)
// {
@@ -4001,10 +3958,10 @@ BX_UNUSED(currentSamplerStateIdx);
// }
bool constantsChanged = false;
- if (compute.m_constBegin < compute.m_constEnd
+ if (compute.m_uniformBegin < compute.m_uniformEnd
|| currentProgramIdx != key.m_program)
{
- rendererUpdateUniforms(this, _render->m_uniformBuffer, compute.m_constBegin, compute.m_constEnd);
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[compute.m_uniformIdx], compute.m_uniformBegin, compute.m_uniformEnd);
currentProgramIdx = key.m_program;
ProgramVK& program = m_program[currentProgramIdx];
@@ -4103,8 +4060,8 @@ BX_UNUSED(currentSamplerStateIdx);
currentPipeline = VK_NULL_HANDLE;
currentBindHash = 0;
- currentSamplerStateIdx = invalidHandle;
- currentProgramIdx = invalidHandle;
+ currentSamplerStateIdx = kInvalidHandle;
+ currentProgramIdx = kInvalidHandle;
currentState.clear();
currentState.m_scissor = !draw.m_scissor;
changedFlags = BGFX_STATE_MASK;
@@ -4116,7 +4073,7 @@ BX_UNUSED(currentSamplerStateIdx);
primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT);
}
- rendererUpdateUniforms(this, _render->m_uniformBuffer, draw.m_constBegin, draw.m_constEnd);
+ rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd);
if (isValid(draw.m_stream[0].m_handle) )
{
@@ -4138,7 +4095,7 @@ BX_UNUSED(currentSamplerStateIdx);
);
uint16_t scissor = draw.m_scissor;
- uint32_t bindHash = bx::hashMurmur2A(draw.m_bind, sizeof(draw.m_bind) );
+ uint32_t bindHash = bx::hash<bx::HashMurmur2A>(renderBind.m_bind, sizeof(renderBind.m_bind) );
if (currentBindHash != bindHash
|| 0 != changedStencil
|| (hasFactor && blendFactor != draw.m_rgba)
@@ -4164,8 +4121,8 @@ BX_UNUSED(currentSamplerStateIdx);
// srvHandle[0].ptr = 0;
// for (uint32_t stage = 0; stage < BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; ++stage)
// {
-// const Binding& bind = draw.m_bind[stage];
-// if (invalidHandle != bind.m_idx)
+// const Binding& bind = renderBind.m_bind[stage];
+// if (kInvalidHandle != bind.m_idx)
// {
// TextureD3D12& texture = m_textures[bind.m_idx];
// texture.setState(m_commandList, D3D12_RESOURCE_STATE_GENERIC_READ);
@@ -4255,7 +4212,7 @@ BX_UNUSED(currentSamplerStateIdx);
restoreScissor = false;
VkRect2D rc;
rc.offset.x = viewScissorRect.m_x;
- rc.offset.x = viewScissorRect.m_y;
+ rc.offset.y = viewScissorRect.m_y;
rc.extent.width = viewScissorRect.m_x + viewScissorRect.m_width;
rc.extent.height = viewScissorRect.m_y + viewScissorRect.m_height;
vkCmdSetScissor(m_commandBuffer, 0, 1, &rc);
@@ -4265,7 +4222,7 @@ BX_UNUSED(currentSamplerStateIdx);
{
restoreScissor = true;
Rect scissorRect;
- scissorRect.setIntersect(viewScissorRect,_render->m_rectCache.m_cache[scissor]);
+ scissorRect.setIntersect(viewScissorRect, _render->m_frameCache.m_rectCache.m_cache[scissor]);
if (scissorRect.isZeroArea() )
{
continue;
@@ -4273,7 +4230,7 @@ BX_UNUSED(currentSamplerStateIdx);
VkRect2D rc;
rc.offset.x = scissorRect.m_x;
- rc.offset.x = scissorRect.m_y;
+ rc.offset.y = scissorRect.m_y;
rc.extent.width = scissorRect.m_x + scissorRect.m_width;
rc.extent.height = scissorRect.m_y + scissorRect.m_height;
vkCmdSetScissor(m_commandBuffer, 0, 1, &rc);
@@ -4287,7 +4244,7 @@ BX_UNUSED(currentSamplerStateIdx);
}
bool constantsChanged = false;
- if (draw.m_constBegin < draw.m_constEnd
+ if (draw.m_uniformBegin < draw.m_uniformEnd
|| currentProgramIdx != key.m_program
|| BGFX_STATE_ALPHA_REF_MASK & changedFlags)
{
@@ -4393,19 +4350,13 @@ BX_UNUSED(currentSamplerStateIdx);
}
}
+ submitBlit(bs, BGFX_CONFIG_MAX_VIEWS);
+
// m_batch.end(m_commandList);
}
- int64_t now = bx::getHPCounter();
- elapsed += now;
-
- static int64_t last = now;
-
- Stats& perfStats = _render->m_perfStats;
- perfStats.cpuTimeBegin = last;
-
- int64_t frameTime = now - last;
- last = now;
+ int64_t timeEnd = bx::getHPCounter();
+ int64_t frameTime = timeEnd - timeBegin;
static int64_t min = frameTime;
static int64_t max = frameTime;
@@ -4435,7 +4386,9 @@ BX_UNUSED(presentMin, presentMax);
const int64_t timerFreq = bx::getHPFrequency();
- perfStats.cpuTimeEnd = now;
+ Stats& perfStats = _render->m_perfStats;
+ perfStats.cpuTimeBegin = timeBegin;
+ perfStats.cpuTimeEnd = timeEnd;
perfStats.cpuTimerFreq = timerFreq;
// perfStats.gpuTimeBegin = m_gpuTimer.m_begin;
// perfStats.gpuTimeEnd = m_gpuTimer.m_end;
@@ -4443,6 +4396,8 @@ BX_UNUSED(presentMin, presentMax);
// perfStats.numDraw = statsKeyType[0];
// perfStats.numCompute = statsKeyType[1];
// perfStats.maxGpuLatency = maxGpuLatency;
+ perfStats.gpuMemoryMax = -INT64_MAX;
+ perfStats.gpuMemoryUsed = -INT64_MAX;
if (_render->m_debug & (BGFX_DEBUG_IFH|BGFX_DEBUG_STATS) )
{
@@ -4451,12 +4406,13 @@ BX_UNUSED(presentMin, presentMax);
// m_needPresent = true;
TextVideoMem& tvm = m_textVideoMem;
- static int64_t next = now;
+ static int64_t next = timeEnd;
- if (now >= next)
+ if (timeEnd >= next)
{
- next = now + bx::getHPFrequency();
- double freq = double(bx::getHPFrequency() );
+ next = timeEnd + timerFreq;
+
+ double freq = double(timerFreq);
double toMs = 1000.0 / freq;
tvm.clear();
@@ -4537,9 +4493,9 @@ BX_UNUSED(presentMin, presentMax);
, !!(m_resolution.m_flags&BGFX_RESET_MAXANISOTROPY) ? '\xfe' : ' '
);
- double elapsedCpuMs = double(elapsed)*toMs;
+ double elapsedCpuMs = double(frameTime)*toMs;
tvm.printf(10, pos++, 0x8e, " Submitted: %5d (draw %5d, compute %4d) / CPU %7.4f [ms] "
- , _render->m_num
+ , _render->m_numRenderItems
, statsKeyType[0]
, statsKeyType[1]
, elapsedCpuMs
@@ -4573,7 +4529,7 @@ BX_UNUSED(presentMin, presentMax);
}
tvm.printf(10, pos++, 0x8e, " Indices: %7d ", statsNumIndices);
- tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
+// tvm.printf(10, pos++, 0x8e, " Uniform size: %7d, Max: %7d ", _render->m_uniformEnd, _render->m_uniformMax);
tvm.printf(10, pos++, 0x8e, " DVB size: %7d ", _render->m_vboffset);
tvm.printf(10, pos++, 0x8e, " DIB size: %7d ", _render->m_iboffset);
diff --git a/3rdparty/bgfx/src/shader.cpp b/3rdparty/bgfx/src/shader.cpp
index 76493223590..6e967d534eb 100644
--- a/3rdparty/bgfx/src/shader.cpp
+++ b/3rdparty/bgfx/src/shader.cpp
@@ -15,7 +15,7 @@ namespace bgfx
bx::WriterI* writer = reinterpret_cast<bx::WriterI*>(_userData);
char temp[512];
toString(temp, sizeof(temp), _instruction);
- bx::write(writer, temp, (int32_t)bx::strnlen(temp) );
+ bx::write(writer, temp, (int32_t)bx::strLen(temp) );
return true;
}
@@ -24,7 +24,7 @@ namespace bgfx
bx::WriterI* writer = reinterpret_cast<bx::WriterI*>(_userData);
char temp[512];
toString(temp, sizeof(temp), _instruction);
- bx::write(writer, temp, (int32_t)bx::strnlen(temp) );
+ bx::write(writer, temp, (int32_t)bx::strLen(temp) );
return true;
}
@@ -33,7 +33,7 @@ namespace bgfx
bx::WriterI* writer = reinterpret_cast<bx::WriterI*>(_userData);
char temp[512];
toString(temp, sizeof(temp), _instruction);
- bx::write(writer, temp, (int32_t)bx::strnlen(temp) );
+ bx::write(writer, temp, (int32_t)bx::strLen(temp) );
return true;
}
@@ -107,7 +107,7 @@ namespace bgfx
bx::read(_reader, regCount, _err);
}
- uint16_t shaderSize;
+ uint32_t shaderSize;
bx::read(_reader, shaderSize, _err);
if (!_err->isOk() ) { return; }
diff --git a/3rdparty/bgfx/src/shader_dx9bc.cpp b/3rdparty/bgfx/src/shader_dx9bc.cpp
index b3f7c43ba94..a136b9249bb 100644
--- a/3rdparty/bgfx/src/shader_dx9bc.cpp
+++ b/3rdparty/bgfx/src/shader_dx9bc.cpp
@@ -443,12 +443,12 @@ namespace bgfx
switch (_instruction.numOperands)
{
- case 6: size += read(_reader, _instruction.operand[currOp++], _err);
- case 5: size += read(_reader, _instruction.operand[currOp++], _err);
- case 4: size += read(_reader, _instruction.operand[currOp++], _err);
- case 3: size += read(_reader, _instruction.operand[currOp++], _err);
- case 2: size += read(_reader, _instruction.operand[currOp++], _err);
- case 1: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 6: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 5: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 4: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 3: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 2: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 1: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
case 0:
if (!valuesBeforeOpcode
&& 0 < info.numValues)
@@ -482,12 +482,12 @@ namespace bgfx
uint32_t currOp = 0;
switch (_instruction.numOperands)
{
- case 6: size += write(_writer, _instruction.operand[currOp++], _err);
- case 5: size += write(_writer, _instruction.operand[currOp++], _err);
- case 4: size += write(_writer, _instruction.operand[currOp++], _err);
- case 3: size += write(_writer, _instruction.operand[currOp++], _err);
- case 2: size += write(_writer, _instruction.operand[currOp++], _err);
- case 1: size += write(_writer, _instruction.operand[currOp++], _err);
+ case 6: size += write(_writer, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 5: size += write(_writer, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 4: size += write(_writer, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 3: size += write(_writer, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 2: size += write(_writer, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 1: size += write(_writer, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
case 0:
break;
}
diff --git a/3rdparty/bgfx/src/shader_dxbc.cpp b/3rdparty/bgfx/src/shader_dxbc.cpp
index b73b215a325..908fd11d65e 100644
--- a/3rdparty/bgfx/src/shader_dxbc.cpp
+++ b/3rdparty/bgfx/src/shader_dxbc.cpp
@@ -94,7 +94,7 @@ namespace bgfx
{ 2, 0 }, // SQRT
{ 1, 0 }, // SWITCH
{ 3, 0 }, // SINCOS
- { 3, 0 }, // UDIV
+ { 4, 0 }, // UDIV
{ 3, 0 }, // ULT
{ 3, 0 }, // UGE
{ 4, 0 }, // UMUL
@@ -1279,12 +1279,12 @@ namespace bgfx
_instruction.numOperands = info.numOperands;
switch (info.numOperands)
{
- case 6: size += read(_reader, _instruction.operand[currOp++], _err);
- case 5: size += read(_reader, _instruction.operand[currOp++], _err);
- case 4: size += read(_reader, _instruction.operand[currOp++], _err);
- case 3: size += read(_reader, _instruction.operand[currOp++], _err);
- case 2: size += read(_reader, _instruction.operand[currOp++], _err);
- case 1: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 6: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 5: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 4: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 3: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 2: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
+ case 1: size += read(_reader, _instruction.operand[currOp++], _err); BX_FALLTHROUGH;
case 0:
if (0 < info.numValues)
{
diff --git a/3rdparty/bgfx/src/topology.cpp b/3rdparty/bgfx/src/topology.cpp
index 2804bc7ddf4..0be14ded4fd 100644
--- a/3rdparty/bgfx/src/topology.cpp
+++ b/3rdparty/bgfx/src/topology.cpp
@@ -5,7 +5,7 @@
#include <bx/allocator.h>
#include <bx/debug.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include <bx/sort.h>
#include <bx/uint32_t.h>
@@ -223,16 +223,6 @@ namespace bgfx
return 0;
}
- inline uint32_t floatFlip(uint32_t _value)
- {
- using namespace bx;
- const uint32_t tmp0 = uint32_sra(_value, 31);
- const uint32_t tmp1 = uint32_neg(tmp0);
- const uint32_t mask = uint32_or(tmp1, 0x80000000);
- const uint32_t result = uint32_xor(_value, mask);
- return result;
- }
-
inline float favg3(float _a, float _b, float _c)
{
return (_a + _b + _c) * 1.0f/3.0f;
@@ -281,10 +271,8 @@ namespace bgfx
float distance1 = dfn(_dirOrPos, _vertices, _stride, idx1);
float distance2 = dfn(_dirOrPos, _vertices, _stride, idx2);
- union { float fl; uint32_t ui; } un;
- un.fl = kfn(distance0, distance1, distance2);
-
- _keys[ii] = floatFlip(un.ui) ^ xorBits;
+ uint32_t ui = bx::floatToBits(kfn(distance0, distance1, distance2) );
+ _keys[ii] = bx::floatFlip(ui) ^ xorBits;
_values[ii] = ii;
}
}
diff --git a/3rdparty/bgfx/src/vertexdecl.cpp b/3rdparty/bgfx/src/vertexdecl.cpp
index a2d88a4ff84..ba00480dcd3 100644
--- a/3rdparty/bgfx/src/vertexdecl.cpp
+++ b/3rdparty/bgfx/src/vertexdecl.cpp
@@ -64,6 +64,7 @@ namespace bgfx
}
VertexDecl::VertexDecl()
+ : m_stride(0)
{
// BK - struct need to have ctor to qualify as non-POD data.
// Need this to catch programming errors when serializing struct.
@@ -127,6 +128,8 @@ namespace bgfx
"Attrib::Bitangent",
"Attrib::Color0",
"Attrib::Color1",
+ "Attrib::Color2",
+ "Attrib::Color3",
"Attrib::Indices",
"Attrib::Weights",
"Attrib::TexCoord0",
@@ -151,7 +154,7 @@ namespace bgfx
{
bx::debugPrintf("vertexdecl %08x (%08x), stride %d\n"
, _decl.m_hash
- , bx::hashMurmur2A(_decl.m_attributes)
+ , bx::hash<bx::HashMurmur2A>(_decl.m_attributes)
, _decl.m_stride
);
@@ -196,6 +199,8 @@ namespace bgfx
{ Attrib::Bitangent, 0x0004 },
{ Attrib::Color0, 0x0005 },
{ Attrib::Color1, 0x0006 },
+ { Attrib::Color2, 0x0018 },
+ { Attrib::Color3, 0x0019 },
{ Attrib::Indices, 0x000e },
{ Attrib::Weight, 0x000f },
{ Attrib::TexCoord0, 0x0010 },
@@ -389,9 +394,9 @@ namespace bgfx
{
switch (num)
{
- default: *packed++ = uint8_t(*_input++ * 127.0f + 128.0f);
- case 3: *packed++ = uint8_t(*_input++ * 127.0f + 128.0f);
- case 2: *packed++ = uint8_t(*_input++ * 127.0f + 128.0f);
+ default: *packed++ = uint8_t(*_input++ * 127.0f + 128.0f); BX_FALLTHROUGH;
+ case 3: *packed++ = uint8_t(*_input++ * 127.0f + 128.0f); BX_FALLTHROUGH;
+ case 2: *packed++ = uint8_t(*_input++ * 127.0f + 128.0f); BX_FALLTHROUGH;
case 1: *packed++ = uint8_t(*_input++ * 127.0f + 128.0f);
}
}
@@ -399,9 +404,9 @@ namespace bgfx
{
switch (num)
{
- default: *packed++ = uint8_t(*_input++ * 255.0f);
- case 3: *packed++ = uint8_t(*_input++ * 255.0f);
- case 2: *packed++ = uint8_t(*_input++ * 255.0f);
+ default: *packed++ = uint8_t(*_input++ * 255.0f); BX_FALLTHROUGH;
+ case 3: *packed++ = uint8_t(*_input++ * 255.0f); BX_FALLTHROUGH;
+ case 2: *packed++ = uint8_t(*_input++ * 255.0f); BX_FALLTHROUGH;
case 1: *packed++ = uint8_t(*_input++ * 255.0f);
}
}
@@ -410,9 +415,9 @@ namespace bgfx
{
switch (num)
{
- default: *packed++ = uint8_t(*_input++);
- case 3: *packed++ = uint8_t(*_input++);
- case 2: *packed++ = uint8_t(*_input++);
+ default: *packed++ = uint8_t(*_input++); BX_FALLTHROUGH;
+ case 3: *packed++ = uint8_t(*_input++); BX_FALLTHROUGH;
+ case 2: *packed++ = uint8_t(*_input++); BX_FALLTHROUGH;
case 1: *packed++ = uint8_t(*_input++);
}
}
@@ -428,9 +433,9 @@ namespace bgfx
{
switch (num)
{
- default:
- case 3: packed |= uint32_t(*_input++ * 511.0f + 512.0f);
- case 2: packed <<= 10; packed |= uint32_t(*_input++ * 511.0f + 512.0f);
+ default: BX_FALLTHROUGH;
+ case 3: packed |= uint32_t(*_input++ * 511.0f + 512.0f); BX_FALLTHROUGH;
+ case 2: packed <<= 10; packed |= uint32_t(*_input++ * 511.0f + 512.0f); BX_FALLTHROUGH;
case 1: packed <<= 10; packed |= uint32_t(*_input++ * 511.0f + 512.0f);
}
}
@@ -438,9 +443,9 @@ namespace bgfx
{
switch (num)
{
- default:
- case 3: packed |= uint32_t(*_input++ * 1023.0f);
- case 2: packed <<= 10; packed |= uint32_t(*_input++ * 1023.0f);
+ default: BX_FALLTHROUGH;
+ case 3: packed |= uint32_t(*_input++ * 1023.0f); BX_FALLTHROUGH;
+ case 2: packed <<= 10; packed |= uint32_t(*_input++ * 1023.0f); BX_FALLTHROUGH;
case 1: packed <<= 10; packed |= uint32_t(*_input++ * 1023.0f);
}
}
@@ -449,9 +454,9 @@ namespace bgfx
{
switch (num)
{
- default:
- case 3: packed |= uint32_t(*_input++);
- case 2: packed <<= 10; packed |= uint32_t(*_input++);
+ default: BX_FALLTHROUGH;
+ case 3: packed |= uint32_t(*_input++); BX_FALLTHROUGH;
+ case 2: packed <<= 10; packed |= uint32_t(*_input++); BX_FALLTHROUGH;
case 1: packed <<= 10; packed |= uint32_t(*_input++);
}
}
@@ -468,9 +473,9 @@ namespace bgfx
{
switch (num)
{
- default: *packed++ = int16_t(*_input++ * 32767.0f);
- case 3: *packed++ = int16_t(*_input++ * 32767.0f);
- case 2: *packed++ = int16_t(*_input++ * 32767.0f);
+ default: *packed++ = int16_t(*_input++ * 32767.0f); BX_FALLTHROUGH;
+ case 3: *packed++ = int16_t(*_input++ * 32767.0f); BX_FALLTHROUGH;
+ case 2: *packed++ = int16_t(*_input++ * 32767.0f); BX_FALLTHROUGH;
case 1: *packed++ = int16_t(*_input++ * 32767.0f);
}
}
@@ -478,9 +483,9 @@ namespace bgfx
{
switch (num)
{
- default: *packed++ = int16_t(*_input++ * 65535.0f - 32768.0f);
- case 3: *packed++ = int16_t(*_input++ * 65535.0f - 32768.0f);
- case 2: *packed++ = int16_t(*_input++ * 65535.0f - 32768.0f);
+ default: *packed++ = int16_t(*_input++ * 65535.0f - 32768.0f); BX_FALLTHROUGH;
+ case 3: *packed++ = int16_t(*_input++ * 65535.0f - 32768.0f); BX_FALLTHROUGH;
+ case 2: *packed++ = int16_t(*_input++ * 65535.0f - 32768.0f); BX_FALLTHROUGH;
case 1: *packed++ = int16_t(*_input++ * 65535.0f - 32768.0f);
}
}
@@ -489,9 +494,9 @@ namespace bgfx
{
switch (num)
{
- default: *packed++ = int16_t(*_input++);
- case 3: *packed++ = int16_t(*_input++);
- case 2: *packed++ = int16_t(*_input++);
+ default: *packed++ = int16_t(*_input++); BX_FALLTHROUGH;
+ case 3: *packed++ = int16_t(*_input++); BX_FALLTHROUGH;
+ case 2: *packed++ = int16_t(*_input++); BX_FALLTHROUGH;
case 1: *packed++ = int16_t(*_input++);
}
}
@@ -503,9 +508,9 @@ namespace bgfx
uint16_t* packed = (uint16_t*)data;
switch (num)
{
- default: *packed++ = bx::halfFromFloat(*_input++);
- case 3: *packed++ = bx::halfFromFloat(*_input++);
- case 2: *packed++ = bx::halfFromFloat(*_input++);
+ default: *packed++ = bx::halfFromFloat(*_input++); BX_FALLTHROUGH;
+ case 3: *packed++ = bx::halfFromFloat(*_input++); BX_FALLTHROUGH;
+ case 2: *packed++ = bx::halfFromFloat(*_input++); BX_FALLTHROUGH;
case 1: *packed++ = bx::halfFromFloat(*_input++);
}
}
@@ -544,9 +549,9 @@ namespace bgfx
{
switch (num)
{
- default: *_output++ = (float(*packed++) - 128.0f)*1.0f/127.0f;
- case 3: *_output++ = (float(*packed++) - 128.0f)*1.0f/127.0f;
- case 2: *_output++ = (float(*packed++) - 128.0f)*1.0f/127.0f;
+ default: *_output++ = (float(*packed++) - 128.0f)*1.0f/127.0f; BX_FALLTHROUGH;
+ case 3: *_output++ = (float(*packed++) - 128.0f)*1.0f/127.0f; BX_FALLTHROUGH;
+ case 2: *_output++ = (float(*packed++) - 128.0f)*1.0f/127.0f; BX_FALLTHROUGH;
case 1: *_output++ = (float(*packed++) - 128.0f)*1.0f/127.0f;
}
}
@@ -554,9 +559,9 @@ namespace bgfx
{
switch (num)
{
- default: *_output++ = float(*packed++)*1.0f/255.0f;
- case 3: *_output++ = float(*packed++)*1.0f/255.0f;
- case 2: *_output++ = float(*packed++)*1.0f/255.0f;
+ default: *_output++ = float(*packed++)*1.0f/255.0f; BX_FALLTHROUGH;
+ case 3: *_output++ = float(*packed++)*1.0f/255.0f; BX_FALLTHROUGH;
+ case 2: *_output++ = float(*packed++)*1.0f/255.0f; BX_FALLTHROUGH;
case 1: *_output++ = float(*packed++)*1.0f/255.0f;
}
}
@@ -570,9 +575,9 @@ namespace bgfx
{
switch (num)
{
- default:
- case 3: *_output++ = (float(packed & 0x3ff) - 512.0f)*1.0f/511.0f; packed >>= 10;
- case 2: *_output++ = (float(packed & 0x3ff) - 512.0f)*1.0f/511.0f; packed >>= 10;
+ default: BX_FALLTHROUGH;
+ case 3: *_output++ = (float(packed & 0x3ff) - 512.0f)*1.0f/511.0f; packed >>= 10; BX_FALLTHROUGH;
+ case 2: *_output++ = (float(packed & 0x3ff) - 512.0f)*1.0f/511.0f; packed >>= 10; BX_FALLTHROUGH;
case 1: *_output++ = (float(packed & 0x3ff) - 512.0f)*1.0f/511.0f;
}
}
@@ -580,9 +585,9 @@ namespace bgfx
{
switch (num)
{
- default:
- case 3: *_output++ = float(packed & 0x3ff)*1.0f/1023.0f; packed >>= 10;
- case 2: *_output++ = float(packed & 0x3ff)*1.0f/1023.0f; packed >>= 10;
+ default: BX_FALLTHROUGH;
+ case 3: *_output++ = float(packed & 0x3ff)*1.0f/1023.0f; packed >>= 10; BX_FALLTHROUGH;
+ case 2: *_output++ = float(packed & 0x3ff)*1.0f/1023.0f; packed >>= 10; BX_FALLTHROUGH;
case 1: *_output++ = float(packed & 0x3ff)*1.0f/1023.0f;
}
}
@@ -596,9 +601,9 @@ namespace bgfx
{
switch (num)
{
- default: *_output++ = float(*packed++)*1.0f/32767.0f;
- case 3: *_output++ = float(*packed++)*1.0f/32767.0f;
- case 2: *_output++ = float(*packed++)*1.0f/32767.0f;
+ default: *_output++ = float(*packed++)*1.0f/32767.0f; BX_FALLTHROUGH;
+ case 3: *_output++ = float(*packed++)*1.0f/32767.0f; BX_FALLTHROUGH;
+ case 2: *_output++ = float(*packed++)*1.0f/32767.0f; BX_FALLTHROUGH;
case 1: *_output++ = float(*packed++)*1.0f/32767.0f;
}
}
@@ -606,9 +611,9 @@ namespace bgfx
{
switch (num)
{
- default: *_output++ = (float(*packed++) + 32768.0f)*1.0f/65535.0f;
- case 3: *_output++ = (float(*packed++) + 32768.0f)*1.0f/65535.0f;
- case 2: *_output++ = (float(*packed++) + 32768.0f)*1.0f/65535.0f;
+ default: *_output++ = (float(*packed++) + 32768.0f)*1.0f/65535.0f; BX_FALLTHROUGH;
+ case 3: *_output++ = (float(*packed++) + 32768.0f)*1.0f/65535.0f; BX_FALLTHROUGH;
+ case 2: *_output++ = (float(*packed++) + 32768.0f)*1.0f/65535.0f; BX_FALLTHROUGH;
case 1: *_output++ = (float(*packed++) + 32768.0f)*1.0f/65535.0f;
}
}
@@ -620,9 +625,9 @@ namespace bgfx
uint16_t* packed = (uint16_t*)data;
switch (num)
{
- default: *_output++ = bx::halfToFloat(*packed++);
- case 3: *_output++ = bx::halfToFloat(*packed++);
- case 2: *_output++ = bx::halfToFloat(*packed++);
+ default: *_output++ = bx::halfToFloat(*packed++); BX_FALLTHROUGH;
+ case 3: *_output++ = bx::halfToFloat(*packed++); BX_FALLTHROUGH;
+ case 2: *_output++ = bx::halfToFloat(*packed++); BX_FALLTHROUGH;
case 1: *_output++ = bx::halfToFloat(*packed++);
}
}
@@ -636,9 +641,9 @@ namespace bgfx
switch (num)
{
- case 1: *_output++ = 0.0f;
- case 2: *_output++ = 0.0f;
- case 3: *_output++ = 0.0f;
+ case 1: *_output++ = 0.0f; BX_FALLTHROUGH;
+ case 2: *_output++ = 0.0f; BX_FALLTHROUGH;
+ case 3: *_output++ = 0.0f; BX_FALLTHROUGH;
default: break;
}
}
@@ -807,7 +812,7 @@ namespace bgfx
{
float pos[4];
vertexUnpack(pos, Attrib::Position, _decl, _data, ii);
- uint32_t hashValue = bx::hashMurmur2A(pos, 3*sizeof(float) ) & hashMask;
+ uint32_t hashValue = bx::hash<bx::HashMurmur2A>(pos, 3*sizeof(float) ) & hashMask;
uint16_t offset = hashTable[hashValue];
for (; UINT16_MAX != offset; offset = next[offset])
diff --git a/3rdparty/bgfx/src/vs_clear.bin.h b/3rdparty/bgfx/src/vs_clear.bin.h
index 46160b6bb76..628f94fcbc2 100644
--- a/3rdparty/bgfx/src/vs_clear.bin.h
+++ b/3rdparty/bgfx/src/vs_clear.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_clear_glsl[164] =
{
- 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x61, 0x74, // VSH...........at
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x61, 0x74, // VSH...........at
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, // tribute highp ve
0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x76, // c3 a_position;.v
0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, // oid main ().{.
@@ -12,52 +12,185 @@ static const uint8_t vs_clear_glsl[164] =
0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, // ion = tmpvar_1;.
0x7d, 0x0a, 0x0a, 0x00, // }...
};
-static const uint8_t vs_clear_dx9[185] =
+static const uint8_t vs_clear_spv[2083] =
{
- 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x03, 0xfe, 0xff, // VSH.............
- 0xfe, 0xff, 0x17, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#...
- 0x00, 0x03, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
- 0x1c, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....vs_3_0.Micro
- 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
- 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, // ader Compiler 10
- 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, // .0.10011.16384..
- 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, // Q..........?....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, // ................
- 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
- 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x24, 0x90, 0x00, 0x00, 0x40, 0xa0, // ..........$...@.
- 0x00, 0x00, 0x15, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x00, 0x03, 0x02, // VSH.............
+ 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, // #.........za....
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, // ..GLSL.std.450..
+ 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, // ..........main..
+ 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, // ................
+ 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf9, 0x03, // ..main..........
+ 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xf9, 0x03, // ..Output........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // ......gl_Positio
+ 0x6e, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1f, 0x17, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, // n.........@main(
+ 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x1b, 0x00, 0x00, 0x61, 0x5f, // vf3;..........a_
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x12, // position........
+ 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, 0x05, 0x00, // .._varying_.....
+ 0x05, 0x00, 0xd5, 0x5d, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ...]..a_position
+ 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // ..........a_posi
+ 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, // tion..........@e
+ 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, // ntryPointOutput_
+ 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, // gl_Position.....
+ 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, // ......param.....
+ 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, // ......$Global...
+ 0x06, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x01, 0x00, // Rect............
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, // ..u_viewTexel...
+ 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // ..........u_view
+ 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, // ..............u_
+ 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc5, 0x0b, // invView.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ......u_proj....
+ 0x06, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, // ..........u_invP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x06, 0x00, // roj.............
+ 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, // ..u_viewProj....
+ 0x07, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, // ..........u_invV
+ 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xc5, 0x0b, // iewProj.........
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, // ......u_model...
+ 0x06, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x0a, 0x00, // lView...........
+ 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // ..u_modelViewPro
+ 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, // j.............u_
+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x04, 0x00, 0xcf, 0x03, // alphaRef4.......
+ 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcd, 0x0f, // ..Output........
+ 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, // ..@entryPointOut
+ 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x1e, 0x00, // put...G.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x0b, 0x00, // ......G.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x7c, 0x05, 0x00, 0x00, 0x06, 0x00, // ......G...|.....
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x00, 0x00, // ..@...H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, // ..#.......H.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ......#.......H.
+ 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x03, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, // ..#...`...H.....
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x05, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, // ..#.......H.....
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, // ..........#... .
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x07, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, // ..#...`...H.....
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x09, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, // ..#.......H.....
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x04, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, // ..............H.
+ 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, // ..........#.....
+ 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, // ..H.............
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x0b, 0x00, // ......H.........
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xc5, 0x0b, // ..#... ...G.....
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x1e, 0x00, // ......G.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, // ..............!.
+ 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, // .. .............
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, // ...... .........
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, // ................
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xc8, 0x08, 0x00, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x95, 0x02, // ..!.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf9, 0x03, // .. ...v.........
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, // .......... .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, // ..+.............
+ 0x80, 0x3f, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, // .? .............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, // ..;.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, // .. .............
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, // ..;.............
+ 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, // ......e.........
+ 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, // ..+.......j... .
+ 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x7c, 0x05, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, // ......|...e...j.
+ 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, // ................
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e...e...e...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x7c, 0x05, 0x00, 0x00, 0x65, 0x00, // ..e...e...|...e.
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x02, 0x00, 0xcf, 0x03, // ..e.............
+ 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x4c, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xcf, 0x03, // .. ...L.........
+ 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4c, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x03, 0x00, // ..;...L.........
+ 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, // ..6.............
+ 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x79, 0x61, 0x00, 0x00, 0x3b, 0x00, // ..........ya..;.
+ 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..............=.
+ 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xd5, 0x5d, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3e, 0x00, // .......]......>.
+ 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0xd5, 0x5d, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0xf9, 0x03, // .......]..9.....
+ 0x00, 0x00, 0xf5, 0x53, 0x00, 0x00, 0x1f, 0x17, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x51, 0x00, // ...S..........Q.
+ 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf8, 0x21, 0x00, 0x00, 0xf5, 0x53, 0x00, 0x00, 0x00, 0x00, // .......!...S....
+ 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xf8, 0x21, 0x00, 0x00, 0xfd, 0x00, // ..>........!....
+ 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x1f, 0x17, // ..8...6.........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x08, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, // ..........7.....
+ 0x00, 0x00, 0xa6, 0x1b, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd7, 0x58, 0x00, 0x00, 0x3b, 0x00, // ...........X..;.
+ 0x04, 0x00, 0x76, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, // ..v...........=.
+ 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x23, 0x56, 0x00, 0x00, 0xa6, 0x1b, 0x00, 0x00, 0x51, 0x00, // ......#V......Q.
+ 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x45, 0x3c, 0x00, 0x00, 0x23, 0x56, 0x00, 0x00, 0x00, 0x00, // ......E<..#V....
+ 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x25, 0x5f, 0x00, 0x00, 0x23, 0x56, // ..Q.......%_..#V
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x52, // ......Q........R
+ 0x00, 0x00, 0x23, 0x56, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, // ..#V......P.....
+ 0x00, 0x00, 0x78, 0x31, 0x00, 0x00, 0x45, 0x3c, 0x00, 0x00, 0x25, 0x5f, 0x00, 0x00, 0x0c, 0x52, // ..x1..E<..%_...R
+ 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x34, 0x24, // ......A.......4$
+ 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x34, 0x24, // ..........>...4$
+ 0x00, 0x00, 0x78, 0x31, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xf9, 0x03, 0x00, 0x00, 0xba, 0x3a, // ..x1..=........:
+ 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xba, 0x3a, 0x00, 0x00, 0x38, 0x00, // ...........:..8.
+ 0x01, 0x00, 0x00, // ...
};
-static const uint8_t vs_clear_dx11[386] =
+static const uint8_t vs_clear_dx9[175] =
{
- 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x01, 0x44, 0x58, 0x42, 0x43, // VSH.......p.DXBC
- 0x35, 0x37, 0xf0, 0x90, 0x23, 0xc6, 0x3b, 0x7a, 0xd4, 0x66, 0x38, 0xf5, 0x51, 0x69, 0x19, 0xa8, // 57..#.;z.f8.Qi..
- 0x01, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ....p.......0...
- 0xb0, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, // ........<...Aon9
- 0x78, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff, 0x50, 0x00, 0x00, 0x00, // x...x.......P...
- 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, // (.....$...$...$.
- 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff, // ..$...$.........
- 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, // Q..........?....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
- 0x00, 0x00, 0x0f, 0x90, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0xe4, 0x90, // ................
- 0x00, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0xaa, 0x90, // ................
- 0x01, 0x00, 0x44, 0xa0, 0x01, 0x00, 0x14, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, // ..D.........SHDR
- 0x50, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // P...@......._...
- 0x72, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, // r.......g.... ..
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, // ........6...r ..
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, // ....F.......6...
- 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, // . .......@.....?
- 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // >...ISGN,.......
- 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .... ...........
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, // ............POSI
- 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, // TION....OSGN,...
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
- 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x00, 0x01, 0x01, 0x00, // SV_POSITION.....
- 0x00, 0x00, // ..
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x03, // VSH.............
+ 0xfe, 0xff, 0xfe, 0xff, 0x14, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, // ......CTAB....#.
+ 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......vs_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, // 10.1..Q.........
+ 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, // .?..............
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
+ 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, // ................
+ 0x24, 0x90, 0x00, 0x00, 0x40, 0xa0, 0x00, 0x00, 0x15, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // $...@..........
+};
+static const uint8_t vs_clear_dx11[388] =
+{
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x44, 0x58, // VSH.......p...DX
+ 0x42, 0x43, 0x35, 0x37, 0xf0, 0x90, 0x23, 0xc6, 0x3b, 0x7a, 0xd4, 0x66, 0x38, 0xf5, 0x51, 0x69, // BC57..#.;z.f8.Qi
+ 0x19, 0xa8, 0x01, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, // ......p.......0.
+ 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x41, 0x6f, // ..........<...Ao
+ 0x6e, 0x39, 0x78, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff, 0x50, 0x00, // n9x...x.......P.
+ 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, // ..(.....$...$...
+ 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // $...$...$.......
+ 0xfe, 0xff, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, // ..Q..........?..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, // ................
+ 0xe4, 0x90, 0x00, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, // ................
+ 0xaa, 0x90, 0x01, 0x00, 0x44, 0xa0, 0x01, 0x00, 0x14, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, // ....D.........SH
+ 0x44, 0x52, 0x50, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x5f, 0x00, // DRP...@......._.
+ 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, // ..r.......g....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, // ..........6...r
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, // ......F.......6.
+ 0x00, 0x05, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, // ... .......@....
+ 0x80, 0x3f, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, // .?>...ISGN,.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...... .........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x50, 0x4f, // ..............PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, // SITION....OSGN,.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x00, 0x01, // ..SV_POSITION...
+ 0x01, 0x00, 0x00, 0x00, // ....
};
static const uint8_t vs_clear_mtl[504] =
{
- 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x01, 0x00, 0x00, 0x75, 0x73, // VSH...........us
+ 0x56, 0x53, 0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x01, 0x00, 0x00, 0x75, 0x73, // VSH...........us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
diff --git a/3rdparty/bgfx/src/vs_debugfont.bin.h b/3rdparty/bgfx/src/vs_debugfont.bin.h
index 6d54586dab7..5a6517c5adf 100644
--- a/3rdparty/bgfx/src/vs_debugfont.bin.h
+++ b/3rdparty/bgfx/src/vs_debugfont.bin.h
@@ -1,6 +1,6 @@
static const uint8_t vs_debugfont_glsl[503] =
{
- 0x56, 0x53, 0x48, 0x04, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..."f...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..."f...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0xd2, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ....attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
@@ -33,153 +33,389 @@ static const uint8_t vs_debugfont_glsl[503] =
0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // color1 = a_color
0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // 1;.}...
};
-static const uint8_t vs_debugfont_dx9[395] =
+static const uint8_t vs_debugfont_spv[3689] =
{
- 0x56, 0x53, 0x48, 0x04, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..."f...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..."f...u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0x44, 0x0e, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, // D.....#.........
+ 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // Ta..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x8a, 0x14, 0x00, 0x00, // main............
+ 0xa6, 0x14, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, // ................
+ 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
+ 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
+ 0xc3, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // ....Output......
+ 0xc3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // ........gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc3, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.............
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0xc3, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, // ........v_color1
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xc3, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x08, 0x00, // v_texcoord0.....
+ 0x1f, 0x11, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, // ....@main(vf4;vf
+ 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // 4;vf3;vf2;......
+ 0x8f, 0x22, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ."..a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xf3, 0x54, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, // .....T..a_color1
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x4e, 0x4a, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ........NJ..a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xd8, 0x4e, 0x00, 0x00, // sition.......N..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
+ 0x05, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ........$Global.
+ 0x06, 0x00, 0x06, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x03, 0x00, 0x00, // ewRect..........
+ 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
+ 0x06, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew..............
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
+ 0xa4, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ........u_proj..
+ 0x06, 0x00, 0x06, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x03, 0x00, 0x00, // vProj...........
+ 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
+ 0x06, 0x00, 0x07, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
+ 0xa4, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ........u_model.
+ 0x06, 0x00, 0x06, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0xa4, 0x03, 0x00, 0x00, // delView.........
+ 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.............
+ 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
+ 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, // B............A..
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
+ 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xc6, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, // .....?..a_color1
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x8a, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, // ............a_co
+ 0x6c, 0x6f, 0x72, 0x31, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xed, 0x2c, 0x00, 0x00, // lor1.........,..
+ 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_position......
+ 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, // ....a_position..
+ 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // ....@,..a_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, // rd0.........a_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, // xcoord0.........
+ 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, // flattenTemp.....
+ 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .U..param.......
+ 0x6f, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // o8..param.......
+ 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // .8..param.......
+ 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, // ....param.......
+ 0xd8, 0x0c, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // ....@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // utput_gl_Positio
+ 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x64, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, // n.......d...Outp
+ 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ut......d.......
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0x64, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, // d.......v_color1
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ........d.......
+ 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, // v_texcoord0.....
+ 0xcd, 0x0f, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // ....@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd9, 0x05, 0x00, 0x00, // utput...G.......
+ 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, // ....@...H.......
+ 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xa4, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
+ 0x48, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xa4, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xa4, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0xa4, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0xa4, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x03, 0x00, 0x00, // ........H.......
+ 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
+ 0xa4, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ........G...B...
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, // ".......G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8a, 0x14, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd8, 0x0c, 0x00, 0x00, // ........G.......
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xcd, 0x0f, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
+ 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, 0xc3, 0x04, 0x00, 0x00, // ................
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x07, 0x00, 0x98, 0x01, 0x00, 0x00, 0xc3, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, // !...............
+ 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, // ............ ...
+ 0x40, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xc3, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, // @...............
+ 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // .... .......+...
+ 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, // ............+...
+ 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, // ...........?+...
+ 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, // ............,...
+ 0x1d, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ................
+ 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
+ 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........,.......
+ 0x74, 0x01, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // t...............
+ 0x8a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, // ....+...........
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, // ....,...........
+ 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
+ 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
+ 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // .......+.......
+ 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xd9, 0x05, 0x00, 0x00, // j... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0xa4, 0x03, 0x00, 0x00, // e...j...........
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ........e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0xd9, 0x05, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....e...e.......
+ 0x20, 0x00, 0x04, 0x00, 0x21, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x00, // ...!...........
+ 0x3b, 0x00, 0x04, 0x00, 0x21, 0x06, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ;...!...B.......
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // +.......).......
+ 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ...........e...
+ 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x8a, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x20, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x91, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
+ 0x1e, 0x00, 0x05, 0x00, 0x64, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....d...........
+ 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x64, 0x04, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xe1, 0x06, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, // d...;...........
+ 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // .... ...........
+ 0x13, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ....6...........
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, // ............Sa..
+ 0x3b, 0x00, 0x04, 0x00, 0x40, 0x07, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...@...........
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........U......
+ 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;.......o8......
+ 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;........8......
+ 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, // =........A......
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc6, 0x3f, 0x00, 0x00, 0x8a, 0x14, 0x00, 0x00, // =........?......
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xed, 0x2c, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // =........,......
+ 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, // =.......@,......
+ 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // >....U...A..>...
+ 0x6f, 0x38, 0x00, 0x00, 0xc6, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, // o8...?..>....8..
+ 0xed, 0x2c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, // .,..>.......@,..
+ 0x39, 0x00, 0x08, 0x00, 0xc3, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x1f, 0x11, 0x00, 0x00, // 9.......I&......
+ 0x85, 0x55, 0x00, 0x00, 0x6f, 0x38, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, // .U..o8...8......
+ 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >.......I&..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....T4..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, // =...........T4..
+ 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x0c, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x9a, 0x02, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....'A..........
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, 0x27, 0x41, 0x00, 0x00, // =...........'A..
+ 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, // A........N......
+ 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x4e, 0x00, 0x00, 0xdf, 0x1c, 0x00, 0x00, // ....>....N......
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc1, 0x4d, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, // A........M......
+ 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, // ....=...........
+ 0xc1, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x0e, 0x4e, 0x00, 0x00, // .M..A........N..
+ 0xcd, 0x0f, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0e, 0x4e, 0x00, 0x00, // ........>....N..
+ 0xe0, 0x1c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x90, 0x02, 0x00, 0x00, 0xc2, 0x4d, 0x00, 0x00, // ....A........M..
+ 0x08, 0x10, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ........=.......
+ 0xe1, 0x1c, 0x00, 0x00, 0xc2, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x92, 0x02, 0x00, 0x00, // .....M..A.......
+ 0x01, 0x5c, 0x00, 0x00, 0xcd, 0x0f, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ............>...
+ 0x01, 0x5c, 0x00, 0x00, 0xe1, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // ............8...
+ 0x36, 0x00, 0x05, 0x00, 0xc3, 0x04, 0x00, 0x00, 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
+ 0x98, 0x01, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x8f, 0x22, 0x00, 0x00, // ....7........"..
+ 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xf3, 0x54, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7........T..7...
+ 0x95, 0x02, 0x00, 0x00, 0x4e, 0x4a, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, // ....NJ..7.......
+ 0xd8, 0x4e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x7e, 0x58, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .N......~X..;...
+ 0x40, 0x07, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // @...........A...
+ 0x9a, 0x02, 0x00, 0x00, 0x83, 0x2e, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ................
+ 0x3e, 0x00, 0x03, 0x00, 0x83, 0x2e, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...........A...
+ 0x9a, 0x02, 0x00, 0x00, 0x76, 0x39, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // ....v9..........
+ 0x3e, 0x00, 0x03, 0x00, 0x76, 0x39, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // >...v9..t...A...
+ 0x90, 0x02, 0x00, 0x00, 0x2a, 0x39, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, // ....*9..........
+ 0x3e, 0x00, 0x03, 0x00, 0x2a, 0x39, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...*9......=...
+ 0x18, 0x00, 0x00, 0x00, 0xd5, 0x18, 0x00, 0x00, 0x4e, 0x4a, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ........NJ..Q...
+ 0x0d, 0x00, 0x00, 0x00, 0x5a, 0x3b, 0x00, 0x00, 0xd5, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....Z;..........
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2a, 0x48, 0x00, 0x00, 0xd5, 0x18, 0x00, 0x00, // Q.......*H......
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4a, 0x54, 0x00, 0x00, // ....Q.......JT..
+ 0xd5, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, // ........P.......
+ 0xa3, 0x33, 0x00, 0x00, 0x5a, 0x3b, 0x00, 0x00, 0x2a, 0x48, 0x00, 0x00, 0x4a, 0x54, 0x00, 0x00, // .3..Z;..*H..JT..
+ 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x48, 0x2d, 0x00, 0x00, // ....A.......H-..
+ 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // B...)...=...e...
+ 0x12, 0x3e, 0x00, 0x00, 0x48, 0x2d, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, // .>..H-..........
+ 0xbe, 0x3c, 0x00, 0x00, 0xa3, 0x33, 0x00, 0x00, 0x12, 0x3e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // .<...3...>..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x7e, 0x39, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, // ....~9..........
+ 0x3e, 0x00, 0x03, 0x00, 0x7e, 0x39, 0x00, 0x00, 0xbe, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...~9...<..=...
+ 0x13, 0x00, 0x00, 0x00, 0x3c, 0x22, 0x00, 0x00, 0xd8, 0x4e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ....<"...N..A...
+ 0x90, 0x02, 0x00, 0x00, 0x4c, 0x3d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, // ....L=..........
+ 0x3e, 0x00, 0x03, 0x00, 0x4c, 0x3d, 0x00, 0x00, 0x3c, 0x22, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...L=..<"..=...
+ 0x1d, 0x00, 0x00, 0x00, 0x3d, 0x22, 0x00, 0x00, 0x8f, 0x22, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ....="..."..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....M=..........
+ 0x3e, 0x00, 0x03, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x3d, 0x22, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...M=..="..=...
+ 0x1d, 0x00, 0x00, 0x00, 0x3e, 0x22, 0x00, 0x00, 0xf3, 0x54, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, // ....>"...T..A...
+ 0x9a, 0x02, 0x00, 0x00, 0x4e, 0x3d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, // ....N=..........
+ 0x3e, 0x00, 0x03, 0x00, 0x4e, 0x3d, 0x00, 0x00, 0x3e, 0x22, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // >...N=..>"..=...
+ 0xc3, 0x04, 0x00, 0x00, 0x0d, 0x53, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, // .....S..........
+ 0x0d, 0x53, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .S..8....
+};
+static const uint8_t vs_debugfont_dx9[385] =
+{
+ 0x56, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..."f...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x68, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // h.......$.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, // ompiler 10.0.100
- 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // 11.16384........
- 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x01, 0x80, 0x01, 0x00, // ................
- 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
- 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x01, 0x80, 0x02, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x03, 0x00, 0x03, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ........U.......
- 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, // ................
- 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x00, 0x00, // ................
- 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, // ................
- 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, // ................
- 0x00, 0x02, 0x02, 0x00, 0x0f, 0xe0, 0x01, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, // ................
- 0x03, 0xe0, 0x03, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ...........
+ 0x5c, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // ..........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x0a, 0x00, 0x01, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0f, 0x90, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x01, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x03, 0x00, 0x03, 0xe0, // ................
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x55, 0x90, // ..............U.
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x90, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, // ................
+ 0x02, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, // ................
+ 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x0f, 0xe0, 0x01, 0x00, 0xe4, 0x90, // ................
+ 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x03, 0xe0, 0x03, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, // ................
+ 0x00, // .
};
-static const uint8_t vs_debugfont_dx11[974] =
+static const uint8_t vs_debugfont_dx11[976] =
{
- 0x56, 0x53, 0x48, 0x04, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..."f...u_mod
+ 0x56, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..."f...u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0xa0, 0x03, 0x44, 0x58, 0x42, 0x43, 0x92, 0x16, 0xf8, 0xaa, 0xc4, 0x4c, 0xee, 0x93, 0x22, 0xee, // ..DXBC.....L..".
- 0x2e, 0xcd, 0x17, 0x4a, 0xe5, 0x55, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x03, 0x00, 0x00, 0x04, 0x00, // ...J.U..........
- 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x8c, 0x02, 0x00, 0x00, 0x14, 0x03, // ..0...0.........
- 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0xf8, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x02, // ..Aon9..........
- 0xfe, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, 0x00, 0x00, 0x00, // ......4.....$...
- 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x30, 0x00, 0x00, 0x00, // 0...0...$...0...
- 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // ................
- 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
- 0x02, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x03, 0x80, 0x03, 0x00, // ................
- 0x0f, 0x90, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0x55, 0x90, 0x02, 0x00, // ............U...
- 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x02, 0x00, // ................
- 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x03, 0x00, // ................
- 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
- 0x03, 0xc0, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, // ................
- 0x00, 0x02, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x01, 0x00, // ................
- 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0xe0, 0x03, 0x00, 0xe4, 0x90, 0xff, 0xff, // ................
- 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, 0x54, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x55, 0x00, // ..SHDRT...@...U.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, // .........._...r.
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x03, 0x00, // ......_...2.....
- 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..g.... ........
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, // ..e.... ......e.
- 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, // ... ......e...2
- 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, // ......h.......8.
- 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x02, 0x00, // ..........V.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F. .........2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, // ..F. ...........
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
- 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..F. .........6.
- 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
- 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x1e, // ..6.... ......F.
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, 0x03, 0x00, // ......6...2 ....
- 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x49, 0x53, // ..F.......>...IS
- 0x47, 0x4e, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x68, 0x00, // GN............h.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // ......h.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x6e, 0x00, // ..............n.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......w.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x43, 0x4f, // ..............CO
- 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, // LOR.POSITION.TEX
- 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x84, 0x00, 0x00, 0x00, 0x04, 0x00, // COORD.OSGN......
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ......h.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x74, 0x00, // ..............t.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // ......t.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x7a, 0x00, // ..............z.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
- 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
- 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
- 0x00, 0xab, 0x00, 0x04, 0x05, 0x00, 0x06, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ............@.
+ 0xa0, 0x03, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x92, 0x16, 0xf8, 0xaa, 0xc4, 0x4c, 0xee, 0x93, // ....DXBC.....L..
+ 0x22, 0xee, 0x2e, 0xcd, 0x17, 0x4a, 0xe5, 0x55, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x03, 0x00, 0x00, // "....J.U........
+ 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x8c, 0x02, 0x00, 0x00, // ....0...0.......
+ 0x14, 0x03, 0x00, 0x00, 0x41, 0x6f, 0x6e, 0x39, 0xf8, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, // ....Aon9........
+ 0x00, 0x02, 0xfe, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, 0x00, // ........4.....$.
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x30, 0x00, // ..0...0...$...0.
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x02, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x02, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x03, 0x80, // ................
+ 0x03, 0x00, 0x0f, 0x90, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0x55, 0x90, // ..............U.
+ 0x02, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, // ................
+ 0x02, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ................
+ 0x03, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, // ................
+ 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xe4, 0x80, // ................
+ 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, // ................
+ 0x01, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0xe0, 0x03, 0x00, 0xe4, 0x90, // ................
+ 0xff, 0xff, 0x00, 0x00, 0x53, 0x48, 0x44, 0x52, 0x54, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // ....SHDRT...@...
+ 0x55, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // U...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _..........._...
+ 0x72, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, // r......._...2...
+ 0x03, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....g.... ......
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ....e.... ......
+ 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, // e.... ......e...
+ 0x32, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, // 2 ......h.......
+ 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, // 8...........V...
+ 0x02, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....F. .........
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // F.......2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....F. .........
+ 0xa6, 0x1a, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ..... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....F. .........
+ 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // 6.... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....6.... ......
+ 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, // F.......6...2 ..
+ 0x03, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, // ....F.......>...
+ 0x49, 0x53, 0x47, 0x4e, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGN............
+ 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // h...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........h.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, // ................
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // n...............
+ 0x02, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........w.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // ................
+ 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, // COLOR.POSITION.T
+ 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x84, 0x00, 0x00, 0x00, // EXCOORD.OSGN....
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........h.......
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // t...............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ........t.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // z...............
+ 0x03, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // ION.COLOR.TEXCOO
+ 0x52, 0x44, 0x00, 0xab, 0x00, 0x04, 0x05, 0x00, 0x06, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // RD............@.
};
-static const uint8_t vs_debugfont_mtl[847] =
+static const uint8_t vs_debugfont_mtl[869] =
{
- 0x56, 0x53, 0x48, 0x04, 0xb8, 0xbe, 0x22, 0x66, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x75, 0x73, // VSH..."f..@...us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 a_colo
- 0x72, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, // r0 [[attribute(0
- 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x61, 0x5f, // )]];. float4 a_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, // color1 [[attribu
- 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // te(1)]];. float
- 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, // 3 a_position [[a
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, // ttribute(2)]];.
- 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // float2 a_texcoo
- 0x72, 0x64, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, // rd0 [[attribute(
- 0x33, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, // 3)]];.};.struct
- 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
- 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // put {. float4 g
- 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, 0x6f, 0x73, // l_Position [[pos
- 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // ition]];. float
- 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // 4 v_color0;. fl
- 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x3b, 0x0a, 0x20, // oat4 v_color1;.
- 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // float2 v_texcoo
- 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, // rd0;.};.struct x
- 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, // latMtlShaderUnif
- 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, // orm {. float4x4
- 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // u_modelViewProj
- 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, // ;.};.vertex xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, // MtlShaderOutput
- 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, // xlatMtlMain (xla
- 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, // tMtlShaderInput
- 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, // _mtl_i [[stage_i
- 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, // n]], constant xl
- 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, // atMtlShaderUnifo
- 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, // rm& _mtl_u [[buf
- 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, // fer(0)]]).{. xl
- 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, // atMtlShaderOutpu
- 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // t _mtl_o;. floa
- 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, // t4 tmpvar_1 = 0;
- 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, // . tmpvar_1.w =
- 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, // 1.0;. tmpvar_1.
- 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, // xyz = _mtl_i.a_p
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // osition;. _mtl_
- 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, // o.gl_Position =
- 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // (_mtl_u.u_modelV
- 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // iewProj * tmpvar
- 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, // _1);. _mtl_o.v_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // texcoord0 = _mtl
- 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, // _i.a_texcoord0;.
- 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // _mtl_o.v_color
- 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, // 0 = _mtl_i.a_col
- 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, // or0;. _mtl_o.v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, // color1 = _mtl_i.
- 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, // a_color1;. retu
- 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // rn _mtl_o;.}...
+ 0x56, 0x53, 0x48, 0x05, 0xb8, 0xbe, 0x22, 0x66, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH..."f...u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0x40, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // @...using namesp
+ 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, // t xlatMtlShaderI
+ 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // nput {. float4
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, // a_color0 [[attri
+ 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // bute(0)]];. flo
+ 0x61, 0x74, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x20, 0x5b, 0x5b, 0x61, // at4 a_color1 [[a
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, // ttribute(1)]];.
+ 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // float3 a_positi
+ 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x32, // on [[attribute(2
+ 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x61, 0x5f, // )]];. float2 a_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, // texcoord0 [[attr
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x33, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, // ibute(3)]];.};.s
+ 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // truct xlatMtlSha
+ 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // derOutput {. fl
+ 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // oat4 gl_Position
+ 0x20, 0x5b, 0x5b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, // [[position]];.
+ 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // float4 v_color0
+ 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, // ;. float4 v_col
+ 0x6f, 0x72, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x76, 0x5f, // or1;. float2 v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, // texcoord0;.};.st
+ 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ruct xlatMtlShad
+ 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // erUniform {. fl
+ 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, // oat4x4 u_modelVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, // ewProj;.};.verte
+ 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // x xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, // utput xlatMtlMai
+ 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // n (xlatMtlShader
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, // Input _mtl_i [[s
+ 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, // tage_in]], const
+ 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // ant xlatMtlShade
+ 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // rUniform& _mtl_u
+ 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, // [[buffer(0)]]).
+ 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // {. xlatMtlShade
+ 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, // rOutput _mtl_o;.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // float4 tmpvar_
+ 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 1 = 0;. tmpvar_
+ 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // 1.w = 1.0;. tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // var_1.xyz = _mtl
+ 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, // _i.a_position;.
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // _mtl_o.gl_Posit
+ 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, // ion = (_mtl_u.u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, // modelViewProj *
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // tmpvar_1);. _mt
+ 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, // l_o.v_texcoord0
+ 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // = _mtl_i.a_texco
+ 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, // ord0;. _mtl_o.v
+ 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // _color0 = _mtl_i
+ 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // .a_color0;. _mt
+ 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x20, 0x3d, 0x20, 0x5f, // l_o.v_color1 = _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x31, 0x3b, 0x0a, // mtl_i.a_color1;.
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, // return _mtl_o;
+ 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
};
extern const uint8_t* vs_debugfont_pssl;
extern const uint32_t vs_debugfont_pssl_size;
diff --git a/3rdparty/bgfx/tools/geometryc/geometryc.cpp b/3rdparty/bgfx/tools/geometryc/geometryc.cpp
index c18a3972352..d1d6e014b01 100644
--- a/3rdparty/bgfx/tools/geometryc/geometryc.cpp
+++ b/3rdparty/bgfx/tools/geometryc/geometryc.cpp
@@ -3,24 +3,27 @@
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
+#include <stdio.h>
+
#include <algorithm>
#include <vector>
-#include <string>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include <bx/string.h>
#include <bgfx/bgfx.h>
#include "../../src/vertexdecl.h"
#include <tinystl/allocator.h>
#include <tinystl/unordered_map.h>
#include <tinystl/unordered_set.h>
+#include <tinystl/string.h>
namespace stl = tinystl;
#include <forsyth-too/forsythtriangleorderoptimizer.h>
#include <ib-compress/indexbuffercompression.h>
+#define BGFX_GEOMETRYC_VERSION_MAJOR 1
+#define BGFX_GEOMETRYC_VERSION_MINOR 0
+
#if 0
# define BX_TRACE(_format, ...) \
do { \
@@ -45,23 +48,14 @@ namespace stl = tinystl;
} while(0)
#endif // 0
-#define EXPECT(_condition) \
- do { \
- if (!(_condition) ) \
- { \
- printf("Error parsing at:\n" BX_FILE_LINE_LITERAL "\nExpected: " #_condition "\n"); \
- exit(EXIT_FAILURE); \
- } \
- } while(0)
-
#include <bx/bx.h>
#include <bx/debug.h>
#include <bx/commandline.h>
#include <bx/timer.h>
#include <bx/hash.h>
#include <bx/uint32_t.h>
-#include <bx/fpumath.h>
-#include <bx/crtimpl.h>
+#include <bx/math.h>
+#include <bx/file.h>
#include "bounds.h"
@@ -96,8 +90,8 @@ struct Group
{
uint32_t m_startTriangle;
uint32_t m_numTriangles;
- std::string m_name;
- std::string m_material;
+ stl::string m_name;
+ stl::string m_material;
};
typedef std::vector<Group> GroupArray;
@@ -108,7 +102,7 @@ struct Primitive
uint32_t m_startIndex;
uint32_t m_numVertices;
uint32_t m_numIndices;
- std::string m_name;
+ stl::string m_name;
};
typedef std::vector<Primitive> PrimitiveArray;
@@ -133,7 +127,7 @@ void triangleReorder(uint16_t* _indices, uint32_t _numIndices, uint32_t _numVert
{
uint16_t* newIndexList = new uint16_t[_numIndices];
Forsyth::OptimizeFaces(_indices, _numIndices, _numVertices, newIndexList, _cacheSize);
- memcpy(_indices, newIndexList, _numIndices*2);
+ bx::memCopy(_indices, newIndexList, _numIndices*2);
delete [] newIndexList;
}
@@ -156,9 +150,9 @@ void triangleCompress(bx::WriterI* _writer, uint16_t* _indices, uint32_t _numInd
{
uint32_t remap = vertexRemap[ii];
remap = UINT32_MAX == remap ? ii : remap;
- memcpy(&outVertexData[remap*_stride], &_vertexData[ii*_stride], _stride);
+ bx::memCopy(&outVertexData[remap*_stride], &_vertexData[ii*_stride], _stride);
}
- memcpy(_vertexData, outVertexData, _numVertices*_stride);
+ bx::memCopy(_vertexData, outVertexData, _numVertices*_stride);
free(outVertexData);
free(vertexRemap);
@@ -181,7 +175,7 @@ void calcTangents(void* _vertices, uint16_t _numVertices, bgfx::VertexDecl _decl
};
float* tangents = new float[6*_numVertices];
- memset(tangents, 0, 6*_numVertices*sizeof(float) );
+ bx::memSet(tangents, 0, 6*_numVertices*sizeof(float) );
PosTexcoord v0;
PosTexcoord v1;
@@ -301,7 +295,7 @@ void write(bx::WriterI* _writer
, uint32_t _numIndices
, const uint8_t* _compressedIndices
, uint32_t _compressedSize
- , const std::string& _material
+ , const stl::string& _material
, const PrimitiveArray& _primitives
)
{
@@ -350,6 +344,23 @@ void write(bx::WriterI* _writer
}
}
+inline uint32_t rgbaToAbgr(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a)
+{
+ return (uint32_t(_r)<<0)
+ | (uint32_t(_g)<<8)
+ | (uint32_t(_b)<<16)
+ | (uint32_t(_a)<<24)
+ ;
+}
+
+struct GroupSortByMaterial
+{
+ bool operator()(const Group& _lhs, const Group& _rhs)
+ {
+ return 0 < bx::strCmp(_lhs.m_material.c_str(), _rhs.m_material.c_str() );
+ }
+};
+
void help(const char* _error = NULL)
{
if (NULL != _error)
@@ -358,9 +369,12 @@ void help(const char* _error = NULL)
}
fprintf(stderr
- , "geometryc, bgfx geometry compiler tool\n"
+ , "geometryc, bgfx geometry compiler tool, version %d.%d.%d.\n"
"Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n"
"License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n"
+ , BGFX_GEOMETRYC_VERSION_MAJOR
+ , BGFX_GEOMETRYC_VERSION_MINOR
+ , BGFX_API_VERSION
);
fprintf(stderr
@@ -372,6 +386,8 @@ void help(const char* _error = NULL)
"\n"
"Options:\n"
+ " -h, --help Help.\n"
+ " -v, --version Version information only.\n"
" -f <file path> Input file path.\n"
" -o <file path> Output file path.\n"
" -s, --scale <num> Scale factor.\n"
@@ -395,39 +411,39 @@ void help(const char* _error = NULL)
);
}
-inline uint32_t rgbaToAbgr(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a)
+int main(int _argc, const char* _argv[])
{
- return (uint32_t(_r)<<0)
- | (uint32_t(_g)<<8)
- | (uint32_t(_b)<<16)
- | (uint32_t(_a)<<24)
- ;
-}
+ bx::CommandLine cmdLine(_argc, _argv);
-struct GroupSortByMaterial
-{
- bool operator()(const Group& _lhs, const Group& _rhs)
+ if (cmdLine.hasArg('v', "version") )
{
- return _lhs.m_material < _rhs.m_material;
+ fprintf(stderr
+ , "geometryc, bgfx geometry compiler tool, version %d.%d.%d.\n"
+ , BGFX_GEOMETRYC_VERSION_MAJOR
+ , BGFX_GEOMETRYC_VERSION_MINOR
+ , BGFX_API_VERSION
+ );
+ return bx::kExitSuccess;
}
-};
-int main(int _argc, const char* _argv[])
-{
- bx::CommandLine cmdLine(_argc, _argv);
+ if (cmdLine.hasArg('h', "help") )
+ {
+ help();
+ return bx::kExitFailure;
+ }
const char* filePath = cmdLine.findOption('f');
if (NULL == filePath)
{
help("Input file name must be specified.");
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
const char* outFilePath = cmdLine.findOption('o');
if (NULL == outFilePath)
{
help("Output file name must be specified.");
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
float scale = 1.0f;
@@ -457,7 +473,7 @@ int main(int _argc, const char* _argv[])
if (NULL == file)
{
printf("Unable to open input file '%s'.", filePath);
- exit(EXIT_FAILURE);
+ exit(bx::kExitFailure);
}
int64_t parseElapsed = -bx::getHPCounter();
@@ -494,17 +510,17 @@ int main(int _argc, const char* _argv[])
next = bx::tokenizeCommandLine(next, commandLine, len, argc, argv, BX_COUNTOF(argv), '\n');
if (0 < argc)
{
- if (0 == strcmp(argv[0], "#") )
+ if (0 == bx::strCmp(argv[0], "#") )
{
if (2 < argc
- && 0 == strcmp(argv[2], "polygons") )
+ && 0 == bx::strCmp(argv[2], "polygons") )
{
}
}
- else if (0 == strcmp(argv[0], "f") )
+ else if (0 == bx::strCmp(argv[0], "f") )
{
Triangle triangle;
- memset(&triangle, 0, sizeof(Triangle) );
+ bx::memSet(&triangle, 0, sizeof(Triangle) );
const int numNormals = (int)normals.size();
const int numTexcoords = (int)texcoords.size();
@@ -524,29 +540,32 @@ int main(int _argc, const char* _argv[])
index.m_vbc = 0;
}
- char* vertex = argv[edge+1];
- char* texcoord = strchr(vertex, '/');
+ const char* vertex = argv[edge+1];
+ char* texcoord = const_cast<char*>(bx::strFind(vertex, '/') );
if (NULL != texcoord)
{
*texcoord++ = '\0';
- char* normal = strchr(texcoord, '/');
+ char* normal = const_cast<char*>(bx::strFind(texcoord, '/') );
if (NULL != normal)
{
*normal++ = '\0';
- const int nn = atoi(normal);
+ int32_t nn;
+ bx::fromString(&nn, normal);
index.m_normal = (nn < 0) ? nn+numNormals : nn-1;
}
// https://en.wikipedia.org/wiki/Wavefront_.obj_file#Vertex_Normal_Indices_Without_Texture_Coordinate_Indices
if(*texcoord != '\0')
{
- const int tex = atoi(texcoord);
+ int32_t tex;
+ bx::fromString(&tex, texcoord);
index.m_texcoord = (tex < 0) ? tex+numTexcoords : tex-1;
}
}
- const int pos = atoi(vertex);
+ int32_t pos;
+ bx::fromString(&pos, vertex);
index.m_position = (pos < 0) ? pos+numPositions : pos-1;
uint64_t hash0 = index.m_position;
@@ -599,9 +618,8 @@ int main(int _argc, const char* _argv[])
}
}
}
- else if (0 == strcmp(argv[0], "g") )
+ else if (0 == bx::strCmp(argv[0], "g") )
{
- EXPECT(1 < argc);
group.m_name = argv[1];
}
else if (*argv[0] == 'v')
@@ -614,7 +632,7 @@ int main(int _argc, const char* _argv[])
group.m_numTriangles = 0;
}
- if (0 == strcmp(argv[0], "vn") )
+ if (0 == bx::strCmp(argv[0], "vn") )
{
Vector3 normal;
normal.x = (float)atof(argv[1]);
@@ -623,7 +641,7 @@ int main(int _argc, const char* _argv[])
normals.push_back(normal);
}
- else if (0 == strcmp(argv[0], "vp") )
+ else if (0 == bx::strCmp(argv[0], "vp") )
{
static bool once = true;
if (once)
@@ -632,7 +650,7 @@ int main(int _argc, const char* _argv[])
printf("warning: 'parameter space vertices' are unsupported.\n");
}
}
- else if (0 == strcmp(argv[0], "vt") )
+ else if (0 == bx::strCmp(argv[0], "vt") )
{
Vector3 texcoord;
texcoord.x = (float)atof(argv[1]);
@@ -677,11 +695,11 @@ int main(int _argc, const char* _argv[])
positions.push_back(pos);
}
}
- else if (0 == strcmp(argv[0], "usemtl") )
+ else if (0 == bx::strCmp(argv[0], "usemtl") )
{
- std::string material(argv[1]);
+ stl::string material(argv[1]);
- if (material != group.m_material)
+ if (0 != bx::strCmp(material.c_str(), group.m_material.c_str() ) )
{
group.m_numTriangles = (uint32_t)(triangles.size() ) - group.m_startTriangle;
if (0 < group.m_numTriangles)
@@ -695,13 +713,13 @@ int main(int _argc, const char* _argv[])
group.m_material = material;
}
// unsupported tags
-// else if (0 == strcmp(argv[0], "mtllib") )
+// else if (0 == bx::strCmp(argv[0], "mtllib") )
// {
// }
-// else if (0 == strcmp(argv[0], "o") )
+// else if (0 == bx::strCmp(argv[0], "o") )
// {
// }
-// else if (0 == strcmp(argv[0], "s") )
+// else if (0 == bx::strCmp(argv[0], "s") )
// {
// }
}
@@ -734,25 +752,35 @@ int main(int _argc, const char* _argv[])
hasNormal = -1 != it->second.m_normal;
hasTexcoord = -1 != it->second.m_texcoord;
- if (!hasTexcoord
- && texcoords.size() == positions.size() )
+ if (!hasTexcoord)
{
- hasTexcoord = true;
+ for (Index3Map::iterator jt = indexMap.begin(), jtEnd = indexMap.end(); jt != jtEnd && !hasTexcoord; ++jt)
+ {
+ hasTexcoord |= -1 != jt->second.m_texcoord;
+ }
- for (Index3Map::iterator jt = indexMap.begin(), jtEnd = indexMap.end(); jt != jtEnd; ++jt)
+ if (hasTexcoord)
{
- jt->second.m_texcoord = jt->second.m_position;
+ for (Index3Map::iterator jt = indexMap.begin(), jtEnd = indexMap.end(); jt != jtEnd; ++jt)
+ {
+ jt->second.m_texcoord = -1 == jt->second.m_texcoord ? 0 : jt->second.m_texcoord;
+ }
}
}
- if (!hasNormal
- && normals.size() == positions.size() )
+ if (!hasNormal)
{
- hasNormal = true;
+ for (Index3Map::iterator jt = indexMap.begin(), jtEnd = indexMap.end(); jt != jtEnd && !hasNormal; ++jt)
+ {
+ hasNormal |= -1 != jt->second.m_normal;
+ }
- for (Index3Map::iterator jt = indexMap.begin(), jtEnd = indexMap.end(); jt != jtEnd; ++jt)
+ if (hasNormal)
{
- jt->second.m_normal = jt->second.m_position;
+ for (Index3Map::iterator jt = indexMap.begin(), jtEnd = indexMap.end(); jt != jtEnd; ++jt)
+ {
+ jt->second.m_normal = -1 == jt->second.m_normal ? 0 : jt->second.m_normal;
+ }
}
}
}
@@ -822,15 +850,15 @@ int main(int _argc, const char* _argv[])
uint8_t* vertices = vertexData;
uint16_t* indices = indexData;
- std::string material = groups.begin()->m_material;
+ stl::string material = groups.begin()->m_material;
PrimitiveArray primitives;
- bx::CrtFileWriter writer;
+ bx::FileWriter writer;
if (!bx::open(&writer, outFilePath) )
{
printf("Unable to open output file '%s'.", outFilePath);
- exit(EXIT_FAILURE);
+ exit(bx::kExitFailure);
}
Primitive prim;
@@ -840,7 +868,7 @@ int main(int _argc, const char* _argv[])
uint32_t positionOffset = decl.getOffset(bgfx::Attrib::Position);
uint32_t color0Offset = decl.getOffset(bgfx::Attrib::Color0);
- bx::CrtAllocator crtAllocator;
+ bx::DefaultAllocator crtAllocator;
bx::MemoryBlock memBlock(&crtAllocator);
uint32_t ii = 0;
@@ -848,7 +876,7 @@ int main(int _argc, const char* _argv[])
{
for (uint32_t tri = groupIt->m_startTriangle, end = tri + groupIt->m_numTriangles; tri < end; ++tri)
{
- if (material != groupIt->m_material
+ if (0 != bx::strCmp(material.c_str(), groupIt->m_material.c_str() )
|| 65533 < numVertices)
{
prim.m_numVertices = numVertices - prim.m_startVertex;
@@ -860,7 +888,7 @@ int main(int _argc, const char* _argv[])
if (hasTangent)
{
- calcTangents(vertexData, numVertices, decl, indexData, numIndices);
+ calcTangents(vertexData, uint16_t(numVertices), decl, indexData, numIndices);
}
bx::MemoryWriter memWriter(&memBlock);
@@ -877,7 +905,7 @@ int main(int _argc, const char* _argv[])
, prim1.m_numIndices
, vertexData + prim1.m_startVertex
, numVertices
- , stride
+ , uint16_t(stride)
);
}
}
@@ -922,7 +950,7 @@ int main(int _argc, const char* _argv[])
index.m_vertexIndex = numVertices++;
float* position = (float*)(vertices + positionOffset);
- memcpy(position, &positions[index.m_position], 3*sizeof(float) );
+ bx::memCopy(position, &positions[index.m_position], 3*sizeof(float) );
if (hasColor)
{
@@ -944,7 +972,7 @@ int main(int _argc, const char* _argv[])
if (hasTexcoord)
{
float uv[2];
- memcpy(uv, &texcoords[index.m_texcoord], 2*sizeof(float) );
+ bx::memCopy(uv, &texcoords[index.m_texcoord], 2*sizeof(float) );
if (flipV)
{
@@ -991,7 +1019,7 @@ int main(int _argc, const char* _argv[])
{
if (hasTangent)
{
- calcTangents(vertexData, numVertices, decl, indexData, numIndices);
+ calcTangents(vertexData, uint16_t(numVertices), decl, indexData, numIndices);
}
bx::MemoryWriter memWriter(&memBlock);
@@ -1008,7 +1036,7 @@ int main(int _argc, const char* _argv[])
, prim1.m_numIndices
, vertexData + prim1.m_startVertex
, numVertices
- , stride
+ , uint16_t(stride)
);
}
}
@@ -1047,5 +1075,5 @@ int main(int _argc, const char* _argv[])
, numIndices
);
- return EXIT_SUCCESS;
+ return bx::kExitSuccess;
}
diff --git a/3rdparty/bgfx/tools/shaderc/shaderc.cpp b/3rdparty/bgfx/tools/shaderc/shaderc.cpp
index 57934b5c632..f8d22df4fd1 100644
--- a/3rdparty/bgfx/tools/shaderc/shaderc.cpp
+++ b/3rdparty/bgfx/tools/shaderc/shaderc.cpp
@@ -5,6 +5,7 @@
#include "shaderc.h"
#include <bx/commandline.h>
+#include <bx/filepath.h>
#define MAX_TAGS 256
extern "C"
@@ -12,14 +13,17 @@ extern "C"
#include <fpp.h>
} // extern "C"
+#define BGFX_CHUNK_MAGIC_CSH BX_MAKEFOURCC('C', 'S', 'H', 0x3)
+#define BGFX_CHUNK_MAGIC_FSH BX_MAKEFOURCC('F', 'S', 'H', 0x5)
+#define BGFX_CHUNK_MAGIC_VSH BX_MAKEFOURCC('V', 'S', 'H', 0x5)
+
+#define BGFX_SHADERC_VERSION_MAJOR 1
+#define BGFX_SHADERC_VERSION_MINOR 6
+
namespace bgfx
{
bool g_verbose = false;
- #define BGFX_CHUNK_MAGIC_CSH BX_MAKEFOURCC('C', 'S', 'H', 0x2)
- #define BGFX_CHUNK_MAGIC_FSH BX_MAKEFOURCC('F', 'S', 'H', 0x4)
- #define BGFX_CHUNK_MAGIC_VSH BX_MAKEFOURCC('V', 'S', 'H', 0x4)
-
static const char* s_ARB_shader_texture_lod[] =
{
"texture2DLod",
@@ -78,6 +82,13 @@ namespace bgfx
NULL
};
+ static const char* s_EXT_gpu_shader4[] =
+ {
+ "gl_VertexID",
+ "gl_InstanceID",
+ NULL
+ };
+
static const char* s_ARB_gpu_shader5[] =
{
"bitfieldReverse",
@@ -139,13 +150,84 @@ namespace bgfx
};
BX_STATIC_ASSERT(BX_COUNTOF(s_uniformTypeName) == UniformType::Count*2);
+
+ Options::Options()
+ : shaderType(' ')
+ , disasm(false)
+ , raw(false)
+ , preprocessOnly(false)
+ , depends(false)
+ , debugInformation(false)
+ , avoidFlowControl(false)
+ , noPreshader(false)
+ , partialPrecision(false)
+ , preferFlowControl(false)
+ , backwardsCompatibility(false)
+ , warningsAreErrors(false)
+ , optimize(false)
+ , optimizationLevel(3)
+ {
+ }
+
+ void Options::dump()
+ {
+ BX_TRACE("Options:\n"
+ "\t shaderType: %c\n"
+ "\t platform: %s\n"
+ "\t profile: %s\n"
+ "\t inputFile: %s\n"
+ "\t outputFile: %s\n"
+ "\t disasm: %s\n"
+ "\t raw: %s\n"
+ "\t preprocessOnly: %s\n"
+ "\t depends: %s\n"
+ "\t debugInformation: %s\n"
+ "\t avoidFlowControl: %s\n"
+ "\t noPreshader: %s\n"
+ "\t partialPrecision: %s\n"
+ "\t preferFlowControl: %s\n"
+ "\t backwardsCompatibility: %s\n"
+ "\t warningsAreErrors: %s\n"
+ "\t optimize: %s\n"
+ "\t optimizationLevel: %d\n"
+
+ , shaderType
+ , platform.c_str()
+ , profile.c_str()
+ , inputFilePath.c_str()
+ , outputFilePath.c_str()
+ , disasm ? "true" : "false"
+ , raw ? "true" : "false"
+ , preprocessOnly ? "true" : "false"
+ , depends ? "true" : "false"
+ , debugInformation ? "true" : "false"
+ , avoidFlowControl ? "true" : "false"
+ , noPreshader ? "true" : "false"
+ , partialPrecision ? "true" : "false"
+ , preferFlowControl ? "true" : "false"
+ , backwardsCompatibility ? "true" : "false"
+ , warningsAreErrors ? "true" : "false"
+ , optimize ? "true" : "false"
+ , optimizationLevel
+ );
+
+ for(size_t i=0; i<includeDirs.size(); ++i)
+ BX_TRACE("\t include :%s\n", includeDirs[i].c_str());
+
+ for(size_t i=0; i<defines.size(); ++i)
+ BX_TRACE("\t define :%s\n", defines[i].c_str());
+
+ for(size_t i=0; i<dependencies.size(); ++i)
+ BX_TRACE("\t dependency :%s\n", dependencies[i].c_str());
+ }
+
const char* interpolationDx11(const char* _glsl)
{
- if (0 == strcmp(_glsl, "smooth") )
+ if (0 == bx::strCmp(_glsl, "smooth") )
{
return "linear";
}
- else if (0 == strcmp(_glsl, "flat") )
+ else if (0 == bx::strCmp(_glsl, "flat") )
{
return "nointerpolation";
}
@@ -169,7 +251,7 @@ namespace bgfx
for (uint32_t ii = 0; ii < UniformType::Count*2; ++ii)
{
if (NULL != s_uniformTypeName[ii]
- && 0 == strcmp(_name, s_uniformTypeName[ii]) )
+ && 0 == bx::strCmp(_name, s_uniformTypeName[ii]) )
{
return UniformType::Enum(ii/2);
}
@@ -201,7 +283,7 @@ namespace bgfx
return len;
}
- class Bin2cWriter : public bx::CrtFileWriter
+ class Bin2cWriter : public bx::FileWriter
{
public:
Bin2cWriter(const char* _name)
@@ -213,13 +295,13 @@ namespace bgfx
{
}
- virtual void close() BX_OVERRIDE
+ virtual void close() override
{
generate();
- return bx::CrtFileWriter::close();
+ return bx::FileWriter::close();
}
- virtual int32_t write(const void* _data, int32_t _size, bx::Error*) BX_OVERRIDE
+ virtual int32_t write(const void* _data, int32_t _size, bx::Error*) override
{
const char* data = (const char*)_data;
m_buffer.insert(m_buffer.end(), data, data+_size);
@@ -290,7 +372,7 @@ namespace bgfx
}
bx::Error err;
- int32_t size = bx::CrtFileWriter::write(out, len, &err);
+ int32_t size = bx::FileWriter::write(out, len, &err);
va_end(argList);
@@ -321,7 +403,7 @@ namespace bgfx
File(const char* _filePath)
: m_data(NULL)
{
- bx::CrtFileReader reader;
+ bx::FileReader reader;
if (bx::open(&reader, _filePath) )
{
m_size = (uint32_t)bx::getSize(&reader);
@@ -333,7 +415,7 @@ namespace bgfx
&& m_data[1] == '\xbb'
&& m_data[2] == '\xbf')
{
- memmove(m_data, &m_data[3], m_size-3);
+ bx::memMove(m_data, &m_data[3], m_size-3);
m_size -= 3;
}
@@ -363,26 +445,29 @@ namespace bgfx
char* strInsert(char* _str, const char* _insert)
{
- uint32_t len = bx::strnlen(_insert);
- bx::memMove(&_str[len], _str, bx::strnlen(_str) );
+ uint32_t len = bx::strLen(_insert);
+ bx::memMove(&_str[len], _str, bx::strLen(_str) );
bx::memCopy(_str, _insert, len);
return _str + len;
}
void strReplace(char* _str, const char* _find, const char* _replace)
{
- const int32_t len = bx::strnlen(_find);
+ const int32_t len = bx::strLen(_find);
char* replace = (char*)alloca(len+1);
- bx::strlcpy(replace, _replace, len+1);
- for (int32_t ii = bx::strnlen(replace); ii < len; ++ii)
+ bx::strCopy(replace, len+1, _replace);
+ for (int32_t ii = bx::strLen(replace); ii < len; ++ii)
{
replace[ii] = ' ';
}
replace[len] = '\0';
- BX_CHECK(len >= bx::strnlen(_replace), "");
- for (const char* ptr = bx::strnstr(_str, _find); NULL != ptr; ptr = bx::strnstr(ptr + len, _find) )
+ BX_CHECK(len >= bx::strLen(_replace), "");
+ for (const char* ptr = bx::strFind(_str, _find)
+ ; NULL != ptr
+ ; ptr = bx::strFind(ptr + len, _find)
+ )
{
bx::memCopy(const_cast<char*>(ptr), replace, len);
}
@@ -398,15 +483,22 @@ namespace bgfx
{
fprintf(stderr, "Code:\n---\n");
- LineReader lr(_code);
- for (int32_t line = 1; !lr.isEof() && line < _end; ++line)
+ bx::Error err;
+ LineReader reader(_code);
+ for (int32_t line = 1; err.isOk() && line < _end; ++line)
{
- if (line >= _start)
+ char str[4096];
+ int32_t len = bx::read(&reader, str, BX_COUNTOF(str), &err);
+
+ if (err.isOk()
+ && line >= _start)
{
+ std::string strLine(str, len);
+
if (_line == line)
{
fprintf(stderr, "\n");
- fprintf(stderr, ">>> %3d: %s", line, lr.getLine().c_str() );
+ fprintf(stderr, ">>> %3d: %s", line, strLine.c_str() );
if (-1 != _column)
{
fprintf(stderr, ">>> %3d: %*s\n", _column, _column, "^");
@@ -415,13 +507,9 @@ namespace bgfx
}
else
{
- fprintf(stderr, " %3d: %s", line, lr.getLine().c_str() );
+ fprintf(stderr, " %3d: %s", line, strLine.c_str() );
}
}
- else
- {
- lr.skipLine();
- }
}
fprintf(stderr, "---\n");
@@ -429,7 +517,7 @@ namespace bgfx
void writeFile(const char* _filePath, const void* _data, int32_t _size)
{
- bx::CrtFileWriter out;
+ bx::FileWriter out;
if (bx::open(&out, _filePath) )
{
bx::write(&out, _data, _size);
@@ -517,7 +605,10 @@ namespace bgfx
{
char* start = scratch(_includeDir);
- for (char* split = strchr(start, ';'); NULL != split; split = strchr(start, ';') )
+ for (char* split = const_cast<char*>(bx::strFind(start, ';') )
+ ; NULL != split
+ ; split = const_cast<char*>(bx::strFind(start, ';') )
+ )
{
*split = '\0';
m_tagptr->tag = FPPTAG_INCLUDE_DIR;
@@ -545,7 +636,7 @@ namespace bgfx
m_input = m_default;
m_input += "\n\n";
- int32_t len = bx::strnlen(_input)+1;
+ int32_t len = bx::strLen(_input)+1;
char* temp = new char[len];
bx::eolLF(temp, len, _input);
m_input += temp;
@@ -606,8 +697,8 @@ namespace bgfx
char* scratch(const char* _str)
{
char* result = &m_scratch[m_scratchPos];
- strcpy(result, _str);
- m_scratchPos += (uint32_t)strlen(_str)+1;
+ bx::strCopy(result, uint32_t(sizeof(m_scratch)-m_scratchPos), _str);
+ m_scratchPos += (uint32_t)bx::strLen(_str)+1;
return result;
}
@@ -688,6 +779,15 @@ namespace bgfx
strReplace(_data, find, "bgfx_VoidFrag");
}
+ const char* baseName(const char* _filePath)
+ {
+ bx::FilePath fp(_filePath);
+ char tmp[bx::kMaxFilePath];
+ bx::strCopy(tmp, BX_COUNTOF(tmp), fp.getFileName() );
+ const char* base = bx::strFind(_filePath, tmp);
+ return base;
+ }
+
// c - compute
// d - domain
// f - fragment
@@ -715,9 +815,12 @@ namespace bgfx
}
fprintf(stderr
- , "shaderc, bgfx shader compiler tool\n"
+ , "shaderc, bgfx shader compiler tool, version %d.%d.%d.\n"
"Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n"
"License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n"
+ , BGFX_SHADERC_VERSION_MAJOR
+ , BGFX_SHADERC_VERSION_MINOR
+ , BGFX_API_VERSION
);
fprintf(stderr
@@ -725,6 +828,8 @@ namespace bgfx
"\n"
"Options:\n"
+ " -h, --help Help.\n"
+ " -v, --version Version information only.\n"
" -f <file path> Input file path.\n"
" -i <include path> Include path (for multiple paths use use -i multiple times).\n"
" -o <file path> Output file path.\n"
@@ -760,47 +865,9 @@ namespace bgfx
);
}
- int compileShader(int _argc, const char* _argv[])
- {
- bx::CommandLine cmdLine(_argc, _argv);
-
- if (cmdLine.hasArg('h', "help") )
- {
- help();
- return EXIT_FAILURE;
- }
-
- g_verbose = cmdLine.hasArg("verbose");
-
- const char* filePath = cmdLine.findOption('f');
- if (NULL == filePath)
- {
- help("Shader file name must be specified.");
- return EXIT_FAILURE;
- }
-
- const char* outFilePath = cmdLine.findOption('o');
- if (NULL == outFilePath)
- {
- help("Output file name must be specified.");
- return EXIT_FAILURE;
- }
-
- const char* type = cmdLine.findOption('\0', "type");
- if (NULL == type)
- {
- help("Must specify shader type.");
- return EXIT_FAILURE;
- }
-
- const char* platform = cmdLine.findOption('\0', "platform");
- if (NULL == platform)
- {
- platform = "";
- }
-
- bool raw = cmdLine.hasArg('\0', "raw");
+ bool compileShader(const char* _varying, char* _shader, uint32_t _shaderLen, Options& _options, bx::FileWriter* _writer)
+ {
uint32_t glsl = 0;
uint32_t essl = 0;
uint32_t hlsl = 0;
@@ -808,35 +875,35 @@ namespace bgfx
uint32_t metal = 0;
uint32_t pssl = 0;
uint32_t spirv = 0;
- const char* profile = cmdLine.findOption('p', "profile");
- if (NULL != profile)
+ const char* profile = _options.profile.c_str();
+ if ('\0' != profile[0])
{
- if (0 == strncmp(&profile[1], "s_4_0_level", 11) )
+ if (0 == bx::strCmp(&profile[1], "s_4_0_level", 11) )
{
hlsl = 2;
}
- else if (0 == strncmp(&profile[1], "s_3", 3) )
+ else if (0 == bx::strCmp(&profile[1], "s_3", 3) )
{
hlsl = 3;
d3d = 9;
}
- else if (0 == strncmp(&profile[1], "s_4", 3) )
+ else if (0 == bx::strCmp(&profile[1], "s_4", 3) )
{
hlsl = 4;
}
- else if (0 == strncmp(&profile[1], "s_5", 3) )
+ else if (0 == bx::strCmp(&profile[1], "s_5", 3) )
{
hlsl = 5;
}
- else if (0 == strcmp(profile, "metal") )
+ else if (0 == bx::strCmp(profile, "metal") )
{
metal = 1;
}
- else if (0 == strcmp(profile, "pssl") )
+ else if (0 == bx::strCmp(profile, "pssl") )
{
pssl = 1;
}
- else if (0 == strcmp(profile, "spirv") )
+ else if (0 == bx::strCmp(profile, "spirv") )
{
spirv = 1;
}
@@ -850,84 +917,24 @@ namespace bgfx
essl = 2;
}
- const char* bin2c = NULL;
- if (cmdLine.hasArg("bin2c") )
- {
- bin2c = cmdLine.findOption("bin2c");
- if (NULL == bin2c)
- {
- bin2c = bx::baseName(outFilePath);
- uint32_t len = (uint32_t)strlen(bin2c);
- char* temp = (char*)alloca(len+1);
- for (char *out = temp; *bin2c != '\0';)
- {
- char ch = *bin2c++;
- if (isalnum(ch) )
- {
- *out++ = ch;
- }
- else
- {
- *out++ = '_';
- }
- }
- temp[len] = '\0';
-
- bin2c = temp;
- }
- }
-
- bool depends = cmdLine.hasArg("depends");
- bool preprocessOnly = cmdLine.hasArg("preprocess");
- const char* includeDir = cmdLine.findOption('i');
-
- BX_TRACE("depends: %d", depends);
- BX_TRACE("preprocessOnly: %d", preprocessOnly);
- BX_TRACE("includeDir: %s", includeDir);
-
- Preprocessor preprocessor(filePath, 0 != essl);
+ Preprocessor preprocessor(_options.inputFilePath.c_str(), 0 != essl);
- for (int ii = 1; NULL != includeDir; ++ii)
- {
- preprocessor.addInclude(includeDir);
- includeDir = cmdLine.findOption(ii, 'i');
- }
-
- std::string dir;
- {
- const char* base = bx::baseName(filePath);
+ for(size_t i=0; i<_options.includeDirs.size(); ++i)
+ preprocessor.addInclude(_options.includeDirs[i].c_str());
- if (base != filePath)
- {
- dir.assign(filePath, base-filePath);
- preprocessor.addInclude(dir.c_str() );
- }
- }
+ for(size_t i=0; i<_options.defines.size(); ++i)
+ preprocessor.setDefine(_options.defines[i].c_str());
- const char* defines = cmdLine.findOption("define");
- while (NULL != defines
- && '\0' != *defines)
- {
- defines = bx::strws(defines);
- const char* eol = strchr(defines, ';');
- if (NULL == eol)
- {
- eol = defines + strlen(defines);
- }
- std::string define(defines, eol);
- preprocessor.setDefine(define.c_str() );
- defines = ';' == *eol ? eol+1 : eol;
- }
+ for(size_t i=0; i<_options.dependencies.size(); ++i)
+ preprocessor.addDependency(_options.dependencies[i].c_str());
preprocessor.setDefaultDefine("BX_PLATFORM_ANDROID");
preprocessor.setDefaultDefine("BX_PLATFORM_EMSCRIPTEN");
preprocessor.setDefaultDefine("BX_PLATFORM_IOS");
preprocessor.setDefaultDefine("BX_PLATFORM_LINUX");
- preprocessor.setDefaultDefine("BX_PLATFORM_NACL");
preprocessor.setDefaultDefine("BX_PLATFORM_OSX");
preprocessor.setDefaultDefine("BX_PLATFORM_PS4");
preprocessor.setDefaultDefine("BX_PLATFORM_WINDOWS");
- preprocessor.setDefaultDefine("BX_PLATFORM_XBOX360");
preprocessor.setDefaultDefine("BX_PLATFORM_XBOXONE");
// preprocessor.setDefaultDefine("BGFX_SHADER_LANGUAGE_ESSL");
@@ -947,22 +954,24 @@ namespace bgfx
, essl ? 1 : glsl
);
- if (0 == bx::strincmp(platform, "android") )
+ const char* platform = _options.platform.c_str();
+
+ if (0 == bx::strCmpI(platform, "android") )
{
preprocessor.setDefine("BX_PLATFORM_ANDROID=1");
preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1");
}
- else if (0 == bx::strincmp(platform, "asm.js") )
+ else if (0 == bx::strCmpI(platform, "asm.js") )
{
preprocessor.setDefine("BX_PLATFORM_EMSCRIPTEN=1");
preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1");
}
- else if (0 == bx::strincmp(platform, "ios") )
+ else if (0 == bx::strCmpI(platform, "ios") )
{
preprocessor.setDefine("BX_PLATFORM_IOS=1");
preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1");
}
- else if (0 == bx::strincmp(platform, "linux") )
+ else if (0 == bx::strCmpI(platform, "linux") )
{
preprocessor.setDefine("BX_PLATFORM_LINUX=1");
if (0 != spirv)
@@ -974,12 +983,7 @@ namespace bgfx
preprocessor.setDefine(glslDefine);
}
}
- else if (0 == bx::strincmp(platform, "nacl") )
- {
- preprocessor.setDefine("BX_PLATFORM_NACL=1");
- preprocessor.setDefine("BGFX_SHADER_LANGUAGE_GLSL=1");
- }
- else if (0 == bx::strincmp(platform, "osx") )
+ else if (0 == bx::strCmpI(platform, "osx") )
{
preprocessor.setDefine("BX_PLATFORM_OSX=1");
preprocessor.setDefine(glslDefine);
@@ -987,19 +991,14 @@ namespace bgfx
bx::snprintf(temp, sizeof(temp), "BGFX_SHADER_LANGUAGE_METAL=%d", metal);
preprocessor.setDefine(temp);
}
- else if (0 == bx::strincmp(platform, "windows") )
+ else if (0 == bx::strCmpI(platform, "windows") )
{
preprocessor.setDefine("BX_PLATFORM_WINDOWS=1");
char temp[256];
bx::snprintf(temp, sizeof(temp), "BGFX_SHADER_LANGUAGE_HLSL=%d", hlsl);
preprocessor.setDefine(temp);
}
- else if (0 == bx::strincmp(platform, "xbox360") )
- {
- preprocessor.setDefine("BX_PLATFORM_XBOX360=1");
- preprocessor.setDefine("BGFX_SHADER_LANGUAGE_HLSL=3");
- }
- else if (0 == bx::strincmp(platform, "orbis") )
+ else if (0 == bx::strCmpI(platform, "orbis") )
{
preprocessor.setDefine("BX_PLATFORM_PS4=1");
preprocessor.setDefine("BGFX_SHADER_LANGUAGE_PSSL=1");
@@ -1008,8 +1007,7 @@ namespace bgfx
preprocessor.setDefine("M_PI=3.1415926535897932384626433832795");
- char shaderType = bx::toLower(type[0]);
- switch (shaderType)
+ switch (_options.shaderType)
{
case 'c':
preprocessor.setDefine("BGFX_SHADER_TYPE_COMPUTE=1");
@@ -1024,836 +1022,774 @@ namespace bgfx
break;
default:
- fprintf(stderr, "Unknown type: %s?!", type);
- return EXIT_FAILURE;
+ fprintf(stderr, "Unknown type: %c?!", _options.shaderType);
+ return false;
}
bool compiled = false;
- bx::CrtFileReader reader;
- if (!bx::open(&reader, filePath) )
- {
- fprintf(stderr, "Unable to open file '%s'.\n", filePath);
- }
- else
- {
- VaryingMap varyingMap;
+ VaryingMap varyingMap;
+ const char* parse = _varying;
- std::string defaultVarying = dir + "varying.def.sc";
- const char* varyingdef = cmdLine.findOption("varyingdef", defaultVarying.c_str() );
- File attribdef(varyingdef);
- const char* parse = attribdef.getData();
- if (NULL != parse
+ while (NULL != parse
&& *parse != '\0')
+ {
+ parse = bx::strws(parse);
+ const char* eol = bx::strFind(parse, ';');
+ if (NULL == eol)
{
- preprocessor.addDependency(varyingdef);
- }
- else
- {
- fprintf(stderr, "ERROR: Failed to parse varying def file: \"%s\" No input/output semantics will be generated in the code!\n", varyingdef);
+ eol = bx::streol(parse);
}
- while (NULL != parse
- && *parse != '\0')
+ if (NULL != eol)
{
- parse = bx::strws(parse);
- const char* eol = strchr(parse, ';');
- if (NULL == eol)
+ const char* precision = NULL;
+ const char* interpolation = NULL;
+ const char* typen = parse;
+
+ if (0 == bx::strCmp(typen, "lowp", 4)
+ || 0 == bx::strCmp(typen, "mediump", 7)
+ || 0 == bx::strCmp(typen, "highp", 5) )
{
- eol = bx::streol(parse);
+ precision = typen;
+ typen = parse = bx::strws(bx::strword(parse) );
}
- if (NULL != eol)
+ if (0 == bx::strCmp(typen, "flat", 4)
+ || 0 == bx::strCmp(typen, "smooth", 6)
+ || 0 == bx::strCmp(typen, "noperspective", 13)
+ || 0 == bx::strCmp(typen, "centroid", 8) )
{
- const char* precision = NULL;
- const char* interpolation = NULL;
- const char* typen = parse;
+ interpolation = typen;
+ typen = parse = bx::strws(bx::strword(parse) );
+ }
- if (0 == strncmp(typen, "lowp", 4)
- || 0 == strncmp(typen, "mediump", 7)
- || 0 == strncmp(typen, "highp", 5) )
+ const char* name = parse = bx::strws(bx::strword(parse) );
+ const char* column = parse = bx::strws(bx::strword(parse) );
+ const char* semantics = parse = bx::strws( (*parse == ':' ? ++parse : parse) );
+ const char* assign = parse = bx::strws(bx::strword(parse) );
+ const char* init = parse = bx::strws( (*parse == '=' ? ++parse : parse) );
+
+ if (typen < eol
+ && name < eol
+ && column < eol
+ && ':' == *column
+ && semantics < eol)
+ {
+ Varying var;
+ if (NULL != precision)
{
- precision = typen;
- typen = parse = bx::strws(bx::strword(parse) );
+ var.m_precision.assign(precision, bx::strword(precision)-precision);
}
- if (0 == strncmp(typen, "flat", 4)
- || 0 == strncmp(typen, "smooth", 6)
- || 0 == strncmp(typen, "noperspective", 13)
- || 0 == strncmp(typen, "centroid", 8) )
+ if (NULL != interpolation)
{
- interpolation = typen;
- typen = parse = bx::strws(bx::strword(parse) );
+ var.m_interpolation.assign(interpolation, bx::strword(interpolation)-interpolation);
}
- const char* name = parse = bx::strws(bx::strword(parse) );
- const char* column = parse = bx::strws(bx::strword(parse) );
- const char* semantics = parse = bx::strws( (*parse == ':' ? ++parse : parse) );
- const char* assign = parse = bx::strws(bx::strword(parse) );
- const char* init = parse = bx::strws( (*parse == '=' ? ++parse : parse) );
-
- if (typen < eol
- && name < eol
- && column < eol
- && ':' == *column
- && semantics < eol)
- {
- Varying var;
- if (NULL != precision)
- {
- var.m_precision.assign(precision, bx::strword(precision)-precision);
- }
-
- if (NULL != interpolation)
- {
- var.m_interpolation.assign(interpolation, bx::strword(interpolation)-interpolation);
- }
-
- var.m_type.assign(typen, bx::strword(typen)-typen);
- var.m_name.assign(name, bx::strword(name)-name);
- var.m_semantics.assign(semantics, bx::strword(semantics)-semantics);
-
- if (d3d == 9
- && var.m_semantics == "BITANGENT")
- {
- var.m_semantics = "BINORMAL";
- }
+ var.m_type.assign(typen, bx::strword(typen)-typen);
+ var.m_name.assign(name, bx::strword(name)-name);
+ var.m_semantics.assign(semantics, bx::strword(semantics)-semantics);
- if (assign < eol
- && '=' == *assign
- && init < eol)
- {
- var.m_init.assign(init, eol-init);
- }
+ if (d3d == 9
+ && var.m_semantics == "BITANGENT")
+ {
+ var.m_semantics = "BINORMAL";
+ }
- varyingMap.insert(std::make_pair(var.m_name, var) );
+ if (assign < eol
+ && '=' == *assign
+ && init < eol)
+ {
+ var.m_init.assign(init, eol-init);
}
- parse = bx::strws(bx::strnl(eol) );
+ varyingMap.insert(std::make_pair(var.m_name, var) );
}
- }
- InOut shaderInputs;
- InOut shaderOutputs;
- uint32_t inputHash = 0;
- uint32_t outputHash = 0;
-
- char* data;
- char* input;
- {
- const size_t padding = 4096;
- uint32_t size = (uint32_t)bx::getSize(&reader);
- data = new char[size+padding+1];
- size = (uint32_t)bx::read(&reader, data, size);
-
- if (data[0] == '\xef'
- && data[1] == '\xbb'
- && data[2] == '\xbf')
- {
- memmove(data, &data[3], size-3);
- size -= 3;
- }
+ parse = bx::strws(bx::strnl(eol) );
+ }
+ }
- // Compiler generates "error X3000: syntax error: unexpected end of file"
- // if input doesn't have empty line at EOF.
- data[size] = '\n';
- memset(&data[size+1], 0, padding);
- bx::close(&reader);
+ bool raw = _options.raw;
- if (!raw)
- {
- // To avoid commented code being recognized as used feature,
- // first preprocess pass is used to strip all comments before
- // substituting code.
- preprocessor.run(data);
- delete [] data;
-
- size = (uint32_t)preprocessor.m_preprocessed.size();
- data = new char[size+padding+1];
- memcpy(data, preprocessor.m_preprocessed.c_str(), size);
- memset(&data[size], 0, padding+1);
- }
+ InOut shaderInputs;
+ InOut shaderOutputs;
+ uint32_t inputHash = 0;
+ uint32_t outputHash = 0;
- strNormalizeEol(data);
+ char* data;
+ char* input;
+ {
+ data = _shader;
+ uint32_t size = _shaderLen;
- input = const_cast<char*>(bx::strws(data) );
- while (input[0] == '$')
- {
- const char* str = bx::strws(input+1);
- const char* eol = bx::streol(str);
- const char* nl = bx::strnl(eol);
- input = const_cast<char*>(nl);
+ const size_t padding = 4096;
- if (0 == strncmp(str, "input", 5) )
- {
- str += 5;
- const char* comment = strstr(str, "//");
- eol = NULL != comment && comment < eol ? comment : eol;
- inputHash = parseInOut(shaderInputs, str, eol);
- }
- else if (0 == strncmp(str, "output", 6) )
- {
- str += 6;
- const char* comment = strstr(str, "//");
- eol = NULL != comment && comment < eol ? comment : eol;
- outputHash = parseInOut(shaderOutputs, str, eol);
- }
- else if (0 == strncmp(str, "raw", 3) )
- {
- raw = true;
- str += 3;
- }
+ if (!raw)
+ {
+ // To avoid commented code being recognized as used feature,
+ // first preprocess pass is used to strip all comments before
+ // substituting code.
+ preprocessor.run(data);
+ delete [] data;
- input = const_cast<char*>(bx::strws(input) );
- }
+ size = (uint32_t)preprocessor.m_preprocessed.size();
+ data = new char[size+padding+1];
+ bx::memCopy(data, preprocessor.m_preprocessed.c_str(), size);
+ bx::memSet(&data[size], 0, padding+1);
}
- if (raw)
+ strNormalizeEol(data);
+
+ input = const_cast<char*>(bx::strws(data) );
+ while (input[0] == '$')
{
- bx::CrtFileWriter* writer = NULL;
+ const char* str = bx::strws(input+1);
+ const char* eol = bx::streol(str);
+ const char* nl = bx::strnl(eol);
+ input = const_cast<char*>(nl);
- if (NULL != bin2c)
+ if (0 == bx::strCmp(str, "input", 5) )
{
- writer = new Bin2cWriter(bin2c);
+ str += 5;
+ const char* comment = bx::strFind(str, "//");
+ eol = NULL != comment && comment < eol ? comment : eol;
+ inputHash = parseInOut(shaderInputs, str, eol);
}
- else
+ else if (0 == bx::strCmp(str, "output", 6) )
{
- writer = new bx::CrtFileWriter;
+ str += 6;
+ const char* comment = bx::strFind(str, "//");
+ eol = NULL != comment && comment < eol ? comment : eol;
+ outputHash = parseInOut(shaderOutputs, str, eol);
}
-
- if (!bx::open(writer, outFilePath) )
+ else if (0 == bx::strCmp(str, "raw", 3) )
{
- fprintf(stderr, "Unable to open output file '%s'.", outFilePath);
- return EXIT_FAILURE;
+ raw = true;
+ str += 3;
}
- if ('f' == shaderType)
- {
- bx::write(writer, BGFX_CHUNK_MAGIC_FSH);
- bx::write(writer, inputHash);
- }
- else if ('v' == shaderType)
- {
- bx::write(writer, BGFX_CHUNK_MAGIC_VSH);
- bx::write(writer, outputHash);
- }
- else
- {
- bx::write(writer, BGFX_CHUNK_MAGIC_CSH);
- bx::write(writer, outputHash);
- }
+ input = const_cast<char*>(bx::strws(input) );
+ }
+ }
- if (0 != glsl)
- {
- bx::write(writer, uint16_t(0) );
+ if (raw)
+ {
+ if ('f' == _options.shaderType)
+ {
+ bx::write(_writer, BGFX_CHUNK_MAGIC_FSH);
+ bx::write(_writer, inputHash);
+ }
+ else if ('v' == _options.shaderType)
+ {
+ bx::write(_writer, BGFX_CHUNK_MAGIC_VSH);
+ bx::write(_writer, outputHash);
+ }
+ else
+ {
+ bx::write(_writer, BGFX_CHUNK_MAGIC_CSH);
+ bx::write(_writer, outputHash);
+ }
- uint32_t shaderSize = (uint32_t)strlen(input);
- bx::write(writer, shaderSize);
- bx::write(writer, input, shaderSize);
- bx::write(writer, uint8_t(0) );
+ if (0 != glsl)
+ {
+ bx::write(_writer, uint16_t(0) );
- compiled = true;
- }
- else if (0 != pssl)
- {
- compiled = compilePSSLShader(cmdLine, 0, input, writer);
- }
- else
- {
- compiled = compileHLSLShader(cmdLine, d3d, input, writer);
- }
+ uint32_t shaderSize = (uint32_t)bx::strLen(input);
+ bx::write(_writer, shaderSize);
+ bx::write(_writer, input, shaderSize);
+ bx::write(_writer, uint8_t(0) );
- bx::close(writer);
- delete writer;
+ compiled = true;
}
- else if ('c' == shaderType) // Compute
+ else if (0 != pssl)
+ {
+ compiled = compilePSSLShader(_options, 0, input, _writer);
+ }
+ else
{
- char* entry = strstr(input, "void main()");
- if (NULL == entry)
+ compiled = compileHLSLShader(_options, d3d, input, _writer);
+ }
+ }
+ else if ('c' == _options.shaderType) // Compute
+ {
+ char* entry = const_cast<char*>(bx::strFind(input, "void main()") );
+ if (NULL == entry)
+ {
+ fprintf(stderr, "Shader entry point 'void main()' is not found.\n");
+ }
+ else
+ {
+ if (0 != glsl
+ || 0 != essl
+ || 0 != metal)
{
- fprintf(stderr, "Shader entry point 'void main()' is not found.\n");
}
else
{
- if (0 != glsl
- || 0 != essl
- || 0 != metal)
+ preprocessor.writef(
+ "#define lowp\n"
+ "#define mediump\n"
+ "#define highp\n"
+ "#define ivec2 int2\n"
+ "#define ivec3 int3\n"
+ "#define ivec4 int4\n"
+ "#define uvec2 uint2\n"
+ "#define uvec3 uint3\n"
+ "#define uvec4 uint4\n"
+ "#define vec2 float2\n"
+ "#define vec3 float3\n"
+ "#define vec4 float4\n"
+ "#define mat2 float2x2\n"
+ "#define mat3 float3x3\n"
+ "#define mat4 float4x4\n"
+ );
+
+ entry[4] = '_';
+
+ preprocessor.writef("#define void_main()");
+ preprocessor.writef(" \\\n\tvoid main(");
+
+ uint32_t arg = 0;
+
+ const bool hasLocalInvocationID = NULL != bx::strFind(input, "gl_LocalInvocationID");
+ const bool hasLocalInvocationIndex = NULL != bx::strFind(input, "gl_LocalInvocationIndex");
+ const bool hasGlobalInvocationID = NULL != bx::strFind(input, "gl_GlobalInvocationID");
+ const bool hasWorkGroupID = NULL != bx::strFind(input, "gl_WorkGroupID");
+
+ if (hasLocalInvocationID)
{
+ preprocessor.writef(
+ " \\\n\t%sint3 gl_LocalInvocationID : SV_GroupThreadID"
+ , arg++ > 0 ? ", " : " "
+ );
}
- else
+
+ if (hasLocalInvocationIndex)
{
preprocessor.writef(
- "#define lowp\n"
- "#define mediump\n"
- "#define highp\n"
- "#define ivec2 int2\n"
- "#define ivec3 int3\n"
- "#define ivec4 int4\n"
- "#define uvec2 uint2\n"
- "#define uvec3 uint3\n"
- "#define uvec4 uint4\n"
- "#define vec2 float2\n"
- "#define vec3 float3\n"
- "#define vec4 float4\n"
- "#define mat2 float2x2\n"
- "#define mat3 float3x3\n"
- "#define mat4 float4x4\n"
+ " \\\n\t%sint gl_LocalInvocationIndex : SV_GroupIndex"
+ , arg++ > 0 ? ", " : " "
);
+ }
- entry[4] = '_';
-
- preprocessor.writef("#define void_main()");
- preprocessor.writef(" \\\n\tvoid main(");
-
- uint32_t arg = 0;
-
- const bool hasLocalInvocationID = NULL != strstr(input, "gl_LocalInvocationID");
- const bool hasLocalInvocationIndex = NULL != strstr(input, "gl_LocalInvocationIndex");
- const bool hasGlobalInvocationID = NULL != strstr(input, "gl_GlobalInvocationID");
- const bool hasWorkGroupID = NULL != strstr(input, "gl_WorkGroupID");
-
- if (hasLocalInvocationID)
- {
- preprocessor.writef(
- " \\\n\t%sint3 gl_LocalInvocationID : SV_GroupThreadID"
- , arg++ > 0 ? ", " : " "
- );
- }
-
- if (hasLocalInvocationIndex)
- {
- preprocessor.writef(
- " \\\n\t%sint gl_LocalInvocationIndex : SV_GroupIndex"
- , arg++ > 0 ? ", " : " "
- );
- }
-
- if (hasGlobalInvocationID)
- {
- preprocessor.writef(
- " \\\n\t%sint3 gl_GlobalInvocationID : SV_DispatchThreadID"
- , arg++ > 0 ? ", " : " "
- );
- }
-
- if (hasWorkGroupID)
- {
- preprocessor.writef(
- " \\\n\t%sint3 gl_WorkGroupID : SV_GroupID"
- , arg++ > 0 ? ", " : " "
- );
- }
-
+ if (hasGlobalInvocationID)
+ {
preprocessor.writef(
- " \\\n\t)\n"
+ " \\\n\t%sint3 gl_GlobalInvocationID : SV_DispatchThreadID"
+ , arg++ > 0 ? ", " : " "
);
}
- if (preprocessor.run(input) )
+ if (hasWorkGroupID)
{
- BX_TRACE("Input file: %s", filePath);
- BX_TRACE("Output file: %s", outFilePath);
+ preprocessor.writef(
+ " \\\n\t%sint3 gl_WorkGroupID : SV_GroupID"
+ , arg++ > 0 ? ", " : " "
+ );
+ }
- if (preprocessOnly)
- {
- bx::CrtFileWriter writer;
+ preprocessor.writef(
+ " \\\n\t)\n"
+ );
+ }
- if (!bx::open(&writer, outFilePath) )
- {
- fprintf(stderr, "Unable to open output file '%s'.", outFilePath);
- return EXIT_FAILURE;
- }
+ if (preprocessor.run(input) )
+ {
+ //BX_TRACE("Input file: %s", filePath);
+ //BX_TRACE("Output file: %s", outFilePath);
- bx::write(&writer, preprocessor.m_preprocessed.c_str(), (int32_t)preprocessor.m_preprocessed.size() );
- bx::close(&writer);
+ if (_options.preprocessOnly)
+ {
+ bx::write(_writer, preprocessor.m_preprocessed.c_str(), (int32_t)preprocessor.m_preprocessed.size() );
- return EXIT_SUCCESS;
- }
+ return true;
+ }
+ {
+ bx::write(_writer, BGFX_CHUNK_MAGIC_CSH);
+ bx::write(_writer, outputHash);
+
+ if (0 != glsl
+ || 0 != essl)
{
- bx::CrtFileWriter* writer = NULL;
+ std::string code;
- if (NULL != bin2c)
+ if (essl)
{
- writer = new Bin2cWriter(bin2c);
+ bx::stringPrintf(code, "#version 310 es\n");
}
else
{
- writer = new bx::CrtFileWriter;
+ bx::stringPrintf(code, "#version %d\n", glsl == 0 ? 430 : glsl);
}
- if (!bx::open(writer, outFilePath) )
- {
- fprintf(stderr, "Unable to open output file '%s'.", outFilePath);
- return EXIT_FAILURE;
- }
-
- bx::write(writer, BGFX_CHUNK_MAGIC_CSH);
- bx::write(writer, outputHash);
+ code += preprocessor.m_preprocessed;
+#if 1
+ bx::write(_writer, uint16_t(0) );
- if (0 != glsl
- || 0 != essl)
- {
- std::string code;
+ uint32_t shaderSize = (uint32_t)code.size();
+ bx::write(_writer, shaderSize);
+ bx::write(_writer, code.c_str(), shaderSize);
+ bx::write(_writer, uint8_t(0) );
- if (essl)
- {
- bx::stringPrintf(code, "#version 310 es\n");
- }
- else
- {
- bx::stringPrintf(code, "#version %d\n", glsl == 0 ? 430 : glsl);
- }
-
- code += preprocessor.m_preprocessed;
- #if 1
- bx::write(writer, uint16_t(0) );
-
- uint32_t shaderSize = (uint32_t)code.size();
- bx::write(writer, shaderSize);
- bx::write(writer, code.c_str(), shaderSize);
- bx::write(writer, uint8_t(0) );
+ compiled = true;
+#else
+ compiled = compileGLSLShader(cmdLine, essl, code, writer);
+#endif // 0
+ }
+ else if (0 != spirv)
+ {
+ compiled = compileSPIRVShader(_options, 0, preprocessor.m_preprocessed, _writer);
+ }
+ else if (0 != pssl)
+ {
+ compiled = compilePSSLShader(_options, 0, preprocessor.m_preprocessed, _writer);
+ }
+ else
+ {
+ compiled = compileHLSLShader(_options, d3d, preprocessor.m_preprocessed, _writer);
+ }
+ }
- compiled = true;
- #else
- compiled = compileGLSLShader(cmdLine, essl, code, writer);
- #endif // 0
- }
- else if (0 != spirv)
+ if (compiled)
+ {
+ if (_options.depends)
+ {
+ std::string ofp = _options.outputFilePath;
+ ofp += ".d";
+ bx::FileWriter writer;
+ if (bx::open(&writer, ofp.c_str() ) )
{
- compiled = compileSPIRVShader(cmdLine, 0, preprocessor.m_preprocessed, writer);
+ writef(&writer, "%s : %s\n", _options.outputFilePath.c_str(), preprocessor.m_depends.c_str() );
+ bx::close(&writer);
}
- else if (0 != pssl)
+ }
+ }
+ }
+ }
+ }
+ else // Vertex/Fragment
+ {
+ char* entry = const_cast<char*>(bx::strFind(input, "void main()") );
+ if (NULL == entry)
+ {
+ fprintf(stderr, "Shader entry point 'void main()' is not found.\n");
+ }
+ else
+ {
+ if (0 != glsl
+ || 0 != essl
+ || 0 != metal)
+ {
+ if (0 == essl)
+ {
+ // bgfx shadow2D/Proj behave like EXT_shadow_samplers
+ // not as GLSL language 1.2 specs shadow2D/Proj.
+ preprocessor.writef(
+ "#define shadow2D(_sampler, _coord) bgfxShadow2D(_sampler, _coord).x\n"
+ "#define shadow2DProj(_sampler, _coord) bgfxShadow2DProj(_sampler, _coord).x\n"
+ );
+ }
+
+ for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it)
+ {
+ VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
+ if (varyingIt != varyingMap.end() )
+ {
+ const Varying& var = varyingIt->second;
+ const char* name = var.m_name.c_str();
+
+ if (0 == bx::strCmp(name, "a_", 2)
+ || 0 == bx::strCmp(name, "i_", 2) )
{
- compiled = compilePSSLShader(cmdLine, 0, preprocessor.m_preprocessed, writer);
+ preprocessor.writef("attribute %s %s %s %s;\n"
+ , var.m_precision.c_str()
+ , var.m_interpolation.c_str()
+ , var.m_type.c_str()
+ , name
+ );
}
else
{
- compiled = compileHLSLShader(cmdLine, d3d, preprocessor.m_preprocessed, writer);
+ preprocessor.writef("%s varying %s %s %s;\n"
+ , var.m_interpolation.c_str()
+ , var.m_precision.c_str()
+ , var.m_type.c_str()
+ , name
+ );
}
-
- bx::close(writer);
- delete writer;
}
+ }
- if (compiled)
+ for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it)
+ {
+ VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
+ if (varyingIt != varyingMap.end() )
{
- if (depends)
- {
- std::string ofp = outFilePath;
- ofp += ".d";
- bx::CrtFileWriter writer;
- if (bx::open(&writer, ofp.c_str() ) )
- {
- writef(&writer, "%s : %s\n", outFilePath, preprocessor.m_depends.c_str() );
- bx::close(&writer);
- }
- }
+ const Varying& var = varyingIt->second;
+ preprocessor.writef("%s varying %s %s;\n"
+ , var.m_interpolation.c_str()
+ , var.m_type.c_str()
+ , var.m_name.c_str()
+ );
}
}
}
- }
- else // Vertex/Fragment
- {
- char* entry = strstr(input, "void main()");
- if (NULL == entry)
- {
- fprintf(stderr, "Shader entry point 'void main()' is not found.\n");
- }
else
{
- if (0 != glsl
- || 0 != essl
- || 0 != metal)
+ preprocessor.writef(
+ "#define lowp\n"
+ "#define mediump\n"
+ "#define highp\n"
+ "#define ivec2 int2\n"
+ "#define ivec3 int3\n"
+ "#define ivec4 int4\n"
+ "#define uvec2 uint2\n"
+ "#define uvec3 uint3\n"
+ "#define uvec4 uint4\n"
+ "#define vec2 float2\n"
+ "#define vec3 float3\n"
+ "#define vec4 float4\n"
+ "#define mat2 float2x2\n"
+ "#define mat3 float3x3\n"
+ "#define mat4 float4x4\n"
+ );
+
+ if (hlsl != 0
+ && hlsl < 4)
{
- if (0 == essl)
+ preprocessor.writef(
+ "#define centroid\n"
+ "#define flat\n"
+ "#define noperspective\n"
+ "#define smooth\n"
+ );
+ }
+
+ entry[4] = '_';
+
+ if ('f' == _options.shaderType)
+ {
+ const char* insert = bx::strFind(entry, "{");
+ if (NULL != insert)
{
- // bgfx shadow2D/Proj behave like EXT_shadow_samplers
- // not as GLSL language 1.2 specs shadow2D/Proj.
- preprocessor.writef(
- "#define shadow2D(_sampler, _coord) bgfxShadow2D(_sampler, _coord).x\n"
- "#define shadow2DProj(_sampler, _coord) bgfxShadow2DProj(_sampler, _coord).x\n"
- );
+ insert = strInsert(const_cast<char*>(insert+1), "\nvec4 bgfx_VoidFrag = vec4_splat(0.0);\n");
}
- for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it)
+ const bool hasFragColor = NULL != bx::strFind(input, "gl_FragColor");
+ const bool hasFragCoord = NULL != bx::strFind(input, "gl_FragCoord") || hlsl > 3 || hlsl == 2;
+ const bool hasFragDepth = NULL != bx::strFind(input, "gl_FragDepth");
+ const bool hasFrontFacing = NULL != bx::strFind(input, "gl_FrontFacing");
+ const bool hasPrimitiveId = NULL != bx::strFind(input, "gl_PrimitiveID");
+
+ bool hasFragData[8] = {};
+ uint32_t numFragData = 0;
+ for (uint32_t ii = 0; ii < BX_COUNTOF(hasFragData); ++ii)
{
- VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
- if (varyingIt != varyingMap.end() )
- {
- const Varying& var = varyingIt->second;
- const char* name = var.m_name.c_str();
+ char temp[32];
+ bx::snprintf(temp, BX_COUNTOF(temp), "gl_FragData[%d]", ii);
+ hasFragData[ii] = NULL != bx::strFind(input, temp);
+ numFragData += hasFragData[ii];
+ }
- if (0 == strncmp(name, "a_", 2)
- || 0 == strncmp(name, "i_", 2) )
- {
- preprocessor.writef("attribute %s %s %s %s;\n"
- , var.m_precision.c_str()
- , var.m_interpolation.c_str()
- , var.m_type.c_str()
- , name
- );
- }
- else
- {
- preprocessor.writef("%s varying %s %s %s;\n"
- , var.m_interpolation.c_str()
- , var.m_precision.c_str()
- , var.m_type.c_str()
- , name
- );
- }
+ if (0 == numFragData)
+ {
+ // GL errors when both gl_FragColor and gl_FragData is used.
+ // This will trigger the same error with HLSL compiler too.
+ preprocessor.writef("#define gl_FragColor gl_FragData_0_\n");
+
+ // If it has gl_FragData or gl_FragColor, color target at
+ // index 0 exists, otherwise shader is not modifying color
+ // targets.
+ hasFragData[0] |= hasFragColor || d3d < 11;
+
+ if (NULL != insert
+ && d3d < 11
+ && !hasFragColor)
+ {
+ insert = strInsert(const_cast<char*>(insert+1), "\ngl_FragColor = bgfx_VoidFrag;\n");
}
}
- for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it)
+ preprocessor.writef("#define void_main()");
+ preprocessor.writef(" \\\n\tvoid main(");
+
+ uint32_t arg = 0;
+
+ if (hasFragCoord)
+ {
+ preprocessor.writef(" \\\n\tvec4 gl_FragCoord : SV_POSITION");
+ ++arg;
+ }
+
+ for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it)
{
VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
if (varyingIt != varyingMap.end() )
{
const Varying& var = varyingIt->second;
- preprocessor.writef("%s varying %s %s;\n"
- , var.m_interpolation.c_str()
+ preprocessor.writef(" \\\n\t%s%s %s %s : %s"
+ , arg++ > 0 ? ", " : " "
+ , interpolationDx11(var.m_interpolation.c_str() )
, var.m_type.c_str()
, var.m_name.c_str()
+ , var.m_semantics.c_str()
);
}
}
- }
- else
- {
- preprocessor.writef(
- "#define lowp\n"
- "#define mediump\n"
- "#define highp\n"
- "#define ivec2 int2\n"
- "#define ivec3 int3\n"
- "#define ivec4 int4\n"
- "#define uvec2 uint2\n"
- "#define uvec3 uint3\n"
- "#define uvec4 uint4\n"
- "#define vec2 float2\n"
- "#define vec3 float3\n"
- "#define vec4 float4\n"
- "#define mat2 float2x2\n"
- "#define mat3 float3x3\n"
- "#define mat4 float4x4\n"
- );
- if (hlsl != 0
- && hlsl < 4)
+ const uint32_t maxRT = d3d > 9 ? BX_COUNTOF(hasFragData) : 4;
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(hasFragData); ++ii)
+ {
+ if (ii < maxRT)
+ {
+ if (hasFragData[ii])
+ {
+ addFragData(preprocessor, input, ii, arg++ > 0);
+ }
+ }
+ else
+ {
+ voidFragData(input, ii);
+ }
+ }
+
+ if (hasFragDepth)
{
preprocessor.writef(
- "#define centroid\n"
- "#define flat\n"
- "#define noperspective\n"
- "#define smooth\n"
+ " \\\n\t%sout float gl_FragDepth : SV_DEPTH"
+ , arg++ > 0 ? ", " : " "
);
}
- entry[4] = '_';
+ if (hasFrontFacing
+ && hlsl >= 3)
+ {
+ preprocessor.writef(
+ " \\\n\t%sfloat __vface : VFACE"
+ , arg++ > 0 ? ", " : " "
+ );
+ }
- if ('f' == shaderType)
+ if (hasPrimitiveId)
{
- const char* insert = strstr(entry, "{");
- if (NULL != insert)
+ if (d3d > 9)
{
- insert = strInsert(const_cast<char*>(insert+1), "\nvec4 bgfx_VoidFrag = vec4_splat(0.0);\n");
+ preprocessor.writef(
+ " \\\n\t%suint gl_PrimitiveID : SV_PrimitiveID"
+ , arg++ > 0 ? ", " : " "
+ );
}
-
- const bool hasFragColor = NULL != strstr(input, "gl_FragColor");
- const bool hasFragCoord = NULL != strstr(input, "gl_FragCoord") || hlsl > 3 || hlsl == 2;
- const bool hasFragDepth = NULL != strstr(input, "gl_FragDepth");
- const bool hasFrontFacing = NULL != strstr(input, "gl_FrontFacing");
- const bool hasPrimitiveId = NULL != strstr(input, "gl_PrimitiveID");
-
- bool hasFragData[8] = {};
- uint32_t numFragData = 0;
- for (uint32_t ii = 0; ii < BX_COUNTOF(hasFragData); ++ii)
+ else
{
- char temp[32];
- bx::snprintf(temp, BX_COUNTOF(temp), "gl_FragData[%d]", ii);
- hasFragData[ii] = NULL != strstr(input, temp);
- numFragData += hasFragData[ii];
+ fprintf(stderr, "gl_PrimitiveID builtin is not supported by this D3D9 HLSL.\n");
+ return false;
}
+ }
+
+ preprocessor.writef(
+ " \\\n\t)\n"
+ );
- if (0 == numFragData)
+ if (hasFrontFacing)
+ {
+ if (hlsl >= 3)
{
- // GL errors when both gl_FragColor and gl_FragData is used.
- // This will trigger the same error with HLSL compiler too.
- preprocessor.writef("#define gl_FragColor gl_FragData_0_\n");
-
- // If it has gl_FragData or gl_FragColor, color target at
- // index 0 exists, otherwise shader is not modifying color
- // targets.
- hasFragData[0] |= hasFragColor || d3d < 11;
-
- if (NULL != insert
- && d3d < 11
- && !hasFragColor)
- {
- insert = strInsert(const_cast<char*>(insert+1), "\ngl_FragColor = bgfx_VoidFrag;\n");
- }
+ preprocessor.writef(
+ "#define gl_FrontFacing (__vface <= 0.0)\n"
+ );
}
-
- preprocessor.writef("#define void_main()");
- preprocessor.writef(" \\\n\tvoid main(");
-
- uint32_t arg = 0;
-
- if (hasFragCoord)
+ else
{
- preprocessor.writef(" \\\n\tvec4 gl_FragCoord : SV_POSITION");
- ++arg;
+ preprocessor.writef(
+ "#define gl_FrontFacing false\n"
+ );
}
+ }
+ }
+ else if ('v' == _options.shaderType)
+ {
+ const bool hasVertexId = NULL != bx::strFind(input, "gl_VertexID");
+ const bool hasInstanceId = NULL != bx::strFind(input, "gl_InstanceID");
- for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it)
+ const char* brace = bx::strFind(entry, "{");
+ if (NULL != brace)
+ {
+ const char* end = bx::strmb(brace, '{', '}');
+ if (NULL != end)
{
- VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
- if (varyingIt != varyingMap.end() )
- {
- const Varying& var = varyingIt->second;
- preprocessor.writef(" \\\n\t%s%s %s %s : %s"
- , arg++ > 0 ? ", " : " "
- , interpolationDx11(var.m_interpolation.c_str() )
- , var.m_type.c_str()
- , var.m_name.c_str()
- , var.m_semantics.c_str()
- );
- }
+ strInsert(const_cast<char*>(end), "__RETURN__;\n");
}
+ }
- const uint32_t maxRT = d3d > 9 ? BX_COUNTOF(hasFragData) : 4;
-
- for (uint32_t ii = 0; ii < BX_COUNTOF(hasFragData); ++ii)
+ preprocessor.writef(
+ "struct Output\n"
+ "{\n"
+ "\tvec4 gl_Position : SV_POSITION;\n"
+ "#define gl_Position _varying_.gl_Position\n"
+ );
+ for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it)
+ {
+ VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
+ if (varyingIt != varyingMap.end() )
{
- if (ii < maxRT)
- {
- if (hasFragData[ii])
- {
- addFragData(preprocessor, input, ii, arg++ > 0);
- }
- }
- else
- {
- voidFragData(input, ii);
- }
+ const Varying& var = varyingIt->second;
+ preprocessor.writef("\t%s %s : %s;\n", var.m_type.c_str(), var.m_name.c_str(), var.m_semantics.c_str() );
+ preprocessor.writef("#define %s _varying_.%s\n", var.m_name.c_str(), var.m_name.c_str() );
}
+ }
+ preprocessor.writef(
+ "};\n"
+ );
- if (hasFragDepth)
+ preprocessor.writef("#define void_main() \\\n");
+ preprocessor.writef("Output main(");
+ uint32_t arg = 0;
+ for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it)
+ {
+ VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
+ if (varyingIt != varyingMap.end() )
{
+ const Varying& var = varyingIt->second;
preprocessor.writef(
- " \\\n\t%sout float gl_FragDepth : SV_DEPTH"
- , arg++ > 0 ? ", " : " "
+ " \\\n\t%s%s %s : %s"
+ , arg++ > 0 ? ", " : ""
+ , var.m_type.c_str()
+ , var.m_name.c_str()
+ , var.m_semantics.c_str()
);
}
+ }
- if (hasFrontFacing
- && hlsl >= 3)
+ if (hasVertexId)
+ {
+ if (d3d > 9)
{
preprocessor.writef(
- " \\\n\t%sfloat __vface : VFACE"
+ " \\\n\t%suint gl_VertexID : SV_VertexID"
, arg++ > 0 ? ", " : " "
);
}
-
- if (hasPrimitiveId)
- {
- if (d3d > 9)
- {
- preprocessor.writef(
- " \\\n\t%suint gl_PrimitiveID : SV_PrimitiveID"
- , arg++ > 0 ? ", " : " "
- );
- }
- else
- {
- fprintf(stderr, "PrimitiveID builtin is not supported by this D3D9 HLSL.\n");
- return EXIT_FAILURE;
- }
- }
-
- preprocessor.writef(
- " \\\n\t)\n"
- );
-
- if (hasFrontFacing)
+ else
{
- if (hlsl >= 3)
- {
- preprocessor.writef(
- "#define gl_FrontFacing (__vface <= 0.0)\n"
- );
- }
- else
- {
- preprocessor.writef(
- "#define gl_FrontFacing false\n"
- );
- }
+ fprintf(stderr, "gl_VertexID builtin is not supported by this D3D9 HLSL.\n");
+ return false;
}
}
- else if ('v' == shaderType)
+
+ if (hasInstanceId)
{
- const char* brace = strstr(entry, "{");
- if (NULL != brace)
+ if (d3d > 9)
{
- const char* end = bx::strmb(brace, '{', '}');
- if (NULL != end)
- {
- strInsert(const_cast<char*>(end), "__RETURN__;\n");
- }
+ preprocessor.writef(
+ " \\\n\t%suint gl_InstanceID : SV_InstanceID"
+ , arg++ > 0 ? ", " : " "
+ );
}
-
- preprocessor.writef(
- "struct Output\n"
- "{\n"
- "\tvec4 gl_Position : SV_POSITION;\n"
- "#define gl_Position _varying_.gl_Position\n"
- );
- for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it)
+ else
{
- VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
- if (varyingIt != varyingMap.end() )
- {
- const Varying& var = varyingIt->second;
- preprocessor.writef("\t%s %s : %s;\n", var.m_type.c_str(), var.m_name.c_str(), var.m_semantics.c_str() );
- preprocessor.writef("#define %s _varying_.%s\n", var.m_name.c_str(), var.m_name.c_str() );
- }
+ fprintf(stderr, "gl_InstanceID builtin is not supported by this D3D9 HLSL.\n");
+ return false;
}
- preprocessor.writef(
- "};\n"
- );
+ }
- preprocessor.writef("#define void_main() \\\n");
- preprocessor.writef("Output main(");
- bool first = true;
- for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it)
- {
- VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
- if (varyingIt != varyingMap.end() )
- {
- const Varying& var = varyingIt->second;
- preprocessor.writef("%s%s %s : %s\\\n", first ? "" : "\t, ", var.m_type.c_str(), var.m_name.c_str(), var.m_semantics.c_str() );
- first = false;
- }
- }
- preprocessor.writef(
- ") \\\n"
- "{ \\\n"
- "\tOutput _varying_;"
- );
+ preprocessor.writef(
+ ") \\\n"
+ "{ \\\n"
+ "\tOutput _varying_;"
+ );
- for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it)
+ for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it)
+ {
+ VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
+ if (varyingIt != varyingMap.end() )
{
- VaryingMap::const_iterator varyingIt = varyingMap.find(*it);
- if (varyingIt != varyingMap.end() )
+ const Varying& var = varyingIt->second;
+ preprocessor.writef(" \\\n\t%s", var.m_name.c_str() );
+ if (!var.m_init.empty() )
{
- const Varying& var = varyingIt->second;
- preprocessor.writef(" \\\n\t%s", var.m_name.c_str() );
- if (!var.m_init.empty() )
- {
- preprocessor.writef(" = %s", var.m_init.c_str() );
- }
- preprocessor.writef(";");
+ preprocessor.writef(" = %s", var.m_init.c_str() );
}
+ preprocessor.writef(";");
}
+ }
- preprocessor.writef(
- "\n#define __RETURN__ \\\n"
- "\t} \\\n"
- );
+ preprocessor.writef(
+ "\n#define __RETURN__ \\\n"
+ "\t} \\\n"
+ );
- if (hlsl != 0
- && hlsl <= 3)
- {
+ if (hlsl != 0
+ && hlsl <= 3)
+ {
// preprocessor.writef(
// "\tgl_Position.xy += u_viewTexel.xy * gl_Position.w; \\\n"
// );
- }
-
- preprocessor.writef(
- "\treturn _varying_"
- );
}
+
+ preprocessor.writef(
+ "\treturn _varying_"
+ );
}
+ }
- if (preprocessor.run(input) )
- {
- BX_TRACE("Input file: %s", filePath);
- BX_TRACE("Output file: %s", outFilePath);
+ if (preprocessor.run(input) )
+ {
+ //BX_TRACE("Input file: %s", filePath);
+ //BX_TRACE("Output file: %s", outFilePath);
- if (preprocessOnly)
+ if (_options.preprocessOnly)
+ {
+ if (0 != glsl)
{
- bx::CrtFileWriter writer;
-
- if (!bx::open(&writer, outFilePath) )
+ if (essl != 0)
{
- fprintf(stderr, "Unable to open output file '%s'.", outFilePath);
- return EXIT_FAILURE;
+ writef(_writer
+ , "#ifdef GL_ES\n"
+ "precision highp float;\n"
+ "#endif // GL_ES\n\n"
+ );
}
+ }
+ bx::write(_writer, preprocessor.m_preprocessed.c_str(), (int32_t)preprocessor.m_preprocessed.size() );
- if (0 != glsl)
- {
- if (NULL == profile)
- {
- writef(&writer
- , "#ifdef GL_ES\n"
- "precision highp float;\n"
- "#endif // GL_ES\n\n"
- );
- }
- }
- bx::write(&writer, preprocessor.m_preprocessed.c_str(), (int32_t)preprocessor.m_preprocessed.size() );
- bx::close(&writer);
+ return true;
+ }
- return EXIT_SUCCESS;
+ {
+ if ('f' == _options.shaderType)
+ {
+ bx::write(_writer, BGFX_CHUNK_MAGIC_FSH);
+ bx::write(_writer, inputHash);
}
-
+ else if ('v' == _options.shaderType)
{
- bx::CrtFileWriter* writer = NULL;
-
- if (NULL != bin2c)
- {
- writer = new Bin2cWriter(bin2c);
- }
- else
- {
- writer = new bx::CrtFileWriter;
- }
-
- if (!bx::open(writer, outFilePath) )
- {
- fprintf(stderr, "Unable to open output file '%s'.", outFilePath);
- return EXIT_FAILURE;
- }
+ bx::write(_writer, BGFX_CHUNK_MAGIC_VSH);
+ bx::write(_writer, outputHash);
+ }
+ else
+ {
+ bx::write(_writer, BGFX_CHUNK_MAGIC_CSH);
+ bx::write(_writer, outputHash);
+ }
- if ('f' == shaderType)
- {
- bx::write(writer, BGFX_CHUNK_MAGIC_FSH);
- bx::write(writer, inputHash);
- }
- else if ('v' == shaderType)
- {
- bx::write(writer, BGFX_CHUNK_MAGIC_VSH);
- bx::write(writer, outputHash);
- }
- else
- {
- bx::write(writer, BGFX_CHUNK_MAGIC_CSH);
- bx::write(writer, outputHash);
- }
+ if (0 != glsl
+ || 0 != essl
+ || 0 != metal)
+ {
+ std::string code;
- if (0 != glsl
- || 0 != essl
- || 0 != metal)
+ if (glsl < 400)
{
- std::string code;
-
const bool usesTextureLod = false
|| !!bx::findIdentifierMatch(input, s_ARB_shader_texture_lod)
|| !!bx::findIdentifierMatch(input, s_EXT_shader_texture_lod)
;
+ const bool usesInstanceID = !!bx::strFind(input, "gl_InstanceID");
+ const bool usesGpuShader4 = !!bx::findIdentifierMatch(input, s_EXT_gpu_shader4);
const bool usesGpuShader5 = !!bx::findIdentifierMatch(input, s_ARB_gpu_shader5);
const bool usesTexelFetch = !!bx::findIdentifierMatch(input, s_texelFetch);
const bool usesTextureMS = !!bx::findIdentifierMatch(input, s_ARB_texture_multisample);
@@ -1873,7 +1809,22 @@ namespace bgfx
}
else
{
- bx::stringPrintf(code, "#version %s\n", need130 ? "130" : profile);
+ bx::stringPrintf(code, "#version %s\n", need130 ? "130" : _options.profile.c_str());
+ glsl = 130;
+ }
+
+ if (usesInstanceID)
+ {
+ bx::stringPrintf(code
+ , "#extension GL_ARB_draw_instanced : enable\n"
+ );
+ }
+
+ if (usesGpuShader4)
+ {
+ bx::stringPrintf(code
+ , "#extension GL_EXT_gpu_shader4 : enable\n"
+ );
}
if (usesGpuShader5)
@@ -1895,8 +1846,7 @@ namespace bgfx
if (usesTextureLod)
{
- if ( (0 != metal || 130 > glsl)
- && 'f' == shaderType)
+ if ('f' == _options.shaderType)
{
ARB_shader_texture_lod = true;
bx::stringPrintf(code
@@ -1954,10 +1904,20 @@ namespace bgfx
);
}
- bx::stringPrintf(code
- , "#define bgfxShadow2D shadow2D\n"
- "#define bgfxShadow2DProj shadow2DProj\n"
- );
+ if (need130)
+ {
+ bx::stringPrintf(code
+ , "#define bgfxShadow2D(_sampler, _coord) vec4_splat(texture(_sampler, _coord))\n"
+ "#define bgfxShadow2DProj(_sampler, _coord) vec4_splat(textureProj(_sampler, _coord))\n"
+ );
+ }
+ else
+ {
+ bx::stringPrintf(code
+ , "#define bgfxShadow2D shadow2D\n"
+ "#define bgfxShadow2DProj shadow2DProj\n"
+ );
+ }
}
else
{
@@ -1967,12 +1927,12 @@ namespace bgfx
{
bx::stringPrintf(code
, "#extension GL_EXT_shader_texture_lod : enable\n"
- "#define texture2DLod texture2DLodEXT\n"
- "#define texture2DGrad texture2DGradEXT\n"
- "#define texture2DProjLod texture2DProjLodEXT\n"
- "#define texture2DProjGrad texture2DProjGradEXT\n"
- "#define textureCubeLod textureCubeLodEXT\n"
- "#define textureCubeGrad textureCubeGradEXT\n"
+ "#define texture2DLod texture2DLodEXT\n"
+ "#define texture2DGrad texture2DGradEXT\n"
+ "#define texture2DProjLod texture2DProjLodEXT\n"
+ "#define texture2DProjGrad texture2DProjGradEXT\n"
+ "#define textureCubeLod textureCubeLodEXT\n"
+ "#define textureCubeGrad textureCubeGradEXT\n"
);
}
@@ -1990,8 +1950,8 @@ namespace bgfx
{
bx::stringPrintf(code
, "#extension GL_EXT_shadow_samplers : enable\n"
- "#define shadow2D shadow2DEXT\n"
- "#define shadow2DProj shadow2DProjEXT\n"
+ "#define shadow2D shadow2DEXT\n"
+ "#define shadow2DProj shadow2DProjEXT\n"
);
}
@@ -2013,7 +1973,7 @@ namespace bgfx
{
bx::stringPrintf(code
, "#extension GL_EXT_frag_depth : enable\n"
- "#define gl_FragDepth gl_FragDepthEXT\n"
+ "#define gl_FragDepth gl_FragDepthEXT\n"
);
}
@@ -2030,74 +1990,309 @@ namespace bgfx
"#define ivec4 vec4\n"
);
}
-
- code += preprocessor.m_preprocessed;
-
- compiled = compileGLSLShader(cmdLine
- , metal ? BX_MAKEFOURCC('M', 'T', 'L', 0) : essl
- , code
- , writer
- );
}
- else if (0 != spirv)
+ else
{
- compiled = compileSPIRVShader(cmdLine
- , 0
- , preprocessor.m_preprocessed
- , writer
- );
+ bx::stringPrintf(code, "#version %d\n", glsl);
}
- else if (0 != pssl)
+
+ code += preprocessor.m_preprocessed;
+
+ if (glsl > 400)
{
- compiled = compilePSSLShader(cmdLine
- , 0
- , preprocessor.m_preprocessed
- , writer
- );
+ bx::write(_writer, uint16_t(0) );
+
+ uint32_t shaderSize = (uint32_t)code.size();
+ bx::write(_writer, shaderSize);
+ bx::write(_writer, code.c_str(), shaderSize);
+ bx::write(_writer, uint8_t(0) );
+
+ compiled = true;
}
else
{
- compiled = compileHLSLShader(cmdLine
- , d3d
- , preprocessor.m_preprocessed
- , writer
+ compiled = compileGLSLShader(_options
+ , metal ? BX_MAKEFOURCC('M', 'T', 'L', 0) : essl
+ , code
+ , _writer
);
}
-
- bx::close(writer);
- delete writer;
}
+ else if (0 != spirv)
+ {
+ compiled = compileSPIRVShader(_options
+ , 0
+ , preprocessor.m_preprocessed
+ , _writer
+ );
+ }
+ else if (0 != pssl)
+ {
+ compiled = compilePSSLShader(_options
+ , 0
+ , preprocessor.m_preprocessed
+ , _writer
+ );
+ }
+ else
+ {
+ compiled = compileHLSLShader(_options
+ , d3d
+ , preprocessor.m_preprocessed
+ , _writer
+ );
+ }
+ }
- if (compiled)
+ if (compiled)
+ {
+ if (_options.depends)
{
- if (depends)
+ std::string ofp = _options.outputFilePath + ".d";
+ bx::FileWriter writer;
+ if (bx::open(&writer, ofp.c_str() ) )
{
- std::string ofp = outFilePath;
- ofp += ".d";
- bx::CrtFileWriter writer;
- if (bx::open(&writer, ofp.c_str() ) )
- {
- writef(&writer, "%s : %s\n", outFilePath, preprocessor.m_depends.c_str() );
- bx::close(&writer);
- }
+ writef(&writer, "%s : %s\n", _options.outputFilePath.c_str(), preprocessor.m_depends.c_str() );
+ bx::close(&writer);
}
}
}
}
}
+ }
+
+ delete [] data;
+
+ return compiled;
+ }
+
+ int compileShader(int _argc, const char* _argv[])
+ {
+ bx::CommandLine cmdLine(_argc, _argv);
+
+ if (cmdLine.hasArg('v', "version") )
+ {
+ fprintf(stderr
+ , "shaderc, bgfx shader compiler tool, version %d.%d.%d.\n"
+ , BGFX_SHADERC_VERSION_MAJOR
+ , BGFX_SHADERC_VERSION_MINOR
+ , BGFX_API_VERSION
+ );
+ return bx::kExitSuccess;
+ }
+
+ if (cmdLine.hasArg('h', "help") )
+ {
+ help();
+ return bx::kExitFailure;
+ }
+
+ g_verbose = cmdLine.hasArg("verbose");
+
+ const char* filePath = cmdLine.findOption('f');
+ if (NULL == filePath)
+ {
+ help("Shader file name must be specified.");
+ return bx::kExitFailure;
+ }
+
+ const char* outFilePath = cmdLine.findOption('o');
+ if (NULL == outFilePath)
+ {
+ help("Output file name must be specified.");
+ return bx::kExitFailure;
+ }
+
+ const char* type = cmdLine.findOption('\0', "type");
+ if (NULL == type)
+ {
+ help("Must specify shader type.");
+ return bx::kExitFailure;
+ }
+
+ Options options;
+ options.inputFilePath = filePath;
+ options.outputFilePath = outFilePath;
+ options.shaderType = bx::toLower(type[0]);
+
+ options.disasm = cmdLine.hasArg('\0', "disasm");
+
+ const char* platform = cmdLine.findOption('\0', "platform");
+ if (NULL == platform)
+ {
+ platform = "";
+ }
+
+ options.platform = platform;
+
+ options.raw = cmdLine.hasArg('\0', "raw");
+
+ const char* profile = cmdLine.findOption('p', "profile");
+
+ if ( NULL != profile)
+ {
+ options.profile = profile;
+ }
+
+ { // hlsl only
+ options.debugInformation = cmdLine.hasArg('\0', "debug");
+ options.avoidFlowControl = cmdLine.hasArg('\0', "avoid-flow-control");
+ options.noPreshader = cmdLine.hasArg('\0', "no-preshader");
+ options.partialPrecision = cmdLine.hasArg('\0', "partial-precision");
+ options.preferFlowControl = cmdLine.hasArg('\0', "prefer-flow-control");
+ options.backwardsCompatibility = cmdLine.hasArg('\0', "backwards-compatibility");
+ options.warningsAreErrors = cmdLine.hasArg('\0', "Werror");
+
+ uint32_t optimization = 3;
+ if (cmdLine.hasArg(optimization, 'O') )
+ {
+ options.optimize = true;
+ options.optimizationLevel = optimization;
+ }
+ }
+
+ const char* bin2c = NULL;
+ if (cmdLine.hasArg("bin2c") )
+ {
+ bin2c = cmdLine.findOption("bin2c");
+ if (NULL == bin2c)
+ {
+ bin2c = baseName(outFilePath);
+ uint32_t len = (uint32_t)bx::strLen(bin2c);
+ char* temp = (char*)alloca(len+1);
+ for (char *out = temp; *bin2c != '\0';)
+ {
+ char ch = *bin2c++;
+ if (isalnum(ch) )
+ {
+ *out++ = ch;
+ }
+ else
+ {
+ *out++ = '_';
+ }
+ }
+ temp[len] = '\0';
+
+ bin2c = temp;
+ }
+ }
+
+ bool depends = cmdLine.hasArg("depends");
+ options.preprocessOnly = cmdLine.hasArg("preprocess");
+ const char* includeDir = cmdLine.findOption('i');
+
+ BX_TRACE("depends: %d", depends);
+ BX_TRACE("preprocessOnly: %d", options.preprocessOnly);
+ BX_TRACE("includeDir: %s", includeDir);
+
+ for (int ii = 1; NULL != includeDir; ++ii)
+ {
+ options.includeDirs.push_back(includeDir);
+ includeDir = cmdLine.findOption(ii, 'i');
+ }
+
+ std::string dir;
+ {
+ const char* base = baseName(filePath);
+
+ if (base != filePath)
+ {
+ dir.assign(filePath, base-filePath);
+ options.includeDirs.push_back(dir.c_str());
+ }
+ }
+
+ const char* defines = cmdLine.findOption("define");
+ while (NULL != defines
+ && '\0' != *defines)
+ {
+ defines = bx::strws(defines);
+ const char* eol = bx::strFind(defines, ';');
+ if (NULL == eol)
+ {
+ eol = defines + bx::strLen(defines);
+ }
+ std::string define(defines, eol);
+ options.defines.push_back(define.c_str() );
+ defines = ';' == *eol ? eol+1 : eol;
+ }
+
+ bool compiled = false;
+
+ bx::FileReader reader;
+ if (!bx::open(&reader, filePath) )
+ {
+ fprintf(stderr, "Unable to open file '%s'.\n", filePath);
+ }
+ else
+ {
+ std::string defaultVarying = dir + "varying.def.sc";
+ const char* varyingdef = cmdLine.findOption("varyingdef", defaultVarying.c_str() );
+ File attribdef(varyingdef);
+ const char* parse = attribdef.getData();
+ if (NULL != parse
+ && *parse != '\0')
+ {
+ options.dependencies.push_back(varyingdef);
+ }
+ else
+ {
+ fprintf(stderr, "ERROR: Failed to parse varying def file: \"%s\" No input/output semantics will be generated in the code!\n", varyingdef);
+ }
+
+ const size_t padding = 4096;
+ uint32_t size = (uint32_t)bx::getSize(&reader);
+ char* data = new char[size+padding+1];
+ size = (uint32_t)bx::read(&reader, data, size);
+
+ if (data[0] == '\xef'
+ && data[1] == '\xbb'
+ && data[2] == '\xbf')
+ {
+ bx::memMove(data, &data[3], size-3);
+ size -= 3;
+ }
+
+ // Compiler generates "error X3000: syntax error: unexpected end of file"
+ // if input doesn't have empty line at EOF.
+ data[size] = '\n';
+ bx::memSet(&data[size+1], 0, padding);
+ bx::close(&reader);
+
+ bx::FileWriter* writer = NULL;
+
+ if (NULL != bin2c)
+ {
+ writer = new Bin2cWriter(bin2c);
+ }
+ else
+ {
+ writer = new bx::FileWriter;
+ }
+
+ if (!bx::open(writer, outFilePath) )
+ {
+ fprintf(stderr, "Unable to open output file '%s'.", outFilePath);
+ return bx::kExitFailure;
+ }
+
+ if ( compileShader(attribdef.getData(), data, size, options, writer) )
+ compiled = true;
- delete [] data;
+ bx::close(writer);
+ delete writer;
}
if (compiled)
{
- return EXIT_SUCCESS;
+ return bx::kExitSuccess;
}
remove(outFilePath);
fprintf(stderr, "Failed to build shader.\n");
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
} // namespace bgfx
diff --git a/3rdparty/bgfx/tools/shaderc/shaderc.h b/3rdparty/bgfx/tools/shaderc/shaderc.h
index f709529377c..ef69add4ba1 100644
--- a/3rdparty/bgfx/tools/shaderc/shaderc.h
+++ b/3rdparty/bgfx/tools/shaderc/shaderc.h
@@ -61,45 +61,45 @@ namespace bgfx
#include <bx/uint32_t.h>
#include <bx/string.h>
#include <bx/hash.h>
-#include <bx/crtimpl.h>
+#include <bx/file.h>
#include "../../src/vertexdecl.h"
namespace bgfx
{
extern bool g_verbose;
- class LineReader
+ class LineReader : public bx::ReaderI
{
public:
LineReader(const char* _str)
: m_str(_str)
, m_pos(0)
- , m_size((uint32_t)strlen(_str))
+ , m_size(bx::strLen(_str) )
{
}
- std::string getLine()
+ virtual int32_t read(void* _data, int32_t _size, bx::Error* _err) override
{
- const char* str = &m_str[m_pos];
- skipLine();
+ if (m_str[m_pos] == '\0'
+ || m_pos == m_size)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_EOF, "LineReader: EOF.");
+ return 0;
+ }
+
+ uint32_t pos = m_pos;
+ const char* str = &m_str[pos];
+ const char* nl = bx::strnl(str);
+ pos += (uint32_t)(nl - str);
- const char* eol = &m_str[m_pos];
+ const char* eol = &m_str[pos];
- std::string tmp;
- tmp.assign(str, eol - str);
- return tmp;
- }
+ uint32_t size = bx::uint32_min(uint32_t(eol - str), _size);
- bool isEof() const
- {
- return m_str[m_pos] == '\0';
- }
+ bx::memCopy(_data, str, size);
+ m_pos += size;
- void skipLine()
- {
- const char* str = &m_str[m_pos];
- const char* nl = bx::strnl(str);
- m_pos += (uint32_t)(nl - str);
+ return size;
}
const char* m_str;
@@ -122,6 +122,41 @@ namespace bgfx
uint16_t regCount;
};
+ struct Options
+ {
+ Options();
+
+ void dump();
+
+ char shaderType;
+ std::string platform;
+ std::string profile;
+
+ std::string inputFilePath;
+ std::string outputFilePath;
+
+ std::vector<std::string> includeDirs;
+ std::vector<std::string> defines;
+ std::vector<std::string> dependencies;
+
+ bool disasm;
+ bool raw;
+ bool preprocessOnly;
+ bool depends;
+
+ bool debugInformation;
+
+ bool avoidFlowControl;
+ bool noPreshader;
+ bool partialPrecision;
+ bool preferFlowControl;
+ bool backwardsCompatibility;
+ bool warningsAreErrors;
+
+ bool optimize;
+ uint32_t optimizationLevel;
+ };
+
typedef std::vector<Uniform> UniformArray;
void printCode(const char* _code, int32_t _line = 0, int32_t _start = 0, int32_t _end = INT32_MAX, int32_t _column = -1);
@@ -129,10 +164,10 @@ namespace bgfx
int32_t writef(bx::WriterI* _writer, const char* _format, ...);
void writeFile(const char* _filePath, const void* _data, int32_t _size);
- bool compileGLSLShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
- bool compileHLSLShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
- bool compilePSSLShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
- bool compileSPIRVShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
+ bool compileGLSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
+ bool compileHLSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
+ bool compilePSSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
+ bool compileSPIRVShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
} // namespace bgfx
diff --git a/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp b/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp
index 10ab449c037..7d2a0a1cd60 100644
--- a/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp
+++ b/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp
@@ -8,9 +8,9 @@
namespace bgfx { namespace glsl
{
- static bool compile(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
+ static bool compile(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
{
- char ch = char(tolower(_cmdLine.findOption('\0', "type")[0]) );
+ char ch = _options.shaderType;
const glslopt_shader_type type = ch == 'f'
? kGlslOptShaderFragment
: (ch == 'c' ? kGlslOptShaderCompute : kGlslOptShaderVertex);
@@ -50,6 +50,7 @@ namespace bgfx { namespace glsl
bool found = false
|| 3 == sscanf(log, "%u:%u(%u):", &source, &line, &column)
+ || 2 == sscanf(log, "(%u,%u):", &line, &column)
;
if (found
@@ -108,21 +109,31 @@ namespace bgfx { namespace glsl
&& *parse != '\0')
{
parse = bx::strws(parse);
- const char* eol = strchr(parse, ';');
+ const char* eol = bx::strFind(parse, ';');
if (NULL != eol)
{
const char* qualifier = parse;
parse = bx::strws(bx::strword(parse) );
- if (0 == strncmp(qualifier, "attribute", 9)
- || 0 == strncmp(qualifier, "varying", 7) )
+ if (0 == bx::strCmp(qualifier, "attribute", 9)
+ || 0 == bx::strCmp(qualifier, "varying", 7)
+ || 0 == bx::strCmp(qualifier, "in", 2)
+ || 0 == bx::strCmp(qualifier, "out", 3)
+ )
{
// skip attributes and varyings.
parse = eol + 1;
continue;
}
- if (0 != strncmp(qualifier, "uniform", 7) )
+ if (0 == bx::strCmp(parse, "tmpvar", 6) )
+ {
+ // skip temporaries
+ parse = eol + 1;
+ continue;
+ }
+
+ if (0 != bx::strCmp(qualifier, "uniform", 7) )
{
// end if there is no uniform keyword.
parse = NULL;
@@ -132,9 +143,9 @@ namespace bgfx { namespace glsl
const char* precision = NULL;
const char* typen = parse;
- if (0 == strncmp(typen, "lowp", 4)
- || 0 == strncmp(typen, "mediump", 7)
- || 0 == strncmp(typen, "highp", 5) )
+ if (0 == bx::strCmp(typen, "lowp", 4)
+ || 0 == bx::strCmp(typen, "mediump", 7)
+ || 0 == bx::strCmp(typen, "highp", 5) )
{
precision = typen;
typen = parse = bx::strws(bx::strword(parse) );
@@ -145,32 +156,32 @@ namespace bgfx { namespace glsl
char uniformType[256];
parse = bx::strword(parse);
- if (0 == strncmp(typen, "sampler", 7) )
+ if (0 == bx::strCmp(typen, "sampler", 7) )
{
- strcpy(uniformType, "int");
+ bx::strCopy(uniformType, BX_COUNTOF(uniformType), "int");
}
else
{
- bx::strlcpy(uniformType, typen, parse-typen+1);
+ bx::strCopy(uniformType, int32_t(parse-typen+1), typen);
}
const char* name = parse = bx::strws(parse);
char uniformName[256];
uint8_t num = 1;
- const char* array = bx::strnstr(name, "[", eol-parse);
+ const char* array = bx::strFind(bx::StringView(name, int32_t(eol-parse) ), "[");
if (NULL != array)
{
- bx::strlcpy(uniformName, name, array-name+1);
+ bx::strCopy(uniformName, int32_t(array-name+1), name);
char arraySize[32];
- const char* end = bx::strnstr(array, "]", eol-array);
- bx::strlcpy(arraySize, array+1, end-array);
+ const char* end = bx::strFind(bx::StringView(array, int32_t(eol-array) ), "]");
+ bx::strCopy(arraySize, int32_t(end-array), array+1);
num = uint8_t(atoi(arraySize) );
}
else
{
- bx::strlcpy(uniformName, name, eol-name+1);
+ bx::strCopy(uniformName, int32_t(eol-name+1), name);
}
Uniform un;
@@ -193,43 +204,43 @@ namespace bgfx { namespace glsl
}
else
{
- const char* parse = strstr(optimizedShader, "struct xlatMtlShaderUniform {");
+ const char* parse = bx::strFind(optimizedShader, "struct xlatMtlShaderUniform {");
const char* end = parse;
if (NULL != parse)
{
- parse += strlen("struct xlatMtlShaderUniform {");
- end = strstr(parse, "};");
+ parse += bx::strLen("struct xlatMtlShaderUniform {");
+ end = bx::strFind(parse, "};");
}
while ( parse < end
&& *parse != '\0')
{
parse = bx::strws(parse);
- const char* eol = strchr(parse, ';');
+ const char* eol = bx::strFind(parse, ';');
if (NULL != eol)
{
const char* typen = parse;
char uniformType[256];
parse = bx::strword(parse);
- bx::strlcpy(uniformType, typen, parse-typen+1);
+ bx::strCopy(uniformType, int32_t(parse-typen+1), typen);
const char* name = parse = bx::strws(parse);
char uniformName[256];
uint8_t num = 1;
- const char* array = bx::strnstr(name, "[", eol-parse);
+ const char* array = bx::strFind(bx::StringView(name, int32_t(eol-parse) ), "[");
if (NULL != array)
{
- bx::strlcpy(uniformName, name, array-name+1);
+ bx::strCopy(uniformName, int32_t(array-name+1), name);
char arraySize[32];
- const char* arrayEnd = bx::strnstr(array, "]", eol-array);
- bx::strlcpy(arraySize, array+1, arrayEnd-array);
+ const char* arrayEnd = bx::strFind(bx::StringView(array, int32_t(eol-array) ), "]");
+ bx::strCopy(arraySize, int32_t(arrayEnd-array), array+1);
num = uint8_t(atoi(arraySize) );
}
else
{
- bx::strlcpy(uniformName, name, eol-name+1);
+ bx::strCopy(uniformName, int32_t(eol-name+1), name);
}
Uniform un;
@@ -275,16 +286,15 @@ namespace bgfx { namespace glsl
);
}
- uint32_t shaderSize = (uint32_t)strlen(optimizedShader);
+ uint32_t shaderSize = (uint32_t)bx::strLen(optimizedShader);
bx::write(_writer, shaderSize);
bx::write(_writer, optimizedShader, shaderSize);
uint8_t nul = 0;
bx::write(_writer, nul);
- if (_cmdLine.hasArg('\0', "disasm") )
+ if (_options.disasm )
{
- std::string disasmfp = _cmdLine.findOption('o');
- disasmfp += ".disasm";
+ std::string disasmfp = _options.outputFilePath + ".disasm";
writeFile(disasmfp.c_str(), optimizedShader, shaderSize);
}
@@ -295,9 +305,9 @@ namespace bgfx { namespace glsl
} // namespace glsl
- bool compileGLSLShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
+ bool compileGLSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
{
- return glsl::compile(_cmdLine, _version, _code, _writer);
+ return glsl::compile(_options, _version, _code, _writer);
}
} // namespace bgfx
diff --git a/3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp b/3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp
index 24bf9dc2464..f68c20c5984 100644
--- a/3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp
+++ b/3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp
@@ -172,6 +172,8 @@ namespace bgfx { namespace hlsl
{ bgfx::Attrib::Bitangent, "BITANGENT", 0 },
{ bgfx::Attrib::Color0, "COLOR", 0 },
{ bgfx::Attrib::Color1, "COLOR", 1 },
+ { bgfx::Attrib::Color2, "COLOR", 2 },
+ { bgfx::Attrib::Color3, "COLOR", 3 },
{ bgfx::Attrib::Indices, "BLENDINDICES", 0 },
{ bgfx::Attrib::Weight, "BLENDWEIGHT", 0 },
{ bgfx::Attrib::TexCoord0, "TEXCOORD", 0 },
@@ -190,7 +192,7 @@ namespace bgfx { namespace hlsl
for (uint32_t ii = 0; ii < bgfx::Attrib::Count; ++ii)
{
const RemapInputSemantic& ris = s_remapInputSemantic[ii];
- if (0 == strcmp(ris.m_name, _name)
+ if (0 == bx::strCmp(ris.m_name, _name)
&& ris.m_index == _index)
{
return ris;
@@ -520,7 +522,7 @@ namespace bgfx { namespace hlsl
, bindDesc.BindCount
);
- const char * end = strstr(bindDesc.Name, "Sampler");
+ const char * end = bx::strFind(bindDesc.Name, "Sampler");
if (NULL != end)
{
Uniform un;
@@ -543,10 +545,11 @@ namespace bgfx { namespace hlsl
return true;
}
- static bool compile(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer, bool _firstPass)
+ static bool compile(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer, bool _firstPass)
{
- const char* profile = _cmdLine.findOption('p', "profile");
- if (NULL == profile)
+ const char* profile = _options.profile.c_str();
+
+ if (profile[0] == '\0')
{
fprintf(stderr, "Error: Shader profile must be specified.\n");
return false;
@@ -555,27 +558,26 @@ namespace bgfx { namespace hlsl
s_compiler = load();
bool result = false;
- bool debug = _cmdLine.hasArg('\0', "debug");
+ bool debug = _options.debugInformation;
uint32_t flags = D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY;
flags |= debug ? D3DCOMPILE_DEBUG : 0;
- flags |= _cmdLine.hasArg('\0', "avoid-flow-control") ? D3DCOMPILE_AVOID_FLOW_CONTROL : 0;
- flags |= _cmdLine.hasArg('\0', "no-preshader") ? D3DCOMPILE_NO_PRESHADER : 0;
- flags |= _cmdLine.hasArg('\0', "partial-precision") ? D3DCOMPILE_PARTIAL_PRECISION : 0;
- flags |= _cmdLine.hasArg('\0', "prefer-flow-control") ? D3DCOMPILE_PREFER_FLOW_CONTROL : 0;
- flags |= _cmdLine.hasArg('\0', "backwards-compatibility") ? D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY : 0;
+ flags |= _options.avoidFlowControl ? D3DCOMPILE_AVOID_FLOW_CONTROL : 0;
+ flags |= _options.noPreshader ? D3DCOMPILE_NO_PRESHADER : 0;
+ flags |= _options.partialPrecision ? D3DCOMPILE_PARTIAL_PRECISION : 0;
+ flags |= _options.preferFlowControl ? D3DCOMPILE_PREFER_FLOW_CONTROL : 0;
+ flags |= _options.backwardsCompatibility ? D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY : 0;
- bool werror = _cmdLine.hasArg('\0', "Werror");
+ bool werror = _options.warningsAreErrors;
if (werror)
{
flags |= D3DCOMPILE_WARNINGS_ARE_ERRORS;
}
- uint32_t optimization = 3;
- if (_cmdLine.hasArg(optimization, 'O') )
+ if (_options.optimize )
{
- optimization = bx::uint32_min(optimization, BX_COUNTOF(s_optimizationLevelD3D11) - 1);
+ uint32_t optimization = bx::uint32_min(_options.optimizationLevel, BX_COUNTOF(s_optimizationLevelD3D11) - 1);
flags |= s_optimizationLevelD3D11[optimization];
}
else
@@ -596,8 +598,7 @@ namespace bgfx { namespace hlsl
if (debug)
{
- hlslfp = _cmdLine.findOption('o');
- hlslfp += ".hlsl";
+ hlslfp = _options.outputFilePath + ".hlsl";
writeFile(hlslfp.c_str(), _code.c_str(), (int32_t)_code.size() );
}
@@ -624,7 +625,7 @@ namespace bgfx { namespace hlsl
int32_t end = INT32_MAX;
bool found = false
- || 2 == sscanf(log, "(%u,%u):", &line, &column)
+ || 2 == sscanf(log, "(%u,%u):", &line, &column)
|| 2 == sscanf(log, " :%u:%u: ", &line, &column)
;
@@ -666,40 +667,47 @@ namespace bgfx { namespace hlsl
if (_firstPass
&& unusedUniforms.size() > 0)
{
- const size_t strLength = strlen("uniform");
+ const size_t strLength = bx::strLen("uniform");
// first time through, we just find unused uniforms and get rid of them
std::string output;
+ bx::Error err;
LineReader reader(_code.c_str() );
- while (!reader.isEof() )
+ while (err.isOk() )
{
- std::string line = reader.getLine();
- for (UniformNameList::iterator it = unusedUniforms.begin(), itEnd = unusedUniforms.end(); it != itEnd; ++it)
+ char str[4096];
+ int32_t len = bx::read(&reader, str, BX_COUNTOF(str), &err);
+ if (err.isOk() )
{
- size_t index = line.find("uniform ");
- if (index == std::string::npos)
- {
- continue;
- }
+ std::string strLine(str, len);
- // matching lines like: uniform u_name;
- // we want to replace "uniform" with "static" so that it's no longer
- // included in the uniform blob that the application must upload
- // we can't just remove them, because unused functions might still reference
- // them and cause a compile error when they're gone
- if (!!bx::findIdentifierMatch(line.c_str(), it->c_str() ) )
+ for (UniformNameList::iterator it = unusedUniforms.begin(), itEnd = unusedUniforms.end(); it != itEnd; ++it)
{
- line = line.replace(index, strLength, "static");
- unusedUniforms.erase(it);
- break;
+ size_t index = strLine.find("uniform ");
+ if (index == std::string::npos)
+ {
+ continue;
+ }
+
+ // matching lines like: uniform u_name;
+ // we want to replace "uniform" with "static" so that it's no longer
+ // included in the uniform blob that the application must upload
+ // we can't just remove them, because unused functions might still reference
+ // them and cause a compile error when they're gone
+ if (!!bx::findIdentifierMatch(strLine.c_str(), it->c_str() ) )
+ {
+ strLine = strLine.replace(index, strLength, "static");
+ unusedUniforms.erase(it);
+ break;
+ }
}
- }
- output += line;
+ output += strLine;
+ }
}
// recompile with the unused uniforms converted to statics
- return compile(_cmdLine, _version, output.c_str(), _writer, false);
+ return compile(_options, _version, output.c_str(), _writer, false);
}
}
@@ -747,7 +755,7 @@ namespace bgfx { namespace hlsl
}
{
- uint16_t shaderSize = (uint16_t)code->GetBufferSize();
+ uint32_t shaderSize = uint32_t(code->GetBufferSize() );
bx::write(_writer, shaderSize);
bx::write(_writer, code->GetBufferPointer(), shaderSize);
uint8_t nul = 0;
@@ -762,7 +770,7 @@ namespace bgfx { namespace hlsl
bx::write(_writer, size);
}
- if (_cmdLine.hasArg('\0', "disasm") )
+ if (_options.disasm )
{
ID3DBlob* disasm;
D3DDisassemble(code->GetBufferPointer()
@@ -774,8 +782,7 @@ namespace bgfx { namespace hlsl
if (NULL != disasm)
{
- std::string disasmfp = _cmdLine.findOption('o');
- disasmfp += ".disasm";
+ std::string disasmfp = _options.outputFilePath + ".disasm";
writeFile(disasmfp.c_str(), disasm->GetBufferPointer(), (uint32_t)disasm->GetBufferSize() );
disasm->Release();
@@ -797,9 +804,9 @@ namespace bgfx { namespace hlsl
} // namespace hlsl
- bool compileHLSLShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
+ bool compileHLSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
{
- return hlsl::compile(_cmdLine, _version, _code, _writer, true);
+ return hlsl::compile(_options, _version, _code, _writer, true);
}
} // namespace bgfx
@@ -808,9 +815,9 @@ namespace bgfx { namespace hlsl
namespace bgfx
{
- bool compileHLSLShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
+ bool compileHLSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
{
- BX_UNUSED(_cmdLine, _version, _code, _writer);
+ BX_UNUSED(_options, _version, _code, _writer);
fprintf(stderr, "HLSL compiler is not supported on this platform.\n");
return false;
}
diff --git a/3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp b/3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp
index fbfe4926786..87fe5584670 100644
--- a/3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp
+++ b/3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp
@@ -7,9 +7,9 @@
namespace bgfx
{
- bool compilePSSLShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
+ bool compilePSSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
{
- BX_UNUSED(_cmdLine, _version, _code, _writer);
+ BX_UNUSED(_options, _version, _code, _writer);
fprintf(stderr, "PSSL compiler is not supported.\n");
return false;
}
diff --git a/3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp b/3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp
index 517192e2078..d25bfe5386e 100644
--- a/3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp
+++ b/3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp
@@ -12,13 +12,12 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow") // warning: declaration of 'u
#include <ShaderLang.h>
#include <ResourceLimits.h>
#include <SPIRV/SPVRemapper.h>
-//#include <spirv-tools/libspirv.hpp>
-//#include <spirv-tools/optimizer.hpp>
+#include <SPIRV/GlslangToSpv.h>
BX_PRAGMA_DIAGNOSTIC_POP()
namespace bgfx
{
- static bx::CrtAllocator s_allocator;
+ static bx::DefaultAllocator s_allocator;
bx::AllocatorI* g_allocator = &s_allocator;
struct TinyStlAllocator
@@ -50,12 +49,6 @@ namespace stl = tinystl;
#include "../../src/shader_spirv.h"
-namespace glslang
-{
- void GlslangToSpv(const glslang::TIntermediate& _intermediate, std::vector<uint32_t>& _spirv);
-
-} // namespace glslang
-
namespace bgfx { namespace spirv
{
const TBuiltInResource resourceLimits =
@@ -475,6 +468,8 @@ namespace bgfx { namespace spirv
return true;
}
+#define DBG(...)
+
void disassemble(bx::WriterI* _writer, bx::ReaderSeekerI* _reader, bx::Error* _err)
{
BX_UNUSED(_writer);
@@ -495,26 +490,27 @@ namespace bgfx { namespace spirv
const SpvReflection::Id& id = it->second;
uint32_t num = uint32_t(id.members.size() );
if (0 < num
- && 0 != strcmp(id.var.name.c_str(), "gl_PerVertex") )
+ && 0 != bx::strCmp(id.var.name.c_str(), "gl_PerVertex") )
{
- printf("%3d: %s %d %s\n"
+ DBG("%3d: %s %d %s\n"
, it->first
, id.var.name.c_str()
, id.var.location
, getName(id.var.storageClass)
);
- printf("{\n");
+ DBG("{\n");
for (uint32_t ii = 0; ii < num; ++ii)
{
const SpvReflection::Id::Variable& var = id.members[ii];
- printf("\t\t%s %s %d %s\n"
+ DBG("\t\t%s %s %d %s\n"
, spvx.getTypeName(var.type).c_str()
, var.name.c_str()
, var.offset
, getName(var.storageClass)
);
+ BX_UNUSED(var);
}
- printf("}\n");
+ DBG("}\n");
}
}
@@ -523,10 +519,10 @@ namespace bgfx { namespace spirv
struct DebugOutputWriter : public bx::WriterI
{
- virtual int32_t write(const void* _data, int32_t _size, bx::Error*) BX_OVERRIDE
+ virtual int32_t write(const void* _data, int32_t _size, bx::Error*) override
{
char* out = (char*)alloca(_size + 1);
- memcpy(out, _data, _size);
+ bx::memCopy(out, _data, _size);
out[_size] = '\0';
printf("%s", out);
return _size;
@@ -549,25 +545,18 @@ namespace bgfx { namespace spirv
// fprintf(stderr, "%s\n", _message);
// }
- static bool compile(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
+ static bool compile(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
{
- BX_UNUSED(_cmdLine, _version, _code, _writer);
-
- const char* type = _cmdLine.findOption('\0', "type");
- if (NULL == type)
- {
- fprintf(stderr, "Error: Shader type must be specified.\n");
- return false;
- }
+ BX_UNUSED(_version);
glslang::InitializeProcess();
glslang::TProgram* program = new glslang::TProgram;
- EShLanguage stage = getLang(type[0]);
+ EShLanguage stage = getLang(_options.shaderType);
if (EShLangCount == stage)
{
- fprintf(stderr, "Error: Unknown shader type %s.\n", type);
+ fprintf(stderr, "Error: Unknown shader type '%c'.\n", _options.shaderType);
return false;
}
glslang::TShader* shader = new glslang::TShader(stage);
@@ -606,7 +595,7 @@ namespace bgfx { namespace spirv
int32_t start = 0;
int32_t end = INT32_MAX;
- const char* err = strstr(log, "ERROR:");
+ const char* err = bx::strFind(log, "ERROR:");
bool found = false;
@@ -653,7 +642,7 @@ namespace bgfx { namespace spirv
uint16_t count = (uint16_t)program->getNumLiveUniformVariables();
bx::write(_writer, count);
- uint32_t fragmentBit = type[0] == 'f' ? BGFX_UNIFORM_FRAGMENTBIT : 0;
+ uint32_t fragmentBit = _options.shaderType == 'f' ? BGFX_UNIFORM_FRAGMENTBIT : 0;
for (uint16_t ii = 0; ii < count; ++ii)
{
Uniform un;
@@ -752,7 +741,7 @@ namespace bgfx { namespace spirv
if (optimized)
{
- uint16_t shaderSize = (uint16_t)spirv.size()*sizeof(uint32_t);
+ uint32_t shaderSize = (uint32_t)spirv.size()*sizeof(uint32_t);
bx::write(_writer, shaderSize);
bx::write(_writer, spirv.data(), shaderSize);
uint8_t nul = 0;
@@ -771,9 +760,9 @@ namespace bgfx { namespace spirv
} // namespace spirv
- bool compileSPIRVShader(bx::CommandLine& _cmdLine, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
+ bool compileSPIRVShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer)
{
- return spirv::compile(_cmdLine, _version, _code, _writer);
+ return spirv::compile(_options, _version, _code, _writer);
}
} // namespace bgfx
diff --git a/3rdparty/bgfx/tools/texturec/texturec.cpp b/3rdparty/bgfx/tools/texturec/texturec.cpp
deleted file mode 100644
index 6fcb3f13c3d..00000000000
--- a/3rdparty/bgfx/tools/texturec/texturec.cpp
+++ /dev/null
@@ -1,887 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
-
-#include <bx/allocator.h>
-#include <bx/readerwriter.h>
-#include <bx/endian.h>
-
-#include <bgfx/bgfx.h>
-
-#include "image.h"
-
-#include <libsquish/squish.h>
-#include <etc1/etc1.h>
-#include <etc2/ProcessRGB.hpp>
-#include <nvtt/nvtt.h>
-#include <pvrtc/PvrTcEncoder.h>
-
-#include <edtaa3/edtaa3func.h>
-
-extern "C" {
-#include <iqa.h>
-}
-
-#define LODEPNG_NO_COMPILE_ENCODER
-#define LODEPNG_NO_COMPILE_DISK
-#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
-#define LODEPNG_NO_COMPILE_ERROR_TEXT
-#define LODEPNG_NO_COMPILE_ALLOCATORS
-#define LODEPNG_NO_COMPILE_CPP
-#include <lodepng/lodepng.cpp>
-
-void* lodepng_malloc(size_t _size)
-{
- return ::malloc(_size);
-}
-
-void* lodepng_realloc(void* _ptr, size_t _size)
-{
- return ::realloc(_ptr, _size);
-}
-
-void lodepng_free(void* _ptr)
-{
- ::free(_ptr);
-}
-
-BX_PRAGMA_DIAGNOSTIC_PUSH();
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wmissing-field-initializers");
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow");
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wint-to-pointer-cast")
-#define STBI_MALLOC(_size) lodepng_malloc(_size)
-#define STBI_REALLOC(_ptr, _size) lodepng_realloc(_ptr, _size)
-#define STBI_FREE(_ptr) lodepng_free(_ptr)
-#define STB_IMAGE_IMPLEMENTATION
-#include <stb/stb_image.c>
-BX_PRAGMA_DIAGNOSTIC_POP();
-
-BX_PRAGMA_DIAGNOSTIC_PUSH()
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wtype-limits")
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-parameter")
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-value")
-BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4100) // error C4100: '' : unreferenced formal parameter
-#define MINIZ_NO_STDIO
-#define TINYEXR_IMPLEMENTATION
-#include <tinyexr/tinyexr.h>
-BX_PRAGMA_DIAGNOSTIC_POP()
-
-#if 0
-# define BX_TRACE(_format, ...) fprintf(stderr, "" _format "\n", ##__VA_ARGS__)
-#endif // DEBUG
-
-#include <bx/bx.h>
-#include <bx/commandline.h>
-#include <bx/crtimpl.h>
-#include <bx/uint32_t.h>
-
-namespace bgfx
-{
- bool imageParse(ImageContainer& _imageContainer, const void* _data, uint32_t _size, void** _out)
- {
- *_out = NULL;
- bool loaded = imageParse(_imageContainer, _data, _size);
- if (!loaded)
- {
- bgfx::TextureFormat::Enum format = bgfx::TextureFormat::RGBA8;
- uint32_t bpp = 32;
-
- uint32_t width = 0;
- uint32_t height = 0;
-
- uint8_t* out = NULL;
- static uint8_t pngMagic[] = { 0x89, 0x50, 0x4E, 0x47, 0x0d, 0x0a };
- if (0 == memcmp(_data, pngMagic, sizeof(pngMagic) ) )
- {
- unsigned error;
- LodePNGState state;
- lodepng_state_init(&state);
- state.decoder.color_convert = 0;
- error = lodepng_decode(&out, &width, &height, &state, (uint8_t*)_data, _size);
-
- if (0 == error)
- {
- *_out = out;
-
- switch (state.info_raw.bitdepth)
- {
- case 8:
- switch (state.info_raw.colortype)
- {
- case LCT_GREY:
- format = bgfx::TextureFormat::R8;
- bpp = 8;
- break;
-
- case LCT_GREY_ALPHA:
- format = bgfx::TextureFormat::RG8;
- bpp = 16;
- break;
-
- case LCT_RGB:
- format = bgfx::TextureFormat::RGB8;
- bpp = 24;
- break;
-
- case LCT_RGBA:
- format = bgfx::TextureFormat::RGBA8;
- bpp = 32;
- break;
-
- case LCT_PALETTE:
- break;
- }
- break;
-
- case 16:
- switch (state.info_raw.colortype)
- {
- case LCT_GREY:
- for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
- {
- uint16_t* rgba = (uint16_t*)out + ii;
- rgba[0] = bx::toHostEndian(rgba[0], false);
- }
- format = bgfx::TextureFormat::R16;
- bpp = 16;
- break;
-
- case LCT_GREY_ALPHA:
- for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
- {
- uint16_t* rgba = (uint16_t*)out + ii*2;
- rgba[0] = bx::toHostEndian(rgba[0], false);
- rgba[1] = bx::toHostEndian(rgba[1], false);
- }
- format = bgfx::TextureFormat::RG16;
- bpp = 32;
- break;
-
- case LCT_RGBA:
- for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
- {
- uint16_t* rgba = (uint16_t*)out + ii*4;
- rgba[0] = bx::toHostEndian(rgba[0], false);
- rgba[1] = bx::toHostEndian(rgba[1], false);
- rgba[2] = bx::toHostEndian(rgba[2], false);
- rgba[3] = bx::toHostEndian(rgba[3], false);
- }
- format = bgfx::TextureFormat::RGBA16;
- bpp = 64;
- break;
-
- case LCT_RGB:
- case LCT_PALETTE:
- break;
- }
- break;
-
- default:
- break;
- }
- }
-
- lodepng_state_cleanup(&state);
- }
- else
- {
- int comp = 0;
- *_out = stbi_load_from_memory( (uint8_t*)_data, _size, (int*)&width, (int*)&height, &comp, 4);
- }
-
- loaded = NULL != *_out;
-
- if (loaded)
- {
- _imageContainer.m_data = *_out;
- _imageContainer.m_size = width*height*bpp/8;
- _imageContainer.m_offset = 0;
- _imageContainer.m_width = width;
- _imageContainer.m_height = height;
- _imageContainer.m_depth = 1;
- _imageContainer.m_numLayers = 1;
- _imageContainer.m_format = format;
- _imageContainer.m_numMips = 1;
- _imageContainer.m_hasAlpha = true;
- _imageContainer.m_cubeMap = false;
- _imageContainer.m_ktx = false;
- _imageContainer.m_ktxLE = false;
- _imageContainer.m_srgb = false;
- }
- }
-
- return loaded;
- }
-
- bool imageEncodeFromRgba8(void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint8_t _format)
- {
- TextureFormat::Enum format = TextureFormat::Enum(_format);
-
- switch (format)
- {
- case TextureFormat::BC1:
- case TextureFormat::BC2:
- case TextureFormat::BC3:
- case TextureFormat::BC4:
- case TextureFormat::BC5:
- squish::CompressImage( (const uint8_t*)_src, _width, _height, _dst
- , format == TextureFormat::BC2 ? squish::kDxt3
- : format == TextureFormat::BC3 ? squish::kDxt5
- : format == TextureFormat::BC4 ? squish::kBc4
- : format == TextureFormat::BC5 ? squish::kBc5
- : squish::kDxt1
- );
- return true;
-
- case TextureFormat::BC6H:
- nvtt::compressBC6H( (const uint8_t*)_src, _width, _height, 4, _dst);
- return true;
-
- case TextureFormat::BC7:
- nvtt::compressBC7( (const uint8_t*)_src, _width, _height, 4, _dst);
- return true;
-
- case TextureFormat::ETC1:
- etc1_encode_image( (const uint8_t*)_src, _width, _height, 4, _width*4, (uint8_t*)_dst);
- return true;
-
- case TextureFormat::ETC2:
- {
- const uint32_t blockWidth = (_width +3)/4;
- const uint32_t blockHeight = (_height+3)/4;
- const uint32_t pitch = _width*4;
- const uint8_t* src = (const uint8_t*)_src;
- uint64_t* dst = (uint64_t*)_dst;
- for (uint32_t yy = 0; yy < blockHeight; ++yy)
- {
- for (uint32_t xx = 0; xx < blockWidth; ++xx)
- {
- uint8_t block[4*4*4];
- const uint8_t* ptr = &src[(yy*pitch+xx*4)*4];
-
- for (uint32_t ii = 0; ii < 16; ++ii)
- { // BGRx
- memcpy(&block[ii*4], &ptr[(ii%4)*pitch + (ii&~3)], 4);
- bx::xchg(block[ii*4+0], block[ii*4+2]);
- }
-
- *dst++ = ProcessRGB_ETC2(block);
- }
- }
- }
- return true;
-
- case TextureFormat::PTC14:
- {
- using namespace Javelin;
- RgbaBitmap bmp;
- bmp.width = _width;
- bmp.height = _height;
- bmp.data = (uint8_t*)const_cast<void*>(_src);
- PvrTcEncoder::EncodeRgb4Bpp(_dst, bmp);
- bmp.data = NULL;
- }
- return true;
-
- case TextureFormat::PTC14A:
- {
- using namespace Javelin;
- RgbaBitmap bmp;
- bmp.width = _width;
- bmp.height = _height;
- bmp.data = (uint8_t*)const_cast<void*>(_src);
- PvrTcEncoder::EncodeRgba4Bpp(_dst, bmp);
- bmp.data = NULL;
- }
- return true;
-
- case TextureFormat::BGRA8:
- imageSwizzleBgra8(_dst, _width, _height, _width*4, _src);
- return true;
-
- case TextureFormat::RGBA8:
- memcpy(_dst, _src, _width*_height*4);
- return true;
-
- default:
- break;
- }
-
- return imageConvert(_dst, format, _src, TextureFormat::RGBA8, _width, _height);
- }
-
- bool imageEncodeFromRgba32f(bx::AllocatorI* _allocator, void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint8_t _format)
- {
- TextureFormat::Enum format = TextureFormat::Enum(_format);
-
- const uint8_t* src = (const uint8_t*)_src;
-
- switch (format)
- {
- case TextureFormat::RGBA8:
- {
- uint8_t* dst = (uint8_t*)_dst;
- for (uint32_t yy = 0; yy < _height; ++yy)
- {
- for (uint32_t xx = 0; xx < _width; ++xx)
- {
- const uint32_t offset = yy*_width + xx;
- const float* input = (const float*)&src[offset * 16];
- uint8_t* output = &dst[offset * 4];
- output[0] = uint8_t(input[0]*255.0f + 0.5f);
- output[1] = uint8_t(input[1]*255.0f + 0.5f);
- output[2] = uint8_t(input[2]*255.0f + 0.5f);
- output[3] = uint8_t(input[3]*255.0f + 0.5f);
- }
- }
- }
- return true;
-
- case TextureFormat::BC5:
- {
- uint8_t* temp = (uint8_t*)BX_ALLOC(_allocator, _width*_height*4);
- for (uint32_t yy = 0; yy < _height; ++yy)
- {
- for (uint32_t xx = 0; xx < _width; ++xx)
- {
- const uint32_t offset = yy*_width + xx;
- const float* input = (const float*)&src[offset * 16];
- uint8_t* output = &temp[offset * 4];
- output[0] = uint8_t(input[0]*255.0f + 0.5f);
- output[1] = uint8_t(input[1]*255.0f + 0.5f);
- output[2] = uint8_t(input[2]*255.0f + 0.5f);
- output[3] = uint8_t(input[3]*255.0f + 0.5f);
- }
- }
-
- imageEncodeFromRgba8(_dst, temp, _width, _height, _format);
- BX_FREE(_allocator, temp);
- }
- return true;
-
- default:
- break;
- }
-
- return imageConvert(_dst, format, _src, TextureFormat::RGBA32F, _width, _height);
- }
-
- void imageRgba32f11to01(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
- {
- const uint8_t* src = (const uint8_t*)_src;
- uint8_t* dst = (uint8_t*)_dst;
-
- for (uint32_t yy = 0; yy < _height; ++yy)
- {
- for (uint32_t xx = 0; xx < _width; ++xx)
- {
- const uint32_t offset = yy*_pitch + xx * 16;
- const float* input = (const float*)&src[offset];
- float* output = (float*)&dst[offset];
- output[0] = input[0]*0.5f + 0.5f;
- output[1] = input[1]*0.5f + 0.5f;
- output[2] = input[2]*0.5f + 0.5f;
- output[3] = input[3]*0.5f + 0.5f;
- }
- }
- }
-
- static void edtaa3(bx::AllocatorI* _allocator, double* _dst, uint32_t _width, uint32_t _height, double* _src)
- {
- const uint32_t numPixels = _width*_height;
-
- short* xdist = (short *)BX_ALLOC(_allocator, numPixels*sizeof(short) );
- short* ydist = (short *)BX_ALLOC(_allocator, numPixels*sizeof(short) );
- double* gx = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
- double* gy = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
-
- ::computegradient(_src, _width, _height, gx, gy);
- ::edtaa3(_src, gx, gy, _width, _height, xdist, ydist, _dst);
-
- for (uint32_t ii = 0; ii < numPixels; ++ii)
- {
- if (_dst[ii] < 0.0)
- {
- _dst[ii] = 0.0;
- }
- }
-
- BX_FREE(_allocator, xdist);
- BX_FREE(_allocator, ydist);
- BX_FREE(_allocator, gx);
- BX_FREE(_allocator, gy);
- }
-
- inline double min(double _a, double _b)
- {
- return _a > _b ? _b : _a;
- }
-
- inline double max(double _a, double _b)
- {
- return _a > _b ? _a : _b;
- }
-
- inline double clamp(double _val, double _min, double _max)
- {
- return max(min(_val, _max), _min);
- }
-
- void imageMakeDist(bx::AllocatorI* _allocator, void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, float _edge, const void* _src)
- {
- const uint32_t numPixels = _width*_height;
-
- double* imgIn = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
- double* outside = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
- double* inside = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
-
- for (uint32_t yy = 0; yy < _height; ++yy)
- {
- const uint8_t* src = (const uint8_t*)_src + yy*_pitch;
- double* dst = &imgIn[yy*_width];
- for (uint32_t xx = 0; xx < _width; ++xx)
- {
- dst[xx] = double(src[xx])/255.0;
- }
- }
-
- edtaa3(_allocator, outside, _width, _height, imgIn);
-
- for (uint32_t ii = 0; ii < numPixels; ++ii)
- {
- imgIn[ii] = 1.0 - imgIn[ii];
- }
-
- edtaa3(_allocator, inside, _width, _height, imgIn);
-
- BX_FREE(_allocator, imgIn);
-
- uint8_t* dst = (uint8_t*)_dst;
-
- double edgeOffset = _edge*0.5;
- double invEdge = 1.0/_edge;
-
- for (uint32_t ii = 0; ii < numPixels; ++ii)
- {
- double dist = clamp( ( (outside[ii] - inside[ii])+edgeOffset) * invEdge, 0.0, 1.0);
- dst[ii] = 255-uint8_t(dist * 255.0);
- }
-
- BX_FREE(_allocator, inside);
- BX_FREE(_allocator, outside);
- }
-
-} // namespace bgfx
-
-void help(const char* _error = NULL)
-{
- if (NULL != _error)
- {
- fprintf(stderr, "Error:\n%s\n\n", _error);
- }
-
- fprintf(stderr
- , "texturec, bgfx texture compiler tool\n"
- "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n"
- "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n"
- );
-
- fprintf(stderr
- , "Usage: texturec -f <in> -o <out> [-t <format>]\n"
-
- "\n"
- "Supported input file types:\n"
- " *.png Portable Network Graphics\n"
- " *.tga Targa\n"
- " *.dds Direct Draw Surface\n"
- " *.ktx Khronos Texture\n"
- " *.pvr PowerVR\n"
-
- "\n"
- "Options:\n"
- " -f <file path> Input file path.\n"
- " -o <file path> Output file path (file will be written in KTX format).\n"
- " -t <format> Output format type (BC1/2/3/4/5, ETC1, PVR14, etc.).\n"
- " -m, --mips Generate mip-maps.\n"
- " -n, --normalmap Input texture is normal map.\n"
- " --sdf <edge> Compute SDF texture.\n"
- " --iqa Image Quality Assesment\n"
-
- "\n"
- "For additional information, see https://github.com/bkaradzic/bgfx\n"
- );
-}
-
-int main(int _argc, const char* _argv[])
-{
- bx::CommandLine cmdLine(_argc, _argv);
-
- if (cmdLine.hasArg('h', "help") )
- {
- help();
- return EXIT_FAILURE;
- }
-
- const char* inputFileName = cmdLine.findOption('f');
- if (NULL == inputFileName)
- {
- help("Input file must be specified.");
- return EXIT_FAILURE;
- }
-
- const char* outputFileName = cmdLine.findOption('o');
- if (NULL == outputFileName)
- {
- help("Output file must be specified.");
- return EXIT_FAILURE;
- }
-
- bool sdf = false;
- double edge = 16.0;
- const char* edgeOpt = cmdLine.findOption("sdf");
- if (NULL != edgeOpt)
- {
- sdf = true;
- edge = atof(edgeOpt);
- }
- BX_UNUSED(sdf, edge);
-
- const bool mips = cmdLine.hasArg('m', "mips");
- const bool normalMap = cmdLine.hasArg('n', "normalmap");
- const bool iqa = cmdLine.hasArg('\0', "iqa");
-
- bx::CrtFileReader reader;
- if (!bx::open(&reader, inputFileName) )
- {
- help("Failed to open input file.");
- return EXIT_FAILURE;
- }
-
- bx::CrtAllocator allocator;
-
- uint32_t inputSize = (uint32_t)bx::getSize(&reader);
- uint8_t* inputData = (uint8_t*)BX_ALLOC(&allocator, inputSize);
-
- bx::read(&reader, inputData, inputSize);
- bx::close(&reader);
-
- {
- using namespace bgfx;
-
- uint8_t* decodedImage = NULL;
- ImageContainer input;
-
- bool loaded = imageParse(input, inputData, inputSize, (void**)&decodedImage);
- if (NULL != decodedImage)
- {
- BX_FREE(&allocator, inputData);
-
- inputData = (uint8_t*)input.m_data;
- inputSize = input.m_size;
- }
-
- if (loaded)
- {
- const char* type = cmdLine.findOption('t');
- bgfx::TextureFormat::Enum format = input.m_format;
-
- if (NULL != type)
- {
- format = bgfx::getFormat(type);
-
- if (!isValid(format) )
- {
- help("Invalid format specified.");
- return EXIT_FAILURE;
- }
- }
-
- ImageContainer* output = NULL;
-
- ImageMip mip;
- if (imageGetRawData(input, 0, 0, inputData, inputSize, mip) )
- {
- uint8_t numMips = mips
- ? imageGetNumMips(format, mip.m_width, mip.m_height)
- : 1
- ;
-
- void* temp = NULL;
-
- if (normalMap)
- {
- output = imageAlloc(&allocator, format, mip.m_width, mip.m_height, 0, 1, false, mips);
-
- ImageMip dstMip;
- imageGetRawData(*output, 0, 0, NULL, 0, dstMip);
-
- if (mip.m_width != dstMip.m_width
- && mip.m_height != dstMip.m_height)
- {
- printf("Invalid input image size %dx%d, it must be at least %dx%d to be converted to %s format.\n"
- , mip.m_width
- , mip.m_height
- , dstMip.m_width
- , dstMip.m_height
- , getName(format)
- );
- return EXIT_FAILURE;
- }
-
- uint32_t size = imageGetSize(
- NULL
- , dstMip.m_width
- , dstMip.m_height
- , 0
- , false
- , false
- , 1
- , TextureFormat::RGBA32F
- );
- temp = BX_ALLOC(&allocator, size);
- float* rgba = (float*)temp;
- float* rgbaDst = (float*)BX_ALLOC(&allocator, size);
-
- imageDecodeToRgba32f(&allocator
- , rgba
- , mip.m_data
- , mip.m_width
- , mip.m_height
- , mip.m_width*mip.m_bpp/8
- , mip.m_format
- );
-
- if (TextureFormat::BC5 != mip.m_format)
- {
- for (uint32_t yy = 0; yy < mip.m_height; ++yy)
- {
- for (uint32_t xx = 0; xx < mip.m_width; ++xx)
- {
- const uint32_t offset = (yy*mip.m_width + xx) * 4;
- float* inout = &rgba[offset];
- inout[0] = inout[0] * 2.0f - 1.0f;
- inout[1] = inout[1] * 2.0f - 1.0f;
- inout[2] = inout[2] * 2.0f - 1.0f;
- inout[3] = inout[3] * 2.0f - 1.0f;
- }
- }
- }
-
- imageRgba32f11to01(rgbaDst, dstMip.m_width, dstMip.m_height, dstMip.m_width*16, rgba);
- imageEncodeFromRgba32f(&allocator, output->m_data, rgbaDst, dstMip.m_width, dstMip.m_height, format);
-
- for (uint8_t lod = 1; lod < numMips; ++lod)
- {
- imageRgba32fDownsample2x2NormalMap(rgba, dstMip.m_width, dstMip.m_height, dstMip.m_width*16, rgba);
- imageRgba32f11to01(rgbaDst, dstMip.m_width, dstMip.m_height, dstMip.m_width*16, rgba);
- imageGetRawData(*output, 0, lod, output->m_data, output->m_size, dstMip);
- uint8_t* data = const_cast<uint8_t*>(dstMip.m_data);
- imageEncodeFromRgba32f(&allocator, data, rgbaDst, dstMip.m_width, dstMip.m_height, format);
- }
-
- BX_FREE(&allocator, rgbaDst);
- }
- else if (8 != getBlockInfo(input.m_format).rBits)
- {
- output = imageAlloc(&allocator, format, mip.m_width, mip.m_height, 0, 1, false, mips);
-
- ImageMip dstMip;
- imageGetRawData(*output, 0, 0, NULL, 0, dstMip);
-
- if (mip.m_width != dstMip.m_width
- && mip.m_height != dstMip.m_height)
- {
- printf("Invalid input image size %dx%d, it must be at least %dx%d to be converted to %s format.\n"
- , mip.m_width
- , mip.m_height
- , dstMip.m_width
- , dstMip.m_height
- , getName(format)
- );
- return EXIT_FAILURE;
- }
-
- uint32_t size = imageGetSize(
- NULL
- , dstMip.m_width
- , dstMip.m_height
- , 0
- , false
- , false
- , 1
- , TextureFormat::RGBA32F
- );
- temp = BX_ALLOC(&allocator, size);
- float* rgba = (float*)temp;
- float* rgbaDst = (float*)BX_ALLOC(&allocator, size);
-
- imageDecodeToRgba32f(&allocator
- , rgba
- , mip.m_data
- , mip.m_width
- , mip.m_height
- , mip.m_width*mip.m_bpp/8
- , mip.m_format
- );
- imageEncodeFromRgba32f(&allocator, output->m_data, rgba, dstMip.m_width, dstMip.m_height, format);
-
- imageRgba32fToLinear(rgba
- , mip.m_width
- , mip.m_height
- , mip.m_width*mip.m_bpp/8
- , rgba
- );
-
- for (uint8_t lod = 1; lod < numMips; ++lod)
- {
- imageRgba32fLinearDownsample2x2(rgba, dstMip.m_width, dstMip.m_height, dstMip.m_width*16, rgba);
- imageGetRawData(*output, 0, lod, output->m_data, output->m_size, dstMip);
- uint8_t* data = const_cast<uint8_t*>(dstMip.m_data);
-
- imageRgba32fToGamma(rgbaDst
- , mip.m_width
- , mip.m_height
- , mip.m_width*mip.m_bpp/8
- , rgba
- );
-
- imageEncodeFromRgba32f(&allocator, data, rgbaDst, dstMip.m_width, dstMip.m_height, format);
- }
-
- BX_FREE(&allocator, rgbaDst);
- }
- else
- {
- output = imageAlloc(&allocator, format, mip.m_width, mip.m_height, 0, 1, false, mips);
-
- ImageMip dstMip;
- imageGetRawData(*output, 0, 0, NULL, 0, dstMip);
-
- if (mip.m_width != dstMip.m_width
- && mip.m_height != dstMip.m_height)
- {
- printf("Invalid input image size %dx%d, it must be at least %dx%d to be converted to %s format.\n"
- , mip.m_width
- , mip.m_height
- , dstMip.m_width
- , dstMip.m_height
- , getName(format)
- );
- return EXIT_FAILURE;
- }
-
- uint32_t size = imageGetSize(
- NULL
- , dstMip.m_width
- , dstMip.m_height
- , 0
- , false
- , false
- , 1
- , TextureFormat::RGBA8
- );
- temp = BX_ALLOC(&allocator, size);
- memset(temp, 0, size);
- uint8_t* rgba = (uint8_t*)temp;
-
- imageDecodeToRgba8(rgba
- , mip.m_data
- , mip.m_width
- , mip.m_height
- , mip.m_width*mip.m_bpp/8
- , mip.m_format
- );
-
- void* ref = NULL;
- if (iqa)
- {
- ref = BX_ALLOC(&allocator, size);
- memcpy(ref, rgba, size);
- }
-
- imageEncodeFromRgba8(output->m_data, rgba, dstMip.m_width, dstMip.m_height, format);
-
- for (uint8_t lod = 1; lod < numMips; ++lod)
- {
- imageRgba8Downsample2x2(rgba, dstMip.m_width, dstMip.m_height, dstMip.m_width*4, rgba);
- imageGetRawData(*output, 0, lod, output->m_data, output->m_size, dstMip);
- uint8_t* data = const_cast<uint8_t*>(dstMip.m_data);
- imageEncodeFromRgba8(data, rgba, dstMip.m_width, dstMip.m_height, format);
- }
-
- if (NULL != ref)
- {
- imageDecodeToRgba8(rgba
- , output->m_data
- , mip.m_width
- , mip.m_height
- , mip.m_width*mip.m_bpp/8
- , format
- );
-
- static const iqa_ssim_args args =
- {
- 0.39f, // alpha
- 0.731f, // beta
- 1.12f, // gamma
- 187, // L
- 0.025987f, // K1
- 0.0173f, // K2
- 1 // factor
- };
-
- float result = iqa_ssim( (uint8_t*)ref
- , rgba
- , mip.m_width
- , mip.m_height
- , mip.m_width*mip.m_bpp/8
- , 0
- , &args
- );
- printf("%f\n", result);
-
- BX_FREE(&allocator, ref);
- }
- }
-
- BX_FREE(&allocator, temp);
- }
-
- if (NULL != output)
- {
- bx::CrtFileWriter writer;
- if (bx::open(&writer, outputFileName) )
- {
- if (NULL != bx::stristr(outputFileName, ".ktx") )
- {
- imageWriteKtx(&writer, *output, output->m_data, output->m_size);
- }
-
- bx::close(&writer);
- }
- else
- {
- help("Failed to open output file.");
- return EXIT_FAILURE;
- }
-
- imageFree(output);
- }
- else
- {
- help("No output generated.");
- return EXIT_FAILURE;
- }
- }
- else
- {
- help("Failed to load input file.");
- return EXIT_FAILURE;
- }
-
- BX_FREE(&allocator, inputData);
- }
-
- return EXIT_SUCCESS;
-}
diff --git a/3rdparty/bgfx/tools/texturev/common.sh b/3rdparty/bgfx/tools/texturev/common.sh
new file mode 100644
index 00000000000..c91876813ca
--- /dev/null
+++ b/3rdparty/bgfx/tools/texturev/common.sh
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include <bgfx_shader.sh>
+
+uniform vec4 u_params;
+#define u_textureLod u_params.x
+#define u_textureLayer u_params.y
+#define u_ev u_params.w
+
+vec4 toEv(vec4 _color)
+{
+ return vec4(_color.xyz * pow(2.0, u_ev), _color.w);
+}
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture.bin.h b/3rdparty/bgfx/tools/texturev/fs_texture.bin.h
index 7cec18a68cf..35a97c15ad8 100644
--- a/3rdparty/bgfx/tools/texturev/fs_texture.bin.h
+++ b/3rdparty/bgfx/tools/texturev/fs_texture.bin.h
@@ -1,94 +1,394 @@
-static const uint8_t fs_texture_glsl[315] =
+static const uint8_t fs_texture_glsl[467] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, // Color.......u_pa
- 0x72, 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x76, 0x61, // rams..........va
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x76, 0x61, // olor..........va
0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, // v_color0;.varyi
- 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x76, 0x5f, // ng highp vec2 v_
+ 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x5f, // ng highp vec3 v_
0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, // texcoord0;.unifo
- 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x5f, 0x74, // rm sampler2D s_t
- 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, // exColor;.uniform
- 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, // highp vec4 u_pa
- 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, // rams;.void main
- 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // ().{. lowp vec4
- 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // tmpvar_1;. tmp
- 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, // var_1 = texture2
- 0x44, 0x4c, 0x6f, 0x64, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // DLod (s_texCo
- 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, // lor, v_texcoord0
- 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x20, // , u_params.x);.
- 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, // gl_FragColor =
- 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x2a, 0x20, 0x76, 0x5f, 0x63, 0x6f, // (tmpvar_1 * v_co
- 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // lor0);.}...
+ 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, // rm highp vec4 u_
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // params;.uniform
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // sampler2D s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, // olor;.void main
+ 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x70, 0x20, 0x76, // ().{. mediump v
+ 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, // ec4 tmpvar_1;.
+ 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // lowp vec4 _color
+ 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x20, 0x3d, // _2;. _color_2 =
+ 0x20, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x20, 0x20, // (texture2DLod
+ 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x76, // (s_texColor, v
+ 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x75, // _texcoord0.xy, u
+ 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x20, 0x2a, 0x20, 0x76, 0x5f, 0x63, // _params.x) * v_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, // olor0);. lowp v
+ 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, // ec4 tmpvar_3;.
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, // tmpvar_3.xyz = (
+ 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x65, // _color_2.xyz * e
+ 0x78, 0x70, 0x32, 0x28, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x77, 0x29, 0x29, // xp2(u_params.w))
+ 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, // ;. tmpvar_3.w =
+ 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x74, // _color_2.w;. t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // mpvar_1 = tmpvar
+ 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, // _3;. gl_FragCol
+ 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x7d, // or = tmpvar_1;.}
+ 0x0a, 0x0a, 0x00, // ...
};
-static const uint8_t fs_texture_dx9[365] =
+static const uint8_t fs_texture_spv[4458] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x4c, 0x11, 0x00, 0x00, 0x03, 0x02, 0x23, // ams......L.....#
+ 0x07, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0xfc, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........a.....
+ 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
+ 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, // .w...t..........
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0xce, 0x14, 0x00, 0x00, 0x62, 0x67, 0x66, // n............bgf
+ 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x28, 0x73, 0x74, // xTexture2DLod(st
+ 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ruct-BgfxSampler
+ 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x66, // 2D-p1-t211;vf2;f
+ 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, // 1;.......~..._sa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // mpler.m_sampler.
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // ........._sample
+ 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, // r.m_texture.....
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, // ....._coord.....
+ 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, // ....._level.....
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, // .5...vec4_splat(
+ 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, // f1;.........._x.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x74, 0x6f, 0x45, 0x76, 0x28, 0x76, 0x66, // .....e...toEv(vf
+ 0x34, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa4, 0x11, 0x00, 0x00, 0x5f, 0x63, 0x6f, // 4;..........._co
+ 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, // lor..........@ma
+ 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, // in(vf4;vf3;vf4;.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x62, 0x25, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // .....b%..v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x7a, 0x30, 0x00, 0x00, 0x76, 0x5f, 0x74, // 0........z0..v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x92, 0x55, 0x00, // excoord0......U.
+ 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, // .gl_FragData_0_.
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, // .....a...BgfxSam
+ 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, // pler2D.......a..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, // .....m_sampler..
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, // .....a.......m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, // exture..........
+ 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, // .flattenTemp....
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, // .....s_texColorS
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, // ampler..........
+ 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, // .s_texColorTextu
+ 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, // re...........s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // exColor.m_sample
+ 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, // r........P...s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // exColor.m_textur
+ 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x24, 0x47, 0x6c, // e............$Gl
+ 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // obal............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_viewRect.....
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, // .........u_viewT
+ 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, // exel............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xb2, 0x01, 0x00, // .u_view.........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, // .....u_invView..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .............u_p
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, // roj.............
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_invProj......
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .........u_viewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, // roj.............
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .u_invViewProj..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .............u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, // odel............
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, // .u_modelView....
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .........u_model
+ 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xb2, 0x01, 0x00, // ViewProj........
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, // .....u_alphaRef4
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .............u_p
+ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // arams........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // .............bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0x6a, 0x4f, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .jO..param......
+ 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .....color......
+ 0x00, 0xa1, 0x48, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..H..param......
+ 0x00, 0x8b, 0x2b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..+..param......
+ 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..+..param......
+ 0x00, 0xc4, 0x2b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..+..param......
+ 0x00, 0x5e, 0x29, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // .^)..param......
+ 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // ..+..v_color0...
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // .....w...v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, // 0.........<..v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, // excoord0.....t..
+ 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, // .v_texcoord0....
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, // _0_.......U..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am........8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // am...........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, // FragData_0_..G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0xe4, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .........@...H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, // .#... ...H......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, // .........#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, // .#.......H......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, // .#... ...H......
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, // .........#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, // .#.......H......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, // .#.......H......
+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
+ 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, // .0...G..........
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G...B..."......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G...w..........
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .G...t..........
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G..............
+ 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, // .........!......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, // .y..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, // ..... ..........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x13, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, // .............!..
+ 0x00, 0x53, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, // .S.......y......
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0x1f, 0x01, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x7d, 0x00, 0x00, // .........!...}..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, // .....a..........
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, // . ...........a..
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, // . ...z..........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, // .;...z..........
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, // . ..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, // .;..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, // . ...{..........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, // .;...{..........
+ 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ......... ......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, // . ..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, // .;.......P......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, // .+..............
+ 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0x04, // ............@...
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .e..............
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // .....j... ......
+ 0x00, 0xe4, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, // .....e...j......
+ 0x00, 0xb2, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .............e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0xe4, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.......e...e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2f, 0x04, 0x00, // ......... .../..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2f, 0x04, 0x00, // .........;.../..
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .B.......+......
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ./.......+......
+ 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .........+......
+ 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // .........;......
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .w....... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .........;......
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .t....... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
+ 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, // .Sa..;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, // .....;........U.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, // .....;........8.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, // .....=.......!C.
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, // .....=........3.
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, // .....P...a...^ .
+ 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, // .!C...3..>......
+ 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, // .^ ..A...y....V.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, // ......V..>......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, // .....A........@.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, // .........=......
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, // ......@..>...P..
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .....=........+.
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, // .w...=........<.
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .t...>....U...+.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, // .>....8...<..9..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, // ......&.......U.
+ 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ..8......=......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, // .........>......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .........8...6..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x0b, 0x00, // .............S..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, // .7...y...~...7..
+ 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, // .........7......
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x2e, 0x12, 0x00, // .....7..........
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, // ......_..=......
+ 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, // .!A..~...V......
+ 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, // .`5......!A..=..
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......"......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, // ......G......X..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x95, 0x22, 0x00, // .....(=..`5...".
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x28, 0x3d, 0x00, // ......G......(=.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, // .8...6.......5..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, // .........7......
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x35, 0x00, 0x00, 0x3d, 0x00, 0x04, // ..........5..=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....).......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......B......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....T-......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, // .....g-......P..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x31, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xb4, 0x42, 0x00, // ......1..)....B.
+ 0x00, 0x54, 0x2d, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xee, 0x31, 0x00, // .T-..g-.......1.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, // .8...6.......e..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .........7......
+ 0x00, 0xa4, 0x11, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x58, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .........X...=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x52, 0x00, 0x00, 0xa4, 0x11, 0x00, 0x00, 0x4f, 0x00, 0x08, // .....@R......O..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x16, 0x1c, 0x00, 0x00, 0x40, 0x52, 0x00, 0x00, 0x40, 0x52, 0x00, // .........@R..@R.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, // .............A..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0x6a, 0x55, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....jU..B.../..
+ 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xdf, 0x51, 0x00, // .....=........Q.
+ 0x00, 0x6a, 0x55, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x49, 0x00, // .jU..........TI.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdf, 0x51, 0x00, // ..............Q.
+ 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x16, 0x1c, 0x00, // ................
+ 0x00, 0x54, 0x49, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x45, 0x47, 0x00, // .TI..A.......EG.
+ 0x00, 0xa4, 0x11, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........=......
+ 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x45, 0x47, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // .?>..EG..Q......
+ 0x00, 0x56, 0x44, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // .VD..........Q..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, // .....OT.........
+ 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf7, 0x23, 0x00, 0x00, 0x91, 0x1e, 0x00, // .Q........#.....
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x54, 0x00, // .....P........T.
+ 0x00, 0x56, 0x44, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0xf7, 0x23, 0x00, 0x00, 0x3f, 0x3e, 0x00, // .VD..OT...#..?>.
+ 0x00, 0xfe, 0x00, 0x02, 0x00, 0x1d, 0x54, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // ......T..8...6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, // .............}..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x62, 0x25, 0x00, 0x00, 0x37, 0x00, 0x03, // .7.......b%..7..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x7a, 0x30, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .....z0..7......
+ 0x00, 0x92, 0x55, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x5e, 0x00, 0x00, 0x3b, 0x00, 0x04, // ..U.......^..;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6a, 0x4f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....jO......;..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0xa1, 0x48, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .y....H......;..
+ 0x00, 0x13, 0x03, 0x00, 0x00, 0x8b, 0x2b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......+......;..
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......+......;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0xc4, 0x2b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......+......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5e, 0x29, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....^)......>..
+ 0x00, 0x6a, 0x4f, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // .jO......9......
+ 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x6a, 0x4f, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....5...jO..=..
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x29, 0x4c, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....)L......>..
+ 0x00, 0xa1, 0x48, 0x00, 0x00, 0x29, 0x4c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, // ..H..)L..=......
+ 0x00, 0x50, 0x1e, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8b, 0x2b, 0x00, // .P...P...>....+.
+ 0x00, 0x50, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x65, 0x5d, 0x00, // .P...=.......e].
+ 0x00, 0x7a, 0x30, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x00, // .z0..O.......>C.
+ 0x00, 0x65, 0x5d, 0x00, 0x00, 0x65, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .e]..e].........
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0x3e, 0x43, 0x00, 0x00, 0x41, 0x00, 0x06, // .>....+..>C..A..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....M:..B.../..
+ 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x22, 0x5c, 0x00, // .....=......."..
+ 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc4, 0x2b, 0x00, 0x00, 0x22, 0x5c, 0x00, // .M:..>....+.."..
+ 0x00, 0x39, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0xce, 0x14, 0x00, // .9..............
+ 0x00, 0xa1, 0x48, 0x00, 0x00, 0x8b, 0x2b, 0x00, 0x00, 0x8c, 0x2b, 0x00, 0x00, 0xc4, 0x2b, 0x00, // ..H...+...+...+.
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x41, 0x1c, 0x00, 0x00, 0x62, 0x25, 0x00, // .=.......A...b%.
+ 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfb, 0x61, 0x00, 0x00, 0x18, 0x0e, 0x00, // ..........a.....
+ 0x00, 0x41, 0x1c, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5e, 0x29, 0x00, 0x00, 0xfb, 0x61, 0x00, // .A...>...^)...a.
+ 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdb, 0x49, 0x00, 0x00, 0x65, 0x0c, 0x00, // .9........I..e..
+ 0x00, 0x5e, 0x29, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x92, 0x55, 0x00, 0x00, 0xdb, 0x49, 0x00, // .^)..>....U...I.
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .....8....
+};
+static const uint8_t fs_texture_dx9[395] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, // Color0......u_pa
- 0x72, 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x40, 0x01, 0x00, 0x03, 0xff, 0xff, // rams......@.....
- 0xfe, 0xff, 0x2f, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, // ../.CTAB........
- 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
- 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, // |...D...........
- 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // P.......`.......
- 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // ....l.......s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, // xColor..........
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // ........u_params
- 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....ps_3_0.Micro
- 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
- 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, // ader Compiler 10
- 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, // .0.10011.16384..
- 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, // Q..........?....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, // ................
- 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, // ................
- 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xd0, 0xa0, 0x01, 0x00, 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, // ................
- 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ........_.......
- 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x0f, 0x80, // ................
- 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .............
+ 0x72, 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x00, 0x03, // rams............
+ 0xff, 0xff, 0xfe, 0xff, 0x2c, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x83, 0x00, // ....,.CTAB......
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ..|...D.........
+ 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, // ..P.......`.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, // ......l.......s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, // texColor........
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // ..........u_para
+ 0x6d, 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, // ms..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, // 10.1..Q.........
+ 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, // .?..............
+ 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, // ................
+ 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xd0, 0xa0, 0x01, 0x00, // ................
+ 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x5f, 0x00, // .............._.
+ 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x0e, 0x00, // ................
+ 0x00, 0x02, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, // ................
+ 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, // ................
+ 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ...........
};
-static const uint8_t fs_texture_dx11[444] =
+static const uint8_t fs_texture_dx11[518] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
0x61, 0x6d, 0x73, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
- 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x8c, 0x01, 0x44, 0x58, 0x42, 0x43, // olor0.......DXBC
- 0xb9, 0x1c, 0x87, 0x4c, 0x82, 0x98, 0xc2, 0x74, 0x81, 0x9e, 0xa8, 0x24, 0xac, 0xbe, 0xee, 0x7b, // ...L...t...$...{
- 0x01, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
- 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, // ........ISGNl...
- 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........P.......
- 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........b.......
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // ................
- 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
- 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, // R.TEXCOORD..OSGN
- 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
- 0x53, 0x48, 0x44, 0x52, 0xb0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // SHDR....@...,...
- 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // Y...F. .........
- 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, // Z....`......X...
- 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, // .p......UU..b...
- 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, // ........b...2...
- 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....e.... ......
- 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, // h.......H.......
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, // ....F.......F~..
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, // .....`........ .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x20, 0x10, 0x00, // ........8.... ..
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // ....F.......F...
- 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // ....>.......
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x44, 0x58, // olor0.........DX
+ 0x42, 0x43, 0xbb, 0xf8, 0x2e, 0xf1, 0x8c, 0xe2, 0x59, 0x67, 0xdb, 0xb3, 0x5d, 0x86, 0xc8, 0x7f, // BC......Yg..]...
+ 0x7a, 0x5d, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // z]............,.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, // ..........ISGNl.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........b.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x03, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, // LOR.TEXCOORD..OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xf8, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3e, 0x00, // ..SHDR....@...>.
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, // ..Z....`......X.
+ 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, // ...p......UU..b.
+ 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, // ..........b...2.
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......e.... ....
+ 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x06, 0x12, 0x00, // ..h.............
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......:. .......
+ 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x10, // ..H...........F.
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, // ......F~.......`
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..8...........F.
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, // ......F.......8.
+ 0x00, 0x07, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, // ..r ............
+ 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x82, 0x20, // ..F.......6....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......:.......>.
+ 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // ......
};
-static const uint8_t fs_texture_mtl[699] =
+static const uint8_t fs_texture_mtl[808] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 v_colo
- 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x76, 0x5f, 0x74, // r0;. float2 v_t
- 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, // excoord0;.};.str
- 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade
- 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, // rOutput {. half
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, // ams..........usi
+ 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, // ng namespace met
+ 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // al;.struct xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, // tlShaderInput {.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // float4 v_color
+ 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, // 0;. float3 v_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // xcoord0;.};.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // Output {. float
0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, // 4 gl_FragColor;.
0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // };.struct xlatMt
0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, // lShaderUniform {
@@ -109,19 +409,27 @@ static const uint8_t fs_texture_mtl[699] =
0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, // _texColor [[samp
0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, // ler(0)]]).{. xl
0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, // atMtlShaderOutpu
- 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, // t _mtl_o;. half
- 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // 4 tmpvar_1;. tm
- 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, 0x73, // pvar_1 = half4(s
+ 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // t _mtl_o;. floa
+ 0x74, 0x34, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, // t4 _color_1 = 0;
+ 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x73, // . _color_1 = (s
0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // _texColor.sample
0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // (_mtlsmp_s_texCo
0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x29, 0x28, 0x5f, 0x6d, // lor, (float2)(_m
0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, // tl_i.v_texcoord0
- 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // ), level(_mtl_u.
- 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, // u_params.x)));.
- 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, // _mtl_o.gl_FragC
- 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x29, 0x28, // olor = ((half4)(
- 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x29, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // (float4)tmpvar_1
- 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // * _mtl_i.v_colo
- 0x72, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, // r0));. return _
- 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mtl_o;.}...
+ 0x2e, 0x78, 0x79, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // .xy), level(_mtl
+ 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x29, 0x20, // _u.u_params.x))
+ 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // * _mtl_i.v_color
+ 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, // 0);. float4 tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // var_2 = 0;. tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x63, 0x6f, // var_2.xyz = (_co
+ 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x70, 0x32, // lor_1.xyz * exp2
+ 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // (_mtl_u.u_params
+ 0x2e, 0x77, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // .w));. tmpvar_2
+ 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x3b, // .w = _color_1.w;
+ 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . _mtl_o.gl_Fra
+ 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // gColor = tmpvar_
+ 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // 2;. return _mtl
+ 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _o;.}...
};
+extern const uint8_t* fs_texture_pssl;
+extern const uint32_t fs_texture_pssl_size;
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture.sc b/3rdparty/bgfx/tools/texturev/fs_texture.sc
index 380888eee1f..d25cc94272f 100644
--- a/3rdparty/bgfx/tools/texturev/fs_texture.sc
+++ b/3rdparty/bgfx/tools/texturev/fs_texture.sc
@@ -5,15 +5,12 @@ $input v_texcoord0, v_color0
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
-#include <bgfx_shader.sh>
+#include "common.sh"
SAMPLER2D(s_texColor, 0);
-uniform vec4 u_params;
-#define u_textureLod u_params.x
-
void main()
{
- vec4 color = texture2DLod(s_texColor, v_texcoord0, u_textureLod);
- gl_FragColor = color * v_color0;
+ vec4 color = texture2DLod(s_texColor, v_texcoord0.xy, u_textureLod);
+ gl_FragColor = toEv(color * v_color0);
}
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_3d.bin.h b/3rdparty/bgfx/tools/texturev/fs_texture_3d.bin.h
new file mode 100644
index 00000000000..bdc9822e8df
--- /dev/null
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_3d.bin.h
@@ -0,0 +1,453 @@
+static const uint8_t fs_texture_3d_glsl[548] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xf5, 0x01, 0x00, 0x00, 0x76, 0x61, // olor..........va
+ 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
+ 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, // v_color0;.varyi
+ 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x5f, // ng highp vec3 v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, // texcoord0;.unifo
+ 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, // rm highp vec4 u_
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // params;.uniform
+ 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x33, 0x44, 0x20, 0x73, // lowp sampler3D s
+ 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, // _texColor;.void
+ 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, // main ().{. high
+ 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, // p vec3 tmpvar_1;
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x20, 0x3d, // . tmpvar_1.xy =
+ 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x3b, // v_texcoord0.xy;
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, // . tmpvar_1.z =
+ 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x65, // u_params.y;. me
+ 0x64, 0x69, 0x75, 0x6d, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // diump vec4 tmpva
+ 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // r_2;. lowp vec4
+ 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x6f, // _color_3;. _co
+ 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, // lor_3 = (texture
+ 0x33, 0x44, 0x4c, 0x6f, 0x64, 0x45, 0x58, 0x54, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // 3DLodEXT (s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2c, 0x20, // olor, tmpvar_1,
+ 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x20, 0x2a, 0x20, 0x76, 0x5f, // u_params.x) * v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, // color0);. lowp
+ 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, // vec4 tmpvar_4;.
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, // tmpvar_4.xyz =
+ 0x28, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, // (_color_3.xyz *
+ 0x65, 0x78, 0x70, 0x32, 0x28, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x77, 0x29, // exp2(u_params.w)
+ 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x77, 0x20, // );. tmpvar_4.w
+ 0x3d, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, // = _color_3.w;.
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // tmpvar_2 = tmpva
+ 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, // r_4;. gl_FragCo
+ 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, // lor = tmpvar_2;.
+ 0x7d, 0x0a, 0x0a, 0x00, // }...
+};
+static const uint8_t fs_texture_3d_spv[4562] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0xb4, 0x11, 0x00, 0x00, 0x03, 0x02, 0x23, // ams............#
+ 0x07, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, // .........Ta.....
+ 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
+ 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, // .w...t..........
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x53, 0x16, 0x00, 0x00, 0x62, 0x67, 0x66, // n........S...bgf
+ 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x44, 0x4c, 0x6f, 0x64, 0x28, 0x73, 0x74, // xTexture3DLod(st
+ 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ruct-BgfxSampler
+ 0x33, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x33, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x66, // 3D-p1-t311;vf3;f
+ 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, // 1;.......~..._sa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // mpler.m_sampler.
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // ........._sample
+ 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, // r.m_texture.....
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, // ....._coord.....
+ 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, // ....._level.....
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, // .5...vec4_splat(
+ 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, // f1;.........._x.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x74, 0x6f, 0x45, 0x76, 0x28, 0x76, 0x66, // .....e...toEv(vf
+ 0x34, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa4, 0x11, 0x00, 0x00, 0x5f, 0x63, 0x6f, // 4;..........._co
+ 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, // lor..........@ma
+ 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, // in(vf4;vf3;vf4;.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ......>..v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x76, 0x5f, 0x74, // 0.........8..v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x02, 0x44, 0x00, // excoord0......D.
+ 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, // .gl_FragData_0_.
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0x64, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, // .....d...BgfxSam
+ 0x70, 0x6c, 0x65, 0x72, 0x33, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x09, 0x00, // pler3D.......d..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, // .....m_sampler..
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, // .....d.......m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, // exture..........
+ 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, // .flattenTemp....
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, // .....s_texColorS
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, // ampler..........
+ 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, // .s_texColorTextu
+ 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, // re...........s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // exColor.m_sample
+ 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, // r........P...s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // exColor.m_textur
+ 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, // e........1...$Gl
+ 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // obal.....1......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_viewRect.....
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, // .1.......u_viewT
+ 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // exel.....1......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, // .u_view......1..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, // .....u_invView..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .....1.......u_p
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, // roj......1......
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_invProj......
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .1.......u_viewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // roj......1......
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .u_invViewProj..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .....1.......u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // odel.....1......
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, // .u_modelView....
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .1.......u_model
+ 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, // ViewProj.....1..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, // .....u_alphaRef4
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .....1.......u_p
+ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // arams........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // .............bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0x13, 0x57, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..W..param......
+ 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .....color......
+ 0x00, 0x4a, 0x50, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .JP..param......
+ 0x00, 0x34, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .43..param......
+ 0x00, 0x35, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .53..param......
+ 0x00, 0x6d, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .m3..param......
+ 0x00, 0x07, 0x31, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // ..1..param......
+ 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // ..+..v_color0...
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // .....w...v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, // 0.........<..v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, // excoord0.....t..
+ 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, // .v_texcoord0....
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, // _0_.......U..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am........8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // am...........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, // FragData_0_..G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0x2a, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .*.......@...H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .1.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#... ...H...1..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .1...........H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, // .1.......#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...1..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#.......H...1..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .1...........H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, // .1.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...1..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#... ...H...1..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .1...........H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, // .1.......#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...1..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#.......H...1..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .1...........H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, // .1.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...1..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#.......H...1..
+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, // .1.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x31, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .0...G...1......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G...B..."......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G...w..........
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .G...t..........
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G..............
+ 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, // .........!......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, // .y..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x97, 0x00, 0x00, // ..... ..........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x14, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, // .............!..
+ 0x00, 0x70, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x14, 0x03, 0x00, // .p.......y......
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0x1f, 0x01, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x7d, 0x00, 0x00, // .........!...}..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x1e, 0x00, 0x04, 0x00, 0x64, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x97, 0x00, 0x00, // .....d..........
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x64, 0x09, 0x00, // . ...........d..
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, // . ...z..........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, // .;...z..........
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, // . ..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, // .;..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, // . ...{..........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, // .;...{..........
+ 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ......... ......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, // . ..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, // .;.......P......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, // .+..............
+ 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0x04, // ............@...
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .e..............
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // .....j... ......
+ 0x00, 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, // .*...e...j......
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .1...........e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...*...e...e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xae, 0x08, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x31, 0x06, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xae, 0x08, 0x00, // .....1...;......
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .B.......+......
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ./.......+......
+ 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .........+......
+ 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .........+......
+ 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // .........;......
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .w....... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .........;......
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .t....... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
+ 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, // .Sa..;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, // .....;........U.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, // .....;........8.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, // .....=.......!C.
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x97, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, // .....=........3.
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x64, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, // .....P...d...^ .
+ 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, // .!C...3..>......
+ 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, // .^ ..A...y....V.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, // ......V..>......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x14, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, // .....A........@.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x97, 0x00, 0x00, // .........=......
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, // ......@..>...P..
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .....=........+.
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, // .w...=........<.
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .t...>....U...+.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, // .>....8...<..9..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, // ......&.......U.
+ 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ..8......=......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, // .........>......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .........8...6..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x53, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0b, 0x00, // .....S.......p..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, // .7...y...~...7..
+ 0x00, 0x14, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, // .........7......
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x2e, 0x12, 0x00, // .....7..........
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x97, 0x00, 0x00, // ......_..=......
+ 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, // .!A..~...V......
+ 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, // .`5......!A..=..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......"......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, // ......G......X..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x95, 0x22, 0x00, // .....(=..`5...".
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x28, 0x3d, 0x00, // ......G......(=.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, // .8...6.......5..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, // .........7......
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x35, 0x00, 0x00, 0x3d, 0x00, 0x04, // ..........5..=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....).......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......B......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....T-......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, // .....g-......P..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x31, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xb4, 0x42, 0x00, // ......1..)....B.
+ 0x00, 0x54, 0x2d, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xee, 0x31, 0x00, // .T-..g-.......1.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, // .8...6.......e..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .........7......
+ 0x00, 0xa4, 0x11, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x58, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .........X...=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x52, 0x00, 0x00, 0xa4, 0x11, 0x00, 0x00, 0x4f, 0x00, 0x08, // .....@R......O..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x16, 0x1c, 0x00, 0x00, 0x40, 0x52, 0x00, 0x00, 0x40, 0x52, 0x00, // .........@R..@R.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, // .............A..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0x6a, 0x55, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....jU..B.../..
+ 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xdf, 0x51, 0x00, // .....=........Q.
+ 0x00, 0x6a, 0x55, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x49, 0x00, // .jU..........TI.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdf, 0x51, 0x00, // ..............Q.
+ 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x16, 0x1c, 0x00, // ................
+ 0x00, 0x54, 0x49, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x45, 0x47, 0x00, // .TI..A.......EG.
+ 0x00, 0xa4, 0x11, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........=......
+ 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x45, 0x47, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // .?>..EG..Q......
+ 0x00, 0x56, 0x44, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // .VD..........Q..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, // .....OT.........
+ 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf7, 0x23, 0x00, 0x00, 0x91, 0x1e, 0x00, // .Q........#.....
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x54, 0x00, // .....P........T.
+ 0x00, 0x56, 0x44, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0xf7, 0x23, 0x00, 0x00, 0x3f, 0x3e, 0x00, // .VD..OT...#..?>.
+ 0x00, 0xfe, 0x00, 0x02, 0x00, 0x1d, 0x54, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // ......T..8...6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, // .............}..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x37, 0x00, 0x03, // .7........>..7..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // ......8..7......
+ 0x00, 0x02, 0x44, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf0, 0x1b, 0x00, 0x00, 0x3b, 0x00, 0x04, // ..D..........;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......W......;..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .y...JP......;..
+ 0x00, 0x14, 0x03, 0x00, 0x00, 0x34, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....43......;..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x35, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....53......;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....m3......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......1......>..
+ 0x00, 0x13, 0x57, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..W......9......
+ 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....5....W..=..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0xa1, 0x48, 0x00, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x4f, 0x00, 0x07, // ......H...8..O..
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0x70, 0x45, 0x00, 0x00, 0xa1, 0x48, 0x00, 0x00, 0xa1, 0x48, 0x00, // .....pE...H...H.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, // .........A......
+ 0x00, 0xad, 0x5c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, // .....B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf6, 0x1d, 0x00, 0x00, 0xad, 0x5c, 0x00, // .=..............
+ 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x46, 0x00, 0x00, 0x70, 0x45, 0x00, // .Q........F..pE.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd1, 0x55, 0x00, // .....Q........U.
+ 0x00, 0x70, 0x45, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, // .pE......P......
+ 0x00, 0xcd, 0x44, 0x00, 0x00, 0x81, 0x46, 0x00, 0x00, 0xd1, 0x55, 0x00, 0x00, 0xf6, 0x1d, 0x00, // ..D...F...U.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x51, 0x00, 0x00, 0x14, 0x11, 0x00, // .=.......!Q.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x21, 0x51, 0x00, 0x00, 0x3d, 0x00, 0x04, // .>...JP..!Q..=..
+ 0x00, 0x97, 0x00, 0x00, 0x00, 0x0c, 0x26, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......&..P...>..
+ 0x00, 0x34, 0x33, 0x00, 0x00, 0x0c, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x35, 0x33, 0x00, // .43...&..>...53.
+ 0x00, 0xcd, 0x44, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x3d, 0x32, 0x00, // ..D..A.......=2.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0x3d, 0x32, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....L...=2..>..
+ 0x00, 0x6d, 0x33, 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0x39, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, // .m3..L...9......
+ 0x00, 0x18, 0x0e, 0x00, 0x00, 0x53, 0x16, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x34, 0x33, 0x00, // .....S...JP..43.
+ 0x00, 0x35, 0x33, 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // .53..m3..=......
+ 0x00, 0xea, 0x23, 0x00, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..#...>.........
+ 0x00, 0x25, 0x1f, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0xea, 0x23, 0x00, 0x00, 0x3e, 0x00, 0x03, // .%........#..>..
+ 0x00, 0x07, 0x31, 0x00, 0x00, 0x25, 0x1f, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..1..%...9......
+ 0x00, 0x84, 0x51, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x3e, 0x00, 0x03, // ..Q..e....1..>..
+ 0x00, 0x02, 0x44, 0x00, 0x00, 0x84, 0x51, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, // ..D...Q......8..
+ 0x00, 0x00, // ..
+};
+static const uint8_t fs_texture_3d_dx9[367] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, // Color0......u_pa
+ 0x72, 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x03, // rams......@.....
+ 0xff, 0xff, 0xfe, 0xff, 0x2c, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x83, 0x00, // ....,.CTAB......
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ..|...D.........
+ 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, // ..P.......`.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, // ......l.......s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0d, 0x00, 0x01, 0x00, // texColor........
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // ..........u_para
+ 0x6d, 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, // ms..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, // 10.1............
+ 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x08, 0x0f, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
+ 0x03, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0c, 0x80, 0x00, 0x00, // ................
+ 0x14, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, // .._.............
+ 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, // ................
+ 0xe4, 0x90, 0x0e, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0xa0, 0x05, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ...............
+};
+static const uint8_t fs_texture_3d_dx11[562] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x44, 0x58, // olor0.........DX
+ 0x42, 0x43, 0x94, 0xc2, 0x00, 0x72, 0x53, 0x84, 0x86, 0xd2, 0xd0, 0xc1, 0x19, 0xc6, 0x64, 0xb3, // BC...rS.......d.
+ 0x01, 0x36, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // .6............,.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, // ..........ISGNl.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........b.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x03, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, // LOR.TEXCOORD..OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x24, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x49, 0x00, // ..SHDR$...@...I.
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x28, // ..Z....`......X(
+ 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, // ...p......UU..b.
+ 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, // ..........b...2.
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......e.... ....
+ 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, // ..h.......6...2.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, // ......F.......6.
+ 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, // ..B......... ...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......H.........
+ 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, // ..F.......F~....
+ 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, // ...`........ ...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, // ..F.......F.....
+ 0x00, 0x00, 0x19, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x80, // ..............:.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x20, // .........8...r
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // ......F.........
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, // ......6.... ....
+ 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, // ..:.......>.....
+ 0x10, 0x00, // ..
+};
+static const uint8_t fs_texture_3d_mtl[891] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x5d, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, // ams......]...usi
+ 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, // ng namespace met
+ 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // al;.struct xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, // tlShaderInput {.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // float4 v_color
+ 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, // 0;. float3 v_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // xcoord0;.};.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // Output {. float
+ 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, // 4 gl_FragColor;.
+ 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // };.struct xlatMt
+ 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, // lShaderUniform {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // . float4 u_para
+ 0x6d, 0x73, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, // ms;.};.fragment
+ 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
+ 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, // put xlatMtlMain
+ 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, // (xlatMtlShaderIn
+ 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, // put _mtl_i [[sta
+ 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, // ge_in]], constan
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, // t xlatMtlShaderU
+ 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, // niform& _mtl_u [
+ 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x0a, 0x20, 0x20, 0x2c, // [buffer(0)]]. ,
+ 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x3c, 0x66, 0x6c, 0x6f, // texture3d<flo
+ 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, // at> s_texColor [
+ 0x5b, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, // [texture(0)]], s
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, // ampler _mtlsmp_s
+ 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, // _texColor [[samp
+ 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, // ler(0)]]).{. xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, // atMtlShaderOutpu
+ 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // t _mtl_o;. floa
+ 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, // t3 tmpvar_1 = 0;
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x20, 0x3d, // . tmpvar_1.xy =
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // _mtl_i.v_texcoo
+ 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // rd0.xy;. tmpvar
+ 0x5f, 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, // _1.z = _mtl_u.u_
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // params.y;. floa
+ 0x74, 0x34, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, // t4 _color_2 = 0;
+ 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x73, // . _color_2 = (s
+ 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // _texColor.sample
+ 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // (_mtlsmp_s_texCo
+ 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x29, 0x28, 0x74, 0x6d, // lor, (float3)(tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, // pvar_1), level(_
+ 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, // mtl_u.u_params.x
+ 0x29, 0x29, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, // )) * _mtl_i.v_co
+ 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // lor0);. float4
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, // tmpvar_3 = 0;.
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, // tmpvar_3.xyz = (
+ 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x65, // _color_2.xyz * e
+ 0x78, 0x70, 0x32, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, // xp2(_mtl_u.u_par
+ 0x61, 0x6d, 0x73, 0x2e, 0x77, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ams.w));. tmpva
+ 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, // r_3.w = _color_2
+ 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, // .w;. _mtl_o.gl_
+ 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, // FragColor = tmpv
+ 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, // ar_3;. return _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mtl_o;.}...
+};
+extern const uint8_t* fs_texture_3d_pssl;
+extern const uint32_t fs_texture_3d_pssl_size;
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_3d.sc b/3rdparty/bgfx/tools/texturev/fs_texture_3d.sc
new file mode 100644
index 00000000000..a26526073de
--- /dev/null
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_3d.sc
@@ -0,0 +1,16 @@
+$input v_texcoord0, v_color0
+
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "common.sh"
+
+SAMPLER3D(s_texColor, 0);
+
+void main()
+{
+ vec4 color = texture3DLod(s_texColor, vec3(v_texcoord0.xy, u_textureLayer), u_textureLod);
+ gl_FragColor = toEv(color * v_color0);
+}
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_array.bin.h b/3rdparty/bgfx/tools/texturev/fs_texture_array.bin.h
index ad7cfa7c9d9..50dfbbd9f78 100644
--- a/3rdparty/bgfx/tools/texturev/fs_texture_array.bin.h
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_array.bin.h
@@ -1,80 +1,417 @@
-static const uint8_t fs_texture_array_glsl[329] =
+static const uint8_t fs_texture_array_glsl[553] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, // Color.......u_pa
- 0x72, 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x1a, 0x01, 0x00, 0x00, 0x76, 0x61, // rams..........va
- 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, // rying vec4 v_col
- 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, // or0;.varying vec
- 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, // 2 v_texcoord0;.u
- 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, // niform sampler2D
- 0x41, 0x72, 0x72, 0x61, 0x79, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // Array s_texColor
- 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, // ;.uniform vec4 u
- 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, // _params;.void ma
- 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, // in ().{. vec3 t
- 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_1;. tmpva
- 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // r_1.xy = v_texco
- 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // ord0;. tmpvar_1
- 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x79, 0x3b, // .z = u_params.y;
- 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, // . gl_FragColor
- 0x3d, 0x20, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x41, 0x72, 0x72, 0x61, // = (texture2DArra
- 0x79, 0x4c, 0x6f, 0x64, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // yLod (s_texColor
- 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, // , tmpvar_1, u_pa
- 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x20, 0x2a, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // rams.x) * v_colo
- 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r0);.}...
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xfa, 0x01, 0x00, 0x00, 0x76, 0x61, // olor..........va
+ 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
+ 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, // v_color0;.varyi
+ 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x5f, // ng highp vec3 v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, // texcoord0;.unifo
+ 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, // rm highp vec4 u_
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // params;.uniform
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x41, 0x72, 0x72, 0x61, 0x79, 0x20, 0x73, // sampler2DArray s
+ 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, // _texColor;.void
+ 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, // main ().{. high
+ 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, // p vec3 tmpvar_1;
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x20, 0x3d, // . tmpvar_1.xy =
+ 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x3b, // v_texcoord0.xy;
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, // . tmpvar_1.z =
+ 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x65, // u_params.y;. me
+ 0x64, 0x69, 0x75, 0x6d, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // diump vec4 tmpva
+ 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // r_2;. lowp vec4
+ 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x6f, // _color_3;. _co
+ 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, // lor_3 = (texture
+ 0x32, 0x44, 0x41, 0x72, 0x72, 0x61, 0x79, 0x4c, 0x6f, 0x64, 0x45, 0x58, 0x54, 0x20, 0x28, 0x73, // 2DArrayLodEXT (s
+ 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // _texColor, tmpva
+ 0x72, 0x5f, 0x31, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, // r_1, u_params.x)
+ 0x20, 0x2a, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, // * v_color0);.
+ 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // lowp vec4 tmpvar
+ 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x78, // _4;. tmpvar_4.x
+ 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x2e, 0x78, // yz = (_color_3.x
+ 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x70, 0x32, 0x28, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // yz * exp2(u_para
+ 0x6d, 0x73, 0x2e, 0x77, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // ms.w));. tmpvar
+ 0x5f, 0x34, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x2e, // _4.w = _color_3.
+ 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, // w;. tmpvar_2 =
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, // tmpvar_4;. gl_F
+ 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ragColor = tmpva
+ 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r_2;.}...
};
-static const uint8_t fs_texture_array_dx9[] = { 0 };
-static const uint8_t fs_texture_array_dx11[488] =
+static const uint8_t fs_texture_array_spv[4578] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0xc4, 0x11, 0x00, 0x00, 0x03, 0x02, 0x23, // ams............#
+ 0x07, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, // .........Ta.....
+ 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
+ 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, // .w...t..........
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x13, 0x00, 0xc8, 0x10, 0x00, 0x00, 0x62, 0x67, 0x66, // n............bgf
+ 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x41, 0x72, 0x72, 0x61, 0x79, 0x4c, // xTexture2DArrayL
+ 0x6f, 0x64, 0x28, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, // od(struct-BgfxSa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2d, 0x70, 0x31, 0x2d, // mpler2DArray-p1-
+ 0x74, 0x41, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x00, // tA211;vf3;f1;...
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // .....~..._sample
+ 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, // r.m_sampler.....
+ 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, // ....._sampler.m_
+ 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, // texture.........
+ 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x7f, 0x15, 0x00, // ._coord.........
+ 0x00, 0x5f, 0x6c, 0x6f, 0x64, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, // ._lod........5..
+ 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, // .vec4_splat(f1;.
+ 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x05, // ........._x.....
+ 0x00, 0x65, 0x0c, 0x00, 0x00, 0x74, 0x6f, 0x45, 0x76, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, // .e...toEv(vf4;..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0xa4, 0x11, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, // ........._color.
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, // .........@main(v
+ 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, // f4;vf3;vf4;.....
+ 0x00, 0x08, 0x3e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // ..>..v_color0...
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // ......8..v_texco
+ 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x02, 0x44, 0x00, 0x00, 0x67, 0x6c, 0x5f, // ord0......D..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x07, // FragData_0_.....
+ 0x00, 0x21, 0x0a, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // .!...BgfxSampler
+ 0x32, 0x44, 0x41, 0x72, 0x72, 0x61, 0x79, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x21, 0x0a, 0x00, // 2DArray......!..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, // .....m_sampler..
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, // .....!.......m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, // exture..........
+ 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, // .flattenTemp....
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, // .....s_texColorS
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, // ampler..........
+ 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, // .s_texColorTextu
+ 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, // re...........s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // exColor.m_sample
+ 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, // r........P...s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // exColor.m_textur
+ 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x24, 0x47, 0x6c, // e........1...$Gl
+ 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // obal.....1......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_viewRect.....
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, // .1.......u_viewT
+ 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // exel.....1......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, // .u_view......1..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, // .....u_invView..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .....1.......u_p
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, // roj......1......
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_invProj......
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .1.......u_viewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // roj......1......
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .u_invViewProj..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .....1.......u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // odel.....1......
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, // .u_modelView....
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .1.......u_model
+ 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, // ViewProj.....1..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, // .....u_alphaRef4
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .....1.......u_p
+ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, // arams........B..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // .............bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0x13, 0x57, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..W..param......
+ 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .....color......
+ 0x00, 0x4a, 0x50, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .JP..param......
+ 0x00, 0x34, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .43..param......
+ 0x00, 0x35, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .53..param......
+ 0x00, 0x6d, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .m3..param......
+ 0x00, 0x07, 0x31, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // ..1..param......
+ 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // ..+..v_color0...
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // .....w...v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, // 0.........<..v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, // excoord0.....t..
+ 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, // .v_texcoord0....
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, // _0_.......U..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am........8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // am...........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, // FragData_0_..G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0x2a, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .*.......@...H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .1.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#... ...H...1..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .1...........H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, // .1.......#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...1..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#.......H...1..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .1...........H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, // .1.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...1..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#... ...H...1..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .1...........H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, // .1.......#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...1..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#.......H...1..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .1...........H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, // .1.......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...1..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...1......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .#.......H...1..
+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, // .1.......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x31, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // .0...G...1......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G...B..."......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G...w..........
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .G...t..........
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G..............
+ 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, // .........!......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, // .y..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0xd6, 0x00, 0x00, // ..... ..........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x53, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // .S..............
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, // .............!..
+ 0x00, 0xa9, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x53, 0x03, 0x00, // .........y...S..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0x1f, 0x01, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x7d, 0x00, 0x00, // .........!...}..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x1e, 0x00, 0x04, 0x00, 0x21, 0x0a, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xd6, 0x00, 0x00, // .....!..........
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x21, 0x0a, 0x00, // . ...........!..
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, // . ...z..........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, // .;...z..........
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, // . ...T..........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x54, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, // .;...T..........
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, // . ...{..........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, // .;...{..........
+ 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ......... ......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x55, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, // . ...U..........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x55, 0x03, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, // .;...U...P......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, // .+..............
+ 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0x04, // ............@...
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, // .e..............
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ..... .......+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // .....j... ......
+ 0x00, 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, // .*...e...j......
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .1...........e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...*...e...e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xae, 0x08, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x31, 0x06, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xae, 0x08, 0x00, // .....1...;......
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .B.......+......
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ./.......+......
+ 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .........+......
+ 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .........+......
+ 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // .........;......
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .w....... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .........;......
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .t....... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
+ 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, // .Sa..;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, // .....;........U.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, // .....;........8.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, // .....=.......!C.
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, // .....=........3.
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x5e, 0x20, 0x00, // .....P...!...^ .
+ 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, // .!C...3..>......
+ 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, // .^ ..A...y....V.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, // ......V..>......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x53, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, // .....A...S....@.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xd6, 0x00, 0x00, // .........=......
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, // ......@..>...P..
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .....=........+.
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, // .w...=........<.
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .t...>....U...+.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, // .>....8...<..9..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, // ......&.......U.
+ 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ..8......=......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, // .........>......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .........8...6..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, // ................
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, // .7...y...~...7..
+ 0x00, 0x53, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, // .S.......7......
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x7f, 0x15, 0x00, // .....7..........
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xd6, 0x00, 0x00, // ......_..=......
+ 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, // .!A..~...V......
+ 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, // .`5......!A..=..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......"......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0x7f, 0x15, 0x00, 0x00, 0x58, 0x00, 0x07, // ......G......X..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x95, 0x22, 0x00, // .....(=..`5...".
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x28, 0x3d, 0x00, // ......G......(=.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, // .8...6.......5..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, // .........7......
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x35, 0x00, 0x00, 0x3d, 0x00, 0x04, // ..........5..=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....).......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......B......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....T-......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, // .....g-......P..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x31, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xb4, 0x42, 0x00, // ......1..)....B.
+ 0x00, 0x54, 0x2d, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xee, 0x31, 0x00, // .T-..g-.......1.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, // .8...6.......e..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .........7......
+ 0x00, 0xa4, 0x11, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x58, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .........X...=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x52, 0x00, 0x00, 0xa4, 0x11, 0x00, 0x00, 0x4f, 0x00, 0x08, // .....@R......O..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x16, 0x1c, 0x00, 0x00, 0x40, 0x52, 0x00, 0x00, 0x40, 0x52, 0x00, // .........@R..@R.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, // .............A..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0x6a, 0x55, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....jU..B.../..
+ 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xdf, 0x51, 0x00, // .....=........Q.
+ 0x00, 0x6a, 0x55, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x49, 0x00, // .jU..........TI.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdf, 0x51, 0x00, // ..............Q.
+ 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x16, 0x1c, 0x00, // ................
+ 0x00, 0x54, 0x49, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x45, 0x47, 0x00, // .TI..A.......EG.
+ 0x00, 0xa4, 0x11, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........=......
+ 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x45, 0x47, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // .?>..EG..Q......
+ 0x00, 0x56, 0x44, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // .VD..........Q..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, // .....OT.........
+ 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf7, 0x23, 0x00, 0x00, 0x91, 0x1e, 0x00, // .Q........#.....
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x54, 0x00, // .....P........T.
+ 0x00, 0x56, 0x44, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0xf7, 0x23, 0x00, 0x00, 0x3f, 0x3e, 0x00, // .VD..OT...#..?>.
+ 0x00, 0xfe, 0x00, 0x02, 0x00, 0x1d, 0x54, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // ......T..8...6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, // .............}..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x37, 0x00, 0x03, // .7........>..7..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // ......8..7......
+ 0x00, 0x02, 0x44, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf0, 0x1b, 0x00, 0x00, 0x3b, 0x00, 0x04, // ..D..........;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......W......;..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .y...JP......;..
+ 0x00, 0x53, 0x03, 0x00, 0x00, 0x34, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .S...43......;..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x35, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....53......;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....m3......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......1......>..
+ 0x00, 0x13, 0x57, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..W......9......
+ 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....5....W..=..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0xa1, 0x48, 0x00, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x4f, 0x00, 0x07, // ......H...8..O..
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0x70, 0x45, 0x00, 0x00, 0xa1, 0x48, 0x00, 0x00, 0xa1, 0x48, 0x00, // .....pE...H...H.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, // .........A......
+ 0x00, 0xad, 0x5c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0d, 0x0a, 0x00, // .....B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf6, 0x1d, 0x00, 0x00, 0xad, 0x5c, 0x00, // .=..............
+ 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x46, 0x00, 0x00, 0x70, 0x45, 0x00, // .Q........F..pE.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd1, 0x55, 0x00, // .....Q........U.
+ 0x00, 0x70, 0x45, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, // .pE......P......
+ 0x00, 0xcd, 0x44, 0x00, 0x00, 0x81, 0x46, 0x00, 0x00, 0xd1, 0x55, 0x00, 0x00, 0xf6, 0x1d, 0x00, // ..D...F...U.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x51, 0x00, 0x00, 0x14, 0x11, 0x00, // .=.......!Q.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x21, 0x51, 0x00, 0x00, 0x3d, 0x00, 0x04, // .>...JP..!Q..=..
+ 0x00, 0xd6, 0x00, 0x00, 0x00, 0x0c, 0x26, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......&..P...>..
+ 0x00, 0x34, 0x33, 0x00, 0x00, 0x0c, 0x26, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x35, 0x33, 0x00, // .43...&..>...53.
+ 0x00, 0xcd, 0x44, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x3d, 0x32, 0x00, // ..D..A.......=2.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0x3d, 0x32, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....L...=2..>..
+ 0x00, 0x6d, 0x33, 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0x39, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, // .m3..L...9......
+ 0x00, 0x18, 0x0e, 0x00, 0x00, 0xc8, 0x10, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x34, 0x33, 0x00, // .........JP..43.
+ 0x00, 0x35, 0x33, 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // .53..m3..=......
+ 0x00, 0xea, 0x23, 0x00, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..#...>.........
+ 0x00, 0x25, 0x1f, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0xea, 0x23, 0x00, 0x00, 0x3e, 0x00, 0x03, // .%........#..>..
+ 0x00, 0x07, 0x31, 0x00, 0x00, 0x25, 0x1f, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..1..%...9......
+ 0x00, 0x84, 0x51, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x3e, 0x00, 0x03, // ..Q..e....1..>..
+ 0x00, 0x02, 0x44, 0x00, 0x00, 0x84, 0x51, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, // ..D...Q......8..
+ 0x00, 0x00, // ..
+};
+static const uint8_t fs_texture_array_dx9[395] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, // Color0......u_pa
+ 0x72, 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x00, 0x03, // rams............
+ 0xff, 0xff, 0xfe, 0xff, 0x2c, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x83, 0x00, // ....,.CTAB......
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ..|...D.........
+ 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, // ..P.......`.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, // ......l.......s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, // texColor........
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // ..........u_para
+ 0x6d, 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, // ms..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, // 10.1..Q.........
+ 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, // .?..............
+ 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, // ................
+ 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xd0, 0xa0, 0x01, 0x00, // ................
+ 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x5f, 0x00, // .............._.
+ 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x0e, 0x00, // ................
+ 0x00, 0x02, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, // ................
+ 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, // ................
+ 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ...........
+};
+static const uint8_t fs_texture_array_dx11[562] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
0x61, 0x6d, 0x73, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
- 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x01, 0x44, 0x58, 0x42, 0x43, // olor0.......DXBC
- 0x81, 0x20, 0x2f, 0xf0, 0x22, 0x82, 0x15, 0xc5, 0x5c, 0x50, 0xb5, 0xdb, 0x71, 0x0a, 0x7d, 0x9a, // . /."....P..q.}.
- 0x01, 0x00, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
- 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, // ........ISGNl...
- 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........P.......
- 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........b.......
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // ................
- 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
- 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, // R.TEXCOORD..OSGN
- 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
- 0x53, 0x48, 0x44, 0x52, 0xdc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, // SHDR....@...7...
- 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // Y...F. .........
- 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x40, 0x00, 0x04, // Z....`......X@..
- 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, // .p......UU..b...
- 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, // ........b...2...
- 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....e.... ......
- 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, // h.......6...2...
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, // ....F.......6...
- 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // B......... .....
- 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....H...........
- 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // F.......F~......
- 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .`........ .....
- 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....8.... ......
- 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // F.......F.......
- 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // >.......
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x44, 0x58, // olor0.........DX
+ 0x42, 0x43, 0x68, 0x4c, 0x12, 0x3a, 0x9d, 0xa5, 0x3e, 0x99, 0x56, 0x28, 0xfa, 0x22, 0xcf, 0x30, // BChL.:..>.V(.".0
+ 0xa5, 0x58, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // .X............,.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, // ..........ISGNl.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........b.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x03, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, // LOR.TEXCOORD..OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x24, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x49, 0x00, // ..SHDR$...@...I.
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x40, // ..Z....`......X@
+ 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, // ...p......UU..b.
+ 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, // ..........b...2.
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......e.... ....
+ 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, // ..h.......6...2.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, // ......F.......6.
+ 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x80, 0x20, 0x00, 0x00, 0x00, // ..B......... ...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......H.........
+ 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, // ..F.......F~....
+ 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, // ...`........ ...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, // ..F.......F.....
+ 0x00, 0x00, 0x19, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x80, // ..............:.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x20, // .........8...r
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // ......F.........
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, // ......6.... ....
+ 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, // ..:.......>.....
+ 0x10, 0x00, // ..
};
-static const uint8_t fs_texture_array_mtl[811] =
+static const uint8_t fs_texture_array_mtl[924] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0x1c, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 v_colo
- 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x76, 0x5f, 0x74, // r0;. float2 v_t
- 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, // excoord0;.};.str
- 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade
- 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, // rOutput {. half
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x7e, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, // ams......~...usi
+ 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, // ng namespace met
+ 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // al;.struct xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, // tlShaderInput {.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // float4 v_color
+ 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, // 0;. float3 v_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // xcoord0;.};.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // Output {. float
0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, // 4 gl_FragColor;.
0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // };.struct xlatMt
0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, // lShaderUniform {
0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // . float4 u_para
- 0x6d, 0x73, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, // ms;.};.fragment
+ 0x6d, 0x73, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, // ms;.};.fragment
0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
- 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, // put xlatMtlMain
+ 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, // put xlatMtlMain
0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, // (xlatMtlShaderIn
0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, // put _mtl_i [[sta
0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, // ge_in]], constan
@@ -85,29 +422,37 @@ static const uint8_t fs_texture_array_mtl[811] =
0x61, 0x79, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ay<float> s_texC
0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, // olor [[texture(0
0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, // )]], sampler _mt
- 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, // lsmp_s_texColor
+ 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, // lsmp_s_texColor
0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, // [[sampler(0)]]).
0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // {. xlatMtlShade
0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, // rOutput _mtl_o;.
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // float3 tmpvar_
- 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, // 1;. tmpvar_1.xy
- 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // = _mtl_i.v_texc
- 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // oord0;. tmpvar_
- 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, // 1.z = _mtl_u.u_p
- 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, // arams.y;. half4
- 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // tmpvar_2;. tmp
- 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, 0x73, 0x5f, // var_2 = half4(s_
- 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, // texColor.sample(
- 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // _mtlsmp_s_texCol
- 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x29, 0x28, 0x28, 0x74, 0x6d, // or, (float2)((tm
- 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x2e, 0x78, 0x79, 0x29, 0x2c, 0x20, 0x28, 0x75, 0x69, // pvar_1).xy), (ui
- 0x6e, 0x74, 0x29, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x2e, 0x7a, // nt)((tmpvar_1).z
- 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // ), level(_mtl_u.
- 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, // u_params.x)));.
- 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, // _mtl_o.gl_FragC
- 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x29, 0x28, // olor = ((half4)(
- 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x29, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // (float4)tmpvar_2
- 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // * _mtl_i.v_colo
- 0x72, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, // r0));. return _
- 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mtl_o;.}...
+ 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 1 = 0;. tmpvar_
+ 0x31, 0x2e, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, // 1.xy = _mtl_i.v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x20, 0x20, // texcoord0.xy;.
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, // tmpvar_1.z = _mt
+ 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x79, 0x3b, 0x0a, // l_u.u_params.y;.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, // float4 _color_
+ 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, // 2 = 0;. _color_
+ 0x32, 0x20, 0x3d, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, // 2 = (s_texColor.
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, // sample(_mtlsmp_s
+ 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, // _texColor, (floa
+ 0x74, 0x32, 0x29, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x2e, 0x78, // t2)((tmpvar_1).x
+ 0x79, 0x29, 0x2c, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x29, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, // y), (uint)((tmpv
+ 0x61, 0x72, 0x5f, 0x31, 0x29, 0x2e, 0x7a, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, // ar_1).z), level(
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, // _mtl_u.u_params.
+ 0x78, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, // x)) * _mtl_i.v_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // olor0);. float4
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_3 = 0;.
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, // tmpvar_3.xyz =
+ 0x28, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, // (_color_2.xyz *
+ 0x65, 0x78, 0x70, 0x32, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, // exp2(_mtl_u.u_pa
+ 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x77, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // rams.w));. tmpv
+ 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, // ar_3.w = _color_
+ 0x32, 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, // 2.w;. _mtl_o.gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, // _FragColor = tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, // var_3;. return
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _mtl_o;.}...
};
+extern const uint8_t* fs_texture_array_pssl;
+extern const uint32_t fs_texture_array_pssl_size;
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_array.sc b/3rdparty/bgfx/tools/texturev/fs_texture_array.sc
index 4129bed059f..8649b8b32c3 100644
--- a/3rdparty/bgfx/tools/texturev/fs_texture_array.sc
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_array.sc
@@ -5,16 +5,12 @@ $input v_texcoord0, v_color0
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
-#include <bgfx_shader.sh>
+#include "common.sh"
SAMPLER2DARRAY(s_texColor, 0);
-uniform vec4 u_params;
-#define u_textureLod u_params.x
-#define u_textureLayer u_params.y
-
void main()
{
- vec4 color = texture2DArrayLod(s_texColor, vec3(v_texcoord0, u_textureLayer), u_textureLod);
- gl_FragColor = color * v_color0;
+ vec4 color = texture2DArrayLod(s_texColor, vec3(v_texcoord0.xy, u_textureLayer), u_textureLod);
+ gl_FragColor = toEv(color * v_color0);
}
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_cube.bin.h b/3rdparty/bgfx/tools/texturev/fs_texture_cube.bin.h
index 9b81cfc1b23..778f93fe009 100644
--- a/3rdparty/bgfx/tools/texturev/fs_texture_cube.bin.h
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_cube.bin.h
@@ -1,187 +1,529 @@
-static const uint8_t fs_texture_cube_glsl[562] =
+static const uint8_t fs_texture_cube_glsl[714] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x03, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x05, 0x75, 0x5f, 0x6d, 0x74, // Color.......u_mt
- 0x78, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // x.......u_params
- 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0xf7, 0x01, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, // ..........varyin
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x03, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x05, 0x75, 0x5f, 0x6d, 0x74, 0x78, // olor.......u_mtx
+ 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, // ..........varyin
0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x76, 0x5f, 0x63, // g highp vec4 v_c
0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // olor0;.varying h
- 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // ighp vec2 v_texc
- 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6c, // oord0;.uniform l
- 0x6f, 0x77, 0x70, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x20, // owp samplerCube
- 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, // s_texColor;.unif
- 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, // orm highp mat4 u
- 0x5f, 0x6d, 0x74, 0x78, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, // _mtx;.uniform hi
- 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // ghp vec4 u_param
- 0x73, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, // s;.void main ().
+ 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // ighp vec3 v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, // oord0;.uniform h
+ 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // ighp vec4 u_para
+ 0x6d, 0x73, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6c, 0x6f, 0x77, 0x70, // ms;.uniform lowp
+ 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x20, 0x73, 0x5f, 0x74, // samplerCube s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, // exColor;.uniform
+ 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x74, // highp mat4 u_mt
+ 0x78, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, // x;.void main ().
0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, // {. highp vec3 t
0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_1;. tmpva
0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // r_1.z = 1.0;. t
0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x28, // mpvar_1.xy = (((
- 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x2a, 0x20, 0x32, 0x2e, // v_texcoord0 * 2.
- 0x30, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x32, // 0) - 1.0) * vec2
- 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, // (1.0, -1.0));.
- 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // highp vec4 tmpva
- 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, // r_2;. tmpvar_2.
- 0x77, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // w = 0.0;. tmpva
- 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // r_2.xyz = tmpvar
- 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, // _1;. lowp vec4
- 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // tmpvar_3;. tmpv
- 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, // ar_3 = textureCu
- 0x62, 0x65, 0x4c, 0x6f, 0x64, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // beLod (s_texC
- 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, // olor, normalize(
- 0x28, 0x75, 0x5f, 0x6d, 0x74, 0x78, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // (u_mtx * tmpvar_
- 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // 2).xyz), u_param
- 0x73, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, // s.x);. gl_FragC
- 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, // olor = (tmpvar_3
- 0x20, 0x2a, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, // * v_color0);.}.
- 0x0a, 0x00, // ..
+ 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x20, 0x2a, // v_texcoord0.xy *
+ 0x20, 0x32, 0x2e, 0x30, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x76, // 2.0) - 1.0) * v
+ 0x65, 0x63, 0x32, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x3b, // ec2(1.0, -1.0));
+ 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, // . highp vec4 tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // pvar_2;. tmpvar
+ 0x5f, 0x32, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // _2.w = 0.0;. tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, // pvar_2.xyz = tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x70, // var_1;. mediump
+ 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, // vec4 tmpvar_3;.
+ 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x5f, 0x63, 0x6f, 0x6c, // lowp vec4 _col
+ 0x6f, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x34, // or_4;. _color_4
+ 0x20, 0x3d, 0x20, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x4c, // = (textureCubeL
+ 0x6f, 0x64, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, // od (s_texColo
+ 0x72, 0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x28, 0x75, 0x5f, // r, normalize((u_
+ 0x6d, 0x74, 0x78, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x2e, // mtx * tmpvar_2).
+ 0x78, 0x79, 0x7a, 0x29, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, // xyz), u_params.x
+ 0x29, 0x20, 0x2a, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x20, // ) * v_color0);.
+ 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // lowp vec4 tmpva
+ 0x72, 0x5f, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x2e, // r_5;. tmpvar_5.
+ 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x34, 0x2e, // xyz = (_color_4.
+ 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x70, 0x32, 0x28, 0x75, 0x5f, 0x70, 0x61, 0x72, // xyz * exp2(u_par
+ 0x61, 0x6d, 0x73, 0x2e, 0x77, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ams.w));. tmpva
+ 0x72, 0x5f, 0x35, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x34, // r_5.w = _color_4
+ 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, // .w;. tmpvar_3 =
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, // tmpvar_5;. gl_
+ 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, // FragColor = tmpv
+ 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // ar_3;.}...
};
-static const uint8_t fs_texture_cube_dx9[505] =
+static const uint8_t fs_texture_cube_spv[5050] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x03, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x05, 0x75, 0x5f, 0x6d, 0x74, 0x78, // FSH........u_mtx
+ 0x14, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, // .......u_params.
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0x90, 0x13, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, // ...........#....
+ 0x00, 0x02, 0x00, 0x08, 0x00, 0xae, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, // ......b.........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, // .............GLS
+ 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, // L.std.450.......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, // ................
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x77, 0x0e, 0x00, // .....main....w..
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x1f, 0x16, 0x00, // .t..............
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, // ................
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x05, 0x00, 0x11, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x54, 0x65, 0x78, // .........bgfxTex
+ 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x4c, 0x6f, 0x64, 0x28, 0x73, 0x74, 0x72, 0x75, // tureCubeLod(stru
+ 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, // ct-BgfxSamplerCu
+ 0x62, 0x65, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x66, // be-p1-tC11;vf3;f
+ 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, // 1;.......~..._sa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // mpler.m_sampler.
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // ........._sample
+ 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, // r.m_texture.....
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, // ....._coord.....
+ 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, // ....._level.....
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, // .5...vec4_splat(
+ 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, // f1;.........._x.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x74, 0x6f, 0x45, 0x76, 0x28, 0x76, 0x66, // .....e...toEv(vf
+ 0x34, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa4, 0x11, 0x00, 0x00, 0x5f, 0x63, 0x6f, // 4;..........._co
+ 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, // lor..........@ma
+ 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, // in(vf4;vf3;vf4;.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ......>..v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x76, 0x5f, 0x74, // 0.........8..v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x02, 0x44, 0x00, // excoord0......D.
+ 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, // .gl_FragData_0_.
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, // .....g...BgfxSam
+ 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, // plerCube.....g..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, // .....m_sampler..
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, // .....g.......m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, // exture..........
+ 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, // .flattenTemp....
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, // .....s_texColorS
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, // ampler..........
+ 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, // .s_texColorTextu
+ 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, // re...........s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // exColor.m_sample
+ 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, // r........P...s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // exColor.m_textur
+ 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x24, 0x47, 0x6c, // e............$Gl
+ 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // obal............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_viewRect.....
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, // .........u_viewT
+ 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, // exel............
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x0b, 0x00, // .u_view.........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, // .....u_invView..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .............u_p
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, // roj.............
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // .u_invProj......
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .........u_viewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, // roj.............
+ 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .u_invViewProj..
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .............u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, // odel............
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, // .u_modelView....
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .........u_model
+ 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x0b, 0x00, // ViewProj........
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, // .....u_alphaRef4
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, // .............u_p
+ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, // arams...........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x74, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, // .....u_mtx......
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, // .B..............
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, // .bgfx_VoidFrag..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x13, 0x57, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // ......W..param..
+ 0x00, 0x05, 0x00, 0x03, 0x00, 0x46, 0x17, 0x00, 0x00, 0x64, 0x69, 0x72, 0x00, 0x05, 0x00, 0x04, // .....F...dir....
+ 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .....color......
+ 0x00, 0x34, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .43..param......
+ 0x00, 0x35, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .53..param......
+ 0x00, 0x36, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .63..param......
+ 0x00, 0x6d, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .m3..param......
+ 0x00, 0x07, 0x31, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // ..1..param......
+ 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // ..+..v_color0...
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // .....w...v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, // 0.........<..v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, // excoord0.....t..
+ 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, // .v_texcoord0....
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, // _0_.......U..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am........8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // am...........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, // FragData_0_..G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0x2a, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .*.......@...H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, // .#... ...H......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, // .........#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, // .#.......H......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, // .#... ...H......
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, // .........#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, // .#.......H......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, // .........#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H..............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, // .#.......H......
+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, // .........#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...........#..
+ 0x00, 0x30, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x0d, 0x00, 0x00, // .0...H..........
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x0d, 0x00, 0x00, // .....H..........
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x40, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xa4, 0x0b, 0x00, // .#...@...H......
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, // .............G..
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, // .........G...B..
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, // .".......G...w..
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, // .........G...t..
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, // .........G......
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, // .!..............
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ...y......
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x19, 0x00, 0x09, 0x00, 0x98, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x98, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x74, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, // .....!...t......
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x15, 0x03, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, // .y..............
+ 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, // .!..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // . ..............
+ 0x00, 0x21, 0x00, 0x04, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, // .!..............
+ 0x00, 0x21, 0x00, 0x06, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, // .!...}..........
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x67, 0x09, 0x00, // .............g..
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, // ......... ...!..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, // .....g... ...z..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, // .........;...z..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, // ......... ......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, // .........;......
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, // ......... ...{..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, // .........;...{..
+ 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // . .......+......
+ 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x03, 0x00, // ......... ......
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x03, 0x00, // .........;......
+ 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .P.......+......
+ 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, // ................
+ 0x00, 0x98, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // ....@....e......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, // .....+.......j..
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, // . .......*...e..
+ 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x10, 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, // .j..............
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .....e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2a, 0x07, 0x00, // .e...e...e...*..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .e...e..........
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5e, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, // .e... ...^......
+ 0x00, 0xa4, 0x0b, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5e, 0x02, 0x00, 0x00, 0x42, 0x13, 0x00, // .....;...^...B..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....+......./..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, // .....+..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x41, 0x03, 0x00, // ....?+.......A..
+ 0x00, 0x00, 0x00, 0x80, 0xbf, 0x2c, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // .....,..........
+ 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .....A...+......
+ 0x00, 0x32, 0x0a, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, // .2....... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // .....e...+......
+ 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // ......... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // .........;......
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .w....... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .........;......
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .t....... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
+ 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, // .Sa..;...!......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, // .....;........U.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, // .....;........8.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, // .....=.......!C.
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, // .....=........3.
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x67, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, // .....P...g...^ .
+ 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, // .!C...3..>......
+ 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, // .^ ..A...y....V.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, // ......V..>......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, // .....A........@.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, // .........=......
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, // ......@..>...P..
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .....=........+.
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, // .w...=........<.
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .t...>....U...+.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, // .>....8...<..9..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, // ......&.......U.
+ 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ..8......=......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, // .........>......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .........8...6..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x0b, 0x00, // .............t..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, // .7...y...~...7..
+ 0x00, 0x15, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, // .........7......
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x2e, 0x12, 0x00, // .....7..........
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, // ......_..=......
+ 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, // .!A..~...V......
+ 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, // .`5......!A..=..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......"......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, // ......G......X..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x95, 0x22, 0x00, // .....(=..`5...".
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x28, 0x3d, 0x00, // ......G......(=.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, // .8...6.......5..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, // .........7......
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x35, 0x00, 0x00, 0x3d, 0x00, 0x04, // ..........5..=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....).......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......B......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....T-......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, // .....g-......P..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x31, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xb4, 0x42, 0x00, // ......1..)....B.
+ 0x00, 0x54, 0x2d, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xee, 0x31, 0x00, // .T-..g-.......1.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, // .8...6.......e..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .........7......
+ 0x00, 0xa4, 0x11, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x58, 0x2e, 0x00, 0x00, 0x3d, 0x00, 0x04, // .........X...=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x52, 0x00, 0x00, 0xa4, 0x11, 0x00, 0x00, 0x4f, 0x00, 0x08, // .....@R......O..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x16, 0x1c, 0x00, 0x00, 0x40, 0x52, 0x00, 0x00, 0x40, 0x52, 0x00, // .........@R..@R.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, // .............A..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0x6a, 0x55, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....jU..B.../..
+ 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xdf, 0x51, 0x00, // .....=........Q.
+ 0x00, 0x6a, 0x55, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x49, 0x00, // .jU..........TI.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdf, 0x51, 0x00, // ..............Q.
+ 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x16, 0x1c, 0x00, // ................
+ 0x00, 0x54, 0x49, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x45, 0x47, 0x00, // .TI..A.......EG.
+ 0x00, 0xa4, 0x11, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........=......
+ 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x45, 0x47, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // .?>..EG..Q......
+ 0x00, 0x56, 0x44, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // .VD..........Q..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, // .....OT.........
+ 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf7, 0x23, 0x00, 0x00, 0x91, 0x1e, 0x00, // .Q........#.....
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x54, 0x00, // .....P........T.
+ 0x00, 0x56, 0x44, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0xf7, 0x23, 0x00, 0x00, 0x3f, 0x3e, 0x00, // .VD..OT...#..?>.
+ 0x00, 0xfe, 0x00, 0x02, 0x00, 0x1d, 0x54, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // ......T..8...6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, // .............}..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x37, 0x00, 0x03, // .7........>..7..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // ......8..7......
+ 0x00, 0x02, 0x44, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf0, 0x1b, 0x00, 0x00, 0x3b, 0x00, 0x04, // ..D..........;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......W......;..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x46, 0x17, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....F.......;..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x34, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .y...43......;..
+ 0x00, 0x15, 0x03, 0x00, 0x00, 0x35, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....53......;..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....63......;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .....m3......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......1......>..
+ 0x00, 0x13, 0x57, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..W......9......
+ 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....5....W..=..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x58, 0x4e, 0x00, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x4f, 0x00, 0x07, // .....XN...8..O..
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0x4f, 0x5d, 0x00, 0x00, 0x58, 0x4e, 0x00, 0x00, 0x58, 0x4e, 0x00, // .....O]..XN..XN.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, // ................
+ 0x00, 0x9e, 0x4d, 0x00, 0x00, 0x4f, 0x5d, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, // ..M..O]......P..
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, // ......6.........
+ 0x00, 0x83, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x78, 0x39, 0x00, 0x00, 0x9e, 0x4d, 0x00, // .........x9...M.
+ 0x00, 0xfe, 0x36, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0a, 0x1e, 0x00, // ..6.............
+ 0x00, 0x78, 0x39, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // .x9......Q......
+ 0x00, 0x41, 0x4b, 0x00, 0x00, 0x0a, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // .AK..........Q..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x71, 0x24, 0x00, 0x00, 0x0a, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, // .....q$.........
+ 0x00, 0x50, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x44, 0x00, 0x00, 0x41, 0x4b, 0x00, // .P........D..AK.
+ 0x00, 0x71, 0x24, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x46, 0x17, 0x00, // .q$......>...F..
+ 0x00, 0x0d, 0x44, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa4, 0x30, 0x00, // ..D..=........0.
+ 0x00, 0x46, 0x17, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x84, 0x30, 0x00, // .F...Q........0.
+ 0x00, 0xa4, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // ..0......Q......
+ 0x00, 0x8d, 0x56, 0x00, 0x00, 0xa4, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, // ..V...0......Q..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xad, 0x62, 0x00, 0x00, 0xa4, 0x30, 0x00, 0x00, 0x02, 0x00, 0x00, // ......b...0.....
+ 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x06, 0x42, 0x00, 0x00, 0x84, 0x30, 0x00, // .P........B...0.
+ 0x00, 0x8d, 0x56, 0x00, 0x00, 0xad, 0x62, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x41, 0x00, 0x05, // ..V...b......A..
+ 0x00, 0xe2, 0x02, 0x00, 0x00, 0x72, 0x22, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x32, 0x0a, 0x00, // .....r"..B...2..
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x46, 0x34, 0x00, 0x00, 0x72, 0x22, 0x00, // .=...e...F4..r".
+ 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x06, 0x42, 0x00, // ..........%...B.
+ 0x00, 0x46, 0x34, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x11, 0x49, 0x00, // .F4..O........I.
+ 0x00, 0x01, 0x25, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ..%...%.........
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x95, 0x3c, 0x00, // ..............<.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x11, 0x49, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....E....I..>..
+ 0x00, 0x46, 0x17, 0x00, 0x00, 0x95, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .F....<..=......
+ 0x00, 0x92, 0x3d, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x34, 0x33, 0x00, // ..=......>...43.
+ 0x00, 0x92, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, 0x00, 0xf9, 0x25, 0x00, // ..=..=........%.
+ 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x35, 0x33, 0x00, 0x00, 0xf9, 0x25, 0x00, // .P...>...53...%.
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x45, 0x26, 0x00, 0x00, 0x46, 0x17, 0x00, // .=.......E&..F..
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x36, 0x33, 0x00, 0x00, 0x45, 0x26, 0x00, 0x00, 0x41, 0x00, 0x06, // .>...63..E&..A..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0xb3, 0x3b, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // ......;..B.../..
+ 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4c, 0x19, 0x00, // .....=.......L..
+ 0x00, 0xb3, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x4c, 0x19, 0x00, // ..;..>...m3..L..
+ 0x00, 0x39, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0xf4, 0x10, 0x00, // .9..............
+ 0x00, 0x34, 0x33, 0x00, 0x00, 0x35, 0x33, 0x00, 0x00, 0x36, 0x33, 0x00, 0x00, 0x6d, 0x33, 0x00, // .43..53..63..m3.
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xea, 0x23, 0x00, 0x00, 0x08, 0x3e, 0x00, // .=........#...>.
+ 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x25, 0x1f, 0x00, 0x00, 0x18, 0x0e, 0x00, // .........%......
+ 0x00, 0xea, 0x23, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x07, 0x31, 0x00, 0x00, 0x25, 0x1f, 0x00, // ..#..>....1..%..
+ 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x51, 0x00, 0x00, 0x65, 0x0c, 0x00, // .9........Q..e..
+ 0x00, 0x07, 0x31, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x02, 0x44, 0x00, 0x00, 0x84, 0x51, 0x00, // ..1..>....D...Q.
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .....8....
+};
+static const uint8_t fs_texture_cube_dx9[535] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x03, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x05, 0x75, 0x5f, 0x6d, 0x74, // Color0......u_mt
0x78, 0x14, 0x01, 0x00, 0x00, 0x03, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // x.......u_params
- 0x12, 0x01, 0x03, 0x00, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x3a, 0x00, // ..............:.
- 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, // CTAB............
- 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, // ................
- 0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x64, 0x00, 0x00, 0x00, // X...........d...
- 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....t...........
- 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, // |...............
- 0x01, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // ............s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x00, // xColor..........
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x74, 0x78, 0x00, 0xab, 0xab, // ........u_mtx...
- 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, // u_params........
- 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, // ............ps_3
- 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, // _0.Microsoft (R)
- 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, // HLSL Shader Com
- 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, // piler 10.0.10011
- 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x04, 0x00, 0x0f, 0xa0, // .16384..Q.......
- 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, // ...@.......?....
- 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
- 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, // ................
- 0x00, 0x08, 0x0f, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x80, 0x01, 0x00, 0xe4, 0x90, // ................
- 0x04, 0x00, 0x00, 0xa0, 0x04, 0x00, 0x55, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, // ......U.........
- 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xe6, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0e, 0x80, // ................
- 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0x90, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, // ..U.............
- 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xf9, 0x80, 0x02, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x24, 0x00, 0x00, 0x02, // ............$...
- 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x08, 0x80, // ................
- 0x03, 0x00, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x80, // ...._...........
- 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, // ................
- 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
+ 0x12, 0x01, 0x03, 0x00, 0x01, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, // ................
+ 0x37, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x03, // 7.CTAB..........
+ 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0xa8, 0x00, // ................
+ 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x64, 0x00, // ..X...........d.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, // ......t.........
+ 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x02, 0x00, // ..|.............
+ 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, // ..............s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, // texColor........
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x74, 0x78, 0x00, // ..........u_mtx.
+ 0xab, 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, // ..u_params......
+ 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, // ..............ps
+ 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
+ 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
+ 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, // ompiler 10.1..Q.
+ 0x00, 0x05, 0x04, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, // .........@......
+ 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, // .?..............
+ 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x90, 0x1f, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
+ 0x03, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x04, 0x00, 0x00, 0xa0, 0x04, 0x00, 0x55, 0xa0, 0x05, 0x00, // ............U...
+ 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xe6, 0xa0, 0x05, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x0e, 0x80, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0x90, 0xa0, 0x04, 0x00, // ........U.......
+ 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
+ 0xf9, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, // ................
+ 0xe4, 0xa0, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, // ..$.............
+ 0x00, 0x02, 0x01, 0x00, 0x08, 0x80, 0x03, 0x00, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, // .........._.....
+ 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x0e, 0x00, 0x00, 0x02, 0x01, 0x00, // ................
+ 0x01, 0x80, 0x03, 0x00, 0xff, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, // ................
+ 0xe4, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, // ................
+ 0xff, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
};
-static const uint8_t fs_texture_cube_dx11[736] =
+static const uint8_t fs_texture_cube_dx11[810] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x03, 0x00, 0x05, 0x75, 0x5f, 0x6d, 0x74, 0x78, // FSH........u_mtx
- 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, // .......u_params.
- 0x00, 0x40, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // .@....s_texColor
- 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xa4, 0x02, 0x44, 0x58, 0x42, 0x43, 0x4c, 0x24, 0x47, 0x2e, // 0.......DXBCL$G.
- 0x14, 0x8a, 0x1d, 0xd0, 0x5e, 0x4b, 0xf7, 0x6a, 0x90, 0x00, 0xd7, 0x38, 0x01, 0x00, 0x00, 0x00, // ....^K.j...8....
- 0xa4, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, // ........,.......
- 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....ISGNl.......
- 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ....P...........
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....b...........
- 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, // ............SV_P
- 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, // OSITION.COLOR.TE
- 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, // XCOORD..OSGN,...
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, // SV_TARGET...SHDR
- 0xc8, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, // ....@...r...Y...
- 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, // F. .........Z...
- 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, // .`......X0...p..
- 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, // ....UU..b.......
- 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....b...2.......
- 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, // e.... ......h...
- 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0f, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....2...2.......
- 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, // F........@.....@
- 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, // ...@.........@..
- 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x38, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, // 8...2.......F...
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0xbf, // .....@.....?....
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xe2, 0x00, 0x10, 0x00, // ........8.......
- 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x89, 0x20, 0x00, // ....V......... .
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, // ........2...r...
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
- 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x08, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, // ....r.......F...
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ....F. .........
- 0x10, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, // ............F...
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, // ....F.......D...
- 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........:.......
- 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, // 8...r...........
- 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, // ....F.......H...
- 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
- 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // F~.......`......
- 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, // .. .........8...
- 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // . ......F.......
- 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x50, 0x00, // F.......>.....P.
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x03, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x75, 0x5f, 0x6d, 0x74, 0x78, 0x14, // ams.......u_mtx.
+ 0x00, 0x10, 0x00, 0x04, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // ......s_texColor
+ 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xec, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x2a, 0x10, // 0.........DXBC*.
+ 0xda, 0x86, 0x24, 0x10, 0x4f, 0x29, 0xc5, 0x7f, 0x19, 0xe1, 0xc7, 0x60, 0x89, 0xb4, 0x01, 0x00, // ..$.O).....`....
+ 0x00, 0x00, 0xec, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xa0, 0x00, // ..........,.....
+ 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, // ......ISGNl.....
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ......P.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......b.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x53, 0x56, // ..............SV
+ 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, // _POSITION.COLOR.
+ 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, // TEXCOORD..OSGN,.
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .......... .....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, // ..SV_TARGET...SH
+ 0x44, 0x52, 0x10, 0x02, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x59, 0x00, // DR....@.......Y.
+ 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5a, 0x00, // ..F. .........Z.
+ 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, 0x04, 0x00, 0x70, // ...`......X0...p
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, // ......UU..b.....
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, // ......b...2.....
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e.... ......h.
+ 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0f, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2...2.....
+ 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, // ..F........@....
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, // .@...@.........@
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, // ..8...2.......F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, // .......@.....?..
+ 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xe2, 0x00, // ..........8.....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x89, // ......V.........
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, // .........2...r.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ......F. .......
+ 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, // ......r.......F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ......F. .......
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, // ..............F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, // ......F.......D.
+ 0x00, 0x05, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, // ..........:.....
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x0f, // ..8...r.........
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, // ......F.......H.
+ 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, // ..........F.....
+ 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, // ..F~.......`....
+ 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, // .... .........8.
+ 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ..........F.....
+ 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x06, 0x12, 0x00, // ..F.............
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......:. .......
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, // ..8...r ......F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, // ..............6.
+ 0x00, 0x05, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, // ... ......:.....
+ 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x50, 0x00, // ..>.....P.
};
-static const uint8_t fs_texture_cube_mtl[962] =
+static const uint8_t fs_texture_cube_mtl[1049] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xb3, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 v_colo
- 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x76, 0x5f, 0x74, // r0;. float2 v_t
- 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, // excoord0;.};.str
- 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade
- 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, // rOutput {. half
- 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, // 4 gl_FragColor;.
- 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // };.struct xlatMt
- 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, // lShaderUniform {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x74, // . float4x4 u_mt
- 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, // x;. float4 u_pa
- 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, // rams;.};.fragmen
- 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
- 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, // utput xlatMtlMai
- 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // n (xlatMtlShader
- 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, // Input _mtl_i [[s
- 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, // tage_in]], const
- 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // ant xlatMtlShade
- 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // rUniform& _mtl_u
- 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x0a, 0x20, // [[buffer(0)]].
- 0x20, 0x2c, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x63, 0x75, 0x62, 0x65, // , texturecube
- 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, // <float> s_texCol
- 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, // or [[texture(0)]
- 0x5d, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, // ], sampler _mtls
- 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, // mp_s_texColor [[
- 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, // sampler(0)]]).{.
- 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // xlatMtlShaderO
- 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, // utput _mtl_o;.
- 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, // float3 tmpvar_1;
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x05, 0x75, 0x5f, 0x6d, 0x74, 0x78, 0x04, // ams.......u_mtx.
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0xef, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, // .........using n
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, // amespace metal;.
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // struct xlatMtlSh
+ 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // aderInput {. fl
+ 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, // oat4 v_color0;.
+ 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // float3 v_texcoo
+ 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, // rd0;.};.struct x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, // latMtlShaderOutp
+ 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, // ut {. float4 gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, // _FragColor;.};.s
+ 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // truct xlatMtlSha
+ 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, // derUniform {. f
+ 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, // loat4 u_params;.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x74, 0x78, // float4x4 u_mtx
+ 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, // ;.};.fragment xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, // atMtlShaderOutpu
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, // t xlatMtlMain (x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, // latMtlShaderInpu
+ 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, // t _mtl_i [[stage
+ 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, // _in]], constant
+ 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, // xlatMtlShaderUni
+ 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, // form& _mtl_u [[b
+ 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x0a, 0x20, 0x20, 0x2c, 0x20, 0x20, // uffer(0)]]. ,
+ 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x63, 0x75, 0x62, 0x65, 0x3c, 0x66, 0x6c, 0x6f, // texturecube<flo
+ 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, // at> s_texColor [
+ 0x5b, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, // [texture(0)]], s
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, // ampler _mtlsmp_s
+ 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, // _texColor [[samp
+ 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, // ler(0)]]).{. xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, // atMtlShaderOutpu
+ 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // t _mtl_o;. floa
+ 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, // t3 tmpvar_1 = 0;
0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, // . tmpvar_1.z =
0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, // 1.0;. tmpvar_1.
0x78, 0x79, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, // xy = (((_mtl_i.v
- 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x2a, 0x20, 0x32, 0x2e, 0x30, // _texcoord0 * 2.0
- 0x29, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // ) - 1.0) * float
- 0x32, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, // 2(1.0, -1.0));.
- 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // float4 tmpvar_2
- 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x20, 0x3d, // ;. tmpvar_2.w =
- 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // 0.0;. tmpvar_2
- 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, // .xyz = tmpvar_1;
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // . float3 tmpvar
- 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, // _3;. tmpvar_3 =
- 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // normalize((_mtl
- 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x74, 0x78, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // _u.u_mtx * tmpva
- 0x72, 0x5f, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, // r_2).xyz);. hal
- 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x74, // f4 tmpvar_4;. t
- 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, // mpvar_4 = half4(
- 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, // s_texColor.sampl
- 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // e(_mtlsmp_s_texC
- 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x29, 0x28, 0x74, // olor, (float3)(t
- 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, // mpvar_3), level(
- 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, // _mtl_u.u_params.
- 0x78, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, // x)));. _mtl_o.g
- 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x28, // l_FragColor = ((
- 0x68, 0x61, 0x6c, 0x66, 0x34, 0x29, 0x28, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x29, 0x74, // half4)((float4)t
- 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // mpvar_4 * _mtl_i
- 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, // .v_color0));. r
- 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, // eturn _mtl_o;.}.
- 0x0a, 0x00, // ..
+ 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x20, 0x2a, 0x20, // _texcoord0.xy *
+ 0x32, 0x2e, 0x30, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x66, 0x6c, // 2.0) - 1.0) * fl
+ 0x6f, 0x61, 0x74, 0x32, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x29, 0x29, // oat2(1.0, -1.0))
+ 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ;. float4 tmpva
+ 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // r_2 = 0;. tmpva
+ 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // r_2.w = 0.0;. t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, // mpvar_2.xyz = tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // pvar_1;. float4
+ 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // _color_3 = 0;.
+ 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x28, 0x73, 0x5f, 0x74, // _color_3 = (s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, // exColor.sample(_
+ 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, // mtlsmp_s_texColo
+ 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x29, 0x28, 0x6e, 0x6f, 0x72, 0x6d, // r, (float3)(norm
+ 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, // alize((_mtl_u.u_
+ 0x6d, 0x74, 0x78, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x2e, // mtx * tmpvar_2).
+ 0x78, 0x79, 0x7a, 0x29, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, // xyz)), level(_mt
+ 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x29, // l_u.u_params.x))
+ 0x20, 0x2a, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // * _mtl_i.v_colo
+ 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, // r0);. float4 tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // pvar_4 = 0;. tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x63, // pvar_4.xyz = (_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x70, // olor_3.xyz * exp
+ 0x32, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // 2(_mtl_u.u_param
+ 0x73, 0x2e, 0x77, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // s.w));. tmpvar_
+ 0x34, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x33, 0x2e, 0x77, // 4.w = _color_3.w
+ 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, // ;. _mtl_o.gl_Fr
+ 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // agColor = tmpvar
+ 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, // _4;. return _mt
+ 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // l_o;.}...
};
+extern const uint8_t* fs_texture_cube_pssl;
+extern const uint32_t fs_texture_cube_pssl_size;
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_cube.sc b/3rdparty/bgfx/tools/texturev/fs_texture_cube.sc
index 7948e7b7f5b..33e4e06b1eb 100644
--- a/3rdparty/bgfx/tools/texturev/fs_texture_cube.sc
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_cube.sc
@@ -5,17 +5,16 @@ $input v_texcoord0, v_color0
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
-#include <bgfx_shader.sh>
+#include "common.sh"
SAMPLERCUBE(s_texColor, 0);
uniform mat4 u_mtx;
-uniform vec4 u_params;
-#define u_textureLod u_params.x
-
void main()
{
- vec3 dir = vec3( (v_texcoord0*2.0 - 1.0) * vec2(1.0, -1.0), 1.0);
+ vec3 dir = vec3( (v_texcoord0.xy*2.0 - 1.0) * vec2(1.0, -1.0), 1.0);
dir = normalize(mul(u_mtx, vec4(dir, 0.0) ).xyz);
- gl_FragColor = textureCubeLod(s_texColor, dir, u_textureLod) * v_color0;
+
+ vec4 color = textureCubeLod(s_texColor, dir, u_textureLod);
+ gl_FragColor = toEv(color * v_color0);
}
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_cube2.bin.h b/3rdparty/bgfx/tools/texturev/fs_texture_cube2.bin.h
new file mode 100644
index 00000000000..e1d11380236
--- /dev/null
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_cube2.bin.h
@@ -0,0 +1,430 @@
+static const uint8_t fs_texture_cube2_glsl[473] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xaa, 0x01, 0x00, 0x00, 0x76, 0x61, // olor..........va
+ 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
+ 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, // v_color0;.varyi
+ 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x5f, // ng highp vec3 v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, // texcoord0;.unifo
+ 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, // rm highp vec4 u_
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // params;.uniform
+ 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, // lowp samplerCube
+ 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x76, 0x6f, 0x69, // s_texColor;.voi
+ 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x6d, 0x65, // d main ().{. me
+ 0x64, 0x69, 0x75, 0x6d, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // diump vec4 tmpva
+ 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // r_1;. lowp vec4
+ 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x6f, // _color_2;. _co
+ 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, // lor_2 = (texture
+ 0x43, 0x75, 0x62, 0x65, 0x4c, 0x6f, 0x64, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, // CubeLod (s_te
+ 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // xColor, v_texcoo
+ 0x72, 0x64, 0x30, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, // rd0, u_params.x)
+ 0x20, 0x2a, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, // * v_color0);.
+ 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // lowp vec4 tmpvar
+ 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, // _3;. tmpvar_3.x
+ 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x2e, 0x78, // yz = (_color_2.x
+ 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x70, 0x32, 0x28, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // yz * exp2(u_para
+ 0x6d, 0x73, 0x2e, 0x77, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // ms.w));. tmpvar
+ 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x32, 0x2e, // _3.w = _color_2.
+ 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, // w;. tmpvar_1 =
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, // tmpvar_3;. gl_F
+ 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ragColor = tmpva
+ 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r_1;.}...
+};
+static const uint8_t fs_texture_cube2_spv[4402] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x14, 0x11, 0x00, 0x00, 0x03, 0x02, 0x23, // ams............#
+ 0x07, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, // .........Ta.....
+ 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
+ 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, // .w...t..........
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x11, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x62, 0x67, 0x66, // n............bgf
+ 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x4c, 0x6f, 0x64, 0x28, // xTextureCubeLod(
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, // struct-BgfxSampl
+ 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x43, 0x31, 0x31, 0x3b, 0x76, // erCube-p1-tC11;v
+ 0x66, 0x33, 0x3b, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, // f3;f1;.......~..
+ 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, // ._sampler.m_samp
+ 0x6c, 0x65, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, // ler.........._sa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, // mpler.m_texture.
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, // ........._coord.
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, // ........._level.
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, // .....5...vec4_sp
+ 0x6c, 0x61, 0x74, 0x28, 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, // lat(f1;.........
+ 0x00, 0x5f, 0x78, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x74, 0x6f, 0x45, // ._x......e...toE
+ 0x76, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa4, 0x11, 0x00, // v(vf4;..........
+ 0x00, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, // ._color.........
+ 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, // .@main(vf4;vf3;v
+ 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x76, 0x5f, 0x63, // f4;.......>..v_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcb, 0x38, 0x00, // olor0.........8.
+ 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, // .v_texcoord0....
+ 0x00, 0x02, 0x44, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // ..D..gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, // _0_......g...Bgf
+ 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x43, 0x75, 0x62, 0x65, 0x00, 0x06, 0x00, 0x06, // xSamplerCube....
+ 0x00, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, // .g.......m_sampl
+ 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x67, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, // er.......g......
+ 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // .m_texture......
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, // .....flattenTemp
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .........s_texCo
+ 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, // lorSampler......
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, // .....s_texColorT
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, 0x00, // exture..........
+ 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, // .s_texColor.m_sa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, 0x00, // mpler........P..
+ 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, // .s_texColor.m_te
+ 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, // xture........1..
+ 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, // .$Global.....1..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, // .....u_viewRect.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .....1.......u_v
+ 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // iewTexel.....1..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_view.....
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .1.......u_invVi
+ 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, // ew.......1......
+ 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, // .u_proj......1..
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .....u_invProj..
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .....1.......u_v
+ 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x31, 0x06, 0x00, // iewProj......1..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, // .....u_invViewPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, // oj.......1......
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, // .u_model.....1..
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, // .....u_modelView
+ 0x00, 0x06, 0x00, 0x07, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .....1.......u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, // odelViewProj....
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, // .1.......u_alpha
+ 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x06, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, // Ref4.....1......
+ 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, // .u_params.......
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, // .B..............
+ 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, // .bgfx_VoidFrag..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x13, 0x57, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // ......W..param..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, // .........color..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // .....JP..param..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x34, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // .....43..param..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x35, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // .....53..param..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // .....m3..param..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x07, 0x31, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // ......1..param..
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ......+..v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, // 0........w...v_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, // olor0.........<.
+ 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, // .v_texcoord0....
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, // .t...v_texcoord0
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // .........gl_Frag
+ 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, // Data_0_.......U.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, // .param........8.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, // .param..........
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, // .param..........
+ 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, // .gl_FragData_0_.
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G......."......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G.......!......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G......."......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G.......!......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, // .G...*.......@..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, // .....H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, // .#.......H...1..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .........H...1..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#... ...H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .1..............
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H...1..........
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, // .`...H...1......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, // .........H...1..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .........H...1..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .1..............
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H...1..........
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, // .....H...1......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, // .........H...1..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .........H...1..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#... ...H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .1..............
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H...1..........
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, // .`...H...1......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, // .........H...1..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .........H...1..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .1..............
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H...1..........
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // .....H...1......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x31, 0x06, 0x00, // .........H...1..
+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, // .........H...1..
+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
+ 0x00, 0x31, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .1..............
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...1.......#..
+ 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x31, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, // . ...H...1......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x31, 0x06, 0x00, // .#...0...G...1..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, // .....G...B..."..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, // .....G...w......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, // .....G...t......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, // .....G..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, // .............!..
+ 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, // . ...y..........
+ 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, // ......... ......
+ 0x00, 0x98, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, // . ..............
+ 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, // . ..............
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, // . ..............
+ 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x07, 0x00, 0x74, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, // .!...t.......y..
+ 0x00, 0x15, 0x03, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, // .............!..
+ 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, // .............!..
+ 0x00, 0x1f, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x06, // .............!..
+ 0x00, 0x7d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, // .}..............
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x67, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, // .........g......
+ 0x00, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ...!......
+ 0x00, 0x67, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // .g... ...z......
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, // .....;...z......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ..... ..........
+ 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, // .....;..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // ..... ...{......
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, 0x00, // .....;...{......
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, // ..... ..........
+ 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x03, 0x00, 0x00, 0x50, 0x13, 0x00, // .....;.......P..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, // .....+..........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, // ................
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
+ 0x40, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // @....e..........
+ 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......... ......
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, // .+.......j... ..
+ 0x00, 0x1c, 0x00, 0x04, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, // .....*...e...j..
+ 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x31, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .....1..........
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2a, 0x07, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...*...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // .e........... ..
+ 0x00, 0xae, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x31, 0x06, 0x00, 0x00, 0x3b, 0x00, 0x04, // .........1...;..
+ 0x00, 0xae, 0x08, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .....B.......+..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // ...../.......+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // .....w....... ..
+ 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x96, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // .....t....... ..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .............;..
+ 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, // .............6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, // .....Sa..;...!..
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // .........;......
+ 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, // ..U......;......
+ 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ..8......;......
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x98, 0x00, 0x00, // .!C......=......
+ 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x67, 0x09, 0x00, // ..3......P...g..
+ 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, // .^ ..!C...3..>..
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, // .....^ ..A...y..
+ 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // ..V..........=..
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, 0x03, // ..........V..>..
+ 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x15, 0x03, 0x00, // .........A......
+ 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // ..@..........=..
+ 0x00, 0x98, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, // ..........@..>..
+ 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // .P.......=......
+ 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, // ..+..w...=......
+ 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, // ..<..t...>....U.
+ 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, 0x00, // ..+..>....8...<.
+ 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xcc, 0x0d, 0x00, // .9........&.....
+ 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, // ..U...8......=..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, // .............>..
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, // .............8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
+ 0x00, 0x74, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, 0x00, // .t...7...y...~..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x15, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, 0x03, // .7...........7..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, // .........7......
+ 0x00, 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, // .........._..=..
+ 0x00, 0x98, 0x00, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, // .............=..
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, // .....!A..~...V..
+ 0x00, 0xfe, 0x01, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x21, 0x41, 0x00, // .....`5......!A.
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0xe7, 0x15, 0x00, // .=........".....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0x2e, 0x12, 0x00, // .=........G.....
+ 0x00, 0x58, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x60, 0x35, 0x00, // .X.......(=..`5.
+ 0x00, 0x95, 0x22, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0xfe, 0x00, 0x02, // ..".......G.....
+ 0x00, 0x28, 0x3d, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // .(=..8...6......
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, // .5...........7..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc6, 0x35, 0x00, // ..............5.
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x29, 0x1a, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=.......)......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xb4, 0x42, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=........B.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=.......T-.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .=.......g-.....
+ 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x31, 0x00, 0x00, 0x29, 0x1a, 0x00, // .P........1..)..
+ 0x00, 0xb4, 0x42, 0x00, 0x00, 0x54, 0x2d, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x00, 0xfe, 0x00, 0x02, // ..B..T-..g-.....
+ 0x00, 0xee, 0x31, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..1..8...6......
+ 0x00, 0x65, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x37, 0x00, 0x03, // .e...........7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xa4, 0x11, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x58, 0x2e, 0x00, // .............X..
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x40, 0x52, 0x00, 0x00, 0xa4, 0x11, 0x00, // .=.......@R.....
+ 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x16, 0x1c, 0x00, 0x00, 0x40, 0x52, 0x00, // .O...........@R.
+ 0x00, 0x40, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .@R.............
+ 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x6a, 0x55, 0x00, 0x00, 0x42, 0x13, 0x00, // .A.......jU..B..
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // ./.......=......
+ 0x00, 0xdf, 0x51, 0x00, 0x00, 0x6a, 0x55, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, // ..Q..jU.........
+ 0x00, 0x54, 0x49, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, // .TI.............
+ 0x00, 0xdf, 0x51, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x91, 0x1e, 0x00, // ..Q.............
+ 0x00, 0x16, 0x1c, 0x00, 0x00, 0x54, 0x49, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, // .....TI..A......
+ 0x00, 0x45, 0x47, 0x00, 0x00, 0xa4, 0x11, 0x00, 0x00, 0x13, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .EG..........=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x45, 0x47, 0x00, 0x00, 0x51, 0x00, 0x05, // .....?>..EG..Q..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x44, 0x00, 0x00, 0x91, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, // .....VD.........
+ 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0x91, 0x1e, 0x00, // .Q.......OT.....
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf7, 0x23, 0x00, // .....Q........#.
+ 0x00, 0x91, 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // .........P......
+ 0x00, 0x1d, 0x54, 0x00, 0x00, 0x56, 0x44, 0x00, 0x00, 0x4f, 0x54, 0x00, 0x00, 0xf7, 0x23, 0x00, // ..T..VD..OT...#.
+ 0x00, 0x3f, 0x3e, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x1d, 0x54, 0x00, 0x00, 0x38, 0x00, 0x01, // .?>.......T..8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
+ 0x00, 0x7d, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x08, 0x3e, 0x00, // .}...7........>.
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x37, 0x00, 0x03, // .7........8..7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf0, 0x1b, 0x00, // ......D.........
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x13, 0x57, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........W.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x07, 0x00, 0x00, // .;...y...JP.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x34, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, // .;.......43.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x35, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, // .;.......53.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x07, 0x00, 0x00, // .;.......m3.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........1.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x13, 0x57, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, // .>....W......9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x13, 0x57, 0x00, // .........5....W.
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xd2, 0x53, 0x00, 0x00, 0x14, 0x11, 0x00, // .=........S.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x4a, 0x50, 0x00, 0x00, 0xd2, 0x53, 0x00, 0x00, 0x3d, 0x00, 0x04, // .>...JP...S..=..
+ 0x00, 0x98, 0x00, 0x00, 0x00, 0xf9, 0x25, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......%..P...>..
+ 0x00, 0x34, 0x33, 0x00, 0x00, 0xf9, 0x25, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, // .43...%..=......
+ 0x00, 0x45, 0x26, 0x00, 0x00, 0xcb, 0x38, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x35, 0x33, 0x00, // .E&...8..>...53.
+ 0x00, 0x45, 0x26, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, 0x00, 0xb3, 0x3b, 0x00, // .E&..A........;.
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .B.../.......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0xb3, 0x3b, 0x00, 0x00, 0x3e, 0x00, 0x03, // .....L....;..>..
+ 0x00, 0x6d, 0x33, 0x00, 0x00, 0x4c, 0x19, 0x00, 0x00, 0x39, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, // .m3..L...9......
+ 0x00, 0x18, 0x0e, 0x00, 0x00, 0xf4, 0x10, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x34, 0x33, 0x00, // .........JP..43.
+ 0x00, 0x35, 0x33, 0x00, 0x00, 0x6d, 0x33, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // .53..m3..=......
+ 0x00, 0xea, 0x23, 0x00, 0x00, 0x08, 0x3e, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..#...>.........
+ 0x00, 0x25, 0x1f, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0xea, 0x23, 0x00, 0x00, 0x3e, 0x00, 0x03, // .%........#..>..
+ 0x00, 0x07, 0x31, 0x00, 0x00, 0x25, 0x1f, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..1..%...9......
+ 0x00, 0x84, 0x51, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, 0x07, 0x31, 0x00, 0x00, 0x3e, 0x00, 0x03, // ..Q..e....1..>..
+ 0x00, 0x02, 0x44, 0x00, 0x00, 0x84, 0x51, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, // ..D...Q......8..
+ 0x00, 0x00, // ..
+};
+static const uint8_t fs_texture_cube2_dx9[367] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, // Color0......u_pa
+ 0x72, 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x03, // rams......@.....
+ 0xff, 0xff, 0xfe, 0xff, 0x2c, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x83, 0x00, // ....,.CTAB......
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ..|...D.........
+ 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, // ..P.......`.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, // ......l.......s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0e, 0x00, 0x01, 0x00, // texColor........
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // ..........u_para
+ 0x6d, 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, // ms..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, // 10.1............
+ 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x07, 0x90, 0x1f, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x00, 0x08, 0x0f, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
+ 0x07, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, // ................
+ 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, // .._.............
+ 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, // ................
+ 0xe4, 0x90, 0x0e, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0xa0, 0x05, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ...............
+};
+static const uint8_t fs_texture_cube2_dx11[518] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x44, 0x58, // olor0.........DX
+ 0x42, 0x43, 0xfc, 0xf2, 0xa1, 0xb7, 0xc5, 0x09, 0xb3, 0x83, 0x63, 0x68, 0xd6, 0xf3, 0x54, 0x14, // BC........ch..T.
+ 0xd1, 0xbc, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // ..............,.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, // ..........ISGNl.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........b.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x07, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, // LOR.TEXCOORD..OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xf8, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3e, 0x00, // ..SHDR....@...>.
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, // ..Z....`......X0
+ 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, // ...p......UU..b.
+ 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x72, 0x10, // ..........b...r.
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......e.... ....
+ 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x06, 0x12, 0x00, // ..h.............
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......:. .......
+ 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x12, // ..H...........F.
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, // ......F~.......`
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ .......
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..8...........F.
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, // ......F.......8.
+ 0x00, 0x07, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, // ..r ............
+ 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x82, 0x20, // ..F.......6....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......:.......>.
+ 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // ......
+};
+static const uint8_t fs_texture_cube2_mtl[807] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x09, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, // ams..........usi
+ 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, // ng namespace met
+ 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // al;.struct xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, // tlShaderInput {.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // float4 v_color
+ 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, // 0;. float3 v_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, // xcoord0;.};.stru
+ 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // ct xlatMtlShader
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // Output {. float
+ 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, // 4 gl_FragColor;.
+ 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // };.struct xlatMt
+ 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, // lShaderUniform {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // . float4 u_para
+ 0x6d, 0x73, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, // ms;.};.fragment
+ 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
+ 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, // put xlatMtlMain
+ 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, // (xlatMtlShaderIn
+ 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, // put _mtl_i [[sta
+ 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, // ge_in]], constan
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, // t xlatMtlShaderU
+ 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, // niform& _mtl_u [
+ 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x0a, 0x20, 0x20, 0x2c, // [buffer(0)]]. ,
+ 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x63, 0x75, 0x62, 0x65, 0x3c, 0x66, // texturecube<f
+ 0x6c, 0x6f, 0x61, 0x74, 0x3e, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // loat> s_texColor
+ 0x20, 0x5b, 0x5b, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, // [[texture(0)]],
+ 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, // sampler _mtlsmp
+ 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, // _s_texColor [[sa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, // mpler(0)]]).{.
+ 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
+ 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // put _mtl_o;. fl
+ 0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, // oat4 _color_1 =
+ 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, // 0;. _color_1 =
+ 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, // (s_texColor.samp
+ 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, // le(_mtlsmp_s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x29, 0x28, // Color, (float3)(
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // _mtl_i.v_texcoor
+ 0x64, 0x30, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // d0), level(_mtl_
+ 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x29, 0x20, 0x2a, // u.u_params.x)) *
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // _mtl_i.v_color0
+ 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, // );. float4 tmpv
+ 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // ar_2 = 0;. tmpv
+ 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x63, 0x6f, 0x6c, // ar_2.xyz = (_col
+ 0x6f, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x70, 0x32, 0x28, // or_1.xyz * exp2(
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, // _mtl_u.u_params.
+ 0x77, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, // w));. tmpvar_2.
+ 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x3b, 0x0a, // w = _color_1.w;.
+ 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // _mtl_o.gl_Frag
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // Color = tmpvar_2
+ 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // ;. return _mtl_
+ 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // o;.}...
+};
+extern const uint8_t* fs_texture_cube2_pssl;
+extern const uint32_t fs_texture_cube2_pssl_size;
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_cube2.sc b/3rdparty/bgfx/tools/texturev/fs_texture_cube2.sc
new file mode 100644
index 00000000000..411834f4302
--- /dev/null
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_cube2.sc
@@ -0,0 +1,16 @@
+$input v_texcoord0, v_color0
+
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "common.sh"
+
+SAMPLERCUBE(s_texColor, 0);
+
+void main()
+{
+ vec4 color = textureCubeLod(s_texColor, v_texcoord0, u_textureLod);
+ gl_FragColor = toEv(color * v_color0);
+}
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_msdf.bin.h b/3rdparty/bgfx/tools/texturev/fs_texture_msdf.bin.h
new file mode 100644
index 00000000000..1cb252812ae
--- /dev/null
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_msdf.bin.h
@@ -0,0 +1,508 @@
+static const uint8_t fs_texture_msdf_glsl[598] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x27, 0x02, 0x00, 0x00, 0x76, 0x61, // olor......'...va
+ 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, // rying highp vec3
+ 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, // v_texcoord0;.un
+ 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // iform highp vec4
+ 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, // u_params;.unifo
+ 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x5f, 0x74, // rm sampler2D s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, // exColor;.void ma
+ 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, // in ().{. lowp v
+ 0x65, 0x63, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, // ec3 tmpvar_1;.
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, // tmpvar_1 = textu
+ 0x72, 0x65, 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, // re2DLod (s_te
+ 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // xColor, v_texcoo
+ 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // rd0.xy, u_params
+ 0x2e, 0x78, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, // .x).xyz;. lowp
+ 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, // float tmpvar_2;.
+ 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x61, // tmpvar_2 = (ma
+ 0x78, 0x20, 0x28, 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // x (min (tmpvar_1
+ 0x2e, 0x78, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x79, 0x29, 0x2c, // .x, tmpvar_1.y),
+ 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x20, 0x28, // min (. max (
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, // tmpvar_1.x, tmpv
+ 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, // ar_1.y). , tmpv
+ 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x29, 0x29, 0x20, 0x2d, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x3b, // ar_1.z)) - 0.5);
+ 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, // . lowp float tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // pvar_3;. tmpvar
+ 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, 0x28, 0x28, 0x74, 0x6d, // _3 = clamp (((tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x2f, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x61, // pvar_2 / . (a
+ 0x62, 0x73, 0x28, 0x64, 0x46, 0x64, 0x78, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // bs(dFdx(tmpvar_2
+ 0x29, 0x29, 0x20, 0x2b, 0x20, 0x61, 0x62, 0x73, 0x28, 0x64, 0x46, 0x64, 0x79, 0x28, 0x74, 0x6d, // )) + abs(dFdy(tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x20, 0x2b, 0x20, // pvar_2))). ) +
+ 0x30, 0x2e, 0x35, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, // 0.5), 0.0, 1.0);
+ 0x0a, 0x20, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, // . mediump vec4
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // tmpvar_4;. tmpv
+ 0x61, 0x72, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x74, 0x6d, 0x70, 0x76, // ar_4 = vec4(tmpv
+ 0x61, 0x72, 0x5f, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // ar_3);. gl_Frag
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, // Color = tmpvar_4
+ 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // ;.}...
+};
+static const uint8_t fs_texture_msdf_spv[5178] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x03, 0x02, 0x23, // ams............#
+ 0x07, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x53, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // .........Sb.....
+ 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
+ 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, // .w...t..........
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0xce, 0x14, 0x00, 0x00, 0x62, 0x67, 0x66, // n............bgf
+ 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x28, 0x73, 0x74, // xTexture2DLod(st
+ 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ruct-BgfxSampler
+ 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x66, // 2D-p1-t211;vf2;f
+ 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, // 1;.......~..._sa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // mpler.m_sampler.
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // ........._sample
+ 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, // r.m_texture.....
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, // ....._coord.....
+ 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x07, // ....._level.....
+ 0x00, 0xd2, 0x0c, 0x00, 0x00, 0x6d, 0x69, 0x78, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, // .....mix(vf4;vf4
+ 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc6, 0x0e, 0x00, // ;vf4;...........
+ 0x00, 0x5f, 0x61, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x5f, 0x62, 0x00, // ._a.........._b.
+ 0x00, 0x05, 0x00, 0x03, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x5f, 0x74, 0x00, 0x00, 0x05, 0x00, 0x06, // ........._t.....
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, // .5...vec4_splat(
+ 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, // f1;.........._x.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0xee, 0x0b, 0x00, 0x00, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x28, // .........median(
+ 0x76, 0x66, 0x33, 0x3b, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd0, 0x0f, 0x00, 0x00, 0x5f, 0x76, 0x61, // vf3;........._va
+ 0x6c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, // l............@ma
+ 0x69, 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, // in(vf4;vf3;vf4;.
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x61, 0x58, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // .....aX..v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xcd, 0x48, 0x00, 0x00, 0x76, 0x5f, 0x74, // 0.........H..v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0x97, 0x3e, 0x00, // excoord0......>.
+ 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, // .gl_FragData_0_.
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, // .....a...BgfxSam
+ 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, // pler2D.......a..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, // .....m_sampler..
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, // .....a.......m_t
+ 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, // exture..........
+ 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, // .flattenTemp....
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, // .....s_texColorS
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, // ampler..........
+ 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, // .s_texColorTextu
+ 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, // re...........s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // exColor.m_sample
+ 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, // r........P...s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, // exColor.m_textur
+ 0x65, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, // e............bgf
+ 0x78, 0x5f, 0x56, 0x6f, 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // x_VoidFrag......
+ 0x00, 0xa8, 0x51, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..Q..param......
+ 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x62, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x04, // .z...bgColor....
+ 0x00, 0x04, 0x05, 0x00, 0x00, 0x66, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x04, // .....fgColor....
+ 0x00, 0xb0, 0x16, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, // .....sample.....
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, // .]...$Global....
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, // .].......u_viewR
+ 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, // ect......]......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, // .u_viewTexel....
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, // .].......u_view.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, // .....].......u_i
+ 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, // nvView.......]..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_proj.....
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, // .].......u_invPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, // oj.......]......
+ 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, // .u_viewProj.....
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .].......u_invVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, // ewProj.......]..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, // .....u_model....
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // .].......u_model
+ 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, // View.....]......
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // .u_modelViewProj
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, // .....].......u_a
+ 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5d, 0x0a, 0x00, // lphaRef4.....]..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, // .....u_params...
+ 0x00, 0x05, 0x00, 0x03, 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .....B..........
+ 0x00, 0xdf, 0x4a, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..J..param......
+ 0x00, 0xc9, 0x2d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..-..param......
+ 0x00, 0xca, 0x2d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..-..param......
+ 0x00, 0xcb, 0x2d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..-..param......
+ 0x00, 0xbd, 0x0e, 0x00, 0x00, 0x73, 0x69, 0x67, 0x44, 0x69, 0x73, 0x74, 0x00, 0x05, 0x00, 0x04, // .....sigDist....
+ 0x00, 0xcc, 0x2d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..-..param......
+ 0x00, 0x69, 0x0e, 0x00, 0x00, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x00, 0x05, 0x00, 0x04, // .i...opacity....
+ 0x00, 0xcd, 0x2d, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // ..-..param......
+ 0x00, 0x02, 0x2e, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, // .....param......
+ 0x00, 0x9c, 0x2b, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // ..+..param......
+ 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // ..+..v_color0...
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // .....w...v_color
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, // 0.........<..v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, // excoord0.....t..
+ 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, // .v_texcoord0....
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, // .....gl_FragData
+ 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, // _0_.......U..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, // am........8..par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, // am...........par
+ 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // am...........gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, // FragData_0_..G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....".......G..
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .....!.......G..
+ 0x00, 0xef, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .........@...H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .].......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...].......#..
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...]......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, // .....H...]......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, // .#... ...H...]..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .]...........H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, // .].......#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...]..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...]......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...]......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, // .#.......H...]..
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .]...........H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, // .].......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...]..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...]......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x06, 0x00, 0x00, // .....H...]......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, // .#... ...H...]..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .]...........H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, // .].......#...`..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...]..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...]......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...]......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, // .#.......H...]..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, // .............H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .]...........H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, // .].......#......
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // .H...]..........
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...]......
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...]......
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, // .#.......H...]..
+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .............H..
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, // .].......#... ..
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...].......#..
+ 0x00, 0x30, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, // .0...G...]......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G...B..."......
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G...w..........
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .G...t..........
+ 0x00, 0x47, 0x00, 0x04, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .G..............
+ 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, // .........!......
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, // .y..............
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, // ..... ..........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x13, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, // .............!..
+ 0x00, 0x53, 0x0b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, // .S.......y......
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0xbb, 0x00, 0x00, // .........!......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, // ................
+ 0x00, 0x21, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, // .!..............
+ 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, // . ..............
+ 0x00, 0x21, 0x00, 0x04, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x95, 0x02, 0x00, // .!..............
+ 0x00, 0x21, 0x00, 0x06, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, // .!...}..........
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, // .............a..
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, // .....a... ...z..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, // .........;...z..
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, // ......... ......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, // .........;......
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, // ......... ...{..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, // .........;...{..
+ 0x00, 0x14, 0x11, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // . .......+......
+ 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, // ......... ......
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, // .........;......
+ 0x00, 0x50, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .P.......+......
+ 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, // ................
+ 0x00, 0x96, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x00, // .....+..........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x00, // .....+..........
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, // .....,.......z..
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, // ................
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // .+..............
+ 0x3f, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, // ?,..............
+ 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, // ................
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, // .e...........+..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, // .....j... ......
+ 0x00, 0xef, 0x09, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, // .....e...j......
+ 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .]...........e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0xef, 0x09, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.......e...e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x01, 0x00, // ......... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x5d, 0x0a, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x01, 0x00, // .....]...;......
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, // .B.......+......
+ 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, // ./....... ......
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .........+......
+ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // ........? ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, // .........;......
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .w....... ......
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, // .........;......
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .t....... ......
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, // .........;......
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // .........6......
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, // ................
+ 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, // .Sa..;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, // .....;........U.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, // .....;........8.
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, // .....;..........
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, // .....=.......!C.
+ 0x00, 0xb2, 0x0c, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, // .....=........3.
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, // .....P...a...^ .
+ 0x00, 0x21, 0x43, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, // .!C...3..>......
+ 0x00, 0x5e, 0x20, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, // .^ ..A...y....V.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, // ......V..>......
+ 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, // .....A........@.
+ 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, // .........=......
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, // ......@..>...P..
+ 0x00, 0xd3, 0x1e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .....=........+.
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, // .w...=........<.
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, // .t...>....U...+.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, // .>....8...<..9..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xbd, 0x26, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, // ......&.......U.
+ 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ..8......=......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, // .........>......
+ 0x00, 0xce, 0x1c, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .........8...6..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x0b, 0x00, // .............S..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, // .7...y...~...7..
+ 0x00, 0x13, 0x03, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, // .........7......
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x2e, 0x12, 0x00, // .....7..........
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, // ......_..=......
+ 0x00, 0x9c, 0x5c, 0x00, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .........=......
+ 0x00, 0x21, 0x41, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, // .!A..~...V......
+ 0x00, 0x60, 0x35, 0x00, 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, // .`5......!A..=..
+ 0x00, 0x13, 0x00, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, // ......"......=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, // ......G......X..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x95, 0x22, 0x00, // .....(=..`5...".
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x47, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x28, 0x3d, 0x00, // ......G......(=.
+ 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd2, 0x0c, 0x00, // .8...6..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .........7......
+ 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc7, 0x0e, 0x00, // .....7..........
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, // .7..............
+ 0x00, 0x6d, 0x51, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x48, 0x1b, 0x00, // .mQ..=.......H..
+ 0x00, 0xc6, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x5e, 0x40, 0x00, // .....=.......^@.
+ 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x3f, 0x00, // .....=.......e?.
+ 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x5a, 0x42, 0x00, // .............ZB.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x48, 0x1b, 0x00, 0x00, 0x5e, 0x40, 0x00, // .........H...^@.
+ 0x00, 0x65, 0x3f, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x5a, 0x42, 0x00, 0x00, 0x38, 0x00, 0x01, // .e?......ZB..8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, // .6.......5......
+ 0x00, 0xef, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, // .....7..........
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb1, 0x24, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // ......$..=......
+ 0x00, 0x75, 0x56, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .uV......=......
+ 0x00, 0xba, 0x4d, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // ..M......=......
+ 0x00, 0x5a, 0x38, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .Z8......=......
+ 0x00, 0x6d, 0x38, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // .m8......P......
+ 0x00, 0xd9, 0x20, 0x00, 0x00, 0x75, 0x56, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x5a, 0x38, 0x00, // .. ..uV...M..Z8.
+ 0x00, 0x6d, 0x38, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0xd9, 0x20, 0x00, 0x00, 0x38, 0x00, 0x01, // .m8....... ..8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xee, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
+ 0x00, 0xf0, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0xd0, 0x0f, 0x00, // .....7..........
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0x50, 0x3a, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, // .....P:..A......
+ 0x00, 0x7a, 0x23, 0x00, 0x00, 0xd0, 0x0f, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, // .z#..........=..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x27, 0x30, 0x00, 0x00, 0x7a, 0x23, 0x00, 0x00, 0x41, 0x00, 0x05, // .....'0..z#..A..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x0c, 0x3e, 0x00, 0x00, 0xd0, 0x0f, 0x00, 0x00, 0x0d, 0x0a, 0x00, // ......>.........
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x88, 0x5b, 0x00, 0x00, 0x0c, 0x3e, 0x00, // .=........[...>.
+ 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xab, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x25, 0x00, 0x00, 0x00, 0x27, 0x30, 0x00, 0x00, 0x88, 0x5b, 0x00, 0x00, 0x41, 0x00, 0x05, // .%...'0...[..A..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x96, 0x2d, 0x00, 0x00, 0xd0, 0x0f, 0x00, 0x00, 0x0a, 0x0a, 0x00, // ......-.........
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x41, 0x33, 0x00, 0x00, 0x96, 0x2d, 0x00, // .=.......A3...-.
+ 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x0f, 0x3e, 0x00, 0x00, 0xd0, 0x0f, 0x00, // .A........>.....
+ 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd2, 0x47, 0x00, // .....=........G.
+ 0x00, 0x0f, 0x3e, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfa, 0x52, 0x00, // ..>...........R.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x41, 0x33, 0x00, 0x00, 0xd2, 0x47, 0x00, // .....(...A3...G.
+ 0x00, 0x41, 0x00, 0x05, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x90, 0x28, 0x00, 0x00, 0xd0, 0x0f, 0x00, // .A........(.....
+ 0x00, 0x10, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0d, 0x38, 0x00, // .....=........8.
+ 0x00, 0x90, 0x28, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x26, 0x5b, 0x00, // ..(..........&[.
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xfa, 0x52, 0x00, 0x00, 0x0d, 0x38, 0x00, // .....%....R...8.
+ 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x14, 0x5a, 0x00, 0x00, 0x01, 0x00, 0x00, // ..........Z.....
+ 0x00, 0x28, 0x00, 0x00, 0x00, 0xab, 0x1e, 0x00, 0x00, 0x26, 0x5b, 0x00, 0x00, 0xfe, 0x00, 0x02, // .(.......&[.....
+ 0x00, 0x14, 0x5a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, // ..Z..8...6......
+ 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, // .........}...7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x61, 0x58, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, // .....aX..7......
+ 0x00, 0xcd, 0x48, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x97, 0x3e, 0x00, // ..H..7........>.
+ 0x00, 0xf8, 0x00, 0x02, 0x00, 0x04, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ......a..;......
+ 0x00, 0xa8, 0x51, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, // ..Q......;...y..
+ 0x00, 0xdf, 0x4a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, // ..J......;......
+ 0x00, 0xc9, 0x2d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, // ..-......;......
+ 0x00, 0xca, 0x2d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ..-......;......
+ 0x00, 0xcb, 0x2d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, // ..-......;......
+ 0x00, 0xcc, 0x2d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ..-......;......
+ 0x00, 0xcd, 0x2d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // ..-......;......
+ 0x00, 0x02, 0x2e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, // .........;......
+ 0x00, 0x9c, 0x2b, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa8, 0x51, 0x00, // ..+......>....Q.
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa0, 0x11, 0x00, // .....9..........
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0xa8, 0x51, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, // .5....Q..=......
+ 0x00, 0x67, 0x4e, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xdf, 0x4a, 0x00, // .gN......>....J.
+ 0x00, 0x67, 0x4e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x8e, 0x20, 0x00, // .gN..=........ .
+ 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xc9, 0x2d, 0x00, 0x00, 0x8e, 0x20, 0x00, // .P...>....-... .
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0xa3, 0x5f, 0x00, 0x00, 0xcd, 0x48, 0x00, // .=........_...H.
+ 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x7c, 0x45, 0x00, 0x00, 0xa3, 0x5f, 0x00, // .O.......|E..._.
+ 0x00, 0xa3, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, // .._..........>..
+ 0x00, 0xca, 0x2d, 0x00, 0x00, 0x7c, 0x45, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x8b, 0x02, 0x00, // ..-..|E..A......
+ 0x00, 0x8b, 0x3c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, 0x00, 0x0a, 0x0a, 0x00, // ..<..B.../......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x60, 0x5e, 0x00, 0x00, 0x8b, 0x3c, 0x00, // .=.......`^...<.
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xcb, 0x2d, 0x00, 0x00, 0x60, 0x5e, 0x00, 0x00, 0x39, 0x00, 0x08, // .>....-..`^..9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x00, 0x00, 0xce, 0x14, 0x00, 0x00, 0xdf, 0x4a, 0x00, // ......J.......J.
+ 0x00, 0xc9, 0x2d, 0x00, 0x00, 0xca, 0x2d, 0x00, 0x00, 0xcb, 0x2d, 0x00, 0x00, 0x4f, 0x00, 0x08, // ..-...-...-..O..
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0xb0, 0x16, 0x00, 0x00, 0xa9, 0x4a, 0x00, 0x00, 0xa9, 0x4a, 0x00, // ..........J...J.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, // .............>..
+ 0x00, 0xcc, 0x2d, 0x00, 0x00, 0xb0, 0x16, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // ..-......9......
+ 0x00, 0xb1, 0x38, 0x00, 0x00, 0xee, 0x0b, 0x00, 0x00, 0xcc, 0x2d, 0x00, 0x00, 0x83, 0x00, 0x05, // ..8.......-.....
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbd, 0x0e, 0x00, 0x00, 0xb1, 0x38, 0x00, 0x00, 0xfc, 0x00, 0x00, // ..........8.....
+ 0x00, 0xd1, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf6, 0x38, 0x00, 0x00, 0xbd, 0x0e, 0x00, // ..........8.....
+ 0x00, 0x88, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfa, 0x4e, 0x00, 0x00, 0xbd, 0x0e, 0x00, // ..........N.....
+ 0x00, 0xf6, 0x38, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa3, 0x4c, 0x00, // ..8...........L.
+ 0x00, 0xfa, 0x4e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x00, // ..N.............
+ 0x00, 0x69, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xa3, 0x4c, 0x00, // .i.......+....L.
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // .........P......
+ 0x00, 0x52, 0x62, 0x00, 0x00, 0x69, 0x0e, 0x00, 0x00, 0x69, 0x0e, 0x00, 0x00, 0x69, 0x0e, 0x00, // .Rb..i...i...i..
+ 0x00, 0x69, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xcd, 0x2d, 0x00, 0x00, 0x7a, 0x0b, 0x00, // .i...>....-..z..
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x02, 0x2e, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0x3e, 0x00, 0x03, // .>...........>..
+ 0x00, 0x9c, 0x2b, 0x00, 0x00, 0x52, 0x62, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // ..+..Rb..9......
+ 0x00, 0x97, 0x29, 0x00, 0x00, 0xd2, 0x0c, 0x00, 0x00, 0xcd, 0x2d, 0x00, 0x00, 0x02, 0x2e, 0x00, // ..).......-.....
+ 0x00, 0x9c, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x97, 0x3e, 0x00, 0x00, 0x97, 0x29, 0x00, // ..+..>....>...).
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .....8....
+};
+static const uint8_t fs_texture_msdf_dx9[495] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, // Color0......u_pa
+ 0x72, 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x03, // rams............
+ 0xff, 0xff, 0xfe, 0xff, 0x2c, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x83, 0x00, // ....,.CTAB......
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ..|...D.........
+ 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, // ..P.......`.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, // ......l.......s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, // texColor........
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // ..........u_para
+ 0x6d, 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, // ms..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, // 10.1..Q.........
+ 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x3f, 0x1f, 0x00, // .?...........?..
+ 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
+ 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, // ................
+ 0xd0, 0xa0, 0x00, 0x00, 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, // ................
+ 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, // .._.............
+ 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, // ............U...
+ 0x00, 0x80, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, // ..X.............
+ 0xe1, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x0a, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, // ................
+ 0xaa, 0x80, 0x00, 0x00, 0x55, 0x80, 0x0b, 0x00, 0x00, 0x03, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, // ....U...........
+ 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x02, 0x00, // ................
+ 0x00, 0x80, 0x01, 0x00, 0xaa, 0xa0, 0x5b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, // ......[.........
+ 0x00, 0x80, 0x5c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0xaa, 0x8b, 0x00, 0x00, 0x55, 0x8b, 0x06, 0x00, // ............U...
+ 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ........U.......
+ 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0xff, 0xa0, 0x01, 0x00, // ........U.......
+ 0x00, 0x02, 0x00, 0x08, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ...............
+};
+static const uint8_t fs_texture_msdf_dx11[670] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x6c, 0x02, 0x00, 0x00, 0x44, 0x58, // olor0.....l...DX
+ 0x42, 0x43, 0xde, 0xd6, 0xcf, 0x5a, 0x51, 0xb1, 0xc9, 0x93, 0x7e, 0x1e, 0x77, 0x4e, 0x30, 0x56, // BC...ZQ...~.wN0V
+ 0xcd, 0x6a, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // .j....l.......,.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, // ..........ISGNl.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........b.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x03, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, // LOR.TEXCOORD..OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x90, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x64, 0x00, // ..SHDR....@...d.
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, // ..Z....`......X.
+ 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, // ...p......UU..b.
+ 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, // ..2.......e....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, // ......h.......H.
+ 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, // ..........F.....
+ 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, // ..F~.......`....
+ 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, // .... .........4.
+ 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, 0x52, 0x00, // ..........3...R.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, // ......V.........
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, // ......4.........
+ 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, // ..*.............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, // ................
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x0b, 0x00, // .......@........
+ 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, // ..".............
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x05, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, // ......B.........
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, // ..........".....
+ 0x00, 0x00, 0x2a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, // ..*.............
+ 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x07, 0x12, 0x00, // ................
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, // ................
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, // ...........@....
+ 0x00, 0x3f, 0x36, 0x20, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // .?6 ... ........
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // ......>.......
+};
+static const uint8_t fs_texture_msdf_mtl[890] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x5c, 0x03, 0x00, 0x00, 0x75, 0x73, 0x69, // ams..........usi
+ 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, // ng namespace met
+ 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // al;.struct xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, // tlShaderInput {.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // float3 v_texco
+ 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, // ord0;.};.struct
+ 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
+ 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // put {. float4 g
+ 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, // l_FragColor;.};.
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // struct xlatMtlSh
+ 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, // aderUniform {.
+ 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, // float4 u_params;
+ 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, // .};.fragment xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, // xlatMtlMain (xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, // atMtlShaderInput
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, // _mtl_i [[stage_
+ 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, // in]], constant x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, // latMtlShaderUnif
+ 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, // orm& _mtl_u [[bu
+ 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x0a, 0x20, 0x20, 0x2c, 0x20, 0x20, 0x20, // ffer(0)]]. ,
+ 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x3c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3e, // texture2d<float>
+ 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x74, 0x65, // s_texColor [[te
+ 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, // xture(0)]], samp
+ 0x6c, 0x65, 0x72, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, // ler _mtlsmp_s_te
+ 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // xColor [[sampler
+ 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // (0)]]).{. xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, // tlShaderOutput _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, // mtl_o;. float3
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, // tmpvar_1 = 0;.
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, // tmpvar_1 = s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, // Color.sample(_mt
+ 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, // lsmp_s_texColor,
+ 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // (float2)(_mtl_i
+ 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x29, // .v_texcoord0.xy)
+ 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, // , level(_mtl_u.u
+ 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, // _params.x)).xyz;
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // . float tmpvar_
+ 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 2 = 0;. tmpvar_
+ 0x32, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x61, 0x78, 0x20, 0x28, 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x74, // 2 = (max (min (t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_1.x, tmpva
+ 0x72, 0x5f, 0x31, 0x2e, 0x79, 0x29, 0x2c, 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x0a, 0x20, 0x20, // r_1.y), min (.
+ 0x20, 0x20, 0x6d, 0x61, 0x78, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, // max (tmpvar_1.
+ 0x78, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x79, 0x29, 0x0a, 0x20, // x, tmpvar_1.y).
+ 0x20, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x29, 0x29, 0x20, // , tmpvar_1.z))
+ 0x2d, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // - 0.5);. _mtl_o
+ 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, // .gl_FragColor =
+ 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, 0x28, 0x28, // float4(clamp (((
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x2f, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, // tmpvar_2 / .
+ 0x28, 0x61, 0x62, 0x73, 0x28, 0x64, 0x66, 0x64, 0x78, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // (abs(dfdx(tmpvar
+ 0x5f, 0x32, 0x29, 0x29, 0x20, 0x2b, 0x20, 0x61, 0x62, 0x73, 0x28, 0x64, 0x66, 0x64, 0x79, 0x28, // _2)) + abs(dfdy(
+ 0x2d, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x29, // -tmpvar_2))). )
+ 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, // + 0.5), 0.0, 1.
+ 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, // 0));. return _m
+ 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tl_o;.}...
+};
+extern const uint8_t* fs_texture_msdf_pssl;
+extern const uint32_t fs_texture_msdf_pssl_size;
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_msdf.sc b/3rdparty/bgfx/tools/texturev/fs_texture_msdf.sc
new file mode 100644
index 00000000000..509b8b90628
--- /dev/null
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_msdf.sc
@@ -0,0 +1,25 @@
+$input v_texcoord0, v_color0
+
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "common.sh"
+
+SAMPLER2D(s_texColor, 0);
+
+float median(vec3 _val)
+{
+ return max(min(_val.x, _val.y), min(max(_val.x, _val.y), _val.z) );
+}
+
+void main() {
+ vec4 bgColor = vec4(0.0, 0.0, 0.0, 0.0);
+ vec4 fgColor = vec4(1.0, 1.0, 1.0, 1.0);
+
+ vec3 sample = texture2DLod(s_texColor, v_texcoord0.xy, u_textureLod).xyz;
+ float sigDist = median(sample) - 0.5;
+ float opacity = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0);
+ gl_FragColor = mix(bgColor, fgColor, opacity);
+}
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_sdf.bin.h b/3rdparty/bgfx/tools/texturev/fs_texture_sdf.bin.h
index 763547b6978..0891dc5b03d 100644
--- a/3rdparty/bgfx/tools/texturev/fs_texture_sdf.bin.h
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_sdf.bin.h
@@ -1,142 +1,403 @@
-static const uint8_t fs_texture_sdf_glsl[647] =
+static const uint8_t fs_texture_sdf_glsl[415] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
- 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, // Color.......u_pa
- 0x72, 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x58, 0x02, 0x00, 0x00, 0x76, 0x61, // rams......X...va
- 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x32, // rying highp vec2
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x70, 0x01, 0x00, 0x00, 0x76, 0x61, // olor......p...va
+ 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, // rying highp vec3
0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, // v_texcoord0;.un
- 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, // iform sampler2D
- 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, // s_texColor;.unif
- 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, // orm highp vec4 u
- 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, // _params;.void ma
+ 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // iform highp vec4
+ 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, // u_params;.unifo
+ 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x5f, 0x74, // rm sampler2D s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, // exColor;.void ma
0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, // in ().{. lowp v
- 0x65, 0x63, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, // ec3 tmpvar_1;.
+ 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, // ec4 tmpvar_1;.
0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, // tmpvar_1 = textu
0x72, 0x65, 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, // re2DLod (s_te
0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // xColor, v_texcoo
- 0x72, 0x64, 0x30, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, // rd0, u_params.x)
- 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x66, 0x6c, 0x6f, // .xyz;. lowp flo
- 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, // at tmpvar_2;. t
- 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x61, 0x78, 0x20, 0x28, // mpvar_2 = (max (
- 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x2c, // min (tmpvar_1.x,
- 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x79, 0x29, 0x2c, 0x20, 0x6d, 0x69, // tmpvar_1.y), mi
- 0x6e, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x20, 0x28, 0x74, 0x6d, 0x70, // n (. max (tmp
- 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // var_1.x, tmpvar_
- 0x31, 0x2e, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 1.y). , tmpvar_
- 0x31, 0x2e, 0x7a, 0x29, 0x29, 0x20, 0x2d, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, // 1.z)) - 0.5);.
- 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // lowp float tmpva
- 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, // r_3;. tmpvar_3
- 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, // = clamp (((tmpva
- 0x72, 0x5f, 0x32, 0x20, 0x2f, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x61, 0x62, 0x73, 0x28, // r_2 / . (abs(
- 0x64, 0x46, 0x64, 0x78, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x20, // dFdx(tmpvar_2))
- 0x2b, 0x20, 0x61, 0x62, 0x73, 0x28, 0x64, 0x46, 0x64, 0x79, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, // + abs(dFdy(tmpva
- 0x72, 0x5f, 0x32, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, // r_2))). ) + 0.5
- 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, // ), 0.0, 1.0);.
- 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, // mediump vec4 tmp
- 0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // var_4;. tmpvar_
- 0x34, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x20, 0x28, 0x76, 0x65, 0x63, 0x34, 0x28, 0x31, 0x2e, // 4 = mix (vec4(1.
- 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, // 0, 1.0, 1.0, 1.0
- 0x29, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, // ), vec4(0.0, 0.0
- 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x2c, 0x20, 0x74, 0x6d, 0x70, // , 0.0, 1.0), tmp
- 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // var_3);. gl_Fra
- 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // gColor = tmpvar_
- 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // 4;.}...
+ 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // rd0.xy, u_params
+ 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // .x);. lowp vec4
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // tmpvar_2;. tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x6c, 0x61, // var_2 = vec4(cla
+ 0x6d, 0x70, 0x20, 0x28, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, // mp (((tmpvar_1.x
+ 0x20, 0x2f, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x61, 0x62, 0x73, 0x28, 0x64, 0x46, 0x64, // / . (abs(dFd
+ 0x78, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x29, 0x29, 0x20, 0x2b, // x(tmpvar_1.x)) +
+ 0x20, 0x61, 0x62, 0x73, 0x28, 0x64, 0x46, 0x64, 0x79, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // abs(dFdy(tmpvar
+ 0x5f, 0x31, 0x2e, 0x78, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x30, 0x2e, // _1.x))). ) + 0.
+ 0x35, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x3b, 0x0a, // 5), 0.0, 1.0));.
+ 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, // gl_FragColor =
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tmpvar_2;.}...
};
-static const uint8_t fs_texture_sdf_dx9[533] =
+static const uint8_t fs_texture_sdf_spv[4638] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x03, 0x02, 0x23, // ams............#
+ 0x07, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x54, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, // .........Ta.....
+ 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, // ................
+ 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, // .GLSL.std.450...
+ 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, // .........main...
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x74, 0x14, 0x00, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x03, // .w...t..........
+ 0x00, 0x1f, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, // ................
+ 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, // .............mai
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0xce, 0x14, 0x00, 0x00, 0x62, 0x67, 0x66, // n............bgf
+ 0x78, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x28, 0x73, 0x74, // xTexture2DLod(st
+ 0x72, 0x75, 0x63, 0x74, 0x2d, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // ruct-BgfxSampler
+ 0x32, 0x44, 0x2d, 0x70, 0x31, 0x2d, 0x74, 0x32, 0x31, 0x31, 0x3b, 0x76, 0x66, 0x32, 0x3b, 0x66, // 2D-p1-t211;vf2;f
+ 0x31, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x5f, 0x73, 0x61, // 1;.......~..._sa
+ 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, // mpler.m_sampler.
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, // ........._sample
+ 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, // r.m_texture.....
+ 0x00, 0xe7, 0x15, 0x00, 0x00, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x05, 0x00, 0x04, // ....._coord.....
+ 0x00, 0x2e, 0x12, 0x00, 0x00, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x07, // ....._level.....
+ 0x00, 0xd2, 0x0c, 0x00, 0x00, 0x6d, 0x69, 0x78, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x34, // .....mix(vf4;vf4
+ 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc6, 0x0e, 0x00, // ;vf4;...........
+ 0x00, 0x5f, 0x61, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x5f, 0x62, 0x00, // ._a.........._b.
+ 0x00, 0x05, 0x00, 0x03, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0x5f, 0x74, 0x00, 0x00, 0x05, 0x00, 0x06, // ........._t.....
+ 0x00, 0x35, 0x13, 0x00, 0x00, 0x76, 0x65, 0x63, 0x34, 0x5f, 0x73, 0x70, 0x6c, 0x61, 0x74, 0x28, // .5...vec4_splat(
+ 0x66, 0x31, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x5f, 0x78, 0x00, // f1;.........._x.
+ 0x00, 0x05, 0x00, 0x07, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, // .........@main(v
+ 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x05, // f4;vf3;vf4;.....
+ 0x00, 0xf5, 0x25, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // ..%..v_color0...
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x6f, 0x59, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // .....oY..v_texco
+ 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xe9, 0x4d, 0x00, 0x00, 0x67, 0x6c, 0x5f, // ord0......M..gl_
+ 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x05, 0x00, 0x06, // FragData_0_.....
+ 0x00, 0x61, 0x09, 0x00, 0x00, 0x42, 0x67, 0x66, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // .a...BgfxSampler
+ 0x32, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x61, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, // 2D.......a......
+ 0x00, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // .m_sampler......
+ 0x00, 0x61, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, // .a.......m_textu
+ 0x72, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, // re...........fla
+ 0x74, 0x74, 0x65, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x07, 0x00, 0xb2, 0x0c, 0x00, // ttenTemp........
+ 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, // .s_texColorSampl
+ 0x65, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xee, 0x0e, 0x00, 0x00, 0x73, 0x5f, 0x74, // er...........s_t
+ 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, // exColorTexture..
+ 0x00, 0x05, 0x00, 0x08, 0x00, 0x14, 0x11, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .........s_texCo
+ 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, // lor.m_sampler...
+ 0x00, 0x05, 0x00, 0x08, 0x00, 0x50, 0x13, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, // .....P...s_texCo
+ 0x6c, 0x6f, 0x72, 0x2e, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x00, // lor.m_texture...
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0xa0, 0x11, 0x00, 0x00, 0x62, 0x67, 0x66, 0x78, 0x5f, 0x56, 0x6f, // .........bgfx_Vo
+ 0x69, 0x64, 0x46, 0x72, 0x61, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc1, 0x47, 0x00, // idFrag........G.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x7a, 0x0b, 0x00, // .param.......z..
+ 0x00, 0x62, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x05, 0x00, // .bgColor........
+ 0x00, 0x66, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x04, 0x00, 0xbd, 0x0e, 0x00, // .fgColor........
+ 0x00, 0x73, 0x69, 0x67, 0x44, 0x69, 0x73, 0x74, 0x00, 0x05, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, // .sigDist.....$..
+ 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x24, 0x09, 0x00, // .$Global.....$..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, // .....u_viewRect.
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x24, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .....$.......u_v
+ 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, // iewTexel.....$..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, // .....u_view.....
+ 0x00, 0x24, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, // .$.......u_invVi
+ 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, // ew.......$......
+ 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x24, 0x09, 0x00, // .u_proj......$..
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // .....u_invProj..
+ 0x00, 0x06, 0x00, 0x06, 0x00, 0x24, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, // .....$.......u_v
+ 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x24, 0x09, 0x00, // iewProj......$..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, // .....u_invViewPr
+ 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, // oj.......$......
+ 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x24, 0x09, 0x00, // .u_model.....$..
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, // .....u_modelView
+ 0x00, 0x06, 0x00, 0x07, 0x00, 0x24, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, // .....$.......u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, // odelViewProj....
+ 0x00, 0x24, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, // .$.......u_alpha
+ 0x52, 0x65, 0x66, 0x34, 0x00, 0x06, 0x00, 0x06, 0x00, 0x24, 0x09, 0x00, 0x00, 0x0c, 0x00, 0x00, // Ref4.....$......
+ 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, // .u_params.......
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x31, 0x5a, 0x00, // .B...........1Z.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe2, 0x23, 0x00, // .param........#.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe3, 0x23, 0x00, // .param........#.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe4, 0x23, 0x00, // .param........#.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x69, 0x0e, 0x00, // .param.......i..
+ 0x00, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x00, 0x05, 0x00, 0x04, 0x00, 0xe5, 0x23, 0x00, // .opacity......#.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1b, 0x24, 0x00, // .param........$.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xb5, 0x21, 0x00, // .param........!.
+ 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xf4, 0x2b, 0x00, // .param........+.
+ 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, // .v_color0.......
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, // .w...v_color0...
+ 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // ......<..v_texco
+ 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x74, 0x14, 0x00, 0x00, 0x76, 0x5f, 0x74, // ord0.....t...v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x06, 0x00, 0xce, 0x1c, 0x00, // excoord0........
+ 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, // .gl_FragData_0_.
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // ......U..param..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // ......8..param..
+ 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, // .........param..
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // .........gl_Frag
+ 0x44, 0x61, 0x74, 0x61, 0x5f, 0x30, 0x5f, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, // Data_0_..G......
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb2, 0x0c, 0x00, // .".......G......
+ 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, // .!.......G......
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xee, 0x0e, 0x00, // .".......G......
+ 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x94, 0x01, 0x00, // .!.......G......
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, // .....@...H...$..
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
+ 0x00, 0x24, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .$.......#......
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H...$..........
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...$.......#..
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, // . ...H...$......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, // .........H...$..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, // .........H...$..
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#...`...H..
+ 0x00, 0x24, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .$..............
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H...$..........
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...$.......#..
+ 0x00, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, // .....H...$......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, // .........H...$..
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, // .........H...$..
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
+ 0x00, 0x24, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .$..............
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H...$..........
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...$.......#..
+ 0x00, 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, // . ...H...$......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, // .........H...$..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, // .........H...$..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#...`...H..
+ 0x00, 0x24, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .$..............
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H...$..........
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...$.......#..
+ 0x00, 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, // .....H...$......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, // .........H...$..
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, // .........H...$..
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#.......H..
+ 0x00, 0x24, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, // .$..............
+ 0x00, 0x48, 0x00, 0x04, 0x00, 0x24, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .H...$..........
+ 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, // .H...$.......#..
+ 0x00, 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, // .....H...$......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x24, 0x09, 0x00, // .........H...$..
+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x48, 0x00, 0x05, // .....#... ...H..
+ 0x00, 0x24, 0x09, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x0a, 0x00, // .$.......#...0..
+ 0x00, 0x47, 0x00, 0x03, 0x00, 0x24, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .G...$.......G..
+ 0x00, 0x42, 0x13, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .B...".......G..
+ 0x00, 0x77, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .w...........G..
+ 0x00, 0x74, 0x14, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, // .t...........G..
+ 0x00, 0xd1, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, // ................
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, // .....!..........
+ 0x00, 0x1a, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x79, 0x04, 0x00, // ......... ...y..
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x96, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, // . ..............
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x13, 0x03, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x90, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8a, 0x02, 0x00, // ......... ......
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, // ................
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x07, 0x00, 0x53, 0x0b, 0x00, // .........!...S..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x13, 0x03, 0x00, 0x00, 0x90, 0x02, 0x00, // .....y..........
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .....!..........
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x21, 0x00, 0x04, // .............!..
+ 0x00, 0xef, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x17, 0x00, 0x04, // ................
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // ............. ..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, // .............!..
+ 0x00, 0x7d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, // .}..............
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x61, 0x09, 0x00, 0x00, 0xfc, 0x01, 0x00, // .........a......
+ 0x00, 0x96, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, // ..... ..........
+ 0x00, 0x61, 0x09, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // .a... ...z......
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7a, 0x04, 0x00, 0x00, 0xb2, 0x0c, 0x00, // .....;...z......
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ..... ..........
+ 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x03, 0x00, 0x00, 0xee, 0x0e, 0x00, // .....;..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, // ..... ...{......
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7b, 0x04, 0x00, 0x00, 0x14, 0x11, 0x00, // .....;...{......
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, // ..... ..........
+ 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x03, 0x00, 0x00, 0x50, 0x13, 0x00, // .....;.......P..
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, // .....+..........
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x96, 0x00, 0x00, // ................
+ 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, // .+..............
+ 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x0c, 0x0a, 0x00, // .,.......z......
+ 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, // .............+..
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x07, // ............?,..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, // ................
+ 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, // .............e..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // ................
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, // . .......+......
+ 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x94, 0x01, 0x00, // .j... ..........
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x24, 0x09, 0x00, // .e...j.......$..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .........e...e..
+ 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e...e...e...e..
+ 0x00, 0x94, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, // .....e...e......
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xa1, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
+ 0x00, 0x24, 0x09, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xa1, 0x0b, 0x00, 0x00, 0x42, 0x13, 0x00, // .$...;.......B..
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2f, 0x0a, 0x00, // .....+......./..
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, // ..... ..........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, // .....+..........
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, // ....? ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x77, 0x0e, 0x00, // .....;.......w..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, // ..... ..........
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x74, 0x14, 0x00, // .....;.......t..
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ..... ..........
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0xd1, 0x0d, 0x00, // .....;..........
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, // .....6..........
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, // .............Sa.
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, // .;..............
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........U.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, // .;........8.....
+ 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, // .;..............
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x43, 0x00, 0x00, 0xb2, 0x0c, 0x00, // .=.......!C.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0xee, 0x0e, 0x00, // .=........3.....
+ 0x00, 0x50, 0x00, 0x05, 0x00, 0x61, 0x09, 0x00, 0x00, 0x5e, 0x20, 0x00, 0x00, 0x21, 0x43, 0x00, // .P...a...^ ..!C.
+ 0x00, 0x02, 0x33, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x5e, 0x20, 0x00, // ..3..>.......^ .
+ 0x00, 0x41, 0x00, 0x05, 0x00, 0x79, 0x04, 0x00, 0x00, 0xf4, 0x56, 0x00, 0x00, 0x08, 0x10, 0x00, // .A...y....V.....
+ 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x1f, 0x1f, 0x00, // .....=..........
+ 0x00, 0xf4, 0x56, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x14, 0x11, 0x00, 0x00, 0x1f, 0x1f, 0x00, // ..V..>..........
+ 0x00, 0x41, 0x00, 0x05, 0x00, 0x13, 0x03, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, // .A........@.....
+ 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0xd3, 0x1e, 0x00, // .....=..........
+ 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x13, 0x00, 0x00, 0xd3, 0x1e, 0x00, // ..@..>...P......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x77, 0x0e, 0x00, // .=........+..w..
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x74, 0x14, 0x00, // .=........<..t..
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0x85, 0x55, 0x00, 0x00, 0xf4, 0x2b, 0x00, 0x00, 0x3e, 0x00, 0x03, // .>....U...+..>..
+ 0x00, 0x95, 0x38, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, // ..8...<..9......
+ 0x00, 0xbd, 0x26, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, // ..&.......U...8.
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xce, 0x1c, 0x00, // .....=..........
+ 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd1, 0x0d, 0x00, 0x00, 0xce, 0x1c, 0x00, // .....>..........
+ 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // .....8...6......
+ 0x00, 0xce, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x0b, 0x00, 0x00, 0x37, 0x00, 0x03, // .........S...7..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x7e, 0x17, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x13, 0x03, 0x00, // .y...~...7......
+ 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x90, 0x02, 0x00, 0x00, 0xe7, 0x15, 0x00, // .....7..........
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0xf8, 0x00, 0x02, // .7..............
+ 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, 0x00, 0x9c, 0x5c, 0x00, // .._..=..........
+ 0x00, 0xf7, 0x0d, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x21, 0x41, 0x00, // .....=.......!A.
+ 0x00, 0x7e, 0x17, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x60, 0x35, 0x00, // .~...V.......`5.
+ 0x00, 0x9c, 0x5c, 0x00, 0x00, 0x21, 0x41, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, // .....!A..=......
+ 0x00, 0x95, 0x22, 0x00, 0x00, 0xe7, 0x15, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, // .."......=......
+ 0x00, 0x05, 0x47, 0x00, 0x00, 0x2e, 0x12, 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // ..G......X......
+ 0x00, 0x28, 0x3d, 0x00, 0x00, 0x60, 0x35, 0x00, 0x00, 0x95, 0x22, 0x00, 0x00, 0x02, 0x00, 0x00, // .(=..`5...".....
+ 0x00, 0x05, 0x47, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x28, 0x3d, 0x00, 0x00, 0x38, 0x00, 0x01, // ..G......(=..8..
+ 0x00, 0x36, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd2, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, // .6..............
+ 0x00, 0xbb, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc6, 0x0e, 0x00, // .....7..........
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xc7, 0x0e, 0x00, 0x00, 0x37, 0x00, 0x03, // .7...........7..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xd9, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x6d, 0x51, 0x00, // .............mQ.
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x48, 0x1b, 0x00, 0x00, 0xc6, 0x0e, 0x00, // .=.......H......
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x5e, 0x40, 0x00, 0x00, 0xc7, 0x0e, 0x00, // .=.......^@.....
+ 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x3f, 0x00, 0x00, 0xd9, 0x0e, 0x00, // .=.......e?.....
+ 0x00, 0x0c, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x5a, 0x42, 0x00, 0x00, 0x01, 0x00, 0x00, // .........ZB.....
+ 0x00, 0x2e, 0x00, 0x00, 0x00, 0x48, 0x1b, 0x00, 0x00, 0x5e, 0x40, 0x00, 0x00, 0x65, 0x3f, 0x00, // .....H...^@..e?.
+ 0x00, 0xfe, 0x00, 0x02, 0x00, 0x5a, 0x42, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // .....ZB..8...6..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, // .....5..........
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0xdd, 0x0e, 0x00, 0x00, 0xf8, 0x00, 0x02, // .7..............
+ 0x00, 0xb1, 0x24, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x75, 0x56, 0x00, // ..$..=.......uV.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, // .....=........M.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5a, 0x38, 0x00, // .....=.......Z8.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6d, 0x38, 0x00, // .....=.......m8.
+ 0x00, 0xdd, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd9, 0x20, 0x00, // .....P........ .
+ 0x00, 0x75, 0x56, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x5a, 0x38, 0x00, 0x00, 0x6d, 0x38, 0x00, // .uV...M..Z8..m8.
+ 0x00, 0xfe, 0x00, 0x02, 0x00, 0xd9, 0x20, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, // ...... ..8...6..
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0xcc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, // .............}..
+ 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xf5, 0x25, 0x00, 0x00, 0x37, 0x00, 0x03, // .7........%..7..
+ 0x00, 0x95, 0x02, 0x00, 0x00, 0x6f, 0x59, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, // .....oY..7......
+ 0x00, 0xe9, 0x4d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x1d, 0x57, 0x00, 0x00, 0x3b, 0x00, 0x04, // ..M.......W..;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0xc1, 0x47, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......G......;..
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x31, 0x5a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // .y...1Z......;..
+ 0x00, 0x13, 0x03, 0x00, 0x00, 0xe2, 0x23, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......#......;..
+ 0x00, 0x90, 0x02, 0x00, 0x00, 0xe3, 0x23, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......#......;..
+ 0x00, 0x8a, 0x02, 0x00, 0x00, 0xe4, 0x23, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......#......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe5, 0x23, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......#......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0x1b, 0x24, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, // ......$......;..
+ 0x00, 0x9a, 0x02, 0x00, 0x00, 0xb5, 0x21, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......!......>..
+ 0x00, 0xc1, 0x47, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x39, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, // ..G......9......
+ 0x00, 0xa0, 0x11, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, 0xc1, 0x47, 0x00, 0x00, 0x3d, 0x00, 0x04, // .....5....G..=..
+ 0x00, 0xfc, 0x01, 0x00, 0x00, 0x80, 0x44, 0x00, 0x00, 0x14, 0x11, 0x00, 0x00, 0x3e, 0x00, 0x03, // ......D......>..
+ 0x00, 0x31, 0x5a, 0x00, 0x00, 0x80, 0x44, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x96, 0x00, 0x00, // .1Z...D..=......
+ 0x00, 0xe0, 0x2f, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe2, 0x23, 0x00, // ../..P...>....#.
+ 0x00, 0xe0, 0x2f, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x76, 0x24, 0x00, // ../..=.......v$.
+ 0x00, 0x6f, 0x59, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x95, 0x3b, 0x00, // .oY..O........;.
+ 0x00, 0x76, 0x24, 0x00, 0x00, 0x76, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .v$..v$.........
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe3, 0x23, 0x00, 0x00, 0x95, 0x3b, 0x00, 0x00, 0x41, 0x00, 0x06, // .>....#...;..A..
+ 0x00, 0x8b, 0x02, 0x00, 0x00, 0xdd, 0x4b, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x2f, 0x0a, 0x00, // ......K..B.../..
+ 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x79, 0x54, 0x00, // .....=.......yT.
+ 0x00, 0xdd, 0x4b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe4, 0x23, 0x00, 0x00, 0x79, 0x54, 0x00, // ..K..>....#..yT.
+ 0x00, 0x39, 0x00, 0x08, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0b, 0x19, 0x00, 0x00, 0xce, 0x14, 0x00, // .9..............
+ 0x00, 0x31, 0x5a, 0x00, 0x00, 0xe2, 0x23, 0x00, 0x00, 0xe3, 0x23, 0x00, 0x00, 0xe4, 0x23, 0x00, // .1Z...#...#...#.
+ 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xbd, 0x0e, 0x00, 0x00, 0x0b, 0x19, 0x00, // .Q..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe2, 0x19, 0x00, // ................
+ 0x00, 0xbd, 0x0e, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xe4, 0x3e, 0x00, // ..............>.
+ 0x00, 0xbd, 0x0e, 0x00, 0x00, 0xe2, 0x19, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, // ................
+ 0x00, 0xf5, 0x5b, 0x00, 0x00, 0xe4, 0x3e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, // ..[...>.........
+ 0x00, 0x0d, 0x00, 0x00, 0x00, 0x69, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, // .....i.......+..
+ 0x00, 0xf5, 0x5b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, // ..[..........P..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0x6b, 0x58, 0x00, 0x00, 0x69, 0x0e, 0x00, 0x00, 0x69, 0x0e, 0x00, // .....kX..i...i..
+ 0x00, 0x69, 0x0e, 0x00, 0x00, 0x69, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe5, 0x23, 0x00, // .i...i...>....#.
+ 0x00, 0x7a, 0x0b, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1b, 0x24, 0x00, 0x00, 0x04, 0x05, 0x00, // .z...>....$.....
+ 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb5, 0x21, 0x00, 0x00, 0x6b, 0x58, 0x00, 0x00, 0x39, 0x00, 0x07, // .>....!..kX..9..
+ 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb0, 0x1f, 0x00, 0x00, 0xd2, 0x0c, 0x00, 0x00, 0xe5, 0x23, 0x00, // ..............#.
+ 0x00, 0x1b, 0x24, 0x00, 0x00, 0xb5, 0x21, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xe9, 0x4d, 0x00, // ..$...!..>....M.
+ 0x00, 0xb0, 0x1f, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // .........8....
+};
+static const uint8_t fs_texture_sdf_dx9[411] =
+{
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, // FSH........s_tex
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, // Color0......u_pa
- 0x72, 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0xe8, 0x01, 0x00, 0x03, 0xff, 0xff, // rams............
- 0xfe, 0xff, 0x2e, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, // ....CTAB........
- 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
- 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, // |...D...........
- 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // P.......`.......
- 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, 0x74, 0x65, // ....l.......s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, // xColor..........
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // ........u_params
- 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....ps_3_0.Micro
- 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
- 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, // ader Compiler 9.
- 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0x51, 0x00, 0x00, 0x05, // 29.952.3111.Q...
- 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, // .......?........
- 0x00, 0x00, 0x00, 0x3f, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0xbf, // ...?Q...........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, // .......?........
- 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, // ................
- 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xd0, 0xa0, // ................
- 0x00, 0x00, 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0xa0, // ................
- 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, 0xa0, // _...............
- 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x55, 0x81, 0x00, 0x00, 0x00, 0x80, // ..........U.....
- 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0xe1, 0x80, // X...............
- 0x00, 0x00, 0xe4, 0x80, 0x0a, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xaa, 0x80, // ................
- 0x00, 0x00, 0x55, 0x80, 0x0b, 0x00, 0x00, 0x03, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, // ..U.............
- 0x01, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x02, 0x00, 0x00, 0x80, // ................
- 0x01, 0x00, 0xaa, 0xa0, 0x5b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, // ....[...........
- 0x5c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, // ................
- 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0xaa, 0x8b, 0x00, 0x00, 0x55, 0x8b, 0x06, 0x00, 0x00, 0x02, // ..........U.....
- 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x11, 0x80, // ......U.........
- 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0xff, 0xa0, 0x04, 0x00, 0x00, 0x04, // ......U.........
- 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x40, 0xa0, 0x02, 0x00, 0xaa, 0xa0, // ..........@.....
- 0xff, 0xff, 0x00, 0x00, 0x00, // .....
+ 0x72, 0x61, 0x6d, 0x73, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00, 0x6c, 0x01, 0x00, 0x00, 0x00, 0x03, // rams......l.....
+ 0xff, 0xff, 0xfe, 0xff, 0x2c, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x83, 0x00, // ....,.CTAB......
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, // ................
+ 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // ..|...D.........
+ 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, // ..P.......`.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x5f, // ......l.......s_
+ 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, // texColor........
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // ..........u_para
+ 0x6d, 0x73, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, // ms..............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, // ......ps_3_0.Mic
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, // rosoft (R) HLSL
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, // Shader Compiler
+ 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, 0x00, 0x00, // 10.1..Q.........
+ 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, // .?.......?......
+ 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // ................
+ 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, // ................
+ 0xd0, 0xa0, 0x00, 0x00, 0xc4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, // ................
+ 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, // .._.............
+ 0xe4, 0xa0, 0x5b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x80, 0x5c, 0x00, // ..[.............
+ 0x00, 0x02, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x02, 0x80, 0x00, 0x00, 0xaa, 0x8b, 0x00, 0x00, 0x55, 0x8b, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, // ........U.......
+ 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, // ....U...........
+ 0x00, 0x80, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0xaa, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, // ....U...........
+ 0x1f, 0x80, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, // ...........
};
-static const uint8_t fs_texture_sdf_dx11[708] =
+static const uint8_t fs_texture_sdf_dx11[558] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x02, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
0x61, 0x6d, 0x73, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // ams.......s_texC
- 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x94, 0x02, 0x44, 0x58, 0x42, 0x43, // olor0.......DXBC
- 0xfa, 0x89, 0x1e, 0xd3, 0xdd, 0xf3, 0x5c, 0xf1, 0xc3, 0xff, 0x7f, 0xa1, 0xd8, 0xa1, 0x03, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
- 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, // ........ISGNl...
- 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........P.......
- 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
- 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
- 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........b.......
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // ................
- 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
- 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, // R.TEXCOORD..OSGN
- 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
- 0x53, 0x48, 0x44, 0x52, 0xb8, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, // SHDR....@...n...
- 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // Y...F. .........
- 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, // Z....`......X...
- 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, // .p......UU..b...
- 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // 2.......e.... ..
- 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, // ....h.......H...
- 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ........F.......
- 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // F~.......`......
- 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, // .. .........4...
- 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, 0x52, 0x00, 0x10, 0x00, // ........3...R...
- 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x10, 0x00, // ....V...........
- 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....4...........
- 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // *...............
- 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x0b, 0x00, 0x00, 0x05, // .....@..........
- 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // "...............
- 0x0c, 0x00, 0x00, 0x05, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, // ....B...........
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........".......
- 0x2a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, // *...............
- 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, // ................
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ..... ..........
- 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, // .........@.....?
- 0x32, 0x00, 0x00, 0x0f, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, // 2.... ..........
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0xbf, // .....@..........
- 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, // .........@.....?
- 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x3e, 0x00, 0x00, 0x01, // ...?...?...?>...
- 0x00, 0x00, 0x10, 0x00, // ....
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x44, 0x58, // olor0.........DX
+ 0x42, 0x43, 0xcc, 0xff, 0xbd, 0x63, 0x8b, 0x9e, 0xee, 0x37, 0x7b, 0x13, 0xc3, 0xb6, 0x5c, 0x48, // BC...c...7{....H
+ 0xab, 0xbe, 0x01, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, // ..............,.
+ 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, // ..........ISGNl.
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........P.....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, // ................
+ 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........b.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x03, // ................
+ 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, // ..SV_POSITION.CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, // LOR.TEXCOORD..OS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, // ......SV_TARGET.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x20, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, // ..SHDR ...@...H.
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5a, 0x00, 0x00, 0x03, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, // ..Z....`......X.
+ 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, // ...p......UU..b.
+ 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, // ..2.......e....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, // ......h.......H.
+ 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, // ..........F.....
+ 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, // ..F~.......`....
+ 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, // .... ...........
+ 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, // ..".............
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x05, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, // ......B.........
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, // ..........".....
+ 0x00, 0x00, 0x2a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, // ..*.............
+ 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x07, 0x12, 0x00, // ................
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, // ................
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, // ...........@....
+ 0x00, 0x3f, 0x36, 0x20, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // .?6 ... ........
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, // ......>.......
};
-static const uint8_t fs_texture_sdf_mtl[955] =
+static const uint8_t fs_texture_sdf_mtl[757] =
{
- 0x46, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xac, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // . float2 v_texc
- 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, // oord0;.};.struct
- 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, // xlatMtlShaderOu
- 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x67, // tput {. half4 g
+ 0x46, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0xd7, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, // ams..........usi
+ 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, // ng namespace met
+ 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // al;.struct xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, // tlShaderInput {.
+ 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // float3 v_texco
+ 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, // ord0;.};.struct
+ 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
+ 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, // put {. float4 g
0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, // l_FragColor;.};.
0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // struct xlatMtlSh
0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, // aderUniform {.
@@ -157,38 +418,25 @@ static const uint8_t fs_texture_sdf_mtl[955] =
0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x5b, 0x5b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, // xColor [[sampler
0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // (0)]]).{. xlatM
0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, // tlShaderOutput _
- 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, // mtl_o;. half4 t
- 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_1;. tmpva
- 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, 0x73, 0x5f, 0x74, 0x65, // r_1 = half4(s_te
- 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, // xColor.sample(_m
- 0x74, 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // tlsmp_s_texColor
- 0x2c, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // , (float2)(_mtl_
- 0x69, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x29, 0x2c, 0x20, // i.v_texcoord0),
- 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, // level(_mtl_u.u_p
- 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, // arams.x)));. ha
- 0x6c, 0x66, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, // lf tmpvar_2;. t
- 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x61, 0x78, 0x20, 0x28, // mpvar_2 = (max (
- 0x6d, 0x69, 0x6e, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x2c, // min (tmpvar_1.x,
- 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x79, 0x29, 0x2c, 0x20, 0x6d, 0x69, // tmpvar_1.y), mi
- 0x6e, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x20, 0x28, 0x74, 0x6d, 0x70, // n (. max (tmp
- 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // var_1.x, tmpvar_
- 0x31, 0x2e, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x2c, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 1.y). , tmpvar_
- 0x31, 0x2e, 0x7a, 0x29, 0x29, 0x20, 0x2d, 0x20, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x30, 0x2e, // 1.z)) - (half)0.
- 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, // 5);. _mtl_o.gl_
- 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x20, // FragColor = mix
- 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x29, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x31, // ((half4)float4(1
- 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, // .0, 1.0, 1.0, 1.
- 0x30, 0x29, 0x2c, 0x20, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x29, 0x66, 0x6c, 0x6f, 0x61, 0x74, // 0), (half4)float
- 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, // 4(0.0, 0.0, 0.0,
- 0x20, 0x31, 0x2e, 0x30, 0x29, 0x2c, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x20, 0x28, 0x28, 0x0a, // 1.0), clamp ((.
- 0x20, 0x20, 0x20, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x2f, 0x20, // (tmpvar_2 /
- 0x28, 0x61, 0x62, 0x73, 0x28, 0x64, 0x66, 0x64, 0x78, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // (abs(dfdx(tmpvar
- 0x5f, 0x32, 0x29, 0x29, 0x20, 0x2b, 0x20, 0x61, 0x62, 0x73, 0x28, 0x64, 0x66, 0x64, 0x79, 0x28, // _2)) + abs(dfdy(
- 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, // tmpvar_2)))).
- 0x2b, 0x20, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x30, 0x2e, 0x35, 0x29, 0x2c, 0x20, 0x28, 0x68, // + (half)0.5), (h
- 0x61, 0x6c, 0x66, 0x29, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x31, // alf)0.0, (half)1
- 0x2e, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, // .0));. return _
- 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mtl_o;.}...
+ 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // mtl_o;. float4
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, // tmpvar_1 = 0;.
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x73, 0x5f, 0x74, 0x65, 0x78, // tmpvar_1 = s_tex
+ 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x28, 0x5f, 0x6d, 0x74, // Color.sample(_mt
+ 0x6c, 0x73, 0x6d, 0x70, 0x5f, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, // lsmp_s_texColor,
+ 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x29, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // (float2)(_mtl_i
+ 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x78, 0x79, 0x29, // .v_texcoord0.xy)
+ 0x2c, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, // , level(_mtl_u.u
+ 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x78, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // _params.x));. _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, // mtl_o.gl_FragCol
+ 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x63, 0x6c, 0x61, 0x6d, // or = float4(clam
+ 0x70, 0x20, 0x28, 0x28, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x20, // p (((tmpvar_1.x
+ 0x2f, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x61, 0x62, 0x73, 0x28, 0x64, 0x66, 0x64, 0x78, // / . (abs(dfdx
+ 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x29, 0x29, 0x20, 0x2b, 0x20, // (tmpvar_1.x)) +
+ 0x61, 0x62, 0x73, 0x28, 0x64, 0x66, 0x64, 0x79, 0x28, 0x2d, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // abs(dfdy(-tmpvar
+ 0x5f, 0x31, 0x2e, 0x78, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x30, 0x2e, // _1.x))). ) + 0.
+ 0x35, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x3b, 0x0a, // 5), 0.0, 1.0));.
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, // return _mtl_o;
+ 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
};
extern const uint8_t* fs_texture_sdf_pssl;
extern const uint32_t fs_texture_sdf_pssl_size;
diff --git a/3rdparty/bgfx/tools/texturev/fs_texture_sdf.sc b/3rdparty/bgfx/tools/texturev/fs_texture_sdf.sc
index d8798abae37..b0c6fdc1d86 100644
--- a/3rdparty/bgfx/tools/texturev/fs_texture_sdf.sc
+++ b/3rdparty/bgfx/tools/texturev/fs_texture_sdf.sc
@@ -5,23 +5,16 @@ $input v_texcoord0, v_color0
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
-#include <bgfx_shader.sh>
+#include "common.sh"
SAMPLER2D(s_texColor, 0);
-uniform vec4 u_params;
-#define u_textureLod u_params.x
+void main()
+{
+ vec4 bgColor = vec4(0.0, 0.0, 0.0, 0.0);
+ vec4 fgColor = vec4(1.0, 1.0, 1.0, 1.0);
-float median(float r, float g, float b) {
- return max(min(r, g), min(max(r, g), b));
-}
-
-void main() {
- vec4 bgColor = vec4(1.0, 1.0, 1.0, 1.0);
- vec4 fgColor = vec4(0.0, 0.0, 0.0, 1.0);
-
- vec3 sample = texture2DLod(s_texColor, v_texcoord0, u_textureLod).rgb;
- float sigDist = median(sample.r, sample.g, sample.b) - 0.5;
- float opacity = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0);
- gl_FragColor = mix(bgColor, fgColor, opacity);
+ float sigDist = texture2DLod(s_texColor, v_texcoord0.xy, u_textureLod).x;
+ float opacity = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0);
+ gl_FragColor = mix(bgColor, fgColor, opacity);
}
diff --git a/3rdparty/bgfx/tools/texturev/texturev.cpp b/3rdparty/bgfx/tools/texturev/texturev.cpp
index 7c6d239707a..ff4d93311a9 100644
--- a/3rdparty/bgfx/tools/texturev/texturev.cpp
+++ b/3rdparty/bgfx/tools/texturev/texturev.cpp
@@ -4,11 +4,19 @@
*/
#include "common.h"
+
#include <bgfx/bgfx.h>
+
#include <bx/commandline.h>
+#include <bx/easing.h>
+#include <bx/file.h>
+#include <bx/filepath.h>
+#include <bx/math.h>
#include <bx/os.h>
-#include <bx/string.h>
+#include <bx/process.h>
+#include <bx/settings.h>
#include <bx/uint32_t.h>
+
#include <entry/entry.h>
#include <entry/input.h>
#include <entry/cmd.h>
@@ -17,23 +25,35 @@
#include <dirent.h>
-#include <bx/crtimpl.h>
-
#include <tinystl/allocator.h>
#include <tinystl/vector.h>
-#include <string>
namespace stl = tinystl;
+#include <string>
+#include <algorithm>
-#include "image.h"
+#include <bimg/decode.h>
#include <bgfx/embedded_shader.h>
#include "vs_texture.bin.h"
+#include "vs_texture_cube.bin.h"
+
#include "fs_texture.bin.h"
#include "fs_texture_array.bin.h"
-#include "vs_texture_cube.bin.h"
#include "fs_texture_cube.bin.h"
+#include "fs_texture_cube2.bin.h"
#include "fs_texture_sdf.bin.h"
+#include "fs_texture_msdf.bin.h"
+#include "fs_texture_3d.bin.h"
+
+#define BACKGROUND_VIEW_ID 0
+#define IMAGE_VIEW_ID 1
+
+#define BGFX_TEXTUREV_VERSION_MAJOR 1
+#define BGFX_TEXTUREV_VERSION_MINOR 0
+
+const float kEvMin = -10.0f;
+const float kEvMax = 20.0f;
static const bgfx::EmbeddedShader s_embeddedShaders[] =
{
@@ -42,7 +62,10 @@ static const bgfx::EmbeddedShader s_embeddedShaders[] =
BGFX_EMBEDDED_SHADER(fs_texture_array),
BGFX_EMBEDDED_SHADER(vs_texture_cube),
BGFX_EMBEDDED_SHADER(fs_texture_cube),
+ BGFX_EMBEDDED_SHADER(fs_texture_cube2),
BGFX_EMBEDDED_SHADER(fs_texture_sdf),
+ BGFX_EMBEDDED_SHADER(fs_texture_msdf),
+ BGFX_EMBEDDED_SHADER(fs_texture_3d),
BGFX_EMBEDDED_SHADER_END()
};
@@ -57,7 +80,9 @@ static const char* s_supportedExt[] =
"jpeg",
"hdr",
"ktx",
+ "pgm",
"png",
+ "ppm",
"psd",
"pvr",
"tga",
@@ -69,6 +94,19 @@ struct Binding
{
App,
View,
+ Help,
+
+ Count
+ };
+};
+
+struct Geometry
+{
+ enum Enum
+ {
+ Quad,
+ Cross,
+ Hexagon,
Count
};
@@ -76,42 +114,76 @@ struct Binding
static const InputBinding s_bindingApp[] =
{
- { entry::Key::Esc, entry::Modifier::None, 1, NULL, "exit" },
+ { entry::Key::KeyQ, entry::Modifier::None, 1, NULL, "exit" },
{ entry::Key::KeyF, entry::Modifier::None, 1, NULL, "graphics fullscreen" },
INPUT_BINDING_END
};
+const char* s_resetCmd =
+ "view zoom 1.0\n"
+ "view rotate 0\n"
+ "view cubemap\n"
+ "view pan\n"
+ "view ev\n"
+ ;
+
static const InputBinding s_bindingView[] =
{
- { entry::Key::Comma, entry::Modifier::None, 1, NULL, "view mip prev" },
- { entry::Key::Period, entry::Modifier::None, 1, NULL, "view mip next" },
- { entry::Key::Comma, entry::Modifier::LeftShift, 1, NULL, "view mip" },
- { entry::Key::Comma, entry::Modifier::RightShift, 1, NULL, "view mip" },
+ { entry::Key::Esc, entry::Modifier::None, 1, NULL, "exit" },
+
+ { entry::Key::Comma, entry::Modifier::None, 1, NULL, "view mip prev" },
+ { entry::Key::Period, entry::Modifier::None, 1, NULL, "view mip next" },
+ { entry::Key::Comma, entry::Modifier::LeftShift, 1, NULL, "view mip" },
+ { entry::Key::Comma, entry::Modifier::RightShift, 1, NULL, "view mip" },
+
+ { entry::Key::Slash, entry::Modifier::None, 1, NULL, "view filter" },
+
+ { entry::Key::Key1, entry::Modifier::None, 1, NULL, "view zoom 1.0\n"
+ "view fit\n" },
+
+ { entry::Key::Key0, entry::Modifier::None, 1, NULL, s_resetCmd },
+ { entry::Key::Plus, entry::Modifier::None, 1, NULL, "view zoom +0.1" },
+ { entry::Key::Minus, entry::Modifier::None, 1, NULL, "view zoom -0.1" },
- { entry::Key::Slash, entry::Modifier::None, 1, NULL, "view filter" },
+ { entry::Key::KeyZ, entry::Modifier::None, 1, NULL, "view rotate -90" },
+ { entry::Key::KeyZ, entry::Modifier::LeftShift, 1, NULL, "view rotate +90" },
- { entry::Key::Key0, entry::Modifier::None, 1, NULL, "view zoom 1.0" },
- { entry::Key::Plus, entry::Modifier::None, 1, NULL, "view zoom +0.1" },
- { entry::Key::Minus, entry::Modifier::None, 1, NULL, "view zoom -0.1" },
+ { entry::Key::Up, entry::Modifier::None, 1, NULL, "view pan\n"
+ "view file-up" },
+ { entry::Key::Down, entry::Modifier::None, 1, NULL, "view pan\n"
+ "view file-down" },
+ { entry::Key::PageUp, entry::Modifier::None, 1, NULL, "view pan\n"
+ "view file-pgup" },
+ { entry::Key::PageDown, entry::Modifier::None, 1, NULL, "view pan\n"
+ "view file-pgdown" },
- { entry::Key::Up, entry::Modifier::None, 1, NULL, "view file-up" },
- { entry::Key::Down, entry::Modifier::None, 1, NULL, "view file-down" },
- { entry::Key::PageUp, entry::Modifier::None, 1, NULL, "view file-pgup" },
- { entry::Key::PageDown, entry::Modifier::None, 1, NULL, "view file-pgdown" },
+ { entry::Key::Left, entry::Modifier::None, 1, NULL, "view layer prev" },
+ { entry::Key::Right, entry::Modifier::None, 1, NULL, "view layer next" },
- { entry::Key::Left, entry::Modifier::None, 1, NULL, "view layer prev" },
- { entry::Key::Right, entry::Modifier::None, 1, NULL, "view layer next" },
+ { entry::Key::KeyR, entry::Modifier::None, 1, NULL, "view rgb r" },
+ { entry::Key::KeyG, entry::Modifier::None, 1, NULL, "view rgb g" },
+ { entry::Key::KeyB, entry::Modifier::None, 1, NULL, "view rgb b" },
+ { entry::Key::KeyA, entry::Modifier::None, 1, NULL, "view rgb a" },
- { entry::Key::KeyR, entry::Modifier::None, 1, NULL, "view rgb r" },
- { entry::Key::KeyG, entry::Modifier::None, 1, NULL, "view rgb g" },
- { entry::Key::KeyB, entry::Modifier::None, 1, NULL, "view rgb b" },
- { entry::Key::KeyA, entry::Modifier::None, 1, NULL, "view rgb a" },
+ { entry::Key::KeyI, entry::Modifier::None, 1, NULL, "view info" },
- { entry::Key::KeyH, entry::Modifier::None, 1, NULL, "view help" },
+ { entry::Key::KeyH, entry::Modifier::None, 1, NULL, "view help" },
- { entry::Key::KeyS, entry::Modifier::None, 1, NULL, "view sdf" },
+ { entry::Key::Return, entry::Modifier::None, 1, NULL, "view files" },
+ { entry::Key::KeyS, entry::Modifier::None, 1, NULL, "view sdf" },
+
+ { entry::Key::Space, entry::Modifier::None, 1, NULL, "view geo\n"
+ "view pan\n" },
+
+ INPUT_BINDING_END
+};
+
+static const InputBinding s_bindingHelp[] =
+{
+ { entry::Key::Esc, entry::Modifier::None, 1, NULL, "view help" },
+ { entry::Key::KeyH, entry::Modifier::None, 1, NULL, "view help" },
INPUT_BINDING_END
};
@@ -119,6 +191,7 @@ static const char* s_bindingName[] =
{
"App",
"View",
+ "Help",
};
BX_STATIC_ASSERT(Binding::Count == BX_COUNTOF(s_bindingName) );
@@ -126,23 +199,41 @@ static const InputBinding* s_binding[] =
{
s_bindingApp,
s_bindingView,
+ s_bindingHelp,
};
BX_STATIC_ASSERT(Binding::Count == BX_COUNTOF(s_binding) );
struct View
{
View()
- : m_fileIndex(0)
+ : m_cubeMapGeo(Geometry::Quad)
+ , m_fileIndex(0)
, m_scaleFn(0)
, m_mip(0)
, m_layer(0)
, m_abgr(UINT32_MAX)
+ , m_ev(0.0f)
+ , m_evMin(kEvMin)
+ , m_evMax(kEvMax)
+ , m_posx(0.0f)
+ , m_posy(0.0f)
+ , m_angx(0.0f)
+ , m_angy(0.0f)
, m_zoom(1.0f)
+ , m_angle(0.0f)
+ , m_orientation(0.0f)
+ , m_flipH(0.0f)
+ , m_flipV(0.0f)
+ , m_transitionTime(1.0f)
, m_filter(true)
+ , m_fit(true)
, m_alpha(false)
, m_help(false)
+ , m_info(false)
+ , m_files(false)
, m_sdf(false)
{
+ load();
}
~View()
@@ -152,69 +243,158 @@ struct View
{
if (_argc >= 2)
{
- if (0 == strcmp(_argv[1], "mip") )
+ if (0 == bx::strCmp(_argv[1], "mip") )
{
if (_argc >= 3)
{
uint32_t mip = m_mip;
- if (0 == strcmp(_argv[2], "next") )
+ if (0 == bx::strCmp(_argv[2], "next") )
{
++mip;
}
- else if (0 == strcmp(_argv[2], "prev") )
+ else if (0 == bx::strCmp(_argv[2], "prev") )
{
--mip;
}
- else if (0 == strcmp(_argv[2], "last") )
+ else if (0 == bx::strCmp(_argv[2], "last") )
{
mip = INT32_MAX;
}
else
{
- mip = atoi(_argv[2]);
+ bx::fromString(&mip, _argv[2]);
}
- m_mip = bx::uint32_iclamp(mip, 0, m_info.numMips-1);
+ m_mip = bx::uint32_iclamp(mip, 0, m_textureInfo.numMips-1);
}
else
{
m_mip = 0;
}
}
- if (0 == strcmp(_argv[1], "layer") )
+ else if (0 == bx::strCmp(_argv[1], "layer") )
{
if (_argc >= 3)
{
uint32_t layer = m_layer;
- if (0 == strcmp(_argv[2], "next") )
+ if (0 == bx::strCmp(_argv[2], "next") )
{
++layer;
}
- else if (0 == strcmp(_argv[2], "prev") )
+ else if (0 == bx::strCmp(_argv[2], "prev") )
{
--layer;
}
- else if (0 == strcmp(_argv[2], "last") )
+ else if (0 == bx::strCmp(_argv[2], "last") )
{
layer = INT32_MAX;
}
else
{
- layer = atoi(_argv[2]);
+ bx::fromString(&layer, _argv[2]);
}
- m_layer = bx::uint32_iclamp(layer, 0, m_info.numLayers-1);
+ m_layer = bx::uint32_iclamp(layer, 0, m_textureInfo.numLayers-1);
}
else
{
m_layer = 0;
}
}
- else if (0 == strcmp(_argv[1], "zoom") )
+ else if (0 == bx::strCmp(_argv[1], "ev") )
{
if (_argc >= 3)
{
- float zoom = (float)atof(_argv[2]);
+ float ev = m_ev;
+ bx::fromString(&ev, _argv[2]);
+
+ m_ev = bx::fclamp(ev, kEvMin, kEvMax);
+ }
+ else
+ {
+ m_ev = 0.0f;
+ }
+ }
+ else if (0 == bx::strCmp(_argv[1], "pan") )
+ {
+ if (_argc >= 3)
+ {
+ if (_argc >= 4)
+ {
+ float yy;
+ bx::fromString(&yy, _argv[3]);
+ if (_argv[3][0] == '+'
+ || _argv[3][0] == '-')
+ {
+ m_posy += yy;
+ }
+ else
+ {
+ m_posy = yy;
+ }
+ }
+
+ float xx;
+ bx::fromString(&xx, _argv[2]);
+ if (_argv[2][0] == '+'
+ || _argv[2][0] == '-')
+ {
+ m_posx += xx;
+ }
+ else
+ {
+ m_posx = xx;
+ }
+ }
+ else
+ {
+ m_posx = 0.0f;
+ m_posy = 0.0f;
+ }
+ }
+ else if (0 == bx::strCmp(_argv[1], "cubemap") )
+ {
+ if (_argc >= 3)
+ {
+ if (_argc >= 4)
+ {
+ float yy;
+ bx::fromString(&yy, _argv[3]);
+ if (_argv[3][0] == '+'
+ || _argv[3][0] == '-')
+ {
+ m_angy += bx::toRad(yy);
+ }
+ else
+ {
+ m_angy = bx::toRad(yy);
+ }
+ }
+
+ float xx;
+ bx::fromString(&xx, _argv[2]);
+ if (_argv[2][0] == '+'
+ || _argv[2][0] == '-')
+ {
+ m_angx += bx::toRad(xx);
+ }
+ else
+ {
+ m_angx = bx::toRad(xx);
+ }
+ }
+ else
+ {
+ m_angx = 0.0f;
+ m_angy = 0.0f;
+ }
+ }
+ else if (0 == bx::strCmp(_argv[1], "zoom") )
+ {
+ if (_argc >= 3)
+ {
+ float zoom;
+ bx::fromString(&zoom, _argv[2]);
if (_argv[2][0] == '+'
|| _argv[2][0] == '-')
@@ -226,35 +406,118 @@ struct View
m_zoom = zoom;
}
- m_zoom = bx::fclamp(m_zoom, 0.001f, 10.0f);
+ m_zoom = bx::fclamp(m_zoom, 0.01f, 10.0f);
}
else
{
m_zoom = 1.0f;
}
}
- else if (0 == strcmp(_argv[1], "filter") )
+ else if (0 == bx::strCmp(_argv[1], "rotate") )
+ {
+ if (_argc >= 3)
+ {
+ float angle;
+ bx::fromString(&angle, _argv[2]);
+
+ if (_argv[2][0] == '+'
+ || _argv[2][0] == '-')
+ {
+ m_angle += bx::toRad(angle);
+ }
+ else
+ {
+ m_angle = bx::toRad(angle);
+ }
+
+ m_angle = bx::fwrap(m_angle, bx::kPi*2.0f);
+ }
+ else
+ {
+ m_angle = 0.0f;
+ }
+ }
+ else if (0 == bx::strCmp(_argv[1], "orientation") )
+ {
+ if (_argc >= 3)
+ {
+ float* dst = NULL;
+ char axis = bx::toLower(_argv[2][0]);
+ switch (axis)
+ {
+ case 'x': dst = &m_flipV; break;
+ case 'y': dst = &m_flipH; break;
+ case 'z': dst = &m_orientation; break;
+ default: break;
+ }
+
+ if (NULL != dst)
+ {
+ if (_argc >= 4)
+ {
+ float angle;
+ bx::fromString(&angle, _argv[3]);
+ *dst = bx::toRad(angle);
+ }
+ else
+ {
+ *dst = 0.0f;
+ }
+ }
+ }
+ else
+ {
+ m_flipH = 0.0f;
+ m_flipV = 0.0f;
+ m_orientation = 0.0f;
+ }
+ }
+ else if (0 == bx::strCmp(_argv[1], "transition") )
+ {
+ if (_argc >= 3)
+ {
+ float time;
+ bx::fromString(&time, _argv[2]);
+ m_transitionTime = bx::fclamp(time, 0.0f, 5.0f);
+ }
+ else
+ {
+ m_transitionTime = 1.0f;
+ }
+ }
+ else if (0 == bx::strCmp(_argv[1], "filter") )
{
if (_argc >= 3)
{
- m_filter = bx::toBool(_argv[2]);
+ bx::fromString(&m_filter, _argv[2]);
}
else
{
m_filter ^= true;
}
}
- else if (0 == strcmp(_argv[1], "file-up") )
+ else if (0 == bx::strCmp(_argv[1], "fit") )
+ {
+ if (_argc >= 3)
+ {
+ bx::fromString(&m_fit, _argv[2]);
+ }
+ else
+ {
+ m_fit ^= true;
+ }
+ }
+ else if (0 == bx::strCmp(_argv[1], "file-up") )
{
m_fileIndex = bx::uint32_satsub(m_fileIndex, 1);
}
- else if (0 == strcmp(_argv[1], "file-down") )
+ else if (0 == bx::strCmp(_argv[1], "file-down") )
{
uint32_t numFiles = bx::uint32_satsub(uint32_t(m_fileList.size() ), 1);
++m_fileIndex;
m_fileIndex = bx::uint32_min(m_fileIndex, numFiles);
}
- else if (0 == strcmp(_argv[1], "rgb") )
+ else if (0 == bx::strCmp(_argv[1], "rgb") )
{
if (_argc >= 3)
{
@@ -281,45 +544,86 @@ struct View
m_alpha = false;
}
}
- else if (0 == strcmp(_argv[1], "sdf") )
+ else if (0 == bx::strCmp(_argv[1], "sdf") )
{
m_sdf ^= true;
}
- else if (0 == strcmp(_argv[1], "help") )
+ else if (0 == bx::strCmp(_argv[1], "geo") )
+ {
+ if (_argc >= 3)
+ {
+ if (bx::toLower(_argv[2][0]) == 'c')
+ {
+ m_cubeMapGeo = Geometry::Cross;
+ }
+ else if (bx::toLower(_argv[2][0]) == 'h')
+ {
+ m_cubeMapGeo = Geometry::Hexagon;
+ }
+ else
+ {
+ m_cubeMapGeo = Geometry::Quad;
+ }
+ }
+ else
+ {
+ m_cubeMapGeo = Geometry::Enum( (m_cubeMapGeo + 1) % Geometry::Count);
+ }
+ }
+ else if (0 == bx::strCmp(_argv[1], "help") )
{
m_help ^= true;
}
+ else if (0 == bx::strCmp(_argv[1], "save") )
+ {
+ save();
+ }
+ else if (0 == bx::strCmp(_argv[1], "info") )
+ {
+ m_info ^= true;
+ }
+ else if (0 == bx::strCmp(_argv[1], "files") )
+ {
+ m_files ^= true;
+ }
}
return 0;
}
- void updateFileList(const char* _path, const char* _fileName = "")
+ static bool sortNameAscending(const std::string& _lhs, const std::string& _rhs)
{
- std::string path = _path;
+ return 0 > bx::strCmpV(_lhs.c_str(), _rhs.c_str() );
+ }
- DIR* dir = opendir(_path);
+ void updateFileList(const bx::FilePath& _filePath)
+ {
+ DIR* dir = opendir(_filePath.get() );
if (NULL == dir)
{
- path = ".";
+ m_path = _filePath.getPath();
+ dir = opendir(m_path.get() );
+ }
+ else
+ {
+ m_path = _filePath;
}
- dir = opendir(path.c_str() );
if (NULL != dir)
{
for (dirent* item = readdir(dir); NULL != item; item = readdir(dir) )
{
if (0 == (item->d_type & DT_DIR) )
{
- const char* ext = strrchr(item->d_name, '.');
+ const char* ext = bx::strRFind(item->d_name, '.');
if (NULL != ext)
{
ext += 1;
bool supported = false;
for (uint32_t ii = 0; ii < BX_COUNTOF(s_supportedExt); ++ii)
{
- if (0 == bx::strincmp(ext, s_supportedExt[ii]) )
+ if (0 == bx::strCmpI(ext, s_supportedExt[ii]) )
{
supported = true;
break;
@@ -328,38 +632,109 @@ struct View
if (supported)
{
- if (0 == strcmp(_fileName, item->d_name) )
- {
- m_fileIndex = uint32_t(m_fileList.size() );
- }
-
- std::string name = path;
- char ch = name[name.size()-1];
- name += '/' == ch || '\\' == ch ? "" : "/";
- name += item->d_name;
- m_fileList.push_back(name);
+ m_fileList.push_back(item->d_name);
}
}
}
}
+ std::sort(m_fileList.begin(), m_fileList.end(), sortNameAscending);
+
+ m_fileIndex = 0;
+ uint32_t idx = 0;
+ for (FileList::const_iterator it = m_fileList.begin(); it != m_fileList.end(); ++it, ++idx)
+ {
+ if (0 == bx::strCmpI(it->c_str(), _filePath.getFileName() ) )
+ {
+ // If it is case-insensitive match then might be correct one, but keep
+ // searching.
+ m_fileIndex = idx;
+
+ if (0 == bx::strCmp(it->c_str(), _filePath.getFileName() ) )
+ {
+ // If it is exact match we're done.
+ break;
+ }
+ }
+ }
+
closedir(dir);
}
}
+ void load()
+ {
+ bx::FilePath filePath(bx::Dir::Home);
+ filePath.join(".config/bgfx/texturev.ini");
+
+ bx::Settings settings(entry::getAllocator() );
+
+ bx::FileReader reader;
+ if (bx::open(&reader, filePath) )
+ {
+ bx::read(&reader, settings);
+ bx::close(&reader);
+
+ if (!bx::fromString(&m_transitionTime, settings.get("view/transition") ) )
+ {
+ m_transitionTime = 1.0f;
+ }
+ }
+ }
+
+ void save()
+ {
+ bx::FilePath filePath(bx::Dir::Home);
+ filePath.join(".config/bgfx/texturev.ini");
+
+ if (bx::makeAll(filePath.getPath() ) )
+ {
+ bx::Settings settings(entry::getAllocator() );
+
+ char tmp[256];
+ bx::toString(tmp, sizeof(tmp), m_transitionTime);
+ settings.set("view/transition", tmp);
+
+ bx::FileWriter writer;
+ if (bx::open(&writer, filePath) )
+ {
+ bx::write(&writer, settings);
+ bx::close(&writer);
+ }
+ }
+ }
+
+ bx::FilePath m_path;
+
typedef stl::vector<std::string> FileList;
FileList m_fileList;
- bgfx::TextureInfo m_info;
+ bgfx::TextureInfo m_textureInfo;
+ Geometry::Enum m_cubeMapGeo;
uint32_t m_fileIndex;
uint32_t m_scaleFn;
uint32_t m_mip;
uint32_t m_layer;
uint32_t m_abgr;
+ float m_ev;
+ float m_evMin;
+ float m_evMax;
+ float m_posx;
+ float m_posy;
+ float m_angx;
+ float m_angy;
float m_zoom;
+ float m_angle;
+ float m_orientation;
+ float m_flipH;
+ float m_flipV;
+ float m_transitionTime;
bool m_filter;
+ bool m_fit;
bool m_alpha;
bool m_help;
+ bool m_info;
+ bool m_files;
bool m_sdf;
};
@@ -369,12 +744,13 @@ int cmdView(CmdContext* /*_context*/, void* _userData, int _argc, char const* co
return view->cmd(_argc, _argv);
}
-struct PosUvColorVertex
+struct PosUvwColorVertex
{
float m_x;
float m_y;
float m_u;
float m_v;
+ float m_w;
uint32_t m_abgr;
static void init()
@@ -382,94 +758,180 @@ struct PosUvColorVertex
ms_decl
.begin()
.add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float)
- .add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float)
+ .add(bgfx::Attrib::TexCoord0, 3, bgfx::AttribType::Float)
.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
.end();
}
+ void set(float _x, float _y, float _u, float _v, float _w, uint32_t _abgr)
+ {
+ m_x = _x;
+ m_y = _y;
+ m_u = _u;
+ m_v = _v;
+ m_w = _w;
+ m_abgr = _abgr;
+ }
+
static bgfx::VertexDecl ms_decl;
};
-bgfx::VertexDecl PosUvColorVertex::ms_decl;
+bgfx::VertexDecl PosUvwColorVertex::ms_decl;
+
+static uint32_t addQuad(uint16_t* _indices, uint16_t _idx0, uint16_t _idx1, uint16_t _idx2, uint16_t _idx3)
+{
+ _indices[0] = _idx0;
+ _indices[1] = _idx3;
+ _indices[2] = _idx1;
+
+ _indices[3] = _idx1;
+ _indices[4] = _idx3;
+ _indices[5] = _idx2;
+
+ return 6;
+}
-bool screenQuad(int32_t _x, int32_t _y, int32_t _width, uint32_t _height, uint32_t _abgr, bool _originBottomLeft = false)
+void setGeometry(
+ Geometry::Enum _type
+ , int32_t _x
+ , int32_t _y
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _abgr
+ , float _maxu = 1.0f
+ , float _maxv = 1.0f
+ )
{
- if (6 == bgfx::getAvailTransientVertexBuffer(6, PosUvColorVertex::ms_decl) )
+ if (Geometry::Quad == _type)
{
- bgfx::TransientVertexBuffer vb;
- bgfx::allocTransientVertexBuffer(&vb, 6, PosUvColorVertex::ms_decl);
- PosUvColorVertex* vertex = (PosUvColorVertex*)vb.data;
-
- const float widthf = float(_width);
- const float heightf = float(_height);
-
- const float minx = float(_x);
- const float miny = float(_y);
- const float maxx = minx+widthf;
- const float maxy = miny+heightf;
-
- float m_halfTexel = 0.0f;
-
- const float texelHalfW = m_halfTexel/widthf;
- const float texelHalfH = m_halfTexel/heightf;
- const float minu = texelHalfW;
- const float maxu = 1.0f - texelHalfW;
- const float minv = _originBottomLeft ? texelHalfH+1.0f : texelHalfH ;
- const float maxv = _originBottomLeft ? texelHalfH : texelHalfH+1.0f;
-
- vertex[0].m_x = minx;
- vertex[0].m_y = miny;
- vertex[0].m_u = minu;
- vertex[0].m_v = minv;
-
- vertex[1].m_x = maxx;
- vertex[1].m_y = miny;
- vertex[1].m_u = maxu;
- vertex[1].m_v = minv;
-
- vertex[2].m_x = maxx;
- vertex[2].m_y = maxy;
- vertex[2].m_u = maxu;
- vertex[2].m_v = maxv;
-
- vertex[3].m_x = maxx;
- vertex[3].m_y = maxy;
- vertex[3].m_u = maxu;
- vertex[3].m_v = maxv;
-
- vertex[4].m_x = minx;
- vertex[4].m_y = maxy;
- vertex[4].m_u = minu;
- vertex[4].m_v = maxv;
-
- vertex[5].m_x = minx;
- vertex[5].m_y = miny;
- vertex[5].m_u = minu;
- vertex[5].m_v = minv;
-
- vertex[0].m_abgr = _abgr;
- vertex[1].m_abgr = _abgr;
- vertex[2].m_abgr = _abgr;
- vertex[3].m_abgr = _abgr;
- vertex[4].m_abgr = _abgr;
- vertex[5].m_abgr = _abgr;
-
- bgfx::setVertexBuffer(&vb);
-
- return true;
+ if (6 == bgfx::getAvailTransientVertexBuffer(6, PosUvwColorVertex::ms_decl) )
+ {
+ bgfx::TransientVertexBuffer vb;
+ bgfx::allocTransientVertexBuffer(&vb, 6, PosUvwColorVertex::ms_decl);
+ PosUvwColorVertex* vertex = (PosUvwColorVertex*)vb.data;
+
+ const float widthf = float(_width);
+ const float heightf = float(_height);
+
+ const float minx = float(_x);
+ const float miny = float(_y);
+ const float maxx = minx+widthf;
+ const float maxy = miny+heightf;
+
+ const float minu = 0.0f;
+ const float maxu = _maxu;
+ const float minv = 0.0f;
+ const float maxv = _maxv;
+
+ vertex->set(minx, miny, minu, minv, 0.0f, _abgr); ++vertex;
+ vertex->set(maxx, miny, maxu, minv, 0.0f, _abgr); ++vertex;
+ vertex->set(maxx, maxy, maxu, maxv, 0.0f, _abgr); ++vertex;
+
+ vertex->set(maxx, maxy, maxu, maxv, 0.0f, _abgr); ++vertex;
+ vertex->set(minx, maxy, minu, maxv, 0.0f, _abgr); ++vertex;
+ vertex->set(minx, miny, minu, minv, 0.0f, _abgr); ++vertex;
+
+ bgfx::setVertexBuffer(0, &vb);
+ }
}
+ else
+ {
+ const uint32_t numVertices = 14;
+ const uint32_t numIndices = 36;
+ if (checkAvailTransientBuffers(numVertices, PosUvwColorVertex::ms_decl, numIndices) )
+ {
+ bgfx::TransientVertexBuffer tvb;
+ bgfx::allocTransientVertexBuffer(&tvb, numVertices, PosUvwColorVertex::ms_decl);
+
+ bgfx::TransientIndexBuffer tib;
+ bgfx::allocTransientIndexBuffer(&tib, numIndices);
+
+ PosUvwColorVertex* vertex = (PosUvwColorVertex*)tvb.data;
+ uint16_t* indices = (uint16_t*)tib.data;
+
+ if (Geometry::Cross == _type)
+ {
+ const float sx = _width /1.5f;
+ const float sy = _height/1.5f;
+ const float px = float(_x)-sx/4.0f;
+ const float py = float(_y);
+
+ vertex->set(0.0f*sx+px, 0.5f*sy+py, -1.0f, 1.0f, -1.0f, _abgr); ++vertex;
+ vertex->set(0.0f*sx+px, 1.0f*sy+py, -1.0f, -1.0f, -1.0f, _abgr); ++vertex;
+
+ vertex->set(0.5f*sx+px, 0.0f*sy+py, -1.0f, 1.0f, -1.0f, _abgr); ++vertex;
+ vertex->set(0.5f*sx+px, 0.5f*sy+py, -1.0f, 1.0f, 1.0f, _abgr); ++vertex;
+ vertex->set(0.5f*sx+px, 1.0f*sy+py, -1.0f, -1.0f, 1.0f, _abgr); ++vertex;
+ vertex->set(0.5f*sx+px, 1.5f*sy+py, -1.0f, -1.0f, -1.0f, _abgr); ++vertex;
+
+ vertex->set(1.0f*sx+px, 0.0f*sy+py, 1.0f, 1.0f, -1.0f, _abgr); ++vertex;
+ vertex->set(1.0f*sx+px, 0.5f*sy+py, 1.0f, 1.0f, 1.0f, _abgr); ++vertex;
+ vertex->set(1.0f*sx+px, 1.0f*sy+py, 1.0f, -1.0f, 1.0f, _abgr); ++vertex;
+ vertex->set(1.0f*sx+px, 1.5f*sy+py, 1.0f, -1.0f, -1.0f, _abgr); ++vertex;
+
+ vertex->set(1.5f*sx+px, 0.5f*sy+py, 1.0f, 1.0f, -1.0f, _abgr); ++vertex;
+ vertex->set(1.5f*sx+px, 1.0f*sy+py, 1.0f, -1.0f, -1.0f, _abgr); ++vertex;
+
+ vertex->set(2.0f*sx+px, 0.5f*sy+py, -1.0f, 1.0f, -1.0f, _abgr); ++vertex;
+ vertex->set(2.0f*sx+px, 1.0f*sy+py, -1.0f, -1.0f, -1.0f, _abgr); ++vertex;
+
+ indices += addQuad(indices, 0, 3, 4, 1);
+ indices += addQuad(indices, 2, 6, 7, 3);
+ indices += addQuad(indices, 3, 7, 8, 4);
+ indices += addQuad(indices, 4, 8, 9, 5);
+ indices += addQuad(indices, 7, 10, 11, 8);
+ indices += addQuad(indices, 10, 12, 13, 11);
+ }
+ else
+ {
+ const float sx = float(_width);
+ const float sy = float(_height);
+ const float px = float(_x) - sx/2.0f;
+ const float py = float(_y);
+
+ vertex->set(0.0f*sx+px, 0.25f*sy+py, -1.0f, 1.0f, -1.0f, _abgr); ++vertex;
+ vertex->set(0.0f*sx+px, 0.75f*sy+py, -1.0f, -1.0f, -1.0f, _abgr); ++vertex;
+
+ vertex->set(0.5f*sx+px, 0.00f*sy+py, -1.0f, 1.0f, 1.0f, _abgr); ++vertex;
+ vertex->set(0.5f*sx+px, 0.50f*sy+py, -1.0f, -1.0f, 1.0f, _abgr); ++vertex;
+ vertex->set(0.5f*sx+px, 1.00f*sy+py, 1.0f, -1.0f, -1.0f, _abgr); ++vertex;
+
+ vertex->set(1.0f*sx+px, 0.25f*sy+py, 1.0f, 1.0f, 1.0f, _abgr); ++vertex;
+ vertex->set(1.0f*sx+px, 0.75f*sy+py, 1.0f, -1.0f, 1.0f, _abgr); ++vertex;
+
+ vertex->set(1.0f*sx+px, 0.25f*sy+py, 1.0f, 1.0f, 1.0f, _abgr); ++vertex;
+ vertex->set(1.0f*sx+px, 0.75f*sy+py, 1.0f, -1.0f, 1.0f, _abgr); ++vertex;
+
+ vertex->set(1.5f*sx+px, 0.00f*sy+py, -1.0f, 1.0f, 1.0f, _abgr); ++vertex;
+ vertex->set(1.5f*sx+px, 0.50f*sy+py, 1.0f, 1.0f, -1.0f, _abgr); ++vertex;
+ vertex->set(1.5f*sx+px, 1.00f*sy+py, 1.0f, -1.0f, -1.0f, _abgr); ++vertex;
+
+ vertex->set(2.0f*sx+px, 0.25f*sy+py, -1.0f, 1.0f, -1.0f, _abgr); ++vertex;
+ vertex->set(2.0f*sx+px, 0.75f*sy+py, -1.0f, -1.0f, -1.0f, _abgr); ++vertex;
+
+ indices += addQuad(indices, 0, 2, 3, 1);
+ indices += addQuad(indices, 1, 3, 6, 4);
+ indices += addQuad(indices, 2, 5, 6, 3);
+ indices += addQuad(indices, 7, 9, 12, 10);
+ indices += addQuad(indices, 7, 10, 11, 8);
+ indices += addQuad(indices, 10, 12, 13, 11);
+ }
- return false;
+ bgfx::setVertexBuffer(0, &tvb);
+ bgfx::setIndexBuffer(&tib);
+ }
+ }
}
-struct Interpolator
+template<bx::LerpFn lerpT, bx::EaseFn easeT>
+struct InterpolatorT
{
float from;
float to;
float duration;
int64_t offset;
- Interpolator(float _value)
+ InterpolatorT(float _value)
{
reset(_value);
}
@@ -502,44 +964,22 @@ struct Interpolator
int64_t now = bx::getHPCounter();
float time = (float)(double(now - offset) / freq);
float lerp = bx::fclamp(time, 0.0, duration) / duration;
- return bx::flerp(from, to, lerp);
+ return lerpT(from, to, easeT(lerp) );
}
return to;
}
};
-void help(const char* _error = NULL)
-{
- if (NULL != _error)
- {
- fprintf(stderr, "Error:\n%s\n\n", _error);
- }
-
- fprintf(stderr
- , "texturev, bgfx texture viewer tool\n"
- "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n"
- "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n"
- );
-
- fprintf(stderr
- , "Usage: texturev <file path>\n"
- "\n"
- "Supported input file types:\n"
- );
-
- for (uint32_t ii = 0; ii < BX_COUNTOF(s_supportedExt); ++ii)
- {
- fprintf(stderr, " *.%s\n", s_supportedExt[ii]);
- }
+typedef InterpolatorT<bx::flerp, bx::easeInOutQuad> Interpolator;
+typedef InterpolatorT<bx::angleLerp, bx::easeInOutCubic> InterpolatorAngle;
+typedef InterpolatorT<bx::flerp, bx::easeLinear> InterpolatorLinear;
- fprintf(stderr
- , "\n"
- "Options:\n"
- " --associate Associate file extensions with texturev.\n"
- "\n"
- "For additional information, see https://github.com/bkaradzic/bgfx\n"
- );
+void keyBindingHelp(const char* _bindings, const char* _description)
+{
+ ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), _bindings);
+ ImGui::SameLine(100);
+ ImGui::Text(_description);
}
void associate()
@@ -574,13 +1014,12 @@ void associate()
bx::stringPrintf(str, "[HKEY_CURRENT_USER\\Software\\Classes\\.%s]\r\n@=\"texturev\"\r\n\r\n", ext);
}
- char temp[MAX_PATH];
- GetTempPathA(MAX_PATH, temp);
- strcat(temp, "\\texturev.reg");
+ bx::FilePath filePath(bx::Dir::Temp);
+ filePath.join("texture.reg");
- bx::CrtFileWriter writer;
+ bx::FileWriter writer;
bx::Error err;
- if (bx::open(&writer, temp, false, &err) )
+ if (bx::open(&writer, filePath, false, &err) )
{
bx::write(&writer, str.c_str(), uint32_t(str.length()), &err);
bx::close(&writer);
@@ -588,10 +1027,10 @@ void associate()
if (err.isOk() )
{
std::string cmd;
- bx::stringPrintf(cmd, "regedit.exe /s %s", temp);
+ bx::stringPrintf(cmd, "/s %s", filePath.get() );
bx::ProcessReader reader;
- if (bx::open(&reader, cmd.c_str(), &err) )
+ if (bx::open(&reader, "regedit.exe", cmd.c_str(), &err) )
{
bx::close(&reader);
}
@@ -609,7 +1048,7 @@ void associate()
str += "\n";
- bx::CrtFileWriter writer;
+ bx::FileWriter writer;
bx::Error err;
if (bx::open(&writer, "/tmp/texturev.sh", false, &err) )
{
@@ -619,7 +1058,7 @@ void associate()
if (err.isOk() )
{
bx::ProcessReader reader;
- if (bx::open(&reader, "/bin/bash /tmp/texturev.sh", &err) )
+ if (bx::open(&reader, "/bin/bash", "/tmp/texturev.sh", &err) )
{
bx::close(&reader);
}
@@ -628,19 +1067,68 @@ void associate()
#endif // BX_PLATFORM_WINDOWS
}
+void help(const char* _error = NULL)
+{
+ if (NULL != _error)
+ {
+ fprintf(stderr, "Error:\n%s\n\n", _error);
+ }
+
+ fprintf(stderr
+ , "texturev, bgfx texture viewer tool, version %d.%d.%d.\n"
+ "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n"
+ "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n"
+ , BGFX_TEXTUREV_VERSION_MAJOR
+ , BGFX_TEXTUREV_VERSION_MINOR
+ , BGFX_API_VERSION
+ );
+
+ fprintf(stderr
+ , "Usage: texturev <file path>\n"
+ "\n"
+ "Supported input file types:\n"
+ );
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_supportedExt); ++ii)
+ {
+ fprintf(stderr, " *.%s\n", s_supportedExt[ii]);
+ }
+
+ fprintf(stderr
+ , "\n"
+ "Options:\n"
+ " -h, --help Help.\n"
+ " -v, --version Version information only.\n"
+ " --associate Associate file extensions with texturev.\n"
+ "\n"
+ "For additional information, see https://github.com/bkaradzic/bgfx\n"
+ );
+}
+
int _main_(int _argc, char** _argv)
{
bx::CommandLine cmdLine(_argc, _argv);
+ if (cmdLine.hasArg('v', "version") )
+ {
+ fprintf(stderr
+ , "texturev, bgfx texture viewer tool, version %d.%d.%d.\n"
+ , BGFX_TEXTUREV_VERSION_MAJOR
+ , BGFX_TEXTUREV_VERSION_MINOR
+ , BGFX_API_VERSION
+ );
+ return bx::kExitSuccess;
+ }
+
if (cmdLine.hasArg('h', "help") )
{
help();
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
else if (cmdLine.hasArg("associate") )
{
associate();
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
uint32_t width = 1280;
@@ -658,85 +1146,115 @@ int _main_(int _argc, char** _argv)
bgfx::reset(width, height, reset);
// Set view 0 clear state.
- bgfx::setViewClear(0
+ bgfx::setViewClear(BACKGROUND_VIEW_ID
, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x101010ff
+ , 0x000000ff
, 1.0f
, 0
);
imguiCreate();
- PosUvColorVertex::init();
+ PosUvwColorVertex::init();
- bgfx::RendererType::Enum type = bgfx::getRendererType();
+ const bgfx::Caps* caps = bgfx::getCaps();
+ bgfx::RendererType::Enum type = caps->rendererType;
+
+ bgfx::UniformHandle s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
+ bgfx::UniformHandle u_mtx = bgfx::createUniform("u_mtx", bgfx::UniformType::Mat4);
+ bgfx::UniformHandle u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4);
bgfx::ShaderHandle vsTexture = bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_texture");
bgfx::ShaderHandle fsTexture = bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_texture");
bgfx::ShaderHandle fsTextureArray = bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_texture_array");
bgfx::ProgramHandle textureProgram = bgfx::createProgram(
- vsTexture
- , fsTexture
- , true
- );
+ vsTexture
+ , fsTexture
+ , true
+ );
bgfx::ProgramHandle textureArrayProgram = bgfx::createProgram(
- vsTexture
- , bgfx::isValid(fsTextureArray)
- ? fsTextureArray
- : fsTexture
- , true
- );
+ vsTexture
+ , bgfx::isValid(fsTextureArray)
+ ? fsTextureArray
+ : fsTexture
+ , true
+ );
bgfx::ProgramHandle textureCubeProgram = bgfx::createProgram(
- bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_texture_cube")
- , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_texture_cube")
- , true
- );
+ bgfx::createEmbeddedShader(s_embeddedShaders, type, "vs_texture_cube")
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_texture_cube")
+ , true
+ );
- bgfx::ProgramHandle textureSDFProgram = bgfx::createProgram(
- vsTexture
- , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_texture_sdf")
- , true);
+ bgfx::ProgramHandle textureCube2Program = bgfx::createProgram(
+ vsTexture
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_texture_cube2")
+ , true
+ );
- bgfx::UniformHandle s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
- bgfx::UniformHandle u_mtx = bgfx::createUniform("u_mtx", bgfx::UniformType::Mat4);
- bgfx::UniformHandle u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4);
+ bgfx::ProgramHandle textureSdfProgram = bgfx::createProgram(
+ vsTexture
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_texture_sdf")
+ , true
+ );
+
+ bgfx::ProgramHandle textureMsdfProgram = bgfx::createProgram(
+ vsTexture
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_texture_msdf")
+ , true
+ );
+
+ bgfx::ProgramHandle texture3DProgram = bgfx::createProgram(
+ vsTexture
+ , bgfx::createEmbeddedShader(s_embeddedShaders, type, "fs_texture_3d")
+ , true
+ );
+
+ const uint32_t checkerBoardSize = 64;
+ bgfx::TextureHandle checkerBoard;
+ {
+ const bgfx::Memory* mem = bgfx::alloc(checkerBoardSize*checkerBoardSize*4);
+ bimg::imageCheckerboard(mem->data, checkerBoardSize, checkerBoardSize, 8, 0xff8e8e8e, 0xff5d5d5d);
+ checkerBoard = bgfx::createTexture2D(checkerBoardSize, checkerBoardSize, false, 1
+ , bgfx::TextureFormat::BGRA8
+ , 0
+ | BGFX_TEXTURE_MIN_POINT
+ | BGFX_TEXTURE_MIP_POINT
+ | BGFX_TEXTURE_MAG_POINT
+ , mem
+ );
+ }
float speed = 0.37f;
float time = 0.0f;
Interpolator mip(0.0f);
Interpolator layer(0.0f);
+ InterpolatorLinear ev(0.0f);
Interpolator zoom(1.0f);
Interpolator scale(1.0f);
+ Interpolator posx(0.0f);
+ Interpolator posy(0.0f);
+ InterpolatorAngle angle(0.0f);
+ InterpolatorAngle angx(0.0f);
+ InterpolatorAngle angy(0.0f);
const char* filePath = _argc < 2 ? "" : _argv[1];
- bool directory = false;
-
- bx::FileInfo fi;
- bx::stat(filePath, fi);
- directory = bx::FileInfo::Directory == fi.m_type;
std::string path = filePath;
- if (!directory)
{
- const char* fileName = directory ? filePath : bx::baseName(filePath);
- path.assign(filePath, fileName);
- view.updateFileList(path.c_str(), fileName);
- }
- else
- {
- view.updateFileList(path.c_str() );
+ bx::FilePath fp(filePath);
+ view.updateFileList(fp);
}
- int exitcode = EXIT_SUCCESS;
+ int exitcode = bx::kExitSuccess;
bgfx::TextureHandle texture = BGFX_INVALID_HANDLE;
if (view.m_fileList.empty() )
{
- exitcode = EXIT_FAILURE;
+ exitcode = bx::kExitFailure;
if (2 > _argc)
{
help("File path is not specified.");
@@ -749,26 +1267,289 @@ int _main_(int _argc, char** _argv)
else
{
uint32_t fileIndex = 0;
+ bool dragging = false;
+ entry::MouseState mouseStatePrev;
entry::MouseState mouseState;
while (!entry::processEvents(width, height, debug, reset, &mouseState) )
{
imguiBeginFrame(mouseState.m_mx
- , mouseState.m_my
+ , mouseState.m_my
, (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
| (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
| (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , mouseState.m_mz
- , uint16_t(width)
- , uint16_t(height)
+ , mouseState.m_mz
+ , uint16_t(width)
+ , uint16_t(height)
);
static bool help = false;
+ static bool mouseDelta = false;
+ if (!mouseDelta)
+ {
+ mouseStatePrev = mouseState;
+ mouseDelta = true;
+ }
+
+ int32_t zoomDelta = mouseState.m_mz - mouseStatePrev.m_mz;
+ if (zoomDelta != 0)
+ {
+ char exec[64];
+ bx::snprintf(exec, BX_COUNTOF(exec), "view zoom %+f", -zoomDelta*0.1f);
+ cmdExec(exec);
+ }
+
+ const float xDelta = float(mouseStatePrev.m_mx - mouseState.m_mx);
+ const float yDelta = float(mouseStatePrev.m_my - mouseState.m_my);
+
+ if (!ImGui::MouseOverArea()
+ && !help
+ && mouseState.m_buttons[entry::MouseButton::Left] != mouseStatePrev.m_buttons[entry::MouseButton::Left])
+ {
+ dragging = !!mouseState.m_buttons[entry::MouseButton::Left];
+ }
- if (help == false
- && help != view.m_help)
+ if (dragging)
{
- ImGui::OpenPopup("Help");
+ if (view.m_textureInfo.cubeMap
+ && Geometry::Quad == view.m_cubeMapGeo)
+ {
+ char exec[64];
+ bx::snprintf(exec, BX_COUNTOF(exec), "view cubemap %+f %+f", -yDelta, -xDelta);
+ cmdExec(exec);
+ }
+ else
+ {
+ char exec[64];
+ bx::snprintf(exec, BX_COUNTOF(exec), "view pan %+f %+f", xDelta, yDelta);
+ cmdExec(exec);
+ }
+ }
+
+ mouseStatePrev = mouseState;
+
+ if (ImGui::BeginPopupContextVoid("Menu") )
+ {
+ if (ImGui::MenuItem("Files", NULL, view.m_files) )
+ {
+ cmdExec("view files");
+ }
+
+ if (ImGui::MenuItem("Info", NULL, view.m_info) )
+ {
+ cmdExec("view info");
+ }
+
+// if (ImGui::MenuItem("Save As") )
+ {
+ }
+
+ if (ImGui::MenuItem("Reset") )
+ {
+ cmdExec(s_resetCmd);
+ }
+
+ ImGui::Separator();
+ if (ImGui::BeginMenu("Options"))
+ {
+ bool filter = view.m_filter;
+ if (ImGui::MenuItem("Filter", NULL, &filter) )
+ {
+ cmdExec("view filter");
+ }
+
+ bool animate = 0.0f < view.m_transitionTime;
+ if (ImGui::MenuItem("Animate", NULL, &animate) )
+ {
+ cmdExec("view transition %f", animate ? 1.0f : 0.0f);
+ }
+
+ if (ImGui::BeginMenu("Cubemap", view.m_textureInfo.cubeMap) )
+ {
+ if (ImGui::MenuItem("Quad", NULL, Geometry::Quad == view.m_cubeMapGeo) )
+ {
+ cmdExec("view geo quad");
+ }
+
+ if (ImGui::MenuItem("Cross", NULL, Geometry::Cross == view.m_cubeMapGeo) )
+ {
+ cmdExec("view geo cross");
+ }
+
+ if (ImGui::MenuItem("Hexagon", NULL, Geometry::Hexagon == view.m_cubeMapGeo) )
+ {
+ cmdExec("view geo hexagon");
+ }
+
+ ImGui::EndMenu();
+ }
+
+ bool sdf = view.m_sdf;
+ if (ImGui::MenuItem("SDF", NULL, &sdf) )
+ {
+ cmdExec("view sdf");
+ }
+
+ bool rr = 0 != (view.m_abgr & 0x000000ff);
+ if (ImGui::MenuItem("R", NULL, &rr) )
+ {
+ cmdExec("view rgb r");
+ }
+
+ bool gg = 0 != (view.m_abgr & 0x0000ff00);
+ if (ImGui::MenuItem("G", NULL, &gg) )
+ {
+ cmdExec("view rgb g");
+ }
+
+ bool bb = 0 != (view.m_abgr & 0x00ff0000);
+ if (ImGui::MenuItem("B", NULL, &bb) )
+ {
+ cmdExec("view rgb b");
+ }
+
+ bool alpha = view.m_alpha;
+ if (ImGui::MenuItem("Checkerboard", NULL, &alpha) )
+ {
+ cmdExec("view rgb a");
+ }
+
+ ImGui::Separator();
+
+ if (ImGui::MenuItem("Save Options") )
+ {
+ cmdExec("view save");
+ }
+
+ ImGui::EndMenu();
+ }
+
+ ImGui::Separator();
+ if (ImGui::MenuItem("Help") )
+ {
+ cmdExec("view help");
+ }
+
+ ImGui::Separator();
+ if (ImGui::MenuItem("Exit") )
+ {
+ cmdExec("exit");
+ }
+
+ ImGui::EndPopup();
+ }
+
+ if (help != view.m_help)
+ {
+ if (!help)
+ {
+ ImGui::OpenPopup("Help");
+ inputRemoveBindings(s_bindingName[Binding::View]);
+ inputAddBindings(s_bindingName[Binding::Help], s_binding[Binding::Help]);
+ }
+ else
+ {
+ inputRemoveBindings(s_bindingName[Binding::Help]);
+ inputAddBindings(s_bindingName[Binding::View], s_binding[Binding::View]);
+ }
+
+ help = view.m_help;
+ }
+
+ if (view.m_info)
+ {
+ if (ImGui::Begin("Info", NULL, ImVec2(300.0f, 200.0f) ) )
+ {
+ if (ImGui::BeginChild("##info", ImVec2(0.0f, 0.0f) ) )
+ {
+ ImGui::Text("Dimensions: %d x %d"
+ , view.m_textureInfo.width
+ , view.m_textureInfo.height
+ );
+
+ ImGui::Text("Format: %s"
+ , bimg::getName(bimg::TextureFormat::Enum(view.m_textureInfo.format) )
+ );
+
+ ImGui::Text("Layers: %d / %d"
+ , view.m_layer
+ , view.m_textureInfo.numLayers - 1
+ );
+
+ ImGui::Text("Mips: %d / %d"
+ , view.m_mip
+ , view.m_textureInfo.numMips - 1
+ );
+
+ ImGui::RangeSliderFloat("EV range", &view.m_evMin, &view.m_evMax, kEvMin, kEvMax);
+ ImGui::SliderFloat("EV", &view.m_ev, view.m_evMin, view.m_evMax);
+
+ ImGui::EndChild();
+ }
+
+ ImGui::End();
+ }
+ }
+
+ if (view.m_files)
+ {
+ char temp[bx::kMaxFilePath];
+ bx::snprintf(temp, BX_COUNTOF(temp), "%s##File", view.m_path.get() );
+ if (ImGui::Begin(temp, NULL, ImVec2(400.0f, 400.0f) ) )
+ {
+ if (ImGui::BeginChild("##file_list", ImVec2(0.0f, 0.0f) ) )
+ {
+ ImGui::PushFont(ImGui::Font::Mono);
+ const float itemHeight = ImGui::GetTextLineHeightWithSpacing();
+ const float listHeight =
+ std::max(1.0f, bx::ffloor(ImGui::GetWindowHeight()/itemHeight) )
+ * itemHeight
+ ;
+
+ ImGui::PushItemWidth(-1);
+ if (ImGui::ListBoxHeader("##empty", ImVec2(0.0f, listHeight) ) )
+ {
+ const int32_t itemCount = int32_t(view.m_fileList.size() );
+
+ int32_t start, end;
+ ImGui::CalcListClipping(itemCount, itemHeight, &start, &end);
+
+ const int32_t index = int32_t(view.m_fileIndex);
+ if (index <= start)
+ {
+ ImGui::SetScrollY(ImGui::GetScrollY() - (start-index+1)*itemHeight);
+ }
+ else if (index >= end)
+ {
+ ImGui::SetScrollY(ImGui::GetScrollY() + (index-end+1)*itemHeight);
+ }
+
+ ImGuiListClipper clipper(itemCount, itemHeight);
+
+ for (int32_t pos = clipper.DisplayStart; pos < clipper.DisplayEnd; ++pos)
+ {
+ ImGui::PushID(pos);
+
+ bool isSelected = uint32_t(pos) == view.m_fileIndex;
+ if (ImGui::Selectable(view.m_fileList[pos].c_str(), &isSelected) )
+ {
+ view.m_fileIndex = pos;
+ }
+
+ ImGui::PopID();
+ }
+
+ clipper.End();
+
+ ImGui::ListBoxFooter();
+ }
+
+ ImGui::PopFont();
+ ImGui::EndChild();
+ }
+
+ ImGui::End();
+ }
}
if (ImGui::BeginPopupModal("Help", NULL, ImGuiWindowFlags_AlwaysAutoResize) )
@@ -776,9 +1557,12 @@ int _main_(int _argc, char** _argv)
ImGui::SetWindowFontScale(1.0f);
ImGui::Text(
- "texturev, bgfx texture viewer tool " ICON_KI_WRENCH "\n"
+ "texturev, bgfx texture viewer tool " ICON_KI_WRENCH ", version %d.%d.%d.\n"
"Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n"
"License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n"
+ , BGFX_TEXTUREV_VERSION_MAJOR
+ , BGFX_TEXTUREV_VERSION_MINOR
+ , BGFX_API_VERSION
);
ImGui::Separator();
ImGui::NextLine();
@@ -786,38 +1570,41 @@ int _main_(int _argc, char** _argv)
ImGui::Text("Key bindings:\n\n");
ImGui::PushFont(ImGui::Font::Mono);
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "ESC"); ImGui::SameLine(64); ImGui::Text("Exit.");
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "h"); ImGui::SameLine(64); ImGui::Text("Toggle help screen.");
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "f"); ImGui::SameLine(64); ImGui::Text("Toggle full-screen.");
+ keyBindingHelp("ESC", "Exit.");
+ keyBindingHelp("h", "Toggle help screen.");
+ keyBindingHelp("f", "Toggle full-screen.");
ImGui::NextLine();
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "-"); ImGui::SameLine(64); ImGui::Text("Zoom out.");
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "="); ImGui::SameLine(64); ImGui::Text("Zoom in.");
+ keyBindingHelp("LMB+drag", "Pan.");
+ keyBindingHelp("=/- or MW", "Zoom in/out.");
+ keyBindingHelp("z/Z", "Rotate.");
+ keyBindingHelp("0", "Reset.");
+ keyBindingHelp("1", "Fit to window.");
ImGui::NextLine();
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), ","); ImGui::SameLine(64); ImGui::Text("MIP level up.");
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "."); ImGui::SameLine(64); ImGui::Text("MIP level down.");
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "/"); ImGui::SameLine(64); ImGui::Text("Toggle linear/point texture sampling.");
+ keyBindingHelp("<", "Reset MIP level.");
+ keyBindingHelp(",/,", "MIP level up/down.");
+ keyBindingHelp("/", "Toggle linear/point texture sampling.");
+ keyBindingHelp("[space]", "Change cubemap mode.");
ImGui::NextLine();
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "left"); ImGui::SameLine(64); ImGui::Text("Previous layer in texture array.");
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "right"); ImGui::SameLine(64); ImGui::Text("Next layer in texture array.");
+ keyBindingHelp("left", "Previous layer in texture array.");
+ keyBindingHelp("right", "Next layer in texture array.");
ImGui::NextLine();
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "up"); ImGui::SameLine(64); ImGui::Text("Previous texture.");
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "down"); ImGui::SameLine(64); ImGui::Text("Next texture.");
+ keyBindingHelp("up", "Previous texture.");
+ keyBindingHelp("down", "Next texture.");
ImGui::NextLine();
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "r/g/b"); ImGui::SameLine(64); ImGui::Text("Toggle R, G, or B color channel.");
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "a"); ImGui::SameLine(64); ImGui::Text("Toggle alpha blending.");
+ keyBindingHelp("r/g/b", "Toggle R, G, or B color channel.");
+ keyBindingHelp("a", "Toggle alpha blending.");
ImGui::NextLine();
- ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "s"); ImGui::SameLine(64); ImGui::Text("Toggle Multi-channel SDF rendering");
+ keyBindingHelp("s", "Toggle Multi-channel SDF rendering");
+ ImGui::NextLine();
ImGui::PopFont();
- ImGui::NextLine();
-
ImGui::Dummy(ImVec2(0.0f, 0.0f) );
ImGui::SameLine(ImGui::GetWindowWidth() - 136.0f);
if (ImGui::Button("Close", ImVec2(128.0f, 0.0f) )
@@ -830,8 +1617,6 @@ int _main_(int _argc, char** _argv)
ImGui::EndPopup();
}
- help = view.m_help;
-
imguiEndFrame();
if (!bgfx::isValid(texture)
@@ -839,31 +1624,64 @@ int _main_(int _argc, char** _argv)
{
if (bgfx::isValid(texture) )
{
- bgfx::destroyTexture(texture);
+ bgfx::destroy(texture);
}
fileIndex = view.m_fileIndex;
- filePath = view.m_fileList[view.m_fileIndex].c_str();
+ bx::FilePath fp = view.m_path;
+ fp.join(view.m_fileList[view.m_fileIndex].c_str() );
+
+ bimg::Orientation::Enum orientation;
+ texture = loadTexture(fp.get()
+ , 0
+ | BGFX_TEXTURE_U_CLAMP
+ | BGFX_TEXTURE_V_CLAMP
+ | BGFX_TEXTURE_W_CLAMP
+ , 0
+ , &view.m_textureInfo
+ , &orientation
+ );
- texture = loadTexture(filePath
- , 0
- | BGFX_TEXTURE_U_CLAMP
- | BGFX_TEXTURE_V_CLAMP
- | BGFX_TEXTURE_W_CLAMP
- , 0
- , &view.m_info
- );
+ switch (orientation)
+ {
+ default:
+ case bimg::Orientation::R0: cmdExec("view orientation\nview orientation z 0"); break;
+ case bimg::Orientation::R90: cmdExec("view orientation\nview orientation z -90"); break;
+ case bimg::Orientation::R180: cmdExec("view orientation\nview orientation z -180"); break;
+ case bimg::Orientation::R270: cmdExec("view orientation\nview orientation z -270"); break;
+ case bimg::Orientation::HFlip: cmdExec("view orientation\nview orientation x -180"); break;
+ case bimg::Orientation::HFlipR90: cmdExec("view orientation\nview orientation z -90\nview orientation x -180"); break;
+ case bimg::Orientation::HFlipR270: cmdExec("view orientation\nview orientation z -270\nview orientation x -180"); break;
+ case bimg::Orientation::VFlip: cmdExec("view orientation\nview orientation y -180"); break;
+ }
std::string title;
if (isValid(texture) )
{
- bx::stringPrintf(title, "%s (%d x %d%s, %s)"
- , filePath
- , view.m_info.width
- , view.m_info.height
- , view.m_info.cubeMap ? " CubeMap" : ""
- , bgfx::getName(view.m_info.format)
+ const char* name = "";
+ if (view.m_textureInfo.cubeMap)
+ {
+ name = " CubeMap";
+ }
+ else if (1 < view.m_textureInfo.depth)
+ {
+ name = " 3D";
+ view.m_textureInfo.numLayers = view.m_textureInfo.depth;
+ }
+ else if (1 < view.m_textureInfo.numLayers)
+ {
+ name = " 2D Array";
+ }
+
+ bx::stringPrintf(title, "%s (%d x %d%s, mips: %d, layers %d, %s)"
+ , fp.get()
+ , view.m_textureInfo.width
+ , view.m_textureInfo.height
+ , name
+ , view.m_textureInfo.numMips
+ , view.m_textureInfo.numLayers
+ , bimg::getName(bimg::TextureFormat::Enum(view.m_textureInfo.format) )
);
}
else
@@ -882,62 +1700,173 @@ int _main_(int _argc, char** _argv)
time += (float)(frameTime*speed/freq);
+ float transitionTime = dragging ? 0.0f : 0.25f*view.m_transitionTime;
+
+ posx.set(view.m_posx, transitionTime);
+ posy.set(view.m_posy, transitionTime);
+
float ortho[16];
- bx::mtxOrtho(ortho, 0.0f, (float)width, (float)height, 0.0f, 0.0f, 1000.0f);
- bgfx::setViewTransform(0, NULL, ortho);
- bgfx::setViewRect(0, 0, 0, uint16_t(width), uint16_t(height) );
- bgfx::touch(0);
- bgfx::dbgTextClear();
+ bx::mtxOrtho(
+ ortho
+ , 0.0f
+ , float(width)
+ , float(height)
+ , 0.0f
+ , 0.0f
+ , 1000.0f
+ , 0.0f
+ , caps->homogeneousDepth
+ );
+ bgfx::setViewTransform(BACKGROUND_VIEW_ID, NULL, ortho);
+ bgfx::setViewRect(BACKGROUND_VIEW_ID, 0, 0, uint16_t(width), uint16_t(height) );
+
+ setGeometry(Geometry::Quad
+ , 0
+ , 0
+ , width
+ , height
+ , view.m_alpha ? UINT32_MAX : 0
+ , float(width )/float(checkerBoardSize)
+ , float(height)/float(checkerBoardSize)
+ );
+ bgfx::setTexture(0
+ , s_texColor
+ , checkerBoard
+ );
+ bgfx::setState(0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ );
+ bgfx::submit(BACKGROUND_VIEW_ID
+ , textureProgram
+ );
- scale.set(
- bx::fmin( float(width) / float(view.m_info.width)
- , float(height) / float(view.m_info.height)
- )
- , 0.1f
+ float px = posx.getValue();
+ float py = posy.getValue();
+ bx::mtxOrtho(
+ ortho
+ , px-width/2.0f
+ , px+width/2.0f
+ , py+height/2.0f
+ , py-height/2.0f
+ , -10.0f
+ , 10.0f
+ , 0.0f
+ , caps->homogeneousDepth
);
- zoom.set(view.m_zoom, 0.25);
+ bgfx::setViewTransform(IMAGE_VIEW_ID, NULL, ortho);
+ bgfx::setViewRect(IMAGE_VIEW_ID, 0, 0, uint16_t(width), uint16_t(height) );
+
+ bgfx::dbgTextClear();
+
+ float orientation[16];
+ bx::mtxRotateXYZ(orientation, view.m_flipH, view.m_flipV, angle.getValue()+view.m_orientation);
+
+ if (view.m_fit)
+ {
+ float wh[3] = { float(view.m_textureInfo.width), float(view.m_textureInfo.height), 0.0f };
+ float result[3];
+ bx::vec3MulMtx(result, wh, orientation);
+ result[0] = bx::fround(bx::fabs(result[0]) );
+ result[1] = bx::fround(bx::fabs(result[1]) );
+
+ scale.set(bx::fmin(float(width) / result[0]
+ , float(height) / result[1])
+ , 0.1f*view.m_transitionTime
+ );
+ }
+ else
+ {
+ scale.set(1.0f, 0.1f*view.m_transitionTime);
+ }
+
+ zoom.set(view.m_zoom, transitionTime);
+ angle.set(view.m_angle, transitionTime);
+ angx.set(view.m_angx, transitionTime);
+ angy.set(view.m_angy, transitionTime);
- float ss = scale.getValue() * zoom.getValue();
+ float ss = scale.getValue()
+ * zoom.getValue()
+ ;
- screenQuad( int(width - view.m_info.width * ss)/2
- , int(height - view.m_info.height * ss)/2
- , int(view.m_info.width * ss)
- , int(view.m_info.height * ss)
+ setGeometry(view.m_textureInfo.cubeMap ? view.m_cubeMapGeo : Geometry::Quad
+ , -int(view.m_textureInfo.width * ss)/2
+ , -int(view.m_textureInfo.height * ss)/2
+ , int(view.m_textureInfo.width * ss)
+ , int(view.m_textureInfo.height * ss)
, view.m_abgr
);
+ bgfx::setTransform(orientation);
+
float mtx[16];
- bx::mtxRotateXY(mtx, 0.0f, time);
+ bx::mtxRotateXY(mtx, angx.getValue(), angy.getValue() );
bgfx::setUniform(u_mtx, mtx);
- mip.set(float(view.m_mip), 0.5f);
- layer.set(float(view.m_layer), 0.25f);
+ mip.set(float(view.m_mip), 0.5f*view.m_transitionTime);
+ layer.set(float(view.m_layer), 0.25f*view.m_transitionTime);
+ ev.set(view.m_ev, 0.5f*view.m_transitionTime);
+
+ float params[4] = { mip.getValue(), layer.getValue(), 0.0f, ev.getValue() };
+ if (1 < view.m_textureInfo.depth)
+ {
+ params[1] = layer.getValue()/view.m_textureInfo.depth;
+ }
- float params[4] = { mip.getValue(), layer.getValue(), 0.0f, 0.0f };
bgfx::setUniform(u_params, params);
- bgfx::setTexture(0
- , s_texColor
- , texture
- , view.m_filter
- ? BGFX_TEXTURE_NONE
- : 0
+ const uint32_t textureFlags = 0
+ | BGFX_TEXTURE_U_CLAMP
+ | BGFX_TEXTURE_V_CLAMP
+ | BGFX_TEXTURE_W_CLAMP
+ | (view.m_filter ? 0 : 0
| BGFX_TEXTURE_MIN_POINT
| BGFX_TEXTURE_MIP_POINT
| BGFX_TEXTURE_MAG_POINT
+ )
+ ;
+
+ bgfx::setTexture(0
+ , s_texColor
+ , texture
+ , textureFlags
);
bgfx::setState(0
| BGFX_STATE_RGB_WRITE
| BGFX_STATE_ALPHA_WRITE
| (view.m_alpha ? BGFX_STATE_BLEND_ALPHA : BGFX_STATE_NONE)
);
- bgfx::submit(0
- , view.m_info.cubeMap ? textureCubeProgram
- : 1 < view.m_info.numLayers ? textureArrayProgram
- : view.m_sdf ? textureSDFProgram
- : textureProgram
- );
+
+ bgfx:: ProgramHandle program = textureProgram;
+ if (1 < view.m_textureInfo.depth)
+ {
+ program = texture3DProgram;
+ }
+ else if (view.m_textureInfo.cubeMap)
+ {
+ program = Geometry::Quad == view.m_cubeMapGeo
+ ? textureCubeProgram
+ : textureCube2Program
+ ;
+ }
+ else if (1 < view.m_textureInfo.numLayers)
+ {
+ program = textureArrayProgram;
+ }
+ else if (view.m_sdf)
+ {
+ if (8 < bimg::getBitsPerPixel(bimg::TextureFormat::Enum(view.m_textureInfo.format) ) )
+ {
+ program = textureMsdfProgram;
+ }
+ else
+ {
+ program = textureSdfProgram;
+ }
+ }
+
+ bgfx::submit(IMAGE_VIEW_ID, program);
bgfx::frame();
}
@@ -945,14 +1874,19 @@ int _main_(int _argc, char** _argv)
if (bgfx::isValid(texture) )
{
- bgfx::destroyTexture(texture);
+ bgfx::destroy(texture);
}
- bgfx::destroyUniform(s_texColor);
- bgfx::destroyUniform(u_mtx);
- bgfx::destroyUniform(u_params);
- bgfx::destroyProgram(textureProgram);
- bgfx::destroyProgram(textureArrayProgram);
- bgfx::destroyProgram(textureCubeProgram);
+
+ bgfx::destroy(checkerBoard);
+ bgfx::destroy(s_texColor);
+ bgfx::destroy(u_mtx);
+ bgfx::destroy(u_params);
+ bgfx::destroy(textureProgram);
+ bgfx::destroy(textureArrayProgram);
+ bgfx::destroy(textureCubeProgram);
+ bgfx::destroy(textureCube2Program);
+ bgfx::destroy(textureSdfProgram);
+ bgfx::destroy(texture3DProgram);
imguiDestroy();
diff --git a/3rdparty/bgfx/tools/texturev/varying.def.sc b/3rdparty/bgfx/tools/texturev/varying.def.sc
index 41b4dbd51c5..aeb964ac1c0 100644
--- a/3rdparty/bgfx/tools/texturev/varying.def.sc
+++ b/3rdparty/bgfx/tools/texturev/varying.def.sc
@@ -1,8 +1,6 @@
-vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0);
-vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0);
-vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0);
+vec4 v_color0 : COLOR0 = vec4(1.0, 1.0, 1.0, 1.0);
+vec3 v_texcoord0 : TEXCOORD0 = vec3(0.0, 0.0, 0.0);
vec3 a_position : POSITION;
-vec4 a_normal : NORMAL;
vec4 a_color0 : COLOR0;
-vec2 a_texcoord0 : TEXCOORD0;
+vec3 a_texcoord0 : TEXCOORD0;
diff --git a/3rdparty/bgfx/tools/texturev/vs_texture.bin.h b/3rdparty/bgfx/tools/texturev/vs_texture.bin.h
index 88614882adc..91284dcef7c 100644
--- a/3rdparty/bgfx/tools/texturev/vs_texture.bin.h
+++ b/3rdparty/bgfx/tools/texturev/vs_texture.bin.h
@@ -1,144 +1,353 @@
-static const uint8_t vs_texture_glsl[419] =
+static const uint8_t vs_texture_glsl[434] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x83, 0x01, 0x00, 0x00, 0x61, // wProj..........a
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, // ttribute highp v
- 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x61, 0x74, // ec4 a_color0;.at
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, // tribute highp ve
- 0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x61, // c3 a_position;.a
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, // ttribute highp v
- 0x65, 0x63, 0x32, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, // ec2 a_texcoord0;
- 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, // .varying highp v
- 0x65, 0x63, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, // ec4 v_color0;.va
- 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x32, // rying highp vec2
- 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, // v_texcoord0;.un
- 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x6d, 0x61, 0x74, 0x34, // iform highp mat4
- 0x20, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x76, 0x6f, 0x69, // u_viewProj;.voi
- 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, // d main ().{. hi
- 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // ghp vec4 tmpvar_
- 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x77, // 1;. tmpvar_1.zw
- 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, // = vec2(0.0, 1.0
- 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, // );. tmpvar_1.xy
- 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x79, // = a_position.xy
- 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, // ;. gl_Position
- 0x3d, 0x20, 0x28, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, // = (u_viewProj *
- 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x74, // tmpvar_1);. v_t
- 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, // excoord0 = a_tex
- 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // coord0;. v_colo
- 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, // r0 = a_color0;.}
- 0x0a, 0x0a, 0x00, // ...
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0x8d, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ....attribute hi
+ 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
+ 0x30, 0x3b, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, // 0;.attribute hig
+ 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // hp vec3 a_positi
+ 0x6f, 0x6e, 0x3b, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // on;.attribute hi
+ 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // ghp vec3 a_texco
+ 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, // ord0;.varying hi
+ 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 v_color
+ 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, // 0;.varying highp
+ 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // vec3 v_texcoord
+ 0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, // 0;.uniform highp
+ 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // mat4 u_modelVie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, // wProj;.void main
+ 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, // ().{. highp ve
+ 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, // c4 tmpvar_1;. t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x77, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, // mpvar_1.zw = vec
+ 0x32, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, // 2(0.0, 1.0);. t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x70, // mpvar_1.xy = a_p
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, // osition.xy;. gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x5f, 0x6d, // _Position = (u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, // odelViewProj * t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x74, 0x65, // mpvar_1);. v_te
+ 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, // xcoord0 = a_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // oord0;. v_color
+ 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, // 0 = a_color0;.}.
+ 0x0a, 0x00, // ..
};
-static const uint8_t vs_texture_dx9[330] =
+static const uint8_t vs_texture_spv[3189] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, 0x2c, 0x01, 0x00, 0x03, 0xfe, // wProj......,....
- 0xff, 0xfe, 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, // ...#.CTAB....S..
- 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, // ................
- 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // .L...0..........
- 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, // .<.......u_viewP
- 0x72, 0x6f, 0x6a, 0x00, 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, // roj.............
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, // .....vs_3_0.Micr
- 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, // osoft (R) HLSL S
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, // hader Compiler 1
- 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, // 0.0.10011.16384.
- 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, // ................
- 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, // ................
- 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, // ................
- 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x03, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, // ................
- 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, // .......U........
- 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, // ................
- 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, // ................
- 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, // ................
- 0xe0, 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // ..........
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0x50, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, // P.....#.........
+ 0x37, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // 7b..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........v.......
+ 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
+ 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
+ 0x78, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // x...Output......
+ 0x78, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // x.......gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x78, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.....x.......
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0x78, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // x.......v_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0x9e, 0x15, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // rd0.........@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, // n(vf4;vf3;vf3;..
+ 0x05, 0x00, 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....O...a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ........:...a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, // sition.......M..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
+ 0x05, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ........$Global.
+ 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // ewRect..........
+ 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
+ 0x06, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ............u_vi
+ 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew..............
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
+ 0x00, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ........u_proj..
+ 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, // vProj...........
+ 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
+ 0x06, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ............u_in
+ 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
+ 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ........u_model.
+ 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ............u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x09, 0x00, 0x00, // delView.........
+ 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.............
+ 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
+ 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, // B............A..
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
+ 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....?..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, // sition......@,..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....a_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........8..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x05, 0x00, 0x0a, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, // ........@entryPo
+ 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // intOutput.v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, // oord0...G.......
+ 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ....@...H.......
+ 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ........#.......
+ 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0x00, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x00, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0x00, 0x09, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ................
+ 0x48, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...............
+ 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...........#...
+ 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...........
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, // ........H.......
+ 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
+ 0x00, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ........G...B...
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, // ".......G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, // ........G.......
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, // ........G...v...
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
+ 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x78, 0x04, 0x00, 0x00, // ............x...
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
+ 0x44, 0x09, 0x00, 0x00, 0x78, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, // D...x...........
+ 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xf5, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x78, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // x........... ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, // ...?,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // +...............
+ 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
+ 0x2c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ,.......,.......
+ 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
+ 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
+ 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // .......+.......
+ 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, // j... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x00, 0x09, 0x00, 0x00, // e...j...........
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ........e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0x08, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....e...e.......
+ 0x20, 0x00, 0x04, 0x00, 0x7d, 0x0b, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, // ...}...........
+ 0x3b, 0x00, 0x04, 0x00, 0x7d, 0x0b, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ;...}...B.......
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // +.......).......
+ 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ...........e...
+ 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;.......v.......
+ 0x20, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
+ 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
+ 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ........Sa..;...
+ 0xf5, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....U......;...
+ 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....8......;...
+ 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ............=...
+ 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....A......=...
+ 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....?......=...
+ 0x18, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....@,......>...
+ 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, // .U...A..>....8..
+ 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, // .?..>.......@,..
+ 0x39, 0x00, 0x07, 0x00, 0x78, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x9e, 0x15, 0x00, 0x00, // 9...x...I&......
+ 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .U...8......>...
+ 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....I&..A.......
+ 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // T4..........=...
+ 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ........T4..>...
+ 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........A.......
+ 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .@..........=...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .... ....@..>...
+ 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, // v... ...A.......
+ 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .@..........=...
+ 0x18, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....-...@..>...
+ 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // .....-......8...
+ 0x36, 0x00, 0x05, 0x00, 0x78, 0x04, 0x00, 0x00, 0x9e, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...x...........
+ 0x44, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, // D...7.......O...
+ 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......:...7...
+ 0x95, 0x02, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5f, 0x57, 0x00, 0x00, // .....M......_W..
+ 0x3b, 0x00, 0x04, 0x00, 0xf5, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A.......d-......
+ 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, // ....>...d-......
+ 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A........8......
+ 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, // ....>....8..,...
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x19, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, // =...........:...
+ 0x4f, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0xbe, 0x2f, 0x00, 0x00, 0x10, 0x19, 0x00, 0x00, // O......../......
+ 0x10, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, // ............Q...
+ 0x0d, 0x00, 0x00, 0x00, 0x36, 0x62, 0x00, 0x00, 0xbe, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....6b.../......
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x98, 0x1b, 0x00, 0x00, 0xbe, 0x2f, 0x00, 0x00, // Q............/..
+ 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, // ....P........2..
+ 0x36, 0x62, 0x00, 0x00, 0x98, 0x1b, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // 6b..............
+ 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, // A.......),..B...
+ 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, // )...=...e....<..
+ 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, // ),...........;..
+ 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // .2...<..A.......
+ 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // _8..........>...
+ 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // _8...;..=.......
+ 0x1d, 0x21, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, // .!...M..A.......
+ 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // -<..........>...
+ 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // -<...!..=.......
+ 0x1e, 0x21, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // .!..O...A.......
+ 0x2e, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .<..........>...
+ 0x2e, 0x3c, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x78, 0x04, 0x00, 0x00, // .<...!..=...x...
+ 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, // G:..........G:..
+ 0x38, 0x00, 0x01, 0x00, 0x00, // 8....
};
-static const uint8_t vs_texture_dx11[575] =
+static const uint8_t vs_texture_dx9[329] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0a, 0x75, 0x5f, 0x76, 0x69, 0x65, // VSH........u_vie
- 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x18, 0x02, 0x44, 0x58, 0x42, // wProj........DXB
- 0x43, 0x02, 0x1b, 0xea, 0x24, 0x10, 0xd8, 0x6f, 0x23, 0xf5, 0xf6, 0x01, 0x38, 0x5b, 0x08, 0x13, // C...$..o#...8[..
- 0x4d, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, // M............,..
- 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, // .........ISGNh..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, // ................
- 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // .V..............
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........._......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, // ................
- 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, // .COLOR.POSITION.
- 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, // TEXCOORD.OSGNl..
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........P......
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // ................
- 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .........b......
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, // ................
- 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, // .SV_POSITION.COL
- 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, // OR.TEXCOORD..SHD
- 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, // R....@...@...Y..
- 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, // .F. ........._..
- 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, // ........._...2..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, // ....._...2......
- 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .g.... .........
- 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, // .e.... ......e..
- 0x03, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, // .2 ......h......
- 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, // .8...........V..
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .....F. ........
- 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .2...........F.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, // ................
- 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, // .F............ .
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, // .....F.......F.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, // .........6.... .
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, // .....F.......6..
- 0x05, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, // .2 ......F......
- 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // .>...........@.
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
+ 0x24, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // $.........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x07, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ................
+ 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ......U.........
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, // ................
+ 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x07, 0xe0, // ................
+ 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .........
};
-static const uint8_t vs_texture_mtl[757] =
+static const uint8_t vs_texture_dx11[582] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xe6, 0x02, 0x00, 0x00, 0x75, 0x73, // VSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 a_colo
- 0x72, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, // r0 [[attribute(0
- 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, // )]];. float3 a_
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, // position [[attri
- 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // bute(1)]];. flo
- 0x61, 0x74, 0x32, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, // at2 a_texcoord0
- 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x32, 0x29, 0x5d, 0x5d, // [[attribute(2)]]
- 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // ;.};.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, // MtlShaderOutput
- 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, // {. float4 gl_Po
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // sition [[positio
- 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, // n]];. float4 v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, // color0;. float2
- 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, // v_texcoord0;.};
- 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // .struct xlatMtlS
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, // haderUniform {.
- 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, // float4x4 u_view
- 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, // Proj;.};.vertex
- 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, // xlatMtlShaderOut
- 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, // put xlatMtlMain
- 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, // (xlatMtlShaderIn
- 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, // put _mtl_i [[sta
- 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, // ge_in]], constan
- 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, // t xlatMtlShaderU
- 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, // niform& _mtl_u [
- 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, // [buffer(0)]]).{.
- 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // xlatMtlShaderO
- 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, // utput _mtl_o;.
- 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, // float4 tmpvar_1;
- 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x77, 0x20, 0x3d, // . tmpvar_1.zw =
- 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, // float2(0.0, 1.0
- 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, // );. tmpvar_1.xy
- 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // = _mtl_i.a_posi
- 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // tion.xy;. _mtl_
- 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, // o.gl_Position =
- 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, // (_mtl_u.u_viewPr
- 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, // oj * tmpvar_1);.
- 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // _mtl_o.v_texco
- 0x6f, 0x72, 0x64, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, // ord0 = _mtl_i.a_
- 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // texcoord0;. _mt
- 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x5f, // l_o.v_color0 = _
- 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, // mtl_i.a_color0;.
- 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, // return _mtl_o;
- 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
+ 0x18, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0xa1, 0x0d, 0xa3, 0xb8, 0x34, 0x19, 0x93, 0x74, // ....DXBC....4..t
+ 0x94, 0x6c, 0x61, 0x11, 0xe8, 0x09, 0x5f, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, // .la..._,........
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, // ....,...........
+ 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNh...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........V.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, // ................
+ 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // _...............
+ 0x02, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, // ........COLOR.PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // SITION.TEXCOORD.
+ 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNl...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // b...............
+ 0x02, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // ION.COLOR.TEXCOO
+ 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // RD..SHDR....@...
+ 0x40, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // @...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _...2......._...
+ 0x72, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, // r.......g.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....e...r ......
+ 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, // h.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....V.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ........2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
+ 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, // ..... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ....F. .........
+ 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, // 6.... ......F...
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....6...r ......
+ 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, // F.......>.......
+ 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ....@.
};
+static const uint8_t vs_texture_mtl[793] =
+{
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0xf4, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
+ 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, // t xlatMtlShaderI
+ 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // nput {. float4
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, // a_color0 [[attri
+ 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // bute(0)]];. flo
+ 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, // at3 a_position [
+ 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, // [attribute(1)]];
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, // . float3 a_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, // oord0 [[attribut
+ 0x65, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // e(2)]];.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, // gl_Position [[p
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // osition]];. flo
+ 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, // at4 v_color0;.
+ 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // float3 v_texcoor
+ 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, // d0;.};.struct xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, // atMtlShaderUnifo
+ 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, // rm {. float4x4
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, // u_modelViewProj;
+ 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.vertex xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, // tlShaderOutput x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, // latMtlMain (xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, // MtlShaderInput _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, // mtl_i [[stage_in
+ 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, // ]], constant xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, // tMtlShaderUnifor
+ 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, // m& _mtl_u [[buff
+ 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, // er(0)]]).{. xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // _mtl_o;. float
+ 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, // 4 tmpvar_1 = 0;.
+ 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x77, 0x20, 0x3d, 0x20, // tmpvar_1.zw =
+ 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, // float2(0.0, 1.0)
+ 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x20, // ;. tmpvar_1.xy
+ 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, // = _mtl_i.a_posit
+ 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // ion.xy;. _mtl_o
+ 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, // .gl_Position = (
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, // _mtl_u.u_modelVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // ewProj * tmpvar_
+ 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x74, // 1);. _mtl_o.v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // excoord0 = _mtl_
+ 0x69, 0x2e, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, // i.a_texcoord0;.
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // _mtl_o.v_color0
+ 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // = _mtl_i.a_colo
+ 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, // r0;. return _mt
+ 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // l_o;.}...
+};
+extern const uint8_t* vs_texture_pssl;
+extern const uint32_t vs_texture_pssl_size;
diff --git a/3rdparty/bgfx/tools/texturev/vs_texture.sc b/3rdparty/bgfx/tools/texturev/vs_texture.sc
index ccc49463837..9aff8ef4ca1 100644
--- a/3rdparty/bgfx/tools/texturev/vs_texture.sc
+++ b/3rdparty/bgfx/tools/texturev/vs_texture.sc
@@ -10,7 +10,7 @@ $output v_texcoord0, v_color0
void main()
{
- gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0) );
+ gl_Position = mul(u_modelViewProj, vec4(a_position.xy, 0.0, 1.0) );
v_texcoord0 = a_texcoord0;
v_color0 = a_color0;
}
diff --git a/3rdparty/bgfx/tools/texturev/vs_texture_cube.bin.h b/3rdparty/bgfx/tools/texturev/vs_texture_cube.bin.h
index bc752d5c0eb..05cbbc8b213 100644
--- a/3rdparty/bgfx/tools/texturev/vs_texture_cube.bin.h
+++ b/3rdparty/bgfx/tools/texturev/vs_texture_cube.bin.h
@@ -1,17 +1,17 @@
static const uint8_t vs_texture_cube_glsl[420] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
0x7f, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ....attribute hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
0x30, 0x3b, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, // 0;.attribute hig
0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // hp vec3 a_positi
0x6f, 0x6e, 0x3b, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // on;.attribute hi
- 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // ghp vec2 a_texco
+ 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, // ghp vec3 a_texco
0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, // ord0;.varying hi
0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 v_color
0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, // 0;.varying highp
- 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // vec2 v_texcoord
+ 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // vec3 v_texcoord
0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, // 0;.uniform highp
0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // mat4 u_modelVie
0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, // wProj;.void main
@@ -28,121 +28,325 @@ static const uint8_t vs_texture_cube_glsl[420] =
0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, // or0 = a_color0;.
0x7d, 0x0a, 0x0a, 0x00, // }...
};
-static const uint8_t vs_texture_cube_dx9[359] =
+static const uint8_t vs_texture_cube_spv[3165] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0x38, 0x0c, 0x00, 0x00, 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, // 8.....#.........
+ 0x36, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, // 6b..............
+ 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, // ........GLSL.std
+ 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // .450............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, // ................
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, // main............
+ 0x95, 0x0e, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........v.......
+ 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ................
+ 0x1f, 0x16, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, // ....main........
+ 0x78, 0x04, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // x...Output......
+ 0x78, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, // x.......gl_Posit
+ 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x06, 0x00, 0x78, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ion.....x.......
+ 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, // v_color0........
+ 0x78, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // x.......v_texcoo
+ 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0x9e, 0x15, 0x00, 0x00, 0x40, 0x6d, 0x61, 0x69, // rd0.........@mai
+ 0x6e, 0x28, 0x76, 0x66, 0x34, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x00, 0x00, // n(vf4;vf3;vf3;..
+ 0x05, 0x00, 0x05, 0x00, 0x4f, 0x2e, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // ....O...a_color0
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // ........:...a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb9, 0x4d, 0x00, 0x00, // sition.......M..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x0f, 0x12, 0x00, 0x00, 0x5f, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x00, 0x00, 0x00, // ...._varying_...
+ 0x05, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x24, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, // ....^...$Global.
+ 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....^.......u_vi
+ 0x65, 0x77, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, // ewRect......^...
+ 0x01, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x00, // ....u_viewTexel.
+ 0x06, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, // ....^.......u_vi
+ 0x65, 0x77, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ew......^.......
+ 0x75, 0x5f, 0x69, 0x6e, 0x76, 0x56, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // u_invView.......
+ 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ^.......u_proj..
+ 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ....^.......u_in
+ 0x76, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, // vProj.......^...
+ 0x06, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, // ....u_viewProj..
+ 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x69, 0x6e, // ....^.......u_in
+ 0x76, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, // vViewProj.......
+ 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, // ^.......u_model.
+ 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, // ....^.......u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x06, 0x00, 0x07, 0x00, 0x5e, 0x05, 0x00, 0x00, // delView.....^...
+ 0x0a, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // ....u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x00, 0x06, 0x00, 0x06, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, // roj.....^.......
+ 0x75, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x52, 0x65, 0x66, 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, // u_alphaRef4.....
+ 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x41, 0x00, 0x00, // B............A..
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, // a_color0........
+ 0x89, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, 0x00, 0x00, // ....a_color0....
+ 0x05, 0x00, 0x05, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // .....?..a_positi
+ 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x61, 0x5f, 0x70, 0x6f, // on..........a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x40, 0x2c, 0x00, 0x00, // sition......@,..
+ 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, // a_texcoord0.....
+ 0x95, 0x0e, 0x00, 0x00, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, // ....a_texcoord0.
+ 0x05, 0x00, 0x05, 0x00, 0x08, 0x10, 0x00, 0x00, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x54, // ........flattenT
+ 0x65, 0x6d, 0x70, 0x00, 0x05, 0x00, 0x04, 0x00, 0x85, 0x55, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // emp......U..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x95, 0x38, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m........8..para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, // m...........para
+ 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x95, 0x15, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, // m...........@ent
+ 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x67, 0x6c, // ryPointOutput.gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x00, // _Position.......
+ 0x76, 0x13, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4f, // v...@entryPointO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x00, 0x00, // utput.v_color0..
+ 0x05, 0x00, 0x0a, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x40, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, // ........@entryPo
+ 0x69, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // intOutput.v_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, // oord0...G.......
+ 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ....@...H...^...
+ 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x5e, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^.......#.......
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ...H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0x5e, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0xa0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ....H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x5e, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0x20, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#...`...H...
+ 0x5e, 0x05, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0xa0, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ....H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, // ....#.......H...
+ 0x5e, 0x05, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // ^...............
+ 0x48, 0x00, 0x04, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // H...^...........
+ 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // H...^.......#...
+ 0xe0, 0x09, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // ....H...^.......
+ 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5e, 0x05, 0x00, 0x00, // ........H...^...
+ 0x0b, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, // ....#... ...G...
+ 0x5e, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x13, 0x00, 0x00, // ^.......G...B...
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x14, 0x00, 0x00, // ".......G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa6, 0x14, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x0e, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x15, 0x00, 0x00, // ........G.......
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x76, 0x13, 0x00, 0x00, // ........G...v...
+ 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8b, 0x17, 0x00, 0x00, // ........G.......
+ 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, // ................
+ 0x21, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, // !...............
+ 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, // .... ...........
+ 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, // ................
+ 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00, // ........ .......
+ 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x78, 0x04, 0x00, 0x00, // ............x...
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, // ............!...
+ 0x44, 0x09, 0x00, 0x00, 0x78, 0x04, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, // D...x...........
+ 0x95, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xf5, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .... ...........
+ 0x78, 0x04, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // x........... ...
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, // ....+...........
+ 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ....+...........
+ 0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, // ...?,...........
+ 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, // ................
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // +...............
+ 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +...............
+ 0x2c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, // ,.......,.......
+ 0x0c, 0x0a, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, // ........+.......
+ 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, // ............e...
+ 0x1d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // ................
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, // .......+.......
+ 0x6a, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0xab, 0x03, 0x00, 0x00, // j... ...........
+ 0x65, 0x00, 0x00, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x5e, 0x05, 0x00, 0x00, // e...j.......^...
+ 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ........e...e...
+ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // e...e...e...e...
+ 0xab, 0x03, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ....e...e.......
+ 0x20, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x05, 0x00, 0x00, // ...........^...
+ 0x3b, 0x00, 0x04, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // ;.......B.......
+ 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, // +.......).......
+ 0x20, 0x00, 0x04, 0x00, 0xe2, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, // ...........e...
+ 0x20, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x20, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x96, 0x02, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ;...............
+ 0x20, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
+ 0x3b, 0x00, 0x04, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;.......v.......
+ 0x20, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // ...............
+ 0x3b, 0x00, 0x04, 0x00, 0x97, 0x02, 0x00, 0x00, 0x8b, 0x17, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ;...............
+ 0x36, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...............
+ 0x02, 0x05, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x53, 0x61, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ........Sa..;...
+ 0xf5, 0x06, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // ............;...
+ 0x9a, 0x02, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....U......;...
+ 0x95, 0x02, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, // .....8......;...
+ 0x95, 0x02, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ............=...
+ 0x1d, 0x00, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x89, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....A......=...
+ 0x18, 0x00, 0x00, 0x00, 0xd9, 0x3f, 0x00, 0x00, 0xa6, 0x14, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .....?......=...
+ 0x18, 0x00, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ....@,......>...
+ 0x85, 0x55, 0x00, 0x00, 0xb8, 0x41, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x95, 0x38, 0x00, 0x00, // .U...A..>....8..
+ 0xd9, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x40, 0x2c, 0x00, 0x00, // .?..>.......@,..
+ 0x39, 0x00, 0x07, 0x00, 0x78, 0x04, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x9e, 0x15, 0x00, 0x00, // 9...x...I&......
+ 0x85, 0x55, 0x00, 0x00, 0x95, 0x38, 0x00, 0x00, 0x9a, 0x16, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .U...8......>...
+ 0x08, 0x10, 0x00, 0x00, 0x49, 0x26, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // ....I&..A.......
+ 0x54, 0x34, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0b, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // T4..........=...
+ 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x54, 0x34, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // ........T4..>...
+ 0x95, 0x15, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, // ........A.......
+ 0xee, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0e, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .@..........=...
+ 0x1d, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0xee, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .... ....@..>...
+ 0x76, 0x13, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, // v... ...A.......
+ 0xef, 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // .@..........=...
+ 0x18, 0x00, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xef, 0x40, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, // .....-...@..>...
+ 0x8b, 0x17, 0x00, 0x00, 0x13, 0x2d, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, // .....-......8...
+ 0x36, 0x00, 0x05, 0x00, 0x78, 0x04, 0x00, 0x00, 0x9e, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6...x...........
+ 0x44, 0x09, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, // D...7.......O...
+ 0x37, 0x00, 0x03, 0x00, 0x95, 0x02, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, // 7.......:...7...
+ 0x95, 0x02, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5f, 0x57, 0x00, 0x00, // .....M......_W..
+ 0x3b, 0x00, 0x04, 0x00, 0xf5, 0x06, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ;...............
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A.......d-......
+ 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x64, 0x2d, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, // ....>...d-......
+ 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A........8......
+ 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, // ....>....8..,...
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x3a, 0x19, 0x00, 0x00, // =.......5b..:...
+ 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, // Q.......;:..5b..
+ 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, // ....Q........G..
+ 0x35, 0x62, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, // 5b......Q.......
+ 0x2b, 0x53, 0x00, 0x00, 0x35, 0x62, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, // +S..5b......P...
+ 0x1d, 0x00, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0x3b, 0x3a, 0x00, 0x00, 0x0b, 0x47, 0x00, 0x00, // .....2..;:...G..
+ 0x2b, 0x53, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xe2, 0x02, 0x00, 0x00, // +S......A.......
+ 0x29, 0x2c, 0x00, 0x00, 0x42, 0x13, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, // ),..B...)...=...
+ 0x65, 0x00, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x29, 0x2c, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, // e....<..),......
+ 0x1d, 0x00, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0xf3, 0x3c, 0x00, 0x00, // .....;...2...<..
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A......._8......
+ 0x0b, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5f, 0x38, 0x00, 0x00, 0x9f, 0x3b, 0x00, 0x00, // ....>..._8...;..
+ 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, 0xb9, 0x4d, 0x00, 0x00, // =........!...M..
+ 0x41, 0x00, 0x05, 0x00, 0x95, 0x02, 0x00, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A.......-<......
+ 0x11, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2d, 0x3c, 0x00, 0x00, 0x1d, 0x21, 0x00, 0x00, // ....>...-<...!..
+ 0x3d, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, 0x4f, 0x2e, 0x00, 0x00, // =........!..O...
+ 0x41, 0x00, 0x05, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // A........<......
+ 0x0e, 0x0a, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x3c, 0x00, 0x00, 0x1e, 0x21, 0x00, 0x00, // ....>....<...!..
+ 0x3d, 0x00, 0x04, 0x00, 0x78, 0x04, 0x00, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x0f, 0x12, 0x00, 0x00, // =...x...G:......
+ 0xfe, 0x00, 0x02, 0x00, 0x47, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, // ....G:..8....
+};
+static const uint8_t vs_texture_cube_dx9[349] =
+{
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x44, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // D.......$.CTAB..
- 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
- 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
- 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
- 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
- 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
- 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
- 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, // ompiler 10.0.100
- 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // 11.16384........
- 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
- 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, // ................
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // ................
- 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
- 0x03, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, // ................
- 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, // U...............
- 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, // ................
- 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, // ................
- 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0xe0, 0x02, 0x00, // ................
- 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+ 0x38, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x21, 0x00, 0x43, 0x54, 0x41, 0x42, // 8.........!.CTAB
+ 0x1c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, // ....W...........
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, // ........P...0...
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........@.......
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, // u_modelViewProj.
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, // vs_3_0.Microsoft
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // (R) HLSL Shader
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, // Compiler 10.1..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, // ................
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x07, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ................
+ 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ......U.........
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, // ................
+ 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, // ................
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, // ................
+ 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x02, 0x00, 0x07, 0xe0, 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .............
};
-static const uint8_t vs_texture_cube_dx11[620] =
+static const uint8_t vs_texture_cube_dx11[622] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
- 0x40, 0x02, 0x44, 0x58, 0x42, 0x43, 0x25, 0x0b, 0xbc, 0xf2, 0xf1, 0x2f, 0x13, 0x1a, 0x84, 0x83, // @.DXBC%..../....
- 0x08, 0xf9, 0x08, 0xa1, 0x2c, 0x84, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x03, 0x00, // ....,.....@.....
- 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
- 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......V.........
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x5f, 0x00, // .............._.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, // ......COLOR.POSI
- 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, // TION.TEXCOORD.OS
- 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNl...........P.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, // ..............b.
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
- 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
- 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
- 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x28, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x4a, 0x00, // ..SHDR(...@...J.
- 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
- 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
- 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, // ..r......._...2.
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e.... ....
- 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e...2 ......h.
- 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
- 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
- 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, // ......F.......2.
- 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ........... ....
- 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..F.......F. ...
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......6.... ....
- 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, // ..F.......6...2
- 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, // ......F.......>.
- 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ..........@.
+ 0x40, 0x02, 0x00, 0x00, 0x44, 0x58, 0x42, 0x43, 0x52, 0x1b, 0xf0, 0x79, 0x87, 0x20, 0xa0, 0x2d, // @...DXBCR..y. .-
+ 0xbc, 0x22, 0x0f, 0xb3, 0x05, 0x0c, 0xbf, 0x92, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, // ."..........@...
+ 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, // ....,...........
+ 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNh...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........V.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, // ................
+ 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // _...............
+ 0x02, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, // ........COLOR.PO
+ 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, // SITION.TEXCOORD.
+ 0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // OSGNl...........
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // P...............
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // b...............
+ 0x02, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, // ION.COLOR.TEXCOO
+ 0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x28, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, // RD..SHDR(...@...
+ 0x4a, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // J...Y...F. .....
+ 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ...._...........
+ 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, // _...r......._...
+ 0x72, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, // r.......g.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ....e...r ......
+ 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, // h.......8.......
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....V.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, // ........2.......
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....F. .........
+ 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F.......
+ 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // 2...........F. .
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // ................
+ 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, // F............ ..
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, // ....F.......F. .
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, // ........6.... ..
+ 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, // ....F.......6...
+ 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x12, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // r ......F.......
+ 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // >...........@.
};
-static const uint8_t vs_texture_cube_mtl[751] =
+static const uint8_t vs_texture_cube_mtl[777] =
{
- 0x56, 0x53, 0x48, 0x04, 0x01, 0x83, 0xf2, 0xe1, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x75, 0x73, // VSH...........us
- 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
- 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
- 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 a_colo
- 0x72, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, // r0 [[attribute(0
- 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, // )]];. float3 a_
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, // position [[attri
- 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // bute(1)]];. flo
- 0x61, 0x74, 0x32, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, // at2 a_texcoord0
- 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x32, 0x29, 0x5d, 0x5d, // [[attribute(2)]]
- 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // ;.};.struct xlat
- 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, // MtlShaderOutput
- 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, // {. float4 gl_Po
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // sition [[positio
- 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, // n]];. float4 v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, // color0;. float2
- 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, // v_texcoord0;.};
- 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // .struct xlatMtlS
- 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, // haderUniform {.
- 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // float4x4 u_mode
- 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, // lViewProj;.};.ve
- 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // rtex xlatMtlShad
- 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // erOutput xlatMtl
- 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // Main (xlatMtlSha
- 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, // derInput _mtl_i
- 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, // [[stage_in]], co
- 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // nstant xlatMtlSh
- 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, // aderUniform& _mt
- 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, // l_u [[buffer(0)]
- 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // ]).{. xlatMtlSh
- 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // aderOutput _mtl_
- 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, // o;. float4 tmpv
- 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // ar_1;. tmpvar_1
- 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // .w = 1.0;. tmpv
- 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // ar_1.xyz = _mtl_
- 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, // i.a_position;.
- 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, // _mtl_o.gl_Positi
- 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, // on = (_mtl_u.u_m
- 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, // odelViewProj * t
- 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // mpvar_1);. _mtl
- 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x3d, // _o.v_texcoord0 =
- 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, // _mtl_i.a_texcoo
- 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, // rd0;. _mtl_o.v_
- 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, // color0 = _mtl_i.
- 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, // a_color0;. retu
- 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // rn _mtl_o;.}...
+ 0x56, 0x53, 0x48, 0x05, 0x01, 0x83, 0xf2, 0xe1, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0xe4, 0x02, 0x00, 0x00, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, // ....using namesp
+ 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // ace metal;.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, // t xlatMtlShaderI
+ 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // nput {. float4
+ 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, // a_color0 [[attri
+ 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // bute(0)]];. flo
+ 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, // at3 a_position [
+ 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, // [attribute(1)]];
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, // . float3 a_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, // oord0 [[attribut
+ 0x65, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // e(2)]];.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, // t xlatMtlShaderO
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // utput {. float4
+ 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, // gl_Position [[p
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // osition]];. flo
+ 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, // at4 v_color0;.
+ 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // float3 v_texcoor
+ 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, // d0;.};.struct xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, // atMtlShaderUnifo
+ 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, // rm {. float4x4
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, // u_modelViewProj;
+ 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.vertex xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, // tlShaderOutput x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, // latMtlMain (xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, // MtlShaderInput _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, // mtl_i [[stage_in
+ 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, // ]], constant xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, // tMtlShaderUnifor
+ 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, // m& _mtl_u [[buff
+ 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, // er(0)]]).{. xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // _mtl_o;. float
+ 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, // 4 tmpvar_1 = 0;.
+ 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, // tmpvar_1.w = 1
+ 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, // .0;. tmpvar_1.x
+ 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, // yz = _mtl_i.a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // sition;. _mtl_o
+ 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, // .gl_Position = (
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, // _mtl_u.u_modelVi
+ 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // ewProj * tmpvar_
+ 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x74, // 1);. _mtl_o.v_t
+ 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // excoord0 = _mtl_
+ 0x69, 0x2e, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x20, // i.a_texcoord0;.
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // _mtl_o.v_color0
+ 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // = _mtl_i.a_colo
+ 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, // r0;. return _mt
+ 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // l_o;.}...
};
+extern const uint8_t* vs_texture_cube_pssl;
+extern const uint32_t vs_texture_cube_pssl_size;
diff --git a/3rdparty/bimg/.appveyor.yml b/3rdparty/bimg/.appveyor.yml
new file mode 100644
index 00000000000..b72256f290b
--- /dev/null
+++ b/3rdparty/bimg/.appveyor.yml
@@ -0,0 +1,20 @@
+shallow_clone: true
+
+os:
+ - Visual Studio 2017
+
+environment:
+ matrix:
+ - TOOLSET: vs2015
+ - TOOLSET: vs2017
+
+configuration:
+ - Debug
+ - Release
+
+install:
+ - git clone https://github.com/bkaradzic/bx ..\bx
+ - ..\bx\tools\bin\windows\genie --with-tools %TOOLSET%
+
+build:
+ project: .build/projects/$(TOOLSET)/bimg.sln
diff --git a/3rdparty/bimg/.editorconfig b/3rdparty/bimg/.editorconfig
new file mode 100644
index 00000000000..4fa189592fd
--- /dev/null
+++ b/3rdparty/bimg/.editorconfig
@@ -0,0 +1,19 @@
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+max_line_length = 100
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[include/bgfx/c99/*.h]
+indent_style = space
+
+[*.ninja]
+indent_style = space
+
+[*.md]
+trim_trailing_whitespace = false
+max_line_length = 80
diff --git a/3rdparty/bimg/.gitattributes b/3rdparty/bimg/.gitattributes
new file mode 100644
index 00000000000..e89cf41267e
--- /dev/null
+++ b/3rdparty/bimg/.gitattributes
@@ -0,0 +1,11 @@
+*.c eol=lf
+*.cpp eol=lf
+*.h eol=lf
+*.sc eol=lf
+*.sh eol=lf
+*.m eol=lf
+*.mm eol=lf
+*.md eol=lf
+*.lua eol=lf
+*.mk eol=lf
+makefile eol=lf
diff --git a/3rdparty/bimg/.gitignore b/3rdparty/bimg/.gitignore
new file mode 100644
index 00000000000..3f3804ea8ea
--- /dev/null
+++ b/3rdparty/bimg/.gitignore
@@ -0,0 +1,7 @@
+.build
+.debug
+.DS_Store
+.git
+.svn
+tags
+.gdb_history
diff --git a/3rdparty/bimg/.travis.yml b/3rdparty/bimg/.travis.yml
new file mode 100644
index 00000000000..9ca3a5ce83e
--- /dev/null
+++ b/3rdparty/bimg/.travis.yml
@@ -0,0 +1,32 @@
+language: cpp
+matrix:
+ include:
+ - compiler: gcc
+ os: linux
+ - compiler: clang
+ os: osx
+
+addons:
+ apt:
+ sources:
+ - ubuntu-toolchain-r-test
+ packages:
+ - gcc-4.8
+ - g++-4.8
+ - clang
+
+before_script:
+ git clone https://github.com/bkaradzic/bx ../bx
+
+script:
+ - if [ "$TRAVIS_OS_NAME" == "linux" ]; then make build CXX="g++-4.8" CC="gcc-4.8"; fi
+ - if [ "$TRAVIS_OS_NAME" == "osx" ]; then make build; fi
+
+branches:
+ only:
+ - master
+
+notifications:
+ email: false
+
+osx_image: xcode7.3
diff --git a/3rdparty/bgfx/3rdparty/edtaa3/LICENSE.md b/3rdparty/bimg/3rdparty/edtaa3/LICENSE.md
index 93e6a9452c0..93e6a9452c0 100644
--- a/3rdparty/bgfx/3rdparty/edtaa3/LICENSE.md
+++ b/3rdparty/bimg/3rdparty/edtaa3/LICENSE.md
diff --git a/3rdparty/bgfx/3rdparty/edtaa3/edtaa3func.cpp b/3rdparty/bimg/3rdparty/edtaa3/edtaa3func.cpp
index e209529542c..e209529542c 100644
--- a/3rdparty/bgfx/3rdparty/edtaa3/edtaa3func.cpp
+++ b/3rdparty/bimg/3rdparty/edtaa3/edtaa3func.cpp
diff --git a/3rdparty/bgfx/3rdparty/edtaa3/edtaa3func.h b/3rdparty/bimg/3rdparty/edtaa3/edtaa3func.h
index 6052aa477ea..6052aa477ea 100644
--- a/3rdparty/bgfx/3rdparty/edtaa3/edtaa3func.h
+++ b/3rdparty/bimg/3rdparty/edtaa3/edtaa3func.h
diff --git a/3rdparty/bgfx/3rdparty/etc1/LICENSE b/3rdparty/bimg/3rdparty/etc1/LICENSE
index 64635a4089d..64635a4089d 100644
--- a/3rdparty/bgfx/3rdparty/etc1/LICENSE
+++ b/3rdparty/bimg/3rdparty/etc1/LICENSE
diff --git a/3rdparty/bgfx/3rdparty/etc1/etc1.cpp b/3rdparty/bimg/3rdparty/etc1/etc1.cpp
index 0953f989700..0953f989700 100644
--- a/3rdparty/bgfx/3rdparty/etc1/etc1.cpp
+++ b/3rdparty/bimg/3rdparty/etc1/etc1.cpp
diff --git a/3rdparty/bgfx/3rdparty/etc1/etc1.h b/3rdparty/bimg/3rdparty/etc1/etc1.h
index d66ca9d3e9e..d66ca9d3e9e 100644
--- a/3rdparty/bgfx/3rdparty/etc1/etc1.h
+++ b/3rdparty/bimg/3rdparty/etc1/etc1.h
diff --git a/3rdparty/bgfx/3rdparty/etc2/LICENSE.txt b/3rdparty/bimg/3rdparty/etc2/LICENSE.txt
index 2254f9ece88..2254f9ece88 100644
--- a/3rdparty/bgfx/3rdparty/etc2/LICENSE.txt
+++ b/3rdparty/bimg/3rdparty/etc2/LICENSE.txt
diff --git a/3rdparty/bgfx/3rdparty/etc2/Math.hpp b/3rdparty/bimg/3rdparty/etc2/Math.hpp
index 3a92a2e7317..3a92a2e7317 100644
--- a/3rdparty/bgfx/3rdparty/etc2/Math.hpp
+++ b/3rdparty/bimg/3rdparty/etc2/Math.hpp
diff --git a/3rdparty/bgfx/3rdparty/etc2/ProcessCommon.hpp b/3rdparty/bimg/3rdparty/etc2/ProcessCommon.hpp
index 7e6addbcdc2..7e6addbcdc2 100644
--- a/3rdparty/bgfx/3rdparty/etc2/ProcessCommon.hpp
+++ b/3rdparty/bimg/3rdparty/etc2/ProcessCommon.hpp
diff --git a/3rdparty/bgfx/3rdparty/etc2/ProcessRGB.cpp b/3rdparty/bimg/3rdparty/etc2/ProcessRGB.cpp
index 29f0f7ea426..29f0f7ea426 100644
--- a/3rdparty/bgfx/3rdparty/etc2/ProcessRGB.cpp
+++ b/3rdparty/bimg/3rdparty/etc2/ProcessRGB.cpp
diff --git a/3rdparty/bgfx/3rdparty/etc2/ProcessRGB.hpp b/3rdparty/bimg/3rdparty/etc2/ProcessRGB.hpp
index 21434a3b267..21434a3b267 100644
--- a/3rdparty/bgfx/3rdparty/etc2/ProcessRGB.hpp
+++ b/3rdparty/bimg/3rdparty/etc2/ProcessRGB.hpp
diff --git a/3rdparty/bgfx/3rdparty/etc2/Tables.cpp b/3rdparty/bimg/3rdparty/etc2/Tables.cpp
index 968fbf5838c..968fbf5838c 100644
--- a/3rdparty/bgfx/3rdparty/etc2/Tables.cpp
+++ b/3rdparty/bimg/3rdparty/etc2/Tables.cpp
diff --git a/3rdparty/bgfx/3rdparty/etc2/Tables.hpp b/3rdparty/bimg/3rdparty/etc2/Tables.hpp
index b570526dc57..b570526dc57 100644
--- a/3rdparty/bgfx/3rdparty/etc2/Tables.hpp
+++ b/3rdparty/bimg/3rdparty/etc2/Tables.hpp
diff --git a/3rdparty/bgfx/3rdparty/etc2/Types.hpp b/3rdparty/bimg/3rdparty/etc2/Types.hpp
index b31da22e4d8..b31da22e4d8 100644
--- a/3rdparty/bgfx/3rdparty/etc2/Types.hpp
+++ b/3rdparty/bimg/3rdparty/etc2/Types.hpp
diff --git a/3rdparty/bgfx/3rdparty/etc2/Vector.hpp b/3rdparty/bimg/3rdparty/etc2/Vector.hpp
index 3005fdc5395..3005fdc5395 100644
--- a/3rdparty/bgfx/3rdparty/etc2/Vector.hpp
+++ b/3rdparty/bimg/3rdparty/etc2/Vector.hpp
diff --git a/3rdparty/bgfx/3rdparty/iqa/LICENSE b/3rdparty/bimg/3rdparty/iqa/LICENSE
index ff67944bfde..ff67944bfde 100644
--- a/3rdparty/bgfx/3rdparty/iqa/LICENSE
+++ b/3rdparty/bimg/3rdparty/iqa/LICENSE
diff --git a/3rdparty/bgfx/3rdparty/iqa/README.txt b/3rdparty/bimg/3rdparty/iqa/README.txt
index 0a95346fe8a..0a95346fe8a 100644
--- a/3rdparty/bgfx/3rdparty/iqa/README.txt
+++ b/3rdparty/bimg/3rdparty/iqa/README.txt
diff --git a/3rdparty/bgfx/3rdparty/iqa/include/convolve.h b/3rdparty/bimg/3rdparty/iqa/include/convolve.h
index a5e2e71a211..a5e2e71a211 100644
--- a/3rdparty/bgfx/3rdparty/iqa/include/convolve.h
+++ b/3rdparty/bimg/3rdparty/iqa/include/convolve.h
diff --git a/3rdparty/bgfx/3rdparty/iqa/include/decimate.h b/3rdparty/bimg/3rdparty/iqa/include/decimate.h
index 40f1a8c04e5..40f1a8c04e5 100644
--- a/3rdparty/bgfx/3rdparty/iqa/include/decimate.h
+++ b/3rdparty/bimg/3rdparty/iqa/include/decimate.h
diff --git a/3rdparty/bgfx/3rdparty/iqa/include/iqa.h b/3rdparty/bimg/3rdparty/iqa/include/iqa.h
index 408675e5abe..408675e5abe 100644
--- a/3rdparty/bgfx/3rdparty/iqa/include/iqa.h
+++ b/3rdparty/bimg/3rdparty/iqa/include/iqa.h
diff --git a/3rdparty/bgfx/3rdparty/iqa/include/iqa_os.h b/3rdparty/bimg/3rdparty/iqa/include/iqa_os.h
index 52e0be0169a..52e0be0169a 100644
--- a/3rdparty/bgfx/3rdparty/iqa/include/iqa_os.h
+++ b/3rdparty/bimg/3rdparty/iqa/include/iqa_os.h
diff --git a/3rdparty/bgfx/3rdparty/iqa/include/math_utils.h b/3rdparty/bimg/3rdparty/iqa/include/math_utils.h
index 674b354d03a..674b354d03a 100644
--- a/3rdparty/bgfx/3rdparty/iqa/include/math_utils.h
+++ b/3rdparty/bimg/3rdparty/iqa/include/math_utils.h
diff --git a/3rdparty/bgfx/3rdparty/iqa/include/ssim.h b/3rdparty/bimg/3rdparty/iqa/include/ssim.h
index 5653afe8064..5653afe8064 100644
--- a/3rdparty/bgfx/3rdparty/iqa/include/ssim.h
+++ b/3rdparty/bimg/3rdparty/iqa/include/ssim.h
diff --git a/3rdparty/bgfx/3rdparty/iqa/source/convolve.c b/3rdparty/bimg/3rdparty/iqa/source/convolve.c
index c9159070fd5..c9159070fd5 100644
--- a/3rdparty/bgfx/3rdparty/iqa/source/convolve.c
+++ b/3rdparty/bimg/3rdparty/iqa/source/convolve.c
diff --git a/3rdparty/bgfx/3rdparty/iqa/source/decimate.c b/3rdparty/bimg/3rdparty/iqa/source/decimate.c
index 91c6a9be3ed..91c6a9be3ed 100644
--- a/3rdparty/bgfx/3rdparty/iqa/source/decimate.c
+++ b/3rdparty/bimg/3rdparty/iqa/source/decimate.c
diff --git a/3rdparty/bgfx/3rdparty/iqa/source/math_utils.c b/3rdparty/bimg/3rdparty/iqa/source/math_utils.c
index 83f923d7673..83f923d7673 100644
--- a/3rdparty/bgfx/3rdparty/iqa/source/math_utils.c
+++ b/3rdparty/bimg/3rdparty/iqa/source/math_utils.c
diff --git a/3rdparty/bgfx/3rdparty/iqa/source/ms_ssim.c b/3rdparty/bimg/3rdparty/iqa/source/ms_ssim.c
index 91812a07722..91812a07722 100644
--- a/3rdparty/bgfx/3rdparty/iqa/source/ms_ssim.c
+++ b/3rdparty/bimg/3rdparty/iqa/source/ms_ssim.c
diff --git a/3rdparty/bgfx/3rdparty/iqa/source/mse.c b/3rdparty/bimg/3rdparty/iqa/source/mse.c
index da0ce772e45..da0ce772e45 100644
--- a/3rdparty/bgfx/3rdparty/iqa/source/mse.c
+++ b/3rdparty/bimg/3rdparty/iqa/source/mse.c
diff --git a/3rdparty/bgfx/3rdparty/iqa/source/psnr.c b/3rdparty/bimg/3rdparty/iqa/source/psnr.c
index 45670716505..45670716505 100644
--- a/3rdparty/bgfx/3rdparty/iqa/source/psnr.c
+++ b/3rdparty/bimg/3rdparty/iqa/source/psnr.c
diff --git a/3rdparty/bgfx/3rdparty/iqa/source/ssim.c b/3rdparty/bimg/3rdparty/iqa/source/ssim.c
index d1acccb40fb..d1acccb40fb 100644
--- a/3rdparty/bgfx/3rdparty/iqa/source/ssim.c
+++ b/3rdparty/bimg/3rdparty/iqa/source/ssim.c
diff --git a/3rdparty/bgfx/3rdparty/libsquish/LICENSE b/3rdparty/bimg/3rdparty/libsquish/LICENSE
index ed1c78d9370..ed1c78d9370 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/LICENSE
+++ b/3rdparty/bimg/3rdparty/libsquish/LICENSE
diff --git a/3rdparty/bgfx/3rdparty/libsquish/README b/3rdparty/bimg/3rdparty/libsquish/README
index d26b72ed5c7..d26b72ed5c7 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/README
+++ b/3rdparty/bimg/3rdparty/libsquish/README
diff --git a/3rdparty/bgfx/3rdparty/libsquish/alpha.cpp b/3rdparty/bimg/3rdparty/libsquish/alpha.cpp
index 0f94e2147cd..0f94e2147cd 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/alpha.cpp
+++ b/3rdparty/bimg/3rdparty/libsquish/alpha.cpp
diff --git a/3rdparty/bgfx/3rdparty/libsquish/alpha.h b/3rdparty/bimg/3rdparty/libsquish/alpha.h
index e5e7f320aa8..e5e7f320aa8 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/alpha.h
+++ b/3rdparty/bimg/3rdparty/libsquish/alpha.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/clusterfit.cpp b/3rdparty/bimg/3rdparty/libsquish/clusterfit.cpp
index 96704460ec7..96704460ec7 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/clusterfit.cpp
+++ b/3rdparty/bimg/3rdparty/libsquish/clusterfit.cpp
diff --git a/3rdparty/bgfx/3rdparty/libsquish/clusterfit.h b/3rdparty/bimg/3rdparty/libsquish/clusterfit.h
index c882469c8be..c882469c8be 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/clusterfit.h
+++ b/3rdparty/bimg/3rdparty/libsquish/clusterfit.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/colourblock.cpp b/3rdparty/bimg/3rdparty/libsquish/colourblock.cpp
index e6a5788b748..e6a5788b748 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/colourblock.cpp
+++ b/3rdparty/bimg/3rdparty/libsquish/colourblock.cpp
diff --git a/3rdparty/bgfx/3rdparty/libsquish/colourblock.h b/3rdparty/bimg/3rdparty/libsquish/colourblock.h
index 2562561d73e..2562561d73e 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/colourblock.h
+++ b/3rdparty/bimg/3rdparty/libsquish/colourblock.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/colourfit.cpp b/3rdparty/bimg/3rdparty/libsquish/colourfit.cpp
index 11efa467482..11efa467482 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/colourfit.cpp
+++ b/3rdparty/bimg/3rdparty/libsquish/colourfit.cpp
diff --git a/3rdparty/bgfx/3rdparty/libsquish/colourfit.h b/3rdparty/bimg/3rdparty/libsquish/colourfit.h
index 75932232932..75932232932 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/colourfit.h
+++ b/3rdparty/bimg/3rdparty/libsquish/colourfit.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/colourset.cpp b/3rdparty/bimg/3rdparty/libsquish/colourset.cpp
index 97d29d9873e..97d29d9873e 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/colourset.cpp
+++ b/3rdparty/bimg/3rdparty/libsquish/colourset.cpp
diff --git a/3rdparty/bgfx/3rdparty/libsquish/colourset.h b/3rdparty/bimg/3rdparty/libsquish/colourset.h
index 0c66fe44027..0c66fe44027 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/colourset.h
+++ b/3rdparty/bimg/3rdparty/libsquish/colourset.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/config.h b/3rdparty/bimg/3rdparty/libsquish/config.h
index 2fad5576a90..2fad5576a90 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/config.h
+++ b/3rdparty/bimg/3rdparty/libsquish/config.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/maths.cpp b/3rdparty/bimg/3rdparty/libsquish/maths.cpp
index 9af4197d386..9af4197d386 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/maths.cpp
+++ b/3rdparty/bimg/3rdparty/libsquish/maths.cpp
diff --git a/3rdparty/bgfx/3rdparty/libsquish/maths.h b/3rdparty/bimg/3rdparty/libsquish/maths.h
index 769ae463f72..769ae463f72 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/maths.h
+++ b/3rdparty/bimg/3rdparty/libsquish/maths.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/rangefit.cpp b/3rdparty/bimg/3rdparty/libsquish/rangefit.cpp
index 3fca1245eb0..3fca1245eb0 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/rangefit.cpp
+++ b/3rdparty/bimg/3rdparty/libsquish/rangefit.cpp
diff --git a/3rdparty/bgfx/3rdparty/libsquish/rangefit.h b/3rdparty/bimg/3rdparty/libsquish/rangefit.h
index e293bdcf366..e293bdcf366 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/rangefit.h
+++ b/3rdparty/bimg/3rdparty/libsquish/rangefit.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/simd.h b/3rdparty/bimg/3rdparty/libsquish/simd.h
index 92965e02e77..92965e02e77 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/simd.h
+++ b/3rdparty/bimg/3rdparty/libsquish/simd.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/simd_float.h b/3rdparty/bimg/3rdparty/libsquish/simd_float.h
index e6351b80eb0..e6351b80eb0 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/simd_float.h
+++ b/3rdparty/bimg/3rdparty/libsquish/simd_float.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/singlecolourfit.cpp b/3rdparty/bimg/3rdparty/libsquish/singlecolourfit.cpp
index e8a01176980..e8a01176980 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/singlecolourfit.cpp
+++ b/3rdparty/bimg/3rdparty/libsquish/singlecolourfit.cpp
diff --git a/3rdparty/bgfx/3rdparty/libsquish/singlecolourfit.h b/3rdparty/bimg/3rdparty/libsquish/singlecolourfit.h
index 54ec17ebb85..54ec17ebb85 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/singlecolourfit.h
+++ b/3rdparty/bimg/3rdparty/libsquish/singlecolourfit.h
diff --git a/3rdparty/bgfx/3rdparty/libsquish/singlecolourlookup.inl b/3rdparty/bimg/3rdparty/libsquish/singlecolourlookup.inl
index 5e911745e41..5e911745e41 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/singlecolourlookup.inl
+++ b/3rdparty/bimg/3rdparty/libsquish/singlecolourlookup.inl
diff --git a/3rdparty/bgfx/3rdparty/libsquish/squish.cpp b/3rdparty/bimg/3rdparty/libsquish/squish.cpp
index cd91f874646..cd91f874646 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/squish.cpp
+++ b/3rdparty/bimg/3rdparty/libsquish/squish.cpp
diff --git a/3rdparty/bgfx/3rdparty/libsquish/squish.h b/3rdparty/bimg/3rdparty/libsquish/squish.h
index 175375f832b..175375f832b 100644
--- a/3rdparty/bgfx/3rdparty/libsquish/squish.h
+++ b/3rdparty/bimg/3rdparty/libsquish/squish.h
diff --git a/3rdparty/bgfx/3rdparty/lodepng/README.md b/3rdparty/bimg/3rdparty/lodepng/README.md
index 35f925494f6..35f925494f6 100644
--- a/3rdparty/bgfx/3rdparty/lodepng/README.md
+++ b/3rdparty/bimg/3rdparty/lodepng/README.md
diff --git a/3rdparty/bgfx/3rdparty/lodepng/lodepng.cpp b/3rdparty/bimg/3rdparty/lodepng/lodepng.cpp
index 7baf7f9274e..7baf7f9274e 100644
--- a/3rdparty/bgfx/3rdparty/lodepng/lodepng.cpp
+++ b/3rdparty/bimg/3rdparty/lodepng/lodepng.cpp
diff --git a/3rdparty/bgfx/3rdparty/lodepng/lodepng.h b/3rdparty/bimg/3rdparty/lodepng/lodepng.h
index 94e81955bf2..94e81955bf2 100644
--- a/3rdparty/bgfx/3rdparty/lodepng/lodepng.h
+++ b/3rdparty/bimg/3rdparty/lodepng/lodepng.h
diff --git a/3rdparty/bimg/3rdparty/maratis-tcl/LICENSE b/3rdparty/bimg/3rdparty/maratis-tcl/LICENSE
new file mode 100644
index 00000000000..d1832710e23
--- /dev/null
+++ b/3rdparty/bimg/3rdparty/maratis-tcl/LICENSE
@@ -0,0 +1,22 @@
+Maratis Tiny C library
+
+Copyright (c) 2015 Anael Seghezzi <www.maratis3d.com>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would
+ be appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must not
+ be misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source
+ distribution.
diff --git a/3rdparty/bimg/3rdparty/maratis-tcl/m_image.h b/3rdparty/bimg/3rdparty/maratis-tcl/m_image.h
new file mode 100644
index 00000000000..9923482fcaa
--- /dev/null
+++ b/3rdparty/bimg/3rdparty/maratis-tcl/m_image.h
@@ -0,0 +1,2340 @@
+/*======================================================================
+ Maratis Tiny C Library
+ version 1.0
+------------------------------------------------------------------------
+ Copyright (c) 2015 Anael Seghezzi <www.maratis3d.org>
+ Copyright (c) 2015 Marti Maria Saguer
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would
+ be appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must not
+ be misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source
+ distribution.
+
+========================================================================*/
+/*
+ Image manipulation :
+ - transformation (re-frame, mirror, rotation)
+ - conversions (float, half, ubyte, linear, greyscale...)
+ - filtering (convolution, Gaussian blur, Harris)
+ - scaling (pyramid, generic, bilinear)
+ - morphology (flood-fill, dilate, erode, thinning)
+ - edge and corner detection (Sobel, Harris)
+
+ to create the implementation,
+ #define M_IMAGE_IMPLEMENTATION
+ in *one* C/CPP file that includes this file.
+
+ optional:
+ include after *m_math.h*
+
+ //////////////////////////////////////////////////////
+ Example: create a 256x256 float image with 1 component:
+
+ struct m_image foo1 = M_IMAGE_IDENTITY();
+ struct m_image foo2 = M_IMAGE_IDENTITY();
+ int x, y;
+
+ m_image_create(&foo1, M_FLOAT, 256, 256, 1);
+ memset(foo1.data, 0, foo1.size * sizeof(float)); // clear to zero
+
+ y = 128; x = 128;
+ ((float *)foo1.data)[y * foo1.width + x] = 1.0f; // set (x, y) pixel to one
+
+ m_image_gaussian_blur(&foo2, &foo1, 3, 3); // apply Gaussian blur
+
+ m_image_destroy(&foo2);
+ m_image_destroy(&foo1);
+*/
+
+#ifndef M_IMAGE_H
+#define M_IMAGE_H
+
+#include <stdint.h>
+
+#define M_IMAGE_VERSION 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef MIAPI
+#define MIAPI extern
+#endif
+
+#define M_VOID 0
+#define M_BOOL 1
+#define M_BYTE 2
+#define M_UBYTE 3
+#define M_SHORT 4
+#define M_USHORT 5
+#define M_INT 6
+#define M_UINT 7
+#define M_HALF 8
+#define M_FLOAT 9
+#define M_DOUBLE 10
+
+struct m_image
+{
+ void *data;
+ int size;
+ int width;
+ int height;
+ int comp;
+ char type;
+};
+
+/* identity, must be used before calling m_image_create */
+#define M_IMAGE_IDENTITY() {0, 0, 0, 0, 0, 0}
+
+/* fully supported types are: M_UBYTE, M_USHORT, M_HALF, M_FLOAT
+ partially supported types: M_BYTE, M_SHORT, M_INT, M_UINT (no support for conversion) */
+MIAPI void m_image_create(struct m_image *image, char type, int width, int height, int comp);
+MIAPI void m_image_destroy(struct m_image *image);
+
+MIAPI void m_image_ubyte_to_float(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_ushort_to_float(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_half_to_float(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_float_to_ubyte(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_float_to_ushort(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_float_to_half(struct m_image *dest, const struct m_image *src);
+
+MIAPI void m_image_copy(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_copy_sub_image(struct m_image *dest, const struct m_image *src, int x, int y, int w, int h);
+MIAPI void m_image_reframe(struct m_image *dest, const struct m_image *src, int left, int top, int right, int bottom);
+MIAPI void m_image_extract_component(struct m_image *dest, const struct m_image *src, int c);
+MIAPI void m_image_rotate_left(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_rotate_right(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_rotate_180(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_mirror_x(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_mirror_y(struct m_image *dest, const struct m_image *src);
+
+MIAPI void m_image_premultiply(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_unpremultiply(struct m_image *dest, const struct m_image *src);
+
+/* float/half conversion */
+MIAPI float m_half2float(uint16_t h);
+MIAPI uint16_t m_float2half(float flt);
+
+/* raw processing */
+MIAPI void m_gaussian_kernel(float *dest, int size);
+MIAPI void m_sst(float *dest, const float *src, int count);
+MIAPI void m_harris_response(float *dest, const float *src, int count);
+MIAPI void m_tfm(float *dest, const float *src, int count);
+MIAPI void m_normalize(float *dest, const float *src, int size); /* dest = src / norm(src) */
+MIAPI void m_normalize_sum(float *dest, const float *src, int size); /* dest = src / sum(src) */
+MIAPI float m_mean(const float *src, int size);
+MIAPI float m_squared_distance(const float *src1, const float *src2, int size);
+MIAPI float m_convolution(const float *src1, const float *src2, int size); /* a dot product really */
+MIAPI float m_chi_squared_distance(const float *src1, const float *src2, int size); /* good at estimating signed hystograms difference */
+
+/* conversion to 1 component (float image only) */
+MIAPI void m_image_grey(struct m_image *dest, const struct m_image *src); /* from RGB src */
+MIAPI void m_image_max(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_max_abs(struct m_image *dest, const struct m_image *src);
+
+/* summed area table (also called "integral image") */
+MIAPI void m_image_summed_area(struct m_image *dest, const struct m_image *src);
+
+/* convolutions (float image only) */
+/* if alpha channel, src image must be pre-multiplied */
+MIAPI void m_image_convolution_h(struct m_image *dest, const struct m_image *src, float *kernel, int size); /* horizontal */
+MIAPI void m_image_convolution_v(struct m_image *dest, const struct m_image *src, float *kernel, int size); /* vertical */
+MIAPI void m_image_gaussian_blur(struct m_image *dest, const struct m_image *src, int dx, int dy);
+
+/* edge and corner (float 1 component image only) */
+MIAPI void m_image_sobel(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_harris(struct m_image *dest, const struct m_image *src, int radius);
+
+/* morphology (ubyte 1 component image only) */
+MIAPI int m_image_floodfill_4x(struct m_image *dest, int x, int y, unsigned char ref, unsigned char value, unsigned short *stack, int stack_size);
+MIAPI int m_image_floodfill_8x(struct m_image *dest, int x, int y, unsigned char ref, unsigned char value, unsigned short *stack, int stack_size);
+MIAPI void m_image_dilate(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_erode(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_edge_4x(struct m_image *dest, const struct m_image *src, unsigned char ref);
+MIAPI void m_image_thin(struct m_image *dest);
+
+/* non maxima suppression (float image only) */
+MIAPI void m_image_non_max_supp(struct m_image *dest, const struct m_image *src, int radius, float threshold);
+
+/* detect Harris corners
+ margin: margin around the image to exclude corners
+ radius: maxima radius
+ threshold: Harris response threshold
+ corners: corners coordinates of size max_count * 2
+ max_count: maximum number of corners
+ return corner count */
+MIAPI int m_image_corner_harris(const struct m_image *src, int margin, int radius, float threshold, int *corners, int max_count);
+
+/* resizing (float image only) */
+MIAPI void m_image_sub_pixel(const struct m_image *src, float x, float y, float *result);
+MIAPI void m_image_pyrdown(struct m_image *dest, const struct m_image *src);
+MIAPI void m_image_resize(struct m_image *dest, const struct m_image *src, int new_width, int new_height);
+
+#ifdef __cplusplus
+}
+#endif
+/*
+----------------------------------------------------------------------*/
+#endif /* M_IMAGE_H */
+
+#ifdef M_IMAGE_IMPLEMENTATION
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <memory.h>
+#include <math.h>
+#include <assert.h>
+
+#ifndef M_SAFE_FREE
+#define M_SAFE_FREE(p) {if (p) {free(p); (p) = NULL;}}
+#endif
+
+#ifndef M_MIN
+#define M_MIN(a, b) (((a) < (b)) ? (a) : (b))
+#endif
+#ifndef M_MAX
+#define M_MAX(a, b) (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef M_ABS
+#define M_ABS(a) (((a) < 0) ? -(a) : (a))
+#endif
+#ifndef M_CLAMP
+#define M_CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
+#endif
+
+MIAPI void m_gaussian_kernel(float *dest, int size)
+{
+ if(size == 3) {
+ dest[0] = 0.25f;
+ dest[1] = 0.50f;
+ dest[2] = 0.25f;
+ }
+ else {
+
+ float *k = dest;
+ float sigma = 1.6f;
+ float rs, s2;
+ float sum = 0.0f;
+ int radius = (size - 1) / 2;
+ int r;
+
+ s2 = 1.0f / expf(sigma * sigma * 2.25f);
+ rs = sigma / (float)radius;
+
+ /* compute gaussian kernel */
+ for(r = -radius; r <= radius; r++) {
+ float x = fabsf(r * rs);
+ float v = (1.0f / expf(x * x)) - s2;
+ *k = v;
+ sum += v;
+ k++;
+ }
+
+ /* normalize */
+ if (sum > 0.0f) {
+ float isum = 1.0f / sum;
+ for (r = 0; r < size; r++)
+ dest[r] *= isum;
+ }
+ }
+}
+
+MIAPI void m_sst(float *dest, const float *src, int count)
+{
+ int i;
+ for (i = 0; i < count; i++) {
+ float dx = src[0];
+ float dy = src[1];
+ dest[0] = dx*dx;
+ dest[1] = dy*dy;
+ dest[2] = dx*dy;
+ src += 2;
+ dest += 3;
+ }
+}
+
+MIAPI void m_harris_response(float *dest, const float *src, int count)
+{
+ int i;
+ for (i = 0; i < count; i++) {
+ float dx2 = src[0];
+ float dy2 = src[1];
+ float dxy = src[2];
+ *dest = (dx2 * dy2 - dxy * dxy) / (dx2 + dy2 + 1e-8f);
+ src += 3;
+ dest++;
+ }
+}
+
+MIAPI void m_tfm(float *dest, const float *src, int count)
+{
+ int i;
+ for (i = 0; i < count; i++) {
+
+ if (src[0] < src[1]) {
+ float dx2 = src[0];
+ float dy2 = src[1];
+ float dxy = src[2];
+ float lambda = 0.5f * (dy2 + dx2 + sqrtf((dy2 * dy2) - (2.0f * dx2 * dy2) + (dx2 * dx2) + (4.0f * dxy * dxy)));
+ dest[0] = dx2 - lambda;
+ dest[1] = dxy;
+ }
+ else {
+ float dy2 = src[0];
+ float dx2 = src[1];
+ float dxy = src[2];
+ float lambda = 0.5f * (dy2 + dx2 + sqrtf((dy2 * dy2) - (2.0f * dx2 * dy2) + (dx2 * dx2) + (4.0f * dxy * dxy)));
+ dest[0] = dxy;
+ dest[1] = dx2 - lambda;
+ }
+
+ src += 3;
+ dest += 2;
+ }
+}
+
+MIAPI float m_chi_squared_distance(const float *src1, const float *src2, int size)
+{
+ int i;
+ float score = 0;
+ for (i = 0; i < size; i++) {
+
+ float val1 = src1[i];
+ float val2 = src2[i];
+
+ /* chi squared distance */
+ if ((val1 + val2) > 0) {
+ float x = val2 - val1;
+ score += (x * x) / (val1 + val2);
+ }
+ }
+
+ return score * 0.5f;
+}
+
+MIAPI float m_convolution(const float *src1, const float *src2, int size)
+{
+ float c = 0; int i;
+ for (i = 0; i < size; i++)
+ c += src1[i] * src2[i];
+ return c;
+}
+
+MIAPI void m_normalize(float *dest, const float *src, int size)
+{
+ float sum = 0.0f; int i;
+ for(i = 0; i < size; i++)
+ sum += src[i] * src[i];
+
+ if (sum > 0.0f) {
+ sum = 1.0f / sqrtf(sum);
+ for(i = 0; i < size; i++)
+ dest[i] = src[i] * sum;
+ }
+ else {
+ memset(dest, 0, size * sizeof(float));
+ }
+}
+
+MIAPI void m_normalize_sum(float *dest, const float *src, int size)
+{
+ float sum = 0.0f; int i;
+ for(i = 0; i < size; i++)
+ sum += src[i];
+
+ if (sum > 0.0f) {
+ sum = 1.0f / sum;
+ for(i = 0; i < size; i++)
+ dest[i] = src[i] * sum;
+ }
+ else {
+ memset(dest, 0, size * sizeof(float));
+ }
+}
+
+MIAPI float m_mean(const float *src, int size)
+{
+ float mean = 0; int i;
+ for (i = 0; i < size; i++)
+ mean += (*src++);
+ return size > 0 ? mean / (float)size : 0;
+}
+
+MIAPI float m_squared_distance(const float *src1, const float *src2, int size)
+{
+ float score = 0; int i;
+ for (i = 0; i < size; i++) {
+ float x = src2[i] - src1[i];
+ score += x * x;
+ }
+ return score;
+}
+
+/* m_half2float / m_float2half :
+ a big thanks to Marti Maria Saguer for allowing the use of this code
+ under the zlib license from "Little Color Management System" (cmshalf.c) */
+
+/* This code is inspired in the paper "Fast Half Float Conversions"
+ by Jeroen van der Zijp */
+
+static uint32_t m__mantissa[2048] = {
+0x00000000, 0x33800000, 0x34000000, 0x34400000, 0x34800000, 0x34a00000,
+0x34c00000, 0x34e00000, 0x35000000, 0x35100000, 0x35200000, 0x35300000,
+0x35400000, 0x35500000, 0x35600000, 0x35700000, 0x35800000, 0x35880000,
+0x35900000, 0x35980000, 0x35a00000, 0x35a80000, 0x35b00000, 0x35b80000,
+0x35c00000, 0x35c80000, 0x35d00000, 0x35d80000, 0x35e00000, 0x35e80000,
+0x35f00000, 0x35f80000, 0x36000000, 0x36040000, 0x36080000, 0x360c0000,
+0x36100000, 0x36140000, 0x36180000, 0x361c0000, 0x36200000, 0x36240000,
+0x36280000, 0x362c0000, 0x36300000, 0x36340000, 0x36380000, 0x363c0000,
+0x36400000, 0x36440000, 0x36480000, 0x364c0000, 0x36500000, 0x36540000,
+0x36580000, 0x365c0000, 0x36600000, 0x36640000, 0x36680000, 0x366c0000,
+0x36700000, 0x36740000, 0x36780000, 0x367c0000, 0x36800000, 0x36820000,
+0x36840000, 0x36860000, 0x36880000, 0x368a0000, 0x368c0000, 0x368e0000,
+0x36900000, 0x36920000, 0x36940000, 0x36960000, 0x36980000, 0x369a0000,
+0x369c0000, 0x369e0000, 0x36a00000, 0x36a20000, 0x36a40000, 0x36a60000,
+0x36a80000, 0x36aa0000, 0x36ac0000, 0x36ae0000, 0x36b00000, 0x36b20000,
+0x36b40000, 0x36b60000, 0x36b80000, 0x36ba0000, 0x36bc0000, 0x36be0000,
+0x36c00000, 0x36c20000, 0x36c40000, 0x36c60000, 0x36c80000, 0x36ca0000,
+0x36cc0000, 0x36ce0000, 0x36d00000, 0x36d20000, 0x36d40000, 0x36d60000,
+0x36d80000, 0x36da0000, 0x36dc0000, 0x36de0000, 0x36e00000, 0x36e20000,
+0x36e40000, 0x36e60000, 0x36e80000, 0x36ea0000, 0x36ec0000, 0x36ee0000,
+0x36f00000, 0x36f20000, 0x36f40000, 0x36f60000, 0x36f80000, 0x36fa0000,
+0x36fc0000, 0x36fe0000, 0x37000000, 0x37010000, 0x37020000, 0x37030000,
+0x37040000, 0x37050000, 0x37060000, 0x37070000, 0x37080000, 0x37090000,
+0x370a0000, 0x370b0000, 0x370c0000, 0x370d0000, 0x370e0000, 0x370f0000,
+0x37100000, 0x37110000, 0x37120000, 0x37130000, 0x37140000, 0x37150000,
+0x37160000, 0x37170000, 0x37180000, 0x37190000, 0x371a0000, 0x371b0000,
+0x371c0000, 0x371d0000, 0x371e0000, 0x371f0000, 0x37200000, 0x37210000,
+0x37220000, 0x37230000, 0x37240000, 0x37250000, 0x37260000, 0x37270000,
+0x37280000, 0x37290000, 0x372a0000, 0x372b0000, 0x372c0000, 0x372d0000,
+0x372e0000, 0x372f0000, 0x37300000, 0x37310000, 0x37320000, 0x37330000,
+0x37340000, 0x37350000, 0x37360000, 0x37370000, 0x37380000, 0x37390000,
+0x373a0000, 0x373b0000, 0x373c0000, 0x373d0000, 0x373e0000, 0x373f0000,
+0x37400000, 0x37410000, 0x37420000, 0x37430000, 0x37440000, 0x37450000,
+0x37460000, 0x37470000, 0x37480000, 0x37490000, 0x374a0000, 0x374b0000,
+0x374c0000, 0x374d0000, 0x374e0000, 0x374f0000, 0x37500000, 0x37510000,
+0x37520000, 0x37530000, 0x37540000, 0x37550000, 0x37560000, 0x37570000,
+0x37580000, 0x37590000, 0x375a0000, 0x375b0000, 0x375c0000, 0x375d0000,
+0x375e0000, 0x375f0000, 0x37600000, 0x37610000, 0x37620000, 0x37630000,
+0x37640000, 0x37650000, 0x37660000, 0x37670000, 0x37680000, 0x37690000,
+0x376a0000, 0x376b0000, 0x376c0000, 0x376d0000, 0x376e0000, 0x376f0000,
+0x37700000, 0x37710000, 0x37720000, 0x37730000, 0x37740000, 0x37750000,
+0x37760000, 0x37770000, 0x37780000, 0x37790000, 0x377a0000, 0x377b0000,
+0x377c0000, 0x377d0000, 0x377e0000, 0x377f0000, 0x37800000, 0x37808000,
+0x37810000, 0x37818000, 0x37820000, 0x37828000, 0x37830000, 0x37838000,
+0x37840000, 0x37848000, 0x37850000, 0x37858000, 0x37860000, 0x37868000,
+0x37870000, 0x37878000, 0x37880000, 0x37888000, 0x37890000, 0x37898000,
+0x378a0000, 0x378a8000, 0x378b0000, 0x378b8000, 0x378c0000, 0x378c8000,
+0x378d0000, 0x378d8000, 0x378e0000, 0x378e8000, 0x378f0000, 0x378f8000,
+0x37900000, 0x37908000, 0x37910000, 0x37918000, 0x37920000, 0x37928000,
+0x37930000, 0x37938000, 0x37940000, 0x37948000, 0x37950000, 0x37958000,
+0x37960000, 0x37968000, 0x37970000, 0x37978000, 0x37980000, 0x37988000,
+0x37990000, 0x37998000, 0x379a0000, 0x379a8000, 0x379b0000, 0x379b8000,
+0x379c0000, 0x379c8000, 0x379d0000, 0x379d8000, 0x379e0000, 0x379e8000,
+0x379f0000, 0x379f8000, 0x37a00000, 0x37a08000, 0x37a10000, 0x37a18000,
+0x37a20000, 0x37a28000, 0x37a30000, 0x37a38000, 0x37a40000, 0x37a48000,
+0x37a50000, 0x37a58000, 0x37a60000, 0x37a68000, 0x37a70000, 0x37a78000,
+0x37a80000, 0x37a88000, 0x37a90000, 0x37a98000, 0x37aa0000, 0x37aa8000,
+0x37ab0000, 0x37ab8000, 0x37ac0000, 0x37ac8000, 0x37ad0000, 0x37ad8000,
+0x37ae0000, 0x37ae8000, 0x37af0000, 0x37af8000, 0x37b00000, 0x37b08000,
+0x37b10000, 0x37b18000, 0x37b20000, 0x37b28000, 0x37b30000, 0x37b38000,
+0x37b40000, 0x37b48000, 0x37b50000, 0x37b58000, 0x37b60000, 0x37b68000,
+0x37b70000, 0x37b78000, 0x37b80000, 0x37b88000, 0x37b90000, 0x37b98000,
+0x37ba0000, 0x37ba8000, 0x37bb0000, 0x37bb8000, 0x37bc0000, 0x37bc8000,
+0x37bd0000, 0x37bd8000, 0x37be0000, 0x37be8000, 0x37bf0000, 0x37bf8000,
+0x37c00000, 0x37c08000, 0x37c10000, 0x37c18000, 0x37c20000, 0x37c28000,
+0x37c30000, 0x37c38000, 0x37c40000, 0x37c48000, 0x37c50000, 0x37c58000,
+0x37c60000, 0x37c68000, 0x37c70000, 0x37c78000, 0x37c80000, 0x37c88000,
+0x37c90000, 0x37c98000, 0x37ca0000, 0x37ca8000, 0x37cb0000, 0x37cb8000,
+0x37cc0000, 0x37cc8000, 0x37cd0000, 0x37cd8000, 0x37ce0000, 0x37ce8000,
+0x37cf0000, 0x37cf8000, 0x37d00000, 0x37d08000, 0x37d10000, 0x37d18000,
+0x37d20000, 0x37d28000, 0x37d30000, 0x37d38000, 0x37d40000, 0x37d48000,
+0x37d50000, 0x37d58000, 0x37d60000, 0x37d68000, 0x37d70000, 0x37d78000,
+0x37d80000, 0x37d88000, 0x37d90000, 0x37d98000, 0x37da0000, 0x37da8000,
+0x37db0000, 0x37db8000, 0x37dc0000, 0x37dc8000, 0x37dd0000, 0x37dd8000,
+0x37de0000, 0x37de8000, 0x37df0000, 0x37df8000, 0x37e00000, 0x37e08000,
+0x37e10000, 0x37e18000, 0x37e20000, 0x37e28000, 0x37e30000, 0x37e38000,
+0x37e40000, 0x37e48000, 0x37e50000, 0x37e58000, 0x37e60000, 0x37e68000,
+0x37e70000, 0x37e78000, 0x37e80000, 0x37e88000, 0x37e90000, 0x37e98000,
+0x37ea0000, 0x37ea8000, 0x37eb0000, 0x37eb8000, 0x37ec0000, 0x37ec8000,
+0x37ed0000, 0x37ed8000, 0x37ee0000, 0x37ee8000, 0x37ef0000, 0x37ef8000,
+0x37f00000, 0x37f08000, 0x37f10000, 0x37f18000, 0x37f20000, 0x37f28000,
+0x37f30000, 0x37f38000, 0x37f40000, 0x37f48000, 0x37f50000, 0x37f58000,
+0x37f60000, 0x37f68000, 0x37f70000, 0x37f78000, 0x37f80000, 0x37f88000,
+0x37f90000, 0x37f98000, 0x37fa0000, 0x37fa8000, 0x37fb0000, 0x37fb8000,
+0x37fc0000, 0x37fc8000, 0x37fd0000, 0x37fd8000, 0x37fe0000, 0x37fe8000,
+0x37ff0000, 0x37ff8000, 0x38000000, 0x38004000, 0x38008000, 0x3800c000,
+0x38010000, 0x38014000, 0x38018000, 0x3801c000, 0x38020000, 0x38024000,
+0x38028000, 0x3802c000, 0x38030000, 0x38034000, 0x38038000, 0x3803c000,
+0x38040000, 0x38044000, 0x38048000, 0x3804c000, 0x38050000, 0x38054000,
+0x38058000, 0x3805c000, 0x38060000, 0x38064000, 0x38068000, 0x3806c000,
+0x38070000, 0x38074000, 0x38078000, 0x3807c000, 0x38080000, 0x38084000,
+0x38088000, 0x3808c000, 0x38090000, 0x38094000, 0x38098000, 0x3809c000,
+0x380a0000, 0x380a4000, 0x380a8000, 0x380ac000, 0x380b0000, 0x380b4000,
+0x380b8000, 0x380bc000, 0x380c0000, 0x380c4000, 0x380c8000, 0x380cc000,
+0x380d0000, 0x380d4000, 0x380d8000, 0x380dc000, 0x380e0000, 0x380e4000,
+0x380e8000, 0x380ec000, 0x380f0000, 0x380f4000, 0x380f8000, 0x380fc000,
+0x38100000, 0x38104000, 0x38108000, 0x3810c000, 0x38110000, 0x38114000,
+0x38118000, 0x3811c000, 0x38120000, 0x38124000, 0x38128000, 0x3812c000,
+0x38130000, 0x38134000, 0x38138000, 0x3813c000, 0x38140000, 0x38144000,
+0x38148000, 0x3814c000, 0x38150000, 0x38154000, 0x38158000, 0x3815c000,
+0x38160000, 0x38164000, 0x38168000, 0x3816c000, 0x38170000, 0x38174000,
+0x38178000, 0x3817c000, 0x38180000, 0x38184000, 0x38188000, 0x3818c000,
+0x38190000, 0x38194000, 0x38198000, 0x3819c000, 0x381a0000, 0x381a4000,
+0x381a8000, 0x381ac000, 0x381b0000, 0x381b4000, 0x381b8000, 0x381bc000,
+0x381c0000, 0x381c4000, 0x381c8000, 0x381cc000, 0x381d0000, 0x381d4000,
+0x381d8000, 0x381dc000, 0x381e0000, 0x381e4000, 0x381e8000, 0x381ec000,
+0x381f0000, 0x381f4000, 0x381f8000, 0x381fc000, 0x38200000, 0x38204000,
+0x38208000, 0x3820c000, 0x38210000, 0x38214000, 0x38218000, 0x3821c000,
+0x38220000, 0x38224000, 0x38228000, 0x3822c000, 0x38230000, 0x38234000,
+0x38238000, 0x3823c000, 0x38240000, 0x38244000, 0x38248000, 0x3824c000,
+0x38250000, 0x38254000, 0x38258000, 0x3825c000, 0x38260000, 0x38264000,
+0x38268000, 0x3826c000, 0x38270000, 0x38274000, 0x38278000, 0x3827c000,
+0x38280000, 0x38284000, 0x38288000, 0x3828c000, 0x38290000, 0x38294000,
+0x38298000, 0x3829c000, 0x382a0000, 0x382a4000, 0x382a8000, 0x382ac000,
+0x382b0000, 0x382b4000, 0x382b8000, 0x382bc000, 0x382c0000, 0x382c4000,
+0x382c8000, 0x382cc000, 0x382d0000, 0x382d4000, 0x382d8000, 0x382dc000,
+0x382e0000, 0x382e4000, 0x382e8000, 0x382ec000, 0x382f0000, 0x382f4000,
+0x382f8000, 0x382fc000, 0x38300000, 0x38304000, 0x38308000, 0x3830c000,
+0x38310000, 0x38314000, 0x38318000, 0x3831c000, 0x38320000, 0x38324000,
+0x38328000, 0x3832c000, 0x38330000, 0x38334000, 0x38338000, 0x3833c000,
+0x38340000, 0x38344000, 0x38348000, 0x3834c000, 0x38350000, 0x38354000,
+0x38358000, 0x3835c000, 0x38360000, 0x38364000, 0x38368000, 0x3836c000,
+0x38370000, 0x38374000, 0x38378000, 0x3837c000, 0x38380000, 0x38384000,
+0x38388000, 0x3838c000, 0x38390000, 0x38394000, 0x38398000, 0x3839c000,
+0x383a0000, 0x383a4000, 0x383a8000, 0x383ac000, 0x383b0000, 0x383b4000,
+0x383b8000, 0x383bc000, 0x383c0000, 0x383c4000, 0x383c8000, 0x383cc000,
+0x383d0000, 0x383d4000, 0x383d8000, 0x383dc000, 0x383e0000, 0x383e4000,
+0x383e8000, 0x383ec000, 0x383f0000, 0x383f4000, 0x383f8000, 0x383fc000,
+0x38400000, 0x38404000, 0x38408000, 0x3840c000, 0x38410000, 0x38414000,
+0x38418000, 0x3841c000, 0x38420000, 0x38424000, 0x38428000, 0x3842c000,
+0x38430000, 0x38434000, 0x38438000, 0x3843c000, 0x38440000, 0x38444000,
+0x38448000, 0x3844c000, 0x38450000, 0x38454000, 0x38458000, 0x3845c000,
+0x38460000, 0x38464000, 0x38468000, 0x3846c000, 0x38470000, 0x38474000,
+0x38478000, 0x3847c000, 0x38480000, 0x38484000, 0x38488000, 0x3848c000,
+0x38490000, 0x38494000, 0x38498000, 0x3849c000, 0x384a0000, 0x384a4000,
+0x384a8000, 0x384ac000, 0x384b0000, 0x384b4000, 0x384b8000, 0x384bc000,
+0x384c0000, 0x384c4000, 0x384c8000, 0x384cc000, 0x384d0000, 0x384d4000,
+0x384d8000, 0x384dc000, 0x384e0000, 0x384e4000, 0x384e8000, 0x384ec000,
+0x384f0000, 0x384f4000, 0x384f8000, 0x384fc000, 0x38500000, 0x38504000,
+0x38508000, 0x3850c000, 0x38510000, 0x38514000, 0x38518000, 0x3851c000,
+0x38520000, 0x38524000, 0x38528000, 0x3852c000, 0x38530000, 0x38534000,
+0x38538000, 0x3853c000, 0x38540000, 0x38544000, 0x38548000, 0x3854c000,
+0x38550000, 0x38554000, 0x38558000, 0x3855c000, 0x38560000, 0x38564000,
+0x38568000, 0x3856c000, 0x38570000, 0x38574000, 0x38578000, 0x3857c000,
+0x38580000, 0x38584000, 0x38588000, 0x3858c000, 0x38590000, 0x38594000,
+0x38598000, 0x3859c000, 0x385a0000, 0x385a4000, 0x385a8000, 0x385ac000,
+0x385b0000, 0x385b4000, 0x385b8000, 0x385bc000, 0x385c0000, 0x385c4000,
+0x385c8000, 0x385cc000, 0x385d0000, 0x385d4000, 0x385d8000, 0x385dc000,
+0x385e0000, 0x385e4000, 0x385e8000, 0x385ec000, 0x385f0000, 0x385f4000,
+0x385f8000, 0x385fc000, 0x38600000, 0x38604000, 0x38608000, 0x3860c000,
+0x38610000, 0x38614000, 0x38618000, 0x3861c000, 0x38620000, 0x38624000,
+0x38628000, 0x3862c000, 0x38630000, 0x38634000, 0x38638000, 0x3863c000,
+0x38640000, 0x38644000, 0x38648000, 0x3864c000, 0x38650000, 0x38654000,
+0x38658000, 0x3865c000, 0x38660000, 0x38664000, 0x38668000, 0x3866c000,
+0x38670000, 0x38674000, 0x38678000, 0x3867c000, 0x38680000, 0x38684000,
+0x38688000, 0x3868c000, 0x38690000, 0x38694000, 0x38698000, 0x3869c000,
+0x386a0000, 0x386a4000, 0x386a8000, 0x386ac000, 0x386b0000, 0x386b4000,
+0x386b8000, 0x386bc000, 0x386c0000, 0x386c4000, 0x386c8000, 0x386cc000,
+0x386d0000, 0x386d4000, 0x386d8000, 0x386dc000, 0x386e0000, 0x386e4000,
+0x386e8000, 0x386ec000, 0x386f0000, 0x386f4000, 0x386f8000, 0x386fc000,
+0x38700000, 0x38704000, 0x38708000, 0x3870c000, 0x38710000, 0x38714000,
+0x38718000, 0x3871c000, 0x38720000, 0x38724000, 0x38728000, 0x3872c000,
+0x38730000, 0x38734000, 0x38738000, 0x3873c000, 0x38740000, 0x38744000,
+0x38748000, 0x3874c000, 0x38750000, 0x38754000, 0x38758000, 0x3875c000,
+0x38760000, 0x38764000, 0x38768000, 0x3876c000, 0x38770000, 0x38774000,
+0x38778000, 0x3877c000, 0x38780000, 0x38784000, 0x38788000, 0x3878c000,
+0x38790000, 0x38794000, 0x38798000, 0x3879c000, 0x387a0000, 0x387a4000,
+0x387a8000, 0x387ac000, 0x387b0000, 0x387b4000, 0x387b8000, 0x387bc000,
+0x387c0000, 0x387c4000, 0x387c8000, 0x387cc000, 0x387d0000, 0x387d4000,
+0x387d8000, 0x387dc000, 0x387e0000, 0x387e4000, 0x387e8000, 0x387ec000,
+0x387f0000, 0x387f4000, 0x387f8000, 0x387fc000, 0x38000000, 0x38002000,
+0x38004000, 0x38006000, 0x38008000, 0x3800a000, 0x3800c000, 0x3800e000,
+0x38010000, 0x38012000, 0x38014000, 0x38016000, 0x38018000, 0x3801a000,
+0x3801c000, 0x3801e000, 0x38020000, 0x38022000, 0x38024000, 0x38026000,
+0x38028000, 0x3802a000, 0x3802c000, 0x3802e000, 0x38030000, 0x38032000,
+0x38034000, 0x38036000, 0x38038000, 0x3803a000, 0x3803c000, 0x3803e000,
+0x38040000, 0x38042000, 0x38044000, 0x38046000, 0x38048000, 0x3804a000,
+0x3804c000, 0x3804e000, 0x38050000, 0x38052000, 0x38054000, 0x38056000,
+0x38058000, 0x3805a000, 0x3805c000, 0x3805e000, 0x38060000, 0x38062000,
+0x38064000, 0x38066000, 0x38068000, 0x3806a000, 0x3806c000, 0x3806e000,
+0x38070000, 0x38072000, 0x38074000, 0x38076000, 0x38078000, 0x3807a000,
+0x3807c000, 0x3807e000, 0x38080000, 0x38082000, 0x38084000, 0x38086000,
+0x38088000, 0x3808a000, 0x3808c000, 0x3808e000, 0x38090000, 0x38092000,
+0x38094000, 0x38096000, 0x38098000, 0x3809a000, 0x3809c000, 0x3809e000,
+0x380a0000, 0x380a2000, 0x380a4000, 0x380a6000, 0x380a8000, 0x380aa000,
+0x380ac000, 0x380ae000, 0x380b0000, 0x380b2000, 0x380b4000, 0x380b6000,
+0x380b8000, 0x380ba000, 0x380bc000, 0x380be000, 0x380c0000, 0x380c2000,
+0x380c4000, 0x380c6000, 0x380c8000, 0x380ca000, 0x380cc000, 0x380ce000,
+0x380d0000, 0x380d2000, 0x380d4000, 0x380d6000, 0x380d8000, 0x380da000,
+0x380dc000, 0x380de000, 0x380e0000, 0x380e2000, 0x380e4000, 0x380e6000,
+0x380e8000, 0x380ea000, 0x380ec000, 0x380ee000, 0x380f0000, 0x380f2000,
+0x380f4000, 0x380f6000, 0x380f8000, 0x380fa000, 0x380fc000, 0x380fe000,
+0x38100000, 0x38102000, 0x38104000, 0x38106000, 0x38108000, 0x3810a000,
+0x3810c000, 0x3810e000, 0x38110000, 0x38112000, 0x38114000, 0x38116000,
+0x38118000, 0x3811a000, 0x3811c000, 0x3811e000, 0x38120000, 0x38122000,
+0x38124000, 0x38126000, 0x38128000, 0x3812a000, 0x3812c000, 0x3812e000,
+0x38130000, 0x38132000, 0x38134000, 0x38136000, 0x38138000, 0x3813a000,
+0x3813c000, 0x3813e000, 0x38140000, 0x38142000, 0x38144000, 0x38146000,
+0x38148000, 0x3814a000, 0x3814c000, 0x3814e000, 0x38150000, 0x38152000,
+0x38154000, 0x38156000, 0x38158000, 0x3815a000, 0x3815c000, 0x3815e000,
+0x38160000, 0x38162000, 0x38164000, 0x38166000, 0x38168000, 0x3816a000,
+0x3816c000, 0x3816e000, 0x38170000, 0x38172000, 0x38174000, 0x38176000,
+0x38178000, 0x3817a000, 0x3817c000, 0x3817e000, 0x38180000, 0x38182000,
+0x38184000, 0x38186000, 0x38188000, 0x3818a000, 0x3818c000, 0x3818e000,
+0x38190000, 0x38192000, 0x38194000, 0x38196000, 0x38198000, 0x3819a000,
+0x3819c000, 0x3819e000, 0x381a0000, 0x381a2000, 0x381a4000, 0x381a6000,
+0x381a8000, 0x381aa000, 0x381ac000, 0x381ae000, 0x381b0000, 0x381b2000,
+0x381b4000, 0x381b6000, 0x381b8000, 0x381ba000, 0x381bc000, 0x381be000,
+0x381c0000, 0x381c2000, 0x381c4000, 0x381c6000, 0x381c8000, 0x381ca000,
+0x381cc000, 0x381ce000, 0x381d0000, 0x381d2000, 0x381d4000, 0x381d6000,
+0x381d8000, 0x381da000, 0x381dc000, 0x381de000, 0x381e0000, 0x381e2000,
+0x381e4000, 0x381e6000, 0x381e8000, 0x381ea000, 0x381ec000, 0x381ee000,
+0x381f0000, 0x381f2000, 0x381f4000, 0x381f6000, 0x381f8000, 0x381fa000,
+0x381fc000, 0x381fe000, 0x38200000, 0x38202000, 0x38204000, 0x38206000,
+0x38208000, 0x3820a000, 0x3820c000, 0x3820e000, 0x38210000, 0x38212000,
+0x38214000, 0x38216000, 0x38218000, 0x3821a000, 0x3821c000, 0x3821e000,
+0x38220000, 0x38222000, 0x38224000, 0x38226000, 0x38228000, 0x3822a000,
+0x3822c000, 0x3822e000, 0x38230000, 0x38232000, 0x38234000, 0x38236000,
+0x38238000, 0x3823a000, 0x3823c000, 0x3823e000, 0x38240000, 0x38242000,
+0x38244000, 0x38246000, 0x38248000, 0x3824a000, 0x3824c000, 0x3824e000,
+0x38250000, 0x38252000, 0x38254000, 0x38256000, 0x38258000, 0x3825a000,
+0x3825c000, 0x3825e000, 0x38260000, 0x38262000, 0x38264000, 0x38266000,
+0x38268000, 0x3826a000, 0x3826c000, 0x3826e000, 0x38270000, 0x38272000,
+0x38274000, 0x38276000, 0x38278000, 0x3827a000, 0x3827c000, 0x3827e000,
+0x38280000, 0x38282000, 0x38284000, 0x38286000, 0x38288000, 0x3828a000,
+0x3828c000, 0x3828e000, 0x38290000, 0x38292000, 0x38294000, 0x38296000,
+0x38298000, 0x3829a000, 0x3829c000, 0x3829e000, 0x382a0000, 0x382a2000,
+0x382a4000, 0x382a6000, 0x382a8000, 0x382aa000, 0x382ac000, 0x382ae000,
+0x382b0000, 0x382b2000, 0x382b4000, 0x382b6000, 0x382b8000, 0x382ba000,
+0x382bc000, 0x382be000, 0x382c0000, 0x382c2000, 0x382c4000, 0x382c6000,
+0x382c8000, 0x382ca000, 0x382cc000, 0x382ce000, 0x382d0000, 0x382d2000,
+0x382d4000, 0x382d6000, 0x382d8000, 0x382da000, 0x382dc000, 0x382de000,
+0x382e0000, 0x382e2000, 0x382e4000, 0x382e6000, 0x382e8000, 0x382ea000,
+0x382ec000, 0x382ee000, 0x382f0000, 0x382f2000, 0x382f4000, 0x382f6000,
+0x382f8000, 0x382fa000, 0x382fc000, 0x382fe000, 0x38300000, 0x38302000,
+0x38304000, 0x38306000, 0x38308000, 0x3830a000, 0x3830c000, 0x3830e000,
+0x38310000, 0x38312000, 0x38314000, 0x38316000, 0x38318000, 0x3831a000,
+0x3831c000, 0x3831e000, 0x38320000, 0x38322000, 0x38324000, 0x38326000,
+0x38328000, 0x3832a000, 0x3832c000, 0x3832e000, 0x38330000, 0x38332000,
+0x38334000, 0x38336000, 0x38338000, 0x3833a000, 0x3833c000, 0x3833e000,
+0x38340000, 0x38342000, 0x38344000, 0x38346000, 0x38348000, 0x3834a000,
+0x3834c000, 0x3834e000, 0x38350000, 0x38352000, 0x38354000, 0x38356000,
+0x38358000, 0x3835a000, 0x3835c000, 0x3835e000, 0x38360000, 0x38362000,
+0x38364000, 0x38366000, 0x38368000, 0x3836a000, 0x3836c000, 0x3836e000,
+0x38370000, 0x38372000, 0x38374000, 0x38376000, 0x38378000, 0x3837a000,
+0x3837c000, 0x3837e000, 0x38380000, 0x38382000, 0x38384000, 0x38386000,
+0x38388000, 0x3838a000, 0x3838c000, 0x3838e000, 0x38390000, 0x38392000,
+0x38394000, 0x38396000, 0x38398000, 0x3839a000, 0x3839c000, 0x3839e000,
+0x383a0000, 0x383a2000, 0x383a4000, 0x383a6000, 0x383a8000, 0x383aa000,
+0x383ac000, 0x383ae000, 0x383b0000, 0x383b2000, 0x383b4000, 0x383b6000,
+0x383b8000, 0x383ba000, 0x383bc000, 0x383be000, 0x383c0000, 0x383c2000,
+0x383c4000, 0x383c6000, 0x383c8000, 0x383ca000, 0x383cc000, 0x383ce000,
+0x383d0000, 0x383d2000, 0x383d4000, 0x383d6000, 0x383d8000, 0x383da000,
+0x383dc000, 0x383de000, 0x383e0000, 0x383e2000, 0x383e4000, 0x383e6000,
+0x383e8000, 0x383ea000, 0x383ec000, 0x383ee000, 0x383f0000, 0x383f2000,
+0x383f4000, 0x383f6000, 0x383f8000, 0x383fa000, 0x383fc000, 0x383fe000,
+0x38400000, 0x38402000, 0x38404000, 0x38406000, 0x38408000, 0x3840a000,
+0x3840c000, 0x3840e000, 0x38410000, 0x38412000, 0x38414000, 0x38416000,
+0x38418000, 0x3841a000, 0x3841c000, 0x3841e000, 0x38420000, 0x38422000,
+0x38424000, 0x38426000, 0x38428000, 0x3842a000, 0x3842c000, 0x3842e000,
+0x38430000, 0x38432000, 0x38434000, 0x38436000, 0x38438000, 0x3843a000,
+0x3843c000, 0x3843e000, 0x38440000, 0x38442000, 0x38444000, 0x38446000,
+0x38448000, 0x3844a000, 0x3844c000, 0x3844e000, 0x38450000, 0x38452000,
+0x38454000, 0x38456000, 0x38458000, 0x3845a000, 0x3845c000, 0x3845e000,
+0x38460000, 0x38462000, 0x38464000, 0x38466000, 0x38468000, 0x3846a000,
+0x3846c000, 0x3846e000, 0x38470000, 0x38472000, 0x38474000, 0x38476000,
+0x38478000, 0x3847a000, 0x3847c000, 0x3847e000, 0x38480000, 0x38482000,
+0x38484000, 0x38486000, 0x38488000, 0x3848a000, 0x3848c000, 0x3848e000,
+0x38490000, 0x38492000, 0x38494000, 0x38496000, 0x38498000, 0x3849a000,
+0x3849c000, 0x3849e000, 0x384a0000, 0x384a2000, 0x384a4000, 0x384a6000,
+0x384a8000, 0x384aa000, 0x384ac000, 0x384ae000, 0x384b0000, 0x384b2000,
+0x384b4000, 0x384b6000, 0x384b8000, 0x384ba000, 0x384bc000, 0x384be000,
+0x384c0000, 0x384c2000, 0x384c4000, 0x384c6000, 0x384c8000, 0x384ca000,
+0x384cc000, 0x384ce000, 0x384d0000, 0x384d2000, 0x384d4000, 0x384d6000,
+0x384d8000, 0x384da000, 0x384dc000, 0x384de000, 0x384e0000, 0x384e2000,
+0x384e4000, 0x384e6000, 0x384e8000, 0x384ea000, 0x384ec000, 0x384ee000,
+0x384f0000, 0x384f2000, 0x384f4000, 0x384f6000, 0x384f8000, 0x384fa000,
+0x384fc000, 0x384fe000, 0x38500000, 0x38502000, 0x38504000, 0x38506000,
+0x38508000, 0x3850a000, 0x3850c000, 0x3850e000, 0x38510000, 0x38512000,
+0x38514000, 0x38516000, 0x38518000, 0x3851a000, 0x3851c000, 0x3851e000,
+0x38520000, 0x38522000, 0x38524000, 0x38526000, 0x38528000, 0x3852a000,
+0x3852c000, 0x3852e000, 0x38530000, 0x38532000, 0x38534000, 0x38536000,
+0x38538000, 0x3853a000, 0x3853c000, 0x3853e000, 0x38540000, 0x38542000,
+0x38544000, 0x38546000, 0x38548000, 0x3854a000, 0x3854c000, 0x3854e000,
+0x38550000, 0x38552000, 0x38554000, 0x38556000, 0x38558000, 0x3855a000,
+0x3855c000, 0x3855e000, 0x38560000, 0x38562000, 0x38564000, 0x38566000,
+0x38568000, 0x3856a000, 0x3856c000, 0x3856e000, 0x38570000, 0x38572000,
+0x38574000, 0x38576000, 0x38578000, 0x3857a000, 0x3857c000, 0x3857e000,
+0x38580000, 0x38582000, 0x38584000, 0x38586000, 0x38588000, 0x3858a000,
+0x3858c000, 0x3858e000, 0x38590000, 0x38592000, 0x38594000, 0x38596000,
+0x38598000, 0x3859a000, 0x3859c000, 0x3859e000, 0x385a0000, 0x385a2000,
+0x385a4000, 0x385a6000, 0x385a8000, 0x385aa000, 0x385ac000, 0x385ae000,
+0x385b0000, 0x385b2000, 0x385b4000, 0x385b6000, 0x385b8000, 0x385ba000,
+0x385bc000, 0x385be000, 0x385c0000, 0x385c2000, 0x385c4000, 0x385c6000,
+0x385c8000, 0x385ca000, 0x385cc000, 0x385ce000, 0x385d0000, 0x385d2000,
+0x385d4000, 0x385d6000, 0x385d8000, 0x385da000, 0x385dc000, 0x385de000,
+0x385e0000, 0x385e2000, 0x385e4000, 0x385e6000, 0x385e8000, 0x385ea000,
+0x385ec000, 0x385ee000, 0x385f0000, 0x385f2000, 0x385f4000, 0x385f6000,
+0x385f8000, 0x385fa000, 0x385fc000, 0x385fe000, 0x38600000, 0x38602000,
+0x38604000, 0x38606000, 0x38608000, 0x3860a000, 0x3860c000, 0x3860e000,
+0x38610000, 0x38612000, 0x38614000, 0x38616000, 0x38618000, 0x3861a000,
+0x3861c000, 0x3861e000, 0x38620000, 0x38622000, 0x38624000, 0x38626000,
+0x38628000, 0x3862a000, 0x3862c000, 0x3862e000, 0x38630000, 0x38632000,
+0x38634000, 0x38636000, 0x38638000, 0x3863a000, 0x3863c000, 0x3863e000,
+0x38640000, 0x38642000, 0x38644000, 0x38646000, 0x38648000, 0x3864a000,
+0x3864c000, 0x3864e000, 0x38650000, 0x38652000, 0x38654000, 0x38656000,
+0x38658000, 0x3865a000, 0x3865c000, 0x3865e000, 0x38660000, 0x38662000,
+0x38664000, 0x38666000, 0x38668000, 0x3866a000, 0x3866c000, 0x3866e000,
+0x38670000, 0x38672000, 0x38674000, 0x38676000, 0x38678000, 0x3867a000,
+0x3867c000, 0x3867e000, 0x38680000, 0x38682000, 0x38684000, 0x38686000,
+0x38688000, 0x3868a000, 0x3868c000, 0x3868e000, 0x38690000, 0x38692000,
+0x38694000, 0x38696000, 0x38698000, 0x3869a000, 0x3869c000, 0x3869e000,
+0x386a0000, 0x386a2000, 0x386a4000, 0x386a6000, 0x386a8000, 0x386aa000,
+0x386ac000, 0x386ae000, 0x386b0000, 0x386b2000, 0x386b4000, 0x386b6000,
+0x386b8000, 0x386ba000, 0x386bc000, 0x386be000, 0x386c0000, 0x386c2000,
+0x386c4000, 0x386c6000, 0x386c8000, 0x386ca000, 0x386cc000, 0x386ce000,
+0x386d0000, 0x386d2000, 0x386d4000, 0x386d6000, 0x386d8000, 0x386da000,
+0x386dc000, 0x386de000, 0x386e0000, 0x386e2000, 0x386e4000, 0x386e6000,
+0x386e8000, 0x386ea000, 0x386ec000, 0x386ee000, 0x386f0000, 0x386f2000,
+0x386f4000, 0x386f6000, 0x386f8000, 0x386fa000, 0x386fc000, 0x386fe000,
+0x38700000, 0x38702000, 0x38704000, 0x38706000, 0x38708000, 0x3870a000,
+0x3870c000, 0x3870e000, 0x38710000, 0x38712000, 0x38714000, 0x38716000,
+0x38718000, 0x3871a000, 0x3871c000, 0x3871e000, 0x38720000, 0x38722000,
+0x38724000, 0x38726000, 0x38728000, 0x3872a000, 0x3872c000, 0x3872e000,
+0x38730000, 0x38732000, 0x38734000, 0x38736000, 0x38738000, 0x3873a000,
+0x3873c000, 0x3873e000, 0x38740000, 0x38742000, 0x38744000, 0x38746000,
+0x38748000, 0x3874a000, 0x3874c000, 0x3874e000, 0x38750000, 0x38752000,
+0x38754000, 0x38756000, 0x38758000, 0x3875a000, 0x3875c000, 0x3875e000,
+0x38760000, 0x38762000, 0x38764000, 0x38766000, 0x38768000, 0x3876a000,
+0x3876c000, 0x3876e000, 0x38770000, 0x38772000, 0x38774000, 0x38776000,
+0x38778000, 0x3877a000, 0x3877c000, 0x3877e000, 0x38780000, 0x38782000,
+0x38784000, 0x38786000, 0x38788000, 0x3878a000, 0x3878c000, 0x3878e000,
+0x38790000, 0x38792000, 0x38794000, 0x38796000, 0x38798000, 0x3879a000,
+0x3879c000, 0x3879e000, 0x387a0000, 0x387a2000, 0x387a4000, 0x387a6000,
+0x387a8000, 0x387aa000, 0x387ac000, 0x387ae000, 0x387b0000, 0x387b2000,
+0x387b4000, 0x387b6000, 0x387b8000, 0x387ba000, 0x387bc000, 0x387be000,
+0x387c0000, 0x387c2000, 0x387c4000, 0x387c6000, 0x387c8000, 0x387ca000,
+0x387cc000, 0x387ce000, 0x387d0000, 0x387d2000, 0x387d4000, 0x387d6000,
+0x387d8000, 0x387da000, 0x387dc000, 0x387de000, 0x387e0000, 0x387e2000,
+0x387e4000, 0x387e6000, 0x387e8000, 0x387ea000, 0x387ec000, 0x387ee000,
+0x387f0000, 0x387f2000, 0x387f4000, 0x387f6000, 0x387f8000, 0x387fa000,
+0x387fc000, 0x387fe000
+};
+
+static uint16_t m__offset[64] = {
+0x0000, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0000, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+0x0400, 0x0400, 0x0400, 0x0400
+};
+
+static uint32_t m__exponent[64] = {
+0x00000000, 0x00800000, 0x01000000, 0x01800000, 0x02000000, 0x02800000,
+0x03000000, 0x03800000, 0x04000000, 0x04800000, 0x05000000, 0x05800000,
+0x06000000, 0x06800000, 0x07000000, 0x07800000, 0x08000000, 0x08800000,
+0x09000000, 0x09800000, 0x0a000000, 0x0a800000, 0x0b000000, 0x0b800000,
+0x0c000000, 0x0c800000, 0x0d000000, 0x0d800000, 0x0e000000, 0x0e800000,
+0x0f000000, 0x47800000, 0x80000000, 0x80800000, 0x81000000, 0x81800000,
+0x82000000, 0x82800000, 0x83000000, 0x83800000, 0x84000000, 0x84800000,
+0x85000000, 0x85800000, 0x86000000, 0x86800000, 0x87000000, 0x87800000,
+0x88000000, 0x88800000, 0x89000000, 0x89800000, 0x8a000000, 0x8a800000,
+0x8b000000, 0x8b800000, 0x8c000000, 0x8c800000, 0x8d000000, 0x8d800000,
+0x8e000000, 0x8e800000, 0x8f000000, 0xc7800000
+};
+
+static uint16_t m__base[512] = {
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040,
+0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400, 0x1800, 0x1c00,
+0x2000, 0x2400, 0x2800, 0x2c00, 0x3000, 0x3400, 0x3800, 0x3c00, 0x4000, 0x4400,
+0x4800, 0x4c00, 0x5000, 0x5400, 0x5800, 0x5c00, 0x6000, 0x6400, 0x6800, 0x6c00,
+0x7000, 0x7400, 0x7800, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00,
+0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8001,
+0x8002, 0x8004, 0x8008, 0x8010, 0x8020, 0x8040, 0x8080, 0x8100, 0x8200, 0x8400,
+0x8800, 0x8c00, 0x9000, 0x9400, 0x9800, 0x9c00, 0xa000, 0xa400, 0xa800, 0xac00,
+0xb000, 0xb400, 0xb800, 0xbc00, 0xc000, 0xc400, 0xc800, 0xcc00, 0xd000, 0xd400,
+0xd800, 0xdc00, 0xe000, 0xe400, 0xe800, 0xec00, 0xf000, 0xf400, 0xf800, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00,
+0xfc00, 0xfc00
+};
+
+static uint8_t m__shift[512] = {
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x17,
+0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0d, 0x0d,
+0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d,
+0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0d, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13,
+0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d,
+0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d,
+0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+0x18, 0x18, 0x18, 0x18, 0x0d
+};
+
+MIAPI float m_half2float(uint16_t h)
+{
+ union {
+ float flt;
+ uint32_t num;
+ } out;
+
+ int n = h >> 10;
+
+ out.num = m__mantissa[ (h & 0x3ff) + m__offset[n]] + m__exponent[n];
+ return out.flt;
+}
+
+MIAPI uint16_t m_float2half(float flt)
+{
+ union {
+ float flt;
+ uint32_t num;
+ } in;
+
+ uint32_t n, j;
+
+ in.flt = flt;
+ n = in.num;
+ j = (n >> 23) & 0x1ff;
+
+ return (uint16_t) ((uint32_t) m__base[j] + ((n & 0x007fffff) >> m__shift[j]));
+}
+
+MIAPI void m_image_create(struct m_image *image, char type, int width, int height, int comp)
+{
+ int size = width * height * comp;
+ assert(size > 0);
+
+ /* already allocated */
+ if (image->data != 0 && type == image->type && width == image->width && height == image->height && comp == image->comp)
+ return;
+
+ M_SAFE_FREE(image->data);
+
+ switch (type) {
+ case M_BYTE:
+ case M_UBYTE:
+ image->data = malloc(size * sizeof(uint8_t));
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ image->data = malloc(size * sizeof(uint16_t));
+ break;
+ case M_INT:
+ case M_UINT:
+ image->data = malloc(size * sizeof(uint32_t));
+ break;
+ case M_FLOAT:
+ image->data = malloc(size * sizeof(float));
+ break;
+ default:
+ assert(0);
+ return;
+ }
+
+ image->type = type;
+ image->width = width;
+ image->height = height;
+ image->comp = comp;
+ image->size = size;
+}
+
+MIAPI void m_image_destroy(struct m_image *image)
+{
+ M_SAFE_FREE(image->data);
+ memset(image, 0, sizeof(struct m_image));
+}
+
+MIAPI void m_image_copy(struct m_image *dest, const struct m_image *src)
+{
+ m_image_create(dest, src->type, src->width, src->height, src->comp);
+
+ switch (dest->type) {
+ case M_BYTE:
+ case M_UBYTE:
+ memcpy(dest->data, src->data, dest->size*sizeof(char));
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ memcpy(dest->data, src->data, dest->size*sizeof(short));
+ break;
+ case M_INT:
+ case M_UINT:
+ memcpy(dest->data, src->data, dest->size*sizeof(int));
+ break;
+ case M_FLOAT:
+ memcpy(dest->data, src->data, dest->size*sizeof(float));
+ break;
+ default:
+ assert(0);
+ break;
+ }
+}
+
+MIAPI void m_image_copy_sub_image(struct m_image *dest, const struct m_image *src, int x, int y, int w, int h)
+{
+ #define M_COPY_SUBI(T)\
+ {\
+ T *sData = (T *)src->data + (miny * src->width + minx) * comp;\
+ T *dData = (T *)dest->data;\
+ int y;\
+ for (y = miny; y <= maxy; y++) {\
+ memcpy(dData, sData, dstep * sizeof(T));\
+ dData += dstep;\
+ sData += sstep;\
+ }\
+ }
+
+ int comp = src->comp;
+ int minx = M_MAX(0, x);
+ int miny = M_MAX(0, y);
+ int maxx = M_CLAMP(x + w - 1, 0, src->width - 1);
+ int maxy = M_CLAMP(y + h - 1, 0, src->height - 1);
+ int dwidth = 1 + maxx - minx;
+ int dheight = 1 + maxy - miny;
+ int sstep = src->width * comp;
+ int dstep = dwidth * comp;
+
+ m_image_create(dest, src->type, dwidth, dheight, src->comp);
+
+ switch(src->type)
+ {
+ case M_BYTE:
+ case M_UBYTE:
+ M_COPY_SUBI(char);
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ M_COPY_SUBI(short);
+ break;
+ case M_INT:
+ case M_UINT:
+ M_COPY_SUBI(int);
+ break;
+ case M_FLOAT:
+ M_COPY_SUBI(float);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ #undef M_COPY_SUBI
+}
+
+MIAPI void m_image_ubyte_to_float(struct m_image *dest, const struct m_image *src)
+{
+ uint8_t *src_data;
+ float *dest_data;
+ float ubyte_div = 1.0f / 255.0f;
+ int i;
+
+ m_image_create(dest, M_FLOAT, src->width, src->height, src->comp);
+
+ src_data = (uint8_t *)src->data;
+ dest_data = (float *)dest->data;
+ for (i = 0; i < src->size; i++)
+ dest_data[i] = (float)src_data[i] * ubyte_div;
+}
+
+MIAPI void m_image_ushort_to_float(struct m_image *dest, const struct m_image *src)
+{
+ uint16_t *src_data;
+ float *dest_data;
+ float ushort_div = 1.0f / (float)65535;
+ int i;
+
+ m_image_create(dest, M_FLOAT, src->width, src->height, src->comp);
+
+ src_data = (uint16_t *)src->data;
+ dest_data = (float *)dest->data;
+ for (i = 0; i < src->size; i++)
+ dest_data[i] = (float)src_data[i] * ushort_div;
+}
+
+MIAPI void m_image_half_to_float(struct m_image *dest, const struct m_image *src)
+{
+ uint16_t *src_data;
+ float *dest_data;
+ int i;
+
+ m_image_create(dest, M_FLOAT, src->width, src->height, src->comp);
+
+ src_data = (uint16_t *)src->data;
+ dest_data = (float *)dest->data;
+ for (i = 0; i < src->size; i++)
+ dest_data[i] = m_half2float(src_data[i]);
+}
+
+MIAPI void m_image_float_to_ubyte(struct m_image *dest, const struct m_image *src)
+{
+ float *src_data;
+ uint8_t *dest_data;
+ int i;
+
+ m_image_create(dest, M_UBYTE, src->width, src->height, src->comp);
+
+ src_data = (float *)src->data;
+ dest_data = (uint8_t *)dest->data;
+ for (i = 0; i < src->size; i++) {
+ int x = (int)(src_data[i] * 255);
+ dest_data[i] = (uint8_t)M_CLAMP(x, 0, 255);
+ }
+}
+
+MIAPI void m_image_float_to_ushort(struct m_image *dest, const struct m_image *src)
+{
+ float *src_data;
+ uint16_t *dest_data;
+ int i;
+
+ m_image_create(dest, M_USHORT, src->width, src->height, src->comp);
+
+ src_data = (float *)src->data;
+ dest_data = (uint16_t *)dest->data;
+ for (i = 0; i < src->size; i++) {
+ int x = (int)(src_data[i] * 65535);
+ dest_data[i] = (uint16_t)M_CLAMP(x, 0, 65535);
+ }
+}
+
+MIAPI void m_image_float_to_half(struct m_image *dest, const struct m_image *src)
+{
+ float *src_data;
+ uint16_t *dest_data;
+ int i;
+
+ m_image_create(dest, M_USHORT, src->width, src->height, src->comp);
+
+ src_data = (float *)src->data;
+ dest_data = (uint16_t *)dest->data;
+ for (i = 0; i < src->size; i++)
+ dest_data[i] = m_float2half(src_data[i]);
+}
+
+MIAPI void m_image_extract_component(struct m_image *dest, const struct m_image *src, int c)
+{
+ #define M_EXTRACT(T)\
+ {\
+ T *dest_pixel = (T *)dest->data;\
+ T *src_pixel = (T *)src->data;\
+ for (i = 0; i < size; i += comp) {\
+ (*dest_pixel) = src_pixel[c];\
+ dest_pixel++;\
+ src_pixel += comp;\
+ }\
+ }
+
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int size = src->size;
+ int i;
+
+ if(c >= src->comp) {
+ assert(0);
+ return;
+ }
+
+ m_image_create(dest, src->type, width, height, 1);
+
+ switch(src->type)
+ {
+ case M_BYTE:
+ case M_UBYTE:
+ M_EXTRACT(char);
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ M_EXTRACT(short);
+ break;
+ case M_INT:
+ case M_UINT:
+ M_EXTRACT(int);
+ break;
+ case M_FLOAT:
+ M_EXTRACT(float);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ #undef M_EXTRACT
+}
+
+MIAPI void m_image_reframe(struct m_image *dest, const struct m_image *src, int left, int top, int right, int bottom)
+{
+ #define M_REFRAME(T)\
+ {\
+ T *src_data;\
+ T *src_pixel;\
+ T *dest_pixel;\
+ int c;\
+ int x, y;\
+ m_image_create(dest, src->type, width2, height2, comp);\
+ src_data = (T *)src->data;\
+ dest_pixel = (T *)dest->data;\
+ for (y = 0; y < height2; y++) {\
+ T *src_y;\
+ int ys = y - top;\
+ src_y = src_data + M_CLAMP(ys, 0, hm1) * width * comp;\
+ for (x = 0; x < width2; x++) {\
+ int xs = x - left;\
+ src_pixel = src_y + M_CLAMP(xs, 0, wm1) * comp;\
+ for (c = 0; c < comp; c++)\
+ dest_pixel[c] = src_pixel[c];\
+ dest_pixel += comp;\
+ }\
+ }\
+ }
+
+ if(left != 0 || top != 0 || right != 0 || bottom != 0) {
+
+ int comp = src->comp;
+ int width = src->width;
+ int height = src->height;
+ int width2 = width + left + right;
+ int height2 = height + top + bottom;
+ int wm1 = width - 1;
+ int hm1 = height - 1;
+
+ if(width2 > 0 && height2 > 0) {
+
+ switch(src->type) {
+ case M_BYTE:
+ case M_UBYTE:
+ M_REFRAME(char);
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ M_REFRAME(short);
+ break;
+ case M_INT:
+ case M_UINT:
+ M_REFRAME(int);
+ break;
+ case M_FLOAT:
+ M_REFRAME(float);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+ }
+ else {
+ assert(0);
+ }
+ }
+ else {
+ m_image_copy(dest, src);
+ }
+
+ #undef M_REFRAME
+}
+
+MIAPI void m_image_rotate_left(struct m_image *dest, const struct m_image *src)
+{
+ #define M_ROTATE_L(T)\
+ {\
+ T *src_data = (T *)src->data;\
+ T *dest_pixel = (T *)dest->data;\
+ for (y = 0; y < width; y++)\
+ for (x = 0; x < height; x++) {\
+ T *src_pixel = src_data + (x * width + (width - 1 - y)) * comp;\
+ for (c = 0; c < comp; c++)\
+ dest_pixel[c] = src_pixel[c];\
+ dest_pixel += comp;\
+ }\
+ }
+
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int x, y, c;
+
+ m_image_create(dest, src->type, height, width, comp);
+
+ switch(src->type)
+ {
+ case M_BYTE:
+ case M_UBYTE:
+ M_ROTATE_L(char);
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ M_ROTATE_L(short);
+ break;
+ case M_INT:
+ case M_UINT:
+ M_ROTATE_L(int);
+ break;
+ case M_FLOAT:
+ M_ROTATE_L(float);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ #undef M_ROTATE_L
+}
+
+MIAPI void m_image_rotate_right(struct m_image *dest, const struct m_image *src)
+{
+ #define M_ROTATE_R(T)\
+ {\
+ T *src_data = (T *)src->data;\
+ T *dest_pixel = (T *)dest->data;\
+ for (y = 0; y < width; y++)\
+ for (x = 0; x < height; x++) {\
+ T *src_pixel = src_data + ((height - 1 - x) * width + y) * comp;\
+ for (c = 0; c < comp; c++)\
+ dest_pixel[c] = src_pixel[c];\
+ dest_pixel += comp;\
+ }\
+ }
+
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int x, y, c;
+
+ m_image_create(dest, src->type, height, width, comp);
+
+ switch(src->type)
+ {
+ case M_BYTE:
+ case M_UBYTE:
+ M_ROTATE_R(char);
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ M_ROTATE_R(short);
+ break;
+ case M_INT:
+ case M_UINT:
+ M_ROTATE_R(int);
+ break;
+ case M_FLOAT:
+ M_ROTATE_R(float);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ #undef M_ROTATE_R
+}
+
+MIAPI void m_image_rotate_180(struct m_image *dest, const struct m_image *src)
+{
+ #define M_ROTATE_180(T)\
+ {\
+ T *src_data = (T *)src->data;\
+ T *dest_pixel = (T *)dest->data;\
+ for (y = 0; y < height; y++)\
+ for (x = 0; x < width; x++) {\
+ T *src_pixel = src_data + ((height - 1 - y) * width + (width - 1 - x)) * comp;\
+ for (c = 0; c < comp; c++)\
+ dest_pixel[c] = src_pixel[c];\
+ dest_pixel += comp;\
+ }\
+ }
+
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int x, y, c;
+
+ m_image_create(dest, src->type, width, height, comp);
+
+ switch(src->type)
+ {
+ case M_BYTE:
+ case M_UBYTE:
+ M_ROTATE_180(char);
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ M_ROTATE_180(short);
+ break;
+ case M_INT:
+ case M_UINT:
+ M_ROTATE_180(int);
+ break;
+ case M_FLOAT:
+ M_ROTATE_180(float);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ #undef M_ROTATE_180
+}
+
+MIAPI void m_image_mirror_x(struct m_image *dest, const struct m_image *src)
+{
+ #define M_MIRROR_X(T)\
+ {\
+ T *src_data = (T *)src->data;\
+ T *dest_pixel = (T *)dest->data;\
+ for (y = 0; y < height; y++)\
+ for (x = 0; x < width; x++) {\
+ T *src_pixel = src_data + (y * width + (width - 1 - x)) * comp;\
+ for (c = 0; c < comp; c++)\
+ dest_pixel[c] = src_pixel[c];\
+ dest_pixel += comp;\
+ }\
+ }
+
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int x, y, c;
+
+ m_image_create(dest, src->type, width, height, comp);
+
+ switch(src->type)
+ {
+ case M_BYTE:
+ case M_UBYTE:
+ M_MIRROR_X(char);
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ M_MIRROR_X(short);
+ break;
+ case M_INT:
+ case M_UINT:
+ M_MIRROR_X(int);
+ break;
+ case M_FLOAT:
+ M_MIRROR_X(float);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ #undef M_MIRROR_X
+}
+
+MIAPI void m_image_mirror_y(struct m_image *dest, const struct m_image *src)
+{
+ #define M_MIRROR_Y(T)\
+ {\
+ T *src_data = (T *)src->data;\
+ T *dest_pixel = (T *)dest->data;\
+ for (y = 0; y < height; y++)\
+ for (x = 0; x < width; x++) {\
+ T *src_pixel = src_data + ((height - 1 - y) * width + x) * comp;\
+ for (c = 0; c < comp; c++)\
+ dest_pixel[c] = src_pixel[c];\
+ dest_pixel += comp;\
+ }\
+ }
+
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int x, y, c;
+
+ m_image_create(dest, src->type, width, height, comp);
+
+ switch(src->type)
+ {
+ case M_BYTE:
+ case M_UBYTE:
+ M_MIRROR_Y(char);
+ break;
+ case M_SHORT:
+ case M_USHORT:
+ case M_HALF:
+ M_MIRROR_Y(short);
+ break;
+ case M_INT:
+ case M_UINT:
+ M_MIRROR_Y(int);
+ break;
+ case M_FLOAT:
+ M_MIRROR_Y(float);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ #undef M_MIRROR_Y
+}
+
+MIAPI void m_image_premultiply(struct m_image *dest, const struct m_image *src)
+{
+ float *dest_p, *src_p;
+ int i;
+
+ assert(src->size > 0 && src->type == M_FLOAT && src->comp == 4);
+
+ m_image_create(dest, M_FLOAT, src->width, src->height, 4);
+ dest_p = (float *)dest->data;
+ src_p = (float *)src->data;
+
+ for (i = 0; i < src->size; i+=4) {
+ dest_p[0] = src_p[0] * src_p[3];
+ dest_p[1] = src_p[1] * src_p[3];
+ dest_p[2] = src_p[2] * src_p[3];
+ dest_p[3] = src_p[3];
+ dest_p += 4;
+ src_p += 4;
+ }
+}
+
+MIAPI void m_image_unpremultiply(struct m_image *dest, const struct m_image *src)
+{
+ float *dest_p, *src_p;
+ int i;
+
+ assert(src->size > 0 && src->type == M_FLOAT && src->comp == 4);
+
+ m_image_create(dest, M_FLOAT, src->width, src->height, 4);
+ dest_p = (float *)dest->data;
+ src_p = (float *)src->data;
+
+ for (i = 0; i < src->size; i+=4) {
+ float x = 1.0 / src_p[3];
+ dest_p[0] = src_p[0] * x;
+ dest_p[1] = src_p[1] * x;
+ dest_p[2] = src_p[2] * x;
+ dest_p[3] = src_p[3];
+ dest_p += 4;
+ src_p += 4;
+ }
+}
+
+MIAPI void m_image_summed_area(struct m_image *dest, const struct m_image *src)
+{
+ float *src_pixel;
+ float *dest_pixel;
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int x, y, c;
+
+ assert(src->size > 0 && src->type == M_FLOAT);
+ if (dest != src)
+ m_image_copy(dest, src);
+
+ /* horiz sum */
+ dest_pixel = (float *)dest->data;
+ for (y = 0; y < height; y++) {
+ float *prev_pixel = dest_pixel;
+ dest_pixel += comp;
+
+ for (x = 1; x < width; x++) {
+ for (c = 0; c < comp; c++)
+ dest_pixel[c] += prev_pixel[c];
+
+ prev_pixel = dest_pixel;
+ dest_pixel += comp;
+ }
+ }
+
+ /* vertical sum */
+ src_pixel = (float *)dest->data;
+ dest_pixel = (float *)dest->data + width * comp;
+ for (y = 1; y < height; y++)
+ for (x = 0; x < width; x++) {
+
+ for (c = 0; c < comp; c++)
+ dest_pixel[c] += src_pixel[c];
+
+ src_pixel += comp;
+ dest_pixel += comp;
+ }
+}
+
+MIAPI void m_image_convolution_h(struct m_image *dest, const struct m_image *src, float *kernel, int size)
+{
+ struct m_image copy = M_IMAGE_IDENTITY();
+ float *src_data;
+ float *dest_data;
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int radius = (size - 1) / 2;
+ int y, ystep, ystepc;
+
+ assert(src->size > 0 && src->type == M_FLOAT);
+
+ /* create source and destination images */
+ m_image_reframe(&copy, src, radius, 0, radius, 0); /* apply clamped margin */
+ m_image_create(dest, M_FLOAT, width, height, comp);
+
+ /* clear */
+ memset(dest->data, 0, dest->size * sizeof(float));
+
+ src_data = (float *)copy.data;
+ dest_data = (float *)dest->data;
+ ystep = width * comp;
+ ystepc = copy.width * comp;
+
+ #pragma omp parallel for schedule(dynamic, 8)
+ for (y=0; y<height; y++) {
+
+ float *dest_pixel = dest_data + y * ystep;
+ float *src_pixel_y = src_data + y * ystepc;
+ int x;
+
+ for (x = 0; x < width; x++) {
+
+ float *src_pixel;
+ int i, k;
+
+ src_pixel = src_pixel_y + (x * comp);
+
+ /* apply kernel */
+ for (k = 0; k < size; k++) {
+ float v = kernel[k];
+ for (i = 0; i < comp; i++)
+ dest_pixel[i] += (*src_pixel++) * v;
+ }
+
+ dest_pixel += comp;
+ }
+ }
+
+ m_image_destroy(&copy);
+}
+
+MIAPI void m_image_convolution_v(struct m_image *dest, const struct m_image *src, float *kernel, int size)
+{
+ struct m_image copy = M_IMAGE_IDENTITY();
+ float *src_data;
+ float *dest_data;
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int radius = (size - 1) / 2;
+ int y, ystep;
+
+ assert(src->size > 0 && src->type == M_FLOAT);
+
+ /* create source and destination images */
+ m_image_reframe(&copy, src, 0, radius, 0, radius); /* apply clamped margin */
+ m_image_create(dest, M_FLOAT, width, height, comp);
+
+ /* clear */
+ memset(dest->data, 0, dest->size * sizeof(float));
+
+ src_data = (float *)copy.data;
+ dest_data = (float *)dest->data;
+ ystep = width * comp;
+
+ #pragma omp parallel for schedule(dynamic, 8)
+ for (y=0; y<height; y++) {
+
+ float *dest_pixel = dest_data + y * ystep;
+ int x;
+
+ for (x = 0; x < width; x++) {
+
+ float *src_pixel;
+ int i, k;
+
+ src_pixel = src_data + (y * width + x) * comp;
+
+ /* apply kernel */
+ for (k = 0; k < size; k++) {
+ float v = kernel[k];
+ for (i = 0; i < comp; i++)
+ dest_pixel[i] += src_pixel[i] * v;
+ src_pixel += ystep;
+ }
+
+ dest_pixel += comp;
+ }
+ }
+
+ m_image_destroy(&copy);
+}
+
+MIAPI void m_image_gaussian_blur(struct m_image *dest, const struct m_image *src, int dx, int dy)
+{
+ struct m_image tmp = M_IMAGE_IDENTITY();
+ float *kernelx = NULL, *kernely = NULL;
+ int kernelx_size = dx * 2 + 1;
+ int kernely_size = dy * 2 + 1;
+
+ assert(src->size > 0 && src->type == M_FLOAT);
+
+ /* exit */
+ if (dx == 0 && dy == 0) {
+ m_image_copy(dest, src);
+ return;
+ }
+
+ /* x blur */
+ if (dx > 0) {
+ kernelx = (float *)malloc(kernelx_size * sizeof(float));
+ m_gaussian_kernel(kernelx, kernelx_size);
+ if (dy > 0)
+ m_image_convolution_h(&tmp, src, kernelx, kernelx_size);
+ else
+ m_image_convolution_h(dest, src, kernelx, kernelx_size);
+ }
+
+ /* y blur */
+ if (dy > 0) {
+ kernely = (float *)malloc(kernely_size * sizeof(float));
+ m_gaussian_kernel(kernely, kernely_size);
+ if (dx > 0)
+ m_image_convolution_v(dest, &tmp, kernely, kernely_size);
+ else
+ m_image_convolution_v(dest, src, kernely, kernely_size);
+ }
+
+ m_image_destroy(&tmp);
+ if(kernely) free(kernely);
+ if(kernelx) free(kernelx);
+}
+
+MIAPI void m_image_grey(struct m_image *dest, const struct m_image *src)
+{
+ float *src_pixel;
+ float *dest_pixel;
+ int size = src->size;
+ int i, c = src->comp;
+
+ assert(src->size > 0 && src->type == M_FLOAT && src->comp > 2);
+
+ m_image_create(dest, M_FLOAT, src->width, src->height, 1);
+
+ src_pixel = (float *)src->data;
+ dest_pixel = (float *)dest->data;
+
+ for (i = 0; i < size; i+=c) {
+ float v = src_pixel[0] * 0.3f + src_pixel[1] * 0.5f + src_pixel[2] * 0.2f;
+ *dest_pixel = v;
+ dest_pixel++;
+ src_pixel+=c;
+ }
+}
+
+MIAPI void m_image_max(struct m_image *dest, const struct m_image *src)
+{
+ float *src_pixel;
+ float *dest_pixel;
+ int size = src->size;
+ int i, j, c = src->comp;
+
+ assert(src->size > 0 && src->type == M_FLOAT);
+
+ m_image_create(dest, M_FLOAT, src->width, src->height, 1);
+
+ src_pixel = (float *)src->data;
+ dest_pixel = (float *)dest->data;
+
+ for (i = 0; i < size; i+=c) {
+ float v = src_pixel[0];
+ for (j = 1; j < c; j++)
+ v = M_MAX(v, src_pixel[j]);
+ *dest_pixel = v;
+ dest_pixel++;
+ src_pixel+=c;
+ }
+}
+
+MIAPI void m_image_max_abs(struct m_image *dest, const struct m_image *src)
+{
+ float *src_pixel;
+ float *dest_pixel;
+ int size = src->size;
+ int i, j, c = src->comp;
+
+ assert(src->size > 0 && src->type == M_FLOAT);
+
+ m_image_create(dest, M_FLOAT, src->width, src->height, 1);
+
+ src_pixel = (float *)src->data;
+ dest_pixel = (float *)dest->data;
+
+ for (i = 0; i < size; i+=c) {
+ float v = fabsf(src_pixel[0]);
+ for (j = 1; j < c; j++)
+ v = M_MAX(v, fabsf(src_pixel[j]));
+ *dest_pixel = v;
+ dest_pixel++;
+ src_pixel+=c;
+ }
+}
+
+static float m__convolve_pixel(float *data, int width, float *kernel)
+{
+ float sum = 0; int i, j;
+ for (i = 0; i < 3; i++) {
+ float *pixel = data + width * i;
+ for (j = 0; j < 3; j++) {
+ sum += (*pixel) * (*kernel);
+ pixel++;
+ kernel++;
+ }
+ }
+ return sum;
+}
+
+MIAPI void m_image_sobel(struct m_image *dest, const struct m_image *src)
+{
+ struct m_image copy = M_IMAGE_IDENTITY();
+ float ky[9] = {-1, -2, -1, 0, 0, 0, 1, 2, 1};
+ float kx[9] = {-1, 0, 1, -2, 0, 2, -1, 0, 1};
+ float *src_pixel;
+ float *dest_pixel;
+ int width = src->width;
+ int height = src->height;
+ int w2 = width + 2;
+ int x, y;
+
+ assert(src->size > 0 && src->type == M_FLOAT && src->comp == 1);
+
+ /* create source and destination images */
+ m_image_reframe(&copy, src, 1, 1, 1, 1); /* apply clamped margin */
+ m_image_create(dest, M_FLOAT, width, height, 2);
+
+ src_pixel = (float *)copy.data;
+ dest_pixel = (float *)dest->data;
+
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ dest_pixel[0] = m__convolve_pixel(src_pixel, w2, kx);
+ dest_pixel[1] = m__convolve_pixel(src_pixel, w2, ky);
+ src_pixel++;
+ dest_pixel += 2;
+ }
+ src_pixel += 2;
+ }
+
+ m_image_destroy(&copy);
+}
+
+MIAPI void m_image_harris(struct m_image *dest, const struct m_image *src, int radius)
+{
+ struct m_image tmp1 = M_IMAGE_IDENTITY();
+ struct m_image tmp2 = M_IMAGE_IDENTITY();
+
+ /* sobel */
+ m_image_sobel(&tmp1, src);
+
+ /* sst */
+ m_image_create(&tmp2, M_FLOAT, src->width, src->height, 3);
+ m_sst((float *)tmp2.data, (float *)tmp1.data, src->width * src->height);
+
+ /* blur */
+ m_image_copy(&tmp1, &tmp2);
+ m_image_gaussian_blur(&tmp2, &tmp1, radius, radius);
+
+ /* harris response */
+ m_image_create(dest, M_FLOAT, src->width, src->height, 1);
+ m_harris_response((float *)dest->data, (float *)tmp2.data, src->width * src->height);
+
+ m_image_destroy(&tmp1);
+ m_image_destroy(&tmp2);
+}
+
+#define M_WRITE_PIXEL(dest, x0, y0, v) {*(dest + w * (y0) + (x0)) = v;}
+#define M_PUSH_PIXEL(x2, y2) if((stack_i+3) < stack_size && m__test_pixel(data, w, h, x2, y2, ref)) {\
+ stack_i+=2;\
+ stack[stack_i] = (unsigned short)(x2);\
+ stack[stack_i+1] = (unsigned short)(y2);\
+ M_WRITE_PIXEL(data, x2, y2, value);\
+}
+
+static int m__test_pixel(unsigned char *src, int w, int h, int x, int y, unsigned char ref)
+{
+ if (! (x >= 0 && x < w && y >= 0 && y < h))
+ return 0;
+ return (*(src + w * y + x) == ref);
+}
+
+MIAPI int m_image_floodfill_4x(struct m_image *dest, int x, int y, unsigned char ref, unsigned char value, unsigned short *stack, int stack_size)
+{
+ unsigned char *data = (unsigned char *)dest->data;
+ int w = dest->width;
+ int h = dest->height;
+ int stack_i = 0;
+
+ assert(dest->size > 0 && dest->type == M_UBYTE);
+
+ if(! m__test_pixel(data, w, h, x, y, ref))
+ return 0;
+
+ stack[0] = (unsigned short)x;
+ stack[1] = (unsigned short)y;
+ M_WRITE_PIXEL(data, x, y, value);
+
+ while (stack_i >= 0) {
+
+ x = stack[stack_i];
+ y = stack[stack_i+1];
+ stack_i-=2;
+
+ M_PUSH_PIXEL(x + 1, y)
+ M_PUSH_PIXEL(x - 1, y)
+ M_PUSH_PIXEL(x, y + 1)
+ M_PUSH_PIXEL(x, y - 1)
+ }
+
+ return 1;
+}
+
+MIAPI int m_image_floodfill_8x(struct m_image *dest, int x, int y, unsigned char ref, unsigned char value, unsigned short *stack, int stack_size)
+{
+ unsigned char *data = (unsigned char *)dest->data;
+ int w = dest->width;
+ int h = dest->height;
+ int stack_i = 0;
+
+ assert(dest->size > 0 && dest->type == M_UBYTE);
+
+ if(! m__test_pixel(data, w, h, x, y, ref))
+ return 0;
+
+ stack[0] = (unsigned short)x;
+ stack[1] = (unsigned short)y;
+ M_WRITE_PIXEL(data, x, y, value);
+
+ while (stack_i >= 0) {
+
+ x = stack[stack_i];
+ y = stack[stack_i+1];
+ stack_i-=2;
+
+ M_PUSH_PIXEL(x + 1, y)
+ M_PUSH_PIXEL(x - 1, y)
+ M_PUSH_PIXEL(x, y + 1)
+ M_PUSH_PIXEL(x, y - 1)
+ M_PUSH_PIXEL(x + 1, y + 1)
+ M_PUSH_PIXEL(x + 1, y - 1)
+ M_PUSH_PIXEL(x - 1, y + 1)
+ M_PUSH_PIXEL(x - 1, y - 1)
+ }
+
+ return 1;
+}
+
+#undef M_WRITE_PIXEL
+#undef M_PUSH_PIXEL
+
+static void m__dilate_erode(struct m_image *dest, const struct m_image *src, unsigned char ref, unsigned char value, int copy)
+{
+ unsigned char *src_data = (unsigned char *)src->data;
+ unsigned char *src_pixel = src_data;
+ unsigned char *dest_pixel;
+ int w = src->width;
+ int h = src->height;
+ int y;
+
+ assert(src->size > 0 && src->type == M_UBYTE);
+
+ m_image_create(dest, M_UBYTE, w, h, 1);
+ dest_pixel = (unsigned char *)dest->data;
+ if (copy)
+ memcpy(dest_pixel, src_data, dest->size * sizeof(char));
+ else
+ memset(dest_pixel, 0, dest->size * sizeof(char));
+
+ for (y=0; y<h; y++) {
+
+ int x;
+ for (x=0; x<w; x++) {
+
+ unsigned char c1, c2, c3, c4, c5;
+ c1 = *src_pixel;
+
+ if (c1 == ref) {
+ c2 = x > 0 ? *(src_data + y * w + (x - 1)) : c1;
+ c3 = y > 0 ? *(src_data + (y - 1) * w + x) : c1;
+ c4 = (x + 1) < w ? *(src_data + y * w + x + 1) : c1;
+ c5 = (y + 1) < h ? *(src_data + (y + 1) * w + x) : c1;
+ if (c2 != c1 || c3 != c1 || c4 != c1 || c5 != c1)
+ *dest_pixel = value;
+ }
+
+ src_pixel++;
+ dest_pixel++;
+ }
+ }
+}
+
+MIAPI void m_image_dilate(struct m_image *dest, const struct m_image *src)
+{
+ m__dilate_erode(dest, src, 0, 255, 1);
+}
+
+MIAPI void m_image_erode(struct m_image *dest, const struct m_image *src)
+{
+ m__dilate_erode(dest, src, 255, 0, 1);
+}
+
+MIAPI void m_image_edge_4x(struct m_image *dest, const struct m_image *src, unsigned char ref)
+{
+ m__dilate_erode(dest, src, ref, 255, 0);
+}
+
+/* Following C code from the article
+ "Efficient Binary Image Thinning using Neighborhood Maps"
+ by Joseph M. Cychosz, in "Graphics Gems IV", Academic Press, 1994
+ Thins the image using Rosenfeld's parallel thinning algorithm.
+*/
+
+/* Direction m__masks:
+ N S W E
+*/
+static int m__masks[] = {0200, 0002, 0040, 0010};
+
+/* True if pixel neighbor map indicates the pixel is 8-simple and
+ not an end point and thus can be deleted. The neighborhood
+ map is defined as an integer of bits abcdefghi with a non-zero
+ bit representing a non-zero pixel. The bit assignment for the
+ neighborhood is:
+
+ a b c
+ d e f
+ g h i
+*/
+static unsigned char m__delete_map[512] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
+
+MIAPI void m_image_thin(struct m_image *dest)
+{
+ unsigned char *data; /* image data */
+ unsigned char ** ip; /* scanline pointers, ip[y][x] */
+ unsigned char * qb; /* Neighborhood maps of previous scanline */
+ int xsize, ysize; /* Image resolution */
+ int x, y; /* Pixel location */
+ int i; /* Pass index */
+ int pc = 0; /* Pass count */
+ int count = 1; /* Deleted pixel count */
+ int p, q; /* Neighborhood maps of adjacent cells */
+ int m; /* Deletion direction mask */
+
+ assert(dest->size > 0 && dest->type == M_UBYTE);
+
+ data = (unsigned char *)dest->data;
+ xsize = dest->width;
+ ysize = dest->height;
+
+ qb = (unsigned char *)malloc(xsize * sizeof(char));
+ qb[xsize-1] = 0; /* Used for lower-right pixel */
+
+ /* alloc scanline pointers */
+ ip = (unsigned char **)malloc(sizeof(void *) * ysize);
+
+ /* set scanline pointers */
+ for (y=0; y<ysize; y++) {
+ ip[y] = data + y*xsize;
+ }
+
+ while (count) { /* Scan image while deletions */
+
+ pc++;
+ count = 0;
+
+ for (i=0; i<4; i++) {
+
+ m = m__masks[i];
+
+ /* Build initial previous scan buffer */
+ p = ip[0][0] != 0;
+ for (x=0; x<xsize-1; x++) {
+ p = ((p<<1)&0006) | (ip[0][x+1] != 0);
+ qb[x] = (unsigned char)p;
+ }
+
+ /* Scan image for pixel deletion candidates */
+ for (y=0; y<ysize-1; y++) {
+ q = qb[0];
+ p = ((q<<3)&0110) | (ip[y+1][0] != 0);
+
+ for (x=0; x<xsize-1; x++) {
+ q = qb[x];
+ p = ((p<<1)&0666) | ((q<<3)&0110) | (ip[y+1][x+1] != 0);
+ qb[x] = (unsigned char)p;
+
+ if (((p&m) == 0) && m__delete_map[p]) {
+ if (ip[y][x] != 0) {
+ count++;
+ ip[y][x] = 0;
+ }
+ }
+ }
+
+ /* Process right edge pixel */
+ p = (p<<1)&0666;
+ if ((p&m) == 0 && m__delete_map[p]) {
+ if (ip[y][xsize-1] != 0) {
+ count++;
+ ip[y][xsize-1] = 0;
+ }
+ }
+ }
+
+ /* Process bottom scan line */
+ for (x=0; x<xsize; x++) {
+ q = qb[x];
+ p = ((p<<1)&0666) | ((q<<3)&0110);
+ if ((p&m) == 0 && m__delete_map[p]) {
+ if (ip[ysize-1][x] != 0) {
+ count++;
+ ip[ysize-1][x] = 0;
+ }
+ }
+ }
+ }
+ }
+
+ free(qb);
+ free(ip);
+}
+
+MIAPI void m_image_non_max_supp(struct m_image *dest, const struct m_image *src, int radius, float threshold)
+{
+ float *src_data, *dest_data;
+ float *src_pixel, *dest_pixel;
+ int width = src->width;
+ int height = src->height;
+ int x, y;
+
+ assert(src->size > 0 && src->type == M_FLOAT && src->comp == 1);
+
+ m_image_copy(dest, src);
+
+ src_data = (float *)src->data;
+ dest_data = (float *)dest->data;
+ src_pixel = src_data;
+ dest_pixel = dest_data;
+
+ for (y = 0; y < height; y++)
+ for (x = 0; x < width; x++) {
+
+ int minx, miny, maxx, maxy, xx, yy;
+
+ if (*src_pixel < threshold) {
+ *dest_pixel = 0;
+ goto end;
+ }
+
+ minx = M_MAX(0, x - radius);
+ miny = M_MAX(0, y - radius);
+ maxx = M_MIN(width - 1, x + radius);
+ maxy = M_MIN(height - 1, y + radius);
+
+ for (yy = miny; yy <= maxy; yy++)
+ for (xx = minx; xx <= maxx; xx++) {
+
+ float *src_pixel2 = src_data + yy*width + xx;
+ if (*src_pixel2 > *src_pixel) {
+ *dest_pixel = 0;
+ goto end;
+ }
+ }
+
+ end:
+ src_pixel++;
+ dest_pixel++;
+ }
+}
+
+MIAPI int m_image_corner_harris(const struct m_image *src, int margin, int radius, float threshold, int *corners, int max_count)
+{
+ struct m_image harris = M_IMAGE_IDENTITY();
+ struct m_image nms = M_IMAGE_IDENTITY();
+ float *pixel;
+ int width = src->width;
+ int height = src->height;
+ int wm = width - margin;
+ int hm = height - margin;
+ int x, y, count;
+
+ if (width <= (margin * 2) || height <= (margin * 2))
+ return 0;
+
+ m_image_harris(&harris, src, radius);
+ m_image_non_max_supp(&nms, &harris, radius, threshold);
+
+ count = 0;
+ pixel = (float *)nms.data;
+
+ for (y = 0; y < height; y++)
+ for (x = 0; x < width; x++) {
+
+ if (count == max_count)
+ goto end;
+
+ if ((*pixel) > 0 && x >= margin && y >= margin && x < wm && y < hm) {
+ corners[count*2] = x;
+ corners[count*2+1] = y;
+ count++;
+ }
+ pixel++;
+ }
+
+ end:
+ m_image_destroy(&nms);
+ m_image_destroy(&harris);
+ return count;
+}
+
+MIAPI void m_image_sub_pixel(const struct m_image *src, float x, float y, float *result)
+{
+ float *colors0, *colors1, *colors2, *colors3;
+ float *src_data = (float *)src->data;
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int c;
+ float fx, fy;
+ int wm = width - 1;
+ int hm = height - 1;
+ int ix, iy, ix2, iy2;
+
+ ix = (int)x;
+ iy = (int)y;
+ fx = x - (float)ix;
+ fy = y - (float)iy;
+ fx = M_MAX(fx, 0);
+ fy = M_MAX(fy, 0);
+
+ ix = M_CLAMP(ix, 0, wm);
+ iy = M_CLAMP(iy, 0, hm);
+ ix2 = ix + 1;
+ iy2 = iy + 1;
+ ix2 = M_MIN(ix2, wm);
+ iy2 = M_MIN(iy2, hm);
+
+ colors0 = src_data + (width * iy + ix) * comp;
+ colors1 = src_data + (width * iy + ix2) * comp;
+ colors2 = src_data + (width * iy2 + ix) * comp;
+ colors3 = src_data + (width * iy2 + ix2) * comp;
+
+ for(c = 0; c < comp; c++) {
+ float A = colors0[c] + (colors2[c] - colors0[c]) * fy;
+ float B = colors1[c] + (colors3[c] - colors1[c]) * fy;
+ result[c] = A + (B - A) * fx;
+ }
+}
+
+/* slow TODO better */
+static void m__bilinear(struct m_image *dest, const struct m_image *src, float dx, float dy, float offset)
+{
+ float *dest_data = (float *)dest->data;
+ int width = dest->width;
+ int height = dest->height;
+ int comp = src->comp;
+ int y, ystep = width * comp;
+
+ #pragma omp parallel for schedule(dynamic, 8)
+ for (y = 0; y < height; y++) {
+ float *dest_pixel = dest_data + y * ystep; int x;
+ for (x = 0; x < width; x++) {
+ m_image_sub_pixel(src, ((float)x + 0.5f) * dx + offset, ((float)y + 0.5f) * dy + offset, dest_pixel);
+ dest_pixel += comp;
+ }
+ }
+}
+
+MIAPI void m_image_pyrdown(struct m_image *dest, const struct m_image *src)
+{
+ struct m_image tmp = M_IMAGE_IDENTITY();
+ float *src_data;
+ float *dest_pixel;
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ int comp2 = comp * 2;
+ int ystep = width * comp * 2;
+ int w2 = width / 2;
+ int h2 = height / 2;
+ int x, y, i;
+
+ m_image_gaussian_blur(&tmp, src, 1, 1);
+ m_image_create(dest, M_FLOAT, w2, h2, comp);
+
+ src_data = (float *)tmp.data;
+ dest_pixel = (float *)dest->data;
+
+ for (y = 0; y < h2; y++) {
+ float *src_pixel = src_data + y * ystep;
+ for (x = 0; x < w2; x++) {
+ for (i = 0; i < comp; i++)
+ dest_pixel[i] = src_pixel[i];
+ dest_pixel += comp;
+ src_pixel += comp2;
+ }
+ }
+
+ m_image_destroy(&tmp);
+}
+
+MIAPI void m_image_resize(struct m_image *dest, const struct m_image *src, int new_width, int new_height)
+{
+ struct m_image tmp = M_IMAGE_IDENTITY();
+ int width = src->width;
+ int height = src->height;
+ int comp = src->comp;
+ float rx = (float)width / (float)new_width;
+ float ry = (float)height / (float)new_height;
+
+ assert(src->size > 0 && src->type == M_FLOAT);
+ m_image_create(dest, M_FLOAT, new_width, new_height, comp);
+
+ if (new_width < width || new_height < height) {
+ float r = M_MAX(rx, ry);
+ int ir = (int)r - 1;
+ if (ir > 0) {
+ m_image_gaussian_blur(&tmp, src, ir, ir);
+ m__bilinear(dest, &tmp, rx, ry, -0.5f);
+ }
+ else {
+ m__bilinear(dest, src, rx, ry, -0.5f);
+ }
+ }
+ else {
+ m__bilinear(dest, src, rx, ry, -0.5f);
+ }
+
+ m_image_destroy(&tmp);
+}
+
+#endif /* M_IMAGE_IMPLEMENTATION */
diff --git a/3rdparty/bgfx/3rdparty/nvtt/NVIDIA_Texture_Tools_LICENSE.txt b/3rdparty/bimg/3rdparty/nvtt/NVIDIA_Texture_Tools_LICENSE.txt
index da5b64215f2..da5b64215f2 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/NVIDIA_Texture_Tools_LICENSE.txt
+++ b/3rdparty/bimg/3rdparty/nvtt/NVIDIA_Texture_Tools_LICENSE.txt
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc6h/bits.h b/3rdparty/bimg/3rdparty/nvtt/bc6h/bits.h
index c47a7c6e936..c47a7c6e936 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc6h/bits.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc6h/bits.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc6h/shapes_two.h b/3rdparty/bimg/3rdparty/nvtt/bc6h/shapes_two.h
index 2fc555995cd..2fc555995cd 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc6h/shapes_two.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc6h/shapes_two.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc6h/tile.h b/3rdparty/bimg/3rdparty/nvtt/bc6h/tile.h
index 6e642a269d8..6e642a269d8 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc6h/tile.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc6h/tile.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh.cpp b/3rdparty/bimg/3rdparty/nvtt/bc6h/zoh.cpp
index 3053ea1590c..3053ea1590c 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc6h/zoh.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh.h b/3rdparty/bimg/3rdparty/nvtt/bc6h/zoh.h
index d3003cbc391..d3003cbc391 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc6h/zoh.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh_utils.cpp b/3rdparty/bimg/3rdparty/nvtt/bc6h/zoh_utils.cpp
index fde3200e641..fde3200e641 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh_utils.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc6h/zoh_utils.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh_utils.h b/3rdparty/bimg/3rdparty/nvtt/bc6h/zoh_utils.h
index 3ce33ce94e0..3ce33ce94e0 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zoh_utils.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc6h/zoh_utils.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zohone.cpp b/3rdparty/bimg/3rdparty/nvtt/bc6h/zohone.cpp
index 36526761464..36526761464 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zohone.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc6h/zohone.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zohtwo.cpp b/3rdparty/bimg/3rdparty/nvtt/bc6h/zohtwo.cpp
index 5a142945ba7..5a142945ba7 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc6h/zohtwo.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc6h/zohtwo.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl.cpp
index 8e0b1695f22..8e0b1695f22 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl.h b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl.h
index 44ea504977b..44ea504977b 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode0.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode0.cpp
index 82dd6075510..82dd6075510 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode0.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode0.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode1.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode1.cpp
index fb1bfea8837..fb1bfea8837 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode1.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode1.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode2.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode2.cpp
index 380ffcef5f9..380ffcef5f9 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode2.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode2.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode3.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode3.cpp
index 0020d8aef20..0020d8aef20 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode3.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode3.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode4.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode4.cpp
index 5115d7ced05..5115d7ced05 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode4.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode4.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode5.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode5.cpp
index f1f163658e7..f1f163658e7 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode5.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode5.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode6.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode6.cpp
index 38e3a259cf7..38e3a259cf7 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode6.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode6.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode7.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode7.cpp
index 441c4ac8bf2..441c4ac8bf2 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_mode7.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_mode7.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_utils.cpp b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_utils.cpp
index af99711083f..af99711083f 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_utils.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_utils.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_utils.h b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_utils.h
index cb546d54719..cb546d54719 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/avpcl_utils.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/avpcl_utils.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/bits.h b/3rdparty/bimg/3rdparty/nvtt/bc7/bits.h
index 782f6559730..782f6559730 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/bits.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/bits.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/endpts.h b/3rdparty/bimg/3rdparty/nvtt/bc7/endpts.h
index 4f42a166fbd..4f42a166fbd 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/endpts.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/endpts.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/shapes_three.h b/3rdparty/bimg/3rdparty/nvtt/bc7/shapes_three.h
index dc95ba5f407..dc95ba5f407 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/shapes_three.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/shapes_three.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/shapes_two.h b/3rdparty/bimg/3rdparty/nvtt/bc7/shapes_two.h
index 853d557a6f0..853d557a6f0 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/shapes_two.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/shapes_two.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/bc7/tile.h b/3rdparty/bimg/3rdparty/nvtt/bc7/tile.h
index 730d9bac146..730d9bac146 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/bc7/tile.h
+++ b/3rdparty/bimg/3rdparty/nvtt/bc7/tile.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/array.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/array.h
index f4460f3b430..f4460f3b430 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/array.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/array.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/array.inl b/3rdparty/bimg/3rdparty/nvtt/nvcore/array.inl
index 937dce76dae..937dce76dae 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/array.inl
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/array.inl
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/debug.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/debug.h
index 61fbd2fcf46..61fbd2fcf46 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/debug.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/debug.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/defsgnucdarwin.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/defsgnucdarwin.h
index 968f4bc0069..968f4bc0069 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/defsgnucdarwin.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/defsgnucdarwin.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/defsgnuclinux.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/defsgnuclinux.h
index 117d342ea7d..117d342ea7d 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/defsgnuclinux.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/defsgnuclinux.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/defsgnucwin32.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/defsgnucwin32.h
index 68465c8247f..68465c8247f 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/defsgnucwin32.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/defsgnucwin32.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/defsvcwin32.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/defsvcwin32.h
index a6c6bf93bda..a6c6bf93bda 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/defsvcwin32.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/defsvcwin32.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/foreach.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/foreach.h
index 71b19f778fa..71b19f778fa 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/foreach.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/foreach.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/hash.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/hash.h
index a8b0b2c63b1..a8b0b2c63b1 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/hash.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/hash.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/memory.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/memory.h
index b332fab8ed6..b332fab8ed6 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/memory.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/memory.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/nvcore.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/nvcore.h
index 689feff4cad..e2458e2710d 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/nvcore.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/nvcore.h
@@ -139,6 +139,8 @@
# define NV_CPU_ARM 1
#elif defined POSH_CPU_AARCH64
# define NV_CPU_AARCH64 1
+#elif defined POSH_CPU_EMSCRIPTEN
+# define NV_CPU_EMSCRIPTEN 1
#else
# error "Unsupported CPU"
#endif
@@ -163,6 +165,10 @@
# define NV_CPU_AARCH64 0
#endif // NV_CPU_AARCH64
+#ifndef NV_CPU_EMSCRIPTEN
+# define NV_CPU_EMSCRIPTEN 0
+#endif // NV_CPU_EMSCRIPTEN
+
// Compiler:
#if defined POSH_COMPILER_CLANG
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/posh.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/posh.h
index 45d2d9e3ce9..b597125f9ac 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/posh.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/posh.h
@@ -296,7 +296,7 @@ LLVM:
** Determine target operating system
** ----------------------------------------------------------------------------
*/
-#if defined linux || defined __linux__
+#if defined linux || defined __linux__ || defined EMSCRIPTEN
# define POSH_OS_LINUX 1
# define POSH_OS_STRING "Linux"
#endif
@@ -536,6 +536,11 @@ LLVM:
# define POSH_CPU_STRING "PA-RISC"
#endif
+#if defined EMSCRIPTEN
+# define POSH_CPU_EMSCRIPTEN 1
+# define POSH_CPU_STRING "EMSCRIPTEN"
+#endif
+
#if !defined POSH_CPU_STRING
# error POSH cannot determine target CPU
# define POSH_CPU_STRING "Unknown" /* this is here for Doxygen's benefit */
@@ -673,7 +678,7 @@ LLVM:
** the MIPS series, so we have to be careful about those.
** ----------------------------------------------------------------------------
*/
-#if defined POSH_CPU_X86 || defined POSH_CPU_AXP || defined POSH_CPU_STRONGARM || defined POSH_CPU_AARCH64 || defined POSH_OS_WIN32 || defined POSH_OS_WINCE || defined __MIPSEL__
+#if defined POSH_CPU_X86 || defined POSH_CPU_AXP || defined POSH_CPU_STRONGARM || defined POSH_CPU_AARCH64 || defined POSH_OS_WIN32 || defined POSH_OS_WINCE || defined __MIPSEL__ || defined POSH_CPU_EMSCRIPTEN
# define POSH_ENDIAN_STRING "little"
# define POSH_LITTLE_ENDIAN 1
#else
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/stdstream.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/stdstream.h
index 4f0a10a42b9..4f0a10a42b9 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/stdstream.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/stdstream.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/stream.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/stream.h
index 9252d9efe0e..9252d9efe0e 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/stream.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/stream.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/strlib.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/strlib.h
index 80a957cbbe1..80a957cbbe1 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/strlib.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/strlib.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/utils.h b/3rdparty/bimg/3rdparty/nvtt/nvcore/utils.h
index 364b629287b..364b629287b 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/utils.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvcore/utils.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvmath/fitting.cpp b/3rdparty/bimg/3rdparty/nvtt/nvmath/fitting.cpp
index ba01b1fc1af..ba01b1fc1af 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvmath/fitting.cpp
+++ b/3rdparty/bimg/3rdparty/nvtt/nvmath/fitting.cpp
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvmath/fitting.h b/3rdparty/bimg/3rdparty/nvtt/nvmath/fitting.h
index e8350458058..e8350458058 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvmath/fitting.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvmath/fitting.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvmath/matrix.h b/3rdparty/bimg/3rdparty/nvtt/nvmath/matrix.h
index 901a98278dd..901a98278dd 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvmath/matrix.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvmath/matrix.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvmath/matrix.inl b/3rdparty/bimg/3rdparty/nvtt/nvmath/matrix.inl
index 60b56941c53..60b56941c53 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvmath/matrix.inl
+++ b/3rdparty/bimg/3rdparty/nvtt/nvmath/matrix.inl
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvmath/nvmath.h b/3rdparty/bimg/3rdparty/nvtt/nvmath/nvmath.h
index 94f7ec7947a..94f7ec7947a 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvmath/nvmath.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvmath/nvmath.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvmath/plane.h b/3rdparty/bimg/3rdparty/nvtt/nvmath/plane.h
index eb544b137c5..eb544b137c5 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvmath/plane.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvmath/plane.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvmath/plane.inl b/3rdparty/bimg/3rdparty/nvtt/nvmath/plane.inl
index 7baf8048534..7baf8048534 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvmath/plane.inl
+++ b/3rdparty/bimg/3rdparty/nvtt/nvmath/plane.inl
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvmath/vector.h b/3rdparty/bimg/3rdparty/nvtt/nvmath/vector.h
index 180cfab0e1f..180cfab0e1f 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvmath/vector.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvmath/vector.h
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvmath/vector.inl b/3rdparty/bimg/3rdparty/nvtt/nvmath/vector.inl
index 8f1da1ecaa6..8f1da1ecaa6 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvmath/vector.inl
+++ b/3rdparty/bimg/3rdparty/nvtt/nvmath/vector.inl
diff --git a/3rdparty/bimg/3rdparty/nvtt/nvtt.cpp b/3rdparty/bimg/3rdparty/nvtt/nvtt.cpp
new file mode 100644
index 00000000000..ef0cec6e34f
--- /dev/null
+++ b/3rdparty/bimg/3rdparty/nvtt/nvtt.cpp
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "nvtt.h"
+
+#include <string.h>
+#include <bx/uint32_t.h>
+
+BX_PRAGMA_DIAGNOSTIC_PUSH();
+BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4458) // warning C4458: declaration of 'x' hides class member
+#include "bc6h/zoh.h"
+#include "bc7/avpcl.h"
+#include "nvmath/vector.inl"
+BX_PRAGMA_DIAGNOSTIC_POP();
+
+BX_PRAGMA_DIAGNOSTIC_PUSH();
+BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4702) // warning C4702: unreachable code
+NVCORE_API int nvAbort(const char *, const char *, int , const char *, const char *, ...)
+{
+ abort();
+ return 0;
+}
+BX_PRAGMA_DIAGNOSTIC_POP();
+
+namespace nvtt
+{
+ void compressBC6H(const void* _input, uint32_t _width, uint32_t _height, uint32_t _srcStride, void* _output)
+ {
+ const uint8_t* src = (const uint8_t*)_input;
+ char* dst = (char*)_output;
+
+ for (uint32_t yy = 0; yy < _height; yy += ZOH::Tile::TILE_H)
+ {
+ for (uint32_t xx = 0; xx < _width; xx += ZOH::Tile::TILE_H)
+ {
+ const uint32_t bytesPerPixel = sizeof(float)*4;
+ const nv::Vector4* srcRgba = (const nv::Vector4*)&src[yy*_srcStride + xx*bytesPerPixel];
+ const uint32_t srcRgbaStride = _srcStride/bytesPerPixel;
+
+ ZOH::Utils::FORMAT = ZOH::SIGNED_F16;
+ ZOH::Tile zohTile(ZOH::Tile::TILE_H, ZOH::Tile::TILE_H);
+
+ bx::memSet(zohTile.data, 0, sizeof(zohTile.data) );
+ bx::memSet(zohTile.importance_map, 0, sizeof(zohTile.importance_map) );
+
+ for (uint32_t blockY = 0; blockY < ZOH::Tile::TILE_H; ++blockY)
+ {
+ for (uint32_t blockX = 0; blockX < ZOH::Tile::TILE_W; ++blockX)
+ {
+ nv::Vector4 color = srcRgba[blockY*srcRgbaStride + blockX];
+ zohTile.data[blockY][blockX].x = float(int16_t(bx::halfFromFloat(color.x) ) );
+ zohTile.data[blockY][blockX].y = float(int16_t(bx::halfFromFloat(color.y) ) );
+ zohTile.data[blockY][blockX].z = float(int16_t(bx::halfFromFloat(color.z) ) );
+ }
+ }
+
+ zohTile.generate_importance_map();
+ ZOH::compress(zohTile, dst);
+ dst += ZOH::BLOCKSIZE;
+ }
+ }
+ }
+
+ void compressBC7(const void* _input, uint32_t _width, uint32_t _height, uint32_t _srcStride, void* _output)
+ {
+ const uint8_t* src = (const uint8_t*)_input;
+ char* dst = (char*)_output;
+
+ for (uint32_t yy = 0; yy < _height; yy += 4)
+ {
+ for (uint32_t xx = 0; xx < _width; xx += 4)
+ {
+ const uint32_t bytesPerPixel = sizeof(float) * 4;
+ const nv::Vector4* srcRgba = (const nv::Vector4*)&src[yy*_srcStride + xx*bytesPerPixel];
+ const uint32_t srcRgbaStride = _srcStride / bytesPerPixel;
+
+ AVPCL::mode_rgb = false;
+ AVPCL::flag_premult = false;
+ AVPCL::flag_nonuniform = false;
+ AVPCL::flag_nonuniform_ati = false;
+
+ AVPCL::Tile avpclTile(4, 4);
+ bx::memSet(avpclTile.data, 0, sizeof(avpclTile.data) );
+ for (uint32_t blockY = 0; blockY < 4; ++blockY)
+ {
+ for (uint32_t blockX = 0; blockX < 4; ++blockX)
+ {
+ nv::Vector4 color = srcRgba[blockY*srcRgbaStride + blockX];
+ avpclTile.data[blockY][blockX] = color * 255.0f;
+ avpclTile.importance_map[blockY][blockX] = 1.0f;
+ }
+ }
+
+ AVPCL::compress(avpclTile, dst);
+ dst += AVPCL::BLOCKSIZE;
+ }
+ }
+ }
+
+} //namespace nvtt
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvtt.h b/3rdparty/bimg/3rdparty/nvtt/nvtt.h
index a37c7cfb232..a37c7cfb232 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvtt.h
+++ b/3rdparty/bimg/3rdparty/nvtt/nvtt.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/AlphaBitmap.h b/3rdparty/bimg/3rdparty/pvrtc/AlphaBitmap.h
index 41973320673..41973320673 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/AlphaBitmap.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/AlphaBitmap.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/BitScale.cpp b/3rdparty/bimg/3rdparty/pvrtc/BitScale.cpp
index 3e741934330..3e741934330 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/BitScale.cpp
+++ b/3rdparty/bimg/3rdparty/pvrtc/BitScale.cpp
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/BitScale.h b/3rdparty/bimg/3rdparty/pvrtc/BitScale.h
index b600fe9350e..b600fe9350e 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/BitScale.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/BitScale.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/BitUtility.h b/3rdparty/bimg/3rdparty/pvrtc/BitUtility.h
index 588ff3e8926..588ff3e8926 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/BitUtility.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/BitUtility.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/Bitmap.h b/3rdparty/bimg/3rdparty/pvrtc/Bitmap.h
index 409ef1e4d64..409ef1e4d64 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/Bitmap.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/Bitmap.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/ColorRgba.h b/3rdparty/bimg/3rdparty/pvrtc/ColorRgba.h
index e3ec6aa7c8a..e3ec6aa7c8a 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/ColorRgba.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/ColorRgba.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/Interval.h b/3rdparty/bimg/3rdparty/pvrtc/Interval.h
index a7252e8375d..a7252e8375d 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/Interval.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/Interval.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/LICENSE.TXT b/3rdparty/bimg/3rdparty/pvrtc/LICENSE.TXT
index 974fc09e25d..974fc09e25d 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/LICENSE.TXT
+++ b/3rdparty/bimg/3rdparty/pvrtc/LICENSE.TXT
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/MortonTable.cpp b/3rdparty/bimg/3rdparty/pvrtc/MortonTable.cpp
index 29a5af67f6d..29a5af67f6d 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/MortonTable.cpp
+++ b/3rdparty/bimg/3rdparty/pvrtc/MortonTable.cpp
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/MortonTable.h b/3rdparty/bimg/3rdparty/pvrtc/MortonTable.h
index 7a27e595443..7a27e595443 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/MortonTable.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/MortonTable.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/Point2.h b/3rdparty/bimg/3rdparty/pvrtc/Point2.h
index 89fa4b63228..89fa4b63228 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/Point2.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/Point2.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcDecoder.cpp b/3rdparty/bimg/3rdparty/pvrtc/PvrTcDecoder.cpp
index d8a36b342c0..d8a36b342c0 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcDecoder.cpp
+++ b/3rdparty/bimg/3rdparty/pvrtc/PvrTcDecoder.cpp
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcDecoder.h b/3rdparty/bimg/3rdparty/pvrtc/PvrTcDecoder.h
index 1b6fcf964c3..1b6fcf964c3 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcDecoder.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/PvrTcDecoder.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcEncoder.cpp b/3rdparty/bimg/3rdparty/pvrtc/PvrTcEncoder.cpp
index 56cc8e03c56..56cc8e03c56 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcEncoder.cpp
+++ b/3rdparty/bimg/3rdparty/pvrtc/PvrTcEncoder.cpp
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcEncoder.h b/3rdparty/bimg/3rdparty/pvrtc/PvrTcEncoder.h
index fd244846a36..fd244846a36 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcEncoder.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/PvrTcEncoder.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcPacket.cpp b/3rdparty/bimg/3rdparty/pvrtc/PvrTcPacket.cpp
index 2e40d371e8a..2e40d371e8a 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcPacket.cpp
+++ b/3rdparty/bimg/3rdparty/pvrtc/PvrTcPacket.cpp
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcPacket.h b/3rdparty/bimg/3rdparty/pvrtc/PvrTcPacket.h
index ac3b6a4dd10..ac3b6a4dd10 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/PvrTcPacket.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/PvrTcPacket.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/README.md b/3rdparty/bimg/3rdparty/pvrtc/README.md
index fb31a18200f..fb31a18200f 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/README.md
+++ b/3rdparty/bimg/3rdparty/pvrtc/README.md
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/RgbBitmap.h b/3rdparty/bimg/3rdparty/pvrtc/RgbBitmap.h
index 4f3c57b5c07..4f3c57b5c07 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/RgbBitmap.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/RgbBitmap.h
diff --git a/3rdparty/bgfx/3rdparty/pvrtc/RgbaBitmap.h b/3rdparty/bimg/3rdparty/pvrtc/RgbaBitmap.h
index ae43a779dac..ae43a779dac 100644
--- a/3rdparty/bgfx/3rdparty/pvrtc/RgbaBitmap.h
+++ b/3rdparty/bimg/3rdparty/pvrtc/RgbaBitmap.h
diff --git a/3rdparty/bgfx/3rdparty/stb/stb_image.c b/3rdparty/bimg/3rdparty/stb/stb_image.h
index ad26b74f55d..3ce6d8fa11e 100644
--- a/3rdparty/bgfx/3rdparty/stb/stb_image.c
+++ b/3rdparty/bimg/3rdparty/stb/stb_image.h
@@ -1,18 +1,10 @@
-#ifdef __GNUC__
-# pragma GCC diagnostic ignored "-Wshadow"
-# pragma GCC diagnostic ignored "-Warray-bounds"
-# ifndef __clang__
-# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
-# endif // __clang__
-#elif defined(_MSC_VER)
+#if defined(_MSC_VER)
# pragma warning(disable:4244) // warning C4244: '=': conversion from 'int' to 'stbi__uint16', possible loss of data
# pragma warning(disable:4245) // warning C4245: 'argument': conversion from 'int' to 'char', signed/unsigned mismatch
-# pragma warning(disable:4312) // warning C4312: 'type cast': conversion from '' to '' of greater size
# pragma warning(disable:4456) // warning C4456: declaration of 'k' hides previous local declaration
-# pragma warning(disable:4457) // warning C4457: declaration of 'y' hides function parameter
#endif
-/* stb_image - v2.06 - public domain image loader - http://nothings.org/stb_image.h
+/* stb_image - v2.15 - public domain image loader - http://nothings.org/stb_image.h
no warranty implied; use at your own risk
Do this:
@@ -35,7 +27,7 @@
avoid problematic images and only need the trivial interface
JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib)
- PNG 1/2/4/8-bit-per-channel (16 bpc not supported)
+ PNG 1/2/4/8/16-bit-per-channel
TGA (not sure what subset, if a subset)
BMP non-1bpp, non-RLE
@@ -56,114 +48,19 @@
Full documentation under "DOCUMENTATION" below.
- Revision 2.00 release notes:
-
- - Progressive JPEG is now supported.
-
- - PPM and PGM binary formats are now supported, thanks to Ken Miller.
-
- - x86 platforms now make use of SSE2 SIMD instructions for
- JPEG decoding, and ARM platforms can use NEON SIMD if requested.
- This work was done by Fabian "ryg" Giesen. SSE2 is used by
- default, but NEON must be enabled explicitly; see docs.
-
- With other JPEG optimizations included in this version, we see
- 2x speedup on a JPEG on an x86 machine, and a 1.5x speedup
- on a JPEG on an ARM machine, relative to previous versions of this
- library. The same results will not obtain for all JPGs and for all
- x86/ARM machines. (Note that progressive JPEGs are significantly
- slower to decode than regular JPEGs.) This doesn't mean that this
- is the fastest JPEG decoder in the land; rather, it brings it
- closer to parity with standard libraries. If you want the fastest
- decode, look elsewhere. (See "Philosophy" section of docs below.)
-
- See final bullet items below for more info on SIMD.
-
- - Added STBI_MALLOC, STBI_REALLOC, and STBI_FREE macros for replacing
- the memory allocator. Unlike other STBI libraries, these macros don't
- support a context parameter, so if you need to pass a context in to
- the allocator, you'll have to store it in a global or a thread-local
- variable.
-
- - Split existing STBI_NO_HDR flag into two flags, STBI_NO_HDR and
- STBI_NO_LINEAR.
- STBI_NO_HDR: suppress implementation of .hdr reader format
- STBI_NO_LINEAR: suppress high-dynamic-range light-linear float API
-
- - You can suppress implementation of any of the decoders to reduce
- your code footprint by #defining one or more of the following
- symbols before creating the implementation.
-
- STBI_NO_JPEG
- STBI_NO_PNG
- STBI_NO_BMP
- STBI_NO_PSD
- STBI_NO_TGA
- STBI_NO_GIF
- STBI_NO_HDR
- STBI_NO_PIC
- STBI_NO_PNM (.ppm and .pgm)
-
- - You can request *only* certain decoders and suppress all other ones
- (this will be more forward-compatible, as addition of new decoders
- doesn't require you to disable them explicitly):
-
- STBI_ONLY_JPEG
- STBI_ONLY_PNG
- STBI_ONLY_BMP
- STBI_ONLY_PSD
- STBI_ONLY_TGA
- STBI_ONLY_GIF
- STBI_ONLY_HDR
- STBI_ONLY_PIC
- STBI_ONLY_PNM (.ppm and .pgm)
-
- Note that you can define multiples of these, and you will get all
- of them ("only x" and "only y" is interpreted to mean "only x&y").
-
- - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still
- want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB
-
- - Compilation of all SIMD code can be suppressed with
- #define STBI_NO_SIMD
- It should not be necessary to disable SIMD unless you have issues
- compiling (e.g. using an x86 compiler which doesn't support SSE
- intrinsics or that doesn't support the method used to detect
- SSE2 support at run-time), and even those can be reported as
- bugs so I can refine the built-in compile-time checking to be
- smarter.
-
- - The old STBI_SIMD system which allowed installing a user-defined
- IDCT etc. has been removed. If you need this, don't upgrade. My
- assumption is that almost nobody was doing this, and those who
- were will find the built-in SIMD more satisfactory anyway.
-
- - RGB values computed for JPEG images are slightly different from
- previous versions of stb_image. (This is due to using less
- integer precision in SIMD.) The C code has been adjusted so
- that the same RGB values will be computed regardless of whether
- SIMD support is available, so your app should always produce
- consistent results. But these results are slightly different from
- previous versions. (Specifically, about 3% of available YCbCr values
- will compute different RGB results from pre-1.49 versions by +-1;
- most of the deviating values are one smaller in the G channel.)
-
- - If you must produce consistent results with previous versions of
- stb_image, #define STBI_JPEG_OLD and you will get the same results
- you used to; however, you will not get the SIMD speedups for
- the YCbCr-to-RGB conversion step (although you should still see
- significant JPEG speedup from the other changes).
-
- Please note that STBI_JPEG_OLD is a temporary feature; it will be
- removed in future versions of the library. It is only intended for
- near-term back-compatibility use.
-
-
- Latest revision history:
+LICENSE
+
+ See end of file for license information.
+
+RECENT REVISION HISTORY:
+
+ 2.15 (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC
+ 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs
+ 2.13 (2016-12-04) experimental 16-bit API, only for PNG so far; fixes
2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes
2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64
RGB-format JPEG; remove white matting in PSD;
- allocate large structures on the stack;
+ allocate large structures on the stack;
correct channel count for PNG & BMP
2.10 (2016-01-22) avoid warning introduced in 2.09
2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED
@@ -171,21 +68,6 @@
2.07 (2015-09-13) partial animated GIF support
limited 16-bit PSD support
minor bugs, code cleanup, and compiler warnings
- 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value
- 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning
- 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit
- 2.03 (2015-04-12) additional corruption checking
- stbi_set_flip_vertically_on_load
- fix NEON support; fix mingw support
- 2.02 (2015-01-19) fix incorrect assert, fix warning
- 2.01 (2015-01-17) fix various warnings
- 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG
- 2.00 (2014-12-25) optimize JPEG, including x86 SSE2 & ARM NEON SIMD
- progressive JPEG
- PGM/PPM support
- STBI_MALLOC,STBI_REALLOC,STBI_FREE
- STBI_NO_*, STBI_ONLY_*
- GIF bugfix
See end of file for full revision history.
@@ -200,33 +82,28 @@
Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG)
Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip)
Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD)
- urraka@github (animated gif) Junggon Kim (PNM comments)
+ github:urraka (animated gif) Junggon Kim (PNM comments)
Daniel Gibson (16-bit TGA)
-
+ socks-the-fox (16-bit PNG)
+ Jeremy Sawicki (handle all ImageNet JPGs)
Optimizations & bugfixes
Fabian "ryg" Giesen
Arseny Kapoulkine
Bug & warning fixes
Marc LeBlanc David Woo Guillaume George Martins Mozeiko
- Christpher Lloyd Martin Golini Jerry Jansson Joseph Thomson
- Dave Moore Roy Eltham Hayaki Saito Phil Jordan
- Won Chun Luke Graham Johan Duparc Nathan Reed
- the Horde3D community Thomas Ruf Ronny Chevalier Nick Verigakis
- Janez Zemva John Bartholomew Michal Cichon svdijk@github
- Jonathan Blow Ken Hamada Tero Hanninen Baldur Karlsson
- Laurent Gomila Cort Stratton Sergio Gonzalez romigrou@github
- Aruelien Pocheville Thibault Reuille Cass Everitt Matthew Gregan
- Ryamond Barbiero Paul Du Bois Engin Manap snagar@github
- Michaelangel007@github Oriol Ferrer Mesia socks-the-fox
- Blazej Dariusz Roszkowski
-
-
-LICENSE
-
-This software is dual-licensed to the public domain and under the following
-license: you are granted a perpetual, irrevocable license to copy, modify,
-publish, and distribute this file as you see fit.
+ Christpher Lloyd Jerry Jansson Joseph Thomson Phil Jordan
+ Dave Moore Roy Eltham Hayaki Saito Nathan Reed
+ Won Chun Luke Graham Johan Duparc Nick Verigakis
+ the Horde3D community Thomas Ruf Ronny Chevalier Baldur Karlsson
+ Janez Zemva John Bartholomew Michal Cichon github:rlyeh
+ Jonathan Blow Ken Hamada Tero Hanninen github:romigrou
+ Laurent Gomila Cort Stratton Sergio Gonzalez github:svdijk
+ Aruelien Pocheville Thibault Reuille Cass Everitt github:snagar
+ Ryamond Barbiero Paul Du Bois Engin Manap github:Zelex
+ Michaelangel007@github Philipp Wiesemann Dale Weiler github:grim210
+ Oriol Ferrer Mesia Josh Tobin Matthew Gregan github:sammyhw
+ Blazej Dariusz Roszkowski Gregory Mullen github:phprus
*/
@@ -252,10 +129,10 @@ publish, and distribute this file as you see fit.
// stbi_image_free(data)
//
// Standard parameters:
-// int *x -- outputs image width in pixels
-// int *y -- outputs image height in pixels
-// int *comp -- outputs # of image components in image file
-// int req_comp -- if non-zero, # of image components requested in result
+// int *x -- outputs image width in pixels
+// int *y -- outputs image height in pixels
+// int *channels_in_file -- outputs # of image components in image file
+// int desired_channels -- if non-zero, # of image components requested in result
//
// The return value from an image loader is an 'unsigned char *' which points
// to the pixel data, or NULL on an allocation failure or if the image is
@@ -301,13 +178,13 @@ publish, and distribute this file as you see fit.
// and for best performance I may provide less-easy-to-use APIs that give higher
// performance, in addition to the easy to use ones. Nevertheless, it's important
// to keep in mind that from the standpoint of you, a client of this library,
-// all you care about is #1 and #3, and stb libraries do not emphasize #3 above all.
+// all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all.
//
// Some secondary priorities arise directly from the first two, some of which
// make more explicit reasons why performance can't be emphasized.
//
// - Portable ("ease of use")
-// - Small footprint ("easy to maintain")
+// - Small source code footprint ("easy to maintain")
// - No dependencies ("ease of use")
//
// ===========================================================================
@@ -339,13 +216,6 @@ publish, and distribute this file as you see fit.
// (at least this is true for iOS and Android). Therefore, the NEON support is
// toggled by a build flag: define STBI_NEON to get NEON loops.
//
-// The output of the JPEG decoder is slightly different from versions where
-// SIMD support was introduced (that is, for versions before 1.49). The
-// difference is only +-1 in the 8-bit RGB channels, and only on a small
-// fraction of pixels. You can force the pre-1.49 behavior by defining
-// STBI_JPEG_OLD, but this will disable some of the SIMD decoding path
-// and hence cost some performance.
-//
// If for some reason you do not want to use any of SIMD code, or if
// you have issues compiling it, you can disable it entirely by
// defining STBI_NO_SIMD.
@@ -401,6 +271,41 @@ publish, and distribute this file as you see fit.
// says there's premultiplied data (currently only happens in iPhone images,
// and only if iPhone convert-to-rgb processing is on).
//
+// ===========================================================================
+//
+// ADDITIONAL CONFIGURATION
+//
+// - You can suppress implementation of any of the decoders to reduce
+// your code footprint by #defining one or more of the following
+// symbols before creating the implementation.
+//
+// STBI_NO_JPEG
+// STBI_NO_PNG
+// STBI_NO_BMP
+// STBI_NO_PSD
+// STBI_NO_TGA
+// STBI_NO_GIF
+// STBI_NO_HDR
+// STBI_NO_PIC
+// STBI_NO_PNM (.ppm and .pgm)
+//
+// - You can request *only* certain decoders and suppress all other ones
+// (this will be more forward-compatible, as addition of new decoders
+// doesn't require you to disable them explicitly):
+//
+// STBI_ONLY_JPEG
+// STBI_ONLY_PNG
+// STBI_ONLY_BMP
+// STBI_ONLY_PSD
+// STBI_ONLY_TGA
+// STBI_ONLY_GIF
+// STBI_ONLY_HDR
+// STBI_ONLY_PIC
+// STBI_ONLY_PNM (.ppm and .pgm)
+//
+// - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still
+// want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB
+//
#ifndef STBI_NO_STDIO
@@ -420,6 +325,7 @@ enum
};
typedef unsigned char stbi_uc;
+typedef unsigned short stbi_us;
#ifdef __cplusplus
extern "C" {
@@ -447,22 +353,42 @@ typedef struct
int (*eof) (void *user); // returns nonzero if we are at end of file/data
} stbi_io_callbacks;
-STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp);
-STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *comp, int req_comp);
-STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *comp, int req_comp);
+////////////////////////////////////
+//
+// 8-bits-per-channel interface
+//
+
+STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels);
+STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels);
+STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *channels_in_file, int desired_channels);
#ifndef STBI_NO_STDIO
-STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp);
+STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels);
// for stbi_load_from_file, file pointer is left pointing immediately after image
#endif
+////////////////////////////////////
+//
+// 16-bits-per-channel interface
+//
+
+STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *channels_in_file, int desired_channels);
+#ifndef STBI_NO_STDIO
+STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels);
+#endif
+// @TODO the other variants
+
+////////////////////////////////////
+//
+// float-per-channel interface
+//
#ifndef STBI_NO_LINEAR
- STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp);
- STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp);
- STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp);
+ STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels);
+ STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels);
+ STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels);
#ifndef STBI_NO_STDIO
- STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp);
+ STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels);
#endif
#endif
@@ -580,6 +506,7 @@ STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const ch
#include <stddef.h> // ptrdiff_t on osx
#include <stdlib.h>
#include <string.h>
+#include <limits.h>
#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR)
#include <math.h> // ldexp
@@ -663,12 +590,14 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1];
#define STBI__X86_TARGET
#endif
-#if defined(__GNUC__) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) && !defined(__SSE2__) && !defined(STBI_NO_SIMD)
-// NOTE: not clear do we actually need this for the 64-bit path?
+#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD)
// gcc doesn't support sse2 intrinsics unless you compile with -msse2,
-// (but compiling with -msse2 allows the compiler to use SSE2 everywhere;
-// this is just broken and gcc are jerks for not fixing it properly
-// http://www.virtualdub.org/blog/pivot/entry.php?id=363 )
+// which in turn means it gets to use SSE2 everywhere. This is unfortunate,
+// but previous attempts to provide the SSE2 functions with runtime
+// detection caused numerous issues. The way architecture extensions are
+// exposed in GCC/Clang is, sadly, not really suited for one-file libs.
+// New behavior: if compiled with -msse2, we use SSE2 without any
+// detection; if not, we don't use it at all.
#define STBI_NO_SIMD
#endif
@@ -726,14 +655,10 @@ static int stbi__sse2_available()
static int stbi__sse2_available()
{
-#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 // GCC 4.8 or later
- // GCC 4.8+ has a nice way to do this
- return __builtin_cpu_supports("sse2");
-#else
- // portable way to do this, preferably without using GCC inline ASM?
- // just bail for now.
- return 0;
-#endif
+ // If we're even attempting to compile this on GCC/Clang, that means
+ // -msse2 is on, which means the compiler is allowed to use SSE2
+ // instructions at will, and so are we.
+ return 1;
}
#endif
#endif
@@ -841,57 +766,70 @@ static void stbi__rewind(stbi__context *s)
s->img_buffer_end = s->img_buffer_original_end;
}
+enum
+{
+ STBI_ORDER_RGB,
+ STBI_ORDER_BGR
+};
+
+typedef struct
+{
+ int bits_per_channel;
+ int num_channels;
+ int channel_order;
+} stbi__result_info;
+
#ifndef STBI_NO_JPEG
static int stbi__jpeg_test(stbi__context *s);
-static stbi_uc *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp);
#endif
#ifndef STBI_NO_PNG
static int stbi__png_test(stbi__context *s);
-static stbi_uc *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp);
#endif
#ifndef STBI_NO_BMP
static int stbi__bmp_test(stbi__context *s);
-static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp);
#endif
#ifndef STBI_NO_TGA
static int stbi__tga_test(stbi__context *s);
-static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp);
#endif
#ifndef STBI_NO_PSD
static int stbi__psd_test(stbi__context *s);
-static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc);
static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp);
#endif
#ifndef STBI_NO_HDR
static int stbi__hdr_test(stbi__context *s);
-static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp);
#endif
#ifndef STBI_NO_PIC
static int stbi__pic_test(stbi__context *s);
-static stbi_uc *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp);
#endif
#ifndef STBI_NO_GIF
static int stbi__gif_test(stbi__context *s);
-static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp);
#endif
#ifndef STBI_NO_PNM
static int stbi__pnm_test(stbi__context *s);
-static stbi_uc *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp);
#endif
@@ -914,6 +852,77 @@ static void *stbi__malloc(size_t size)
return STBI_MALLOC(size);
}
+// stb_image uses ints pervasively, including for offset calculations.
+// therefore the largest decoded image size we can support with the
+// current code, even on 64-bit targets, is INT_MAX. this is not a
+// significant limitation for the intended use case.
+//
+// we do, however, need to make sure our size calculations don't
+// overflow. hence a few helper functions for size calculations that
+// multiply integers together, making sure that they're non-negative
+// and no overflow occurs.
+
+// return 1 if the sum is valid, 0 on overflow.
+// negative terms are considered invalid.
+static int stbi__addsizes_valid(int a, int b)
+{
+ if (b < 0) return 0;
+ // now 0 <= b <= INT_MAX, hence also
+ // 0 <= INT_MAX - b <= INTMAX.
+ // And "a + b <= INT_MAX" (which might overflow) is the
+ // same as a <= INT_MAX - b (no overflow)
+ return a <= INT_MAX - b;
+}
+
+// returns 1 if the product is valid, 0 on overflow.
+// negative factors are considered invalid.
+static int stbi__mul2sizes_valid(int a, int b)
+{
+ if (a < 0 || b < 0) return 0;
+ if (b == 0) return 1; // mul-by-0 is always safe
+ // portable way to check for no overflows in a*b
+ return a <= INT_MAX/b;
+}
+
+// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow
+static int stbi__mad2sizes_valid(int a, int b, int add)
+{
+ return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add);
+}
+
+// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow
+static int stbi__mad3sizes_valid(int a, int b, int c, int add)
+{
+ return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) &&
+ stbi__addsizes_valid(a*b*c, add);
+}
+
+// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow
+static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add)
+{
+ return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) &&
+ stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add);
+}
+
+// mallocs with size overflow checking
+static void *stbi__malloc_mad2(int a, int b, int add)
+{
+ if (!stbi__mad2sizes_valid(a, b, add)) return NULL;
+ return stbi__malloc(a*b + add);
+}
+
+static void *stbi__malloc_mad3(int a, int b, int c, int add)
+{
+ if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL;
+ return stbi__malloc(a*b*c + add);
+}
+
+static void *stbi__malloc_mad4(int a, int b, int c, int d, int add)
+{
+ if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL;
+ return stbi__malloc(a*b*c*d + add);
+}
+
// stbi__err - error
// stbi__errpf - error returning pointer to float
// stbi__errpuc - error returning pointer to unsigned char
@@ -949,33 +958,38 @@ STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip)
stbi__vertically_flip_on_load = flag_true_if_should_flip;
}
-static unsigned char *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc)
{
+ memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields
+ ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed
+ ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order
+ ri->num_channels = 0;
+
#ifndef STBI_NO_JPEG
- if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp);
+ if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri);
#endif
#ifndef STBI_NO_PNG
- if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp);
+ if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp, ri);
#endif
#ifndef STBI_NO_BMP
- if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp);
+ if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp, ri);
#endif
#ifndef STBI_NO_GIF
- if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp);
+ if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp, ri);
#endif
#ifndef STBI_NO_PSD
- if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp);
+ if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc);
#endif
#ifndef STBI_NO_PIC
- if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp);
+ if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp, ri);
#endif
#ifndef STBI_NO_PNM
- if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp);
+ if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp, ri);
#endif
#ifndef STBI_NO_HDR
if (stbi__hdr_test(s)) {
- float *hdr = stbi__hdr_load(s, x,y,comp,req_comp);
+ float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri);
return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp);
}
#endif
@@ -983,35 +997,117 @@ static unsigned char *stbi__load_main(stbi__context *s, int *x, int *y, int *com
#ifndef STBI_NO_TGA
// test tga last because it's a crappy test!
if (stbi__tga_test(s))
- return stbi__tga_load(s,x,y,comp,req_comp);
+ return stbi__tga_load(s,x,y,comp,req_comp, ri);
#endif
return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt");
}
-static unsigned char *stbi__load_flip(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels)
{
- unsigned char *result = stbi__load_main(s, x, y, comp, req_comp);
+ int i;
+ int img_len = w * h * channels;
+ stbi_uc *reduced;
- if (stbi__vertically_flip_on_load && result != NULL) {
+ reduced = (stbi_uc *) stbi__malloc(img_len);
+ if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory");
+
+ for (i = 0; i < img_len; ++i)
+ reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling
+
+ STBI_FREE(orig);
+ return reduced;
+}
+
+static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels)
+{
+ int i;
+ int img_len = w * h * channels;
+ stbi__uint16 *enlarged;
+
+ enlarged = (stbi__uint16 *) stbi__malloc(img_len*2);
+ if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory");
+
+ for (i = 0; i < img_len; ++i)
+ enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff
+
+ STBI_FREE(orig);
+ return enlarged;
+}
+
+static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+ stbi__result_info ri;
+ void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8);
+
+ if (result == NULL)
+ return NULL;
+
+ if (ri.bits_per_channel != 8) {
+ STBI_ASSERT(ri.bits_per_channel == 16);
+ result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp);
+ ri.bits_per_channel = 8;
+ }
+
+ // @TODO: move stbi__convert_format to here
+
+ if (stbi__vertically_flip_on_load) {
int w = *x, h = *y;
- int depth = req_comp ? req_comp : *comp;
+ int channels = req_comp ? req_comp : *comp;
int row,col,z;
- stbi_uc temp;
+ stbi_uc *image = (stbi_uc *) result;
// @OPTIMIZE: use a bigger temp buffer and memcpy multiple pixels at once
for (row = 0; row < (h>>1); row++) {
for (col = 0; col < w; col++) {
- for (z = 0; z < depth; z++) {
- temp = result[(row * w + col) * depth + z];
- result[(row * w + col) * depth + z] = result[((h - row - 1) * w + col) * depth + z];
- result[((h - row - 1) * w + col) * depth + z] = temp;
+ for (z = 0; z < channels; z++) {
+ stbi_uc temp = image[(row * w + col) * channels + z];
+ image[(row * w + col) * channels + z] = image[((h - row - 1) * w + col) * channels + z];
+ image[((h - row - 1) * w + col) * channels + z] = temp;
}
}
}
}
- return result;
+ return (unsigned char *) result;
+}
+
+static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+ stbi__result_info ri;
+ void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16);
+
+ if (result == NULL)
+ return NULL;
+
+ if (ri.bits_per_channel != 16) {
+ STBI_ASSERT(ri.bits_per_channel == 8);
+ result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp);
+ ri.bits_per_channel = 16;
+ }
+
+ // @TODO: move stbi__convert_format16 to here
+ // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision
+
+ if (stbi__vertically_flip_on_load) {
+ int w = *x, h = *y;
+ int channels = req_comp ? req_comp : *comp;
+ int row,col,z;
+ stbi__uint16 *image = (stbi__uint16 *) result;
+
+ // @OPTIMIZE: use a bigger temp buffer and memcpy multiple pixels at once
+ for (row = 0; row < (h>>1); row++) {
+ for (col = 0; col < w; col++) {
+ for (z = 0; z < channels; z++) {
+ stbi__uint16 temp = image[(row * w + col) * channels + z];
+ image[(row * w + col) * channels + z] = image[((h - row - 1) * w + col) * channels + z];
+ image[((h - row - 1) * w + col) * channels + z] = temp;
+ }
+ }
+ }
+ }
+
+ return (stbi__uint16 *) result;
}
#ifndef STBI_NO_HDR
@@ -1067,27 +1163,52 @@ STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req
unsigned char *result;
stbi__context s;
stbi__start_file(&s,f);
- result = stbi__load_flip(&s,x,y,comp,req_comp);
+ result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp);
+ if (result) {
+ // need to 'unget' all the characters in the IO buffer
+ fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR);
+ }
+ return result;
+}
+
+STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp)
+{
+ stbi__uint16 *result;
+ stbi__context s;
+ stbi__start_file(&s,f);
+ result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp);
if (result) {
// need to 'unget' all the characters in the IO buffer
fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR);
}
return result;
}
+
+STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp)
+{
+ FILE *f = stbi__fopen(filename, "rb");
+ stbi__uint16 *result;
+ if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file");
+ result = stbi_load_from_file_16(f,x,y,comp,req_comp);
+ fclose(f);
+ return result;
+}
+
+
#endif //!STBI_NO_STDIO
STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp)
{
stbi__context s;
stbi__start_mem(&s,buffer,len);
- return stbi__load_flip(&s,x,y,comp,req_comp);
+ return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp);
}
STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp)
{
stbi__context s;
stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
- return stbi__load_flip(&s,x,y,comp,req_comp);
+ return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp);
}
#ifndef STBI_NO_LINEAR
@@ -1096,13 +1217,14 @@ static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int
unsigned char *data;
#ifndef STBI_NO_HDR
if (stbi__hdr_test(s)) {
- float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp);
+ stbi__result_info ri;
+ float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri);
if (hdr_data)
stbi__float_postprocess(hdr_data,x,y,comp,req_comp);
return hdr_data;
}
#endif
- data = stbi__load_flip(s, x, y, comp, req_comp);
+ data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp);
if (data)
return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp);
return stbi__errpf("unknown image type", "Image not of any known type, or corrupt");
@@ -1360,7 +1482,7 @@ static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int r
if (req_comp == img_n) return data;
STBI_ASSERT(req_comp >= 1 && req_comp <= 4);
- good = (unsigned char *) stbi__malloc(req_comp * x * y);
+ good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0);
if (good == NULL) {
STBI_FREE(data);
return stbi__errpuc("outofmem", "Out of memory");
@@ -1370,26 +1492,75 @@ static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int r
unsigned char *src = data + j * x * img_n ;
unsigned char *dest = good + j * x * req_comp;
- #define COMBO(a,b) ((a)*8+(b))
- #define CASE(a,b) case COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b)
+ #define STBI__COMBO(a,b) ((a)*8+(b))
+ #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b)
// convert source image with img_n components to one with req_comp components;
// avoid switch per pixel, so use switch per scanline and massive macros
- switch (COMBO(img_n, req_comp)) {
- CASE(1,2) dest[0]=src[0], dest[1]=255; break;
- CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break;
- CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break;
- CASE(2,1) dest[0]=src[0]; break;
- CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break;
- CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break;
- CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break;
- CASE(3,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break;
- CASE(3,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255; break;
- CASE(4,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break;
- CASE(4,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break;
- CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break;
+ switch (STBI__COMBO(img_n, req_comp)) {
+ STBI__CASE(1,2) { dest[0]=src[0], dest[1]=255; } break;
+ STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break;
+ STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; } break;
+ STBI__CASE(2,1) { dest[0]=src[0]; } break;
+ STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break;
+ STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; } break;
+ STBI__CASE(3,4) { dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; } break;
+ STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break;
+ STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255; } break;
+ STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break;
+ STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; } break;
+ STBI__CASE(4,3) { dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; } break;
default: STBI_ASSERT(0);
}
- #undef CASE
+ #undef STBI__CASE
+ }
+
+ STBI_FREE(data);
+ return good;
+}
+
+static stbi__uint16 stbi__compute_y_16(int r, int g, int b)
+{
+ return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8);
+}
+
+static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y)
+{
+ int i,j;
+ stbi__uint16 *good;
+
+ if (req_comp == img_n) return data;
+ STBI_ASSERT(req_comp >= 1 && req_comp <= 4);
+
+ good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2);
+ if (good == NULL) {
+ STBI_FREE(data);
+ return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory");
+ }
+
+ for (j=0; j < (int) y; ++j) {
+ stbi__uint16 *src = data + j * x * img_n ;
+ stbi__uint16 *dest = good + j * x * req_comp;
+
+ #define STBI__COMBO(a,b) ((a)*8+(b))
+ #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b)
+ // convert source image with img_n components to one with req_comp components;
+ // avoid switch per pixel, so use switch per scanline and massive macros
+ switch (STBI__COMBO(img_n, req_comp)) {
+ STBI__CASE(1,2) { dest[0]=src[0], dest[1]=0xffff; } break;
+ STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break;
+ STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0], dest[3]=0xffff; } break;
+ STBI__CASE(2,1) { dest[0]=src[0]; } break;
+ STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break;
+ STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; } break;
+ STBI__CASE(3,4) { dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=0xffff; } break;
+ STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break;
+ STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]), dest[1] = 0xffff; } break;
+ STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break;
+ STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]), dest[1] = src[3]; } break;
+ STBI__CASE(4,3) { dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; } break;
+ default: STBI_ASSERT(0);
+ }
+ #undef STBI__CASE
}
STBI_FREE(data);
@@ -1400,7 +1571,9 @@ static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int r
static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp)
{
int i,k,n;
- float *output = (float *) stbi__malloc(x * y * comp * sizeof(float));
+ float *output;
+ if (!data) return NULL;
+ output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0);
if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); }
// compute number of non-alpha components
if (comp & 1) n = comp; else n = comp-1;
@@ -1420,7 +1593,9 @@ static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp)
static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp)
{
int i,k,n;
- stbi_uc *output = (stbi_uc *) stbi__malloc(x * y * comp);
+ stbi_uc *output;
+ if (!data) return NULL;
+ output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0);
if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); }
// compute number of non-alpha components
if (comp & 1) n = comp; else n = comp-1;
@@ -1485,7 +1660,7 @@ typedef struct
stbi__context *s;
stbi__huffman huff_dc[4];
stbi__huffman huff_ac[4];
- stbi_uc dequant[4][64];
+ stbi__uint16 dequant[4][64];
stbi__int16 fast_ac[4][1 << FAST_BITS];
// sizes for components, interleaved MCUs
@@ -1521,6 +1696,8 @@ typedef struct
int succ_high;
int succ_low;
int eob_run;
+ int jfif;
+ int app14_color_transform; // Adobe APP14 tag
int rgb;
int scan_n, order[4];
@@ -1591,7 +1768,7 @@ static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h)
// magnitude code followed by receive_extend code
int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits);
int m = 1 << (magbits - 1);
- if (k < m) k += (-1 << magbits) + 1;
+ if (k < m) k += (~0U << magbits) + 1;
// if the result is small enough, we can fit it in fast_ac table
if (k >= -128 && k <= 127)
fast_ac[i] = (stbi__int16) ((k << 8) + (run << 4) + (len + magbits));
@@ -1606,6 +1783,7 @@ static void stbi__grow_buffer_unsafe(stbi__jpeg *j)
int b = j->nomore ? 0 : stbi__get8(j->s);
if (b == 0xff) {
int c = stbi__get8(j->s);
+ while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes
if (c != 0) {
j->marker = (unsigned char) c;
j->nomore = 1;
@@ -1730,7 +1908,7 @@ static stbi_uc stbi__jpeg_dezigzag[64+15] =
};
// decode one 64-entry block--
-static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi_uc *dequant)
+static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant)
{
int diff,dc,k;
int t;
@@ -2439,7 +2617,7 @@ static stbi_uc stbi__get_marker(stbi__jpeg *j)
x = stbi__get8(j->s);
if (x != 0xff) return STBI__MARKER_none;
while (x == 0xff)
- x = stbi__get8(j->s);
+ x = stbi__get8(j->s); // consume repeated 0xff fill bytes
return x;
}
@@ -2454,7 +2632,7 @@ static void stbi__jpeg_reset(stbi__jpeg *j)
j->code_bits = 0;
j->code_buffer = 0;
j->nomore = 0;
- j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0;
+ j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0;
j->marker = STBI__MARKER_none;
j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff;
j->eob_run = 0;
@@ -2586,7 +2764,7 @@ static int stbi__parse_entropy_coded_data(stbi__jpeg *z)
}
}
-static void stbi__jpeg_dequantize(short *data, stbi_uc *dequant)
+static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant)
{
int i;
for (i=0; i < 64; ++i)
@@ -2628,13 +2806,14 @@ static int stbi__process_marker(stbi__jpeg *z, int m)
L = stbi__get16be(z->s)-2;
while (L > 0) {
int q = stbi__get8(z->s);
- int p = q >> 4;
+ int p = q >> 4, sixteen = (p != 0);
int t = q & 15,i;
- if (p != 0) return stbi__err("bad DQT type","Corrupt JPEG");
+ if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG");
if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG");
+
for (i=0; i < 64; ++i)
- z->dequant[t][stbi__jpeg_dezigzag[i]] = stbi__get8(z->s);
- L -= 65;
+ z->dequant[t][stbi__jpeg_dezigzag[i]] = sixteen ? stbi__get16be(z->s) : stbi__get8(z->s);
+ L -= (sixteen ? 129 : 65);
}
return L==0;
@@ -2667,12 +2846,50 @@ static int stbi__process_marker(stbi__jpeg *z, int m)
}
return L==0;
}
+
// check for comment block or APP blocks
if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) {
- stbi__skip(z->s, stbi__get16be(z->s)-2);
+ L = stbi__get16be(z->s);
+ if (L < 2) {
+ if (m == 0xFE)
+ return stbi__err("bad COM len","Corrupt JPEG");
+ else
+ return stbi__err("bad APP len","Corrupt JPEG");
+ }
+ L -= 2;
+
+ if (m == 0xE0 && L >= 5) { // JFIF APP0 segment
+ static const unsigned char tag[5] = {'J','F','I','F','\0'};
+ int ok = 1;
+ int i;
+ for (i=0; i < 5; ++i)
+ if (stbi__get8(z->s) != tag[i])
+ ok = 0;
+ L -= 5;
+ if (ok)
+ z->jfif = 1;
+ } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment
+ static const unsigned char tag[6] = {'A','d','o','b','e','\0'};
+ int ok = 1;
+ int i;
+ for (i=0; i < 6; ++i)
+ if (stbi__get8(z->s) != tag[i])
+ ok = 0;
+ L -= 6;
+ if (ok) {
+ stbi__get8(z->s); // version
+ stbi__get16be(z->s); // flags0
+ stbi__get16be(z->s); // flags1
+ z->app14_color_transform = stbi__get8(z->s); // color transform
+ L -= 6;
+ }
+ }
+
+ stbi__skip(z->s, L);
return 1;
}
- return 0;
+
+ return stbi__err("unknown marker","Corrupt JPEG");
}
// after we see SOS
@@ -2715,6 +2932,28 @@ static int stbi__process_scan_header(stbi__jpeg *z)
return 1;
}
+static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why)
+{
+ int i;
+ for (i=0; i < ncomp; ++i) {
+ if (z->img_comp[i].raw_data) {
+ STBI_FREE(z->img_comp[i].raw_data);
+ z->img_comp[i].raw_data = NULL;
+ z->img_comp[i].data = NULL;
+ }
+ if (z->img_comp[i].raw_coeff) {
+ STBI_FREE(z->img_comp[i].raw_coeff);
+ z->img_comp[i].raw_coeff = 0;
+ z->img_comp[i].coeff = 0;
+ }
+ if (z->img_comp[i].linebuf) {
+ STBI_FREE(z->img_comp[i].linebuf);
+ z->img_comp[i].linebuf = NULL;
+ }
+ }
+ return why;
+}
+
static int stbi__process_frame_header(stbi__jpeg *z, int scan)
{
stbi__context *s = z->s;
@@ -2724,7 +2963,7 @@ static int stbi__process_frame_header(stbi__jpeg *z, int scan)
s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG
s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires
c = stbi__get8(s);
- if (c != 3 && c != 1) return stbi__err("bad component count","Corrupt JPEG"); // JFIF requires
+ if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG");
s->img_n = c;
for (i=0; i < c; ++i) {
z->img_comp[i].data = NULL;
@@ -2737,13 +2976,8 @@ static int stbi__process_frame_header(stbi__jpeg *z, int scan)
for (i=0; i < s->img_n; ++i) {
static unsigned char rgb[3] = { 'R', 'G', 'B' };
z->img_comp[i].id = stbi__get8(s);
- if (z->img_comp[i].id != i+1) // JFIF requires
- if (z->img_comp[i].id != i) { // some version of jpegtran outputs non-JFIF-compliant files!
- // somethings output this (see http://fileformats.archiveteam.org/wiki/JPEG#Color_format)
- if (z->img_comp[i].id != rgb[i])
- return stbi__err("bad component ID","Corrupt JPEG");
- ++z->rgb;
- }
+ if (s->img_n == 3 && z->img_comp[i].id == rgb[i])
+ ++z->rgb;
q = stbi__get8(s);
z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG");
z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG");
@@ -2752,7 +2986,7 @@ static int stbi__process_frame_header(stbi__jpeg *z, int scan)
if (scan != STBI__SCAN_load) return 1;
- if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode");
+ if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode");
for (i=0; i < s->img_n; ++i) {
if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h;
@@ -2764,6 +2998,7 @@ static int stbi__process_frame_header(stbi__jpeg *z, int scan)
z->img_v_max = v_max;
z->img_mcu_w = h_max * 8;
z->img_mcu_h = v_max * 8;
+ // these sizes can't be more than 17 bits
z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w;
z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h;
@@ -2775,28 +3010,27 @@ static int stbi__process_frame_header(stbi__jpeg *z, int scan)
// the bogus oversized data from using interleaved MCUs and their
// big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't
// discard the extra data until colorspace conversion
+ //
+ // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier)
+ // so these muls can't overflow with 32-bit ints (which we require)
z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8;
z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8;
- z->img_comp[i].raw_data = stbi__malloc(z->img_comp[i].w2 * z->img_comp[i].h2+15);
-
- if (z->img_comp[i].raw_data == NULL) {
- for(--i; i >= 0; --i) {
- STBI_FREE(z->img_comp[i].raw_data);
- z->img_comp[i].raw_data = NULL;
- }
- return stbi__err("outofmem", "Out of memory");
- }
+ z->img_comp[i].coeff = 0;
+ z->img_comp[i].raw_coeff = 0;
+ z->img_comp[i].linebuf = NULL;
+ z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15);
+ if (z->img_comp[i].raw_data == NULL)
+ return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory"));
// align blocks for idct using mmx/sse
z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15);
- z->img_comp[i].linebuf = NULL;
if (z->progressive) {
- z->img_comp[i].coeff_w = (z->img_comp[i].w2 + 7) >> 3;
- z->img_comp[i].coeff_h = (z->img_comp[i].h2 + 7) >> 3;
- z->img_comp[i].raw_coeff = STBI_MALLOC(z->img_comp[i].coeff_w * z->img_comp[i].coeff_h * 64 * sizeof(short) + 15);
+ // w2, h2 are multiples of 8 (see above)
+ z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8;
+ z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8;
+ z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15);
+ if (z->img_comp[i].raw_coeff == NULL)
+ return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory"));
z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15);
- } else {
- z->img_comp[i].coeff = 0;
- z->img_comp[i].raw_coeff = 0;
}
}
@@ -2815,6 +3049,8 @@ static int stbi__process_frame_header(stbi__jpeg *z, int scan)
static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan)
{
int m;
+ z->jfif = 0;
+ z->app14_color_transform = -1; // valid values are 0,1,2
z->marker = STBI__MARKER_none; // initialize cached marker to empty
m = stbi__get_marker(z);
if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG");
@@ -2856,12 +3092,15 @@ static int stbi__decode_jpeg_image(stbi__jpeg *j)
if (x == 255) {
j->marker = stbi__get8(j->s);
break;
- } else if (x != 0) {
- return stbi__err("junk before marker", "Corrupt JPEG");
}
}
// if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0
}
+ } else if (stbi__DNL(m)) {
+ int Ld = stbi__get16be(j->s);
+ stbi__uint32 NL = stbi__get16be(j->s);
+ if (Ld != 4) stbi__err("bad DNL len", "Corrupt JPEG");
+ if (NL != j->s->img_y) stbi__err("bad DNL height", "Corrupt JPEG");
} else {
if (!stbi__process_marker(j, m)) return 0;
}
@@ -3080,38 +3319,9 @@ static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_
return out;
}
-#ifdef STBI_JPEG_OLD
-// this is the same YCbCr-to-RGB calculation that stb_image has used
-// historically before the algorithm changes in 1.49
-#define float2fixed(x) ((int) ((x) * 65536 + 0.5))
-static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step)
-{
- int i;
- for (i=0; i < count; ++i) {
- int y_fixed = (y[i] << 16) + 32768; // rounding
- int r,g,b;
- int cr = pcr[i] - 128;
- int cb = pcb[i] - 128;
- r = y_fixed + cr*float2fixed(1.40200f);
- g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f);
- b = y_fixed + cb*float2fixed(1.77200f);
- r >>= 16;
- g >>= 16;
- b >>= 16;
- if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; }
- if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; }
- if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; }
- out[0] = (stbi_uc)r;
- out[1] = (stbi_uc)g;
- out[2] = (stbi_uc)b;
- out[3] = 255;
- out += step;
- }
-}
-#else
// this is a reduced-precision calculation of YCbCr-to-RGB introduced
// to make sure the code produces the same results in both SIMD and scalar
-#define float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8)
+#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8)
static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step)
{
int i;
@@ -3120,9 +3330,9 @@ static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc
int r,g,b;
int cr = pcr[i] - 128;
int cb = pcb[i] - 128;
- r = y_fixed + cr* float2fixed(1.40200f);
- g = y_fixed + (cr*-float2fixed(0.71414f)) + ((cb*-float2fixed(0.34414f)) & 0xffff0000);
- b = y_fixed + cb* float2fixed(1.77200f);
+ r = y_fixed + cr* stbi__float2fixed(1.40200f);
+ g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000);
+ b = y_fixed + cb* stbi__float2fixed(1.77200f);
r >>= 20;
g >>= 20;
b >>= 20;
@@ -3136,7 +3346,6 @@ static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc
out += step;
}
}
-#endif
#if defined(STBI_SSE2) || defined(STBI_NEON)
static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step)
@@ -3255,9 +3464,9 @@ static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc cons
int r,g,b;
int cr = pcr[i] - 128;
int cb = pcb[i] - 128;
- r = y_fixed + cr* float2fixed(1.40200f);
- g = y_fixed + cr*-float2fixed(0.71414f) + ((cb*-float2fixed(0.34414f)) & 0xffff0000);
- b = y_fixed + cb* float2fixed(1.77200f);
+ r = y_fixed + cr* stbi__float2fixed(1.40200f);
+ g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000);
+ b = y_fixed + cb* stbi__float2fixed(1.77200f);
r >>= 20;
g >>= 20;
b >>= 20;
@@ -3283,18 +3492,14 @@ static void stbi__setup_jpeg(stbi__jpeg *j)
#ifdef STBI_SSE2
if (stbi__sse2_available()) {
j->idct_block_kernel = stbi__idct_simd;
- #ifndef STBI_JPEG_OLD
j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd;
- #endif
j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd;
}
#endif
#ifdef STBI_NEON
j->idct_block_kernel = stbi__idct_simd;
- #ifndef STBI_JPEG_OLD
j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd;
- #endif
j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd;
#endif
}
@@ -3302,23 +3507,7 @@ static void stbi__setup_jpeg(stbi__jpeg *j)
// clean up the temporary component buffers
static void stbi__cleanup_jpeg(stbi__jpeg *j)
{
- int i;
- for (i=0; i < j->s->img_n; ++i) {
- if (j->img_comp[i].raw_data) {
- STBI_FREE(j->img_comp[i].raw_data);
- j->img_comp[i].raw_data = NULL;
- j->img_comp[i].data = NULL;
- }
- if (j->img_comp[i].raw_coeff) {
- STBI_FREE(j->img_comp[i].raw_coeff);
- j->img_comp[i].raw_coeff = 0;
- j->img_comp[i].coeff = 0;
- }
- if (j->img_comp[i].linebuf) {
- STBI_FREE(j->img_comp[i].linebuf);
- j->img_comp[i].linebuf = NULL;
- }
- }
+ stbi__free_jpeg_components(j, j->s->img_n, 0);
}
typedef struct
@@ -3331,9 +3520,16 @@ typedef struct
int ypos; // which pre-expansion row we're on
} stbi__resample;
+// fast 0..255 * 0..255 => 0..255 rounded multiplication
+static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y)
+{
+ unsigned int t = x*y + 128;
+ return (stbi_uc) ((t + (t >>8)) >> 8);
+}
+
static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp)
{
- int n, decode_n;
+ int n, decode_n, is_rgb;
z->s->img_n = 0; // make stbi__cleanup_jpeg safe
// validate req_comp
@@ -3343,9 +3539,11 @@ static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp
if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; }
// determine actual number of components to generate
- n = req_comp ? req_comp : z->s->img_n;
+ n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1;
+
+ is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif));
- if (z->s->img_n == 3 && n < 3)
+ if (z->s->img_n == 3 && n < 3 && !is_rgb)
decode_n = 1;
else
decode_n = z->s->img_n;
@@ -3382,7 +3580,7 @@ static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp
}
// can't error after this so, this is safe
- output = (stbi_uc *) stbi__malloc(n * z->s->img_x * z->s->img_y + 1);
+ output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1);
if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); }
// now go ahead and resample
@@ -3405,7 +3603,7 @@ static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp
if (n >= 3) {
stbi_uc *y = coutput[0];
if (z->s->img_n == 3) {
- if (z->rgb == 3) {
+ if (is_rgb) {
for (i=0; i < z->s->img_x; ++i) {
out[0] = y[i];
out[1] = coutput[1][i];
@@ -3416,6 +3614,28 @@ static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp
} else {
z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n);
}
+ } else if (z->s->img_n == 4) {
+ if (z->app14_color_transform == 0) { // CMYK
+ for (i=0; i < z->s->img_x; ++i) {
+ stbi_uc k = coutput[3][i];
+ out[0] = stbi__blinn_8x8(coutput[0][i], k);
+ out[1] = stbi__blinn_8x8(coutput[1][i], k);
+ out[2] = stbi__blinn_8x8(coutput[2][i], k);
+ out[3] = 255;
+ out += n;
+ }
+ } else if (z->app14_color_transform == 2) { // YCCK
+ z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n);
+ for (i=0; i < z->s->img_x; ++i) {
+ stbi_uc k = coutput[3][i];
+ out[0] = stbi__blinn_8x8(255 - out[0], k);
+ out[1] = stbi__blinn_8x8(255 - out[1], k);
+ out[2] = stbi__blinn_8x8(255 - out[2], k);
+ out += n;
+ }
+ } else { // YCbCr + alpha? Ignore the fourth channel for now
+ z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n);
+ }
} else
for (i=0; i < z->s->img_x; ++i) {
out[0] = out[1] = out[2] = y[i];
@@ -3423,25 +3643,54 @@ static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp
out += n;
}
} else {
- stbi_uc *y = coutput[0];
- if (n == 1)
- for (i=0; i < z->s->img_x; ++i) out[i] = y[i];
- else
- for (i=0; i < z->s->img_x; ++i) *out++ = y[i], *out++ = 255;
+ if (is_rgb) {
+ if (n == 1)
+ for (i=0; i < z->s->img_x; ++i)
+ *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]);
+ else {
+ for (i=0; i < z->s->img_x; ++i, out += 2) {
+ out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]);
+ out[1] = 255;
+ }
+ }
+ } else if (z->s->img_n == 4 && z->app14_color_transform == 0) {
+ for (i=0; i < z->s->img_x; ++i) {
+ stbi_uc k = coutput[3][i];
+ stbi_uc r = stbi__blinn_8x8(coutput[0][i], k);
+ stbi_uc g = stbi__blinn_8x8(coutput[1][i], k);
+ stbi_uc b = stbi__blinn_8x8(coutput[2][i], k);
+ out[0] = stbi__compute_y(r, g, b);
+ out[1] = 255;
+ out += n;
+ }
+ } else if (z->s->img_n == 4 && z->app14_color_transform == 2) {
+ for (i=0; i < z->s->img_x; ++i) {
+ out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]);
+ out[1] = 255;
+ out += n;
+ }
+ } else {
+ stbi_uc *y = coutput[0];
+ if (n == 1)
+ for (i=0; i < z->s->img_x; ++i) out[i] = y[i];
+ else
+ for (i=0; i < z->s->img_x; ++i) *out++ = y[i], *out++ = 255;
+ }
}
}
stbi__cleanup_jpeg(z);
*out_x = z->s->img_x;
*out_y = z->s->img_y;
- if (comp) *comp = z->s->img_n; // report original components, not output
+ if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output
return output;
}
}
-static unsigned char *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
{
unsigned char* result;
stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg));
+ STBI_NOTUSED(ri);
j->s = s;
stbi__setup_jpeg(j);
result = load_jpeg_image(j, x,y,comp,req_comp);
@@ -3452,11 +3701,12 @@ static unsigned char *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *com
static int stbi__jpeg_test(stbi__context *s)
{
int r;
- stbi__jpeg j;
- j.s = s;
- stbi__setup_jpeg(&j);
- r = stbi__decode_jpeg_header(&j, STBI__SCAN_type);
+ stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg));
+ j->s = s;
+ stbi__setup_jpeg(j);
+ r = stbi__decode_jpeg_header(j, STBI__SCAN_type);
stbi__rewind(s);
+ STBI_FREE(j);
return r;
}
@@ -3468,7 +3718,7 @@ static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp)
}
if (x) *x = j->s->img_x;
if (y) *y = j->s->img_y;
- if (comp) *comp = j->s->img_n;
+ if (comp) *comp = j->s->img_n >= 3 ? 3 : 1;
return 1;
}
@@ -3525,7 +3775,7 @@ stbi_inline static int stbi__bit_reverse(int v, int bits)
return stbi__bitreverse16(v) >> (16-bits);
}
-static int stbi__zbuild_huffman(stbi__zhuffman *z, stbi_uc *sizelist, int num)
+static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num)
{
int i,k=0;
int code, next_code[16], sizes[17];
@@ -3735,6 +3985,7 @@ static int stbi__compute_huffman_codes(stbi__zbuf *a)
int hlit = stbi__zreceive(a,5) + 257;
int hdist = stbi__zreceive(a,5) + 1;
int hclen = stbi__zreceive(a,4) + 4;
+ int ntot = hlit + hdist;
memset(codelength_sizes, 0, sizeof(codelength_sizes));
for (i=0; i < hclen; ++i) {
@@ -3744,27 +3995,29 @@ static int stbi__compute_huffman_codes(stbi__zbuf *a)
if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0;
n = 0;
- while (n < hlit + hdist) {
+ while (n < ntot) {
int c = stbi__zhuffman_decode(a, &z_codelength);
if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG");
if (c < 16)
lencodes[n++] = (stbi_uc) c;
- else if (c == 16) {
- c = stbi__zreceive(a,2)+3;
- memset(lencodes+n, lencodes[n-1], c);
- n += c;
- } else if (c == 17) {
- c = stbi__zreceive(a,3)+3;
- memset(lencodes+n, 0, c);
- n += c;
- } else {
- STBI_ASSERT(c == 18);
- c = stbi__zreceive(a,7)+11;
- memset(lencodes+n, 0, c);
+ else {
+ stbi_uc fill = 0;
+ if (c == 16) {
+ c = stbi__zreceive(a,2)+3;
+ if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG");
+ fill = lencodes[n-1];
+ } else if (c == 17)
+ c = stbi__zreceive(a,3)+3;
+ else {
+ STBI_ASSERT(c == 18);
+ c = stbi__zreceive(a,7)+11;
+ }
+ if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG");
+ memset(lencodes+n, fill, c);
n += c;
}
}
- if (n != hlit+hdist) return stbi__err("bad codelengths","Corrupt PNG");
+ if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG");
if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0;
if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0;
return 1;
@@ -3812,9 +4065,24 @@ static int stbi__parse_zlib_header(stbi__zbuf *a)
return 1;
}
-// @TODO: should statically initialize these for optimal thread safety
-static stbi_uc stbi__zdefault_length[288], stbi__zdefault_distance[32];
-static void stbi__init_zdefaults(void)
+static const stbi_uc stbi__zdefault_length[288] =
+{
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8
+};
+static const stbi_uc stbi__zdefault_distance[32] =
+{
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
+};
+/*
+Init algorithm:
{
int i; // use <= to match clearly with spec
for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8;
@@ -3824,6 +4092,7 @@ static void stbi__init_zdefaults(void)
for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5;
}
+*/
static int stbi__parse_zlib(stbi__zbuf *a, int parse_header)
{
@@ -3842,7 +4111,6 @@ static int stbi__parse_zlib(stbi__zbuf *a, int parse_header)
} else {
if (type == 1) {
// use fixed code lengths
- if (!stbi__zdefault_distance[31]) stbi__init_zdefaults();
if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , 288)) return 0;
if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0;
} else {
@@ -4030,7 +4298,7 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r
int width = x;
STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1);
- a->out = (stbi_uc *) stbi__malloc(x * y * output_bytes); // extra bytes to write off the end into
+ a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into
if (!a->out) return stbi__err("outofmem", "Out of memory");
img_width_bytes = (((img_n * x * depth) + 7) >> 3);
@@ -4043,7 +4311,7 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r
for (j=0; j < y; ++j) {
stbi_uc *cur = a->out + stride*j;
- stbi_uc *prior = cur - stride;
+ stbi_uc *prior;
int filter = *raw++;
if (filter > 4)
@@ -4055,6 +4323,7 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r
filter_bytes = 1;
width = img_width_bytes;
}
+ prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above
// if first row, use special filter that doesn't sample previous row
if (j == 0) filter = first_row_filter[filter];
@@ -4095,37 +4364,37 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r
// this is a little gross, so that we don't switch per-pixel or per-component
if (depth < 8 || img_n == out_n) {
int nk = (width - 1)*filter_bytes;
- #define CASE(f) \
+ #define STBI__CASE(f) \
case f: \
for (k=0; k < nk; ++k)
switch (filter) {
// "none" filter turns into a memcpy here; make that explicit.
case STBI__F_none: memcpy(cur, raw, nk); break;
- CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); break;
- CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;
- CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); break;
- CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); break;
- CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); break;
- CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); break;
+ STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break;
+ STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break;
+ STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break;
+ STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break;
+ STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break;
+ STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break;
}
- #undef CASE
+ #undef STBI__CASE
raw += nk;
} else {
STBI_ASSERT(img_n+1 == out_n);
- #define CASE(f) \
+ #define STBI__CASE(f) \
case f: \
for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \
for (k=0; k < filter_bytes; ++k)
switch (filter) {
- CASE(STBI__F_none) cur[k] = raw[k]; break;
- CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); break;
- CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;
- CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); break;
- CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); break;
- CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); break;
- CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); break;
+ STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break;
+ STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break;
+ STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break;
+ STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break;
+ STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break;
+ STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break;
+ STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break;
}
- #undef CASE
+ #undef STBI__CASE
// the loop above sets the high byte of the pixels' alpha, but for
// 16 bit png files we also need the low byte set. we'll do that here.
@@ -4228,13 +4497,15 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r
static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced)
{
+ int bytes = (depth == 16 ? 2 : 1);
+ int out_bytes = out_n * bytes;
stbi_uc *final;
int p;
if (!interlaced)
return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color);
// de-interlacing
- final = (stbi_uc *) stbi__malloc(a->s->img_x * a->s->img_y * out_n);
+ final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0);
for (p=0; p < 7; ++p) {
int xorig[] = { 0,4,0,2,0,1,0 };
int yorig[] = { 0,0,4,0,2,0,1 };
@@ -4254,8 +4525,8 @@ static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint3
for (i=0; i < x; ++i) {
int out_y = j*yspc[p]+yorig[p];
int out_x = i*xspc[p]+xorig[p];
- memcpy(final + out_y*a->s->img_x*out_n + out_x*out_n,
- a->out + (j*x+i)*out_n, out_n);
+ memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes,
+ a->out + (j*x+i)*out_bytes, out_bytes);
}
}
STBI_FREE(a->out);
@@ -4323,7 +4594,7 @@ static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int
stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y;
stbi_uc *p, *temp_out, *orig = a->out;
- p = (stbi_uc *) stbi__malloc(pixel_count * pal_img_n);
+ p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0);
if (p == NULL) return stbi__err("outofmem", "Out of memory");
// between here and free(out) below, exitting would leak
@@ -4355,26 +4626,6 @@ static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int
return 1;
}
-static int stbi__reduce_png(stbi__png *p)
-{
- int i;
- int img_len = p->s->img_x * p->s->img_y * p->s->img_out_n;
- stbi_uc *reduced;
- stbi__uint16 *orig = (stbi__uint16*)p->out;
-
- if (p->depth != 16) return 1; // don't need to do anything if not 16-bit data
-
- reduced = (stbi_uc *)stbi__malloc(img_len);
- if (p == NULL) return stbi__err("outofmem", "Out of memory");
-
- for (i = 0; i < img_len; ++i) reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is a decent approx of 16->8 bit scaling
-
- p->out = reduced;
- STBI_FREE(orig);
-
- return 1;
-}
-
static int stbi__unpremultiply_on_load = 0;
static int stbi__de_iphone_flag = 0;
@@ -4465,7 +4716,7 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)");
z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only");
color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG");
- if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG");
+ if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG");
if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG");
comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG");
filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG");
@@ -4514,7 +4765,7 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG");
has_trans = 1;
if (z->depth == 16) {
- for (k = 0; k < s->img_n; ++k) tc16[k] = stbi__get16be(s); // copy the values as-is
+ for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is
} else {
for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger
}
@@ -4601,20 +4852,22 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
}
}
-static unsigned char *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp)
+static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri)
{
- unsigned char *result=NULL;
+ void *result=NULL;
if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error");
if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) {
- if (p->depth == 16) {
- if (!stbi__reduce_png(p)) {
- return result;
- }
- }
+ if (p->depth < 8)
+ ri->bits_per_channel = 8;
+ else
+ ri->bits_per_channel = p->depth;
result = p->out;
p->out = NULL;
if (req_comp && req_comp != p->s->img_out_n) {
- result = stbi__convert_format(result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y);
+ if (ri->bits_per_channel == 8)
+ result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y);
+ else
+ result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y);
p->s->img_out_n = req_comp;
if (result == NULL) return result;
}
@@ -4629,11 +4882,11 @@ static unsigned char *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req
return result;
}
-static unsigned char *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
{
stbi__png p;
p.s = s;
- return stbi__do_png(&p, x,y,comp,req_comp);
+ return stbi__do_png(&p, x,y,comp,req_comp, ri);
}
static int stbi__png_test(stbi__context *s)
@@ -4746,7 +4999,7 @@ static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info)
info->offset = stbi__get32le(s);
info->hsz = hsz = stbi__get32le(s);
info->mr = info->mg = info->mb = info->ma = 0;
-
+
if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown");
if (hsz == 12) {
s->img_x = stbi__get16le(s);
@@ -4821,7 +5074,7 @@ static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info)
}
-static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
{
stbi_uc *out;
unsigned int mr=0,mg=0,mb=0,ma=0, all_a;
@@ -4829,8 +5082,9 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int
int psize=0,i,j,width;
int flip_vertically, pad, target;
stbi__bmp_data info;
+ STBI_NOTUSED(ri);
- info.all_a = 255;
+ info.all_a = 255;
if (stbi__bmp_parse_header(s, &info) == NULL)
return NULL; // error code already set
@@ -4857,7 +5111,11 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int
else
target = s->img_n; // if they want monochrome, we'll post-convert
- out = (stbi_uc *) stbi__malloc(target * s->img_x * s->img_y);
+ // sanity-check size
+ if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0))
+ return stbi__errpuc("too large", "Corrupt BMP");
+
+ out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0);
if (!out) return stbi__errpuc("outofmem", "Out of memory");
if (info.bpp < 16) {
int z=0;
@@ -4945,7 +5203,7 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int
stbi__skip(s, pad);
}
}
-
+
// if alpha channel is all 0s, replace with all 255s
if (target == 4 && all_a == 0)
for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4)
@@ -5091,18 +5349,18 @@ errorEnd:
}
// read 16bit value and convert to 24bit RGB
-void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out)
+static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out)
{
- stbi__uint16 px = stbi__get16le(s);
+ stbi__uint16 px = (stbi__uint16)stbi__get16le(s);
stbi__uint16 fiveBitMask = 31;
// we have 3 channels with 5bits each
int r = (px >> 10) & fiveBitMask;
int g = (px >> 5) & fiveBitMask;
int b = px & fiveBitMask;
// Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later
- out[0] = (r * 255)/31;
- out[1] = (g * 255)/31;
- out[2] = (b * 255)/31;
+ out[0] = (stbi_uc)((r * 255)/31);
+ out[1] = (stbi_uc)((g * 255)/31);
+ out[2] = (stbi_uc)((b * 255)/31);
// some people claim that the most significant bit might be used for alpha
// (possibly if an alpha-bit is set in the "image descriptor byte")
@@ -5110,7 +5368,7 @@ void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out)
// so let's treat all 15 and 16bit TGAs as RGB with no alpha.
}
-static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
{
// read in the TGA header stuff
int tga_offset = stbi__get8(s);
@@ -5132,10 +5390,11 @@ static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int
unsigned char *tga_data;
unsigned char *tga_palette = NULL;
int i, j;
- unsigned char raw_data[4];
+ unsigned char raw_data[4] = {0};
int RLE_count = 0;
int RLE_repeating = 0;
int read_next_pixel = 1;
+ STBI_NOTUSED(ri);
// do a tiny bit of precessing
if ( tga_image_type >= 8 )
@@ -5157,7 +5416,10 @@ static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int
*y = tga_height;
if (comp) *comp = tga_comp;
- tga_data = (unsigned char*)stbi__malloc( (size_t)tga_width * tga_height * tga_comp );
+ if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0))
+ return stbi__errpuc("too large", "Corrupt TGA");
+
+ tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0);
if (!tga_data) return stbi__errpuc("outofmem", "Out of memory");
// skip to the data's starting position (offset usually = 0)
@@ -5176,7 +5438,7 @@ static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int
// any data to skip? (offset usually = 0)
stbi__skip(s, tga_palette_start );
// load the palette
- tga_palette = (unsigned char*)stbi__malloc( tga_palette_len * tga_comp );
+ tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0);
if (!tga_palette) {
STBI_FREE(tga_data);
return stbi__errpuc("outofmem", "Out of memory");
@@ -5312,14 +5574,53 @@ static int stbi__psd_test(stbi__context *s)
return r;
}
-static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount)
{
- int pixelCount;
+ int count, nleft, len;
+
+ count = 0;
+ while ((nleft = pixelCount - count) > 0) {
+ len = stbi__get8(s);
+ if (len == 128) {
+ // No-op.
+ } else if (len < 128) {
+ // Copy next len+1 bytes literally.
+ len++;
+ if (len > nleft) return 0; // corrupt data
+ count += len;
+ while (len) {
+ *p = stbi__get8(s);
+ p += 4;
+ len--;
+ }
+ } else if (len > 128) {
+ stbi_uc val;
+ // Next -len+1 bytes in the dest are replicated from next source byte.
+ // (Interpret len as a negative 8-bit int.)
+ len = 257 - len;
+ if (len > nleft) return 0; // corrupt data
+ val = stbi__get8(s);
+ count += len;
+ while (len) {
+ *p = val;
+ p += 4;
+ len--;
+ }
+ }
+ }
+
+ return 1;
+}
+
+static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc)
+{
+ int pixelCount;
int channelCount, compression;
- int channel, i, count, len;
+ int channel, i;
int bitdepth;
int w,h;
stbi_uc *out;
+ STBI_NOTUSED(ri);
// Check identifier
if (stbi__get32be(s) != 0x38425053) // "8BPS"
@@ -5376,8 +5677,18 @@ static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int
if (compression > 1)
return stbi__errpuc("bad compression", "PSD has an unknown compression format");
+ // Check size
+ if (!stbi__mad3sizes_valid(4, w, h, 0))
+ return stbi__errpuc("too large", "Corrupt PSD");
+
// Create the destination image.
- out = (stbi_uc *) stbi__malloc(4 * w*h);
+
+ if (!compression && bitdepth == 16 && bpc == 16) {
+ out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0);
+ ri->bits_per_channel = 16;
+ } else
+ out = (stbi_uc *) stbi__malloc(4 * w*h);
+
if (!out) return stbi__errpuc("outofmem", "Out of memory");
pixelCount = w*h;
@@ -5409,82 +5720,86 @@ static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int
*p = (channel == 3 ? 255 : 0);
} else {
// Read the RLE data.
- count = 0;
- while (count < pixelCount) {
- len = stbi__get8(s);
- if (len == 128) {
- // No-op.
- } else if (len < 128) {
- // Copy next len+1 bytes literally.
- len++;
- count += len;
- while (len) {
- *p = stbi__get8(s);
- p += 4;
- len--;
- }
- } else if (len > 128) {
- stbi_uc val;
- // Next -len+1 bytes in the dest are replicated from next source byte.
- // (Interpret len as a negative 8-bit int.)
- len ^= 0x0FF;
- len += 2;
- val = stbi__get8(s);
- count += len;
- while (len) {
- *p = val;
- p += 4;
- len--;
- }
- }
+ if (!stbi__psd_decode_rle(s, p, pixelCount)) {
+ STBI_FREE(out);
+ return stbi__errpuc("corrupt", "bad RLE data");
}
}
}
} else {
// We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...)
- // where each channel consists of an 8-bit value for each pixel in the image.
+ // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image.
// Read the data by channel.
for (channel = 0; channel < 4; channel++) {
- stbi_uc *p;
-
- p = out + channel;
if (channel >= channelCount) {
// Fill this channel with default data.
- stbi_uc val = channel == 3 ? 255 : 0;
- for (i = 0; i < pixelCount; i++, p += 4)
- *p = val;
- } else {
- // Read the data.
- if (bitdepth == 16) {
- for (i = 0; i < pixelCount; i++, p += 4)
- *p = (stbi_uc) (stbi__get16be(s) >> 8);
+ if (bitdepth == 16 && bpc == 16) {
+ stbi__uint16 *q = ((stbi__uint16 *) out) + channel;
+ stbi__uint16 val = channel == 3 ? 65535 : 0;
+ for (i = 0; i < pixelCount; i++, q += 4)
+ *q = val;
} else {
+ stbi_uc *p = out+channel;
+ stbi_uc val = channel == 3 ? 255 : 0;
for (i = 0; i < pixelCount; i++, p += 4)
- *p = stbi__get8(s);
+ *p = val;
+ }
+ } else {
+ if (ri->bits_per_channel == 16) { // output bpc
+ stbi__uint16 *q = ((stbi__uint16 *) out) + channel;
+ for (i = 0; i < pixelCount; i++, q += 4)
+ *q = (stbi__uint16) stbi__get16be(s);
+ } else {
+ stbi_uc *p = out+channel;
+ if (bitdepth == 16) { // input bpc
+ for (i = 0; i < pixelCount; i++, p += 4)
+ *p = (stbi_uc) (stbi__get16be(s) >> 8);
+ } else {
+ for (i = 0; i < pixelCount; i++, p += 4)
+ *p = stbi__get8(s);
+ }
}
}
}
}
+ // remove weird white matte from PSD
if (channelCount >= 4) {
- for (i=0; i < w*h; ++i) {
- unsigned char *pixel = out + 4*i;
- if (pixel[3] != 0 && pixel[3] != 255) {
- // remove weird white matte from PSD
- float a = pixel[3] / 255.0f;
- float ra = 1.0f / a;
- float inv_a = 255.0f * (1 - ra);
- pixel[0] = (unsigned char) (pixel[0]*ra + inv_a);
- pixel[1] = (unsigned char) (pixel[1]*ra + inv_a);
- pixel[2] = (unsigned char) (pixel[2]*ra + inv_a);
+ if (ri->bits_per_channel == 16) {
+ for (i=0; i < w*h; ++i) {
+ stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i;
+ if (pixel[3] != 0 && pixel[3] != 65535) {
+ float a = pixel[3] / 65535.0f;
+ float ra = 1.0f / a;
+ float inv_a = 65535.0f * (1 - ra);
+ pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a);
+ pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a);
+ pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a);
+ }
+ }
+ } else {
+ for (i=0; i < w*h; ++i) {
+ unsigned char *pixel = out + 4*i;
+ if (pixel[3] != 0 && pixel[3] != 255) {
+ float a = pixel[3] / 255.0f;
+ float ra = 1.0f / a;
+ float inv_a = 255.0f * (1 - ra);
+ pixel[0] = (unsigned char) (pixel[0]*ra + inv_a);
+ pixel[1] = (unsigned char) (pixel[1]*ra + inv_a);
+ pixel[2] = (unsigned char) (pixel[2]*ra + inv_a);
+ }
}
}
}
+ // convert to desired output format
if (req_comp && req_comp != 4) {
- out = stbi__convert_format(out, 4, req_comp, w, h);
+ if (ri->bits_per_channel == 16)
+ out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h);
+ else
+ out = stbi__convert_format(out, 4, req_comp, w, h);
if (out == NULL) return out; // stbi__convert_format frees input on failure
}
@@ -5668,10 +5983,13 @@ static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *c
return result;
}
-static stbi_uc *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp)
+static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri)
{
stbi_uc *result;
- int i, x,y;
+ int i, x,y, internal_comp;
+ STBI_NOTUSED(ri);
+
+ if (!comp) comp = &internal_comp;
for (i=0; i<92; ++i)
stbi__get8(s);
@@ -5679,14 +5997,14 @@ static stbi_uc *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int re
x = stbi__get16be(s);
y = stbi__get16be(s);
if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)");
- if ((1 << 28) / x < y) return stbi__errpuc("too large", "Image too large to decode");
+ if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode");
stbi__get32be(s); //skip `ratio'
stbi__get16be(s); //skip `fields'
stbi__get16be(s); //skip `pad'
// intermediate buffer is RGBA
- result = (stbi_uc *) stbi__malloc(x*y*4);
+ result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0);
memset(result, 0xff, x*y*4);
if (!stbi__pic_load_core(s,x,y,comp, result)) {
@@ -5945,8 +6263,11 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i
if (g->out == 0 && !stbi__gif_header(s, g, comp,0))
return 0; // stbi__g_failure_reason set by stbi__gif_header
+ if (!stbi__mad3sizes_valid(g->w, g->h, 4, 0))
+ return stbi__errpuc("too large", "GIF too large");
+
prev_out = g->out;
- g->out = (stbi_uc *) stbi__malloc(4 * g->w * g->h);
+ g->out = (stbi_uc *) stbi__malloc_mad3(4, g->w, g->h, 0);
if (g->out == 0) return stbi__errpuc("outofmem", "Out of memory");
switch ((g->eflags & 0x1C) >> 2) {
@@ -6053,11 +6374,12 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i
STBI_NOTUSED(req_comp);
}
-static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
{
stbi_uc *u = 0;
stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif));
memset(g, 0, sizeof(*g));
+ STBI_NOTUSED(ri);
u = stbi__gif_load_next(s, g, comp, req_comp);
if (u == (stbi_uc *) s) u = 0; // end of animated gif marker
@@ -6083,20 +6405,24 @@ static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp)
// Radiance RGBE HDR loader
// originally by Nicolas Schulz
#ifndef STBI_NO_HDR
-static int stbi__hdr_test_core(stbi__context *s)
+static int stbi__hdr_test_core(stbi__context *s, const char *signature)
{
- const char *signature = "#?RADIANCE\n";
int i;
for (i=0; signature[i]; ++i)
if (stbi__get8(s) != signature[i])
- return 0;
+ return 0;
+ stbi__rewind(s);
return 1;
}
static int stbi__hdr_test(stbi__context* s)
{
- int r = stbi__hdr_test_core(s);
+ int r = stbi__hdr_test_core(s, "#?RADIANCE\n");
stbi__rewind(s);
+ if(!r) {
+ r = stbi__hdr_test_core(s, "#?RGBE\n");
+ stbi__rewind(s);
+ }
return r;
}
@@ -6150,7 +6476,7 @@ static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp)
}
}
-static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
{
char buffer[STBI__HDR_BUFLEN];
char *token;
@@ -6161,10 +6487,12 @@ static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int re
int len;
unsigned char count, value;
int i, j, k, c1,c2, z;
-
+ const char *headerToken;
+ STBI_NOTUSED(ri);
// Check identifier
- if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0)
+ headerToken = stbi__hdr_gettoken(s,buffer);
+ if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0)
return stbi__errpf("not HDR", "Corrupt HDR image");
// Parse header
@@ -6193,8 +6521,13 @@ static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int re
if (comp) *comp = 3;
if (req_comp == 0) req_comp = 3;
+ if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0))
+ return stbi__errpf("too large", "HDR image is too large");
+
// Read data
- hdr_data = (float *) stbi__malloc(height * width * req_comp * sizeof(float));
+ hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0);
+ if (!hdr_data)
+ return stbi__errpf("outofmem", "Out of memory");
// Load image data
// image data is stored as some number of sca
@@ -6233,20 +6566,29 @@ static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int re
len <<= 8;
len |= stbi__get8(s);
if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); }
- if (scanline == NULL) scanline = (stbi_uc *) stbi__malloc(width * 4);
+ if (scanline == NULL) {
+ scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0);
+ if (!scanline) {
+ STBI_FREE(hdr_data);
+ return stbi__errpf("outofmem", "Out of memory");
+ }
+ }
for (k = 0; k < 4; ++k) {
+ int nleft;
i = 0;
- while (i < width) {
+ while ((nleft = width - i) > 0) {
count = stbi__get8(s);
if (count > 128) {
// Run
value = stbi__get8(s);
count -= 128;
+ if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); }
for (z = 0; z < count; ++z)
scanline[i++ * 4 + k] = value;
} else {
// Dump
+ if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); }
for (z = 0; z < count; ++z)
scanline[i++ * 4 + k] = stbi__get8(s);
}
@@ -6255,7 +6597,8 @@ static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int re
for (i=0; i < width; ++i)
stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp);
}
- STBI_FREE(scanline);
+ if (scanline)
+ STBI_FREE(scanline);
}
return hdr_data;
@@ -6266,6 +6609,11 @@ static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp)
char buffer[STBI__HDR_BUFLEN];
char *token;
int valid = 0;
+ int dummy;
+
+ if (!x) x = &dummy;
+ if (!y) y = &dummy;
+ if (!comp) comp = &dummy;
if (stbi__hdr_test(s) == 0) {
stbi__rewind( s );
@@ -6307,14 +6655,14 @@ static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp)
void *p;
stbi__bmp_data info;
- info.all_a = 255;
+ info.all_a = 255;
p = stbi__bmp_parse_header(s, &info);
stbi__rewind( s );
if (p == NULL)
return 0;
- *x = s->img_x;
- *y = s->img_y;
- *comp = info.ma ? 4 : 3;
+ if (x) *x = s->img_x;
+ if (y) *y = s->img_y;
+ if (comp) *comp = info.ma ? 4 : 3;
return 1;
}
#endif
@@ -6322,7 +6670,10 @@ static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp)
#ifndef STBI_NO_PSD
static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp)
{
- int channelCount;
+ int channelCount, dummy;
+ if (!x) x = &dummy;
+ if (!y) y = &dummy;
+ if (!comp) comp = &dummy;
if (stbi__get32be(s) != 0x38425053) {
stbi__rewind( s );
return 0;
@@ -6355,9 +6706,13 @@ static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp)
#ifndef STBI_NO_PIC
static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp)
{
- int act_comp=0,num_packets=0,chained;
+ int act_comp=0,num_packets=0,chained,dummy;
stbi__pic_packet packets[10];
+ if (!x) x = &dummy;
+ if (!y) y = &dummy;
+ if (!comp) comp = &dummy;
+
if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) {
stbi__rewind(s);
return 0;
@@ -6433,16 +6788,22 @@ static int stbi__pnm_test(stbi__context *s)
return 1;
}
-static stbi_uc *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
{
stbi_uc *out;
+ STBI_NOTUSED(ri);
+
if (!stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n))
return 0;
+
*x = s->img_x;
*y = s->img_y;
- *comp = s->img_n;
+ if (comp) *comp = s->img_n;
+
+ if (!stbi__mad3sizes_valid(s->img_n, s->img_x, s->img_y, 0))
+ return stbi__errpuc("too large", "PNM too large");
- out = (stbi_uc *) stbi__malloc(s->img_n * s->img_x * s->img_y);
+ out = (stbi_uc *) stbi__malloc_mad3(s->img_n, s->img_x, s->img_y, 0);
if (!out) return stbi__errpuc("outofmem", "Out of memory");
stbi__getn(s, out, s->img_n * s->img_x * s->img_y);
@@ -6491,16 +6852,20 @@ static int stbi__pnm_getinteger(stbi__context *s, char *c)
static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp)
{
- int maxv;
+ int maxv, dummy;
char c, p, t;
- stbi__rewind( s );
+ if (!x) x = &dummy;
+ if (!y) y = &dummy;
+ if (!comp) comp = &dummy;
+
+ stbi__rewind(s);
// Get identifier
p = (char) stbi__get8(s);
t = (char) stbi__get8(s);
if (p != 'P' || (t != '5' && t != '6')) {
- stbi__rewind( s );
+ stbi__rewind(s);
return 0;
}
@@ -6607,6 +6972,12 @@ STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int
/*
revision history:
+ 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode;
+ warning fixes; disable run-time SSE detection on gcc;
+ uniform handling of optional "return" values;
+ thread-safe initialization of zlib tables
+ 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs
+ 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now
2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes
2.11 (2016-04-02) allocate large structures on the stack
remove white matting for transparent PSD
@@ -6767,3 +7138,46 @@ STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int
0.50 (2006-11-19)
first released version
*/
+
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
+software, either in source code form or as a compiled binary, for any purpose,
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
diff --git a/3rdparty/bimg/3rdparty/stb/stb_image_resize.h b/3rdparty/bimg/3rdparty/stb/stb_image_resize.h
new file mode 100644
index 00000000000..b507e0498a4
--- /dev/null
+++ b/3rdparty/bimg/3rdparty/stb/stb_image_resize.h
@@ -0,0 +1,2624 @@
+/* stb_image_resize - v0.94 - public domain image resizing
+ by Jorge L Rodriguez (@VinoBS) - 2014
+ http://github.com/nothings/stb
+
+ Written with emphasis on usability, portability, and efficiency. (No
+ SIMD or threads, so it be easily outperformed by libs that use those.)
+ Only scaling and translation is supported, no rotations or shears.
+ Easy API downsamples w/Mitchell filter, upsamples w/cubic interpolation.
+
+ COMPILING & LINKING
+ In one C/C++ file that #includes this file, do this:
+ #define STB_IMAGE_RESIZE_IMPLEMENTATION
+ before the #include. That will create the implementation in that file.
+
+ QUICKSTART
+ stbir_resize_uint8( input_pixels , in_w , in_h , 0,
+ output_pixels, out_w, out_h, 0, num_channels)
+ stbir_resize_float(...)
+ stbir_resize_uint8_srgb( input_pixels , in_w , in_h , 0,
+ output_pixels, out_w, out_h, 0,
+ num_channels , alpha_chan , 0)
+ stbir_resize_uint8_srgb_edgemode(
+ input_pixels , in_w , in_h , 0,
+ output_pixels, out_w, out_h, 0,
+ num_channels , alpha_chan , 0, STBIR_EDGE_CLAMP)
+ // WRAP/REFLECT/ZERO
+
+ FULL API
+ See the "header file" section of the source for API documentation.
+
+ ADDITIONAL DOCUMENTATION
+
+ SRGB & FLOATING POINT REPRESENTATION
+ The sRGB functions presume IEEE floating point. If you do not have
+ IEEE floating point, define STBIR_NON_IEEE_FLOAT. This will use
+ a slower implementation.
+
+ MEMORY ALLOCATION
+ The resize functions here perform a single memory allocation using
+ malloc. To control the memory allocation, before the #include that
+ triggers the implementation, do:
+
+ #define STBIR_MALLOC(size,context) ...
+ #define STBIR_FREE(ptr,context) ...
+
+ Each resize function makes exactly one call to malloc/free, so to use
+ temp memory, store the temp memory in the context and return that.
+
+ ASSERT
+ Define STBIR_ASSERT(boolval) to override assert() and not use assert.h
+
+ OPTIMIZATION
+ Define STBIR_SATURATE_INT to compute clamp values in-range using
+ integer operations instead of float operations. This may be faster
+ on some platforms.
+
+ DEFAULT FILTERS
+ For functions which don't provide explicit control over what filters
+ to use, you can change the compile-time defaults with
+
+ #define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_something
+ #define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_something
+
+ See stbir_filter in the header-file section for the list of filters.
+
+ NEW FILTERS
+ A number of 1D filter kernels are used. For a list of
+ supported filters see the stbir_filter enum. To add a new filter,
+ write a filter function and add it to stbir__filter_info_table.
+
+ PROGRESS
+ For interactive use with slow resize operations, you can install
+ a progress-report callback:
+
+ #define STBIR_PROGRESS_REPORT(val) some_func(val)
+
+ The parameter val is a float which goes from 0 to 1 as progress is made.
+
+ For example:
+
+ static void my_progress_report(float progress);
+ #define STBIR_PROGRESS_REPORT(val) my_progress_report(val)
+
+ #define STB_IMAGE_RESIZE_IMPLEMENTATION
+ #include "stb_image_resize.h"
+
+ static void my_progress_report(float progress)
+ {
+ printf("Progress: %f%%\n", progress*100);
+ }
+
+ MAX CHANNELS
+ If your image has more than 64 channels, define STBIR_MAX_CHANNELS
+ to the max you'll have.
+
+ ALPHA CHANNEL
+ Most of the resizing functions provide the ability to control how
+ the alpha channel of an image is processed. The important things
+ to know about this:
+
+ 1. The best mathematically-behaved version of alpha to use is
+ called "premultiplied alpha", in which the other color channels
+ have had the alpha value multiplied in. If you use premultiplied
+ alpha, linear filtering (such as image resampling done by this
+ library, or performed in texture units on GPUs) does the "right
+ thing". While premultiplied alpha is standard in the movie CGI
+ industry, it is still uncommon in the videogame/real-time world.
+
+ If you linearly filter non-premultiplied alpha, strange effects
+ occur. (For example, the 50/50 average of 99% transparent bright green
+ and 1% transparent black produces 50% transparent dark green when
+ non-premultiplied, whereas premultiplied it produces 50%
+ transparent near-black. The former introduces green energy
+ that doesn't exist in the source image.)
+
+ 2. Artists should not edit premultiplied-alpha images; artists
+ want non-premultiplied alpha images. Thus, art tools generally output
+ non-premultiplied alpha images.
+
+ 3. You will get best results in most cases by converting images
+ to premultiplied alpha before processing them mathematically.
+
+ 4. If you pass the flag STBIR_FLAG_ALPHA_PREMULTIPLIED, the
+ resizer does not do anything special for the alpha channel;
+ it is resampled identically to other channels. This produces
+ the correct results for premultiplied-alpha images, but produces
+ less-than-ideal results for non-premultiplied-alpha images.
+
+ 5. If you do not pass the flag STBIR_FLAG_ALPHA_PREMULTIPLIED,
+ then the resizer weights the contribution of input pixels
+ based on their alpha values, or, equivalently, it multiplies
+ the alpha value into the color channels, resamples, then divides
+ by the resultant alpha value. Input pixels which have alpha=0 do
+ not contribute at all to output pixels unless _all_ of the input
+ pixels affecting that output pixel have alpha=0, in which case
+ the result for that pixel is the same as it would be without
+ STBIR_FLAG_ALPHA_PREMULTIPLIED. However, this is only true for
+ input images in integer formats. For input images in float format,
+ input pixels with alpha=0 have no effect, and output pixels
+ which have alpha=0 will be 0 in all channels. (For float images,
+ you can manually achieve the same result by adding a tiny epsilon
+ value to the alpha channel of every image, and then subtracting
+ or clamping it at the end.)
+
+ 6. You can suppress the behavior described in #5 and make
+ all-0-alpha pixels have 0 in all channels by #defining
+ STBIR_NO_ALPHA_EPSILON.
+
+ 7. You can separately control whether the alpha channel is
+ interpreted as linear or affected by the colorspace. By default
+ it is linear; you almost never want to apply the colorspace.
+ (For example, graphics hardware does not apply sRGB conversion
+ to the alpha channel.)
+
+ CONTRIBUTORS
+ Jorge L Rodriguez: Implementation
+ Sean Barrett: API design, optimizations
+ Aras Pranckevicius: bugfix
+
+ REVISIONS
+ 0.94 (2017-03-18) fixed warnings
+ 0.93 (2017-03-03) fixed bug with certain combinations of heights
+ 0.92 (2017-01-02) fix integer overflow on large (>2GB) images
+ 0.91 (2016-04-02) fix warnings; fix handling of subpixel regions
+ 0.90 (2014-09-17) first released version
+
+ LICENSE
+ See end of file for license information.
+
+ TODO
+ Don't decode all of the image data when only processing a partial tile
+ Don't use full-width decode buffers when only processing a partial tile
+ When processing wide images, break processing into tiles so data fits in L1 cache
+ Installable filters?
+ Resize that respects alpha test coverage
+ (Reference code: FloatImage::alphaTestCoverage and FloatImage::scaleAlphaToCoverage:
+ https://code.google.com/p/nvidia-texture-tools/source/browse/trunk/src/nvimage/FloatImage.cpp )
+*/
+
+#ifndef STBIR_INCLUDE_STB_IMAGE_RESIZE_H
+#define STBIR_INCLUDE_STB_IMAGE_RESIZE_H
+
+#ifdef _MSC_VER
+typedef unsigned char stbir_uint8;
+typedef unsigned short stbir_uint16;
+typedef unsigned int stbir_uint32;
+#else
+#include <stdint.h>
+typedef uint8_t stbir_uint8;
+typedef uint16_t stbir_uint16;
+typedef uint32_t stbir_uint32;
+#endif
+
+#ifdef STB_IMAGE_RESIZE_STATIC
+#define STBIRDEF static
+#else
+#ifdef __cplusplus
+#define STBIRDEF extern "C"
+#else
+#define STBIRDEF extern
+#endif
+#endif
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Easy-to-use API:
+//
+// * "input pixels" points to an array of image data with 'num_channels' channels (e.g. RGB=3, RGBA=4)
+// * input_w is input image width (x-axis), input_h is input image height (y-axis)
+// * stride is the offset between successive rows of image data in memory, in bytes. you can
+// specify 0 to mean packed continuously in memory
+// * alpha channel is treated identically to other channels.
+// * colorspace is linear or sRGB as specified by function name
+// * returned result is 1 for success or 0 in case of an error.
+// #define STBIR_ASSERT() to trigger an assert on parameter validation errors.
+// * Memory required grows approximately linearly with input and output size, but with
+// discontinuities at input_w == output_w and input_h == output_h.
+// * These functions use a "default" resampling filter defined at compile time. To change the filter,
+// you can change the compile-time defaults by #defining STBIR_DEFAULT_FILTER_UPSAMPLE
+// and STBIR_DEFAULT_FILTER_DOWNSAMPLE, or you can use the medium-complexity API.
+
+STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels);
+
+STBIRDEF int stbir_resize_float( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ float *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels);
+
+
+// The following functions interpret image data as gamma-corrected sRGB.
+// Specify STBIR_ALPHA_CHANNEL_NONE if you have no alpha channel,
+// or otherwise provide the index of the alpha channel. Flags value
+// of 0 will probably do the right thing if you're not sure what
+// the flags mean.
+
+#define STBIR_ALPHA_CHANNEL_NONE -1
+
+// Set this flag if your texture has premultiplied alpha. Otherwise, stbir will
+// use alpha-weighted resampling (effectively premultiplying, resampling,
+// then unpremultiplying).
+#define STBIR_FLAG_ALPHA_PREMULTIPLIED (1 << 0)
+// The specified alpha channel should be handled as gamma-corrected value even
+// when doing sRGB operations.
+#define STBIR_FLAG_ALPHA_USES_COLORSPACE (1 << 1)
+
+STBIRDEF int stbir_resize_uint8_srgb(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags);
+
+
+typedef enum
+{
+ STBIR_EDGE_CLAMP = 1,
+ STBIR_EDGE_REFLECT = 2,
+ STBIR_EDGE_WRAP = 3,
+ STBIR_EDGE_ZERO = 4,
+} stbir_edge;
+
+// This function adds the ability to specify how requests to sample off the edge of the image are handled.
+STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_wrap_mode);
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Medium-complexity API
+//
+// This extends the easy-to-use API as follows:
+//
+// * Alpha-channel can be processed separately
+// * If alpha_channel is not STBIR_ALPHA_CHANNEL_NONE
+// * Alpha channel will not be gamma corrected (unless flags&STBIR_FLAG_GAMMA_CORRECT)
+// * Filters will be weighted by alpha channel (unless flags&STBIR_FLAG_ALPHA_PREMULTIPLIED)
+// * Filter can be selected explicitly
+// * uint16 image type
+// * sRGB colorspace available for all types
+// * context parameter for passing to STBIR_MALLOC
+
+typedef enum
+{
+ STBIR_FILTER_DEFAULT = 0, // use same filter type that easy-to-use API chooses
+ STBIR_FILTER_BOX = 1, // A trapezoid w/1-pixel wide ramps, same result as box for integer scale ratios
+ STBIR_FILTER_TRIANGLE = 2, // On upsampling, produces same results as bilinear texture filtering
+ STBIR_FILTER_CUBICBSPLINE = 3, // The cubic b-spline (aka Mitchell-Netrevalli with B=1,C=0), gaussian-esque
+ STBIR_FILTER_CATMULLROM = 4, // An interpolating cubic spline
+ STBIR_FILTER_MITCHELL = 5, // Mitchell-Netrevalli filter with B=1/3, C=1/3
+} stbir_filter;
+
+typedef enum
+{
+ STBIR_COLORSPACE_LINEAR,
+ STBIR_COLORSPACE_SRGB,
+
+ STBIR_MAX_COLORSPACES,
+} stbir_colorspace;
+
+// The following functions are all identical except for the type of the image data
+
+STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
+ void *alloc_context);
+
+STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
+ void *alloc_context);
+
+STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ float *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
+ void *alloc_context);
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Full-complexity API
+//
+// This extends the medium API as follows:
+//
+// * uint32 image type
+// * not typesafe
+// * separate filter types for each axis
+// * separate edge modes for each axis
+// * can specify scale explicitly for subpixel correctness
+// * can specify image source tile using texture coordinates
+
+typedef enum
+{
+ STBIR_TYPE_UINT8 ,
+ STBIR_TYPE_UINT16,
+ STBIR_TYPE_UINT32,
+ STBIR_TYPE_FLOAT ,
+
+ STBIR_MAX_TYPES
+} stbir_datatype;
+
+STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ stbir_datatype datatype,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
+ stbir_filter filter_horizontal, stbir_filter filter_vertical,
+ stbir_colorspace space, void *alloc_context);
+
+STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ stbir_datatype datatype,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
+ stbir_filter filter_horizontal, stbir_filter filter_vertical,
+ stbir_colorspace space, void *alloc_context,
+ float x_scale, float y_scale,
+ float x_offset, float y_offset);
+
+STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ stbir_datatype datatype,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
+ stbir_filter filter_horizontal, stbir_filter filter_vertical,
+ stbir_colorspace space, void *alloc_context,
+ float s0, float t0, float s1, float t1);
+// (s0, t0) & (s1, t1) are the top-left and bottom right corner (uv addressing style: [0, 1]x[0, 1]) of a region of the input image to use.
+
+//
+//
+//// end header file /////////////////////////////////////////////////////
+#endif // STBIR_INCLUDE_STB_IMAGE_RESIZE_H
+
+
+
+
+
+#ifdef STB_IMAGE_RESIZE_IMPLEMENTATION
+
+#ifndef STBIR_ASSERT
+#include <assert.h>
+#define STBIR_ASSERT(x) assert(x)
+#endif
+
+// For memset
+#include <string.h>
+
+#include <math.h>
+
+#ifndef STBIR_MALLOC
+#include <stdlib.h>
+#define STBIR_MALLOC(size,c) malloc(size)
+#define STBIR_FREE(ptr,c) free(ptr)
+#endif
+
+#ifndef _MSC_VER
+#ifdef __cplusplus
+#define stbir__inline inline
+#else
+#define stbir__inline
+#endif
+#else
+#define stbir__inline __forceinline
+#endif
+
+
+// should produce compiler error if size is wrong
+typedef unsigned char stbir__validate_uint32[sizeof(stbir_uint32) == 4 ? 1 : -1];
+
+#ifdef _MSC_VER
+#define STBIR__NOTUSED(v) (void)(v)
+#else
+#define STBIR__NOTUSED(v) (void)sizeof(v)
+#endif
+
+#define STBIR__ARRAY_SIZE(a) (sizeof((a))/sizeof((a)[0]))
+
+#ifndef STBIR_DEFAULT_FILTER_UPSAMPLE
+#define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_CATMULLROM
+#endif
+
+#ifndef STBIR_DEFAULT_FILTER_DOWNSAMPLE
+#define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_MITCHELL
+#endif
+
+#ifndef STBIR_PROGRESS_REPORT
+#define STBIR_PROGRESS_REPORT(float_0_to_1)
+#endif
+
+#ifndef STBIR_MAX_CHANNELS
+#define STBIR_MAX_CHANNELS 64
+#endif
+
+#if STBIR_MAX_CHANNELS > 65536
+#error "Too many channels; STBIR_MAX_CHANNELS must be no more than 65536."
+// because we store the indices in 16-bit variables
+#endif
+
+// This value is added to alpha just before premultiplication to avoid
+// zeroing out color values. It is equivalent to 2^-80. If you don't want
+// that behavior (it may interfere if you have floating point images with
+// very small alpha values) then you can define STBIR_NO_ALPHA_EPSILON to
+// disable it.
+#ifndef STBIR_ALPHA_EPSILON
+#define STBIR_ALPHA_EPSILON ((float)1 / (1 << 20) / (1 << 20) / (1 << 20) / (1 << 20))
+#endif
+
+
+
+#ifdef _MSC_VER
+#define STBIR__UNUSED_PARAM(v) (void)(v)
+#else
+#define STBIR__UNUSED_PARAM(v) (void)sizeof(v)
+#endif
+
+// must match stbir_datatype
+static unsigned char stbir__type_size[] = {
+ 1, // STBIR_TYPE_UINT8
+ 2, // STBIR_TYPE_UINT16
+ 4, // STBIR_TYPE_UINT32
+ 4, // STBIR_TYPE_FLOAT
+};
+
+// Kernel function centered at 0
+typedef float (stbir__kernel_fn)(float x, float scale);
+typedef float (stbir__support_fn)(float scale);
+
+typedef struct
+{
+ stbir__kernel_fn* kernel;
+ stbir__support_fn* support;
+} stbir__filter_info;
+
+// When upsampling, the contributors are which source pixels contribute.
+// When downsampling, the contributors are which destination pixels are contributed to.
+typedef struct
+{
+ int n0; // First contributing pixel
+ int n1; // Last contributing pixel
+} stbir__contributors;
+
+typedef struct
+{
+ const void* input_data;
+ int input_w;
+ int input_h;
+ int input_stride_bytes;
+
+ void* output_data;
+ int output_w;
+ int output_h;
+ int output_stride_bytes;
+
+ float s0, t0, s1, t1;
+
+ float horizontal_shift; // Units: output pixels
+ float vertical_shift; // Units: output pixels
+ float horizontal_scale;
+ float vertical_scale;
+
+ int channels;
+ int alpha_channel;
+ stbir_uint32 flags;
+ stbir_datatype type;
+ stbir_filter horizontal_filter;
+ stbir_filter vertical_filter;
+ stbir_edge edge_horizontal;
+ stbir_edge edge_vertical;
+ stbir_colorspace colorspace;
+
+ stbir__contributors* horizontal_contributors;
+ float* horizontal_coefficients;
+
+ stbir__contributors* vertical_contributors;
+ float* vertical_coefficients;
+
+ int decode_buffer_pixels;
+ float* decode_buffer;
+
+ float* horizontal_buffer;
+
+ // cache these because ceil/floor are inexplicably showing up in profile
+ int horizontal_coefficient_width;
+ int vertical_coefficient_width;
+ int horizontal_filter_pixel_width;
+ int vertical_filter_pixel_width;
+ int horizontal_filter_pixel_margin;
+ int vertical_filter_pixel_margin;
+ int horizontal_num_contributors;
+ int vertical_num_contributors;
+
+ int ring_buffer_length_bytes; // The length of an individual entry in the ring buffer. The total number of ring buffers is stbir__get_filter_pixel_width(filter)
+ int ring_buffer_num_entries; // Total number of entries in the ring buffer.
+ int ring_buffer_first_scanline;
+ int ring_buffer_last_scanline;
+ int ring_buffer_begin_index; // first_scanline is at this index in the ring buffer
+ float* ring_buffer;
+
+ float* encode_buffer; // A temporary buffer to store floats so we don't lose precision while we do multiply-adds.
+
+ int horizontal_contributors_size;
+ int horizontal_coefficients_size;
+ int vertical_contributors_size;
+ int vertical_coefficients_size;
+ int decode_buffer_size;
+ int horizontal_buffer_size;
+ int ring_buffer_size;
+ int encode_buffer_size;
+} stbir__info;
+
+
+static const float stbir__max_uint8_as_float = 255.0f;
+static const float stbir__max_uint16_as_float = 65535.0f;
+static const double stbir__max_uint32_as_float = 4294967295.0;
+
+
+static stbir__inline int stbir__min(int a, int b)
+{
+ return a < b ? a : b;
+}
+
+static stbir__inline float stbir__saturate(float x)
+{
+ if (x < 0)
+ return 0;
+
+ if (x > 1)
+ return 1;
+
+ return x;
+}
+
+#ifdef STBIR_SATURATE_INT
+static stbir__inline stbir_uint8 stbir__saturate8(int x)
+{
+ if ((unsigned int) x <= 255)
+ return x;
+
+ if (x < 0)
+ return 0;
+
+ return 255;
+}
+
+static stbir__inline stbir_uint16 stbir__saturate16(int x)
+{
+ if ((unsigned int) x <= 65535)
+ return x;
+
+ if (x < 0)
+ return 0;
+
+ return 65535;
+}
+#endif
+
+static float stbir__srgb_uchar_to_linear_float[256] = {
+ 0.000000f, 0.000304f, 0.000607f, 0.000911f, 0.001214f, 0.001518f, 0.001821f, 0.002125f, 0.002428f, 0.002732f, 0.003035f,
+ 0.003347f, 0.003677f, 0.004025f, 0.004391f, 0.004777f, 0.005182f, 0.005605f, 0.006049f, 0.006512f, 0.006995f, 0.007499f,
+ 0.008023f, 0.008568f, 0.009134f, 0.009721f, 0.010330f, 0.010960f, 0.011612f, 0.012286f, 0.012983f, 0.013702f, 0.014444f,
+ 0.015209f, 0.015996f, 0.016807f, 0.017642f, 0.018500f, 0.019382f, 0.020289f, 0.021219f, 0.022174f, 0.023153f, 0.024158f,
+ 0.025187f, 0.026241f, 0.027321f, 0.028426f, 0.029557f, 0.030713f, 0.031896f, 0.033105f, 0.034340f, 0.035601f, 0.036889f,
+ 0.038204f, 0.039546f, 0.040915f, 0.042311f, 0.043735f, 0.045186f, 0.046665f, 0.048172f, 0.049707f, 0.051269f, 0.052861f,
+ 0.054480f, 0.056128f, 0.057805f, 0.059511f, 0.061246f, 0.063010f, 0.064803f, 0.066626f, 0.068478f, 0.070360f, 0.072272f,
+ 0.074214f, 0.076185f, 0.078187f, 0.080220f, 0.082283f, 0.084376f, 0.086500f, 0.088656f, 0.090842f, 0.093059f, 0.095307f,
+ 0.097587f, 0.099899f, 0.102242f, 0.104616f, 0.107023f, 0.109462f, 0.111932f, 0.114435f, 0.116971f, 0.119538f, 0.122139f,
+ 0.124772f, 0.127438f, 0.130136f, 0.132868f, 0.135633f, 0.138432f, 0.141263f, 0.144128f, 0.147027f, 0.149960f, 0.152926f,
+ 0.155926f, 0.158961f, 0.162029f, 0.165132f, 0.168269f, 0.171441f, 0.174647f, 0.177888f, 0.181164f, 0.184475f, 0.187821f,
+ 0.191202f, 0.194618f, 0.198069f, 0.201556f, 0.205079f, 0.208637f, 0.212231f, 0.215861f, 0.219526f, 0.223228f, 0.226966f,
+ 0.230740f, 0.234551f, 0.238398f, 0.242281f, 0.246201f, 0.250158f, 0.254152f, 0.258183f, 0.262251f, 0.266356f, 0.270498f,
+ 0.274677f, 0.278894f, 0.283149f, 0.287441f, 0.291771f, 0.296138f, 0.300544f, 0.304987f, 0.309469f, 0.313989f, 0.318547f,
+ 0.323143f, 0.327778f, 0.332452f, 0.337164f, 0.341914f, 0.346704f, 0.351533f, 0.356400f, 0.361307f, 0.366253f, 0.371238f,
+ 0.376262f, 0.381326f, 0.386430f, 0.391573f, 0.396755f, 0.401978f, 0.407240f, 0.412543f, 0.417885f, 0.423268f, 0.428691f,
+ 0.434154f, 0.439657f, 0.445201f, 0.450786f, 0.456411f, 0.462077f, 0.467784f, 0.473532f, 0.479320f, 0.485150f, 0.491021f,
+ 0.496933f, 0.502887f, 0.508881f, 0.514918f, 0.520996f, 0.527115f, 0.533276f, 0.539480f, 0.545725f, 0.552011f, 0.558340f,
+ 0.564712f, 0.571125f, 0.577581f, 0.584078f, 0.590619f, 0.597202f, 0.603827f, 0.610496f, 0.617207f, 0.623960f, 0.630757f,
+ 0.637597f, 0.644480f, 0.651406f, 0.658375f, 0.665387f, 0.672443f, 0.679543f, 0.686685f, 0.693872f, 0.701102f, 0.708376f,
+ 0.715694f, 0.723055f, 0.730461f, 0.737911f, 0.745404f, 0.752942f, 0.760525f, 0.768151f, 0.775822f, 0.783538f, 0.791298f,
+ 0.799103f, 0.806952f, 0.814847f, 0.822786f, 0.830770f, 0.838799f, 0.846873f, 0.854993f, 0.863157f, 0.871367f, 0.879622f,
+ 0.887923f, 0.896269f, 0.904661f, 0.913099f, 0.921582f, 0.930111f, 0.938686f, 0.947307f, 0.955974f, 0.964686f, 0.973445f,
+ 0.982251f, 0.991102f, 1.0f
+};
+
+static float stbir__srgb_to_linear(float f)
+{
+ if (f <= 0.04045f)
+ return f / 12.92f;
+ else
+ return (float)pow((f + 0.055f) / 1.055f, 2.4f);
+}
+
+static float stbir__linear_to_srgb(float f)
+{
+ if (f <= 0.0031308f)
+ return f * 12.92f;
+ else
+ return 1.055f * (float)pow(f, 1 / 2.4f) - 0.055f;
+}
+
+#ifndef STBIR_NON_IEEE_FLOAT
+// From https://gist.github.com/rygorous/2203834
+
+typedef union
+{
+ stbir_uint32 u;
+ float f;
+} stbir__FP32;
+
+static const stbir_uint32 fp32_to_srgb8_tab4[104] = {
+ 0x0073000d, 0x007a000d, 0x0080000d, 0x0087000d, 0x008d000d, 0x0094000d, 0x009a000d, 0x00a1000d,
+ 0x00a7001a, 0x00b4001a, 0x00c1001a, 0x00ce001a, 0x00da001a, 0x00e7001a, 0x00f4001a, 0x0101001a,
+ 0x010e0033, 0x01280033, 0x01410033, 0x015b0033, 0x01750033, 0x018f0033, 0x01a80033, 0x01c20033,
+ 0x01dc0067, 0x020f0067, 0x02430067, 0x02760067, 0x02aa0067, 0x02dd0067, 0x03110067, 0x03440067,
+ 0x037800ce, 0x03df00ce, 0x044600ce, 0x04ad00ce, 0x051400ce, 0x057b00c5, 0x05dd00bc, 0x063b00b5,
+ 0x06970158, 0x07420142, 0x07e30130, 0x087b0120, 0x090b0112, 0x09940106, 0x0a1700fc, 0x0a9500f2,
+ 0x0b0f01cb, 0x0bf401ae, 0x0ccb0195, 0x0d950180, 0x0e56016e, 0x0f0d015e, 0x0fbc0150, 0x10630143,
+ 0x11070264, 0x1238023e, 0x1357021d, 0x14660201, 0x156601e9, 0x165a01d3, 0x174401c0, 0x182401af,
+ 0x18fe0331, 0x1a9602fe, 0x1c1502d2, 0x1d7e02ad, 0x1ed4028d, 0x201a0270, 0x21520256, 0x227d0240,
+ 0x239f0443, 0x25c003fe, 0x27bf03c4, 0x29a10392, 0x2b6a0367, 0x2d1d0341, 0x2ebe031f, 0x304d0300,
+ 0x31d105b0, 0x34a80555, 0x37520507, 0x39d504c5, 0x3c37048b, 0x3e7c0458, 0x40a8042a, 0x42bd0401,
+ 0x44c20798, 0x488e071e, 0x4c1c06b6, 0x4f76065d, 0x52a50610, 0x55ac05cc, 0x5892058f, 0x5b590559,
+ 0x5e0c0a23, 0x631c0980, 0x67db08f6, 0x6c55087f, 0x70940818, 0x74a007bd, 0x787d076c, 0x7c330723,
+};
+
+static stbir_uint8 stbir__linear_to_srgb_uchar(float in)
+{
+ static const stbir__FP32 almostone = { 0x3f7fffff }; // 1-eps
+ static const stbir__FP32 minval = { (127-13) << 23 };
+ stbir_uint32 tab,bias,scale,t;
+ stbir__FP32 f;
+
+ // Clamp to [2^(-13), 1-eps]; these two values map to 0 and 1, respectively.
+ // The tests are carefully written so that NaNs map to 0, same as in the reference
+ // implementation.
+ if (!(in > minval.f)) // written this way to catch NaNs
+ in = minval.f;
+ if (in > almostone.f)
+ in = almostone.f;
+
+ // Do the table lookup and unpack bias, scale
+ f.f = in;
+ tab = fp32_to_srgb8_tab4[(f.u - minval.u) >> 20];
+ bias = (tab >> 16) << 9;
+ scale = tab & 0xffff;
+
+ // Grab next-highest mantissa bits and perform linear interpolation
+ t = (f.u >> 12) & 0xff;
+ return (unsigned char) ((bias + scale*t) >> 16);
+}
+
+#else
+// sRGB transition values, scaled by 1<<28
+static int stbir__srgb_offset_to_linear_scaled[256] =
+{
+ 0, 40738, 122216, 203693, 285170, 366648, 448125, 529603,
+ 611080, 692557, 774035, 855852, 942009, 1033024, 1128971, 1229926,
+ 1335959, 1447142, 1563542, 1685229, 1812268, 1944725, 2082664, 2226148,
+ 2375238, 2529996, 2690481, 2856753, 3028870, 3206888, 3390865, 3580856,
+ 3776916, 3979100, 4187460, 4402049, 4622919, 4850123, 5083710, 5323731,
+ 5570236, 5823273, 6082892, 6349140, 6622065, 6901714, 7188133, 7481369,
+ 7781466, 8088471, 8402427, 8723380, 9051372, 9386448, 9728650, 10078021,
+ 10434603, 10798439, 11169569, 11548036, 11933879, 12327139, 12727857, 13136073,
+ 13551826, 13975156, 14406100, 14844697, 15290987, 15745007, 16206795, 16676389,
+ 17153826, 17639142, 18132374, 18633560, 19142734, 19659934, 20185196, 20718552,
+ 21260042, 21809696, 22367554, 22933648, 23508010, 24090680, 24681686, 25281066,
+ 25888850, 26505076, 27129772, 27762974, 28404716, 29055026, 29713942, 30381490,
+ 31057708, 31742624, 32436272, 33138682, 33849884, 34569912, 35298800, 36036568,
+ 36783260, 37538896, 38303512, 39077136, 39859796, 40651528, 41452360, 42262316,
+ 43081432, 43909732, 44747252, 45594016, 46450052, 47315392, 48190064, 49074096,
+ 49967516, 50870356, 51782636, 52704392, 53635648, 54576432, 55526772, 56486700,
+ 57456236, 58435408, 59424248, 60422780, 61431036, 62449032, 63476804, 64514376,
+ 65561776, 66619028, 67686160, 68763192, 69850160, 70947088, 72053992, 73170912,
+ 74297864, 75434880, 76581976, 77739184, 78906536, 80084040, 81271736, 82469648,
+ 83677792, 84896192, 86124888, 87363888, 88613232, 89872928, 91143016, 92423512,
+ 93714432, 95015816, 96327688, 97650056, 98982952, 100326408, 101680440, 103045072,
+ 104420320, 105806224, 107202800, 108610064, 110028048, 111456776, 112896264, 114346544,
+ 115807632, 117279552, 118762328, 120255976, 121760536, 123276016, 124802440, 126339832,
+ 127888216, 129447616, 131018048, 132599544, 134192112, 135795792, 137410592, 139036528,
+ 140673648, 142321952, 143981456, 145652208, 147334208, 149027488, 150732064, 152447968,
+ 154175200, 155913792, 157663776, 159425168, 161197984, 162982240, 164777968, 166585184,
+ 168403904, 170234160, 172075968, 173929344, 175794320, 177670896, 179559120, 181458992,
+ 183370528, 185293776, 187228736, 189175424, 191133888, 193104112, 195086128, 197079968,
+ 199085648, 201103184, 203132592, 205173888, 207227120, 209292272, 211369392, 213458480,
+ 215559568, 217672656, 219797792, 221934976, 224084240, 226245600, 228419056, 230604656,
+ 232802400, 235012320, 237234432, 239468736, 241715280, 243974080, 246245120, 248528464,
+ 250824112, 253132064, 255452368, 257785040, 260130080, 262487520, 264857376, 267239664,
+};
+
+static stbir_uint8 stbir__linear_to_srgb_uchar(float f)
+{
+ int x = (int) (f * (1 << 28)); // has headroom so you don't need to clamp
+ int v = 0;
+ int i;
+
+ // Refine the guess with a short binary search.
+ i = v + 128; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i;
+ i = v + 64; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i;
+ i = v + 32; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i;
+ i = v + 16; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i;
+ i = v + 8; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i;
+ i = v + 4; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i;
+ i = v + 2; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i;
+ i = v + 1; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i;
+
+ return (stbir_uint8) v;
+}
+#endif
+
+static float stbir__filter_trapezoid(float x, float scale)
+{
+ float halfscale = scale / 2;
+ float t = 0.5f + halfscale;
+ STBIR_ASSERT(scale <= 1);
+
+ x = (float)fabs(x);
+
+ if (x >= t)
+ return 0;
+ else
+ {
+ float r = 0.5f - halfscale;
+ if (x <= r)
+ return 1;
+ else
+ return (t - x) / scale;
+ }
+}
+
+static float stbir__support_trapezoid(float scale)
+{
+ STBIR_ASSERT(scale <= 1);
+ return 0.5f + scale / 2;
+}
+
+static float stbir__filter_triangle(float x, float s)
+{
+ STBIR__UNUSED_PARAM(s);
+
+ x = (float)fabs(x);
+
+ if (x <= 1.0f)
+ return 1 - x;
+ else
+ return 0;
+}
+
+static float stbir__filter_cubic(float x, float s)
+{
+ STBIR__UNUSED_PARAM(s);
+
+ x = (float)fabs(x);
+
+ if (x < 1.0f)
+ return (4 + x*x*(3*x - 6))/6;
+ else if (x < 2.0f)
+ return (8 + x*(-12 + x*(6 - x)))/6;
+
+ return (0.0f);
+}
+
+static float stbir__filter_catmullrom(float x, float s)
+{
+ STBIR__UNUSED_PARAM(s);
+
+ x = (float)fabs(x);
+
+ if (x < 1.0f)
+ return 1 - x*x*(2.5f - 1.5f*x);
+ else if (x < 2.0f)
+ return 2 - x*(4 + x*(0.5f*x - 2.5f));
+
+ return (0.0f);
+}
+
+static float stbir__filter_mitchell(float x, float s)
+{
+ STBIR__UNUSED_PARAM(s);
+
+ x = (float)fabs(x);
+
+ if (x < 1.0f)
+ return (16 + x*x*(21 * x - 36))/18;
+ else if (x < 2.0f)
+ return (32 + x*(-60 + x*(36 - 7*x)))/18;
+
+ return (0.0f);
+}
+
+static float stbir__support_zero(float s)
+{
+ STBIR__UNUSED_PARAM(s);
+ return 0;
+}
+
+static float stbir__support_one(float s)
+{
+ STBIR__UNUSED_PARAM(s);
+ return 1;
+}
+
+static float stbir__support_two(float s)
+{
+ STBIR__UNUSED_PARAM(s);
+ return 2;
+}
+
+static stbir__filter_info stbir__filter_info_table[] = {
+ { NULL, stbir__support_zero },
+ { stbir__filter_trapezoid, stbir__support_trapezoid },
+ { stbir__filter_triangle, stbir__support_one },
+ { stbir__filter_cubic, stbir__support_two },
+ { stbir__filter_catmullrom, stbir__support_two },
+ { stbir__filter_mitchell, stbir__support_two },
+};
+
+stbir__inline static int stbir__use_upsampling(float ratio)
+{
+ return ratio > 1;
+}
+
+stbir__inline static int stbir__use_width_upsampling(stbir__info* stbir_info)
+{
+ return stbir__use_upsampling(stbir_info->horizontal_scale);
+}
+
+stbir__inline static int stbir__use_height_upsampling(stbir__info* stbir_info)
+{
+ return stbir__use_upsampling(stbir_info->vertical_scale);
+}
+
+// This is the maximum number of input samples that can affect an output sample
+// with the given filter
+static int stbir__get_filter_pixel_width(stbir_filter filter, float scale)
+{
+ STBIR_ASSERT(filter != 0);
+ STBIR_ASSERT(filter < STBIR__ARRAY_SIZE(stbir__filter_info_table));
+
+ if (stbir__use_upsampling(scale))
+ return (int)ceil(stbir__filter_info_table[filter].support(1/scale) * 2);
+ else
+ return (int)ceil(stbir__filter_info_table[filter].support(scale) * 2 / scale);
+}
+
+// This is how much to expand buffers to account for filters seeking outside
+// the image boundaries.
+static int stbir__get_filter_pixel_margin(stbir_filter filter, float scale)
+{
+ return stbir__get_filter_pixel_width(filter, scale) / 2;
+}
+
+static int stbir__get_coefficient_width(stbir_filter filter, float scale)
+{
+ if (stbir__use_upsampling(scale))
+ return (int)ceil(stbir__filter_info_table[filter].support(1 / scale) * 2);
+ else
+ return (int)ceil(stbir__filter_info_table[filter].support(scale) * 2);
+}
+
+static int stbir__get_contributors(float scale, stbir_filter filter, int input_size, int output_size)
+{
+ if (stbir__use_upsampling(scale))
+ return output_size;
+ else
+ return (input_size + stbir__get_filter_pixel_margin(filter, scale) * 2);
+}
+
+static int stbir__get_total_horizontal_coefficients(stbir__info* info)
+{
+ return info->horizontal_num_contributors
+ * stbir__get_coefficient_width (info->horizontal_filter, info->horizontal_scale);
+}
+
+static int stbir__get_total_vertical_coefficients(stbir__info* info)
+{
+ return info->vertical_num_contributors
+ * stbir__get_coefficient_width (info->vertical_filter, info->vertical_scale);
+}
+
+static stbir__contributors* stbir__get_contributor(stbir__contributors* contributors, int n)
+{
+ return &contributors[n];
+}
+
+// For perf reasons this code is duplicated in stbir__resample_horizontal_upsample/downsample,
+// if you change it here change it there too.
+static float* stbir__get_coefficient(float* coefficients, stbir_filter filter, float scale, int n, int c)
+{
+ int width = stbir__get_coefficient_width(filter, scale);
+ return &coefficients[width*n + c];
+}
+
+static int stbir__edge_wrap_slow(stbir_edge edge, int n, int max)
+{
+ switch (edge)
+ {
+ case STBIR_EDGE_ZERO:
+ return 0; // we'll decode the wrong pixel here, and then overwrite with 0s later
+
+ case STBIR_EDGE_CLAMP:
+ if (n < 0)
+ return 0;
+
+ if (n >= max)
+ return max - 1;
+
+ return n; // NOTREACHED
+
+ case STBIR_EDGE_REFLECT:
+ {
+ if (n < 0)
+ {
+ if (n < max)
+ return -n;
+ else
+ return max - 1;
+ }
+
+ if (n >= max)
+ {
+ int max2 = max * 2;
+ if (n >= max2)
+ return 0;
+ else
+ return max2 - n - 1;
+ }
+
+ return n; // NOTREACHED
+ }
+
+ case STBIR_EDGE_WRAP:
+ if (n >= 0)
+ return (n % max);
+ else
+ {
+ int m = (-n) % max;
+
+ if (m != 0)
+ m = max - m;
+
+ return (m);
+ }
+ return n; // NOTREACHED
+
+ default:
+ STBIR_ASSERT(!"Unimplemented edge type");
+ return 0;
+ }
+}
+
+stbir__inline static int stbir__edge_wrap(stbir_edge edge, int n, int max)
+{
+ // avoid per-pixel switch
+ if (n >= 0 && n < max)
+ return n;
+ return stbir__edge_wrap_slow(edge, n, max);
+}
+
+// What input pixels contribute to this output pixel?
+static void stbir__calculate_sample_range_upsample(int n, float out_filter_radius, float scale_ratio, float out_shift, int* in_first_pixel, int* in_last_pixel, float* in_center_of_out)
+{
+ float out_pixel_center = (float)n + 0.5f;
+ float out_pixel_influence_lowerbound = out_pixel_center - out_filter_radius;
+ float out_pixel_influence_upperbound = out_pixel_center + out_filter_radius;
+
+ float in_pixel_influence_lowerbound = (out_pixel_influence_lowerbound + out_shift) / scale_ratio;
+ float in_pixel_influence_upperbound = (out_pixel_influence_upperbound + out_shift) / scale_ratio;
+
+ *in_center_of_out = (out_pixel_center + out_shift) / scale_ratio;
+ *in_first_pixel = (int)(floor(in_pixel_influence_lowerbound + 0.5));
+ *in_last_pixel = (int)(floor(in_pixel_influence_upperbound - 0.5));
+}
+
+// What output pixels does this input pixel contribute to?
+static void stbir__calculate_sample_range_downsample(int n, float in_pixels_radius, float scale_ratio, float out_shift, int* out_first_pixel, int* out_last_pixel, float* out_center_of_in)
+{
+ float in_pixel_center = (float)n + 0.5f;
+ float in_pixel_influence_lowerbound = in_pixel_center - in_pixels_radius;
+ float in_pixel_influence_upperbound = in_pixel_center + in_pixels_radius;
+
+ float out_pixel_influence_lowerbound = in_pixel_influence_lowerbound * scale_ratio - out_shift;
+ float out_pixel_influence_upperbound = in_pixel_influence_upperbound * scale_ratio - out_shift;
+
+ *out_center_of_in = in_pixel_center * scale_ratio - out_shift;
+ *out_first_pixel = (int)(floor(out_pixel_influence_lowerbound + 0.5));
+ *out_last_pixel = (int)(floor(out_pixel_influence_upperbound - 0.5));
+}
+
+static void stbir__calculate_coefficients_upsample(stbir_filter filter, float scale, int in_first_pixel, int in_last_pixel, float in_center_of_out, stbir__contributors* contributor, float* coefficient_group)
+{
+ int i;
+ float total_filter = 0;
+ float filter_scale;
+
+ STBIR_ASSERT(in_last_pixel - in_first_pixel <= (int)ceil(stbir__filter_info_table[filter].support(1/scale) * 2)); // Taken directly from stbir__get_coefficient_width() which we can't call because we don't know if we're horizontal or vertical.
+
+ contributor->n0 = in_first_pixel;
+ contributor->n1 = in_last_pixel;
+
+ STBIR_ASSERT(contributor->n1 >= contributor->n0);
+
+ for (i = 0; i <= in_last_pixel - in_first_pixel; i++)
+ {
+ float in_pixel_center = (float)(i + in_first_pixel) + 0.5f;
+ coefficient_group[i] = stbir__filter_info_table[filter].kernel(in_center_of_out - in_pixel_center, 1 / scale);
+
+ // If the coefficient is zero, skip it. (Don't do the <0 check here, we want the influence of those outside pixels.)
+ if (i == 0 && !coefficient_group[i])
+ {
+ contributor->n0 = ++in_first_pixel;
+ i--;
+ continue;
+ }
+
+ total_filter += coefficient_group[i];
+ }
+
+ STBIR_ASSERT(stbir__filter_info_table[filter].kernel((float)(in_last_pixel + 1) + 0.5f - in_center_of_out, 1/scale) == 0);
+
+ STBIR_ASSERT(total_filter > 0.9);
+ STBIR_ASSERT(total_filter < 1.1f); // Make sure it's not way off.
+
+ // Make sure the sum of all coefficients is 1.
+ filter_scale = 1 / total_filter;
+
+ for (i = 0; i <= in_last_pixel - in_first_pixel; i++)
+ coefficient_group[i] *= filter_scale;
+
+ for (i = in_last_pixel - in_first_pixel; i >= 0; i--)
+ {
+ if (coefficient_group[i])
+ break;
+
+ // This line has no weight. We can skip it.
+ contributor->n1 = contributor->n0 + i - 1;
+ }
+}
+
+static void stbir__calculate_coefficients_downsample(stbir_filter filter, float scale_ratio, int out_first_pixel, int out_last_pixel, float out_center_of_in, stbir__contributors* contributor, float* coefficient_group)
+{
+ int i;
+
+ STBIR_ASSERT(out_last_pixel - out_first_pixel <= (int)ceil(stbir__filter_info_table[filter].support(scale_ratio) * 2)); // Taken directly from stbir__get_coefficient_width() which we can't call because we don't know if we're horizontal or vertical.
+
+ contributor->n0 = out_first_pixel;
+ contributor->n1 = out_last_pixel;
+
+ STBIR_ASSERT(contributor->n1 >= contributor->n0);
+
+ for (i = 0; i <= out_last_pixel - out_first_pixel; i++)
+ {
+ float out_pixel_center = (float)(i + out_first_pixel) + 0.5f;
+ float x = out_pixel_center - out_center_of_in;
+ coefficient_group[i] = stbir__filter_info_table[filter].kernel(x, scale_ratio) * scale_ratio;
+ }
+
+ STBIR_ASSERT(stbir__filter_info_table[filter].kernel((float)(out_last_pixel + 1) + 0.5f - out_center_of_in, scale_ratio) == 0);
+
+ for (i = out_last_pixel - out_first_pixel; i >= 0; i--)
+ {
+ if (coefficient_group[i])
+ break;
+
+ // This line has no weight. We can skip it.
+ contributor->n1 = contributor->n0 + i - 1;
+ }
+}
+
+static void stbir__normalize_downsample_coefficients(stbir__contributors* contributors, float* coefficients, stbir_filter filter, float scale_ratio, int input_size, int output_size)
+{
+ int num_contributors = stbir__get_contributors(scale_ratio, filter, input_size, output_size);
+ int num_coefficients = stbir__get_coefficient_width(filter, scale_ratio);
+ int i, j;
+ int skip;
+
+ for (i = 0; i < output_size; i++)
+ {
+ float scale;
+ float total = 0;
+
+ for (j = 0; j < num_contributors; j++)
+ {
+ if (i >= contributors[j].n0 && i <= contributors[j].n1)
+ {
+ float coefficient = *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i - contributors[j].n0);
+ total += coefficient;
+ }
+ else if (i < contributors[j].n0)
+ break;
+ }
+
+ STBIR_ASSERT(total > 0.9f);
+ STBIR_ASSERT(total < 1.1f);
+
+ scale = 1 / total;
+
+ for (j = 0; j < num_contributors; j++)
+ {
+ if (i >= contributors[j].n0 && i <= contributors[j].n1)
+ *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i - contributors[j].n0) *= scale;
+ else if (i < contributors[j].n0)
+ break;
+ }
+ }
+
+ // Optimize: Skip zero coefficients and contributions outside of image bounds.
+ // Do this after normalizing because normalization depends on the n0/n1 values.
+ for (j = 0; j < num_contributors; j++)
+ {
+ int range, max, width;
+
+ skip = 0;
+ while (*stbir__get_coefficient(coefficients, filter, scale_ratio, j, skip) == 0)
+ skip++;
+
+ contributors[j].n0 += skip;
+
+ while (contributors[j].n0 < 0)
+ {
+ contributors[j].n0++;
+ skip++;
+ }
+
+ range = contributors[j].n1 - contributors[j].n0 + 1;
+ max = stbir__min(num_coefficients, range);
+
+ width = stbir__get_coefficient_width(filter, scale_ratio);
+ for (i = 0; i < max; i++)
+ {
+ if (i + skip >= width)
+ break;
+
+ *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i) = *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i + skip);
+ }
+
+ continue;
+ }
+
+ // Using min to avoid writing into invalid pixels.
+ for (i = 0; i < num_contributors; i++)
+ contributors[i].n1 = stbir__min(contributors[i].n1, output_size - 1);
+}
+
+// Each scan line uses the same kernel values so we should calculate the kernel
+// values once and then we can use them for every scan line.
+static void stbir__calculate_filters(stbir__contributors* contributors, float* coefficients, stbir_filter filter, float scale_ratio, float shift, int input_size, int output_size)
+{
+ int n;
+ int total_contributors = stbir__get_contributors(scale_ratio, filter, input_size, output_size);
+
+ if (stbir__use_upsampling(scale_ratio))
+ {
+ float out_pixels_radius = stbir__filter_info_table[filter].support(1 / scale_ratio) * scale_ratio;
+
+ // Looping through out pixels
+ for (n = 0; n < total_contributors; n++)
+ {
+ float in_center_of_out; // Center of the current out pixel in the in pixel space
+ int in_first_pixel, in_last_pixel;
+
+ stbir__calculate_sample_range_upsample(n, out_pixels_radius, scale_ratio, shift, &in_first_pixel, &in_last_pixel, &in_center_of_out);
+
+ stbir__calculate_coefficients_upsample(filter, scale_ratio, in_first_pixel, in_last_pixel, in_center_of_out, stbir__get_contributor(contributors, n), stbir__get_coefficient(coefficients, filter, scale_ratio, n, 0));
+ }
+ }
+ else
+ {
+ float in_pixels_radius = stbir__filter_info_table[filter].support(scale_ratio) / scale_ratio;
+
+ // Looping through in pixels
+ for (n = 0; n < total_contributors; n++)
+ {
+ float out_center_of_in; // Center of the current out pixel in the in pixel space
+ int out_first_pixel, out_last_pixel;
+ int n_adjusted = n - stbir__get_filter_pixel_margin(filter, scale_ratio);
+
+ stbir__calculate_sample_range_downsample(n_adjusted, in_pixels_radius, scale_ratio, shift, &out_first_pixel, &out_last_pixel, &out_center_of_in);
+
+ stbir__calculate_coefficients_downsample(filter, scale_ratio, out_first_pixel, out_last_pixel, out_center_of_in, stbir__get_contributor(contributors, n), stbir__get_coefficient(coefficients, filter, scale_ratio, n, 0));
+ }
+
+ stbir__normalize_downsample_coefficients(contributors, coefficients, filter, scale_ratio, input_size, output_size);
+ }
+}
+
+static float* stbir__get_decode_buffer(stbir__info* stbir_info)
+{
+ // The 0 index of the decode buffer starts after the margin. This makes
+ // it okay to use negative indexes on the decode buffer.
+ return &stbir_info->decode_buffer[stbir_info->horizontal_filter_pixel_margin * stbir_info->channels];
+}
+
+#define STBIR__DECODE(type, colorspace) ((type) * (STBIR_MAX_COLORSPACES) + (colorspace))
+
+static void stbir__decode_scanline(stbir__info* stbir_info, int n)
+{
+ int c;
+ int channels = stbir_info->channels;
+ int alpha_channel = stbir_info->alpha_channel;
+ int type = stbir_info->type;
+ int colorspace = stbir_info->colorspace;
+ int input_w = stbir_info->input_w;
+ size_t input_stride_bytes = stbir_info->input_stride_bytes;
+ float* decode_buffer = stbir__get_decode_buffer(stbir_info);
+ stbir_edge edge_horizontal = stbir_info->edge_horizontal;
+ stbir_edge edge_vertical = stbir_info->edge_vertical;
+ size_t in_buffer_row_offset = stbir__edge_wrap(edge_vertical, n, stbir_info->input_h) * input_stride_bytes;
+ const void* input_data = (char *) stbir_info->input_data + in_buffer_row_offset;
+ int max_x = input_w + stbir_info->horizontal_filter_pixel_margin;
+ int decode = STBIR__DECODE(type, colorspace);
+
+ int x = -stbir_info->horizontal_filter_pixel_margin;
+
+ // special handling for STBIR_EDGE_ZERO because it needs to return an item that doesn't appear in the input,
+ // and we want to avoid paying overhead on every pixel if not STBIR_EDGE_ZERO
+ if (edge_vertical == STBIR_EDGE_ZERO && (n < 0 || n >= stbir_info->input_h))
+ {
+ for (; x < max_x; x++)
+ for (c = 0; c < channels; c++)
+ decode_buffer[x*channels + c] = 0;
+ return;
+ }
+
+ switch (decode)
+ {
+ case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR):
+ for (; x < max_x; x++)
+ {
+ int decode_pixel_index = x * channels;
+ int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels;
+ for (c = 0; c < channels; c++)
+ decode_buffer[decode_pixel_index + c] = ((float)((const unsigned char*)input_data)[input_pixel_index + c]) / stbir__max_uint8_as_float;
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_SRGB):
+ for (; x < max_x; x++)
+ {
+ int decode_pixel_index = x * channels;
+ int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels;
+ for (c = 0; c < channels; c++)
+ decode_buffer[decode_pixel_index + c] = stbir__srgb_uchar_to_linear_float[((const unsigned char*)input_data)[input_pixel_index + c]];
+
+ if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE))
+ decode_buffer[decode_pixel_index + alpha_channel] = ((float)((const unsigned char*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint8_as_float;
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_LINEAR):
+ for (; x < max_x; x++)
+ {
+ int decode_pixel_index = x * channels;
+ int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels;
+ for (c = 0; c < channels; c++)
+ decode_buffer[decode_pixel_index + c] = ((float)((const unsigned short*)input_data)[input_pixel_index + c]) / stbir__max_uint16_as_float;
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_SRGB):
+ for (; x < max_x; x++)
+ {
+ int decode_pixel_index = x * channels;
+ int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels;
+ for (c = 0; c < channels; c++)
+ decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear(((float)((const unsigned short*)input_data)[input_pixel_index + c]) / stbir__max_uint16_as_float);
+
+ if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE))
+ decode_buffer[decode_pixel_index + alpha_channel] = ((float)((const unsigned short*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint16_as_float;
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_LINEAR):
+ for (; x < max_x; x++)
+ {
+ int decode_pixel_index = x * channels;
+ int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels;
+ for (c = 0; c < channels; c++)
+ decode_buffer[decode_pixel_index + c] = (float)(((double)((const unsigned int*)input_data)[input_pixel_index + c]) / stbir__max_uint32_as_float);
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_SRGB):
+ for (; x < max_x; x++)
+ {
+ int decode_pixel_index = x * channels;
+ int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels;
+ for (c = 0; c < channels; c++)
+ decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear((float)(((double)((const unsigned int*)input_data)[input_pixel_index + c]) / stbir__max_uint32_as_float));
+
+ if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE))
+ decode_buffer[decode_pixel_index + alpha_channel] = (float)(((double)((const unsigned int*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint32_as_float);
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_LINEAR):
+ for (; x < max_x; x++)
+ {
+ int decode_pixel_index = x * channels;
+ int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels;
+ for (c = 0; c < channels; c++)
+ decode_buffer[decode_pixel_index + c] = ((const float*)input_data)[input_pixel_index + c];
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_SRGB):
+ for (; x < max_x; x++)
+ {
+ int decode_pixel_index = x * channels;
+ int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels;
+ for (c = 0; c < channels; c++)
+ decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear(((const float*)input_data)[input_pixel_index + c]);
+
+ if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE))
+ decode_buffer[decode_pixel_index + alpha_channel] = ((const float*)input_data)[input_pixel_index + alpha_channel];
+ }
+
+ break;
+
+ default:
+ STBIR_ASSERT(!"Unknown type/colorspace/channels combination.");
+ break;
+ }
+
+ if (!(stbir_info->flags & STBIR_FLAG_ALPHA_PREMULTIPLIED))
+ {
+ for (x = -stbir_info->horizontal_filter_pixel_margin; x < max_x; x++)
+ {
+ int decode_pixel_index = x * channels;
+
+ // If the alpha value is 0 it will clobber the color values. Make sure it's not.
+ float alpha = decode_buffer[decode_pixel_index + alpha_channel];
+#ifndef STBIR_NO_ALPHA_EPSILON
+ if (stbir_info->type != STBIR_TYPE_FLOAT) {
+ alpha += STBIR_ALPHA_EPSILON;
+ decode_buffer[decode_pixel_index + alpha_channel] = alpha;
+ }
+#endif
+ for (c = 0; c < channels; c++)
+ {
+ if (c == alpha_channel)
+ continue;
+
+ decode_buffer[decode_pixel_index + c] *= alpha;
+ }
+ }
+ }
+
+ if (edge_horizontal == STBIR_EDGE_ZERO)
+ {
+ for (x = -stbir_info->horizontal_filter_pixel_margin; x < 0; x++)
+ {
+ for (c = 0; c < channels; c++)
+ decode_buffer[x*channels + c] = 0;
+ }
+ for (x = input_w; x < max_x; x++)
+ {
+ for (c = 0; c < channels; c++)
+ decode_buffer[x*channels + c] = 0;
+ }
+ }
+}
+
+static float* stbir__get_ring_buffer_entry(float* ring_buffer, int index, int ring_buffer_length)
+{
+ return &ring_buffer[index * ring_buffer_length];
+}
+
+static float* stbir__add_empty_ring_buffer_entry(stbir__info* stbir_info, int n)
+{
+ int ring_buffer_index;
+ float* ring_buffer;
+
+ stbir_info->ring_buffer_last_scanline = n;
+
+ if (stbir_info->ring_buffer_begin_index < 0)
+ {
+ ring_buffer_index = stbir_info->ring_buffer_begin_index = 0;
+ stbir_info->ring_buffer_first_scanline = n;
+ }
+ else
+ {
+ ring_buffer_index = (stbir_info->ring_buffer_begin_index + (stbir_info->ring_buffer_last_scanline - stbir_info->ring_buffer_first_scanline)) % stbir_info->ring_buffer_num_entries;
+ STBIR_ASSERT(ring_buffer_index != stbir_info->ring_buffer_begin_index);
+ }
+
+ ring_buffer = stbir__get_ring_buffer_entry(stbir_info->ring_buffer, ring_buffer_index, stbir_info->ring_buffer_length_bytes / sizeof(float));
+ memset(ring_buffer, 0, stbir_info->ring_buffer_length_bytes);
+
+ return ring_buffer;
+}
+
+
+static void stbir__resample_horizontal_upsample(stbir__info* stbir_info, float* output_buffer)
+{
+ int x, k;
+ int output_w = stbir_info->output_w;
+ int channels = stbir_info->channels;
+ float* decode_buffer = stbir__get_decode_buffer(stbir_info);
+ stbir__contributors* horizontal_contributors = stbir_info->horizontal_contributors;
+ float* horizontal_coefficients = stbir_info->horizontal_coefficients;
+ int coefficient_width = stbir_info->horizontal_coefficient_width;
+
+ for (x = 0; x < output_w; x++)
+ {
+ int n0 = horizontal_contributors[x].n0;
+ int n1 = horizontal_contributors[x].n1;
+
+ int out_pixel_index = x * channels;
+ int coefficient_group = coefficient_width * x;
+ int coefficient_counter = 0;
+
+ STBIR_ASSERT(n1 >= n0);
+ STBIR_ASSERT(n0 >= -stbir_info->horizontal_filter_pixel_margin);
+ STBIR_ASSERT(n1 >= -stbir_info->horizontal_filter_pixel_margin);
+ STBIR_ASSERT(n0 < stbir_info->input_w + stbir_info->horizontal_filter_pixel_margin);
+ STBIR_ASSERT(n1 < stbir_info->input_w + stbir_info->horizontal_filter_pixel_margin);
+
+ switch (channels) {
+ case 1:
+ for (k = n0; k <= n1; k++)
+ {
+ int in_pixel_index = k * 1;
+ float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++];
+ STBIR_ASSERT(coefficient != 0);
+ output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient;
+ }
+ break;
+ case 2:
+ for (k = n0; k <= n1; k++)
+ {
+ int in_pixel_index = k * 2;
+ float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++];
+ STBIR_ASSERT(coefficient != 0);
+ output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient;
+ output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient;
+ }
+ break;
+ case 3:
+ for (k = n0; k <= n1; k++)
+ {
+ int in_pixel_index = k * 3;
+ float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++];
+ STBIR_ASSERT(coefficient != 0);
+ output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient;
+ output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient;
+ output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient;
+ }
+ break;
+ case 4:
+ for (k = n0; k <= n1; k++)
+ {
+ int in_pixel_index = k * 4;
+ float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++];
+ STBIR_ASSERT(coefficient != 0);
+ output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient;
+ output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient;
+ output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient;
+ output_buffer[out_pixel_index + 3] += decode_buffer[in_pixel_index + 3] * coefficient;
+ }
+ break;
+ default:
+ for (k = n0; k <= n1; k++)
+ {
+ int in_pixel_index = k * channels;
+ float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++];
+ int c;
+ STBIR_ASSERT(coefficient != 0);
+ for (c = 0; c < channels; c++)
+ output_buffer[out_pixel_index + c] += decode_buffer[in_pixel_index + c] * coefficient;
+ }
+ break;
+ }
+ }
+}
+
+static void stbir__resample_horizontal_downsample(stbir__info* stbir_info, float* output_buffer)
+{
+ int x, k;
+ int input_w = stbir_info->input_w;
+ int channels = stbir_info->channels;
+ float* decode_buffer = stbir__get_decode_buffer(stbir_info);
+ stbir__contributors* horizontal_contributors = stbir_info->horizontal_contributors;
+ float* horizontal_coefficients = stbir_info->horizontal_coefficients;
+ int coefficient_width = stbir_info->horizontal_coefficient_width;
+ int filter_pixel_margin = stbir_info->horizontal_filter_pixel_margin;
+ int max_x = input_w + filter_pixel_margin * 2;
+
+ STBIR_ASSERT(!stbir__use_width_upsampling(stbir_info));
+
+ switch (channels) {
+ case 1:
+ for (x = 0; x < max_x; x++)
+ {
+ int n0 = horizontal_contributors[x].n0;
+ int n1 = horizontal_contributors[x].n1;
+
+ int in_x = x - filter_pixel_margin;
+ int in_pixel_index = in_x * 1;
+ int max_n = n1;
+ int coefficient_group = coefficient_width * x;
+
+ for (k = n0; k <= max_n; k++)
+ {
+ int out_pixel_index = k * 1;
+ float coefficient = horizontal_coefficients[coefficient_group + k - n0];
+ STBIR_ASSERT(coefficient != 0);
+ output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient;
+ }
+ }
+ break;
+
+ case 2:
+ for (x = 0; x < max_x; x++)
+ {
+ int n0 = horizontal_contributors[x].n0;
+ int n1 = horizontal_contributors[x].n1;
+
+ int in_x = x - filter_pixel_margin;
+ int in_pixel_index = in_x * 2;
+ int max_n = n1;
+ int coefficient_group = coefficient_width * x;
+
+ for (k = n0; k <= max_n; k++)
+ {
+ int out_pixel_index = k * 2;
+ float coefficient = horizontal_coefficients[coefficient_group + k - n0];
+ STBIR_ASSERT(coefficient != 0);
+ output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient;
+ output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient;
+ }
+ }
+ break;
+
+ case 3:
+ for (x = 0; x < max_x; x++)
+ {
+ int n0 = horizontal_contributors[x].n0;
+ int n1 = horizontal_contributors[x].n1;
+
+ int in_x = x - filter_pixel_margin;
+ int in_pixel_index = in_x * 3;
+ int max_n = n1;
+ int coefficient_group = coefficient_width * x;
+
+ for (k = n0; k <= max_n; k++)
+ {
+ int out_pixel_index = k * 3;
+ float coefficient = horizontal_coefficients[coefficient_group + k - n0];
+ STBIR_ASSERT(coefficient != 0);
+ output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient;
+ output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient;
+ output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient;
+ }
+ }
+ break;
+
+ case 4:
+ for (x = 0; x < max_x; x++)
+ {
+ int n0 = horizontal_contributors[x].n0;
+ int n1 = horizontal_contributors[x].n1;
+
+ int in_x = x - filter_pixel_margin;
+ int in_pixel_index = in_x * 4;
+ int max_n = n1;
+ int coefficient_group = coefficient_width * x;
+
+ for (k = n0; k <= max_n; k++)
+ {
+ int out_pixel_index = k * 4;
+ float coefficient = horizontal_coefficients[coefficient_group + k - n0];
+ STBIR_ASSERT(coefficient != 0);
+ output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient;
+ output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient;
+ output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient;
+ output_buffer[out_pixel_index + 3] += decode_buffer[in_pixel_index + 3] * coefficient;
+ }
+ }
+ break;
+
+ default:
+ for (x = 0; x < max_x; x++)
+ {
+ int n0 = horizontal_contributors[x].n0;
+ int n1 = horizontal_contributors[x].n1;
+
+ int in_x = x - filter_pixel_margin;
+ int in_pixel_index = in_x * channels;
+ int max_n = n1;
+ int coefficient_group = coefficient_width * x;
+
+ for (k = n0; k <= max_n; k++)
+ {
+ int c;
+ int out_pixel_index = k * channels;
+ float coefficient = horizontal_coefficients[coefficient_group + k - n0];
+ STBIR_ASSERT(coefficient != 0);
+ for (c = 0; c < channels; c++)
+ output_buffer[out_pixel_index + c] += decode_buffer[in_pixel_index + c] * coefficient;
+ }
+ }
+ break;
+ }
+}
+
+static void stbir__decode_and_resample_upsample(stbir__info* stbir_info, int n)
+{
+ // Decode the nth scanline from the source image into the decode buffer.
+ stbir__decode_scanline(stbir_info, n);
+
+ // Now resample it into the ring buffer.
+ if (stbir__use_width_upsampling(stbir_info))
+ stbir__resample_horizontal_upsample(stbir_info, stbir__add_empty_ring_buffer_entry(stbir_info, n));
+ else
+ stbir__resample_horizontal_downsample(stbir_info, stbir__add_empty_ring_buffer_entry(stbir_info, n));
+
+ // Now it's sitting in the ring buffer ready to be used as source for the vertical sampling.
+}
+
+static void stbir__decode_and_resample_downsample(stbir__info* stbir_info, int n)
+{
+ // Decode the nth scanline from the source image into the decode buffer.
+ stbir__decode_scanline(stbir_info, n);
+
+ memset(stbir_info->horizontal_buffer, 0, stbir_info->output_w * stbir_info->channels * sizeof(float));
+
+ // Now resample it into the horizontal buffer.
+ if (stbir__use_width_upsampling(stbir_info))
+ stbir__resample_horizontal_upsample(stbir_info, stbir_info->horizontal_buffer);
+ else
+ stbir__resample_horizontal_downsample(stbir_info, stbir_info->horizontal_buffer);
+
+ // Now it's sitting in the horizontal buffer ready to be distributed into the ring buffers.
+}
+
+// Get the specified scan line from the ring buffer.
+static float* stbir__get_ring_buffer_scanline(int get_scanline, float* ring_buffer, int begin_index, int first_scanline, int ring_buffer_num_entries, int ring_buffer_length)
+{
+ int ring_buffer_index = (begin_index + (get_scanline - first_scanline)) % ring_buffer_num_entries;
+ return stbir__get_ring_buffer_entry(ring_buffer, ring_buffer_index, ring_buffer_length);
+}
+
+
+static void stbir__encode_scanline(stbir__info* stbir_info, int num_pixels, void *output_buffer, float *encode_buffer, int channels, int alpha_channel, int decode)
+{
+ int x;
+ int n;
+ int num_nonalpha;
+ stbir_uint16 nonalpha[STBIR_MAX_CHANNELS];
+
+ if (!(stbir_info->flags&STBIR_FLAG_ALPHA_PREMULTIPLIED))
+ {
+ for (x=0; x < num_pixels; ++x)
+ {
+ int pixel_index = x*channels;
+
+ float alpha = encode_buffer[pixel_index + alpha_channel];
+ float reciprocal_alpha = alpha ? 1.0f / alpha : 0;
+
+ // unrolling this produced a 1% slowdown upscaling a large RGBA linear-space image on my machine - stb
+ for (n = 0; n < channels; n++)
+ if (n != alpha_channel)
+ encode_buffer[pixel_index + n] *= reciprocal_alpha;
+
+ // We added in a small epsilon to prevent the color channel from being deleted with zero alpha.
+ // Because we only add it for integer types, it will automatically be discarded on integer
+ // conversion, so we don't need to subtract it back out (which would be problematic for
+ // numeric precision reasons).
+ }
+ }
+
+ // build a table of all channels that need colorspace correction, so
+ // we don't perform colorspace correction on channels that don't need it.
+ for (x = 0, num_nonalpha = 0; x < channels; ++x)
+ {
+ if (x != alpha_channel || (stbir_info->flags & STBIR_FLAG_ALPHA_USES_COLORSPACE))
+ {
+ nonalpha[num_nonalpha++] = (stbir_uint16)x;
+ }
+ }
+
+ #define STBIR__ROUND_INT(f) ((int) ((f)+0.5))
+ #define STBIR__ROUND_UINT(f) ((stbir_uint32) ((f)+0.5))
+
+ #ifdef STBIR__SATURATE_INT
+ #define STBIR__ENCODE_LINEAR8(f) stbir__saturate8 (STBIR__ROUND_INT((f) * stbir__max_uint8_as_float ))
+ #define STBIR__ENCODE_LINEAR16(f) stbir__saturate16(STBIR__ROUND_INT((f) * stbir__max_uint16_as_float))
+ #else
+ #define STBIR__ENCODE_LINEAR8(f) (unsigned char ) STBIR__ROUND_INT(stbir__saturate(f) * stbir__max_uint8_as_float )
+ #define STBIR__ENCODE_LINEAR16(f) (unsigned short) STBIR__ROUND_INT(stbir__saturate(f) * stbir__max_uint16_as_float)
+ #endif
+
+ switch (decode)
+ {
+ case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR):
+ for (x=0; x < num_pixels; ++x)
+ {
+ int pixel_index = x*channels;
+
+ for (n = 0; n < channels; n++)
+ {
+ int index = pixel_index + n;
+ ((unsigned char*)output_buffer)[index] = STBIR__ENCODE_LINEAR8(encode_buffer[index]);
+ }
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_SRGB):
+ for (x=0; x < num_pixels; ++x)
+ {
+ int pixel_index = x*channels;
+
+ for (n = 0; n < num_nonalpha; n++)
+ {
+ int index = pixel_index + nonalpha[n];
+ ((unsigned char*)output_buffer)[index] = stbir__linear_to_srgb_uchar(encode_buffer[index]);
+ }
+
+ if (!(stbir_info->flags & STBIR_FLAG_ALPHA_USES_COLORSPACE))
+ ((unsigned char *)output_buffer)[pixel_index + alpha_channel] = STBIR__ENCODE_LINEAR8(encode_buffer[pixel_index+alpha_channel]);
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_LINEAR):
+ for (x=0; x < num_pixels; ++x)
+ {
+ int pixel_index = x*channels;
+
+ for (n = 0; n < channels; n++)
+ {
+ int index = pixel_index + n;
+ ((unsigned short*)output_buffer)[index] = STBIR__ENCODE_LINEAR16(encode_buffer[index]);
+ }
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_SRGB):
+ for (x=0; x < num_pixels; ++x)
+ {
+ int pixel_index = x*channels;
+
+ for (n = 0; n < num_nonalpha; n++)
+ {
+ int index = pixel_index + nonalpha[n];
+ ((unsigned short*)output_buffer)[index] = (unsigned short)STBIR__ROUND_INT(stbir__linear_to_srgb(stbir__saturate(encode_buffer[index])) * stbir__max_uint16_as_float);
+ }
+
+ if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE))
+ ((unsigned short*)output_buffer)[pixel_index + alpha_channel] = STBIR__ENCODE_LINEAR16(encode_buffer[pixel_index + alpha_channel]);
+ }
+
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_LINEAR):
+ for (x=0; x < num_pixels; ++x)
+ {
+ int pixel_index = x*channels;
+
+ for (n = 0; n < channels; n++)
+ {
+ int index = pixel_index + n;
+ ((unsigned int*)output_buffer)[index] = (unsigned int)STBIR__ROUND_UINT(((double)stbir__saturate(encode_buffer[index])) * stbir__max_uint32_as_float);
+ }
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_SRGB):
+ for (x=0; x < num_pixels; ++x)
+ {
+ int pixel_index = x*channels;
+
+ for (n = 0; n < num_nonalpha; n++)
+ {
+ int index = pixel_index + nonalpha[n];
+ ((unsigned int*)output_buffer)[index] = (unsigned int)STBIR__ROUND_UINT(((double)stbir__linear_to_srgb(stbir__saturate(encode_buffer[index]))) * stbir__max_uint32_as_float);
+ }
+
+ if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE))
+ ((unsigned int*)output_buffer)[pixel_index + alpha_channel] = (unsigned int)STBIR__ROUND_INT(((double)stbir__saturate(encode_buffer[pixel_index + alpha_channel])) * stbir__max_uint32_as_float);
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_LINEAR):
+ for (x=0; x < num_pixels; ++x)
+ {
+ int pixel_index = x*channels;
+
+ for (n = 0; n < channels; n++)
+ {
+ int index = pixel_index + n;
+ ((float*)output_buffer)[index] = encode_buffer[index];
+ }
+ }
+ break;
+
+ case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_SRGB):
+ for (x=0; x < num_pixels; ++x)
+ {
+ int pixel_index = x*channels;
+
+ for (n = 0; n < num_nonalpha; n++)
+ {
+ int index = pixel_index + nonalpha[n];
+ ((float*)output_buffer)[index] = stbir__linear_to_srgb(encode_buffer[index]);
+ }
+
+ if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE))
+ ((float*)output_buffer)[pixel_index + alpha_channel] = encode_buffer[pixel_index + alpha_channel];
+ }
+ break;
+
+ default:
+ STBIR_ASSERT(!"Unknown type/colorspace/channels combination.");
+ break;
+ }
+}
+
+static void stbir__resample_vertical_upsample(stbir__info* stbir_info, int n)
+{
+ int x, k;
+ int output_w = stbir_info->output_w;
+ stbir__contributors* vertical_contributors = stbir_info->vertical_contributors;
+ float* vertical_coefficients = stbir_info->vertical_coefficients;
+ int channels = stbir_info->channels;
+ int alpha_channel = stbir_info->alpha_channel;
+ int type = stbir_info->type;
+ int colorspace = stbir_info->colorspace;
+ int ring_buffer_entries = stbir_info->ring_buffer_num_entries;
+ void* output_data = stbir_info->output_data;
+ float* encode_buffer = stbir_info->encode_buffer;
+ int decode = STBIR__DECODE(type, colorspace);
+ int coefficient_width = stbir_info->vertical_coefficient_width;
+ int coefficient_counter;
+ int contributor = n;
+
+ float* ring_buffer = stbir_info->ring_buffer;
+ int ring_buffer_begin_index = stbir_info->ring_buffer_begin_index;
+ int ring_buffer_first_scanline = stbir_info->ring_buffer_first_scanline;
+ int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float);
+
+ int n0,n1, output_row_start;
+ int coefficient_group = coefficient_width * contributor;
+
+ n0 = vertical_contributors[contributor].n0;
+ n1 = vertical_contributors[contributor].n1;
+
+ output_row_start = n * stbir_info->output_stride_bytes;
+
+ STBIR_ASSERT(stbir__use_height_upsampling(stbir_info));
+
+ memset(encode_buffer, 0, output_w * sizeof(float) * channels);
+
+ // I tried reblocking this for better cache usage of encode_buffer
+ // (using x_outer, k, x_inner), but it lost speed. -- stb
+
+ coefficient_counter = 0;
+ switch (channels) {
+ case 1:
+ for (k = n0; k <= n1; k++)
+ {
+ int coefficient_index = coefficient_counter++;
+ float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length);
+ float coefficient = vertical_coefficients[coefficient_group + coefficient_index];
+ for (x = 0; x < output_w; ++x)
+ {
+ int in_pixel_index = x * 1;
+ encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient;
+ }
+ }
+ break;
+ case 2:
+ for (k = n0; k <= n1; k++)
+ {
+ int coefficient_index = coefficient_counter++;
+ float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length);
+ float coefficient = vertical_coefficients[coefficient_group + coefficient_index];
+ for (x = 0; x < output_w; ++x)
+ {
+ int in_pixel_index = x * 2;
+ encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient;
+ encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient;
+ }
+ }
+ break;
+ case 3:
+ for (k = n0; k <= n1; k++)
+ {
+ int coefficient_index = coefficient_counter++;
+ float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length);
+ float coefficient = vertical_coefficients[coefficient_group + coefficient_index];
+ for (x = 0; x < output_w; ++x)
+ {
+ int in_pixel_index = x * 3;
+ encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient;
+ encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient;
+ encode_buffer[in_pixel_index + 2] += ring_buffer_entry[in_pixel_index + 2] * coefficient;
+ }
+ }
+ break;
+ case 4:
+ for (k = n0; k <= n1; k++)
+ {
+ int coefficient_index = coefficient_counter++;
+ float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length);
+ float coefficient = vertical_coefficients[coefficient_group + coefficient_index];
+ for (x = 0; x < output_w; ++x)
+ {
+ int in_pixel_index = x * 4;
+ encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient;
+ encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient;
+ encode_buffer[in_pixel_index + 2] += ring_buffer_entry[in_pixel_index + 2] * coefficient;
+ encode_buffer[in_pixel_index + 3] += ring_buffer_entry[in_pixel_index + 3] * coefficient;
+ }
+ }
+ break;
+ default:
+ for (k = n0; k <= n1; k++)
+ {
+ int coefficient_index = coefficient_counter++;
+ float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length);
+ float coefficient = vertical_coefficients[coefficient_group + coefficient_index];
+ for (x = 0; x < output_w; ++x)
+ {
+ int in_pixel_index = x * channels;
+ int c;
+ for (c = 0; c < channels; c++)
+ encode_buffer[in_pixel_index + c] += ring_buffer_entry[in_pixel_index + c] * coefficient;
+ }
+ }
+ break;
+ }
+ stbir__encode_scanline(stbir_info, output_w, (char *) output_data + output_row_start, encode_buffer, channels, alpha_channel, decode);
+}
+
+static void stbir__resample_vertical_downsample(stbir__info* stbir_info, int n)
+{
+ int x, k;
+ int output_w = stbir_info->output_w;
+ stbir__contributors* vertical_contributors = stbir_info->vertical_contributors;
+ float* vertical_coefficients = stbir_info->vertical_coefficients;
+ int channels = stbir_info->channels;
+ int ring_buffer_entries = stbir_info->ring_buffer_num_entries;
+ float* horizontal_buffer = stbir_info->horizontal_buffer;
+ int coefficient_width = stbir_info->vertical_coefficient_width;
+ int contributor = n + stbir_info->vertical_filter_pixel_margin;
+
+ float* ring_buffer = stbir_info->ring_buffer;
+ int ring_buffer_begin_index = stbir_info->ring_buffer_begin_index;
+ int ring_buffer_first_scanline = stbir_info->ring_buffer_first_scanline;
+ int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float);
+ int n0,n1;
+
+ n0 = vertical_contributors[contributor].n0;
+ n1 = vertical_contributors[contributor].n1;
+
+ STBIR_ASSERT(!stbir__use_height_upsampling(stbir_info));
+
+ for (k = n0; k <= n1; k++)
+ {
+ int coefficient_index = k - n0;
+ int coefficient_group = coefficient_width * contributor;
+ float coefficient = vertical_coefficients[coefficient_group + coefficient_index];
+
+ float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length);
+
+ switch (channels) {
+ case 1:
+ for (x = 0; x < output_w; x++)
+ {
+ int in_pixel_index = x * 1;
+ ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient;
+ }
+ break;
+ case 2:
+ for (x = 0; x < output_w; x++)
+ {
+ int in_pixel_index = x * 2;
+ ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient;
+ ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient;
+ }
+ break;
+ case 3:
+ for (x = 0; x < output_w; x++)
+ {
+ int in_pixel_index = x * 3;
+ ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient;
+ ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient;
+ ring_buffer_entry[in_pixel_index + 2] += horizontal_buffer[in_pixel_index + 2] * coefficient;
+ }
+ break;
+ case 4:
+ for (x = 0; x < output_w; x++)
+ {
+ int in_pixel_index = x * 4;
+ ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient;
+ ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient;
+ ring_buffer_entry[in_pixel_index + 2] += horizontal_buffer[in_pixel_index + 2] * coefficient;
+ ring_buffer_entry[in_pixel_index + 3] += horizontal_buffer[in_pixel_index + 3] * coefficient;
+ }
+ break;
+ default:
+ for (x = 0; x < output_w; x++)
+ {
+ int in_pixel_index = x * channels;
+
+ int c;
+ for (c = 0; c < channels; c++)
+ ring_buffer_entry[in_pixel_index + c] += horizontal_buffer[in_pixel_index + c] * coefficient;
+ }
+ break;
+ }
+ }
+}
+
+static void stbir__buffer_loop_upsample(stbir__info* stbir_info)
+{
+ int y;
+ float scale_ratio = stbir_info->vertical_scale;
+ float out_scanlines_radius = stbir__filter_info_table[stbir_info->vertical_filter].support(1/scale_ratio) * scale_ratio;
+
+ STBIR_ASSERT(stbir__use_height_upsampling(stbir_info));
+
+ for (y = 0; y < stbir_info->output_h; y++)
+ {
+ float in_center_of_out = 0; // Center of the current out scanline in the in scanline space
+ int in_first_scanline = 0, in_last_scanline = 0;
+
+ stbir__calculate_sample_range_upsample(y, out_scanlines_radius, scale_ratio, stbir_info->vertical_shift, &in_first_scanline, &in_last_scanline, &in_center_of_out);
+
+ STBIR_ASSERT(in_last_scanline - in_first_scanline + 1 <= stbir_info->ring_buffer_num_entries);
+
+ if (stbir_info->ring_buffer_begin_index >= 0)
+ {
+ // Get rid of whatever we don't need anymore.
+ while (in_first_scanline > stbir_info->ring_buffer_first_scanline)
+ {
+ if (stbir_info->ring_buffer_first_scanline == stbir_info->ring_buffer_last_scanline)
+ {
+ // We just popped the last scanline off the ring buffer.
+ // Reset it to the empty state.
+ stbir_info->ring_buffer_begin_index = -1;
+ stbir_info->ring_buffer_first_scanline = 0;
+ stbir_info->ring_buffer_last_scanline = 0;
+ break;
+ }
+ else
+ {
+ stbir_info->ring_buffer_first_scanline++;
+ stbir_info->ring_buffer_begin_index = (stbir_info->ring_buffer_begin_index + 1) % stbir_info->ring_buffer_num_entries;
+ }
+ }
+ }
+
+ // Load in new ones.
+ if (stbir_info->ring_buffer_begin_index < 0)
+ stbir__decode_and_resample_upsample(stbir_info, in_first_scanline);
+
+ while (in_last_scanline > stbir_info->ring_buffer_last_scanline)
+ stbir__decode_and_resample_upsample(stbir_info, stbir_info->ring_buffer_last_scanline + 1);
+
+ // Now all buffers should be ready to write a row of vertical sampling.
+ stbir__resample_vertical_upsample(stbir_info, y);
+
+ STBIR_PROGRESS_REPORT((float)y / stbir_info->output_h);
+ }
+}
+
+static void stbir__empty_ring_buffer(stbir__info* stbir_info, int first_necessary_scanline)
+{
+ int output_stride_bytes = stbir_info->output_stride_bytes;
+ int channels = stbir_info->channels;
+ int alpha_channel = stbir_info->alpha_channel;
+ int type = stbir_info->type;
+ int colorspace = stbir_info->colorspace;
+ int output_w = stbir_info->output_w;
+ void* output_data = stbir_info->output_data;
+ int decode = STBIR__DECODE(type, colorspace);
+
+ float* ring_buffer = stbir_info->ring_buffer;
+ int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float);
+
+ if (stbir_info->ring_buffer_begin_index >= 0)
+ {
+ // Get rid of whatever we don't need anymore.
+ while (first_necessary_scanline > stbir_info->ring_buffer_first_scanline)
+ {
+ if (stbir_info->ring_buffer_first_scanline >= 0 && stbir_info->ring_buffer_first_scanline < stbir_info->output_h)
+ {
+ int output_row_start = stbir_info->ring_buffer_first_scanline * output_stride_bytes;
+ float* ring_buffer_entry = stbir__get_ring_buffer_entry(ring_buffer, stbir_info->ring_buffer_begin_index, ring_buffer_length);
+ stbir__encode_scanline(stbir_info, output_w, (char *) output_data + output_row_start, ring_buffer_entry, channels, alpha_channel, decode);
+ STBIR_PROGRESS_REPORT((float)stbir_info->ring_buffer_first_scanline / stbir_info->output_h);
+ }
+
+ if (stbir_info->ring_buffer_first_scanline == stbir_info->ring_buffer_last_scanline)
+ {
+ // We just popped the last scanline off the ring buffer.
+ // Reset it to the empty state.
+ stbir_info->ring_buffer_begin_index = -1;
+ stbir_info->ring_buffer_first_scanline = 0;
+ stbir_info->ring_buffer_last_scanline = 0;
+ break;
+ }
+ else
+ {
+ stbir_info->ring_buffer_first_scanline++;
+ stbir_info->ring_buffer_begin_index = (stbir_info->ring_buffer_begin_index + 1) % stbir_info->ring_buffer_num_entries;
+ }
+ }
+ }
+}
+
+static void stbir__buffer_loop_downsample(stbir__info* stbir_info)
+{
+ int y;
+ float scale_ratio = stbir_info->vertical_scale;
+ int output_h = stbir_info->output_h;
+ float in_pixels_radius = stbir__filter_info_table[stbir_info->vertical_filter].support(scale_ratio) / scale_ratio;
+ int pixel_margin = stbir_info->vertical_filter_pixel_margin;
+ int max_y = stbir_info->input_h + pixel_margin;
+
+ STBIR_ASSERT(!stbir__use_height_upsampling(stbir_info));
+
+ for (y = -pixel_margin; y < max_y; y++)
+ {
+ float out_center_of_in; // Center of the current out scanline in the in scanline space
+ int out_first_scanline, out_last_scanline;
+
+ stbir__calculate_sample_range_downsample(y, in_pixels_radius, scale_ratio, stbir_info->vertical_shift, &out_first_scanline, &out_last_scanline, &out_center_of_in);
+
+ STBIR_ASSERT(out_last_scanline - out_first_scanline + 1 <= stbir_info->ring_buffer_num_entries);
+
+ if (out_last_scanline < 0 || out_first_scanline >= output_h)
+ continue;
+
+ stbir__empty_ring_buffer(stbir_info, out_first_scanline);
+
+ stbir__decode_and_resample_downsample(stbir_info, y);
+
+ // Load in new ones.
+ if (stbir_info->ring_buffer_begin_index < 0)
+ stbir__add_empty_ring_buffer_entry(stbir_info, out_first_scanline);
+
+ while (out_last_scanline > stbir_info->ring_buffer_last_scanline)
+ stbir__add_empty_ring_buffer_entry(stbir_info, stbir_info->ring_buffer_last_scanline + 1);
+
+ // Now the horizontal buffer is ready to write to all ring buffer rows.
+ stbir__resample_vertical_downsample(stbir_info, y);
+ }
+
+ stbir__empty_ring_buffer(stbir_info, stbir_info->output_h);
+}
+
+static void stbir__setup(stbir__info *info, int input_w, int input_h, int output_w, int output_h, int channels)
+{
+ info->input_w = input_w;
+ info->input_h = input_h;
+ info->output_w = output_w;
+ info->output_h = output_h;
+ info->channels = channels;
+}
+
+static void stbir__calculate_transform(stbir__info *info, float s0, float t0, float s1, float t1, float *transform)
+{
+ info->s0 = s0;
+ info->t0 = t0;
+ info->s1 = s1;
+ info->t1 = t1;
+
+ if (transform)
+ {
+ info->horizontal_scale = transform[0];
+ info->vertical_scale = transform[1];
+ info->horizontal_shift = transform[2];
+ info->vertical_shift = transform[3];
+ }
+ else
+ {
+ info->horizontal_scale = ((float)info->output_w / info->input_w) / (s1 - s0);
+ info->vertical_scale = ((float)info->output_h / info->input_h) / (t1 - t0);
+
+ info->horizontal_shift = s0 * info->output_w / (s1 - s0);
+ info->vertical_shift = t0 * info->output_h / (t1 - t0);
+ }
+}
+
+static void stbir__choose_filter(stbir__info *info, stbir_filter h_filter, stbir_filter v_filter)
+{
+ if (h_filter == 0)
+ h_filter = stbir__use_upsampling(info->horizontal_scale) ? STBIR_DEFAULT_FILTER_UPSAMPLE : STBIR_DEFAULT_FILTER_DOWNSAMPLE;
+ if (v_filter == 0)
+ v_filter = stbir__use_upsampling(info->vertical_scale) ? STBIR_DEFAULT_FILTER_UPSAMPLE : STBIR_DEFAULT_FILTER_DOWNSAMPLE;
+ info->horizontal_filter = h_filter;
+ info->vertical_filter = v_filter;
+}
+
+static stbir_uint32 stbir__calculate_memory(stbir__info *info)
+{
+ int pixel_margin = stbir__get_filter_pixel_margin(info->horizontal_filter, info->horizontal_scale);
+ int filter_height = stbir__get_filter_pixel_width(info->vertical_filter, info->vertical_scale);
+
+ info->horizontal_num_contributors = stbir__get_contributors(info->horizontal_scale, info->horizontal_filter, info->input_w, info->output_w);
+ info->vertical_num_contributors = stbir__get_contributors(info->vertical_scale , info->vertical_filter , info->input_h, info->output_h);
+
+ // One extra entry because floating point precision problems sometimes cause an extra to be necessary.
+ info->ring_buffer_num_entries = filter_height + 1;
+
+ info->horizontal_contributors_size = info->horizontal_num_contributors * sizeof(stbir__contributors);
+ info->horizontal_coefficients_size = stbir__get_total_horizontal_coefficients(info) * sizeof(float);
+ info->vertical_contributors_size = info->vertical_num_contributors * sizeof(stbir__contributors);
+ info->vertical_coefficients_size = stbir__get_total_vertical_coefficients(info) * sizeof(float);
+ info->decode_buffer_size = (info->input_w + pixel_margin * 2) * info->channels * sizeof(float);
+ info->horizontal_buffer_size = info->output_w * info->channels * sizeof(float);
+ info->ring_buffer_size = info->output_w * info->channels * info->ring_buffer_num_entries * sizeof(float);
+ info->encode_buffer_size = info->output_w * info->channels * sizeof(float);
+
+ STBIR_ASSERT(info->horizontal_filter != 0);
+ STBIR_ASSERT(info->horizontal_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late
+ STBIR_ASSERT(info->vertical_filter != 0);
+ STBIR_ASSERT(info->vertical_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late
+
+ if (stbir__use_height_upsampling(info))
+ // The horizontal buffer is for when we're downsampling the height and we
+ // can't output the result of sampling the decode buffer directly into the
+ // ring buffers.
+ info->horizontal_buffer_size = 0;
+ else
+ // The encode buffer is to retain precision in the height upsampling method
+ // and isn't used when height downsampling.
+ info->encode_buffer_size = 0;
+
+ return info->horizontal_contributors_size + info->horizontal_coefficients_size
+ + info->vertical_contributors_size + info->vertical_coefficients_size
+ + info->decode_buffer_size + info->horizontal_buffer_size
+ + info->ring_buffer_size + info->encode_buffer_size;
+}
+
+static int stbir__resize_allocated(stbir__info *info,
+ const void* input_data, int input_stride_in_bytes,
+ void* output_data, int output_stride_in_bytes,
+ int alpha_channel, stbir_uint32 flags, stbir_datatype type,
+ stbir_edge edge_horizontal, stbir_edge edge_vertical, stbir_colorspace colorspace,
+ void* tempmem, size_t tempmem_size_in_bytes)
+{
+ size_t memory_required = stbir__calculate_memory(info);
+
+ int width_stride_input = input_stride_in_bytes ? input_stride_in_bytes : info->channels * info->input_w * stbir__type_size[type];
+ int width_stride_output = output_stride_in_bytes ? output_stride_in_bytes : info->channels * info->output_w * stbir__type_size[type];
+
+#ifdef STBIR_DEBUG_OVERWRITE_TEST
+#define OVERWRITE_ARRAY_SIZE 8
+ unsigned char overwrite_output_before_pre[OVERWRITE_ARRAY_SIZE];
+ unsigned char overwrite_tempmem_before_pre[OVERWRITE_ARRAY_SIZE];
+ unsigned char overwrite_output_after_pre[OVERWRITE_ARRAY_SIZE];
+ unsigned char overwrite_tempmem_after_pre[OVERWRITE_ARRAY_SIZE];
+
+ size_t begin_forbidden = width_stride_output * (info->output_h - 1) + info->output_w * info->channels * stbir__type_size[type];
+ memcpy(overwrite_output_before_pre, &((unsigned char*)output_data)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE);
+ memcpy(overwrite_output_after_pre, &((unsigned char*)output_data)[begin_forbidden], OVERWRITE_ARRAY_SIZE);
+ memcpy(overwrite_tempmem_before_pre, &((unsigned char*)tempmem)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE);
+ memcpy(overwrite_tempmem_after_pre, &((unsigned char*)tempmem)[tempmem_size_in_bytes], OVERWRITE_ARRAY_SIZE);
+#endif
+
+ STBIR_ASSERT(info->channels >= 0);
+ STBIR_ASSERT(info->channels <= STBIR_MAX_CHANNELS);
+
+ if (info->channels < 0 || info->channels > STBIR_MAX_CHANNELS)
+ return 0;
+
+ STBIR_ASSERT(info->horizontal_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table));
+ STBIR_ASSERT(info->vertical_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table));
+
+ if (info->horizontal_filter >= STBIR__ARRAY_SIZE(stbir__filter_info_table))
+ return 0;
+ if (info->vertical_filter >= STBIR__ARRAY_SIZE(stbir__filter_info_table))
+ return 0;
+
+ if (alpha_channel < 0)
+ flags |= STBIR_FLAG_ALPHA_USES_COLORSPACE | STBIR_FLAG_ALPHA_PREMULTIPLIED;
+
+ if (!(flags&STBIR_FLAG_ALPHA_USES_COLORSPACE) || !(flags&STBIR_FLAG_ALPHA_PREMULTIPLIED))
+ STBIR_ASSERT(alpha_channel >= 0 && alpha_channel < info->channels);
+
+ if (alpha_channel >= info->channels)
+ return 0;
+
+ STBIR_ASSERT(tempmem);
+
+ if (!tempmem)
+ return 0;
+
+ STBIR_ASSERT(tempmem_size_in_bytes >= memory_required);
+
+ if (tempmem_size_in_bytes < memory_required)
+ return 0;
+
+ memset(tempmem, 0, tempmem_size_in_bytes);
+
+ info->input_data = input_data;
+ info->input_stride_bytes = width_stride_input;
+
+ info->output_data = output_data;
+ info->output_stride_bytes = width_stride_output;
+
+ info->alpha_channel = alpha_channel;
+ info->flags = flags;
+ info->type = type;
+ info->edge_horizontal = edge_horizontal;
+ info->edge_vertical = edge_vertical;
+ info->colorspace = colorspace;
+
+ info->horizontal_coefficient_width = stbir__get_coefficient_width (info->horizontal_filter, info->horizontal_scale);
+ info->vertical_coefficient_width = stbir__get_coefficient_width (info->vertical_filter , info->vertical_scale );
+ info->horizontal_filter_pixel_width = stbir__get_filter_pixel_width (info->horizontal_filter, info->horizontal_scale);
+ info->vertical_filter_pixel_width = stbir__get_filter_pixel_width (info->vertical_filter , info->vertical_scale );
+ info->horizontal_filter_pixel_margin = stbir__get_filter_pixel_margin(info->horizontal_filter, info->horizontal_scale);
+ info->vertical_filter_pixel_margin = stbir__get_filter_pixel_margin(info->vertical_filter , info->vertical_scale );
+
+ info->ring_buffer_length_bytes = info->output_w * info->channels * sizeof(float);
+ info->decode_buffer_pixels = info->input_w + info->horizontal_filter_pixel_margin * 2;
+
+#define STBIR__NEXT_MEMPTR(current, newtype) (newtype*)(((unsigned char*)current) + current##_size)
+
+ info->horizontal_contributors = (stbir__contributors *) tempmem;
+ info->horizontal_coefficients = STBIR__NEXT_MEMPTR(info->horizontal_contributors, float);
+ info->vertical_contributors = STBIR__NEXT_MEMPTR(info->horizontal_coefficients, stbir__contributors);
+ info->vertical_coefficients = STBIR__NEXT_MEMPTR(info->vertical_contributors, float);
+ info->decode_buffer = STBIR__NEXT_MEMPTR(info->vertical_coefficients, float);
+
+ if (stbir__use_height_upsampling(info))
+ {
+ info->horizontal_buffer = NULL;
+ info->ring_buffer = STBIR__NEXT_MEMPTR(info->decode_buffer, float);
+ info->encode_buffer = STBIR__NEXT_MEMPTR(info->ring_buffer, float);
+
+ STBIR_ASSERT((size_t)STBIR__NEXT_MEMPTR(info->encode_buffer, unsigned char) == (size_t)tempmem + tempmem_size_in_bytes);
+ }
+ else
+ {
+ info->horizontal_buffer = STBIR__NEXT_MEMPTR(info->decode_buffer, float);
+ info->ring_buffer = STBIR__NEXT_MEMPTR(info->horizontal_buffer, float);
+ info->encode_buffer = NULL;
+
+ STBIR_ASSERT((size_t)STBIR__NEXT_MEMPTR(info->ring_buffer, unsigned char) == (size_t)tempmem + tempmem_size_in_bytes);
+ }
+
+#undef STBIR__NEXT_MEMPTR
+
+ // This signals that the ring buffer is empty
+ info->ring_buffer_begin_index = -1;
+
+ stbir__calculate_filters(info->horizontal_contributors, info->horizontal_coefficients, info->horizontal_filter, info->horizontal_scale, info->horizontal_shift, info->input_w, info->output_w);
+ stbir__calculate_filters(info->vertical_contributors, info->vertical_coefficients, info->vertical_filter, info->vertical_scale, info->vertical_shift, info->input_h, info->output_h);
+
+ STBIR_PROGRESS_REPORT(0);
+
+ if (stbir__use_height_upsampling(info))
+ stbir__buffer_loop_upsample(info);
+ else
+ stbir__buffer_loop_downsample(info);
+
+ STBIR_PROGRESS_REPORT(1);
+
+#ifdef STBIR_DEBUG_OVERWRITE_TEST
+ STBIR_ASSERT(memcmp(overwrite_output_before_pre, &((unsigned char*)output_data)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE) == 0);
+ STBIR_ASSERT(memcmp(overwrite_output_after_pre, &((unsigned char*)output_data)[begin_forbidden], OVERWRITE_ARRAY_SIZE) == 0);
+ STBIR_ASSERT(memcmp(overwrite_tempmem_before_pre, &((unsigned char*)tempmem)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE) == 0);
+ STBIR_ASSERT(memcmp(overwrite_tempmem_after_pre, &((unsigned char*)tempmem)[tempmem_size_in_bytes], OVERWRITE_ARRAY_SIZE) == 0);
+#endif
+
+ return 1;
+}
+
+
+static int stbir__resize_arbitrary(
+ void *alloc_context,
+ const void* input_data, int input_w, int input_h, int input_stride_in_bytes,
+ void* output_data, int output_w, int output_h, int output_stride_in_bytes,
+ float s0, float t0, float s1, float t1, float *transform,
+ int channels, int alpha_channel, stbir_uint32 flags, stbir_datatype type,
+ stbir_filter h_filter, stbir_filter v_filter,
+ stbir_edge edge_horizontal, stbir_edge edge_vertical, stbir_colorspace colorspace)
+{
+ stbir__info info;
+ int result;
+ size_t memory_required;
+ void* extra_memory;
+
+ stbir__setup(&info, input_w, input_h, output_w, output_h, channels);
+ stbir__calculate_transform(&info, s0,t0,s1,t1,transform);
+ stbir__choose_filter(&info, h_filter, v_filter);
+ memory_required = stbir__calculate_memory(&info);
+ extra_memory = STBIR_MALLOC(memory_required, alloc_context);
+
+ if (!extra_memory)
+ return 0;
+
+ result = stbir__resize_allocated(&info, input_data, input_stride_in_bytes,
+ output_data, output_stride_in_bytes,
+ alpha_channel, flags, type,
+ edge_horizontal, edge_vertical,
+ colorspace, extra_memory, memory_required);
+
+ STBIR_FREE(extra_memory, alloc_context);
+
+ return result;
+}
+
+STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels)
+{
+ return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ 0,0,1,1,NULL,num_channels,-1,0, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT,
+ STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_LINEAR);
+}
+
+STBIRDEF int stbir_resize_float( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ float *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels)
+{
+ return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ 0,0,1,1,NULL,num_channels,-1,0, STBIR_TYPE_FLOAT, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT,
+ STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_LINEAR);
+}
+
+STBIRDEF int stbir_resize_uint8_srgb(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags)
+{
+ return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT,
+ STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_SRGB);
+}
+
+STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_wrap_mode)
+{
+ return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT,
+ edge_wrap_mode, edge_wrap_mode, STBIR_COLORSPACE_SRGB);
+}
+
+STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
+ void *alloc_context)
+{
+ return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, filter, filter,
+ edge_wrap_mode, edge_wrap_mode, space);
+}
+
+STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
+ void *alloc_context)
+{
+ return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT16, filter, filter,
+ edge_wrap_mode, edge_wrap_mode, space);
+}
+
+
+STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ float *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
+ void *alloc_context)
+{
+ return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_FLOAT, filter, filter,
+ edge_wrap_mode, edge_wrap_mode, space);
+}
+
+
+STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ stbir_datatype datatype,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
+ stbir_filter filter_horizontal, stbir_filter filter_vertical,
+ stbir_colorspace space, void *alloc_context)
+{
+ return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ 0,0,1,1,NULL,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical,
+ edge_mode_horizontal, edge_mode_vertical, space);
+}
+
+
+STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ stbir_datatype datatype,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
+ stbir_filter filter_horizontal, stbir_filter filter_vertical,
+ stbir_colorspace space, void *alloc_context,
+ float x_scale, float y_scale,
+ float x_offset, float y_offset)
+{
+ float transform[4];
+ transform[0] = x_scale;
+ transform[1] = y_scale;
+ transform[2] = x_offset;
+ transform[3] = y_offset;
+ return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ 0,0,1,1,transform,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical,
+ edge_mode_horizontal, edge_mode_vertical, space);
+}
+
+STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+ void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+ stbir_datatype datatype,
+ int num_channels, int alpha_channel, int flags,
+ stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
+ stbir_filter filter_horizontal, stbir_filter filter_vertical,
+ stbir_colorspace space, void *alloc_context,
+ float s0, float t0, float s1, float t1)
+{
+ return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
+ output_pixels, output_w, output_h, output_stride_in_bytes,
+ s0,t0,s1,t1,NULL,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical,
+ edge_mode_horizontal, edge_mode_vertical, space);
+}
+
+#endif // STB_IMAGE_RESIZE_IMPLEMENTATION
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
+software, either in source code form or as a compiled binary, for any purpose,
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
diff --git a/3rdparty/bimg/3rdparty/stb/stb_image_write.h b/3rdparty/bimg/3rdparty/stb/stb_image_write.h
new file mode 100644
index 00000000000..df623393dd0
--- /dev/null
+++ b/3rdparty/bimg/3rdparty/stb/stb_image_write.h
@@ -0,0 +1,1092 @@
+/* stb_image_write - v1.05 - public domain - http://nothings.org/stb/stb_image_write.h
+ writes out PNG/BMP/TGA images to C stdio - Sean Barrett 2010-2015
+ no warranty implied; use at your own risk
+
+ Before #including,
+
+ #define STB_IMAGE_WRITE_IMPLEMENTATION
+
+ in the file that you want to have the implementation.
+
+ Will probably not work correctly with strict-aliasing optimizations.
+
+ABOUT:
+
+ This header file is a library for writing images to C stdio. It could be
+ adapted to write to memory or a general streaming interface; let me know.
+
+ The PNG output is not optimal; it is 20-50% larger than the file
+ written by a decent optimizing implementation. This library is designed
+ for source code compactness and simplicity, not optimal image file size
+ or run-time performance.
+
+BUILDING:
+
+ You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h.
+ You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace
+ malloc,realloc,free.
+ You can define STBIW_MEMMOVE() to replace memmove()
+
+USAGE:
+
+ There are four functions, one for each image file format:
+
+ int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);
+ int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);
+ int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);
+ int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);
+
+ There are also four equivalent functions that use an arbitrary write function. You are
+ expected to open/close your file-equivalent before and after calling these:
+
+ int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes);
+ int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data);
+ int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data);
+ int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);
+
+ where the callback is:
+ void stbi_write_func(void *context, void *data, int size);
+
+ You can define STBI_WRITE_NO_STDIO to disable the file variant of these
+ functions, so the library will not use stdio.h at all. However, this will
+ also disable HDR writing, because it requires stdio for formatted output.
+
+ Each function returns 0 on failure and non-0 on success.
+
+ The functions create an image file defined by the parameters. The image
+ is a rectangle of pixels stored from left-to-right, top-to-bottom.
+ Each pixel contains 'comp' channels of data stored interleaved with 8-bits
+ per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is
+ monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall.
+ The *data pointer points to the first byte of the top-left-most pixel.
+ For PNG, "stride_in_bytes" is the distance in bytes from the first byte of
+ a row of pixels to the first byte of the next row of pixels.
+
+ PNG creates output files with the same number of components as the input.
+ The BMP format expands Y to RGB in the file format and does not
+ output alpha.
+
+ PNG supports writing rectangles of data even when the bytes storing rows of
+ data are not consecutive in memory (e.g. sub-rectangles of a larger image),
+ by supplying the stride between the beginning of adjacent rows. The other
+ formats do not. (Thus you cannot write a native-format BMP through the BMP
+ writer, both because it is in BGR order and because it may have padding
+ at the end of the line.)
+
+ HDR expects linear float data. Since the format is always 32-bit rgb(e)
+ data, alpha (if provided) is discarded, and for monochrome data it is
+ replicated across all three channels.
+
+ TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed
+ data, set the global variable 'stbi_write_tga_with_rle' to 0.
+
+CREDITS:
+
+ PNG/BMP/TGA
+ Sean Barrett
+ HDR
+ Baldur Karlsson
+ TGA monochrome:
+ Jean-Sebastien Guay
+ misc enhancements:
+ Tim Kelsey
+ TGA RLE
+ Alan Hickman
+ initial file IO callback implementation
+ Emmanuel Julien
+ bugfixes:
+ github:Chribba
+ Guillaume Chereau
+ github:jry2
+ github:romigrou
+ Sergio Gonzalez
+ Jonas Karlsson
+ Filip Wasil
+ Thatcher Ulrich
+ github:poppolopoppo
+ Patrick Boettcher
+
+LICENSE
+
+ See end of file for license information.
+
+*/
+
+#ifndef INCLUDE_STB_IMAGE_WRITE_H
+#define INCLUDE_STB_IMAGE_WRITE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef STB_IMAGE_WRITE_STATIC
+#define STBIWDEF static
+#else
+#define STBIWDEF extern
+extern int stbi_write_tga_with_rle;
+#endif
+
+#ifndef STBI_WRITE_NO_STDIO
+STBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);
+STBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);
+STBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);
+STBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);
+#endif
+
+typedef void stbi_write_func(void *context, void *data, int size);
+
+STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes);
+STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data);
+STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data);
+STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif//INCLUDE_STB_IMAGE_WRITE_H
+
+#ifdef STB_IMAGE_WRITE_IMPLEMENTATION
+
+#ifdef _WIN32
+ #ifndef _CRT_SECURE_NO_WARNINGS
+ #define _CRT_SECURE_NO_WARNINGS
+ #endif
+ #ifndef _CRT_NONSTDC_NO_DEPRECATE
+ #define _CRT_NONSTDC_NO_DEPRECATE
+ #endif
+#endif
+
+#ifndef STBI_WRITE_NO_STDIO
+#include <stdio.h>
+#endif // STBI_WRITE_NO_STDIO
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED))
+// ok
+#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED)
+// ok
+#else
+#error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED)."
+#endif
+
+#ifndef STBIW_MALLOC
+#define STBIW_MALLOC(sz) malloc(sz)
+#define STBIW_REALLOC(p,newsz) realloc(p,newsz)
+#define STBIW_FREE(p) free(p)
+#endif
+
+#ifndef STBIW_REALLOC_SIZED
+#define STBIW_REALLOC_SIZED(p,oldsz,newsz) STBIW_REALLOC(p,newsz)
+#endif
+
+
+#ifndef STBIW_MEMMOVE
+#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz)
+#endif
+
+
+#ifndef STBIW_ASSERT
+#include <assert.h>
+#define STBIW_ASSERT(x) assert(x)
+#endif
+
+#define STBIW_UCHAR(x) (unsigned char) ((x) & 0xff)
+
+typedef struct
+{
+ stbi_write_func *func;
+ void *context;
+} stbi__write_context;
+
+// initialize a callback-based context
+static void stbi__start_write_callbacks(stbi__write_context *s, stbi_write_func *c, void *context)
+{
+ s->func = c;
+ s->context = context;
+}
+
+#ifndef STBI_WRITE_NO_STDIO
+
+static void stbi__stdio_write(void *context, void *data, int size)
+{
+ fwrite(data,1,size,(FILE*) context);
+}
+
+static int stbi__start_write_file(stbi__write_context *s, const char *filename)
+{
+ FILE *f = fopen(filename, "wb");
+ stbi__start_write_callbacks(s, stbi__stdio_write, (void *) f);
+ return f != NULL;
+}
+
+static void stbi__end_write_file(stbi__write_context *s)
+{
+ fclose((FILE *)s->context);
+}
+
+#endif // !STBI_WRITE_NO_STDIO
+
+typedef unsigned int stbiw_uint32;
+typedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1];
+
+#ifdef STB_IMAGE_WRITE_STATIC
+static int stbi_write_tga_with_rle = 1;
+#else
+int stbi_write_tga_with_rle = 1;
+#endif
+
+static void stbiw__writefv(stbi__write_context *s, const char *fmt, va_list v)
+{
+ while (*fmt) {
+ switch (*fmt++) {
+ case ' ': break;
+ case '1': { unsigned char x = STBIW_UCHAR(va_arg(v, int));
+ s->func(s->context,&x,1);
+ break; }
+ case '2': { int x = va_arg(v,int);
+ unsigned char b[2];
+ b[0] = STBIW_UCHAR(x);
+ b[1] = STBIW_UCHAR(x>>8);
+ s->func(s->context,b,2);
+ break; }
+ case '4': { stbiw_uint32 x = va_arg(v,int);
+ unsigned char b[4];
+ b[0]=STBIW_UCHAR(x);
+ b[1]=STBIW_UCHAR(x>>8);
+ b[2]=STBIW_UCHAR(x>>16);
+ b[3]=STBIW_UCHAR(x>>24);
+ s->func(s->context,b,4);
+ break; }
+ default:
+ STBIW_ASSERT(0);
+ return;
+ }
+ }
+}
+
+static void stbiw__writef(stbi__write_context *s, const char *fmt, ...)
+{
+ va_list v;
+ va_start(v, fmt);
+ stbiw__writefv(s, fmt, v);
+ va_end(v);
+}
+
+static void stbiw__write3(stbi__write_context *s, unsigned char a, unsigned char b, unsigned char c)
+{
+ unsigned char arr[3];
+ arr[0] = a, arr[1] = b, arr[2] = c;
+ s->func(s->context, arr, 3);
+}
+
+static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char *d)
+{
+ unsigned char bg[3] = { 255, 0, 255}, px[3];
+ int k;
+
+ if (write_alpha < 0)
+ s->func(s->context, &d[comp - 1], 1);
+
+ switch (comp) {
+ case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case
+ case 1:
+ if (expand_mono)
+ stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp
+ else
+ s->func(s->context, d, 1); // monochrome TGA
+ break;
+ case 4:
+ if (!write_alpha) {
+ // composite against pink background
+ for (k = 0; k < 3; ++k)
+ px[k] = bg[k] + ((d[k] - bg[k]) * d[3]) / 255;
+ stbiw__write3(s, px[1 - rgb_dir], px[1], px[1 + rgb_dir]);
+ break;
+ }
+ /* FALLTHROUGH */
+ case 3:
+ stbiw__write3(s, d[1 - rgb_dir], d[1], d[1 + rgb_dir]);
+ break;
+ }
+ if (write_alpha > 0)
+ s->func(s->context, &d[comp - 1], 1);
+}
+
+static void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono)
+{
+ stbiw_uint32 zero = 0;
+ int i,j, j_end;
+
+ if (y <= 0)
+ return;
+
+ if (vdir < 0)
+ j_end = -1, j = y-1;
+ else
+ j_end = y, j = 0;
+
+ for (; j != j_end; j += vdir) {
+ for (i=0; i < x; ++i) {
+ unsigned char *d = (unsigned char *) data + (j*x+i)*comp;
+ stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d);
+ }
+ s->func(s->context, &zero, scanline_pad);
+ }
+}
+
+static int stbiw__outfile(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...)
+{
+ if (y < 0 || x < 0) {
+ return 0;
+ } else {
+ va_list v;
+ va_start(v, fmt);
+ stbiw__writefv(s, fmt, v);
+ va_end(v);
+ stbiw__write_pixels(s,rgb_dir,vdir,x,y,comp,data,alpha,pad, expand_mono);
+ return 1;
+ }
+}
+
+static int stbi_write_bmp_core(stbi__write_context *s, int x, int y, int comp, const void *data)
+{
+ int pad = (-x*3) & 3;
+ return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *) data,0,pad,
+ "11 4 22 4" "4 44 22 444444",
+ 'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header
+ 40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header
+}
+
+STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data)
+{
+ stbi__write_context s;
+ stbi__start_write_callbacks(&s, func, context);
+ return stbi_write_bmp_core(&s, x, y, comp, data);
+}
+
+#ifndef STBI_WRITE_NO_STDIO
+STBIWDEF int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data)
+{
+ stbi__write_context s;
+ if (stbi__start_write_file(&s,filename)) {
+ int r = stbi_write_bmp_core(&s, x, y, comp, data);
+ stbi__end_write_file(&s);
+ return r;
+ } else
+ return 0;
+}
+#endif //!STBI_WRITE_NO_STDIO
+
+static int stbi_write_tga_core(stbi__write_context *s, int x, int y, int comp, void *data)
+{
+ int has_alpha = (comp == 2 || comp == 4);
+ int colorbytes = has_alpha ? comp-1 : comp;
+ int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3
+
+ if (y < 0 || x < 0)
+ return 0;
+
+ if (!stbi_write_tga_with_rle) {
+ return stbiw__outfile(s, -1, -1, x, y, comp, 0, (void *) data, has_alpha, 0,
+ "111 221 2222 11", 0, 0, format, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8);
+ } else {
+ int i,j,k;
+
+ stbiw__writef(s, "111 221 2222 11", 0,0,format+8, 0,0,0, 0,0,x,y, (colorbytes + has_alpha) * 8, has_alpha * 8);
+
+ for (j = y - 1; j >= 0; --j) {
+ unsigned char *row = (unsigned char *) data + j * x * comp;
+ int len;
+
+ for (i = 0; i < x; i += len) {
+ unsigned char *begin = row + i * comp;
+ int diff = 1;
+ len = 1;
+
+ if (i < x - 1) {
+ ++len;
+ diff = memcmp(begin, row + (i + 1) * comp, comp);
+ if (diff) {
+ const unsigned char *prev = begin;
+ for (k = i + 2; k < x && len < 128; ++k) {
+ if (memcmp(prev, row + k * comp, comp)) {
+ prev += comp;
+ ++len;
+ } else {
+ --len;
+ break;
+ }
+ }
+ } else {
+ for (k = i + 2; k < x && len < 128; ++k) {
+ if (!memcmp(begin, row + k * comp, comp)) {
+ ++len;
+ } else {
+ break;
+ }
+ }
+ }
+ }
+
+ if (diff) {
+ unsigned char header = STBIW_UCHAR(len - 1);
+ s->func(s->context, &header, 1);
+ for (k = 0; k < len; ++k) {
+ stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp);
+ }
+ } else {
+ unsigned char header = STBIW_UCHAR(len - 129);
+ s->func(s->context, &header, 1);
+ stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin);
+ }
+ }
+ }
+ }
+ return 1;
+}
+
+int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data)
+{
+ stbi__write_context s;
+ stbi__start_write_callbacks(&s, func, context);
+ return stbi_write_tga_core(&s, x, y, comp, (void *) data);
+}
+
+#ifndef STBI_WRITE_NO_STDIO
+int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data)
+{
+ stbi__write_context s;
+ if (stbi__start_write_file(&s,filename)) {
+ int r = stbi_write_tga_core(&s, x, y, comp, (void *) data);
+ stbi__end_write_file(&s);
+ return r;
+ } else
+ return 0;
+}
+#endif
+
+// *************************************************************************************************
+// Radiance RGBE HDR writer
+// by Baldur Karlsson
+
+#define stbiw__max(a, b) ((a) > (b) ? (a) : (b))
+
+void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear)
+{
+ int exponent;
+ float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2]));
+
+ if (maxcomp < 1e-32f) {
+ rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0;
+ } else {
+ float normalize = (float) frexp(maxcomp, &exponent) * 256.0f/maxcomp;
+
+ rgbe[0] = (unsigned char)(linear[0] * normalize);
+ rgbe[1] = (unsigned char)(linear[1] * normalize);
+ rgbe[2] = (unsigned char)(linear[2] * normalize);
+ rgbe[3] = (unsigned char)(exponent + 128);
+ }
+}
+
+void stbiw__write_run_data(stbi__write_context *s, int length, unsigned char databyte)
+{
+ unsigned char lengthbyte = STBIW_UCHAR(length+128);
+ STBIW_ASSERT(length+128 <= 255);
+ s->func(s->context, &lengthbyte, 1);
+ s->func(s->context, &databyte, 1);
+}
+
+void stbiw__write_dump_data(stbi__write_context *s, int length, unsigned char *data)
+{
+ unsigned char lengthbyte = STBIW_UCHAR(length);
+ STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code
+ s->func(s->context, &lengthbyte, 1);
+ s->func(s->context, data, length);
+}
+
+void stbiw__write_hdr_scanline(stbi__write_context *s, int width, int ncomp, unsigned char *scratch, float *scanline)
+{
+ unsigned char scanlineheader[4] = { 2, 2, 0, 0 };
+ unsigned char rgbe[4];
+ float linear[3];
+ int x;
+
+ scanlineheader[2] = (width&0xff00)>>8;
+ scanlineheader[3] = (width&0x00ff);
+
+ /* skip RLE for images too small or large */
+ if (width < 8 || width >= 32768) {
+ for (x=0; x < width; x++) {
+ switch (ncomp) {
+ case 4: /* fallthrough */
+ case 3: linear[2] = scanline[x*ncomp + 2];
+ linear[1] = scanline[x*ncomp + 1];
+ linear[0] = scanline[x*ncomp + 0];
+ break;
+ default:
+ linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0];
+ break;
+ }
+ stbiw__linear_to_rgbe(rgbe, linear);
+ s->func(s->context, rgbe, 4);
+ }
+ } else {
+ int c,r;
+ /* encode into scratch buffer */
+ for (x=0; x < width; x++) {
+ switch(ncomp) {
+ case 4: /* fallthrough */
+ case 3: linear[2] = scanline[x*ncomp + 2];
+ linear[1] = scanline[x*ncomp + 1];
+ linear[0] = scanline[x*ncomp + 0];
+ break;
+ default:
+ linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0];
+ break;
+ }
+ stbiw__linear_to_rgbe(rgbe, linear);
+ scratch[x + width*0] = rgbe[0];
+ scratch[x + width*1] = rgbe[1];
+ scratch[x + width*2] = rgbe[2];
+ scratch[x + width*3] = rgbe[3];
+ }
+
+ s->func(s->context, scanlineheader, 4);
+
+ /* RLE each component separately */
+ for (c=0; c < 4; c++) {
+ unsigned char *comp = &scratch[width*c];
+
+ x = 0;
+ while (x < width) {
+ // find first run
+ r = x;
+ while (r+2 < width) {
+ if (comp[r] == comp[r+1] && comp[r] == comp[r+2])
+ break;
+ ++r;
+ }
+ if (r+2 >= width)
+ r = width;
+ // dump up to first run
+ while (x < r) {
+ int len = r-x;
+ if (len > 128) len = 128;
+ stbiw__write_dump_data(s, len, &comp[x]);
+ x += len;
+ }
+ // if there's a run, output it
+ if (r+2 < width) { // same test as what we break out of in search loop, so only true if we break'd
+ // find next byte after run
+ while (r < width && comp[r] == comp[x])
+ ++r;
+ // output run up to r
+ while (x < r) {
+ int len = r-x;
+ if (len > 127) len = 127;
+ stbiw__write_run_data(s, len, comp[x]);
+ x += len;
+ }
+ }
+ }
+ }
+ }
+}
+
+static int stbi_write_hdr_core(stbi__write_context *s, int x, int y, int comp, float *data)
+{
+ if (y <= 0 || x <= 0 || data == NULL)
+ return 0;
+ else {
+ // Each component is stored separately. Allocate scratch space for full output scanline.
+ unsigned char *scratch = (unsigned char *) STBIW_MALLOC(x*4);
+ int i, len;
+ char buffer[128];
+ char header[] = "#?RADIANCE\n# Written by stb_image_write.h\nFORMAT=32-bit_rle_rgbe\n";
+ s->func(s->context, header, sizeof(header)-1);
+
+ len = sprintf(buffer, "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x);
+ s->func(s->context, buffer, len);
+
+ for(i=0; i < y; i++)
+ stbiw__write_hdr_scanline(s, x, comp, scratch, data + comp*i*x);
+ STBIW_FREE(scratch);
+ return 1;
+ }
+}
+
+int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const float *data)
+{
+ stbi__write_context s;
+ stbi__start_write_callbacks(&s, func, context);
+ return stbi_write_hdr_core(&s, x, y, comp, (float *) data);
+}
+
+#ifndef STBI_WRITE_NO_STDIO
+int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data)
+{
+ stbi__write_context s;
+ if (stbi__start_write_file(&s,filename)) {
+ int r = stbi_write_hdr_core(&s, x, y, comp, (float *) data);
+ stbi__end_write_file(&s);
+ return r;
+ } else
+ return 0;
+}
+#endif // STBI_WRITE_NO_STDIO
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// PNG writer
+//
+
+// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size()
+#define stbiw__sbraw(a) ((int *) (a) - 2)
+#define stbiw__sbm(a) stbiw__sbraw(a)[0]
+#define stbiw__sbn(a) stbiw__sbraw(a)[1]
+
+#define stbiw__sbneedgrow(a,n) ((a)==0 || stbiw__sbn(a)+n >= stbiw__sbm(a))
+#define stbiw__sbmaybegrow(a,n) (stbiw__sbneedgrow(a,(n)) ? stbiw__sbgrow(a,n) : 0)
+#define stbiw__sbgrow(a,n) stbiw__sbgrowf((void **) &(a), (n), sizeof(*(a)))
+
+#define stbiw__sbpush(a, v) (stbiw__sbmaybegrow(a,1), (a)[stbiw__sbn(a)++] = (v))
+#define stbiw__sbcount(a) ((a) ? stbiw__sbn(a) : 0)
+#define stbiw__sbfree(a) ((a) ? STBIW_FREE(stbiw__sbraw(a)),0 : 0)
+
+static void *stbiw__sbgrowf(void **arr, int increment, int itemsize)
+{
+ int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1;
+ void *p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2);
+ STBIW_ASSERT(p);
+ if (p) {
+ if (!*arr) ((int *) p)[1] = 0;
+ *arr = (void *) ((int *) p + 2);
+ stbiw__sbm(*arr) = m;
+ }
+ return *arr;
+}
+
+static unsigned char *stbiw__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount)
+{
+ while (*bitcount >= 8) {
+ stbiw__sbpush(data, STBIW_UCHAR(*bitbuffer));
+ *bitbuffer >>= 8;
+ *bitcount -= 8;
+ }
+ return data;
+}
+
+static int stbiw__zlib_bitrev(int code, int codebits)
+{
+ int res=0;
+ while (codebits--) {
+ res = (res << 1) | (code & 1);
+ code >>= 1;
+ }
+ return res;
+}
+
+static unsigned int stbiw__zlib_countm(unsigned char *a, unsigned char *b, int limit)
+{
+ int i;
+ for (i=0; i < limit && i < 258; ++i)
+ if (a[i] != b[i]) break;
+ return i;
+}
+
+static unsigned int stbiw__zhash(unsigned char *data)
+{
+ stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16);
+ hash ^= hash << 3;
+ hash += hash >> 5;
+ hash ^= hash << 4;
+ hash += hash >> 17;
+ hash ^= hash << 25;
+ hash += hash >> 6;
+ return hash;
+}
+
+#define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount))
+#define stbiw__zlib_add(code,codebits) \
+ (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush())
+#define stbiw__zlib_huffa(b,c) stbiw__zlib_add(stbiw__zlib_bitrev(b,c),c)
+// default huffman tables
+#define stbiw__zlib_huff1(n) stbiw__zlib_huffa(0x30 + (n), 8)
+#define stbiw__zlib_huff2(n) stbiw__zlib_huffa(0x190 + (n)-144, 9)
+#define stbiw__zlib_huff3(n) stbiw__zlib_huffa(0 + (n)-256,7)
+#define stbiw__zlib_huff4(n) stbiw__zlib_huffa(0xc0 + (n)-280,8)
+#define stbiw__zlib_huff(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) : (n) <= 279 ? stbiw__zlib_huff3(n) : stbiw__zlib_huff4(n))
+#define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n))
+
+#define stbiw__ZHASH 16384
+
+unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality)
+{
+ static unsigned short lengthc[] = { 3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258, 259 };
+ static unsigned char lengtheb[]= { 0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 };
+ static unsigned short distc[] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 32768 };
+ static unsigned char disteb[] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 };
+ unsigned int bitbuf=0;
+ int i,j, bitcount=0;
+ unsigned char *out = NULL;
+ unsigned char ***hash_table = (unsigned char***) STBIW_MALLOC(stbiw__ZHASH * sizeof(char**));
+ if (quality < 5) quality = 5;
+
+ stbiw__sbpush(out, 0x78); // DEFLATE 32K window
+ stbiw__sbpush(out, 0x5e); // FLEVEL = 1
+ stbiw__zlib_add(1,1); // BFINAL = 1
+ stbiw__zlib_add(1,2); // BTYPE = 1 -- fixed huffman
+
+ for (i=0; i < stbiw__ZHASH; ++i)
+ hash_table[i] = NULL;
+
+ i=0;
+ while (i < data_len-3) {
+ // hash next 3 bytes of data to be compressed
+ int h = stbiw__zhash(data+i)&(stbiw__ZHASH-1), best=3;
+ unsigned char *bestloc = 0;
+ unsigned char **hlist = hash_table[h];
+ int n = stbiw__sbcount(hlist);
+ for (j=0; j < n; ++j) {
+ if (hlist[j]-data > i-32768) { // if entry lies within window
+ int d = stbiw__zlib_countm(hlist[j], data+i, data_len-i);
+ if (d >= best) best=d,bestloc=hlist[j];
+ }
+ }
+ // when hash table entry is too long, delete half the entries
+ if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2*quality) {
+ STBIW_MEMMOVE(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality);
+ stbiw__sbn(hash_table[h]) = quality;
+ }
+ stbiw__sbpush(hash_table[h],data+i);
+
+ if (bestloc) {
+ // "lazy matching" - check match at *next* byte, and if it's better, do cur byte as literal
+ h = stbiw__zhash(data+i+1)&(stbiw__ZHASH-1);
+ hlist = hash_table[h];
+ n = stbiw__sbcount(hlist);
+ for (j=0; j < n; ++j) {
+ if (hlist[j]-data > i-32767) {
+ int e = stbiw__zlib_countm(hlist[j], data+i+1, data_len-i-1);
+ if (e > best) { // if next match is better, bail on current match
+ bestloc = NULL;
+ break;
+ }
+ }
+ }
+ }
+
+ if (bestloc) {
+ int d = (int) (data+i - bestloc); // distance back
+ STBIW_ASSERT(d <= 32767 && best <= 258);
+ for (j=0; best > lengthc[j+1]-1; ++j);
+ stbiw__zlib_huff(j+257);
+ if (lengtheb[j]) stbiw__zlib_add(best - lengthc[j], lengtheb[j]);
+ for (j=0; d > distc[j+1]-1; ++j);
+ stbiw__zlib_add(stbiw__zlib_bitrev(j,5),5);
+ if (disteb[j]) stbiw__zlib_add(d - distc[j], disteb[j]);
+ i += best;
+ } else {
+ stbiw__zlib_huffb(data[i]);
+ ++i;
+ }
+ }
+ // write out final bytes
+ for (;i < data_len; ++i)
+ stbiw__zlib_huffb(data[i]);
+ stbiw__zlib_huff(256); // end of block
+ // pad with 0 bits to byte boundary
+ while (bitcount)
+ stbiw__zlib_add(0,1);
+
+ for (i=0; i < stbiw__ZHASH; ++i)
+ (void) stbiw__sbfree(hash_table[i]);
+ STBIW_FREE(hash_table);
+
+ {
+ // compute adler32 on input
+ unsigned int s1=1, s2=0;
+ int blocklen = (int) (data_len % 5552);
+ j=0;
+ while (j < data_len) {
+ for (i=0; i < blocklen; ++i) s1 += data[j+i], s2 += s1;
+ s1 %= 65521, s2 %= 65521;
+ j += blocklen;
+ blocklen = 5552;
+ }
+ stbiw__sbpush(out, STBIW_UCHAR(s2 >> 8));
+ stbiw__sbpush(out, STBIW_UCHAR(s2));
+ stbiw__sbpush(out, STBIW_UCHAR(s1 >> 8));
+ stbiw__sbpush(out, STBIW_UCHAR(s1));
+ }
+ *out_len = stbiw__sbn(out);
+ // make returned pointer freeable
+ STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len);
+ return (unsigned char *) stbiw__sbraw(out);
+}
+
+static unsigned int stbiw__crc32(unsigned char *buffer, int len)
+{
+ static unsigned int crc_table[256] =
+ {
+ 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
+ 0x0eDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
+ 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
+ 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
+ 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
+ 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
+ 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
+ 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
+ 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
+ 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
+ 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
+ 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
+ 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
+ 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
+ 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
+ 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
+ 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
+ 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
+ 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
+ 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
+ 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
+ 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
+ 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
+ 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
+ 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
+ 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
+ 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
+ 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
+ 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
+ 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
+ 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
+ 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+ };
+
+ unsigned int crc = ~0u;
+ int i;
+ for (i=0; i < len; ++i)
+ crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)];
+ return ~crc;
+}
+
+#define stbiw__wpng4(o,a,b,c,d) ((o)[0]=STBIW_UCHAR(a),(o)[1]=STBIW_UCHAR(b),(o)[2]=STBIW_UCHAR(c),(o)[3]=STBIW_UCHAR(d),(o)+=4)
+#define stbiw__wp32(data,v) stbiw__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v));
+#define stbiw__wptag(data,s) stbiw__wpng4(data, s[0],s[1],s[2],s[3])
+
+static void stbiw__wpcrc(unsigned char **data, int len)
+{
+ unsigned int crc = stbiw__crc32(*data - len - 4, len+4);
+ stbiw__wp32(*data, crc);
+}
+
+static unsigned char stbiw__paeth(int a, int b, int c)
+{
+ int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c);
+ if (pa <= pb && pa <= pc) return STBIW_UCHAR(a);
+ if (pb <= pc) return STBIW_UCHAR(b);
+ return STBIW_UCHAR(c);
+}
+
+// @OPTIMIZE: provide an option that always forces left-predict or paeth predict
+unsigned char *stbi_write_png_to_mem(unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len)
+{
+ int ctype[5] = { -1, 0, 4, 2, 6 };
+ unsigned char sig[8] = { 137,80,78,71,13,10,26,10 };
+ unsigned char *out,*o, *filt, *zlib;
+ signed char *line_buffer;
+ int i,j,k,p,zlen;
+
+ if (stride_bytes == 0)
+ stride_bytes = x * n;
+
+ filt = (unsigned char *) STBIW_MALLOC((x*n+1) * y); if (!filt) return 0;
+ line_buffer = (signed char *) STBIW_MALLOC(x * n); if (!line_buffer) { STBIW_FREE(filt); return 0; }
+ for (j=0; j < y; ++j) {
+ static int mapping[] = { 0,1,2,3,4 };
+ static int firstmap[] = { 0,1,0,5,6 };
+ int *mymap = (j != 0) ? mapping : firstmap;
+ int best = 0, bestval = 0x7fffffff;
+ for (p=0; p < 2; ++p) {
+ for (k= p?best:0; k < 5; ++k) { // @TODO: clarity: rewrite this to go 0..5, and 'continue' the unwanted ones during 2nd pass
+ int type = mymap[k],est=0;
+ unsigned char *z = pixels + stride_bytes*j;
+ for (i=0; i < n; ++i)
+ switch (type) {
+ case 0: line_buffer[i] = z[i]; break;
+ case 1: line_buffer[i] = z[i]; break;
+ case 2: line_buffer[i] = z[i] - z[i-stride_bytes]; break;
+ case 3: line_buffer[i] = z[i] - (z[i-stride_bytes]>>1); break;
+ case 4: line_buffer[i] = (signed char) (z[i] - stbiw__paeth(0,z[i-stride_bytes],0)); break;
+ case 5: line_buffer[i] = z[i]; break;
+ case 6: line_buffer[i] = z[i]; break;
+ }
+ for (i=n; i < x*n; ++i) {
+ switch (type) {
+ case 0: line_buffer[i] = z[i]; break;
+ case 1: line_buffer[i] = z[i] - z[i-n]; break;
+ case 2: line_buffer[i] = z[i] - z[i-stride_bytes]; break;
+ case 3: line_buffer[i] = z[i] - ((z[i-n] + z[i-stride_bytes])>>1); break;
+ case 4: line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-stride_bytes], z[i-stride_bytes-n]); break;
+ case 5: line_buffer[i] = z[i] - (z[i-n]>>1); break;
+ case 6: line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break;
+ }
+ }
+ if (p) break;
+ for (i=0; i < x*n; ++i)
+ est += abs((signed char) line_buffer[i]);
+ if (est < bestval) { bestval = est; best = k; }
+ }
+ }
+ // when we get here, best contains the filter type, and line_buffer contains the data
+ filt[j*(x*n+1)] = (unsigned char) best;
+ STBIW_MEMMOVE(filt+j*(x*n+1)+1, line_buffer, x*n);
+ }
+ STBIW_FREE(line_buffer);
+ zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, 8); // increase 8 to get smaller but use more memory
+ STBIW_FREE(filt);
+ if (!zlib) return 0;
+
+ // each tag requires 12 bytes of overhead
+ out = (unsigned char *) STBIW_MALLOC(8 + 12+13 + 12+zlen + 12);
+ if (!out) return 0;
+ *out_len = 8 + 12+13 + 12+zlen + 12;
+
+ o=out;
+ STBIW_MEMMOVE(o,sig,8); o+= 8;
+ stbiw__wp32(o, 13); // header length
+ stbiw__wptag(o, "IHDR");
+ stbiw__wp32(o, x);
+ stbiw__wp32(o, y);
+ *o++ = 8;
+ *o++ = STBIW_UCHAR(ctype[n]);
+ *o++ = 0;
+ *o++ = 0;
+ *o++ = 0;
+ stbiw__wpcrc(&o,13);
+
+ stbiw__wp32(o, zlen);
+ stbiw__wptag(o, "IDAT");
+ STBIW_MEMMOVE(o, zlib, zlen);
+ o += zlen;
+ STBIW_FREE(zlib);
+ stbiw__wpcrc(&o, zlen);
+
+ stbiw__wp32(o,0);
+ stbiw__wptag(o, "IEND");
+ stbiw__wpcrc(&o,0);
+
+ STBIW_ASSERT(o == out + *out_len);
+
+ return out;
+}
+
+#ifndef STBI_WRITE_NO_STDIO
+STBIWDEF int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes)
+{
+ FILE *f;
+ int len;
+ unsigned char *png = stbi_write_png_to_mem((unsigned char *) data, stride_bytes, x, y, comp, &len);
+ if (png == NULL) return 0;
+ f = fopen(filename, "wb");
+ if (!f) { STBIW_FREE(png); return 0; }
+ fwrite(png, 1, len, f);
+ fclose(f);
+ STBIW_FREE(png);
+ return 1;
+}
+#endif
+
+STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int stride_bytes)
+{
+ int len;
+ unsigned char *png = stbi_write_png_to_mem((unsigned char *) data, stride_bytes, x, y, comp, &len);
+ if (png == NULL) return 0;
+ func(context, png, len);
+ STBIW_FREE(png);
+ return 1;
+}
+
+#endif // STB_IMAGE_WRITE_IMPLEMENTATION
+
+/* Revision history
+ 1.04 (2017-03-03)
+ monochrome BMP expansion
+ 1.03 ???
+ 1.02 (2016-04-02)
+ avoid allocating large structures on the stack
+ 1.01 (2016-01-16)
+ STBIW_REALLOC_SIZED: support allocators with no realloc support
+ avoid race-condition in crc initialization
+ minor compile issues
+ 1.00 (2015-09-14)
+ installable file IO function
+ 0.99 (2015-09-13)
+ warning fixes; TGA rle support
+ 0.98 (2015-04-08)
+ added STBIW_MALLOC, STBIW_ASSERT etc
+ 0.97 (2015-01-18)
+ fixed HDR asserts, rewrote HDR rle logic
+ 0.96 (2015-01-17)
+ add HDR output
+ fix monochrome BMP
+ 0.95 (2014-08-17)
+ add monochrome TGA output
+ 0.94 (2014-05-31)
+ rename private functions to avoid conflicts with stb_image.h
+ 0.93 (2014-05-27)
+ warning fixes
+ 0.92 (2010-08-01)
+ casts to unsigned char to fix warnings
+ 0.91 (2010-07-17)
+ first public release
+ 0.90 first internal release
+*/
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
+software, either in source code form or as a compiled binary, for any purpose,
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
diff --git a/3rdparty/bgfx/3rdparty/tinyexr/README.md b/3rdparty/bimg/3rdparty/tinyexr/README.md
index aea03fd97a4..aea03fd97a4 100644
--- a/3rdparty/bgfx/3rdparty/tinyexr/README.md
+++ b/3rdparty/bimg/3rdparty/tinyexr/README.md
diff --git a/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h b/3rdparty/bimg/3rdparty/tinyexr/tinyexr.h
index 947941de4c9..b0998b68de5 100644
--- a/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h
+++ b/3rdparty/bimg/3rdparty/tinyexr/tinyexr.h
@@ -792,6 +792,8 @@ namespace miniz {
defined(i386) || defined(__ia64__) || defined(__x86_64__)
// MINIZ_X86_OR_X64_CPU is only used to help set the below macros.
#define MINIZ_X86_OR_X64_CPU 1
+#else
+#define MINIZ_X86_OR_X64_CPU 0
#endif
#if defined(__sparcv9)
@@ -803,7 +805,7 @@ namespace miniz {
#endif
#endif
-#if MINIZ_X86_OR_X64_CPU
+#if 1 // MINIZ_X86_OR_X64_CPU
// Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient
// integer loads and stores from unaligned addresses.
//#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1
@@ -10452,7 +10454,7 @@ static void ReconstructLineOffsets(std::vector<tinyexr::tinyexr_uint64> *offsets
tinyexr::swap4(reinterpret_cast<unsigned int *>(&data_len));
(*offsets)[i] = offset;
-
+
marker += data_len + 8; // 8 = 4 bytes(y) + 4 bytes(data_len)
}
}
@@ -10797,7 +10799,7 @@ int LoadEXRImageFromFile(EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-#ifdef _WIN32
+#if 0 //def _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
@@ -11381,7 +11383,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
}
#endif
-#ifdef _WIN32
+#if 0 //def _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "wb");
#else
@@ -11859,7 +11861,7 @@ int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version,
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-#ifdef _WIN32
+#if 0 //def _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
@@ -11983,7 +11985,7 @@ int ParseEXRMultipartHeaderFromFile(EXRHeader ***exr_headers, int *num_headers,
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-#ifdef _WIN32
+#if 0 //def _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
@@ -12083,7 +12085,7 @@ int ParseEXRVersionFromFile(EXRVersion *version, const char *filename) {
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-#ifdef _WIN32
+#if 0 //def _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
@@ -12214,7 +12216,7 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images,
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-#ifdef _WIN32
+#if 0 //def _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
diff --git a/3rdparty/bimg/LICENSE b/3rdparty/bimg/LICENSE
new file mode 100644
index 00000000000..dd17ed45ef3
--- /dev/null
+++ b/3rdparty/bimg/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/3rdparty/bimg/README.md b/3rdparty/bimg/README.md
new file mode 100644
index 00000000000..076039ebb18
--- /dev/null
+++ b/3rdparty/bimg/README.md
@@ -0,0 +1,49 @@
+bimg
+====
+
+Image library.
+
+[![Build Status](https://travis-ci.org/bkaradzic/bx.svg?branch=master)](https://travis-ci.org/bkaradzic/bimg)
+[![Build status](https://ci.appveyor.com/api/projects/status/edras3mltmoy31g5?svg=true)](https://ci.appveyor.com/project/bkaradzic/bimg)
+[![License](https://img.shields.io/badge/license-BSD--2%20clause-blue.svg)](https://bkaradzic.github.io/bgfx/license.html)
+[![Join the chat at https://gitter.im/bkaradzic/bgfx](https://badges.gitter.im/bkaradzic/bgfx.svg)](https://gitter.im/bkaradzic/bgfx)
+
+Contact
+-------
+
+[@bkaradzic](https://twitter.com/bkaradzic)
+
+Project page
+https://github.com/bkaradzic/bimg
+
+[License (BSD 2-clause)](https://github.com/bkaradzic/bimg/blob/master/LICENSE)
+-------------------------------------------------------------------------------
+
+<a href="http://opensource.org/licenses/BSD-2-Clause" target="_blank">
+<img align="right" src="http://opensource.org/trademarks/opensource/OSI-Approved-License-100x137.png">
+</a>
+
+ Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+
+ https://github.com/bkaradzic/bimg
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ EVENT SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/3rdparty/bimg/include/bimg/bimg.h b/3rdparty/bimg/include/bimg/bimg.h
new file mode 100644
index 00000000000..d4b13029b86
--- /dev/null
+++ b/3rdparty/bimg/include/bimg/bimg.h
@@ -0,0 +1,592 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#ifndef BIMG_IMAGE_H_HEADER_GUARD
+#define BIMG_IMAGE_H_HEADER_GUARD
+
+#include <stdint.h> // uint32_t
+#include <stdlib.h> // NULL
+
+#define BIMG_API_VERSION UINT32_C(5)
+
+namespace bx
+{
+ struct AllocatorI;
+ class Error;
+ struct ReaderSeekerI;
+ struct WriterI;
+
+} // namespace bx
+
+namespace bimg
+{
+ typedef void (*PackFn)(void*, const float*);
+ typedef void (*UnpackFn)(float*, const void*);
+
+ /// Texture format enum.
+ ///
+ /// Notation:
+ ///
+ /// RGBA16S
+ /// ^ ^ ^
+ /// | | +-- [ ]Unorm
+ /// | | [F]loat
+ /// | | [S]norm
+ /// | | [I]nt
+ /// | | [U]int
+ /// | +---- Number of bits per component
+ /// +-------- Components
+ ///
+ /// @attention Availability depends on Caps (see: formats).
+ ///
+ /// @attention C99 equivalent is `bgfx_texture_format_t`.
+ ///
+ struct TextureFormat
+ {
+ /// Texture formats:
+ enum Enum
+ {
+ BC1, //!< DXT1
+ BC2, //!< DXT3
+ BC3, //!< DXT5
+ BC4, //!< LATC1/ATI1
+ BC5, //!< LATC2/ATI2
+ BC6H, //!< BC6H
+ BC7, //!< BC7
+ ETC1, //!< ETC1 RGB8
+ ETC2, //!< ETC2 RGB8
+ ETC2A, //!< ETC2 RGBA8
+ ETC2A1, //!< ETC2 RGB8A1
+ PTC12, //!< PVRTC1 RGB 2BPP
+ PTC14, //!< PVRTC1 RGB 4BPP
+ PTC12A, //!< PVRTC1 RGBA 2BPP
+ PTC14A, //!< PVRTC1 RGBA 4BPP
+ PTC22, //!< PVRTC2 RGBA 2BPP
+ PTC24, //!< PVRTC2 RGBA 4BPP
+
+ Unknown, // Compressed formats above.
+
+ R1,
+ A8,
+ R8,
+ R8I,
+ R8U,
+ R8S,
+ R16,
+ R16I,
+ R16U,
+ R16F,
+ R16S,
+ R32I,
+ R32U,
+ R32F,
+ RG8,
+ RG8I,
+ RG8U,
+ RG8S,
+ RG16,
+ RG16I,
+ RG16U,
+ RG16F,
+ RG16S,
+ RG32I,
+ RG32U,
+ RG32F,
+ RGB8,
+ RGB8I,
+ RGB8U,
+ RGB8S,
+ RGB9E5F,
+ BGRA8,
+ RGBA8,
+ RGBA8I,
+ RGBA8U,
+ RGBA8S,
+ RGBA16,
+ RGBA16I,
+ RGBA16U,
+ RGBA16F,
+ RGBA16S,
+ RGBA32I,
+ RGBA32U,
+ RGBA32F,
+ R5G6B5,
+ RGBA4,
+ RGB5A1,
+ RGB10A2,
+ RG11B10F,
+
+ UnknownDepth, // Depth formats below.
+
+ D16,
+ D24,
+ D24S8,
+ D32,
+ D16F,
+ D24F,
+ D32F,
+ D0S8,
+
+ Count
+ };
+ };
+
+ ///
+ struct Orientation
+ {
+ ///
+ enum Enum
+ {
+ R0,
+ R90,
+ R180,
+ R270,
+ HFlip,
+ HFlipR90,
+ HFlipR270,
+ VFlip,
+ };
+ };
+
+ /// Texture info.
+ ///
+ /// @attention C99 equivalent is `bgfx_texture_info_t`.
+ ///
+ struct TextureInfo
+ {
+ TextureFormat::Enum format; //!< Texture format.
+ uint32_t storageSize; //!< Total amount of bytes required to store texture.
+ uint16_t width; //!< Texture width.
+ uint16_t height; //!< Texture height.
+ uint16_t depth; //!< Texture depth.
+ uint16_t numLayers; //!< Number of layers in texture array.
+ uint8_t numMips; //!< Number of MIP maps.
+ uint8_t bitsPerPixel; //!< Format bits per pixel.
+ bool cubeMap; //!< Texture is cubemap.
+ };
+
+ struct ImageContainer
+ {
+ bx::AllocatorI* m_allocator;
+ void* m_data;
+
+ TextureFormat::Enum m_format;
+ Orientation::Enum m_orientation;
+
+ uint32_t m_size;
+ uint32_t m_offset;
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_depth;
+ uint16_t m_numLayers;
+ uint8_t m_numMips;
+ bool m_hasAlpha;
+ bool m_cubeMap;
+ bool m_ktx;
+ bool m_ktxLE;
+ bool m_srgb;
+ };
+
+ struct ImageMip
+ {
+ TextureFormat::Enum m_format;
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_depth;
+ uint32_t m_blockSize;
+ uint32_t m_size;
+ uint8_t m_bpp;
+ bool m_hasAlpha;
+ const uint8_t* m_data;
+ };
+
+ struct ImageBlockInfo
+ {
+ uint8_t bitsPerPixel;
+ uint8_t blockWidth;
+ uint8_t blockHeight;
+ uint8_t blockSize;
+ uint8_t minBlockX;
+ uint8_t minBlockY;
+ uint8_t depthBits;
+ uint8_t stencilBits;
+ uint8_t rBits;
+ uint8_t gBits;
+ uint8_t bBits;
+ uint8_t aBits;
+ uint8_t encoding;
+ };
+
+ /// Returns true if texture format is compressed.
+ bool isCompressed(TextureFormat::Enum _format);
+
+ /// Returns true if texture format is uncompressed.
+ bool isColor(TextureFormat::Enum _format);
+
+ /// Returns true if texture format is depth.
+ bool isDepth(TextureFormat::Enum _format);
+
+ /// Returns true if texture format is valid.
+ bool isValid(TextureFormat::Enum _format);
+
+ /// Returns bits per pixel.
+ uint8_t getBitsPerPixel(TextureFormat::Enum _format);
+
+ /// Returns texture block info.
+ const ImageBlockInfo& getBlockInfo(TextureFormat::Enum _format);
+
+ /// Converts format to string.
+ const char* getName(TextureFormat::Enum _format);
+
+ /// Converts string to format.
+ TextureFormat::Enum getFormat(const char* _name);
+
+ /// Returns number of mip-maps required for complete mip-map chain.
+ uint8_t imageGetNumMips(
+ TextureFormat::Enum _format
+ , uint16_t _width
+ , uint16_t _height
+ , uint16_t _depth = 0
+ );
+
+ /// Returns image size.
+ uint32_t imageGetSize(
+ TextureInfo* _info
+ , uint16_t _width
+ , uint16_t _height
+ , uint16_t _depth
+ , bool _cubeMap
+ , bool _hasMips
+ , uint16_t _numLayers
+ , TextureFormat::Enum _format
+ );
+
+ ///
+ void imageSolid(
+ void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _solid
+ );
+
+ ///
+ void imageCheckerboard(
+ void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _step
+ , uint32_t _0
+ , uint32_t _1
+ );
+
+ ///
+ void imageRgba8Downsample2x2(
+ void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , uint32_t _srcPitch
+ , const void* _src
+ );
+
+ ///
+ void imageRgba32fToLinear(
+ void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , uint32_t _srcPitch
+ , const void* _src
+ );
+
+ ///
+ void imageRgba32fToGamma(
+ void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , uint32_t _srcPitch
+ , const void* _src
+ );
+
+ ///
+ void imageRgba32fLinearDownsample2x2(
+ void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , uint32_t _srcPitch
+ , const void* _src
+ );
+
+ ///
+ void imageRgba32fDownsample2x2NormalMap(
+ void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _srcPitch
+ , const void* _src
+ );
+
+ ///
+ void imageSwizzleBgra8(
+ void* _dst
+ , uint32_t _dstPitch
+ , uint32_t _width
+ , uint32_t _height
+ , const void* _src
+ , uint32_t _srcPitch
+ );
+
+ ///
+ void imageCopy(
+ void* _dst
+ , uint32_t _height
+ , uint32_t _srcPitch
+ , const void* _src
+ , uint32_t _dstPitch
+ );
+
+ ///
+ void imageCopy(
+ void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _bpp
+ , uint32_t _srcPitch
+ , const void* _src
+ );
+
+ ///
+ PackFn getPack(TextureFormat::Enum _format);
+
+ ///
+ UnpackFn getUnpack(TextureFormat::Enum _format);
+
+ ///
+ bool imageConvert(
+ TextureFormat::Enum _dstFormat
+ , TextureFormat::Enum _srcFormat
+ );
+
+ ///
+ void imageConvert(
+ void* _dst
+ , uint32_t _bpp
+ , PackFn _pack
+ , const void* _src
+ , UnpackFn _unpack
+ , uint32_t _size
+ );
+
+ ///
+ void imageConvert(
+ void* _dst
+ , uint32_t _dstBpp
+ , PackFn _pack
+ , const void* _src
+ , uint32_t _srcBpp
+ , UnpackFn _unpack
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , uint32_t _srcPitch
+ );
+
+ ///
+ bool imageConvert(
+ void* _dst
+ , TextureFormat::Enum _dstFormat
+ , const void* _src
+ , TextureFormat::Enum _srcFormat
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ );
+
+ ///
+ ImageContainer* imageConvert(
+ bx::AllocatorI* _allocator
+ , TextureFormat::Enum _dstFormat
+ , const void* _src
+ , uint32_t _size
+ );
+
+ ///
+ ImageContainer* imageConvert(
+ bx::AllocatorI* _allocator
+ , TextureFormat::Enum _dstFormat
+ , const ImageContainer& _input
+ );
+
+ ///
+ ImageContainer* imageAlloc(
+ bx::AllocatorI* _allocator
+ , TextureFormat::Enum _format
+ , uint16_t _width
+ , uint16_t _height
+ , uint16_t _depth
+ , uint16_t _numLayers
+ , bool _cubeMap
+ , bool _hasMips
+ , const void* _data = NULL
+ );
+
+ ///
+ void imageFree(
+ ImageContainer* _imageContainer
+ );
+
+ ///
+ int32_t imageWriteTga(
+ bx::WriterI* _writer
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _srcPitch
+ , const void* _src
+ , bool _grayscale
+ , bool _yflip
+ , bx::Error* _err = NULL
+ );
+
+ ///
+ int32_t imageWritePng(
+ bx::WriterI* _writer
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _srcPitch
+ , const void* _src
+ , bool _grayscale
+ , bool _yflip
+ , bx::Error* _err = NULL
+ );
+
+ ///
+ int32_t imageWriteDds(
+ bx::WriterI* _writer
+ , ImageContainer& _imageContainer
+ , const void* _data
+ , uint32_t _size
+ , bx::Error* _err
+ );
+
+ ///
+ int32_t imageWriteKtx(
+ bx::WriterI* _writer
+ , TextureFormat::Enum _format
+ , bool _cubeMap
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , uint8_t _numMips
+ , const void* _src
+ , bx::Error* _err = NULL
+ );
+
+ ///
+ int32_t imageWriteKtx(
+ bx::WriterI* _writer
+ , ImageContainer& _imageContainer
+ , const void* _data
+ , uint32_t _size
+ , bx::Error* _err = NULL
+ );
+
+ ///
+ bool imageParse(
+ ImageContainer& _imageContainer
+ , bx::ReaderSeekerI* _reader
+ , bx::Error* _err
+ );
+
+ ///
+ bool imageParse(
+ ImageContainer& _imageContainer
+ , const void* _data
+ , uint32_t _size
+ , bx::Error* _err = NULL
+ );
+
+ ///
+ ImageContainer* imageParseDds(
+ bx::AllocatorI* _allocator
+ , const void* _src
+ , uint32_t _size
+ , bx::Error* _err
+ );
+
+ ///
+ ImageContainer* imageParseKtx(
+ bx::AllocatorI* _allocator
+ , const void* _src
+ , uint32_t _size
+ , bx::Error* _err
+ );
+
+ ///
+ ImageContainer* imageParsePvr3(
+ bx::AllocatorI* _allocator
+ , const void* _src
+ , uint32_t _size
+ , bx::Error* _err
+ );
+
+ ///
+ void imageDecodeToR8(
+ bx::AllocatorI* _allocator
+ , void* _dst
+ , const void* _src
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , uint32_t _dstPitch
+ , TextureFormat::Enum _srcFormat
+ );
+
+ ///
+ void imageDecodeToBgra8(
+ void* _dst
+ , const void* _src
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _dstPitch
+ , TextureFormat::Enum _format
+ );
+
+ ///
+ void imageDecodeToRgba8(
+ void* _dst
+ , const void* _src
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _dstPitch
+ , TextureFormat::Enum _format
+ );
+
+ ///
+ void imageDecodeToRgba32f(
+ bx::AllocatorI* _allocator
+ , void* _dst
+ , const void* _src
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , uint32_t _dstPitch
+ , TextureFormat::Enum _format
+ );
+
+ ///
+ bool imageGetRawData(
+ const ImageContainer& _imageContainer
+ , uint16_t _side
+ , uint8_t _lod
+ , const void* _data
+ , uint32_t _size
+ , ImageMip& _mip
+ );
+
+} // namespace bimg
+
+#endif // BIMG_IMAGE_H_HEADER_GUARD
diff --git a/3rdparty/bimg/include/bimg/decode.h b/3rdparty/bimg/include/bimg/decode.h
new file mode 100644
index 00000000000..a5758807cce
--- /dev/null
+++ b/3rdparty/bimg/include/bimg/decode.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#ifndef BIMG_DECODE_H_HEADER_GUARD
+#define BIMG_DECODE_H_HEADER_GUARD
+
+#include "bimg.h"
+
+namespace bimg
+{
+ ///
+ ImageContainer* imageParse(
+ bx::AllocatorI* _allocator
+ , const void* _data
+ , uint32_t _size
+ , TextureFormat::Enum _dstFormat = TextureFormat::Count
+ , bx::Error* _err = NULL
+ );
+
+} // namespace bimg
+
+#endif // BIMG_DECODE_H_HEADER_GUARD
diff --git a/3rdparty/bimg/include/bimg/encode.h b/3rdparty/bimg/include/bimg/encode.h
new file mode 100644
index 00000000000..3c6d4c685d4
--- /dev/null
+++ b/3rdparty/bimg/include/bimg/encode.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bimg#license-bsd-2-clause
+ */
+
+#ifndef BIMG_ENCODE_H_HEADER_GUARD
+#define BIMG_ENCODE_H_HEADER_GUARD
+
+#include "bimg.h"
+
+namespace bimg
+{
+ struct Quality
+ {
+ enum Enum
+ {
+ Default,
+ Highest,
+ Fastest,
+
+ Count
+ };
+ };
+
+ ///
+ void imageEncodeFromRgba8(
+ void* _dst
+ , const void* _src
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , TextureFormat::Enum _format
+ , Quality::Enum _quality
+ , bx::Error* _err = NULL
+ );
+
+ ///
+ void imageEncodeFromRgba32f(
+ bx::AllocatorI* _allocator
+ , void* _dst
+ , const void* _src
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , TextureFormat::Enum _format
+ , Quality::Enum _quality
+ , bx::Error* _err = NULL
+ );
+
+ ///
+ void imageEncode(
+ bx::AllocatorI* _allocator
+ , void* _dst
+ , const void* _src
+ , TextureFormat::Enum _srcFormat
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , TextureFormat::Enum _dstFormat
+ , Quality::Enum _quality
+ , bx::Error* _err
+ );
+
+ ///
+ ImageContainer* imageEncode(
+ bx::AllocatorI* _allocator
+ , TextureFormat::Enum _dstFormat
+ , Quality::Enum _quality
+ , const ImageContainer& _input
+ );
+
+ ///
+ void imageRgba32f11to01(
+ void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _depth
+ , uint32_t _pitch
+ , const void* _src
+ );
+
+ ///
+ void imageMakeDist(
+ bx::AllocatorI* _allocator
+ , void* _dst
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _srcPitch
+ , float _edge
+ , const void* _src
+ );
+
+ ///
+ float imageQualityRgba8(
+ const void* _reference
+ , const void* _data
+ , uint16_t _width
+ , uint16_t _height
+ );
+
+ ///
+ bool imageResizeRgba32fLinear(
+ ImageContainer* _dst
+ , const ImageContainer* _src
+ );
+
+ ///
+ float imageAlphaTestCoverage(
+ TextureFormat::Enum _format
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _srcPitch
+ , const void* _src
+ , float _alphaRef
+ , float _scale = 1.0f
+ );
+
+ ///
+ void imageScaleAlphaToCoverage(
+ TextureFormat::Enum _format
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _srcPitch
+ , void* _src
+ , float _coverage
+ , float _alphaRef
+ );
+
+} // namespace bimg
+
+#endif // BIMG_ENCODE_H_HEADER_GUARD
diff --git a/3rdparty/bimg/makefile b/3rdparty/bimg/makefile
new file mode 100644
index 00000000000..02593d533d5
--- /dev/null
+++ b/3rdparty/bimg/makefile
@@ -0,0 +1,376 @@
+#
+# Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+# License: https://github.com/bkaradzic/bimg#license-bsd-2-clause
+#
+
+UNAME := $(shell uname)
+ifeq ($(UNAME),$(filter $(UNAME),Linux Darwin FreeBSD GNU/kFreeBSD))
+ifeq ($(UNAME),$(filter $(UNAME),Darwin))
+OS=darwin
+else
+ifeq ($(UNAME),$(filter $(UNAME),FreeBSD GNU/kFreeBSD))
+OS=bsd
+else
+OS=linux
+endif
+endif
+else
+OS=windows
+
+help: projgen
+
+endif
+
+# $(info $(OS))
+
+BX_DIR?=../bx
+GENIE?=$(BX_DIR)/tools/bin/$(OS)/genie
+NINJA?=$(BX_DIR)/tools/bin/$(OS)/ninja
+
+.PHONY: help
+
+help:
+ @echo Available targets:
+ @grep -E "^[a-zA-Z0-9_-]+:.*?## .*$$" $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
+
+clean: ## Clean all intermediate files.
+ @echo Cleaning...
+ -@rm -rf .build
+ @mkdir .build
+
+projgen: ## Generate project files for all configurations.
+ $(GENIE) --with-tools vs2012
+ $(GENIE) --with-tools vs2013
+ $(GENIE) --with-tools vs2015
+ $(GENIE) --with-tools vs2017
+ $(GENIE) --with-tools --gcc=mingw-gcc gmake
+ $(GENIE) --with-tools --gcc=linux-gcc gmake
+ $(GENIE) --with-tools --gcc=osx gmake
+ $(GENIE) --with-tools --xcode=osx xcode4
+ $(GENIE) --with-tools --xcode=ios xcode4
+ $(GENIE) --gcc=freebsd gmake
+ $(GENIE) --gcc=android-arm gmake
+ $(GENIE) --gcc=android-mips gmake
+ $(GENIE) --gcc=android-x86 gmake
+ $(GENIE) --gcc=asmjs gmake
+ $(GENIE) --gcc=ios-arm gmake
+ $(GENIE) --gcc=ios-arm64 gmake
+ $(GENIE) --gcc=ios-simulator gmake
+ $(GENIE) --gcc=nacl gmake
+ $(GENIE) --gcc=nacl-arm gmake
+ $(GENIE) --gcc=pnacl gmake
+ $(GENIE) --gcc=rpi gmake
+
+.build/projects/gmake-android-arm:
+ $(GENIE) --gcc=android-arm gmake
+android-arm-debug: .build/projects/gmake-android-arm ## Build - Android ARM Debug
+ $(MAKE) -R -C .build/projects/gmake-android-arm config=debug
+android-arm-release: .build/projects/gmake-android-arm ## Build - Android ARM Release
+ $(MAKE) -R -C .build/projects/gmake-android-arm config=release
+android-arm: android-arm-debug android-arm-release ## Build - Android ARM Debug and Release
+
+.build/projects/gmake-android-mips:
+ $(GENIE) --gcc=android-mips gmake
+android-mips-debug: .build/projects/gmake-android-mips ## Build - Android MIPS Debug
+ $(MAKE) -R -C .build/projects/gmake-android-mips config=debug
+android-mips-release: .build/projects/gmake-android-mips ## Build - Android MIPS Release
+ $(MAKE) -R -C .build/projects/gmake-android-mips config=release
+android-mips: android-mips-debug android-mips-release ## Build - Android MIPS Debug and Release
+
+.build/projects/gmake-android-x86:
+ $(GENIE) --gcc=android-x86 gmake
+android-x86-debug: .build/projects/gmake-android-x86 ## Build - Android x86 Debug and Release
+ $(MAKE) -R -C .build/projects/gmake-android-x86 config=debug
+android-x86-release: .build/projects/gmake-android-x86 ## Build - Android x86 Debug and Release
+ $(MAKE) -R -C .build/projects/gmake-android-x86 config=release
+android-x86: android-x86-debug android-x86-release ## Build - Android x86 Debug and Release
+
+.build/projects/gmake-asmjs:
+ $(GENIE) --gcc=asmjs gmake
+asmjs-debug: .build/projects/gmake-asmjs ## Build - Emscripten Debug
+ $(MAKE) -R -C .build/projects/gmake-asmjs config=debug
+asmjs-release: .build/projects/gmake-asmjs ## Build - Emscripten Release
+ $(MAKE) -R -C .build/projects/gmake-asmjs config=release
+asmjs: asmjs-debug asmjs-release ## Build - Emscripten Debug and Release
+
+.build/projects/gmake-linux:
+ $(GENIE) --with-tools --gcc=linux-gcc gmake
+linux-debug32: .build/projects/gmake-linux ## Build - Linux x86 Debug
+ $(MAKE) -R -C .build/projects/gmake-linux config=debug32
+linux-release32: .build/projects/gmake-linux ## Build - Linux x86 Release
+ $(MAKE) -R -C .build/projects/gmake-linux config=release32
+linux-debug64: .build/projects/gmake-linux ## Build - Linux x64 Debug
+ $(MAKE) -R -C .build/projects/gmake-linux config=debug64
+linux-release64: .build/projects/gmake-linux ## Build - Linux x64 Release
+ $(MAKE) -R -C .build/projects/gmake-linux config=release64
+linux: linux-debug32 linux-release32 linux-debug64 linux-release64 ## Build - Linux x86/x64 Debug and Release
+
+.build/projects/gmake-freebsd:
+ $(GENIE) --with-tools --gcc=freebsd gmake
+freebsd-debug32: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Debug
+ $(MAKE) -R -C .build/projects/gmake-freebsd config=debug32
+freebsd-release32: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Release
+ $(MAKE) -R -C .build/projects/gmake-freebsd config=release32
+freebsd-debug64: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Debug
+ $(MAKE) -R -C .build/projects/gmake-freebsd config=debug64
+freebsd-release64: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Release
+ $(MAKE) -R -C .build/projects/gmake-freebsd config=release64
+freebsd: freebsd-debug32 freebsd-release32 freebsd-debug64 freebsd-release64 ## Build - FreeBSD x86/x64 Debug and Release
+
+.build/projects/gmake-mingw-gcc:
+ $(GENIE) --with-tools --gcc=mingw-gcc gmake
+mingw-gcc-debug32: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x86 Debug
+ $(MAKE) -R -C .build/projects/gmake-mingw-gcc config=debug32
+mingw-gcc-release32: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x86 Release
+ $(MAKE) -R -C .build/projects/gmake-mingw-gcc config=release32
+mingw-gcc-debug64: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x64 Debug
+ $(MAKE) -R -C .build/projects/gmake-mingw-gcc config=debug64
+mingw-gcc-release64: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x64 Release
+ $(MAKE) -R -C .build/projects/gmake-mingw-gcc config=release64
+mingw-gcc: mingw-gcc-debug32 mingw-gcc-release32 mingw-gcc-debug64 mingw-gcc-release64 ## Build - MinGW GCC x86/x64 Debug and Release
+
+.build/projects/gmake-mingw-clang:
+ $(GENIE) --gcc=mingw-clang gmake
+mingw-clang-debug32: .build/projects/gmake-mingw-clang ## Build - MinGW Clang x86 Debug
+ $(MAKE) -R -C .build/projects/gmake-mingw-clang config=debug32
+mingw-clang-release32: .build/projects/gmake-mingw-clang ## Build - MinGW Clang x86 Release
+ $(MAKE) -R -C .build/projects/gmake-mingw-clang config=release32
+mingw-clang-debug64: .build/projects/gmake-mingw-clang ## Build - MinGW Clang x64 Debug
+ $(MAKE) -R -C .build/projects/gmake-mingw-clang config=debug64
+mingw-clang-release64: .build/projects/gmake-mingw-clang ## Build - MinGW Clang x64 Release
+ $(MAKE) -R -C .build/projects/gmake-mingw-clang config=release64
+mingw-clang: mingw-clang-debug32 mingw-clang-release32 mingw-clang-debug64 mingw-clang-release64 ## Build - MinGW Clang x86/x64 Debug and Release
+
+.build/projects/vs2012:
+ $(GENIE) --with-tools vs2012
+vs2012-debug32: .build/projects/vs2012 ## Build - VS2012 x86 Debug
+ devenv .build/projects/vs2012/bimg.sln /Build "Debug|Win32"
+vs2012-release32: .build/projects/vs2012 ## Build - VS2012 x86 Release
+ devenv .build/projects/vs2012/bimg.sln /Build "Release|Win32"
+vs2012-debug64: .build/projects/vs2012 ## Build - VS2012 x64 Debug
+ devenv .build/projects/vs2012/bimg.sln /Build "Debug|x64"
+vs2012-release64: .build/projects/vs2012 ## Build - VS2012 x64 Release
+ devenv .build/projects/vs2012/bimg.sln /Build "Release|x64"
+vs2012: vs2012-debug32 vs2012-release32 vs2012-debug64 vs2012-release64 ## Build - VS2012 x86/x64 Debug and Release
+
+.build/projects/vs2013:
+ $(GENIE) --with-tools vs2013
+vs2013-debug32: .build/projects/vs2013 ## Build - VS2013 x86 Debug
+ devenv .build/projects/vs2013/bimg.sln /Build "Debug|Win32"
+vs2013-release32: .build/projects/vs2013 ## Build - VS2013 x86 Release
+ devenv .build/projects/vs2013/bimg.sln /Build "Release|Win32"
+vs2013-debug64: .build/projects/vs2013 ## Build - VS2013 x64 Debug
+ devenv .build/projects/vs2013/bimg.sln /Build "Debug|x64"
+vs2013-release64: .build/projects/vs2013 ## Build - VS2013 x64 Release
+ devenv .build/projects/vs2013/bimg.sln /Build "Release|x64"
+vs2013: vs2013-debug32 vs2013-release32 vs2013-debug64 vs2013-release64 ## Build - VS2013 x86/x64 Debug and Release
+
+.build/projects/vs2015:
+ $(GENIE) --with-tools vs2015
+vs2015-debug32: .build/projects/vs2015 ## Build - VS2015 x86 Debug
+ devenv .build/projects/vs2015/bimg.sln /Build "Debug|Win32"
+vs2015-release32: .build/projects/vs2015 ## Build - VS2015 x86 Release
+ devenv .build/projects/vs2015/bimg.sln /Build "Release|Win32"
+vs2015-debug64: .build/projects/vs2015 ## Build - VS2015 x64 Debug
+ devenv .build/projects/vs2015/bimg.sln /Build "Debug|x64"
+vs2015-release64: .build/projects/vs2015 ## Build - VS2015 x64 Release
+ devenv .build/projects/vs2015/bimg.sln /Build "Release|x64"
+vs2015: vs2015-debug32 vs2015-release32 vs2015-debug64 vs2015-release64 ## Build - VS2015 x86/x64 Debug and Release
+
+.build/projects/vs2017:
+ $(GENIE) --with-tools vs2017
+vs2017-debug32: .build/projects/vs2017 ## Build - vs2017 x86 Debug
+ devenv .build/projects/vs2017/bimg.sln /Build "Debug|Win32"
+vs2017-release32: .build/projects/vs2017 ## Build - vs2017 x86 Release
+ devenv .build/projects/vs2017/bimg.sln /Build "Release|Win32"
+vs2017-debug64: .build/projects/vs2017 ## Build - vs2017 x64 Debug
+ devenv .build/projects/vs2017/bimg.sln /Build "Debug|x64"
+vs2017-release64: .build/projects/vs2017 ## Build - vs2017 x64 Release
+ devenv .build/projects/vs2017/bimg.sln /Build "Release|x64"
+vs2017: vs2017-debug32 vs2017-release32 vs2017-debug64 vs2017-release64 ## Build - vs2017 x86/x64 Debug and Release
+
+.build/projects/gmake-nacl:
+ $(GENIE) --gcc=nacl gmake
+nacl-debug32: .build/projects/gmake-nacl ## Build - Native Client x86 Debug
+ $(MAKE) -R -C .build/projects/gmake-nacl config=debug32
+nacl-release32: .build/projects/gmake-nacl ## Build - Native Client x86 Release
+ $(MAKE) -R -C .build/projects/gmake-nacl config=release32
+nacl-debug64: .build/projects/gmake-nacl ## Build - Native Client x64 Debug
+ $(MAKE) -R -C .build/projects/gmake-nacl config=debug64
+nacl-release64: .build/projects/gmake-nacl ## Build - Native Client x64 Release
+ $(MAKE) -R -C .build/projects/gmake-nacl config=release64
+nacl: nacl-debug32 nacl-release32 nacl-debug64 nacl-release64 ## Build - Native Client x86/x64 Debug and Release
+
+.build/projects/gmake-nacl-arm:
+ $(GENIE) --gcc=nacl-arm gmake
+nacl-arm-debug: .build/projects/gmake-nacl-arm ## Build - Native Client ARM Debug
+ $(MAKE) -R -C .build/projects/gmake-nacl-arm config=debug
+nacl-arm-release: .build/projects/gmake-nacl-arm ## Build - Native Client ARM Release
+ $(MAKE) -R -C .build/projects/gmake-nacl-arm config=release
+nacl-arm: nacl-arm-debug32 nacl-arm-release32 ## Build - Native Client ARM Debug and Release
+
+.build/projects/gmake-pnacl:
+ $(GENIE) --gcc=pnacl gmake
+pnacl-debug: .build/projects/gmake-pnacl ## Build - Portable Native Client Debug
+ $(MAKE) -R -C .build/projects/gmake-pnacl config=debug
+pnacl-release: .build/projects/gmake-pnacl ## Build - Portable Native Client Release
+ $(MAKE) -R -C .build/projects/gmake-pnacl config=release
+pnacl: pnacl-debug pnacl-release ## Build - Portable Native Client Debug and Release
+
+.build/projects/gmake-osx:
+ $(GENIE) --with-tools --gcc=osx gmake
+osx-debug32: .build/projects/gmake-osx ## Build - OSX x86 Debug
+ $(MAKE) -C .build/projects/gmake-osx config=debug32
+osx-release32: .build/projects/gmake-osx ## Build - OSX x86 Release
+ $(MAKE) -C .build/projects/gmake-osx config=release32
+osx-debug64: .build/projects/gmake-osx ## Build - OSX x64 Debug
+ $(MAKE) -C .build/projects/gmake-osx config=debug64
+osx-release64: .build/projects/gmake-osx ## Build - OSX x64 Release
+ $(MAKE) -C .build/projects/gmake-osx config=release64
+osx: osx-debug32 osx-release32 osx-debug64 osx-release64 ## Build - OSX x86/x64 Debug and Release
+
+.build/projects/gmake-ios-arm:
+ $(GENIE) --gcc=ios-arm gmake
+ios-arm-debug: .build/projects/gmake-ios-arm ## Build - iOS ARM Debug
+ $(MAKE) -R -C .build/projects/gmake-ios-arm config=debug
+ios-arm-release: .build/projects/gmake-ios-arm ## Build - iOS ARM Release
+ $(MAKE) -R -C .build/projects/gmake-ios-arm config=release
+ios-arm: ios-arm-debug ios-arm-release ## Build - iOS ARM Debug and Release
+
+.build/projects/gmake-ios-arm64:
+ $(GENIE) --gcc=ios-arm64 gmake
+ios-arm64-debug: .build/projects/gmake-ios-arm64 ## Build - iOS ARM64 Debug
+ $(MAKE) -R -C .build/projects/gmake-ios-arm64 config=debug
+ios-arm64-release: .build/projects/gmake-ios-arm64 ## Build - iOS ARM64 Release
+ $(MAKE) -R -C .build/projects/gmake-ios-arm64 config=release
+ios-arm64: ios-arm64-debug ios-arm64-release ## Build - iOS ARM64 Debug and Release
+
+.build/projects/gmake-ios-simulator:
+ $(GENIE) --gcc=ios-simulator gmake
+ios-simulator-debug: .build/projects/gmake-ios-simulator ## Build - iOS Simulator Debug
+ $(MAKE) -R -C .build/projects/gmake-ios-simulator config=debug
+ios-simulator-release: .build/projects/gmake-ios-simulator ## Build - iOS Simulator Release
+ $(MAKE) -R -C .build/projects/gmake-ios-simulator config=release
+ios-simulator: ios-simulator-debug ios-simulator-release ## Build - iOS Simulator Debug and Release
+
+.build/projects/gmake-rpi:
+ $(GENIE) --gcc=rpi gmake
+rpi-debug: .build/projects/gmake-rpi ## Build - RasberryPi Debug
+ $(MAKE) -R -C .build/projects/gmake-rpi config=debug
+rpi-release: .build/projects/gmake-rpi ## Build - RasberryPi Release
+ $(MAKE) -R -C .build/projects/gmake-rpi config=release
+rpi: rpi-debug rpi-release ## Build - RasberryPi Debug and Release
+
+build-darwin: osx
+
+build-linux: linux-debug64 linux-release64
+
+build-windows: mingw-gcc
+
+build: build-$(OS)
+
+rebuild-shaders:
+ $(MAKE) -R -C examples rebuild
+
+assets: # Build assets.
+ $(NINJA) -C scripts
+
+analyze:
+ cppcheck src/
+ cppcheck examples/
+
+docs:
+ doxygen scripts/bimg.doxygen
+ markdown README.md > .build/docs/readme.html
+
+###
+
+SILENT ?= @
+
+UNAME := $(shell uname)
+ifeq ($(UNAME),$(filter $(UNAME),Linux Darwin FreeBSD GNU/kFreeBSD))
+ifeq ($(UNAME),$(filter $(UNAME),Darwin))
+OS=darwin
+BUILD_PROJECT_DIR=gmake-osx
+BUILD_OUTPUT_DIR=osx64_clang
+BUILD_TOOLS_CONFIG=release64
+BUILD_TOOLS_SUFFIX=Release
+EXE=
+else
+ifeq ($(UNAME),$(filter $(UNAME),FreeBSD GNU/kFreeBSD))
+OS=bsd
+BUILD_PROJECT_DIR=gmake-freebsd
+BUILD_OUTPUT_DIR=freebsd64_gcc
+BUILD_TOOLS_CONFIG=release64
+BUILD_TOOLS_SUFFIX=Release
+EXE=
+else
+OS=linux
+BUILD_PROJECT_DIR=gmake-linux
+BUILD_OUTPUT_DIR=linux64_gcc
+BUILD_TOOLS_CONFIG=release64
+BUILD_TOOLS_SUFFIX=Release
+EXE=
+endif
+endif
+else
+OS=windows
+BUILD_PROJECT_DIR=gmake-mingw-gcc
+BUILD_OUTPUT_DIR=win64_mingw-gcc
+BUILD_TOOLS_CONFIG=release64
+BUILD_TOOLS_SUFFIX=Release
+EXE=.exe
+endif
+
+geometryc: .build/projects/$(BUILD_PROJECT_DIR) ## Build geometryc tool.
+ $(SILENT) $(MAKE) -C .build/projects/$(BUILD_PROJECT_DIR) geometryc config=$(BUILD_TOOLS_CONFIG)
+ $(SILENT) cp .build/$(BUILD_OUTPUT_DIR)/bin/geometryc$(BUILD_TOOLS_SUFFIX)$(EXE) tools/bin/$(OS)/geometryc$(EXE)
+
+shaderc: .build/projects/$(BUILD_PROJECT_DIR) ## Build shaderc tool.
+ $(SILENT) $(MAKE) -C .build/projects/$(BUILD_PROJECT_DIR) shaderc config=$(BUILD_TOOLS_CONFIG)
+ $(SILENT) cp .build/$(BUILD_OUTPUT_DIR)/bin/shaderc$(BUILD_TOOLS_SUFFIX)$(EXE) tools/bin/$(OS)/shaderc$(EXE)
+
+texturec: .build/projects/$(BUILD_PROJECT_DIR) ## Build texturec tool.
+ $(SILENT) $(MAKE) -C .build/projects/$(BUILD_PROJECT_DIR) texturec config=$(BUILD_TOOLS_CONFIG)
+ $(SILENT) cp .build/$(BUILD_OUTPUT_DIR)/bin/texturec$(BUILD_TOOLS_SUFFIX)$(EXE) tools/bin/$(OS)/texturec$(EXE)
+
+texturev: .build/projects/$(BUILD_PROJECT_DIR) ## Build texturev tool.
+ $(SILENT) $(MAKE) -C .build/projects/$(BUILD_PROJECT_DIR) texturev config=$(BUILD_TOOLS_CONFIG)
+ $(SILENT) cp .build/$(BUILD_OUTPUT_DIR)/bin/texturev$(BUILD_TOOLS_SUFFIX)$(EXE) tools/bin/$(OS)/texturev$(EXE)
+
+tools: geometryc shaderc texturec texturev ## Build tools.
+
+clean-tools: ## Clean tools projects.
+ -$(SILENT) rm -r .build/projects/$(BUILD_PROJECT_DIR)
+
+dist-windows: .build/projects/gmake-mingw-gcc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-mingw-gcc config=release64 -j 6 geometryc
+ $(SILENT) cp .build/win64_mingw-gcc/bin/geometrycRelease.exe tools/bin/windows/geometryc.exe
+ $(SILENT) $(MAKE) -C .build/projects/gmake-mingw-gcc config=release64 -j 6 shaderc
+ $(SILENT) cp .build/win64_mingw-gcc/bin/shadercRelease.exe tools/bin/windows/shaderc.exe
+ $(SILENT) $(MAKE) -C .build/projects/gmake-mingw-gcc config=release64 -j 6 texturec
+ $(SILENT) cp .build/win64_mingw-gcc/bin/texturecRelease.exe tools/bin/windows/texturec.exe
+ $(SILENT) $(MAKE) -C .build/projects/gmake-mingw-gcc config=release64 -j 6 texturev
+ $(SILENT) cp .build/win64_mingw-gcc/bin/texturevRelease.exe tools/bin/windows/texturev.exe
+
+dist-linux: .build/projects/gmake-linux
+ $(SILENT) $(MAKE) -C .build/projects/gmake-linux config=release64 -j 6 geometryc
+ $(SILENT) cp .build/linux64_gcc/bin/geometrycRelease tools/bin/linux/geometryc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-linux config=release64 -j 6 shaderc
+ $(SILENT) cp .build/linux64_gcc/bin/shadercRelease tools/bin/linux/shaderc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-linux config=release64 -j 6 texturec
+ $(SILENT) cp .build/linux64_gcc/bin/texturecRelease tools/bin/linux/texturec
+ $(SILENT) $(MAKE) -C .build/projects/gmake-linux config=release64 -j 6 texturev
+ $(SILENT) cp .build/linux64_gcc/bin/texturevRelease tools/bin/linux/texturev
+
+dist-darwin: .build/projects/gmake-osx
+ $(SILENT) $(MAKE) -C .build/projects/gmake-osx config=release64 -j 6 geometryc
+ $(SILENT) cp .build/osx64_clang/bin/geometrycRelease tools/bin/darwin/geometryc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-osx config=release64 -j 6 shaderc
+ $(SILENT) cp .build/osx64_clang/bin/shadercRelease tools/bin/darwin/shaderc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-osx config=release64 -j 6 texturec
+ $(SILENT) cp .build/osx64_clang/bin/texturecRelease tools/bin/darwin/texturec
+ $(SILENT) $(MAKE) -C .build/projects/gmake-osx config=release64 -j 6 texturev
+ $(SILENT) cp .build/osx64_clang/bin/texturevRelease tools/bin/darwin/texturev
+
+dist: clean dist-windows dist-linux dist-darwin
diff --git a/3rdparty/bimg/scripts/bimg.lua b/3rdparty/bimg/scripts/bimg.lua
new file mode 100644
index 00000000000..b1f56d1d225
--- /dev/null
+++ b/3rdparty/bimg/scripts/bimg.lua
@@ -0,0 +1,24 @@
+--
+-- Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+-- License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+--
+
+project "bimg"
+ kind "StaticLib"
+
+ includedirs {
+ path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
+ }
+
+ files {
+ path.join(BIMG_DIR, "include/**"),
+ path.join(BIMG_DIR, "src/image.*"),
+ }
+
+ configuration { "linux-*" }
+ buildoptions {
+ "-fPIC",
+ }
+
+ configuration {}
diff --git a/3rdparty/bimg/scripts/bimg_decode.lua b/3rdparty/bimg/scripts/bimg_decode.lua
new file mode 100644
index 00000000000..743d0ec59e1
--- /dev/null
+++ b/3rdparty/bimg/scripts/bimg_decode.lua
@@ -0,0 +1,27 @@
+--
+-- Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+-- License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+--
+
+project "bimg_decode"
+ kind "StaticLib"
+
+ includedirs {
+ path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
+ path.join(BIMG_DIR, "3rdparty"),
+ path.join(BIMG_DIR, "3rdparty/nvtt"),
+ path.join(BIMG_DIR, "3rdparty/iqa/include"),
+ }
+
+ files {
+ path.join(BIMG_DIR, "include/**"),
+ path.join(BIMG_DIR, "src/image_decode.*"),
+ }
+
+ configuration { "linux-*" }
+ buildoptions {
+ "-fPIC",
+ }
+
+ configuration {}
diff --git a/3rdparty/bimg/scripts/bimg_encode.lua b/3rdparty/bimg/scripts/bimg_encode.lua
new file mode 100644
index 00000000000..44021dc44a7
--- /dev/null
+++ b/3rdparty/bimg/scripts/bimg_encode.lua
@@ -0,0 +1,42 @@
+--
+-- Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+-- License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+--
+
+project "bimg_encode"
+ kind "StaticLib"
+
+ includedirs {
+ path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
+ path.join(BIMG_DIR, "3rdparty"),
+ path.join(BIMG_DIR, "3rdparty/nvtt"),
+ path.join(BIMG_DIR, "3rdparty/iqa/include"),
+ }
+
+ files {
+ path.join(BIMG_DIR, "include/**"),
+ path.join(BIMG_DIR, "src/image_encode.*"),
+ path.join(BIMG_DIR, "3rdparty/libsquish/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/libsquish/**.h"),
+ path.join(BIMG_DIR, "3rdparty/edtaa3/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/edtaa3/**.h"),
+ path.join(BIMG_DIR, "3rdparty/etc1/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/etc1/**.h"),
+ path.join(BIMG_DIR, "3rdparty/etc2/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/etc2/**.hpp"),
+ path.join(BIMG_DIR, "3rdparty/nvtt/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/nvtt/**.h"),
+ path.join(BIMG_DIR, "3rdparty/pvrtc/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/pvrtc/**.h"),
+ path.join(BIMG_DIR, "3rdparty/tinyexr/**.h"),
+ path.join(BIMG_DIR, "3rdparty/iqa/include/**.h"),
+ path.join(BIMG_DIR, "3rdparty/iqa/source/**.c"),
+ }
+
+ configuration { "linux-*" }
+ buildoptions {
+ "-fPIC",
+ }
+
+ configuration {}
diff --git a/3rdparty/bimg/scripts/genie.lua b/3rdparty/bimg/scripts/genie.lua
new file mode 100644
index 00000000000..b22c4dd26ce
--- /dev/null
+++ b/3rdparty/bimg/scripts/genie.lua
@@ -0,0 +1,76 @@
+--
+-- Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+-- License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+--
+
+newoption {
+ trigger = "with-amalgamated",
+ description = "Enable amalgamated build.",
+}
+
+newoption {
+ trigger = "with-shared-lib",
+ description = "Enable building shared library.",
+}
+
+newoption {
+ trigger = "with-tools",
+ description = "Enable building tools.",
+}
+
+solution "bimg"
+ configurations {
+ "Debug",
+ "Release",
+ }
+
+ if _ACTION == "xcode4" then
+ platforms {
+ "Universal",
+ }
+ else
+ platforms {
+ "x32",
+ "x64",
+ "Native", -- for targets where bitness is not specified
+ }
+ end
+
+ language "C++"
+ startproject "example-00-helloworld"
+
+MODULE_DIR = path.getabsolute("..")
+BIMG_DIR = path.getabsolute("..")
+BX_DIR = os.getenv("BX_DIR")
+
+local BIMG_BUILD_DIR = path.join(BIMG_DIR, ".build")
+local BIMG_THIRD_PARTY_DIR = path.join(BIMG_DIR, "3rdparty")
+if not BX_DIR then
+ BX_DIR = path.getabsolute(path.join(BIMG_DIR, "../bx"))
+end
+
+if not os.isdir(BX_DIR) then
+ print("bx not found at " .. BX_DIR)
+ print("For more info see: https://bkaradzic.github.io/bgfx/build.html")
+ os.exit()
+end
+
+dofile (path.join(BX_DIR, "scripts/toolchain.lua"))
+if not toolchain(BIMG_BUILD_DIR, BIMG_THIRD_PARTY_DIR) then
+ return -- no action specified
+end
+
+function copyLib()
+end
+
+group "libs"
+dofile "bimg.lua"
+dofile "bimg_decode.lua"
+dofile "bimg_encode.lua"
+
+dofile(path.join(BX_DIR, "scripts/bx.lua"))
+
+if _OPTIONS["with-tools"] then
+ group "tools"
+ dofile "texturec.lua"
+end
diff --git a/3rdparty/bimg/scripts/texturec.lua b/3rdparty/bimg/scripts/texturec.lua
new file mode 100644
index 00000000000..02f6bb65d41
--- /dev/null
+++ b/3rdparty/bimg/scripts/texturec.lua
@@ -0,0 +1,57 @@
+--
+-- Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+-- License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+--
+
+project "texturec"
+ kind "ConsoleApp"
+
+ includedirs {
+ path.join(BX_DIR, "include"),
+ path.join(BIMG_DIR, "include"),
+ path.join(BIMG_DIR, "3rdparty"),
+ path.join(BIMG_DIR, "3rdparty/nvtt"),
+ path.join(BIMG_DIR, "3rdparty/iqa/include"),
+ }
+
+ files {
+ path.join(BIMG_DIR, "3rdparty/libsquish/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/libsquish/**.h"),
+ path.join(BIMG_DIR, "3rdparty/edtaa3/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/edtaa3/**.h"),
+ path.join(BIMG_DIR, "3rdparty/etc1/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/etc1/**.h"),
+ path.join(BIMG_DIR, "3rdparty/etc2/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/etc2/**.hpp"),
+ path.join(BIMG_DIR, "3rdparty/nvtt/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/nvtt/**.h"),
+ path.join(BIMG_DIR, "3rdparty/pvrtc/**.cpp"),
+ path.join(BIMG_DIR, "3rdparty/pvrtc/**.h"),
+ path.join(BIMG_DIR, "3rdparty/tinyexr/**.h"),
+ path.join(BIMG_DIR, "3rdparty/iqa/include/**.h"),
+ path.join(BIMG_DIR, "3rdparty/iqa/source/**.c"),
+ path.join(BIMG_DIR, "tools/texturec/**.cpp"),
+ path.join(BIMG_DIR, "tools/texturec/**.h"),
+ }
+
+ links {
+ "bimg_decode",
+ "bimg_encode",
+ "bimg",
+ "bx",
+ }
+
+ configuration { "mingw-*" }
+ targetextension ".exe"
+
+ configuration { "osx" }
+ links {
+ "Cocoa.framework",
+ }
+
+ configuration { "vs20* or mingw*" }
+ links {
+ "psapi",
+ }
+
+ configuration {}
diff --git a/3rdparty/bimg/src/bimg_p.h b/3rdparty/bimg/src/bimg_p.h
new file mode 100644
index 00000000000..45baeaad8be
--- /dev/null
+++ b/3rdparty/bimg/src/bimg_p.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include <bimg/bimg.h>
+#include <bx/allocator.h>
+#include <bx/readerwriter.h>
+#include <bx/pixelformat.h>
+#include <bx/endian.h>
+#include <bx/error.h>
+#include <bx/simd_t.h>
+
+#define BIMG_CHUNK_MAGIC_TEX BX_MAKEFOURCC('T', 'E', 'X', 0x0)
+
+BX_ERROR_RESULT(BIMG_ERROR, BX_MAKEFOURCC('b', 'i', 'm', 'g') );
+
+namespace bimg
+{
+ struct Memory
+ {
+ uint8_t* data;
+ uint32_t size;
+ };
+
+ struct TextureCreate
+ {
+ TextureFormat::Enum m_format;
+ uint16_t m_width;
+ uint16_t m_height;
+ uint16_t m_depth;
+ uint16_t m_numLayers;
+ uint8_t m_numMips;
+ bool m_cubeMap;
+ const Memory* m_mem;
+ };
+
+ inline uint8_t calcNumMips(bool _hasMips, uint16_t _width, uint16_t _height, uint16_t _depth = 1)
+ {
+ if (_hasMips)
+ {
+ const uint32_t max = bx::uint32_max(bx::uint32_max(_width, _height), _depth);
+ const uint32_t num = 1 + uint32_t(bx::flog2(float(max) ) );
+
+ return uint8_t(num);
+ }
+
+ return 1;
+ }
+
+ ///
+ void imageConvert(
+ void* _dst
+ , uint32_t _bpp
+ , bx::PackFn _pack
+ , const void* _src
+ , bx::UnpackFn _unpack
+ , uint32_t _size
+ );
+
+ ///
+ void imageConvert(
+ void* _dst
+ , uint32_t _dstBpp
+ , bx::PackFn _pack
+ , const void* _src
+ , uint32_t _srcBpp
+ , bx::UnpackFn _unpack
+ , uint32_t _width
+ , uint32_t _height
+ , uint32_t _srcPitch
+ );
+
+} // namespace bimg
diff --git a/3rdparty/bgfx/src/image.cpp b/3rdparty/bimg/src/image.cpp
index e6c9e074a2c..9b34985cb16 100644
--- a/3rdparty/bgfx/src/image.cpp
+++ b/3rdparty/bimg/src/image.cpp
@@ -3,10 +3,10 @@
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
-#include "bgfx_p.h"
-#include "image.h"
+#include "bimg_p.h"
+#include <bx/hash.h>
-namespace bgfx
+namespace bimg
{
static const ImageBlockInfo s_imageBlockInfo[] =
{
@@ -87,7 +87,7 @@ namespace bgfx
{ 16, 1, 1, 2, 1, 1, 0, 0, 4, 4, 4, 4, uint8_t(bx::EncodingType::Unorm) }, // RGBA4
{ 16, 1, 1, 2, 1, 1, 0, 0, 5, 5, 5, 1, uint8_t(bx::EncodingType::Unorm) }, // RGB5A1
{ 32, 1, 1, 4, 1, 1, 0, 0, 10, 10, 10, 2, uint8_t(bx::EncodingType::Unorm) }, // RGB10A2
- { 32, 1, 1, 4, 1, 1, 0, 0, 11, 11, 10, 0, uint8_t(bx::EncodingType::Unorm) }, // R11G11B10F
+ { 32, 1, 1, 4, 1, 1, 0, 0, 11, 11, 10, 0, uint8_t(bx::EncodingType::Unorm) }, // RG11B10F
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Count) }, // UnknownDepth
{ 16, 1, 1, 2, 1, 1, 16, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // D16
{ 24, 1, 1, 3, 1, 1, 24, 0, 0, 0, 0, 0, uint8_t(bx::EncodingType::Unorm) }, // D24
@@ -168,7 +168,7 @@ namespace bgfx
"RGBA4", // RGBA4
"RGB5A1", // RGB5A1
"RGB10A2", // RGB10A2
- "R11G11B10F", // R11G11B10F
+ "RG11B10F", // RG11B10F
"<unknown>", // UnknownDepth
"D16", // D16
"D24", // D24
@@ -235,7 +235,7 @@ namespace bgfx
const TextureFormat::Enum fmt = TextureFormat::Enum(ii);
if (isValid(fmt) )
{
- if (0 == bx::strincmp(s_textureFormatName[ii], _name) )
+ if (0 == bx::strCmpI(s_textureFormatName[ii], _name) )
{
return fmt;
}
@@ -253,14 +253,13 @@ namespace bgfx
const uint16_t minBlockX = blockInfo.minBlockX;
const uint16_t minBlockY = blockInfo.minBlockY;
- _width = bx::uint16_max(blockWidth * minBlockX, ( (_width + blockWidth - 1) / blockWidth)*blockWidth);
+ _width = bx::uint16_max(blockWidth * minBlockX, ( (_width + blockWidth - 1) / blockWidth )*blockWidth);
_height = bx::uint16_max(blockHeight * minBlockY, ( (_height + blockHeight - 1) / blockHeight)*blockHeight);
_depth = bx::uint16_max(1, _depth);
- uint32_t max = bx::uint32_max(_width, bx::uint32_max(_height, _depth) );
- uint32_t numMips = bx::uint32_max(1, uint8_t(bx::flog2(float(max) ) ) );
+ uint8_t numMips = calcNumMips(true, _width, _height, _depth);
- return uint8_t(numMips);
+ return numMips;
}
uint32_t imageGetSize(TextureInfo* _info, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _hasMips, uint16_t _numLayers, TextureFormat::Enum _format)
@@ -289,7 +288,7 @@ namespace bgfx
height = bx::uint32_max(blockHeight * minBlockY, ( (height + blockHeight - 1) / blockHeight)*blockHeight);
depth = bx::uint32_max(1, depth);
- size += width*height*depth*bpp/8 * sides;
+ size += uint32_t(uint64_t(width*height*depth)*bpp/8 * sides);
width >>= 1;
height >>= 1;
@@ -336,13 +335,13 @@ namespace bgfx
}
}
- void imageRgba8Downsample2x2Ref(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba8Downsample2x2Ref(void* _dst, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _srcPitch, const void* _src)
{
- const uint32_t dstwidth = _width/2;
- const uint32_t dstheight = _height/2;
+ const uint32_t dstWidth = _width/2;
+ const uint32_t dstHeight = _height/2;
- if (0 == dstwidth
- || 0 == dstheight)
+ if (0 == dstWidth
+ || 0 == dstHeight)
{
return;
}
@@ -350,50 +349,53 @@ namespace bgfx
uint8_t* dst = (uint8_t*)_dst;
const uint8_t* src = (const uint8_t*)_src;
- for (uint32_t yy = 0, ystep = _pitch*2; yy < dstheight; ++yy, src += ystep)
+ for (uint32_t zz = 0; zz < _depth; ++zz)
{
- const uint8_t* rgba = src;
- for (uint32_t xx = 0; xx < dstwidth; ++xx, rgba += 8, dst += 4)
+ for (uint32_t yy = 0, ystep = _srcPitch*2; yy < dstHeight; ++yy, src += ystep)
{
- float rr = bx::fpow(rgba[ 0], 2.2f);
- float gg = bx::fpow(rgba[ 1], 2.2f);
- float bb = bx::fpow(rgba[ 2], 2.2f);
- float aa = rgba[ 3];
- rr += bx::fpow(rgba[ 4], 2.2f);
- gg += bx::fpow(rgba[ 5], 2.2f);
- bb += bx::fpow(rgba[ 6], 2.2f);
- aa += rgba[ 7];
- rr += bx::fpow(rgba[_pitch+0], 2.2f);
- gg += bx::fpow(rgba[_pitch+1], 2.2f);
- bb += bx::fpow(rgba[_pitch+2], 2.2f);
- aa += rgba[_pitch+3];
- rr += bx::fpow(rgba[_pitch+4], 2.2f);
- gg += bx::fpow(rgba[_pitch+5], 2.2f);
- bb += bx::fpow(rgba[_pitch+6], 2.2f);
- aa += rgba[_pitch+7];
-
- rr *= 0.25f;
- gg *= 0.25f;
- bb *= 0.25f;
- aa *= 0.25f;
- rr = bx::fpow(rr, 1.0f/2.2f);
- gg = bx::fpow(gg, 1.0f/2.2f);
- bb = bx::fpow(bb, 1.0f/2.2f);
- dst[0] = (uint8_t)rr;
- dst[1] = (uint8_t)gg;
- dst[2] = (uint8_t)bb;
- dst[3] = (uint8_t)aa;
+ const uint8_t* rgba = src;
+ for (uint32_t xx = 0; xx < dstWidth; ++xx, rgba += 8, dst += 4)
+ {
+ float rr = bx::fpow(rgba[ 0], 2.2f);
+ float gg = bx::fpow(rgba[ 1], 2.2f);
+ float bb = bx::fpow(rgba[ 2], 2.2f);
+ float aa = rgba[ 3];
+ rr += bx::fpow(rgba[ 4], 2.2f);
+ gg += bx::fpow(rgba[ 5], 2.2f);
+ bb += bx::fpow(rgba[ 6], 2.2f);
+ aa += rgba[ 7];
+ rr += bx::fpow(rgba[_srcPitch+0], 2.2f);
+ gg += bx::fpow(rgba[_srcPitch+1], 2.2f);
+ bb += bx::fpow(rgba[_srcPitch+2], 2.2f);
+ aa += rgba[_srcPitch+3];
+ rr += bx::fpow(rgba[_srcPitch+4], 2.2f);
+ gg += bx::fpow(rgba[_srcPitch+5], 2.2f);
+ bb += bx::fpow(rgba[_srcPitch+6], 2.2f);
+ aa += rgba[_srcPitch+7];
+
+ rr *= 0.25f;
+ gg *= 0.25f;
+ bb *= 0.25f;
+ aa *= 0.25f;
+ rr = bx::fpow(rr, 1.0f/2.2f);
+ gg = bx::fpow(gg, 1.0f/2.2f);
+ bb = bx::fpow(bb, 1.0f/2.2f);
+ dst[0] = (uint8_t)rr;
+ dst[1] = (uint8_t)gg;
+ dst[2] = (uint8_t)bb;
+ dst[3] = (uint8_t)aa;
+ }
}
}
}
- void imageRgba8Downsample2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba8Downsample2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _srcPitch, const void* _src)
{
- const uint32_t dstwidth = _width/2;
- const uint32_t dstheight = _height/2;
+ const uint32_t dstWidth = _width/2;
+ const uint32_t dstHeight = _height/2;
- if (0 == dstwidth
- || 0 == dstheight)
+ if (0 == dstWidth
+ || 0 == dstHeight)
{
return;
}
@@ -412,109 +414,120 @@ namespace bgfx
const simd128_t linear = simd_ld(2.2f, 2.2f, 2.2f, 1.0f);
const simd128_t quater = simd_splat(0.25f);
- for (uint32_t yy = 0, ystep = _pitch*2; yy < dstheight; ++yy, src += ystep)
+ for (uint32_t zz = 0; zz < _depth; ++zz)
{
- const uint8_t* rgba = src;
- for (uint32_t xx = 0; xx < dstwidth; ++xx, rgba += 8, dst += 4)
+ for (uint32_t yy = 0, ystep = _srcPitch*2; yy < dstHeight; ++yy, src += ystep)
{
- const simd128_t abgr0 = simd_splat(rgba);
- const simd128_t abgr1 = simd_splat(rgba+4);
- const simd128_t abgr2 = simd_splat(rgba+_pitch);
- const simd128_t abgr3 = simd_splat(rgba+_pitch+4);
-
- const simd128_t abgr0m = simd_and(abgr0, umask);
- const simd128_t abgr1m = simd_and(abgr1, umask);
- const simd128_t abgr2m = simd_and(abgr2, umask);
- const simd128_t abgr3m = simd_and(abgr3, umask);
- const simd128_t abgr0x = simd_xor(abgr0m, wflip);
- const simd128_t abgr1x = simd_xor(abgr1m, wflip);
- const simd128_t abgr2x = simd_xor(abgr2m, wflip);
- const simd128_t abgr3x = simd_xor(abgr3m, wflip);
- const simd128_t abgr0f = simd_itof(abgr0x);
- const simd128_t abgr1f = simd_itof(abgr1x);
- const simd128_t abgr2f = simd_itof(abgr2x);
- const simd128_t abgr3f = simd_itof(abgr3x);
- const simd128_t abgr0c = simd_add(abgr0f, wadd);
- const simd128_t abgr1c = simd_add(abgr1f, wadd);
- const simd128_t abgr2c = simd_add(abgr2f, wadd);
- const simd128_t abgr3c = simd_add(abgr3f, wadd);
- const simd128_t abgr0n = simd_mul(abgr0c, unpack);
- const simd128_t abgr1n = simd_mul(abgr1c, unpack);
- const simd128_t abgr2n = simd_mul(abgr2c, unpack);
- const simd128_t abgr3n = simd_mul(abgr3c, unpack);
-
- const simd128_t abgr0l = simd_pow(abgr0n, linear);
- const simd128_t abgr1l = simd_pow(abgr1n, linear);
- const simd128_t abgr2l = simd_pow(abgr2n, linear);
- const simd128_t abgr3l = simd_pow(abgr3n, linear);
-
- const simd128_t sum0 = simd_add(abgr0l, abgr1l);
- const simd128_t sum1 = simd_add(abgr2l, abgr3l);
- const simd128_t sum2 = simd_add(sum0, sum1);
- const simd128_t avg0 = simd_mul(sum2, quater);
- const simd128_t avg1 = simd_pow(avg0, gamma);
-
- const simd128_t avg2 = simd_mul(avg1, pack);
- const simd128_t ftoi0 = simd_ftoi(avg2);
- const simd128_t ftoi1 = simd_and(ftoi0, pmask);
- const simd128_t zwxy = simd_swiz_zwxy(ftoi1);
- const simd128_t tmp0 = simd_or(ftoi1, zwxy);
- const simd128_t yyyy = simd_swiz_yyyy(tmp0);
- const simd128_t tmp1 = simd_iadd(yyyy, yyyy);
- const simd128_t result = simd_or(tmp0, tmp1);
-
- simd_stx(dst, result);
+ const uint8_t* rgba = src;
+ for (uint32_t xx = 0; xx < dstWidth; ++xx, rgba += 8, dst += 4)
+ {
+ const simd128_t abgr0 = simd_splat(rgba);
+ const simd128_t abgr1 = simd_splat(rgba+4);
+ const simd128_t abgr2 = simd_splat(rgba+_srcPitch);
+ const simd128_t abgr3 = simd_splat(rgba+_srcPitch+4);
+
+ const simd128_t abgr0m = simd_and(abgr0, umask);
+ const simd128_t abgr1m = simd_and(abgr1, umask);
+ const simd128_t abgr2m = simd_and(abgr2, umask);
+ const simd128_t abgr3m = simd_and(abgr3, umask);
+ const simd128_t abgr0x = simd_xor(abgr0m, wflip);
+ const simd128_t abgr1x = simd_xor(abgr1m, wflip);
+ const simd128_t abgr2x = simd_xor(abgr2m, wflip);
+ const simd128_t abgr3x = simd_xor(abgr3m, wflip);
+ const simd128_t abgr0f = simd_itof(abgr0x);
+ const simd128_t abgr1f = simd_itof(abgr1x);
+ const simd128_t abgr2f = simd_itof(abgr2x);
+ const simd128_t abgr3f = simd_itof(abgr3x);
+ const simd128_t abgr0c = simd_add(abgr0f, wadd);
+ const simd128_t abgr1c = simd_add(abgr1f, wadd);
+ const simd128_t abgr2c = simd_add(abgr2f, wadd);
+ const simd128_t abgr3c = simd_add(abgr3f, wadd);
+ const simd128_t abgr0n = simd_mul(abgr0c, unpack);
+ const simd128_t abgr1n = simd_mul(abgr1c, unpack);
+ const simd128_t abgr2n = simd_mul(abgr2c, unpack);
+ const simd128_t abgr3n = simd_mul(abgr3c, unpack);
+
+ const simd128_t abgr0l = simd_pow(abgr0n, linear);
+ const simd128_t abgr1l = simd_pow(abgr1n, linear);
+ const simd128_t abgr2l = simd_pow(abgr2n, linear);
+ const simd128_t abgr3l = simd_pow(abgr3n, linear);
+
+ const simd128_t sum0 = simd_add(abgr0l, abgr1l);
+ const simd128_t sum1 = simd_add(abgr2l, abgr3l);
+ const simd128_t sum2 = simd_add(sum0, sum1);
+ const simd128_t avg0 = simd_mul(sum2, quater);
+ const simd128_t avg1 = simd_pow(avg0, gamma);
+
+ const simd128_t avg2 = simd_mul(avg1, pack);
+ const simd128_t ftoi0 = simd_ftoi(avg2);
+ const simd128_t ftoi1 = simd_and(ftoi0, pmask);
+ const simd128_t zwxy = simd_swiz_zwxy(ftoi1);
+ const simd128_t tmp0 = simd_or(ftoi1, zwxy);
+ const simd128_t yyyy = simd_swiz_yyyy(tmp0);
+ const simd128_t tmp1 = simd_iadd(yyyy, yyyy);
+ const simd128_t result = simd_or(tmp0, tmp1);
+
+ simd_stx(dst, result);
+ }
}
}
}
- void imageRgba32fToLinear(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba32fToLinear(void* _dst, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _srcPitch, const void* _src)
{
uint8_t* dst = ( uint8_t*)_dst;
const uint8_t* src = (const uint8_t*)_src;
- for (uint32_t yy = 0; yy < _height; ++yy, src += _pitch)
+ for (uint32_t zz = 0; zz < _depth; ++zz)
{
- for (uint32_t xx = 0; xx < _width; ++xx, dst += 16)
+ for (uint32_t yy = 0; yy < _height; ++yy, src += _srcPitch, dst += _width*16)
{
- float* fd = ( float*)dst;
- const float* fs = (const float*)src;
-
- fd[0] = bx::fpow(fs[0], 1.0f/2.2f);
- fd[1] = bx::fpow(fs[1], 1.0f/2.2f);
- fd[2] = bx::fpow(fs[2], 1.0f/2.2f);
- fd[3] = fs[3];
+ for (uint32_t xx = 0; xx < _width; ++xx)
+ {
+ const uint32_t offset = xx * 16;
+ float* fd = ( float*)(dst + offset);
+ const float* fs = (const float*)(src + offset);
+
+ fd[0] = bx::fpow(fs[0], 1.0f/2.2f);
+ fd[1] = bx::fpow(fs[1], 1.0f/2.2f);
+ fd[2] = bx::fpow(fs[2], 1.0f/2.2f);
+ fd[3] = fs[3];
+ }
}
}
}
- void imageRgba32fToGamma(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba32fToGamma(void* _dst, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _srcPitch, const void* _src)
{
uint8_t* dst = ( uint8_t*)_dst;
const uint8_t* src = (const uint8_t*)_src;
- for (uint32_t yy = 0; yy < _height; ++yy, src += _pitch)
+ for (uint32_t zz = 0; zz < _depth; ++zz)
{
- for (uint32_t xx = 0; xx < _width; ++xx, dst += 16)
+ for (uint32_t yy = 0; yy < _height; ++yy, src += _srcPitch, dst += _width*16)
{
- float* fd = ( float*)dst;
- const float* fs = (const float*)src;
-
- fd[0] = bx::fpow(fs[0], 2.2f);
- fd[1] = bx::fpow(fs[1], 2.2f);
- fd[2] = bx::fpow(fs[2], 2.2f);
- fd[3] = fs[3];
+ for (uint32_t xx = 0; xx < _width; ++xx)
+ {
+ const uint32_t offset = xx * 16;
+ float* fd = ( float*)(dst + offset);
+ const float* fs = (const float*)(src + offset);
+
+ fd[0] = bx::fpow(fs[0], 2.2f);
+ fd[1] = bx::fpow(fs[1], 2.2f);
+ fd[2] = bx::fpow(fs[2], 2.2f);
+ fd[3] = fs[3];
+ }
}
}
}
- void imageRgba32fLinearDownsample2x2Ref(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba32fLinearDownsample2x2Ref(void* _dst, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _srcPitch, const void* _src)
{
- const uint32_t dstwidth = _width/2;
- const uint32_t dstheight = _height/2;
+ const uint32_t dstWidth = _width/2;
+ const uint32_t dstHeight = _height/2;
- if (0 == dstwidth
- || 0 == dstheight)
+ if (0 == dstWidth
+ || 0 == dstHeight)
{
return;
}
@@ -522,53 +535,59 @@ namespace bgfx
const uint8_t* src = (const uint8_t*)_src;
uint8_t* dst = (uint8_t*)_dst;
- for (uint32_t yy = 0, ystep = _pitch*2; yy < dstheight; ++yy, src += ystep)
+ for (uint32_t zz = 0; zz < _depth; ++zz)
{
- const float* rgba0 = (const float*)&src[0];
- const float* rgba1 = (const float*)&src[_pitch];
- for (uint32_t xx = 0; xx < dstwidth; ++xx, rgba0 += 8, rgba1 += 8, dst += 16)
+ for (uint32_t yy = 0, ystep = _srcPitch*2; yy < dstHeight; ++yy, src += ystep)
{
- float xyz[4];
- xyz[0] = rgba0[0];
- xyz[1] = rgba0[1];
- xyz[2] = rgba0[2];
- xyz[3] = rgba0[3];
-
- xyz[0] += rgba0[4];
- xyz[1] += rgba0[5];
- xyz[2] += rgba0[6];
- xyz[3] += rgba0[7];
-
- xyz[0] += rgba1[0];
- xyz[1] += rgba1[1];
- xyz[2] += rgba1[2];
- xyz[3] += rgba1[3];
-
- xyz[0] += rgba1[4];
- xyz[1] += rgba1[5];
- xyz[2] += rgba1[6];
- xyz[3] += rgba1[7];
-
- xyz[0] *= 0.25f;
- xyz[1] *= 0.25f;
- xyz[2] *= 0.25f;
- xyz[3] *= 0.25f;
+ const float* rgba0 = (const float*)&src[0];
+ const float* rgba1 = (const float*)&src[_srcPitch];
+ for (uint32_t xx = 0; xx < dstWidth; ++xx, rgba0 += 8, rgba1 += 8, dst += 16)
+ {
+ float xyz[4];
+
+ xyz[0] = rgba0[0];
+ xyz[1] = rgba0[1];
+ xyz[2] = rgba0[2];
+ xyz[3] = rgba0[3];
+
+ xyz[0] += rgba0[4];
+ xyz[1] += rgba0[5];
+ xyz[2] += rgba0[6];
+ xyz[3] += rgba0[7];
+
+ xyz[0] += rgba1[0];
+ xyz[1] += rgba1[1];
+ xyz[2] += rgba1[2];
+ xyz[3] += rgba1[3];
+
+ xyz[0] += rgba1[4];
+ xyz[1] += rgba1[5];
+ xyz[2] += rgba1[6];
+ xyz[3] += rgba1[7];
+
+ xyz[0] *= 0.25f;
+ xyz[1] *= 0.25f;
+ xyz[2] *= 0.25f;
+ xyz[3] *= 0.25f;
+
+ bx::packRgba32F(dst, xyz);
+ }
}
}
}
- void imageRgba32fLinearDownsample2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba32fLinearDownsample2x2(void* _dst, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _srcPitch, const void* _src)
{
- imageRgba32fLinearDownsample2x2Ref(_dst, _width, _height, _pitch, _src);
+ imageRgba32fLinearDownsample2x2Ref(_dst, _width, _height, _depth, _srcPitch, _src);
}
- void imageRgba32fDownsample2x2NormalMapRef(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba32fDownsample2x2NormalMapRef(void* _dst, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src)
{
- const uint32_t dstwidth = _width/2;
- const uint32_t dstheight = _height/2;
+ const uint32_t dstWidth = _width/2;
+ const uint32_t dstHeight = _height/2;
- if (0 == dstwidth
- || 0 == dstheight)
+ if (0 == dstWidth
+ || 0 == dstHeight)
{
return;
}
@@ -576,43 +595,50 @@ namespace bgfx
const uint8_t* src = (const uint8_t*)_src;
uint8_t* dst = (uint8_t*)_dst;
- for (uint32_t yy = 0, ystep = _pitch*2; yy < dstheight; ++yy, src += ystep)
+ for (uint32_t yy = 0, ystep = _srcPitch*2; yy < dstHeight; ++yy, src += ystep)
{
const float* rgba0 = (const float*)&src[0];
- const float* rgba1 = (const float*)&src[_pitch];
- for (uint32_t xx = 0; xx < dstwidth; ++xx, rgba0 += 8, rgba1 += 8, dst += 16)
+ const float* rgba1 = (const float*)&src[_srcPitch];
+ for (uint32_t xx = 0; xx < dstWidth; ++xx, rgba0 += 8, rgba1 += 8, dst += 16)
{
float xyz[3];
+
xyz[0] = rgba0[0];
xyz[1] = rgba0[1];
xyz[2] = rgba0[2];
+
xyz[0] += rgba0[4];
xyz[1] += rgba0[5];
xyz[2] += rgba0[6];
+
xyz[0] += rgba1[0];
xyz[1] += rgba1[1];
xyz[2] += rgba1[2];
+
xyz[0] += rgba1[4];
xyz[1] += rgba1[5];
xyz[2] += rgba1[6];
+
bx::vec3Norm( (float*)dst, xyz);
}
}
}
- void imageRgba32fDownsample2x2NormalMap(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba32fDownsample2x2NormalMap(void* _dst, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src)
{
- imageRgba32fDownsample2x2NormalMapRef(_dst, _width, _height, _pitch, _src);
+ imageRgba32fDownsample2x2NormalMapRef(_dst, _width, _height, _srcPitch, _src);
}
- void imageSwizzleBgra8Ref(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageSwizzleBgra8Ref(void* _dst, uint32_t _dstPitch, uint32_t _width, uint32_t _height, const void* _src, uint32_t _srcPitch)
{
- const uint8_t* src = (uint8_t*) _src;
- const uint8_t* next = src + _pitch;
- uint8_t* dst = (uint8_t*)_dst;
+ const uint8_t* srcData = (uint8_t*) _src;
+ uint8_t* dstData = (uint8_t*)_dst;
- for (uint32_t yy = 0; yy < _height; ++yy, src = next, next += _pitch)
+ for (uint32_t yy = 0; yy < _height; ++yy, srcData += _srcPitch, dstData += _dstPitch)
{
+ const uint8_t* src = srcData;
+ uint8_t* dst = dstData;
+
for (uint32_t xx = 0; xx < _width; ++xx, src += 4, dst += 4)
{
uint8_t rr = src[0];
@@ -627,7 +653,7 @@ namespace bgfx
}
}
- void imageSwizzleBgra8(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageSwizzleBgra8(void* _dst, uint32_t _dstPitch, uint32_t _width, uint32_t _height, const void* _src, uint32_t _srcPitch)
{
// Test can we do four 4-byte pixels at the time.
if (0 != (_width&0x3)
@@ -639,7 +665,7 @@ namespace bgfx
BX_WARN(bx::isAligned(_src, 16), "Source %p is not 16-byte aligned.", _src);
BX_WARN(bx::isAligned(_dst, 16), "Destination %p is not 16-byte aligned.", _dst);
BX_WARN(_width < 4, "Image width must be multiple of 4 (width %d).", _width);
- imageSwizzleBgra8Ref(_dst, _width, _height, _pitch, _src);
+ imageSwizzleBgra8Ref(_dst, _dstPitch, _width, _height, _src, _srcPitch);
return;
}
@@ -647,14 +673,16 @@ namespace bgfx
const simd128_t mf0f0 = simd_isplat(0xff00ff00);
const simd128_t m0f0f = simd_isplat(0x00ff00ff);
- const uint8_t* src = (uint8_t*) _src;
- const uint8_t* next = src + _pitch;
- uint8_t* dst = (uint8_t*)_dst;
+ const uint32_t width = _width/4;
- const uint32_t width = _width/4;
+ const uint8_t* srcData = (uint8_t*) _src;
+ uint8_t* dstData = (uint8_t*)_dst;
- for (uint32_t yy = 0; yy < _height; ++yy, src = next, next += _pitch)
+ for (uint32_t yy = 0; yy < _height; ++yy, srcData += _srcPitch, dstData += _dstPitch)
{
+ const uint8_t* src = srcData;
+ uint8_t* dst = dstData;
+
for (uint32_t xx = 0; xx < width; ++xx, src += 16, dst += 16)
{
const simd128_t tabgr = simd_ld(src);
@@ -675,22 +703,19 @@ namespace bgfx
const uint8_t* src = (uint8_t*)_src;
uint8_t* dst = (uint8_t*)_dst;
- for (uint32_t yy = 0; yy < _height; ++yy, src += _srcPitch, dst += _dstPitch)
- {
- bx::memCopy(dst, src, pitch);
- }
+ bx::memCopy(dst, src, pitch, _height, _srcPitch, _dstPitch);
}
- void imageCopy(void* _dst, uint32_t _width, uint32_t _height, uint32_t _bpp, uint32_t _pitch, const void* _src)
+ void imageCopy(void* _dst, uint32_t _width, uint32_t _height, uint32_t _bpp, uint32_t _srcPitch, const void* _src)
{
const uint32_t dstPitch = _width*_bpp/8;
- imageCopy(_dst, _height, _pitch, _src, dstPitch);
+ imageCopy(_dst, _height, _srcPitch, _src, dstPitch);
}
struct PackUnpack
{
- bx::PackFn pack;
- bx::UnpackFn unpack;
+ PackFn pack;
+ UnpackFn unpack;
};
static const PackUnpack s_packUnpack[] =
@@ -761,7 +786,7 @@ namespace bgfx
{ bx::packRgba4, bx::unpackRgba4 }, // RGBA4
{ bx::packRgb5a1, bx::unpackRgb5a1 }, // RGB5A1
{ bx::packRgb10A2, bx::unpackRgb10A2 }, // RGB10A2
- { bx::packR11G11B10F, bx::unpackR11G11B10F }, // R11G11B10F
+ { bx::packRG11B10F, bx::unpackRG11B10F }, // RG11B10F
{ NULL, NULL }, // UnknownDepth
{ bx::packR16, bx::unpackR16 }, // D16
{ bx::packR24, bx::unpackR24 }, // D24
@@ -774,16 +799,26 @@ namespace bgfx
};
BX_STATIC_ASSERT(TextureFormat::Count == BX_COUNTOF(s_packUnpack) );
+ PackFn getPack(TextureFormat::Enum _format)
+ {
+ return s_packUnpack[_format].pack;
+ }
+
+ UnpackFn getUnpack(TextureFormat::Enum _format)
+ {
+ return s_packUnpack[_format].unpack;
+ }
+
bool imageConvert(TextureFormat::Enum _dstFormat, TextureFormat::Enum _srcFormat)
{
- bx::UnpackFn unpack = s_packUnpack[_srcFormat].unpack;
- bx::PackFn pack = s_packUnpack[_dstFormat].pack;
+ UnpackFn unpack = s_packUnpack[_srcFormat].unpack;
+ PackFn pack = s_packUnpack[_dstFormat].pack;
return NULL != pack
&& NULL != unpack
;
}
- void imageConvert(void* _dst, uint32_t _bpp, bx::PackFn _pack, const void* _src, bx::UnpackFn _unpack, uint32_t _size)
+ void imageConvert(void* _dst, uint32_t _bpp, PackFn _pack, const void* _src, UnpackFn _unpack, uint32_t _size)
{
const uint8_t* src = (uint8_t*)_src;
uint8_t* dst = (uint8_t*)_dst;
@@ -798,28 +833,31 @@ namespace bgfx
}
}
- void imageConvert(void* _dst, uint32_t _dstBpp, bx::PackFn _pack, const void* _src, uint32_t _srcBpp, bx::UnpackFn _unpack, uint32_t _width, uint32_t _height, uint32_t _srcPitch)
+ void imageConvert(void* _dst, uint32_t _dstBpp, PackFn _pack, const void* _src, uint32_t _srcBpp, UnpackFn _unpack, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _srcPitch)
{
const uint8_t* src = (uint8_t*)_src;
uint8_t* dst = (uint8_t*)_dst;
const uint32_t dstPitch = _width * _dstBpp / 8;
- for (uint32_t yy = 0; yy < _height; ++yy, src += _srcPitch, dst += dstPitch)
+ for (uint32_t zz = 0; zz < _depth; ++zz)
{
- for (uint32_t xx = 0; xx < _width; ++xx)
+ for (uint32_t yy = 0; yy < _height; ++yy, src += _srcPitch, dst += dstPitch)
{
- float rgba[4];
- _unpack(rgba, &src[xx*_srcBpp/8]);
- _pack(&dst[xx*_dstBpp/8], rgba);
+ for (uint32_t xx = 0; xx < _width; ++xx)
+ {
+ float rgba[4];
+ _unpack(rgba, &src[xx*_srcBpp/8]);
+ _pack(&dst[xx*_dstBpp/8], rgba);
+ }
}
}
}
- bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height, uint32_t _srcPitch)
+ bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _srcPitch)
{
- bx::UnpackFn unpack = s_packUnpack[_srcFormat].unpack;
- bx::PackFn pack = s_packUnpack[_dstFormat].pack;
+ UnpackFn unpack = s_packUnpack[_srcFormat].unpack;
+ PackFn pack = s_packUnpack[_dstFormat].pack;
if (NULL == pack
|| NULL == unpack)
{
@@ -828,22 +866,22 @@ namespace bgfx
const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel;
const uint32_t dstBpp = s_imageBlockInfo[_dstFormat].bitsPerPixel;
- imageConvert(_dst, dstBpp, pack, _src, srcBpp, unpack, _width, _height, _srcPitch);
+ imageConvert(_dst, dstBpp, pack, _src, srcBpp, unpack, _width, _height, _depth, _srcPitch);
return true;
}
- bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height)
+ bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height, uint32_t _depth)
{
const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel;
if (_dstFormat == _srcFormat)
{
- bx::memCopy(_dst, _src, _width*_height*srcBpp/8);
+ bx::memCopy(_dst, _src, _width*_height*_depth*srcBpp/8);
return true;
}
- return imageConvert(_dst, _dstFormat, _src, _srcFormat, _width, _height, _width*srcBpp/8);
+ return imageConvert(_dst, _dstFormat, _src, _srcFormat, _width, _height, _depth, _width*srcBpp/8);
}
ImageContainer* imageConvert(bx::AllocatorI* _allocator, TextureFormat::Enum _dstFormat, const ImageContainer& _input)
@@ -858,10 +896,8 @@ namespace bgfx
, 1 < _input.m_numMips
);
- const uint8_t bpp = getBitsPerPixel(_dstFormat);
const uint16_t numSides = _input.m_numLayers * (_input.m_cubeMap ? 6 : 1);
- uint8_t* dst = (uint8_t*)output->m_data ;
for (uint16_t side = 0; side < numSides; ++side)
{
for (uint8_t lod = 0, num = _input.m_numMips; lod < num; ++lod)
@@ -869,20 +905,23 @@ namespace bgfx
ImageMip mip;
if (imageGetRawData(_input, side, lod, _input.m_data, _input.m_size, mip) )
{
- bool ok = imageConvert(dst
+ ImageMip dstMip;
+ imageGetRawData(*output, side, lod, output->m_data, output->m_size, dstMip);
+ uint8_t* dstData = const_cast<uint8_t*>(dstMip.m_data);
+
+ bool ok = imageConvert(dstData
, _dstFormat
, mip.m_data
, mip.m_format
, mip.m_width
, mip.m_height
+ , mip.m_depth
);
BX_CHECK(ok, "Conversion from %s to %s failed!"
, getName(_input.m_format)
, getName(output->m_format)
);
BX_UNUSED(ok);
-
- dst += mip.m_width*mip.m_height*bpp/8;
}
}
}
@@ -890,10 +929,19 @@ namespace bgfx
return output;
}
- ImageContainer* imageParseBgfx(bx::AllocatorI* _allocator, const void* _src, uint32_t _size)
+ typedef bool (*ParseFn)(ImageContainer&, bx::ReaderSeekerI*, bx::Error*);
+
+ template<uint32_t magicT, ParseFn parseFnT>
+ ImageContainer* imageParseT(bx::AllocatorI* _allocator, const void* _src, uint32_t _size, bx::Error* _err)
{
+ bx::MemoryReader reader(_src, _size);
+
+ uint32_t magic;
+ bx::read(&reader, magic);
+
ImageContainer imageContainer;
- if (!imageParse(imageContainer, _src, _size) )
+ if (magicT != magic
+ || !parseFnT(imageContainer, &reader, _err) )
{
return NULL;
}
@@ -909,17 +957,20 @@ namespace bgfx
);
const uint16_t numSides = imageContainer.m_numLayers * (imageContainer.m_cubeMap ? 6 : 1);
- uint8_t* dst = (uint8_t*)output->m_data;
for (uint16_t side = 0; side < numSides; ++side)
{
for (uint8_t lod = 0, num = imageContainer.m_numMips; lod < num; ++lod)
{
- ImageMip mip;
- if (imageGetRawData(imageContainer, side, lod, _src, _size, mip) )
+ ImageMip dstMip;
+ if (imageGetRawData(*output, side, lod, output->m_data, output->m_size, dstMip) )
{
- bx::memCopy(dst, mip.m_data, mip.m_size);
- dst += mip.m_size;
+ ImageMip mip;
+ if (imageGetRawData(imageContainer, side, lod, _src, _size, mip) )
+ {
+ uint8_t* dstData = const_cast<uint8_t*>(dstMip.m_data);
+ bx::memCopy(dstData, mip.m_data, mip.m_size);
+ }
}
}
}
@@ -1724,26 +1775,27 @@ namespace bgfx
_depth = bx::uint16_max(1, _depth);
_numLayers = bx::uint16_max(1, _numLayers);
- const uint8_t numMips = _hasMips ? imageGetNumMips(_format, _width, _height) : 1;
+ const uint8_t numMips = _hasMips ? imageGetNumMips(_format, _width, _height, _depth) : 1;
uint32_t size = imageGetSize(NULL, _width, _height, _depth, _cubeMap, _hasMips, _numLayers, _format);
ImageContainer* imageContainer = (ImageContainer*)BX_ALLOC(_allocator, size + sizeof(ImageContainer) );
- imageContainer->m_allocator = _allocator;
- imageContainer->m_data = imageContainer + 1;
- imageContainer->m_format = _format;
- imageContainer->m_size = size;
- imageContainer->m_offset = 0;
- imageContainer->m_width = _width;
- imageContainer->m_height = _height;
- imageContainer->m_depth = _depth;
- imageContainer->m_numLayers = _numLayers;
- imageContainer->m_numMips = numMips;
- imageContainer->m_hasAlpha = false;
- imageContainer->m_cubeMap = _cubeMap;
- imageContainer->m_ktx = false;
- imageContainer->m_ktxLE = false;
- imageContainer->m_srgb = false;
+ imageContainer->m_allocator = _allocator;
+ imageContainer->m_data = imageContainer + 1;
+ imageContainer->m_format = _format;
+ imageContainer->m_orientation = Orientation::R0;
+ imageContainer->m_size = size;
+ imageContainer->m_offset = 0;
+ imageContainer->m_width = _width;
+ imageContainer->m_height = _height;
+ imageContainer->m_depth = _depth;
+ imageContainer->m_numLayers = _numLayers;
+ imageContainer->m_numMips = numMips;
+ imageContainer->m_hasAlpha = false;
+ imageContainer->m_cubeMap = _cubeMap;
+ imageContainer->m_ktx = false;
+ imageContainer->m_ktxLE = false;
+ imageContainer->m_srgb = false;
if (NULL != _data)
{
@@ -1826,40 +1878,49 @@ namespace bgfx
#define DDS_FORMAT_BC7_UNORM_SRGB 99
#define DDS_FORMAT_B4G4R4A4_UNORM 115
-#define DDSD_CAPS 0x00000001
-#define DDSD_HEIGHT 0x00000002
-#define DDSD_WIDTH 0x00000004
-#define DDSD_PITCH 0x00000008
-#define DDSD_PIXELFORMAT 0x00001000
-#define DDSD_MIPMAPCOUNT 0x00020000
-#define DDSD_LINEARSIZE 0x00080000
-#define DDSD_DEPTH 0x00800000
-
-#define DDPF_ALPHAPIXELS 0x00000001
-#define DDPF_ALPHA 0x00000002
-#define DDPF_FOURCC 0x00000004
-#define DDPF_INDEXED 0x00000020
-#define DDPF_RGB 0x00000040
-#define DDPF_YUV 0x00000200
-#define DDPF_LUMINANCE 0x00020000
-
-#define DDSCAPS_COMPLEX 0x00000008
-#define DDSCAPS_TEXTURE 0x00001000
-#define DDSCAPS_MIPMAP 0x00400000
-
-#define DDSCAPS2_CUBEMAP 0x00000200
-#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400
-#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800
-#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000
-#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000
-#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000
-#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000
-
-#define DDS_CUBEMAP_ALLFACES (DDSCAPS2_CUBEMAP_POSITIVEX|DDSCAPS2_CUBEMAP_NEGATIVEX \
- |DDSCAPS2_CUBEMAP_POSITIVEY|DDSCAPS2_CUBEMAP_NEGATIVEY \
- |DDSCAPS2_CUBEMAP_POSITIVEZ|DDSCAPS2_CUBEMAP_NEGATIVEZ)
-
-#define DDSCAPS2_VOLUME 0x00200000
+#define DDS_DX10_DIMENSION_TEXTURE2D 3
+#define DDS_DX10_DIMENSION_TEXTURE3D 4
+#define DDS_DX10_MISC_TEXTURECUBE 4
+
+#define DDSD_CAPS 0x00000001
+#define DDSD_HEIGHT 0x00000002
+#define DDSD_WIDTH 0x00000004
+#define DDSD_PITCH 0x00000008
+#define DDSD_PIXELFORMAT 0x00001000
+#define DDSD_MIPMAPCOUNT 0x00020000
+#define DDSD_LINEARSIZE 0x00080000
+#define DDSD_DEPTH 0x00800000
+
+#define DDPF_ALPHAPIXELS 0x00000001
+#define DDPF_ALPHA 0x00000002
+#define DDPF_FOURCC 0x00000004
+#define DDPF_INDEXED 0x00000020
+#define DDPF_RGB 0x00000040
+#define DDPF_YUV 0x00000200
+#define DDPF_LUMINANCE 0x00020000
+#define DDPF_BUMPDUDV 0x00080000
+
+#define DDSCAPS_COMPLEX 0x00000008
+#define DDSCAPS_TEXTURE 0x00001000
+#define DDSCAPS_MIPMAP 0x00400000
+
+#define DDSCAPS2_VOLUME 0x00200000
+#define DDSCAPS2_CUBEMAP 0x00000200
+#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400
+#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800
+#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000
+#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000
+#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000
+#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000
+
+#define DSCAPS2_CUBEMAP_ALLSIDES (0 \
+ | DDSCAPS2_CUBEMAP_POSITIVEX \
+ | DDSCAPS2_CUBEMAP_NEGATIVEX \
+ | DDSCAPS2_CUBEMAP_POSITIVEY \
+ | DDSCAPS2_CUBEMAP_NEGATIVEY \
+ | DDSCAPS2_CUBEMAP_POSITIVEZ \
+ | DDSCAPS2_CUBEMAP_NEGATIVEZ \
+ )
struct TranslateDdsFormat
{
@@ -1938,116 +1999,147 @@ namespace bgfx
{ DDS_FORMAT_B4G4R4A4_UNORM, TextureFormat::RGBA4, false },
{ DDS_FORMAT_B5G5R5A1_UNORM, TextureFormat::RGB5A1, false },
{ DDS_FORMAT_R10G10B10A2_UNORM, TextureFormat::RGB10A2, false },
- { DDS_FORMAT_R11G11B10_FLOAT, TextureFormat::R11G11B10F, false },
+ { DDS_FORMAT_R11G11B10_FLOAT, TextureFormat::RG11B10F, false },
};
struct TranslateDdsPixelFormat
{
uint32_t m_bitCount;
+ uint32_t m_flags;
uint32_t m_bitmask[4];
TextureFormat::Enum m_textureFormat;
};
static const TranslateDdsPixelFormat s_translateDdsPixelFormat[] =
{
- { 8, { 0x000000ff, 0x00000000, 0x00000000, 0x00000000 }, TextureFormat::R8 },
- { 16, { 0x0000ffff, 0x00000000, 0x00000000, 0x00000000 }, TextureFormat::R16U },
- { 16, { 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }, TextureFormat::RGBA4 },
- { 16, { 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }, TextureFormat::R5G6B5 },
- { 16, { 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }, TextureFormat::RGB5A1 },
- { 24, { 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }, TextureFormat::RGB8 },
- { 32, { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }, TextureFormat::BGRA8 },
- { 32, { 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }, TextureFormat::BGRA8 },
- { 32, { 0x000003ff, 0x000ffc00, 0x3ff00000, 0xc0000000 }, TextureFormat::RGB10A2 },
- { 32, { 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }, TextureFormat::RG16 },
- { 32, { 0xffffffff, 0x00000000, 0x00000000, 0x00000000 }, TextureFormat::R32U },
+ { 8, DDPF_LUMINANCE, { 0x000000ff, 0x00000000, 0x00000000, 0x00000000 }, TextureFormat::R8 },
+ { 16, DDPF_BUMPDUDV, { 0x000000ff, 0x0000ff00, 0x00000000, 0x00000000 }, TextureFormat::RG8S },
+ { 16, DDPF_RGB, { 0x0000ffff, 0x00000000, 0x00000000, 0x00000000 }, TextureFormat::R16U },
+ { 16, DDPF_RGB|DDPF_ALPHAPIXELS, { 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }, TextureFormat::RGBA4 },
+ { 16, DDPF_RGB, { 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }, TextureFormat::R5G6B5 },
+ { 16, DDPF_RGB, { 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }, TextureFormat::RGB5A1 },
+ { 24, DDPF_RGB, { 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }, TextureFormat::RGB8 },
+ { 32, DDPF_RGB, { 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }, TextureFormat::BGRA8 },
+ { 32, DDPF_RGB|DDPF_ALPHAPIXELS, { 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }, TextureFormat::RGBA8 },
+ { 32, DDPF_BUMPDUDV, { 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }, TextureFormat::RGBA8S },
+ { 32, DDPF_RGB, { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }, TextureFormat::BGRA8 },
+ { 32, DDPF_RGB|DDPF_ALPHAPIXELS, { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }, TextureFormat::BGRA8 }, // D3DFMT_A8R8G8B8
+ { 32, DDPF_RGB|DDPF_ALPHAPIXELS, { 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }, TextureFormat::BGRA8 }, // D3DFMT_X8R8G8B8
+ { 32, DDPF_RGB|DDPF_ALPHAPIXELS, { 0x000003ff, 0x000ffc00, 0x3ff00000, 0xc0000000 }, TextureFormat::RGB10A2 },
+ { 32, DDPF_RGB, { 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }, TextureFormat::RG16 },
+ { 32, DDPF_BUMPDUDV, { 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }, TextureFormat::RG16S },
+ { 32, DDPF_RGB, { 0xffffffff, 0x00000000, 0x00000000, 0x00000000 }, TextureFormat::R32U },
};
- bool imageParseDds(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader)
+ bool imageParseDds(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+ int32_t total = 0;
+
uint32_t headerSize;
- bx::read(_reader, headerSize);
+ total += bx::read(_reader, headerSize, _err);
- if (headerSize < DDS_HEADER_SIZE)
+ if (!_err->isOk()
+ || headerSize < DDS_HEADER_SIZE)
{
return false;
}
uint32_t flags;
- bx::read(_reader, flags);
+ total += bx::read(_reader, flags, _err);
+
+ if (!_err->isOk() )
+ {
+ return false;
+ }
if ( (flags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT) ) != (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT) )
{
+ BX_ERROR_SET(_err, BIMG_ERROR, "DDS: Invalid flags.");
return false;
}
uint32_t height;
- bx::read(_reader, height);
+ total += bx::read(_reader, height, _err);
uint32_t width;
- bx::read(_reader, width);
+ total += bx::read(_reader, width, _err);
uint32_t pitch;
- bx::read(_reader, pitch);
+ total += bx::read(_reader, pitch, _err);
uint32_t depth;
- bx::read(_reader, depth);
+ total += bx::read(_reader, depth, _err);
uint32_t mips;
- bx::read(_reader, mips);
+ total += bx::read(_reader, mips, _err);
bx::skip(_reader, 44); // reserved
+ total += 44;
uint32_t pixelFormatSize;
- bx::read(_reader, pixelFormatSize);
+ total += bx::read(_reader, pixelFormatSize, _err);
uint32_t pixelFlags;
- bx::read(_reader, pixelFlags);
+ total += bx::read(_reader, pixelFlags, _err);
uint32_t fourcc;
- bx::read(_reader, fourcc);
+ total += bx::read(_reader, fourcc, _err);
uint32_t bitCount;
- bx::read(_reader, bitCount);
+ total += bx::read(_reader, bitCount, _err);
uint32_t bitmask[4];
- bx::read(_reader, bitmask, sizeof(bitmask) );
+ total += bx::read(_reader, bitmask, sizeof(bitmask), _err);
uint32_t caps[4];
- bx::read(_reader, caps);
+ total += bx::read(_reader, caps, _err);
+
+ bx::skip(_reader, 4);
+ total += 4; // reserved
- bx::skip(_reader, 4); // reserved
+ if (!_err->isOk() )
+ {
+ return false;
+ }
uint32_t dxgiFormat = 0;
uint32_t arraySize = 1;
if (DDPF_FOURCC == pixelFlags
- && DDS_DX10 == fourcc)
+ && DDS_DX10 == fourcc)
{
- bx::read(_reader, dxgiFormat);
+ total += bx::read(_reader, dxgiFormat, _err);
uint32_t dims;
- bx::read(_reader, dims);
+ total += bx::read(_reader, dims, _err);
uint32_t miscFlags;
- bx::read(_reader, miscFlags);
+ total += bx::read(_reader, miscFlags, _err);
- bx::read(_reader, arraySize);
+ total += bx::read(_reader, arraySize, _err);
uint32_t miscFlags2;
- bx::read(_reader, miscFlags2);
+ total += bx::read(_reader, miscFlags2, _err);
+ }
+
+ if (!_err->isOk() )
+ {
+ return false;
}
if ( (caps[0] & DDSCAPS_TEXTURE) == 0)
{
+ BX_ERROR_SET(_err, BIMG_ERROR, "DDS: Unsupported caps.");
return false;
}
bool cubeMap = 0 != (caps[1] & DDSCAPS2_CUBEMAP);
if (cubeMap)
{
- if ( (caps[1] & DDS_CUBEMAP_ALLFACES) != DDS_CUBEMAP_ALLFACES)
+ if ( (caps[1] & DSCAPS2_CUBEMAP_ALLSIDES) != DSCAPS2_CUBEMAP_ALLSIDES)
{
// partial cube map is not supported.
+ BX_ERROR_SET(_err, BIMG_ERROR, "DDS: Incomplete cubemap.");
return false;
}
}
@@ -2075,6 +2167,7 @@ namespace bgfx
{
const TranslateDdsPixelFormat& pf = s_translateDdsPixelFormat[ii];
if (pf.m_bitCount == bitCount
+ && pf.m_flags == pixelFlags
&& pf.m_bitmask[0] == bitmask[0]
&& pf.m_bitmask[1] == bitmask[1]
&& pf.m_bitmask[2] == bitmask[2]
@@ -2099,23 +2192,35 @@ namespace bgfx
}
}
- _imageContainer.m_allocator = NULL;
- _imageContainer.m_data = NULL;
- _imageContainer.m_size = 0;
- _imageContainer.m_offset = (uint32_t)bx::seek(_reader);
- _imageContainer.m_width = width;
- _imageContainer.m_height = height;
- _imageContainer.m_depth = depth;
- _imageContainer.m_format = format;
- _imageContainer.m_numLayers = uint16_t(arraySize);
- _imageContainer.m_numMips = uint8_t( (caps[0] & DDSCAPS_MIPMAP) ? mips : 1);
- _imageContainer.m_hasAlpha = hasAlpha;
- _imageContainer.m_cubeMap = cubeMap;
- _imageContainer.m_ktx = false;
- _imageContainer.m_ktxLE = false;
- _imageContainer.m_srgb = srgb;
+ if (TextureFormat::Unknown == format)
+ {
+ BX_ERROR_SET(_err, BIMG_ERROR, "DDS: Unknown texture format.");
+ return false;
+ }
+
+ _imageContainer.m_allocator = NULL;
+ _imageContainer.m_data = NULL;
+ _imageContainer.m_size = 0;
+ _imageContainer.m_offset = (uint32_t)bx::seek(_reader);
+ _imageContainer.m_width = width;
+ _imageContainer.m_height = height;
+ _imageContainer.m_depth = depth;
+ _imageContainer.m_format = format;
+ _imageContainer.m_orientation = Orientation::R0;
+ _imageContainer.m_numLayers = uint16_t(arraySize);
+ _imageContainer.m_numMips = uint8_t( (caps[0] & DDSCAPS_MIPMAP) ? mips : 1);
+ _imageContainer.m_hasAlpha = hasAlpha;
+ _imageContainer.m_cubeMap = cubeMap;
+ _imageContainer.m_ktx = false;
+ _imageContainer.m_ktxLE = false;
+ _imageContainer.m_srgb = srgb;
- return TextureFormat::Unknown != format;
+ return true;
+ }
+
+ ImageContainer* imageParseDds(bx::AllocatorI* _allocator, const void* _src, uint32_t _size, bx::Error* _err)
+ {
+ return imageParseT<DDS_MAGIC, imageParseDds>(_allocator, _src, _size, _err);
}
// KTX
@@ -2139,6 +2244,7 @@ namespace bgfx
#define KTX_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03
#define KTX_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137
#define KTX_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138
+#define KTX_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
#define KTX_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
#define KTX_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
#define KTX_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
@@ -2313,7 +2419,7 @@ namespace bgfx
{ KTX_RGBA4, KTX_ZERO, KTX_RGBA, KTX_UNSIGNED_SHORT_4_4_4_4, }, // RGBA4
{ KTX_RGB5_A1, KTX_ZERO, KTX_RGBA, KTX_UNSIGNED_SHORT_5_5_5_1, }, // RGB5A1
{ KTX_RGB10_A2, KTX_ZERO, KTX_RGBA, KTX_UNSIGNED_INT_2_10_10_10_REV, }, // RGB10A2
- { KTX_R11F_G11F_B10F, KTX_ZERO, KTX_RGB, KTX_UNSIGNED_INT_10F_11F_11F_REV, }, // R11G11B10F
+ { KTX_R11F_G11F_B10F, KTX_ZERO, KTX_RGB, KTX_UNSIGNED_INT_10F_11F_11F_REV, }, // RG11B10F
};
BX_STATIC_ASSERT(TextureFormat::UnknownDepth == BX_COUNTOF(s_translateKtxFormat) );
@@ -2325,13 +2431,17 @@ namespace bgfx
static const KtxFormatInfo2 s_translateKtxFormat2[] =
{
- { KTX_A8, TextureFormat::A8 },
- { KTX_RED, TextureFormat::R8 },
- { KTX_RGB, TextureFormat::RGB8 },
+ { KTX_A8, TextureFormat::A8 },
+ { KTX_RED, TextureFormat::R8 },
+ { KTX_RGB, TextureFormat::RGB8 },
+ { KTX_RGBA, TextureFormat::RGBA8 },
+ { KTX_COMPRESSED_RGB_S3TC_DXT1_EXT, TextureFormat::BC1 },
};
- bool imageParseKtx(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader)
+ bool imageParseKtx(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
uint8_t identifier[8];
bx::read(_reader, identifier);
@@ -2409,23 +2519,35 @@ namespace bgfx
}
}
- _imageContainer.m_allocator = NULL;
- _imageContainer.m_data = NULL;
- _imageContainer.m_size = 0;
- _imageContainer.m_offset = (uint32_t)offset;
- _imageContainer.m_width = width;
- _imageContainer.m_height = height;
- _imageContainer.m_depth = depth;
- _imageContainer.m_format = format;
- _imageContainer.m_numLayers = uint16_t(bx::uint32_max(numberOfArrayElements, 1) );
- _imageContainer.m_numMips = uint8_t(bx::uint32_max(numMips, 1) );
- _imageContainer.m_hasAlpha = hasAlpha;
- _imageContainer.m_cubeMap = numFaces > 1;
- _imageContainer.m_ktx = true;
- _imageContainer.m_ktxLE = fromLittleEndian;
- _imageContainer.m_srgb = false;
+ _imageContainer.m_allocator = NULL;
+ _imageContainer.m_data = NULL;
+ _imageContainer.m_size = 0;
+ _imageContainer.m_offset = (uint32_t)offset;
+ _imageContainer.m_width = width;
+ _imageContainer.m_height = height;
+ _imageContainer.m_depth = depth;
+ _imageContainer.m_format = format;
+ _imageContainer.m_orientation = Orientation::R0;
+ _imageContainer.m_numLayers = uint16_t(bx::uint32_max(numberOfArrayElements, 1) );
+ _imageContainer.m_numMips = uint8_t(bx::uint32_max(numMips, 1) );
+ _imageContainer.m_hasAlpha = hasAlpha;
+ _imageContainer.m_cubeMap = numFaces > 1;
+ _imageContainer.m_ktx = true;
+ _imageContainer.m_ktxLE = fromLittleEndian;
+ _imageContainer.m_srgb = false;
- return TextureFormat::Unknown != format;
+ if (TextureFormat::Unknown == format)
+ {
+ BX_ERROR_SET(_err, BIMG_ERROR, "Unrecognized image format.");
+ return false;
+ }
+
+ return true;
+ }
+
+ ImageContainer* imageParseKtx(bx::AllocatorI* _allocator, const void* _src, uint32_t _size, bx::Error* _err)
+ {
+ return imageParseT<KTX_MAGIC, imageParseKtx>(_allocator, _src, _size, _err);
}
// PVR3
@@ -2509,8 +2631,10 @@ namespace bgfx
{ PVR3_RGB10A2, PVR3_CHANNEL_TYPE_ANY, TextureFormat::RGB10A2 },
};
- bool imageParsePvr3(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader)
+ bool imageParsePvr3(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
uint32_t flags;
bx::read(_reader, flags);
@@ -2560,50 +2684,59 @@ namespace bgfx
}
}
- _imageContainer.m_allocator = NULL;
- _imageContainer.m_data = NULL;
- _imageContainer.m_size = 0;
- _imageContainer.m_offset = (uint32_t)offset;
- _imageContainer.m_width = width;
- _imageContainer.m_height = height;
- _imageContainer.m_depth = depth;
- _imageContainer.m_format = format;
- _imageContainer.m_numLayers = 1;
- _imageContainer.m_numMips = uint8_t(bx::uint32_max(numMips, 1) );
- _imageContainer.m_hasAlpha = hasAlpha;
- _imageContainer.m_cubeMap = numFaces > 1;
- _imageContainer.m_ktx = false;
- _imageContainer.m_ktxLE = false;
- _imageContainer.m_srgb = colorSpace > 0;
+ _imageContainer.m_allocator = NULL;
+ _imageContainer.m_data = NULL;
+ _imageContainer.m_size = 0;
+ _imageContainer.m_offset = (uint32_t)offset;
+ _imageContainer.m_width = width;
+ _imageContainer.m_height = height;
+ _imageContainer.m_depth = depth;
+ _imageContainer.m_format = format;
+ _imageContainer.m_orientation = Orientation::R0;
+ _imageContainer.m_numLayers = 1;
+ _imageContainer.m_numMips = uint8_t(bx::uint32_max(numMips, 1) );
+ _imageContainer.m_hasAlpha = hasAlpha;
+ _imageContainer.m_cubeMap = numFaces > 1;
+ _imageContainer.m_ktx = false;
+ _imageContainer.m_ktxLE = false;
+ _imageContainer.m_srgb = colorSpace > 0;
return TextureFormat::Unknown != format;
}
- bool imageParse(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader)
+ ImageContainer* imageParsePvr3(bx::AllocatorI* _allocator, const void* _src, uint32_t _size, bx::Error* _err)
{
+ return imageParseT<PVR3_MAGIC, imageParsePvr3>(_allocator, _src, _size, _err);
+ }
+
+ bool imageParse(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader, bx::Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
uint32_t magic;
- bx::read(_reader, magic);
+ bx::read(_reader, magic, _err);
if (DDS_MAGIC == magic)
{
- return imageParseDds(_imageContainer, _reader);
+ return imageParseDds(_imageContainer, _reader, _err);
}
else if (KTX_MAGIC == magic)
{
- return imageParseKtx(_imageContainer, _reader);
+ return imageParseKtx(_imageContainer, _reader, _err);
}
else if (PVR3_MAGIC == magic)
{
- return imageParsePvr3(_imageContainer, _reader);
+ return imageParsePvr3(_imageContainer, _reader, _err);
}
- else if (BGFX_CHUNK_MAGIC_TEX == magic)
+ else if (BIMG_CHUNK_MAGIC_TEX == magic)
{
TextureCreate tc;
bx::read(_reader, tc);
- _imageContainer.m_format = tc.m_format;
- _imageContainer.m_offset = UINT32_MAX;
- _imageContainer.m_allocator = NULL;
+ _imageContainer.m_format = tc.m_format;
+ _imageContainer.m_orientation = Orientation::R0;
+ _imageContainer.m_offset = UINT32_MAX;
+ _imageContainer.m_allocator = NULL;
if (NULL == tc.m_mem)
{
_imageContainer.m_data = NULL;
@@ -2625,20 +2758,49 @@ namespace bgfx
_imageContainer.m_ktxLE = false;
_imageContainer.m_srgb = false;
- return true;
+ return _err->isOk();
}
BX_TRACE("Unrecognized image format (magic: 0x%08x)!", magic);
+ BX_ERROR_SET(_err, BIMG_ERROR, "Unrecognized image format.");
+
return false;
}
- bool imageParse(ImageContainer& _imageContainer, const void* _data, uint32_t _size)
+ bool imageParse(ImageContainer& _imageContainer, const void* _data, uint32_t _size, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
bx::MemoryReader reader(_data, _size);
- return imageParse(_imageContainer, &reader);
+ return imageParse(_imageContainer, &reader, _err);
}
- void imageDecodeToBgra8(void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _pitch, TextureFormat::Enum _format)
+ void imageDecodeToR8(bx::AllocatorI* _allocator, void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _dstPitch, TextureFormat::Enum _srcFormat)
+ {
+ const uint8_t* src = (const uint8_t*)_src;
+ uint8_t* dst = (uint8_t*)_dst;
+
+ const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel;
+ const uint32_t srcPitch = _width*srcBpp/8;
+
+ for (uint32_t zz = 0; zz < _depth; ++zz, src += _height*srcPitch, dst += _height*_dstPitch)
+ {
+ if (isCompressed(_srcFormat))
+ {
+ uint32_t size = imageGetSize(NULL, uint16_t(_width), uint16_t(_height), 0, false, false, 1, TextureFormat::RGBA8);
+ void* temp = BX_ALLOC(_allocator, size);
+ imageDecodeToRgba8(temp, _src, _width, _height, _width*4, _srcFormat);
+ imageConvert(dst, TextureFormat::R8, temp, TextureFormat::RGBA8, _width, _height, 1, _width*4);
+ BX_FREE(_allocator, temp);
+ }
+ else
+ {
+ imageConvert(dst, TextureFormat::R8, src, _srcFormat, _width, _height, 1, srcPitch);
+ }
+ }
+ }
+
+ void imageDecodeToBgra8(void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _dstPitch, TextureFormat::Enum _srcFormat)
{
const uint8_t* src = (const uint8_t*)_src;
uint8_t* dst = (uint8_t*)_dst;
@@ -2648,7 +2810,7 @@ namespace bgfx
uint8_t temp[16*4];
- switch (_format)
+ switch (_srcFormat)
{
case TextureFormat::BC1:
for (uint32_t yy = 0; yy < height; ++yy)
@@ -2658,11 +2820,11 @@ namespace bgfx
decodeBlockDxt1(temp, src);
src += 8;
- uint8_t* block = &dst[(yy*_pitch+xx*4)*4];
- bx::memCopy(&block[0*_pitch], &temp[ 0], 16);
- bx::memCopy(&block[1*_pitch], &temp[16], 16);
- bx::memCopy(&block[2*_pitch], &temp[32], 16);
- bx::memCopy(&block[3*_pitch], &temp[48], 16);
+ uint8_t* block = &dst[yy*_dstPitch*4 + xx*16];
+ bx::memCopy(&block[0*_dstPitch], &temp[ 0], 16);
+ bx::memCopy(&block[1*_dstPitch], &temp[16], 16);
+ bx::memCopy(&block[2*_dstPitch], &temp[32], 16);
+ bx::memCopy(&block[3*_dstPitch], &temp[48], 16);
}
}
break;
@@ -2677,11 +2839,11 @@ namespace bgfx
decodeBlockDxt(temp, src);
src += 8;
- uint8_t* block = &dst[(yy*_pitch+xx*4)*4];
- bx::memCopy(&block[0*_pitch], &temp[ 0], 16);
- bx::memCopy(&block[1*_pitch], &temp[16], 16);
- bx::memCopy(&block[2*_pitch], &temp[32], 16);
- bx::memCopy(&block[3*_pitch], &temp[48], 16);
+ uint8_t* block = &dst[yy*_dstPitch*4 + xx*16];
+ bx::memCopy(&block[0*_dstPitch], &temp[ 0], 16);
+ bx::memCopy(&block[1*_dstPitch], &temp[16], 16);
+ bx::memCopy(&block[2*_dstPitch], &temp[32], 16);
+ bx::memCopy(&block[3*_dstPitch], &temp[48], 16);
}
}
break;
@@ -2696,11 +2858,11 @@ namespace bgfx
decodeBlockDxt(temp, src);
src += 8;
- uint8_t* block = &dst[(yy*_pitch+xx*4)*4];
- bx::memCopy(&block[0*_pitch], &temp[ 0], 16);
- bx::memCopy(&block[1*_pitch], &temp[16], 16);
- bx::memCopy(&block[2*_pitch], &temp[32], 16);
- bx::memCopy(&block[3*_pitch], &temp[48], 16);
+ uint8_t* block = &dst[yy*_dstPitch*4 + xx*16];
+ bx::memCopy(&block[0*_dstPitch], &temp[ 0], 16);
+ bx::memCopy(&block[1*_dstPitch], &temp[16], 16);
+ bx::memCopy(&block[2*_dstPitch], &temp[32], 16);
+ bx::memCopy(&block[3*_dstPitch], &temp[48], 16);
}
}
break;
@@ -2713,11 +2875,11 @@ namespace bgfx
decodeBlockDxt45A(temp, src);
src += 8;
- uint8_t* block = &dst[(yy*_pitch+xx*4)*4];
- bx::memCopy(&block[0*_pitch], &temp[ 0], 16);
- bx::memCopy(&block[1*_pitch], &temp[16], 16);
- bx::memCopy(&block[2*_pitch], &temp[32], 16);
- bx::memCopy(&block[3*_pitch], &temp[48], 16);
+ uint8_t* block = &dst[yy*_dstPitch*4 + xx*16];
+ bx::memCopy(&block[0*_dstPitch], &temp[ 0], 16);
+ bx::memCopy(&block[1*_dstPitch], &temp[16], 16);
+ bx::memCopy(&block[2*_dstPitch], &temp[32], 16);
+ bx::memCopy(&block[3*_dstPitch], &temp[48], 16);
}
}
break;
@@ -2741,11 +2903,11 @@ namespace bgfx
temp[ii*4+3] = 0;
}
- uint8_t* block = &dst[(yy*_pitch+xx*4)*4];
- bx::memCopy(&block[0*_pitch], &temp[ 0], 16);
- bx::memCopy(&block[1*_pitch], &temp[16], 16);
- bx::memCopy(&block[2*_pitch], &temp[32], 16);
- bx::memCopy(&block[3*_pitch], &temp[48], 16);
+ uint8_t* block = &dst[yy*_dstPitch*4 + xx*16];
+ bx::memCopy(&block[0*_dstPitch], &temp[ 0], 16);
+ bx::memCopy(&block[1*_dstPitch], &temp[16], 16);
+ bx::memCopy(&block[2*_dstPitch], &temp[32], 16);
+ bx::memCopy(&block[3*_dstPitch], &temp[48], 16);
}
}
break;
@@ -2759,11 +2921,11 @@ namespace bgfx
decodeBlockEtc12(temp, src);
src += 8;
- uint8_t* block = &dst[(yy*_pitch+xx*4)*4];
- bx::memCopy(&block[0*_pitch], &temp[ 0], 16);
- bx::memCopy(&block[1*_pitch], &temp[16], 16);
- bx::memCopy(&block[2*_pitch], &temp[32], 16);
- bx::memCopy(&block[3*_pitch], &temp[48], 16);
+ uint8_t* block = &dst[yy*_dstPitch*4 + xx*16];
+ bx::memCopy(&block[0*_dstPitch], &temp[ 0], 16);
+ bx::memCopy(&block[1*_dstPitch], &temp[16], 16);
+ bx::memCopy(&block[2*_dstPitch], &temp[32], 16);
+ bx::memCopy(&block[3*_dstPitch], &temp[48], 16);
}
}
break;
@@ -2795,11 +2957,11 @@ namespace bgfx
{
decodeBlockPtc14(temp, src, xx, yy, width, height);
- uint8_t* block = &dst[(yy*_pitch+xx*4)*4];
- bx::memCopy(&block[0*_pitch], &temp[ 0], 16);
- bx::memCopy(&block[1*_pitch], &temp[16], 16);
- bx::memCopy(&block[2*_pitch], &temp[32], 16);
- bx::memCopy(&block[3*_pitch], &temp[48], 16);
+ uint8_t* block = &dst[yy*_dstPitch*4 + xx*16];
+ bx::memCopy(&block[0*_dstPitch], &temp[ 0], 16);
+ bx::memCopy(&block[1*_dstPitch], &temp[16], 16);
+ bx::memCopy(&block[2*_dstPitch], &temp[32], 16);
+ bx::memCopy(&block[3*_dstPitch], &temp[48], 16);
}
}
break;
@@ -2811,11 +2973,11 @@ namespace bgfx
{
decodeBlockPtc14A(temp, src, xx, yy, width, height);
- uint8_t* block = &dst[(yy*_pitch+xx*4)*4];
- bx::memCopy(&block[0*_pitch], &temp[ 0], 16);
- bx::memCopy(&block[1*_pitch], &temp[16], 16);
- bx::memCopy(&block[2*_pitch], &temp[32], 16);
- bx::memCopy(&block[3*_pitch], &temp[48], 16);
+ uint8_t* block = &dst[yy*_dstPitch*4 + xx*16];
+ bx::memCopy(&block[0*_dstPitch], &temp[ 0], 16);
+ bx::memCopy(&block[1*_dstPitch], &temp[16], 16);
+ bx::memCopy(&block[2*_dstPitch], &temp[32], 16);
+ bx::memCopy(&block[3*_dstPitch], &temp[48], 16);
}
}
break;
@@ -2831,18 +2993,25 @@ namespace bgfx
break;
case TextureFormat::RGBA8:
- imageSwizzleBgra8(_dst, _width, _height, _pitch, _src);
+ {
+ const uint32_t srcPitch = _width * 4;
+ imageSwizzleBgra8(_dst, _dstPitch, _width, _height, _src, srcPitch);
+ }
break;
case TextureFormat::BGRA8:
- bx::memCopy(_dst, _src, _pitch*_height);
+ {
+ const uint32_t srcPitch = _width * 4;
+ const uint32_t size = bx::uint32_min(srcPitch, _dstPitch);
+ bx::memCopy(_dst, _src, size, _height, srcPitch, _dstPitch);
+ }
break;
default:
{
- const uint32_t srcBpp = s_imageBlockInfo[_format].bitsPerPixel;
+ const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel;
const uint32_t srcPitch = _width * srcBpp / 8;
- if (!imageConvert(_dst, TextureFormat::BGRA8, _src, _format, _width, _height, srcPitch) )
+ if (!imageConvert(_dst, TextureFormat::BGRA8, _src, _srcFormat, _width, _height, 1, srcPitch) )
{
// Failed to convert, just make ugly red-yellow checkerboard texture.
imageCheckerboard(_dst, _width, _height, 16, UINT32_C(0xffff0000), UINT32_C(0xffffff00) );
@@ -2852,32 +3021,42 @@ namespace bgfx
}
}
- void imageDecodeToRgba8(void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _pitch, TextureFormat::Enum _format)
+ void imageDecodeToRgba8(void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _dstPitch, TextureFormat::Enum _srcFormat)
{
- switch (_format)
+ switch (_srcFormat)
{
case TextureFormat::RGBA8:
- bx::memCopy(_dst, _src, _pitch*_height);
+ {
+ const uint32_t srcPitch = _width * 4;
+ const uint32_t size = bx::uint32_min(srcPitch, _dstPitch);
+ bx::memCopy(_dst, _src, size, _height, srcPitch, _dstPitch);
+ }
break;
case TextureFormat::BGRA8:
- imageSwizzleBgra8(_dst, _width, _height, _pitch, _src);
+ {
+ const uint32_t srcPitch = _width * 4;
+ imageSwizzleBgra8(_dst, _dstPitch, _width, _height, _src, srcPitch);
+ }
break;
default:
- imageDecodeToBgra8(_dst, _src, _width, _height, _pitch, _format);
- imageSwizzleBgra8(_dst, _width, _height, _width*4, _dst);
+ {
+ const uint32_t srcPitch = _width * 4;
+ imageDecodeToBgra8(_dst, _src, _width, _height, _dstPitch, _srcFormat);
+ imageSwizzleBgra8(_dst, _dstPitch, _width, _height, _dst, srcPitch);
+ }
break;
}
}
- void imageRgba8ToRgba32fRef(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba8ToRgba32fRef(void* _dst, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src)
{
- const uint32_t dstwidth = _width;
- const uint32_t dstheight = _height;
+ const uint32_t dstWidth = _width;
+ const uint32_t dstHeight = _height;
- if (0 == dstwidth
- || 0 == dstheight)
+ if (0 == dstWidth
+ || 0 == dstHeight)
{
return;
}
@@ -2885,10 +3064,10 @@ namespace bgfx
float* dst = (float*)_dst;
const uint8_t* src = (const uint8_t*)_src;
- for (uint32_t yy = 0, ystep = _pitch; yy < dstheight; ++yy, src += ystep)
+ for (uint32_t yy = 0, ystep = _srcPitch; yy < dstHeight; ++yy, src += ystep)
{
const uint8_t* rgba = src;
- for (uint32_t xx = 0; xx < dstwidth; ++xx, rgba += 4, dst += 4)
+ for (uint32_t xx = 0; xx < dstWidth; ++xx, rgba += 4, dst += 4)
{
dst[0] = bx::fpow(rgba[0], 2.2f);
dst[1] = bx::fpow(rgba[1], 2.2f);
@@ -2898,13 +3077,13 @@ namespace bgfx
}
}
- void imageRgba8ToRgba32f(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src)
+ void imageRgba8ToRgba32f(void* _dst, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src)
{
- const uint32_t dstwidth = _width;
- const uint32_t dstheight = _height;
+ const uint32_t dstWidth = _width;
+ const uint32_t dstHeight = _height;
- if (0 == dstwidth
- || 0 == dstheight)
+ if (0 == dstWidth
+ || 0 == dstHeight)
{
return;
}
@@ -2918,10 +3097,10 @@ namespace bgfx
const simd128_t wflip = simd_ild(0, 0, 0, 0x80000000);
const simd128_t wadd = simd_ld(0.0f, 0.0f, 0.0f, 32768.0f*65536.0f);
- for (uint32_t yy = 0, ystep = _pitch; yy < dstheight; ++yy, src += ystep)
+ for (uint32_t yy = 0, ystep = _srcPitch; yy < dstHeight; ++yy, src += ystep)
{
const uint8_t* rgba = src;
- for (uint32_t xx = 0; xx < dstwidth; ++xx, rgba += 4, dst += 4)
+ for (uint32_t xx = 0; xx < dstWidth; ++xx, rgba += 4, dst += 4)
{
const simd128_t abgr0 = simd_splat(rgba);
const simd128_t abgr0m = simd_and(abgr0, umask);
@@ -2935,69 +3114,73 @@ namespace bgfx
}
}
- void imageDecodeToRgba32f(bx::AllocatorI* _allocator, void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _pitch, TextureFormat::Enum _format)
+ void imageDecodeToRgba32f(bx::AllocatorI* _allocator, void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _dstPitch, TextureFormat::Enum _srcFormat)
{
const uint8_t* src = (const uint8_t*)_src;
uint8_t* dst = (uint8_t*)_dst;
- switch (_format)
+ const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel;
+ const uint32_t srcPitch = _width*srcBpp/8;
+
+ for (uint32_t zz = 0; zz < _depth; ++zz, src += _height*srcPitch, dst += _height*_dstPitch)
{
- case TextureFormat::BC5:
+ switch (_srcFormat)
{
- uint32_t width = _width/4;
- uint32_t height = _height/4;
-
- for (uint32_t yy = 0; yy < height; ++yy)
+ case TextureFormat::BC5:
{
- for (uint32_t xx = 0; xx < width; ++xx)
- {
- uint8_t temp[16*4];
+ uint32_t width = _width/4;
+ uint32_t height = _height/4;
- decodeBlockDxt45A(temp+2, src);
- src += 8;
- decodeBlockDxt45A(temp+1, src);
- src += 8;
+ const uint8_t* srcData = src;
- for (uint32_t ii = 0; ii < 16; ++ii)
+ for (uint32_t yy = 0; yy < height; ++yy)
+ {
+ for (uint32_t xx = 0; xx < width; ++xx)
{
- float nx = temp[ii*4+2]*2.0f/255.0f - 1.0f;
- float ny = temp[ii*4+1]*2.0f/255.0f - 1.0f;
- float nz = bx::fsqrt(1.0f - nx*nx - ny*ny);
-
- const uint32_t offset = (yy*4 + ii/4)*_width*16 + (xx*4 + ii%4)*16;
- float* block = (float*)&dst[offset];
- block[0] = nx;
- block[1] = ny;
- block[2] = nz;
- block[3] = 0.0f;
+ uint8_t temp[16*4];
+
+ decodeBlockDxt45A(temp+2, srcData);
+ srcData += 8;
+ decodeBlockDxt45A(temp+1, srcData);
+ srcData += 8;
+
+ for (uint32_t ii = 0; ii < 16; ++ii)
+ {
+ float nx = temp[ii*4+2]*2.0f/255.0f - 1.0f;
+ float ny = temp[ii*4+1]*2.0f/255.0f - 1.0f;
+ float nz = bx::fsqrt(1.0f - nx*nx - ny*ny);
+
+ const uint32_t offset = (yy*4 + ii/4)*_width*16 + (xx*4 + ii%4)*16;
+ float* block = (float*)&dst[offset];
+ block[0] = nx;
+ block[1] = ny;
+ block[2] = nz;
+ block[3] = 0.0f;
+ }
}
}
}
- }
- break;
-
- case TextureFormat::RGBA32F:
- bx::memCopy(_dst, _src, _pitch*_height);
- break;
+ break;
- case TextureFormat::RGBA8:
- imageRgba8ToRgba32f(_dst, _width, _height, _pitch, _src);
- break;
+ case TextureFormat::RGBA32F:
+ bx::memCopy(dst, src, _dstPitch*_height);
+ break;
- default:
- if (isCompressed(_format) )
- {
- uint32_t size = imageGetSize(NULL, uint16_t(_pitch/4), uint16_t(_height), 0, false, false, 1, _format);
- void* temp = BX_ALLOC(_allocator, size);
- imageDecodeToRgba8(temp, _src, _width, _height, _pitch, _format);
- imageRgba8ToRgba32f(_dst, _width, _height, _pitch, temp);
- BX_FREE(_allocator, temp);
- }
- else
- {
- imageConvert(_dst, TextureFormat::RGBA32F, _src, _format, _width, _height, _pitch);
+ default:
+ if (isCompressed(_srcFormat) )
+ {
+ uint32_t size = imageGetSize(NULL, uint16_t(_width), uint16_t(_height), 0, false, false, 1, TextureFormat::RGBA8);
+ void* temp = BX_ALLOC(_allocator, size);
+ imageDecodeToRgba8(temp, src, _width, _height, _width*4, _srcFormat);
+ imageRgba8ToRgba32f(dst, _width, _height, _width*4, temp);
+ BX_FREE(_allocator, temp);
+ }
+ else
+ {
+ imageConvert(dst, TextureFormat::RGBA32F, src, _srcFormat, _width, _height, 1, srcPitch);
+ }
+ break;
}
- break;
}
}
@@ -3038,15 +3221,18 @@ namespace bgfx
for (uint8_t lod = 0, num = _imageContainer.m_numMips; lod < num; ++lod)
{
- uint32_t imageSize = bx::toHostEndian(*(const uint32_t*)&data[offset], _imageContainer.m_ktxLE) / _imageContainer.m_numLayers;
- offset += sizeof(uint32_t);
-
width = bx::uint32_max(blockWidth * minBlockX, ( (width + blockWidth - 1) / blockWidth )*blockWidth);
height = bx::uint32_max(blockHeight * minBlockY, ( (height + blockHeight - 1) / blockHeight)*blockHeight);
depth = bx::uint32_max(1, depth);
- uint32_t size = width*height*depth*bpp/8;
+ const uint32_t mipSize = width*height*depth*bpp/8;
+
+ const uint32_t size = mipSize*numSides;
+ uint32_t imageSize = bx::toHostEndian(*(const uint32_t*)&data[offset], _imageContainer.m_ktxLE);
BX_CHECK(size == imageSize, "KTX: Image size mismatch %d (expected %d).", size, imageSize);
+ BX_UNUSED(size, imageSize);
+
+ offset += sizeof(uint32_t);
for (uint16_t side = 0; side < numSides; ++side)
{
@@ -3055,8 +3241,9 @@ namespace bgfx
{
_mip.m_width = width;
_mip.m_height = height;
+ _mip.m_depth = depth;
_mip.m_blockSize = blockSize;
- _mip.m_size = size;
+ _mip.m_size = mipSize;
_mip.m_data = &data[offset];
_mip.m_bpp = bpp;
_mip.m_format = format;
@@ -3064,7 +3251,7 @@ namespace bgfx
return true;
}
- offset += imageSize;
+ offset += mipSize;
BX_CHECK(offset <= _size, "Reading past size of data buffer! (offset %d, size %d)", offset, _size);
BX_UNUSED(_size);
@@ -3096,6 +3283,7 @@ namespace bgfx
{
_mip.m_width = width;
_mip.m_height = height;
+ _mip.m_depth = depth;
_mip.m_blockSize = blockSize;
_mip.m_size = size;
_mip.m_data = &data[offset];
@@ -3120,7 +3308,7 @@ namespace bgfx
return false;
}
- void imageWriteTga(bx::WriterI* _writer, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, bool _grayscale, bool _yflip, bx::Error* _err)
+ int32_t imageWriteTga(bx::WriterI* _writer, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src, bool _grayscale, bool _yflip, bx::Error* _err)
{
BX_ERROR_SCOPE(_err);
@@ -3136,64 +3324,337 @@ namespace bgfx
header[16] = bpp;
header[17] = 32;
- bx::write(_writer, header, sizeof(header), _err);
+ int32_t total = 0;
+ total += bx::write(_writer, header, sizeof(header), _err);
uint32_t dstPitch = _width*bpp/8;
if (_yflip)
{
- uint8_t* data = (uint8_t*)_src + _pitch*_height - _pitch;
- for (uint32_t yy = 0; yy < _height; ++yy)
+ const uint8_t* data = (const uint8_t*)_src + _srcPitch*_height - _srcPitch;
+ for (uint32_t yy = 0; yy < _height && _err->isOk(); ++yy)
+ {
+ total += bx::write(_writer, data, dstPitch, _err);
+ data -= _srcPitch;
+ }
+ }
+ else if (_srcPitch == dstPitch)
+ {
+ total += bx::write(_writer, _src, _height*_srcPitch, _err);
+ }
+ else
+ {
+ const uint8_t* data = (const uint8_t*)_src;
+ for (uint32_t yy = 0; yy < _height && _err->isOk(); ++yy)
+ {
+ total += bx::write(_writer, data, dstPitch, _err);
+ data += _srcPitch;
+ }
+ }
+
+ return total;
+ }
+
+ template<typename Ty>
+ class HashWriter : public bx::WriterI
+ {
+ public:
+ HashWriter(bx::WriterI* _writer)
+ : m_writer(_writer)
+ {
+ begin();
+ }
+
+ void begin()
+ {
+ m_hash.begin();
+ }
+
+ uint32_t end()
+ {
+ return m_hash.end();
+ }
+
+ virtual int32_t write(const void* _data, int32_t _size, bx::Error* _err) override
+ {
+ m_hash.add(_data, _size);
+ return m_writer->write(_data, _size, _err);
+ }
+
+ private:
+ Ty m_hash;
+ bx::WriterI* m_writer;
+ };
+
+ int32_t imageWritePng(bx::WriterI* _writer, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src, bool _grayscale, bool _yflip, bx::Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ int32_t total = 0;
+ total += bx::write(_writer, "\x89PNG\r\n\x1a\n", _err);
+ total += bx::write(_writer, bx::toBigEndian<uint32_t>(13), _err);
+
+ HashWriter<bx::HashCrc32> writerC(_writer);
+ total += bx::write(&writerC, "IHDR", _err);
+ total += bx::write(&writerC, bx::toBigEndian(_width), _err);
+ total += bx::write(&writerC, bx::toBigEndian(_height), _err);
+ total += bx::write(&writerC, "\x08\x06", _err);
+ total += bx::writeRep(&writerC, 0, 3, _err);
+ total += bx::write(_writer, bx::toBigEndian(writerC.end() ), _err);
+
+ const uint32_t bpp = _grayscale ? 8 : 32;
+ const uint32_t stride = _width*bpp/8;
+ const uint16_t zlen = bx::toLittleEndian<uint16_t>(uint16_t(stride + 1) );
+ const uint16_t zlenC = bx::toLittleEndian<uint16_t>(~zlen);
+
+ total += bx::write(_writer, bx::toBigEndian<uint32_t>(_height*(stride+6)+6), _err);
+
+ writerC.begin();
+ total += bx::write(&writerC, "IDAT", _err);
+ total += bx::write(&writerC, "\x78\x9c", _err);
+
+ const uint8_t* data = (const uint8_t*)_src;
+ int32_t step = int32_t(_srcPitch);
+ if (_yflip)
+ {
+ data += _srcPitch*_height - _srcPitch;
+ step = -step;
+ }
+
+ HashWriter<bx::HashAdler32> writerA(&writerC);
+
+ for (uint32_t ii = 0; ii < _height && _err->isOk(); ++ii)
+ {
+ total += bx::write(&writerC, uint8_t(ii == _height-1 ? 1 : 0), _err);
+ total += bx::write(&writerC, zlen, _err);
+ total += bx::write(&writerC, zlenC, _err);
+
+ total += bx::write(&writerA, uint8_t(0), _err);
+
+ if (_grayscale)
+ {
+ total += bx::write(&writerA, data, stride, _err);
+ }
+ else
+ {
+ for (uint32_t xx = 0; xx < _width; ++xx)
+ {
+ const uint8_t* bgra = &data[xx*4];
+ const uint8_t bb = bgra[0];
+ const uint8_t gg = bgra[1];
+ const uint8_t rr = bgra[2];
+ const uint8_t aa = bgra[3];
+ total += bx::write(&writerA, rr, _err);
+ total += bx::write(&writerA, gg, _err);
+ total += bx::write(&writerA, bb, _err);
+ total += bx::write(&writerA, aa, _err);
+ }
+ }
+
+ data += step;
+ }
+ total += bx::write(&writerC, bx::toBigEndian(writerA.end() ), _err);
+ total += bx::write(_writer, bx::toBigEndian(writerC.end() ), _err);
+
+ total += bx::write(&writerC, uint32_t(0), _err);
+ writerC.begin();
+ total += bx::write(&writerC, "IEND", _err);
+ total += bx::write(_writer, bx::toBigEndian(writerC.end() ), _err);
+
+ return total;
+ }
+
+ static int32_t imageWriteDdsHeader(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, bx::Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ uint32_t ddspf = UINT32_MAX;
+ uint32_t dxgiFormat = UINT32_MAX;
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_translateDdsPixelFormat); ++ii)
+ {
+ if (s_translateDdsPixelFormat[ii].m_textureFormat == _format)
+ {
+ ddspf = ii;
+ break;
+ }
+ }
+
+ if (UINT32_MAX == ddspf)
+ {
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_translateDxgiFormat); ++ii)
{
- bx::write(_writer, data, dstPitch, _err);
- data -= _pitch;
+ if (s_translateDxgiFormat[ii].m_textureFormat == _format)
+ {
+ dxgiFormat = s_translateDxgiFormat[ii].m_format;
+ break;
+ }
+ }
+
+ if (UINT32_MAX == dxgiFormat)
+ {
+ BX_ERROR_SET(_err, BIMG_ERROR, "DDS: DXGI format not supported.");
+ return 0;
}
}
- else if (_pitch == dstPitch)
+
+ const uint32_t bpp = getBitsPerPixel(_format);
+
+ uint32_t total = 0;
+ total += bx::write(_writer, uint32_t(DDS_MAGIC), _err);
+
+ uint32_t headerStart = total;
+ total += bx::write(_writer, uint32_t(DDS_HEADER_SIZE), _err);
+ total += bx::write(_writer, uint32_t(0
+ | DDSD_HEIGHT
+ | DDSD_WIDTH
+ | DDSD_PIXELFORMAT
+ | DDSD_CAPS
+ | (1 < _depth ? DDSD_DEPTH : 0)
+ | (1 < _numMips ? DDSD_MIPMAPCOUNT : 0)
+ | (isCompressed(_format) ? DDSD_LINEARSIZE : DDSD_PITCH)
+ )
+ , _err
+ );
+ const uint32_t pitchOrLinearSize = isCompressed(_format)
+ ? _width*_height*bpp/8
+ : _width*bpp/8
+ ;
+
+ total += bx::write(_writer, _height, _err);
+ total += bx::write(_writer, _width, _err);
+ total += bx::write(_writer, pitchOrLinearSize, _err);
+ total += bx::write(_writer, _depth, _err);
+ total += bx::write(_writer, uint32_t(_numMips), _err);
+
+ total += bx::writeRep(_writer, 0, 44, _err); // reserved1
+
+ if (UINT32_MAX != ddspf)
{
- bx::write(_writer, _src, _height*_pitch, _err);
+ const TranslateDdsPixelFormat& pf = s_translateDdsPixelFormat[ddspf];
+
+ total += bx::write(_writer, uint32_t(8*sizeof(uint32_t) ), _err); // pixelFormatSize
+ total += bx::write(_writer, pf.m_flags, _err);
+ total += bx::write(_writer, uint32_t(0), _err);
+ total += bx::write(_writer, pf.m_bitCount, _err);
+ total += bx::write(_writer, pf.m_bitmask, _err);
}
else
{
- uint8_t* data = (uint8_t*)_src;
- for (uint32_t yy = 0; yy < _height; ++yy)
+ total += bx::write(_writer, uint32_t(8*sizeof(uint32_t) ), _err); // pixelFormatSize
+ total += bx::write(_writer, uint32_t(DDPF_FOURCC), _err);
+ total += bx::write(_writer, uint32_t(DDS_DX10), _err);
+ total += bx::write(_writer, uint32_t(0), _err); // bitCount
+ total += bx::writeRep(_writer, 0, 4*sizeof(uint32_t), _err); // bitmask
+ }
+
+ uint32_t caps[4] =
+ {
+ uint32_t(DDSCAPS_TEXTURE | (1 < _numMips ? DDSCAPS_COMPLEX|DDSCAPS_MIPMAP : 0) ),
+ uint32_t(_cubeMap ? DDSCAPS2_CUBEMAP|DSCAPS2_CUBEMAP_ALLSIDES : 0),
+ 0,
+ 0,
+ };
+ total += bx::write(_writer, caps, sizeof(caps) );
+
+ total += bx::writeRep(_writer, 0, 4, _err); // reserved2
+
+ BX_WARN(total-headerStart == DDS_HEADER_SIZE
+ , "DDS: Failed to write header size %d (expected: %d)."
+ , total-headerStart
+ , DDS_HEADER_SIZE
+ );
+
+ if (UINT32_MAX != dxgiFormat)
+ {
+ total += bx::write(_writer, dxgiFormat);
+ total += bx::write(_writer, uint32_t(1 < _depth ? DDS_DX10_DIMENSION_TEXTURE3D : DDS_DX10_DIMENSION_TEXTURE2D), _err); // dims
+ total += bx::write(_writer, uint32_t(_cubeMap ? DDS_DX10_MISC_TEXTURECUBE : 0), _err); // miscFlags
+ total += bx::write(_writer, uint32_t(1), _err); // arraySize
+ total += bx::write(_writer, uint32_t(0), _err); // miscFlags2
+
+ BX_WARN(total-headerStart == DDS_HEADER_SIZE+20
+ , "DDS: Failed to write header size %d (expected: %d)."
+ , total-headerStart
+ , DDS_HEADER_SIZE+20
+ );
+ BX_UNUSED(headerStart);
+ }
+
+ return total;
+ }
+
+ int32_t imageWriteDds(bx::WriterI* _writer, ImageContainer& _imageContainer, const void* _data, uint32_t _size, bx::Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ int32_t total = 0;
+ total += imageWriteDdsHeader(_writer
+ , TextureFormat::Enum(_imageContainer.m_format)
+ , _imageContainer.m_cubeMap
+ , _imageContainer.m_width
+ , _imageContainer.m_height
+ , _imageContainer.m_depth
+ , _imageContainer.m_numMips
+ , _err
+ );
+
+ if (!_err->isOk() )
+ {
+ return total;
+ }
+
+ for (uint8_t side = 0, numSides = _imageContainer.m_cubeMap ? 6 : 1; side < numSides && _err->isOk(); ++side)
+ {
+ for (uint8_t lod = 0, num = _imageContainer.m_numMips; lod < num && _err->isOk(); ++lod)
{
- bx::write(_writer, data, dstPitch, _err);
- data += _pitch;
+ ImageMip mip;
+ if (imageGetRawData(_imageContainer, side, lod, _data, _size, mip) )
+ {
+ total += bx::write(_writer, mip.m_data, mip.m_size, _err);
+ }
}
}
+
+ return total;
}
- static int32_t imageWriteKtxHeader(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, bx::Error* _err)
+ static int32_t imageWriteKtxHeader(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, uint32_t _numLayers, bx::Error* _err)
{
BX_ERROR_SCOPE(_err);
const KtxFormatInfo& tfi = s_translateKtxFormat[_format];
- int32_t size = 0;
- size += bx::write(_writer, "\xabKTX 11\xbb\r\n\x1a\n", 12, _err);
- size += bx::write(_writer, uint32_t(0x04030201), _err);
- size += bx::write(_writer, uint32_t(0), _err); // glType
- size += bx::write(_writer, uint32_t(1), _err); // glTypeSize
- size += bx::write(_writer, uint32_t(0), _err); // glFormat
- size += bx::write(_writer, tfi.m_internalFmt, _err); // glInternalFormat
- size += bx::write(_writer, tfi.m_fmt, _err); // glBaseInternalFormat
- size += bx::write(_writer, _width, _err);
- size += bx::write(_writer, _height, _err);
- size += bx::write(_writer, _depth, _err);
- size += bx::write(_writer, uint32_t(0), _err); // numberOfArrayElements
- size += bx::write(_writer, _cubeMap ? uint32_t(6) : uint32_t(0), _err);
- size += bx::write(_writer, uint32_t(_numMips), _err);
- size += bx::write(_writer, uint32_t(0), _err); // Meta-data size.
-
- BX_WARN(size == 64, "KTX: Failed to write header size %d (expected: %d).", size, 64);
- return size;
+ int32_t total = 0;
+ total += bx::write(_writer, "\xabKTX 11\xbb\r\n\x1a\n", 12, _err);
+ total += bx::write(_writer, uint32_t(0x04030201), _err);
+ total += bx::write(_writer, uint32_t(0), _err); // glType
+ total += bx::write(_writer, uint32_t(1), _err); // glTypeSize
+ total += bx::write(_writer, uint32_t(0), _err); // glFormat
+ total += bx::write(_writer, tfi.m_internalFmt, _err); // glInternalFormat
+ total += bx::write(_writer, tfi.m_fmt, _err); // glBaseInternalFormat
+ total += bx::write(_writer, _width, _err);
+ total += bx::write(_writer, _height, _err);
+ total += bx::write(_writer, _depth, _err);
+ total += bx::write(_writer, _numLayers, _err); // numberOfArrayElements
+ total += bx::write(_writer, _cubeMap ? uint32_t(6) : uint32_t(0), _err);
+ total += bx::write(_writer, uint32_t(_numMips), _err);
+ total += bx::write(_writer, uint32_t(0), _err); // Meta-data size.
+
+ BX_WARN(total == 64, "KTX: Failed to write header size %d (expected: %d).", total, 64);
+ return total;
}
- void imageWriteKtx(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, const void* _src, bx::Error* _err)
+ int32_t imageWriteKtx(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, uint32_t _numLayers, const void* _src, bx::Error* _err)
{
BX_ERROR_SCOPE(_err);
- imageWriteKtxHeader(_writer, _format, _cubeMap, _width, _height, _depth, _numMips, _err);
+ int32_t total = 0;
+ total += imageWriteKtxHeader(_writer, _format, _cubeMap, _width, _height, _depth, _numMips, _numLayers, _err);
+
+ if (!_err->isOk() )
+ {
+ return total;
+ }
const ImageBlockInfo& blockInfo = s_imageBlockInfo[_format];
const uint8_t bpp = blockInfo.bitsPerPixel;
@@ -3203,59 +3664,87 @@ namespace bgfx
const uint32_t minBlockY = blockInfo.minBlockY;
const uint8_t* src = (const uint8_t*)_src;
+
+ const uint32_t numLayers = bx::uint32_max(_numLayers, 1);
+ const uint32_t numSides = _cubeMap ? 6 : 1;
+
uint32_t width = _width;
uint32_t height = _height;
uint32_t depth = _depth;
- for (uint8_t lod = 0, num = _numMips; lod < num; ++lod)
+ for (uint8_t lod = 0; lod < _numMips && _err->isOk(); ++lod)
{
width = bx::uint32_max(blockWidth * minBlockX, ( (width + blockWidth - 1) / blockWidth )*blockWidth);
height = bx::uint32_max(blockHeight * minBlockY, ( (height + blockHeight - 1) / blockHeight)*blockHeight);
depth = bx::uint32_max(1, depth);
- uint32_t size = width*height*depth*bpp/8;
- bx::write(_writer, size, _err);
+ const uint32_t mipSize = width*height*depth*bpp/8;
+ const uint32_t size = mipSize*numLayers*numSides;
+ total += bx::write(_writer, size, _err);
- for (uint8_t side = 0, numSides = _cubeMap ? 6 : 1; side < numSides; ++side)
+ for (uint32_t layer = 0; layer < numLayers && _err->isOk(); ++layer)
{
- bx::write(_writer, src, size, _err);
- src += size;
+ for (uint8_t side = 0; side < numSides && _err->isOk(); ++side)
+ {
+ total += bx::write(_writer, src, size, _err);
+ src += size;
+ }
}
width >>= 1;
height >>= 1;
depth >>= 1;
}
+
+ return total;
}
- void imageWriteKtx(bx::WriterI* _writer, ImageContainer& _imageContainer, const void* _data, uint32_t _size, bx::Error* _err)
+ int32_t imageWriteKtx(bx::WriterI* _writer, ImageContainer& _imageContainer, const void* _data, uint32_t _size, bx::Error* _err)
{
BX_ERROR_SCOPE(_err);
- imageWriteKtxHeader(_writer
+ int32_t total = 0;
+ total += imageWriteKtxHeader(_writer
, TextureFormat::Enum(_imageContainer.m_format)
, _imageContainer.m_cubeMap
, _imageContainer.m_width
, _imageContainer.m_height
, _imageContainer.m_depth
, _imageContainer.m_numMips
+ , _imageContainer.m_numLayers
, _err
);
- for (uint8_t lod = 0, num = _imageContainer.m_numMips; lod < num; ++lod)
+ if (!_err->isOk() )
+ {
+ return total;
+ }
+
+ const uint32_t numMips = _imageContainer.m_numMips;
+ const uint32_t numLayers = bx::uint32_max(_imageContainer.m_numLayers, 1);
+ const uint32_t numSides = _imageContainer.m_cubeMap ? 6 : 1;
+
+ for (uint8_t lod = 0; lod < numMips && _err->isOk(); ++lod)
{
ImageMip mip;
imageGetRawData(_imageContainer, 0, lod, _data, _size, mip);
- bx::write(_writer, mip.m_size, _err);
- for (uint8_t side = 0, numSides = _imageContainer.m_cubeMap ? 6 : 1; side < numSides; ++side)
+ const uint32_t size = mip.m_size*numSides*numLayers;
+ total += bx::write(_writer, size, _err);
+
+ for (uint32_t layer = 0; layer < numLayers && _err->isOk(); ++layer)
{
- if (imageGetRawData(_imageContainer, side, lod, _data, _size, mip) )
+ for (uint8_t side = 0; side < numSides && _err->isOk(); ++side)
{
- bx::write(_writer, mip.m_data, mip.m_size, _err);
+ if (imageGetRawData(_imageContainer, uint16_t(layer*numSides + side), lod, _data, _size, mip) )
+ {
+ total += bx::write(_writer, mip.m_data, mip.m_size, _err);
+ }
}
}
}
+
+ return total;
}
-} // namespace bgfx
+} // namespace bimg
diff --git a/3rdparty/bimg/src/image_decode.cpp b/3rdparty/bimg/src/image_decode.cpp
new file mode 100644
index 00000000000..37038f33053
--- /dev/null
+++ b/3rdparty/bimg/src/image_decode.cpp
@@ -0,0 +1,690 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "bimg_p.h"
+
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-function")
+
+BX_PRAGMA_DIAGNOSTIC_PUSH()
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wtype-limits")
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-parameter")
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-value")
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG("-Wdeprecated-declarations")
+BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4100) // error C4100: '' : unreferenced formal parameter
+BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4505) // warning C4505: 'tinyexr::miniz::def_realloc_func': unreferenced local function has been removed
+#if BX_PLATFORM_EMSCRIPTEN
+# include <compat/ctype.h>
+#endif // BX_PLATFORM_EMSCRIPTEN
+#define MINIZ_NO_ARCHIVE_APIS
+#define MINIZ_NO_STDIO
+#define TINYEXR_IMPLEMENTATION
+#include <tinyexr/tinyexr.h>
+BX_PRAGMA_DIAGNOSTIC_POP()
+
+BX_PRAGMA_DIAGNOSTIC_PUSH();
+BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4127) // warning C4127: conditional expression is constant
+#define LODEPNG_NO_COMPILE_ENCODER
+#define LODEPNG_NO_COMPILE_DISK
+#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
+#define LODEPNG_NO_COMPILE_ALLOCATORS
+#define LODEPNG_NO_COMPILE_CPP
+#include <lodepng/lodepng.cpp>
+BX_PRAGMA_DIAGNOSTIC_POP();
+
+void* lodepng_malloc(size_t _size)
+{
+ return ::malloc(_size);
+}
+
+void* lodepng_realloc(void* _ptr, size_t _size)
+{
+ return ::realloc(_ptr, _size);
+}
+
+void lodepng_free(void* _ptr)
+{
+ ::free(_ptr);
+}
+
+BX_PRAGMA_DIAGNOSTIC_PUSH();
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wmissing-field-initializers");
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow");
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wint-to-pointer-cast")
+BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Warray-bounds");
+#if BX_COMPILER_GCC >= 60000
+BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Wmisleading-indentation");
+BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Wshift-negative-value");
+#elif BX_COMPILER_GCC >= 70000
+BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Wimplicit-fallthrough");
+#endif // BX_COMPILER_GCC >= 60000_
+#define STBI_MALLOC(_size) lodepng_malloc(_size)
+#define STBI_REALLOC(_ptr, _size) lodepng_realloc(_ptr, _size)
+#define STBI_FREE(_ptr) lodepng_free(_ptr)
+#define STB_IMAGE_IMPLEMENTATION
+#include <stb/stb_image.h>
+BX_PRAGMA_DIAGNOSTIC_POP();
+
+namespace bimg
+{
+ static ImageContainer* imageParseLodePng(bx::AllocatorI* _allocator, const void* _data, uint32_t _size, bx::Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ static uint8_t pngMagic[] = { 0x89, 0x50, 0x4E, 0x47, 0x0d, 0x0a };
+
+ if (0 != bx::memCmp(_data, pngMagic, sizeof(pngMagic) ) )
+ {
+ return NULL;
+ }
+
+ ImageContainer* output = NULL;
+ bimg::TextureFormat::Enum format = bimg::TextureFormat::RGBA8;
+ uint32_t width = 0;
+ uint32_t height = 0;
+
+ unsigned error;
+ LodePNGState state;
+ lodepng_state_init(&state);
+ state.decoder.color_convert = 0;
+
+ uint8_t* data = NULL;
+ error = lodepng_decode(&data, &width, &height, &state, (uint8_t*)_data, _size);
+
+ if (0 != error)
+ {
+ _err->setError(BIMG_ERROR, lodepng_error_text(error) );
+ }
+ else
+ {
+ bool palette = false;
+ bool supported = false;
+
+ switch (state.info_raw.bitdepth)
+ {
+ case 1:
+ format = bimg::TextureFormat::R1;
+ palette = false;
+ supported = true;
+ break;
+
+ case 8:
+ switch (state.info_raw.colortype)
+ {
+ case LCT_GREY:
+ format = bimg::TextureFormat::R8;
+ supported = true;
+ break;
+
+ case LCT_GREY_ALPHA:
+ format = bimg::TextureFormat::RG8;
+ supported = true;
+ break;
+
+ case LCT_RGB:
+ format = bimg::TextureFormat::RGB8;
+ supported = true;
+ break;
+
+ case LCT_RGBA:
+ format = bimg::TextureFormat::RGBA8;
+ supported = true;
+ break;
+
+ case LCT_PALETTE:
+ format = bimg::TextureFormat::RGBA8;
+ palette = true;
+ supported = true;
+ break;
+ }
+ break;
+
+ case 16:
+ switch (state.info_raw.colortype)
+ {
+ case LCT_GREY:
+ for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
+ {
+ uint16_t* rgba = (uint16_t*)data + ii;
+ rgba[0] = bx::toHostEndian(rgba[0], false);
+ }
+ format = bimg::TextureFormat::R16;
+ supported = true;
+ break;
+
+ case LCT_GREY_ALPHA:
+ for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
+ {
+ uint16_t* rgba = (uint16_t*)data + ii*2;
+ rgba[0] = bx::toHostEndian(rgba[0], false);
+ rgba[1] = bx::toHostEndian(rgba[1], false);
+ }
+ format = bimg::TextureFormat::RG16;
+ supported = true;
+ break;
+
+ case LCT_RGB:
+ for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
+ {
+ uint16_t* rgba = (uint16_t*)data + ii*3;
+ rgba[0] = bx::toHostEndian(rgba[0], false);
+ rgba[1] = bx::toHostEndian(rgba[1], false);
+ rgba[2] = bx::toHostEndian(rgba[2], false);
+ }
+ format = bimg::TextureFormat::RGBA16;
+ supported = true;
+ break;
+
+ case LCT_RGBA:
+ for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
+ {
+ uint16_t* rgba = (uint16_t*)data + ii*4;
+ rgba[0] = bx::toHostEndian(rgba[0], false);
+ rgba[1] = bx::toHostEndian(rgba[1], false);
+ rgba[2] = bx::toHostEndian(rgba[2], false);
+ rgba[3] = bx::toHostEndian(rgba[3], false);
+ }
+ format = bimg::TextureFormat::RGBA16;
+ supported = true;
+ break;
+
+ case LCT_PALETTE:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ if (supported)
+ {
+ const uint8_t* copyData = data;
+
+ TextureFormat::Enum dstFormat = format;
+ if (1 == state.info_raw.bitdepth)
+ {
+ dstFormat = bimg::TextureFormat::R8;
+ copyData = NULL;
+ }
+ else if (16 == state.info_raw.bitdepth
+ && LCT_RGB == state.info_raw.colortype)
+ {
+ dstFormat = bimg::TextureFormat::RGBA16;
+ copyData = NULL;
+ }
+ else if (palette)
+ {
+ copyData = NULL;
+ }
+
+ output = imageAlloc(_allocator
+ , dstFormat
+ , uint16_t(width)
+ , uint16_t(height)
+ , 0
+ , 1
+ , false
+ , false
+ , copyData
+ );
+
+ if (1 == state.info_raw.bitdepth)
+ {
+ for (uint32_t ii = 0, num = width*height/8; ii < num; ++ii)
+ {
+ uint8_t value = data[ii];
+ uint8_t* dst = (uint8_t*)output->m_data + ii * 8;
+ dst[0] = value & 0x01 ? 255 : 0;
+ dst[1] = value & 0x02 ? 255 : 0;
+ dst[2] = value & 0x04 ? 255 : 0;
+ dst[3] = value & 0x08 ? 255 : 0;
+ dst[4] = value & 0x10 ? 255 : 0;
+ dst[5] = value & 0x20 ? 255 : 0;
+ dst[6] = value & 0x40 ? 255 : 0;
+ dst[7] = value & 0x80 ? 255 : 0;
+ }
+ }
+ else if (16 == state.info_raw.bitdepth
+ && LCT_RGB == state.info_raw.colortype)
+ {
+ for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
+ {
+ const uint16_t* src = (uint16_t*)data + ii*3;
+ uint16_t* dst = (uint16_t*)output->m_data + ii*4;
+ dst[0] = src[0];
+ dst[1] = src[1];
+ dst[2] = src[2];
+ dst[3] = UINT16_MAX;
+ }
+ }
+ else if (palette)
+ {
+ for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
+ {
+ bx::memCopy( (uint8_t*)output->m_data + ii*4, state.info_raw.palette + data[ii]*4, 4);
+ }
+ }
+ }
+ else
+ {
+ BX_ERROR_SET(_err, BIMG_ERROR, "PNG: Unsupported format.");
+ }
+ }
+
+ lodepng_state_cleanup(&state);
+ lodepng_free(data);
+
+ return output;
+ }
+
+ static ImageContainer* imageParseTinyExr(bx::AllocatorI* _allocator, const void* _data, uint32_t _size, bx::Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ EXRVersion exrVersion;
+ int result = ParseEXRVersionFromMemory(&exrVersion, (uint8_t*)_data, _size);
+ if (TINYEXR_SUCCESS != result)
+ {
+ return NULL;
+ }
+
+ bimg::TextureFormat::Enum format = bimg::TextureFormat::RGBA8;
+ uint32_t width = 0;
+ uint32_t height = 0;
+
+ uint8_t* data = NULL;
+ const char* err = NULL;
+ EXRHeader exrHeader;
+ result = ParseEXRHeaderFromMemory(&exrHeader, &exrVersion, (uint8_t*)_data, _size, &err);
+ if (TINYEXR_SUCCESS == result)
+ {
+ EXRImage exrImage;
+ InitEXRImage(&exrImage);
+
+ result = LoadEXRImageFromMemory(&exrImage, &exrHeader, (uint8_t*)_data, _size, &err);
+ if (TINYEXR_SUCCESS == result)
+ {
+ uint8_t idxR = UINT8_MAX;
+ uint8_t idxG = UINT8_MAX;
+ uint8_t idxB = UINT8_MAX;
+ uint8_t idxA = UINT8_MAX;
+ for (uint8_t ii = 0, num = uint8_t(exrHeader.num_channels); ii < num; ++ii)
+ {
+ const EXRChannelInfo& channel = exrHeader.channels[ii];
+ if (UINT8_MAX == idxR
+ && 0 == bx::strCmp(channel.name, "R") )
+ {
+ idxR = ii;
+ }
+ else if (UINT8_MAX == idxG
+ && 0 == bx::strCmp(channel.name, "G") )
+ {
+ idxG = ii;
+ }
+ else if (UINT8_MAX == idxB
+ && 0 == bx::strCmp(channel.name, "B") )
+ {
+ idxB = ii;
+ }
+ else if (UINT8_MAX == idxA
+ && 0 == bx::strCmp(channel.name, "A") )
+ {
+ idxA = ii;
+ }
+ }
+
+ if (UINT8_MAX != idxR)
+ {
+ const bool asFloat = exrHeader.pixel_types[idxR] == TINYEXR_PIXELTYPE_FLOAT;
+ uint32_t srcBpp = 32;
+ uint32_t dstBpp = asFloat ? 32 : 16;
+ format = asFloat ? TextureFormat::R32F : TextureFormat::R16F;
+ uint32_t stepR = 1;
+ uint32_t stepG = 0;
+ uint32_t stepB = 0;
+ uint32_t stepA = 0;
+
+ if (UINT8_MAX != idxG)
+ {
+ srcBpp += 32;
+ dstBpp = asFloat ? 64 : 32;
+ format = asFloat ? TextureFormat::RG32F : TextureFormat::RG16F;
+ stepG = 1;
+ }
+
+ if (UINT8_MAX != idxB)
+ {
+ srcBpp += 32;
+ dstBpp = asFloat ? 128 : 64;
+ format = asFloat ? TextureFormat::RGBA32F : TextureFormat::RGBA16F;
+ stepB = 1;
+ }
+
+ if (UINT8_MAX != idxA)
+ {
+ srcBpp += 32;
+ dstBpp = asFloat ? 128 : 64;
+ format = asFloat ? TextureFormat::RGBA32F : TextureFormat::RGBA16F;
+ stepA = 1;
+ }
+
+ data = (uint8_t*)BX_ALLOC(_allocator, exrImage.width * exrImage.height * dstBpp/8);
+ width = exrImage.width;
+ height = exrImage.height;
+
+ if (asFloat)
+ {
+ const float zero = 0.0f;
+ const float* srcR = UINT8_MAX == idxR ? &zero : (const float*)(exrImage.images)[idxR];
+ const float* srcG = UINT8_MAX == idxG ? &zero : (const float*)(exrImage.images)[idxG];
+ const float* srcB = UINT8_MAX == idxB ? &zero : (const float*)(exrImage.images)[idxB];
+ const float* srcA = UINT8_MAX == idxA ? &zero : (const float*)(exrImage.images)[idxA];
+
+ const uint32_t bytesPerPixel = dstBpp/8;
+ for (uint32_t ii = 0, num = exrImage.width * exrImage.height; ii < num; ++ii)
+ {
+ float rgba[4] =
+ {
+ *srcR,
+ *srcG,
+ *srcB,
+ *srcA,
+ };
+ bx::memCopy(&data[ii * bytesPerPixel], rgba, bytesPerPixel);
+
+ srcR += stepR;
+ srcG += stepG;
+ srcB += stepB;
+ srcA += stepA;
+ }
+ }
+ else
+ {
+ const uint16_t zero = 0;
+ const uint16_t* srcR = UINT8_MAX == idxR ? &zero : (const uint16_t*)(exrImage.images)[idxR];
+ const uint16_t* srcG = UINT8_MAX == idxG ? &zero : (const uint16_t*)(exrImage.images)[idxG];
+ const uint16_t* srcB = UINT8_MAX == idxB ? &zero : (const uint16_t*)(exrImage.images)[idxB];
+ const uint16_t* srcA = UINT8_MAX == idxA ? &zero : (const uint16_t*)(exrImage.images)[idxA];
+
+ const uint32_t bytesPerPixel = dstBpp/8;
+ for (uint32_t ii = 0, num = exrImage.width * exrImage.height; ii < num; ++ii)
+ {
+ uint16_t rgba[4] =
+ {
+ *srcR,
+ *srcG,
+ *srcB,
+ *srcA,
+ };
+ bx::memCopy(&data[ii * bytesPerPixel], rgba, bytesPerPixel);
+
+ srcR += stepR;
+ srcG += stepG;
+ srcB += stepB;
+ srcA += stepA;
+ }
+ }
+ }
+ else
+ {
+ BX_ERROR_SET(_err, BIMG_ERROR, "EXR: Couldn't find R channel.");
+ }
+
+ FreeEXRImage(&exrImage);
+ }
+ else
+ {
+ BX_ERROR_SET(_err, BIMG_ERROR, "EXR: Failed to parse image.");
+ }
+
+ FreeEXRHeader(&exrHeader);
+ }
+ else
+ {
+ BX_ERROR_SET(_err, BIMG_ERROR, "EXR: Failed to parse header.");
+ }
+
+ ImageContainer* output = NULL;
+ if (NULL != data)
+ {
+ output = imageAlloc(_allocator
+ , format
+ , uint16_t(width)
+ , uint16_t(height)
+ , 0
+ , 1
+ , false
+ , false
+ , data
+ );
+ BX_FREE(_allocator, data);
+ }
+
+ return output;
+ }
+
+ static ImageContainer* imageParseStbImage(bx::AllocatorI* _allocator, const void* _data, uint32_t _size, bx::Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ const int isHdr = stbi_is_hdr_from_memory( (const uint8_t*)_data, (int)_size);
+
+ void* data;
+ uint32_t width = 0;
+ uint32_t height = 0;
+ int comp = 0;
+ if (isHdr)
+ {
+ data = stbi_loadf_from_memory( (const uint8_t*)_data, (int)_size, (int*)&width, (int*)&height, &comp, 4);
+ }
+ else
+ {
+ data = stbi_load_from_memory ( (const uint8_t*)_data, (int)_size, (int*)&width, (int*)&height, &comp, 0);
+ }
+
+ if (NULL == data)
+ {
+ return NULL;
+ }
+
+ bimg::TextureFormat::Enum format = bimg::TextureFormat::RGBA8;
+
+ if (isHdr)
+ {
+ format = bimg::TextureFormat::RGBA32F;
+ }
+ else
+ {
+ switch (comp)
+ {
+ case 1: format = bimg::TextureFormat::R8; break;
+ case 2: format = bimg::TextureFormat::RG8; break;
+ case 3: format = bimg::TextureFormat::RGB8; break;
+ default: break;
+ }
+ }
+
+ ImageContainer* output = imageAlloc(_allocator
+ , format
+ , uint16_t(width)
+ , uint16_t(height)
+ , 0
+ , 1
+ , false
+ , false
+ , data
+ );
+ stbi_image_free(data);
+
+ return output;
+ }
+
+ static ImageContainer* imageParseJpeg(bx::AllocatorI* _allocator, const void* _data, uint32_t _size, bx::Error* _err)
+ {
+ bx::MemoryReader reader(_data, _size);
+
+ bx::Error err;
+
+ uint16_t magic = 0;
+ bx::readHE(&reader, magic, false, &err);
+
+ if (!err.isOk()
+ || 0xffd8 != magic)
+ {
+ return NULL;
+ }
+
+ Orientation::Enum orientation = Orientation::R0;
+
+ while (err.isOk() )
+ {
+ bx::readHE(&reader, magic, false, &err);
+
+ uint16_t size;
+ bx::readHE(&reader, size, false, &err);
+
+ if (!err.isOk() )
+ {
+ return NULL;
+ }
+
+ if (0xffe1 != magic)
+ {
+ bx::seek(&reader, size-2);
+ continue;
+ }
+
+ char exif00[6];
+ bx::read(&reader, exif00, 6, &err);
+
+ if (0 == bx::memCmp(exif00, "Exif\0\0", 6) )
+ {
+ uint16_t iimm = 0;
+ bx::read(&reader, iimm, &err);
+
+ const bool littleEndian = iimm == 0x4949; //II - Intel - little endian
+ if (!err.isOk()
+ && !littleEndian
+ && iimm != 0x4d4d) // MM - Motorola - big endian
+ {
+ return NULL;
+ }
+
+ bx::readHE(&reader, magic, littleEndian, &err);
+ if (!err.isOk()
+ || 0x2a != magic)
+ {
+ return NULL;
+ }
+
+ uint32_t ifd0;
+ bx::readHE(&reader, ifd0, littleEndian, &err);
+
+ if (!err.isOk()
+ || 8 > ifd0)
+ {
+ return NULL;
+ }
+
+ bx::seek(&reader, ifd0-8);
+
+ uint16_t numEntries;
+ bx::readHE(&reader, numEntries, littleEndian, &err);
+
+ for (uint32_t ii = 0; err.isOk() && ii < numEntries; ++ii)
+ {
+ // https://sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html
+ uint16_t tag;
+ bx::readHE(&reader, tag, littleEndian, &err);
+
+ uint16_t format;
+ bx::readHE(&reader, format, littleEndian, &err);
+
+ uint32_t length;
+ bx::readHE(&reader, length, littleEndian, &err);
+
+ uint32_t data;
+ bx::readHE(&reader, data, littleEndian, &err);
+
+ switch (tag)
+ {
+ case 0x112: // orientation
+ if (3 == format)
+ {
+ bx::seek(&reader, -4);
+
+ uint16_t u16;
+ bx::readHE(&reader, u16, littleEndian, &err);
+
+ uint16_t pad;
+ bx::read(&reader, pad, &err);
+
+ switch (u16)
+ {
+ default:
+ case 1: orientation = Orientation::R0; break; // Horizontal (normal)
+ case 2: orientation = Orientation::HFlip; break; // Mirror horizontal
+ case 3: orientation = Orientation::R180; break; // Rotate 180
+ case 4: orientation = Orientation::VFlip; break; // Mirror vertical
+ case 5: orientation = Orientation::HFlipR270; break; // Mirror horizontal and rotate 270 CW
+ case 6: orientation = Orientation::R90; break; // Rotate 90 CW
+ case 7: orientation = Orientation::HFlipR90; break; // Mirror horizontal and rotate 90 CW
+ case 8: orientation = Orientation::R270; break; // Rotate 270 CW
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ break;
+ }
+
+ ImageContainer* image = imageParseStbImage(_allocator, _data, _size, _err);
+ if (NULL != image)
+ {
+ image->m_orientation = orientation;
+ }
+
+ return image;
+ }
+
+ ImageContainer* imageParse(bx::AllocatorI* _allocator, const void* _data, uint32_t _size, TextureFormat::Enum _dstFormat, bx::Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ ImageContainer* input = imageParseDds (_allocator, _data, _size, _err) ;
+ input = NULL == input ? imageParseKtx (_allocator, _data, _size, _err) : input;
+ input = NULL == input ? imageParsePvr3 (_allocator, _data, _size, _err) : input;
+ input = NULL == input ? imageParseLodePng (_allocator, _data, _size, _err) : input;
+ input = NULL == input ? imageParseTinyExr (_allocator, _data, _size, _err) : input;
+ input = NULL == input ? imageParseJpeg (_allocator, _data, _size, _err) : input;
+ input = NULL == input ? imageParseStbImage(_allocator, _data, _size, _err) : input;
+
+ if (NULL == input)
+ {
+ return NULL;
+ }
+
+ _dstFormat = TextureFormat::Count == _dstFormat
+ ? input->m_format
+ : _dstFormat
+ ;
+
+ if (_dstFormat == input->m_format)
+ {
+ return input;
+ }
+
+ ImageContainer* output = imageConvert(_allocator, _dstFormat, *input);
+ imageFree(input);
+
+ return output;
+ }
+
+} // namespace bimg
diff --git a/3rdparty/bimg/src/image_encode.cpp b/3rdparty/bimg/src/image_encode.cpp
new file mode 100644
index 00000000000..708c4af2f47
--- /dev/null
+++ b/3rdparty/bimg/src/image_encode.cpp
@@ -0,0 +1,554 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include <bimg/encode.h>
+#include "bimg_p.h"
+
+#include <libsquish/squish.h>
+#include <etc1/etc1.h>
+#include <etc2/ProcessRGB.hpp>
+#include <nvtt/nvtt.h>
+#include <pvrtc/PvrTcEncoder.h>
+#include <edtaa3/edtaa3func.h>
+
+BX_PRAGMA_DIAGNOSTIC_PUSH();
+BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4100) // warning C4100: 'alloc_context': unreferenced formal parameter
+BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4702) // warning C4702: unreachable code
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-parameter") // warning: unused parameter ‘alloc_context’ [-Wunused-parameter]
+#define STB_IMAGE_RESIZE_IMPLEMENTATION
+#include <stb/stb_image_resize.h>
+BX_PRAGMA_DIAGNOSTIC_POP();
+
+extern "C" {
+#include <iqa.h>
+}
+
+namespace bimg
+{
+ static uint32_t s_squishQuality[] =
+ {
+ squish::kColourClusterFit, // Default
+ squish::kColourIterativeClusterFit, // Highest
+ squish::kColourRangeFit, // Fastest
+ };
+ BX_STATIC_ASSERT(Quality::Count == BX_COUNTOF(s_squishQuality) );
+
+ void imageEncodeFromRgba8(void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _depth, TextureFormat::Enum _format, Quality::Enum _quality, bx::Error* _err)
+ {
+ const uint8_t* src = (const uint8_t*)_src;
+ uint8_t* dst = (uint8_t*)_dst;
+
+ const uint32_t srcPitch = _width*4;
+ const uint32_t srcSlice = _height*srcPitch;
+ const uint32_t dstBpp = getBitsPerPixel(_format);
+ const uint32_t dstPitch = _width*dstBpp/8;
+ const uint32_t dstSlice = _height*dstPitch;
+
+ for (uint32_t zz = 0; zz < _depth && _err->isOk(); ++zz, src += srcSlice, dst += dstSlice)
+ {
+ switch (_format)
+ {
+ case TextureFormat::BC1:
+ case TextureFormat::BC2:
+ case TextureFormat::BC3:
+ case TextureFormat::BC4:
+ case TextureFormat::BC5:
+ squish::CompressImage(src, _width, _height, dst
+ , s_squishQuality[_quality]
+ | (_format == TextureFormat::BC2 ? squish::kDxt3
+ : _format == TextureFormat::BC3 ? squish::kDxt5
+ : _format == TextureFormat::BC4 ? squish::kBc4
+ : _format == TextureFormat::BC5 ? squish::kBc5
+ : squish::kDxt1)
+ );
+ break;
+
+ case TextureFormat::BC6H:
+ case TextureFormat::BC7:
+ BX_ERROR_SET(_err, BIMG_ERROR, "Unable to convert between input/output formats!");
+ break;
+
+ case TextureFormat::ETC1:
+ etc1_encode_image(src, _width, _height, 4, _width*4, dst);
+ break;
+
+ case TextureFormat::ETC2:
+ {
+ const uint32_t blockWidth = (_width +3)/4;
+ const uint32_t blockHeight = (_height+3)/4;
+ uint64_t* dstBlock = (uint64_t*)dst;
+ for (uint32_t yy = 0; yy < blockHeight; ++yy)
+ {
+ for (uint32_t xx = 0; xx < blockWidth; ++xx)
+ {
+ uint8_t block[4*4*4];
+ const uint8_t* ptr = &src[(yy*srcPitch+xx*4)*4];
+
+ for (uint32_t ii = 0; ii < 16; ++ii)
+ { // BGRx
+ bx::memCopy(&block[ii*4], &ptr[(ii%4)*srcPitch + (ii&~3)], 4);
+ bx::xchg(block[ii*4+0], block[ii*4+2]);
+ }
+
+ *dstBlock++ = ProcessRGB_ETC2(block);
+ }
+ }
+ }
+ break;
+
+ case TextureFormat::PTC14:
+ {
+ using namespace Javelin;
+ RgbaBitmap bmp;
+ bmp.width = _width;
+ bmp.height = _height;
+ bmp.data = const_cast<uint8_t*>(src);
+ PvrTcEncoder::EncodeRgb4Bpp(dst, bmp);
+ bmp.data = NULL;
+ }
+ break;
+
+ case TextureFormat::PTC14A:
+ {
+ using namespace Javelin;
+ RgbaBitmap bmp;
+ bmp.width = _width;
+ bmp.height = _height;
+ bmp.data = const_cast<uint8_t*>(src);
+ PvrTcEncoder::EncodeRgba4Bpp(dst, bmp);
+ bmp.data = NULL;
+ }
+ break;
+
+ case TextureFormat::BGRA8:
+ imageSwizzleBgra8(dst, dstPitch, _width, _height, src, srcPitch);
+ break;
+
+ case TextureFormat::RGBA8:
+ bx::memCopy(_dst, _src, srcPitch, _height, srcPitch, dstPitch);
+ break;
+
+ default:
+ if (!imageConvert(dst, _format, src, TextureFormat::RGBA8, _width, _height, 1) )
+ {
+ BX_ERROR_SET(_err, BIMG_ERROR, "Unable to convert between input/output formats!");
+ }
+ break;
+ }
+ }
+ }
+
+ void imageEncodeFromRgba32f(bx::AllocatorI* _allocator, void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _depth, TextureFormat::Enum _dstFormat, Quality::Enum _quality, bx::Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ const uint8_t* src = (const uint8_t*)_src;
+
+ switch (_dstFormat)
+ {
+ case TextureFormat::BC6H:
+ nvtt::compressBC6H(src, _width, _height, _width*16, _dst);
+ break;
+
+ case TextureFormat::BC7:
+ nvtt::compressBC7(src, _width, _height, _width*16, _dst);
+ break;
+
+ default:
+ if (!imageConvert(_dst, _dstFormat, _src, TextureFormat::RGBA32F, _width, _height, _depth) )
+ {
+ uint8_t* temp = (uint8_t*)BX_ALLOC(_allocator, _width*_height*_depth*4);
+ if (imageConvert(temp, TextureFormat::RGBA8, _src, TextureFormat::RGBA32F, _width, _height, _depth) )
+ {
+ for (uint32_t zz = 0; zz < _depth; ++zz)
+ {
+ const uint32_t zoffset = zz*_width*_height;
+
+ for (uint32_t yy = 0; yy < _height; ++yy)
+ {
+ const uint32_t yoffset = zoffset + yy*_width;
+
+ for (uint32_t xx = 0; xx < _width; ++xx)
+ {
+ const uint32_t offset = yoffset + xx;
+ const float* input = (const float*)&src[offset * 16];
+ uint8_t* output = &temp[offset * 4];
+ output[0] = uint8_t(bx::fsaturate(input[0])*255.0f + 0.5f);
+ output[1] = uint8_t(bx::fsaturate(input[1])*255.0f + 0.5f);
+ output[2] = uint8_t(bx::fsaturate(input[2])*255.0f + 0.5f);
+ output[3] = uint8_t(bx::fsaturate(input[3])*255.0f + 0.5f);
+ }
+ }
+ }
+
+ imageEncodeFromRgba8(_dst, temp, _width, _height, _depth, _dstFormat, _quality, _err);
+ }
+ else
+ {
+ BX_ERROR_SET(_err, BIMG_ERROR, "Unable to convert between input/output formats!");
+ }
+
+ BX_FREE(_allocator, temp);
+ }
+ break;
+ }
+ }
+
+ void imageEncode(bx::AllocatorI* _allocator, void* _dst, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height, uint32_t _depth, TextureFormat::Enum _dstFormat, Quality::Enum _quality, bx::Error* _err)
+ {
+ switch (_dstFormat)
+ {
+ case bimg::TextureFormat::BC1:
+ case bimg::TextureFormat::BC2:
+ case bimg::TextureFormat::BC3:
+ case bimg::TextureFormat::BC4:
+ case bimg::TextureFormat::BC5:
+ case bimg::TextureFormat::ETC1:
+ case bimg::TextureFormat::ETC2:
+ case bimg::TextureFormat::PTC14:
+ case bimg::TextureFormat::PTC14A:
+ {
+ uint8_t* temp = (uint8_t*)BX_ALLOC(_allocator, _width*_height*_depth*4);
+ imageDecodeToRgba8(temp, _src, _width, _height, _width*4, _srcFormat);
+ imageEncodeFromRgba8(_dst, temp, _width, _height, _depth, _dstFormat, _quality, _err);
+ BX_FREE(_allocator, temp);
+ }
+ break;
+
+ case bimg::TextureFormat::BC6H:
+ case bimg::TextureFormat::BC7:
+ {
+ uint8_t* temp = (uint8_t*)BX_ALLOC(_allocator, _width*_height*_depth*16);
+ imageDecodeToRgba32f(_allocator, temp, _src, _width, _height, _depth, _width*16, _srcFormat);
+ imageEncodeFromRgba32f(_allocator, _dst, temp, _width, _height, _depth, _dstFormat, _quality, _err);
+ BX_FREE(_allocator, temp);
+ }
+ break;
+
+ default:
+ BX_ERROR_SET(_err, BIMG_ERROR, "Unable to convert between input/output formats!");
+ break;
+ }
+ }
+
+ ImageContainer* imageEncode(bx::AllocatorI* _allocator, TextureFormat::Enum _dstFormat, Quality::Enum _quality, const ImageContainer& _input)
+ {
+ ImageContainer* output = imageAlloc(_allocator
+ , _dstFormat
+ , uint16_t(_input.m_width)
+ , uint16_t(_input.m_height)
+ , uint16_t(_input.m_depth)
+ , _input.m_numLayers
+ , _input.m_cubeMap
+ , 1 < _input.m_numMips
+ );
+
+ const uint16_t numSides = _input.m_numLayers * (_input.m_cubeMap ? 6 : 1);
+
+ bx::Error err;
+
+ for (uint16_t side = 0; side < numSides && err.isOk(); ++side)
+ {
+ for (uint8_t lod = 0, num = _input.m_numMips; lod < num && err.isOk(); ++lod)
+ {
+ ImageMip mip;
+ if (imageGetRawData(_input, side, lod, _input.m_data, _input.m_size, mip) )
+ {
+ ImageMip dstMip;
+ imageGetRawData(*output, side, lod, output->m_data, output->m_size, dstMip);
+ uint8_t* dstData = const_cast<uint8_t*>(dstMip.m_data);
+
+ imageEncode(_allocator
+ , dstData
+ , mip.m_data
+ , mip.m_format
+ , mip.m_width
+ , mip.m_height
+ , mip.m_depth
+ , _dstFormat
+ , _quality
+ , &err
+ );
+ }
+ }
+ }
+
+ if (err.isOk() )
+ {
+ return output;
+ }
+
+ imageFree(output);
+ return NULL;
+ }
+
+ void imageRgba32f11to01(void* _dst, uint32_t _width, uint32_t _height, uint32_t _depth, uint32_t _pitch, const void* _src)
+ {
+ const uint8_t* src = (const uint8_t*)_src;
+ uint8_t* dst = (uint8_t*)_dst;
+
+ for (uint32_t zz = 0; zz < _depth; ++zz)
+ {
+ for (uint32_t yy = 0; yy < _height; ++yy)
+ {
+ for (uint32_t xx = 0; xx < _width; ++xx)
+ {
+ const uint32_t offset = yy*_pitch + xx * 16;
+ const float* input = (const float*)&src[offset];
+ float* output = (float*)&dst[offset];
+ output[0] = input[0]*0.5f + 0.5f;
+ output[1] = input[1]*0.5f + 0.5f;
+ output[2] = input[2]*0.5f + 0.5f;
+ output[3] = input[3]*0.5f + 0.5f;
+ }
+ }
+ }
+ }
+
+ static void edtaa3(bx::AllocatorI* _allocator, double* _dst, uint32_t _width, uint32_t _height, double* _src)
+ {
+ const uint32_t numPixels = _width*_height;
+
+ short* xdist = (short *)BX_ALLOC(_allocator, numPixels*sizeof(short) );
+ short* ydist = (short *)BX_ALLOC(_allocator, numPixels*sizeof(short) );
+ double* gx = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
+ double* gy = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
+
+ ::computegradient(_src, _width, _height, gx, gy);
+ ::edtaa3(_src, gx, gy, _width, _height, xdist, ydist, _dst);
+
+ for (uint32_t ii = 0; ii < numPixels; ++ii)
+ {
+ if (_dst[ii] < 0.0)
+ {
+ _dst[ii] = 0.0;
+ }
+ }
+
+ BX_FREE(_allocator, xdist);
+ BX_FREE(_allocator, ydist);
+ BX_FREE(_allocator, gx);
+ BX_FREE(_allocator, gy);
+ }
+
+ void imageMakeDist(bx::AllocatorI* _allocator, void* _dst, uint32_t _width, uint32_t _height, uint32_t _srcPitch, float _edge, const void* _src)
+ {
+ const uint32_t numPixels = _width*_height;
+
+ double* imgIn = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
+ double* outside = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
+ double* inside = (double*)BX_ALLOC(_allocator, numPixels*sizeof(double) );
+
+ for (uint32_t yy = 0; yy < _height; ++yy)
+ {
+ const uint8_t* src = (const uint8_t*)_src + yy*_srcPitch;
+ double* dst = &imgIn[yy*_width];
+ for (uint32_t xx = 0; xx < _width; ++xx)
+ {
+ dst[xx] = double(src[xx])/255.0;
+ }
+ }
+
+ edtaa3(_allocator, outside, _width, _height, imgIn);
+
+ for (uint32_t ii = 0; ii < numPixels; ++ii)
+ {
+ imgIn[ii] = 1.0 - imgIn[ii];
+ }
+
+ edtaa3(_allocator, inside, _width, _height, imgIn);
+
+ BX_FREE(_allocator, imgIn);
+
+ uint8_t* dst = (uint8_t*)_dst;
+
+ double edgeOffset = _edge*0.5;
+ double invEdge = 1.0/_edge;
+
+ for (uint32_t ii = 0; ii < numPixels; ++ii)
+ {
+ double dist = bx::clamp( ( (outside[ii] - inside[ii])+edgeOffset) * invEdge, 0.0, 1.0);
+ dst[ii] = 255-uint8_t(dist * 255.0);
+ }
+
+ BX_FREE(_allocator, inside);
+ BX_FREE(_allocator, outside);
+ }
+
+ static const iqa_ssim_args s_iqaArgs =
+ {
+ 0.39f, // alpha
+ 0.731f, // beta
+ 1.12f, // gamma
+ 187, // L
+ 0.025987f, // K1
+ 0.0173f, // K2
+ 1 // factor
+ };
+
+ float imageQualityRgba8(
+ const void* _reference
+ , const void* _data
+ , uint16_t _width
+ , uint16_t _height
+ )
+ {
+ float result = iqa_ssim( (const uint8_t*)_reference
+ , (const uint8_t*)_data
+ , _width
+ , _height
+ , _width*4
+ , 0
+ , &s_iqaArgs
+ );
+ return result;
+ }
+
+ bool imageResizeRgba32fLinear(ImageContainer* _dst, const ImageContainer* _src)
+ {
+ const uint16_t numSides = _src->m_numLayers * (_src->m_cubeMap ? 6 : 1);
+
+ for (uint16_t side = 0; side < numSides; ++side)
+ {
+ bimg::ImageMip srcMip;
+ bimg::imageGetRawData(*_src, side, 0, _src->m_data, _src->m_size, srcMip);
+ const float* srcData = (const float*)(srcMip.m_data);
+
+ bimg::ImageMip dstMip;
+ bimg::imageGetRawData(*_dst, side, 0, _dst->m_data, _dst->m_size, dstMip);
+ float* dstData = (float*)(dstMip.m_data);
+
+ int result = stbir_resize_float_generic(
+ (const float*)srcData, _src->m_width, _src->m_height, _src->m_width*16
+ , ( float*)dstData, _dst->m_width, _dst->m_height, _dst->m_width*16
+ , 4, 3
+ , STBIR_FLAG_ALPHA_PREMULTIPLIED
+ , STBIR_EDGE_CLAMP
+ , STBIR_FILTER_DEFAULT
+ , STBIR_COLORSPACE_LINEAR
+ , NULL
+ );
+
+ if (1 != result)
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ static float getAlpha(UnpackFn _unpack, const void* _data)
+ {
+ float rgba[4];
+ _unpack(rgba, _data);
+ return rgba[3];
+ }
+
+ float imageAlphaTestCoverage(TextureFormat::Enum _format, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src, float _alphaRef, float _scale)
+ {
+ UnpackFn unpack = getUnpack(_format);
+ if (NULL == unpack)
+ {
+ return 0.0f;
+ }
+
+ float coverage = 0.0f;
+ const uint8_t* src = (const uint8_t*)_src;
+ const uint32_t xstep = getBitsPerPixel(_format) / 8;
+ const float numSamples = 8.0f;
+
+ for (uint32_t yy = 0, ystep = _srcPitch; yy < _height-1; ++yy, src += ystep)
+ {
+ const uint8_t* data = src;
+ for (uint32_t xx = 0; xx < _width-1; ++xx, data += xstep)
+ {
+ float alpha00 = _scale * getAlpha(unpack, data);
+ float alpha10 = _scale * getAlpha(unpack, data+xstep);
+ float alpha01 = _scale * getAlpha(unpack, data+ystep);
+ float alpha11 = _scale * getAlpha(unpack, data+ystep+xstep);
+
+ for (float fy = 0.5f/numSamples; fy < 1.0f; fy += 1.0f)
+ {
+ for (float fx = 0.5f/numSamples; fx < 1.0f; fx += 1.0f)
+ {
+ float alpha = 0.0f
+ + alpha00 * (1.0f - fx) * (1.0f - fy)
+ + alpha10 * ( fx) * (1.0f - fy)
+ + alpha01 * (1.0f - fx) * ( fy)
+ + alpha11 * ( fx) * ( fy)
+ ;
+
+ if (alpha > _alphaRef)
+ {
+ coverage += 1.0f;
+ }
+ }
+ }
+ }
+ }
+
+ return coverage / float(_width*_height*numSamples*numSamples);
+ }
+
+ void imageScaleAlphaToCoverage(TextureFormat::Enum _format, uint32_t _width, uint32_t _height, uint32_t _srcPitch, void* _src, float _desiredCoverage, float _alphaRef)
+ {
+ PackFn pack = getPack(_format);
+ UnpackFn unpack = getUnpack(_format);
+ if (NULL == pack
+ || NULL == unpack)
+ {
+ return;
+ }
+
+ float min = 0.0f;
+ float max = 4.0f;
+ float scale = 1.0f;
+
+ for (uint32_t ii = 0; ii < 8; ++ii)
+ {
+ float coverage = imageAlphaTestCoverage(
+ _format
+ , _width
+ , _height
+ , _srcPitch
+ , _src
+ , _alphaRef
+ , scale
+ );
+
+ if (coverage < _desiredCoverage)
+ {
+ min = scale;
+ }
+ else if (coverage > _desiredCoverage)
+ {
+ max = scale;
+ }
+ else
+ {
+ break;
+ }
+
+ scale = (min + max) * 0.5f;
+ }
+
+ uint8_t* src = (uint8_t*)_src;
+ const uint32_t xstep = getBitsPerPixel(_format) / 8;
+
+ for (uint32_t yy = 0, ystep = _srcPitch; yy < _height; ++yy, src += ystep)
+ {
+ uint8_t* data = src;
+ for (uint32_t xx = 0; xx < _width; ++xx, data += xstep)
+ {
+ float rgba[4];
+ unpack(rgba, data);
+ rgba[3] = bx::fsaturate(rgba[3]*scale);
+ pack(data, rgba);
+ }
+ }
+ }
+
+} // namespace bimg
diff --git a/3rdparty/bimg/tools/texturec/texturec.cpp b/3rdparty/bimg/tools/texturec/texturec.cpp
new file mode 100644
index 00000000000..8b6d27dfc1b
--- /dev/null
+++ b/3rdparty/bimg/tools/texturec/texturec.cpp
@@ -0,0 +1,913 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include <stdio.h>
+#include <bx/allocator.h>
+#include <bx/readerwriter.h>
+#include <bx/endian.h>
+#include <bx/math.h>
+
+#include <bimg/decode.h>
+#include <bimg/encode.h>
+
+#if 0
+# define DBG(_format, ...) fprintf(stderr, "" _format "\n", ##__VA_ARGS__)
+#else
+# define DBG(...) BX_NOOP()
+#endif // DEBUG
+
+#include <bx/bx.h>
+#include <bx/commandline.h>
+#include <bx/file.h>
+#include <bx/uint32_t.h>
+
+#include <string>
+
+#define BIMG_TEXTUREC_VERSION_MAJOR 1
+#define BIMG_TEXTUREC_VERSION_MINOR 10
+
+struct Options
+{
+ Options()
+ : maxSize(UINT32_MAX)
+ , edge(0.0f)
+ , format(bimg::TextureFormat::Count)
+ , quality(bimg::Quality::Default)
+ , mips(false)
+ , normalMap(false)
+ , iqa(false)
+ , sdf(false)
+ , alphaTest(false)
+ {
+ }
+
+ void dump()
+ {
+ DBG("Options:\n"
+ "\t maxSize: %d\n"
+ "\t edge: %f\n"
+ "\t format: %s\n"
+ "\t mips: %s\n"
+ "\tnormalMap: %s\n"
+ "\t iqa: %s\n"
+ "\t sdf: %s\n"
+ , maxSize
+ , edge
+ , bimg::getName(format)
+ , mips ? "true" : "false"
+ , normalMap ? "true" : "false"
+ , iqa ? "true" : "false"
+ , sdf ? "true" : "false"
+ );
+ }
+
+ uint32_t maxSize;
+ float edge;
+ bimg::TextureFormat::Enum format;
+ bimg::Quality::Enum quality;
+ bool mips;
+ bool normalMap;
+ bool iqa;
+ bool sdf;
+ bool alphaTest;
+};
+
+void imageRgba32fNormalize(void* _dst, uint32_t _width, uint32_t _height, uint32_t _srcPitch, const void* _src)
+{
+ const uint8_t* src = (const uint8_t*)_src;
+ uint8_t* dst = (uint8_t*)_dst;
+
+ for (uint32_t yy = 0, ystep = _srcPitch; yy < _height; ++yy, src += ystep)
+ {
+ const float* rgba = (const float*)&src[0];
+ for (uint32_t xx = 0; xx < _width; ++xx, rgba += 4, dst += 16)
+ {
+ float xyz[3];
+
+ xyz[0] = rgba[0];
+ xyz[1] = rgba[1];
+ xyz[2] = rgba[2];
+ bx::vec3Norm( (float*)dst, xyz);
+ }
+ }
+}
+
+bimg::ImageContainer* convert(bx::AllocatorI* _allocator, const void* _inputData, uint32_t _inputSize, const Options& _options, bx::Error* _err)
+{
+ BX_ERROR_SCOPE(_err);
+
+ const uint8_t* inputData = (uint8_t*)_inputData;
+
+ bimg::ImageContainer* output = NULL;
+ bimg::ImageContainer* input = bimg::imageParse(_allocator, inputData, _inputSize, bimg::TextureFormat::Count, _err);
+
+ if (!_err->isOk() )
+ {
+ return NULL;
+ }
+
+ if (NULL != input)
+ {
+ const bimg::TextureFormat::Enum inputFormat = input->m_format;
+ bimg::TextureFormat::Enum outputFormat = input->m_format;
+
+ if (bimg::TextureFormat::Count != _options.format)
+ {
+ outputFormat = _options.format;
+ }
+
+ if (_options.sdf)
+ {
+ outputFormat = bimg::TextureFormat::R8;
+ }
+
+ const bimg::ImageBlockInfo& inputBlockInfo = bimg::getBlockInfo(inputFormat);
+ const bimg::ImageBlockInfo& outputBlockInfo = bimg::getBlockInfo(outputFormat);
+ const uint32_t blockWidth = outputBlockInfo.blockWidth;
+ const uint32_t blockHeight = outputBlockInfo.blockHeight;
+ const uint32_t minBlockX = outputBlockInfo.minBlockX;
+ const uint32_t minBlockY = outputBlockInfo.minBlockY;
+ uint32_t outputWidth = bx::uint32_max(blockWidth * minBlockX, ( (input->m_width + blockWidth - 1) / blockWidth )*blockWidth);
+ uint32_t outputHeight = bx::uint32_max(blockHeight * minBlockY, ( (input->m_height + blockHeight - 1) / blockHeight)*blockHeight);
+
+ if (outputWidth > _options.maxSize
+ || outputHeight > _options.maxSize)
+ {
+ if (outputWidth > outputHeight)
+ {
+ outputHeight = outputHeight * _options.maxSize / outputWidth;
+ outputWidth = _options.maxSize;
+ }
+ else
+ {
+ outputWidth = outputWidth * _options.maxSize / outputHeight;
+ outputHeight = _options.maxSize;
+ }
+ }
+
+ const bool needResize = false
+ || input->m_width != outputWidth
+ || input->m_height != outputHeight
+ ;
+
+ const bool passThru = true
+ && !needResize
+ && (1 < input->m_numMips) == _options.mips
+ && !_options.sdf
+ && !_options.alphaTest
+ && !_options.normalMap
+ && !_options.iqa
+ ;
+
+ if (needResize)
+ {
+ bimg::ImageContainer* src = bimg::imageConvert(_allocator, bimg::TextureFormat::RGBA32F, *input);
+
+ bimg::ImageContainer* dst = bimg::imageAlloc(
+ _allocator
+ , bimg::TextureFormat::RGBA32F
+ , uint16_t(outputWidth)
+ , uint16_t(outputHeight)
+ , 1
+ , input->m_numLayers
+ , input->m_cubeMap
+ , false
+ );
+
+ bimg::imageResizeRgba32fLinear(dst, src);
+
+ bimg::imageFree(src);
+ bimg::imageFree(input);
+
+ input = bimg::imageConvert(_allocator, inputFormat, *dst);
+ bimg::imageFree(dst);
+ }
+
+ if (passThru)
+ {
+ if (inputFormat != outputFormat
+ && bimg::isCompressed(outputFormat) )
+ {
+ output = bimg::imageEncode(_allocator, outputFormat, _options.quality, *input);
+ }
+ else
+ {
+ output = bimg::imageConvert(_allocator, outputFormat, *input);
+ }
+
+ bimg::imageFree(input);
+ return output;
+ }
+
+ output = bimg::imageAlloc(
+ _allocator
+ , outputFormat
+ , uint16_t(input->m_width)
+ , uint16_t(input->m_height)
+ , uint16_t(input->m_depth)
+ , input->m_numLayers
+ , input->m_cubeMap
+ , _options.mips
+ );
+
+ const uint8_t numMips = output->m_numMips;
+ const uint16_t numSides = output->m_numLayers * (output->m_cubeMap ? 6 : 1);
+
+ for (uint16_t side = 0; side < numSides && _err->isOk(); ++side)
+ {
+ bimg::ImageMip mip;
+ if (bimg::imageGetRawData(*input, side, 0, input->m_data, input->m_size, mip) )
+ {
+ bimg::ImageMip dstMip;
+ bimg::imageGetRawData(*output, side, 0, output->m_data, output->m_size, dstMip);
+ uint8_t* dstData = const_cast<uint8_t*>(dstMip.m_data);
+
+ void* temp = NULL;
+
+ if (_options.normalMap)
+ {
+ uint32_t size = bimg::imageGetSize(
+ NULL
+ , uint16_t(dstMip.m_width)
+ , uint16_t(dstMip.m_height)
+ , 0
+ , false
+ , false
+ , 1
+ , bimg::TextureFormat::RGBA32F
+ );
+ temp = BX_ALLOC(_allocator, size);
+ float* rgba = (float*)temp;
+ float* rgbaDst = (float*)BX_ALLOC(_allocator, size);
+
+ bimg::imageDecodeToRgba32f(_allocator
+ , rgba
+ , mip.m_data
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , dstMip.m_width*16
+ , mip.m_format
+ );
+
+ if (bimg::TextureFormat::BC5 != mip.m_format)
+ {
+ for (uint32_t yy = 0; yy < mip.m_height; ++yy)
+ {
+ for (uint32_t xx = 0; xx < mip.m_width; ++xx)
+ {
+ const uint32_t offset = (yy*mip.m_width + xx) * 4;
+ float* inout = &rgba[offset];
+ inout[0] = inout[0] * 2.0f - 1.0f;
+ inout[1] = inout[1] * 2.0f - 1.0f;
+ inout[2] = inout[2] * 2.0f - 1.0f;
+ inout[3] = inout[3] * 2.0f - 1.0f;
+ }
+ }
+ }
+
+ imageRgba32fNormalize(rgba
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_width*16
+ , rgba
+ );
+
+ bimg::imageRgba32f11to01(rgbaDst
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , dstMip.m_width*16
+ , rgba
+ );
+
+ bimg::imageEncodeFromRgba32f(_allocator
+ , dstData
+ , rgbaDst
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , outputFormat
+ , _options.quality
+ , _err
+ );
+
+ for (uint8_t lod = 1; lod < numMips && _err->isOk(); ++lod)
+ {
+ bimg::imageRgba32fDownsample2x2NormalMap(rgba
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_width*16
+ , rgba
+ );
+
+ bimg::imageRgba32f11to01(rgbaDst
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , dstMip.m_width*16
+ , rgba
+ );
+
+ bimg::imageGetRawData(*output, side, lod, output->m_data, output->m_size, dstMip);
+ dstData = const_cast<uint8_t*>(dstMip.m_data);
+
+ bimg::imageEncodeFromRgba32f(_allocator
+ , dstData
+ , rgbaDst
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , outputFormat
+ , _options.quality
+ , _err
+ );
+ }
+
+ BX_FREE(_allocator, rgbaDst);
+ }
+ else if ( (!bimg::isCompressed(input->m_format) && 8 != inputBlockInfo.rBits)
+ || outputFormat == bimg::TextureFormat::BC6H
+ || outputFormat == bimg::TextureFormat::BC7
+ )
+ {
+ uint32_t size = bimg::imageGetSize(
+ NULL
+ , uint16_t(dstMip.m_width)
+ , uint16_t(dstMip.m_height)
+ , uint16_t(dstMip.m_depth)
+ , false
+ , false
+ , 1
+ , bimg::TextureFormat::RGBA32F
+ );
+ temp = BX_ALLOC(_allocator, size);
+ float* rgba32f = (float*)temp;
+ float* rgbaDst = (float*)BX_ALLOC(_allocator, size);
+
+ bimg::imageDecodeToRgba32f(_allocator
+ , rgba32f
+ , mip.m_data
+ , mip.m_width
+ , mip.m_height
+ , mip.m_depth
+ , mip.m_width*16
+ , mip.m_format
+ );
+
+ bimg::imageEncodeFromRgba32f(_allocator
+ , dstData
+ , rgba32f
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , outputFormat
+ , _options.quality
+ , _err
+ );
+
+ if (1 < numMips
+ && _err->isOk() )
+ {
+ bimg::imageRgba32fToLinear(rgba32f
+ , mip.m_width
+ , mip.m_height
+ , mip.m_depth
+ , mip.m_width*16
+ , rgba32f
+ );
+
+ for (uint8_t lod = 1; lod < numMips && _err->isOk(); ++lod)
+ {
+ bimg::imageRgba32fLinearDownsample2x2(rgba32f
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , dstMip.m_width*16
+ , rgba32f
+ );
+
+ bimg::imageGetRawData(*output, side, lod, output->m_data, output->m_size, dstMip);
+ dstData = const_cast<uint8_t*>(dstMip.m_data);
+
+ bimg::imageRgba32fToGamma(rgbaDst
+ , mip.m_width
+ , mip.m_height
+ , mip.m_depth
+ , mip.m_width*16
+ , rgba32f
+ );
+
+ bimg::imageEncodeFromRgba32f(_allocator
+ , dstData
+ , rgbaDst
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , outputFormat
+ , _options.quality
+ , _err
+ );
+ }
+ }
+
+ BX_FREE(_allocator, rgbaDst);
+ }
+ else if (_options.sdf)
+ {
+ uint32_t size = bimg::imageGetSize(
+ NULL
+ , uint16_t(dstMip.m_width)
+ , uint16_t(dstMip.m_height)
+ , uint16_t(dstMip.m_depth)
+ , false
+ , false
+ , 1
+ , bimg::TextureFormat::R8
+ );
+ temp = BX_ALLOC(_allocator, size);
+ uint8_t* rgba = (uint8_t*)temp;
+
+ bimg::imageDecodeToR8(_allocator
+ , rgba
+ , mip.m_data
+ , mip.m_width
+ , mip.m_height
+ , mip.m_depth
+ , mip.m_width
+ , mip.m_format
+ );
+
+ bimg::imageGetRawData(*output, side, 0, output->m_data, output->m_size, dstMip);
+ dstData = const_cast<uint8_t*>(dstMip.m_data);
+
+ bimg::imageMakeDist(_allocator
+ , dstData
+ , mip.m_width
+ , mip.m_height
+ , mip.m_width
+ , _options.edge
+ , rgba
+ );
+ }
+ else
+ {
+ uint32_t size = bimg::imageGetSize(
+ NULL
+ , uint16_t(dstMip.m_width)
+ , uint16_t(dstMip.m_height)
+ , uint16_t(dstMip.m_depth)
+ , false
+ , false
+ , 1
+ , bimg::TextureFormat::RGBA8
+ );
+ temp = BX_ALLOC(_allocator, size);
+ uint8_t* rgba = (uint8_t*)temp;
+
+ bimg::imageDecodeToRgba8(rgba
+ , mip.m_data
+ , mip.m_width
+ , mip.m_height
+ , mip.m_width*4
+ , mip.m_format
+ );
+
+ float coverage = 0.0f;
+ if (_options.alphaTest)
+ {
+ coverage = bimg::imageAlphaTestCoverage(bimg::TextureFormat::RGBA8
+ , mip.m_width
+ , mip.m_height
+ , mip.m_width*4
+ , rgba
+ , _options.edge
+ );
+ }
+
+ void* ref = NULL;
+ if (_options.iqa)
+ {
+ ref = BX_ALLOC(_allocator, size);
+ bx::memCopy(ref, rgba, size);
+ }
+
+ bimg::imageGetRawData(*output, side, 0, output->m_data, output->m_size, dstMip);
+ dstData = const_cast<uint8_t*>(dstMip.m_data);
+ bimg::imageEncodeFromRgba8(dstData
+ , rgba
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , outputFormat
+ , _options.quality
+ , _err
+ );
+
+ for (uint8_t lod = 1; lod < numMips && _err->isOk(); ++lod)
+ {
+ bimg::imageRgba8Downsample2x2(rgba
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , dstMip.m_width*4
+ , rgba
+ );
+
+ if (_options.alphaTest)
+ {
+ bimg::imageScaleAlphaToCoverage(bimg::TextureFormat::RGBA8
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_width*4
+ , rgba
+ , coverage
+ , _options.edge
+ );
+ }
+
+ bimg::imageGetRawData(*output, side, lod, output->m_data, output->m_size, dstMip);
+ dstData = const_cast<uint8_t*>(dstMip.m_data);
+
+ bimg::imageEncodeFromRgba8(dstData
+ , rgba
+ , dstMip.m_width
+ , dstMip.m_height
+ , dstMip.m_depth
+ , outputFormat
+ , _options.quality
+ , _err
+ );
+ }
+
+ if (NULL != ref)
+ {
+ bimg::imageDecodeToRgba8(rgba
+ , output->m_data
+ , mip.m_width
+ , mip.m_height
+ , mip.m_width*mip.m_bpp/8
+ , outputFormat
+ );
+
+ float result = bimg::imageQualityRgba8(
+ ref
+ , rgba
+ , uint16_t(mip.m_width)
+ , uint16_t(mip.m_height)
+ );
+
+ printf("%f\n", result);
+
+ BX_FREE(_allocator, ref);
+ }
+ }
+
+ BX_FREE(_allocator, temp);
+ }
+ }
+
+ bimg::imageFree(input);
+ }
+
+ if (!_err->isOk()
+ && NULL != output)
+ {
+ bimg::imageFree(output);
+ output = NULL;
+ }
+
+ return output;
+}
+
+void help(const char* _error = NULL, bool _showHelp = true)
+{
+ if (NULL != _error)
+ {
+ fprintf(stderr, "Error:\n%s\n\n", _error);
+
+ if (!_showHelp)
+ {
+ return;
+ }
+ }
+
+ fprintf(stderr
+ , "texturec, bgfx texture compiler tool, version %d.%d.%d.\n"
+ "Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n"
+ "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n\n"
+ , BIMG_TEXTUREC_VERSION_MAJOR
+ , BIMG_TEXTUREC_VERSION_MINOR
+ , BIMG_API_VERSION
+ );
+
+ fprintf(stderr
+ , "Usage: texturec -f <in> -o <out> [-t <texture format>]\n"
+
+ "\n"
+ "Supported file formats:\n"
+ " *.bmp (input) Windows Bitmap.\n"
+ " *.dds (input, output) Direct Draw Surface.\n"
+ " *.exr (input) OpenEXR.\n"
+ " *.gif (input) Graphics Interchange Format.\n"
+ " *.jpg (input) JPEG Interchange Format.\n"
+ " *.hdr (input) Radiance RGBE.\n"
+ " *.ktx (input, output) Khronos Texture.\n"
+ " *.png (input) Portable Network Graphics.\n"
+ " *.psd (input) Photoshop Document.\n"
+ " *.pvr (input) PowerVR.\n"
+ " *.tga (input) Targa.\n"
+
+ "\n"
+ "Options:\n"
+ " -h, --help Help.\n"
+ " -v, --version Version information only.\n"
+ " -f <file path> Input file path.\n"
+ " -o <file path> Output file path.\n"
+ " -t <format> Output format type (BC1/2/3/4/5, ETC1, PVR14, etc.).\n"
+ " -q <quality> Encoding quality (default, fastest, highest).\n"
+ " -m, --mips Generate mip-maps.\n"
+ " -n, --normalmap Input texture is normal map.\n"
+ " --sdf <edge> Compute SDF texture.\n"
+ " --ref <alpha> Alpha reference value.\n"
+ " --iqa Image Quality Assessment\n"
+ " --max <max size> Maximum width/height (image will be scaled down and\n"
+ " aspect ratio will be preserved.\n"
+ " --as <extension> Save as.\n"
+ " --validate *DEBUG* Validate that output image produced matches after loading.\n"
+
+ "\n"
+ "For additional information, see https://github.com/bkaradzic/bgfx\n"
+ );
+}
+
+void help(const char* _str, const bx::Error& _err)
+{
+ std::string str;
+ if (_str != NULL)
+ {
+ str.append(_str);
+ str.append(" ");
+ }
+
+ const bx::StringView& sv = _err.getMessage();
+ str.append(sv.getPtr(), sv.getTerm() - sv.getPtr() );
+
+ help(str.c_str(), false);
+}
+
+int main(int _argc, const char* _argv[])
+{
+ bx::CommandLine cmdLine(_argc, _argv);
+
+ if (cmdLine.hasArg('v', "version") )
+ {
+ fprintf(stderr
+ , "texturec, bgfx texture compiler tool, version %d.%d.%d.\n"
+ , BIMG_TEXTUREC_VERSION_MAJOR
+ , BIMG_TEXTUREC_VERSION_MINOR
+ , BIMG_API_VERSION
+ );
+ return bx::kExitSuccess;
+ }
+
+ if (cmdLine.hasArg('h', "help") )
+ {
+ help();
+ return bx::kExitFailure;
+ }
+
+ const char* inputFileName = cmdLine.findOption('f');
+ if (NULL == inputFileName)
+ {
+ help("Input file must be specified.");
+ return bx::kExitFailure;
+ }
+
+ const char* outputFileName = cmdLine.findOption('o');
+ if (NULL == outputFileName)
+ {
+ help("Output file must be specified.");
+ return bx::kExitFailure;
+ }
+
+ const char* saveAs = cmdLine.findOption("as");
+ saveAs = NULL == saveAs ? bx::strFindI(outputFileName, ".ktx") : saveAs;
+ saveAs = NULL == saveAs ? bx::strFindI(outputFileName, ".dds") : saveAs;
+ if (NULL == saveAs)
+ {
+ help("Output file format must be specified.");
+ return bx::kExitFailure;
+ }
+
+ Options options;
+
+ const char* edgeOpt = cmdLine.findOption("sdf");
+ if (NULL != edgeOpt)
+ {
+ options.sdf = true;
+ if (!bx::fromString(&options.edge, edgeOpt) )
+ {
+ options.edge = 255.0f;
+ }
+ }
+ else
+ {
+ const char* alphaRef = cmdLine.findOption("ref");
+ if (NULL != alphaRef)
+ {
+ options.alphaTest = true;
+ if (!bx::fromString(&options.edge, alphaRef))
+ {
+ options.edge = 0.5f;
+ }
+ }
+ }
+
+ options.mips = cmdLine.hasArg('m', "mips");
+ options.normalMap = cmdLine.hasArg('n', "normalmap");
+ options.iqa = cmdLine.hasArg('\0', "iqa");
+
+ const char* maxSize = cmdLine.findOption("max");
+ if (NULL != maxSize)
+ {
+ options.maxSize = atoi(maxSize);
+ }
+
+ options.format = bimg::TextureFormat::Count;
+ const char* type = cmdLine.findOption('t');
+ if (NULL != type)
+ {
+ options.format = bimg::getFormat(type);
+
+ if (!bimg::isValid(options.format) )
+ {
+ help("Invalid format specified.");
+ return bx::kExitFailure;
+ }
+ }
+
+ const char* quality = cmdLine.findOption('q');
+ if (NULL != quality)
+ {
+ switch (bx::toLower(quality[0]) )
+ {
+ case 'h': options.quality = bimg::Quality::Highest; break;
+ case 'f': options.quality = bimg::Quality::Fastest; break;
+ case 'd': options.quality = bimg::Quality::Default; break;
+ default:
+ help("Invalid quality specified.");
+ return bx::kExitFailure;
+ }
+ }
+
+ const bool validate = cmdLine.hasArg("validate");
+
+ bx::Error err;
+ bx::FileReader reader;
+ if (!bx::open(&reader, inputFileName, &err) )
+ {
+ help("Failed to open input file.", err);
+ return bx::kExitFailure;
+ }
+
+ uint32_t inputSize = (uint32_t)bx::getSize(&reader);
+ if (0 == inputSize)
+ {
+ help("Failed to read input file.", err);
+ return bx::kExitFailure;
+ }
+
+ bx::DefaultAllocator allocator;
+ uint8_t* inputData = (uint8_t*)BX_ALLOC(&allocator, inputSize);
+
+ bx::read(&reader, inputData, inputSize, &err);
+ bx::close(&reader);
+
+ if (!err.isOk() )
+ {
+ help("Failed to read input file.", err);
+ return bx::kExitFailure;
+ }
+
+ bimg::ImageContainer* output = convert(&allocator, inputData, inputSize, options, &err);
+
+ BX_FREE(&allocator, inputData);
+
+ if (NULL != output)
+ {
+ bx::FileWriter writer;
+ if (bx::open(&writer, outputFileName, false, &err) )
+ {
+ if (NULL != bx::strFindI(saveAs, "ktx") )
+ {
+ bimg::imageWriteKtx(&writer, *output, output->m_data, output->m_size, &err);
+ }
+ else if (NULL != bx::strFindI(saveAs, "dds") )
+ {
+ bimg::imageWriteDds(&writer, *output, output->m_data, output->m_size, &err);
+ }
+
+ bx::close(&writer);
+
+ if (!err.isOk() )
+ {
+ help(NULL, err);
+ return bx::kExitFailure;
+ }
+ }
+ else
+ {
+ help("Failed to open output file.", err);
+ return bx::kExitFailure;
+ }
+
+ if (validate)
+ {
+ if (!bx::open(&reader, outputFileName, &err) )
+ {
+ help("Failed to validate file.", err);
+ return bx::kExitFailure;
+ }
+
+ inputSize = (uint32_t)bx::getSize(&reader);
+ if (0 == inputSize)
+ {
+ help("Failed to validate file.", err);
+ return bx::kExitFailure;
+ }
+
+ inputData = (uint8_t*)BX_ALLOC(&allocator, inputSize);
+ bx::read(&reader, inputData, inputSize, &err);
+ bx::close(&reader);
+
+ bimg::ImageContainer* input = bimg::imageParse(&allocator, inputData, inputSize, bimg::TextureFormat::Count, &err);
+ if (!err.isOk() )
+ {
+ help("Failed to validate file.", err);
+ return bx::kExitFailure;
+ }
+
+ if (false
+ || input->m_format != output->m_format
+ || input->m_size != output->m_size
+ || input->m_width != output->m_width
+ || input->m_height != output->m_height
+ || input->m_depth != output->m_depth
+ || input->m_numLayers != output->m_numLayers
+ || input->m_numMips != output->m_numMips
+ || input->m_hasAlpha != output->m_hasAlpha
+ || input->m_cubeMap != output->m_cubeMap
+ )
+ {
+ help("Validation failed, image headers are different.");
+ return bx::kExitFailure;
+ }
+
+ {
+ const uint8_t numMips = output->m_numMips;
+ const uint16_t numSides = output->m_numLayers * (output->m_cubeMap ? 6 : 1);
+
+ for (uint8_t lod = 0; lod < numMips; ++lod)
+ {
+ for (uint16_t side = 0; side < numSides; ++side)
+ {
+ bimg::ImageMip srcMip;
+ bool hasSrc = bimg::imageGetRawData(*input, side, lod, input->m_data, input->m_size, srcMip);
+
+ bimg::ImageMip dstMip;
+ bool hasDst = bimg::imageGetRawData(*output, side, lod, output->m_data, output->m_size, dstMip);
+
+ if (false
+ || hasSrc != hasDst
+ || srcMip.m_size != dstMip.m_size
+ )
+ {
+ help("Validation failed, image mip/layer/side are different.");
+ return bx::kExitFailure;
+ }
+
+ if (0 != bx::memCmp(srcMip.m_data, dstMip.m_data, srcMip.m_size) )
+ {
+ help("Validation failed, image content are different.");
+ return bx::kExitFailure;
+ }
+ }
+ }
+ }
+
+ BX_FREE(&allocator, inputData);
+ }
+
+ bimg::imageFree(output);
+ }
+ else
+ {
+ help(NULL, err);
+ return bx::kExitFailure;
+ }
+
+ return bx::kExitSuccess;
+}
diff --git a/3rdparty/bx/.appveyor.yml b/3rdparty/bx/.appveyor.yml
index db402c41b97..96ec072ce84 100644
--- a/3rdparty/bx/.appveyor.yml
+++ b/3rdparty/bx/.appveyor.yml
@@ -1,13 +1,12 @@
shallow_clone: true
os:
- - Visual Studio 2015
+ - Visual Studio 2017
environment:
matrix:
- - TOOLSET: vs2012
- - TOOLSET: vs2013
- TOOLSET: vs2015
+ - TOOLSET: vs2017
configuration:
- Debug
diff --git a/3rdparty/bx/3rdparty/.editorconfig b/3rdparty/bx/3rdparty/.editorconfig
new file mode 100644
index 00000000000..b41989621d5
--- /dev/null
+++ b/3rdparty/bx/3rdparty/.editorconfig
@@ -0,0 +1,6 @@
+root = true
+
+[ini/*]
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
diff --git a/3rdparty/bx/3rdparty/ini/README.md b/3rdparty/bx/3rdparty/ini/README.md
new file mode 100644
index 00000000000..bc4d7c72905
--- /dev/null
+++ b/3rdparty/bx/3rdparty/ini/README.md
@@ -0,0 +1 @@
+https://github.com/mattiasgustavsson/libs/
diff --git a/3rdparty/bx/3rdparty/ini/ini.h b/3rdparty/bx/3rdparty/ini/ini.h
new file mode 100644
index 00000000000..394c19645a7
--- /dev/null
+++ b/3rdparty/bx/3rdparty/ini/ini.h
@@ -0,0 +1,1054 @@
+/*
+------------------------------------------------------------------------------
+ Licensing information can be found at the end of the file.
+------------------------------------------------------------------------------
+
+ini.h - v1.1 - Simple ini-file reader for C/C++.
+
+Do this:
+ #define INI_IMPLEMENTATION
+before you include this file in *one* C/C++ file to create the implementation.
+*/
+
+#ifndef ini_h
+#define ini_h
+
+#define INI_GLOBAL_SECTION ( 0 )
+#define INI_NOT_FOUND ( -1 )
+
+typedef struct ini_t ini_t;
+
+ini_t* ini_create( void* memctx );
+ini_t* ini_load( char const* data, void* memctx );
+
+int ini_save( ini_t const* ini, char* data, int size );
+void ini_destroy( ini_t* ini );
+
+int ini_section_count( ini_t const* ini );
+char const* ini_section_name( ini_t const* ini, int section );
+
+int ini_property_count( ini_t const* ini, int section );
+char const* ini_property_name( ini_t const* ini, int section, int property );
+char const* ini_property_value( ini_t const* ini, int section, int property );
+
+int ini_find_section( ini_t const* ini, char const* name, int name_length );
+int ini_find_property( ini_t const* ini, int section, char const* name, int name_length );
+
+int ini_section_add( ini_t* ini, char const* name, int length );
+void ini_property_add( ini_t* ini, int section, char const* name, int name_length, char const* value, int value_length );
+void ini_section_remove( ini_t* ini, int section );
+void ini_property_remove( ini_t* ini, int section, int property );
+
+void ini_section_name_set( ini_t* ini, int section, char const* name, int length );
+void ini_property_name_set( ini_t* ini, int section, int property, char const* name, int length );
+void ini_property_value_set( ini_t* ini, int section, int property, char const* value, int length );
+
+#endif /* ini_h */
+
+
+/**
+
+Examples
+========
+
+Loading an ini file and retrieving values
+-----------------------------------------
+
+ #define INI_IMPLEMENTATION
+ #include "ini.h"
+
+ #include <stdio.h>
+ #include <stdlib.h>
+
+ int main()
+ {
+ FILE* fp = fopen( "test.ini", "r" );
+ fseek( fp, 0, SEEK_END );
+ int size = ftell( fp );
+ fseek( fp, 0, SEEK_SET );
+ char* data = (char*) malloc( size + 1 );
+ fread( data, 1, size, fp );
+ data[ size ] = '\0';
+ fclose( fp );
+
+ ini_t* ini = ini_load( data );
+ free( data );
+ int second_index = ini_find_property( ini, INI_GLOBAL_SECTION, "SecondSetting" );
+ char const* second = ini_property_value( ini, INI_GLOBAL_SECTION, second_index );
+ printf( "%s=%s\n", "SecondSetting", second );
+ int section = ini_find_section( ini, "MySection" );
+ int third_index = ini_find_property( ini, section, "ThirdSetting" );
+ char const* third = ini_property_value( ini, section, third_index );
+ printf( "%s=%s\n", "ThirdSetting", third );
+ ini_destroy( ini );
+
+ return 0;
+ }
+
+
+Creating a new ini file
+-----------------------
+
+ #define INI_IMPLEMENTATION
+ #include "ini.h"
+
+ #include <stdio.h>
+ #include <stdlib.h>
+
+ int main()
+ {
+ ini_t* ini = ini_create();
+ ini_property_add( ini, INI_GLOBAL_SECTION, "FirstSetting", "Test" );
+ ini_property_add( ini, INI_GLOBAL_SECTION, "SecondSetting", "2" );
+ int section = ini_section_add( ini, "MySection" );
+ ini_property_add( ini, section, "ThirdSetting", "Three" );
+
+ int size = ini_save( ini, NULL, 0 ); // Find the size needed
+ char* data = (char*) malloc( size );
+ size = ini_save( ini, data, size ); // Actually save the file
+ ini_destroy( ini );
+
+ FILE* fp = fopen( "test.ini", "w" );
+ fwrite( data, 1, size, fp );
+ fclose( fp );
+ free( data );
+
+ return 0;
+ }
+
+
+
+API Documentation
+=================
+
+ini.h is a small library for reading classic .ini files. It is a single-header library, and does not need any .lib files
+or other binaries, or any build scripts. To use it, you just include ini.h to get the API declarations. To get the
+definitions, you must include ini.h from *one* single C or C++ file, and #define the symbol `INI_IMPLEMENTATION` before
+you do.
+
+
+Customization
+-------------
+There are a few different things in ini.h which are configurable by #defines. The customizations only affect the
+implementation, so will only need to be defined in the file where you have the #define INI_IMPLEMENTATION.
+
+Note that if all customizations are utilized, ini.h will include no external files whatsoever, which might be useful
+if you need full control over what code is being built.
+
+
+### Custom memory allocators
+
+To store the internal data structures, ini.h needs to do dynamic allocation by calling `malloc`. Programs might want to
+keep track of allocations done, or use custom defined pools to allocate memory from. ini.h allows for specifying custom
+memory allocation functions for `malloc` and `free`.
+This is done with the following code:
+
+ #define INI_IMPLEMENTATION
+ #define INI_MALLOC( ctx, size ) ( my_custom_malloc( ctx, size ) )
+ #define INI_FREE( ctx, ptr ) ( my_custom_free( ctx, ptr ) )
+ #include "ini.h"
+
+where `my_custom_malloc` and `my_custom_free` are your own memory allocation/deallocation functions. The `ctx` parameter
+is an optional parameter of type `void*`. When `ini_create` or `ini_load` is called, you can pass in a `memctx`
+parameter, which can be a pointer to anything you like, and which will be passed through as the `ctx` parameter to every
+`INI_MALLOC`/`INI_FREE` call. For example, if you are doing memory tracking, you can pass a pointer to your tracking
+data as `memctx`, and in your custom allocation/deallocation function, you can cast the `ctx` param back to the
+right type, and access the tracking data.
+
+If no custom allocator is defined, ini.h will default to `malloc` and `free` from the C runtime library.
+
+
+### Custom C runtime function
+
+The library makes use of three additional functions from the C runtime library, and for full flexibility, it allows you
+to substitute them for your own. Here's an example:
+
+ #define INI_IMPLEMENTATION
+ #define INI_MEMCPY( dst, src, cnt ) ( my_memcpy_func( dst, src, cnt ) )
+ #define INI_STRLEN( s ) ( my_strlen_func( s ) )
+ #define INI_STRNICMP( s1, s2, cnt ) ( my_strnicmp_func( s1, s2, cnt ) )
+ #include "ini.h"
+
+If no custom function is defined, ini.h will default to the C runtime library equivalent.
+
+
+ini_create
+----------
+
+ ini_t* ini_create( void* memctx )
+
+Instantiates a new, empty ini structure, which can be manipulated with other API calls, to fill it with data. To save it
+out to an ini-file string, use `ini_save`. When no longer needed, it can be destroyed by calling `ini_destroy`.
+`memctx` is a pointer to user defined data which will be passed through to the custom INI_MALLOC/INI_FREE calls. It can
+be NULL if no user defined data is needed.
+
+
+ini_load
+--------
+
+ ini_t* ini_load( char const* data, void* memctx )
+
+Parse the zero-terminated string `data` containing an ini-file, and create a new ini_t instance containing the data.
+The instance can be manipulated with other API calls to enumerate sections/properties and retrieve values. When no
+longer needed, it can be destroyed by calling `ini_destroy`. `memctx` is a pointer to user defined data which will be
+passed through to the custom INI_MALLOC/INI_FREE calls. It can be NULL if no user defined data is needed.
+
+
+ini_save
+--------
+
+ int ini_save( ini_t const* ini, char* data, int size )
+
+Saves an ini structure as a zero-terminated ini-file string, into the specified buffer. Returns the number of bytes
+written, including the zero terminator. If `data` is NULL, nothing is written, but `ini_save` still returns the number
+of bytes it would have written. If the size of `data`, as specified in the `size` parameter, is smaller than that
+required, only part of the ini-file string will be written. `ini_save` still returns the number of bytes it would have
+written had the buffer been large enough.
+
+
+ini_destroy
+-----------
+
+ void ini_destroy( ini_t* ini )
+
+Destroy an `ini_t` instance created by calling `ini_load` or `ini_create`, releasing the memory allocated by it. No
+further API calls are valid on an `ini_t` instance after calling `ini_destroy` on it.
+
+
+ini_section_count
+-----------------
+
+ int ini_section_count( ini_t const* ini )
+
+Returns the number of sections in an ini file. There's at least one section in an ini file (the global section), but
+there can be many more, each specified in the file by the section name wrapped in square brackets [ ].
+
+
+ini_section_name
+----------------
+
+ char const* ini_section_name( ini_t const* ini, int section )
+
+Returns the name of the section with the specified index. `section` must be non-negative and less than the value
+returned by `ini_section_count`, or `ini_section_name` will return NULL. The defined constant `INI_GLOBAL_SECTION` can
+be used to indicate the global section.
+
+
+ini_property_count
+------------------
+
+ int ini_property_count( ini_t const* ini, int section )
+
+Returns the number of properties belonging to the section with the specified index. `section` must be non-negative and
+less than the value returned by `ini_section_count`, or `ini_section_name` will return 0. The defined constant
+`INI_GLOBAL_SECTION` can be used to indicate the global section. Properties are declared in the ini-file on he format
+`name=value`.
+
+
+ini_property_name
+-----------------
+
+ char const* ini_property_name( ini_t const* ini, int section, int property )
+
+Returns the name of the property with the specified index `property` in the section with the specified index `section`.
+`section` must be non-negative and less than the value returned by `ini_section_count`, and `property` must be
+non-negative and less than the value returned by `ini_property_count`, or `ini_property_name` will return NULL. The
+defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+
+
+ini_property_value
+------------------
+
+ char const* ini_property_value( ini_t const* ini, int section, int property )
+
+Returns the value of the property with the specified index `property` in the section with the specified index `section`.
+`section` must be non-negative and less than the value returned by `ini_section_count`, and `property` must be
+non-negative and less than the value returned by `ini_property_count`, or `ini_property_value` will return NULL. The
+defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+
+
+ini_find_section
+----------------
+
+ int ini_find_section( ini_t const* ini, char const* name, int name_length )
+
+Finds the section with the specified name, and returns its index. `name_length` specifies the number of characters in
+`name`, which does not have to be zero-terminated. If `name_length` is zero, the length is determined automatically, but
+in this case `name` has to be zero-terminated. If no section with the specified name could be found, the value
+`INI_NOT_FOUND` is returned.
+
+
+ini_find_property
+-----------------
+
+ int ini_find_property( ini_t const* ini, int section, char const* name, int name_length )
+
+Finds the property with the specified name, within the section with the specified index, and returns the index of the
+property. `name_length` specifies the number of characters in `name`, which does not have to be zero-terminated. If
+`name_length` is zero, the length is determined automatically, but in this case `name` has to be zero-terminated. If no
+property with the specified name could be found within the specified section, the value `INI_NOT_FOUND` is returned.
+`section` must be non-negative and less than the value returned by `ini_section_count`, or `ini_find_property` will
+return `INI_NOT_FOUND`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+
+
+ini_section_add
+---------------
+
+ int ini_section_add( ini_t* ini, char const* name, int length )
+
+Adds a section with the specified name, and returns the index it was added at. There is no check done to see if a
+section with the specified name already exists - multiple sections of the same name are allowed. `length` specifies the
+number of characters in `name`, which does not have to be zero-terminated. If `length` is zero, the length is determined
+automatically, but in this case `name` has to be zero-terminated.
+
+
+ini_property_add
+----------------
+
+ void ini_property_add( ini_t* ini, int section, char const* name, int name_length, char const* value, int value_length )
+
+Adds a property with the specified name and value to the specified section, and returns the index it was added at. There
+is no check done to see if a property with the specified name already exists - multiple properties of the same name are
+allowed. `name_length` and `value_length` specifies the number of characters in `name` and `value`, which does not have
+to be zero-terminated. If `name_length` or `value_length` is zero, the length is determined automatically, but in this
+case `name`/`value` has to be zero-terminated. `section` must be non-negative and less than the value returned by
+`ini_section_count`, or the property will not be added. The defined constant `INI_GLOBAL_SECTION` can be used to
+indicate the global section.
+
+
+ini_section_remove
+------------------
+
+ void ini_section_remove( ini_t* ini, int section )
+
+Removes the section with the specified index, and all properties within it. `section` must be non-negative and less than
+the value returned by `ini_section_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global
+section. Note that removing a section will shuffle section indices, so that section indices you may have stored will no
+longer indicate the same section as it did before the remove. Use the find functions to update your indices.
+
+
+ini_property_remove
+-------------------
+
+ void ini_property_remove( ini_t* ini, int section, int property )
+
+Removes the property with the specified index from the specified section. `section` must be non-negative and less than
+the value returned by `ini_section_count`, and `property` must be non-negative and less than the value returned by
+`ini_property_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section. Note that
+removing a property will shuffle property indices within the specified section, so that property indices you may have
+stored will no longer indicate the same property as it did before the remove. Use the find functions to update your
+indices.
+
+
+ini_section_name_set
+--------------------
+
+ void ini_section_name_set( ini_t* ini, int section, char const* name, int length )
+
+Change the name of the section with the specified index. `section` must be non-negative and less than the value returned
+by `ini_section_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section. `length`
+specifies the number of characters in `name`, which does not have to be zero-terminated. If `length` is zero, the length
+is determined automatically, but in this case `name` has to be zero-terminated.
+
+
+ini_property_name_set
+---------------------
+
+ void ini_property_name_set( ini_t* ini, int section, int property, char const* name, int length )
+
+Change the name of the property with the specified index in the specified section. `section` must be non-negative and
+less than the value returned by `ini_section_count`, and `property` must be non-negative and less than the value
+returned by `ini_property_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+`length` specifies the number of characters in `name`, which does not have to be zero-terminated. If `length` is zero,
+the length is determined automatically, but in this case `name` has to be zero-terminated.
+
+
+ini_property_value_set
+----------------------
+
+ void ini_property_value_set( ini_t* ini, int section, int property, char const* value, int length )
+
+Change the value of the property with the specified index in the specified section. `section` must be non-negative and
+less than the value returned by `ini_section_count`, and `property` must be non-negative and less than the value
+returned by `ini_property_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+`length` specifies the number of characters in `value`, which does not have to be zero-terminated. If `length` is zero,
+the length is determined automatically, but in this case `value` has to be zero-terminated.
+
+**/
+
+
+/*
+----------------------
+ IMPLEMENTATION
+----------------------
+*/
+
+#ifdef INI_IMPLEMENTATION
+#undef INI_IMPLEMENTATION
+
+#define INITIAL_CAPACITY ( 256 )
+
+#ifndef _CRT_NONSTDC_NO_DEPRECATE
+ #define _CRT_NONSTDC_NO_DEPRECATE
+#endif
+
+#ifndef _CRT_SECURE_NO_WARNINGS
+ #define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include <stddef.h>
+
+#ifndef INI_MALLOC
+ #include <stdlib.h>
+ #define INI_MALLOC( ctx, size ) ( malloc( size ) )
+ #define INI_FREE( ctx, ptr ) ( free( ptr ) )
+#endif
+
+#ifndef INI_MEMCPY
+ #include <string.h>
+ #define INI_MEMCPY( dst, src, cnt ) ( memcpy( dst, src, cnt ) )
+#endif
+
+#ifndef INI_STRLEN
+ #include <string.h>
+ #define INI_STRLEN( s ) ( strlen( s ) )
+#endif
+
+#ifndef INI_STRNICMP
+ #ifdef _WIN32
+ #include <string.h>
+ #define INI_STRNICMP( s1, s2, cnt ) ( strnicmp( s1, s2, cnt ) )
+ #else
+ #include <string.h>
+ #define INI_STRNICMP( s1, s2, cnt ) ( strncasecmp( s1, s2, cnt ) )
+ #endif
+#endif
+
+
+struct ini_internal_section_t
+ {
+ char name[ 32 ];
+ char* name_large;
+ };
+
+
+struct ini_internal_property_t
+ {
+ int section;
+ char name[ 32 ];
+ char* name_large;
+ char value[ 64 ];
+ char* value_large;
+ };
+
+
+struct ini_t
+ {
+ struct ini_internal_section_t* sections;
+ int section_capacity;
+ int section_count;
+
+ struct ini_internal_property_t* properties;
+ int property_capacity;
+ int property_count;
+
+ void* memctx;
+ };
+
+
+static int ini_internal_property_index( ini_t const* ini, int section, int property )
+ {
+ int i;
+ int p;
+
+ if( ini && section >= 0 && section < ini->section_count )
+ {
+ p = 0;
+ for( i = 0; i < ini->property_count; ++i )
+ {
+ if( ini->properties[ i ].section == section )
+ {
+ if( p == property ) return i;
+ ++p;
+ }
+ }
+ }
+
+ return INI_NOT_FOUND;
+ }
+
+
+ini_t* ini_create( void* memctx )
+ {
+ ini_t* ini;
+
+ ini = (ini_t*) INI_MALLOC( memctx, sizeof( ini_t ) );
+ ini->memctx = memctx;
+ ini->sections = (struct ini_internal_section_t*) INI_MALLOC( ini->memctx, INITIAL_CAPACITY * sizeof( ini->sections[ 0 ] ) );
+ ini->section_capacity = INITIAL_CAPACITY;
+ ini->section_count = 1; /* global section */
+ ini->sections[ 0 ].name[ 0 ] = '\0';
+ ini->sections[ 0 ].name_large = 0;
+ ini->properties = (struct ini_internal_property_t*) INI_MALLOC( ini->memctx, INITIAL_CAPACITY * sizeof( ini->properties[ 0 ] ) );
+ ini->property_capacity = INITIAL_CAPACITY;
+ ini->property_count = 0;
+ return ini;
+ }
+
+
+ini_t* ini_load( char const* data, void* memctx )
+ {
+ ini_t* ini;
+ char const* ptr;
+ int s;
+ char const* start;
+ char const* start2;
+ int l;
+
+ ini = ini_create( memctx );
+
+ ptr = data;
+ if( ptr )
+ {
+ s = 0;
+ while( *ptr )
+ {
+ /* trim leading whitespace */
+ while( *ptr && *ptr <=' ' )
+ ++ptr;
+
+ /* done? */
+ if( !*ptr ) break;
+
+ /* comment */
+ else if( *ptr == ';' )
+ {
+ while( *ptr && *ptr !='\n' )
+ ++ptr;
+ }
+ /* section */
+ else if( *ptr == '[' )
+ {
+ ++ptr;
+ start = ptr;
+ while( *ptr && *ptr !=']' && *ptr != '\n' )
+ ++ptr;
+
+ if( *ptr == ']' )
+ {
+ s = ini_section_add( ini, start, (int)( ptr - start) );
+ ++ptr;
+ }
+ }
+ /* property */
+ else
+ {
+ start = ptr;
+ while( *ptr && *ptr !='=' && *ptr != '\n' )
+ ++ptr;
+
+ if( *ptr == '=' )
+ {
+ l = (int)( ptr - start);
+ ++ptr;
+ while( *ptr && *ptr <= ' ' && *ptr != '\n' )
+ ptr++;
+ start2 = ptr;
+ while( *ptr && *ptr != '\n' )
+ ++ptr;
+ while( *(--ptr) <= ' ' )
+ (void)ptr;
+ ptr++;
+ ini_property_add( ini, s, start, l, start2, (int)( ptr - start2) );
+ }
+ }
+ }
+ }
+
+ return ini;
+ }
+
+
+int ini_save( ini_t const* ini, char* data, int size )
+ {
+ int s;
+ int p;
+ int i;
+ int l;
+ char* n;
+ int pos;
+
+ if( ini )
+ {
+ pos = 0;
+ for( s = 0; s < ini->section_count; ++s )
+ {
+ n = ini->sections[ s ].name_large ? ini->sections[ s ].name_large : ini->sections[ s ].name;
+ l = (int) INI_STRLEN( n );
+ if( l > 0 )
+ {
+ if( data && pos < size ) data[ pos ] = '[';
+ ++pos;
+ for( i = 0; i < l; ++i )
+ {
+ if( data && pos < size ) data[ pos ] = n[ i ];
+ ++pos;
+ }
+ if( data && pos < size ) data[ pos ] = ']';
+ ++pos;
+ if( data && pos < size ) data[ pos ] = '\n';
+ ++pos;
+ }
+
+ for( p = 0; p < ini->property_count; ++p )
+ {
+ if( ini->properties[ p ].section == s )
+ {
+ n = ini->properties[ p ].name_large ? ini->properties[ p ].name_large : ini->properties[ p ].name;
+ l = (int) INI_STRLEN( n );
+ for( i = 0; i < l; ++i )
+ {
+ if( data && pos < size ) data[ pos ] = n[ i ];
+ ++pos;
+ }
+ if( data && pos < size ) data[ pos ] = '=';
+ ++pos;
+ n = ini->properties[ p ].value_large ? ini->properties[ p ].value_large : ini->properties[ p ].value;
+ l = (int) INI_STRLEN( n );
+ for( i = 0; i < l; ++i )
+ {
+ if( data && pos < size ) data[ pos ] = n[ i ];
+ ++pos;
+ }
+ if( data && pos < size ) data[ pos ] = '\n';
+ ++pos;
+ }
+ }
+
+ if( pos > 0 )
+ {
+ if( data && pos < size ) data[ pos ] = '\n';
+ ++pos;
+ }
+ }
+
+ if( data && pos < size ) data[ pos ] = '\0';
+ ++pos;
+
+ return pos;
+ }
+
+ return 0;
+ }
+
+
+void ini_destroy( ini_t* ini )
+ {
+ int i;
+
+ if( ini )
+ {
+ for( i = 0; i < ini->property_count; ++i )
+ {
+ if( ini->properties[ i ].value_large ) INI_FREE( ini->memctx, ini->properties[ i ].value_large );
+ if( ini->properties[ i ].name_large ) INI_FREE( ini->memctx, ini->properties[ i ].name_large );
+ }
+ for( i = 0; i < ini->section_count; ++i )
+ if( ini->sections[ i ].name_large ) INI_FREE( ini->memctx, ini->sections[ i ].name_large );
+ INI_FREE( ini->memctx, ini->properties );
+ INI_FREE( ini->memctx, ini->sections );
+ INI_FREE( ini->memctx, ini );
+ }
+ }
+
+
+int ini_section_count( ini_t const* ini )
+ {
+ if( ini ) return ini->section_count;
+ return 0;
+ }
+
+
+char const* ini_section_name( ini_t const* ini, int section )
+ {
+ if( ini && section >= 0 && section < ini->section_count )
+ return ini->sections[ section ].name_large ? ini->sections[ section ].name_large : ini->sections[ section ].name;
+
+ return NULL;
+ }
+
+
+int ini_property_count( ini_t const* ini, int section )
+ {
+ int i;
+ int count;
+
+ if( ini )
+ {
+ count = 0;
+ for( i = 0; i < ini->property_count; ++i )
+ {
+ if( ini->properties[ i ].section == section ) ++count;
+ }
+ return count;
+ }
+
+ return 0;
+ }
+
+
+char const* ini_property_name( ini_t const* ini, int section, int property )
+ {
+ int p;
+
+ if( ini && section >= 0 && section < ini->section_count )
+ {
+ p = ini_internal_property_index( ini, section, property );
+ if( p != INI_NOT_FOUND )
+ return ini->properties[ p ].name_large ? ini->properties[ p ].name_large : ini->properties[ p ].name;
+ }
+
+ return NULL;
+ }
+
+
+char const* ini_property_value( ini_t const* ini, int section, int property )
+ {
+ int p;
+
+ if( ini && section >= 0 && section < ini->section_count )
+ {
+ p = ini_internal_property_index( ini, section, property );
+ if( p != INI_NOT_FOUND )
+ return ini->properties[ p ].value_large ? ini->properties[ p ].value_large : ini->properties[ p ].value;
+ }
+
+ return NULL;
+ }
+
+
+int ini_find_section( ini_t const* ini, char const* name, int name_length )
+ {
+ int i;
+
+ if( ini && name )
+ {
+ if( name_length <= 0 ) name_length = (int) INI_STRLEN( name );
+ for( i = 0; i < ini->section_count; ++i )
+ {
+ char const* const other =
+ ini->sections[ i ].name_large ? ini->sections[ i ].name_large : ini->sections[ i ].name;
+ if( (int) INI_STRLEN( other ) == name_length && INI_STRNICMP( name, other, name_length ) == 0 )
+ return i;
+ }
+ }
+
+ return INI_NOT_FOUND;
+ }
+
+
+int ini_find_property( ini_t const* ini, int section, char const* name, int name_length )
+ {
+ int i;
+ int c;
+
+ if( ini && name && section >= 0 && section < ini->section_count)
+ {
+ if( name_length <= 0 ) name_length = (int) INI_STRLEN( name );
+ c = 0;
+ for( i = 0; i < ini->property_capacity; ++i )
+ {
+ if( ini->properties[ i ].section == section )
+ {
+ char const* const other =
+ ini->properties[ i ].name_large ? ini->properties[ i ].name_large : ini->properties[ i ].name;
+ if( (int) INI_STRLEN( other ) == name_length && INI_STRNICMP( name, other, name_length ) == 0 )
+ return c;
+ ++c;
+ }
+ }
+ }
+
+ return INI_NOT_FOUND;
+ }
+
+
+int ini_section_add( ini_t* ini, char const* name, int length )
+ {
+ struct ini_internal_section_t* new_sections;
+
+ if( ini && name )
+ {
+ if( length <= 0 ) length = (int) INI_STRLEN( name );
+ if( ini->section_count >= ini->section_capacity )
+ {
+ ini->section_capacity *= 2;
+ new_sections = (struct ini_internal_section_t*) INI_MALLOC( ini->memctx,
+ ini->section_capacity * sizeof( ini->sections[ 0 ] ) );
+ INI_MEMCPY( new_sections, ini->sections, ini->section_count * sizeof( ini->sections[ 0 ] ) );
+ INI_FREE( ini->memctx, ini->sections );
+ ini->sections = new_sections;
+ }
+
+ ini->sections[ ini->section_count ].name_large = 0;
+ if( length + 1 >= sizeof( ini->sections[ 0 ].name ) )
+ {
+ ini->sections[ ini->section_count ].name_large = (char*) INI_MALLOC( ini->memctx, (size_t) length + 1 );
+ INI_MEMCPY( ini->sections[ ini->section_count ].name_large, name, (size_t) length );
+ ini->sections[ ini->section_count ].name_large[ length ] = '\0';
+ }
+ else
+ {
+ INI_MEMCPY( ini->sections[ ini->section_count ].name, name, (size_t) length );
+ ini->sections[ ini->section_count ].name[ length ] = '\0';
+ }
+
+ return ini->section_count++;
+ }
+ return INI_NOT_FOUND;
+ }
+
+
+void ini_property_add( ini_t* ini, int section, char const* name, int name_length, char const* value, int value_length )
+ {
+ struct ini_internal_property_t* new_properties;
+
+ if( ini && name && section >= 0 && section < ini->section_count )
+ {
+ if( name_length <= 0 ) name_length = (int) INI_STRLEN( name );
+ if( value_length <= 0 ) value_length = (int) INI_STRLEN( value );
+
+ if( ini->property_count >= ini->property_capacity )
+ {
+
+ ini->property_capacity *= 2;
+ new_properties = (struct ini_internal_property_t*) INI_MALLOC( ini->memctx,
+ ini->property_capacity * sizeof( ini->properties[ 0 ] ) );
+ INI_MEMCPY( new_properties, ini->properties, ini->property_count * sizeof( ini->properties[ 0 ] ) );
+ INI_FREE( ini->memctx, ini->properties );
+ ini->properties = new_properties;
+ }
+
+ ini->properties[ ini->property_count ].section = section;
+ ini->properties[ ini->property_count ].name_large = 0;
+ ini->properties[ ini->property_count ].value_large = 0;
+
+ if( name_length + 1 >= sizeof( ini->properties[ 0 ].name ) )
+ {
+ ini->properties[ ini->property_count ].name_large = (char*) INI_MALLOC( ini->memctx, (size_t) name_length + 1 );
+ INI_MEMCPY( ini->properties[ ini->property_count ].name_large, name, (size_t) name_length );
+ ini->properties[ ini->property_count ].name_large[ name_length ] = '\0';
+ }
+ else
+ {
+ INI_MEMCPY( ini->properties[ ini->property_count ].name, name, (size_t) name_length );
+ ini->properties[ ini->property_count ].name[ name_length ] = '\0';
+ }
+
+ if( value_length + 1 >= sizeof( ini->properties[ 0 ].value ) )
+ {
+ ini->properties[ ini->property_count ].value_large = (char*) INI_MALLOC( ini->memctx, (size_t) value_length + 1 );
+ INI_MEMCPY( ini->properties[ ini->property_count ].value_large, value, (size_t) value_length );
+ ini->properties[ ini->property_count ].value_large[ value_length ] = '\0';
+ }
+ else
+ {
+ INI_MEMCPY( ini->properties[ ini->property_count ].value, value, (size_t) value_length );
+ ini->properties[ ini->property_count ].value[ value_length ] = '\0';
+ }
+
+ ++ini->property_count;
+ }
+ }
+
+
+void ini_section_remove( ini_t* ini, int section )
+ {
+ int p;
+
+ if( ini && section >= 0 && section < ini->section_count )
+ {
+ if( ini->sections[ section ].name_large ) INI_FREE( ini->memctx, ini->sections[ section ].name_large );
+ for( p = ini->property_count - 1; p >= 0; --p )
+ {
+ if( ini->properties[ p ].section == section )
+ {
+ if( ini->properties[ p ].value_large ) INI_FREE( ini->memctx, ini->properties[ p ].value_large );
+ if( ini->properties[ p ].name_large ) INI_FREE( ini->memctx, ini->properties[ p ].name_large );
+ ini->properties[ p ] = ini->properties[ --ini->property_count ];
+ }
+ }
+
+ ini->sections[ section ] = ini->sections[ --ini->section_count ];
+
+ for( p = 0; p < ini->property_count; ++p )
+ {
+ if( ini->properties[ p ].section == ini->section_count )
+ ini->properties[ p ].section = section;
+ }
+ }
+ }
+
+
+void ini_property_remove( ini_t* ini, int section, int property )
+ {
+ int p;
+
+ if( ini && section >= 0 && section < ini->section_count )
+ {
+ p = ini_internal_property_index( ini, section, property );
+ if( p != INI_NOT_FOUND )
+ {
+ if( ini->properties[ p ].value_large ) INI_FREE( ini->memctx, ini->properties[ p ].value_large );
+ if( ini->properties[ p ].name_large ) INI_FREE( ini->memctx, ini->properties[ p ].name_large );
+ ini->properties[ p ] = ini->properties[ --ini->property_count ];
+ return;
+ }
+ }
+ }
+
+
+void ini_section_name_set( ini_t* ini, int section, char const* name, int length )
+ {
+ if( ini && name && section >= 0 && section < ini->section_count )
+ {
+ if( length <= 0 ) length = (int) INI_STRLEN( name );
+ if( ini->sections[ section ].name_large ) INI_FREE( ini->memctx, ini->sections[ section ].name_large );
+ ini->sections[ section ].name_large = 0;
+
+ if( length + 1 >= sizeof( ini->sections[ 0 ].name ) )
+ {
+ ini->sections[ section ].name_large = (char*) INI_MALLOC( ini->memctx, (size_t) length + 1 );
+ INI_MEMCPY( ini->sections[ section ].name_large, name, (size_t) length );
+ ini->sections[ section ].name_large[ length ] = '\0';
+ }
+ else
+ {
+ INI_MEMCPY( ini->sections[ section ].name, name, (size_t) length );
+ ini->sections[ section ].name[ length ] = '\0';
+ }
+ }
+ }
+
+
+void ini_property_name_set( ini_t* ini, int section, int property, char const* name, int length )
+ {
+ int p;
+
+ if( ini && name && section >= 0 && section < ini->section_count )
+ {
+ if( length <= 0 ) length = (int) INI_STRLEN( name );
+ p = ini_internal_property_index( ini, section, property );
+ if( p != INI_NOT_FOUND )
+ {
+ if( ini->properties[ p ].name_large ) INI_FREE( ini->memctx, ini->properties[ p ].name_large );
+ ini->properties[ ini->property_count ].name_large = 0;
+
+ if( length + 1 >= sizeof( ini->properties[ 0 ].name ) )
+ {
+ ini->properties[ p ].name_large = (char*) INI_MALLOC( ini->memctx, (size_t) length + 1 );
+ INI_MEMCPY( ini->properties[ p ].name_large, name, (size_t) length );
+ ini->properties[ p ].name_large[ length ] = '\0';
+ }
+ else
+ {
+ INI_MEMCPY( ini->properties[ p ].name, name, (size_t) length );
+ ini->properties[ p ].name[ length ] = '\0';
+ }
+ }
+ }
+ }
+
+
+void ini_property_value_set( ini_t* ini, int section, int property, char const* value, int length )
+ {
+ int p;
+
+ if( ini && value && section >= 0 && section < ini->section_count )
+ {
+ if( length <= 0 ) length = (int) INI_STRLEN( value );
+ p = ini_internal_property_index( ini, section, property );
+ if( p != INI_NOT_FOUND )
+ {
+ if( ini->properties[ p ].value_large ) INI_FREE( ini->memctx, ini->properties[ p ].value_large );
+ ini->properties[ ini->property_count ].value_large = 0;
+
+ if( length + 1 >= sizeof( ini->properties[ 0 ].value ) )
+ {
+ ini->properties[ p ].value_large = (char*) INI_MALLOC( ini->memctx, (size_t) length + 1 );
+ INI_MEMCPY( ini->properties[ p ].name_large, value, (size_t) length );
+ ini->properties[ p ].value_large[ length ] = '\0';
+ }
+ else
+ {
+ INI_MEMCPY( ini->properties[ p ].value, value, (size_t) length );
+ ini->properties[ p ].name[ length ] = '\0';
+ }
+ }
+ }
+ }
+
+
+#endif /* INI_IMPLEMENTATION */
+
+/*
+revision history:
+ 1.1 customization, added documentation, cleanup
+ 1.0 first publicly released version
+*/
+
+/*
+------------------------------------------------------------------------------
+
+This software is available under 2 licenses - you may choose the one you like.
+
+------------------------------------------------------------------------------
+
+ALTERNATIVE A - MIT License
+
+Copyright (c) 2015 Mattias Gustavsson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+------------------------------------------------------------------------------
+
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
+software, either in source code form or as a compiled binary, for any purpose,
+commercial or non-commercial, and by any means.
+
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+------------------------------------------------------------------------------
+*/
diff --git a/3rdparty/bx/3rdparty/ini/ini.md b/3rdparty/bx/3rdparty/ini/ini.md
new file mode 100644
index 00000000000..0b204c025e3
--- /dev/null
+++ b/3rdparty/bx/3rdparty/ini/ini.md
@@ -0,0 +1,333 @@
+ini.h
+=====
+
+Library: [ini.h](../ini.h)
+
+
+Examples
+========
+
+Loading an ini file and retrieving values
+-----------------------------------------
+
+```cpp
+#define INI_IMPLEMENTATION
+#include "ini.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main()
+ {
+ FILE* fp = fopen( "test.ini", "r" );
+ fseek( fp, 0, SEEK_END );
+ int size = ftell( fp );
+ fseek( fp, 0, SEEK_SET );
+ char* data = (char*) malloc( size + 1 );
+ fread( data, 1, size, fp );
+ data[ size ] = '\0';
+ fclose( fp );
+
+ ini_t* ini = ini_load( data );
+ free( data );
+ int second_index = ini_find_property( ini, INI_GLOBAL_SECTION, "SecondSetting" );
+ char const* second = ini_property_value( ini, INI_GLOBAL_SECTION, second_index );
+ printf( "%s=%s\n", "SecondSetting", second );
+ int section = ini_find_section( ini, "MySection" );
+ int third_index = ini_find_property( ini, section, "ThirdSetting" );
+ char const* third = ini_property_value( ini, section, third_index );
+ printf( "%s=%s\n", "ThirdSetting", third );
+ ini_destroy( ini );
+
+ return 0;
+ }
+```
+
+Creating a new ini file
+-----------------------
+
+```cpp
+#define INI_IMPLEMENTATION
+#include "ini.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main()
+ {
+ ini_t* ini = ini_create();
+ ini_property_add( ini, INI_GLOBAL_SECTION, "FirstSetting", "Test" );
+ ini_property_add( ini, INI_GLOBAL_SECTION, "SecondSetting", "2" );
+ int section = ini_section_add( ini, "MySection" );
+ ini_property_add( ini, section, "ThirdSetting", "Three" );
+
+ int size = ini_save( ini, NULL, 0 ); // Find the size needed
+ char* data = (char*) malloc( size );
+ size = ini_save( ini, data, size ); // Actually save the file
+ ini_destroy( ini );
+
+ FILE* fp = fopen( "test.ini", "w" );
+ fwrite( data, 1, size, fp );
+ fclose( fp );
+ free( data );
+
+ return 0;
+ }
+```
+
+
+API Documentation
+=================
+
+ini.h is a small library for reading classic .ini files. It is a single-header library, and does not need any .lib files
+or other binaries, or any build scripts. To use it, you just include ini.h to get the API declarations. To get the
+definitions, you must include ini.h from *one* single C or C++ file, and #define the symbol `INI_IMPLEMENTATION` before
+you do.
+
+
+Customization
+-------------
+There are a few different things in ini.h which are configurable by #defines. The customizations only affect the
+implementation, so will only need to be defined in the file where you have the #define INI_IMPLEMENTATION.
+
+Note that if all customizations are utilized, ini.h will include no external files whatsoever, which might be useful
+if you need full control over what code is being built.
+
+
+### Custom memory allocators
+
+To store the internal data structures, ini.h needs to do dynamic allocation by calling `malloc`. Programs might want to
+keep track of allocations done, or use custom defined pools to allocate memory from. ini.h allows for specifying custom
+memory allocation functions for `malloc` and `free`.
+This is done with the following code:
+
+ #define INI_IMPLEMENTATION
+ #define INI_MALLOC( ctx, size ) ( my_custom_malloc( ctx, size ) )
+ #define INI_FREE( ctx, ptr ) ( my_custom_free( ctx, ptr ) )
+ #include "ini.h"
+
+where `my_custom_malloc` and `my_custom_free` are your own memory allocation/deallocation functions. The `ctx` parameter
+is an optional parameter of type `void*`. When `ini_create` or `ini_load` is called, you can pass in a `memctx`
+parameter, which can be a pointer to anything you like, and which will be passed through as the `ctx` parameter to every
+`INI_MALLOC`/`INI_FREE` call. For example, if you are doing memory tracking, you can pass a pointer to your tracking
+data as `memctx`, and in your custom allocation/deallocation function, you can cast the `ctx` param back to the
+right type, and access the tracking data.
+
+If no custom allocator is defined, ini.h will default to `malloc` and `free` from the C runtime library.
+
+
+### Custom C runtime function
+
+The library makes use of three additional functions from the C runtime library, and for full flexibility, it allows you
+to substitute them for your own. Here's an example:
+
+ #define INI_IMPLEMENTATION
+ #define INI_MEMCPY( dst, src, cnt ) ( my_memcpy_func( dst, src, cnt ) )
+ #define INI_STRLEN( s ) ( my_strlen_func( s ) )
+ #define INI_STRICMP( s1, s2 ) ( my_stricmp_func( s1, s2 ) )
+ #include "ini.h"
+
+If no custom function is defined, ini.h will default to the C runtime library equivalent.
+
+
+ini_create
+----------
+
+ ini_t* ini_create( void* memctx )
+
+Instantiates a new, empty ini structure, which can be manipulated with other API calls, to fill it with data. To save it
+out to an ini-file string, use `ini_save`. When no longer needed, it can be destroyed by calling `ini_destroy`.
+`memctx` is a pointer to user defined data which will be passed through to the custom INI_MALLOC/INI_FREE calls. It can
+be NULL if no user defined data is needed.
+
+
+ini_load
+--------
+
+ ini_t* ini_load( char const* data, void* memctx )
+
+Parse the zero-terminated string `data` containing an ini-file, and create a new ini_t instance containing the data.
+The instance can be manipulated with other API calls to enumerate sections/properties and retrieve values. When no
+longer needed, it can be destroyed by calling `ini_destroy`. `memctx` is a pointer to user defined data which will be
+passed through to the custom INI_MALLOC/INI_FREE calls. It can be NULL if no user defined data is needed.
+
+
+ini_save
+--------
+
+ int ini_save( ini_t const* ini, char* data, int size )
+
+Saves an ini structure as a zero-terminated ini-file string, into the specified buffer. Returns the number of bytes
+written, including the zero terminator. If `data` is NULL, nothing is written, but `ini_save` still returns the number
+of bytes it would have written. If the size of `data`, as specified in the `size` parameter, is smaller than that
+required, only part of the ini-file string will be written. `ini_save` still returns the number of bytes it would have
+written had the buffer been large enough.
+
+
+ini_destroy
+-----------
+
+ void ini_destroy( ini_t* ini )
+
+Destroy an `ini_t` instance created by calling `ini_load` or `ini_create`, releasing the memory allocated by it. No
+further API calls are valid on an `ini_t` instance after calling `ini_destroy` on it.
+
+
+ini_section_count
+-----------------
+
+ int ini_section_count( ini_t const* ini )
+
+Returns the number of sections in an ini file. There's at least one section in an ini file (the global section), but
+there can be many more, each specified in the file by the section name wrapped in square brackets [ ].
+
+
+ini_section_name
+----------------
+
+ char const* ini_section_name( ini_t const* ini, int section )
+
+Returns the name of the section with the specified index. `section` must be non-negative and less than the value
+returned by `ini_section_count`, or `ini_section_name` will return NULL. The defined constant `INI_GLOBAL_SECTION` can
+be used to indicate the global section.
+
+
+ini_property_count
+------------------
+
+ int ini_property_count( ini_t const* ini, int section )
+
+Returns the number of properties belonging to the section with the specified index. `section` must be non-negative and
+less than the value returned by `ini_section_count`, or `ini_section_name` will return 0. The defined constant
+`INI_GLOBAL_SECTION` can be used to indicate the global section. Properties are declared in the ini-file on he format
+`name=value`.
+
+
+ini_property_name
+-----------------
+
+ char const* ini_property_name( ini_t const* ini, int section, int property )
+
+Returns the name of the property with the specified index `property` in the section with the specified index `section`.
+`section` must be non-negative and less than the value returned by `ini_section_count`, and `property` must be
+non-negative and less than the value returned by `ini_property_count`, or `ini_property_name` will return NULL. The
+defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+
+
+ini_property_value
+------------------
+
+ char const* ini_property_value( ini_t const* ini, int section, int property )
+
+Returns the value of the property with the specified index `property` in the section with the specified index `section`.
+`section` must be non-negative and less than the value returned by `ini_section_count`, and `property` must be
+non-negative and less than the value returned by `ini_property_count`, or `ini_property_value` will return NULL. The
+defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+
+
+ini_find_section
+----------------
+
+ int ini_find_section( ini_t const* ini, char const* name, int name_length )
+
+Finds the section with the specified name, and returns its index. `name_length` specifies the number of characters in
+`name`, which does not have to be zero-terminated. If `name_length` is zero, the length is determined automatically, but
+in this case `name` has to be zero-terminated. If no section with the specified name could be found, the value
+`INI_NOT_FOUND` is returned.
+
+
+ini_find_property
+-----------------
+
+ int ini_find_property( ini_t const* ini, int section, char const* name, int name_length )
+
+Finds the property with the specified name, within the section with the specified index, and returns the index of the
+property. `name_length` specifies the number of characters in `name`, which does not have to be zero-terminated. If
+`name_length` is zero, the length is determined automatically, but in this case `name` has to be zero-terminated. If no
+property with the specified name could be found within the specified section, the value `INI_NOT_FOUND` is returned.
+`section` must be non-negative and less than the value returned by `ini_section_count`, or `ini_find_property` will
+return `INI_NOT_FOUND`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+
+
+ini_section_add
+---------------
+
+ int ini_section_add( ini_t* ini, char const* name, int length )
+
+Adds a section with the specified name, and returns the index it was added at. There is no check done to see if a
+section with the specified name already exists - multiple sections of the same name are allowed. `length` specifies the
+number of characters in `name`, which does not have to be zero-terminated. If `length` is zero, the length is determined
+automatically, but in this case `name` has to be zero-terminated.
+
+
+ini_property_add
+----------------
+
+ void ini_property_add( ini_t* ini, int section, char const* name, int name_length, char const* value, int value_length )
+
+Adds a property with the specified name and value to the specified section, and returns the index it was added at. There
+is no check done to see if a property with the specified name already exists - multiple properties of the same name are
+allowed. `name_length` and `value_length` specifies the number of characters in `name` and `value`, which does not have
+to be zero-terminated. If `name_length` or `value_length` is zero, the length is determined automatically, but in this
+case `name`/`value` has to be zero-terminated. `section` must be non-negative and less than the value returned by
+`ini_section_count`, or the property will not be added. The defined constant `INI_GLOBAL_SECTION` can be used to
+indicate the global section.
+
+
+ini_section_remove
+------------------
+
+ void ini_section_remove( ini_t* ini, int section )
+
+Removes the section with the specified index, and all properties within it. `section` must be non-negative and less than
+the value returned by `ini_section_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global
+section. Note that removing a section will shuffle section indices, so that section indices you may have stored will no
+longer indicate the same section as it did before the remove. Use the find functions to update your indices.
+
+
+ini_property_remove
+-------------------
+
+ void ini_property_remove( ini_t* ini, int section, int property )
+
+Removes the property with the specified index from the specified section. `section` must be non-negative and less than
+the value returned by `ini_section_count`, and `property` must be non-negative and less than the value returned by
+`ini_property_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section. Note that
+removing a property will shuffle property indices within the specified section, so that property indices you may have
+stored will no longer indicate the same property as it did before the remove. Use the find functions to update your
+indices.
+
+
+ini_section_name_set
+--------------------
+
+ void ini_section_name_set( ini_t* ini, int section, char const* name, int length )
+
+Change the name of the section with the specified index. `section` must be non-negative and less than the value returned
+by `ini_section_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section. `length`
+specifies the number of characters in `name`, which does not have to be zero-terminated. If `length` is zero, the length
+is determined automatically, but in this case `name` has to be zero-terminated.
+
+
+ini_property_name_set
+---------------------
+
+ void ini_property_name_set( ini_t* ini, int section, int property, char const* name, int length )
+
+Change the name of the property with the specified index in the specified section. `section` must be non-negative and
+less than the value returned by `ini_section_count`, and `property` must be non-negative and less than the value
+returned by `ini_property_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+`length` specifies the number of characters in `name`, which does not have to be zero-terminated. If `length` is zero,
+the length is determined automatically, but in this case `name` has to be zero-terminated.
+
+
+ini_property_value_set
+----------------------
+
+ void ini_property_value_set( ini_t* ini, int section, int property, char const* value, int length )
+
+Change the value of the property with the specified index in the specified section. `section` must be non-negative and
+less than the value returned by `ini_section_count`, and `property` must be non-negative and less than the value
+returned by `ini_property_count`. The defined constant `INI_GLOBAL_SECTION` can be used to indicate the global section.
+`length` specifies the number of characters in `value`, which does not have to be zero-terminated. If `length` is zero,
+the length is determined automatically, but in this case `value` has to be zero-terminated.
diff --git a/3rdparty/bx/README.md b/3rdparty/bx/README.md
index 3da618f9f3d..69dfade5ccb 100644
--- a/3rdparty/bx/README.md
+++ b/3rdparty/bx/README.md
@@ -19,6 +19,10 @@ https://github.com/bkaradzic/bx
[License (BSD 2-clause)](https://github.com/bkaradzic/bx/blob/master/LICENSE)
-----------------------------------------------------------------------------
+<a href="http://opensource.org/licenses/BSD-2-Clause" target="_blank">
+<img align="right" src="http://opensource.org/trademarks/opensource/OSI-Approved-License-100x137.png">
+</a>
+
Copyright 2010-2017 Branimir Karadzic. All rights reserved.
https://github.com/bkaradzic/bx
diff --git a/3rdparty/bx/include/bx/allocator.h b/3rdparty/bx/include/bx/allocator.h
index 77646a5b29d..f920c08fa71 100644
--- a/3rdparty/bx/include/bx/allocator.h
+++ b/3rdparty/bx/include/bx/allocator.h
@@ -8,8 +8,6 @@
#include "bx.h"
-#include <new>
-
#if BX_CONFIG_ALLOCATOR_DEBUG
# define BX_ALLOC(_allocator, _size) bx::alloc(_allocator, _size, 0, __FILE__, __LINE__)
# define BX_REALLOC(_allocator, _ptr, _size) bx::realloc(_allocator, _ptr, _size, 0, __FILE__, __LINE__)
@@ -17,9 +15,7 @@
# define BX_ALIGNED_ALLOC(_allocator, _size, _align) bx::alloc(_allocator, _size, _align, __FILE__, __LINE__)
# define BX_ALIGNED_REALLOC(_allocator, _ptr, _size, _align) bx::realloc(_allocator, _ptr, _size, _align, __FILE__, __LINE__)
# define BX_ALIGNED_FREE(_allocator, _ptr, _align) bx::free(_allocator, _ptr, _align, __FILE__, __LINE__)
-# define BX_NEW(_allocator, _type) ::new(BX_ALLOC(_allocator, sizeof(_type) ) ) _type
# define BX_DELETE(_allocator, _ptr) bx::deleteObject(_allocator, _ptr, 0, __FILE__, __LINE__)
-# define BX_ALIGNED_NEW(_allocator, _type, _align) ::new(BX_ALIGNED_ALLOC(_allocator, sizeof(_type), _align) ) _type
# define BX_ALIGNED_DELETE(_allocator, _ptr, _align) bx::deleteObject(_allocator, _ptr, _align, __FILE__, __LINE__)
#else
# define BX_ALLOC(_allocator, _size) bx::alloc(_allocator, _size, 0)
@@ -28,15 +24,18 @@
# define BX_ALIGNED_ALLOC(_allocator, _size, _align) bx::alloc(_allocator, _size, _align)
# define BX_ALIGNED_REALLOC(_allocator, _ptr, _size, _align) bx::realloc(_allocator, _ptr, _size, _align)
# define BX_ALIGNED_FREE(_allocator, _ptr, _align) bx::free(_allocator, _ptr, _align)
-# define BX_NEW(_allocator, _type) ::new(BX_ALLOC(_allocator, sizeof(_type) ) ) _type
# define BX_DELETE(_allocator, _ptr) bx::deleteObject(_allocator, _ptr, 0)
-# define BX_ALIGNED_NEW(_allocator, _type, _align) ::new(BX_ALIGNED_ALLOC(_allocator, sizeof(_type), _align) ) _type
# define BX_ALIGNED_DELETE(_allocator, _ptr, _align) bx::deleteObject(_allocator, _ptr, _align)
#endif // BX_CONFIG_DEBUG_ALLOC
-#ifndef BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT
-# define BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT 8
-#endif // BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT
+#define BX_NEW(_allocator, _type) BX_PLACEMENT_NEW(BX_ALLOC(_allocator, sizeof(_type) ), _type)
+#define BX_ALIGNED_NEW(_allocator, _type, _align) BX_PLACEMENT_NEW(BX_ALIGNED_ALLOC(_allocator, sizeof(_type), _align), _type)
+#define BX_PLACEMENT_NEW(_ptr, _type) ::new(bx::PlacementNewTag(), _ptr) _type
+
+namespace bx { struct PlacementNewTag {}; }
+
+void* operator new(size_t, bx::PlacementNewTag, void* _ptr);
+void operator delete(void*, bx::PlacementNewTag, void*) throw();
namespace bx
{
@@ -54,7 +53,33 @@ namespace bx
/// @param[in] _align Alignment.
/// @param[in] _file Debug file path info.
/// @param[in] _line Debug file line info.
- virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) = 0;
+ virtual void* realloc(
+ void* _ptr
+ , size_t _size
+ , size_t _align
+ , const char* _file
+ , uint32_t _line
+ ) = 0;
+ };
+
+ ///
+ class DefaultAllocator : public AllocatorI
+ {
+ public:
+ ///
+ DefaultAllocator();
+
+ ///
+ virtual ~DefaultAllocator();
+
+ ///
+ virtual void* realloc(
+ void* _ptr
+ , size_t _size
+ , size_t _align
+ , const char* _file
+ , uint32_t _line
+ ) override;
};
/// Check if pointer is aligned. _align must be power of two.
@@ -64,7 +89,7 @@ namespace bx
void* alignPtr(
void* _ptr
, size_t _extra
- , size_t _align = BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT
+ , size_t _align = 0
);
/// Allocate memory.
diff --git a/3rdparty/bx/include/bx/bx.h b/3rdparty/bx/include/bx/bx.h
index 838c429a8f5..a87a9b0f6d3 100644
--- a/3rdparty/bx/include/bx/bx.h
+++ b/3rdparty/bx/include/bx/bx.h
@@ -15,6 +15,7 @@
#include "platform.h"
#include "config.h"
#include "macros.h"
+#include "debug.h"
///
#define BX_COUNTOF(_x) sizeof(bx::COUNTOF_REQUIRES_ARRAY_ARGUMENT(_x) )
@@ -27,20 +28,44 @@
namespace bx
{
+ const int32_t kExitSuccess = 0;
+ const int32_t kExitFailure = 1;
+
/// Template for avoiding MSVC: C4127: conditional expression is constant
template<bool>
bool isEnabled();
- ///
- bool ignoreC4127(bool _x);
-
- ///
+ /// Exchange two values.
template<typename Ty>
void xchg(Ty& _a, Ty& _b);
- ///
+ /// Exchange memory.
void xchg(void* _a, void* _b, size_t _numBytes);
+ /// Returns minimum of two values.
+ template<typename Ty>
+ Ty min(const Ty& _a, const Ty& _b);
+
+ /// Returns maximum of two values.
+ template<typename Ty>
+ Ty max(const Ty& _a, const Ty& _b);
+
+ /// Returns minimum of three values.
+ template<typename Ty>
+ Ty min(const Ty& _a, const Ty& _b, const Ty& _c);
+
+ /// Returns maximum of three values.
+ template<typename Ty>
+ Ty max(const Ty& _a, const Ty& _b, const Ty& _c);
+
+ /// Returns middle of three values.
+ template<typename Ty>
+ Ty mid(const Ty& _a, const Ty& _b, const Ty& _c);
+
+ /// Returns clamped value between min/max.
+ template<typename Ty>
+ Ty clamp(const Ty& _a, const Ty& _min, const Ty& _max);
+
// http://cnicholson.net/2011/01/stupid-c-tricks-a-better-sizeof_array/
template<typename T, size_t N>
char (&COUNTOF_REQUIRES_ARRAY_ARGUMENT(const T(&)[N]) )[N];
diff --git a/3rdparty/bx/include/bx/commandline.h b/3rdparty/bx/include/bx/commandline.h
index 9b9a397360b..61a7eb33760 100644
--- a/3rdparty/bx/include/bx/commandline.h
+++ b/3rdparty/bx/include/bx/commandline.h
@@ -60,6 +60,12 @@ namespace bx
///
bool hasArg(bool& _value, const char _short, const char* _long = NULL) const;
+ ///
+ int32_t getNum() const;
+
+ ///
+ char const* get(int32_t _idx) const;
+
private:
///
const char* find(int32_t _skip, const char _short, const char* _long, int32_t _numParams) const;
diff --git a/3rdparty/bx/include/bx/config.h b/3rdparty/bx/include/bx/config.h
index 2f7264f7c52..dea60b9d1f8 100644
--- a/3rdparty/bx/include/bx/config.h
+++ b/3rdparty/bx/include/bx/config.h
@@ -12,28 +12,6 @@
# define BX_CONFIG_ALLOCATOR_DEBUG 0
#endif // BX_CONFIG_DEBUG_ALLOC
-#ifndef BX_CONFIG_ALLOCATOR_CRT
-# define BX_CONFIG_ALLOCATOR_CRT 1
-#endif // BX_CONFIG_ALLOCATOR_CRT
-
-#ifndef BX_CONFIG_CRT_FILE_READER_WRITER
-# define BX_CONFIG_CRT_FILE_READER_WRITER !(0 \
- || BX_PLATFORM_NACL \
- || BX_CRT_NONE \
- )
-#endif // BX_CONFIG_CRT_FILE_READER_WRITER
-
-#ifndef BX_CONFIG_CRT_PROCESS
-# define BX_CONFIG_CRT_PROCESS !(0 \
- || BX_CRT_NONE \
- || BX_PLATFORM_EMSCRIPTEN \
- || BX_PLATFORM_NACL \
- || BX_PLATFORM_PS4 \
- || BX_PLATFORM_WINRT \
- || BX_PLATFORM_XBOXONE \
- )
-#endif // BX_CONFIG_CRT_PROCESS
-
#ifndef BX_CONFIG_SUPPORTS_THREADING
# define BX_CONFIG_SUPPORTS_THREADING !(0 \
|| BX_PLATFORM_EMSCRIPTEN \
diff --git a/3rdparty/bx/include/bx/cpu.h b/3rdparty/bx/include/bx/cpu.h
index 91ab437019d..40e67b603b7 100644
--- a/3rdparty/bx/include/bx/cpu.h
+++ b/3rdparty/bx/include/bx/cpu.h
@@ -8,315 +8,61 @@
#include "bx.h"
-#if BX_COMPILER_MSVC
-# if BX_PLATFORM_XBOX360
-# include <ppcintrinsics.h>
-# include <xtl.h>
-# else
-# include <math.h> // math.h is included because VS bitches:
- // warning C4985: 'ceil': attributes not present on previous declaration.
- // must be included before intrin.h.
-# include <intrin.h>
-# include <windows.h>
-# endif // !BX_PLATFORM_XBOX360
-# if BX_PLATFORM_WINRT
-# define _InterlockedExchangeAdd64 InterlockedExchangeAdd64
-# endif // BX_PLATFORM_WINRT
-extern "C" void _ReadBarrier();
-extern "C" void _WriteBarrier();
-extern "C" void _ReadWriteBarrier();
-# pragma intrinsic(_ReadBarrier)
-# pragma intrinsic(_WriteBarrier)
-# pragma intrinsic(_ReadWriteBarrier)
-# pragma intrinsic(_InterlockedExchangeAdd)
-# pragma intrinsic(_InterlockedCompareExchange)
-#endif // BX_COMPILER_MSVC
-
namespace bx
{
///
- inline void readBarrier()
- {
-#if BX_COMPILER_MSVC
- _ReadBarrier();
-#else
- asm volatile("":::"memory");
-#endif // BX_COMPILER
- }
+ void readBarrier();
///
- inline void writeBarrier()
- {
-#if BX_COMPILER_MSVC
- _WriteBarrier();
-#else
- asm volatile("":::"memory");
-#endif // BX_COMPILER
- }
+ void writeBarrier();
///
- inline void readWriteBarrier()
- {
-#if BX_COMPILER_MSVC
- _ReadWriteBarrier();
-#else
- asm volatile("":::"memory");
-#endif // BX_COMPILER
- }
+ void readWriteBarrier();
///
- inline void memoryBarrier()
- {
-#if BX_PLATFORM_XBOX360
- __lwsync();
-#elif BX_PLATFORM_WINRT
- MemoryBarrier();
-#elif BX_COMPILER_MSVC
- _mm_mfence();
-#else
- __sync_synchronize();
-// asm volatile("mfence":::"memory");
-#endif // BX_COMPILER
- }
-
- template<typename Ty>
- inline Ty atomicFetchAndAdd(volatile Ty* _ptr, Ty _value);
-
- template<typename Ty>
- inline Ty atomicAddAndFetch(volatile Ty* _ptr, Ty _value);
+ void memoryBarrier();
+ ///
template<typename Ty>
- inline Ty atomicFetchAndSub(volatile Ty* _ptr, Ty _value);
+ Ty atomicFetchAndAdd(volatile Ty* _ptr, Ty _value);
+ ///
template<typename Ty>
- inline Ty atomicSubAndFetch(volatile Ty* _ptr, Ty _value);
+ Ty atomicAddAndFetch(volatile Ty* _ptr, Ty _value);
+ ///
template<typename Ty>
- inline Ty atomicCompareAndSwap(volatile void* _ptr, Ty _old, Ty _new);
-
- template<>
- inline int32_t atomicCompareAndSwap(volatile void* _ptr, int32_t _old, int32_t _new);
-
- template<>
- inline int64_t atomicCompareAndSwap(volatile void* _ptr, int64_t _old, int64_t _new);
-
- template<>
- inline int32_t atomicFetchAndAdd<int32_t>(volatile int32_t* _ptr, int32_t _add)
- {
-#if BX_COMPILER_MSVC
- return _InterlockedExchangeAdd( (volatile long*)_ptr, _add);
-#else
- return __sync_fetch_and_add(_ptr, _add);
-#endif // BX_COMPILER_
- }
-
- template<>
- inline int64_t atomicFetchAndAdd<int64_t>(volatile int64_t* _ptr, int64_t _add)
- {
-#if BX_COMPILER_MSVC
-# if _WIN32_WINNT >= 0x600
- return _InterlockedExchangeAdd64( (volatile int64_t*)_ptr, _add);
-# else
- int64_t oldVal;
- int64_t newVal = *(int64_t volatile*)_ptr;
- do
- {
- oldVal = newVal;
- newVal = atomicCompareAndSwap(_ptr, oldVal, newVal + _add);
-
- } while (oldVal != newVal);
-
- return oldVal;
-# endif
-#else
- return __sync_fetch_and_add(_ptr, _add);
-#endif // BX_COMPILER_
- }
-
- template<>
- inline uint32_t atomicFetchAndAdd<uint32_t>(volatile uint32_t* _ptr, uint32_t _add)
- {
- return uint32_t(atomicFetchAndAdd<int32_t>( (volatile int32_t*)_ptr, int32_t(_add) ) );
- }
-
- template<>
- inline uint64_t atomicFetchAndAdd<uint64_t>(volatile uint64_t* _ptr, uint64_t _add)
- {
- return uint64_t(atomicFetchAndAdd<int64_t>( (volatile int64_t*)_ptr, int64_t(_add) ) );
- }
-
- template<>
- inline int32_t atomicAddAndFetch<int32_t>(volatile int32_t* _ptr, int32_t _add)
- {
-#if BX_COMPILER_MSVC
- return atomicFetchAndAdd(_ptr, _add) + _add;
-#else
- return __sync_add_and_fetch(_ptr, _add);
-#endif // BX_COMPILER_
- }
-
- template<>
- inline int64_t atomicAddAndFetch<int64_t>(volatile int64_t* _ptr, int64_t _add)
- {
-#if BX_COMPILER_MSVC
- return atomicFetchAndAdd(_ptr, _add) + _add;
-#else
- return __sync_add_and_fetch(_ptr, _add);
-#endif // BX_COMPILER_
- }
-
- template<>
- inline uint32_t atomicAddAndFetch<uint32_t>(volatile uint32_t* _ptr, uint32_t _add)
- {
- return uint32_t(atomicAddAndFetch<int32_t>( (volatile int32_t*)_ptr, int32_t(_add) ) );
- }
-
- template<>
- inline uint64_t atomicAddAndFetch<uint64_t>(volatile uint64_t* _ptr, uint64_t _add)
- {
- return uint64_t(atomicAddAndFetch<int64_t>( (volatile int64_t*)_ptr, int64_t(_add) ) );
- }
+ Ty atomicFetchAndSub(volatile Ty* _ptr, Ty _value);
- template<>
- inline int32_t atomicFetchAndSub<int32_t>(volatile int32_t* _ptr, int32_t _sub)
- {
-#if BX_COMPILER_MSVC
- return atomicFetchAndAdd(_ptr, -_sub);
-#else
- return __sync_fetch_and_sub(_ptr, _sub);
-#endif // BX_COMPILER_
- }
-
- template<>
- inline int64_t atomicFetchAndSub<int64_t>(volatile int64_t* _ptr, int64_t _sub)
- {
-#if BX_COMPILER_MSVC
- return atomicFetchAndAdd(_ptr, -_sub);
-#else
- return __sync_fetch_and_sub(_ptr, _sub);
-#endif // BX_COMPILER_
- }
-
- template<>
- inline uint32_t atomicFetchAndSub<uint32_t>(volatile uint32_t* _ptr, uint32_t _add)
- {
- return uint32_t(atomicFetchAndSub<int32_t>( (volatile int32_t*)_ptr, int32_t(_add) ) );
- }
-
- template<>
- inline uint64_t atomicFetchAndSub<uint64_t>(volatile uint64_t* _ptr, uint64_t _add)
- {
- return uint64_t(atomicFetchAndSub<int64_t>( (volatile int64_t*)_ptr, int64_t(_add) ) );
- }
-
- template<>
- inline int32_t atomicSubAndFetch<int32_t>(volatile int32_t* _ptr, int32_t _sub)
- {
-#if BX_COMPILER_MSVC
- return atomicFetchAndAdd(_ptr, -_sub) - _sub;
-#else
- return __sync_sub_and_fetch(_ptr, _sub);
-#endif // BX_COMPILER_
- }
-
- template<>
- inline int64_t atomicSubAndFetch<int64_t>(volatile int64_t* _ptr, int64_t _sub)
- {
-#if BX_COMPILER_MSVC
- return atomicFetchAndAdd(_ptr, -_sub) - _sub;
-#else
- return __sync_sub_and_fetch(_ptr, _sub);
-#endif // BX_COMPILER_
- }
-
- template<>
- inline uint32_t atomicSubAndFetch<uint32_t>(volatile uint32_t* _ptr, uint32_t _add)
- {
- return uint32_t(atomicSubAndFetch<int32_t>( (volatile int32_t*)_ptr, int32_t(_add) ) );
- }
-
- template<>
- inline uint64_t atomicSubAndFetch<uint64_t>(volatile uint64_t* _ptr, uint64_t _add)
- {
- return uint64_t(atomicSubAndFetch<int64_t>( (volatile int64_t*)_ptr, int64_t(_add) ) );
- }
-
- /// Returns the resulting incremented value.
+ ///
template<typename Ty>
- inline Ty atomicInc(volatile Ty* _ptr)
- {
- return atomicAddAndFetch(_ptr, Ty(1) );
- }
+ Ty atomicSubAndFetch(volatile Ty* _ptr, Ty _value);
- /// Returns the resulting decremented value.
+ ///
template<typename Ty>
- inline Ty atomicDec(volatile Ty* _ptr)
- {
- return atomicSubAndFetch(_ptr, Ty(1) );
- }
+ Ty atomicCompareAndSwap(volatile Ty* _ptr, Ty _old, Ty _new);
///
- template<>
- inline int32_t atomicCompareAndSwap(volatile void* _ptr, int32_t _old, int32_t _new)
- {
-#if BX_COMPILER_MSVC
- return _InterlockedCompareExchange( (volatile LONG*)(_ptr), _new, _old);
-#else
- return __sync_val_compare_and_swap( (volatile int32_t*)_ptr, _old, _new);
-#endif // BX_COMPILER
- }
+ template<typename Ty>
+ Ty atomicFetchTestAndAdd(volatile Ty* _ptr, Ty _test, Ty _value);
///
- template<>
- inline int64_t atomicCompareAndSwap(volatile void* _ptr, int64_t _old, int64_t _new)
- {
-#if BX_COMPILER_MSVC
- return _InterlockedCompareExchange64( (volatile LONG64*)(_ptr), _new, _old);
-#else
- return __sync_val_compare_and_swap( (volatile int64_t*)_ptr, _old, _new);
-#endif // BX_COMPILER
- }
+ template<typename Ty>
+ Ty atomicFetchTestAndSub(volatile Ty* _ptr, Ty _test, Ty _value);
///
- inline void* atomicExchangePtr(void** _ptr, void* _new)
- {
-#if BX_COMPILER_MSVC
- return InterlockedExchangePointer(_ptr, _new);
-#else
- return __sync_lock_test_and_set(_ptr, _new);
-#endif // BX_COMPILER
- }
+ template<typename Ty>
+ Ty atomicFetchAndAddsat(volatile Ty* _ptr, Ty _value, Ty _max);
///
- inline int32_t atomicTestAndInc(volatile void* _ptr, int32_t _test)
- {
- int32_t oldVal;
- int32_t newVal = *(int32_t volatile*)_ptr;
- do
- {
- oldVal = newVal;
- newVal = atomicCompareAndSwap(_ptr, oldVal, newVal >= _test ? _test : newVal+1);
-
- } while (oldVal != newVal);
-
- return oldVal;
- }
+ template<typename Ty>
+ Ty atomicFetchAndSubsat(volatile Ty* _ptr, Ty _value, Ty _min);
///
- inline int32_t atomicTestAndDec(volatile void* _ptr, int32_t _test)
- {
- int32_t oldVal;
- int32_t newVal = *(int32_t volatile*)_ptr;
- do
- {
- oldVal = newVal;
- newVal = atomicCompareAndSwap(_ptr, oldVal, newVal <= _test ? _test : newVal-1);
-
- } while (oldVal != newVal);
-
- return oldVal;
- }
+ void* atomicExchangePtr(void** _ptr, void* _new);
} // namespace bx
+#include "inline/cpu.inl"
+
#endif // BX_CPU_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/crtimpl.h b/3rdparty/bx/include/bx/crtimpl.h
deleted file mode 100644
index 8176c6b9185..00000000000
--- a/3rdparty/bx/include/bx/crtimpl.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
- */
-
-#ifndef BX_CRTIMPL_H_HEADER_GUARD
-#define BX_CRTIMPL_H_HEADER_GUARD
-
-#include "bx.h"
-
-#if BX_CONFIG_ALLOCATOR_CRT
-# include "allocator.h"
-#endif // BX_CONFIG_ALLOCATOR_CRT
-
-#if BX_CONFIG_CRT_FILE_READER_WRITER
-# include "readerwriter.h"
-#endif // BX_CONFIG_CRT_FILE_READER_WRITER
-
-namespace bx
-{
-#if BX_CONFIG_ALLOCATOR_CRT
- ///
- class CrtAllocator : public AllocatorI
- {
- public:
- ///
- CrtAllocator();
-
- ///
- virtual ~CrtAllocator();
-
- ///
- virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) BX_OVERRIDE;
- };
-#endif // BX_CONFIG_ALLOCATOR_CRT
-
-#if BX_CONFIG_CRT_FILE_READER_WRITER
- ///
- class CrtFileReader : public FileReaderI
- {
- public:
- ///
- CrtFileReader();
-
- ///
- virtual ~CrtFileReader();
-
- ///
- virtual bool open(const char* _filePath, Error* _err) BX_OVERRIDE;
-
- ///
- virtual void close() BX_OVERRIDE;
-
- ///
- virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE;
-
- ///
- virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE;
-
- private:
- void* m_file;
- };
-
- ///
- class CrtFileWriter : public FileWriterI
- {
- public:
- ///
- CrtFileWriter();
-
- ///
- virtual ~CrtFileWriter();
-
- ///
- virtual bool open(const char* _filePath, bool _append, Error* _err) BX_OVERRIDE;
-
- ///
- virtual void close() BX_OVERRIDE;
-
- ///
- virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE;
-
- ///
- virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE;
-
- private:
- void* m_file;
- };
-#endif // BX_CONFIG_CRT_FILE_READER_WRITER
-
-#if BX_CONFIG_CRT_PROCESS
- ///
- class ProcessReader : public ReaderOpenI, public CloserI, public ReaderI
- {
- public:
- ///
- ProcessReader();
-
- ///
- ~ProcessReader();
-
- ///
- virtual bool open(const char* _command, Error* _err) BX_OVERRIDE;
-
- ///
- virtual void close() BX_OVERRIDE;
-
- ///
- virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE;
-
- ///
- int32_t getExitCode() const;
-
- private:
- void* m_file;
- int32_t m_exitCode;
- };
-
- ///
- class ProcessWriter : public WriterOpenI, public CloserI, public WriterI
- {
- public:
- ///
- ProcessWriter();
-
- ///
- ~ProcessWriter();
-
- ///
- virtual bool open(const char* _command, bool, Error* _err) BX_OVERRIDE;
-
- ///
- virtual void close() BX_OVERRIDE;
-
- ///
- virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE;
-
- ///
- int32_t getExitCode() const;
-
- private:
- void* m_file;
- int32_t m_exitCode;
- };
-#endif // BX_CONFIG_CRT_PROCESS
-
-} // namespace bx
-
-#endif // BX_CRTIMPL_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/debug.h b/3rdparty/bx/include/bx/debug.h
index 7c2ca8634d0..58940ac19e6 100644
--- a/3rdparty/bx/include/bx/debug.h
+++ b/3rdparty/bx/include/bx/debug.h
@@ -25,6 +25,9 @@ namespace bx
///
void debugPrintfData(const void* _data, uint32_t _size, const char* _format, ...);
+ ///
+ struct WriterI* getDebugOut();
+
} // namespace bx
#endif // BX_DEBUG_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/easing.h b/3rdparty/bx/include/bx/easing.h
index 62131578450..96849030211 100644
--- a/3rdparty/bx/include/bx/easing.h
+++ b/3rdparty/bx/include/bx/easing.h
@@ -6,7 +6,7 @@
#ifndef BX_EASING_H_HEADER_GUARD
#define BX_EASING_H_HEADER_GUARD
-#include "fpumath.h"
+#include "math.h"
// Reference:
// http://easings.net/
@@ -20,6 +20,8 @@ namespace bx
enum Enum
{
Linear,
+ Step,
+ SmoothStep,
InQuad,
OutQuad,
InOutQuad,
@@ -69,128 +71,1127 @@ namespace bx
typedef float (*EaseFn)(float _t);
///
+ EaseFn getEaseFunc(Easing::Enum _enum);
+
+ /// Linear.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *******
+ /// | *******
+ /// | ********
+ /// | *******
+ /// | *******
+ /// | ********
+ /// | *******
+ /// | ********
+ /// | *******
+ /// +*******--------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
+ ///
float easeLinear(float _t);
+ /// Step.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ********************************
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// +********************************-------------------------------->
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ ///
+ float easeStep(float _t);
+
+ /// Smooth step.
+ ///
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *************
+ /// | *******
+ /// | ******
+ /// | *****
+ /// | *****
+ /// | *****
+ /// | *****
+ /// | ******
+ /// | *******
+ /// +*************--------------------------------------------------->
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ ///
+ float easeSmoothStep(float _t);
+
+ /// Quad.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ****
+ /// | ****
+ /// | *****
+ /// | *****
+ /// | *****
+ /// | ******
+ /// | ******
+ /// | ********
+ /// | *********
+ /// +*********************------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInQuad(float _t);
+ /// Out quad.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *********************
+ /// | *********
+ /// | *******
+ /// | ******
+ /// | ******
+ /// | *****
+ /// | *****
+ /// | *****
+ /// | ****
+ /// +****------------------------------------------------------------>
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutQuad(float _t);
+ /// In out quad.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ***************
+ /// | *******
+ /// | *****
+ /// | *****
+ /// | ****
+ /// | *****
+ /// | *****
+ /// | *****
+ /// | *******
+ /// +***************------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInOutQuad(float _t);
+ /// Out in quad.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ****
+ /// | *****
+ /// | *****
+ /// | *******
+ /// | ***************
+ /// | ****************
+ /// | *******
+ /// | *****
+ /// | *****
+ /// +****------------------------------------------------------------>
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInQuad(float _t);
+ /// In cubic.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ***
+ /// | ***
+ /// | ****
+ /// | ***
+ /// | ****
+ /// | ****
+ /// | ******
+ /// | ******
+ /// | *********
+ /// +******************************---------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInCubic(float _t);
+ /// Out cubic.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | ******************************
+ /// | *********
+ /// | ******
+ /// | ******
+ /// | ****
+ /// | ****
+ /// | ****
+ /// | ****
+ /// | ***
+ /// +***------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutCubic(float _t);
+ /// In out cubic.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | *******************
+ /// | ******
+ /// | ****
+ /// | ****
+ /// | ***
+ /// | ****
+ /// | ***
+ /// | ****
+ /// | ******
+ /// +*******************--------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInOutCubic(float _t);
+ /// Out in cubic.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ***
+ /// | ***
+ /// | ****
+ /// | ******
+ /// | *******************
+ /// | ********************
+ /// | ******
+ /// | ****
+ /// | ****
+ /// +***------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInCubic(float _t);
+ /// In quart.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | **
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | ****
+ /// | ****
+ /// | ****
+ /// | ******
+ /// | *******
+ /// +************************************---------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInQuart(float _t);
+ /// Out quart.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | ************************************
+ /// | ********
+ /// | ******
+ /// | ****
+ /// | ****
+ /// | ****
+ /// | ***
+ /// | ***
+ /// | ***
+ /// +**-------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutQuart(float _t);
+ /// In out quart.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | **********************
+ /// | *****
+ /// | ****
+ /// | ***
+ /// | **
+ /// | ***
+ /// | ***
+ /// | ****
+ /// | *****
+ /// +**********************------------------------------------------>
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInOutQuart(float _t);
+ /// Out in quart.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | **
+ /// | ***
+ /// | ****
+ /// | *****
+ /// | ***********************
+ /// | ***********************
+ /// | *****
+ /// | ****
+ /// | ***
+ /// +**-------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInQuart(float _t);
+ /// In quint.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | **
+ /// | **
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | ****
+ /// | *****
+ /// | *******
+ /// +*****************************************----------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInQuint(float _t);
+ /// Out quint.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | **
+ /// | *****************************************
+ /// | *******
+ /// | *****
+ /// | ****
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | **
+ /// +**-------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutQuint(float _t);
+ /// In out quint.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | **
+ /// | ************************
+ /// | ****
+ /// | ***
+ /// | ***
+ /// | **
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | ****
+ /// +************************---------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInOutQuint(float _t);
+ /// Out in quint.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | **
+ /// | ***
+ /// | ***
+ /// | ****
+ /// | *************************
+ /// | **************************
+ /// | ****
+ /// | ***
+ /// | ***
+ /// +**-------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInQuint(float _t);
+ /// In sine.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ****
+ /// | *****
+ /// | *****
+ /// | *****
+ /// | ******
+ /// | ******
+ /// | ******
+ /// | *******
+ /// | *********
+ /// +*******************--------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInSine(float _t);
+ /// Out sine.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *******************
+ /// | *********
+ /// | *******
+ /// | ******
+ /// | ******
+ /// | ******
+ /// | *****
+ /// | *****
+ /// | *****
+ /// +*****----------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutSine(float _t);
+ /// In out sine.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | **************
+ /// | ******
+ /// | ******
+ /// | *****
+ /// | *****
+ /// | ******
+ /// | *****
+ /// | ******
+ /// | ******
+ /// +**************-------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInOutSine(float _t);
+ /// Out in sine.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *****
+ /// | *****
+ /// | ******
+ /// | ******
+ /// | **************
+ /// | ***************
+ /// | ******
+ /// | ******
+ /// | *****
+ /// +*****----------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInSine(float _t);
+ /// In exponential.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | **
+ /// | **
+ /// | **
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | ****
+ /// | ********
+ /// +*******************************************--------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInExpo(float _t);
+ /// Out exponential.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | *******************************************
+ /// | ********
+ /// | ****
+ /// | ****
+ /// | ***
+ /// | ***
+ /// | **
+ /// | **
+ /// | **
+ /// +*--------------------------------------------------------------->
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutExpo(float _t);
+ /// In out exponential.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | *************************
+ /// | ****
+ /// | ***
+ /// | **
+ /// | **
+ /// | *
+ /// | **
+ /// | ***
+ /// | ****
+ /// +*************************--------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInOutExpo(float _t);
+ /// Out in exponential.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | **
+ /// | ***
+ /// | ****
+ /// | **************************
+ /// | **************************
+ /// | ****
+ /// | ***
+ /// | **
+ /// +**-------------------------------------------------------------->
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInExpo(float _t);
+ /// In circle.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | **
+ /// | **
+ /// | ****
+ /// | ****
+ /// | *****
+ /// | *******
+ /// | ********
+ /// | ************
+ /// +****************************------------------------------------>
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInCirc(float _t);
+ /// Out circle.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ****************************
+ /// | ************
+ /// | ********
+ /// | *******
+ /// | *****
+ /// | ****
+ /// | ***
+ /// | **
+ /// |**
+ /// +*--------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutCirc(float _t);
+ /// In out circle.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ********************
+ /// | *******
+ /// | *****
+ /// | ***
+ /// | *
+ /// | **
+ /// | ***
+ /// | *****
+ /// | *******
+ /// +********************-------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInOutCirc(float _t);
+ /// Out in circle.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | ***
+ /// | *****
+ /// | *******
+ /// | ********************
+ /// | *********************
+ /// | *******
+ /// | *****
+ /// |***
+ /// +*--------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInCirc(float _t);
+ /// Out elastic.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | **
+ /// | *
+ /// | **
+ /// | *
+ /// | *
+ /// | *
+ /// | *
+ /// | ***** **
+ /// +-***********--------***********---------****---***---------*---->
+ /// |** ********** *********** ** **
+ /// | ** *
+ /// | ** *
+ /// | *****
+ /// |
///
float easeOutElastic(float _t);
+ /// In elastic.
+ ///
+ /// ^
+ /// |
+ /// | *****
+ /// | * **
+ /// | ** **
+ /// | ** ** ********** ********** **
+ /// | * *** ***** *********** ***********
+ /// | ** *****
+ /// | *
+ /// | *
+ /// | **
+ /// | *
+ /// | **
+ /// | *
+ /// |**
+ /// +*--------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInElastic(float _t);
+ /// In out elastic.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// | ***
+ /// | ** ** ***** ****** *
+ /// | * ****** ****** ******
+ /// | *
+ /// | *
+ /// | **
+ /// | *
+ /// | **
+ /// | *
+ /// | *
+ /// | *
+ /// +******----******----*****----**--------------------------------->
+ /// |* ****** ****** *** *
+ /// | ***
+ /// |
+ /// |
+ /// |
///
float easeInOutElastic(float _t);
+ /// Out in elastic.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | *
+ /// | *
+ /// | *** *
+ /// | ** ** ***** ****** ******* ****** ***** **
+ /// | * ****** ****** ******* ****** ****** *** *
+ /// | * ***
+ /// | *
+ /// |**
+ /// +*--------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInElastic(float _t);
+ /// In back.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// +*-------------------------------------------------***----------->
+ /// |************* ***
+ /// | ******* ****
+ /// | ******* *****
+ /// | ******************
+ /// |
///
float easeInBack(float _t);
+ /// Out back.
+ ///
+ /// ^
+ /// |
+ /// | ******************
+ /// | ***** *******
+ /// | **** *******
+ /// | *** *************
+ /// | ***
+ /// | **
+ /// | ***
+ /// | **
+ /// | ***
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// +**-------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutBack(float _t);
+ /// In out back.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// | **************
+ /// | **** **********
+ /// | **
+ /// | ***
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// | **
+ /// +*------------------------**------------------------------------->
+ /// |********** ****
+ /// | **************
+ /// |
+ /// |
+ /// |
///
float easeInOutBack(float _t);
+ /// Out in back.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | **
+ /// | **
+ /// | ************** **
+ /// | **** *********** **
+ /// | ** ********** ****
+ /// | *** **************
+ /// | **
+ /// | **
+ /// +**-------------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInBack(float _t);
+ /// Out bounce.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ********
+ /// | ****
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | **
+ /// | **
+ /// | ************** **
+ /// | **** **** **
+ /// +********************------------------****---------------------->
+ /// |* *
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutBounce(float _t);
+ /// In bounce.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | **** ********************
+ /// | *** **** ****
+ /// | ** **************
+ /// | **
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | ***
+ /// | ****
+ /// +********-------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInBounce(float _t);
+ /// In out bounce.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | *
+ /// | ***** ************
+ /// | ** *******
+ /// | ***
+ /// | ***
+ /// | ******
+ /// | *******
+ /// | ***
+ /// | **
+ /// | ******* **
+ /// +************------****------------------------------------------>
+ /// |* *
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeInOutBounce(float _t);
+ /// Out in bounce.
+ ///
+ /// ^
+ /// |
+ /// |
+ /// |
+ /// |
+ /// |
+ /// | ******
+ /// | ***
+ /// | **
+ /// | ******* **
+ /// | * ************ ****
+ /// | ***** ************* *
+ /// | ** *******
+ /// | ***
+ /// | ***
+ /// +******---------------------------------------------------------->
+ /// |*
+ /// |
+ /// |
+ /// |
+ /// |
///
float easeOutInBounce(float _t);
+ float easeInOutLinear(float _t);
+
} // namespace bx
#include "inline/easing.inl"
diff --git a/3rdparty/bx/include/bx/file.h b/3rdparty/bx/include/bx/file.h
new file mode 100644
index 00000000000..144f965d2c4
--- /dev/null
+++ b/3rdparty/bx/include/bx/file.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#ifndef BX_FILE_H_HEADER_GUARD
+#define BX_FILE_H_HEADER_GUARD
+
+#include "filepath.h"
+#include "readerwriter.h"
+
+namespace bx
+{
+ ///
+ ReaderI* getStdIn();
+
+ ///
+ WriterI* getStdOut();
+
+ ///
+ WriterI* getStdErr();
+
+ ///
+ WriterI* getNullOut();
+
+ ///
+ class FileReader : public FileReaderI
+ {
+ public:
+ ///
+ FileReader();
+
+ ///
+ virtual ~FileReader();
+
+ ///
+ virtual bool open(const FilePath& _filePath, Error* _err) override;
+
+ ///
+ virtual void close() override;
+
+ ///
+ virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) override;
+
+ ///
+ virtual int32_t read(void* _data, int32_t _size, Error* _err) override;
+
+ private:
+ BX_ALIGN_DECL(16, uint8_t) m_internal[64];
+ };
+
+ ///
+ class FileWriter : public FileWriterI
+ {
+ public:
+ ///
+ FileWriter();
+
+ ///
+ virtual ~FileWriter();
+
+ ///
+ virtual bool open(const FilePath& _filePath, bool _append, Error* _err) override;
+
+ ///
+ virtual void close() override;
+
+ ///
+ virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) override;
+
+ ///
+ virtual int32_t write(const void* _data, int32_t _size, Error* _err) override;
+
+ private:
+ BX_ALIGN_DECL(16, uint8_t) m_internal[64];
+ };
+
+ ///
+ struct FileInfo
+ {
+ enum Enum
+ {
+ Regular,
+ Directory,
+
+ Count
+ };
+
+ uint64_t m_size;
+ Enum m_type;
+ };
+
+ ///
+ bool stat(const FilePath& _filePath, FileInfo& _outFileInfo);
+
+} // namespace bx
+
+#endif // BX_FILE_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/filepath.h b/3rdparty/bx/include/bx/filepath.h
new file mode 100644
index 00000000000..761f50c590d
--- /dev/null
+++ b/3rdparty/bx/include/bx/filepath.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#ifndef BX_FILEPATH_H_HEADER_GUARD
+#define BX_FILEPATH_H_HEADER_GUARD
+
+#include "error.h"
+#include "string.h"
+
+BX_ERROR_RESULT(BX_ERROR_ACCESS, BX_MAKEFOURCC('b', 'x', 0, 0) );
+BX_ERROR_RESULT(BX_ERROR_NOT_DIRECTORY, BX_MAKEFOURCC('b', 'x', 0, 1) );
+
+namespace bx
+{
+ const int32_t kMaxFilePath = 1024;
+
+ ///
+ struct Dir
+ {
+ enum Enum ///
+ {
+ Current,
+ Temp,
+ Home,
+
+ Count
+ };
+ };
+
+ /// FilePath parser and helper.
+ ///
+ /// /abv/gd/555/333/pod.mac
+ /// ppppppppppppppppbbbeeee
+ /// ^ ^ ^
+ /// +-path base-+ +-ext
+ /// ^^^^^^^
+ /// +-filename
+ ///
+ class FilePath
+ {
+ public:
+ ///
+ FilePath();
+
+ ///
+ FilePath(Dir::Enum _dir);
+
+ ///
+ FilePath(const char* _str);
+
+ ///
+ FilePath(const StringView& _str);
+
+ ///
+ FilePath& operator=(const StringView& _rhs);
+
+ ///
+ void set(Dir::Enum _dir);
+
+ ///
+ void set(const StringView& _str);
+
+ ///
+ void join(const StringView& _str);
+
+ ///
+ const char* get() const;
+
+ /// If path is `/abv/gd/555/333/pod.mac` returns `/abv/gd/555/333/`.
+ ///
+ const StringView getPath() const;
+
+ /// If path is `/abv/gd/555/333/pod.mac` returns `pod.mac`.
+ ///
+ const StringView getFileName() const;
+
+ /// If path is `/abv/gd/555/333/pod.mac` returns `pod`.
+ ///
+ const StringView getBaseName() const;
+
+ /// If path is `/abv/gd/555/333/pod.mac` returns `.mac`.
+ ///
+ const StringView getExt() const;
+
+ ///
+ bool isAbsolute() const;
+
+ private:
+ char m_filePath[kMaxFilePath];
+ };
+
+ /// Creates a directory named `_filePath`.
+ bool make(const FilePath& _filePath, Error* _err = NULL);
+
+ /// Creates a directory named `_filePath` along with all necessary parents.
+ bool makeAll(const FilePath& _filePath, Error* _err = NULL);
+
+ /// Removes file or directory.
+ bool remove(const FilePath& _filePath, Error* _err = NULL);
+
+ /// Removes file or directory recursivelly.
+ bool removeAll(const FilePath& _filePath, Error* _err = NULL);
+
+} // namespace bx
+
+#endif // BX_FILEPATH_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/float4x4_t.h b/3rdparty/bx/include/bx/float4x4_t.h
index 44569b95a76..0a144534928 100644
--- a/3rdparty/bx/include/bx/float4x4_t.h
+++ b/3rdparty/bx/include/bx/float4x4_t.h
@@ -10,149 +10,29 @@
namespace bx
{
+ ///
BX_ALIGN_DECL_16(struct) float4x4_t
{
simd128_t col[4];
};
- BX_SIMD_FORCE_INLINE simd128_t simd_mul_xyz1(simd128_t _a, const float4x4_t* _b)
- {
- const simd128_t xxxx = simd_swiz_xxxx(_a);
- const simd128_t yyyy = simd_swiz_yyyy(_a);
- const simd128_t zzzz = simd_swiz_zzzz(_a);
- const simd128_t col0 = simd_mul(_b->col[0], xxxx);
- const simd128_t col1 = simd_mul(_b->col[1], yyyy);
- const simd128_t col2 = simd_madd(_b->col[2], zzzz, col0);
- const simd128_t col3 = simd_add(_b->col[3], col1);
- const simd128_t result = simd_add(col2, col3);
-
- return result;
- }
-
- BX_SIMD_FORCE_INLINE simd128_t simd_mul(simd128_t _a, const float4x4_t* _b)
- {
- const simd128_t xxxx = simd_swiz_xxxx(_a);
- const simd128_t yyyy = simd_swiz_yyyy(_a);
- const simd128_t zzzz = simd_swiz_zzzz(_a);
- const simd128_t wwww = simd_swiz_wwww(_a);
- const simd128_t col0 = simd_mul(_b->col[0], xxxx);
- const simd128_t col1 = simd_mul(_b->col[1], yyyy);
- const simd128_t col2 = simd_madd(_b->col[2], zzzz, col0);
- const simd128_t col3 = simd_madd(_b->col[3], wwww, col1);
- const simd128_t result = simd_add(col2, col3);
-
- return result;
- }
-
- BX_SIMD_INLINE void float4x4_mul(float4x4_t* _result, const float4x4_t* _a, const float4x4_t* _b)
- {
- _result->col[0] = simd_mul(_a->col[0], _b);
- _result->col[1] = simd_mul(_a->col[1], _b);
- _result->col[2] = simd_mul(_a->col[2], _b);
- _result->col[3] = simd_mul(_a->col[3], _b);
- }
-
- BX_SIMD_FORCE_INLINE void float4x4_transpose(float4x4_t* _result, const float4x4_t* _mtx)
- {
- const simd128_t aibj = simd_shuf_xAyB(_mtx->col[0], _mtx->col[2]); // aibj
- const simd128_t emfn = simd_shuf_xAyB(_mtx->col[1], _mtx->col[3]); // emfn
- const simd128_t ckdl = simd_shuf_zCwD(_mtx->col[0], _mtx->col[2]); // ckdl
- const simd128_t gohp = simd_shuf_zCwD(_mtx->col[1], _mtx->col[3]); // gohp
- _result->col[0] = simd_shuf_xAyB(aibj, emfn); // aeim
- _result->col[1] = simd_shuf_zCwD(aibj, emfn); // bfjn
- _result->col[2] = simd_shuf_xAyB(ckdl, gohp); // cgko
- _result->col[3] = simd_shuf_zCwD(ckdl, gohp); // dhlp
- }
-
- BX_SIMD_INLINE void float4x4_inverse(float4x4_t* _result, const float4x4_t* _a)
- {
- const simd128_t tmp0 = simd_shuf_xAzC(_a->col[0], _a->col[1]);
- const simd128_t tmp1 = simd_shuf_xAzC(_a->col[2], _a->col[3]);
- const simd128_t tmp2 = simd_shuf_yBwD(_a->col[0], _a->col[1]);
- const simd128_t tmp3 = simd_shuf_yBwD(_a->col[2], _a->col[3]);
- const simd128_t t0 = simd_shuf_xyAB(tmp0, tmp1);
- const simd128_t t1 = simd_shuf_xyAB(tmp3, tmp2);
- const simd128_t t2 = simd_shuf_zwCD(tmp0, tmp1);
- const simd128_t t3 = simd_shuf_zwCD(tmp3, tmp2);
-
- const simd128_t t23 = simd_mul(t2, t3);
- const simd128_t t23_yxwz = simd_swiz_yxwz(t23);
- const simd128_t t23_wzyx = simd_swiz_wzyx(t23);
-
- simd128_t cof0, cof1, cof2, cof3;
-
- const simd128_t zero = simd_zero();
- cof0 = simd_nmsub(t1, t23_yxwz, zero);
- cof0 = simd_madd(t1, t23_wzyx, cof0);
-
- cof1 = simd_nmsub(t0, t23_yxwz, zero);
- cof1 = simd_madd(t0, t23_wzyx, cof1);
- cof1 = simd_swiz_zwxy(cof1);
+ ///
+ simd128_t simd_mul_xyz1(simd128_t _a, const float4x4_t* _b);
- const simd128_t t12 = simd_mul(t1, t2);
- const simd128_t t12_yxwz = simd_swiz_yxwz(t12);
- const simd128_t t12_wzyx = simd_swiz_wzyx(t12);
+ ///
+ simd128_t simd_mul(simd128_t _a, const float4x4_t* _b);
- cof0 = simd_madd(t3, t12_yxwz, cof0);
- cof0 = simd_nmsub(t3, t12_wzyx, cof0);
+ ///
+ void float4x4_mul(float4x4_t* _result, const float4x4_t* _a, const float4x4_t* _b);
- cof3 = simd_mul(t0, t12_yxwz);
- cof3 = simd_nmsub(t0, t12_wzyx, cof3);
- cof3 = simd_swiz_zwxy(cof3);
+ ///
+ void float4x4_transpose(float4x4_t* _result, const float4x4_t* _mtx);
- const simd128_t t1_zwxy = simd_swiz_zwxy(t1);
- const simd128_t t2_zwxy = simd_swiz_zwxy(t2);
-
- const simd128_t t13 = simd_mul(t1_zwxy, t3);
- const simd128_t t13_yxwz = simd_swiz_yxwz(t13);
- const simd128_t t13_wzyx = simd_swiz_wzyx(t13);
-
- cof0 = simd_madd(t2_zwxy, t13_yxwz, cof0);
- cof0 = simd_nmsub(t2_zwxy, t13_wzyx, cof0);
-
- cof2 = simd_mul(t0, t13_yxwz);
- cof2 = simd_nmsub(t0, t13_wzyx, cof2);
- cof2 = simd_swiz_zwxy(cof2);
-
- const simd128_t t01 = simd_mul(t0, t1);
- const simd128_t t01_yxwz = simd_swiz_yxwz(t01);
- const simd128_t t01_wzyx = simd_swiz_wzyx(t01);
-
- cof2 = simd_nmsub(t3, t01_yxwz, cof2);
- cof2 = simd_madd(t3, t01_wzyx, cof2);
-
- cof3 = simd_madd(t2_zwxy, t01_yxwz, cof3);
- cof3 = simd_nmsub(t2_zwxy, t01_wzyx, cof3);
-
- const simd128_t t03 = simd_mul(t0, t3);
- const simd128_t t03_yxwz = simd_swiz_yxwz(t03);
- const simd128_t t03_wzyx = simd_swiz_wzyx(t03);
-
- cof1 = simd_nmsub(t2_zwxy, t03_yxwz, cof1);
- cof1 = simd_madd(t2_zwxy, t03_wzyx, cof1);
-
- cof2 = simd_madd(t1, t03_yxwz, cof2);
- cof2 = simd_nmsub(t1, t03_wzyx, cof2);
-
- const simd128_t t02 = simd_mul(t0, t2_zwxy);
- const simd128_t t02_yxwz = simd_swiz_yxwz(t02);
- const simd128_t t02_wzyx = simd_swiz_wzyx(t02);
-
- cof1 = simd_madd(t3, t02_yxwz, cof1);
- cof1 = simd_nmsub(t3, t02_wzyx, cof1);
-
- cof3 = simd_nmsub(t1, t02_yxwz, cof3);
- cof3 = simd_madd(t1, t02_wzyx, cof3);
-
- const simd128_t det = simd_dot(t0, cof0);
- const simd128_t invdet = simd_rcp(det);
-
- _result->col[0] = simd_mul(cof0, invdet);
- _result->col[1] = simd_mul(cof1, invdet);
- _result->col[2] = simd_mul(cof2, invdet);
- _result->col[3] = simd_mul(cof3, invdet);
- }
+ ///
+ void float4x4_inverse(float4x4_t* _result, const float4x4_t* _a);
} // namespace bx
+#include "inline/float4x4_t.inl"
+
#endif // BX_FLOAT4X4_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/handlealloc.h b/3rdparty/bx/include/bx/handlealloc.h
index eb98cac5821..fc200f72cdc 100644
--- a/3rdparty/bx/include/bx/handlealloc.h
+++ b/3rdparty/bx/include/bx/handlealloc.h
@@ -12,12 +12,12 @@
namespace bx
{
+ static const uint16_t kInvalidHandle = UINT16_MAX;
+
///
class HandleAlloc
{
public:
- static const uint16_t invalid = UINT16_MAX;
-
///
HandleAlloc(uint16_t _maxHandles);
@@ -87,8 +87,6 @@ namespace bx
class HandleListT
{
public:
- static const uint16_t invalid = UINT16_MAX;
-
///
HandleListT();
@@ -152,8 +150,6 @@ namespace bx
class HandleAllocLruT
{
public:
- static const uint16_t invalid = UINT16_MAX;
-
///
HandleAllocLruT();
@@ -209,8 +205,6 @@ namespace bx
class HandleHashMapT
{
public:
- static const uint16_t invalid = UINT16_MAX;
-
///
HandleHashMapT();
@@ -280,8 +274,6 @@ namespace bx
class HandleHashMapAllocT
{
public:
- static const uint16_t invalid = UINT16_MAX;
-
///
HandleHashMapAllocT();
diff --git a/3rdparty/bx/include/bx/hash.h b/3rdparty/bx/include/bx/hash.h
index feade562a3c..1dcd82e3f67 100644
--- a/3rdparty/bx/include/bx/hash.h
+++ b/3rdparty/bx/include/bx/hash.h
@@ -24,12 +24,42 @@ namespace bx
void add(const void* _data, int _len);
///
+ template<typename Ty>
+ void add(Ty _value);
+
+ ///
+ uint32_t end();
+
+ private:
+ ///
void addAligned(const void* _data, int _len);
///
void addUnaligned(const void* _data, int _len);
///
+ static void readUnaligned(const void* _data, uint32_t& _out);
+
+ ///
+ void mixTail(const uint8_t*& _data, int& _len);
+
+ uint32_t m_hash;
+ uint32_t m_tail;
+ uint32_t m_count;
+ uint32_t m_size;
+ };
+
+ ///
+ class HashAdler32
+ {
+ public:
+ ///
+ void begin();
+
+ ///
+ void add(const void* _data, int _len);
+
+ ///
template<typename Ty>
void add(Ty _value);
@@ -37,30 +67,56 @@ namespace bx
uint32_t end();
private:
+ uint32_t m_a;
+ uint32_t m_b;
+ };
+
+ ///
+ class HashCrc32
+ {
+ public:
+ enum Enum
+ {
+ Ieee, //!< 0xedb88320
+ Castagnoli, //!< 0x82f63b78
+ Koopman, //!< 0xeb31d82e
+
+ Count
+ };
+
///
- static void readUnaligned(const void* _data, uint32_t& _out);
+ void begin(Enum _type = Ieee);
///
- void mixTail(const uint8_t*& _data, int& _len);
+ void add(const void* _data, int _len);
+
+ ///
+ template<typename Ty>
+ void add(Ty _value);
+
+ ///
+ uint32_t end();
+ private:
+ const uint32_t* m_table;
uint32_t m_hash;
- uint32_t m_tail;
- uint32_t m_count;
- uint32_t m_size;
};
///
- uint32_t hashMurmur2A(const void* _data, uint32_t _size);
+ template<typename HashT>
+ uint32_t hash(const void* _data, uint32_t _size);
///
- template <typename Ty>
- uint32_t hashMurmur2A(const Ty& _data);
+ template<typename HashT, typename Ty>
+ uint32_t hash(const Ty& _data);
///
- uint32_t hashMurmur2A(const StringView& _data);
+ template<typename HashT>
+ uint32_t hash(const StringView& _data);
///
- uint32_t hashMurmur2A(const char* _data);
+ template<typename HashT>
+ uint32_t hash(const char* _data);
} // namespace bx
diff --git a/3rdparty/bx/include/bx/inline/allocator.inl b/3rdparty/bx/include/bx/inline/allocator.inl
index 8a4898d8f60..7362d3fa06f 100644
--- a/3rdparty/bx/include/bx/inline/allocator.inl
+++ b/3rdparty/bx/include/bx/inline/allocator.inl
@@ -7,6 +7,15 @@
# error "Must be included from bx/allocator.h"
#endif // BX_ALLOCATOR_H_HEADER_GUARD
+inline void* operator new(size_t, bx::PlacementNewTag, void* _ptr)
+{
+ return _ptr;
+}
+
+inline void operator delete(void*, bx::PlacementNewTag, void*) throw()
+{
+}
+
namespace bx
{
inline AllocatorI::~AllocatorI()
diff --git a/3rdparty/bx/include/bx/inline/bx.inl b/3rdparty/bx/include/bx/inline/bx.inl
index f8e9c6303d4..70a6e6dec5e 100644
--- a/3rdparty/bx/include/bx/inline/bx.inl
+++ b/3rdparty/bx/include/bx/inline/bx.inl
@@ -32,4 +32,40 @@ namespace bx
Ty tmp = _a; _a = _b; _b = tmp;
}
+ template<typename Ty>
+ inline Ty min(const Ty& _a, const Ty& _b)
+ {
+ return _a < _b ? _a : _b;
+ }
+
+ template<typename Ty>
+ inline Ty max(const Ty& _a, const Ty& _b)
+ {
+ return _a > _b ? _a : _b;
+ }
+
+ template<typename Ty>
+ inline Ty min(const Ty& _a, const Ty& _b, const Ty& _c)
+ {
+ return min(min(_a, _b), _c);
+ }
+
+ template<typename Ty>
+ inline Ty max(const Ty& _a, const Ty& _b, const Ty& _c)
+ {
+ return max(max(_a, _b), _c);
+ }
+
+ template<typename Ty>
+ inline Ty mid(const Ty& _a, const Ty& _b, const Ty& _c)
+ {
+ return max(min(_a, _b), min(max(_a, _b), _c) );
+ }
+
+ template<typename Ty>
+ inline Ty clamp(const Ty& _a, const Ty& _min, const Ty& _max)
+ {
+ return max(min(_a, _max), _min);
+ }
+
} // namespace bx
diff --git a/3rdparty/bx/include/bx/inline/cpu.inl b/3rdparty/bx/include/bx/inline/cpu.inl
new file mode 100644
index 00000000000..f4d8aa70047
--- /dev/null
+++ b/3rdparty/bx/include/bx/inline/cpu.inl
@@ -0,0 +1,332 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#ifndef BX_CPU_H_HEADER_GUARD
+# error "Must be included from bx/cpu.h!"
+#endif // BX_CPU_H_HEADER_GUARD
+
+#if BX_COMPILER_MSVC
+# include <emmintrin.h> // _mm_fence
+
+extern "C" void _ReadBarrier();
+# pragma intrinsic(_ReadBarrier)
+
+extern "C" void _WriteBarrier();
+# pragma intrinsic(_WriteBarrier)
+
+extern "C" void _ReadWriteBarrier();
+# pragma intrinsic(_ReadWriteBarrier)
+
+extern "C" long _InterlockedExchangeAdd(long volatile* _ptr, long _value);
+# pragma intrinsic(_InterlockedExchangeAdd)
+
+extern "C" int64_t __cdecl _InterlockedExchangeAdd64(int64_t volatile* _ptr, int64_t _value);
+//# pragma intrinsic(_InterlockedExchangeAdd64)
+
+extern "C" long _InterlockedCompareExchange(long volatile* _ptr, long _exchange, long _comparand);
+# pragma intrinsic(_InterlockedCompareExchange)
+
+extern "C" int64_t _InterlockedCompareExchange64(int64_t volatile* _ptr, int64_t _exchange, int64_t _comparand);
+# pragma intrinsic(_InterlockedCompareExchange64)
+
+extern "C" void* _InterlockedExchangePointer(void* volatile* _ptr, void* _value);
+# pragma intrinsic(_InterlockedExchangePointer)
+
+# if BX_PLATFORM_WINRT
+# define _InterlockedExchangeAdd64 InterlockedExchangeAdd64
+# endif // BX_PLATFORM_WINRT
+#endif // BX_COMPILER_MSVC
+
+namespace bx
+{
+ inline void readBarrier()
+ {
+#if BX_COMPILER_MSVC
+ _ReadBarrier();
+#else
+ asm volatile("":::"memory");
+#endif // BX_COMPILER
+ }
+
+ inline void writeBarrier()
+ {
+#if BX_COMPILER_MSVC
+ _WriteBarrier();
+#else
+ asm volatile("":::"memory");
+#endif // BX_COMPILER
+ }
+
+ inline void readWriteBarrier()
+ {
+#if BX_COMPILER_MSVC
+ _ReadWriteBarrier();
+#else
+ asm volatile("":::"memory");
+#endif // BX_COMPILER
+ }
+
+ inline void memoryBarrier()
+ {
+#if BX_PLATFORM_WINRT
+ MemoryBarrier();
+#elif BX_COMPILER_MSVC
+ _mm_mfence();
+#else
+ __sync_synchronize();
+#endif // BX_COMPILER
+ }
+
+ template<>
+ inline int32_t atomicCompareAndSwap<int32_t>(volatile int32_t* _ptr, int32_t _old, int32_t _new)
+ {
+#if BX_COMPILER_MSVC
+ return int32_t(_InterlockedCompareExchange( (volatile long*)(_ptr), long(_new), long(_old) ) );
+#else
+ return __sync_val_compare_and_swap( (volatile int32_t*)_ptr, _old, _new);
+#endif // BX_COMPILER
+ }
+
+ template<>
+ inline uint32_t atomicCompareAndSwap<uint32_t>(volatile uint32_t* _ptr, uint32_t _old, uint32_t _new)
+ {
+#if BX_COMPILER_MSVC
+ return uint32_t(_InterlockedCompareExchange( (volatile long*)(_ptr), long(_new), long(_old) ) );
+#else
+ return __sync_val_compare_and_swap( (volatile int32_t*)_ptr, _old, _new);
+#endif // BX_COMPILER
+ }
+
+ template<>
+ inline int64_t atomicCompareAndSwap<int64_t>(volatile int64_t* _ptr, int64_t _old, int64_t _new)
+ {
+#if BX_COMPILER_MSVC
+ return _InterlockedCompareExchange64(_ptr, _new, _old);
+#else
+ return __sync_val_compare_and_swap( (volatile int64_t*)_ptr, _old, _new);
+#endif // BX_COMPILER
+ }
+
+ template<>
+ inline uint64_t atomicCompareAndSwap<uint64_t>(volatile uint64_t* _ptr, uint64_t _old, uint64_t _new)
+ {
+#if BX_COMPILER_MSVC
+ return uint64_t(_InterlockedCompareExchange64( (volatile int64_t*)(_ptr), int64_t(_new), int64_t(_old) ) );
+#else
+ return __sync_val_compare_and_swap( (volatile int64_t*)_ptr, _old, _new);
+#endif // BX_COMPILER
+ }
+
+ template<>
+ inline int32_t atomicFetchAndAdd<int32_t>(volatile int32_t* _ptr, int32_t _add)
+ {
+#if BX_COMPILER_MSVC
+ return _InterlockedExchangeAdd( (volatile long*)_ptr, _add);
+#else
+ return __sync_fetch_and_add(_ptr, _add);
+#endif // BX_COMPILER_
+ }
+
+ template<>
+ inline uint32_t atomicFetchAndAdd<uint32_t>(volatile uint32_t* _ptr, uint32_t _add)
+ {
+ return uint32_t(atomicFetchAndAdd<int32_t>( (volatile int32_t*)_ptr, int32_t(_add) ) );
+ }
+
+ template<>
+ inline int64_t atomicFetchAndAdd<int64_t>(volatile int64_t* _ptr, int64_t _add)
+ {
+#if BX_COMPILER_MSVC
+# if _WIN32_WINNT >= 0x600
+ return _InterlockedExchangeAdd64( (volatile int64_t*)_ptr, _add);
+# else
+ int64_t oldVal;
+ int64_t newVal = *(int64_t volatile*)_ptr;
+ do
+ {
+ oldVal = newVal;
+ newVal = atomicCompareAndSwap<int64_t>(_ptr, oldVal, newVal + _add);
+
+ } while (oldVal != newVal);
+
+ return oldVal;
+# endif
+#else
+ return __sync_fetch_and_add(_ptr, _add);
+#endif // BX_COMPILER_
+ }
+
+ template<>
+ inline uint64_t atomicFetchAndAdd<uint64_t>(volatile uint64_t* _ptr, uint64_t _add)
+ {
+ return uint64_t(atomicFetchAndAdd<int64_t>( (volatile int64_t*)_ptr, int64_t(_add) ) );
+ }
+
+ template<>
+ inline int32_t atomicAddAndFetch<int32_t>(volatile int32_t* _ptr, int32_t _add)
+ {
+#if BX_COMPILER_MSVC
+ return atomicFetchAndAdd(_ptr, _add) + _add;
+#else
+ return __sync_add_and_fetch(_ptr, _add);
+#endif // BX_COMPILER_
+ }
+
+ template<>
+ inline int64_t atomicAddAndFetch<int64_t>(volatile int64_t* _ptr, int64_t _add)
+ {
+#if BX_COMPILER_MSVC
+ return atomicFetchAndAdd(_ptr, _add) + _add;
+#else
+ return __sync_add_and_fetch(_ptr, _add);
+#endif // BX_COMPILER_
+ }
+
+ template<>
+ inline uint32_t atomicAddAndFetch<uint32_t>(volatile uint32_t* _ptr, uint32_t _add)
+ {
+ return uint32_t(atomicAddAndFetch<int32_t>( (volatile int32_t*)_ptr, int32_t(_add) ) );
+ }
+
+ template<>
+ inline uint64_t atomicAddAndFetch<uint64_t>(volatile uint64_t* _ptr, uint64_t _add)
+ {
+ return uint64_t(atomicAddAndFetch<int64_t>( (volatile int64_t*)_ptr, int64_t(_add) ) );
+ }
+
+ template<>
+ inline int32_t atomicFetchAndSub<int32_t>(volatile int32_t* _ptr, int32_t _sub)
+ {
+#if BX_COMPILER_MSVC
+ return atomicFetchAndAdd(_ptr, -_sub);
+#else
+ return __sync_fetch_and_sub(_ptr, _sub);
+#endif // BX_COMPILER_
+ }
+
+ template<>
+ inline int64_t atomicFetchAndSub<int64_t>(volatile int64_t* _ptr, int64_t _sub)
+ {
+#if BX_COMPILER_MSVC
+ return atomicFetchAndAdd(_ptr, -_sub);
+#else
+ return __sync_fetch_and_sub(_ptr, _sub);
+#endif // BX_COMPILER_
+ }
+
+ template<>
+ inline uint32_t atomicFetchAndSub<uint32_t>(volatile uint32_t* _ptr, uint32_t _add)
+ {
+ return uint32_t(atomicFetchAndSub<int32_t>( (volatile int32_t*)_ptr, int32_t(_add) ) );
+ }
+
+ template<>
+ inline uint64_t atomicFetchAndSub<uint64_t>(volatile uint64_t* _ptr, uint64_t _add)
+ {
+ return uint64_t(atomicFetchAndSub<int64_t>( (volatile int64_t*)_ptr, int64_t(_add) ) );
+ }
+
+ template<>
+ inline int32_t atomicSubAndFetch<int32_t>(volatile int32_t* _ptr, int32_t _sub)
+ {
+#if BX_COMPILER_MSVC
+ return atomicFetchAndAdd(_ptr, -_sub) - _sub;
+#else
+ return __sync_sub_and_fetch(_ptr, _sub);
+#endif // BX_COMPILER_
+ }
+
+ template<>
+ inline int64_t atomicSubAndFetch<int64_t>(volatile int64_t* _ptr, int64_t _sub)
+ {
+#if BX_COMPILER_MSVC
+ return atomicFetchAndAdd(_ptr, -_sub) - _sub;
+#else
+ return __sync_sub_and_fetch(_ptr, _sub);
+#endif // BX_COMPILER_
+ }
+
+ template<>
+ inline uint32_t atomicSubAndFetch<uint32_t>(volatile uint32_t* _ptr, uint32_t _add)
+ {
+ return uint32_t(atomicSubAndFetch<int32_t>( (volatile int32_t*)_ptr, int32_t(_add) ) );
+ }
+
+ template<>
+ inline uint64_t atomicSubAndFetch<uint64_t>(volatile uint64_t* _ptr, uint64_t _add)
+ {
+ return uint64_t(atomicSubAndFetch<int64_t>( (volatile int64_t*)_ptr, int64_t(_add) ) );
+ }
+
+ template<typename Ty>
+ inline Ty atomicFetchTestAndAdd(volatile Ty* _ptr, Ty _test, Ty _value)
+ {
+ Ty oldVal;
+ Ty newVal = *_ptr;
+ do
+ {
+ oldVal = newVal;
+ newVal = atomicCompareAndSwap<Ty>(_ptr, oldVal, newVal >= _test ? _test : newVal+_value);
+
+ } while (oldVal != newVal);
+
+ return oldVal;
+ }
+
+ template<typename Ty>
+ inline Ty atomicFetchTestAndSub(volatile Ty* _ptr, Ty _test, Ty _value)
+ {
+ Ty oldVal;
+ Ty newVal = *_ptr;
+ do
+ {
+ oldVal = newVal;
+ newVal = atomicCompareAndSwap<Ty>(_ptr, oldVal, newVal <= _test ? _test : newVal-_value);
+
+ } while (oldVal != newVal);
+
+ return oldVal;
+ }
+
+ template<typename Ty>
+ Ty atomicFetchAndAddsat(volatile Ty* _ptr, Ty _value, Ty _max)
+ {
+ Ty oldVal;
+ Ty newVal = *_ptr;
+ do
+ {
+ oldVal = newVal;
+ newVal = atomicCompareAndSwap<Ty>(_ptr, oldVal, newVal >= _max ? _max : min(_max, newVal+_value) );
+
+ } while (oldVal != newVal && oldVal != _max);
+
+ return oldVal;
+ }
+
+ template<typename Ty>
+ Ty atomicFetchAndSubsat(volatile Ty* _ptr, Ty _value, Ty _min)
+ {
+ Ty oldVal;
+ Ty newVal = *_ptr;
+ do
+ {
+ oldVal = newVal;
+ newVal = atomicCompareAndSwap<Ty>(_ptr, oldVal, newVal <= _min ? _min : max(_min, newVal-_value) );
+
+ } while (oldVal != newVal && oldVal != _min);
+
+ return oldVal;
+ }
+
+ inline void* atomicExchangePtr(void** _ptr, void* _new)
+ {
+#if BX_COMPILER_MSVC
+ return _InterlockedExchangePointer(_ptr, _new);
+#else
+ return __sync_lock_test_and_set(_ptr, _new);
+#endif // BX_COMPILER
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/include/bx/inline/easing.inl b/3rdparty/bx/include/bx/inline/easing.inl
index b23edb1128a..d1e64ed20c6 100644
--- a/3rdparty/bx/include/bx/inline/easing.inl
+++ b/3rdparty/bx/include/bx/inline/easing.inl
@@ -29,6 +29,16 @@ namespace bx
return _t;
}
+ inline float easeStep(float _t)
+ {
+ return _t < 0.5f ? 0.0f : 1.0f;
+ }
+
+ inline float easeSmoothStep(float _t)
+ {
+ return fsq(_t)*(3.0f - 2.0f*_t);
+ }
+
inline float easeInQuad(float _t)
{
return fsq(_t);
@@ -111,7 +121,7 @@ namespace bx
inline float easeInSine(float _t)
{
- return 1.0f - fcos(_t*piHalf);
+ return 1.0f - fcos(_t*kPiHalf);
}
inline float easeOutSine(float _t)
@@ -171,7 +181,7 @@ namespace bx
inline float easeOutElastic(float _t)
{
- return fpow(2.0f, -10.0f*_t)*fsin( (_t-0.3f/4.0f)*(2.0f*pi)/0.3f) + 1.0f;
+ return fpow(2.0f, -10.0f*_t)*fsin( (_t-0.3f/4.0f)*(2.0f*kPi)/0.3f) + 1.0f;
}
inline float easeInElastic(float _t)
@@ -191,7 +201,7 @@ namespace bx
inline float easeInBack(float _t)
{
- return easeInCubic(_t) - _t*fsin(_t*pi);
+ return easeInCubic(_t) - _t*fsin(_t*kPi);
}
inline float easeOutBack(float _t)
diff --git a/3rdparty/bx/include/bx/inline/float4x4_t.inl b/3rdparty/bx/include/bx/inline/float4x4_t.inl
new file mode 100644
index 00000000000..ea6873b5065
--- /dev/null
+++ b/3rdparty/bx/include/bx/inline/float4x4_t.inl
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#ifndef BX_FLOAT4X4_H_HEADER_GUARD
+# error "Must be included from bx/float4x4.h!"
+#endif // BX_FLOAT4X4_H_HEADER_GUARD
+
+namespace bx
+{
+ BX_SIMD_FORCE_INLINE simd128_t simd_mul_xyz1(simd128_t _a, const float4x4_t* _b)
+ {
+ const simd128_t xxxx = simd_swiz_xxxx(_a);
+ const simd128_t yyyy = simd_swiz_yyyy(_a);
+ const simd128_t zzzz = simd_swiz_zzzz(_a);
+ const simd128_t col0 = simd_mul(_b->col[0], xxxx);
+ const simd128_t col1 = simd_mul(_b->col[1], yyyy);
+ const simd128_t col2 = simd_madd(_b->col[2], zzzz, col0);
+ const simd128_t col3 = simd_add(_b->col[3], col1);
+ const simd128_t result = simd_add(col2, col3);
+
+ return result;
+ }
+
+ BX_SIMD_FORCE_INLINE simd128_t simd_mul(simd128_t _a, const float4x4_t* _b)
+ {
+ const simd128_t xxxx = simd_swiz_xxxx(_a);
+ const simd128_t yyyy = simd_swiz_yyyy(_a);
+ const simd128_t zzzz = simd_swiz_zzzz(_a);
+ const simd128_t wwww = simd_swiz_wwww(_a);
+ const simd128_t col0 = simd_mul(_b->col[0], xxxx);
+ const simd128_t col1 = simd_mul(_b->col[1], yyyy);
+ const simd128_t col2 = simd_madd(_b->col[2], zzzz, col0);
+ const simd128_t col3 = simd_madd(_b->col[3], wwww, col1);
+ const simd128_t result = simd_add(col2, col3);
+
+ return result;
+ }
+
+ BX_SIMD_INLINE void float4x4_mul(float4x4_t* _result, const float4x4_t* _a, const float4x4_t* _b)
+ {
+ _result->col[0] = simd_mul(_a->col[0], _b);
+ _result->col[1] = simd_mul(_a->col[1], _b);
+ _result->col[2] = simd_mul(_a->col[2], _b);
+ _result->col[3] = simd_mul(_a->col[3], _b);
+ }
+
+ BX_SIMD_FORCE_INLINE void float4x4_transpose(float4x4_t* _result, const float4x4_t* _mtx)
+ {
+ const simd128_t aibj = simd_shuf_xAyB(_mtx->col[0], _mtx->col[2]); // aibj
+ const simd128_t emfn = simd_shuf_xAyB(_mtx->col[1], _mtx->col[3]); // emfn
+ const simd128_t ckdl = simd_shuf_zCwD(_mtx->col[0], _mtx->col[2]); // ckdl
+ const simd128_t gohp = simd_shuf_zCwD(_mtx->col[1], _mtx->col[3]); // gohp
+ _result->col[0] = simd_shuf_xAyB(aibj, emfn); // aeim
+ _result->col[1] = simd_shuf_zCwD(aibj, emfn); // bfjn
+ _result->col[2] = simd_shuf_xAyB(ckdl, gohp); // cgko
+ _result->col[3] = simd_shuf_zCwD(ckdl, gohp); // dhlp
+ }
+
+ BX_SIMD_INLINE void float4x4_inverse(float4x4_t* _result, const float4x4_t* _a)
+ {
+ const simd128_t tmp0 = simd_shuf_xAzC(_a->col[0], _a->col[1]);
+ const simd128_t tmp1 = simd_shuf_xAzC(_a->col[2], _a->col[3]);
+ const simd128_t tmp2 = simd_shuf_yBwD(_a->col[0], _a->col[1]);
+ const simd128_t tmp3 = simd_shuf_yBwD(_a->col[2], _a->col[3]);
+ const simd128_t t0 = simd_shuf_xyAB(tmp0, tmp1);
+ const simd128_t t1 = simd_shuf_xyAB(tmp3, tmp2);
+ const simd128_t t2 = simd_shuf_zwCD(tmp0, tmp1);
+ const simd128_t t3 = simd_shuf_zwCD(tmp3, tmp2);
+
+ const simd128_t t23 = simd_mul(t2, t3);
+ const simd128_t t23_yxwz = simd_swiz_yxwz(t23);
+ const simd128_t t23_wzyx = simd_swiz_wzyx(t23);
+
+ simd128_t cof0, cof1, cof2, cof3;
+
+ const simd128_t zero = simd_zero();
+ cof0 = simd_nmsub(t1, t23_yxwz, zero);
+ cof0 = simd_madd(t1, t23_wzyx, cof0);
+
+ cof1 = simd_nmsub(t0, t23_yxwz, zero);
+ cof1 = simd_madd(t0, t23_wzyx, cof1);
+ cof1 = simd_swiz_zwxy(cof1);
+
+ const simd128_t t12 = simd_mul(t1, t2);
+ const simd128_t t12_yxwz = simd_swiz_yxwz(t12);
+ const simd128_t t12_wzyx = simd_swiz_wzyx(t12);
+
+ cof0 = simd_madd(t3, t12_yxwz, cof0);
+ cof0 = simd_nmsub(t3, t12_wzyx, cof0);
+
+ cof3 = simd_mul(t0, t12_yxwz);
+ cof3 = simd_nmsub(t0, t12_wzyx, cof3);
+ cof3 = simd_swiz_zwxy(cof3);
+
+ const simd128_t t1_zwxy = simd_swiz_zwxy(t1);
+ const simd128_t t2_zwxy = simd_swiz_zwxy(t2);
+
+ const simd128_t t13 = simd_mul(t1_zwxy, t3);
+ const simd128_t t13_yxwz = simd_swiz_yxwz(t13);
+ const simd128_t t13_wzyx = simd_swiz_wzyx(t13);
+
+ cof0 = simd_madd(t2_zwxy, t13_yxwz, cof0);
+ cof0 = simd_nmsub(t2_zwxy, t13_wzyx, cof0);
+
+ cof2 = simd_mul(t0, t13_yxwz);
+ cof2 = simd_nmsub(t0, t13_wzyx, cof2);
+ cof2 = simd_swiz_zwxy(cof2);
+
+ const simd128_t t01 = simd_mul(t0, t1);
+ const simd128_t t01_yxwz = simd_swiz_yxwz(t01);
+ const simd128_t t01_wzyx = simd_swiz_wzyx(t01);
+
+ cof2 = simd_nmsub(t3, t01_yxwz, cof2);
+ cof2 = simd_madd(t3, t01_wzyx, cof2);
+
+ cof3 = simd_madd(t2_zwxy, t01_yxwz, cof3);
+ cof3 = simd_nmsub(t2_zwxy, t01_wzyx, cof3);
+
+ const simd128_t t03 = simd_mul(t0, t3);
+ const simd128_t t03_yxwz = simd_swiz_yxwz(t03);
+ const simd128_t t03_wzyx = simd_swiz_wzyx(t03);
+
+ cof1 = simd_nmsub(t2_zwxy, t03_yxwz, cof1);
+ cof1 = simd_madd(t2_zwxy, t03_wzyx, cof1);
+
+ cof2 = simd_madd(t1, t03_yxwz, cof2);
+ cof2 = simd_nmsub(t1, t03_wzyx, cof2);
+
+ const simd128_t t02 = simd_mul(t0, t2_zwxy);
+ const simd128_t t02_yxwz = simd_swiz_yxwz(t02);
+ const simd128_t t02_wzyx = simd_swiz_wzyx(t02);
+
+ cof1 = simd_madd(t3, t02_yxwz, cof1);
+ cof1 = simd_nmsub(t3, t02_wzyx, cof1);
+
+ cof3 = simd_nmsub(t1, t02_yxwz, cof3);
+ cof3 = simd_madd(t1, t02_wzyx, cof3);
+
+ const simd128_t det = simd_dot(t0, cof0);
+ const simd128_t invdet = simd_rcp(det);
+
+ _result->col[0] = simd_mul(cof0, invdet);
+ _result->col[1] = simd_mul(cof1, invdet);
+ _result->col[2] = simd_mul(cof2, invdet);
+ _result->col[3] = simd_mul(cof3, invdet);
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/include/bx/inline/fpumath.inl b/3rdparty/bx/include/bx/inline/fpumath.inl
deleted file mode 100644
index e87b8272b2c..00000000000
--- a/3rdparty/bx/include/bx/inline/fpumath.inl
+++ /dev/null
@@ -1,1352 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
- */
-
-// FPU math lib
-
-#ifndef BX_FPU_MATH_H_HEADER_GUARD
-# error "Must be included from bx/fpumath.h!"
-#endif // BX_FPU_MATH_H_HEADER_GUARD
-
-namespace bx
-{
- inline float toRad(float _deg)
- {
- return _deg * pi / 180.0f;
- }
-
- inline float toDeg(float _rad)
- {
- return _rad * 180.0f / pi;
- }
-
- inline uint32_t floatToBits(float _a)
- {
- union { float f; uint32_t ui; } u = { _a };
- return u.ui;
- }
-
- inline float bitsToFloat(uint32_t _a)
- {
- union { uint32_t ui; float f; } u = { _a };
- return u.f;
- }
-
- inline uint64_t doubleToBits(double _a)
- {
- union { double f; uint64_t ui; } u = { _a };
- return u.ui;
- }
-
- inline double bitsToDouble(uint64_t _a)
- {
- union { uint64_t ui; double f; } u = { _a };
- return u.f;
- }
-
- inline bool isNan(float _f)
- {
- const uint32_t tmp = floatToBits(_f) & INT32_MAX;
- return tmp > UINT32_C(0x7f800000);
- }
-
- inline bool isNan(double _f)
- {
- const uint64_t tmp = doubleToBits(_f) & INT64_MAX;
- return tmp > UINT64_C(0x7ff0000000000000);
- }
-
- inline bool isFinite(float _f)
- {
- const uint32_t tmp = floatToBits(_f) & INT32_MAX;
- return tmp < UINT32_C(0x7f800000);
- }
-
- inline bool isFinite(double _f)
- {
- const uint64_t tmp = doubleToBits(_f) & INT64_MAX;
- return tmp < UINT64_C(0x7ff0000000000000);
- }
-
- inline bool isInfinite(float _f)
- {
- const uint32_t tmp = floatToBits(_f) & INT32_MAX;
- return tmp == UINT32_C(0x7f800000);
- }
-
- inline bool isInfinite(double _f)
- {
- const uint64_t tmp = doubleToBits(_f) & INT64_MAX;
- return tmp == UINT64_C(0x7ff0000000000000);
- }
-
- inline float fround(float _f)
- {
- return ffloor(_f + 0.5f);
- }
-
- inline float fmin(float _a, float _b)
- {
- return _a < _b ? _a : _b;
- }
-
- inline float fmax(float _a, float _b)
- {
- return _a > _b ? _a : _b;
- }
-
- inline float fmin3(float _a, float _b, float _c)
- {
- return fmin(_a, fmin(_b, _c) );
- }
-
- inline float fmax3(float _a, float _b, float _c)
- {
- return fmax(_a, fmax(_b, _c) );
- }
-
- inline float fclamp(float _a, float _min, float _max)
- {
- return fmin(fmax(_a, _min), _max);
- }
-
- inline float fsaturate(float _a)
- {
- return fclamp(_a, 0.0f, 1.0f);
- }
-
- inline float flerp(float _a, float _b, float _t)
- {
- return _a + (_b - _a) * _t;
- }
-
- inline float fsign(float _a)
- {
- return _a < 0.0f ? -1.0f : 1.0f;
- }
-
- inline float fsq(float _a)
- {
- return _a * _a;
- }
-
- inline float fexp2(float _a)
- {
- return fpow(2.0f, _a);
- }
-
- inline float flog2(float _a)
- {
- return flog(_a) * 1.442695041f;
- }
-
- inline float frsqrt(float _a)
- {
- return 1.0f/fsqrt(_a);
- }
-
- inline float ffract(float _a)
- {
- return _a - ffloor(_a);
- }
-
- inline bool fequal(float _a, float _b, float _epsilon)
- {
- // http://realtimecollisiondetection.net/blog/?p=89
- const float lhs = fabsolute(_a - _b);
- const float rhs = _epsilon * fmax3(1.0f, fabsolute(_a), fabsolute(_b) );
- return lhs <= rhs;
- }
-
- inline bool fequal(const float* _a, const float* _b, uint32_t _num, float _epsilon)
- {
- bool equal = fequal(_a[0], _b[0], _epsilon);
- for (uint32_t ii = 1; equal && ii < _num; ++ii)
- {
- equal = fequal(_a[ii], _b[ii], _epsilon);
- }
- return equal;
- }
-
- inline float fwrap(float _a, float _wrap)
- {
- const float mod = fmod(_a, _wrap);
- const float result = mod < 0.0f ? _wrap + mod : mod;
- return result;
- }
-
- inline float fstep(float _edge, float _a)
- {
- return _a < _edge ? 0.0f : 1.0f;
- }
-
- inline float fpulse(float _a, float _start, float _end)
- {
- return fstep(_a, _start) - fstep(_a, _end);
- }
-
- inline float fsmoothstep(float _a)
- {
- return fsq(_a)*(3.0f - 2.0f*_a);
- }
-
- inline float fbias(float _time, float _bias)
- {
- return _time / ( ( (1.0f/_bias - 2.0f)*(1.0f - _time) ) + 1.0f);
- }
-
- inline float fgain(float _time, float _gain)
- {
- if (_time < 0.5f)
- {
- return fbias(_time * 2.0f, _gain) * 0.5f;
- }
-
- return fbias(_time * 2.0f - 1.0f, 1.0f - _gain) * 0.5f + 0.5f;
- }
-
- inline void vec3Move(float* _result, const float* _a)
- {
- _result[0] = _a[0];
- _result[1] = _a[1];
- _result[2] = _a[2];
- }
-
- inline void vec3Abs(float* _result, const float* _a)
- {
- _result[0] = fabsolute(_a[0]);
- _result[1] = fabsolute(_a[1]);
- _result[2] = fabsolute(_a[2]);
- }
-
- inline void vec3Neg(float* _result, const float* _a)
- {
- _result[0] = -_a[0];
- _result[1] = -_a[1];
- _result[2] = -_a[2];
- }
-
- inline void vec3Add(float* _result, const float* _a, const float* _b)
- {
- _result[0] = _a[0] + _b[0];
- _result[1] = _a[1] + _b[1];
- _result[2] = _a[2] + _b[2];
- }
-
- inline void vec3Add(float* _result, const float* _a, float _b)
- {
- _result[0] = _a[0] + _b;
- _result[1] = _a[1] + _b;
- _result[2] = _a[2] + _b;
- }
-
- inline void vec3Sub(float* _result, const float* _a, const float* _b)
- {
- _result[0] = _a[0] - _b[0];
- _result[1] = _a[1] - _b[1];
- _result[2] = _a[2] - _b[2];
- }
-
- inline void vec3Sub(float* _result, const float* _a, float _b)
- {
- _result[0] = _a[0] - _b;
- _result[1] = _a[1] - _b;
- _result[2] = _a[2] - _b;
- }
-
- inline void vec3Mul(float* _result, const float* _a, const float* _b)
- {
- _result[0] = _a[0] * _b[0];
- _result[1] = _a[1] * _b[1];
- _result[2] = _a[2] * _b[2];
- }
-
- inline void vec3Mul(float* _result, const float* _a, float _b)
- {
- _result[0] = _a[0] * _b;
- _result[1] = _a[1] * _b;
- _result[2] = _a[2] * _b;
- }
-
- inline float vec3Dot(const float* _a, const float* _b)
- {
- return _a[0]*_b[0] + _a[1]*_b[1] + _a[2]*_b[2];
- }
-
- inline void vec3Cross(float* _result, const float* _a, const float* _b)
- {
- _result[0] = _a[1]*_b[2] - _a[2]*_b[1];
- _result[1] = _a[2]*_b[0] - _a[0]*_b[2];
- _result[2] = _a[0]*_b[1] - _a[1]*_b[0];
- }
-
- inline float vec3Length(const float* _a)
- {
- return fsqrt(vec3Dot(_a, _a) );
- }
-
- inline void vec3Lerp(float* _result, const float* _a, const float* _b, float _t)
- {
- _result[0] = flerp(_a[0], _b[0], _t);
- _result[1] = flerp(_a[1], _b[1], _t);
- _result[2] = flerp(_a[2], _b[2], _t);
- }
-
- inline void vec3Lerp(float* _result, const float* _a, const float* _b, const float* _c)
- {
- _result[0] = flerp(_a[0], _b[0], _c[0]);
- _result[1] = flerp(_a[1], _b[1], _c[1]);
- _result[2] = flerp(_a[2], _b[2], _c[2]);
- }
-
- inline float vec3Norm(float* _result, const float* _a)
- {
- const float len = vec3Length(_a);
- const float invLen = 1.0f/len;
- _result[0] = _a[0] * invLen;
- _result[1] = _a[1] * invLen;
- _result[2] = _a[2] * invLen;
- return len;
- }
-
- inline void vec3Min(float* _result, const float* _a, const float* _b)
- {
- _result[0] = fmin(_a[0], _b[0]);
- _result[1] = fmin(_a[1], _b[1]);
- _result[2] = fmin(_a[2], _b[2]);
- }
-
- inline void vec3Max(float* _result, const float* _a, const float* _b)
- {
- _result[0] = fmax(_a[0], _b[0]);
- _result[1] = fmax(_a[1], _b[1]);
- _result[2] = fmax(_a[2], _b[2]);
- }
-
- inline void vec3Rcp(float* _result, const float* _a)
- {
- _result[0] = 1.0f / _a[0];
- _result[1] = 1.0f / _a[1];
- _result[2] = 1.0f / _a[2];
- }
-
- inline void vec3TangentFrame(const float* _n, float* _t, float* _b)
- {
- const float nx = _n[0];
- const float ny = _n[1];
- const float nz = _n[2];
-
- if (bx::fabsolute(nx) > bx::fabsolute(nz) )
- {
- float invLen = 1.0f / bx::fsqrt(nx*nx + nz*nz);
- _t[0] = -nz * invLen;
- _t[1] = 0.0f;
- _t[2] = nx * invLen;
- }
- else
- {
- float invLen = 1.0f / bx::fsqrt(ny*ny + nz*nz);
- _t[0] = 0.0f;
- _t[1] = nz * invLen;
- _t[2] = -ny * invLen;
- }
-
- bx::vec3Cross(_b, _n, _t);
- }
-
- inline void vec3TangentFrame(const float* _n, float* _t, float* _b, float _angle)
- {
- vec3TangentFrame(_n, _t, _b);
-
- const float sa = fsin(_angle);
- const float ca = fcos(_angle);
-
- _t[0] = -sa * _b[0] + ca * _t[0];
- _t[1] = -sa * _b[1] + ca * _t[1];
- _t[2] = -sa * _b[2] + ca * _t[2];
-
- bx::vec3Cross(_b, _n, _t);
- }
-
- inline void quatIdentity(float* _result)
- {
- _result[0] = 0.0f;
- _result[1] = 0.0f;
- _result[2] = 0.0f;
- _result[3] = 1.0f;
- }
-
- inline void quatMove(float* _result, const float* _a)
- {
- _result[0] = _a[0];
- _result[1] = _a[1];
- _result[2] = _a[2];
- _result[3] = _a[3];
- }
-
- inline void quatMulXYZ(float* _result, const float* _qa, const float* _qb)
- {
- const float ax = _qa[0];
- const float ay = _qa[1];
- const float az = _qa[2];
- const float aw = _qa[3];
-
- const float bx = _qb[0];
- const float by = _qb[1];
- const float bz = _qb[2];
- const float bw = _qb[3];
-
- _result[0] = aw * bx + ax * bw + ay * bz - az * by;
- _result[1] = aw * by - ax * bz + ay * bw + az * bx;
- _result[2] = aw * bz + ax * by - ay * bx + az * bw;
- }
-
- inline void quatMul(float* _result, const float* _qa, const float* _qb)
- {
- const float ax = _qa[0];
- const float ay = _qa[1];
- const float az = _qa[2];
- const float aw = _qa[3];
-
- const float bx = _qb[0];
- const float by = _qb[1];
- const float bz = _qb[2];
- const float bw = _qb[3];
-
- _result[0] = aw * bx + ax * bw + ay * bz - az * by;
- _result[1] = aw * by - ax * bz + ay * bw + az * bx;
- _result[2] = aw * bz + ax * by - ay * bx + az * bw;
- _result[3] = aw * bw - ax * bx - ay * by - az * bz;
- }
-
- inline void quatInvert(float* _result, const float* _quat)
- {
- _result[0] = -_quat[0];
- _result[1] = -_quat[1];
- _result[2] = -_quat[2];
- _result[3] = _quat[3];
- }
-
- inline float quatDot(const float* _a, const float* _b)
- {
- return _a[0]*_b[0]
- + _a[1]*_b[1]
- + _a[2]*_b[2]
- + _a[3]*_b[3]
- ;
- }
-
- inline void quatNorm(float* _result, const float* _quat)
- {
- const float norm = quatDot(_quat, _quat);
- if (0.0f < norm)
- {
- const float invNorm = 1.0f / fsqrt(norm);
- _result[0] = _quat[0] * invNorm;
- _result[1] = _quat[1] * invNorm;
- _result[2] = _quat[2] * invNorm;
- _result[3] = _quat[3] * invNorm;
- }
- else
- {
- quatIdentity(_result);
- }
- }
-
- inline void quatToEuler(float* _result, const float* _quat)
- {
- const float x = _quat[0];
- const float y = _quat[1];
- const float z = _quat[2];
- const float w = _quat[3];
-
- const float yy = y * y;
- const float zz = z * z;
-
- const float xx = x * x;
- _result[0] = fatan2(2.0f * (x * w - y * z), 1.0f - 2.0f * (xx + zz) );
- _result[1] = fatan2(2.0f * (y * w + x * z), 1.0f - 2.0f * (yy + zz) );
- _result[2] = fasin (2.0f * (x * y + z * w) );
- }
-
- inline void quatRotateAxis(float* _result, const float* _axis, float _angle)
- {
- const float ha = _angle * 0.5f;
- const float ca = fcos(ha);
- const float sa = fsin(ha);
- _result[0] = _axis[0] * sa;
- _result[1] = _axis[1] * sa;
- _result[2] = _axis[2] * sa;
- _result[3] = ca;
- }
-
- inline void quatRotateX(float* _result, float _ax)
- {
- const float hx = _ax * 0.5f;
- const float cx = fcos(hx);
- const float sx = fsin(hx);
- _result[0] = sx;
- _result[1] = 0.0f;
- _result[2] = 0.0f;
- _result[3] = cx;
- }
-
- inline void quatRotateY(float* _result, float _ay)
- {
- const float hy = _ay * 0.5f;
- const float cy = fcos(hy);
- const float sy = fsin(hy);
- _result[0] = 0.0f;
- _result[1] = sy;
- _result[2] = 0.0f;
- _result[3] = cy;
- }
-
- inline void quatRotateZ(float* _result, float _az)
- {
- const float hz = _az * 0.5f;
- const float cz = fcos(hz);
- const float sz = fsin(hz);
- _result[0] = 0.0f;
- _result[1] = 0.0f;
- _result[2] = sz;
- _result[3] = cz;
- }
-
- inline void vec3MulQuat(float* _result, const float* _vec, const float* _quat)
- {
- float tmp0[4];
- quatInvert(tmp0, _quat);
-
- float qv[4];
- qv[0] = _vec[0];
- qv[1] = _vec[1];
- qv[2] = _vec[2];
- qv[3] = 0.0f;
-
- float tmp1[4];
- quatMul(tmp1, tmp0, qv);
-
- quatMulXYZ(_result, tmp1, _quat);
- }
-
- inline void mtxIdentity(float* _result)
- {
- memSet(_result, 0, sizeof(float)*16);
- _result[0] = _result[5] = _result[10] = _result[15] = 1.0f;
- }
-
- inline void mtxTranslate(float* _result, float _tx, float _ty, float _tz)
- {
- mtxIdentity(_result);
- _result[12] = _tx;
- _result[13] = _ty;
- _result[14] = _tz;
- }
-
- inline void mtxScale(float* _result, float _sx, float _sy, float _sz)
- {
- memSet(_result, 0, sizeof(float) * 16);
- _result[0] = _sx;
- _result[5] = _sy;
- _result[10] = _sz;
- _result[15] = 1.0f;
- }
-
- inline void mtxScale(float* _result, float _scale)
- {
- mtxScale(_result, _scale, _scale, _scale);
- }
-
- inline void mtxFromNormal(float* _result, const float* _normal, float _scale, const float* _pos)
- {
- float tangent[3];
- float bitangent[3];
- vec3TangentFrame(_normal, tangent, bitangent);
-
- vec3Mul(&_result[ 0], bitangent, _scale);
- vec3Mul(&_result[ 4], _normal, _scale);
- vec3Mul(&_result[ 8], tangent, _scale);
-
- _result[ 3] = 0.0f;
- _result[ 7] = 0.0f;
- _result[11] = 0.0f;
- _result[12] = _pos[0];
- _result[13] = _pos[1];
- _result[14] = _pos[2];
- _result[15] = 1.0f;
- }
-
- inline void mtxFromNormal(float* _result, const float* _normal, float _scale, const float* _pos, float _angle)
- {
- float tangent[3];
- float bitangent[3];
- vec3TangentFrame(_normal, tangent, bitangent, _angle);
-
- vec3Mul(&_result[ 0], bitangent, _scale);
- vec3Mul(&_result[ 4], _normal, _scale);
- vec3Mul(&_result[ 8], tangent, _scale);
-
- _result[ 3] = 0.0f;
- _result[ 7] = 0.0f;
- _result[11] = 0.0f;
- _result[12] = _pos[0];
- _result[13] = _pos[1];
- _result[14] = _pos[2];
- _result[15] = 1.0f;
- }
-
- inline void mtxQuat(float* _result, const float* _quat)
- {
- const float x = _quat[0];
- const float y = _quat[1];
- const float z = _quat[2];
- const float w = _quat[3];
-
- const float x2 = x + x;
- const float y2 = y + y;
- const float z2 = z + z;
- const float x2x = x2 * x;
- const float x2y = x2 * y;
- const float x2z = x2 * z;
- const float x2w = x2 * w;
- const float y2y = y2 * y;
- const float y2z = y2 * z;
- const float y2w = y2 * w;
- const float z2z = z2 * z;
- const float z2w = z2 * w;
-
- _result[ 0] = 1.0f - (y2y + z2z);
- _result[ 1] = x2y - z2w;
- _result[ 2] = x2z + y2w;
- _result[ 3] = 0.0f;
-
- _result[ 4] = x2y + z2w;
- _result[ 5] = 1.0f - (x2x + z2z);
- _result[ 6] = y2z - x2w;
- _result[ 7] = 0.0f;
-
- _result[ 8] = x2z - y2w;
- _result[ 9] = y2z + x2w;
- _result[10] = 1.0f - (x2x + y2y);
- _result[11] = 0.0f;
-
- _result[12] = 0.0f;
- _result[13] = 0.0f;
- _result[14] = 0.0f;
- _result[15] = 1.0f;
- }
-
- inline void mtxQuatTranslation(float* _result, const float* _quat, const float* _translation)
- {
- mtxQuat(_result, _quat);
- _result[12] = -(_result[0]*_translation[0] + _result[4]*_translation[1] + _result[ 8]*_translation[2]);
- _result[13] = -(_result[1]*_translation[0] + _result[5]*_translation[1] + _result[ 9]*_translation[2]);
- _result[14] = -(_result[2]*_translation[0] + _result[6]*_translation[1] + _result[10]*_translation[2]);
- }
-
- inline void mtxQuatTranslationHMD(float* _result, const float* _quat, const float* _translation)
- {
- float quat[4];
- quat[0] = -_quat[0];
- quat[1] = -_quat[1];
- quat[2] = _quat[2];
- quat[3] = _quat[3];
- mtxQuatTranslation(_result, quat, _translation);
- }
-
- inline void mtxLookAt_Impl(float* _result, const float* _eye, const float* _view, const float* _up)
- {
- float up[3] = { 0.0f, 1.0f, 0.0f };
- if (NULL != _up)
- {
- up[0] = _up[0];
- up[1] = _up[1];
- up[2] = _up[2];
- }
-
- float tmp[4];
- vec3Cross(tmp, up, _view);
-
- float right[4];
- vec3Norm(right, tmp);
-
- vec3Cross(up, _view, right);
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = right[0];
- _result[ 1] = up[0];
- _result[ 2] = _view[0];
-
- _result[ 4] = right[1];
- _result[ 5] = up[1];
- _result[ 6] = _view[1];
-
- _result[ 8] = right[2];
- _result[ 9] = up[2];
- _result[10] = _view[2];
-
- _result[12] = -vec3Dot(right, _eye);
- _result[13] = -vec3Dot(up, _eye);
- _result[14] = -vec3Dot(_view, _eye);
- _result[15] = 1.0f;
- }
-
- inline void mtxLookAtLh(float* _result, const float* _eye, const float* _at, const float* _up)
- {
- float tmp[4];
- vec3Sub(tmp, _at, _eye);
-
- float view[4];
- vec3Norm(view, tmp);
-
- mtxLookAt_Impl(_result, _eye, view, _up);
- }
-
- inline void mtxLookAtRh(float* _result, const float* _eye, const float* _at, const float* _up)
- {
- float tmp[4];
- vec3Sub(tmp, _eye, _at);
-
- float view[4];
- vec3Norm(view, tmp);
-
- mtxLookAt_Impl(_result, _eye, view, _up);
- }
-
- inline void mtxLookAt(float* _result, const float* _eye, const float* _at, const float* _up)
- {
- mtxLookAtLh(_result, _eye, _at, _up);
- }
-
- template <Handness::Enum HandnessT>
- inline void mtxProjXYWH(float* _result, float _x, float _y, float _width, float _height, float _near, float _far, bool _oglNdc)
- {
- const float diff = _far-_near;
- const float aa = _oglNdc ? (_far+_near)/diff : _far/diff;
- const float bb = _oglNdc ? (2.0f*_far*_near)/diff : _near*aa;
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = _width;
- _result[ 5] = _height;
- _result[ 8] = (Handness::Right == HandnessT) ? _x : -_x;
- _result[ 9] = (Handness::Right == HandnessT) ? _y : -_y;
- _result[10] = (Handness::Right == HandnessT) ? -aa : aa;
- _result[11] = (Handness::Right == HandnessT) ? -1.0f : 1.0f;
- _result[14] = -bb;
- }
-
- template <Handness::Enum HandnessT>
- inline void mtxProj_impl(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc)
- {
- const float invDiffRl = 1.0f/(_rt - _lt);
- const float invDiffUd = 1.0f/(_ut - _dt);
- const float width = 2.0f*_near * invDiffRl;
- const float height = 2.0f*_near * invDiffUd;
- const float xx = (_rt + _lt) * invDiffRl;
- const float yy = (_ut + _dt) * invDiffUd;
- mtxProjXYWH<HandnessT>(_result, xx, yy, width, height, _near, _far, _oglNdc);
- }
-
- template <Handness::Enum HandnessT>
- inline void mtxProj_impl(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<HandnessT>(_result, _fov[0], _fov[1], _fov[2], _fov[3], _near, _far, _oglNdc);
- }
-
- template <Handness::Enum HandnessT>
- inline void mtxProj_impl(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc)
- {
- const float height = 1.0f/ftan(toRad(_fovy)*0.5f);
- const float width = height * 1.0f/_aspect;
- mtxProjXYWH<HandnessT>(_result, 0.0f, 0.0f, width, height, _near, _far, _oglNdc);
- }
-
- inline void mtxProj(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc);
- }
-
- inline void mtxProj(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<Handness::Left>(_result, _fov, _near, _far, _oglNdc);
- }
-
- inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<Handness::Left>(_result, _fovy, _aspect, _near, _far, _oglNdc);
- }
-
- inline void mtxProjLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc);
- }
-
- inline void mtxProjLh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<Handness::Left>(_result, _fov, _near, _far, _oglNdc);
- }
-
- inline void mtxProjLh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<Handness::Left>(_result, _fovy, _aspect, _near, _far, _oglNdc);
- }
-
- inline void mtxProjRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<Handness::Right>(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc);
- }
-
- inline void mtxProjRh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<Handness::Right>(_result, _fov, _near, _far, _oglNdc);
- }
-
- inline void mtxProjRh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc)
- {
- mtxProj_impl<Handness::Right>(_result, _fovy, _aspect, _near, _far, _oglNdc);
- }
-
- template <NearFar::Enum NearFarT, Handness::Enum HandnessT>
- inline void mtxProjInfXYWH(float* _result, float _x, float _y, float _width, float _height, float _near, bool _oglNdc)
- {
- float aa;
- float bb;
- if (BX_ENABLED(NearFar::Reverse == NearFarT) )
- {
- aa = _oglNdc ? -1.0f : 0.0f;
- bb = _oglNdc ? -2.0f*_near : -_near;
- }
- else
- {
- aa = 1.0f;
- bb = _oglNdc ? 2.0f*_near : _near;
- }
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = _width;
- _result[ 5] = _height;
- _result[ 8] = (Handness::Right == HandnessT) ? _x : -_x;
- _result[ 9] = (Handness::Right == HandnessT) ? _y : -_y;
- _result[10] = (Handness::Right == HandnessT) ? -aa : aa;
- _result[11] = (Handness::Right == HandnessT) ? -1.0f : 1.0f;
- _result[14] = -bb;
- }
-
- template <NearFar::Enum NearFarT, Handness::Enum HandnessT>
- inline void mtxProjInf_impl(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
- {
- const float invDiffRl = 1.0f/(_rt - _lt);
- const float invDiffUd = 1.0f/(_ut - _dt);
- const float width = 2.0f*_near * invDiffRl;
- const float height = 2.0f*_near * invDiffUd;
- const float xx = (_rt + _lt) * invDiffRl;
- const float yy = (_ut + _dt) * invDiffUd;
- mtxProjInfXYWH<NearFarT,HandnessT>(_result, xx, yy, width, height, _near, _oglNdc);
- }
-
- template <NearFar::Enum NearFarT, Handness::Enum HandnessT>
- inline void mtxProjInf_impl(float* _result, const float _fov[4], float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFarT,HandnessT>(_result, _fov[0], _fov[1], _fov[2], _fov[3], _near, _oglNdc);
- }
-
- template <NearFar::Enum NearFarT, Handness::Enum HandnessT>
- inline void mtxProjInf_impl(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
- {
- const float height = 1.0f/ftan(toRad(_fovy)*0.5f);
- const float width = height * 1.0f/_aspect;
- mtxProjInfXYWH<NearFarT,HandnessT>(_result, 0.0f, 0.0f, width, height, _near, _oglNdc);
- }
-
- inline void mtxProjInf(float* _result, const float _fov[4], float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Default,Handness::Left>(_result, _fov, _near, _oglNdc);
- }
-
- inline void mtxProjInf(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Default,Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
- }
-
- inline void mtxProjInf(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Default,Handness::Left>(_result, _fovy, _aspect, _near, _oglNdc);
- }
-
- inline void mtxProjInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Default,Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
- }
-
- inline void mtxProjInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Default,Handness::Left>(_result, _fov, _near, _oglNdc);
- }
-
- inline void mtxProjInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Default,Handness::Left>(_result, _fovy, _aspect, _near, _oglNdc);
- }
-
- inline void mtxProjInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Default,Handness::Right>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
- }
-
- inline void mtxProjInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Default,Handness::Right>(_result, _fov, _near, _oglNdc);
- }
-
- inline void mtxProjInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Default,Handness::Right>(_result, _fovy, _aspect, _near, _oglNdc);
- }
-
- inline void mtxProjRevInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Reverse,Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
- }
-
- inline void mtxProjRevInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Reverse,Handness::Left>(_result, _fov, _near, _oglNdc);
- }
-
- inline void mtxProjRevInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Reverse,Handness::Left>(_result, _fovy, _aspect, _near, _oglNdc);
- }
-
- inline void mtxProjRevInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Reverse,Handness::Right>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
- }
-
- inline void mtxProjRevInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Reverse,Handness::Right>(_result, _fov, _near, _oglNdc);
- }
-
- inline void mtxProjRevInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
- {
- mtxProjInf_impl<NearFar::Reverse,Handness::Right>(_result, _fovy, _aspect, _near, _oglNdc);
- }
-
- template <Handness::Enum HandnessT>
- inline void mtxOrtho_impl(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc)
- {
- const float aa = 2.0f/(_right - _left);
- const float bb = 2.0f/(_top - _bottom);
- const float cc = (_oglNdc ? 2.0f : 1.0f) / (_far - _near);
- const float dd = (_left + _right)/(_left - _right);
- const float ee = (_top + _bottom)/(_bottom - _top);
- const float ff = _oglNdc ? (_near + _far)/(_near - _far) : _near/(_near - _far);
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = aa;
- _result[ 5] = bb;
- _result[10] = (Handness::Right == HandnessT) ? -cc : cc;
- _result[12] = dd + _offset;
- _result[13] = ee;
- _result[14] = ff;
- _result[15] = 1.0f;
- }
-
- inline void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc)
- {
- mtxOrtho_impl<Handness::Left>(_result, _left, _right, _bottom, _top, _near, _far, _offset, _oglNdc);
- }
-
- inline void mtxOrthoLh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc)
- {
- mtxOrtho_impl<Handness::Left>(_result, _left, _right, _bottom, _top, _near, _far, _offset, _oglNdc);
- }
-
- inline void mtxOrthoRh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc)
- {
- mtxOrtho_impl<Handness::Right>(_result, _left, _right, _bottom, _top, _near, _far, _offset, _oglNdc);
- }
-
- inline void mtxRotateX(float* _result, float _ax)
- {
- const float sx = fsin(_ax);
- const float cx = fcos(_ax);
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = 1.0f;
- _result[ 5] = cx;
- _result[ 6] = -sx;
- _result[ 9] = sx;
- _result[10] = cx;
- _result[15] = 1.0f;
- }
-
- inline void mtxRotateY(float* _result, float _ay)
- {
- const float sy = fsin(_ay);
- const float cy = fcos(_ay);
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = cy;
- _result[ 2] = sy;
- _result[ 5] = 1.0f;
- _result[ 8] = -sy;
- _result[10] = cy;
- _result[15] = 1.0f;
- }
-
- inline void mtxRotateZ(float* _result, float _az)
- {
- const float sz = fsin(_az);
- const float cz = fcos(_az);
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = cz;
- _result[ 1] = -sz;
- _result[ 4] = sz;
- _result[ 5] = cz;
- _result[10] = 1.0f;
- _result[15] = 1.0f;
- }
-
- inline void mtxRotateXY(float* _result, float _ax, float _ay)
- {
- const float sx = fsin(_ax);
- const float cx = fcos(_ax);
- const float sy = fsin(_ay);
- const float cy = fcos(_ay);
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = cy;
- _result[ 2] = sy;
- _result[ 4] = sx*sy;
- _result[ 5] = cx;
- _result[ 6] = -sx*cy;
- _result[ 8] = -cx*sy;
- _result[ 9] = sx;
- _result[10] = cx*cy;
- _result[15] = 1.0f;
- }
-
- inline void mtxRotateXYZ(float* _result, float _ax, float _ay, float _az)
- {
- const float sx = fsin(_ax);
- const float cx = fcos(_ax);
- const float sy = fsin(_ay);
- const float cy = fcos(_ay);
- const float sz = fsin(_az);
- const float cz = fcos(_az);
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = cy*cz;
- _result[ 1] = -cy*sz;
- _result[ 2] = sy;
- _result[ 4] = cz*sx*sy + cx*sz;
- _result[ 5] = cx*cz - sx*sy*sz;
- _result[ 6] = -cy*sx;
- _result[ 8] = -cx*cz*sy + sx*sz;
- _result[ 9] = cz*sx + cx*sy*sz;
- _result[10] = cx*cy;
- _result[15] = 1.0f;
- }
-
- inline void mtxRotateZYX(float* _result, float _ax, float _ay, float _az)
- {
- const float sx = fsin(_ax);
- const float cx = fcos(_ax);
- const float sy = fsin(_ay);
- const float cy = fcos(_ay);
- const float sz = fsin(_az);
- const float cz = fcos(_az);
-
- memSet(_result, 0, sizeof(float)*16);
- _result[ 0] = cy*cz;
- _result[ 1] = cz*sx*sy-cx*sz;
- _result[ 2] = cx*cz*sy+sx*sz;
- _result[ 4] = cy*sz;
- _result[ 5] = cx*cz + sx*sy*sz;
- _result[ 6] = -cz*sx + cx*sy*sz;
- _result[ 8] = -sy;
- _result[ 9] = cy*sx;
- _result[10] = cx*cy;
- _result[15] = 1.0f;
- };
-
- inline void mtxSRT(float* _result, float _sx, float _sy, float _sz, float _ax, float _ay, float _az, float _tx, float _ty, float _tz)
- {
- const float sx = fsin(_ax);
- const float cx = fcos(_ax);
- const float sy = fsin(_ay);
- const float cy = fcos(_ay);
- const float sz = fsin(_az);
- const float cz = fcos(_az);
-
- const float sxsz = sx*sz;
- const float cycz = cy*cz;
-
- _result[ 0] = _sx * (cycz - sxsz*sy);
- _result[ 1] = _sx * -cx*sz;
- _result[ 2] = _sx * (cz*sy + cy*sxsz);
- _result[ 3] = 0.0f;
-
- _result[ 4] = _sy * (cz*sx*sy + cy*sz);
- _result[ 5] = _sy * cx*cz;
- _result[ 6] = _sy * (sy*sz -cycz*sx);
- _result[ 7] = 0.0f;
-
- _result[ 8] = _sz * -cx*sy;
- _result[ 9] = _sz * sx;
- _result[10] = _sz * cx*cy;
- _result[11] = 0.0f;
-
- _result[12] = _tx;
- _result[13] = _ty;
- _result[14] = _tz;
- _result[15] = 1.0f;
- }
-
- inline void vec3MulMtx(float* _result, const float* _vec, const float* _mat)
- {
- _result[0] = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _mat[12];
- _result[1] = _vec[0] * _mat[ 1] + _vec[1] * _mat[5] + _vec[2] * _mat[ 9] + _mat[13];
- _result[2] = _vec[0] * _mat[ 2] + _vec[1] * _mat[6] + _vec[2] * _mat[10] + _mat[14];
- }
-
- inline void vec3MulMtxH(float* _result, const float* _vec, const float* _mat)
- {
- float xx = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _mat[12];
- float yy = _vec[0] * _mat[ 1] + _vec[1] * _mat[5] + _vec[2] * _mat[ 9] + _mat[13];
- float zz = _vec[0] * _mat[ 2] + _vec[1] * _mat[6] + _vec[2] * _mat[10] + _mat[14];
- float ww = _vec[0] * _mat[ 3] + _vec[1] * _mat[7] + _vec[2] * _mat[11] + _mat[15];
- float invW = fsign(ww)/ww;
- _result[0] = xx*invW;
- _result[1] = yy*invW;
- _result[2] = zz*invW;
- }
-
- inline void vec4MulMtx(float* _result, const float* _vec, const float* _mat)
- {
- _result[0] = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _vec[3] * _mat[12];
- _result[1] = _vec[0] * _mat[ 1] + _vec[1] * _mat[5] + _vec[2] * _mat[ 9] + _vec[3] * _mat[13];
- _result[2] = _vec[0] * _mat[ 2] + _vec[1] * _mat[6] + _vec[2] * _mat[10] + _vec[3] * _mat[14];
- _result[3] = _vec[0] * _mat[ 3] + _vec[1] * _mat[7] + _vec[2] * _mat[11] + _vec[3] * _mat[15];
- }
-
- inline void mtxMul(float* _result, const float* _a, const float* _b)
- {
- vec4MulMtx(&_result[ 0], &_a[ 0], _b);
- vec4MulMtx(&_result[ 4], &_a[ 4], _b);
- vec4MulMtx(&_result[ 8], &_a[ 8], _b);
- vec4MulMtx(&_result[12], &_a[12], _b);
- }
-
- inline void mtxTranspose(float* _result, const float* _a)
- {
- _result[ 0] = _a[ 0];
- _result[ 4] = _a[ 1];
- _result[ 8] = _a[ 2];
- _result[12] = _a[ 3];
- _result[ 1] = _a[ 4];
- _result[ 5] = _a[ 5];
- _result[ 9] = _a[ 6];
- _result[13] = _a[ 7];
- _result[ 2] = _a[ 8];
- _result[ 6] = _a[ 9];
- _result[10] = _a[10];
- _result[14] = _a[11];
- _result[ 3] = _a[12];
- _result[ 7] = _a[13];
- _result[11] = _a[14];
- _result[15] = _a[15];
- }
-
- /// Convert LH to RH projection matrix and vice versa.
- inline void mtxProjFlipHandedness(float* _dst, const float* _src)
- {
- _dst[ 0] = -_src[ 0];
- _dst[ 1] = -_src[ 1];
- _dst[ 2] = -_src[ 2];
- _dst[ 3] = -_src[ 3];
- _dst[ 4] = _src[ 4];
- _dst[ 5] = _src[ 5];
- _dst[ 6] = _src[ 6];
- _dst[ 7] = _src[ 7];
- _dst[ 8] = -_src[ 8];
- _dst[ 9] = -_src[ 9];
- _dst[10] = -_src[10];
- _dst[11] = -_src[11];
- _dst[12] = _src[12];
- _dst[13] = _src[13];
- _dst[14] = _src[14];
- _dst[15] = _src[15];
- }
-
- /// Convert LH to RH view matrix and vice versa.
- inline void mtxViewFlipHandedness(float* _dst, const float* _src)
- {
- _dst[ 0] = -_src[ 0];
- _dst[ 1] = _src[ 1];
- _dst[ 2] = -_src[ 2];
- _dst[ 3] = _src[ 3];
- _dst[ 4] = -_src[ 4];
- _dst[ 5] = _src[ 5];
- _dst[ 6] = -_src[ 6];
- _dst[ 7] = _src[ 7];
- _dst[ 8] = -_src[ 8];
- _dst[ 9] = _src[ 9];
- _dst[10] = -_src[10];
- _dst[11] = _src[11];
- _dst[12] = -_src[12];
- _dst[13] = _src[13];
- _dst[14] = -_src[14];
- _dst[15] = _src[15];
- }
-
- inline void calcNormal(float _result[3], float _va[3], float _vb[3], float _vc[3])
- {
- float ba[3];
- vec3Sub(ba, _vb, _va);
-
- float ca[3];
- vec3Sub(ca, _vc, _va);
-
- float baxca[3];
- vec3Cross(baxca, ba, ca);
-
- vec3Norm(_result, baxca);
- }
-
- inline void calcPlane(float _result[4], float _va[3], float _vb[3], float _vc[3])
- {
- float normal[3];
- calcNormal(normal, _va, _vb, _vc);
-
- _result[0] = normal[0];
- _result[1] = normal[1];
- _result[2] = normal[2];
- _result[3] = -vec3Dot(normal, _va);
- }
-
- inline void calcLinearFit2D(float _result[2], const void* _points, uint32_t _stride, uint32_t _numPoints)
- {
- float sumX = 0.0f;
- float sumY = 0.0f;
- float sumXX = 0.0f;
- float sumXY = 0.0f;
-
- const uint8_t* ptr = (const uint8_t*)_points;
- for (uint32_t ii = 0; ii < _numPoints; ++ii, ptr += _stride)
- {
- const float* point = (const float*)ptr;
- float xx = point[0];
- float yy = point[1];
- sumX += xx;
- sumY += yy;
- sumXX += xx*xx;
- sumXY += xx*yy;
- }
-
- // [ sum(x^2) sum(x) ] [ A ] = [ sum(x*y) ]
- // [ sum(x) numPoints ] [ B ] [ sum(y) ]
-
- float det = (sumXX*_numPoints - sumX*sumX);
- float invDet = 1.0f/det;
-
- _result[0] = (-sumX * sumY + _numPoints * sumXY) * invDet;
- _result[1] = (sumXX * sumY - sumX * sumXY) * invDet;
- }
-
- inline void calcLinearFit3D(float _result[3], const void* _points, uint32_t _stride, uint32_t _numPoints)
- {
- float sumX = 0.0f;
- float sumY = 0.0f;
- float sumZ = 0.0f;
- float sumXX = 0.0f;
- float sumXY = 0.0f;
- float sumXZ = 0.0f;
- float sumYY = 0.0f;
- float sumYZ = 0.0f;
-
- const uint8_t* ptr = (const uint8_t*)_points;
- for (uint32_t ii = 0; ii < _numPoints; ++ii, ptr += _stride)
- {
- const float* point = (const float*)ptr;
- float xx = point[0];
- float yy = point[1];
- float zz = point[2];
-
- sumX += xx;
- sumY += yy;
- sumZ += zz;
- sumXX += xx*xx;
- sumXY += xx*yy;
- sumXZ += xx*zz;
- sumYY += yy*yy;
- sumYZ += yy*zz;
- }
-
- // [ sum(x^2) sum(x*y) sum(x) ] [ A ] [ sum(x*z) ]
- // [ sum(x*y) sum(y^2) sum(y) ] [ B ] = [ sum(y*z) ]
- // [ sum(x) sum(y) numPoints ] [ C ] [ sum(z) ]
-
- float mtx[9] =
- {
- sumXX, sumXY, sumX,
- sumXY, sumYY, sumY,
- sumX, sumY, float(_numPoints),
- };
- float invMtx[9];
- mtx3Inverse(invMtx, mtx);
-
- _result[0] = invMtx[0]*sumXZ + invMtx[1]*sumYZ + invMtx[2]*sumZ;
- _result[1] = invMtx[3]*sumXZ + invMtx[4]*sumYZ + invMtx[5]*sumZ;
- _result[2] = invMtx[6]*sumXZ + invMtx[7]*sumYZ + invMtx[8]*sumZ;
- }
-
- inline void rgbToHsv(float _hsv[3], const float _rgb[3])
- {
- const float rr = _rgb[0];
- const float gg = _rgb[1];
- const float bb = _rgb[2];
-
- const float s0 = fstep(bb, gg);
-
- const float px = flerp(bb, gg, s0);
- const float py = flerp(gg, bb, s0);
- const float pz = flerp(-1.0f, 0.0f, s0);
- const float pw = flerp(2.0f/3.0f, -1.0f/3.0f, s0);
-
- const float s1 = fstep(px, rr);
-
- const float qx = flerp(px, rr, s1);
- const float qy = py;
- const float qz = flerp(pw, pz, s1);
- const float qw = flerp(rr, px, s1);
-
- const float dd = qx - fmin(qw, qy);
- const float ee = 1.0e-10f;
-
- _hsv[0] = fabsolute(qz + (qw - qy) / (6.0f * dd + ee) );
- _hsv[1] = dd / (qx + ee);
- _hsv[2] = qx;
- }
-
- inline void hsvToRgb(float _rgb[3], const float _hsv[3])
- {
- const float hh = _hsv[0];
- const float ss = _hsv[1];
- const float vv = _hsv[2];
-
- const float px = fabsolute(ffract(hh + 1.0f ) * 6.0f - 3.0f);
- const float py = fabsolute(ffract(hh + 2.0f/3.0f) * 6.0f - 3.0f);
- const float pz = fabsolute(ffract(hh + 1.0f/3.0f) * 6.0f - 3.0f);
-
- _rgb[0] = vv * flerp(1.0f, fsaturate(px - 1.0f), ss);
- _rgb[1] = vv * flerp(1.0f, fsaturate(py - 1.0f), ss);
- _rgb[2] = vv * flerp(1.0f, fsaturate(pz - 1.0f), ss);
- }
-
-} // namespace bx
diff --git a/3rdparty/bx/include/bx/inline/handlealloc.inl b/3rdparty/bx/include/bx/inline/handlealloc.inl
index 8738c3d7038..3ca3d41ed57 100644
--- a/3rdparty/bx/include/bx/inline/handlealloc.inl
+++ b/3rdparty/bx/include/bx/inline/handlealloc.inl
@@ -54,7 +54,7 @@ namespace bx
return handle;
}
- return invalid;
+ return kInvalidHandle;
}
inline bool HandleAlloc::isValid(uint16_t _handle) const
@@ -104,7 +104,7 @@ namespace bx
inline HandleAlloc* createHandleAlloc(AllocatorI* _allocator, uint16_t _maxHandles)
{
uint8_t* ptr = (uint8_t*)BX_ALLOC(_allocator, sizeof(HandleAlloc) + 2*_maxHandles*sizeof(uint16_t) );
- return ::new (ptr) HandleAlloc(_maxHandles);
+ return BX_PLACEMENT_NEW(ptr, HandleAlloc)(_maxHandles);
}
inline void destroyHandleAlloc(AllocatorI* _allocator, HandleAlloc* _handleAlloc)
@@ -139,12 +139,12 @@ namespace bx
template <uint16_t MaxHandlesT>
inline uint16_t HandleListT<MaxHandlesT>::popBack()
{
- uint16_t last = invalid != m_back
+ uint16_t last = kInvalidHandle != m_back
? m_back
: m_front
;
- if (invalid != last)
+ if (kInvalidHandle != last)
{
remove(last);
}
@@ -163,7 +163,7 @@ namespace bx
{
uint16_t front = m_front;
- if (invalid != front)
+ if (kInvalidHandle != front)
{
remove(front);
}
@@ -205,7 +205,7 @@ namespace bx
BX_CHECK(isValid(_handle), "Invalid handle %d!", _handle);
Link& curr = m_links[_handle];
- if (invalid != curr.m_prev)
+ if (kInvalidHandle != curr.m_prev)
{
Link& prev = m_links[curr.m_prev];
prev.m_next = curr.m_next;
@@ -215,7 +215,7 @@ namespace bx
m_front = curr.m_next;
}
- if (invalid != curr.m_next)
+ if (kInvalidHandle != curr.m_next)
{
Link& next = m_links[curr.m_next];
next.m_prev = curr.m_prev;
@@ -225,16 +225,16 @@ namespace bx
m_back = curr.m_prev;
}
- curr.m_prev = invalid;
- curr.m_next = invalid;
+ curr.m_prev = kInvalidHandle;
+ curr.m_next = kInvalidHandle;
}
template <uint16_t MaxHandlesT>
inline void HandleListT<MaxHandlesT>::reset()
{
memSet(m_links, 0xff, sizeof(m_links) );
- m_front = invalid;
- m_back = invalid;
+ m_front = kInvalidHandle;
+ m_back = kInvalidHandle;
}
template <uint16_t MaxHandlesT>
@@ -243,10 +243,10 @@ namespace bx
Link& curr = m_links[_handle];
curr.m_next = _before;
- if (invalid != _before)
+ if (kInvalidHandle != _before)
{
Link& link = m_links[_before];
- if (invalid != link.m_prev)
+ if (kInvalidHandle != link.m_prev)
{
Link& prev = m_links[link.m_prev];
prev.m_next = _handle;
@@ -265,10 +265,10 @@ namespace bx
Link& curr = m_links[_handle];
curr.m_prev = _after;
- if (invalid != _after)
+ if (kInvalidHandle != _after)
{
Link& link = m_links[_after];
- if (invalid != link.m_next)
+ if (kInvalidHandle != link.m_next)
{
Link& next = m_links[link.m_next];
next.m_prev = _handle;
@@ -292,12 +292,12 @@ namespace bx
{
Link& curr = m_links[_handle];
- if (invalid == curr.m_prev)
+ if (kInvalidHandle == curr.m_prev)
{
m_front = _handle;
}
- if (invalid == curr.m_next)
+ if (kInvalidHandle == curr.m_next)
{
m_back = _handle;
}
@@ -342,7 +342,7 @@ namespace bx
inline uint16_t HandleAllocLruT<MaxHandlesT>::alloc()
{
uint16_t handle = m_alloc.alloc();
- if (invalid != handle)
+ if (kInvalidHandle != handle)
{
m_list.pushFront(handle);
}
@@ -417,7 +417,7 @@ namespace bx
template <uint32_t MaxCapacityT, typename KeyT>
inline bool HandleHashMapT<MaxCapacityT, KeyT>::insert(KeyT _key, uint16_t _handle)
{
- if (invalid == _handle)
+ if (kInvalidHandle == _handle)
{
return false;
}
@@ -427,7 +427,7 @@ namespace bx
uint32_t idx = firstIdx;
do
{
- if (m_handle[idx] == invalid)
+ if (m_handle[idx] == kInvalidHandle)
{
m_key[idx] = _key;
m_handle[idx] = _handle;
@@ -463,7 +463,7 @@ namespace bx
template <uint32_t MaxCapacityT, typename KeyT>
inline bool HandleHashMapT<MaxCapacityT, KeyT>::removeByHandle(uint16_t _handle)
{
- if (invalid != _handle)
+ if (kInvalidHandle != _handle)
{
for (uint32_t idx = 0; idx < MaxCapacityT; ++idx)
{
@@ -486,7 +486,7 @@ namespace bx
return m_handle[idx];
}
- return invalid;
+ return kInvalidHandle;
}
template <uint32_t MaxCapacityT, typename KeyT>
@@ -512,7 +512,7 @@ namespace bx
inline typename HandleHashMapT<MaxCapacityT, KeyT>::Iterator HandleHashMapT<MaxCapacityT, KeyT>::first() const
{
Iterator it;
- it.handle = invalid;
+ it.handle = kInvalidHandle;
it.pos = 0;
it.num = m_numElements;
@@ -535,7 +535,7 @@ namespace bx
}
for (
- ;_it.pos < MaxCapacityT && invalid == m_handle[_it.pos]
+ ;_it.pos < MaxCapacityT && kInvalidHandle == m_handle[_it.pos]
; ++_it.pos
);
_it.handle = m_handle[_it.pos];
@@ -553,7 +553,7 @@ namespace bx
uint32_t idx = firstIdx;
do
{
- if (m_handle[idx] == invalid)
+ if (m_handle[idx] == kInvalidHandle)
{
return UINT32_MAX;
}
@@ -573,20 +573,20 @@ namespace bx
template <uint32_t MaxCapacityT, typename KeyT>
inline void HandleHashMapT<MaxCapacityT, KeyT>::removeIndex(uint32_t _idx)
{
- m_handle[_idx] = invalid;
+ m_handle[_idx] = kInvalidHandle;
--m_numElements;
for (uint32_t idx = (_idx + 1) % MaxCapacityT
- ; m_handle[idx] != invalid
+ ; m_handle[idx] != kInvalidHandle
; idx = (idx + 1) % MaxCapacityT)
{
- if (m_handle[idx] != invalid)
+ if (m_handle[idx] != kInvalidHandle)
{
const KeyT key = m_key[idx];
if (idx != findIndex(key) )
{
const uint16_t handle = m_handle[idx];
- m_handle[idx] = invalid;
+ m_handle[idx] = kInvalidHandle;
--m_numElements;
insert(key, handle);
}
@@ -627,16 +627,16 @@ namespace bx
inline uint16_t HandleHashMapAllocT<MaxHandlesT, KeyT>::alloc(KeyT _key)
{
uint16_t handle = m_alloc.alloc();
- if (invalid == handle)
+ if (kInvalidHandle == handle)
{
- return invalid;
+ return kInvalidHandle;
}
bool ok = m_table.insert(_key, handle);
if (!ok)
{
m_alloc.free(handle);
- return invalid;
+ return kInvalidHandle;
}
return handle;
@@ -646,7 +646,7 @@ namespace bx
inline void HandleHashMapAllocT<MaxHandlesT, KeyT>::free(KeyT _key)
{
uint16_t handle = m_table.find(_key);
- if (invalid == handle)
+ if (kInvalidHandle == handle)
{
return;
}
diff --git a/3rdparty/bx/include/bx/inline/hash.inl b/3rdparty/bx/include/bx/inline/hash.inl
index 50da33f0528..41031bbab2b 100644
--- a/3rdparty/bx/include/bx/inline/hash.inl
+++ b/3rdparty/bx/include/bx/inline/hash.inl
@@ -136,29 +136,72 @@ namespace bx
#undef MURMUR_R
#undef mmix
- inline uint32_t hashMurmur2A(const void* _data, uint32_t _size)
+ inline void HashAdler32::begin()
{
- HashMurmur2A murmur;
- murmur.begin();
- murmur.add(_data, (int)_size);
- return murmur.end();
+ m_a = 1;
+ m_b = 0;
}
- template <typename Ty>
- inline uint32_t hashMurmur2A(const Ty& _data)
+ inline void HashAdler32::add(const void* _data, int _len)
+ {
+ const uint32_t kModAdler = 65521;
+ const uint8_t* data = (const uint8_t*)_data;
+ for (; _len != 0; --_len)
+ {
+ m_a = (m_a + *data++) % kModAdler;
+ m_b = (m_b + m_a ) % kModAdler;
+ }
+ }
+
+ template<typename Ty>
+ inline void HashAdler32::add(Ty _value)
+ {
+ add(&_value, sizeof(Ty) );
+ }
+
+ inline uint32_t HashAdler32::end()
+ {
+ return m_a | (m_b<<16);
+ }
+
+ template<typename Ty>
+ inline void HashCrc32::add(Ty _value)
+ {
+ add(&_value, sizeof(Ty) );
+ }
+
+ inline uint32_t HashCrc32::end()
+ {
+ m_hash ^= UINT32_MAX;
+ return m_hash;
+ }
+
+ template<typename HashT>
+ inline uint32_t hash(const void* _data, uint32_t _size)
+ {
+ HashT hh;
+ hh.begin();
+ hh.add(_data, (int)_size);
+ return hh.end();
+ }
+
+ template<typename HashT, typename Ty>
+ inline uint32_t hash(const Ty& _data)
{
BX_STATIC_ASSERT(BX_TYPE_IS_POD(Ty) );
- return hashMurmur2A(&_data, sizeof(Ty) );
+ return hash<HashT>(&_data, sizeof(Ty) );
}
- inline uint32_t hashMurmur2A(const StringView& _data)
+ template<typename HashT>
+ inline uint32_t hash(const StringView& _data)
{
- return hashMurmur2A(_data.getPtr(), _data.getLength() );
+ return hash<HashT>(_data.getPtr(), _data.getLength() );
}
- inline uint32_t hashMurmur2A(const char* _data)
+ template<typename HashT>
+ inline uint32_t hash(const char* _data)
{
- return hashMurmur2A(StringView(_data) );
+ return hash<HashT>(StringView(_data) );
}
} // namespace bx
diff --git a/3rdparty/bx/include/bx/inline/math.inl b/3rdparty/bx/include/bx/inline/math.inl
new file mode 100644
index 00000000000..d6b8c57523a
--- /dev/null
+++ b/3rdparty/bx/include/bx/inline/math.inl
@@ -0,0 +1,834 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+// FPU math lib
+
+#ifndef BX_FPU_MATH_H_HEADER_GUARD
+# error "Must be included from bx/fpumath.h!"
+#endif // BX_FPU_MATH_H_HEADER_GUARD
+
+namespace bx
+{
+ inline float toRad(float _deg)
+ {
+ return _deg * kPi / 180.0f;
+ }
+
+ inline float toDeg(float _rad)
+ {
+ return _rad * 180.0f / kPi;
+ }
+
+ inline uint32_t floatToBits(float _a)
+ {
+ union { float f; uint32_t ui; } u = { _a };
+ return u.ui;
+ }
+
+ inline float bitsToFloat(uint32_t _a)
+ {
+ union { uint32_t ui; float f; } u = { _a };
+ return u.f;
+ }
+
+ inline uint64_t doubleToBits(double _a)
+ {
+ union { double f; uint64_t ui; } u = { _a };
+ return u.ui;
+ }
+
+ inline double bitsToDouble(uint64_t _a)
+ {
+ union { uint64_t ui; double f; } u = { _a };
+ return u.f;
+ }
+
+ inline uint32_t floatFlip(uint32_t _value)
+ {
+ // Reference:
+ // http://archive.fo/2012.12.08-212402/http://stereopsis.com/radix.html
+ const uint32_t tmp0 = uint32_sra(_value, 31);
+ const uint32_t tmp1 = uint32_neg(tmp0);
+ const uint32_t mask = uint32_or(tmp1, 0x80000000);
+ const uint32_t result = uint32_xor(_value, mask);
+ return result;
+ }
+
+ inline bool isNan(float _f)
+ {
+ const uint32_t tmp = floatToBits(_f) & INT32_MAX;
+ return tmp > UINT32_C(0x7f800000);
+ }
+
+ inline bool isNan(double _f)
+ {
+ const uint64_t tmp = doubleToBits(_f) & INT64_MAX;
+ return tmp > UINT64_C(0x7ff0000000000000);
+ }
+
+ inline bool isFinite(float _f)
+ {
+ const uint32_t tmp = floatToBits(_f) & INT32_MAX;
+ return tmp < UINT32_C(0x7f800000);
+ }
+
+ inline bool isFinite(double _f)
+ {
+ const uint64_t tmp = doubleToBits(_f) & INT64_MAX;
+ return tmp < UINT64_C(0x7ff0000000000000);
+ }
+
+ inline bool isInfinite(float _f)
+ {
+ const uint32_t tmp = floatToBits(_f) & INT32_MAX;
+ return tmp == UINT32_C(0x7f800000);
+ }
+
+ inline bool isInfinite(double _f)
+ {
+ const uint64_t tmp = doubleToBits(_f) & INT64_MAX;
+ return tmp == UINT64_C(0x7ff0000000000000);
+ }
+
+ inline float fround(float _f)
+ {
+ return ffloor(_f + 0.5f);
+ }
+
+ inline float fmin(float _a, float _b)
+ {
+ return _a < _b ? _a : _b;
+ }
+
+ inline float fmax(float _a, float _b)
+ {
+ return _a > _b ? _a : _b;
+ }
+
+ inline float fmin3(float _a, float _b, float _c)
+ {
+ return fmin(_a, fmin(_b, _c) );
+ }
+
+ inline float fmax3(float _a, float _b, float _c)
+ {
+ return fmax(_a, fmax(_b, _c) );
+ }
+
+ inline float fclamp(float _a, float _min, float _max)
+ {
+ return fmin(fmax(_a, _min), _max);
+ }
+
+ inline float fsaturate(float _a)
+ {
+ return fclamp(_a, 0.0f, 1.0f);
+ }
+
+ inline float flerp(float _a, float _b, float _t)
+ {
+ return _a + (_b - _a) * _t;
+ }
+
+ inline float fsign(float _a)
+ {
+ return _a < 0.0f ? -1.0f : 1.0f;
+ }
+
+ inline float fsq(float _a)
+ {
+ return _a * _a;
+ }
+
+ inline float fexp2(float _a)
+ {
+ return fpow(2.0f, _a);
+ }
+
+ inline float flog2(float _a)
+ {
+ return flog(_a) * kInvLogNat2;
+ }
+
+ inline float frsqrt(float _a)
+ {
+ return 1.0f/fsqrt(_a);
+ }
+
+ inline float ffract(float _a)
+ {
+ return _a - ffloor(_a);
+ }
+
+ inline bool fequal(float _a, float _b, float _epsilon)
+ {
+ // http://realtimecollisiondetection.net/blog/?p=89
+ const float lhs = fabs(_a - _b);
+ const float rhs = _epsilon * fmax3(1.0f, fabs(_a), fabs(_b) );
+ return lhs <= rhs;
+ }
+
+ inline bool fequal(const float* _a, const float* _b, uint32_t _num, float _epsilon)
+ {
+ bool equal = fequal(_a[0], _b[0], _epsilon);
+ for (uint32_t ii = 1; equal && ii < _num; ++ii)
+ {
+ equal = fequal(_a[ii], _b[ii], _epsilon);
+ }
+ return equal;
+ }
+
+ inline float fwrap(float _a, float _wrap)
+ {
+ const float mod = fmod(_a, _wrap);
+ const float result = mod < 0.0f ? _wrap + mod : mod;
+ return result;
+ }
+
+ inline float fstep(float _edge, float _a)
+ {
+ return _a < _edge ? 0.0f : 1.0f;
+ }
+
+ inline float fpulse(float _a, float _start, float _end)
+ {
+ return fstep(_a, _start) - fstep(_a, _end);
+ }
+
+ inline float fsmoothstep(float _a)
+ {
+ return fsq(_a)*(3.0f - 2.0f*_a);
+ }
+
+ inline float fbias(float _time, float _bias)
+ {
+ return _time / ( ( (1.0f/_bias - 2.0f)*(1.0f - _time) ) + 1.0f);
+ }
+
+ inline float fgain(float _time, float _gain)
+ {
+ if (_time < 0.5f)
+ {
+ return fbias(_time * 2.0f, _gain) * 0.5f;
+ }
+
+ return fbias(_time * 2.0f - 1.0f, 1.0f - _gain) * 0.5f + 0.5f;
+ }
+
+ inline float angleDiff(float _a, float _b)
+ {
+ const float dist = fwrap(_b - _a, kPi2);
+ return fwrap(dist*2.0f, kPi2) - dist;
+ }
+
+ inline float angleLerp(float _a, float _b, float _t)
+ {
+ return _a + angleDiff(_a, _b) * _t;
+ }
+
+ inline void vec3Move(float* _result, const float* _a)
+ {
+ _result[0] = _a[0];
+ _result[1] = _a[1];
+ _result[2] = _a[2];
+ }
+
+ inline void vec3Abs(float* _result, const float* _a)
+ {
+ _result[0] = fabs(_a[0]);
+ _result[1] = fabs(_a[1]);
+ _result[2] = fabs(_a[2]);
+ }
+
+ inline void vec3Neg(float* _result, const float* _a)
+ {
+ _result[0] = -_a[0];
+ _result[1] = -_a[1];
+ _result[2] = -_a[2];
+ }
+
+ inline void vec3Add(float* _result, const float* _a, const float* _b)
+ {
+ _result[0] = _a[0] + _b[0];
+ _result[1] = _a[1] + _b[1];
+ _result[2] = _a[2] + _b[2];
+ }
+
+ inline void vec3Add(float* _result, const float* _a, float _b)
+ {
+ _result[0] = _a[0] + _b;
+ _result[1] = _a[1] + _b;
+ _result[2] = _a[2] + _b;
+ }
+
+ inline void vec3Sub(float* _result, const float* _a, const float* _b)
+ {
+ _result[0] = _a[0] - _b[0];
+ _result[1] = _a[1] - _b[1];
+ _result[2] = _a[2] - _b[2];
+ }
+
+ inline void vec3Sub(float* _result, const float* _a, float _b)
+ {
+ _result[0] = _a[0] - _b;
+ _result[1] = _a[1] - _b;
+ _result[2] = _a[2] - _b;
+ }
+
+ inline void vec3Mul(float* _result, const float* _a, const float* _b)
+ {
+ _result[0] = _a[0] * _b[0];
+ _result[1] = _a[1] * _b[1];
+ _result[2] = _a[2] * _b[2];
+ }
+
+ inline void vec3Mul(float* _result, const float* _a, float _b)
+ {
+ _result[0] = _a[0] * _b;
+ _result[1] = _a[1] * _b;
+ _result[2] = _a[2] * _b;
+ }
+
+ inline float vec3Dot(const float* _a, const float* _b)
+ {
+ return _a[0]*_b[0] + _a[1]*_b[1] + _a[2]*_b[2];
+ }
+
+ inline void vec3Cross(float* _result, const float* _a, const float* _b)
+ {
+ _result[0] = _a[1]*_b[2] - _a[2]*_b[1];
+ _result[1] = _a[2]*_b[0] - _a[0]*_b[2];
+ _result[2] = _a[0]*_b[1] - _a[1]*_b[0];
+ }
+
+ inline float vec3Length(const float* _a)
+ {
+ return fsqrt(vec3Dot(_a, _a) );
+ }
+
+ inline void vec3Lerp(float* _result, const float* _a, const float* _b, float _t)
+ {
+ _result[0] = flerp(_a[0], _b[0], _t);
+ _result[1] = flerp(_a[1], _b[1], _t);
+ _result[2] = flerp(_a[2], _b[2], _t);
+ }
+
+ inline void vec3Lerp(float* _result, const float* _a, const float* _b, const float* _c)
+ {
+ _result[0] = flerp(_a[0], _b[0], _c[0]);
+ _result[1] = flerp(_a[1], _b[1], _c[1]);
+ _result[2] = flerp(_a[2], _b[2], _c[2]);
+ }
+
+ inline float vec3Norm(float* _result, const float* _a)
+ {
+ const float len = vec3Length(_a);
+ const float invLen = 1.0f/len;
+ _result[0] = _a[0] * invLen;
+ _result[1] = _a[1] * invLen;
+ _result[2] = _a[2] * invLen;
+ return len;
+ }
+
+ inline void vec3Min(float* _result, const float* _a, const float* _b)
+ {
+ _result[0] = fmin(_a[0], _b[0]);
+ _result[1] = fmin(_a[1], _b[1]);
+ _result[2] = fmin(_a[2], _b[2]);
+ }
+
+ inline void vec3Max(float* _result, const float* _a, const float* _b)
+ {
+ _result[0] = fmax(_a[0], _b[0]);
+ _result[1] = fmax(_a[1], _b[1]);
+ _result[2] = fmax(_a[2], _b[2]);
+ }
+
+ inline void vec3Rcp(float* _result, const float* _a)
+ {
+ _result[0] = 1.0f / _a[0];
+ _result[1] = 1.0f / _a[1];
+ _result[2] = 1.0f / _a[2];
+ }
+
+ inline void vec3TangentFrame(const float* _n, float* _t, float* _b)
+ {
+ const float nx = _n[0];
+ const float ny = _n[1];
+ const float nz = _n[2];
+
+ if (bx::fabs(nx) > bx::fabs(nz) )
+ {
+ float invLen = 1.0f / bx::fsqrt(nx*nx + nz*nz);
+ _t[0] = -nz * invLen;
+ _t[1] = 0.0f;
+ _t[2] = nx * invLen;
+ }
+ else
+ {
+ float invLen = 1.0f / bx::fsqrt(ny*ny + nz*nz);
+ _t[0] = 0.0f;
+ _t[1] = nz * invLen;
+ _t[2] = -ny * invLen;
+ }
+
+ bx::vec3Cross(_b, _n, _t);
+ }
+
+ inline void vec3TangentFrame(const float* _n, float* _t, float* _b, float _angle)
+ {
+ vec3TangentFrame(_n, _t, _b);
+
+ const float sa = fsin(_angle);
+ const float ca = fcos(_angle);
+
+ _t[0] = -sa * _b[0] + ca * _t[0];
+ _t[1] = -sa * _b[1] + ca * _t[1];
+ _t[2] = -sa * _b[2] + ca * _t[2];
+
+ bx::vec3Cross(_b, _n, _t);
+ }
+
+ inline void vec3FromLatLong(float* _vec, float _u, float _v)
+ {
+ const float phi = _u * bx::kPi2;
+ const float theta = _v * bx::kPi;
+
+ const float st = bx::fsin(theta);
+ const float sp = bx::fsin(phi);
+ const float ct = bx::fcos(theta);
+ const float cp = bx::fcos(phi);
+
+ _vec[0] = -st*sp;
+ _vec[1] = ct;
+ _vec[2] = -st*cp;
+ }
+
+ inline void vec3ToLatLong(float* _u, float* _v, const float* _vec)
+ {
+ const float phi = bx::fatan2(_vec[0], _vec[2]);
+ const float theta = bx::facos(_vec[1]);
+
+ *_u = (bx::kPi + phi)*bx::kInvPi*0.5f;
+ *_v = theta*bx::kInvPi;
+ }
+
+ inline void quatIdentity(float* _result)
+ {
+ _result[0] = 0.0f;
+ _result[1] = 0.0f;
+ _result[2] = 0.0f;
+ _result[3] = 1.0f;
+ }
+
+ inline void quatMove(float* _result, const float* _a)
+ {
+ _result[0] = _a[0];
+ _result[1] = _a[1];
+ _result[2] = _a[2];
+ _result[3] = _a[3];
+ }
+
+ inline void quatMulXYZ(float* _result, const float* _qa, const float* _qb)
+ {
+ const float ax = _qa[0];
+ const float ay = _qa[1];
+ const float az = _qa[2];
+ const float aw = _qa[3];
+
+ const float bx = _qb[0];
+ const float by = _qb[1];
+ const float bz = _qb[2];
+ const float bw = _qb[3];
+
+ _result[0] = aw * bx + ax * bw + ay * bz - az * by;
+ _result[1] = aw * by - ax * bz + ay * bw + az * bx;
+ _result[2] = aw * bz + ax * by - ay * bx + az * bw;
+ }
+
+ inline void quatMul(float* _result, const float* _qa, const float* _qb)
+ {
+ const float ax = _qa[0];
+ const float ay = _qa[1];
+ const float az = _qa[2];
+ const float aw = _qa[3];
+
+ const float bx = _qb[0];
+ const float by = _qb[1];
+ const float bz = _qb[2];
+ const float bw = _qb[3];
+
+ _result[0] = aw * bx + ax * bw + ay * bz - az * by;
+ _result[1] = aw * by - ax * bz + ay * bw + az * bx;
+ _result[2] = aw * bz + ax * by - ay * bx + az * bw;
+ _result[3] = aw * bw - ax * bx - ay * by - az * bz;
+ }
+
+ inline void quatInvert(float* _result, const float* _quat)
+ {
+ _result[0] = -_quat[0];
+ _result[1] = -_quat[1];
+ _result[2] = -_quat[2];
+ _result[3] = _quat[3];
+ }
+
+ inline float quatDot(const float* _a, const float* _b)
+ {
+ return _a[0]*_b[0]
+ + _a[1]*_b[1]
+ + _a[2]*_b[2]
+ + _a[3]*_b[3]
+ ;
+ }
+
+ inline void quatNorm(float* _result, const float* _quat)
+ {
+ const float norm = quatDot(_quat, _quat);
+ if (0.0f < norm)
+ {
+ const float invNorm = 1.0f / fsqrt(norm);
+ _result[0] = _quat[0] * invNorm;
+ _result[1] = _quat[1] * invNorm;
+ _result[2] = _quat[2] * invNorm;
+ _result[3] = _quat[3] * invNorm;
+ }
+ else
+ {
+ quatIdentity(_result);
+ }
+ }
+
+ inline void quatToEuler(float* _result, const float* _quat)
+ {
+ const float x = _quat[0];
+ const float y = _quat[1];
+ const float z = _quat[2];
+ const float w = _quat[3];
+
+ const float yy = y * y;
+ const float zz = z * z;
+
+ const float xx = x * x;
+ _result[0] = fatan2(2.0f * (x * w - y * z), 1.0f - 2.0f * (xx + zz) );
+ _result[1] = fatan2(2.0f * (y * w + x * z), 1.0f - 2.0f * (yy + zz) );
+ _result[2] = fasin (2.0f * (x * y + z * w) );
+ }
+
+ inline void quatRotateAxis(float* _result, const float* _axis, float _angle)
+ {
+ const float ha = _angle * 0.5f;
+ const float ca = fcos(ha);
+ const float sa = fsin(ha);
+ _result[0] = _axis[0] * sa;
+ _result[1] = _axis[1] * sa;
+ _result[2] = _axis[2] * sa;
+ _result[3] = ca;
+ }
+
+ inline void quatRotateX(float* _result, float _ax)
+ {
+ const float hx = _ax * 0.5f;
+ const float cx = fcos(hx);
+ const float sx = fsin(hx);
+ _result[0] = sx;
+ _result[1] = 0.0f;
+ _result[2] = 0.0f;
+ _result[3] = cx;
+ }
+
+ inline void quatRotateY(float* _result, float _ay)
+ {
+ const float hy = _ay * 0.5f;
+ const float cy = fcos(hy);
+ const float sy = fsin(hy);
+ _result[0] = 0.0f;
+ _result[1] = sy;
+ _result[2] = 0.0f;
+ _result[3] = cy;
+ }
+
+ inline void quatRotateZ(float* _result, float _az)
+ {
+ const float hz = _az * 0.5f;
+ const float cz = fcos(hz);
+ const float sz = fsin(hz);
+ _result[0] = 0.0f;
+ _result[1] = 0.0f;
+ _result[2] = sz;
+ _result[3] = cz;
+ }
+
+ inline void vec3MulQuat(float* _result, const float* _vec, const float* _quat)
+ {
+ float tmp0[4];
+ quatInvert(tmp0, _quat);
+
+ float qv[4];
+ qv[0] = _vec[0];
+ qv[1] = _vec[1];
+ qv[2] = _vec[2];
+ qv[3] = 0.0f;
+
+ float tmp1[4];
+ quatMul(tmp1, tmp0, qv);
+
+ quatMulXYZ(_result, tmp1, _quat);
+ }
+
+ inline void mtxIdentity(float* _result)
+ {
+ memSet(_result, 0, sizeof(float)*16);
+ _result[0] = _result[5] = _result[10] = _result[15] = 1.0f;
+ }
+
+ inline void mtxTranslate(float* _result, float _tx, float _ty, float _tz)
+ {
+ mtxIdentity(_result);
+ _result[12] = _tx;
+ _result[13] = _ty;
+ _result[14] = _tz;
+ }
+
+ inline void mtxScale(float* _result, float _sx, float _sy, float _sz)
+ {
+ memSet(_result, 0, sizeof(float) * 16);
+ _result[0] = _sx;
+ _result[5] = _sy;
+ _result[10] = _sz;
+ _result[15] = 1.0f;
+ }
+
+ inline void mtxScale(float* _result, float _scale)
+ {
+ mtxScale(_result, _scale, _scale, _scale);
+ }
+
+ inline void mtxFromNormal(float* _result, const float* _normal, float _scale, const float* _pos)
+ {
+ float tangent[3];
+ float bitangent[3];
+ vec3TangentFrame(_normal, tangent, bitangent);
+
+ vec3Mul(&_result[ 0], bitangent, _scale);
+ vec3Mul(&_result[ 4], _normal, _scale);
+ vec3Mul(&_result[ 8], tangent, _scale);
+
+ _result[ 3] = 0.0f;
+ _result[ 7] = 0.0f;
+ _result[11] = 0.0f;
+ _result[12] = _pos[0];
+ _result[13] = _pos[1];
+ _result[14] = _pos[2];
+ _result[15] = 1.0f;
+ }
+
+ inline void mtxFromNormal(float* _result, const float* _normal, float _scale, const float* _pos, float _angle)
+ {
+ float tangent[3];
+ float bitangent[3];
+ vec3TangentFrame(_normal, tangent, bitangent, _angle);
+
+ vec3Mul(&_result[ 0], bitangent, _scale);
+ vec3Mul(&_result[ 4], _normal, _scale);
+ vec3Mul(&_result[ 8], tangent, _scale);
+
+ _result[ 3] = 0.0f;
+ _result[ 7] = 0.0f;
+ _result[11] = 0.0f;
+ _result[12] = _pos[0];
+ _result[13] = _pos[1];
+ _result[14] = _pos[2];
+ _result[15] = 1.0f;
+ }
+
+ inline void mtxQuat(float* _result, const float* _quat)
+ {
+ const float x = _quat[0];
+ const float y = _quat[1];
+ const float z = _quat[2];
+ const float w = _quat[3];
+
+ const float x2 = x + x;
+ const float y2 = y + y;
+ const float z2 = z + z;
+ const float x2x = x2 * x;
+ const float x2y = x2 * y;
+ const float x2z = x2 * z;
+ const float x2w = x2 * w;
+ const float y2y = y2 * y;
+ const float y2z = y2 * z;
+ const float y2w = y2 * w;
+ const float z2z = z2 * z;
+ const float z2w = z2 * w;
+
+ _result[ 0] = 1.0f - (y2y + z2z);
+ _result[ 1] = x2y - z2w;
+ _result[ 2] = x2z + y2w;
+ _result[ 3] = 0.0f;
+
+ _result[ 4] = x2y + z2w;
+ _result[ 5] = 1.0f - (x2x + z2z);
+ _result[ 6] = y2z - x2w;
+ _result[ 7] = 0.0f;
+
+ _result[ 8] = x2z - y2w;
+ _result[ 9] = y2z + x2w;
+ _result[10] = 1.0f - (x2x + y2y);
+ _result[11] = 0.0f;
+
+ _result[12] = 0.0f;
+ _result[13] = 0.0f;
+ _result[14] = 0.0f;
+ _result[15] = 1.0f;
+ }
+
+ inline void mtxQuatTranslation(float* _result, const float* _quat, const float* _translation)
+ {
+ mtxQuat(_result, _quat);
+ _result[12] = -(_result[0]*_translation[0] + _result[4]*_translation[1] + _result[ 8]*_translation[2]);
+ _result[13] = -(_result[1]*_translation[0] + _result[5]*_translation[1] + _result[ 9]*_translation[2]);
+ _result[14] = -(_result[2]*_translation[0] + _result[6]*_translation[1] + _result[10]*_translation[2]);
+ }
+
+ inline void mtxQuatTranslationHMD(float* _result, const float* _quat, const float* _translation)
+ {
+ float quat[4];
+ quat[0] = -_quat[0];
+ quat[1] = -_quat[1];
+ quat[2] = _quat[2];
+ quat[3] = _quat[3];
+ mtxQuatTranslation(_result, quat, _translation);
+ }
+
+ inline void vec3MulMtx(float* _result, const float* _vec, const float* _mat)
+ {
+ _result[0] = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _mat[12];
+ _result[1] = _vec[0] * _mat[ 1] + _vec[1] * _mat[5] + _vec[2] * _mat[ 9] + _mat[13];
+ _result[2] = _vec[0] * _mat[ 2] + _vec[1] * _mat[6] + _vec[2] * _mat[10] + _mat[14];
+ }
+
+ inline void vec3MulMtxXyz0(float* _result, const float* _vec, const float* _mat)
+ {
+ _result[0] = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8];
+ _result[1] = _vec[0] * _mat[ 1] + _vec[1] * _mat[5] + _vec[2] * _mat[ 9];
+ _result[2] = _vec[0] * _mat[ 2] + _vec[1] * _mat[6] + _vec[2] * _mat[10];
+ }
+
+ inline void vec3MulMtxH(float* _result, const float* _vec, const float* _mat)
+ {
+ float xx = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _mat[12];
+ float yy = _vec[0] * _mat[ 1] + _vec[1] * _mat[5] + _vec[2] * _mat[ 9] + _mat[13];
+ float zz = _vec[0] * _mat[ 2] + _vec[1] * _mat[6] + _vec[2] * _mat[10] + _mat[14];
+ float ww = _vec[0] * _mat[ 3] + _vec[1] * _mat[7] + _vec[2] * _mat[11] + _mat[15];
+ float invW = fsign(ww)/ww;
+ _result[0] = xx*invW;
+ _result[1] = yy*invW;
+ _result[2] = zz*invW;
+ }
+
+ inline void vec4MulMtx(float* _result, const float* _vec, const float* _mat)
+ {
+ _result[0] = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _vec[3] * _mat[12];
+ _result[1] = _vec[0] * _mat[ 1] + _vec[1] * _mat[5] + _vec[2] * _mat[ 9] + _vec[3] * _mat[13];
+ _result[2] = _vec[0] * _mat[ 2] + _vec[1] * _mat[6] + _vec[2] * _mat[10] + _vec[3] * _mat[14];
+ _result[3] = _vec[0] * _mat[ 3] + _vec[1] * _mat[7] + _vec[2] * _mat[11] + _vec[3] * _mat[15];
+ }
+
+ inline void mtxMul(float* _result, const float* _a, const float* _b)
+ {
+ vec4MulMtx(&_result[ 0], &_a[ 0], _b);
+ vec4MulMtx(&_result[ 4], &_a[ 4], _b);
+ vec4MulMtx(&_result[ 8], &_a[ 8], _b);
+ vec4MulMtx(&_result[12], &_a[12], _b);
+ }
+
+ inline void mtxTranspose(float* _result, const float* _a)
+ {
+ _result[ 0] = _a[ 0];
+ _result[ 4] = _a[ 1];
+ _result[ 8] = _a[ 2];
+ _result[12] = _a[ 3];
+ _result[ 1] = _a[ 4];
+ _result[ 5] = _a[ 5];
+ _result[ 9] = _a[ 6];
+ _result[13] = _a[ 7];
+ _result[ 2] = _a[ 8];
+ _result[ 6] = _a[ 9];
+ _result[10] = _a[10];
+ _result[14] = _a[11];
+ _result[ 3] = _a[12];
+ _result[ 7] = _a[13];
+ _result[11] = _a[14];
+ _result[15] = _a[15];
+ }
+
+ /// Convert LH to RH projection matrix and vice versa.
+ inline void mtxProjFlipHandedness(float* _dst, const float* _src)
+ {
+ _dst[ 0] = -_src[ 0];
+ _dst[ 1] = -_src[ 1];
+ _dst[ 2] = -_src[ 2];
+ _dst[ 3] = -_src[ 3];
+ _dst[ 4] = _src[ 4];
+ _dst[ 5] = _src[ 5];
+ _dst[ 6] = _src[ 6];
+ _dst[ 7] = _src[ 7];
+ _dst[ 8] = -_src[ 8];
+ _dst[ 9] = -_src[ 9];
+ _dst[10] = -_src[10];
+ _dst[11] = -_src[11];
+ _dst[12] = _src[12];
+ _dst[13] = _src[13];
+ _dst[14] = _src[14];
+ _dst[15] = _src[15];
+ }
+
+ /// Convert LH to RH view matrix and vice versa.
+ inline void mtxViewFlipHandedness(float* _dst, const float* _src)
+ {
+ _dst[ 0] = -_src[ 0];
+ _dst[ 1] = _src[ 1];
+ _dst[ 2] = -_src[ 2];
+ _dst[ 3] = _src[ 3];
+ _dst[ 4] = -_src[ 4];
+ _dst[ 5] = _src[ 5];
+ _dst[ 6] = -_src[ 6];
+ _dst[ 7] = _src[ 7];
+ _dst[ 8] = -_src[ 8];
+ _dst[ 9] = _src[ 9];
+ _dst[10] = -_src[10];
+ _dst[11] = _src[11];
+ _dst[12] = -_src[12];
+ _dst[13] = _src[13];
+ _dst[14] = -_src[14];
+ _dst[15] = _src[15];
+ }
+
+ inline void calcNormal(float _result[3], float _va[3], float _vb[3], float _vc[3])
+ {
+ float ba[3];
+ vec3Sub(ba, _vb, _va);
+
+ float ca[3];
+ vec3Sub(ca, _vc, _va);
+
+ float baxca[3];
+ vec3Cross(baxca, ba, ca);
+
+ vec3Norm(_result, baxca);
+ }
+
+ inline void calcPlane(float _result[4], float _va[3], float _vb[3], float _vc[3])
+ {
+ float normal[3];
+ calcNormal(normal, _va, _vb, _vc);
+
+ _result[0] = normal[0];
+ _result[1] = normal[1];
+ _result[2] = normal[2];
+ _result[3] = -vec3Dot(normal, _va);
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/include/bx/inline/mpscqueue.inl b/3rdparty/bx/include/bx/inline/mpscqueue.inl
index 0216b509788..7a336788607 100644
--- a/3rdparty/bx/include/bx/inline/mpscqueue.inl
+++ b/3rdparty/bx/include/bx/inline/mpscqueue.inl
@@ -10,7 +10,8 @@
namespace bx
{
template <typename Ty>
- inline MpScUnboundedQueueT<Ty>::MpScUnboundedQueueT()
+ inline MpScUnboundedQueueT<Ty>::MpScUnboundedQueueT(AllocatorI* _allocator)
+ : m_queue(_allocator)
{
}
@@ -39,7 +40,8 @@ namespace bx
}
template <typename Ty>
- inline MpScUnboundedBlockingQueue<Ty>::MpScUnboundedBlockingQueue()
+ inline MpScUnboundedBlockingQueue<Ty>::MpScUnboundedBlockingQueue(AllocatorI* _allocator)
+ : m_queue(_allocator)
{
}
diff --git a/3rdparty/bx/include/bx/inline/pixelformat.inl b/3rdparty/bx/include/bx/inline/pixelformat.inl
index cd4689224be..682417d7162 100644
--- a/3rdparty/bx/include/bx/inline/pixelformat.inl
+++ b/3rdparty/bx/include/bx/inline/pixelformat.inl
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2016 Branimir Karadzic. All rights reserved.
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
@@ -924,8 +924,8 @@ namespace bx
_dst[3] = float( ( (packed>>30) & 0x3) ) / 3.0f;
}
- // R11G11B10F
- inline void packR11G11B10F(void* _dst, const float* _src)
+ // RG11B10F
+ inline void packRG11B10F(void* _dst, const float* _src)
{
*( (uint32_t*)_dst) = 0
| ( (halfFromFloat(_src[0])>> 4) & 0x7ff)
@@ -934,7 +934,7 @@ namespace bx
;
}
- inline void unpackR11G11B10F(float* _dst, const void* _src)
+ inline void unpackRG11B10F(float* _dst, const void* _src)
{
uint32_t packed = *( (const uint32_t*)_src);
_dst[0] = halfToFloat( (packed<< 4) & 0x7ff0);
diff --git a/3rdparty/bx/include/bx/inline/readerwriter.inl b/3rdparty/bx/include/bx/inline/readerwriter.inl
index c2eb72a9ed5..dcdd8128da3 100644
--- a/3rdparty/bx/include/bx/inline/readerwriter.inl
+++ b/3rdparty/bx/include/bx/inline/readerwriter.inl
@@ -29,6 +29,10 @@ namespace bx
{
}
+ inline ProcessOpenI::~ProcessOpenI()
+ {
+ }
+
inline CloserI::~CloserI()
{
}
@@ -196,10 +200,10 @@ namespace bx
inline MemoryWriter::MemoryWriter(MemoryBlockI* _memBlock)
: m_memBlock(_memBlock)
- , m_data(NULL)
- , m_pos(0)
- , m_top(0)
- , m_size(0)
+ , m_data(NULL)
+ , m_pos(0)
+ , m_top(0)
+ , m_size(0)
{
}
@@ -293,6 +297,16 @@ namespace bx
return _writer->write(_data, _size, _err);
}
+ inline int32_t write(WriterI* _writer, const char* _str, Error* _err)
+ {
+ return write(_writer, _str, strLen(_str), _err);
+ }
+
+ inline int32_t write(WriterI* _writer, const StringView& _str, Error* _err)
+ {
+ return write(_writer, _str.getPtr(), _str.getLength(), _err);
+ }
+
inline int32_t writeRep(WriterI* _writer, uint8_t _byte, int32_t _size, Error* _err)
{
BX_ERROR_SCOPE(_err);
@@ -377,11 +391,19 @@ namespace bx
inline int64_t getSize(SeekerI* _seeker)
{
int64_t offset = _seeker->seek();
- int64_t size = _seeker->seek(0, Whence::End);
+ int64_t size = _seeker->seek(0, Whence::End);
_seeker->seek(offset, Whence::Begin);
return size;
}
+ inline int64_t getRemain(SeekerI* _seeker)
+ {
+ int64_t offset = _seeker->seek();
+ int64_t size = _seeker->seek(0, Whence::End);
+ _seeker->seek(offset, Whence::Begin);
+ return size-offset;
+ }
+
inline int32_t peek(ReaderSeekerI* _reader, void* _data, int32_t _size, Error* _err)
{
BX_ERROR_SCOPE(_err);
@@ -432,18 +454,24 @@ namespace bx
return 0;
}
- inline bool open(ReaderOpenI* _reader, const char* _filePath, Error* _err)
+ inline bool open(ReaderOpenI* _reader, const FilePath& _filePath, Error* _err)
{
BX_ERROR_USE_TEMP_WHEN_NULL(_err);
return _reader->open(_filePath, _err);
}
- inline bool open(WriterOpenI* _writer, const char* _filePath, bool _append, Error* _err)
+ inline bool open(WriterOpenI* _writer, const FilePath& _filePath, bool _append, Error* _err)
{
BX_ERROR_USE_TEMP_WHEN_NULL(_err);
return _writer->open(_filePath, _append, _err);
}
+ inline bool open(ProcessOpenI* _process, const FilePath& _filePath, const StringView& _args, Error* _err)
+ {
+ BX_ERROR_USE_TEMP_WHEN_NULL(_err);
+ return _process->open(_filePath, _args, _err);
+ }
+
inline void close(CloserI* _reader)
{
_reader->close();
diff --git a/3rdparty/bx/include/bx/inline/rng.inl b/3rdparty/bx/include/bx/inline/rng.inl
index 11b466dadb3..df6c8262c70 100644
--- a/3rdparty/bx/include/bx/inline/rng.inl
+++ b/3rdparty/bx/include/bx/inline/rng.inl
@@ -28,25 +28,6 @@ namespace bx
return (m_z<<16)+m_w;
}
- inline RngFib::RngFib(uint32_t _a, uint32_t _b)
- : m_a(_a)
- , m_b(_b)
- {
- }
-
- inline void RngFib::reset(uint32_t _a, uint32_t _b)
- {
- m_a = _a;
- m_b = _b;
- }
-
- inline uint32_t RngFib::gen()
- {
- m_b = m_a+m_b;
- m_a = m_b-m_a;
- return m_a;
- }
-
inline RngShr3::RngShr3(uint32_t _jsr)
: m_jsr(_jsr)
{
@@ -81,7 +62,7 @@ namespace bx
template <typename Rng>
inline void randUnitCircle(float _result[3], Rng* _rng)
{
- const float angle = frnd(_rng) * pi * 2.0f;
+ const float angle = frnd(_rng) * kPi2;
_result[0] = fcos(angle);
_result[1] = 0.0f;
@@ -92,7 +73,7 @@ namespace bx
inline void randUnitSphere(float _result[3], Rng* _rng)
{
const float rand0 = frnd(_rng) * 2.0f - 1.0f;
- const float rand1 = frnd(_rng) * pi * 2.0f;
+ const float rand1 = frnd(_rng) * kPi2;
const float sqrtf1 = fsqrt(1.0f - rand0*rand0);
_result[0] = sqrtf1 * fcos(rand1);
@@ -140,7 +121,7 @@ namespace bx
tt = 2.0f * tt - 1.0f;
const float phi = (ii + 0.5f) / _num;
- const float phirad = phi * 2.0f * pi;
+ const float phirad = phi * kPi2;
const float st = fsqrt(1.0f-tt*tt) * _scale;
float* xyz = (float*)data;
diff --git a/3rdparty/bx/include/bx/inline/simd128_langext.inl b/3rdparty/bx/include/bx/inline/simd128_langext.inl
index c89e6123349..9fa3f410bff 100644
--- a/3rdparty/bx/include/bx/inline/simd128_langext.inl
+++ b/3rdparty/bx/include/bx/inline/simd128_langext.inl
@@ -1,44 +1,11 @@
/*
- * Copyright 2010-2016 Branimir Karadzic. All rights reserved.
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
-#ifndef BX_SIMD128_LANGEXT_H_HEADER_GUARD
-#define BX_SIMD128_LANGEXT_H_HEADER_GUARD
-
-#define simd_rcp simd_rcp_ni
-#define simd_orx simd_orx_ni
-#define simd_orc simd_orc_ni
-#define simd_neg simd_neg_ni
-#define simd_madd simd_madd_ni
-#define simd_nmsub simd_nmsub_ni
-#define simd_div_nr simd_div_nr_ni
-#define simd_selb simd_selb_ni
-#define simd_sels simd_sels_ni
-#define simd_not simd_not_ni
-#define simd_abs simd_abs_ni
-#define simd_clamp simd_clamp_ni
-#define simd_lerp simd_lerp_ni
-#define simd_rcp_est simd_rcp_ni
-#define simd_rsqrt simd_rsqrt_ni
-#define simd_rsqrt_nr simd_rsqrt_nr_ni
-#define simd_rsqrt_carmack simd_rsqrt_carmack_ni
-#define simd_sqrt_nr simd_sqrt_nr_ni
-#define simd_log2 simd_log2_ni
-#define simd_exp2 simd_exp2_ni
-#define simd_pow simd_pow_ni
-#define simd_cross3 simd_cross3_ni
-#define simd_normalize3 simd_normalize3_ni
-#define simd_dot3 simd_dot3_ni
-#define simd_dot simd_dot_ni
-#define simd_ceil simd_ceil_ni
-#define simd_floor simd_floor_ni
-#define simd_min simd_min_ni
-#define simd_max simd_max_ni
-#define simd_imin simd_imin_ni
-#define simd_imax simd_imax_ni
-
-#include "simd_ni.inl"
+#ifndef BX_SIMD_T_H_HEADER_GUARD
+# error "Must be included from bx/simd_t.h!"
+#endif // BX_SIMD_T_H_HEADER_GUARD
namespace bx
{
@@ -46,13 +13,13 @@ namespace bx
#define ELEMy 1
#define ELEMz 2
#define ELEMw 3
-#define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \
- template<> \
- BX_SIMD_FORCE_INLINE simd128_langext_t simd_swiz_##_x##_y##_z##_w(simd128_langext_t _a) \
- { \
- simd128_langext_t result; \
+#define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \
+ template<> \
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_swiz_##_x##_y##_z##_w(simd128_langext_t _a) \
+ { \
+ simd128_langext_t result; \
result.vf = __builtin_shufflevector(_a.vf, _a.vf, ELEM##_x, ELEM##_y, ELEM##_z, ELEM##_w); \
- return result; \
+ return result; \
}
#include "simd128_swizzle.inl"
@@ -63,27 +30,27 @@ namespace bx
#undef ELEMy
#undef ELEMx
-#define BX_SIMD128_IMPLEMENT_TEST(_xyzw, _mask) \
- template<> \
+#define BX_SIMD128_IMPLEMENT_TEST(_xyzw, _mask) \
+ template<> \
BX_SIMD_FORCE_INLINE bool simd_test_any_##_xyzw(simd128_langext_t _test) \
- { \
- uint32_t tmp = ( (_test.uxyzw[3]>>31)<<3) \
- | ( (_test.uxyzw[2]>>31)<<2) \
- | ( (_test.uxyzw[1]>>31)<<1) \
- | ( _test.uxyzw[0]>>31) \
- ; \
- return 0 != (tmp&(_mask) ); \
- } \
- \
- template<> \
+ { \
+ uint32_t tmp = ( (_test.uxyzw[3]>>31)<<3) \
+ | ( (_test.uxyzw[2]>>31)<<2) \
+ | ( (_test.uxyzw[1]>>31)<<1) \
+ | ( _test.uxyzw[0]>>31) \
+ ; \
+ return 0 != (tmp&(_mask) ); \
+ } \
+ \
+ template<> \
BX_SIMD_FORCE_INLINE bool simd_test_all_##_xyzw(simd128_langext_t _test) \
- { \
- uint32_t tmp = ( (_test.uxyzw[3]>>31)<<3) \
- | ( (_test.uxyzw[2]>>31)<<2) \
- | ( (_test.uxyzw[1]>>31)<<1) \
- | ( _test.uxyzw[0]>>31) \
- ; \
- return (_mask) == (tmp&(_mask) ); \
+ { \
+ uint32_t tmp = ( (_test.uxyzw[3]>>31)<<3) \
+ | ( (_test.uxyzw[2]>>31)<<2) \
+ | ( (_test.uxyzw[1]>>31)<<1) \
+ | ( _test.uxyzw[0]>>31) \
+ ; \
+ return (_mask) == (tmp&(_mask) ); \
}
BX_SIMD128_IMPLEMENT_TEST(x , 0x1);
@@ -145,7 +112,7 @@ BX_SIMD128_IMPLEMENT_TEST(xyzw , 0xf);
}
template<>
- BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_yBxA(simd128_langext_t _a, simd128_langext_t _b)
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_shuf_AxBy(simd128_langext_t _a, simd128_langext_t _b)
{
simd128_langext_t result;
result.vf = __builtin_shufflevector(_a.vf, _b.vf, 1, 5, 0, 4);
@@ -508,8 +475,192 @@ BX_SIMD128_IMPLEMENT_TEST(xyzw , 0xf);
return result;
}
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_rcp(simd128_langext_t _a)
+ {
+ return simd_rcp_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_orx(simd128_langext_t _a)
+ {
+ return simd_orx_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_orc(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_orc_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_neg(simd128_langext_t _a)
+ {
+ return simd_neg_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_madd(simd128_langext_t _a, simd128_langext_t _b, simd128_langext_t _c)
+ {
+ return simd_madd_ni(_a, _b, _c);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_nmsub(simd128_langext_t _a, simd128_langext_t _b, simd128_langext_t _c)
+ {
+ return simd_nmsub_ni(_a, _b, _c);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_div_nr(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_div_nr_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_selb(simd128_langext_t _mask, simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_selb_ni(_mask, _a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_sels(simd128_langext_t _test, simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_sels_ni(_test, _a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_not(simd128_langext_t _a)
+ {
+ return simd_not_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_abs(simd128_langext_t _a)
+ {
+ return simd_abs_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_clamp(simd128_langext_t _a, simd128_langext_t _min, simd128_langext_t _max)
+ {
+ return simd_clamp_ni(_a, _min, _max);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_lerp(simd128_langext_t _a, simd128_langext_t _b, simd128_langext_t _s)
+ {
+ return simd_lerp_ni(_a, _b, _s);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_rcp_est(simd128_langext_t _a)
+ {
+ return simd_rcp_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_rsqrt(simd128_langext_t _a)
+ {
+ return simd_rsqrt_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_rsqrt_nr(simd128_langext_t _a)
+ {
+ return simd_rsqrt_nr_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_rsqrt_carmack(simd128_langext_t _a)
+ {
+ return simd_rsqrt_carmack_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_sqrt_nr(simd128_langext_t _a)
+ {
+ return simd_sqrt_nr_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_log2(simd128_langext_t _a)
+ {
+ return simd_log2_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_exp2(simd128_langext_t _a)
+ {
+ return simd_exp2_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_pow(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_pow_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_cross3(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_cross3_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_normalize3(simd128_langext_t _a)
+ {
+ return simd_normalize3_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_dot3(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_dot3_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_dot(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_dot_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_ceil(simd128_langext_t _a)
+ {
+ return simd_ceil_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_floor(simd128_langext_t _a)
+ {
+ return simd_floor_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_min(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_min_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_max(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_max_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_imin(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_imin_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_langext_t simd_imax(simd128_langext_t _a, simd128_langext_t _b)
+ {
+ return simd_imax_ni(_a, _b);
+ }
+
typedef simd128_langext_t simd128_t;
} // namespace bx
-
-#endif // BX_SIMD128_LANGEXT_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/inline/simd128_neon.inl b/3rdparty/bx/include/bx/inline/simd128_neon.inl
index 1dd0d1f12b2..356b7c79901 100644
--- a/3rdparty/bx/include/bx/inline/simd128_neon.inl
+++ b/3rdparty/bx/include/bx/inline/simd128_neon.inl
@@ -1,41 +1,11 @@
/*
- * Copyright 2010-2016 Branimir Karadzic. All rights reserved.
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
-#ifndef BX_SIMD128_NEON_H_HEADER_GUARD
-#define BX_SIMD128_NEON_H_HEADER_GUARD
-
-#define simd_rcp simd_rcp_ni
-#define simd_orx simd_orx_ni
-#define simd_orc simd_orc_ni
-#define simd_neg simd_neg_ni
-#define simd_madd simd_madd_ni
-#define simd_nmsub simd_nmsub_ni
-#define simd_div_nr simd_div_nr_ni
-#define simd_div simd_div_nr_ni
-#define simd_selb simd_selb_ni
-#define simd_sels simd_sels_ni
-#define simd_not simd_not_ni
-#define simd_abs simd_abs_ni
-#define simd_clamp simd_clamp_ni
-#define simd_lerp simd_lerp_ni
-#define simd_rsqrt simd_rsqrt_ni
-#define simd_rsqrt_nr simd_rsqrt_nr_ni
-#define simd_rsqrt_carmack simd_rsqrt_carmack_ni
-#define simd_sqrt_nr simd_sqrt_nr_ni
-#define simd_sqrt simd_sqrt_nr_ni
-#define simd_log2 simd_log2_ni
-#define simd_exp2 simd_exp2_ni
-#define simd_pow simd_pow_ni
-#define simd_cross3 simd_cross3_ni
-#define simd_normalize3 simd_normalize3_ni
-#define simd_dot3 simd_dot3_ni
-#define simd_dot simd_dot_ni
-#define simd_ceil simd_ceil_ni
-#define simd_floor simd_floor_ni
-
-#include "simd_ni.inl"
+#ifndef BX_SIMD_T_H_HEADER_GUARD
+# error "Must be included from bx/simd_t.h!"
+#endif // BX_SIMD_T_H_HEADER_GUARD
namespace bx
{
@@ -43,10 +13,10 @@ namespace bx
#define ELEMy 1
#define ELEMz 2
#define ELEMw 3
-#define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \
- template<> \
- BX_SIMD_FORCE_INLINE simd128_neon_t simd_swiz_##_x##_y##_z##_w(simd128_neon_t _a) \
- { \
+#define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \
+ template<> \
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_swiz_##_x##_y##_z##_w(simd128_neon_t _a) \
+ { \
return __builtin_shuffle(_a, (uint32x4_t){ ELEM##_x, ELEM##_y, ELEM##_z, ELEM##_w }); \
}
@@ -58,19 +28,19 @@ namespace bx
#undef ELEMy
#undef ELEMx
-#define BX_SIMD128_IMPLEMENT_TEST(_xyzw, _swizzle) \
- template<> \
+#define BX_SIMD128_IMPLEMENT_TEST(_xyzw, _swizzle) \
+ template<> \
BX_SIMD_FORCE_INLINE bool simd_test_any_##_xyzw(simd128_neon_t _test) \
- { \
- const simd128_neon_t tmp0 = simd_swiz_##_swizzle(_test); \
- return simd_test_any_ni(tmp0); \
- } \
- \
- template<> \
+ { \
+ const simd128_neon_t tmp0 = simd_swiz_##_swizzle(_test); \
+ return simd_test_any_ni(tmp0); \
+ } \
+ \
+ template<> \
BX_SIMD_FORCE_INLINE bool simd_test_all_##_xyzw(simd128_neon_t _test) \
- { \
- const simd128_neon_t tmp0 = simd_swiz_##_swizzle(_test); \
- return simd_test_all_ni(tmp0); \
+ { \
+ const simd128_neon_t tmp0 = simd_swiz_##_swizzle(_test); \
+ return simd_test_all_ni(tmp0); \
}
BX_SIMD128_IMPLEMENT_TEST(x, xxxx);
@@ -132,7 +102,7 @@ BX_SIMD128_IMPLEMENT_TEST(yzw, yzww);
}
template<>
- BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_yBxA(simd128_neon_t _a, simd128_neon_t _b)
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_shuf_AxBy(simd128_neon_t _a, simd128_neon_t _b)
{
return __builtin_shuffle(_a, _b, (uint32x4_t){ 1, 5, 0, 4 });
}
@@ -455,18 +425,6 @@ BX_SIMD128_IMPLEMENT_TEST(yzw, yzww);
}
template<>
- BX_SIMD_FORCE_INLINE simd128_neon_t simd_madd(simd128_neon_t _a, simd128_neon_t _b, simd128_neon_t _c)
- {
- return vmlaq_f32(_c, _a, _b);
- }
-
- template<>
- BX_SIMD_FORCE_INLINE simd128_neon_t simd_nmsub(simd128_neon_t _a, simd128_neon_t _b, simd128_neon_t _c)
- {
- return vmlsq_f32(_c, _a, _b);
- }
-
- template<>
BX_SIMD_FORCE_INLINE simd128_neon_t simd_icmpeq(simd128_neon_t _a, simd128_neon_t _b)
{
const int32x4_t tmp0 = vreinterpretq_s32_f32(_a);
@@ -555,8 +513,174 @@ BX_SIMD128_IMPLEMENT_TEST(yzw, yzww);
return simd_shuf_yBwD_ni(_a, _b);
}
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_rcp(simd128_neon_t _a)
+ {
+ return simd_rcp_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_orx(simd128_neon_t _a)
+ {
+ return simd_orx_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_orc(simd128_neon_t _a, simd128_neon_t _b)
+ {
+ return simd_orc_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_neg(simd128_neon_t _a)
+ {
+ return simd_neg_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_madd(simd128_neon_t _a, simd128_neon_t _b, simd128_neon_t _c)
+ {
+ return simd_madd_ni(_a, _b, _c);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_nmsub(simd128_neon_t _a, simd128_neon_t _b, simd128_neon_t _c)
+ {
+ return simd_nmsub_ni(_a, _b, _c);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_div_nr(simd128_neon_t _a, simd128_neon_t _b)
+ {
+ return simd_div_nr_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_div(simd128_neon_t _a, simd128_neon_t _b)
+ {
+ return simd_div_nr_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_selb(simd128_neon_t _mask, simd128_neon_t _a, simd128_neon_t _b)
+ {
+ return simd_selb_ni(_mask, _a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_sels(simd128_neon_t _test, simd128_neon_t _a, simd128_neon_t _b)
+ {
+ return simd_sels_ni(_test, _a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_not(simd128_neon_t _a)
+ {
+ return simd_not_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_abs(simd128_neon_t _a)
+ {
+ return simd_abs_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_clamp(simd128_neon_t _a, simd128_neon_t _min, simd128_neon_t _max)
+ {
+ return simd_clamp_ni(_a, _min, _max);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_lerp(simd128_neon_t _a, simd128_neon_t _b, simd128_neon_t _s)
+ {
+ return simd_lerp_ni(_a, _b, _s);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_rsqrt(simd128_neon_t _a)
+ {
+ return simd_rsqrt_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_rsqrt_nr(simd128_neon_t _a)
+ {
+ return simd_rsqrt_nr_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_rsqrt_carmack(simd128_neon_t _a)
+ {
+ return simd_rsqrt_carmack_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_sqrt_nr(simd128_neon_t _a)
+ {
+ return simd_sqrt_nr_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_sqrt(simd128_neon_t _a)
+ {
+ return simd_sqrt_nr_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_log2(simd128_neon_t _a)
+ {
+ return simd_log2_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_exp2(simd128_neon_t _a)
+ {
+ return simd_exp2_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_pow(simd128_neon_t _a, simd128_neon_t _b)
+ {
+ return simd_pow_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_cross3(simd128_neon_t _a, simd128_neon_t _b)
+ {
+ return simd_cross3_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_normalize3(simd128_neon_t _a)
+ {
+ return simd_normalize3_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_dot3(simd128_neon_t _a, simd128_neon_t _b)
+ {
+ return simd_dot3_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_dot(simd128_neon_t _a, simd128_neon_t _b)
+ {
+ return simd_dot_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_ceil(simd128_neon_t _a)
+ {
+ return simd_ceil_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_neon_t simd_floor(simd128_neon_t _a)
+ {
+ return simd_floor_ni(_a);
+ }
+
typedef simd128_neon_t simd128_t;
} // namespace bx
-
-#endif // BX_SIMD128_NEON_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/inline/simd128_ref.inl b/3rdparty/bx/include/bx/inline/simd128_ref.inl
index e85ae14c979..0ef8f68b1c1 100644
--- a/3rdparty/bx/include/bx/inline/simd128_ref.inl
+++ b/3rdparty/bx/include/bx/inline/simd128_ref.inl
@@ -1,41 +1,11 @@
/*
- * Copyright 2010-2016 Branimir Karadzic. All rights reserved.
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
-#ifndef BX_SIMD128_REF_H_HEADER_GUARD
-#define BX_SIMD128_REF_H_HEADER_GUARD
-
-#define simd_shuf_xAzC simd_shuf_xAzC_ni
-#define simd_shuf_yBwD simd_shuf_yBwD_ni
-#define simd_rcp simd_rcp_ni
-#define simd_orx simd_orx_ni
-#define simd_orc simd_orc_ni
-#define simd_neg simd_neg_ni
-#define simd_madd simd_madd_ni
-#define simd_nmsub simd_nmsub_ni
-#define simd_div_nr simd_div_nr_ni
-#define simd_selb simd_selb_ni
-#define simd_sels simd_sels_ni
-#define simd_not simd_not_ni
-#define simd_abs simd_abs_ni
-#define simd_clamp simd_clamp_ni
-#define simd_lerp simd_lerp_ni
-#define simd_rsqrt simd_rsqrt_ni
-#define simd_rsqrt_nr simd_rsqrt_nr_ni
-#define simd_rsqrt_carmack simd_rsqrt_carmack_ni
-#define simd_sqrt_nr simd_sqrt_nr_ni
-#define simd_log2 simd_log2_ni
-#define simd_exp2 simd_exp2_ni
-#define simd_pow simd_pow_ni
-#define simd_cross3 simd_cross3_ni
-#define simd_normalize3 simd_normalize3_ni
-#define simd_dot3 simd_dot3_ni
-#define simd_dot simd_dot_ni
-#define simd_ceil simd_ceil_ni
-#define simd_floor simd_floor_ni
-
-#include "simd_ni.inl"
+#ifndef BX_SIMD_T_H_HEADER_GUARD
+# error "Must be included from bx/simd_t.h!"
+#endif // BX_SIMD_T_H_HEADER_GUARD
namespace bx
{
@@ -43,16 +13,16 @@ namespace bx
#define ELEMy 1
#define ELEMz 2
#define ELEMw 3
-#define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \
- template<> \
+#define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \
+ template<> \
BX_SIMD_FORCE_INLINE simd128_ref_t simd_swiz_##_x##_y##_z##_w(simd128_ref_t _a) \
- { \
- simd128_ref_t result; \
- result.ixyzw[0] = _a.ixyzw[ELEM##_x]; \
- result.ixyzw[1] = _a.ixyzw[ELEM##_y]; \
- result.ixyzw[2] = _a.ixyzw[ELEM##_z]; \
- result.ixyzw[3] = _a.ixyzw[ELEM##_w]; \
- return result; \
+ { \
+ simd128_ref_t result; \
+ result.ixyzw[0] = _a.ixyzw[ELEM##_x]; \
+ result.ixyzw[1] = _a.ixyzw[ELEM##_y]; \
+ result.ixyzw[2] = _a.ixyzw[ELEM##_z]; \
+ result.ixyzw[3] = _a.ixyzw[ELEM##_w]; \
+ return result; \
}
#include "simd128_swizzle.inl"
@@ -63,27 +33,27 @@ namespace bx
#undef ELEMy
#undef ELEMx
-#define BX_SIMD128_IMPLEMENT_TEST(_xyzw, _mask) \
- template<> \
+#define BX_SIMD128_IMPLEMENT_TEST(_xyzw, _mask) \
+ template<> \
BX_SIMD_FORCE_INLINE bool simd_test_any_##_xyzw(simd128_ref_t _test) \
- { \
- uint32_t tmp = ( (_test.uxyzw[3]>>31)<<3) \
- | ( (_test.uxyzw[2]>>31)<<2) \
- | ( (_test.uxyzw[1]>>31)<<1) \
- | ( _test.uxyzw[0]>>31) \
- ; \
- return 0 != (tmp&(_mask) ); \
- } \
- \
- template<> \
+ { \
+ uint32_t tmp = ( (_test.uxyzw[3]>>31)<<3) \
+ | ( (_test.uxyzw[2]>>31)<<2) \
+ | ( (_test.uxyzw[1]>>31)<<1) \
+ | ( _test.uxyzw[0]>>31) \
+ ; \
+ return 0 != (tmp&(_mask) ); \
+ } \
+ \
+ template<> \
BX_SIMD_FORCE_INLINE bool simd_test_all_##_xyzw(simd128_ref_t _test) \
- { \
- uint32_t tmp = ( (_test.uxyzw[3]>>31)<<3) \
- | ( (_test.uxyzw[2]>>31)<<2) \
- | ( (_test.uxyzw[1]>>31)<<1) \
- | ( _test.uxyzw[0]>>31) \
- ; \
- return (_mask) == (tmp&(_mask) ); \
+ { \
+ uint32_t tmp = ( (_test.uxyzw[3]>>31)<<3) \
+ | ( (_test.uxyzw[2]>>31)<<2) \
+ | ( (_test.uxyzw[1]>>31)<<1) \
+ | ( _test.uxyzw[0]>>31) \
+ ; \
+ return (_mask) == (tmp&(_mask) ); \
}
BX_SIMD128_IMPLEMENT_TEST(x , 0x1);
@@ -160,7 +130,7 @@ BX_SIMD128_IMPLEMENT_TEST(xyzw , 0xf);
}
template<>
- BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_yBxA(simd128_ref_t _a, simd128_ref_t _b)
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_AxBy(simd128_ref_t _a, simd128_ref_t _b)
{
simd128_ref_t result;
result.uxyzw[0] = _a.uxyzw[1];
@@ -643,6 +613,207 @@ BX_SIMD128_IMPLEMENT_TEST(xyzw , 0xf);
return result;
}
-} // namespace bx
+ BX_SIMD_FORCE_INLINE simd128_t simd_zero()
+ {
+ return simd_zero<simd128_t>();
+ }
+
+ BX_SIMD_FORCE_INLINE simd128_t simd_ld(const void* _ptr)
+ {
+ return simd_ld<simd128_t>(_ptr);
+ }
+
+ BX_SIMD_FORCE_INLINE simd128_t simd_ld(float _x, float _y, float _z, float _w)
+ {
+ return simd_ld<simd128_t>(_x, _y, _z, _w);
+ }
+
+ BX_SIMD_FORCE_INLINE simd128_t simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w)
+ {
+ return simd_ild<simd128_t>(_x, _y, _z, _w);
+ }
+
+ BX_SIMD_FORCE_INLINE simd128_t simd_splat(const void* _ptr)
+ {
+ return simd_splat<simd128_t>(_ptr);
+ }
+
+ BX_SIMD_FORCE_INLINE simd128_t simd_splat(float _a)
+ {
+ return simd_splat<simd128_t>(_a);
+ }
+
+ BX_SIMD_FORCE_INLINE simd128_t simd_isplat(uint32_t _a)
+ {
+ return simd_isplat<simd128_t>(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_xAzC(simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_shuf_xAzC_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_shuf_yBwD(simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_shuf_yBwD_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_rcp(simd128_ref_t _a)
+ {
+ return simd_rcp_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_orx(simd128_ref_t _a)
+ {
+ return simd_orx_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_orc(simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_orc_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_neg(simd128_ref_t _a)
+ {
+ return simd_neg_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_madd(simd128_ref_t _a, simd128_ref_t _b, simd128_ref_t _c)
+ {
+ return simd_madd_ni(_a, _b, _c);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_nmsub(simd128_ref_t _a, simd128_ref_t _b, simd128_ref_t _c)
+ {
+ return simd_nmsub_ni(_a, _b, _c);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_div_nr(simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_div_nr_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_selb(simd128_ref_t _mask, simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_selb_ni(_mask, _a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_sels(simd128_ref_t _test, simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_sels_ni(_test, _a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_not(simd128_ref_t _a)
+ {
+ return simd_not_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_abs(simd128_ref_t _a)
+ {
+ return simd_abs_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_clamp(simd128_ref_t _a, simd128_ref_t _min, simd128_ref_t _max)
+ {
+ return simd_clamp_ni(_a, _min, _max);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_lerp(simd128_ref_t _a, simd128_ref_t _b, simd128_ref_t _s)
+ {
+ return simd_lerp_ni(_a, _b, _s);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_rsqrt(simd128_ref_t _a)
+ {
+ return simd_rsqrt_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_rsqrt_nr(simd128_ref_t _a)
+ {
+ return simd_rsqrt_nr_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_rsqrt_carmack(simd128_ref_t _a)
+ {
+ return simd_rsqrt_carmack_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_sqrt_nr(simd128_ref_t _a)
+ {
+ return simd_sqrt_nr_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_log2(simd128_ref_t _a)
+ {
+ return simd_log2_ni(_a);
+ }
-#endif // BX_SIMD128_REF_H_HEADER_GUARD
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_exp2(simd128_ref_t _a)
+ {
+ return simd_exp2_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_pow(simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_pow_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_cross3(simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_cross3_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_normalize3(simd128_ref_t _a)
+ {
+ return simd_normalize3_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_dot3(simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_dot3_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_dot(simd128_ref_t _a, simd128_ref_t _b)
+ {
+ return simd_dot_ni(_a, _b);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_ceil(simd128_ref_t _a)
+ {
+ return simd_ceil_ni(_a);
+ }
+
+ template<>
+ BX_SIMD_FORCE_INLINE simd128_ref_t simd_floor(simd128_ref_t _a)
+ {
+ return simd_floor_ni(_a);
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/include/bx/inline/simd128_sse.inl b/3rdparty/bx/include/bx/inline/simd128_sse.inl
index b0ed8520ab4..69f37d153c3 100644
--- a/3rdparty/bx/include/bx/inline/simd128_sse.inl
+++ b/3rdparty/bx/include/bx/inline/simd128_sse.inl
@@ -1,12 +1,11 @@
/*
- * Copyright 2010-2016 Branimir Karadzic. All rights reserved.
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
-#ifndef BX_SIMD128_SSE_H_HEADER_GUARD
-#define BX_SIMD128_SSE_H_HEADER_GUARD
-
-#include "simd_ni.inl"
+#ifndef BX_SIMD_T_H_HEADER_GUARD
+# error "Must be included from bx/simd_t.h!"
+#endif // BX_SIMD_T_H_HEADER_GUARD
namespace bx
{
@@ -14,10 +13,10 @@ namespace bx
#define ELEMy 1
#define ELEMz 2
#define ELEMw 3
-#define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \
- template<> \
- BX_SIMD_FORCE_INLINE simd128_sse_t simd_swiz_##_x##_y##_z##_w(simd128_sse_t _a) \
- { \
+#define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \
+ template<> \
+ BX_SIMD_FORCE_INLINE simd128_sse_t simd_swiz_##_x##_y##_z##_w(simd128_sse_t _a) \
+ { \
return _mm_shuffle_ps( _a, _a, _MM_SHUFFLE(ELEM##_w, ELEM##_z, ELEM##_y, ELEM##_x ) ); \
}
@@ -29,17 +28,17 @@ namespace bx
#undef ELEMy
#undef ELEMx
-#define BX_SIMD128_IMPLEMENT_TEST(_xyzw, _mask) \
- template<> \
+#define BX_SIMD128_IMPLEMENT_TEST(_xyzw, _mask) \
+ template<> \
BX_SIMD_FORCE_INLINE bool simd_test_any_##_xyzw(simd128_sse_t _test) \
- { \
- return 0x0 != (_mm_movemask_ps(_test)&(_mask) ); \
- } \
- \
- template<> \
+ { \
+ return 0x0 != (_mm_movemask_ps(_test)&(_mask) ); \
+ } \
+ \
+ template<> \
BX_SIMD_FORCE_INLINE bool simd_test_all_##_xyzw(simd128_sse_t _test) \
- { \
- return (_mask) == (_mm_movemask_ps(_test)&(_mask) ); \
+ { \
+ return (_mask) == (_mm_movemask_ps(_test)&(_mask) ); \
}
BX_SIMD128_IMPLEMENT_TEST(x , 0x1);
@@ -91,7 +90,7 @@ BX_SIMD128_IMPLEMENT_TEST(xyzw , 0xf);
}
template<>
- BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_yBxA(simd128_sse_t _a, simd128_sse_t _b)
+ BX_SIMD_FORCE_INLINE simd128_sse_t simd_shuf_AxBy(simd128_sse_t _a, simd128_sse_t _b)
{
return _mm_unpacklo_ps(_b, _a);
}
@@ -643,5 +642,3 @@ BX_SIMD128_IMPLEMENT_TEST(xyzw , 0xf);
typedef simd128_sse_t simd128_t;
} // namespace bx
-
-#endif // BX_SIMD128_SSE_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/inline/simd128_swizzle.inl b/3rdparty/bx/include/bx/inline/simd128_swizzle.inl
index 4185be81b60..e734ce91955 100644
--- a/3rdparty/bx/include/bx/inline/simd128_swizzle.inl
+++ b/3rdparty/bx/include/bx/inline/simd128_swizzle.inl
@@ -1,6 +1,6 @@
/*
* Copyright 2010-2015 Branimir Karadzic. All rights reserved.
- * License: http://www.opensource.org/licenses/BSD-2-Clause
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
#ifndef BX_SIMD_T_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/inline/simd256_avx.inl b/3rdparty/bx/include/bx/inline/simd256_avx.inl
index 5eed77ba3af..c59cc80cfbe 100644
--- a/3rdparty/bx/include/bx/inline/simd256_avx.inl
+++ b/3rdparty/bx/include/bx/inline/simd256_avx.inl
@@ -1,12 +1,11 @@
/*
- * Copyright 2010-2016 Branimir Karadzic. All rights reserved.
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
-#ifndef BX_SIMD256_AVX_H_HEADER_GUARD
-#define BX_SIMD256_AVX_H_HEADER_GUARD
-
-#include "simd_ni.inl"
+#ifndef BX_SIMD_T_H_HEADER_GUARD
+# error "Must be included from bx/simd_t.h!"
+#endif // BX_SIMD_T_H_HEADER_GUARD
namespace bx
{
@@ -73,5 +72,3 @@ namespace bx
typedef simd256_avx_t simd256_t;
} // namespace bx
-
-#endif // BX_SIMD256_AVX_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/inline/simd256_ref.inl b/3rdparty/bx/include/bx/inline/simd256_ref.inl
index 6d9a5a31ab5..fd8d8897fe9 100644
--- a/3rdparty/bx/include/bx/inline/simd256_ref.inl
+++ b/3rdparty/bx/include/bx/inline/simd256_ref.inl
@@ -1,12 +1,11 @@
/*
- * Copyright 2010-2016 Branimir Karadzic. All rights reserved.
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
-#ifndef BX_SIMD256_REF_H_HEADER_GUARD
-#define BX_SIMD256_REF_H_HEADER_GUARD
-
-#include "simd_ni.inl"
+#ifndef BX_SIMD_T_H_HEADER_GUARD
+# error "Must be included from bx/simd_t.h!"
+#endif // BX_SIMD_T_H_HEADER_GUARD
namespace bx
{
@@ -83,5 +82,3 @@ namespace bx
}
} // namespace bx
-
-#endif // BX_SIMD256_REF_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/inline/simd_ni.inl b/3rdparty/bx/include/bx/inline/simd_ni.inl
index 95767f25b95..6a0be796b7b 100644
--- a/3rdparty/bx/include/bx/inline/simd_ni.inl
+++ b/3rdparty/bx/include/bx/inline/simd_ni.inl
@@ -1,11 +1,8 @@
/*
- * Copyright 2010-2016 Branimir Karadzic. All rights reserved.
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
-#ifndef BX_SIMD_NI_H_HEADER_GUARD
-#define BX_SIMD_NI_H_HEADER_GUARD
-
namespace bx
{
template<typename Ty>
@@ -554,5 +551,3 @@ namespace bx
}
} // namespace bx
-
-#endif // BX_SIMD_NI_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/inline/spscqueue.inl b/3rdparty/bx/include/bx/inline/spscqueue.inl
index 7d80f078f2b..7469953be63 100644
--- a/3rdparty/bx/include/bx/inline/spscqueue.inl
+++ b/3rdparty/bx/include/bx/inline/spscqueue.inl
@@ -10,8 +10,9 @@
namespace bx
{
// http://drdobbs.com/article/print?articleId=210604448&siteSectionName=
- inline SpScUnboundedQueue::SpScUnboundedQueue()
- : m_first(new Node(NULL) )
+ inline SpScUnboundedQueue::SpScUnboundedQueue(AllocatorI* _allocator)
+ : m_allocator(_allocator)
+ , m_first(BX_NEW(m_allocator, Node)(NULL) )
, m_divider(m_first)
, m_last(m_first)
{
@@ -23,19 +24,19 @@ namespace bx
{
Node* node = m_first;
m_first = node->m_next;
- delete node;
+ BX_DELETE(m_allocator, node);
}
}
inline void SpScUnboundedQueue::push(void* _ptr)
{
- m_last->m_next = new Node( (void*)_ptr);
+ m_last->m_next = BX_NEW(m_allocator, Node)(_ptr);
atomicExchangePtr( (void**)&m_last, m_last->m_next);
while (m_first != m_divider)
{
Node* node = m_first;
m_first = m_first->m_next;
- delete node;
+ BX_DELETE(m_allocator, node);
}
}
@@ -68,7 +69,8 @@ namespace bx
}
template<typename Ty>
- inline SpScUnboundedQueueT<Ty>::SpScUnboundedQueueT()
+ inline SpScUnboundedQueueT<Ty>::SpScUnboundedQueueT(AllocatorI* _allocator)
+ : m_queue(_allocator)
{
}
@@ -96,7 +98,8 @@ namespace bx
}
#if BX_CONFIG_SUPPORTS_THREADING
- inline SpScBlockingUnboundedQueue::SpScBlockingUnboundedQueue()
+ inline SpScBlockingUnboundedQueue::SpScBlockingUnboundedQueue(AllocatorI* _allocator)
+ : m_queue(_allocator)
{
}
@@ -106,7 +109,7 @@ namespace bx
inline void SpScBlockingUnboundedQueue::push(void* _ptr)
{
- m_queue.push( (void*)_ptr);
+ m_queue.push(_ptr);
m_count.post();
}
@@ -126,7 +129,8 @@ namespace bx
}
template<typename Ty>
- inline SpScBlockingUnboundedQueueT<Ty>::SpScBlockingUnboundedQueueT()
+ inline SpScBlockingUnboundedQueueT<Ty>::SpScBlockingUnboundedQueueT(AllocatorI* _allocator)
+ : m_queue(_allocator)
{
}
diff --git a/3rdparty/bx/include/bx/inline/string.inl b/3rdparty/bx/include/bx/inline/string.inl
index 7b6f6500b7c..4ee24003889 100644
--- a/3rdparty/bx/include/bx/inline/string.inl
+++ b/3rdparty/bx/include/bx/inline/string.inl
@@ -43,8 +43,8 @@ namespace bx
{
Ty str = _str;
typename Ty::size_type startPos = 0;
- const typename Ty::size_type fromLen = strnlen(_from);
- const typename Ty::size_type toLen = strnlen(_to);
+ const typename Ty::size_type fromLen = strLen(_from);
+ const typename Ty::size_type toLen = strLen(_to);
while ( (startPos = str.find(_from, startPos) ) != Ty::npos)
{
str.replace(startPos, fromLen, _to);
@@ -64,6 +64,12 @@ namespace bx
set(_rhs.m_ptr, _rhs.m_len);
}
+ inline StringView& StringView::operator=(const char* _rhs)
+ {
+ set(_rhs);
+ return *this;
+ }
+
inline StringView& StringView::operator=(const StringView& _rhs)
{
set(_rhs.m_ptr, _rhs.m_len);
@@ -75,13 +81,18 @@ namespace bx
set(_ptr, _len);
}
+ inline StringView::StringView(const char* _ptr, const char* _term)
+ {
+ set(_ptr, _term);
+ }
+
inline void StringView::set(const char* _ptr, int32_t _len)
{
clear();
if (NULL != _ptr)
{
- int32_t len = strnlen(_ptr, _len);
+ int32_t len = strLen(_ptr, _len);
if (0 != len)
{
m_len = len;
@@ -90,6 +101,16 @@ namespace bx
}
}
+ inline void StringView::set(const char* _ptr, const char* _term)
+ {
+ set(_ptr, int32_t(_term-_ptr) );
+ }
+
+ inline void StringView::set(const StringView& _str)
+ {
+ set(_str.m_ptr, _str.m_len);
+ }
+
inline void StringView::clear()
{
m_ptr = "";
@@ -126,26 +147,20 @@ namespace bx
inline StringT<AllocatorT>::StringT(const StringT<AllocatorT>& _rhs)
: StringView()
{
- set(_rhs.m_ptr, _rhs.m_len);
+ set(_rhs);
}
template<bx::AllocatorI** AllocatorT>
inline StringT<AllocatorT>& StringT<AllocatorT>::operator=(const StringT<AllocatorT>& _rhs)
{
- set(_rhs.m_ptr, _rhs.m_len);
+ set(_rhs);
return *this;
}
template<bx::AllocatorI** AllocatorT>
- inline StringT<AllocatorT>::StringT(const char* _ptr, int32_t _len)
- {
- set(_ptr, _len);
- }
-
- template<bx::AllocatorI** AllocatorT>
inline StringT<AllocatorT>::StringT(const StringView& _rhs)
{
- set(_rhs.getPtr(), _rhs.getLength() );
+ set(_rhs);
}
template<bx::AllocatorI** AllocatorT>
@@ -155,22 +170,22 @@ namespace bx
}
template<bx::AllocatorI** AllocatorT>
- inline void StringT<AllocatorT>::set(const char* _ptr, int32_t _len)
+ inline void StringT<AllocatorT>::set(const StringView& _str)
{
clear();
- append(_ptr, _len);
+ append(_str);
}
template<bx::AllocatorI** AllocatorT>
- inline void StringT<AllocatorT>::append(const char* _ptr, int32_t _len)
+ inline void StringT<AllocatorT>::append(const StringView& _str)
{
- if (0 != _len)
+ if (0 != _str.getLength() )
{
int32_t old = m_len;
- int32_t len = m_len + strnlen(_ptr, _len);
+ int32_t len = m_len + strLen(_str);
char* ptr = (char*)BX_REALLOC(*AllocatorT, 0 != m_len ? const_cast<char*>(m_ptr) : NULL, len+1);
m_len = len;
- strlncpy(ptr + old, len-old+1, _ptr, _len);
+ strCopy(ptr + old, len-old+1, _str);
*const_cast<char**>(&m_ptr) = ptr;
}
diff --git a/3rdparty/bx/include/bx/macros.h b/3rdparty/bx/include/bx/macros.h
index 1358507188d..79c624959f0 100644
--- a/3rdparty/bx/include/bx/macros.h
+++ b/3rdparty/bx/include/bx/macros.h
@@ -68,10 +68,14 @@
# define BX_FUNCTION __PRETTY_FUNCTION__
# define BX_LIKELY(_x) __builtin_expect(!!(_x), 1)
# define BX_UNLIKELY(_x) __builtin_expect(!!(_x), 0)
-# define BX_NO_INLINE __attribute__( (noinline) )
-# define BX_NO_RETURN __attribute__( (noreturn) )
+# define BX_NO_INLINE __attribute__( (noinline) )
+# define BX_NO_RETURN __attribute__( (noreturn) )
+# if BX_COMPILER_GCC >= 70000
+# define BX_FALLTHROUGH __attribute__( (fallthrough) )
+# else
+# define BX_FALLTHROUGH BX_NOOP()
+# endif // BX_COMPILER_GCC >= 70000
# define BX_NO_VTABLE
-# define BX_OVERRIDE
# define BX_PRINTF_ARGS(_format, _args) __attribute__( (format(__printf__, _format, _args) ) )
# if BX_CLANG_HAS_FEATURE(cxx_thread_local)
# define BX_THREAD_LOCAL __thread
@@ -92,8 +96,8 @@
# define BX_UNLIKELY(_x) (_x)
# define BX_NO_INLINE __declspec(noinline)
# define BX_NO_RETURN
+# define BX_FALLTHROUGH BX_NOOP()
# define BX_NO_VTABLE __declspec(novtable)
-# define BX_OVERRIDE override
# define BX_PRINTF_ARGS(_format, _args)
# define BX_THREAD_LOCAL __declspec(thread)
# define BX_ATTRIBUTE(_x)
@@ -114,7 +118,14 @@
#define BX_NOOP(...) BX_MACRO_BLOCK_BEGIN BX_MACRO_BLOCK_END
///
-#define BX_UNUSED_1(_a1) BX_MACRO_BLOCK_BEGIN (void)(true ? (void)0 : ( (void)(_a1) ) ); BX_MACRO_BLOCK_END
+#define BX_UNUSED_1(_a1) \
+ BX_MACRO_BLOCK_BEGIN \
+ BX_PRAGMA_DIAGNOSTIC_PUSH(); \
+ /*BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wuseless-cast");*/ \
+ (void)(true ? (void)0 : ( (void)(_a1) ) ); \
+ BX_PRAGMA_DIAGNOSTIC_POP(); \
+ BX_MACRO_BLOCK_END
+
#define BX_UNUSED_2(_a1, _a2) BX_UNUSED_1(_a1); BX_UNUSED_1(_a2)
#define BX_UNUSED_3(_a1, _a2, _a3) BX_UNUSED_2(_a1, _a2); BX_UNUSED_1(_a3)
#define BX_UNUSED_4(_a1, _a2, _a3, _a4) BX_UNUSED_3(_a1, _a2, _a3); BX_UNUSED_1(_a4)
diff --git a/3rdparty/bx/include/bx/fpumath.h b/3rdparty/bx/include/bx/math.h
index b5b319ce047..66b0a51618d 100644
--- a/3rdparty/bx/include/bx/fpumath.h
+++ b/3rdparty/bx/include/bx/math.h
@@ -9,14 +9,20 @@
#define BX_FPU_MATH_H_HEADER_GUARD
#include "bx.h"
+#include "uint32_t.h"
namespace bx
{
- extern const float pi;
- extern const float invPi;
- extern const float piHalf;
- extern const float sqrt2;
- extern const float huge;
+ extern const float kPi;
+ extern const float kPi2;
+ extern const float kInvPi;
+ extern const float kPiHalf;
+ extern const float kSqrt2;
+ extern const float kInvLogNat2;
+ extern const float kHuge;
+
+ ///
+ typedef float (*LerpFn)(float _a, float _b, float _t);
///
struct Handness
@@ -57,6 +63,9 @@ namespace bx
double bitsToDouble(uint64_t _a);
///
+ uint32_t floatFlip(uint32_t _value);
+
+ ///
bool isNan(float _f);
///
@@ -108,7 +117,7 @@ namespace bx
float fsign(float _a);
///
- float fabsolute(float _a);
+ float fabs(float _a);
///
float fsq(float _a);
@@ -184,6 +193,12 @@ namespace bx
float fgain(float _time, float _gain);
///
+ float angleDiff(float _a, float _b);
+
+ /// Shortest distance linear interpolation between two angles.
+ float angleLerp(float _a, float _b, float _t);
+
+ ///
void vec3Move(float* _result, const float* _a);
///
@@ -246,6 +261,12 @@ namespace bx
void vec3TangentFrame(const float* _n, float* _t, float* _b, float _angle);
///
+ void vec3FromLatLong(float* _vec, float _u, float _v);
+
+ ///
+ void vec3ToLatLong(float* _u, float* _v, const float* _vec);
+
+ ///
void quatIdentity(float* _result);
///
@@ -312,7 +333,7 @@ namespace bx
void mtxQuatTranslationHMD(float* _result, const float* _quat, const float* _translation);
///
- void mtxLookAtLh(float* _result, const float* _eye, const float* _at, const float* _up = NULL);;
+ void mtxLookAtLh(float* _result, const float* _eye, const float* _at, const float* _up = NULL);
///
void mtxLookAtRh(float* _result, const float* _eye, const float* _at, const float* _up = NULL);
@@ -321,85 +342,85 @@ namespace bx
void mtxLookAt(float* _result, const float* _eye, const float* _at, const float* _up = NULL);
///
- void mtxProj(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc = false);
+ void mtxProj(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc);
///
- void mtxProj(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false);
+ void mtxProj(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc);
///
- void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc = false);
+ void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc);
///
- void mtxProjLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc = false);
+ void mtxProjLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc);
///
- void mtxProjLh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false);
+ void mtxProjLh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc);
///
- void mtxProjLh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc = false);
+ void mtxProjLh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc);
///
- void mtxProjRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc = false);
+ void mtxProjRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc);
///
- void mtxProjRh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false);
+ void mtxProjRh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc);
///
- void mtxProjRh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc = false);
+ void mtxProjRh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc);
///
- void mtxProjInf(float* _result, const float _fov[4], float _near, bool _oglNdc = false);
+ void mtxProjInf(float* _result, const float _fov[4], float _near, bool _oglNdc);
///
- void mtxProjInf(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false);
+ void mtxProjInf(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc);
///
- void mtxProjInf(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false);
+ void mtxProjInf(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc);
///
- void mtxProjInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false);
+ void mtxProjInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc);
///
- void mtxProjInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc = false);
+ void mtxProjInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc);
///
- void mtxProjInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false);
+ void mtxProjInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc);
///
- void mtxProjInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false);
+ void mtxProjInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc);
///
- void mtxProjInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc = false);
+ void mtxProjInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc);
///
- void mtxProjInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false);
+ void mtxProjInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc);
///
- void mtxProjRevInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false);
+ void mtxProjRevInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc);
///
- void mtxProjRevInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc = false);
+ void mtxProjRevInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc);
///
- void mtxProjRevInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false);
+ void mtxProjRevInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc);
///
- void mtxProjRevInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc = false);
+ void mtxProjRevInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc);
///
- void mtxProjRevInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc = false);
+ void mtxProjRevInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc);
///
- void mtxProjRevInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc = false);
+ void mtxProjRevInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc);
///
- void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset = 0.0f, bool _oglNdc = false);
+ void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc);
///
- void mtxOrthoLh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset = 0.0f, bool _oglNdc = false);
+ void mtxOrthoLh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc);
///
- void mtxOrthoRh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset = 0.0f, bool _oglNdc = false);
+ void mtxOrthoRh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc);
///
void mtxRotateX(float* _result, float _ax);
@@ -426,6 +447,9 @@ namespace bx
void vec3MulMtx(float* _result, const float* _vec, const float* _mat);
///
+ void vec3MulMtxXyz0(float* _result, const float* _vec, const float* _mat);
+
+ ///
void vec3MulMtxH(float* _result, const float* _vec, const float* _mat);
///
@@ -471,6 +495,6 @@ namespace bx
} // namespace bx
-#include "inline/fpumath.inl"
+#include "inline/math.inl"
#endif // BX_FPU_MATH_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/mpscqueue.h b/3rdparty/bx/include/bx/mpscqueue.h
index 0ac8f82915a..1735e83038c 100644
--- a/3rdparty/bx/include/bx/mpscqueue.h
+++ b/3rdparty/bx/include/bx/mpscqueue.h
@@ -6,6 +6,7 @@
#ifndef BX_MPSCQUEUE_H_HEADER_GUARD
#define BX_MPSCQUEUE_H_HEADER_GUARD
+#include "allocator.h"
#include "mutex.h"
#include "spscqueue.h"
@@ -22,7 +23,7 @@ namespace bx
public:
///
- MpScUnboundedQueueT();
+ MpScUnboundedQueueT(AllocatorI* _allocator);
///
~MpScUnboundedQueueT();
@@ -52,7 +53,7 @@ namespace bx
public:
///
- MpScUnboundedBlockingQueue();
+ MpScUnboundedBlockingQueue(AllocatorI* _allocator);
///
~MpScUnboundedBlockingQueue();
diff --git a/3rdparty/bx/include/bx/os.h b/3rdparty/bx/include/bx/os.h
index 56781b25b0e..3f52856dd3e 100644
--- a/3rdparty/bx/include/bx/os.h
+++ b/3rdparty/bx/include/bx/os.h
@@ -18,20 +18,6 @@
namespace bx
{
- struct FileInfo
- {
- enum Enum
- {
- Regular,
- Directory,
-
- Count
- };
-
- uint64_t m_size;
- Enum m_type;
- };
-
///
void sleep(uint32_t _ms);
@@ -66,15 +52,6 @@ namespace bx
int chdir(const char* _path);
///
- char* pwd(char* _buffer, uint32_t _size);
-
- ///
- bool getTempPath(char* _out, uint32_t* _inOutSize);
-
- ///
- bool stat(const char* _filePath, FileInfo& _fileInfo);
-
- ///
void* exec(const char* const* _argv);
} // namespace bx
diff --git a/3rdparty/bx/include/bx/pixelformat.h b/3rdparty/bx/include/bx/pixelformat.h
index 78354e48425..ee2dd15bd31 100644
--- a/3rdparty/bx/include/bx/pixelformat.h
+++ b/3rdparty/bx/include/bx/pixelformat.h
@@ -6,14 +6,15 @@
#ifndef BX_PIXEL_FORMAT_H_HEADER_GUARD
#define BX_PIXEL_FORMAT_H_HEADER_GUARD
-#include "fpumath.h"
+#include "math.h"
#include "uint32_t.h"
namespace bx
{
+ ///
struct EncodingType
{
- enum Enum
+ enum Enum ///
{
Unorm,
Int,
@@ -228,9 +229,9 @@ namespace bx
void packRgb10A2(void* _dst, const float* _src);
void unpackRgb10A2(float* _dst, const void* _src);
- // R11G11B10F
- void packR11G11B10F(void* _dst, const float* _src);
- void unpackR11G11B10F(float* _dst, const void* _src);
+ // RG11B10F
+ void packRG11B10F(void* _dst, const float* _src);
+ void unpackRG11B10F(float* _dst, const void* _src);
// RG32F
void packRg32F(void* _dst, const float* _src);
diff --git a/3rdparty/bx/include/bx/platform.h b/3rdparty/bx/include/bx/platform.h
index 7e7591d3cb2..96b9202d704 100644
--- a/3rdparty/bx/include/bx/platform.h
+++ b/3rdparty/bx/include/bx/platform.h
@@ -46,12 +46,12 @@
// Platform
#define BX_PLATFORM_ANDROID 0
-#define BX_PLATFORM_EMSCRIPTEN 0
#define BX_PLATFORM_BSD 0
+#define BX_PLATFORM_EMSCRIPTEN 0
#define BX_PLATFORM_HURD 0
#define BX_PLATFORM_IOS 0
#define BX_PLATFORM_LINUX 0
-#define BX_PLATFORM_NACL 0
+#define BX_PLATFORM_NX 0
#define BX_PLATFORM_OSX 0
#define BX_PLATFORM_PS4 0
#define BX_PLATFORM_QNX 0
@@ -59,7 +59,6 @@
#define BX_PLATFORM_STEAMLINK 0
#define BX_PLATFORM_WINDOWS 0
#define BX_PLATFORM_WINRT 0
-#define BX_PLATFORM_XBOX360 0
#define BX_PLATFORM_XBOXONE 0
// http://sourceforge.net/apps/mediawiki/predef/index.php?title=Compilers
@@ -143,10 +142,7 @@
#endif // BX_PLATFORM_
// http://sourceforge.net/apps/mediawiki/predef/index.php?title=Operating_Systems
-#if defined(_XBOX_VER)
-# undef BX_PLATFORM_XBOX360
-# define BX_PLATFORM_XBOX360 1
-#elif defined(_DURANGO) || defined(_XBOX_ONE)
+#if defined(_DURANGO) || defined(_XBOX_ONE)
# undef BX_PLATFORM_XBOXONE
# define BX_PLATFORM_XBOXONE 1
#elif defined(_WIN32) || defined(_WIN64)
@@ -181,11 +177,6 @@
# include <sys/cdefs.h> // Defines __BIONIC__ and includes android/api-level.h
# undef BX_PLATFORM_ANDROID
# define BX_PLATFORM_ANDROID __ANDROID_API__
-#elif defined(__native_client__)
-// NaCl compiler defines __linux__
-# include <ppapi/c/pp_macros.h>
-# undef BX_PLATFORM_NACL
-# define BX_PLATFORM_NACL PPAPI_RELEASE
#elif defined(__STEAMLINK__)
// SteamLink compiler defines __linux__
# undef BX_PLATFORM_STEAMLINK
@@ -223,6 +214,9 @@
#elif defined(__GNU__)
# undef BX_PLATFORM_HURD
# define BX_PLATFORM_HURD 1
+#elif defined(__NX__)
+# undef BX_PLATFORM_NX
+# define BX_PLATFORM_NX 1
#endif //
#if !BX_CRT_NONE
@@ -258,27 +252,27 @@
#define BX_PLATFORM_POSIX (0 \
|| BX_PLATFORM_ANDROID \
- || BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_BSD \
+ || BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_HURD \
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_LINUX \
- || BX_PLATFORM_NACL \
+ || BX_PLATFORM_NX \
|| BX_PLATFORM_OSX \
- || BX_PLATFORM_QNX \
- || BX_PLATFORM_STEAMLINK \
|| BX_PLATFORM_PS4 \
+ || BX_PLATFORM_QNX \
|| BX_PLATFORM_RPI \
+ || BX_PLATFORM_STEAMLINK \
)
#define BX_PLATFORM_NONE !(0 \
|| BX_PLATFORM_ANDROID \
- || BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_BSD \
+ || BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_HURD \
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_LINUX \
- || BX_PLATFORM_NACL \
+ || BX_PLATFORM_NX \
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_PS4 \
|| BX_PLATFORM_QNX \
@@ -286,7 +280,6 @@
|| BX_PLATFORM_STEAMLINK \
|| BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
- || BX_PLATFORM_XBOX360 \
|| BX_PLATFORM_XBOXONE \
)
@@ -321,22 +314,23 @@
#if BX_PLATFORM_ANDROID
# define BX_PLATFORM_NAME "Android " \
BX_STRINGIZE(BX_PLATFORM_ANDROID)
+#elif BX_PLATFORM_BSD
+# define BX_PLATFORM_NAME "BSD"
#elif BX_PLATFORM_EMSCRIPTEN
# define BX_PLATFORM_NAME "asm.js " \
BX_STRINGIZE(__EMSCRIPTEN_major__) "." \
BX_STRINGIZE(__EMSCRIPTEN_minor__) "." \
BX_STRINGIZE(__EMSCRIPTEN_tiny__)
-#elif BX_PLATFORM_BSD
-# define BX_PLATFORM_NAME "BSD"
#elif BX_PLATFORM_HURD
# define BX_PLATFORM_NAME "Hurd"
#elif BX_PLATFORM_IOS
# define BX_PLATFORM_NAME "iOS"
#elif BX_PLATFORM_LINUX
# define BX_PLATFORM_NAME "Linux"
-#elif BX_PLATFORM_NACL
-# define BX_PLATFORM_NAME "NaCl " \
- BX_STRINGIZE(BX_PLATFORM_NACL)
+#elif BX_PLATFORM_NONE
+# define BX_PLATFORM_NAME "None"
+#elif BX_PLATFORM_NX
+# define BX_PLATFORM_NAME "NX"
#elif BX_PLATFORM_OSX
# define BX_PLATFORM_NAME "OSX"
#elif BX_PLATFORM_PS4
@@ -351,12 +345,8 @@
# define BX_PLATFORM_NAME "Windows"
#elif BX_PLATFORM_WINRT
# define BX_PLATFORM_NAME "WinRT"
-#elif BX_PLATFORM_XBOX360
-# define BX_PLATFORM_NAME "Xbox 360"
#elif BX_PLATFORM_XBOXONE
# define BX_PLATFORM_NAME "Xbox One"
-#elif BX_PLATFORM_NONE
-# define BX_PLATFORM_NAME "None"
#else
# error "Unknown BX_PLATFORM!"
#endif // BX_PLATFORM_
diff --git a/3rdparty/bx/include/bx/process.h b/3rdparty/bx/include/bx/process.h
new file mode 100644
index 00000000000..47a1119ea37
--- /dev/null
+++ b/3rdparty/bx/include/bx/process.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#ifndef BX_PROCESS_H_HEADER_GUARD
+#define BX_PROCESS_H_HEADER_GUARD
+
+#include "readerwriter.h"
+
+namespace bx
+{
+ ///
+ class ProcessReader
+ : public ProcessOpenI
+ , public CloserI
+ , public ReaderI
+ {
+ public:
+ ///
+ ProcessReader();
+
+ ///
+ ~ProcessReader();
+
+ ///
+ virtual bool open(const FilePath& _filePath, const StringView& _args, Error* _err) override;
+
+ ///
+ virtual void close() override;
+
+ ///
+ virtual int32_t read(void* _data, int32_t _size, Error* _err) override;
+
+ ///
+ int32_t getExitCode() const;
+
+ private:
+ void* m_file;
+ int32_t m_exitCode;
+ };
+
+ ///
+ class ProcessWriter
+ : public ProcessOpenI
+ , public CloserI
+ , public WriterI
+ {
+ public:
+ ///
+ ProcessWriter();
+
+ ///
+ ~ProcessWriter();
+
+ ///
+ virtual bool open(const FilePath& _filePath, const StringView& _args, Error* _err) override;
+
+ ///
+ virtual void close() override;
+
+ ///
+ virtual int32_t write(const void* _data, int32_t _size, Error* _err) override;
+
+ ///
+ int32_t getExitCode() const;
+
+ private:
+ void* m_file;
+ int32_t m_exitCode;
+ };
+
+} // namespace bx
+
+#endif // BX_PROCESS_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/readerwriter.h b/3rdparty/bx/include/bx/readerwriter.h
index 7fda6f08111..68c8227b540 100644
--- a/3rdparty/bx/include/bx/readerwriter.h
+++ b/3rdparty/bx/include/bx/readerwriter.h
@@ -8,6 +8,8 @@
#include "allocator.h"
#include "error.h"
+#include "endian.h"
+#include "filepath.h"
#include "uint32_t.h"
BX_ERROR_RESULT(BX_ERROR_READERWRITER_OPEN, BX_MAKEFOURCC('R', 'W', 0, 1) );
@@ -64,14 +66,21 @@ namespace bx
struct BX_NO_VTABLE ReaderOpenI
{
virtual ~ReaderOpenI() = 0;
- virtual bool open(const char* _filePath, Error* _err) = 0;
+ virtual bool open(const FilePath& _filePath, Error* _err) = 0;
};
///
struct BX_NO_VTABLE WriterOpenI
{
virtual ~WriterOpenI() = 0;
- virtual bool open(const char* _filePath, bool _append, Error* _err) = 0;
+ virtual bool open(const FilePath& _filePath, bool _append, Error* _err) = 0;
+ };
+
+ ///
+ struct BX_NO_VTABLE ProcessOpenI
+ {
+ virtual ~ProcessOpenI() = 0;
+ virtual bool open(const FilePath& _filePath, const StringView& _args, Error* _err) = 0;
};
///
@@ -109,10 +118,10 @@ namespace bx
virtual ~StaticMemoryBlock();
///
- virtual void* more(uint32_t _size = 0);
+ virtual void* more(uint32_t _size = 0) override;
///
- virtual uint32_t getSize() BX_OVERRIDE;
+ virtual uint32_t getSize() override;
private:
void* m_data;
@@ -130,10 +139,10 @@ namespace bx
virtual ~MemoryBlock();
///
- virtual void* more(uint32_t _size = 0) BX_OVERRIDE;
+ virtual void* more(uint32_t _size = 0) override;
///
- virtual uint32_t getSize() BX_OVERRIDE;
+ virtual uint32_t getSize() override;
private:
AllocatorI* m_allocator;
@@ -141,7 +150,7 @@ namespace bx
uint32_t m_size;
};
- ///
+ /// Sizer writer. Dummy writter that only counts number of bytes written into it.
class SizerWriter : public WriterSeekerI
{
public:
@@ -152,10 +161,10 @@ namespace bx
virtual ~SizerWriter();
///
- virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE;
+ virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) override;
///
- virtual int32_t write(const void* /*_data*/, int32_t _size, Error* _err) BX_OVERRIDE;
+ virtual int32_t write(const void* /*_data*/, int32_t _size, Error* _err) override;
private:
int64_t m_pos;
@@ -173,10 +182,10 @@ namespace bx
virtual ~MemoryReader();
///
- virtual int64_t seek(int64_t _offset, Whence::Enum _whence) BX_OVERRIDE;
+ virtual int64_t seek(int64_t _offset, Whence::Enum _whence) override;
///
- virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE;
+ virtual int32_t read(void* _data, int32_t _size, Error* _err) override;
///
const uint8_t* getDataPtr() const;
@@ -204,10 +213,10 @@ namespace bx
virtual ~MemoryWriter();
///
- virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE;
+ virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) override;
///
- virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE;
+ virtual int32_t write(const void* _data, int32_t _size, Error* _err) override;
private:
MemoryBlockI* m_memBlock;
@@ -217,7 +226,7 @@ namespace bx
int64_t m_size;
};
- ///
+ /// Static (fixed size) memory block writer.
class StaticMemoryBlockWriter : public MemoryWriter
{
public:
@@ -246,6 +255,12 @@ namespace bx
/// Write data.
int32_t write(WriterI* _writer, const void* _data, int32_t _size, Error* _err = NULL);
+ /// Write C string.
+ inline int32_t write(WriterI* _writer, const char* _str, Error* _err = NULL);
+
+ /// Write string view.
+ inline int32_t write(WriterI* _writer, const StringView& _str, Error* _err = NULL);
+
/// Write repeat the same value.
int32_t writeRep(WriterI* _writer, uint8_t _byte, int32_t _size, Error* _err = NULL);
@@ -273,6 +288,9 @@ namespace bx
/// Returns size of file.
int64_t getSize(SeekerI* _seeker);
+ /// Returns remaining size from current offset of file.
+ int64_t getRemain(SeekerI* _seeker);
+
/// Peek data.
int32_t peek(ReaderSeekerI* _reader, void* _data, int32_t _size, Error* _err = NULL);
@@ -286,13 +304,16 @@ namespace bx
/// Align writer stream (pads stream with zeros).
int32_t align(WriterSeekerI* _writer, uint32_t _alignment, Error* _err = NULL);
- ///
- bool open(ReaderOpenI* _reader, const char* _filePath, Error* _err = NULL);
+ /// Open for read.
+ bool open(ReaderOpenI* _reader, const FilePath& _filePath, Error* _err = NULL);
- ///
- bool open(WriterOpenI* _writer, const char* _filePath, bool _append = false, Error* _err = NULL);
+ /// Open fro write.
+ bool open(WriterOpenI* _writer, const FilePath& _filePath, bool _append = false, Error* _err = NULL);
- ///
+ /// Open process.
+ bool open(ProcessOpenI* _process, const FilePath& _filePath, const StringView& _args, Error* _err = NULL);
+
+ /// Close.
void close(CloserI* _reader);
} // namespace bx
diff --git a/3rdparty/bx/include/bx/rng.h b/3rdparty/bx/include/bx/rng.h
index 56d7674957c..22fff273ebe 100644
--- a/3rdparty/bx/include/bx/rng.h
+++ b/3rdparty/bx/include/bx/rng.h
@@ -7,7 +7,7 @@
#define BX_RNG_H_HEADER_GUARD
#include "bx.h"
-#include "fpumath.h"
+#include "math.h"
#include "uint32_t.h"
namespace bx
@@ -30,24 +30,6 @@ namespace bx
uint32_t m_w;
};
- /// George Marsaglia's FIB
- class RngFib
- {
- public:
- ///
- RngFib(uint32_t _a = 9983651, uint32_t _b = 95746118);
-
- ///
- void reset(uint32_t _a = 9983651, uint32_t _b = 95746118);
-
- ///
- uint32_t gen();
-
- private:
- uint32_t m_a;
- uint32_t m_b;
- };
-
/// George Marsaglia's SHR3
class RngShr3
{
diff --git a/3rdparty/bx/include/bx/settings.h b/3rdparty/bx/include/bx/settings.h
new file mode 100644
index 00000000000..018e4c3504a
--- /dev/null
+++ b/3rdparty/bx/include/bx/settings.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#ifndef BX_SETTINGS_H_HEADER_GUARD
+#define BX_SETTINGS_H_HEADER_GUARD
+
+#include "allocator.h"
+#include "readerwriter.h"
+#include "string.h"
+
+namespace bx
+{
+ ///
+ class Settings
+ {
+ public:
+ ///
+ Settings(AllocatorI* _allocator, const void* _data = NULL, uint32_t _len = 0);
+
+ ///
+ ~Settings();
+
+ ///
+ void clear();
+
+ ///
+ void load(const void* _data, uint32_t _len);
+
+ ///
+ const char* get(const StringView& _name) const;
+
+ ///
+ void set(const StringView& _name, const StringView& _value = "");
+
+ ///
+ void remove(const StringView& _name) const;
+
+ ///
+ int32_t read(ReaderSeekerI* _reader, Error* _err);
+
+ ///
+ int32_t write(WriterI* _writer, Error* _err) const;
+
+ private:
+ Settings();
+
+ AllocatorI* m_allocator;
+ void* m_ini;
+ };
+
+ ///
+ int32_t read(ReaderSeekerI* _reader, Settings& _settings, Error* _err = NULL);
+
+ ///
+ int32_t write(WriterI* _writer, const Settings& _settings, Error* _err = NULL);
+
+} // namespace bx
+
+#endif // BX_SETTINGS_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/simd_t.h b/3rdparty/bx/include/bx/simd_t.h
index d3befc44ba0..f63dcfba389 100644
--- a/3rdparty/bx/include/bx/simd_t.h
+++ b/3rdparty/bx/include/bx/simd_t.h
@@ -7,7 +7,7 @@
#define BX_SIMD_T_H_HEADER_GUARD
#include "bx.h"
-#include "fpumath.h"
+#include "math.h"
#define BX_SIMD_FORCE_INLINE BX_FORCE_INLINE
#define BX_SIMD_INLINE inline
@@ -52,7 +52,7 @@ namespace bx
#define ELEMw 3
#define BX_SIMD128_IMPLEMENT_SWIZZLE(_x, _y, _z, _w) \
template<typename Ty> \
- BX_SIMD_FORCE_INLINE Ty simd_swiz_##_x##_y##_z##_w(Ty _a);
+ Ty simd_swiz_##_x##_y##_z##_w(Ty _a);
#include "inline/simd128_swizzle.inl"
#undef BX_SIMD128_IMPLEMENT_SWIZZLE
@@ -86,253 +86,361 @@ BX_SIMD128_IMPLEMENT_TEST(xyzw);
#undef BX_SIMD128_IMPLEMENT_TEST
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_shuf_xyAB(Ty _a, Ty _b);
+ Ty simd_shuf_xyAB(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_shuf_ABxy(Ty _a, Ty _b);
+ Ty simd_shuf_ABxy(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_shuf_CDzw(Ty _a, Ty _b);
+ Ty simd_shuf_CDzw(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_shuf_zwCD(Ty _a, Ty _b);
+ Ty simd_shuf_zwCD(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_shuf_xAyB(Ty _a, Ty _b);
+ Ty simd_shuf_xAyB(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_shuf_yBxA(Ty _a, Ty _b);
+ Ty simd_shuf_AxBy(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_shuf_zCwD(Ty _a, Ty _b);
+ Ty simd_shuf_zCwD(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_shuf_CzDw(Ty _a, Ty _b);
+ Ty simd_shuf_CzDw(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE float simd_x(Ty _a);
+ float simd_x(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE float simd_y(Ty _a);
+ float simd_y(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE float simd_z(Ty _a);
+ float simd_z(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE float simd_w(Ty _a);
+ float simd_w(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_ld(const void* _ptr);
+ Ty simd_ld(const void* _ptr);
template<typename Ty>
- BX_SIMD_FORCE_INLINE void simd_st(void* _ptr, Ty _a);
+ void simd_st(void* _ptr, Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE void simd_stx(void* _ptr, Ty _a);
+ void simd_stx(void* _ptr, Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE void simd_stream(void* _ptr, Ty _a);
+ void simd_stream(void* _ptr, Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_ld(float _x, float _y, float _z, float _w);
+ Ty simd_ld(float _x, float _y, float _z, float _w);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_ld(float _x, float _y, float _z, float _w, float _a, float _b, float _c, float _d);
+ Ty simd_ld(float _x, float _y, float _z, float _w, float _a, float _b, float _c, float _d);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w);
+ Ty simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w, uint32_t _a, uint32_t _b, uint32_t _c, uint32_t _d);
+ Ty simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w, uint32_t _a, uint32_t _b, uint32_t _c, uint32_t _d);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_splat(const void* _ptr);
+ Ty simd_splat(const void* _ptr);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_splat(float _a);
+ Ty simd_splat(float _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_isplat(uint32_t _a);
+ Ty simd_isplat(uint32_t _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_zero();
+ Ty simd_zero();
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_itof(Ty _a);
+ Ty simd_itof(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_ftoi(Ty _a);
+ Ty simd_ftoi(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_round(Ty _a);
+ Ty simd_round(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_add(Ty _a, Ty _b);
+ Ty simd_add(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_sub(Ty _a, Ty _b);
+ Ty simd_sub(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_mul(Ty _a, Ty _b);
+ Ty simd_mul(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_div(Ty _a, Ty _b);
+ Ty simd_div(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_rcp_est(Ty _a);
+ Ty simd_rcp_est(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_sqrt(Ty _a);
+ Ty simd_sqrt(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_rsqrt_est(Ty _a);
+ Ty simd_rsqrt_est(Ty _a);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_dot3(Ty _a, Ty _b);
+ Ty simd_dot3(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_dot(Ty _a, Ty _b);
+ Ty simd_dot(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_cmpeq(Ty _a, Ty _b);
+ Ty simd_cmpeq(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_cmplt(Ty _a, Ty _b);
+ Ty simd_cmplt(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_cmple(Ty _a, Ty _b);
+ Ty simd_cmple(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_cmpgt(Ty _a, Ty _b);
+ Ty simd_cmpgt(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_cmpge(Ty _a, Ty _b);
+ Ty simd_cmpge(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_min(Ty _a, Ty _b);
+ Ty simd_min(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_max(Ty _a, Ty _b);
+ Ty simd_max(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_and(Ty _a, Ty _b);
+ Ty simd_and(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_andc(Ty _a, Ty _b);
+ Ty simd_andc(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_or(Ty _a, Ty _b);
+ Ty simd_or(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_xor(Ty _a, Ty _b);
+ Ty simd_xor(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_sll(Ty _a, int _count);
+ Ty simd_sll(Ty _a, int _count);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_srl(Ty _a, int _count);
+ Ty simd_srl(Ty _a, int _count);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_sra(Ty _a, int _count);
+ Ty simd_sra(Ty _a, int _count);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_icmpeq(Ty _a, Ty _b);
+ Ty simd_icmpeq(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_icmplt(Ty _a, Ty _b);
+ Ty simd_icmplt(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_icmpgt(Ty _a, Ty _b);
+ Ty simd_icmpgt(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_imin(Ty _a, Ty _b);
+ Ty simd_imin(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_imax(Ty _a, Ty _b);
+ Ty simd_imax(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_iadd(Ty _a, Ty _b);
+ Ty simd_iadd(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_FORCE_INLINE Ty simd_isub(Ty _a, Ty _b);
+ Ty simd_isub(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_shuf_xAzC(Ty _a, Ty _b);
+ Ty simd_shuf_xAzC(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_shuf_yBwD(Ty _a, Ty _b);
+ Ty simd_shuf_yBwD(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_rcp(Ty _a);
+ Ty simd_rcp(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_orx(Ty _a);
+ Ty simd_orx(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_orc(Ty _a, Ty _b);
+ Ty simd_orc(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_neg(Ty _a);
+ Ty simd_neg(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_madd(Ty _a, Ty _b, Ty _c);
+ Ty simd_madd(Ty _a, Ty _b, Ty _c);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_nmsub(Ty _a, Ty _b, Ty _c);
+ Ty simd_nmsub(Ty _a, Ty _b, Ty _c);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_div_nr(Ty _a, Ty _b);
+ Ty simd_div_nr(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_selb(Ty _mask, Ty _a, Ty _b);
+ Ty simd_selb(Ty _mask, Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_sels(Ty _test, Ty _a, Ty _b);
+ Ty simd_sels(Ty _test, Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_not(Ty _a);
+ Ty simd_not(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_abs(Ty _a);
+ Ty simd_abs(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_clamp(Ty _a, Ty _min, Ty _max);
+ Ty simd_clamp(Ty _a, Ty _min, Ty _max);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_lerp(Ty _a, Ty _b, Ty _s);
+ Ty simd_lerp(Ty _a, Ty _b, Ty _s);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_rsqrt(Ty _a);
+ Ty simd_rsqrt(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_rsqrt_nr(Ty _a);
+ Ty simd_rsqrt_nr(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_rsqrt_carmack(Ty _a);
+ Ty simd_rsqrt_carmack(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_sqrt_nr(Ty _a);
+ Ty simd_sqrt_nr(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_log2(Ty _a);
+ Ty simd_log2(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_exp2(Ty _a);
+ Ty simd_exp2(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_pow(Ty _a, Ty _b);
+ Ty simd_pow(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_cross3(Ty _a, Ty _b);
+ Ty simd_cross3(Ty _a, Ty _b);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_normalize3(Ty _a);
+ Ty simd_normalize3(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_ceil(Ty _a);
+ Ty simd_ceil(Ty _a);
template<typename Ty>
- BX_SIMD_INLINE Ty simd_floor(Ty _a);
+ Ty simd_floor(Ty _a);
+
+ template<typename Ty>
+ Ty simd_shuf_xAzC_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_shuf_yBwD_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_madd_ni(Ty _a, Ty _b, Ty _c);
+
+ template<typename Ty>
+ Ty simd_nmsub_ni(Ty _a, Ty _b, Ty _c);
+
+ template<typename Ty>
+ Ty simd_div_nr_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_rcp_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_orx_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_orc_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_neg_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_selb_ni(Ty _mask, Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_sels_ni(Ty _test, Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_not_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_min_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_max_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_abs_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_imin_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_imax_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_clamp_ni(Ty _a, Ty _min, Ty _max);
+
+ template<typename Ty>
+ Ty simd_lerp_ni(Ty _a, Ty _b, Ty _s);
+
+ template<typename Ty>
+ Ty simd_sqrt_nr_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_sqrt_nr1_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_rsqrt_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_rsqrt_nr_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_rsqrt_carmack_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_log2_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_exp2_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_pow_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_dot3_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_cross3_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_normalize3_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_dot_ni(Ty _a, Ty _b);
+
+ template<typename Ty>
+ Ty simd_ceil_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_floor_ni(Ty _a);
+
+ template<typename Ty>
+ Ty simd_round_ni(Ty _a);
+
+ template<typename Ty>
+ bool simd_test_any_ni(Ty _a);
+
+ template<typename Ty>
+ bool simd_test_all_ni(Ty _a);
#if BX_SIMD_AVX
typedef __m256 simd256_avx_t;
@@ -421,47 +529,25 @@ namespace bx
typedef simd256_ref_t simd256_t;
#endif // !BX_SIMD_AVX
-} // namespace bx
+ simd128_t simd_zero();
-#include "inline/simd128_ref.inl"
-#include "inline/simd256_ref.inl"
-
-namespace bx
-{
- BX_SIMD_FORCE_INLINE simd128_t simd_zero()
- {
- return simd_zero<simd128_t>();
- }
+ simd128_t simd_ld(const void* _ptr);
- BX_SIMD_FORCE_INLINE simd128_t simd_ld(const void* _ptr)
- {
- return simd_ld<simd128_t>(_ptr);
- }
+ simd128_t simd_ld(float _x, float _y, float _z, float _w);
- BX_SIMD_FORCE_INLINE simd128_t simd_ld(float _x, float _y, float _z, float _w)
- {
- return simd_ld<simd128_t>(_x, _y, _z, _w);
- }
+ simd128_t simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w);
- BX_SIMD_FORCE_INLINE simd128_t simd_ild(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w)
- {
- return simd_ild<simd128_t>(_x, _y, _z, _w);
- }
+ simd128_t simd_splat(const void* _ptr);
- BX_SIMD_FORCE_INLINE simd128_t simd_splat(const void* _ptr)
- {
- return simd_splat<simd128_t>(_ptr);
- }
+ simd128_t simd_splat(float _a);
- BX_SIMD_FORCE_INLINE simd128_t simd_splat(float _a)
- {
- return simd_splat<simd128_t>(_a);
- }
+ simd128_t simd_isplat(uint32_t _a);
- BX_SIMD_FORCE_INLINE simd128_t simd_isplat(uint32_t _a)
- {
- return simd_isplat<simd128_t>(_a);
- }
} // namespace bx
+#include "inline/simd128_ref.inl"
+#include "inline/simd256_ref.inl"
+
+#include "inline/simd_ni.inl"
+
#endif // BX_SIMD_T_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/spscqueue.h b/3rdparty/bx/include/bx/spscqueue.h
index 4d37d63b63f..c79b59547f9 100644
--- a/3rdparty/bx/include/bx/spscqueue.h
+++ b/3rdparty/bx/include/bx/spscqueue.h
@@ -6,7 +6,7 @@
#ifndef BX_SPSCQUEUE_H_HEADER_GUARD
#define BX_SPSCQUEUE_H_HEADER_GUARD
-#include "bx.h"
+#include "allocator.h"
#include "cpu.h"
#include "semaphore.h"
@@ -22,7 +22,7 @@ namespace bx
public:
///
- SpScUnboundedQueue();
+ SpScUnboundedQueue(AllocatorI* _allocator);
///
~SpScUnboundedQueue();
@@ -46,6 +46,7 @@ namespace bx
Node* m_next;
};
+ AllocatorI* m_allocator;
Node* m_first;
Node* m_divider;
Node* m_last;
@@ -62,7 +63,7 @@ namespace bx
public:
///
- SpScUnboundedQueueT();
+ SpScUnboundedQueueT(AllocatorI* _allocator);
///
~SpScUnboundedQueueT();
@@ -80,7 +81,6 @@ namespace bx
SpScUnboundedQueue m_queue;
};
-
#if BX_CONFIG_SUPPORTS_THREADING
///
class SpScBlockingUnboundedQueue
@@ -92,7 +92,7 @@ namespace bx
public:
///
- SpScBlockingUnboundedQueue();
+ SpScBlockingUnboundedQueue(AllocatorI* _allocator);
///
~SpScBlockingUnboundedQueue();
@@ -122,7 +122,7 @@ namespace bx
public:
///
- SpScBlockingUnboundedQueueT();
+ SpScBlockingUnboundedQueueT(AllocatorI* _allocator);
///
~SpScBlockingUnboundedQueueT();
diff --git a/3rdparty/bx/include/bx/string.h b/3rdparty/bx/include/bx/string.h
index 440cbe15f17..331bda889b3 100644
--- a/3rdparty/bx/include/bx/string.h
+++ b/3rdparty/bx/include/bx/string.h
@@ -8,10 +8,17 @@
#include "allocator.h"
-#include <wchar.h> // wchar_t
-
namespace bx
{
+ struct Units
+ {
+ enum Enum
+ {
+ Kilo,
+ Kibi,
+ };
+ };
+
/// Non-zero-terminated string view.
class StringView
{
@@ -23,15 +30,27 @@ namespace bx
StringView(const StringView& _rhs);
///
+ StringView& operator=(const char* _rhs);
+
+ ///
StringView& operator=(const StringView& _rhs);
///
StringView(const char* _ptr, int32_t _len = INT32_MAX);
///
+ StringView(const char* _ptr, const char* _term);
+
+ ///
void set(const char* _ptr, int32_t _len = INT32_MAX);
///
+ void set(const char* _ptr, const char* _term);
+
+ ///
+ void set(const StringView& _str);
+
+ ///
void clear();
///
@@ -66,19 +85,16 @@ namespace bx
StringT<AllocatorT>& operator=(const StringT<AllocatorT>& _rhs);
///
- StringT(const char* _ptr, int32_t _len = INT32_MAX);
-
- ///
StringT(const StringView& _rhs);
///
~StringT();
///
- void set(const char* _ptr, int32_t _len = INT32_MAX);
+ void set(const StringView& _str);
///
- void append(const char* _ptr, int32_t _len = INT32_MAX);
+ void append(const StringView& _str);
///
void clear();
@@ -88,24 +104,45 @@ namespace bx
bool isSpace(char _ch);
///
+ bool isSpace(const StringView& _str);
+
+ ///
bool isUpper(char _ch);
///
+ bool isUpper(const StringView& _str);
+
+ ///
bool isLower(char _ch);
///
+ bool isLower(const StringView& _str);
+
+ ///
bool isAlpha(char _ch);
///
+ bool isAlpha(const StringView& _str);
+
+ ///
bool isNumeric(char _ch);
///
+ bool isNumeric(const StringView& _str);
+
+ ///
bool isAlphaNum(char _ch);
///
+ bool isAlphaNum(const StringView& _str);
+
+ ///
bool isPrint(char _ch);
///
+ bool isPrint(const StringView& _str);
+
+ ///
char toLower(char _ch);
///
@@ -123,36 +160,48 @@ namespace bx
///
void toUpper(char* _inOutStr, int32_t _max = INT32_MAX);
- ///
- bool toBool(const char* _str);
-
/// String compare.
- int32_t strncmp(const char* _lhs, const char* _rhs, int32_t _max = INT32_MAX);
+ int32_t strCmp(const StringView& _lhs, const StringView& _rhs, int32_t _max = INT32_MAX);
/// Case insensitive string compare.
- int32_t strincmp(const char* _lhs, const char* _rhs, int32_t _max = INT32_MAX);
+ int32_t strCmpI(const StringView& _lhs, const StringView& _rhs, int32_t _max = INT32_MAX);
- ///
- int32_t strnlen(const char* _str, int32_t _max = INT32_MAX);
+ // Compare as strings holding indices/version numbers.
+ int32_t strCmpV(const StringView& _lhs, const StringView& _rhs, int32_t _max = INT32_MAX);
+
+ /// Get string length.
+ int32_t strLen(const char* _str, int32_t _max = INT32_MAX);
+
+ /// Get string length.
+ int32_t strLen(const StringView& _str, int32_t _max = INT32_MAX);
/// Copy _num characters from string _src to _dst buffer of maximum _dstSize capacity
/// including zero terminator. Copy will be terminated with '\0'.
- int32_t strlncpy(char* _dst, int32_t _dstSize, const char* _src, int32_t _num = INT32_MAX);
+ int32_t strCopy(char* _dst, int32_t _dstSize, const StringView& _str, int32_t _num = INT32_MAX);
- ///
- int32_t strlncat(char* _dst, int32_t _dstSize, const char* _src, int32_t _num = INT32_MAX);
+ /// Concatinate string.
+ int32_t strCat(char* _dst, int32_t _dstSize, const StringView& _str, int32_t _num = INT32_MAX);
- ///
- const char* strnchr(const char* _str, char _ch, int32_t _max = INT32_MAX);
+ /// Find character in string. Limit search to _max characters.
+ const char* strFind(const StringView& _str, char _ch);
+
+ /// Find character in string in reverse. Limit search to _max characters.
+ const char* strRFind(const StringView& _str, char _ch);
+
+ /// Find substring in string. Limit search to _max characters.
+ const char* strFind(const StringView& _str, const StringView& _find, int32_t _num = INT32_MAX);
+
+ /// Find substring in string. Case insensitive. Limit search to _max characters.
+ const char* strFindI(const StringView& _str, const StringView& _find, int32_t _num = INT32_MAX);
///
- const char* strnrchr(const char* _str, char _ch, int32_t _max = INT32_MAX);
+ StringView strLTrim(const StringView& _str, const StringView& _chars);
- /// Find substring in string. Limit search to _size.
- const char* strnstr(const char* _str, const char* _find, int32_t _max = INT32_MAX);
+ ///
+ StringView strRTrim(const StringView& _str, const StringView& _chars);
- /// Find substring in string. Case insensitive. Limit search to _max.
- const char* stristr(const char* _str, const char* _find, int32_t _max = INT32_MAX);
+ ///
+ StringView strTrim(const StringView& _str, const StringView& _chars);
/// Find new line. Returns pointer after new line terminator.
const char* strnl(const char* _str);
@@ -209,23 +258,11 @@ namespace bx
template <typename Ty>
Ty replaceAll(const Ty& _str, const char* _from, const char* _to);
- /// Extract base file name from file path.
- const char* baseName(const char* _filePath);
+ /// Convert size in bytes to human readable string kibi units.
+ int32_t prettify(char* _out, int32_t _count, uint64_t _value, Units::Enum _units = Units::Kibi);
- /// Convert size in bytes to human readable string.
- void prettify(char* _out, int32_t _count, uint64_t _size);
-
- /// Copy src to string dst of size siz. At most siz-1 characters
- /// will be copied. Always NUL terminates (unless siz == 0).
- /// Returns strlen(src); if retval >= siz, truncation occurred.
- int32_t strlcpy(char* _dst, const char* _src, int32_t _max);
-
- /// Appends src to string dst of size siz (unlike strncat, siz is the
- /// full size of dst, not space left). At most siz-1 characters
- /// will be copied. Always NUL terminates (unless siz <= strlen(dst)).
- /// Returns strlen(src) + MIN(siz, strlen(initial dst)).
- /// If retval >= siz, truncation occurred.
- int32_t strlcat(char* _dst, const char* _src, int32_t _max);
+ ///
+ int32_t toString(char* _out, int32_t _max, bool _value);
///
int32_t toString(char* _out, int32_t _max, double _value);
@@ -242,6 +279,21 @@ namespace bx
///
int32_t toString(char* _out, int32_t _max, uint64_t _value, uint32_t _base = 10);
+ ///
+ bool fromString(bool* _out, const StringView& _str);
+
+ ///
+ bool fromString(float* _out, const StringView& _str);
+
+ ///
+ bool fromString(double* _out, const StringView& _str);
+
+ ///
+ bool fromString(int32_t* _out, const StringView& _str);
+
+ ///
+ bool fromString(uint32_t* _out, const StringView& _str);
+
} // namespace bx
#include "inline/string.inl"
diff --git a/3rdparty/bx/include/bx/thread.h b/3rdparty/bx/include/bx/thread.h
index 72a072e7d62..3ba17e681b4 100644
--- a/3rdparty/bx/include/bx/thread.h
+++ b/3rdparty/bx/include/bx/thread.h
@@ -6,13 +6,13 @@
#ifndef BX_THREAD_H_HEADER_GUARD
#define BX_THREAD_H_HEADER_GUARD
-#include "bx.h"
-#include "semaphore.h"
+#include "allocator.h"
+#include "mpscqueue.h"
namespace bx
{
///
- typedef int32_t (*ThreadFn)(void* _userData);
+ typedef int32_t (*ThreadFn)(class Thread* _self, void* _userData);
///
class Thread
@@ -44,6 +44,12 @@ namespace bx
///
void setThreadName(const char* _name);
+ ///
+ void push(void* _ptr);
+
+ ///
+ void* pop();
+
private:
friend struct ThreadInternal;
int32_t entry();
@@ -52,6 +58,7 @@ namespace bx
ThreadFn m_fn;
void* m_userData;
+ MpScUnboundedBlockingQueue<void> m_queue;
Semaphore m_sem;
uint32_t m_stackSize;
int32_t m_exitCode;
diff --git a/3rdparty/bx/include/bx/url.h b/3rdparty/bx/include/bx/url.h
new file mode 100644
index 00000000000..11172a47f9f
--- /dev/null
+++ b/3rdparty/bx/include/bx/url.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#ifndef BX_URL_H_HEADER_GUARD
+#define BX_URL_H_HEADER_GUARD
+
+#include "string.h"
+
+namespace bx
+{
+ ///
+ class UrlView
+ {
+ public:
+ enum Enum
+ {
+ Scheme,
+ UserName,
+ Password,
+ Host,
+ Port,
+ Path,
+ Query,
+ Fragment,
+
+ Count
+ };
+
+ ///
+ UrlView();
+
+ ///
+ void clear();
+
+ ///
+ bool parse(const StringView& _url);
+
+ ///
+ const StringView& get(Enum _token) const;
+
+ private:
+ StringView m_tokens[Count];
+ };
+
+ ///
+ void urlEncode(char* _out, uint32_t _max, const StringView& _str);
+
+} // namespace bx
+
+#endif // BX_URL_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/compat/msvc/dirent.h b/3rdparty/bx/include/compat/msvc/dirent.h
index 06523528177..a08d0fa4df3 100644
--- a/3rdparty/bx/include/compat/msvc/dirent.h
+++ b/3rdparty/bx/include/compat/msvc/dirent.h
@@ -27,7 +27,9 @@
#ifndef DIRENT_H
#define DIRENT_H
-#ifdef _MSC_VER
+#if defined(__clang__)
+# pragma clang diagnostic ignored "-Wunused-function"
+#elif defined(_MSC_VER)
# pragma warning(disable:4505) // error C4505: '_wreaddir': unreferenced local function has been removed
#else
# pragma GCC diagnostic ignored "-Wunused-function"
diff --git a/3rdparty/bx/include/compat/nacl/memory.h b/3rdparty/bx/include/compat/nacl/memory.h
deleted file mode 100644
index 3b2f5900276..00000000000
--- a/3rdparty/bx/include/compat/nacl/memory.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <string.h>
diff --git a/3rdparty/bx/makefile b/3rdparty/bx/makefile
index bf8d91167d2..e377204ee35 100644
--- a/3rdparty/bx/makefile
+++ b/3rdparty/bx/makefile
@@ -11,9 +11,6 @@ all:
$(GENIE) --gcc=android-arm gmake
$(GENIE) --gcc=android-mips gmake
$(GENIE) --gcc=android-x86 gmake
- $(GENIE) --gcc=nacl gmake
- $(GENIE) --gcc=nacl-arm gmake
- $(GENIE) --gcc=pnacl gmake
$(GENIE) --gcc=mingw-gcc gmake
$(GENIE) --gcc=linux-gcc gmake
$(GENIE) --gcc=osx gmake
@@ -87,34 +84,6 @@ mingw-clang: mingw-clang-debug32 mingw-clang-release32 mingw-clang-debug64 mingw
.build/projects/vs2013:
$(GENIE) vs2013
-.build/projects/gmake-nacl:
- $(GENIE) --gcc=nacl gmake
-nacl-debug32: .build/projects/gmake-nacl
- make -R -C .build/projects/gmake-nacl config=debug32
-nacl-release32: .build/projects/gmake-nacl
- make -R -C .build/projects/gmake-nacl config=release32
-nacl-debug64: .build/projects/gmake-nacl
- make -R -C .build/projects/gmake-nacl config=debug64
-nacl-release64: .build/projects/gmake-nacl
- make -R -C .build/projects/gmake-nacl config=release64
-nacl: nacl-debug32 nacl-release32 nacl-debug64 nacl-release64
-
-.build/projects/gmake-nacl-arm:
- $(GENIE) --gcc=nacl-arm gmake
-nacl-arm-debug: .build/projects/gmake-nacl-arm
- make -R -C .build/projects/gmake-nacl-arm config=debug
-nacl-arm-release: .build/projects/gmake-nacl-arm
- make -R -C .build/projects/gmake-nacl-arm config=release
-nacl-arm: nacl-arm-debug32 nacl-arm-release32
-
-.build/projects/gmake-pnacl:
- $(GENIE) --gcc=pnacl gmake
-pnacl-debug: .build/projects/gmake-pnacl
- make -R -C .build/projects/gmake-pnacl config=debug
-pnacl-release: .build/projects/gmake-pnacl
- make -R -C .build/projects/gmake-pnacl config=release
-pnacl: pnacl-debug pnacl-release
-
.build/projects/gmake-osx:
$(GENIE) --gcc=osx gmake
osx-debug32: .build/projects/gmake-osx
diff --git a/3rdparty/bx/scripts/bin2c.lua b/3rdparty/bx/scripts/bin2c.lua
index daa7b099498..0b1acdcefcb 100644
--- a/3rdparty/bx/scripts/bin2c.lua
+++ b/3rdparty/bx/scripts/bin2c.lua
@@ -27,6 +27,11 @@ project "bin2c"
"pthread",
}
+ configuration { "vs20* or mingw*" }
+ links {
+ "psapi",
+ }
+
configuration {}
strip()
diff --git a/3rdparty/bx/scripts/bx.lua b/3rdparty/bx/scripts/bx.lua
index a84eec43b75..0f2f3ef0596 100644
--- a/3rdparty/bx/scripts/bx.lua
+++ b/3rdparty/bx/scripts/bx.lua
@@ -8,6 +8,7 @@ project "bx"
includedirs {
path.join(BX_DIR, "include"),
+ path.join(BX_DIR, "3rdparty"),
}
files {
@@ -16,6 +17,11 @@ project "bx"
path.join(BX_DIR, "src/**.cpp"),
}
+ configuration { "Debug" }
+ defines {
+ "BX_CONFIG_DEBUG=1",
+ }
+
configuration { "linux-*" }
buildoptions {
"-fPIC",
@@ -25,19 +31,27 @@ project "bx"
if _OPTIONS["with-amalgamated"] then
excludes {
+ path.join(BX_DIR, "src/allocator.cpp"),
+ path.join(BX_DIR, "src/bx.cpp"),
path.join(BX_DIR, "src/commandline.cpp"),
- path.join(BX_DIR, "src/crt.cpp"),
- path.join(BX_DIR, "src/crtimpl.cpp"),
+ path.join(BX_DIR, "src/crtnone.cpp"),
path.join(BX_DIR, "src/debug.cpp"),
path.join(BX_DIR, "src/dtoa.cpp"),
- path.join(BX_DIR, "src/fpumath.cpp"),
+ path.join(BX_DIR, "src/easing.cpp"),
+ path.join(BX_DIR, "src/file.cpp"),
+ path.join(BX_DIR, "src/filepath.cpp"),
+ path.join(BX_DIR, "src/hash.cpp"),
+ path.join(BX_DIR, "src/math.cpp"),
path.join(BX_DIR, "src/mutex.cpp"),
path.join(BX_DIR, "src/os.cpp"),
- path.join(BX_DIR, "src/sem.cpp"),
+ path.join(BX_DIR, "src/process.cpp"),
+ path.join(BX_DIR, "src/semaphore.cpp"),
+ path.join(BX_DIR, "src/settings.cpp"),
path.join(BX_DIR, "src/sort.cpp"),
path.join(BX_DIR, "src/string.cpp"),
path.join(BX_DIR, "src/thread.cpp"),
path.join(BX_DIR, "src/timer.cpp"),
+ path.join(BX_DIR, "src/url.cpp"),
}
else
excludes {
diff --git a/3rdparty/bx/scripts/genie.lua b/3rdparty/bx/scripts/genie.lua
index 9919b8c6181..aab0a8a5620 100644
--- a/3rdparty/bx/scripts/genie.lua
+++ b/3rdparty/bx/scripts/genie.lua
@@ -28,8 +28,8 @@ solution "bx"
language "C++"
BX_DIR = path.getabsolute("..")
-local BX_BUILD_DIR = path.join(BX_DIR, ".build")
-local BX_THIRD_PARTY_DIR = path.join(BX_DIR, "3rdparty")
+BX_BUILD_DIR = path.join(BX_DIR, ".build")
+BX_THIRD_PARTY_DIR = path.join(BX_DIR, "3rdparty")
dofile "toolchain.lua"
toolchain(BX_BUILD_DIR, BX_THIRD_PARTY_DIR)
@@ -75,20 +75,6 @@ project "bx.test"
"-shared",
}
- configuration { "nacl or nacl-arm" }
- targetextension ".nexe"
- links {
- "ppapi",
- "pthread",
- }
-
- configuration { "pnacl" }
- targetextension ".pexe"
- links {
- "ppapi",
- "pthread",
- }
-
configuration { "linux-*" }
links {
"pthread",
@@ -134,20 +120,6 @@ project "bx.bench"
"-shared",
}
- configuration { "nacl or nacl-arm" }
- targetextension ".nexe"
- links {
- "ppapi",
- "pthread",
- }
-
- configuration { "pnacl" }
- targetextension ".pexe"
- links {
- "ppapi",
- "pthread",
- }
-
configuration { "linux-*" }
links {
"pthread",
diff --git a/3rdparty/bx/scripts/toolchain.lua b/3rdparty/bx/scripts/toolchain.lua
index 0152ce79c32..076b8fbac60 100644
--- a/3rdparty/bx/scripts/toolchain.lua
+++ b/3rdparty/bx/scripts/toolchain.lua
@@ -4,7 +4,6 @@
--
local bxDir = path.getabsolute("..")
-local naclToolchain = ""
local function crtNone()
@@ -69,11 +68,8 @@ function toolchain(_buildDir, _libDir)
{ "tvos-simulator", "tvOS - Simulator" },
{ "mingw-gcc", "MinGW" },
{ "mingw-clang", "MinGW (clang compiler)" },
- { "nacl", "Native Client" },
- { "nacl-arm", "Native Client - ARM" },
{ "netbsd", "NetBSD" },
{ "osx", "OSX" },
- { "pnacl", "Native Client - PNaCl" },
{ "orbis", "Orbis" },
{ "qnx-arm", "QNX/Blackberry - ARM" },
{ "riscv", "RISC-V" },
@@ -135,7 +131,7 @@ function toolchain(_buildDir, _libDir)
newoption {
trigger = "with-windows",
value = "#",
- description = "Set the Windows target platform version (default: 10.0.10240.0).",
+ description = "Set the Windows target platform version (default: $WindowsSDKVersion or 8.1).",
}
newoption {
@@ -179,7 +175,7 @@ function toolchain(_buildDir, _libDir)
tvosPlatform = _OPTIONS["with-tvos"]
end
- local windowsPlatform = "10.0.10240.0"
+ local windowsPlatform = string.gsub(os.getenv("WindowsSDKVersion") or "8.1", "\\", "")
if _OPTIONS["with-windows"] then
windowsPlatform = _OPTIONS["with-windows"]
end
@@ -205,7 +201,7 @@ function toolchain(_buildDir, _libDir)
if not os.getenv("ANDROID_NDK_ARM")
or not os.getenv("ANDROID_NDK_CLANG")
or not os.getenv("ANDROID_NDK_ROOT") then
- print("Set ANDROID_NDK_CLANG, ANDROID_NDK_ARM, and ANDROID_NDK_ROOT envrionment variables.")
+ print("Set ANDROID_NDK_CLANG, ANDROID_NDK_ARM, and ANDROID_NDK_ROOT environment variables.")
end
premake.gcc.cc = "$(ANDROID_NDK_CLANG)/bin/clang"
@@ -220,7 +216,7 @@ function toolchain(_buildDir, _libDir)
if not os.getenv("ANDROID_NDK_MIPS")
or not os.getenv("ANDROID_NDK_CLANG")
or not os.getenv("ANDROID_NDK_ROOT") then
- print("Set ANDROID_NDK_CLANG, ANDROID_NDK_ARM, and ANDROID_NDK_ROOT envrionment variables.")
+ print("Set ANDROID_NDK_CLANG, ANDROID_NDK_ARM, and ANDROID_NDK_ROOT environment variables.")
end
premake.gcc.cc = "$(ANDROID_NDK_CLANG)/bin/clang"
@@ -233,7 +229,7 @@ function toolchain(_buildDir, _libDir)
if not os.getenv("ANDROID_NDK_X86")
or not os.getenv("ANDROID_NDK_CLANG")
or not os.getenv("ANDROID_NDK_ROOT") then
- print("Set ANDROID_NDK_CLANG, ANDROID_NDK_ARM, and ANDROID_NDK_ROOT envrionment variables.")
+ print("Set ANDROID_NDK_CLANG, ANDROID_NDK_ARM, and ANDROID_NDK_ROOT environment variables.")
end
premake.gcc.cc = "$(ANDROID_NDK_CLANG)/bin/clang"
@@ -244,7 +240,7 @@ function toolchain(_buildDir, _libDir)
elseif "asmjs" == _OPTIONS["gcc"] then
if not os.getenv("EMSCRIPTEN") then
- print("Set EMSCRIPTEN enviroment variable.")
+ print("Set EMSCRIPTEN environment variable.")
end
premake.gcc.cc = "\"$(EMSCRIPTEN)/emcc\""
@@ -316,7 +312,7 @@ function toolchain(_buildDir, _libDir)
elseif "linux-steamlink" == _OPTIONS["gcc"] then
if not os.getenv("MARVELL_SDK_PATH") then
- print("Set MARVELL_SDK_PATH enviroment variable.")
+ print("Set MARVELL_SDK_PATH environment variable.")
end
premake.gcc.cc = "$(MARVELL_SDK_PATH)/toolchain/bin/armv7a-cros-linux-gnueabi-gcc"
@@ -325,6 +321,10 @@ function toolchain(_buildDir, _libDir)
location (path.join(_buildDir, "projects", _ACTION .. "-linux-steamlink"))
elseif "mingw-gcc" == _OPTIONS["gcc"] then
+ if not os.getenv("MINGW") then
+ print("Set MINGW environment variable.")
+ end
+
local mingwToolchain = "x86_64-w64-mingw32"
if compiler32bit then
if os.is("linux") then
@@ -347,42 +347,6 @@ function toolchain(_buildDir, _libDir)
-- premake.gcc.llvm = true
location (path.join(_buildDir, "projects", _ACTION .. "-mingw-clang"))
- elseif "nacl" == _OPTIONS["gcc"] then
-
- if not os.getenv("NACL_SDK_ROOT") then
- print("Set NACL_SDK_ROOT enviroment variable.")
- end
-
- naclToolchain = "$(NACL_SDK_ROOT)/toolchain/win_x86_glibc/bin/x86_64-nacl-"
- if os.is("macosx") then
- naclToolchain = "$(NACL_SDK_ROOT)/toolchain/mac_x86_glibc/bin/x86_64-nacl-"
- elseif os.is("linux") then
- naclToolchain = "$(NACL_SDK_ROOT)/toolchain/linux_x86_glibc/bin/x86_64-nacl-"
- end
-
- premake.gcc.cc = naclToolchain .. "gcc"
- premake.gcc.cxx = naclToolchain .. "g++"
- premake.gcc.ar = naclToolchain .. "ar"
- location (path.join(_buildDir, "projects", _ACTION .. "-nacl"))
-
- elseif "nacl-arm" == _OPTIONS["gcc"] then
-
- if not os.getenv("NACL_SDK_ROOT") then
- print("Set NACL_SDK_ROOT enviroment variable.")
- end
-
- naclToolchain = "$(NACL_SDK_ROOT)/toolchain/win_arm_glibc/bin/arm-nacl-"
- if os.is("macosx") then
- naclToolchain = "$(NACL_SDK_ROOT)/toolchain/mac_arm_glibc/bin/arm-nacl-"
- elseif os.is("linux") then
- naclToolchain = "$(NACL_SDK_ROOT)/toolchain/linux_arm_glibc/bin/arm-nacl-"
- end
-
- premake.gcc.cc = naclToolchain .. "gcc"
- premake.gcc.cxx = naclToolchain .. "g++"
- premake.gcc.ar = naclToolchain .. "ar"
- location (path.join(_buildDir, "projects", _ACTION .. "-nacl-arm"))
-
elseif "netbsd" == _OPTIONS["gcc"] then
location (path.join(_buildDir, "projects", _ACTION .. "-netbsd"))
@@ -390,7 +354,7 @@ function toolchain(_buildDir, _libDir)
if os.is("linux") then
if not os.getenv("OSXCROSS") then
- print("Set OSXCROSS enviroment variable.")
+ print("Set OSXCROSS environment variable.")
end
local osxToolchain = "x86_64-apple-darwin15-"
@@ -400,28 +364,10 @@ function toolchain(_buildDir, _libDir)
end
location (path.join(_buildDir, "projects", _ACTION .. "-osx"))
- elseif "pnacl" == _OPTIONS["gcc"] then
-
- if not os.getenv("NACL_SDK_ROOT") then
- print("Set NACL_SDK_ROOT enviroment variable.")
- end
-
- naclToolchain = "$(NACL_SDK_ROOT)/toolchain/win_pnacl/bin/pnacl-"
- if os.is("macosx") then
- naclToolchain = "$(NACL_SDK_ROOT)/toolchain/mac_pnacl/bin/pnacl-"
- elseif os.is("linux") then
- naclToolchain = "$(NACL_SDK_ROOT)/toolchain/linux_pnacl/bin/pnacl-"
- end
-
- premake.gcc.cc = naclToolchain .. "clang"
- premake.gcc.cxx = naclToolchain .. "clang++"
- premake.gcc.ar = naclToolchain .. "ar"
- location (path.join(_buildDir, "projects", _ACTION .. "-pnacl"))
-
elseif "orbis" == _OPTIONS["gcc"] then
if not os.getenv("SCE_ORBIS_SDK_DIR") then
- print("Set SCE_ORBIS_SDK_DIR enviroment variable.")
+ print("Set SCE_ORBIS_SDK_DIR environment variable.")
end
orbisToolchain = "$(SCE_ORBIS_SDK_DIR)/host_tools/bin/orbis-"
@@ -434,7 +380,7 @@ function toolchain(_buildDir, _libDir)
elseif "qnx-arm" == _OPTIONS["gcc"] then
if not os.getenv("QNX_HOST") then
- print("Set QNX_HOST enviroment variable.")
+ print("Set QNX_HOST environment variable.")
end
premake.gcc.cc = "$(QNX_HOST)/usr/bin/arm-unknown-nto-qnx8.0.0eabi-gcc"
@@ -458,6 +404,10 @@ function toolchain(_buildDir, _libDir)
or _ACTION == "vs2017"
then
+ local action = premake.action.current()
+ action.vstudio.windowsTargetPlatformVersion = windowsPlatform
+ action.vstudio.windowsTargetPlatformMinVersion = windowsPlatform
+
if (_ACTION .. "-clang") == _OPTIONS["vs"] then
if "vs2017-clang" == _OPTIONS["vs"] then
premake.vstudio.toolset = "v141_clang_c2"
@@ -488,10 +438,6 @@ function toolchain(_buildDir, _libDir)
premake.vstudio.toolset = "v140"
premake.vstudio.storeapp = "8.2"
- local action = premake.action.current()
- action.vstudio.windowsTargetPlatformVersion = windowsPlatform
- action.vstudio.windowsTargetPlatformMinVersion = windowsPlatform
-
platforms { "ARM" }
location (path.join(_buildDir, "projects", _ACTION .. "-winstore82"))
@@ -507,14 +453,12 @@ function toolchain(_buildDir, _libDir)
elseif "orbis" == _OPTIONS["vs"] then
if not os.getenv("SCE_ORBIS_SDK_DIR") then
- print("Set SCE_ORBIS_SDK_DIR enviroment variable.")
+ print("Set SCE_ORBIS_SDK_DIR environment variable.")
end
platforms { "Orbis" }
location (path.join(_buildDir, "projects", _ACTION .. "-orbis"))
- end
-
elseif ("vs2012-xp") == _OPTIONS["vs"] then
premake.vstudio.toolset = ("v110_xp")
location (path.join(_buildDir, "projects", _ACTION .. "-xp"))
@@ -531,6 +475,8 @@ function toolchain(_buildDir, _libDir)
premake.vstudio.toolset = ("v141_xp")
location (path.join(_buildDir, "projects", _ACTION .. "-xp"))
+ end
+
elseif _ACTION == "xcode4" then
if "osx" == _OPTIONS["xcode"] then
@@ -601,7 +547,7 @@ function toolchain(_buildDir, _libDir)
"EnableSSE2",
}
- configuration { "vs*", "not orbis" }
+ configuration { "vs*", "not orbis", "not NX32", "not NX64" }
includedirs { path.join(bxDir, "include/compat/msvc") }
defines {
"WIN32",
@@ -777,8 +723,16 @@ function toolchain(_buildDir, _libDir)
configuration { "linux-gcc* or linux-clang*" }
buildoptions {
"-msse2",
+-- "-Wdouble-promotion",
+-- "-Wduplicated-branches",
+-- "-Wduplicated-cond",
+-- "-Wjump-misses-init",
+ "-Wlogical-op",
+ "-Wshadow",
+-- "-Wnull-dereference",
"-Wunused-value",
"-Wundef",
+-- "-Wuseless-cast",
}
buildoptions_cpp {
"-std=c++11",
@@ -1022,10 +976,14 @@ function toolchain(_buildDir, _libDir)
libdirs { path.join(_libDir, "lib/asmjs") }
buildoptions {
"-i\"system$(EMSCRIPTEN)/system/include\"",
+ "-i\"system$(EMSCRIPTEN)/system/include/libcxx\"",
"-i\"system$(EMSCRIPTEN)/system/include/libc\"",
"-Wunused-value",
"-Wundef",
}
+ buildoptions_cpp {
+ "-std=c++11",
+ }
configuration { "freebsd" }
targetdir (path.join(_buildDir, "freebsd/bin"))
@@ -1035,83 +993,6 @@ function toolchain(_buildDir, _libDir)
path.join(bxDir, "include/compat/freebsd"),
}
- configuration { "nacl or nacl-arm or pnacl" }
- buildoptions {
- "-U__STRICT_ANSI__", -- strcasecmp, setenv, unsetenv,...
- "-fno-stack-protector",
- "-fdiagnostics-show-option",
- "-fdata-sections",
- "-ffunction-sections",
- "-Wunused-value",
- "-Wundef",
- }
- buildoptions_cpp {
- "-std=c++11",
- }
- includedirs {
- "$(NACL_SDK_ROOT)/include",
- path.join(bxDir, "include/compat/nacl"),
- }
-
- configuration { "nacl" }
- buildoptions {
- "-pthread",
- "-mfpmath=sse", -- force SSE to get 32-bit and 64-bit builds deterministic.
- "-msse2",
- }
- linkoptions {
- "-Wl,--gc-sections",
- }
-
- configuration { "x32", "nacl" }
- targetdir (path.join(_buildDir, "nacl-x86/bin"))
- objdir (path.join(_buildDir, "nacl-x86/obj"))
- libdirs { path.join(_libDir, "lib/nacl-x86") }
- linkoptions { "-melf32_nacl" }
-
- configuration { "x32", "nacl", "Debug" }
- libdirs { "$(NACL_SDK_ROOT)/lib/glibc_x86_32/Debug" }
-
- configuration { "x32", "nacl", "Release" }
- libdirs { "$(NACL_SDK_ROOT)/lib/glibc_x86_32/Release" }
-
- configuration { "x64", "nacl" }
- targetdir (path.join(_buildDir, "nacl-x64/bin"))
- objdir (path.join(_buildDir, "nacl-x64/obj"))
- libdirs { path.join(_libDir, "lib/nacl-x64") }
- linkoptions { "-melf64_nacl" }
-
- configuration { "x64", "nacl", "Debug" }
- libdirs { "$(NACL_SDK_ROOT)/lib/glibc_x86_64/Debug" }
-
- configuration { "x64", "nacl", "Release" }
- libdirs { "$(NACL_SDK_ROOT)/lib/glibc_x86_64/Release" }
-
- configuration { "nacl-arm" }
- buildoptions {
- "-Wno-psabi", -- note: the mangling of 'va_list' has changed in GCC 4.4.0
- }
- targetdir (path.join(_buildDir, "nacl-arm/bin"))
- objdir (path.join(_buildDir, "nacl-arm/obj"))
- libdirs { path.join(_libDir, "lib/nacl-arm") }
-
- configuration { "nacl-arm", "Debug" }
- libdirs { "$(NACL_SDK_ROOT)/lib/glibc_arm/Debug" }
-
- configuration { "nacl-arm", "Release" }
- libdirs { "$(NACL_SDK_ROOT)/lib/glibc_arm/Release" }
-
- configuration { "pnacl" }
- targetdir (path.join(_buildDir, "pnacl/bin"))
- objdir (path.join(_buildDir, "pnacl/obj"))
- libdirs { path.join(_libDir, "lib/pnacl") }
-
- configuration { "pnacl", "Debug" }
- libdirs { "$(NACL_SDK_ROOT)/lib/pnacl/Debug" }
-
- configuration { "pnacl", "Release" }
- libdirs { "$(NACL_SDK_ROOT)/lib/pnacl/Release" }
-
configuration { "xbox360" }
targetdir (path.join(_buildDir, "xbox360/bin"))
objdir (path.join(_buildDir, "xbox360/obj"))
@@ -1163,6 +1044,9 @@ function toolchain(_buildDir, _libDir)
buildoptions_cpp {
"-std=c++11",
}
+ buildoptions_objcpp {
+ "-std=c++11",
+ }
buildoptions {
"-Wfatal-errors",
"-msse2",
@@ -1178,6 +1062,9 @@ function toolchain(_buildDir, _libDir)
buildoptions_cpp {
"-std=c++11",
}
+ buildoptions_objcpp {
+ "-std=c++11",
+ }
buildoptions {
"-Wfatal-errors",
"-Wunused-value",
@@ -1302,13 +1189,9 @@ function toolchain(_buildDir, _libDir)
"$(SCE_ORBIS_SDK_DIR)/target/include",
"$(SCE_ORBIS_SDK_DIR)/target/include_common",
}
- buildoptions {
- }
buildoptions_cpp {
"-std=c++11",
}
- linkoptions {
- }
configuration { "qnx-arm" }
targetdir (path.join(_buildDir, "qnx-arm/bin"))
@@ -1418,18 +1301,6 @@ function strip()
"$(SILENT) $(MINGW)/bin/strip -s \"$(TARGET)\""
}
- configuration { "pnacl" }
- postbuildcommands {
- "$(SILENT) echo Running pnacl-finalize.",
- "$(SILENT) " .. naclToolchain .. "finalize \"$(TARGET)\""
- }
-
- configuration { "*nacl*", "Release" }
- postbuildcommands {
- "$(SILENT) echo Stripping symbols.",
- "$(SILENT) " .. naclToolchain .. "strip -s \"$(TARGET)\""
- }
-
configuration { "asmjs" }
postbuildcommands {
"$(SILENT) echo Running asmjs finalize.",
@@ -1441,7 +1312,8 @@ function strip()
-- .. "-s USE_WEBGL2=1 "
.. "--memory-init-file 1 "
.. "\"$(TARGET)\" -o \"$(TARGET)\".html "
--- .. "--preload-file ../../../examples/runtime@/"
+-- .. "--preload-file ../../../examples/runtime@/ "
+ .. "-s PRECISE_F32=1"
}
configuration { "riscv" }
diff --git a/3rdparty/bx/src/allocator.cpp b/3rdparty/bx/src/allocator.cpp
new file mode 100644
index 00000000000..e3b5b37c826
--- /dev/null
+++ b/3rdparty/bx/src/allocator.cpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "bx_p.h"
+#include <bx/allocator.h>
+
+#include <malloc.h>
+
+#ifndef BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT
+# define BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT 8
+#endif // BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT
+
+namespace bx
+{
+ DefaultAllocator::DefaultAllocator()
+ {
+ }
+
+ DefaultAllocator::~DefaultAllocator()
+ {
+ }
+
+ void* DefaultAllocator::realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line)
+ {
+ if (0 == _size)
+ {
+ if (NULL != _ptr)
+ {
+ if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ {
+ ::free(_ptr);
+ return NULL;
+ }
+
+# if BX_COMPILER_MSVC
+ BX_UNUSED(_file, _line);
+ _aligned_free(_ptr);
+# else
+ bx::alignedFree(this, _ptr, _align, _file, _line);
+# endif // BX_
+ }
+
+ return NULL;
+ }
+ else if (NULL == _ptr)
+ {
+ if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ {
+ return ::malloc(_size);
+ }
+
+# if BX_COMPILER_MSVC
+ BX_UNUSED(_file, _line);
+ return _aligned_malloc(_size, _align);
+# else
+ return bx::alignedAlloc(this, _size, _align, _file, _line);
+# endif // BX_
+ }
+
+ if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ {
+ return ::realloc(_ptr, _size);
+ }
+
+# if BX_COMPILER_MSVC
+ BX_UNUSED(_file, _line);
+ return _aligned_realloc(_ptr, _size, _align);
+# else
+ return bx::alignedRealloc(this, _ptr, _size, _align, _file, _line);
+# endif // BX_
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/src/amalgamated.cpp b/3rdparty/bx/src/amalgamated.cpp
index 1aeb2bb906d..7eaf04a58aa 100644
--- a/3rdparty/bx/src/amalgamated.cpp
+++ b/3rdparty/bx/src/amalgamated.cpp
@@ -3,17 +3,24 @@
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
+#include "allocator.cpp"
#include "bx.cpp"
#include "commandline.cpp"
-#include "crtimpl.cpp"
#include "crtnone.cpp"
#include "debug.cpp"
#include "dtoa.cpp"
-#include "fpumath.cpp"
+#include "easing.cpp"
+#include "file.cpp"
+#include "filepath.cpp"
+#include "hash.cpp"
+#include "math.cpp"
#include "mutex.cpp"
#include "os.cpp"
+#include "process.cpp"
#include "semaphore.cpp"
+#include "settings.cpp"
#include "sort.cpp"
#include "string.cpp"
#include "thread.cpp"
#include "timer.cpp"
+#include "url.cpp"
diff --git a/3rdparty/bx/src/bx.cpp b/3rdparty/bx/src/bx.cpp
index 8a063c56de9..ae9743e45a7 100644
--- a/3rdparty/bx/src/bx.cpp
+++ b/3rdparty/bx/src/bx.cpp
@@ -3,6 +3,7 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/debug.h>
#include <bx/readerwriter.h>
diff --git a/3rdparty/bx/src/bx_p.h b/3rdparty/bx/src/bx_p.h
new file mode 100644
index 00000000000..df37a2c5791
--- /dev/null
+++ b/3rdparty/bx/src/bx_p.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#ifndef BX_P_H_HEADER_GUARD
+#define BX_P_H_HEADER_GUARD
+
+#ifndef BX_CONFIG_DEBUG
+# define BX_CONFIG_DEBUG 0
+#endif // BX_CONFIG_DEBUG
+
+#if BX_CONFIG_DEBUG
+# define BX_TRACE _BX_TRACE
+# define BX_WARN _BX_WARN
+# define BX_CHECK _BX_CHECK
+# define BX_CONFIG_ALLOCATOR_DEBUG 1
+#endif // BX_CONFIG_DEBUG
+
+#define _BX_TRACE(_format, ...) \
+ BX_MACRO_BLOCK_BEGIN \
+ bx::debugPrintf(__FILE__ "(" BX_STRINGIZE(__LINE__) "): BX " _format "\n", ##__VA_ARGS__); \
+ BX_MACRO_BLOCK_END
+
+#define _BX_WARN(_condition, _format, ...) \
+ BX_MACRO_BLOCK_BEGIN \
+ if (!BX_IGNORE_C4127(_condition) ) \
+ { \
+ BX_TRACE("WARN " _format, ##__VA_ARGS__); \
+ } \
+ BX_MACRO_BLOCK_END
+
+#define _BX_CHECK(_condition, _format, ...) \
+ BX_MACRO_BLOCK_BEGIN \
+ if (!BX_IGNORE_C4127(_condition) ) \
+ { \
+ BX_TRACE("CHECK " _format, ##__VA_ARGS__); \
+ bx::debugBreak(); \
+ } \
+ BX_MACRO_BLOCK_END
+
+#include <bx/bx.h>
+
+#endif // BX_P_H_HEADER_GUARD
diff --git a/3rdparty/bx/src/commandline.cpp b/3rdparty/bx/src/commandline.cpp
index 6ec2aadaaaf..de658261c41 100644
--- a/3rdparty/bx/src/commandline.cpp
+++ b/3rdparty/bx/src/commandline.cpp
@@ -3,6 +3,7 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/commandline.h>
#include <bx/string.h>
@@ -197,7 +198,7 @@ namespace bx
const char* arg = findOption(_short, _long, 1);
if (NULL != arg)
{
- _value = atoi(arg);
+ fromString(&_value, arg);
return true;
}
@@ -209,7 +210,7 @@ namespace bx
const char* arg = findOption(_short, _long, 1);
if (NULL != arg)
{
- _value = atoi(arg);
+ fromString(&_value, arg);
return true;
}
@@ -221,7 +222,7 @@ namespace bx
const char* arg = findOption(_short, _long, 1);
if (NULL != arg)
{
- _value = float(atof(arg));
+ fromString(&_value, arg);
return true;
}
@@ -233,7 +234,7 @@ namespace bx
const char* arg = findOption(_short, _long, 1);
if (NULL != arg)
{
- _value = atof(arg);
+ fromString(&_value, arg);
return true;
}
@@ -245,11 +246,11 @@ namespace bx
const char* arg = findOption(_short, _long, 1);
if (NULL != arg)
{
- if ('0' == *arg || (0 == strincmp(arg, "false") ) )
+ if ('0' == *arg || (0 == strCmpI(arg, "false") ) )
{
_value = false;
}
- else if ('0' != *arg || (0 == strincmp(arg, "true") ) )
+ else if ('0' != *arg || (0 == strCmpI(arg, "true") ) )
{
_value = true;
}
@@ -262,7 +263,7 @@ namespace bx
const char* CommandLine::find(int32_t _skip, const char _short, const char* _long, int32_t _numParams) const
{
- for (int32_t ii = 0; ii < m_argc; ++ii)
+ for (int32_t ii = 0; ii < m_argc && 0 != strCmp(m_argv[ii], "--"); ++ii)
{
const char* arg = m_argv[ii];
if ('-' == *arg)
@@ -270,7 +271,7 @@ namespace bx
++arg;
if (_short == *arg)
{
- if (1 == strnlen(arg) )
+ if (1 == strLen(arg) )
{
if (0 == _skip)
{
@@ -293,7 +294,7 @@ namespace bx
}
else if (NULL != _long
&& '-' == *arg
- && 0 == strincmp(arg+1, _long) )
+ && 0 == strCmpI(arg+1, _long) )
{
if (0 == _skip)
{
@@ -319,4 +320,14 @@ namespace bx
return NULL;
}
+ int32_t CommandLine::getNum() const
+ {
+ return m_argc;
+ }
+
+ char const* CommandLine::get(int32_t _idx) const
+ {
+ return m_argv[_idx];
+ }
+
} // namespace bx
diff --git a/3rdparty/bx/src/crtimpl.cpp b/3rdparty/bx/src/crtimpl.cpp
deleted file mode 100644
index 064b9f6e3ad..00000000000
--- a/3rdparty/bx/src/crtimpl.cpp
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
- */
-
-#include <bx/crtimpl.h>
-#include <stdio.h>
-
-#if BX_CONFIG_ALLOCATOR_CRT
-# include <malloc.h>
-#endif // BX_CONFIG_ALLOCATOR_CRT
-
-namespace bx
-{
-#if BX_CONFIG_ALLOCATOR_CRT
- CrtAllocator::CrtAllocator()
- {
- }
-
- CrtAllocator::~CrtAllocator()
- {
- }
-
- void* CrtAllocator::realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line)
- {
- if (0 == _size)
- {
- if (NULL != _ptr)
- {
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
- {
- ::free(_ptr);
- return NULL;
- }
-
-# if BX_COMPILER_MSVC
- BX_UNUSED(_file, _line);
- _aligned_free(_ptr);
-# else
- bx::alignedFree(this, _ptr, _align, _file, _line);
-# endif // BX_
- }
-
- return NULL;
- }
- else if (NULL == _ptr)
- {
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
- {
- return ::malloc(_size);
- }
-
-# if BX_COMPILER_MSVC
- BX_UNUSED(_file, _line);
- return _aligned_malloc(_size, _align);
-# else
- return bx::alignedAlloc(this, _size, _align, _file, _line);
-# endif // BX_
- }
-
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
- {
- return ::realloc(_ptr, _size);
- }
-
-# if BX_COMPILER_MSVC
- BX_UNUSED(_file, _line);
- return _aligned_realloc(_ptr, _size, _align);
-# else
- return bx::alignedRealloc(this, _ptr, _size, _align, _file, _line);
-# endif // BX_
- }
-#endif // BX_CONFIG_ALLOCATOR_CRT
-
-#if BX_CONFIG_CRT_FILE_READER_WRITER
-
-# if BX_CRT_MSVC
-# define fseeko64 _fseeki64
-# define ftello64 _ftelli64
-# elif 0 \
- || BX_PLATFORM_ANDROID \
- || BX_PLATFORM_BSD \
- || BX_PLATFORM_IOS \
- || BX_PLATFORM_OSX \
- || BX_PLATFORM_QNX
-# define fseeko64 fseeko
-# define ftello64 ftello
-# elif BX_PLATFORM_PS4
-# define fseeko64 fseek
-# define ftello64 ftell
-# endif // BX_
-
- CrtFileReader::CrtFileReader()
- : m_file(NULL)
- {
- }
-
- CrtFileReader::~CrtFileReader()
- {
- }
-
- bool CrtFileReader::open(const char* _filePath, Error* _err)
- {
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
-
- if (NULL != m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_ALREADY_OPEN, "CrtFileReader: File is already open.");
- return false;
- }
-
- m_file = fopen(_filePath, "rb");
- if (NULL == m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "CrtFileReader: Failed to open file.");
- return false;
- }
-
- return true;
- }
-
- void CrtFileReader::close()
- {
- BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
- FILE* file = (FILE*)m_file;
- fclose(file);
- m_file = NULL;
- }
-
- int64_t CrtFileReader::seek(int64_t _offset, Whence::Enum _whence)
- {
- BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
- FILE* file = (FILE*)m_file;
- fseeko64(file, _offset, _whence);
- return ftello64(file);
- }
-
- int32_t CrtFileReader::read(void* _data, int32_t _size, Error* _err)
- {
- BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
-
- FILE* file = (FILE*)m_file;
- int32_t size = (int32_t)fread(_data, 1, _size, file);
- if (size != _size)
- {
- if (0 != feof(file) )
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_EOF, "CrtFileReader: EOF.");
- }
- else if (0 != ferror(file) )
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "CrtFileReader: read error.");
- }
-
- return size >= 0 ? size : 0;
- }
-
- return size;
- }
-
- CrtFileWriter::CrtFileWriter()
- : m_file(NULL)
- {
- }
-
- CrtFileWriter::~CrtFileWriter()
- {
- }
-
- bool CrtFileWriter::open(const char* _filePath, bool _append, Error* _err)
- {
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
-
- if (NULL != m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_ALREADY_OPEN, "CrtFileReader: File is already open.");
- return false;
- }
-
- m_file = fopen(_filePath, _append ? "ab" : "wb");
-
- if (NULL == m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "CrtFileWriter: Failed to open file.");
- return false;
- }
-
- return true;
- }
-
- void CrtFileWriter::close()
- {
- BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
- FILE* file = (FILE*)m_file;
- fclose(file);
- m_file = NULL;
- }
-
- int64_t CrtFileWriter::seek(int64_t _offset, Whence::Enum _whence)
- {
- BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
- FILE* file = (FILE*)m_file;
- fseeko64(file, _offset, _whence);
- return ftello64(file);
- }
-
- int32_t CrtFileWriter::write(const void* _data, int32_t _size, Error* _err)
- {
- BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
-
- FILE* file = (FILE*)m_file;
- int32_t size = (int32_t)fwrite(_data, 1, _size, file);
- if (size != _size)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "CrtFileWriter: write failed.");
- return size >= 0 ? size : 0;
- }
-
- return size;
- }
-#endif // BX_CONFIG_CRT_FILE_READER_WRITER
-
-#if BX_CONFIG_CRT_PROCESS
-
-#if BX_CRT_MSVC
-# define popen _popen
-# define pclose _pclose
-#endif // BX_CRT_MSVC
-
- ProcessReader::ProcessReader()
- : m_file(NULL)
- {
- }
-
- ProcessReader::~ProcessReader()
- {
- BX_CHECK(NULL == m_file, "Process not closed!");
- }
-
- bool ProcessReader::open(const char* _command, Error* _err)
- {
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
-
- if (NULL != m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_ALREADY_OPEN, "ProcessReader: File is already open.");
- return false;
- }
-
- m_file = popen(_command, "r");
- if (NULL == m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "ProcessReader: Failed to open process.");
- return false;
- }
-
- return true;
- }
-
- void ProcessReader::close()
- {
- BX_CHECK(NULL != m_file, "Process not open!");
- FILE* file = (FILE*)m_file;
- m_exitCode = pclose(file);
- m_file = NULL;
- }
-
- int32_t ProcessReader::read(void* _data, int32_t _size, Error* _err)
- {
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); BX_UNUSED(_err);
-
- FILE* file = (FILE*)m_file;
- int32_t size = (int32_t)fread(_data, 1, _size, file);
- if (size != _size)
- {
- if (0 != feof(file) )
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_EOF, "ProcessReader: EOF.");
- }
- else if (0 != ferror(file) )
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "ProcessReader: read error.");
- }
-
- return size >= 0 ? size : 0;
- }
-
- return size;
- }
-
- int32_t ProcessReader::getExitCode() const
- {
- return m_exitCode;
- }
-
- ProcessWriter::ProcessWriter()
- : m_file(NULL)
- {
- }
-
- ProcessWriter::~ProcessWriter()
- {
- BX_CHECK(NULL == m_file, "Process not closed!");
- }
-
- bool ProcessWriter::open(const char* _command, bool, Error* _err)
- {
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
-
- if (NULL != m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_ALREADY_OPEN, "ProcessWriter: File is already open.");
- return false;
- }
-
- m_file = popen(_command, "w");
- if (NULL == m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "ProcessWriter: Failed to open process.");
- return false;
- }
-
- return true;
- }
-
- void ProcessWriter::close()
- {
- BX_CHECK(NULL != m_file, "Process not open!");
- FILE* file = (FILE*)m_file;
- m_exitCode = pclose(file);
- m_file = NULL;
- }
-
- int32_t ProcessWriter::write(const void* _data, int32_t _size, Error* _err)
- {
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); BX_UNUSED(_err);
-
- FILE* file = (FILE*)m_file;
- int32_t size = (int32_t)fwrite(_data, 1, _size, file);
- if (size != _size)
- {
- if (0 != ferror(file) )
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "ProcessWriter: write error.");
- }
-
- return size >= 0 ? size : 0;
- }
-
- return size;
- }
-
- int32_t ProcessWriter::getExitCode() const
- {
- return m_exitCode;
- }
-#endif // BX_CONFIG_CRT_PROCESS
-
-} // namespace bx
diff --git a/3rdparty/bx/src/crtnone.cpp b/3rdparty/bx/src/crtnone.cpp
index 0e88551b6f3..85028212133 100644
--- a/3rdparty/bx/src/crtnone.cpp
+++ b/3rdparty/bx/src/crtnone.cpp
@@ -3,6 +3,7 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/debug.h>
#include <bx/sort.h>
#include <bx/readerwriter.h>
@@ -39,50 +40,50 @@ extern "C" int32_t memcmp(const void* _lhs, const void* _rhs, size_t _numBytes)
extern "C" size_t strlen(const char* _str)
{
- return bx::strnlen(_str);
+ return bx::strLen(_str);
}
extern "C" size_t strnlen(const char* _str, size_t _max)
{
- return bx::strnlen(_str, _max);
+ return bx::strLen(_str, _max);
}
extern "C" void* strcpy(char* _dst, const char* _src)
{
- bx::strlncpy(_dst, INT32_MAX, _src, INT32_MAX);
+ bx::strCopy(_dst, INT32_MAX, _src, INT32_MAX);
return _dst;
}
extern "C" void* strncpy(char* _dst, const char* _src, size_t _num)
{
- bx::strlncpy(_dst, INT32_MAX, _src, _num);
+ bx::strCopy(_dst, INT32_MAX, _src, _num);
return _dst;
}
extern "C" char* strcat(char* _dst, const char* _src)
{
- bx::strlncat(_dst, INT32_MAX, _src, INT32_MAX);
+ bx::strCat(_dst, INT32_MAX, _src, INT32_MAX);
return _dst;
}
extern "C" const char* strchr(const char* _str, int _ch)
{
- return bx::strnchr(_str, _ch);
+ return bx::strFind(_str, _ch);
}
extern "C" int32_t strcmp(const char* _lhs, const char* _rhs)
{
- return bx::strncmp(_lhs, _rhs);
+ return bx::strCmp(_lhs, _rhs);
}
extern "C" int32_t strncmp(const char* _lhs, const char* _rhs, size_t _max)
{
- return bx::strncmp(_lhs, _rhs, _max);
+ return bx::strCmp(_lhs, _rhs, _max);
}
extern "C" const char* strstr(const char* _str, const char* _find)
{
- return bx::strnstr(_str, _find);
+ return bx::strFind(_str, _find);
}
extern "C" void qsort(void* _base, size_t _num, size_t _size, bx::ComparisonFn _fn)
@@ -244,14 +245,16 @@ extern "C" float fmodf(float _numer, float _denom)
extern "C" int atoi(const char* _str)
{
- BX_UNUSED(_str);
- return 0;
+ int32_t result = 0;
+ bx::fromString(&result, _str);
+ return result;
}
extern "C" double atof(const char* _str)
{
- BX_UNUSED(_str);
- return 0.0;
+ double result = 0.0;
+ bx::fromString(&result, _str);
+ return result;
}
extern "C" struct DIR* opendir(const char* dirname)
@@ -301,6 +304,10 @@ extern "C" int printf(const char* _format, ...)
return -1;
}
+struct FILE
+{
+};
+
extern "C" int fprintf(FILE* _stream, const char* _format, ...)
{
BX_UNUSED(_stream, _format);
diff --git a/3rdparty/bx/src/debug.cpp b/3rdparty/bx/src/debug.cpp
index 5e52be86e88..d08fc9903e6 100644
--- a/3rdparty/bx/src/debug.cpp
+++ b/3rdparty/bx/src/debug.cpp
@@ -3,13 +3,17 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/debug.h>
-#include <bx/string.h> // isPrint
-#include <inttypes.h> // PRIx*
+#include <bx/string.h> // isPrint
+#include <bx/readerwriter.h> // WriterI
+#include <inttypes.h> // PRIx*
#if BX_PLATFORM_ANDROID
# include <android/log.h>
-#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE
+#elif BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_WINRT \
+ || BX_PLATFORM_XBOXONE
extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA(const char* _str);
#elif BX_PLATFORM_IOS || BX_PLATFORM_OSX
# if defined(__OBJC__)
@@ -33,7 +37,7 @@ namespace bx
#elif BX_CPU_ARM
__builtin_trap();
// asm("bkpt 0");
-#elif !BX_PLATFORM_NACL && BX_CPU_X86 && (BX_COMPILER_GCC || BX_COMPILER_CLANG)
+#elif BX_CPU_X86 && (BX_COMPILER_GCC || BX_COMPILER_CLANG)
// NaCl doesn't like int 3:
// NativeClient: NaCl module load failed: Validation failure. File violates Native Client safety rules.
__asm__ ("int $3");
@@ -50,7 +54,9 @@ namespace bx
# define BX_ANDROID_LOG_TAG ""
# endif // BX_ANDROID_LOG_TAG
__android_log_write(ANDROID_LOG_DEBUG, BX_ANDROID_LOG_TAG, _out);
-#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE
+#elif BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_WINRT \
+ || BX_PLATFORM_XBOXONE
OutputDebugStringA(_out);
#elif BX_PLATFORM_IOS || BX_PLATFORM_OSX
# if defined(__OBJC__)
@@ -125,7 +131,7 @@ namespace bx
ascii[asciiPos] = '\0';
debugPrintf("\t" DBG_ADDRESS "\t" HEX_DUMP_FORMAT "\t%s\n", data, hex, ascii);
data += asciiPos;
- hexPos = 0;
+ hexPos = 0;
asciiPos = 0;
}
}
@@ -142,4 +148,32 @@ namespace bx
#undef HEX_DUMP_FORMAT
}
+ class DebugWriter : public WriterI
+ {
+ virtual int32_t write(const void* _data, int32_t _size, Error* _err) override
+ {
+ BX_UNUSED(_err);
+
+ int32_t total = 0;
+
+ char temp[4096];
+ while (total != _size)
+ {
+ uint32_t len = bx::uint32_min(sizeof(temp)-1, _size-total);
+ memCopy(temp, _data, len);
+ temp[len] = '\0';
+ debugOutput(temp);
+ total += len;
+ }
+
+ return total;
+ }
+ };
+
+ WriterI* getDebugOut()
+ {
+ static DebugWriter s_debugOut;
+ return &s_debugOut;
+ }
+
} // namespace bx
diff --git a/3rdparty/bx/src/dtoa.cpp b/3rdparty/bx/src/dtoa.cpp
index 98640ede20b..6945210dad1 100644
--- a/3rdparty/bx/src/dtoa.cpp
+++ b/3rdparty/bx/src/dtoa.cpp
@@ -3,8 +3,9 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/cpu.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include <bx/string.h>
#include <bx/uint32_t.h>
@@ -12,28 +13,31 @@
namespace bx
{
- // https://github.com/miloyip/dtoa-benchmark
- //
- // Copyright (C) 2014 Milo Yip
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- // copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- // THE SOFTWARE.
- //
+ /*
+ * https://github.com/miloyip/dtoa-benchmark
+ *
+ * Copyright (C) 2014 Milo Yip
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
struct DiyFp
{
DiyFp()
@@ -77,7 +81,7 @@ namespace bx
DiyFp operator*(const DiyFp& rhs) const
{
- const uint64_t M32 = 0xFFFFFFFF;
+ const uint64_t M32 = UINT32_MAX;
const uint64_t a = f >> 32;
const uint64_t b = f & M32;
const uint64_t c = rhs.f >> 32;
@@ -105,23 +109,23 @@ namespace bx
void NormalizedBoundaries(DiyFp* minus, DiyFp* plus) const
{
- DiyFp pl = DiyFp((f << 1) + 1, e - 1).NormalizeBoundary();
- DiyFp mi = (f == kDpHiddenBit) ? DiyFp((f << 2) - 1, e - 2) : DiyFp((f << 1) - 1, e - 1);
+ DiyFp pl = DiyFp( (f << 1) + 1, e - 1).NormalizeBoundary();
+ DiyFp mi = (f == kDpHiddenBit) ? DiyFp( (f << 2) - 1, e - 2) : DiyFp( (f << 1) - 1, e - 1);
mi.f <<= mi.e - pl.e;
mi.e = pl.e;
*plus = pl;
*minus = mi;
}
-#define UINT64_C2(h, l) ((static_cast<uint64_t>(h) << 32) | static_cast<uint64_t>(l))
+#define UINT64_C2(h, l) ( (static_cast<uint64_t>(h) << 32) | static_cast<uint64_t>(l) )
- static const int32_t kDiySignificandSize = 64;
- static const int32_t kDpSignificandSize = 52;
- static const int32_t kDpExponentBias = 0x3FF + kDpSignificandSize;
- static const int32_t kDpMinExponent = -kDpExponentBias;
- static const uint64_t kDpExponentMask = UINT64_C2(0x7FF00000, 0x00000000);
- static const uint64_t kDpSignificandMask = UINT64_C2(0x000FFFFF, 0xFFFFFFFF);
- static const uint64_t kDpHiddenBit = UINT64_C2(0x00100000, 0x00000000);
+ static const int32_t kDiySignificandSize = 64;
+ static const int32_t kDpSignificandSize = 52;
+ static const int32_t kDpExponentBias = 0x3FF + kDpSignificandSize;
+ static const int32_t kDpMinExponent = -kDpExponentBias;
+ static const uint64_t kDpExponentMask = UINT64_C2(0x7FF00000, 0x00000000);
+ static const uint64_t kDpSignificandMask = UINT64_C2(0x000FFFFF, 0xFFFFFFFF);
+ static const uint64_t kDpHiddenBit = UINT64_C2(0x00100000, 0x00000000);
uint64_t f;
int32_t e;
@@ -217,10 +221,10 @@ namespace bx
k++;
}
- uint32_t index = static_cast<uint32_t>((k >> 3) + 1);
- *K = -(-348 + static_cast<int32_t>(index << 3)); // decimal exponent no need lookup table
+ uint32_t index = static_cast<uint32_t>( (k >> 3) + 1);
+ *K = -(-348 + static_cast<int32_t>(index << 3) ); // decimal exponent no need lookup table
- BX_CHECK(index < sizeof(s_kCachedPowers_F) / sizeof(s_kCachedPowers_F[0]));
+ BX_CHECK(index < sizeof(s_kCachedPowers_F) / sizeof(s_kCachedPowers_F[0]), "");
return DiyFp(s_kCachedPowers_F[index], s_kCachedPowers_E[index]);
}
@@ -228,7 +232,7 @@ namespace bx
{
while (rest < wp_w
&& delta - rest >= ten_kappa
- && (rest + ten_kappa < wp_w || wp_w - rest > rest + ten_kappa - wp_w))
+ && (rest + ten_kappa < wp_w || wp_w - rest > rest + ten_kappa - wp_w) )
{
buffer[len - 1]--;
rest += ten_kappa;
@@ -256,7 +260,7 @@ namespace bx
const DiyFp wp_w = Mp - W;
uint32_t p1 = static_cast<uint32_t>(Mp.f >> -one.e);
uint64_t p2 = Mp.f & (one.f - 1);
- int32_t kappa = static_cast<int32_t>(CountDecimalDigit32(p1));
+ int32_t kappa = static_cast<int32_t>(CountDecimalDigit32(p1) );
*len = 0;
while (kappa > 0)
@@ -436,17 +440,17 @@ namespace bx
if (isNan(_value) )
{
- return (int32_t)strlncpy(_dst, _max, "nan") + sign;
+ return (int32_t)strCopy(_dst, _max, "nan") + sign;
}
else if (isInfinite(_value) )
{
- return (int32_t)strlncpy(_dst, _max, "inf") + sign;
+ return (int32_t)strCopy(_dst, _max, "inf") + sign;
}
int32_t len;
if (0.0 == _value)
{
- len = (int32_t)strlncpy(_dst, _max, "0.0");
+ len = (int32_t)strCopy(_dst, _max, "0.0");
}
else
{
@@ -557,4 +561,584 @@ namespace bx
return toStringUnsigned(_dst, _max, _value, _base);
}
+ /*
+ * https://github.com/grzegorz-kraszewski/stringtofloat/
+ *
+ * MIT License
+ *
+ * Copyright (c) 2016 Grzegorz Kraszewski
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+ /*
+ * IMPORTANT
+ *
+ * The code works in "round towards zero" mode. This is different from
+ * GCC standard library strtod(), which uses "round half to even" rule.
+ * Therefore it cannot be used as a direct drop-in replacement, as in
+ * some cases results will be different on the least significant bit of
+ * mantissa. Read more in the README.md file.
+ */
+
+#define DIGITS 18
+
+#define DOUBLE_PLUS_ZERO UINT64_C(0x0000000000000000)
+#define DOUBLE_MINUS_ZERO UINT64_C(0x8000000000000000)
+#define DOUBLE_PLUS_INFINITY UINT64_C(0x7ff0000000000000)
+#define DOUBLE_MINUS_INFINITY UINT64_C(0xfff0000000000000)
+
+ union HexDouble
+ {
+ double d;
+ uint64_t u;
+ };
+
+#define lsr96(s2, s1, s0, d2, d1, d0) \
+ d0 = ( (s0) >> 1) | ( ( (s1) & 1) << 31); \
+ d1 = ( (s1) >> 1) | ( ( (s2) & 1) << 31); \
+ d2 = (s2) >> 1;
+
+#define lsl96(s2, s1, s0, d2, d1, d0) \
+ d2 = ( (s2) << 1) | ( ( (s1) & (1 << 31) ) >> 31); \
+ d1 = ( (s1) << 1) | ( ( (s0) & (1 << 31) ) >> 31); \
+ d0 = (s0) << 1;
+
+ /*
+ * Undefine the below constant if your processor or compiler is slow
+ * at 64-bit arithmetic. This is a rare case however. 64-bit macros are
+ * better for deeply pipelined CPUs (no conditional execution), are
+ * very efficient for 64-bit processors and also fast on 32-bit processors
+ * featuring extended precision arithmetic (x86, PowerPC_32, M68k and probably
+ * more).
+ */
+
+#define USE_64BIT_FOR_ADDSUB_MACROS 0
+
+#if USE_64BIT_FOR_ADDSUB_MACROS
+
+#define add96(s2, s1, s0, d2, d1, d0) { \
+ uint64_t w; \
+ w = (uint64_t)(s0) + (uint64_t)(d0); \
+ (s0) = w; \
+ w >>= 32; \
+ w += (uint64_t)(s1) + (uint64_t)(d1); \
+ (s1) = w; \
+ w >>= 32; \
+ w += (uint64_t)(s2) + (uint64_t)(d2); \
+ (s2) = w; }
+
+#define sub96(s2, s1, s0, d2, d1, d0) { \
+ uint64_t w; \
+ w = (uint64_t)(s0) - (uint64_t)(d0); \
+ (s0) = w; \
+ w >>= 32; \
+ w += (uint64_t)(s1) - (uint64_t)(d1); \
+ (s1) = w; \
+ w >>= 32; \
+ w += (uint64_t)(s2) - (uint64_t)(d2); \
+ (s2) = w; }
+
+#else
+
+#define add96(s2, s1, s0, d2, d1, d0) { \
+ uint32_t _x, _c; \
+ _x = (s0); (s0) += (d0); \
+ if ( (s0) < _x) _c = 1; else _c = 0; \
+ _x = (s1); (s1) += (d1) + _c; \
+ if ( ( (s1) < _x) || ( ( (s1) == _x) && _c) ) _c = 1; else _c = 0; \
+ (s2) += (d2) + _c; }
+
+#define sub96(s2, s1, s0, d2, d1, d0) { \
+ uint32_t _x, _c; \
+ _x = (s0); (s0) -= (d0); \
+ if ( (s0) > _x) _c = 1; else _c = 0; \
+ _x = (s1); (s1) -= (d1) + _c; \
+ if ( ( (s1) > _x) || ( ( (s1) == _x) && _c) ) _c = 1; else _c = 0; \
+ (s2) -= (d2) + _c; }
+
+#endif /* USE_64BIT_FOR_ADDSUB_MACROS */
+
+ /* parser state machine states */
+
+#define FSM_A 0
+#define FSM_B 1
+#define FSM_C 2
+#define FSM_D 3
+#define FSM_E 4
+#define FSM_F 5
+#define FSM_G 6
+#define FSM_H 7
+#define FSM_I 8
+#define FSM_STOP 9
+
+ /* The structure is filled by parser, then given to converter. */
+ struct PrepNumber
+ {
+ int negative; /* 0 if positive number, 1 if negative */
+ int32_t exponent; /* power of 10 exponent */
+ uint64_t mantissa; /* integer mantissa */
+ };
+
+ /* Possible parser return values. */
+
+#define PARSER_OK 0 // parser finished OK
+#define PARSER_PZERO 1 // no digits or number is smaller than +-2^-1022
+#define PARSER_MZERO 2 // number is negative, module smaller
+#define PARSER_PINF 3 // number is higher than +HUGE_VAL
+#define PARSER_MINF 4 // number is lower than -HUGE_VAL
+
+ inline char next(const char*& _s, const char* _term)
+ {
+ return _s != _term
+ ? *_s++
+ : '\0'
+ ;
+ }
+
+ static int parser(const char* _s, const char* _term, PrepNumber* _pn)
+ {
+ int state = FSM_A;
+ int digx = 0;
+ char c = ' '; /* initial value for kicking off the state machine */
+ int result = PARSER_OK;
+ int expneg = 0;
+ int32_t expexp = 0;
+
+ while (state != FSM_STOP) // && _s != _term)
+ {
+ switch (state)
+ {
+ case FSM_A:
+ if (isSpace(c) )
+ {
+ c = next(_s, _term);
+ }
+ else
+ {
+ state = FSM_B;
+ }
+ break;
+
+ case FSM_B:
+ state = FSM_C;
+
+ if (c == '+')
+ {
+ c = next(_s, _term);
+ }
+ else if (c == '-')
+ {
+ _pn->negative = 1;
+ c = next(_s, _term);
+ }
+ else if (isNumeric(c) )
+ {
+ }
+ else if (c == '.')
+ {
+ }
+ else
+ {
+ state = FSM_STOP;
+ }
+ break;
+
+ case FSM_C:
+ if (c == '0')
+ {
+ c = next(_s, _term);
+ }
+ else if (c == '.')
+ {
+ c = next(_s, _term);
+ state = FSM_D;
+ }
+ else
+ {
+ state = FSM_E;
+ }
+ break;
+
+ case FSM_D:
+ if (c == '0')
+ {
+ c = next(_s, _term);
+ if (_pn->exponent > -2147483647) _pn->exponent--;
+ }
+ else
+ {
+ state = FSM_F;
+ }
+ break;
+
+ case FSM_E:
+ if (isNumeric(c) )
+ {
+ if (digx < DIGITS)
+ {
+ _pn->mantissa *= 10;
+ _pn->mantissa += c - '0';
+ digx++;
+ }
+ else if (_pn->exponent < 2147483647)
+ {
+ _pn->exponent++;
+ }
+
+ c = next(_s, _term);
+ }
+ else if (c == '.')
+ {
+ c = next(_s, _term);
+ state = FSM_F;
+ }
+ else
+ {
+ state = FSM_F;
+ }
+ break;
+
+ case FSM_F:
+ if (isNumeric(c) )
+ {
+ if (digx < DIGITS)
+ {
+ _pn->mantissa *= 10;
+ _pn->mantissa += c - '0';
+ _pn->exponent--;
+ digx++;
+ }
+
+ c = next(_s, _term);
+ }
+ else if ('e' == toLower(c) )
+ {
+ c = next(_s, _term);
+ state = FSM_G;
+ }
+ else
+ {
+ state = FSM_G;
+ }
+ break;
+
+ case FSM_G:
+ if (c == '+')
+ {
+ c = next(_s, _term);
+ }
+ else if (c == '-')
+ {
+ expneg = 1;
+ c = next(_s, _term);
+ }
+
+ state = FSM_H;
+ break;
+
+ case FSM_H:
+ if (c == '0')
+ {
+ c = next(_s, _term);
+ }
+ else
+ {
+ state = FSM_I;
+ }
+ break;
+
+ case FSM_I:
+ if (isNumeric(c) )
+ {
+ if (expexp < 214748364)
+ {
+ expexp *= 10;
+ expexp += c - '0';
+ }
+
+ c = next(_s, _term);
+ }
+ else
+ {
+ state = FSM_STOP;
+ }
+ break;
+ }
+ }
+
+ if (expneg)
+ {
+ expexp = -expexp;
+ }
+
+ _pn->exponent += expexp;
+
+ if (_pn->mantissa == 0)
+ {
+ if (_pn->negative)
+ {
+ result = PARSER_MZERO;
+ }
+ else
+ {
+ result = PARSER_PZERO;
+ }
+ }
+ else if (_pn->exponent > 309)
+ {
+ if (_pn->negative)
+ {
+ result = PARSER_MINF;
+ }
+ else
+ {
+ result = PARSER_PINF;
+ }
+ }
+ else if (_pn->exponent < -328)
+ {
+ if (_pn->negative)
+ {
+ result = PARSER_MZERO;
+ }
+ else
+ {
+ result = PARSER_PZERO;
+ }
+ }
+
+ return result;
+ }
+
+ static double converter(PrepNumber* _pn)
+ {
+ int binexp = 92;
+ HexDouble hd;
+ uint32_t s2, s1, s0; /* 96-bit precision integer */
+ uint32_t q2, q1, q0; /* 96-bit precision integer */
+ uint32_t r2, r1, r0; /* 96-bit precision integer */
+ uint32_t mask28 = UINT32_C(0xf) << 28;
+
+ hd.u = 0;
+
+ s0 = (uint32_t)(_pn->mantissa & UINT32_MAX);
+ s1 = (uint32_t)(_pn->mantissa >> 32);
+ s2 = 0;
+
+ while (_pn->exponent > 0)
+ {
+ lsl96(s2, s1, s0, q2, q1, q0); // q = p << 1
+ lsl96(q2, q1, q0, r2, r1, r0); // r = p << 2
+ lsl96(r2, r1, r0, s2, s1, s0); // p = p << 3
+ add96(s2, s1, s0, q2, q1, q0); // p = (p << 3) + (p << 1)
+
+ _pn->exponent--;
+
+ while (s2 & mask28)
+ {
+ lsr96(s2, s1, s0, q2, q1, q0);
+ binexp++;
+ s2 = q2;
+ s1 = q1;
+ s0 = q0;
+ }
+ }
+
+ while (_pn->exponent < 0)
+ {
+ while (!(s2 & (1 << 31) ) )
+ {
+ lsl96(s2, s1, s0, q2, q1, q0);
+ binexp--;
+ s2 = q2;
+ s1 = q1;
+ s0 = q0;
+ }
+
+ q2 = s2 / 10;
+ r1 = s2 % 10;
+ r2 = (s1 >> 8) | (r1 << 24);
+ q1 = r2 / 10;
+ r1 = r2 % 10;
+ r2 = ( (s1 & 0xFF) << 16) | (s0 >> 16) | (r1 << 24);
+ r0 = r2 / 10;
+ r1 = r2 % 10;
+ q1 = (q1 << 8) | ( (r0 & 0x00FF0000) >> 16);
+ q0 = r0 << 16;
+ r2 = (s0 & UINT16_MAX) | (r1 << 16);
+ q0 |= r2 / 10;
+ s2 = q2;
+ s1 = q1;
+ s0 = q0;
+
+ _pn->exponent++;
+ }
+
+ if (s2 || s1 || s0)
+ {
+ while (!(s2 & mask28) )
+ {
+ lsl96(s2, s1, s0, q2, q1, q0);
+ binexp--;
+ s2 = q2;
+ s1 = q1;
+ s0 = q0;
+ }
+ }
+
+ binexp += 1023;
+
+ if (binexp > 2046)
+ {
+ if (_pn->negative)
+ {
+ hd.u = DOUBLE_MINUS_INFINITY;
+ }
+ else
+ {
+ hd.u = DOUBLE_PLUS_INFINITY;
+ }
+ }
+ else if (binexp < 1)
+ {
+ if (_pn->negative)
+ {
+ hd.u = DOUBLE_MINUS_ZERO;
+ }
+ }
+ else if (s2)
+ {
+ uint64_t q;
+ uint64_t binexs2 = (uint64_t)binexp;
+
+ binexs2 <<= 52;
+ q = ( (uint64_t)(s2 & ~mask28) << 24)
+ | ( ( (uint64_t)s1 + 128) >> 8) | binexs2;
+
+ if (_pn->negative)
+ {
+ q |= (1ULL << 63);
+ }
+
+ hd.u = q;
+ }
+
+ return hd.d;
+ }
+
+ int32_t toString(char* _out, int32_t _max, bool _value)
+ {
+ StringView str(_value ? "true" : "false");
+ strCopy(_out, _max, str);
+ return str.getLength();
+ }
+
+ bool fromString(bool* _out, const StringView& _str)
+ {
+ char ch = toLower(_str.getPtr()[0]);
+ *_out = ch == 't' || ch == '1';
+ return 0 != _str.getLength();
+ }
+
+ bool fromString(float* _out, const StringView& _str)
+ {
+ double dbl;
+ bool result = fromString(&dbl, _str);
+ *_out = float(dbl);
+ return result;
+ }
+
+ bool fromString(double* _out, const StringView& _str)
+ {
+ PrepNumber pn;
+ pn.mantissa = 0;
+ pn.negative = 0;
+ pn.exponent = 0;
+
+ HexDouble hd;
+ hd.u = DOUBLE_PLUS_ZERO;
+
+ switch (parser(_str.getPtr(), _str.getTerm(), &pn) )
+ {
+ case PARSER_OK:
+ *_out = converter(&pn);
+ break;
+
+ case PARSER_PZERO:
+ *_out = hd.d;
+ break;
+
+ case PARSER_MZERO:
+ hd.u = DOUBLE_MINUS_ZERO;
+ *_out = hd.d;
+ break;
+
+ case PARSER_PINF:
+ hd.u = DOUBLE_PLUS_INFINITY;
+ *_out = hd.d;
+ break;
+
+ case PARSER_MINF:
+ hd.u = DOUBLE_MINUS_INFINITY;
+ *_out = hd.d;
+ break;
+ }
+
+ return true;
+ }
+
+ bool fromString(int32_t* _out, const StringView& _str)
+ {
+ const char* str = _str.getPtr();
+ const char* term = _str.getTerm();
+
+ str = strws(str);
+ char ch = *str++;
+ bool neg = false;
+ switch (ch)
+ {
+ case '-':
+ case '+': neg = '-' == ch;
+ break;
+
+ default:
+ --str;
+ break;
+ }
+
+ int32_t result = 0;
+
+ for (ch = *str++; isNumeric(ch) && str <= term; ch = *str++)
+ {
+ result = 10*result - (ch - '0');
+ }
+
+ *_out = neg ? result : -result;
+
+ return true;
+ }
+
+ bool fromString(uint32_t* _out, const StringView& _str)
+ {
+ fromString( (int32_t*)_out, _str);
+ return true;
+ }
+
} // namespace bx
diff --git a/3rdparty/bx/src/easing.cpp b/3rdparty/bx/src/easing.cpp
new file mode 100644
index 00000000000..8ecb2d53299
--- /dev/null
+++ b/3rdparty/bx/src/easing.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "bx_p.h"
+#include <bx/easing.h>
+
+namespace bx
+{
+ static const EaseFn s_easeFunc[] =
+ {
+ easeLinear,
+ easeStep,
+ easeSmoothStep,
+ easeInQuad,
+ easeOutQuad,
+ easeInOutQuad,
+ easeOutInQuad,
+ easeInCubic,
+ easeOutCubic,
+ easeInOutCubic,
+ easeOutInCubic,
+ easeInQuart,
+ easeOutQuart,
+ easeInOutQuart,
+ easeOutInQuart,
+ easeInQuint,
+ easeOutQuint,
+ easeInOutQuint,
+ easeOutInQuint,
+ easeInSine,
+ easeOutSine,
+ easeInOutSine,
+ easeOutInSine,
+ easeInExpo,
+ easeOutExpo,
+ easeInOutExpo,
+ easeOutInExpo,
+ easeInCirc,
+ easeOutCirc,
+ easeInOutCirc,
+ easeOutInCirc,
+ easeInElastic,
+ easeOutElastic,
+ easeInOutElastic,
+ easeOutInElastic,
+ easeInBack,
+ easeOutBack,
+ easeInOutBack,
+ easeOutInBack,
+ easeInBounce,
+ easeOutBounce,
+ easeInOutBounce,
+ easeOutInBounce,
+ };
+ BX_STATIC_ASSERT(BX_COUNTOF(s_easeFunc) == Easing::Count);
+
+ EaseFn getEaseFunc(Easing::Enum _enum)
+ {
+ return s_easeFunc[_enum];
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/src/file.cpp b/3rdparty/bx/src/file.cpp
new file mode 100644
index 00000000000..af74589c876
--- /dev/null
+++ b/3rdparty/bx/src/file.cpp
@@ -0,0 +1,408 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "bx_p.h"
+#include <bx/file.h>
+
+#include <stdio.h>
+#include <sys/stat.h>
+
+#ifndef BX_CONFIG_CRT_FILE_READER_WRITER
+# define BX_CONFIG_CRT_FILE_READER_WRITER !(0 \
+ || BX_CRT_NONE \
+ )
+#endif // BX_CONFIG_CRT_FILE_READER_WRITER
+
+namespace bx
+{
+ class NoopWriterImpl : public FileWriterI
+ {
+ public:
+ NoopWriterImpl(void*)
+ {
+ }
+
+ virtual ~NoopWriterImpl()
+ {
+ close();
+ }
+
+ virtual bool open(const FilePath& _filePath, bool _append, Error* _err) override
+ {
+ BX_UNUSED(_filePath, _append, _err);
+ return false;
+ }
+
+ virtual void close() override
+ {
+ }
+
+ virtual int64_t seek(int64_t _offset, Whence::Enum _whence) override
+ {
+ BX_UNUSED(_offset, _whence);
+ return 0;
+ }
+
+ virtual int32_t write(const void* _data, int32_t _size, Error* _err) override
+ {
+ BX_UNUSED(_data, _size, _err);
+ return 0;
+ }
+ };
+
+#if BX_CONFIG_CRT_FILE_READER_WRITER
+
+# if BX_CRT_MSVC
+# define fseeko64 _fseeki64
+# define ftello64 _ftelli64
+# elif 0 \
+ || BX_PLATFORM_ANDROID \
+ || BX_PLATFORM_BSD \
+ || BX_PLATFORM_IOS \
+ || BX_PLATFORM_OSX \
+ || BX_PLATFORM_QNX
+# define fseeko64 fseeko
+# define ftello64 ftello
+# elif BX_PLATFORM_PS4
+# define fseeko64 fseek
+# define ftello64 ftell
+# endif // BX_
+
+ class FileReaderImpl : public FileReaderI
+ {
+ public:
+ FileReaderImpl(FILE* _file)
+ : m_file(_file)
+ , m_open(false)
+ {
+ }
+
+ virtual ~FileReaderImpl()
+ {
+ close();
+ }
+
+ virtual bool open(const FilePath& _filePath, Error* _err) override
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ if (NULL != m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_ALREADY_OPEN, "FileReader: File is already open.");
+ return false;
+ }
+
+ m_file = fopen(_filePath.get(), "rb");
+ if (NULL == m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "FileReader: Failed to open file.");
+ return false;
+ }
+
+ m_open = true;
+ return true;
+ }
+
+ virtual void close() override
+ {
+ if (m_open
+ && NULL != m_file)
+ {
+ fclose(m_file);
+ m_file = NULL;
+ }
+ }
+
+ virtual int64_t seek(int64_t _offset, Whence::Enum _whence) override
+ {
+ BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
+ fseeko64(m_file, _offset, _whence);
+ return ftello64(m_file);
+ }
+
+ virtual int32_t read(void* _data, int32_t _size, Error* _err) override
+ {
+ BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ int32_t size = (int32_t)fread(_data, 1, _size, m_file);
+ if (size != _size)
+ {
+ if (0 != feof(m_file) )
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_EOF, "FileReader: EOF.");
+ }
+ else if (0 != ferror(m_file) )
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "FileReader: read error.");
+ }
+
+ return size >= 0 ? size : 0;
+ }
+
+ return size;
+ }
+
+ private:
+ FILE* m_file;
+ bool m_open;
+ };
+
+ class FileWriterImpl : public FileWriterI
+ {
+ public:
+ FileWriterImpl(FILE* _file)
+ : m_file(_file)
+ , m_open(false)
+ {
+ }
+
+ virtual ~FileWriterImpl()
+ {
+ close();
+ }
+
+ virtual bool open(const FilePath& _filePath, bool _append, Error* _err) override
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ if (NULL != m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_ALREADY_OPEN, "FileReader: File is already open.");
+ return false;
+ }
+
+ m_file = fopen(_filePath.get(), _append ? "ab" : "wb");
+
+ if (NULL == m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "FileWriter: Failed to open file.");
+ return false;
+ }
+
+ m_open = true;
+ return true;
+ }
+
+ virtual void close() override
+ {
+ if (m_open
+ && NULL != m_file)
+ {
+ fclose(m_file);
+ m_file = NULL;
+ }
+ }
+
+ virtual int64_t seek(int64_t _offset, Whence::Enum _whence) override
+ {
+ BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
+ fseeko64(m_file, _offset, _whence);
+ return ftello64(m_file);
+ }
+
+ virtual int32_t write(const void* _data, int32_t _size, Error* _err) override
+ {
+ BX_CHECK(NULL != m_file, "Reader/Writer file is not open.");
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ int32_t size = (int32_t)fwrite(_data, 1, _size, m_file);
+ if (size != _size)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "FileWriter: write failed.");
+ return size >= 0 ? size : 0;
+ }
+
+ return size;
+ }
+
+ private:
+ FILE* m_file;
+ bool m_open;
+ };
+
+#else
+
+ class FileReaderImpl : public FileReaderI
+ {
+ public:
+ FileReaderImpl(void*)
+ {
+ }
+
+ virtual ~FileReaderImpl()
+ {
+ close();
+ }
+
+ virtual bool open(const FilePath& _filePath, Error* _err) override
+ {
+ BX_UNUSED(_filePath, _err);
+ return false;
+ }
+
+ virtual void close() override
+ {
+ }
+
+ virtual int64_t seek(int64_t _offset, Whence::Enum _whence) override
+ {
+ BX_UNUSED(_offset, _whence);
+ return 0;
+ }
+
+ virtual int32_t read(void* _data, int32_t _size, Error* _err) override
+ {
+ BX_UNUSED(_data, _size, _err);
+ return 0;
+ }
+ };
+
+ typedef NoopWriterImpl FileWriterImpl;
+
+#endif // BX_CONFIG_CRT_FILE_READER_WRITER
+
+ FileReader::FileReader()
+ {
+ BX_STATIC_ASSERT(sizeof(FileReaderImpl) <= sizeof(m_internal) );
+ BX_PLACEMENT_NEW(m_internal, FileReaderImpl)(NULL);
+ }
+
+ FileReader::~FileReader()
+ {
+ FileReaderImpl* impl = reinterpret_cast<FileReaderImpl*>(m_internal);
+ impl->~FileReaderImpl();
+ }
+
+ bool FileReader::open(const FilePath& _filePath, Error* _err)
+ {
+ FileReaderImpl* impl = reinterpret_cast<FileReaderImpl*>(m_internal);
+ return impl->open(_filePath, _err);
+ }
+
+ void FileReader::close()
+ {
+ FileReaderImpl* impl = reinterpret_cast<FileReaderImpl*>(m_internal);
+ impl->close();
+ }
+
+ int64_t FileReader::seek(int64_t _offset, Whence::Enum _whence)
+ {
+ FileReaderImpl* impl = reinterpret_cast<FileReaderImpl*>(m_internal);
+ return impl->seek(_offset, _whence);
+ }
+
+ int32_t FileReader::read(void* _data, int32_t _size, Error* _err)
+ {
+ FileReaderImpl* impl = reinterpret_cast<FileReaderImpl*>(m_internal);
+ return impl->read(_data, _size, _err);
+ }
+
+ FileWriter::FileWriter()
+ {
+ BX_STATIC_ASSERT(sizeof(FileWriterImpl) <= sizeof(m_internal) );
+ BX_PLACEMENT_NEW(m_internal, FileWriterImpl)(NULL);
+ }
+
+ FileWriter::~FileWriter()
+ {
+ FileWriterImpl* impl = reinterpret_cast<FileWriterImpl*>(m_internal);
+ impl->~FileWriterImpl();
+ }
+
+ bool FileWriter::open(const FilePath& _filePath, bool _append, Error* _err)
+ {
+ FileWriterImpl* impl = reinterpret_cast<FileWriterImpl*>(m_internal);
+ return impl->open(_filePath, _append, _err);
+ }
+
+ void FileWriter::close()
+ {
+ FileWriterImpl* impl = reinterpret_cast<FileWriterImpl*>(m_internal);
+ impl->close();
+ }
+
+ int64_t FileWriter::seek(int64_t _offset, Whence::Enum _whence)
+ {
+ FileWriterImpl* impl = reinterpret_cast<FileWriterImpl*>(m_internal);
+ return impl->seek(_offset, _whence);
+ }
+
+ int32_t FileWriter::write(const void* _data, int32_t _size, Error* _err)
+ {
+ FileWriterImpl* impl = reinterpret_cast<FileWriterImpl*>(m_internal);
+ return impl->write(_data, _size, _err);
+ }
+
+ ReaderI* getStdIn()
+ {
+ static FileReaderImpl s_stdIn(stdout);
+ return &s_stdIn;
+ }
+
+ WriterI* getStdOut()
+ {
+ static FileWriterImpl s_stdOut(stdout);
+ return &s_stdOut;
+ }
+
+ WriterI* getStdErr()
+ {
+ static FileWriterImpl s_stdOut(stderr);
+ return &s_stdOut;
+ }
+
+ WriterI* getNullOut()
+ {
+ static NoopWriterImpl s_nullOut(NULL);
+ return &s_nullOut;
+ }
+
+ bool stat(const FilePath& _filePath, FileInfo& _outFileInfo)
+ {
+ _outFileInfo.m_size = 0;
+ _outFileInfo.m_type = FileInfo::Count;
+
+#if BX_COMPILER_MSVC
+ struct ::_stat64 st;
+ int32_t result = ::_stat64(_filePath.get(), &st);
+
+ if (0 != result)
+ {
+ return false;
+ }
+
+ if (0 != (st.st_mode & _S_IFREG) )
+ {
+ _outFileInfo.m_type = FileInfo::Regular;
+ }
+ else if (0 != (st.st_mode & _S_IFDIR) )
+ {
+ _outFileInfo.m_type = FileInfo::Directory;
+ }
+#else
+ struct ::stat st;
+ int32_t result = ::stat(_filePath.get(), &st);
+ if (0 != result)
+ {
+ return false;
+ }
+
+ if (0 != (st.st_mode & S_IFREG) )
+ {
+ _outFileInfo.m_type = FileInfo::Regular;
+ }
+ else if (0 != (st.st_mode & S_IFDIR) )
+ {
+ _outFileInfo.m_type = FileInfo::Directory;
+ }
+#endif // BX_COMPILER_MSVC
+
+ _outFileInfo.m_size = st.st_size;
+
+ return true;
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/src/filepath.cpp b/3rdparty/bx/src/filepath.cpp
new file mode 100644
index 00000000000..b8bbe279a59
--- /dev/null
+++ b/3rdparty/bx/src/filepath.cpp
@@ -0,0 +1,543 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "bx_p.h"
+#include <bx/file.h>
+#include <bx/os.h>
+#include <bx/readerwriter.h>
+
+#include <stdio.h> // remove
+#include <dirent.h> // opendir
+
+#if BX_CRT_MSVC
+# include <direct.h> // _getcwd
+#else
+# include <sys/stat.h> // mkdir
+# include <unistd.h> // getcwd
+#endif // BX_CRT_MSVC
+
+#if BX_PLATFORM_WINDOWS
+extern "C" __declspec(dllimport) unsigned long __stdcall GetTempPathA(unsigned long _max, char* _ptr);
+#endif // BX_PLATFORM_WINDOWS
+
+namespace bx
+{
+ static bool isPathSeparator(char _ch)
+ {
+ return false
+ || '/' == _ch
+ || '\\' == _ch
+ ;
+ }
+
+ static int32_t normalizeFilePath(char* _dst, int32_t _dstSize, const char* _src, int32_t _num)
+ {
+ // Reference: Lexical File Names in Plan 9 or Getting Dot-Dot Right
+ // https://9p.io/sys/doc/lexnames.html
+
+ const int32_t num = strLen(_src, _num);
+
+ if (0 == num)
+ {
+ return strCopy(_dst, _dstSize, ".");
+ }
+
+ int32_t size = 0;
+
+ StaticMemoryBlockWriter writer(_dst, _dstSize);
+ Error err;
+
+ int32_t idx = 0;
+ int32_t dotdot = 0;
+
+ if (2 <= num
+ && ':' == _src[1])
+ {
+ size += write(&writer, toUpper(_src[idx]), &err);
+ size += write(&writer, ':', &err);
+ idx += 2;
+ dotdot = size;
+ }
+
+ const int32_t slashIdx = idx;
+
+ bool rooted = isPathSeparator(_src[idx]);
+ if (rooted)
+ {
+ size += write(&writer, '/', &err);
+ ++idx;
+ dotdot = size;
+ }
+
+ bool trailingSlash = false;
+
+ while (idx < num && err.isOk() )
+ {
+ switch (_src[idx])
+ {
+ case '/':
+ case '\\':
+ ++idx;
+ trailingSlash = idx == num;
+ break;
+
+ case '.':
+ if (idx+1 == num
+ || isPathSeparator(_src[idx+1]) )
+ {
+ ++idx;
+ break;
+ }
+
+ if ('.' == _src[idx+1]
+ && (idx+2 == num || isPathSeparator(_src[idx+2]) ) )
+ {
+ idx += 2;
+
+ if (dotdot < size)
+ {
+ for (--size
+ ; dotdot < size && !isPathSeparator(_dst[size])
+ ; --size)
+ {
+ }
+ seek(&writer, size, Whence::Begin);
+ }
+ else if (!rooted)
+ {
+ if (0 < size)
+ {
+ size += write(&writer, '/', &err);
+ }
+
+ size += write(&writer, "..", &err);
+ dotdot = size;
+ }
+
+ break;
+ }
+
+ BX_FALLTHROUGH;
+
+ default:
+ if ( ( rooted && slashIdx+1 != size)
+ || (!rooted && 0 != size) )
+ {
+ size += write(&writer, '/', &err);
+ }
+
+ for (; idx < num && !isPathSeparator(_src[idx]); ++idx)
+ {
+ size += write(&writer, _src[idx], &err);
+ }
+
+ break;
+ }
+ }
+
+ if (0 == size)
+ {
+ size += write(&writer, '.', &err);
+ }
+
+ if (trailingSlash)
+ {
+ size += write(&writer, '/', &err);
+ }
+
+ write(&writer, '\0', &err);
+
+ return size;
+ }
+
+ static bool getEnv(const char* _name, FileInfo::Enum _type, char* _out, uint32_t* _inOutSize)
+ {
+ uint32_t len = *_inOutSize;
+ *_out = '\0';
+
+ if (getenv(_name, _out, &len) )
+ {
+ FileInfo fi;
+ if (stat(_out, fi)
+ && _type == fi.m_type)
+ {
+ *_inOutSize = len;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ static char* pwd(char* _buffer, uint32_t _size)
+ {
+#if BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_WINRT
+ BX_UNUSED(_buffer, _size);
+ return NULL;
+#elif BX_CRT_MSVC
+ return ::_getcwd(_buffer, (int32_t)_size);
+#else
+ return ::getcwd(_buffer, _size);
+#endif // BX_COMPILER_
+ }
+
+ static bool getCurrentPath(char* _out, uint32_t* _inOutSize)
+ {
+ uint32_t len = *_inOutSize;
+ pwd(_out, len);
+ *_inOutSize = strLen(_out);
+ return true;
+ }
+
+ static bool getHomePath(char* _out, uint32_t* _inOutSize)
+ {
+ return false
+#if BX_PLATFORM_WINDOWS
+ || getEnv("USERPROFILE", FileInfo::Directory, _out, _inOutSize)
+#endif // BX_PLATFORM_WINDOWS
+ || getEnv("HOME", FileInfo::Directory, _out, _inOutSize)
+ ;
+ }
+
+ static bool getTempPath(char* _out, uint32_t* _inOutSize)
+ {
+#if BX_PLATFORM_WINDOWS
+ uint32_t len = ::GetTempPathA(*_inOutSize, _out);
+ bool result = len != 0 && len < *_inOutSize;
+ *_inOutSize = len;
+ return result;
+#else
+ static const char* s_tmp[] =
+ {
+ "TMPDIR",
+ "TMP",
+ "TEMP",
+ "TEMPDIR",
+
+ NULL
+ };
+
+ for (const char** tmp = s_tmp; *tmp != NULL; ++tmp)
+ {
+ uint32_t len = *_inOutSize;
+ *_out = '\0';
+ bool ok = getEnv(*tmp, FileInfo::Directory, _out, &len);
+
+ if (ok
+ && len != 0
+ && len < *_inOutSize)
+ {
+ *_inOutSize = len;
+ return ok;
+ }
+ }
+
+ FileInfo fi;
+ if (stat("/tmp", fi)
+ && FileInfo::Directory == fi.m_type)
+ {
+ strCopy(_out, *_inOutSize, "/tmp");
+ *_inOutSize = 4;
+ return true;
+ }
+
+ return false;
+#endif // BX_PLATFORM_*
+ }
+
+ FilePath::FilePath()
+ {
+ set("");
+ }
+
+ FilePath::FilePath(Dir::Enum _dir)
+ {
+ set(_dir);
+ }
+
+ FilePath::FilePath(const char* _rhs)
+ {
+ set(_rhs);
+ }
+
+ FilePath::FilePath(const StringView& _filePath)
+ {
+ set(_filePath);
+ }
+
+ FilePath& FilePath::operator=(const StringView& _rhs)
+ {
+ set(_rhs);
+ return *this;
+ }
+
+ void FilePath::set(Dir::Enum _dir)
+ {
+ char tmp[kMaxFilePath];
+ uint32_t len = BX_COUNTOF(tmp);
+
+ switch (_dir)
+ {
+ case Dir::Current:
+ getCurrentPath(tmp, &len);
+ break;
+
+ case Dir::Temp:
+ getTempPath(tmp, &len);
+ break;
+
+ case Dir::Home:
+ getHomePath(tmp, &len);
+ break;
+
+ default:
+ len = 0;
+ break;
+ }
+
+ set(StringView(tmp, len) );
+ }
+
+ void FilePath::set(const StringView& _filePath)
+ {
+ normalizeFilePath(
+ m_filePath
+ , BX_COUNTOF(m_filePath)
+ , _filePath.getPtr()
+ , _filePath.getLength()
+ );
+ }
+
+ void FilePath::join(const StringView& _str)
+ {
+ char tmp[kMaxFilePath];
+ strCopy(tmp, BX_COUNTOF(tmp), m_filePath);
+ strCat(tmp, BX_COUNTOF(tmp), "/");
+ strCat(tmp, BX_COUNTOF(tmp), _str);
+ set(tmp);
+ }
+
+ const char* FilePath::get() const
+ {
+ return m_filePath;
+ }
+
+ const StringView FilePath::getPath() const
+ {
+ const char* end = strRFind(m_filePath, '/');
+ if (NULL != end)
+ {
+ return StringView(m_filePath, end+1);
+ }
+
+ return StringView();
+ }
+
+ const StringView FilePath::getFileName() const
+ {
+ const char* fileName = strRFind(m_filePath, '/');
+ if (NULL != fileName)
+ {
+ return StringView(fileName+1);
+ }
+
+ return get();
+ }
+
+ const StringView FilePath::getBaseName() const
+ {
+ const StringView fileName = getFileName();
+ if (!fileName.isEmpty() )
+ {
+ const char* ext = strFind(fileName, '.');
+ if (ext != NULL)
+ {
+ return StringView(fileName.getPtr(), ext);
+ }
+
+ return fileName;
+ }
+
+ return StringView();
+ }
+
+ const StringView FilePath::getExt() const
+ {
+ const StringView fileName = getFileName();
+ if (!fileName.isEmpty() )
+ {
+ const char* ext = strFind(fileName, '.');
+ return StringView(ext);
+ }
+
+ return StringView();
+ }
+
+ bool FilePath::isAbsolute() const
+ {
+ return '/' == m_filePath[0] // no drive letter
+ || (':' == m_filePath[1] && '/' == m_filePath[2]) // with drive letter
+ ;
+ }
+
+ bool make(const FilePath& _filePath, Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ if (!_err->isOk() )
+ {
+ return false;
+ }
+
+#if BX_CRT_MSVC
+ int32_t result = ::_mkdir(_filePath.get() );
+#elif BX_CRT_MINGW
+ int32_t result = ::mkdir(_filePath.get());
+#else
+ int32_t result = ::mkdir(_filePath.get(), 0700);
+#endif // BX_CRT_MSVC
+
+ if (0 != result)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_ACCESS, "The parent directory does not allow write permission to the process.");
+ return false;
+ }
+
+ return true;
+ }
+
+ bool makeAll(const FilePath& _filePath, Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ if (!_err->isOk() )
+ {
+ return false;
+ }
+
+ FileInfo fi;
+
+ if (stat(_filePath, fi) )
+ {
+ if (FileInfo::Directory == fi.m_type)
+ {
+ return true;
+ }
+
+ BX_ERROR_SET(_err, BX_ERROR_NOT_DIRECTORY, "File already exist, and is not directory.");
+ return false;
+ }
+
+ const StringView dir = strRTrim(_filePath.get(), "/");
+ const char* slash = strRFind(dir, '/');
+
+ if (NULL != slash
+ && slash - dir.getPtr() > 1)
+ {
+ if (!makeAll(StringView(dir.getPtr(), slash), _err) )
+ {
+ return false;
+ }
+ }
+
+ FilePath path(dir);
+ return make(path, _err);
+ }
+
+ bool remove(const FilePath& _filePath, Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ if (!_err->isOk() )
+ {
+ return false;
+ }
+
+#if BX_CRT_MSVC
+ int32_t result = -1;
+ FileInfo fi;
+ if (stat(_filePath, fi) )
+ {
+ if (FileInfo::Directory == fi.m_type)
+ {
+ result = ::_rmdir(_filePath.get() );
+ }
+ else
+ {
+ result = ::remove(_filePath.get() );
+ }
+ }
+#else
+ int32_t result = ::remove(_filePath.get() );
+#endif // BX_CRT_MSVC
+
+ if (0 != result)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_ACCESS, "The parent directory does not allow write permission to the process.");
+ return false;
+ }
+
+ return true;
+ }
+
+ bool removeAll(const FilePath& _filePath, Error* _err)
+ {
+ BX_ERROR_SCOPE(_err);
+
+ if (remove(_filePath, _err) )
+ {
+ return true;
+ }
+
+ _err->reset();
+
+ FileInfo fi;
+
+ if (!stat(_filePath, fi) )
+ {
+ BX_ERROR_SET(_err, BX_ERROR_ACCESS, "The parent directory does not allow write permission to the process.");
+ return false;
+ }
+
+ if (FileInfo::Directory != fi.m_type)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_NOT_DIRECTORY, "File already exist, and is not directory.");
+ return false;
+ }
+
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_LINUX || BX_PLATFORM_OSX
+ DIR* dir = opendir(_filePath.get() );
+ if (NULL == dir)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_NOT_DIRECTORY, "File already exist, and is not directory.");
+ return false;
+ }
+
+ for (dirent* item = readdir(dir); NULL != item; item = readdir(dir) )
+ {
+ if (0 == strCmp(item->d_name, ".")
+ || 0 == strCmp(item->d_name, "..") )
+ {
+ continue;
+ }
+
+ FilePath path(_filePath);
+ path.join(item->d_name);
+ if (!removeAll(path, _err) )
+ {
+ _err->reset();
+ break;
+ }
+ }
+
+ closedir(dir);
+#endif // BX_PLATFORM_WINDOWS || BX_PLATFORM_LINUX || BX_PLATFORM_OSX
+
+ return remove(_filePath, _err);
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/src/fpumath.cpp b/3rdparty/bx/src/fpumath.cpp
deleted file mode 100644
index e957ef9e960..00000000000
--- a/3rdparty/bx/src/fpumath.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
- */
-
-#include <bx/fpumath.h>
-#include <math.h>
-
-namespace bx
-{
- const float pi = 3.14159265358979323846f;
- const float invPi = 1.0f/3.14159265358979323846f;
- const float piHalf = 1.57079632679489661923f;
- const float sqrt2 = 1.41421356237309504880f;
-#if BX_COMPILER_MSVC
- const float huge = float(HUGE_VAL);
-#else
- const float huge = HUGE_VALF;
-#endif // BX_COMPILER_MSVC
-
- float fabsolute(float _a)
- {
- return ::fabsf(_a);
- }
-
- float fsin(float _a)
- {
- return ::sinf(_a);
- }
-
- float fasin(float _a)
- {
- return ::asinf(_a);
- }
-
- float fcos(float _a)
- {
- return ::cosf(_a);
- }
-
- float ftan(float _a)
- {
- return ::tanf(_a);
- }
-
- float facos(float _a)
- {
- return ::acosf(_a);
- }
-
- float fatan2(float _y, float _x)
- {
- return ::atan2f(_y, _x);
- }
-
- float fpow(float _a, float _b)
- {
- return ::powf(_a, _b);
- }
-
- float flog(float _a)
- {
- return ::logf(_a);
- }
-
- float fsqrt(float _a)
- {
- return ::sqrtf(_a);
- }
-
- float ffloor(float _f)
- {
- return ::floorf(_f);
- }
-
- float fceil(float _f)
- {
- return ::ceilf(_f);
- }
-
- float fmod(float _a, float _b)
- {
- return ::fmodf(_a, _b);
- }
-
- void mtx3Inverse(float* _result, const float* _a)
- {
- float xx = _a[0];
- float xy = _a[1];
- float xz = _a[2];
- float yx = _a[3];
- float yy = _a[4];
- float yz = _a[5];
- float zx = _a[6];
- float zy = _a[7];
- float zz = _a[8];
-
- float det = 0.0f;
- det += xx * (yy*zz - yz*zy);
- det -= xy * (yx*zz - yz*zx);
- det += xz * (yx*zy - yy*zx);
-
- float invDet = 1.0f/det;
-
- _result[0] = +(yy*zz - yz*zy) * invDet;
- _result[1] = -(xy*zz - xz*zy) * invDet;
- _result[2] = +(xy*yz - xz*yy) * invDet;
-
- _result[3] = -(yx*zz - yz*zx) * invDet;
- _result[4] = +(xx*zz - xz*zx) * invDet;
- _result[5] = -(xx*yz - xz*yx) * invDet;
-
- _result[6] = +(yx*zy - yy*zx) * invDet;
- _result[7] = -(xx*zy - xy*zx) * invDet;
- _result[8] = +(xx*yy - xy*yx) * invDet;
- }
-
- void mtxInverse(float* _result, const float* _a)
- {
- float xx = _a[ 0];
- float xy = _a[ 1];
- float xz = _a[ 2];
- float xw = _a[ 3];
- float yx = _a[ 4];
- float yy = _a[ 5];
- float yz = _a[ 6];
- float yw = _a[ 7];
- float zx = _a[ 8];
- float zy = _a[ 9];
- float zz = _a[10];
- float zw = _a[11];
- float wx = _a[12];
- float wy = _a[13];
- float wz = _a[14];
- float ww = _a[15];
-
- float det = 0.0f;
- det += xx * (yy*(zz*ww - zw*wz) - yz*(zy*ww - zw*wy) + yw*(zy*wz - zz*wy) );
- det -= xy * (yx*(zz*ww - zw*wz) - yz*(zx*ww - zw*wx) + yw*(zx*wz - zz*wx) );
- det += xz * (yx*(zy*ww - zw*wy) - yy*(zx*ww - zw*wx) + yw*(zx*wy - zy*wx) );
- det -= xw * (yx*(zy*wz - zz*wy) - yy*(zx*wz - zz*wx) + yz*(zx*wy - zy*wx) );
-
- float invDet = 1.0f/det;
-
- _result[ 0] = +(yy*(zz*ww - wz*zw) - yz*(zy*ww - wy*zw) + yw*(zy*wz - wy*zz) ) * invDet;
- _result[ 1] = -(xy*(zz*ww - wz*zw) - xz*(zy*ww - wy*zw) + xw*(zy*wz - wy*zz) ) * invDet;
- _result[ 2] = +(xy*(yz*ww - wz*yw) - xz*(yy*ww - wy*yw) + xw*(yy*wz - wy*yz) ) * invDet;
- _result[ 3] = -(xy*(yz*zw - zz*yw) - xz*(yy*zw - zy*yw) + xw*(yy*zz - zy*yz) ) * invDet;
-
- _result[ 4] = -(yx*(zz*ww - wz*zw) - yz*(zx*ww - wx*zw) + yw*(zx*wz - wx*zz) ) * invDet;
- _result[ 5] = +(xx*(zz*ww - wz*zw) - xz*(zx*ww - wx*zw) + xw*(zx*wz - wx*zz) ) * invDet;
- _result[ 6] = -(xx*(yz*ww - wz*yw) - xz*(yx*ww - wx*yw) + xw*(yx*wz - wx*yz) ) * invDet;
- _result[ 7] = +(xx*(yz*zw - zz*yw) - xz*(yx*zw - zx*yw) + xw*(yx*zz - zx*yz) ) * invDet;
-
- _result[ 8] = +(yx*(zy*ww - wy*zw) - yy*(zx*ww - wx*zw) + yw*(zx*wy - wx*zy) ) * invDet;
- _result[ 9] = -(xx*(zy*ww - wy*zw) - xy*(zx*ww - wx*zw) + xw*(zx*wy - wx*zy) ) * invDet;
- _result[10] = +(xx*(yy*ww - wy*yw) - xy*(yx*ww - wx*yw) + xw*(yx*wy - wx*yy) ) * invDet;
- _result[11] = -(xx*(yy*zw - zy*yw) - xy*(yx*zw - zx*yw) + xw*(yx*zy - zx*yy) ) * invDet;
-
- _result[12] = -(yx*(zy*wz - wy*zz) - yy*(zx*wz - wx*zz) + yz*(zx*wy - wx*zy) ) * invDet;
- _result[13] = +(xx*(zy*wz - wy*zz) - xy*(zx*wz - wx*zz) + xz*(zx*wy - wx*zy) ) * invDet;
- _result[14] = -(xx*(yy*wz - wy*yz) - xy*(yx*wz - wx*yz) + xz*(yx*wy - wx*yy) ) * invDet;
- _result[15] = +(xx*(yy*zz - zy*yz) - xy*(yx*zz - zx*yz) + xz*(yx*zy - zx*yy) ) * invDet;
- }
-
-} // namespace bx
diff --git a/3rdparty/bx/src/hash.cpp b/3rdparty/bx/src/hash.cpp
new file mode 100644
index 00000000000..4335443f245
--- /dev/null
+++ b/3rdparty/bx/src/hash.cpp
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "bx_p.h"
+#include <bx/hash.h>
+
+namespace bx
+{
+
+static const uint32_t s_crcTableIeee[] =
+{
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
+ 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
+ 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+ 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
+ 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+ 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
+ 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
+ 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+ 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
+ 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+ 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
+ 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
+ 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
+ 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
+ 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+ 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
+ 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+ 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
+ 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
+ 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+ 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
+ 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+ 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
+ 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
+ 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
+ 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
+};
+BX_STATIC_ASSERT(BX_COUNTOF(s_crcTableIeee) == 256);
+
+static const uint32_t s_crcTableCastagnoli[] =
+{
+ 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb,
+ 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24,
+ 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384,
+ 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b,
+ 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35,
+ 0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa,
+ 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a,
+ 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595,
+ 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957,
+ 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198,
+ 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38,
+ 0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7,
+ 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789,
+ 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46,
+ 0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6,
+ 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829,
+ 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93,
+ 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c,
+ 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc,
+ 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033,
+ 0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d,
+ 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982,
+ 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622,
+ 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed,
+ 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f,
+ 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0,
+ 0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540,
+ 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f,
+ 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1,
+ 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e,
+ 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e,
+ 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351,
+};
+BX_STATIC_ASSERT(BX_COUNTOF(s_crcTableCastagnoli) == 256);
+
+static const uint32_t s_crcTableKoopman[] =
+{
+ 0x00000000, 0x9695c4ca, 0xfb4839c9, 0x6dddfd03, 0x20f3c3cf, 0xb6660705, 0xdbbbfa06, 0x4d2e3ecc,
+ 0x41e7879e, 0xd7724354, 0xbaafbe57, 0x2c3a7a9d, 0x61144451, 0xf781809b, 0x9a5c7d98, 0x0cc9b952,
+ 0x83cf0f3c, 0x155acbf6, 0x788736f5, 0xee12f23f, 0xa33cccf3, 0x35a90839, 0x5874f53a, 0xcee131f0,
+ 0xc22888a2, 0x54bd4c68, 0x3960b16b, 0xaff575a1, 0xe2db4b6d, 0x744e8fa7, 0x199372a4, 0x8f06b66e,
+ 0xd1fdae25, 0x47686aef, 0x2ab597ec, 0xbc205326, 0xf10e6dea, 0x679ba920, 0x0a465423, 0x9cd390e9,
+ 0x901a29bb, 0x068fed71, 0x6b521072, 0xfdc7d4b8, 0xb0e9ea74, 0x267c2ebe, 0x4ba1d3bd, 0xdd341777,
+ 0x5232a119, 0xc4a765d3, 0xa97a98d0, 0x3fef5c1a, 0x72c162d6, 0xe454a61c, 0x89895b1f, 0x1f1c9fd5,
+ 0x13d52687, 0x8540e24d, 0xe89d1f4e, 0x7e08db84, 0x3326e548, 0xa5b32182, 0xc86edc81, 0x5efb184b,
+ 0x7598ec17, 0xe30d28dd, 0x8ed0d5de, 0x18451114, 0x556b2fd8, 0xc3feeb12, 0xae231611, 0x38b6d2db,
+ 0x347f6b89, 0xa2eaaf43, 0xcf375240, 0x59a2968a, 0x148ca846, 0x82196c8c, 0xefc4918f, 0x79515545,
+ 0xf657e32b, 0x60c227e1, 0x0d1fdae2, 0x9b8a1e28, 0xd6a420e4, 0x4031e42e, 0x2dec192d, 0xbb79dde7,
+ 0xb7b064b5, 0x2125a07f, 0x4cf85d7c, 0xda6d99b6, 0x9743a77a, 0x01d663b0, 0x6c0b9eb3, 0xfa9e5a79,
+ 0xa4654232, 0x32f086f8, 0x5f2d7bfb, 0xc9b8bf31, 0x849681fd, 0x12034537, 0x7fdeb834, 0xe94b7cfe,
+ 0xe582c5ac, 0x73170166, 0x1ecafc65, 0x885f38af, 0xc5710663, 0x53e4c2a9, 0x3e393faa, 0xa8acfb60,
+ 0x27aa4d0e, 0xb13f89c4, 0xdce274c7, 0x4a77b00d, 0x07598ec1, 0x91cc4a0b, 0xfc11b708, 0x6a8473c2,
+ 0x664dca90, 0xf0d80e5a, 0x9d05f359, 0x0b903793, 0x46be095f, 0xd02bcd95, 0xbdf63096, 0x2b63f45c,
+ 0xeb31d82e, 0x7da41ce4, 0x1079e1e7, 0x86ec252d, 0xcbc21be1, 0x5d57df2b, 0x308a2228, 0xa61fe6e2,
+ 0xaad65fb0, 0x3c439b7a, 0x519e6679, 0xc70ba2b3, 0x8a259c7f, 0x1cb058b5, 0x716da5b6, 0xe7f8617c,
+ 0x68fed712, 0xfe6b13d8, 0x93b6eedb, 0x05232a11, 0x480d14dd, 0xde98d017, 0xb3452d14, 0x25d0e9de,
+ 0x2919508c, 0xbf8c9446, 0xd2516945, 0x44c4ad8f, 0x09ea9343, 0x9f7f5789, 0xf2a2aa8a, 0x64376e40,
+ 0x3acc760b, 0xac59b2c1, 0xc1844fc2, 0x57118b08, 0x1a3fb5c4, 0x8caa710e, 0xe1778c0d, 0x77e248c7,
+ 0x7b2bf195, 0xedbe355f, 0x8063c85c, 0x16f60c96, 0x5bd8325a, 0xcd4df690, 0xa0900b93, 0x3605cf59,
+ 0xb9037937, 0x2f96bdfd, 0x424b40fe, 0xd4de8434, 0x99f0baf8, 0x0f657e32, 0x62b88331, 0xf42d47fb,
+ 0xf8e4fea9, 0x6e713a63, 0x03acc760, 0x953903aa, 0xd8173d66, 0x4e82f9ac, 0x235f04af, 0xb5cac065,
+ 0x9ea93439, 0x083cf0f3, 0x65e10df0, 0xf374c93a, 0xbe5af7f6, 0x28cf333c, 0x4512ce3f, 0xd3870af5,
+ 0xdf4eb3a7, 0x49db776d, 0x24068a6e, 0xb2934ea4, 0xffbd7068, 0x6928b4a2, 0x04f549a1, 0x92608d6b,
+ 0x1d663b05, 0x8bf3ffcf, 0xe62e02cc, 0x70bbc606, 0x3d95f8ca, 0xab003c00, 0xc6ddc103, 0x504805c9,
+ 0x5c81bc9b, 0xca147851, 0xa7c98552, 0x315c4198, 0x7c727f54, 0xeae7bb9e, 0x873a469d, 0x11af8257,
+ 0x4f549a1c, 0xd9c15ed6, 0xb41ca3d5, 0x2289671f, 0x6fa759d3, 0xf9329d19, 0x94ef601a, 0x027aa4d0,
+ 0x0eb31d82, 0x9826d948, 0xf5fb244b, 0x636ee081, 0x2e40de4d, 0xb8d51a87, 0xd508e784, 0x439d234e,
+ 0xcc9b9520, 0x5a0e51ea, 0x37d3ace9, 0xa1466823, 0xec6856ef, 0x7afd9225, 0x17206f26, 0x81b5abec,
+ 0x8d7c12be, 0x1be9d674, 0x76342b77, 0xe0a1efbd, 0xad8fd171, 0x3b1a15bb, 0x56c7e8b8, 0xc0522c72,
+};
+BX_STATIC_ASSERT(BX_COUNTOF(s_crcTableKoopman) == 256);
+
+static const uint32_t* s_crcTable[] =
+{
+ s_crcTableIeee,
+ s_crcTableCastagnoli,
+ s_crcTableKoopman,
+};
+BX_STATIC_ASSERT(BX_COUNTOF(s_crcTable) == HashCrc32::Count);
+
+void HashCrc32::begin(Enum _type)
+{
+ m_hash = UINT32_MAX;
+ m_table = s_crcTable[_type];
+}
+
+void HashCrc32::add(const void* _data, int _len)
+{
+ const uint8_t* data = (const uint8_t*)_data;
+
+ uint32_t hash = m_hash;
+
+ while (_len--)
+ {
+ hash = m_table[(hash ^ (*data++) ) & UINT8_MAX] ^ (hash >> 8);
+ }
+
+ m_hash = hash;
+}
+
+} // namespace bx
diff --git a/3rdparty/bx/src/math.cpp b/3rdparty/bx/src/math.cpp
new file mode 100644
index 00000000000..8327570e936
--- /dev/null
+++ b/3rdparty/bx/src/math.cpp
@@ -0,0 +1,744 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "bx_p.h"
+#include <bx/math.h>
+
+#include <math.h>
+
+namespace bx
+{
+ const float kPi = 3.1415926535897932384626433832795f;
+ const float kPi2 = 6.2831853071795864769252867665590f;
+ const float kInvPi = 1.0f/kPi;
+ const float kPiHalf = 1.5707963267948966192313216916398f;
+ const float kSqrt2 = 1.4142135623730950488016887242097f;
+ const float kInvLogNat2 = 1.4426950408889634073599246810019f;
+#if BX_COMPILER_MSVC
+ const float kHuge = float(HUGE_VAL);
+#else
+ const float kHuge = HUGE_VALF;
+#endif // BX_COMPILER_MSVC
+
+ float fabs(float _a)
+ {
+ return ::fabsf(_a);
+ }
+
+ float fsin(float _a)
+ {
+ return ::sinf(_a);
+ }
+
+ float fasin(float _a)
+ {
+ return ::asinf(_a);
+ }
+
+ float fcos(float _a)
+ {
+ return ::cosf(_a);
+ }
+
+ float ftan(float _a)
+ {
+ return ::tanf(_a);
+ }
+
+ float facos(float _a)
+ {
+ return ::acosf(_a);
+ }
+
+ float fatan2(float _y, float _x)
+ {
+ return ::atan2f(_y, _x);
+ }
+
+ float fpow(float _a, float _b)
+ {
+ return ::powf(_a, _b);
+ }
+
+ float flog(float _a)
+ {
+ return ::logf(_a);
+ }
+
+ float fsqrt(float _a)
+ {
+ return ::sqrtf(_a);
+ }
+
+ float ffloor(float _f)
+ {
+ return ::floorf(_f);
+ }
+
+ float fceil(float _f)
+ {
+ return ::ceilf(_f);
+ }
+
+ float fmod(float _a, float _b)
+ {
+ return ::fmodf(_a, _b);
+ }
+
+ void mtxLookAtImpl(float* _result, const float* _eye, const float* _view, const float* _up)
+ {
+ float up[3] = { 0.0f, 1.0f, 0.0f };
+ if (NULL != _up)
+ {
+ up[0] = _up[0];
+ up[1] = _up[1];
+ up[2] = _up[2];
+ }
+
+ float tmp[4];
+ vec3Cross(tmp, up, _view);
+
+ float right[4];
+ vec3Norm(right, tmp);
+
+ vec3Cross(up, _view, right);
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = right[0];
+ _result[ 1] = up[0];
+ _result[ 2] = _view[0];
+
+ _result[ 4] = right[1];
+ _result[ 5] = up[1];
+ _result[ 6] = _view[1];
+
+ _result[ 8] = right[2];
+ _result[ 9] = up[2];
+ _result[10] = _view[2];
+
+ _result[12] = -vec3Dot(right, _eye);
+ _result[13] = -vec3Dot(up, _eye);
+ _result[14] = -vec3Dot(_view, _eye);
+ _result[15] = 1.0f;
+ }
+
+ void mtxLookAtLh(float* _result, const float* _eye, const float* _at, const float* _up)
+ {
+ float tmp[4];
+ vec3Sub(tmp, _at, _eye);
+
+ float view[4];
+ vec3Norm(view, tmp);
+
+ mtxLookAtImpl(_result, _eye, view, _up);
+ }
+
+ void mtxLookAtRh(float* _result, const float* _eye, const float* _at, const float* _up)
+ {
+ float tmp[4];
+ vec3Sub(tmp, _eye, _at);
+
+ float view[4];
+ vec3Norm(view, tmp);
+
+ mtxLookAtImpl(_result, _eye, view, _up);
+ }
+
+ void mtxLookAt(float* _result, const float* _eye, const float* _at, const float* _up)
+ {
+ mtxLookAtLh(_result, _eye, _at, _up);
+ }
+
+ template<Handness::Enum HandnessT>
+ void mtxProjXYWH(float* _result, float _x, float _y, float _width, float _height, float _near, float _far, bool _oglNdc)
+ {
+ const float diff = _far-_near;
+ const float aa = _oglNdc ? ( _far+_near)/diff : _far/diff;
+ const float bb = _oglNdc ? (2.0f*_far*_near)/diff : _near*aa;
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = _width;
+ _result[ 5] = _height;
+ _result[ 8] = (Handness::Right == HandnessT) ? _x : -_x;
+ _result[ 9] = (Handness::Right == HandnessT) ? _y : -_y;
+ _result[10] = (Handness::Right == HandnessT) ? -aa : aa;
+ _result[11] = (Handness::Right == HandnessT) ? -1.0f : 1.0f;
+ _result[14] = -bb;
+ }
+
+ template<Handness::Enum HandnessT>
+ void mtxProjImpl(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc)
+ {
+ const float invDiffRl = 1.0f/(_rt - _lt);
+ const float invDiffUd = 1.0f/(_ut - _dt);
+ const float width = 2.0f*_near * invDiffRl;
+ const float height = 2.0f*_near * invDiffUd;
+ const float xx = (_rt + _lt) * invDiffRl;
+ const float yy = (_ut + _dt) * invDiffUd;
+ mtxProjXYWH<HandnessT>(_result, xx, yy, width, height, _near, _far, _oglNdc);
+ }
+
+ template<Handness::Enum HandnessT>
+ void mtxProjImpl(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<HandnessT>(_result, _fov[0], _fov[1], _fov[2], _fov[3], _near, _far, _oglNdc);
+ }
+
+ template<Handness::Enum HandnessT>
+ void mtxProjImpl(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc)
+ {
+ const float height = 1.0f/ftan(toRad(_fovy)*0.5f);
+ const float width = height * 1.0f/_aspect;
+ mtxProjXYWH<HandnessT>(_result, 0.0f, 0.0f, width, height, _near, _far, _oglNdc);
+ }
+
+ void mtxProj(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc);
+ }
+
+ void mtxProj(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<Handness::Left>(_result, _fov, _near, _far, _oglNdc);
+ }
+
+ void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<Handness::Left>(_result, _fovy, _aspect, _near, _far, _oglNdc);
+ }
+
+ void mtxProjLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc);
+ }
+
+ void mtxProjLh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<Handness::Left>(_result, _fov, _near, _far, _oglNdc);
+ }
+
+ void mtxProjLh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<Handness::Left>(_result, _fovy, _aspect, _near, _far, _oglNdc);
+ }
+
+ void mtxProjRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<Handness::Right>(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc);
+ }
+
+ void mtxProjRh(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<Handness::Right>(_result, _fov, _near, _far, _oglNdc);
+ }
+
+ void mtxProjRh(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc)
+ {
+ mtxProjImpl<Handness::Right>(_result, _fovy, _aspect, _near, _far, _oglNdc);
+ }
+
+ template<NearFar::Enum NearFarT, Handness::Enum HandnessT>
+ void mtxProjInfXYWH(float* _result, float _x, float _y, float _width, float _height, float _near, bool _oglNdc)
+ {
+ float aa;
+ float bb;
+ if (BX_ENABLED(NearFar::Reverse == NearFarT) )
+ {
+ aa = _oglNdc ? -1.0f : 0.0f;
+ bb = _oglNdc ? -2.0f*_near : -_near;
+ }
+ else
+ {
+ aa = 1.0f;
+ bb = _oglNdc ? 2.0f*_near : _near;
+ }
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = _width;
+ _result[ 5] = _height;
+ _result[ 8] = (Handness::Right == HandnessT) ? _x : -_x;
+ _result[ 9] = (Handness::Right == HandnessT) ? _y : -_y;
+ _result[10] = (Handness::Right == HandnessT) ? -aa : aa;
+ _result[11] = (Handness::Right == HandnessT) ? -1.0f : 1.0f;
+ _result[14] = -bb;
+ }
+
+ template<NearFar::Enum NearFarT, Handness::Enum HandnessT>
+ void mtxProjInfImpl(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
+ {
+ const float invDiffRl = 1.0f/(_rt - _lt);
+ const float invDiffUd = 1.0f/(_ut - _dt);
+ const float width = 2.0f*_near * invDiffRl;
+ const float height = 2.0f*_near * invDiffUd;
+ const float xx = (_rt + _lt) * invDiffRl;
+ const float yy = (_ut + _dt) * invDiffUd;
+ mtxProjInfXYWH<NearFarT,HandnessT>(_result, xx, yy, width, height, _near, _oglNdc);
+ }
+
+ template<NearFar::Enum NearFarT, Handness::Enum HandnessT>
+ void mtxProjInfImpl(float* _result, const float _fov[4], float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFarT,HandnessT>(_result, _fov[0], _fov[1], _fov[2], _fov[3], _near, _oglNdc);
+ }
+
+ template<NearFar::Enum NearFarT, Handness::Enum HandnessT>
+ void mtxProjInfImpl(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
+ {
+ const float height = 1.0f/ftan(toRad(_fovy)*0.5f);
+ const float width = height * 1.0f/_aspect;
+ mtxProjInfXYWH<NearFarT,HandnessT>(_result, 0.0f, 0.0f, width, height, _near, _oglNdc);
+ }
+
+ void mtxProjInf(float* _result, const float _fov[4], float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Default,Handness::Left>(_result, _fov, _near, _oglNdc);
+ }
+
+ void mtxProjInf(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Default,Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
+ }
+
+ void mtxProjInf(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Default,Handness::Left>(_result, _fovy, _aspect, _near, _oglNdc);
+ }
+
+ void mtxProjInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Default,Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
+ }
+
+ void mtxProjInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Default,Handness::Left>(_result, _fov, _near, _oglNdc);
+ }
+
+ void mtxProjInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Default,Handness::Left>(_result, _fovy, _aspect, _near, _oglNdc);
+ }
+
+ void mtxProjInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Default,Handness::Right>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
+ }
+
+ void mtxProjInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Default,Handness::Right>(_result, _fov, _near, _oglNdc);
+ }
+
+ void mtxProjInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Default,Handness::Right>(_result, _fovy, _aspect, _near, _oglNdc);
+ }
+
+ void mtxProjRevInfLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Reverse,Handness::Left>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
+ }
+
+ void mtxProjRevInfLh(float* _result, const float _fov[4], float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Reverse,Handness::Left>(_result, _fov, _near, _oglNdc);
+ }
+
+ void mtxProjRevInfLh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Reverse,Handness::Left>(_result, _fovy, _aspect, _near, _oglNdc);
+ }
+
+ void mtxProjRevInfRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Reverse,Handness::Right>(_result, _ut, _dt, _lt, _rt, _near, _oglNdc);
+ }
+
+ void mtxProjRevInfRh(float* _result, const float _fov[4], float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Reverse,Handness::Right>(_result, _fov, _near, _oglNdc);
+ }
+
+ void mtxProjRevInfRh(float* _result, float _fovy, float _aspect, float _near, bool _oglNdc)
+ {
+ mtxProjInfImpl<NearFar::Reverse,Handness::Right>(_result, _fovy, _aspect, _near, _oglNdc);
+ }
+
+ template<Handness::Enum HandnessT>
+ void mtxOrthoImpl(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc)
+ {
+ const float aa = 2.0f/(_right - _left);
+ const float bb = 2.0f/(_top - _bottom);
+ const float cc = (_oglNdc ? 2.0f : 1.0f) / (_far - _near);
+ const float dd = (_left + _right )/(_left - _right);
+ const float ee = (_top + _bottom)/(_bottom - _top );
+ const float ff = _oglNdc
+ ? (_near + _far)/(_near - _far)
+ : _near /(_near - _far)
+ ;
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = aa;
+ _result[ 5] = bb;
+ _result[10] = (Handness::Right == HandnessT) ? -cc : cc;
+ _result[12] = dd + _offset;
+ _result[13] = ee;
+ _result[14] = ff;
+ _result[15] = 1.0f;
+ }
+
+ void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc)
+ {
+ mtxOrthoImpl<Handness::Left>(_result, _left, _right, _bottom, _top, _near, _far, _offset, _oglNdc);
+ }
+
+ void mtxOrthoLh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc)
+ {
+ mtxOrthoImpl<Handness::Left>(_result, _left, _right, _bottom, _top, _near, _far, _offset, _oglNdc);
+ }
+
+ void mtxOrthoRh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _oglNdc)
+ {
+ mtxOrthoImpl<Handness::Right>(_result, _left, _right, _bottom, _top, _near, _far, _offset, _oglNdc);
+ }
+
+ void mtxRotateX(float* _result, float _ax)
+ {
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = 1.0f;
+ _result[ 5] = cx;
+ _result[ 6] = -sx;
+ _result[ 9] = sx;
+ _result[10] = cx;
+ _result[15] = 1.0f;
+ }
+
+ void mtxRotateY(float* _result, float _ay)
+ {
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = cy;
+ _result[ 2] = sy;
+ _result[ 5] = 1.0f;
+ _result[ 8] = -sy;
+ _result[10] = cy;
+ _result[15] = 1.0f;
+ }
+
+ void mtxRotateZ(float* _result, float _az)
+ {
+ const float sz = fsin(_az);
+ const float cz = fcos(_az);
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = cz;
+ _result[ 1] = -sz;
+ _result[ 4] = sz;
+ _result[ 5] = cz;
+ _result[10] = 1.0f;
+ _result[15] = 1.0f;
+ }
+
+ void mtxRotateXY(float* _result, float _ax, float _ay)
+ {
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = cy;
+ _result[ 2] = sy;
+ _result[ 4] = sx*sy;
+ _result[ 5] = cx;
+ _result[ 6] = -sx*cy;
+ _result[ 8] = -cx*sy;
+ _result[ 9] = sx;
+ _result[10] = cx*cy;
+ _result[15] = 1.0f;
+ }
+
+ void mtxRotateXYZ(float* _result, float _ax, float _ay, float _az)
+ {
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
+ const float sz = fsin(_az);
+ const float cz = fcos(_az);
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = cy*cz;
+ _result[ 1] = -cy*sz;
+ _result[ 2] = sy;
+ _result[ 4] = cz*sx*sy + cx*sz;
+ _result[ 5] = cx*cz - sx*sy*sz;
+ _result[ 6] = -cy*sx;
+ _result[ 8] = -cx*cz*sy + sx*sz;
+ _result[ 9] = cz*sx + cx*sy*sz;
+ _result[10] = cx*cy;
+ _result[15] = 1.0f;
+ }
+
+ void mtxRotateZYX(float* _result, float _ax, float _ay, float _az)
+ {
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
+ const float sz = fsin(_az);
+ const float cz = fcos(_az);
+
+ memSet(_result, 0, sizeof(float)*16);
+ _result[ 0] = cy*cz;
+ _result[ 1] = cz*sx*sy-cx*sz;
+ _result[ 2] = cx*cz*sy+sx*sz;
+ _result[ 4] = cy*sz;
+ _result[ 5] = cx*cz + sx*sy*sz;
+ _result[ 6] = -cz*sx + cx*sy*sz;
+ _result[ 8] = -sy;
+ _result[ 9] = cy*sx;
+ _result[10] = cx*cy;
+ _result[15] = 1.0f;
+ };
+
+ void mtxSRT(float* _result, float _sx, float _sy, float _sz, float _ax, float _ay, float _az, float _tx, float _ty, float _tz)
+ {
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
+ const float sz = fsin(_az);
+ const float cz = fcos(_az);
+
+ const float sxsz = sx*sz;
+ const float cycz = cy*cz;
+
+ _result[ 0] = _sx * (cycz - sxsz*sy);
+ _result[ 1] = _sx * -cx*sz;
+ _result[ 2] = _sx * (cz*sy + cy*sxsz);
+ _result[ 3] = 0.0f;
+
+ _result[ 4] = _sy * (cz*sx*sy + cy*sz);
+ _result[ 5] = _sy * cx*cz;
+ _result[ 6] = _sy * (sy*sz -cycz*sx);
+ _result[ 7] = 0.0f;
+
+ _result[ 8] = _sz * -cx*sy;
+ _result[ 9] = _sz * sx;
+ _result[10] = _sz * cx*cy;
+ _result[11] = 0.0f;
+
+ _result[12] = _tx;
+ _result[13] = _ty;
+ _result[14] = _tz;
+ _result[15] = 1.0f;
+ }
+
+ void mtx3Inverse(float* _result, const float* _a)
+ {
+ float xx = _a[0];
+ float xy = _a[1];
+ float xz = _a[2];
+ float yx = _a[3];
+ float yy = _a[4];
+ float yz = _a[5];
+ float zx = _a[6];
+ float zy = _a[7];
+ float zz = _a[8];
+
+ float det = 0.0f;
+ det += xx * (yy*zz - yz*zy);
+ det -= xy * (yx*zz - yz*zx);
+ det += xz * (yx*zy - yy*zx);
+
+ float invDet = 1.0f/det;
+
+ _result[0] = +(yy*zz - yz*zy) * invDet;
+ _result[1] = -(xy*zz - xz*zy) * invDet;
+ _result[2] = +(xy*yz - xz*yy) * invDet;
+
+ _result[3] = -(yx*zz - yz*zx) * invDet;
+ _result[4] = +(xx*zz - xz*zx) * invDet;
+ _result[5] = -(xx*yz - xz*yx) * invDet;
+
+ _result[6] = +(yx*zy - yy*zx) * invDet;
+ _result[7] = -(xx*zy - xy*zx) * invDet;
+ _result[8] = +(xx*yy - xy*yx) * invDet;
+ }
+
+ void mtxInverse(float* _result, const float* _a)
+ {
+ float xx = _a[ 0];
+ float xy = _a[ 1];
+ float xz = _a[ 2];
+ float xw = _a[ 3];
+ float yx = _a[ 4];
+ float yy = _a[ 5];
+ float yz = _a[ 6];
+ float yw = _a[ 7];
+ float zx = _a[ 8];
+ float zy = _a[ 9];
+ float zz = _a[10];
+ float zw = _a[11];
+ float wx = _a[12];
+ float wy = _a[13];
+ float wz = _a[14];
+ float ww = _a[15];
+
+ float det = 0.0f;
+ det += xx * (yy*(zz*ww - zw*wz) - yz*(zy*ww - zw*wy) + yw*(zy*wz - zz*wy) );
+ det -= xy * (yx*(zz*ww - zw*wz) - yz*(zx*ww - zw*wx) + yw*(zx*wz - zz*wx) );
+ det += xz * (yx*(zy*ww - zw*wy) - yy*(zx*ww - zw*wx) + yw*(zx*wy - zy*wx) );
+ det -= xw * (yx*(zy*wz - zz*wy) - yy*(zx*wz - zz*wx) + yz*(zx*wy - zy*wx) );
+
+ float invDet = 1.0f/det;
+
+ _result[ 0] = +(yy*(zz*ww - wz*zw) - yz*(zy*ww - wy*zw) + yw*(zy*wz - wy*zz) ) * invDet;
+ _result[ 1] = -(xy*(zz*ww - wz*zw) - xz*(zy*ww - wy*zw) + xw*(zy*wz - wy*zz) ) * invDet;
+ _result[ 2] = +(xy*(yz*ww - wz*yw) - xz*(yy*ww - wy*yw) + xw*(yy*wz - wy*yz) ) * invDet;
+ _result[ 3] = -(xy*(yz*zw - zz*yw) - xz*(yy*zw - zy*yw) + xw*(yy*zz - zy*yz) ) * invDet;
+
+ _result[ 4] = -(yx*(zz*ww - wz*zw) - yz*(zx*ww - wx*zw) + yw*(zx*wz - wx*zz) ) * invDet;
+ _result[ 5] = +(xx*(zz*ww - wz*zw) - xz*(zx*ww - wx*zw) + xw*(zx*wz - wx*zz) ) * invDet;
+ _result[ 6] = -(xx*(yz*ww - wz*yw) - xz*(yx*ww - wx*yw) + xw*(yx*wz - wx*yz) ) * invDet;
+ _result[ 7] = +(xx*(yz*zw - zz*yw) - xz*(yx*zw - zx*yw) + xw*(yx*zz - zx*yz) ) * invDet;
+
+ _result[ 8] = +(yx*(zy*ww - wy*zw) - yy*(zx*ww - wx*zw) + yw*(zx*wy - wx*zy) ) * invDet;
+ _result[ 9] = -(xx*(zy*ww - wy*zw) - xy*(zx*ww - wx*zw) + xw*(zx*wy - wx*zy) ) * invDet;
+ _result[10] = +(xx*(yy*ww - wy*yw) - xy*(yx*ww - wx*yw) + xw*(yx*wy - wx*yy) ) * invDet;
+ _result[11] = -(xx*(yy*zw - zy*yw) - xy*(yx*zw - zx*yw) + xw*(yx*zy - zx*yy) ) * invDet;
+
+ _result[12] = -(yx*(zy*wz - wy*zz) - yy*(zx*wz - wx*zz) + yz*(zx*wy - wx*zy) ) * invDet;
+ _result[13] = +(xx*(zy*wz - wy*zz) - xy*(zx*wz - wx*zz) + xz*(zx*wy - wx*zy) ) * invDet;
+ _result[14] = -(xx*(yy*wz - wy*yz) - xy*(yx*wz - wx*yz) + xz*(yx*wy - wx*yy) ) * invDet;
+ _result[15] = +(xx*(yy*zz - zy*yz) - xy*(yx*zz - zx*yz) + xz*(yx*zy - zx*yy) ) * invDet;
+ }
+
+ void calcLinearFit2D(float _result[2], const void* _points, uint32_t _stride, uint32_t _numPoints)
+ {
+ float sumX = 0.0f;
+ float sumY = 0.0f;
+ float sumXX = 0.0f;
+ float sumXY = 0.0f;
+
+ const uint8_t* ptr = (const uint8_t*)_points;
+ for (uint32_t ii = 0; ii < _numPoints; ++ii, ptr += _stride)
+ {
+ const float* point = (const float*)ptr;
+ float xx = point[0];
+ float yy = point[1];
+ sumX += xx;
+ sumY += yy;
+ sumXX += xx*xx;
+ sumXY += xx*yy;
+ }
+
+ // [ sum(x^2) sum(x) ] [ A ] = [ sum(x*y) ]
+ // [ sum(x) numPoints ] [ B ] [ sum(y) ]
+
+ float det = (sumXX*_numPoints - sumX*sumX);
+ float invDet = 1.0f/det;
+
+ _result[0] = (-sumX * sumY + _numPoints * sumXY) * invDet;
+ _result[1] = (sumXX * sumY - sumX * sumXY) * invDet;
+ }
+
+ void calcLinearFit3D(float _result[3], const void* _points, uint32_t _stride, uint32_t _numPoints)
+ {
+ float sumX = 0.0f;
+ float sumY = 0.0f;
+ float sumZ = 0.0f;
+ float sumXX = 0.0f;
+ float sumXY = 0.0f;
+ float sumXZ = 0.0f;
+ float sumYY = 0.0f;
+ float sumYZ = 0.0f;
+
+ const uint8_t* ptr = (const uint8_t*)_points;
+ for (uint32_t ii = 0; ii < _numPoints; ++ii, ptr += _stride)
+ {
+ const float* point = (const float*)ptr;
+ float xx = point[0];
+ float yy = point[1];
+ float zz = point[2];
+
+ sumX += xx;
+ sumY += yy;
+ sumZ += zz;
+ sumXX += xx*xx;
+ sumXY += xx*yy;
+ sumXZ += xx*zz;
+ sumYY += yy*yy;
+ sumYZ += yy*zz;
+ }
+
+ // [ sum(x^2) sum(x*y) sum(x) ] [ A ] [ sum(x*z) ]
+ // [ sum(x*y) sum(y^2) sum(y) ] [ B ] = [ sum(y*z) ]
+ // [ sum(x) sum(y) numPoints ] [ C ] [ sum(z) ]
+
+ float mtx[9] =
+ {
+ sumXX, sumXY, sumX,
+ sumXY, sumYY, sumY,
+ sumX, sumY, float(_numPoints),
+ };
+ float invMtx[9];
+ mtx3Inverse(invMtx, mtx);
+
+ _result[0] = invMtx[0]*sumXZ + invMtx[1]*sumYZ + invMtx[2]*sumZ;
+ _result[1] = invMtx[3]*sumXZ + invMtx[4]*sumYZ + invMtx[5]*sumZ;
+ _result[2] = invMtx[6]*sumXZ + invMtx[7]*sumYZ + invMtx[8]*sumZ;
+ }
+
+ void rgbToHsv(float _hsv[3], const float _rgb[3])
+ {
+ const float rr = _rgb[0];
+ const float gg = _rgb[1];
+ const float bb = _rgb[2];
+
+ const float s0 = fstep(bb, gg);
+
+ const float px = flerp(bb, gg, s0);
+ const float py = flerp(gg, bb, s0);
+ const float pz = flerp(-1.0f, 0.0f, s0);
+ const float pw = flerp(2.0f/3.0f, -1.0f/3.0f, s0);
+
+ const float s1 = fstep(px, rr);
+
+ const float qx = flerp(px, rr, s1);
+ const float qy = py;
+ const float qz = flerp(pw, pz, s1);
+ const float qw = flerp(rr, px, s1);
+
+ const float dd = qx - fmin(qw, qy);
+ const float ee = 1.0e-10f;
+
+ _hsv[0] = fabs(qz + (qw - qy) / (6.0f * dd + ee) );
+ _hsv[1] = dd / (qx + ee);
+ _hsv[2] = qx;
+ }
+
+ void hsvToRgb(float _rgb[3], const float _hsv[3])
+ {
+ const float hh = _hsv[0];
+ const float ss = _hsv[1];
+ const float vv = _hsv[2];
+
+ const float px = fabs(ffract(hh + 1.0f ) * 6.0f - 3.0f);
+ const float py = fabs(ffract(hh + 2.0f/3.0f) * 6.0f - 3.0f);
+ const float pz = fabs(ffract(hh + 1.0f/3.0f) * 6.0f - 3.0f);
+
+ _rgb[0] = vv * flerp(1.0f, fsaturate(px - 1.0f), ss);
+ _rgb[1] = vv * flerp(1.0f, fsaturate(py - 1.0f), ss);
+ _rgb[2] = vv * flerp(1.0f, fsaturate(pz - 1.0f), ss);
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/src/mutex.cpp b/3rdparty/bx/src/mutex.cpp
index 988084bbf0b..74e3c14cf28 100644
--- a/3rdparty/bx/src/mutex.cpp
+++ b/3rdparty/bx/src/mutex.cpp
@@ -3,13 +3,13 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/mutex.h>
#if BX_CONFIG_SUPPORTS_THREADING
#if BX_PLATFORM_ANDROID \
|| BX_PLATFORM_LINUX \
- || BX_PLATFORM_NACL \
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_PS4 \
@@ -17,7 +17,6 @@
# include <pthread.h>
#elif BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
- || BX_PLATFORM_XBOX360 \
|| BX_PLATFORM_XBOXONE
# include <windows.h>
# include <errno.h>
@@ -25,7 +24,9 @@
namespace bx
{
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_WINRT
typedef CRITICAL_SECTION pthread_mutex_t;
typedef unsigned pthread_mutexattr_t;
@@ -69,7 +70,9 @@ namespace bx
pthread_mutexattr_t attr;
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_WINRT
#else
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
diff --git a/3rdparty/bx/src/os.cpp b/3rdparty/bx/src/os.cpp
index 0c7e9dc9a8e..d13ae7859c3 100644
--- a/3rdparty/bx/src/os.cpp
+++ b/3rdparty/bx/src/os.cpp
@@ -3,48 +3,53 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
+#include <bx/string.h>
#include <bx/os.h>
#include <bx/uint32_t.h>
-#include <bx/string.h>
#if !BX_PLATFORM_NONE
#include <stdio.h>
-#include <sys/stat.h>
+
+#if BX_CRT_MSVC
+# include <direct.h>
+#else
+# include <unistd.h>
+#endif // BX_CRT_MSVC
#if BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT
# include <windows.h>
# include <psapi.h>
-#elif BX_PLATFORM_ANDROID \
+#elif BX_PLATFORM_ANDROID \
|| BX_PLATFORM_EMSCRIPTEN \
- || BX_PLATFORM_BSD \
- || BX_PLATFORM_HURD \
- || BX_PLATFORM_IOS \
- || BX_PLATFORM_LINUX \
- || BX_PLATFORM_NACL \
- || BX_PLATFORM_OSX \
- || BX_PLATFORM_PS4 \
- || BX_PLATFORM_RPI \
- || BX_PLATFORM_STEAMLINK
+ || BX_PLATFORM_BSD \
+ || BX_PLATFORM_HURD \
+ || BX_PLATFORM_IOS \
+ || BX_PLATFORM_LINUX \
+ || BX_PLATFORM_OSX \
+ || BX_PLATFORM_PS4 \
+ || BX_PLATFORM_RPI \
+ || BX_PLATFORM_STEAMLINK \
+ || BX_PLATFORM_NX
# include <sched.h> // sched_yield
-# if BX_PLATFORM_BSD \
- || BX_PLATFORM_IOS \
- || BX_PLATFORM_NACL \
- || BX_PLATFORM_OSX \
- || BX_PLATFORM_PS4 \
+# if BX_PLATFORM_BSD \
+ || BX_PLATFORM_IOS \
+ || BX_PLATFORM_OSX \
+ || BX_PLATFORM_PS4 \
|| BX_PLATFORM_STEAMLINK
# include <pthread.h> // mach_port_t
# endif // BX_PLATFORM_*
# include <time.h> // nanosleep
-# if !BX_PLATFORM_PS4 && !BX_PLATFORM_NACL
+# if !BX_PLATFORM_PS4
# include <dlfcn.h> // dlopen, dlclose, dlsym
-# endif // !BX_PLATFORM_PS4 && !BX_PLATFORM_NACL
+# endif // !BX_PLATFORM_PS4
# if BX_PLATFORM_ANDROID
# include <malloc.h> // mallinfo
-# elif BX_PLATFORM_LINUX \
- || BX_PLATFORM_RPI \
+# elif BX_PLATFORM_LINUX \
+ || BX_PLATFORM_RPI \
|| BX_PLATFORM_STEAMLINK
# include <unistd.h> // syscall
# include <sys/syscall.h>
@@ -57,25 +62,20 @@
# endif // BX_PLATFORM_ANDROID
#endif // BX_PLATFORM_
-#if BX_CRT_MSVC
-# include <direct.h> // _getcwd
-#else
-# include <unistd.h> // getcwd
-#endif // BX_CRT_MSVC
-
namespace bx
{
void sleep(uint32_t _ms)
{
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360
+#if BX_PLATFORM_WINDOWS
::Sleep(_ms);
-#elif BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+#elif BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_WINRT
BX_UNUSED(_ms);
debugOutput("sleep is not implemented"); debugBreak();
#else
- timespec req = {(time_t)_ms/1000, (long)((_ms%1000)*1000000)};
- timespec rem = {0, 0};
+ timespec req = { (time_t)_ms/1000, (long)( (_ms%1000)*1000000) };
+ timespec rem = { 0, 0 };
::nanosleep(&req, &rem);
#endif // BX_PLATFORM_
}
@@ -84,9 +84,8 @@ namespace bx
{
#if BX_PLATFORM_WINDOWS
::SwitchToThread();
-#elif BX_PLATFORM_XBOX360
- ::Sleep(0);
-#elif BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+#elif BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_WINRT
debugOutput("yield is not implemented"); debugBreak();
#else
::sched_yield();
@@ -97,20 +96,21 @@ namespace bx
{
#if BX_PLATFORM_WINDOWS
return ::GetCurrentThreadId();
-#elif BX_PLATFORM_LINUX || BX_PLATFORM_RPI || BX_PLATFORM_STEAMLINK
+#elif BX_PLATFORM_LINUX \
+ || BX_PLATFORM_RPI \
+ || BX_PLATFORM_STEAMLINK
return (pid_t)::syscall(SYS_gettid);
-#elif BX_PLATFORM_IOS || BX_PLATFORM_OSX
+#elif BX_PLATFORM_IOS \
+ || BX_PLATFORM_OSX
return (mach_port_t)::pthread_mach_thread_np(pthread_self() );
-#elif BX_PLATFORM_BSD || BX_PLATFORM_NACL
- // Casting __nc_basic_thread_data*... need better way to do this.
+#elif BX_PLATFORM_BSD
return *(uint32_t*)::pthread_self();
#elif BX_PLATFORM_HURD
return (pthread_t)::pthread_self();
#else
-//# pragma message "not implemented."
debugOutput("getTid is not implemented"); debugBreak();
return 0;
-#endif //
+#endif // BX_PLATFORM_
}
size_t getProcessMemoryUsed()
@@ -118,7 +118,8 @@ namespace bx
#if BX_PLATFORM_ANDROID
struct mallinfo mi = mallinfo();
return mi.uordblks;
-#elif BX_PLATFORM_LINUX || BX_PLATFORM_HURD
+#elif BX_PLATFORM_LINUX \
+ || BX_PLATFORM_HURD
FILE* file = fopen("/proc/self/statm", "r");
if (NULL == file)
{
@@ -142,7 +143,7 @@ namespace bx
, (task_info_t)&info
, &infoCount
);
-# else // MACH_TASK_BASIC_INFO
+# else
task_basic_info info;
mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;
@@ -151,7 +152,7 @@ namespace bx
, (task_info_t)&info
, &infoCount
);
-# endif // MACH_TASK_BASIC_INFO
+# endif // defined(MACH_TASK_BASIC_INFO)
if (KERN_SUCCESS != result)
{
return 0;
@@ -175,9 +176,8 @@ namespace bx
#if BX_PLATFORM_WINDOWS
return (void*)::LoadLibraryA(_filePath);
#elif BX_PLATFORM_EMSCRIPTEN \
- || BX_PLATFORM_NACL \
- || BX_PLATFORM_PS4 \
- || BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_filePath);
return NULL;
@@ -191,9 +191,8 @@ namespace bx
#if BX_PLATFORM_WINDOWS
::FreeLibrary( (HMODULE)_handle);
#elif BX_PLATFORM_EMSCRIPTEN \
- || BX_PLATFORM_NACL \
- || BX_PLATFORM_PS4 \
- || BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_handle);
#else
@@ -206,9 +205,8 @@ namespace bx
#if BX_PLATFORM_WINDOWS
return (void*)::GetProcAddress( (HMODULE)_handle, _symbol);
#elif BX_PLATFORM_EMSCRIPTEN \
- || BX_PLATFORM_NACL \
- || BX_PLATFORM_PS4 \
- || BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_handle, _symbol);
return NULL;
@@ -224,7 +222,7 @@ namespace bx
bool result = len != 0 && len < *_inOutSize;
*_inOutSize = len;
return result;
-#elif BX_PLATFORM_PS4 \
+#elif BX_PLATFORM_PS4 \
|| BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_name, _out, _inOutSize);
@@ -235,12 +233,12 @@ namespace bx
bool result = false;
if (NULL != ptr)
{
- len = (uint32_t)strnlen(ptr);
+ len = (uint32_t)strLen(ptr);
result = len != 0 && len < *_inOutSize;
if (len < *_inOutSize)
{
- strlncpy(_out, len, ptr);
+ strCopy(_out, *_inOutSize, ptr);
}
}
@@ -253,7 +251,7 @@ namespace bx
{
#if BX_PLATFORM_WINDOWS
::SetEnvironmentVariableA(_name, _value);
-#elif BX_PLATFORM_PS4 \
+#elif BX_PLATFORM_PS4 \
|| BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_name, _value);
@@ -266,7 +264,7 @@ namespace bx
{
#if BX_PLATFORM_WINDOWS
::SetEnvironmentVariableA(_name, NULL);
-#elif BX_PLATFORM_PS4 \
+#elif BX_PLATFORM_PS4 \
|| BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_name);
@@ -277,7 +275,7 @@ namespace bx
int chdir(const char* _path)
{
-#if BX_PLATFORM_PS4 \
+#if BX_PLATFORM_PS4 \
|| BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_path);
@@ -289,114 +287,10 @@ namespace bx
#endif // BX_COMPILER_
}
- char* pwd(char* _buffer, uint32_t _size)
- {
-#if BX_PLATFORM_PS4 \
- || BX_PLATFORM_XBOXONE \
- || BX_PLATFORM_WINRT
- BX_UNUSED(_buffer, _size);
- return NULL;
-#elif BX_CRT_MSVC
- return ::_getcwd(_buffer, (int)_size);
-#else
- return ::getcwd(_buffer, _size);
-#endif // BX_COMPILER_
- }
-
- bool getTempPath(char* _out, uint32_t* _inOutSize)
- {
-#if BX_PLATFORM_WINDOWS
- uint32_t len = ::GetTempPathA(*_inOutSize, _out);
- bool result = len != 0 && len < *_inOutSize;
- *_inOutSize = len;
- return result;
-#else
- static const char* s_tmp[] =
- {
- "TMPDIR",
- "TMP",
- "TEMP",
- "TEMPDIR",
-
- NULL
- };
-
- for (const char** tmp = s_tmp; *tmp != NULL; ++tmp)
- {
- uint32_t len = *_inOutSize;
- *_out = '\0';
- bool result = getenv(*tmp, _out, &len);
-
- if (result
- && len != 0
- && len < *_inOutSize)
- {
- *_inOutSize = len;
- return result;
- }
- }
-
- FileInfo fi;
- if (stat("/tmp", fi)
- && FileInfo::Directory == fi.m_type)
- {
- strlncpy(_out, *_inOutSize, "/tmp");
- *_inOutSize = 4;
- return true;
- }
-
- return false;
-#endif // BX_PLATFORM_*
- }
-
- bool stat(const char* _filePath, FileInfo& _fileInfo)
- {
- _fileInfo.m_size = 0;
- _fileInfo.m_type = FileInfo::Count;
-
-#if BX_COMPILER_MSVC
- struct ::_stat64 st;
- int32_t result = ::_stat64(_filePath, &st);
-
- if (0 != result)
- {
- return false;
- }
-
- if (0 != (st.st_mode & _S_IFREG) )
- {
- _fileInfo.m_type = FileInfo::Regular;
- }
- else if (0 != (st.st_mode & _S_IFDIR) )
- {
- _fileInfo.m_type = FileInfo::Directory;
- }
-#else
- struct ::stat st;
- int32_t result = ::stat(_filePath, &st);
- if (0 != result)
- {
- return false;
- }
-
- if (0 != (st.st_mode & S_IFREG) )
- {
- _fileInfo.m_type = FileInfo::Regular;
- }
- else if (0 != (st.st_mode & S_IFDIR) )
- {
- _fileInfo.m_type = FileInfo::Directory;
- }
-#endif // BX_COMPILER_MSVC
-
- _fileInfo.m_size = st.st_size;
-
- return true;
- }
-
void* exec(const char* const* _argv)
{
-#if BX_PLATFORM_LINUX || BX_PLATFORM_HURD
+#if BX_PLATFORM_LINUX \
+ || BX_PLATFORM_HURD
pid_t pid = fork();
if (0 == pid)
@@ -408,9 +302,9 @@ namespace bx
return (void*)uintptr_t(pid);
#elif BX_PLATFORM_WINDOWS
- STARTUPINFO si;
- memSet(&si, 0, sizeof(STARTUPINFO) );
- si.cb = sizeof(STARTUPINFO);
+ STARTUPINFOA si;
+ memSet(&si, 0, sizeof(STARTUPINFOA) );
+ si.cb = sizeof(STARTUPINFOA);
PROCESS_INFORMATION pi;
memSet(&pi, 0, sizeof(PROCESS_INFORMATION) );
@@ -418,7 +312,7 @@ namespace bx
int32_t total = 0;
for (uint32_t ii = 0; NULL != _argv[ii]; ++ii)
{
- total += (int32_t)strnlen(_argv[ii]) + 1;
+ total += (int32_t)strLen(_argv[ii]) + 1;
}
char* temp = (char*)alloca(total);
@@ -426,22 +320,22 @@ namespace bx
for(uint32_t ii = 0; NULL != _argv[ii]; ++ii)
{
len += snprintf(&temp[len], bx::uint32_imax(0, total-len)
- , "%s "
- , _argv[ii]
- );
+ , "%s "
+ , _argv[ii]
+ );
}
bool ok = !!CreateProcessA(_argv[0]
- , temp
- , NULL
- , NULL
- , false
- , 0
- , NULL
- , NULL
- , &si
- , &pi
- );
+ , temp
+ , NULL
+ , NULL
+ , false
+ , 0
+ , NULL
+ , NULL
+ , &si
+ , &pi
+ );
if (ok)
{
return pi.hProcess;
diff --git a/3rdparty/bx/src/process.cpp b/3rdparty/bx/src/process.cpp
new file mode 100644
index 00000000000..b748260eece
--- /dev/null
+++ b/3rdparty/bx/src/process.cpp
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "bx_p.h"
+#include <bx/process.h>
+
+#include <stdio.h>
+
+#ifndef BX_CONFIG_CRT_PROCESS
+# define BX_CONFIG_CRT_PROCESS !(0 \
+ || BX_CRT_NONE \
+ || BX_PLATFORM_EMSCRIPTEN \
+ || BX_PLATFORM_PS4 \
+ || BX_PLATFORM_WINRT \
+ || BX_PLATFORM_XBOXONE \
+ )
+#endif // BX_CONFIG_CRT_PROCESS
+
+namespace bx
+{
+#if BX_CONFIG_CRT_PROCESS
+
+#if BX_CRT_MSVC
+# define popen _popen
+# define pclose _pclose
+#endif // BX_CRT_MSVC
+
+ ProcessReader::ProcessReader()
+ : m_file(NULL)
+ {
+ }
+
+ ProcessReader::~ProcessReader()
+ {
+ BX_CHECK(NULL == m_file, "Process not closed!");
+ }
+
+ bool ProcessReader::open(const FilePath& _filePath, const StringView& _args, Error* _err)
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ if (NULL != m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_ALREADY_OPEN, "ProcessReader: File is already open.");
+ return false;
+ }
+
+ char tmp[kMaxFilePath*2] = "\"";
+ strCat(tmp, BX_COUNTOF(tmp), _filePath.get() );
+ strCat(tmp, BX_COUNTOF(tmp), "\" ");
+ strCat(tmp, BX_COUNTOF(tmp), _args);
+
+ m_file = popen(tmp, "r");
+ if (NULL == m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "ProcessReader: Failed to open process.");
+ return false;
+ }
+
+ return true;
+ }
+
+ void ProcessReader::close()
+ {
+ BX_CHECK(NULL != m_file, "Process not open!");
+ FILE* file = (FILE*)m_file;
+ m_exitCode = pclose(file);
+ m_file = NULL;
+ }
+
+ int32_t ProcessReader::read(void* _data, int32_t _size, Error* _err)
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); BX_UNUSED(_err);
+
+ FILE* file = (FILE*)m_file;
+ int32_t size = (int32_t)fread(_data, 1, _size, file);
+ if (size != _size)
+ {
+ if (0 != feof(file) )
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_EOF, "ProcessReader: EOF.");
+ }
+ else if (0 != ferror(file) )
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "ProcessReader: read error.");
+ }
+
+ return size >= 0 ? size : 0;
+ }
+
+ return size;
+ }
+
+ int32_t ProcessReader::getExitCode() const
+ {
+ return m_exitCode;
+ }
+
+ ProcessWriter::ProcessWriter()
+ : m_file(NULL)
+ {
+ }
+
+ ProcessWriter::~ProcessWriter()
+ {
+ BX_CHECK(NULL == m_file, "Process not closed!");
+ }
+
+ bool ProcessWriter::open(const FilePath& _filePath, const StringView& _args, Error* _err)
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ if (NULL != m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_ALREADY_OPEN, "ProcessWriter: File is already open.");
+ return false;
+ }
+
+ char tmp[kMaxFilePath*2] = "\"";
+ strCat(tmp, BX_COUNTOF(tmp), _filePath.get() );
+ strCat(tmp, BX_COUNTOF(tmp), "\" ");
+ strCat(tmp, BX_COUNTOF(tmp), _args);
+
+ m_file = popen(tmp, "w");
+ if (NULL == m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "ProcessWriter: Failed to open process.");
+ return false;
+ }
+
+ return true;
+ }
+
+ void ProcessWriter::close()
+ {
+ BX_CHECK(NULL != m_file, "Process not open!");
+ FILE* file = (FILE*)m_file;
+ m_exitCode = pclose(file);
+ m_file = NULL;
+ }
+
+ int32_t ProcessWriter::write(const void* _data, int32_t _size, Error* _err)
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors."); BX_UNUSED(_err);
+
+ FILE* file = (FILE*)m_file;
+ int32_t size = (int32_t)fwrite(_data, 1, _size, file);
+ if (size != _size)
+ {
+ if (0 != ferror(file) )
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "ProcessWriter: write error.");
+ }
+
+ return size >= 0 ? size : 0;
+ }
+
+ return size;
+ }
+
+ int32_t ProcessWriter::getExitCode() const
+ {
+ return m_exitCode;
+ }
+#endif // BX_CONFIG_CRT_PROCESS
+
+} // namespace bx
diff --git a/3rdparty/bx/src/semaphore.cpp b/3rdparty/bx/src/semaphore.cpp
index b4369ff0ce6..f321240be18 100644
--- a/3rdparty/bx/src/semaphore.cpp
+++ b/3rdparty/bx/src/semaphore.cpp
@@ -3,18 +3,21 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/semaphore.h>
#if BX_CONFIG_SUPPORTS_THREADING
-#if BX_PLATFORM_POSIX
+#if BX_PLATFORM_OSX \
+|| BX_PLATFORM_IOS
+# include <dispatch/dispatch.h>
+#elif BX_PLATFORM_POSIX
# include <errno.h>
# include <pthread.h>
# include <semaphore.h>
# include <time.h>
#elif BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
- || BX_PLATFORM_XBOX360 \
|| BX_PLATFORM_XBOXONE
# include <windows.h>
# include <limits.h>
@@ -23,36 +26,87 @@
# endif // BX_PLATFORM_XBOXONE
#endif // BX_PLATFORM_
-#ifndef BX_CONFIG_SEMAPHORE_PTHREAD
-# define BX_CONFIG_SEMAPHORE_PTHREAD (0 \
- || BX_PLATFORM_OSX \
- || BX_PLATFORM_IOS \
- )
-#endif // BX_CONFIG_SEMAPHORE_PTHREAD
-
namespace bx
{
struct SemaphoreInternal
{
-#if BX_PLATFORM_POSIX
-# if BX_CONFIG_SEMAPHORE_PTHREAD
+#if BX_PLATFORM_OSX \
+|| BX_PLATFORM_IOS
+ dispatch_semaphore_t m_handle;
+#elif BX_PLATFORM_POSIX
pthread_mutex_t m_mutex;
pthread_cond_t m_cond;
int32_t m_count;
-# else
- sem_t m_handle;
-# endif // BX_CONFIG_SEMAPHORE_PTHREAD
#elif BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
- || BX_PLATFORM_XBOX360 \
|| BX_PLATFORM_XBOXONE
HANDLE m_handle;
#endif // BX_PLATFORM_
};
-#if BX_PLATFORM_POSIX
+#if BX_PLATFORM_OSX \
+|| BX_PLATFORM_IOS
+
+ Semaphore::Semaphore()
+ {
+ BX_STATIC_ASSERT(sizeof(SemaphoreInternal) <= sizeof(m_internal) );
+
+ SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
+ si->m_handle = dispatch_semaphore_create(0);
+ BX_CHECK(NULL != si->m_handle, "dispatch_semaphore_create failed.");
+ }
+
+ Semaphore::~Semaphore()
+ {
+ SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
+ dispatch_release(si->m_handle);
+ }
+
+ void Semaphore::post(uint32_t _count)
+ {
+ SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
+
+ for (uint32_t ii = 0; ii < _count; ++ii)
+ {
+ dispatch_semaphore_signal(si->m_handle);
+ }
+ }
+
+ bool Semaphore::wait(int32_t _msecs)
+ {
+ SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
+
+ dispatch_time_t dt = 0 > _msecs
+ ? DISPATCH_TIME_FOREVER
+ : dispatch_time(DISPATCH_TIME_NOW, _msecs*1000000)
+ ;
+ return !dispatch_semaphore_wait(si->m_handle, dt);
+ }
+
+#elif BX_PLATFORM_POSIX
+
+ uint64_t toNs(const timespec& _ts)
+ {
+ return _ts.tv_sec*UINT64_C(1000000000) + _ts.tv_nsec;
+ }
+
+ void toTimespecNs(timespec& _ts, uint64_t _nsecs)
+ {
+ _ts.tv_sec = _nsecs/UINT64_C(1000000000);
+ _ts.tv_nsec = _nsecs%UINT64_C(1000000000);
+ }
+
+ void toTimespecMs(timespec& _ts, int32_t _msecs)
+ {
+ toTimespecNs(_ts, _msecs*1000000);
+ }
+
+ void add(timespec& _ts, int32_t _msecs)
+ {
+ uint64_t ns = toNs(_ts);
+ toTimespecNs(_ts, ns + _msecs*1000000);
+ }
-# if BX_CONFIG_SEMAPHORE_PTHREAD
Semaphore::Semaphore()
{
BX_STATIC_ASSERT(sizeof(SemaphoreInternal) <= sizeof(m_internal) );
@@ -113,15 +167,6 @@ namespace bx
int result = pthread_mutex_lock(&si->m_mutex);
BX_CHECK(0 == result, "pthread_mutex_lock %d", result);
-# if BX_PLATFORM_NACL || BX_PLATFORM_OSX
- BX_UNUSED(_msecs);
- BX_CHECK(-1 == _msecs, "NaCl and OSX don't support pthread_cond_timedwait at this moment.");
- while (0 == result
- && 0 >= si->m_count)
- {
- result = pthread_cond_wait(&si->m_cond, &si->m_mutex);
- }
-# elif BX_PLATFORM_IOS
if (-1 == _msecs)
{
while (0 == result
@@ -133,27 +178,16 @@ namespace bx
else
{
timespec ts;
- ts.tv_sec = _msecs/1000;
- ts.tv_nsec = (_msecs%1000)*1000;
+ clock_gettime(CLOCK_REALTIME, &ts);
+ add(ts, _msecs);
while (0 == result
&& 0 >= si->m_count)
{
- result = pthread_cond_timedwait_relative_np(&si->m_cond, &si->m_mutex, &ts);
+ result = pthread_cond_timedwait(&si->m_cond, &si->m_mutex, &ts);
}
}
-# else
- timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
- ts.tv_sec += _msecs/1000;
- ts.tv_nsec += (_msecs%1000)*1000;
-
- while (0 == result
- && 0 >= si->m_count)
- {
- result = pthread_cond_timedwait(&si->m_cond, &si->m_mutex, &ts);
- }
-# endif // BX_PLATFORM_
+
bool ok = 0 == result;
if (ok)
@@ -169,80 +203,16 @@ namespace bx
return ok;
}
-# else
-
- Semaphore::Semaphore()
- {
- BX_STATIC_ASSERT(sizeof(SemaphoreInternal) <= sizeof(m_internal) );
-
- SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
-
- int32_t result = sem_init(&si->m_handle, 0, 0);
- BX_CHECK(0 == result, "sem_init failed. errno %d", errno);
- BX_UNUSED(result);
- }
-
- Semaphore::~Semaphore()
- {
- SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
-
- int32_t result = sem_destroy(&si->m_handle);
- BX_CHECK(0 == result, "sem_destroy failed. errno %d", errno);
- BX_UNUSED(result);
- }
-
- void Semaphore::post(uint32_t _count)
- {
- SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
-
- int32_t result;
- for (uint32_t ii = 0; ii < _count; ++ii)
- {
- result = sem_post(&si->m_handle);
- BX_CHECK(0 == result, "sem_post failed. errno %d", errno);
- }
- BX_UNUSED(result);
- }
-
- bool Semaphore::wait(int32_t _msecs)
- {
- SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
-
-# if BX_PLATFORM_NACL || BX_PLATFORM_OSX
- BX_CHECK(-1 == _msecs, "NaCl and OSX don't support sem_timedwait at this moment."); BX_UNUSED(_msecs);
- return 0 == sem_wait(&si->m_handle);
-# else
- if (0 > _msecs)
- {
- int32_t result;
- do
- {
- result = sem_wait(&si->m_handle);
- } // keep waiting when interrupted by a signal handler...
- while (-1 == result && EINTR == errno);
- BX_CHECK(0 == result, "sem_wait failed. errno %d", errno);
- return 0 == result;
- }
-
- timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
- ts.tv_sec += _msecs/1000;
- ts.tv_nsec += (_msecs%1000)*1000;
- return 0 == sem_timedwait(&si->m_handle, &ts);
-# endif // BX_PLATFORM_
- }
-# endif // BX_CONFIG_SEMAPHORE_PTHREAD
-
#elif BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
- || BX_PLATFORM_XBOX360 \
|| BX_PLATFORM_XBOXONE
Semaphore::Semaphore()
{
SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
-#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINRT \
+|| BX_PLATFORM_XBOXONE
si->m_handle = CreateSemaphoreExW(NULL, 0, LONG_MAX, NULL, 0, SEMAPHORE_ALL_ACCESS);
#else
si->m_handle = CreateSemaphoreA(NULL, 0, LONG_MAX, NULL);
@@ -269,7 +239,8 @@ namespace bx
SemaphoreInternal* si = (SemaphoreInternal*)m_internal;
DWORD milliseconds = (0 > _msecs) ? INFINITE : _msecs;
-#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINRT \
+|| BX_PLATFORM_XBOXONE
return WAIT_OBJECT_0 == WaitForSingleObjectEx(si->m_handle, milliseconds, FALSE);
#else
return WAIT_OBJECT_0 == WaitForSingleObject(si->m_handle, milliseconds);
diff --git a/3rdparty/bx/src/settings.cpp b/3rdparty/bx/src/settings.cpp
new file mode 100644
index 00000000000..52b8d606c2c
--- /dev/null
+++ b/3rdparty/bx/src/settings.cpp
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "bx_p.h"
+#include <bx/settings.h>
+
+namespace
+{
+#define INI_MALLOC(_ctx, _size) (BX_ALLOC(reinterpret_cast<bx::AllocatorI*>(_ctx), _size) )
+#define INI_FREE(_ctx, _ptr) (BX_FREE(reinterpret_cast<bx::AllocatorI*>(_ctx), _ptr) )
+#define INI_MEMCPY(_dst, _src, _count) (bx::memCopy(_dst, _src, _count) )
+#define INI_STRLEN(_str) (bx::strLen(_str) )
+#define INI_STRNICMP(_s1, _s2, _len) (bx::strCmpI(_s1, _s2, _len) )
+
+#define INI_IMPLEMENTATION
+
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wunused-function");
+
+BX_PRAGMA_DIAGNOSTIC_PUSH();
+BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wsign-compare");
+#include <ini/ini.h>
+BX_PRAGMA_DIAGNOSTIC_POP();
+}
+
+namespace bx
+{
+
+Settings::Settings(AllocatorI* _allocator, const void* _data, uint32_t _len)
+ : m_allocator(_allocator)
+ , m_ini(NULL)
+{
+ load(_data, _len);
+}
+
+#define INI_T(_ptr) reinterpret_cast<ini_t*>(_ptr)
+
+Settings::~Settings()
+{
+ ini_destroy(INI_T(m_ini) );
+}
+
+void Settings::clear()
+{
+ load(NULL, 0);
+}
+
+void Settings::load(const void* _data, uint32_t _len)
+{
+ if (NULL != m_ini)
+ {
+ ini_destroy(INI_T(m_ini) );
+ }
+
+ if (NULL == _data)
+ {
+ m_ini = ini_create(m_allocator);
+ }
+ else
+ {
+ BX_UNUSED(_len);
+ m_ini = ini_load( (const char*)_data, m_allocator);
+ }
+}
+
+const char* Settings::get(const StringView& _name) const
+{
+ ini_t* ini = INI_T(m_ini);
+
+ FilePath uri(_name);
+ const StringView path(strTrim(uri.getPath(), "/") );
+ const StringView& fileName(uri.getFileName() );
+ int32_t section = INI_GLOBAL_SECTION;
+
+ if (!path.isEmpty() )
+ {
+ section = ini_find_section(ini, path.getPtr(), path.getLength() );
+ if (INI_NOT_FOUND == section)
+ {
+ section = INI_GLOBAL_SECTION;
+ }
+ }
+
+ int32_t property = ini_find_property(ini, section, fileName.getPtr(), fileName.getLength() );
+ if (INI_NOT_FOUND == property)
+ {
+ return NULL;
+ }
+
+ return ini_property_value(ini, section, property);
+}
+
+void Settings::set(const StringView& _name, const StringView& _value)
+{
+ ini_t* ini = INI_T(m_ini);
+
+ FilePath uri(_name);
+ const StringView path(strTrim(uri.getPath(), "/") );
+ const StringView& fileName(uri.getFileName() );
+
+ int32_t section = INI_GLOBAL_SECTION;
+
+ if (!path.isEmpty() )
+ {
+ section = ini_find_section(ini, path.getPtr(), path.getLength() );
+ if (INI_NOT_FOUND == section)
+ {
+ section = ini_section_add(ini, path.getPtr(), path.getLength() );
+ }
+ }
+
+ int32_t property = ini_find_property(ini, section, fileName.getPtr(), fileName.getLength() );
+ if (INI_NOT_FOUND == property)
+ {
+ ini_property_add(
+ ini
+ , section
+ , fileName.getPtr()
+ , fileName.getLength()
+ , _value.getPtr()
+ , _value.getLength()
+ );
+ }
+ else
+ {
+ ini_property_value_set(
+ ini
+ , section
+ , property
+ , _value.getPtr()
+ , _value.getLength()
+ );
+ }
+}
+
+void Settings::remove(const StringView& _name) const
+{
+ ini_t* ini = INI_T(m_ini);
+
+ FilePath uri(_name);
+ const StringView path = strTrim(uri.getPath(), "/");
+ const StringView& fileName = uri.getFileName();
+
+ int32_t section = INI_GLOBAL_SECTION;
+
+ if (!path.isEmpty() )
+ {
+ section = ini_find_section(ini, path.getPtr(), path.getLength() );
+ if (INI_NOT_FOUND == section)
+ {
+ section = INI_GLOBAL_SECTION;
+ }
+ }
+
+ int32_t property = ini_find_property(ini, section, fileName.getPtr(), fileName.getLength() );
+ if (INI_NOT_FOUND == property)
+ {
+ return;
+ }
+
+ ini_property_remove(ini, section, property);
+
+ if (INI_GLOBAL_SECTION != section
+ && 0 == ini_property_count(ini, section) )
+ {
+ ini_section_remove(ini, section);
+ }
+}
+
+int32_t Settings::read(ReaderSeekerI* _reader, Error* _err)
+{
+ int32_t size = int32_t(getRemain(_reader) );
+
+ void* data = BX_ALLOC(m_allocator, size);
+
+ int32_t total = bx::read(_reader, data, size, _err);
+ load(data, size);
+
+ BX_FREE(m_allocator, data);
+
+ return total;
+}
+
+int32_t Settings::write(WriterI* _writer, Error* _err) const
+{
+ ini_t* ini = INI_T(m_ini);
+
+ int32_t size = ini_save(ini, NULL, 0);
+ void* data = BX_ALLOC(m_allocator, size);
+
+ ini_save(ini, (char*)data, size);
+ int32_t total = bx::write(_writer, data, size-1, _err);
+
+ BX_FREE(m_allocator, data);
+
+ return total;
+}
+
+#undef INI_T
+
+int32_t read(ReaderSeekerI* _reader, Settings& _settings, Error* _err)
+{
+ BX_ERROR_SCOPE(_err);
+ return _settings.read(_reader, _err);
+}
+
+int32_t write(WriterI* _writer, const Settings& _settings, Error* _err)
+{
+ BX_ERROR_SCOPE(_err);
+ return _settings.write(_writer, _err);
+}
+
+} // namespace bx
diff --git a/3rdparty/bx/src/sort.cpp b/3rdparty/bx/src/sort.cpp
index 3b7485fe7fe..3dc1069f56e 100644
--- a/3rdparty/bx/src/sort.cpp
+++ b/3rdparty/bx/src/sort.cpp
@@ -3,6 +3,7 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/sort.h>
namespace bx
diff --git a/3rdparty/bx/src/string.cpp b/3rdparty/bx/src/string.cpp
index dbb59e5090a..5fe272548d0 100644
--- a/3rdparty/bx/src/string.cpp
+++ b/3rdparty/bx/src/string.cpp
@@ -3,6 +3,7 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/allocator.h>
#include <bx/hash.h>
#include <bx/readerwriter.h>
@@ -10,10 +11,16 @@
#if !BX_CRT_NONE
# include <stdio.h> // vsnprintf, vsnwprintf
+# include <wchar.h> // vswprintf
#endif // !BX_CRT_NONE
namespace bx
{
+ inline bool isInRange(char _ch, char _from, char _to)
+ {
+ return unsigned(_ch - _from) <= unsigned(_to-_from);
+ }
+
bool isSpace(char _ch)
{
return ' ' == _ch
@@ -27,12 +34,12 @@ namespace bx
bool isUpper(char _ch)
{
- return _ch >= 'A' && _ch <= 'Z';
+ return isInRange(_ch, 'A', 'Z');
}
bool isLower(char _ch)
{
- return _ch >= 'a' && _ch <= 'z';
+ return isInRange(_ch, 'a', 'z');
}
bool isAlpha(char _ch)
@@ -42,7 +49,7 @@ namespace bx
bool isNumeric(char _ch)
{
- return _ch >= '0' && _ch <= '9';
+ return isInRange(_ch, '0', '9');
}
bool isAlphaNum(char _ch)
@@ -52,7 +59,60 @@ namespace bx
bool isPrint(char _ch)
{
- return isAlphaNum(_ch) || isSpace(_ch);
+ return isInRange(_ch, ' ', '~');
+ }
+
+ typedef bool (*CharTestFn)(char _ch);
+
+ template<CharTestFn fn>
+ inline bool isCharTest(const StringView& _str)
+ {
+ bool result = true;
+
+ for (const char* ptr = _str.getPtr(), *term = _str.getTerm()
+ ; ptr != term && result
+ ; ++ptr
+ )
+ {
+ result &= fn(*ptr);
+ }
+
+ return result;
+ }
+
+ bool isSpace(const StringView& _str)
+ {
+ return isCharTest<isSpace>(_str);
+ }
+
+ bool isUpper(const StringView& _str)
+ {
+ return isCharTest<isUpper>(_str);
+ }
+
+ bool isLower(const StringView& _str)
+ {
+ return isCharTest<isLower>(_str);
+ }
+
+ bool isAlpha(const StringView& _str)
+ {
+ return isCharTest<isAlpha>(_str);
+ }
+
+ bool isNumeric(const StringView& _str)
+ {
+ return isCharTest<isNumeric>(_str);
+ }
+
+ bool isAlphaNum(const StringView& _str)
+ {
+ return isCharTest<isAlphaNum>(_str);
+ }
+
+ bool isPrint(const StringView& _str)
+ {
+ return isCharTest<isPrint>(_str);
}
char toLower(char _ch)
@@ -70,7 +130,7 @@ namespace bx
void toLower(char* _inOutStr, int32_t _max)
{
- const int32_t len = strnlen(_inOutStr, _max);
+ const int32_t len = strLen(_inOutStr, _max);
toLowerUnsafe(_inOutStr, len);
}
@@ -89,16 +149,10 @@ namespace bx
void toUpper(char* _inOutStr, int32_t _max)
{
- const int32_t len = strnlen(_inOutStr, _max);
+ const int32_t len = strLen(_inOutStr, _max);
toUpperUnsafe(_inOutStr, len);
}
- bool toBool(const char* _str)
- {
- char ch = toLower(_str[0]);
- return ch == 't' || ch == '1';
- }
-
typedef char (*CharFn)(char _ch);
inline char toNoop(char _ch)
@@ -107,11 +161,13 @@ namespace bx
}
template<CharFn fn>
- int32_t strCmp(const char* _lhs, const char* _rhs, int32_t _max)
+ inline int32_t strCmp(const char* _lhs, int32_t _lhsMax, const char* _rhs, int32_t _rhsMax)
{
+ int32_t max = min(_lhsMax, _rhsMax);
+
for (
- ; 0 < _max && fn(*_lhs) == fn(*_rhs)
- ; ++_lhs, ++_rhs, --_max
+ ; 0 < max && fn(*_lhs) == fn(*_rhs)
+ ; ++_lhs, ++_rhs, --max
)
{
if (*_lhs == '\0'
@@ -121,20 +177,105 @@ namespace bx
}
}
- return 0 == _max ? 0 : fn(*_lhs) - fn(*_rhs);
+ return 0 == max && _lhsMax == _rhsMax ? 0 : fn(*_lhs) - fn(*_rhs);
}
- int32_t strncmp(const char* _lhs, const char* _rhs, int32_t _max)
+ int32_t strCmp(const StringView& _lhs, const StringView& _rhs, int32_t _max)
{
- return strCmp<toNoop>(_lhs, _rhs, _max);
+ return strCmp<toNoop>(
+ _lhs.getPtr()
+ , min(_lhs.getLength(), _max)
+ , _rhs.getPtr()
+ , min(_rhs.getLength(), _max)
+ );
}
- int32_t strincmp(const char* _lhs, const char* _rhs, int32_t _max)
+ int32_t strCmpI(const StringView& _lhs, const StringView& _rhs, int32_t _max)
{
- return strCmp<toLower>(_lhs, _rhs, _max);
+ return strCmp<toLower>(
+ _lhs.getPtr()
+ , min(_lhs.getLength(), _max)
+ , _rhs.getPtr()
+ , min(_rhs.getLength(), _max)
+ );
}
- int32_t strnlen(const char* _str, int32_t _max)
+ inline int32_t strCmpV(const char* _lhs, int32_t _lhsMax, const char* _rhs, int32_t _rhsMax)
+ {
+ int32_t max = min(_lhsMax, _rhsMax);
+ int32_t ii = 0;
+ int32_t idx = 0;
+ bool zero = true;
+
+ for (
+ ; 0 < max && _lhs[ii] == _rhs[ii]
+ ; ++ii, --max
+ )
+ {
+ const uint8_t ch = _lhs[ii];
+ if ('\0' == ch
+ || '\0' == _rhs[ii])
+ {
+ break;
+ }
+
+ if (!isNumeric(ch) )
+ {
+ idx = ii+1;
+ zero = true;
+ }
+ else if ('0' != ch)
+ {
+ zero = false;
+ }
+ }
+
+ if (0 == max)
+ {
+ return _lhsMax == _rhsMax ? 0 : _lhs[ii] - _rhs[ii];
+ }
+
+ if ('0' != _lhs[idx]
+ && '0' != _rhs[idx])
+ {
+ int32_t jj = 0;
+ for (jj = ii
+ ; 0 < max && isNumeric(_lhs[jj])
+ ; ++jj, --max
+ )
+ {
+ if (!isNumeric(_rhs[jj]) )
+ {
+ return 1;
+ }
+ }
+
+ if (isNumeric(_rhs[jj]))
+ {
+ return -1;
+ }
+ }
+ else if (zero
+ && idx < ii
+ && (isNumeric(_lhs[ii]) || isNumeric(_rhs[ii]) ) )
+ {
+ return (_lhs[ii] - '0') - (_rhs[ii] - '0');
+ }
+
+ return 0 == max && _lhsMax == _rhsMax ? 0 : _lhs[ii] - _rhs[ii];
+ }
+
+ int32_t strCmpV(const StringView& _lhs, const StringView& _rhs, int32_t _max)
+ {
+ return strCmpV(
+ _lhs.getPtr()
+ , min(_lhs.getLength(), _max)
+ , _rhs.getPtr()
+ , min(_rhs.getLength(), _max)
+ );
+ }
+
+ int32_t strLen(const char* _str, int32_t _max)
{
if (NULL == _str)
{
@@ -146,13 +287,18 @@ namespace bx
return int32_t(ptr - _str);
}
- int32_t strlncpy(char* _dst, int32_t _dstSize, const char* _src, int32_t _num)
+ int32_t strLen(const StringView& _str, int32_t _max)
+ {
+ return strLen(_str.getPtr(), min(_str.getLength(), _max) );
+ }
+
+ inline int32_t strCopy(char* _dst, int32_t _dstSize, const char* _src, int32_t _num)
{
BX_CHECK(NULL != _dst, "_dst can't be NULL!");
BX_CHECK(NULL != _src, "_src can't be NULL!");
BX_CHECK(0 < _dstSize, "_dstSize can't be 0!");
- const int32_t len = strnlen(_src, _num);
+ const int32_t len = strLen(_src, _num);
const int32_t max = _dstSize-1;
const int32_t num = (len < max ? len : max);
memCopy(_dst, _src, num);
@@ -161,20 +307,30 @@ namespace bx
return num;
}
- int32_t strlncat(char* _dst, int32_t _dstSize, const char* _src, int32_t _num)
+ int32_t strCopy(char* _dst, int32_t _dstSize, const StringView& _str, int32_t _num)
+ {
+ return strCopy(_dst, _dstSize, _str.getPtr(), min(_str.getLength(), _num) );
+ }
+
+ inline int32_t strCat(char* _dst, int32_t _dstSize, const char* _src, int32_t _num)
{
BX_CHECK(NULL != _dst, "_dst can't be NULL!");
BX_CHECK(NULL != _src, "_src can't be NULL!");
BX_CHECK(0 < _dstSize, "_dstSize can't be 0!");
const int32_t max = _dstSize;
- const int32_t len = strnlen(_dst, max);
- return strlncpy(&_dst[len], max-len, _src, _num);
+ const int32_t len = strLen(_dst, max);
+ return strCopy(&_dst[len], max-len, _src, _num);
+ }
+
+ int32_t strCat(char* _dst, int32_t _dstSize, const StringView& _str, int32_t _num)
+ {
+ return strCat(_dst, _dstSize, _str.getPtr(), min(_str.getLength(), _num) );
}
- const char* strnchr(const char* _str, char _ch, int32_t _max)
+ inline const char* strFindUnsafe(const char* _str, int32_t _len, char _ch)
{
- for (int32_t ii = 0, len = strnlen(_str, _max); ii < len; ++ii)
+ for (int32_t ii = 0; ii < _len; ++ii)
{
if (_str[ii] == _ch)
{
@@ -185,9 +341,19 @@ namespace bx
return NULL;
}
- const char* strnrchr(const char* _str, char _ch, int32_t _max)
+ inline const char* strFind(const char* _str, int32_t _max, char _ch)
{
- for (int32_t ii = strnlen(_str, _max); 0 < ii; --ii)
+ return strFindUnsafe(_str, strLen(_str, _max), _ch);
+ }
+
+ const char* strFind(const StringView& _str, char _ch)
+ {
+ return strFind(_str.getPtr(), _str.getLength(), _ch);
+ }
+
+ inline const char* strRFindUnsafe(const char* _str, int32_t _len, char _ch)
+ {
+ for (int32_t ii = _len; 0 <= ii; --ii)
{
if (_str[ii] == _ch)
{
@@ -198,13 +364,23 @@ namespace bx
return NULL;
}
+ inline const char* strRFind(const char* _str, int32_t _max, char _ch)
+ {
+ return strRFindUnsafe(_str, strLen(_str, _max), _ch);
+ }
+
+ const char* strRFind(const StringView& _str, char _ch)
+ {
+ return strRFind(_str.getPtr(), _str.getLength(), _ch);
+ }
+
template<CharFn fn>
- static const char* strStr(const char* _str, int32_t _strMax, const char* _find, int32_t _findMax)
+ inline const char* strFind(const char* _str, int32_t _strMax, const char* _find, int32_t _findMax)
{
const char* ptr = _str;
- int32_t stringLen = strnlen(_str, _strMax);
- const int32_t findLen = strnlen(_find, _findMax);
+ int32_t stringLen = strLen(_str, _strMax);
+ const int32_t findLen = strLen(_find, _findMax);
for (; stringLen >= findLen; ++ptr, --stringLen)
{
@@ -239,27 +415,81 @@ namespace bx
return NULL;
}
- const char* strnstr(const char* _str, const char* _find, int32_t _max)
+ const char* strFind(const StringView& _str, const StringView& _find, int32_t _num)
+ {
+ return strFind<toNoop>(
+ _str.getPtr()
+ , _str.getLength()
+ , _find.getPtr()
+ , min(_find.getLength(), _num)
+ );
+ }
+
+ const char* strFindI(const StringView& _str, const StringView& _find, int32_t _num)
+ {
+ return strFind<toLower>(
+ _str.getPtr()
+ , _str.getLength()
+ , _find.getPtr()
+ , min(_find.getLength(), _num)
+ );
+ }
+
+ StringView strLTrim(const StringView& _str, const StringView& _chars)
{
- return strStr<toNoop>(_str, _max, _find, INT32_MAX);
+ const char* ptr = _str.getPtr();
+ const char* chars = _chars.getPtr();
+ const uint32_t charsLen = _chars.getLength();
+
+ for (uint32_t ii = 0, len = _str.getLength(); ii < len; ++ii)
+ {
+ if (NULL == strFindUnsafe(chars, charsLen, ptr[ii]) )
+ {
+ return StringView(ptr + ii, len-ii);
+ }
+ }
+
+ return StringView();
}
- const char* stristr(const char* _str, const char* _find, int32_t _max)
+ StringView strRTrim(const StringView& _str, const StringView& _chars)
{
- return strStr<toLower>(_str, _max, _find, INT32_MAX);
+ if (_str.isEmpty() )
+ {
+ return StringView();
+ }
+
+ const char* ptr = _str.getPtr();
+ const char* chars = _chars.getPtr();
+ const uint32_t charsLen = _chars.getLength();
+
+ for (int32_t len = _str.getLength(), ii = len-1; 0 <= ii; --ii)
+ {
+ if (NULL == strFindUnsafe(chars, charsLen, ptr[ii]) )
+ {
+ return StringView(ptr, ii+1);
+ }
+ }
+
+ return StringView();
+ }
+
+ StringView strTrim(const StringView& _str, const StringView& _chars)
+ {
+ return strLTrim(strRTrim(_str, _chars), _chars);
}
const char* strnl(const char* _str)
{
- for (; '\0' != *_str; _str += strnlen(_str, 1024) )
+ for (; '\0' != *_str; _str += strLen(_str, 1024) )
{
- const char* eol = strnstr(_str, "\r\n", 1024);
+ const char* eol = strFind(StringView(_str, 1024), "\r\n");
if (NULL != eol)
{
return eol + 2;
}
- eol = strnstr(_str, "\n", 1024);
+ eol = strFind(StringView(_str, 1024), "\n");
if (NULL != eol)
{
return eol + 1;
@@ -271,15 +501,15 @@ namespace bx
const char* streol(const char* _str)
{
- for (; '\0' != *_str; _str += strnlen(_str, 1024) )
+ for (; '\0' != *_str; _str += strLen(_str, 1024) )
{
- const char* eol = strnstr(_str, "\r\n", 1024);
+ const char* eol = strFind(StringView(_str, 1024), "\r\n");
if (NULL != eol)
{
return eol;
}
- eol = strnstr(_str, "\n", 1024);
+ eol = strFind(StringView(_str, 1024), "\n");
if (NULL != eol)
{
return eol;
@@ -348,9 +578,9 @@ namespace bx
const char* findIdentifierMatch(const char* _str, const char* _word)
{
- int32_t len = strnlen(_word);
- const char* ptr = strnstr(_str, _word);
- for (; NULL != ptr; ptr = strnstr(ptr + len, _word) )
+ int32_t len = strLen(_word);
+ const char* ptr = strFind(_str, _word);
+ for (; NULL != ptr; ptr = strFind(ptr + len, _word) )
{
if (ptr != _str)
{
@@ -418,7 +648,7 @@ namespace bx
static int32_t write(WriterI* _writer, const char* _str, int32_t _len, const Param& _param, Error* _err)
{
int32_t size = 0;
- int32_t len = (int32_t)strnlen(_str, _len);
+ int32_t len = (int32_t)strLen(_str, _len);
int32_t padding = _param.width > len ? _param.width - len : 0;
bool sign = _param.sign && len > 1 && _str[0] != '-';
padding = padding > 0 ? padding - sign : 0;
@@ -534,7 +764,7 @@ namespace bx
toUpperUnsafe(str, len);
}
- const char* dot = strnchr(str, '.');
+ const char* dot = strFind(str, INT32_MAX, '.');
if (NULL != dot)
{
const int32_t precLen = int32_t(
@@ -574,7 +804,7 @@ namespace bx
int32_t write(WriterI* _writer, const char* _format, va_list _argList, Error* _err)
{
- MemoryReader reader(_format, uint32_t(strnlen(_format) ) );
+ MemoryReader reader(_format, uint32_t(strLen(_format) ) );
int32_t size = 0;
@@ -793,9 +1023,9 @@ namespace bx
{
va_list argList;
va_start(argList, _format);
- int32_t size = write(_writer, _format, argList, _err);
+ int32_t total = write(_writer, _format, argList, _err);
va_end(argList);
- return size;
+ return total;
}
int32_t vsnprintfRef(char* _out, int32_t _max, const char* _format, va_list _argList)
@@ -829,8 +1059,11 @@ namespace bx
int32_t vsnprintf(char* _out, int32_t _max, const char* _format, va_list _argList)
{
+ va_list argList;
+ va_copy(argList, _argList);
+ int32_t total = 0;
#if BX_CRT_NONE
- return vsnprintfRef(_out, _max, _format, _argList);
+ total = vsnprintfRef(_out, _max, _format, argList);
#elif BX_CRT_MSVC
int32_t len = -1;
if (NULL != _out)
@@ -840,26 +1073,30 @@ namespace bx
len = ::vsnprintf_s(_out, _max, size_t(-1), _format, argListCopy);
va_end(argListCopy);
}
- return -1 == len ? ::_vscprintf(_format, _argList) : len;
+ total = -1 == len ? ::_vscprintf(_format, argList) : len;
#else
- return ::vsnprintf(_out, _max, _format, _argList);
+ total = ::vsnprintf(_out, _max, _format, argList);
#endif // BX_COMPILER_MSVC
+ va_end(argList);
+ return total;
}
int32_t snprintf(char* _out, int32_t _max, const char* _format, ...)
{
va_list argList;
va_start(argList, _format);
- int32_t len = vsnprintf(_out, _max, _format, argList);
+ int32_t total = vsnprintf(_out, _max, _format, argList);
va_end(argList);
- return len;
+ return total;
}
int32_t vsnwprintf(wchar_t* _out, int32_t _max, const wchar_t* _format, va_list _argList)
{
+ va_list argList;
+ va_copy(argList, _argList);
+ int32_t total = 0;
#if BX_CRT_NONE
- BX_UNUSED(_out, _max, _format, _argList);
- return 0;
+ BX_UNUSED(_out, _max, _format, argList);
#elif BX_CRT_MSVC
int32_t len = -1;
if (NULL != _out)
@@ -869,12 +1106,14 @@ namespace bx
len = ::_vsnwprintf_s(_out, _max, size_t(-1), _format, argListCopy);
va_end(argListCopy);
}
- return -1 == len ? ::_vscwprintf(_format, _argList) : len;
+ total = -1 == len ? ::_vscwprintf(_format, _argList) : len;
#elif BX_CRT_MINGW
- return ::vsnwprintf(_out, _max, _format, _argList);
+ total = ::vsnwprintf(_out, _max, _format, argList);
#else
- return ::vswprintf(_out, _max, _format, _argList);
+ total = ::vswprintf(_out, _max, _format, argList);
#endif // BX_COMPILER_MSVC
+ va_end(argList);
+ return total;
}
int32_t swnprintf(wchar_t* _out, int32_t _max, const wchar_t* _format, ...)
@@ -886,44 +1125,36 @@ namespace bx
return len;
}
- const char* baseName(const char* _filePath)
- {
- const char* bs = strnrchr(_filePath, '\\');
- const char* fs = strnrchr(_filePath, '/');
- const char* slash = (bs > fs ? bs : fs);
- const char* colon = strnrchr(_filePath, ':');
- const char* basename = slash > colon ? slash : colon;
- if (NULL != basename)
- {
- return basename+1;
- }
-
- return _filePath;
- }
+ static const char s_units[] = { 'B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y' };
- void prettify(char* _out, int32_t _count, uint64_t _size)
+ template<uint32_t Kilo, char KiloCh0, char KiloCh1>
+ inline int32_t prettify(char* _out, int32_t _count, uint64_t _value)
{
uint8_t idx = 0;
- double size = double(_size);
- while (_size != (_size&0x7ff)
- && idx < 9)
+ double value = double(_value);
+ while (_value != (_value&0x7ff)
+ && idx < BX_COUNTOF(s_units) )
{
- _size >>= 10;
- size *= 1.0/1024.0;
+ _value /= Kilo;
+ value *= 1.0/double(Kilo);
++idx;
}
- snprintf(_out, _count, "%0.2f %c%c", size, "BkMGTPEZY"[idx], idx > 0 ? 'B' : '\0');
+ return snprintf(_out, _count, "%0.2f %c%c%c", value
+ , s_units[idx]
+ , idx > 0 ? KiloCh0 : '\0'
+ , KiloCh1
+ );
}
- int32_t strlcpy(char* _dst, const char* _src, int32_t _max)
+ int32_t prettify(char* _out, int32_t _count, uint64_t _value, Units::Enum _units)
{
- return strlncpy(_dst, _max, _src);
- }
+ if (Units::Kilo == _units)
+ {
+ return prettify<1000, 'B', '\0'>(_out, _count, _value);
+ }
- int32_t strlcat(char* _dst, const char* _src, int32_t _max)
- {
- return strlncat(_dst, _max, _src);
+ return prettify<1024, 'i', 'B'>(_out, _count, _value);
}
} // namespace bx
diff --git a/3rdparty/bx/src/thread.cpp b/3rdparty/bx/src/thread.cpp
index 70ea4a0ecbe..fe7f3491dc2 100644
--- a/3rdparty/bx/src/thread.cpp
+++ b/3rdparty/bx/src/thread.cpp
@@ -3,11 +3,11 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/thread.h>
#if BX_PLATFORM_ANDROID \
|| BX_PLATFORM_LINUX \
- || BX_PLATFORM_NACL \
|| BX_PLATFORM_IOS \
|| BX_PLATFORM_OSX \
|| BX_PLATFORM_PS4 \
@@ -21,7 +21,6 @@
# endif // BX_PLATFORM_
#elif BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
- || BX_PLATFORM_XBOX360 \
|| BX_PLATFORM_XBOXONE
# include <windows.h>
# include <limits.h>
@@ -37,11 +36,16 @@ using namespace Windows::System::Threading;
namespace bx
{
+ static AllocatorI* getAllocator()
+ {
+ static DefaultAllocator s_allocator;
+ return &s_allocator;
+ }
+
struct ThreadInternal
{
#if BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
- || BX_PLATFORM_XBOX360 \
|| BX_PLATFORM_XBOXONE
static DWORD WINAPI threadFunc(LPVOID _arg);
HANDLE m_handle;
@@ -52,7 +56,9 @@ namespace bx
#endif // BX_PLATFORM_
};
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_WINRT
DWORD WINAPI ThreadInternal::threadFunc(LPVOID _arg)
{
Thread* thread = (Thread*)_arg;
@@ -76,8 +82,9 @@ namespace bx
Thread::Thread()
: m_fn(NULL)
, m_userData(NULL)
+ , m_queue(getAllocator() )
, m_stackSize(0)
- , m_exitCode(0 /*EXIT_SUCCESS*/)
+ , m_exitCode(kExitSuccess)
, m_running(false)
{
BX_STATIC_ASSERT(sizeof(ThreadInternal) <= sizeof(m_internal) );
@@ -85,7 +92,6 @@ namespace bx
ThreadInternal* ti = (ThreadInternal*)m_internal;
#if BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
- || BX_PLATFORM_XBOX360 \
|| BX_PLATFORM_XBOXONE
ti->m_handle = INVALID_HANDLE_VALUE;
ti->m_threadId = UINT32_MAX;
@@ -112,7 +118,8 @@ namespace bx
m_running = true;
ThreadInternal* ti = (ThreadInternal*)m_internal;
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE
+#if BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_XBOXONE
ti->m_handle = ::CreateThread(NULL
, m_stackSize
, (LPTHREAD_START_ROUTINE)ti->threadFunc
@@ -163,7 +170,7 @@ namespace bx
{
BX_CHECK(m_running, "Not running!");
ThreadInternal* ti = (ThreadInternal*)m_internal;
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360
+#if BX_PLATFORM_WINDOWS
WaitForSingleObject(ti->m_handle, INFINITE);
GetExitCodeThread(ti->m_handle, (DWORD*)&m_exitCode);
CloseHandle(ti->m_handle);
@@ -244,6 +251,17 @@ namespace bx
#endif // BX_PLATFORM_
}
+ void Thread::push(void* _ptr)
+ {
+ m_queue.push(_ptr);
+ }
+
+ void* Thread::pop()
+ {
+ void* ptr = m_queue.pop();
+ return ptr;
+ }
+
int32_t Thread::entry()
{
#if BX_PLATFORM_WINDOWS
@@ -252,7 +270,8 @@ namespace bx
#endif // BX_PLATFORM_WINDOWS
m_sem.post();
- return m_fn(m_userData);
+ int32_t result = m_fn(this, m_userData);
+ return result;
}
struct TlsDataInternal
diff --git a/3rdparty/bx/src/timer.cpp b/3rdparty/bx/src/timer.cpp
index 7f5403749d9..ad3bb1c32cb 100644
--- a/3rdparty/bx/src/timer.cpp
+++ b/3rdparty/bx/src/timer.cpp
@@ -3,6 +3,7 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
+#include "bx_p.h"
#include <bx/timer.h>
#if BX_PLATFORM_ANDROID
@@ -19,7 +20,9 @@ namespace bx
{
int64_t getHPCounter()
{
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_WINRT
LARGE_INTEGER li;
// Performance counter value may unexpectedly leap forward
// http://support.microsoft.com/kb/274323
@@ -44,7 +47,9 @@ namespace bx
int64_t getHPFrequency()
{
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_XBOXONE \
+ || BX_PLATFORM_WINRT
LARGE_INTEGER li;
QueryPerformanceFrequency(&li);
return li.QuadPart;
diff --git a/3rdparty/bx/src/url.cpp b/3rdparty/bx/src/url.cpp
new file mode 100644
index 00000000000..1dda39109bd
--- /dev/null
+++ b/3rdparty/bx/src/url.cpp
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bnet#license-bsd-2-clause
+ */
+
+#include "bx_p.h"
+#include <bx/url.h>
+
+namespace bx
+{
+ UrlView::UrlView()
+ {
+ }
+
+ void UrlView::clear()
+ {
+ for (uint32_t ii = 0; ii < Count; ++ii)
+ {
+ m_tokens[ii].clear();
+ }
+ }
+
+ bool UrlView::parse(const StringView& _url)
+ {
+ clear();
+
+ const char* start = _url.getPtr();
+ const char* term = _url.getTerm();
+ const char* schemeEnd = strFind(StringView(start, term), "://");
+ const char* hostStart = NULL != schemeEnd ? schemeEnd+3 : start;
+ const char* pathStart = strFind(StringView(hostStart, term), '/');
+
+ if (NULL == schemeEnd
+ && NULL == pathStart)
+ {
+ return false;
+ }
+
+ if (NULL != schemeEnd
+ && (NULL == pathStart || pathStart > schemeEnd) )
+ {
+ StringView scheme(start, schemeEnd);
+
+ if (!isAlpha(scheme) )
+ {
+ return false;
+ }
+
+ m_tokens[Scheme].set(scheme);
+ }
+
+ if (NULL != pathStart)
+ {
+ const char* queryStart = strFind(StringView(pathStart, term), '?');
+ const char* fragmentStart = strFind(StringView(pathStart, term), '#');
+
+ if (NULL != fragmentStart
+ && fragmentStart < queryStart)
+ {
+ return false;
+ }
+
+ m_tokens[Path].set(pathStart
+ , NULL != queryStart ? queryStart
+ : NULL != fragmentStart ? fragmentStart
+ : term
+ );
+
+ if (NULL != queryStart)
+ {
+ m_tokens[Query].set(queryStart+1
+ , NULL != fragmentStart ? fragmentStart
+ : term
+ );
+ }
+
+ if (NULL != fragmentStart)
+ {
+ m_tokens[Fragment].set(fragmentStart+1, term);
+ }
+
+ term = pathStart;
+ }
+
+ const char* userPassEnd = strFind(StringView(hostStart, term), '@');
+ const char* userPassStart = NULL != userPassEnd ? hostStart : NULL;
+ hostStart = NULL != userPassEnd ? userPassEnd+1 : hostStart;
+ const char* portStart = strFind(StringView(hostStart, term), ':');
+
+ m_tokens[Host].set(hostStart, NULL != portStart ? portStart : term);
+
+ if (NULL != portStart)
+ {
+ m_tokens[Port].set(portStart+1, term);
+ }
+
+ if (NULL != userPassStart)
+ {
+ const char* passStart = strFind(StringView(userPassStart, userPassEnd), ':');
+
+ m_tokens[UserName].set(userPassStart
+ , NULL != passStart ? passStart
+ : userPassEnd
+ );
+
+ if (NULL != passStart)
+ {
+ m_tokens[Password].set(passStart+1, userPassEnd);
+ }
+ }
+
+ return true;
+ }
+
+ const StringView& UrlView::get(Enum _token) const
+ {
+ return m_tokens[_token];
+ }
+
+ static char toHex(char _nible)
+ {
+ return "0123456789ABCDEF"[_nible&0xf];
+ }
+
+ // https://secure.wikimedia.org/wikipedia/en/wiki/URL_encoding
+ void urlEncode(char* _out, uint32_t _max, const StringView& _str)
+ {
+ _max--; // need space for zero terminator
+
+ const char* str = _str.getPtr();
+ const char* term = _str.getTerm();
+
+ uint32_t ii = 0;
+ for (char ch = *str++
+ ; str <= term && ii < _max
+ ; ch = *str++
+ )
+ {
+ if (isAlphaNum(ch)
+ || ch == '-'
+ || ch == '_'
+ || ch == '.'
+ || ch == '~')
+ {
+ _out[ii++] = ch;
+ }
+ else if (ii+3 < _max)
+ {
+ _out[ii++] = '%';
+ _out[ii++] = toHex(ch>>4);
+ _out[ii++] = toHex(ch);
+ }
+ }
+
+ _out[ii] = '\0';
+ }
+
+} // namespace bx
diff --git a/3rdparty/bx/tests/atomic_test.cpp b/3rdparty/bx/tests/atomic_test.cpp
new file mode 100644
index 00000000000..81b3318e8c0
--- /dev/null
+++ b/3rdparty/bx/tests/atomic_test.cpp
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "test.h"
+#include <bx/cpu.h>
+
+TEST_CASE("atomic", "")
+{
+ uint32_t test = 1337;
+ uint32_t fetched;
+
+ fetched = bx::atomicFetchAndAdd(&test, 52u);
+ REQUIRE(fetched == 1337);
+ REQUIRE(test == 1389);
+
+ fetched = bx::atomicAddAndFetch(&test, 64u);
+ REQUIRE(fetched == 1453);
+ REQUIRE(test == 1453);
+
+ fetched = bx::atomicFetchAndSub(&test, 64u);
+ REQUIRE(fetched == 1453);
+ REQUIRE(test == 1389);
+
+ fetched = bx::atomicSubAndFetch(&test, 52u);
+ REQUIRE(fetched == 1337);
+ REQUIRE(test == 1337);
+
+ fetched = bx::atomicFetchAndAddsat(&test, 52u, 1453u);
+ REQUIRE(fetched == 1337);
+ REQUIRE(test == 1389);
+
+ fetched = bx::atomicFetchAndAddsat(&test, 1000u, 1453u);
+ REQUIRE(fetched == 1389);
+ REQUIRE(test == 1453);
+
+ fetched = bx::atomicFetchAndSubsat(&test, 64u, 1337u);
+ REQUIRE(fetched == 1453);
+ REQUIRE(test == 1389);
+
+ fetched = bx::atomicFetchAndSubsat(&test, 1000u, 1337u);
+ REQUIRE(fetched == 1389);
+ REQUIRE(test == 1337);
+
+}
diff --git a/3rdparty/bx/tests/easing_test.cpp b/3rdparty/bx/tests/easing_test.cpp
new file mode 100644
index 00000000000..9bf3c996798
--- /dev/null
+++ b/3rdparty/bx/tests/easing_test.cpp
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "test.h"
+
+#include <bx/easing.h>
+#include <bx/file.h>
+
+TEST_CASE("easing", "")
+{
+ bx::WriterI* writer = bx::getNullOut();
+
+ for (uint32_t ee = 0; ee < bx::Easing::Count; ++ee)
+ {
+ bx::writePrintf(writer, "\n\n%d\n", ee);
+
+ const bx::EaseFn easing = bx::getEaseFunc(bx::Easing::Enum(ee) );
+
+ const int32_t nx = 64;
+ const int32_t ny = 10;
+
+ bx::writePrintf(writer, "\t/// ^\n");
+
+ for (int32_t yy = ny+4; yy >= -5; --yy)
+ {
+ const float ys = float(yy )/float(ny);
+ const float ye = float(yy+1.0)/float(ny);
+
+ bx::writePrintf(writer, "\t/// %c", yy != 0 ? '|' : '+');
+
+ for (int32_t xx = 0; xx < nx; ++xx)
+ {
+ int32_t jj = 0;
+ for (; jj < 10; ++jj)
+ {
+ const float tt = float(xx*10+jj)/10.0f/float(nx);
+ const float vv = easing(tt);
+
+ if (vv >= ys
+ && vv < ye)
+ {
+ bx::writePrintf(writer, "*");
+ break;
+ }
+ }
+
+ if (jj == 10)
+ {
+ bx::writePrintf(writer, "%c", yy != 0 ? ' ' : '-');
+ }
+ }
+
+ bx::writePrintf(writer, "%s\n", yy != 0 ? "" : ">");
+ }
+ }
+}
diff --git a/3rdparty/bx/tests/filepath_test.cpp b/3rdparty/bx/tests/filepath_test.cpp
new file mode 100644
index 00000000000..5b743c66c23
--- /dev/null
+++ b/3rdparty/bx/tests/filepath_test.cpp
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "test.h"
+#include <bx/filepath.h>
+
+struct FilePathTest
+{
+ const char* filePath;
+ const char* expected;
+};
+
+FilePathTest s_filePathTest[] =
+{
+ // Already clean
+ {"", "."},
+ {"abc", "abc"},
+ {"abc/def", "abc/def"},
+ {"a/b/c", "a/b/c"},
+ {".", "."},
+ {"..", ".."},
+ {"../..", "../.."},
+ {"../../abc", "../../abc"},
+ {"/abc", "/abc"},
+ {"/", "/"},
+
+ // Do not remove trailing slash
+ {"abc/", "abc/"},
+ {"abc/def/", "abc/def/"},
+ {"a/b/c/", "a/b/c/"},
+ {"./", "./"},
+ {"../", "../"},
+ {"../../", "../../"},
+ {"/abc/", "/abc/"},
+
+ // Remove doubled slash
+ {"abc//def//ghi", "abc/def/ghi"},
+ {"//abc", "/abc"},
+ {"///abc", "/abc"},
+ {"//abc//", "/abc/"},
+ {"abc//", "abc/"},
+
+ // Remove . elements
+ {"abc/./def", "abc/def"},
+ {"/./abc/def", "/abc/def"},
+ {"abc/.", "abc"},
+
+ // Remove .. elements
+ {"abc/def/ghi/../jkl", "abc/def/jkl"},
+ {"abc/def/../ghi/../jkl", "abc/jkl"},
+ {"abc/def/..", "abc"},
+ {"abc/def/../..", "."},
+ {"/abc/def/../..", "/"},
+ {"abc/def/../../..", ".."},
+ {"/abc/def/../../..", "/"},
+ {"abc/def/../../../ghi/jkl/../../../mno", "../../mno"},
+
+ // Combinations
+ {"abc/./../def", "def"},
+ {"abc//./../def", "def"},
+ {"abc/../../././../def", "../../def"},
+
+ {"abc\\/../..\\/././../def", "../../def"},
+ {"\\abc/def\\../..\\..", "/"},
+};
+
+struct FilePathSplit
+{
+ const char* filePath;
+ bool absolute;
+ const char* path;
+ const char* fileName;
+ const char* baseName;
+ const char* extension;
+};
+
+static const FilePathSplit s_filePathSplit[] =
+{
+ { "\\abc/def\\../..\\../test.txt", true, "/", "test.txt", "test", ".txt" },
+ { "/abv/gd/555/333/pod.mac", true, "/abv/gd/555/333/", "pod.mac", "pod", ".mac" },
+ { "archive.tar.gz", false, "", "archive.tar.gz", "archive", ".tar.gz" },
+ { "tmp/archive.tar.gz", false, "tmp/", "archive.tar.gz", "archive", ".tar.gz" },
+ { "/tmp/archive.tar.gz", true, "/tmp/", "archive.tar.gz", "archive", ".tar.gz" },
+ { "d:/tmp/archive.tar.gz", true, "D:/tmp/", "archive.tar.gz", "archive", ".tar.gz" },
+ { "/tmp/abv/gd", true, "/tmp/abv/", "gd", "gd", "" },
+ { "/tmp/abv/gd/", true, "/tmp/abv/gd/", "", "", "" },
+};
+
+TEST_CASE("FilePath", "")
+{
+ bx::FilePath fp;
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_filePathTest); ++ii)
+ {
+ const FilePathTest& test = s_filePathTest[ii];
+
+ fp.set(test.filePath);
+ const bx::StringView result = fp.get();
+
+ REQUIRE(0 == bx::strCmp(test.expected, result) );
+ }
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_filePathSplit); ++ii)
+ {
+ const FilePathSplit& test = s_filePathSplit[ii];
+
+ fp.set(test.filePath);
+ const bx::StringView path = fp.getPath();
+ const bx::StringView fileName = fp.getFileName();
+ const bx::StringView baseName = fp.getBaseName();
+ const bx::StringView ext = fp.getExt();
+
+ REQUIRE(0 == bx::strCmp(test.path, path) );
+ REQUIRE(0 == bx::strCmp(test.fileName, fileName) );
+ REQUIRE(0 == bx::strCmp(test.baseName, baseName) );
+ REQUIRE(0 == bx::strCmp(test.extension, ext) );
+ REQUIRE(test.absolute == fp.isAbsolute() );
+ };
+}
+
+TEST_CASE("FilePath temp", "")
+{
+ bx::FilePath tmp(bx::Dir::Temp);
+ REQUIRE(0 != bx::strCmp(".", tmp.getPath().getPtr() ) );
+
+ bx::Error err;
+ tmp.join("test/abvgd/555333/test");
+ REQUIRE(bx::makeAll(tmp, &err) );
+ REQUIRE(err.isOk() );
+
+ tmp.set(bx::Dir::Temp);
+ tmp.join("test");
+ REQUIRE(bx::removeAll(tmp, &err) );
+ REQUIRE(err.isOk() );
+}
diff --git a/3rdparty/bx/tests/handle_bench.cpp b/3rdparty/bx/tests/handle_bench.cpp
index e8d8bee11cf..e5bd3007233 100644
--- a/3rdparty/bx/tests/handle_bench.cpp
+++ b/3rdparty/bx/tests/handle_bench.cpp
@@ -106,5 +106,5 @@ int main()
extern void simd_bench();
simd_bench();
- return EXIT_SUCCESS;
+ return bx::kExitSuccess;
}
diff --git a/3rdparty/bx/tests/handle_test.cpp b/3rdparty/bx/tests/handle_test.cpp
index b82e1da3174..05392922511 100644
--- a/3rdparty/bx/tests/handle_test.cpp
+++ b/3rdparty/bx/tests/handle_test.cpp
@@ -89,26 +89,26 @@ TEST_CASE("HandleHashTable", "")
bx::StringView sv0("test0");
- bool ok = hm.insert(bx::hashMurmur2A(sv0), 0);
+ bool ok = hm.insert(bx::hash<bx::HashMurmur2A>(sv0), 0);
REQUIRE(ok);
- ok = hm.insert(bx::hashMurmur2A(sv0), 0);
+ ok = hm.insert(bx::hash<bx::HashMurmur2A>(sv0), 0);
REQUIRE(!ok);
REQUIRE(1 == hm.getNumElements() );
bx::StringView sv1("test1");
- ok = hm.insert(bx::hashMurmur2A(sv1), 0);
+ ok = hm.insert(bx::hash<bx::HashMurmur2A>(sv1), 0);
REQUIRE(ok);
REQUIRE(2 == hm.getNumElements() );
hm.removeByHandle(0);
REQUIRE(0 == hm.getNumElements() );
- ok = hm.insert(bx::hashMurmur2A(sv0), 0);
+ ok = hm.insert(bx::hash<bx::HashMurmur2A>(sv0), 0);
REQUIRE(ok);
- hm.removeByKey(bx::hashMurmur2A(sv0) );
+ hm.removeByKey(bx::hash<bx::HashMurmur2A>(sv0) );
REQUIRE(0 == hm.getNumElements() );
for (uint32_t ii = 0, num = hm.getMaxCapacity(); ii < num; ++ii)
diff --git a/3rdparty/bx/tests/hash_test.cpp b/3rdparty/bx/tests/hash_test.cpp
new file mode 100644
index 00000000000..8fbc542af94
--- /dev/null
+++ b/3rdparty/bx/tests/hash_test.cpp
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "test.h"
+#include <bx/hash.h>
+
+void makeCrcTable(uint32_t _poly)
+{
+ for (uint32_t ii = 0; ii < 256; ++ii)
+ {
+ uint32_t crc = ii;
+ for (uint32_t jj = 0; jj < 8; ++jj)
+ {
+ if (1 == (crc & 1) )
+ {
+ crc = (crc >> 1) ^ _poly;
+ }
+ else
+ {
+ crc >>= 1;
+ }
+ }
+
+ printf("0x%08x,%c", crc, 7 == (ii & 7) ? '\n' : ' ');
+ }
+}
+
+struct HashTest
+{
+ uint32_t crc32;
+ uint32_t adler32;
+ const char* input;
+};
+
+const HashTest s_hashTest[] =
+{
+ { 0, 1, "" },
+ { 0xe8b7be43, 0x00620062, "a" },
+ { 0x9e83486d, 0x012600c4, "ab" },
+ { 0xc340daab, 0x06060205, "abvgd" },
+ { 0x07642fe2, 0x020a00d6, "1389" },
+ { 0x26d75737, 0x04530139, "555333" },
+};
+
+TEST_CASE("HashCrc32", "")
+{
+#if 0
+ makeCrcTable(0xedb88320);
+ printf("\n");
+ makeCrcTable(0x82f63b78);
+ printf("\n");
+ makeCrcTable(0xeb31d82e);
+#endif // 0
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_hashTest); ++ii)
+ {
+ const HashTest& test = s_hashTest[ii];
+
+ bx::HashCrc32 hash;
+ hash.begin();
+ hash.add(test.input, bx::strLen(test.input) );
+ REQUIRE(test.crc32 == hash.end() );
+ }
+}
+
+TEST_CASE("HashAdler32", "")
+{
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_hashTest); ++ii)
+ {
+ const HashTest& test = s_hashTest[ii];
+
+ bx::HashAdler32 hash;
+ hash.begin();
+ hash.add(test.input, bx::strLen(test.input) );
+ REQUIRE(test.adler32 == hash.end() );
+ }
+}
diff --git a/3rdparty/bx/tests/macros_test.cpp b/3rdparty/bx/tests/macros_test.cpp
index bae4bb896cf..092bbd61726 100644
--- a/3rdparty/bx/tests/macros_test.cpp
+++ b/3rdparty/bx/tests/macros_test.cpp
@@ -61,5 +61,5 @@ TEST(macros)
CHECK_EQUAL(5, BX_VA_ARGS_COUNT(1, 2, 3, 4, 5) );
CHECK_EQUAL(6, BX_VA_ARGS_COUNT(1, 2, 3, 4, 5, 6) );
- CHECK_EQUAL(0, bx::strncmp(BX_STRINGIZE(TEST 1234 %^&*), "TEST 1234 %^&*") );
+ CHECK_EQUAL(0, bx::strCmp(BX_STRINGIZE(TEST 1234 %^&*), "TEST 1234 %^&*") );
}
diff --git a/3rdparty/bx/tests/main_test.cpp b/3rdparty/bx/tests/main_test.cpp
index b9d66db2fd6..261b62a2139 100644
--- a/3rdparty/bx/tests/main_test.cpp
+++ b/3rdparty/bx/tests/main_test.cpp
@@ -16,25 +16,6 @@ void ANativeActivity_onCreate(ANativeActivity*, void*, size_t)
{
exit(runAllTests(BX_COUNTOF(s_argv), s_argv) );
}
-#elif BX_PLATFORM_NACL
-# include <ppapi/c/pp_errors.h>
-# include <ppapi/c/ppp.h>
-
-PP_EXPORT const void* PPP_GetInterface(const char* /*_name*/)
-{
- return NULL;
-}
-
-PP_EXPORT int32_t PPP_InitializeModule(PP_Module /*_module*/, PPB_GetInterface /*_interface*/)
-{
- DBG("PPAPI version: %d", PPAPI_RELEASE);
- runAllTests(BX_COUNTOF(s_argv), s_argv);
- return PP_ERROR_NOINTERFACE;
-}
-
-PP_EXPORT void PPP_ShutdownModule()
-{
-}
#else
int main(int _argc, const char* _argv[])
{
diff --git a/3rdparty/bx/tests/fpumath_test.cpp b/3rdparty/bx/tests/math_test.cpp
index ae843872e43..2005a67908c 100644
--- a/3rdparty/bx/tests/fpumath_test.cpp
+++ b/3rdparty/bx/tests/math_test.cpp
@@ -4,7 +4,7 @@
*/
#include "test.h"
-#include <bx/fpumath.h>
+#include <bx/math.h>
#if !BX_COMPILER_MSVC || BX_COMPILER_MSVC >= 1800
#include <cmath>
@@ -13,13 +13,25 @@ TEST_CASE("isFinite, isInfinite, isNan", "")
for (uint64_t ii = 0; ii < UINT32_MAX; ii += rand()%(1<<13)+1)
{
union { uint32_t ui; float f; } u = { uint32_t(ii) };
- REQUIRE(std::isnan(u.f) == bx::isNan(u.f) );
+ REQUIRE(std::isnan(u.f) == bx::isNan(u.f) );
REQUIRE(std::isfinite(u.f) == bx::isFinite(u.f) );
- REQUIRE(std::isinf(u.f) == bx::isInfinite(u.f) );
+ REQUIRE(std::isinf(u.f) == bx::isInfinite(u.f) );
}
}
#endif // !BX_COMPILER_MSVC || BX_COMPILER_MSVC >= 1800
+
+bool flog2_test(float _a)
+{
+ return bx::flog2(_a) == bx::flog(_a) * (1.0f / bx::flog(2.0f) );
+}
+
+TEST_CASE("flog2", "")
+{
+ flog2_test(0.0f);
+ flog2_test(256.0f);
+}
+
TEST_CASE("ToBits", "")
{
REQUIRE(UINT32_C(0x12345678) == bx::floatToBits( bx::bitsToFloat( UINT32_C(0x12345678) ) ) );
@@ -65,9 +77,9 @@ TEST_CASE("quaternion", "")
bx::mtxIdentity(mtx);
mtxCheck(mtxQ, mtx);
- float ax = bx::pi/27.0f;
- float ay = bx::pi/13.0f;
- float az = bx::pi/7.0f;
+ float ax = bx::kPi/27.0f;
+ float ay = bx::kPi/13.0f;
+ float az = bx::kPi/7.0f;
bx::quatRotateX(quat, ax);
bx::mtxQuat(mtxQ, quat);
diff --git a/3rdparty/bx/tests/os_test.cpp b/3rdparty/bx/tests/os_test.cpp
index e6aeb314fbe..1589416e543 100644
--- a/3rdparty/bx/tests/os_test.cpp
+++ b/3rdparty/bx/tests/os_test.cpp
@@ -5,6 +5,8 @@
#include "test.h"
#include <bx/os.h>
+#include <bx/semaphore.h>
+#include <bx/timer.h>
TEST_CASE("getProcessMemoryUsed", "")
{
@@ -12,9 +14,15 @@ TEST_CASE("getProcessMemoryUsed", "")
// DBG("bx::getProcessMemoryUsed %d", bx::getProcessMemoryUsed() );
}
-TEST_CASE("getTempPath", "")
+TEST_CASE("semaphore_timeout", "")
{
- char tmpDir[512];
- uint32_t len = BX_COUNTOF(tmpDir);
- REQUIRE(bx::getTempPath(tmpDir, &len) );
+ bx::Semaphore sem;
+
+ int64_t start = bx::getHPCounter();
+ bool ok = sem.wait(900);
+ int64_t elapsed = bx::getHPCounter() - start;
+ int64_t frequency = bx::getHPFrequency();
+ double ms = double(elapsed) / double(frequency) * 1000;
+ printf("%f\n", ms);
+ REQUIRE(!ok);
}
diff --git a/3rdparty/bx/tests/queue_test.cpp b/3rdparty/bx/tests/queue_test.cpp
index 48fd270a274..81a2b44e676 100644
--- a/3rdparty/bx/tests/queue_test.cpp
+++ b/3rdparty/bx/tests/queue_test.cpp
@@ -21,14 +21,16 @@ uintptr_t ptrToBits(void* _ptr)
TEST_CASE("SpSc", "")
{
- bx::SpScUnboundedQueue queue;
+ bx::DefaultAllocator allocator;
+ bx::SpScUnboundedQueue queue(&allocator);
queue.push(bitsToPtr(0xdeadbeef) );
REQUIRE(0xdeadbeef == ptrToBits(queue.pop() ) );
}
TEST_CASE("MpSc", "")
{
- bx::MpScUnboundedQueueT<void> queue;
+ bx::DefaultAllocator allocator;
+ bx::MpScUnboundedQueueT<void> queue(&allocator);
queue.push(bitsToPtr(0xdeadbeef) );
REQUIRE(0xdeadbeef == ptrToBits(queue.pop() ) );
}
diff --git a/3rdparty/bx/tests/rng_test.cpp b/3rdparty/bx/tests/rng_test.cpp
new file mode 100644
index 00000000000..89fef3f05d7
--- /dev/null
+++ b/3rdparty/bx/tests/rng_test.cpp
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "test.h"
+
+#include <bx/rng.h>
+#include <bx/file.h>
+
+const uint32_t kMax = 10<<20;
+
+template<typename Ty>
+void testRng(const char* _name, Ty* _rng)
+{
+ uint32_t histBits[32];
+ uint32_t histUint8[256];
+
+ bx::memSet(histBits, 0, sizeof(histBits) );
+ bx::memSet(histUint8, 0, sizeof(histUint8) );
+
+ for (uint32_t ii = 0; ii < kMax; ++ii)
+ {
+ uint32_t val = _rng->gen();
+
+ for (uint32_t shift = 0; shift < 32; ++shift)
+ {
+ const uint32_t mask = 1<<shift;
+ histBits[shift] += !!(0 != (val & mask) );
+ }
+
+ const uint32_t mf000 = (val & 0xff000000)>>24;
+ const uint32_t m0f00 = (val & 0x00ff0000)>>16;
+ const uint32_t m00f0 = (val & 0x0000ff00)>> 8;
+ const uint32_t m000f = (val & 0x000000ff)>> 0;
+
+ histUint8[mf000]++;
+ histUint8[m0f00]++;
+ histUint8[m00f0]++;
+ histUint8[m000f]++;
+ }
+
+ bx::WriterI* writer = bx::getNullOut();
+ bx::writePrintf(writer, "%s\n", _name);
+
+ {
+ bx::writePrintf(writer, "\tbits histogram:\n");
+ uint32_t min = UINT32_MAX;
+ uint32_t max = 0;
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(histBits); ++ii)
+ {
+ bx::writePrintf(writer, "\t\t%3d: %d\n", ii, histBits[ii]);
+ min = bx::min(min, histBits[ii]);
+ max = bx::max(max, histBits[ii]);
+ }
+
+ bx::writePrintf(writer, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
+
+ REQUIRE(max-min < 8000);
+ }
+
+ {
+ bx::writePrintf(writer, "\tuint8_t histogram:\n");
+ uint32_t min = UINT32_MAX;
+ uint32_t max = 0;
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(histUint8); ++ii)
+ {
+ bx::writePrintf(writer, "\t\t%3d: %d\n", ii, histUint8[ii]);
+ min = bx::min(min, histUint8[ii]);
+ max = bx::max(max, histUint8[ii]);
+ }
+
+ bx::writePrintf(writer, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
+
+ REQUIRE(max-min < 8000);
+ }
+}
+
+TEST_CASE("Rng", "")
+{
+ bx::RngMwc mwc;
+ testRng("RngMwc", &mwc);
+
+ bx::RngShr3 shr3;
+ testRng("RngShr3", &shr3);
+}
diff --git a/3rdparty/bx/tests/settings_test.cpp b/3rdparty/bx/tests/settings_test.cpp
new file mode 100644
index 00000000000..9f94cfd9fa8
--- /dev/null
+++ b/3rdparty/bx/tests/settings_test.cpp
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "test.h"
+#include <bx/settings.h>
+#include <bx/file.h>
+
+TEST_CASE("Settings", "")
+{
+ bx::FilePath filePath;
+ filePath.set(bx::Dir::Temp);
+ filePath.join("settings.ini");
+
+ bx::DefaultAllocator allocator;
+
+ bx::Settings settings(&allocator);
+
+ settings.set("meh/podmac", "true");
+ settings.set("test/foo/bar/abvgd", "1389");
+
+ bx::FileWriter writer;
+ if (bx::open(&writer, filePath) )
+ {
+ bx::write(&writer, settings);
+ bx::close(&writer);
+ }
+
+ REQUIRE(NULL == settings.get("meh") );
+ REQUIRE(0 == bx::strCmp(settings.get("meh/podmac"), "true") );
+ REQUIRE(0 == bx::strCmp(settings.get("test/foo/bar/abvgd"), "1389") );
+
+ settings.remove("meh/podmac");
+ REQUIRE(NULL == settings.get("meh/podmac") );
+
+ settings.clear();
+
+ bx::FileReader reader;
+ if (bx::open(&reader, filePath) )
+ {
+ bx::read(&reader, settings);
+ bx::close(&reader);
+ }
+
+ REQUIRE(NULL == settings.get("meh") );
+ REQUIRE(0 == bx::strCmp(settings.get("meh/podmac"), "true") );
+ REQUIRE(0 == bx::strCmp(settings.get("test/foo/bar/abvgd"), "1389") );
+}
diff --git a/3rdparty/bx/tests/simd_bench.cpp b/3rdparty/bx/tests/simd_bench.cpp
index d8ace20c117..0f0c9c4671c 100644
--- a/3rdparty/bx/tests/simd_bench.cpp
+++ b/3rdparty/bx/tests/simd_bench.cpp
@@ -3,9 +3,9 @@
* License: https://github.com/bkaradzic/bx#license-bsd-2-clause
*/
-#include <bx/simd_t.h>
+#include <bx/allocator.h>
#include <bx/rng.h>
-#include <bx/crtimpl.h>
+#include <bx/simd_t.h>
#include <bx/timer.h>
#include <stdio.h>
@@ -98,7 +98,7 @@ void simd_bench_pass(bx::simd128_t* _dst, bx::simd128_t* _src, uint32_t _numVert
void simd_bench()
{
- bx::CrtAllocator allocator;
+ bx::DefaultAllocator allocator;
bx::RngMwc rng;
const uint32_t numVertices = 1024*1024;
@@ -121,10 +121,10 @@ void simd_bench()
for (uint32_t ii = 0; ii < numVertices; ++ii)
{
float* ptr = (float*)&src[ii];
- ptr[0] = bx::fabsolute(ptr[0]);
- ptr[1] = bx::fabsolute(ptr[1]);
- ptr[2] = bx::fabsolute(ptr[2]);
- ptr[3] = bx::fabsolute(ptr[3]);
+ ptr[0] = bx::fabs(ptr[0]);
+ ptr[1] = bx::fabs(ptr[1]);
+ ptr[2] = bx::fabs(ptr[2]);
+ ptr[3] = bx::fabs(ptr[3]);
}
simd_bench_pass(dst, src, numVertices);
diff --git a/3rdparty/bx/tests/simd_test.cpp b/3rdparty/bx/tests/simd_test.cpp
index ca46fd00bc3..fcdc7a9cb1f 100644
--- a/3rdparty/bx/tests/simd_test.cpp
+++ b/3rdparty/bx/tests/simd_test.cpp
@@ -5,7 +5,7 @@
#include "test.h"
#include <bx/simd_t.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include <bx/string.h>
#if 0
@@ -206,7 +206,7 @@ void simd_check_string(const char* _str, bx::simd128_t _a)
SIMD_DBG("%s %s", _str, test);
- CHECK(0 == bx::strncmp(_str, test) );
+ CHECK(0 == bx::strCmp(_str, test) );
}
TEST_CASE("simd_swizzle", "")
@@ -235,13 +235,14 @@ TEST_CASE("simd_shuffle", "")
const simd128_t ABCD = simd_ild(0x41414141, 0x42424242, 0x43434343, 0x44444444);
simd_check_string("xyAB", simd_shuf_xyAB(xyzw, ABCD) );
simd_check_string("ABxy", simd_shuf_ABxy(xyzw, ABCD) );
- simd_check_string("zwCD", simd_shuf_zwCD(xyzw, ABCD) );
simd_check_string("CDzw", simd_shuf_CDzw(xyzw, ABCD) );
+ simd_check_string("zwCD", simd_shuf_zwCD(xyzw, ABCD) );
simd_check_string("xAyB", simd_shuf_xAyB(xyzw, ABCD) );
+ simd_check_string("AxBy", simd_shuf_AxBy(xyzw, ABCD) );
simd_check_string("zCwD", simd_shuf_zCwD(xyzw, ABCD) );
+ simd_check_string("CzDw", simd_shuf_CzDw(xyzw, ABCD) );
simd_check_string("xAzC", simd_shuf_xAzC(xyzw, ABCD) );
simd_check_string("yBwD", simd_shuf_yBwD(xyzw, ABCD) );
- simd_check_string("CzDw", simd_shuf_CzDw(xyzw, ABCD) );
}
TEST_CASE("simd_compare", "")
diff --git a/3rdparty/bx/tests/sort_test.cpp b/3rdparty/bx/tests/sort_test.cpp
index d271a3ffa03..0b078e23d90 100644
--- a/3rdparty/bx/tests/sort_test.cpp
+++ b/3rdparty/bx/tests/sort_test.cpp
@@ -23,13 +23,13 @@ TEST_CASE("quickSort", "")
{
const char* lhs = *(const char**)_lhs;
const char* rhs = *(const char**)_rhs;
- return bx::strncmp(lhs, rhs);
+ return bx::strCmp(lhs, rhs);
});
- REQUIRE(0 == bx::strncmp(str[0], "jabuka") );
- REQUIRE(0 == bx::strncmp(str[1], "jagoda") );
- REQUIRE(0 == bx::strncmp(str[2], "kruska") );
- REQUIRE(0 == bx::strncmp(str[3], "malina") );
+ REQUIRE(0 == bx::strCmp(str[0], "jabuka") );
+ REQUIRE(0 == bx::strCmp(str[1], "jagoda") );
+ REQUIRE(0 == bx::strCmp(str[2], "kruska") );
+ REQUIRE(0 == bx::strCmp(str[3], "malina") );
int8_t byte[128];
bx::RngMwc rng;
diff --git a/3rdparty/bx/tests/string_test.cpp b/3rdparty/bx/tests/string_test.cpp
index 35e1dac4445..d848f3de142 100644
--- a/3rdparty/bx/tests/string_test.cpp
+++ b/3rdparty/bx/tests/string_test.cpp
@@ -4,9 +4,10 @@
*/
#include "test.h"
+#include <bx/filepath.h>
#include <bx/string.h>
-#include <bx/crtimpl.h>
#include <bx/handlealloc.h>
+#include <bx/sort.h>
bx::AllocatorI* g_allocator;
@@ -23,110 +24,185 @@ TEST_CASE("chars", "")
}
}
-TEST_CASE("strnlen", "")
+TEST_CASE("strLen", "")
{
const char* test = "test";
- REQUIRE(0 == bx::strnlen(test, 0) );
- REQUIRE(2 == bx::strnlen(test, 2) );
- REQUIRE(4 == bx::strnlen(test, INT32_MAX) );
+ REQUIRE(0 == bx::strLen(test, 0) );
+ REQUIRE(2 == bx::strLen(test, 2) );
+ REQUIRE(4 == bx::strLen(test, INT32_MAX) );
}
-TEST_CASE("strlncpy", "")
+TEST_CASE("strCopy", "")
{
char dst[128];
size_t num;
- num = bx::strlncpy(dst, 1, "blah");
+ num = bx::strCopy(dst, 1, "blah");
REQUIRE(num == 0);
- num = bx::strlncpy(dst, 3, "blah", 3);
- REQUIRE(0 == bx::strncmp(dst, "bl") );
+ num = bx::strCopy(dst, 3, "blah", 3);
+ REQUIRE(0 == bx::strCmp(dst, "bl") );
REQUIRE(num == 2);
- num = bx::strlncpy(dst, sizeof(dst), "blah", 3);
- REQUIRE(0 == bx::strncmp(dst, "bla") );
+ num = bx::strCopy(dst, sizeof(dst), "blah", 3);
+ REQUIRE(0 == bx::strCmp(dst, "bla") );
REQUIRE(num == 3);
- num = bx::strlncpy(dst, sizeof(dst), "blah");
- REQUIRE(0 == bx::strncmp(dst, "blah") );
+ num = bx::strCopy(dst, sizeof(dst), "blah");
+ REQUIRE(0 == bx::strCmp(dst, "bl", 2) );
+ REQUIRE(0 == bx::strCmp(dst, "blah") );
REQUIRE(num == 4);
}
-TEST_CASE("strlncat", "")
+TEST_CASE("strCat", "")
{
char dst[128] = { '\0' };
- REQUIRE(0 == bx::strlncat(dst, 1, "cat") );
+ REQUIRE(0 == bx::strCat(dst, 1, "cat") );
- REQUIRE(4 == bx::strlncpy(dst, 5, "copy") );
- REQUIRE(3 == bx::strlncat(dst, 8, "cat") );
- REQUIRE(0 == bx::strncmp(dst, "copycat") );
+ REQUIRE(4 == bx::strCopy(dst, 5, "copy") );
+ REQUIRE(3 == bx::strCat(dst, 8, "cat") );
+ REQUIRE(0 == bx::strCmp(dst, "copycat") );
+ REQUIRE(0 == bx::strCmp(dst, "copy", 4) );
- REQUIRE(1 == bx::strlncat(dst, BX_COUNTOF(dst), "------", 1) );
- REQUIRE(3 == bx::strlncat(dst, BX_COUNTOF(dst), "cat") );
- REQUIRE(0 == bx::strncmp(dst, "copycat-cat") );
+ REQUIRE(1 == bx::strCat(dst, BX_COUNTOF(dst), "------", 1) );
+ REQUIRE(3 == bx::strCat(dst, BX_COUNTOF(dst), "cat") );
+ REQUIRE(0 == bx::strCmp(dst, "copycat-cat") );
}
-TEST_CASE("strincmp", "")
+TEST_CASE("strCmp", "")
{
- REQUIRE(0 == bx::strincmp("test", "test") );
- REQUIRE(0 == bx::strincmp("test", "testestes", 4) );
- REQUIRE(0 == bx::strincmp("testestes", "test", 4) );
- REQUIRE(0 != bx::strincmp("preprocess", "platform") );
+ REQUIRE(0 != bx::strCmp("meh", "meh/") );
+}
+
+TEST_CASE("strCmpI", "")
+{
+ REQUIRE(0 == bx::strCmpI("test", "test") );
+ REQUIRE(0 == bx::strCmpI("test", "testestes", 4) );
+ REQUIRE(0 == bx::strCmpI("testestes", "test", 4) );
+ REQUIRE(0 != bx::strCmpI("preprocess", "platform") );
const char* abvgd = "abvgd";
const char* abvgx = "abvgx";
const char* empty = "";
- REQUIRE(0 == bx::strincmp(abvgd, abvgd) );
- REQUIRE(0 == bx::strincmp(abvgd, abvgx, 4) );
+ REQUIRE(0 == bx::strCmpI(abvgd, abvgd) );
+ REQUIRE(0 == bx::strCmpI(abvgd, abvgx, 4) );
+ REQUIRE(0 == bx::strCmpI(empty, empty) );
- REQUIRE(0 > bx::strincmp(abvgd, abvgx) );
- REQUIRE(0 > bx::strincmp(empty, abvgd) );
+ REQUIRE(0 > bx::strCmpI(abvgd, abvgx) );
+ REQUIRE(0 > bx::strCmpI(empty, abvgd) );
- REQUIRE(0 < bx::strincmp(abvgx, abvgd) );
- REQUIRE(0 < bx::strincmp(abvgd, empty) );
+ REQUIRE(0 < bx::strCmpI(abvgx, abvgd) );
+ REQUIRE(0 < bx::strCmpI(abvgd, empty) );
}
-TEST_CASE("strnchr", "")
+TEST_CASE("strCmpV", "")
{
- const char* test = "test";
- REQUIRE(NULL == bx::strnchr(test, 's', 0) );
- REQUIRE(NULL == bx::strnchr(test, 's', 2) );
- REQUIRE(&test[2] == bx::strnchr(test, 's') );
+ REQUIRE(0 == bx::strCmpV("test", "test") );
+ REQUIRE(0 == bx::strCmpV("test", "testestes", 4) );
+ REQUIRE(0 == bx::strCmpV("testestes", "test", 4) );
+ REQUIRE(0 != bx::strCmpV("preprocess", "platform") );
+
+ const char* abvgd = "abvgd";
+ const char* abvgx = "abvgx";
+ const char* empty = "";
+ REQUIRE(0 == bx::strCmpV(abvgd, abvgd) );
+ REQUIRE(0 == bx::strCmpV(abvgd, abvgx, 4) );
+ REQUIRE(0 == bx::strCmpV(empty, empty) );
+
+ REQUIRE(0 > bx::strCmpV(abvgd, abvgx) );
+ REQUIRE(0 > bx::strCmpV(empty, abvgd) );
+
+ REQUIRE(0 < bx::strCmpV(abvgx, abvgd) );
+ REQUIRE(0 < bx::strCmpV(abvgd, empty) );
+}
+
+static int32_t strCmpV(const void* _lhs, const void* _rhs)
+{
+ const char* lhs = *(const char**)_lhs;
+ const char* rhs = *(const char**)_rhs;
+ int32_t result = bx::strCmpV(lhs, rhs);
+ return result;
+}
+
+TEST_CASE("strCmpV sort", "")
+{
+ const char* test[] =
+ {
+ "test_1.txt",
+ "test_10.txt",
+ "test_100.txt",
+ "test_15.txt",
+ "test_11.txt",
+ "test_23.txt",
+ "test_3.txt",
+ };
+
+ const char* expected[] =
+ {
+ "test_1.txt",
+ "test_3.txt",
+ "test_10.txt",
+ "test_11.txt",
+ "test_15.txt",
+ "test_23.txt",
+ "test_100.txt",
+ };
+
+ BX_STATIC_ASSERT(BX_COUNTOF(test) == BX_COUNTOF(expected) );
+
+ bx::quickSort(test, BX_COUNTOF(test), sizeof(const char*), strCmpV);
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(test); ++ii)
+ {
+ REQUIRE(0 == bx::strCmp(test[ii], expected[ii]) );
+ }
}
-TEST_CASE("strnrchr", "")
+TEST_CASE("strRFind", "")
{
const char* test = "test";
- REQUIRE(NULL == bx::strnrchr(test, 's', 0) );
- REQUIRE(NULL == bx::strnrchr(test, 's', 1) );
- REQUIRE(&test[2] == bx::strnrchr(test, 's') );
+ REQUIRE(NULL == bx::strRFind(bx::StringView(test, 0), 's') );
+ REQUIRE(NULL == bx::strRFind(bx::StringView(test, 1), 's') );
+ REQUIRE(&test[2] == bx::strRFind(test, 's') );
}
-TEST_CASE("stristr", "")
+TEST_CASE("strFindI", "")
{
const char* test = "The Quick Brown Fox Jumps Over The Lazy Dog.";
- REQUIRE(NULL == bx::stristr(test, "quick", 8) );
- REQUIRE(NULL == bx::stristr(test, "quick1") );
- REQUIRE(&test[4] == bx::stristr(test, "quick", 9) );
- REQUIRE(&test[4] == bx::stristr(test, "quick") );
+ REQUIRE(NULL == bx::strFindI(bx::StringView(test, 8), "quick") );
+ REQUIRE(NULL == bx::strFindI(test, "quick1") );
+ REQUIRE(&test[4] == bx::strFindI(bx::StringView(test, 9), "quick") );
+ REQUIRE(&test[4] == bx::strFindI(test, "quick") );
}
-TEST_CASE("strnstr", "")
+TEST_CASE("strFind", "")
{
- const char* test = "The Quick Brown Fox Jumps Over The Lazy Dog.";
+ {
+ const char* test = "test";
- REQUIRE(NULL == bx::strnstr(test, "quick", 8) );
- REQUIRE(NULL == bx::strnstr(test, "quick1") );
- REQUIRE(NULL == bx::strnstr(test, "quick", 9) );
- REQUIRE(NULL == bx::strnstr(test, "quick") );
+ REQUIRE(NULL == bx::strFind(bx::StringView(test, 0), 's') );
+ REQUIRE(NULL == bx::strFind(bx::StringView(test, 2), 's') );
+ REQUIRE(&test[2] == bx::strFind(test, 's') );
+ }
- REQUIRE(NULL == bx::strnstr(test, "Quick", 8) );
- REQUIRE(NULL == bx::strnstr(test, "Quick1") );
- REQUIRE(&test[4] == bx::strnstr(test, "Quick", 9) );
- REQUIRE(&test[4] == bx::strnstr(test, "Quick") );
+ {
+ const char* test = "The Quick Brown Fox Jumps Over The Lazy Dog.";
+
+ REQUIRE(NULL == bx::strFind(bx::StringView(test, 8), "quick") );
+ REQUIRE(NULL == bx::strFind(test, "quick1") );
+ REQUIRE(NULL == bx::strFind(bx::StringView(test, 9), "quick") );
+ REQUIRE(NULL == bx::strFind(test, "quick") );
+
+ REQUIRE(NULL == bx::strFind(bx::StringView(test, 8), "Quick") );
+ REQUIRE(NULL == bx::strFind(test, "Quick1") );
+ REQUIRE(&test[4] == bx::strFind(bx::StringView(test, 9), "Quick") );
+ REQUIRE(&test[4] == bx::strFind(test, "Quick") );
+
+ REQUIRE(NULL == bx::strFind("vgd", 'a') );
+ }
}
template<typename Ty>
@@ -134,8 +210,8 @@ static bool testToString(Ty _value, const char* _expected)
{
char tmp[1024];
int32_t num = bx::toString(tmp, BX_COUNTOF(tmp), _value);
- int32_t len = (int32_t)bx::strnlen(_expected);
- if (0 == bx::strncmp(tmp, _expected)
+ int32_t len = (int32_t)bx::strLen(_expected);
+ if (0 == bx::strCmp(tmp, _expected)
&& num == len)
{
return true;
@@ -178,6 +254,86 @@ TEST_CASE("toString double", "")
REQUIRE(testToString(1231231.23, "1231231.23") );
REQUIRE(testToString(0.000000000123123, "1.23123e-10") );
REQUIRE(testToString(0.0000000001, "1e-10") );
+ REQUIRE(testToString(-270.000000, "-270.0") );
+}
+
+static bool testFromString(double _value, const char* _input)
+{
+ char tmp[1024];
+ bx::toString(tmp, BX_COUNTOF(tmp), _value);
+
+ double lhs;
+ bx::fromString(&lhs, tmp);
+
+ double rhs;
+ bx::fromString(&rhs, _input);
+
+ if (lhs == rhs)
+ {
+ return true;
+ }
+
+ printf("result '%f', input '%s'\n", _value, _input);
+ return false;
+}
+
+TEST_CASE("fromString double", "")
+{
+ REQUIRE(testFromString(0.0, "0.0") );
+ REQUIRE(testFromString(-0.0, "-0.0") );
+ REQUIRE(testFromString(1.0, "1.0") );
+ REQUIRE(testFromString(-1.0, "-1.0") );
+ REQUIRE(testFromString(1.2345, "1.2345") );
+ REQUIRE(testFromString(1.2345678, "1.2345678") );
+ REQUIRE(testFromString(0.123456789012, "0.123456789012") );
+ REQUIRE(testFromString(1234567.8, "1234567.8") );
+ REQUIRE(testFromString(-79.39773355813419, "-79.39773355813419") );
+ REQUIRE(testFromString(0.000001, "0.000001") );
+ REQUIRE(testFromString(0.0000001, "1e-7") );
+ REQUIRE(testFromString(1e30, "1e30") );
+ REQUIRE(testFromString(1.234567890123456e30, "1.234567890123456e30") );
+ REQUIRE(testFromString(-5e-324, "-5e-324") );
+ REQUIRE(testFromString(2.225073858507201e-308, "2.225073858507201e-308") );
+ REQUIRE(testFromString(2.2250738585072014e-308, "2.2250738585072014e-308") );
+ REQUIRE(testFromString(1.7976931348623157e308, "1.7976931348623157e308") );
+ REQUIRE(testFromString(0.00000123123123, "0.00000123123123") );
+ REQUIRE(testFromString(0.000000123123123, "1.23123123e-7") );
+ REQUIRE(testFromString(123123.123, "123123.123") );
+ REQUIRE(testFromString(1231231.23, "1231231.23") );
+ REQUIRE(testFromString(0.000000000123123, "1.23123e-10") );
+ REQUIRE(testFromString(0.0000000001, "1e-10") );
+ REQUIRE(testFromString(-270.000000, "-270.0") );
+}
+
+static bool testFromString(int32_t _value, const char* _input)
+{
+ char tmp[1024];
+ bx::toString(tmp, BX_COUNTOF(tmp), _value);
+
+ double lhs;
+ bx::fromString(&lhs, tmp);
+
+ double rhs;
+ bx::fromString(&rhs, _input);
+
+ if (lhs == rhs)
+ {
+ return true;
+ }
+
+ printf("result '%d', input '%s'\n", _value, _input);
+ return false;
+}
+
+TEST_CASE("fromString int32_t", "")
+{
+ REQUIRE(testFromString(1389, "1389") );
+ REQUIRE(testFromString(1389, " 1389") );
+ REQUIRE(testFromString(1389, "+1389") );
+ REQUIRE(testFromString(-1389, "-1389") );
+ REQUIRE(testFromString(-1389, " -1389") );
+ REQUIRE(testFromString(555333, "555333") );
+ REQUIRE(testFromString(-21, "-021") );
}
TEST_CASE("StringView", "")
@@ -185,7 +341,7 @@ TEST_CASE("StringView", "")
bx::StringView sv("test");
REQUIRE(4 == sv.getLength() );
- bx::CrtAllocator crt;
+ bx::DefaultAllocator crt;
g_allocator = &crt;
typedef bx::StringT<&g_allocator> String;
@@ -196,10 +352,10 @@ TEST_CASE("StringView", "")
st.append("test");
REQUIRE(8 == st.getLength() );
- st.append("test", 2);
+ st.append(bx::StringView("test", 2) );
REQUIRE(10 == st.getLength() );
- REQUIRE(0 == bx::strncmp(st.getPtr(), "testtestte") );
+ REQUIRE(0 == bx::strCmp(st.getPtr(), "testtestte") );
st.clear();
REQUIRE(0 == st.getLength() );
@@ -211,3 +367,25 @@ TEST_CASE("StringView", "")
sv.clear();
REQUIRE(0 == sv.getLength() );
}
+
+TEST_CASE("Trim", "")
+{
+ REQUIRE(0 == bx::strCmp(bx::strLTrim("abvgd", "ab"), "vgd") );
+ REQUIRE(0 == bx::strCmp(bx::strLTrim("abvgd", "vagbd"), "") );
+ REQUIRE(0 == bx::strCmp(bx::strLTrim("abvgd", "vgd"), "abvgd") );
+ REQUIRE(0 == bx::strCmp(bx::strLTrim("/555333/podmac/", "/"), "555333/podmac/") );
+
+ REQUIRE(0 == bx::strCmp(bx::strRTrim("abvgd", "vagbd"), "") );
+ REQUIRE(0 == bx::strCmp(bx::strRTrim("abvgd", "abv"), "abvgd") );
+ REQUIRE(0 == bx::strCmp(bx::strRTrim("/555333/podmac/", "/"), "/555333/podmac") );
+
+ REQUIRE(0 == bx::strCmp(bx::strTrim("abvgd", "da"), "bvg") );
+ REQUIRE(0 == bx::strCmp(bx::strTrim("<1389>", "<>"), "1389") );
+ REQUIRE(0 == bx::strCmp(bx::strTrim("/555333/podmac/", "/"), "555333/podmac") );
+
+ REQUIRE(0 == bx::strCmp(bx::strTrim("abvgd", ""), "abvgd") );
+ REQUIRE(0 == bx::strCmp(bx::strTrim(" \t a b\tv g d \t ", " \t"), "a b\tv g d") );
+
+ bx::FilePath uri("/555333/podmac/");
+ REQUIRE(0 == bx::strCmp(bx::strTrim(uri.getPath(), "/"), "555333/podmac") );
+}
diff --git a/3rdparty/bx/tests/thread_test.cpp b/3rdparty/bx/tests/thread_test.cpp
index 8d099311835..713781956fb 100644
--- a/3rdparty/bx/tests/thread_test.cpp
+++ b/3rdparty/bx/tests/thread_test.cpp
@@ -6,17 +6,37 @@
#include "test.h"
#include <bx/thread.h>
-int32_t threadExit0(void*)
+bx::DefaultAllocator s_allocator;
+bx::MpScUnboundedBlockingQueue<void> s_mpsc(&s_allocator);
+
+int32_t threadExit0(bx::Thread* _thread, void*)
{
- return 0;
+ _thread->pop();
+
+ s_mpsc.push(reinterpret_cast<void*>(uintptr_t(0x1300) ) );
+
+ return bx::kExitSuccess;
+}
+
+int32_t threadExit1(bx::Thread* _thread, void*)
+{
+ BX_UNUSED(_thread);
+
+ s_mpsc.push(reinterpret_cast<void*>(uintptr_t(0x89) ) );
+
+ return bx::kExitFailure;
}
-int32_t threadExit1(void*)
+TEST_CASE("Semaphore", "")
{
- return 1;
+ bx::Semaphore sem;
+ REQUIRE(!sem.wait(10) );
+
+ sem.post(1);
+ REQUIRE(sem.wait() );
}
-TEST_CASE("thread", "")
+TEST_CASE("Thread", "")
{
bx::Thread th;
@@ -24,6 +44,7 @@ TEST_CASE("thread", "")
th.init(threadExit0);
REQUIRE(th.isRunning() );
+ th.push(NULL);
th.shutdown();
REQUIRE(!th.isRunning() );
@@ -36,3 +57,13 @@ TEST_CASE("thread", "")
REQUIRE(!th.isRunning() );
REQUIRE(th.getExitCode() == 1);
}
+
+TEST_CASE("MpScUnboundedBlockingQueue", "")
+{
+ void* p0 = s_mpsc.pop();
+ void* p1 = s_mpsc.pop();
+
+ uintptr_t result = uintptr_t(p0) | uintptr_t(p1);
+
+ REQUIRE(result == 0x1389);
+}
diff --git a/3rdparty/bx/tests/tokenizecmd_test.cpp b/3rdparty/bx/tests/tokenizecmd_test.cpp
index d1495b28796..fece7ea2f25 100644
--- a/3rdparty/bx/tests/tokenizecmd_test.cpp
+++ b/3rdparty/bx/tests/tokenizecmd_test.cpp
@@ -15,12 +15,24 @@ TEST_CASE("commandLine", "")
"--long",
"--platform",
"x",
+ "--num", "1389",
+ "--foo",
+ "--", // it should not parse arguments after argument terminator
+ "--bar",
};
bx::CommandLine cmdLine(BX_COUNTOF(args), args);
- REQUIRE(cmdLine.hasArg("long") );
- REQUIRE(cmdLine.hasArg('s') );
+ REQUIRE( cmdLine.hasArg("long") );
+ REQUIRE( cmdLine.hasArg('s') );
+
+ int32_t num;
+ REQUIRE(cmdLine.hasArg(num, '\0', "num") );
+ REQUIRE(1389 == num);
+
+ // test argument terminator
+ REQUIRE( cmdLine.hasArg("foo") );
+ REQUIRE(!cmdLine.hasArg("bar") );
// non-existing argument
REQUIRE(!cmdLine.hasArg('x') );
@@ -46,7 +58,7 @@ static bool test(const char* _input, int32_t _argc, ...)
for (int32_t ii = 0; ii < _argc; ++ii)
{
const char* arg = va_arg(argList, const char*);
- if (0 != bx::strncmp(argv[ii], arg) )
+ if (0 != bx::strCmp(argv[ii], arg) )
{
return false;
}
diff --git a/3rdparty/bx/tests/url_test.cpp b/3rdparty/bx/tests/url_test.cpp
new file mode 100644
index 00000000000..504f4d2bc4d
--- /dev/null
+++ b/3rdparty/bx/tests/url_test.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "test.h"
+#include <bx/string.h>
+#include <bx/url.h>
+
+struct UrlTest
+{
+ bool result;
+ const char* url;
+ const char* tokens[bx::UrlView::Count];
+};
+
+static const UrlTest s_urlTest[] =
+{
+ { true
+ , "scheme://username:password@host.rs:80/this/is/path/index.php?query=\"value\"#fragment",
+ { "scheme", "username", "password", "host.rs", "80", "/this/is/path/index.php", "query=\"value\"", "fragment" }
+ },
+ { true
+ , "scheme://host.rs/",
+ { "scheme", "", "", "host.rs", "", "/", "", "" },
+ },
+ { true
+ , "scheme://host.rs:1389/",
+ { "scheme", "", "", "host.rs", "1389", "/", "", "" },
+ },
+ { true
+ , "host.rs/abvgd.html",
+ { "", "", "", "host.rs", "", "/abvgd.html", "", "" },
+ },
+ { true
+ , "https://192.168.0.1:8080/",
+ { "https", "", "", "192.168.0.1", "8080", "/", "", "" },
+ },
+
+ { true
+ , "file:///d:/tmp/archive.tar.gz",
+ { "file", "", "", "", "", "/d:/tmp/archive.tar.gz", "", "" },
+ },
+};
+
+TEST_CASE("tokenizeUrl", "")
+{
+ bx::UrlView url;
+
+ for (uint32_t ii = 0; ii < BX_COUNTOF(s_urlTest); ++ii)
+ {
+ const UrlTest& urlTest = s_urlTest[ii];
+
+ bool result = url.parse(urlTest.url);
+ REQUIRE(urlTest.result == result);
+
+ if (result)
+ {
+ for (uint32_t token = 0; token < bx::UrlView::Count; ++token)
+ {
+// char tmp[1024];
+// strCopy(tmp, BX_COUNTOF(tmp), url.get(bx::UrlView::Enum(token)) );
+// printf("`%s`, expected: `%s`\n", tmp, urlTest.tokens[token]);
+
+ REQUIRE(0 == bx::strCmp(urlTest.tokens[token], url.get(bx::UrlView::Enum(token)) ) );
+ }
+ }
+ }
+}
diff --git a/3rdparty/bx/tests/vsnprintf_test.cpp b/3rdparty/bx/tests/vsnprintf_test.cpp
index 12aea7bbb25..8498ec39096 100644
--- a/3rdparty/bx/tests/vsnprintf_test.cpp
+++ b/3rdparty/bx/tests/vsnprintf_test.cpp
@@ -20,12 +20,12 @@ TEST_CASE("vsnprintf truncated", "Truncated output buffer.")
char buffer[7];
REQUIRE(10 == bx::snprintf(buffer, BX_COUNTOF(buffer), "Ten chars!") );
- REQUIRE(0 == bx::strncmp(buffer, "Ten ch") );
+ REQUIRE(0 == bx::strCmp(buffer, "Ten ch") );
}
static bool test(const char* _expected, const char* _format, ...)
{
- int32_t max = (int32_t)bx::strnlen(_expected) + 1;
+ int32_t max = (int32_t)bx::strLen(_expected) + 1;
char* temp = (char*)alloca(max);
va_list argList;
@@ -35,7 +35,7 @@ static bool test(const char* _expected, const char* _format, ...)
bool result = true
&& len == max-1
- && 0 == bx::strncmp(_expected, temp)
+ && 0 == bx::strCmp(_expected, temp)
;
if (!result)
diff --git a/3rdparty/bx/tools/bin/darwin/genie b/3rdparty/bx/tools/bin/darwin/genie
index 48552bab3e7..aa81010239b 100755
--- a/3rdparty/bx/tools/bin/darwin/genie
+++ b/3rdparty/bx/tools/bin/darwin/genie
Binary files differ
diff --git a/3rdparty/bx/tools/bin/linux/genie b/3rdparty/bx/tools/bin/linux/genie
index 021bc6ea4d2..6ad828c40ae 100755
--- a/3rdparty/bx/tools/bin/linux/genie
+++ b/3rdparty/bx/tools/bin/linux/genie
Binary files differ
diff --git a/3rdparty/bx/tools/bin/windows/genie.exe b/3rdparty/bx/tools/bin/windows/genie.exe
index b70a00cb408..71dbb2e11e9 100644
--- a/3rdparty/bx/tools/bin/windows/genie.exe
+++ b/3rdparty/bx/tools/bin/windows/genie.exe
Binary files differ
diff --git a/3rdparty/bx/tools/bin2c/bin2c.cpp b/3rdparty/bx/tools/bin2c/bin2c.cpp
index d33d9204bc9..414bce62a87 100644
--- a/3rdparty/bx/tools/bin2c/bin2c.cpp
+++ b/3rdparty/bx/tools/bin2c/bin2c.cpp
@@ -7,7 +7,7 @@
#include <vector>
#include <bx/commandline.h>
-#include <bx/crtimpl.h>
+#include <bx/file.h>
#include <bx/string.h>
class Bin2cWriter : public bx::WriterI
@@ -23,7 +23,7 @@ public:
{
}
- virtual int32_t write(const void* _data, int32_t _size, bx::Error* /*_err*/ = NULL) BX_OVERRIDE
+ virtual int32_t write(const void* _data, int32_t _size, bx::Error* /*_err*/ = NULL) override
{
const char* data = (const char*)_data;
m_buffer.insert(m_buffer.end(), data, data+_size);
@@ -59,7 +59,7 @@ public:
ascii[asciiPos] = '\0';
bx::writePrintf(m_writer, "\t" HEX_DUMP_FORMAT "// %s\n", hex, ascii);
data += asciiPos;
- hexPos = 0;
+ hexPos = 0;
asciiPos = 0;
}
}
@@ -80,7 +80,6 @@ public:
}
bx::WriterI* m_writer;
- std::string m_filePath;
std::string m_name;
typedef std::vector<uint8_t> Buffer;
Buffer m_buffer;
@@ -88,18 +87,20 @@ public:
void help(const char* _error = NULL)
{
+ bx::WriterI* stdOut = bx::getStdOut();
+
if (NULL != _error)
{
- fprintf(stderr, "Error:\n%s\n\n", _error);
+ bx::writePrintf(stdOut, "Error:\n%s\n\n", _error);
}
- fprintf(stderr
+ bx::writePrintf(stdOut
, "bin2c, binary to C\n"
"Copyright 2011-2017 Branimir Karadzic. All rights reserved.\n"
"License: https://github.com/bkaradzic/bx#license-bsd-2-clause\n\n"
);
- fprintf(stderr
+ bx::writePrintf(stdOut
, "Usage: bin2c -f <in> -o <out> -n <name>\n"
"\n"
@@ -121,21 +122,21 @@ int main(int _argc, const char* _argv[])
if (cmdLine.hasArg('h', "help") )
{
help();
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
const char* filePath = cmdLine.findOption('f');
if (NULL == filePath)
{
help("Input file name must be specified.");
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
const char* outFilePath = cmdLine.findOption('o');
if (NULL == outFilePath)
{
help("Output file name must be specified.");
- return EXIT_FAILURE;
+ return bx::kExitFailure;
}
const char* name = cmdLine.findOption('n');
@@ -147,14 +148,16 @@ int main(int _argc, const char* _argv[])
void* data = NULL;
uint32_t size = 0;
- bx::CrtFileReader fr;
+ bx::FileReader fr;
if (bx::open(&fr, filePath) )
{
size = uint32_t(bx::getSize(&fr) );
- data = malloc(size);
+
+ bx::DefaultAllocator allocator;
+ data = BX_ALLOC(&allocator, size);
bx::read(&fr, data, size);
- bx::CrtFileWriter fw;
+ bx::FileWriter fw;
if (bx::open(&fw, outFilePath) )
{
Bin2cWriter writer(&fw, name);
@@ -163,7 +166,7 @@ int main(int _argc, const char* _argv[])
bx::close(&fw);
}
- free(data);
+ BX_FREE(&allocator, data);
}
return 0;
diff --git a/3rdparty/genie/LICENSE b/3rdparty/genie/LICENSE
index 5d13812507e..a48450143c5 100644
--- a/3rdparty/genie/LICENSE
+++ b/3rdparty/genie/LICENSE
@@ -5,7 +5,7 @@ Copyright (c) 2014-2016 Branimir Karadžić, Neil Richardson, Mike Popoloski,
Drew Solomon, Ted de Munnik, Miodrag Milanović, Brett Vickers, Bill Freist,
Terry Hendrix II, Ryan Juckett, Andrew Johnson, Johan Sköld,
Alastair Murray, Patrick Munns, Jan-Eric Duden, Phil Stevens, Stuart Carnie,
-Nikolay Aleksiev, Jon Olson.
+Nikolay Aleksiev, Jon Olson, Mike Fitzgerald.
All rights reserved.
https://github.com/bkaradzic/genie
diff --git a/3rdparty/genie/README.md b/3rdparty/genie/README.md
index 0e82eba9a17..82f5a7d0060 100644
--- a/3rdparty/genie/README.md
+++ b/3rdparty/genie/README.md
@@ -21,7 +21,7 @@ Download (stable)
[![Build Status](https://travis-ci.org/bkaradzic/GENie.svg?branch=master)](https://travis-ci.org/bkaradzic/GENie)
- version 807 (commit 83efdca3c3c63cb47bd1b4daa8b73d526841f900)
+ version 849 (commit f3788f8531e75ddde92df41ecc1ccdb34f1d75ff)
Linux:
https://github.com/bkaradzic/bx/raw/master/tools/bin/linux/genie
@@ -48,8 +48,8 @@ Documentation
History
-------
-Initial version of **GENie** is fork of Premake 4.4 beta 5, and there is no
-intention to keep it compatible with it.
+Initial version of **GENie** is [fork](https://github.com/bkaradzic/GENie/blob/c7e7da4aafe4210aa014a8ae8f6b01ce1d6802f0/README.md#why-fork)
+of Premake 4.4 beta 5, and there is no intention to keep it compatible with it.
## Changelog (since fork)
@@ -115,6 +115,8 @@ intention to keep it compatible with it.
- Added vs2017 support.
- Removed vs2008 support.
- Added `removeplatforms` that removes VS build target platforms.
+ - Added `PedanticWarnings` flag.
+ - Added `ObjcARC` flag to enable automatic reference counting for Objective-C(++).
Debugging GENie scripts
-----------------------
@@ -181,7 +183,7 @@ PS3.
Drew Solomon, Ted de Munnik, Miodrag Milanović, Brett Vickers, Bill Freist,
Terry Hendrix II, Ryan Juckett, Andrew Johnson, Johan Sköld,
Alastair Murray, Patrick Munns, Jan-Eric Duden, Phil Stevens, Stuart Carnie,
- Nikolay Aleksiev, Jon Olson.
+ Nikolay Aleksiev, Jon Olson, Mike Fitzgerald.
All rights reserved.
https://github.com/bkaradzic/genie
diff --git a/3rdparty/genie/build/gmake.darwin/genie.make b/3rdparty/genie/build/gmake.darwin/genie.make
index 1da9d12815c..459bbe772f2 100644
--- a/3rdparty/genie/build/gmake.darwin/genie.make
+++ b/3rdparty/genie/build/gmake.darwin/genie.make
@@ -47,7 +47,7 @@ ifeq ($(config),release)
TARGETDIR = ../../bin/darwin
override TARGET = $(TARGETDIR)/genie
DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX
- INCLUDES += -I../../src/host/lua-5.3.0/src
+ INCLUDES += -I"../../src/host/lua-5.3.0/src"
INCLUDES +=
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES)
ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -mmacosx-version-min=10.4
@@ -131,7 +131,7 @@ ifeq ($(config),debug)
TARGETDIR = ../../bin/darwin
override TARGET = $(TARGETDIR)/genie
DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX
- INCLUDES += -I../../src/host/lua-5.3.0/src
+ INCLUDES += -I"../../src/host/lua-5.3.0/src"
INCLUDES +=
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES)
ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g -mmacosx-version-min=10.4
@@ -216,7 +216,7 @@ ifeq ($(config),releaseuniv32)
TARGETDIR = ../../bin/darwin
override TARGET = $(TARGETDIR)/genie
DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX
- INCLUDES += -I../../src/host/lua-5.3.0/src
+ INCLUDES += -I"../../src/host/lua-5.3.0/src"
INCLUDES +=
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES)
ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -arch i386 -arch ppc -mmacosx-version-min=10.4
@@ -301,7 +301,7 @@ ifeq ($(config),debuguniv32)
TARGETDIR = ../../bin/darwin
override TARGET = $(TARGETDIR)/genie
DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX
- INCLUDES += -I../../src/host/lua-5.3.0/src
+ INCLUDES += -I"../../src/host/lua-5.3.0/src"
INCLUDES +=
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES)
ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g -arch i386 -arch ppc -mmacosx-version-min=10.4
@@ -389,7 +389,7 @@ RESOURCES := \
.PHONY: clean prebuild prelink
-all: $(OBJDIRS) prebuild prelink $(TARGET) | $(TARGETDIR)
+all: $(OBJDIRS) $(TARGETDIR) prebuild prelink $(TARGET)
@:
$(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(EXTERNAL_LIBS) $(RESOURCES) | $(TARGETDIR) $(OBJDIRS)
diff --git a/3rdparty/genie/build/gmake.linux/genie.make b/3rdparty/genie/build/gmake.linux/genie.make
index 04a9ebfc00a..859189868cc 100644
--- a/3rdparty/genie/build/gmake.linux/genie.make
+++ b/3rdparty/genie/build/gmake.linux/genie.make
@@ -47,7 +47,7 @@ ifeq ($(config),release)
TARGETDIR = ../../bin/linux
override TARGET = $(TARGETDIR)/genie
DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN
- INCLUDES += -I../../src/host/lua-5.3.0/src
+ INCLUDES += -I"../../src/host/lua-5.3.0/src"
INCLUDES +=
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES)
ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os
@@ -131,7 +131,7 @@ ifeq ($(config),debug)
TARGETDIR = ../../bin/linux
override TARGET = $(TARGETDIR)/genie
DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN
- INCLUDES += -I../../src/host/lua-5.3.0/src
+ INCLUDES += -I"../../src/host/lua-5.3.0/src"
INCLUDES +=
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES)
ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g
@@ -219,7 +219,7 @@ RESOURCES := \
.PHONY: clean prebuild prelink
-all: $(OBJDIRS) prebuild prelink $(TARGET) | $(TARGETDIR)
+all: $(OBJDIRS) $(TARGETDIR) prebuild prelink $(TARGET)
@:
$(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(EXTERNAL_LIBS) $(RESOURCES) | $(TARGETDIR) $(OBJDIRS)
diff --git a/3rdparty/genie/build/gmake.windows/genie.make b/3rdparty/genie/build/gmake.windows/genie.make
index f11ae3b69b5..a29da3d94e9 100644
--- a/3rdparty/genie/build/gmake.windows/genie.make
+++ b/3rdparty/genie/build/gmake.windows/genie.make
@@ -47,7 +47,7 @@ ifeq ($(config),release)
TARGETDIR = ../../bin/windows
override TARGET = $(TARGETDIR)/genie.exe
DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE
- INCLUDES += -I../../src/host/lua-5.3.0/src
+ INCLUDES += -I"../../src/host/lua-5.3.0/src"
INCLUDES +=
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES)
ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os
@@ -131,7 +131,7 @@ ifeq ($(config),debug)
TARGETDIR = ../../bin/windows
override TARGET = $(TARGETDIR)/genie.exe
DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE
- INCLUDES += -I../../src/host/lua-5.3.0/src
+ INCLUDES += -I"../../src/host/lua-5.3.0/src"
INCLUDES +=
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES)
ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g
@@ -219,7 +219,7 @@ RESOURCES := \
.PHONY: clean prebuild prelink
-all: $(OBJDIRS) prebuild prelink $(TARGET) | $(TARGETDIR)
+all: $(OBJDIRS) $(TARGETDIR) prebuild prelink $(TARGET)
@:
$(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(EXTERNAL_LIBS) $(RESOURCES) | $(TARGETDIR) $(OBJDIRS)
diff --git a/3rdparty/genie/docs/scripting-reference.md b/3rdparty/genie/docs/scripting-reference.md
index 0d2b5579225..74a3f08d0d0 100644
--- a/3rdparty/genie/docs/scripting-reference.md
+++ b/3rdparty/genie/docs/scripting-reference.md
@@ -2,7 +2,7 @@
## Table of Contents
-* Predefined Variables
+* Predefined variables
* [_ACTION](#_action)
* [_ARGS](#_args)
* [_OPTIONS](#_options)
@@ -10,7 +10,7 @@
* [_PREMAKE_VERSION](#_premake_version)
* [_SCRIPT](#_script)
* [_WORKING_DIR](#_working_dir)
-* Script Functions
+* Build script functions
* [buildaction](#buildactionaction)
* [buildoptions](#buildoptionsoptions)
* [configuration](#configurationkeywords)
@@ -25,7 +25,7 @@
* [files](#filesfiles)
* [flags](#flagsflags)
* [framework](#frameworkversion)
- * [iif](#iifcondition-trueval-falseval)
+ * [group](#groupname)
* [imageoptions](#imageoptionsoptions)
* [imagepath](#imagepathpath)
* [implibdir](#implibdir)
@@ -41,10 +41,39 @@
* [linkoptions](#linkoptionsoptions)
* [links](#linksreferences)
* [location](#locationpath)
+ * [messageskip](#messageskipoptions)
* [newaction](#newactiondescription)
* [newoption](#newoptionsdescription)
* [nopch](#nopch)
* [objdir](#objdirpath)
+ * [pchheader](#pchheaderfile)
+ * [pchsource](#pchsourcefile)
+ * [platforms](#platformsidentifiers)
+ * [postbuildcommands](#postbuildcommandscommands)
+ * [postcompiletasks](#postcompiletaskstasks)
+ * [prebuildcommands](#prebuildcommandscommands)
+ * [prelinkcommands](#prelinkcommandscommands)
+ * [project](#projectname)
+ * [removefiles](#removefilesfiles)
+ * [removeflags](#removeflagsflags)
+ * [removelinks](#removelinkslinks)
+ * [removeplatforms](#removeplatformsplatforms)
+ * [resdefines](#resdefinessymbols)
+ * [resincludedirs](#resincludedirspaths)
+ * [resoptions](#resoptionsoptions)
+ * [solution](#solutionname)
+ * [startproject](#startprojectname)
+ * [targetdir](#targetdirpath)
+ * [targetextension](#targetextensionext)
+ * [targetname](#targetnamename)
+ * [targetprefix](#targetprefixprefix)
+ * [targetsubdir](#targetsubdirpath)
+ * [targetsuffix](#targetsuffixsuffix)
+ * [userincludedirs](#userincludedirspaths)
+ * [uuid](#uuidprojectuuid)
+ * [vpaths](#vpathsgroup--pattern)
+* Utility functions
+ * [iif](#iifcondition-trueval-falseval)
* [os.chdir](#oschdirpath)
* [os.copyfile](#oscopyfilesource-destination)
* [os.findlib](#osfindliblibname)
@@ -62,7 +91,7 @@
* [os.pathsearch](#ospathsearchfname-paths)
* [os.rmdir](#osrmdirpath)
* [os.stat](#osstatpath)
- * [os.uuid](#osuuid)
+ * [os.uuid](#osuuidname)
* [path.getabsolute](#pathgetabsolutepath)
* [path.getbasename](#pathgetbasenamepath)
* [path.getdirectory](#pathgetdirectorypath)
@@ -77,34 +106,14 @@
* [path.join](#pathjoinleading-trailing)
* [path.rebase](#pathrebasepath-oldbase-newbase)
* [path.translate](#pathtranslatepath-newsep)
- * [pchheader](#pchheaderfile)
- * [pchsource](#pchsourcefile)
- * [platforms](#platformsidentifiers)
- * [postbuildcommands](#postbuildcommandscommands)
- * [postcompiletasks](#postcompiletaskstasks)
- * [prebuildcommands](#prebuildcommandscommands)
- * [prelinkcommands](#prelinkcommandscommands)
* [printf](#printfformat-args)
- * [project](#projectname)
- * [resdefines](#resdefinessymbols)
- * [resincludedirs](#resincludedirspaths)
- * [resoptions](#resoptionsoptions)
- * [solution](#solutionname)
* [string.endswith](#stringendswithhaystack-needle)
* [string.explode](#stringexplodestr-pattern)
* [string.findlast](#stringfindlaststr-pattern-plain)
* [string.startswith](#stringstartswithhaystack-needle)
* [table.contains](#tablecontainsarray-value)
* [table.implode](#tableimplodearray-before-after-between)
- * [targetdir](#targetdirpath)
- * [targetextension](#targetextensionext)
- * [targetname](#targetnamename)
- * [targetprefix](#targetprefixprefix)
- * [targetsuffix](#targetsuffixsuffix)
- * [userincludedirs](#userincludedirspaths)
- * [uuid](#uuidprojectuuid)
- * [vpaths](#vpathsgroup--pattern)
-* Additional Information
+* Additional information
* [Wildcards](#wildcards)
---
@@ -184,7 +193,7 @@ Current working directory.
---
-## Script Functions
+## Build script functions
### buildaction(_action_)
Specifies what action should be performed on a set of files during compilation. Usually paired with a configuration filter to select a file set. If no build action is specified for a file, a default action will be used (chosen based on the file's extension).
@@ -214,6 +223,16 @@ Passes arguments direction to the compiler command line. Multiple calls in a pro
**Scope:** solutions, projects, configurations
+You may also use one of these functions to configure buildoptions for each individual file extension:
+
+* `buildoptions_asm` for .asm files
+* `buildoptions_c` for .c files
+* `buildoptions_cpp` for .cpp files
+* `buildoptions_objc` for .m files
+* `buildoptions_objcpp` for .mm files
+* `buildoptions_swift` for .swift files
+* `buildoptions_vala` for .vala files
+
#### Arguments
_options_ - list of compiler flags
@@ -457,7 +476,7 @@ _options_ - list of arguments
---
### excludes({_files_...})
-Removes files added with the [`files`](#files) function. Multiple calls are concatenated.
+Excludes files from the project. This is different from [removefiles](#removefilesfiles) in that it may keep them in the project (Visual Studio) while still excluding them from the build. Multiple calls are concatenated.
**Note:** May be set on the solution, project, or configuration, but only project-level file lists are currently supported.
@@ -517,6 +536,7 @@ Specifies build flags to modify the compiling or linking process. Multiple calls
#### Arguments
_flags_ - List of flag names from list below. Names are case-insensitive and ignored if not supported on a platform.
+* _C7DebugInfo_ - Enables C7 compatible debug info for MSVC builds.
* _EnableSSE, EnableSSE2, EnableAVX, EnableAVX2_ - Enable SSE/AVX instruction sets
* _ExtraWarnings_ - Sets compiler's max warning level.
* _FatalWarnings_ - Treat warnings as errors.
@@ -534,20 +554,25 @@ _flags_ - List of flag names from list below. Names are case-insensitive and ign
* _NoIncrementalLink_ - Disable support for Visual Studio's incremental linking feature.
* _NoImportLib_ - Prevent the generation of an import library for a Windows DLL.
* _NoManifest_ - Prevent the generation of a manifest for Windows executables and shared libraries.
-* _NoMinimalRebuild_ - Disable Visual Studio's minimal rebuild feature.
+* _NoMultiProcessorCompilation_ - Disables Visual Studio's and FastBuild's multiprocessor compilation.
+* _EnableMinimalRebuild_ - Enable Visual Studio's minimal rebuild feature.
* _NoPCH_ - Disable precompiled headers.
* _NoRTTI_ - Disable C++ runtime type information.
* _NoWinMD_ - Disables Generation of Windows Metadata.
* _NoWinRT_ - Disables Windows RunTime Extension for project.
+* _ObjcARC_ - Enable automatic reference counting for Object-C and Objective-C++.
* _Optimize_ - Perform a balanced set of optimizations.
* _OptimizeSize_ - Optimize for the smallest file size.
* _OptimizeSpeed_ - Optimize for the best performance.
+* _PedanticWarnings_ - Enables the pedantic warning flags.
* _SEH_ - Enable structured exception handling.
+* _SingleOutputDir_ - Allow source files in the same project to have the same name.
* _StaticRuntime_ - Perform a static link against the standard runtime libraries.
* _Symbols_ - Generate debugging information.
* _Unicode_ - Enable Unicode strings. If not specified, the default toolset behavior is used.
* _Unsafe_ - Enable the use of unsafe code in .NET applications.
* _UseFullPaths_ - Enable absolute paths for `__FILE__`.
+* _UnsignedChar_ - Force `char`s to be `unsigned` by default.
* _WinMain_ - Use WinMain() as the entry point for Windows applications, rather than main().
**Note:** When not set, options will default to the tool default.
@@ -591,22 +616,25 @@ framework "3.0"
[Back to top](#table-of-contents)
---
-### iif(_condition_, _trueval_, _falseval_)
-Implements an immediate `if` clause, returning one of two possible values.
+### group(_name_)
+Creates a solution folder for Visual Studio solutions.
+
+**Scope:** solutions
#### Arguments
-_condition_ - logical condition to test
-_trueval_ - value to return if _condition_ evaluates to `true`
-_falseval_ - value to return if _condition_ evaluates to `false`
+_name_ - the name of the solution folder
#### Examples
```lua
-result = iif(os.is("windows"), "is windows", "is not windows")
-```
-
-Note that all expressions are evaluated before the condition is checked. The following expression cannot be implemented with an `iif` because it may try to concatenate a string value.
-```lua
-result = iif(x -= nil, "x is " .. x, "x is nil")
+solution "MySolution"
+ group "MyGroup1"
+ project "Project1"
+ -- ...
+ project "Project2"
+ -- ...
+ group "MyGroup2"
+ project "Project3"
+ -- ...
```
[Back to top](#table-of-contents)
@@ -914,6 +942,21 @@ location ("../build/" .. _ACTION)
[Back to top](#table-of-contents)
---
+### messageskip(_options_)
+Skips certain messages in ninja and Makefile generated projects.
+
+**Scope:** solutions
+
+#### Arguments
+_options_ - one or several of "SkipCreatingMessage", "SkipBuildingMessage", "SkipCleaningMessage"
+
+#### Examples
+```lua
+messageskip { "SkipCreatingMessage", "SkipBuildingMessage", "SkipCleaningMessage" }
+```
+[Back to top](#table-of-contents)
+
+---
### newaction(_description_)
Registers a new command-line action argument.
@@ -1015,6 +1058,572 @@ configuration "Release"
[Back to top](#table-of-contents)
---
+### pchheader(_file_)
+Sets the main header file for precompiled header support.
+
+**Scope:** projects
+
+#### Arguments
+_file_ - name of the header file, as it is specified in your `#include` statements
+
+#### Examples
+```lua
+pchheader "afxwin.h"
+pchsource "afxwin.cpp"
+```
+[Back to top](#table-of-contents)
+
+---
+### pchsource(_file_)
+Sets the main source file for precompiled header support. Only used by Visual Studio.
+
+**Scope:** projects
+
+#### Arguments
+_file_ - name of the source file, relative to the currently-executing script file
+
+#### Examples
+```lua
+pchheader "afxwin.h"
+pchsource "afxwin.cpp"
+```
+[Back to top](#table-of-contents)
+
+---
+### platforms({_identifiers_...})
+Specifies a set of target hardware platforms for a solution.
+
+_Platform support is a new, experimental feature. The syntax and behavior described here might change as we sort out the details_
+
+**Scope:** solutions
+
+#### Arguments
+_identifiers_ - list of hardware platform specifiers from this list:
+
+* _Native_ - general build not targeting any particular platform. If your project can be built in a generic fashion, you should include this as the first platform option
+* _x32_ - 32-bit environment
+* _x64_ - 64-bit environment
+* _Universal_ - OS X universal binary, target both 32- and 64-bit versions of x86 and PPC. Automated dependency generation must be turned off, and always do a clean build. Not supported by Visual Studio.
+* _Universal32_ - like _Universal_ above, but targeting only 32-bit platforms
+* _Universal64_ - like _Universal_ above, but targeting only 64-bit platforms
+* _PS3_ - Playstation 3
+* _WiiDev_ - Wii
+* _Xbox360_ - Xbox 360 compiler and linker under Visual Studio
+* _PowerPC_ - PowerPC processors
+* _ARM_ - ARM-based processors
+* _Orbis_ - Playstation 4
+* _Durango_ - Xbox One
+
+#### Return Value
+Current list of target platforms for the active solution
+
+#### Examples
+Generic build, as well as OS X Universal build
+```lua
+solution "MySolution"
+ configurations { "Debug", "Release" }
+ platforms { "native", "universal" }
+```
+Prove 32- and 64-bit specific build targets. No generic build is provided so one of these two platforms must always be used. Do this only if your software requires knowledge of the underlying architecture at build time; otherwise, include _native_ to provide a generic build.
+```lua
+solution "MySolution"
+ configurations { "Debug", "Release" }
+ platforms { "x32", "x64" }
+```
+
+You can retrieve the current list of platforms by calling the function with no parameters
+```lua
+local p = platforms()
+```
+
+Once you have defined a list of platforms, you may use those identifiers to set up configuration filters and apply platform-specific settings.
+```lua
+configuration "x64"
+ defines "IS_64BIT"
+
+-- You can also mix platforms with other configuration selectors
+configuration { "Debug", "x64" }
+ defines "IS_64BIT_DEBUG"
+```
+[Back to top](#table-of-contents)
+
+---
+### postbuildcommands({_commands_...})
+Specifies shell commands to run after build is finished
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_commands_ - one or more shell commands
+
+#### Examples
+```lua
+configuration "windows"
+ postbuildcommands { "copy default.config bin\\project.config" }
+
+configuration "not windows"
+ postbuildcommands { "cp default.config bin/project.config" }
+```
+[Back to top](#table-of-contents)
+
+---
+### postcompiletasks({_commands_...})
+Specifies shell commands to run after compile of file is finished
+(GMAKE specific)
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_commands_ - one or more shell commands
+
+#### Examples
+```lua
+ postcompiletasks { "rm $(@:%.o=%.d)" }
+```
+[Back to top](#table-of-contents)
+
+---
+### prebuildcommands({_commands_...})
+Specifies shell commands to run before each build
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_commands_ - one or more shell commands
+
+#### Examples
+```lua
+configuration "windows"
+ prebuildcommands { "copy default.config bin\\project.config" }
+
+configuration "not windows"
+ prebuildcommands { "cp default.config bin/project.config" }
+```
+[Back to top](#table-of-contents)
+
+---
+### prelinkcommands({_commands_...})
+Specifies shell commands to run after source files have been compiled, but before the link step
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_commands_ - one or more shell commands
+
+#### Examples
+```lua
+configuration "windows"
+ prelinkcommands { "copy default.config bin\\project.config" }
+
+configuration "not windows"
+ prelinkcommands { "cp default.config bin/project.config" }
+```
+[Back to top](#table-of-contents)
+
+
+---
+### project(_name_)
+Creates a new project and makes it active. Projects contain all of the settings necessary to build a single binary target, and are synonymous with a Visual Studio Project. These settings include the list of source code files, the programming language used by those files, compiler flags, include directories, and which libraries to link against.
+
+Every project belongs to a solution.
+
+#### Arguments
+_name_ - a unique name for the project. If a project with the given name already exists, it is made active and returned. The project name will be used as the file name of the generated solution file.
+
+#### Return Value
+The active project object.
+
+#### The `project` Object
+Every project is represented in Lua as a table of key-value pairs. You should treat this object as read-only and use the GENie API to make any changes.
+
+* _basedir_ - directory where the project was originally defined. Root for relative paths.
+* _blocks_ - list of configuration blocks
+* _language_ - project language, if set
+* _location_ - output directory for generated project file
+* _name_ - name of the project
+* _solution_ - solution which contains the project
+* _uuid_ - unique identifier
+
+#### Examples
+Create a new project named "MyProject". Note that a solution must exist to contain the project. The indentation is for readability and is optional.
+```lua
+solution "MySolution"
+ configurations { "Debug", "Release" }
+
+ project "MyProject"
+```
+
+You can retrieve the currently active project by calling `project` with no parameters.
+```lua
+local prj = project()
+```
+
+You can retrieve the list of projects associated with a solution using the `projects` field of the solution object, which may then be iterated over.
+```lua
+local prjs = solution().projects
+for i, prj in ipairs(prjs) do
+ print(prj.name)
+end
+```
+[Back to top](#table-of-contents)
+
+---
+### removefiles({_files_...})
+Removes files from the project. This is different from [excludes](#excludesfiles) in that it completely removes them from the project, not only from the build. Multiple calls are concatenated.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_files_ - list of files to remove.
+
+[Back to top](#table-of-contents)
+
+---
+### removeflags({_flags_...})
+Removes flags from the flag list.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_flags_ - list of flags to remove from the flag list. They must be valid flags.
+
+[Back to top](#table-of-contents)
+
+---
+### removelinks({_references_...})
+
+Removes flags from the flag list.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_references_ - list of libraries and project names to remove from the links list.
+
+[Back to top](#table-of-contents)
+
+---
+### removeplatforms({_platforms_...})
+
+Removes platforms from the platform list.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_platforms_ - list of platforms to remove from the platforms list.
+
+[Back to top](#table-of-contents)
+
+---
+### resdefines({_symbols_...})
+Specifies preprocessor symbols for the resource compiler. Multiple calls are concatenated.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_symbols_ - list of symbols to be defined
+
+#### Examples
+```lua
+resdefines { "DEBUG", "TRACE" }
+```
+
+```lua
+resdefines { "CALLSPEC=__dllexport" }
+```
+[Back to top](#table-of-contents)
+
+---
+### resincludedirs({_paths_...})
+Specifies the include file search paths for the resource compiler. Multiple calls are concatenated.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_paths_ - list of include file search directories, relative to the currently executing script file
+
+#### Examples
+```lua
+resincludedirs { "../lua/include", "../zlib" }
+```
+
+May use wildcards
+```lua
+resincludedirs { "../includes/**" }
+```
+[Back to top](#table-of-contents)
+
+---
+### resoptions({_options_...})
+Passes arguments directly to the resource compiler. Multiple calls are concatenated.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_options_ - list of resource compiler flags and options
+
+#### Examples
+```lua
+configuration { "linux", "gmake" }
+ resoptions { "`wx-config --cxxflags`", "-ansi", "-pedantic" }
+```
+[Back to top](#table-of-contents)
+
+---
+### solution(_name_)
+Creates a new solution and makes it active. Solutions are the top-level objects in a GENie build script, and are synonymous with a Visual Studio solution. Each solution contains one or more projects, which in turn contain the settings to generate a single binary target.
+
+#### Arguments
+_name_ - unique name for the solution. If a solution with the given name already exists, it is made active and returned. This value will be used as the file name of the generated solution file.
+
+#### Return Value
+The active `solution` object.
+
+#### The `solution` Object
+Represented as a Lua table key-value pairs, containing the following values. You should treat this object as read-only and use the GENie API to make any changes.
+
+* _basedir_ - directory where the original project was defined; acts as a root for relative paths
+* _configurations_ - list of valid configuration names
+* _blocks_ - list of configuration blocks
+* _language_ - solution language, if set
+* _location_ - output directory for the generated solution file
+* _name_ - name of the solution
+* _platforms_ - list of target platforms
+* _projects_ - list of projects contained by the solution
+
+#### Examples
+```lua
+solution "MySolution"
+```
+
+You can retrieve the currently active solution object by calling `solution` with no parameters.
+```lua
+local sln = solution()
+```
+
+You can use the global variable `_SOLUTIONS` to list out all of the currently defined solutions.
+```lua
+for i, sln in ipairs(_SOLUTIONS) do
+ print(sln.name)
+end
+```
+[Back to top](#table-of-contents)
+
+---
+### startproject(_name_)
+Sets the start (default) project for the solution. Works for VS, QBS and Xcode.
+
+**Scope:** solutions
+
+#### Arguments
+_name_ - name of the project to set as the start project.
+
+### Examples
+```lua
+solution "MySolution"
+ startproject "MyProjectFoo"
+ -- [...]
+
+project "MyProjectFoo"
+-- [...]
+
+project "MyProjectBar"
+-- [...]
+```
+[Back to top](#table-of-contents)
+
+---
+### targetdir(_path_)
+Sets the destination directory for the compiled binary target. By default, generated project files will place their compiled output in the same directory as the script.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_path_ - file system path to the directory where the compiled target file should be stored, relative to the currently executing script file.
+
+#### Examples
+```lua
+project "MyProject"
+
+ configuration "Debug"
+ targetdir "bin/debug"
+
+ configuration "Release"
+ targetdir "bin/release"
+```
+[Back to top](#table-of-contents)
+
+---
+### targetextension(_ext_)
+Specifies the file extension for the compiled binary target. By default, the project will use the system's normal naming conventions: ".exe" for Windows executables, ".so" for Linux shared libraries, etc.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_ext_ - new file extension, including leading dot
+
+#### Examples
+```lua
+targetextension ".zmf"
+```
+[Back to top](#table-of-contents)
+
+---
+### targetname(_name_)
+Specifies the base file name for the compiled binary target. By default, the project name will be used as the file name of the compiled binary target.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_name_ - new base file name
+
+#### Examples
+```lua
+targetname "mytarget"
+```
+[Back to top](#table-of-contents)
+
+---
+### targetprefix(_prefix_)
+Specifies the file name prefix for the compiled binary target. By default, system naming conventions will be used: "lib" for POSIX libraries (e.g. "libMyProject.so") and no prefix elsewhere.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_prefix_ - new file name prefix
+
+#### Examples
+```lua
+targetprefix "plugin"
+```
+
+The prefix may also be set to an empty string for no prefix
+```lua
+targetprefix ""
+```
+[Back to top](#table-of-contents)
+
+---
+### targetsubdir(_path_)
+Sets a subdirectory inside the target directory for the compiled binary target.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_path_ - name of the subdirectory.
+
+[Back to top](#table-of-contents)
+
+---
+### targetsuffix(_suffix_)
+Specifies a file name suffix for the compiled binary target.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+_suffix_ - new filename suffix
+
+#### Examples
+```lua
+--- Add "-d" to debug versions of files
+configuration "Debug"
+ targetsuffix "-d"
+```
+[Back to top](#table-of-contents)
+
+---
+### uuid(_projectuuid_)
+Sets the UUID for a project. GENie automatically assigns a UUID to each project, which is used by the Visual Studio generators to identify the project within a solution. This UUID is essentially random and will change each time the project file is generated. If you are storing the generated Visual Studio project files in a version control system, this will create a lot of unnecessary deltas. Using the `uuid` function, you can assign a fixed UUID to each project which never changes.
+
+**Scope:** projects
+
+#### Arguments
+_projectuuid_ - UUID for the current project
+
+### Return Value
+Current project UUID or `nil` if no UUID has been set
+
+#### Examples
+```lua
+uuid "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX"
+```
+[Back to top](#table-of-contents)
+
+---
+### vpaths({[_group_] = {_pattern_...}})
+Places files into groups for "virtual paths", rather than mirroring the filesystem. This allows you to, for instance, put all header files in a group called "Headers", no matter where they appeared in the source tree.
+
+**Note:** May be set on the solution, project, or configuration, but only project-level file lists are currently supported.
+
+**Scope:** solutions, projects, configurations
+
+#### Arguments
+Table of values, where keys (_groups_) are strings and values (_pattern_) are lists of file system patterns.
+
+_group_ - name for the new group
+_pattern_ - file system pattern for matching file names
+
+#### Examples
+
+Place all header files into a virtual path called "Headers". Any directory information is removed, "src/lua/lua.h" will appear in the IDE as "Headers/lua.h"
+```lua
+vpaths { ["Headers"] = "**.h" }
+```
+
+You may specify multiple file patterns using table syntax
+```lua
+vpaths {
+ ["Headers"] = { "**.h", "**.hxx", "**.hpp" }
+}
+```
+
+It is also possible to include the file's path in the virtual group. Using this rule, "src/lua/lua.h" will appear in the IDE as "Headers/src/lua/lua.h".
+```lua
+vpaths { ["Headers/*"] = "**.h" }
+```
+
+Any directory information explicitly provided in the pattern will be removed from the replacement. Using this rule, "src/lua/lua.h" will appear in the IDE as "Headers/lua/lua.h".
+```lua
+vpaths { ["Headers/*"] = "src/**.h" }
+```
+
+You can also use virtual paths to remove extra directories from the IDE. Using this rule, "src/lua/lua.h" will appear in the IDE as "lua/lua.h".
+```lua
+vpaths { ["*"] = "src" }
+```
+
+You may specify more than one rule at a time
+```lua
+vpaths {
+ ["Headers"] = "**.h",
+ ["Sources/*"] = {"**.c", "**.cpp"},
+ ["Docs"] = "**.txt"
+}
+```
+[Back to top](#table-of-contents)
+
+---
+## Utility functions
+
+### iif(_condition_, _trueval_, _falseval_)
+Implements an immediate `if` clause, returning one of two possible values.
+
+#### Arguments
+_condition_ - logical condition to test
+_trueval_ - value to return if _condition_ evaluates to `true`
+_falseval_ - value to return if _condition_ evaluates to `false`
+
+#### Examples
+```lua
+result = iif(os.is("windows"), "is windows", "is not windows")
+```
+
+Note that all expressions are evaluated before the condition is checked. The following expression cannot be implemented with an `iif` because it may try to concatenate a string value.
+```lua
+result = iif(x -= nil, "x is " .. x, "x is nil")
+```
+[Back to top](#table-of-contents)
+
+---
### os.chdir(_path_)
Changes the working directory
@@ -1305,11 +1914,14 @@ userincludedirs { "../includes/**" }
[Back to top](#table-of-contents)
---
-### os.uuid()
+### os.uuid(_name_)
Returns a Universally Unique Identifier
+#### Arguments
+_name_ - (optional) string to be hashed
+
#### Return Value
-A new UUID, a string value with the format `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
+A new UUID, a string value with the format `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`, generated from _name_ if it is provided, otherwise generated from random data
[Back to top](#table-of-contents)
@@ -1321,7 +1933,7 @@ Converts relative path to absolute path
_path_ - the relative path to be converted
#### Return Value
-new absolute path, calculated from the current working directory
+New absolute path, calculated from the current working directory
[Back to top](#table-of-contents)
@@ -1502,171 +2114,8 @@ _newsep_ - new path separator. Defaults to current environment default.
Modified path
[Back to top](#table-of-contents)
-
----
-### pchheader(_file_)
-Sets the main header file for precompiled header support.
-
-**Scope:** projects
-
-#### Arguments
-_file_ - name of the header file, as it is specified in your `#include` statements
-
-#### Examples
-```lua
-pchheader "afxwin.h"
-pchsource "afxwin.cpp"
-```
-[Back to top](#table-of-contents)
-
---
-### pchsource(_file_)
-Sets the main source file for precompiled header support. Only used by Visual Studio.
-**Scope:** projects
-
-#### Arguments
-_file_ - name of the source file, relative to the currently-executing script file
-
-#### Examples
-```lua
-pchheader "afxwin.h"
-pchsource "afxwin.cpp"
-```
-[Back to top](#table-of-contents)
-
----
-### platforms({_identifiers_...})
-Specifies a set of target hardware platforms for a solution.
-
-_Platform support is a new, experimental feature. The syntax and behavior described here might change as we sort out the details_
-
-**Scope:** solutions
-
-#### Arguments
-_identifiers_ - list of hardware platform specifiers from this list:
-
-* _Native_ - general build not targeting any particular platform. If your project can be built in a generic fashion, you should include this as the first platform option
-* _x32_ - 32-bit environment
-* _x64_ - 64-bit environment
-* _Universal_ - OS X universal binary, target both 32- and 64-bit versions of x86 and PPC. Automated dependency generation must be turned off, and always do a clean build. Not supported by Visual Studio.
-* _Universal32_ - like _Universal_ above, but targeting only 32-bit platforms
-* _Universal64_ - like _Universal_ above, but targeting only 64-bit platforms
-* _PS3_ - Playstation 3
-* _WiiDev_ - Wii
-* _Xbox360_ - Xbox 360 compiler and linker under Visual Studio
-* _PowerPC_ - PowerPC processors
-* _ARM_ - ARM-based processors
-* _Orbis_ - Playstation 4
-* _Durango_ - Xbox One
-
-#### Return Value
-Current list of target platforms for the active solution
-
-#### Examples
-Generic build, as well as OS X Universal build
-```lua
-solution "MySolution"
- configurations { "Debug", "Release" }
- platforms { "native", "universal" }
-```
-Prove 32- and 64-bit specific build targets. No generic build is provided so one of these two platforms must always be used. Do this only if your software requires knowledge of the underlying architecture at build time; otherwise, include _native_ to provide a generic build.
-```lua
-solution "MySolution"
- configurations { "Debug", "Release" }
- platforms { "x32", "x64" }
-```
-
-You can retrieve the current list of platforms by calling the function with no parameters
-```lua
-local p = platforms()
-```
-
-Once you have defined a list of platforms, you may use those identifiers to set up configuration filters and apply platform-specific settings.
-```lua
-configuration "x64"
- defines "IS_64BIT"
-
--- You can also mix platforms with other configuration selectors
-configuration { "Debug", "x64" }
- defines "IS_64BIT_DEBUG"
-```
-[Back to top](#table-of-contents)
-
----
-### postbuildcommands({_commands_...})
-Specifies shell commands to run after build is finished
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_commands_ - one or more shell commands
-
-#### Examples
-```lua
-configuration "windows"
- postbuildcommands { "copy default.config bin\\project.config" }
-
-configuration "not windows"
- postbuildcommands { "cp default.config bin/project.config" }
-```
-[Back to top](#table-of-contents)
-
----
-### postcompiletasks({_commands_...})
-Specifies shell commands to run after compile of file is finished
-(GMAKE specific)
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_commands_ - one or more shell commands
-
-#### Examples
-```lua
- postcompiletasks { "rm $(@:%.o=%.d)" }
-```
-[Back to top](#table-of-contents)
-
----
-### prebuildcommands({_commands_...})
-Specifies shell commands to run before each build
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_commands_ - one or more shell commands
-
-#### Examples
-```lua
-configuration "windows"
- prebuildcommands { "copy default.config bin\\project.config" }
-
-configuration "not windows"
- prebuildcommands { "cp default.config bin/project.config" }
-```
-[Back to top](#table-of-contents)
-
----
-### prelinkcommands({_commands_...})
-Specifies shell commands to run after source files have been compiled, but before the link step
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_commands_ - one or more shell commands
-
-#### Examples
-```lua
-configuration "windows"
- prelinkcommands { "copy default.config bin\\project.config" }
-
-configuration "not windows"
- prelinkcommands { "cp default.config bin/project.config" }
-```
-[Back to top](#table-of-contents)
-
----
### printf(_format_, _args_...)
Prints a formatted string
@@ -1677,147 +2126,6 @@ _args_ - arguments to be substituted into the format string
[Back to top](#table-of-contents)
---
-### project(_name_)
-Creates a new project and makes it active. Projects contain all of the settings necessary to build a single binary target, and are synonymous with a Visual Studio Project. These settings include the list of source code files, the programming language used by those files, compiler flags, include directories, and which libraries to link against.
-
-Every project belongs to a solution.
-
-#### Arguments
-_name_ - a unique name for the project. If a project with the given name already exists, it is made active and returned. The project name will be used as the file name of the generated solution file.
-
-#### Return Value
-The active project object.
-
-#### The `project` Object
-Every project is represented in Lua as a table of key-value pairs. You should treat this object as read-only and use the GENie API to make any changes.
-
-* _basedir_ - directory where the project was originally defined. Root for relative paths.
-* _blocks_ - list of configuration blocks
-* _language_ - project language, if set
-* _location_ - output directory for generated project file
-* _name_ - name of the project
-* _solution_ - solution which contains the project
-* _uuid_ - unique identifier
-
-#### Examples
-Create a new project named "MyProject". Note that a solution must exist to contain the project. The indentation is for readability and is optional.
-```lua
-solution "MySolution"
- configurations { "Debug", "Release" }
-
- project "MyProject"
-```
-
-You can retrieve the currently active project by calling `project` with no parameters.
-```lua
-local prj = project()
-```
-
-You can retrieve the list of projects associated with a solution using the `projects` field of the solution object, which may then be iterated over.
-```lua
-local prjs = solution().projects
-for i, prj in ipairs(prjs) do
- print(prj.name)
-end
-```
-[Back to top](#table-of-contents)
-
----
-### resdefines({_symbols_...})
-Specifies preprocessor symbols for the resource compiler. Multiple calls are concatenated.
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_symbols_ - list of symbols to be defined
-
-#### Examples
-```lua
-resdefines { "DEBUG", "TRACE" }
-```
-
-```lua
-resdefines { "CALLSPEC=__dllexport" }
-```
-[Back to top](#table-of-contents)
-
----
-### resincludedirs({_paths_...})
-Specifies the include file search paths for the resource compiler. Multiple calls are concatenated.
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_paths_ - list of include file search directories, relative to the currently executing script file
-
-#### Examples
-```lua
-resincludedirs { "../lua/include", "../zlib" }
-```
-
-May use wildcards
-```lua
-resincludedirs { "../includes/**" }
-```
-[Back to top](#table-of-contents)
-
----
-### resoptions({_options_...})
-Passes arguments directly to the resource compiler. Multiple calls are concatenated.
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_options_ - list of resource compiler flags and options
-
-#### Examples
-```lua
-configuration { "linux", "gmake" }
- resoptions { "`wx-config --cxxflags`", "-ansi", "-pedantic" }
-```
-[Back to top](#table-of-contents)
-
----
-### solution(_name_)
-Creates a new solution and makes it active. Solutions are the top-level objects in a GENie build script, and are synonymous with a Visual Studio solution. Each solution contains one or more projects, which in turn contain the settings to generate a single binary target.
-
-#### Arguments
-_name_ - unique name for the solution. If a solution with the given name already exists, it is made active and returned. This value will be used as the file name of the generated solution file.
-
-#### Return Value
-The active `solution` object.
-
-#### The `solution` Object
-Represented as a Lua table key-value pairs, containing the following values. You should treat this object as read-only and use the GENie API to make any changes.
-
-* _basedir_ - directory where the original project was defined; acts as a root for relative paths
-* _configurations_ - list of valid configuration names
-* _blocks_ - list of configuration blocks
-* _language_ - solution language, if set
-* _location_ - output directory for the generated solution file
-* _name_ - name of the solution
-* _platforms_ - list of target platforms
-* _projects_ - list of projects contained by the solution
-
-#### Examples
-```lua
-solution "MySolution"
-```
-
-You can retrieve the currently active solution object by calling `solution` with no parameters.
-```lua
-local sln = solution()
-```
-
-You can use the global variable `_SOLUTIONS` to list out all of the currently defined solutions.
-```lua
-for i, sln in ipairs(_SOLUTIONS) do
- print(sln.name)
-end
-```
-[Back to top](#table-of-contents)
-
----
### string.endswith(_haystack_, _needle_)
Checks if the given _haystack_ string ends with _needle_.
@@ -1902,167 +2210,8 @@ Formatted string
[Back to top](#table-of-contents)
---
-### targetdir(_path_)
-Sets the destination directory for the compiled binary target. By default, generated project files will place their compiled output in the same directory as the script.
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_path_ - file system path to the directory where the compiled target file should be stored, relative to the currently executing script file.
-
-#### Examples
-```lua
-project "MyProject"
-
- configuration "Debug"
- targetdir "bin/debug"
-
- configuration "Release"
- targetdir "bin/release"
-```
-[Back to top](#table-of-contents)
-
----
-### targetextension(_ext_)
-Specifies the file extension for the compiled binary target. By default, the project will use the system's normal naming conventions: ".exe" for Windows executables, ".so" for Linux shared libraries, etc.
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_ext_ - new file extension, including leading dot
-
-#### Examples
-```lua
-targetextension ".zmf"
-```
-[Back to top](#table-of-contents)
-
----
-### targetname(_name_)
-Specifies the base file name for the compiled binary target. By default, the project name will be used as the file name of the compiled binary target.
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_name_ - new base file name
-
-#### Examples
-```lua
-targetname "mytarget"
-```
-[Back to top](#table-of-contents)
-
----
-### targetprefix(_prefix_)
-Specifies the file name prefix for the compiled binary target. By default, system naming conventions will be used: "lib" for POSIX libraries (e.g. "libMyProject.so") and no prefix elsewhere.
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_prefix_ - new file name prefix
-
-#### Examples
-```lua
-targetprefix "plugin"
-```
-
-The prefix may also be set to an empty string for no prefix
-```lua
-targetprefix ""
-```
-[Back to top](#table-of-contents)
-
----
-### targetsuffix(_suffix_)
-Specifies a file name suffix for the compiled binary target.
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-_suffix_ - new filename suffix
-
-#### Examples
-```lua
---- Add "-d" to debug versions of files
-configuration "Debug"
- targetsuffix "-d"
-```
-[Back to top](#table-of-contents)
-
----
-### uuid(_projectuuid_)
-Sets the UUID for a project. GENie automatically assigns a UUID to each project, which is used by the Visual Studio generators to identify the project within a solution. This UUID is essentially random and will change each time the project file is generated. If you are storing the generated Visual Studio project files in a version control system, this will create a lot of unnecessary deltas. Using the `uuid` function, you can assign a fixed UUID to each project which never changes.
-
-**Scope:** projects
-
-#### Arguments
-_projectuuid_ - UUID for the current project
-
-### Return Value
-Current project UUID or `nil` if no UUID has been set
-
-#### Examples
-```lua
-uuid "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX"
-```
-[Back to top](#table-of-contents)
-
----
-### vpaths({[_group_] = {_pattern_...}})
-Places files into groups for "virtual paths", rather than mirroring the filesystem. This allows you to, for instance, put all header files in a group called "Headers", no matter where they appeared in the source tree.
-
-**Note:** May be set on the solution, project, or configuration, but only project-level file lists are currently supported.
-
-**Scope:** solutions, projects, configurations
-
-#### Arguments
-Table of values, where keys (_groups_) are strings and values (_pattern_) are lists of file system patterns.
-
-_group_ - name for the new group
-_pattern_ - file system pattern for matching file names
-
-#### Examples
-
-Place all header files into a virtual path called "Headers". Any directory information is removed, "src/lua/lua.h" will appear in the IDE as "Headers/lua.h"
-```lua
-vpaths { ["Headers"] = "**.h" }
-```
-
-You may specify multiple file patterns using table syntax
-```lua
-vpaths {
- ["Headers"] = { "**.h", "**.hxx", "**.hpp" }
-}
-```
-
-It is also possible to include the file's path in the virtual group. Using this rule, "src/lua/lua.h" will appear in the IDE as "Headers/src/lua/lua.h".
-```lua
-vpaths { ["Headers/*"] = "**.h" }
-```
-
-Any directory information explicitly provided in the pattern will be removed from the replacement. Using this rule, "src/lua/lua.h" will appear in the IDE as "Headers/lua/lua.h".
-```lua
-vpaths { ["Headers/*"] = "src/**.h" }
-```
-
-You can also use virtual paths to remove extra directories from the IDE. Using this rule, "src/lua/lua.h" will appear in the IDE as "lua/lua.h".
-```lua
-vpaths { ["*"] = "src" }
-```
-
-You may specify more than one rule at a time
-```lua
-vpaths {
- ["Headers"] = "**.h",
- ["Sources/*"] = {"**.c", "**.cpp"},
- ["Docs"] = "**.txt"
-}
-```
-[Back to top](#table-of-contents)
-
----
-## Additional Information
+## Additional information
### Wildcards
diff --git a/3rdparty/genie/src/actions/cmake/_cmake.lua b/3rdparty/genie/src/actions/cmake/_cmake.lua
index b7dfdb027d0..9620c63b2da 100644
--- a/3rdparty/genie/src/actions/cmake/_cmake.lua
+++ b/3rdparty/genie/src/actions/cmake/_cmake.lua
@@ -6,6 +6,10 @@
premake.cmake = { }
+--
+-- Register the "cmake" action
+--
+
newaction {
trigger = "cmake",
shortname = "CMake",
@@ -13,7 +17,7 @@ newaction {
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Bundle" },
valid_languages = { "C", "C++" },
valid_tools = {
- cc = { "gcc" },
+ cc = { "gcc" },
},
onsolution = function(sln)
premake.generate(sln, "CMakeLists.txt", premake.cmake.workspace)
@@ -27,5 +31,4 @@ newaction {
oncleanproject = function(prj)
premake.clean.file(prj, "%%/CMakeLists.txt")
end
-}
-
+} \ No newline at end of file
diff --git a/3rdparty/genie/src/actions/cmake/cmake_project.lua b/3rdparty/genie/src/actions/cmake/cmake_project.lua
index b98a20c65a8..bc123eabeb2 100644
--- a/3rdparty/genie/src/actions/cmake/cmake_project.lua
+++ b/3rdparty/genie/src/actions/cmake/cmake_project.lua
@@ -2,64 +2,269 @@
-- _cmake.lua
-- Define the CMake action(s).
-- Copyright (c) 2015 Miodrag Milanovic
+-- Modifications and additions in 2017 by Maurizio Petrarota
--
local cmake = premake.cmake
local tree = premake.tree
+local includestr = 'include_directories(../%s)'
+local definestr = 'add_definitions(-D%s)'
+
+
+local function is_excluded(prj, cfg, file)
+ if table.icontains(prj.excludes, file) then
+ return true
+ end
+
+ if table.icontains(cfg.excludes, file) then
+ return true
+ end
+
+ return false
+end
+
+function cmake.excludedFiles(prj, cfg, src)
+ for _, v in ipairs(src) do
+ if (is_excluded(prj, cfg, v)) then
+ _p(1, 'list(REMOVE_ITEM source_list ../%s)', v)
+ end
+
+ end
+end
+
+function cmake.list(value)
+ if #value > 0 then
+ return " " .. table.concat(value, " ")
+ else
+ return ""
+ end
+end
+
function cmake.files(prj)
- local tr = premake.project.buildsourcetree(prj)
- tree.traverse(tr, {
- onbranchenter = function(node, depth)
- end,
- onbranchexit = function(node, depth)
- end,
- onleaf = function(node, depth)
- _p(1, '../%s', node.cfg.name)
- end,
- }, true, 1)
+ local ret = {}
+ local tr = premake.project.buildsourcetree(prj)
+ tree.traverse(tr, {
+ onbranchenter = function(node, depth)
+ end,
+ onbranchexit = function(node, depth)
+ end,
+ onleaf = function(node, depth)
+ table.insert(ret, node.cfg.name)
+ _p(1, '../%s', node.cfg.name)
+ end,
+ }, true, 1)
+
+ return ret
end
-function premake.cmake.project(prj)
- io.indent = " "
- _p('cmake_minimum_required(VERSION 2.8.4)')
- _p('')
- _p('project(%s)', premake.esc(prj.name))
- _p('set(')
- _p('source_list')
- cmake.files(prj)
- _p(')')
-
- local platforms = premake.filterplatforms(prj.solution, premake[_OPTIONS.cc].platforms, "Native")
- for i = #platforms, 1, -1 do
- if premake.platforms[platforms[i]].iscrosscompiler then
- table.remove(platforms, i)
- end
- end
-
- for _, platform in ipairs(platforms) do
- for cfg in premake.eachconfig(prj, platform) do
- for _,v in ipairs(cfg.includedirs) do
- _p('include_directories(../%s)', premake.esc(v))
- end
- for _,v in ipairs(cfg.defines) do
- _p('add_definitions(-D%s)', premake.esc(v))
- end
- break
- end
- break
- end
-
- if (prj.kind=='StaticLib') then
- _p('add_library(%s STATIC ${source_list})',premake.esc(prj.name))
- end
- if (prj.kind=='SharedLib') then
- _p('add_library(%s SHARED ${source_list})',premake.esc(prj.name))
- end
- if (prj.kind=='ConsoleApp') then
- _p('add_executable(%s ${source_list})',premake.esc(prj.name))
- end
- if (prj.kind=='WindowedApp') then
- _p('add_executable(%s ${source_list})',premake.esc(prj.name))
- end
+function cmake.header(prj)
+ _p('# %s project autogenerated by GENie', premake.action.current().shortname)
+ _p('cmake_minimum_required(VERSION 2.8.4)')
+ _p('')
+ _p('project(%s)', premake.esc(prj.name))
end
+
+function cmake.customtasks(prj)
+ local dirs = {}
+ local tasks = {}
+ for _, custombuildtask in ipairs(prj.custombuildtask or {}) do
+ for _, buildtask in ipairs(custombuildtask or {}) do
+ table.insert(tasks, buildtask)
+ local d = string.format("${CMAKE_CURRENT_SOURCE_DIR}/../%s", path.getdirectory(path.getrelative(prj.location, buildtask[2])))
+ if not table.contains(dirs, d) then
+ table.insert(dirs, d)
+ _p('file(MAKE_DIRECTORY \"%s\")', d)
+ end
+ end
+ end
+ _p('')
+
+ for _, buildtask in ipairs(tasks) do
+ local deps = string.format("${CMAKE_CURRENT_SOURCE_DIR}/../%s ", path.getrelative(prj.location, buildtask[1]))
+ local outputs = string.format("${CMAKE_CURRENT_SOURCE_DIR}/../%s ", path.getrelative(prj.location, buildtask[2]))
+ local msg = ""
+
+ for _, depdata in ipairs(buildtask[3] or {}) do
+ deps = deps .. string.format("${CMAKE_CURRENT_SOURCE_DIR}/../%s ", path.getrelative(prj.location, depdata))
+ end
+
+ _p('add_custom_command(')
+ _p(1, 'OUTPUT %s', outputs)
+ _p(1, 'DEPENDS %s', deps)
+
+ for _, cmdline in ipairs(buildtask[4] or {}) do
+ if (cmdline:sub(1, 1) ~= "@") then
+ local cmd = cmdline
+ local num = 1
+ for _, depdata in ipairs(buildtask[3] or {}) do
+ cmd = string.gsub(cmd, "%$%(" .. num .. "%)", string.format("${CMAKE_CURRENT_SOURCE_DIR}/../%s ", path.getrelative(prj.location, depdata)))
+ num = num + 1
+ end
+
+ cmd = string.gsub(cmd, "%$%(<%)", string.format("${CMAKE_CURRENT_SOURCE_DIR}/../%s ", path.getrelative(prj.location, buildtask[1])))
+ cmd = string.gsub(cmd, "%$%(@%)", outputs)
+
+ _p(1, 'COMMAND %s', cmd)
+ else
+ msg = cmdline
+ end
+ end
+ _p(1, 'COMMENT \"%s\"', msg)
+ _p(')')
+ _p('')
+ end
+end
+
+function cmake.depRules(prj)
+ local maintable = {}
+ for _, dependency in ipairs(prj.dependency) do
+ for _, dep in ipairs(dependency) do
+ if path.issourcefile(dep[1]) then
+ local dep1 = premake.esc(path.getrelative(prj.location, dep[1]))
+ local dep2 = premake.esc(path.getrelative(prj.location, dep[2]))
+ if not maintable[dep1] then maintable[dep1] = {} end
+ table.insert(maintable[dep1], dep2)
+ end
+ end
+ end
+
+ for key, _ in pairs(maintable) do
+ local deplist = {}
+ local depsname = string.format('%s_deps', path.getname(key))
+
+ for _, d2 in pairs(maintable[key]) do
+ table.insert(deplist, d2)
+ end
+ _p('set(')
+ _p(1, depsname)
+ for _, v in pairs(deplist) do
+ _p(1, '${CMAKE_CURRENT_SOURCE_DIR}/../%s', v)
+ end
+ _p(')')
+ _p('')
+ _p('set_source_files_properties(')
+ _p(1, '\"${CMAKE_CURRENT_SOURCE_DIR}/../%s\"', key)
+ _p(1, 'PROPERTIES OBJECT_DEPENDS \"${%s}\"', depsname)
+ _p(')')
+ _p('')
+ end
+end
+
+function cmake.commonRules(conf, str)
+ local Dupes = {}
+ local t2 = {}
+ for _, cfg in ipairs(conf) do
+ local cfgd = iif(str == includestr, cfg.includedirs, cfg.defines)
+ for _, v in ipairs(cfgd) do
+ if(t2[v] == #conf - 1) then
+ _p(str, v)
+ table.insert(Dupes, v)
+ end
+ if not t2[v] then
+ t2[v] = 1
+ else
+ t2[v] = t2[v] + 1
+ end
+ end
+ end
+ return Dupes
+end
+
+function cmake.cfgRules(cfg, dupes, str)
+ for _, v in ipairs(cfg) do
+ if (not table.icontains(dupes, v)) then
+ _p(1, str, v)
+ end
+ end
+end
+
+function cmake.removeCrosscompiler(platforms)
+ for i = #platforms, 1, -1 do
+ if premake.platforms[platforms[i]].iscrosscompiler then
+ table.remove(platforms, i)
+ end
+ end
+end
+
+function cmake.project(prj)
+ io.indent = " "
+ cmake.header(prj)
+ _p('set(')
+ _p('source_list')
+ local source_files = cmake.files(prj)
+ _p(')')
+ _p('')
+
+ local nativeplatform = iif(os.is64bit(), "x64", "x32")
+ local cc = premake.gettool(prj)
+ local platforms = premake.filterplatforms(prj.solution, cc.platforms, "Native")
+
+ cmake.removeCrosscompiler(platforms)
+
+ local configurations = {}
+
+ for _, platform in ipairs(platforms) do
+ for cfg in premake.eachconfig(prj, platform) do
+ -- TODO: Extend support for 32-bit targets on 64-bit hosts
+ if cfg.platform == nativeplatform then
+ table.insert(configurations, cfg)
+ end
+ end
+ end
+
+ local commonIncludes = cmake.commonRules(configurations, includestr)
+ local commonDefines = cmake.commonRules(configurations, definestr)
+ _p('')
+
+ for _, cfg in ipairs(configurations) do
+ _p('if(CMAKE_BUILD_TYPE MATCHES \"%s\")', cfg.name)
+
+ -- list excluded files
+ cmake.excludedFiles(prj, cfg, source_files)
+
+ -- add includes directories
+ cmake.cfgRules(cfg.includedirs, commonIncludes, includestr)
+
+ -- add build defines
+ cmake.cfgRules(cfg.defines, commonDefines, definestr)
+
+ -- set CXX flags
+ _p(1, 'set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} %s\")', cmake.list(table.join(cc.getcppflags(cfg), cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)))
+
+ -- set C flags
+ _p(1, 'set(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS} %s\")', cmake.list(table.join(cc.getcppflags(cfg), cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_c)))
+
+ _p('endif()')
+ _p('')
+ end
+
+ -- force CPP if needed
+ if (prj.options.ForceCPP) then
+ _p('set_source_files_properties(${source_list} PROPERTIES LANGUAGE CXX)')
+ end
+
+ -- add custom tasks
+ cmake.customtasks(prj)
+
+ -- per-dependency build rules
+ cmake.depRules(prj)
+
+ for _, cfg in ipairs(configurations) do
+ _p('if(CMAKE_BUILD_TYPE MATCHES \"%s\")', cfg.name)
+
+ if (prj.kind == 'StaticLib') then
+ _p(1, 'add_library(%s STATIC ${source_list})', premake.esc(cfg.buildtarget.basename))
+ end
+
+ if (prj.kind == 'SharedLib') then
+ _p(1, 'add_library(%s SHARED ${source_list})', premake.esc(cfg.buildtarget.basename))
+ end
+ if (prj.kind == 'ConsoleApp' or prj.kind == 'WindowedApp') then
+ _p(1, 'add_executable(%s ${source_list})', premake.esc(cfg.buildtarget.basename))
+ _p(1, 'target_link_libraries(%s%s%s)', premake.esc(cfg.buildtarget.basename), cmake.list(premake.esc(premake.getlinks(cfg, "siblings", "basename"))), cmake.list(cc.getlinkflags(cfg)))
+ end
+ _p('endif()')
+ _p('')
+ end
+end \ No newline at end of file
diff --git a/3rdparty/genie/src/actions/cmake/cmake_workspace.lua b/3rdparty/genie/src/actions/cmake/cmake_workspace.lua
index 3e0c526ff4b..b948f9194e5 100644
--- a/3rdparty/genie/src/actions/cmake/cmake_workspace.lua
+++ b/3rdparty/genie/src/actions/cmake/cmake_workspace.lua
@@ -5,6 +5,19 @@
--
function premake.cmake.workspace(sln)
+ if (sln.location ~= _WORKING_DIR) then
+ local name = string.format("%s/CMakeLists.txt", _WORKING_DIR)
+ local f, err = io.open(name, "wb")
+ if (not f) then
+ error(err, 0)
+ end
+ f:write('# CMakeLists autogenerated by GENie\n')
+ f:write('cmake_minimum_required(VERSION 2.8.4)\n')
+ f:write('\n')
+ f:write('add_subdirectory('.. path.getrelative(_WORKING_DIR, sln.location) ..')\n')
+ f:close()
+ end
+ _p('# CMakeLists autogenerated by GENie')
_p('cmake_minimum_required(VERSION 2.8.4)')
_p('')
for i,prj in ipairs(sln.projects) do
diff --git a/3rdparty/genie/src/actions/fastbuild/fastbuild_project.lua b/3rdparty/genie/src/actions/fastbuild/fastbuild_project.lua
index 57dff527da8..eec65d584f5 100644
--- a/3rdparty/genie/src/actions/fastbuild/fastbuild_project.lua
+++ b/3rdparty/genie/src/actions/fastbuild/fastbuild_project.lua
@@ -115,7 +115,9 @@ local function compile(indentlevel, prj, cfg, commonbasepath)
table.insert(compileroptions, '/TP')
end
- if cfg.flags.ExtraWarnings then
+ if cfg.flags.PedanticWarnings
+ or cfg.flags.ExtraWarnings
+ then
table.insert(compileroptions, '/W4')
end
diff --git a/3rdparty/genie/src/actions/make/make_cpp.lua b/3rdparty/genie/src/actions/make/make_cpp.lua
index 9de447b49ce..d071cd967c4 100644
--- a/3rdparty/genie/src/actions/make/make_cpp.lua
+++ b/3rdparty/genie/src/actions/make/make_cpp.lua
@@ -7,7 +7,7 @@
premake.make.cpp = { }
premake.make.override = { }
premake.make.makefile_ignore = false
-
+
local cpp = premake.make.cpp
local make = premake.make
@@ -67,9 +67,9 @@
_p('')
if os.is("MacOSX") and prj.kind == "WindowedApp" then
- _p('all: $(OBJDIRS) prebuild prelink $(TARGET) $(dir $(TARGETDIR))PkgInfo $(dir $(TARGETDIR))Info.plist | $(TARGETDIR)')
+ _p('all: $(OBJDIRS) $(TARGETDIR) prebuild prelink $(TARGET) $(dir $(TARGETDIR))PkgInfo $(dir $(TARGETDIR))Info.plist')
else
- _p('all: $(OBJDIRS) prebuild prelink $(TARGET) | $(TARGETDIR)')
+ _p('all: $(OBJDIRS) $(TARGETDIR) prebuild prelink $(TARGET)')
end
_p('\t@:')
_p('')
@@ -101,11 +101,11 @@
prj.archivesplit_size=200
end
if (not prj.options.ArchiveSplit) then
- _p('ifeq (posix,$(SHELLTYPE))')
- _p('\t$(SILENT) rm -f $(TARGET)')
- _p('else')
- _p('\t$(SILENT) if exist $(subst /,\\\\,$(TARGET)) del $(subst /,\\\\,$(TARGET))')
- _p('endif')
+ _p('ifeq (posix,$(SHELLTYPE))')
+ _p('\t$(SILENT) rm -f $(TARGET)')
+ _p('else')
+ _p('\t$(SILENT) if exist $(subst /,\\\\,$(TARGET)) del $(subst /,\\\\,$(TARGET))')
+ _p('endif')
_p('\t$(SILENT) $(LINKCMD) $(OBJECTS)' .. (os.is("MacOSX") and " 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'" or ""))
else
_p('\t$(call RM,$(TARGET))')
@@ -398,8 +398,8 @@
_p(' ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_asm)))
_p(' ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_c)))
_p(' ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)))
- _p(' ALL_OBJCFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_objc)))
- _p(' ALL_OBJCPPFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_objcpp)))
+ _p(' ALL_OBJCFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getobjcflags(cfg), cfg.buildoptions, cfg.buildoptions_objc)))
+ _p(' ALL_OBJCPPFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cc.getobjcflags(cfg), cfg.buildoptions, cfg.buildoptions_objcpp)))
_p(' ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)%s',
make.list(table.join(cc.getdefines(cfg.resdefines),
diff --git a/3rdparty/genie/src/actions/make/make_vala.lua b/3rdparty/genie/src/actions/make/make_vala.lua
index 69f00029976..a7a88c6ddac 100644
--- a/3rdparty/genie/src/actions/make/make_vala.lua
+++ b/3rdparty/genie/src/actions/make/make_vala.lua
@@ -78,6 +78,10 @@
_p('.PHONY: clean prebuild prelink')
_p('')
+ _p('all: prebuild prelink $(TARGET) | $(TARGETDIR)')
+ _p('\t@:')
+ _p('')
+
-- target build rule
_p('$(TARGET): $(SOURCES) | $(TARGETDIR)')
_p('\t$(SILENT) $(VALAC) -o $(TARGET) --cc=$(CC) $(FLAGS) $(SOURCES)')
diff --git a/3rdparty/genie/src/actions/qbs/qbs_cpp.lua b/3rdparty/genie/src/actions/qbs/qbs_cpp.lua
index 3a4099a551a..1dd1d109d3c 100644
--- a/3rdparty/genie/src/actions/qbs/qbs_cpp.lua
+++ b/3rdparty/genie/src/actions/qbs/qbs_cpp.lua
@@ -135,7 +135,9 @@ function qbs.generate_project(prj)
_p(indent, 'cpp.runtimeLibrary: "dynamic"')
end
- if cfg.flags.ExtraWarnings then
+ if cfg.flags.PedanticWarnings
+ or cfg.flags.ExtraWarnings
+ then
_p(indent, 'cpp.warningLevel: "all"')
else
_p(indent, 'cpp.warningLevel: "default"')
diff --git a/3rdparty/genie/src/actions/vstudio/vstudio_vcxproj.lua b/3rdparty/genie/src/actions/vstudio/vstudio_vcxproj.lua
index 6b64104ae4d..18bd41ff6f2 100644
--- a/3rdparty/genie/src/actions/vstudio/vstudio_vcxproj.lua
+++ b/3rdparty/genie/src/actions/vstudio/vstudio_vcxproj.lua
@@ -168,7 +168,7 @@
_p(1,'<PropertyGroup '..if_config_and_platform() ..'>', premake.esc(cfginfo.name))
- _p(2,'<OutDir>%s</OutDir>', premake.esc(outdir))
+ _p(2,'<OutDir>%s</OutDir>', iif(outdir:len() > 0, premake.esc(outdir), ".\\"))
if cfg.platform == "Xbox360" then
_p(2,'<OutputFile>$(OutDir)%s</OutputFile>', premake.esc(target.name))
@@ -401,24 +401,24 @@
if not premake.config.isoptimizedbuild(cfg.flags) then
if not cfg.flags.Managed then
- _p(3,'<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>')
+ _p(3, '<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>')
end
if cfg.flags.ExtraWarnings then
--- _p(3,'<SmallerTypeCheck>true</SmallerTypeCheck>')
+-- _p(3, '<SmallerTypeCheck>true</SmallerTypeCheck>')
end
else
- _p(3,'<StringPooling>true</StringPooling>')
+ _p(3, '<StringPooling>true</StringPooling>')
end
if cfg.platform == "Durango" or cfg.flags.NoWinRT then
_p(3, '<CompileAsWinRT>false</CompileAsWinRT>')
end
- _p(3,'<RuntimeLibrary>%s</RuntimeLibrary>', runtime(cfg))
+ _p(3, '<RuntimeLibrary>%s</RuntimeLibrary>', runtime(cfg))
if cfg.flags.NoBufferSecurityCheck then
- _p(3,'<BufferSecurityCheck>false</BufferSecurityCheck>')
+ _p(3, '<BufferSecurityCheck>false</BufferSecurityCheck>')
end
_p(3,'<FunctionLevelLinking>true</FunctionLevelLinking>')
@@ -426,23 +426,25 @@
-- If we aren't running NoMultiprocessorCompilation and not wanting a minimal rebuild,
-- then enable MultiProcessorCompilation.
if not cfg.flags.NoMultiProcessorCompilation and not cfg.flags.EnableMinimalRebuild then
- _p(3,'<MultiProcessorCompilation>true</MultiProcessorCompilation>')
+ _p(3, '<MultiProcessorCompilation>true</MultiProcessorCompilation>')
else
- _p(3,'<MultiProcessorCompilation>false</MultiProcessorCompilation>')
+ _p(3, '<MultiProcessorCompilation>false</MultiProcessorCompilation>')
end
precompiled_header(cfg)
- if cfg.flags.ExtraWarnings then
- _p(3,'<WarningLevel>Level4</WarningLevel>')
+ if cfg.flags.PedanticWarnings then
+ _p(3, '<WarningLevel>EnableAllWarnings</WarningLevel>')
+ elseif cfg.flags.ExtraWarnings then
+ _p(3, '<WarningLevel>Level4</WarningLevel>')
elseif cfg.flags.MinimumWarnings then
- _p(3,'<WarningLevel>Level1</WarningLevel>')
+ _p(3, '<WarningLevel>Level1</WarningLevel>')
else
- _p(3,'<WarningLevel>Level3</WarningLevel>')
+ _p(3 ,'<WarningLevel>Level3</WarningLevel>')
end
if cfg.flags.FatalWarnings then
- _p(3,'<TreatWarningAsError>true</TreatWarningAsError>')
+ _p(3, '<TreatWarningAsError>true</TreatWarningAsError>')
end
exceptions(cfg)
@@ -453,13 +455,16 @@
floating_point(cfg)
debug_info(cfg)
- if cfg.flags.Symbols then
- _p(3,'<ProgramDataBaseFileName>$(OutDir)%s.pdb</ProgramDataBaseFileName>'
- , path.getbasename(cfg.buildtarget.name))
+ if cfg.flags.Symbols
+ and _ACTION:sub(3) ~= "2017"
+ then
+ _p(3, '<ProgramDataBaseFileName>$(OutDir)%s.pdb</ProgramDataBaseFileName>'
+ , path.getbasename(cfg.buildtarget.name)
+ )
end
if cfg.flags.NoFramePointer then
- _p(3,'<OmitFramePointers>true</OmitFramePointers>')
+ _p(3, '<OmitFramePointers>true</OmitFramePointers>')
end
if cfg.flags.UseFullPaths then
@@ -587,6 +592,14 @@
_p(3,'<SubSystem>%s</SubSystem>', iif(cfg.kind == "ConsoleApp", "Console", "Windows"))
_p(3,'<GenerateDebugInformation>%s</GenerateDebugInformation>', tostring(cfg.flags.Symbols ~= nil))
+ if cfg.flags.Symbols
+ and _ACTION:sub(3) == "2017"
+ then
+ _p(3, '<ProgramDataBaseFileName>$(OutDir)%s.pdb</ProgramDataBaseFileName>'
+ , path.getbasename(cfg.buildtarget.name)
+ )
+ end
+
if premake.config.isoptimizedbuild(cfg.flags) then
_p(3,'<EnableCOMDATFolding>true</EnableCOMDATFolding>')
_p(3,'<OptimizeReferences>true</OptimizeReferences>')
@@ -1122,9 +1135,12 @@
--
function vc2010.debugdir(cfg)
- _p(2, '<DebuggerFlavor>%s</DebuggerFlavor>'
- , iif(cfg.platform == "Orbis", 'ORBISDebugger', 'WindowsLocalDebugger')
- )
+ local debuggerFlavor =
+ iif(cfg.platform == "Orbis", 'ORBISDebugger'
+ , iif(cfg.platform == "Durango", 'XboxOneVCppDebugger'
+ , 'WindowsLocalDebugger'
+ ))
+ _p(2, '<DebuggerFlavor>%s</DebuggerFlavor>', debuggerFlavor)
if cfg.debugdir and not vstudio.iswinrt() then
_p(2, '<LocalDebuggerWorkingDirectory>%s</LocalDebuggerWorkingDirectory>'
diff --git a/3rdparty/genie/src/actions/xcode/xcode4_workspace.lua b/3rdparty/genie/src/actions/xcode/xcode4_workspace.lua
index 2c9660152be..726a306dc6f 100644
--- a/3rdparty/genie/src/actions/xcode/xcode4_workspace.lua
+++ b/3rdparty/genie/src/actions/xcode/xcode4_workspace.lua
@@ -13,15 +13,31 @@ function xcode4.workspace_tail()
_p('</Workspace>')
end
-function xcode4.workspace_file_ref(prj)
+function xcode4.workspace_file_ref(prj, indent)
- local projpath = path.getrelative(prj.solution.location, prj.location)
- if projpath == '.' then projpath = ''
- else projpath = projpath ..'/'
- end
- _p(1,'<FileRef')
- _p(2,'location = "group:%s">',projpath .. prj.name .. '.xcodeproj')
- _p(1,'</FileRef>')
+ local projpath = path.getrelative(prj.solution.location, prj.location)
+ if projpath == '.' then projpath = ''
+ else projpath = projpath ..'/'
+ end
+ _p(indent, '<FileRef')
+ _p(indent + 1, 'location = "group:%s">', projpath .. prj.name .. '.xcodeproj')
+ _p(indent, '</FileRef>')
+end
+
+function xcode4.workspace_group(grp, indent)
+ _p(indent, '<Group')
+ _p(indent + 1, 'location = "container:"')
+ _p(indent + 1, 'name = "%s">', grp.name)
+
+ for _, child in ipairs(grp.groups) do
+ xcode4.workspace_group(child, indent + 1)
+ end
+
+ for _, prj in ipairs(grp.projects) do
+ xcode4.workspace_file_ref(prj, indent + 1)
+ end
+
+ _p(indent, '</Group>')
end
function xcode4.workspace_generate(sln)
@@ -31,8 +47,16 @@ function xcode4.workspace_generate(sln)
xcode4.reorderProjects(sln)
+ for grp in premake.solution.eachgroup(sln) do
+ if grp.parent == nil then
+ xcode4.workspace_group(grp, 1)
+ end
+ end
+
for prj in premake.solution.eachproject(sln) do
- xcode4.workspace_file_ref(prj)
+ if prj.group == nil then
+ xcode4.workspace_file_ref(prj, 1)
+ end
end
xcode4.workspace_tail()
diff --git a/3rdparty/genie/src/actions/xcode/xcode_common.lua b/3rdparty/genie/src/actions/xcode/xcode_common.lua
index 03cd5f87f23..b3f925273b8 100644
--- a/3rdparty/genie/src/actions/xcode/xcode_common.lua
+++ b/3rdparty/genie/src/actions/xcode/xcode_common.lua
@@ -654,16 +654,13 @@
local wrapperWritten = false
local function doblock(id, name, which)
- -- start with the project-level commands (most common)
- local prjcmds = tr.project[which]
- local commands = table.join(prjcmds, {})
-
- -- see if there are any config-specific commands to add
+ -- see if there are any commands to add for each config
+ local commands = {}
for _, cfg in ipairs(tr.configs) do
local cfgcmds = cfg[which]
- if #cfgcmds > #prjcmds then
+ if #cfgcmds > 0 then
table.insert(commands, 'if [ "${CONFIGURATION}" = "' .. xcode.getconfigname(cfg) .. '" ]; then')
- for i = #prjcmds + 1, #cfgcmds do
+ for i = 1, #cfgcmds do
local cmd = cfgcmds[i]
cmd = cmd:gsub('\\','\\\\')
table.insert(commands, cmd)
@@ -792,6 +789,10 @@
_p(4,'EXECUTABLE_EXTENSION = %s;', ext)
end
+ if cfg.flags.ObjcARC then
+ _p(4,'CLANG_ENABLE_OBJC_ARC = YES;')
+ end
+
local outdir = path.getdirectory(cfg.buildtarget.bundlepath)
if outdir ~= "." then
_p(4,'CONFIGURATION_BUILD_DIR = %s;', outdir)
@@ -1035,7 +1036,9 @@
_p(4,'SYMROOT = "%s";', targetdir)
end
- if cfg.flags.ExtraWarnings then
+ if cfg.flags.PedanticWarnings
+ or cfg.flags.ExtraWarnings
+ then
_p(4,'WARNING_CFLAGS = "-Wall";')
end
diff --git a/3rdparty/genie/src/base/api.lua b/3rdparty/genie/src/base/api.lua
index 34505fe8764..3a913ab9fdb 100644
--- a/3rdparty/genie/src/base/api.lua
+++ b/3rdparty/genie/src/base/api.lua
@@ -188,6 +188,7 @@
EnableSSE2 = 1,
EnableAVX = 1,
EnableAVX2 = 1,
+ PedanticWarnings = 1,
ExtraWarnings = 1,
FatalWarnings = 1,
FloatFast = 1,
@@ -213,6 +214,7 @@
FastCall = 1,
StdCall = 1,
SingleOutputDir = 1,
+ ObjcARC = 1,
Optimize = 1,
OptimizeSize = 1,
OptimizeSpeed = 1,
@@ -399,7 +401,7 @@
return value
end,
linkagecopy = true,
- --mergecopiestotail = true,
+ mergecopiestotail = true,
},
location =
@@ -1090,10 +1092,17 @@
table.insert(sln.groups, group)
sln.groups[inpath] = group
+ -- add to the parent's child list
+ if parent ~= nil then
+ table.insert(parent.groups, group)
+ end
+
group.solution = sln
group.name = name
group.uuid = os.uuid(curpath)
group.parent = parent
+ group.projects = { }
+ group.groups = { }
return group
end
@@ -1162,6 +1171,9 @@
local group = creategroupsfrompath(premake.CurrentGroup, sln)
+ if group ~= nil then
+ table.insert(group.projects, prj)
+ end
prj.solution = sln
prj.name = name
diff --git a/3rdparty/genie/src/host/scripts.c b/3rdparty/genie/src/host/scripts.c
index e2f7deef557..be2711828b5 100644
--- a/3rdparty/genie/src/host/scripts.c
+++ b/3rdparty/genie/src/host/scripts.c
@@ -87,24 +87,24 @@ const char* builtin_scripts[] = {
/* base/api.lua */
"premake.fields =\n{\narchivesplit_size =\n{\nkind = \"string\",\nscope = \"config\",\n},\nbasedir =\n{\nkind = \"path\",\nscope = \"container\",\n},\nbuildaction =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"Compile\",\n\"Copy\",\n\"Embed\",\n\"None\"\n}\n},\nbuildoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_asm =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_c =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_cpp =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_objc =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_objcpp =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_vala =\n{\nkind = \"list\",\nscope = \"config\",\n},\nclrreferences =\n{\nkind = \"list\",\nscope = \"container\",\n},\nconfigurations =\n{\nkind = \"list\",\nscope = \"solution\",\n},\ncustombuildtask =\n{\nkind = \"table\",\nscope = \"config\",\n},\ndebugargs =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndebugdir =\n{\nkind"
- " = \"path\",\nscope = \"config\",\n},\ndebugenvs =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndeploymentoptions =\n{\nkind = \"list\",\nscope = \"config\",\nusagecopy = true,\n},\ndependency =\n{\nkind = \"table\",\nscope = \"config\",\n},\ndeploymode =\n{\nkind = \"string\",\nscope = \"config\",\n},\nexcludes =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nforcenative =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nnopch =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nfiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nremovefiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nflags =\n{\nkind = \"list\",\nscope = \"config\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_flags = {\nATL = 1,\nC7DebugInfo = 1,\nDebugEnvsDontMerge = 1,\nDebugEnvsInherit = 1,\nDeploymentContent = 1,\nEnableMinimalRebuild = 1,\nEnableSSE = 1,\nEnableSSE2 = 1,\nEnableAVX = 1,\nEnableAVX2 = 1,\nExtraWarni"
- "ngs = 1,\nFatalWarnings = 1,\nFloatFast = 1,\nFloatStrict = 1,\nManaged = 1,\nMinimumWarnings = 1,\nMFC = 1,\nNativeWChar = 1,\nNo64BitChecks = 1,\nNoBufferSecurityCheck = 1,\nNoEditAndContinue = 1,\nNoExceptions = 1,\nNoFramePointer = 1,\nNoImportLib = 1,\nNoIncrementalLink = 1,\nNoManifest = 1,\nNoMultiProcessorCompilation = 1,\nNoNativeWChar = 1,\nNoPCH = 1,\nNoRTTI = 1,\nNoWinMD = 1, -- explicitly disables Windows Metadata\nNoWinRT = 1, -- explicitly disables Windows Runtime Extension\nFastCall = 1,\nStdCall = 1,\nSingleOutputDir = 1,\nOptimize = 1,\nOptimizeSize = 1,\nOptimizeSpeed = 1,\nDebugRuntime = 1,\nReleaseRuntime = 1,\nSEH = 1,\nStaticATL = 1,\nStaticRuntime = 1,\nSymbols = 1,\nUnicode = 1,\nUnsafe = 1,\nUnsignedChar = 1,\nUseFullPaths = 1,\nWinMain = 1,\n}\nlocal englishToAmericanSpelling =\n{\noptimise = 'optimize',\noptimisesize = 'optimizesize',\noptimisespeed = 'optimizespeed',\n}\nlocal lowervalue = value:lower()\nlowervalue = englishToAmericanSpelling[lowervalue] or lowervalue\nfor v,"
- " _ in pairs(allowed_flags) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid flag\"\nend,\n},\nframework =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"1.0\",\n\"1.1\",\n\"2.0\",\n\"3.0\",\n\"3.5\",\n\"4.0\",\n\"4.5\",\n\"4.5.1\",\n\"4.5.2\",\n\"4.6\",\n\"4.6.1\",\n\"4.6.2\",\n}\n},\nwindowstargetplatformversion =\n{\nkind = \"string\",\nscope = \"project\",\n},\nwindowstargetplatformminversion =\n{\nkind = \"string\",\nscope = \"project\",\n},\nforcedincludes =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimagepath =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimageoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimplibdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimplibextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibname =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nincludedirs =\n{\nk"
- "ind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nuserincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nusingdirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nkind =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"ConsoleApp\",\n\"WindowedApp\",\n\"StaticLib\",\n\"SharedLib\",\n\"Bundle\",\n}\n},\nlanguage =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"C\",\n\"C++\",\n\"C#\",\n\"Vala\",\n\"Swift\",\n}\n},\nlibdirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nlinkagecopy = true,\n},\nlinkoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nlinks =\n{\nkind = \"list\",\nscope = \"config\",\nallowed = function(value)\nif value:find('/', nil, true) then\nvalue = path.getabsolute(value)\nend\nreturn value\nend,\nlinkagecopy = true,\n},\nlocation =\n{\nkind = \"path\",\nscope = \"container\",\n},\nmakesettings =\n{\nkind = \"list\",\nscope = \"config\",\n},\nmessageskip =\n{\nkind = \"list\",\nscop"
- "e = \"solution\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_messages = {\nSkipCreatingMessage = 1,\nSkipBuildingMessage = 1,\nSkipCleaningMessage = 1,\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_messages) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid message to skip\"\nend,\n},\nmsgarchiving =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgcompile =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgprecompile =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgcompile_objc =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgresource =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsglinking =\n{\nkind = \"string\",\nscope = \"config\",\n},\nobjdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\noptions =\n{\nkind = \"list\",\nscope = \"container\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_options = {\nForceCPP = 1,\nArchiveSplit = 1\n}\nlocal lowervalue = value:lo"
- "wer()\nfor v, _ in pairs(allowed_options) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid option\"\nend,\n},\npchheader =\n{\nkind = \"string\",\nscope = \"config\",\n},\npchsource =\n{\nkind = \"path\",\nscope = \"config\",\n},\nplatforms =\n{\nkind = \"list\",\nscope = \"solution\",\nallowed = table.keys(premake.platforms),\n},\npostbuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprebuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\npostcompiletasks =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprelinkcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\npropertysheets =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\npullmappingfile =\n{\nkind = \"path\",\nscope = \"config\",\n},\nresdefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\nresincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nresoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nsdkreferences =\n{\nkind = \"list\",\nscope = \"config\",\n},\nst"
- "artproject =\n{\nkind = \"string\",\nscope = \"solution\",\n},\ntargetdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\ntargetsubdir =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetname =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntrimpaths =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nuuid =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = function(value)\nlocal ok = true\nif (#value ~= 36) then ok = false end\nfor i=1,36 do\nlocal ch = value:sub(i,i)\nif (not ch:find(\"[ABCDEFabcdef0123456789-]\")) then ok = false end\nend\nif (value:sub(9,9) ~= \"-\") then ok = false end\nif (value:sub(14,14) ~= \"-\") then ok = false end\nif (value:sub(19,19) ~= \"-\") then ok = false end\nif (value:sub(24,24) ~= \"-\") then ok = false end\nif (not ok) then\nreturn nil, \"invalid UUID\"\ne"
- "nd\nreturn value:upper()\nend\n},\nuses =\n{\nkind = \"list\",\nscope = \"config\",\n},\nvapidirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nvpaths =\n{\nkind = \"keypath\",\nscope = \"container\",\n},\nvsimportreferences =\n{\nkind = \"filelist\",\nscope = \"container\",\n},\nswiftmodulemaps =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nbuildoptions_swift =\n{\nkind = \"list\",\nscope = \"config\",\n},\nlinkoptions_swift =\n{\nkind = \"list\",\nscope = \"config\",\n},\n}\npremake.check_paths = false\nfunction premake.checkvalue(value, allowed)\nif (allowed) then\nif (type(allowed) == \"function\") then\nreturn allowed(value)\nelse\nfor _,v in ipairs(allowed) do\nif (value:lower() == v:lower()) then\nreturn v\nend\nend\nreturn nil, \"invalid value '\" .. value .. \"'\"\nend\nelse\nreturn value\nend\nend\nfunction premake.getobject(t)\nlocal container\nif (t == \"container\" or t == \"solution\") then\ncontainer = premake.CurrentContainer\nelse\ncontainer = premake.CurrentConfiguration\nend"
- "\nif t == \"solution\" then\nif typex(container) == \"project\" then\ncontainer = container.solution\nend\nif typex(container) ~= \"solution\" then\ncontainer = nil\nend\nend\nlocal msg\nif (not container) then\nif (t == \"container\") then\nmsg = \"no active solution or project\"\nelseif (t == \"solution\") then\nmsg = \"no active solution\"\nelse\nmsg = \"no active solution, project, or configuration\"\nend\nend\nreturn container, msg\nend\nfunction premake.setarray(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldname] or {}\nlocal function add(value, depth)\nif type(value) == \"table\" then\nfor _,v in ipairs(value) do\nadd(v, depth + 1)\nend\nelse\nvalue, err = premake.checkvalue(value, allowed)\nif not value then\nerror(err, depth)\nend\ntable.insert(obj[fieldname], value)\nend\nend\nif value then\nadd(value, 5)\nend\nreturn obj[fieldname]\nend\nfunction premake.settable(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldname] or {}\ntable.insert(obj[fieldname], value)\nreturn obj[field"
- "name]\nend\nlocal function domatchedarray(fields, value, matchfunc)\nlocal result = { }\nfunction makeabsolute(value, depth)\nif (type(value) == \"table\") then\nfor _, item in ipairs(value) do\nmakeabsolute(item, depth + 1)\nend\nelseif type(value) == \"string\" then\nif value:find(\"*\") then\nlocal arr = matchfunc(value);\nif (premake.check_paths) and (#arr == 0) then\nerror(\"Can't find matching files for pattern :\" .. value)\nend\nmakeabsolute(arr, depth + 1)\nelse\ntable.insert(result, path.getabsolute(value))\nend\nelse\nerror(\"Invalid value in list: expected string, got \" .. type(value), depth)\nend\nend\nmakeabsolute(value, 3)\nlocal retval = {}\nfor index, field in ipairs(fields) do\nlocal ctype = field[1]\nlocal fieldname = field[2]\nlocal array = premake.setarray(ctype, fieldname, result)\nif index == 1 then\nretval = array\nend\nend\nreturn retval\nend\nfunction premake.setdirarray(fields, value)\nreturn domatchedarray(fields, value, os.matchdirs)\nend\nfunction premake.setfilearray(fields, val"
- "ue)\nreturn domatchedarray(fields, value, os.matchfiles)\nend\nfunction premake.setkeyvalue(ctype, fieldname, values)\nlocal container, err = premake.getobject(ctype)\nif not container then\nerror(err, 4)\nend\nif not container[fieldname] then\ncontainer[fieldname] = {}\nend\nif type(values) ~= \"table\" then\nerror(\"invalid value; table expected\", 4)\nend\nlocal field = container[fieldname]\nfor key,value in pairs(values) do\nif not field[key] then\nfield[key] = {}\nend\ntable.insertflat(field[key], value)\nend\nreturn field\nend\nfunction premake.setstring(ctype, fieldname, value, allowed)\nlocal container, err = premake.getobject(ctype)\nif (not container) then\nerror(err, 4)\nend\nif (value) then\nvalue, err = premake.checkvalue(value, allowed)\nif (not value) then\nerror(err, 4)\nend\ncontainer[fieldname] = value\nend\nreturn container[fieldname]\nend\nfunction premake.remove(fieldname, value)\nlocal cfg = premake.CurrentConfiguration\ncfg.removes = cfg.removes or {}\ncfg.removes[fieldname] = premake.se"
- "tarray(cfg.removes, fieldname, value)\nend\nlocal function accessor(name, value)\nlocal kind = premake.fields[name].kind\nlocal scope = premake.fields[name].scope\nlocal allowed = premake.fields[name].allowed\nif (kind == \"string\" or kind == \"path\") and value then\nif type(value) ~= \"string\" then\nerror(\"string value expected\", 3)\nend\nend\nlocal container, err = premake.getobject(scope)\nif (not container) then\nerror(err, 3)\nend\nif kind == \"string\" then\nreturn premake.setstring(scope, name, value, allowed)\nelseif kind == \"path\" then\nif value then value = path.getabsolute(value) end\nreturn premake.setstring(scope, name, value)\nelseif kind == \"list\" then\nreturn premake.setarray(container, name, value, allowed)\nelseif kind == \"table\" then\nreturn premake.settable(container, name, value, allowed)\nelseif kind == \"dirlist\" then\nreturn premake.setdirarray({{container, name}}, value)\nelseif kind == \"filelist\" or kind == \"absolutefilelist\" then\nlocal fields = {{container, name"
- "}}\nif name == \"files\" then\nlocal prj, err = premake.getobject(\"container\")\nif (not prj) then\nerror(err, 2)\nend\ntable.insert(fields, {prj.blocks[1], \"allfiles\"})\nend\nreturn premake.setfilearray(fields, value)\nelseif kind == \"keyvalue\" or kind == \"keypath\" then\nreturn premake.setkeyvalue(scope, name, value)\nend\nend\nfor name, info in pairs(premake.fields) do\n_G[name] = function(value)\nreturn accessor(name, value)\nend\nif info.kind == \"list\"\nor info.kind == \"dirlist\"\nor info.kind == \"filelist\"\nor info.kind == \"absolutefilelist\"\nthen\nif name ~= \"removefiles\"\nand name ~= \"files\" then\n_G[\"remove\"..name] = function(value)\npremake.remove(name, value)\nend\nend\nend\nend\nfunction configuration(terms)\nif not terms then\nreturn premake.CurrentConfiguration\nend\nlocal container, err = premake.getobject(\"container\")\nif (not container) then\nerror(err, 2)\nend\nlocal cfg = { }\ncfg.terms = table.flatten({terms})\ntable.insert(container.blocks, cfg)\npremake.CurrentConfig"
- "uration = cfg\ncfg.keywords = { }\nfor _, word in ipairs(cfg.terms) do\ntable.insert(cfg.keywords, path.wildcards(word):lower())\nend\nfor name, field in pairs(premake.fields) do\nif (field.kind ~= \"string\" and field.kind ~= \"path\") then\ncfg[name] = { }\nend\nend\nreturn cfg\nend\nlocal function creategroup(name, sln, curpath, parent, inpath)\nlocal group = {}\nsetmetatable(group, {\n__type = \"group\"\n})\ntable.insert(sln.groups, group)\nsln.groups[inpath] = group\ngroup.solution = sln\ngroup.name = name\ngroup.uuid = os.uuid(curpath)\ngroup.parent = parent\nreturn group\nend\nlocal function creategroupsfrompath(inpath, sln)\nif inpath == nil then return nil end\ninpath = path.translate(inpath, \"/\")\nlocal groups = string.explode(inpath, \"/\")\nlocal curpath = \"\"\nlocal lastgroup = nil\nfor i, v in ipairs(groups) do\ncurpath = curpath .. \"/\" .. v:lower()\nlocal group = sln.groups[curpath]\nif group == nil then\ngroup = creategroup(v, sln, curpath, lastgroup, curpath)\nend\nlastgroup = group\nend"
- "\nreturn lastgroup\nend\nlocal function createproject(name, sln, isUsage)\nlocal prj = {}\nsetmetatable(prj, {\n__type = \"project\",\n})\ntable.insert(sln.projects, prj)\nif(isUsage) then\nif(sln.projects[name]) then\nsln.projects[name].usageProj = prj;\nelse\nsln.projects[name] = prj\nend\nelse\nif(sln.projects[name]) then\nprj.usageProj = sln.projects[name];\nend\nsln.projects[name] = prj\nend\nlocal group = creategroupsfrompath(premake.CurrentGroup, sln)\nprj.solution = sln\nprj.name = name\nprj.basedir = os.getcwd()\nprj.uuid = os.uuid(prj.name)\nprj.blocks = { }\nprj.usage = isUsage\nprj.group = group\nreturn prj;\nend\nfunction usage(name)\nif (not name) then\nif(typex(premake.CurrentContainer) ~= \"project\") then return nil end\nif(not premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (typex(premake.CurrentContainer) == \"project\") then\nsln = premake.CurrentContainer.solution\nelse\nsln "
- "= premake.CurrentContainer\nend\nif (typex(sln) ~= \"solution\") then\nerror(\"no active solution\", 2)\nend\nif((not sln.projects[name]) or\n((not sln.projects[name].usage) and (not sln.projects[name].usageProj))) then\npremake.CurrentContainer = createproject(name, sln, true)\nelse\npremake.CurrentContainer = iff(sln.projects[name].usage,\nsln.projects[name], sln.projects[name].usageProj)\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction project(name)\nif (not name) then\nif(typex(premake.CurrentContainer) ~= \"project\") then return nil end\nif(premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (typex(premake.CurrentContainer) == \"project\") then\nsln = premake.CurrentContainer.solution\nelse\nsln = premake.CurrentContainer\nend\nif (typex(sln) ~= \"solution\") then\nerror(\"no active solution\", 2)\nend\nif((not sln.projects[name]) or sln.projects[name].usage) then\npremake.CurrentContainer = createproject(name, sln)\nelse\npremak"
- "e.CurrentContainer = sln.projects[name];\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction solution(name)\nif not name then\nif typex(premake.CurrentContainer) == \"project\" then\nreturn premake.CurrentContainer.solution\nelse\nreturn premake.CurrentContainer\nend\nend\npremake.CurrentContainer = premake.solution.get(name)\nif (not premake.CurrentContainer) then\npremake.CurrentContainer = premake.solution.new(name)\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction group(name)\nif not name then\nreturn premake.CurrentGroup\nend\npremake.CurrentGroup = name\nreturn premake.CurrentGroup\nend\nfunction importvsproject(location)\nif string.find(_ACTION, \"vs\") ~= 1 then\nerror(\"Only available for visual studio actions\")\nend\nsln, err = premake.getobject(\"solution\")\nif not sln then\nerror(err)\nend\nlocal group = creategroupsfrompath(premake.CurrentGroup, sln)\nlocal project = {}\nproject.location = location\nproject.group = group\nproject.flags = {}\ntable.insert"
- "(sln.importedprojects, project)\n end\nfunction newaction(a)\npremake.action.add(a)\nend\nfunction newoption(opt)\npremake.option.add(opt)\nend\nfunction enablefilelevelconfig()\npremake._filelevelconfig = true\nend\n",
+ " = \"path\",\nscope = \"config\",\n},\ndebugenvs =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndeploymentoptions =\n{\nkind = \"list\",\nscope = \"config\",\nusagecopy = true,\n},\ndependency =\n{\nkind = \"table\",\nscope = \"config\",\n},\ndeploymode =\n{\nkind = \"string\",\nscope = \"config\",\n},\nexcludes =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nforcenative =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nnopch =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nfiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nremovefiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nflags =\n{\nkind = \"list\",\nscope = \"config\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_flags = {\nATL = 1,\nC7DebugInfo = 1,\nDebugEnvsDontMerge = 1,\nDebugEnvsInherit = 1,\nDeploymentContent = 1,\nEnableMinimalRebuild = 1,\nEnableSSE = 1,\nEnableSSE2 = 1,\nEnableAVX = 1,\nEnableAVX2 = 1,\nPedanticWa"
+ "rnings = 1,\nExtraWarnings = 1,\nFatalWarnings = 1,\nFloatFast = 1,\nFloatStrict = 1,\nManaged = 1,\nMinimumWarnings = 1,\nMFC = 1,\nNativeWChar = 1,\nNo64BitChecks = 1,\nNoBufferSecurityCheck = 1,\nNoEditAndContinue = 1,\nNoExceptions = 1,\nNoFramePointer = 1,\nNoImportLib = 1,\nNoIncrementalLink = 1,\nNoManifest = 1,\nNoMultiProcessorCompilation = 1,\nNoNativeWChar = 1,\nNoPCH = 1,\nNoRTTI = 1,\nNoWinMD = 1, -- explicitly disables Windows Metadata\nNoWinRT = 1, -- explicitly disables Windows Runtime Extension\nFastCall = 1,\nStdCall = 1,\nSingleOutputDir = 1,\nObjcARC = 1,\nOptimize = 1,\nOptimizeSize = 1,\nOptimizeSpeed = 1,\nDebugRuntime = 1,\nReleaseRuntime = 1,\nSEH = 1,\nStaticATL = 1,\nStaticRuntime = 1,\nSymbols = 1,\nUnicode = 1,\nUnsafe = 1,\nUnsignedChar = 1,\nUseFullPaths = 1,\nWinMain = 1,\n}\nlocal englishToAmericanSpelling =\n{\noptimise = 'optimize',\noptimisesize = 'optimizesize',\noptimisespeed = 'optimizespeed',\n}\nlocal lowervalue = value:lower()\nlowervalue = englishToAmericanSpell"
+ "ing[lowervalue] or lowervalue\nfor v, _ in pairs(allowed_flags) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid flag\"\nend,\n},\nframework =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"1.0\",\n\"1.1\",\n\"2.0\",\n\"3.0\",\n\"3.5\",\n\"4.0\",\n\"4.5\",\n\"4.5.1\",\n\"4.5.2\",\n\"4.6\",\n\"4.6.1\",\n\"4.6.2\",\n}\n},\nwindowstargetplatformversion =\n{\nkind = \"string\",\nscope = \"project\",\n},\nwindowstargetplatformminversion =\n{\nkind = \"string\",\nscope = \"project\",\n},\nforcedincludes =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimagepath =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimageoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimplibdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimplibextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibname =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibsuffix =\n{\nkind = \"string\",\nscope ="
+ " \"config\",\n},\nincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nuserincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nusingdirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nkind =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"ConsoleApp\",\n\"WindowedApp\",\n\"StaticLib\",\n\"SharedLib\",\n\"Bundle\",\n}\n},\nlanguage =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"C\",\n\"C++\",\n\"C#\",\n\"Vala\",\n\"Swift\",\n}\n},\nlibdirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nlinkagecopy = true,\n},\nlinkoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nlinks =\n{\nkind = \"list\",\nscope = \"config\",\nallowed = function(value)\nif value:find('/', nil, true) then\nvalue = path.getabsolute(value)\nend\nreturn value\nend,\nlinkagecopy = true,\nmergecopiestotail = true,\n},\nlocation =\n{\nkind = \"path\",\nscope = \"container\",\n},\nmakesettings =\n{\nkind = \"list\",\nsc"
+ "ope = \"config\",\n},\nmessageskip =\n{\nkind = \"list\",\nscope = \"solution\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_messages = {\nSkipCreatingMessage = 1,\nSkipBuildingMessage = 1,\nSkipCleaningMessage = 1,\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_messages) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid message to skip\"\nend,\n},\nmsgarchiving =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgcompile =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgprecompile =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgcompile_objc =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgresource =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsglinking =\n{\nkind = \"string\",\nscope = \"config\",\n},\nobjdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\noptions =\n{\nkind = \"list\",\nscope = \"container\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_options = {"
+ "\nForceCPP = 1,\nArchiveSplit = 1\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_options) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid option\"\nend,\n},\npchheader =\n{\nkind = \"string\",\nscope = \"config\",\n},\npchsource =\n{\nkind = \"path\",\nscope = \"config\",\n},\nplatforms =\n{\nkind = \"list\",\nscope = \"solution\",\nallowed = table.keys(premake.platforms),\n},\npostbuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprebuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\npostcompiletasks =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprelinkcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\npropertysheets =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\npullmappingfile =\n{\nkind = \"path\",\nscope = \"config\",\n},\nresdefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\nresincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nresoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\ns"
+ "dkreferences =\n{\nkind = \"list\",\nscope = \"config\",\n},\nstartproject =\n{\nkind = \"string\",\nscope = \"solution\",\n},\ntargetdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\ntargetsubdir =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetname =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntrimpaths =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nuuid =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = function(value)\nlocal ok = true\nif (#value ~= 36) then ok = false end\nfor i=1,36 do\nlocal ch = value:sub(i,i)\nif (not ch:find(\"[ABCDEFabcdef0123456789-]\")) then ok = false end\nend\nif (value:sub(9,9) ~= \"-\") then ok = false end\nif (value:sub(14,14) ~= \"-\") then ok = false end\nif (value:sub(19,19) ~= \"-\") then ok = false end\nif (value:sub(24,24) ~= \"-\") then "
+ "ok = false end\nif (not ok) then\nreturn nil, \"invalid UUID\"\nend\nreturn value:upper()\nend\n},\nuses =\n{\nkind = \"list\",\nscope = \"config\",\n},\nvapidirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nvpaths =\n{\nkind = \"keypath\",\nscope = \"container\",\n},\nvsimportreferences =\n{\nkind = \"filelist\",\nscope = \"container\",\n},\nswiftmodulemaps =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nbuildoptions_swift =\n{\nkind = \"list\",\nscope = \"config\",\n},\nlinkoptions_swift =\n{\nkind = \"list\",\nscope = \"config\",\n},\n}\npremake.check_paths = false\nfunction premake.checkvalue(value, allowed)\nif (allowed) then\nif (type(allowed) == \"function\") then\nreturn allowed(value)\nelse\nfor _,v in ipairs(allowed) do\nif (value:lower() == v:lower()) then\nreturn v\nend\nend\nreturn nil, \"invalid value '\" .. value .. \"'\"\nend\nelse\nreturn value\nend\nend\nfunction premake.getobject(t)\nlocal container\nif (t == \"container\" or t == \"solution\") then\ncontainer = premake.Curr"
+ "entContainer\nelse\ncontainer = premake.CurrentConfiguration\nend\nif t == \"solution\" then\nif typex(container) == \"project\" then\ncontainer = container.solution\nend\nif typex(container) ~= \"solution\" then\ncontainer = nil\nend\nend\nlocal msg\nif (not container) then\nif (t == \"container\") then\nmsg = \"no active solution or project\"\nelseif (t == \"solution\") then\nmsg = \"no active solution\"\nelse\nmsg = \"no active solution, project, or configuration\"\nend\nend\nreturn container, msg\nend\nfunction premake.setarray(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldname] or {}\nlocal function add(value, depth)\nif type(value) == \"table\" then\nfor _,v in ipairs(value) do\nadd(v, depth + 1)\nend\nelse\nvalue, err = premake.checkvalue(value, allowed)\nif not value then\nerror(err, depth)\nend\ntable.insert(obj[fieldname], value)\nend\nend\nif value then\nadd(value, 5)\nend\nreturn obj[fieldname]\nend\nfunction premake.settable(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldn"
+ "ame] or {}\ntable.insert(obj[fieldname], value)\nreturn obj[fieldname]\nend\nlocal function domatchedarray(fields, value, matchfunc)\nlocal result = { }\nfunction makeabsolute(value, depth)\nif (type(value) == \"table\") then\nfor _, item in ipairs(value) do\nmakeabsolute(item, depth + 1)\nend\nelseif type(value) == \"string\" then\nif value:find(\"*\") then\nlocal arr = matchfunc(value);\nif (premake.check_paths) and (#arr == 0) then\nerror(\"Can't find matching files for pattern :\" .. value)\nend\nmakeabsolute(arr, depth + 1)\nelse\ntable.insert(result, path.getabsolute(value))\nend\nelse\nerror(\"Invalid value in list: expected string, got \" .. type(value), depth)\nend\nend\nmakeabsolute(value, 3)\nlocal retval = {}\nfor index, field in ipairs(fields) do\nlocal ctype = field[1]\nlocal fieldname = field[2]\nlocal array = premake.setarray(ctype, fieldname, result)\nif index == 1 then\nretval = array\nend\nend\nreturn retval\nend\nfunction premake.setdirarray(fields, value)\nreturn domatchedarray(fields, val"
+ "ue, os.matchdirs)\nend\nfunction premake.setfilearray(fields, value)\nreturn domatchedarray(fields, value, os.matchfiles)\nend\nfunction premake.setkeyvalue(ctype, fieldname, values)\nlocal container, err = premake.getobject(ctype)\nif not container then\nerror(err, 4)\nend\nif not container[fieldname] then\ncontainer[fieldname] = {}\nend\nif type(values) ~= \"table\" then\nerror(\"invalid value; table expected\", 4)\nend\nlocal field = container[fieldname]\nfor key,value in pairs(values) do\nif not field[key] then\nfield[key] = {}\nend\ntable.insertflat(field[key], value)\nend\nreturn field\nend\nfunction premake.setstring(ctype, fieldname, value, allowed)\nlocal container, err = premake.getobject(ctype)\nif (not container) then\nerror(err, 4)\nend\nif (value) then\nvalue, err = premake.checkvalue(value, allowed)\nif (not value) then\nerror(err, 4)\nend\ncontainer[fieldname] = value\nend\nreturn container[fieldname]\nend\nfunction premake.remove(fieldname, value)\nlocal cfg = premake.CurrentConfiguration\ncfg"
+ ".removes = cfg.removes or {}\ncfg.removes[fieldname] = premake.setarray(cfg.removes, fieldname, value)\nend\nlocal function accessor(name, value)\nlocal kind = premake.fields[name].kind\nlocal scope = premake.fields[name].scope\nlocal allowed = premake.fields[name].allowed\nif (kind == \"string\" or kind == \"path\") and value then\nif type(value) ~= \"string\" then\nerror(\"string value expected\", 3)\nend\nend\nlocal container, err = premake.getobject(scope)\nif (not container) then\nerror(err, 3)\nend\nif kind == \"string\" then\nreturn premake.setstring(scope, name, value, allowed)\nelseif kind == \"path\" then\nif value then value = path.getabsolute(value) end\nreturn premake.setstring(scope, name, value)\nelseif kind == \"list\" then\nreturn premake.setarray(container, name, value, allowed)\nelseif kind == \"table\" then\nreturn premake.settable(container, name, value, allowed)\nelseif kind == \"dirlist\" then\nreturn premake.setdirarray({{container, name}}, value)\nelseif kind == \"filelist\" or ki"
+ "nd == \"absolutefilelist\" then\nlocal fields = {{container, name}}\nif name == \"files\" then\nlocal prj, err = premake.getobject(\"container\")\nif (not prj) then\nerror(err, 2)\nend\ntable.insert(fields, {prj.blocks[1], \"allfiles\"})\nend\nreturn premake.setfilearray(fields, value)\nelseif kind == \"keyvalue\" or kind == \"keypath\" then\nreturn premake.setkeyvalue(scope, name, value)\nend\nend\nfor name, info in pairs(premake.fields) do\n_G[name] = function(value)\nreturn accessor(name, value)\nend\nif info.kind == \"list\"\nor info.kind == \"dirlist\"\nor info.kind == \"filelist\"\nor info.kind == \"absolutefilelist\"\nthen\nif name ~= \"removefiles\"\nand name ~= \"files\" then\n_G[\"remove\"..name] = function(value)\npremake.remove(name, value)\nend\nend\nend\nend\nfunction configuration(terms)\nif not terms then\nreturn premake.CurrentConfiguration\nend\nlocal container, err = premake.getobject(\"container\")\nif (not container) then\nerror(err, 2)\nend\nlocal cfg = { }\ncfg.terms = table.flatten({te"
+ "rms})\ntable.insert(container.blocks, cfg)\npremake.CurrentConfiguration = cfg\ncfg.keywords = { }\nfor _, word in ipairs(cfg.terms) do\ntable.insert(cfg.keywords, path.wildcards(word):lower())\nend\nfor name, field in pairs(premake.fields) do\nif (field.kind ~= \"string\" and field.kind ~= \"path\") then\ncfg[name] = { }\nend\nend\nreturn cfg\nend\nlocal function creategroup(name, sln, curpath, parent, inpath)\nlocal group = {}\nsetmetatable(group, {\n__type = \"group\"\n})\ntable.insert(sln.groups, group)\nsln.groups[inpath] = group\nif parent ~= nil then\ntable.insert(parent.groups, group)\nend\ngroup.solution = sln\ngroup.name = name\ngroup.uuid = os.uuid(curpath)\ngroup.parent = parent\ngroup.projects = { }\ngroup.groups = { }\nreturn group\nend\nlocal function creategroupsfrompath(inpath, sln)\nif inpath == nil then return nil end\ninpath = path.translate(inpath, \"/\")\nlocal groups = string.explode(inpath, \"/\")\nlocal curpath = \"\"\nlocal lastgroup = nil\nfor i, v in ipairs(groups) do\ncurpath = cur"
+ "path .. \"/\" .. v:lower()\nlocal group = sln.groups[curpath]\nif group == nil then\ngroup = creategroup(v, sln, curpath, lastgroup, curpath)\nend\nlastgroup = group\nend\nreturn lastgroup\nend\nlocal function createproject(name, sln, isUsage)\nlocal prj = {}\nsetmetatable(prj, {\n__type = \"project\",\n})\ntable.insert(sln.projects, prj)\nif(isUsage) then\nif(sln.projects[name]) then\nsln.projects[name].usageProj = prj;\nelse\nsln.projects[name] = prj\nend\nelse\nif(sln.projects[name]) then\nprj.usageProj = sln.projects[name];\nend\nsln.projects[name] = prj\nend\nlocal group = creategroupsfrompath(premake.CurrentGroup, sln)\nif group ~= nil then\ntable.insert(group.projects, prj)\nend\nprj.solution = sln\nprj.name = name\nprj.basedir = os.getcwd()\nprj.uuid = os.uuid(prj.name)\nprj.blocks = { }\nprj.usage = isUsage\nprj.group = group\nreturn prj;\nend\nfunction usage(name)\nif (not name) then\nif(typex(premake.CurrentContainer) ~= \"project\") then re"
+ "turn nil end\nif(not premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (typex(premake.CurrentContainer) == \"project\") then\nsln = premake.CurrentContainer.solution\nelse\nsln = premake.CurrentContainer\nend\nif (typex(sln) ~= \"solution\") then\nerror(\"no active solution\", 2)\nend\nif((not sln.projects[name]) or\n((not sln.projects[name].usage) and (not sln.projects[name].usageProj))) then\npremake.CurrentContainer = createproject(name, sln, true)\nelse\npremake.CurrentContainer = iff(sln.projects[name].usage,\nsln.projects[name], sln.projects[name].usageProj)\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction project(name)\nif (not name) then\nif(typex(premake.CurrentContainer) ~= \"project\") then return nil end\nif(premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (typex(premake.CurrentContainer) == \"project\") then\nsln = premake.CurrentContainer.solution\nelse\nsln = prem"
+ "ake.CurrentContainer\nend\nif (typex(sln) ~= \"solution\") then\nerror(\"no active solution\", 2)\nend\nif((not sln.projects[name]) or sln.projects[name].usage) then\npremake.CurrentContainer = createproject(name, sln)\nelse\npremake.CurrentContainer = sln.projects[name];\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction solution(name)\nif not name then\nif typex(premake.CurrentContainer) == \"project\" then\nreturn premake.CurrentContainer.solution\nelse\nreturn premake.CurrentContainer\nend\nend\npremake.CurrentContainer = premake.solution.get(name)\nif (not premake.CurrentContainer) then\npremake.CurrentContainer = premake.solution.new(name)\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction group(name)\nif not name then\nreturn premake.CurrentGroup\nend\npremake.CurrentGroup = name\nreturn premake.CurrentGroup\nend\nfunction importvsproject(location)\nif string.find(_ACTION, \"vs\") ~= 1 then\nerror(\"Only available for visual studio actions\")\nend\nsln, err = pr"
+ "emake.getobject(\"solution\")\nif not sln then\nerror(err)\nend\nlocal group = creategroupsfrompath(premake.CurrentGroup, sln)\nlocal project = {}\nproject.location = location\nproject.group = group\nproject.flags = {}\ntable.insert(sln.importedprojects, project)\n end\nfunction newaction(a)\npremake.action.add(a)\nend\nfunction newoption(opt)\npremake.option.add(opt)\nend\nfunction enablefilelevelconfig()\npremake._filelevelconfig = true\nend\n",
/* base/cmdline.lua */
"newoption\n{\ntrigger = \"cc\",\nvalue = \"VALUE\",\ndescription = \"Choose a C/C++ compiler set\",\nallowed = {\n{ \"gcc\", \"GNU GCC (gcc/g++)\" },\n{ \"ow\", \"OpenWatcom\" },\n{ \"ghs\", \"Green Hills Software\" },\n}\n}\nnewoption\n{\ntrigger = \"dotnet\",\nvalue = \"VALUE\",\ndescription = \"Choose a .NET compiler set\",\nallowed = {\n{ \"msnet\", \"Microsoft .NET (csc)\" },\n{ \"mono\", \"Novell Mono (mcs)\" },\n{ \"pnet\", \"Portable.NET (cscc)\" },\n}\n}\nnewoption\n{\ntrigger = \"file\",\nvalue = \"FILE\",\ndescription = \"Read FILE as a Premake script; default is 'premake4.lua'\"\n}\nnewoption\n{\ntrigger = \"help\",\ndescription = \"Display this information\"\n}\nnewoption\n{\ntrigger = \"os\",\nvalue = \"VALUE\",\ndescription = \"Generate files for a different operating system\",\nallowed = {\n{ \"bsd\", \"OpenBSD, NetBSD, or FreeBSD\" },\n{ \"linux\", \"Linux\" },\n{ \"macosx\", \"Apple Mac OS X\" },\n{ \"solaris\", \"Sola"
@@ -138,12 +138,12 @@ const char* builtin_scripts[] = {
"gs(cfg)\nlocal result = table.translate(cfg.flags, flags)\nreturn result\nend\nfunction premake.dotnet.getkind(cfg)\nif (cfg.kind == \"ConsoleApp\") then\nreturn \"Exe\"\nelseif (cfg.kind == \"WindowedApp\") then\nreturn \"WinExe\"\nelseif (cfg.kind == \"SharedLib\") then\nreturn \"Library\"\nend\nend",
/* tools/gcc.lua */
- "premake.gcc = { }\npremake.gcc.cc = \"gcc\"\npremake.gcc.cxx = \"g++\"\npremake.gcc.ar = \"ar\"\npremake.gcc.rc = \"windres\"\npremake.gcc.llvm = false\nlocal cflags =\n{\nEnableSSE = \"-msse\",\nEnableSSE2 = \"-msse2\",\nEnableAVX = \"-mavx\",\nEnableAVX2 = \"-mavx2\",\nExtraWarnings = \"-Wall -Wextra\",\nFatalWarnings = \"-Werror\",\nFloatFast = \"-ffast-math\",\nFloatStrict = \"-ffloat-store\",\nNoFramePointer = \"-fomit-frame-pointer\",\nOptimize = \"-O2\",\nOptimizeSize = \"-Os\",\nOptimizeSpeed = \"-O3\",\nSymbols = \"-g\",\n}\nlocal cxxflags =\n{\nNoExceptions = \"-fno-exceptions\",\nNoRTTI = \"-fno-rtti\",\nUnsignedChar = \"-funsigned-char\",\n}\npremake.gcc.platforms =\n{\nNative = {\ncppflags = \"-MMD -MP\",\n},\nx32 = {\ncppflags = \"-MMD -MP\",\nflags = \"-m32\",\n},\nx64 = {\ncppflags = \"-MMD -MP\",\nflags = \"-m64\",\n},\nUniversal = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch i386 -arch x"
- "86_64 -arch ppc -arch ppc64\",\n},\nUniversal32 = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch i386 -arch ppc\",\n},\nUniversal64 = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch x86_64 -arch ppc64\",\n},\nPS3 = {\ncc = \"ppu-lv2-g++\",\ncxx = \"ppu-lv2-g++\",\nar = \"ppu-lv2-ar\",\ncppflags = \"-MMD -MP\",\n},\nWiiDev = {\ncppflags = \"-MMD -MP -I$(LIBOGC_INC) $(MACHDEP)\",\nldflags= \"-L$(LIBOGC_LIB) $(MACHDEP)\",\ncfgsettings = [[\n ifeq ($(strip $(DEVKITPPC)),)\n $(error \"DEVKITPPC environment variable is not set\")'\n endif\n include $(DEVKITPPC)/wii_rules']],\n},\nOrbis = {\ncc = \"orbis-clang\",\ncxx = \"orbis-clang++\",\nar = \"orbis-ar\",\ncppflags = \"-MMD -MP\",\n}\n}\nlocal platforms = premake.gcc.platforms\nfunction premake.gcc.getcppflags(cfg)\nlocal flags = { }\ntable.insert(flags, platforms[cfg.platform].cppflags)\nif flags[1]:startswith(\"-MMD\") then\ntable.insert(flags, \"-MP\")"
- "\nend\nreturn flags\nend\nfunction premake.gcc.getcflags(cfg)\nlocal result = table.translate(cfg.flags, cflags)\ntable.insert(result, platforms[cfg.platform].flags)\nif cfg.system ~= \"windows\" and cfg.kind == \"SharedLib\" then\ntable.insert(result, \"-fPIC\")\nend\nreturn result\nend\nfunction premake.gcc.getcxxflags(cfg)\nlocal result = table.translate(cfg.flags, cxxflags)\nreturn result\nend\nfunction premake.gcc.getldflags(cfg)\nlocal result = { }\nif not cfg.flags.Symbols then\nif cfg.system == \"macosx\" then\nelse\ntable.insert(result, \"-s\")\nend\nend\nif cfg.kind == \"SharedLib\" then\nif cfg.system == \"macosx\" then\ntable.insert(result, \"-dynamiclib\")\nelse\ntable.insert(result, \"-shared\")\nend\nif cfg.system == \"windows\" and not cfg.flags.NoImportLib then\ntable.insert(result, '-Wl,--out-implib=\"' .. cfg.linktarget.fullpath .. '\"')\nend\nend\nif cfg.kind == \"WindowedApp\" and cfg.system == \"windows\" then\ntable.insert(result, \"-mwindows\")\nend\nlocal platform = platforms[cfg.platf"
- "orm]\ntable.insert(result, platform.flags)\ntable.insert(result, platform.ldflags)\nreturn result\nend\nfunction premake.gcc.getlibdirflags(cfg)\nlocal result = { }\nfor _, value in ipairs(premake.getlinks(cfg, \"all\", \"directory\")) do\ntable.insert(result, '-L' .. _MAKE.esc(value))\nend\nreturn result\nend\nfunction premake.gcc.islibfile(p)\nif path.getextension(p) == \".a\" then\nreturn true\nend\nreturn false\nend\nfunction premake.gcc.getlibfiles(cfg)\nlocal result = {}\nfor _, value in ipairs(premake.getlinks(cfg, \"system\", \"fullpath\")) do\nif premake.gcc.islibfile(value) then\ntable.insert(result, _MAKE.esc(value))\nend\nend\nreturn result\nend\nfunction premake.gcc.getlinkflags(cfg)\nlocal result = {}\nfor _, value in ipairs(premake.getlinks(cfg, \"system\", \"fullpath\")) do\nif premake.gcc.islibfile(value) then\ntable.insert(result, _MAKE.esc(value))\nelseif path.getextension(value) == \".framework\" then\ntable.insert(result, '-framework ' .. _MAKE.esc(path.getbasename(value)))\nelse\ntable.in"
- "sert(result, '-l' .. _MAKE.esc(path.getname(value)))\nend\nend\nreturn result\nend\nfunction premake.gcc.getarchiveflags(prj, cfg, ndx)\nlocal result = {}\nif cfg.platform:startswith(\"Universal\") then\nif prj.options.ArchiveSplit then\nerror(\"gcc tool 'Universal*' platforms do not support split archives\")\nend\ntable.insert(result, '-o')\nelse\nif (not prj.options.ArchiveSplit) then\nif premake.gcc.llvm then\ntable.insert(result, 'rcs')\nelse\ntable.insert(result, '-rcs')\nend\nelse\nif premake.gcc.llvm then\nif (not ndx) then\ntable.insert(result, 'qc')\nelse\ntable.insert(result, 'cs')\nend\nelse\nif (not ndx) then\ntable.insert(result, '-qc')\nelse\ntable.insert(result, '-cs')\nend\nend\nend\nend\nreturn result\nend\nfunction premake.gcc.getdefines(defines)\nlocal result = { }\nfor _,def in ipairs(defines) do\ntable.insert(result, '-D' .. def)\nend\nreturn result\nend\nfunction premake.gcc.getincludedirs(includedirs)\nlocal result = { }\nfor _,dir in ipairs(includedirs) do\ntable.insert(result, \"-I\" ."
- ". _MAKE.esc(dir))\nend\nreturn result\nend\nfunction premake.gcc.getquoteincludedirs(includedirs)\nlocal result = { }\nfor _,dir in ipairs(includedirs) do\ntable.insert(result, \"-iquote \" .. _MAKE.esc(dir))\nend\nreturn result\nend\nfunction premake.gcc.getcfgsettings(cfg)\nreturn platforms[cfg.platform].cfgsettings\nend\n",
+ "premake.gcc = { }\npremake.gcc.cc = \"gcc\"\npremake.gcc.cxx = \"g++\"\npremake.gcc.ar = \"ar\"\npremake.gcc.rc = \"windres\"\npremake.gcc.llvm = false\nlocal cflags =\n{\nEnableSSE = \"-msse\",\nEnableSSE2 = \"-msse2\",\nEnableAVX = \"-mavx\",\nEnableAVX2 = \"-mavx2\",\nPedanticWarnings = \"-Wall -Wextra -pedantic\",\nExtraWarnings = \"-Wall -Wextra\",\nFatalWarnings = \"-Werror\",\nFloatFast = \"-ffast-math\",\nFloatStrict = \"-ffloat-store\",\nNoFramePointer = \"-fomit-frame-pointer\",\nOptimize = \"-O2\",\nOptimizeSize = \"-Os\",\nOptimizeSpeed = \"-O3\",\nSymbols = \"-g\",\n}\nlocal cxxflags =\n{\nNoExceptions = \"-fno-exceptions\",\nNoRTTI = \"-fno-rtti\",\nUnsignedChar = \"-funsigned-char\",\n}\nlocal objcflags =\n{\nObjcARC = \"-fobjc-arc\",\n}\npremake.gcc.platforms =\n{\nNative = {\ncppflags = \"-MMD -MP\",\n},\nx32 = {\ncppflags = \"-MMD -MP\",\nflags = \"-m32\",\n},\nx64 = {\ncppflags = \"-MMD "
+ "-MP\",\nflags = \"-m64\",\n},\nUniversal = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch i386 -arch x86_64 -arch ppc -arch ppc64\",\n},\nUniversal32 = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch i386 -arch ppc\",\n},\nUniversal64 = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch x86_64 -arch ppc64\",\n},\nPS3 = {\ncc = \"ppu-lv2-g++\",\ncxx = \"ppu-lv2-g++\",\nar = \"ppu-lv2-ar\",\ncppflags = \"-MMD -MP\",\n},\nWiiDev = {\ncppflags = \"-MMD -MP -I$(LIBOGC_INC) $(MACHDEP)\",\nldflags= \"-L$(LIBOGC_LIB) $(MACHDEP)\",\ncfgsettings = [[\n ifeq ($(strip $(DEVKITPPC)),)\n $(error \"DEVKITPPC environment variable is not set\")'\n endif\n include $(DEVKITPPC)/wii_rules']],\n},\nOrbis = {\ncc = \"orbis-clang\",\ncxx = \"orbis-clang++\",\nar = \"orbis-ar\",\ncppflags = \"-MMD -MP\",\n}\n}\nlocal platforms = premake.gcc.platforms\nfunction premake.gcc.getcppflags(cfg)\nlocal flags"
+ " = { }\ntable.insert(flags, platforms[cfg.platform].cppflags)\nif flags[1]:startswith(\"-MMD\") then\ntable.insert(flags, \"-MP\")\nend\nreturn flags\nend\nfunction premake.gcc.getcflags(cfg)\nlocal result = table.translate(cfg.flags, cflags)\ntable.insert(result, platforms[cfg.platform].flags)\nif cfg.system ~= \"windows\" and cfg.kind == \"SharedLib\" then\ntable.insert(result, \"-fPIC\")\nend\nreturn result\nend\nfunction premake.gcc.getcxxflags(cfg)\nlocal result = table.translate(cfg.flags, cxxflags)\nreturn result\nend\nfunction premake.gcc.getobjcflags(cfg)\nreturn table.translate(cfg.flags, objcflags)\nend\nfunction premake.gcc.getldflags(cfg)\nlocal result = { }\nif not cfg.flags.Symbols then\nif cfg.system == \"macosx\" then\nelse\ntable.insert(result, \"-s\")\nend\nend\nif cfg.kind == \"SharedLib\" then\nif cfg.system == \"macosx\" then\ntable.insert(result, \"-dynamiclib\")\nelse\ntable.insert(result, \"-shared\")\nend\nif cfg.system == \"windows\" and not cfg.flags.NoImportLib then\ntable.insert(r"
+ "esult, '-Wl,--out-implib=\"' .. cfg.linktarget.fullpath .. '\"')\nend\nend\nif cfg.kind == \"WindowedApp\" and cfg.system == \"windows\" then\ntable.insert(result, \"-mwindows\")\nend\nlocal platform = platforms[cfg.platform]\ntable.insert(result, platform.flags)\ntable.insert(result, platform.ldflags)\nreturn result\nend\nfunction premake.gcc.getlibdirflags(cfg)\nlocal result = { }\nfor _, value in ipairs(premake.getlinks(cfg, \"all\", \"directory\")) do\ntable.insert(result, '-L' .. _MAKE.esc(value))\nend\nreturn result\nend\nfunction premake.gcc.islibfile(p)\nif path.getextension(p) == \".a\" then\nreturn true\nend\nreturn false\nend\nfunction premake.gcc.getlibfiles(cfg)\nlocal result = {}\nfor _, value in ipairs(premake.getlinks(cfg, \"system\", \"fullpath\")) do\nif premake.gcc.islibfile(value) then\ntable.insert(result, _MAKE.esc(value))\nend\nend\nreturn result\nend\nfunction premake.gcc.getlinkflags(cfg)\nlocal result = {}\nfor _, value in ipairs(premake.getlinks(cfg, \"system\", \"fullpath\")) do\nif"
+ " premake.gcc.islibfile(value) then\nvalue = path.rebase(value, cfg.project.location, cfg.location)\ntable.insert(result, _MAKE.esc(value))\nelseif path.getextension(value) == \".framework\" then\ntable.insert(result, '-framework ' .. _MAKE.esc(path.getbasename(value)))\nelse\ntable.insert(result, '-l' .. _MAKE.esc(path.getname(value)))\nend\nend\nreturn result\nend\nfunction premake.gcc.getarchiveflags(prj, cfg, ndx)\nlocal result = {}\nif cfg.platform:startswith(\"Universal\") then\nif prj.options.ArchiveSplit then\nerror(\"gcc tool 'Universal*' platforms do not support split archives\")\nend\ntable.insert(result, '-o')\nelse\nif (not prj.options.ArchiveSplit) then\nif premake.gcc.llvm then\ntable.insert(result, 'rcs')\nelse\ntable.insert(result, '-rcs')\nend\nelse\nif premake.gcc.llvm then\nif (not ndx) then\ntable.insert(result, 'qc')\nelse\ntable.insert(result, 'cs')\nend\nelse\nif (not ndx) then\ntable.insert(result, '-qc')\nelse\ntable.insert(result, '-cs')\nend\nend\nend\nend\nreturn result\nend\nfuncti"
+ "on premake.gcc.getdefines(defines)\nlocal result = { }\nfor _,def in ipairs(defines) do\ntable.insert(result, \"-D\" .. def)\nend\nreturn result\nend\nfunction premake.gcc.getincludedirs(includedirs)\nlocal result = { }\nfor _,dir in ipairs(includedirs) do\ntable.insert(result, \"-I\\\"\" .. dir .. \"\\\"\")\nend\nreturn result\nend\nfunction premake.gcc.getquoteincludedirs(includedirs)\nlocal result = { }\nfor _,dir in ipairs(includedirs) do\ntable.insert(result, \"-iquote \\\"\" .. dir .. \"\\\"\")\nend\nreturn result\nend\nfunction premake.gcc.getcfgsettings(cfg)\nreturn platforms[cfg.platform].cfgsettings\nend\n",
/* tools/ghs.lua */
"premake.ghs = { }\npremake.ghs.namestyle = \"PS3\"\npremake.ghs.cc = \"ccppc\"\npremake.ghs.cxx = \"cxppc\"\npremake.ghs.ar = \"cxppc\"\nlocal cflags =\n{\nFatalWarnings = \"--quit_after_warnings\",\nOptimize = \"-Ogeneral\",\nOptimizeSize = \"-Osize\",\nOptimizeSpeed = \"-Ospeed\",\nSymbols = \"-g\",\n}\nlocal cxxflags =\n{\nNoExceptions = \"--no_exceptions\",\nNoRTTI = \"--no_rtti\",\nUnsignedChar = \"--unsigned_chars\",\n}\npremake.ghs.platforms =\n{\nNative = {\ncppflags = \"-MMD\",\n},\nPowerPC = {\ncc = \"ccppc\",\ncxx = \"cxppc\",\nar = \"cxppc\",\ncppflags = \"-MMD\",\narflags = \"-archive -o\",\n},\nARM = {\ncc = \"ccarm\",\ncxx = \"cxarm\",\nar = \"cxarm\",\ncppflags = \"-MMD\",\narflags = \"-archive -o\",\n}\n}\nlocal platforms = premake.ghs.platforms\nfunction premake.ghs.getcppflags(cfg)\nlocal flags = { }\ntable.insert(flags, platforms[cfg.platform].cppflags)\nreturn flags\nend\nfunction premake.ghs.getcf"
@@ -154,13 +154,13 @@ const char* builtin_scripts[] = {
"premake.msc = { }\npremake.msc.namestyle = \"windows\"\n",
/* tools/ow.lua */
- "premake.ow = { }\npremake.ow.namestyle = \"windows\"\npremake.ow.cc = \"WCL386\"\npremake.ow.cxx = \"WCL386\"\npremake.ow.ar = \"ar\"\nlocal cflags =\n{\nExtraWarnings = \"-wx\",\nFatalWarning = \"-we\",\nFloatFast = \"-omn\",\nFloatStrict = \"-op\",\nOptimize = \"-ox\",\nOptimizeSize = \"-os\",\nOptimizeSpeed = \"-ot\",\nSymbols = \"-d2\",\n}\nlocal cxxflags =\n{\nNoExceptions = \"-xd\",\nNoRTTI = \"-xr\",\n}\npremake.ow.platforms = \n{\nNative = { \nflags = \"\" \n},\n}\nfunction premake.ow.getcppflags(cfg)\nreturn {}\nend\nfunction premake.ow.getcflags(cfg)\nlocal result = table.translate(cfg.flags, cflags)\nif (cfg.flags.Symbols) then\ntable.insert(result, \"-hw\") -- Watcom debug format for Watcom debugger\nend\nreturn result\nend\nfunction premake.ow.getcxxflags(cfg)\nlocal result = table.translate(cfg.flags, cxxflags)\nreturn result\nend\nfunction premake.ow.getldflags(cfg)\nlocal result = { }\nif (cfg.flags.Symbols) then\ntable.insert(result, \"op symf"
- "\")\nend\nreturn result\nend\nfunction premake.ow.getlibfiles(cfg)\nlocal result = {}\nreturn result\nend\nfunction premake.ow.getlinkflags(cfg)\nlocal result = { }\nreturn result\nend\nfunction premake.ow.getdefines(defines)\nlocal result = { }\nfor _,def in ipairs(defines) do\ntable.insert(result, '-D' .. def)\nend\nreturn result\nend\nfunction premake.ow.getincludedirs(includedirs)\nlocal result = { }\nfor _,dir in ipairs(includedirs) do\ntable.insert(result, '-I \"' .. dir .. '\"')\nend\nreturn result\nend\n",
+ "premake.ow = { }\npremake.ow.namestyle = \"windows\"\npremake.ow.cc = \"WCL386\"\npremake.ow.cxx = \"WCL386\"\npremake.ow.ar = \"ar\"\nlocal cflags =\n{\nPedanticWarnings = \"-wx\",\nExtraWarnings = \"-wx\",\nFatalWarning = \"-we\",\nFloatFast = \"-omn\",\nFloatStrict = \"-op\",\nOptimize = \"-ox\",\nOptimizeSize = \"-os\",\nOptimizeSpeed = \"-ot\",\nSymbols = \"-d2\",\n}\nlocal cxxflags =\n{\nNoExceptions = \"-xd\",\nNoRTTI = \"-xr\",\n}\npremake.ow.platforms =\n{\nNative = {\nflags = \"\"\n},\n}\nfunction premake.ow.getcppflags(cfg)\nreturn {}\nend\nfunction premake.ow.getcflags(cfg)\nlocal result = table.translate(cfg.flags, cflags)\nif (cfg.flags.Symbols) then\ntable.insert(result, \"-hw\") -- Watcom debug format for Watcom debugger\nend\nreturn result\nend\nfunction premake.ow.getcxxflags(cfg)\nlocal result = table.translate(cfg.flags, cxxflags)\nreturn result\nend\nfunction premake.ow.getldflags(cfg)\nlocal result = { }\nif (cfg.flags.Symb"
+ "ols) then\ntable.insert(result, \"op symf\")\nend\nreturn result\nend\nfunction premake.ow.getlibfiles(cfg)\nlocal result = {}\nreturn result\nend\nfunction premake.ow.getlinkflags(cfg)\nlocal result = { }\nreturn result\nend\nfunction premake.ow.getdefines(defines)\nlocal result = { }\nfor _,def in ipairs(defines) do\ntable.insert(result, '-D' .. def)\nend\nreturn result\nend\nfunction premake.ow.getincludedirs(includedirs)\nlocal result = { }\nfor _,dir in ipairs(includedirs) do\ntable.insert(result, '-I \"' .. dir .. '\"')\nend\nreturn result\nend\n",
/* tools/snc.lua */
- "premake.snc = { }\npremake.snc.cc = \"snc\"\npremake.snc.cxx = \"g++\"\npremake.snc.ar = \"ar\"\nlocal cflags =\n{\nExtraWarnings = \"-Xdiag=2\",\nFatalWarnings = \"-Xquit=2\",\n}\nlocal cxxflags =\n{\nNoExceptions = \"\", -- No exceptions is the default in the SNC compiler.\nNoRTTI = \"-Xc-=rtti\",\n}\npremake.snc.platforms = \n{\nPS3 = {\ncc = \"ppu-lv2-g++\",\ncxx = \"ppu-lv2-g++\",\nar = \"ppu-lv2-ar\",\ncppflags = \"-MMD -MP\",\n}\n}\nlocal platforms = premake.snc.platforms\nfunction premake.snc.getcppflags(cfg)\nlocal result = { }\ntable.insert(result, platforms[cfg.platform].cppflags)\nreturn result\nend\nfunction premake.snc.getcflags(cfg)\nlocal result = table.translate(cfg.flags, cflags)\ntable.insert(result, platforms[cfg.platform].flags)\nif cfg.kind == \"SharedLib\" then\ntable.insert(result, \"-fPIC\")\nend\nreturn result\nend\nfunction premake.snc.getcxxflags(cfg)\nlocal result = table.translate(cfg.flags, cxxflags)\nreturn result\nend\nfunction pr"
- "emake.snc.getldflags(cfg)\nlocal result = { }\nif not cfg.flags.Symbols then\ntable.insert(result, \"-s\")\nend\nif cfg.kind == \"SharedLib\" then\ntable.insert(result, \"-shared\")\nif not cfg.flags.NoImportLib then\ntable.insert(result, '-Wl,--out-implib=\"' .. cfg.linktarget.fullpath .. '\"')\nend\nend\nlocal platform = platforms[cfg.platform]\ntable.insert(result, platform.flags)\ntable.insert(result, platform.ldflags)\nreturn result\nend\nfunction premake.snc.getlibdirflags(cfg)\nlocal result = { }\nfor _, value in ipairs(premake.getlinks(cfg, \"all\", \"directory\")) do\ntable.insert(result, '-L' .. _MAKE.esc(value))\nend\nreturn result\nend\nfunction premake.snc.getlibfiles(cfg)\nlocal result = {}\nreturn result\nend\nfunction premake.snc.getlinkflags(cfg)\nlocal result = {}\nfor _, value in ipairs(premake.getlinks(cfg, \"system\", \"name\")) do\ntable.insert(result, '-l' .. _MAKE.esc(value))\nend\nreturn result\nend\nfunction premake.snc.getdefines(defines)\nlocal result = { }\nfor _,def in ipairs(defi"
- "nes) do\ntable.insert(result, '-D' .. def)\nend\nreturn result\nend\nfunction premake.snc.getincludedirs(includedirs)\nlocal result = { }\nfor _,dir in ipairs(includedirs) do\ntable.insert(result, \"-I\" .. _MAKE.esc(dir))\nend\nreturn result\nend\n",
+ "premake.snc = { }\npremake.snc.cc = \"snc\"\npremake.snc.cxx = \"g++\"\npremake.snc.ar = \"ar\"\nlocal cflags =\n{\nPedanticWarnings = \"-Xdiag=2\",\nExtraWarnings = \"-Xdiag=2\",\nFatalWarnings = \"-Xquit=2\",\n}\nlocal cxxflags =\n{\nNoExceptions = \"\", -- No exceptions is the default in the SNC compiler.\nNoRTTI = \"-Xc-=rtti\",\n}\npremake.snc.platforms =\n{\nPS3 = {\ncc = \"ppu-lv2-g++\",\ncxx = \"ppu-lv2-g++\",\nar = \"ppu-lv2-ar\",\ncppflags = \"-MMD -MP\",\n}\n}\nlocal platforms = premake.snc.platforms\nfunction premake.snc.getcppflags(cfg)\nlocal result = { }\ntable.insert(result, platforms[cfg.platform].cppflags)\nreturn result\nend\nfunction premake.snc.getcflags(cfg)\nlocal result = table.translate(cfg.flags, cflags)\ntable.insert(result, platforms[cfg.platform].flags)\nif cfg.kind == \"SharedLib\" then\ntable.insert(result, \"-fPIC\")\nend\nreturn result\nend\nfunction premake.snc.getcxxflags(cfg)\nlocal result = table.translate(cfg.flags, cxxfl"
+ "ags)\nreturn result\nend\nfunction premake.snc.getldflags(cfg)\nlocal result = { }\nif not cfg.flags.Symbols then\ntable.insert(result, \"-s\")\nend\nif cfg.kind == \"SharedLib\" then\ntable.insert(result, \"-shared\")\nif not cfg.flags.NoImportLib then\ntable.insert(result, '-Wl,--out-implib=\"' .. cfg.linktarget.fullpath .. '\"')\nend\nend\nlocal platform = platforms[cfg.platform]\ntable.insert(result, platform.flags)\ntable.insert(result, platform.ldflags)\nreturn result\nend\nfunction premake.snc.getlibdirflags(cfg)\nlocal result = { }\nfor _, value in ipairs(premake.getlinks(cfg, \"all\", \"directory\")) do\ntable.insert(result, '-L' .. _MAKE.esc(value))\nend\nreturn result\nend\nfunction premake.snc.getlibfiles(cfg)\nlocal result = {}\nreturn result\nend\nfunction premake.snc.getlinkflags(cfg)\nlocal result = {}\nfor _, value in ipairs(premake.getlinks(cfg, \"system\", \"name\")) do\ntable.insert(result, '-l' .. _MAKE.esc(value))\nend\nreturn result\nend\nfunction premake.snc.getdefines(defines)\nlocal r"
+ "esult = { }\nfor _,def in ipairs(defines) do\ntable.insert(result, '-D' .. def)\nend\nreturn result\nend\nfunction premake.snc.getincludedirs(includedirs)\nlocal result = { }\nfor _,dir in ipairs(includedirs) do\ntable.insert(result, \"-I\" .. _MAKE.esc(dir))\nend\nreturn result\nend\n",
/* tools/valac.lua */
"premake.valac = { }\npremake.valac.valac = \"valac\"\npremake.valac.cc = \"gcc\"\nlocal valaflags =\n{\nDisableAssert = \"--disable-assert\", -- Disable assertions\nDisableSinceCheck = \"--disable-since-check\", -- Do not check whether used symbols exist in local packages\nDisableWarnings = \"--disable-warnings\", -- Disable warnings\nEnableChecking = \"--enable-checking\", -- Enable additional run-time checks\nEnableDeprecated = \"--enable-deprecated\", -- Enable deprecated features\nEnableExperimental = \"--enable-experimental\", -- Enable experimental features\nEnableExperimentalNonNull = \"--enable-experimental-non-null\", -- Enable experimental enhancements for non-null types\nEnableGObjectTracing = \"--enable-gobject-tracing\", -- Enable GObject creation tracing\nEnableMemProfiler = \"--enable-mem-profiler\", -- Enable GLib memory profiler\nEnableTh"
@@ -192,14 +192,21 @@ const char* builtin_scripts[] = {
"t(res, \"__cache\", nil)\nreturn res\nend\nfunction Set_mt.__index(a, i)\nif type(i) == \"number\" then\nreturn get_cache(a)[i]\nend\nreturn Set_mt[i] or rawget(a, i)\nend\nSet_mt.__add = Set_mt.union\nSet_mt.__mul = Set_mt.intersection\nSet_mt.__sub = Set_mt.difference\nSet_mt.__len = Set_mt.len\nSet_mt.__concat = Set_mt.implode",
/* actions/cmake/_cmake.lua */
- "premake.cmake = { }\nnewaction {\ntrigger = \"cmake\",\nshortname = \"CMake\",\ndescription = \"Generate CMake project files\",\nvalid_kinds = { \"ConsoleApp\", \"WindowedApp\", \"StaticLib\", \"SharedLib\", \"Bundle\" },\nvalid_languages = { \"C\", \"C++\" },\nvalid_tools = {\ncc = { \"gcc\" },\n},\nonsolution = function(sln)\npremake.generate(sln, \"CMakeLists.txt\", premake.cmake.workspace)\nend,\nonproject = function(prj)\npremake.generate(prj, \"%%/CMakeLists.txt\", premake.cmake.project)\nend,\noncleansolution = function(sln)\npremake.clean.file(sln, \"CMakeLists.txt\")\nend,\noncleanproject = function(prj)\npremake.clean.file(prj, \"%%/CMakeLists.txt\")\nend\n}\n",
+ "premake.cmake = { }\nnewaction {\ntrigger = \"cmake\",\nshortname = \"CMake\",\ndescription = \"Generate CMake project files\",\nvalid_kinds = { \"ConsoleApp\", \"WindowedApp\", \"StaticLib\", \"SharedLib\", \"Bundle\" },\nvalid_languages = { \"C\", \"C++\" },\nvalid_tools = {\ncc = { \"gcc\" },\n},\nonsolution = function(sln)\npremake.generate(sln, \"CMakeLists.txt\", premake.cmake.workspace)\nend,\nonproject = function(prj)\npremake.generate(prj, \"%%/CMakeLists.txt\", premake.cmake.project)\nend,\noncleansolution = function(sln)\npremake.clean.file(sln, \"CMakeLists.txt\")\nend,\noncleanproject = function(prj)\npremake.clean.file(prj, \"%%/CMakeLists.txt\")\nend\n}",
/* actions/cmake/cmake_workspace.lua */
- "function premake.cmake.workspace(sln)\n_p('cmake_minimum_required(VERSION 2.8.4)')\n_p('')\nfor i,prj in ipairs(sln.projects) do\nlocal name = premake.esc(prj.name)\n_p('add_subdirectory(%s)', name)\nend\nend\n",
+ "function premake.cmake.workspace(sln)\nif (sln.location ~= _WORKING_DIR) then\nlocal name = string.format(\"%s/CMakeLists.txt\", _WORKING_DIR)\nlocal f, err = io.open(name, \"wb\")\nif (not f) then\nerror(err, 0)\nend\nf:write('# CMakeLists autogenerated by GENie\\n')\nf:write('cmake_minimum_required(VERSION 2.8.4)\\n')\nf:write('\\n')\nf:write('add_subdirectory('.. path.getrelative(_WORKING_DIR, sln.location) ..')\\n')\nf:close()\nend\n_p('# CMakeLists autogenerated by GENie')\n_p('cmake_minimum_required(VERSION 2.8.4)')\n_p('')\nfor i,prj in ipairs(sln.projects) do\nlocal name = premake.esc(prj.name)\n_p('add_subdirectory(%s)', name)\nend\nend\n",
/* actions/cmake/cmake_project.lua */
- "local cmake = premake.cmake\nlocal tree = premake.tree\nfunction cmake.files(prj)\nlocal tr = premake.project.buildsourcetree(prj)\ntree.traverse(tr, {\nonbranchenter = function(node, depth)\nend,\nonbranchexit = function(node, depth)\nend,\nonleaf = function(node, depth)\n_p(1, '../%s', node.cfg.name)\nend,\n}, true, 1)\nend\nfunction premake.cmake.project(prj)\nio.indent = \" \"\n_p('cmake_minimum_required(VERSION 2.8.4)')\n_p('')\n_p('project(%s)', premake.esc(prj.name))\n_p('set(')\n_p('source_list')\ncmake.files(prj)\n_p(')')\nlocal platforms = premake.filterplatforms(prj.solution, premake[_OPTIONS.cc].platforms, \"Native\")\nfor i = #platforms, 1, -1 do\nif premake.platforms[platforms[i]].iscrosscompiler then\ntable.remove(platforms, i)\nend\nend \nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nfor _,v in ipairs(cfg.includedirs) do\n_p('include_directories(../%s)', premake.esc(v))\nend\nfor _,v in ipairs(cfg.defines) do\n_p('add_definitions(-D%s)', premake.esc("
- "v))\nend\nbreak\nend\nbreak\nend\nif (prj.kind=='StaticLib') then\n_p('add_library(%s STATIC ${source_list})',premake.esc(prj.name))\nend\nif (prj.kind=='SharedLib') then\n_p('add_library(%s SHARED ${source_list})',premake.esc(prj.name))\nend\nif (prj.kind=='ConsoleApp') then\n_p('add_executable(%s ${source_list})',premake.esc(prj.name))\nend\nif (prj.kind=='WindowedApp') then\n_p('add_executable(%s ${source_list})',premake.esc(prj.name))\nend\nend\n",
+ "local cmake = premake.cmake\nlocal tree = premake.tree\nlocal includestr = 'include_directories(../%s)'\nlocal definestr = 'add_definitions(-D%s)'\nlocal function is_excluded(prj, cfg, file)\n if table.icontains(prj.excludes, file) then\n return true\n end\n if table.icontains(cfg.excludes, file) then\n return true\n end\n return false\nend\nfunction cmake.excludedFiles(prj, cfg, src)\n for _, v in ipairs(src) do\n if (is_excluded(prj, cfg, v)) then\n _p(1, 'list(REMOVE_ITEM source_list ../%s)', v)\n end\n end\nend\nfunction cmake.list(value)\n if #value > 0 then\n return \" \" .. table.concat(value, \" \")\n else\n return \"\"\n end\nend\nfunction cmake.files(prj)\n local ret = {}\n local tr = premake.project.buildsourcetree(prj)\n tree.traverse(tr, {\n onbranchenter = function(node, depth)\n end,\n onbranchexit = function(node, depth)\n end,\n onleaf = function(node, depth)\n "
+ " table.insert(ret, node.cfg.name)\n _p(1, '../%s', node.cfg.name)\n end,\n }, true, 1)\n return ret\nend\nfunction cmake.header(prj)\n _p('# %s project autogenerated by GENie', premake.action.current().shortname)\n _p('cmake_minimum_required(VERSION 2.8.4)')\n _p('')\n _p('project(%s)', premake.esc(prj.name))\nend\nfunction cmake.customtasks(prj)\n local dirs = {}\n local tasks = {}\n for _, custombuildtask in ipairs(prj.custombuildtask or {}) do\n for _, buildtask in ipairs(custombuildtask or {}) do\n table.insert(tasks, buildtask)\n local d = string.format(\"${CMAKE_CURRENT_SOURCE_DIR}/../%s\", path.getdirectory(path.getrelative(prj.location, buildtask[2])))\n if not table.contains(dirs, d) then\n table.insert(dirs, d)\n _p('file(MAKE_DIRECTORY \\\"%s\\\")', d)\n end\n end\n end\n _p('')\n for _, buildtask in ipairs(tasks) do\n local deps = string.format(\"${"
+ "CMAKE_CURRENT_SOURCE_DIR}/../%s \", path.getrelative(prj.location, buildtask[1]))\n local outputs = string.format(\"${CMAKE_CURRENT_SOURCE_DIR}/../%s \", path.getrelative(prj.location, buildtask[2]))\n local msg = \"\"\n for _, depdata in ipairs(buildtask[3] or {}) do\n deps = deps .. string.format(\"${CMAKE_CURRENT_SOURCE_DIR}/../%s \", path.getrelative(prj.location, depdata))\n end\n _p('add_custom_command(')\n _p(1, 'OUTPUT %s', outputs)\n _p(1, 'DEPENDS %s', deps)\n for _, cmdline in ipairs(buildtask[4] or {}) do\n if (cmdline:sub(1, 1) ~= \"@\") then\n local cmd = cmdline\n local num = 1\n for _, depdata in ipairs(buildtask[3] or {}) do\n cmd = string.gsub(cmd, \"%$%(\" .. num .. \"%)\", string.format(\"${CMAKE_CURRENT_SOURCE_DIR}/../%s \", path.getrelative(prj.location, depdata)))\n num = num + 1\n end\n cmd = string"
+ ".gsub(cmd, \"%$%(<%)\", string.format(\"${CMAKE_CURRENT_SOURCE_DIR}/../%s \", path.getrelative(prj.location, buildtask[1])))\n cmd = string.gsub(cmd, \"%$%(@%)\", outputs)\n _p(1, 'COMMAND %s', cmd)\n else\n msg = cmdline\n end\n end\n _p(1, 'COMMENT \\\"%s\\\"', msg)\n _p(')')\n _p('')\n end\nend\nfunction cmake.depRules(prj)\n local maintable = {}\n for _, dependency in ipairs(prj.dependency) do\n for _, dep in ipairs(dependency) do\n if path.issourcefile(dep[1]) then\n local dep1 = premake.esc(path.getrelative(prj.location, dep[1]))\n local dep2 = premake.esc(path.getrelative(prj.location, dep[2]))\n if not maintable[dep1] then maintable[dep1] = {} end\n table.insert(maintable[dep1], dep2)\n end\n end\n end\n for key, _ in pairs(maintable) do\n local deplist = {}\n local depsname = string.fo"
+ "rmat('%s_deps', path.getname(key))\n for _, d2 in pairs(maintable[key]) do\n table.insert(deplist, d2)\n end\n _p('set(')\n _p(1, depsname)\n for _, v in pairs(deplist) do\n _p(1, '${CMAKE_CURRENT_SOURCE_DIR}/../%s', v)\n end\n _p(')')\n _p('')\n _p('set_source_files_properties(')\n _p(1, '\\\"${CMAKE_CURRENT_SOURCE_DIR}/../%s\\\"', key)\n _p(1, 'PROPERTIES OBJECT_DEPENDS \\\"${%s}\\\"', depsname)\n _p(')')\n _p('')\n end\nend\nfunction cmake.commonRules(conf, str)\n local Dupes = {}\n local t2 = {}\n for _, cfg in ipairs(conf) do\n local cfgd = iif(str == includestr, cfg.includedirs, cfg.defines)\n for _, v in ipairs(cfgd) do\n if(t2[v] == #conf - 1) then\n _p(str, v)\n table.insert(Dupes, v)\n end\n if not t2[v] then\n t2[v] = 1\n else\n t2[v] = t2[v] + 1\n e"
+ "nd\n end\n end\n return Dupes\nend\nfunction cmake.cfgRules(cfg, dupes, str)\n for _, v in ipairs(cfg) do\n if (not table.icontains(dupes, v)) then\n _p(1, str, v)\n end\n end\nend\nfunction cmake.removeCrosscompiler(platforms)\n for i = #platforms, 1, -1 do\n if premake.platforms[platforms[i]].iscrosscompiler then\n table.remove(platforms, i)\n end\n end\nend\nfunction cmake.project(prj)\n io.indent = \" \"\n cmake.header(prj)\n _p('set(')\n _p('source_list')\n local source_files = cmake.files(prj)\n _p(')')\n _p('')\n local nativeplatform = iif(os.is64bit(), \"x64\", \"x32\")\n local cc = premake.gettool(prj)\n local platforms = premake.filterplatforms(prj.solution, cc.platforms, \"Native\")\n cmake.removeCrosscompiler(platforms)\n local configurations = {}\n for _, platform in ipairs(platforms) do\n for cfg in premake.eachconfig(prj, platform) do\n -- TODO: Extend support for "
+ "32-bit targets on 64-bit hosts\n if cfg.platform == nativeplatform then\n table.insert(configurations, cfg)\n end\n end\n end\n local commonIncludes = cmake.commonRules(configurations, includestr)\n local commonDefines = cmake.commonRules(configurations, definestr)\n _p('')\n for _, cfg in ipairs(configurations) do\n _p('if(CMAKE_BUILD_TYPE MATCHES \\\"%s\\\")', cfg.name)\n -- list excluded files\n cmake.excludedFiles(prj, cfg, source_files)\n -- add includes directories\n cmake.cfgRules(cfg.includedirs, commonIncludes, includestr)\n -- add build defines\n cmake.cfgRules(cfg.defines, commonDefines, definestr)\n -- set CXX flags\n _p(1, 'set(CMAKE_CXX_FLAGS \\\"${CMAKE_CXX_FLAGS} %s\\\")', cmake.list(table.join(cc.getcppflags(cfg), cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)))\n -- set C flags\n _p(1, 'set(CMAKE_C_FLAGS \\\"${CMAKE_C_FLAGS} %"
+ "s\\\")', cmake.list(table.join(cc.getcppflags(cfg), cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_c)))\n _p('endif()')\n _p('')\n end\n -- force CPP if needed\n if (prj.options.ForceCPP) then\n _p('set_source_files_properties(${source_list} PROPERTIES LANGUAGE CXX)')\n end\n -- add custom tasks\n cmake.customtasks(prj)\n -- per-dependency build rules\n cmake.depRules(prj)\n for _, cfg in ipairs(configurations) do\n _p('if(CMAKE_BUILD_TYPE MATCHES \\\"%s\\\")', cfg.name)\n if (prj.kind == 'StaticLib') then\n _p(1, 'add_library(%s STATIC ${source_list})', premake.esc(cfg.buildtarget.basename))\n end\n if (prj.kind == 'SharedLib') then\n _p(1, 'add_library(%s SHARED ${source_list})', premake.esc(cfg.buildtarget.basename))\n end\n if (prj.kind == 'ConsoleApp' or prj.kind == 'WindowedApp') then\n _p(1, 'add_executable(%s ${source_list})', premake.esc(cfg.buildtarget.basename))\n "
+ " _p(1, 'target_link_libraries(%s%s%s)', premake.esc(cfg.buildtarget.basename), cmake.list(premake.esc(premake.getlinks(cfg, \"siblings\", \"basename\"))), cmake.list(cc.getlinkflags(cfg)))\n end\n _p('endif()')\n _p('')\n end\nend",
/* actions/make/_make.lua */
"_MAKE = { }\npremake.make = { }\nlocal make = premake.make\nfunction _MAKE.esc(value)\nlocal result\nif (type(value) == \"table\") then\nresult = { }\nfor _,v in ipairs(value) do\ntable.insert(result, _MAKE.esc(v))\nend\nreturn result\nelse\nresult = value:gsub(\"\\\\\", \"\\\\\\\\\")\nresult = result:gsub(\" \", \"\\\\ \")\nresult = result:gsub(\"%%(\", \"\\\\%(\")\nresult = result:gsub(\"%%)\", \"\\\\%)\")\nresult = result:gsub(\"$\\\\%((.-)\\\\%)\", \"$%(%1%)\")\nreturn result\nend\nend\nfunction premake.make_copyrule(source, target)\n_p('%s: %s', target, source)\n_p('\\t@echo Copying $(notdir %s)', target)\n_p('\\t-$(call COPY,%s,%s)', source, target)\nend\nfunction premake.make_mkdirrule(var)\n_p('\\t@echo Creating %s', var)\n_p('\\t-$(call MKDIR,%s)', var)\n_p('')\nend\nfunction make.list(value)\nif #value > 0 then\nreturn \" \" .. table.concat(value, \" \")\nelse\nreturn \"\"\nend\nend\nfunction _MAKE.getmakefilename(this, searchprjs)\nlocal count = 0\nfor sln in premake.solution.each() do\nif (sln.loca"
@@ -212,20 +219,20 @@ const char* builtin_scripts[] = {
/* actions/make/make_cpp.lua */
"premake.make.cpp = { }\npremake.make.override = { }\npremake.make.makefile_ignore = false\nlocal cpp = premake.make.cpp\nlocal make = premake.make\nfunction premake.make_cpp(prj)\nlocal cc = premake.gettool(prj)\nlocal platforms = premake.filterplatforms(prj.solution, cc.platforms, \"Native\")\npremake.gmake_cpp_header(prj, cc, platforms)\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\npremake.gmake_cpp_config(prj, cfg, cc)\nend\nend\ntable.sort(prj.allfiles)\nlocal objdirs = {}\nlocal additionalobjdirs = {}\nfor _, file in ipairs(prj.allfiles) do\nif path.issourcefile(file) then\nobjdirs[_MAKE.esc(path.getdirectory(path.trimdots(file)))] = 1\nend\nend\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nadditionalobjdirs[_MAKE.esc(path.getdirectory(path.getrelative(prj.location,buildtask[2])))] = 1\nend\nend\n_p('OBJDIRS := \\\\')\n_p('\\t$(OBJDIR) \\\\')\nfor dir, _ in iter.sortByKeys(objdirs) do\n_p("
- "'\\t$(OBJDIR)/%s \\\\', dir)\nend\nfor dir, _ in iter.sortByKeys(additionalobjdirs) do\n_p('\\t%s \\\\', dir)\nend\n_p('')\n_p('RESOURCES := \\\\')\nfor _, file in ipairs(prj.allfiles) do\nif path.isresourcefile(file) then\n_p('\\t$(OBJDIR)/%s.res \\\\', _MAKE.esc(path.getbasename(file)))\nend\nend\n_p('')\n_p('.PHONY: clean prebuild prelink')\n_p('')\nif os.is(\"MacOSX\") and prj.kind == \"WindowedApp\" then\n_p('all: $(OBJDIRS) prebuild prelink $(TARGET) $(dir $(TARGETDIR))PkgInfo $(dir $(TARGETDIR))Info.plist | $(TARGETDIR)')\nelse\n_p('all: $(OBJDIRS) prebuild prelink $(TARGET) | $(TARGETDIR)')\nend\n_p('\\t@:')\n_p('')\nif (prj.kind == \"StaticLib\" and prj.options.ArchiveSplit) then\n_p('define max_args')\n_p('\\t$(eval _args:=)')\n_p('\\t$(foreach obj,$3,$(eval _args+=$(obj))$(if $(word $2,$(_args)),$1$(_args)$(EOL)$(eval _args:=)))')\n_p('\\t$(if $(_args),$1$(_args))')\n_p('endef')\n_p('')\n_p('define EOL')\n_p('')\n_p('')\n_p('endef')\n_p('')\nend\n_p('$(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(EXTERNAL"
- "_LIBS) $(RESOURCES) | $(TARGETDIR) $(OBJDIRS)')\nif prj.kind == \"StaticLib\" then\nif prj.msgarchiving then\n_p('\\t@echo ' .. prj.msgarchiving)\nelse\n_p('\\t@echo Archiving %s', prj.name)\nend\nif (not prj.archivesplit_size) then\nprj.archivesplit_size=200\nend\nif (not prj.options.ArchiveSplit) then\n _p('ifeq (posix,$(SHELLTYPE))')\n _p('\\t$(SILENT) rm -f $(TARGET)')\n _p('else')\n _p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(TARGET)) del $(subst /,\\\\\\\\,$(TARGET))')\n _p('endif')\n_p('\\t$(SILENT) $(LINKCMD) $(OBJECTS)' .. (os.is(\"MacOSX\") and \" 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'\" or \"\"))\nelse\n_p('\\t$(call RM,$(TARGET))')\n_p('\\t@$(call max_args,$(LINKCMD),'.. prj.archivesplit_size ..',$(OBJECTS))' .. (os.is(\"MacOSX\") and \" 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'\" or \"\"))\n_p('\\t$(SILENT) $(LINKCMD_NDX)')\nend\nelse\nif prj.msglinking then\n_p('\\t@echo ' .. prj.msglinking)\nels"
- "e\n_p('\\t@echo Linking %s', prj.name)\nend\n_p('\\t$(SILENT) $(LINKCMD)')\nend\n_p('\\t$(POSTBUILDCMDS)')\n_p('')\n_p('$(TARGETDIR):')\npremake.make_mkdirrule(\"$(TARGETDIR)\")\n_p('$(OBJDIRS):')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCreatingMessage\")) then\n_p('\\t@echo Creating $(@)')\nend\n_p('\\t-$(call MKDIR,$@)')\n_p('')\nif os.is(\"MacOSX\") and prj.kind == \"WindowedApp\" then\n_p('$(dir $(TARGETDIR))PkgInfo:')\n_p('$(dir $(TARGETDIR))Info.plist:')\n_p('')\nend\n_p('clean:')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCleaningMessage\")) then\n_p('\\t@echo Cleaning %s', prj.name)\nend\n_p('ifeq (posix,$(SHELLTYPE))')\n_p('\\t$(SILENT) rm -f $(TARGET)')\n_p('\\t$(SILENT) rm -rf $(OBJDIR)')\n_p('else')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(TARGET)) del $(subst /,\\\\\\\\,$(TARGET))')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(OBJDIR)) rmdir /s /q $(subst /,\\\\\\\\,$(OBJDIR))')\n_p('endif')"
- "\n_p('')\n_p('prebuild:')\n_p('\\t$(PREBUILDCMDS)')\n_p('')\n_p('prelink:')\n_p('\\t$(PRELINKCMDS)')\n_p('')\ncpp.pchrules(prj)\ncpp.fileRules(prj, cc)\ncpp.dependencyRules(prj)\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal deps = string.format(\"%s \",path.getrelative(prj.location,buildtask[1]))\nfor _, depdata in ipairs(buildtask[3] or {}) do\ndeps = deps .. string.format(\"%s \",path.getrelative(prj.location,depdata))\nend\n_p('%s: %s | $(TARGETDIR) $(OBJDIRS)'\n,path.getrelative(prj.location,buildtask[2])\n, deps\n)\nfor _, cmdline in ipairs(buildtask[4] or {}) do\nlocal cmd = cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + 1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", \"$<\")\ncmd = string.gsub(cmd, \"%$%(@%)\", \"$@\")\n_p('\\t$(SILENT) %s',cmd)\nend\n_p('')\nend\nend\n_p('-include"
- " $(OBJECTS:%%.o=%%.d)')\n_p('ifneq (,$(PCH))')\n_p(' -include $(OBJDIR)/$(notdir $(PCH)).d')\n_p(' -include $(OBJDIR)/$(notdir $(PCH))_objc.d')\n_p('endif')\nend\nfunction premake.gmake_cpp_header(prj, cc, platforms)\n_p('# %s project makefile autogenerated by GENie', premake.action.current().shortname)\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getconfigname(prj.solution.configurations[1], platforms[1], true)))\n_p('endif')\n_p('')\n_p('ifndef verbose')\n_p(' SILENT = @')\n_p('endif')\n_p('')\n_p('SHELLTYPE := msdos')\n_p('ifeq (,$(ComSpec)$(COMSPEC))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(SHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(MAKESHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('')\n_p('ifeq (posix,$(SHELLTYPE))')\n_p(' MKDIR = $(SILENT) mkdir -p \"$(1)\"')\n_p(' COPY = $(SILENT) cp -fR \"$(1)\" \"$(2)\"')\n_p(' RM = $(SILENT) rm -f \"$(1)\"')\n_p('else')\n_p(' MKDIR = $(SILENT) mkdir \""
- "$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p(' COPY = $(SILENT) copy /Y \"$(subst /,\\\\\\\\,$(1))\" \"$(subst /,\\\\\\\\,$(2))\"')\n_p(' RM = $(SILENT) del /F \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p('endif')\n_p('')\n_p('CC = %s', cc.cc)\n_p('CXX = %s', cc.cxx)\n_p('AR = %s', cc.ar)\n_p('')\n_p('ifndef RESCOMP')\n_p(' ifdef WINDRES')\n_p(' RESCOMP = $(WINDRES)')\n_p(' else')\n_p(' RESCOMP = %s', cc.rc or 'windres')\n_p(' endif')\n_p('endif')\n_p('')\nif (not premake.make.makefile_ignore) then\n_p('MAKEFILE = %s', _MAKE.getmakefilename(prj, true))\n_p('')\nend\nend\nlocal function is_excluded(prj, cfg, file)\nif table.icontains(prj.excludes, file) then\nreturn true\nend\nif table.icontains(cfg.excludes, file) then\nreturn true\nend\nreturn false\nend\nfunction premake.gmake_cpp_config(prj, cfg, cc)\n_p('ifeq ($(config),%s)', _MAKE.esc(cfg.shortname))\ncpp.platformtools(cfg, cc)\n_p(' ' .. (table.contains(premake.make.override,\"OBJDIR\") and \"override \" or \"\") .. 'OBJD"
- "IR = %s', _MAKE.esc(cfg.objectsdir))\n_p(' ' .. (table.contains(premake.make.override,\"TARGETDIR\") and \"override \" or \"\") .. 'TARGETDIR = %s', _MAKE.esc(cfg.buildtarget.directory))\n_p(' ' .. (table.contains(premake.make.override,\"TARGET\") and \"override \" or \"\") .. 'TARGET = $(TARGETDIR)/%s', _MAKE.esc(cfg.buildtarget.name))\n_p(' DEFINES +=%s', make.list(cc.getdefines(cfg.defines)))\n_p(' INCLUDES +=%s', make.list(cc.getincludedirs(cfg.includedirs)))\n_p(' INCLUDES +=%s', make.list(cc.getquoteincludedirs(cfg.userincludedirs)))\ncpp.pchconfig(cfg)\ncpp.flags(cfg, cc)\ncpp.linker(prj, cfg, cc)\ntable.sort(cfg.files)\n_p(' OBJECTS := \\\\')\nfor _, file in ipairs(cfg.files) do\nif path.issourcefile(file) then\nif not is_excluded(prj, cfg, file) then\n_p('\\t$(OBJDIR)/%s.o \\\\'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n)\nend\nend\nend\n_p('')\n_p(' define PREBUILDCMDS')\nif #cfg.prebuildcommands > 0 then\n_p('\\t@e"
- "cho Running pre-build commands')\n_p('\\t%s', table.implode(cfg.prebuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define PRELINKCMDS')\nif #cfg.prelinkcommands > 0 then\n_p('\\t@echo Running pre-link commands')\n_p('\\t%s', table.implode(cfg.prelinkcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define POSTBUILDCMDS')\nif #cfg.postbuildcommands > 0 then\n_p('\\t@echo Running post-build commands')\n_p('\\t%s', table.implode(cfg.postbuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\nmake.settings(cfg, cc)\n_p('endif')\n_p('')\nend\nfunction cpp.platformtools(cfg, cc)\nlocal platform = cc.platforms[cfg.platform]\nif platform.cc then\n_p(' CC = %s', platform.cc)\nend\nif platform.cxx then\n_p(' CXX = %s', platform.cxx)\nend\nif platform.ar then\n_p(' AR = %s', platform.ar)\nend\nend\nfunction cpp.flags(cfg, cc)\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(' FORCE_INCLUDE += -include $(OBJDIR)/$(notdir $(PCH))')\n_p(' FORCE_INCLUDE_O"
- "BJC += -include $(OBJDIR)/$(notdir $(PCH))_objc')\nend\nif #cfg.forcedincludes > 0 then\n_p(' FORCE_INCLUDE += -include %s'\n,_MAKE.esc(table.concat(cfg.forcedincludes, \";\")))\nend\n_p(' ALL_CPPFLAGS += $(CPPFLAGS) %s $(DEFINES) $(INCLUDES)', table.concat(cc.getcppflags(cfg), \" \"))\n_p(' ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_asm)))\n_p(' ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_c)))\n_p(' ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)))\n_p(' ALL_OBJCFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_objc)))\n_p(' ALL_OBJCPPFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.l"
- "ist(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_objcpp)))\n_p(' ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)%s',\n make.list(table.join(cc.getdefines(cfg.resdefines),\n cc.getincludedirs(cfg.resincludedirs), cfg.resoptions)))\nend\nfunction cpp.linker(prj, cfg, cc)\n_p(' ALL_LDFLAGS += $(LDFLAGS)%s', make.list(table.join(cc.getlibdirflags(cfg), cc.getldflags(cfg), cfg.linkoptions)))\n_p(' LDDEPS +=%s', make.list(_MAKE.esc(premake.getlinks(cfg, \"siblings\", \"fullpath\"))))\n_p(' LIBS += $(LDDEPS)%s', make.list(cc.getlinkflags(cfg)))\n_p(' EXTERNAL_LIBS +=%s', make.list(cc.getlibfiles(cfg)))\nif cfg.kind == \"StaticLib\" then\nif (not prj.options.ArchiveSplit) then\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\nelse\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\n_p(' LINKCMD"
- "_NDX = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, true)))\nend\nelse\nlocal tool = iif(cfg.language == \"C\", \"CC\", \"CXX\")\n_p(' LINKCMD = $(%s) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS)', tool)\nend\nend\nfunction cpp.pchconfig(cfg)\nif not cfg.pchheader or cfg.flags.NoPCH then\nreturn\nend\nlocal pch = cfg.pchheader\nfor _, incdir in ipairs(cfg.includedirs) do\nlocal abspath = path.getabsolute(path.join(cfg.project.location, incdir))\nlocal testname = path.join(abspath, pch)\nif os.isfile(testname) then\npch = path.getrelative(cfg.location, testname)\nbreak\nend\nend\n_p(' PCH = %s', _MAKE.esc(pch))\n_p(' GCH = $(OBJDIR)/$(notdir $(PCH)).gch')\n_p(' GCH_OBJC = $(OBJDIR)/$(notdir $(PCH))_objc.gch')\nend\nfunction cpp.pchrules(prj)\n_p('ifneq (,$(PCH))')\n_p('$(GCH): $(PCH) $(MAKEFILE) | $(OBJDIR)')\nif prj.msgprecompile then\n_p('\\t@echo ' .. prj.msgprecompile)\nelse\n_p('\\t@echo $(notdir $<)')"
- "\nend\nlocal cmd = iif(prj.language == \"C\", \"$(CC) $(ALL_CFLAGS) -x c-header\", \"$(CXX) $(ALL_CXXFLAGS) -x c++-header\")\n_p('\\t$(SILENT) %s $(DEFINES) $(INCLUDES) -o \"$@\" -c \"$<\"', cmd)\n_p('')\n_p('$(GCH_OBJC): $(PCH) $(MAKEFILE) | $(OBJDIR)')\nif prj.msgprecompile then\n_p('\\t@echo ' .. prj.msgprecompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nlocal cmd = iif(prj.language == \"C\", \"$(CC) $(ALL_OBJCFLAGS) -x objective-c-header\", \"$(CXX) $(ALL_OBJCPPFLAGS) -x objective-c++-header\")\n_p('\\t$(SILENT) %s $(DEFINES) $(INCLUDES) -o \"$@\" -c \"$<\"', cmd)\n_p('endif')\n_p('')\nend\nfunction cpp.fileRules(prj, cc)\nlocal platforms = premake.filterplatforms(prj.solution, cc.platforms, \"Native\")\ntable.sort(prj.allfiles)\nfor _, file in ipairs(prj.allfiles or {}) do\nif path.issourcefile(file) then\nif (path.isobjcfile(file)) then\n_p('$(OBJDIR)/%s.o: %s $(GCH_OBJC) $(MAKEFILE)'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n, _MAKE.esc(file)\n)\nelse\n_p('$(OBJDIR)/%s.o: %s $(GCH) $(MAKEFILE)"
- "'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n, _MAKE.esc(file)\n)\nend\nif (path.isobjcfile(file) and prj.msgcompile_objc) then\n_p('\\t@echo ' .. prj.msgcompile_objc)\nelseif prj.msgcompile then\n_p('\\t@echo ' .. prj.msgcompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nif (path.isobjcfile(file)) then\nif (path.iscfile(file)) then\n_p('\\t$(SILENT) $(CXX) $(ALL_OBJCFLAGS) $(FORCE_INCLUDE_OBJC) -o \"$@\" -c \"$<\"')\nelse\n_p('\\t$(SILENT) $(CXX) $(ALL_OBJCPPFLAGS) $(FORCE_INCLUDE_OBJC) -o \"$@\" -c \"$<\"')\nend\nelseif (path.isasmfile(file)) then\n_p('\\t$(SILENT) $(CC) $(ALL_ASMFLAGS) -o \"$@\" -c \"$<\"')\nelse\ncpp.buildcommand(path.iscfile(file) and not prj.options.ForceCPP, \"o\")\nend\nfor _, task in ipairs(prj.postcompiletasks or {}) do\n_p('\\t$(SILENT) %s', task)\n_p('')\nend\n_p('')\nelseif (path.getextension(file) == \".rc\") then\n_p('$(OBJDIR)/%s.res: %s', _MAKE.esc(path.getbasename(file)), _MAKE.esc(file))\nif prj.msgresource then\n_p('\\t@echo ' .. prj.msgresource)\nelse\n_p('\\t@echo "
- "$(notdir $<)')\nend\n_p('\\t$(SILENT) $(RESCOMP) $< -O coff -o \"$@\" $(ALL_RESFLAGS)')\n_p('')\nend\nend\nend\nfunction cpp.dependencyRules(prj)\nfor _, dependency in ipairs(prj.dependency or {}) do\nfor _, dep in ipairs(dependency or {}) do\nif (dep[3]==nil or dep[3]==false) then\n_p('$(OBJDIR)/%s.o: %s'\n, _MAKE.esc(path.trimdots(path.removeext(path.getrelative(prj.location, dep[1]))))\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nelse\n_p('%s: %s'\n, _MAKE.esc(dep[1])\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nend\n_p('')\nend\nend\nend\nfunction cpp.buildcommand(iscfile, objext)\nlocal flags = iif(iscfile, '$(CC) $(ALL_CFLAGS)', '$(CXX) $(ALL_CXXFLAGS)')\n_p('\\t$(SILENT) %s $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"', flags, objext)\nend\n",
+ "'\\t$(OBJDIR)/%s \\\\', dir)\nend\nfor dir, _ in iter.sortByKeys(additionalobjdirs) do\n_p('\\t%s \\\\', dir)\nend\n_p('')\n_p('RESOURCES := \\\\')\nfor _, file in ipairs(prj.allfiles) do\nif path.isresourcefile(file) then\n_p('\\t$(OBJDIR)/%s.res \\\\', _MAKE.esc(path.getbasename(file)))\nend\nend\n_p('')\n_p('.PHONY: clean prebuild prelink')\n_p('')\nif os.is(\"MacOSX\") and prj.kind == \"WindowedApp\" then\n_p('all: $(OBJDIRS) $(TARGETDIR) prebuild prelink $(TARGET) $(dir $(TARGETDIR))PkgInfo $(dir $(TARGETDIR))Info.plist')\nelse\n_p('all: $(OBJDIRS) $(TARGETDIR) prebuild prelink $(TARGET)')\nend\n_p('\\t@:')\n_p('')\nif (prj.kind == \"StaticLib\" and prj.options.ArchiveSplit) then\n_p('define max_args')\n_p('\\t$(eval _args:=)')\n_p('\\t$(foreach obj,$3,$(eval _args+=$(obj))$(if $(word $2,$(_args)),$1$(_args)$(EOL)$(eval _args:=)))')\n_p('\\t$(if $(_args),$1$(_args))')\n_p('endef')\n_p('')\n_p('define EOL')\n_p('')\n_p('')\n_p('endef')\n_p('')\nend\n_p('$(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(EXTERNAL_LIB"
+ "S) $(RESOURCES) | $(TARGETDIR) $(OBJDIRS)')\nif prj.kind == \"StaticLib\" then\nif prj.msgarchiving then\n_p('\\t@echo ' .. prj.msgarchiving)\nelse\n_p('\\t@echo Archiving %s', prj.name)\nend\nif (not prj.archivesplit_size) then\nprj.archivesplit_size=200\nend\nif (not prj.options.ArchiveSplit) then\n_p('ifeq (posix,$(SHELLTYPE))')\n_p('\\t$(SILENT) rm -f $(TARGET)')\n_p('else')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(TARGET)) del $(subst /,\\\\\\\\,$(TARGET))')\n_p('endif')\n_p('\\t$(SILENT) $(LINKCMD) $(OBJECTS)' .. (os.is(\"MacOSX\") and \" 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'\" or \"\"))\nelse\n_p('\\t$(call RM,$(TARGET))')\n_p('\\t@$(call max_args,$(LINKCMD),'.. prj.archivesplit_size ..',$(OBJECTS))' .. (os.is(\"MacOSX\") and \" 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'\" or \"\"))\n_p('\\t$(SILENT) $(LINKCMD_NDX)')\nend\nelse\nif prj.msglinking then\n_p('\\t@echo ' .. prj.msglinking)\nelse\n_p('\\t@echo Linking %s', prj.name)\nend\n_p('\\t$(SILENT) $(LINKCMD)')\nend\n_p("
+ "'\\t$(POSTBUILDCMDS)')\n_p('')\n_p('$(TARGETDIR):')\npremake.make_mkdirrule(\"$(TARGETDIR)\")\n_p('$(OBJDIRS):')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCreatingMessage\")) then\n_p('\\t@echo Creating $(@)')\nend\n_p('\\t-$(call MKDIR,$@)')\n_p('')\nif os.is(\"MacOSX\") and prj.kind == \"WindowedApp\" then\n_p('$(dir $(TARGETDIR))PkgInfo:')\n_p('$(dir $(TARGETDIR))Info.plist:')\n_p('')\nend\n_p('clean:')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCleaningMessage\")) then\n_p('\\t@echo Cleaning %s', prj.name)\nend\n_p('ifeq (posix,$(SHELLTYPE))')\n_p('\\t$(SILENT) rm -f $(TARGET)')\n_p('\\t$(SILENT) rm -rf $(OBJDIR)')\n_p('else')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(TARGET)) del $(subst /,\\\\\\\\,$(TARGET))')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(OBJDIR)) rmdir /s /q $(subst /,\\\\\\\\,$(OBJDIR))')\n_p('endif')\n_p('')\n_p('prebuild:')\n_p('\\t$(PREBUILDCMDS)')\n_p('')\n_p('prelink:')\n_p('\\t"
+ "$(PRELINKCMDS)')\n_p('')\ncpp.pchrules(prj)\ncpp.fileRules(prj, cc)\ncpp.dependencyRules(prj)\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal deps = string.format(\"%s \",path.getrelative(prj.location,buildtask[1]))\nfor _, depdata in ipairs(buildtask[3] or {}) do\ndeps = deps .. string.format(\"%s \",path.getrelative(prj.location,depdata))\nend\n_p('%s: %s | $(TARGETDIR) $(OBJDIRS)'\n,path.getrelative(prj.location,buildtask[2])\n, deps\n)\nfor _, cmdline in ipairs(buildtask[4] or {}) do\nlocal cmd = cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + 1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", \"$<\")\ncmd = string.gsub(cmd, \"%$%(@%)\", \"$@\")\n_p('\\t$(SILENT) %s',cmd)\nend\n_p('')\nend\nend\n_p('-include $(OBJECTS:%%.o=%%.d)')\n_p('ifneq (,$(PCH))')\n_p(' -include $(OBJDIR)/$(notdir $("
+ "PCH)).d')\n_p(' -include $(OBJDIR)/$(notdir $(PCH))_objc.d')\n_p('endif')\nend\nfunction premake.gmake_cpp_header(prj, cc, platforms)\n_p('# %s project makefile autogenerated by GENie', premake.action.current().shortname)\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getconfigname(prj.solution.configurations[1], platforms[1], true)))\n_p('endif')\n_p('')\n_p('ifndef verbose')\n_p(' SILENT = @')\n_p('endif')\n_p('')\n_p('SHELLTYPE := msdos')\n_p('ifeq (,$(ComSpec)$(COMSPEC))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(SHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(MAKESHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('')\n_p('ifeq (posix,$(SHELLTYPE))')\n_p(' MKDIR = $(SILENT) mkdir -p \"$(1)\"')\n_p(' COPY = $(SILENT) cp -fR \"$(1)\" \"$(2)\"')\n_p(' RM = $(SILENT) rm -f \"$(1)\"')\n_p('else')\n_p(' MKDIR = $(SILENT) mkdir \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p(' COPY = $(SILENT) copy /Y \"$(s"
+ "ubst /,\\\\\\\\,$(1))\" \"$(subst /,\\\\\\\\,$(2))\"')\n_p(' RM = $(SILENT) del /F \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p('endif')\n_p('')\n_p('CC = %s', cc.cc)\n_p('CXX = %s', cc.cxx)\n_p('AR = %s', cc.ar)\n_p('')\n_p('ifndef RESCOMP')\n_p(' ifdef WINDRES')\n_p(' RESCOMP = $(WINDRES)')\n_p(' else')\n_p(' RESCOMP = %s', cc.rc or 'windres')\n_p(' endif')\n_p('endif')\n_p('')\nif (not premake.make.makefile_ignore) then\n_p('MAKEFILE = %s', _MAKE.getmakefilename(prj, true))\n_p('')\nend\nend\nlocal function is_excluded(prj, cfg, file)\nif table.icontains(prj.excludes, file) then\nreturn true\nend\nif table.icontains(cfg.excludes, file) then\nreturn true\nend\nreturn false\nend\nfunction premake.gmake_cpp_config(prj, cfg, cc)\n_p('ifeq ($(config),%s)', _MAKE.esc(cfg.shortname))\ncpp.platformtools(cfg, cc)\n_p(' ' .. (table.contains(premake.make.override,\"OBJDIR\") and \"override \" or \"\") .. 'OBJDIR = %s', _MAKE.esc(cfg.objectsdir))\n_p(' ' .. (table.contains(premak"
+ "e.make.override,\"TARGETDIR\") and \"override \" or \"\") .. 'TARGETDIR = %s', _MAKE.esc(cfg.buildtarget.directory))\n_p(' ' .. (table.contains(premake.make.override,\"TARGET\") and \"override \" or \"\") .. 'TARGET = $(TARGETDIR)/%s', _MAKE.esc(cfg.buildtarget.name))\n_p(' DEFINES +=%s', make.list(cc.getdefines(cfg.defines)))\n_p(' INCLUDES +=%s', make.list(cc.getincludedirs(cfg.includedirs)))\n_p(' INCLUDES +=%s', make.list(cc.getquoteincludedirs(cfg.userincludedirs)))\ncpp.pchconfig(cfg)\ncpp.flags(cfg, cc)\ncpp.linker(prj, cfg, cc)\ntable.sort(cfg.files)\n_p(' OBJECTS := \\\\')\nfor _, file in ipairs(cfg.files) do\nif path.issourcefile(file) then\nif not is_excluded(prj, cfg, file) then\n_p('\\t$(OBJDIR)/%s.o \\\\'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n)\nend\nend\nend\n_p('')\n_p(' define PREBUILDCMDS')\nif #cfg.prebuildcommands > 0 then\n_p('\\t@echo Running pre-build commands')\n_p('\\t%s', table.implode(cfg.prebuildcommands, \""
+ "\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define PRELINKCMDS')\nif #cfg.prelinkcommands > 0 then\n_p('\\t@echo Running pre-link commands')\n_p('\\t%s', table.implode(cfg.prelinkcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define POSTBUILDCMDS')\nif #cfg.postbuildcommands > 0 then\n_p('\\t@echo Running post-build commands')\n_p('\\t%s', table.implode(cfg.postbuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\nmake.settings(cfg, cc)\n_p('endif')\n_p('')\nend\nfunction cpp.platformtools(cfg, cc)\nlocal platform = cc.platforms[cfg.platform]\nif platform.cc then\n_p(' CC = %s', platform.cc)\nend\nif platform.cxx then\n_p(' CXX = %s', platform.cxx)\nend\nif platform.ar then\n_p(' AR = %s', platform.ar)\nend\nend\nfunction cpp.flags(cfg, cc)\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(' FORCE_INCLUDE += -include $(OBJDIR)/$(notdir $(PCH))')\n_p(' FORCE_INCLUDE_OBJC += -include $(OBJDIR)/$(notdir $(PCH))_objc')\nend\nif #cfg.forcedincludes > 0 t"
+ "hen\n_p(' FORCE_INCLUDE += -include %s'\n,_MAKE.esc(table.concat(cfg.forcedincludes, \";\")))\nend\n_p(' ALL_CPPFLAGS += $(CPPFLAGS) %s $(DEFINES) $(INCLUDES)', table.concat(cc.getcppflags(cfg), \" \"))\n_p(' ALL_ASMFLAGS += $(ASMFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_asm)))\n_p(' ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_c)))\n_p(' ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)))\n_p(' ALL_OBJCFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getobjcflags(cfg), cfg.buildoptions, cfg.buildoptions_objc)))\n_p(' ALL_OBJCPPFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cc.geto"
+ "bjcflags(cfg), cfg.buildoptions, cfg.buildoptions_objcpp)))\n_p(' ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)%s',\n make.list(table.join(cc.getdefines(cfg.resdefines),\n cc.getincludedirs(cfg.resincludedirs), cfg.resoptions)))\nend\nfunction cpp.linker(prj, cfg, cc)\n_p(' ALL_LDFLAGS += $(LDFLAGS)%s', make.list(table.join(cc.getlibdirflags(cfg), cc.getldflags(cfg), cfg.linkoptions)))\n_p(' LDDEPS +=%s', make.list(_MAKE.esc(premake.getlinks(cfg, \"siblings\", \"fullpath\"))))\n_p(' LIBS += $(LDDEPS)%s', make.list(cc.getlinkflags(cfg)))\n_p(' EXTERNAL_LIBS +=%s', make.list(cc.getlibfiles(cfg)))\nif cfg.kind == \"StaticLib\" then\nif (not prj.options.ArchiveSplit) then\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\nelse\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\n_p(' LINKCMD_NDX = $(AR) %s $(TARGET)', make"
+ ".list(cc.getarchiveflags(prj, cfg, true)))\nend\nelse\nlocal tool = iif(cfg.language == \"C\", \"CC\", \"CXX\")\n_p(' LINKCMD = $(%s) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS)', tool)\nend\nend\nfunction cpp.pchconfig(cfg)\nif not cfg.pchheader or cfg.flags.NoPCH then\nreturn\nend\nlocal pch = cfg.pchheader\nfor _, incdir in ipairs(cfg.includedirs) do\nlocal abspath = path.getabsolute(path.join(cfg.project.location, incdir))\nlocal testname = path.join(abspath, pch)\nif os.isfile(testname) then\npch = path.getrelative(cfg.location, testname)\nbreak\nend\nend\n_p(' PCH = %s', _MAKE.esc(pch))\n_p(' GCH = $(OBJDIR)/$(notdir $(PCH)).gch')\n_p(' GCH_OBJC = $(OBJDIR)/$(notdir $(PCH))_objc.gch')\nend\nfunction cpp.pchrules(prj)\n_p('ifneq (,$(PCH))')\n_p('$(GCH): $(PCH) $(MAKEFILE) | $(OBJDIR)')\nif prj.msgprecompile then\n_p('\\t@echo ' .. prj.msgprecompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nlocal cmd = iif(prj.language == \""
+ "C\", \"$(CC) $(ALL_CFLAGS) -x c-header\", \"$(CXX) $(ALL_CXXFLAGS) -x c++-header\")\n_p('\\t$(SILENT) %s $(DEFINES) $(INCLUDES) -o \"$@\" -c \"$<\"', cmd)\n_p('')\n_p('$(GCH_OBJC): $(PCH) $(MAKEFILE) | $(OBJDIR)')\nif prj.msgprecompile then\n_p('\\t@echo ' .. prj.msgprecompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nlocal cmd = iif(prj.language == \"C\", \"$(CC) $(ALL_OBJCFLAGS) -x objective-c-header\", \"$(CXX) $(ALL_OBJCPPFLAGS) -x objective-c++-header\")\n_p('\\t$(SILENT) %s $(DEFINES) $(INCLUDES) -o \"$@\" -c \"$<\"', cmd)\n_p('endif')\n_p('')\nend\nfunction cpp.fileRules(prj, cc)\nlocal platforms = premake.filterplatforms(prj.solution, cc.platforms, \"Native\")\ntable.sort(prj.allfiles)\nfor _, file in ipairs(prj.allfiles or {}) do\nif path.issourcefile(file) then\nif (path.isobjcfile(file)) then\n_p('$(OBJDIR)/%s.o: %s $(GCH_OBJC) $(MAKEFILE)'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n, _MAKE.esc(file)\n)\nelse\n_p('$(OBJDIR)/%s.o: %s $(GCH) $(MAKEFILE)'\n, _MAKE.esc(path.trimdots(path.removee"
+ "xt(file)))\n, _MAKE.esc(file)\n)\nend\nif (path.isobjcfile(file) and prj.msgcompile_objc) then\n_p('\\t@echo ' .. prj.msgcompile_objc)\nelseif prj.msgcompile then\n_p('\\t@echo ' .. prj.msgcompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nif (path.isobjcfile(file)) then\nif (path.iscfile(file)) then\n_p('\\t$(SILENT) $(CXX) $(ALL_OBJCFLAGS) $(FORCE_INCLUDE_OBJC) -o \"$@\" -c \"$<\"')\nelse\n_p('\\t$(SILENT) $(CXX) $(ALL_OBJCPPFLAGS) $(FORCE_INCLUDE_OBJC) -o \"$@\" -c \"$<\"')\nend\nelseif (path.isasmfile(file)) then\n_p('\\t$(SILENT) $(CC) $(ALL_ASMFLAGS) -o \"$@\" -c \"$<\"')\nelse\ncpp.buildcommand(path.iscfile(file) and not prj.options.ForceCPP, \"o\")\nend\nfor _, task in ipairs(prj.postcompiletasks or {}) do\n_p('\\t$(SILENT) %s', task)\n_p('')\nend\n_p('')\nelseif (path.getextension(file) == \".rc\") then\n_p('$(OBJDIR)/%s.res: %s', _MAKE.esc(path.getbasename(file)), _MAKE.esc(file))\nif prj.msgresource then\n_p('\\t@echo ' .. prj.msgresource)\nelse\n_p('\\t@echo $(notdir $<)')\nend\n_p('\\t$(SILENT) $(R"
+ "ESCOMP) $< -O coff -o \"$@\" $(ALL_RESFLAGS)')\n_p('')\nend\nend\nend\nfunction cpp.dependencyRules(prj)\nfor _, dependency in ipairs(prj.dependency or {}) do\nfor _, dep in ipairs(dependency or {}) do\nif (dep[3]==nil or dep[3]==false) then\n_p('$(OBJDIR)/%s.o: %s'\n, _MAKE.esc(path.trimdots(path.removeext(path.getrelative(prj.location, dep[1]))))\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nelse\n_p('%s: %s'\n, _MAKE.esc(dep[1])\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nend\n_p('')\nend\nend\nend\nfunction cpp.buildcommand(iscfile, objext)\nlocal flags = iif(iscfile, '$(CC) $(ALL_CFLAGS)', '$(CXX) $(ALL_CXXFLAGS)')\n_p('\\t$(SILENT) %s $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"', flags, objext)\nend\n",
/* actions/make/make_csharp.lua */
"local function getresourcefilename(cfg, fname)\nif path.getextension(fname) == \".resx\" then\n local name = cfg.buildtarget.basename .. \".\"\n local dir = path.getdirectory(fname)\n if dir ~= \".\" then \nname = name .. path.translate(dir, \".\") .. \".\"\nend\nreturn \"$(OBJDIR)/\" .. _MAKE.esc(name .. path.getbasename(fname)) .. \".resources\"\nelse\nreturn fname\nend\nend\nfunction premake.make_csharp(prj)\nlocal csc = premake.dotnet\nlocal cfglibs = { }\nlocal cfgpairs = { }\nlocal anycfg\nfor cfg in premake.eachconfig(prj) do\nanycfg = cfg\ncfglibs[cfg] = premake.getlinks(cfg, \"siblings\", \"fullpath\")\ncfgpairs[cfg] = { }\nfor _, fname in ipairs(cfglibs[cfg]) do\nif path.getdirectory(fname) ~= cfg.buildtarget.directory then\ncfgpairs[cfg][\"$(TARGETDIR)/\" .. _MAKE.esc(path.getname(fname))] = _MAKE.esc(fname)\nend\nend\nend\nlocal sources = {}\nlocal embedded = { }\nlocal copypairs = { }\nfor fcfg in premake.project.eachfile(prj) do\nlocal action = csc.getbuildaction(fcfg)\nif action == \"Co"
@@ -239,9 +246,9 @@ const char* builtin_scripts[] = {
/* actions/make/make_vala.lua */
"local make = premake.make\nfunction premake.make_vala(prj)\nlocal valac = premake.gettool(prj)\nlocal platforms = premake.filterplatforms(prj.solution, valac.platforms, \"Native\")\n_p('# %s project makefile autogenerated by GENie', premake.action.current().shortname)\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getconfigname(prj.solution.configurations[1], platforms[1], true)))\n_p('endif')\n_p('')\n_p('ifndef verbose')\n_p(' SILENT = @')\n_p('endif')\n_p('')\n_p('SHELLTYPE := msdos')\n_p('ifeq (,$(ComSpec)$(COMSPEC))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(SHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(MAKESHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('')\n_p('ifeq (posix,$(SHELLTYPE))')\n_p(' MKDIR = $(SILENT) mkdir -p \"$(1)\"')\n_p(' COPY = $(SILENT) cp -fR \"$(1)\" \"$(2)\"')\n_p(' RM = $(SILENT) rm -f \"$(1)\"')\n_p('else')\n_p(' MKDIR = $(SILENT) mkdir \"$(subst /,\\\\\\\\,$(1))\" 2> nul || e"
- "xit 0')\n_p(' COPY = $(SILENT) copy /Y \"$(subst /,\\\\\\\\,$(1))\" \"$(subst /,\\\\\\\\,$(2))\"')\n_p(' RM = $(SILENT) del /F \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p('endif')\n_p('')\n_p('VALAC = %s', valac.valac)\n_p('CC = %s', valac.cc)\n_p('')\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\npremake.gmake_valac_config(prj, cfg, valac)\nend\nend\n_p('SOURCES := \\\\')\nfor _, file in ipairs(prj.files) do\nif path.issourcefile(file) then\nif not table.icontains(prj.excludes, file) then\n_p('\\t%s \\\\', _MAKE.esc(file))\nend\nend\nend\n_p('')\n_p('.PHONY: clean prebuild prelink')\n_p('')\n_p('$(TARGET): $(SOURCES) | $(TARGETDIR)')\n_p('\\t$(SILENT) $(VALAC) -o $(TARGET) --cc=$(CC) $(FLAGS) $(SOURCES)')\n_p('\\t$(POSTBUILDCMDS)')\n_p('')\n_p('$(TARGETDIR):')\npremake.make_mkdirrule(\"$(TARGETDIR)\")\n_p('clean:')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCleaningMessage\")) then\n_p('\\t@echo Cleanin"
- "g %s', prj.name)\nend\n_p('ifeq (posix,$(SHELLTYPE))')\n_p('\\t$(SILENT) rm -f $(TARGET)')\n_p('else')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(TARGET)) del $(subst /,\\\\\\\\,$(TARGET))')\n_p('endif')\n_p('')\n_p('prebuild:')\n_p('\\t$(PREBUILDCMDS)')\n_p('')\n_p('prelink:')\n_p('\\t$(PRELINKCMDS)')\n_p('')\nend\nfunction premake.gmake_valac_config(prj, cfg, valac)\n_p('ifeq ($(config),%s)', _MAKE.esc(cfg.shortname))\n_p(' TARGETDIR = %s', _MAKE.esc(cfg.buildtarget.directory))\n_p(' TARGET = $(TARGETDIR)/%s', _MAKE.esc(cfg.buildtarget.name))\n_p(' DEFINES +=%s', make.list(valac.getdefines(cfg.defines)))\n_p(' VAPIDIRS +=%s', make.list(valac.getvapidirs(cfg.vapidirs)))\n_p(' PKGS +=%s', make.list(valac.getlinks(cfg.links)))\n_p(' FLAGS += $(DEFINES) $(VAPIDIRS) $(PKGS)%s', make.list(table.join(valac.getvalaflags(cfg), valac.getbuildoptions(cfg.buildoptions), valac.getbuildoptions(cfg.buildoptions_c), cfg.buildoptions_vala)))\n_p(' define PREBUILDCMDS')\nif #cfg.prebuildcomma"
- "nds > 0 then\n_p('\\t@echo Running pre-build commands')\n_p('\\t%s', table.implode(cfg.prebuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define PRELINKCMDS')\nif #cfg.prelinkcommands > 0 then\n_p('\\t@echo Running pre-link commands')\n_p('\\t%s', table.implode(cfg.prelinkcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define POSTBUILDCMDS')\nif #cfg.postbuildcommands > 0 then\n_p('\\t@echo Running post-build commands')\n_p('\\t%s', table.implode(cfg.postbuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p('endif')\n_p('')\nend\n",
+ "xit 0')\n_p(' COPY = $(SILENT) copy /Y \"$(subst /,\\\\\\\\,$(1))\" \"$(subst /,\\\\\\\\,$(2))\"')\n_p(' RM = $(SILENT) del /F \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p('endif')\n_p('')\n_p('VALAC = %s', valac.valac)\n_p('CC = %s', valac.cc)\n_p('')\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\npremake.gmake_valac_config(prj, cfg, valac)\nend\nend\n_p('SOURCES := \\\\')\nfor _, file in ipairs(prj.files) do\nif path.issourcefile(file) then\nif not table.icontains(prj.excludes, file) then\n_p('\\t%s \\\\', _MAKE.esc(file))\nend\nend\nend\n_p('')\n_p('.PHONY: clean prebuild prelink')\n_p('')\n_p('all: prebuild prelink $(TARGET) | $(TARGETDIR)')\n_p('\\t@:')\n_p('')\n_p('$(TARGET): $(SOURCES) | $(TARGETDIR)')\n_p('\\t$(SILENT) $(VALAC) -o $(TARGET) --cc=$(CC) $(FLAGS) $(SOURCES)')\n_p('\\t$(POSTBUILDCMDS)')\n_p('')\n_p('$(TARGETDIR):')\npremake.make_mkdirrule(\"$(TARGETDIR)\")\n_p('clean:')\nif (not prj.solution.messageskip) or (not table.contains(prj"
+ ".solution.messageskip, \"SkipCleaningMessage\")) then\n_p('\\t@echo Cleaning %s', prj.name)\nend\n_p('ifeq (posix,$(SHELLTYPE))')\n_p('\\t$(SILENT) rm -f $(TARGET)')\n_p('else')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(TARGET)) del $(subst /,\\\\\\\\,$(TARGET))')\n_p('endif')\n_p('')\n_p('prebuild:')\n_p('\\t$(PREBUILDCMDS)')\n_p('')\n_p('prelink:')\n_p('\\t$(PRELINKCMDS)')\n_p('')\nend\nfunction premake.gmake_valac_config(prj, cfg, valac)\n_p('ifeq ($(config),%s)', _MAKE.esc(cfg.shortname))\n_p(' TARGETDIR = %s', _MAKE.esc(cfg.buildtarget.directory))\n_p(' TARGET = $(TARGETDIR)/%s', _MAKE.esc(cfg.buildtarget.name))\n_p(' DEFINES +=%s', make.list(valac.getdefines(cfg.defines)))\n_p(' VAPIDIRS +=%s', make.list(valac.getvapidirs(cfg.vapidirs)))\n_p(' PKGS +=%s', make.list(valac.getlinks(cfg.links)))\n_p(' FLAGS += $(DEFINES) $(VAPIDIRS) $(PKGS)%s', make.list(table.join(valac.getvalaflags(cfg), valac.getbuildoptions(cfg.buildoptions), valac.getbuildoptions(cfg.buildoptions_c), c"
+ "fg.buildoptions_vala)))\n_p(' define PREBUILDCMDS')\nif #cfg.prebuildcommands > 0 then\n_p('\\t@echo Running pre-build commands')\n_p('\\t%s', table.implode(cfg.prebuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define PRELINKCMDS')\nif #cfg.prelinkcommands > 0 then\n_p('\\t@echo Running pre-link commands')\n_p('\\t%s', table.implode(cfg.prelinkcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define POSTBUILDCMDS')\nif #cfg.postbuildcommands > 0 then\n_p('\\t@echo Running post-build commands')\n_p('\\t%s', table.implode(cfg.postbuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p('endif')\n_p('')\nend\n",
/* actions/make/make_swift.lua */
"local make = premake.make\nlocal swift = { }\nfunction premake.make_swift(prj)\nlocal tool = premake.gettool(prj)\nlocal platforms = premake.filterplatforms(prj.solution, tool.platforms, \"Native\")\n_p('# %s project makefile autogenerated by GENie', premake.action.current().shortname)\n_p('ifndef config')\n_p(1, 'config=%s', _MAKE.esc(premake.getconfigname(prj.solution.configurations[1], platforms[1], true)))\n_p('endif')\n_p('')\n_p('ifndef verbose')\n_p(1, 'SILENT = @')\n_p('endif')\n_p('')\n_p('SHELLTYPE := msdos')\n_p('ifeq (,$(ComSpec)$(COMSPEC))')\n_p(1, 'SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(SHELL)))')\n_p(1, 'SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(MAKESHELL)))')\n_p(1, 'SHELLTYPE := posix')\n_p('endif')\n_p('')\n_p('ifeq (posix,$(SHELLTYPE))')\n_p(1, 'MKDIR = $(SILENT) mkdir -p \"$(1)\"')\n_p(1, 'COPY = $(SILENT) cp -fR \"$(1)\" \"$(2)\"')\n_p(1, 'RM = $(SILENT) rm -f \"$(1)\"')\n_p('else')\n_p(1, 'MKDIR = $(SILENT) mkdir \"$(subst /,"
@@ -271,38 +278,39 @@ const char* builtin_scripts[] = {
"Windows Phone</ApplicationType>')\nelse\n_p(2, '<ApplicationType>Windows Store</ApplicationType>')\nend\n_p(2, '<ApplicationTypeRevision>%s</ApplicationTypeRevision>', vstudio.storeapp)\nend\nelse\n_p(2, '<Keyword>Win32Proj</Keyword>')\nend\n_p(1,'</PropertyGroup>')\nend\nfunction vc2010.config_type(config)\nlocal t =\n{\nSharedLib = \"DynamicLibrary\",\nStaticLib = \"StaticLibrary\",\nConsoleApp = \"Application\",\nWindowedApp = \"Application\"\n}\nreturn t[config.kind]\nend\nlocal function if_config_and_platform()\nreturn 'Condition=\"\\'$(Configuration)|$(Platform)\\'==\\'%s\\'\"'\nend\nlocal function optimisation(cfg)\nlocal result = \"Disabled\"\nfor _, value in ipairs(cfg.flags) do\nif (value == \"Optimize\") then\nresult = \"Full\"\nelseif (value == \"OptimizeSize\") then\nresult = \"MinSpace\"\nelseif (value == \"OptimizeSpeed\") then\nresult = \"MaxSpeed\"\nend\nend\nreturn result\nend\nfunction vc2010.configurationPropertyGroup(cfg, cfginfo)\n_p(1,'<PropertyGroup '..if_config_and_platform() ..' Label"
"=\"Configuration\">'\n, premake.esc(cfginfo.name))\n_p(2,'<ConfigurationType>%s</ConfigurationType>',vc2010.config_type(cfg))\n_p(2,'<UseDebugLibraries>%s</UseDebugLibraries>', iif(optimisation(cfg) == \"Disabled\",\"true\",\"false\"))\n_p(2,'<PlatformToolset>%s</PlatformToolset>', premake.vstudio.toolset)\nif cfg.flags.MFC then\n_p(2,'<UseOfMfc>%s</UseOfMfc>', iif(cfg.flags.StaticRuntime, \"Static\", \"Dynamic\"))\nend\nif cfg.flags.ATL or cfg.flags.StaticATL then\n_p(2,'<UseOfAtl>%s</UseOfAtl>', iif(cfg.flags.StaticATL, \"Static\", \"Dynamic\"))\nend\nif cfg.flags.Unicode then\n_p(2,'<CharacterSet>Unicode</CharacterSet>')\nend\nif cfg.flags.Managed then\n_p(2,'<CLRSupport>true</CLRSupport>')\nend\n_p(1,'</PropertyGroup>')\nend\nlocal function import_props(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(1,'<ImportGroup '..if_config_and_platform() ..' Label=\"PropertySheets\">'\n,premake.esc(cfginfo.name))\n_p(2"
",'<Import Project=\"$(UserRootDir)\\\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists(\\'$(UserRootDir)\\\\Microsoft.Cpp.$(Platform).user.props\\')\" Label=\"LocalAppDataPlatform\" />')\nif #cfg.propertysheets > 0 then\nlocal dirs = cfg.propertysheets\nfor _, dir in ipairs(dirs) do\n_p(2,'<Import Project=\"%s\" />', path.translate(dir))\nend\nend\n_p(1,'</ImportGroup>')\nend\nend\nlocal function add_trailing_backslash(dir)\nif dir:len() > 0 and dir:sub(-1) ~= \"\\\\\" then\nreturn dir..\"\\\\\"\nend\nreturn dir\nend\nfunction vc2010.outputProperties(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nlocal target = cfg.buildtarget\nlocal outdir = add_trailing_backslash(target.directory)\nlocal intdir = add_trailing_backslash(iif(action.vstudio.intDirAbsolute\n, path.translate(\n path.join(prj.solution.location, cfg.objectsdir)\n, '\\\\')\n, cfg.objectsdir\n))\n_p(1,'<PropertyGroup '..if_config_and_platform()"
- " ..'>', premake.esc(cfginfo.name))\n_p(2,'<OutDir>%s</OutDir>', premake.esc(outdir))\nif cfg.platform == \"Xbox360\" then\n_p(2,'<OutputFile>$(OutDir)%s</OutputFile>', premake.esc(target.name))\nend\n_p(2,'<IntDir>%s</IntDir>', premake.esc(intdir))\n_p(2,'<TargetName>%s</TargetName>', premake.esc(path.getbasename(target.name)))\n_p(2,'<TargetExt>%s</TargetExt>', premake.esc(path.getextension(target.name)))\nif cfg.kind == \"SharedLib\" then\nlocal ignore = (cfg.flags.NoImportLib ~= nil)\n_p(2,'<IgnoreImportLibrary>%s</IgnoreImportLibrary>', tostring(ignore))\nend\nif cfg.platform == \"Durango\" then\n_p(2, '<ReferencePath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</ReferencePath>')\n_p(2, '<LibraryPath>$(Console_SdkLibPath)</LibraryPath>')\n_p(2, '<LibraryWPath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</LibraryWPath>')\n_p(2, '<IncludePath>$(Console_SdkIncludeRoot)</IncludePath>')\n_p(2, '<ExecutablePath>$(Console_SdkRoot)bin;$(VCInstallDir)bin\\\\x86_amd64;$(VCInstallDir)bin;$(Windo"
- "wsSDK_ExecutablePath_x86);$(VSInstallDir)Common7\\\\Tools\\\\bin;$(VSInstallDir)Common7\\\\tools;$(VSInstallDir)Common7\\\\ide;$(ProgramFiles)\\\\HTML Help Workshop;$(MSBuildToolsPath32);$(FxCopDir);$(PATH);</ExecutablePath>')\nif cfg.imagepath then\n_p(2, '<LayoutDir>%s</LayoutDir>', cfg.imagepath)\nelse\n_p(2, '<LayoutDir>%s</LayoutDir>', prj.name)\nend\nif cfg.pullmappingfile ~= nil then\n_p(2,'<PullMappingFile>%s</PullMappingFile>', premake.esc(cfg.pullmappingfile))\nend\n_p(2, '<LayoutExtensionFilter>*.pdb;*.ilk;*.exp;*.lib;*.winmd;*.appxrecipe;*.pri;*.idb</LayoutExtensionFilter>')\n_p(2, '<IsolateConfigurationsOnDeploy>true</IsolateConfigurationsOnDeploy>')\nend\nif cfg.kind ~= \"StaticLib\" then\n_p(2,'<LinkIncremental>%s</LinkIncremental>', tostring(premake.config.isincrementallink(cfg)))\nend\nif cfg.flags.NoManifest then\n_p(2,'<GenerateManifest>false</GenerateManifest>')\nend\n_p(1,'</PropertyGroup>')\nend\nend\nlocal function runtime(cfg)\nlocal runtime\nlocal flags = cfg.flags\nif premake.config.i"
- "sdebugbuild(cfg) then\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreadedDebug\", \"MultiThreadedDebugDLL\")\nelse\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreaded\", \"MultiThreadedDLL\")\nend\nreturn runtime\nend\nlocal function precompiled_header(cfg)\n if not cfg.flags.NoPCH and cfg.pchheader then\n_p(3,'<PrecompiledHeader>Use</PrecompiledHeader>')\n_p(3,'<PrecompiledHeaderFile>%s</PrecompiledHeaderFile>', cfg.pchheader)\nelse\n_p(3,'<PrecompiledHeader></PrecompiledHeader>')\nend\nend\nlocal function preprocessor(indent,cfg)\nif #cfg.defines > 0 then\n_p(indent,'<PreprocessorDefinitions>%s;%%(PreprocessorDefinitions)</PreprocessorDefinitions>'\n,premake.esc(table.concat(cfg.defines, \";\")))\nelse\n_p(indent,'<PreprocessorDefinitions></PreprocessorDefinitions>')\nend\nend\nlocal function include_dirs(indent,cfg)\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs> 0 then\n_p(indent,'<AdditionalIncludeDirectories>%s;%%(Ad"
- "ditionalIncludeDirectories)</AdditionalIncludeDirectories>'\n,premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\')))\nend\nend\nlocal function using_dirs(indent,cfg)\nif #cfg.usingdirs > 0 then\n_p(indent,'<AdditionalUsingDirectories>%s;%%(AdditionalUsingDirectories)</AdditionalUsingDirectories>'\n,premake.esc(path.translate(table.concat(cfg.usingdirs, \";\"), '\\\\')))\nend\nend\nlocal function resource_compile(cfg)\n_p(2,'<ResourceCompile>')\npreprocessor(3,cfg)\ninclude_dirs(3,cfg)\n_p(2,'</ResourceCompile>')\nend\nlocal function exceptions(cfg)\nif cfg.flags.NoExceptions then\n_p(3, '<ExceptionHandling>false</ExceptionHandling>')\nelseif cfg.flags.SEH then\n_p(3, '<ExceptionHandling>Async</ExceptionHandling>')\nend\nend\nlocal function rtti(cfg)\nif cfg.flags.NoRTTI and not cfg.flags.Managed then\n_p(3,'<RuntimeTypeInfo>false</RuntimeTypeInfo>')\nend\nend\nlocal function calling_convention(cfg)\nif cfg.flags.FastCall then\n_p(3,'<CallingConvention>FastCall</CallingConvention>')\nelseif cfg."
- "flags.StdCall then\n_p(3,'<CallingConvention>StdCall</CallingConvention>')\nend\nend\nlocal function wchar_t_builtin(cfg)\nif cfg.flags.NativeWChar then\n_p(3,'<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>')\nelseif cfg.flags.NoNativeWChar then\n_p(3,'<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>')\nend\nend\nlocal function sse(cfg)\nif cfg.flags.EnableSSE then\n_p(3, '<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>')\nelseif cfg.flags.EnableSSE2 then\n_p(3, '<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>')\nelseif cfg.flags.EnableAVX then\n_p(3, '<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>')\nelseif cfg.flags.EnableAVX2 then\n_p(3, '<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>')\nend\nend\nlocal function floating_point(cfg)\n if cfg.flags.FloatFast then\n_p(3,'<FloatingPointModel>Fast</FloatingPointModel>')\nelseif cfg."
- "flags.FloatStrict and not cfg.flags.Managed then\n_p(3,'<FloatingPointModel>Strict</FloatingPointModel>')\nend\nend\nlocal function debug_info(cfg)\nlocal debug_info = ''\nif cfg.flags.Symbols then\nif cfg.flags.C7DebugInfo then\ndebug_info = \"OldStyle\"\nelseif (action.vstudio.supports64bitEditContinue == false and cfg.platform == \"x64\")\nor cfg.flags.Managed\nor premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue\nthen\ndebug_info = \"ProgramDatabase\"\nelse\ndebug_info = \"EditAndContinue\"\nend\nend\n_p(3,'<DebugInformationFormat>%s</DebugInformationFormat>',debug_info)\nend\nlocal function minimal_build(cfg)\nif premake.config.isdebugbuild(cfg) and cfg.flags.EnableMinimalRebuild then\n_p(3,'<MinimalRebuild>true</MinimalRebuild>')\nelse\n_p(3,'<MinimalRebuild>false</MinimalRebuild>')\nend\nend\nlocal function compile_language(cfg)\nif cfg.options.ForceCPP then\n_p(3,'<CompileAs>CompileAsCpp</CompileAs>')\nelse\nif cfg.language == \"C\" then\n_p(3,'<CompileAs>CompileAsC</CompileAs>"
- "')\nend\nend\nend\nlocal function forcedinclude_files(indent,cfg)\nif #cfg.forcedincludes > 0 then\n_p(indent,'<ForcedIncludeFiles>%s</ForcedIncludeFiles>'\n,premake.esc(path.translate(table.concat(cfg.forcedincludes, \";\"), '\\\\')))\nend\nend\nlocal function vs10_clcompile(cfg)\n_p(2,'<ClCompile>')\nlocal unsignedChar = \"/J \"\nlocal buildoptions = cfg.buildoptions\nif cfg.platform == \"Orbis\" then\nunsignedChar = \"-funsigned-char \";\n_p(3,'<GenerateDebugInformation>%s</GenerateDebugInformation>', tostring(cfg.flags.Symbols ~= nil))\nend\nif cfg.language == \"C\" and not cfg.options.ForceCPP then\nbuildoptions = table.join(buildoptions, cfg.buildoptions_c)\nelse\nbuildoptions = table.join(buildoptions, cfg.buildoptions_cpp)\nend\n_p(3,'<AdditionalOptions>%s %s%%(AdditionalOptions)</AdditionalOptions>'\n, table.concat(premake.esc(buildoptions), \" \")\n, iif(cfg.flags.UnsignedChar, unsignedChar, \" \")\n)\n_p(3,'<Optimization>%s</Optimization>',optimisation(cfg))\ninclude_dirs(3, cfg)\nusing_dirs(3, cfg)"
- "\npreprocessor(3, cfg)\nminimal_build(cfg)\nif not premake.config.isoptimizedbuild(cfg.flags) then\nif not cfg.flags.Managed then\n_p(3,'<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>')\nend\nif cfg.flags.ExtraWarnings then\nend\nelse\n_p(3,'<StringPooling>true</StringPooling>')\nend\nif cfg.platform == \"Durango\" or cfg.flags.NoWinRT then\n_p(3, '<CompileAsWinRT>false</CompileAsWinRT>')\nend\n_p(3,'<RuntimeLibrary>%s</RuntimeLibrary>', runtime(cfg))\nif cfg.flags.NoBufferSecurityCheck then\n_p(3,'<BufferSecurityCheck>false</BufferSecurityCheck>')\nend\n_p(3,'<FunctionLevelLinking>true</FunctionLevelLinking>')\nif not cfg.flags.NoMultiProcessorCompilation and not cfg.flags.EnableMinimalRebuild then\n_p(3,'<MultiProcessorCompilation>true</MultiProcessorCompilation>')\nelse\n_p(3,'<MultiProcessorCompilation>false</MultiProcessorCompilation>')\nend\nprecompiled_header(cfg)\nif cfg.flags.ExtraWarnings then\n_p(3,'<WarningLevel>Level4</WarningLevel>')\nelseif cfg.flags.MinimumWarnings then\n_p(3,'<Warn"
- "ingLevel>Level1</WarningLevel>')\nelse\n_p(3,'<WarningLevel>Level3</WarningLevel>')\nend\nif cfg.flags.FatalWarnings then\n_p(3,'<TreatWarningAsError>true</TreatWarningAsError>')\nend\nexceptions(cfg)\nrtti(cfg)\ncalling_convention(cfg)\nwchar_t_builtin(cfg)\nsse(cfg)\nfloating_point(cfg)\ndebug_info(cfg)\nif cfg.flags.Symbols then\n_p(3,'<ProgramDataBaseFileName>$(OutDir)%s.pdb</ProgramDataBaseFileName>'\n, path.getbasename(cfg.buildtarget.name))\nend\nif cfg.flags.NoFramePointer then\n_p(3,'<OmitFramePointers>true</OmitFramePointers>')\nend\nif cfg.flags.UseFullPaths then\n_p(3, '<UseFullPaths>true</UseFullPaths>')\nend\ncompile_language(cfg)\nforcedinclude_files(3,cfg);\n_p(2,'</ClCompile>')\nend\nlocal function event_hooks(cfg)\nif #cfg.postbuildcommands> 0 then\n _p(2,'<PostBuildEvent>')\n_p(3,'<Command>%s</Command>',premake.esc(table.implode(cfg.postbuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PostBuildEvent>')\nend\nif #cfg.prebuildcommands> 0 then\n _p(2,'<PreBuildEvent>')\n_p(3,'<Command>%s"
- "</Command>',premake.esc(table.implode(cfg.prebuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PreBuildEvent>')\nend\nif #cfg.prelinkcommands> 0 then\n _p(2,'<PreLinkEvent>')\n_p(3,'<Command>%s</Command>',premake.esc(table.implode(cfg.prelinkcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PreLinkEvent>')\nend\nend\nlocal function additional_options(indent,cfg)\nif #cfg.linkoptions > 0 then\n_p(indent,'<AdditionalOptions>%s %%(AdditionalOptions)</AdditionalOptions>',\ntable.concat(premake.esc(cfg.linkoptions), \" \"))\nend\nend\nlocal function link_target_machine(index,cfg)\nlocal platforms = {x32 = 'MachineX86', x64 = 'MachineX64'}\nif platforms[cfg.platform] then\n_p(index,'<TargetMachine>%s</TargetMachine>', platforms[cfg.platform])\nend\nend\nlocal function item_def_lib(cfg)\nif cfg.kind == 'StaticLib' and cfg.platform ~= \"Xbox360\" then\n_p(1,'<Lib>')\n_p(2,'<OutputFile>$(OutDir)%s</OutputFile>',cfg.buildtarget.name)\nadditional_options(2,cfg)\nlink_target_machine(2,cfg)\n_p(1,'</Lib>')\nend\nend\nlocal f"
- "unction import_lib(cfg)\nif cfg.kind == \"SharedLib\" then\nlocal implibname = cfg.linktarget.fullpath\n_p(3,'<ImportLibrary>%s</ImportLibrary>',iif(cfg.flags.NoImportLib, cfg.objectsdir .. \"\\\\\" .. path.getname(implibname), implibname))\nend\nend\nlocal function hasmasmfiles(prj)\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nreturn #files > 0\nend\nlocal function vs10_masm(prj, cfg)\nif hasmasmfiles(prj) then\n_p(2, '<MASM>')\n_p(3,'<AdditionalOptions>%s %%(AdditionalOptions)</AdditionalOptions>'\n, table.concat(premake.esc(table.join(cfg.buildoptions, cfg.buildoptions_asm)), \" \")\n)\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs > 0 then\n_p(3, '<IncludePaths>%s;%%(IncludePaths)</IncludePaths>'\n, premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\'))\n)\nend\nlocal defines = table.join(cfg.defines)\ntable.insertflat(defines, iif(premake.config.isdebugbuild(cfg), \"_DEBUG\", {}))\ntable.insert(defines, iif(cfg.platform == \"x64\", \"_WIN64\", "
- "\"_WIN32\"))\ntable.insert(defines, iif(prj.kind == \"SharedLib\", \"_EXPORT=EXPORT\", \"_EXPORT=\"))\n_p(3, '<PreprocessorDefinitions>%s;%%(PreprocessorDefinitions)</PreprocessorDefinitions>'\n, premake.esc(table.concat(defines, \";\"))\n)\nif cfg.flags.FatalWarnings then\n_p(3,'<TreatWarningsAsErrors>true</TreatWarningsAsErrors>')\nend\nif cfg.flags.MinimumWarnings then\n_p(3,'<WarningLevel>0</WarningLevel>')\nelse\n_p(3,'<WarningLevel>3</WarningLevel>')\nend\n_p(2, '</MASM>')\nend\nend\nfunction vc2010.link(cfg)\n_p(2,'<Link>')\n_p(3,'<SubSystem>%s</SubSystem>', iif(cfg.kind == \"ConsoleApp\", \"Console\", \"Windows\"))\n_p(3,'<GenerateDebugInformation>%s</GenerateDebugInformation>', tostring(cfg.flags.Symbols ~= nil))\nif premake.config.isoptimizedbuild(cfg.flags) then\n_p(3,'<EnableCOMDATFolding>true</EnableCOMDATFolding>')\n_p(3,'<OptimizeReferences>true</OptimizeReferences>')\nend\nif cfg.kind ~= 'StaticLib' then\nvc2010.additionalDependencies(3,cfg)\n_p(3,'<OutputFile>$(OutDir)%s</OutputFile>', cfg.bui"
- "ldtarget.name)\nif #cfg.libdirs > 0 then\n_p(3,'<AdditionalLibraryDirectories>%s;%%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>'\n, premake.esc(path.translate(table.concat(cfg.libdirs, ';'), '\\\\'))\n)\nend\nif vc2010.config_type(cfg) == 'Application' and not cfg.flags.WinMain and not cfg.flags.Managed then\nif cfg.flags.Unicode then\n_p(3,'<EntryPointSymbol>wmainCRTStartup</EntryPointSymbol>')\nelse\n_p(3,'<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>')\nend\nend\nimport_lib(cfg)\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\n_p(3,'<ModuleDefinitionFile>%s</ModuleDefinitionFile>', deffile)\nend\nlink_target_machine(3,cfg)\nadditional_options(3,cfg)\nif cfg.flags.NoWinMD and vstudio.iswinrt() and prj.kind == \"WindowedApp\" then\n_p(3,'<GenerateWindowsMetadata>false</GenerateWindowsMetadata>' )\nend\nend\n_p(2,'</Link>')\nend\nfunction vc2010.additionalDependencies(tab,cfg)\nlocal links = premake.getlinks(cfg, \"system\", \"fullpath\")\nif #links > 0 then\nlocal deps"
- " = \"\"\nif cfg.platform == \"Orbis\" then\nfor _, v in ipairs(links) do\ndeps = deps .. \"-l\" .. v .. \";\"\nend\nelse\ndeps = table.concat(links, \";\")\nend\n_p(tab, '<AdditionalDependencies>%s;%s</AdditionalDependencies>'\n, deps\n, iif(cfg.platform == \"Durango\"\n, '%(XboxExtensionsDependencies)'\n, '%(AdditionalDependencies)'\n)\n)\nelseif cfg.platform == \"Durango\" then\n_p(tab, '<AdditionalDependencies>%%(XboxExtensionsDependencies)</AdditionalDependencies>')\nend\nend\nlocal function item_definitions(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(1,'<ItemDefinitionGroup ' ..if_config_and_platform() ..'>'\n,premake.esc(cfginfo.name))\nvs10_clcompile(cfg)\nresource_compile(cfg)\nitem_def_lib(cfg)\nvc2010.link(cfg)\nevent_hooks(cfg)\nvs10_masm(prj, cfg)\n_p(1,'</ItemDefinitionGroup>')\nend\nend\nfunction vc2010.getfilegroup(prj, group)\nlocal sortedfiles = prj.vc2010sortedfiles\nif not sortedfiles then"
- "\nsortedfiles = {\nClCompile = {},\nClInclude = {},\nMASM = {},\nNone = {},\nResourceCompile = {},\nAppxManifest = {},\nNatvis = {},\nImage = {},\nDeploymentContent = {}\n}\nlocal foundAppxManifest = false\nfor file in premake.project.eachfile(prj, true) do\nif path.issourcefilevs(file.name) then\ntable.insert(sortedfiles.ClCompile, file)\nelseif path.iscppheader(file.name) then\nif not table.icontains(prj.removefiles, file) then\ntable.insert(sortedfiles.ClInclude, file)\nend\nelseif path.isresourcefile(file.name) then\ntable.insert(sortedfiles.ResourceCompile, file)\nelseif path.isimagefile(file.name) then\ntable.insert(sortedfiles.Image, file)\nelseif path.isappxmanifest(file.name) then\nfoundAppxManifest = true\ntable.insert(sortedfiles.AppxManifest, file)\nelseif path.isnatvis(file.name) then\ntable.insert(sortedfiles.Natvis, file)\nelseif path.isasmfile(file.name) then\ntable.insert(sortedfiles.MASM, file)\nelseif file.flags and table.icontains(file.flags, \"DeploymentContent\") then\ntable.insert(sorted"
- "files.DeploymentContent, file)\nelse\ntable.insert(sortedfiles.None, file)\nend\nend\nif vstudio.iswinrt() and prj.kind == \"WindowedApp\" and not foundAppxManifest then\nvstudio.needAppxManifest = true\nlocal fcfg = {}\nfcfg.name = prj.name .. \"/Package.appxmanifest\"\nfcfg.vpath = premake.project.getvpath(prj, fcfg.name)\ntable.insert(sortedfiles.AppxManifest, fcfg)\nlocal logo = {}\nlogo.name = prj.name .. \"/Logo.png\"\nlogo.vpath = logo.name\ntable.insert(sortedfiles.Image, logo)\nlocal smallLogo = {}\nsmallLogo.name = prj.name .. \"/SmallLogo.png\"\nsmallLogo.vpath = smallLogo.name\ntable.insert(sortedfiles.Image, smallLogo)\nlocal storeLogo = {}\nstoreLogo.name = prj.name .. \"/StoreLogo.png\"\nstoreLogo.vpath = storeLogo.name\ntable.insert(sortedfiles.Image, storeLogo)\nlocal splashScreen = {}\nsplashScreen.name = prj.name .. \"/SplashScreen.png\"\nsplashScreen.vpath = splashScreen.name\ntable.insert(sortedfiles.Image, splashScreen)\nend\nprj.vc2010sortedfiles = sortedfiles\nend\nreturn sortedfile"
- "s[group]\nend\nfunction vc2010.files(prj)\nvc2010.simplefilesgroup(prj, \"ClInclude\")\nvc2010.compilerfilesgroup(prj)\nvc2010.simplefilesgroup(prj, \"None\")\nvc2010.customtaskgroup(prj)\nvc2010.simplefilesgroup(prj, \"ResourceCompile\")\nvc2010.simplefilesgroup(prj, \"AppxManifest\")\nvc2010.simplefilesgroup(prj, \"Natvis\")\nvc2010.deploymentcontentgroup(prj, \"Image\")\nvc2010.deploymentcontentgroup(prj, \"DeploymentContent\", \"None\")\nend\nfunction vc2010.customtaskgroup(prj)\nlocal files = { }\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal fcfg = { }\nfcfg.name = path.getrelative(prj.location,buildtask[1])\nfcfg.vpath = path.trimdots(fcfg.name)\ntable.insert(files, fcfg)\nend\nend\nif #files > 0 then\n_p(1,'<ItemGroup>')\nlocal groupedBuildTasks = {}\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nif (groupedBuildTasks[buildtask[1]] == nil) then\ngroupedB"
- "uildTasks[buildtask[1]] = {}\nend\ntable.insert(groupedBuildTasks[buildtask[1]], buildtask)\nend\nend\nfor name, custombuildtask in pairs(groupedBuildTasks or {}) do\n_p(2,'<CustomBuild Include=\\\"%s\\\">', path.translate(path.getrelative(prj.location,name), \"\\\\\"))\n_p(3,'<FileType>Text</FileType>')\nlocal cmd = \"\"\nlocal outputs = \"\"\nfor _, buildtask in ipairs(custombuildtask or {}) do\nfor _, cmdline in ipairs(buildtask[4] or {}) do\ncmd = cmd .. cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + 1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[1])))\ncmd = string.gsub(cmd, \"%$%(@%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[2])))\ncmd = cmd .. \"\\r\\n\"\nend\noutputs = outputs .. path.getrelative(prj.location,buildtask[2]) .. \";\"\nend\n_p(3,'<Command>%s</Command>',cmd)\n_p"
- "(3,'<Outputs>%s%%(Outputs)</Outputs>',outputs)\n_p(3,'<SubType>Designer</SubType>')\n_p(3,'<Message></Message>')\n_p(2,'</CustomBuild>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.simplefilesgroup(prj, section, subtype)\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\nif subtype then\n_p(2,'<%s Include=\\\"%s\\\">', section, path.translate(file.name, \"\\\\\"))\n_p(3,'<SubType>%s</SubType>', subtype)\n_p(2,'</%s>', section)\nelse\n_p(2,'<%s Include=\\\"%s\\\" />', section, path.translate(file.name, \"\\\\\"))\nend\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.deploymentcontentgroup(prj, section, filetype)\nif filetype == nil then\nfiletype = section\nend\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\n_p(2,'<%s Include=\\\"%s\\\">', filetype, path.translate(file.name, \"\\\\\"))\n_p(3,'<DeploymentContent>true</DeploymentContent>')\n_p(3,'<Li"
- "nk>%s</Link>', path.translate(file.vpath, \"\\\\\"))\n_p(2,'</%s>', filetype)\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.compilerfilesgroup(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"ClCompile\")\nif #files > 0 then\nlocal config_mappings = {}\nfor _, cfginfo in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nif cfg.pchheader and cfg.pchsource and not cfg.flags.NoPCH then\nconfig_mappings[cfginfo] = path.translate(cfg.pchsource, \"\\\\\")\nend\nend\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate(file.name, \"\\\\\")\n_p(2, '<ClCompile Include=\\\"%s\\\">', translatedpath)\n_p(3, '<ObjectFileName>$(IntDir)%s\\\\</ObjectFileName>'\n, premake.esc(path.translate(path.trimdots(path.getdirectory(file.name))))\n)\nif path.iscxfile(file.name) then\n_p(3, '<CompileAsWinRT>true</CompileAsWinRT>')\n_p(3, '<RuntimeTypeInfo>true</RuntimeTypeInfo>')\n_p(3, '<Precompil"
- "edHeader>NotUsing</PrecompiledHeader>')\nend\nif vstudio.iswinrt() and string.len(file.name) > 2 and string.sub(file.name, -2) == \".c\" then\n_p(3,'<CompileAsWinRT>FALSE</CompileAsWinRT>')\nend\nfor _, cfginfo in ipairs(configs) do\nif config_mappings[cfginfo] and translatedpath == config_mappings[cfginfo] then\n_p(3,'<PrecompiledHeader '.. if_config_and_platform() .. '>Create</PrecompiledHeader>', premake.esc(cfginfo.name))\nconfig_mappings[cfginfo] = nil --only one source file per pch\nend\nend\nlocal nopch = table.icontains(prj.nopch, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif nopch or table.icontains(cfg.nopch, file.name) then\n_p(3,'<PrecompiledHeader '.. if_config_and_platform() .. '>NotUsing</PrecompiledHeader>', premake.esc(vsconfig.name))\nend\nend\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vscon"
- "fig.src_platform)\nlocal fileincfg = table.icontains(cfg.files, file.name)\nlocal cfgexcluded = table.icontains(cfg.excludes, file.name)\nif excluded or not fileincfg or cfgexcluded then\n_p(3, '<ExcludedFromBuild '\n.. if_config_and_platform()\n.. '>true</ExcludedFromBuild>'\n, premake.esc(vsconfig.name)\n)\nend\nend\nif prj.flags and prj.flags.Managed then\nlocal prjforcenative = table.icontains(prj.forcenative, file.name)\nfor _,vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif prjforcenative or table.icontains(cfg.forcenative, file.name) then\n_p(3, '<CompileAsManaged ' .. if_config_and_platform() .. '>false</CompileAsManaged>', premake.esc(vsconfig.name))\nend\nend\nend\n_p(2,'</ClCompile>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.masmfiles(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nif #files > 0 then\n_p(1, '<ItemGroup>')\nfor _, file in ipairs(files) do\nlocal trans"
- "latedpath = path.translate(file.name, \"\\\\\")\n_p(2, '<MASM Include=\"%s\">', translatedpath)\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nlocal fileincfg = table.icontains(cfg.files, file.name)\nlocal cfgexcluded = table.icontains(cfg.excludes, file.name)\nif excluded or not fileincfg or cfgexcluded then\n_p(3, '<ExcludedFromBuild '\n.. if_config_and_platform()\n.. '>true</ExcludedFromBuild>'\n, premake.esc(vsconfig.name)\n)\nend\nend\n_p(2, '</MASM>')\nend\n_p(1, '</ItemGroup>')\nend\nend\nfunction vc2010.header(targets)\nio.eol = \"\\r\\n\"\n_p('<?xml version=\"1.0\" encoding=\"utf-8\"?>')\nlocal t = \"\"\nif targets then\nt = ' DefaultTargets=\"' .. targets .. '\"'\nend\n_p('<Project%s ToolsVersion=\"%s\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">', t, action.vstudio.toolsVersion)\nend\nfunction premake.vs2010_vcxproj(prj)\nlocal usemasm = hasmasmfile"
- "s(prj)\nio.indent = \" \"\nvc2010.header(\"Build\")\nvs2010_config(prj)\nvs2010_globals(prj)\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.Default.props\" />')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nvc2010.configurationPropertyGroup(cfg, cfginfo)\nend\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.props\" />')\n_p(1,'<ImportGroup Label=\"ExtensionSettings\">')\nif usemasm then\n_p(2, '<Import Project=\"$(VCTargetsPath)\\\\BuildCustomizations\\\\masm.props\" />')\nend\n_p(1,'</ImportGroup>')\nimport_props(prj)\n_p(1,'<PropertyGroup Label=\"UserMacros\" />')\nvc2010.outputProperties(prj)\nitem_definitions(prj)\nif prj.flags.Managed then\nvc2010.clrReferences(prj)\nend\nvc2010.files(prj)\nvc2010.projectReferences(prj)\nvc2010.sdkReferences(prj)\nvc2010.masmfiles(prj)\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.targets\" />')\n_p(1,'<ImportGroup Label=\"ExtensionTargets\">')"
- "\nif usemasm then\n_p(2, '<Import Project=\"$(VCTargetsPath)\\\\BuildCustomizations\\\\masm.targets\" />')\nend\n_p(1,'</ImportGroup>')\n_p('</Project>')\nend\nfunction vc2010.clrReferences(prj)\nif #prj.clrreferences == 0 then\nreturn\nend\n_p(1,'<ItemGroup>')\nfor _, ref in ipairs(prj.clrreferences) do\nif os.isfile(ref) then\nlocal assembly = path.getbasename(ref)\n_p(2,'<Reference Include=\"%s\">', assembly)\n_p(3,'<HintPath>%s</HintPath>', path.getrelative(prj.location, ref))\n_p(2,'</Reference>')\nelse\n_p(2,'<Reference Include=\"%s\" />', ref)\nend\nend\n_p(1,'</ItemGroup>')\nend\nfunction vc2010.projectReferences(prj)\nlocal deps = premake.getdependencies(prj)\nif #deps == 0 and #prj.vsimportreferences == 0 then\nreturn\nend\n_p(1,'<ItemGroup>')\nfor _, dep in ipairs(deps) do\nlocal deppath = path.getrelative(prj.location, vstudio.projectfile(dep))\n_p(2,'<ProjectReference Include=\\\"%s\\\">', path.translate(deppath, \"\\\\\"))\n_p(3,'<Project>{%s}</Project>', dep.uuid)\nif vstudio.iswinrt() then\n_p("
- "3,'<ReferenceOutputAssembly>false</ReferenceOutputAssembly>')\nend\n_p(2,'</ProjectReference>')\nend\nfor _, ref in ipairs(prj.vsimportreferences) do\nlocal iprj = premake.vstudio.getimportprj(ref, prj.solution)\n_p(2,'<ProjectReference Include=\\\"%s\\\">', iprj.relpath)\n_p(3,'<Project>{%s}</Project>', iprj.uuid)\n_p(2,'</ProjectReference>')\nend\n_p(1,'</ItemGroup>')\nend\nfunction vc2010.sdkReferences(prj)\nlocal refs = prj.sdkreferences\nif #refs > 0 then\n_p(1,'<ItemGroup>')\nfor _, ref in ipairs(refs) do\n_p(2,'<SDKReference Include=\\\"%s\\\" />', ref)\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.debugdir(cfg)\n_p(2, '<DebuggerFlavor>%s</DebuggerFlavor>'\n, iif(cfg.platform == \"Orbis\", 'ORBISDebugger', 'WindowsLocalDebugger')\n)\nif cfg.debugdir and not vstudio.iswinrt() then\n_p(2, '<LocalDebuggerWorkingDirectory>%s</LocalDebuggerWorkingDirectory>'\n, path.translate(cfg.debugdir, '\\\\')\n)\nend\nif cfg.debugargs then\n_p(2, '<LocalDebuggerCommandArguments>%s</LocalDebuggerCommandArguments>"
- "'\n, table.concat(cfg.debugargs, \" \")\n)\nend\nif cfg.debugenvs and #cfg.debugenvs > 0 then\n_p(2, '<LocalDebuggerEnvironment>%s%s</LocalDebuggerEnvironment>'\n, table.concat(cfg.debugenvs, \"\\n\")\n, iif(cfg.flags.DebugEnvsInherit,'\\n$(LocalDebuggerEnvironment)', '')\n)\nif cfg.flags.DebugEnvsDontMerge then\n_p(2, '<LocalDebuggerMergeEnvironment>false</LocalDebuggerMergeEnvironment>')\nend\nend\nif cfg.deploymode then\n_p(' <DeployMode>%s</DeployMode>', cfg.deploymode)\nend\nend\nfunction premake.vs2010_vcxproj_user(prj)\nio.indent = \" \"\nvc2010.header()\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(' <PropertyGroup '.. if_config_and_platform() ..'>', premake.esc(cfginfo.name))\nvc2010.debugdir(cfg)\n_p(' </PropertyGroup>')\nend\n_p('</Project>')\nend\nlocal png1x1data = {\n0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, -- .PNG........IHDR\n0x00, 0x00, 0"
- "x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25, 0xdb, 0x56, -- .............%.V\n0xca, 0x00, 0x00, 0x00, 0x03, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x00, 0xa7, 0x7a, 0x3d, 0xda, -- .....PLTE....z=.\n0x00, 0x00, 0x00, 0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, -- ....tRNS.@..f...\n0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xe2, -- .IDAT..c`.......\n0x21, 0xbc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, -- !.3....IEND.B`.\n}\nfunction png1x1(obj, filename)\nfilename = premake.project.getfilename(obj, filename)\nlocal f, err = io.open(filename, \"wb\")\nif f then\nfor _, byte in ipairs(png1x1data) do\nf:write(string.char(byte))\nend\nf:close()\nend\nend\nfunction premake.vs2010_appxmanifest(prj)\nio.indent = \" \"\nio.eol = \"\\r\\n\"\n_p('<?xml version=\"1.0\" encoding=\"utf-8\"?>')\nif vstudio.toolset == \"v120_wp81\" then\n_p('<Package xmlns=\"http://schemas.microso"
- "ft.com/appx/2010/manifest\" xmlns:m2=\"http://schemas.microsoft.com/appx/2013/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/2014/manifest\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\">')\nelseif vstudio.storeapp == \"8.1\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/2013/manifest\">')\nelseif vstudio.storeapp == \"durango\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:mx=\"http://schemas.microsoft.com/appx/2013/xbox/manifest\" IgnorableNamespaces=\"mx\">')\nelse\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\">')\nend\n_p(1,'<Identity Name=\"' .. prj.uuid .. '\"')\n_p(2,'Publisher=\"CN=Publisher\"')\n_p(2,'Version=\"1.0.0.0\" />')\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == "
- "\"8.2\" then\n_p(1,'<mp:PhoneIdentity PhoneProductId=\"' .. prj.uuid .. '\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>')\nend\n_p(1, '<Properties>')\n_p(2, '<DisplayName>' .. prj.name .. '</DisplayName>')\n_p(2, '<PublisherDisplayName>PublisherDisplayName</PublisherDisplayName>')\n_p(2, '<Logo>' .. prj.name .. '\\\\StoreLogo.png</Logo>')\npng1x1(prj, \"%%/StoreLogo.png\")\n_p(2, '<Description>' .. prj.name .. '</Description>')\n_p(1,'</Properties>')\nif vstudio.storeapp == \"8.2\" then\n_p(1, '<Dependencies>')\n_p(2, '<TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.10069.0\" MaxVersionTested=\"10.0.10069.0\" />')\n_p(1, '</Dependencies>')\nelseif vstudio.storeapp == \"durango\" then\n_p(1, '<Prerequisites>')\n_p(2, '<OSMinVersion>6.2</OSMinVersion>')\n_p(2, '<OSMaxVersionTested>6.2</OSMaxVersionTested>')\n_p(1, '</Prerequisites>')\nelse\n_p(1, '<Prerequisites>')\n_p(2, '<OSMinVersion>6.3.0</OSMinVersion>')\n_p(2, '<OSMaxVersionTested>6.3.0</OSMaxVersionTested>')\n_p(1, '</Prer"
- "equisites>')\nend\n_p(1,'<Resources>')\n_p(2,'<Resource Language=\"en-us\"/>')\n_p(1,'</Resources>')\n_p(1,'<Applications>')\n_p(2,'<Application Id=\"App\"')\n_p(3,'Executable=\"$targetnametoken$.exe\"')\n_p(3,'EntryPoint=\"' .. prj.name .. '.App\">')\nif vstudio.storeapp == \"durango\" then\n_p(3, '<VisualElements')\n_p(4, 'DisplayName=\"' .. prj.name .. '\"')\n_p(4, 'Logo=\"' .. prj.name .. '\\\\Logo.png\"')\npng1x1(prj, \"%%/Logo.png\")\n_p(4, 'SmallLogo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\n_p(4, 'Description=\"' .. prj.name .. '\"')\n_p(4, 'ForegroundText=\"light\"')\n_p(4, 'BackgroundColor=\"transparent\">')\n_p(5, '<SplashScreen Image=\"' .. prj.name .. '\\\\SplashScreen.png\" />')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '</VisualElements>')\n_p(3, '<Extensions>')\n_p(4, '<mx:Extension Category=\"xbox.system.resources\">')\n_p(4, '<mx:XboxSystemResources />')\n_p(4, '</mx:Extension>')\n_p(3, '</Extensions>')\nelse\n_p(3, '<m3:VisualElements')\n_p(4, 'DisplayN"
- "ame=\"' .. prj.name .. '\"')\n_p(4, 'Square150x150Logo=\"' .. prj.name .. '\\\\Logo.png\"')\npng1x1(prj, \"%%/Logo.png\")\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == \"8.2\" then\n_p(4, 'Square44x44Logo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\nelse\n_p(4, 'Square30x30Logo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\nend\n_p(4, 'Description=\"' .. prj.name .. '\"')\n_p(4, 'ForegroundText=\"light\"')\n_p(4, 'BackgroundColor=\"transparent\">')\n_p(4, '<m3:SplashScreen Image=\"' .. prj.name .. '\\\\SplashScreen.png\" />')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '</m3:VisualElements>')\nend\n_p(2,'</Application>')\n_p(1,'</Applications>')\n_p('</Package>')\nend\n",
+ " ..'>', premake.esc(cfginfo.name))\n_p(2,'<OutDir>%s</OutDir>', iif(outdir:len() > 0, premake.esc(outdir), \".\\\\\"))\nif cfg.platform == \"Xbox360\" then\n_p(2,'<OutputFile>$(OutDir)%s</OutputFile>', premake.esc(target.name))\nend\n_p(2,'<IntDir>%s</IntDir>', premake.esc(intdir))\n_p(2,'<TargetName>%s</TargetName>', premake.esc(path.getbasename(target.name)))\n_p(2,'<TargetExt>%s</TargetExt>', premake.esc(path.getextension(target.name)))\nif cfg.kind == \"SharedLib\" then\nlocal ignore = (cfg.flags.NoImportLib ~= nil)\n_p(2,'<IgnoreImportLibrary>%s</IgnoreImportLibrary>', tostring(ignore))\nend\nif cfg.platform == \"Durango\" then\n_p(2, '<ReferencePath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</ReferencePath>')\n_p(2, '<LibraryPath>$(Console_SdkLibPath)</LibraryPath>')\n_p(2, '<LibraryWPath>$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)</LibraryWPath>')\n_p(2, '<IncludePath>$(Console_SdkIncludeRoot)</IncludePath>')\n_p(2, '<ExecutablePath>$(Console_SdkRoot)bin;$(VCInstallDir)bin\\\\x8"
+ "6_amd64;$(VCInstallDir)bin;$(WindowsSDK_ExecutablePath_x86);$(VSInstallDir)Common7\\\\Tools\\\\bin;$(VSInstallDir)Common7\\\\tools;$(VSInstallDir)Common7\\\\ide;$(ProgramFiles)\\\\HTML Help Workshop;$(MSBuildToolsPath32);$(FxCopDir);$(PATH);</ExecutablePath>')\nif cfg.imagepath then\n_p(2, '<LayoutDir>%s</LayoutDir>', cfg.imagepath)\nelse\n_p(2, '<LayoutDir>%s</LayoutDir>', prj.name)\nend\nif cfg.pullmappingfile ~= nil then\n_p(2,'<PullMappingFile>%s</PullMappingFile>', premake.esc(cfg.pullmappingfile))\nend\n_p(2, '<LayoutExtensionFilter>*.pdb;*.ilk;*.exp;*.lib;*.winmd;*.appxrecipe;*.pri;*.idb</LayoutExtensionFilter>')\n_p(2, '<IsolateConfigurationsOnDeploy>true</IsolateConfigurationsOnDeploy>')\nend\nif cfg.kind ~= \"StaticLib\" then\n_p(2,'<LinkIncremental>%s</LinkIncremental>', tostring(premake.config.isincrementallink(cfg)))\nend\nif cfg.flags.NoManifest then\n_p(2,'<GenerateManifest>false</GenerateManifest>')\nend\n_p(1,'</PropertyGroup>')\nend\nend\nlocal function runtime(cfg)\nlocal runtime\nlocal flag"
+ "s = cfg.flags\nif premake.config.isdebugbuild(cfg) then\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreadedDebug\", \"MultiThreadedDebugDLL\")\nelse\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreaded\", \"MultiThreadedDLL\")\nend\nreturn runtime\nend\nlocal function precompiled_header(cfg)\n if not cfg.flags.NoPCH and cfg.pchheader then\n_p(3,'<PrecompiledHeader>Use</PrecompiledHeader>')\n_p(3,'<PrecompiledHeaderFile>%s</PrecompiledHeaderFile>', cfg.pchheader)\nelse\n_p(3,'<PrecompiledHeader></PrecompiledHeader>')\nend\nend\nlocal function preprocessor(indent,cfg)\nif #cfg.defines > 0 then\n_p(indent,'<PreprocessorDefinitions>%s;%%(PreprocessorDefinitions)</PreprocessorDefinitions>'\n,premake.esc(table.concat(cfg.defines, \";\")))\nelse\n_p(indent,'<PreprocessorDefinitions></PreprocessorDefinitions>')\nend\nend\nlocal function include_dirs(indent,cfg)\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs> 0 then\n_p(indent,'<Add"
+ "itionalIncludeDirectories>%s;%%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>'\n,premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\')))\nend\nend\nlocal function using_dirs(indent,cfg)\nif #cfg.usingdirs > 0 then\n_p(indent,'<AdditionalUsingDirectories>%s;%%(AdditionalUsingDirectories)</AdditionalUsingDirectories>'\n,premake.esc(path.translate(table.concat(cfg.usingdirs, \";\"), '\\\\')))\nend\nend\nlocal function resource_compile(cfg)\n_p(2,'<ResourceCompile>')\npreprocessor(3,cfg)\ninclude_dirs(3,cfg)\n_p(2,'</ResourceCompile>')\nend\nlocal function exceptions(cfg)\nif cfg.flags.NoExceptions then\n_p(3, '<ExceptionHandling>false</ExceptionHandling>')\nelseif cfg.flags.SEH then\n_p(3, '<ExceptionHandling>Async</ExceptionHandling>')\nend\nend\nlocal function rtti(cfg)\nif cfg.flags.NoRTTI and not cfg.flags.Managed then\n_p(3,'<RuntimeTypeInfo>false</RuntimeTypeInfo>')\nend\nend\nlocal function calling_convention(cfg)\nif cfg.flags.FastCall then\n_p(3,'<CallingConvention>FastCall<"
+ "/CallingConvention>')\nelseif cfg.flags.StdCall then\n_p(3,'<CallingConvention>StdCall</CallingConvention>')\nend\nend\nlocal function wchar_t_builtin(cfg)\nif cfg.flags.NativeWChar then\n_p(3,'<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>')\nelseif cfg.flags.NoNativeWChar then\n_p(3,'<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>')\nend\nend\nlocal function sse(cfg)\nif cfg.flags.EnableSSE then\n_p(3, '<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>')\nelseif cfg.flags.EnableSSE2 then\n_p(3, '<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>')\nelseif cfg.flags.EnableAVX then\n_p(3, '<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>')\nelseif cfg.flags.EnableAVX2 then\n_p(3, '<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>')\nend\nend\nlocal function floating_point(cfg)\n if cfg.flags.FloatFast then\n_p(3,'<FloatingPointModel>Fast</"
+ "FloatingPointModel>')\nelseif cfg.flags.FloatStrict and not cfg.flags.Managed then\n_p(3,'<FloatingPointModel>Strict</FloatingPointModel>')\nend\nend\nlocal function debug_info(cfg)\nlocal debug_info = ''\nif cfg.flags.Symbols then\nif cfg.flags.C7DebugInfo then\ndebug_info = \"OldStyle\"\nelseif (action.vstudio.supports64bitEditContinue == false and cfg.platform == \"x64\")\nor cfg.flags.Managed\nor premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue\nthen\ndebug_info = \"ProgramDatabase\"\nelse\ndebug_info = \"EditAndContinue\"\nend\nend\n_p(3,'<DebugInformationFormat>%s</DebugInformationFormat>',debug_info)\nend\nlocal function minimal_build(cfg)\nif premake.config.isdebugbuild(cfg) and cfg.flags.EnableMinimalRebuild then\n_p(3,'<MinimalRebuild>true</MinimalRebuild>')\nelse\n_p(3,'<MinimalRebuild>false</MinimalRebuild>')\nend\nend\nlocal function compile_language(cfg)\nif cfg.options.ForceCPP then\n_p(3,'<CompileAs>CompileAsCpp</CompileAs>')\nelse\nif cfg.language == \"C\" then\n_p(3,"
+ "'<CompileAs>CompileAsC</CompileAs>')\nend\nend\nend\nlocal function forcedinclude_files(indent,cfg)\nif #cfg.forcedincludes > 0 then\n_p(indent,'<ForcedIncludeFiles>%s</ForcedIncludeFiles>'\n,premake.esc(path.translate(table.concat(cfg.forcedincludes, \";\"), '\\\\')))\nend\nend\nlocal function vs10_clcompile(cfg)\n_p(2,'<ClCompile>')\nlocal unsignedChar = \"/J \"\nlocal buildoptions = cfg.buildoptions\nif cfg.platform == \"Orbis\" then\nunsignedChar = \"-funsigned-char \";\n_p(3,'<GenerateDebugInformation>%s</GenerateDebugInformation>', tostring(cfg.flags.Symbols ~= nil))\nend\nif cfg.language == \"C\" and not cfg.options.ForceCPP then\nbuildoptions = table.join(buildoptions, cfg.buildoptions_c)\nelse\nbuildoptions = table.join(buildoptions, cfg.buildoptions_cpp)\nend\n_p(3,'<AdditionalOptions>%s %s%%(AdditionalOptions)</AdditionalOptions>'\n, table.concat(premake.esc(buildoptions), \" \")\n, iif(cfg.flags.UnsignedChar, unsignedChar, \" \")\n)\n_p(3,'<Optimization>%s</Optimization>',optimisation(cfg))\ninclud"
+ "e_dirs(3, cfg)\nusing_dirs(3, cfg)\npreprocessor(3, cfg)\nminimal_build(cfg)\nif not premake.config.isoptimizedbuild(cfg.flags) then\nif not cfg.flags.Managed then\n_p(3, '<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>')\nend\nif cfg.flags.ExtraWarnings then\nend\nelse\n_p(3, '<StringPooling>true</StringPooling>')\nend\nif cfg.platform == \"Durango\" or cfg.flags.NoWinRT then\n_p(3, '<CompileAsWinRT>false</CompileAsWinRT>')\nend\n_p(3, '<RuntimeLibrary>%s</RuntimeLibrary>', runtime(cfg))\nif cfg.flags.NoBufferSecurityCheck then\n_p(3, '<BufferSecurityCheck>false</BufferSecurityCheck>')\nend\n_p(3,'<FunctionLevelLinking>true</FunctionLevelLinking>')\nif not cfg.flags.NoMultiProcessorCompilation and not cfg.flags.EnableMinimalRebuild then\n_p(3, '<MultiProcessorCompilation>true</MultiProcessorCompilation>')\nelse\n_p(3, '<MultiProcessorCompilation>false</MultiProcessorCompilation>')\nend\nprecompiled_header(cfg)\nif cfg.flags.PedanticWarnings then\n_p(3, '<WarningLevel>EnableAllWarnings</WarningLevel"
+ ">')\nelseif cfg.flags.ExtraWarnings then\n_p(3, '<WarningLevel>Level4</WarningLevel>')\nelseif cfg.flags.MinimumWarnings then\n_p(3, '<WarningLevel>Level1</WarningLevel>')\nelse\n_p(3 ,'<WarningLevel>Level3</WarningLevel>')\nend\nif cfg.flags.FatalWarnings then\n_p(3, '<TreatWarningAsError>true</TreatWarningAsError>')\nend\nexceptions(cfg)\nrtti(cfg)\ncalling_convention(cfg)\nwchar_t_builtin(cfg)\nsse(cfg)\nfloating_point(cfg)\ndebug_info(cfg)\nif cfg.flags.Symbols\nand _ACTION:sub(3) ~= \"2017\"\nthen\n_p(3, '<ProgramDataBaseFileName>$(OutDir)%s.pdb</ProgramDataBaseFileName>'\n, path.getbasename(cfg.buildtarget.name)\n)\nend\nif cfg.flags.NoFramePointer then\n_p(3, '<OmitFramePointers>true</OmitFramePointers>')\nend\nif cfg.flags.UseFullPaths then\n_p(3, '<UseFullPaths>true</UseFullPaths>')\nend\ncompile_language(cfg)\nforcedinclude_files(3,cfg);\n_p(2,'</ClCompile>')\nend\nlocal function event_hooks(cfg)\nif #cfg.postbuildcommands> 0 then\n _p(2,'<PostBuildEvent>')\n_p(3,'<Command>%s</Command>',premake.e"
+ "sc(table.implode(cfg.postbuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PostBuildEvent>')\nend\nif #cfg.prebuildcommands> 0 then\n _p(2,'<PreBuildEvent>')\n_p(3,'<Command>%s</Command>',premake.esc(table.implode(cfg.prebuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PreBuildEvent>')\nend\nif #cfg.prelinkcommands> 0 then\n _p(2,'<PreLinkEvent>')\n_p(3,'<Command>%s</Command>',premake.esc(table.implode(cfg.prelinkcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PreLinkEvent>')\nend\nend\nlocal function additional_options(indent,cfg)\nif #cfg.linkoptions > 0 then\n_p(indent,'<AdditionalOptions>%s %%(AdditionalOptions)</AdditionalOptions>',\ntable.concat(premake.esc(cfg.linkoptions), \" \"))\nend\nend\nlocal function link_target_machine(index,cfg)\nlocal platforms = {x32 = 'MachineX86', x64 = 'MachineX64'}\nif platforms[cfg.platform] then\n_p(index,'<TargetMachine>%s</TargetMachine>', platforms[cfg.platform])\nend\nend\nlocal function item_def_lib(cfg)\nif cfg.kind == 'StaticLib' and cfg.platform ~= \"Xbox360"
+ "\" then\n_p(1,'<Lib>')\n_p(2,'<OutputFile>$(OutDir)%s</OutputFile>',cfg.buildtarget.name)\nadditional_options(2,cfg)\nlink_target_machine(2,cfg)\n_p(1,'</Lib>')\nend\nend\nlocal function import_lib(cfg)\nif cfg.kind == \"SharedLib\" then\nlocal implibname = cfg.linktarget.fullpath\n_p(3,'<ImportLibrary>%s</ImportLibrary>',iif(cfg.flags.NoImportLib, cfg.objectsdir .. \"\\\\\" .. path.getname(implibname), implibname))\nend\nend\nlocal function hasmasmfiles(prj)\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nreturn #files > 0\nend\nlocal function vs10_masm(prj, cfg)\nif hasmasmfiles(prj) then\n_p(2, '<MASM>')\n_p(3,'<AdditionalOptions>%s %%(AdditionalOptions)</AdditionalOptions>'\n, table.concat(premake.esc(table.join(cfg.buildoptions, cfg.buildoptions_asm)), \" \")\n)\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs > 0 then\n_p(3, '<IncludePaths>%s;%%(IncludePaths)</IncludePaths>'\n, premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\'))\n)\nend\nlocal de"
+ "fines = table.join(cfg.defines)\ntable.insertflat(defines, iif(premake.config.isdebugbuild(cfg), \"_DEBUG\", {}))\ntable.insert(defines, iif(cfg.platform == \"x64\", \"_WIN64\", \"_WIN32\"))\ntable.insert(defines, iif(prj.kind == \"SharedLib\", \"_EXPORT=EXPORT\", \"_EXPORT=\"))\n_p(3, '<PreprocessorDefinitions>%s;%%(PreprocessorDefinitions)</PreprocessorDefinitions>'\n, premake.esc(table.concat(defines, \";\"))\n)\nif cfg.flags.FatalWarnings then\n_p(3,'<TreatWarningsAsErrors>true</TreatWarningsAsErrors>')\nend\nif cfg.flags.MinimumWarnings then\n_p(3,'<WarningLevel>0</WarningLevel>')\nelse\n_p(3,'<WarningLevel>3</WarningLevel>')\nend\n_p(2, '</MASM>')\nend\nend\nfunction vc2010.link(cfg)\n_p(2,'<Link>')\n_p(3,'<SubSystem>%s</SubSystem>', iif(cfg.kind == \"ConsoleApp\", \"Console\", \"Windows\"))\n_p(3,'<GenerateDebugInformation>%s</GenerateDebugInformation>', tostring(cfg.flags.Symbols ~= nil))\nif cfg.flags.Symbols\nand _ACTION:sub(3) == \"2017\"\nthen\n_p(3, '<ProgramDataBaseFileName>$(OutDir)%s.pdb</Prog"
+ "ramDataBaseFileName>'\n, path.getbasename(cfg.buildtarget.name)\n)\nend\nif premake.config.isoptimizedbuild(cfg.flags) then\n_p(3,'<EnableCOMDATFolding>true</EnableCOMDATFolding>')\n_p(3,'<OptimizeReferences>true</OptimizeReferences>')\nend\nif cfg.kind ~= 'StaticLib' then\nvc2010.additionalDependencies(3,cfg)\n_p(3,'<OutputFile>$(OutDir)%s</OutputFile>', cfg.buildtarget.name)\nif #cfg.libdirs > 0 then\n_p(3,'<AdditionalLibraryDirectories>%s;%%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>'\n, premake.esc(path.translate(table.concat(cfg.libdirs, ';'), '\\\\'))\n)\nend\nif vc2010.config_type(cfg) == 'Application' and not cfg.flags.WinMain and not cfg.flags.Managed then\nif cfg.flags.Unicode then\n_p(3,'<EntryPointSymbol>wmainCRTStartup</EntryPointSymbol>')\nelse\n_p(3,'<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>')\nend\nend\nimport_lib(cfg)\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\n_p(3,'<ModuleDefinitionFile>%s</ModuleDefinitionFile>', deffile)\nend\nlink_target_"
+ "machine(3,cfg)\nadditional_options(3,cfg)\nif cfg.flags.NoWinMD and vstudio.iswinrt() and prj.kind == \"WindowedApp\" then\n_p(3,'<GenerateWindowsMetadata>false</GenerateWindowsMetadata>' )\nend\nend\n_p(2,'</Link>')\nend\nfunction vc2010.additionalDependencies(tab,cfg)\nlocal links = premake.getlinks(cfg, \"system\", \"fullpath\")\nif #links > 0 then\nlocal deps = \"\"\nif cfg.platform == \"Orbis\" then\nfor _, v in ipairs(links) do\ndeps = deps .. \"-l\" .. v .. \";\"\nend\nelse\ndeps = table.concat(links, \";\")\nend\n_p(tab, '<AdditionalDependencies>%s;%s</AdditionalDependencies>'\n, deps\n, iif(cfg.platform == \"Durango\"\n, '%(XboxExtensionsDependencies)'\n, '%(AdditionalDependencies)'\n)\n)\nelseif cfg.platform == \"Durango\" then\n_p(tab, '<AdditionalDependencies>%%(XboxExtensionsDependencies)</AdditionalDependencies>')\nend\nend\nlocal function item_definitions(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform"
+ ")\n_p(1,'<ItemDefinitionGroup ' ..if_config_and_platform() ..'>'\n,premake.esc(cfginfo.name))\nvs10_clcompile(cfg)\nresource_compile(cfg)\nitem_def_lib(cfg)\nvc2010.link(cfg)\nevent_hooks(cfg)\nvs10_masm(prj, cfg)\n_p(1,'</ItemDefinitionGroup>')\nend\nend\nfunction vc2010.getfilegroup(prj, group)\nlocal sortedfiles = prj.vc2010sortedfiles\nif not sortedfiles then\nsortedfiles = {\nClCompile = {},\nClInclude = {},\nMASM = {},\nNone = {},\nResourceCompile = {},\nAppxManifest = {},\nNatvis = {},\nImage = {},\nDeploymentContent = {}\n}\nlocal foundAppxManifest = false\nfor file in premake.project.eachfile(prj, true) do\nif path.issourcefilevs(file.name) then\ntable.insert(sortedfiles.ClCompile, file)\nelseif path.iscppheader(file.name) then\nif not table.icontains(prj.removefiles, file) then\ntable.insert(sortedfiles.ClInclude, file)\nend\nelseif path.isresourcefile(file.name) then\ntable.insert(sortedfiles.ResourceCompile, file)\nelseif path.isimagefile(file.name) then\ntable.insert(sortedfiles.Image, file)\nelse"
+ "if path.isappxmanifest(file.name) then\nfoundAppxManifest = true\ntable.insert(sortedfiles.AppxManifest, file)\nelseif path.isnatvis(file.name) then\ntable.insert(sortedfiles.Natvis, file)\nelseif path.isasmfile(file.name) then\ntable.insert(sortedfiles.MASM, file)\nelseif file.flags and table.icontains(file.flags, \"DeploymentContent\") then\ntable.insert(sortedfiles.DeploymentContent, file)\nelse\ntable.insert(sortedfiles.None, file)\nend\nend\nif vstudio.iswinrt() and prj.kind == \"WindowedApp\" and not foundAppxManifest then\nvstudio.needAppxManifest = true\nlocal fcfg = {}\nfcfg.name = prj.name .. \"/Package.appxmanifest\"\nfcfg.vpath = premake.project.getvpath(prj, fcfg.name)\ntable.insert(sortedfiles.AppxManifest, fcfg)\nlocal logo = {}\nlogo.name = prj.name .. \"/Logo.png\"\nlogo.vpath = logo.name\ntable.insert(sortedfiles.Image, logo)\nlocal smallLogo = {}\nsmallLogo.name = prj.name .. \"/SmallLogo.png\"\nsmallLogo.vpath = smallLogo.name\ntable.insert(sortedfiles.Image, smallLogo)\nlocal storeLogo ="
+ " {}\nstoreLogo.name = prj.name .. \"/StoreLogo.png\"\nstoreLogo.vpath = storeLogo.name\ntable.insert(sortedfiles.Image, storeLogo)\nlocal splashScreen = {}\nsplashScreen.name = prj.name .. \"/SplashScreen.png\"\nsplashScreen.vpath = splashScreen.name\ntable.insert(sortedfiles.Image, splashScreen)\nend\nprj.vc2010sortedfiles = sortedfiles\nend\nreturn sortedfiles[group]\nend\nfunction vc2010.files(prj)\nvc2010.simplefilesgroup(prj, \"ClInclude\")\nvc2010.compilerfilesgroup(prj)\nvc2010.simplefilesgroup(prj, \"None\")\nvc2010.customtaskgroup(prj)\nvc2010.simplefilesgroup(prj, \"ResourceCompile\")\nvc2010.simplefilesgroup(prj, \"AppxManifest\")\nvc2010.simplefilesgroup(prj, \"Natvis\")\nvc2010.deploymentcontentgroup(prj, \"Image\")\nvc2010.deploymentcontentgroup(prj, \"DeploymentContent\", \"None\")\nend\nfunction vc2010.customtaskgroup(prj)\nlocal files = { }\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal fcfg = { }\nfcfg.name = path"
+ ".getrelative(prj.location,buildtask[1])\nfcfg.vpath = path.trimdots(fcfg.name)\ntable.insert(files, fcfg)\nend\nend\nif #files > 0 then\n_p(1,'<ItemGroup>')\nlocal groupedBuildTasks = {}\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nif (groupedBuildTasks[buildtask[1]] == nil) then\ngroupedBuildTasks[buildtask[1]] = {}\nend\ntable.insert(groupedBuildTasks[buildtask[1]], buildtask)\nend\nend\nfor name, custombuildtask in pairs(groupedBuildTasks or {}) do\n_p(2,'<CustomBuild Include=\\\"%s\\\">', path.translate(path.getrelative(prj.location,name), \"\\\\\"))\n_p(3,'<FileType>Text</FileType>')\nlocal cmd = \"\"\nlocal outputs = \"\"\nfor _, buildtask in ipairs(custombuildtask or {}) do\nfor _, cmdline in ipairs(buildtask[4] or {}) do\ncmd = cmd .. cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + "
+ "1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[1])))\ncmd = string.gsub(cmd, \"%$%(@%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[2])))\ncmd = cmd .. \"\\r\\n\"\nend\noutputs = outputs .. path.getrelative(prj.location,buildtask[2]) .. \";\"\nend\n_p(3,'<Command>%s</Command>',cmd)\n_p(3,'<Outputs>%s%%(Outputs)</Outputs>',outputs)\n_p(3,'<SubType>Designer</SubType>')\n_p(3,'<Message></Message>')\n_p(2,'</CustomBuild>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.simplefilesgroup(prj, section, subtype)\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\nif subtype then\n_p(2,'<%s Include=\\\"%s\\\">', section, path.translate(file.name, \"\\\\\"))\n_p(3,'<SubType>%s</SubType>', subtype)\n_p(2,'</%s>', section)\nelse\n_p(2,'<%s Include=\\\"%s\\\" />', section, path.translate(file.name, \"\\\\\"))\nend\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010"
+ ".deploymentcontentgroup(prj, section, filetype)\nif filetype == nil then\nfiletype = section\nend\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\n_p(2,'<%s Include=\\\"%s\\\">', filetype, path.translate(file.name, \"\\\\\"))\n_p(3,'<DeploymentContent>true</DeploymentContent>')\n_p(3,'<Link>%s</Link>', path.translate(file.vpath, \"\\\\\"))\n_p(2,'</%s>', filetype)\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.compilerfilesgroup(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"ClCompile\")\nif #files > 0 then\nlocal config_mappings = {}\nfor _, cfginfo in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nif cfg.pchheader and cfg.pchsource and not cfg.flags.NoPCH then\nconfig_mappings[cfginfo] = path.translate(cfg.pchsource, \"\\\\\")\nend\nend\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate("
+ "file.name, \"\\\\\")\n_p(2, '<ClCompile Include=\\\"%s\\\">', translatedpath)\n_p(3, '<ObjectFileName>$(IntDir)%s\\\\</ObjectFileName>'\n, premake.esc(path.translate(path.trimdots(path.getdirectory(file.name))))\n)\nif path.iscxfile(file.name) then\n_p(3, '<CompileAsWinRT>true</CompileAsWinRT>')\n_p(3, '<RuntimeTypeInfo>true</RuntimeTypeInfo>')\n_p(3, '<PrecompiledHeader>NotUsing</PrecompiledHeader>')\nend\nif vstudio.iswinrt() and string.len(file.name) > 2 and string.sub(file.name, -2) == \".c\" then\n_p(3,'<CompileAsWinRT>FALSE</CompileAsWinRT>')\nend\nfor _, cfginfo in ipairs(configs) do\nif config_mappings[cfginfo] and translatedpath == config_mappings[cfginfo] then\n_p(3,'<PrecompiledHeader '.. if_config_and_platform() .. '>Create</PrecompiledHeader>', premake.esc(cfginfo.name))\nconfig_mappings[cfginfo] = nil --only one source file per pch\nend\nend\nlocal nopch = table.icontains(prj.nopch, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vscon"
+ "fig.src_platform)\nif nopch or table.icontains(cfg.nopch, file.name) then\n_p(3,'<PrecompiledHeader '.. if_config_and_platform() .. '>NotUsing</PrecompiledHeader>', premake.esc(vsconfig.name))\nend\nend\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nlocal fileincfg = table.icontains(cfg.files, file.name)\nlocal cfgexcluded = table.icontains(cfg.excludes, file.name)\nif excluded or not fileincfg or cfgexcluded then\n_p(3, '<ExcludedFromBuild '\n.. if_config_and_platform()\n.. '>true</ExcludedFromBuild>'\n, premake.esc(vsconfig.name)\n)\nend\nend\nif prj.flags and prj.flags.Managed then\nlocal prjforcenative = table.icontains(prj.forcenative, file.name)\nfor _,vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif prjforcenative or table.icontains(cfg.forcenative, file.name) then\n_p(3, '<CompileAsManaged ' .. if_config"
+ "_and_platform() .. '>false</CompileAsManaged>', premake.esc(vsconfig.name))\nend\nend\nend\n_p(2,'</ClCompile>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.masmfiles(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nif #files > 0 then\n_p(1, '<ItemGroup>')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate(file.name, \"\\\\\")\n_p(2, '<MASM Include=\"%s\">', translatedpath)\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nlocal fileincfg = table.icontains(cfg.files, file.name)\nlocal cfgexcluded = table.icontains(cfg.excludes, file.name)\nif excluded or not fileincfg or cfgexcluded then\n_p(3, '<ExcludedFromBuild '\n.. if_config_and_platform()\n.. '>true</ExcludedFromBuild>'\n, premake.esc(vsconfig.name)\n)\nend\nend\n_p(2, '</MASM>')\nend\n_p(1, '</ItemGroup>')\nend\nend\nfunction vc2010.header(ta"
+ "rgets)\nio.eol = \"\\r\\n\"\n_p('<?xml version=\"1.0\" encoding=\"utf-8\"?>')\nlocal t = \"\"\nif targets then\nt = ' DefaultTargets=\"' .. targets .. '\"'\nend\n_p('<Project%s ToolsVersion=\"%s\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">', t, action.vstudio.toolsVersion)\nend\nfunction premake.vs2010_vcxproj(prj)\nlocal usemasm = hasmasmfiles(prj)\nio.indent = \" \"\nvc2010.header(\"Build\")\nvs2010_config(prj)\nvs2010_globals(prj)\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.Default.props\" />')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nvc2010.configurationPropertyGroup(cfg, cfginfo)\nend\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.props\" />')\n_p(1,'<ImportGroup Label=\"ExtensionSettings\">')\nif usemasm then\n_p(2, '<Import Project=\"$(VCTargetsPath)\\\\BuildCustomizations\\\\masm.props\" />')\nend\n_p(1,'</ImportGroup>')\nimport_props(prj)\n_p(1,'<PropertyGr"
+ "oup Label=\"UserMacros\" />')\nvc2010.outputProperties(prj)\nitem_definitions(prj)\nif prj.flags.Managed then\nvc2010.clrReferences(prj)\nend\nvc2010.files(prj)\nvc2010.projectReferences(prj)\nvc2010.sdkReferences(prj)\nvc2010.masmfiles(prj)\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.targets\" />')\n_p(1,'<ImportGroup Label=\"ExtensionTargets\">')\nif usemasm then\n_p(2, '<Import Project=\"$(VCTargetsPath)\\\\BuildCustomizations\\\\masm.targets\" />')\nend\n_p(1,'</ImportGroup>')\n_p('</Project>')\nend\nfunction vc2010.clrReferences(prj)\nif #prj.clrreferences == 0 then\nreturn\nend\n_p(1,'<ItemGroup>')\nfor _, ref in ipairs(prj.clrreferences) do\nif os.isfile(ref) then\nlocal assembly = path.getbasename(ref)\n_p(2,'<Reference Include=\"%s\">', assembly)\n_p(3,'<HintPath>%s</HintPath>', path.getrelative(prj.location, ref))\n_p(2,'</Reference>')\nelse\n_p(2,'<Reference Include=\"%s\" />', ref)\nend\nend\n_p(1,'</ItemGroup>')\nend\nfunction vc2010.projectReferences(prj)\nlocal deps = premake.getd"
+ "ependencies(prj)\nif #deps == 0 and #prj.vsimportreferences == 0 then\nreturn\nend\n_p(1,'<ItemGroup>')\nfor _, dep in ipairs(deps) do\nlocal deppath = path.getrelative(prj.location, vstudio.projectfile(dep))\n_p(2,'<ProjectReference Include=\\\"%s\\\">', path.translate(deppath, \"\\\\\"))\n_p(3,'<Project>{%s}</Project>', dep.uuid)\nif vstudio.iswinrt() then\n_p(3,'<ReferenceOutputAssembly>false</ReferenceOutputAssembly>')\nend\n_p(2,'</ProjectReference>')\nend\nfor _, ref in ipairs(prj.vsimportreferences) do\nlocal iprj = premake.vstudio.getimportprj(ref, prj.solution)\n_p(2,'<ProjectReference Include=\\\"%s\\\">', iprj.relpath)\n_p(3,'<Project>{%s}</Project>', iprj.uuid)\n_p(2,'</ProjectReference>')\nend\n_p(1,'</ItemGroup>')\nend\nfunction vc2010.sdkReferences(prj)\nlocal refs = prj.sdkreferences\nif #refs > 0 then\n_p(1,'<ItemGroup>')\nfor _, ref in ipairs(refs) do\n_p(2,'<SDKReference Include=\\\"%s\\\" />', ref)\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.debugdir(cfg)\nlocal debuggerFlavor =\n"
+ " iif(cfg.platform == \"Orbis\", 'ORBISDebugger'\n, iif(cfg.platform == \"Durango\", 'XboxOneVCppDebugger'\n, 'WindowsLocalDebugger'\n))\n_p(2, '<DebuggerFlavor>%s</DebuggerFlavor>', debuggerFlavor)\nif cfg.debugdir and not vstudio.iswinrt() then\n_p(2, '<LocalDebuggerWorkingDirectory>%s</LocalDebuggerWorkingDirectory>'\n, path.translate(cfg.debugdir, '\\\\')\n)\nend\nif cfg.debugargs then\n_p(2, '<LocalDebuggerCommandArguments>%s</LocalDebuggerCommandArguments>'\n, table.concat(cfg.debugargs, \" \")\n)\nend\nif cfg.debugenvs and #cfg.debugenvs > 0 then\n_p(2, '<LocalDebuggerEnvironment>%s%s</LocalDebuggerEnvironment>'\n, table.concat(cfg.debugenvs, \"\\n\")\n, iif(cfg.flags.DebugEnvsInherit,'\\n$(LocalDebuggerEnvironment)', '')\n)\nif cfg.flags.DebugEnvsDontMerge then\n_p(2, '<LocalDebuggerMergeEnvironment>false</LocalDebuggerMergeEnvironment>')\nend\nend\nif cfg.deploymode then\n_p(' <DeployMode>%s</DeployMode>', cfg.deploymode)\nend\nend\nfunction premake.vs2010_vcxproj_u"
+ "ser(prj)\nio.indent = \" \"\nvc2010.header()\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(' <PropertyGroup '.. if_config_and_platform() ..'>', premake.esc(cfginfo.name))\nvc2010.debugdir(cfg)\n_p(' </PropertyGroup>')\nend\n_p('</Project>')\nend\nlocal png1x1data = {\n0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, -- .PNG........IHDR\n0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25, 0xdb, 0x56, -- .............%.V\n0xca, 0x00, 0x00, 0x00, 0x03, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x00, 0xa7, 0x7a, 0x3d, 0xda, -- .....PLTE....z=.\n0x00, 0x00, 0x00, 0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, -- ....tRNS.@..f...\n0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xe2, -- .IDAT..c`.......\n0x21, 0xbc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,"
+ " 0x42, 0x60, 0x82, -- !.3....IEND.B`.\n}\nfunction png1x1(obj, filename)\nfilename = premake.project.getfilename(obj, filename)\nlocal f, err = io.open(filename, \"wb\")\nif f then\nfor _, byte in ipairs(png1x1data) do\nf:write(string.char(byte))\nend\nf:close()\nend\nend\nfunction premake.vs2010_appxmanifest(prj)\nio.indent = \" \"\nio.eol = \"\\r\\n\"\n_p('<?xml version=\"1.0\" encoding=\"utf-8\"?>')\nif vstudio.toolset == \"v120_wp81\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m2=\"http://schemas.microsoft.com/appx/2013/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/2014/manifest\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\">')\nelseif vstudio.storeapp == \"8.1\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/2013/manifest\">')\nelseif vstudio.storeapp == \"durango\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:mx=\"h"
+ "ttp://schemas.microsoft.com/appx/2013/xbox/manifest\" IgnorableNamespaces=\"mx\">')\nelse\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\">')\nend\n_p(1,'<Identity Name=\"' .. prj.uuid .. '\"')\n_p(2,'Publisher=\"CN=Publisher\"')\n_p(2,'Version=\"1.0.0.0\" />')\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == \"8.2\" then\n_p(1,'<mp:PhoneIdentity PhoneProductId=\"' .. prj.uuid .. '\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>')\nend\n_p(1, '<Properties>')\n_p(2, '<DisplayName>' .. prj.name .. '</DisplayName>')\n_p(2, '<PublisherDisplayName>PublisherDisplayName</PublisherDisplayName>')\n_p(2, '<Logo>' .. prj.name .. '\\\\StoreLogo.png</Logo>')\npng1x1(prj, \"%%/StoreLogo.png\")\n_p(2, '<Description>' .. prj.name .. '</Description>')\n_p(1,'</Properties>')\nif vstudio.storeapp == \"8.2\" then\n_p(1, '<Dependenci"
+ "es>')\n_p(2, '<TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.10069.0\" MaxVersionTested=\"10.0.10069.0\" />')\n_p(1, '</Dependencies>')\nelseif vstudio.storeapp == \"durango\" then\n_p(1, '<Prerequisites>')\n_p(2, '<OSMinVersion>6.2</OSMinVersion>')\n_p(2, '<OSMaxVersionTested>6.2</OSMaxVersionTested>')\n_p(1, '</Prerequisites>')\nelse\n_p(1, '<Prerequisites>')\n_p(2, '<OSMinVersion>6.3.0</OSMinVersion>')\n_p(2, '<OSMaxVersionTested>6.3.0</OSMaxVersionTested>')\n_p(1, '</Prerequisites>')\nend\n_p(1,'<Resources>')\n_p(2,'<Resource Language=\"en-us\"/>')\n_p(1,'</Resources>')\n_p(1,'<Applications>')\n_p(2,'<Application Id=\"App\"')\n_p(3,'Executable=\"$targetnametoken$.exe\"')\n_p(3,'EntryPoint=\"' .. prj.name .. '.App\">')\nif vstudio.storeapp == \"durango\" then\n_p(3, '<VisualElements')\n_p(4, 'DisplayName=\"' .. prj.name .. '\"')\n_p(4, 'Logo=\"' .. prj.name .. '\\\\Logo.png\"')\npng1x1(prj, \"%%/Logo.png\")\n_p(4, 'SmallLogo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/Small"
+ "Logo.png\")\n_p(4, 'Description=\"' .. prj.name .. '\"')\n_p(4, 'ForegroundText=\"light\"')\n_p(4, 'BackgroundColor=\"transparent\">')\n_p(5, '<SplashScreen Image=\"' .. prj.name .. '\\\\SplashScreen.png\" />')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '</VisualElements>')\n_p(3, '<Extensions>')\n_p(4, '<mx:Extension Category=\"xbox.system.resources\">')\n_p(4, '<mx:XboxSystemResources />')\n_p(4, '</mx:Extension>')\n_p(3, '</Extensions>')\nelse\n_p(3, '<m3:VisualElements')\n_p(4, 'DisplayName=\"' .. prj.name .. '\"')\n_p(4, 'Square150x150Logo=\"' .. prj.name .. '\\\\Logo.png\"')\npng1x1(prj, \"%%/Logo.png\")\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == \"8.2\" then\n_p(4, 'Square44x44Logo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\nelse\n_p(4, 'Square30x30Logo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\nend\n_p(4, 'Description=\"' .. prj.name .. '\"')\n_p(4, 'ForegroundText=\"light\"')\n_p(4, 'BackgroundColor=\"transparent\""
+ ">')\n_p(4, '<m3:SplashScreen Image=\"' .. prj.name .. '\\\\SplashScreen.png\" />')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '</m3:VisualElements>')\nend\n_p(2,'</Application>')\n_p(1,'</Applications>')\n_p('</Package>')\nend\n",
/* actions/vstudio/vstudio_vcxproj_filters.lua */
"local vc2010 = premake.vstudio.vc2010\nlocal project = premake.project\nfunction vc2010.filteridgroup(prj)\nlocal filters = { }\nlocal filterfound = false\nfor file in premake.project.eachfile(prj, true) do\nlocal folders = string.explode(file.vpath, \"/\", true)\nlocal path = \"\"\nfor i = 1, #folders - 1 do\nif not filterfound then\nfilterfound = true\n_p(1,'<ItemGroup>')\nend\npath = path .. folders[i]\nif not filters[path] then\nfilters[path] = true\n_p(2, '<Filter Include=\"%s\">', path)\n_p(3, '<UniqueIdentifier>{%s}</UniqueIdentifier>', os.uuid(path))\n_p(2, '</Filter>')\nend\npath = path .. \"\\\\\"\nend\nend\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal folders = string.explode(path.trimdots(path.getrelative(prj.location,buildtask[1])), \"/\", true)\nlocal path = \"\"\nfor i = 1, #folders - 1 do\nif not filterfound then\nfilterfound = true\n_p(1,'<ItemGroup>')\nend\npath = path .. folders[i]\nif not filters[path] then\nfilt"
@@ -349,17 +357,17 @@ const char* builtin_scripts[] = {
"uildCommands('prelinkcommands') then\n_p(4,'9607AE3510C85E7E00CD1376 /* Prelink */,')\nend\n_p(4,'%s /* Frameworks */,', node.fxstageid)\nif hasBuildCommands('postbuildcommands') then\n_p(4,'9607AE3710C85E8F00CD1376 /* Postbuild */,')\nend\n_p(3,');')\n_p(3,'buildRules = (')\n_p(3,');')\n_p(3,'dependencies = (')\nfor _, node in ipairs(tr.projects.children) do\n_p(4,'%s /* PBXTargetDependency */,', node.targetdependid)\nend\n_p(3,');')\n_p(3,'name = \"%s\";', name)\nlocal p\nif node.cfg.kind == \"ConsoleApp\" then\np = \"$(HOME)/bin\"\nelseif node.cfg.kind == \"WindowedApp\" then\np = \"$(HOME)/Applications\"\nend\nif p then\n_p(3,'productInstallPath = \"%s\";', p)\nend\n_p(3,'productName = \"%s\";', name)\n_p(3,'productReference = %s /* %s */;', node.id, node.name)\n_p(3,'productType = \"%s\";', xcode.getproducttype(node))\n_p(2,'};')\nend\n_p('/* End PBXNativeTarget section */')\n_p('')\nend\nfunction xcode.PBXProject(tr)\n_p('/* Begin PBXProject section */')\n_p(2,'__RootObject_ /* Project object */ = {')\n_"
"p(3,'isa = PBXProject;')\n_p(3,'buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject \"%s\" */;', tr.name)\n_p(3,'compatibilityVersion = \"Xcode 3.2\";')\n_p(3,'hasScannedForEncodings = 1;')\n_p(3,'mainGroup = %s /* %s */;', tr.id, tr.name)\n_p(3,'projectDirPath = \"\";')\nif #tr.projects.children > 0 then\n_p(3,'projectReferences = (')\nfor _, node in ipairs(tr.projects.children) do\n_p(4,'{')\n_p(5,'ProductGroup = %s /* Products */;', node.productgroupid)\n_p(5,'ProjectRef = %s /* %s */;', node.id, path.getname(node.path))\n_p(4,'},')\nend\n_p(3,');')\nend\n_p(3,'projectRoot = \"\";')\n_p(3,'targets = (')\nfor _, node in ipairs(tr.products.children) do\n_p(4,'%s /* %s */,', node.targetid, node.name)\nend\n_p(3,');')\n_p(2,'};')\n_p('/* End PBXProject section */')\n_p('')\nend\nfunction xcode.PBXReferenceProxy(tr)\nif #tr.projects.children > 0 then\n_p('/* Begin PBXReferenceProxy section */')\ntree.traverse(tr.projects, {\nonleaf = function(node)\n_p(2,'%s /* %s */ = {'"
", node.id, node.name)\n_p(3,'isa = PBXReferenceProxy;')\n_p(3,'fileType = %s;', xcode.gettargettype(node))\n_p(3,'path = \"%s\";', node.path)\n_p(3,'remoteRef = %s /* PBXContainerItemProxy */;', node.parent.productproxyid)\n_p(3,'sourceTree = BUILT_PRODUCTS_DIR;')\n_p(2,'};')\nend\n})\n_p('/* End PBXReferenceProxy section */')\n_p('')\nend\nend\nfunction xcode.PBXResourcesBuildPhase(tr)\n_p('/* Begin PBXResourcesBuildPhase section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Resources */ = {', target.resstageid)\n_p(3,'isa = PBXResourcesBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\ntree.traverse(tr, {\nonnode = function(node)\nif xcode.getbuildcategory(node) == \"Resources\" then\n_p(4,'%s /* %s in Resources */,', node.buildid, node.name)\nend\nend\n})\n_p(3,');')\n_p(3,'runOnlyForDeploymentPostprocessing = 0;')\n_p(2,'};')\nend\n_p('/* End PBXResourcesBuildPhase section */')\n_p('')\nend\nfunction xcode.PBXShellScriptBuildPhase(tr)\nlocal wrapperWritten = fals"
- "e\nlocal function doblock(id, name, which)\nlocal prjcmds = tr.project[which]\nlocal commands = table.join(prjcmds, {})\nfor _, cfg in ipairs(tr.configs) do\nlocal cfgcmds = cfg[which]\nif #cfgcmds > #prjcmds then\ntable.insert(commands, 'if [ \"${CONFIGURATION}\" = \"' .. xcode.getconfigname(cfg) .. '\" ]; then')\nfor i = #prjcmds + 1, #cfgcmds do\nlocal cmd = cfgcmds[i]\ncmd = cmd:gsub('\\\\','\\\\\\\\')\ntable.insert(commands, cmd)\nend\ntable.insert(commands, 'fi')\nend\nend\nif #commands > 0 then\nif not wrapperWritten then\n_p('/* Begin PBXShellScriptBuildPhase section */')\nwrapperWritten = true\nend\n_p(2,'%s /* %s */ = {', id, name)\n_p(3,'isa = PBXShellScriptBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\n_p(3,');')\n_p(3,'inputPaths = (');\n_p(3,');');\n_p(3,'name = %s;', name);\n_p(3,'outputPaths = (');\n_p(3,');');\n_p(3,'runOnlyForDeploymentPostprocessing = 0;');\n_p(3,'shellPath = /bin/sh;');\n_p(3,'shellScript = \"%s\";', table.concat(commands, \"\\\\n\"):gsub('\"', '"
- "\\\\\"'))\n_p(2,'};')\nend\nend\ndoblock(\"9607AE1010C857E500CD1376\", \"Prebuild\", \"prebuildcommands\")\ndoblock(\"9607AE3510C85E7E00CD1376\", \"Prelink\", \"prelinkcommands\")\ndoblock(\"9607AE3710C85E8F00CD1376\", \"Postbuild\", \"postbuildcommands\")\nif wrapperWritten then\n_p('/* End PBXShellScriptBuildPhase section */')\nend\nend\nfunction xcode.PBXSourcesBuildPhase(tr,prj)\n_p('/* Begin PBXSourcesBuildPhase section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Sources */ = {', target.sourcesid)\n_p(3,'isa = PBXSourcesBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\ntree.traverse(tr, {\nonleaf = function(node)\nif xcode.getbuildcategory(node) == \"Sources\" then\nif not table.icontains(prj.excludes, node.cfg.name) then -- if not excluded\n_p(4,'%s /* %s in Sources */,', node.buildid, node.name)\nend\nend\nend\n})\n_p(3,');')\n_p(3,'runOnlyForDeploymentPostprocessing = 0;')\n_p(2,'};')\nend\n_p('/* End PBXSourcesBuildPhase section */')\n_p('')\nend\nfunctio"
- "n xcode.PBXVariantGroup(tr)\n_p('/* Begin PBXVariantGroup section */')\ntree.traverse(tr, {\nonbranch = function(node)\nif node.kind == \"vgroup\" then\n_p(2,'%s /* %s */ = {', node.id, node.name)\n_p(3,'isa = PBXVariantGroup;')\n_p(3,'children = (')\nfor _, lang in ipairs(node.children) do\n_p(4,'%s /* %s */,', lang.id, lang.name)\nend\n_p(3,');')\n_p(3,'name = %s;', node.name)\n_p(3,'sourceTree = \"<group>\";')\n_p(2,'};')\nend\nend\n})\n_p('/* End PBXVariantGroup section */')\n_p('')\nend\nfunction xcode.PBXTargetDependency(tr)\nif #tr.projects.children > 0 then\n_p('/* Begin PBXTargetDependency section */')\ntree.traverse(tr.projects, {\nonleaf = function(node)\n_p(2,'%s /* PBXTargetDependency */ = {', node.parent.targetdependid)\n_p(3,'isa = PBXTargetDependency;')\n_p(3,'name = \"%s\";', node.name)\n_p(3,'targetProxy = %s /* PBXContainerItemProxy */;', node.parent.targetproxyid)\n_p(2,'};')\nend\n})\n_p('/* End PBXTargetDependency section */')\n_p('')\nend\nend\nfunction xcode.XCBuildConfiguration_Target("
- "tr, target, cfg)\nlocal cfgname = xcode.getconfigname(cfg)\n_p(2,'%s /* %s */ = {', cfg.xcode.targetid, cfgname)\n_p(3,'isa = XCBuildConfiguration;')\n_p(3,'buildSettings = {')\n_p(4,'ALWAYS_SEARCH_USER_PATHS = NO;')\nif not cfg.flags.Symbols then\n_p(4,'DEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";')\nend\nif cfg.kind ~= \"StaticLib\" and cfg.buildtarget.prefix ~= \"\" then\n_p(4,'EXECUTABLE_PREFIX = %s;', cfg.buildtarget.prefix)\nend\nif cfg.targetextension then\nlocal ext = cfg.targetextension\next = iif(ext:startswith(\".\"), ext:sub(2), ext)\n_p(4,'EXECUTABLE_EXTENSION = %s;', ext)\nend\nlocal outdir = path.getdirectory(cfg.buildtarget.bundlepath)\nif outdir ~= \".\" then\n_p(4,'CONFIGURATION_BUILD_DIR = %s;', outdir)\nend\n_p(4,'GCC_DYNAMIC_NO_PIC = NO;')\n_p(4,'GCC_MODEL_TUNING = G5;')\nif tr.infoplist then\n_p(4,'INFOPLIST_FILE = \"%s\";', tr.infoplist.cfg.name)\nend\ninstallpaths = {\nConsoleApp = '/usr/local/bin',\nWindowedApp = '\"$(HOME)/Applications\"',\nSharedLib = '/usr/local/lib',\nStaticLib "
- "= '/usr/local/lib',\nBundle = '\"$(LOCAL_LIBRARY_DIR)/Bundles\"',\n}\n_p(4,'INSTALL_PATH = %s;', installpaths[cfg.kind])\nlocal infoplist_file = nil\nfor _, v in ipairs(cfg.files) do\nif (string.find (string.lower (v), 'info.plist') ~= nil) then\ninfoplist_file = string.format('$(SRCROOT)/%s', v)\nend\nend\nif infoplist_file ~= nil then\n_p(4,'INFOPLIST_FILE = \"%s\";', infoplist_file)\nend\nif cfg.kind == \"Bundle\" then\n_p(4, 'PRODUCT_BUNDLE_IDENTIFIER = \"genie.%s\";', cfg.buildtarget.basename:gsub(\"%s+\", '.')) --replace spaces with .\nend\n_p(4,'PRODUCT_NAME = \"%s\";', cfg.buildtarget.basename)\nif cfg.kind == \"Bundle\" then\n_p(4, 'WRAPPER_EXTENSION = bundle;')\nend\n_p(3,'};')\n_p(3,'name = \"%s\";', cfgname)\n_p(2,'};')\nend\nlocal function cfg_excluded_files(prj, cfg)\nlocal excluded = {}\nlocal function exclude_pattern(file)\nif path.isabsolute(file) then\nreturn file\nend\nlocal start, term = file:findlast(\"/%.%./\")\nif term then\nreturn path.join(\"*\", file:sub(term + 1))\nend\nstart, ter"
- "m = file:find(\"%.%./\")\nif start == 1 then\nreturn path.join(\"*\", file:sub(term + 1))\nend\nreturn path.join(\"*\", file)\nend\nlocal function add_file(file)\nlocal name = exclude_pattern(file)\nif not table.icontains(excluded, name) then\ntable.insert(excluded, name)\nend\nend\nlocal function verify_file(file)\nlocal name = exclude_pattern(file)\nif table.icontains(excluded, name) then\nerror(\"'\" .. file .. \"' would be excluded by the rule to exclude '\" .. name .. \"'\")\nend\nend\nfor _, file in ipairs(cfg.excludes) do\nadd_file(file)\nend\nfor _, file in ipairs(prj.allfiles) do\nif not table.icontains(prj.excludes, file) and not table.icontains(cfg.excludes, file) then\nif not table.icontains(cfg.files, file) then\nadd_file(file)\nelse\nverify_file(file)\nend\nend\nend\ntable.sort(excluded)\nreturn excluded\nend\nfunction xcode.XCBuildConfiguration_Project(tr, prj, cfg)\nlocal cfgname = xcode.getconfigname(cfg)\n_p(2,'%s /* %s */ = {', cfg.xcode.projectid, cfgname)\n_p(3,'isa = XCBuildConfiguration;"
- "')\n_p(3,'buildSettings = {')\nlocal archs = {\nNative = \"$(NATIVE_ARCH_ACTUAL)\",\nx32 = \"i386\",\nx64 = \"x86_64\",\nUniversal32 = \"$(ARCHS_STANDARD_32_BIT)\",\nUniversal64 = \"$(ARCHS_STANDARD_64_BIT)\",\nUniversal = \"$(ARCHS_STANDARD_32_64_BIT)\",\n}\n_p(4,'ARCHS = \"%s\";', archs[cfg.platform])\n_p(4,'SDKROOT = \"%s\";', xcode.toolset)\nif tr.entitlements then\n_p(4,'CODE_SIGN_ENTITLEMENTS = \"%s\";', tr.entitlements.cfg.name)\nend\nlocal targetdir = path.getdirectory(cfg.buildtarget.bundlepath)\nif targetdir ~= \".\" then\n_p(4,'CONFIGURATION_BUILD_DIR = \"$(SYMROOT)\";');\nend\n_p(4,'CONFIGURATION_TEMP_DIR = \"$(OBJROOT)\";')\nif cfg.flags.Symbols then\n_p(4,'COPY_PHASE_STRIP = NO;')\nend\nlocal excluded = cfg_excluded_files(prj, cfg)\nif #excluded > 0 then\n_p(4, 'EXCLUDED_SOURCE_FILE_NAMES = (')\nfor _, file in ipairs(excluded) do\n_p(5, '\"' .. file .. '\",')\nend\n_p(4, ');')\nend\n_p(4,'GCC_C_LANGUAGE_STANDARD = gnu99;')\nif cfg.flags.NoExceptions then\n_p(4,'GCC_ENABLE_CPP_EXCEPTIONS = N"
- "O;')\nend\nif cfg.flags.NoRTTI then\n_p(4,'GCC_ENABLE_CPP_RTTI = NO;')\nend\nif _ACTION ~= \"xcode4\" and cfg.flags.Symbols and not cfg.flags.NoEditAndContinue then\n_p(4,'GCC_ENABLE_FIX_AND_CONTINUE = YES;')\nend\nif cfg.flags.NoExceptions then\n_p(4,'GCC_ENABLE_OBJC_EXCEPTIONS = NO;')\nend\nif cfg.flags.Optimize or cfg.flags.OptimizeSize then\n_p(4,'GCC_OPTIMIZATION_LEVEL = s;')\nelseif cfg.flags.OptimizeSpeed then\n_p(4,'GCC_OPTIMIZATION_LEVEL = 3;')\nelse\n_p(4,'GCC_OPTIMIZATION_LEVEL = 0;')\nend\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(4,'GCC_PRECOMPILE_PREFIX_HEADER = YES;')\n_p(4,'GCC_PREFIX_HEADER = \"%s\";', cfg.pchheader)\nend\nxcode.printlist(cfg.defines, 'GCC_PREPROCESSOR_DEFINITIONS')\n_p(4,'GCC_SYMBOLS_PRIVATE_EXTERN = NO;')\nif cfg.flags.FatalWarnings then\n_p(4,'GCC_TREAT_WARNINGS_AS_ERRORS = YES;')\nend\n_p(4,'GCC_WARN_ABOUT_RETURN_TYPE = YES;')\n_p(4,'GCC_WARN_UNUSED_VARIABLE = YES;')\nxcode.printlist(cfg.includedirs, 'HEADER_SEARCH_PATHS')\nxcode.printlist(cfg.userincludedirs, 'USE"
- "R_HEADER_SEARCH_PATHS')\nxcode.printlist(cfg.libdirs, 'LIBRARY_SEARCH_PATHS')\n_p(4,'OBJROOT = \"%s\";', cfg.objectsdir)\n_p(4,'ONLY_ACTIVE_ARCH = %s;',iif(premake.config.isdebugbuild(cfg),'YES','NO'))\nlocal checks = {\n[\"-ffast-math\"] = cfg.flags.FloatFast,\n[\"-ffloat-store\"] = cfg.flags.FloatStrict,\n[\"-fomit-frame-pointer\"] = cfg.flags.NoFramePointer,\n}\nlocal flags = { }\nfor flag, check in pairs(checks) do\nif check then\ntable.insert(flags, flag)\nend\nend\nfor _, val in ipairs(premake.xcode.parameters) do\n_p(4, val ..';')\nend\nxcode.printlist(table.join(flags, cfg.buildoptions, cfg.buildoptions_c), 'OTHER_CFLAGS')\nxcode.printlist(table.join(flags, cfg.buildoptions, cfg.buildoptions_cpp), 'OTHER_CPLUSPLUSFLAGS')\nflags = { }\nfor _, lib in ipairs(premake.getlinks(cfg, \"system\")) do\nif not xcode.isframework(lib) then\ntable.insert(flags, \"-l\" .. lib)\nend\nend\nflags = table.join(flags, cfg.linkoptions)\nxcode.printlist(flags, 'OTHER_LDFLAGS')\nif cfg.flags.StaticRuntime th"
- "en\n_p(4,'STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;')\nend\nif targetdir ~= \".\" then\n_p(4,'SYMROOT = \"%s\";', targetdir)\nend\nif cfg.flags.ExtraWarnings then\n_p(4,'WARNING_CFLAGS = \"-Wall\";')\nend\n_p(3,'};')\n_p(3,'name = \"%s\";', cfgname)\n_p(2,'};')\nend\nfunction xcode.XCBuildConfiguration(tr, prj)\n_p('/* Begin XCBuildConfiguration section */')\nfor _, target in ipairs(tr.products.children) do\nfor _, cfg in ipairs(tr.configs) do\nxcode.XCBuildConfiguration_Target(tr, target, cfg)\nend\nend\nfor _, cfg in ipairs(tr.configs) do\nxcode.XCBuildConfiguration_Project(tr, prj, cfg)\nend\n_p('/* End XCBuildConfiguration section */')\n_p('')\nend\nfunction xcode.XCBuildConfigurationList(tr)\nlocal sln = tr.project.solution\n_p('/* Begin XCConfigurationList section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Build configuration list for PBXNativeTarget \"%s\" */ = {', target.cfgsection, target.name)\n_p(3,'isa = XCConfigurationList;')\n_p(3,'buildConfigurations = (')\nfor _, cfg "
- "in ipairs(tr.configs) do\n_p(4,'%s /* %s */,', cfg.xcode.targetid, xcode.getconfigname(cfg))\nend\n_p(3,');')\n_p(3,'defaultConfigurationIsVisible = 0;')\n_p(3,'defaultConfigurationName = \"%s\";', xcode.getconfigname(tr.configs[1]))\n_p(2,'};')\nend\n_p(2,'1DEB928908733DD80010E9CD /* Build configuration list for PBXProject \"%s\" */ = {', tr.name)\n_p(3,'isa = XCConfigurationList;')\n_p(3,'buildConfigurations = (')\nfor _, cfg in ipairs(tr.configs) do\n_p(4,'%s /* %s */,', cfg.xcode.projectid, xcode.getconfigname(cfg))\nend\n_p(3,');')\n_p(3,'defaultConfigurationIsVisible = 0;')\n_p(3,'defaultConfigurationName = \"%s\";', xcode.getconfigname(tr.configs[1]))\n_p(2,'};')\n_p('/* End XCConfigurationList section */')\n_p('')\nend\nfunction xcode.Footer()\n_p(1,'};')\n_p('\\trootObject = __RootObject_ /* Project object */;')\n_p('}')\nend\n",
+ "e\nlocal function doblock(id, name, which)\nlocal commands = {}\nfor _, cfg in ipairs(tr.configs) do\nlocal cfgcmds = cfg[which]\nif #cfgcmds > 0 then\ntable.insert(commands, 'if [ \"${CONFIGURATION}\" = \"' .. xcode.getconfigname(cfg) .. '\" ]; then')\nfor i = 1, #cfgcmds do\nlocal cmd = cfgcmds[i]\ncmd = cmd:gsub('\\\\','\\\\\\\\')\ntable.insert(commands, cmd)\nend\ntable.insert(commands, 'fi')\nend\nend\nif #commands > 0 then\nif not wrapperWritten then\n_p('/* Begin PBXShellScriptBuildPhase section */')\nwrapperWritten = true\nend\n_p(2,'%s /* %s */ = {', id, name)\n_p(3,'isa = PBXShellScriptBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\n_p(3,');')\n_p(3,'inputPaths = (');\n_p(3,');');\n_p(3,'name = %s;', name);\n_p(3,'outputPaths = (');\n_p(3,');');\n_p(3,'runOnlyForDeploymentPostprocessing = 0;');\n_p(3,'shellPath = /bin/sh;');\n_p(3,'shellScript = \"%s\";', table.concat(commands, \"\\\\n\"):gsub('\"', '\\\\\"'))\n_p(2,'};')\nend\nend\ndoblock(\"9607AE1010C857E500CD1376\", \"Pre"
+ "build\", \"prebuildcommands\")\ndoblock(\"9607AE3510C85E7E00CD1376\", \"Prelink\", \"prelinkcommands\")\ndoblock(\"9607AE3710C85E8F00CD1376\", \"Postbuild\", \"postbuildcommands\")\nif wrapperWritten then\n_p('/* End PBXShellScriptBuildPhase section */')\nend\nend\nfunction xcode.PBXSourcesBuildPhase(tr,prj)\n_p('/* Begin PBXSourcesBuildPhase section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Sources */ = {', target.sourcesid)\n_p(3,'isa = PBXSourcesBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\ntree.traverse(tr, {\nonleaf = function(node)\nif xcode.getbuildcategory(node) == \"Sources\" then\nif not table.icontains(prj.excludes, node.cfg.name) then -- if not excluded\n_p(4,'%s /* %s in Sources */,', node.buildid, node.name)\nend\nend\nend\n})\n_p(3,');')\n_p(3,'runOnlyForDeploymentPostprocessing = 0;')\n_p(2,'};')\nend\n_p('/* End PBXSourcesBuildPhase section */')\n_p('')\nend\nfunction xcode.PBXVariantGroup(tr)\n_p('/* Begin PBXVariantGroup section */')\ntree"
+ ".traverse(tr, {\nonbranch = function(node)\nif node.kind == \"vgroup\" then\n_p(2,'%s /* %s */ = {', node.id, node.name)\n_p(3,'isa = PBXVariantGroup;')\n_p(3,'children = (')\nfor _, lang in ipairs(node.children) do\n_p(4,'%s /* %s */,', lang.id, lang.name)\nend\n_p(3,');')\n_p(3,'name = %s;', node.name)\n_p(3,'sourceTree = \"<group>\";')\n_p(2,'};')\nend\nend\n})\n_p('/* End PBXVariantGroup section */')\n_p('')\nend\nfunction xcode.PBXTargetDependency(tr)\nif #tr.projects.children > 0 then\n_p('/* Begin PBXTargetDependency section */')\ntree.traverse(tr.projects, {\nonleaf = function(node)\n_p(2,'%s /* PBXTargetDependency */ = {', node.parent.targetdependid)\n_p(3,'isa = PBXTargetDependency;')\n_p(3,'name = \"%s\";', node.name)\n_p(3,'targetProxy = %s /* PBXContainerItemProxy */;', node.parent.targetproxyid)\n_p(2,'};')\nend\n})\n_p('/* End PBXTargetDependency section */')\n_p('')\nend\nend\nfunction xcode.XCBuildConfiguration_Target(tr, target, cfg)\nlocal cfgname = xcode.getconfigname(cfg)\n_p(2,'%s /* %s *"
+ "/ = {', cfg.xcode.targetid, cfgname)\n_p(3,'isa = XCBuildConfiguration;')\n_p(3,'buildSettings = {')\n_p(4,'ALWAYS_SEARCH_USER_PATHS = NO;')\nif not cfg.flags.Symbols then\n_p(4,'DEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";')\nend\nif cfg.kind ~= \"StaticLib\" and cfg.buildtarget.prefix ~= \"\" then\n_p(4,'EXECUTABLE_PREFIX = %s;', cfg.buildtarget.prefix)\nend\nif cfg.targetextension then\nlocal ext = cfg.targetextension\next = iif(ext:startswith(\".\"), ext:sub(2), ext)\n_p(4,'EXECUTABLE_EXTENSION = %s;', ext)\nend\nif cfg.flags.ObjcARC then\n_p(4,'CLANG_ENABLE_OBJC_ARC = YES;')\nend\nlocal outdir = path.getdirectory(cfg.buildtarget.bundlepath)\nif outdir ~= \".\" then\n_p(4,'CONFIGURATION_BUILD_DIR = %s;', outdir)\nend\n_p(4,'GCC_DYNAMIC_NO_PIC = NO;')\n_p(4,'GCC_MODEL_TUNING = G5;')\nif tr.infoplist then\n_p(4,'INFOPLIST_FILE = \"%s\";', tr.infoplist.cfg.name)\nend\ninstallpaths = {\nConsoleApp = '/usr/local/bin',\nWindowedApp = '\"$(HOME)/Applications\"',\nSharedLib = '/usr/local/lib',\nStaticLib = '/us"
+ "r/local/lib',\nBundle = '\"$(LOCAL_LIBRARY_DIR)/Bundles\"',\n}\n_p(4,'INSTALL_PATH = %s;', installpaths[cfg.kind])\nlocal infoplist_file = nil\nfor _, v in ipairs(cfg.files) do\nif (string.find (string.lower (v), 'info.plist') ~= nil) then\ninfoplist_file = string.format('$(SRCROOT)/%s', v)\nend\nend\nif infoplist_file ~= nil then\n_p(4,'INFOPLIST_FILE = \"%s\";', infoplist_file)\nend\nif cfg.kind == \"Bundle\" then\n_p(4, 'PRODUCT_BUNDLE_IDENTIFIER = \"genie.%s\";', cfg.buildtarget.basename:gsub(\"%s+\", '.')) --replace spaces with .\nend\n_p(4,'PRODUCT_NAME = \"%s\";', cfg.buildtarget.basename)\nif cfg.kind == \"Bundle\" then\n_p(4, 'WRAPPER_EXTENSION = bundle;')\nend\n_p(3,'};')\n_p(3,'name = \"%s\";', cfgname)\n_p(2,'};')\nend\nlocal function cfg_excluded_files(prj, cfg)\nlocal excluded = {}\nlocal function exclude_pattern(file)\nif path.isabsolute(file) then\nreturn file\nend\nlocal start, term = file:findlast(\"/%.%./\")\nif term then\nreturn path.join(\"*\", file:sub(term + 1))\nend\nstart, term = fi"
+ "le:find(\"%.%./\")\nif start == 1 then\nreturn path.join(\"*\", file:sub(term + 1))\nend\nreturn path.join(\"*\", file)\nend\nlocal function add_file(file)\nlocal name = exclude_pattern(file)\nif not table.icontains(excluded, name) then\ntable.insert(excluded, name)\nend\nend\nlocal function verify_file(file)\nlocal name = exclude_pattern(file)\nif table.icontains(excluded, name) then\nerror(\"'\" .. file .. \"' would be excluded by the rule to exclude '\" .. name .. \"'\")\nend\nend\nfor _, file in ipairs(cfg.excludes) do\nadd_file(file)\nend\nfor _, file in ipairs(prj.allfiles) do\nif not table.icontains(prj.excludes, file) and not table.icontains(cfg.excludes, file) then\nif not table.icontains(cfg.files, file) then\nadd_file(file)\nelse\nverify_file(file)\nend\nend\nend\ntable.sort(excluded)\nreturn excluded\nend\nfunction xcode.XCBuildConfiguration_Project(tr, prj, cfg)\nlocal cfgname = xcode.getconfigname(cfg)\n_p(2,'%s /* %s */ = {', cfg.xcode.projectid, cfgname)\n_p(3,'isa = XCBuildConfiguration;')\n_p"
+ "(3,'buildSettings = {')\nlocal archs = {\nNative = \"$(NATIVE_ARCH_ACTUAL)\",\nx32 = \"i386\",\nx64 = \"x86_64\",\nUniversal32 = \"$(ARCHS_STANDARD_32_BIT)\",\nUniversal64 = \"$(ARCHS_STANDARD_64_BIT)\",\nUniversal = \"$(ARCHS_STANDARD_32_64_BIT)\",\n}\n_p(4,'ARCHS = \"%s\";', archs[cfg.platform])\n_p(4,'SDKROOT = \"%s\";', xcode.toolset)\nif tr.entitlements then\n_p(4,'CODE_SIGN_ENTITLEMENTS = \"%s\";', tr.entitlements.cfg.name)\nend\nlocal targetdir = path.getdirectory(cfg.buildtarget.bundlepath)\nif targetdir ~= \".\" then\n_p(4,'CONFIGURATION_BUILD_DIR = \"$(SYMROOT)\";');\nend\n_p(4,'CONFIGURATION_TEMP_DIR = \"$(OBJROOT)\";')\nif cfg.flags.Symbols then\n_p(4,'COPY_PHASE_STRIP = NO;')\nend\nlocal excluded = cfg_excluded_files(prj, cfg)\nif #excluded > 0 then\n_p(4, 'EXCLUDED_SOURCE_FILE_NAMES = (')\nfor _, file in ipairs(excluded) do\n_p(5, '\"' .. file .. '\",')\nend\n_p(4, ');')\nend\n_p(4,'GCC_C_LANGUAGE_STANDARD = gnu99;')\nif cfg.flags.NoExceptions then\n_p(4,'GCC_ENABLE_CPP_EXCEPTIONS = NO;')\n"
+ "end\nif cfg.flags.NoRTTI then\n_p(4,'GCC_ENABLE_CPP_RTTI = NO;')\nend\nif _ACTION ~= \"xcode4\" and cfg.flags.Symbols and not cfg.flags.NoEditAndContinue then\n_p(4,'GCC_ENABLE_FIX_AND_CONTINUE = YES;')\nend\nif cfg.flags.NoExceptions then\n_p(4,'GCC_ENABLE_OBJC_EXCEPTIONS = NO;')\nend\nif cfg.flags.Optimize or cfg.flags.OptimizeSize then\n_p(4,'GCC_OPTIMIZATION_LEVEL = s;')\nelseif cfg.flags.OptimizeSpeed then\n_p(4,'GCC_OPTIMIZATION_LEVEL = 3;')\nelse\n_p(4,'GCC_OPTIMIZATION_LEVEL = 0;')\nend\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(4,'GCC_PRECOMPILE_PREFIX_HEADER = YES;')\n_p(4,'GCC_PREFIX_HEADER = \"%s\";', cfg.pchheader)\nend\nxcode.printlist(cfg.defines, 'GCC_PREPROCESSOR_DEFINITIONS')\n_p(4,'GCC_SYMBOLS_PRIVATE_EXTERN = NO;')\nif cfg.flags.FatalWarnings then\n_p(4,'GCC_TREAT_WARNINGS_AS_ERRORS = YES;')\nend\n_p(4,'GCC_WARN_ABOUT_RETURN_TYPE = YES;')\n_p(4,'GCC_WARN_UNUSED_VARIABLE = YES;')\nxcode.printlist(cfg.includedirs, 'HEADER_SEARCH_PATHS')\nxcode.printlist(cfg.userincludedirs, 'USER_HEAD"
+ "ER_SEARCH_PATHS')\nxcode.printlist(cfg.libdirs, 'LIBRARY_SEARCH_PATHS')\n_p(4,'OBJROOT = \"%s\";', cfg.objectsdir)\n_p(4,'ONLY_ACTIVE_ARCH = %s;',iif(premake.config.isdebugbuild(cfg),'YES','NO'))\nlocal checks = {\n[\"-ffast-math\"] = cfg.flags.FloatFast,\n[\"-ffloat-store\"] = cfg.flags.FloatStrict,\n[\"-fomit-frame-pointer\"] = cfg.flags.NoFramePointer,\n}\nlocal flags = { }\nfor flag, check in pairs(checks) do\nif check then\ntable.insert(flags, flag)\nend\nend\nfor _, val in ipairs(premake.xcode.parameters) do\n_p(4, val ..';')\nend\nxcode.printlist(table.join(flags, cfg.buildoptions, cfg.buildoptions_c), 'OTHER_CFLAGS')\nxcode.printlist(table.join(flags, cfg.buildoptions, cfg.buildoptions_cpp), 'OTHER_CPLUSPLUSFLAGS')\nflags = { }\nfor _, lib in ipairs(premake.getlinks(cfg, \"system\")) do\nif not xcode.isframework(lib) then\ntable.insert(flags, \"-l\" .. lib)\nend\nend\nflags = table.join(flags, cfg.linkoptions)\nxcode.printlist(flags, 'OTHER_LDFLAGS')\nif cfg.flags.StaticRuntime then\n_p"
+ "(4,'STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;')\nend\nif targetdir ~= \".\" then\n_p(4,'SYMROOT = \"%s\";', targetdir)\nend\nif cfg.flags.PedanticWarnings\nor cfg.flags.ExtraWarnings\nthen\n_p(4,'WARNING_CFLAGS = \"-Wall\";')\nend\n_p(3,'};')\n_p(3,'name = \"%s\";', cfgname)\n_p(2,'};')\nend\nfunction xcode.XCBuildConfiguration(tr, prj)\n_p('/* Begin XCBuildConfiguration section */')\nfor _, target in ipairs(tr.products.children) do\nfor _, cfg in ipairs(tr.configs) do\nxcode.XCBuildConfiguration_Target(tr, target, cfg)\nend\nend\nfor _, cfg in ipairs(tr.configs) do\nxcode.XCBuildConfiguration_Project(tr, prj, cfg)\nend\n_p('/* End XCBuildConfiguration section */')\n_p('')\nend\nfunction xcode.XCBuildConfigurationList(tr)\nlocal sln = tr.project.solution\n_p('/* Begin XCConfigurationList section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Build configuration list for PBXNativeTarget \"%s\" */ = {', target.cfgsection, target.name)\n_p(3,'isa = XCConfigurationList;')\n_p(3,'buildConfigu"
+ "rations = (')\nfor _, cfg in ipairs(tr.configs) do\n_p(4,'%s /* %s */,', cfg.xcode.targetid, xcode.getconfigname(cfg))\nend\n_p(3,');')\n_p(3,'defaultConfigurationIsVisible = 0;')\n_p(3,'defaultConfigurationName = \"%s\";', xcode.getconfigname(tr.configs[1]))\n_p(2,'};')\nend\n_p(2,'1DEB928908733DD80010E9CD /* Build configuration list for PBXProject \"%s\" */ = {', tr.name)\n_p(3,'isa = XCConfigurationList;')\n_p(3,'buildConfigurations = (')\nfor _, cfg in ipairs(tr.configs) do\n_p(4,'%s /* %s */,', cfg.xcode.projectid, xcode.getconfigname(cfg))\nend\n_p(3,');')\n_p(3,'defaultConfigurationIsVisible = 0;')\n_p(3,'defaultConfigurationName = \"%s\";', xcode.getconfigname(tr.configs[1]))\n_p(2,'};')\n_p('/* End XCConfigurationList section */')\n_p('')\nend\nfunction xcode.Footer()\n_p(1,'};')\n_p('\\trootObject = __RootObject_ /* Project object */;')\n_p('}')\nend\n",
/* actions/xcode/xcode_project.lua */
"local xcode = premake.xcode\nlocal tree = premake.tree\nfunction xcode.buildprjtree(prj)\nlocal tr = premake.project.buildsourcetree(prj, true)\ntr.configs = {}\nfor _, cfgname in ipairs(prj.solution.configurations) do\nfor _, platform in ipairs(prj.solution.xcode.platforms) do\nlocal cfg = premake.getconfig(prj, cfgname, platform)\ncfg.xcode = {}\ncfg.xcode.targetid = xcode.newid(prj.xcode.projectnode, cfgname)\ncfg.xcode.projectid = xcode.newid(tr, cfgname)\ntable.insert(tr.configs, cfg)\nend\nend\ntree.traverse(tr, {\nonbranch = function(node)\nif path.getextension(node.name) == \".lproj\" then\nlocal lang = path.getbasename(node.name) -- \"English\", \"French\", etc.\nfor _, filenode in ipairs(node.children) do\nlocal grpnode = node.parent.children[filenode.name]\nif not grpnode then\ngrpnode = tree.insert(node.parent, tree.new(filenode.name))\ngrpnode.kind = \"vgroup\"\nend\nfilenode.name = path.getbasename(lang)\ntree.insert(grpnode, filenode)\nend\ntree.remove(node)\nend\nend\n})\ntree.traverse(tr, {\n"
@@ -368,8 +376,8 @@ const char* builtin_scripts[] = {
"cal tr = xcode.buildprjtree(prj)\nxcode.Header(tr)\nxcode.PBXBuildFile(tr)\nxcode.PBXContainerItemProxy(tr)\nxcode.PBXFileReference(tr,prj)\nxcode.PBXFrameworksBuildPhase(tr)\nxcode.PBXGroup(tr)\nxcode.PBXNativeTarget(tr)\nxcode.PBXProject(tr)\nxcode.PBXReferenceProxy(tr)\nxcode.PBXResourcesBuildPhase(tr)\nxcode.PBXShellScriptBuildPhase(tr)\nxcode.PBXSourcesBuildPhase(tr,prj)\nxcode.PBXVariantGroup(tr)\nxcode.PBXTargetDependency(tr)\nxcode.XCBuildConfiguration(tr, prj)\nxcode.XCBuildConfigurationList(tr)\nxcode.Footer(tr)\nend\n",
/* actions/xcode/xcode4_workspace.lua */
- "premake.xcode4 = {}\nlocal xcode4 = premake.xcode4\nfunction xcode4.workspace_head()\n_p('<?xml version=\"1.0\" encoding=\"UTF-8\"?>')\n_p('<Workspace')\n_p(1,'version = \"1.0\">')\nend\nfunction xcode4.workspace_tail()\n_p('</Workspace>')\nend\nfunction xcode4.workspace_file_ref(prj)\nlocal projpath = path.getrelative(prj.solution.location, prj.location)\nif projpath == '.' then projpath = '' \nelse projpath = projpath ..'/' \nend\n_p(1,'<FileRef')\n_p(2,'location = \"group:%s\">',projpath .. prj.name .. '.xcodeproj')\n_p(1,'</FileRef>')\nend\nfunction xcode4.workspace_generate(sln)\npremake.xcode.preparesolution(sln)\nxcode4.workspace_head()\nxcode4.reorderProjects(sln)\nfor prj in premake.solution.eachproject(sln) do\nxcode4.workspace_file_ref(prj)\nend\nxcode4.workspace_tail()\nend\nfunction xcode4.reorderProjects(sln)\nif sln.startproject then\nfor i, prj in ipairs(sln.projects) do\nif sln.startproject == prj.name then\nlocal cur = prj.group\nwhile cur ~= nil do\nfor j, group in ipairs(sln.groups) do\nif "
- "group == cur then\ntable.remove(sln.groups, j)\nbreak\nend\nend\ntable.insert(sln.groups, 1, cur)\ncur = cur.parent\nend\ntable.remove(sln.projects, i)\ntable.insert(sln.projects, 1, prj)\nbreak\nend\nend\nend\nend\n",
+ "premake.xcode4 = {}\nlocal xcode4 = premake.xcode4\nfunction xcode4.workspace_head()\n_p('<?xml version=\"1.0\" encoding=\"UTF-8\"?>')\n_p('<Workspace')\n_p(1,'version = \"1.0\">')\nend\nfunction xcode4.workspace_tail()\n_p('</Workspace>')\nend\nfunction xcode4.workspace_file_ref(prj, indent)\nlocal projpath = path.getrelative(prj.solution.location, prj.location)\nif projpath == '.' then projpath = ''\nelse projpath = projpath ..'/'\nend\n_p(indent, '<FileRef')\n_p(indent + 1, 'location = \"group:%s\">', projpath .. prj.name .. '.xcodeproj')\n_p(indent, '</FileRef>')\nend\nfunction xcode4.workspace_group(grp, indent)\n_p(indent, '<Group')\n_p(indent + 1, 'location = \"container:\"')\n_p(indent + 1, 'name = \"%s\">', grp.name)\nfor _, child in ipairs(grp.groups) do\nxcode4.workspace_group(child, indent + 1)\nend\nfor _, prj in ipairs(grp.projects) do\nxcode4.workspace_file_ref(prj, indent + 1)\nend\n_p(indent, '</Group>')\nend\nfunction xcode4.workspace_generate(sln)\npremake.xcode.preparesolution(sln)\nxcode4."
+ "workspace_head()\nxcode4.reorderProjects(sln)\nfor grp in premake.solution.eachgroup(sln) do\nif grp.parent == nil then\nxcode4.workspace_group(grp, 1)\nend\nend\nfor prj in premake.solution.eachproject(sln) do\nif prj.group == nil then\nxcode4.workspace_file_ref(prj, 1)\nend\nend\nxcode4.workspace_tail()\nend\nfunction xcode4.reorderProjects(sln)\nif sln.startproject then\nfor i, prj in ipairs(sln.projects) do\nif sln.startproject == prj.name then\nlocal cur = prj.group\nwhile cur ~= nil do\nfor j, group in ipairs(sln.groups) do\nif group == cur then\ntable.remove(sln.groups, j)\nbreak\nend\nend\ntable.insert(sln.groups, 1, cur)\ncur = cur.parent\nend\ntable.remove(sln.projects, i)\ntable.insert(sln.projects, 1, prj)\nbreak\nend\nend\nend\nend\n",
/* actions/xcode/xcode6_project.lua */
"local xcode = premake.xcode\nlocal xcode6 = xcode.xcode6\nlocal tree = premake.tree\nfunction xcode6.buildprjtree(prj)\nlocal tr = premake.project.buildsourcetree(prj)\ntr.configs = {}\nfor _, cfgname in ipairs(prj.solution.configurations) do\nfor _, platform in ipairs(prj.solution.xcode.platforms) do\nlocal cfg = premake.getconfig(prj, cfgname, platform)\ncfg.xcode = {}\ncfg.xcode.targetid = xcode.newid(prj.xcode.projectnode, cfgname)\ncfg.xcode.projectid = xcode.newid(tr, cfgname)\ntable.insert(tr.configs, cfg)\nend\nend\ntree.traverse(tr, {\nonbranch = function(node)\nif path.getextension(node.name) == \".lproj\" then\nlocal lang = path.getbasename(node.name) -- \"English\", \"French\", etc.\nfor _, filenode in ipairs(node.children) do\nlocal grpnode = node.parent.children[filenode.name]\nif not grpnode then\ngrpnode = tree.insert(node.parent, tree.new(filenode.name))\ngrpnode.kind = \"vgroup\"\nend\nfilenode.name = path.getbasename(lang)\ntree.insert(grpnode, filenode)\nend\ntree.remove(node)\nend\nend"
@@ -387,15 +395,15 @@ const char* builtin_scripts[] = {
/* actions/fastbuild/fastbuild_project.lua */
"-- Generates a FASTBuild config file for a project.\nlocal function add_trailing_backslash(dir)\nif dir:len() > 0 and dir:sub(-1) ~= \"\\\\\" then\nreturn dir..\"\\\\\"\nend\nreturn dir\nend\nlocal function compile(indentlevel, prj, cfg, commonbasepath)\nlocal firstflag = true\nfor _, cfgexclude in ipairs(cfg.excludes) do\nif path.issourcefile(cfgexclude) then\nif firstflag then\n_p(indentlevel, '// Excluded files:')\nfirstflag = false\nend\n_p(indentlevel, \".CompilerInputFiles - '%s'\", cfgexclude)\nend\nend\nif not firstflag then\n_p('')\nend\n_p(indentlevel, \".CompilerOutputPath = '%s'\", add_trailing_backslash(cfg.objectsdir))\n_p(indentlevel, \".Defines = ''\")\nfor _, define in ipairs(cfg.defines) do\n_p(indentlevel+1, \"+ ' /D%s'\", define)\nend\nif cfg.kind == 'SharedLib' then\n_p(indentlevel+1, \"+ ' /D_WINDLL'\")\nend\n_p(indentlevel, \".IncludeDirs = ''\")\nlocal sortedincdirs = {}\nfor _, includedir in ipairs(cfg.userincludedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, included"
"ir)\nend\nend\nfor _, includedir in ipairs(cfg.includedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, includedir)\nend\nend\nlocal function getpathnodecount(p)\nlocal nodefinder = string.gmatch(p, \"[^\\\\/]+\")\nlocal result = 0\nlocal node = nodefinder()\nwhile node do\nresult = result + ((node ~= '.' and 1) or 0)\nnode = nodefinder()\nend\nreturn result\nend\nlocal stepsfrombase = {}\nfor _, includedir in ipairs(sortedincdirs) do\nstepsfrombase[includedir] = getpathnodecount(path.getrelative(commonbasepath, includedir))\nend\nlocal function includesort(a, b)\nif stepsfrombase[a] == stepsfrombase[b] then\nreturn a < b\nelse\nreturn stepsfrombase[a] < stepsfrombase[b]\nend\nend\ntable.sort(sortedincdirs, includesort)\nfor _, includedir in ipairs(sortedincdirs) do\n_p(indentlevel+1, \"+ ' /I\\\"%s\\\"'\", includedir)\nend\n_p(indentlevel+1, \"+ .MSVCIncludes\")\nlocal compileroptions = {\n'\"%1\"',\n'/nologo',\n'/c',\n'/Gy',\n'/Gm-',\n'/Zc:inline',\n'/errorReport:prompt',\n'/FS',\n}\nif cfg.op"
- "tions.ForceCPP then\ntable.insert(compileroptions, '/TP')\nend\nif cfg.flags.ExtraWarnings then\ntable.insert(compileroptions, '/W4')\nend\nif (cfg.flags.NativeWChar == false or\ncfg.flags.NoNativeWChar) then\ntable.insert(compileroptions, '/Zc:wchar_t-')\nend\nif (cfg.flags.EnableMinimalRebuild or\ncfg.flags.NoMultiProcessorCompilation) then\nend\nif cfg.flags.FloatFast then\ntable.insert(compileroptions, '/fp:fast')\nelseif cfg.flags.FloatStrict then\ntable.insert(compileroptions, '/fp:strict')\nelse\ntable.insert(compileroptions, '/fp:precise')\nend\nif cfg.flags.FastCall then\ntable.insert(compileroptions, '/Gr')\nelseif cfg.flags.StdCall then\ntable.insert(compileroptions, '/Gd')\nend\nif cfg.flags.UnsignedChar then\ntable.insert(compileroptions, '/J')\nend\nif premake.config.isdebugbuild(cfg) then\nif cfg.flags.StaticRuntime then\ntable.insert(compileroptions, '/MTd')\nelse\ntable.insert(compileroptions, '/MDd')\nend\nelse\nif cfg.flags.StaticRuntime then\ntable.insert(compileroptions, '/MT')\nelse\ntabl"
- "e.insert(compileroptions, '/MD')\nend\nend\nif cfg.flags.Symbols then\nif (cfg.flags.C7DebugInfo) then\ntable.insert(compileroptions, '/Z7')\nelse\nif (premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue) then\ntable.insert(compileroptions, '/Zi')\nelse\ntable.insert(compileroptions, '/ZI')\nend\nlocal targetdir = add_trailing_backslash(cfg.buildtarget.directory)\ntable.insert(compileroptions, string.format(\"/Fd\\\"%s%s.pdb\\\"\", targetdir, cfg.buildtarget.basename))\nend\nend\nlocal isoptimised = true\nif (cfg.flags.Optimize) then\ntable.insert(compileroptions, '/Ox')\nelseif (cfg.flags.OptimizeSize) then\ntable.insert(compileroptions, '/O1')\nelseif (cfg.flags.OptimizeSpeed) then\ntable.insert(compileroptions, '/O2')\nelse\nisoptimised = false\nend\nif isoptimised then\ntable.insert(compileroptions, '/GF')\nelse\ntable.insert(compileroptions, '/Od')\ntable.insert(compileroptions, '/RTC1')\nend\nif cfg.flags.FatalWarnings then\ntable.insert(compileroptions, '/WX')\nelse\ntable.insert("
- "compileroptions, '/WX-')\nend\nif cfg.platform == 'x32' then\nif cfg.flags.EnableSSE2 then\ntable.insert(compileroptions, '/arch:SSE2')\nelseif cfg.flags.EnableSSE then\ntable.insert(compileroptions, '/arch:SSE')\nend\nend\nif cfg.flags.NoExceptions then\nelse\nif cfg.flags.SEH then\ntable.insert(compileroptions, '/EHa')\nelse\ntable.insert(compileroptions, '/EHsc')\nend\nend\nif cfg.flags.NoRTTI then\ntable.insert(compileroptions, '/GR-')\nelse\ntable.insert(compileroptions, '/GR')\nend\nif cfg.flags.NoFramePointer then\ntable.insert(compileroptions, '/Oy-')\nelse\ntable.insert(compileroptions, '/Oy')\nend\nfor _, addloption in ipairs(cfg.buildoptions) do\ntable.insert(compileroptions, addloption)\nend\n_p(indentlevel, \".CompilerOptions = ''\")\nfor _, option in ipairs(compileroptions) do\n_p(indentlevel+1, \"+ ' %s'\", option)\nend\n_p(indentlevel+1, \"+ .IncludeDirs\")\n_p(indentlevel+1, \"+ .Defines\")\nif not cfg.flags.NoPCH and cfg.pchheader then\n_p(indentlevel, \".CompilerInputFiles - '%s'\", cfg.pchs"
- "ource)\n_p(indentlevel, \".PCHInputFile = '%s'\", cfg.pchsource)\n_p(indentlevel, \".PCHOutputFile = .CompilerOutputPath + '%s.pch'\", prj.name)\n_p(indentlevel, \".CompilerOptions + ' /Fp\\\"' + .CompilerOutputPath + '%s.pch\\\"'\", prj.name)\n_p(indentlevel, \".PCHOptions = .CompilerOptions\")\n_p(indentlevel+1, \"+ ' /Yc\\\"%s\\\"'\", cfg.pchheader)\n_p(indentlevel+1, \"+ ' /Fo\\\"%%3\\\"'\")\n_p(indentlevel, \".CompilerOptions + ' /Yu\\\"%s\\\"'\", cfg.pchheader)\nend\n_p(indentlevel+1, \"+ ' /Fo\\\"%%2\\\"'\") -- make sure the previous property is .CompilerOptions\nend\nlocal function library(prj, cfg, useconfig, commonbasepath)\n_p(1, \"Library('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\nlocal librarianoptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n}\nif cfg.platform == 'x64' then\ntable.insert(librarianoptions, '/MACHINE:X64')\nelse\ntable.insert(librarianoptions, '/MACHINE:X86')\nend\n_p(2, \".LibrarianOptions = ''\")\nfor _, op"
- "tion in ipairs(librarianoptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(2, \".LibrarianOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function binary(prj, cfg, useconfig, bintype, commonbasepath)\n_p(1, \"ObjectList('%s_obj-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\n_p(1, '}')\n_p('')\n_p(1, \"%s('%s-%s-%s')\", bintype, prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\n_p(2, '.Libraries = {')\n_p(3, \"'%s_obj-%s-%s',\", prj.name, cfg.name, cfg.platform) -- Refer to the ObjectList\nlocal sorteddeplibs = {}\nfor _, deplib in ipairs(premake.getlinks(cfg, \"dependencies\", \"basename\")) do\ntable.insert(sorteddeplibs, string.format(\"'%s-%s-%s',\", deplib, cfg.name, cfg.platform))\nend\ntable.sort(sorteddeplibs)\nfor _, deplib in ipairs(sorteddeplibs) do\n_p(3, deplib)\nend\n_p(3, '}')\n_p(2, '.LinkerLinkObjects = false')\nlocal linkeroptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n'/errorReport:prompt',"
- "\n}\nlocal subsystemversion = '\",5.02\"'\nif cfg.platform == 'x32' then\nsubsystemversion = '\",5.01\"'\nend\nif cfg.kind == 'ConsoleApp' then\ntable.insert(linkeroptions, '/SUBSYSTEM:CONSOLE'..subsystemversion)\nelse\ntable.insert(linkeroptions, '/SUBSYSTEM:WINDOWS'..subsystemversion)\nend\nif cfg.kind == 'SharedLib' then\ntable.insert(linkeroptions, '/DLL')\nend\nif cfg.platform == 'x64' then\ntable.insert(linkeroptions, '/MACHINE:X64')\nelse\ntable.insert(linkeroptions, '/MACHINE:X86')\nend\nfor _, libdir in ipairs(cfg.libdirs) do\ntable.insert(linkeroptions, string.format('/LIBPATH:%s', path.translate(libdir, '\\\\')))\nend\nif not cfg.flags.WinMain and (cfg.kind == 'ConsoleApp' or cfg.kind == 'WindowedApp') then\nif cfg.flags.Unicode then\ntable.insert(linkeroptions, '/ENTRY:wmainCRTStartup')\nelse\ntable.insert(linkeroptions, '/ENTRY:mainCRTStartup')\nend\nend\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\ntable.insert(linkeroptions, '/DEF:%s', deffile)\nend\nif (cfg.flags.Symbols ~="
- " nil) then\ntable.insert(linkeroptions, '/DEBUG')\nend\nif premake.config.isoptimizedbuild(cfg.flags) then\ntable.insert(linkeroptions, '/OPT:REF')\ntable.insert(linkeroptions, '/OPT:ICF')\nend\ntable.insert(linkeroptions, '/INCREMENTAL'..((premake.config.isincrementallink(cfg) and '') or ':NO'))\nfor _, addloption in ipairs(cfg.linkoptions) do\ntable.insert(linkeroptions, addloption)\nend\nlocal linklibs = premake.getlinks(cfg, \"all\", \"fullpath\")\nfor _, linklib in ipairs(linklibs) do\ntable.insert(linkeroptions, path.getname(linklib))\nend\ntable.sort(linkeroptions)\n_p(2, \".LinkerOptions = ''\")\nfor _, option in ipairs(linkeroptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(3, \"+ .MSVCLibPaths\")\n_p(2, \".LinkerOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function executable(prj, cfg, useconfig, commonbasepath)\nbinary(prj, cfg, useconfig, 'Executable', commonbasepath)\nend\nlocal function dll(prj, cfg, useconfig, commonbasepath)\nbinary(prj, cfg, useconfig, 'DLL', commo"
- "nbasepath)\nend\nlocal function alias(prj, cfg, target)\n_p(1, \"Alias('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\n_p(2, \".Targets = '%s'\", target)\n_p(1, '}')\n_p('')\nend\nfunction premake.fastbuild.project(prj)\nio.indent = ' '\n_p('// FASTBuild project configuration file autogenerated by GENie.')\n_p('')\n_p('{')\nlocal cppfiles = {}\nfor file in premake.project.eachfile(prj) do\nif path.issourcefile(file.name) then\ntable.insert(cppfiles, file.name)\nend\nend\nlocal commonbasepath = cppfiles[1]\nfor _, file in ipairs(cppfiles) do\ncommonbasepath = path.getcommonbasedir(commonbasepath..'/', file)\nend\n_p(1, \".CompilerInputFilesRoot = '%s/'\", commonbasepath)\n_p(1, '.CompilerInputFiles = {')\nfor _, file in ipairs(cppfiles) do\n_p(2, \"'%s',\", file)\nend\n_p(1, '}')\n_p('')\nlocal targetkindmap = {\nConsoleApp = executable,\nWindowedApp = executable,\nSharedLib = dll,\nStaticLib = library,\n}\nlocal useconfigmap = {\nx32 = function(indentlevel)\n_p(indentlevel, 'Using(.MSVCx86Conf"
- "ig)')\n_p('')\nend,\nx64 = function(indentlevel)\n_p(indentlevel, 'Using(.MSVCx64Config)')\n_p('')\nend,\n}\nlocal nativeplatform = (os.is64bit() and 'x64') or 'x32'\nfor _, platform in ipairs(prj.solution.platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nif cfg.platform == 'Native' then\nalias(prj, cfg, string.format('%s-%s-%s', prj.name, cfg.name, nativeplatform))\nelse\ntargetkindmap[prj.kind](prj, cfg, useconfigmap[cfg.platform], commonbasepath)\nend\nend\nend\n_p('}')\nend\n",
+ "tions.ForceCPP then\ntable.insert(compileroptions, '/TP')\nend\nif cfg.flags.PedanticWarnings\nor cfg.flags.ExtraWarnings\nthen\ntable.insert(compileroptions, '/W4')\nend\nif (cfg.flags.NativeWChar == false or\ncfg.flags.NoNativeWChar) then\ntable.insert(compileroptions, '/Zc:wchar_t-')\nend\nif (cfg.flags.EnableMinimalRebuild or\ncfg.flags.NoMultiProcessorCompilation) then\nend\nif cfg.flags.FloatFast then\ntable.insert(compileroptions, '/fp:fast')\nelseif cfg.flags.FloatStrict then\ntable.insert(compileroptions, '/fp:strict')\nelse\ntable.insert(compileroptions, '/fp:precise')\nend\nif cfg.flags.FastCall then\ntable.insert(compileroptions, '/Gr')\nelseif cfg.flags.StdCall then\ntable.insert(compileroptions, '/Gd')\nend\nif cfg.flags.UnsignedChar then\ntable.insert(compileroptions, '/J')\nend\nif premake.config.isdebugbuild(cfg) then\nif cfg.flags.StaticRuntime then\ntable.insert(compileroptions, '/MTd')\nelse\ntable.insert(compileroptions, '/MDd')\nend\nelse\nif cfg.flags.StaticRuntime then\ntable.insert(com"
+ "pileroptions, '/MT')\nelse\ntable.insert(compileroptions, '/MD')\nend\nend\nif cfg.flags.Symbols then\nif (cfg.flags.C7DebugInfo) then\ntable.insert(compileroptions, '/Z7')\nelse\nif (premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue) then\ntable.insert(compileroptions, '/Zi')\nelse\ntable.insert(compileroptions, '/ZI')\nend\nlocal targetdir = add_trailing_backslash(cfg.buildtarget.directory)\ntable.insert(compileroptions, string.format(\"/Fd\\\"%s%s.pdb\\\"\", targetdir, cfg.buildtarget.basename))\nend\nend\nlocal isoptimised = true\nif (cfg.flags.Optimize) then\ntable.insert(compileroptions, '/Ox')\nelseif (cfg.flags.OptimizeSize) then\ntable.insert(compileroptions, '/O1')\nelseif (cfg.flags.OptimizeSpeed) then\ntable.insert(compileroptions, '/O2')\nelse\nisoptimised = false\nend\nif isoptimised then\ntable.insert(compileroptions, '/GF')\nelse\ntable.insert(compileroptions, '/Od')\ntable.insert(compileroptions, '/RTC1')\nend\nif cfg.flags.FatalWarnings then\ntable.insert(compileropti"
+ "ons, '/WX')\nelse\ntable.insert(compileroptions, '/WX-')\nend\nif cfg.platform == 'x32' then\nif cfg.flags.EnableSSE2 then\ntable.insert(compileroptions, '/arch:SSE2')\nelseif cfg.flags.EnableSSE then\ntable.insert(compileroptions, '/arch:SSE')\nend\nend\nif cfg.flags.NoExceptions then\nelse\nif cfg.flags.SEH then\ntable.insert(compileroptions, '/EHa')\nelse\ntable.insert(compileroptions, '/EHsc')\nend\nend\nif cfg.flags.NoRTTI then\ntable.insert(compileroptions, '/GR-')\nelse\ntable.insert(compileroptions, '/GR')\nend\nif cfg.flags.NoFramePointer then\ntable.insert(compileroptions, '/Oy-')\nelse\ntable.insert(compileroptions, '/Oy')\nend\nfor _, addloption in ipairs(cfg.buildoptions) do\ntable.insert(compileroptions, addloption)\nend\n_p(indentlevel, \".CompilerOptions = ''\")\nfor _, option in ipairs(compileroptions) do\n_p(indentlevel+1, \"+ ' %s'\", option)\nend\n_p(indentlevel+1, \"+ .IncludeDirs\")\n_p(indentlevel+1, \"+ .Defines\")\nif not cfg.flags.NoPCH and cfg.pchheader then\n_p(indentlevel, \".Compi"
+ "lerInputFiles - '%s'\", cfg.pchsource)\n_p(indentlevel, \".PCHInputFile = '%s'\", cfg.pchsource)\n_p(indentlevel, \".PCHOutputFile = .CompilerOutputPath + '%s.pch'\", prj.name)\n_p(indentlevel, \".CompilerOptions + ' /Fp\\\"' + .CompilerOutputPath + '%s.pch\\\"'\", prj.name)\n_p(indentlevel, \".PCHOptions = .CompilerOptions\")\n_p(indentlevel+1, \"+ ' /Yc\\\"%s\\\"'\", cfg.pchheader)\n_p(indentlevel+1, \"+ ' /Fo\\\"%%3\\\"'\")\n_p(indentlevel, \".CompilerOptions + ' /Yu\\\"%s\\\"'\", cfg.pchheader)\nend\n_p(indentlevel+1, \"+ ' /Fo\\\"%%2\\\"'\") -- make sure the previous property is .CompilerOptions\nend\nlocal function library(prj, cfg, useconfig, commonbasepath)\n_p(1, \"Library('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\nlocal librarianoptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n}\nif cfg.platform == 'x64' then\ntable.insert(librarianoptions, '/MACHINE:X64')\nelse\ntable.insert(librarianoptions, '/MACHINE:X86')\nend\n_p(2, \".Lib"
+ "rarianOptions = ''\")\nfor _, option in ipairs(librarianoptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(2, \".LibrarianOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function binary(prj, cfg, useconfig, bintype, commonbasepath)\n_p(1, \"ObjectList('%s_obj-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\n_p(1, '}')\n_p('')\n_p(1, \"%s('%s-%s-%s')\", bintype, prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\n_p(2, '.Libraries = {')\n_p(3, \"'%s_obj-%s-%s',\", prj.name, cfg.name, cfg.platform) -- Refer to the ObjectList\nlocal sorteddeplibs = {}\nfor _, deplib in ipairs(premake.getlinks(cfg, \"dependencies\", \"basename\")) do\ntable.insert(sorteddeplibs, string.format(\"'%s-%s-%s',\", deplib, cfg.name, cfg.platform))\nend\ntable.sort(sorteddeplibs)\nfor _, deplib in ipairs(sorteddeplibs) do\n_p(3, deplib)\nend\n_p(3, '}')\n_p(2, '.LinkerLinkObjects = false')\nlocal linkeroptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/"
+ "NOLOGO',\n'/errorReport:prompt',\n}\nlocal subsystemversion = '\",5.02\"'\nif cfg.platform == 'x32' then\nsubsystemversion = '\",5.01\"'\nend\nif cfg.kind == 'ConsoleApp' then\ntable.insert(linkeroptions, '/SUBSYSTEM:CONSOLE'..subsystemversion)\nelse\ntable.insert(linkeroptions, '/SUBSYSTEM:WINDOWS'..subsystemversion)\nend\nif cfg.kind == 'SharedLib' then\ntable.insert(linkeroptions, '/DLL')\nend\nif cfg.platform == 'x64' then\ntable.insert(linkeroptions, '/MACHINE:X64')\nelse\ntable.insert(linkeroptions, '/MACHINE:X86')\nend\nfor _, libdir in ipairs(cfg.libdirs) do\ntable.insert(linkeroptions, string.format('/LIBPATH:%s', path.translate(libdir, '\\\\')))\nend\nif not cfg.flags.WinMain and (cfg.kind == 'ConsoleApp' or cfg.kind == 'WindowedApp') then\nif cfg.flags.Unicode then\ntable.insert(linkeroptions, '/ENTRY:wmainCRTStartup')\nelse\ntable.insert(linkeroptions, '/ENTRY:mainCRTStartup')\nend\nend\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\ntable.insert(linkeroptions, '/DEF:%s', deffile"
+ ")\nend\nif (cfg.flags.Symbols ~= nil) then\ntable.insert(linkeroptions, '/DEBUG')\nend\nif premake.config.isoptimizedbuild(cfg.flags) then\ntable.insert(linkeroptions, '/OPT:REF')\ntable.insert(linkeroptions, '/OPT:ICF')\nend\ntable.insert(linkeroptions, '/INCREMENTAL'..((premake.config.isincrementallink(cfg) and '') or ':NO'))\nfor _, addloption in ipairs(cfg.linkoptions) do\ntable.insert(linkeroptions, addloption)\nend\nlocal linklibs = premake.getlinks(cfg, \"all\", \"fullpath\")\nfor _, linklib in ipairs(linklibs) do\ntable.insert(linkeroptions, path.getname(linklib))\nend\ntable.sort(linkeroptions)\n_p(2, \".LinkerOptions = ''\")\nfor _, option in ipairs(linkeroptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(3, \"+ .MSVCLibPaths\")\n_p(2, \".LinkerOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function executable(prj, cfg, useconfig, commonbasepath)\nbinary(prj, cfg, useconfig, 'Executable', commonbasepath)\nend\nlocal function dll(prj, cfg, useconfig, commonbasepath)\nbinary(p"
+ "rj, cfg, useconfig, 'DLL', commonbasepath)\nend\nlocal function alias(prj, cfg, target)\n_p(1, \"Alias('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\n_p(2, \".Targets = '%s'\", target)\n_p(1, '}')\n_p('')\nend\nfunction premake.fastbuild.project(prj)\nio.indent = ' '\n_p('// FASTBuild project configuration file autogenerated by GENie.')\n_p('')\n_p('{')\nlocal cppfiles = {}\nfor file in premake.project.eachfile(prj) do\nif path.issourcefile(file.name) then\ntable.insert(cppfiles, file.name)\nend\nend\nlocal commonbasepath = cppfiles[1]\nfor _, file in ipairs(cppfiles) do\ncommonbasepath = path.getcommonbasedir(commonbasepath..'/', file)\nend\n_p(1, \".CompilerInputFilesRoot = '%s/'\", commonbasepath)\n_p(1, '.CompilerInputFiles = {')\nfor _, file in ipairs(cppfiles) do\n_p(2, \"'%s',\", file)\nend\n_p(1, '}')\n_p('')\nlocal targetkindmap = {\nConsoleApp = executable,\nWindowedApp = executable,\nSharedLib = dll,\nStaticLib = library,\n}\nlocal useconfigmap = {\nx32 = function(indentlevel)\n_p("
+ "indentlevel, 'Using(.MSVCx86Config)')\n_p('')\nend,\nx64 = function(indentlevel)\n_p(indentlevel, 'Using(.MSVCx64Config)')\n_p('')\nend,\n}\nlocal nativeplatform = (os.is64bit() and 'x64') or 'x32'\nfor _, platform in ipairs(prj.solution.platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nif cfg.platform == 'Native' then\nalias(prj, cfg, string.format('%s-%s-%s', prj.name, cfg.name, nativeplatform))\nelse\ntargetkindmap[prj.kind](prj, cfg, useconfigmap[cfg.platform], commonbasepath)\nend\nend\nend\n_p('}')\nend\n",
/* actions/fastbuild/fastbuild_solution.lua */
"-- Generates a FASTBuild config file for a solution.\nfunction premake.fastbuild.solution(sln)\nio.indent = ' '\n_p('// FastBuild solution configuration file. Generated by GENie.')\n_p('//------------------------------------------------------------------------------------')\n_p('// %s', sln.name)\n_p('//------------------------------------------------------------------------------------')\n_p('#import VS140COMNTOOLS')\nlocal is64bit = os.is64bit()\nlocal target64 = (is64bit and ' amd64') or ' x86_amd64'\nlocal target32 = (is64bit and ' amd64_x86') or ''\nlocal getvcvarscontent = [[\n@set INCLUDE=\n@set LIB=\n@set CommandPromptType=\n@set PreferredToolArchitecture=\n@set Platform=\n@set Path=%SystemRoot%\\System32;%SystemRoot%;%SystemRoot%\\System32\\wbem\n@call \"%VS140COMNTOOLS%..\\..\\VC\\vcvarsall.bat\" %1\n@echo %INCLUDE%\n@echo %LIB%\n@echo %CommandPromptType%\n@echo %PreferredToolArchitecture%\n@echo %Platform%\n@echo %Path%\n]]\nlocal getvcvarsfilepath = os.getenv('TEMP')..'\\\\getvcvars.bat'\nlocal"
@@ -466,10 +474,10 @@ const char* builtin_scripts[] = {
/* actions/qbs/qbs_cpp.lua */
"local qbs = premake.qbs\nlocal function is_excluded(prj, cfg, file)\nif table.icontains(prj.excludes, file) then\nreturn true\nend\nif table.icontains(cfg.excludes, file) then\nreturn true\nend\nreturn false\nend\nfunction qbs.generate_project(prj)\nlocal indent = 0\n_p(indent, '/*')\n_p(indent, ' * QBS project file autogenerated by GENie')\n_p(indent, ' * https://github.com/bkaradzic/GENie')\n_p(indent, ' */')\n_p(indent, '')\n_p(indent, 'import qbs 1.0')\n_p(indent, '')\nif prj.kind == \"ConsoleApp\" then\n_p(indent, 'CppApplication {')\n_p(indent, 'consoleApplication: true')\nelseif prj.kind == \"WindowedApp\" then\n_p(indent, 'CppApplication {')\nelseif prj.kind == \"StaticLib\" then\n_p(indent, 'StaticLibrary {')\nelseif prj.kind == \"SharedLib\" then\n_p(indent, 'DynamicLibrary {')\nend\nindent = indent + 1\n_p(indent, 'name: \"' .. prj.name .. '\"')\n_p(indent, 'cpp.cxxLanguageVersion: \"c++11\"')\n_p(indent, 'Depends { name: \"cpp\" }')\nlocal deps = premake.getdependencies(prj)\nif #deps > 0 then\nfor"
" _, depprj in ipairs(deps) do\n_p(indent, 'Depends { name: \"%s\" }', depprj.name)\nend\nend\nlocal cc = premake.gettool(prj)\nlocal platforms = premake.filterplatforms(prj.solution, cc.platforms, \"Native\")\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nif cfg.platform ~= \"Native\" then\n_p('');\n_p(indent, 'Properties { /* %s */', premake.getconfigname(cfg.name, cfg.platform, true))\nindent = indent + 1\nlocal arch = \"\"\nlocal linkerFlags = cfg.linkoptions\nif cfg.platform == \"x32\" then\narch = '&& qbs.architecture == \"x86\"'\nelseif cfg.platform == \"x64\" then\narch = '&& qbs.architecture == \"x86_64\"'\nend\nif cfg.name == \"Debug\" then\n_p(indent, 'condition: qbs.buildVariant == \"debug\" %s', arch)\nelse\n_p(indent, 'condition: qbs.buildVariant == \"release\" %s', arch)\nend\n_p(indent, 'targetName: \"%s\"', cfg.buildtarget.basename)\n_p(indent, 'destinationDirectory: \"%s\"', path.getabsolute('projects/qbs/' .. cfg.buildtarget.directory) .. '/')\nqbs."
- "list(\n indent\n, \"cpp.commonCompilerFlags\"\n, cfg.buildoptions\n)\nqbs.list(\n indent\n, \"cpp.cFlags\"\n, cfg.buildoptions_c\n)\nqbs.list(\n indent\n, \"cpp.cxxFlags\"\n, cfg.buildoptions_cpp\n)\nqbs.list(\n indent\n, \"cpp.objcFlags\"\n, cfg.buildoptions_objc\n)\nqbs.list(\n indent\n, \"cpp.objcxxFlags\"\n, cfg.buildoptions_objc\n)\nif cfg.flags.StaticRuntime then\n_p(indent, 'cpp.runtimeLibrary: \"static\"')\nelse\n_p(indent, 'cpp.runtimeLibrary: \"dynamic\"')\nend\nif cfg.flags.ExtraWarnings then\n_p(indent, 'cpp.warningLevel: \"all\"')\nelse\n_p(indent, 'cpp.warningLevel: \"default\"')\nend\nif cfg.flags.FatalWarnings then\n_p(indent, 'cpp.treatWarningsAsErrors: true')\nelse\n_p(indent, 'cpp.treatWarningsAsErrors: false')\nend\nif cfg.flags.NoRTTI then\n_p(indent, 'cpp.enableRtti: false')\nelse\n_p(indent, 'cpp.enableRtti: true')\nend\nif cfg.flags.NoExceptions then\n_p(indent, 'cpp.enableExceptions: false')\nelse\n_p(indent, 'cpp.enableExceptions: true')\nend\nif cfg.flags.Symbols then\n_p(indent"
- ", 'cpp.debugInformation: true')\nelse\n_p(indent, 'cpp.debugInformation: false')\nend\nif cfg.flags.Unicode then\n_p(indent, 'cpp.windowsApiCharacterSet: \"unicode\"')\nelse\n_p(indent, 'cpp.windowsApiCharacterSet: \"\"')\nend\nif not cfg.pchheader or cfg.flags.NoPCH then\n_p(indent, 'cpp.usePrecompiledHeader: false')\nelse\n_p(indent, 'cpp.usePrecompiledHeader: true')\n_p(indent, 'Group {')\n_p(indent+1, 'name: \"PCH\"')\n_p(indent+1, 'files: [\"' .. cfg.pchheader .. '\"]')\n_p(indent+1, 'fileTags: [\"cpp_pch_src\"]')\n_p(indent, '}')\nend\nfor _, value in ipairs(cfg.flags) do\nif (value == \"Optimize\") then\nelseif (value == \"OptimizeSize\") then\n_p(indent, 'cpp.optimization: \"small\"')\nelseif (value == \"OptimizeSpeed\") then\n_p(indent, 'cpp.optimization: \"fast\"')\nend\nend\nqbs.list(\n indent\n, \"cpp.defines\"\n, cfg.defines\n)\nlocal sortedincdirs = {}\nfor _, includedir in ipairs(cfg.userincludedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, includedir)\nend\nend\nfor _, includ"
- "edir in ipairs(cfg.includedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, includedir)\nend\nend\ntable.sort(sortedincdirs, includesort)\nqbs.list(\n indent\n, \"cpp.includePaths\"\n, sortedincdirs\n)\nqbs.list(\n indent\n, \"cpp.staticLibraries\"\n, premake.getlinks(cfg, \"system\", \"fullpath\")\n)\nqbs.list(\n indent\n, \"cpp.libraryPaths\"\n, cfg.libdirs\n)\nqbs.list(\n indent\n, \"cpp.linkerFlags\"\n, linkerFlags\n)\ntable.sort(prj.files)\nif #prj.files > 0 then\n_p(indent, 'files: [')\nfor _, file in ipairs(prj.files) do\nif path.iscfile(file)\nor path.iscppfile(file)\nor path.isobjcfile(file)\nor path.iscppheader(file) then\nif not is_excluded(prj, cfg, file) then\n_p(indent+1, '\"%s\",', file)\nend\nend\nend\n_p(indent+1, ']')\nend\nif #prj.excludes > 0 then\n_p(indent, 'excludeFiles: [')\ntable.sort(prj.excludes)\nfor _, file in ipairs(prj.excludes) do\nif path.issourcefile(file) then\n_p(indent+1, '\"%s\",', file)\nend\nend\n_p(indent+1, ']')\nend\nindent = indent - 1\n_p(indent, "
- "'}');\nend\nend\nend\nindent = indent - 1\n_p(indent, '}')\nend\n",
+ "list(\n indent\n, \"cpp.commonCompilerFlags\"\n, cfg.buildoptions\n)\nqbs.list(\n indent\n, \"cpp.cFlags\"\n, cfg.buildoptions_c\n)\nqbs.list(\n indent\n, \"cpp.cxxFlags\"\n, cfg.buildoptions_cpp\n)\nqbs.list(\n indent\n, \"cpp.objcFlags\"\n, cfg.buildoptions_objc\n)\nqbs.list(\n indent\n, \"cpp.objcxxFlags\"\n, cfg.buildoptions_objc\n)\nif cfg.flags.StaticRuntime then\n_p(indent, 'cpp.runtimeLibrary: \"static\"')\nelse\n_p(indent, 'cpp.runtimeLibrary: \"dynamic\"')\nend\nif cfg.flags.PedanticWarnings\nor cfg.flags.ExtraWarnings\nthen\n_p(indent, 'cpp.warningLevel: \"all\"')\nelse\n_p(indent, 'cpp.warningLevel: \"default\"')\nend\nif cfg.flags.FatalWarnings then\n_p(indent, 'cpp.treatWarningsAsErrors: true')\nelse\n_p(indent, 'cpp.treatWarningsAsErrors: false')\nend\nif cfg.flags.NoRTTI then\n_p(indent, 'cpp.enableRtti: false')\nelse\n_p(indent, 'cpp.enableRtti: true')\nend\nif cfg.flags.NoExceptions then\n_p(indent, 'cpp.enableExceptions: false')\nelse\n_p(indent, 'cpp.enableExceptions: true')\nend\nif c"
+ "fg.flags.Symbols then\n_p(indent, 'cpp.debugInformation: true')\nelse\n_p(indent, 'cpp.debugInformation: false')\nend\nif cfg.flags.Unicode then\n_p(indent, 'cpp.windowsApiCharacterSet: \"unicode\"')\nelse\n_p(indent, 'cpp.windowsApiCharacterSet: \"\"')\nend\nif not cfg.pchheader or cfg.flags.NoPCH then\n_p(indent, 'cpp.usePrecompiledHeader: false')\nelse\n_p(indent, 'cpp.usePrecompiledHeader: true')\n_p(indent, 'Group {')\n_p(indent+1, 'name: \"PCH\"')\n_p(indent+1, 'files: [\"' .. cfg.pchheader .. '\"]')\n_p(indent+1, 'fileTags: [\"cpp_pch_src\"]')\n_p(indent, '}')\nend\nfor _, value in ipairs(cfg.flags) do\nif (value == \"Optimize\") then\nelseif (value == \"OptimizeSize\") then\n_p(indent, 'cpp.optimization: \"small\"')\nelseif (value == \"OptimizeSpeed\") then\n_p(indent, 'cpp.optimization: \"fast\"')\nend\nend\nqbs.list(\n indent\n, \"cpp.defines\"\n, cfg.defines\n)\nlocal sortedincdirs = {}\nfor _, includedir in ipairs(cfg.userincludedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, incl"
+ "udedir)\nend\nend\nfor _, includedir in ipairs(cfg.includedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, includedir)\nend\nend\ntable.sort(sortedincdirs, includesort)\nqbs.list(\n indent\n, \"cpp.includePaths\"\n, sortedincdirs\n)\nqbs.list(\n indent\n, \"cpp.staticLibraries\"\n, premake.getlinks(cfg, \"system\", \"fullpath\")\n)\nqbs.list(\n indent\n, \"cpp.libraryPaths\"\n, cfg.libdirs\n)\nqbs.list(\n indent\n, \"cpp.linkerFlags\"\n, linkerFlags\n)\ntable.sort(prj.files)\nif #prj.files > 0 then\n_p(indent, 'files: [')\nfor _, file in ipairs(prj.files) do\nif path.iscfile(file)\nor path.iscppfile(file)\nor path.isobjcfile(file)\nor path.iscppheader(file) then\nif not is_excluded(prj, cfg, file) then\n_p(indent+1, '\"%s\",', file)\nend\nend\nend\n_p(indent+1, ']')\nend\nif #prj.excludes > 0 then\n_p(indent, 'excludeFiles: [')\ntable.sort(prj.excludes)\nfor _, file in ipairs(prj.excludes) do\nif path.issourcefile(file) then\n_p(indent+1, '\"%s\",', file)\nend\nend\n_p(indent+1, ']')\nend\n"
+ "indent = indent - 1\n_p(indent, '}');\nend\nend\nend\nindent = indent - 1\n_p(indent, '}')\nend\n",
/* _premake_main.lua */
"_WORKING_DIR = os.getcwd()\nlocal function injectplatform(platform)\nif not platform then return true end\nplatform = premake.checkvalue(platform, premake.fields.platforms.allowed)\nfor sln in premake.solution.each() do\nlocal platforms = sln.platforms or { }\nif #platforms == 0 then\ntable.insert(platforms, \"Native\")\nend\nif not table.contains(platforms, \"Native\") then\nreturn false, sln.name .. \" does not target native platform\\nNative platform settings are required for the --platform feature.\"\nend\nif not table.contains(platforms, platform) then\ntable.insert(platforms, platform)\nend\nsln.platforms = platforms\nend\nreturn true\nend\nfunction _premake_main(scriptpath)\nif (scriptpath) then\nlocal scripts = dofile(scriptpath .. \"/_manifest.lua\")\nfor _,v in ipairs(scripts) do\ndofile(scriptpath .. \"/\" .. v)\nend\nend\nlocal profiler = newProfiler()\nif (nil ~= _OPTIONS[\"debug-profiler\"]) then\nprofiler:start()\nend\n_PREMAKE_COMMAND = path.getabsolute(_PREMAKE_COMMAND)\npremake.action"
diff --git a/3rdparty/genie/src/tools/gcc.lua b/3rdparty/genie/src/tools/gcc.lua
index d03c6e411a2..2188bc82070 100644
--- a/3rdparty/genie/src/tools/gcc.lua
+++ b/3rdparty/genie/src/tools/gcc.lua
@@ -25,19 +25,20 @@
local cflags =
{
- EnableSSE = "-msse",
- EnableSSE2 = "-msse2",
- EnableAVX = "-mavx",
- EnableAVX2 = "-mavx2",
- ExtraWarnings = "-Wall -Wextra",
- FatalWarnings = "-Werror",
- FloatFast = "-ffast-math",
- FloatStrict = "-ffloat-store",
- NoFramePointer = "-fomit-frame-pointer",
- Optimize = "-O2",
- OptimizeSize = "-Os",
- OptimizeSpeed = "-O3",
- Symbols = "-g",
+ EnableSSE = "-msse",
+ EnableSSE2 = "-msse2",
+ EnableAVX = "-mavx",
+ EnableAVX2 = "-mavx2",
+ PedanticWarnings = "-Wall -Wextra -pedantic",
+ ExtraWarnings = "-Wall -Wextra",
+ FatalWarnings = "-Werror",
+ FloatFast = "-ffast-math",
+ FloatStrict = "-ffloat-store",
+ NoFramePointer = "-fomit-frame-pointer",
+ Optimize = "-O2",
+ OptimizeSize = "-Os",
+ OptimizeSpeed = "-O3",
+ Symbols = "-g",
}
local cxxflags =
@@ -47,6 +48,11 @@
UnsignedChar = "-funsigned-char",
}
+ local objcflags =
+ {
+ ObjcARC = "-fobjc-arc",
+ }
+
--
-- Map platforms to flags
@@ -140,6 +146,11 @@
end
+ function premake.gcc.getobjcflags(cfg)
+ return table.translate(cfg.flags, objcflags)
+ end
+
+
--
-- Returns a list of linker flags, based on the supplied configuration.
--
@@ -236,6 +247,7 @@
local result = {}
for _, value in ipairs(premake.getlinks(cfg, "system", "fullpath")) do
if premake.gcc.islibfile(value) then
+ value = path.rebase(value, cfg.project.location, cfg.location)
table.insert(result, _MAKE.esc(value))
elseif path.getextension(value) == ".framework" then
table.insert(result, '-framework ' .. _MAKE.esc(path.getbasename(value)))
@@ -294,13 +306,11 @@
function premake.gcc.getdefines(defines)
local result = { }
for _,def in ipairs(defines) do
- table.insert(result, '-D' .. def)
+ table.insert(result, "-D" .. def)
end
return result
end
-
-
--
-- Decorate include file search paths for the GCC command line.
--
@@ -308,7 +318,7 @@
function premake.gcc.getincludedirs(includedirs)
local result = { }
for _,dir in ipairs(includedirs) do
- table.insert(result, "-I" .. _MAKE.esc(dir))
+ table.insert(result, "-I\"" .. dir .. "\"")
end
return result
end
@@ -320,7 +330,7 @@
function premake.gcc.getquoteincludedirs(includedirs)
local result = { }
for _,dir in ipairs(includedirs) do
- table.insert(result, "-iquote " .. _MAKE.esc(dir))
+ table.insert(result, "-iquote \"" .. dir .. "\"")
end
return result
end
diff --git a/3rdparty/genie/src/tools/ow.lua b/3rdparty/genie/src/tools/ow.lua
index 2eaf73a6b57..b59c8991f8b 100644
--- a/3rdparty/genie/src/tools/ow.lua
+++ b/3rdparty/genie/src/tools/ow.lua
@@ -6,8 +6,8 @@
premake.ow = { }
premake.ow.namestyle = "windows"
-
-
+
+
--
-- Set default tools
--
@@ -15,22 +15,23 @@
premake.ow.cc = "WCL386"
premake.ow.cxx = "WCL386"
premake.ow.ar = "ar"
-
-
+
+
--
-- Translation of Premake flags into OpenWatcom flags
--
local cflags =
{
- ExtraWarnings = "-wx",
- FatalWarning = "-we",
- FloatFast = "-omn",
- FloatStrict = "-op",
- Optimize = "-ox",
- OptimizeSize = "-os",
- OptimizeSpeed = "-ot",
- Symbols = "-d2",
+ PedanticWarnings = "-wx",
+ ExtraWarnings = "-wx",
+ FatalWarning = "-we",
+ FloatFast = "-omn",
+ FloatStrict = "-op",
+ Optimize = "-ox",
+ OptimizeSize = "-os",
+ OptimizeSpeed = "-ot",
+ Symbols = "-d2",
}
local cxxflags =
@@ -38,22 +39,22 @@
NoExceptions = "-xd",
NoRTTI = "-xr",
}
-
+
--
-- No specific platform support yet
--
- premake.ow.platforms =
+ premake.ow.platforms =
{
- Native = {
- flags = ""
+ Native = {
+ flags = ""
},
}
-
+
--
-- Returns a list of compiler flags, based on the supplied configuration.
--
@@ -63,18 +64,18 @@
end
function premake.ow.getcflags(cfg)
- local result = table.translate(cfg.flags, cflags)
+ local result = table.translate(cfg.flags, cflags)
if (cfg.flags.Symbols) then
table.insert(result, "-hw") -- Watcom debug format for Watcom debugger
end
- return result
+ return result
end
-
+
function premake.ow.getcxxflags(cfg)
local result = table.translate(cfg.flags, cxxflags)
return result
end
-
+
--
@@ -83,15 +84,15 @@
function premake.ow.getldflags(cfg)
local result = { }
-
+
if (cfg.flags.Symbols) then
table.insert(result, "op symf")
end
-
+
return result
end
-
-
+
+
--
-- Returns a list of project-relative paths to external library files.
-- This function should examine the linker flags and return any that seem to be
@@ -106,7 +107,7 @@
end
--
--- Returns a list of linker flags for library search directories and
+-- Returns a list of linker flags for library search directories and
-- library names.
--
@@ -114,8 +115,8 @@
local result = { }
return result
end
-
-
+
+
--
-- Decorate defines for the command line.
@@ -130,7 +131,7 @@
end
-
+
--
-- Decorate include file search paths for the command line.
--
diff --git a/3rdparty/genie/src/tools/snc.lua b/3rdparty/genie/src/tools/snc.lua
index 1731115fda0..455ef3847dc 100644
--- a/3rdparty/genie/src/tools/snc.lua
+++ b/3rdparty/genie/src/tools/snc.lua
@@ -4,9 +4,9 @@
-- Copyright (c) 2010 Jason Perkins and the Premake project
--
-
+
premake.snc = { }
-
+
-- TODO: Will cfg.system == "windows" ever be true for SNC? If
-- not, remove the conditional blocks that use this test.
@@ -18,16 +18,17 @@
premake.snc.cc = "snc"
premake.snc.cxx = "g++"
premake.snc.ar = "ar"
-
-
+
+
--
-- Translation of Premake flags into SNC flags
--
local cflags =
{
- ExtraWarnings = "-Xdiag=2",
- FatalWarnings = "-Xquit=2",
+ PedanticWarnings = "-Xdiag=2",
+ ExtraWarnings = "-Xdiag=2",
+ FatalWarnings = "-Xquit=2",
}
local cxxflags =
@@ -35,13 +36,13 @@
NoExceptions = "", -- No exceptions is the default in the SNC compiler.
NoRTTI = "-Xc-=rtti",
}
-
-
+
+
--
-- Map platforms to flags
--
- premake.snc.platforms =
+ premake.snc.platforms =
{
PS3 = {
cc = "ppu-lv2-g++",
@@ -52,7 +53,7 @@
}
local platforms = premake.snc.platforms
-
+
--
-- Returns a list of compiler flags, based on the supplied configuration.
@@ -70,15 +71,15 @@
if cfg.kind == "SharedLib" then
table.insert(result, "-fPIC")
end
-
- return result
+
+ return result
end
-
+
function premake.snc.getcxxflags(cfg)
local result = table.translate(cfg.flags, cxxflags)
return result
end
-
+
--
@@ -87,29 +88,29 @@
function premake.snc.getldflags(cfg)
local result = { }
-
+
if not cfg.flags.Symbols then
table.insert(result, "-s")
end
-
+
if cfg.kind == "SharedLib" then
- table.insert(result, "-shared")
+ table.insert(result, "-shared")
if not cfg.flags.NoImportLib then
table.insert(result, '-Wl,--out-implib="' .. cfg.linktarget.fullpath .. '"')
end
end
-
+
local platform = platforms[cfg.platform]
table.insert(result, platform.flags)
table.insert(result, platform.ldflags)
-
+
return result
end
-
+
--
-- Return a list of library search paths. Technically part of LDFLAGS but need to
--- be separated because of the way Visual Studio calls SNC for the PS3. See bug
+-- be separated because of the way Visual Studio calls SNC for the PS3. See bug
-- #1729227 for background on why library paths must be split.
--
@@ -120,7 +121,7 @@
end
return result
end
-
+
--
-- Returns a list of project-relative paths to external library files.
@@ -136,8 +137,8 @@
end
--
- -- This is poorly named: returns a list of linker flags for external
- -- (i.e. system, or non-sibling) libraries. See bug #1729227 for
+ -- This is poorly named: returns a list of linker flags for external
+ -- (i.e. system, or non-sibling) libraries. See bug #1729227 for
-- background on why the path must be split.
--
@@ -148,8 +149,8 @@
end
return result
end
-
-
+
+
--
-- Decorate defines for the SNC command line.
@@ -164,7 +165,7 @@
end
-
+
--
-- Decorate include file search paths for the SNC command line.
--
diff --git a/bgfx/shaders/dx11/chains/blurs/fs_smart-blur.bin b/bgfx/shaders/dx11/chains/blurs/fs_smart-blur.bin
index a7bb984a12a..480e20df5aa 100644
--- a/bgfx/shaders/dx11/chains/blurs/fs_smart-blur.bin
+++ b/bgfx/shaders/dx11/chains/blurs/fs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/dx11/chains/blurs/vs_smart-blur.bin
index 5b037b2bfe8..7c5606c916c 100644
--- a/bgfx/shaders/dx11/chains/blurs/vs_smart-blur.bin
+++ b/bgfx/shaders/dx11/chains/blurs/vs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom-deluxe.bin
index 1e91cd50893..66f4713a405 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom-deluxe.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom-deluxe.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom.bin
index 4d4fa77e41f..21150820122 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/fs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_gaussx.bin
index c6f2bb3cbe7..4bde64c7baf 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/fs_gaussx.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/fs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_gaussy.bin
index d0e3b33f647..401f98359d8 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/fs_gaussy.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/fs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_apply.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_apply.bin
index 51f7110a4dc..7c82ae1071c 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_apply.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_update.bin b/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_update.bin
index ac5014661b4..2952683eeb4 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_update.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/fs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/vs_crt-geom.bin b/bgfx/shaders/dx11/chains/crt-geom/vs_crt-geom.bin
index 00f36ed736d..747d06c2054 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/vs_crt-geom.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/vs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/dx11/chains/crt-geom/vs_gaussx.bin
index fb6dc5e2aa2..80ad9410fbc 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/vs_gaussx.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/vs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/dx11/chains/crt-geom/vs_gaussy.bin
index a0acbeb0800..9992ad17f48 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/vs_gaussy.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/vs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_apply.bin b/bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_apply.bin
index 6797da332d9..8b2e1dac1b8 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_apply.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_update.bin b/bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_update.bin
index 6797da332d9..8b2e1dac1b8 100644
--- a/bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_update.bin
+++ b/bgfx/shaders/dx11/chains/crt-geom/vs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt/fs_crt-caligari.bin b/bgfx/shaders/dx11/chains/crt/fs_crt-caligari.bin
index 4a28e2df9d4..0f2700593e2 100644
--- a/bgfx/shaders/dx11/chains/crt/fs_crt-caligari.bin
+++ b/bgfx/shaders/dx11/chains/crt/fs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/crt/vs_crt-caligari.bin b/bgfx/shaders/dx11/chains/crt/vs_crt-caligari.bin
index a77f940d6f7..df8be0c8d65 100644
--- a/bgfx/shaders/dx11/chains/crt/vs_crt-caligari.bin
+++ b/bgfx/shaders/dx11/chains/crt/vs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/default/fs_blit.bin b/bgfx/shaders/dx11/chains/default/fs_blit.bin
index 80d85fb1107..c73f029b4bb 100644
--- a/bgfx/shaders/dx11/chains/default/fs_blit.bin
+++ b/bgfx/shaders/dx11/chains/default/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/default/vs_blit.bin b/bgfx/shaders/dx11/chains/default/vs_blit.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/default/vs_blit.bin
+++ b/bgfx/shaders/dx11/chains/default/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/eagle/fs_eagle.bin b/bgfx/shaders/dx11/chains/eagle/fs_eagle.bin
index 085fbc010d6..fac20af0682 100644
--- a/bgfx/shaders/dx11/chains/eagle/fs_eagle.bin
+++ b/bgfx/shaders/dx11/chains/eagle/fs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/eagle/vs_eagle.bin b/bgfx/shaders/dx11/chains/eagle/vs_eagle.bin
index d4773f1abdf..03369b26b36 100644
--- a/bgfx/shaders/dx11/chains/eagle/vs_eagle.bin
+++ b/bgfx/shaders/dx11/chains/eagle/vs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_color.bin b/bgfx/shaders/dx11/chains/hlsl/fs_color.bin
index e70c00970e0..8785c5d9f78 100644
--- a/bgfx/shaders/dx11/chains/hlsl/fs_color.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_deconverge.bin b/bgfx/shaders/dx11/chains/hlsl/fs_deconverge.bin
index 6409659a035..19fb7397184 100644
--- a/bgfx/shaders/dx11/chains/hlsl/fs_deconverge.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/fs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_defocus.bin b/bgfx/shaders/dx11/chains/hlsl/fs_defocus.bin
index 7459dabdcac..ac75d27b43c 100644
--- a/bgfx/shaders/dx11/chains/hlsl/fs_defocus.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/fs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_distortion.bin b/bgfx/shaders/dx11/chains/hlsl/fs_distortion.bin
index 2c3c3418331..ae674619f5e 100644
--- a/bgfx/shaders/dx11/chains/hlsl/fs_distortion.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/fs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_ntsc_decode.bin b/bgfx/shaders/dx11/chains/hlsl/fs_ntsc_decode.bin
index ded01d9cefa..ce25750f7db 100644
--- a/bgfx/shaders/dx11/chains/hlsl/fs_ntsc_decode.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_ntsc_encode.bin b/bgfx/shaders/dx11/chains/hlsl/fs_ntsc_encode.bin
index 805958817ab..8a0c8afed62 100644
--- a/bgfx/shaders/dx11/chains/hlsl/fs_ntsc_encode.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/fs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_phosphor.bin b/bgfx/shaders/dx11/chains/hlsl/fs_phosphor.bin
index aedfd3dead3..affa983f920 100644
--- a/bgfx/shaders/dx11/chains/hlsl/fs_phosphor.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/fs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_post.bin b/bgfx/shaders/dx11/chains/hlsl/fs_post.bin
index 60b08cf3043..913cbd52afa 100644
--- a/bgfx/shaders/dx11/chains/hlsl/fs_post.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/fs_post.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_prescale.bin b/bgfx/shaders/dx11/chains/hlsl/fs_prescale.bin
index 80d85fb1107..c73f029b4bb 100644
--- a/bgfx/shaders/dx11/chains/hlsl/fs_prescale.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/fs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/vs_color.bin b/bgfx/shaders/dx11/chains/hlsl/vs_color.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/hlsl/vs_color.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/vs_deconverge.bin b/bgfx/shaders/dx11/chains/hlsl/vs_deconverge.bin
index d7604280bc2..cb09c52a296 100644
--- a/bgfx/shaders/dx11/chains/hlsl/vs_deconverge.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/vs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/vs_defocus.bin b/bgfx/shaders/dx11/chains/hlsl/vs_defocus.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/hlsl/vs_defocus.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/vs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/vs_distortion.bin b/bgfx/shaders/dx11/chains/hlsl/vs_distortion.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/hlsl/vs_distortion.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/vs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/vs_ntsc_decode.bin b/bgfx/shaders/dx11/chains/hlsl/vs_ntsc_decode.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/hlsl/vs_ntsc_decode.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/vs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/vs_ntsc_encode.bin b/bgfx/shaders/dx11/chains/hlsl/vs_ntsc_encode.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/hlsl/vs_ntsc_encode.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/vs_phosphor.bin b/bgfx/shaders/dx11/chains/hlsl/vs_phosphor.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/hlsl/vs_phosphor.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/vs_post.bin b/bgfx/shaders/dx11/chains/hlsl/vs_post.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/hlsl/vs_post.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/vs_post.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hlsl/vs_prescale.bin b/bgfx/shaders/dx11/chains/hlsl/vs_prescale.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/hlsl/vs_prescale.bin
+++ b/bgfx/shaders/dx11/chains/hlsl/vs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hqx/fs_hq2x.bin b/bgfx/shaders/dx11/chains/hqx/fs_hq2x.bin
index cdce652045f..c14074ee7bf 100644
--- a/bgfx/shaders/dx11/chains/hqx/fs_hq2x.bin
+++ b/bgfx/shaders/dx11/chains/hqx/fs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hqx/fs_hq3x.bin b/bgfx/shaders/dx11/chains/hqx/fs_hq3x.bin
index 29d6a5c2c3d..0b8726d89fb 100644
--- a/bgfx/shaders/dx11/chains/hqx/fs_hq3x.bin
+++ b/bgfx/shaders/dx11/chains/hqx/fs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hqx/fs_hq4x.bin b/bgfx/shaders/dx11/chains/hqx/fs_hq4x.bin
index 7ebeaab6cd7..c93aefd4f7c 100644
--- a/bgfx/shaders/dx11/chains/hqx/fs_hq4x.bin
+++ b/bgfx/shaders/dx11/chains/hqx/fs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hqx/vs_hq2x.bin b/bgfx/shaders/dx11/chains/hqx/vs_hq2x.bin
index 5b037b2bfe8..7c5606c916c 100644
--- a/bgfx/shaders/dx11/chains/hqx/vs_hq2x.bin
+++ b/bgfx/shaders/dx11/chains/hqx/vs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hqx/vs_hq3x.bin b/bgfx/shaders/dx11/chains/hqx/vs_hq3x.bin
index 5b037b2bfe8..7c5606c916c 100644
--- a/bgfx/shaders/dx11/chains/hqx/vs_hq3x.bin
+++ b/bgfx/shaders/dx11/chains/hqx/vs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/hqx/vs_hq4x.bin b/bgfx/shaders/dx11/chains/hqx/vs_hq4x.bin
index 5b037b2bfe8..7c5606c916c 100644
--- a/bgfx/shaders/dx11/chains/hqx/vs_hq4x.bin
+++ b/bgfx/shaders/dx11/chains/hqx/vs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/fs_blit.bin b/bgfx/shaders/dx11/chains/misc/fs_blit.bin
index 80d85fb1107..c73f029b4bb 100644
--- a/bgfx/shaders/dx11/chains/misc/fs_blit.bin
+++ b/bgfx/shaders/dx11/chains/misc/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/fs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/dx11/chains/misc/fs_bob-and-ghost-deinterlace.bin
index 1d599087b33..170e73c047d 100644
--- a/bgfx/shaders/dx11/chains/misc/fs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/dx11/chains/misc/fs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/fs_deposterize-pass0.bin b/bgfx/shaders/dx11/chains/misc/fs_deposterize-pass0.bin
index 264bfbbb9b6..1adbb9761e7 100644
--- a/bgfx/shaders/dx11/chains/misc/fs_deposterize-pass0.bin
+++ b/bgfx/shaders/dx11/chains/misc/fs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/fs_deposterize-pass1.bin b/bgfx/shaders/dx11/chains/misc/fs_deposterize-pass1.bin
index 1aa8b286236..bbf50cbde63 100644
--- a/bgfx/shaders/dx11/chains/misc/fs_deposterize-pass1.bin
+++ b/bgfx/shaders/dx11/chains/misc/fs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/fs_saturation.bin b/bgfx/shaders/dx11/chains/misc/fs_saturation.bin
index eaec59b81d7..1a640d1441c 100644
--- a/bgfx/shaders/dx11/chains/misc/fs_saturation.bin
+++ b/bgfx/shaders/dx11/chains/misc/fs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/vs_blit.bin b/bgfx/shaders/dx11/chains/misc/vs_blit.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/misc/vs_blit.bin
+++ b/bgfx/shaders/dx11/chains/misc/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/vs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/dx11/chains/misc/vs_bob-and-ghost-deinterlace.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/misc/vs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/dx11/chains/misc/vs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/dx11/chains/misc/vs_deposterize-pass0.bin
index 857914316fc..35813de1abd 100644
--- a/bgfx/shaders/dx11/chains/misc/vs_deposterize-pass0.bin
+++ b/bgfx/shaders/dx11/chains/misc/vs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/dx11/chains/misc/vs_deposterize-pass1.bin
index a35757d8e79..19dbb7c94c8 100644
--- a/bgfx/shaders/dx11/chains/misc/vs_deposterize-pass1.bin
+++ b/bgfx/shaders/dx11/chains/misc/vs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/misc/vs_saturation.bin b/bgfx/shaders/dx11/chains/misc/vs_saturation.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/misc/vs_saturation.bin
+++ b/bgfx/shaders/dx11/chains/misc/vs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_gaussian.bin b/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_gaussian.bin
index 753b0d31bff..6c4c0d96505 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_offset_sat.bin b/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_offset_sat.bin
index eaec59b81d7..1a640d1441c 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_gaussian.bin b/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_gaussian.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_offset_sat.bin b/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_offset_sat.bin
index 8d21d98385a..b4175623a37 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_left_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_gaussian.bin b/bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_gaussian.bin
index 753b0d31bff..6c4c0d96505 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_offset_sat.bin b/bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_offset_sat.bin
index eaec59b81d7..1a640d1441c 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_left_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_gaussian.bin b/bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_gaussian.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_offset_sat.bin b/bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_offset_sat.bin
index 7a3bdff1a98..e6e67d2008a 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_left_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_gaussian.bin b/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_gaussian.bin
index 753b0d31bff..6c4c0d96505 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_offset_sat.bin b/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_offset_sat.bin
index eaec59b81d7..1a640d1441c 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_gaussian.bin b/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_gaussian.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_offset_sat.bin b/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_offset_sat.bin
index cde2b1546aa..80efbac0dfb 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_right_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_gaussian.bin b/bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_gaussian.bin
index 753b0d31bff..6c4c0d96505 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_offset_sat.bin b/bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_offset_sat.bin
index eaec59b81d7..1a640d1441c 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_right_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_gaussian.bin b/bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_gaussian.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_offset_sat.bin b/bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_offset_sat.bin
index ce4ae1dd5c7..1c435fda8ca 100644
--- a/bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/dx11/chains/pillarbox_right_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/unfiltered/fs_blit.bin b/bgfx/shaders/dx11/chains/unfiltered/fs_blit.bin
index 80d85fb1107..c73f029b4bb 100644
--- a/bgfx/shaders/dx11/chains/unfiltered/fs_blit.bin
+++ b/bgfx/shaders/dx11/chains/unfiltered/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/unfiltered/vs_blit.bin b/bgfx/shaders/dx11/chains/unfiltered/vs_blit.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/unfiltered/vs_blit.bin
+++ b/bgfx/shaders/dx11/chains/unfiltered/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/dx11/chains/warp/fs_dilation-horizontal-fast.bin
index b3315773ebb..a00bf6dff75 100644
--- a/bgfx/shaders/dx11/chains/warp/fs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/dx11/chains/warp/fs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/warp/vs_dilation-horizontal-fast.bin b/bgfx/shaders/dx11/chains/warp/vs_dilation-horizontal-fast.bin
index 40d4899cda1..38506b4d53c 100644
--- a/bgfx/shaders/dx11/chains/warp/vs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/dx11/chains/warp/vs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv1-noblend.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv1-noblend.bin
index 1bb404e2c90..26dfd83d5a6 100644
--- a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-3d.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-3d.bin
index 60cd601bb67..1bcc08c62f3 100644
--- a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-fast.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-fast.bin
index 81e60bd278b..053f1f839da 100644
--- a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-noblend.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-noblend.bin
index aba34b863c8..fb8f7144e54 100644
--- a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2.bin
index eb0889524ef..9b7f89473d3 100644
--- a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3-noblend.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3-noblend.bin
index d4bc94a4e7a..ca610ff2167 100644
--- a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3.bin b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3.bin
index 1d89ff9dc03..fe14713cd35 100644
--- a/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3.bin
+++ b/bgfx/shaders/dx11/chains/xbr/fs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
index 2b20345d324..58a5a814c0e 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
index e9f036afa78..89ecbaabd29 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
index a5c002c6cd2..3d35e575b8b 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
index c4602858022..89c87ed6f08 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
index e6032b15b53..e7d912e9cfa 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
index 4adf8dd729c..a32876ca7c6 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
index e2deb08ba10..72d54075b2d 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
index e9f036afa78..89ecbaabd29 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
index a5c002c6cd2..3d35e575b8b 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
index c4602858022..89c87ed6f08 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
index 5a92a7f2520..da02e50f72d 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
index 15dbf7dc5c1..b76c1f49d53 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
index 195330767b5..e82a3ee71c4 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass0.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
index 1db02710c90..7c701e07e23 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass1.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
index 3624fe72f40..02cdcb4f5e7 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass2.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
index 676ff1da0b5..e0beb49dbd5 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
index bc112796493..ceb39790ada 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
index bc112796493..ceb39790ada 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
index bc112796493..ceb39790ada 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass0.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
index 5e66024f1eb..e1e4f18ccc5 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass1.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass2.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
index bc112796493..ceb39790ada 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass3.bin b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
index bc112796493..ceb39790ada 100644
--- a/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
+++ b/bgfx/shaders/dx11/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv1-noblend.bin b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv1-noblend.bin
index 482a0ead8fd..3d7ade6634d 100644
--- a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-3d.bin b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-3d.bin
index fcd71edc655..ca654cbb966 100644
--- a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-fast.bin b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-fast.bin
index 5b037b2bfe8..7c5606c916c 100644
--- a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-noblend.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2.bin b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3-noblend.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3.bin
+++ b/bgfx/shaders/dx11/chains/xbr/vs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
index 6149394b1cd..97627fd8126 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
index c69cdcbb1ae..799b1919ada 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
index 464db7ce0ed..cc88bfedbcf 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
index 565ff37ece7..827978925da 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
index 58488796cd8..a327fc2af55 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
index c54807facf3..2d3677339a0 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
index 217f7202faa..3f01cbf7079 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
index 846d9599139..1fc22aaddbd 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
index 13e720c9264..8d256803080 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
index de6b1c2efc1..9cdf04ca71b 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
index 72dd22dd336..c957d99ab06 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
index 50419be6c4b..33de14badca 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
index c8aa8bd5a65..a09ab386574 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
index ecfab5f3203..d35b93d0096 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
index dde6ea10a5c..b4c72adfa03 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
index 2d70e802834..f9eb3e0aa4b 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
index 3002f050eca..3fe8897263e 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
index 3002f050eca..3fe8897263e 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
index 3002f050eca..3fe8897263e 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
index 7d83dba6a69..adc8319b788 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
index 0dec7034df8..5f366303c82 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
index 862b9eb121a..613c94d3ad2 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
index 28df089c632..1e06482d00c 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
index b71d06f700f..eb7640e45c8 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
index 7301c4ed418..cc9368df121 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
index dd768fbf3b5..e5413342d9b 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
index e31a9926885..d8e0adc5c99 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
index f4fe0e66cca..c3e1bbfc172 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
index 580b2536471..946fa5458c9 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
index 580b2536471..946fa5458c9 100644
--- a/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/dx11/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_gui.bin b/bgfx/shaders/dx11/fs_gui.bin
index 80d85fb1107..c73f029b4bb 100644
--- a/bgfx/shaders/dx11/fs_gui.bin
+++ b/bgfx/shaders/dx11/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/fs_screen.bin b/bgfx/shaders/dx11/fs_screen.bin
index 80d85fb1107..c73f029b4bb 100644
--- a/bgfx/shaders/dx11/fs_screen.bin
+++ b/bgfx/shaders/dx11/fs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_gui.bin b/bgfx/shaders/dx11/vs_gui.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/vs_gui.bin
+++ b/bgfx/shaders/dx11/vs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/dx11/vs_screen.bin b/bgfx/shaders/dx11/vs_screen.bin
index b0bebf9da4c..d97141ff5f2 100644
--- a/bgfx/shaders/dx11/vs_screen.bin
+++ b/bgfx/shaders/dx11/vs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/blurs/fs_smart-blur.bin b/bgfx/shaders/dx9/chains/blurs/fs_smart-blur.bin
index 15b190e62a2..4ab5181bced 100644
--- a/bgfx/shaders/dx9/chains/blurs/fs_smart-blur.bin
+++ b/bgfx/shaders/dx9/chains/blurs/fs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin
index 377bfbc3c2d..676cd025dec 100644
--- a/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin
+++ b/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom-deluxe.bin
index ef3976f44b0..c8086f81265 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom-deluxe.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom-deluxe.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin
index 05aaa9f7e4c..ad94082e6d7 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_gaussx.bin
index bdb39172c33..377e1f60672 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/fs_gaussx.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/fs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin
index 7c5bc439ce8..14ce6690bf5 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_apply.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_apply.bin
index 17230ddc8a9..1fb77c5c7b5 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_apply.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_update.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_update.bin
index d0ba05e36cb..433244a524c 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_update.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin
index 36c933e9717..65f523fc5c8 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_gaussx.bin
index 727d93d6405..5d8c472caac 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/vs_gaussx.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/vs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_gaussy.bin
index 4a579425b7b..08e1de548a7 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/vs_gaussy.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/vs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin
index c9d8ff66ade..6227de6d0ee 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin
index c9d8ff66ade..6227de6d0ee 100644
--- a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin
+++ b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt/fs_crt-caligari.bin b/bgfx/shaders/dx9/chains/crt/fs_crt-caligari.bin
index 3d8ec4bbc8d..5f63b625787 100644
--- a/bgfx/shaders/dx9/chains/crt/fs_crt-caligari.bin
+++ b/bgfx/shaders/dx9/chains/crt/fs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/crt/vs_crt-caligari.bin b/bgfx/shaders/dx9/chains/crt/vs_crt-caligari.bin
index 557e8e334be..847d6aa4a2f 100644
--- a/bgfx/shaders/dx9/chains/crt/vs_crt-caligari.bin
+++ b/bgfx/shaders/dx9/chains/crt/vs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/default/fs_blit.bin b/bgfx/shaders/dx9/chains/default/fs_blit.bin
index f66f62415b5..88b40ce3b16 100644
--- a/bgfx/shaders/dx9/chains/default/fs_blit.bin
+++ b/bgfx/shaders/dx9/chains/default/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/default/vs_blit.bin b/bgfx/shaders/dx9/chains/default/vs_blit.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/default/vs_blit.bin
+++ b/bgfx/shaders/dx9/chains/default/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/eagle/fs_eagle.bin b/bgfx/shaders/dx9/chains/eagle/fs_eagle.bin
index 2b1f3e81678..f63a486aca5 100644
--- a/bgfx/shaders/dx9/chains/eagle/fs_eagle.bin
+++ b/bgfx/shaders/dx9/chains/eagle/fs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/eagle/vs_eagle.bin b/bgfx/shaders/dx9/chains/eagle/vs_eagle.bin
index 24ff4189204..e1d42bd1e1e 100644
--- a/bgfx/shaders/dx9/chains/eagle/vs_eagle.bin
+++ b/bgfx/shaders/dx9/chains/eagle/vs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_color.bin b/bgfx/shaders/dx9/chains/hlsl/fs_color.bin
index 678416acf92..a18e1172202 100644
--- a/bgfx/shaders/dx9/chains/hlsl/fs_color.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_deconverge.bin b/bgfx/shaders/dx9/chains/hlsl/fs_deconverge.bin
index 58a53f099d2..0ab6394acd5 100644
--- a/bgfx/shaders/dx9/chains/hlsl/fs_deconverge.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/fs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_defocus.bin b/bgfx/shaders/dx9/chains/hlsl/fs_defocus.bin
index c14f1574af3..a515b5848fb 100644
--- a/bgfx/shaders/dx9/chains/hlsl/fs_defocus.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/fs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin b/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin
index b3c716df99e..d51e155c845 100644
--- a/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_decode.bin b/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_decode.bin
index 5fd29e8f5a6..8e56468b860 100644
--- a/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_decode.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_encode.bin b/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_encode.bin
index 0a27c1edcea..5187e2552ce 100644
--- a/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_encode.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_phosphor.bin b/bgfx/shaders/dx9/chains/hlsl/fs_phosphor.bin
index 7cdf7e686a9..98921deabc5 100644
--- a/bgfx/shaders/dx9/chains/hlsl/fs_phosphor.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/fs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_post.bin b/bgfx/shaders/dx9/chains/hlsl/fs_post.bin
index 31377efe8c7..4d6c83c7559 100644
--- a/bgfx/shaders/dx9/chains/hlsl/fs_post.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/fs_post.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_prescale.bin b/bgfx/shaders/dx9/chains/hlsl/fs_prescale.bin
index f66f62415b5..88b40ce3b16 100644
--- a/bgfx/shaders/dx9/chains/hlsl/fs_prescale.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/fs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_color.bin b/bgfx/shaders/dx9/chains/hlsl/vs_color.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/hlsl/vs_color.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_deconverge.bin b/bgfx/shaders/dx9/chains/hlsl/vs_deconverge.bin
index 53984f1f26d..4d967273115 100644
--- a/bgfx/shaders/dx9/chains/hlsl/vs_deconverge.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/vs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin b/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_distortion.bin b/bgfx/shaders/dx9/chains/hlsl/vs_distortion.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/hlsl/vs_distortion.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/vs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_decode.bin b/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_decode.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_decode.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_encode.bin b/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_encode.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_encode.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_phosphor.bin b/bgfx/shaders/dx9/chains/hlsl/vs_phosphor.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/hlsl/vs_phosphor.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_post.bin b/bgfx/shaders/dx9/chains/hlsl/vs_post.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/hlsl/vs_post.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/vs_post.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_prescale.bin b/bgfx/shaders/dx9/chains/hlsl/vs_prescale.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/hlsl/vs_prescale.bin
+++ b/bgfx/shaders/dx9/chains/hlsl/vs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin b/bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin
index 16ea8fbd6c5..6de1adabc7e 100644
--- a/bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin
+++ b/bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin b/bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin
index 5fbbfcac454..0d56fc295dc 100644
--- a/bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin
+++ b/bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin b/bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin
index 61414e50dbb..8a4aa5698ed 100644
--- a/bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin
+++ b/bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin
index 377bfbc3c2d..676cd025dec 100644
--- a/bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin
+++ b/bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin
index 377bfbc3c2d..676cd025dec 100644
--- a/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin
+++ b/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin
index 377bfbc3c2d..676cd025dec 100644
--- a/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin
+++ b/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/fs_blit.bin b/bgfx/shaders/dx9/chains/misc/fs_blit.bin
index f66f62415b5..88b40ce3b16 100644
--- a/bgfx/shaders/dx9/chains/misc/fs_blit.bin
+++ b/bgfx/shaders/dx9/chains/misc/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/fs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/dx9/chains/misc/fs_bob-and-ghost-deinterlace.bin
index 3ec84814aa9..68ec11b9afb 100644
--- a/bgfx/shaders/dx9/chains/misc/fs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/dx9/chains/misc/fs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass0.bin b/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass0.bin
index 4ef2fa92cda..7a8f9ba1abe 100644
--- a/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass0.bin
+++ b/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass1.bin b/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass1.bin
index d1910084a74..b3760f3d1b2 100644
--- a/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass1.bin
+++ b/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/fs_saturation.bin b/bgfx/shaders/dx9/chains/misc/fs_saturation.bin
index 245d75a425c..a37e74b6b82 100644
--- a/bgfx/shaders/dx9/chains/misc/fs_saturation.bin
+++ b/bgfx/shaders/dx9/chains/misc/fs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/vs_blit.bin b/bgfx/shaders/dx9/chains/misc/vs_blit.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/misc/vs_blit.bin
+++ b/bgfx/shaders/dx9/chains/misc/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/vs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/dx9/chains/misc/vs_bob-and-ghost-deinterlace.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/misc/vs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/dx9/chains/misc/vs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass0.bin
index 6a62a9444a0..b8971db972a 100644
--- a/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass0.bin
+++ b/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin
index edc64925c27..9bfd68980bc 100644
--- a/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin
+++ b/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/vs_saturation.bin b/bgfx/shaders/dx9/chains/misc/vs_saturation.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/misc/vs_saturation.bin
+++ b/bgfx/shaders/dx9/chains/misc/vs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_gaussian.bin
index d6217975cbe..af936b3b150 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_offset_sat.bin
index 245d75a425c..a37e74b6b82 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_gaussian.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_offset_sat.bin
index 2af6a1cf674..2ec0cf9686a 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_gaussian.bin
index d6217975cbe..af936b3b150 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_offset_sat.bin
index 245d75a425c..a37e74b6b82 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_offset_sat.bin
index bb382663de9..b397d76f428 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_gaussian.bin
index d6217975cbe..af936b3b150 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_offset_sat.bin
index 245d75a425c..a37e74b6b82 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_offset_sat.bin
index 730a75702f9..0187f45b131 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_gaussian.bin
index d6217975cbe..af936b3b150 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_offset_sat.bin
index 245d75a425c..a37e74b6b82 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_offset_sat.bin
index d9b06211b3f..8d21fcc0feb 100644
--- a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/unfiltered/fs_blit.bin b/bgfx/shaders/dx9/chains/unfiltered/fs_blit.bin
index f66f62415b5..88b40ce3b16 100644
--- a/bgfx/shaders/dx9/chains/unfiltered/fs_blit.bin
+++ b/bgfx/shaders/dx9/chains/unfiltered/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin b/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin
+++ b/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.bin
index 1da9ac3c2aa..46c1cef5104 100644
--- a/bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.bin b/bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.bin
index 6443f74baa9..886d4ef124f 100644
--- a/bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv1-noblend.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv1-noblend.bin
index 57021335a60..0ee4dcda1a6 100644
--- a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-3d.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-3d.bin
index 22aa4d95861..2150cf0371a 100644
--- a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-fast.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-fast.bin
index 5eb4c7d62c1..dd3a3da7ffb 100644
--- a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.bin
index a66673f03f5..48a0bda2043 100644
--- a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2.bin
index f2dbf48200a..899a715d8a8 100644
--- a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.bin
index 259a40612a3..3b6e17627d5 100644
--- a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin
index 6bbad16b288..c749a50a5f6 100644
--- a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin
+++ b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
index c71b0a6a573..10132d09100 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
index cd007f6a3d2..8b7dd426cf0 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
index 77321f29e98..05a10e633bc 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
index 43b4cde7342..9a84ec89c05 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
index e0b79e3f63a..6f0a7e67dfe 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
index 1abd100f303..3d84320ef17 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
index 5c21575c5e1..1e478736b4d 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
index cd007f6a3d2..8b7dd426cf0 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
index ef64f27d31f..d3177b86f47 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
index 43b4cde7342..9a84ec89c05 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
index e7e92f5e3e0..375c07f8d83 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
index 2e00ef9b7eb..f584eb54574 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
index cd31c0e129e..12b08beb86d 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
index 5bdb3e128b0..f16baa28e2a 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
index ddd1f714bf9..98147e72e9f 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
index b70a8df3435..ef27697d1a0 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
index 588d7e46cbe..a1574481bd5 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
index 588d7e46cbe..a1574481bd5 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
index 588d7e46cbe..a1574481bd5 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
index 4796e8501e2..564b0a0be27 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
index 588d7e46cbe..a1574481bd5 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
index 588d7e46cbe..a1574481bd5 100644
--- a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
+++ b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin
index 925058d93b8..f17d4b32aa0 100644
--- a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin
index 5bccc4d8c98..6ac3dfde729 100644
--- a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin
index 377bfbc3c2d..676cd025dec 100644
--- a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin
+++ b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
index 24a27609a31..97b2f91aded 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
index 30a4c55b65f..51110265177 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
index c7cc2fc82a1..61e8d7a9acb 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
index 9e2550f57ec..ff8604178b7 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
index a6c19ad3e8f..412f1c464e6 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
index 225a9b5153a..31fd926a1d4 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
index 1502bb2e616..77864d33a17 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
index 88468d9d426..7172692f427 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
index f166b9b7280..b9a59bda8d9 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
index e25fe757422..fb61c3dd184 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
index d65050a8c2d..f3c038be44e 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
index 99e20dca476..5d7430a8eb7 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
index 6b64b65abf1..eb80deb0726 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
index e8e5f7a63ef..9bb15a3f837 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
index 9be14713aac..15a07aa1b20 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
index 5671ca9d779..4a7ce6fff92 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
index 883aef80923..37805557074 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
index 883aef80923..37805557074 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
index 883aef80923..37805557074 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
index 86d2d2370ab..5e23a0ed9d2 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
index ea423d79d5f..c9856b1bde3 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
index 194216a1bd4..8e5afeeb43e 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
index 906f9bba449..c6f6136b00f 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
index b4bf9e05f72..7730907228a 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
index 5ff71edeabb..ea209fd8ef4 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
index c289df02b91..1b151449b52 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
index abfa3c30897..cf4f2c89bc9 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
index 54fe076a487..de665b2a2b8 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
index f9cb26d2be0..356a068a522 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
index f9cb26d2be0..356a068a522 100644
--- a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_gui.bin b/bgfx/shaders/dx9/fs_gui.bin
index f66f62415b5..88b40ce3b16 100644
--- a/bgfx/shaders/dx9/fs_gui.bin
+++ b/bgfx/shaders/dx9/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/fs_screen.bin b/bgfx/shaders/dx9/fs_screen.bin
index f66f62415b5..88b40ce3b16 100644
--- a/bgfx/shaders/dx9/fs_screen.bin
+++ b/bgfx/shaders/dx9/fs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_gui.bin b/bgfx/shaders/dx9/vs_gui.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/vs_gui.bin
+++ b/bgfx/shaders/dx9/vs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/vs_screen.bin b/bgfx/shaders/dx9/vs_screen.bin
index 84f72cdd03c..923fba0a293 100644
--- a/bgfx/shaders/dx9/vs_screen.bin
+++ b/bgfx/shaders/dx9/vs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/blurs/fs_smart-blur.bin b/bgfx/shaders/essl/chains/blurs/fs_smart-blur.bin
index a4c15606155..d62da4214be 100644
--- a/bgfx/shaders/essl/chains/blurs/fs_smart-blur.bin
+++ b/bgfx/shaders/essl/chains/blurs/fs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/essl/chains/blurs/vs_smart-blur.bin
index 2d62e84953e..de52b2eeaf0 100644
--- a/bgfx/shaders/essl/chains/blurs/vs_smart-blur.bin
+++ b/bgfx/shaders/essl/chains/blurs/vs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom-deluxe.bin
index 166388d7a7c..7d241245382 100644
--- a/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom-deluxe.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom-deluxe.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom.bin
index 20ffe658385..b5fa9b6d764 100644
--- a/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/essl/chains/crt-geom/fs_gaussx.bin
index 691c710fd68..2b1820600e7 100644
--- a/bgfx/shaders/essl/chains/crt-geom/fs_gaussx.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/fs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/essl/chains/crt-geom/fs_gaussy.bin
index 988fc387f7d..8fc1c2f2110 100644
--- a/bgfx/shaders/essl/chains/crt-geom/fs_gaussy.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/fs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_phosphor_apply.bin b/bgfx/shaders/essl/chains/crt-geom/fs_phosphor_apply.bin
index becc53dbbe3..273cb6f0256 100644
--- a/bgfx/shaders/essl/chains/crt-geom/fs_phosphor_apply.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/fs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_phosphor_update.bin b/bgfx/shaders/essl/chains/crt-geom/fs_phosphor_update.bin
index 7e5f4e96765..549d4b66e00 100644
--- a/bgfx/shaders/essl/chains/crt-geom/fs_phosphor_update.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/fs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/vs_crt-geom.bin b/bgfx/shaders/essl/chains/crt-geom/vs_crt-geom.bin
index d245ebe9b2a..f7a9f16d9f9 100644
--- a/bgfx/shaders/essl/chains/crt-geom/vs_crt-geom.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/vs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/essl/chains/crt-geom/vs_gaussx.bin
index f6c00846bc4..c17ac0ab27d 100644
--- a/bgfx/shaders/essl/chains/crt-geom/vs_gaussx.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/vs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/essl/chains/crt-geom/vs_gaussy.bin
index 38d918884fb..3bdd6dc25d3 100644
--- a/bgfx/shaders/essl/chains/crt-geom/vs_gaussy.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/vs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/vs_phosphor_apply.bin b/bgfx/shaders/essl/chains/crt-geom/vs_phosphor_apply.bin
index 73a140fcc40..ae407612aee 100644
--- a/bgfx/shaders/essl/chains/crt-geom/vs_phosphor_apply.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/vs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt-geom/vs_phosphor_update.bin b/bgfx/shaders/essl/chains/crt-geom/vs_phosphor_update.bin
index 73a140fcc40..ae407612aee 100644
--- a/bgfx/shaders/essl/chains/crt-geom/vs_phosphor_update.bin
+++ b/bgfx/shaders/essl/chains/crt-geom/vs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt/fs_crt-caligari.bin b/bgfx/shaders/essl/chains/crt/fs_crt-caligari.bin
index 523acc795ef..e27965b3b64 100644
--- a/bgfx/shaders/essl/chains/crt/fs_crt-caligari.bin
+++ b/bgfx/shaders/essl/chains/crt/fs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/crt/vs_crt-caligari.bin b/bgfx/shaders/essl/chains/crt/vs_crt-caligari.bin
index 7e262c17691..b93a442a4bd 100644
--- a/bgfx/shaders/essl/chains/crt/vs_crt-caligari.bin
+++ b/bgfx/shaders/essl/chains/crt/vs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/default/fs_blit.bin b/bgfx/shaders/essl/chains/default/fs_blit.bin
index 22e2f0c23d0..3096cd5f45d 100644
--- a/bgfx/shaders/essl/chains/default/fs_blit.bin
+++ b/bgfx/shaders/essl/chains/default/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/default/vs_blit.bin b/bgfx/shaders/essl/chains/default/vs_blit.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/default/vs_blit.bin
+++ b/bgfx/shaders/essl/chains/default/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/eagle/fs_eagle.bin b/bgfx/shaders/essl/chains/eagle/fs_eagle.bin
index 76ba019d544..5c9aa9a3b51 100644
--- a/bgfx/shaders/essl/chains/eagle/fs_eagle.bin
+++ b/bgfx/shaders/essl/chains/eagle/fs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/eagle/vs_eagle.bin b/bgfx/shaders/essl/chains/eagle/vs_eagle.bin
index a67ebb5a044..3bf1e2dcafe 100644
--- a/bgfx/shaders/essl/chains/eagle/vs_eagle.bin
+++ b/bgfx/shaders/essl/chains/eagle/vs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/fs_color.bin b/bgfx/shaders/essl/chains/hlsl/fs_color.bin
index a0379220e9c..5377956c6d9 100644
--- a/bgfx/shaders/essl/chains/hlsl/fs_color.bin
+++ b/bgfx/shaders/essl/chains/hlsl/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/fs_deconverge.bin b/bgfx/shaders/essl/chains/hlsl/fs_deconverge.bin
index 855f8019b5c..daf1939b0ff 100644
--- a/bgfx/shaders/essl/chains/hlsl/fs_deconverge.bin
+++ b/bgfx/shaders/essl/chains/hlsl/fs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/fs_defocus.bin b/bgfx/shaders/essl/chains/hlsl/fs_defocus.bin
index ce6684682f7..2d05ded91cf 100644
--- a/bgfx/shaders/essl/chains/hlsl/fs_defocus.bin
+++ b/bgfx/shaders/essl/chains/hlsl/fs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/fs_distortion.bin b/bgfx/shaders/essl/chains/hlsl/fs_distortion.bin
index 6142d1c9568..55bddc845f7 100644
--- a/bgfx/shaders/essl/chains/hlsl/fs_distortion.bin
+++ b/bgfx/shaders/essl/chains/hlsl/fs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/fs_ntsc_decode.bin b/bgfx/shaders/essl/chains/hlsl/fs_ntsc_decode.bin
index d1e69f5e0e3..6475d1b7981 100644
--- a/bgfx/shaders/essl/chains/hlsl/fs_ntsc_decode.bin
+++ b/bgfx/shaders/essl/chains/hlsl/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/fs_ntsc_encode.bin b/bgfx/shaders/essl/chains/hlsl/fs_ntsc_encode.bin
index 539db74272f..1c9e70f1608 100644
--- a/bgfx/shaders/essl/chains/hlsl/fs_ntsc_encode.bin
+++ b/bgfx/shaders/essl/chains/hlsl/fs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/fs_phosphor.bin b/bgfx/shaders/essl/chains/hlsl/fs_phosphor.bin
index 067b1581379..3caef0bec22 100644
--- a/bgfx/shaders/essl/chains/hlsl/fs_phosphor.bin
+++ b/bgfx/shaders/essl/chains/hlsl/fs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/fs_post.bin b/bgfx/shaders/essl/chains/hlsl/fs_post.bin
index 3f4b0d6397c..a2beed2eb7a 100644
--- a/bgfx/shaders/essl/chains/hlsl/fs_post.bin
+++ b/bgfx/shaders/essl/chains/hlsl/fs_post.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/fs_prescale.bin b/bgfx/shaders/essl/chains/hlsl/fs_prescale.bin
index 22e2f0c23d0..3096cd5f45d 100644
--- a/bgfx/shaders/essl/chains/hlsl/fs_prescale.bin
+++ b/bgfx/shaders/essl/chains/hlsl/fs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/vs_color.bin b/bgfx/shaders/essl/chains/hlsl/vs_color.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/hlsl/vs_color.bin
+++ b/bgfx/shaders/essl/chains/hlsl/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/vs_deconverge.bin b/bgfx/shaders/essl/chains/hlsl/vs_deconverge.bin
index 08aeca09e23..3cdde129494 100644
--- a/bgfx/shaders/essl/chains/hlsl/vs_deconverge.bin
+++ b/bgfx/shaders/essl/chains/hlsl/vs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/vs_defocus.bin b/bgfx/shaders/essl/chains/hlsl/vs_defocus.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/hlsl/vs_defocus.bin
+++ b/bgfx/shaders/essl/chains/hlsl/vs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/vs_distortion.bin b/bgfx/shaders/essl/chains/hlsl/vs_distortion.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/hlsl/vs_distortion.bin
+++ b/bgfx/shaders/essl/chains/hlsl/vs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/vs_ntsc_decode.bin b/bgfx/shaders/essl/chains/hlsl/vs_ntsc_decode.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/hlsl/vs_ntsc_decode.bin
+++ b/bgfx/shaders/essl/chains/hlsl/vs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/vs_ntsc_encode.bin b/bgfx/shaders/essl/chains/hlsl/vs_ntsc_encode.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/hlsl/vs_ntsc_encode.bin
+++ b/bgfx/shaders/essl/chains/hlsl/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/vs_phosphor.bin b/bgfx/shaders/essl/chains/hlsl/vs_phosphor.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/hlsl/vs_phosphor.bin
+++ b/bgfx/shaders/essl/chains/hlsl/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/vs_post.bin b/bgfx/shaders/essl/chains/hlsl/vs_post.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/hlsl/vs_post.bin
+++ b/bgfx/shaders/essl/chains/hlsl/vs_post.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hlsl/vs_prescale.bin b/bgfx/shaders/essl/chains/hlsl/vs_prescale.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/hlsl/vs_prescale.bin
+++ b/bgfx/shaders/essl/chains/hlsl/vs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hqx/fs_hq2x.bin b/bgfx/shaders/essl/chains/hqx/fs_hq2x.bin
index e25a32baaa6..8a2308388b5 100644
--- a/bgfx/shaders/essl/chains/hqx/fs_hq2x.bin
+++ b/bgfx/shaders/essl/chains/hqx/fs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hqx/fs_hq3x.bin b/bgfx/shaders/essl/chains/hqx/fs_hq3x.bin
index 9f27dce7e58..eb0f6133658 100644
--- a/bgfx/shaders/essl/chains/hqx/fs_hq3x.bin
+++ b/bgfx/shaders/essl/chains/hqx/fs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hqx/fs_hq4x.bin b/bgfx/shaders/essl/chains/hqx/fs_hq4x.bin
index d01b94d365e..09ca0c9c2b7 100644
--- a/bgfx/shaders/essl/chains/hqx/fs_hq4x.bin
+++ b/bgfx/shaders/essl/chains/hqx/fs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hqx/vs_hq2x.bin b/bgfx/shaders/essl/chains/hqx/vs_hq2x.bin
index 413d1e8bd20..ec190ab85f3 100644
--- a/bgfx/shaders/essl/chains/hqx/vs_hq2x.bin
+++ b/bgfx/shaders/essl/chains/hqx/vs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hqx/vs_hq3x.bin b/bgfx/shaders/essl/chains/hqx/vs_hq3x.bin
index 413d1e8bd20..ec190ab85f3 100644
--- a/bgfx/shaders/essl/chains/hqx/vs_hq3x.bin
+++ b/bgfx/shaders/essl/chains/hqx/vs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/hqx/vs_hq4x.bin b/bgfx/shaders/essl/chains/hqx/vs_hq4x.bin
index 413d1e8bd20..ec190ab85f3 100644
--- a/bgfx/shaders/essl/chains/hqx/vs_hq4x.bin
+++ b/bgfx/shaders/essl/chains/hqx/vs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/fs_blit.bin b/bgfx/shaders/essl/chains/misc/fs_blit.bin
index 22e2f0c23d0..3096cd5f45d 100644
--- a/bgfx/shaders/essl/chains/misc/fs_blit.bin
+++ b/bgfx/shaders/essl/chains/misc/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/fs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/essl/chains/misc/fs_bob-and-ghost-deinterlace.bin
index b2433cfdb67..531f74c55b9 100644
--- a/bgfx/shaders/essl/chains/misc/fs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/essl/chains/misc/fs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/fs_deposterize-pass0.bin b/bgfx/shaders/essl/chains/misc/fs_deposterize-pass0.bin
index a7ef07b90c7..0b6835b9982 100644
--- a/bgfx/shaders/essl/chains/misc/fs_deposterize-pass0.bin
+++ b/bgfx/shaders/essl/chains/misc/fs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/fs_deposterize-pass1.bin b/bgfx/shaders/essl/chains/misc/fs_deposterize-pass1.bin
index 08c29573029..9f63eeda0dc 100644
--- a/bgfx/shaders/essl/chains/misc/fs_deposterize-pass1.bin
+++ b/bgfx/shaders/essl/chains/misc/fs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/fs_saturation.bin b/bgfx/shaders/essl/chains/misc/fs_saturation.bin
index 2f6160fe747..63f1c18a663 100644
--- a/bgfx/shaders/essl/chains/misc/fs_saturation.bin
+++ b/bgfx/shaders/essl/chains/misc/fs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/vs_blit.bin b/bgfx/shaders/essl/chains/misc/vs_blit.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/misc/vs_blit.bin
+++ b/bgfx/shaders/essl/chains/misc/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/vs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/essl/chains/misc/vs_bob-and-ghost-deinterlace.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/misc/vs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/essl/chains/misc/vs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/essl/chains/misc/vs_deposterize-pass0.bin
index b39bc67dfb4..b11de231f0b 100644
--- a/bgfx/shaders/essl/chains/misc/vs_deposterize-pass0.bin
+++ b/bgfx/shaders/essl/chains/misc/vs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/essl/chains/misc/vs_deposterize-pass1.bin
index 893fee943b1..60822532e69 100644
--- a/bgfx/shaders/essl/chains/misc/vs_deposterize-pass1.bin
+++ b/bgfx/shaders/essl/chains/misc/vs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/vs_saturation.bin b/bgfx/shaders/essl/chains/misc/vs_saturation.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/misc/vs_saturation.bin
+++ b/bgfx/shaders/essl/chains/misc/vs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_gaussian.bin b/bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_gaussian.bin
index 34b997772e7..738506179a9 100644
--- a/bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_offset_sat.bin b/bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_offset_sat.bin
index 2f6160fe747..63f1c18a663 100644
--- a/bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_left_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_gaussian.bin b/bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_gaussian.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_offset_sat.bin b/bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_offset_sat.bin
index 42326d4324e..e61dfa866a6 100644
--- a/bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_left_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_gaussian.bin b/bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_gaussian.bin
index 34b997772e7..738506179a9 100644
--- a/bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_offset_sat.bin b/bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_offset_sat.bin
index 2f6160fe747..63f1c18a663 100644
--- a/bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_left_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_gaussian.bin b/bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_gaussian.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_offset_sat.bin b/bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_offset_sat.bin
index dbce619ef26..be6a9735277 100644
--- a/bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_left_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_gaussian.bin b/bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_gaussian.bin
index 34b997772e7..738506179a9 100644
--- a/bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_offset_sat.bin b/bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_offset_sat.bin
index 2f6160fe747..63f1c18a663 100644
--- a/bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_right_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_gaussian.bin b/bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_gaussian.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_offset_sat.bin b/bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_offset_sat.bin
index 1e806909f59..0c37643210d 100644
--- a/bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_right_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_gaussian.bin b/bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_gaussian.bin
index 34b997772e7..738506179a9 100644
--- a/bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_offset_sat.bin b/bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_offset_sat.bin
index 2f6160fe747..63f1c18a663 100644
--- a/bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_right_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_gaussian.bin b/bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_gaussian.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_offset_sat.bin b/bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_offset_sat.bin
index c0f4dfa5a88..caf2b1d7c08 100644
--- a/bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/essl/chains/pillarbox_right_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/unfiltered/fs_blit.bin b/bgfx/shaders/essl/chains/unfiltered/fs_blit.bin
index 22e2f0c23d0..3096cd5f45d 100644
--- a/bgfx/shaders/essl/chains/unfiltered/fs_blit.bin
+++ b/bgfx/shaders/essl/chains/unfiltered/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/unfiltered/vs_blit.bin b/bgfx/shaders/essl/chains/unfiltered/vs_blit.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/unfiltered/vs_blit.bin
+++ b/bgfx/shaders/essl/chains/unfiltered/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/essl/chains/warp/fs_dilation-horizontal-fast.bin
index 734573098cc..7d47bc8ea3f 100644
--- a/bgfx/shaders/essl/chains/warp/fs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/essl/chains/warp/fs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/warp/vs_dilation-horizontal-fast.bin b/bgfx/shaders/essl/chains/warp/vs_dilation-horizontal-fast.bin
index 66384640a3b..65987997a78 100644
--- a/bgfx/shaders/essl/chains/warp/vs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/essl/chains/warp/vs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv1-noblend.bin b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv1-noblend.bin
index 2a18147115f..1a8aa667a7c 100644
--- a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-3d.bin b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-3d.bin
index d3e1b180b27..300751cc363 100644
--- a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-fast.bin b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-fast.bin
index 840d103194b..17a7a440982 100644
--- a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-noblend.bin b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-noblend.bin
index 457fe5a3dbf..014eac4cfc1 100644
--- a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2.bin b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2.bin
index b5ab071e866..9f7252ecd73 100644
--- a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2.bin
+++ b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv3-noblend.bin b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv3-noblend.bin
index be749d0b162..9fff38c03e6 100644
--- a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv3.bin b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv3.bin
index a9a218e5798..2c1512f629f 100644
--- a/bgfx/shaders/essl/chains/xbr/fs_xbr-lv3.bin
+++ b/bgfx/shaders/essl/chains/xbr/fs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
index f9c7ad41d1d..6e7bc9b3812 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
index ce19da70ec3..d7ff5a8f3c9 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
index 37b5ee12682..6e5ca3d36e1 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
index 6585387ce7a..a3503025189 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
index 02aba5a0cba..7bea3faba06 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
index d645bdf002c..87c8a9d54d4 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
index 1914c61410f..1589b907c1e 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
index ce19da70ec3..d7ff5a8f3c9 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
index b5e7f16543d..da6a1e701f8 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
index a98de1025c7..00bf679d8f0 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
index 82036f8a21f..dac80a21757 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
index b2fec3f1fb6..0aa3904b96d 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
index 9409cfb2a61..62b85642cc9 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass0.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
index ac71cdeef2c..77e95b335b9 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass1.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
index 900a4e701a5..7a037b5b74c 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass2.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
index f1995dd122c..f04f2b41b96 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
index d4df7ec9ee3..4aa1d80f965 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
index d4df7ec9ee3..4aa1d80f965 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
index d4df7ec9ee3..4aa1d80f965 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass0.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
index 39c4b239b8a..ed0c9a9d6c8 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass1.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass2.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
index d4df7ec9ee3..4aa1d80f965 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass3.bin b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
index d4df7ec9ee3..4aa1d80f965 100644
--- a/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
+++ b/bgfx/shaders/essl/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv1-noblend.bin b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv1-noblend.bin
index 5769d6ff5d8..83914917048 100644
--- a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-3d.bin b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-3d.bin
index 26b10137f15..39e80a7a437 100644
--- a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-fast.bin b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-fast.bin
index 2d62e84953e..de52b2eeaf0 100644
--- a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-noblend.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2.bin b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2.bin
+++ b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv3-noblend.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv3.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/vs_xbr-lv3.bin
+++ b/bgfx/shaders/essl/chains/xbr/vs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
index 07cc94a825f..dd7c3d7a6a6 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
index d76f9820389..34f79f851c1 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
index 3bc5c076820..5836c01c9e4 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
index d43108803f4..141256c9f28 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
index b56fb7f7b45..349ae99b09a 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
index 7c32cfef709..3cc63e564c2 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
index ca0c4c91c71..66ff2bb4a8d 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
index 4363644e3a5..adc4cda0b7f 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
index dba31ac29cb..bea7863a8f1 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
index df193d6dc41..f3f4c2190be 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
index 736852f06b3..0f3b14215a3 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
index 781d845f6bb..170f84ce944 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
index cbe5aa972ad..042630f0783 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
index 1695f2c7e1a..ebe52984c36 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
index 7f285bb36d9..83f1b42f7c4 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
index d28adbec034..ef45a288fce 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
index e19250609ee..2ec18db467b 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
index e19250609ee..2ec18db467b 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
index e19250609ee..2ec18db467b 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
index 4582d6f5e1b..53616c51d4f 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
index 24e46c52d0a..222f47c8193 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
index 0b3b52cd27d..4a336f18782 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
index 8a4c94597f2..3b804d35d01 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
index 091d42e9d3e..6f08dcab0e3 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
index 97b44e39b56..9bc91e81cab 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
index 8b8020487b8..d64811c7875 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
index 1f70fb1d7da..712c081adda 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
index dd851ddde0a..d7b5c08be13 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
index 9f5f41320c0..34e8ac9ef94 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
index 9f5f41320c0..34e8ac9ef94 100644
--- a/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/essl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/essl/fs_gui.bin b/bgfx/shaders/essl/fs_gui.bin
index 22e2f0c23d0..3096cd5f45d 100644
--- a/bgfx/shaders/essl/fs_gui.bin
+++ b/bgfx/shaders/essl/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/essl/fs_screen.bin b/bgfx/shaders/essl/fs_screen.bin
index 22e2f0c23d0..3096cd5f45d 100644
--- a/bgfx/shaders/essl/fs_screen.bin
+++ b/bgfx/shaders/essl/fs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/essl/vs_gui.bin b/bgfx/shaders/essl/vs_gui.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/vs_gui.bin
+++ b/bgfx/shaders/essl/vs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/essl/vs_screen.bin b/bgfx/shaders/essl/vs_screen.bin
index 9dd618de8a0..02eb754eaa3 100644
--- a/bgfx/shaders/essl/vs_screen.bin
+++ b/bgfx/shaders/essl/vs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/blurs/fs_smart-blur.bin b/bgfx/shaders/glsl/chains/blurs/fs_smart-blur.bin
index 442d5cdadf1..efae9e62296 100644
--- a/bgfx/shaders/glsl/chains/blurs/fs_smart-blur.bin
+++ b/bgfx/shaders/glsl/chains/blurs/fs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/glsl/chains/blurs/vs_smart-blur.bin
index c034943e250..779215e1393 100644
--- a/bgfx/shaders/glsl/chains/blurs/vs_smart-blur.bin
+++ b/bgfx/shaders/glsl/chains/blurs/vs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom-deluxe.bin
index 0a54f384293..55dde80cc29 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom-deluxe.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom-deluxe.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom.bin
index 7e03c559853..cce09f22ca3 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_gaussx.bin
index d83c7dea15d..2913fdb8841 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/fs_gaussx.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/fs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_gaussy.bin
index 0ab1151bba8..30b51092d0a 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/fs_gaussy.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/fs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_apply.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_apply.bin
index 5de0143b200..b342b7cd067 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_apply.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_update.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_update.bin
index 50034bc156c..80274c348ec 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_update.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/fs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/vs_crt-geom.bin b/bgfx/shaders/glsl/chains/crt-geom/vs_crt-geom.bin
index 4abb00b0de8..0dc6e0f3bba 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/vs_crt-geom.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/vs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/glsl/chains/crt-geom/vs_gaussx.bin
index ebf8e8e4e87..362d112289e 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/vs_gaussx.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/vs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/glsl/chains/crt-geom/vs_gaussy.bin
index 3461941df07..d275d388690 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/vs_gaussy.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/vs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_apply.bin b/bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_apply.bin
index a02931f846e..e37754bcb08 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_apply.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_update.bin b/bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_update.bin
index a02931f846e..e37754bcb08 100644
--- a/bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_update.bin
+++ b/bgfx/shaders/glsl/chains/crt-geom/vs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt/fs_crt-caligari.bin b/bgfx/shaders/glsl/chains/crt/fs_crt-caligari.bin
index 0f84a90df98..6a609664a97 100644
--- a/bgfx/shaders/glsl/chains/crt/fs_crt-caligari.bin
+++ b/bgfx/shaders/glsl/chains/crt/fs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/crt/vs_crt-caligari.bin b/bgfx/shaders/glsl/chains/crt/vs_crt-caligari.bin
index de8e1df2d6b..292c005fafe 100644
--- a/bgfx/shaders/glsl/chains/crt/vs_crt-caligari.bin
+++ b/bgfx/shaders/glsl/chains/crt/vs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/default/fs_blit.bin b/bgfx/shaders/glsl/chains/default/fs_blit.bin
index db0fe2b487b..fc51a68ad85 100644
--- a/bgfx/shaders/glsl/chains/default/fs_blit.bin
+++ b/bgfx/shaders/glsl/chains/default/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/default/vs_blit.bin b/bgfx/shaders/glsl/chains/default/vs_blit.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/default/vs_blit.bin
+++ b/bgfx/shaders/glsl/chains/default/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/eagle/fs_eagle.bin b/bgfx/shaders/glsl/chains/eagle/fs_eagle.bin
index 1c640de9db8..0f0855209e0 100644
--- a/bgfx/shaders/glsl/chains/eagle/fs_eagle.bin
+++ b/bgfx/shaders/glsl/chains/eagle/fs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/eagle/vs_eagle.bin b/bgfx/shaders/glsl/chains/eagle/vs_eagle.bin
index d5eccb4c173..c9102168b1d 100644
--- a/bgfx/shaders/glsl/chains/eagle/vs_eagle.bin
+++ b/bgfx/shaders/glsl/chains/eagle/vs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_color.bin b/bgfx/shaders/glsl/chains/hlsl/fs_color.bin
index fc0baf998d5..0b0fc9574f6 100644
--- a/bgfx/shaders/glsl/chains/hlsl/fs_color.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_deconverge.bin b/bgfx/shaders/glsl/chains/hlsl/fs_deconverge.bin
index 96136e77f17..6f3aea8b7e7 100644
--- a/bgfx/shaders/glsl/chains/hlsl/fs_deconverge.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/fs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_defocus.bin b/bgfx/shaders/glsl/chains/hlsl/fs_defocus.bin
index 238e85969c2..811be64743d 100644
--- a/bgfx/shaders/glsl/chains/hlsl/fs_defocus.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/fs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_distortion.bin b/bgfx/shaders/glsl/chains/hlsl/fs_distortion.bin
index 4046b407a05..a04d209a6ca 100644
--- a/bgfx/shaders/glsl/chains/hlsl/fs_distortion.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/fs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_ntsc_decode.bin b/bgfx/shaders/glsl/chains/hlsl/fs_ntsc_decode.bin
index 9bb6f3b1db8..47a4a94850e 100644
--- a/bgfx/shaders/glsl/chains/hlsl/fs_ntsc_decode.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_ntsc_encode.bin b/bgfx/shaders/glsl/chains/hlsl/fs_ntsc_encode.bin
index 2f316b21936..3d69369ba52 100644
--- a/bgfx/shaders/glsl/chains/hlsl/fs_ntsc_encode.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/fs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_phosphor.bin b/bgfx/shaders/glsl/chains/hlsl/fs_phosphor.bin
index 3f69ea62056..30481fbbc2d 100644
--- a/bgfx/shaders/glsl/chains/hlsl/fs_phosphor.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/fs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_post.bin b/bgfx/shaders/glsl/chains/hlsl/fs_post.bin
index 887cf531e21..330fd3d7a1e 100644
--- a/bgfx/shaders/glsl/chains/hlsl/fs_post.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/fs_post.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_prescale.bin b/bgfx/shaders/glsl/chains/hlsl/fs_prescale.bin
index db0fe2b487b..fc51a68ad85 100644
--- a/bgfx/shaders/glsl/chains/hlsl/fs_prescale.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/fs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/vs_color.bin b/bgfx/shaders/glsl/chains/hlsl/vs_color.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/hlsl/vs_color.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/vs_deconverge.bin b/bgfx/shaders/glsl/chains/hlsl/vs_deconverge.bin
index 2398d71b227..e58cf0f8814 100644
--- a/bgfx/shaders/glsl/chains/hlsl/vs_deconverge.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/vs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/vs_defocus.bin b/bgfx/shaders/glsl/chains/hlsl/vs_defocus.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/hlsl/vs_defocus.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/vs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/vs_distortion.bin b/bgfx/shaders/glsl/chains/hlsl/vs_distortion.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/hlsl/vs_distortion.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/vs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/vs_ntsc_decode.bin b/bgfx/shaders/glsl/chains/hlsl/vs_ntsc_decode.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/hlsl/vs_ntsc_decode.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/vs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/vs_ntsc_encode.bin b/bgfx/shaders/glsl/chains/hlsl/vs_ntsc_encode.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/hlsl/vs_ntsc_encode.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/vs_phosphor.bin b/bgfx/shaders/glsl/chains/hlsl/vs_phosphor.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/hlsl/vs_phosphor.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/vs_post.bin b/bgfx/shaders/glsl/chains/hlsl/vs_post.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/hlsl/vs_post.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/vs_post.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hlsl/vs_prescale.bin b/bgfx/shaders/glsl/chains/hlsl/vs_prescale.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/hlsl/vs_prescale.bin
+++ b/bgfx/shaders/glsl/chains/hlsl/vs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hqx/fs_hq2x.bin b/bgfx/shaders/glsl/chains/hqx/fs_hq2x.bin
index 1a6b1919a59..eb497fcd2fb 100644
--- a/bgfx/shaders/glsl/chains/hqx/fs_hq2x.bin
+++ b/bgfx/shaders/glsl/chains/hqx/fs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hqx/fs_hq3x.bin b/bgfx/shaders/glsl/chains/hqx/fs_hq3x.bin
index 53ec718d105..ec22cb1f877 100644
--- a/bgfx/shaders/glsl/chains/hqx/fs_hq3x.bin
+++ b/bgfx/shaders/glsl/chains/hqx/fs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hqx/fs_hq4x.bin b/bgfx/shaders/glsl/chains/hqx/fs_hq4x.bin
index e907f94150d..3057ea3cf4c 100644
--- a/bgfx/shaders/glsl/chains/hqx/fs_hq4x.bin
+++ b/bgfx/shaders/glsl/chains/hqx/fs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hqx/vs_hq2x.bin b/bgfx/shaders/glsl/chains/hqx/vs_hq2x.bin
index 789e990106d..697c31fca95 100644
--- a/bgfx/shaders/glsl/chains/hqx/vs_hq2x.bin
+++ b/bgfx/shaders/glsl/chains/hqx/vs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hqx/vs_hq3x.bin b/bgfx/shaders/glsl/chains/hqx/vs_hq3x.bin
index 789e990106d..697c31fca95 100644
--- a/bgfx/shaders/glsl/chains/hqx/vs_hq3x.bin
+++ b/bgfx/shaders/glsl/chains/hqx/vs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/hqx/vs_hq4x.bin b/bgfx/shaders/glsl/chains/hqx/vs_hq4x.bin
index 789e990106d..697c31fca95 100644
--- a/bgfx/shaders/glsl/chains/hqx/vs_hq4x.bin
+++ b/bgfx/shaders/glsl/chains/hqx/vs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/fs_blit.bin b/bgfx/shaders/glsl/chains/misc/fs_blit.bin
index db0fe2b487b..fc51a68ad85 100644
--- a/bgfx/shaders/glsl/chains/misc/fs_blit.bin
+++ b/bgfx/shaders/glsl/chains/misc/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/fs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/glsl/chains/misc/fs_bob-and-ghost-deinterlace.bin
index d8a1d3f3c6d..ae090c69e66 100644
--- a/bgfx/shaders/glsl/chains/misc/fs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/glsl/chains/misc/fs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/fs_deposterize-pass0.bin b/bgfx/shaders/glsl/chains/misc/fs_deposterize-pass0.bin
index c7188eec839..2a5284fde05 100644
--- a/bgfx/shaders/glsl/chains/misc/fs_deposterize-pass0.bin
+++ b/bgfx/shaders/glsl/chains/misc/fs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/fs_deposterize-pass1.bin b/bgfx/shaders/glsl/chains/misc/fs_deposterize-pass1.bin
index 68a47c3243f..2a1ed83090c 100644
--- a/bgfx/shaders/glsl/chains/misc/fs_deposterize-pass1.bin
+++ b/bgfx/shaders/glsl/chains/misc/fs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/fs_saturation.bin b/bgfx/shaders/glsl/chains/misc/fs_saturation.bin
index 4a3f80b56b9..c0639ffc58e 100644
--- a/bgfx/shaders/glsl/chains/misc/fs_saturation.bin
+++ b/bgfx/shaders/glsl/chains/misc/fs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/vs_blit.bin b/bgfx/shaders/glsl/chains/misc/vs_blit.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/misc/vs_blit.bin
+++ b/bgfx/shaders/glsl/chains/misc/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/vs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/glsl/chains/misc/vs_bob-and-ghost-deinterlace.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/misc/vs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/glsl/chains/misc/vs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/glsl/chains/misc/vs_deposterize-pass0.bin
index e6cfefbd74f..a79f087e271 100644
--- a/bgfx/shaders/glsl/chains/misc/vs_deposterize-pass0.bin
+++ b/bgfx/shaders/glsl/chains/misc/vs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/glsl/chains/misc/vs_deposterize-pass1.bin
index af4ba2d7538..fcf67cb49af 100644
--- a/bgfx/shaders/glsl/chains/misc/vs_deposterize-pass1.bin
+++ b/bgfx/shaders/glsl/chains/misc/vs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/vs_saturation.bin b/bgfx/shaders/glsl/chains/misc/vs_saturation.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/misc/vs_saturation.bin
+++ b/bgfx/shaders/glsl/chains/misc/vs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_gaussian.bin b/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_gaussian.bin
index eba13b8fcf5..19e41982c5c 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_offset_sat.bin b/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_offset_sat.bin
index 4a3f80b56b9..c0639ffc58e 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_gaussian.bin b/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_gaussian.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_offset_sat.bin b/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_offset_sat.bin
index 061d861b6ed..5132aa5df49 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_left_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_gaussian.bin b/bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_gaussian.bin
index eba13b8fcf5..19e41982c5c 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_offset_sat.bin b/bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_offset_sat.bin
index 4a3f80b56b9..c0639ffc58e 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_left_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_gaussian.bin b/bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_gaussian.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_offset_sat.bin b/bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_offset_sat.bin
index de0d4115e79..989853c6360 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_left_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_gaussian.bin b/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_gaussian.bin
index eba13b8fcf5..19e41982c5c 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_offset_sat.bin b/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_offset_sat.bin
index 4a3f80b56b9..c0639ffc58e 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_gaussian.bin b/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_gaussian.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_offset_sat.bin b/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_offset_sat.bin
index c25635af5a8..4208c2909e0 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_right_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_gaussian.bin b/bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_gaussian.bin
index eba13b8fcf5..19e41982c5c 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_offset_sat.bin b/bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_offset_sat.bin
index 4a3f80b56b9..c0639ffc58e 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_right_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_gaussian.bin b/bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_gaussian.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_offset_sat.bin b/bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_offset_sat.bin
index 3b5a651f2e7..2b6961abab8 100644
--- a/bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/glsl/chains/pillarbox_right_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/unfiltered/fs_blit.bin b/bgfx/shaders/glsl/chains/unfiltered/fs_blit.bin
index db0fe2b487b..fc51a68ad85 100644
--- a/bgfx/shaders/glsl/chains/unfiltered/fs_blit.bin
+++ b/bgfx/shaders/glsl/chains/unfiltered/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/unfiltered/vs_blit.bin b/bgfx/shaders/glsl/chains/unfiltered/vs_blit.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/unfiltered/vs_blit.bin
+++ b/bgfx/shaders/glsl/chains/unfiltered/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/glsl/chains/warp/fs_dilation-horizontal-fast.bin
index f5c958c3a24..1504753f8ee 100644
--- a/bgfx/shaders/glsl/chains/warp/fs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/glsl/chains/warp/fs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/warp/vs_dilation-horizontal-fast.bin b/bgfx/shaders/glsl/chains/warp/vs_dilation-horizontal-fast.bin
index aa75b840f57..59135056056 100644
--- a/bgfx/shaders/glsl/chains/warp/vs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/glsl/chains/warp/vs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv1-noblend.bin b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv1-noblend.bin
index e4fa0a459fd..07202194f2b 100644
--- a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-3d.bin b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-3d.bin
index 4eb973425fe..4243d02ff04 100644
--- a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-fast.bin b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-fast.bin
index c42afe7d9ce..6bcf10662f6 100644
--- a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-noblend.bin b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-noblend.bin
index 93e048d5f0e..d7ab919b011 100644
--- a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2.bin b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2.bin
index 57ad240a61f..cdcb5c16587 100644
--- a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3-noblend.bin b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3-noblend.bin
index 0899e9faaa8..bf61a0f31a6 100644
--- a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3.bin b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3.bin
index 1b890059248..ca782c27132 100644
--- a/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3.bin
+++ b/bgfx/shaders/glsl/chains/xbr/fs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
index 26a3506b7cb..f423e1906b4 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
index c7894d1d0e8..31a205218c7 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
index 8f61bc0c5e3..82edb49a2ad 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
index c8900a657ea..1836c4e46c1 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
index 82be16250c1..2a5b558815f 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
index bf6c4a886f6..a5ddba189e0 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
index e2254725353..da08d622676 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
index c7894d1d0e8..31a205218c7 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
index 1c1d4030496..7a065d41637 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
index d855fb47c25..5ab8a5128e8 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
index 66054016ff4..3cb6f236bc6 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
index 43fc6074d13..0bb3ae51a37 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
index 2652cdee73e..882d8d23d41 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass0.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
index f2b5b97387a..011fc430b2f 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass1.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
index a78563e0ceb..b0726e0d01d 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass2.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
index 3d66ef7f690..a4183cdb6b5 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
index 289f01ddd34..5509904a7a2 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
index 289f01ddd34..5509904a7a2 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
index 289f01ddd34..5509904a7a2 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass0.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
index 061a6627b32..8a5d6a73bb9 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass1.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass2.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
index 289f01ddd34..5509904a7a2 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass3.bin b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
index 289f01ddd34..5509904a7a2 100644
--- a/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
+++ b/bgfx/shaders/glsl/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv1-noblend.bin b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv1-noblend.bin
index 93b681dd926..68b10e869e4 100644
--- a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-3d.bin b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-3d.bin
index c771634e8be..da694cf75e8 100644
--- a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-fast.bin b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-fast.bin
index c034943e250..779215e1393 100644
--- a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-noblend.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2.bin b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3-noblend.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3.bin
+++ b/bgfx/shaders/glsl/chains/xbr/vs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
index d84b3236975..1e44adc5b0a 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
index df01409e7ea..c956a007ec4 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
index 79d573d3085..4d43a083ae3 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
index 924c586a750..30f202931e8 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
index 20eb843b5ae..65711ba76fb 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
index 286f94e019c..61353f0f0a2 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
index 42788a3d40c..309e158a676 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
index b9c800b73ef..233633f272b 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
index 0021e9a700e..383cae982eb 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
index 4e2d3470812..41a09631451 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
index 9483a864100..3f519513e79 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
index e07c6914544..1894a568e83 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
index 61923aa8af2..d61794db097 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
index 57b6d8e8300..23ec176d787 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
index bfcb3e7b1a5..3f68605cce9 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
index 91df8548dd5..4bee9c4386d 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
index b0346c82ec3..28c6bcd1b6c 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
index b0346c82ec3..28c6bcd1b6c 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
index b0346c82ec3..28c6bcd1b6c 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
index ef27a84cdc1..e038232800a 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
index dfd83d4fd38..80922268d8d 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
index daf1ea4b5de..5ba5203d600 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
index e288d693dbc..29ea5d9daf7 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
index 09fe6dd9e27..5690054ab77 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
index 9310fb7efe7..ad78980574e 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
index 836308b88e2..36e585c2782 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
index 930652f50c0..6e9b7962b05 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
index d8d081a91d0..2ce80491b49 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
index 3d3962b3901..337b716b1df 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
index 3d3962b3901..337b716b1df 100644
--- a/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/glsl/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/fs_gui.bin b/bgfx/shaders/glsl/fs_gui.bin
index db0fe2b487b..fc51a68ad85 100644
--- a/bgfx/shaders/glsl/fs_gui.bin
+++ b/bgfx/shaders/glsl/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/fs_screen.bin b/bgfx/shaders/glsl/fs_screen.bin
index db0fe2b487b..fc51a68ad85 100644
--- a/bgfx/shaders/glsl/fs_screen.bin
+++ b/bgfx/shaders/glsl/fs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/vs_gui.bin b/bgfx/shaders/glsl/vs_gui.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/vs_gui.bin
+++ b/bgfx/shaders/glsl/vs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/vs_screen.bin b/bgfx/shaders/glsl/vs_screen.bin
index af6c9349f41..391ef1fda40 100644
--- a/bgfx/shaders/glsl/vs_screen.bin
+++ b/bgfx/shaders/glsl/vs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/blurs/fs_smart-blur.bin b/bgfx/shaders/metal/chains/blurs/fs_smart-blur.bin
index 45d1b7e60b0..01518121814 100644
--- a/bgfx/shaders/metal/chains/blurs/fs_smart-blur.bin
+++ b/bgfx/shaders/metal/chains/blurs/fs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/metal/chains/blurs/vs_smart-blur.bin
index fd3ca82c758..cb8894a55ba 100644
--- a/bgfx/shaders/metal/chains/blurs/vs_smart-blur.bin
+++ b/bgfx/shaders/metal/chains/blurs/vs_smart-blur.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom-deluxe.bin
index 0665edbee06..f7e26788f00 100644
--- a/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom-deluxe.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom-deluxe.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom.bin
index 40deb76f7bc..3869cef153b 100644
--- a/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/metal/chains/crt-geom/fs_gaussx.bin
index da6dfea7d69..d2812adb983 100644
--- a/bgfx/shaders/metal/chains/crt-geom/fs_gaussx.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/fs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/metal/chains/crt-geom/fs_gaussy.bin
index 93c70bd33b8..1f9f70dad12 100644
--- a/bgfx/shaders/metal/chains/crt-geom/fs_gaussy.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/fs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_apply.bin b/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_apply.bin
index dfae6d011d7..6eb3ee69b0f 100644
--- a/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_apply.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_update.bin b/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_update.bin
index 91943d55f15..c71fc6d7586 100644
--- a/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_update.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/fs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_crt-geom.bin b/bgfx/shaders/metal/chains/crt-geom/vs_crt-geom.bin
index 856eeec39bc..fd51db9624f 100644
--- a/bgfx/shaders/metal/chains/crt-geom/vs_crt-geom.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/vs_crt-geom.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/metal/chains/crt-geom/vs_gaussx.bin
index 78e84c8a31f..d300dea0e6a 100644
--- a/bgfx/shaders/metal/chains/crt-geom/vs_gaussx.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/vs_gaussx.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/metal/chains/crt-geom/vs_gaussy.bin
index 3150f0bcc0a..334fc52984a 100644
--- a/bgfx/shaders/metal/chains/crt-geom/vs_gaussy.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/vs_gaussy.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_phosphor_apply.bin b/bgfx/shaders/metal/chains/crt-geom/vs_phosphor_apply.bin
index f09f3712286..91ba1d9dc35 100644
--- a/bgfx/shaders/metal/chains/crt-geom/vs_phosphor_apply.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/vs_phosphor_apply.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_phosphor_update.bin b/bgfx/shaders/metal/chains/crt-geom/vs_phosphor_update.bin
index f09f3712286..91ba1d9dc35 100644
--- a/bgfx/shaders/metal/chains/crt-geom/vs_phosphor_update.bin
+++ b/bgfx/shaders/metal/chains/crt-geom/vs_phosphor_update.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt/fs_crt-caligari.bin b/bgfx/shaders/metal/chains/crt/fs_crt-caligari.bin
index 2a0a5385688..3f0a7748182 100644
--- a/bgfx/shaders/metal/chains/crt/fs_crt-caligari.bin
+++ b/bgfx/shaders/metal/chains/crt/fs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/crt/vs_crt-caligari.bin b/bgfx/shaders/metal/chains/crt/vs_crt-caligari.bin
index 15a9dc48661..fdfcf8e5b3c 100644
--- a/bgfx/shaders/metal/chains/crt/vs_crt-caligari.bin
+++ b/bgfx/shaders/metal/chains/crt/vs_crt-caligari.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/default/fs_blit.bin b/bgfx/shaders/metal/chains/default/fs_blit.bin
index c543c8b244a..54401a846b4 100644
--- a/bgfx/shaders/metal/chains/default/fs_blit.bin
+++ b/bgfx/shaders/metal/chains/default/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/default/vs_blit.bin b/bgfx/shaders/metal/chains/default/vs_blit.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/default/vs_blit.bin
+++ b/bgfx/shaders/metal/chains/default/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/eagle/fs_eagle.bin b/bgfx/shaders/metal/chains/eagle/fs_eagle.bin
index 10c7dba6543..da64aef3e9c 100644
--- a/bgfx/shaders/metal/chains/eagle/fs_eagle.bin
+++ b/bgfx/shaders/metal/chains/eagle/fs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/eagle/vs_eagle.bin b/bgfx/shaders/metal/chains/eagle/vs_eagle.bin
index eee9b8bebfb..5500730f632 100644
--- a/bgfx/shaders/metal/chains/eagle/vs_eagle.bin
+++ b/bgfx/shaders/metal/chains/eagle/vs_eagle.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/fs_color.bin b/bgfx/shaders/metal/chains/hlsl/fs_color.bin
index 3d085fd15a7..7a6d383fb11 100644
--- a/bgfx/shaders/metal/chains/hlsl/fs_color.bin
+++ b/bgfx/shaders/metal/chains/hlsl/fs_color.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/fs_deconverge.bin b/bgfx/shaders/metal/chains/hlsl/fs_deconverge.bin
index f05147155c0..4e077d73f1d 100644
--- a/bgfx/shaders/metal/chains/hlsl/fs_deconverge.bin
+++ b/bgfx/shaders/metal/chains/hlsl/fs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/fs_defocus.bin b/bgfx/shaders/metal/chains/hlsl/fs_defocus.bin
index 03975327c3d..06ce186d00f 100644
--- a/bgfx/shaders/metal/chains/hlsl/fs_defocus.bin
+++ b/bgfx/shaders/metal/chains/hlsl/fs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/fs_distortion.bin b/bgfx/shaders/metal/chains/hlsl/fs_distortion.bin
index c67e3e41f4d..112560ef520 100644
--- a/bgfx/shaders/metal/chains/hlsl/fs_distortion.bin
+++ b/bgfx/shaders/metal/chains/hlsl/fs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/fs_ntsc_decode.bin b/bgfx/shaders/metal/chains/hlsl/fs_ntsc_decode.bin
index a71592b179e..bedfc8fc1fa 100644
--- a/bgfx/shaders/metal/chains/hlsl/fs_ntsc_decode.bin
+++ b/bgfx/shaders/metal/chains/hlsl/fs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/fs_ntsc_encode.bin b/bgfx/shaders/metal/chains/hlsl/fs_ntsc_encode.bin
index 00cae03ce58..27a7035a763 100644
--- a/bgfx/shaders/metal/chains/hlsl/fs_ntsc_encode.bin
+++ b/bgfx/shaders/metal/chains/hlsl/fs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/fs_phosphor.bin b/bgfx/shaders/metal/chains/hlsl/fs_phosphor.bin
index 0a07c0372e5..a13f498c779 100644
--- a/bgfx/shaders/metal/chains/hlsl/fs_phosphor.bin
+++ b/bgfx/shaders/metal/chains/hlsl/fs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/fs_post.bin b/bgfx/shaders/metal/chains/hlsl/fs_post.bin
index 4644928c5be..5695a0a7393 100644
--- a/bgfx/shaders/metal/chains/hlsl/fs_post.bin
+++ b/bgfx/shaders/metal/chains/hlsl/fs_post.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/fs_prescale.bin b/bgfx/shaders/metal/chains/hlsl/fs_prescale.bin
index c543c8b244a..54401a846b4 100644
--- a/bgfx/shaders/metal/chains/hlsl/fs_prescale.bin
+++ b/bgfx/shaders/metal/chains/hlsl/fs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/vs_color.bin b/bgfx/shaders/metal/chains/hlsl/vs_color.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/hlsl/vs_color.bin
+++ b/bgfx/shaders/metal/chains/hlsl/vs_color.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/vs_deconverge.bin b/bgfx/shaders/metal/chains/hlsl/vs_deconverge.bin
index b0cafc7f429..3b34e5a5578 100644
--- a/bgfx/shaders/metal/chains/hlsl/vs_deconverge.bin
+++ b/bgfx/shaders/metal/chains/hlsl/vs_deconverge.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/vs_defocus.bin b/bgfx/shaders/metal/chains/hlsl/vs_defocus.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/hlsl/vs_defocus.bin
+++ b/bgfx/shaders/metal/chains/hlsl/vs_defocus.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/vs_distortion.bin b/bgfx/shaders/metal/chains/hlsl/vs_distortion.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/hlsl/vs_distortion.bin
+++ b/bgfx/shaders/metal/chains/hlsl/vs_distortion.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/vs_ntsc_decode.bin b/bgfx/shaders/metal/chains/hlsl/vs_ntsc_decode.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/hlsl/vs_ntsc_decode.bin
+++ b/bgfx/shaders/metal/chains/hlsl/vs_ntsc_decode.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/vs_ntsc_encode.bin b/bgfx/shaders/metal/chains/hlsl/vs_ntsc_encode.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/hlsl/vs_ntsc_encode.bin
+++ b/bgfx/shaders/metal/chains/hlsl/vs_ntsc_encode.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/vs_phosphor.bin b/bgfx/shaders/metal/chains/hlsl/vs_phosphor.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/hlsl/vs_phosphor.bin
+++ b/bgfx/shaders/metal/chains/hlsl/vs_phosphor.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/vs_post.bin b/bgfx/shaders/metal/chains/hlsl/vs_post.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/hlsl/vs_post.bin
+++ b/bgfx/shaders/metal/chains/hlsl/vs_post.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hlsl/vs_prescale.bin b/bgfx/shaders/metal/chains/hlsl/vs_prescale.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/hlsl/vs_prescale.bin
+++ b/bgfx/shaders/metal/chains/hlsl/vs_prescale.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hqx/fs_hq2x.bin b/bgfx/shaders/metal/chains/hqx/fs_hq2x.bin
index 83bcd7d5bed..ab35c535b91 100644
--- a/bgfx/shaders/metal/chains/hqx/fs_hq2x.bin
+++ b/bgfx/shaders/metal/chains/hqx/fs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hqx/fs_hq3x.bin b/bgfx/shaders/metal/chains/hqx/fs_hq3x.bin
index 1a1cb1bd3c6..923829f0cbf 100644
--- a/bgfx/shaders/metal/chains/hqx/fs_hq3x.bin
+++ b/bgfx/shaders/metal/chains/hqx/fs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hqx/fs_hq4x.bin b/bgfx/shaders/metal/chains/hqx/fs_hq4x.bin
index 9d224716146..9afb5176a7c 100644
--- a/bgfx/shaders/metal/chains/hqx/fs_hq4x.bin
+++ b/bgfx/shaders/metal/chains/hqx/fs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hqx/vs_hq2x.bin b/bgfx/shaders/metal/chains/hqx/vs_hq2x.bin
index 095556821f3..8620ee99b1f 100644
--- a/bgfx/shaders/metal/chains/hqx/vs_hq2x.bin
+++ b/bgfx/shaders/metal/chains/hqx/vs_hq2x.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hqx/vs_hq3x.bin b/bgfx/shaders/metal/chains/hqx/vs_hq3x.bin
index 095556821f3..8620ee99b1f 100644
--- a/bgfx/shaders/metal/chains/hqx/vs_hq3x.bin
+++ b/bgfx/shaders/metal/chains/hqx/vs_hq3x.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/hqx/vs_hq4x.bin b/bgfx/shaders/metal/chains/hqx/vs_hq4x.bin
index 095556821f3..8620ee99b1f 100644
--- a/bgfx/shaders/metal/chains/hqx/vs_hq4x.bin
+++ b/bgfx/shaders/metal/chains/hqx/vs_hq4x.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/fs_blit.bin b/bgfx/shaders/metal/chains/misc/fs_blit.bin
index c543c8b244a..54401a846b4 100644
--- a/bgfx/shaders/metal/chains/misc/fs_blit.bin
+++ b/bgfx/shaders/metal/chains/misc/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.bin
index 96ae25efec6..fc2eb358303 100644
--- a/bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/fs_deposterize-pass0.bin b/bgfx/shaders/metal/chains/misc/fs_deposterize-pass0.bin
index 738e44ec013..570a3dc2de1 100644
--- a/bgfx/shaders/metal/chains/misc/fs_deposterize-pass0.bin
+++ b/bgfx/shaders/metal/chains/misc/fs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/fs_deposterize-pass1.bin b/bgfx/shaders/metal/chains/misc/fs_deposterize-pass1.bin
index d77cc36ecc6..69ef3ee3808 100644
--- a/bgfx/shaders/metal/chains/misc/fs_deposterize-pass1.bin
+++ b/bgfx/shaders/metal/chains/misc/fs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/fs_saturation.bin b/bgfx/shaders/metal/chains/misc/fs_saturation.bin
index 494fa58514a..530f84eded8 100644
--- a/bgfx/shaders/metal/chains/misc/fs_saturation.bin
+++ b/bgfx/shaders/metal/chains/misc/fs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/vs_blit.bin b/bgfx/shaders/metal/chains/misc/vs_blit.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/misc/vs_blit.bin
+++ b/bgfx/shaders/metal/chains/misc/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/vs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/metal/chains/misc/vs_bob-and-ghost-deinterlace.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/misc/vs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/metal/chains/misc/vs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin
index c2c7580e082..6de757fba35 100644
--- a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin
+++ b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin
index 363eec8c5be..325433ec846 100644
--- a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin
+++ b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/vs_saturation.bin b/bgfx/shaders/metal/chains/misc/vs_saturation.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/misc/vs_saturation.bin
+++ b/bgfx/shaders/metal/chains/misc/vs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_gaussian.bin b/bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_gaussian.bin
index d5eec6c4364..bd8d54d282e 100644
--- a/bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_offset_sat.bin b/bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_offset_sat.bin
index 494fa58514a..530f84eded8 100644
--- a/bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_left_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_gaussian.bin b/bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_gaussian.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_offset_sat.bin b/bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_offset_sat.bin
index 1dcddb5feb3..6e5e896016a 100644
--- a/bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_left_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_gaussian.bin b/bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_gaussian.bin
index d5eec6c4364..bd8d54d282e 100644
--- a/bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_offset_sat.bin b/bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_offset_sat.bin
index 494fa58514a..530f84eded8 100644
--- a/bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_left_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_gaussian.bin b/bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_gaussian.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_offset_sat.bin b/bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_offset_sat.bin
index 63f1b39764b..4194792b145 100644
--- a/bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_left_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_gaussian.bin b/bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_gaussian.bin
index d5eec6c4364..bd8d54d282e 100644
--- a/bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_gaussian.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_offset_sat.bin b/bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_offset_sat.bin
index 494fa58514a..530f84eded8 100644
--- a/bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_offset_sat.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_right_horizontal/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_gaussian.bin b/bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_gaussian.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_gaussian.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_offset_sat.bin b/bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_offset_sat.bin
index 8d74facfc7e..7a2f0d153d1 100644
--- a/bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_offset_sat.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_right_horizontal/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_gaussian.bin b/bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_gaussian.bin
index d5eec6c4364..bd8d54d282e 100644
--- a/bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_gaussian.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_offset_sat.bin b/bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_offset_sat.bin
index 494fa58514a..530f84eded8 100644
--- a/bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_offset_sat.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_right_vertical/fs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_gaussian.bin b/bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_gaussian.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_gaussian.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_gaussian.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_offset_sat.bin b/bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_offset_sat.bin
index 87d7a813dd8..c34711bcf40 100644
--- a/bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_offset_sat.bin
+++ b/bgfx/shaders/metal/chains/pillarbox_right_vertical/vs_offset_sat.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/unfiltered/fs_blit.bin b/bgfx/shaders/metal/chains/unfiltered/fs_blit.bin
index c543c8b244a..54401a846b4 100644
--- a/bgfx/shaders/metal/chains/unfiltered/fs_blit.bin
+++ b/bgfx/shaders/metal/chains/unfiltered/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/unfiltered/vs_blit.bin b/bgfx/shaders/metal/chains/unfiltered/vs_blit.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/unfiltered/vs_blit.bin
+++ b/bgfx/shaders/metal/chains/unfiltered/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/metal/chains/warp/fs_dilation-horizontal-fast.bin
index 8e41dbec899..f24c6986452 100644
--- a/bgfx/shaders/metal/chains/warp/fs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/metal/chains/warp/fs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/warp/vs_dilation-horizontal-fast.bin b/bgfx/shaders/metal/chains/warp/vs_dilation-horizontal-fast.bin
index 054969073be..c755383c899 100644
--- a/bgfx/shaders/metal/chains/warp/vs_dilation-horizontal-fast.bin
+++ b/bgfx/shaders/metal/chains/warp/vs_dilation-horizontal-fast.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv1-noblend.bin b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv1-noblend.bin
index d5aeaa39533..8dc3522ba6b 100644
--- a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-3d.bin b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-3d.bin
index c7618a2d96f..1f3c41ca9aa 100644
--- a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-fast.bin b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-fast.bin
index 4883fe8edf4..ac77c156058 100644
--- a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-noblend.bin b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-noblend.bin
index f3617dd9645..1f51a84f6b8 100644
--- a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2.bin b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2.bin
index c01d49c6c54..12c9017cd96 100644
--- a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2.bin
+++ b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3-noblend.bin b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3-noblend.bin
index cd0fde65e4e..04280ae7702 100644
--- a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3.bin b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3.bin
index 53a3c4a0d2e..2e1e6304e8f 100644
--- a/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3.bin
+++ b/bgfx/shaders/metal/chains/xbr/fs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
index 7a56d20c316..f72964eb8d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
index ab70f2037f0..3aee043f7d1 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
index 6c9013b9e0e..8b5d8941d26 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
index 47d53b085d6..c06a395b64c 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
index 6ebf3f33bb5..612c4f73972 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
index db304a4f4c7..cf2a87dc762 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
index 46f8ed8ae14..0eb842c16ea 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
index ab70f2037f0..3aee043f7d1 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
index 7ee7c510287..e640c12e7ad 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
index b68045db359..4a8cae3b91d 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
index aa788a6392a..7b8e5d3f26d 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
index 3880f36026b..c4df62e82b3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
index 1e1ecfbc9a8..1057d70d44e 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass0.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
index 3e99cdec387..aca87eb7fc8 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass1.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
index 54ca8f7e183..667bdeba2d9 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
index 0db300e0bf5..caaac30c702 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/fs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
index ff190df14b2..dc03ac9d3e0 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
index ff190df14b2..dc03ac9d3e0 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
index ff190df14b2..dc03ac9d3e0 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass0.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
index 743e54fb2ee..923af0593b6 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass1.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass2.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
index ff190df14b2..dc03ac9d3e0 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass3.bin b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
index ff190df14b2..dc03ac9d3e0 100644
--- a/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
+++ b/bgfx/shaders/metal/chains/xbr/super-xbr/vs_super-xbr-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv1-noblend.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv1-noblend.bin
index af5655aca10..2e495b3ad6e 100644
--- a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv1-noblend.bin
+++ b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv1-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-3d.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-3d.bin
index ac2d2c9b499..71be0e5fe2a 100644
--- a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-3d.bin
+++ b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-3d.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-fast.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-fast.bin
index fd3ca82c758..cb8894a55ba 100644
--- a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-fast.bin
+++ b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-fast.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-noblend.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-noblend.bin
+++ b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2.bin
+++ b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.bin
+++ b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3-noblend.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin
+++ b/bgfx/shaders/metal/chains/xbr/vs_xbr-lv3.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
index 465afe6117d..429a13b2bc1 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
index 2f6196898c0..9849e6c3ed3 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
index f8430547e7a..b53174a7269 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
index 4e47ceddf21..d722298fad4 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
index 3e6712b9bb0..6dc3f559c7f 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
index ec246dfcdb5..da0f5c612f1 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
index fe627290828..ed67f9e2948 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
index e6fb34bd69a..05ad051ff2c 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
index c2629c6f746..2f88cba6236 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
index a6a920f4e6a..4b08f82ff76 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
index 87aacf70a2a..cbddcc0df36 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
index fee2c93aa94..e54ea8c75bc 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
index 2ad81f7c2ce..ecc2432dbf1 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
index 5e34d8f4fa2..4bc959a014d 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
index dca28c3d13a..98509f0e715 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
index 51daeaebb31..0d9f9f420c1 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
index 57bdf043de1..eb51e5a6c03 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
index 57bdf043de1..eb51e5a6c03 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
index 57bdf043de1..eb51e5a6c03 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
index ea7580919b1..f4f53b267f7 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
index 3396ab281ed..84a20fa5d36 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
index 1ac898c4e92..7e60e8365bd 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
index 1aa59796606..2ea326b9883 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
index e69072f94eb..07b90e8d573 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
index 5f3e8b5c6e8..0660500d16e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
index 22df31dd857..c9d402c21ca 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
index b27eef5a986..7be0a6432dc 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
index 04b0b340913..a3f28599c2e 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
index 31ea10a8ee7..95b9dafeb10 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
index 31ea10a8ee7..95b9dafeb10 100644
--- a/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
+++ b/bgfx/shaders/metal/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin
Binary files differ
diff --git a/bgfx/shaders/metal/fs_gui.bin b/bgfx/shaders/metal/fs_gui.bin
index c543c8b244a..54401a846b4 100644
--- a/bgfx/shaders/metal/fs_gui.bin
+++ b/bgfx/shaders/metal/fs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/metal/fs_screen.bin b/bgfx/shaders/metal/fs_screen.bin
index c543c8b244a..54401a846b4 100644
--- a/bgfx/shaders/metal/fs_screen.bin
+++ b/bgfx/shaders/metal/fs_screen.bin
Binary files differ
diff --git a/bgfx/shaders/metal/vs_gui.bin b/bgfx/shaders/metal/vs_gui.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/vs_gui.bin
+++ b/bgfx/shaders/metal/vs_gui.bin
Binary files differ
diff --git a/bgfx/shaders/metal/vs_screen.bin b/bgfx/shaders/metal/vs_screen.bin
index 10028eaad64..00695b802d3 100644
--- a/bgfx/shaders/metal/vs_screen.bin
+++ b/bgfx/shaders/metal/vs_screen.bin
Binary files differ
diff --git a/scripts/src/3rdparty.lua b/scripts/src/3rdparty.lua
index 38961dd045e..2670b723b02 100644
--- a/scripts/src/3rdparty.lua
+++ b/scripts/src/3rdparty.lua
@@ -782,23 +782,83 @@ project "bx"
includedirs {
MAME_DIR .. "3rdparty/bx/include",
+ MAME_DIR .. "3rdparty/bx/3rdparty",
}
files {
+ MAME_DIR .. "3rdparty/bx/src/allocator.cpp",
MAME_DIR .. "3rdparty/bx/src/bx.cpp",
MAME_DIR .. "3rdparty/bx/src/commandline.cpp",
MAME_DIR .. "3rdparty/bx/src/crtnone.cpp",
- MAME_DIR .. "3rdparty/bx/src/crtimpl.cpp",
MAME_DIR .. "3rdparty/bx/src/debug.cpp",
MAME_DIR .. "3rdparty/bx/src/dtoa.cpp",
- MAME_DIR .. "3rdparty/bx/src/fpumath.cpp",
+ MAME_DIR .. "3rdparty/bx/src/easing.cpp",
+ MAME_DIR .. "3rdparty/bx/src/file.cpp",
+ MAME_DIR .. "3rdparty/bx/src/filepath.cpp",
+ MAME_DIR .. "3rdparty/bx/src/hash.cpp",
+ MAME_DIR .. "3rdparty/bx/src/math.cpp",
MAME_DIR .. "3rdparty/bx/src/mutex.cpp",
MAME_DIR .. "3rdparty/bx/src/os.cpp",
+ MAME_DIR .. "3rdparty/bx/src/process.cpp",
MAME_DIR .. "3rdparty/bx/src/semaphore.cpp",
+ MAME_DIR .. "3rdparty/bx/src/settings.cpp",
MAME_DIR .. "3rdparty/bx/src/sort.cpp",
MAME_DIR .. "3rdparty/bx/src/string.cpp",
- MAME_DIR .. "3rdparty/bx/src/timer.cpp",
MAME_DIR .. "3rdparty/bx/src/thread.cpp",
+ MAME_DIR .. "3rdparty/bx/src/timer.cpp",
+ MAME_DIR .. "3rdparty/bx/src/url.cpp",
+ }
+
+--------------------------------------------------
+-- BIMG library objects
+--------------------------------------------------
+
+project "bimg"
+ uuid "5603611b-8bf8-4ffd-85bc-76858cd7df39"
+ kind "StaticLib"
+
+ includedirs {
+ MAME_DIR .. "3rdparty/bx/include",
+ }
+
+ configuration { "vs*" }
+ includedirs {
+ MAME_DIR .. "3rdparty/bx/include/compat/msvc",
+ }
+ configuration { "mingw*" }
+ includedirs {
+ MAME_DIR .. "3rdparty/bx/include/compat/mingw",
+ }
+
+ configuration { "osx* or xcode4" }
+ includedirs {
+ MAME_DIR .. "3rdparty/bx/include/compat/osx",
+ }
+
+ configuration { "freebsd" }
+ includedirs {
+ MAME_DIR .. "3rdparty/bx/include/compat/freebsd",
+ }
+
+ configuration { "netbsd" }
+ includedirs {
+ MAME_DIR .. "3rdparty/bx/include/compat/freebsd",
+ }
+
+ configuration { }
+
+ defines {
+ "__STDC_LIMIT_MACROS",
+ "__STDC_FORMAT_MACROS",
+ "__STDC_CONSTANT_MACROS",
+ }
+
+ includedirs {
+ MAME_DIR .. "3rdparty/bimg/include",
+ }
+
+ files {
+ MAME_DIR .. "3rdparty/bimg/src/image.cpp",
}
--------------------------------------------------
@@ -829,6 +889,7 @@ end
MAME_DIR .. "3rdparty/bgfx/include",
MAME_DIR .. "3rdparty/bgfx/3rdparty",
MAME_DIR .. "3rdparty/bx/include",
+ MAME_DIR .. "3rdparty/bimg/include",
MAME_DIR .. "3rdparty/bgfx/3rdparty/dxsdk/include",
}
@@ -923,30 +984,28 @@ end
}
files {
MAME_DIR .. "3rdparty/bgfx/src/bgfx.cpp",
+ MAME_DIR .. "3rdparty/bgfx/src/debug_renderdoc.cpp",
MAME_DIR .. "3rdparty/bgfx/src/glcontext_egl.cpp",
MAME_DIR .. "3rdparty/bgfx/src/glcontext_glx.cpp",
- MAME_DIR .. "3rdparty/bgfx/src/glcontext_ppapi.cpp",
MAME_DIR .. "3rdparty/bgfx/src/glcontext_wgl.cpp",
- MAME_DIR .. "3rdparty/bgfx/src/image.cpp",
MAME_DIR .. "3rdparty/bgfx/src/hmd.cpp",
MAME_DIR .. "3rdparty/bgfx/src/hmd_ovr.cpp",
MAME_DIR .. "3rdparty/bgfx/src/hmd_openvr.cpp",
- MAME_DIR .. "3rdparty/bgfx/src/renderer_d3d12.cpp",
+ MAME_DIR .. "3rdparty/bgfx/src/nvapi.cpp",
MAME_DIR .. "3rdparty/bgfx/src/renderer_d3d11.cpp",
+ MAME_DIR .. "3rdparty/bgfx/src/renderer_d3d12.cpp",
MAME_DIR .. "3rdparty/bgfx/src/renderer_d3d9.cpp",
MAME_DIR .. "3rdparty/bgfx/src/renderer_gl.cpp",
MAME_DIR .. "3rdparty/bgfx/src/renderer_gnm.cpp",
MAME_DIR .. "3rdparty/bgfx/src/renderer_noop.cpp",
MAME_DIR .. "3rdparty/bgfx/src/renderer_vk.cpp",
- MAME_DIR .. "3rdparty/bgfx/src/debug_renderdoc.cpp",
MAME_DIR .. "3rdparty/bgfx/src/shader.cpp",
- MAME_DIR .. "3rdparty/bgfx/src/shader_dxbc.cpp",
MAME_DIR .. "3rdparty/bgfx/src/shader_dx9bc.cpp",
+ MAME_DIR .. "3rdparty/bgfx/src/shader_dxbc.cpp",
MAME_DIR .. "3rdparty/bgfx/src/shader_spirv.cpp",
MAME_DIR .. "3rdparty/bgfx/src/topology.cpp",
MAME_DIR .. "3rdparty/bgfx/src/vertexdecl.cpp",
MAME_DIR .. "3rdparty/bgfx/examples/common/imgui/imgui.cpp",
- MAME_DIR .. "3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp",
MAME_DIR .. "3rdparty/bgfx/examples/common/nanovg/nanovg.cpp",
MAME_DIR .. "3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp",
MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp",
diff --git a/scripts/src/main.lua b/scripts/src/main.lua
index 5e189aa3ef1..075f850a95f 100644
--- a/scripts/src/main.lua
+++ b/scripts/src/main.lua
@@ -296,6 +296,7 @@ end
end
links {
"bgfx",
+ "bimg",
"bx",
"ocore_" .. _OPTIONS["osd"],
}
diff --git a/src/osd/modules/debugger/debugimgui.cpp b/src/osd/modules/debugger/debugimgui.cpp
index 293ac0229df..11e19b261eb 100644
--- a/src/osd/modules/debugger/debugimgui.cpp
+++ b/src/osd/modules/debugger/debugimgui.cpp
@@ -184,7 +184,6 @@ private:
const char* font_name;
float font_size;
ImVec2 m_text_size; // size of character (assumes monospaced font is in use)
- ImguiFontHandle m_font;
uint8_t m_key_char;
bool m_hide;
int m_win_count; // number of active windows, does not decrease, used to ID individual windows
@@ -677,7 +676,7 @@ void debug_imgui::draw_view(debug_area* view_ptr, bool exp_change)
void debug_imgui::draw_bpoints(debug_area* view_ptr, bool* opened)
{
- ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiSetCond_Once);
+ ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiCond_Once);
if(ImGui::Begin(view_ptr->title.c_str(),opened))
{
view_ptr->is_collapsed = false;
@@ -723,7 +722,7 @@ void debug_imgui::add_wpoints(int id)
void debug_imgui::draw_log(debug_area* view_ptr, bool* opened)
{
- ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiSetCond_Once);
+ ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiCond_Once);
if(ImGui::Begin(view_ptr->title.c_str(),opened))
{
view_ptr->is_collapsed = false;
@@ -757,7 +756,7 @@ void debug_imgui::draw_disasm(debug_area* view_ptr, bool* opened)
{
const debug_view_source* src;
- ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiSetCond_Once);
+ ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiCond_Once);
if(ImGui::Begin(view_ptr->title.c_str(),opened,ImGuiWindowFlags_MenuBar))
{
int idx;
@@ -844,7 +843,7 @@ void debug_imgui::draw_memory(debug_area* view_ptr, bool* opened)
{
const debug_view_source* src;
- ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiSetCond_Once);
+ ImGui::SetNextWindowSize(ImVec2(view_ptr->width,view_ptr->height + ImGui::GetTextLineHeight()),ImGuiCond_Once);
if(ImGui::Begin(view_ptr->title.c_str(),opened,ImGuiWindowFlags_MenuBar))
{
int idx;
@@ -1241,7 +1240,7 @@ void debug_imgui::draw_console()
rgb_t base(0xe6, 0xff, 0xff, 0xff);
ImGuiWindowFlags flags = ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse;
- ImGui::SetNextWindowSize(ImVec2(view_main_regs->width + view_main_disasm->width,view_main_disasm->height + view_main_console->height + ImGui::GetTextLineHeight()*3),ImGuiSetCond_Once);
+ ImGui::SetNextWindowSize(ImVec2(view_main_regs->width + view_main_disasm->width,view_main_disasm->height + view_main_console->height + ImGui::GetTextLineHeight()*3),ImGuiCond_Once);
if(ImGui::Begin(view_main_console->title.c_str(), nullptr,flags))
{
std::string str;
@@ -1383,7 +1382,6 @@ void debug_imgui::update()
ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered,ImVec4(0.7f,0.7f,0.7f,0.8f));
ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive,ImVec4(0.9f,0.9f,0.9f,0.8f));
ImGui::PushStyleColor(ImGuiCol_Border,ImVec4(0.7f,0.7f,0.7f,0.8f));
- ImGui::PushStyleColor(ImGuiCol_ComboBg,ImVec4(0.4f,0.4f,0.4f,0.9f));
m_text_size = ImGui::CalcTextSize("A"); // hopefully you're using a monospaced font...
draw_console(); // We'll always have a console window
@@ -1425,7 +1423,7 @@ void debug_imgui::update()
global_free(to_delete);
}
- ImGui::PopStyleColor(13);
+ ImGui::PopStyleColor(12);
}
void debug_imgui::init_debugger(running_machine &machine)
@@ -1478,8 +1476,7 @@ void debug_imgui::init_debugger(running_machine &machine)
io.Fonts->AddFontDefault();
else
io.Fonts->AddFontFromFileTTF(font_name,font_size); // for now, font name must be a path to a TTF file
- m_font = imguiCreate();
- imguiSetFont(m_font);
+ imguiCreate();
}
void debug_imgui::wait_for_debugger(device_t &device, bool firststop)
diff --git a/src/osd/modules/render/bgfx/chainentry.cpp b/src/osd/modules/render/bgfx/chainentry.cpp
index a53ed759940..4e27cb8c00b 100644
--- a/src/osd/modules/render/bgfx/chainentry.cpp
+++ b/src/osd/modules/render/bgfx/chainentry.cpp
@@ -12,7 +12,7 @@
#include "emu.h"
#include <bgfx/bgfx.h>
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include "chainentry.h"
@@ -57,8 +57,6 @@ bgfx_chain_entry::~bgfx_chain_entry()
void bgfx_chain_entry::submit(int view, render_primitive* prim, texture_manager& textures, uint16_t screen_count, uint16_t screen_width, uint16_t screen_height, float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, uint32_t rotation_type, bool swap_xy, uint64_t blend, int32_t screen)
{
- bgfx::setViewSeq(view, true);
-
if (!setup_view(view, screen_width, screen_height, screen))
{
return;
@@ -71,7 +69,7 @@ void bgfx_chain_entry::submit(int view, render_primitive* prim, texture_manager&
bgfx::TransientVertexBuffer buffer;
put_screen_buffer(prim, &buffer);
- bgfx::setVertexBuffer(&buffer);
+ bgfx::setVertexBuffer(0,&buffer);
setup_auto_uniforms(prim, textures, screen_count, screen_width, screen_height, screen_scale_x, screen_scale_y, screen_offset_x, screen_offset_y, rotation_type, swap_xy, screen);
@@ -260,8 +258,10 @@ bool bgfx_chain_entry::setup_view(int view, uint16_t screen_width, uint16_t scre
bgfx::setViewFrameBuffer(view, handle);
bgfx::setViewRect(view, 0, 0, width, height);
+ const bgfx::Caps* caps = bgfx::getCaps();
+
float projMat[16];
- bx::mtxOrtho(projMat, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
+ bx::mtxOrtho(projMat, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth);
bgfx::setViewTransform(view, nullptr, projMat);
m_clear->bind(view);
diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp
index f3b12dfa125..393344016e8 100644
--- a/src/osd/modules/render/bgfx/chainmanager.cpp
+++ b/src/osd/modules/render/bgfx/chainmanager.cpp
@@ -10,7 +10,7 @@
//============================================================
#include <bx/readerwriter.h>
-#include <bx/crtimpl.h>
+#include <bx/file.h>
#include "emu.h"
#include "../frontend/mame/ui/slider.h"
@@ -143,7 +143,7 @@ bgfx_chain* chain_manager::load_chain(std::string name, uint32_t screen_index)
osd_subst_env(path, util::string_format("%s" PATH_SEPARATOR "chains" PATH_SEPARATOR, m_options.bgfx_path()));
path += name;
- bx::CrtFileReader reader;
+ bx::FileReader reader;
if (!bx::open(&reader, path.c_str()))
{
printf("Unable to open chain file %s, falling back to no post processing\n", path.c_str());
diff --git a/src/osd/modules/render/bgfx/effect.cpp b/src/osd/modules/render/bgfx/effect.cpp
index 7e0750a73a2..fb3d7d933ba 100644
--- a/src/osd/modules/render/bgfx/effect.cpp
+++ b/src/osd/modules/render/bgfx/effect.cpp
@@ -36,7 +36,7 @@ bgfx_effect::~bgfx_effect()
delete uniform.second;
}
m_uniforms.clear();
- bgfx::destroyProgram(m_program_handle);
+ bgfx::destroy(m_program_handle);
}
void bgfx_effect::submit(int view, uint64_t blend)
diff --git a/src/osd/modules/render/bgfx/effectmanager.cpp b/src/osd/modules/render/bgfx/effectmanager.cpp
index 8627650aae2..6462ae75f72 100644
--- a/src/osd/modules/render/bgfx/effectmanager.cpp
+++ b/src/osd/modules/render/bgfx/effectmanager.cpp
@@ -13,7 +13,7 @@
#include <rapidjson/error/en.h>
#include <bx/readerwriter.h>
-#include <bx/crtimpl.h>
+#include <bx/file.h>
#include "emu.h"
@@ -55,7 +55,7 @@ bgfx_effect* effect_manager::load_effect(std::string name)
osd_subst_env(path, util::string_format("%s" PATH_SEPARATOR "effects" PATH_SEPARATOR, m_options.bgfx_path()));
path += full_name;
- bx::CrtFileReader reader;
+ bx::FileReader reader;
if (!bx::open(&reader, path.c_str()))
{
printf("Unable to open effect file %s\n", path.c_str());
diff --git a/src/osd/modules/render/bgfx/shadermanager.cpp b/src/osd/modules/render/bgfx/shadermanager.cpp
index c4a92e1ff32..7583b58dec5 100644
--- a/src/osd/modules/render/bgfx/shadermanager.cpp
+++ b/src/osd/modules/render/bgfx/shadermanager.cpp
@@ -9,9 +9,9 @@
//
//============================================================
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include <bx/readerwriter.h>
-#include <bx/crtimpl.h>
+#include <bx/file.h>
#include "emu.h"
@@ -23,7 +23,7 @@ shader_manager::~shader_manager()
{
for (std::pair<std::string, bgfx::ShaderHandle> shader : m_shaders)
{
- bgfx::destroyShader(shader.second);
+ bgfx::destroy(shader.second);
}
m_shaders.clear();
}
@@ -96,7 +96,7 @@ bgfx::ShaderHandle shader_manager::load_shader(std::string name)
const bgfx::Memory* shader_manager::load_mem(std::string name)
{
- bx::CrtFileReader reader;
+ bx::FileReader reader;
if (bx::open(&reader, name.c_str()))
{
uint32_t size(bx::getSize(&reader));
diff --git a/src/osd/modules/render/bgfx/target.cpp b/src/osd/modules/render/bgfx/target.cpp
index 74b284dfb1d..a5feee73b2e 100644
--- a/src/osd/modules/render/bgfx/target.cpp
+++ b/src/osd/modules/render/bgfx/target.cpp
@@ -80,15 +80,15 @@ bgfx_target::~bgfx_target()
{
for (int page = 0; page < m_page_count; page++)
{
- bgfx::destroyFrameBuffer(m_targets[page]);
- bgfx::destroyTexture(m_textures[page]);
+ bgfx::destroy(m_targets[page]);
+ bgfx::destroy(m_textures[page]);
}
delete [] m_textures;
delete [] m_targets;
}
else
{
- bgfx::destroyFrameBuffer(m_targets[0]);
+ bgfx::destroy(m_targets[0]);
delete [] m_targets;
}
}
diff --git a/src/osd/modules/render/bgfx/texture.cpp b/src/osd/modules/render/bgfx/texture.cpp
index ac2d9008568..ecbf51121ab 100644
--- a/src/osd/modules/render/bgfx/texture.cpp
+++ b/src/osd/modules/render/bgfx/texture.cpp
@@ -45,5 +45,5 @@ bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, u
bgfx_texture::~bgfx_texture()
{
- bgfx::destroyTexture(m_texture);
+ bgfx::destroy(m_texture);
}
diff --git a/src/osd/modules/render/bgfx/texturemanager.cpp b/src/osd/modules/render/bgfx/texturemanager.cpp
index 3e404635bab..61be4f8f247 100644
--- a/src/osd/modules/render/bgfx/texturemanager.cpp
+++ b/src/osd/modules/render/bgfx/texturemanager.cpp
@@ -94,7 +94,7 @@ bgfx::TextureHandle texture_manager::handle(std::string name)
handle = (iter->second)->texture();
}
- assert(handle.idx != bgfx::invalidHandle);
+ assert(handle.idx != bgfx::kInvalidHandle);
return handle;
}
diff --git a/src/osd/modules/render/bgfx/uniform.cpp b/src/osd/modules/render/bgfx/uniform.cpp
index 780705d8371..ef33c11f128 100644
--- a/src/osd/modules/render/bgfx/uniform.cpp
+++ b/src/osd/modules/render/bgfx/uniform.cpp
@@ -23,7 +23,7 @@ bgfx_uniform::bgfx_uniform(std::string name, bgfx::UniformType::Enum type)
bgfx_uniform::~bgfx_uniform()
{
- bgfx::destroyUniform(m_handle);
+ bgfx::destroy(m_handle);
delete [] m_data;
}
diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp
index 31ddc58c145..b3c65db7b86 100644
--- a/src/osd/modules/render/drawbgfx.cpp
+++ b/src/osd/modules/render/drawbgfx.cpp
@@ -5,7 +5,7 @@
// drawbgfx.cpp - BGFX renderer
//
//============================================================
-#include <bx/fpumath.h>
+#include <bx/math.h>
#include <bx/readerwriter.h>
#if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS) || defined(OSD_UWP)
@@ -103,7 +103,7 @@ renderer_bgfx::~renderer_bgfx()
m_targets->destroy_target("avibuffer0");
m_avi_target = nullptr;
- bgfx::destroyTexture(m_avi_texture);
+ bgfx::destroy(m_avi_texture);
delete m_avi_writer;
delete [] m_avi_data;
@@ -341,7 +341,7 @@ void renderer_bgfx::record()
m_avi_writer->stop();
m_targets->destroy_target("avibuffer0");
m_avi_target = nullptr;
- bgfx::destroyTexture(m_avi_texture);
+ bgfx::destroy(m_avi_texture);
}
else
{
@@ -474,14 +474,13 @@ void renderer_bgfx::render_post_screen_quad(int view, render_primitive* prim, bg
}
uint32_t blend = PRIMFLAG_GET_BLENDMODE(prim->flags);
- bgfx::setVertexBuffer(buffer);
+ bgfx::setVertexBuffer(0,buffer);
bgfx::setTexture(0, m_screen_effect[blend]->uniform("s_tex")->handle(), m_targets->target(screen, "output")->texture(), texture_flags);
m_screen_effect[blend]->submit(view);
}
void renderer_bgfx::render_avi_quad()
{
- bgfx::setViewSeq(s_current_view, true);
bgfx::setViewRect(s_current_view, 0, 0, m_width[0], m_height[0]);
bgfx::setViewClear(s_current_view, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x00000000, 1.0f, 0);
@@ -504,7 +503,7 @@ void renderer_bgfx::render_avi_quad()
vertex(&vertices[4], x[2], y[2], 0, rgba, u[2], v[2]);
vertex(&vertices[5], x[0], y[0], 0, rgba, u[0], v[0]);
- bgfx::setVertexBuffer(&buffer);
+ bgfx::setVertexBuffer(0,&buffer);
bgfx::setTexture(0, m_gui_effect[PRIMFLAG_GET_BLENDMODE(BLENDMODE_NONE)]->uniform("s_tex")->handle(), m_avi_target->texture());
m_gui_effect[PRIMFLAG_GET_BLENDMODE(BLENDMODE_NONE)]->submit(s_current_view);
s_current_view++;
@@ -544,11 +543,11 @@ void renderer_bgfx::render_textured_quad(render_primitive* prim, bgfx::Transient
bgfx_effect** effects = PRIMFLAG_GET_SCREENTEX(prim->flags) ? m_screen_effect : m_gui_effect;
uint32_t blend = PRIMFLAG_GET_BLENDMODE(prim->flags);
- bgfx::setVertexBuffer(buffer);
+ bgfx::setVertexBuffer(0,buffer);
bgfx::setTexture(0, effects[blend]->uniform("s_tex")->handle(), texture);
effects[blend]->submit(m_ui_view);
- bgfx::destroyTexture(texture);
+ bgfx::destroy(texture);
}
#define MAX_TEMP_COORDS 100
@@ -830,7 +829,7 @@ int renderer_bgfx::draw(int update)
if (status != BUFFER_EMPTY && status != BUFFER_SCREEN)
{
- bgfx::setVertexBuffer(&buffer);
+ bgfx::setVertexBuffer(0,&buffer);
bgfx::setTexture(0, m_gui_effect[blend]->uniform("s_tex")->handle(), m_texture_cache->texture());
m_gui_effect[blend]->submit(m_ui_view);
}
@@ -948,7 +947,6 @@ void renderer_bgfx::setup_view(uint32_t view_index, bool screen)
bgfx::setViewFrameBuffer(view_index, m_framebuffer->target());
}
- bgfx::setViewSeq(view_index, true);
bgfx::setViewRect(view_index, 0, 0, width, height);
#if SCENE_VIEW
@@ -983,6 +981,7 @@ void renderer_bgfx::setup_matrices(uint32_t view_index, bool screen)
float proj[16];
float view[16];
+ const bgfx::Caps* caps = bgfx::getCaps();
if (screen)
{
static float offset = 0.0f;
@@ -995,12 +994,12 @@ void renderer_bgfx::setup_matrices(uint32_t view_index, bool screen)
float eye[3] = { width * 0.5f, eye_height, cam_z };
bx::mtxLookAt(view, eye, at, up);
- bx::mtxProj(proj, 90.0f, float(width) / float(height), 0.1f, 5000.0f);
+ bx::mtxProj(proj, 90.0f, float(width) / float(height), 0.1f, 5000.0f, bgfx::getCaps()->homogeneousDepth);
}
else
{
bx::mtxIdentity(view);
- bx::mtxOrtho(proj, 0.0f, width, height, 0.0f, 0.0f, 100.0f);
+ bx::mtxOrtho(proj, 0.0f, width, height, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth);
}
bgfx::setViewTransform(view_index, view, proj);